ソースを参照

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

Murphy 2 年 前
コミット
70ec5354ab

+ 1 - 1
MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/IResourceExamineAppService.cs

@@ -90,7 +90,7 @@ namespace Business.ResourceExamineManagement
         /// </summary>
         /// <param name="workOrds"></param>
         /// <returns></returns>
-        void PrAutoMerge(string companyid);
+        Task<string> PrAutoMerge(string companyid);
 
         /// <summary>
         /// PrÊÖ¶¯ºÏ²¢

+ 142 - 132
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -1160,170 +1160,180 @@ namespace Business.ResourceExamineManagement
             return JsonConvert.SerializeObject("ok");
         }
 
-        //PR自动合并--只取外购不取委外
-        public void PrAutoMerge(string companyid)
+        //PR自动合并
+        public async Task<string> PrAutoMerge(string companyid)
         {
-            //直接按间隔多少天一次来处理数据,定时任务按周四来考虑。
-            DateTime toTime = DateTime.Now;//new DateTime(2023, 12, 3);
-            DateTime starttime = toTime.Date.AddDays(1);
-            DateTime endtime = toTime.Date.AddDays(28);
-            //只合并要货令
-            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;
+            try
+            {
+                //直接按间隔多少天一次来处理数据,定时任务按周四来考虑。
+                DateTime toTime = DateTime.Now;//new DateTime(2023, 12, 3);
+                DateTime starttime = toTime.Date.AddDays(1);
+                DateTime endtime = toTime.Date.AddDays(28);
+                //只合并要货令
+                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 occupyListLINQ = _businessDbContext.srm_po_occupy.Where(x=>x.company_id.ToString()== companyid &&!x.IsDeleted).Join(_businessDbContext.srm_pr_main.Where(s => s.company_id.ToString() == companyid && s.pr_ssend_date >= starttime && s.pr_ssend_date <= endtime && s.state == 1), p => p.polist_id, pr => pr.Id, (p, pr) => new { p, pr }).ToList();
-            List<srm_po_occupy> occupylist = new List<srm_po_occupy>();
-            for (int i = 0; i < occupyListLINQ.Count; i++)
-            {
-                occupylist.Add(occupyListLINQ[i].p);
-            }
+                var occupyListLINQ = _businessDbContext.srm_po_occupy.Where(x => x.company_id.ToString() == companyid && !x.IsDeleted).Join(_businessDbContext.srm_pr_main.Where(s => s.company_id.ToString() == companyid && s.pr_ssend_date >= starttime && s.pr_ssend_date <= endtime && s.state == 1), p => p.polist_id, pr => pr.Id, (p, pr) => new { p, pr }).ToList();
+                List<srm_po_occupy> occupylist = new List<srm_po_occupy>();
+                for (int i = 0; i < occupyListLINQ.Count; i++)
+                {
+                    occupylist.Add(occupyListLINQ[i].p);
+                }
 
-            //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;
-            var purList = _mysql_srm_purchase.GetListAsync(x => x.company_id.ToString() == companyid).Result;
-            List<srm_pr_main> insetAllList = new List<srm_pr_main>();
-            List<srm_pr_main> updateAllList = new List<srm_pr_main>();
+                //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;
+                var purList = _mysql_srm_purchase.GetListAsync(x => x.company_id.ToString() == companyid).Result;
+                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++)
-            {
-                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)
+                //每次发布四周的数据
+                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);
-                    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();
-                        var pur = purList.Find(x => x.icitem_id == pr.icitem_id && x.supplier_id == pr.pr_purchaseid);
-                        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);//建议数量
-
-                            decimal qty = newPr.pr_rqty.GetValueOrDefault();
-                            if (pur != null && newPr.pr_type == 2 && pur.quota_rate.GetValueOrDefault() == 100)//委外的采购申请通过委外圆整逻辑处理
+                            //有多条才进行合并
+                            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();
+                            var pur = purList.Find(x => x.icitem_id == pr.icitem_id && x.supplier_id == pr.pr_purchaseid);
+                            if (ilist.Count > 1)
                             {
-                                //数量圆整 按最小包装量向上圆整
-                                if (pur.packaging_qty.GetValueOrDefault() != 0)
+                                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 =>
                                 {
-                                    decimal count = Math.Ceiling(qty / pur.packaging_qty.GetValueOrDefault());
-                                    qty = count * pur.packaging_qty.GetValueOrDefault();
+                                    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);//建议数量
+
+                                decimal qty = newPr.pr_rqty.GetValueOrDefault();
+                                if (pur != null && newPr.pr_type == 2 && pur.quota_rate.GetValueOrDefault() == 100)//委外的采购申请通过委外圆整逻辑处理
+                                {
+                                    //数量圆整 按最小包装量向上圆整
+                                    if (pur.packaging_qty.GetValueOrDefault() != 0)
+                                    {
+                                        decimal count = Math.Ceiling(qty / pur.packaging_qty.GetValueOrDefault());
+                                        qty = count * pur.packaging_qty.GetValueOrDefault();
+                                    }
+                                    //判断最小起订量
+                                    qty = qty > pur.qty_min.GetValueOrDefault() ? qty : pur.qty_min.GetValueOrDefault();
+                                    newPr.pr_aqty = qty;//申请数量
+                                    newPr.pr_sqty = qty;//建议数量
                                 }
-                                //判断最小起订量
-                                qty = qty > pur.qty_min.GetValueOrDefault() ? qty : pur.qty_min.GetValueOrDefault();
-                                newPr.pr_aqty = qty;//申请数量
-                                newPr.pr_sqty = qty;//建议数量
+                                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++;
                             }
