|
@@ -824,6 +824,7 @@ namespace Business.ResourceExamineManagement
|
|
|
dtl.need_time = item.plan_date;
|
|
dtl.need_time = item.plan_date;
|
|
|
dtl.bangid = bangid;
|
|
dtl.bangid = bangid;
|
|
|
dtl.prd_code = item.item_number;
|
|
dtl.prd_code = item.item_number;
|
|
|
|
|
+
|
|
|
//获取当前物料bom数据
|
|
//获取当前物料bom数据
|
|
|
var childBom = boms.Where(p => p.item_number == item.item_number).FirstOrDefault();
|
|
var childBom = boms.Where(p => p.item_number == item.item_number).FirstOrDefault();
|
|
|
dtl.bom_number = childBom.bom_number;
|
|
dtl.bom_number = childBom.bom_number;
|
|
@@ -2181,7 +2182,7 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
}
|
|
|
var locStock = _invMaster.Select(a => numbers.Contains(a.ItemNum) && a.IsActive && a.Domain == factoryId.ToString() && locationList.Contains(a.Location));
|
|
var locStock = _invMaster.Select(a => numbers.Contains(a.ItemNum) && a.IsActive && a.Domain == factoryId.ToString() && locationList.Contains(a.Location));
|
|
|
//var sapInvList = _SAPInv.Select(a => a.WERKS == factoryId.ToString() && numbers.Contains(a.MATNR) && (a.SOBKZ.ToUpper() == "O" || locationList.Contains(a.LGORT)));
|
|
//var sapInvList = _SAPInv.Select(a => a.WERKS == factoryId.ToString() && numbers.Contains(a.MATNR) && (a.SOBKZ.ToUpper() == "O" || locationList.Contains(a.LGORT)));
|
|
|
- var sapInvList = _SAPInv.Select(a => a.WERKS == factoryId.ToString() && numbers.Contains(a.MATNR) && locationList.Contains(a.LGORT));
|
|
|
|
|
|
|
+ //var sapInvList = _SAPInv.Select(a => a.WERKS == factoryId.ToString() && numbers.Contains(a.MATNR) && locationList.Contains(a.LGORT));
|
|
|
//设置当前计算bangid
|
|
//设置当前计算bangid
|
|
|
icitemStokc.ForEach(item => {
|
|
icitemStokc.ForEach(item => {
|
|
|
item.bang_id = bangid;
|
|
item.bang_id = bangid;
|
|
@@ -2190,10 +2191,10 @@ namespace Business.ResourceExamineManagement
|
|
|
foreach (var lct in locationList)
|
|
foreach (var lct in locationList)
|
|
|
{
|
|
{
|
|
|
var lctQty = locStock.Where(s => s.ItemNum == item.icitem_number && s.Location == lct).Sum(p => p.AvailStatusQty.GetValueOrDefault() + p.Assay.GetValueOrDefault());
|
|
var lctQty = locStock.Where(s => s.ItemNum == item.icitem_number && s.Location == lct).Sum(p => p.AvailStatusQty.GetValueOrDefault() + p.Assay.GetValueOrDefault());
|
|
|
- if (lctQty == 0)
|
|
|
|
|
- {
|
|
|
|
|
- lctQty = sapInvList.Where(x => x.MATNR == item.icitem_number && x.LGORT == lct).Sum(p => p.LABST + p.INSME);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ //if (lctQty == 0)
|
|
|
|
|
+ //{
|
|
|
|
|
+ // lctQty = sapInvList.Where(x => x.MATNR == item.icitem_number && x.LGORT == lct).Sum(p => p.LABST + p.INSME);
|
|
|
|
|
+ //}
|
|
|
item.sqty += lctQty;
|
|
item.sqty += lctQty;
|
|
|
}
|
|
}
|
|
|
/*if (param.checkPlan)
|
|
/*if (param.checkPlan)
|
|
@@ -4455,397 +4456,228 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
#region 齐套数量测试
|
|
#region 齐套数量测试
|
|
|
- ///// <summary>
|
|
|
|
|
- ///// 工单物料齐套检查
|
|
|
|
|
- ///// </summary>
|
|
|
|
|
- ///// <param name="input"></param>
|
|
|
|
|
- //public async Task<PschedDto> OrderDetailKittingCheck(string domain, string userAccount, List<mes_morder> mo_Mes_Morders = null)
|
|
|
|
|
- //{
|
|
|
|
|
- // // 调用优先级计算算法
|
|
|
|
|
- // //var workOrds = _replenishmentAppService.CalcPriority(mo_Mes_Morders.Select(p => p.morder_no).ToList(), param.factoryId.ToString());
|
|
|
|
|
- // List<string> tsWork = new List<string> { "test", "tcn", "rw" };
|
|
|
|
|
- // var workOrds = _workOrdMaster.Select(x => x.Domain == domain && x.IsActive && (string.IsNullOrEmpty(x.Typed) == true || tsWork.Contains(x.Typed)) && (x.Status.ToLower() == "p" || x.Status.ToLower() == "r")).OrderBy(c => c.Priority).ToList();
|
|
|
|
|
- // if (mo_Mes_Morders == null)
|
|
|
|
|
- // {
|
|
|
|
|
- // mo_Mes_Morders = _mysql_mes_morder.GetListAsync(x => domain == x.factory_id.ToString() && workOrds.Select(s => s.WorkOrd).Contains(x.morder_no) && (x.morder_state == MorderEnum.Initial_state || x.morder_state == MorderEnum.Xd_state) && !x.IsDeleted).Result;
|
|
|
|
|
- // }
|
|
|
|
|
- // var workOrdRoutings = _workOrdRouting.Select(a => mo_Mes_Morders.Select(p => p.morder_no).Contains(a.WorkOrd) && a.Domain == param.factoryId.ToString() && a.IsActive).ToList();
|
|
|
|
|
- // //清理工单物料明细
|
|
|
|
|
- // var delWorkOrddetails = _workOrdDetail.Select(x => workOrds.Select(c => c.RecID).Contains((int)x.WorkOrdMasterRecID) && x.Domain == param.factoryId.ToString());
|
|
|
|
|
- // //资源检查结果
|
|
|
|
|
- // PschedDto rtn = new PschedDto();
|
|
|
|
|
- // //资源检查明细list
|
|
|
|
|
- // List<ExamineResult> examines = new List<ExamineResult>();
|
|
|
|
|
- // if (!mo_Mes_Morders.Any())
|
|
|
|
|
- // {
|
|
|
|
|
- // return rtn;
|
|
|
|
|
- // }
|
|
|
|
|
- // List<mes_morder> db_mes_morder = new List<mes_morder>();
|
|
|
|
|
- // db_mes_morder = mo_Mes_Morders;
|
|
|
|
|
- // //资源检查入参全局变量赋值
|
|
|
|
|
- // param.company_id = mo_Mes_Morders[0].company_id;
|
|
|
|
|
- // param.factoryId = mo_Mes_Morders[0].factory_id.GetValueOrDefault();
|
|
|
|
|
- // param.checkflag = false;
|
|
|
|
|
- // param.checkPlan = false;
|
|
|
|
|
- // param.writeNum = true;
|
|
|
|
|
- // //生成当前计算bangid
|
|
|
|
|
- // long bangid = help.NextId();
|
|
|
|
|
-
|
|
|
|
|
- // var morderIdList = mo_Mes_Morders.Select(s => s.Id).ToList();
|
|
|
|
|
-
|
|
|
|
|
- // 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 == param.company_id && p.factory_id == param.factoryId && !p.IsDeleted && mo_Mes_Moentries.Select(x => x.soentry_id).Contains(p.Id)).Result;
|
|
|
|
|
-
|
|
|
|
|
- // //删除同步Mysql后旧数据
|
|
|
|
|
- // await DeleteMySqlOldData(sentrys);
|
|
|
|
|
- // //物料信息
|
|
|
|
|
- // List<mo_ic_item> icitemlist = new List<mo_ic_item>();
|
|
|
|
|
-
|
|
|
|
|
- // //物料库存表
|
|
|
|
|
- // List<mo_ic_item_stock> stocklist = new List<mo_ic_item_stock>();
|
|
|
|
|
- // //物料占用记录
|
|
|
|
|
- // List<mo_ic_item_stockoccupy> sklist = new List<mo_ic_item_stockoccupy>();
|
|
|
|
|
-
|
|
|
|
|
- // //sorder=null 是因为齐套检查不需要生成工单、采购、委外等信息,所以不需要关联的工单信息传递进去。
|
|
|
|
|
- // var pretreatments = _mysql_b_bom_pretreatment.GetListAsync(s => boms.Select(c => c.mysql_id).ToList().Contains(s.sourceid)).Result;
|
|
|
|
|
- // //List<mo_ic_bom> autoCreates = new List<mo_ic_bom>();
|
|
|
|
|
- // //boms.ForEach(p =>
|
|
|
|
|
- // //{
|
|
|
|
|
- // // if (!pretreatments.Where(s => s.sourceid == p.mysql_id).Any())
|
|
|
|
|
- // // {
|
|
|
|
|
- // // autoCreates.Add(p);
|
|
|
|
|
- // // }
|
|
|
|
|
- // //});
|
|
|
|
|
- // //if (autoCreates.Any())
|
|
|
|
|
- // //{
|
|
|
|
|
- // // AutoCreateBomBill(param.company_id.ToString(), autoCreates);
|
|
|
|
|
- // // pretreatments = _mysql_b_bom_pretreatment.GetListAsync(s => boms.Select(c => c.mysql_id).ToList().Contains(s.sourceid)).Result;
|
|
|
|
|
- // //}
|
|
|
|
|
- // //增加特殊工单的预处理结果,因为特殊工单是自定义物料清单
|
|
|
|
|
- // //List<string> tsWork = new List<string> { "试制工单", "返工工单" };
|
|
|
|
|
- // var specialWork = mo_Mes_Morders.Where(x => tsWork.Contains(x.morder_type)).ToList();
|
|
|
|
|
- // pretreatments.AddRange(_mysql_b_bom_pretreatment.GetListAsync(s => specialWork.Select(c => c.Id).ToList().Contains(s.sourceid)).Result);
|
|
|
|
|
-
|
|
|
|
|
- // await AsyncItemStockFromWMS(pretreatments);
|
|
|
|
|
- // //数据库快照-同步mysql库数据到mongoDB中
|
|
|
|
|
- // await DbSnapShot(param.company_id, param.factoryId, bangid, pretreatments);
|
|
|
|
|
-
|
|
|
|
|
- // DetailDataInitialization(boms, bangid, icitemlist, stocklist, pretreatments, sklist);
|
|
|
|
|
-
|
|
|
|
|
- // List<mes_morder> priorityMorderList = new List<mes_morder>();
|
|
|
|
|
- // foreach (var work in workOrds)
|
|
|
|
|
- // {
|
|
|
|
|
- // var mo = mo_Mes_Morders.Find(s => s.morder_no == work.WorkOrd);
|
|
|
|
|
-
|
|
|
|
|
- // var routings = workOrdRoutings.Where(r => r.WorkOrd == work.WorkOrd).ToList();
|
|
|
|
|
- // if (routings.Any() && mo != null)
|
|
|
|
|
- // {
|
|
|
|
|
- // //最大生产数量
|
|
|
|
|
- // var QtyComplete = routings.Max(r => r.QtyComplete);
|
|
|
|
|
- // //修改订单需求数为在制数量
|
|
|
|
|
- // mo.need_number = mo.need_number - QtyComplete;
|
|
|
|
|
- // work.OpQtyCompleted = QtyComplete;
|
|
|
|
|
- // work.InProdcutQty = mo.need_number;
|
|
|
|
|
- // }
|
|
|
|
|
-
|
|
|
|
|
- // if (mo != null)
|
|
|
|
|
- // {
|
|
|
|
|
- // if (mo.need_number > 0)
|
|
|
|
|
- // {
|
|
|
|
|
- // priorityMorderList.Add(mo);
|
|
|
|
|
- // }
|
|
|
|
|
- // }
|
|
|
|
|
- // }
|
|
|
|
|
- // if (!priorityMorderList.Any())
|
|
|
|
|
- // {
|
|
|
|
|
- // priorityMorderList = mo_Mes_Morders;
|
|
|
|
|
- // }
|
|
|
|
|
- // _morderAppService.param = param;
|
|
|
|
|
- // _purchaseOrderAppService.param = param;
|
|
|
|
|
- // _CalcBomViewAppService.param = param;
|
|
|
|
|
-
|
|
|
|
|
- // List<string> GenerateMoList = new List<string>();
|
|
|
|
|
- // _CalcBomViewAppService.GenerateMoList = GenerateMoList;
|
|
|
|
|
- // _CalcBomViewAppService.newStockOccList = new List<mo_ic_item_stockoccupy>();
|
|
|
|
|
- // sklist = sklist.Where(s => !priorityMorderList.Select(p => p.morder_no).Contains(s.morder_mo)).ToList();
|
|
|
|
|
- // foreach (var item in priorityMorderList)
|
|
|
|
|
- // {
|
|
|
|
|
- // var moentry = mo_Mes_Moentries.Find(s => s.moentry_moid == item.Id);
|
|
|
|
|
- // if (moentry == null)
|
|
|
|
|
- // {
|
|
|
|
|
- // continue;
|
|
|
|
|
- // }
|
|
|
|
|
- // var sentry = sentrys.Find(s => s.Id == moentry.soentry_id);
|
|
|
|
|
-
|
|
|
|
|
- // //工单资源检查信息
|
|
|
|
|
- // ExamineResult dtl = new ExamineResult();
|
|
|
|
|
- // dtl.morder_id = item.Id;
|
|
|
|
|
- // dtl.morder_no = item.morder_no;
|
|
|
|
|
- // dtl.bangid = bangid;
|
|
|
|
|
- // dtl.order_statr_time = item.start_time;
|
|
|
|
|
- // dtl.bom_number = item.bom_number;
|
|
|
|
|
- // dtl.need_qty = item.need_number.GetValueOrDefault();
|
|
|
|
|
- // dtl.prd_code = item.product_code;
|
|
|
|
|
-
|
|
|
|
|
- // //获取当前物料bom数据
|
|
|
|
|
- // List<b_bom_pretreatment> itemPrelist = new List<b_bom_pretreatment>();
|
|
|
|
|
- // //通过工单ID读取,考虑特殊工单的预处理
|
|
|
|
|
- // itemPrelist = pretreatments.Where(s => s.sourceid == item.Id).ToList();
|
|
|
|
|
- // if (!itemPrelist.Any())
|
|
|
|
|
- // {
|
|
|
|
|
- // var childBom = boms.Where(p => p.bom_number == item.bom_number).FirstOrDefault();
|
|
|
|
|
- // if (childBom != null)
|
|
|
|
|
- // {
|
|
|
|
|
- // itemPrelist = pretreatments.Where(s => s.sourceid == childBom.mysql_id).ToList();
|
|
|
|
|
- // }
|
|
|
|
|
- // else
|
|
|
|
|
- // {
|
|
|
|
|
- // continue;
|
|
|
|
|
- // }
|
|
|
|
|
- // }
|
|
|
|
|
- // if (!itemPrelist.Any())
|
|
|
|
|
- // {
|
|
|
|
|
- // continue;
|
|
|
|
|
- // }
|
|
|
|
|
-
|
|
|
|
|
- // var getBomList = ObjectMapper.Map<List<b_bom_pretreatment>, List<BomChildExamineDto>>(itemPrelist);
|
|
|
|
|
-
|
|
|
|
|
- // if (sentry != null)
|
|
|
|
|
- // {
|
|
|
|
|
- // dtl.sentry_id = sentry.Id;
|
|
|
|
|
- // getBomList.ForEach(s => s.sentry_id = item.Id);
|
|
|
|
|
- // }
|
|
|
|
|
- // if (getBomList.Count == 1)
|
|
|
|
|
- // {
|
|
|
|
|
- // var isy = 1;
|
|
|
|
|
- // }
|
|
|
|
|
-
|
|
|
|
|
- // _CalcBomViewAppService.morder_type = item.morder_type;
|
|
|
|
|
- // _CalcBomViewAppService.mes_morder = item;
|
|
|
|
|
- // //库存初始化
|
|
|
|
|
- // _CalcBomViewAppService.BomStock(getBomList, stocklist, bangid);
|
|
|
|
|
-
|
|
|
|
|
- // //计算
|
|
|
|
|
- // _CalcBomViewAppService.CalcView(getBomList, bangid, item.need_number.GetValueOrDefault(), item.moentry_sys_stime, sklist, sentry, icitemlist);
|
|
|
|
|
-
|
|
|
|
|
- // //TODO:最晚开始时间
|
|
|
|
|
- // //var curFacDtl = leadTimeList.FirstOrDefault(p => p.item_id == childBom.icitem_id);
|
|
|
|
|
- // //物料齐套时间
|
|
|
|
|
- // dtl.kitting_times = getBomList.Where(p => p.is_use && p.kitting_time != null).OrderByDescending(m => m.kitting_time).First().kitting_time.GetValueOrDefault();
|
|
|
|
|
- // //kitting_time=null为自制组件跳过数据未进行计算,kitting_state=0的数据未参与计算
|
|
|
|
|
- // var qllist = getBomList.Where(x => x.use_qty == 0 && x.kitting_time != null && x.needCount != 0 && x.erp_cls != 4 && x.level != 1 && x.kitting_state != 0).ToList();
|
|
|
|
|
- // var work = workOrds.Find(x => x.WorkOrd == item.morder_no);
|
|
|
|
|
- // if (qllist.Any())
|
|
|
|
|
- // {
|
|
|
|
|
- // work.LocationStock = 0;
|
|
|
|
|
- // }
|
|
|
|
|
- // else
|
|
|
|
|
- // {
|
|
|
|
|
- // qllist = getBomList.Where(x => x.use_qty > 0 && x.kitting_time != null && x.needCount != 0 && x.erp_cls != 4 && x.level == 2 && x.kitting_state == 1).ToList();
|
|
|
|
|
- // if (qllist.Any())
|
|
|
|
|
- // {
|
|
|
|
|
- // //按比例计算成品齐套个数
|
|
|
|
|
- // work.LocationStock = qllist.Min(b => b.use_qty / b.qty) > work.QtyOrded ? work.QtyOrded : qllist.Min(b => b.use_qty / b.qty);
|
|
|
|
|
- // }
|
|
|
|
|
- // else
|
|
|
|
|
- // {
|
|
|
|
|
- // work.LocationStock = 0;
|
|
|
|
|
- // }
|
|
|
|
|
- // }
|
|
|
|
|
- // //替代关系展开list
|
|
|
|
|
- // dtl.BomChildExamineList = getBomList;
|
|
|
|
|
- // //添加订单行开工信息
|
|
|
|
|
- // examines.Add(dtl);
|
|
|
|
|
- // }
|
|
|
|
|
- // rtn.examines = examines;
|
|
|
|
|
- // if (writeNum)
|
|
|
|
|
- // {
|
|
|
|
|
- // //回写工单需求数
|
|
|
|
|
- // foreach (var item in mo_Mes_Morders)
|
|
|
|
|
- // {
|
|
|
|
|
- // var curInfo = db_mes_morder.FirstOrDefault(p => p.morder_no == item.morder_no);
|
|
|
|
|
- // if (curInfo != null)
|
|
|
|
|
- // {
|
|
|
|
|
- // item.need_number = curInfo.need_number;
|
|
|
|
|
- // }
|
|
|
|
|
- // }
|
|
|
|
|
- // _businessDbContext.BulkUpdate(workOrds);
|
|
|
|
|
- // }
|
|
|
|
|
- // List<WorkOrdDetail> mainWorkOrdDetails = new List<WorkOrdDetail>();
|
|
|
|
|
- // if (!writeNum)
|
|
|
|
|
- // {
|
|
|
|
|
- // if (moentryList == null)
|
|
|
|
|
- // {
|
|
|
|
|
- // //成品虚拟件对应关系
|
|
|
|
|
- // var productOpList = _productStructureOp.Select(x => priorityMorderList.Select(c => c.product_code).Contains(x.ProductItem) && x.Domain == param.factoryId.ToString());
|
|
|
|
|
- // List<ItemMaster> itemMasterList = _itemMaster.Select(p => p.Domain == param.factoryId.ToString()).ToList();
|
|
|
|
|
- // foreach (var workord in priorityMorderList)
|
|
|
|
|
- // {
|
|
|
|
|
- // long fid = GetParentMo(priorityMorderList, workord);
|
|
|
|
|
- // var exm = examines.Find(s => s.morder_id == fid);
|
|
|
|
|
- // if (exm != null)
|
|
|
|
|
- // {
|
|
|
|
|
- // var childs = exm.BomChildExamineList.Where(s => s.is_use == true).ToList();
|
|
|
|
|
- // var child = childs.Find(s => s.item_number == workord.product_code);
|
|
|
|
|
- // if (workord.morder_type == "返工工单")
|
|
|
|
|
- // {
|
|
|
|
|
- // child = childs.Find(s => s.item_number == workord.product_code && s.level == 1);
|
|
|
|
|
- // }
|
|
|
|
|
- // if (child == null)
|
|
|
|
|
- // {
|
|
|
|
|
- // continue;
|
|
|
|
|
- // }
|
|
|
|
|
- // List<BomChildExamineDto> returnList = new List<BomChildExamineDto>();
|
|
|
|
|
- // var productOps = productOpList.Where(x => x.ProductItem == workord.product_code).ToList();
|
|
|
|
|
- // GetWorkDetalis(childs.Where(s => s.parent_id == child.fid).ToList(), returnList, childs, productOps);
|
|
|
|
|
- // if (returnList.Any())
|
|
|
|
|
- // {
|
|
|
|
|
- // WorkOrdDetail woDetail = null;
|
|
|
|
|
- // var calereturnList = returnList.OrderBy(c => c.item_number).Select(x => x.item_number).Distinct().ToList();
|
|
|
|
|
- // var work = workOrds.Find(x => x.WorkOrd == workord.morder_no);
|
|
|
|
|
- // if (work == null)
|
|
|
|
|
- // {
|
|
|
|
|
- // continue;
|
|
|
|
|
- // }
|
|
|
|
|
- // short num = 1;
|
|
|
|
|
- // foreach (var caleNumber in calereturnList)
|
|
|
|
|
- // {
|
|
|
|
|
- // var caleList = returnList.Where(x => x.item_number == caleNumber).ToList();
|
|
|
|
|
- // var itemMst = itemMasterList.Find(x => x.ItemNum == caleNumber);
|
|
|
|
|
- // //添加工单的物料信息
|
|
|
|
|
- // woDetail = new WorkOrdDetail();
|
|
|
|
|
- // woDetail.Domain = workord.factory_id.ToString();
|
|
|
|
|
- // woDetail.WorkOrd = workord.morder_no;
|
|
|
|
|
- // var oplist = caleList.Where(x => x.Op > 0).ToList();
|
|
|
|
|
- // woDetail.Op = 0;
|
|
|
|
|
- // if (oplist.Any())
|
|
|
|
|
- // {
|
|
|
|
|
- // woDetail.Op = oplist.Min(f => f.Op);
|
|
|
|
|
- // }
|
|
|
|
|
- // woDetail.ItemNum = caleNumber;
|
|
|
|
|
- // woDetail.QtyPosted = 0m;
|
|
|
|
|
- // woDetail.QtyReturned = 0m;
|
|
|
|
|
- // woDetail.Status = "";
|
|
|
|
|
- // woDetail.IsActive = true;
|
|
|
|
|
- // woDetail.CreateTime = DateTime.Now;
|
|
|
|
|
- // woDetail.Line = num;
|
|
|
|
|
- // woDetail.QtyRequired = caleList.Sum(c => c.needCount);
|
|
|
|
|
- // woDetail.WorkOrdMasterRecID = work.RecID;
|
|
|
|
|
- // woDetail.Location = itemMst == null ? "" : itemMst.Location;
|
|
|
|
|
- // if (workord.need_number != 0)
|
|
|
|
|
- // {
|
|
|
|
|
- // woDetail.FrozenBOMQty = Math.Round(woDetail.QtyRequired / workord.need_number.GetValueOrDefault(), 10);
|
|
|
|
|
- // }
|
|
|
|
|
- // mainWorkOrdDetails.Add(woDetail);
|
|
|
|
|
- // num++;
|
|
|
|
|
- // }
|
|
|
|
|
- // }
|
|
|
|
|
- // }
|
|
|
|
|
- // }
|
|
|
|
|
- // if (delWorkOrddetails.Any())
|
|
|
|
|
- // {
|
|
|
|
|
- // _businessDbContext.BulkDelete(delWorkOrddetails);
|
|
|
|
|
- // }
|
|
|
|
|
- // if (mainWorkOrdDetails.Any())
|
|
|
|
|
- // {
|
|
|
|
|
- // _businessDbContext.BulkInsert(mainWorkOrdDetails);
|
|
|
|
|
- // }
|
|
|
|
|
- // }
|
|
|
|
|
- // }
|
|
|
|
|
- // if (planCheck)
|
|
|
|
|
- // {
|
|
|
|
|
- // //如果有计划工单,则需要生成pr po oo
|
|
|
|
|
- // List<mo_srm_pr_main> prmainlist = new List<mo_srm_pr_main>();
|
|
|
|
|
- // if (_CalcBomViewAppService.SRMPRDtoList.Any())
|
|
|
|
|
- // {
|
|
|
|
|
- // List<List<mo_srm_pr_main>> prlist = _CalcBomViewAppService.SRMPRDtoList.Where(f => f.srm_Pr_Main != null).Select(s => s.srm_Pr_Main).ToList();
|
|
|
|
|
- // 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);
|
|
|
|
|
- // prmainlist.Add(item);
|
|
|
|
|
- // }
|
|
|
|
|
- // }
|
|
|
|
|
- // if (list.Any())
|
|
|
|
|
- // rtn.srm_pr_list = _CalcBomViewAppService.SRMPRDtoList;
|
|
|
|
|
- // }
|
|
|
|
|
- // if (prmainlist.Any())
|
|
|
|
|
- // {
|
|
|
|
|
- // var nbrlistDto = _serialNumberAppService.GetBillNo(prmainlist[0].factory_id.ToString(), "PR", prmainlist.Count, "admin", 1);
|
|
|
|
|
- // int index = 0;
|
|
|
|
|
- // foreach (var p in prmainlist)
|
|
|
|
|
- // {
|
|
|
|
|
- // if (nbrlistDto[index] != null)
|
|
|
|
|
- // {
|
|
|
|
|
- // 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())
|
|
|
|
|
- // {
|
|
|
|
|
- // 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
|
|
|
|
|
- // {
|
|
|
|
|
- // _businessDbContext.BulkUpdate(mo_Mes_Morders);
|
|
|
|
|
- // /*if (workOrdMasters.Any())
|
|
|
|
|
- // {
|
|
|
|
|
- // _workOrdMaster.Update(workOrdMasters);
|
|
|
|
|
- // }*/
|
|
|
|
|
- // if (prmainlist.Any())
|
|
|
|
|
- // {
|
|
|
|
|
- // var pr_mainlist = ObjectMapper.Map<List<mo_srm_pr_main>, List<srm_pr_main>>(prmainlist);
|
|
|
|
|
- // _businessDbContext.BulkInsert(pr_mainlist);
|
|
|
|
|
- // }
|
|
|
|
|
- // if (_CalcBomViewAppService.newStockOccList.Any())
|
|
|
|
|
- // {
|
|
|
|
|
- // var stockoccupylist = ObjectMapper.Map<List<mo_ic_item_stockoccupy>, List<ic_item_stockoccupy>>(_CalcBomViewAppService.newStockOccList);
|
|
|
|
|
- // stockoccupylist.ForEach(s => { s.GenerateNewId(help.NextId()); s.create_time = DateTime.Now; s.tenant_id = param.company_id.GetValueOrDefault(); s.company_id = param.company_id; s.factory_id = param.factoryId; });
|
|
|
|
|
- // _businessDbContext.BulkInsert(stockoccupylist);
|
|
|
|
|
- // }
|
|
|
|
|
- // if (_CalcBomViewAppService.srm_Po_OccupiesInsert.Any())
|
|
|
|
|
- // {
|
|
|
|
|
- // _CalcBomViewAppService.srm_Po_OccupiesInsert.ForEach(s => { s.company_id = param.company_id; s.factory_id = param.factoryId; });
|
|
|
|
|
- // var srmpooccupyInsert = ObjectMapper.Map<List<mo_srm_po_occupy>, List<srm_po_occupy>>(_CalcBomViewAppService.srm_Po_OccupiesInsert);
|
|
|
|
|
- // srmpooccupyInsert.ForEach(x => { x.GenerateNewId(help.NextId()); });
|
|
|
|
|
- // _businessDbContext.BulkInsert(srmpooccupyInsert);
|
|
|
|
|
- // }
|
|
|
|
|
-
|
|
|
|
|
- // await unitOfWork.CompleteAsync();
|
|
|
|
|
- // }
|
|
|
|
|
- // catch (Exception e)
|
|
|
|
|
- // {
|
|
|
|
|
- // unitOfWork.Dispose();
|
|
|
|
|
- // new NLogHelper("ResourceExamineAppService").WriteLog("OrderKittingCheck", "工单检查数据更新失败:" + e.Message, _currentTenant.Id.ToString());
|
|
|
|
|
- // }
|
|
|
|
|
- // }
|
|
|
|
|
-
|
|
|
|
|
- // }
|
|
|
|
|
- // if (!writeNum)
|
|
|
|
|
- // {
|
|
|
|
|
- // //检查结果写入数据库
|
|
|
|
|
- // await ExamineResultInsertDBAsync(examines);
|
|
|
|
|
- // }
|
|
|
|
|
- // //清空快照数据
|
|
|
|
|
- // await ClearSnapShot(bangid);
|
|
|
|
|
- // return rtn;
|
|
|
|
|
- //}
|
|
|
|
|
|
|
+ /// <summary>
|
|
|
|
|
+ /// 工单物料齐套检查
|
|
|
|
|
+ /// </summary>
|
|
|
|
|
+ /// <param name="input"></param>
|
|
|
|
|
+ public async Task<PschedDto> OrderDetailKittingCheck(string domain, string userAccount, List<mes_morder> mo_Mes_Morders = null)
|
|
|
|
|
+ {
|
|
|
|
|
+ // 调用优先级计算算法
|
|
|
|
|
+ //var workOrds = _replenishmentAppService.CalcPriority(mo_Mes_Morders.Select(p => p.morder_no).ToList(), param.factoryId.ToString());
|
|
|
|
|
+ List<string> tsWork = new List<string> { "test", "tcn", "rw" };
|
|
|
|
|
+ var workOrds = _workOrdMaster.Select(x => x.Domain == domain && x.IsActive && (string.IsNullOrEmpty(x.Typed) == true || tsWork.Contains(x.Typed)) && (x.Status.ToLower() == "p" || x.Status.ToLower() == "r")).OrderBy(c => c.Priority).ToList();
|
|
|
|
|
+ if (mo_Mes_Morders == null)
|
|
|
|
|
+ {
|
|
|
|
|
+ mo_Mes_Morders = _mysql_mes_morder.GetListAsync(x => domain == x.factory_id.ToString() && workOrds.Select(s => s.WorkOrd).Contains(x.morder_no) && (x.morder_state == MorderEnum.Initial_state || x.morder_state == MorderEnum.Xd_state) && !x.IsDeleted).Result;
|
|
|
|
|
+ }
|
|
|
|
|
+ var workOrdRoutings = _workOrdRouting.Select(a => mo_Mes_Morders.Select(p => p.morder_no).Contains(a.WorkOrd) && a.Domain == param.factoryId.ToString() && a.IsActive).ToList();
|
|
|
|
|
+ //清理工单物料明细
|
|
|
|
|
+ var delWorkOrddetails = _workOrdDetail.Select(x => workOrds.Select(c => c.RecID).Contains((int)x.WorkOrdMasterRecID) && x.Domain == param.factoryId.ToString());
|
|
|
|
|
+ //资源检查结果
|
|
|
|
|
+ PschedDto rtn = new PschedDto();
|
|
|
|
|
+ //资源检查明细list
|
|
|
|
|
+ List<ExamineResult> examines = new List<ExamineResult>();
|
|
|
|
|
+ if (!mo_Mes_Morders.Any())
|
|
|
|
|
+ {
|
|
|
|
|
+ return rtn;
|
|
|
|
|
+ }
|
|
|
|
|
+ List<mes_morder> db_mes_morder = new List<mes_morder>();
|
|
|
|
|
+ db_mes_morder = mo_Mes_Morders;
|
|
|
|
|
+ //资源检查入参全局变量赋值
|
|
|
|
|
+ param.company_id = mo_Mes_Morders[0].company_id;
|
|
|
|
|
+ param.factoryId = mo_Mes_Morders[0].factory_id.GetValueOrDefault();
|
|
|
|
|
+ param.checkflag = false;
|
|
|
|
|
+ param.checkPlan = false;
|
|
|
|
|
+ param.writeNum = true;
|
|
|
|
|
+ //生成当前计算bangid
|
|
|
|
|
+ long bangid = help.NextId();
|
|
|
|
|
+
|
|
|
|
|
+ var morderIdList = mo_Mes_Morders.Select(s => s.Id).ToList();
|
|
|
|
|
+
|
|
|
|
|
+ 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 == param.company_id && p.factory_id == param.factoryId && !p.IsDeleted && mo_Mes_Moentries.Select(x => x.soentry_id).Contains(p.Id)).Result;
|
|
|
|
|
+
|
|
|
|
|
+ List<mo_ic_bom> boms = _ic_bom.GetListAsync(p => mo_Mes_Morders.Select(m => m.bom_number).Contains(p.bom_number) && p.factory_id == param.factoryId && p.company_id == param.company_id && !p.IsDeleted).Result.ToList();
|
|
|
|
|
+
|
|
|
|
|
+ //删除同步Mysql后旧数据
|
|
|
|
|
+ await DeleteMySqlOldData(sentrys);
|
|
|
|
|
+ //物料信息
|
|
|
|
|
+ List<mo_ic_item> icitemlist = new List<mo_ic_item>();
|
|
|
|
|
+
|
|
|
|
|
+ //物料库存表
|
|
|
|
|
+ List<mo_ic_item_stock> stocklist = new List<mo_ic_item_stock>();
|
|
|
|
|
+ //物料占用记录
|
|
|
|
|
+ List<mo_ic_item_stockoccupy> sklist = new List<mo_ic_item_stockoccupy>();
|
|
|
|
|
+ //工单物料信息组成bom清单
|
|
|
|
|
+ List<b_bom_pretreatment> pretreatments = new List<b_bom_pretreatment>();
|
|
|
|
|
+ workOrds.ForEach(x => {
|
|
|
|
|
+ b_bom_pretreatment bomChildExamineDto = new b_bom_pretreatment();
|
|
|
|
|
+ //bomChildExamineDto.fid = "";
|
|
|
|
|
+ //bomChildExamineDto.bom_child_id = "";
|
|
|
|
|
+ //bomChildExamineDto.bom_id = "";
|
|
|
|
|
+ //bomChildExamineDto.bom_number = "";
|
|
|
|
|
+ //bomChildExamineDto.qty = "";
|
|
|
|
|
+ //bomChildExamineDto.erp_cls = "";
|
|
|
|
|
+ //bomChildExamineDto.sourceid = "";
|
|
|
|
|
+ //bomChildExamineDto.company_id = "";
|
|
|
|
|
+ //bomChildExamineDto.Scrap = "";
|
|
|
|
|
+ //bomChildExamineDto.item_id = "";
|
|
|
|
|
+ //bomChildExamineDto.item_name = "";
|
|
|
|
|
+ //bomChildExamineDto.item_number = "";
|
|
|
|
|
+ //bomChildExamineDto.level = "";
|
|
|
|
|
+ //bomChildExamineDto.model = "";
|
|
|
|
|
+ //bomChildExamineDto.unit = "";
|
|
|
|
|
+ //bomChildExamineDto.num = "";
|
|
|
|
|
+ //bomChildExamineDto.parent_id = "";
|
|
|
|
|
+ //bomChildExamineDto.type = "";
|
|
|
|
|
+ //bomChildExamineDto.version = "";
|
|
|
|
|
+ //bomChildExamineDto.wastage = "";
|
|
|
|
|
+ //bomChildExamineDto.PurLT = "";
|
|
|
|
|
+ //bomChildExamineDto.clean_leadtime = "";
|
|
|
|
|
+ //bomChildExamineDto.factory_id = "";
|
|
|
|
|
+ pretreatments.Add(bomChildExamineDto);
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ await AsyncItemStockFromWMS(pretreatments);
|
|
|
|
|
+ //数据库快照-同步mysql库数据到mongoDB中
|
|
|
|
|
+ await DbSnapShot(param.company_id, param.factoryId, bangid, pretreatments);
|
|
|
|
|
+
|
|
|
|
|
+ DataInitialization(boms, bangid, icitemlist, stocklist, pretreatments, sklist);
|
|
|
|
|
+
|
|
|
|
|
+ List<mes_morder> priorityMorderList = new List<mes_morder>();
|
|
|
|
|
+ foreach (var work in workOrds)
|
|
|
|
|
+ {
|
|
|
|
|
+ var mo = mo_Mes_Morders.Find(s => s.morder_no == work.WorkOrd);
|
|
|
|
|
+
|
|
|
|
|
+ var routings = workOrdRoutings.Where(r => r.WorkOrd == work.WorkOrd).ToList();
|
|
|
|
|
+ if (routings.Any() && mo != null)
|
|
|
|
|
+ {
|
|
|
|
|
+ //最大生产数量
|
|
|
|
|
+ var QtyComplete = routings.Max(r => r.QtyComplete);
|
|
|
|
|
+ //修改订单需求数为在制数量
|
|
|
|
|
+ mo.need_number = mo.need_number - QtyComplete;
|
|
|
|
|
+ work.OpQtyCompleted = QtyComplete;
|
|
|
|
|
+ work.InProdcutQty = mo.need_number;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (mo != null)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (mo.need_number > 0)
|
|
|
|
|
+ {
|
|
|
|
|
+ priorityMorderList.Add(mo);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!priorityMorderList.Any())
|
|
|
|
|
+ {
|
|
|
|
|
+ priorityMorderList = mo_Mes_Morders;
|
|
|
|
|
+ }
|
|
|
|
|
+ _morderAppService.param = param;
|
|
|
|
|
+ _purchaseOrderAppService.param = param;
|
|
|
|
|
+ _CalcBomViewAppService.param = param;
|
|
|
|
|
+
|
|
|
|
|
+ List<string> GenerateMoList = new List<string>();
|
|
|
|
|
+ _CalcBomViewAppService.GenerateMoList = GenerateMoList;
|
|
|
|
|
+ _CalcBomViewAppService.newStockOccList = new List<mo_ic_item_stockoccupy>();
|
|
|
|
|
+ sklist = sklist.Where(s => !priorityMorderList.Select(p => p.morder_no).Contains(s.morder_mo)).ToList();
|
|
|
|
|
+ foreach (var item in priorityMorderList)
|
|
|
|
|
+ {
|
|
|
|
|
+ var moentry = mo_Mes_Moentries.Find(s => s.moentry_moid == item.Id);
|
|
|
|
|
+ if (moentry == null)
|
|
|
|
|
+ {
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+ var sentry = sentrys.Find(s => s.Id == moentry.soentry_id);
|
|
|
|
|
+
|
|
|
|
|
+ //工单资源检查信息
|
|
|
|
|
+ ExamineResult dtl = new ExamineResult();
|
|
|
|
|
+ dtl.morder_id = item.Id;
|
|
|
|
|
+ dtl.morder_no = item.morder_no;
|
|
|
|
|
+ dtl.bangid = bangid;
|
|
|
|
|
+ dtl.order_statr_time = item.start_time;
|
|
|
|
|
+ dtl.bom_number = item.bom_number;
|
|
|
|
|
+ dtl.need_qty = item.need_number.GetValueOrDefault();
|
|
|
|
|
+ dtl.prd_code = item.product_code;
|
|
|
|
|
+
|
|
|
|
|
+ //获取当前物料bom数据
|
|
|
|
|
+ List<b_bom_pretreatment> itemPrelist = new List<b_bom_pretreatment>();
|
|
|
|
|
+ //通过工单ID读取,考虑特殊工单的预处理
|
|
|
|
|
+ itemPrelist = pretreatments.Where(s => s.sourceid == item.Id).ToList();
|
|
|
|
|
+ if (!itemPrelist.Any())
|
|
|
|
|
+ {
|
|
|
|
|
+ var childBom = boms.Where(p => p.bom_number == item.bom_number).FirstOrDefault();
|
|
|
|
|
+ if (childBom != null)
|
|
|
|
|
+ {
|
|
|
|
|
+ itemPrelist = pretreatments.Where(s => s.sourceid == childBom.mysql_id).ToList();
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!itemPrelist.Any())
|
|
|
|
|
+ {
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ var getBomList = ObjectMapper.Map<List<b_bom_pretreatment>, List<BomChildExamineDto>>(itemPrelist);
|
|
|
|
|
+
|
|
|
|
|
+ if (sentry != null)
|
|
|
|
|
+ {
|
|
|
|
|
+ dtl.sentry_id = sentry.Id;
|
|
|
|
|
+ getBomList.ForEach(s => s.sentry_id = item.Id);
|
|
|
|
|
+ }
|
|
|
|
|
+ if (getBomList.Count == 1)
|
|
|
|
|
+ {
|
|
|
|
|
+ var isy = 1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ _CalcBomViewAppService.morder_type = item.morder_type;
|
|
|
|
|
+ _CalcBomViewAppService.mes_morder = item;
|
|
|
|
|
+ //库存初始化
|
|
|
|
|
+ _CalcBomViewAppService.BomStock(getBomList, stocklist, bangid);
|
|
|
|
|
+
|
|
|
|
|
+ //计算
|
|
|
|
|
+ _CalcBomViewAppService.CalcView(getBomList, bangid, item.need_number.GetValueOrDefault(), item.moentry_sys_stime, sklist, sentry, icitemlist);
|
|
|
|
|
+
|
|
|
|
|
+ //TODO:最晚开始时间
|
|
|
|
|
+ //var curFacDtl = leadTimeList.FirstOrDefault(p => p.item_id == childBom.icitem_id);
|
|
|
|
|
+ //物料齐套时间
|
|
|
|
|
+ dtl.kitting_times = getBomList.Where(p => p.is_use && p.kitting_time != null).OrderByDescending(m => m.kitting_time).First().kitting_time.GetValueOrDefault();
|
|
|
|
|
+ //kitting_time=null为自制组件跳过数据未进行计算,kitting_state=0的数据未参与计算
|
|
|
|
|
+ var qllist = getBomList.Where(x => x.use_qty == 0 && x.kitting_time != null && x.needCount != 0 && x.erp_cls != 4 && x.level != 1 && x.kitting_state != 0).ToList();
|
|
|
|
|
+ var work = workOrds.Find(x => x.WorkOrd == item.morder_no);
|
|
|
|
|
+ if (qllist.Any())
|
|
|
|
|
+ {
|
|
|
|
|
+ work.LocationStock = 0;
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ qllist = getBomList.Where(x => x.use_qty > 0 && x.kitting_time != null && x.needCount != 0 && x.erp_cls != 4 && x.level == 2 && x.kitting_state == 1).ToList();
|
|
|
|
|
+ if (qllist.Any())
|
|
|
|
|
+ {
|
|
|
|
|
+ //按比例计算成品齐套个数
|
|
|
|
|
+ work.LocationStock = qllist.Min(b => b.use_qty / b.qty) > work.QtyOrded ? work.QtyOrded : qllist.Min(b => b.use_qty / b.qty);
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ work.LocationStock = 0;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ //替代关系展开list
|
|
|
|
|
+ dtl.BomChildExamineList = getBomList;
|
|
|
|
|
+ //添加订单行开工信息
|
|
|
|
|
+ examines.Add(dtl);
|
|
|
|
|
+ }
|
|
|
|
|
+ rtn.examines = examines;
|
|
|
|
|
+ //检查结果写入数据库
|
|
|
|
|
+ await ExamineResultInsertDBAsync(examines);
|
|
|
|
|
+ //清空快照数据
|
|
|
|
|
+ await ClearSnapShot(bangid);
|
|
|
|
|
+ return rtn;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
//public void DetailDataInitialization(List<mo_ic_bom> boms, long bangid, List<mo_ic_item> icitemlist, List<mo_ic_item_stock> stocklist, List<b_bom_pretreatment> pretreatments, List<mo_ic_item_stockoccupy> sklist, bool writeNum = false)
|
|
//public void DetailDataInitialization(List<mo_ic_bom> boms, long bangid, List<mo_ic_item> icitemlist, List<mo_ic_item_stock> stocklist, List<b_bom_pretreatment> pretreatments, List<mo_ic_item_stockoccupy> sklist, bool writeNum = false)
|
|
|
//{
|
|
//{
|
|
@@ -5120,10 +4952,6 @@ namespace Business.ResourceExamineManagement
|
|
|
List<b_bom_pretreatment> addList = new List<b_bom_pretreatment>();
|
|
List<b_bom_pretreatment> addList = new List<b_bom_pretreatment>();
|
|
|
foreach (var bom in ic_Boms)
|
|
foreach (var bom in ic_Boms)
|
|
|
{
|
|
{
|
|
|
- if (bom.bom_number == "91HC0397")
|
|
|
|
|
- {
|
|
|
|
|
- var isy = 1;
|
|
|
|
|
- }
|
|
|
|
|
var pret = pretreatment.Where(s => s.sourceid == bom.mysql_id).ToList();
|
|
var pret = pretreatment.Where(s => s.sourceid == bom.mysql_id).ToList();
|
|
|
if (pret.Any())
|
|
if (pret.Any())
|
|
|
{
|
|
{
|
|
@@ -5438,7 +5266,7 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
}
|
|
|
var locStock = _invMaster.Select(a => itemChildList.Contains(a.ItemNum) && a.IsActive && a.Domain == param.factoryId.ToString() && locationList.Contains(a.Location));
|
|
var locStock = _invMaster.Select(a => itemChildList.Contains(a.ItemNum) && a.IsActive && a.Domain == param.factoryId.ToString() && locationList.Contains(a.Location));
|
|
|
//var sapInvList = _SAPInv.Select(a => a.WERKS == param.factoryId.ToString() && itemChildList.Contains(a.MATNR) && (a.SOBKZ.ToUpper() == "O" || locationList.Contains(a.LGORT)));
|
|
//var sapInvList = _SAPInv.Select(a => a.WERKS == param.factoryId.ToString() && itemChildList.Contains(a.MATNR) && (a.SOBKZ.ToUpper() == "O" || locationList.Contains(a.LGORT)));
|
|
|
- var sapInvList = _SAPInv.Select(a => a.WERKS == param.factoryId.ToString() && itemChildList.Contains(a.MATNR) && locationList.Contains(a.LGORT));
|
|
|
|
|
|
|
+ //var sapInvList = _SAPInv.Select(a => a.WERKS == param.factoryId.ToString() && itemChildList.Contains(a.MATNR) && locationList.Contains(a.LGORT));
|
|
|
//根据WMS物料,取出DOP物料数据
|
|
//根据WMS物料,取出DOP物料数据
|
|
|
var items = _mysql_ic_item.GetListAsync(a => itemChildList.Contains(a.number) && a.factory_id == param.factoryId).Result;
|
|
var items = _mysql_ic_item.GetListAsync(a => itemChildList.Contains(a.number) && a.factory_id == param.factoryId).Result;
|
|
|
|
|
|
|
@@ -5473,10 +5301,10 @@ namespace Business.ResourceExamineManagement
|
|
|
foreach (var lct in locationList)
|
|
foreach (var lct in locationList)
|
|
|
{
|
|
{
|
|
|
var lctQty = locStock.Where(s => s.ItemNum == item.icitem_number && s.Location == lct).Sum(p => p.AvailStatusQty.GetValueOrDefault() + p.Assay.GetValueOrDefault());
|
|
var lctQty = locStock.Where(s => s.ItemNum == item.icitem_number && s.Location == lct).Sum(p => p.AvailStatusQty.GetValueOrDefault() + p.Assay.GetValueOrDefault());
|
|
|
- if (lctQty == 0)
|
|
|
|
|
- {
|
|
|
|
|
- lctQty = sapInvList.Where(x => x.MATNR == item.icitem_number && x.LGORT == lct).Sum(p => p.LABST + p.INSME);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ //if (lctQty == 0)
|
|
|
|
|
+ //{
|
|
|
|
|
+ // lctQty = sapInvList.Where(x => x.MATNR == item.icitem_number && x.LGORT == lct).Sum(p => p.LABST + p.INSME);
|
|
|
|
|
+ //}
|
|
|
item.sqty += lctQty;
|
|
item.sqty += lctQty;
|
|
|
}
|
|
}
|
|
|
/*if (param.checkPlan)
|
|
/*if (param.checkPlan)
|
|
@@ -7162,7 +6990,7 @@ namespace Business.ResourceExamineManagement
|
|
|
locationList = locationRange.Val.SplitToArray(",").ToList();
|
|
locationList = locationRange.Val.SplitToArray(",").ToList();
|
|
|
}
|
|
}
|
|
|
//SAP库存表
|
|
//SAP库存表
|
|
|
- var itemListStock = _SAPInv.Select(a => items.Contains(a.MATNR) && locationList.Contains(a.LGORT) && a.WERKS == domain);
|
|
|
|
|
|
|
+ //var itemListStock = _SAPInv.Select(a => items.Contains(a.MATNR) && locationList.Contains(a.LGORT) && a.WERKS == domain);
|
|
|
//Dop库存表包含VMI库存
|
|
//Dop库存表包含VMI库存
|
|
|
var itemListVMIStock = _invMaster.Select(a => items.Contains(a.ItemNum) && a.IsActive && locationList.Contains(a.Location) && a.Domain == domain);
|
|
var itemListVMIStock = _invMaster.Select(a => items.Contains(a.ItemNum) && a.IsActive && locationList.Contains(a.Location) && a.Domain == domain);
|
|
|
List<ic_demandschedule> ds = new List<ic_demandschedule>();
|
|
List<ic_demandschedule> ds = new List<ic_demandschedule>();
|
|
@@ -7183,10 +7011,10 @@ namespace Business.ResourceExamineManagement
|
|
|
foreach (var loc in locationList)
|
|
foreach (var loc in locationList)
|
|
|
{
|
|
{
|
|
|
var lctQty = itemListVMIStock.Where(s => s.ItemNum == item && s.Location==loc).Sum(p => p.AvailStatusQty.GetValueOrDefault() + p.Assay.GetValueOrDefault());
|
|
var lctQty = itemListVMIStock.Where(s => s.ItemNum == item && s.Location==loc).Sum(p => p.AvailStatusQty.GetValueOrDefault() + p.Assay.GetValueOrDefault());
|
|
|
- if (lctQty == 0)
|
|
|
|
|
- {
|
|
|
|
|
- lctQty = itemListStock.Where(s => s.MATNR == item && s.LGORT == loc).Sum(p => p.LABST + p.INSME);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ //if (lctQty == 0)
|
|
|
|
|
+ //{
|
|
|
|
|
+ // lctQty = itemListStock.Where(s => s.MATNR == item && s.LGORT == loc).Sum(p => p.LABST + p.INSME);
|
|
|
|
|
+ //}
|
|
|
if (!weekStockQty.ContainsKey(item))
|
|
if (!weekStockQty.ContainsKey(item))
|
|
|
{
|
|
{
|
|
|
weekStockQty.Add(item, lctQty);
|
|
weekStockQty.Add(item, lctQty);
|