Pārlūkot izejas kodu

代码逻辑优化。

tangdi 2 gadi atpakaļ
vecāks
revīzija
66d549fa0d

+ 37 - 25
MicroServices/Business/Business.Application/ReplenishmentManagement/ReplenishmentAppService.cs

@@ -3574,7 +3574,8 @@ namespace Business.Replenishment
             if (icitemStokc.Count > 0)
             {
                 List<string> numbers = pretreatments.Select(s => s.item_number).ToList();
-                var locStock = _invMaster.Select(a => numbers.Contains(a.ItemNum) && a.IsActive && a.Domain == factoryId.ToString());
+                List<string> locationList = new List<string> { "1000", "1001", "5008", "8000", "8001" };
+                var locStock = _invMaster.Select(a => numbers.Contains(a.ItemNum) && a.IsActive && a.Domain == factoryId.ToString() && locationList.Contains(a.Location));
                 //设置当前计算bangid
                 icitemStokc.ForEach(item => {
                     item.bang_id = bangid;
@@ -3631,7 +3632,7 @@ namespace Business.Replenishment
                 }
 
                 //工单主表
-                var mes_morder = _mysql_mes_morder.GetListAsync(x => x.company_id == companyId && x.factory_id == factoryId && workordmsters.Select(c => c.WorkOrd).Contains(x.morder_no)).Result;
+                var mes_morder = _mysql_mes_morder.GetListAsync(x => string.IsNullOrEmpty(x.morder_state) == false && x.morder_state != "完成" && x.company_id == companyId && x.factory_id == factoryId && workordmsters.Select(c => c.WorkOrd).Contains(x.morder_no)).Result;
                 if (mes_morder.Count > 0)
                 {
                     mes_morder.ForEach(item => { item.bang_id = bangid; });
@@ -3658,41 +3659,52 @@ namespace Business.Replenishment
                     await _mes_mooccupy.InsertManyAsync(moMes_mooccupy);
                 }
             }
-            //TODO:要不要根据某些条件只同步有效的数据
-            //采购订单
-            var srm_po_main = _mysql_srm_po_main.GetListAsync(x => x.company_id == companyId && x.factory_id == factoryId).Result;
-            if (srm_po_main.Count > 0)
-            {
-                var moSrm_po_main = ObjectMapper.Map<List<srm_po_main>, List<mo_srm_po_main>>(srm_po_main);
-                moSrm_po_main.ForEach(item => { item.GenerateNewId(help.NextId()); item.bang_id = bangid; });
-                await _srm_po_main.InsertManyAsync(moSrm_po_main);
-            }
+            //根据物料信息,只同步在途未关闭的采购订单和采购申请
 
             //采购订单明细
-            var srm_po_list = _mysql_srm_po_list.GetListAsync(x => x.company_id == companyId && x.factory_id == factoryId).Result;
+            var srm_po_list = _mysql_srm_po_list.GetListAsync(x => x.company_id == companyId && x.factory_id == factoryId && itemIds.Contains(x.icitem_id.GetValueOrDefault())).Result;
             if (srm_po_list.Count > 0)
             {
-                var moSrm_po_list = ObjectMapper.Map<List<srm_po_list>, List<mo_srm_po_list>>(srm_po_list);
-                moSrm_po_list.ForEach(item => { item.GenerateNewId(help.NextId()); item.bang_id = bangid; });
-                await _srm_po_list.InsertManyAsync(moSrm_po_list);
-            }
-
-            //采购订单占用详情
-            var srm_po_occupy = _mysql_srm_po_occupy.GetListAsync(x => x.company_id == companyId && x.factory_id == factoryId).Result;
-            if (srm_po_occupy.Count > 0)
-            {
-                var moSrm_po_occupy = ObjectMapper.Map<List<srm_po_occupy>, List<mo_srm_po_occupy>>(srm_po_occupy);
-                moSrm_po_occupy.ForEach(item => { item.GenerateNewId(help.NextId()); item.bang_id = bangid; });
-                await _srm_po_occupy.InsertManyAsync(moSrm_po_occupy);
+                //采购订单--取出状态为在途的PO
+                var srm_po_main = _mysql_srm_po_main.GetListAsync(x => x.company_id == companyId && x.factory_id == factoryId && srm_po_list.Select(c => c.po_id).Contains(x.Id) && x.state != 3).Result;
+                if (srm_po_main.Count > 0)
+                {
+                    var moSrm_po_main = ObjectMapper.Map<List<srm_po_main>, List<mo_srm_po_main>>(srm_po_main);
+                    moSrm_po_main.ForEach(item => { item.GenerateNewId(help.NextId()); item.bang_id = bangid; });
+                    await _srm_po_main.InsertManyAsync(moSrm_po_main);
+
+                    //订单明细--根据在途PO过滤出有效的Po_list
+                    srm_po_list = srm_po_list.Where(s => srm_po_main.Select(x => x.Id).Contains(s.po_id.GetValueOrDefault())).ToList();
+                    var moSrm_po_list = ObjectMapper.Map<List<srm_po_list>, List<mo_srm_po_list>>(srm_po_list);
+                    moSrm_po_list.ForEach(item => { item.GenerateNewId(help.NextId()); item.bang_id = bangid; });
+                    await _srm_po_list.InsertManyAsync(moSrm_po_list);
+                }
+                //采购订单明细占用详情
+                var srm_po_occupy = _mysql_srm_po_occupy.GetListAsync(x => x.company_id == companyId && x.factory_id == factoryId && srm_po_list.Select(c => c.Id).Contains(x.polist_id.GetValueOrDefault())).Result;
+                if (srm_po_occupy.Count > 0)
+                {
+                    var moSrm_po_occupy = ObjectMapper.Map<List<srm_po_occupy>, List<mo_srm_po_occupy>>(srm_po_occupy);
+                    moSrm_po_occupy.ForEach(item => { item.GenerateNewId(help.NextId()); item.bang_id = bangid; });
+                    await _srm_po_occupy.InsertManyAsync(moSrm_po_occupy);
+                }
             }
 
             //pr
-            var srm_pr_main = _mysql_srm_pr_main.GetListAsync(x => x.company_id == companyId && x.factory_id == factoryId && itemIds.Contains(x.icitem_id.GetValueOrDefault())).Result;
+            var srm_pr_main = _mysql_srm_pr_main.GetListAsync(x => x.company_id == companyId && x.factory_id == factoryId && x.state != 0 && itemIds.Contains(x.icitem_id.GetValueOrDefault())).Result;
             if (srm_pr_main.Count > 0)
             {
                 var moSrm_pr_main = ObjectMapper.Map<List<srm_pr_main>, List<mo_srm_pr_main>>(srm_pr_main);
                 moSrm_pr_main.ForEach(item => { item.GenerateNewId(help.NextId()); item.bang_id = bangid; });
                 await _srm_pr_main.InsertManyAsync(moSrm_pr_main);
+
+                //采购申请占用详情
+                var srm_pr_occupy = _mysql_srm_po_occupy.GetListAsync(x => x.company_id == companyId && x.factory_id == factoryId && srm_pr_main.Select(c => c.Id).Contains(x.polist_id.GetValueOrDefault())).Result;
+                if (srm_pr_occupy.Count > 0)
+                {
+                    var moSrm_pr_occupy = ObjectMapper.Map<List<srm_po_occupy>, List<mo_srm_po_occupy>>(srm_pr_occupy);
+                    moSrm_pr_occupy.ForEach(item => { item.GenerateNewId(help.NextId()); item.bang_id = bangid; });
+                    await _srm_po_occupy.InsertManyAsync(moSrm_pr_occupy);
+                }
             }
         }
 

