| | |
| | | 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; |
| | | |
| | | namespace HH.WCS.Mobox3.pinggao.api |
| | | { |
| | |
| | | |
| | | } |
| | | |
| | | public static bool MaterPanduan(string ItemCode,double count) { |
| | | public static bool MaterPanduan(string ItemCode, double count) |
| | | { |
| | | bool panduan = true; |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | |
| | |
| | | var po1 = db.Queryable<CntrItemRel>().Where(a => a.S_ITEM_CODE == ItemCode).First(); |
| | | if (po != null) |
| | | { |
| | | if (po1!=null) |
| | | if (po1 != null) |
| | | { |
| | | double sl= po1.F_QTY + count; |
| | | if (sl>po.N_COUNT) |
| | | double sl = po1.F_QTY + count; |
| | | if (sl > po.N_COUNT) |
| | | { |
| | | panduan = false; |
| | | } |
| | |
| | | } |
| | | |
| | | } |
| | | }else |
| | | } |
| | | 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(); |
| | | // 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(); |
| | | |
| | | } |
| | | 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 , |
| | | 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, |
| | |
| | | tnorder.GZLH = item.GZLH; |
| | | tN_GENERATE_ORDERs.Add(tnorder); |
| | | //tnorder.S_XLH = string.Join(",", item.ITEM.Select(items => items.XLH)); |
| | | |
| | | |
| | | } |
| | | else |
| | | { |
| | |
| | | }; |
| | | db.BeginTran(); |
| | | List<WLReturnRoot.ITEM> list = new List<WLReturnRoot.ITEM>(); |
| | | |
| | | |
| | | var itemCodes = model.ROOT.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.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).First(); |
| | | if (materlist == null) |
| | | { |
| | | TN_Material tN_Material = new TN_Material(); |
| | |
| | | #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) |
| | | { |
| | | |
| | |
| | | if (itemwlpz.ITEM.Count > 0) |
| | | { |
| | | foreach (var a in itemwlpz.ITEM) |
| | | |
| | | |
| | | { |
| | | |
| | | |
| | | po.Details.Add(new TN_Inbound_Detail |
| | | { |
| | | S_IO_NO = itemwlpz.HEAD.WLPZH, |
| | |
| | | /// <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 |
| | | { |
| | | var itemlist = db.Queryable<TN_Material>().ToList(); |
| | | List<TN_Inbound_Detail> tN_Inbound_Details = new List<TN_Inbound_Detail>(); |
| | | List<TN_Ll_detail> tN_Ll_Details = new List<TN_Ll_detail>(); |
| | | 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(); |
| | |
| | | if (itemwlpz.ITEM.Count > 0) |
| | | { |
| | | 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 |
| | | { |
| | |
| | | if (itemwlpz.ITEM.Count > 0) |
| | | { |
| | | 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; |
| | | tN_Inbound_Details.Add(poq); |
| | | // db.Updateable(poq).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); |
| | | // db.Updateable(poq).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | |
| | | } |
| | | 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(); |
| | |
| | | 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) //无则新增物料明细 |
| | | { |
| | |
| | | { |
| | | 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) //无则新增物料明细 |
| | | { |
| | |
| | | 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) |
| | | if (tN_Ll_Details.Count() > 0) |
| | | { |
| | | |
| | | db.Updateable(tN_Ll_Details).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); |
| | | } |
| | | if (tN_Inbound_Details.Count()>0) |
| | | 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) |
| | | { |
| | |
| | | result.resultMsg = "成功"; |
| | | result.resultCode = 0; |
| | | //校验入库单数量,不可以超,成功后插入托盘物料表,更新入库单累计数量 |
| | | result = AddInboundOrder(model.MaterList, model.cntr_code,model.cntr_type); |
| | | result = AddInboundOrder(model.MaterList, model.cntr_code, model.cntr_type); |
| | | #region MyRegion |
| | | |
| | | |
| | |
| | | return result; |
| | | } |
| | | } |
| | | |
| | | |
| | | //出库 |
| | | if (model.Type==2) |
| | | if (model.Type == 2) |
| | | { |
| | | Location start = new Location(); |
| | | if (!string.IsNullOrEmpty(model.cntr_code)) |
| | | { |
| | | var loc= db.Queryable<LocCntrRel>().Where(it => it.S_CNTR_CODE == model.cntr_code).First(); |
| | | |
| | | |
| | | if (loc==null) |
| | | 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}找不到对应货位"; |
| | |
| | | } |
| | | else |
| | | { |
| | | start= db.Queryable<Location>().Where(it => it.S_CODE == loc.S_LOC_CODE).First(); |
| | | start = db.Queryable<Location>().Where(it => it.S_CODE == loc.S_LOC_CODE).First(); |
| | | } |
| | | } |
| | | else if (!string.IsNullOrEmpty(model.item_code)) |
| | | { |
| | | start = db.Queryable<LocCntrRel>() |
| | | .LeftJoin<CntrItemRel>((lcr, cir) => lcr.S_CNTR_CODE == cir.S_CNTR_CODE&&cir.S_CNTR_TYPE=="半托") |
| | | .Where((lcr, cir) => cir.S_CNTR_CODE != null) |
| | | .LeftJoin<Location>((lcr, cir, loc) => lcr.S_LOC_CODE == loc.S_CODE && loc.S_AREA_CODE == "HJQ") |
| | | .OrderBy((lcr, cir) => cir.T_CREATE) |
| | | .Select((lcr, cir, loc) => loc).ToList() // 返回 Location 对象 |
| | | .FirstOrDefault(); // 或者 Take(1).ToList()[0] |
| | | 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(); |
| | | LogHelper.Info($"starts{starts}"); |
| | | var starts12 = db.Queryable<LocCntrRel>().Where(lcr => lcr.S_CNTR_CODE== starts.S_CNTR_CODE).ToList().FirstOrDefault(); |
| | | LogHelper.Info($"starts1{starts12}"); |
| | | start = db.Queryable<Location>().Where(loc => loc.S_AREA_CODE == "HJQ" && loc.S_CODE== starts12.S_LOC_CODE).ToList().FirstOrDefault(); |
| | | LogHelper.Info($"starts2{start}"); |
| | | |
| | | model.cntr_code = starts12?.S_CNTR_CODE; |
| | | } |
| | | 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(); |
| | | |
| | | //// 获取未被占用的容器对应的货位编码 |
| | | //var availableLocationCodes = db.Queryable<LocCntrRel>() |
| | | // .Where(s => !usedContainerCodes.Contains(s.S_CNTR_CODE)) |
| | | // .Select(s => s.S_LOC_CODE) |
| | | // .ToList(); |
| | | |
| | | //// 获取第一个可用货位(如果没有则返回null) |
| | | //var startLocation = db.Queryable<Location>() |
| | | // .Where(it => availableLocationCodes.Contains(it.S_CODE)) |
| | | // .ToList().FirstOrDefault(); |
| | | 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(); |
| | | |
| | | |
| | | |
| | | |
| | | var starts12 = db.Queryable<LocCntrRel>().Where(lcr => lcr.S_CNTR_CODE == start.S_CODE).ToList().FirstOrDefault(); |
| | | |
| | | |
| | | model.cntr_code = starts12?.S_CNTR_CODE; |
| | | #endregion |
| | | start = db.Queryable<LocCntrRel>() |
| | | .LeftJoin<CntrItemRel>((lcr, cir) => lcr.S_CNTR_CODE == cir.S_CNTR_CODE) |
| | | .Where((lcr, cir) => cir.S_CNTR_CODE == null) // 找出未被占用的容器 |
| | | .LeftJoin<Location>((lcr, cir, loc) => lcr.S_LOC_CODE == loc.S_CODE && loc.S_AREA_CODE == "HJQ") |
| | | .Select((lcr, cir, loc) => loc).ToList() // 返回 Location 对象 |
| | | .FirstOrDefault(); // 或者 Take(1).ToList()[0] |
| | | } |
| | | if (start==null) |
| | | if (start == null) |
| | | { |
| | | LogHelper.Info($"{model.cntr_code}未找到可用货位"); |
| | | result.resultMsg = $"{model.cntr_code}未找到可用货位"; |
| | |
| | | Location end = new Location(); |
| | | if (!string.IsNullOrEmpty(model.cntr_code)) |
| | | { |
| | | |
| | | |
| | | #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(); |
| | |
| | | |
| | | // 获取第一个可用货位(如果没有则返回null) |
| | | end = db.Queryable<Location>() |
| | | .Where(it => !availableLocationCodes.Contains(it.S_CODE)&&it.S_AREA_CODE== "HJQ") |
| | | .Where(it => !availableLocationCodes.Contains(it.S_CODE) && it.S_AREA_CODE == "HJQ") |
| | | .ToList().FirstOrDefault(); |
| | | |
| | | |
| | |
| | | return result; |
| | | |
| | | } |
| | | if (end==null) |
| | | if (end == null) |
| | | { |
| | | LogHelper.Info($"{model.cntr_code}未找到可用货位"); |
| | | result.resultMsg = $"{model.cntr_code}未找到可用货位"; |
| | |
| | | /// <returns></returns> |
| | | internal static async Task<SimpleResult> OutboundOrderSorting(FJSorting model) |
| | | { |
| | | |
| | | |
| | | var result = new SimpleResult(); |
| | | |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | |
| | | } |
| | | |
| | | //通用接口 对容器货品的删减 和生成回库单 都要用的接口 |
| | | result = await TYAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, model.IsHK, model.start, po.S_OUT_TYPE,model.cntr_type); |
| | | if (result.resultCode==1) |
| | | result = await TYAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, model.IsHK, model.start, po.S_OUT_TYPE, model.cntr_type); |
| | | if (result.resultCode == 1) |
| | | { |
| | | return result; |
| | | } |
| | |
| | | { |
| | | S_AREA_CODE = po.S_AREA_CODE; |
| | | } |
| | | model.MaterList.ForEach(a => |
| | | 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 |
| | | { |
| | | 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 |
| | | }); |
| | | 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; |
| | |
| | | } |
| | | |
| | | } |
| | | 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,string cntr_type) |
| | | 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, string cntr_type) |
| | | { |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | | //using (var db = new SqlHelper<object>().GetInstance()) |
| | |
| | | } |
| | | else |
| | | { |
| | | db.Updateable(cir).UpdateColumns(it => new { it.F_QTY,it.S_CNTR_TYPE, it.F_ALLOC_QTY, it.T_MODIFY }).ExecuteCommand(); |
| | | db.Updateable(cir).UpdateColumns(it => new { it.F_QTY, it.S_CNTR_TYPE, it.F_ALLOC_QTY, it.T_MODIFY }).ExecuteCommand(); |
| | | //添加回库作业 |
| | | } |
| | | } |
| | |
| | | LogHelper.Info($"物料不存在{item.item_code}"); |
| | | return result; |
| | | } |
| | | |
| | | |
| | | OutboundRecord outboundRecord = new OutboundRecord(); |
| | | outboundRecord.S_WLPZBH = pz?.S_WLPZBH; |
| | | outboundRecord.S_WLPZND = pz?.S_WLPZND; |
| | |
| | | } |
| | | 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) |
| | | 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) |
| | | { |
| | | var cntr= db.Queryable<TN_Distribution_CNTR>().Where(a => a.S_DC_NO== locs.S_BS_NO).First(); |
| | | if (cntr!=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(); |
| | |
| | | result.resultMsg += $"任务{locs.S_CODE}来源号{locs.S_BS_NO}找不到配盘信息"; |
| | | 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 = locs?.S_START_LOC, |
| | | S_END_AREA = locs?.S_START_AREA, |
| | | S_END_WH = locs?.S_START_WH, |
| | | //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 = locs?.S_START_LOC, |
| | | S_END_AREA = locs?.S_START_AREA, |
| | | S_END_WH = locs?.S_START_WH, |
| | | |
| | | N_TYPE = 1, |
| | | // S_TYPE = WMSTask.GetTypeStr(1), |
| | | S_TYPE = "回库", |
| | | S_OP_DEF_CODE = "", |
| | | S_OP_DEF_NAME = "pda入库" |
| | | }; |
| | | 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 += $"找不到容器对应任务信息{cntr_code}"; |
| | | return result; |
| | | } |
| | | |
| | | |
| | | } |
| | | var sss= db.Insertable<OutboundRecord>(records).ExecuteCommand(); |
| | | |
| | | var sss = db.Insertable<OutboundRecord>(records).ExecuteCommand(); |
| | | |
| | | //db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | |
| | | }; |
| | | 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(); |
| | | 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(); |
| | |
| | | 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; |
| | |
| | | KEY = po.S_NO, |
| | | ZYWLX = "2", |
| | | PZRQ = DateTime.Now.ToString("yyyyMMdd"), |
| | | GZRQ =DateTime.Now.ToString("yyyyMMdd"), // 假设日期格式为"年-月-日" |
| | | GZRQ = DateTime.Now.ToString("yyyyMMdd"), // 假设日期格式为"年-月-日" |
| | | GZRY = po.S_CREATOR_NAME, |
| | | ITEM = new List<CkBcakDto.ITEM> |
| | | { |
| | |
| | | //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(); |
| | | 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 }; |
| | |
| | | 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) |
| | | 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"; |
| | | } |
| | |
| | | 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.F_QTY = item.qty; |
| | | materialVoucher.S_GZRQ = po.BUDAT; |
| | | materialVoucher.UNAME = po.UNAME; |
| | | materialVoucher.STATUS = 0; |
| | |
| | | /// <param name="cntr_code"></param> |
| | | /// <returns></returns> |
| | | [ApiExplorerSettings(IgnoreApi = true)] |
| | | public static SimpleResult AddInboundOrder(List<Mater> MaterList, string cntr_code,string S_CNTR_TYPE) |
| | | public static SimpleResult AddInboundOrder(List<Mater> MaterList, string cntr_code, string S_CNTR_TYPE) |
| | | { |
| | | var result = new SimpleResult(); |
| | | var result = new SimpleResult(); |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | | using (var db = new SqlHelper<object>().GetInstance()) |
| | | { |
| | |
| | | { |
| | | 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(); |
| | | 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, 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 }; |
| | | cir = new CntrItemRel { S_CNTR_TYPE = S_CNTR_TYPE, S_CNTR_CODE = cntr.S_CODE.Trim(), S_UOM = info.S_UOM, S_BATCH_NO = item.S_BATCH_NO, N_BS_ROW_NO = item.N_ROW_NO, F_QTY = item.qty, S_ITEM_CODE = item.item_code, S_BS_NO = item.arrival_no }; |
| | | db.Insertable<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.WLBM, |
| | | 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 |
| | | { |
| | | var itemlist = db.Queryable<TN_Material>().ToList(); |
| | | 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.WLBM).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(); |
| | | // 预先缓存物料数据(优化点1:批量查询减少数据库访问) |
| | | |
| | | 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); |
| | | if (po == null) |
| | |
| | | S_XQRQ = a.XQRQ, |
| | | N_ITEM_STATE = 1 |
| | | }); |
| | | |
| | | } |
| | | |
| | | Stopwatch sw = new Stopwatch(); |
| | | sw.Start(); |
| | | |
| | | if (po.Details.Count() > 0) |
| | | { |
| | | LLDReturnRoot.ITEM lLDReturnRoot1 = new LLDReturnRoot.ITEM(); |
| | |
| | | lLDReturnRoot1.MSGDESP = $"成功"; |
| | | iTEMs.Add(lLDReturnRoot1); |
| | | var result1 = db.Insertable<TN_Ll_Order>(po).ExecuteCommand() > 0; |
| | | db.Insertable<TN_Ll_detail>(po.Details).ExecuteCommand(); |
| | | //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 |
| | | { |
| | |
| | | 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; |
| | |
| | | var item = itemlist.Where(it => it.S_ITEM_CODE == a.WLBM).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; |
| | |
| | | } |
| | | else //返回失败 |
| | | { |
| | | //result.code = 1; |
| | | //result.msg = $"更新失败,更新数量必须大于当前物料数量{a.WLBM}"; |
| | | //throw new Exception($"更新失败,更新数量必须大于当前物料数量{a.WLBM}"); |
| | | lLDReturnRoots.GC = itemscddll.GC; |
| | | lLDReturnRoots.LLDH = itemscddll.LLDH; |
| | | lLDReturnRoots.MSGCODE = 1; |
| | |
| | | { |
| | | 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.WLBM == s.S_ITEM_CODE).FirstOrDefault(); |
| | | if (po1 != null) //无则新增物料明细 |
| | | { |
| | | tN_Ll_Details.AddRange(po1); |
| | | // 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.WLBM && it.S_DO_NO == po1.First().S_DO_NO).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | |
| | | } |
| | | } |
| | | } |
| | | if (tN_Ll_Details.Count()>0) |
| | | if (tN_Ll_Details.Count() > 0) |
| | | { |
| | | db.Deleteable<TN_Ll_detail>(tN_Ll_Details).ExecuteCommand(); |
| | | |
| | | 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) |
| | | { |
| | |
| | | lLDReturnRoot1.MSGDESP = $"成功"; |
| | | iTEMs.Add(lLDReturnRoot1); |
| | | db.Insertable<TN_Ll_detail>(listtn).ExecuteCommand(); |
| | | |
| | | } |
| | | else |
| | | { |
| | |
| | | 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> |
| | |
| | | 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 |
| | |
| | | { |
| | | //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 }; |
| | | List<TN_Ll_detail> tN_Ll_Details= new List<TN_Ll_detail>(); |
| | | List<TN_Ll_detail> tN_Ll_Details = new List<TN_Ll_detail>(); |
| | | po1.Details = new List<TN_Outbound_Detail>(); |
| | | if (po.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 |
| | | { |
| | |
| | | result.resultMsg = "数据不存在"; |
| | | return result; |
| | | } |
| | | po.Details= po.Details.Where(d => model.Wlist.Any(w => |
| | | |
| | | 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)) |
| | | .ToList(); |
| | |
| | | //} |
| | | //wcbkbcitem.ITEM1 = listitem1; |
| | | listitem.Add(wcbkbcitem); |
| | | item.N_B_STATE = 1; |
| | | tN_Inbound_Details.Add(item); |
| | | |
| | | } |
| | | NcRkDto.Root roots = new NcRkDto.Root |
| | |
| | | |
| | | iTEMs.Add(ckbitem); |
| | | |
| | | |
| | | item.N_B_STATE = 1; |
| | | tN_Inbound_Details.Add(item); |
| | | } |
| | | myRoot.ROOT.HEAD.ITEM = iTEMs; |
| | | #region wms-sap回调 |
| | |
| | | result.resultCode = data.ROOT.ITEM.MSGCODE; |
| | | if (data.ROOT.ITEM.MSGCODE == 0) |
| | | { |
| | | List< MaterialVoucher > materials = new List< MaterialVoucher >(); |
| | | List<MaterialVoucher> materials = new List<MaterialVoucher>(); |
| | | foreach (var item in model.Wlist) |
| | | { |
| | | MaterialVoucher materialVoucher = new MaterialVoucher(); |
| | |
| | | materialVoucher.S_WLPZBH = data.ROOT.ITEM.WLPZH; |
| | | materialVoucher.S_WLPZND = data.ROOT.ITEM.WLPZND; |
| | | materialVoucher.STATUS = 0; |
| | | materials.Add( materialVoucher ); |
| | | materials.Add(materialVoucher); |
| | | } |
| | | |
| | | if (materials.Count() > 0) |
| | |
| | | } |
| | | wcbkbcitem.ITEM1 = listitem1; |
| | | listitem.Add(wcbkbcitem); |
| | | item.N_B_STATE = 1; |
| | | tN_Inbound_Details.Add(item); |
| | | |
| | | } |
| | | WcRkBc.Root roots = new WcRkBc.Root |
| | |
| | | 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?.WLPZH; |
| | | //LogHelper.Info("值1: " + data.ROOT.ITEM?.WLPZH); |
| | | //LogHelper.Info("值2: " + materialVoucher.S_WLPZBH); |
| | | //materialVoucher.S_WLPZND = data.ROOT.ITEM?.WLPZND; |
| | | //materialVoucher.STATUS = 0; |
| | | //db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand(); |
| | | ; |
| | | List<MaterialVoucher> materials = new List<MaterialVoucher>(); |
| | | foreach (var item in model.Wlist) |
| | | { |
| | |
| | | |
| | | 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(); |
| | | //} |
| | | |
| | | } |
| | | |
| | |
| | | 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; |
| | | |
| | |
| | | //db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand(); |
| | | } |
| | | |
| | | if (tN_Inbound_Details.Count() > 0) |
| | | { |
| | | db.Updateable(tN_Inbound_Details).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); |
| | | } |
| | | 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) |
| | |
| | | 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).First(); |
| | | var pz = pzs.Where(s => s.S_WLBM == item.S_ITEM_CODE && s.S_WLH == item.N_BS_ROW_NO).ToList().FirstOrDefault(); |
| | | |
| | | OutboundRecord outboundRecord = new OutboundRecord(); |
| | | outboundRecord.S_NO = item.S_BS_NO; |
| | |
| | | { |
| | | 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(); |