Sfoglia il codice sorgente

Merge branch 'dev' of http://123.60.180.165:4647/ZZYDOP/DOPCore into dev

heteng 2 anni fa
parent
commit
7aa17688a1

+ 51 - 0
MicroServices/Business/Business.Application.Contracts/Dto/AlignmentCalcDto.cs

@@ -0,0 +1,51 @@
+using Business.Domain;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Business.Dto
+{
+    /// <summary>
+    /// 需求对齐计算DTO
+    /// </summary>
+    public class AlignmentCalcDto
+    {
+        public string ItemNum { get; set; }
+
+        /// <summary>
+        /// 需求总数
+        /// </summary>
+        public decimal NeedQty { get; set; }
+        /// <summary>
+        /// 库存数量
+        /// </summary>
+        public decimal InventoryQty { get; set; }
+        /// <summary>
+        /// 采购数量(含采购申请和要货令)
+        /// </summary>
+        public decimal ProcureQty { get; set; }
+        /// <summary>
+        /// 差额数量(正数增加采购,负数减少采购)
+        /// </summary>
+        public decimal DifferenceQty { get; set; }
+
+        /// <summary>
+        /// 修改数量
+        /// </summary>
+        public decimal updateQty { get; set; }
+
+        /// <summary>
+        /// 删除数量
+        /// </summary>
+        public decimal deleteQty { get; set; }
+
+        public List<srm_pr_main> addPrlist { get; set; } = new List<srm_pr_main>();
+
+        public List<srm_pr_main> deletePrlist { get; set; } = new List<srm_pr_main>();
+
+        public List<srm_pr_main> updatePrlist { get; set; } = new List<srm_pr_main>();
+    }
+}

+ 295 - 58
MicroServices/Business/Business.Application/ReplenishmentManagement/ReplenishmentAppService.cs

@@ -19,6 +19,7 @@ using MongoDB.Driver.Linq;
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.ComponentModel.Design;
 using System.Linq;
 using System.Threading.Tasks;
 using Volo.Abp.Application.Services;
@@ -3154,7 +3155,7 @@ namespace Business.Replenishment
                 weekPlan[i].ProductionOrder = morder_noList[i].NbrResult;
                 weekPlan[i].OrderNO = OrderNOList[i].NbrResult;
             }
-            await PlanOrderResourceCheck(moList.OrderBy(a=>a.moentry_sys_stime).ToList(), moentryList, bang_id,"",false);
+            await PlanOrderResourceCheck(moList.OrderBy(a=>a.moentry_sys_stime).ToList(), moentryList, bang_id,"",false,false);
 
             var examine_resultList = _mysql_examine_result.GetListAsync(a => a.bangid == bang_id).Result;
             await _businessDbContext.BulkInsertAsync(moList);
@@ -3237,7 +3238,7 @@ namespace Business.Replenishment
         }
 
         /// <summary>
-        /// 根据月度计划生成周计划
+        /// 根据周计划生成周工单
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
@@ -3315,19 +3316,24 @@ namespace Business.Replenishment
                 moentryList[i].moentry_mono = morder_noList[i].NbrResult;
                 weekplans[i].ProductionOrder = morder_noList[i].NbrResult;
             }
-            await PlanOrderResourceCheck(moList.OrderBy(a => a.moentry_sys_stime).ToList(), moentryList, bang_id, "",false);
-
-            var examine_resultList = _mysql_examine_result.GetListAsync(a => a.bangid == bang_id).Result;
             await _businessDbContext.BulkInsertAsync(moList);
             await _businessDbContext.BulkInsertAsync(moentryList);
 
