Selaa lähdekoodia

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

tangdi 3 vuotta sitten
vanhempi
commit
20ce551d05

+ 2 - 0
MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/Dto/BomChildExamineDto.cs

@@ -403,6 +403,8 @@ namespace Business.ResourceExamineManagement.Dto
         /// 税率
         /// </summary>
         public decimal? pr_rate { get; set; }
+
+        public bool isbestoptions { get; set; }
     }
 
     /// <summary>

+ 13 - 1
MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/Dto/SRMPRDto.cs

@@ -1,7 +1,9 @@
 using Bussiness.Model.SRM;
 using Bussiness.MongoModel.SRM;
+using Microsoft.EntityFrameworkCore;
 using System;
 using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations.Schema;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -13,7 +15,7 @@ namespace Business.ResourceExamineManagement.Dto
     {
         public DateTime lastStartTmie { get; set; }
 
-        public mo_srm_pr_main srm_Pr_Main { get; set; }
+        public List<mo_srm_pr_main> srm_Pr_Main { get; set; }
 
         /// <summary>
         /// 项次号
@@ -23,5 +25,15 @@ namespace Business.ResourceExamineManagement.Dto
         /// 订单行主键
         /// </summary>
         public long orderentry_id { get; set; }
+
+        /// <summary>
+        /// 总共提前期
+        /// </summary>
+        public decimal? totalLeadTime { get; set; }
+
+        /// <summary>
+        /// 订单价格(含税)
+        /// </summary>
+        public decimal? pr_orderprice { get; set; }
     }
 }

+ 79 - 56
MicroServices/Business/Business.Application/ResourceExamineManagement/CalcBomViewAppService.cs

@@ -10,6 +10,7 @@ using Bussiness.MongoModel.MES.IC;
 using Bussiness.MongoModel.Production;
 using Bussiness.MongoModel.SRM;
 using Bussiness.MongoModel.Tech;
+using NUglify.Helpers;
 using Spire.Pdf.Exporting.XPS.Schema;
 using Spire.Pdf.General.Render.Decode.Jpeg2000.j2k.wavelet.synthesis;
 using System;
@@ -86,6 +87,8 @@ namespace Business.ResourceExamineManagement
         /// </summary>
         private readonly PurchaseOrderAppService _purchaseOrderAppService;
 
+        Random rnd = new Random();
+
         /// <summary>
         /// 构造函数
         /// </summary>
@@ -1038,7 +1041,7 @@ namespace Business.ResourceExamineManagement
             SRMPRDto sRMPR = new SRMPRDto();
             mo_srm_pr_main srm_Pr = new mo_srm_pr_main();
             var leadTime = iCItemLeadTimes.Find(x => x.item_id == returnlist.item_id);
-            var supplier = supplierList.Find(x => x.icitem_id == returnlist.item_id);//默认取第一个供应商
+            var supplier = supplierList.Where(x => x.icitem_id == returnlist.item_id);//默认取第一个供应商
             var plan = planList.Find(x => x.icitem_id == returnlist.item_id);
             if (leadTime == null || supplier == null || plan == null)
             {
@@ -1047,50 +1050,66 @@ namespace Business.ResourceExamineManagement
                 return sRMPR;
                 //throw new NotImplementedException("未找到物料ic_factory_details或ic_item_pur或ic_plan信息!");
             }
