|
|
@@ -1152,67 +1152,79 @@ namespace Business.ResourceExamineManagement
|
|
|
//直接按间隔多少天一次来处理数据,定时任务按周四来考虑。
|
|
|
DateTime toTime = DateTime.Now; //new DateTime(2023, 7, 6);
|
|
|
DateTime starttime = toTime.Date.AddDays(1);
|
|
|
- DateTime endtime = toTime.Date.AddDays(7);
|
|
|
+ DateTime endtime = toTime.Date.AddDays(28);
|
|
|
//只合并要货令
|
|
|
- List<srm_pr_main> prlist = _mysql_srm_pr_main.GetListAsync(s => s.company_id.ToString() == companyid && s.pr_ssend_date >= starttime && s.pr_ssend_date <= endtime && s.state == 1).Result;
|
|
|
- List<ic_item> ic_Items = _mysql_ic_item.GetListAsync(s => s.company_id.ToString() == companyid && prlist.Select(c => c.icitem_id).Distinct().Contains(s.Id)).Result;
|
|
|
+ List<srm_pr_main> alllist = _mysql_srm_pr_main.GetListAsync(s => s.company_id.ToString() == companyid && s.pr_ssend_date >= starttime && s.pr_ssend_date <= endtime && s.state == 1).Result;
|
|
|
+ List<ic_item> ic_Items = _mysql_ic_item.GetListAsync(s => s.company_id.ToString() == companyid && alllist.Select(c => c.icitem_id).Distinct().Contains(s.Id)).Result;
|
|
|
|
|
|
- var occupylist = _mysql_srm_po_occupy.GetListAsync(s => prlist.Select(c => c.Id).Contains(s.polist_id.GetValueOrDefault()) && s.company_id.ToString() == companyid && s.IsDeleted == false).Result;
|
|
|
+ var occupylist = _mysql_srm_po_occupy.GetListAsync(s => alllist.Select(c => c.Id).Contains(s.polist_id.GetValueOrDefault()) && s.company_id.ToString() == companyid && s.IsDeleted == false).Result;
|
|
|
|
|
|
- List<srm_pr_main> insetPrList = new List<srm_pr_main>();
|
|
|
- List<srm_pr_main> updatePrList = new List<srm_pr_main>();
|
|
|
- long Nbr = help.NextId();
|
|
|
- foreach (var pr in prlist)
|
|
|
+ List<srm_pr_main> insetAllList = new List<srm_pr_main>();
|
|
|
+ List<srm_pr_main> updateAllList = new List<srm_pr_main>();
|
|
|
+
|
|
|
+ //每次发布四周的数据
|
|
|
+ for (int i = 0; i < 4; i++)
|
|
|
{
|
|
|
- bool bl = pr.sentry_id == null;//区分是销售订单和非销售订单的合并。
|
|
|
- //找到是否生成了新的PR 当前数据是否已经产生合并,则不再合并。
|
|
|
- var newPr = insetPrList.Find(s => s.pr_purchaseid == pr.pr_purchaseid && s.icitem_id == pr.icitem_id && s.IsRequireGoods == pr.IsRequireGoods && s.supplier_type==pr.supplier_type && (s.sentry_id == null) == bl);
|
|
|
- //var newPr = insetPrList.Find(s => s.pr_purchaseid == pr.pr_purchaseid && s.icitem_id == pr.icitem_id);
|
|
|
- if (newPr == null)
|
|
|
+ starttime = toTime.Date.AddDays(i * 7 + 1);
|
|
|
+ endtime = toTime.Date.AddDays((i + 1) * 7);
|
|
|
+ List<srm_pr_main> prlist = alllist.Where(s => s.pr_ssend_date >= starttime && s.pr_ssend_date <= endtime).ToList();
|
|
|
+ List<srm_pr_main> insetPrList = new List<srm_pr_main>();
|
|
|
+ List<srm_pr_main> updatePrList = new List<srm_pr_main>();
|
|
|
+ long Nbr = help.NextId();
|
|
|
+ foreach (var pr in prlist)
|
|
|
{
|
|
|
- //有多条才进行合并
|
|
|
- var ilist = prlist.Where(s => s.pr_purchaseid == pr.pr_purchaseid && s.icitem_id == pr.icitem_id && s.IsRequireGoods == pr.IsRequireGoods && s.supplier_type == pr.supplier_type && (s.sentry_id == null) == bl).ToList();
|
|
|
- //var ilist = prlist.Where(s => s.pr_purchaseid == pr.pr_purchaseid && s.icitem_id == pr.icitem_id).ToList();
|
|
|
- if (ilist.Count > 1)
|
|
|
+ bool bl = pr.sentry_id == null;//区分是销售订单和非销售订单的合并。
|
|
|
+ //找到是否生成了新的PR 当前数据是否已经产生合并,则不再合并。
|
|
|
+ var newPr = insetPrList.Find(s => s.pr_purchaseid == pr.pr_purchaseid && s.icitem_id == pr.icitem_id && s.IsRequireGoods == pr.IsRequireGoods && s.supplier_type == pr.supplier_type && (s.sentry_id == null) == bl);
|
|
|
+ if (newPr == null)
|
|
|
{
|
|
|
- var icitem = ic_Items.Find(s => s.Id == pr.icitem_id);
|
|
|
- var prRefoccupy = occupylist.Where(s => s.polist_id == pr.Id).ToList();
|
|
|
- newPr = help.DeepCopy(pr);
|
|
|
- newPr.GenerateNewId(help.NextId());
|
|
|
- prRefoccupy.ForEach(a => {
|
|
|
- a.polist_id = newPr.Id;
|
|
|
- });
|
|
|
- newPr.pr_billno = Nbr.ToString();//pr单号
|
|
|
- newPr.state = pr.state;
|
|
|
- newPr.pr_rqty = ilist.Sum(s => s.pr_rqty);//需求数量
|
|
|
- newPr.pr_aqty = ilist.Sum(s => s.pr_aqty);//申请数量
|
|
|
- newPr.pr_sqty = ilist.Sum(s => s.pr_sqty);//建议数量
|
|
|
-
|
|
|
- newPr.pr_ssend_date = ilist.Min(s => s.pr_ssend_date);//系统建议下单日期
|
|
|
- newPr.pr_sarrive_date = ilist.Min(s => s.pr_sarrive_date);//系统建议到达日期(建议到货日期)
|
|
|
- /* newPr.pr_psend_date = ilist.Min(s => s.pr_psend_date);//计划下单日期
|
|
|
- newPr.pr_parrive_date = ilist.Min(s => s.pr_parrive_date);//计划到达日期
|
|
|
- newPr.pr_rarrive_date = ilist.Min(s => s.pr_rarrive_date);//需求到货日期*/
|
|
|
-
|
|
|
- //newPr.pr_sysprice = newPr.pr_rqty * pr.pr_price * (1 + pr.pr_rate);//系统价格(含税)
|
|
|
- newPr.pr_orderprice = newPr.pr_aqty * pr.pr_sysprice;//订单价格(含税)
|
|
|
- ilist.ForEach(s => { s.refer_pr_billno = newPr.pr_billno; });
|
|
|
- insetPrList.Add(newPr);
|
|
|
- ilist.ForEach(s => { s.state = 0; });
|
|
|
- updatePrList.AddRange(ilist);
|
|
|
- Nbr++;
|
|
|
+ //有多条才进行合并
|
|
|
+ var ilist = prlist.Where(s => s.pr_purchaseid == pr.pr_purchaseid && s.icitem_id == pr.icitem_id && s.IsRequireGoods == pr.IsRequireGoods && s.supplier_type == pr.supplier_type && (s.sentry_id == null) == bl).ToList();
|
|
|
+ //var ilist = prlist.Where(s => s.pr_purchaseid == pr.pr_purchaseid && s.icitem_id == pr.icitem_id).ToList();
|
|
|
+ if (ilist.Count > 1)
|
|
|
+ {
|
|
|
+ var icitem = ic_Items.Find(s => s.Id == pr.icitem_id);
|
|
|
+ var prRefoccupy = occupylist.Where(s => s.polist_id == pr.Id).ToList();
|
|
|
+ newPr = help.DeepCopy(pr);
|
|
|
+ newPr.GenerateNewId(help.NextId());
|
|
|
+ prRefoccupy.ForEach(a => {
|
|
|
+ a.polist_id = newPr.Id;
|
|
|
+ });
|
|
|
+ newPr.pr_billno = Nbr.ToString();//pr单号
|
|
|
+ newPr.state = pr.state;
|
|
|
+ newPr.pr_rqty = ilist.Sum(s => s.pr_rqty);//需求数量
|
|
|
+ newPr.pr_aqty = ilist.Sum(s => s.pr_aqty);//申请数量
|
|
|
+ newPr.pr_sqty = ilist.Sum(s => s.pr_sqty);//建议数量
|
|
|
+
|
|
|
+ newPr.pr_ssend_date = ilist.Min(s => s.pr_ssend_date);//系统建议下单日期
|
|
|
+ newPr.pr_sarrive_date = ilist.Min(s => s.pr_sarrive_date);//系统建议到达日期(建议到货日期)
|
|
|
+ /* newPr.pr_psend_date = ilist.Min(s => s.pr_psend_date);//计划下单日期
|
|
|
+ newPr.pr_parrive_date = ilist.Min(s => s.pr_parrive_date);//计划到达日期
|
|
|
+ newPr.pr_rarrive_date = ilist.Min(s => s.pr_rarrive_date);//需求到货日期*/
|
|
|
+
|
|
|
+ //newPr.pr_sysprice = newPr.pr_rqty * pr.pr_price * (1 + pr.pr_rate);//系统价格(含税)
|
|
|
+ newPr.pr_orderprice = newPr.pr_aqty * pr.pr_sysprice;//订单价格(含税)
|
|
|
+ ilist.ForEach(s => { s.refer_pr_billno = newPr.pr_billno; });
|
|
|
+ insetPrList.Add(newPr);
|
|
|
+ ilist.ForEach(s => { s.state = 0; });
|
|
|
+ updatePrList.AddRange(ilist);
|
|
|
+ Nbr++;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+ insetAllList.AddRange(insetPrList);
|
|
|
+ updateAllList.AddRange(updatePrList);
|
|
|
}
|
|
|
- if (insetPrList.Any())
|
|
|
+
|
|
|
+ if (insetAllList.Any())
|
|
|
{
|
|
|
- var nbrlistDto = _serialNumberAppService.GetBillNo(insetPrList[0].factory_id.ToString(), "PR", insetPrList.Count, "admin", 1);
|
|
|
+ var nbrlistDto = _serialNumberAppService.GetBillNo(insetAllList[0].factory_id.ToString(), "PR", insetAllList.Count, "admin", 1);
|
|
|
int index = 0;
|
|
|
- foreach (var p in insetPrList)
|
|
|
+ foreach (var p in insetAllList)
|
|
|
{
|
|
|
if (nbrlistDto[index] != null)
|
|
|
{
|
|
|
- updatePrList.Where(x => x.refer_pr_billno == p.pr_billno).ToList().ForEach(c =>
|
|
|
+ updateAllList.Where(x => x.refer_pr_billno == p.pr_billno).ToList().ForEach(c =>
|
|
|
{
|
|
|
c.refer_pr_billno = nbrlistDto[index].NbrResult.ToString();
|
|
|
});
|
|
|
@@ -1238,13 +1250,13 @@ namespace Business.ResourceExamineManagement
|
|
|
try
|
|
|
{
|
|
|
|
|
|
- if (insetPrList.Any())
|
|
|
+ if (insetAllList.Any())
|
|
|
{
|
|
|
- _businessDbContext.BulkInsert(insetPrList);
|
|
|
+ _businessDbContext.BulkInsert(insetAllList);
|
|
|
}
|
|
|
- if (updatePrList.Any())
|
|
|
+ if (updateAllList.Any())
|
|
|
{
|
|
|
- _businessDbContext.BulkUpdate(updatePrList);
|
|
|
+ _businessDbContext.BulkUpdate(updateAllList);
|
|
|
}
|
|
|
if (occupylist.Any())
|
|
|
{
|
|
|
@@ -1266,9 +1278,10 @@ namespace Business.ResourceExamineManagement
|
|
|
/// <param name="companyid"></param>
|
|
|
public async Task<string> PrSendSAP(string companyid)
|
|
|
{
|
|
|
+ //按要求推送四周数据
|
|
|
DateTime toTime = DateTime.Now;
|
|
|
DateTime starttime = toTime.Date.AddDays(1);
|
|
|
- DateTime endtime = toTime.Date.AddDays(7);
|
|
|
+ DateTime endtime = toTime.Date.AddDays(28);
|
|
|
//取出采购申请数据
|
|
|
List<srm_pr_main> prapplyList = _mysql_srm_pr_main.GetListAsync(s => s.company_id.ToString() == companyid && s.pr_ssend_date >= starttime && s.pr_ssend_date <= endtime && s.state == 1 && s.IsRequireGoods == 0).Result;
|
|
|
string seqSql = "";
|
|
|
@@ -1387,10 +1400,10 @@ namespace Business.ResourceExamineManagement
|
|
|
//PR自动审核
|
|
|
public async Task<string> PrAutoApprove(string companyid)
|
|
|
{
|
|
|
- //直接按间隔多少天一次来处理数据,定时任务按周四来考虑。
|
|
|
+ //按要求改成发布四周任务。
|
|
|
DateTime toTime = DateTime.Now.Date;
|
|
|
DateTime starttime = toTime.AddDays(1);
|
|
|
- DateTime endtime = toTime.AddDays(7);
|
|
|
+ DateTime endtime = toTime.AddDays(28);
|
|
|
List<srm_pr_main> prlist = _mysql_srm_pr_main.GetListAsync(s => s.company_id.ToString() == companyid && s.IsRequireGoods == 1 && s.pr_ssend_date >= starttime &&
|
|
|
s.pr_ssend_date <= endtime && s.state == 1).Result;
|
|
|
|
|
|
@@ -1727,7 +1740,7 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- List<mo_ic_item_stockoccupy> item_stockoccupy = await _ic_item_stockoccupy.GetListAsync(s => seIds.Contains(s.orderentry_id.Value) && bangidList.Contains(s.bang_id));
|
|
|
+ List<mo_ic_item_stockoccupy> item_stockoccupy = await _ic_item_stockoccupy.GetListAsync(s => seIds.Contains(s.orderentry_id.GetValueOrDefault()) && bangidList.Contains(s.bang_id));
|
|
|
|
|
|
using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
|
|
|
{
|
|
|
@@ -2702,7 +2715,6 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
if (checkMo.Any())
|
|
|
{
|
|
|
-
|
|
|
var rtn = await OrderKittingCheck(checkMo);
|
|
|
if (rtn != null && rtn.examines != null)
|
|
|
{
|
|
|
@@ -3883,7 +3895,7 @@ namespace Business.ResourceExamineManagement
|
|
|
};
|
|
|
nbrMasterList.Add(newNbr);
|
|
|
List<string> headAccount = new List<string>();
|
|
|
- int i = 1;
|
|
|
+ short i = 1;
|
|
|
bool typed = !string.IsNullOrEmpty(workord.Typed);
|
|
|
detail.ForEach(a =>
|
|
|
{
|
|
|
@@ -4777,12 +4789,11 @@ namespace Business.ResourceExamineManagement
|
|
|
DateTime startTime = DateTime.Now;
|
|
|
//尚未开始生产的工单+正在生产的工单
|
|
|
var workOrds = _workOrdMaster.Select(p => p.IsActive && p.Domain == domain && ((p.OrdDate < endDate && p.OrdDate >= startTime && p.Status.ToUpper() == "P" && (string.IsNullOrEmpty(p.Typed) || (!string.IsNullOrEmpty(p.Typed) && p.Typed.ToUpper() != "PW" && p.BusinessID > 0))) || p.Status.ToUpper() == "W")).ToList();
|
|
|
- string result = "OK";
|
|
|
if (workOrds.Any())
|
|
|
{
|
|
|
- result = await _productionScheduleAppService.DoProductSchedule(startTime, workOrds, domain, 2);
|
|
|
+ await _productionScheduleAppService.DoProductSchedule(startTime, workOrds, domain, 2);
|
|
|
}
|
|
|
- return result;
|
|
|
+ return "OK";
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -4793,31 +4804,34 @@ namespace Business.ResourceExamineManagement
|
|
|
/// <exception cref="NotImplementedException"></exception>
|
|
|
public async Task<string> UpdatePlanDate(UpdateDto input)
|
|
|
{
|
|
|
- WorkOrdMaster workOrd = _workOrdMaster.Select(p=>p.IsActive && p.Domain == input.domain && p.WorkOrd == input.workord).FirstOrDefault();
|
|
|
- if (workOrd == null)
|
|
|
- {
|
|
|
- return "NO|工单【"+input.workord+"】不存在,请联系系统管理员!";
|
|
|
- }
|
|
|
- //更新工单计划开工日期,调整是否需要处理提前期状态字段为B
|
|
|
- workOrd.OrdDate = input.planDate;
|
|
|
- workOrd.JointTyped = "B";
|
|
|
- _workOrdMaster.Update(workOrd);
|
|
|
-
|
|
|
//获取需要排产的工单(获取四周的工单:正常工单+已审批通过的特殊工单)
|
|
|
DateTime endDate = DateTime.Now.Date.AddDays(28).AddDays(1);
|
|
|
//取数开始时间为当前天的下一天
|
|
|
DateTime startTime = DateTime.Now;
|
|
|
//尚未开始生产的工单+正在生产的工单
|
|
|
- var workOrds = _workOrdMaster.Select(p => p.IsActive && p.Domain == input.domain && ((p.OrdDate < endDate && p.OrdDate >= startTime && p.Status.ToUpper() == "P" && (string.IsNullOrEmpty(p.Typed) || (!string.IsNullOrEmpty(p.Typed) && p.Typed.ToUpper() != "PW" && p.BusinessID > 0))) || p.Status.ToLower() == "w")).ToList();
|
|
|
- //调用优先级计算算法
|
|
|
- workOrds = _replenishmentAppService.CalcPriority(workOrds.Select(p=>p.WorkOrd).ToList(), input.domain);
|
|
|
+ var workOrds = _workOrdMaster.Select(p => p.IsActive && p.Domain == input.domain && (p.WorkOrd == input.workord || (p.OrdDate < endDate && p.OrdDate >= startTime && p.Status.ToUpper() == "P" && (string.IsNullOrEmpty(p.Typed) || (!string.IsNullOrEmpty(p.Typed) && p.Typed.ToUpper() != "PW" && p.BusinessID > 0))) || p.Status.ToLower() == "w")).ToList();
|
|
|
+ if (!workOrds.Exists(p=>p.WorkOrd == input.workord))
|
|
|
+ {
|
|
|
+ return "NO|工单【" + input.workord + "】不存在,请联系系统管理员!";
|
|
|
+ }
|
|
|
+ //计算工单优先级
|
|
|
+ var workInfos = _replenishmentAppService.CalcPriority(workOrds.Select(p => p.WorkOrd).ToList(), input.domain);
|
|
|
+ workOrds.ForEach(p => {
|
|
|
+ p.OrdDate = p.WorkOrd == input.workord ? input.planDate : p.OrdDate;
|
|
|
+ p.JointTyped = p.WorkOrd == input.workord ? "B" : p.JointTyped;
|
|
|
+ p.Priority = p.WorkOrd == input.workord ? workInfos.First(p => p.WorkOrd == input.workord).Priority : p.Priority;
|
|
|
+ });
|
|
|
//执行排产
|
|
|
- string result = "OK";
|
|
|
if (workOrds.Any())
|
|
|
{
|
|
|
- result = await _productionScheduleAppService.DoProductSchedule(startTime, workOrds, input.domain, 2);
|
|
|
+ await _productionScheduleAppService.DoProductSchedule(startTime, workOrds, input.domain, 2);
|
|
|
}
|
|
|
- return result;
|
|
|
+ //更新原工单优先级
|
|
|
+ WorkOrdMaster workOrd = _workOrdMaster.Select(p => p.IsActive && p.Domain == input.domain && p.WorkOrd == input.workord).FirstOrDefault();
|
|
|
+ workOrd.Priority = workInfos.First(p => p.WorkOrd == workOrd.WorkOrd).Priority;
|
|
|
+ workOrd.JointTyped = "";
|
|
|
+ _workOrdMaster.Update(workOrd);
|
|
|
+ return "OK";
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -4845,7 +4859,7 @@ namespace Business.ResourceExamineManagement
|
|
|
var dtls = subDetalis.Where(s => s.substitute_group_id == g.Id).ToList();
|
|
|
foreach (var dtl in dtls)
|
|
|
{
|
|
|
- var l = list.Find(s => s.item_number == dtl.icitem_number && s.qty == dtl.replace_qty);
|
|
|
+ var l = list.Find(s => s.item_number == dtl.icitem_number);
|
|
|
if (l == null)
|
|
|
{
|
|
|
return "当前替代方案【" + code + "】的标准件未找到相同数量相同物料的BOM明细。";
|