+            //2024/01/10:卫亮工单需求对齐采购需求,取所有未下达的工单做资源检查
+            var moListCheck=_mysql_mes_morder.GetListAsync(a=>(a.morder_state==MorderEnum.Initial_state|| string.IsNullOrEmpty(a.morder_state)) && a.factory_id == input.factory_id).Result;
+            var moEntryListCheck = _mysql_mes_moentry.GetListAsync(a => moListCheck.Select(b=>b.morder_no).ToList().Contains(a.moentry_mono) && a.factory_id == input.factory_id).Result;
+            
+            await PlanOrderResourceCheck(moListCheck.OrderBy(a => a.moentry_sys_stime).ToList(), moEntryListCheck, bang_id, "",false,true);
+
+            var examine_resultList = _mysql_examine_result.GetListAsync(a => a.bangid == bang_id).Result;
+     
+
             //批量保存 后期考虑子工单
             List<WorkOrdMaster> workOrdSave = new List<WorkOrdMaster>();
             List<WorkOrdRouting> workOrdRoutingSave = new List<WorkOrdRouting>();
             List<WorkOrdDetail> workOrdDetails = new List<WorkOrdDetail>();
             if (moList.Any())
             {
-                moList.ForEach(s => { s.create_time = DateTime.Now; });
                 List<b_bom_child_examine> childExamineList = _mysql_bom_child_examine.GetListAsync(c => examine_resultList.Select(x => x.Id).Contains(c.examine_id.GetValueOrDefault())).Result;
                 //同步工单
                 CreateWorkOrdDates(moList, routingOps, workOrdSave, workOrdRoutingSave, workOrdDetails, examine_resultList, childExamineList);
@@ -3356,44 +3362,43 @@ namespace Business.Replenishment
                 _businessDbContext.BulkInsert(workOrdDetails);
             }
 
-            weekplans.ForEach(a =>
+            var weekplanList = _replenishmentWeekPlan.GetListAsync(a => moListCheck.Select(b=>b.morder_no).ToList().Contains(a.ProductionOrder) && a.IsReplenishmentModel=="N" && a.factory_id == input.factory_id).Result;
+
+            weekplanList.ForEach(a =>
             {
-                if (a.IsReplenishmentModel == "N")
+                var moItem = examine_resultList.Find(b => b.morder_no == a.ProductionOrder);
+                List<RoutingOpDetail> routingOp = routingOps.Where(x => x.RoutingCode == a.ItemNumber).ToList();
+                //组装标准工时
+                var Assembly = routingOp.Where(x => x.Ufld1 == "组装" && x.MilestoneOp).FirstOrDefault();
+                //热封标准工时
+                var HeatSealing = routingOp.Where(x => x.Ufld1 == "热封" && x.MilestoneOp).FirstOrDefault();
+                //包装标准工时
+                var Packaging = routingOp.Where(x => x.Descr == "包装" && x.MilestoneOp).FirstOrDefault();
+                if (moItem != null && moItem.kitting_times < a.PlanStartDate)
+                {
+                    a.ItemStatus = "齐套";
+                    a.PlanKittingDate = moItem.kitting_times;
+                    a.AssembleHours = Assembly == null ? 0 : Assembly.RunTime * a.Qty;
+                    a.HeatSealHours = HeatSealing == null ? 0 : HeatSealing.RunTime * a.Qty;
+                    a.PackageHours = Packaging == null ? 0 : Packaging.RunTime * a.Qty;
+                    a.TotalHours = a.AssembleHours + a.HeatSealHours + a.PackageHours;
+                }
+                else
                 {
-                    var moItem = examine_resultList.Find(b => b.morder_no == a.ProductionOrder);
-                    List<RoutingOpDetail> routingOp = routingOps.Where(x => x.RoutingCode == a.ItemNumber).ToList();
-                    //组装标准工时
-                    var Assembly = routingOp.Where(x => x.Ufld1 == "组装" && x.MilestoneOp).FirstOrDefault();
-                    //热封标准工时
-                    var HeatSealing = routingOp.Where(x => x.Ufld1 == "热封" && x.MilestoneOp).FirstOrDefault();
-                    //包装标准工时
-                    var Packaging = routingOp.Where(x => x.Descr == "包装" && x.MilestoneOp).FirstOrDefault();
-                    if (moItem != null && moItem.kitting_times < a.PlanStartDate)
-                    {
-                        a.ItemStatus = "齐套";
-                        a.PlanKittingDate = moItem.kitting_times;
-                        a.AssembleHours = Assembly == null ? 0 : Assembly.RunTime * a.Qty;
-                        a.HeatSealHours = HeatSealing == null ? 0 : HeatSealing.RunTime * a.Qty;
-                        a.PackageHours = Packaging == null ? 0 : Packaging.RunTime * a.Qty;
-                        a.TotalHours = a.AssembleHours + a.HeatSealHours + a.PackageHours;
-                    }
-                    else
-                    {
-                        a.ItemStatus = "欠料";
-                        a.PlanKittingDate = moItem.kitting_times;
-                        a.AssembleHours = Assembly == null ? 0 : Assembly.RunTime * a.Qty;
-                        a.HeatSealHours = HeatSealing == null ? 0 : HeatSealing.RunTime * a.Qty;
-                        a.PackageHours = Packaging == null ? 0 : Packaging.RunTime * a.Qty;
-                        a.TotalHours = a.AssembleHours + a.HeatSealHours + a.PackageHours;
-                    }
-                    var workOrd = workOrdSave.Find(b => b.WorkOrd == a.ProductionOrder);
-                    if (workOrd != null)
-                    {
-                        a.Priority = workOrd.Priority;
-                    }
+                    a.ItemStatus = "欠料";
+                    a.PlanKittingDate = moItem.kitting_times;
+                    a.AssembleHours = Assembly == null ? 0 : Assembly.RunTime * a.Qty;
+                    a.HeatSealHours = HeatSealing == null ? 0 : HeatSealing.RunTime * a.Qty;
+                    a.PackageHours = Packaging == null ? 0 : Packaging.RunTime * a.Qty;
+                    a.TotalHours = a.AssembleHours + a.HeatSealHours + a.PackageHours;
+                }
+                var workOrd = workOrdSave.Find(b => b.WorkOrd == a.ProductionOrder);
+                if (workOrd != null)
+                {
+                    a.Priority = workOrd.Priority;
                 }
             });
-            await _businessDbContext.BulkUpdateAsync(weekplans);
+            await _businessDbContext.BulkUpdateAsync(weekplanList);
             return "OK";
         }
 