+ 9 - 4
MicroServices/Business/Business.Application/ResourceExamineManagement/CalcBomViewAppService.cs

@@ -230,7 +230,9 @@ namespace Business.ResourceExamineManagement
                 _morderAppService.mo_Mes_Moentry = moentriesList;//工单子表
                 _morderAppService.mo_Mes_Mooccupies = mooccupyAllList;//工单占用
                 List<mo_mes_mooccupy> mooccupylist = new List<mo_mes_mooccupy>();
-                if (param.checkflag)
+                //if (param.checkflag)
+                //只会有销售订单或者计划订单进入,才会为空。
+                if (mes_morder == null)
                 {
                     //工单检查无需检查在制
                     mooccupylist = _morderAppService.CheckMorder(level1Dto.item_number, level1Dto.lack_qty, plan_date.GetValueOrDefault(), sentrys, ic_item, bangid);
@@ -1563,8 +1565,14 @@ namespace Business.ResourceExamineManagement
                 srm_Pr.pr_mono = mes_morder.morder_no;//关联工单号
                 srm_Pr.entity_id = 1;//工单行号
             }
+            srm_Pr.pr_order_type = returnlist.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;//供应商名称
@@ -1585,9 +1593,6 @@ namespace Business.ResourceExamineManagement
             srm_Pr.icitem_id = returnlist.item_id;//物料id
             srm_Pr.icitem_name = returnlist.item_name;//物料名称
             srm_Pr.num = returnlist.num;
