| | |
| | | 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; |
| | | using System.Web.Http.ValueProviders; |
| | | using System.Diagnostics; |
| | | using System.Data.SqlClient; |
| | | using System.Data.Common; |
| | | using System.Data; |
| | | using System.Runtime.ConstrainedExecution; |
| | | using HH.WCS.Mobox3.pinggao.core; |
| | | using static HH.WCS.Mobox3.pinggao.api.OtherModel.Putaway_Order_In; |
| | | using System.Web.Http.Results; |
| | | using System.Runtime.Caching; |
| | | |
| | | namespace HH.WCS.Mobox3.pinggao.api |
| | | { |
| | |
| | | |
| | | } |
| | | |
| | | public static bool MaterPanduan(string ItemCode, double count) |
| | | { |
| | | bool panduan = true; |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | |
| | | var po = db.Queryable<TN_Material_KC>().Where(a => a.S_ITEM_CODE== ItemCode).First(); |
| | | |
| | | var po1 = db.Queryable<CntrItemRel>().Where(a => a.S_ITEM_CODE == ItemCode).First(); |
| | | if (po != null) |
| | | { |
| | | if (po1 != null) |
| | | { |
| | | double sl = po1.F_QTY + count; |
| | | if (sl > po.N_COUNT) |
| | | { |
| | | panduan = false; |
| | | } |
| | | } |
| | | if (count > po.N_COUNT) |
| | | { |
| | | panduan = false; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | panduan = false; |
| | | } |
| | | return panduan; |
| | | } |
| | | /// <summary> |
| | | /// 数据 |
| | | /// </summary> |
| | |
| | | //else |
| | | //{ |
| | | //判断冲销凭证编号 是否为空 如果为空 则为冲销(审核前才能冲销,非待执行状态提示执行中不可冲销) 不为空 则为外采入库 |
| | | |
| | | if ((items.ITEM.Where(s => s.CXPZH != null && s.CXPZH != "").Count() > 0)) |
| | | if (items.HEAD.YDLX != "124") |
| | | { |
| | | //判断冲销物料是否为同一个入库单 |
| | | if (items.ITEM.Select(s => s.CXPZH).Distinct().Count() > 1) |
| | | if ((items.ITEM.Where(s => s.CXPZH != null && s.CXPZH != "").Count() > 0)) |
| | | { |
| | | 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)) |
| | | //判断冲销物料是否为同一个入库单 |
| | | 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 = "冲销单有物料冲销编号为空"; |
| | | 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)//数量大于明细 |
| | | foreach (var item in items.ITEM) |
| | | { |
| | | 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<TN_Inbound_Detail>().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<TN_Inbound_Order>().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<TN_Inbound_Detail>().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<TN_Inbound_Order>().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<TN_Inbound_Detail>(); |
| | | if (items.ITEM.Count > 0) |
| | | { |
| | | items.ITEM.ForEach(a => |
| | | ///判断是否都有冲销凭证编号 |
| | | if (string.IsNullOrEmpty(item.CXPZH)) |
| | | { |
| | | 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<TN_Inbound_Order>(po).ExecuteCommand(); |
| | | db.Insertable<TN_Inbound_Detail>(po.Details).ExecuteCommand(); |
| | | db.CommitTran(); |
| | | |
| | | 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<TN_Inbound_Detail>().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<TN_Inbound_Order>().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(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | else |
| | | { |
| | | var Details = new List<TN_Inbound_Detail>(); |
| | | if (items.ITEM.Count > 0) |
| | | //创建入库单主子表 |
| | | var po = WMSHelper.GetInboundOrder(items.HEAD.WLPZH); |
| | | if (po == null) |
| | | { |
| | | items.ITEM.ForEach(a => |
| | | 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<TN_Inbound_Detail>(); |
| | | if (items.ITEM.Count > 0) |
| | | { |
| | | if (po.Details.Where(s => s.S_ITEM_CODE == a.WLBM).Count() > 0) |
| | | items.ITEM.ForEach(a => |
| | | { |
| | | 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 |
| | | po.Details.Add(new TN_Inbound_Detail |
| | | { |
| | | S_IO_NO = items.HEAD.WLPZH, |
| | | N_ROW_NO = a.WLPZHXM, |
| | |
| | | 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_KJPZSSRQ = a.KJPZSSRQ, |
| | | S_KJPZSRSJ = a.KJPZSRSJ, |
| | | }); |
| | | } |
| | | //} |
| | | |
| | | }); |
| | | db.Insertable<TN_Inbound_Detail>(Details).ExecuteCommand(); |
| | | db.CommitTran(); |
| | | }); |
| | | db.Insertable<TN_Inbound_Order>(po).ExecuteCommand(); |
| | | db.Insertable<TN_Inbound_Detail>(po.Details).ExecuteCommand(); |
| | | |
| | | |
| | | } |
| | | } |
| | | //result.resultMsg = "成功"; |
| | | //result.WLPZBH = items.HEAD.WLPZH; |
| | | //result.WLPZND = items.HEAD.WLPZND; |
| | | //result.resultCode = 0; |
| | | //result.resultMsg = ""; |
| | | //simpleResults.Add(result); |
| | | //continue; |
| | | else |
| | | { |
| | | var Details = new List<TN_Inbound_Detail>(); |
| | | 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<TN_Inbound_Detail>(Details).ExecuteCommand(); |
| | | |
| | | |
| | | } |
| | | //result.resultMsg = "成功"; |
| | | //result.WLPZBH = items.HEAD.WLPZH; |
| | | //result.WLPZND = items.HEAD.WLPZND; |
| | | //result.resultCode = 0; |
| | | //result.resultMsg = ""; |
| | | //simpleResults.Add(result); |
| | | //continue; |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | |
| | | //} |
| | | //冲销凭证单号 |
| | | foreach (var item1 in items.ITEM) |
| | | { |
| | | var cxpzbh = item1.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) |
| | | { |
| | | //s.S_ITEM_CODE == item.WLBM&& |
| | | var rkdmx = po.Details.Where(s => s.S_CKPZXM == item.CKPZHXM).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<TN_Inbound_Detail>().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<TN_Inbound_Order>().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(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | result.resultMsg = "成功"; |
| | | result.WLPZBH = items.HEAD.WLPZH; |
| | | result.WLPZND = items.HEAD.WLPZND; |
| | | result.resultCode = 0; |
| | | result.resultMsg = ""; |
| | | db.CommitTran(); |
| | | simpleResults.Add(result); |
| | | } |
| | | |
| | |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | internal static Orderback.Root GYS_In(GYSDto.Root model) |
| | | internal static GYSReturnRoot.Root GYS_In(GYSDto.Root model) |
| | | { |
| | | var orderResponse = new Orderback.Root |
| | | var orderResponse = new GYSReturnRoot.Root |
| | | { |
| | | ROOT = new Orderback.ROOT |
| | | ROOT = new GYSReturnRoot.ROOT |
| | | { |
| | | ITEM = new List<Orderback.ITEM> { } |
| | | ITEM = new List<GYSReturnRoot.ITEM> { } |
| | | |
| | | } |
| | | }; |
| | | |
| | | List<Orderback.ITEM> tEMs = new List<Orderback.ITEM>(); |
| | | List<GYSReturnRoot.ITEM> tEMs = new List<GYSReturnRoot.ITEM>(); |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | try |
| | | { |
| | | db.BeginTran(); |
| | | foreach (var item in model.ROOT.GYSXX) |
| | | { |
| | | Orderback.ITEM iTEM = new Orderback.ITEM(); |
| | | GYSReturnRoot.ITEM iTEM = new GYSReturnRoot.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<TN_Supplier_detial>(); |
| | | 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<TN_Supplier>(po).ExecuteCommand(); |
| | | db.Insertable<TN_Supplier_detial>(po.Details).ExecuteCommand(); |
| | | } |
| | | } |
| | | else |
| | | // var po = WMSHelper.GetGYSBMOrder(item.JBXX.GYSBM); |
| | | var po = db.Queryable<TN_Supplier>().Includes(a => a.Details).Where(a => a.S_GYSBM == item.JBXX.GYSBM).First(); |
| | | if (po != null) |
| | | { |
| | | db.Deleteable<TN_Supplier>().Where(it => it.S_GYSBM == po.S_GYSBM).ExecuteCommand(); |
| | | db.Deleteable<TN_Supplier_detial>().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"; |
| | | po = new TN_Supplier |
| | | { |
| | | S_GYSBM = item.JBXX.GYSBM, |
| | | S_MDMBM = item.JBXX.MDMBM, |
| | | S_GYSMC = item.JBXX.GYSMC, |
| | | S_YHGJ = item.JBXX.YHGJ, |
| | | S_YHDM = item.JBXX.YHDM, |
| | | S_KHH = item.JBXX.KHH, |
| | | S_YHJD = item.JBXX.YHJD, |
| | | S_YHCS = item.JBXX.YHCS, |
| | | S_KHHZH = item.JBXX.KHHZH, |
| | | S_DZ = item.JBXX.DZ, |
| | | S_YZBM = item.JBXX.YZBM, |
| | | S_CS = item.JBXX.CS, |
| | | S_GJDM = item.JBXX.GJDM, |
| | | S_GJ = item.JBXX.GJ, |
| | | S_DQDM = item.JBXX.DQDM, |
| | | S_DQMC = item.JBXX.DQMC, |
| | | S_SH = item.JBXX.SH, |
| | | S_ZZSDJH = item.JBXX.ZZSDJH, |
| | | }; |
| | | po.Details = new List<TN_Supplier_detial>(); |
| | | 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<TN_Supplier>(po).ExecuteCommand(); |
| | | db.Insertable<TN_Supplier_detial>(po.Details).ExecuteCommand(); |
| | | } |
| | | iTEM.GYSBM = item.JBXX.GYSBM; |
| | | iTEM.MSGCODE = 0; |
| | | iTEM.MSGDESP = $"成功"; |
| | | tEMs.Add(iTEM); |
| | | } |
| | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | Orderback.ITEM iTEM = new Orderback.ITEM(); |
| | | iTEM.SCDDH = ""; |
| | | iTEM.GC = ""; |
| | | iTEM.MSGCODE = "1"; |
| | | GYSReturnRoot.ITEM iTEM = new GYSReturnRoot.ITEM(); |
| | | iTEM.GYSBM = ""; |
| | | iTEM.MSGCODE = 1; |
| | | iTEM.MSGDESP = e.Message; |
| | | tEMs.Add(iTEM); |
| | | orderResponse.ROOT.ITEM = tEMs; |
| | |
| | | try |
| | | { |
| | | db.BeginTran(); |
| | | List<TN_GENERATE_ORDER> tN_GENERATE_ORDERs = new List<TN_GENERATE_ORDER>(); |
| | | foreach (var item in model.ROOT.SCDD) |
| | | { |
| | | Orderback.ITEM iTEM = new Orderback.ITEM(); |
| | | |
| | | var materlist = db.Queryable<TN_GENERATE_ORDER>().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_SCDDH = item.SCDDH; |
| | | tnorder.S_DZMC = item.DZMC; |
| | | tnorder.S_SCDDCMS = item.SCDDCMS; |
| | |
| | | tnorder.S_WBS = item.WBS; |
| | | tnorder.S_SHF = item.SHF; |
| | | tnorder.GZLH = item.GZLH; |
| | | tN_GENERATE_ORDERs.Add(tnorder); |
| | | //tnorder.S_XLH = string.Join(",", item.ITEM.Select(items => items.XLH)); |
| | | db.Insertable<TN_GENERATE_ORDER>(tnorder).ExecuteCommand(); |
| | | |
| | | } |
| | | else |
| | | { |
| | |
| | | iTEM.MSGDESP = $"成功"; |
| | | tEMs.Add(iTEM); |
| | | } |
| | | db.Insertable<TN_GENERATE_ORDER>(tN_GENERATE_ORDERs).ExecuteCommand(); |
| | | orderResponse.ROOT.ITEM = tEMs; |
| | | db.CommitTran(); |
| | | } |
| | |
| | | { |
| | | ITEM = new List<WLReturnRoot.ITEM> |
| | | { |
| | | |
| | | |
| | | } |
| | | } |
| | | }; |
| | | db.BeginTran(); |
| | | List<WLReturnRoot.ITEM> list = new List<WLReturnRoot.ITEM>(); |
| | | |
| | | List<TN_Material> tN_Materials = new List<TN_Material>(); |
| | | var itemCodes = model.ROOT.ITEM.Select(item => item.WLBM).Distinct().ToList(); |
| | | var itemlist = db.Queryable<TN_Material>() |
| | | .Where(it => itemCodes.Contains(it.S_ITEM_CODE)) |
| | | .ToList(); |
| | | |
| | | foreach (var item in model.ROOT.ITEM) |
| | | { |
| | | try |
| | | { |
| | | |
| | | var result = new WLReturnRoot.ITEM(); |
| | | |
| | | var materlist = db.Queryable<TN_Material>().Where(it => it.S_ITEM_CODE == item.WLBM).First(); |
| | | var materlist = itemlist.Where(it => it.S_ITEM_CODE == item.WLBM).FirstOrDefault(); |
| | | if (materlist == null) |
| | | { |
| | | TN_Material tN_Material = new TN_Material(); |
| | |
| | | tN_Material.S_CPZ = item.CPZ; |
| | | tN_Material.S_CPZMS = item.CPZMS; |
| | | tN_Material.S_ITEM_NAME = item.VTEXT; |
| | | db.Insertable<TN_Material>(tN_Material).ExecuteCommand(); |
| | | tN_Materials.Add(tN_Material); |
| | | //db.Insertable<TN_Material>(tN_Material).ExecuteCommand(); |
| | | result.MSGDESP = "成功"; |
| | | result.MSGCODE = 0; |
| | | result.GCBM = item.GCBM; |
| | |
| | | } |
| | | } |
| | | response.ROOT.ITEM = list; |
| | | if (tN_Materials.Count()>0) |
| | | { |
| | | db.Insertable<TN_Material>(tN_Materials).ExecuteCommand(); |
| | | //using (var bulkCopy = new SqlBulkCopy(util.Settings.SqlServer)) |
| | | //{ |
| | | // bulkCopy.DestinationTableName = "TN_Material"; |
| | | // bulkCopy.BatchSize = 500; |
| | | // var dataTable = new DataTable(); |
| | | // dataTable = list.ToDataTable(); |
| | | // // 添加列映射(确保名称匹配) |
| | | // foreach (DataColumn col in dataTable.Columns) |
| | | // { |
| | | // bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName); |
| | | // } |
| | | // bulkCopy.WriteToServer(tN_Materials.ToDataTable()); |
| | | //} |
| | | } |
| | | |
| | | //db.Insertable<TN_Material>(list).ExecuteCommand(); |
| | | db.CommitTran(); |
| | | |
| | |
| | | { |
| | | var result = new SimpleResult(); |
| | | //判断冲销凭证编号 是否为空 如果为空 则为冲销(审核前才能冲销,非待执行状态提示执行中不可冲销) 不为空 则为外采入库 |
| | | if ((itemwlpz.HEAD.YDLX != "351" || itemwlpz.HEAD.YDLX != "Z89") && itemwlpz.ITEM[0].FHGC == "3040") |
| | | if (itemwlpz.ITEM[0].JDBS=="H" && itemwlpz.ITEM[0].GC == "3040") |
| | | { |
| | | var po = db.Queryable<TN_Ll_Order>().Includes(a => a.Details).Where(s => s.S_NO == itemwlpz.HEAD.WLPZH).First(); |
| | | //创建出库单主子表 |
| | |
| | | #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<TN_Ll_detail>(); |
| | | if (itemwlpz.ITEM.Count() > 0) |
| | | { |
| | | var itemCodes = itemwlpz.ITEM.Select(items => items.WLBM).ToList(); |
| | | var itemlist = db.Queryable<TN_Material>() |
| | | .Where(it => itemCodes.Contains(it.S_ITEM_CODE)) |
| | | .ToList(); |
| | | foreach (var a in itemwlpz.ITEM) |
| | | { |
| | | var item = db.Queryable<TN_Material>().Where(it => it.S_ITEM_CODE == a.WLBM).First(); |
| | | |
| | | |
| | | |
| | | var item = itemlist.Where(it => it.S_ITEM_CODE == a.WLBM).First(); |
| | | if (item == null) |
| | | { |
| | | |
| | |
| | | List<TN_Ll_detail> listtn = new List<TN_Ll_detail>(); |
| | | if (po.N_B_STATE != 0) |
| | | { |
| | | var itemCodes = itemwlpz.ITEM.Select(items => items.WLBM).ToList(); |
| | | var itemlist = db.Queryable<TN_Material>() |
| | | .Where(it => itemCodes.Contains(it.S_ITEM_CODE)) |
| | | .ToList(); |
| | | foreach (var a in itemwlpz.ITEM) |
| | | { |
| | | |
| | | |
| | | |
| | | //if (a.LLDSCBS == "Y")//如果是删除标识则删除当前所属出库单明细 不是删除标记 则进行增改判断 |
| | | //{ |
| | | // result.resultCode = 1; |
| | |
| | | var po1 = po.Details.Where(s => a.WLBM == s.S_ITEM_CODE).ToList(); |
| | | if (po1.Count() == 0) //无则新增物料明细 |
| | | { |
| | | var item = db.Queryable<TN_Material>().Where(it => it.S_ITEM_CODE == a.WLBM).First(); |
| | | var item = itemlist.Where(it => it.S_ITEM_CODE == a.WLBM).First(); |
| | | if (item == null) |
| | | { |
| | | |
| | |
| | | }//执行中订单 |
| | | else if (po.N_B_STATE == 0)//未执行 执行增删改操作 |
| | | { |
| | | var itemCodes = itemwlpz.ITEM.Select(items => items.WLBM).ToList(); |
| | | var itemlist = db.Queryable<TN_Material>() |
| | | .Where(it => itemCodes.Contains(it.S_ITEM_CODE)) |
| | | .ToList(); |
| | | 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<TN_Ll_detail>().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<TN_Material>().Where(it => it.S_ITEM_CODE == a.WLBM).First(); |
| | | var item = itemlist.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}物料主数据不存在该物料")*/ |
| | | ; |
| | |
| | | } |
| | | #endregion |
| | | } |
| | | else if ((itemwlpz.HEAD.YDLX == "351" || itemwlpz.HEAD.YDLX == "Z89") && itemwlpz.ITEM[0].GC == "3040") |
| | | else if (itemwlpz.ITEM[0].JDBS == "S" && itemwlpz.ITEM[0].GC == "3040") |
| | | { |
| | | //创建入库单主子表 |
| | | var po = WMSHelper.GetInboundOrder(itemwlpz.HEAD.WLPZH); |
| | |
| | | po.Details = new List<TN_Inbound_Detail>(); |
| | | if (itemwlpz.ITEM.Count > 0) |
| | | { |
| | | itemwlpz.ITEM.ForEach(a => |
| | | foreach (var a in itemwlpz.ITEM) |
| | | |
| | | { |
| | | |
| | | |
| | | po.Details.Add(new TN_Inbound_Detail |
| | | { |
| | | S_IO_NO = itemwlpz.HEAD.WLPZH, |
| | |
| | | }); |
| | | //} |
| | | |
| | | }); |
| | | } |
| | | db.Insertable<TN_Inbound_Order>(po).ExecuteCommand(); |
| | | db.Insertable<TN_Inbound_Detail>(po.Details).ExecuteCommand(); |
| | | db.CommitTran(); |
| | |
| | | var Details = new List<TN_Inbound_Detail>(); |
| | | if (itemwlpz.ITEM.Count > 0) |
| | | { |
| | | itemwlpz.ITEM.ForEach(a => |
| | | foreach (var a in itemwlpz.ITEM) |
| | | { |
| | | if (po.Details.Where(s => s.S_ITEM_CODE == a.WLBM).Count() > 0) |
| | | { |
| | |
| | | }); |
| | | } |
| | | |
| | | }); |
| | | } |
| | | db.Insertable<TN_Inbound_Detail>(Details).ExecuteCommand(); |
| | | db.CommitTran(); |
| | | |
| | | } |
| | | } |
| | | } |
| | | result.resultMsg = "成功"; |
| | | result.WLPZBH = itemwlpz.HEAD.WLPZH; |
| | | result.WLPZND = itemwlpz.HEAD.ND; |
| | | result.resultCode = 0; |
| | | result.resultMsg = ""; |
| | | simpleResults.Add(result); |
| | | |
| | | var result2 = new SimpleResult(); |
| | | result2.resultMsg = "成功"; |
| | | result2.WLPZBH = itemwlpz.HEAD.WLPZH; |
| | | result2.WLPZND = itemwlpz.HEAD.ND; |
| | | result2.resultCode = 0; |
| | | simpleResults.Add(result2); |
| | | db.CommitTran(); |
| | | } |
| | | } |
| | |
| | | /// <returns></returns> |
| | | internal static List<SimpleResult> Otherbound_Order_In(otherDto.Root model) |
| | | { |
| | | Stopwatch sw = new Stopwatch(); |
| | | sw.Start(); |
| | | LogHelper.Info($"其他出入库调试"); |
| | | List<SimpleResult> simples = new List<SimpleResult>(); |
| | | using (var db = new SqlHelper<object>().GetInstance()) |
| | |
| | | |
| | | try |
| | | { |
| | | List<TN_Inbound_Detail> tN_Inbound_Details = new List<TN_Inbound_Detail>(); |
| | | List<TN_Ll_detail> tN_Ll_Details = new List<TN_Ll_detail>(); |
| | | |
| | | foreach (var itemwlpz in model.ROOT.WLPZ) |
| | | { |
| | | |
| | | var itemCodes = itemwlpz.ITEM.Select(item => item.WLBH).ToList(); |
| | | var itemlist = db.Queryable<TN_Material>() |
| | | .Where(it => itemCodes.Contains(it.S_ITEM_CODE)) |
| | | .ToList(); |
| | | var result = new SimpleResult(); |
| | | |
| | | db.BeginTran(); |
| | |
| | | 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 = 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<TN_Inbound_Detail>(); |
| | | if (itemwlpz.ITEM.Count > 0) |
| | | { |
| | | itemwlpz.ITEM.ForEach(a => |
| | | foreach (var a in itemwlpz.ITEM) |
| | | |
| | | { |
| | | #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_CXWLPZHXM = a.CXPZHXM, |
| | | S_CXPZNF = a.CXPZNF, |
| | | |
| | | S_SERIAL_NO = a.ITEM1==null?"": string.Join(",", a.ITEM1.XLH), |
| | | S_SERIAL_NO = a.ITEM1 == null ? "" : string.Join(",", a.ITEM1.XLH), |
| | | |
| | | }); |
| | | //} |
| | | |
| | | }); |
| | | } |
| | | db.Insertable<TN_Inbound_Order>(po).ExecuteCommand(); |
| | | db.Insertable<TN_Inbound_Detail>(po.Details).ExecuteCommand(); |
| | | db.CommitTran(); |
| | |
| | | var Details = new List<TN_Inbound_Detail>(); |
| | | if (itemwlpz.ITEM.Count > 0) |
| | | { |
| | | itemwlpz.ITEM.ForEach(a => |
| | | foreach (var a in itemwlpz.ITEM) |
| | | |
| | | { |
| | | 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(); |
| | | tN_Inbound_Details.Add(poq); |
| | | // db.Updateable(poq).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | |
| | | }); |
| | | } |
| | | |
| | | }); |
| | | } |
| | | db.Insertable<TN_Inbound_Detail>(Details).ExecuteCommand(); |
| | | db.CommitTran(); |
| | | |
| | |
| | | } |
| | | 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<TN_Outbound_Detail>(); |
| | | // 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<TN_Outbound_Order>(po).ExecuteCommand(); |
| | | // db.Insertable<TN_Outbound_Detail>(po.Details).ExecuteCommand(); |
| | | // db.CommitTran(); |
| | | |
| | | // } |
| | | //} |
| | | //else |
| | | //{ |
| | | // result.resultCode = 1; |
| | | // result.resultMsg = "已经有重复单号,不可重复传输"; |
| | | // return result; |
| | | //} |
| | | #endregion |
| | | |
| | | sw.Stop(); |
| | | LogHelper.Info("第一次" + sw.ElapsedMilliseconds); |
| | | |
| | | #region 创建领料单 |
| | | var po = db.Queryable<TN_Ll_Order>().Includes(a => a.Details).Where(s => s.S_NO == itemwlpz.HEAD.WLPZBH).First(); |
| | |
| | | po.S_FACTORY = itemwlpz.ITEM[0].GC; |
| | | foreach (var a in itemwlpz.ITEM) |
| | | { |
| | | var item = db.Queryable<TN_Material>().Where(it => it.S_ITEM_CODE == a.WLBH).First(); |
| | | var item = itemlist.Where(it => it.S_ITEM_CODE == a.WLBH).FirstOrDefault(); |
| | | if (item == null) |
| | | { |
| | | var result12 = new SimpleResult(); |
| | |
| | | N_ROW_NO = a.WLPZHXM, |
| | | S_JDBS = a.JDBS, |
| | | S_ITEM_CODE = a.WLBH, |
| | | S_ITEM_NAME = item.S_ITEM_NAME, |
| | | S_ITEM_NAME = item?.S_ITEM_NAME, |
| | | F_QTY = a.SL, |
| | | S_BATCH_NO = a.PC, |
| | | S_ERP_WH_CODE = a.KCDD, |
| | |
| | | } |
| | | |
| | | var result1 = db.Insertable<TN_Ll_Order>(po).ExecuteCommand() > 0; |
| | | db.Insertable<TN_Ll_detail>(po.Details).ExecuteCommand(); |
| | | using (var bulkCopy = new SqlBulkCopy(util.Settings.SqlServer)) |
| | | { |
| | | bulkCopy.DestinationTableName = "TN_Picking_Detail"; |
| | | bulkCopy.BatchSize = 500; |
| | | var dataTable = new DataTable(); |
| | | dataTable = po.Details.ToDataTable(); |
| | | // 添加列映射(确保名称匹配) |
| | | foreach (DataColumn col in dataTable.Columns) |
| | | { |
| | | bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName); |
| | | } |
| | | bulkCopy.WriteToServer(po.Details.ToDataTable()); |
| | | } |
| | | //db.Insertable<TN_Ll_detail>(po.Details).ExecuteCommand(); |
| | | |
| | | } |
| | | } |
| | |
| | | { |
| | | 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<TN_Material>().Where(it => it.S_ITEM_CODE == a.WLBH).First(); |
| | | var item = itemlist.Where(it => it.S_ITEM_CODE == a.WLBH).FirstOrDefault(); |
| | | if (item == null) |
| | | { |
| | | var result12 = new SimpleResult(); |
| | |
| | | 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(); |
| | | tN_Ll_Details.Add(po1.First()); |
| | | //db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); |
| | | } |
| | | else //返回失败 |
| | | { |
| | |
| | | { |
| | | 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<TN_Ll_detail>().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<TN_Material>().Where(it => it.S_ITEM_CODE == a.WLBH).First(); |
| | | var item = itemlist.Where(it => it.S_ITEM_CODE == a.WLBH).FirstOrDefault(); |
| | | if (item == null) |
| | | { |
| | | var result12 = new SimpleResult(); |
| | |
| | | result12.resultMsg = $"物料{a.WLBH}物料主数据不存在该物料"; |
| | | simples.Add(result12); |
| | | continue; |
| | | // throw new Exception($"物料{a.WLBH}物料主数据不存在该物料"); |
| | | // throw new Exception($"物料{a.WLBH}物料主数据不存在该物料"); |
| | | } |
| | | TN_Ll_detail tN_Outbound_Detail = new TN_Ll_detail |
| | | { |
| | |
| | | else |
| | | {//更新数量 未执行时 直接更新数量 |
| | | po1.First().F_QTY = a.SL; |
| | | db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); |
| | | tN_Ll_Details.Add(po1.First()); |
| | | //db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); |
| | | } |
| | | //} |
| | | } |
| | |
| | | db.Insertable<TN_Ll_detail>(listtn).ExecuteCommand(); |
| | | } |
| | | } |
| | | |
| | | sw.Restart(); |
| | | sw.Stop(); |
| | | LogHelper.Info("第二次" + sw.ElapsedMilliseconds); |
| | | #endregion |
| | | } |
| | | result.WLPZBH = itemwlpz.HEAD.WLPZBH; |
| | |
| | | result.resultCode = 0; |
| | | simples.Add(result); |
| | | } |
| | | if (tN_Ll_Details.Count() > 0) |
| | | { |
| | | |
| | | |
| | | db.Updateable(tN_Ll_Details).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); |
| | | } |
| | | if (tN_Inbound_Details.Count() > 0) |
| | | { |
| | | db.Updateable(tN_Inbound_Details).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); |
| | | } |
| | | db.CommitTran(); |
| | | |
| | | sw.Restart(); |
| | | sw.Stop(); |
| | | LogHelper.Info("第三次" + sw.ElapsedMilliseconds); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | |
| | | /// <returns></returns> |
| | | internal static SimpleResult InboundOrderSorting(MPSorting model) |
| | | { |
| | | |
| | | |
| | | var result = new SimpleResult(); |
| | | foreach (var a in model.MaterList) |
| | | { |
| | | bool v = MaterPanduan(a.item_code, a.qty); |
| | | if (v) |
| | | { |
| | | result.resultMsg = $"物料{a.item_code}数量超过 库存总数"; |
| | | return result; |
| | | } |
| | | } |
| | | //判断起始库位是否锁定 |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | | using (var db = new SqlHelper<object>().GetInstance()) |
| | | { |
| | | Location endloc = new Location(); |
| | | var hwbd = db.Queryable<TN_Container_Code>().Where(a => a.S_CNTR_CODE.Trim() == model.cntr_code).First(); |
| | | if (hwbd!=null) |
| | | { |
| | | endloc = db.Queryable<Location>().Where(a => a.S_CODE == hwbd.S_LOC_CODE.Trim()).First(); |
| | | if (endloc?.N_LOCK_STATE != 0) |
| | | { |
| | | result.resultCode = 3; |
| | | result.resultMsg = $"终点库位已锁/不存在"; |
| | | return result; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | result.resultCode = 3; |
| | | result.resultMsg = $"{model.cntr_code}托盘找不到货位"; |
| | | return result; |
| | | } |
| | | |
| | | |
| | | |
| | | var locinfo = db.Queryable<Location>().Where(a => a.S_CODE == model.start).First(); |
| | | |
| | | if (locinfo?.N_LOCK_STATE != 0) |
| | | { |
| | | result.resultCode = 3; |
| | |
| | | result.resultMsg = "成功"; |
| | | result.resultCode = 0; |
| | | //校验入库单数量,不可以超,成功后插入托盘物料表,更新入库单累计数量 |
| | | result = AddInboundOrder(model.MaterList, model.cntr_code); |
| | | result = AddInboundOrder(model.MaterList, model.cntr_code, model.cntr_type); |
| | | #region MyRegion |
| | | |
| | | |
| | |
| | | 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_END_LOC = endloc.S_CODE, |
| | | S_END_AREA = endloc.S_AREA_CODE, |
| | | S_END_WH = endloc.S_WH_CODE, |
| | | S_BS_NO = model.MaterList[0].arrival_no, |
| | | N_TYPE = 1, |
| | | S_TYPE = WMSTask.GetTypeStr(1), |
| | |
| | | } |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 分拣 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | internal static async Task<SimpleResult> OutboundOrderSorting(FJSorting model) |
| | | internal static async Task<SimpleResult> KtSorting(KtSorting model) |
| | | { |
| | | |
| | | var result = new SimpleResult(); |
| | | |
| | | |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | | |
| | | using (var db = new SqlHelper<object>().GetInstance()) |
| | |
| | | try |
| | | { |
| | | |
| | | |
| | | result.resultMsg = "成功"; |
| | | result.resultCode = 0; |
| | | if (string.IsNullOrEmpty(model.arrival_no)) |
| | | { |
| | | result.resultMsg = "出库单号不能为空"; |
| | | result.resultCode = 1; |
| | | return result; |
| | | } |
| | | |
| | | //人工分拣 容器货品表数量、分配量升降 |
| | | //出库单详情 |
| | | var po = db.Queryable<TN_Outbound_Order>().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.resultMsg = "成功"; |
| | | result.resultCode = 0; |
| | | var locinfo = db.Queryable<Location>().Where(a => a.S_CODE == model.start).First(); |
| | | |
| | | 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<CntrItemRel>().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 => |
| | | if (locinfo?.N_LOCK_STATE != 0) |
| | | { |
| | | 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)) |
| | | result.resultCode = 3; |
| | | result.resultMsg = $"起始库位已锁/不存在"; |
| | | return result; |
| | | } |
| | | //判断托盘是否已经生成任务,如果没有则生成 |
| | | if (!string.IsNullOrEmpty(model.cntr_code)) |
| | | { |
| | | LogHelper.Info($"mobox 仓库降量接口返回 {res}"); |
| | | var moboxres = JsonConvert.DeserializeObject<moboxres>(res); |
| | | if (moboxres.err_code != 0) |
| | | var wmsTaskcs = WMSHelper.GetWmsTaskByCntr(model.cntr_code); |
| | | if (wmsTaskcs != null) |
| | | { |
| | | adds = false; |
| | | result.resultCode = 3; |
| | | result.resultMsg = $"起点{model.start} 托盘{model.cntr_code}已经创建任务,请勿重复申请"; |
| | | return result; |
| | | } |
| | | } |
| | | 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)) |
| | | //出库 |
| | | if (model.Type == 2) |
| | | { |
| | | LogHelper.Info($"mobox 库区降量接口返回 {res2}"); |
| | | var moboxres = JsonConvert.DeserializeObject<moboxres>(res); |
| | | if (moboxres.err_code != 0) |
| | | Location start = new Location(); |
| | | if (!string.IsNullOrEmpty(model.cntr_code)) |
| | | { |
| | | adds = false; |
| | | var loc = db.Queryable<LocCntrRel>().Where(it => it.S_CNTR_CODE == model.cntr_code).First(); |
| | | if (loc == null) |
| | | { |
| | | LogHelper.Info($"容器{model.cntr_code}找不到对应货位"); |
| | | result.resultMsg = $"容器{model.cntr_code}找不到对应货位"; |
| | | result.resultCode = 1; |
| | | return result; |
| | | } |
| | | else |
| | | { |
| | | start = db.Queryable<Location>().Where(it => it.S_CODE == loc.S_LOC_CODE).First(); |
| | | } |
| | | } |
| | | else if (!string.IsNullOrEmpty(model.item_code)) |
| | | { |
| | | LogHelper.Info($"进来了"); |
| | | var khsta= db.Queryable<CGRels>().Where(cir => cir.S_CNTR_TYPE == "半托" && cir.S_ITEM_CODE == model.item_code).OrderBy(cir => cir.T_CREATE).ToList().FirstOrDefault(); |
| | | |
| | | |
| | | |
| | | if (khsta != null) |
| | | { |
| | | LogHelper.Info($"starts{khsta?.S_CNTR_CODE}"); |
| | | var starts12 = db.Queryable<LocCntrRel>().Where(lcr => lcr.S_CNTR_CODE == khsta.S_CNTR_CODE).First(); |
| | | if (starts12==null) |
| | | { |
| | | LogHelper.Info($"{khsta.S_CNTR_CODE}容器货位不存在"); |
| | | result.resultMsg = $"{khsta.S_CNTR_CODE}容器货位不存在"; |
| | | result.resultCode = 1; |
| | | return result; |
| | | } |
| | | else |
| | | { |
| | | |
| | | LogHelper.Info($"starts1{starts12.S_LOC_CODE}"); |
| | | start = db.Queryable<Location>().Where(loc => loc.S_AREA_CODE == "HJQ" && loc.S_CODE == starts12.S_LOC_CODE).ToList().FirstOrDefault(); |
| | | LogHelper.Info($"starts2{start?.S_CODE}"); |
| | | |
| | | model.cntr_code = starts12?.S_CNTR_CODE; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | var starts = db.Queryable<CntrItemRel>().Where(cir => cir.S_CNTR_TYPE == "半托" && cir.S_ITEM_CODE == model.item_code).OrderBy(cir => cir.T_CREATE).ToList().FirstOrDefault(); |
| | | |
| | | if (starts!=null) |
| | | { |
| | | LogHelper.Info($"{model.cntr_code}容器货品存在该物料,请配置物料容器"); |
| | | result.resultMsg = $"容器货品存在该物料,请配置物料容器"; |
| | | result.resultCode = 1; |
| | | return result; |
| | | |
| | | } |
| | | else |
| | | { |
| | | var list = db.Queryable<CntrItemRel>().Select(s => s.S_CNTR_CODE).ToArray(); |
| | | var S_LOC_CODElist = db.Queryable<LocCntrRel>().Where(s => !list.Contains(s.S_CNTR_CODE)).Select(s => s.S_LOC_CODE).ToArray(); |
| | | start = db.Queryable<Location>().Where(it => S_LOC_CODElist.Contains(it.S_CODE)).ToList().FirstOrDefault(); |
| | | if (start!=null) |
| | | { |
| | | var starts12 = db.Queryable<LocCntrRel>().Where(lcr => lcr.S_CNTR_CODE == start.S_CODE).ToList().FirstOrDefault(); |
| | | |
| | | |
| | | model.cntr_code = starts12?.S_CNTR_CODE; |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | #region MyRegion |
| | | |
| | | #endregion |
| | | } |
| | | if (start == null) |
| | | { |
| | | LogHelper.Info($"{model.item_code}未找到可用货位"); |
| | | result.resultMsg = $"{model.item_code}未找到可用货位"; |
| | | result.resultCode = 1; |
| | | return result; |
| | | } |
| | | //库位信息 |
| | | |
| | | var endinfo = db.Queryable<Location>().Where(it => it.S_CODE == model.start).First(); |
| | | var wmsTask = new WMSTask |
| | | { |
| | | S_CNTR_CODE = model.cntr_code, |
| | | S_CODE = WMSHelper.GenerateTaskNo(), |
| | | S_START_LOC = start.S_CODE, |
| | | S_START_AREA = start.S_AREA_CODE, |
| | | S_START_WH = start.S_WH_CODE, |
| | | S_END_LOC = endinfo.S_CODE, |
| | | S_END_AREA = endinfo.S_AREA_CODE, |
| | | S_END_WH = endinfo.S_WH_CODE, |
| | | N_PRIORITY=1, |
| | | N_TYPE = 2, |
| | | // S_TYPE = WMSTask.GetTypeStr(1), |
| | | S_TYPE = "出库空托盘", |
| | | S_OP_DEF_CODE = "", |
| | | S_OP_DEF_NAME = "pda出库" |
| | | }; |
| | | if (WMSHelper.CreateWmsTask(wmsTask)) |
| | | { |
| | | LocationHelper.LockLoc(start.S_CODE, 2); |
| | | result.resultMsg = $"创建作业成功,作业号{wmsTask.S_CODE}"; |
| | | } |
| | | |
| | | |
| | | } |
| | | else |
| | | else //入库 |
| | | { |
| | | LogHelper.Info($"mobox 库区降量接口返回为空"); |
| | | Location end = new Location(); |
| | | if (!string.IsNullOrEmpty(model.cntr_code)) |
| | | { |
| | | |
| | | var hwbd = db.Queryable<TN_Container_Code>().Where(a => a.S_CNTR_CODE.Trim() == model.cntr_code).First(); |
| | | if (hwbd!=null) |
| | | { |
| | | end = db.Queryable<Location>().Where(s => s.S_CODE == hwbd.S_LOC_CODE.Trim()).First(); |
| | | } |
| | | else |
| | | { |
| | | |
| | | #region MyRegion |
| | | //var list = db.Queryable<CntrItemRel>().Select(s => s.S_CNTR_CODE).ToArray(); |
| | | //var S_LOC_CODElist = db.Queryable<LocCntrRel>().Where(s=>!list.Contains(s.S_CNTR_CODE)).Select(s=>s.S_LOC_CODE).ToArray(); |
| | | //start = db.Queryable<Location>().Where(it => S_LOC_CODElist.Contains(it.S_CODE)).First(); |
| | | |
| | | //// 获取所有被占用的容器编码 |
| | | //var usedContainerCodes = db.Queryable<CntrItemRel>().Select(s => s.S_CNTR_CODE).ToList(); |
| | | #endregion |
| | | // 获取未被占用的容器对应的货位编码 |
| | | var availableLocationCodes = db.Queryable<LocCntrRel>() |
| | | .Select(s => s.S_LOC_CODE) |
| | | .ToList(); |
| | | |
| | | // 获取第一个可用货位(如果没有则返回null) |
| | | end = db.Queryable<Location>() |
| | | .Where(it => !availableLocationCodes.Contains(it.S_CODE) && it.S_AREA_CODE == "HJQ") |
| | | .ToList().FirstOrDefault(); |
| | | |
| | | if (end!=null) |
| | | { |
| | | TN_Container_Code tN_Container_Code = new TN_Container_Code(); |
| | | tN_Container_Code.S_CNTR_CODE= model.cntr_code; |
| | | tN_Container_Code.S_LOC_CODE = end.S_CODE; |
| | | var sss = db.Insertable<TN_Container_Code>(tN_Container_Code).ExecuteCommand(); |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"入库 容器{model.cntr_code}不能为空"); |
| | | result.resultMsg = $"入库 容器{model.cntr_code}不能为空"; |
| | | result.resultCode = 1; |
| | | return result; |
| | | |
| | | } |
| | | if (end == null) |
| | | { |
| | | LogHelper.Info($"{model.cntr_code}未找到可用货位"); |
| | | result.resultMsg = $"{model.cntr_code}未找到可用货位"; |
| | | result.resultCode = 1; |
| | | return result; |
| | | } |
| | | var sart = db.Queryable<Location>().Where(it => it.S_CODE == model.start).First(); |
| | | var wmsTask = new WMSTask |
| | | { |
| | | S_CNTR_CODE = model.cntr_code, |
| | | S_CODE = WMSHelper.GenerateTaskNo(), |
| | | S_START_LOC = sart.S_CODE, |
| | | S_START_AREA = sart.S_AREA_CODE, |
| | | S_START_WH = sart.S_WH_CODE, |
| | | S_END_LOC = end.S_CODE, |
| | | S_END_AREA = end.S_AREA_CODE, |
| | | S_END_WH = end.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(end.S_CODE, 1); |
| | | result.resultMsg = $"创建作业成功,作业号{wmsTask.S_CODE}"; |
| | | } |
| | | |
| | | } |
| | | 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; |
| | | { |
| | | result.resultMsg = e.Message; |
| | | result.resultCode = 1; |
| | | db.RollbackTran(); |
| | | return result; |
| | | throw; |
| | |
| | | } |
| | | |
| | | } |
| | | public static async Task<SimpleResult> TYAddOutboundOrder(SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, bool isHK, string start, string S_OUT_TYPE) |
| | | private static readonly ObjectCache Cache = MemoryCache.Default; |
| | | private const string CachePrefix = "ClickProtection_"; |
| | | private const int CacheDurationInSeconds = 5; |
| | | |
| | | public static bool IsClickAllowed(string parameter) |
| | | { |
| | | string cacheKey = CachePrefix + parameter; |
| | | |
| | | // 检查缓存中是否已存在该参数 |
| | | if (Cache.Contains(cacheKey)) |
| | | { |
| | | // 缓存中存在,说明5秒内已点击过 |
| | | return false; |
| | | } |
| | | else |
| | | { |
| | | // 缓存中不存在,添加到缓存并设置5秒后过期 |
| | | CacheItemPolicy policy = new CacheItemPolicy { AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(CacheDurationInSeconds) }; |
| | | Cache.Set(cacheKey, parameter, policy); |
| | | return true; |
| | | } |
| | | } |
| | | public static async Task<SimpleResult> AllTYAddOutboundOrder(SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start, string S_OUT_TYPE, string cntr_type) |
| | | { |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | | //using (var db = new SqlHelper<object>().GetInstance()) |
| | | //{ |
| | | var result = new SimpleResult(); |
| | | var result = new SimpleResult(); |
| | | |
| | | try |
| | | try |
| | | { |
| | | //库位信息 |
| | | var startinfo = db.Queryable<Location>().Where(it => it.S_CODE == start).First(); |
| | | //出库单详情 |
| | | var po = db.Queryable<TN_Outbound_Order>().Includes(s => s.Details).Where(a => a.S_NO == arrival_no).First(); |
| | | //分拣单 |
| | | //var popp = db.Queryable<TN_Distribution_CNTR>().Where(a => a.S_BS_NO == arrival_no&&a.S_SORT_TYPE=="未分类" && a.N_B_STATE == 2).First(); |
| | | |
| | | //回参物料信息 |
| | | List<OutboundRecord> records = new List<OutboundRecord>(); |
| | | var pzlist = db.Queryable<MaterialVoucher>().Where(a => a.S_NO == arrival_no).ToList(); |
| | | foreach (var item in MaterList) |
| | | { |
| | | //库位信息 |
| | | var startinfo = db.Queryable<Location>().Where(it => it.S_CODE == start).First(); |
| | | //出库单详情 |
| | | var po = db.Queryable<TN_Outbound_Order>().Includes(s => s.Details).Where(a => a.S_NO == arrival_no).First(); |
| | | //分拣单 |
| | | //var popp = db.Queryable<TN_Distribution_CNTR>().Where(a => a.S_BS_NO == arrival_no&&a.S_SORT_TYPE=="未分类" && a.N_B_STATE == 2).First(); |
| | | |
| | | //回参物料信息 |
| | | List<OutboundRecord> records = new List<OutboundRecord>(); |
| | | var pz = db.Queryable<MaterialVoucher>().Where(a => a.S_NO == arrival_no).First(); |
| | | foreach (var item in MaterList) |
| | | var pz = pzlist.Where(s => s.S_WLBM == item.item_code).FirstOrDefault(); |
| | | // 插入到托盘明细表 |
| | | var cntr = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntr_code).ToList(); |
| | | if (cntr.Count() > 0) |
| | | { |
| | | // 插入到托盘明细表 |
| | | var cntr = db.Queryable<CntrItemRel>().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<CntrItemRel>().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) |
| | | { |
| | | db.BeginTran(); |
| | | //1.查看是否有相同物料批次的信息,如果有要累减少,不同批次的可以分开&& a.N_BS_ROW_NO == item.N_ROW_NO |
| | | var cir = db.Queryable<CntrItemRel>().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.S_CNTR_TYPE = cntr_type; |
| | | cir.F_ALLOC_QTY -= item.qty; |
| | | cir.T_MODIFY = DateTime.Now; |
| | | if (cir.F_QTY == 0) |
| | | { |
| | | 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(); |
| | | //添加回库作业 |
| | | |
| | | |
| | | } |
| | | db.Deleteable(cir).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, |
| | | db.Updateable(cir).UpdateColumns(it => new { it.F_QTY, it.S_CNTR_TYPE, it.F_ALLOC_QTY, it.T_MODIFY }).ExecuteCommand(); |
| | | |
| | | 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 |
| | | { |
| | | db.RollbackTran(); |
| | | result.resultCode = 1; |
| | | result.resultMsg = $"获取托盘信息失败{cntr_code}"; |
| | | LogHelper.Info($"获取托盘信息失败{cntr_code}"); |
| | | result.resultMsg = $"物料不存在{item.item_code}"; |
| | | LogHelper.Info($"物料不存在{item.item_code}"); |
| | | return result; |
| | | } |
| | | |
| | | 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); |
| | | } |
| | | db.Insertable<OutboundRecord>(records).ExecuteCommand(); |
| | | |
| | | //db.CommitTran(); |
| | | else |
| | | { |
| | | result.resultCode = 1; |
| | | result.resultMsg = $"获取托盘信息失败{cntr_code}"; |
| | | LogHelper.Info($"获取托盘信息失败{cntr_code}"); |
| | | return result; |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | //if (isHK) |
| | | //{ |
| | | var locs = db.Queryable<WCSTask>().Where(a => a.S_TYPE.Contains("出库") && a.S_CNTR_CODE == cntr_code && a.N_B_STATE == 3).OrderByDescending(s => s.T_END_TIME).First(); |
| | | if (locs != null) |
| | | { |
| | | //db.RollbackTran(); |
| | | LogHelper.Info("物料信息绑定到满容器上" + ex.Message); |
| | | Console.WriteLine(ex.Message); |
| | | var cntr = db.Queryable<TN_Distribution_CNTR>().Where(a => a.S_DC_NO == locs.S_BS_NO).First(); |
| | | if (cntr != null) |
| | | { |
| | | cntr.S_SORT_TYPE = "已分拣"; |
| | | db.Updateable(cntr).UpdateColumns(it => new { it.S_SORT_TYPE }).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | result.resultCode = 1; |
| | | result.resultMsg += $"任务{locs.S_CODE}来源号{locs.S_BS_NO}找不到配盘信息"; |
| | | return result; |
| | | } |
| | | Location endloc = new Location(); |
| | | |
| | | throw; |
| | | LogHelper.Info($"获取托盘信息{cntr_code}容器"); |
| | | var hwbd = db.Queryable<TN_Container_Code>().Where(a => a.S_CNTR_CODE.Trim() == cntr_code).First(); |
| | | if (hwbd != null) |
| | | { |
| | | endloc = db.Queryable<Location>().Where(a => a.S_CODE == hwbd.S_LOC_CODE.Trim()).First(); |
| | | if (endloc?.N_LOCK_STATE != 0) |
| | | { |
| | | result.resultCode = 3; |
| | | result.resultMsg = $"终点库位已锁/不存在"; |
| | | return result; |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | result.resultCode = 3; |
| | | result.resultMsg = $"{cntr_code}托盘找不到货位"; |
| | | return result; |
| | | } |
| | | |
| | | //var location = db.Queryable<Location>().Where(a => a.S_CODE == locs.S_LOC_CODE).First(); |
| | | 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 = start, |
| | | //S_END_AREA = startinfo.S_AREA_CODE, |
| | | //S_END_WH = startinfo.S_AREA_CODE, |
| | | S_END_LOC = endloc?.S_CODE, |
| | | S_END_AREA = endloc?.S_AREA_CODE, |
| | | S_END_WH = endloc?.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, 2); |
| | | result.resultMsg = $"创建作业成功,作业号{wmsTask.S_CODE}"; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | result.resultCode = 1; |
| | | result.resultMsg += $"找不到容器对应任务信息{cntr_code}"; |
| | | return result; |
| | | } |
| | | |
| | | //} |
| | | var sss = db.Insertable<OutboundRecord>(records).ExecuteCommand(); |
| | | |
| | | //db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | //db.RollbackTran(); |
| | | LogHelper.Info("物料信息绑定到满容器上" + ex.Message); |
| | | result.resultCode = 1; |
| | | result.resultMsg += ex.Message; |
| | | Console.WriteLine(ex.Message); |
| | | |
| | | throw; |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 分拣 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | internal static async Task<SimpleResult> ALLOutboundOrderSorting(FJSorting model) |
| | | { |
| | | |
| | | |
| | | var result = new SimpleResult(); |
| | | if (!IsClickAllowed("1")) |
| | | { |
| | | // 提示用户5秒内已点击过 |
| | | result.resultMsg = "您已点击过,请5秒后再试。"; |
| | | result.resultCode = 1; |
| | | return result; |
| | | } |
| | | else |
| | | { |
| | | |
| | | } |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | | |
| | | using (var db = new SqlHelper<object>().GetInstance()) |
| | | { |
| | | try |
| | | { |
| | | var start = ""; |
| | | var startloc = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE == model.cntr_code).First(); |
| | | if (startloc != null) |
| | | { |
| | | start = startloc.S_LOC_CODE; |
| | | } |
| | | else |
| | | { |
| | | result.resultMsg = $"{model.cntr_code}容器未找到货位信息"; |
| | | result.resultCode = 1; |
| | | return result; |
| | | } |
| | | result.resultMsg = "成功"; |
| | | result.resultCode = 0; |
| | | if (string.IsNullOrEmpty(model.arrival_no)) |
| | | { |
| | | result.resultMsg = "出库单号不能为空"; |
| | | result.resultCode = 1; |
| | | return result; |
| | | } |
| | | |
| | | //人工分拣 容器货品表数量、分配量升降 |
| | | //出库单详情 |
| | | var po = db.Queryable<TN_Outbound_Order>().Includes(s => s.Details).Where(a => a.S_NO == model.arrival_no).First(); |
| | | if (po == null) |
| | | { |
| | | result.resultMsg = "未找到此出库单"; |
| | | result.resultCode = 1; |
| | | return result; |
| | | |
| | | } |
| | | LogHelper.Info($"S_OUT_TYPE{po.S_OUT_TYPE}"); |
| | | var gzra = db.Queryable<TN_GZ_SZ>().Where(a => a.C_ENABLE == "Y").First(); |
| | | var GZRQ = DateTime.Now.ToString("yyyyMMdd"); |
| | | if (gzra != null) |
| | | { |
| | | GZRQ = gzra.S_GZRQ.ToString("yyyyMMdd"); |
| | | } |
| | | //根据不同出库类型 回调sap |
| | | if (po.S_OUT_TYPE == "冲销出库") |
| | | { |
| | | result = await CXAddOutboundOrder(GZRQ, db, model.MaterList, model.arrival_no, model.cntr_code, start); |
| | | } |
| | | else |
| | | if (po.S_OUT_TYPE == "出库")//普通出库 |
| | | { |
| | | LogHelper.Info($"S_OUT_TYPE{po.S_OUT_TYPE}"); |
| | | result = await AddOutboundOrder(GZRQ, db, model.MaterList, model.arrival_no, model.cntr_code, start); |
| | | } |
| | | else if (po.S_OUT_TYPE == "计划外发料出库") |
| | | { |
| | | result = await jhwtlAddOutboundOrder(GZRQ, db, model.MaterList, model.arrival_no, model.cntr_code, start); |
| | | } |
| | | else if (po.S_OUT_TYPE == "成本中心出库") |
| | | { |
| | | result = await CBAddOutboundOrder(GZRQ, db, model.MaterList, model.arrival_no, model.cntr_code, start); |
| | | } |
| | | //if (result.resultCode == 1) |
| | | //{ |
| | | // return result; |
| | | //} |
| | | //通用接口 对容器货品的删减 和生成回库单 都要用的接口 |
| | | result = await AllTYAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, start, po.S_OUT_TYPE, model.cntr_type); |
| | | if (result.resultCode == 1) |
| | | { |
| | | return result; |
| | | } |
| | | #region 升降量 |
| | | |
| | | bool adds = true; |
| | | |
| | | //var itemlist = db.Queryable<CntrItemRel>().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 }; |
| | | var S_WH_CODE = ""; |
| | | var S_AREA_CODE = ""; |
| | | if (string.IsNullOrEmpty(po.S_WH_CODE)) |
| | | { |
| | | S_WH_CODE = util.Settings.WHCode; |
| | | } |
| | | else |
| | | { |
| | | S_WH_CODE = po.S_WH_CODE; |
| | | } |
| | | if (string.IsNullOrEmpty(po.S_AREA_CODE)) |
| | | { |
| | | S_AREA_CODE = util.Settings.AREACode; |
| | | } |
| | | else |
| | | { |
| | | S_AREA_CODE = po.S_AREA_CODE; |
| | | } |
| | | model.MaterList.ForEach(a => |
| | | { |
| | | LogHelper.Info($"填充数据{util.Settings.WHCode}"); |
| | | LogHelper.Info($"减仓库量{util.Settings.AREACode}表数据 仓库{po.S_WH_CODE} 物料编码{a.item_code} 物料名称 数量{a.qty}"); |
| | | req.item_info.Add(new AddChangeModel.itemModel |
| | | { |
| | | wh_code = 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 = S_WH_CODE, |
| | | area_code = 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<moboxres>(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<moboxres>(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) |
| | | { |
| | | LogHelper.Info($"报错{e.Message}"); |
| | | result.resultMsg = e.Message; |
| | | db.RollbackTran(); |
| | | return result; |
| | | throw; |
| | | } |
| | | } |
| | | |
| | | } |
| | | /// <summary> |
| | | /// 分拣 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | internal static async Task<SimpleResult> OutboundOrderSorting(FJSorting model) |
| | | { |
| | | |
| | | var result = new SimpleResult(); |
| | | if (!IsClickAllowed("1")) |
| | | { |
| | | // 提示用户5秒内已点击过 |
| | | result.resultMsg = "您已点击过,请5秒后再试。"; |
| | | result.resultCode = 1; |
| | | return result; |
| | | } |
| | | else |
| | | { |
| | | |
| | | } |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | | |
| | | using (var db = new SqlHelper<object>().GetInstance()) |
| | | { |
| | | try |
| | | { |
| | | var start = ""; |
| | | var startloc = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE == model.cntr_code).First(); |
| | | if (startloc!=null) |
| | | { |
| | | start = startloc.S_LOC_CODE; |
| | | } |
| | | else |
| | | { |
| | | result.resultMsg = $"{model.cntr_code}容器未找到货位信息"; |
| | | result.resultCode = 1; |
| | | return result; |
| | | } |
| | | result.resultMsg = "成功"; |
| | | result.resultCode = 0; |
| | | if (string.IsNullOrEmpty(model.arrival_no)) |
| | | { |
| | | result.resultMsg = "出库单号不能为空"; |
| | | result.resultCode = 1; |
| | | return result; |
| | | } |
| | | |
| | | //人工分拣 容器货品表数量、分配量升降 |
| | | //出库单详情 |
| | | var po = db.Queryable<TN_Outbound_Order>().Includes(s => s.Details).Where(a => a.S_NO == model.arrival_no).First(); |
| | | if (po == null) |
| | | { |
| | | result.resultMsg = "未找到此出库单"; |
| | | result.resultCode = 1; |
| | | return result; |
| | | |
| | | } |
| | | LogHelper.Info($"S_OUT_TYPE{po.S_OUT_TYPE}"); |
| | | var gzra = db.Queryable<TN_GZ_SZ>().Where(a => a.C_ENABLE == "Y").First(); |
| | | var GZRQ = DateTime.Now.ToString("yyyyMMdd"); |
| | | if (gzra != null) |
| | | { |
| | | GZRQ = gzra.S_GZRQ.ToString("yyyyMMdd"); |
| | | } |
| | | #region 注释sap 因效率过慢 人工回到 |
| | | //根据不同出库类型 回调sap |
| | | if (po.S_OUT_TYPE == "冲销出库") |
| | | { |
| | | result = await CXAddOutboundOrder(GZRQ, db, model.MaterList, model.arrival_no, model.cntr_code, start); |
| | | } |
| | | else |
| | | if (po.S_OUT_TYPE == "出库")//普通出库 |
| | | { |
| | | LogHelper.Info($"S_OUT_TYPE{po.S_OUT_TYPE}"); |
| | | result = await AddOutboundOrder(GZRQ, db, model.MaterList, model.arrival_no, model.cntr_code, start); |
| | | } |
| | | else if (po.S_OUT_TYPE == "计划外发料出库") |
| | | { |
| | | result = await jhwtlAddOutboundOrder(GZRQ, db, model.MaterList, model.arrival_no, model.cntr_code, start); |
| | | } |
| | | else if (po.S_OUT_TYPE == "成本中心出库") |
| | | { |
| | | result = await CBAddOutboundOrder(GZRQ, db, model.MaterList, model.arrival_no, model.cntr_code, start); |
| | | } |
| | | #endregion |
| | | |
| | | |
| | | |
| | | //if (result.resultCode == 1) |
| | | //{ |
| | | // return result; |
| | | //} |
| | | //通用接口 对容器货品的删减 和生成回库单 都要用的接口 |
| | | result = await TYAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, start, po.S_OUT_TYPE, model.cntr_type); |
| | | if (result.resultCode == 1) |
| | | { |
| | | return result; |
| | | } |
| | | #region 升降量 |
| | | |
| | | bool adds = true; |
| | | |
| | | //var itemlist = db.Queryable<CntrItemRel>().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 }; |
| | | var S_WH_CODE = ""; |
| | | var S_AREA_CODE = ""; |
| | | if (string.IsNullOrEmpty(po.S_WH_CODE)) |
| | | { |
| | | S_WH_CODE = util.Settings.WHCode; |
| | | } |
| | | else |
| | | { |
| | | S_WH_CODE = po.S_WH_CODE; |
| | | } |
| | | if (string.IsNullOrEmpty(po.S_AREA_CODE)) |
| | | { |
| | | S_AREA_CODE = util.Settings.AREACode; |
| | | } |
| | | else |
| | | { |
| | | S_AREA_CODE = po.S_AREA_CODE; |
| | | } |
| | | model.MaterList.ForEach(a => |
| | | { |
| | | LogHelper.Info($"填充数据{util.Settings.WHCode}"); |
| | | LogHelper.Info($"减仓库量{util.Settings.AREACode}表数据 仓库{po.S_WH_CODE} 物料编码{a.item_code} 物料名称 数量{a.qty}"); |
| | | req.item_info.Add(new AddChangeModel.itemModel |
| | | { |
| | | wh_code = 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 = S_WH_CODE, |
| | | area_code = 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<moboxres>(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<moboxres>(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) |
| | | { |
| | | LogHelper.Info($"报错{e.Message}"); |
| | | result.resultMsg = e.Message; |
| | | db.RollbackTran(); |
| | | return result; |
| | | throw; |
| | | } |
| | | } |
| | | |
| | | } |
| | | public static async Task<SimpleResult> TYAddOutboundOrder(SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start, string S_OUT_TYPE, string cntr_type) |
| | | { |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | | //using (var db = new SqlHelper<object>().GetInstance()) |
| | | //{ |
| | | var result = new SimpleResult(); |
| | | |
| | | try |
| | | { |
| | | //库位信息 |
| | | var startinfo = db.Queryable<Location>().Where(it => it.S_CODE == start).First(); |
| | | //出库单详情 |
| | | var po = db.Queryable<TN_Outbound_Order>().Includes(s => s.Details).Where(a => a.S_NO == arrival_no).First(); |
| | | //分拣单 |
| | | //var popp = db.Queryable<TN_Distribution_CNTR>().Where(a => a.S_BS_NO == arrival_no&&a.S_SORT_TYPE=="未分类" && a.N_B_STATE == 2).First(); |
| | | |
| | | //回参物料信息 |
| | | List<OutboundRecord> records = new List<OutboundRecord>(); |
| | | var pzlist = db.Queryable<MaterialVoucher>().Where(a => a.S_NO == arrival_no).ToList(); |
| | | foreach (var item in MaterList) |
| | | { |
| | | var pz=pzlist.Where(s=>s.S_WLBM== item.item_code).FirstOrDefault(); |
| | | // 插入到托盘明细表 |
| | | var cntr = db.Queryable<CntrItemRel>().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<CntrItemRel>().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.S_CNTR_TYPE = cntr_type; |
| | | 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.S_CNTR_TYPE, 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; |
| | | } |
| | | |
| | | 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; |
| | | } |
| | | } |
| | | LogHelper.Info($"分拣接口{cntr_code}"); |
| | | //if (isHK) |
| | | //{ |
| | | var locs = db.Queryable<WCSTask>().Where(a => a.S_TYPE.Contains("出库") && a.S_CNTR_CODE == cntr_code && a.N_B_STATE == 3).OrderByDescending(s => s.T_END_TIME).First(); |
| | | if (locs != null) |
| | | { |
| | | LogHelper.Info($"分拣接口 进来了{cntr_code}"); |
| | | var cntr = db.Queryable<TN_Distribution_CNTR>().Where(a => a.S_DC_NO == locs.S_BS_NO).First(); |
| | | if (cntr != null) |
| | | { |
| | | cntr.S_SORT_TYPE = "已分拣"; |
| | | db.Updateable(cntr).UpdateColumns(it => new { it.S_SORT_TYPE }).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | result.resultCode = 1; |
| | | result.resultMsg += $"任务{locs.S_CODE}来源号{locs.S_BS_NO}找不到配盘信息"; |
| | | return result; |
| | | } |
| | | } |
| | | |
| | | var sss = db.Insertable<OutboundRecord>(records).ExecuteCommand(); |
| | | |
| | | //db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | //db.RollbackTran(); |
| | | LogHelper.Info("物料信息绑定到满容器上" + ex.Message); |
| | | result.resultCode = 1; |
| | | result.resultMsg += ex.Message; |
| | | Console.WriteLine(ex.Message); |
| | | |
| | | throw; |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | //} |
| | | public static async Task<SimpleResult> HkGets(HuiK model) { |
| | | |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | |
| | | SimpleResult result = new SimpleResult(); |
| | | //var locs = db.Queryable<WCSTask>().Where(a => a.S_TYPE.Contains("出库") && a.S_CNTR_CODE == model.cntr_code && a.N_B_STATE == 3).OrderByDescending(s => s.T_END_TIME).First(); |
| | | //if (locs != null) |
| | | //{ |
| | | //var cntr = db.Queryable<TN_Distribution_CNTR>().Where(a => a.S_DC_NO == locs.S_BS_NO).First(); |
| | | //if (cntr != null) |
| | | //{ |
| | | // cntr.S_SORT_TYPE = "已分拣"; |
| | | // db.Updateable(cntr).UpdateColumns(it => new { it.S_SORT_TYPE }).ExecuteCommand(); |
| | | //} |
| | | //else |
| | | //{ |
| | | // result.resultCode = 1; |
| | | // result.resultMsg += $"任务{locs.S_CODE}来源号{locs.S_BS_NO}找不到配盘信息"; |
| | | // return result; |
| | | //} |
| | | Location endloc = new Location(); |
| | | |
| | | LogHelper.Info($"获取托盘信息{model.cntr_code}容器"); |
| | | var hwbd = db.Queryable<TN_Container_Code>().Where(a => a.S_CNTR_CODE.Trim() == model.cntr_code).First(); |
| | | if (hwbd != null) |
| | | { |
| | | endloc = db.Queryable<Location>().Where(a => a.S_CODE == hwbd.S_LOC_CODE.Trim()).First(); |
| | | if (endloc?.N_LOCK_STATE != 0) |
| | | { |
| | | result.resultCode = 3; |
| | | result.resultMsg = $"终点库位已锁/不存在"; |
| | | return result; |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | result.resultCode = 3; |
| | | result.resultMsg = $"{model.cntr_code}托盘找不到货位"; |
| | | return result; |
| | | } |
| | | var start = ""; |
| | | var startloc1 = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE == model.cntr_code).First(); |
| | | if (startloc1 != null) |
| | | { |
| | | start = startloc1.S_LOC_CODE; |
| | | } |
| | | else |
| | | { |
| | | result.resultMsg = $"{model.cntr_code}容器未找到货位信息"; |
| | | result.resultCode = 1; |
| | | return result; |
| | | } |
| | | var startloc = db.Queryable<Location>().Where(a => a.S_CODE ==start).First(); |
| | | //var location = db.Queryable<Location>().Where(a => a.S_CODE == locs.S_LOC_CODE).First(); |
| | | var wmsTask = new WMSTask |
| | | { |
| | | S_CNTR_CODE = model.cntr_code, |
| | | S_CODE = WMSHelper.GenerateTaskNo(), |
| | | S_START_LOC = startloc.S_CODE, |
| | | S_START_AREA = startloc.S_AREA_CODE, |
| | | S_START_WH = startloc.S_WH_CODE, |
| | | |
| | | //S_END_LOC = start, |
| | | //S_END_AREA = startinfo.S_AREA_CODE, |
| | | //S_END_WH = startinfo.S_AREA_CODE, |
| | | S_END_LOC = endloc?.S_CODE, |
| | | S_END_AREA = endloc?.S_AREA_CODE, |
| | | S_END_WH = endloc?.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(startloc.S_CODE, 2); |
| | | result.resultMsg = $"创建作业成功,作业号{wmsTask.S_CODE}"; |
| | | } |
| | | //} |
| | | //else |
| | | //{ |
| | | // result.resultCode = 1; |
| | | // result.resultMsg += $"找不到容器对应任务信息{model.cntr_code}"; |
| | | // return result; |
| | | //} |
| | | return result; |
| | | |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | |
| | | /// <param name="cntr_code"></param> |
| | | /// <param name="start"></param> |
| | | /// <returns></returns> |
| | | public static async Task<SimpleResult> CBAddOutboundOrder(SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start) |
| | | public static async Task<SimpleResult> CBAddOutboundOrder(string GZRQ,SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start) |
| | | { |
| | | //using (var db = new SqlHelper<object>().GetInstance()) |
| | | //{ |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | | var result = new SimpleResult(); |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | | var result = new SimpleResult(); |
| | | |
| | | try |
| | | try |
| | | { |
| | | //库位信息 |
| | | var startinfo = db.Queryable<Location>().Where(it => it.S_CODE == start).First(); |
| | | //出库单详情 |
| | | var po = db.Queryable<TN_Outbound_Order>().Includes(s => s.Details).Where(a => a.S_NO == arrival_no).First(); |
| | | //var CntrItemRels = db.Queryable<CntrItemRel>().Where(a => a.S_BS_NO == arrival_no).ToList(); |
| | | //出库回调入参 |
| | | var cbCenterBackDto = new CBcenterBackDto.Root |
| | | { |
| | | //库位信息 |
| | | var startinfo = db.Queryable<Location>().Where(it => it.S_CODE == start).First(); |
| | | //出库单详情 |
| | | var po = db.Queryable<TN_Outbound_Order>().Includes(s => s.Details).Where(a => a.S_NO == arrival_no).First(); |
| | | //var CntrItemRels = db.Queryable<CntrItemRel>().Where(a => a.S_BS_NO == arrival_no).ToList(); |
| | | //出库回调入参 |
| | | var cbCenterBackDto = new CBcenterBackDto.Root |
| | | ROOT = new CBcenterBackDto.ROOT |
| | | { |
| | | ROOT = new CBcenterBackDto.ROOT |
| | | HEAD = new List<CBcenterBackDto.HEADItem> |
| | | { |
| | | HEAD = new List<CBcenterBackDto.HEADItem> |
| | | { |
| | | |
| | | } |
| | | } |
| | | }; |
| | | //回参物料信息 |
| | | List<CBcenterBackDto.HEADItem> iTEMs = new List<CBcenterBackDto.HEADItem>(); |
| | | List<OutboundRecord> records = new List<OutboundRecord>(); |
| | | 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"); |
| | | }; |
| | | //回参物料信息 |
| | | List<CBcenterBackDto.HEADItem> iTEMs = new List<CBcenterBackDto.HEADItem>(); |
| | | List<OutboundRecord> records = new List<OutboundRecord>(); |
| | | //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_ERP_WH_CODE; |
| | | 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<CBcenterBackDto.ITEM> listitem1 = new List<CBcenterBackDto.ITEM>(); |
| | | //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<OutboundRecord>(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}"); |
| | | |
| | | |
| | | #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 version=\"1.0\" encoding=\"utf-8\" ?>" + 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<JObject>(JsonConvert.SerializeXmlNode(xmlDoc)); |
| | | EnsureArrayFormat(jsonObject, "ITEM", ""); |
| | | var data = JsonConvert.DeserializeObject<CbbReturnWcBcak.Root>(jsonObject.ToString()); |
| | | |
| | | //添加凭证记录表 |
| | | result.resultMsg = data.ROOT.ITEM[0].MSGDESP; |
| | | result.resultCode = data.ROOT.ITEM[0].MSGCODE; |
| | | if (data.ROOT.ITEM[0].MSGCODE == 0) |
| | | { |
| | | |
| | | 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<CBcenterBackDto.ITEM> listitem1 = new List<CBcenterBackDto.ITEM>(); |
| | | //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<OutboundRecord>(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 version=\"1.0\" encoding=\"utf-8\" ?>" + 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<JObject>(JsonConvert.SerializeXmlNode(xmlDoc)); |
| | | var data = JsonConvert.DeserializeObject<ReturnWcBcak.Root>(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 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?[0].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>(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>(materialVoucher).ExecuteCommand(); |
| | | materialVoucher.S_GZRQ = po.BUDAT; |
| | | materialVoucher.UNAME = po.UNAME; |
| | | db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand(); |
| | | } |
| | | #endregion |
| | | |
| | | //db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | //db.RollbackTran(); |
| | | LogHelper.Info("成本中心回调报错" + ex.Message); |
| | | Console.WriteLine(ex.Message); |
| | | #endregion |
| | | |
| | | throw; |
| | | } |
| | | return result; |
| | | //db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | //db.RollbackTran(); |
| | | LogHelper.Info("成本中心回调报错" + ex.Message); |
| | | Console.WriteLine(ex.Message); |
| | | |
| | | throw; |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | //} |
| | | /// <summary> |
| | |
| | | /// <param name="cntr_code"></param> |
| | | /// <param name="start"></param> |
| | | /// <returns></returns> |
| | | public static async Task<SimpleResult> jhwtlAddOutboundOrder(SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start) |
| | | public static async Task<SimpleResult> jhwtlAddOutboundOrder(string GZRQ,SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start) |
| | | { |
| | | //using (var db = new SqlHelper<object>().GetInstance()) |
| | | //{ |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | | var result = new SimpleResult(); |
| | | try |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | | var result = new SimpleResult(); |
| | | try |
| | | { |
| | | //库位信息 |
| | | var startinfo = db.Queryable<Location>().Where(it => it.S_CODE == start).First(); |
| | | //出库单详情 |
| | | var po = db.Queryable<TN_Outbound_Order>().Includes(s => s.Details).Where(a => a.S_NO == arrival_no).First(); |
| | | |
| | | var CntrItemRels = db.Queryable<CntrItemRel>().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) |
| | | { |
| | | //库位信息 |
| | | var startinfo = db.Queryable<Location>().Where(it => it.S_CODE == start).First(); |
| | | //出库单详情 |
| | | var po = db.Queryable<TN_Outbound_Order>().Includes(s => s.Details).Where(a => a.S_NO == arrival_no).First(); |
| | | PZZDRQ = DateTime.Parse(po.BLDAT.ToString()).ToString("yyyyMMdd"); |
| | | |
| | | var CntrItemRels = db.Queryable<CntrItemRel>().Where(a => a.S_BS_NO == arrival_no).ToList(); |
| | | //出库回调入参 |
| | | |
| | | DateTime dateTime; |
| | | DateTime dateTime1; |
| | | string GZRQ = ""; |
| | | string PZZDRQ = ""; |
| | | if (po.BUDAT != null) |
| | | } |
| | | JHWBackDto.Root myRoot = new JHWBackDto.Root |
| | | { |
| | | ROOT = new JHWBackDto.ROOT |
| | | { |
| | | 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 |
| | | { |
| | | 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<JHWBackDto.ITEM> |
| | | { |
| | | |
| | | } |
| | | }, |
| | | |
| | | } |
| | | }; |
| | | //回参物料信息 |
| | | List<JHWBackDto.ITEM> iTEMs = new List<JHWBackDto.ITEM>(); |
| | | 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<JHWBackDto.ITEM> |
| | | { |
| | | |
| | | } |
| | | }, |
| | | |
| | | } |
| | | }; |
| | | //回参物料信息 |
| | | List<JHWBackDto.ITEM> iTEMs = new List<JHWBackDto.ITEM>(); |
| | | 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_ERP_WH_CODE; |
| | | 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<MaterialVoucher>().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<OutboundRecord>(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 version=\"1.0\" encoding=\"utf-8\" ?>" + 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<JObject>(JsonConvert.SerializeXmlNode(xmlDoc)); |
| | | var data = JsonConvert.DeserializeObject<ReturnJHWBcak.Root>(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) |
| | | { |
| | | 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<MaterialVoucher>().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<OutboundRecord>(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 version=\"1.0\" encoding=\"utf-8\" ?>" + 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<JObject>(JsonConvert.SerializeXmlNode(xmlDoc)); |
| | | var data = JsonConvert.DeserializeObject<ReturnJHWBcak.Root>(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 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.S_GZRQ = po.BUDAT; |
| | | materialVoucher.UNAME = po.UNAME; |
| | | materialVoucher.F_QTY = item.qty; |
| | | materialVoucher.STATUS = 0; |
| | | db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand(); |
| | | } |
| | | db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand(); |
| | | } |
| | | #endregion |
| | | |
| | | //db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | //db.RollbackTran(); |
| | | LogHelper.Info("计划外退料回调报错" + ex.Message); |
| | | Console.WriteLine(ex.Message); |
| | | #endregion |
| | | |
| | | throw; |
| | | } |
| | | return result; |
| | | //db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | //db.RollbackTran(); |
| | | LogHelper.Info("计划外退料回调报错" + ex.Message); |
| | | Console.WriteLine(ex.Message); |
| | | |
| | | throw; |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | //} |
| | | /// <summary> |
| | |
| | | /// <param name="cntr_code"></param> |
| | | /// <param name="start"></param> |
| | | /// <returns></returns> |
| | | public static async Task<SimpleResult> CXAddOutboundOrder(SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start) |
| | | public static async Task<SimpleResult> CXAddOutboundOrder(string GZRQ,SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start) |
| | | { |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | | |
| | | var result = new SimpleResult(); |
| | | |
| | | var result = new SimpleResult(); |
| | | |
| | | |
| | | try |
| | | try |
| | | { |
| | | //库位信息 |
| | | //var startinfo = db.Queryable<Location>().Where(it => it.S_CODE == start).First(); |
| | | //出库单详情 |
| | | var po = db.Queryable<TN_Outbound_Order>().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<TN_Inbound_Order>().Includes(s => s.Details).Where(a => a.S_NO == po.S_BS_NO).First(); |
| | | //根据入库查看凭证编号信息 |
| | | //var poIPz = db.Queryable<MaterialVoucher>().Where(a => a.S_NO == poIn.S_NO).First(); |
| | | //出库回调入参 |
| | | CXCkBackDto.Root myRoot = new CXCkBackDto.Root |
| | | { |
| | | //库位信息 |
| | | var startinfo = db.Queryable<Location>().Where(it => it.S_CODE == start).First(); |
| | | //出库单详情 |
| | | var po = db.Queryable<TN_Outbound_Order>().Includes(s => s.Details).Where(a => a.S_NO == arrival_no).First(); |
| | | |
| | | string GZRQ = ""; |
| | | if (po.BUDAT != null) |
| | | ROOT = new CXCkBackDto.ROOT |
| | | { |
| | | GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd"); |
| | | } |
| | | |
| | | //来源冲销凭证对应的物料凭证信息 |
| | | //var poIn = db.Queryable<TN_Inbound_Order>().Includes(s => s.Details).Where(a => a.S_NO == po.S_BS_NO).First(); |
| | | //根据入库查看凭证编号信息 |
| | | //var poIPz = db.Queryable<MaterialVoucher>().Where(a => a.S_NO == poIn.S_NO).First(); |
| | | //出库回调入参 |
| | | CXCkBackDto.Root myRoot = new CXCkBackDto.Root |
| | | { |
| | | ROOT = new CXCkBackDto.ROOT |
| | | HEAD = new List<CXCkBackDto.HEAD> |
| | | { |
| | | HEAD = new List<CXCkBackDto.HEAD> |
| | | { |
| | | |
| | | //GZRQ = GZRQ, |
| | | //SRRQ = PZZDRQ, |
| | | //WLPZ = po.S_WLPZ, |
| | | //WLPZNF = po.S_WLPZNF, |
| | | //WLPZXM = MaterList[0].N_ROW_NO, |
| | | //GZRQ = GZRQ, |
| | | //SRRQ = PZZDRQ, |
| | | //WLPZ = po.S_WLPZ, |
| | | //WLPZNF = po.S_WLPZNF, |
| | | //WLPZXM = MaterList[0].N_ROW_NO, |
| | | |
| | | //GZRY = po.UNAME |
| | | } |
| | | //GZRY = po.UNAME |
| | | } |
| | | }; |
| | | List<CXCkBackDto.HEAD> listhead = new List<CXCkBackDto.HEAD>(); |
| | | //出库单详情 |
| | | var porecord = db.Queryable<MaterialVoucher>().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"); |
| | | } |
| | | }; |
| | | List<CXCkBackDto.HEAD> listhead = new List<CXCkBackDto.HEAD>(); |
| | | //出库单详情 |
| | | var porecord = db.Queryable<MaterialVoucher>().Where(a => a.S_NO == po.S_BS_NO && a.STATUS == 0).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.WLPZ = porecord.FirstOrDefault()?.S_WLPZBH; |
| | | hEAD.WLPZNF = porecord.FirstOrDefault()?.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 version=\"1.0\" encoding=\"utf-8\" ?>" + 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<JObject>(JsonConvert.SerializeXmlNode(xmlDoc)); |
| | | var data = JsonConvert.DeserializeObject<ReturnTYBcak.Root>(jsonObject.ToString()); |
| | | var resmeg = ""; |
| | | int rescode = 0; |
| | | //添加凭证记录表 |
| | | if (data!=null) |
| | | { |
| | | List<MaterialVoucher> materiallist = new List<MaterialVoucher>(); |
| | | 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<MaterialVoucher>(materiallist).ExecuteCommand(); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | result.resultMsg = resmeg; |
| | | result.resultCode = rescode; |
| | | #endregion |
| | | |
| | | //db.CommitTran(); |
| | | hEAD.GZRY = po.UNAME; |
| | | listhead.Add(hEAD); |
| | | } |
| | | catch (Exception ex) |
| | | 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 version=\"1.0\" encoding=\"utf-8\" ?>" + 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<JObject>(JsonConvert.SerializeXmlNode(xmlDoc)); |
| | | EnsureArrayFormat(jsonObject, "ITEM", ""); |
| | | var data = JsonConvert.DeserializeObject<ReturnTYBcak.Root>(jsonObject.ToString()); |
| | | var resmeg = ""; |
| | | int rescode = 0; |
| | | //添加凭证记录表 |
| | | if (data != null) |
| | | { |
| | | //db.RollbackTran(); |
| | | LogHelper.Info("通用冲销回调报错" + ex.Message); |
| | | Console.WriteLine(ex.Message); |
| | | List<MaterialVoucher> materiallist = new List<MaterialVoucher>(); |
| | | foreach (var item in data.ROOT.ITEM) |
| | | { |
| | | if (item.MSGCODE == 0) |
| | | { |
| | | |
| | | throw; |
| | | var onr = MaterList.Where(s => s.N_ROW_NO == item.WLPZHXM).FirstOrDefault(); |
| | | |
| | | 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.S_GZRQ = po.BUDAT; |
| | | materialVoucher.UNAME = po.UNAME; |
| | | materialVoucher.S_AREA_CODE = po.S_AREA_CODE; |
| | | |
| | | materialVoucher.F_QTY = onr == null ? 0 : onr.qty; |
| | | //materialVoucher.STATUS = 0; |
| | | resmeg += item?.MSGDESP; |
| | | materiallist.Add(materialVoucher); |
| | | |
| | | |
| | | } |
| | | else |
| | | { |
| | | rescode = 1; |
| | | resmeg += item?.MSGDESP; |
| | | } |
| | | |
| | | |
| | | } |
| | | if (materiallist.Count() > 0) |
| | | { |
| | | |
| | | db.Insertable<MaterialVoucher>(materiallist).ExecuteCommand(); |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | 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; |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 普通回调接口 |
| | |
| | | /// <param name="cntr_code"></param> |
| | | /// <param name="start"></param> |
| | | /// <returns></returns> |
| | | public static async Task<SimpleResult> AddOutboundOrder(SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start) |
| | | public static async Task<SimpleResult> AddOutboundOrder(string GZRQ,SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start) |
| | | { |
| | | //using (var db = new SqlHelper<object>().GetInstance()) |
| | | //{ |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | | var result = new SimpleResult(); |
| | | |
| | | try |
| | | { |
| | | //库位信息 |
| | | var startinfo = db.Queryable<Location>().Where(it => it.S_CODE == start).First(); |
| | | //出库单详情 |
| | | var po = db.Queryable<TN_Outbound_Order>().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"); |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | | var result = new SimpleResult(); |
| | | |
| | | } |
| | | try |
| | | { |
| | | //库位信息 |
| | | var startinfo = db.Queryable<Location>().Where(it => it.S_CODE == start).First(); |
| | | //出库单详情 |
| | | var po = db.Queryable<TN_Outbound_Order>().Includes(s => s.Details).Where(a => a.S_NO == arrival_no).First(); |
| | | //string GZRQ = ""; |
| | | string PZZDRQ = ""; |
| | | //if (po.Details[0].S_CJRQ != null) |
| | | //{ |
| | | // GZRQ = DateTime.Parse(po.Details[0].S_CJRQ.ToString()).ToString("yyyyMMdd"); |
| | | //} |
| | | //if (po.Details[0].S_XQRQ != null) |
| | | //{ |
| | | // PZZDRQ = DateTime.Parse(po.Details[0].S_XQRQ.ToString()).ToString("yyyyMMdd"); |
| | | |
| | | //} |
| | | CkBcakDto.Root myRoot = new CkBcakDto.Root |
| | | { |
| | | ROOT = new CkBcakDto.ROOT |
| | |
| | | WLPZ = new CkBcakDto.WLPZ |
| | | { |
| | | KEY = po.S_NO, |
| | | ZYWLX = "业务类型值", |
| | | PZRQ = PZZDRQ, |
| | | ZYWLX = "2", |
| | | PZRQ = DateTime.Now.ToString("yyyyMMdd"), |
| | | GZRQ = GZRQ, // 假设日期格式为"年-月-日" |
| | | GZRY = po.UNAME, |
| | | GZRY = po.S_CREATOR_NAME, |
| | | ITEM = new List<CkBcakDto.ITEM> |
| | | { |
| | | } |
| | |
| | | |
| | | //回参物料信息 |
| | | List<CkBcakDto.ITEM> iTEMs = new List<CkBcakDto.ITEM>(); |
| | | foreach (var item in MaterList) |
| | | { |
| | | |
| | | db.BeginTran(); |
| | | |
| | | foreach (var item in MaterList) |
| | | { |
| | | |
| | | 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; |
| | | db.BeginTran(); |
| | | |
| | | CkBcakDto.ITEM1 listitem1 = new CkBcakDto.ITEM1(); |
| | | //var CntrItemRels = db.Queryable<CntrItemRel>().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); |
| | | } |
| | | |
| | | 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_ERP_WH_CODE; |
| | | |
| | | CkBcakDto.ITEM1 listitem1 = new CkBcakDto.ITEM1(); |
| | | //var CntrItemRels = db.Queryable<CntrItemRel>().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 == null ? null : 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; |
| | | if (myRoot.ROOT.WLPZ.ITEM.Where(s => !string.IsNullOrEmpty(s.SCDD) && !string.IsNullOrEmpty(s.YLBH) && !string.IsNullOrEmpty(s.YLXMH)).Count() == 0) |
| | | { |
| | | myRoot.ROOT.WLPZ.ZYWLX = "2"; |
| | | } |
| | | //db.Insertable<OutboundRecord>(records).ExecuteCommand(); |
| | | #region wms-sap回调 |
| | | //类转json |
| | | var json = JsonConvert.SerializeObject(myRoot.ROOT); |
| | | //json转xml |
| | | string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml; |
| | | //json转xml |
| | | string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml; |
| | | |
| | | LogHelper.Info($"出库xml数据{xml}"); |
| | | //// 创建 StringContent 并指定媒体类型为 "text/xml" |
| | |
| | | LogHelper.Info("出库SAP返回结果: " + responses.Output); |
| | | |
| | | XmlDocument xmlDoc = new XmlDocument(); |
| | | xmlDoc.LoadXml(responses.Output.ToString()); |
| | | JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc)); |
| | | var data = JsonConvert.DeserializeObject<ReturnJHWBcak.Root>(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>(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>(materialVoucher).ExecuteCommand(); |
| | | #endregion |
| | | |
| | | //db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | xmlDoc.LoadXml(responses.Output.ToString()); |
| | | JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc)); |
| | | var data = JsonConvert.DeserializeObject<ReturnJHWBcak.Root>(jsonObject.ToString()); |
| | | //添加凭证记录表 |
| | | result.resultMsg = data.ROOT.ITEM.MSGDESP; |
| | | result.resultCode = data.ROOT.ITEM.MSGCODE; |
| | | if (data.ROOT.ITEM.MSGCODE == 0) |
| | | { |
| | | //db.RollbackTran(); |
| | | LogHelper.Info("普通出库回调" + |
| | | "" + ex.Message); |
| | | Console.WriteLine(ex.Message); |
| | | |
| | | throw; |
| | | 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.S_GZRQ = po.BUDAT; |
| | | materialVoucher.UNAME = po.UNAME; |
| | | materialVoucher.STATUS = 0; |
| | | db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand(); |
| | | } |
| | | } |
| | | return result; |
| | | ////添加凭证记录表 |
| | | //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>(materialVoucher).ExecuteCommand(); |
| | | #endregion |
| | | |
| | | //db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | //db.RollbackTran(); |
| | | LogHelper.Info("普通出库回调" + |
| | | "" + ex.Message); |
| | | Console.WriteLine(ex.Message); |
| | | |
| | | throw; |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | //} |
| | | |
| | |
| | | /// <param name="cntr_code"></param> |
| | | /// <returns></returns> |
| | | [ApiExplorerSettings(IgnoreApi = true)] |
| | | public static SimpleResult AddInboundOrder(List<Mater> MaterList, string cntr_code) |
| | | public static SimpleResult AddInboundOrder(List<Mater> MaterList, string cntr_code, string S_CNTR_TYPE) |
| | | { |
| | | var result = new SimpleResult(); |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | |
| | | |
| | | try |
| | | { |
| | | if (MaterList.Count()<1) |
| | | if (MaterList.Count() < 1) |
| | | { |
| | | throw new Exception("累计码盘数量物料数据为空"); |
| | | } |
| | |
| | | #endregion |
| | | if (cntr != null) |
| | | { |
| | | #region 1.查看是否有相同物料批次的信息,如果有要累加,不同批次的可以分开 |
| | | var cir = db.Queryable<CntrItemRel>().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) |
| | | #region 客户指定容器表 |
| | | var cir2 = db.Queryable<CGRels>().Where(a => a.S_CNTR_CODE == cntr.S_CODE && a.S_ITEM_CODE == item.item_code ).First(); |
| | | |
| | | if (cir2 != null) |
| | | { |
| | | cir.F_QTY += item.qty; |
| | | db.Updateable(cir).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); |
| | | cir2.S_CNTR_TYPE = S_CNTR_TYPE; |
| | | db.Updateable(cir2).UpdateColumns(it => new { it.S_CNTR_TYPE }).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 }; |
| | | cir2 = new CGRels { S_CNTR_TYPE = S_CNTR_TYPE, S_CNTR_CODE = cntr.S_CODE.Trim(), N_BS_ROW_NO = item.N_ROW_NO, S_ITEM_CODE = item.item_code }; |
| | | db.Insertable<CGRels>(cir2).ExecuteCommand(); |
| | | } |
| | | #endregion |
| | | |
| | | |
| | | #region 1.查看是否有相同物料批次的信息,如果有要累加,不同批次的可以分开 |
| | | var cir = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntr.S_CODE && a.S_ITEM_CODE == item.item_code && 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; |
| | | cir.S_CNTR_TYPE = S_CNTR_TYPE; |
| | | db.Updateable(cir).UpdateColumns(it => new { it.F_QTY, it.S_CNTR_TYPE }).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | //2.插入新的容器物料信息(容器号不变S_SERIAL_NO = item.S_SERIAL_NO,) |
| | | cir = new CntrItemRel { S_CNTR_TYPE = S_CNTR_TYPE, S_CNTR_CODE = cntr.S_CODE.Trim(), S_UOM = info.S_UOM, 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<CntrItemRel>(cir).ExecuteCommand(); |
| | | } |
| | | var count = db.Queryable<CntrItemRel>().Count(a => a.S_CNTR_CODE == cntr.S_CODE); |
| | |
| | | return result; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 创建领料单 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | public static LLDReturnRoot.Root Out_Order_In1s(CKDdto.Root model) |
| | | { |
| | | LLDReturnRoot.Root finalRoot = new LLDReturnRoot.Root |
| | | { |
| | | ROOT = new LLDReturnRoot.ROOT |
| | | { |
| | | ITEM = new List<LLDReturnRoot.ITEM> |
| | | { |
| | | |
| | | } |
| | | } |
| | | }; |
| | | List<LLDReturnRoot.ITEM> iTEMs = new List<LLDReturnRoot.ITEM>(); |
| | | var result = new WeiLiResult(); |
| | | using (var db = new SqlHelper<object>().GetInstance()) |
| | | { |
| | | //创建领料单 |
| | | try |
| | | { |
| | | List<WcReturnRoot.ITEM> wcReturnRoots = new List<WcReturnRoot.ITEM>(); |
| | | //删除的集合 |
| | | List<TN_Ll_detail> tN_Ll_Details = new List<TN_Ll_detail>(); |
| | | List<TN_Ll_detail> iuptN_Ll_Details = new List<TN_Ll_detail>(); |
| | | //db.BeginTran(); |
| | | foreach (var itemscddll in model.ROOT.SCDDLL) |
| | | { |
| | | |
| | | LLDReturnRoot.ITEM lLDReturnRoots = new LLDReturnRoot.ITEM(); |
| | | |
| | | #region |
| | | var po = db.Queryable<TN_Ll_Order>() |
| | | .Includes(a => a.Details) |
| | | .Where(s => s.S_NO == itemscddll.LLDH) |
| | | .First(); |
| | | |
| | | #endregion |
| | | 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<TN_Ll_detail>(); |
| | | if (itemscddll.ITEM.Count() > 0) |
| | | { |
| | | Stopwatch sw = new Stopwatch(); |
| | | sw.Start(); |
| | | foreach (var a in itemscddll.ITEM) |
| | | { |
| | | po.Details.Add(new TN_Ll_detail |
| | | { |
| | | S_DO_NO = itemscddll.LLDH, |
| | | S_AREA_CODE = "HJQ", |
| | | N_ROW_NO = "", |
| | | S_ITEM_CODE = a.ZJBM, |
| | | S_ITEM_NAME = "", |
| | | F_QTY = a.XQSL, |
| | | S_ZJBM = a.ZJBM, |
| | | S_YLBH = a.YLBH, |
| | | S_YLXMH = a.YLHXM, |
| | | S_BATCH_NO = "", |
| | | S_ERP_WH_CODE = a.KCDD, |
| | | S_ZJWLTH = a.ZJWLTH, |
| | | S_ZJWLMS = a.ZJWLMS, |
| | | S_ZHFHBS = a.ZHFHBS, |
| | | S_CJRQ = a.CJRQ, |
| | | S_LLDSCBS = a.LLDSCBS, |
| | | S_SCGLY = a.SCGLY, |
| | | S_GXH = a.GXH, |
| | | S_XQRQ = a.XQRQ, |
| | | N_ITEM_STATE = 1 |
| | | }); |
| | | } |
| | | |
| | | |
| | | var result1 = db.Insertable<TN_Ll_Order>(po).ExecuteCommand() > 0; |
| | | if (po.Details.Count() > 0) |
| | | { |
| | | using (var bulkCopy = new SqlBulkCopy(util.Settings.SqlServer)) |
| | | { |
| | | bulkCopy.DestinationTableName = "TN_Picking_Detail"; |
| | | bulkCopy.BatchSize = 500; |
| | | var dataTable = new DataTable(); |
| | | dataTable = po.Details.ToDataTable(); |
| | | // 添加列映射(确保名称匹配) |
| | | foreach (DataColumn col in dataTable.Columns) |
| | | { |
| | | bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName); |
| | | } |
| | | bulkCopy.WriteToServer(po.Details.ToDataTable()); |
| | | } |
| | | } |
| | | sw.Stop(); |
| | | long elapsedMilliseconds = sw.ElapsedMilliseconds; |
| | | LogHelper.Info($"生产订单领料单无数据{po.Details.Count()}(生成领料单)添加数据返回时长:" + elapsedMilliseconds); |
| | | } |
| | | } |
| | | } |
| | | |
| | | //db.CommitTran(); |
| | | |
| | | return finalRoot; |
| | | |
| | | } |
| | | 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(); |
| | | |
| | | return finalRoot; |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 创建领料单 |
| | | /// </summary> |
| | |
| | | } |
| | | }; |
| | | List<LLDReturnRoot.ITEM> iTEMs = new List<LLDReturnRoot.ITEM>(); |
| | | |
| | | var result = new WeiLiResult(); |
| | | |
| | | using (var db = new SqlHelper<object>().GetInstance()) |
| | | { |
| | | |
| | | //创建领料单 |
| | | try |
| | | { |
| | | Stopwatch s1w = new Stopwatch(); |
| | | s1w.Start(); |
| | | List<WcReturnRoot.ITEM> wcReturnRoots = new List<WcReturnRoot.ITEM>(); |
| | | |
| | | //删除的集合 |
| | | List<TN_Ll_detail> tN_Ll_Details = new List<TN_Ll_detail>(); |
| | | List<TN_Ll_detail> iuptN_Ll_Details = new List<TN_Ll_detail>(); |
| | | |
| | | db.BeginTran(); |
| | | foreach (var itemscddll in model.ROOT.SCDDLL) |
| | | { |
| | | var wlbmList = itemscddll.ITEM.Select(x => x.ZJBM).Distinct().ToList(); |
| | | var itemlist = db.Queryable<TN_Material>() |
| | | .Where(it => wlbmList.Contains(it.S_ITEM_CODE)) // 使用 IN 查询 |
| | | .ToList(); |
| | | LLDReturnRoot.ITEM lLDReturnRoots = new LLDReturnRoot.ITEM(); |
| | | |
| | | db.BeginTran(); |
| | | |
| | | var materialCache = new Dictionary<string, TN_Material>(); |
| | | #region 创建领料单 |
| | | var po = db.Queryable<TN_Ll_Order>().Includes(a => a.Details).Where(s => s.S_NO == itemscddll.LLDH).First(); |
| | | var po = db.Queryable<TN_Ll_Order>() |
| | | .Includes(a => a.Details) |
| | | .Where(s => s.S_NO == itemscddll.LLDH) |
| | | .First(); |
| | | |
| | | #endregion |
| | | //var po = WMSHelper.GetOutboundOrder(model.ROOT.SCDDLL.LLDH); |
| | |
| | | { |
| | | foreach (var a in itemscddll.ITEM) |
| | | { |
| | | var item = db.Queryable<TN_Material>().Where(it => it.S_ITEM_CODE == a.WLBM).First(); |
| | | var item = itemlist.Where(it => it.S_ITEM_CODE == a.ZJBM).FirstOrDefault(); |
| | | 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}物料主数据不存在该物料"; |
| | | lLDReturnRoots.MSGDESP = $"物料{a.ZJBM}物料主数据不存在该物料"; |
| | | iTEMs.Add(lLDReturnRoots); |
| | | |
| | | continue; |
| | |
| | | S_DO_NO = itemscddll.LLDH, |
| | | S_AREA_CODE = "HJQ", |
| | | N_ROW_NO = "", |
| | | S_ITEM_CODE = a.WLBM, |
| | | S_ITEM_NAME = item.S_ITEM_NAME, |
| | | S_ITEM_CODE = a.ZJBM, |
| | | S_ITEM_NAME = item?.S_ITEM_NAME, |
| | | F_QTY = a.XQSL, |
| | | S_ZJBM = a.ZJBM, |
| | | S_YLBH = a.YLBH, |
| | | S_YLXMH = a.YLHXM, |
| | | S_BATCH_NO = "", |
| | | S_ERP_WH_CODE = a.KCDD, |
| | | |
| | | S_ZJWLTH = a.ZJWLTH, |
| | | S_ZJWLMS = a.ZJWLMS, |
| | | S_ZHFHBS = a.ZHFHBS, |
| | | S_CJRQ = a.CJRQ, |
| | | S_LLDSCBS = a.LLDSCBS, |
| | | S_SCGLY = a.SCGLY, |
| | | S_GXH = a.GXH, |
| | | S_XQRQ = a.XQRQ, |
| | | N_ITEM_STATE = 1 |
| | | }); |
| | | |
| | | } |
| | | |
| | | var result1 = db.Insertable<TN_Ll_Order>(po).ExecuteCommand() > 0; |
| | | db.Insertable<TN_Ll_detail>(po.Details).ExecuteCommand(); |
| | | Stopwatch sw = new Stopwatch(); |
| | | sw.Start(); |
| | | |
| | | if (po.Details.Count() > 0) |
| | | { |
| | | LLDReturnRoot.ITEM lLDReturnRoot1 = new LLDReturnRoot.ITEM(); |
| | | lLDReturnRoot1.GC = itemscddll.GC; |
| | | lLDReturnRoot1.LLDH = itemscddll.LLDH; |
| | | lLDReturnRoot1.MSGCODE = 0; |
| | | lLDReturnRoot1.MSGDESP = $"成功"; |
| | | iTEMs.Add(lLDReturnRoot1); |
| | | var result1 = db.Insertable<TN_Ll_Order>(po).ExecuteCommand() > 0; |
| | | //db.Insertable<TN_Ll_detail>(po.Details).ExecuteCommand(); |
| | | using (var bulkCopy = new SqlBulkCopy(util.Settings.SqlServer)) |
| | | { |
| | | bulkCopy.DestinationTableName = "TN_Picking_Detail"; |
| | | bulkCopy.BatchSize = 500; |
| | | var dataTable = new DataTable(); |
| | | dataTable = po.Details.ToDataTable(); |
| | | // 添加列映射(确保名称匹配) |
| | | foreach (DataColumn col in dataTable.Columns) |
| | | { |
| | | bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName); |
| | | } |
| | | bulkCopy.WriteToServer(po.Details.ToDataTable()); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LLDReturnRoot.ITEM lLDReturnRoot1 = new LLDReturnRoot.ITEM(); |
| | | lLDReturnRoot1.GC = itemscddll.GC; |
| | | lLDReturnRoot1.LLDH = itemscddll.LLDH; |
| | | lLDReturnRoot1.MSGCODE = 0; |
| | | lLDReturnRoot1.MSGDESP = $"成功,无数据添加"; |
| | | iTEMs.Add(lLDReturnRoot1); |
| | | } |
| | | sw.Stop(); |
| | | long elapsedMilliseconds = sw.ElapsedMilliseconds; |
| | | LogHelper.Info($"生产订单领料单无数据{po.Details.Count()}(生成领料单)添加数据返回时长:" + elapsedMilliseconds); |
| | | } |
| | | } |
| | | else |
| | |
| | | { |
| | | 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}物料不允许删除"; |
| | | lLDReturnRoots.MSGDESP = $"执行中领料单,物料{a.ZJBM}物料不允许删除"; |
| | | iTEMs.Add(lLDReturnRoots); |
| | | continue; |
| | | } |
| | | var po1 = po.Details.Where(s => a.WLBM == s.S_ITEM_CODE).ToList(); |
| | | var po1 = po.Details.Where(s => a.ZJBM == s.S_ITEM_CODE).ToList(); |
| | | if (po1.Count() == 0) //无则新增物料明细 |
| | | { |
| | | var item = db.Queryable<TN_Material>().Where(it => it.S_ITEM_CODE == a.WLBM).First(); |
| | | var item = itemlist.Where(it => it.S_ITEM_CODE == a.ZJBM).FirstOrDefault(); |
| | | 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}物料主数据不存在该物料"; |
| | | lLDReturnRoots.MSGDESP = $"物料{a.ZJBM}物料主数据不存在该物料"; |
| | | iTEMs.Add(lLDReturnRoots); |
| | | continue; |
| | | } |
| | |
| | | S_DO_NO = itemscddll.LLDH, |
| | | S_AREA_CODE = "HJQ", |
| | | N_ROW_NO = "", |
| | | S_ITEM_CODE = a.WLBM, |
| | | S_ITEM_CODE = a.ZJBM, |
| | | S_ITEM_NAME = item.S_ITEM_NAME, |
| | | F_QTY = a.XQSL, |
| | | S_ZJBM = a.ZJBM, |
| | | S_YLBH = a.YLBH, |
| | | S_YLXMH = a.YLHXM, |
| | | S_ZJWLTH = a.ZJWLTH, |
| | | S_ZJWLMS = a.ZJWLMS, |
| | | S_ZHFHBS = a.ZHFHBS, |
| | | S_CJRQ = a.CJRQ, |
| | | S_LLDSCBS = a.LLDSCBS, |
| | | S_GXH = a.GXH, |
| | | S_XQRQ = a.XQRQ, |
| | | S_SCGLY = a.SCGLY, |
| | | S_BATCH_NO = "无", |
| | | S_ERP_WH_CODE = a.KCDD, |
| | | N_ITEM_STATE = 1 |
| | |
| | | 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(); |
| | | iuptN_Ll_Details.Add(po1.First()); |
| | | //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}"; |
| | | lLDReturnRoots.MSGDESP = $"更新失败,更新数量必须大于当前物料数量{a.ZJBM}"; |
| | | iTEMs.Add(lLDReturnRoots); |
| | | continue; |
| | | } |
| | |
| | | { |
| | | if (a.LLDSCBS == "Y")//如果是删除标识则删除当前所属出库单明细 不是删除标记 则进行增改判断 |
| | | { |
| | | var po1 = po.Details.Where(s => a.WLBM == s.S_ITEM_CODE).ToList(); |
| | | if (po1.Count() > 0) //无则新增物料明细 |
| | | var po1 = po.Details.Where(s => a.ZJBM == s.S_ITEM_CODE).FirstOrDefault(); |
| | | if (po1 != null) //无则新增物料明细 |
| | | { |
| | | db.Deleteable<TN_Ll_detail>().Where(it => it.S_ITEM_CODE == a.WLBM && it.S_DO_NO == po1.First().S_DO_NO).ExecuteCommand(); |
| | | tN_Ll_Details.Add(po1); |
| | | // db.Deleteable<TN_Ll_detail>().Where(it => it.S_ITEM_CODE == a.ZJBM && it.S_DO_NO == po1.First().S_DO_NO).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | //result.code = 1; |
| | | //result.msg = $"物料{a.WLBM}物料数据不存在 无法删除"; |
| | | //throw new Exception($"物料{a.WLBM}物料数据不存在 无法删除"); |
| | | //result.msg = $"物料{a.ZJBM}物料数据不存在 无法删除"; |
| | | //throw new Exception($"物料{a.ZJBM}物料数据不存在 无法删除"); |
| | | lLDReturnRoots.GC = itemscddll.GC; |
| | | lLDReturnRoots.LLDH = itemscddll.LLDH; |
| | | lLDReturnRoots.MSGCODE = 1; |
| | | lLDReturnRoots.MSGDESP = $"物料{a.WLBM}物料数据不存在 无法删除"; |
| | | lLDReturnRoots.MSGDESP = $"删除的物料{a.ZJBM}物料数据不存在 无法删除"; |
| | | iTEMs.Add(lLDReturnRoots); |
| | | continue; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | var po1 = po.Details.Where(s => a.WLBM == s.S_ITEM_CODE).ToList(); |
| | | var po1 = po.Details.Where(s => a.ZJBM == s.S_ITEM_CODE).ToList(); |
| | | if (po1.Count() == 0) //无则新增物料明细 |
| | | { |
| | | var item = db.Queryable<TN_Material>().Where(it => it.S_ITEM_CODE == a.WLBM).First(); |
| | | var item = itemlist.Where(it => it.S_ITEM_CODE == a.ZJBM).FirstOrDefault(); |
| | | if (item == null) |
| | | { |
| | | //result.code = 1; |
| | | //result.msg = $"物料{a.WLBM}物料主数据不存在该物料"; |
| | | //throw new Exception($"物料{a.WLBM}物料主数据不存在该物料"); |
| | | //result.msg = $"物料{a.ZJBM}物料主数据不存在该物料"; |
| | | //throw new Exception($"物料{a.ZJBM}物料主数据不存在该物料"); |
| | | lLDReturnRoots.GC = itemscddll.GC; |
| | | lLDReturnRoots.LLDH = itemscddll.LLDH; |
| | | lLDReturnRoots.MSGCODE = 1; |
| | | lLDReturnRoots.MSGDESP = $"物料{a.WLBM}物料主数据不存在该物料"; |
| | | lLDReturnRoots.MSGDESP = $"物料{a.ZJBM}物料主数据不存在该物料"; |
| | | iTEMs.Add(lLDReturnRoots); |
| | | continue; |
| | | } |
| | |
| | | S_DO_NO = itemscddll.LLDH, |
| | | S_AREA_CODE = "HJQ", |
| | | N_ROW_NO = "", |
| | | S_ITEM_CODE = a.WLBM, |
| | | S_ITEM_CODE = a.ZJBM, |
| | | S_ITEM_NAME = item.S_ITEM_NAME, |
| | | F_QTY = a.XQSL, |
| | | S_ZJBM = a.ZJBM, |
| | | S_YLBH = a.YLBH, |
| | | S_YLXMH = a.YLHXM, |
| | | S_ZJWLTH = a.ZJWLTH, |
| | | S_ZJWLMS = a.ZJWLMS, |
| | | S_ZHFHBS = a.ZHFHBS, |
| | | S_CJRQ = a.CJRQ, |
| | | S_LLDSCBS = a.LLDSCBS, |
| | | S_SCGLY = a.SCGLY, |
| | | S_GXH = a.GXH, |
| | | S_XQRQ = a.XQRQ, |
| | | S_BATCH_NO = "无", |
| | | S_ERP_WH_CODE = a.KCDD, |
| | | N_ITEM_STATE = 1 |
| | |
| | | else |
| | | {//更新数量 未执行时 直接更新数量 |
| | | po1.First().F_QTY = a.XQSL; |
| | | db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); |
| | | iuptN_Ll_Details.Add(po1.First()); |
| | | //db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); |
| | | } |
| | | } |
| | | } |
| | | ; |
| | | if (tN_Ll_Details.Count() > 0) |
| | | { |
| | | db.Deleteable<TN_Ll_detail>(tN_Ll_Details).ExecuteCommand(); |
| | | } |
| | | if (iuptN_Ll_Details.Count() > 0) |
| | | { |
| | | db.Updateable(iuptN_Ll_Details).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); |
| | | } |
| | | } |
| | | Stopwatch sw1 = new Stopwatch(); |
| | | sw1.Start(); |
| | | //添加数据 |
| | | if (listtn.Count() > 0) |
| | | { |
| | | LLDReturnRoot.ITEM lLDReturnRoot1 = new LLDReturnRoot.ITEM(); |
| | | lLDReturnRoot1.GC = itemscddll.GC; |
| | | lLDReturnRoot1.LLDH = itemscddll.LLDH; |
| | | lLDReturnRoot1.MSGCODE = 0; |
| | | lLDReturnRoot1.MSGDESP = $"成功"; |
| | | iTEMs.Add(lLDReturnRoot1); |
| | | db.Insertable<TN_Ll_detail>(listtn).ExecuteCommand(); |
| | | |
| | | } |
| | | else |
| | | { |
| | | LLDReturnRoot.ITEM lLDReturnRoot1 = new LLDReturnRoot.ITEM(); |
| | | lLDReturnRoot1.GC = itemscddll.GC; |
| | | lLDReturnRoot1.LLDH = itemscddll.LLDH; |
| | | lLDReturnRoot1.MSGCODE = 0; |
| | | lLDReturnRoot1.MSGDESP = $"成功,无数据添加"; |
| | | iTEMs.Add(lLDReturnRoot1); |
| | | } |
| | | |
| | | sw1.Stop(); |
| | | long elapsedMilliseconds2 = sw1.ElapsedMilliseconds; |
| | | LogHelper.Info("生产订单领料单有数据(生成领料单)添加数据返回时长:" + elapsedMilliseconds2); |
| | | } |
| | | db.CommitTran(); |
| | | |
| | | } |
| | | |
| | | db.CommitTran(); |
| | | |
| | | finalRoot.ROOT.ITEM = iTEMs; |
| | | |
| | | |
| | | s1w.Stop(); |
| | | long elapsedMillisecond1s = s1w.ElapsedMilliseconds; |
| | | LogHelper.Info("生产订单finalRoot.ROOT.ITEM" + elapsedMillisecond1s); |
| | | |
| | | |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | 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; |
| | | } |
| | | return finalRoot; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | internal static WeiLiResult Out_Order_Inss(string S_NO) |
| | | internal static WeiLiResult Out_Order_Inss(string S_NO,int N_PRIORITY) |
| | | { |
| | | var result = new WeiLiResult(); |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | | using (var db = new SqlHelper<object>().GetInstance()) |
| | | { |
| | | |
| | | //创建领料单 |
| | | //mobox创建出库单 |
| | | try |
| | | { |
| | | db.BeginTran(); |
| | | |
| | | #region 创建领料单 |
| | | #region mobox创建出库单 |
| | | var po = db.Queryable<TN_Ll_Order>().Includes(a => a.Details).Where(s => s.S_NO == S_NO).First(); |
| | | |
| | | #endregion |
| | |
| | | else |
| | | { |
| | | //var az = db.Queryable<AZInventory>().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 }; |
| | | |
| | | var po1 = new TN_Outbound_Order { S_NO = WMSHelper.GenerateShippNo(), N_PRIORITY=N_PRIORITY, 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 }; |
| | | List<TN_Ll_detail> tN_Ll_Details = new List<TN_Ll_detail>(); |
| | | po1.Details = new List<TN_Outbound_Detail>(); |
| | | var list = po.Details.Where(s => s.F_QTY > s.F_ACC_D_QTY&&s.S_ERP_WH_CODE=="4004").Select(s => s.S_ITEM_CODE).Distinct().ToArray(); |
| | | var itemfirs = db.Queryable<CntrItemRel>().Where(s => list.Contains(s.S_ITEM_CODE)).ToList() ; |
| | | var Sitemlist = itemfirs.Select(s => s.S_ITEM_CODE).ToArray().Select(x => x.Trim()).ToArray(); |
| | | |
| | | |
| | | |
| | | #region list集合数量 |
| | | var extractedArrays = itemfirs.Select(s => new CustomItem |
| | | { |
| | | SITEMCODE = s.S_ITEM_CODE?.Trim() ?? string.Empty, |
| | | FQTY = s.F_QTY, |
| | | FALLOCQTY = s.F_ALLOC_QTY |
| | | }).ToList(); |
| | | |
| | | var extractedArray = extractedArrays |
| | | .GroupBy(x => x.SITEMCODE) |
| | | .Select(g => new CustomItem |
| | | { |
| | | SITEMCODE = g.Key, |
| | | FQTY = g.Sum(x => x.FQTY), |
| | | FALLOCQTY = g.Sum(x => x.FALLOCQTY) |
| | | }) |
| | | .ToList(); |
| | | |
| | | var cklist= db.Queryable<TN_Outbound_Order>().Includes(s => s.Details).Where(a => a.N_B_STATE==0).ToList(); |
| | | foreach (var ckdetail in cklist) |
| | | { |
| | | foreach (var item in itemfirs) |
| | | { |
| | | var itemfi = ckdetail.Details.Where(s => s.S_ITEM_CODE == item.S_ITEM_CODE).FirstOrDefault(); |
| | | if (itemfi!=null) |
| | | { |
| | | var extractedArrayone = extractedArray.Where(s => s.SITEMCODE == item.S_ITEM_CODE).FirstOrDefault(); |
| | | extractedArrayone.FQTY = (float)(extractedArrayone.FQTY - itemfi.F_QTY); |
| | | } |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | po.Details = po.Details.Where(s => Sitemlist.Contains(s.S_ITEM_CODE)).ToList(); |
| | | 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(); |
| | | var ones = extractedArray.Where(s => s.SITEMCODE == a.S_ITEM_CODE).FirstOrDefault(); |
| | | ///库存数量 |
| | | ones.FQTY = ones.FQTY - ones.FALLOCQTY; |
| | | ///出库数量 |
| | | double shul = a.F_QTY - a.F_ACC_D_QTY; |
| | | if (ones.FQTY !=0) { |
| | | if (ones.FQTY - shul>=0) |
| | | { |
| | | ones.FQTY = (float)(ones.FQTY - shul); |
| | | } |
| | | else |
| | | { |
| | | shul = ones.FQTY; |
| | | ones.FQTY = 0; |
| | | } |
| | | 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 = shul, |
| | | S_BATCH_NO = a.S_BATCH_NO, |
| | | S_SERIAL_NO = a.S_SERIAL_NO, |
| | | S_CGPZH = a.S_CGPZH, |
| | | S_ZJBM = a.S_ZJBM, |
| | | S_YLBH = a.S_YLBH, |
| | | S_ZJWLTH = a.S_ZJWLTH, |
| | | S_ZJWLMS = a.S_ZJWLMS, |
| | | S_ZHFHBS = a.S_ZHFHBS, |
| | | S_CJRQ = a.S_CJRQ, |
| | | S_LLDSCBS = a.S_LLDSCBS, |
| | | S_SCGLY = a.S_SCGLY, |
| | | S_GXH = a.S_GXH, |
| | | S_XQRQ = a.S_XQRQ, |
| | | S_YLXMH = a.S_YLXMH, |
| | | S_CGPZXMBH = a.S_CGPZXMBH, |
| | | S_ERP_WH_CODE = a.S_ERP_WH_CODE, |
| | | N_ITEM_STATE = a.N_ITEM_STATE |
| | | }); |
| | | double difference = shul; |
| | | a.F_ACC_D_QTY += difference; |
| | | tN_Ll_Details.Add(a); |
| | | |
| | | } |
| | | } |
| | | else |
| | | { |
| | |
| | | } |
| | | |
| | | } |
| | | |
| | | db.Updateable(tN_Ll_Details).UpdateColumns(it => new { it.F_ACC_D_QTY }).ExecuteCommand(); |
| | | if (po1.Details.Count() > 0) |
| | | { |
| | | var result1 = db.Insertable<TN_Outbound_Order>(po1).ExecuteCommand() > 0; |
| | | db.Insertable<TN_Outbound_Detail>(po1.Details).ExecuteCommand(); |
| | | po1.Details.Clear(); |
| | | } |
| | | else |
| | | { |
| | |
| | | return result; |
| | | } |
| | | } |
| | | |
| | | else |
| | | { |
| | | result.code = 1; |
| | | result.msg = $"领料单{po.S_NO}找不到对应库存物料信息"; |
| | | return result; |
| | | } |
| | | } |
| | | db.CommitTran(); |
| | | } |
| | |
| | | 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_WLPZBH = data.ROOT.ITEM.WLPZH; |
| | | materialVoucher.S_WLPZND = data.ROOT.ITEM.WLPZND; |
| | | materialVoucher.STATUS = 0; |
| | | db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand(); |
| | |
| | | |
| | | } |
| | | |
| | | public static async Task<SimpleResult> AddCenter( SqlSugarClient db, List<TN_Inbound_Detail> MaterList) |
| | | { |
| | | //using (var db = new SqlHelper<object>().GetInstance()) |
| | | //{ |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | | var result = new SimpleResult(); |
| | | try |
| | | { |
| | | #region MyRegion |
| | | |
| | | |
| | | List<TN_Center_Inbound_Detail> tN_Center_Inbound_Details = new List<TN_Center_Inbound_Detail>(); |
| | | foreach (var item in MaterList) |
| | | { |
| | | bool idadd = true; |
| | | // var cir2 = db.Queryable<CGRels>().Where(a => a.S_ITEM_CODE == item.S_ITEM_CODE && a.S_CNTR_TYPE == "半托").Select(s => s.S_CNTR_CODE).Distinct().ToArray(); |
| | | var S_CNTR_CODE = ""; |
| | | |
| | | |
| | | |
| | | var lcr = db.Queryable<LocCntrRel>() |
| | | .InnerJoin<CGRels>((l, c) => l.S_CNTR_CODE == c.S_CNTR_CODE) |
| | | .Where((l, c) => c.S_ITEM_CODE == item.S_ITEM_CODE && c.S_CNTR_TYPE == "半托") |
| | | .OrderByDescending((l, c) => l.T_CREATE) |
| | | .Select((l, c) => l).ToList() |
| | | .FirstOrDefault(); |
| | | |
| | | S_CNTR_CODE = lcr.S_CNTR_CODE; |
| | | if (lcr != null) |
| | | { |
| | | //起始库位 |
| | | var startloc = db.Queryable<Location>().Where(it => it.S_CODE == lcr.S_LOC_CODE).First(); |
| | | var wsc = db.Queryable<WCSTask>().Where(it => it.S_CNTR_CODE == S_CNTR_CODE && it.S_TYPE.Contains("出库") && it.N_B_STATE < 3).First(); |
| | | if (wsc != null) |
| | | { |
| | | item.N_B_STATE = 2; |
| | | db.Updateable(item).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | if (startloc != null)//&& |
| | | { |
| | | //终点货位 |
| | | var endloc = db.Queryable<Location>().Where(it => it.S_AREA_CODE == "QYQXHQ" && it.N_LOCK_STATE == 0 && it.N_CURRENT_NUM == 0).First(); |
| | | |
| | | // var endloc = db.Queryable<Location>().Where(it => it.S_CODE == item.S_END_LOC).First(); |
| | | if (endloc != null) |
| | | { |
| | | var optask = new WMSTask |
| | | { |
| | | S_CODE = WMSHelper.GenerateTaskNo(), |
| | | S_START_LOC = startloc.S_CODE, |
| | | S_START_AREA = startloc.S_AREA_CODE, |
| | | S_START_WH = startloc.S_WH_CODE, |
| | | S_END_LOC = endloc.S_CODE, |
| | | S_END_AREA = endloc.S_AREA_CODE, |
| | | S_END_WH = endloc.S_WH_CODE, |
| | | N_PRIORITY = 1, |
| | | S_TYPE = "半托出库", |
| | | N_TYPE = 2, |
| | | N_B_STATE = 0, |
| | | S_BS_NO = "", |
| | | S_CNTR_CODE = S_CNTR_CODE, |
| | | S_OP_DEF_NAME = item.S_BS_TYPE |
| | | }; |
| | | var res = db.Insertable(optask).ExecuteCommand() > 0; |
| | | if (res) |
| | | { |
| | | startloc.N_LOCK_STATE = 2; |
| | | startloc.S_LOCK_STATE = "出库锁"; |
| | | db.Updateable(startloc).UpdateColumns(it => new { it.S_LOCK_STATE, it.N_LOCK_STATE }).ExecuteCommand(); |
| | | var models = db.Queryable<Location>().Where(a => a.S_CODE == endloc.S_CODE).First(); |
| | | // if (model != null && model.S_LOCK_STATE.Trim() == "无") |
| | | if (models != null && models.N_LOCK_STATE == 0) |
| | | { |
| | | models.N_LOCK_STATE = 1; |
| | | models.S_LOCK_STATE = Location.GetLockStateStr(1); |
| | | res = db.Updateable(models).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE }).ExecuteCommand() > 0; |
| | | } |
| | | item.N_B_STATE = 2; |
| | | db.Updateable(item).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); |
| | | |
| | | |
| | | } |
| | | } |
| | | else |
| | | { |
| | | idadd = false; |
| | | LogHelper.Info($" 库区AGVXHQ无空货位"); |
| | | |
| | | } |
| | | } |
| | | else |
| | | { |
| | | idadd = false; |
| | | LogHelper.Info($" 库区无货位"); |
| | | } |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | idadd = false; |
| | | LogHelper.Info($"物料{item.S_ITEM_CODE}未找到容器对应的货位信息,请联系人工绑定关系"); |
| | | } |
| | | if (!idadd) |
| | | { |
| | | TN_Center_Inbound_Detail tN_Center_Inbound_Detail = new TN_Center_Inbound_Detail(); |
| | | tN_Center_Inbound_Detail.S_IO_NO = item.S_IO_NO; |
| | | tN_Center_Inbound_Detail.N_ROW_NO = item.N_ROW_NO; |
| | | tN_Center_Inbound_Detail.S_ITEM_CODE = item.S_ITEM_CODE; |
| | | tN_Center_Inbound_Detail.F_QTY = item.F_QTY; |
| | | tN_Center_Inbound_Detail.S_ITEM_STATE = item.S_ITEM_STATE; |
| | | tN_Center_Inbound_Detail.S_ITEM_NAME = item.S_ITEM_NAME; |
| | | tN_Center_Inbound_Detail.F_ACC_B_QTY = item.F_ACC_B_QTY; |
| | | tN_Center_Inbound_Detail.S_KCDD = item.S_KCDD; |
| | | tN_Center_Inbound_Detail.S_UOM = item.S_UOM;//计量单位 |
| | | tN_Center_Inbound_Detail.S_BATCH_NO = item.S_BATCH_NO; |
| | | tN_Center_Inbound_Detail.S_CGPZH = item.S_CGPZH; |
| | | tN_Center_Inbound_Detail.S_CGPZXMBH = item.S_CGPZXMBH; |
| | | tN_Center_Inbound_Detail.S_CKPZKJND = item.S_CKPZKJND; |
| | | tN_Center_Inbound_Detail.S_CKPZXM = item.S_CKPZXM; |
| | | tN_Center_Inbound_Detail.S_CXWLPZBH = item.S_CXWLPZBH; |
| | | tN_Center_Inbound_Detail.S_HWSJJYZT = item.S_HWSJJYZT; |
| | | tN_Center_Inbound_Detail.S_JYPBH = item.S_JYPBH; |
| | | tN_Center_Inbound_Detail.S_KJPZSSRQ = item.S_KJPZSSRQ; |
| | | tN_Center_Inbound_Detail.S_KJPZSRSJ = item.S_KJPZSRSJ; |
| | | tN_Center_Inbound_Details.Add(tN_Center_Inbound_Detail); |
| | | |
| | | } |
| | | |
| | | } |
| | | db.Insertable(tN_Center_Inbound_Details).ExecuteCommand(); |
| | | #endregion |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | |
| | | throw ; |
| | | } |
| | | |
| | | return result; |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 内采入库回调 |
| | |
| | | db.BeginTran(); |
| | | |
| | | var po = db.Queryable<TN_Inbound_Order>().Includes(p => p.Details).Where(a => a.S_NO == model.S_NO).First(); |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | LogHelper.Info($"进来了2"); |
| | | #region MyRegion |
| | | if (po.Details.Count > 0) |
| | |
| | | } |
| | | else LogHelper.Info($"入库单明细无值"); |
| | | #endregion |
| | | |
| | | var CntrItemRels = db.Queryable<CntrItemRel>().Where(a => a.S_BS_NO == model.S_NO).ToList(); |
| | | if (po == null) |
| | | { |
| | |
| | | result.resultMsg = "数据不存在"; |
| | | return result; |
| | | } |
| | | |
| | | List<TN_Inbound_Detail> tN_Inbound_Details = new List<TN_Inbound_Detail>(); |
| | | po.Details = po.Details.Where(d => model.Wlist.Any(w => |
| | | w.S_ITEM_CODE == d.S_ITEM_CODE && |
| | | w.N_ROW_NO == d.N_ROW_NO)).OrderBy(s => s.N_ROW_NO) |
| | | .ToList(); |
| | | |
| | | |
| | | |
| | | var gzra = db.Queryable<TN_GZ_SZ>().Where(a => a.C_ENABLE == "Y").First(); |
| | | var GZRQ = DateTime.Now.ToString("yyyyMMdd"); |
| | | if (gzra != null) |
| | | { |
| | | GZRQ = gzra.S_GZRQ.ToString("yyyyMMdd"); |
| | | } |
| | | #region MyRegion |
| | | |
| | | |
| | | if (po.S_IN_TYPE == "内采入库") |
| | | { |
| | | List<NcRkDto.ITEM> listitem = new List<NcRkDto.ITEM>(); |
| | |
| | | //} |
| | | //wcbkbcitem.ITEM1 = listitem1; |
| | | listitem.Add(wcbkbcitem); |
| | | item.N_B_STATE = 1; |
| | | tN_Inbound_Details.Add(item); |
| | | |
| | | } |
| | | string combinedIds = string.Join(",", po.Details.Select(x => x.N_ROW_NO)); |
| | | var KEY = WCSHelper.Generate13DigitIds(); |
| | | var s_key = db.Queryable<TN_InBounder_Sh>().Where(a => a.S_NO == model.S_NO && a.N_ROW_NO == combinedIds).First(); |
| | | if (s_key != null) |
| | | { |
| | | KEY = s_key.S_KEY; |
| | | } |
| | | NcRkDto.Root roots = new NcRkDto.Root |
| | | { |
| | |
| | | HEAD = new NcRkDto.HEAD |
| | | { |
| | | |
| | | KEY = po.S_NO, |
| | | GZRQ = DateTime.Now.ToString("yyyyMMdd"), |
| | | GZRY = model.GZRY, |
| | | KEY = KEY, |
| | | GZRQ = GZRQ, |
| | | GZRY = model.GZRY,//GenerateTaskNo |
| | | WLPZBH = po.S_NO, |
| | | WLPZND = po.S_WLPZND |
| | | }, |
| | |
| | | var json = JsonConvert.SerializeObject(roots.ROOT); |
| | | string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml; |
| | | |
| | | // 现在 root 对象包含了您定义的假数据 |
| | | // 发送POST请求 |
| | | |
| | | LogHelper.Info($"内采收货xml数据{xml}"); |
| | | |
| | | #region MyRegion |
| | |
| | | #endregion |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | #region sap回调 |
| | | // 创建Web Service代理类实例 |
| | | ZSCM_NC service = new ZSCM_NC(); |
| | |
| | | // 准备请求参数 |
| | | ZscmNc request = new ZscmNc(); |
| | | request.Input = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" + xml; |
| | | LogHelper.Info($"内采SAP回调"); |
| | | LogHelper.Info($"内采SAP回调{service.Url}"); |
| | | // 调用Web Service |
| | | ZscmNcResponse responses = service.ZscmNc(request); |
| | | |
| | |
| | | //添加凭证记录表 |
| | | 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>(materialVoucher).ExecuteCommand(); |
| | | if (tN_Inbound_Details.Count() > 0) |
| | | { |
| | | db.Updateable(tN_Inbound_Details).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); |
| | | } |
| | | await AddCenter(db, po.Details); |
| | | |
| | | List<MaterialVoucher> materials = new List<MaterialVoucher>(); |
| | | foreach (var item in model.Wlist) |
| | | { |
| | | MaterialVoucher materialVoucher = new MaterialVoucher(); |
| | | materialVoucher.S_NO = po.S_NO; |
| | | materialVoucher.S_WLBM = item.S_ITEM_CODE; |
| | | materialVoucher.S_WLH = item.N_ROW_NO; |
| | | materialVoucher.S_TYPE = po.S_IN_TYPE; |
| | | materialVoucher.S_WLPZBH = data.ROOT.ITEM.WLPZH; |
| | | materialVoucher.S_WLPZND = data.ROOT.ITEM.WLPZND; |
| | | materialVoucher.STATUS = 0; |
| | | materials.Add(materialVoucher); |
| | | } |
| | | |
| | | if (materials.Count() > 0) |
| | | { |
| | | |
| | | db.Insertable<MaterialVoucher>(materials).ExecuteCommand(); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | |
| | | TN_InBounder_Sh tN_InBounder_Sh = new TN_InBounder_Sh(); |
| | | tN_InBounder_Sh.S_KEY = KEY; |
| | | tN_InBounder_Sh.N_ROW_NO = combinedIds; |
| | | tN_InBounder_Sh.S_NO = po.S_NO; |
| | | db.Insertable<TN_InBounder_Sh>(tN_InBounder_Sh).ExecuteCommand(); |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| | | else |
| | | |
| | | if (po.S_IN_TYPE == "计划外退料入库") |
| | | else if (po.S_IN_TYPE == "计划外退料入库") |
| | | { |
| | | DateTime dateTime; |
| | | DateTime dateTime1 ; |
| | | string GZRQ = ""; |
| | | DateTime dateTime1; |
| | | //string GZRQ = ""; |
| | | string PZZDRQ = ""; |
| | | if (po.BUDAT!=null) |
| | | { |
| | | GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd"); |
| | | } |
| | | //if (po.BUDAT != null) |
| | | //{ |
| | | // GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd"); |
| | | //} |
| | | if (po.BLDAT != null) |
| | | { |
| | | PZZDRQ = DateTime.Parse(po.BLDAT.ToString()).ToString("yyyyMMdd"); |
| | | |
| | | |
| | | } |
| | | string combinedIds = string.Join(",", po.Details.Select(x => x.N_ROW_NO)); |
| | | var KEY = WCSHelper.Generate13DigitIds(); |
| | | var s_key = db.Queryable<TN_InBounder_Sh>().Where(a => a.S_NO == model.S_NO && a.N_ROW_NO == combinedIds).ToList().FirstOrDefault(); |
| | | if (s_key != null) |
| | | { |
| | | KEY = s_key.S_KEY; |
| | | } |
| | | JHWBackDto.Root myRoot = new JHWBackDto.Root |
| | | { |
| | |
| | | { |
| | | HEAD = new JHWBackDto.HEAD |
| | | { |
| | | KEY = po.S_NO, |
| | | KEY = KEY, |
| | | GZRQ = GZRQ, |
| | | PZZDRQ = PZZDRQ, |
| | | YHM = po.UNAME, |
| | |
| | | |
| | | } |
| | | }, |
| | | |
| | | |
| | | } |
| | | }; |
| | | |
| | | //回参物料信息 |
| | | List<JHWBackDto.ITEM> iTEMs = new List<JHWBackDto.ITEM>(); |
| | | foreach (var item in po.Details) |
| | | { |
| | | var podetail = po.Details.Where(s => s.S_ITEM_CODE == item.S_ITEM_CODE).FirstOrDefault(); |
| | | // 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.XSDD = item?.S_XSDD; |
| | | ckbitem.XSDDHXM = item?.S_XSDDXMBH; |
| | | ckbitem.SL = item.F_QTY; |
| | | ckbitem.DW = podetail?.S_UOM; |
| | | ckbitem.DDH = podetail?.S_DDH; |
| | | ckbitem.DW = item?.S_UOM; |
| | | ckbitem.DDH = item?.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; |
| | | ckbitem.WBS = item?.S_WBS; |
| | | ckbitem.KCDD = item?.S_KCDD; |
| | | ckbitem.PC = item?.S_BATCH_NO; |
| | | #region MyRegion |
| | | // List<JHWBackDto.ITEM1> listitem1 = new List<JHWBackDto.ITEM1>(); |
| | | // List<JHWBackDto.ITEM1> listitem1 = new List<JHWBackDto.ITEM1>(); |
| | | JHWBackDto.ITEM1 listitem1 = new JHWBackDto.ITEM1(); |
| | | listitem1.XLH = podetail?.S_SERIAL_NO.Split(',').ToList(); |
| | | listitem1.XLH = item?.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) |
| | |
| | | |
| | | iTEMs.Add(ckbitem); |
| | | |
| | | |
| | | item.N_B_STATE = 1; |
| | | tN_Inbound_Details.Add(item); |
| | | } |
| | | myRoot.ROOT.HEAD.ITEM = iTEMs; |
| | | #region wms-sap回调 |
| | | ////类转json |
| | | var json = JsonConvert.SerializeObject(myRoot.ROOT); |
| | | ////json转xml |
| | | string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml; |
| | | string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml; |
| | | |
| | | LogHelper.Info($"计划外退料xml数据{xml}"); |
| | | LogHelper.Info($"计划外退料xml数据{xml}"); |
| | | //// 创建 StringContent 并指定媒体类型为 "text/xml" |
| | | //HttpContent content = new StringContent(xml, Encoding.UTF8, "application/xml"); |
| | | //string url = Settings.WCSSeverUrl + "/api/WmsSap/cesReceiveXmlData"; |
| | |
| | | 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>(materialVoucher).ExecuteCommand(); |
| | | if (tN_Inbound_Details.Count() > 0) |
| | | { |
| | | db.Updateable(tN_Inbound_Details).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); |
| | | } |
| | | await AddCenter(db, po.Details); |
| | | List<MaterialVoucher> materials = new List<MaterialVoucher>(); |
| | | foreach (var item in model.Wlist) |
| | | { |
| | | MaterialVoucher materialVoucher = new MaterialVoucher(); |
| | | materialVoucher.S_NO = po.S_NO; |
| | | materialVoucher.S_WLBM = item.S_ITEM_CODE; |
| | | materialVoucher.S_WLH = item.N_ROW_NO; |
| | | materialVoucher.S_TYPE = po.S_IN_TYPE; |
| | | materialVoucher.S_WLPZBH = data.ROOT.ITEM.WLPZH; |
| | | materialVoucher.S_WLPZND = data.ROOT.ITEM.WLPZND; |
| | | materialVoucher.STATUS = 0; |
| | | materials.Add(materialVoucher); |
| | | } |
| | | |
| | | if (materials.Count() > 0) |
| | | { |
| | | |
| | | db.Insertable<MaterialVoucher>(materials).ExecuteCommand(); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | |
| | | TN_InBounder_Sh tN_InBounder_Sh = new TN_InBounder_Sh(); |
| | | tN_InBounder_Sh.S_KEY = KEY; |
| | | tN_InBounder_Sh.N_ROW_NO = combinedIds; |
| | | tN_InBounder_Sh.S_NO = po.S_NO; |
| | | db.Insertable<TN_InBounder_Sh>(tN_InBounder_Sh).ExecuteCommand(); |
| | | |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | } |
| | |
| | | } |
| | | wcbkbcitem.ITEM1 = listitem1; |
| | | listitem.Add(wcbkbcitem); |
| | | item.N_B_STATE = 1; |
| | | tN_Inbound_Details.Add(item); |
| | | |
| | | } |
| | | string combinedIds = string.Join(",", po.Details.Select(x => x.N_ROW_NO)); |
| | | var KEY = WCSHelper.Generate13DigitIds(); |
| | | var s_key = db.Queryable<TN_InBounder_Sh>().Where(a => a.S_NO == model.S_NO && a.N_ROW_NO == combinedIds).First(); |
| | | if (s_key != null) |
| | | { |
| | | KEY = s_key.S_KEY; |
| | | } |
| | | WcRkBc.Root roots = new WcRkBc.Root |
| | | { |
| | |
| | | { |
| | | HEAD = new WcRkBc.HEAD |
| | | { |
| | | KEY = po.S_NO, |
| | | GZRQ = DateTime.Now.ToString("yyyyMMdd"), |
| | | KEY = KEY, |
| | | GZRQ = GZRQ, |
| | | GZRY = model.GZRY, |
| | | GC = po.S_FACTORY |
| | | }, |
| | |
| | | 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>(materialVoucher).ExecuteCommand(); |
| | | if (tN_Inbound_Details.Count() > 0) |
| | | { |
| | | db.Updateable(tN_Inbound_Details).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); |
| | | } |
| | | await AddCenter(db, po.Details); |
| | | ; |
| | | List<MaterialVoucher> materials = new List<MaterialVoucher>(); |
| | | foreach (var item in model.Wlist) |
| | | { |
| | | MaterialVoucher materialVoucher = new MaterialVoucher(); |
| | | materialVoucher.S_NO = po.S_NO; |
| | | materialVoucher.S_WLBM = item.S_ITEM_CODE; |
| | | materialVoucher.S_WLH = item.N_ROW_NO; |
| | | materialVoucher.S_TYPE = po.S_IN_TYPE; |
| | | materialVoucher.S_WLPZBH = data.ROOT.ITEM.WLPZH; |
| | | materialVoucher.S_WLPZND = data.ROOT.ITEM.WLPZND; |
| | | materialVoucher.STATUS = 0; |
| | | materials.Add(materialVoucher); |
| | | } |
| | | if (materials.Count() > 0) |
| | | { |
| | | |
| | | db.Insertable<MaterialVoucher>(materials).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 version=\"1.0\" encoding=\"utf-8\" ?>"+ xml; |
| | | // db.Insertable<SapReturn>(sapReturn).ExecuteCommand(); |
| | | //} |
| | | else |
| | | { |
| | | |
| | | TN_InBounder_Sh tN_InBounder_Sh = new TN_InBounder_Sh(); |
| | | tN_InBounder_Sh.S_KEY = KEY; |
| | | tN_InBounder_Sh.N_ROW_NO = combinedIds; |
| | | tN_InBounder_Sh.S_NO = po.S_NO; |
| | | db.Insertable<TN_InBounder_Sh>(tN_InBounder_Sh).ExecuteCommand(); |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | else if (po.S_IN_TYPE == "冲销入库") |
| | | { |
| | | |
| | | //var materpz = db.Queryable<TN_Inbound_Order>().Where(s => s.S_NO == po.S_NO).First(); |
| | | string GZRQ = ""; |
| | | var materpz = db.Queryable<TN_Inbound_Order>().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"); |
| | | } |
| | | |
| | | //if (po.BUDAT != null) |
| | | //{ |
| | | // GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd"); |
| | | //} |
| | | |
| | | //出库回调入参 |
| | | CXCkBackDto.Root roots = new CXCkBackDto.Root |
| | | { |
| | |
| | | List<CXCkBackDto.HEAD> listhead = new List<CXCkBackDto.HEAD>(); |
| | | //出库单详情 |
| | | LogHelper.Info($"冲销入库入库{GZRQ}"); |
| | | var porecord = db.Queryable<MaterialVoucher>().Where(a => a.S_NO == po.S_BS_NO&&a.STATUS==0).ToList(); |
| | | var porecord = db.Queryable<MaterialVoucher>().Where(a => a.S_NO == po.S_BS_NO && a.STATUS == 0).ToList(); |
| | | //var podet = db.Queryable<tn_i>().Where(a => a.S_NO == po.S_BS_NO&&a.STATUS==0).ToList(); |
| | | LogHelper.Info($"数量{porecord.Count()}"); |
| | | LogHelper.Info($"数量{po.Details.Count()}"); |
| | |
| | | hEAD.WLPZXM = item.N_ROW_NO; |
| | | hEAD.GZRY = po.UNAME; |
| | | listhead.Add(hEAD); |
| | | item.N_B_STATE = 1; |
| | | tN_Inbound_Details.Add(item); |
| | | } |
| | | roots.ROOT.HEAD = listhead; |
| | | |
| | |
| | | // 确保HTTP成功状态值 |
| | | response.EnsureSuccessStatusCode(); |
| | | LogHelper.Info($"冲销入库xml数据{xml}"); |
| | | |
| | | |
| | | |
| | | ZSCM2_CXPZ service = new ZSCM2_CXPZ(); |
| | | service.PreAuthenticate = true; |
| | |
| | | LogHelper.Info($"通用冲销SAP回调"); |
| | | // 调用Web Service |
| | | ZfmScm2CxpzMm001Response responses = service.ZfmScm2CxpzMm001(request); |
| | | |
| | | |
| | | |
| | | // 处理响应 |
| | | LogHelper.Info("通用冲销SAP返回结果: " + responses.Output); |
| | | |
| | | |
| | | |
| | | //string xmlqqq = "<ROOT>\r\n\t<ITEM>\r\n\t\t<YWLPZBH>490062947</YWLPZBH>\r\n\t\t<YWLPZND>2025</YWLPZND>\r\n\t\t<YWLPZHXM>001</YWLPZHXM>\r\n\t\t<WLPZBH>490062949</WLPZBH>\r\n\t\t<WLPZND>\r\n\t\t</WLPZND>\r\n\t\t<WLPZHXM>D0001</WLPZHXM>\r\n\t\t<MSGCODE>0</MSGCODE>\r\n\t\t<MSGDESP>数据接收成功,并冲中销成功!</MSGDESP>\r\n\t</ITEM>\r\n</ROOT>"; |
| | | // 将 XmlDocument 转换为 JSON 字符串 |
| | | //JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc)); |
| | | |
| | | XmlDocument xmlDoc = new XmlDocument(); |
| | | xmlDoc.LoadXml(responses.Output.ToString()); |
| | | JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc)); |
| | | |
| | | EnsureArrayFormat(jsonObject, "ITEM", ""); |
| | | //var data = JsonConvert.DeserializeObject<ReturnJHWBcak.Root>(jsonObject.ToString()); |
| | | var data = JsonConvert.DeserializeObject<ReturnTYBcak.Root>(jsonObject.ToString()); |
| | | var resmeg = ""; |
| | |
| | | //添加凭证记录表 |
| | | if (data != null) |
| | | { |
| | | List<TN_Inbound_Detail> tN_Inbound_Detailcx = new List<TN_Inbound_Detail>(); |
| | | List<MaterialVoucher> materiallist = new List<MaterialVoucher>(); |
| | | foreach (var item in data.ROOT.ITEM) |
| | | { |
| | | if (item.MSGCODE == 0) |
| | | { |
| | | |
| | | var onr = po.Details.Where(s => s.N_ROW_NO == item.WLPZHXM).First(); |
| | | |
| | | var onr = po.Details.Where(s => s.N_ROW_NO == item.WLPZHXM).FirstOrDefault(); |
| | | onr.N_B_STATE = 1; |
| | | tN_Inbound_Detailcx.Add(onr); |
| | | MaterialVoucher materialVoucher = new MaterialVoucher(); |
| | | materialVoucher.S_NO = po.S_NO; |
| | | materialVoucher.S_TYPE = po.S_IN_TYPE; |
| | |
| | | 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.F_QTY = onr != null ? onr.F_QTY : 0; |
| | | //materialVoucher.STATUS = 0; |
| | | resmeg += item?.MSGDESP; |
| | | materiallist.Add(materialVoucher); |
| | |
| | | } |
| | | else |
| | | { |
| | | rescode = 1; |
| | | rescode = 1; resmeg += item?.MSGDESP; |
| | | } |
| | | |
| | | |
| | | } |
| | | if (tN_Inbound_Detailcx.Count() > 0) |
| | | { |
| | | db.Updateable(tN_Inbound_Detailcx).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); |
| | | await AddCenter(db, tN_Inbound_Detailcx); |
| | | } |
| | | if (materiallist.Count() > 0) |
| | | { |
| | |
| | | //} |
| | | //db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand(); |
| | | } |
| | | |
| | | #endregion |
| | | var newpodetai = db.Queryable<TN_Inbound_Detail>().Where(a => a.S_IO_NO == model.S_NO).ToList(); |
| | | int cout = newpodetai.Where(s => s.N_B_STATE != 1).Count(); |
| | | if (cout==0) |
| | | { |
| | | po.N_B_STATE = 1; |
| | | db.Updateable(po).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); |
| | | } |
| | | |
| | | db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | |
| | | |
| | | var po = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == S_CNTR_CODE && a.S_BS_NO == taskno).ToList(); |
| | | LogHelper.Info("添加入库记录表po" + po.Count()); |
| | | var pz = db.Queryable<MaterialVoucher>().Where(a => a.S_NO == taskno).First(); |
| | | var ass = pz == null; |
| | | var pzs = db.Queryable<MaterialVoucher>().Where(a => a.S_NO == taskno).ToList(); |
| | | var ass = pzs == null; |
| | | LogHelper.Info("添加入库记录表pz" + ass); |
| | | List<OutboundRecord> records = new List<OutboundRecord>(); |
| | | foreach (var item in po) |
| | | { |
| | | |
| | | |
| | | var pz = pzs.Where(s => s.S_WLBM == item.S_ITEM_CODE && s.S_WLH == item.N_BS_ROW_NO).ToList().FirstOrDefault(); |
| | | var S_TYPE = "回库"; |
| | | if (pz!=null) |
| | | { |
| | | S_TYPE = pz.S_TYPE; |
| | | } |
| | | 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_TYPE = S_TYPE; |
| | | outboundRecord.S_WLPZBH = pz?.S_WLBM; |
| | | outboundRecord.S_WLPZND = pz?.S_WLPZND; |
| | | outboundRecord.S_WLBM = item.S_ITEM_CODE; |
| | | outboundRecord.S_SL = item.F_QTY; |
| | |
| | | { |
| | | db.BeginTran(); |
| | | List<TN_Material> list = new List<TN_Material>(); |
| | | |
| | | |
| | | var itemCodes = model.ITEM.Select(item => item.WLBM).ToList(); |
| | | var itemlist = db.Queryable<TN_Material>() |
| | | .Where(it => itemCodes.Contains(it.S_ITEM_CODE)) |
| | | .ToList(); |
| | | foreach (var item in model.ITEM) |
| | | { |
| | | var materlist = db.Queryable<TN_Material>().Where(it => it.S_ITEM_CODE == item.WLBM).First(); |
| | | var materlist = itemlist.Where(it => it.S_ITEM_CODE == item.WLBM).First(); |
| | | if (materlist == null) |
| | | { |
| | | TN_Material tN_Material = new TN_Material(); |