@@ -4453,7 +4458,7 @@ namespace Business.Replenishment
                             a.QtyOrded = newqty;
                         });
 
-                        await PlanOrderResourceCheck(moList.OrderBy(a => a.moentry_sys_stime).ToList(), moentryList, bang_id, "", true);
+                        await PlanOrderResourceCheck(moList.OrderBy(a => a.moentry_sys_stime).ToList(), moentryList, bang_id, "", true,false);
 
                         var examine_resultList = _mysql_examine_result.GetListAsync(a => a.bangid == bang_id).Result;
                         if (weekPlan.IsReplenishmentModel == "N")
@@ -4552,7 +4557,7 @@ namespace Business.Replenishment
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
-        public async Task<string> PlanOrderResourceCheck(List<mes_morder> Mes_Morders, List<mes_moentry> moentryList,long bangid,string analogCalcVersion,bool isChangePriority)
+        public async Task<string> PlanOrderResourceCheck(List<mes_morder> Mes_Morders, List<mes_moentry> moentryList,long bangid,string analogCalcVersion,bool isChangePriority,bool IsWeekPlan)
         {
             if (Mes_Morders.Any())
             {
@@ -4612,7 +4617,7 @@ namespace Business.Replenishment
                 //    _scheduleResultOpMaster.Delete(s => monolist.Contains(s.WorkOrd));
                 //}
                 //只走计划工单
-                var rtn = await OrderKittingCheck(Mes_Morders, moentryList, bangid,analogCalcVersion,isChangePriority, true);
+                var rtn = await OrderKittingCheck(Mes_Morders, moentryList, bangid,analogCalcVersion,isChangePriority, true, IsWeekPlan);
             }
             else
             {
@@ -4662,7 +4667,7 @@ namespace Business.Replenishment
         /// 工单检查物料齐套
         /// </summary>
         /// <param name="input"></param>
-        public async Task<PschedDto> OrderKittingCheck(List<mes_morder> mo_Mes_Morders, List<mes_moentry> moentryList,long bangid,string analogCalcVersion, bool isChangePriority, bool planCheck = false)
+        public async Task<PschedDto> OrderKittingCheck(List<mes_morder> mo_Mes_Morders, List<mes_moentry> moentryList,long bangid,string analogCalcVersion, bool isChangePriority, bool planCheck = false,bool IsWeekPlan=false)
         {
             //资源检查结果
             PschedDto rtn = new PschedDto();
@@ -4732,7 +4737,37 @@ namespace Business.Replenishment
                 AutoCreateBomBill(param.company_id.ToString(), autoCreates);
                 pretreatments = _mysql_b_bom_pretreatment.GetListAsync(s => boms.Select(c => c.mysql_id).ToList().Contains(s.sourceid)).Result;
             }
-            AsyncItemStockFromWMS(pretreatments);
+            List<string> itemNums = new List<string>();
+            //计算需求
+            List<AlignmentCalcDto> AlignmentCalcList = new List<AlignmentCalcDto>();
+            if (IsWeekPlan)
+            {
+                var nbrList = _nbrMaster.Select(x => x.Domain == param.factoryId.ToString() && (x.Type == "SM" || x.Type == "Z07") && x.Status.ToUpper() != "C").ToList();
+                if (nbrList.Any())
+                {
+                    var nbrDtlList = _nbrDetail.Select(x => nbrList.Select(c => c.RecID).Contains(x.NbrRecID) && x.Status.ToUpper() != "C").ToList();
+                    if (nbrDtlList.Any())
+                    {
+                        nbrDtlList.ForEach(x => {
+                            if (x.QtyOrd - x.QtyRec > 0)
+                            {
+                                var dto = AlignmentCalcList.Find(s => s.ItemNum == x.ItemNum);
+                                if (dto == null)
+                                {
+                                    dto = new AlignmentCalcDto();
+                                    dto.ItemNum = x.ItemNum;
+                                    AlignmentCalcList.Add(dto);
+                                }
+                                dto.NeedQty += x.QtyOrd - x.QtyRec;
+                            }
+                        });
+                    }
+                }
+                itemNums.AddRange(AlignmentCalcList.Select(x => x.ItemNum));
+            }
+            var pretreatList = pretreatments.Select(x => x.item_number).Distinct().ToList();
+            itemNums.AddRange(pretreatList);
+            AsyncItemStockFromWMS(itemNums);
 
             //数据库快照-同步mysql库数据到mongoDB中
             await DbSnapShot(input.company_id, input.factoryId, bangid, pretreatments, analogCalcVersion);
@@ -4919,18 +4954,98 @@ namespace Business.Replenishment
                         }
                     }
                 }