-            
-            srm_Pr.pr_order_type = "1";//单据类型
-
             if (plan_date != null && !IsStraight)
             {
                 //-1为提前一天准备

+ 63 - 10
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -708,7 +708,7 @@ namespace Business.ResourceExamineManagement
             List<KittingTimeDto> kittingTimes = new List<KittingTimeDto>();
             DataInitialization(boms, bangid, icitemlist, stocklist, pretreatments, sklist);
 
-            _CalcBomViewAppService.morder_type = MorderEnum.XsMorder;
+            
             foreach (var sorder in sorders)
             {
                 param.sorderId = sorder.Id;
@@ -717,6 +717,13 @@ namespace Business.ResourceExamineManagement
                 //param.checkflag = true;
                 _morderAppService.param = param;
                 _purchaseOrderAppService.param = param;
+                if (sorder.order_type.GetValueOrDefault() == 1)
+                {
+                    _CalcBomViewAppService.morder_type = MorderEnum.XsMorder;
+                }
+                else {
+                    _CalcBomViewAppService.morder_type = MorderEnum.JhMorder;
+                }
                 _CalcBomViewAppService.param = param;
                 //_CalcBomViewAppService.IsStraight = true;
                 _CalcBomViewAppService.seorder = sorder;//销售订单
@@ -1060,7 +1067,14 @@ namespace Business.ResourceExamineManagement
             List<srm_po_occupy> occupylist = _mysql_srm_po_occupy.GetListAsync(s => idList.Contains(s.polist_id.GetValueOrDefault())).Result;
             srm_pr_main srm_Pr = help.DeepCopy(prlist[0]);
             srm_Pr.GenerateNewId(help.NextId());
-            srm_Pr.pr_billno = prlist[0].pr_type == 2 ? _CalcBomViewAppService.getOrderNum("WWPR") : _CalcBomViewAppService.getOrderNum("PR");//pr单号
+            var nbrResult = _serialNumberAppService.GetBillNo(srm_Pr.factory_id.ToString(), "PR", 1, "admin", 1);
+            if (nbrResult.Any())
+            {
+                srm_Pr.pr_billno = nbrResult[0].NbrResult;
+            }
+            else {
+                srm_Pr.pr_billno = prlist[0].pr_type == 2 ? _CalcBomViewAppService.getOrderNum("WWPR") : _CalcBomViewAppService.getOrderNum("PR");//pr单号
+            }
             srm_Pr.state = 1;
             /*if (mes_morder != null)
             {
@@ -1179,7 +1193,37 @@ namespace Business.ResourceExamineManagement
                     }
                 }
             }
-            
+            if (insetPrList.Any())
+            {
+                var nbrlistDto = _serialNumberAppService.GetBillNo(insetPrList[0].factory_id.ToString(), "PR", insetPrList.Count, "admin", 1);
+                int index = 0;
+                foreach (var p in insetPrList)
+                {
+                    if (nbrlistDto[index] != null)
+                    {
+                        updatePrList.Where(x => x.refer_pr_billno == p.pr_billno).ToList().ForEach(c =>
+                        {
+                            c.refer_pr_billno = nbrlistDto[index].NbrResult.ToString();
+                        });
+                        p.pr_billno = nbrlistDto[index].NbrResult.ToString();
+                    }
+                    index++;
+                    if (p.pr_purchaseid.GetValueOrDefault() == 0)
+                    {
+                        //数据丢失
+                        var list = _mysql_srm_purchase.GetListAsync(s => s.icitem_id == p.icitem_id).Result;
+                        if (list.Any())
+                        {
+                            var purchase = list.OrderBy(s => s.quota_priority).FirstOrDefault();
+                            p.pr_purchaseid = purchase.supplier_id;
+                            p.pr_purchasename = purchase.supplier_name;
+                            p.pr_purchasenumber = purchase.supplier_number;
+                        }
+                    }
+                }
+            }
+           
+
             #region 此逻辑是处理按每周几送货实现,先屏蔽
             /*foreach (var pr in moPrlist)
             {
@@ -1375,7 +1419,15 @@ namespace Business.ResourceExamineManagement
                             var nbrList = _purOrdMaster.Select(a => a.Domain == poaction.poMasterList[0].Domain && nbrs.Contains(a.PurOrd));
                             poaction.poDetailList.ForEach(c =>
                             {
-                                c.PurOrdRecID = nbrList.Where(a => a.PurOrd == c.PurOrd).First().RecID;
+                                var master = nbrList.Where(a => a.PurOrd == c.PurOrd).FirstOrDefault();
+                                if (master != null)
+                                {
+                                    c.PurOrdRecID = master.RecID;
+                                    if (master.FSTID == "3")
+                                    {
+                                        c.Location = "VMI01";
+                                    }
+                                }
                             });
                             _purOrdDetail.Insert(poaction.poDetailList);
                         }
@@ -1920,7 +1972,7 @@ namespace Business.ResourceExamineManagement
                 await _ic_item_stock.InsertManyAsync(moIcitemStokc);
             }
 
-            var workordmsters = _workOrdMaster.Select(s => s.Domain == factoryId.ToString() && s.Status.ToLower() != "c");
+            var workordmsters = _workOrdMaster.Select(s => s.Domain == factoryId.ToString() && string.IsNullOrEmpty(s.Status) != true && s.Status.ToLower() != "c");
             if (workordmsters.Any())
             {
                 //根据工单表找到工单明细,然后根据DOP工单占用记录,对比工单明细发货数量,来做冲销。
@@ -1961,7 +2013,7 @@ namespace Business.ResourceExamineManagement
                 }
 
                 //工单主表
-                var mes_morder = _mysql_mes_morder.GetListAsync(x => x.company_id == companyId && x.factory_id == factoryId && workordmsters.Select(c => c.WorkOrd).Contains(x.morder_no)).Result;
+                var mes_morder = _mysql_mes_morder.GetListAsync(x => string.IsNullOrEmpty(x.morder_state) == false && x.morder_state != "完成" && x.company_id == companyId && x.factory_id == factoryId && workordmsters.Select(c => c.WorkOrd).Contains(x.morder_no)).Result;
                 if (mes_morder.Count > 0)
                 {
                     mes_morder.ForEach(item => { item.bang_id = bangid; });
@@ -2163,12 +2215,11 @@ namespace Business.ResourceExamineManagement
             {
                 AutoCreatePOFromPRByType(zcPr, icitemlist, itemsupplierList, purchaselist, poaction,1);
             }
-
-            var wwPr = list.Where(a => a.pr_billno.StartsWith("WWPR")).ToList();
+            /*var wwPr = list.Where(a => a.pr_billno.StartsWith("WWPR")).ToList();
             if (wwPr.Any())
             {
                 AutoCreatePOFromPRByType(wwPr, icitemlist, itemsupplierList, purchaselist, poaction,2);
-            }
+            }*/
         }
         /// <summary>
         /// 根据PR生成PO
@@ -2373,7 +2424,8 @@ namespace Business.ResourceExamineManagement
                     USAGE = a.supplier_type,
                     IsActive = true,
                     CreateTime = a.create_time,
-                    UpdateTime = a.update_time
+                    UpdateTime = a.update_time,
+                    FSTID = a.supplier_type == "VMI" ? "3" : ""
                 });
             });
             poaction.poMasterList.AddRange(purOrdMasters);
