|
|
@@ -1,3 +1,4 @@
|
|
|
+using Amazon.Runtime.Internal;
|
|
|
using Business.Core.Enum;
|
|
|
using Business.Core.Utilities;
|
|
|
using Business.Domain;
|
|
|
@@ -5702,9 +5703,18 @@ namespace Business.ResourceExamineManagement
|
|
|
var weekday = (int)DateTime.Now.DayOfWeek;
|
|
|
int adddays = weekday==0?1:8-weekday;
|
|
|
DateTime beginTime = Convert.ToDateTime(DateTime.Now.AddDays(adddays).ToString("yyyy-MM-dd 00:00:00.000"));
|
|
|
- DateTime endTime = Convert.ToDateTime(DateTime.Now.AddDays(adddays+21+6).ToString("yyyy-MM-dd 23:59:59.999"));
|
|
|
- var workords=_workOrdMaster.Select(a => a.OrdDate >= beginTime && a.OrdDate <= endTime && a.Domain == domain);
|
|
|
- var workordList = workords.Select(x => x.WorkOrd).Distinct().ToList();
|
|
|
+ DateTime endTime = Convert.ToDateTime(DateTime.Now.AddDays(adddays+21+28+6).ToString("yyyy-MM-dd 23:59:59.999"));
|
|
|
+ var workords=_workOrdMaster.Select(a => a.OrdDate >= beginTime && a.OrdDate <= endTime && a.Domain == domain && a.Status!="C");
|
|
|
+ var workordList = workords.Select(x => x.WorkOrd).Distinct().ToList();
|
|
|
+
|
|
|
+ //存在提前开工的情况
|
|
|
+ var workordsPickBill = _workOrdMaster.Select(a => a.OrdDate < beginTime && (a.Status=="R"|| a.Status=="W") && a.Domain == domain);
|
|
|
+ var workordListPickBill = workordsPickBill.Select(x => x.WorkOrd).Distinct().ToList();
|
|
|
+ if(workordList.Count>0)
|
|
|
+ {
|
|
|
+ workordListPickBill.AddRange(workordList);
|
|
|
+ }
|
|
|
+
|
|
|
var workExamineResult=_businessBangDbContext.b_examine_result.Where(a => workordList.Contains(a.morder_no) && a.factory_id.ToString()==domain).GroupBy(i => i.morder_no).Select(g => new
|
|
|
{
|
|
|
workOrd = g.Key,
|
|
|
@@ -5712,10 +5722,14 @@ namespace Business.ResourceExamineManagement
|
|
|
}).ToList();
|
|
|
//需要测试工单没有做资源检查会不会报错
|
|
|
var examineIds = workExamineResult.Select(s => s.examineId).ToList();
|
|
|
- var examines=_mysql_bom_child_examine.GetListAsync(a => examineIds.Contains(a.examine_id.Value) && a.erp_cls==3 && a.is_use && a.factory_id.ToString() == domain).Result;
|
|
|
- var pickBills = _nbrDetail.Select(a => workordList.Contains(a.WorkOrd) && a.Type.ToUpper()=="SM" && a.Domain == domain);
|
|
|
+ var examines=_mysql_bom_child_examine.GetListAsync(a => examineIds.Contains(a.examine_id.Value) && (a.erp_cls==3 || a.erp_cls==2) && a.is_use && a.factory_id.ToString() == domain).Result;
|
|
|
+ var pickBills = _nbrDetail.Select(a => workordListPickBill.Contains(a.WorkOrd) && a.Type.ToUpper()=="SM" && (a.QtyOrd - a.QtyRec)>0 && a.Domain == domain);
|
|
|
var dsList=_srm_polist_ds.Select(a => a.requestdate <= endTime && a.domain==domain);
|
|
|
- var itemList = _itemMaster.Select(a => examines.Select(e=>e.item_number).Distinct().ToList().Contains(a.ItemNum) && a.Domain == domain);
|
|
|
+ var items = examines.Select(e => e.item_number).Distinct().ToList();
|
|
|
+ var itempickbills=pickBills.Select(s => s.ItemNum);
|
|
|
+ items.AddRange(itempickbills);
|
|
|
+ items = items.Distinct().ToList();
|
|
|
+ var itemList = _itemMaster.Select(a => items.Contains(a.ItemNum) && a.Domain == domain);
|
|
|
var locationRange = _configurationItem.Select(x => x.FldName == "MRPLocationRange" && x.Domain == domain).FirstOrDefault();
|
|
|
|
|
|
List<string> locationList = new List<string> { "1000", "1001", "5007", "5008"};
|
|
|
@@ -5723,10 +5737,10 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
locationList = locationRange.Val.SplitToArray(",").ToList();
|
|
|
}
|
|
|
- var itemListStock = _SAPInv.Select(a => examines.Select(e => e.item_number).Distinct().ToList().Contains(a.MATNR) && locationList.Contains(a.LGORT) && a.WERKS == domain);
|
|
|
+ var itemListStock = _SAPInv.Select(a => items.Contains(a.MATNR) && locationList.Contains(a.LGORT) && a.WERKS == domain);
|
|
|
List<ic_demandschedule> ds = new List<ic_demandschedule>();
|
|
|
Dictionary<string, decimal> weekStockQty = new Dictionary<string, decimal>();
|
|
|
- foreach(var item in itemListStock)
|
|
|
+ foreach (var item in itemListStock)
|
|
|
{
|
|
|
if(!weekStockQty.ContainsKey(item.MATNR))
|
|
|
{
|
|
|
@@ -5736,35 +5750,42 @@ namespace Business.ResourceExamineManagement
|
|
|
weekStockQty[item.MATNR] += (item.LABST + item.INSME);
|
|
|
}
|
|
|
}
|
|
|
- for (int i=0;i<4;i++)
|
|
|
+ for (int i=0;i<8;i++)
|
|
|
{
|
|
|
var itemBegin = beginTime.AddDays(i*7);
|
|
|
- var itemEnd = endTime.AddDays(7 * i-21);
|
|
|
+ var itemEnd = endTime.AddDays(7 * i-21-28);
|
|
|
var workItem = workords.Where(a => a.OrdDate >= itemBegin && a.OrdDate <= itemEnd).ToList();
|
|
|
List<DemandscheduleDto> itemQty = new List<DemandscheduleDto>();
|
|
|
if (workItem.Count>0)
|
|
|
{
|
|
|
foreach (var item in workItem)
|
|
|
{
|
|
|
- var examids = workExamineResult.First(a => item.WorkOrd==a.workOrd);
|
|
|
- if(examids!=null && examids.examineId>0)
|
|
|
+ //存在提前开工,提前下达的已经算在待发料里面了
|
|
|
+ if(item.Status.ToUpper()!="R")
|
|
|
{
|
|
|
- var itemLackList=examines.Where(a => a.examine_id == examids.examineId).ToList();
|
|
|
- itemLackList?.ForEach(a =>
|
|
|
+ var examids = workExamineResult.Find(a => item.WorkOrd == a.workOrd);
|
|
|
+ if (examids != null && examids.examineId > 0)
|
|
|
{
|
|
|
- if(itemQty.Any(s=>s.ItemNum==a.item_number))
|
|
|
+ var itemLackList = examines.Where(a => a.examine_id == examids.examineId).ToList();
|
|
|
+ itemLackList?.ForEach(a =>
|
|
|
{
|
|
|
- itemQty.Find(s=>s.ItemNum==a.item_number).LackQty+= a.lack_qty.GetValueOrDefault();
|
|
|
- itemQty.Find(s => s.ItemNum == a.item_number).NeedQty += a.needCount.GetValueOrDefault();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- DemandscheduleDto demandscheduleDto = new DemandscheduleDto() { ItemNum = a.item_number,LackQty= a.lack_qty.GetValueOrDefault(),NeedQty = a.needCount.GetValueOrDefault()};
|
|
|
- itemQty.Add(demandscheduleDto);
|
|
|
- }
|
|
|
- });
|
|
|
+ if (itemQty.Any(s => s.ItemNum == a.item_number))
|
|
|
+ {
|
|
|
+ itemQty.Find(s => s.ItemNum == a.item_number).LackQty += a.lack_qty.GetValueOrDefault();
|
|
|
+ itemQty.Find(s => s.ItemNum == a.item_number).NeedQty += a.needCount.GetValueOrDefault();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ DemandscheduleDto demandscheduleDto = new DemandscheduleDto() { ItemNum = a.item_number, LackQty = a.lack_qty.GetValueOrDefault(), NeedQty = a.needCount.GetValueOrDefault() };
|
|
|
+ itemQty.Add(demandscheduleDto);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ new NLogHelper("ResourceExamineAppService").WriteLog("CreateDemandSchedule", "生成交货计划:" + item.WorkOrd + "找不到资源检查记录", _currentTenant.Id.ToString());
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
var requestdate = workItem.Min(a => a.OrdDate);
|
|
|
|
|
|
@@ -5781,8 +5802,16 @@ namespace Business.ResourceExamineManagement
|
|
|
itemds.requestdate = requestdate.GetValueOrDefault();
|
|
|
itemds.arrivaldate = requestdate.GetValueOrDefault().AddDays(-1).AddDays(-itemNum.InsLT).AddDays(-(int)Math.Ceiling(itemNum.MFGMTTR));
|
|
|
itemds.shortqty =d.LackQty;
|
|
|
- //工单需求+已下达工单领料单待发料
|
|
|
- itemds.mesqty =d.NeedQty + pickBills.Where(a=> workItem.Select(s=>s.WorkOrd).Contains(a.WorkOrd) && a.ItemNum== d.ItemNum).Sum(q=>q.QtyOrd-q.QtyRec);
|
|
|
+ //工单需求+已下达工单领料单待发料(只算第一次)
|
|
|
+ if(i==0)
|
|
|
+ {
|
|
|
+ itemds.mesqty = d.NeedQty + pickBills.Where(a => a.ItemNum == d.ItemNum).Sum(q => q.QtyOrd - q.QtyRec);
|
|
|
+ pickBills.RemoveAll(a => a.ItemNum == d.ItemNum);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ itemds.mesqty = d.NeedQty;
|
|
|
+ }
|
|
|
//库存需要做扣减
|
|
|
if(weekStockQty.ContainsKey(d.ItemNum))
|
|
|
{
|
|
|
@@ -5803,15 +5832,60 @@ namespace Business.ResourceExamineManagement
|
|
|
itemds.tosechedqty = itemds.mesqty-(itemds.locqty + itemds.sechedqty);
|
|
|
itemds.status = "";
|
|
|
itemds.remarks = "";
|
|
|
- itemds.tenant_id = examines[0].tenant_id;
|
|
|
- itemds.company_id = examines[0].company_id;
|
|
|
- itemds.factory_id = examines[0].factory_id;
|
|
|
+ itemds.tenant_id = examines.Count>0?examines[0].tenant_id:1000;
|
|
|
+ itemds.company_id = examines.Count > 0 ? examines[0].company_id:1000;
|
|
|
+ itemds.factory_id = examines.Count > 0 ? examines[0].factory_id:8010;
|
|
|
itemds.create_time = DateTime.Now;
|
|
|
itemds.update_time= DateTime.Now;
|
|
|
ds.Add(itemds);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ if(i==0)
|
|
|
+ {
|
|
|
+ var pickbillItems= pickBills.Select(a=>a.ItemNum).Distinct().ToList();
|
|
|
+ foreach(var item in pickbillItems)
|
|
|
+ {
|
|
|
+ var itemNum = itemList.Find(a => a.ItemNum == item);
|
|
|
+ ic_demandschedule itemds = new ic_demandschedule();
|
|
|
+ itemds.GenerateNewId(help.NextId());
|
|
|
+ itemds.itemnum = item;
|
|
|
+ itemds.fversion = itemNum.Rev;
|
|
|
+ itemds.drawing = itemNum.Drawing;
|
|
|
+ itemds.requestdate = itemBegin;
|
|
|
+ itemds.arrivaldate = itemBegin.AddDays(-1).AddDays(-itemNum.InsLT).AddDays(-(int)Math.Ceiling(itemNum.MFGMTTR));
|
|
|
+ itemds.shortqty = 0;
|
|
|
+ itemds.mesqty = pickBills.Where(a => a.ItemNum == item).Sum(q => q.QtyOrd - q.QtyRec);
|
|
|
+ //库存需要做扣减
|
|
|
+ if (weekStockQty.ContainsKey(item))
|
|
|
+ {
|
|
|
+ itemds.locqty = weekStockQty[item];
|
|
|
+ if (itemds.mesqty >= itemds.locqty)
|
|
|
+ {
|
|
|
+ weekStockQty[item] = 0;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ weekStockQty[item] -= itemds.mesqty;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ itemds.locqty = 0;
|
|
|
+ }
|
|
|
+ //累计在途数量
|
|
|
+ itemds.sechedqty = dsList.Where(a => a.requestdate < itemds.arrivaldate && a.itemnum == item).Sum(a => a.schedqty - a.sentqty);
|
|
|
+ itemds.tosechedqty = itemds.mesqty - (itemds.locqty + itemds.sechedqty);
|
|
|
+ itemds.status = "";
|
|
|
+ itemds.remarks = "";
|
|
|
+ itemds.tenant_id = examines.Count > 0 ? examines[0].tenant_id : 1000;
|
|
|
+ itemds.company_id = examines.Count > 0 ? examines[0].company_id : 1000;
|
|
|
+ itemds.factory_id = examines.Count > 0 ? examines[0].factory_id : 8010;
|
|
|
+ itemds.create_time = DateTime.Now;
|
|
|
+ itemds.update_time = DateTime.Now;
|
|
|
+ ds.Add(itemds);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
await _mysql_ic_demandschedule.HardDeleteAsync(a => a.status != "P");
|
|
|
_srm_polist_ds.Delete(a=>a.status=="N");
|