Просмотр исходного кода

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

Murphy 2 лет назад
Родитель
Сommit
1fade9072e

+ 8 - 12
MicroServices/Business/Business.Application/ReplenishmentManagement/ReplenishmentAppService.cs

@@ -3259,11 +3259,6 @@ namespace Business.Replenishment
             await DbSnapShot(input.company_id, input.factoryId, bangid, pretreatments);
             
             DataInitialization(boms, bangid, icitemlist, stocklist, pretreatments, sklist);
-            if (!planCheck)
-            {
-                //如果是齐套检查,则不考虑其他数据的占用,只看原材料库存
-                sklist = new List<mo_ic_item_stockoccupy>();
-            }
             _CalcBomViewAppService.param = param;
             foreach (var item in mo_Mes_Morders)
             {
@@ -3374,7 +3369,7 @@ namespace Business.Replenishment
                             prapplyList.ForEach(p =>
                             {
                                 seqSql += "insert QadTracking(Ufld1,Domain,SeqID,TransType,Subject,[Order],Int1,CreateTime,CreateUser,UpdateTime,UpdateUser) values('C','" + p.factory_id.ToString() +
-                                    "'," + seqId.ToString() + ",'nbr-pr-mes','请购单','" + p.pr_billno + "'," + p.Id.ToString() + ",getdate(),'',getdate(),'');";
+                                    "'," + seqId.ToString() + ",'nbr-pr-mes','请购单','" + p.pr_billno + "'," + p.mysql_id.ToString() + ",getdate(),'',getdate(),'');";
                                 seqId++;
                             });
                         }
@@ -3834,15 +3829,16 @@ namespace Business.Replenishment
             List<mo_mes_mooccupy> mes_mooccupyList = _mes_mooccupy.GetListAsync(x => x.moo_state == 1 && !x.IsDeleted && x.company_id == param.company_id
           && boms.Select(p => p.item_number).Contains(x.fitem_number) && x.bang_id == bangid).Result;
 
+            List<long> occoupyRefId = new List<long>();
             //物料采购订单明细
-            var poDetailList = _srm_po_list.GetListAsync(x => icitemlist.Select(p => p.mysql_id).ToList().Contains(x.icitem_id.Value) && x.bang_id == bangid && x.state == 1 && x.rstate == 1 && !x.IsDeleted).Result;
-            //采购订单占用数据
-            var poOccupys = _srm_po_occupy.GetListAsync(x => poDetailList.Select(p => p.Id).ToList().Contains(x.polist_id) && x.bang_id == bangid && !x.IsDeleted).Result;
-            var srm_pr_mains = _srm_pr_main.GetListAsync(x => icitemlist.Select(p => p.mysql_id).ToList().Contains(x.icitem_id.Value) && x.bang_id == bangid && x.state == 0 && !x.IsDeleted).Result;
+            var poDetailList = _srm_po_list.GetListAsync(x => icitemlist.Select(p => p.mysql_id).ToList().Contains(x.icitem_id.Value) && x.bang_id == bangid && x.state == 1 && !x.IsDeleted).Result;
+            occoupyRefId.AddRange(poDetailList.Select(p => p.Id).ToList());
+            var srm_pr_mains = _srm_pr_main.GetListAsync(x => icitemlist.Select(p => p.mysql_id).ToList().Contains(x.icitem_id.Value) && x.bang_id == bangid && x.state != 0 && x.state != 4 && !x.IsDeleted).Result;
+            occoupyRefId.AddRange(srm_pr_mains.Select(p => p.Id).ToList());
+            //采购订单或采购申请占用数据
+            var poOccupys = _srm_po_occupy.GetListAsync(x => occoupyRefId.Contains(x.polist_id) && x.bang_id == bangid && !x.IsDeleted).Result;
             #endregion
 
-            //处理一下已经插入得占用记录
-
             //物料库存
             stocklist.AddRange(_ic_item_stock.GetListAsync(p => p.factory_id == param.factoryId && p.bang_id == bangid && itemIds.Contains(p.icitem_id)).Result);
             //物料库存占用表

