using HH.WCS.Mobox3.pinggao.wms; using HH.WCS.Mobox3.pinggao; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static HH.WCS.Mobox3.pinggao.api.ApiModel; using static HH.WCS.Mobox3.pinggao.api.OtherModel; using static HH.WCS.Mobox3.pinggao.models.SapRoot; using HH.WCS.Mobox3.pinggao.util; using NLog.Fluent; using static HH.WCS.Mobox3.pinggao.models.SapRoot.WcReturnRoot; using System.Reflection; using System.Web.Http.Description; using Newtonsoft.Json.Linq; using Swashbuckle.Swagger; using static HH.WCS.Mobox3.pinggao.models.SapRoot.CKDdto; using static HH.WCS.Mobox3.pinggao.dispatch.NDC; using static HH.WCS.Mobox3.pinggao.wms.WMSHelper.AddChangeModel; using HH.WCS.Mobox3.pinggao.models; using static HH.WCS.Mobox3.pinggao.models.SapRoot.otherDto; using HH.WCS.Mobox3.pinggao.api; using static HH.WCS.Mobox3.pinggao.api.ApibackModel; using System.Net.Http; using System.Web.UI.WebControls; using System.Xml.Linq; using System.Xml; using System.Security.Policy; using HH.WCS.Mobox3.pinggao.models; using static HH.WCS.Mobox3.pinggao.wms.WMSHelper; using WHTest; using System.Net; using SqlSugar; using static HH.WCS.Mobox3.pinggao.models.SapRoot.GYSDto; using System.Web.Services.Protocols; namespace HH.WCS.Mobox3.pinggao.api { public class WmsSpaHelper { static WmsSpaHelper() { } /// /// 数据 /// /// /// /// public static void EnsureArrayFormat(JObject json, string name, string name1) { foreach (var property in json.Properties()) { if (property.Name == name || property.Name == name1) { if (property.Value is JObject && !(property.Value is JArray)) { // 若为单个对象,包装成数组 property.Value = new JArray(property.Value); } } if (property.Value is JObject) { // 递归处理子对象 EnsureArrayFormat((JObject)property.Value, name, name1); } else if (property.Value is JArray) { // 递归处理数组中的每个元素 foreach (var item in (JArray)property.Value) { if (item is JObject) { EnsureArrayFormat((JObject)item, name, name1); } } } } } public static void EnsureArrayFormat(JObject json, string propertyName) { // 查找名为 propertyName 的属性 JProperty property = json.Property(propertyName); if (property != null) { // 检查属性值是否为 JObject 类型(即单个对象) if (property.Value is JObject) { // 将单个对象包装成数组 JArray newArray = new JArray(property.Value); property.Value = newArray; } else if (property.Value is JArray) { // 如果属性值已经是 JArray,则不需要做任何操作 // 但如果需要递归检查数组中的每个元素,可以在这里实现 } } } public static void EnsureArrayFormats(JObject json, string name) { foreach (var property in json.Properties()) { // 如果当前属性名与指定名称匹配 if (property.Name.Equals(name)) { // 如果属性值是 JObject,且不是 JArray,则将其包装成数组 if (property.Value is JObject) { JArray newArray = new JArray(property.Value); property.Value = newArray; } // 如果属性值已经是 JArray,则不需要进一步操作 else if (property.Value is JArray) { // 已经是数组,无需操作 } // 如果属性值是其他类型,则将其转换为单个元素的数组 else { JArray newArray = new JArray(property.Value); property.Value = newArray; } } // 如果属性值是 JObject,递归检查其子属性 else if (property.Value is JObject) { EnsureArrayFormats((JObject)property.Value, name); } } } //内采收货返回参数 public static string GetNcJsonResult(string WLPZBH, string WLPZND, string MSGCODE, string MSGDESP) { var root = new Dictionary { { "ITEM", new Dictionary { { "WLPZBH", WLPZBH }, { "WLPZND", WLPZND }, { "MSGCODE", MSGCODE }, { "MSGDESP", MSGDESP } } } }; string json = JsonConvert.SerializeObject(root); return json; } //外采收货返回参数 public static string GetJsonResult(string WLPZBH, string MSGCODE, string MSGDESP) { var root = new Dictionary { { "ITEM", new Dictionary { { "WLPZBH", WLPZBH }, { "MSGCODE", MSGCODE }, { "MSGDESP", MSGDESP } } } }; string json = JsonConvert.SerializeObject(root); return json; } //出库返回参数 public static string CkGetJsonResult(string LLDH, string GC, string MSGCODE, string MSGDESP) { var root = new Dictionary { { "ITEM", new Dictionary { { "LLDH ", LLDH }, { "GC ", GC }, { "MSGCODE", MSGCODE }, { "MSGDESP", MSGDESP } } } }; string json = JsonConvert.SerializeObject(root); return json; } /// /// 外采入库/入库冲销 /// /// /// internal static List Inbound_Order_In(models.SapRoot.Root model) { var db = new SqlHelper().GetInstance(); List simpleResults = new List(); //var result = new SimpleResult(); //result.WLPZBH = model.ROOT.WLPZ[0].HEAD.WLPZBH; //result.resultMsg = "成功"; try { db.BeginTran(); foreach (var items in model.ROOT.WLPZ) { var result = new SimpleResult(); #region MyRegion //if (items.HEAD.YDLX=="125") //{ // //判断冲销凭证编号 是否为空 如果为空 则为冲销(审核前才能冲销,非待执行状态提示执行中不可冲销) 不为空 则为外采入库 // if (items.ITEM.Where(s => s.CXPZH != null && s.CXPZH != "").Count() > 0) // { // //判断冲销物料是否为同一个入库单 // if (items.ITEM.Select(s => s.CKPZH).Distinct().Count() > 1) // { // result.WLPZBH = items.HEAD.WLPZH; // result.WLPZND = items.HEAD.WLPZND; // result.resultCode = 1; // result.resultMsg = "冲销物料不属于同一订单"; // result.resultMsg = "失败"; // simpleResults.Add(result); // continue; // } // //冲销凭证单号 // var cxpzbh = items.ITEM[0].CKPZH; // var po = WMSHelper.GetInboundOrder(cxpzbh); // //判断是否执行 执行中订单允许冲销 // if (po == null) // { // result.resultMsg = "失败"; // result.WLPZBH = items.HEAD.WLPZH; // result.WLPZND = items.HEAD.WLPZND; // result.resultCode = 1; // result.resultMsg = "未找到此订单"; // simpleResults.Add(result); // continue; // } // if (po.N_B_STATE != 0 && po.N_B_STATE != 7) // { // result.resultMsg = "失败"; // result.WLPZBH = items.HEAD.WLPZH; // result.resultCode = 1; // result.WLPZND = items.HEAD.WLPZND; // result.resultMsg = "执行中订单不允许操作"; // simpleResults.Add(result); // continue; // } // foreach (var item in items.ITEM) // { // ///判断是否都有冲销凭证编号 // if (string.IsNullOrEmpty(item.CKPZH)) // { // result.resultMsg = "失败"; // result.WLPZBH = items.HEAD.WLPZH; // result.resultCode = 1; // result.WLPZND = items.HEAD.WLPZND; // result.resultMsg = "冲销单有物料冲销编号为空"; // simpleResults.Add(result); // continue; // } // var rkdmx = po.Details.Where(s => s.S_ITEM_CODE == item.WLBM).FirstOrDefault(); // if (rkdmx!=null)//数量小于明细 // { // rkdmx.F_QTY = rkdmx.F_QTY + item.SL; // db.Updateable(rkdmx).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); // } // else // { // result.resultMsg = "失败"; // result.WLPZBH = items.HEAD.WLPZH; // result.resultCode = 1; // result.WLPZND = items.HEAD.WLPZND; // result.resultMsg = $"物料不存在{item.WLBM}"; // simpleResults.Add(result); // continue; // } // } // db.CommitTran(); // } // else // { // //创建入库单主子表 // var po = WMSHelper.GetInboundOrder(items.HEAD.WLPZH); // if (po == null) // { // po = new TN_Inbound_Order { S_NO = items.HEAD.WLPZH, S_WLPZND = items.HEAD.WLPZND, S_FACTORY = items.HEAD.GC, S_IN_TYPE = "外采入库", S_BS_TYPE = items.HEAD.YDLX }; // po.Details = new List(); // if (items.ITEM.Count > 0) // { // items.ITEM.ForEach(a => // { // po.Details.Add(new TN_Inbound_Detail // { // S_IO_NO = items.HEAD.WLPZH, // N_ROW_NO = a.WLPZHXM, // S_ITEM_CODE = a.WLBM, // F_QTY = a.SL, // S_ITEM_STATE = "物料", // S_ITEM_NAME = "物料", // F_ACC_B_QTY = 0, // S_KCDD = a.KCDD, // S_UOM = a.DW,//计量单位 // //S_SERIAL_NO = string.Join(",", a.ITEM1.Select(item => item.XLH)), // S_BATCH_NO = a.PC == null ? "" : a.PC, // S_CGPZH = a.CGPZH, // S_CGPZXMBH = a.CGPZXMBH, // S_CKPZKJND = a.CKPZKJND, // S_CKPZXM = a.CKPZHXM, // S_CXWLPZBH = a.CKPZH, // S_HWSJJYZT = a.HWSJJYZT, // S_GYSZHH = a.GYSZHH, // S_JYPBH = a.JYPBH, // S_KJPZSSRQ = a.KJPZSSRQ, // S_KJPZSRSJ = a.KJPZSRSJ, // }); // //} // }); // db.Insertable(po).ExecuteCommand(); // db.Insertable(po.Details).ExecuteCommand(); // db.CommitTran(); // } // } // else // { // var Details = new List(); // if (items.ITEM.Count > 0) // { // items.ITEM.ForEach(a => // { // if (po.Details.Where(s => s.S_ITEM_CODE == a.WLBM).Count() > 0) // { // var poq = po.Details.Where(s => s.S_ITEM_CODE == a.WLBM).FirstOrDefault(); // poq.F_QTY = a.SL; // db.Updateable(poq).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); // } // else // { // Details.Add(new TN_Inbound_Detail // { // S_IO_NO = items.HEAD.WLPZH, // N_ROW_NO = a.WLPZHXM, // S_ITEM_CODE = a.WLBM, // F_QTY = a.SL, // S_ITEM_STATE = "物料", // S_ITEM_NAME = "物料", // F_ACC_B_QTY = 0, // S_KCDD = a.KCDD, // S_UOM = a.DW, // S_BATCH_NO = a.PC == null ? "" : a.PC, // S_CGPZH = a.CGPZH, // S_CGPZXMBH = a.CGPZXMBH, // S_CKPZKJND = a.CKPZKJND, // S_CKPZXM = a.CKPZHXM, // S_CXWLPZBH = a.CKPZH, // S_HWSJJYZT = a.HWSJJYZT, // S_GYSZHH = a.GYSZHH, // S_JYPBH = a.JYPBH, // S_KJPZSSRQ = a.KJPZSSRQ, // S_KJPZSRSJ = a.KJPZSRSJ, // }); // } // }); // db.Insertable(Details).ExecuteCommand(); // db.CommitTran(); // } // } // } //} #endregion //else //{ //判断冲销凭证编号 是否为空 如果为空 则为冲销(审核前才能冲销,非待执行状态提示执行中不可冲销) 不为空 则为外采入库 if ((items.ITEM.Where(s => s.CXPZH != null && s.CXPZH != "").Count() > 0)) { //判断冲销物料是否为同一个入库单 if (items.ITEM.Select(s => s.CXPZH).Distinct().Count() > 1) { result.WLPZBH = items.HEAD.WLPZH; result.WLPZND = items.HEAD.WLPZND; result.resultCode = 1; result.resultMsg = "冲销物料不属于同一订单"; result.resultMsg = "失败"; simpleResults.Add(result); continue; } //冲销凭证单号 var cxpzbh = items.ITEM[0].CXPZH; var po = WMSHelper.GetInboundOrder(cxpzbh); //判断是否执行 执行中订单允许冲销 if (po == null) { result.resultMsg = "失败"; result.WLPZBH = items.HEAD.WLPZH; result.WLPZND = items.HEAD.WLPZND; result.resultCode = 1; result.resultMsg = "未找到此订单"; simpleResults.Add(result); continue; } if (po.N_B_STATE != 0 && po.N_B_STATE != 7) { result.resultMsg = "失败"; result.WLPZBH = items.HEAD.WLPZH; result.resultCode = 1; result.WLPZND = items.HEAD.WLPZND; result.resultMsg = "执行中订单不允许操作"; simpleResults.Add(result); continue; } foreach (var item in items.ITEM) { ///判断是否都有冲销凭证编号 if (string.IsNullOrEmpty(item.CXPZH)) { result.resultMsg = "失败"; result.WLPZBH = items.HEAD.WLPZH; result.resultCode = 1; result.WLPZND = items.HEAD.WLPZND; result.resultMsg = "冲销单有物料冲销编号为空"; simpleResults.Add(result); continue; } var rkdmx = po.Details.Where(s => s.S_ITEM_CODE == item.WLBM).ToList(); if (rkdmx.Where(s => s.F_QTY < item.SL).Count() > 0)//数量大于明细 { result.resultMsg = "失败"; result.WLPZBH = items.HEAD.WLPZH; result.WLPZND = items.HEAD.WLPZND; result.resultMsg = $"冲销物料{item.WLBM}数量{item.SL}大于存入数量"; simpleResults.Add(result); continue; } else if (rkdmx.Where(s => s.F_QTY == item.SL).Count() == 1)//数量==明细 删除当下入库单物料数据 { db.Deleteable().Where(it => it.S_ITEM_CODE == item.WLBM && it.S_IO_NO == cxpzbh).ExecuteCommand(); } else if (rkdmx.Where(s => s.F_QTY > item.SL).Count() > 0)//数量小于明细 { //当前物料明细 var rkd = rkdmx.Where(s => s.F_QTY > item.SL).FirstOrDefault(); rkd.F_QTY = rkd.F_QTY - item.SL; db.Updateable(rkd).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); } var po1 = db.Queryable().Includes(a => a.Details).Where(a => a.S_NO == cxpzbh).First(); int ssss = po1.Details.Count(); if (po1.Details.Count() == 0) { po1.N_B_STATE = 7; db.Updateable(po1).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); } } db.CommitTran(); } else if ( items.HEAD.YDLX == "124") { //冲销凭证单号 var cxpzbh = items.HEAD.WLPZH; var po = WMSHelper.GetInboundOrder(cxpzbh); //判断是否执行 执行中订单允许冲销 if (po == null) { result.resultMsg = "失败"; result.WLPZBH = items.HEAD.WLPZH; result.WLPZND = items.HEAD.WLPZND; result.resultCode = 1; result.resultMsg = "未找到此订单"; simpleResults.Add(result); continue; } if (po.N_B_STATE != 0 && po.N_B_STATE != 7) { result.resultMsg = "失败"; result.WLPZBH = items.HEAD.WLPZH; result.resultCode = 1; result.WLPZND = items.HEAD.WLPZND; result.resultMsg = "执行中订单不允许操作"; simpleResults.Add(result); continue; } foreach (var item in items.ITEM) { var rkdmx = po.Details.Where(s => s.S_ITEM_CODE == item.WLBM).ToList(); if (rkdmx.Where(s => s.F_QTY < item.SL).Count() > 0)//数量大于明细 { result.resultMsg = "失败"; result.WLPZBH = items.HEAD.WLPZH; result.WLPZND = items.HEAD.WLPZND; result.resultMsg = $"退货物料{item.WLBM}数量{item.SL}大于存入数量"; simpleResults.Add(result); continue; } else if (rkdmx.Where(s => s.F_QTY == item.SL).Count() == 1)//数量==明细 删除当下入库单物料数据 { db.Deleteable().Where(it => it.S_ITEM_CODE == item.WLBM && it.S_IO_NO == cxpzbh).ExecuteCommand(); } else if (rkdmx.Where(s => s.F_QTY > item.SL).Count() > 0)//数量小于明细 { //当前物料明细 var rkd = rkdmx.Where(s => s.F_QTY > item.SL).FirstOrDefault(); rkd.F_QTY = rkd.F_QTY - item.SL; db.Updateable(rkd).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); } var po1 = db.Queryable().Includes(a => a.Details).Where(a => a.S_NO == cxpzbh).First(); int ssss = po1.Details.Count(); if (po1.Details.Count() == 0) { po1.N_B_STATE = 7; db.Updateable(po1).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); } } db.CommitTran(); } else { //创建入库单主子表 var po = WMSHelper.GetInboundOrder(items.HEAD.WLPZH); if (po == null) { po = new TN_Inbound_Order { S_NO = items.HEAD.WLPZH, S_WLPZND = items.HEAD.WLPZND, S_FACTORY = items.HEAD.GC, S_IN_TYPE = "外采入库", S_BS_TYPE = items.HEAD.YDLX }; po.Details = new List(); if (items.ITEM.Count > 0) { items.ITEM.ForEach(a => { po.Details.Add(new TN_Inbound_Detail { S_IO_NO = items.HEAD.WLPZH, N_ROW_NO = a.WLPZHXM, S_ITEM_CODE = a.WLBM, F_QTY = a.SL, S_ITEM_STATE = "物料", S_ITEM_NAME = "物料", F_ACC_B_QTY = 0, S_KCDD = a.KCDD, S_UOM = a.DW,//计量单位 //S_SERIAL_NO = string.Join(",", a.ITEM1.Select(item => item.XLH)), S_BATCH_NO = a.PC == null ? "" : a.PC, S_CGPZH = a.CGPZH, S_CGPZXMBH = a.CGPZXMBH, S_CKPZKJND = a.CKPZKJND, S_CKPZXM = a.CKPZHXM, S_CXWLPZBH = a.CKPZH, S_HWSJJYZT = a.HWSJJYZT, S_GYSZHH = a.GYSZHH, S_JYPBH = a.JYPBH, S_KJPZSSRQ = a.KJPZSSRQ, S_KJPZSRSJ = a.KJPZSRSJ, }); //} }); db.Insertable(po).ExecuteCommand(); db.Insertable(po.Details).ExecuteCommand(); db.CommitTran(); } } else { var Details = new List(); if (items.ITEM.Count > 0) { items.ITEM.ForEach(a => { if (po.Details.Where(s => s.S_ITEM_CODE == a.WLBM).Count() > 0) { var poq = po.Details.Where(s => s.S_ITEM_CODE == a.WLBM).FirstOrDefault(); poq.F_QTY = a.SL; db.Updateable(poq).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); } else { Details.Add(new TN_Inbound_Detail { S_IO_NO = items.HEAD.WLPZH, N_ROW_NO = a.WLPZHXM, S_ITEM_CODE = a.WLBM, F_QTY = a.SL, S_ITEM_STATE = "物料", S_ITEM_NAME = "物料", F_ACC_B_QTY = 0, S_KCDD = a.KCDD, S_UOM = a.DW,//计量单位 //S_UOM = a.JBJLDW,//计量单位 //S_SERIAL_NO = string.Join(",", a.ITEM1.Select(item => item.XLH)), S_BATCH_NO = a.PC == null ? "" : a.PC, S_CGPZH = a.CGPZH, S_CGPZXMBH = a.CGPZXMBH, S_CKPZKJND = a.CKPZKJND, S_CKPZXM = a.CKPZHXM, S_CXWLPZBH = a.CKPZH, S_HWSJJYZT = a.HWSJJYZT, S_GYSZHH = a.GYSZHH, S_JYPBH = a.JYPBH, S_KJPZSSRQ = a.KJPZSSRQ, S_KJPZSRSJ = a.KJPZSRSJ, }); } }); db.Insertable(Details).ExecuteCommand(); db.CommitTran(); } //result.resultMsg = "成功"; //result.WLPZBH = items.HEAD.WLPZH; //result.WLPZND = items.HEAD.WLPZND; //result.resultCode = 0; //result.resultMsg = ""; //simpleResults.Add(result); //continue; } } //} result.resultMsg = "成功"; result.WLPZBH = items.HEAD.WLPZH; result.WLPZND = items.HEAD.WLPZND; result.resultCode = 0; result.resultMsg = ""; simpleResults.Add(result); } } catch (Exception e) { var resss = new SimpleResult(); resss.resultMsg = "失败"; resss.WLPZBH = ""; resss.resultCode = 1; resss.resultMsg = e.Message; simpleResults.Add(resss); db.RollbackTran(); return simpleResults; throw; } return simpleResults; } /// /// sap-wmsg供应商息添加SimpleResult /// /// /// internal static Orderback.Root GYS_In(GYSDto.Root model) { var orderResponse = new Orderback.Root { ROOT = new Orderback.ROOT { ITEM = new List { } } }; List tEMs = new List(); var db = new SqlHelper().GetInstance(); try { db.BeginTran(); foreach (var item in model.ROOT.GYSXX) { Orderback.ITEM iTEM = new Orderback.ITEM(); //创建入库单主子表 var po = WMSHelper.GetGYSBMOrder(item.JBXX.GYSBM); if (po == null) { po = new TN_Supplier { S_GYSBM= item.JBXX.GYSBM , S_MDMBM = item.JBXX.MDMBM, }; po.Details = new List(); if (item.GYSHB.Count > 0) { item.GYSHB.ForEach(a => { po.Details.Add(new TN_Supplier_detial { S_DO_GYSBM = a.GYSBM, S_CGZZ = a.CGZZ, S_HB = a.HB, }); //} }); db.Insertable(po).ExecuteCommand(); db.Insertable(po.Details).ExecuteCommand(); } } else { db.Deleteable().Where(it => it.S_GYSBM == po.S_GYSBM).ExecuteCommand(); db.Deleteable().Where(it => it.S_DO_GYSBM == po.S_GYSBM).ExecuteCommand(); //iTEM.SCDDH = item.JBXX.GYSBM; //iTEM.MSGCODE = "1"; //iTEM.MSGDESP = $"{item.JBXX.GYSBM}已存在"; //tEMs.Add(iTEM); } iTEM.SCDDH = item.JBXX.GYSBM; iTEM.MSGCODE = "0"; iTEM.MSGDESP = $"成功"; tEMs.Add(iTEM); } orderResponse.ROOT.ITEM = tEMs; db.CommitTran(); } catch (Exception e) { Orderback.ITEM iTEM = new Orderback.ITEM(); iTEM.SCDDH = ""; iTEM.GC = ""; iTEM.MSGCODE = "1"; iTEM.MSGDESP = e.Message; tEMs.Add(iTEM); orderResponse.ROOT.ITEM = tEMs; db.RollbackTran(); return orderResponse; throw; } return orderResponse; } /// /// sap-wms生产订单信息添加SimpleResult /// /// /// internal static Orderback.Root Mater_In(OrderDto.Root model) { var orderResponse = new Orderback.Root { ROOT = new Orderback.ROOT { ITEM = new List { } } }; List tEMs = new List(); var db = new SqlHelper().GetInstance(); var result = new SimpleResult(); result.resultMsg = "成功"; try { db.BeginTran(); foreach (var item in model.ROOT.SCDD) { Orderback.ITEM iTEM = new Orderback.ITEM(); var materlist = db.Queryable().Where(it => it.S_SCDDH == item.SCDDH).First(); if (materlist == null) { TN_GENERATE_ORDER tnorder = new TN_GENERATE_ORDER(); tnorder.S_GC = item.GC; tnorder.S_SCDDH = item.SCDDH; tnorder.S_DZMC = item.DZMC; tnorder.S_SCDDCMS = item.SCDDCMS; tnorder.S_WLBH = item.WLBH; tnorder.S_MS = item.MS; tnorder.S_TH = item.TH; tnorder.S_DDSL = item.DDSL; tnorder.S_DDDW = item.DDDW; tnorder.S_XSDD = item.XSDD; tnorder.S_XSDDHXM = item.XSDDHXM; tnorder.S_WBS = item.WBS; tnorder.S_SHF = item.SHF; tnorder.GZLH = item.GZLH; //tnorder.S_XLH = string.Join(",", item.ITEM.Select(items => items.XLH)); db.Insertable(tnorder).ExecuteCommand(); } else { iTEM.SCDDH = item.SCDDH; iTEM.GC = item.GC; iTEM.MSGCODE = "1"; iTEM.MSGDESP = $"{item.SCDDH}已存在"; tEMs.Add(iTEM); } iTEM.SCDDH = item.SCDDH; iTEM.GC = item.GC; iTEM.MSGCODE = "0"; iTEM.MSGDESP = $"成功"; tEMs.Add(iTEM); } orderResponse.ROOT.ITEM = tEMs; db.CommitTran(); } catch (Exception e) { Orderback.ITEM iTEM = new Orderback.ITEM(); iTEM.SCDDH = ""; iTEM.GC = ""; iTEM.MSGCODE = "1"; iTEM.MSGDESP = e.Message; tEMs.Add(iTEM); orderResponse.ROOT.ITEM = tEMs; db.RollbackTran(); return orderResponse; throw; } return orderResponse; } /// /// sap-wms物料信息添加 /// /// /// internal static WLReturnRoot.Root Mater_In(MaterDto.Root model) { var db = new SqlHelper().GetInstance(); var response = new WLReturnRoot.Root { ROOT = new WLReturnRoot.ROOT { ITEM = new List { } } }; db.BeginTran(); List list = new List(); foreach (var item in model.ROOT.ITEM) { try { var result = new WLReturnRoot.ITEM(); var materlist = db.Queryable().Where(it => it.S_ITEM_CODE == item.WLBM).First(); if (materlist == null) { TN_Material tN_Material = new TN_Material(); tN_Material.S_ITEM_CODE = item.WLBM; tN_Material.S_GCBM = item.GCBM; tN_Material.S_WLZBM = item.WLZBM; tN_Material.S_WLZMS = item.WLZMS; tN_Material.S_WLLX = item.WLLX; tN_Material.S_WLMS = item.WLMS; tN_Material.S_WLCMS = item.WLCMS; tN_Material.S_DWBM = item.DWBM; tN_Material.S_DWMS = item.DWMS; tN_Material.S_JBM = item.JBM; tN_Material.S_CPZ = item.CPZ; tN_Material.S_CPZMS = item.CPZMS; tN_Material.S_ITEM_NAME = item.VTEXT; db.Insertable(tN_Material).ExecuteCommand(); result.MSGDESP = "成功"; result.MSGCODE = 0; result.GCBM = item.GCBM; result.WLBM = item.WLBM; list.Add(result); } else { materlist.S_ITEM_CODE = item.WLBM; materlist.S_GCBM = item.GCBM; materlist.S_WLZBM = item.WLZBM; materlist.S_WLZMS = item.WLZMS; materlist.S_WLLX = item.WLLX; materlist.S_WLMS = item.WLMS; materlist.S_WLCMS = item.WLCMS; materlist.S_DWBM = item.DWBM; materlist.S_DWMS = item.DWMS; materlist.S_JBM = item.JBM; materlist.S_CPZ = item.CPZ; materlist.S_CPZMS = item.CPZMS; materlist.S_ITEM_NAME = item.VTEXT; db.Updateable(materlist).ExecuteCommand(); result.MSGDESP = "成功"; result.MSGCODE = 0; result.GCBM = item.GCBM; result.WLBM = item.WLBM; list.Add(result); } } catch (Exception e) { var result = new WLReturnRoot.ITEM(); result.MSGDESP = e.Message; result.MSGCODE = 1; result.GCBM = item.GCBM; result.WLBM = item.WLBM; list.Add(result); db.RollbackTran(); throw; } } response.ROOT.ITEM = list; //db.Insertable(list).ExecuteCommand(); db.CommitTran(); return response; } /// /// 内采入库/出库 /// /// /// internal static List NCInbound_Order_In(NcDto.Root model) { var db = new SqlHelper().GetInstance(); List simpleResults = new List(); try { db.BeginTran(); foreach (var itemwlpz in model.ROOT.WLPZ) { var result = new SimpleResult(); //判断冲销凭证编号 是否为空 如果为空 则为冲销(审核前才能冲销,非待执行状态提示执行中不可冲销) 不为空 则为外采入库 if ((itemwlpz.HEAD.YDLX != "351" || itemwlpz.HEAD.YDLX != "Z89") && itemwlpz.ITEM[0].FHGC == "3040") { var po = db.Queryable().Includes(a => a.Details).Where(s => s.S_NO == itemwlpz.HEAD.WLPZH).First(); //创建出库单主子表 #region //var ckpo = WMSHelper.GetOutboundOrder(model.ROOT.WLPZ.HEAD.WLPZBH); //if (ckpo == null) //{ // ckpo = new TN_Outbound_Order { S_NO = model.ROOT.WLPZ.HEAD.WLPZBH, S_WLPZND = model.ROOT.WLPZ.HEAD.WLPZND, S_AREA_CODE = "HJQ", S_BS_NO = model.ROOT.WLPZ.HEAD.WLPZBH, S_FACTORY = model.ROOT.WLPZ.HEAD.GC, S_OUT_TYPE = "内采出库", S_BS_TYPE = model.ROOT.WLPZ.HEAD.YDLX }; // ckpo.Details = new List(); // if (model.ROOT.WLPZ.ITME.Count > 0) // { // model.ROOT.WLPZ.ITME.ForEach(a => // { // ckpo.Details.Add(new TN_Outbound_Detail // { // S_DO_NO = model.ROOT.WLPZ.HEAD.WLPZBH, // N_ROW_NO = a.WLPZZDXM, // S_ITEM_CODE = a.WLH, // F_QTY = a.SL, // S_AREA_CODE = "QYQXHQ", // S_ITEM_NAME = "物料", // S_KCDD = a.KCDD, // S_UOM = a.JBJLDW,//计量单位 // //S_SERIAL_NO = string.Join(",", a.ITEM1.Select(item => item.XLH)), // S_BATCH_NO = a.PC, // S_ERP_WH_CODE = a.KCDD, // N_ITEM_STATE = 1 // }); // //} // }); // db.Insertable(ckpo).ExecuteCommand(); // db.Insertable(ckpo.Details).ExecuteCommand(); // db.CommitTran(); // } //} //else //{ // result.resultCode = 1; // result.resultMsg = "已经有重复单号,不可重复传输"; // return result; //} #endregion #region 创建领料单 if (po == null) { po = new TN_Ll_Order { S_NO = itemwlpz.HEAD.WLPZH, S_FACTORY = itemwlpz.ITEM[0].FHGC, S_OUT_TYPE = "内采出库", S_BS_TYPE = itemwlpz.HEAD.YDLX, S_AREA_CODE = "HJQ", S_BS_NO = itemwlpz.HEAD.WLPZH }; po.Details = new List(); if (itemwlpz.ITEM.Count() > 0) { foreach (var a in itemwlpz.ITEM) { var item = db.Queryable().Where(it => it.S_ITEM_CODE == a.WLBM).First(); if (item == null) { result.resultCode = 1; result.resultMsg = $"物料{a.WLBM}物料主数据不存在该物料"; result.resultMsg = "失败"; result.WLPZBH = itemwlpz.HEAD.WLPZH; result.WLPZND = itemwlpz.HEAD.ND; simpleResults.Add(result); continue; //throw new Exception($"物料{a.WLH}物料主数据不存在该物料"); } po.Details.Add(new TN_Ll_detail { S_DO_NO = itemwlpz.HEAD.WLPZH, S_AREA_CODE = "HJQ", N_ROW_NO = a.WLPZHXM, S_ITEM_CODE = a.WLBM, S_ITEM_NAME = item.S_ITEM_NAME, F_QTY = a.SL, S_BATCH_NO = a.PC, S_JDBS = a.JDBS, S_CGPZH = a.CGDD, S_CGPZXMBH = a.CGDDHXM, S_ERP_WH_CODE = a.KCDD, N_ITEM_STATE = 1 }); } var result1 = db.Insertable(po).ExecuteCommand() > 0; db.Insertable(po.Details).ExecuteCommand(); } } else { List listtn = new List(); if (po.N_B_STATE != 0) { foreach (var a in itemwlpz.ITEM) { //if (a.LLDSCBS == "Y")//如果是删除标识则删除当前所属出库单明细 不是删除标记 则进行增改判断 //{ // result.resultCode = 1; // result.resultMsg = $"执行中领料单,物料{a.WLH}物料不允许删除"; // throw new Exception($"执行中领料单,物料{a.WLH}物料不允许删除"); //} var po1 = po.Details.Where(s => a.WLBM == s.S_ITEM_CODE).ToList(); if (po1.Count() == 0) //无则新增物料明细 { var item = db.Queryable().Where(it => it.S_ITEM_CODE == a.WLBM).First(); if (item == null) { result.resultCode = 1; result.resultMsg = $"物料{a.WLBM}物料主数据不存在该物料"; result.resultMsg = "失败"; result.WLPZBH = itemwlpz.HEAD.WLPZH; result.WLPZND = itemwlpz.HEAD.ND; simpleResults.Add(result); continue; //throw new Exception($"物料{a.WLH}物料主数据不存在该物料"); } TN_Ll_detail tN_Outbound_Detail = new TN_Ll_detail { S_CGPZH = a.CGDD, S_CGPZXMBH = a.CGDDHXM, S_DO_NO = itemwlpz.HEAD.WLPZH, S_AREA_CODE = "HJQ", N_ROW_NO = "", S_JDBS = a.JDBS, S_ITEM_CODE = a.WLBM, S_ITEM_NAME = item.S_ITEM_NAME, F_QTY = a.SL, S_BATCH_NO = "无", S_ERP_WH_CODE = a.KCDD, N_ITEM_STATE = 1 }; listtn.Add(tN_Outbound_Detail); } else { if (po1.Where(s => s.F_ACC_D_QTY < a.SL).Count() > 0)//更新数量大于当前物料 数量 更新出库单 { po1.First().F_QTY = a.SL; db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); } else //返回失败 { result.resultCode = 1; result.resultMsg = $"更新失败,更新数量必须大于当前物料数量{a.WLBM}"; result.resultMsg = "失败"; result.WLPZBH = itemwlpz.HEAD.WLPZH; result.WLPZND = itemwlpz.HEAD.ND; simpleResults.Add(result); continue; //throw new Exception($"更新失败,更新数量必须大于当前物料数量{a.WLH}"); } } } ; }//执行中订单 else if (po.N_B_STATE == 0)//未执行 执行增删改操作 { foreach (var a in itemwlpz.ITEM) { //if (a.LLDSCBS == "Y")//如果是删除标识则删除当前所属出库单明细 不是删除标记 则进行增改判断 //{ // var po1 = po.Details.Where(s => a.WLH == s.S_ITEM_CODE).ToList(); // if (po1.Count() > 0) //无则新增物料明细 // { // db.Deleteable().Where(it => it.S_ITEM_CODE == a.WLH && it.S_DO_NO == po1.First().S_DO_NO).ExecuteCommand(); // } // else // { // result.resultCode = 1; // result.resultMsg = $"物料{a.WLH}物料数据不存在 无法删除"; // throw new Exception($"物料{a.WLH}物料数据不存在 无法删除"); // } //} //else //{ var po1 = po.Details.Where(s => a.WLBM == s.S_ITEM_CODE).ToList(); if (po1.Count() == 0) //无则新增物料明细 { var item = db.Queryable().Where(it => it.S_ITEM_CODE == a.WLBM).First(); if (item == null) { result.resultCode = 1; result.resultMsg = $"物料{a.WLBM}物料主数据不存在该物料"; result.resultMsg = "失败"; result.WLPZBH = itemwlpz.HEAD.WLPZH; result.WLPZND = itemwlpz.HEAD.ND; continue; /* throw new Exception($"物料{a.WLH}物料主数据不存在该物料")*/ ; } TN_Ll_detail tN_Outbound_Detail = new TN_Ll_detail { S_DO_NO = itemwlpz.HEAD.WLPZH, S_AREA_CODE = "HJQ", N_ROW_NO = "", S_ITEM_CODE = a.WLBM, S_JDBS = a.JDBS, S_CGPZH = a.CGDD, S_CGPZXMBH = a.CGDDHXM, S_ITEM_NAME = item.S_ITEM_NAME, F_QTY = a.SL, S_BATCH_NO = "无", S_ERP_WH_CODE = a.KCDD, N_ITEM_STATE = 1 }; listtn.Add(tN_Outbound_Detail); } else {//更新数量 未执行时 直接更新数量 po1.First().F_QTY = a.SL; db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); } //} } ; } //添加数据 if (listtn.Count() > 0) { db.Insertable(listtn).ExecuteCommand(); } } #endregion } else if ((itemwlpz.HEAD.YDLX == "351" || itemwlpz.HEAD.YDLX == "Z89") && itemwlpz.ITEM[0].GC == "3040") { //创建入库单主子表 var po = WMSHelper.GetInboundOrder(itemwlpz.HEAD.WLPZH); if (po == null) { #region MyRegion po = new TN_Inbound_Order { S_NO = itemwlpz.HEAD.WLPZH, S_WLPZND = itemwlpz.HEAD.ND, S_FACTORY = itemwlpz.ITEM[0].GC, S_IN_TYPE = "内采入库", S_BS_TYPE = itemwlpz.HEAD.YDLX }; po.Details = new List(); if (itemwlpz.ITEM.Count > 0) { itemwlpz.ITEM.ForEach(a => { po.Details.Add(new TN_Inbound_Detail { S_IO_NO = itemwlpz.HEAD.WLPZH, N_ROW_NO = a.WLPZHXM, S_ITEM_CODE = a.WLBM, F_QTY = a.SL, S_ITEM_STATE = "物料", S_ITEM_NAME = "物料", S_CGPZH = a.CGDD, S_CGPZXMBH = a.CGDDHXM, S_JDBS = a.JDBS, S_CKPZKJND = a.CKPZND, F_ACC_B_QTY = 0, S_KCDD = a.KCDD, S_UOM = a.DW,//计量单位 //S_SERIAL_NO = string.Join(",", a.ITEM1.Select(item => item.XLH)), S_BATCH_NO = a.PC == null ? "" : a.PC, }); //} }); db.Insertable(po).ExecuteCommand(); db.Insertable(po.Details).ExecuteCommand(); db.CommitTran(); #endregion } } else { var Details = new List(); if (itemwlpz.ITEM.Count > 0) { itemwlpz.ITEM.ForEach(a => { if (po.Details.Where(s => s.S_ITEM_CODE == a.WLBM).Count() > 0) { var poq = po.Details.Where(s => s.S_ITEM_CODE == a.WLBM).FirstOrDefault(); poq.F_QTY = a.SL; db.Updateable(poq).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); } else { Details.Add(new TN_Inbound_Detail { S_IO_NO = itemwlpz.HEAD.WLPZH, N_ROW_NO = a.WLPZHXM, S_ITEM_CODE = a.WLBM, F_QTY = a.SL, S_ITEM_STATE = "正常", S_ITEM_NAME = "物料", S_CKPZKJND = a.CKPZND, F_ACC_B_QTY = 0, S_KCDD = a.KCDD, S_JDBS = a.JDBS, S_CGPZH = a.CGDD, S_CGPZXMBH = a.CGDDHXM, S_UOM = a.DW,//计量单位 //S_SERIAL_NO = string.Join(",", a.ITEM1.Select(item => item.XLH)), S_BATCH_NO = a.PC == null ? "" : a.PC, }); } }); db.Insertable(Details).ExecuteCommand(); db.CommitTran(); } } } result.resultMsg = "成功"; result.WLPZBH = itemwlpz.HEAD.WLPZH; result.WLPZND = itemwlpz.HEAD.ND; result.resultCode = 0; result.resultMsg = ""; simpleResults.Add(result); db.CommitTran(); } } catch (Exception e) { var result = new SimpleResult(); result.resultMsg = "失败"; result.WLPZBH = ""; result.WLPZND = "0"; result.resultCode = 1; result.resultMsg = e.Message; simpleResults.Add(result); db.RollbackTran(); return simpleResults; throw; } finally { db.Dispose(); } return simpleResults; } /// /// 其他出入库 /// /// /// internal static List Otherbound_Order_In(otherDto.Root model) { LogHelper.Info($"其他出入库调试"); List simples = new List(); using (var db = new SqlHelper().GetInstance()) { try { foreach (var itemwlpz in model.ROOT.WLPZ) { var result = new SimpleResult(); db.BeginTran(); if (itemwlpz.ITEM.Count() < 1) { result.WLPZBH = itemwlpz.HEAD.WLPZBH; result.WLPZND = itemwlpz.HEAD.WLPZNF; result.resultCode = 1; result.resultMsg = $"不存在物料信息"; simples.Add(result); continue; //throw new Exception($"不存在该物料信息"); } if (itemwlpz.ITEM[0].JDBS == "S") { LogHelper.Info($"物料凭证编号{itemwlpz.HEAD.WLPZBH}"); //创建入库单主子表 var po = WMSHelper.GetInboundOrder(itemwlpz.HEAD.WLPZBH); if (po == null) { po = new TN_Inbound_Order { S_NO = itemwlpz.HEAD.WLPZBH, S_WLPZND=itemwlpz.HEAD.WLPZNF, S_WLPZNF = itemwlpz.HEAD.WLPZNF, S_FACTORY = itemwlpz.ITEM[0].GC, S_IN_TYPE = "其他入库", S_BS_TYPE = itemwlpz.ITEM[0].YDLX }; po.Details = new List(); if (itemwlpz.ITEM.Count > 0) { itemwlpz.ITEM.ForEach(a => { #region 不需要 //if (a.ITEM1.Select(s => s.XLH).Count() > 0)//判断序列号是否为多个 //{ // foreach (var item in a.ITEM1.Select(s => s.XLH)) // { // po.Details.Add(new TN_Inbound_Detail // { // S_IO_NO = model.ROOT.WLPZ.HEAD.WLPZBH, // N_ROW_NO = po.Details.Count + 1, // S_ITEM_CODE = a.WLH, // F_QTY = a.SL, // S_ITEM_STATE = "物料", // S_ITEM_NAME = "物料", // F_ACC_B_QTY = 0, // S_KCDD = a.KCDD, // S_UOM = a.JBJLDW,//计量单位 // S_SERIAL_NO = item, // S_BATCH_NO = a.PC, // }); // } //} //else //{ #endregion LogHelper.Info($"效验{a.ITEM1}"); po.Details.Add(new TN_Inbound_Detail { S_IO_NO = itemwlpz.HEAD.WLPZBH, N_ROW_NO = a.WLPZHXM, S_ITEM_CODE = a.WLBH, F_QTY = a.SL, S_JDBS = a.JDBS, S_ITEM_STATE = "物料", S_ITEM_NAME = "物料", F_ACC_B_QTY = 0, S_KCDD = a.KCDD, S_UOM = a.JLDW,//计量单位 // S_SERIAL_NO = string.Join(",", a.ITEM1.Select(item => item.XLH)), S_BATCH_NO = a.PC == null ? "" : a.PC, S_CKPZKJND = a.CKPZNF, S_CKPZXM = a.CKPZHXM, S_CKPZH = a.CKPZ, S_CXWLPZBH = a.CXPZ, S_CXWLPZHXM = a.CXPZHXM, S_CXPZNF = a.CXPZNF, S_SERIAL_NO = a.ITEM1==null?"": string.Join(",", a.ITEM1.XLH), }); //} }); db.Insertable(po).ExecuteCommand(); db.Insertable(po.Details).ExecuteCommand(); db.CommitTran(); } } else { var Details = new List(); if (itemwlpz.ITEM.Count > 0) { itemwlpz.ITEM.ForEach(a => { if (po.Details.Where(s => s.S_ITEM_CODE == a.WLBH).Count() > 0) { var poq = po.Details.Where(s => s.S_ITEM_CODE == a.WLBH).FirstOrDefault(); poq.F_QTY = a.SL; db.Updateable(poq).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); } else { Details.Add(new TN_Inbound_Detail { S_IO_NO = itemwlpz.HEAD.WLPZBH, N_ROW_NO = a.WLPZHXM, S_ITEM_CODE = a.WLBH, F_QTY = a.SL, S_JDBS = a.JDBS, S_ITEM_STATE = "物料", S_ITEM_NAME = "物料", F_ACC_B_QTY = 0, S_KCDD = a.KCDD, S_UOM = a.JLDW,//计量单位 // S_SERIAL_NO = string.Join(",", a.ITEM1.Select(item => item.XLH)), S_BATCH_NO = a.PC == null ? "" : a.PC, S_CKPZKJND = a.CKPZNF, S_CKPZXM = a.CKPZHXM, S_CKPZH = a.CKPZ, S_CXWLPZBH = a.CXPZ, S_CXWLPZHXM = a.CXPZHXM, S_CXPZNF = a.CXPZNF, S_SERIAL_NO = string.Join(",", a.ITEM1.XLH), }); } }); db.Insertable(Details).ExecuteCommand(); db.CommitTran(); } //result.WLPZBH = itemwlpz.HEAD.WLPZBH; //result.WLPZND = itemwlpz.HEAD.WLPZNF; //result.resultCode = 1; //result.resultMsg = "已经有重复单号,不可重复传输"; //simples.Add(result); //continue; //return simples; } } else { #region ////创建入库单主子表 //var po = WMSHelper.GetOutboundOrder(model.ROOT.WLPZ.HEAD.WLPZBH); //if (po == null) //{ // po = new TN_Outbound_Order { S_NO = model.ROOT.WLPZ.HEAD.WLPZBH, S_AREA_CODE = "HJQ", S_BS_NO = model.ROOT.WLPZ.HEAD.WLPZBH, S_WLPZNF = model.ROOT.WLPZ.HEAD.WLPZNF, S_FACTORY = model.ROOT.WLPZ.ITEM[0].GC, S_OUT_TYPE = "其他出库", S_BS_TYPE = model.ROOT.WLPZ.ITEM[0].YDLX }; // po.Details = new List(); // if (model.ROOT.WLPZ.ITEM.Count > 0) // { // model.ROOT.WLPZ.ITEM.ForEach(a => // { // //if (a.ITEM1.Select(s => s.XLH).Count() > 0)//判断序列号是否为多个 // //{ // // foreach (var item in a.ITEM1.Select(s => s.XLH)) // // { // // po.Details.Add(new TN_Inbound_Detail // // { // // S_IO_NO = model.ROOT.WLPZ.HEAD.WLPZBH, // // N_ROW_NO = po.Details.Count + 1, // // S_ITEM_CODE = a.WLH, // // F_QTY = a.SL, // // S_ITEM_STATE = "物料", // // S_ITEM_NAME = "物料", // // F_ACC_B_QTY = 0, // // S_KCDD = a.KCDD, // // S_UOM = a.JBJLDW,//计量单位 // // S_SERIAL_NO = item, // // S_BATCH_NO = a.PC, // // }); // // } // //} // //else // //{ // po.Details.Add(new TN_Outbound_Detail // { // S_DO_NO = model.ROOT.WLPZ.HEAD.WLPZBH, // N_ROW_NO = a.WLPZHXM, // S_ITEM_CODE = a.WLBH, // F_QTY = a.SL, // S_AREA_CODE = "测试", // S_ITEM_NAME = "物料", // S_KCDD = a.KCDD, // S_UOM = a.JLDW,//计量单位 // S_SERIAL_NO = string.Join(",", a.ITEM1.Select(item => item.XLH)), // S_BATCH_NO = a.PC, // S_ERP_WH_CODE = a.KCDD, // N_ITEM_STATE = 1 // }); // //} // }); // db.Insertable(po).ExecuteCommand(); // db.Insertable(po.Details).ExecuteCommand(); // db.CommitTran(); // } //} //else //{ // result.resultCode = 1; // result.resultMsg = "已经有重复单号,不可重复传输"; // return result; //} #endregion #region 创建领料单 var po = db.Queryable().Includes(a => a.Details).Where(s => s.S_NO == itemwlpz.HEAD.WLPZBH).First(); if (po == null) { po = new TN_Ll_Order { S_NO = itemwlpz.HEAD.WLPZBH, S_OUT_TYPE = "其他出库", S_BS_TYPE = itemwlpz.ITEM[0].YDLX, S_AREA_CODE = "HJQ", S_BS_NO = itemwlpz.HEAD.WLPZBH }; po.Details = new List(); if (itemwlpz.ITEM.Count() > 0) { po.S_FACTORY = itemwlpz.ITEM[0].GC; foreach (var a in itemwlpz.ITEM) { var item = db.Queryable().Where(it => it.S_ITEM_CODE == a.WLBH).First(); if (item == null) { var result12 = new SimpleResult(); result12.WLPZBH = itemwlpz.HEAD.WLPZBH; result12.WLPZND = itemwlpz.HEAD.WLPZNF; result12.resultCode = 1; result12.resultMsg = $"物料{a.WLBH}物料主数据不存在该物料"; simples.Add(result12); //throw new Exception($"物料{a.WLBH}物料主数据不存在该物料"); continue; } po.Details.Add(new TN_Ll_detail { S_DO_NO = itemwlpz.HEAD.WLPZBH, S_AREA_CODE = "HJQ", N_ROW_NO = a.WLPZHXM, S_JDBS = a.JDBS, S_ITEM_CODE = a.WLBH, S_ITEM_NAME = item.S_ITEM_NAME, F_QTY = a.SL, S_BATCH_NO = a.PC, S_ERP_WH_CODE = a.KCDD, S_SERIAL_NO = a.ITEM1 == null ? "" : string.Join(",", a.ITEM1.XLH), //S_SERIAL_NO = string.Join(",", a.ITEM1.XLH), N_ITEM_STATE = 1 }); } var result1 = db.Insertable(po).ExecuteCommand() > 0; db.Insertable(po.Details).ExecuteCommand(); } } else { List listtn = new List(); if (po.N_B_STATE != 0) { foreach (var a in itemwlpz.ITEM) { //if (a.LLDSCBS == "Y")//如果是删除标识则删除当前所属出库单明细 不是删除标记 则进行增改判断 //{ // result.resultCode = 1; // result.resultMsg = $"执行中领料单,物料{a.WLH}物料不允许删除"; // throw new Exception($"执行中领料单,物料{a.WLH}物料不允许删除"); //} var po1 = po.Details.Where(s => a.WLBH == s.S_ITEM_CODE).ToList(); if (po1.Count() == 0) //无则新增物料明细 { var item = db.Queryable().Where(it => it.S_ITEM_CODE == a.WLBH).First(); if (item == null) { var result12 = new SimpleResult(); result12.WLPZBH = itemwlpz.HEAD.WLPZBH; result12.WLPZND = itemwlpz.HEAD.WLPZNF; result12.resultCode = 1; result12.resultMsg = $"物料{a.WLBH}物料主数据不存在该物料"; simples.Add(result12); //throw new Exception($"物料{a.WLBH}物料主数据不存在该物料"); continue; } TN_Ll_detail tN_Outbound_Detail = new TN_Ll_detail { S_DO_NO = itemwlpz.HEAD.WLPZBH, S_AREA_CODE = "HJQ", N_ROW_NO = "", S_SERIAL_NO = a.ITEM1 == null ? "" : string.Join(",", a.ITEM1.XLH), S_ITEM_CODE = a.WLBH, S_ITEM_NAME = item.S_ITEM_NAME, F_QTY = a.SL, S_BATCH_NO = "无", S_ERP_WH_CODE = a.KCDD, N_ITEM_STATE = 1 }; listtn.Add(tN_Outbound_Detail); } else { if (po1.Where(s => s.F_ACC_D_QTY < a.SL).Count() > 0)//更新数量大于当前物料 数量 更新出库单 { po1.First().F_QTY = a.SL; db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); } else //返回失败 { var result12 = new SimpleResult(); result12.WLPZBH = itemwlpz.HEAD.WLPZBH; result12.WLPZND = itemwlpz.HEAD.WLPZNF; result12.resultCode = 1; result12.resultMsg = $"更新失败,更新数量必须大于当前物料数量{a.WLBH}"; simples.Add(result12); //throw new Exception($"更新失败,更新数量必须大于当前物料数量{a.WLBH}"); continue; } } } ; }//执行中订单 else if (po.N_B_STATE == 0)//未执行 执行增删改操作 { foreach (var a in itemwlpz.ITEM) { //if (a.LLDSCBS == "Y")//如果是删除标识则删除当前所属出库单明细 不是删除标记 则进行增改判断 //{ // var po1 = po.Details.Where(s => a.WLH == s.S_ITEM_CODE).ToList(); // if (po1.Count() > 0) //无则新增物料明细 // { // db.Deleteable().Where(it => it.S_ITEM_CODE == a.WLH && it.S_DO_NO == po1.First().S_DO_NO).ExecuteCommand(); // } // else // { // result.resultCode = 1; // result.resultMsg = $"物料{a.WLH}物料数据不存在 无法删除"; // throw new Exception($"物料{a.WLH}物料数据不存在 无法删除"); // } //} //else //{ var po1 = po.Details.Where(s => a.WLBH == s.S_ITEM_CODE).ToList(); if (po1.Count() == 0) //无则新增物料明细 { var item = db.Queryable().Where(it => it.S_ITEM_CODE == a.WLBH).First(); if (item == null) { var result12 = new SimpleResult(); result12.WLPZBH = itemwlpz.HEAD.WLPZBH; result12.WLPZND = itemwlpz.HEAD.WLPZNF; result12.resultCode = 1; result12.resultMsg = $"物料{a.WLBH}物料主数据不存在该物料"; simples.Add(result12); continue; // throw new Exception($"物料{a.WLBH}物料主数据不存在该物料"); } TN_Ll_detail tN_Outbound_Detail = new TN_Ll_detail { S_DO_NO = itemwlpz.HEAD.WLPZBH, S_AREA_CODE = "HJQ", N_ROW_NO = "", S_ITEM_CODE = a.WLBH, S_ITEM_NAME = item.S_ITEM_NAME, F_QTY = a.SL, S_BATCH_NO = "无", S_SERIAL_NO = a.ITEM1 == null ? "" : string.Join(",", a.ITEM1.XLH), S_ERP_WH_CODE = a.KCDD, N_ITEM_STATE = 1 }; listtn.Add(tN_Outbound_Detail); } else {//更新数量 未执行时 直接更新数量 po1.First().F_QTY = a.SL; db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); } //} } ; } //添加数据 if (listtn.Count() > 0) { db.Insertable(listtn).ExecuteCommand(); } } #endregion } result.WLPZBH = itemwlpz.HEAD.WLPZBH; result.WLPZND = itemwlpz.HEAD.WLPZNF; result.resultMsg = "成功"; result.resultCode = 0; simples.Add(result); } db.CommitTran(); } catch (Exception e) { var result = new SimpleResult(); result.WLPZBH = ""; result.WLPZND = ""; result.resultMsg = e.Message; result.resultCode = 1; simples.Add(result); db.RollbackTran(); return simples; throw; } return simples; } } /// /// 码盘入库 /// /// /// internal static SimpleResult InboundOrderSorting(MPSorting model) { var result = new SimpleResult(); //判断起始库位是否锁定 // var db = new SqlHelper().GetInstance(); using (var db = new SqlHelper().GetInstance()) { var locinfo = db.Queryable().Where(a => a.S_CODE == model.start).First(); if (locinfo?.N_LOCK_STATE != 0) { result.resultCode = 3; result.resultMsg = $"起始库位已锁/不存在"; return result; } //判断托盘是否已经生成任务,如果没有则生成 var wmsTask = WMSHelper.GetWmsTaskByCntr(model.cntr_code); if (wmsTask != null) { result.resultCode = 3; result.resultMsg = $"起点{model.start} 托盘{model.cntr_code}已经创建任务,请勿重复申请"; return result; } result.resultMsg = "成功"; result.resultCode = 0; //校验入库单数量,不可以超,成功后插入托盘物料表,更新入库单累计数量 result = AddInboundOrder(model.MaterList, model.cntr_code); #region MyRegion //var info = WMSHelper.GetInboundOrderDetail(model.arrival_no, item.item_code); //if (info != null) //{ // float qty = model.MaterList.Sum(s => s.qty); // if (info.F_QTY - info.F_ACC_B_QTY >= qty) // { // // 插入到托盘明细表 // var cntr = ContainerHelper.GetCntr(model.cntr_code, true); // if (cntr != null) // { // ContainerHelper.BindCntrItems(cntr, model.MaterList, info.S_BATCH_NO, model.arrival_no); // //更新入库单累计绑定数量 // info.F_ACC_B_QTY += qty; // WMSHelper.UpdateInboundOrderDetailQty(info); // } // else // { // result.resultCode = 2; // result.resultMsg = "获取托盘信息失败"; // } // } // else // { // result.resultCode = 1; // result.resultMsg = "累计码盘数量超出入库单数量"; // } //} //else //{ // result.resultCode = 3; // result.resultMsg = $"未找到入库单{model.arrival_no}"; //} #endregion if (result.resultCode != 0) { return result; } //添加作业 wmsTask = new WMSTask { S_CNTR_CODE = model.cntr_code, S_CODE = WMSHelper.GenerateTaskNo(), S_START_LOC = model.start, S_START_AREA = locinfo.S_AREA_CODE, S_START_WH = locinfo.S_WH_CODE, S_END_LOC = model.start, S_BS_NO = model.MaterList[0].arrival_no, N_TYPE = 1, S_TYPE = WMSTask.GetTypeStr(1), S_OP_DEF_CODE = "", S_OP_DEF_NAME = "pda入库" }; if (WMSHelper.CreateWmsTask(wmsTask)) { LocationHelper.LockLoc(model.start, 1); result.resultMsg = $"创建作业成功,作业号{wmsTask.S_CODE}"; } return result; } } /// /// 分拣 /// /// /// internal static async Task OutboundOrderSorting(FJSorting model) { var result = new SimpleResult(); // var db = new SqlHelper().GetInstance(); using (var db = new SqlHelper().GetInstance()) { try { result.resultMsg = "成功"; result.resultCode = 0; if (string.IsNullOrEmpty(model.arrival_no)) { result.resultMsg = "出库单号不能为空"; result.resultCode = 1; return result; } //人工分拣 容器货品表数量、分配量升降 //出库单详情 var po = db.Queryable().Includes(s => s.Details).Where(a => a.S_NO == model.arrival_no).First(); if (po == null) { result.resultMsg = "未找到此出库单"; result.resultCode = 1; return result; } //根据不同出库类型 回调sap if (po.S_OUT_TYPE == "冲销出库") { result = await CXAddOutboundOrder(db,model.MaterList, model.arrival_no, model.cntr_code, model.start); } else if (po.S_OUT_TYPE == "出库")//普通出库 { result = await AddOutboundOrder(db,model.MaterList, model.arrival_no, model.cntr_code, model.start); } else if (po.S_OUT_TYPE == "计划外发料出库") { result = await jhwtlAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, model.start); } else if (po.S_OUT_TYPE == "成本中心出库") { result = await CBAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, model.start); } //通用接口 对容器货品的删减 和生成回库单 都要用的接口 result = await TYAddOutboundOrder(db,model.MaterList, model.arrival_no, model.cntr_code, model.IsHK, model.start, po.S_OUT_TYPE); #region 升降量 bool adds = true; //var itemlist = db.Queryable().Where(a => a.S_CNTR_CODE == model.cntr_code).ToList(); if (model.MaterList.Count > 0) { var url = Settings.MoboxSeverUrl + "inventory/AddChange"; //仓库量表升量 var req = new AddChangeModel { op_type = 4 }; //库区量表升量 var req2 = new AddChangeModel { op_type = 7 }; model.MaterList.ForEach(a => { LogHelper.Info($"填充数据"); LogHelper.Info($"减仓库量表数据 仓库{po.S_WH_CODE} 物料编码{a.item_code} 物料名称 数量{a.qty}"); req.item_info.Add(new AddChangeModel.itemModel { wh_code = po.S_WH_CODE, item_code = a.item_code, item_name = "", qty = a.qty }); LogHelper.Info($"减库区量表数据 库区{po.S_AREA_CODE} 物料编码{a.item_code} 物料名称 数量{a.qty}"); req2.item_info.Add(new AddChangeModel.itemModel { wh_code = po.S_WH_CODE, area_code = po.S_AREA_CODE, item_code = a.item_code, item_name = "", qty = a.qty }); }); var reqData = JsonConvert.SerializeObject(req); var AppKey = Settings.AppKey; var AppSecret = Settings.AppSecret; var ReqTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString(); //var ReqTime = GetTimeStamp(DateTime.Now.AddHours(-8), 1, 2); LogHelper.Info($"加密前 AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime}"); var ReqVerify = GetMd5FromString(AppKey + AppSecret + ReqTime); LogHelper.Info($"加密后 AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime} ReqVerify={ReqVerify} url={url} req={reqData}"); var res = new HttpHelper().WebPost(url, reqData, "application/json", AppKey, ReqTime, ReqVerify); if (!string.IsNullOrEmpty(res)) { LogHelper.Info($"mobox 仓库降量接口返回 {res}"); var moboxres = JsonConvert.DeserializeObject(res); if (moboxres.err_code != 0) { adds = false; } } else { LogHelper.Info($"mobox 仓库降量接口返回为空"); } var reqData2 = JsonConvert.SerializeObject(req2); var ReqTime2 = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString(); //var ReqTime2 = GetTimeStamp(DateTime.Now.AddHours(-8), 1, 2); LogHelper.Info($"加密前 AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime2}"); var ReqVerify2 = GetMd5FromString(AppKey + AppSecret + ReqTime2); LogHelper.Info($"加密后 AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime2} ReqVerify={ReqVerify2} url={url} req={reqData2}"); var res2 = new HttpHelper().WebPost(url, reqData2, "application/json", AppKey, ReqTime2, ReqVerify2); if (!string.IsNullOrEmpty(res2)) { LogHelper.Info($"mobox 库区降量接口返回 {res2}"); var moboxres = JsonConvert.DeserializeObject(res); if (moboxres.err_code != 0) { adds = false; } } else { LogHelper.Info($"mobox 库区降量接口返回为空"); } if (adds) addOnShelves(po, model.cntr_code, 2); } else LogHelper.Info($"托盘{model.cntr_code}无需要升降量的物料"); db.CommitTran(); #endregion return result; } catch (Exception e) {result.resultMsg=e.Message; db.RollbackTran(); return result; throw; } } } public static async Task TYAddOutboundOrder(SqlSugarClient db, List MaterList, string arrival_no, string cntr_code, bool isHK, string start, string S_OUT_TYPE) { // var db = new SqlHelper().GetInstance(); //using (var db = new SqlHelper().GetInstance()) //{ var result = new SimpleResult(); try { //库位信息 var startinfo = db.Queryable().Where(it => it.S_CODE == start).First(); //出库单详情 var po = db.Queryable().Includes(s => s.Details).Where(a => a.S_NO == arrival_no).First(); //分拣单 //var popp = db.Queryable().Where(a => a.S_BS_NO == arrival_no&&a.S_SORT_TYPE=="未分类" && a.N_B_STATE == 2).First(); //回参物料信息 List records = new List(); var pz = db.Queryable().Where(a => a.S_NO == arrival_no).First(); foreach (var item in MaterList) { // 插入到托盘明细表 var cntr = db.Queryable().Where(a => a.S_CNTR_CODE == cntr_code).ToList(); if (cntr.Count() > 0) { db.BeginTran(); //1.查看是否有相同物料批次的信息,如果有要累减少,不同批次的可以分开&& a.N_BS_ROW_NO == item.N_ROW_NO var cir = db.Queryable().Where(a => a.S_CNTR_CODE == cntr_code && a.S_ITEM_CODE == item.item_code ).First();//&& a.S_BATCH_NO == item.S_BATCH_NO if (cir != null) { cir.F_QTY -= item.qty; cir.F_ALLOC_QTY -= item.qty; cir.T_MODIFY = DateTime.Now; if (cir.F_QTY == 0) { db.Deleteable(cir).ExecuteCommand(); } else { db.Updateable(cir).UpdateColumns(it => new { it.F_QTY, it.F_ALLOC_QTY, it.T_MODIFY }).ExecuteCommand(); //添加回库作业 } } else { db.RollbackTran(); result.resultCode = 1; result.resultMsg = $"物料不存在{item.item_code}"; LogHelper.Info($"物料不存在{item.item_code}"); return result; } if (isHK) { var wmsTask = new WMSTask { S_CNTR_CODE = cntr_code, S_CODE = WMSHelper.GenerateTaskNo(), S_START_LOC = start, S_START_AREA = startinfo.S_AREA_CODE, S_START_WH = startinfo.S_WH_CODE, S_END_LOC = startinfo.S_CODE, S_END_AREA = startinfo.S_AREA_CODE, S_END_WH = startinfo.S_WH_CODE, N_TYPE = 1, // S_TYPE = WMSTask.GetTypeStr(1), S_TYPE = "回库", S_OP_DEF_CODE = "", S_OP_DEF_NAME = "pda入库" }; if (WMSHelper.CreateWmsTask(wmsTask)) { LocationHelper.LockLoc(start, 1); result.resultMsg = $"创建作业成功,作业号{wmsTask.S_CODE}"; } } OutboundRecord outboundRecord = new OutboundRecord(); outboundRecord.S_WLPZBH = pz?.S_WLPZBH; outboundRecord.S_WLPZND = pz?.S_WLPZND; outboundRecord.S_TYPE = S_OUT_TYPE; outboundRecord.S_NO = arrival_no; outboundRecord.S_WLBM = item.item_code; outboundRecord.S_SL = item.qty; outboundRecord.S_CNTR_CODE = cntr_code; records.Add(outboundRecord); } else { result.resultCode = 1; result.resultMsg = $"获取托盘信息失败{cntr_code}"; LogHelper.Info($"获取托盘信息失败{cntr_code}"); return result; } } db.Insertable(records).ExecuteCommand(); //db.CommitTran(); } catch (Exception ex) { //db.RollbackTran(); LogHelper.Info("物料信息绑定到满容器上" + ex.Message); Console.WriteLine(ex.Message); throw; } return result; } //} /// /// 成本中心退料 /// /// /// /// /// /// public static async Task CBAddOutboundOrder(SqlSugarClient db, List MaterList, string arrival_no, string cntr_code, string start) { //using (var db = new SqlHelper().GetInstance()) //{ // var db = new SqlHelper().GetInstance(); var result = new SimpleResult(); try { //库位信息 var startinfo = db.Queryable().Where(it => it.S_CODE == start).First(); //出库单详情 var po = db.Queryable().Includes(s => s.Details).Where(a => a.S_NO == arrival_no).First(); //var CntrItemRels = db.Queryable().Where(a => a.S_BS_NO == arrival_no).ToList(); //出库回调入参 var cbCenterBackDto = new CBcenterBackDto.Root { ROOT = new CBcenterBackDto.ROOT { HEAD = new List { } } }; //回参物料信息 List iTEMs = new List(); List records = new List(); string GZRQ = ""; string PZZDRQ = ""; if (po.BUDAT != null) { GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd"); } if (po.BLDAT != null) { PZZDRQ = DateTime.Parse(po.BLDAT.ToString()).ToString("yyyyMMdd"); } foreach (var item in MaterList) { var podetail = po.Details.Where(s => s.S_ITEM_CODE == item.item_code).FirstOrDefault(); CBcenterBackDto.HEADItem ckbitem = new CBcenterBackDto.HEADItem(); ckbitem.KEY = arrival_no; ckbitem.CBZX = po.S_CBZX; ckbitem.WLBH = item.item_code; ckbitem.SL = item.qty; ckbitem.KCDD = podetail?.S_KCDD; ckbitem.LRZX = po.S_LRZX; ckbitem.ZZKM = po.S_ZZKM; ckbitem.GC = po.S_FACTORY; ckbitem.GZRY = po.UNAME; ckbitem.PC = podetail?.S_BATCH_NO; ckbitem.PZRQ = PZZDRQ; ckbitem.GZRQ = GZRQ; CBcenterBackDto.ITEM listitem1 = new CBcenterBackDto.ITEM(); // List listitem1 = new List(); //string[] xlhValues = item.S_SERIAL_NO.Split(','); //var serialNos = string.Join(",", CntrItemRels // .Where(s => s.S_ITEM_CODE == item.item_code) // .Select(s => s.S_SERIAL_NO)); //string[] xlhValues = serialNos.Split(','); // string[] xlhValues = item.S_SERIAL_NO.Split(','); listitem1.XLH= podetail?.S_SERIAL_NO.Split(',').ToList(); //foreach (var xlhValue in xlhValues) //{ // CBcenterBackDto.ITEM newItem = new CBcenterBackDto.ITEM { XLH = xlhValue }; // listitem1.Add(newItem); //} ckbitem.ITEM = listitem1; iTEMs.Add(ckbitem); } cbCenterBackDto.ROOT.HEAD = iTEMs; //db.Insertable(records).ExecuteCommand(); #region wms-sap回调 //类转json var json = JsonConvert.SerializeObject(cbCenterBackDto.ROOT); //json转xml string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml; LogHelper.Info($"成本中心出库xml数据{xml}"); //// 创建 StringContent 并指定媒体类型为 "text/xml" //HttpContent content = new StringContent(xml, Encoding.UTF8, "application/xml"); //string url = Settings.WCSSeverUrl + "/api/WmsSap/cesReceiveXmlData"; //string responseXml = ""; //using (HttpClient client = new HttpClient()) //{ // // 发送 POST 请求并接收响应 // HttpResponseMessage responsess = await client.PostAsync(url, content); // responseXml = await responsess.Content.ReadAsStringAsync(); //} #region sap回调 // 创建Web Service代理类实例 ZSCM2_CBZX service = new ZSCM2_CBZX(); service.PreAuthenticate = true; service.Url = service.Url + "?sap-language=ZH"; // service.Credentials = new NetworkCredential("CONN_RFC", "Init.1234"); // 准备请求参数 ZfmScm2CbzxMm001 request = new ZfmScm2CbzxMm001(); request.Input = "" + xml; LogHelper.Info($"成本中心出库SAP回调"); // 调用Web Service ZfmScm2CbzxMm001Response responses = service.ZfmScm2CbzxMm001(request); // 处理响应 LogHelper.Info("SAP返回结果: " + responses.Output); // 解析Output中的凭证号等信息 #endregion XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(responses.Output.ToString()); JObject jsonObject = JsonConvert.DeserializeObject(JsonConvert.SerializeXmlNode(xmlDoc)); var data = JsonConvert.DeserializeObject(jsonObject.ToString()); //添加凭证记录表 result.resultMsg = data.ROOT.ITEM.MSGDESP; result.resultCode = data.ROOT.ITEM.MSGCODE; if (data.ROOT.ITEM.MSGCODE == 0) { foreach (var item in MaterList) { MaterialVoucher materialVoucher = new MaterialVoucher(); materialVoucher.S_NO = po.S_NO; materialVoucher.S_TYPE = po.S_OUT_TYPE; materialVoucher.S_WLBM = item.item_code; materialVoucher.S_WLH = item.N_ROW_NO; materialVoucher.S_WLPZBH = data.ROOT.ITEM?.WLPZBH; materialVoucher.S_WLPZND = data.ROOT.ITEM?.WLPZND; materialVoucher.S_WH_CODE = po.S_WH_CODE; materialVoucher.S_AREA_CODE = po.S_AREA_CODE; materialVoucher.F_QTY = item.qty; materialVoucher.STATUS = 0; db.Insertable(materialVoucher).ExecuteCommand(); } //MaterialVoucher materialVoucher = new MaterialVoucher(); //materialVoucher.S_NO = po.S_NO; //materialVoucher.S_TYPE = po.S_OUT_TYPE; //materialVoucher.S_WLPZBH = data.ROOT.ITEM.WLPZBH; //materialVoucher.S_WLPZND = data.ROOT.ITEM.WLPZND; //materialVoucher.STATUS = 0; //db.Insertable(materialVoucher).ExecuteCommand(); } #endregion //db.CommitTran(); } catch (Exception ex) { //db.RollbackTran(); LogHelper.Info("成本中心回调报错" + ex.Message); Console.WriteLine(ex.Message); throw; } return result; } //} /// /// 计划外退料回调 /// /// /// /// /// /// public static async Task jhwtlAddOutboundOrder(SqlSugarClient db, List MaterList, string arrival_no, string cntr_code, string start) { //using (var db = new SqlHelper().GetInstance()) //{ // var db = new SqlHelper().GetInstance(); var result = new SimpleResult(); try { //库位信息 var startinfo = db.Queryable().Where(it => it.S_CODE == start).First(); //出库单详情 var po = db.Queryable().Includes(s => s.Details).Where(a => a.S_NO == arrival_no).First(); var CntrItemRels = db.Queryable().Where(a => a.S_BS_NO == arrival_no).ToList(); //出库回调入参 DateTime dateTime; DateTime dateTime1; string GZRQ = ""; string PZZDRQ = ""; if (po.BUDAT != null) { GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd"); } if (po.BLDAT != null) { PZZDRQ = DateTime.Parse(po.BLDAT.ToString()).ToString("yyyyMMdd"); } JHWBackDto.Root myRoot = new JHWBackDto.Root { ROOT = new JHWBackDto.ROOT { HEAD = new JHWBackDto.HEAD { KEY = po.S_NO, GZRQ = GZRQ, PZZDRQ = PZZDRQ, YHM = po.UNAME, PZTTWB = po.BKTXT, YDLX = po.S_BS_TYPE, TSKCBS = po.SOBKZ, ITEM = new List { } }, } }; //回参物料信息 List iTEMs = new List(); foreach (var item in MaterList) { var podetail = po.Details.Where(s => s.S_ITEM_CODE == item.item_code).FirstOrDefault(); JHWBackDto.ITEM ckbitem = new JHWBackDto.ITEM(); ckbitem.WLBH = item.item_code; ckbitem.GC = po.S_FACTORY; //ckbitem.PH = podetail?.S_PH; //ckbitem.TSKCBS = podetail?.S_TSKCBS; ckbitem.XSDD = podetail?.S_XSDD; ckbitem.XSDDHXM = podetail?.S_XSDDXMBH; ckbitem.SL = item.qty; ckbitem.DW = podetail?.S_UOM; ckbitem.DDH = podetail?.S_DDH; //ckbitem.DDHXM = (podetail?.N_ROW_NO); ckbitem.WBS = podetail?.S_WBS; ckbitem.KCDD = podetail?.S_KCDD; ckbitem.PC = podetail?.S_BATCH_NO; JHWBackDto.ITEM1 listitem1 = new JHWBackDto.ITEM1(); //string[] xlhValues = item.S_SERIAL_NO.Split(','); //var serialNos = string.Join(",", CntrItemRels // .Where(s => s.S_ITEM_CODE == item.item_code) // .Select(s => s.S_SERIAL_NO)); //string[] xlhValues = serialNos.Split(','); string[] xlhValues = podetail?.S_SERIAL_NO.Split(','); //foreach (var xlhValue in xlhValues) //{ // JHWBackDto.ITEM1 newItem = new JHWBackDto.ITEM1 { XLH = xlhValue }; // listitem1.Add(newItem); //} listitem1.XLH = podetail?.S_SERIAL_NO.Split(',').ToList(); ckbitem.ITEM1 = listitem1; iTEMs.Add(ckbitem); //添加出库录凭证表 //var pz = db.Queryable().Where(a => a.S_NO == arrival_no).First(); //OutboundRecord outboundRecord = new OutboundRecord(); //outboundRecord.S_WLPZBH = pz.S_WLPZBH; //outboundRecord.S_WLPZND = pz.S_WLPZND; //outboundRecord.S_TYPE = "计划外退料"; //outboundRecord.S_NO = arrival_no; //outboundRecord.S_WLBM = item.item_code; //outboundRecord.S_SL = item.qty; //outboundRecord.S_CNTR_CODE = cntr_code; //records.Add(outboundRecord); } myRoot.ROOT.HEAD.ITEM = iTEMs; //db.Insertable(records).ExecuteCommand(); #region wms-sap回调 //类转json var json = JsonConvert.SerializeObject(myRoot.ROOT); //json转xml string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml; LogHelper.Info($"计划外发料出库xml数据{xml}"); // 创建 StringContent 并指定媒体类型为 "text/xml" //HttpContent content = new StringContent(xml, Encoding.UTF8, "application/xml"); //string url = Settings.WCSSeverUrl + "/api/WmsSap/cesReceiveXmlData"; //string responseXml = ""; //using (HttpClient client = new HttpClient()) //{ // // 发送 POST 请求并接收响应 // HttpResponseMessage responsess = await client.PostAsync(url, content); // responseXml = await responsess.Content.ReadAsStringAsync(); //} #region sap回调 // 创建Web Service代理类实例 ZSCM2_SCFLJHW service = new ZSCM2_SCFLJHW(); service.PreAuthenticate = true; service.Url = service.Url + "?sap-language=ZH"; // service.Credentials = new NetworkCredential("CONN_RFC", "Init.1234"); // 准备请求参数 ZscmScflJhw request = new ZscmScflJhw(); request.Input = "" + xml; LogHelper.Info($"计划外SAP回调"); // 调用Web Service ZscmScflJhwResponse responses = service.ZscmScflJhw(request); // 处理响应 LogHelper.Info("SAP返回结果: " + responses.Output); // 解析Output中的凭证号等信息 #endregion XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(responses.Output.ToString()); JObject jsonObject = JsonConvert.DeserializeObject(JsonConvert.SerializeXmlNode(xmlDoc)); var data = JsonConvert.DeserializeObject(jsonObject.ToString()); //添加凭证记录表 result.resultMsg = data.ROOT.ITEM.MSGDESP; result.resultCode = data.ROOT.ITEM.MSGCODE; if (data.ROOT.ITEM.MSGCODE == 0) { foreach (var item in MaterList) { MaterialVoucher materialVoucher = new MaterialVoucher(); materialVoucher.S_NO = po.S_NO; materialVoucher.S_TYPE = po.S_OUT_TYPE; materialVoucher.S_WLBM = item.item_code; materialVoucher.S_WLH = item.N_ROW_NO; materialVoucher.S_WLPZBH = data.ROOT.ITEM?.WLPZ; materialVoucher.S_WLPZND = data.ROOT.ITEM?.WLPZND; materialVoucher.S_WH_CODE = po.S_WH_CODE; materialVoucher.S_AREA_CODE = po.S_AREA_CODE; materialVoucher.F_QTY = item.qty; materialVoucher.STATUS = 0; db.Insertable(materialVoucher).ExecuteCommand(); } } #endregion //db.CommitTran(); } catch (Exception ex) { //db.RollbackTran(); LogHelper.Info("计划外退料回调报错" + ex.Message); Console.WriteLine(ex.Message); throw; } return result; } //} /// /// 通用冲销回调 /// /// /// /// /// /// public static async Task CXAddOutboundOrder(SqlSugarClient db, List MaterList, string arrival_no, string cntr_code, string start) { // var db = new SqlHelper().GetInstance(); var result = new SimpleResult(); try { //库位信息 var startinfo = db.Queryable().Where(it => it.S_CODE == start).First(); //出库单详情 var po = db.Queryable().Includes(s => s.Details).Where(a => a.S_NO == arrival_no).First(); string GZRQ = ""; if (po.BUDAT != null) { GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd"); } //来源冲销凭证对应的物料凭证信息 //var poIn = db.Queryable().Includes(s => s.Details).Where(a => a.S_NO == po.S_BS_NO).First(); //根据入库查看凭证编号信息 //var poIPz = db.Queryable().Where(a => a.S_NO == poIn.S_NO).First(); //出库回调入参 CXCkBackDto.Root myRoot = new CXCkBackDto.Root { ROOT = new CXCkBackDto.ROOT { HEAD = new List { //GZRQ = GZRQ, //SRRQ = PZZDRQ, //WLPZ = po.S_WLPZ, //WLPZNF = po.S_WLPZNF, //WLPZXM = MaterList[0].N_ROW_NO, //GZRY = po.UNAME } } }; List listhead = new List(); //出库单详情 var porecord = db.Queryable().Where(a => a.S_NO == po.S_BS_NO).ToList(); foreach (var item in MaterList) { CXCkBackDto.HEAD hEAD = new CXCkBackDto.HEAD(); hEAD.GZRQ = GZRQ; hEAD.SRSJ = DateTime.Now.ToString("yyyyMMdd"); //hEAD.WLPZ = porecord.Where(s => s.S_WLBM == item.item_code && s.S_WLH == item.N_ROW_NO).First()?.S_WLPZBH; //hEAD.WLPZNF = porecord.Where(s=>s.S_WLBM==item.item_code&&s.S_WLH==item.N_ROW_NO).First()?.S_WLPZND; //hEAD.WLPZ = porecord.First()?.S_WLPZBH; //hEAD.WLPZNF = porecord.First()?.S_WLPZND; hEAD.WLPZ = po.S_WLPZ; hEAD.WLPZNF = po.S_WLPZND; hEAD.WLPZXM = item.N_ROW_NO; hEAD.GZRY = po.UNAME; listhead.Add(hEAD); } myRoot.ROOT.HEAD = listhead; #region wms-sap回调 //类转json var json = JsonConvert.SerializeObject(myRoot.ROOT); //json转xml string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml; LogHelper.Info($"冲销出库回调xml数据{xml}"); ZSCM2_CXPZ service = new ZSCM2_CXPZ(); service.PreAuthenticate = true; service.Url = service.Url + "?sap-language=ZH"; // service.Credentials = new NetworkCredential("CONN_RFC", "Init.1234"); // 准备请求参数 ZfmScm2CxpzMm001 request = new ZfmScm2CxpzMm001(); request.Input = "" + xml; LogHelper.Info($"通用冲销SAP回调"); // 调用Web Service ZfmScm2CxpzMm001Response responses = service.ZfmScm2CxpzMm001(request); // 处理响应 LogHelper.Info("通用冲销SAP返回结果: " + responses.Output); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(responses.Output.ToString()); JObject jsonObject = JsonConvert.DeserializeObject(JsonConvert.SerializeXmlNode(xmlDoc)); var data = JsonConvert.DeserializeObject(jsonObject.ToString()); var resmeg = ""; int rescode = 0; //添加凭证记录表 if (data!=null) { List materiallist = new List(); foreach (var item in data.ROOT.ITEM) { if (item.MSGCODE == 0) { var onr = MaterList.Where(s => s.N_ROW_NO == item.WLPZHXM).First(); MaterialVoucher materialVoucher = new MaterialVoucher(); materialVoucher.S_NO = po.S_NO; materialVoucher.S_TYPE = po.S_OUT_TYPE; materialVoucher.S_WLPZBH = item?.WLPZBH; materialVoucher.S_WLPZND = item?.WLPZND; materialVoucher.S_WLPZHXM = item?.WLPZHXM; materialVoucher.S_YWLPZBH = item?.YWLPZBH; materialVoucher.S_YWLPZND = item?.YWLPZND; materialVoucher.S_YWLPZHXM = item?.YWLPZHXM; materialVoucher.S_WH_CODE = po.S_WH_CODE; materialVoucher.S_AREA_CODE = po.S_AREA_CODE; materialVoucher.F_QTY = onr.qty; //materialVoucher.STATUS = 0; resmeg += item?.MSGDESP; materiallist.Add(materialVoucher); } else { rescode = 1; } } if (materiallist.Count()>0) { db.Insertable(materiallist).ExecuteCommand(); } } result.resultMsg = resmeg; result.resultCode = rescode; #endregion //db.CommitTran(); } catch (Exception ex) { //db.RollbackTran(); LogHelper.Info("通用冲销回调报错" + ex.Message); Console.WriteLine(ex.Message); throw; } return result; } /// /// 普通回调接口 /// /// /// /// /// /// public static async Task AddOutboundOrder(SqlSugarClient db, List MaterList, string arrival_no, string cntr_code, string start) { //using (var db = new SqlHelper().GetInstance()) //{ // var db = new SqlHelper().GetInstance(); var result = new SimpleResult(); try { //库位信息 var startinfo = db.Queryable().Where(it => it.S_CODE == start).First(); //出库单详情 var po = db.Queryable().Includes(s => s.Details).Where(a => a.S_NO == arrival_no).First(); string GZRQ = ""; string PZZDRQ = ""; if (po.BUDAT != null) { GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd"); } if (po.BLDAT != null) { PZZDRQ = DateTime.Parse(po.BLDAT.ToString()).ToString("yyyyMMdd"); } CkBcakDto.Root myRoot = new CkBcakDto.Root { ROOT = new CkBcakDto.ROOT { WLPZ = new CkBcakDto.WLPZ { KEY = po.S_NO, ZYWLX = "业务类型值", PZRQ = PZZDRQ, GZRQ = GZRQ, // 假设日期格式为"年-月-日" GZRY = po.UNAME, ITEM = new List { } } } }; //出库回调入参 //回参物料信息 List iTEMs = new List(); foreach (var item in MaterList) { db.BeginTran(); var podetail = po.Details.Where(s => s.S_ITEM_CODE == item.item_code).FirstOrDefault(); CkBcakDto.ITEM ckbitem = new CkBcakDto.ITEM(); ckbitem.SCDD = podetail?.S_SCDD; ckbitem.ZJBM = podetail?.S_ZJBM; ckbitem.FHSL = item.qty; ckbitem.DW = podetail?.S_UOM; ckbitem.YLBH = podetail?.S_YLBH; ckbitem.YLXMH = podetail?.S_YLXMH; ckbitem.GC = po.S_FACTORY; ckbitem.KCDD = podetail?.S_KCDD; CkBcakDto.ITEM1 listitem1 = new CkBcakDto.ITEM1(); //var CntrItemRels = db.Queryable().Where(a => a.S_ITEM_CODE == item.item_code&&a.N_ROW_NO==item.N_ROW_NO).ToList(); ////string[] xlhValues = item.S_SERIAL_NO.Split(','); //var serialNos = string.Join(",", CntrItemRels // .Where(s => s.S_ITEM_CODE == item.item_code) // .Select(s => s.S_SERIAL_NO)); listitem1.XLH = podetail?.S_SERIAL_NO.Split(',').ToList(); //foreach (var xlhValue in xlhValues) //{ // CkBcakDto.ITEM1 newItem = new CkBcakDto.ITEM1 { XLH = xlhValue }; // listitem1.Add(newItem); //} ckbitem.ITEM1 = listitem1; iTEMs.Add(ckbitem); } myRoot.ROOT.WLPZ.ITEM = iTEMs; //db.Insertable(records).ExecuteCommand(); #region wms-sap回调 //类转json var json = JsonConvert.SerializeObject(myRoot.ROOT); //json转xml string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml; LogHelper.Info($"出库xml数据{xml}"); //// 创建 StringContent 并指定媒体类型为 "text/xml" //HttpContent content = new StringContent(xml, Encoding.UTF8, "application/xml"); //string url = Settings.WCSSeverUrl + "/api/WmsSap/cesReceiveXmlData"; //string responseXml = ""; //using (HttpClient client = new HttpClient()) //{ // // 发送 POST 请求并接收响应 // HttpResponseMessage responsess = await client.PostAsync(url, content); // responseXml = await responsess.Content.ReadAsStringAsync(); //} ZSCM2_SCFL service = new ZSCM2_SCFL(); service.PreAuthenticate = true; service.Url = service.Url + "?sap-language=ZH"; // service.Credentials = new NetworkCredential("CONN_RFC", "Init.1234"); // 准备请求参数 ZscmScfl request = new ZscmScfl(); request.Input = "" + xml; LogHelper.Info($"出库SAP回调"); // 调用Web Service ZscmScflResponse responses = service.ZscmScfl(request); // 处理响应 LogHelper.Info("出库SAP返回结果: " + responses.Output); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(responses.Output.ToString()); JObject jsonObject = JsonConvert.DeserializeObject(JsonConvert.SerializeXmlNode(xmlDoc)); var data = JsonConvert.DeserializeObject(jsonObject.ToString()); //添加凭证记录表 result.resultMsg = data.ROOT.ITEM.MSGDESP; result.resultCode = data.ROOT.ITEM.MSGCODE; if (data.ROOT.ITEM.MSGCODE == 0) { foreach (var item in MaterList) { MaterialVoucher materialVoucher = new MaterialVoucher(); materialVoucher.S_NO = po.S_NO; materialVoucher.S_TYPE = po.S_OUT_TYPE; materialVoucher.S_WLBM = item.item_code; materialVoucher.S_WLH = item.N_ROW_NO; materialVoucher.S_WLPZBH = data.ROOT.ITEM?.WLPZ; materialVoucher.S_WLPZND = data.ROOT.ITEM?.WLPZND; materialVoucher.S_WH_CODE = po.S_WH_CODE; materialVoucher.S_AREA_CODE = po.S_AREA_CODE; materialVoucher.F_QTY = item.qty; materialVoucher.STATUS = 0; db.Insertable(materialVoucher).ExecuteCommand(); } } ////添加凭证记录表 //result.resultMsg = data.ROOT.ITEM.MSGDESP; //result.resultCode = data.ROOT.ITEM.MSGCODE; //MaterialVoucher materialVoucher = new MaterialVoucher(); //materialVoucher.S_NO = po.S_NO; //materialVoucher.S_TYPE = po.S_OUT_TYPE; //materialVoucher.S_WLPZBH = data.ROOT.ITEM?.WLPZBH; //materialVoucher.S_WLPZND = data.ROOT.ITEM?.WLPZND; //materialVoucher.STATUS = 0; //db.Insertable(materialVoucher).ExecuteCommand(); #endregion //db.CommitTran(); } catch (Exception ex) { //db.RollbackTran(); LogHelper.Info("普通出库回调" + "" + ex.Message); Console.WriteLine(ex.Message); throw; } return result; } //} /// /// 校验入库单数量,不可以超,成功后插入托盘物料表,更新入库单累计数量 /// /// /// /// /// /// [ApiExplorerSettings(IgnoreApi = true)] public static SimpleResult AddInboundOrder(List MaterList, string cntr_code) { var result = new SimpleResult(); // var db = new SqlHelper().GetInstance(); using (var db = new SqlHelper().GetInstance()) { try { if (MaterList.Count()<1) { throw new Exception("累计码盘数量物料数据为空"); } foreach (var item in MaterList) { var allInfolist = db.Queryable() .Where(a => a.S_IO_NO == item.arrival_no) .ToList(); //var info = WMSHelper.GetInboundOrderDetail(arrival_no, item.item_code); var info = allInfolist.Where(a => a.S_ITEM_CODE == item.item_code && a.N_ROW_NO == item.N_ROW_NO).FirstOrDefault(); if (info != null) { if (info.F_QTY - info.F_ACC_B_QTY >= item.qty) { db.BeginTran(); //// 插入到托盘明细表 //var cntr = ContainerHelper.GetCntr(cntr_code, true); #region 插入到托盘明细表 var cntr = db.Queryable().Where(a => a.S_CODE == cntr_code).First(); if (cntr == null) { var model = new Container { S_CODE = cntr_code }; if (db.Insertable(model).ExecuteCommand() > 0) { cntr = model; } } #endregion if (cntr != null) { #region 1.查看是否有相同物料批次的信息,如果有要累加,不同批次的可以分开 var cir = db.Queryable().Where(a => a.S_CNTR_CODE == cntr.S_CODE && a.S_ITEM_CODE == item.item_code && a.S_BATCH_NO == item.S_BATCH_NO && a.N_BS_ROW_NO == item.N_ROW_NO && a.S_BS_NO == item.arrival_no).First(); if (cir != null) { cir.F_QTY += item.qty; db.Updateable(cir).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); } else { //2.插入新的容器物料信息(容器号不变S_SERIAL_NO = item.S_SERIAL_NO,) cir = new CntrItemRel { S_CNTR_CODE = cntr.S_CODE.Trim(), S_UOM=info.S_UOM, S_BATCH_NO = item.S_BATCH_NO, N_BS_ROW_NO = item.N_ROW_NO, F_QTY = item.qty, S_ITEM_CODE = item.item_code, S_BS_NO = item.arrival_no }; db.Insertable(cir).ExecuteCommand(); } var count = db.Queryable().Count(a => a.S_CNTR_CODE == cntr.S_CODE); cntr.N_DETAIL_COUNT = count; cntr.C_ENABLE = "N";//码盘后将托盘设置为不可用状态,入库后变成可用 db.Updateable(cntr).UpdateColumns(it => new { it.N_DETAIL_COUNT, it.C_ENABLE, it.S_SRC }).ExecuteCommand(); #endregion //更新入库单累计绑定数量 info.F_ACC_B_QTY += item.qty; db.Updateable(info).UpdateColumns(it => new { it.F_ACC_B_QTY }).ExecuteCommand(); } else { throw new Exception("获取托盘信息失败"); } } else { throw new Exception("累计码盘数量超出入库单数量"); } } else { throw new Exception($"未找到入库单{item.arrival_no}/物料信息{item.item_code}"); } } db.CommitTran(); } catch (Exception ex) { db.RollbackTran(); result.resultCode = 1; result.resultMsg = $"码盘入库{ex.Message}"; return result; throw; } return result; } } /// /// 创建领料单 /// /// /// public static LLDReturnRoot.Root Out_Order_Ins(CKDdto.Root model) { LLDReturnRoot.Root finalRoot = new LLDReturnRoot.Root { ROOT = new LLDReturnRoot.ROOT { ITEM = new List { } } }; List iTEMs = new List(); var result = new WeiLiResult(); using (var db = new SqlHelper().GetInstance()) { //创建领料单 try { foreach (var itemscddll in model.ROOT.SCDDLL) { LLDReturnRoot.ITEM lLDReturnRoots = new LLDReturnRoot.ITEM(); db.BeginTran(); #region 创建领料单 var po = db.Queryable().Includes(a => a.Details).Where(s => s.S_NO == itemscddll.LLDH).First(); #endregion //var po = WMSHelper.GetOutboundOrder(model.ROOT.SCDDLL.LLDH); if (po == null) { po = new TN_Ll_Order { S_NO = itemscddll.LLDH, S_FACTORY = itemscddll.GC, S_OUT_TYPE = "出库", S_BS_TYPE = "出库", S_AREA_CODE = "HJQ", S_BS_NO = itemscddll.LLDH }; po.Details = new List(); if (itemscddll.ITEM.Count() > 0) { foreach (var a in itemscddll.ITEM) { var item = db.Queryable().Where(it => it.S_ITEM_CODE == a.WLBM).First(); if (item == null) { //result.code = 1; //result.msg = $"物料{a.WLBM}物料主数据不存在该物料"; //throw new Exception($"物料{a.WLBM}物料主数据不存在该物料"); lLDReturnRoots.GC = itemscddll.GC; lLDReturnRoots.LLDH = itemscddll.LLDH; lLDReturnRoots.MSGCODE = 1; lLDReturnRoots.MSGDESP = $"物料{a.WLBM}物料主数据不存在该物料"; iTEMs.Add(lLDReturnRoots); continue; } po.Details.Add(new TN_Ll_detail { S_DO_NO = itemscddll.LLDH, S_AREA_CODE = "HJQ", N_ROW_NO = "", S_ITEM_CODE = a.WLBM, S_ITEM_NAME = item.S_ITEM_NAME, F_QTY = a.XQSL, S_BATCH_NO = "", S_ERP_WH_CODE = a.KCDD, N_ITEM_STATE = 1 }); } var result1 = db.Insertable(po).ExecuteCommand() > 0; db.Insertable(po.Details).ExecuteCommand(); } } else { List listtn = new List(); if (po.N_B_STATE != 0) { foreach (var a in itemscddll.ITEM) { if (a.LLDSCBS == "Y")//如果是删除标识则删除当前所属出库单明细 不是删除标记 则进行增改判断 { //result.code = 1; //result.msg = $"执行中领料单,物料{a.WLBM}物料不允许删除"; //throw new Exception($"执行中领料单,物料{a.WLBM}物料不允许删除"); lLDReturnRoots.GC = itemscddll.GC; lLDReturnRoots.LLDH = itemscddll.LLDH; lLDReturnRoots.MSGCODE = 1; lLDReturnRoots.MSGDESP = $"执行中领料单,物料{a.WLBM}物料不允许删除"; iTEMs.Add(lLDReturnRoots); continue; } var po1 = po.Details.Where(s => a.WLBM == s.S_ITEM_CODE).ToList(); if (po1.Count() == 0) //无则新增物料明细 { var item = db.Queryable().Where(it => it.S_ITEM_CODE == a.WLBM).First(); if (item == null) { //result.code = 1; //result.msg = $"物料{a.WLBM}物料主数据不存在该物料"; //throw new Exception($"物料{a.WLBM}物料主数据不存在该物料"); lLDReturnRoots.GC = itemscddll.GC; lLDReturnRoots.LLDH = itemscddll.LLDH; lLDReturnRoots.MSGCODE = 1; lLDReturnRoots.MSGDESP = $"物料{a.WLBM}物料主数据不存在该物料"; iTEMs.Add(lLDReturnRoots); continue; } TN_Ll_detail tN_Outbound_Detail = new TN_Ll_detail { S_DO_NO = itemscddll.LLDH, S_AREA_CODE = "HJQ", N_ROW_NO = "", S_ITEM_CODE = a.WLBM, S_ITEM_NAME = item.S_ITEM_NAME, F_QTY = a.XQSL, S_BATCH_NO = "无", S_ERP_WH_CODE = a.KCDD, N_ITEM_STATE = 1 }; listtn.Add(tN_Outbound_Detail); } else { if (po1.Where(s => s.F_ACC_D_QTY < a.XQSL).Count() > 0)//更新数量大于当前物料 数量 更新出库单 { po1.First().F_QTY = a.XQSL; db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); } else //返回失败 { //result.code = 1; //result.msg = $"更新失败,更新数量必须大于当前物料数量{a.WLBM}"; //throw new Exception($"更新失败,更新数量必须大于当前物料数量{a.WLBM}"); lLDReturnRoots.GC = itemscddll.GC; lLDReturnRoots.LLDH = itemscddll.LLDH; lLDReturnRoots.MSGCODE = 1; lLDReturnRoots.MSGDESP = $"更新失败,更新数量必须大于当前物料数量{a.WLBM}"; iTEMs.Add(lLDReturnRoots); continue; } } } ; }//执行中订单 else if (po.N_B_STATE == 0)//未执行 执行增删改操作 { foreach (var a in itemscddll.ITEM) { if (a.LLDSCBS == "Y")//如果是删除标识则删除当前所属出库单明细 不是删除标记 则进行增改判断 { var po1 = po.Details.Where(s => a.WLBM == s.S_ITEM_CODE).ToList(); if (po1.Count() > 0) //无则新增物料明细 { db.Deleteable().Where(it => it.S_ITEM_CODE == a.WLBM && it.S_DO_NO == po1.First().S_DO_NO).ExecuteCommand(); } else { //result.code = 1; //result.msg = $"物料{a.WLBM}物料数据不存在 无法删除"; //throw new Exception($"物料{a.WLBM}物料数据不存在 无法删除"); lLDReturnRoots.GC = itemscddll.GC; lLDReturnRoots.LLDH = itemscddll.LLDH; lLDReturnRoots.MSGCODE = 1; lLDReturnRoots.MSGDESP = $"物料{a.WLBM}物料数据不存在 无法删除"; iTEMs.Add(lLDReturnRoots); continue; } } else { var po1 = po.Details.Where(s => a.WLBM == s.S_ITEM_CODE).ToList(); if (po1.Count() == 0) //无则新增物料明细 { var item = db.Queryable().Where(it => it.S_ITEM_CODE == a.WLBM).First(); if (item == null) { //result.code = 1; //result.msg = $"物料{a.WLBM}物料主数据不存在该物料"; //throw new Exception($"物料{a.WLBM}物料主数据不存在该物料"); lLDReturnRoots.GC = itemscddll.GC; lLDReturnRoots.LLDH = itemscddll.LLDH; lLDReturnRoots.MSGCODE = 1; lLDReturnRoots.MSGDESP = $"物料{a.WLBM}物料主数据不存在该物料"; iTEMs.Add(lLDReturnRoots); continue; } TN_Ll_detail tN_Outbound_Detail = new TN_Ll_detail { S_DO_NO = itemscddll.LLDH, S_AREA_CODE = "HJQ", N_ROW_NO = "", S_ITEM_CODE = a.WLBM, S_ITEM_NAME = item.S_ITEM_NAME, F_QTY = a.XQSL, S_BATCH_NO = "无", S_ERP_WH_CODE = a.KCDD, N_ITEM_STATE = 1 }; listtn.Add(tN_Outbound_Detail); } else {//更新数量 未执行时 直接更新数量 po1.First().F_QTY = a.XQSL; db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); } } } ; } //添加数据 if (listtn.Count() > 0) { db.Insertable(listtn).ExecuteCommand(); } } db.CommitTran(); } finalRoot.ROOT.ITEM = iTEMs; } catch (Exception ex) { LLDReturnRoot.ITEM lLDReturnRoots = new LLDReturnRoot.ITEM(); lLDReturnRoots.GC = ""; lLDReturnRoots.LLDH = ""; lLDReturnRoots.MSGCODE = 1; lLDReturnRoots.MSGDESP = ex.Message; iTEMs.Add(lLDReturnRoots); finalRoot.ROOT.ITEM = iTEMs; db.RollbackTran(); //result.msg = $"出库单接口异常,异常信息={ex.Message}"; //var jsons = CkGetJsonResult(model.ROOT.SCDDLL.LLDH, model.ROOT.SCDDLL.GC, result.code.ToString(), result.msg); return finalRoot; } //LLDReturnRoot.ITEM lLDReturnRoots = new LLDReturnRoot.ITEM(); //lLDReturnRoots.GC = model.ROOT.SCDDLL.GC; //lLDReturnRoots.LLDH = model.ROOT.SCDDLL.LLDH; //lLDReturnRoots.MSGCODE = 0; //lLDReturnRoots.MSGDESP = "添加成功"; //finalRoot.ROOT.ITEM = lLDReturnRoots; //var json = CkGetJsonResult(model.ROOT.SCDDLL.LLDH, model.ROOT.SCDDLL.GC, result.code.ToString(), result.msg); return finalRoot; } } /// /// mobox创建出库单 /// /// /// internal static WeiLiResult Out_Order_Inss(string S_NO) { var result = new WeiLiResult(); // var db = new SqlHelper().GetInstance(); using (var db = new SqlHelper().GetInstance()) { //创建领料单 try { db.BeginTran(); #region 创建领料单 var po = db.Queryable().Includes(a => a.Details).Where(s => s.S_NO == S_NO).First(); #endregion //var po = WMSHelper.GetOutboundOrder(model.ROOT.SCDDLL.LLDH); if (po == null) { result.code = 1; result.msg = $"领料单号不存在"; throw new Exception($"领料单号不存在"); } else { //var az = db.Queryable().ToList(); var po1 = new TN_Outbound_Order { S_NO = WMSHelper.GenerateShippNo(),UNAME=po.UNAME, S_FACTORY = po.S_FACTORY,S_CBZX=po.S_CBZX,S_ZZKM=po.S_ZZKM,S_LRZX=po.S_LRZX, BLDAT = po.BLDAT, BUDAT=po.BUDAT, S_OUT_TYPE = po.S_OUT_TYPE, S_BS_TYPE = po.S_BS_TYPE, S_AREA_CODE = po.S_AREA_CODE, S_BS_NO = po.S_NO }; po1.Details = new List(); if (po.Details.Count() > 0) { foreach (var a in po.Details) { if (a.F_QTY > a.F_ACC_D_QTY) { po1.Details.Add(new TN_Outbound_Detail { S_DO_NO = po1.S_NO, S_AREA_CODE = "HJQ", N_ROW_NO = a.N_ROW_NO, S_KCDD = a.S_KCDD, S_ITEM_CODE = a.S_ITEM_CODE, S_ITEM_NAME = a.S_ITEM_NAME, S_UOM = a.S_UOM, F_QTY = a.F_QTY - a.F_ACC_D_QTY, S_BATCH_NO = a.S_BATCH_NO, S_SERIAL_NO = a.S_SERIAL_NO, S_CGPZH = a.S_CGPZH, S_CGPZXMBH = a.S_CGPZXMBH, S_ERP_WH_CODE = a.S_ERP_WH_CODE, N_ITEM_STATE = a.N_ITEM_STATE }); a.F_ACC_D_QTY += a.F_QTY - a.F_ACC_D_QTY; db.Updateable(a).UpdateColumns(it => new { it.F_ACC_D_QTY }).ExecuteCommand(); } else { result.code = 1; result.msg = $"数量小于分配数量"; throw new Exception($"数量小于分配数量"); } } if (po1.Details.Count() > 0) { var result1 = db.Insertable(po1).ExecuteCommand() > 0; db.Insertable(po1.Details).ExecuteCommand(); } else { result.code = 1; result.msg = $"领料单{po.S_NO}无需新增出库单,请检查"; return result; } } } db.CommitTran(); } catch (Exception ex) { db.RollbackTran(); result.code = 1; result.msg = $"出库单接口异常,异常信息={ex.Message}"; return result; } return result; } } /// /// 创建出库单 /// /// /// //internal static string Out_Order_In(CKDdto.Root model) //{ // var result = new WeiLiResult(); // // var db = new SqlHelper().GetInstance(); // using (var db = new SqlHelper().GetInstance()) // { // //创建发货单,人工点确认后生成分拣单,没有缺货的自动更新为失败,有货的更新为执行中 // //创建入库单主子表 // //var po = WMSHelper.GetShippingOrder(model.shippingNoteNo); // try // { // db.BeginTran(); // var po = WMSHelper.GetOutboundOrder(model.ROOT.SCDDLL.LLDH); // if (po == null) // { // po = new TN_Outbound_Order { S_NO = model.ROOT.SCDDLL.LLDH, S_FACTORY = model.ROOT.SCDDLL.GC, S_OUT_TYPE = "出库", S_BS_TYPE = "出库", S_AREA_CODE = "HJQ", S_BS_NO = model.ROOT.SCDDLL.LLDH }; // po.Details = new List(); // if (model.ROOT.SCDDLL.ITEM.Count() > 0) // { // foreach (var a in model.ROOT.SCDDLL.ITEM) // { // var item = db.Queryable().Where(it => it.S_ITEM_CODE == a.WLBM).First(); // if (item == null) // { // result.code = 1; // result.msg = $"物料{a.WLBM}物料主数据不存在该物料"; // throw new Exception($"物料{a.WLBM}物料主数据不存在该物料"); // } // po.Details.Add(new TN_Outbound_Detail // { // S_DO_NO = model.ROOT.SCDDLL.LLDH, // S_AREA_CODE = "HJQ", // N_ROW_NO = "", // S_ITEM_CODE = a.WLBM, // S_ITEM_NAME = item.S_ITEM_NAME, // F_QTY = a.XQSL, // S_BATCH_NO = "无", // S_ERP_WH_CODE = a.KCDD, // N_ITEM_STATE = 1 // }); // } // //WMSHelper.CreateShippingOrder(po); // WMSHelper.CreateOutboundOrder(po); // } // } // else // {//待执行出库单 更新数量必须大于当前物料数量 // List listtn = new List(); // if (po.N_B_STATE != 0) // { // foreach (var a in model.ROOT.SCDDLL.ITEM) // { // if (a.LLDSCBS == "Y")//如果是删除标识则删除当前所属出库单明细 不是删除标记 则进行增改判断 // { // result.code = 1; // result.msg = $"执行中订单,物料{a.WLBM}物料不允许删除"; // throw new Exception($"执行中订单,物料{a.WLBM}物料不允许删除"); // } // var po1 = po.Details.Where(s => a.WLBM == s.S_ITEM_CODE).ToList(); // if (po1.Count() == 0) //无则新增物料明细 // { // var item = db.Queryable().Where(it => it.S_ITEM_CODE == a.WLBM).First(); // if (item == null) // { // result.code = 1; // result.msg = $"物料{a.WLBM}物料主数据不存在该物料"; // throw new Exception($"物料{a.WLBM}物料主数据不存在该物料"); // } // TN_Outbound_Detail tN_Outbound_Detail = new TN_Outbound_Detail // { // S_DO_NO = model.ROOT.SCDDLL.LLDH, // S_AREA_CODE = "HJQ", // N_ROW_NO = "", // S_ITEM_CODE = a.WLBM, // S_ITEM_NAME = item.S_ITEM_NAME, // F_QTY = a.XQSL, // S_BATCH_NO = "无", // S_ERP_WH_CODE = a.KCDD, // N_ITEM_STATE = 1 // }; // listtn.Add(tN_Outbound_Detail); // } // else // { // if (po1.Where(s => s.F_ACC_D_QTY < a.XQSL).Count() > 0)//更新数量大于当前物料 数量 更新出库单 // { // po1.First().F_QTY = a.XQSL; // db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); // } // else //返回失败 // { // result.code = 1; // result.msg = $"更新失败,更新数量必须大于当前物料数量{a.WLBM}"; // throw new Exception($"更新失败,更新数量必须大于当前物料数量{a.WLBM}"); // } // } // } // ; // }//执行中订单 // else if (po.N_B_STATE == 0)//未执行 执行增删改操作 // { // foreach (var a in model.ROOT.SCDDLL.ITEM) // { // if (a.LLDSCBS == "Y")//如果是删除标识则删除当前所属出库单明细 不是删除标记 则进行增改判断 // { // var po1 = po.Details.Where(s => a.WLBM == s.S_ITEM_CODE).ToList(); // if (po1.Count() > 0) //无则新增物料明细 // { // db.Deleteable().Where(it => it.S_ITEM_CODE == a.WLBM && it.S_DO_NO == po1.First().S_DO_NO).ExecuteCommand(); // } // else // { // result.code = 1; // result.msg = $"物料{a.WLBM}物料数据不存在 无法删除"; // throw new Exception($"物料{a.WLBM}物料数据不存在 无法删除"); // } // } // else // { // var po1 = po.Details.Where(s => a.WLBM == s.S_ITEM_CODE).ToList(); // if (po1.Count() == 0) //无则新增物料明细 // { // var item = db.Queryable().Where(it => it.S_ITEM_CODE == a.WLBM).First(); // if (item == null) // { // result.code = 1; // result.msg = $"物料{a.WLBM}物料主数据不存在该物料"; // throw new Exception($"物料{a.WLBM}物料主数据不存在该物料"); // } // TN_Outbound_Detail tN_Outbound_Detail = new TN_Outbound_Detail // { // S_DO_NO = model.ROOT.SCDDLL.LLDH, // S_AREA_CODE = "HJQ", // N_ROW_NO = "", // S_ITEM_CODE = a.WLBM, // S_ITEM_NAME = item.S_ITEM_NAME, // F_QTY = a.XQSL, // S_BATCH_NO = "无", // S_ERP_WH_CODE = a.KCDD, // N_ITEM_STATE = 1 // }; // listtn.Add(tN_Outbound_Detail); // } // else // {//更新数量 未执行时 直接更新数量 // po1.First().F_QTY = a.XQSL; // db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); // } // } // } // ; // } // //添加数据 // if (listtn.Count() > 0) // { // db.Insertable(listtn).ExecuteCommand(); // } // } // db.CommitTran(); // } // catch (Exception ex) // { // db.RollbackTran(); // result.code = 1; // result.msg = $"出库单接口异常,异常信息={ex.Message}"; // var jsons = CkGetJsonResult(model.ROOT.SCDDLL.LLDH, model.ROOT.SCDDLL.GC, result.code.ToString(), result.msg); // return jsons; // } // var json = CkGetJsonResult(model.ROOT.SCDDLL.LLDH, model.ROOT.SCDDLL.GC, result.code.ToString(), result.msg); // return json; // } //} #region wm-spa /// /// 外采入库回调 /// /// /// internal static async Task WcRkBacking(WcRkDto model) { var result = new SimpleResult(); //判断起始库位是否锁定 // var db = new SqlHelper().GetInstance(); using (var db = new SqlHelper().GetInstance()) { var po = db.Queryable().Includes(p => p.Details).Where(a => a.S_NO == model.S_NO).First(); var CntrItemRels = db.Queryable().Where(a => a.S_BS_NO == model.S_NO).ToList(); if (po == null) { result.resultCode = 1; result.resultMsg = "数据不存在"; } List listitem = new List(); foreach (var item in po.Details) { WcRkBc.ITEM wcbkbcitem = new WcRkBc.ITEM(); wcbkbcitem.WLPZBH = po.S_NO; wcbkbcitem.WLPZND = po.S_WLPZND; wcbkbcitem.WLPZZDXM = item.N_ROW_NO; wcbkbcitem.WLH = item.S_ITEM_CODE; wcbkbcitem.JBJLDW = item.S_UOM; wcbkbcitem.SL = item.F_QTY; wcbkbcitem.CGPZH = item.S_CGPZH; wcbkbcitem.CGPZXMBH = item.S_CGPZXMBH; wcbkbcitem.KCDD = item.S_KCDD; //wcbkbcitem.JYPBH = item.S_JYPBH; //wcbkbcitem.KJPZSSRQ = item.S_KJPZSRRQ; //wcbkbcitem.KJPZSRSJ = item.S_KJPZSRSJ; wcbkbcitem.PC = item.S_BATCH_NO; List listitem1 = new List(); //string[] xlhValues = item.S_SERIAL_NO.Split(','); var serialNos = string.Join(",", CntrItemRels .Where(s => s.S_ITEM_CODE == item.S_ITEM_CODE) .Select(s => s.S_SERIAL_NO)); string[] xlhValues = serialNos.Split(','); foreach (var xlhValue in xlhValues) { WcRkBc.ITEM1 newItem = new WcRkBc.ITEM1 { XLH = xlhValue }; listitem1.Add(newItem); } wcbkbcitem.ITEM1 = listitem1; listitem.Add(wcbkbcitem); } WcRkBc.Root roots = new WcRkBc.Root { ROOT = new WcRkBc.ROOT { WLPZ = new WcRkBc.WLPZ { HEAD = new WcRkBc.HEAD { KEY = "12345", GZRQ = DateTime.Now.ToString(), GZRY = model.GZRY, GC = po.S_FACTORY }, ITEM = new List { } } } }; roots.ROOT.WLPZ.ITEM = listitem; var json = JsonConvert.SerializeObject(roots.ROOT); string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml; XElement responseXElement = XElement.Parse(xml); //返回json var response = new HttpResponseMessage() { Content = new StringContent(xml, Encoding.UTF8, "application/xml") }; // 现在 root 对象包含了您定义的假数据 // 发送POST请求 // 确保HTTP成功状态值 response.EnsureSuccessStatusCode(); string xmlData = "{\r\n \"ROOT\": {\r\n \"WLPZ\": {\r\n \"KEY\": \"唯一标识\",\r\n \"WLPZBH\": \"物料凭证号\",\r\n " + " \"WLPZND\": \"物料凭年度\",\r\n \"MSGCODE\": \"0\",\r\n \"MSGDESP\": \"失败原因或者成功信息字符长度255\"\r\n }\r\n }\r\n}"; LogHelper.Info($"xml数据{xml}"); // 创建 StringContent 并指定媒体类型为 "text/xml" HttpContent content = new StringContent(xml, Encoding.UTF8, "application/xml"); string url = Settings.WCSSeverUrl + "/api/WmsSap/cesReceiveXmlData"; string responseXml = ""; using (HttpClient client = new HttpClient()) { // 发送 POST 请求并接收响应 HttpResponseMessage responsess = await client.PostAsync(url, content); responseXml = await responsess.Content.ReadAsStringAsync(); } // 将 XmlDocument 转换为 JSON 字符串 //JObject jsonObject = JsonConvert.DeserializeObject(JsonConvert.SerializeXmlNode(xmlDoc)); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(responseXml.ToString()); JObject jsonObject = JsonConvert.DeserializeObject(JsonConvert.SerializeXmlNode(xmlDoc)); var data = JsonConvert.DeserializeObject(jsonObject.ToString()); //添加凭证记录表 result.resultMsg = data.ROOT.ITEM.MSGDESP; result.resultCode = data.ROOT.ITEM.MSGCODE; MaterialVoucher materialVoucher = new MaterialVoucher(); materialVoucher.S_NO = model.S_NO; materialVoucher.S_TYPE = po.S_IN_TYPE; materialVoucher.S_WLPZBH = data.ROOT.ITEM.WLPZBH; materialVoucher.S_WLPZND = data.ROOT.ITEM.WLPZND; materialVoucher.STATUS = 0; db.Insertable(materialVoucher).ExecuteCommand(); return result; } } /// /// 内采入库回调 /// /// /// internal static async Task NcRkBacking(WcRkDto model) { var result = new SimpleResult(); //判断起始库位是否锁定 //var db = new SqlHelper().GetInstance(); using (var db = new SqlHelper().GetInstance()) { LogHelper.Info($"进来了"); bool resu = false; try { db.BeginTran(); var po = db.Queryable().Includes(p => p.Details).Where(a => a.S_NO == model.S_NO).First(); LogHelper.Info($"进来了2"); #region MyRegion if (po.Details.Count > 0) { var url = Settings.MoboxSeverUrl + "inventory/AddChange"; //仓库量表升量 var req = new AddChangeModel { op_type = 5 }; //库区量表升量 var req2 = new AddChangeModel { op_type = 6 }; po.Details.ForEach(a => { LogHelper.Info($"填充数据"); LogHelper.Info($"添加仓库量表数据 仓库 物料编码{a.S_ITEM_CODE} 物料名称 数量{a.F_QTY}"); req.item_info.Add(new AddChangeModel.itemModel { wh_code = "cangku", item_code = a.S_ITEM_CODE, item_name = a.S_ITEM_NAME, qty = (float)a.F_QTY }); LogHelper.Info($"添加库区量表数据 库区 物料编码{a.S_ITEM_CODE} 物料名称{a.S_ITEM_NAME} 数量{a.F_QTY}"); req2.item_info.Add(new AddChangeModel.itemModel { wh_code = "cangku", area_code = "kuqu", item_code = a.S_ITEM_CODE, item_name = a.S_ITEM_NAME, qty = (float)a.F_QTY }); }); var reqData = JsonConvert.SerializeObject(req); var AppKey = Settings.AppKey; var AppSecret = Settings.AppSecret; var ReqTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString(); //var ReqTime = GetTimeStamp(DateTime.Now.AddHours(-8), 1, 2); LogHelper.Info($"加密前 AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime}"); var ReqVerify = GetMd5FromString(AppKey + AppSecret + ReqTime); LogHelper.Info($"加密后 AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime} ReqVerify={ReqVerify} url={url} req={reqData}"); var res = new HttpHelper().WebPost(url, reqData, "application/json", AppKey, ReqTime, ReqVerify); if (!string.IsNullOrEmpty(res)) { LogHelper.Info($"mobox 仓库升量接口返回 {res}"); var moboxres = JsonConvert.DeserializeObject(res); if (moboxres.err_code != 0) { resu = false; } } else { LogHelper.Info($"mobox 仓库升量接口返回为空"); resu = false; } var reqData2 = JsonConvert.SerializeObject(req2); var ReqTime2 = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString(); LogHelper.Info($"加密前 AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime2}"); var ReqVerify2 = GetMd5FromString(AppKey + AppSecret + ReqTime2); LogHelper.Info($"加密后 AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime2} ReqVerify={ReqVerify2} url={url} req={reqData2}"); var res2 = new HttpHelper().WebPost(url, reqData2, "application/json", AppKey, ReqTime2, ReqVerify2); if (!string.IsNullOrEmpty(res2)) { LogHelper.Info($"mobox 库区升量接口返回 {res2}"); var moboxres = JsonConvert.DeserializeObject(res); if (moboxres.err_code != 0) { resu = false; } } else { LogHelper.Info($"mobox 库区升量接口返回为空"); resu = false; } } else LogHelper.Info($"入库单明细无值"); #endregion var CntrItemRels = db.Queryable().Where(a => a.S_BS_NO == model.S_NO).ToList(); if (po == null) { result.resultCode = 1; result.resultMsg = "数据不存在"; return result; } if (po.S_IN_TYPE == "内采入库") { List listitem = new List(); foreach (var item in po.Details) { NcRkDto.ITEM wcbkbcitem = new NcRkDto.ITEM(); //wcbkbcitem.WLPZBH = po.S_WLPZBH; //wcbkbcitem.WLPZND = po.S_WLPZND; wcbkbcitem.WLPZZDXM = item.N_ROW_NO; wcbkbcitem.WLH = item.S_ITEM_CODE; wcbkbcitem.JBJLDW = item.S_UOM; wcbkbcitem.SL = item.F_QTY; wcbkbcitem.CGPZH = item.S_CGPZH; wcbkbcitem.CGPZXMBH = item.S_CGPZXMBH; wcbkbcitem.KCDD = item.S_KCDD; wcbkbcitem.YDLX = po.S_BS_TYPE; wcbkbcitem.GC = po.S_FACTORY; //wcbkbcitem.JYPBH = item.S_JYPBH; //wcbkbcitem.KJPZSSRQ = item.S_KJPZSRRQ; //wcbkbcitem.KJPZSRSJ = item.S_KJPZSRSJ; wcbkbcitem.PC = item.S_BATCH_NO; List listitem1 = new List(); //string[] xlhValues = item.S_SERIAL_NO.Split(','); //var serialNos = string.Join(",", CntrItemRels // .Where(s => s.S_ITEM_CODE == item.S_ITEM_CODE) // .Select(s => s.S_SERIAL_NO)); //string[] xlhValues = serialNos.Split(','); //foreach (var xlhValue in xlhValues) //{ // NcRkDto.ITEM1 newItem = new NcRkDto.ITEM1 { XLH = xlhValue }; // listitem1.Add(newItem); //} //wcbkbcitem.ITEM1 = listitem1; listitem.Add(wcbkbcitem); } NcRkDto.Root roots = new NcRkDto.Root { ROOT = new NcRkDto.ROOT { WLPZ = new NcRkDto.WLPZ { HEAD = new NcRkDto.HEAD { KEY = po.S_NO, GZRQ = DateTime.Now.ToString("yyyyMMdd"), GZRY = model.GZRY, WLPZBH = po.S_NO, WLPZND = po.S_WLPZND }, ITEM = new List { } } } }; roots.ROOT.WLPZ.ITEM = listitem; var json = JsonConvert.SerializeObject(roots.ROOT); string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml; // 现在 root 对象包含了您定义的假数据 // 发送POST请求 LogHelper.Info($"内采收货xml数据{xml}"); #region MyRegion // 创建 StringContent 并指定媒体类型为 "text/xml" //HttpContent content = new StringContent(xml, Encoding.UTF8, "application/xml"); //string url = Settings.WCSSeverUrl + "/api/WmsSap/cesReceiveXmlData"; //string responseXml = ""; //using (HttpClient client = new HttpClient()) //{ // // 发送 POST 请求并接收响应 // HttpResponseMessage responsess = await client.PostAsync(url, content); // responseXml = await responsess.Content.ReadAsStringAsync(); //} // 将 XmlDocument 转换为 JSON 字符串 //JObject jsonObject = JsonConvert.DeserializeObject(JsonConvert.SerializeXmlNode(xmlDoc)); #endregion #region sap回调 // 创建Web Service代理类实例 ZSCM_NC service = new ZSCM_NC(); // 添加语言设置(中文) service.PreAuthenticate = true; service.Url = service.Url + "?sap-language=ZH"; // service.Credentials = new NetworkCredential("CONN_RFC", "Init.1234"); // 准备请求参数 ZscmNc request = new ZscmNc(); request.Input = "" + xml; LogHelper.Info($"内采SAP回调"); // 调用Web Service ZscmNcResponse responses = service.ZscmNc(request); // 处理响应 LogHelper.Info("SAP返回结果: " + responses.Output); // 解析Output中的凭证号等信息 #endregion XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(responses.Output.ToString()); JObject jsonObject = JsonConvert.DeserializeObject(JsonConvert.SerializeXmlNode(xmlDoc)); var data = JsonConvert.DeserializeObject(jsonObject.ToString()); //添加凭证记录表 result.resultMsg = data.ROOT.ITEM.MSGDESP; result.resultCode = data.ROOT.ITEM.MSGCODE; MaterialVoucher materialVoucher = new MaterialVoucher(); if (data.ROOT.ITEM.MSGCODE == 0) { materialVoucher.S_NO = model.S_NO; materialVoucher.S_TYPE = po.S_IN_TYPE; materialVoucher.S_WLPZBH = data.ROOT.ITEM.WLPZBH; materialVoucher.S_WLPZND = data.ROOT.ITEM.WLPZND; materialVoucher.STATUS = 0; db.Insertable(materialVoucher).ExecuteCommand(); } } else if (po.S_IN_TYPE == "计划外退料入库") { DateTime dateTime; DateTime dateTime1 ; string GZRQ = ""; string PZZDRQ = ""; if (po.BUDAT!=null) { GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd"); } if (po.BLDAT != null) { PZZDRQ = DateTime.Parse(po.BLDAT.ToString()).ToString("yyyyMMdd"); } JHWBackDto.Root myRoot = new JHWBackDto.Root { ROOT = new JHWBackDto.ROOT { HEAD = new JHWBackDto.HEAD { KEY = po.S_NO, GZRQ = GZRQ, PZZDRQ = PZZDRQ, YHM = po.UNAME, PZTTWB = po.BKTXT, YDLX = po.S_BS_TYPE, TSKCBS = po.SOBKZ, ITEM = new List { } }, } }; //回参物料信息 List iTEMs = new List(); foreach (var item in po.Details) { var podetail = po.Details.Where(s => s.S_ITEM_CODE == item.S_ITEM_CODE).FirstOrDefault(); JHWBackDto.ITEM ckbitem = new JHWBackDto.ITEM(); ckbitem.WLBH = item.S_ITEM_CODE; ckbitem.GC = po.S_FACTORY; ckbitem.XSDD = podetail?.S_XSDD; ckbitem.XSDDHXM = podetail?.S_XSDDXMBH; ckbitem.SL = item.F_QTY; ckbitem.DW = podetail?.S_UOM; ckbitem.DDH = podetail?.S_DDH; //ckbitem.PH = podetail?.S_PH; // ckbitem.TSKCBS = podetail?.S_TSKCBS; //ckbitem.DDHXM = (podetail?.N_ROW_NO); ckbitem.WBS = podetail?.S_WBS; ckbitem.KCDD = podetail?.S_KCDD; ckbitem.PC = podetail?.S_BATCH_NO; #region MyRegion // List listitem1 = new List(); JHWBackDto.ITEM1 listitem1 = new JHWBackDto.ITEM1(); listitem1.XLH = podetail?.S_SERIAL_NO.Split(',').ToList(); ////string[] xlhValues = item.S_SERIAL_NO.Split(','); //var serialNos = string.Join(",", CntrItemRels // .Where(s => s.S_ITEM_CODE == item.S_ITEM_CODE) // .Select(s => s.S_SERIAL_NO)); //string[] xlhValues = serialNos.Split(','); //foreach (var xlhValue in xlhValues) //{ // JHWBackDto.ITEM1 newItem = new JHWBackDto.ITEM1 { XLH = xlhValue }; // listitem1.Add(newItem); //} ckbitem.ITEM1 = listitem1; #endregion iTEMs.Add(ckbitem); } myRoot.ROOT.HEAD.ITEM = iTEMs; #region wms-sap回调 ////类转json var json = JsonConvert.SerializeObject(myRoot.ROOT); ////json转xml string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml; LogHelper.Info($"计划外退料xml数据{xml}"); //// 创建 StringContent 并指定媒体类型为 "text/xml" //HttpContent content = new StringContent(xml, Encoding.UTF8, "application/xml"); //string url = Settings.WCSSeverUrl + "/api/WmsSap/cesReceiveXmlData"; //string responseXml = ""; //using (HttpClient client = new HttpClient()) //{ // // 发送 POST 请求并接收响应 // HttpResponseMessage responsess = await client.PostAsync(url, content); // responseXml = await responsess.Content.ReadAsStringAsync(); //} #region sap回调 // 创建Web Service代理类实例 ZSCM2_SCFLJHW service = new ZSCM2_SCFLJHW(); // 添加语言设置(中文) service.PreAuthenticate = true; service.Url = service.Url + "?sap-language=ZH"; // service.Credentials = new NetworkCredential("CONN_RFC", "Init.1234"); // 准备请求参数 ZscmScflJhw request = new ZscmScflJhw(); request.Input = "" + xml; LogHelper.Info($"计划外SAP回调"); // 调用Web Service ZscmScflJhwResponse responses = service.ZscmScflJhw(request); // 处理响应 LogHelper.Info("SAP返回结果: " + responses.Output); // 解析Output中的凭证号等信息 #endregion XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(responses.Output.ToString()); JObject jsonObject = JsonConvert.DeserializeObject(JsonConvert.SerializeXmlNode(xmlDoc)); var data = JsonConvert.DeserializeObject(jsonObject.ToString()); //添加凭证记录表 result.resultMsg = data.ROOT.ITEM.MSGDESP; result.resultCode = data.ROOT.ITEM.MSGCODE; if (data.ROOT.ITEM.MSGCODE == 0) { MaterialVoucher materialVoucher = new MaterialVoucher(); materialVoucher.S_NO = po.S_NO; materialVoucher.S_TYPE = po.S_IN_TYPE; materialVoucher.S_WLPZBH = data.ROOT.ITEM.WLPZBH; materialVoucher.S_WLPZND = data.ROOT.ITEM.WLPZND; materialVoucher.STATUS = 0; db.Insertable(materialVoucher).ExecuteCommand(); } #endregion } else if (po.S_IN_TYPE == "外采入库") { LogHelper.Info($"外采入库 xml数据"); List listitem = new List(); foreach (var item in po.Details) { WcRkBc.ITEM wcbkbcitem = new WcRkBc.ITEM(); wcbkbcitem.WLPZBH = po.S_NO; wcbkbcitem.WLPZND = po.S_WLPZND; wcbkbcitem.WLPZZDXM = item.N_ROW_NO; wcbkbcitem.WLH = item.S_ITEM_CODE; wcbkbcitem.JBJLDW = item.S_UOM; wcbkbcitem.SL = item.F_QTY; wcbkbcitem.CGPZH = item.S_CGPZH; wcbkbcitem.CGPZXMBH = item.S_CGPZXMBH; wcbkbcitem.KCDD = item.S_KCDD; //wcbkbcitem.JYPBH = item.S_JYPBH; //wcbkbcitem.KJPZSSRQ = item.S_KJPZSRRQ; //wcbkbcitem.KJPZSRSJ = item.S_KJPZSRSJ; wcbkbcitem.PC = item.S_BATCH_NO; List listitem1 = new List(); //string[] xlhValues = item.S_SERIAL_NO.Split(','); var serialNos = string.Join(",", CntrItemRels .Where(s => s.S_ITEM_CODE == item.S_ITEM_CODE) .Select(s => s.S_SERIAL_NO)); string[] xlhValues = serialNos.Split(','); foreach (var xlhValue in xlhValues) { WcRkBc.ITEM1 newItem = new WcRkBc.ITEM1 { XLH = xlhValue }; listitem1.Add(newItem); } wcbkbcitem.ITEM1 = listitem1; listitem.Add(wcbkbcitem); } WcRkBc.Root roots = new WcRkBc.Root { ROOT = new WcRkBc.ROOT { WLPZ = new WcRkBc.WLPZ { HEAD = new WcRkBc.HEAD { KEY = po.S_NO, GZRQ = DateTime.Now.ToString("yyyyMMdd"), GZRY = model.GZRY, GC = po.S_FACTORY }, ITEM = new List { } } } }; roots.ROOT.WLPZ.ITEM = listitem; var json = JsonConvert.SerializeObject(roots.ROOT); string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml; XElement responseXElement = XElement.Parse(xml); //返回json var response = new HttpResponseMessage() { Content = new StringContent(xml, Encoding.UTF8, "application/xml") }; LogHelper.Info($"外采sap xml数据{xml}"); // 确保HTTP成功状态值 response.EnsureSuccessStatusCode(); #region MyRegion //string xmlData = "{\r\n \"ROOT\": {\r\n \"WLPZ\": {\r\n \"KEY\": \"唯一标识\",\r\n \"WLPZBH\": \"物料凭证号\",\r\n " + // " \"WLPZND\": \"物料凭年度\",\r\n \"MSGCODE\": \"0\",\r\n \"MSGDESP\": \"失败原因或者成功信息字符长度255\"\r\n }\r\n }\r\n}"; // 创建 StringContent 并指定媒体类型为 "text/xml" //HttpContent content = new StringContent(xml, Encoding.UTF8, "application/xml"); //string url = Settings.WCSSeverUrl + "/api/WmsSap/cesReceiveXmlData"; //string responseXml = ""; //using (HttpClient client = new HttpClient()) //{ // // 发送 POST 请求并接收响应 // HttpResponseMessage responsess = await client.PostAsync(url, content); // responseXml = await responsess.Content.ReadAsStringAsync(); //} #endregion #region sap回调 // 创建Web Service代理类实例 ZSCM_WC service = new ZSCM_WC(); service.PreAuthenticate = true; service.Url = service.Url + "?sap-language=ZH"; service.Credentials = new NetworkCredential("CONN_RFC", "Init.1234"); // 准备请求参数 ZscmWc request = new ZscmWc(); request.Input = "" + xml; LogHelper.Info($"SAP回调"); // 调用Web Service ZscmWcResponse responses = service.ZscmWc(request); // 处理响应 LogHelper.Info("SAP返回结果: " + responses.Output); // 解析Output中的凭证号等信息 #endregion // 将 XmlDocument 转换为 JSON 字符串 //JObject jsonObject = JsonConvert.DeserializeObject(JsonConvert.SerializeXmlNode(xmlDoc)); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(responses.Output.ToString()); JObject jsonObject = JsonConvert.DeserializeObject(JsonConvert.SerializeXmlNode(xmlDoc)); var data = JsonConvert.DeserializeObject(jsonObject.ToString()); //添加凭证记录表 result.resultMsg = data.ROOT.ITEM.MSGDESP; result.resultCode = data.ROOT.ITEM.MSGCODE; if (data.ROOT.ITEM.MSGCODE == 0) { MaterialVoucher materialVoucher = new MaterialVoucher(); materialVoucher.S_NO = model.S_NO; materialVoucher.S_TYPE = po.S_IN_TYPE; materialVoucher.S_WLPZBH = data.ROOT.ITEM?.WLPZBH; materialVoucher.S_WLPZND = data.ROOT.ITEM?.WLPZND; materialVoucher.STATUS = 0; db.Insertable(materialVoucher).ExecuteCommand(); } //else //{ // SapReturn sapReturn = new SapReturn(); // sapReturn.N_STATUS = 0; // sapReturn.S_NO = model.S_NO; // sapReturn.S_TYPE = po.S_IN_TYPE; // sapReturn.S_JSON = ""+ xml; // db.Insertable(sapReturn).ExecuteCommand(); //} } else if (po.S_IN_TYPE == "冲销入库") { //var materpz = db.Queryable().Where(s => s.S_NO == po.S_NO).First(); string GZRQ = ""; LogHelper.Info($"冲销入库入库{po.BUDAT}"); if (po.BUDAT != null) { GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd"); } //出库回调入参 CXCkBackDto.Root roots = new CXCkBackDto.Root { ROOT = new CXCkBackDto.ROOT { HEAD = new List { } } }; List listhead = new List(); //出库单详情 LogHelper.Info($"冲销入库入库{GZRQ}"); var porecord = db.Queryable().Where(a => a.S_NO == po.S_BS_NO&&a.STATUS==0).ToList(); //var podet = db.Queryable().Where(a => a.S_NO == po.S_BS_NO&&a.STATUS==0).ToList(); LogHelper.Info($"数量{porecord.Count()}"); LogHelper.Info($"数量{po.Details.Count()}"); //if (porecord.Count() <1 ) //{ // LogHelper.Info($"凭证号不存在"); //} foreach (var item in po.Details) { CXCkBackDto.HEAD hEAD = new CXCkBackDto.HEAD(); hEAD.GZRQ = GZRQ; hEAD.SRSJ = DateTime.Now.ToString("yyyyMMdd"); //hEAD.WLPZ = porecord.First()?.S_WLPZBH; hEAD.WLPZ = po.S_WLPZ; hEAD.WLPZNF = po.S_WLPZND; //hEAD.WLPZ = porecord.Where(s => s.S_WLBM == item.S_ITEM_CODE && s.S_WLH == item.N_ROW_NO).First()?.S_WLPZBH; //hEAD.WLPZNF = porecord.Where(s=>s.S_WLBM==item.S_ITEM_CODE&&s.S_WLH==item.N_ROW_NO).First()?.S_WLPZND; //hEAD.WLPZNF = porecord.First()?.S_WLPZND; hEAD.WLPZXM = item.N_ROW_NO; hEAD.GZRY = po.UNAME; listhead.Add(hEAD); } roots.ROOT.HEAD = listhead; var json = JsonConvert.SerializeObject(roots.ROOT); string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml; XElement responseXElement = XElement.Parse(xml); //返回json var response = new HttpResponseMessage() { Content = new StringContent(xml, Encoding.UTF8, "application/xml") }; // 确保HTTP成功状态值 response.EnsureSuccessStatusCode(); LogHelper.Info($"冲销入库xml数据{xml}"); ZSCM2_CXPZ service = new ZSCM2_CXPZ(); service.PreAuthenticate = true; service.Url = service.Url + "?sap-language=ZH"; // 准备请求参数 ZfmScm2CxpzMm001 request = new ZfmScm2CxpzMm001(); request.Input = "" + xml; LogHelper.Info($"通用冲销SAP回调"); // 调用Web Service ZfmScm2CxpzMm001Response responses = service.ZfmScm2CxpzMm001(request); // 处理响应 LogHelper.Info("通用冲销SAP返回结果: " + responses.Output); // 将 XmlDocument 转换为 JSON 字符串 //JObject jsonObject = JsonConvert.DeserializeObject(JsonConvert.SerializeXmlNode(xmlDoc)); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(responses.Output.ToString()); JObject jsonObject = JsonConvert.DeserializeObject(JsonConvert.SerializeXmlNode(xmlDoc)); //var data = JsonConvert.DeserializeObject(jsonObject.ToString()); var data = JsonConvert.DeserializeObject(jsonObject.ToString()); var resmeg = ""; int rescode = 0; //添加凭证记录表 if (data != null) { List materiallist = new List(); foreach (var item in data.ROOT.ITEM) { if (item.MSGCODE == 0) { var onr = po.Details.Where(s => s.N_ROW_NO == item.WLPZHXM).First(); MaterialVoucher materialVoucher = new MaterialVoucher(); materialVoucher.S_NO = po.S_NO; materialVoucher.S_TYPE = po.S_IN_TYPE; materialVoucher.S_WLPZBH = item?.WLPZBH; materialVoucher.S_WLPZND = item?.WLPZND; materialVoucher.S_WLPZHXM = item?.WLPZHXM; materialVoucher.S_YWLPZBH = item?.YWLPZBH; materialVoucher.S_YWLPZND = item?.YWLPZND; materialVoucher.S_YWLPZHXM = item?.YWLPZHXM; materialVoucher.S_WH_CODE = po.S_WH_CODE; materialVoucher.S_AREA_CODE = po.S_AREA_CODE; materialVoucher.F_QTY = onr.F_QTY; //materialVoucher.STATUS = 0; resmeg += item?.MSGDESP; materiallist.Add(materialVoucher); } else { rescode = 1; } } if (materiallist.Count() > 0) { db.Insertable(materiallist).ExecuteCommand(); } } result.resultMsg = resmeg; result.resultCode = rescode; //添加凭证记录表 //result.resultMsg = data.ROOT.ITEM.MSGDESP; //result.resultCode = data.ROOT.ITEM.MSGCODE; //List materiallist = new List(); //if (data.ROOT.ITEM.MSGCODE == 0) //{ // foreach (var item in po.Details) // { // MaterialVoucher materialVoucher = new MaterialVoucher(); // materialVoucher.S_NO = po.S_NO; // materialVoucher.S_TYPE = po.S_IN_TYPE; // materialVoucher.S_WLBM = item.S_ITEM_CODE; // materialVoucher.S_WLH = item.N_ROW_NO; // materialVoucher.S_WLPZBH = data.ROOT.ITEM?.WLPZ; // materialVoucher.S_WLPZND = data.ROOT.ITEM?.WLPZND; // materialVoucher.S_WH_CODE = po.S_WH_CODE; // materialVoucher.S_AREA_CODE = po.S_AREA_CODE; // materialVoucher.F_QTY = item.F_QTY; // materialVoucher.STATUS = 0; // db.Insertable(materialVoucher).ExecuteCommand(); // } //} //db.Insertable(materialVoucher).ExecuteCommand(); } db.CommitTran(); } catch (Exception ex) { LogHelper.Info($"回调报错{ex.Message}"); db.RollbackTran(); throw; } return result; } } #endregion /// /// 添加入库记录表 /// /// /// /// internal static SimpleResult AddMaterOrder(string taskno, string S_CNTR_CODE) { LogHelper.Info("添加入库记录表" + S_CNTR_CODE + "----" + taskno); var result = new SimpleResult(); // var db = new SqlHelper().GetInstance(); using (var db = new SqlHelper().GetInstance()) { try { db.BeginTran(); db.Updateable().SetColumns(it => new Container { C_ENABLE = "Y" }).Where(it => it.S_CODE == S_CNTR_CODE).ExecuteCommand(); var po = db.Queryable().Where(a => a.S_CNTR_CODE == S_CNTR_CODE && a.S_BS_NO == taskno).ToList(); LogHelper.Info("添加入库记录表po" + po.Count()); var pz = db.Queryable().Where(a => a.S_NO == taskno).First(); var ass = pz == null; LogHelper.Info("添加入库记录表pz" + ass); List records = new List(); foreach (var item in po) { OutboundRecord outboundRecord = new OutboundRecord(); outboundRecord.S_NO = item.S_BS_NO; outboundRecord.S_TYPE = pz?.S_TYPE; outboundRecord.S_WLPZBH = pz?.S_WLPZBH; outboundRecord.S_WLPZND = pz?.S_WLPZND; outboundRecord.S_WLBM = item.S_ITEM_CODE; outboundRecord.S_SL = item.F_QTY; outboundRecord.S_CNTR_CODE = S_CNTR_CODE; records.Add(outboundRecord); } if (records.Count() > 0) { db.Insertable(records).ExecuteCommand(); } db.CommitTran(); return result; } catch (Exception ex) { result.resultMsg = ex.Message; LogHelper.Info($"添加入库记录表{taskno} 容器={S_CNTR_CODE},{ex.Message}"); db.RollbackTran(); throw; } } } #region MyRegion ///// ///// 外采入库/入库冲销 ///// ///// ///// //internal static SimpleResult FSInbound_Order_In(models.SapRoot.ROOT model) //{ // var db = new SqlHelper().GetInstance(); // var result = new SimpleResult(); // result.WLPZBH = model.WLPZ.HEAD.WLPZBH; // result.resultMsg = "成功"; // try // { // db.BeginTran(); // //判断冲销凭证编号 是否为空 如果为空 则为冲销(审核前才能冲销,非待执行状态提示执行中不可冲销) 不为空 则为外采入库 // if (model.WLPZ.ITME.Where(s => s.CXWLPZBH != null && s.CXWLPZBH != "").Count() > 0) // { // //判断冲销物料是否为同一个入库单 // if (model.WLPZ.ITME.Select(s => s.CXWLPZBH).Distinct().Count() > 1) // { // result.resultCode = 1; // result.resultMsg = "冲销物料不属于同一订单"; // return result; // } // //冲销凭证单号 // var cxpzbh = model.WLPZ.ITME[0].CXWLPZBH; // var po = WMSHelper.GetInboundOrder(cxpzbh); // //判断是否执行 执行中订单允许冲销 // if (po == null) // { // result.resultCode = 1; // result.resultMsg = "未找到此订单"; // return result; // } // if (po.N_B_STATE != 0 && po.N_B_STATE != 7) // { // result.resultCode = 1; // result.resultMsg = "执行中订单不允许冲销"; // return result; // } // foreach (var item in model.WLPZ.ITME) // { // ///判断是否都有冲销凭证编号 // if (string.IsNullOrEmpty(item.CXWLPZBH)) // { // result.resultCode = 1; // result.resultMsg = "冲销单有物料冲销编号为空"; // return result; // } // var rkdmx = po.Details.Where(s => s.S_ITEM_CODE == item.WLH).ToList(); // if (rkdmx.Where(s => s.F_QTY < item.SL).Count() > 0)//数量大于明细 // { // result.resultCode = 1; // result.resultMsg = $"冲销物料{item.WLH}数量{item.SL}大于存入数量"; // return result; // } // else if (rkdmx.Where(s => s.F_QTY == item.SL).Count() == 1)//数量==明细 删除当下入库单物料数据 // { // db.Deleteable().Where(it => it.S_ITEM_CODE == item.WLH && it.S_IO_NO == cxpzbh).ExecuteCommand(); // } // else if (rkdmx.Where(s => s.F_QTY > item.SL).Count() > 0)//数量小于明细 // { // //当前物料明细 // var rkd = rkdmx.Where(s => s.F_QTY > item.SL).FirstOrDefault(); // rkd.F_QTY = rkd.F_QTY - item.SL; // db.Updateable(rkd).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); // } // var po1 = db.Queryable().Includes(a => a.Details).Where(a => a.S_NO == cxpzbh).First(); // int ssss = po1.Details.Count(); // if (po1.Details.Count() == 0) // { // po1.N_B_STATE = 7; // db.Updateable(po1).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); // } // } // db.CommitTran(); // } // else // { // //创建入库单主子表 // var po = WMSHelper.GetInboundOrder(model.WLPZ.HEAD.WLPZBH); // if (po == null) // { // po = new TN_Inbound_Order { S_NO = model.WLPZ.HEAD.WLPZBH, S_WLPZND = model.WLPZ.HEAD.WLPZND, S_FACTORY = model.WLPZ.HEAD.GC, S_IN_TYPE = "外采入库", S_BS_TYPE = model.WLPZ.HEAD.YDLX }; // po.Details = new List(); // if (model.WLPZ.ITME.Count > 0) // { // model.WLPZ.ITME.ForEach(a => // { // //if (a.ITEM1.Select(s => s.XLH).Count() > 0)//判断序列号是否为多个 // //{ // // foreach (var item in a.ITEM1.Select(s => s.XLH)) // // { // // po.Details.Add(new TN_Inbound_Detail // // { // // S_IO_NO = model.ROOT.WLPZ.HEAD.WLPZBH, // // N_ROW_NO = po.Details.Count + 1, // // S_ITEM_CODE = a.WLH, // // F_QTY = a.SL, // // S_ITEM_STATE = "物料", // // S_ITEM_NAME = "物料", // // F_ACC_B_QTY = 0, // // S_KCDD = a.KCDD, // // S_UOM = a.JBJLDW,//计量单位 // // S_SERIAL_NO = item, // // S_BATCH_NO = a.PC, // // }); // // } // //} // //else // //{ // po.Details.Add(new TN_Inbound_Detail // { // S_IO_NO = model.WLPZ.HEAD.WLPZBH, // N_ROW_NO = a.WLPZZDXM, // S_ITEM_CODE = a.WLH, // F_QTY = a.SL, // S_ITEM_STATE = "物料", // S_ITEM_NAME = "物料", // F_ACC_B_QTY = 0, // S_KCDD = a.KCDD, // S_UOM = a.JBJLDW,//计量单位 // //S_SERIAL_NO = string.Join(",", a.ITEM1.Select(item => item.XLH)), // S_BATCH_NO = a.PC, // S_CGPZH = a.CGPZH, // S_CGPZXMBH = a.CGPZXMBH, // S_CKPZKJND = a.CKPZKJND, // S_CKPZXM = a.CKPZXM, // S_CXWLPZBH = a.CXWLPZBH, // S_HWSJJYZT = a.HWSJJYZT, // S_GYSZHH = a.GYSZHH, // S_JYPBH = a.JYPBH, // S_KJPZSSRQ = a.KJPZSSRQ, // S_KJPZSRSJ = a.KJPZSRSJ, // }); // //} // }); // db.Insertable(po).ExecuteCommand(); // db.Insertable(po.Details).ExecuteCommand(); // db.CommitTran(); // } // } // else // { // result.resultCode = 1; // result.resultMsg = "已经有重复单号,不可重复传输"; // return result; // } // } // } // catch (Exception e) // { // db.RollbackTran(); // throw; // } // return result; //} /// /// 内采入库/出库 /// /// /// //internal static SimpleResult FSNCInbound_Order_In(NcDto.ROOT model) //{ // var db = new SqlHelper().GetInstance(); // var result = new SimpleResult(); // result.WLPZBH = model.WLPZ.HEAD.WLPZBH; // result.WLPZND = model.WLPZ.HEAD.WLPZND; // result.resultMsg = "成功"; // try // { // db.BeginTran(); // //判断冲销凭证编号 是否为空 如果为空 则为冲销(审核前才能冲销,非待执行状态提示执行中不可冲销) 不为空 则为外采入库 // if (model.WLPZ.HEAD.YDLX != "rk") // { // var po = db.Queryable().Includes(a => a.Details).Where(s => s.S_NO == model.WLPZ.HEAD.WLPZBH).First(); // //创建出库单主子表 // #region 创建领料单 // if (po == null) // { // po = new TN_Ll_Order { S_NO = model.WLPZ.HEAD.WLPZBH, S_FACTORY = model.WLPZ.HEAD.GC, S_OUT_TYPE = "内采出库", S_BS_TYPE = model.WLPZ.HEAD.YDLX, S_AREA_CODE = "HJQ", S_BS_NO = model.WLPZ.HEAD.WLPZBH }; // po.Details = new List(); // if (model.WLPZ.ITME.Count() > 0) // { // foreach (var a in model.WLPZ.ITME) // { // var item = db.Queryable().Where(it => it.S_ITEM_CODE == a.WLH).First(); // if (item == null) // { // result.resultCode = 1; // result.resultMsg = $"物料{a.WLH}物料主数据不存在该物料"; // throw new Exception($"物料{a.WLH}物料主数据不存在该物料"); // } // po.Details.Add(new TN_Ll_detail // { // S_DO_NO = model.WLPZ.HEAD.WLPZBH, // S_AREA_CODE = "HJQ", // N_ROW_NO = a.WLPZZDXM, // S_ITEM_CODE = a.WLH, // S_ITEM_NAME = item.S_ITEM_NAME, // F_QTY = a.SL, // S_BATCH_NO = a.PC, // S_ERP_WH_CODE = a.KCDD, // N_ITEM_STATE = 1 // }); // } // var result1 = db.Insertable(po).ExecuteCommand() > 0; // db.Insertable(po.Details).ExecuteCommand(); // } // } // else // { // List listtn = new List(); // if (po.N_B_STATE != 0) // { // foreach (var a in model.WLPZ.ITME) // { // //if (a.LLDSCBS == "Y")//如果是删除标识则删除当前所属出库单明细 不是删除标记 则进行增改判断 // //{ // // result.resultCode = 1; // // result.resultMsg = $"执行中领料单,物料{a.WLH}物料不允许删除"; // // throw new Exception($"执行中领料单,物料{a.WLH}物料不允许删除"); // //} // var po1 = po.Details.Where(s => a.WLH == s.S_ITEM_CODE).ToList(); // if (po1.Count() == 0) //无则新增物料明细 // { // var item = db.Queryable().Where(it => it.S_ITEM_CODE == a.WLH).First(); // if (item == null) // { // result.resultCode = 1; // result.resultMsg = $"物料{a.WLH}物料主数据不存在该物料"; // throw new Exception($"物料{a.WLH}物料主数据不存在该物料"); // } // TN_Ll_detail tN_Outbound_Detail = new TN_Ll_detail // { // S_DO_NO = model.WLPZ.HEAD.WLPZBH, // S_AREA_CODE = "HJQ", // N_ROW_NO = 0, // S_ITEM_CODE = a.WLH, // S_ITEM_NAME = item.S_ITEM_NAME, // F_QTY = a.SL, // S_BATCH_NO = "无", // S_ERP_WH_CODE = a.KCDD, // N_ITEM_STATE = 1 // }; // listtn.Add(tN_Outbound_Detail); // } // else // { // if (po1.Where(s => s.F_ACC_D_QTY < a.SL).Count() > 0)//更新数量大于当前物料 数量 更新出库单 // { // po1.First().F_QTY = a.SL; // db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); // } // else //返回失败 // { // result.resultCode = 1; // result.resultMsg = $"更新失败,更新数量必须大于当前物料数量{a.WLH}"; // throw new Exception($"更新失败,更新数量必须大于当前物料数量{a.WLH}"); // } // } // } // ; // }//执行中订单 // else if (po.N_B_STATE == 0)//未执行 执行增删改操作 // { // foreach (var a in model.WLPZ.ITME) // { // //if (a.LLDSCBS == "Y")//如果是删除标识则删除当前所属出库单明细 不是删除标记 则进行增改判断 // //{ // // var po1 = po.Details.Where(s => a.WLH == s.S_ITEM_CODE).ToList(); // // if (po1.Count() > 0) //无则新增物料明细 // // { // // db.Deleteable().Where(it => it.S_ITEM_CODE == a.WLH && it.S_DO_NO == po1.First().S_DO_NO).ExecuteCommand(); // // } // // else // // { // // result.resultCode = 1; // // result.resultMsg = $"物料{a.WLH}物料数据不存在 无法删除"; // // throw new Exception($"物料{a.WLH}物料数据不存在 无法删除"); // // } // //} // //else // //{ // var po1 = po.Details.Where(s => a.WLH == s.S_ITEM_CODE).ToList(); // if (po1.Count() == 0) //无则新增物料明细 // { // var item = db.Queryable().Where(it => it.S_ITEM_CODE == a.WLH).First(); // if (item == null) // { // result.resultCode = 1; // result.resultMsg = $"物料{a.WLH}物料主数据不存在该物料"; // throw new Exception($"物料{a.WLH}物料主数据不存在该物料"); // } // TN_Ll_detail tN_Outbound_Detail = new TN_Ll_detail // { // S_DO_NO = model.WLPZ.HEAD.WLPZBH, // S_AREA_CODE = "HJQ", // N_ROW_NO = 0, // S_ITEM_CODE = a.WLH, // S_ITEM_NAME = item.S_ITEM_NAME, // F_QTY = a.SL, // S_BATCH_NO = "无", // S_ERP_WH_CODE = a.KCDD, // N_ITEM_STATE = 1 // }; // listtn.Add(tN_Outbound_Detail); // } // else // {//更新数量 未执行时 直接更新数量 // po1.First().F_QTY = a.SL; // db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); // } // //} // } // ; // } // //添加数据 // if (listtn.Count() > 0) // { // db.Insertable(listtn).ExecuteCommand(); // } // } // db.CommitTran(); // #endregion // } // else // { // //创建入库单主子表 // var po = WMSHelper.GetInboundOrder(model.WLPZ.HEAD.WLPZBH); // if (po == null) // { // #region MyRegion // po = new TN_Inbound_Order { S_NO = model.WLPZ.HEAD.WLPZBH, S_WLPZND = model.WLPZ.HEAD.WLPZND, S_FACTORY = model.WLPZ.HEAD.GC, S_IN_TYPE = "内采入库", S_BS_TYPE = model.WLPZ.HEAD.YDLX }; // po.Details = new List(); // if (model.WLPZ.ITME.Count > 0) // { // model.WLPZ.ITME.ForEach(a => // { // po.Details.Add(new TN_Inbound_Detail // { // S_IO_NO = model.WLPZ.HEAD.WLPZBH, // N_ROW_NO = a.WLPZZDXM, // S_ITEM_CODE = a.WLH, // F_QTY = a.SL, // S_ITEM_STATE = "物料", // S_ITEM_NAME = "物料", // F_ACC_B_QTY = 0, // S_KCDD = a.KCDD, // S_UOM = a.JBJLDW,//计量单位 // //S_SERIAL_NO = string.Join(",", a.ITEM1.Select(item => item.XLH)), // S_BATCH_NO = a.PC, // }); // }); // db.Insertable(po).ExecuteCommand(); // db.Insertable(po.Details).ExecuteCommand(); // db.CommitTran(); // #endregion // } // } // else // { // result.resultCode = 1; // result.resultMsg = "已经有重复单号,不可重复传输"; // return result; // } // } // } // catch (Exception e) // { // db.RollbackTran(); // return result; // throw; // } // finally // { // db.Dispose(); // } // return result; //} /// /// 其他出入库 /// /// /// //internal static SimpleResult FSOtherbound_Order_In(otherDto.ROOT model) //{ // using (var db = new SqlHelper().GetInstance()) // { // var result = new SimpleResult(); // result.WLPZBH = model.WLPZ.HEAD.WLPZBH; // result.resultMsg = "成功"; // try // { // db.BeginTran(); // if (model.WLPZ.ITEM.Count() < 1) // { // result.resultCode = 1; // result.resultMsg = $"不存在物料信息"; // throw new Exception($"不存在该物料信息"); // } // if (model.WLPZ.ITEM[0].YDLX == "qtrk") // { // //创建入库单主子表 // var po = WMSHelper.GetInboundOrder(model.WLPZ.HEAD.WLPZBH); // if (po == null) // { // po = new TN_Inbound_Order { S_NO = model.WLPZ.HEAD.WLPZBH, S_WLPZNF = model.WLPZ.HEAD.WLPZNF, S_FACTORY = model.WLPZ.ITEM[0].GC, S_IN_TYPE = "其他入库", S_BS_TYPE = model.WLPZ.ITEM[0].YDLX }; // po.Details = new List(); // if (model.WLPZ.ITEM.Count > 0) // { // model.WLPZ.ITEM.ForEach(a => // { // po.Details.Add(new TN_Inbound_Detail // { // S_IO_NO = model.WLPZ.HEAD.WLPZBH, // N_ROW_NO = a.WLPZHXM, // S_ITEM_CODE = a.WLBH, // F_QTY = a.SL, // S_ITEM_STATE = "物料", // S_ITEM_NAME = "物料", // F_ACC_B_QTY = 0, // S_KCDD = a.KCDD, // S_UOM = a.JLDW,//计量单位 // S_SERIAL_NO = string.Join(",", a.ITEM1.Select(item => item.XLH)), // S_BATCH_NO = a.PC, // }); // //} // }); // db.Insertable(po).ExecuteCommand(); // db.Insertable(po.Details).ExecuteCommand(); // db.CommitTran(); // } // } // else // { // result.resultCode = 1; // result.resultMsg = "已经有重复单号,不可重复传输"; // return result; // } // } // else // { // #region 创建领料单 // var po = db.Queryable().Includes(a => a.Details).Where(s => s.S_NO == model.WLPZ.HEAD.WLPZBH).First(); // if (po == null) // { // po = new TN_Ll_Order { S_NO = model.WLPZ.HEAD.WLPZBH, S_OUT_TYPE = "其他出库", S_BS_TYPE = model.WLPZ.ITEM[0].YDLX, S_AREA_CODE = "HJQ", S_BS_NO = model.WLPZ.HEAD.WLPZBH }; // po.Details = new List(); // if (model.WLPZ.ITEM.Count() > 0) // { // po.S_FACTORY = model.WLPZ.ITEM[0].GC; // foreach (var a in model.WLPZ.ITEM) // { // var item = db.Queryable().Where(it => it.S_ITEM_CODE == a.WLBH).First(); // if (item == null) // { // result.resultCode = 1; // result.resultMsg = $"物料{a.WLBH}物料主数据不存在该物料"; // throw new Exception($"物料{a.WLBH}物料主数据不存在该物料"); // } // po.Details.Add(new TN_Ll_detail // { // S_DO_NO = model.WLPZ.HEAD.WLPZBH, // S_AREA_CODE = "HJQ", // N_ROW_NO = a.WLPZHXM, // S_ITEM_CODE = a.WLBH, // S_ITEM_NAME = item.S_ITEM_NAME, // F_QTY = a.SL, // S_BATCH_NO = a.PC, // S_ERP_WH_CODE = a.KCDD, // N_ITEM_STATE = 1 // }); // } // var result1 = db.Insertable(po).ExecuteCommand() > 0; // db.Insertable(po.Details).ExecuteCommand(); // } // } // else // { // List listtn = new List(); // if (po.N_B_STATE != 0) // { // foreach (var a in model.WLPZ.ITEM) // { // //if (a.LLDSCBS == "Y")//如果是删除标识则删除当前所属出库单明细 不是删除标记 则进行增改判断 // //{ // // result.resultCode = 1; // // result.resultMsg = $"执行中领料单,物料{a.WLH}物料不允许删除"; // // throw new Exception($"执行中领料单,物料{a.WLH}物料不允许删除"); // //} // var po1 = po.Details.Where(s => a.WLBH == s.S_ITEM_CODE).ToList(); // if (po1.Count() == 0) //无则新增物料明细 // { // var item = db.Queryable().Where(it => it.S_ITEM_CODE == a.WLBH).First(); // if (item == null) // { // result.resultCode = 1; // result.resultMsg = $"物料{a.WLBH}物料主数据不存在该物料"; // throw new Exception($"物料{a.WLBH}物料主数据不存在该物料"); // } // TN_Ll_detail tN_Outbound_Detail = new TN_Ll_detail // { // S_DO_NO = model.WLPZ.HEAD.WLPZBH, // S_AREA_CODE = "HJQ", // N_ROW_NO = "", // S_ITEM_CODE = a.WLBH, // S_ITEM_NAME = item.S_ITEM_NAME, // F_QTY = a.SL, // S_BATCH_NO = "无", // S_ERP_WH_CODE = a.KCDD, // N_ITEM_STATE = 1 // }; // listtn.Add(tN_Outbound_Detail); // } // else // { // if (po1.Where(s => s.F_ACC_D_QTY < a.SL).Count() > 0)//更新数量大于当前物料 数量 更新出库单 // { // po1.First().F_QTY = a.SL; // db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); // } // else //返回失败 // { // result.resultCode = 1; // result.resultMsg = $"更新失败,更新数量必须大于当前物料数量{a.WLBH}"; // throw new Exception($"更新失败,更新数量必须大于当前物料数量{a.WLBH}"); // } // } // } // ; // }//执行中订单 // else if (po.N_B_STATE == 0)//未执行 执行增删改操作 // { // foreach (var a in model.WLPZ.ITEM) // { // //if (a.LLDSCBS == "Y")//如果是删除标识则删除当前所属出库单明细 不是删除标记 则进行增改判断 // //{ // // var po1 = po.Details.Where(s => a.WLH == s.S_ITEM_CODE).ToList(); // // if (po1.Count() > 0) //无则新增物料明细 // // { // // db.Deleteable().Where(it => it.S_ITEM_CODE == a.WLH && it.S_DO_NO == po1.First().S_DO_NO).ExecuteCommand(); // // } // // else // // { // // result.resultCode = 1; // // result.resultMsg = $"物料{a.WLH}物料数据不存在 无法删除"; // // throw new Exception($"物料{a.WLH}物料数据不存在 无法删除"); // // } // //} // //else // //{ // var po1 = po.Details.Where(s => a.WLBH == s.S_ITEM_CODE).ToList(); // if (po1.Count() == 0) //无则新增物料明细 // { // var item = db.Queryable().Where(it => it.S_ITEM_CODE == a.WLBH).First(); // if (item == null) // { // result.resultCode = 1; // result.resultMsg = $"物料{a.WLBH}物料主数据不存在该物料"; // throw new Exception($"物料{a.WLBH}物料主数据不存在该物料"); // } // TN_Ll_detail tN_Outbound_Detail = new TN_Ll_detail // { // S_DO_NO = model.WLPZ.HEAD.WLPZBH, // S_AREA_CODE = "HJQ", // N_ROW_NO = "", // S_ITEM_CODE = a.WLBH, // S_ITEM_NAME = item.S_ITEM_NAME, // F_QTY = a.SL, // S_BATCH_NO = "无", // S_ERP_WH_CODE = a.KCDD, // N_ITEM_STATE = 1 // }; // listtn.Add(tN_Outbound_Detail); // } // else // {//更新数量 未执行时 直接更新数量 // po1.First().F_QTY = a.SL; // db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); // } // //} // } // ; // } // //添加数据 // if (listtn.Count() > 0) // { // db.Insertable(listtn).ExecuteCommand(); // } // } // #endregion // } // db.CommitTran(); // } // catch (Exception e) // { // db.RollbackTran(); // return result; // throw; // } // finally // { // db.Dispose(); // } // return result; // } //} /// /// sap-wms生产订单信息添加 /// /// /// //internal static SimpleResult fsMater_In(OrderDto.ROOT model) //{ // var db = new SqlHelper().GetInstance(); // var result = new SimpleResult(); // result.resultMsg = "成功"; // try // { // db.BeginTran(); // var materlist = db.Queryable().Where(it => it.S_SCDDH == model.SCDD.SCDDH).First(); // if (materlist == null) // { // TN_GENERATE_ORDER tnorder = new TN_GENERATE_ORDER(); // tnorder.S_GC = model.SCDD.GC; // tnorder.S_SCDDH = model.SCDD.SCDDH; // tnorder.S_DZMC = model.SCDD.DZMC; // tnorder.S_SCDDCMS = model.SCDD.SCDDCMS; // tnorder.S_WLBH = model.SCDD.WLBH; // tnorder.S_MS = model.SCDD.MS; // tnorder.S_TH = model.SCDD.TH; // tnorder.S_DDSL = model.SCDD.DDSL; // tnorder.S_DDDW = model.SCDD.DDDW; // tnorder.S_XSDD = model.SCDD.XSDD; // tnorder.S_XSDDHXM = model.SCDD.XSDDHXM; // tnorder.S_WBS = model.SCDD.WBS; // tnorder.S_SHF = model.SCDD.SHF; // tnorder.GZLH = model.SCDD.GZLH; // tnorder.S_XLH = string.Join(",", model.SCDD.ITEM.Select(item => item.XLH)); // db.Insertable(tnorder).ExecuteCommand(); // } // else // { // result.resultMsg += $"{model.SCDD.SCDDH}已存在"; // } // db.CommitTran(); // } // catch (Exception e) // { // db.RollbackTran(); // throw; // } // return result; //} /// /// sap-wms物料信息添加 /// /// /// internal static SimpleResult FSMater_In(MaterDto.ROOT model) { var db = new SqlHelper().GetInstance(); var result = new SimpleResult(); result.resultMsg = "成功"; try { db.BeginTran(); List list = new List(); foreach (var item in model.ITEM) { var materlist = db.Queryable().Where(it => it.S_ITEM_CODE == item.WLBM).First(); if (materlist == null) { TN_Material tN_Material = new TN_Material(); tN_Material.S_ITEM_CODE = item.WLBM; tN_Material.S_GCBM = item.GCBM; tN_Material.S_WLZBM = item.WLZBM; tN_Material.S_WLZMS = item.WLZMS; tN_Material.S_WLLX = item.WLLX; tN_Material.S_WLMS = item.WLMS; tN_Material.S_WLCMS = item.WLCMS; tN_Material.S_DWBM = item.DWBM; tN_Material.S_DWMS = item.DWMS; tN_Material.S_JBM = item.JBM; tN_Material.S_CPZ = item.CPZ; tN_Material.S_CPZMS = item.CPZMS; tN_Material.S_ITEM_NAME = item.VTEXT; list.Add(tN_Material); } } var ss = db.Insertable(list).ExecuteCommand(); db.CommitTran(); } catch (Exception e) { db.RollbackTran(); throw; } return result; } #endregion } }