tangdi 2 лет назад
Родитель
Сommit
4aa21b1579

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

@@ -39,7 +39,7 @@ namespace Business.ResourceExamineManagement
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
-        Task<string> OrderResourceCheck(int day, string workOrd);
+        Task<string> OrderResourceCheck(int day, string workOrd, string companyid);
 
         /// <summary>
         /// Ìæ´úÁϼì²é
@@ -53,7 +53,7 @@ namespace Business.ResourceExamineManagement
         /// </summary>
         /// <param name="workOrds"></param>
         /// <returns></returns>
-        Task<string> PlanOrderResourceCheck();
+        Task<string> PlanOrderResourceCheck(string companyid);
 
         /// <summary>
         /// ×ÊÔ´¼ì²é½á¹ûÆÀÉó

+ 75 - 63
MicroServices/Business/Business.Application/ResourceExamineManagement/CalcBomViewAppService.cs

@@ -694,46 +694,52 @@ namespace Business.ResourceExamineManagement
                 }
                 else if (item.erp_cls == 3)
                 {
-                    //先找在途
-                    CalcInTransit(sentrys, item, bangid, plan_date.GetValueOrDefault());
-                    if (item.lack_qty > 0 && (param.checkflag || (!param.checkflag && param.checkPlan)))
+                    if (param.checkflag || param.checkPlan)
                     {
-                        //采购申请
-                        PackageSRMPR(item, bangid, sentrys);
+                        //先找在途
+                        CalcInTransit(sentrys, item, bangid, plan_date.GetValueOrDefault());
+                        if (item.lack_qty > 0)
+                        {
+                            //采购申请
+                            PackageSRMPR(item, bangid, sentrys);
+                        }
                     }
                 }
                 else if (item.erp_cls == 2)
                 {
-                    //先找在途
-                    CalcInTransit(sentrys, item, bangid, plan_date.GetValueOrDefault());
-                    if (item.lack_qty > 0 && (param.checkflag || (!param.checkflag && param.checkPlan)))
+                    if (param.checkflag || param.checkPlan)
                     {
-                        //先计算末级数据的齐套时间。
-                        if (cilList.Count > 0)
+                        //先找在途
+                        CalcInTransit(sentrys, item, bangid, plan_date.GetValueOrDefault());
+                        if (item.lack_qty > 0)
                         {
-                            CalcIcitem(cilList, returnlist, bangid, sklist, plan_date, icitemlist, sentrys, childidList);
-                            item.kitting_time = cilList.Max(s => s.kitting_time);
+                            //先计算末级数据的齐套时间。
+                            if (cilList.Count > 0)
+                            {
+                                CalcIcitem(cilList, returnlist, bangid, sklist, plan_date, icitemlist, sentrys, childidList);
+                                item.kitting_time = cilList.Max(s => s.kitting_time);
+                            }
+                            //1.先生成委外工单。
+                            var mesorder = CreateMesOOder(item, param.company_id, param.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
+                            item.subcontracting_qty = item.lack_qty;
+                            item.subcontracting_list = new List<ooder>();
+                            ooder oo = new ooder();
+                            oo.Id = mesorder.Id;
+                            oo.morder_production_number = mesorder.morder_production_number;
+                            oo.production_unit = mesorder.production_unit;
+                            oo.production_unit_code = mesorder.production_unit_code;
+                            oo.ooentry_prdname = mesorder.ooentry_prdname;
+                            oo.ooentry_stime = mesorder.ooentry_stime;
+                            oo.ooentry_etime = mesorder.ooentry_etime;
+                            oo.oorder_date = mesorder.oorder_date;
+                            oo.oorder_no = mesorder.oorder_no;
+                            item.subcontracting_list.Add(oo);
+                            item.kitting_time = mesorder.ooentry_etime;
+                            orderList.Add(mesorder);
+                            //2.生成采购申请
+                            //采购申请
+                            PackageSRMPR(item, bangid, sentrys);
                         }
-                        //1.先生成委外工单。
-                        var mesorder = CreateMesOOder(item, param.company_id, param.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
-                        item.subcontracting_qty = item.lack_qty;
-                        item.subcontracting_list = new List<ooder>();
-                        ooder oo = new ooder();
-                        oo.Id = mesorder.Id;
-                        oo.morder_production_number = mesorder.morder_production_number;
-                        oo.production_unit = mesorder.production_unit;
-                        oo.production_unit_code = mesorder.production_unit_code;
-                        oo.ooentry_prdname = mesorder.ooentry_prdname;
-                        oo.ooentry_stime = mesorder.ooentry_stime;
-                        oo.ooentry_etime = mesorder.ooentry_etime;
-                        oo.oorder_date = mesorder.oorder_date;
-                        oo.oorder_no = mesorder.oorder_no;
-                        item.subcontracting_list.Add(oo);
-                        item.kitting_time = mesorder.ooentry_etime;
-                        orderList.Add(mesorder);
-                        //2.生成采购申请
-                        //采购申请
-                        PackageSRMPR(item, bangid, sentrys);
                     }
                 }
                 else
@@ -1097,45 +1103,51 @@ namespace Business.ResourceExamineManagement
                         }
                         else if (sct.erp_cls == 3)
                         {
-                            //先找在途
-                            CalcInTransit(sentrys, sct, bangid, plan_date.GetValueOrDefault());
-                            if (sct.lack_qty > 0 && (param.checkflag || (!param.checkflag && param.checkPlan)))
+                            if (param.checkflag || param.checkPlan)
                             {
-                                //采购申请
-                                PackageSRMPR(sct, bangid, sentrys);
+                                //先找在途
+                                CalcInTransit(sentrys, sct, bangid, plan_date.GetValueOrDefault());
+                                if (sct.lack_qty > 0)
+                                {
+                                    //采购申请
+                                    PackageSRMPR(sct, bangid, sentrys);
+                                }
                             }
                         }
                         else if (sct.erp_cls == 2)
                         {
-                            //先找在途
-                            CalcInTransit(sentrys, sct, bangid, plan_date.GetValueOrDefault());
-                            if (sct.lack_qty > 0 && (param.checkflag || (!param.checkflag && param.checkPlan)))
+                            if (param.checkflag || param.checkPlan)
                             {
-                                //先计算末级数据的齐套时间。
-                                if (cilList.Count > 0)
+                                //先找在途
+                                CalcInTransit(sentrys, sct, bangid, plan_date.GetValueOrDefault());
+                                if (sct.lack_qty > 0)
                                 {
-                                    CalcIcitem(cilList, returnlist, bangid, sklist, plan_date, icitemlist, sentrys, childidList);
-                                    sct.kitting_time = cilList.Max(s => s.kitting_time);
+                                    //先计算末级数据的齐套时间。
+                                    if (cilList.Count > 0)
+                                    {
+                                        CalcIcitem(cilList, returnlist, bangid, sklist, plan_date, icitemlist, sentrys, childidList);
+                                        sct.kitting_time = cilList.Max(s => s.kitting_time);
+                                    }
+                                    //1.先生成委外工单。
+                                    var mesorder = CreateMesOOder(sct, param.company_id, param.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
+                                    sct.subcontracting_qty = sct.lack_qty;
+                                    sct.subcontracting_list = new List<ooder>();
+                                    ooder oo = new ooder();
+                                    oo.Id = mesorder.Id;
+                                    oo.morder_production_number = mesorder.morder_production_number;
+                                    oo.production_unit = mesorder.production_unit;
+                                    oo.production_unit_code = mesorder.production_unit_code;
+                                    oo.ooentry_prdname = mesorder.ooentry_prdname;
+                                    oo.ooentry_stime = mesorder.ooentry_stime;
+                                    oo.ooentry_etime = mesorder.ooentry_etime;
+                                    oo.oorder_date = mesorder.oorder_date;
+                                    oo.oorder_no = mesorder.oorder_no;
+                                    item.subcontracting_list.Add(oo);
+                                    sct.kitting_time = mesorder.ooentry_etime;
+                                    orderList.Add(mesorder);
+                                    //采购申请
+                                    PackageSRMPR(sct, bangid, sentrys);
                                 }
-                                //1.先生成委外工单。
-                                var mesorder = CreateMesOOder(sct, param.company_id, param.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
-                                sct.subcontracting_qty = sct.lack_qty;
-                                sct.subcontracting_list = new List<ooder>();
-                                ooder oo = new ooder();
-                                oo.Id = mesorder.Id;
-                                oo.morder_production_number = mesorder.morder_production_number;
-                                oo.production_unit = mesorder.production_unit;
-                                oo.production_unit_code = mesorder.production_unit_code;
-                                oo.ooentry_prdname = mesorder.ooentry_prdname;
-                                oo.ooentry_stime = mesorder.ooentry_stime;
-                                oo.ooentry_etime = mesorder.ooentry_etime;
-                                oo.oorder_date = mesorder.oorder_date;
-                                oo.oorder_no = mesorder.oorder_no;
-                                item.subcontracting_list.Add(oo);
-                                sct.kitting_time = mesorder.ooentry_etime;
-                                orderList.Add(mesorder);
-                                //采购申请
-                                PackageSRMPR(sct, bangid, sentrys);
                             }
                         }
                         else

+ 174 - 33
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -284,6 +284,7 @@ namespace Business.ResourceExamineManagement
         private ISqlRepository<PurOrdDetail> _purOrdDetail;
         private ISqlRepository<ItemPackMaster> _itemPackMaster;
         private ISqlRepository<GeneralizedCodeMaster> _generalizedCodeMaster;
+
         /// <summary>
         /// 生产排产
         /// </summary>
@@ -1024,7 +1025,7 @@ namespace Business.ResourceExamineManagement
             //拉取所有,然后根据送货周期来合并第一次得合并数据
             //List<srm_pr_main> prlist = _mysql_srm_pr_main.GetListAsync(s => s.state == 1 || s.state == 2).Result;
             //直接按间隔多少天一次来处理数据,定时任务按周四来考虑。
-            DateTime toTime = new DateTime(2023, 7, 6);
+            DateTime toTime = DateTime.Now; //new DateTime(2023, 7, 6);
             DateTime starttime = toTime.Date.AddDays(8);
             DateTime endtime = toTime.Date.AddDays(14);
             List<srm_pr_main> prlist = _mysql_srm_pr_main.GetListAsync(s => s.pr_ssend_date >= starttime && s.pr_ssend_date <= endtime && (s.state == 1 || s.state == 3)).Result;
@@ -1950,19 +1951,26 @@ namespace Business.ResourceExamineManagement
                     pOGroupDtos.Add(poDto);
                 }
                 item.state = 0;
-
                 srm_po_list podetail = new srm_po_list();
                 podetail.GenerateNewId(help.NextId());
                 podetail.pr_id = item.Id;
                 podetail.pr_billno = item.pr_billno;
+                var icitem = itemList.First(a => a.Id == item.icitem_id);
+                if (icitem == null)
+                {
+                    continue;
+                }
                 podetail.icitem_id = item.icitem_id;
-                podetail.ItemNum = itemList.First(a => a.Id == item.icitem_id).number;
-                podetail.icitem_name = item.icitem_name;
+                podetail.model = icitem.model;
+                podetail.ItemNum = icitem.number;
+                podetail.icitem_name = icitem.name;
                 podetail.qty = item.pr_aqty;
                 podetail.netprice = item.pr_price;
+                podetail.netmoney = item.pr_aqty.GetValueOrDefault() * item.pr_price.GetValueOrDefault();
                 podetail.rate = item.pr_rate;
                 podetail.price = item.pr_orderprice / item.pr_aqty;
                 podetail.total_price = item.pr_orderprice;
+                podetail.taxamount = item.pr_orderprice.GetValueOrDefault() - podetail.netmoney;
                 podetail.plan_qty = item.pr_aqty;
                 podetail.unit = item.pr_unit;
                 podetail.state = item.state;
@@ -2145,20 +2153,35 @@ namespace Business.ResourceExamineManagement
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
-        public async Task<string> PlanOrderResourceCheck()
+        public async Task<string> PlanOrderResourceCheck(string companyid)
         {
             /*List<string> workOrds = workOrd.Split(",").ToList();
             if (workOrds.Count == 0)
             {
                 return "";
             }*/
-            List<mes_morder> Mes_Morders = _mysql_mes_morder.GetListAsync(x => x.morder_type == "计划工单").Result;
+            if (string.IsNullOrEmpty(companyid))
+            {
+                return "当前任务公司编码为空,请检查。";
+            }
+
+            List<mes_morder> Mes_Morders = _mysql_mes_morder.GetListAsync(x => x.morder_type == "计划工单" && x.morder_state == "初始" && x.company_id == long.Parse(companyid)).Result;
+
             //先排除锁定期内的工单 //优先级排序
-            DateTime lookTime = DateTime.Now.Date.AddDays((double)8);
-            Mes_Morders = Mes_Morders.Where(s => s.moentry_sys_stime > lookTime).OrderBy(s => s.moentry_sys_stime).ToList();
+            var sysSet = _generalizedCodeMaster.Select(s => s.FldName == "SystemConfig" && s.Val == "WorkOrderLockPeriod" && s.Domain == companyid).ToList();
+            decimal lookDay = 0;
+            if (sysSet.Any())
+            {
+                //锁定期
+                lookDay = sysSet[0].UDeci1.GetValueOrDefault();
+            }
+            lookDay = lookDay == 0 ? 7 : lookDay;
+            DateTime lookTime = DateTime.Now.Date.AddDays((double)lookDay);
+            Mes_Morders = Mes_Morders.Where(s => s.moentry_sys_stime > lookTime || s.moentry_sys_stime == null).OrderBy(s => s.moentry_sys_stime).ToList();
 
             if (Mes_Morders.Any())
             {
+                Mes_Morders.ForEach(s => { s.moentry_sys_stime = DateTime.Now.Date.AddDays((double)lookDay + 1); });
                 List<string> monolist = Mes_Morders.Select(c => c.morder_no).ToList();
                 //清理PR的占用。
                 List<srm_po_occupy> occupy = await _mysql_srm_po_occupy.GetListAsync(s => monolist.Contains(s.morder_mo));
@@ -2173,7 +2196,7 @@ namespace Business.ResourceExamineManagement
             else {
                 return JsonConvert.SerializeObject("未查找到对应的计划工单,请联系管理员。");
             }
-            return JsonConvert.SerializeObject("ok");
+            return "ok";
         }
 
         /// <summary>
@@ -2181,7 +2204,7 @@ namespace Business.ResourceExamineManagement
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
-        public async Task<string> OrderResourceCheck(int day, string workOrd)
+        public async Task<string> OrderResourceCheck(int day, string workOrd, string companyid)
         {
             List<mes_morder> mo_Mes_Morders = new List<mes_morder>();
             if (day == 0)
@@ -2191,20 +2214,131 @@ namespace Business.ResourceExamineManagement
                 {
                     return "";
                 }
-                mo_Mes_Morders = _mysql_mes_morder.GetListAsync(x => workOrds.Contains(x.morder_no)).Result;
+                mo_Mes_Morders = _mysql_mes_morder.GetListAsync(x => companyid == x.company_id.ToString() && workOrds.Contains(x.morder_no)).Result;
+                //如果工单有今天和之前的,则提示不处理
+                if (mo_Mes_Morders.Where(s => s.moentry_sys_stime >= DateTime.Now.Date).Count() > 0)
+                {
+                    return "请选择开工时间在今天之后的工单。";
+                }
             }
             else
             {
-                mo_Mes_Morders = _mysql_mes_morder.GetListAsync(x => x.start_time > DateTime.Now.Date.AddDays(1) && x.start_time < DateTime.Now.Date.AddDays(day) && x.morder_state == MorderEnum.Xd_state && !x.IsDeleted).Result;
+                mo_Mes_Morders = _mysql_mes_morder.GetListAsync(x => companyid == x.company_id.ToString() && x.moentry_sys_stime > DateTime.Now.Date.AddDays(1) && x.moentry_sys_stime < DateTime.Now.Date.AddDays(day) && x.morder_state == MorderEnum.Initial_state && !x.IsDeleted).Result;
             }
+
+            List<mes_morder> checkMo = new List<mes_morder>();
             //只做库存是否齐套检查
             if (mo_Mes_Morders.Any())
             {
-                var rtn = await OrderKittingCheck(mo_Mes_Morders);
-                OrderResourceViewDto result = DataPackage(rtn);
-                result.DayBulletinBoardList = result.DayBulletinBoardList.OrderByDescending(d => d.day).ToList();
-                //保存检查结果
-                SaveExamineResult(result.KittingCheckResultList, result.DayBulletinBoardList, 1);
+                //检查工单是否已经下了领料单
+                var nbrList = _nbrMaster.Select(a => a.Domain == mo_Mes_Morders[0].factory_id.GetValueOrDefault().ToString() && a.Type == "SM" && mo_Mes_Morders.Select(c => c.morder_no).Contains(a.WorkOrd));
+                foreach (var mo in mo_Mes_Morders)
+                {
+                    //查出已产生领料单、过滤掉,取出未领料的工单
+                    var nbr = nbrList.Find(s => s.WorkOrd == mo.morder_no);
+                    if (nbr != null)
+                    {
+                        //完成时间到了
+                        if (nbr.EffDate.GetValueOrDefault().Date == DateTime.Now.Date)
+                        {
+                            //如果应完成日期,没有完成,则更新工单状态
+                            if (nbr.Ufld1 == "completed")
+                            {
+                                //工单状态为  “生产齐套”
+                                mo.MaterialSituation = "生产齐套";
+                            }
+                            else
+                            {
+                                //工单状态为  “备料滞后”
+                                mo.MaterialSituation = "备料滞后";
+                            }
+                        }
+                        //完成时间未到
+                        else if (nbr.EffDate.GetValueOrDefault().Date > DateTime.Now.Date)
+                        {
+                            //工单状态为  “备料中”
+                            mo.MaterialSituation = "备料中";
+                        }
+                        //完成时间已经过去,则不做处理
+                    }
+                    else {
+                        checkMo.Add(mo);
+                    }
+                }
+
+                string workords = "";
+
+                if (checkMo.Any())
+                {
+                    var rtn = await OrderKittingCheck(mo_Mes_Morders);
+                    if (rtn != null && rtn.examines != null)
+                    {
+                        var sysSet = _generalizedCodeMaster.Select(s => s.FldName == "SystemConfig" && s.Val == "WorkOrderLockPeriod" && s.Domain == companyid).ToList();
+                        decimal lookDay = 0;
+                        if (sysSet.Any())
+                        {
+                            //锁定期
+                            lookDay = sysSet[0].UDeci1.GetValueOrDefault();
+                        }
+                        lookDay = lookDay == 0 ? 7 : lookDay;
+                        DateTime lookTime = DateTime.Now.Date.AddDays((double)lookDay);
+                        //循环处理工单
+                        foreach (var cmo in checkMo)
+                        {
+                            bool flag = true;
+                            var exm = rtn.examines.Find(s => s.morder_no == cmo.morder_no);
+                            if (exm != null && exm.BomChildExamineList != null && exm.BomChildExamineList.Any())
+                            {
+                                foreach (var bce in exm.BomChildExamineList)
+                                {
+                                    //如果有缺料
+                                    if (bce.is_use && bce.stock_state == 0)
+                                    {
+                                        //如果当前数据没有子级,则代表原材料
+                                        if (exm.BomChildExamineList.Where(s => s.parent_id == bce.fid).Count() == 0)
+                                        {
+                                            flag = false;
+                                            break;
+                                        }
+                                    }
+                                }
+                            }
+                            else
+                            {
+                                flag = false;
+                            }
+                            if (flag)
+                            {
+                                //锁定期内生产备料单,并且更新为备料中,锁定期外的则更新成仓库齐套。
+                                if (cmo.moentry_sys_stime.GetValueOrDefault().Date <= lookTime)
+                                {
+                                    //生成领料单
+                                    workords += "," + cmo.morder_no;
+                                    cmo.MaterialSituation = "备料中";
+                                    cmo.morder_state = MorderEnum.Xd_state;
+                                }
+                                else {
+                                    cmo.MaterialSituation = "仓库齐套";
+                                }
+                            }
+                            else
+                            {
+                                //工单状态为  “仓库不齐套”
+                                cmo.MaterialSituation = "仓库不齐套";
+                            }
+                        }
+                    }
+                    /*OrderResourceViewDto result = DataPackage(rtn);
+                    result.DayBulletinBoardList = result.DayBulletinBoardList.OrderByDescending(d => d.day).ToList();
+                    //保存检查结果
+                    SaveExamineResult(result.KittingCheckResultList, result.DayBulletinBoardList, 1);*/
+                }
+                _businessDbContext.BulkUpdate(mo_Mes_Morders);
+                if (workords.Length > 0)
+                {
+                    workords = workords.Substring(1, workords.Length - 1);
+                    await CreatePickBill(workords);
+                }
                 return JsonConvert.SerializeObject("ok");
             }
             else {
@@ -2420,9 +2554,9 @@ namespace Business.ResourceExamineManagement
 
             List<mo_mes_moentry> mo_Mes_Moentries = _mes_moentry.GetManyByCondition(x=> mo_Mes_Morders.Select(s => s.id).Contains(x.moentry_moid.Value)).Result;*/
 
+            var morderIdList = mo_Mes_Morders.Select(s => s.Id).ToList();
 
-
-            List<mes_moentry> mo_Mes_Moentries = _mysql_mes_moentry.GetListAsync(x => mo_Mes_Morders.Select(s => s.Id).Contains(x.moentry_moid.Value)).Result;
+            List<mes_moentry> mo_Mes_Moentries = _mysql_mes_moentry.GetListAsync(x => morderIdList.Contains(x.moentry_moid.Value)).Result;
 
             //获取订单行数据
             List<crm_seorderentry> sentrys = _mysql_crm_seorderentry.GetListAsync(p => p.company_id == input.company_id && p.factory_id == input.factoryId && !p.IsDeleted && mo_Mes_Moentries.Select(x => x.soentry_id).Contains(p.Id)).Result;
@@ -2547,8 +2681,14 @@ namespace Business.ResourceExamineManagement
                 //获取工单数据
                 var workOrdMasters = _workOrdMaster.Select(p => mo_Mes_Morders.Select(c=>c.morder_no).Contains(p.WorkOrd));
                 workOrdMasters.ForEach(s => {
-                    s.OrdDate = DateTime.Now.Date.AddDays(14);//锁定期
-                    s.DueDate = DateTime.Now.Date.AddDays(14);
+                    var mo = mo_Mes_Morders.Find(m => m.morder_no == s.WorkOrd);
+                    if (mo != null)
+                    {
+                        //锁定期
+                        s.OrdDate = mo.moentry_sys_stime;
+                        s.DueDate = mo.moentry_sys_stime;
+                    }
+                    
                 });
                 //优先级排序
                 workOrdMasters = workOrdMasters.OrderBy(s => s.OrdDate).ToList();
@@ -2938,23 +3078,23 @@ namespace Business.ResourceExamineManagement
             AutoCreateBomBill();
         }
 
-        public async Task AutoCreatePickBill(List<string> workOrds, List<PeriodSequenceDet> dbPeriodSequences, List<NbrMaster> nbrMasterList, List<NbrDetail> nbrDetailList)
+        public async Task AutoCreatePickBill(List<WorkOrdMaster> workOrdMasters, List<PeriodSequenceDet> dbPeriodSequences, List<NbrMaster> nbrMasterList, List<NbrDetail> nbrDetailList)
         {
             if (dbPeriodSequences.Any())
             {
                 //按照工单领料,一个工单一个领料单,之前是按照排产日期和产线分别领料
-                foreach (var workord in workOrds)
+                foreach (var workord in workOrdMasters)
                 {
                     Dictionary<string, decimal> dictItemQty = new Dictionary<string, decimal>();
-                    List<string> lines = dbPeriodSequences.Where(a => a.WorkOrds == workord).Select(a => a.Line).Distinct().ToList();
+                    List<string> lines = dbPeriodSequences.Where(a => a.WorkOrds == workord.WorkOrd).Select(a => a.Line).Distinct().ToList();
                     List<LineMaster> lineMasters = _lineMaster.Select(p => lines.Contains(p.Line) && p.Domain == "1001" && p.IsActive);
-                    List<ProductStructureMaster> itemList = GetProductStructure(dbPeriodSequences.First(a => a.WorkOrds == workord).ItemNum);
+                    List<ProductStructureMaster> itemList = GetProductStructure(dbPeriodSequences.First(a => a.WorkOrds == workord.WorkOrd).ItemNum);
                     var childrenList = itemList.Select(a => a.ComponentItem).Distinct().ToList();
                     List<ItemMaster> itemLocList = _itemMaster.Select(p => childrenList.Contains(p.ItemNum) && p.Domain == "1001" && p.IsActive).Distinct().ToList();
                     List<ItemPackMaster> itemPackList = _itemPackMaster.Select(p => childrenList.Contains(p.ItemNum) && p.Domain == "1001" && p.IsActive).Distinct().ToList();
                     var Nbr = GetMaxSerialNumber(417416915624005);
                     //根据某一产线汇总即该工单的总数
-                    decimal QtyOrdSum = dbPeriodSequences.Where(a => a.WorkOrds == workord && a.Line == lines[0]).Sum(a => a.OrdQty.GetValueOrDefault());
+                    decimal QtyOrdSum = dbPeriodSequences.Where(a => a.WorkOrds == workord.WorkOrd && a.Line == lines[0]).Sum(a => a.OrdQty.GetValueOrDefault());
                     string LocationTo= lineMasters.FirstOrDefault()?.Location;
                     nbrMasterList.Add(new NbrMaster
                     {
@@ -2962,10 +3102,11 @@ namespace Business.ResourceExamineManagement
                         Type = "SM",
                         Nbr = Nbr,
                         Remark = "下达自动领料",
-                        Date = dbPeriodSequences.Where(a => a.WorkOrds == workord).Min(a => a.PlanDate),
+                        Date = dbPeriodSequences.Where(a => a.WorkOrds == workord.WorkOrd).Min(a => a.PlanDate),
                         //ProdLine = item.Line,
+                        EffDate = workord.OrdDate.GetValueOrDefault().Date.AddDays(-1),
                         Status = "",
-                        WorkOrd = workord,
+                        WorkOrd = workord.WorkOrd,
                         QtyOrd = QtyOrdSum,
                         IsActive = true,
                         IsChanged = true,
@@ -2999,7 +3140,7 @@ namespace Business.ResourceExamineManagement
                                 QtyTo = 0,
                                 LocationFrom = LocationFrom,
                                 LocationTo = LocationTo,//现在这几条线是同一线边仓,暂时不考虑多个线边仓
-                                WorkOrd = workord,
+                                WorkOrd = workord.WorkOrd,
                                 QtyOrd = QtyOrdSum * a.Qty,
                                 CurrQtyOpened = QtyOrdSum * a.Qty,
                                 Line = i,
@@ -3040,11 +3181,11 @@ namespace Business.ResourceExamineManagement
                     //没有维护备料提前期,默认取7天
                     if (leadTimes > 0)
                     {
-                        nbrMasterList.First(a => a.Nbr == Nbr).Date = dbPeriodSequences.Where(a => a.WorkOrds == workord).Min(a => a.PlanDate).GetValueOrDefault().AddDays(-1 * Convert.ToDouble(leadTimes));
+                        nbrMasterList.First(a => a.Nbr == Nbr).Date = dbPeriodSequences.Where(a => a.WorkOrds == workord.WorkOrd).Min(a => a.PlanDate).GetValueOrDefault().AddDays(-1 * Convert.ToDouble(leadTimes));
                     }
                     else
                     {
-                        nbrMasterList.First(a => a.Nbr == Nbr).Date = dbPeriodSequences.Where(a => a.WorkOrds == workord).Min(a => a.PlanDate).GetValueOrDefault().AddDays(-7);
+                        nbrMasterList.First(a => a.Nbr == Nbr).Date = dbPeriodSequences.Where(a => a.WorkOrds == workord.WorkOrd).Min(a => a.PlanDate).GetValueOrDefault().AddDays(-7);
                     }
                     //TODO:
                     //因为我们并没有模拟发料的过程,在自动生成领料单的时候就要扣减库存,实际业务不能这么做。
@@ -3255,7 +3396,7 @@ namespace Business.ResourceExamineManagement
             var ords = workOrdMasters.Select(p => p.WorkOrd).ToList();
 
             dbPeriodSequences = dbPeriodSequences.Where(p => ords.Contains(p.WorkOrds)).ToList();
-            await AutoCreatePickBill(ords, dbPeriodSequences, nbrMasterList, nbrDetailList);
+            await AutoCreatePickBill(workOrdMasters, dbPeriodSequences, nbrMasterList, nbrDetailList);
             if (nbrMasterList.Any())
             {
                 dbPeriodSequences.ForEach(p => { p.Status = "r"; });
@@ -3295,7 +3436,7 @@ namespace Business.ResourceExamineManagement
                     }
                 }
             }
-            return "";
+            return "ok";
         }
 
 

+ 4 - 0
MicroServices/Business/Business.Domain/Business.Domain.csproj

@@ -34,4 +34,8 @@
     <ProjectReference Include="..\Business.Core\Business.Core.csproj" />
   </ItemGroup>
 
+  <ItemGroup>
+    <Folder Include="StructuredDB\Sys\" />
+  </ItemGroup>
+
 </Project>

+ 7 - 0
MicroServices/Business/Business.Domain/MongoDB/Production/mo_mes_morder.cs

@@ -304,6 +304,13 @@ namespace Business.Domain
         [StringLength(100)]
         [Comment("工单批号--(批号管理的物料出入库要使用)")]
         public string? morder_batchno { get; set; }
+
+        /// <summary>
+        /// 物料情况
+        /// </summary>
+        [StringLength(50)]
+        [Comment("物料情况")]
+        public string? MaterialSituation { get; set; }
         /// <summary>
         /// 下达日期
         /// </summary>

+ 15 - 0
MicroServices/Business/Business.Domain/MongoDB/SRM/mo_srm_po_list.cs

@@ -130,6 +130,21 @@ namespace Business.Domain
         [Precision(23, 10)]
         [Comment("净价")]
         public decimal? netprice { get; set; }
+
+        /// <summary>
+        /// 净金额
+        /// </summary>
+        [Precision(23, 10)]
+        [Comment("净金额")]
+        public decimal? netmoney { get; set; }
+
+        /// <summary>
+        /// 税额
+        /// </summary>
+        [Precision(23, 10)]
+        [Comment("税额")]
+        public decimal? taxamount { get; set; }
+
         /// <summary>
         /// 税率
         /// </summary>

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

@@ -63,6 +63,12 @@ namespace Business.Domain
         [Comment("是否有效")]
         public bool IsConfirm { get; set; }
 
+        /// <summary>
+        /// 数值1
+        /// </summary>
+        [Comment("数值1")]
+        public decimal? UDeci1 { get; set; }
+
         /// <summary>
         /// 创建时间
         /// </summary>

+ 12 - 0
MicroServices/Business/Business.Domain/StructuredDB/MES/IC/NbrMaster.cs

@@ -57,6 +57,12 @@ namespace Business.Domain
         [Comment("状态")]
         public string Status { get; set; }
 
+        /// <summary>
+        /// 前处理状态
+        /// </summary>
+        [Comment("前处理状态")]
+        public string Ufld1 { get; set; }
+
         /// <summary>
         /// 工单
         /// </summary>
@@ -106,6 +112,12 @@ namespace Business.Domain
         [Comment("备料人")]
         public string User1 { get; set; }
 
+        /// <summary>
+        /// 完成日期
+        /// </summary>
+        [Comment("完成日期")]
+        public DateTime? EffDate { get; set; }
+
         /// <summary>
         /// 创建时间
         /// </summary>

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

@@ -306,6 +306,12 @@ namespace Business.Domain
         [Comment("工单批号--(批号管理的物料出入库要使用)")]
         public string morder_batchno { get; set; }
         /// <summary>
+        /// 物料情况
+        /// </summary>
+        [StringLength(50)]
+        [Comment("物料情况")]
+        public string? MaterialSituation { get; set; }
+        /// <summary>
         /// 下达日期
         /// </summary>
         [Comment("下达日期")]

+ 15 - 0
MicroServices/Business/Business.Domain/StructuredDB/SRM/srm_po_list.cs

@@ -134,6 +134,21 @@ namespace Business.Domain
         [Precision(23, 10)]
         [Comment("净价")]
         public decimal? netprice { get; set; }
+
+        /// <summary>
+        /// 净金额
+        /// </summary>
+        [Precision(23, 10)]
+        [Comment("净金额")]
+        public decimal? netmoney { get; set; }
+
+        /// <summary>
+        /// 税额
+        /// </summary>
+        [Precision(23, 10)]
+        [Comment("税额")]
+        public decimal? taxamount { get; set; }
+
         /// <summary>
         /// 税率
         /// </summary>

+ 5 - 4
MicroServices/Business/Business.HttpApi/Controllers/ResourceExamineController.cs

@@ -7,6 +7,7 @@ using Newtonsoft.Json;
 using Org.BouncyCastle.Asn1.Ocsp;
 using System;
 using System.Collections.Generic;
+using System.ComponentModel.Design;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -73,9 +74,9 @@ namespace Business.Controllers
         /// <returns></returns>
         [HttpGet]
         [Route("orderresourcecheck")]
-        public Task<string> OrderResourceCheck(int day, string workOrd)
+        public Task<string> OrderResourceCheck(int day, string workOrd, string companyid)
         {
-            return _ResourceExamineAppService.OrderResourceCheck(day, workOrd);
+            return _ResourceExamineAppService.OrderResourceCheck(day, workOrd, companyid);
         }
 
         /// <summary>
@@ -97,9 +98,9 @@ namespace Business.Controllers
         /// <returns></returns>
         [HttpPost]
         [Route("PlanOrderResourceCheck")]
-        public Task<string> PlanOrderResourceCheck()
+        public Task<string> PlanOrderResourceCheck(string companyid)
         {
-            return _ResourceExamineAppService.PlanOrderResourceCheck();
+            return _ResourceExamineAppService.PlanOrderResourceCheck(companyid);
         }
         /// <summary>
         /// BOM清单批量预处理