|
@@ -422,7 +422,7 @@ namespace Business.Replenishment
|
|
|
//标准工艺路径表
|
|
//标准工艺路径表
|
|
|
var sapItemList = yearDemands.Select(m => m.SAPItemNumber).Distinct().ToList();
|
|
var sapItemList = yearDemands.Select(m => m.SAPItemNumber).Distinct().ToList();
|
|
|
List<RoutingOpDetail> routingOps = _routingOpDetail.Select(p => sapItemList.Contains(p.RoutingCode) && p.Domain == input.factory_id.ToString() && p.IsActive);
|
|
List<RoutingOpDetail> routingOps = _routingOpDetail.Select(p => sapItemList.Contains(p.RoutingCode) && p.Domain == input.factory_id.ToString() && p.IsActive);
|
|
|
- var routingOpList = routingOps.Where(x => x.Descr == "去溢料").ToList();
|
|
|
|
|
|
|
+ var routingOpList = routingOps.Where(x => x.Ufld1 == "组装" && x.MilestoneOp).ToList();
|
|
|
//生产线明细表
|
|
//生产线明细表
|
|
|
List<ProdLineDetail> prodLines = _prodLineDetail.Select(p => sapItemList.Contains(p.Part) && p.Domain == input.factory_id.ToString() && p.IsActive && routingOpList.Select(m => m.Op).Contains(p.Op)).OrderBy(x => x.Sequence).ToList();
|
|
List<ProdLineDetail> prodLines = _prodLineDetail.Select(p => sapItemList.Contains(p.Part) && p.Domain == input.factory_id.ToString() && p.IsActive && routingOpList.Select(m => m.Op).Contains(p.Op)).OrderBy(x => x.Sequence).ToList();
|
|
|
List<LocationDetail> locations = _locationDetail.Select(x => sapItemList.Contains(x.ItemNum) && x.Domain == input.factory_id.ToString() && x.IsActive).ToList();
|
|
List<LocationDetail> locations = _locationDetail.Select(x => sapItemList.Contains(x.ItemNum) && x.Domain == input.factory_id.ToString() && x.IsActive).ToList();
|
|
@@ -471,11 +471,11 @@ namespace Business.Replenishment
|
|
|
{
|
|
{
|
|
|
var routingOp = routingOps.Where(x => x.RoutingCode == item.SAPItemNumber).ToList();
|
|
var routingOp = routingOps.Where(x => x.RoutingCode == item.SAPItemNumber).ToList();
|
|
|
//组装标准工时
|
|
//组装标准工时
|
|
|
- var Assembly = routingOp.Where(x => x.Descr == "组装").FirstOrDefault();
|
|
|
|
|
|
|
+ var Assembly = routingOp.Where(x => x.Ufld1 == "组装" && x.MilestoneOp).FirstOrDefault();
|
|
|
//热封标准工时
|
|
//热封标准工时
|
|
|
- var HeatSealing = routingOp.Where(x => x.Descr == "热封").FirstOrDefault();
|
|
|
|
|
|
|
+ var HeatSealing = routingOp.Where(x => x.Ufld1 == "热封" && x.MilestoneOp).FirstOrDefault();
|
|
|
//包装标准工时
|
|
//包装标准工时
|
|
|
- var Packaging = routingOp.Where(x => x.Descr == "包装").FirstOrDefault();
|
|
|
|
|
|
|
+ var Packaging = routingOp.Where(x => x.Ufld1 == "包装" && x.MilestoneOp).FirstOrDefault();
|
|
|
var prodLine = prodLines.Where(x => x.Part == item.SAPItemNumber).OrderBy(x => x.Sequence).FirstOrDefault();
|
|
var prodLine = prodLines.Where(x => x.Part == item.SAPItemNumber).OrderBy(x => x.Sequence).FirstOrDefault();
|
|
|
//不同库位库存数量
|
|
//不同库位库存数量
|
|
|
var locationList = locations.Where(x => x.ItemNum == item.SAPItemNumber).ToList();
|
|
var locationList = locations.Where(x => x.ItemNum == item.SAPItemNumber).ToList();
|
|
@@ -1043,7 +1043,7 @@ namespace Business.Replenishment
|
|
|
mes_Morder.GenerateNewId(help.NextId());
|
|
mes_Morder.GenerateNewId(help.NextId());
|
|
|
mes_Morder.morder_type = MorderEnum.JhMorder;
|
|
mes_Morder.morder_type = MorderEnum.JhMorder;
|
|
|
//mes_Morder.morder_icitem_type
|
|
//mes_Morder.morder_icitem_type
|
|
|
- mes_Morder.work_order_type = MorderEnum.FhMorder;
|
|
|
|
|
|
|
+ mes_Morder.work_order_type = MorderEnum.CgMorder;
|
|
|
mes_Morder.morder_state = MorderEnum.Initial_state;
|
|
mes_Morder.morder_state = MorderEnum.Initial_state;
|
|
|
mes_Morder.morder_no = list[j].NbrResult;
|
|
mes_Morder.morder_no = list[j].NbrResult;
|
|
|
mes_Morder.fms_number = ic_item.fms_number;
|
|
mes_Morder.fms_number = ic_item.fms_number;
|
|
@@ -1070,8 +1070,8 @@ namespace Business.Replenishment
|
|
|
mes_Morder.picking_qty = 0;
|
|
mes_Morder.picking_qty = 0;
|
|
|
//TODO:可删除主表字段
|
|
//TODO:可删除主表字段
|
|
|
mes_Morder.unit = ic_item.unit;
|
|
mes_Morder.unit = ic_item.unit;
|
|
|
- mes_Morder.morder_production_number = itemrop.eop/4;
|
|
|
|
|
- mes_Morder.need_number = itemrop.eop/4;
|
|
|
|
|
|
|
+ mes_Morder.morder_production_number =Math.Ceiling(itemrop.eop.GetValueOrDefault()/4);
|
|
|
|
|
+ mes_Morder.need_number = Math.Ceiling(itemrop.eop.GetValueOrDefault() / 4);
|
|
|
mes_Morder.remaining_number = 0;
|
|
mes_Morder.remaining_number = 0;
|
|
|
mes_Morder.create_time = DateTime.Now;
|
|
mes_Morder.create_time = DateTime.Now;
|
|
|
mes_Morder.bang_id = bang_id;
|
|
mes_Morder.bang_id = bang_id;
|
|
@@ -1081,8 +1081,8 @@ namespace Business.Replenishment
|
|
|
mes_Moentry.moentry_moid = mes_Morder.Id;
|
|
mes_Moentry.moentry_moid = mes_Morder.Id;
|
|
|
mes_Moentry.moentry_mono = mes_Morder.morder_no;
|
|
mes_Moentry.moentry_mono = mes_Morder.morder_no;
|
|
|
mes_Moentry.unit = ic_item.unit;
|
|
mes_Moentry.unit = ic_item.unit;
|
|
|
- mes_Moentry.morder_production_number = itemrop.eop/4;
|
|
|
|
|
- mes_Moentry.need_number = itemrop.eop/4;
|
|
|
|
|
|
|
+ mes_Moentry.morder_production_number = Math.Ceiling(itemrop.eop.GetValueOrDefault() / 4);
|
|
|
|
|
+ mes_Moentry.need_number = Math.Ceiling(itemrop.eop.GetValueOrDefault() / 4);
|
|
|
mes_Moentry.remaining_number = 0;
|
|
mes_Moentry.remaining_number = 0;
|
|
|
mes_Moentry.tenant_id = input.tenant_id;
|
|
mes_Moentry.tenant_id = input.tenant_id;
|
|
|
mes_Moentry.factory_id = input.factory_id;
|
|
mes_Moentry.factory_id = input.factory_id;
|
|
@@ -1182,13 +1182,13 @@ namespace Business.Replenishment
|
|
|
weekPlan.ForEach(a =>
|
|
weekPlan.ForEach(a =>
|
|
|
{
|
|
{
|
|
|
var moItem = examine_resultList.Find(b => b.morder_no == a.OrderNO);
|
|
var moItem = examine_resultList.Find(b => b.morder_no == a.OrderNO);
|
|
|
- var routingOp = routingOps.Where(x => x.RoutingCode == a.ItemNumber).ToList();
|
|
|
|
|
|
|
+ List<RoutingOpDetail> routingOp = routingOps.Where(x => x.RoutingCode == a.ItemNumber ).ToList();
|
|
|
//组装标准工时
|
|
//组装标准工时
|
|
|
- var Assembly = routingOp.Where(x => x.Descr == "组装").FirstOrDefault();
|
|
|
|
|
|
|
+ var Assembly = routingOp.Where(x => x.Ufld1 == "组装" && x.MilestoneOp).FirstOrDefault();
|
|
|
//热封标准工时
|
|
//热封标准工时
|
|
|
- var HeatSealing = routingOp.Where(x => x.Descr == "热封").FirstOrDefault();
|
|
|
|
|
|
|
+ var HeatSealing = routingOp.Where(x => x.Ufld1 == "热封" && x.MilestoneOp).FirstOrDefault();
|
|
|
//包装标准工时
|
|
//包装标准工时
|
|
|
- var Packaging = routingOp.Where(x => x.Descr == "包装").FirstOrDefault();
|
|
|
|
|
|
|
+ var Packaging = routingOp.Where(x => x.Descr == "包装" && x.MilestoneOp).FirstOrDefault();
|
|
|
if (moItem!=null && moItem.kitting_times<a.PlanStartDate)
|
|
if (moItem!=null && moItem.kitting_times<a.PlanStartDate)
|
|
|
{
|
|
{
|
|
|
a.ItemStatus = "齐套";
|
|
a.ItemStatus = "齐套";
|
|
@@ -1286,7 +1286,7 @@ namespace Business.Replenishment
|
|
|
mes_Morder.GenerateNewId(help.NextId());
|
|
mes_Morder.GenerateNewId(help.NextId());
|
|
|
mes_Morder.morder_type = MorderEnum.JhMorder;
|
|
mes_Morder.morder_type = MorderEnum.JhMorder;
|
|
|
//mes_Morder.morder_icitem_type
|
|
//mes_Morder.morder_icitem_type
|
|
|
- mes_Morder.work_order_type = MorderEnum.FhMorder;
|
|
|
|
|
|
|
+ mes_Morder.work_order_type = MorderEnum.CgMorder;
|
|
|
mes_Morder.morder_state = MorderEnum.Initial_state;
|
|
mes_Morder.morder_state = MorderEnum.Initial_state;
|
|
|
mes_Morder.morder_no = list[j].NbrResult;
|
|
mes_Morder.morder_no = list[j].NbrResult;
|
|
|
mes_Morder.fms_number =b.number;
|
|
mes_Morder.fms_number =b.number;
|
|
@@ -1562,7 +1562,7 @@ namespace Business.Replenishment
|
|
|
mes_Morder.GenerateNewId(help.NextId());
|
|
mes_Morder.GenerateNewId(help.NextId());
|
|
|
mes_Morder.morder_type = MorderEnum.JhMorder;
|
|
mes_Morder.morder_type = MorderEnum.JhMorder;
|
|
|
//mes_Morder.morder_icitem_type
|
|
//mes_Morder.morder_icitem_type
|
|
|
- mes_Morder.work_order_type = MorderEnum.FhMorder;
|
|
|
|
|
|
|
+ mes_Morder.work_order_type = MorderEnum.CgMorder;
|
|
|
mes_Morder.morder_state = MorderEnum.Initial_state;
|
|
mes_Morder.morder_state = MorderEnum.Initial_state;
|
|
|
mes_Morder.morder_no = list[j].NbrResult;
|
|
mes_Morder.morder_no = list[j].NbrResult;
|
|
|
mes_Morder.fms_number = b.number;
|
|
mes_Morder.fms_number = b.number;
|
|
@@ -2165,58 +2165,46 @@ namespace Business.Replenishment
|
|
|
/// <returns></returns>
|
|
/// <returns></returns>
|
|
|
public async Task<string> PlanOrderResourceCheck(List<mes_morder> Mes_Morders, List<mes_moentry> moentryList,long bangid, InputDto input)
|
|
public async Task<string> PlanOrderResourceCheck(List<mes_morder> Mes_Morders, List<mes_moentry> moentryList,long bangid, InputDto input)
|
|
|
{
|
|
{
|
|
|
- //先排除锁定期内的工单 //优先级排序
|
|
|
|
|
- var sysSet = _generalizedCodeMaster.Select(s => s.FldName == "SystemConfig" && s.Val == "WorkOrderLockPeriod" && s.Domain == input.factory_id.ToString()).ToList();
|
|
|
|
|
- decimal lookDay = 0;
|
|
|
|
|
- if (sysSet.Any())
|
|
|
|
|
- {
|
|
|
|
|
- //锁定期
|
|
|
|
|
- lookDay = sysSet[0].UDeci1;
|
|
|
|
|
- }
|
|
|
|
|
- lookDay = lookDay == 0 ? 7 : lookDay;
|
|
|
|
|
- DateTime lookTime = DateTime.Now.Date.AddDays((double)lookDay);
|
|
|
|
|
- Mes_Morders = Mes_Morders.Where(s => s.moentry_sys_stime > lookTime || s.moentry_sys_stime == null).OrderBy(s => s.moentry_sys_stime).ToList();
|
|
|
|
|
-
|
|
|
|
|
if (Mes_Morders.Any())
|
|
if (Mes_Morders.Any())
|
|
|
{
|
|
{
|
|
|
- Mes_Morders.ForEach(s => { s.moentry_sys_stime = DateTime.Now.Date.AddDays((double)lookDay + 1); });
|
|
|
|
|
|
|
+ //Mes_Morders.ForEach(s => { s.moentry_sys_stime = DateTime.Now.Date.AddDays((double)lookDay + 1); });
|
|
|
List<string> monolist = Mes_Morders.Select(c => c.morder_no).ToList();
|
|
List<string> monolist = Mes_Morders.Select(c => c.morder_no).ToList();
|
|
|
//清理PR的占用。
|
|
//清理PR的占用。
|
|
|
//如果PR没有转PO,则PR没有合并,就删除,有合并,就减少合并后的PR的数量。
|
|
//如果PR没有转PO,则PR没有合并,就删除,有合并,就减少合并后的PR的数量。
|
|
|
- var prlist = _mysql_srm_pr_main.GetListAsync(s => monolist.Contains(s.pr_mono)).Result;
|
|
|
|
|
- List<srm_pr_main> alllist = new List<srm_pr_main>();
|
|
|
|
|
- List<srm_pr_main> updatelist = new List<srm_pr_main>();
|
|
|
|
|
- List<srm_pr_main> dellist = new List<srm_pr_main>();
|
|
|
|
|
- RecursionGetDbPr2(prlist, alllist);
|
|
|
|
|
- foreach (var pr in prlist)
|
|
|
|
|
- {
|
|
|
|
|
- //找到没有关闭的PR,如果关联上的PR都是已关闭,则说明已经转了PO。
|
|
|
|
|
- //TODO:解决Database operation expected to affect 1 row(s) but actually affected 0 row(s). 如果业务逻辑有问题自行修改
|
|
|
|
|
- var getPr = RerunPr(pr, alllist);
|
|
|
|
|
- if (getPr != null)
|
|
|
|
|
- {
|
|
|
|
|
- if (getPr.pr_aqty - pr.pr_aqty <= 0)
|
|
|
|
|
- {
|
|
|
|
|
- //删除这个pr,没有小于0则是更新
|
|
|
|
|
- dellist.Add(getPr);
|
|
|
|
|
- }
|
|
|
|
|
- else
|
|
|
|
|
- {
|
|
|
|
|
- getPr.pr_aqty = getPr.pr_aqty - pr.pr_aqty;
|
|
|
|
|
- updatelist.Add(getPr);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ //var prlist = _mysql_srm_pr_main.GetListAsync(s => monolist.Contains(s.pr_mono)).Result;
|
|
|
|
|
+ //List<srm_pr_main> alllist = new List<srm_pr_main>();
|
|
|
|
|
+ //List<srm_pr_main> updatelist = new List<srm_pr_main>();
|
|
|
|
|
+ //List<srm_pr_main> dellist = new List<srm_pr_main>();
|
|
|
|
|
+ //RecursionGetDbPr2(prlist, alllist);
|
|
|
|
|
+ //foreach (var pr in prlist)
|
|
|
|
|
+ //{
|
|
|
|
|
+ // //找到没有关闭的PR,如果关联上的PR都是已关闭,则说明已经转了PO。
|
|
|
|
|
+ // //TODO:解决Database operation expected to affect 1 row(s) but actually affected 0 row(s). 如果业务逻辑有问题自行修改
|
|
|
|
|
+ // var getPr = RerunPr(pr, alllist);
|
|
|
|
|
+ // if (getPr != null)
|
|
|
|
|
+ // {
|
|
|
|
|
+ // if (getPr.pr_aqty - pr.pr_aqty <= 0)
|
|
|
|
|
+ // {
|
|
|
|
|
+ // //删除这个pr,没有小于0则是更新
|
|
|
|
|
+ // dellist.Add(getPr);
|
|
|
|
|
+ // }
|
|
|
|
|
+ // else
|
|
|
|
|
+ // {
|
|
|
|
|
+ // getPr.pr_aqty = getPr.pr_aqty - pr.pr_aqty;
|
|
|
|
|
+ // updatelist.Add(getPr);
|
|
|
|
|
+ // }
|
|
|
|
|
+ // }
|
|
|
|
|
+ //}
|
|
|
List<srm_po_occupy> occupy = await _mysql_srm_po_occupy.GetListAsync(s => monolist.Contains(s.morder_mo));
|
|
List<srm_po_occupy> occupy = await _mysql_srm_po_occupy.GetListAsync(s => monolist.Contains(s.morder_mo));
|
|
|
_businessDbContext.BulkDelete(occupy);
|
|
_businessDbContext.BulkDelete(occupy);
|
|
|
- if (updatelist.Any())
|
|
|
|
|
- {
|
|
|
|
|
- _businessDbContext.BulkUpdate(updatelist);
|
|
|
|
|
- }
|
|
|
|
|
- if (dellist.Any())
|
|
|
|
|
- {
|
|
|
|
|
- _businessDbContext.BulkDelete(dellist);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ //if (updatelist.Any())
|
|
|
|
|
+ //{
|
|
|
|
|
+ // _businessDbContext.BulkUpdate(updatelist);
|
|
|
|
|
+ //}
|
|
|
|
|
+ //if (dellist.Any())
|
|
|
|
|
+ //{
|
|
|
|
|
+ // _businessDbContext.BulkDelete(dellist);
|
|
|
|
|
+ //}
|
|
|
//清理掉库存占用
|
|
//清理掉库存占用
|
|
|
var itemstockoccupy = _mysql_ic_item_stockoccupy.GetListAsync(s => monolist.Contains(s.morder_mo)).Result;
|
|
var itemstockoccupy = _mysql_ic_item_stockoccupy.GetListAsync(s => monolist.Contains(s.morder_mo)).Result;
|
|
|
if (itemstockoccupy.Any())
|
|
if (itemstockoccupy.Any())
|
|
@@ -2224,16 +2212,16 @@ namespace Business.Replenishment
|
|
|
_businessDbContext.BulkDelete(itemstockoccupy);
|
|
_businessDbContext.BulkDelete(itemstockoccupy);
|
|
|
}
|
|
}
|
|
|
//清理锁定期外的排程数据.
|
|
//清理锁定期外的排程数据.
|
|
|
- var periodList = _periodSequenceDet.Select(s => monolist.Contains(s.WorkOrds));
|
|
|
|
|
- if (periodList.Any())
|
|
|
|
|
- {
|
|
|
|
|
- _periodSequenceDet.Delete(s => monolist.Contains(s.WorkOrds));
|
|
|
|
|
- }
|
|
|
|
|
- var schedulList = _scheduleResultOpMaster.Select(s => monolist.Contains(s.WorkOrd));
|
|
|
|
|
- if (schedulList.Any())
|
|
|
|
|
- {
|
|
|
|
|
- _scheduleResultOpMaster.Delete(s => monolist.Contains(s.WorkOrd));
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ //var periodList = _periodSequenceDet.Select(s => monolist.Contains(s.WorkOrds));
|
|
|
|
|
+ //if (periodList.Any())
|
|
|
|
|
+ //{
|
|
|
|
|
+ // _periodSequenceDet.Delete(s => monolist.Contains(s.WorkOrds));
|
|
|
|
|
+ //}
|
|
|
|
|
+ //var schedulList = _scheduleResultOpMaster.Select(s => monolist.Contains(s.WorkOrd));
|
|
|
|
|
+ //if (schedulList.Any())
|
|
|
|
|
+ //{
|
|
|
|
|
+ // _scheduleResultOpMaster.Delete(s => monolist.Contains(s.WorkOrd));
|
|
|
|
|
+ //}
|
|
|
//只走计划工单
|
|
//只走计划工单
|
|
|
var rtn = await OrderKittingCheck(Mes_Morders, moentryList, bangid, true);
|
|
var rtn = await OrderKittingCheck(Mes_Morders, moentryList, bangid, true);
|
|
|
}
|
|
}
|