-                            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++;
-                        }
-                        else {
-                            decimal qty = pr.pr_rqty.GetValueOrDefault();
-                            if (pur != null && pur.quota_rate.GetValueOrDefault() == 100)
+                            else
                             {
-                                //数量圆整 按最小包装量向上圆整
-                                if (pur.packaging_qty.GetValueOrDefault() != 0)
+                                decimal qty = pr.pr_rqty.GetValueOrDefault();
+                                if (pur != null && pur.quota_rate.GetValueOrDefault() == 100)
                                 {
-                                    decimal count = Math.Ceiling(qty / pur.packaging_qty.GetValueOrDefault());
-                                    qty = count * pur.packaging_qty.GetValueOrDefault();
+                                    //数量圆整 按最小包装量向上圆整
+                                    if (pur.packaging_qty.GetValueOrDefault() != 0)
+                                    {
+                                        decimal count = Math.Ceiling(qty / pur.packaging_qty.GetValueOrDefault());
+                                        qty = count * pur.packaging_qty.GetValueOrDefault();
+                                    }
+                                    //判断最小起订量
+                                    qty = qty > pur.qty_min.GetValueOrDefault() ? qty : pur.qty_min.GetValueOrDefault();
+                                    pr.pr_aqty = qty;//申请数量
+                                    pr.pr_sqty = qty;//建议数量
                                 }
-                                //判断最小起订量
-                                qty = qty > pur.qty_min.GetValueOrDefault() ? qty : pur.qty_min.GetValueOrDefault();
-                                pr.pr_aqty = qty;//申请数量
-                                pr.pr_sqty = qty;//建议数量
-                            }
 
+                            }
                         }
                     }
+                    insetAllList.AddRange(insetPrList);
+                    updateAllList.AddRange(updatePrList);
                 }
-                insetAllList.AddRange(insetPrList);
-                updateAllList.AddRange(updatePrList);
-            }
 
-            if (insetAllList.Any())
-            {
-                var nbrlistDto = _serialNumberAppService.GetBillNo(insetAllList[0].factory_id.ToString(), "PR", insetAllList.Count, "admin", 1);
-                int index = 0;
-                foreach (var p in insetAllList)
+                if (insetAllList.Any())
                 {
-                    if (nbrlistDto[index] != null)
+                    var nbrlistDto = _serialNumberAppService.GetBillNo(insetAllList[0].factory_id.ToString(), "PR", insetAllList.Count, "admin", 1);
+                    int index = 0;
+                    foreach (var p in insetAllList)
                     {
-                        updateAllList.Where(x => x.refer_pr_billno == p.pr_billno).ToList().ForEach(c =>
+                        if (nbrlistDto[index] != null)
                         {
-                            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())
+                            updateAllList.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 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;
+                            //数据丢失
+                            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;
+                            }
                         }
                     }
                 }
-            }
-            using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
-            {
-                try
+                using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
                 {
-                    
-                    if (insetAllList.Any())
-                    {
-                        _businessDbContext.BulkInsert(insetAllList);
-                    }
-                    if (updateAllList.Any())
+                    try
                     {
-                        _businessDbContext.BulkUpdate(updateAllList);
+
+                        if (insetAllList.Any())
+                        {
+                            _businessDbContext.BulkInsert(insetAllList);
+                        }
+                        if (updateAllList.Any())
+                        {
+                            _businessDbContext.BulkUpdate(updateAllList);
+                        }
+                        if (occupylist.Any())
+                        {
+                            _businessDbContext.BulkUpdate(occupylist);
+                        }
+                        unitOfWork.CompleteAsync();
                     }
-                    if (occupylist.Any())
+                    catch (Exception e)
                     {
-                        _businessDbContext.BulkUpdate(occupylist);
-                    }
-                    unitOfWork.CompleteAsync();
+                        unitOfWork.Dispose();
+                        new NLogHelper("ResourceExamineAppService").WriteLog("PrAutoMerge", "采购申请单自动合并更新失败:" + e.Message, _currentTenant.Id.ToString());
+                    };
                 }
-                catch (Exception e)
-                {
-                    unitOfWork.Dispose();
-                    new NLogHelper("ResourceExamineAppService").WriteLog("PrAutoMerge", "采购申请单自动合并更新失败:" + e.Message, _currentTenant.Id.ToString());
-                };
+                return "ok";
+            }
+            catch (Exception e)
+            {
+                new NLogHelper("ResourceExamineAppService").WriteLog("PrAutoMerge", "PR自动合并:" + e.Message, _currentTenant.Id.ToString());
+                return "PR自动合并,请联系管理员。";
             }
         }
 

+ 2 - 2
MicroServices/Business/Business.HttpApi/Controllers/ResourceExamineController.cs

@@ -158,9 +158,9 @@ namespace Business.Controllers
         /// <returns></returns>
         [HttpPost]
         [Route("PrAutoMerge")]
-        public void PrAutoMerge(string companyid)
+        public Task<string> PrAutoMerge(string companyid)
         {
-            _ResourceExamineAppService.PrAutoMerge(companyid);
+            return _ResourceExamineAppService.PrAutoMerge(companyid);
         }
 
         /// <summary>