齐套、转库单载具表回写任务信息
This commit is contained in:
@@ -58,6 +58,8 @@ using Tnb.WarehouseMgr.Entities.Dto.Queries;
|
||||
using Tnb.WarehouseMgr.Entities.Entity;
|
||||
using Tnb.WarehouseMgr.Entities.Enums;
|
||||
using Tnb.WarehouseMgr.Interfaces;
|
||||
using Org.BouncyCastle.Bcpg.OpenPgp;
|
||||
using JNPF.Systems.Entitys.Permission;
|
||||
|
||||
namespace Tnb.ProductionMgr
|
||||
{
|
||||
@@ -2725,9 +2727,11 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行生成物料齐套配送记录");
|
||||
LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行生成物料齐套配送记录");
|
||||
|
||||
List<PrdMoTask> prdMoTasks = await db_WmsMaterialkit.Queryable<PrdMoTask>().Where(r => r.mo_task_status == DictConst.InProgressEnCode
|
||||
List<PrdMoTask> prdMoTasks = await db_WmsMaterialkit.Queryable<PrdMoTask>().Where(r => r.mo_task_status == DictConst.InProgressEnCode
|
||||
&& !string.IsNullOrEmpty(r.parent_id)).ToListAsync();
|
||||
LoggerWmsMaterialkit.LogInformation($"查找到进行中的任务单:{string.Join(',', prdMoTasks.Select(r => r.mo_task_code))}");
|
||||
|
||||
Dictionary<string, object> workstaiondic = db_WmsMaterialkit.Queryable<OrganizeEntity>().ToDictionary(k => k.Id, v => v.EnCode);
|
||||
foreach (PrdMoTask prdMoTask in prdMoTasks)
|
||||
{
|
||||
List<PrdMoTask> rep_prdMoTasks = prdMoTasks.Where(r => r.workstation_id == prdMoTask.workstation_id && r.id != prdMoTask.id).ToList();
|
||||
@@ -2793,23 +2797,86 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
LoggerWmsMaterialkit.LogWarning($"任务单{prdMoTask.mo_task_code}绑定的生产Bom id{prdMoTask.bom_id}下的物料id{input.material_id}在物料档案中不存在");
|
||||
continue;
|
||||
}
|
||||
WmsMaterialkitRecordD wmsMaterialkitRecordD = new WmsMaterialkitRecordD();
|
||||
wmsMaterialkitRecordD.create_id = WmsWareHouseConst.AdministratorUserId;
|
||||
wmsMaterialkitRecordD.create_time = DateTime.Now;
|
||||
wmsMaterialkitRecordD.bill_id = wmsMaterialkitRecordH.id;
|
||||
wmsMaterialkitRecordD.material_id = material.id;
|
||||
wmsMaterialkitRecordD.material_code = material.code;
|
||||
wmsMaterialkitRecordD.material_name = material.name;
|
||||
wmsMaterialkitRecordD.material_specification = material.material_specification;
|
||||
wmsMaterialkitRecordD.unit_code = material.unit_id;
|
||||
wmsMaterialkitRecordD.plan_qty = prdMoTask.scheduled_qty * input.denominator / input.molecule;
|
||||
wmsMaterialkitRecordD.yxf_qty = 0;
|
||||
wmsMaterialkitRecordD.molecule = input.molecule;
|
||||
wmsMaterialkitRecordD.denominator = input.denominator;
|
||||
wmsMaterialkitRecordD.status = WmsWareHouseConst.BILLSTATUS_ADD_ID;
|
||||
wmsMaterialkitRecordD.times = 0;
|
||||
wmsMaterialkitRecordD.total_time = 0;
|
||||
wmsMaterialkitRecordDs.Add(wmsMaterialkitRecordD);
|
||||
|
||||
// 暂存仓库存
|
||||
var zccinventory = await db_WmsMaterialkit.Queryable<WmsCarryH>()
|
||||
.InnerJoin<BasLocation>((a, b) => a.location_id == b.id)
|
||||
.InnerJoin<WmsCarryD>((a, b, c) => a.id == c.carry_id)
|
||||
.InnerJoin<WmsCarryCode>((a, b, c, d) => c.membercarry_id == d.carry_id)
|
||||
.InnerJoin<BasMaterial>((a, b, c, d, e) => d.material_id == e.id)
|
||||
.Where((a, b, c, d, e) => b.wh_id == WmsWareHouseConst.WAREHOUSE_ZCC_ID && e.id == material.id && a.work_station == workstaiondic[prdMoTask.workstation_id].ToString())
|
||||
.Select((a, b, c, d, e) => new customInventoryEntity
|
||||
{
|
||||
material_id = e.id,
|
||||
material_code = e.code,
|
||||
material_name = e.name,
|
||||
material_specification = e.material_specification,
|
||||
codeqty = d.codeqty,
|
||||
unit_code = d.unit_id
|
||||
}).ToListAsync();
|
||||
|
||||
// 正在配送
|
||||
var inroadinventory = await db_WmsMaterialkit.Queryable<WmsPretaskH>()
|
||||
.InnerJoin<WmsCarryH>((a, b) => a.carry_id == b.id)
|
||||
.InnerJoin<WmsCarryCode>((a, b, c) => c.carry_id == b.id)
|
||||
.InnerJoin<BasMaterial>((a, b, c, d) => d.id == c.material_id)
|
||||
.InnerJoin<WmsMaterialTransferCarry>((a, b, c, d, e) => a.id == e.pretask_id)
|
||||
.InnerJoin<WmsMaterialTransferD>((a, b, c, d, e, f) => e.mat_bill_id == f.id)
|
||||
.Where((a, b, c, d, e, f) => a.status != WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID && a.status != WmsWareHouseConst.PRETASK_BILL_STATUS_CANCEL_ID
|
||||
&& (a.endlocation_id == WmsWareHouseConst.ZZCSSX121009 || a.endlocation_id == WmsWareHouseConst.ZZCSSX121010) && d.id == material.id && f.station_code == workstaiondic[prdMoTask.workstation_id].ToString())
|
||||
.Select((a, b, c, d) => new customInventoryEntity
|
||||
{
|
||||
material_id = d.id,
|
||||
material_code = d.code,
|
||||
material_name = d.name,
|
||||
material_specification = d.material_specification,
|
||||
codeqty = c.codeqty,
|
||||
unit_code = c.unit_id
|
||||
}).ToListAsync();
|
||||
|
||||
|
||||
|
||||
List<customInventoryEntity> inventory = new List<customInventoryEntity>();
|
||||
inventory.AddRange(zccinventory);
|
||||
inventory.AddRange(inroadinventory);
|
||||
|
||||
inventory.GroupBy(g => new { g.material_id, g.material_code, g.material_name, g.material_specification, g.unit_code }).Select(g =>
|
||||
{
|
||||
customInventoryEntity newinventory = new customInventoryEntity();
|
||||
newinventory.material_id = g.Key.material_id;
|
||||
newinventory.material_code = g.Key.material_code;
|
||||
newinventory.material_name = g.Key.material_name;
|
||||
newinventory.material_specification = g.Key.material_specification;
|
||||
newinventory.unit_code = g.Key.unit_code;
|
||||
newinventory.codeqty = inventory.Where(r => r.material_id == newinventory.material_id && r.unit_code == newinventory.unit_code).Sum(s => s.codeqty);
|
||||
|
||||
return newinventory;
|
||||
});
|
||||
|
||||
|
||||
// 查询已有库存 (多工单情况下要考虑库存是否被其它工单预留 暂定)
|
||||
decimal? exists_qty = inventory.Sum(r => r.codeqty);
|
||||
|
||||
if (exists_qty < prdMoTask.scheduled_qty * input.denominator / input.molecule)
|
||||
{
|
||||
WmsMaterialkitRecordD wmsMaterialkitRecordD = new WmsMaterialkitRecordD();
|
||||
wmsMaterialkitRecordD.create_id = WmsWareHouseConst.AdministratorUserId;
|
||||
wmsMaterialkitRecordD.create_time = DateTime.Now;
|
||||
wmsMaterialkitRecordD.bill_id = wmsMaterialkitRecordH.id;
|
||||
wmsMaterialkitRecordD.material_id = material.id;
|
||||
wmsMaterialkitRecordD.material_code = material.code;
|
||||
wmsMaterialkitRecordD.material_name = material.name;
|
||||
wmsMaterialkitRecordD.material_specification = material.material_specification;
|
||||
wmsMaterialkitRecordD.unit_code = material.unit_id;
|
||||
wmsMaterialkitRecordD.plan_qty = prdMoTask.scheduled_qty * input.denominator / input.molecule - exists_qty;
|
||||
wmsMaterialkitRecordD.yxf_qty = 0;
|
||||
wmsMaterialkitRecordD.molecule = input.molecule;
|
||||
wmsMaterialkitRecordD.denominator = input.denominator;
|
||||
wmsMaterialkitRecordD.status = WmsWareHouseConst.BILLSTATUS_ADD_ID;
|
||||
wmsMaterialkitRecordD.times = 0;
|
||||
wmsMaterialkitRecordD.total_time = 0;
|
||||
wmsMaterialkitRecordDs.Add(wmsMaterialkitRecordD);
|
||||
}
|
||||
}
|
||||
|
||||
await db_WmsMaterialkit.Insertable(wmsMaterialkitRecordH).ExecuteCommandAsync();
|
||||
@@ -2834,73 +2901,16 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
foreach (WmsMaterialkitRecordH wmsMaterialkitRecord in wmsMaterialkitRecordHs)
|
||||
{
|
||||
List<WmsMaterialTransferD> wmsMaterialTransferDs = await db_WmsMaterialkit.Queryable<WmsMaterialTransferD>()
|
||||
.Where(r => wmsMaterialTransfers.Select(x => x.id).Contains(r.bill_id) && r.station_code == wmsMaterialkitRecord.workstation_id).OrderBy(r => r.id).ToListAsync();
|
||||
.Where(r => wmsMaterialTransfers.Select(x => x.id).Contains(r.bill_id) && r.station_code == workstaiondic[wmsMaterialkitRecord.workstation_id].ToString()).OrderBy(r => r.id).ToListAsync();
|
||||
List<WmsMaterialkitRecordD> wmsMaterialkitRecordDs = await db_WmsMaterialkit.Queryable<WmsMaterialkitRecordD>()
|
||||
.Where(r => r.bill_id == wmsMaterialkitRecord.id && r.status != WmsWareHouseConst.BILLSTATUS_COMPLETE_ID && r.status != WmsWareHouseConst.BILLSTATUS_CANCEL_ID).ToListAsync();
|
||||
foreach (WmsMaterialkitRecordD wmsMaterialkitRecordD in wmsMaterialkitRecordDs)
|
||||
{
|
||||
Stopwatch stopwatch2 = new Stopwatch();
|
||||
stopwatch2.Start();
|
||||
// 暂存仓库存
|
||||
var zccinventory = await db_WmsMaterialkit.Queryable<WmsCarryH>()
|
||||
.InnerJoin<BasLocation>((a, b) => a.location_id == b.id)
|
||||
.InnerJoin<WmsCarryD>((a, b, c) => a.id == c.carry_id)
|
||||
.InnerJoin<WmsCarryCode>((a, b, c, d) => c.membercarry_id == d.carry_id)
|
||||
.InnerJoin<BasMaterial>((a, b, c, d, e) => d.material_id == e.id)
|
||||
.Where((a, b, c, d, e) => b.wh_id == WmsWareHouseConst.WAREHOUSE_ZCC_ID && e.id == wmsMaterialkitRecordD.material_id)
|
||||
.Select((a, b, c, d, e) => new customInventoryEntity
|
||||
{
|
||||
material_id = e.id,
|
||||
material_code = e.code,
|
||||
material_name = e.name,
|
||||
material_specification = e.material_specification,
|
||||
codeqty = d.codeqty,
|
||||
unit_code = d.unit_id
|
||||
}).ToListAsync();
|
||||
|
||||
// 正在配送
|
||||
var inroadinventory = await db_WmsMaterialkit.Queryable<WmsPretaskH>()
|
||||
.InnerJoin<WmsCarryH>((a, b) => a.carry_id == b.id)
|
||||
.InnerJoin<WmsCarryCode>((a, b, c) => c.carry_id == b.id)
|
||||
.InnerJoin<BasMaterial>((a, b, c, d) => d.id == c.material_id)
|
||||
.Where((a, b, c, d) => a.status != WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID && a.status != WmsWareHouseConst.PRETASK_BILL_STATUS_CANCEL_ID
|
||||
&& (a.endlocation_id == WmsWareHouseConst.ZZCSSX121009 || a.endlocation_id == WmsWareHouseConst.ZZCSSX121010) && d.id == wmsMaterialkitRecordD.material_id)
|
||||
.Select((a, b, c, d) => new customInventoryEntity
|
||||
{
|
||||
material_id = d.id,
|
||||
material_code = d.code,
|
||||
material_name = d.name,
|
||||
material_specification = d.material_specification,
|
||||
codeqty = c.codeqty,
|
||||
unit_code = c.unit_id
|
||||
}).ToListAsync();
|
||||
|
||||
List<customInventoryEntity> inventory = new List<customInventoryEntity>();
|
||||
inventory.AddRange(zccinventory);
|
||||
inventory.AddRange(inroadinventory);
|
||||
|
||||
inventory.GroupBy(g => new { g.material_id, g.material_code, g.material_name, g.material_specification, g.unit_code }).Select(g =>
|
||||
{
|
||||
customInventoryEntity newinventory = new customInventoryEntity();
|
||||
newinventory.material_id = g.Key.material_id;
|
||||
newinventory.material_code = g.Key.material_code;
|
||||
newinventory.material_name = g.Key.material_name;
|
||||
newinventory.material_specification = g.Key.material_specification;
|
||||
newinventory.unit_code = g.Key.unit_code;
|
||||
newinventory.codeqty = inventory.Where(r => r.material_id == newinventory.material_id && r.unit_code == newinventory.unit_code).Sum(s => s.codeqty);
|
||||
|
||||
return newinventory;
|
||||
});
|
||||
|
||||
// 需要下发的数量
|
||||
decimal? need_qty = wmsMaterialkitRecordD.plan_qty - wmsMaterialkitRecordD.yxf_qty;
|
||||
|
||||
// 查询已有库存 (多工单情况下要考虑库存是否被其它工单预留 暂定)
|
||||
decimal? exists_qty = inventory.Sum(r => r.codeqty);
|
||||
need_qty = need_qty - exists_qty;
|
||||
if (need_qty <= 0)
|
||||
break;
|
||||
|
||||
// 查询转库单
|
||||
List<WmsMaterialTransferD> _wmsMaterialTransferDs = wmsMaterialTransferDs.Where(r => r.material_id == wmsMaterialkitRecordD.material_id).ToList();
|
||||
await db_WmsMaterialkit.Ado.BeginTranAsync();
|
||||
|
||||
Reference in New Issue
Block a user