-            srm_Pr.id = help.NextId();
-            srm_Pr.GenerateNewId();
-            srm_Pr.pr_billno = getOrderNum("PR");//pr单号
-            srm_Pr.pr_mono = "";//关联工单号
-            srm_Pr.entity_id = 1;//工单行号
-            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_rqty = returnlist.lack_qty;//需求数量
-            srm_Pr.pr_aqty = returnlist.lack_qty;//申请数量
-            srm_Pr.pr_sqty = returnlist.lack_qty;//建议数量
-            srm_Pr.icitem_id = returnlist.item_id;//物料id
-            srm_Pr.icitem_name = returnlist.item_name;//物料名称
-            srm_Pr.pr_order_type = 1;//单据类型
-            srm_Pr.pr_ssend_date = deliveryDate.AddDays((double)leadTime.order_leadtime * -1);//系统建议下单日期
-            srm_Pr.pr_sarrive_date = deliveryDate.AddDays((double)leadTime.transportation_leadtime * -1);//系统建议到达日期(建议到货日期)
-            srm_Pr.pr_psend_date = deliveryDate.AddDays((double)leadTime.order_leadtime * -1);//计划下单日期
-            srm_Pr.pr_parrive_date = deliveryDate.AddDays((double)leadTime.transportation_leadtime * -1);//计划到达日期
-            srm_Pr.pr_psend_date = deliveryDate.AddDays((double)leadTime.order_leadtime * -1);//计划下单日期
-            srm_Pr.pr_sysprice = returnlist.lack_qty * supplier.netpurchase_price * (1 + supplier.taxrate);//系统价格(含税)
-            srm_Pr.pr_orderprice = returnlist.lack_qty * supplier.netpurchase_price * (1 + supplier.taxrate);//订单价格(含税)
-            srm_Pr.pr_price = supplier.netpurchase_price;//采购净价(不含税)
-            srm_Pr.pr_rate = supplier.taxrate;//税率
-            srm_Pr.pr_unit = returnlist.unit;//单位
-            srm_Pr.state = 1;//状态
-            srm_Pr.old_apply_aqty = 0;//已申请数量
-            srm_Pr.pr_type = orderType;//申请类型
-            srm_Pr.currencytype = supplier.currency_type;//币种
-            srm_Pr.secInv_ratio = plan.secinv_ratio;//安全库存触发采购比例
-            srm_Pr.tenant_id = tenantId;
-            srm_Pr.factory_id = factoryid;
-            srm_Pr.bang_id = bangId;
-            //_srm_pr_main.InsertOne(srm_Pr);
-            decimal? totalLeadTime = leadTime.transportation_leadtime + leadTime.stock_leadtime + leadTime.production_leadtime + leadTime.order_leadtime;
 
-            sRMPR.srm_Pr_Main = srm_Pr;
+            decimal bestLead = decimal.MaxValue;
+            decimal bestPrice=decimal.MaxValue;
+            long bestid = 0;
+            supplier.ForEach(x =>
+            {
+                //提前期随机数,金额随机数
+                leadTime.order_leadtime = rnd.Next(1, 5);
+                leadTime.transportation_leadtime = rnd.Next(1, 5);
+                leadTime.stock_leadtime = rnd.Next(1, 5);
+                leadTime.production_leadtime = rnd.Next(1, 5);
+
+                x.netpurchase_price = rnd.Next(1, 100);
+                x.taxrate = 0.13m;//固定13%增值税
+
+                srm_Pr.id = help.NextId();
+                srm_Pr.GenerateNewId();
+                srm_Pr.pr_billno = getOrderNum("PR");//pr单号
+                srm_Pr.pr_mono = "";//关联工单号
+                srm_Pr.entity_id = 1;//工单行号
+                srm_Pr.pr_purchaseid = x.supplier_id;//供应商id  
+                srm_Pr.pr_purchasenumber = x.supplier_number;//供应商编码
+                srm_Pr.pr_purchasename = x.supplier_name;//供应商名称
+                srm_Pr.pr_purchaser = x.purcher;//采购员
+                srm_Pr.pr_purchaser_num = "";//采购员工号(采购信息表)
+                srm_Pr.pr_rqty = returnlist.lack_qty;//需求数量
+                srm_Pr.pr_aqty = returnlist.lack_qty;//申请数量
+                srm_Pr.pr_sqty = returnlist.lack_qty;//建议数量
+                srm_Pr.icitem_id = returnlist.item_id;//物料id
+                srm_Pr.icitem_name = returnlist.item_name;//物料名称
+                srm_Pr.pr_order_type = 1;//单据类型
+                srm_Pr.pr_ssend_date = deliveryDate.AddDays((double)leadTime.order_leadtime * -1);//系统建议下单日期
+                srm_Pr.pr_sarrive_date = deliveryDate.AddDays((double)leadTime.transportation_leadtime * -1);//系统建议到达日期(建议到货日期)
+                srm_Pr.pr_psend_date = deliveryDate.AddDays((double)leadTime.order_leadtime * -1);//计划下单日期
+                srm_Pr.pr_parrive_date = deliveryDate.AddDays((double)leadTime.transportation_leadtime * -1);//计划到达日期
+                srm_Pr.pr_psend_date = deliveryDate.AddDays((double)leadTime.order_leadtime * -1);//计划下单日期
+                srm_Pr.pr_sysprice = returnlist.lack_qty * x.netpurchase_price * (1 + x.taxrate);//系统价格(含税)
+                srm_Pr.pr_orderprice = returnlist.lack_qty * x.netpurchase_price * (1 + x.taxrate);//订单价格(含税)
+                srm_Pr.pr_price = x.netpurchase_price;//采购净价(不含税)
+                srm_Pr.pr_rate = x.taxrate;//税率
+                srm_Pr.pr_unit = returnlist.unit;//单位
+                srm_Pr.state = 1;//状态
+                srm_Pr.old_apply_aqty = 0;//已申请数量
+                srm_Pr.pr_type = orderType;//申请类型
+                srm_Pr.currencytype = x.currency_type;//币种
+                srm_Pr.secInv_ratio = plan.secinv_ratio;//安全库存触发采购比例
+                srm_Pr.tenant_id = tenantId;
+                srm_Pr.factory_id = factoryid;
+                srm_Pr.bang_id = bangId;
+                //_srm_pr_main.InsertOne(srm_Pr);
+                decimal? totalLeadTime = leadTime.transportation_leadtime + leadTime.stock_leadtime + leadTime.production_leadtime + leadTime.order_leadtime;
+                srm_Pr.totalLeadTime= totalLeadTime;
+                sRMPR.srm_Pr_Main.Add(srm_Pr);
+            });
+            sRMPR.srm_Pr_Main.OrderBy(x=>x.totalLeadTime).ThenBy(x=>x.pr_orderprice).First().isbestoptions= true;
             sRMPR.item_no = returnlist.num;
             sRMPR.orderentry_id = returnlist.sentry_id;
