|
|
@@ -228,6 +228,7 @@ namespace Business.ResourceExamineManagement
|
|
|
private readonly ISqlRepository<WorkOrdMaster> _workOrdMaster;
|
|
|
private readonly ISqlRepository<WorkOrdDetail> _workOrdDetail;
|
|
|
private readonly ISqlRepository<rf_serialnumber> _rf_serialnumber;
|
|
|
+ private readonly ISqlRepository<LocationDetail> _locationDetail;
|
|
|
/// <summary>
|
|
|
/// 资源检查入参
|
|
|
/// </summary>
|
|
|
@@ -273,7 +274,7 @@ namespace Business.ResourceExamineManagement
|
|
|
private ISqlRepository<ItemMaster> _itemMaster;
|
|
|
private ISqlRepository<NbrMaster> _nbrMaster;
|
|
|
private ISqlRepository<NbrDetail> _nbrDetail;
|
|
|
-
|
|
|
+ private ISqlRepository<ItemPackMaster> _itemPackMaster;
|
|
|
/// <summary>
|
|
|
/// 生产排产
|
|
|
/// </summary>
|
|
|
@@ -366,7 +367,9 @@ namespace Business.ResourceExamineManagement
|
|
|
ISqlRepository<NbrMaster> nbrMaster,
|
|
|
ISqlRepository<NbrDetail> nbrDetail,
|
|
|
PriorityAppService priorityAppService,
|
|
|
- ISqlRepository<rf_serialnumber> rf_serialnumber
|
|
|
+ ISqlRepository<rf_serialnumber> rf_serialnumber,
|
|
|
+ ISqlRepository<LocationDetail> locationDetail,
|
|
|
+ ISqlRepository<ItemPackMaster> itemPackMaster
|
|
|
)
|
|
|
{
|
|
|
_mes_technique = mes_technique;
|
|
|
@@ -441,7 +444,9 @@ namespace Business.ResourceExamineManagement
|
|
|
_nbrDetail = nbrDetail;
|
|
|
_priorityAppService= priorityAppService;
|
|
|
_rf_serialnumber = rf_serialnumber;
|
|
|
- }
|
|
|
+ _locationDetail=locationDetail;
|
|
|
+ _itemPackMaster= itemPackMaster;
|
|
|
+ }
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
@@ -478,7 +483,7 @@ namespace Business.ResourceExamineManagement
|
|
|
|
|
|
//获取订单行数据
|
|
|
List<crm_seorderentry> sentrys = await _mysql_crm_seorderentry.GetListAsync(p => p.tenant_id == input.tenantId && p.factory_id == input.factoryId && input.sorderId.Contains(p.seorder_id.GetValueOrDefault()) && !p.IsDeleted);
|
|
|
-
|
|
|
+ AsyncItemStockFromWMS(sentrys);
|
|
|
//处理订单行优先级
|
|
|
sentrys = _priorityAppService.CalcOrderEntryPriority(sorders, sentrys);
|
|
|
|
|
|
@@ -996,7 +1001,10 @@ namespace Business.ResourceExamineManagement
|
|
|
stock_leadtime = x.stock_leadtime,
|
|
|
production_leadtime = x.production_leadtime,
|
|
|
order_leadtime = x.order_leadtime,
|
|
|
- minorderqty = x.minorderqty
|
|
|
+ minorderqty = x.minorderqty,
|
|
|
+ put_integer=x.put_integer,
|
|
|
+ minpackqty=x.minpackqty,
|
|
|
+ ordissu_days=x.ordissu_days
|
|
|
}).AsQueryable<ICItemLeadTimeDto>().ToList();
|
|
|
}
|
|
|
|
|
|
@@ -2016,107 +2024,225 @@ namespace Business.ResourceExamineManagement
|
|
|
AutoCreateBomBill();
|
|
|
}
|
|
|
|
|
|
- //public void AutoCreatePickBill(List<string> workOrds)
|
|
|
- //{
|
|
|
- // //获取生产周期数据
|
|
|
- // List<PeriodSequenceDet> dbPeriodSequences = _periodSequenceDet.Select(p => workOrds.Contains(p.WorkOrds) && p.Domain == "1001" && p.IsActive);
|
|
|
- // List<LineMaster> lineMasters = new List<LineMaster>();
|
|
|
- // List<string> lines = new List<string>();//产线列表,
|
|
|
- // List<NbrMaster> nbrMasterList = new List<NbrMaster>();//需要生成领料单列表
|
|
|
- // List<NbrDetail> nbrDetailList = new List<NbrDetail>();//需要生成领料单明细列表
|
|
|
- // Dictionary<string, decimal> dictItemQty = new Dictionary<string, decimal>();
|
|
|
- // if (dbPeriodSequences.Any())
|
|
|
- // {
|
|
|
- // lines = dbPeriodSequences.Select(a => a.Line).Distinct().ToList();
|
|
|
- // lineMasters = _lineMaster.Select(p => lines.Contains(p.Line) && p.Domain == "1001" && p.IsActive);
|
|
|
- // List<ProductStructureMaster> itemList = GetProductStructure(dbPeriodSequences.Select(a => a.ItemNum).Distinct().ToList());
|
|
|
- // var childrenList = itemList.Select(a => a.ComponentItem).Distinct().ToList();
|
|
|
- // List<ItemMaster> itemLocList = _itemMaster.Select(p => childrenList.Contains(p.ItemNum) && p.Domain == "1001" && p.IsActive).Distinct().ToList();
|
|
|
- // foreach (var item in dbPeriodSequences)
|
|
|
- // {
|
|
|
- // var Nbr = GetMaxSerialNumber(417416915624005);
|
|
|
- // nbrMasterList.Add(new NbrMaster
|
|
|
- // {
|
|
|
- // Domain = "1001",
|
|
|
- // Type = "SM",
|
|
|
- // Nbr = Nbr,
|
|
|
- // Remark = "",
|
|
|
- // Date = item.PlanDate,
|
|
|
- // ProdLine = item.Line,
|
|
|
- // Status = "",
|
|
|
- // WorkOrd = item.WorkOrds,
|
|
|
- // QtyOrd = item.OrdQty.HasValue ? item.OrdQty.Value : 0,
|
|
|
- // IsActive = true,
|
|
|
- // IsChanged = true,
|
|
|
- // Name = "1001",
|
|
|
- // Department = "101",
|
|
|
- // CreateTmie = DateTime.Now,
|
|
|
- // UpdateTmie = DateTime.Now,
|
|
|
- // CreateUser = "1001",
|
|
|
- // UpdateUser = "1001"
|
|
|
- // });
|
|
|
- // int i = 1;
|
|
|
- // itemList.Where(a => a.ParentItem == item.ItemNum).ToList()?.ForEach(a =>
|
|
|
- // {
|
|
|
- // string LocationTo = "";
|
|
|
- // if (itemLocList.Where(c => c.ItemNum == a.ComponentItem).ToList().Any())
|
|
|
- // {
|
|
|
- // LocationTo = itemLocList?.Where(c => c.ItemNum == a.ComponentItem).First().Location;
|
|
|
- // }
|
|
|
- // nbrDetailList.Add(new NbrDetail
|
|
|
- // {
|
|
|
- // Domain = "1001",
|
|
|
- // Type = "SM",
|
|
|
- // Nbr = Nbr,
|
|
|
- // ItemNum = a.ComponentItem,
|
|
|
- // QtyFrom = 0,
|
|
|
- // QtyTo = 0,
|
|
|
- // LocationFrom = LocationTo,
|
|
|
- // LocationTo = "",
|
|
|
- // WorkOrd = item.WorkOrds,
|
|
|
- // QtyOrd = item.OrdQty * a.Qty,
|
|
|
- // CurrQtyOpened = item.OrdQty * a.Qty,
|
|
|
- // Line = i,
|
|
|
- // IsActive = true,
|
|
|
- // CreateTmie = DateTime.Now,
|
|
|
- // UpdateTmie = DateTime.Now,
|
|
|
- // CreateUser = "1001",
|
|
|
- // UpdateUser = "1001"
|
|
|
- // });
|
|
|
- // if (dictItemQty.ContainsKey(a.ComponentItem))
|
|
|
- // {
|
|
|
- // dictItemQty[a.ComponentItem] = dictItemQty[a.ComponentItem] + item.OrdQty.Value * a.Qty;
|
|
|
- // }
|
|
|
- // else
|
|
|
- // {
|
|
|
- // dictItemQty.Add(a.ComponentItem, item.OrdQty.Value * a.Qty);
|
|
|
- // }
|
|
|
- // i++;
|
|
|
- // });
|
|
|
- // }
|
|
|
- // _nbrMaster.Insert(nbrMasterList);
|
|
|
- // //快开平台用自增列RecId关联,所以需要插入后再查给明细表赋相应的值
|
|
|
- // List<string> nbrs = nbrMasterList.Select(a => a.Nbr).ToList();
|
|
|
- // var nbrList = _nbrMaster.Select(a => a.Domain == "1001" && a.Type == "SM" && nbrs.Contains(a.Nbr));
|
|
|
- // nbrDetailList.ForEach(c =>
|
|
|
- // {
|
|
|
- // c.NbrRecID = nbrList.Where(a => a.Nbr == c.Nbr).First().RecID;
|
|
|
- // });
|
|
|
- // _nbrDetail.Insert(nbrDetailList);
|
|
|
- // //TODO:
|
|
|
- // //因为我们并没有模拟发料的过程,在自动生成领料单的时候就要扣减库存,实际业务不能这么做。
|
|
|
- // //在有上料和追溯的系统,可以在扫码上料或报工时(从线边仓)扣减。或者在实际发料出库时扣减。
|
|
|
- // List<string> itemKeys = dictItemQty.Keys.ToList();
|
|
|
- // var items = _mysql_ic_item.GetListAsync(a => itemKeys.Contains(a.number) && a.factory_id == 1001 && a.tenant_id == 1000).Result;
|
|
|
- // var itemIds = items.Select(b => b.Id).ToList();
|
|
|
- // var stockList = _mysql_ic_item_stock.GetListAsync(a => itemIds.Contains(a.Id) && a.factory_id == 1001 && a.tenant_id == 1000).Result;
|
|
|
- // stockList?.ForEach(a =>
|
|
|
- // {
|
|
|
- // a.sqty = a.sqty - dictItemQty[items.First(b => b.Id == a.Id).number];
|
|
|
- // });
|
|
|
- // //_mysql_ic_item_stock.UpdateManyAsync(stockList);
|
|
|
- // }
|
|
|
- //}
|
|
|
+ public void AutoCreatePickBill(List<string> workOrds)
|
|
|
+ {
|
|
|
+ //获取生产周期数据
|
|
|
+ List<PeriodSequenceDet> dbPeriodSequences = _periodSequenceDet.Select(p => workOrds.Contains(p.WorkOrds) && p.Domain == "1001" && p.IsActive);
|
|
|
+ List<NbrMaster> nbrMasterList = new List<NbrMaster>();//需要生成领料单列表
|
|
|
+ List<NbrDetail> nbrDetailList = new List<NbrDetail>();//需要生成领料单明细列表
|
|
|
+ if (dbPeriodSequences.Any())
|
|
|
+ {
|
|
|
+ //按照工单领料,一个工单一个领料单,之前是按照排产日期和产线分别领料
|
|
|
+ foreach(var workord in workOrds)
|
|
|
+ {
|
|
|
+ Dictionary<string, decimal> dictItemQty = new Dictionary<string, decimal>();
|
|
|
+ List<string> lines = dbPeriodSequences.Where(a=>a.WorkOrds==workord).Select(a => a.Line).Distinct().ToList();
|
|
|
+ List<LineMaster> lineMasters = _lineMaster.Select(p => lines.Contains(p.Line) && p.Domain == "1001" && p.IsActive);
|
|
|
+ List<ProductStructureMaster> itemList = GetProductStructure(dbPeriodSequences.Where(a => a.WorkOrds == workord).Select(a => a.ItemNum).Distinct().ToList());
|
|
|
+ var childrenList = itemList.Select(a => a.ComponentItem).Distinct().ToList();
|
|
|
+ List<ItemMaster> itemLocList = _itemMaster.Select(p => childrenList.Contains(p.ItemNum) && p.Domain == "1001" && p.IsActive).Distinct().ToList();
|
|
|
+ List<ItemPackMaster> itemPackList = _itemPackMaster.Select(p => childrenList.Contains(p.ItemNum) && p.Domain == "1001" && p.IsActive).Distinct().ToList();
|
|
|
+ var Nbr = GetMaxSerialNumber(417416915624005);
|
|
|
+ //根据某一产线汇总即该工单的总数
|
|
|
+ decimal QtyOrdSum = dbPeriodSequences.Where(a => a.WorkOrds == workord && a.Line == lines[0]).Sum(a => a.OrdQty.GetValueOrDefault());
|
|
|
+ nbrMasterList.Add(new NbrMaster
|
|
|
+ {
|
|
|
+ Domain = "1001",
|
|
|
+ Type = "SM",
|
|
|
+ Nbr = Nbr,
|
|
|
+ Remark = "排产自动领料",
|
|
|
+ Date = dbPeriodSequences.Where(a => a.WorkOrds == workord).Min(a=>a.PlanDate),
|
|
|
+ //ProdLine = item.Line,
|
|
|
+ Status = "",
|
|
|
+ WorkOrd = workord,
|
|
|
+ QtyOrd = QtyOrdSum,
|
|
|
+ IsActive = true,
|
|
|
+ IsChanged = true,
|
|
|
+ Name = "1001",
|
|
|
+ Department = "101",
|
|
|
+ CreateTmie = DateTime.Now,
|
|
|
+ UpdateTmie = DateTime.Now,
|
|
|
+ CreateUser = "1001",
|
|
|
+ UpdateUser = "1001"
|
|
|
+ });
|
|
|
+ int i = 1;
|
|
|
+ itemList?.ForEach(a =>
|
|
|
+ {
|
|
|
+ var find = itemLocList?.Find(c => c.ItemNum == a.ComponentItem);
|
|
|
+ var packfind = itemPackList?.Find(c => c.ItemNum == a.ComponentItem);
|
|
|
+ string LocationTo = "";
|
|
|
+ bool TraceDetail = false;
|
|
|
+ decimal TraceDetailQty = 0m;
|
|
|
+ if (find!=null)
|
|
|
+ {
|
|
|
+ LocationTo=find.Location;
|
|
|
+ TraceDetail=find.TraceDetail;
|
|
|
+ //TraceDetail为true指按需求量,否则按标签
|
|
|
+ if (!TraceDetail)
|
|
|
+ {
|
|
|
+ TraceDetailQty = packfind.PackingQty.GetValueOrDefault();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //相同物料汇总
|
|
|
+ var itemComponent = nbrDetailList.Find(b => b.Nbr == Nbr && b.ItemNum == a.ComponentItem);
|
|
|
+ if (itemComponent==null)
|
|
|
+ {
|
|
|
+ nbrDetailList.Add(new NbrDetail
|
|
|
+ {
|
|
|
+ Domain = "1001",
|
|
|
+ Type = "SM",
|
|
|
+ Nbr = Nbr,
|
|
|
+ ItemNum = a.ComponentItem,
|
|
|
+ QtyFrom = 0,
|
|
|
+ QtyTo = 0,
|
|
|
+ LocationFrom = LocationTo,
|
|
|
+ LocationTo = "",
|
|
|
+ WorkOrd = workord,
|
|
|
+ QtyOrd = TraceDetail?QtyOrdSum * a.Qty: TraceDetailQty,
|
|
|
+ CurrQtyOpened = TraceDetail ? QtyOrdSum * a.Qty : TraceDetailQty,
|
|
|
+ Line = i,
|
|
|
+ IsActive = true,
|
|
|
+ CreateTmie = DateTime.Now,
|
|
|
+ UpdateTmie = DateTime.Now,
|
|
|
+ CreateUser = "1001",
|
|
|
+ UpdateUser = "1001"
|
|
|
+ });
|
|
|
+ i++;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ nbrDetailList.First( b=> b.Nbr == Nbr && b.ItemNum == a.ComponentItem).QtyOrd= itemComponent.QtyOrd+ QtyOrdSum * a.Qty;
|
|
|
+ nbrDetailList.First(b => b.Nbr == Nbr && b.ItemNum == a.ComponentItem).CurrQtyOpened = itemComponent.CurrQtyOpened + QtyOrdSum * a.Qty;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (dictItemQty.ContainsKey(a.ComponentItem))
|
|
|
+ {
|
|
|
+ if(TraceDetail)
|
|
|
+ {
|
|
|
+ dictItemQty[a.ComponentItem] = dictItemQty[a.ComponentItem] + QtyOrdSum * a.Qty;
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ dictItemQty[a.ComponentItem] = dictItemQty[a.ComponentItem] + TraceDetailQty;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (TraceDetail)
|
|
|
+ {
|
|
|
+ dictItemQty.Add(a.ComponentItem, QtyOrdSum * a.Qty);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ dictItemQty.Add(a.ComponentItem, TraceDetailQty);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ List<string> itemKeys = dictItemQty.Keys.ToList();
|
|
|
+ var items = _mysql_ic_item.GetListAsync(a => itemKeys.Contains(a.number) && a.factory_id == 1001 && a.tenant_id == 1000).Result;
|
|
|
+ var itemIds = items.Select(b => b.Id).ToList();
|
|
|
+ var leadTimes = GetLeadTime(itemIds, 1000, 1001).Max(a=>a.ordissu_days.GetValueOrDefault());
|
|
|
+ //没有维护备料提前期,默认取7天
|
|
|
+ if (leadTimes == 0.0M)
|
|
|
+ {
|
|
|
+ nbrMasterList.First(a=>a.Nbr==Nbr).Date= dbPeriodSequences.Where(a => a.WorkOrds == workord).Min(a => a.PlanDate).GetValueOrDefault().AddDays(-7);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ nbrMasterList.First(a => a.Nbr == Nbr).Date = dbPeriodSequences.Where(a => a.WorkOrds == workord).Min(a => a.PlanDate).GetValueOrDefault().AddDays(-1*Convert.ToDouble(leadTimes));
|
|
|
+ }
|
|
|
+ //TODO:
|
|
|
+ //因为我们并没有模拟发料的过程,在自动生成领料单的时候就要扣减库存,实际业务不能这么做。
|
|
|
+ //在有上料和追溯的系统,可以在扫码上料或报工时(从线边仓)扣减。或者在实际发料出库时扣减。
|
|
|
+ var locStock=_locationDetail.Select(a => itemKeys.Contains(a.ItemNum) && a.IsActive && a.Domain == "1001");
|
|
|
+ locStock?.ForEach(a =>
|
|
|
+ {
|
|
|
+ nbrDetailList.ForEach(b =>
|
|
|
+ {
|
|
|
+ if(a.ItemNum==b.ItemNum && a.Location==b.LocationFrom)
|
|
|
+ {
|
|
|
+ a.QtyOnHand = a.QtyOnHand - dictItemQty[a.ItemNum];
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ _locationDetail.Update(locStock);
|
|
|
+ }
|
|
|
+ _nbrMaster.Insert(nbrMasterList);
|
|
|
+ //快开平台用自增列RecId关联,所以需要插入后再查给明细表赋相应的值
|
|
|
+ List<string> nbrs = nbrMasterList.Select(a => a.Nbr).ToList();
|
|
|
+ var nbrList = _nbrMaster.Select(a => a.Domain == "1001" && a.Type == "SM" && nbrs.Contains(a.Nbr));
|
|
|
+ nbrDetailList.ForEach(c =>
|
|
|
+ {
|
|
|
+ c.NbrRecID = nbrList.Where(a => a.Nbr == c.Nbr).First().RecID;
|
|
|
+ });
|
|
|
+ _nbrDetail.Insert(nbrDetailList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void AsyncItemStockFromWMS(List<crm_seorderentry> sentrys)
|
|
|
+ {
|
|
|
+ //产品编码
|
|
|
+ var itemList = sentrys.Select(a => a.item_number).Distinct().ToList();
|
|
|
+ List<string> itemChildList = new List<string>();
|
|
|
+ itemList.ForEach(a =>
|
|
|
+ {
|
|
|
+ itemChildList.AddRange(GetChildItemNumber(a, new List<string>()));
|
|
|
+ });
|
|
|
+ var stockList = _locationDetail.Select(a => a.Domain == "1001" && a.IsActive && itemChildList.Distinct().Contains(a.ItemNum));
|
|
|
+ var groupList = stockList.
|
|
|
+ GroupBy(m => new { m.ItemNum }).
|
|
|
+ Select(a => new { ItemNum = a.Key.ItemNum, Qty = a.Sum(c => c.QtyOnHand) }).ToList();
|
|
|
+ var itemNums = groupList.Select(b => b.ItemNum).ToList();//需要处理的dop物料编码集合
|
|
|
+ var items = _mysql_ic_item.GetListAsync(a => itemNums.Contains(a.number) && a.factory_id == 1001 && a.tenant_id == 1000).Result;
|
|
|
+ var itemIds = items.Select(b => b.Id).ToList();//需要处理的dop物料id集合
|
|
|
+ List<ic_item_stock> mysqlStock = _mysql_ic_item_stock.GetListAsync(a => itemIds.Contains(a.Id) && a.factory_id == 1001 && a.tenant_id == 1000).Result;
|
|
|
+ List<ic_item_stock> needAddList = new List<ic_item_stock>();
|
|
|
+
|
|
|
+ foreach(var stockWMS in groupList)
|
|
|
+ {
|
|
|
+ foreach (var num in items)
|
|
|
+ {
|
|
|
+ if (stockWMS.ItemNum==num.number)
|
|
|
+ {
|
|
|
+ var item = mysqlStock.Find(a => a.Id == num.Id);
|
|
|
+ if(item!=null)
|
|
|
+ {
|
|
|
+ item.sqty = groupList.First(a => a.ItemNum == num.number).Qty;
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ ic_item_stock stock= new ic_item_stock();
|
|
|
+ stock.GenerateNewId();
|
|
|
+ stock.factory_id = 1001;
|
|
|
+ stock.tenant_id = 1000;
|
|
|
+ stock.icitem_id = num.Id;
|
|
|
+ stock.icitem_name = num.name;
|
|
|
+ stock.sqty= groupList.First(a => a.ItemNum == num.number).Qty;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ }
|
|
|
+ if(needAddList.Count>0)
|
|
|
+ {
|
|
|
+ _businessDbContext.BulkInsert(needAddList);
|
|
|
+ }
|
|
|
+ _businessDbContext.BulkUpdate(mysqlStock);
|
|
|
+ }
|
|
|
+ //循环获取子级物料编码,包括产品本身,有重复的结果去重即可
|
|
|
+ public List<string> GetChildItemNumber(string itemNum,List<string> list)
|
|
|
+ {
|
|
|
+ list.Add(itemNum);
|
|
|
+ var productStructures = _productStructureMaster.Select(p =>p.ParentItem== itemNum && p.Domain == "1001" && p.IsActive);
|
|
|
+ list.AddRange(productStructures.Select(a=>a.ComponentItem));
|
|
|
+ foreach (var item in productStructures)
|
|
|
+ {
|
|
|
+ if(item.StructureType.ToUpper()=="X")
|
|
|
+ {
|
|
|
+ GetChildItemNumber(item.ComponentItem, list);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 得到一个流水号的最大流水号
|
|
|
@@ -2184,6 +2310,7 @@ namespace Business.ResourceExamineManagement
|
|
|
var workOrdMasters = _workOrdMaster.Select(p => workOrds.Contains(p.WorkOrd));
|
|
|
//排产
|
|
|
await _productionScheduleAppService.DoProductShcedule(workOrdMasters);
|
|
|
+ AutoCreatePickBill(workOrds);
|
|
|
return JsonConvert.SerializeObject("ok");
|
|
|
}
|
|
|
|
|
|
@@ -2303,7 +2430,7 @@ namespace Business.ResourceExamineManagement
|
|
|
public void RecursionProductStructure(string parentItem, List<ProductStructureMaster> structures, List<ProductStructureMaster> rtnStructures)
|
|
|
{
|
|
|
//获取虚拟件的子物料
|
|
|
- var chdStructures = _productStructureMaster.Select(p => structures.Select(m => m.ComponentItem).Contains(p.ParentItem) && p.Domain == "1001" && p.IsActive);
|
|
|
+ List<ProductStructureMaster> chdStructures = _productStructureMaster.Select(p => structures.Select(m => m.ComponentItem).Contains(p.ParentItem) && p.Domain == "1001" && p.IsActive);
|
|
|
//非虚拟件
|
|
|
var notPhantoms = chdStructures.Where(p => p.StructureType.ToUpper() != "X").ToList();
|
|
|
//存在非虚拟件
|