|
|
@@ -2,11 +2,14 @@
|
|
|
using Business.Core.Utilities;
|
|
|
using Business.Domain;
|
|
|
using Business.ResourceExamineManagement.Dto;
|
|
|
+using MathNet.Numerics.RootFinding;
|
|
|
using MongoDB.Driver.Linq;
|
|
|
using System;
|
|
|
+using System.Collections;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
using Volo.Abp.Application.Services;
|
|
|
+using static Spire.Pdf.General.Render.Decode.Jpeg2000.j2k.codestream.HeaderInfo;
|
|
|
|
|
|
namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
@@ -40,6 +43,20 @@ namespace Business.ResourceExamineManagement
|
|
|
public crm_seorder seorder = new crm_seorder();
|
|
|
|
|
|
public mes_morder mes_morder = new mes_morder();
|
|
|
+ public List<mo_srm_pr_main> quarter_srm_pr_mains = new List<mo_srm_pr_main>();
|
|
|
+
|
|
|
+ public DateTime quarter_starttime;
|
|
|
+ public DateTime quarter_endtime;
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 是否倒排
|
|
|
+ /// </summary>
|
|
|
+ public bool IsInverted = false;
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 工单类型
|
|
|
+ /// </summary>
|
|
|
+ public string morder_type;
|
|
|
|
|
|
SnowFlake help = new SnowFlake();
|
|
|
|
|
|
@@ -139,7 +156,7 @@ namespace Business.ResourceExamineManagement
|
|
|
/// <param name="plan_date"></param>
|
|
|
/// <param name="checkflag">是否生成工单、委外、采购</param>
|
|
|
public void CalcView(List<BomChildExamineDto> returnlist, long bangid, decimal count, DateTime
|
|
|
- ? plan_date, List<mo_ic_item_stockoccupy> sklist, crm_seorderentry sentrys,int urgent, List<mo_ic_item> icitemlist)
|
|
|
+ ? plan_date, List<mo_ic_item_stockoccupy> sklist, crm_seorderentry sentrys, List<mo_ic_item> icitemlist)
|
|
|
{
|
|
|
ProductionTimeDay = 0;
|
|
|
//第一级
|
|
|
@@ -254,12 +271,20 @@ namespace Business.ResourceExamineManagement
|
|
|
//先设定在制的齐套时间
|
|
|
//level1Dto.satisfy_time = mooccupylist[0]?.moo_etime;
|
|
|
level1Dto.stock_state = 0;
|
|
|
-
|
|
|
if (param.checkflag || (!param.checkflag && param.checkPlan))
|
|
|
{
|
|
|
+ ProdExamineParamDto prodExamine = new ProdExamineParamDto()
|
|
|
+ {
|
|
|
+ ItemNum = level1Dto.item_number,
|
|
|
+ PlanStart = plan_date.GetValueOrDefault(),
|
|
|
+ QtyOrd = level1Dto.lack_qty,
|
|
|
+ Domain = param.factoryId.ToString()
|
|
|
+ };
|
|
|
+ int make_time = _productExamineAppService.ProductTime(prodExamine);
|
|
|
//根据成品属性来判断是自制还是委外还是外购,需要考虑这种场景
|
|
|
if (level1Dto.erp_cls == 1 && param.checkflag)
|
|
|
{
|
|
|
+ //设置成品的生产时长为子物料的提前准备期
|
|
|
//param.checkflag=true 销售订单产生工单
|
|
|
level1Dto.make_qty = level1Dto.lack_qty;
|
|
|
//生成主工单
|
|
|
@@ -272,12 +297,12 @@ namespace Business.ResourceExamineManagement
|
|
|
version = level1Dto.version,
|
|
|
number = level1Dto.item_number,
|
|
|
Quantity = level1Dto.lack_qty,
|
|
|
- morder_type = MorderEnum.XsMorder,
|
|
|
+ morder_type = morder_type,
|
|
|
work_order_type = MorderEnum.CgMorder,
|
|
|
morder_state = MorderEnum.Initial_state,
|
|
|
bang_id = bangid
|
|
|
};
|
|
|
- CreateMainOrder(generateMorderDto, level1Dto, childList, returnlist, bangid, plan_date, sklist, sentrys, urgent, icitemlist);
|
|
|
+ CreateMainOrder(generateMorderDto, level1Dto, childList, returnlist, bangid, plan_date, sklist, sentrys, icitemlist, make_time);
|
|
|
}
|
|
|
else if (level1Dto.erp_cls == 3)
|
|
|
{
|
|
|
@@ -290,7 +315,7 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
level1Dto.lack_qty = level1Dto.lack_qty - itemPRQty;
|
|
|
//采购申请
|
|
|
- PackageSRMPR(level1Dto, bangid, sentrys);
|
|
|
+ PackageSRMPR(level1Dto, bangid, sentrys, plan_date);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -300,14 +325,18 @@ namespace Business.ResourceExamineManagement
|
|
|
CalcInTransit(sentrys, level1Dto, bangid, plan_date.GetValueOrDefault());
|
|
|
if (level1Dto.lack_qty > 0)
|
|
|
{
|
|
|
+ //1.先生成委外工单。
|
|
|
+ var mesorder = CreateMesOOder(level1Dto, param.company_id, param.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
|
|
|
+ mesorder.ooentry_etime = plan_date.GetValueOrDefault().AddDays(-1);
|
|
|
+ var srmprDto = PackageSRMPR(level1Dto, bangid, sentrys, plan_date);
|
|
|
+ mesorder.ooentry_stime = plan_date.GetValueOrDefault().AddDays(-srmprDto.totalLeadTime.GetValueOrDefault());
|
|
|
+
|
|
|
//先计算末级数据的齐套时间。
|
|
|
if (childList.Count > 0)
|
|
|
{
|
|
|
MatterTileDevelop(level1Dto, childList, returnlist, sklist, bangid, plan_date, sentrys, icitemlist);
|
|
|
- level1Dto.kitting_time = childList.Max(s => s.kitting_time);
|
|
|
+ level1Dto.kitting_time = childList.Max(s => s.kitting_time).GetValueOrDefault().AddDays(srmprDto.totalLeadTime.GetValueOrDefault());//加上物料的采购提前期
|
|
|
}
|
|
|
- //1.先生成委外工单。
|
|
|
- var mesorder = CreateMesOOder(level1Dto, param.company_id, param.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
|
|
|
|
|
|
//2.生成采购申请
|
|
|
//采购申请
|
|
|
@@ -316,7 +345,7 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
level1Dto.lack_qty = level1Dto.lack_qty - itemPRQty;
|
|
|
//采购申请
|
|
|
- PackageSRMPR(level1Dto, bangid, sentrys);
|
|
|
+ PackageSRMPR(level1Dto, bangid, sentrys, plan_date);
|
|
|
}
|
|
|
//PackageSRMPR(level1Dto, bangid, sentrys);
|
|
|
|
|
|
@@ -329,7 +358,7 @@ namespace Business.ResourceExamineManagement
|
|
|
oo.production_unit_code = mesorder.production_unit_code;
|
|
|
oo.ooentry_prdname = mesorder.ooentry_prdname;
|
|
|
oo.ooentry_stime = mesorder.ooentry_stime;
|
|
|
- oo.ooentry_etime = level1Dto.kitting_time;
|
|
|
+ oo.ooentry_etime = mesorder.ooentry_etime;
|
|
|
oo.oorder_date = mesorder.oorder_date;
|
|
|
oo.oorder_no = mesorder.oorder_no;
|
|
|
level1Dto.subcontracting_list.Add(oo);
|
|
|
@@ -344,7 +373,7 @@ namespace Business.ResourceExamineManagement
|
|
|
else {
|
|
|
MatterTileDevelop(level1Dto, childList, returnlist, sklist, bangid, plan_date, sentrys, icitemlist);
|
|
|
}
|
|
|
- CalcLevelMakeTime(returnlist);
|
|
|
+ //CalcLevelMakeTime(returnlist);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
@@ -358,7 +387,7 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- //计算每层物料倒排时,需要根据半成品的工作时长倒排。
|
|
|
+ /*//计算每层物料倒排时,需要根据半成品的工作时长倒排。
|
|
|
public void CalcLevelMakeTime(List<BomChildExamineDto> returnlist)
|
|
|
{
|
|
|
for (int level = 3; level <= returnlist.Max(s => s.level); level++)
|
|
|
@@ -372,14 +401,14 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
- }
|
|
|
+ }*/
|
|
|
|
|
|
|
|
|
/// <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,int urgent, List<mo_ic_item> icitemlist)
|
|
|
+ ? plan_date, List<mo_ic_item_stockoccupy> sklist, crm_seorderentry sentrys, List<mo_ic_item> icitemlist,int make_time)
|
|
|
{
|
|
|
//生成主工单
|
|
|
_morderAppService.prodLines = prodLines;
|
|
|
@@ -389,7 +418,7 @@ namespace Business.ResourceExamineManagement
|
|
|
_morderAppService.qualityLineWorks = qualityLineWorks;
|
|
|
_morderAppService.holidays = holidays;
|
|
|
_morderAppService.param = param;
|
|
|
- Mes_MorderDto mes_MorderDto = _morderAppService.GenerateMorder(generateMorderDto, urgent);
|
|
|
+ Mes_MorderDto mes_MorderDto = _morderAppService.GenerateMorder(generateMorderDto);
|
|
|
//这里更新产品得满足时间。
|
|
|
if (mes_MorderDto != null)
|
|
|
{
|
|
|
@@ -398,12 +427,24 @@ namespace Business.ResourceExamineManagement
|
|
|
if (mes_Morders != null)
|
|
|
{
|
|
|
mes_morder = ObjectMapper.Map<mo_mes_morder, mes_morder>(mes_Morders);
|
|
|
- MatterTileDevelop(level1Dto, childList, returnlist, sklist, bangid, plan_date, sentrys, icitemlist);
|
|
|
+ var plan = icitemlist.Find(x => x.mysql_id == level1Dto.item_id);
|
|
|
+ //结束日期=开始时间+生产时长+自检提前期+入库提前期+发运提前期;
|
|
|
+ decimal LeadTime = 0;
|
|
|
+ if (plan != null)
|
|
|
+ {
|
|
|
+ //减去提前期
|
|
|
+ LeadTime = plan.self_inspection_date.GetValueOrDefault() + plan.Warehousing_date.GetValueOrDefault() + plan.Shipping_date.GetValueOrDefault();
|
|
|
+ }
|
|
|
+ mes_Morders.moentry_sys_etime = plan_date.GetValueOrDefault().AddDays(-(int)Math.Floor(LeadTime));
|
|
|
+
|
|
|
+ mes_Morders.moentry_sys_stime = mes_Morders.moentry_sys_etime.GetValueOrDefault().AddDays(-(make_time - 1));
|
|
|
+ MatterTileDevelop(level1Dto, childList, returnlist, sklist, bangid, mes_Morders.moentry_sys_stime, sentrys, icitemlist);
|
|
|
if (!string.IsNullOrEmpty(mes_Morders.bom_number))
|
|
|
{
|
|
|
- mes_Morders.moentry_sys_stime = childList.Max(s => s.kitting_time.GetValueOrDefault()).AddDays(1).Date;//数据齐套完成后隔天开始生产;
|
|
|
- //var ProductiveDate = ProductiveExamine(mes_Morders.bom_number, level1Dto.version, (int)mes_Morders.morder_production_number.Value);
|
|
|
- ProdExamineParamDto prodExamine = new ProdExamineParamDto()
|
|
|
+ mes_Morders.mat_start_date = childList.Max(s => s.kitting_time.GetValueOrDefault()).AddDays(1).Date;//数据齐套完成后隔天开始生产;
|
|
|
+ mes_Morders.mat_end_date = mes_Morders.mat_start_date.GetValueOrDefault().AddDays(make_time);
|
|
|
+
|
|
|
+ /*ProdExamineParamDto prodExamine = new ProdExamineParamDto()
|
|
|
{
|
|
|
ItemNum = mes_Morders.bom_number,
|
|
|
PlanStart = mes_Morders.moentry_sys_stime.Value,
|
|
|
@@ -416,28 +457,15 @@ namespace Business.ResourceExamineManagement
|
|
|
_productExamineAppService.qualityLineWorks = qualityLineWorks;
|
|
|
_productExamineAppService.holidays = holidays;
|
|
|
|
|
|
- var plan = icitemlist.Find(x => x.mysql_id == level1Dto.item_id);
|
|
|
+
|
|
|
var ProductiveDate = _productExamineAppService.ProductiveExamine(prodExamine);
|
|
|
- //var Day = ProductiveDate / (60 * 10); //返回的分钟除以十个小时得出工作天数;
|
|
|
|
|
|
- //结束日期=开始时间+生产时长+自检提前期+入库提前期+发运提前期;
|
|
|
- DateTime LeadTime;
|
|
|
- if (plan != null)
|
|
|
- {
|
|
|
- var TQdate = plan.self_inspection_date.GetValueOrDefault() + plan.Warehousing_date.GetValueOrDefault()+ plan.Shipping_date.GetValueOrDefault();
|
|
|
- LeadTime = ProductiveDate.AddDays((double)TQdate);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- LeadTime = ProductiveDate;
|
|
|
- }
|
|
|
- //ProductionTimeDay = LeadTime;
|
|
|
mes_Morders.moentry_sys_etime = LeadTime;
|
|
|
TimeSpan span = ProductiveDate - mes_Morders.moentry_sys_stime.Value;
|
|
|
- mes_Morders.morder_need_time = (decimal)span.TotalMinutes;
|
|
|
+ mes_Morders.morder_need_time = (decimal)span.TotalMinutes;*/
|
|
|
|
|
|
//满足资源检查的时间需加上提前期
|
|
|
- level1Dto.satisfy_time = LeadTime;
|
|
|
+ level1Dto.satisfy_time = mes_Morders.moentry_sys_etime;
|
|
|
if (sentrys != null)
|
|
|
{
|
|
|
sentrys.sys_capacity_date = level1Dto.satisfy_time;
|
|
|
@@ -645,6 +673,7 @@ namespace Business.ResourceExamineManagement
|
|
|
var parent = returnlist.Find(s => s.fid == item.parent_id);
|
|
|
if (item.lack_qty > 0)
|
|
|
{
|
|
|
+ //item.make_time = parent.make_time.GetValueOrDefault();
|
|
|
var cilList = returnlist.Where(s => s.parent_id == item.fid && s.type == item.type).OrderBy(k => k.num_order).ToList();
|
|
|
//如果缺料,占用库存,然后走采购或自制
|
|
|
if (item.sqty > 0)
|
|
|
@@ -656,22 +685,33 @@ namespace Business.ResourceExamineManagement
|
|
|
item.use_qty = item.sqty;
|
|
|
if (item.erp_cls == 1)
|
|
|
{
|
|
|
- /*var ic_item = icitemlist.Find(s => s.Id == item.item_id);
|
|
|
- var mooccupylist = _morderAppService.CheckMorder(item.bom_number, item.lack_qty, plan_date.GetValueOrDefault(), sentrys, ic_item).Result;
|
|
|
+ var ic_item = icitemlist.Find(s => s.mysql_id == item.item_id);
|
|
|
+ List<mo_mes_mooccupy> mooccupylist = new List<mo_mes_mooccupy>();
|
|
|
+ if (param.checkflag)
|
|
|
+ {
|
|
|
+ mooccupylist = _morderAppService.CheckMorder(item.bom_number, item.lack_qty, plan_date.GetValueOrDefault(), sentrys, ic_item, bangid);
|
|
|
+ }
|
|
|
decimal moo_qty = mooccupylist.Sum(s => s.moo_qty.GetValueOrDefault());
|
|
|
item.mo_qty = moo_qty;
|
|
|
- item.mo_occupy_list = new List<mo_occupy>();
|
|
|
- mooccupylist.ForEach(s =>
|
|
|
+
|
|
|
+ if (mooccupylist.Any())
|
|
|
{
|
|
|
- mo_occupy mooc = new mo_occupy();
|
|
|
- mooc.moo_mo = s.moo_mo;
|
|
|
- mooc.moo_stime = s.moo_ctime;
|
|
|
- mooc.moo_etime = s.moo_etime;
|
|
|
- mooc.moo_qty = s.moo_qty;
|
|
|
- item.mo_occupy_list.Add(mooc);
|
|
|
- });*/
|
|
|
- decimal moo_qty = 0;
|
|
|
- if (moo_qty == returnlist[0].lack_qty)
|
|
|
+ mooccupyAllList.AddRange(mooccupylist);
|
|
|
+ mooccupyAllInsertList.AddRange(mooccupylist);
|
|
|
+ //在制占用明细
|
|
|
+ item.mo_occupy_list = new List<mo_occupy>();
|
|
|
+ mooccupylist.ForEach(s =>
|
|
|
+ {
|
|
|
+ mo_occupy mooc = new mo_occupy();
|
|
|
+ mooc.id = s.Id;
|
|
|
+ mooc.moo_mo = s.moo_mo;
|
|
|
+ mooc.moo_stime = s.moo_ctime;
|
|
|
+ mooc.moo_etime = s.moo_etime;
|
|
|
+ mooc.moo_qty = s.moo_qty;
|
|
|
+ item.mo_occupy_list.Add(mooc);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (moo_qty == item.lack_qty)
|
|
|
{
|
|
|
//在制完全足够
|
|
|
item.lack_qty = 0;
|
|
|
@@ -683,17 +723,78 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
item.lack_qty -= moo_qty;
|
|
|
item.kitting_time = DateTime.Now;
|
|
|
- //先计算末级数据的齐套时间。
|
|
|
- if (cilList.Count > 0)
|
|
|
+ //TODO:需要按标准UPH来计算生产时长
|
|
|
+ //生成主工单
|
|
|
+ GenerateMorderDto generateMorderDto = new GenerateMorderDto()
|
|
|
{
|
|
|
- CalcIcitem(cilList, returnlist, bangid, sklist, plan_date, icitemlist, sentrys, childidList);
|
|
|
-
|
|
|
- item.kitting_time = cilList.Max(s => s.kitting_time);
|
|
|
- }
|
|
|
+ seorderentry = sentrys,
|
|
|
+ seorder = seorder,
|
|
|
+ ic_Item = ic_item,
|
|
|
+ BomNumber = item.bom_number,
|
|
|
+ version = item.version,
|
|
|
+ number = item.item_number,
|
|
|
+ Quantity = item.lack_qty,
|
|
|
+ morder_type = morder_type,
|
|
|
+ work_order_type = MorderEnum.CgMorder,
|
|
|
+ morder_state = MorderEnum.Initial_state,
|
|
|
+ bang_id = bangid
|
|
|
+ };
|
|
|
+ Mes_MorderDto mes_MorderDto = _morderAppService.GenerateMorder(generateMorderDto);
|
|
|
+ ProdExamineParamDto prodExamine = new ProdExamineParamDto()
|
|
|
+ {
|
|
|
+ ItemNum = item.item_number,
|
|
|
+ PlanStart = plan_date.GetValueOrDefault(),
|
|
|
+ QtyOrd = item.lack_qty,
|
|
|
+ Domain = param.factoryId.ToString()
|
|
|
+ };
|
|
|
+ int make = _productExamineAppService.ProductTime(prodExamine);
|
|
|
item.make_qty = item.lack_qty;
|
|
|
- //默认中间件需要1天的制造周期
|
|
|
- item.make_time = 1;
|
|
|
- item.kitting_time = item.kitting_time.Value.AddDays(1);
|
|
|
+ if (mes_MorderDto != null)
|
|
|
+ {
|
|
|
+ //主工单最后计算满足日期
|
|
|
+ var mes_Morders = mes_MorderDto.mes_Morders.Where(x => x.parent_id == null).FirstOrDefault();
|
|
|
+ if (mes_Morders != null)
|
|
|
+ {
|
|
|
+ //子工单生成的检查明细,还是挂接到主工单上。
|
|
|
+ mes_Morders.moentry_sys_etime = plan_date.GetValueOrDefault().AddDays(-1);
|
|
|
+ mes_Morders.moentry_sys_stime = mes_Morders.moentry_sys_etime.GetValueOrDefault().AddDays(-(make - 1));
|
|
|
+ item.make_list = new List<moorder>();
|
|
|
+ mes_MorderDto.mes_Morders.ForEach(me =>
|
|
|
+ {
|
|
|
+ moorder mo = new moorder();
|
|
|
+ mo.Id = me.Id;
|
|
|
+ mo.moentry_stime = me.moentry_stime;
|
|
|
+ mo.moentry_etime = me.moentry_etime;
|
|
|
+ mo.moentry_wrkcname = me.moentry_wrkcname;
|
|
|
+ mo.moentry_sys_stime = me.moentry_sys_stime;
|
|
|
+ mo.moentry_sys_etime = me.moentry_sys_etime;
|
|
|
+ mo.moentry_prdname = me.moentry_prdname;
|
|
|
+ mo.morder_need_time = me.morder_need_time;
|
|
|
+ mo.morder_no = me.morder_no;
|
|
|
+ mo.morder_production_number = me.morder_production_number;
|
|
|
+ mo.need_number = me.need_number;
|
|
|
+ mo.reality_end_time = me.reality_end_time;
|
|
|
+ mo.reality_start_time = me.reality_start_time;
|
|
|
+ item.make_list.Add(mo);
|
|
|
+ });
|
|
|
+ //批量保存 后期考虑子工单
|
|
|
+ mordersList.AddRange(mes_MorderDto.mes_Morders);
|
|
|
+ mordersInsertList.AddRange(mes_MorderDto.mes_Morders);
|
|
|
+ moentriesList.AddRange(mes_MorderDto.mes_Moentries);
|
|
|
+ moentriesInsertList.AddRange(mes_MorderDto.mes_Moentries);
|
|
|
+ //先计算末级数据的齐套时间。
|
|
|
+ if (cilList.Count > 0)
|
|
|
+ {
|
|
|
+ CalcIcitem(cilList, returnlist, bangid, sklist, mes_Morders.moentry_sys_stime, icitemlist, sentrys, childidList);
|
|
|
+
|
|
|
+ item.kitting_time = cilList.Max(s => s.kitting_time);
|
|
|
+ }
|
|
|
+ mes_Morders.mat_start_date = item.kitting_time.GetValueOrDefault().AddDays(1).Date;//数据齐套完成后隔天开始生产;
|
|
|
+ mes_Morders.mat_end_date = mes_Morders.mat_start_date.GetValueOrDefault().AddDays(make);
|
|
|
+ item.kitting_time = mes_Morders.mat_end_date;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/*//走自制
|
|
|
ProdExamineParamDto prodExamine = new ProdExamineParamDto()
|
|
|
{
|
|
|
@@ -728,29 +829,30 @@ namespace Business.ResourceExamineManagement
|
|
|
if (item.lack_qty > 0)
|
|
|
{
|
|
|
//采购申请
|
|
|
- PackageSRMPR(item, bangid, sentrys);
|
|
|
+ PackageSRMPR(item, bangid, sentrys, plan_date);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else if (item.erp_cls == 2)
|
|
|
{
|
|
|
+
|
|
|
if (param.checkflag || param.checkPlan)
|
|
|
{
|
|
|
//先找在途
|
|
|
CalcInTransit(sentrys, item, bangid, plan_date.GetValueOrDefault());
|
|
|
if (item.lack_qty > 0)
|
|
|
{
|
|
|
+ //1.先生成委外工单。
|
|
|
+ var mesorder = CreateMesOOder(item, param.company_id, param.factoryId, bangid, leadTimeList, supplierList, plan_date.GetValueOrDefault());
|
|
|
+ mesorder.ooentry_etime = plan_date.GetValueOrDefault().AddDays(-1);
|
|
|
+ var srmprDto = PackageSRMPR(item, bangid, sentrys, plan_date);
|
|
|
+ mesorder.ooentry_stime = mesorder.ooentry_etime.GetValueOrDefault().AddDays(-(srmprDto.totalLeadTime.GetValueOrDefault() - 1));
|
|
|
//先计算末级数据的齐套时间。
|
|
|
if (cilList.Count > 0)
|
|
|
{
|
|
|
- CalcIcitem(cilList, returnlist, bangid, sklist, plan_date, icitemlist, sentrys, childidList);
|
|
|
- item.kitting_time = cilList.Max(s => s.kitting_time);
|
|
|
+ CalcIcitem(cilList, returnlist, bangid, sklist, mesorder.ooentry_stime, icitemlist, sentrys, childidList);
|
|
|
+ item.kitting_time = cilList.Max(s => s.kitting_time).GetValueOrDefault().AddDays(srmprDto.totalLeadTime.GetValueOrDefault());//加上物料的采购提前期
|
|
|
}
|
|
|
- //1.先生成委外工单。
|
|
|
- var mesorder = CreateMesOOder(item, param.company_id, param.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
|
|
|
- //2.生成采购申请
|
|
|
- //采购申请
|
|
|
- PackageSRMPR(item, bangid, sentrys);
|
|
|
item.subcontracting_qty = item.lack_qty;
|
|
|
item.subcontracting_list = new List<ooder>();
|
|
|
ooder oo = new ooder();
|
|
|
@@ -1114,36 +1216,117 @@ namespace Business.ResourceExamineManagement
|
|
|
|
|
|
if (sct.erp_cls == 1)
|
|
|
{
|
|
|
- //先计算末级数据的齐套时间。
|
|
|
- if (cilList.Count > 0)
|
|
|
+ var ic_item = icitemlist.Find(s => s.mysql_id == sct.item_id);
|
|
|
+ List<mo_mes_mooccupy> mooccupylist = new List<mo_mes_mooccupy>();
|
|
|
+ if (param.checkflag)
|
|
|
{
|
|
|
- CalcIcitem(cilList, returnlist, bangid, sklist, plan_date, icitemlist, sentrys, childidList);
|
|
|
- sct.kitting_time = cilList.Max(s => s.kitting_time);
|
|
|
+ mooccupylist = _morderAppService.CheckMorder(sct.bom_number, sct.lack_qty, plan_date.GetValueOrDefault(), sentrys, ic_item, bangid);
|
|
|
}
|
|
|
- sct.make_qty = sct.lack_qty;
|
|
|
- //默认中间件需要1天的制造周期
|
|
|
- sct.make_time = 1;
|
|
|
- sct.kitting_time = sct.kitting_time.Value.AddDays(1);
|
|
|
+ decimal moo_qty = mooccupylist.Sum(s => s.moo_qty.GetValueOrDefault());
|
|
|
+ sct.mo_qty = moo_qty;
|
|
|
|
|
|
- /*//走自制
|
|
|
- ProdExamineParamDto prodExamine = new ProdExamineParamDto()
|
|
|
+ if (mooccupylist.Any())
|
|
|
{
|
|
|
- bom_number = sct.bom_number,
|
|
|
- version = sct.version,
|
|
|
- packages = (int)sct.lack_qty
|
|
|
- };
|
|
|
- _productExamineAppService.process = process;
|
|
|
- _productExamineAppService.techs = techs;
|
|
|
- _productExamineAppService.tech_Processes = tech_Processes;
|
|
|
- _productExamineAppService.tech_Proc_Workshops = tech_Proc_Workshops;
|
|
|
-
|
|
|
- var minute = _productExamineAppService.ProductiveExamine(prodExamine);
|
|
|
- //系统建议完工日期为 开工日期+产能检查时间=完工日期
|
|
|
- var Day = minute / (60 * 10); //返回的分钟除以十个小时得出工作天数;
|
|
|
- sct.kitting_time = sct.kitting_time.Value.AddDays((double)Day);
|
|
|
- sct.make_qty = sct.lack_qty;*/
|
|
|
- //todo:
|
|
|
- sct.make_list = new List<moorder>();
|
|
|
+ mooccupyAllList.AddRange(mooccupylist);
|
|
|
+ mooccupyAllInsertList.AddRange(mooccupylist);
|
|
|
+ //在制占用明细
|
|
|
+ sct.mo_occupy_list = new List<mo_occupy>();
|
|
|
+ mooccupylist.ForEach(s =>
|
|
|
+ {
|
|
|
+ mo_occupy mooc = new mo_occupy();
|
|
|
+ mooc.id = s.Id;
|
|
|
+ mooc.moo_mo = s.moo_mo;
|
|
|
+ mooc.moo_stime = s.moo_ctime;
|
|
|
+ mooc.moo_etime = s.moo_etime;
|
|
|
+ mooc.moo_qty = s.moo_qty;
|
|
|
+ sct.mo_occupy_list.Add(mooc);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (moo_qty == sct.lack_qty)
|
|
|
+ {
|
|
|
+ //在制完全足够
|
|
|
+ sct.lack_qty = 0;
|
|
|
+ //item.kitting_time = mooccupylist[0].moo_etime;
|
|
|
+ sct.kitting_time = DateTime.Now;
|
|
|
+ sct.stock_state = 1;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ sct.lack_qty -= moo_qty;
|
|
|
+ sct.kitting_time = DateTime.Now;
|
|
|
+ //TODO:需要按标准UPH来计算生产时长
|
|
|
+ //生成主工单
|
|
|
+ GenerateMorderDto generateMorderDto = new GenerateMorderDto()
|
|
|
+ {
|
|
|
+ seorderentry = sentrys,
|
|
|
+ seorder = seorder,
|
|
|
+ ic_Item = ic_item,
|
|
|
+ BomNumber = sct.bom_number,
|
|
|
+ version = sct.version,
|
|
|
+ number = sct.item_number,
|
|
|
+ Quantity = sct.lack_qty,
|
|
|
+ morder_type = morder_type,
|
|
|
+ work_order_type = MorderEnum.CgMorder,
|
|
|
+ morder_state = MorderEnum.Initial_state,
|
|
|
+ bang_id = bangid
|
|
|
+ };
|
|
|
+ Mes_MorderDto mes_MorderDto = _morderAppService.GenerateMorder(generateMorderDto);
|
|
|
+ ProdExamineParamDto prodExamine = new ProdExamineParamDto()
|
|
|
+ {
|
|
|
+ ItemNum = sct.item_number,
|
|
|
+ PlanStart = plan_date.GetValueOrDefault(),
|
|
|
+ QtyOrd = sct.lack_qty,
|
|
|
+ Domain = param.factoryId.ToString()
|
|
|
+ };
|
|
|
+ int make = _productExamineAppService.ProductTime(prodExamine);
|
|
|
+ sct.make_qty = sct.lack_qty;
|
|
|
+ if (mes_MorderDto != null)
|
|
|
+ {
|
|
|
+ //主工单最后计算满足日期
|
|
|
+ var mes_Morders = mes_MorderDto.mes_Morders.Where(x => x.parent_id == null).FirstOrDefault();
|
|
|
+ if (mes_Morders != null)
|
|
|
+ {
|
|
|
+ //子工单生成的检查明细,还是挂接到主工单上。
|
|
|
+ //mes_morder = ObjectMapper.Map<mo_mes_morder, mes_morder>(mes_Morders);
|
|
|
+ mes_Morders.moentry_sys_etime = plan_date.GetValueOrDefault().AddDays(-1);
|
|
|
+ mes_Morders.moentry_sys_stime = mes_Morders.moentry_sys_etime.GetValueOrDefault().AddDays(-(make - 1));
|
|
|
+ sct.make_list = new List<moorder>();
|
|
|
+ mes_MorderDto.mes_Morders.ForEach(me =>
|
|
|
+ {
|
|
|
+ moorder mo = new moorder();
|
|
|
+ mo.Id = me.Id;
|
|
|
+ mo.moentry_stime = me.moentry_stime;
|
|
|
+ mo.moentry_etime = me.moentry_etime;
|
|
|
+ mo.moentry_wrkcname = me.moentry_wrkcname;
|
|
|
+ mo.moentry_sys_stime = me.moentry_sys_stime;
|
|
|
+ mo.moentry_sys_etime = me.moentry_sys_etime;
|
|
|
+ mo.moentry_prdname = me.moentry_prdname;
|
|
|
+ mo.morder_need_time = me.morder_need_time;
|
|
|
+ mo.morder_no = me.morder_no;
|
|
|
+ mo.morder_production_number = me.morder_production_number;
|
|
|
+ mo.need_number = me.need_number;
|
|
|
+ mo.reality_end_time = me.reality_end_time;
|
|
|
+ mo.reality_start_time = me.reality_start_time;
|
|
|
+ sct.make_list.Add(mo);
|
|
|
+ });
|
|
|
+ //批量保存 后期考虑子工单
|
|
|
+ mordersList.AddRange(mes_MorderDto.mes_Morders);
|
|
|
+ mordersInsertList.AddRange(mes_MorderDto.mes_Morders);
|
|
|
+ moentriesList.AddRange(mes_MorderDto.mes_Moentries);
|
|
|
+ moentriesInsertList.AddRange(mes_MorderDto.mes_Moentries);
|
|
|
+
|
|
|
+ //先计算末级数据的齐套时间。
|
|
|
+ if (cilList.Count > 0)
|
|
|
+ {
|
|
|
+ CalcIcitem(cilList, returnlist, bangid, sklist, mes_Morders.moentry_sys_stime, icitemlist, sentrys, childidList);
|
|
|
+ sct.kitting_time = cilList.Max(s => s.kitting_time);
|
|
|
+ }
|
|
|
+ mes_Morders.mat_start_date = sct.kitting_time.GetValueOrDefault().AddDays(1).Date;//数据齐套完成后隔天开始生产;
|
|
|
+ mes_Morders.mat_end_date = mes_Morders.mat_start_date.GetValueOrDefault().AddDays(make);
|
|
|
+ sct.kitting_time = mes_Morders.mat_end_date;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
else if (sct.erp_cls == 3)
|
|
|
{
|
|
|
@@ -1154,7 +1337,7 @@ namespace Business.ResourceExamineManagement
|
|
|
if (sct.lack_qty > 0)
|
|
|
{
|
|
|
//采购申请
|
|
|
- PackageSRMPR(sct, bangid, sentrys);
|
|
|
+ PackageSRMPR(sct, bangid, sentrys, plan_date);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -1166,16 +1349,18 @@ namespace Business.ResourceExamineManagement
|
|
|
CalcInTransit(sentrys, sct, bangid, plan_date.GetValueOrDefault());
|
|
|
if (sct.lack_qty > 0)
|
|
|
{
|
|
|
+ //1.先生成委外工单。
|
|
|
+ var mesorder = CreateMesOOder(sct, param.company_id, param.factoryId, bangid, leadTimeList, supplierList, plan_date.GetValueOrDefault());
|
|
|
+ mesorder.ooentry_etime = plan_date.GetValueOrDefault().AddDays(-1);
|
|
|
+ var srmprDto = PackageSRMPR(sct, bangid, sentrys, plan_date);
|
|
|
+ mesorder.start_time = mesorder.ooentry_etime.GetValueOrDefault().AddDays(-(srmprDto.totalLeadTime.GetValueOrDefault() - 1));
|
|
|
+
|
|
|
//先计算末级数据的齐套时间。
|
|
|
if (cilList.Count > 0)
|
|
|
{
|
|
|
- CalcIcitem(cilList, returnlist, bangid, sklist, plan_date, icitemlist, sentrys, childidList);
|
|
|
- sct.kitting_time = cilList.Max(s => s.kitting_time);
|
|
|
+ CalcIcitem(cilList, returnlist, bangid, sklist, mesorder.ooentry_stime, icitemlist, sentrys, childidList);
|
|
|
+ sct.kitting_time = cilList.Max(s => s.kitting_time).GetValueOrDefault().AddDays(srmprDto.totalLeadTime.GetValueOrDefault());//加上物料的采购提前期
|
|
|
}
|
|
|
- //1.先生成委外工单。
|
|
|
- var mesorder = CreateMesOOder(sct, param.company_id, param.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
|
|
|
- //采购申请
|
|
|
- PackageSRMPR(sct, bangid, sentrys);
|
|
|
sct.subcontracting_qty = sct.lack_qty;
|
|
|
sct.subcontracting_list = new List<ooder>();
|
|
|
ooder oo = new ooder();
|
|
|
@@ -1185,7 +1370,7 @@ namespace Business.ResourceExamineManagement
|
|
|
oo.production_unit_code = mesorder.production_unit_code;
|
|
|
oo.ooentry_prdname = mesorder.ooentry_prdname;
|
|
|
oo.ooentry_stime = mesorder.ooentry_stime;
|
|
|
- oo.ooentry_etime = sct.kitting_time;
|
|
|
+ oo.ooentry_etime = mesorder.ooentry_etime;
|
|
|
oo.oorder_date = mesorder.oorder_date;
|
|
|
oo.oorder_no = mesorder.oorder_no;
|
|
|
item.subcontracting_list.Add(oo);
|
|
|
@@ -1227,24 +1412,95 @@ namespace Business.ResourceExamineManagement
|
|
|
item.stock_state = item.lack_qty > 0 ? 0 : 1;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 生成采购申请单,颗粒度是一个物料一个单,没必要弄列表
|
|
|
/// </summary>
|
|
|
/// <param name="returnlist"></param>
|
|
|
/// <param name="factoryid"></param>
|
|
|
/// <param name="orderType">2委外采购申请单,3采购申请单</param>
|
|
|
- private SRMPRDto CreateSRMPR(BomChildExamineDto returnlist, long? companyId, long factoryid, long bangId, int orderType, List<ICItemLeadTimeDto> iCItemLeadTimes, List<mo_srm_purchase> supplierList, List<mo_ic_item> planList, crm_seorderentry sentrys)
|
|
|
+ private SRMPRDto CreateSRMPR(BomChildExamineDto returnlist, long? companyId, long factoryid, long bangId, int orderType, List<ICItemLeadTimeDto> iCItemLeadTimes, List<mo_srm_purchase> supplierList, List<mo_ic_item> planList, crm_seorderentry sentrys, DateTime? plan_date)
|
|
|
{
|
|
|
SRMPRDto sRMPR = new SRMPRDto();
|
|
|
- var supplier = supplierList.OrderBy(s => s.quota_priority).FirstOrDefault();//默认取配额优先级
|
|
|
+ mo_srm_purchase supplier = null;
|
|
|
var plan = planList.Find(x => x.mysql_id == returnlist.item_id);
|
|
|
- sRMPR.srm_Pr_Main = new List<mo_srm_pr_main>();
|
|
|
- if (supplier == null || plan == null)
|
|
|
+ var supplist = supplierList.Where(s => s.icitem_id == returnlist.item_id).ToList();
|
|
|
+ decimal day = 0;
|
|
|
+ if (!supplist.Any() || plan == null)
|
|
|
{
|
|
|
+ returnlist.stock_state = 99;
|
|
|
sRMPR.lastStartTmie = DateTime.Now.AddDays(7);//默认采购提前期
|
|
|
+ sRMPR.totalLeadTime = 7;
|
|
|
return sRMPR;
|
|
|
- //throw new NotImplementedException("未找到物料ic_factory_details或ic_item_pur或ic_plan信息!");
|
|
|
}
|
|
|
+ if (plan_date != null && returnlist.erp_cls == 3)
|
|
|
+ {
|
|
|
+ //判断当前时间与交期还剩余多少天
|
|
|
+ var timesp = plan_date.GetValueOrDefault() - DateTime.Now.Date;
|
|
|
+ //交期-生产时长-物料前处理周期
|
|
|
+ day = Math.Floor(timesp.Days - returnlist.clean_leadtime.GetValueOrDefault());
|
|
|
+ if (day > 0)
|
|
|
+ {
|
|
|
+ supplist = supplist.Where(s => s.lead_time.GetValueOrDefault() < day).ToList();
|
|
|
+ if (supplist.Any())
|
|
|
+ {
|
|
|
+ //TODO:走配额管理
|
|
|
+ List<mo_srm_pr_main> itemPrlist = quarter_srm_pr_mains.Where(s => s.icitem_id == returnlist.item_id).ToList();
|
|
|
+ if (itemPrlist.Any())
|
|
|
+ {
|
|
|
+ decimal qtyCount = itemPrlist.Sum(x => x.pr_aqty).GetValueOrDefault();
|
|
|
+ //按配额比例,计算使用哪个供应商。
|
|
|
+ List<PrPurchaseDto> PrPurchaseDtoList = new List<PrPurchaseDto>();
|
|
|
+ supplist.ForEach(s => {
|
|
|
+ PrPurchaseDto purDto = new PrPurchaseDto();
|
|
|
+ purDto.pr_purchaseid = s.supplier_id;
|
|
|
+ purDto.num = itemPrlist.Where(x => x.pr_purchaseid == s.supplier_id).Sum(c => c.pr_aqty.GetValueOrDefault());
|
|
|
+ purDto.ratio = Math.Round(purDto.num / qtyCount, 2, MidpointRounding.AwayFromZero);
|
|
|
+ purDto.quota_priority = s.quota_priority;
|
|
|
+ purDto.quota_rate = s.quota_rate.GetValueOrDefault();
|
|
|
+ PrPurchaseDtoList.Add(purDto);
|
|
|
+ });
|
|
|
+
|
|
|
+ //首先取出占比还小于配额比的数据
|
|
|
+ var priorityPurlist = PrPurchaseDtoList.Where(s => s.quota_rate - s.ratio > 2).ToList();
|
|
|
+ if (!priorityPurlist.Any())
|
|
|
+ {
|
|
|
+ //没有则取出当前集合中的供应商的数据,计算差额
|
|
|
+ priorityPurlist = PrPurchaseDtoList;
|
|
|
+ }
|
|
|
+ //还没有达到配额比的供应商,优先分配
|
|
|
+ decimal difference = 0;
|
|
|
+ PrPurchaseDto dto1 = priorityPurlist[0];
|
|
|
+ priorityPurlist.ForEach(s => {
|
|
|
+ decimal diff = s.quota_rate - s.ratio;
|
|
|
+ if (diff > difference)
|
|
|
+ {
|
|
|
+ difference = diff;
|
|
|
+ dto1 = s;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ supplier = supplist.Find(s => s.supplier_id == dto1.pr_purchaseid);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ supplier = supplist.OrderBy(s => s.quota_priority).FirstOrDefault();//默认取配额优先级
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ supplier = supplist.OrderBy(s => s.quota_priority).FirstOrDefault();//默认取配额优先级
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ supplier = supplist.OrderBy(s => s.quota_priority).FirstOrDefault();//默认取配额优先级
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //委外暂时不做配额处理
|
|
|
+ supplier = supplist.OrderBy(s => s.quota_priority).FirstOrDefault();//默认取配额优先级
|
|
|
+ }
|
|
|
+ sRMPR.srm_Pr_Main = new List<mo_srm_pr_main>();
|
|
|
mo_srm_pr_main srm_Pr = new mo_srm_pr_main();
|
|
|
srm_Pr.GenerateNewId(help.NextId());
|
|
|
srm_Pr.mysql_id = help.NextId();
|
|
|
@@ -1270,19 +1526,30 @@ namespace Business.ResourceExamineManagement
|
|
|
srm_Pr.icitem_id = returnlist.item_id;//物料id
|
|
|
srm_Pr.icitem_name = returnlist.item_name;//物料名称
|
|
|
srm_Pr.num = returnlist.num;
|
|
|
- var tomorrow = DateTime.Now.Date.AddDays(1);
|
|
|
+
|
|
|
srm_Pr.pr_order_type = 1;//单据类型
|
|
|
- srm_Pr.pr_ssend_date = tomorrow;//系统建议下单日期
|
|
|
- srm_Pr.pr_sarrive_date = DateTime.Now.AddDays((double)plan.order_leadtime).AddDays((double)plan.transportation_leadtime);//系统建议到达日期(建议到货日期)
|
|
|
- srm_Pr.pr_psend_date = tomorrow;//计划下单日期
|
|
|
- srm_Pr.pr_parrive_date = DateTime.Now.AddDays((double)plan.order_leadtime).AddDays((double)plan.transportation_leadtime);//计划到达日期
|
|
|
- srm_Pr.pr_rarrive_date = DateTime.Now.AddDays((double)plan.order_leadtime).AddDays((double)plan.transportation_leadtime);//需求到货日期
|
|
|
+
|
|
|
+ if (plan_date != null && IsInverted)
|
|
|
+ {
|
|
|
+ //-1为提前一天准备
|
|
|
+ int d = ((int)Math.Floor(-1 - returnlist.clean_leadtime.GetValueOrDefault()));
|
|
|
+ srm_Pr.pr_sarrive_date = plan_date.GetValueOrDefault().AddDays(d);
|
|
|
+ srm_Pr.pr_ssend_date = srm_Pr.pr_sarrive_date.Value.AddDays(-(int)Math.Floor(supplier.lead_time.GetValueOrDefault()));//系统建议下单日期
|
|
|
+ if (srm_Pr.pr_ssend_date < DateTime.Now.AddDays(1))
|
|
|
+ {
|
|
|
+ //如果建议下单日期为今天或者过去,则代表物料需求供应时间不够,则需要标记此物料时间不足。
|
|
|
+ var timeSp = DateTime.Now - srm_Pr.pr_ssend_date.Value;
|
|
|
+ returnlist.pre_time = timeSp.Days + 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ srm_Pr.pr_ssend_date = DateTime.Now.Date.AddDays(1);//系统建议下单日期
|
|
|
+ srm_Pr.pr_sarrive_date = DateTime.Now.AddDays((double)supplier.lead_time.GetValueOrDefault());//系统建议到达日期(建议到货日期)
|
|
|
+ }
|
|
|
+ sRMPR.totalLeadTime = (int)Math.Floor(supplier.lead_time.GetValueOrDefault());
|
|
|
srm_Pr.pr_sysprice = supplier.order_price;//系统价格(含税)
|
|
|
srm_Pr.pr_orderprice = qty * supplier.order_price;//订单价格(含税)
|
|
|
srm_Pr.pr_price = supplier.netpurchase_price;//采购净价(不含税)
|
|
|
- /*srm_Pr.pr_sysprice = qty * x.netpurchase_price * (1 + x.taxrate);//系统价格(含税)
|
|
|
- srm_Pr.pr_orderprice = qty * x.netpurchase_price * (1 + x.taxrate);//订单价格(含税)
|
|
|
- srm_Pr.pr_price = x.netpurchase_price;//采购净价(不含税)*/
|
|
|
srm_Pr.pr_rate = supplier.taxrate;//税率
|
|
|
srm_Pr.pr_unit = returnlist.unit;//单位
|
|
|
srm_Pr.state = 1;//状态
|
|
|
@@ -1298,13 +1565,14 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
srm_Pr.sentry_id = sentrys.Id;
|
|
|
}
|
|
|
- decimal? totalLeadTime = plan.transportation_leadtime + plan.stock_leadtime + plan.production_leadtime + plan.order_leadtime;
|
|
|
+ decimal? totalLeadTime = supplier.lead_time.GetValueOrDefault();//plan.transportation_leadtime + plan.stock_leadtime + plan.production_leadtime + plan.order_leadtime;
|
|
|
srm_Pr.totalLeadTime = totalLeadTime;
|
|
|
srm_Pr.create_time = DateTime.Now;
|
|
|
srm_Pr.create_by_name = "admin";
|
|
|
srm_Pr.update_time = DateTime.Now;
|
|
|
srm_Pr.update_by_name = "admin";
|
|
|
sRMPR.srm_Pr_Main.Add(srm_Pr);
|
|
|
+
|
|
|
if (sRMPR.srm_Pr_Main.Any())
|
|
|
{
|
|
|
sRMPR.srm_Pr_Main.OrderBy(x => x.totalLeadTime.GetValueOrDefault()).ThenBy(x => x.pr_orderprice.GetValueOrDefault()).First().isbestoptions = true;
|
|
|
@@ -1345,8 +1613,8 @@ namespace Business.ResourceExamineManagement
|
|
|
oOrder.ooentry_wrkcname = "10001";//工作中心名称
|
|
|
oOrder.planner_num = "wwww";//计划员工号
|
|
|
oOrder.planner_name = "qqq";//计划员名称
|
|
|
- oOrder.ooentry_stime = returnlist.kitting_time == null ? DateTime.Now.AddDays(1) : returnlist.kitting_time.GetValueOrDefault().AddDays(1);//计划开工日期
|
|
|
- oOrder.ooentry_etime = oOrder.ooentry_stime.GetValueOrDefault().AddDays(7);//计划完工日期
|
|
|
+
|
|
|
+ oOrder.ooentry_etime = deliveryDate.AddDays(-1);//计划完工日期
|
|
|
oOrder.product_code = returnlist.item_number;//产品代码
|
|
|
oOrder.ffms_number = "1000";//fms旧料号
|
|
|
oOrder.product_name = returnlist.item_name;//产品名称
|
|
|
@@ -1390,6 +1658,7 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
_purchaseOrderAppService.mo_Srm_Po_Lists = srm_Po_Lists; //采购明细
|
|
|
_purchaseOrderAppService.srm_Po_Occupies = srm_Po_Occupies; //采购明细
|
|
|
+
|
|
|
var occupylist = _purchaseOrderAppService.CheckPurchaseOrder(sentrys, item.item_id, item.lack_qty, plan_date, ic_item_List, bangid);
|
|
|
if (occupylist.Any())
|
|
|
{
|
|
|
@@ -1422,10 +1691,10 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public void PackageSRMPR(BomChildExamineDto item,long bangid, crm_seorderentry sentrys)
|
|
|
+ public SRMPRDto PackageSRMPR(BomChildExamineDto item,long bangid, crm_seorderentry sentrys, DateTime? plan_date)
|
|
|
{
|
|
|
//采购申请
|
|
|
- var SRMPRDto = CreateSRMPR(item, param.company_id, param.factoryId, bangid, item.erp_cls, leadTimeList, supplierList, ic_item_List, sentrys);
|
|
|
+ var SRMPRDto = CreateSRMPR(item, param.company_id, param.factoryId, bangid, item.erp_cls, leadTimeList, supplierList, ic_item_List, sentrys, plan_date);
|
|
|
item.purchase_list = new List<purchase>();
|
|
|
if (SRMPRDto.srm_Pr_Main != null)
|
|
|
{
|
|
|
@@ -1454,10 +1723,10 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
item.purchase_qty = item.lack_qty;
|
|
|
item.purchase_list = new List<purchase>();
|
|
|
-
|
|
|
}
|
|
|
item.kitting_time = SRMPRDto.lastStartTmie;
|
|
|
SRMPRDtoList.Add(SRMPRDto);
|
|
|
+ return SRMPRDto;
|
|
|
}
|
|
|
}
|
|
|
}
|