Browse Source

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

Murphy 2 years ago
parent
commit
824afce797

+ 39 - 6
MicroServices/Business/Business.Application/ResourceExamineManagement/CalcBomViewAppService.cs

@@ -3,6 +3,7 @@ using Business.Core.Utilities;
 using Business.Domain;
 using Business.ResourceExamineManagement.Dto;
 using MongoDB.Driver.Linq;
+using SixLabors.ImageSharp;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -102,6 +103,8 @@ namespace Business.ResourceExamineManagement
         /// </summary>
         private readonly PurchaseOrderAppService _purchaseOrderAppService;
 
+        private readonly SerialNumberAppService _serialNumberAppService;
+
         Random rnd = new Random();
 
         public decimal ProductionTimeDay;
@@ -112,11 +115,13 @@ namespace Business.ResourceExamineManagement
         /// <param name="morderAppService"></param>
         public CalcBomViewAppService(MorderAppService morderAppService,
             ProductExamineAppService productExamineAppService,
-            PurchaseOrderAppService purchaseOrderAppService)
+            PurchaseOrderAppService purchaseOrderAppService,
+            SerialNumberAppService serialNumberAppService)
         {
             _morderAppService = morderAppService;
             _productExamineAppService = productExamineAppService;
             _purchaseOrderAppService = purchaseOrderAppService;
+            _serialNumberAppService = serialNumberAppService;
         }
 
         /// <summary>
@@ -1492,7 +1497,8 @@ namespace Business.ResourceExamineManagement
             mo_srm_pr_main srm_Pr = new mo_srm_pr_main();
             srm_Pr.GenerateNewId(help.NextId());
             srm_Pr.mysql_id = help.NextId();
