|
|
@@ -211,6 +211,10 @@ 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 构造函数
|
|
|
@@ -413,6 +417,8 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
//订单行资源检查明细list
|
|
|
rtn.examines = examines;
|
|
|
+ rtn.srm_pr_list = SRMPRDtoList;
|
|
|
+ rtn.order_list = orderList;
|
|
|
rtn.sklist = sklist;
|
|
|
return JsonConvert.SerializeObject(rtn);
|
|
|
}
|
|
|
@@ -708,12 +714,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;
|
|
|
}
|
|
|
@@ -872,7 +878,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).ToList();
|
|
|
+ var childList = returnlist.Where(s => s.parent_id == returnlist[0].id && s.type == 0).OrderBy(s => s.num).ToList();
|
|
|
|
|
|
var planList = GetICPlan(returnlist.Select(p => p.item_id).ToList(), bangid, param.factoryId);//plan列表
|
|
|
|
|
|
@@ -962,7 +968,7 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
foreach (var item in childList)
|
|
|
{
|
|
|
- var cilList = returnlist.Where(s => s.parent_id == item.id && s.type == 0).ToList();
|
|
|
+ var cilList = returnlist.Where(s => s.parent_id == item.id && s.type == 0).OrderBy(k => k.num).ToList();
|
|
|
|
|
|
if (item.haveicsubs == 1)
|
|
|
{
|
|
|
@@ -979,6 +985,7 @@ 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)
|
|
|
{
|
|
|
@@ -986,68 +993,58 @@ namespace Business.ResourceExamineManagement
|
|
|
item.kitting_time = cilList.Max(s => s.kitting_time);
|
|
|
}
|
|
|
|
|
|
- if (item.lack_qty > 0)
|
|
|
+ if (parent.stock_state == 0)
|
|
|
{
|
|
|
- //如果缺料,占用库存,然后走采购或自制
|
|
|
- itemStockoccupyDto.quantity = item.sqty;
|
|
|
- item.use_qty = item.sqty;
|
|
|
- sklist.Add(itemStockoccupyDto);
|
|
|
- if (item.erp_cls == 1)
|
|
|
+ if (item.lack_qty > 0)
|
|
|
{
|
|
|
- //走自制
|
|
|
- //var minute = ProductiveExamine(item.bom_number, "1.0", item.lack_qty.GetInt());
|
|
|
- ProdExamineParamDto prodExamine = new ProdExamineParamDto()
|
|
|
+ //如果缺料,占用库存,然后走采购或自制
|
|
|
+ if (item.sqty > 0)
|
|
|
{
|
|
|
- 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)
|
|
|
+ itemStockoccupyDto.quantity = item.sqty;
|
|
|
+ sklist.Add(itemStockoccupyDto);
|
|
|
+ }
|
|
|
+ item.use_qty = item.sqty;
|
|
|
+ if (item.erp_cls == 1)
|
|
|
{
|
|
|
- //1.先生成委外工单。
|
|
|
- CreateMesOOder(item, input.tenantId, input.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
|
|
|
- //2.再根据委外工单需要检查库存材料,然后提供给第三方组装(委外生产)。
|
|
|
- //3.如果委外工单的物料库存不够,先生成物料采购申请单,再生成物料的采购订单,到货后再走委外流程。
|
|
|
- /*foreach (var cl in cilList)
|
|
|
+ //走自制
|
|
|
+ //var minute = ProductiveExamine(item.bom_number, "1.0", item.lack_qty.GetInt());
|
|
|
+ ProdExamineParamDto prodExamine = new ProdExamineParamDto()
|
|
|
{
|
|
|
- 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.再生成委外的采购申请单。
|
|
|
+ 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)
|
|
|
+ {
|
|
|
+ //1.先生成委外工单。
|
|
|
+ var mesorder = CreateMesOOder(item, input.tenantId, input.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
|
|
|
+ item.kitting_time = mesorder.ooentry_etime;
|
|
|
+ orderList.Add(mesorder);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- item.use_qty = 0;
|
|
|
- if (parent.stock_state == 1)
|
|
|
+ else
|
|
|
{
|
|
|
//如果父级缺料,则本级等于父级缺料*本级使用数量
|
|
|
item.use_qty = parent.lack_qty * item.qty;
|
|
|
itemStockoccupyDto.quantity = item.use_qty;
|
|
|
sklist.Add(itemStockoccupyDto);
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
item.is_use = true;
|
|
|
@@ -1215,6 +1212,7 @@ 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)
|
|
|
{
|
|
|
@@ -1227,9 +1225,9 @@ namespace Business.ResourceExamineManagement
|
|
|
//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 = item.lack_qty.GetInt(),
|
|
|
+ bom_number = slt.bom_number,
|
|
|
+ version = slt.version,
|
|
|
+ packages = (int)slt.lack_qty,
|
|
|
tenantId = param.tenantId,
|
|
|
factoryId = param.factoryId
|
|
|
|
|
|
@@ -1244,19 +1242,19 @@ namespace Business.ResourceExamineManagement
|
|
|
CalcStrategy(slt, returnlist, bangid, sklist);
|
|
|
}*/
|
|
|
}
|
|
|
- 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 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
|
|
|
@@ -1338,6 +1336,7 @@ 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++;
|
|
|
@@ -1364,20 +1363,36 @@ namespace Business.ResourceExamineManagement
|
|
|
var num = parent_lack * sct.qty - itemSockoccupy.Sum(m => m.quantity);
|
|
|
if (sct.erp_cls == 1)
|
|
|
{
|
|
|
- //自制
|
|
|
- //GenerateMorder()
|
|
|
+ //走自制
|
|
|
+ //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 == 2 || sct.erp_cls == 3)
|
|
|
+ else if (sct.erp_cls == 3)
|
|
|
{
|
|
|
- /*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);
|
|
|
- }*/
|
|
|
+ //采购申请
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ else if (sct.erp_cls == 2)
|
|
|
+ {
|
|
|
+ //1.先生成委外工单。
|
|
|
+ var mesorder = CreateMesOOder(sct, input.tenantId, input.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
|
|
|
+ sct.kitting_time = mesorder.ooentry_etime;
|
|
|
+ orderList.Add(mesorder);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -1561,6 +1576,7 @@ 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;
|
|
|
}
|
|
|
@@ -2023,14 +2039,19 @@ 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)
|
|
|
{
|
|
|
- throw new NotImplementedException("未找到物料ic_factory_details或ic_item_pur或ic_plan信息!");
|
|
|
+ sRMPR.srm_Pr_Main = null;
|
|
|
+ sRMPR.lastStartTmie = deliveryDate.AddDays(7 * -1);//减去提前期
|
|
|
+ return sRMPR;
|
|
|
+ //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 = "";//关联工单号
|
|
|
@@ -2066,7 +2087,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;
|