|
|
@@ -13,6 +13,8 @@ using Business.StructuredDB.Production;
|
|
|
using Business.StructuredDB.Replenishment;
|
|
|
using Business.StructuredDB.SaleFcst;
|
|
|
using Business.StructuredDB.WMS;
|
|
|
+using Business.SystemJob;
|
|
|
+using Business.SystemJobManagement;
|
|
|
using EFCore.BulkExtensions;
|
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
using MongoDB.Driver;
|
|
|
@@ -254,6 +256,7 @@ namespace Business.Replenishment
|
|
|
private readonly BusinessDbContext _businessDbContext;
|
|
|
private readonly ICurrentTenant _currentTenant;
|
|
|
private readonly IUnitOfWorkManager _unitOfWorkManager;
|
|
|
+ private readonly SystemJobAppService _systemJobAppService;
|
|
|
#endregion
|
|
|
|
|
|
#region 构造函数
|
|
|
@@ -355,7 +358,8 @@ namespace Business.Replenishment
|
|
|
ISqlRepository<PurOrdMaster> PurOrdMaster,
|
|
|
ISqlRepository<DeliveryExceptionMaster> DeliveryExceptionMaster,
|
|
|
ISqlRepository<scm_shdzb> scm_shdzb,
|
|
|
- IUnitOfWorkManager unitOfWorkManager)
|
|
|
+ IUnitOfWorkManager unitOfWorkManager,
|
|
|
+ SystemJobAppService systemJobAppService)
|
|
|
{
|
|
|
_replenishmentROPWeekPlan = replenishmentROPWeekPlan;
|
|
|
_ASNBOLShipperDetail = ASNBOLShipperDetail;
|
|
|
@@ -454,6 +458,7 @@ namespace Business.Replenishment
|
|
|
_PurOrdMaster = PurOrdMaster;
|
|
|
_DeliveryExceptionMaster = DeliveryExceptionMaster;
|
|
|
_scm_shdzb = scm_shdzb;
|
|
|
+ _systemJobAppService = systemJobAppService;
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
@@ -4842,7 +4847,7 @@ namespace Business.Replenishment
|
|
|
}
|
|
|
var pretreatList = pretreatments.Select(x => x.item_number).Distinct().ToList();
|
|
|
itemNums.AddRange(pretreatList);
|
|
|
- AsyncItemStockFromWMS(itemNums, analogCalcVersion);
|
|
|
+ await AsyncItemStockFromWMS(itemNums, analogCalcVersion);
|
|
|
|
|
|
//数据库快照-同步mysql库数据到mongoDB中
|
|
|
await DbSnapShot(input.company_id, input.factoryId, bangid, pretreatments, analogCalcVersion);
|
|
|
@@ -4880,9 +4885,24 @@ namespace Business.Replenishment
|
|
|
dtl.need_qty = item.need_number.GetValueOrDefault();
|
|
|
|
|
|
//获取当前物料bom数据
|
|
|
- var childBom = boms.Where(p => p.bom_number == item.bom_number).FirstOrDefault();
|
|
|
+ //var childBom = boms.Where(p => p.bom_number == item.bom_number).FirstOrDefault();
|
|
|
|
|
|
- var itemPrelist = pretreatments.Where(s => s.sourceid == childBom.mysql_id).ToList();
|
|
|
+ //获取当前物料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;
|
|
|
@@ -4905,7 +4925,7 @@ namespace Business.Replenishment
|
|
|
_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);
|
|
|
+ //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();
|
|
|
//替代关系展开list
|
|
|
@@ -6030,66 +6050,67 @@ namespace Business.Replenishment
|
|
|
/// </summary>
|
|
|
public void AutoCreateBomBill(string companyid, List<mo_ic_bom> ic_Boms = null)
|
|
|
{
|
|
|
- bool flag = false;
|
|
|
- if (ic_Boms == null)
|
|
|
- {
|
|
|
- flag = true;
|
|
|
- ic_Boms = _ic_bom.GetListAsync(p => p.company_id.ToString() == companyid && !p.IsDeleted).Result.ToList();
|
|
|
- }
|
|
|
- var pretreatment = _mysql_b_bom_pretreatment.GetListAsync(s => ic_Boms.Select(c => c.mysql_id).ToList().Contains(s.sourceid)).Result;
|
|
|
-
|
|
|
- param.company_id = long.Parse(companyid);
|
|
|
-
|
|
|
- //物料bom
|
|
|
- List<mo_ic_bom> bomlist = new List<mo_ic_bom>();
|
|
|
- List<mo_ic_bom_child> bomchildlist = new List<mo_ic_bom_child>();
|
|
|
- //物料信息
|
|
|
- List<mo_ic_item> icitemlist = new List<mo_ic_item>();
|
|
|
- //替代关系
|
|
|
- List<mo_ic_substitute> sublist = new List<mo_ic_substitute>();
|
|
|
- List<mo_ic_substitute_group> suballlist = new List<mo_ic_substitute_group>();
|
|
|
- List<mo_ic_substitute_group_detail> subdtllist = new List<mo_ic_substitute_group_detail>();
|
|
|
- IcItemPretreatment(flag, ic_Boms, bomlist, bomchildlist, icitemlist, sublist, suballlist, subdtllist);
|
|
|
-
|
|
|
- List<b_bom_pretreatment> deleteList = new List<b_bom_pretreatment>();
|
|
|
- List<b_bom_pretreatment> addList = new List<b_bom_pretreatment>();
|
|
|
- foreach (var bom in ic_Boms)
|
|
|
+ try
|
|
|
{
|
|
|
- /*var pret = pretreatment.Find(s => s.sourceid == bom.mysql_id && s.bom_id == bom.mysql_id);
|
|
|
- if (pret != null)
|
|
|
+ bool flag = false;
|
|
|
+ if (ic_Boms == null)
|
|
|
{
|
|
|
- if (pret.version == bom.version)
|
|
|
+ flag = true;
|
|
|
+ ic_Boms = _ic_bom.GetListAsync(p => p.company_id.ToString() == companyid && !p.IsDeleted).Result.ToList();
|
|
|
+ }
|
|
|
+ var pretreatment = _mysql_b_bom_pretreatment.GetListAsync(s => ic_Boms.Select(c => c.mysql_id).ToList().Contains(s.sourceid)).Result;
|
|
|
+
|
|
|
+ param.company_id = long.Parse(companyid);
|
|
|
+
|
|
|
+ //物料bom
|
|
|
+ List<mo_ic_bom> bomlist = new List<mo_ic_bom>();
|
|
|
+ List<mo_ic_bom_child> bomchildlist = new List<mo_ic_bom_child>();
|
|
|
+ //物料信息
|
|
|
+ List<mo_ic_item> icitemlist = new List<mo_ic_item>();
|
|
|
+ //替代关系
|
|
|
+ List<mo_ic_substitute> sublist = new List<mo_ic_substitute>();
|
|
|
+ List<mo_ic_substitute_group> suballlist = new List<mo_ic_substitute_group>();
|
|
|
+ List<mo_ic_substitute_group_detail> subdtllist = new List<mo_ic_substitute_group_detail>();
|
|
|
+ IcItemPretreatment(flag, ic_Boms, bomlist, bomchildlist, icitemlist, sublist, suballlist, subdtllist);
|
|
|
+
|
|
|
+ List<b_bom_pretreatment> deleteList = new List<b_bom_pretreatment>();
|
|
|
+ List<b_bom_pretreatment> addList = new List<b_bom_pretreatment>();
|
|
|
+ foreach (var bom in ic_Boms)
|
|
|
+ {
|
|
|
+ var pret = pretreatment.Where(s => s.sourceid == bom.mysql_id).ToList();
|
|
|
+ if (pret.Any())
|
|
|
{
|
|
|
- //如果存在,且版本相同,则不需要处理
|
|
|
- continue;
|
|
|
+ //版本不同则重新生成
|
|
|
+ deleteList.AddRange(pret);
|
|
|
}
|
|
|
- //版本不同则重新生成
|
|
|
- deleteList.Add(pret);
|
|
|
- }*/
|
|
|
- deleteList.AddRange(pretreatment);
|
|
|
- //bom层级组装
|
|
|
- var getBomList = _pretreatmentAppService.BomPretreatment(bom.mysql_id, bomlist, bomchildlist, icitemlist);
|
|
|
- //bom替代关系组装
|
|
|
- _pretreatmentAppService.BomSubstitute(getBomList, bomlist, bomchildlist, icitemlist, sublist, suballlist, subdtllist);
|
|
|
-
|
|
|
- //GenerateSort(getBomList);
|
|
|
- var list = ObjectMapper.Map<List<BomChildExamineDto>, List<b_bom_pretreatment>>(getBomList);
|
|
|
- list.ForEach(s =>
|
|
|
- {
|
|
|
- s.sourceid = bom.mysql_id;
|
|
|
- s.company_id = bom.company_id;
|
|
|
- s.tenant_id = bom.tenant_id;
|
|
|
- s.factory_id = bom.factory_id;
|
|
|
- });
|
|
|
- addList.AddRange(list);
|
|
|
- }
|
|
|
- if (deleteList.Any())
|
|
|
- {
|
|
|
- _businessDbContext.BulkDelete(deleteList);
|
|
|
+ //bom层级组装
|
|
|
+ var getBomList = _pretreatmentAppService.BomPretreatment(bom.mysql_id, bomlist, bomchildlist, icitemlist);
|
|
|
+ //bom替代关系组装
|
|
|
+ _pretreatmentAppService.BomSubstitute(getBomList, bomlist, bomchildlist, icitemlist, sublist, suballlist, subdtllist);
|
|
|
+
|
|
|
+ //GenerateSort(getBomList);
|
|
|
+ var list = ObjectMapper.Map<List<BomChildExamineDto>, List<b_bom_pretreatment>>(getBomList);
|
|
|
+ list.ForEach(s =>
|
|
|
+ {
|
|
|
+ s.sourceid = bom.mysql_id;
|
|
|
+ s.company_id = bom.company_id;
|
|
|
+ s.tenant_id = bom.tenant_id;
|
|
|
+ s.factory_id = bom.factory_id;
|
|
|
+ });
|
|
|
+ addList.AddRange(list);
|
|
|
+ }
|
|
|
+ if (deleteList.Any())
|
|
|
+ {
|
|
|
+ _businessDbContext.BulkDelete(deleteList);
|
|
|
+ }
|
|
|
+ if (addList.Any())
|
|
|
+ {
|
|
|
+ _businessDbContext.BulkInsert(addList);
|
|
|
+ }
|
|
|
}
|
|
|
- if (addList.Any())
|
|
|
+ catch (Exception e)
|
|
|
{
|
|
|
- _businessDbContext.BulkInsert(addList);
|
|
|
+ new NLogHelper("ResourceExamineAppService").WriteLog("AutoCreateBomBill", "自动生成BOM预处理清单:" + e.Message, _currentTenant.Id.ToString());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -6580,8 +6601,10 @@ namespace Business.Replenishment
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- public void AsyncItemStockFromWMS(List<string> itemList,string analogCalcVersion)
|
|
|
+ public async Task AsyncItemStockFromWMS(List<string> itemList,string analogCalcVersion)
|
|
|
{
|
|
|
+ //释放库存占用记录
|
|
|
+ await _systemJobAppService.SyncItemStockOccupyClear();
|
|
|
//产品编码
|
|
|
//var itemList = bom_Pretreatments.Select(a => a.item_number).Distinct().ToList();
|
|
|
List<string> itemChildList = new List<string>();
|