@@ -4215,6 +4267,7 @@ namespace Business.ResourceExamineManagement
                     woRouting.IsActive = true;
                     woRouting.CommentIndex = dtl.CommentIndex;
                     woRouting.CreateTime = DateTime.Now;
+                    woRouting.StdOp = dtl.StdOp;
                     woRouting.PackingQty = dtl.PackingQty.GetValueOrDefault();
                     workOrdRoutings.Add(woRouting);
                 }

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

@@ -143,5 +143,11 @@ namespace Business.Domain
         /// </summary>
         [Comment("版本")]
         public string Rev { get; set; }
+
+        /// <summary>
+        /// 库位
+        /// </summary>
+        [Comment("库位")]
+        public string Location { get; set; }
     }
 }

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

@@ -135,5 +135,11 @@ namespace Business.Domain
         /// </summary>
         [Comment("供应类别")]
         public string USAGE { get; set; }
+
+        /// <summary>
+        /// 仓类型
+        /// </summary>
+        [Comment("仓类型")]
+        public string FSTID { get; set; }
     }
 }

+ 6 - 0
MicroServices/Business/Business.Domain/StructuredDB/Production/RoutingOpDetail.cs

@@ -91,5 +91,11 @@ namespace Business.Domain
         /// </summary>
         [Comment("报工批量")]
         public decimal? PackingQty { get; set; }
+
+        /// <summary>
+        /// SAP工序
+        /// </summary>
+        [Comment("SAP工序")]
+        public string StdOp { get; set; }
     }
 }

+ 6 - 0
MicroServices/Business/Business.Domain/StructuredDB/Production/WorkOrdRouting.cs

@@ -140,5 +140,11 @@ namespace Business.Domain
         /// </summary>
         [Comment("最新报工时间")]
         public DateTime? Last { get; set; }
+
+        /// <summary>
+        /// SAP工序
+        /// </summary>
+        [Comment("SAP工序")]
+        public string StdOp { get; set; }
     }
 }