/// <summary> /// 销售出库、退货 /// </summary> /// <param name="easModel">Kis数据</param> /// <param name="isSave">是否保存为提交状态</param> /// <param name="isAgain">是否重新导入</param> /// <param name="enableEas">是否启用Kis</param> /// <param name="isData">是否只取xml数据</param> /// <returns>Result</returns> /// <remarks>2013-9-22 杨浩 创建</remarks> public static Result <string> SaleIssueBillFacade(Hyt.Model.LiJiaSyncLog easModel, bool isSave = false, bool isAgain = false, bool enableEas = true, bool isData = false) { var sale = easModel.Data.ToObject <SaleInfoWraper>(); List <SaleInfo> model = sale.Model; 出库状态 type = sale.Type; string customer = sale.Customer; string description = sale.Description; string flowIdentify = easModel.FlowIdentify; string dataMd5 = easModel.DataMd5; var name = 出库状态.出库 == type ? "销售出库" : "销售退货"; var watch = new Stopwatch(); watch.Start(); var result = new Eas.SaleIssueBillFacade.Result(); #region 数据初始 var firstModel = model.FirstOrDefault(); int warehouseSysNo = firstModel != null ? firstModel.WarehouseSysNo : 0; //仓库编号 decimal voucherAmount = model.Sum(q => q.Amount); var organizationCode = firstModel != null ? firstModel.OrganizationCode : string.Empty; //组织架构 if (出库状态.退货 == type) { voucherAmount = -voucherAmount; } if (firstModel.WarehouseNumber.Contains("-")) { firstModel.WarehouseNumber = firstModel.WarehouseNumber.Split('-')[0]; } var saleInfo = model.FirstOrDefault(); string billNo = "XSCK" + (saleInfo.ItemID ?? 0) + easModel.FlowIdentify; var request = new StockOutAddRequset() { FBillNo = billNo, FEntryID = "0", Fdate = DateTime.Now.ToString("yyyy-MM-dd"), FConsignee = _userName, FDeptID = "", FEmpID = organizationCode, FExplanation = "", FFetchAdd = "", FFManagerID = "", FSaleStyle = "线上电商平台", FSManagerID = "", FCustID = string.IsNullOrWhiteSpace(saleInfo.DeliveryCustomer) ? config.FCustID : saleInfo.DeliveryCustomer,// "01.001.003", FDCStockID = firstModel.WarehouseNumber, FROB = 出库状态.出库 == type?"1":"-1", }; request.item = model.Select((q, i) => new JsonItem() { FItemID = q.ErpCode, Fauxqty = q.Quantity.ToString(), FItemName = "", FDCStockID = q.WarehouseNumber.Contains("-") ? q.WarehouseNumber.Split('-')[0] : q.WarehouseNumber, FUnitID = config.FUnitID,// "ping", FConsignPrice = decimal.Round(q.Amount / q.Quantity, 2).ToString("0.00"), FConsignAmount = q.Amount.ToString("0.00"), FDiscountAmount = q.DiscountAmount.ToString("0.00"), }).ToList(); string json = request.ToJson(); var datajson = new SaleInfoWraper { Model = model, Type = type, Customer = customer, Description = description }.ToJson(); if (isData) { return(new Result <string> { Data = json }); } #endregion #region 调用利嘉接口 步状态 status = 步状态.等待同步; if (enableEas && isAgain) { try { using (var service = new Pisen.Framework.Service.Proxy.ServiceProxy <Grand.Platform.Api.Contract.IErpService>()) { var response = service.Channel.LiJiaStockOutAdd(request); status = !response.IsError ? 步状态.成功 : 步状态.失败; result.status = !response.IsError; result.message = response.ErrMsg; result.statusCode = response.ErrCode; result.data = response.FBillNo; //_result.Data != null && _result.Data.Count > 0 ? _result.Data.First().OutFBillNo : ""; } } catch (Exception e) { result.message = e.Message; result.status = false; status = 步状态.失败; } } else { result.message = enableEas ? Model.EasConstant.EAS_WAIT : Model.EasConstant.EAS_MESSAGE_CLOSE; result.status = false; status = 步状态.等待同步; } #endregion watch.Stop(); var resultData = new Result <string> { Data = (result.data != null ?result.data.ToString() :""), Status = result.status, StatusCode = result.statusCode, Message = result.message }; //记录日志 int sysno = WriteLog(datajson, resultData, watch, name, 接口类型.销售出库退货, warehouseSysNo, description, flowIdentify, voucherAmount, status, isAgain); easModel.SysNo = sysno == 0 ? easModel.SysNo : sysno; //临时记录 检查是否重复 var content = " 订单编号:" + description + " 外部编号:" + request.FBillNo + " 请求时间:" + request.Fdate + " 返回结果:" + (result.status?result.data:result.message) + " 返回状态:" + result.status + "," + result.statusCode + " ElapseTime:" + watch.ElapsedMilliseconds; WriteLog(easModel.SysNo, content, request.Fdate, isAgain); return(resultData); }
/// <summary> /// 销售出库、退货 /// </summary> /// <param name="easModel">Eas数据</param> /// <param name="isSave">是否保存为提交状态</param> /// <param name="isAgain">是否重新导入</param> /// <param name="enableEas">是否启用Eas</param> /// <param name="isData">是否只取xml数据</param> /// <returns>Result</returns> /// <remarks>2013-9-22 杨浩 创建</remarks> public static Result <string> SaleIssueBillFacade(Hyt.Model.EasSyncLog easModel, bool isSave = false, bool isAgain = false, bool enableEas = true, bool isData = false) { var sale = easModel.Data.ToObject <SaleInfoWraper>(); List <SaleInfo> model = sale.Model; 出库状态 type = sale.Type; string customer = sale.Customer; string description = sale.Description; string flowIdentify = easModel.FlowIdentify; string dataMd5 = easModel.DataMd5; string sessionId = ""; var name = 出库状态.出库 == type ? "销售出库" : "销售退货"; var watch = new Stopwatch(); watch.Start(); var result = new Eas.SaleIssueBillFacade.Result(); #region 数据初始 var firstModel = model.FirstOrDefault(); int warehouseSysNo = firstModel != null ? firstModel.WarehouseSysNo : 0; //仓库编号 decimal voucherAmount = model.Sum(q => q.Amount); var organizationCode = firstModel != null ? firstModel.OrganizationCode : string.Empty; //组织架构 if (出库状态.退货 == type) { voucherAmount = -voucherAmount; } var datajson = new SaleInfoWraper { Model = model, Type = type, Customer = customer, Description = description }.ToJson(); var billHead = new Model.Sale.BillHead { number = "XSCK" + Number, //单据抬头编号 hasEffected = 0, fiVouchered = 0, isReversed = 0, isInitBill = 0, baseStatus = 4, year = DateTime.Now.Year, period = DateTime.Now.ToString("yyyyMM"), totalQty = model.Sum(q => q.Quantity), totalAmount = model.Sum(q => q.Amount), totalStandardCost = 0, totalActualCost = 0, creator = _userName, lastUpdateUser = _userName, bizType = (type == 出库状态.出库) ? 210 : 211, //210:普通销售,211:普通销售退货 billType = 102, //102:销售出库单 storageOrgUnit = organizationCode, //组织架构 transactionType = (type == 出库状态.出库) ? "010" : "011", // 010:普通销售出库,011:普通销售退货 createTime = DateTime.Now.ToString(dateFormater), lastUpdateTime = DateTime.Now.ToString(dateFormater), bizDate = DateTime.Now.ToString(dateFormater), isSysBill = 0, currency = "RMB", exchangeRate = 1, paymentType = "002", //赊销 customer = customer, //商城客户(如果为升舱订单 客服编号就要对应) handler = _userName, description = description, dingdanleixing = "001" //001 常单 }; var billEntries = model.Select((q, i) => new Model.Sale.entry { isPresent = q.IsPresent, baseStatus = 4, seq = 1 + i, qty = (type == 出库状态.出库)?q.Quantity:-q.Quantity, baseQty = (type == 出库状态.出库) ? q.Quantity : -q.Quantity, material = q.ErpCode, storageOrgUnit = string.Empty, //由eas查询,hyt不导入 warehouse = q.WarehouseNumber, stocker = string.Empty, //仓管员由eas查询 amount = (type == 出库状态.出库)? q.Amount:-q.Amount, //价税合计 localAmount = (type == 出库状态.出库) ? q.Amount : -q.Amount, //价税合计 remark = q.Remark, unit = string.Empty, baseUnit = string.Empty, discountType = -1, //折扣方式 discountAmount = q.DiscountAmount, //折扣额 price = decimal.Round(q.Amount / q.Quantity, 2), salePrice = decimal.Round((q.Amount / q.Quantity) / (decimal)1.17, 2),//不含税单价 writtenOffQty = q.Quantity, orderNumber = string.Empty, saleOrderNumber = string.Empty, saleOrderEntrySeq = string.Empty, taxRate = 17, tax = q.Amount - (decimal.Round((q.Amount / q.Quantity) / (decimal)1.17, 2) * q.Quantity), //不含税单价*税率*数量 * q.Quantity localTax = q.Amount - (decimal.Round((q.Amount / q.Quantity) / (decimal)1.17, 2) * q.Quantity), //不含税单价*税率*数量* q.Quantity //localPrice =((q.Amount / (decimal)1.17)), //不含税单价 EAS中不存在 nonTaxAmount = decimal.Round((q.Amount / q.Quantity) / (decimal)1.17, 2) * q.Quantity, localNonTaxAmount = decimal.Round((q.Amount / q.Quantity) / (decimal)1.17, 2) * q.Quantity, saleOrder = string.Empty, saleOrderEntry = string.Empty, coreBillType = "310", //销售订单 unReturnedBaseQty = q.Quantity, isLocked = 0, inventoryID = string.Empty, taxPrice = decimal.Round(q.Amount / q.Quantity, 2), actualPrice = decimal.Round(q.Amount / q.Quantity, 2), saleOrgUnit = GetOrganizeCode(organizationCode), // "301234", //默认电商中心,//eas查询 saleGroup = GetOrganizeCode(organizationCode), // salePerson = q.WarehouseNumber //销售员就是仓库编码 }).ToList(); var data = new SaleIssueBill { billHead = billHead, billEntries = billEntries, checkDuplicate = "true", thirdSysBillID = dataMd5 ?? Helper.MD5Encrypt(datajson), isSubmit = isSave ? "false" : "true", }; //按照Eas格式,去掉xmlns和空格 string xml = Helper.XmlSerialize(data) .Replace(xsi, "") .Replace(xsd, "") .Replace("utf-16", "UTF-8") .Trim(); if (isData) { return(new Result <string> { Data = xml }); } #endregion #region 调用外部Eas接口 步状态 status; if (enableEas && isAgain) { try { var context = ErpLogin(); sessionId = context.sessionId; var client = new Eas.SaleIssueBillFacade.WSSaleIssueBillFacadeSrvProxyService { Timeout = Settings.Default.Timeout, SessionId = new SoapUnknownHeader { Element = GetSessionHeader(sessionId) } }; if (sessionId != null) { result = client.importData(xml); } status = result.status ? 步状态.成功 : 步状态.失败; } catch (Exception e) { result.message = e.Message; result.status = false; status = 步状态.失败; } } else { result.message = enableEas ? Model.EasConstant.EAS_WAIT : Model.EasConstant.EAS_MESSAGE_CLOSE; result.status = false; status = 步状态.等待同步; } #endregion watch.Stop(); var resultData = new Result <string> { Data = (result.data != null ? result.data.ToString() : ""), Status = result.status, StatusCode = result.statusCode, Message = result.message }; //记录日志 int sysno = WriteLog(datajson, resultData, watch, name, 接口类型.销售出库退货, warehouseSysNo, description, flowIdentify, voucherAmount, status, isAgain); easModel.SysNo = sysno == 0 ? easModel.SysNo : sysno; //临时记录 检查是否重复 var content = " 订单编号:" + description + " 会话ID:" + sessionId + " 外部编号:" + data.thirdSysBillID + " 请求时间:" + billHead.createTime + " 返回结果:" + (result.status?result.data:result.message) + " 返回状态:" + result.status + "," + result.statusCode + " ElapseTime:" + watch.ElapsedMilliseconds; WriteLog(easModel.SysNo, content, billHead.createTime, isAgain); return(resultData); }