-                //获取工单数据
-                var workOrdMasters = _workOrdMaster.Select(p => mo_Mes_Morders.Select(c => c.morder_no).Contains(p.WorkOrd));
-                workOrdMasters.ForEach(s => {
-                    var mo = mo_Mes_Morders.Find(m => m.morder_no == s.WorkOrd);
-                    if (mo != null)
+
+                List<srm_pr_main> updatPrList = new List<srm_pr_main>();
+                List<srm_pr_main> deletePrList = new List<srm_pr_main>();
+                List<srm_pr_main> addPrList = new List<srm_pr_main>();
+                if (IsWeekPlan)
+                {
+                    foreach (var exami in examines)
+                    {
+                        exami.BomChildExamineList.ForEach(x =>
+                        {
+                            if ((x.erp_cls == 2 || x.erp_cls == 3) && x.is_use)
+                            {
+                                var dto = AlignmentCalcList.Find(s => s.ItemNum == x.item_number);
+                                if (dto == null)
+                                {
+                                    dto = new AlignmentCalcDto();
+                                    dto.ItemNum = x.item_number;
+                                    AlignmentCalcList.Add(dto);
+                                }
+                                dto.NeedQty += x.needCount;
+                            }
+                        });
+                    }
+                    var ic_items = _mysql_ic_item.GetListAsync(x => AlignmentCalcList.Select(c => c.ItemNum).Contains(x.number)).Result;
+                    //库存
+                    var dbitemstockList = _mysql_ic_item_stock.GetListAsync(a => AlignmentCalcList.Select(x => x.ItemNum).Contains(a.icitem_number) && a.factory_id == param.factoryId).Result;
+                    //获取PR和PO
+                    var DBprmainList = _mysql_srm_pr_main.GetListAsync(x => x.factory_id == param.factoryId && x.state != 0 && x.state != 4 && string.IsNullOrEmpty(x.analogcalcversion) == true && ic_items.Select(a => a.Id).Contains(x.icitem_id.GetValueOrDefault())).Result;
+                    //PO、DO
+                    var purordmstList = _PurOrdMaster.Select(x => string.IsNullOrEmpty(x.Status) && x.Status.ToUpper() != "C").ToList();
+                    var purorddtlList = new List<PurOrdDetail>();
+                    if (purordmstList.Any())
+                    {
+                        purorddtlList = _PurOrdDetail.Select(x => purordmstList.Select(a => a.PurOrd).Contains(x.PurOrd) && x.QtyOrded - x.RctQty > 0 && string.IsNullOrEmpty(x.Status) && x.Status.ToUpper() != "C").ToList();
+                    }
+                    AlignmentCalcList.ForEach(x =>
+                    {
+                        var stock = dbitemstockList.Find(c => c.icitem_number == x.ItemNum);
+                        if (stock != null)
+                        {
+                            x.InventoryQty += stock.sqty.GetValueOrDefault();
+                        }
+                        if (DBprmainList.Any() || prmainlist.Any())
+                        {
+                            var icitem = ic_items.Find(a => a.number == x.ItemNum);
+                            if (icitem != null)
+                            {
+                                x.ProcureQty += DBprmainList.Where(a => a.icitem_id == icitem.Id).Sum(c => c.pr_aqty.GetValueOrDefault());
+                                x.ProcureQty += prmainlist.Where(a => a.icitem_id == icitem.Id).Sum(c => c.pr_aqty.GetValueOrDefault());
+                            }
+                        }
+                        if (purorddtlList.Any())
+                        {
+                            x.ProcureQty += purorddtlList.Where(a => a.ItemNum == x.ItemNum).Sum(c => c.QtyOrded - c.RctQty);
+                        }
+                        //差异数量=工单需求总数-库存数量-PR、PO采购在途数量
+                        x.DifferenceQty = x.NeedQty - x.InventoryQty - x.ProcureQty;
+                    });
+                    //需要增加PR的集合
+                    var prAddList = AlignmentCalcList.Where(x => x.DifferenceQty > 0).ToList();
+                    //需要减少PR的集合
+                    var prDelList = AlignmentCalcList.Where(x => x.DifferenceQty < 0).ToList();
+                    var dbPurchaseList = _mysql_srm_purchase.GetListAsync(x => x.factory_id == param.factoryId && x.quota_rate.GetValueOrDefault() > 0 && AlignmentCalcList.Select(c => c.ItemNum).Contains(x.number)).Result;
+                    //获取需要新增的PR
+                    var sysSet = _generalizedCodeMaster.Select(s => s.FldName == "SystemConfig" && s.Val == "ScheduleAgreement" && s.Domain == param.factoryId.ToString()).ToList();
+                    int ScheduleAgreement = 0;//计划协议 0不启用,1启用
+                    if (sysSet.Any())
                     {
-                        //锁定期
-                        s.OrdDate = mo.moentry_sys_stime;
-                        s.DueDate = mo.moentry_sys_stime;
+                        if (!string.IsNullOrEmpty(sysSet[0].Ufld1))
+                        {
+                            int.TryParse(sysSet[0].Ufld1, out ScheduleAgreement);
+                        }
                     }
+                    //需要新增的PR集合
+                    addPrList = CalcPrAdd(prAddList, dbPurchaseList, ic_items, ScheduleAgreement);
+                    if (addPrList.Any())
+                    {
+                        var addPrlistDto = _serialNumberAppService.GetBillNo(param.factoryId.ToString(), "PR", addPrList.Count, "admin", 1);
+                        int index = 0;
+                        foreach (var p in addPrList)
+                        {
+                            if (addPrlistDto[index] != null)
+                            {
+                                p.pr_billno = addPrlistDto[index].NbrResult.ToString();
+                            }
+                            index++;
+                        }
+                    }
+                    //数据库需要减少的PR集合
+                    CalcPrDel(prDelList, dbPurchaseList, ic_items, DBprmainList.Where(x=>x.state==1).ToList(), updatPrList, deletePrList);//只取新增状态的PR,可以做删除或者修改
+                }
 
-                });
                 using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
                 {
                     try
@@ -5012,6 +5127,21 @@ namespace Business.Replenishment
                                 _businessDbContext.BulkInsert(mainWorkOrdDetails);
                             }
                         }