-            srm_Pr.pr_billno = returnlist.erp_cls == 2 ? getOrderNum("WWPR") : getOrderNum("PR");//pr单号
+            //srm_Pr.pr_billno = returnlist.erp_cls == 2 ? getOrderNum("WWPR") : getOrderNum("PR");//pr单号
+            //_serialNumberAppService.GetBillNo(factoryid.ToString(), "DO", 1, "admin", 1);
             if (mes_morder != null)
             {
                 srm_Pr.pr_mono = mes_morder.morder_no;//关联工单号
@@ -1502,9 +1508,9 @@ namespace Business.ResourceExamineManagement
             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.purcher;//采购员
-            srm_Pr.pr_purchaser_num = "";//采购员工号(采购信息表)
-                                         //数量圆整 按最小包装量向上圆整
+            srm_Pr.pr_purchaser = supplier.order_rector_name;//采购员
+            srm_Pr.pr_purchaser_num = supplier.order_rector_num;//采购员工号(采购信息表)
+                                                                 //数量圆整 按最小包装量向上圆整
             decimal qty = Math.Ceiling(returnlist.lack_qty / (supplier.packaging_qty.GetValueOrDefault() == 0 ? 1 : supplier.packaging_qty.GetValueOrDefault()));
             //判断最小起订量
             qty = qty > supplier.qty_min ? qty : supplier.qty_min.GetValueOrDefault();
@@ -1517,7 +1523,7 @@ namespace Business.ResourceExamineManagement
             
             srm_Pr.pr_order_type = 1;//单据类型
 
-            if (plan_date != null && IsInverted)
+            if (plan_date != null)
             {
                 //-1为提前一天准备
                 srm_Pr.pr_sarrive_date = plan_date.GetValueOrDefault().AddDays(-1);
@@ -1567,6 +1573,33 @@ namespace Business.ResourceExamineManagement
             sRMPR.item_no = returnlist.num;
             sRMPR.orderentry_id = returnlist.sentry_id;
             sRMPR.lastStartTmie = DateTime.Now.AddDays((double)(sRMPR.srm_Pr_Main.MinBy(x => x.totalLeadTime).totalLeadTime.GetValueOrDefault()));//加上提前期和备料期,得到齐套时间
+
+            //生成mo_srm_po_occupy采购占用表数据。 
+            mo_srm_po_occupy srm_Po_Occupy = new mo_srm_po_occupy();
+            srm_Po_Occupy.GenerateNewId(help.NextId());
+            srm_Po_Occupy.mysql_id = help.NextId();
+            srm_Po_Occupy.bang_id = bangId;
+            srm_Po_Occupy.polist_id = srm_Pr.mysql_id;
+            if (sentrys != null)
+            {
+                srm_Po_Occupy.eid = sentrys.Id;
+                srm_Po_Occupy.bill_no = sentrys.seorder_id;
+                srm_Po_Occupy.entry_id = sentrys.entry_seq.GetValueOrDefault();
+                srm_Po_Occupy.org_id = sentrys.org_id;
+            }
+            if (mes_morder != null)
+            {
+                srm_Po_Occupy.morder_id = mes_morder.Id;
+                srm_Po_Occupy.morder_mo = mes_morder.morder_no;
+            }
+            srm_Po_Occupy.qty = returnlist.lack_qty;
+            srm_Po_Occupy.type = MorderEnum.Zyjc_Type;//TODO:类型未知
+            srm_Po_Occupy.stime = srm_Pr.pr_ssend_date;
+            srm_Po_Occupy.etime = srm_Pr.pr_sarrive_date;
+            srm_Po_Occupy.state = 1;
+            srm_Po_Occupy.company_id = param.company_id;//取销售子表企业ID
+            srm_Po_Occupy.factory_id = param.factoryId;
+            srm_Po_OccupiesInsert.Add(srm_Po_Occupy);
             return sRMPR;
         }
         // 生成订单编号 字母+年月日+8位随机数+时间戳

+ 72 - 14
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -6,6 +6,8 @@ using Business.Dto;
 using Business.EntityFrameworkCore;
 using Business.EntityFrameworkCore.SqlRepositories;
 using Business.PriorityManagement;
+using Business.Replenishment;
+using Business.ReplenishmentManagement;
 using Business.ResourceExamineManagement.Dto;
 using Business.StructuredDB.SaleFcst;
 using Business.StructuredDB.WMS;
@@ -298,6 +300,11 @@ namespace Business.ResourceExamineManagement
 
         private readonly SerialNumberAppService _serialNumberAppService;
 
+        /// <summary>
+        /// 优先级
+        /// </summary>
+        private readonly ReplenishmentAppService _replenishmentAppService;
+
         /// <summary>
         /// 计算BOM平铺物料情况
         /// </summary>
@@ -471,7 +478,8 @@ namespace Business.ResourceExamineManagement
             ISqlRepository<MonthlyShipmentPlan> monthlyShipmentPlan,
             IRepository<srm_purchase, long> srmPurchase,
             IUnitOfWorkManager unitOfWorkManager,
-            SerialNumberAppService serialNumberAppService
+            SerialNumberAppService serialNumberAppService,
+            ReplenishmentAppService replenishmentAppService
             )
         {
             _mes_technique = mes_technique;
@@ -560,6 +568,7 @@ namespace Business.ResourceExamineManagement
             _unitOfWorkManager = unitOfWorkManager;
             _scheduleResultOpMaster = scheduleResultOpMaster;
             _serialNumberAppService = serialNumberAppService;
+            _replenishmentAppService = replenishmentAppService;
         }
         #endregion
 
@@ -1033,7 +1042,7 @@ namespace Business.ResourceExamineManagement
             srm_Pr.pr_purchasenumber = prlist[0].pr_purchasenumber;//供应商编码
             srm_Pr.pr_purchasename = prlist[0].pr_purchasename;//供应商名称
             srm_Pr.pr_purchaser = prlist[0].pr_purchaser;//采购员
-            srm_Pr.pr_purchaser_num = "";//采购员工号(采购信息表)*//*
+            srm_Pr.pr_purchaser_num = prlist[0].pr_purchaser_num;//采购员工号(采购信息表)*//*
             srm_Pr.pr_rqty = prlist.Sum(s => s.pr_rqty);//需求数量
             srm_Pr.pr_aqty = prlist.Sum(s => s.pr_aqty);//申请数量
             srm_Pr.pr_sqty = prlist.Sum(s => s.pr_sqty);//建议数量