+ 28 - 73
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -1040,7 +1040,7 @@ namespace Business.ResourceExamineManagement
         {
             //物料、供应商为相同才允许合并。
             var idList = AnalysisIdList(ids);
-            List<srm_pr_main> prlist = _mysql_srm_pr_main.GetListAsync(s => idList.Contains(s.Id)).Result;
+            List<srm_pr_main> prlist = _mysql_srm_pr_main.GetListAsync(s => idList.Contains(s.Id) && s.IsRequireGoods == 1).Result;
             if (prlist.Any())
             {
                 if (prlist.Where(s => s.state == 0).Count() > 0)
@@ -1142,7 +1142,8 @@ namespace Business.ResourceExamineManagement
             DateTime toTime = DateTime.Now; //new DateTime(2023, 7, 6);
             DateTime starttime = toTime.Date.AddDays(1);
             DateTime endtime = toTime.Date.AddDays(7);
-            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<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 && s.IsRequireGoods == 1).Result;
             List<ic_item> ic_Items = _mysql_ic_item.GetListAsync(s => s.company_id.ToString() == companyid && prlist.Select(c => c.icitem_id).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;
@@ -1152,6 +1153,7 @@ namespace Business.ResourceExamineManagement
             List<srm_pr_main> insetPrList = new List<srm_pr_main>();
             List<srm_pr_main> updatePrList = new List<srm_pr_main>();
             var moPrlist = ObjectMapper.Map<List<srm_pr_main>, List<mo_srm_pr_main>>(prlist);
+            long Nbr = help.NextId();
             foreach (var pr in prlist)
             {
                 bool bl = pr.sentry_id == null;//区分是销售订单和非销售订单的合并。
@@ -1172,7 +1174,7 @@ namespace Business.ResourceExamineManagement
                         prRefoccupy.ForEach(a => {
                             a.polist_id = newPr.Id;
                         });
-                        newPr.pr_billno = pr.pr_type == 2 ? _CalcBomViewAppService.getOrderNum("WWPR") : _CalcBomViewAppService.getOrderNum("PR");//pr单号
+                        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);//申请数量
@@ -1190,6 +1192,7 @@ namespace Business.ResourceExamineManagement
                         insetPrList.Add(newPr);
                         ilist.ForEach(s => { s.state = 0; });
                         updatePrList.AddRange(ilist);
+                        Nbr++;
                     }
                 }
             }
@@ -1223,57 +1226,6 @@ namespace Business.ResourceExamineManagement
                 }
             }
            
-
-            #region 此逻辑是处理按每周几送货实现,先屏蔽
-            /*foreach (var pr in moPrlist)
-            {
-                var pur = purchaselist.Find(s => s.icitem_id == pr.icitem_id && s.supplier_id == pr.pr_purchaseid);
-                if (pur != null)
-                {
-                    if (pur.is_week)
-                    {
-                       var prDtos = prWeekDtos.Where(s => s.icitem_id == pr.icitem_id && s.pr_purchaseid == pr.pr_purchaseid).ToList();
-                        if (!prDtos.Any())
-                        {
-                            prDtos = AnalysisIntervalData(pur.is_days, pr);
-                            prWeekDtos.AddRange(prDtos);
-                        }
-
-                        //判断当前PR属于哪个区间
-                        if (prDtos.Any())
-                        {
-                            foreach (var dto in prDtos)
-                            {
-                                int wk = (int)pr.pr_rarrive_date.GetValueOrDefault().DayOfWeek;
-                                wk = wk == 0 ? 7 : wk;
-                                if (dto.weekList.Contains(wk))
-                                {
-                                    if (wk >= dto.week)
-                                    {
-                                        pr.pr_rarrive_date = pr.pr_rarrive_date.GetValueOrDefault().Date.AddDays(dto.week - wk);
-                                    }
-                                    else {
-                                        //wk  2  week 5
-                                        pr.pr_rarrive_date = pr.pr_rarrive_date.GetValueOrDefault().Date.AddDays(0 - wk - (7 - dto.week));
-                                    }
-
-                                    break;
-                                }
-                            }
-                        }
-                        else { 
-                            //如果没有则还是需要处理
-                        }
-
-                    }
-                    else
-                    {
-                        //如果此物料没有设置周期送货,则所有数据合并为一个PR,转成一个PO
-                    }
-                }
-            }*/
-            #endregion
-
             using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
             {
                 try
@@ -1725,7 +1677,7 @@ namespace Business.ResourceExamineManagement
                         prapplyList.ForEach(p =>
                         {
                             seqSql += "insert QadTracking(Ufld1,Domain,SeqID,TransType,Subject,[Order],Int1,CreateTime,CreateUser,UpdateTime,UpdateUser) values('C','" + p.factory_id.ToString() +
-                                "'," + seqId.ToString() + ",'nbr-pr-mes','请购单','" + p.pr_billno + "'," + p.Id.ToString() + ",getdate(),'',getdate(),'');";
+                                "'," + seqId.ToString() + ",'nbr-pr-mes','请购单','" + p.pr_billno + "'," + p.mysql_id.ToString() + ",getdate(),'',getdate(),'');";
                             seqId++;
                         });
                     }
@@ -2261,7 +2213,7 @@ namespace Business.ResourceExamineManagement
                     poDto.polist = new List<srm_po_list>();
                     pOGroupDtos.Add(poDto);
                 }