+                        if (IsWeekPlan)
+                        {
+                            if (addPrList.Any())
+                            {
+                                _businessDbContext.BulkInsert(addPrList);
+                            }
+                            if (updatPrList.Any())
+                            {
+                                _businessDbContext.BulkUpdate(updatPrList);
+                            }
+                            if (deletePrList.Any())
+                            {
+                                await _mysql_srm_pr_main.HardDeleteAsync(deletePrList);
+                            }
+                        }
                         await unitOfWork.CompleteAsync();
                     }
                     catch (Exception e)
@@ -5029,6 +5159,113 @@ namespace Business.Replenishment
             return rtn;
         }
 
+        public void CalcPrDel(List<AlignmentCalcDto> prDelList,List<srm_purchase> purchase,List<ic_item> ic_items, List<srm_pr_main> dbPrlist, List<srm_pr_main> updatPrList, List<srm_pr_main> deletePrList)
+        {
+            prDelList.ForEach(dto => {
+                var itemPurList = purchase.Where(x => x.number == dto.ItemNum).ToList();
+                var icitem = ic_items.Find(x => x.number == dto.ItemNum);
+                if (itemPurList.Any() && icitem!=null)
+                {
+                    itemPurList.ForEach(c => {
+                        //当前供应商需减少数量
+                        decimal qty = Math.Floor(Math.Abs(dto.DifferenceQty) * c.quota_rate.GetValueOrDefault() / 100);
+                        //当前物料当前供应商的在途采购申请
+                        var itemSupplierList = dbPrlist.Where(x => x.icitem_id == icitem.Id && x.pr_purchaseid == c.supplier_id).OrderByDescending(f => f.pr_sarrive_date).ToList();
+                        if (itemSupplierList.Any())
+                        {
+                            foreach (var itemPr in itemSupplierList)
+                            {
+                                if (itemPr.pr_aqty > qty)//一个PR够减
+                                {
+                                    itemPr.pr_aqty = itemPr.pr_aqty - qty;
+                                    updatPrList.Add(itemPr);
+                                    dto.updatePrlist.Add(itemPr);
+                                    dto.updateQty = qty;
+                                    continue;
+                                }
+                                else if (itemPr.pr_aqty == qty)//一个PR够减
+                                {
+                                    dto.deleteQty += qty;
+                                    deletePrList.Add(itemPr);
+                                    dto.deletePrlist.Add(itemPr);
+                                    continue;
+                                }
+                                else {
+                                    dto.deleteQty += itemPr.pr_aqty.GetValueOrDefault();
+                                    qty -= itemPr.pr_aqty.GetValueOrDefault();
+                                    deletePrList.Add(itemPr);
+                                    dto.deletePrlist.Add(itemPr);
+                                }
+                            }
+                        }
+                    });
+
+                }
+            });
+        }
+
+        public List<srm_pr_main> CalcPrAdd(List<AlignmentCalcDto> prAddList, List<srm_purchase> purchase, List<ic_item> ic_items,int ScheduleAgreement)
+        {
+            List<srm_pr_main> prList = new List<srm_pr_main>();
+            prAddList.ForEach(dto => {
+                var itemPurList = purchase.Where(x => x.number == dto.ItemNum).ToList();
+                var icitem = ic_items.Find(x => x.number == dto.ItemNum);
+                foreach (var supplier in itemPurList)
+                {
+                    srm_pr_main srm_Pr = new srm_pr_main();
+                    srm_Pr.GenerateNewId(help.NextId());
+                    srm_Pr.pr_order_type = icitem.erp_cls == 2 ? "L" : "";//单据类型
+                    srm_Pr.supplier_type = supplier.supplier_type;
+                    srm_Pr.IsRequireGoods = supplier.IsRequireGoods;
+                    if (supplier.supplier_type == "VMI")
+                    {
+                        srm_Pr.IsRequireGoods = 1;
+                        srm_Pr.pr_order_type = "K";
+                    }
+                    srm_Pr.pr_purchaseid = supplier.supplier_id;//供应商id  
+                    srm_Pr.pr_purchasenumber = supplier.supplier_number;//供应商编码
+                    srm_Pr.pr_purchasename = supplier.supplier_name;//供应商名称
+                    srm_Pr.pr_purchaser = supplier.order_rector_name;//采购员
+                    srm_Pr.pr_purchaser_num = supplier.order_rector_num;//采购员工号(采购信息表)
+                    srm_Pr.pr_rqty = Math.Ceiling(dto.DifferenceQty * supplier.quota_rate.GetValueOrDefault() / 100);//需求数量
+                    srm_Pr.pr_aqty = srm_Pr.pr_rqty;//申请数量
+                    srm_Pr.pr_sqty = srm_Pr.pr_rqty;//建议数量
+                    srm_Pr.icitem_id = icitem.Id;//物料id
+                    srm_Pr.icitem_name = icitem.name;//物料名称
+                    //srm_Pr.num = returnlist.num;
+                    if (ScheduleAgreement==1)
+                    {
+                        supplier.lead_time = 7;//启用计划协议时,默认为7天。
+                        srm_Pr.pr_ssend_date = DateTime.Now.Date.AddDays(1);//系统建议下单日期
+                        srm_Pr.pr_sarrive_date = DateTime.Now.AddDays((double)supplier.lead_time.GetValueOrDefault());//系统建议到达日期(建议到货日期)
+                    }else
+                    {
+                        srm_Pr.pr_ssend_date = DateTime.Now.Date.AddDays(1);//系统建议下单日期
+                        srm_Pr.pr_sarrive_date = DateTime.Now.Date.AddDays(1).AddDays((int)(Math.Ceiling(icitem.clean_leadtime.GetValueOrDefault() + icitem.self_inspection_date.GetValueOrDefault())));
+                    }
+                    srm_Pr.pr_sysprice = supplier.order_price;//系统价格(含税)
+                    srm_Pr.pr_orderprice = srm_Pr.pr_rqty * supplier.order_price;//订单价格(含税)
+                    srm_Pr.pr_price = supplier.netpurchase_price;//采购净价(不含税)
+                    srm_Pr.pr_rate = supplier.taxrate;//税率
+                    srm_Pr.pr_unit = icitem.unit;//单位
+                    srm_Pr.state = 1;//状态
+                    srm_Pr.old_apply_aqty = 0;//已申请数量
+                    srm_Pr.pr_type = icitem.erp_cls == 2 ?2 :3;//申请类型
+                    srm_Pr.currencytype = supplier.currency_type == null ? 1 : supplier.currency_type.Value;//币种
+                    srm_Pr.secInv_ratio = icitem.secinv_ratio;//安全库存触发采购比例
+                    srm_Pr.tenant_id = param.company_id;
+                    srm_Pr.company_id = param.company_id;
+                    srm_Pr.factory_id = param.factoryId;
+                    srm_Pr.create_time = DateTime.Now;
+                    srm_Pr.create_by_name = "admin";
+                    srm_Pr.update_time = DateTime.Now;
+                    srm_Pr.update_by_name = "admin";
+                    prList.Add(srm_Pr);
+                    dto.addPrlist.Add(srm_Pr);
+                }
+            });
+            return prList;
+        }
         public async Task ExamineResultInsertDBAsync(List<ExamineResult> examines)
         {
             //检查结果写入数据库
@@ -5907,7 +6144,7 @@ namespace Business.Replenishment
             //await _mysql_mes_morder.InsertManyAsync(moList);
             //await _mysql_mes_moentry.InsertManyAsync(moentryList);
             moList = moList.OrderBy(a => a.moentry_sys_stime).ToList();
-            await PlanOrderResourceCheck(moList,moentryList, bangid, $"V{DateTime.Now.ToString("yyyyMMddHHmm")}",false);
+            await PlanOrderResourceCheck(moList,moentryList, bangid, $"V{DateTime.Now.ToString("yyyyMMddHHmm")}",false,false);
             return "OK";
         }
 