-            sRMPR.lastStartTmie = deliveryDate.AddDays((double)totalLeadTime * -1);//减去提前期
+            sRMPR.lastStartTmie = deliveryDate.AddDays((double)sRMPR.srm_Pr_Main.MinBy(x=>x.totalLeadTime).totalLeadTime * -1);//减去提前期
             return sRMPR;
         }
-
         // 生成订单编号 字母+年月日+8位随机数+时间戳
         private string getOrderNum(string preCode)
         {
@@ -1195,22 +1214,26 @@ namespace Business.ResourceExamineManagement
             item.purchase_list = new List<purchase>();
             if (SRMPRDto.srm_Pr_Main != null)
             {
-                purchase pur = new purchase();
-                pur.Id = SRMPRDto.srm_Pr_Main.id;
-                pur.pr_billno = SRMPRDto.srm_Pr_Main.pr_billno;
-                pur.pr_purchasenumber = SRMPRDto.srm_Pr_Main.pr_purchasenumber;
-                pur.pr_purchasename = SRMPRDto.srm_Pr_Main.pr_purchasename;
-                pur.pr_rqty = SRMPRDto.srm_Pr_Main.pr_rqty;
-                pur.pr_aqty = SRMPRDto.srm_Pr_Main.pr_aqty;
-                pur.pr_sqty = SRMPRDto.srm_Pr_Main.pr_sqty;
-                pur.pr_parrive_date = SRMPRDto.srm_Pr_Main.pr_parrive_date;
-                pur.pr_rarrive_date = SRMPRDto.srm_Pr_Main.pr_rarrive_date;
-                pur.pr_pur_affirm_date = SRMPRDto.srm_Pr_Main.pr_pur_affirm_date;
-                pur.pr_sysprice = SRMPRDto.srm_Pr_Main.pr_sysprice;
-                pur.pr_orderprice = SRMPRDto.srm_Pr_Main.pr_orderprice;
-                pur.pr_price = SRMPRDto.srm_Pr_Main.pr_price;
-                pur.pr_rate = SRMPRDto.srm_Pr_Main.pr_rate;
-                item.purchase_list.Add(pur);
+                for(int i=0;i< SRMPRDto.srm_Pr_Main.Count;i++)
+                {
+                    purchase pur = new purchase();
+                    pur.Id = SRMPRDto.srm_Pr_Main[i].id;
+                    pur.pr_billno = SRMPRDto.srm_Pr_Main[i].pr_billno;
+                    pur.pr_purchasenumber = SRMPRDto.srm_Pr_Main[i].pr_purchasenumber;
+                    pur.pr_purchasename = SRMPRDto.srm_Pr_Main[i].pr_purchasename;
+                    pur.pr_rqty = SRMPRDto.srm_Pr_Main[i].pr_rqty;
+                    pur.pr_aqty = SRMPRDto.srm_Pr_Main[i].pr_aqty;
+                    pur.pr_sqty = SRMPRDto.srm_Pr_Main[i].pr_sqty;
+                    pur.pr_parrive_date = SRMPRDto.srm_Pr_Main[i].pr_parrive_date;
+                    pur.pr_rarrive_date = SRMPRDto.srm_Pr_Main[i].pr_rarrive_date;
+                    pur.pr_pur_affirm_date = SRMPRDto.srm_Pr_Main[i].pr_pur_affirm_date;
+                    pur.pr_sysprice = SRMPRDto.srm_Pr_Main[i].pr_sysprice;
+                    pur.pr_orderprice = SRMPRDto.srm_Pr_Main[i].pr_orderprice;
+                    pur.pr_price = SRMPRDto.srm_Pr_Main[i].pr_price;
+                    pur.pr_rate = SRMPRDto.srm_Pr_Main[i].pr_rate;
+                    pur.isbestoptions = SRMPRDto.srm_Pr_Main[i].isbestoptions;
+                    item.purchase_list.Add(pur);
+                }
             }
             item.kitting_time = SRMPRDto.lastStartTmie;
             SRMPRDtoList.Add(SRMPRDto);

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

@@ -565,7 +565,15 @@ namespace Business.ResourceExamineManagement
             if (_CalcBomViewAppService.SRMPRDtoList.Any())
             {
                 var prlist = _CalcBomViewAppService.SRMPRDtoList.Where(f => f.srm_Pr_Main != null).Select(s => s.srm_Pr_Main).ToList();
-                await _srm_pr_main.InsertMany(prlist);
+                List<mo_srm_pr_main> list = new List<mo_srm_pr_main>();
+                foreach (var pr in prlist)
+                {
+                    foreach (var item in pr)
+                    {
+                        list.Add(item);
+                    }
+                }
+                await _srm_pr_main.InsertMany(list);
                 rtn.srm_pr_list = _CalcBomViewAppService.SRMPRDtoList;
             }
             rtn.examines = examines;
@@ -1227,7 +1235,7 @@ namespace Business.ResourceExamineManagement
             //_srm_pr_main.InsertOne(srm_Pr);
             decimal? totalLeadTime = leadTime.transportation_leadtime + leadTime.stock_leadtime + leadTime.production_leadtime + leadTime.order_leadtime;
 
-            sRMPR.srm_Pr_Main = srm_Pr;
+            sRMPR.srm_Pr_Main.Add(srm_Pr);
             sRMPR.lastStartTmie = deliveryDate.AddDays((double)totalLeadTime * -1);//减去提前期
             return sRMPR;
         }

+ 17 - 0
MicroServices/Business/Bussiness.MongoModel/SRM/mo_srm_pr_main.cs

@@ -1,6 +1,7 @@
 using Business.Core.Attributes;
 using Bussiness.MongoModel;
 using Microsoft.EntityFrameworkCore;
+using MongoDB.Bson.Serialization.Attributes;
 using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
@@ -218,5 +219,21 @@ namespace Bussiness.MongoModel.SRM
         [Comment("计算id")]
         [NotMapped]
         public long? bang_id { get; set; }
+
+        /// <summary>
+        /// 是否最优解
+        /// </summary>
+        [Comment("是否最优解")]
+        [NotMapped]
+        [BsonIgnore]
+        public bool isbestoptions { get; set; }
+
+        /// <summary>
+        /// 总共提前期
+        /// </summary>
+        [Comment("总共提前期")]
+        [BsonIgnore]
+        [NotMapped]
+        public decimal? totalLeadTime { get; set; }
     }
 }