|
|
@@ -255,17 +255,17 @@ namespace Business.ResourceExamineManagement
|
|
|
/// <summary>
|
|
|
/// 工单工序表
|
|
|
/// </summary>
|
|
|
- private readonly ISqlRepository<WorkOrdRouting> _workOrdRouting;
|
|
|
+ private ISqlRepository<WorkOrdRouting> _workOrdRouting;
|
|
|
|
|
|
/// <summary>
|
|
|
/// 工单主表
|
|
|
/// </summary>
|
|
|
- private readonly ISqlRepository<WorkOrdMaster> _workOrdMaster;
|
|
|
+ private ISqlRepository<WorkOrdMaster> _workOrdMaster;
|
|
|
|
|
|
/// <summary>
|
|
|
/// 工单物料明细
|
|
|
/// </summary>
|
|
|
- private readonly ISqlRepository<WorkOrdDetail> _workOrdDetail;
|
|
|
+ private ISqlRepository<WorkOrdDetail> _workOrdDetail;
|
|
|
|
|
|
private readonly ISqlRepository<rf_serialnumber> _rf_serialnumber;
|
|
|
private readonly ISqlRepository<LocationDetail> _locationDetail;
|
|
|
@@ -325,6 +325,36 @@ namespace Business.ResourceExamineManagement
|
|
|
/// 产能检查
|
|
|
/// </summary>
|
|
|
private readonly ProductExamineAppService _productExamineAppService;
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 生产线明细表
|
|
|
+ /// </summary>
|
|
|
+ public List<ProdLineDetail> prodLines = new List<ProdLineDetail>();
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 标准工艺路径表
|
|
|
+ /// </summary>
|
|
|
+ public List<RoutingOpDetail> routingOps = new List<RoutingOpDetail>();
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 排产记录表
|
|
|
+ /// </summary>
|
|
|
+ public List<PeriodSequenceDet> periodSequences = new List<PeriodSequenceDet>();
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 工作日历
|
|
|
+ /// </summary>
|
|
|
+ public List<ShopCalendarWorkCtr> calendarWorks = new List<ShopCalendarWorkCtr>();
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 休息时间段
|
|
|
+ /// </summary>
|
|
|
+ public List<QualityLineWorkDetail> qualityLineWorks = new List<QualityLineWorkDetail>();
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 节假日
|
|
|
+ /// </summary>
|
|
|
+ public List<HolidayMaster> holidays = new List<HolidayMaster>();
|
|
|
#endregion
|
|
|
|
|
|
#region 构造函数
|
|
|
@@ -1161,13 +1191,14 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
List<mo_srm_po_main> polist = new List<mo_srm_po_main>();
|
|
|
List<mo_srm_po_list> podetaillist = new List<mo_srm_po_list>();
|
|
|
+ var itemList = _ic_item.Find(a => a.tenant_id == input.tenantId && a.factory_id == input.factoryId).Result;
|
|
|
//将PR按供应商和物料和日期(一周内)进行合并,生成PO
|
|
|
//1.按照供应商、需求日期排序
|
|
|
//2.判断是不是同一个供应商,不是的话就新建一个PO;是的话判断是不是同一周,不是的话就新建一个PO,是的话判断有没有相同物料,有的话合并物料数量价格,没有的话新建一条明细
|
|
|
list = list.OrderBy(a => a.pr_purchaseid).ThenBy(b => b.pr_rarrive_date).ToList();
|
|
|
long? supplierId = -1;
|
|
|
DateTime supplierDate = DateTime.Now;
|
|
|
- foreach (var item in list)
|
|
|
+ foreach (mo_srm_pr_main item in list)
|
|
|
{
|
|
|
if (item.pr_purchaseid != supplierId)
|
|
|
{
|
|
|
@@ -1216,6 +1247,7 @@ namespace Business.ResourceExamineManagement
|
|
|
podetail.pr_purchase_id = po_Main.supplier_id;
|
|
|
podetail.pr_purchase_name = po_Main.supplier_name;
|
|
|
podetail.icitem_id = item.icitem_id;
|
|
|
+ podetail.ItemNum = itemList.First(a => a.mysql_id == item.icitem_id).number;
|
|
|
podetail.icitem_name = item.icitem_name;
|
|
|
podetail.qty = item.pr_aqty;
|
|
|
podetail.netprice = item.pr_price;
|
|
|
@@ -1270,6 +1302,7 @@ namespace Business.ResourceExamineManagement
|
|
|
podetail.pr_purchase_id = pomain.supplier_id;
|
|
|
podetail.pr_purchase_name = pomain.supplier_name;
|
|
|
podetail.icitem_id = item.icitem_id;
|
|
|
+ podetail.ItemNum = itemList.First(a => a.mysql_id == item.icitem_id).number;
|
|
|
podetail.icitem_name = item.icitem_name;
|
|
|
podetail.qty = item.pr_aqty;
|
|
|
podetail.netprice = item.pr_price;
|
|
|
@@ -1340,6 +1373,7 @@ namespace Business.ResourceExamineManagement
|
|
|
podetail.pr_purchase_id = po_Main.supplier_id;
|
|
|
podetail.pr_purchase_name = po_Main.supplier_name;
|
|
|
podetail.icitem_id = item.icitem_id;
|
|
|
+ podetail.ItemNum = itemList.First(a => a.mysql_id == item.icitem_id).number;
|
|
|
podetail.icitem_name = item.icitem_name;
|
|
|
podetail.qty = item.pr_aqty;
|
|
|
podetail.netprice = item.pr_price;
|
|
|
@@ -1375,6 +1409,7 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
List<mo_srm_po_main> polist = new List<mo_srm_po_main>();
|
|
|
List<mo_srm_po_list> podetaillist = new List<mo_srm_po_list>();
|
|
|
+ var itemList = _ic_item.Find(a => a.tenant_id == input.tenantId && a.factory_id == input.factoryId).Result;
|
|
|
//将PR按供应商和物料和日期(一周内)进行合并,生成PO
|
|
|
//1.按照供应商、需求日期排序
|
|
|
//2.判断是不是同一个供应商,不是的话就新建一个PO;是的话判断是不是同一周,不是的话就新建一个PO,是的话判断有没有相同物料,有的话合并物料数量价格,没有的话新建一条明细
|
|
|
@@ -1430,6 +1465,7 @@ namespace Business.ResourceExamineManagement
|
|
|
podetail.pr_purchase_id = po_Main.supplier_id;
|
|
|
podetail.pr_purchase_name = po_Main.supplier_name;
|
|
|
podetail.icitem_id = item.icitem_id;
|
|
|
+ podetail.ItemNum = itemList.First(a => a.mysql_id == item.icitem_id).number;
|
|
|
podetail.icitem_name = item.icitem_name;
|
|
|
podetail.qty = item.pr_aqty;
|
|
|
podetail.netprice = item.pr_price;
|
|
|
@@ -1484,6 +1520,7 @@ namespace Business.ResourceExamineManagement
|
|
|
podetail.pr_purchase_id = pomain.supplier_id;
|
|
|
podetail.pr_purchase_name = pomain.supplier_name;
|
|
|
podetail.icitem_id = item.icitem_id;
|
|
|
+ podetail.ItemNum = itemList.First(a => a.mysql_id == item.icitem_id).number;
|
|
|
podetail.icitem_name = item.icitem_name;
|
|
|
podetail.qty = item.pr_aqty;
|
|
|
podetail.netprice = item.pr_price;
|
|
|
@@ -1554,6 +1591,7 @@ namespace Business.ResourceExamineManagement
|
|
|
podetail.pr_purchase_id = po_Main.supplier_id;
|
|
|
podetail.pr_purchase_name = po_Main.supplier_name;
|
|
|
podetail.icitem_id = item.icitem_id;
|
|
|
+ podetail.ItemNum = itemList.First(a => a.mysql_id == item.icitem_id).number;
|
|
|
podetail.icitem_name = item.icitem_name;
|
|
|
podetail.qty = item.pr_aqty;
|
|
|
podetail.netprice = item.pr_price;
|
|
|
@@ -1916,16 +1954,16 @@ namespace Business.ResourceExamineManagement
|
|
|
//产品物料编码
|
|
|
List<string> itemnums = pretreatments.Where(p => p.level == 1).Select(p => p.item_number).Distinct().ToList();
|
|
|
//产线明细
|
|
|
- List<ProdLineDetail> prodLines = _prodLineDetail.Select(p=> itemnums.Contains(p.Part)).ToList();
|
|
|
- //标注工序
|
|
|
- List<RoutingOpDetail> routingOps = _routingOpDetail.Select(p => itemnums.Contains(p.RoutingCode)).ToList();
|
|
|
+ prodLines = _prodLineDetail.Select(p=> itemnums.Contains(p.Part)).ToList();
|
|
|
+ //标准工序
|
|
|
+ routingOps = _routingOpDetail.Select(p => itemnums.Contains(p.RoutingCode)).ToList();
|
|
|
List<string> lines = prodLines.Select(p=>p.Line).Distinct().ToList();
|
|
|
//工作日历
|
|
|
- List<ShopCalendarWorkCtr> calendarWorks = _shopCalendarWorkCtr.Select(p=>lines.Contains(p.ProdLine)).ToList();
|
|
|
+ calendarWorks = _shopCalendarWorkCtr.Select(p=>lines.Contains(p.ProdLine)).ToList();
|
|
|
//休息日
|
|
|
- List<QualityLineWorkDetail> qualityLineWorks = _qualityLineWorkDetail.Select(p => lines.Contains(p.ProdLine)).ToList();
|
|
|
+ qualityLineWorks = _qualityLineWorkDetail.Select(p => lines.Contains(p.ProdLine)).ToList();
|
|
|
//节假日
|
|
|
- List<HolidayMaster> holidays = _holidayMaster.Select(p => p.Dated >= DateTime.Now.Date);
|
|
|
+ holidays = _holidayMaster.Select(p => p.Dated >= DateTime.Now.Date);
|
|
|
|
|
|
//主工单
|
|
|
List<mo_mes_morder> mo_Mes_Morders = _mes_morder.GetManyByCondition(x => boms.Select(p => p.bom_number).Contains(x.bom_number) && (x.morder_state != MorderEnum.Accomplish_state || x.morder_state != MorderEnum.Close_state
|
|
|
@@ -2131,19 +2169,10 @@ namespace Business.ResourceExamineManagement
|
|
|
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);
|
|
|
@@ -2160,14 +2189,15 @@ namespace Business.ResourceExamineManagement
|
|
|
LocationFrom = LocationTo,
|
|
|
LocationTo = "",
|
|
|
WorkOrd = workord,
|
|
|
- QtyOrd = TraceDetail?QtyOrdSum * a.Qty: TraceDetailQty,
|
|
|
- CurrQtyOpened = TraceDetail ? QtyOrdSum * a.Qty : TraceDetailQty,
|
|
|
+ QtyOrd =QtyOrdSum * a.Qty,
|
|
|
+ CurrQtyOpened = QtyOrdSum * a.Qty ,
|
|
|
Line = i,
|
|
|
IsActive = true,
|
|
|
CreateTmie = DateTime.Now,
|
|
|
UpdateTmie = DateTime.Now,
|
|
|
CreateUser = "1001",
|
|
|
- UpdateUser = "1001"
|
|
|
+ UpdateUser = "1001",
|
|
|
+ UM = a.UM
|
|
|
});
|
|
|
i++;
|
|
|
}
|
|
|
@@ -2176,42 +2206,34 @@ namespace Business.ResourceExamineManagement
|
|
|
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))
|
|
|
+ });
|
|
|
+ nbrDetailList.ForEach(a =>
|
|
|
+ {
|
|
|
+ var find = itemLocList?.Find(c => c.ItemNum == a.ItemNum);
|
|
|
+ var packfind = itemPackList?.Find(c => c.ItemNum == a.ItemNum);
|
|
|
+ if(find!=null && !find.TraceDetail && packfind!=null && packfind.PackingQty>0)
|
|
|
{
|
|
|
- if(TraceDetail)
|
|
|
- {
|
|
|
- dictItemQty[a.ComponentItem] = dictItemQty[a.ComponentItem] + QtyOrdSum * a.Qty;
|
|
|
- }else
|
|
|
- {
|
|
|
- dictItemQty[a.ComponentItem] = dictItemQty[a.ComponentItem] + TraceDetailQty;
|
|
|
- }
|
|
|
+ a.CurrQtyOpened = Math.Ceiling(a.CurrQtyOpened.GetValueOrDefault() / packfind.PackingQty.GetValueOrDefault()) * packfind.PackingQty;
|
|
|
+ dictItemQty.Add(a.ItemNum, QtyOrdSum * itemList.First(b => b.ComponentItem == a.ItemNum).Qty);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- if (TraceDetail)
|
|
|
- {
|
|
|
- dictItemQty.Add(a.ComponentItem, QtyOrdSum * a.Qty);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- dictItemQty.Add(a.ComponentItem, TraceDetailQty);
|
|
|
- }
|
|
|
+ dictItemQty.Add(a.ItemNum, QtyOrdSum * itemList.First(b => b.ComponentItem == a.ItemNum).Qty);
|
|
|
}
|
|
|
});
|
|
|
-
|
|
|
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());
|
|
|
+ //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());
|
|
|
+ decimal leadTimes=itemLocList.Select(a => a.MFGMTTR).Max();
|
|
|
//没有维护备料提前期,默认取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);
|
|
|
+ if (leadTimes > 0)
|
|
|
+ {
|
|
|
+ nbrMasterList.First(a => a.Nbr == Nbr).Date = dbPeriodSequences.Where(a => a.WorkOrds == workord).Min(a => a.PlanDate).GetValueOrDefault().AddDays(-1 * Convert.ToDouble(leadTimes));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- nbrMasterList.First(a => a.Nbr == Nbr).Date = dbPeriodSequences.Where(a => a.WorkOrds == workord).Min(a => a.PlanDate).GetValueOrDefault().AddDays(-1*Convert.ToDouble(leadTimes));
|
|
|
+ nbrMasterList.First(a => a.Nbr == Nbr).Date = dbPeriodSequences.Where(a => a.WorkOrds == workord).Min(a => a.PlanDate).GetValueOrDefault().AddDays(-7);
|
|
|
}
|
|
|
//TODO:
|
|
|
//因为我们并没有模拟发料的过程,在自动生成领料单的时候就要扣减库存,实际业务不能这么做。
|
|
|
@@ -2221,7 +2243,7 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
nbrDetailList.ForEach(b =>
|
|
|
{
|
|
|
- if(a.ItemNum==b.ItemNum && a.Location==b.LocationFrom)
|
|
|
+ if(a.ItemNum==b.ItemNum && a.Location==b.LocationFrom && a.QtyOnHand - dictItemQty[a.ItemNum] > 0)
|
|
|
{
|
|
|
a.QtyOnHand = a.QtyOnHand - dictItemQty[a.ItemNum];
|
|
|
}
|
|
|
@@ -2390,6 +2412,7 @@ namespace Business.ResourceExamineManagement
|
|
|
List<RoutingOpDetail> allRoutings = _routingOpDetail.Select(p => morders.Select(m => m.product_code).Contains(p.RoutingCode));
|
|
|
//获取标准BOM数据
|
|
|
List<ProductStructureMaster> productStructures = GetProductStructure(morders.Select(p => p.product_code).Distinct().ToList());
|
|
|
+
|
|
|
//工单主表
|
|
|
List<WorkOrdMaster> workOrds = new List<WorkOrdMaster>();
|
|
|
WorkOrdMaster workOrd;
|
|
|
@@ -2412,11 +2435,11 @@ namespace Business.ResourceExamineManagement
|
|
|
workOrd.RoutingCode = item.product_code;
|
|
|
workOrd.Period = 1;
|
|
|
workOrd.Priority = item.urgent;
|
|
|
- workOrd.Status = "";
|
|
|
+ workOrd.Status = " ";
|
|
|
workOrd.IsActive = true;
|
|
|
workOrd.IsConfirm = true;
|
|
|
workOrds.Add(workOrd);
|
|
|
-
|
|
|
+
|
|
|
//添加工单工艺路线数据
|
|
|
var curRoutings = allRoutings.Where(p => p.RoutingCode == item.product_code).ToList();
|
|
|
foreach (var dtl in curRoutings)
|
|
|
@@ -2455,7 +2478,6 @@ namespace Business.ResourceExamineManagement
|
|
|
workOrdDetails.Add(woDetail);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
_workOrdMaster.Insert(workOrds);
|
|
|
_workOrdRouting.Insert(workOrdRoutings);
|
|
|
_workOrdDetail.Insert(workOrdDetails);
|
|
|
@@ -2528,6 +2550,13 @@ namespace Business.ResourceExamineManagement
|
|
|
List<string> itemNums = sentrys.Select(p=>p.item_number).Distinct().ToList();
|
|
|
DateTime eralist = kittingTimes.Min(p => p.kitting_time).Date;
|
|
|
List<PeriodSequenceDet> periodSequences = _periodSequenceDet.Select(p => itemNums.Contains(p.ItemNum) && p.PlanDate >= eralist).ToList();
|
|
|
+
|
|
|
+ //资源检查添加产线工序等数据
|
|
|
+ _productExamineAppService.prodLines = prodLines;
|
|
|
+ _productExamineAppService.routingOps = routingOps;
|
|
|
+ _productExamineAppService.calendarWorks = calendarWorks;
|
|
|
+ _productExamineAppService.qualityLineWorks = qualityLineWorks;
|
|
|
+ _productExamineAppService.holidays = holidays;
|
|
|
_productExamineAppService.periodSequences = periodSequences;
|
|
|
if (sentrys.Count() == 0)
|
|
|
{
|