瀏覽代碼

代码提交

zhengly 3 年之前
父節點
當前提交
06cab51a54

+ 36 - 34
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -439,7 +439,7 @@ namespace Business.ResourceExamineManagement
                 throw new NotImplementedException("订单数据不存在!");
                 throw new NotImplementedException("订单数据不存在!");
             }
             }
             //获取订单行数据
             //获取订单行数据
-            List<crm_seorderentry> sentrys =await _mysql_crm_seorderentry.GetListAsync(p => p.tenant_id == input.tenantId && p.factory_id == input.factoryId && p.seorder_id == input.sorderId && p.IsDeleted == false);
+            List<crm_seorderentry> sentrys = await _mysql_crm_seorderentry.GetListAsync(p => p.tenant_id == input.tenantId && p.factory_id == input.factoryId && p.seorder_id == input.sorderId && p.IsDeleted == false);
 
 
             //数据库快照-同步mysql库数据到mongoDB中
             //数据库快照-同步mysql库数据到mongoDB中
             //await SyncData(input.tenantId, input.factoryId, bangid);
             //await SyncData(input.tenantId, input.factoryId, bangid);
@@ -454,9 +454,9 @@ namespace Business.ResourceExamineManagement
 
 
             //通过订单行获取物料BOM数据
             //通过订单行获取物料BOM数据
             FilterDefinition<ic_bom> filter = Builders<ic_bom>.Filter.In(s => s.bom_number, sentrys.Select(m => m.bom_number).ToList());
             FilterDefinition<ic_bom> filter = Builders<ic_bom>.Filter.In(s => s.bom_number, sentrys.Select(m => m.bom_number).ToList());
-            List<ic_bom> boms = _ic_bom.GetManyByIds(filter).Result.Where(p=>p.factory_id == input.factoryId && p.tenant_id == input.tenantId && !p.IsDeleted).ToList();
+            List<ic_bom> boms = _ic_bom.GetManyByIds(filter).Result.Where(p => p.factory_id == input.factoryId && p.tenant_id == input.tenantId && !p.IsDeleted).ToList();
             //计算产品提前期
             //计算产品提前期
-            List<ICItemLeadTimeDto> leadTimes = GetLeadTime(boms.Select(p=>p.icitem_id).ToList(), input.tenantId, input.factoryId);
+            List<ICItemLeadTimeDto> leadTimes = GetLeadTime(boms.Select(p => p.icitem_id).ToList(), input.tenantId, input.factoryId);
             foreach (var o in sentrys)
             foreach (var o in sentrys)
             {
             {
                 var childBom = boms.Where(p => p.bom_number == o.bom_number).FirstOrDefault();
                 var childBom = boms.Where(p => p.bom_number == o.bom_number).FirstOrDefault();
@@ -478,7 +478,7 @@ namespace Business.ResourceExamineManagement
                 calcTest(getBomList, bangid, o.Id, o.qty.Value, input, o.plan_date);
                 calcTest(getBomList, bangid, o.Id, o.qty.Value, input, o.plan_date);
 
 
                 //TODO:最晚开始时间
                 //TODO:最晚开始时间
-                var curFacDtl = leadTimes.FirstOrDefault(p=>p.item_id == childBom.icitem_id);
+                var curFacDtl = leadTimes.FirstOrDefault(p => p.item_id == childBom.icitem_id);
                 //最晚开工时间=订单行客户要求交期-运输提前期-库存提前期-生产提前期-下单提前期
                 //最晚开工时间=订单行客户要求交期-运输提前期-库存提前期-生产提前期-下单提前期
                 dtl.latest_times = o.plan_date.GetValueOrDefault().AddDays(-Convert.ToDouble(curFacDtl?.transportation_leadtime.GetValueOrDefault() + curFacDtl?.stock_leadtime.GetValueOrDefault() + curFacDtl?.production_leadtime.GetValueOrDefault() + curFacDtl?.order_leadtime.GetValueOrDefault()));
                 dtl.latest_times = o.plan_date.GetValueOrDefault().AddDays(-Convert.ToDouble(curFacDtl?.transportation_leadtime.GetValueOrDefault() + curFacDtl?.stock_leadtime.GetValueOrDefault() + curFacDtl?.production_leadtime.GetValueOrDefault() + curFacDtl?.order_leadtime.GetValueOrDefault()));
                 //物料齐套时间
                 //物料齐套时间
@@ -800,54 +800,56 @@ namespace Business.ResourceExamineManagement
             return takeTime;
             return takeTime;
         }
         }
 
 
+
         /// <summary>
         /// <summary>
         /// 生成工单
         /// 生成工单
         /// </summary>
         /// </summary>