-                item.state = 0;
+                item.state = 4;
                 srm_po_list podetail = new srm_po_list();
                 podetail.GenerateNewId(help.NextId());
                 podetail.pr_id = item.Id;
@@ -3369,24 +3321,29 @@ namespace Business.ResourceExamineManagement
                     GetWorkDetalis(childs.Where(s => s.parent_id == child.fid).ToList(), returnList, childs);
                     if (returnList.Any())
                     {
-                        foreach (var structure in returnList)
+                        WorkOrdDetail woDetail = null;
+                        var calereturnList = returnList.Select(x => x.item_number).Distinct().ToList();
+                        foreach (var caleNumber in calereturnList)
                         {
-                            var psm = productStructureMs.Find(x => x.ParentItem == workord.ItemNum && x.ComponentItem == structure.item_number);
-                            WorkOrdDetail woDetail = new WorkOrdDetail();
+                            var caleList = returnList.Where(x => x.item_number == caleNumber).ToList();
+
+                            //添加工单的物料信息
                             woDetail = new WorkOrdDetail();
-                            woDetail.Domain = param.factoryId.ToString();
+                            woDetail.Domain = workord.Domain;
                             woDetail.WorkOrd = workord.WorkOrd;
-                            woDetail.Op = structure.Op;
-                            woDetail.ItemNum = structure.item_number;
-                            woDetail.QtyRequired = structure.needCount;
+                            woDetail.Op = caleList.Max(f => f.Op);
+                            woDetail.ItemNum = caleNumber;
                             woDetail.QtyPosted = 0m;
                             woDetail.QtyReturned = 0m;
-                            woDetail.FrozenBOMQty = structure.qty;
                             woDetail.Status = "";
                             woDetail.IsActive = true;
                             woDetail.CreateTime = DateTime.Now;
+                            woDetail.QtyRequired = caleList.Sum(c => c.needCount);
                             woDetail.WorkOrdMasterRecID = workord.RecID;
-                            woDetail.Yield = psm == null ? 0 : psm.Scrap;
+                            if (workord.QtyOrded != 0)
+                            {
+                                woDetail.FrozenBOMQty = Math.Round(woDetail.QtyRequired / workord.QtyOrded, 10);
+                            }
                             workOrdDetails.Add(woDetail);
                         }
                     }
@@ -3449,7 +3406,7 @@ namespace Business.ResourceExamineManagement
                             prapplyList.ForEach(p =>
                             {
                                 seqSql += "insert QadTracking(Ufld1,Domain,SeqID,TransType,Subject,[Order],Int1,CreateTime,CreateUser,UpdateTime,UpdateUser) values('C','" + p.factory_id.ToString() +
-                                    "'," + seqId.ToString() + ",'nbr-pr-mes','请购单','" + p.pr_billno + "'," + p.Id.ToString() + ",getdate(),'',getdate(),'');";
+                                    "'," + seqId.ToString() + ",'nbr-pr-mes','请购单','" + p.pr_billno + "'," + p.mysql_id.ToString() + ",getdate(),'',getdate(),'');";
                                 seqId++;
                             });
                         }
@@ -3567,16 +3524,14 @@ namespace Business.ResourceExamineManagement
 
             List<long> occoupyRefId = new List<long>();
             //物料采购订单明细
-            var poDetailList = _srm_po_list.GetListAsync(x => icitemlist.Select(p => p.mysql_id).ToList().Contains(x.icitem_id.Value) && x.bang_id == bangid && x.state == 1 && x.rstate == 1 && !x.IsDeleted).Result;
+            var poDetailList = _srm_po_list.GetListAsync(x => icitemlist.Select(p => p.mysql_id).ToList().Contains(x.icitem_id.Value) && x.bang_id == bangid && x.state == 1 && !x.IsDeleted).Result;
             occoupyRefId.AddRange(poDetailList.Select(p => p.Id).ToList());
-            var srm_pr_mains = _srm_pr_main.GetListAsync(x => icitemlist.Select(p => p.mysql_id).ToList().Contains(x.icitem_id.Value) && x.bang_id == bangid && x.state != 0 && !x.IsDeleted).Result;
+            var srm_pr_mains = _srm_pr_main.GetListAsync(x => icitemlist.Select(p => p.mysql_id).ToList().Contains(x.icitem_id.Value) && x.bang_id == bangid && x.state != 0 && x.state != 4 && !x.IsDeleted).Result;
             occoupyRefId.AddRange(srm_pr_mains.Select(p => p.Id).ToList());
             //采购订单或采购申请占用数据
             var poOccupys = _srm_po_occupy.GetListAsync(x => occoupyRefId.Contains(x.polist_id) && x.bang_id == bangid && !x.IsDeleted).Result;
             #endregion
 
