/// <summary> /// 销售退货 /// </summary> /// <param name="model">退货明细</param> /// <param name="customer">分销商erp编号</param> /// <param name="description">单据摘要(商城订单号/升舱订单号)</param> /// <param name="flowIdentify"></param> /// <returns></returns> /// <remarks>2013-9-27 杨浩 添加</remarks> public Result SaleInStock(List <SaleInfo> model, string customer, string description, string flowIdentify) { var datajson = new SaleInfoWraper { Model = model, Type = 出库状态.退货, Customer = customer, Description = description }.ToJson(); var easModel = new Hyt.Model.EasSyncLog { Data = datajson, FlowIdentify = flowIdentify }; var status = KisCore.SaleIssueBillFacade(easModel); //同步兴业嘉仓数据 if (model.First().WarehouseSysNo == 59 || model.First().WarehouseSysNo == 61 || model.First().WarehouseSysNo == 4 || model.First().WarehouseSysNo == 30 || model.First().WarehouseSysNo == 41) { XingYe.XingYeProviderFactory.CreateProvider().SaleInStock(model, customer, description, flowIdentify); } //同步利嘉 LiJia.LiJiaProviderFactory.CreateProvider().SaleInStock(model, customer, description, flowIdentify); return(status); }
/// <summary> /// 获取Eas同步数据 /// </summary> /// <param name="model">Eas</param> /// <returns></returns> /// <remarks>2013-9-27 杨浩 添加</remarks> public Result <string> GetData(CBEasSyncLog model) { var easModel = new Hyt.Model.EasSyncLog { SysNo = model.SysNo, Data = model.Data, DataMd5 = model.DataMd5 }; var iType = (接口类型)(model.InterfaceType); var result = new Result <string> { }; switch (iType) { case 接口类型.配送员借货还货: var borrow = model.Data.ToObject <BorrowInfoWraper>(); result = EasCore.OtherIssueBillFacade(borrow.Model, borrow.Type, borrow.Description, "", model.DataMd5, true, true, true); break; case 接口类型.销售出库退货: //var sale = model.Data.ToObject<SaleInfoWraper>(); result = EasCore.SaleIssueBillFacade(easModel, false, true, true, true); break; case 接口类型.收款单据导入: var receiving = model.Data.ToObject <ReceivingInfoWraper>(); result = EasCore.ReceivingBillFacade(0, receiving.Model, receiving.ReceivingType, receiving.Customer, receiving.Description, "", model.DataMd5, true, true, true); break; } return(result); }
/// <summary> /// 采购退货 /// </summary> /// <param name="model">出库明细</param> /// <param name="description">Kis单据摘要(出库单号)</param> /// <param name="flowIdentify">采购订单系统编号</param> /// <param name="purchaseOrderSysNo">采购订单系统编号</param> /// <returns>bool</returns> /// <remarks>2013-9-27 杨浩 添加</remarks> public Result PurchaseOutStock(List <PurchaseInfo> model, string description, string flowIdentify, string purchaseOrderSysNo) { var datajson = new PurchaseInfoWraper { Model = model, Type = 采购状态.退货, Description = description, PurchaseOrderSysNo = purchaseOrderSysNo }.ToJson(); var easModel = new Hyt.Model.EasSyncLog { Data = datajson, FlowIdentify = flowIdentify }; var status = KisCore.PurchaseIssueBillFacade(easModel); //同步兴业嘉仓数据 if (model.First().WarehouseSysNo == 59 || model.First().WarehouseSysNo == 61 || model.First().WarehouseSysNo == 4 || model.First().WarehouseSysNo == 30 || model.First().WarehouseSysNo == 41) { XingYe.XingYeProviderFactory.CreateProvider().PurchaseOutStock(model, description, flowIdentify, purchaseOrderSysNo); } //foreach (var item in model) //{ // if (item.WarehouseSysNo == 59) // { // } //} //同步利嘉 //LiJia.LiJiaProviderFactory.CreateProvider().PurchaseOutStock(model,description,flowIdentify,purchaseOrderSysNo); return(status); }
/// <summary> /// 调拨单导入 /// </summary> /// <param name="model">调拨明细</param> /// <param name="description">Kis单据摘要(调拨出库单号_调拨入库单号)</param> /// <param name="flowIdentify">调拨单系统编号</param> /// <returns></returns> /// <remarks>2017-1-04 杨浩 创建</remarks> public Result TransferStock(List <TransferStockInfo> model, string description, string flowIdentify) { var datajson = new TransferStockInfoWraper { Model = model, Type = 调拨状态.入库, Description = description }.ToJson(); var easModel = new Hyt.Model.EasSyncLog { Data = datajson, FlowIdentify = flowIdentify }; var status = KisCore.TransferStockIssueBillFacade(easModel); //同步兴业嘉仓的数据 foreach (var item in model) { if (model.First().WarehouseSysNo == 59 || model.First().WarehouseSysNo == 61 || model.First().WarehouseSysNo == 4 || model.First().WarehouseSysNo == 30 || model.First().WarehouseSysNo == 41) { XingYe.XingYeProviderFactory.CreateProvider().TransferStock(model, description, flowIdentify); } } //同步利嘉 //LiJia.LiJiaProviderFactory.CreateProvider().TransferStock(model, description, flowIdentify); return(status); }
/// <summary> /// 记录日志 /// </summary> /// <param name="datajson">同步数据</param> /// <param name="result">返回结果</param> /// <param name="watch">同步耗时</param> /// <param name="name">接口名称</param> /// <param name="interfaceType">接口类型</param> /// <param name="warehouseSysNo">仓库编号</param> /// <param name="remarks">记录商城原单据</param> /// <param name="flowIdentify">流程编号</param> /// <param name="voucherAmount">单据金额</param> /// <param name="status">同步状态</param> /// <param name="isAgain">是否开始同步</param> /// <remarks>2013-10-24 杨浩 创建</remarks> private static int WriteLog(string datajson, Result <string> result, Stopwatch watch, string name, 接口类型 interfaceType, int warehouseSysNo, string remarks, string flowIdentify, decimal voucherAmount, 步状态 status, bool isAgain) { //是否为自动同步 if (isAgain) { return(0); } //是否为自营 if (!IsSelfSupport(warehouseSysNo)) { return(0); } int elapsedMilliseconds = 0; string message = string.Empty; var dataMd5 = Helper.MD5Encrypt(datajson); var isImport = Hyt.DataAccess.Sys.IEasDao.Instance.IsImport(dataMd5); if (isImport) { return(0); } elapsedMilliseconds = (int)watch.ElapsedMilliseconds; message = result.Message != null ? (result.Message.Length > 500 ? result.Message.Substring(0, 500) : result.Message) : string.Empty; var log = new Hyt.Model.EasSyncLog() { VoucherNo = result.Data, CreatedDate = DateTime.Now, Data = datajson, DataMd5 = dataMd5, ElapsedTime = elapsedMilliseconds, InterfaceType = (int)interfaceType, Message = message, Name = name, Status = (int)status, StatusCode = result.StatusCode, CreatedBy = Hyt.Model.SystemPredefined.User.SystemUser, Remarks = remarks, FlowIdentify = flowIdentify, FlowType = (接口类型.配送员借货还货 == interfaceType ? 20 : 10), LastupdateDate = DateTime.Now, WarehouseSysNo = warehouseSysNo, VoucherAmount = voucherAmount, LastsyncTime = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue, }; return(Hyt.DataAccess.Sys.IEasDao.Instance.EasSyncLogCreate(log)); }
/// <summary> /// 销售退货 /// </summary> /// <param name="model">退货明细</param> /// <param name="customer">分销商erp编号</param> /// <param name="description">单据摘要(商城订单号/升舱订单号)</param> /// <param name="flowIdentify"></param> /// <returns></returns> /// <remarks>2013-9-27 杨浩 添加</remarks> public Result SaleInStock(List <SaleInfo> model, string customer, string description, string flowIdentify) { var datajson = new SaleInfoWraper { Model = model, Type = 出库状态.退货, Customer = customer, Description = description }.ToJson(); var easModel = new Hyt.Model.EasSyncLog { Data = datajson, FlowIdentify = flowIdentify }; var status = EasCore.SaleIssueBillFacade(easModel); return(status); }
/// <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); }