|
|
@@ -153,6 +153,15 @@ namespace Business.ResourceExamineManagement
|
|
|
//先处理下最顶级的产品需要数量
|
|
|
|
|
|
level1Dto.needCount = level1Dto.qty * count;
|
|
|
+ //直接占用库存,缺料就生成采购
|
|
|
+ mo_ic_item_stockoccupy itemStockoccupyDto = new mo_ic_item_stockoccupy();
|
|
|
+ itemStockoccupyDto.bang_id = bangid;
|
|
|
+ itemStockoccupyDto.icitem_id = level1Dto.item_id;
|
|
|
+ itemStockoccupyDto.item_no = level1Dto.num;
|
|
|
+ if (sentrys != null)
|
|
|
+ {
|
|
|
+ itemStockoccupyDto.orderentry_id = sentrys.Id;
|
|
|
+ }
|
|
|
if (param.checkflag)
|
|
|
{
|
|
|
//找到当前物料的占用记录
|
|
|
@@ -161,6 +170,19 @@ namespace Business.ResourceExamineManagement
|
|
|
level1Dto.sqty -= itemSockoccupy.Sum(s => s.quantity);
|
|
|
level1Dto.sqty = level1Dto.sqty < 0 ? 0 : level1Dto.sqty;
|
|
|
level1Dto.lack_qty = level1Dto.needCount - level1Dto.sqty;
|
|
|
+ level1Dto.lack_qty = level1Dto.lack_qty < 0 ? 0 : level1Dto.lack_qty;
|
|
|
+ if (level1Dto.sqty != 0)
|
|
|
+ {
|
|
|
+ if (level1Dto.lack_qty > 0)
|
|
|
+ {
|
|
|
+ level1Dto.use_qty = level1Dto.sqty;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ level1Dto.use_qty = level1Dto.needCount;
|
|
|
+ }
|
|
|
+ itemStockoccupyDto.quantity = level1Dto.sqty;
|
|
|
+ sklist.Add(itemStockoccupyDto);
|
|
|
+ }
|
|
|
}
|
|
|
else {
|
|
|
level1Dto.lack_qty = level1Dto.needCount;
|
|
|
@@ -170,26 +192,9 @@ namespace Business.ResourceExamineManagement
|
|
|
//平铺需要数量
|
|
|
CaclMaterialShortage(returnlist);
|
|
|
|
|
|
- Mes_MorderDto mes_MorderDto = null;
|
|
|
level1Dto.is_use = true;
|
|
|
if (level1Dto.lack_qty > 0)
|
|
|
{
|
|
|
- //直接占用库存,缺料就生成采购
|
|
|
- mo_ic_item_stockoccupy itemStockoccupyDto = new mo_ic_item_stockoccupy();
|
|
|
- itemStockoccupyDto.bang_id = bangid;
|
|
|
- itemStockoccupyDto.icitem_id = level1Dto.item_id;
|
|
|
- itemStockoccupyDto.item_no = level1Dto.num;
|
|
|
- if (sentrys != null)
|
|
|
- {
|
|
|
- itemStockoccupyDto.orderentry_id = sentrys.Id;
|
|
|
- }
|
|
|
- if (level1Dto.sqty != 0 && param.checkflag)
|
|
|
- {
|
|
|
- level1Dto.use_qty = level1Dto.sqty;
|
|
|
- itemStockoccupyDto.quantity = level1Dto.sqty;
|
|
|
- sklist.Add(itemStockoccupyDto);
|
|
|
- }
|
|
|
-
|
|
|
//获取物料详情
|
|
|
var ic_item = icitemlist.Find(s => s.mysql_id == level1Dto.item_id);
|
|
|
_morderAppService.mo_Mes_Morders = mordersList;//工单
|
|
|
@@ -238,31 +243,68 @@ namespace Business.ResourceExamineManagement
|
|
|
//先设定在制的齐套时间
|
|
|
//level1Dto.satisfy_time = mooccupylist[0]?.moo_etime;
|
|
|
level1Dto.stock_state = 0;
|
|
|
- level1Dto.make_qty = level1Dto.lack_qty;
|
|
|
+
|
|
|
if (param.checkflag)
|
|
|
{
|
|
|
- //生成主工单
|
|
|
- GenerateMorderDto generateMorderDto = new GenerateMorderDto()
|
|
|
+ //根据成品属性来判断是自制还是委外还是外购,需要考虑这种场景
|
|
|
+ if (level1Dto.erp_cls == 1)
|
|
|
{
|
|
|
- seorderentry = sentrys,
|
|
|
- seorder = seorder,
|
|
|
- ic_Item = ic_item,
|
|
|
- BomNumber = level1Dto.bom_number,
|
|
|
- version = level1Dto.version,
|
|
|
- number = level1Dto.item_number,
|
|
|
- Quantity = level1Dto.lack_qty,
|
|
|
- morder_type = MorderEnum.XsMorder,
|
|
|
- work_order_type = MorderEnum.CgMorder,
|
|
|
- morder_state = MorderEnum.Initial_state,
|
|
|
- bang_id = bangid,
|
|
|
+ level1Dto.make_qty = level1Dto.lack_qty;
|
|
|
+ //生成主工单
|
|
|
+ GenerateMorderDto generateMorderDto = new GenerateMorderDto()
|
|
|
+ {
|
|
|
+ seorderentry = sentrys,
|
|
|
+ seorder = seorder,
|
|
|
+ ic_Item = ic_item,
|
|
|
+ BomNumber = level1Dto.bom_number,
|
|
|
+ version = level1Dto.version,
|
|
|
+ number = level1Dto.item_number,
|
|
|
+ Quantity = level1Dto.lack_qty,
|
|
|
+ morder_type = MorderEnum.XsMorder,
|
|
|
+ work_order_type = MorderEnum.CgMorder,
|
|
|
+ morder_state = MorderEnum.Initial_state,
|
|
|
+ bang_id = bangid
|
|
|
+ };
|
|
|
+ CreateMainOrder(generateMorderDto, level1Dto, childList, returnlist, bangid, plan_date, sklist, sentrys, icitemlist);
|
|
|
+ }
|
|
|
+ else if (level1Dto.erp_cls == 3)
|
|
|
+ {
|
|
|
+ //采购申请
|
|
|
+ PackageSRMPR(level1Dto, bangid, plan_date);
|
|
|
+ }
|
|
|
+ else if (level1Dto.erp_cls == 2)
|
|
|
+ {
|
|
|
+ //先计算末级数据的齐套时间。
|
|
|
+ if (childList.Count() > 0)
|
|
|
+ {
|
|
|
+ MatterTileDevelop(level1Dto, childList, returnlist, sklist, bangid, plan_date, sentrys, icitemlist);
|
|
|
+ level1Dto.kitting_time = childList.Max(s => s.kitting_time);
|
|
|
+ }
|
|
|
+ //1.先生成委外工单。
|
|
|
+ var mesorder = CreateMesOOder(level1Dto, param.tenantId, param.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
|
|
|
+ level1Dto.subcontracting_qty = level1Dto.lack_qty;
|
|
|
+ level1Dto.subcontracting_list = new List<ooder>();
|
|
|
+ ooder oo = new ooder();
|
|
|
+ oo.Id = mesorder.id;
|
|
|
+ oo.morder_production_number = mesorder.morder_production_number;
|
|
|
+ oo.production_unit = mesorder.production_unit;
|
|
|
+ oo.production_unit_code = mesorder.production_unit_code;
|
|
|
+ oo.ooentry_prdname = mesorder.ooentry_prdname;
|
|
|
+ oo.ooentry_stime = mesorder.ooentry_stime;
|
|
|
+ oo.ooentry_etime = mesorder.ooentry_etime;
|
|
|
+ oo.oorder_date = mesorder.oorder_date;
|
|
|
+ oo.oorder_no = mesorder.oorder_no;
|
|
|
+ level1Dto.subcontracting_list.Add(oo);
|
|
|
+ level1Dto.kitting_time = mesorder.ooentry_etime;
|
|
|
+ orderList.Add(mesorder);
|
|
|
+ //2.生成采购申请
|
|
|
+ //采购申请
|
|
|
+ PackageSRMPR(level1Dto, bangid, plan_date);
|
|
|
|
|
|
- };
|
|
|
- //生成主工单
|
|
|
- _morderAppService.process = process;
|
|
|
- _morderAppService.techs = techs;
|
|
|
- _morderAppService.tech_Processes = tech_Processes;
|
|
|
- _morderAppService.tech_Proc_Workshops = tech_Proc_Workshops;
|
|
|
- mes_MorderDto = _morderAppService.GenerateMorder(generateMorderDto);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ MatterTileDevelop(level1Dto, childList, returnlist, sklist, bangid, plan_date, sentrys, icitemlist);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -275,7 +317,20 @@ namespace Business.ResourceExamineManagement
|
|
|
level1Dto.stock_state = 1;
|
|
|
return;
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 生成主工单
|
|
|
+ /// </summary>
|
|
|
+ public void CreateMainOrder(GenerateMorderDto generateMorderDto, BomChildExamineDto level1Dto, List<BomChildExamineDto> childList, List<BomChildExamineDto> returnlist, long bangid, DateTime
|
|
|
+ ? plan_date, List<mo_ic_item_stockoccupy> sklist, crm_seorderentry sentrys, List<mo_ic_item> icitemlist)
|
|
|
+ {
|
|
|
+ //生成主工单
|
|
|
+ _morderAppService.process = process;
|
|
|
+ _morderAppService.techs = techs;
|
|
|
+ _morderAppService.tech_Processes = tech_Processes;
|
|
|
+ _morderAppService.tech_Proc_Workshops = tech_Proc_Workshops;
|
|
|
+ Mes_MorderDto mes_MorderDto = _morderAppService.GenerateMorder(generateMorderDto);
|
|
|
MatterTileDevelop(level1Dto, childList, returnlist, sklist, bangid, plan_date, sentrys, icitemlist);
|
|
|
//这里更新产品得满足时间。
|
|
|
if (mes_MorderDto != null)
|
|
|
@@ -301,7 +356,7 @@ namespace Business.ResourceExamineManagement
|
|
|
var plan = planList.Find(x => x.icitem_id == level1Dto.item_id);
|
|
|
var ProductiveDate = _productExamineAppService.ProductiveExamine(prodExamine);
|
|
|
var Day = ProductiveDate / (60 * 10); //返回的分钟除以十个小时得出工作天数;
|
|
|
- mes_Morders.moentry_sys_stime = childList.Max(s=>s.kitting_time.GetValueOrDefault()).AddDays(1);//数据齐套完成后隔天开始生产;
|
|
|
+ mes_Morders.moentry_sys_stime = childList.Max(s => s.kitting_time.GetValueOrDefault()).AddDays(1);//数据齐套完成后隔天开始生产;
|
|
|
//结束日期=开始时间+生产时长+自检提前期+入库提前期+发运提前期;
|
|
|
var LeadTime = 0.00m;
|
|
|
if (plan != null)
|
|
|
@@ -345,6 +400,7 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 物料计算
|
|
|
/// </summary>
|
|
|
@@ -636,6 +692,7 @@ namespace Business.ResourceExamineManagement
|
|
|
if (parent != null)
|
|
|
{
|
|
|
item.use_qty = parent.lack_qty * item.qty;
|
|
|
+ item.kitting_time = DateTime.Now;
|
|
|
itemStockoccupyDto.quantity = item.use_qty;
|
|
|
}
|
|
|
sklist.Add(itemStockoccupyDto);
|
|
|
@@ -750,6 +807,7 @@ namespace Business.ResourceExamineManagement
|
|
|
//占用库存
|
|
|
foreach (var slt in select)
|
|
|
{
|
|
|
+ slt.self_lack_qty = parent.lack_qty * slt.qty;
|
|
|
mo_ic_item_stockoccupy itemStockoccupyDto = new mo_ic_item_stockoccupy();
|
|
|
itemStockoccupyDto.bang_id = bangid;
|
|
|
itemStockoccupyDto.icitem_id = slt.item_id;
|
|
|
@@ -1213,7 +1271,6 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
//采购申请
|
|
|
var SRMPRDto = CreateSRMPR(item, param.tenantId, param.factoryId, bangid, item.erp_cls, leadTimeList, supplierList, planList, plan_date.Value);
|
|
|
- item.purchase_qty = item.lack_qty;
|
|
|
item.purchase_list = new List<purchase>();
|
|
|
if (SRMPRDto.srm_Pr_Main != null)
|
|
|
{
|
|
|
@@ -1238,7 +1295,12 @@ namespace Business.ResourceExamineManagement
|
|
|
item.purchase_list.Add(pur);
|
|
|
}
|
|
|
}
|
|
|
- item.kitting_time = SRMPRDto.lastStartTmie;
|
|
|
+ if (item.erp_cls == 3)
|
|
|
+ {
|
|
|
+ item.purchase_qty = item.lack_qty;
|
|
|
+ item.purchase_list = new List<purchase>();
|
|
|
+ item.kitting_time = SRMPRDto.lastStartTmie;
|
|
|
+ }
|
|
|
SRMPRDtoList.Add(SRMPRDto);
|
|
|
}
|
|
|
}
|