-            //处理一下已经插入得占用记录
-            
             //物料库存
             stocklist.AddRange(_ic_item_stock.GetListAsync(p => p.factory_id == param.factoryId && p.bang_id == bangid && itemIds.Contains(p.icitem_id)).Result);
             //物料库存占用表
@@ -3607,7 +3562,7 @@ namespace Business.ResourceExamineManagement
             DateTime dt = DateTime.Now;
             _CalcBomViewAppService.quarter_starttime = dt.AddMonths(0 - (dt.Month - 1) % 3).AddDays(1 - dt.Day).Date;
             _CalcBomViewAppService.quarter_endtime = _CalcBomViewAppService.quarter_starttime.AddMonths(3);
-            _CalcBomViewAppService.quarter_srm_pr_mains = srm_pr_mains.Where(s => s.pr_psend_date >= _CalcBomViewAppService.quarter_starttime && s.pr_psend_date < _CalcBomViewAppService.quarter_endtime).ToList();//本季度PR
+            _CalcBomViewAppService.quarter_srm_pr_mains = _srm_pr_main.GetListAsync(s => s.state != 0 && s.pr_psend_date >= _CalcBomViewAppService.quarter_starttime && s.pr_psend_date < _CalcBomViewAppService.quarter_endtime).Result;//本季度PR
         }
 
         public void GenerateSort(List<BomChildExamineDto> returnlist)
@@ -4298,13 +4253,13 @@ namespace Business.ResourceExamineManagement
                             woDetail.Domain = item.factory_id.ToString();
                             woDetail.WorkOrd = item.morder_no;
                             woDetail.Op = caleList.Max(f => f.Op);
-                            woDetail.ItemNum =caleNumber;
+                            woDetail.ItemNum = caleNumber;
                             woDetail.QtyPosted = 0m;
                             woDetail.QtyReturned = 0m;
                             woDetail.Status = "";
                             woDetail.IsActive = true;
                             woDetail.CreateTime = DateTime.Now;
-                            woDetail.QtyRequired= caleList.Sum(c => c.needCount.GetValueOrDefault());
+                            woDetail.QtyRequired = caleList.Sum(c => c.needCount.GetValueOrDefault());
                             if (workOrd.QtyOrded != 0)
                             {
                                 woDetail.FrozenBOMQty = Math.Round(woDetail.QtyRequired / workOrd.QtyOrded, 10);

+ 1 - 1
MicroServices/Business/Business.Domain/MongoDB/SRM/mo_srm_po_main.cs

@@ -60,7 +60,7 @@ namespace Business.Domain
         [Comment("是否加急")]
         public int? po_express { get; set; }
         /// <summary>
-        /// 数据状态(0-新增、1-通过、2-完成、3-未通过)
+        /// 数据状态(0-新增、1-审核中、2-同意、3-关闭)
         /// </summary>
         [Comment("数据状态")]
         public int? state { get; set; }

+ 1 - 1
MicroServices/Business/Business.Domain/MongoDB/SRM/mo_srm_pr_main.cs

@@ -172,7 +172,7 @@ namespace Business.Domain
         [Comment("单位")]
         public string? pr_unit { get; set; }
         /// <summary>
-        /// 状态 0,关闭;1,新增;    暂时不考虑这种状态,影响PR重新生成,如增加需调整PR代码。2,提交;3,未通过;4,评审通过
+        /// 0,PR合并后旧PR关闭 1,新增  2,推送过SAP 4,关闭 SAP回传PO后关闭PR,或者转了要货令DO后关闭
         /// </summary>
         [Comment("状态")]
         public int? state { get; set; }

+ 6 - 0
MicroServices/Business/Business.Domain/StructuredDB/MES/IC/PurOrdMaster.cs

@@ -141,5 +141,11 @@ namespace Business.Domain
         /// </summary>
         [Comment("仓类型")]
         public string FSTID { get; set; }
+
+        /// <summary>
+        /// 状态  "",新增;A,审核中;B,同意;C,关闭
+        /// </summary>
+        [Comment("状态")]
+        public string Status { get; set; }
     }
 }

+ 1 - 1
MicroServices/Business/Business.Domain/StructuredDB/SRM/srm_pr_main.cs

@@ -179,7 +179,7 @@ namespace Business.Domain
         [Comment("单位")]
         public string pr_unit { get; set; }
         /// <summary>
-        /// 状态 0,关闭;1,新增;    暂时不考虑这种状态,影响PR重新生成,如增加需调整PR代码。2,提交;3,未通过;4,评审通过
+        /// 0,PR合并后旧PR关闭 1,新增  2,推送过SAP 4,关闭 SAP回传PO后关闭PR,或者转了要货令DO后关闭
         /// </summary>
         [Comment("状态")]
         public int? state { get; set; }