@@ -1594,6 +1603,20 @@ namespace Business.ResourceExamineManagement
             //PO占用记录
             List<mo_srm_po_occupy> po_occupy = await _srm_po_occupy.GetListAsync(s => seIds.Contains(s.eid.Value) && bangidList.Contains(s.bang_id.Value));
             List<mo_srm_pr_main> prmainlist = await _srm_pr_main.GetListAsync(s => seIds.Contains(s.sentry_id.Value) && bangidList.Contains(s.bang_id.Value));
+            if (prmainlist.Any())
+            {
+                var nbrlistDto = _serialNumberAppService.GetBillNo(prmainlist[0].factory_id.ToString(), "PR", prmainlist.Count, "admin", 1);
+                int index = 0;
+                foreach (var p in prmainlist)
+                {
+                    if (nbrlistDto[index] != null)
+                    {
+                        p.pr_billno = nbrlistDto[index].NbrResult;
+                    }
+                    index++;
+                }
+            }
+            
             List<mo_ic_item_stockoccupy> item_stockoccupy = await _ic_item_stockoccupy.GetListAsync(s => seIds.Contains(s.orderentry_id.Value) && bangidList.Contains(s.bang_id));
 
             using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
@@ -2147,7 +2170,7 @@ namespace Business.ResourceExamineManagement
             {
                 srm_po_main po_Main = new srm_po_main();
                 po_Main.GenerateNewId(help.NextId());
-                po_Main.po_billno = poType == 1 ? GetMaxSerialNumber(416188684804165) : GetMaxSerialNumber(416555323363397);
+                po_Main.po_billno = help.NextId().ToString();
                 var pr = list.Find(s => s.Id == dto.polist[0].pr_id);
                 var itemsupplier = itemsupplierList.Find(a => a.Id == pr.pr_purchaseid);
                 po_Main.po_purchaser = pr.pr_purchaser;
@@ -2223,6 +2246,23 @@ namespace Business.ResourceExamineManagement
             }
             poaction.poMain.AddRange(polist);
             poaction.polist.AddRange(podetaillist);
+
+            var nbrlistDto = _serialNumberAppService.GetBillNo(domain, "DO", polist.Count, "admin", 1);
+            int index = 0;
+            foreach (var p in polist)
+            {
+                if (nbrlistDto[index] != null)
+                {
+                    var podtls = podetaillist.Where(s => s.po_billno == p.po_billno).ToList();
+
+                    p.po_billno = nbrlistDto[index].NbrResult;
+                    podtls.ForEach(s =>
+                    {
+                        s.po_billno = p.po_billno;
+                    });
+                }
+                index++;
+            }
             List<PurOrdMaster> purOrdMasters = new List<PurOrdMaster>();
             polist.ForEach(a =>
             {
@@ -2231,7 +2271,7 @@ namespace Business.ResourceExamineManagement
                     Domain = domain,
                     Potype = poType==1?"po":"pw",
                     PurOrd = a.po_billno,
-                    Buyer = a.po_purchaser,
+                    Buyer = a.po_purchaser_no,
                     OrdDate = a.po_ssend_date,
                     Curr = "CNY",
                     Supp = a.supplier_no,
@@ -3526,24 +3566,36 @@ namespace Business.ResourceExamineManagement
                     });
                     _locationDetail.Update(locStock);*/
                 }