@@ -6211,12 +6448,12 @@ namespace Business.Replenishment
             return result;
         }
 
-        public void AsyncItemStockFromWMS(List<b_bom_pretreatment> bom_Pretreatments)
+        public void AsyncItemStockFromWMS(List<string> itemList)
         {
             //产品编码
-            var itemList = bom_Pretreatments.Select(a => a.item_number).Distinct().ToList();
+            //var itemList = bom_Pretreatments.Select(a => a.item_number).Distinct().ToList();
             List<string> itemChildList = new List<string>();
-            itemChildList.AddRange(itemList);
+            itemChildList.AddRange(itemList.Distinct());
             if (!itemChildList.Any())
             {
                 return;

+ 3 - 3
MicroServices/Business/Business.Application/ResourceExamineManagement/PurchaseOrderAppService.cs

@@ -95,12 +95,12 @@ namespace Business.ResourceExamineManagement
             DateTime toTime = DateTime.Now.Date;
 
             //先查询出满足日期,并且数量可满足占用的数据
-            var poDetails = poDetailList.Where(x => toTime < x.rarrdate.GetValueOrDefault() && x.rarrdate.GetValueOrDefault() < DeliverDate && x.qty - x.rqty - x.esqty -
+            var poDetails = poDetailList.Where(x => x.rarrdate.GetValueOrDefault() < DeliverDate && x.qty - x.rqty - x.esqty -
                 poOccupys.Where(p => p.polist_id == x.mysql_id)?.Sum(m => m.qty) > Quantity).OrderByDescending(x => x.rarrdate).ToList();
             //未满足则查询出满足日期的订单
             if (poDetails.Count == 0)
             {
-                poDetails = poDetailList.Where(x => toTime < x.rarrdate.GetValueOrDefault() && x.rarrdate.GetValueOrDefault() < DeliverDate).OrderByDescending(x => x.rarrdate).ToList();
+                poDetails = poDetailList.Where(x => x.rarrdate.GetValueOrDefault() < DeliverDate).OrderByDescending(x => x.rarrdate).ToList();
             }
             var QuantityNumber = 0.00m;
             foreach (var item in poDetails)
@@ -134,7 +134,7 @@ namespace Business.ResourceExamineManagement
             //代表PO还未占用完
             if (Quantity > 0)
             {
-                var prlist  = srm_Pr_Mains.Where(x => x.icitem_id.Value == icitem_id && toTime < x.pr_sarrive_date && x.pr_sarrive_date < DeliverDate && x.pr_mono != mes_morder.morder_no).OrderByDescending(f => f.pr_sarrive_date).ToList();
+                var prlist  = srm_Pr_Mains.Where(x => x.icitem_id.Value == icitem_id && x.pr_sarrive_date < DeliverDate && x.pr_mono != mes_morder.morder_no).OrderByDescending(f => f.pr_sarrive_date).ToList();
                 if (supplier_id != null)
                 {
                     prlist = prlist.Where(x => x.pr_purchaseid == supplier_id).ToList();

+ 3 - 3
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -5742,11 +5742,11 @@ namespace Business.ResourceExamineManagement
                 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+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 workords=_workOrdMaster.Select(a => a.OrdDate >= beginTime && a.OrdDate <= endTime && a.Domain == domain && (string.IsNullOrEmpty(a.Status)|| a.Status.ToUpper()=="P"));
                 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 workordsPickBill = _workOrdMaster.Select(a =>(!string.IsNullOrEmpty(a.Status) && a.Status!="C" && a.Status!="P") && a.Domain == domain);
                 var workordListPickBill = workordsPickBill.Select(x => x.WorkOrd).Distinct().ToList();
                 if(workordList.Count>0)
                 {
@@ -5761,7 +5761,7 @@ namespace Business.ResourceExamineManagement
                 //需要测试工单没有做资源检查会不会报错
                 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.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 pickBills = _nbrDetail.Select(a => workordListPickBill.Contains(a.WorkOrd) && a.Type.ToUpper()=="SM" && (a.QtyOrd - a.QtyRec)>0 && a.Domain == domain && a.Status.ToUpper()!="C");
                 var dsList=_srm_polist_ds.Select(a => a.requestdate <= endTime && a.domain==domain && a.isactive==1);
                 var items = examines.Select(e => e.item_number).Distinct().ToList();
                 var itempickbills=pickBills.Select(s => s.ItemNum);

+ 1 - 0
MicroServices/Business/Business.Application/SystemJobManagement/SystemJobAppService.cs

@@ -1176,6 +1176,7 @@ namespace Business.SystemJobManagement
                             plist.total_price = dtl.QtyOrded * dtl.PurCost.GetValueOrDefault();
                             //plist.taxamount = item.pr_orderprice.GetValueOrDefault() - podetail.netmoney;
                             plist.plan_qty = dtl.QtyOrded;
+                            plist.rqty = dtl.RctQty;
                             plist.unit = icitem.unit;
                             plist.rarrdate = dtl.DueDate;
                             plist.rnumber = 0;