|
|
@@ -444,6 +444,8 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
+
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 资源检查
|
|
|
/// </summary>
|
|
|
@@ -453,7 +455,6 @@ namespace Business.ResourceExamineManagement
|
|
|
public async Task<string> ReceiveResult(ResourceCheckInputDto input)
|
|
|
{
|
|
|
//资源检查入参全局变量赋值
|
|
|
- param.sorderId = input.sorderId;
|
|
|
param.tenantId = input.tenantId;
|
|
|
param.factoryId = input.factoryId;
|
|
|
param.checkflag = true;
|
|
|
@@ -468,15 +469,15 @@ namespace Business.ResourceExamineManagement
|
|
|
//生成当前计算bangid
|
|
|
long bangid = help.NextId();
|
|
|
//获取订单数据
|
|
|
- crm_seorder sorder = _mysql_crm_seorder.GetListAsync(p => p.tenant_id == input.tenantId && p.factory_id == input.factoryId && p.Id == input.sorderId && !p.IsDeleted).Result.FirstOrDefault();
|
|
|
- if (sorder == null)
|
|
|
+ List<crm_seorder> sorders = _mysql_crm_seorder.GetListAsync(p => p.tenant_id == input.tenantId && p.factory_id == input.factoryId && input.sorderId.Contains(p.Id) && !p.IsDeleted).Result;
|
|
|
+ if (!sorders.Any())
|
|
|
{
|
|
|
new NLogHelper("ResourceExamineAppService").WriteLog("ReceiveResult", "订单数据不存在", _currentTenant.Id.ToString());
|
|
|
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);
|
|
|
+ List<crm_seorderentry> sentrys = await _mysql_crm_seorderentry.GetListAsync(p => p.tenant_id == input.tenantId && p.factory_id == input.factoryId && input.sorderId.Contains(p.seorder_id.GetValueOrDefault()) && !p.IsDeleted);
|
|
|
|
|
|
//删除同步Mysql后旧数据
|
|
|
await DeleteMySqlOldData(sentrys);
|
|
|
@@ -509,52 +510,64 @@ namespace Business.ResourceExamineManagement
|
|
|
pretreatments = _mysql_b_bom_pretreatment.GetListAsync(s => boms.Select(c => c.mysql_id).ToList().Contains(s.sourceid)).Result;
|
|
|
}
|
|
|
|
|
|
- DataInitialization(boms, bangid, sorder, icitemlist, stocklist, pretreatments);
|
|
|
- foreach (var item in sentrys)
|
|
|
- {
|
|
|
- //获取销售订单“是否加急”字段
|
|
|
- int urgent = sorder.urgent;
|
|
|
-
|
|
|
- //工单资源检查信息
|
|
|
- dtl = new ExamineResult();
|
|
|
- dtl.sorderid = rtn.sorderid;
|
|
|
- dtl.bill_no = sorder.bill_no;
|
|
|
- dtl.sentry_id = item.Id;
|
|
|
- dtl.entry_seq = item.entry_seq;
|
|
|
- dtl.need_qty = item.qty.GetValueOrDefault();
|
|
|
- dtl.need_time = item.plan_date;
|
|
|
- //获取当前物料bom数据
|
|
|
- var childBom = boms.Where(p => p.item_number == item.item_number).FirstOrDefault();
|
|
|
- dtl.bom_number = childBom.bom_number;
|
|
|
-
|
|
|
- var itemPrelist = pretreatments.Where(s => s.sourceid == childBom.mysql_id).ToList();
|
|
|
- if (!itemPrelist.Any())
|
|
|
+ DataInitialization(boms, bangid, icitemlist, stocklist, pretreatments);
|
|
|
+ foreach (var sorder in sorders)
|
|
|
+ {
|
|
|
+ param.sorderId = sorder.Id;
|
|
|
+ param.tenantId = input.tenantId;
|
|
|
+ param.factoryId = input.factoryId;
|
|
|
+ param.checkflag = true;
|
|
|
+ _morderAppService.param = param;
|
|
|
+ _purchaseOrderAppService.param = param;
|
|
|
+ _CalcBomViewAppService.param = param;
|
|
|
+ _CalcBomViewAppService.seorder = sorder;//销售订单
|
|
|
+ foreach (var item in sentrys)
|
|
|
{
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- var getBomList = ObjectMapper.Map<List<b_bom_pretreatment>, List<BomChildExamineDto>>(itemPrelist);
|
|
|
-
|
|
|
- getBomList.ForEach(s => s.sentry_id = item.Id);
|
|
|
- //库存初始化
|
|
|
- _CalcBomViewAppService.BomStock(getBomList, stocklist, bangid);
|
|
|
- //计算
|
|
|
- _CalcBomViewAppService.CalcView(getBomList, bangid, item.qty.GetValueOrDefault(), item.plan_date, sklist, item, urgent, icitemlist);
|
|
|
+ //获取销售订单“是否加急”字段
|
|
|
+ int urgent = sorder.urgent;
|
|
|
+
|
|
|
+ //工单资源检查信息
|
|
|
+ dtl = new ExamineResult();
|
|
|
+ dtl.sorderid = sorder.Id;
|
|
|
+ dtl.bill_no = sorder.bill_no;
|
|
|
+ dtl.sentry_id = item.Id;
|
|
|
+ dtl.entry_seq = item.entry_seq;
|
|
|
+ dtl.need_qty = item.qty.GetValueOrDefault();
|
|
|
+ dtl.need_time = item.plan_date;
|
|
|
+ //获取当前物料bom数据
|
|
|
+ var childBom = boms.Where(p => p.item_number == item.item_number).FirstOrDefault();
|
|
|
+ dtl.bom_number = childBom.bom_number;
|
|
|
+
|
|
|
+ var itemPrelist = pretreatments.Where(s => s.sourceid == childBom.mysql_id).ToList();
|
|
|
+ if (!itemPrelist.Any())
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
- //TODO:最晚开始时间
|
|
|
- var curFacDtl = leadTimeList.FirstOrDefault(p => p.item_id == childBom.icitem_id);
|
|
|
- //最晚开工时间=订单行客户要求交期-运输提前期-库存提前期-生产提前期-下单提前期-生产时间
|
|
|
- dtl.latest_times = item.plan_date.GetValueOrDefault().AddDays(-Convert.ToDouble(curFacDtl?.transportation_leadtime.GetValueOrDefault() + curFacDtl?.stock_leadtime.GetValueOrDefault() + curFacDtl?.production_leadtime.GetValueOrDefault() + curFacDtl?.order_leadtime.GetValueOrDefault() + _CalcBomViewAppService.ProductionTimeDay));
|
|
|
- //物料齐套时间
|
|
|
- dtl.kitting_times = getBomList.Where(p => p.is_use).OrderByDescending(m => m.kitting_time).First().kitting_time.GetValueOrDefault();
|
|
|
- //TODO:最早开始时间默认3天后(后期调整,因为要计算排产,计算产能这一类,才能得到开工时间)
|
|
|
- dtl.earliest_times = dtl.kitting_times.AddDays(1);
|
|
|
+ var getBomList = ObjectMapper.Map<List<b_bom_pretreatment>, List<BomChildExamineDto>>(itemPrelist);
|
|
|
|
|
|
- //替代关系展开list
|
|
|
- dtl.BomChildExamineList = getBomList;
|
|
|
- //添加订单行开工信息
|
|
|
- examines.Add(dtl);
|
|
|
+ getBomList.ForEach(s => s.sentry_id = item.Id);
|
|
|
+ //库存初始化
|
|
|
+ _CalcBomViewAppService.BomStock(getBomList, stocklist, bangid);
|
|
|
+ //计算
|
|
|
+ _CalcBomViewAppService.CalcView(getBomList, bangid, item.qty.GetValueOrDefault(), item.plan_date, sklist, item, urgent, icitemlist);
|
|
|
+
|
|
|
+ //TODO:最晚开始时间
|
|
|
+ var curFacDtl = leadTimeList.FirstOrDefault(p => p.item_id == childBom.icitem_id);
|
|
|
+ //最晚开工时间=订单行客户要求交期-运输提前期-库存提前期-生产提前期-下单提前期-生产时间
|
|
|
+ dtl.latest_times = item.plan_date.GetValueOrDefault().AddDays(-Convert.ToDouble(curFacDtl?.transportation_leadtime.GetValueOrDefault() + curFacDtl?.stock_leadtime.GetValueOrDefault() + curFacDtl?.production_leadtime.GetValueOrDefault() + curFacDtl?.order_leadtime.GetValueOrDefault() + _CalcBomViewAppService.ProductionTimeDay));
|
|
|
+ //物料齐套时间
|
|
|
+ dtl.kitting_times = getBomList.Where(p => p.is_use).OrderByDescending(m => m.kitting_time).First().kitting_time.GetValueOrDefault();
|
|
|
+ //TODO:最早开始时间默认3天后(后期调整,因为要计算排产,计算产能这一类,才能得到开工时间)
|
|
|
+ dtl.earliest_times = dtl.kitting_times.AddDays(1);
|
|
|
+
|
|
|
+ //替代关系展开list
|
|
|
+ dtl.BomChildExamineList = getBomList;
|
|
|
+ //添加订单行开工信息
|
|
|
+ examines.Add(dtl);
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
//批量保存 后期考虑子工单
|
|
|
if (_CalcBomViewAppService.mordersInsertList.Any())
|
|
|
{
|
|
|
@@ -994,333 +1007,6 @@ namespace Business.ResourceExamineManagement
|
|
|
return _ic_plan.Find(p => icItemIds.Contains(p.icitem_id) && p.tenant_id == tenantId && p.factory_id == factoryid && !p.IsDeleted).Result;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 检查在途量
|
|
|
- /// </summary>
|
|
|
- /// <param name="returnlist">物料列表</param>
|
|
|
- /// <param name="factoryid">工厂id</param>
|
|
|
- /// <param name="deliveryDate">销售订单交付日期</param>
|
|
|
- /// <returns></returns>
|
|
|
- private async Task<List<ICItemDateDto>> CheckOnOrder(List<BomChildExamineDto> returnlist, long tenantId, long factoryid, DateTime deliveryDate, long bangid)
|
|
|
- {
|
|
|
- //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 itemlist = new List<ICItemDateDto>();//需要生成采购申请单的物料信息
|
|
|
- var leadTimeList = GetLeadTime(returnlist.Select(p => p.item_id).ToList(), tenantId, factoryid);//提前期列表
|
|
|
- var supplierList = GetSupplier(returnlist.Select(p => p.item_id).ToList(), tenantId, factoryid);//供应商列表
|
|
|
- var planList = GetICPlan(returnlist.Select(p => p.item_id).ToList(), tenantId, factoryid);//plan列表
|
|
|
- foreach (var item in returnlist)
|
|
|
- {
|
|
|
- //缺料
|
|
|
- if (item.lack_qty > 0)
|
|
|
- {
|
|
|
- var itemPO = po_list.FindAll(x => x.icitem_id == item.item_id).OrderBy(v => v.rarrdate).ToList();
|
|
|
- if (itemPO.Count <= 0 || itemPO.Sum(p => (p.qty - p.esqty)) < item.lack_qty)
|
|
|
- {
|
|
|
- //外购生成采购申请单
|
|
|
- if (item.erp_cls == 3)
|
|
|
- {
|
|
|
- //DateTime lastTime = CreateSRMPR(item, tenantId, factoryid, bangid, 2, leadTimeList, supplierList, planList, deliveryDate);
|
|
|
- //itemlist.Add(new ICItemDateDto { item_id = item.item_id, dateTime = lastTime });
|
|
|
- }
|
|
|
- else if (item.erp_cls == 2)
|
|
|
- {
|
|
|
- //委外生成委外采购申请单和委外工单
|
|
|
- //DateTime lastTime = CreateSRMPR(item, tenantId, factoryid, bangid, 1, leadTimeList, supplierList, planList, deliveryDate);
|
|
|
- //CreateMesOOder(item, tenantId, factoryid, bangid, leadTimeList, supplierList, deliveryDate);
|
|
|
- //itemlist.Add(new ICItemDateDto { item_id = item.item_id, dateTime = lastTime });
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- decimal? itemPOQty = 0;//当前物料已抵扣数量
|
|
|
- for (int i = 0; i < itemPO.Count; i++)
|
|
|
- {
|
|
|
- if (itemPOQty + itemPO[i].qty - itemPO[i].esqty >= item.lack_qty)
|
|
|
- {
|
|
|
- //在途满足,写占用表
|
|
|
- itemlist.Add(new ICItemDateDto { item_id = itemPO[i].icitem_id.Value, dateTime = itemPO[i].rarrdate });
|
|
|
- mo_srm_po_occupy po_Occupy = new mo_srm_po_occupy();
|
|
|
- po_Occupy.GenerateNewId();
|
|
|
- po_Occupy.polist_id = itemPO[i].po_id;//采购订单id
|
|
|
- po_Occupy.polist_row = itemPO[i].polist_row;//采购订单行号
|
|
|
- po_Occupy.eid = 111;//客户订单行id
|
|
|
- po_Occupy.bill_no = 111;//客户订单id
|
|
|
- po_Occupy.type = "在途占用";//类型
|
|
|
- po_Occupy.entry_id = 1;//行号
|
|
|
- po_Occupy.qty = item.lack_qty - itemPOQty;//占用量
|
|
|
- po_Occupy.stime = DateTime.Now;//开始时间
|
|
|
- po_Occupy.etime = deliveryDate;//结束时间
|
|
|
- po_Occupy.state = 1;//占用状态
|
|
|
- po_Occupy.cby = "";//变更人
|
|
|
- po_Occupy.creason = "";//变更原因
|
|
|
- po_Occupy.ctime = DateTime.Now;//变更时间
|
|
|
- po_Occupy.bang_id = bangid;
|
|
|
- await _srm_po_occupy.InsertOne(po_Occupy);
|
|
|
- break;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- //不满足逐步扣减
|
|
|
- itemPOQty = itemPOQty + itemPO[i].qty - itemPO[i].esqty;
|
|
|
- mo_srm_po_occupy po_Occupy = new mo_srm_po_occupy();
|
|
|
- po_Occupy.GenerateNewId();
|
|
|
- po_Occupy.polist_id = itemPO[i].po_id;//采购订单id
|
|
|
- po_Occupy.polist_row = itemPO[i].polist_row;//采购订单行号
|
|
|
- po_Occupy.eid = 111;//客户订单行id
|
|
|
- po_Occupy.bill_no = 111;//客户订单id
|
|
|
- po_Occupy.type = "在途占用";//类型
|
|
|
- po_Occupy.entry_id = 1;//行号
|
|
|
- po_Occupy.qty = itemPO[i].qty - itemPO[i].esqty;//占用量
|
|
|
- po_Occupy.stime = DateTime.Now;//开始时间
|
|
|
- po_Occupy.etime = deliveryDate;//结束时间
|
|
|
- po_Occupy.state = 1;//占用状态
|
|
|
- po_Occupy.cby = "";//变更人
|
|
|
- po_Occupy.creason = "";//变更原因
|
|
|
- po_Occupy.ctime = DateTime.Now;//变更时间
|
|
|
- po_Occupy.bang_id = bangid;
|
|
|
- await _srm_po_occupy.InsertOne(po_Occupy);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return itemlist;
|
|
|
- }
|
|
|
-
|
|
|
- ///// <summary>
|
|
|
- ///// 生成委外工单
|
|
|
- ///// </summary>
|
|
|
- ///// <param name="returnlist"></param>
|
|
|
- ///// <param name="factoryid"></param>
|
|
|
- //private DateTime CreateMesOOder(BomChildExamineDto returnlist, long tenantId, long factoryid, long bangId, List<ICItemLeadTimeDto> iCItemLeadTimes, List<ic_item_pur> supplierList, DateTime deliveryDate)
|
|
|
- //{
|
|
|
- // mes_oorder oOrder = new mes_oorder();
|
|
|
- // oOrder.GenerateNewId();
|
|
|
- // oOrder.oorder_no = getOrderNum("WW");//生产工单编号
|
|
|
- // oOrder.oorder_type = "委外工单";//生产工单类型
|
|
|
- // oOrder.oorder_date = DateTime.Now;//委外订单日期
|
|
|
- // oOrder.oorder_state = "已提交";//订单状态
|
|
|
- // oOrder.ooentry_prd = 10000;//生产组织
|
|
|
- // oOrder.ooentry_prdname = "1000";//生产组织名称
|
|
|
- // oOrder.ooentry_wrkc = 10000;//工作中心id
|
|
|
- // oOrder.ooentry_wrkcname = "10001";//工作中心名称
|
|
|
- // oOrder.planner_num = "wwww";//计划员工号
|
|
|
- // oOrder.planner_name = "qqq";//计划员名称
|
|
|
- // oOrder.ooentry_stime = DateTime.Now;//计划开工日期
|
|
|
- // oOrder.ooentry_etime = DateTime.Now;//计划完工日期
|
|
|
- // oOrder.product_code = "产品代码";//产品代码
|
|
|
- // oOrder.ffms_number = "1000";//fms旧料号
|
|
|
- // oOrder.product_name = "test";//产品名称
|
|
|
- // oOrder.specification_model = returnlist.model;//规格型号
|
|
|
- // oOrder.bom_number = "";//bom编码
|
|
|
- // oOrder.unit = returnlist.unit;//单位
|
|
|
- // oOrder.morder_progress = "";//工单进度
|
|
|
- // oOrder.morder_production_number = returnlist.lack_qty;//工单生产数量(计划数量)
|
|
|
- // oOrder.need_number = returnlist.lack_qty;//需求数量
|
|
|
- // oOrder.remaining_number = returnlist.lack_qty;//剩余可用数量
|
|
|
- // oOrder.work_number = 0;//报工数量
|
|
|
- // oOrder.inspection_number = 0;//报检数量
|
|
|
- // oOrder.qualified_number = 0;//合格数量
|
|
|
- // oOrder.inventory_number = 0;//入库数量
|
|
|
- // oOrder.notice_qty = 0;//已开通知单数量
|
|
|
- // oOrder.moentry_on = 1;//启动状态
|
|
|
- // //oOrder.start_time = DateTime.Now;//开始时间
|
|
|
- // //oOrder.pause_time = DateTime.Now;//最近暂停时间
|
|
|
- // //oOrder.restart_time = DateTime.Now;//最近重启时间
|
|
|
- // oOrder.project_name = returnlist.item_name;//项目名称
|
|
|
- // oOrder.sent_status = 1;//发料状态 1-待发料 2-已发料
|
|
|
- // oOrder.production_unit = returnlist.unit;//加工单位
|
|
|
- // oOrder.production_unit_code = "";//加工单位编码
|
|
|
- // oOrder.need_icitem_status = 1;//所需物料是否充足 1-充足 0-缺料
|
|
|
- // oOrder.tenant_id = tenantId;
|
|
|
- // oOrder.factory_id = factoryid;
|
|
|
- // oOrder.bang_id = bangId;
|
|
|
- // _mes_oorder.InsertOne(oOrder);
|
|
|
- // return DateTime.Now;
|
|
|
- //}
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 生成委外工单
|
|
|
- /// </summary>
|
|
|
- /// <param name="returnlist"></param>
|
|
|
- /// <param name="factoryid"></param>
|
|
|
- private mo_mes_oorder CreateMesOOder(BomChildExamineDto returnlist, long tenantId, long factoryid, long bangId, List<ICItemLeadTimeDto> iCItemLeadTimes, List<srm_purchase> supplierList, DateTime deliveryDate)
|
|
|
- {
|
|
|
- mo_mes_oorder oOrder = new mo_mes_oorder();
|
|
|
- oOrder.GenerateNewId();
|
|
|
- oOrder.oorder_no = getOrderNum("WW");//生产工单编号
|
|
|
- oOrder.oorder_type = "委外工单";//生产工单类型
|
|
|
- oOrder.oorder_date = DateTime.Now;//委外订单日期
|
|
|
- oOrder.oorder_state = "已提交";//订单状态
|
|
|
- oOrder.ooentry_prd = 10000;//生产组织
|
|
|
- oOrder.ooentry_prdname = "1000";//生产组织名称
|
|
|
- oOrder.ooentry_wrkc = 10000;//工作中心id
|
|
|
- oOrder.ooentry_wrkcname = "10001";//工作中心名称
|
|
|
- oOrder.planner_num = "wwww";//计划员工号
|
|
|
- oOrder.planner_name = "qqq";//计划员名称
|
|
|
- oOrder.ooentry_stime = DateTime.Now;//计划开工日期
|
|
|
- oOrder.ooentry_etime = DateTime.Now;//计划完工日期
|
|
|
- oOrder.product_code = "产品代码";//产品代码
|
|
|
- oOrder.ffms_number = "1000";//fms旧料号
|
|
|
- oOrder.product_name = "test";//产品名称
|
|
|
- oOrder.specification_model = returnlist.model;//规格型号
|
|
|
- oOrder.bom_number = returnlist.bom_number;//bom编码
|
|
|
- oOrder.unit = returnlist.unit;//单位
|
|
|
- oOrder.morder_progress = "";//工单进度
|
|
|
- oOrder.morder_production_number = returnlist.lack_qty;//工单生产数量(计划数量)
|
|
|
- oOrder.need_number = returnlist.lack_qty;//需求数量
|
|
|
- oOrder.remaining_number = returnlist.lack_qty;//剩余可用数量
|
|
|
- oOrder.work_number = 0;//报工数量
|
|
|
- oOrder.inspection_number = 0;//报检数量
|
|
|
- oOrder.qualified_number = 0;//合格数量
|
|
|
- oOrder.inventory_number = 0;//入库数量
|
|
|
- oOrder.notice_qty = 0;//已开通知单数量
|
|
|
- oOrder.moentry_on = 1;//启动状态
|
|
|
- //oOrder.start_time = DateTime.Now;//开始时间
|
|
|
- //oOrder.pause_time = DateTime.Now;//最近暂停时间
|
|
|
- //oOrder.restart_time = DateTime.Now;//最近重启时间
|
|
|
- oOrder.project_name = returnlist.item_name;//项目名称
|
|
|
- oOrder.sent_status = 1;//发料状态 1-待发料 2-已发料
|
|
|
- oOrder.production_unit = returnlist.unit;//加工单位
|
|
|
- oOrder.production_unit_code = "";//加工单位编码
|
|
|
- oOrder.need_icitem_status = 1;//所需物料是否充足 1-充足 0-缺料
|
|
|
- oOrder.tenant_id = tenantId;
|
|
|
- oOrder.factory_id = factoryid;
|
|
|
- oOrder.bang_id = bangId;
|
|
|
- return oOrder;
|
|
|
- //_mes_oorder.InsertOne(oOrder);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- ///// <summary>
|
|
|
- ///// 生成采购申请单,颗粒度是一个物料一个单,没必要弄列表
|
|
|
- ///// </summary>
|
|
|
- ///// <param name="returnlist"></param>
|
|
|
- ///// <param name="factoryid"></param>
|
|
|
- ///// <param name="orderType">2委外采购申请单,3采购申请单</param>
|
|
|
- //private DateTime CreateSRMPR(BomChildExamineDto returnlist, long tenantId, long factoryid, long bangId, int orderType, List<ICItemLeadTimeDto> iCItemLeadTimes, List<ic_item_pur> supplierList, List<ic_plan> planList, DateTime deliveryDate)
|
|
|
- //{
|
|
|
- // var leadTime = iCItemLeadTimes.Find(x => x.item_id == returnlist.item_id);
|
|
|
- // var supplier = supplierList.Find(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)
|
|
|
- // {
|
|
|
- // throw new NotImplementedException("未找到物料ic_factory_details或ic_item_pur或ic_plan信息!");
|
|
|
- // }
|
|
|
- // srm_pr_main srm_Pr = new srm_pr_main();
|
|
|
- // 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;
|
|
|
- // return deliveryDate.AddDays((double)totalLeadTime * -1);//减去提前期
|
|
|
- //}
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 生成采购申请单,颗粒度是一个物料一个单,没必要弄列表
|
|
|
- /// </summary>
|
|
|
- /// <param name="returnlist"></param>
|
|
|
- /// <param name="factoryid"></param>
|
|
|
- /// <param name="orderType">2委外采购申请单,3采购申请单</param>
|
|
|
- private SRMPRDto CreateSRMPR(BomChildExamineDto returnlist, long tenantId, long factoryid, long bangId, int orderType, List<ICItemLeadTimeDto> iCItemLeadTimes, List<srm_purchase> supplierList, List<ic_plan> planList, DateTime deliveryDate)
|
|
|
- {
|
|
|
- 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 plan = planList.Find(x => x.icitem_id == returnlist.item_id);
|
|
|
- if (leadTime == null || supplier == null || plan == null)
|
|
|
- {
|
|
|
- sRMPR.srm_Pr_Main = null;
|
|
|
- sRMPR.lastStartTmie = deliveryDate.AddDays(7 * -1);//减去提前期
|
|
|
- return sRMPR;
|
|
|
- //throw new NotImplementedException("未找到物料ic_factory_details或ic_item_pur或ic_plan信息!");
|
|
|
- }
|
|
|
-
|
|
|
- srm_Pr.GenerateNewId();
|
|
|
- srm_Pr.pr_billno = returnlist.erp_cls == 2 ? GetMaxSerialNumber(416555183259717) : GetMaxSerialNumber(416188596088901);//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.Add(srm_Pr);
|
|
|
- sRMPR.lastStartTmie = deliveryDate.AddDays((double)totalLeadTime * -1);//减去提前期
|
|
|
- return sRMPR;
|
|
|
- }
|
|
|
-
|
|
|
- // 生成订单编号 字母+年月日+8位随机数+时间戳
|
|
|
- private string getOrderNum(string preCode)
|
|
|
- {
|
|
|
- string Dates = DateTime.Now.ToString("yyyyMMdd");//获取当前时间
|
|
|
- Random Rdm = new Random(Guid.NewGuid().GetHashCode());//随机数
|
|
|
- TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);//时间戳
|
|
|
- string newts = Convert.ToInt64(ts.TotalMilliseconds).ToString();//时间戳
|
|
|
- string new_orderNum = preCode + Dates + Rdm.Next(0, 100000000) + newts;
|
|
|
- return new_orderNum;
|
|
|
- }
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// 同一周以周五为合并采购申请单截点判断是否为同一周
|
|
|
/// </summary>
|
|
|
@@ -2068,8 +1754,10 @@ namespace Business.ResourceExamineManagement
|
|
|
pretreatments = _mysql_b_bom_pretreatment.GetListAsync(s => boms.Select(c => c.mysql_id).ToList().Contains(s.sourceid)).Result;
|
|
|
}
|
|
|
|
|
|
- DataInitialization(boms, bangid, null, icitemlist, stocklist, pretreatments);
|
|
|
-
|
|
|
+ DataInitialization(boms, bangid, icitemlist, stocklist, pretreatments);
|
|
|
+ _morderAppService.param = param;
|
|
|
+ _purchaseOrderAppService.param = param;
|
|
|
+ _CalcBomViewAppService.param = param;
|
|
|
foreach (var item in mo_Mes_Morders)
|
|
|
{
|
|
|
var moentry = mo_Mes_Moentries.Find(s => s.moentry_moid == item.Id);
|
|
|
@@ -2140,7 +1828,7 @@ namespace Business.ResourceExamineManagement
|
|
|
/// <param name="stocklist"></param>
|
|
|
/// <param name="sklist"></param>
|
|
|
/// <exception cref="NotImplementedException"></exception>
|
|
|
- public void DataInitialization(List<mo_ic_bom> boms, long bangid, crm_seorder sorder, List<mo_ic_item> icitemlist, List<mo_ic_item_stock> stocklist, List<b_bom_pretreatment> pretreatments)
|
|
|
+ public void DataInitialization(List<mo_ic_bom> boms, long bangid, List<mo_ic_item> icitemlist, List<mo_ic_item_stock> stocklist, List<b_bom_pretreatment> pretreatments)
|
|
|
{
|
|
|
List<long> itemIds = pretreatments.Select(p => p.item_id.GetValueOrDefault()).ToList();
|
|
|
icitemlist.AddRange(_ic_item.GetManyByCondition(p => itemIds.Contains(p.mysql_id) && !p.IsDeleted).Result);
|
|
|
@@ -2190,9 +1878,7 @@ namespace Business.ResourceExamineManagement
|
|
|
supplierList = GetSupplier(itemIds, param.tenantId, param.factoryId);//供应商列表
|
|
|
planList = GetICPlan(itemIds, param.tenantId, param.factoryId);//plan列表
|
|
|
|
|
|
- _morderAppService.param = param;
|
|
|
- _purchaseOrderAppService.param = param;
|
|
|
- _CalcBomViewAppService.param = param;
|
|
|
+
|
|
|
_CalcBomViewAppService.planList = planList;
|
|
|
_CalcBomViewAppService.leadTimeList = leadTimeList;
|
|
|
_CalcBomViewAppService.supplierList = supplierList;
|
|
|
@@ -2204,7 +1890,7 @@ namespace Business.ResourceExamineManagement
|
|
|
_CalcBomViewAppService.mordersList = mo_Mes_Morders;//工单
|
|
|
_CalcBomViewAppService.moentriesList = mo_Mes_Moentry;//工单子表
|
|
|
_CalcBomViewAppService.mooccupyAllList = mes_mooccupyList;//工单占用表
|
|
|
- _CalcBomViewAppService.seorder = sorder;//销售订单
|
|
|
+
|
|
|
_CalcBomViewAppService.srm_Po_Lists = poDetailList; //采购明细
|
|
|
_CalcBomViewAppService.srm_Po_Occupies = poOccupys; //采购占用表
|
|
|
}
|