-        /// <param name="BomNumber">Bom编码</param>
-        /// <param name="Quantity">需要数量</param>
-        /// <param name="DeliverDate">交付日期</param>
-        /// <param name="seorderentry_id">销售订单子表ID</param>
-        /// <returns></returns>
-        public void GenerateMorder(crm_seorderentry seorderentry, decimal? Quantity)
+        /// <param name="seorderentry">销售订单子表</param>
+        /// <param name="BomNumber">Bom编号</param>
+        /// <param name="number">物料编码</param>
+        /// <param name="Quantity"></param>
+        /// <param name="ParentId"></param>
+        public void GenerateMorder(crm_seorderentry seorderentry, string BomNumber, string number, decimal? Quantity, long? ParentId)
         {
         {
             //1.库存、在制工单检查完成后 当前BOM需要自制时 产生工单。
             //1.库存、在制工单检查完成后 当前BOM需要自制时 产生工单。
 
 
             //2.每一个销售订单行对应一个工单。
             //2.每一个销售订单行对应一个工单。
-            //查询销售订单子表数据
-            //var seorderentry = await _mysql_crm_seorderentry.FindAsync(x => x.Id == seorderentry_id);
+            //TODO:考虑性能问题 循环调用,后期改造传递数组,批量处理数据后,批量保存。
             //获取销售订单信息
             //获取销售订单信息
             var seorder = _mysql_crm_seorder.FindAsync(x => x.Id == seorderentry.seorder_id).Result;
             var seorder = _mysql_crm_seorder.FindAsync(x => x.Id == seorderentry.seorder_id).Result;
             //物料BOM
             //物料BOM
-            // var ic_bom = _ic_bom.GetManyByCondition(x => x.bom_number == seorderentry.bom_number && x.factory_id == seorderentry.factory_id).Result.FirstOrDefault();
-
-            var ic_bom = _ic_bom.GetManyByCondition(x => x.bom_number == seorderentry.bom_number).Result.FirstOrDefault();
-
-            var Number = seorderentry.qty - Quantity;
+            //var ic_bom = _ic_bom.GetManyByCondition(x => x.bom_number == BomNumber && x.factory_id == seorderentry.factory_id).Result.FirstOrDefault();
+            //物料详情
+            var ic_item = _ic_item.GetManyByCondition(x => x.number == number && x.factory_id == seorderentry.factory_id).Result.FirstOrDefault();
 
 
             mes_morder mes_Morder = new mes_morder();
             mes_morder mes_Morder = new mes_morder();
             mes_Morder.GenerateNewId();
             mes_Morder.GenerateNewId();
             mes_Morder.morder_type = "销售工单";
             mes_Morder.morder_type = "销售工单";
+            mes_Morder.parent_id = ParentId;
             //mes_Morder.morder_icitem_type
             //mes_Morder.morder_icitem_type
             mes_Morder.work_order_type = "常规工单";
             mes_Morder.work_order_type = "常规工单";
             mes_Morder.morder_state = "初始";
             mes_Morder.morder_state = "初始";
             mes_Morder.morder_no = string.Format("VMO{0}", DateTime.Now.ToString("yyyyMMddhhmmss"));//测试编码
             mes_Morder.morder_no = string.Format("VMO{0}", DateTime.Now.ToString("yyyyMMddhhmmss"));//测试编码
-            mes_Morder.fms_number = seorderentry.fms_number;
-            mes_Morder.bom_number = seorderentry.bom_number;
-            mes_Morder.fmodel = seorderentry.specification;
+            mes_Morder.fms_number = ic_item.fms_number;
+            mes_Morder.bom_number = BomNumber;
+            mes_Morder.fmodel = ic_item.model;
             //最早的开工时间3天后、 最晚时间为订单承诺时间-采购提前期-质检提前期-入库提前期-发料提前期 =最晚开工时间  最早或最晚为系统建议开工日期
             //最早的开工时间3天后、 最晚时间为订单承诺时间-采购提前期-质检提前期-入库提前期-发料提前期 =最晚开工时间  最早或最晚为系统建议开工日期
             //根绝系统配置参数 取最早或者最晚开始日期
             //根绝系统配置参数 取最早或者最晚开始日期
             var StartDate = DateTime.Now.Date.AddDays(3);
             var StartDate = DateTime.Now.Date.AddDays(3);
             mes_Morder.moentry_sys_stime = StartDate;
             mes_Morder.moentry_sys_stime = StartDate;
-            var ProductiveDate = ProductiveExamine(ic_bom.bom_number, (int)(Number.Value));
-            //系统建议完工日期为 开工日期+产能检查时间=完工日期
-            var Day = ProductiveDate.Result / (60 * 10); //返回的分钟除以十个小时得出工作天数;
-            mes_Morder.moentry_sys_etime = StartDate.AddDays((double)Day);
-            mes_Morder.morder_need_time = ProductiveDate.Result;
+            if (!string.IsNullOrEmpty(BomNumber))
+            {
+                var ProductiveDate = ProductiveExamine(BomNumber, (int)(Quantity.Value));
+                //系统建议完工日期为 开工日期+产能检查时间=完工日期
+                var Day = ProductiveDate.Result / (60 * 10); //返回的分钟除以十个小时得出工作天数;
+                mes_Morder.moentry_sys_etime = StartDate.AddDays((double)Day);
+                mes_Morder.morder_need_time = ProductiveDate.Result;
+            }
             mes_Morder.moentry_startup_status = 0;
             mes_Morder.moentry_startup_status = 0;
             mes_Morder.tenant_id = seorderentry.tenant_id;
             mes_Morder.tenant_id = seorderentry.tenant_id;
             mes_Morder.factory_id = seorderentry.factory_id;
             mes_Morder.factory_id = seorderentry.factory_id;
-            mes_Morder.product_code = seorderentry.item_number;
-            mes_Morder.product_name = seorderentry.item_name;
+            mes_Morder.product_code = number;
+            mes_Morder.product_name = ic_item.name;
             mes_Morder.project_name = seorder.project_name;
             mes_Morder.project_name = seorder.project_name;
             mes_Morder.planner_num = seorderentry.planner_no;
             mes_Morder.planner_num = seorderentry.planner_no;
             mes_Morder.planner_name = seorderentry.planner_name;
             mes_Morder.planner_name = seorderentry.planner_name;
@@ -860,9 +862,9 @@ namespace Business.ResourceExamineManagement
             mes_Morder.moentry_wrkcname = null;
             mes_Morder.moentry_wrkcname = null;
             mes_Morder.picking_qty = 0;
             mes_Morder.picking_qty = 0;
             //TODO:可删除主表字段
             //TODO:可删除主表字段
-            mes_Morder.unit = seorderentry.unit;
-            mes_Morder.morder_production_number = Number;
-            mes_Morder.need_number = Number;
+            mes_Morder.unit = ic_item.unit;
+            mes_Morder.morder_production_number = Quantity;
+            mes_Morder.need_number = Quantity;
             mes_Morder.remaining_number = 0;
             mes_Morder.remaining_number = 0;
             //生成工单子表数据
             //生成工单子表数据
             mes_moentry mes_Moentry = new mes_moentry();
             mes_moentry mes_Moentry = new mes_moentry();
@@ -872,9 +874,9 @@ namespace Business.ResourceExamineManagement
             mes_Moentry.soentry_id = seorderentry.Id;
             mes_Moentry.soentry_id = seorderentry.Id;
             mes_Moentry.fbill_no = seorderentry.bill_no;
             mes_Moentry.fbill_no = seorderentry.bill_no;
             mes_Moentry.fentry_id = seorderentry.entry_seq.Value;
             mes_Moentry.fentry_id = seorderentry.entry_seq.Value;
-            mes_Moentry.unit = seorderentry.unit;
-            mes_Moentry.morder_production_number = Number;
-            mes_Moentry.need_number = Number;
+            mes_Moentry.unit = ic_item.unit;
+            mes_Moentry.morder_production_number = Quantity;
+            mes_Moentry.need_number = Quantity;
             mes_Moentry.remaining_number = 0;
             mes_Moentry.remaining_number = 0;
             mes_Moentry.factory_id = seorderentry.factory_id;
             mes_Moentry.factory_id = seorderentry.factory_id;
             //using (TransactionScope scope = new TransactionScope())
             //using (TransactionScope scope = new TransactionScope())
@@ -2050,7 +2052,7 @@ namespace Business.ResourceExamineManagement
             //ToDo:企业Id,数据状态过滤以及isdeleted
             //ToDo:企业Id,数据状态过滤以及isdeleted
             var po_list = _srm_po_list.Find(p => returnlist.Select(x => x.item_id).Contains(p.icitem_id.Value) && p.tenant_id == tenantId && p.factory_id == factoryid && p.rarrdate >= DateTime.Now && p.rarrdate < deliveryDate && !p.IsDeleted).Result;
             var po_list = _srm_po_list.Find(p => returnlist.Select(x => x.item_id).Contains(p.icitem_id.Value) && p.tenant_id == tenantId && p.factory_id == factoryid && p.rarrdate >= DateTime.Now && p.rarrdate < deliveryDate && !p.IsDeleted).Result;
             var itemlist = new List<ICItemDateDto>();//需要生成采购申请单的物料信息
             var itemlist = new List<ICItemDateDto>();//需要生成采购申请单的物料信息
-            var leadTimeList = GetLeadTime(returnlist.Select(p=>p.item_id).ToList(), tenantId, factoryid);//提前期列表
+            var leadTimeList = GetLeadTime(returnlist.Select(p => p.item_id).ToList(), tenantId, factoryid);//提前期列表
             var supplierList = GetSupplier(returnlist, tenantId, factoryid);//供应商列表
             var supplierList = GetSupplier(returnlist, tenantId, factoryid);//供应商列表
             var planList = GetICPlan(returnlist, tenantId, factoryid);//plan列表
             var planList = GetICPlan(returnlist, tenantId, factoryid);//plan列表
             foreach (var item in returnlist)
             foreach (var item in returnlist)