+                if (nbrMasterList.Any())
+                {
+                    var nbrlistDto = _serialNumberAppService.GetBillNo(workOrdMasters[0].Domain, "SM", nbrMasterList.Count, userAccount, 1);
+                    if (nbrlistDto.Any())
+                    {
+                        int index = 0;
+                        foreach (var nm in nbrMasterList)
+                        {
+                            var nbrDtls = nbrDetailList.Where(s => s.Nbr == nm.Nbr).ToList();
+                            if (nbrlistDto[index] != null)
+                            {
+                                nm.Nbr = nbrlistDto[index].NbrResult;
+                                nbrDtls.ForEach(i => { i.Nbr = nm.Nbr; });
+                            }
+                            index++;
+                        }
+                    }
+                }
             }
         }
 
         private void GenerateNbr(WorkOrdMaster workord,decimal cleanTime, LineMaster defaultLine, string userAccount, List<NbrMaster> nbrMasterList, List<NbrDetail> nbrDetailList, List<WorkOrdDetail> detail, List<ItemMaster> itemLocList, List<EmpWorkDutyMaster> ewdmList, string LocationTo,EmployeeMaster user,string TransType)
         {
-            //var Nbr = GetMaxSerialNumber(417416915624005);
-            string Nbr = "";
+            string Nbr = help.NextId().ToString();
             DateTime eff = workord.OrdDate.GetValueOrDefault().Date.AddDays(-1);
             DateTime start = eff.AddDays((double)(0 - cleanTime));
             if (start <= DateTime.Now.Date)
             {
                 start = DateTime.Now.Date;
             }
-            var nbrlistDto = _serialNumberAppService.GetBillNo(workord.Domain, "SM", 1, userAccount, 1);
-            if (nbrlistDto.Any())
-            {
-                Nbr = nbrlistDto[0].NbrResult;
-            }
             var newNbr = new NbrMaster
             {
                 Domain = workord.Domain,
@@ -4354,10 +4406,16 @@ namespace Business.ResourceExamineManagement
             workOrd.JointTyped = "B";
             _workOrdMaster.Update(workOrd);
 
+            //获取需要排产的工单(获取四周的工单:正常工单+已审批通过的特殊工单)
+            DateTime endDate = DateTime.Now.Date.AddDays(28).AddDays(1);
+            //取数开始时间为当前天的下一天
+            DateTime startDate = DateTime.Now.Date.AddDays(1);
+            //尚未开始生产的工单+正在生产的工单
+            var workOrds = _workOrdMaster.Select(p => p.IsActive && p.Domain == input.domain && ((p.OrdDate < endDate && p.OrdDate >= startDate && (string.IsNullOrEmpty(p.Typed) || (!string.IsNullOrEmpty(p.Typed) && p.BusinessID > 0))) || p.Status.ToLower() == "w")).ToList();
             //调用优先级计算算法
-
-            //调用手动排产算法
-            string result = await ProductionSchedule(input.domain);
+            workOrds = _replenishmentAppService.CalcPriority(workOrds.Select(p=>p.WorkOrd).ToList(), input.domain);
+            //执行排产
+            string result = await _productionScheduleAppService.DoProductSchedule(workOrds, input.domain, 2);
             return result;
         }
 

+ 2 - 2
MicroServices/Business/Business.Host/BusinessHostModule.cs

@@ -272,7 +272,7 @@ namespace Business
             //mongoCollection_mo_srm_po_main.Indexes.CreateOne(indexModel_mo_srm_po_main);
             MongoHelper<mo_srm_po_main>.CreatIndexAsync(indexModel_mo_srm_po_main);
 
-            //[Index(nameof(pr_billno), nameof(tenant_id), nameof(factory_id), IsUnique = true)]
+            /*//[Index(nameof(pr_billno), nameof(tenant_id), nameof(factory_id), IsUnique = true)]
             CreateIndexModel<mo_srm_pr_main> indexModel_mo_srm_pr_main = new CreateIndexModel<mo_srm_pr_main>(
                Builders<mo_srm_pr_main>.IndexKeys.
                Ascending(_ => _.pr_billno).
@@ -288,7 +288,7 @@ namespace Business
                    Unique = true,  //唯一值索引
                });
             //mongoCollection_mo_srm_pr_main.Indexes.CreateOne(indexModel_mo_srm_pr_main);
-            MongoHelper<mo_srm_pr_main>.CreatIndexAsync(indexModel_mo_srm_pr_main);
+            MongoHelper<mo_srm_pr_main>.CreatIndexAsync(indexModel_mo_srm_pr_main);*/
 
             //[Index(nameof(number), nameof(supplier_number), nameof(tenant_id), nameof(factory_id), IsUnique = true)]
             CreateIndexModel<mo_srm_purchase> indexModel_mo_srm_purchase = new CreateIndexModel<mo_srm_purchase>(