/// <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="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.ILiJiaDao.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.LiJiaSyncLog() { 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.ILiJiaDao.Instance.LiJiaSyncLogCreate(log)); }
///// <summary> ///// 销售出库单、销售退货入库单同步接口 ///// </summary> ///// <param name="request"></param> ///// <returns></returns> ///// <remarks>2016-1-4 王江 创建</remarks> //public TpcStockInOutResponse SyncTpcStockInOut(TpcStockInOutRequest request) //{ // var json = request.ToJson(); // var param = new NameValueCollection() // { // {"json",json}, // {"sign",EncryptionUtil.EncryptWithMd5(json + Extra.Erp.Properties.Settings.Default.IMS_TPC_SysncSignature)} // }; // var client = new WebClient(); // var bytes = client.UploadValues(Extra.Erp.Properties.Settings.Default.Extra_Ims_SyncTpcStockInOutProxyService, param); // return JsonUtil.ToObject<TpcStockInOutResponse>(Encoding.UTF8.GetString(bytes)); //} ///// <summary> ///// 收款单同步接口 ///// </summary> ///// <param name="request"></param> ///// <returns></returns> ///// <remarks>2016-1-4 王江 创建</remarks> //public TpcReceivePaymentResponse SyncTpcReceivePayment(TpcReceivePaymentRequest request) //{ // var json = request.ToJson(); // var param = new NameValueCollection() // { // {"json",json}, // {"sign",EncryptionUtil.EncryptWithMd5(json + Extra.Erp.Properties.Settings.Default.IMS_TPC_SysncSignature)} // }; // var client = new WebClient(); // var bytes = client.UploadValues(Extra.Erp.Properties.Settings.Default.Extra_Ims_SyncTpcReceivePaymentProxyService, param); // return JsonUtil.ToObject<TpcReceivePaymentResponse>(Encoding.UTF8.GetString(bytes)); //} ///// <summary> ///// IMS库存查询接口 ///// </summary> ///// <param name="request"></param> ///// <returns></returns> ///// <remarks>2016-1-11 王江 创建</remarks> //public TpcInventoryQueryResponse GetInventorySearch(TpcInventoryQueryRequest request) //{ // var json = request.ToJson(); // var param = new NameValueCollection() // { // {"json",json}, // {"sign",EncryptionUtil.EncryptWithMd5(json + Extra.Erp.Properties.Settings.Default.IMS_TPC_SysncSignature)} // }; // var client = new WebClient(); // var bytes = client.UploadValues(Extra.Erp.Properties.Settings.Default.Extra_Ims_SyncGetInventoryProxyService, param); // return JsonUtil.ToObject<TpcInventoryQueryResponse>(Encoding.UTF8.GetString(bytes)); //} ///// <summary> ///// 从IMS系统获取加盟商库存 ///// </summary> ///// <param name="enterpriseID">加盟商客户编码</param> ///// <param name="erpCode">商品编码</param> ///// <param name="wareHouse">仓库信息</param> ///// <returns></returns> ///// <remarks>2016-01-05 朱成果 创建</remarks> //public static Result<List<Inventory>> GetInventory(string[] erpCode, Hyt.Model.WhWarehouse wareHouse) //{ // Result<List<Inventory>> r=new Result<List<Inventory>>(){ // Status=false // }; // if(erpCode!=null&&wareHouse!=null&&wareHouse.IsSelfSupport==(int)Hyt.Model.WorkflowStatus.WarehouseStatus.是否自营.否) // { // string enterpriseID=GetJiaMengCustomer(wareHouse.SysNo);//加盟商EAS 客户编码 // if (!string.IsNullOrEmpty(enterpriseID) && !string.IsNullOrEmpty(wareHouse.ErpCode) && wareHouse.ErpCode.Trim() != defaultJiamengCode) // { // TpcInventoryQueryRequest request=new TpcInventoryQueryRequest(); // request.enterpriseID=enterpriseID;//加盟商客户编码 // request.warehouseIDs=new List<string>(); // request.warehouseIDs.Add(wareHouse.ErpCode.Trim()); // request.productIDs=erpCode.ToList(); // try // { // var response= ImsHelper.Instance.GetInventorySearch(request); // if(response!=null) // { // r.Status=response.Status; // r.Message=response.Message; // if(response.Data!=null) // { // r.Data=new List<Inventory>(); // response.Data.ForEach((m)=>{ // r.Data.Add( // new Inventory() // { // Quantity = (int)m.Quantity, // MaterialNumber = m.ProductCode, // WarehouseSysNo = wareHouse.SysNo, // WarehouseName = wareHouse.WarehouseName, // WarehouseSysName = wareHouse.WarehouseName, // WarehouseNumber = m.WareHouseCode // } // ); // }); // } // } // } // catch(Exception ex) // { // r.Status=false; // r.Message=ex.Message; // } // } // } // return r; //} ///// <summary> ///// 获取加盟商客户信息 ///// </summary> ///// <param name="wareHouseSysNo">仓库信息</param> ///// <returns></returns> ///// <remarks>2016-01-05 朱成果 创建</remarks> //private static string GetJiaMengCustomer(int wareHouseSysNo) //{ // string enterpriseID = string.Empty; // var dw= Hyt.DataAccess.Distribution.IDsDealerWharehouse.Instance.GetByWarehousSysNo(wareHouseSysNo); // if(dw!=null) // { // var dd= Hyt.DataAccess.Distribution.IDsDealerDao.Instance.GetDsDealer(dw.DealerSysNo); // if(dd!=null) // { // enterpriseID = dd.ErpCode; // } // } // return enterpriseID; //} ///// <summary> ///// IMS 出库单和退换货单同步 ///// </summary> ///// <param name="request"></param> ///// <param name="status"></param> ///// <returns>返回单据号码</returns> ///// <remarks>2016-01-05 朱成果 创建</remarks> //public static Result<string> SyncTpcStockInOut(TpcStockInOutData datainfo, ImportStatus status) //{ // string xml = Helper.XmlSerialize(datainfo) // .Replace(xsi, "") // .Replace(xsd, "") // .Replace("utf-16", "UTF-8") // .Trim(); // if (status.isData) // { // return new Result<string> // { // Data = xml // }; // } // if (System.Configuration.ConfigurationManager.AppSettings["EnableIMSSync"] != "true")//接口关闭 // { // return new Result<string> // { // Message = Model.EasConstant.EAS_MESSAGE_CLOSE, // Status = false // }; // } // if (string.IsNullOrEmpty(datainfo.RequestData.Warehouse) || datainfo.RequestData.Warehouse.Trim() == defaultJiamengCode)//基础资料没有维护 // { // return new Result<string> // { // Message = Model.EasConstant.Information, // Status = false // }; // } // var datajson = datainfo.ToJson(); // var md5 = Helper.MD5Encrypt(datajson); // Extra.Erp.Entity.Result result = new Extra.Erp.Entity.Result() { Status = false }; // 同步状态 sendstatus = 同步状态.等待同步; // var watch = new System.Diagnostics.Stopwatch(); // watch.Start(); // if (status.enableEas && status.isAgain) // { // try // { // datainfo.RequestData.Guid = md5; // var response = ImsHelper.Instance.SyncTpcStockInOut(datainfo.RequestData); // if (response != null) // { // result.Status = response.Status; // result.Message = response.Message; // result.data = response.Code ?? ""; // sendstatus = response.Status ? 同步状态.成功 : 同步状态.失败; // } // else // { // sendstatus = 同步状态.失败; // } // } // catch (Exception e) // { // result.Message = e.Message; // result.Status = false; // sendstatus = 同步状态.失败; // } // } // else // { // result.Message = status.enableEas ? Model.EasConstant.EAS_WAIT : Model.EasConstant.EAS_MESSAGE_CLOSE; // result.Status = false; // sendstatus = 同步状态.等待同步; // } // watch.Stop(); // var resultData = new Result<string> // { // Data = (result.data != null ? result.data.ToString() : ""), // Status = result.Status, // StatusCode = result.statusCode, // Message = result.Message // }; // decimal voucherAmount = datainfo.RequestData.ItemList.Sum(m => m.Quantity * m.UnitPrice - m.OriginalCurrency); // if (datainfo.RequestData.InOutType == "22") // { // voucherAmount = 0 - voucherAmount; // } // var sysno = WriteQueue(datajson, md5, resultData, watch, 接口类型.IMS出入库, datainfo.WarehouseNo, datainfo.RequestData.Remarks, datainfo.Identifier, voucherAmount, sendstatus, status.isAgain); // return resultData; //} #region 将日志写入数据库 /// <summary> /// 将日志写入到同步队列 /// </summary> /// <param name="datajson">同步数据</param> /// <param name="dataMd5">校验信息</param> /// <param name="result">返回结果</param> /// <param name="watch">同步耗时</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>2015-09-29 朱成果 创建</remarks> private static int WriteQueue(string datajson, string dataMd5, Result <string> result, Stopwatch watch, 接口类型 interfaceType, int warehouseSysNo, string remarks, string flowIdentify, decimal voucherAmount, 步状态 status, bool isAgain) { //是否为自动同步 if (isAgain) { return(0); } int elapsedMilliseconds = 0; string message = string.Empty; if (string.IsNullOrEmpty(dataMd5)) { 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 = interfaceType.ToString(), 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 }; var r = Hyt.DataAccess.Sys.IEasDao.Instance.EasSyncLogCreate(log); return(r); }