|
|
@@ -211,10 +211,6 @@ namespace Business.ResourceExamineManagement
|
|
|
private List<ic_item_pur> supplierList;
|
|
|
|
|
|
private List<ic_plan> planList;
|
|
|
-
|
|
|
- private List<SRMPRDto> SRMPRDtoList = new List<SRMPRDto>();
|
|
|
-
|
|
|
- private List<mes_oorder> orderList = new List<mes_oorder>();
|
|
|
#endregion
|
|
|
|
|
|
#region 构造函数
|
|
|
@@ -417,8 +413,6 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
//订单行资源检查明细list
|
|
|
rtn.examines = examines;
|
|
|
- rtn.srm_pr_list = SRMPRDtoList;
|
|
|
- rtn.order_list = orderList;
|
|
|
rtn.sklist = sklist;
|
|
|
return JsonConvert.SerializeObject(rtn);
|
|
|
}
|
|
|
@@ -714,12 +708,12 @@ namespace Business.ResourceExamineManagement
|
|
|
foreach (var item in returnlist)
|
|
|
{
|
|
|
//最顶级、虚拟件
|
|
|
- if (item.level == 1 || item.erp_cls == 4 || childidList.Contains(item.bom_child_id.GetValueOrDefault()))
|
|
|
+ if (item.level == 1 || item.erp_cls == 4 || !childidList.Contains(item.bom_child_id.GetValueOrDefault()))
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
//有替代关系
|
|
|
- if (item.haveicsubs != 1)
|
|
|
+ if (item.haveicsubs == 1)
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
@@ -878,7 +872,7 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
//第一级
|
|
|
returnlist = returnlist.OrderBy(s => s.num).ToList();
|
|
|
- var childList = returnlist.Where(s => s.parent_id == returnlist[0].id && s.type == 0).OrderBy(s => s.num).ToList();
|
|
|
+ var childList = returnlist.Where(s => s.parent_id == returnlist[0].id && s.type == 0).ToList();
|
|
|
|
|
|
var planList = GetICPlan(returnlist.Select(p => p.item_id).ToList(), bangid, param.factoryId);//plan列表
|
|
|
|
|
|
@@ -918,38 +912,37 @@ namespace Business.ResourceExamineManagement
|
|
|
//这里更新产品得满足时间。
|
|
|
if (mes_MorderDto != null)
|
|
|
{
|
|
|
- //TODO:目前不考虑子工单 只存在单条数据先这样取值;
|
|
|
- //var mes_Morders = mes_MorderDto.mes_Morders.FirstOrDefault();
|
|
|
- //var mes_Moentry = mes_MorderDto.mes_Moentries.FirstOrDefault();
|
|
|
- foreach (var item in mes_MorderDto.mes_Morders)
|
|
|
+ //主工单最后计算满足日期
|
|
|
+ var mes_Morders = mes_MorderDto.mes_Morders.Where(x => x.parent_id == null).FirstOrDefault();
|
|
|
+ if (mes_Morders != null)
|
|
|
{
|
|
|
- if (!string.IsNullOrEmpty(item.bom_number))
|
|
|
+ if (!string.IsNullOrEmpty(mes_Morders.bom_number))
|
|
|
{
|
|
|
+ //var ProductiveDate = ProductiveExamine(mes_Morders.bom_number, returnlist[0].version, (int)mes_Morders.morder_production_number.Value);
|
|
|
ProdExamineParamDto prodExamine = new ProdExamineParamDto()
|
|
|
{
|
|
|
- bom_number = item.bom_number,
|
|
|
+ bom_number = mes_Morders.bom_number,
|
|
|
version = returnlist[0].version,
|
|
|
- packages = (int)item.morder_production_number.Value,
|
|
|
+ packages = (int)mes_Morders.morder_production_number.Value,
|
|
|
tenantId = param.tenantId,
|
|
|
factoryId = param.factoryId
|
|
|
|
|
|
};
|
|
|
- var itemId = returnlist.Where(x => x.bom_number == item.bom_number).FirstOrDefault().item_id;
|
|
|
- var plan = planList.Find(x => x.icitem_id == itemId);
|
|
|
+ var plan = planList.Find(x => x.icitem_id == returnlist[0].item_id);
|
|
|
var ProductiveDate = _productExamineAppService.ProductiveExamine(prodExamine);
|
|
|
var Day = ProductiveDate.Result / (60 * 10); //返回的分钟除以十个小时得出工作天数;
|
|
|
- item.moentry_sys_stime = returnlist[0].kitting_time.Value.AddDays(1);//数据齐套完成后隔天开始生产;
|
|
|
+ mes_Morders.moentry_sys_stime = returnlist[0].kitting_time.Value.AddDays(1);//数据齐套完成后隔天开始生产;
|
|
|
//结束日期=开始时间+生产时长+自检提前期+入库提前期+发运提前期;
|
|
|
var LeadTime = Day + plan.self_inspection_date.Value + plan.Shipping_date.Value + plan.Warehousing_date.Value;
|
|
|
- item.moentry_sys_etime = item.moentry_sys_stime.Value.AddDays((double)Day);
|
|
|
- item.morder_need_time = ProductiveDate.Result;
|
|
|
- //满足资源检查的时间需加上提前期 //TODO:工单返回满足时间
|
|
|
- returnlist[0].satisfy_time = item.moentry_sys_stime.Value.AddDays((double)LeadTime);
|
|
|
+ mes_Morders.moentry_sys_etime = mes_Morders.moentry_sys_stime.Value.AddDays((double)Day);
|
|
|
+ mes_Morders.morder_need_time = ProductiveDate.Result;
|
|
|
+ //满足资源检查的时间需加上提前期
|
|
|
+ returnlist[0].satisfy_time = mes_Morders.moentry_sys_stime.Value.AddDays((double)LeadTime);
|
|
|
}
|
|
|
+ //批量保存 后期考虑子工单
|
|
|
+ _mes_morder.InsertMany(mes_MorderDto.mes_Morders);
|
|
|
+ _mes_moentry.InsertMany(mes_MorderDto.mes_Moentries);
|
|
|
}
|
|
|
- //批量保存 后期考虑子工单
|
|
|
- _mes_morder.InsertMany(mes_MorderDto.mes_Morders);
|
|
|
- _mes_moentry.InsertMany(mes_MorderDto.mes_Moentries);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -968,7 +961,7 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
foreach (var item in childList)
|
|
|
{
|
|
|
- var cilList = returnlist.Where(s => s.parent_id == item.id && s.type == 0).OrderBy(k => k.num).ToList();
|
|
|
+ var cilList = returnlist.Where(s => s.parent_id == item.id && s.type == 0).ToList();
|
|
|
|
|
|
if (item.haveicsubs == 1)
|
|
|
{
|
|
|
@@ -985,7 +978,6 @@ namespace Business.ResourceExamineManagement
|
|
|
ic_item_stockoccupy itemStockoccupyDto = new ic_item_stockoccupy();
|
|
|
itemStockoccupyDto.bang_id = bangid;
|
|
|
itemStockoccupyDto.icitem_id = item.item_id;
|
|
|
- itemStockoccupyDto.item_no = item.num;
|
|
|
item.kitting_time = DateTime.Now;
|
|
|
if (cilList.Count() > 0)
|
|
|
{
|
|
|
@@ -993,58 +985,68 @@ namespace Business.ResourceExamineManagement
|
|
|
item.kitting_time = cilList.Max(s => s.kitting_time);
|
|
|
}
|
|
|
|
|
|
- if (parent.stock_state == 0)
|
|
|
+ if (item.lack_qty > 0)
|
|
|
{
|
|
|
- if (item.lack_qty > 0)
|
|
|
+ //如果缺料,占用库存,然后走采购或自制
|
|
|
+ itemStockoccupyDto.quantity = item.sqty;
|
|
|
+ item.use_qty = item.sqty;
|
|
|
+ sklist.Add(itemStockoccupyDto);
|
|
|
+ if (item.erp_cls == 1)
|
|
|
{
|
|
|
- //如果缺料,占用库存,然后走采购或自制
|
|
|
- if (item.sqty > 0)
|
|
|
- {
|
|
|
- itemStockoccupyDto.quantity = item.sqty;
|
|
|
- sklist.Add(itemStockoccupyDto);
|
|
|
- }
|
|
|
- item.use_qty = item.sqty;
|
|
|
- if (item.erp_cls == 1)
|
|
|
+ //走自制
|
|
|
+ //var minute = ProductiveExamine(item.bom_number, "1.0", item.lack_qty.GetInt());
|
|
|
+ ProdExamineParamDto prodExamine = new ProdExamineParamDto()
|
|
|
{
|
|
|
- //走自制
|
|
|
- //var minute = ProductiveExamine(item.bom_number, "1.0", item.lack_qty.GetInt());
|
|
|
- ProdExamineParamDto prodExamine = new ProdExamineParamDto()
|
|
|
- {
|
|
|
- bom_number = item.bom_number,
|
|
|
- version = item.version,
|
|
|
- packages = (int)item.lack_qty,
|
|
|
- tenantId = param.tenantId,
|
|
|
- factoryId = param.factoryId
|
|
|
-
|
|
|
- };
|
|
|
- var minute = _productExamineAppService.ProductiveExamine(prodExamine);
|
|
|
- //var ProductiveDate = ProductiveExamine(BomNumber, (int)(Quantity.Value));
|
|
|
- //系统建议完工日期为 开工日期+产能检查时间=完工日期
|
|
|
- var Day = minute.Result / (60 * 10); //返回的分钟除以十个小时得出工作天数;
|
|
|
- item.kitting_time = item.kitting_time.Value.AddDays((double)Day);
|
|
|
- }
|
|
|
- else if (item.erp_cls == 3)
|
|
|
- {
|
|
|
- //采购申请
|
|
|
- var SRMPRDto = CreateSRMPR(item, input.tenantId, input.factoryId, bangid, item.erp_cls, leadTimeList, supplierList, planList, plan_date.Value);
|
|
|
- item.kitting_time = SRMPRDto.lastStartTmie;
|
|
|
- SRMPRDtoList.Add(SRMPRDto);
|
|
|
- }
|
|
|
- else if (item.erp_cls == 2)
|
|
|
+ bom_number = item.bom_number,
|
|
|
+ version = item.version,
|
|
|
+ packages = item.lack_qty.GetInt(),
|
|
|
+ tenantId = param.tenantId,
|
|
|
+ factoryId = param.factoryId
|
|
|
+
|
|
|
+ };
|
|
|
+ var minute = _productExamineAppService.ProductiveExamine(prodExamine);
|
|
|
+ //var ProductiveDate = ProductiveExamine(BomNumber, (int)(Quantity.Value));
|
|
|
+ //系统建议完工日期为 开工日期+产能检查时间=完工日期
|
|
|
+ var Day = minute.Result / (60 * 10); //返回的分钟除以十个小时得出工作天数;
|
|
|
+ item.kitting_time = item.kitting_time.Value.AddDays((double)Day);
|
|
|
+ }
|
|
|
+ else if (item.erp_cls == 2)
|
|
|
+ {
|
|
|
+ //采购申请
|
|
|
+ var SRMPRDto = CreateSRMPR(item, input.tenantId, input.factoryId, bangid, item.erp_cls, leadTimeList, supplierList, planList, plan_date.Value);
|
|
|
+ item.kitting_time = SRMPRDto.lastStartTmie;
|
|
|
+ }
|
|
|
+ else if (item.erp_cls == 3)
|
|
|
+ {
|
|
|
+
|
|
|
+ if (item.erp_cls == 3)
|
|
|
{
|
|
|
//1.先生成委外工单。
|
|
|
- var mesorder = CreateMesOOder(item, input.tenantId, input.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
|
|
|
- item.kitting_time = mesorder.ooentry_etime;
|
|
|
- orderList.Add(mesorder);
|
|
|
+ CreateMesOOder(item, input.tenantId, input.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
|
|
|
+ //2.再根据委外工单需要检查库存材料,然后提供给第三方组装(委外生产)。
|
|
|
+ //3.如果委外工单的物料库存不够,先生成物料采购申请单,再生成物料的采购订单,到货后再走委外流程。
|
|
|
+ /*foreach (var cl in cilList)
|
|
|
+ {
|
|
|
+ if (cl.stock_state == 0 || cl.stock_state == 2)
|
|
|
+ {
|
|
|
+ //采购申请
|
|
|
+ var SRMPRDto = CreateSRMPR(item, input.tenantId, input.factoryId, bangid, item.erp_cls, leadTimeList, supplierList, planList, plan_date.Value);
|
|
|
+ item.kitting_time = SRMPRDto.lastStartTmie;
|
|
|
+ }
|
|
|
+ }*/
|
|
|
+ //4.再生成委外的采购申请单。
|
|
|
}
|
|
|
}
|
|
|
- else
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ item.use_qty = 0;
|
|
|
+ if (parent.stock_state == 1)
|
|
|
{
|
|
|
//如果父级缺料,则本级等于父级缺料*本级使用数量
|
|
|
item.use_qty = parent.lack_qty * item.qty;
|
|
|
itemStockoccupyDto.quantity = item.use_qty;
|
|
|
sklist.Add(itemStockoccupyDto);
|
|
|
-
|
|
|
}
|
|
|
}
|
|
|
item.is_use = true;
|
|
|
@@ -1212,7 +1214,6 @@ namespace Business.ResourceExamineManagement
|
|
|
ic_item_stockoccupy itemStockoccupyDto = new ic_item_stockoccupy();
|
|
|
itemStockoccupyDto.bang_id = bangid;
|
|
|
itemStockoccupyDto.icitem_id = slt.item_id;
|
|
|
- itemStockoccupyDto.item_no = slt.num;
|
|
|
slt.is_use = true;
|
|
|
if (slt.lack_qty > 0)
|
|
|
{
|
|
|
@@ -1225,9 +1226,9 @@ namespace Business.ResourceExamineManagement
|
|
|
//var minute = ProductiveExamine(item.bom_number, "1.0", item.lack_qty.GetInt());
|
|
|
ProdExamineParamDto prodExamine = new ProdExamineParamDto()
|
|
|
{
|
|
|
- bom_number = slt.bom_number,
|
|
|
- version = slt.version,
|
|
|
- packages = (int)slt.lack_qty,
|
|
|
+ bom_number = item.bom_number,
|
|
|
+ version = item.version,
|
|
|
+ packages = item.lack_qty.GetInt(),
|
|
|
tenantId = param.tenantId,
|
|
|
factoryId = param.factoryId
|
|
|
|
|
|
@@ -1242,19 +1243,19 @@ namespace Business.ResourceExamineManagement
|
|
|
CalcStrategy(slt, returnlist, bangid, sklist);
|
|
|
}*/
|
|
|
}
|
|
|
- else if (slt.erp_cls == 3)
|
|
|
- {
|
|
|
- //采购申请
|
|
|
- var SRMPRDto = CreateSRMPR(slt, input.tenantId, input.factoryId, bangid, slt.erp_cls, leadTimeList, supplierList, planList, plan_date.Value);
|
|
|
- item.kitting_time = SRMPRDto.lastStartTmie;
|
|
|
- SRMPRDtoList.Add(SRMPRDto);
|
|
|
- }
|
|
|
- else if (slt.erp_cls == 2)
|
|
|
- {
|
|
|
- //1.先生成委外工单。
|
|
|
- var mesorder = CreateMesOOder(slt, input.tenantId, input.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
|
|
|
- slt.kitting_time = mesorder.ooentry_etime;
|
|
|
- orderList.Add(mesorder);
|
|
|
+ else if (slt.erp_cls == 2 || slt.erp_cls == 3)
|
|
|
+ { /*//生成采购订单
|
|
|
+ //slt.purchase_qty = slt.lack_qty;
|
|
|
+ var leadTimeList = GetLeadTime(new List<long> { slt.item_id }, input.tenantId, input.factoryId);//提前期列表
|
|
|
+ var supplierList = GetSupplier(new List<BomChildExamineDto> { slt }, input.tenantId, input.factoryId);//供应商列表
|
|
|
+ var planList = GetICPlan(new List<BomChildExamineDto> { slt }, input.tenantId, input.factoryId);//plan列表
|
|
|
+
|
|
|
+ slt.kitting_time = CreateSRMPR(slt, input.tenantId, input.factoryId, bangid, slt.erp_cls, leadTimeList, supplierList, planList, plan_date.Value);
|
|
|
+ if (item.erp_cls == 3)
|
|
|
+ {
|
|
|
+ //生成委外工单
|
|
|
+ CreateMesOOder(item, input.tenantId, input.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
|
|
|
+ }*/
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
@@ -1336,7 +1337,6 @@ namespace Business.ResourceExamineManagement
|
|
|
itemStockoccupyDto.bang_id = bangid;
|
|
|
itemStockoccupyDto.icitem_id = zy.item_id;
|
|
|
itemStockoccupyDto.quantity = use_p_num * zy.qty; ;
|
|
|
- itemStockoccupyDto.item_no = zy.num;
|
|
|
sklist.Add(itemStockoccupyDto);
|
|
|
}
|
|
|
idx++;
|
|
|
@@ -1363,36 +1363,20 @@ namespace Business.ResourceExamineManagement
|
|
|
var num = parent_lack * sct.qty - itemSockoccupy.Sum(m => m.quantity);
|
|
|
if (sct.erp_cls == 1)
|
|
|
{
|
|
|
- //走自制
|
|
|
- //var minute = ProductiveExamine(item.bom_number, "1.0", item.lack_qty.GetInt());
|
|
|
- ProdExamineParamDto prodExamine = new ProdExamineParamDto()
|
|
|
- {
|
|
|
- bom_number = sct.bom_number,
|
|
|
- version = sct.version,
|
|
|
- packages = (int)sct.lack_qty,
|
|
|
- tenantId = param.tenantId,
|
|
|
- factoryId = param.factoryId
|
|
|
-
|
|
|
- };
|
|
|
- var minute = _productExamineAppService.ProductiveExamine(prodExamine);
|
|
|
- //var ProductiveDate = ProductiveExamine(BomNumber, (int)(Quantity.Value));
|
|
|
- //系统建议完工日期为 开工日期+产能检查时间=完工日期
|
|
|
- var Day = minute.Result / (60 * 10); //返回的分钟除以十个小时得出工作天数;
|
|
|
- sct.kitting_time = sct.kitting_time.Value.AddDays((double)Day);
|
|
|
- }
|
|
|
- else if (sct.erp_cls == 3)
|
|
|
- {
|
|
|
- //采购申请
|
|
|
- var SRMPRDto = CreateSRMPR(sct, input.tenantId, input.factoryId, bangid, sct.erp_cls, leadTimeList, supplierList, planList, plan_date.Value);
|
|
|
- sct.kitting_time = SRMPRDto.lastStartTmie;
|
|
|
- SRMPRDtoList.Add(SRMPRDto);
|
|
|
+ //自制
|
|
|
+ //GenerateMorder()
|
|
|
}
|
|
|
- else if (sct.erp_cls == 2)
|
|
|
+ else if (sct.erp_cls == 2 || sct.erp_cls == 3)
|
|
|
{
|
|
|
- //1.先生成委外工单。
|
|
|
- var mesorder = CreateMesOOder(sct, input.tenantId, input.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
|
|
|
- sct.kitting_time = mesorder.ooentry_etime;
|
|
|
- orderList.Add(mesorder);
|
|
|
+ /*var leadTimeList = GetLeadTime(new List<long> { sct.item_id }, input.tenantId, input.factoryId);//提前期列表
|
|
|
+ var supplierList = GetSupplier(new List<BomChildExamineDto> { sct }, input.tenantId, input.factoryId);//供应商列表
|
|
|
+ var planList = GetICPlan(new List<BomChildExamineDto> { sct }, input.tenantId, input.factoryId);//plan列表
|
|
|
+ sct.kitting_time = CreateSRMPR(sct, input.tenantId, input.factoryId, bangid, sct.erp_cls, leadTimeList, supplierList, planList, plan_date.Value);
|
|
|
+ if (item.erp_cls == 3)
|
|
|
+ {
|
|
|
+ //生成委外工单
|
|
|
+ CreateMesOOder(item, input.tenantId, input.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
|
|
|
+ }*/
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -1576,7 +1560,6 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
//判断缺料数量
|
|
|
item.lack_qty = parent.lack_qty * item.qty - item.sqty;
|
|
|
- item.lack_qty = item.lack_qty < 0 ? 0 : item.lack_qty;
|
|
|
//判断状态
|
|
|
item.stock_state = item.lack_qty > 0 ? 0 : 1;
|
|
|
}
|
|
|
@@ -2039,19 +2022,14 @@ namespace Business.ResourceExamineManagement
|
|
|
/// <param name="orderType">2委外采购申请单,3采购申请单</param>
|
|
|
private SRMPRDto CreateSRMPR(BomChildExamineDto returnlist, long tenantId, long factoryid, long bangId, int orderType, List<ICItemLeadTimeDto> iCItemLeadTimes, List<ic_item_pur> supplierList, List<ic_plan> planList, DateTime deliveryDate)
|
|
|
{
|
|
|
- SRMPRDto sRMPR = new SRMPRDto();
|
|
|
- srm_pr_main srm_Pr = new srm_pr_main();
|
|
|
var leadTime = iCItemLeadTimes.Find(x => x.item_id == returnlist.item_id);
|
|
|
var supplier = supplierList.Find(x => x.icitem_id == returnlist.item_id);//默认取第一个供应商
|
|
|
var plan = planList.Find(x => x.icitem_id == returnlist.item_id);
|
|
|
if (leadTime == null || supplier == null || plan == null)
|
|
|
{
|
|
|
- sRMPR.srm_Pr_Main = null;
|
|
|
- sRMPR.lastStartTmie = deliveryDate.AddDays(7 * -1);//减去提前期
|
|
|
- return sRMPR;
|
|
|
- //throw new NotImplementedException("未找到物料ic_factory_details或ic_item_pur或ic_plan信息!");
|
|
|
+ throw new NotImplementedException("未找到物料ic_factory_details或ic_item_pur或ic_plan信息!");
|
|
|
}
|
|
|
-
|
|
|
+ srm_pr_main srm_Pr = new srm_pr_main();
|
|
|
srm_Pr.GenerateNewId();
|
|
|
srm_Pr.pr_billno = getOrderNum("PR");//pr单号
|
|
|
srm_Pr.pr_mono = "";//关联工单号
|
|
|
@@ -2087,7 +2065,7 @@ namespace Business.ResourceExamineManagement
|
|
|
srm_Pr.bang_id = bangId;
|
|
|
//_srm_pr_main.InsertOne(srm_Pr);
|
|
|
decimal? totalLeadTime = leadTime.transportation_leadtime + leadTime.stock_leadtime + leadTime.production_leadtime + leadTime.order_leadtime;
|
|
|
-
|
|
|
+ SRMPRDto sRMPR = new SRMPRDto();
|
|
|
sRMPR.srm_Pr_Main = srm_Pr;
|
|
|
sRMPR.lastStartTmie = deliveryDate.AddDays((double)totalLeadTime * -1);//减去提前期
|
|
|
return sRMPR;
|