电梯并行优化,取消与重置任务逻辑优化
This commit is contained in:
@@ -117,7 +117,7 @@ namespace Tnb.ProductionMgr
|
||||
public SemaphoreSlim s_taskF2KTPsupplement = new(1);
|
||||
public SemaphoreSlim s_taskYCLInternalTransfer = new(1);
|
||||
|
||||
public SemaphoreSlim s_elevatortask = new(1);
|
||||
public Dictionary<string, SemaphoreSlim> s_elevatortaskDic = new();
|
||||
|
||||
private StackExRedisHelper _redisData;
|
||||
private readonly IPrdInstockService _prdInstockService;
|
||||
@@ -138,7 +138,7 @@ namespace Tnb.ProductionMgr
|
||||
private ISqlSugarClient db_Floor4DMJ2MJX;
|
||||
private ISqlSugarClient db_Floor4MJX2MJC;
|
||||
private ISqlSugarClient db_Floor4DMC2CPK;
|
||||
private ISqlSugarClient db_ElevatorTaskExceptionHandle;
|
||||
private List<ISqlSugarClient> db_ElevatorTaskExceptionHandles = new ();
|
||||
private ISqlSugarClient db_F2KTPsupplement;
|
||||
private ISqlSugarClient db_YCLInternalTransfer;
|
||||
|
||||
@@ -196,9 +196,18 @@ namespace Tnb.ProductionMgr
|
||||
db_Floor4DMJ2MJX = repository.CopyNew();
|
||||
db_Floor4MJX2MJC = repository.CopyNew();
|
||||
db_Floor4DMC2CPK = repository.CopyNew();
|
||||
db_ElevatorTaskExceptionHandle = repository.CopyNew();
|
||||
db_F2KTPsupplement = repository.CopyNew();
|
||||
db_YCLInternalTransfer = repository.CopyNew();
|
||||
|
||||
List<string> elevatorAreas = repository.CopyNew().Queryable<WmsElevatorH>().Select(r => r.area_code).Distinct().ToList();
|
||||
foreach (var s_elevatorArea in elevatorAreas)
|
||||
{
|
||||
ISqlSugarClient db_ElevatorTaskExceptionHandle = repository.CopyNew();
|
||||
db_ElevatorTaskExceptionHandles.Add(db_ElevatorTaskExceptionHandle);
|
||||
SemaphoreSlim s_elevatortask = new(1);
|
||||
s_elevatortaskDic.Add(s_elevatorArea, s_elevatortask);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -1918,98 +1927,123 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
|
||||
async void ElevatorTaskExceptionHandle(object args)
|
||||
{
|
||||
if (s_elevatortask.CurrentCount == 0)
|
||||
return;
|
||||
|
||||
try
|
||||
Task[] taskActions = new Task[s_elevatortaskDic.Count];
|
||||
int index = 0;
|
||||
foreach (string area in s_elevatortaskDic.Keys)
|
||||
{
|
||||
SemaphoreSlim s_elevatortask = s_elevatortaskDic[area];
|
||||
|
||||
if (s_elevatortask.CurrentCount == 0)
|
||||
return;
|
||||
|
||||
await s_elevatortask.WaitAsync();
|
||||
List<WmsDistaskH> elevatorTasks = db_ElevatorTaskExceptionHandle.Queryable<WmsDistaskH>()
|
||||
.Where(r => r.startlocation_code.Contains("DT") && r.endlocation_code.Contains("DT") && r.act_start_date == null && r.act_end_date == null
|
||||
&& r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).ToList();
|
||||
|
||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】检查到需要恢复/执行的电梯任务{elevatorTasks.Count}条 {string.Join(',', elevatorTasks.Select(x => x.bill_code))}");
|
||||
|
||||
|
||||
if (elevatorTasks?.Count > 0)
|
||||
var db_ElevatorTaskExceptionHandle = db_ElevatorTaskExceptionHandles[index];
|
||||
taskActions[index] = Task.Run(async () =>
|
||||
{
|
||||
List<IGrouping<string, WmsDistaskH>> elevatorTaskGroup = elevatorTasks.GroupBy(r => $"{r.endlocation_code} {r.end_floor}").ToList();
|
||||
foreach (IGrouping<string, WmsDistaskH> group in elevatorTaskGroup)
|
||||
try
|
||||
{
|
||||
List<WmsDistaskH> wmsDistaskHs = group.ToList();
|
||||
ElevagorInfoQuery q = new() { endlocation_id = wmsDistaskHs[0].endlocation_id, taskCode = wmsDistaskHs[0].bill_code };
|
||||
LoggerElevatorTask.Information($"【GenTaskExecute】执行电梯任务时 根据任务单号获取电梯参数 {JsonConvert.SerializeObject(q)}");
|
||||
var e = await _wareHouseService.FindElevatorFromPars(q);
|
||||
LoggerElevatorTask.Information($"【GenTaskExecute】执行电梯任务时 根据任务单号获取电梯结果 {JsonConvert.SerializeObject(e)}");
|
||||
List<WmsDistaskH> elevatorTasks = db_ElevatorTaskExceptionHandle.Queryable<WmsDistaskH>()
|
||||
.Where(r => r.area_code == area && r.act_start_date == null && r.act_end_date == null
|
||||
&& r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).ToList();
|
||||
|
||||
// 三、四号梯发货带两托货
|
||||
string[] doubleCarryRunElevators =
|
||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】检查到需要恢复/执行的电梯任务{elevatorTasks.Count}条 {string.Join(',', elevatorTasks.Select(x => x.bill_code))}");
|
||||
|
||||
|
||||
if (elevatorTasks?.Count > 0)
|
||||
{
|
||||
List<IGrouping<string, WmsDistaskH>> elevatorTaskGroup = elevatorTasks.GroupBy(r => $"{r.endlocation_code} {r.end_floor}").ToList();
|
||||
foreach (IGrouping<string, WmsDistaskH> group in elevatorTaskGroup)
|
||||
{
|
||||
List<WmsDistaskH> wmsDistaskHs = group.ToList();
|
||||
ElevagorInfoQuery q = new() { endlocation_id = wmsDistaskHs[0].endlocation_id, taskCode = wmsDistaskHs[0].bill_code };
|
||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】执行电梯任务时 根据任务单号获取电梯参数 {JsonConvert.SerializeObject(q)}");
|
||||
var e = await _wareHouseService.FindElevatorFromPars(q);
|
||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】执行电梯任务时 根据任务单号获取电梯结果 {JsonConvert.SerializeObject(e)}");
|
||||
|
||||
// 三、四号梯发货带两托货
|
||||
string[] doubleCarryRunElevators =
|
||||
{
|
||||
"Elevator3","Elevator4"
|
||||
};
|
||||
if (doubleCarryRunElevators.Contains(e.elevator_code) && wmsDistaskHs[0].end_floor == 1)
|
||||
{
|
||||
LoggerElevatorTask.Information($"【GenTaskExecute】判断为三四号梯任务");
|
||||
LoggerElevatorTask.Information($"【GenTaskExecute】现在有{group.Count()}托货");
|
||||
// 电梯内放置两托货呼叫电梯下
|
||||
if (group.Count() == 2)
|
||||
{
|
||||
if (e != null)
|
||||
if (doubleCarryRunElevators.Contains(e.elevator_code) && wmsDistaskHs[0].end_floor == 1)
|
||||
{
|
||||
wmsDistaskHs[0].device_id = e.device_id;
|
||||
wmsDistaskHs[1].device_id = e.device_id;
|
||||
}
|
||||
LoggerElevatorTask.Information($"【GenTaskExecute】呼叫电梯 {e.elevator_code}");
|
||||
await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs);
|
||||
LoggerElevatorTask.Information($"【GenTaskExecute】呼叫电梯 {e.elevator_code}执行完成");
|
||||
}
|
||||
// 一托货
|
||||
else if (group.Count() == 1)
|
||||
{
|
||||
// 如果当前电梯没有执行中的任务 则呼叫电梯下
|
||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】判断为三四号梯任务");
|
||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】现在有{group.Count()}托货");
|
||||
// 电梯内放置两托货呼叫电梯下
|
||||
if (group.Count() == 2)
|
||||
{
|
||||
if (e != null)
|
||||
{
|
||||
wmsDistaskHs[0].device_id = e.device_id;
|
||||
wmsDistaskHs[1].device_id = e.device_id;
|
||||
}
|
||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}");
|
||||
await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs);
|
||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}执行完成");
|
||||
}
|
||||
// 一托货
|
||||
else if (group.Count() == 1)
|
||||
{
|
||||
// 如果当前电梯没有执行中的任务 则呼叫电梯下
|
||||
|
||||
if (db_ElevatorTaskExceptionHandle.Queryable<WmsDistaskH>().Where(r => r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID
|
||||
&& r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.endlocation_id == wmsDistaskHs[0].startlocation_id).Count() == 0)
|
||||
if (db_ElevatorTaskExceptionHandle.Queryable<WmsDistaskH>().Where(r => r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID
|
||||
&& r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.endlocation_id == wmsDistaskHs[0].startlocation_id).Count() == 0)
|
||||
{
|
||||
if (e != null)
|
||||
{
|
||||
wmsDistaskHs[0].device_id = e.device_id;
|
||||
}
|
||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}");
|
||||
await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs);
|
||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}执行完成");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LoggerElevatorTask.LogError($"【ElevatorTaskExceptionHandle】电梯 {e.elevator_code} 待执行的电梯任务数异常 目前是{group.Count()} 超过了两托");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】判断为非三四号梯任务");
|
||||
if (e != null)
|
||||
{
|
||||
wmsDistaskHs[0].device_id = e.device_id;
|
||||
}
|
||||
LoggerElevatorTask.Information($"【GenTaskExecute】呼叫电梯 {e.elevator_code}");
|
||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}");
|
||||
await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs);
|
||||
LoggerElevatorTask.Information($"【GenTaskExecute】呼叫电梯 {e.elevator_code}执行完成");
|
||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}执行完成");
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
LoggerElevatorTask.LogError($"【ElevatorTaskExceptionHandle】电梯 {e.elevator_code} 待执行的电梯任务数异常 目前是{group.Count()} 超过了两托");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LoggerElevatorTask.Information($"【GenTaskExecute】判断为非三四号梯任务");
|
||||
if (e != null)
|
||||
{
|
||||
wmsDistaskHs[0].device_id = e.device_id;
|
||||
}
|
||||
LoggerElevatorTask.Information($"【GenTaskExecute】呼叫电梯 {e.elevator_code}");
|
||||
await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs);
|
||||
LoggerElevatorTask.Information($"【GenTaskExecute】呼叫电梯 {e.elevator_code}执行完成");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LoggerFloor2RackDelivery.LogError($"【ElevatorTaskExceptionHandle】{ex.Message}");
|
||||
LoggerFloor2RackDelivery.LogError($"【ElevatorTaskExceptionHandle】{ex.StackTrace}");
|
||||
}
|
||||
finally
|
||||
{
|
||||
s_elevatortask.Release();
|
||||
catch (ObjectDisposedException ex)
|
||||
{
|
||||
LoggerElevatorTask.LogError($"【ElevatorTaskExceptionHandle】 数据库连接异常:{ex.Message}");
|
||||
LoggerElevatorTask.LogError($"【ElevatorTaskExceptionHandle】 数据库连接异常:{ex.StackTrace}");
|
||||
if (ex.Source == "Npgsql")
|
||||
db_ElevatorTaskExceptionHandle = _repository.AsSugarClient().CopyNew();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("【ElevatorTaskExceptionHandle】" + ex.Message);
|
||||
LoggerElevatorTask.LogError($"【ElevatorTaskExceptionHandle】 {ex.Message}");
|
||||
LoggerElevatorTask.LogError($"【ElevatorTaskExceptionHandle】 {ex.StackTrace}");
|
||||
// 数据库连接断开时会报错
|
||||
try { await db_ElevatorTaskExceptionHandle.Ado.RollbackTranAsync(); } catch { };
|
||||
}
|
||||
finally
|
||||
{
|
||||
s_elevatortask.Release();
|
||||
}
|
||||
});
|
||||
index++;
|
||||
}
|
||||
|
||||
Task.WaitAll(taskActions);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -29,6 +29,11 @@ namespace Tnb.WarehouseMgr.Entities.Dto.ErpInputs
|
||||
/// </summary>
|
||||
public string? instockorg_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 入库组织id
|
||||
/// </summary>
|
||||
public string? instockorg_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 供货日期
|
||||
/// </summary>
|
||||
@@ -89,5 +94,10 @@ namespace Tnb.WarehouseMgr.Entities.Dto.ErpInputs
|
||||
/// </summary>
|
||||
public string? warehouse_outstock { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 入库仓库
|
||||
/// </summary>
|
||||
public string? warehouse_instock_id { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,6 +38,11 @@ namespace Tnb.WarehouseMgr.Entities.Dto.ErpInputs
|
||||
/// </summary>
|
||||
public string? outstockorg_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 出库组织编号
|
||||
/// </summary>
|
||||
public string? outstockorg_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 入库仓库编号
|
||||
/// </summary>
|
||||
|
||||
@@ -34,6 +34,11 @@ public partial class WmsRawmatTransferinstockD : BaseEntity<string>
|
||||
/// </summary>
|
||||
public string? matspecification { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 单位ID
|
||||
/// </summary>
|
||||
public string? unit_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 单位
|
||||
/// </summary>
|
||||
|
||||
@@ -491,6 +491,31 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
foreach (WmsDistaskH wmsDistaskH in wmsDistaskHs)
|
||||
{
|
||||
// 如果是三楼出库任务 扣减电梯任务数
|
||||
ElevagorInfoQuery q = new() { endlocation_id = wmsDistaskH.endlocation_id, taskCode = wmsDistaskH.bill_code };
|
||||
Logger.Information($"【TaskChainCallBack】{wmsDistaskH.bill_code} 判断是否在执行取消电梯任务 {JsonConvert.SerializeObject(q)}");
|
||||
var e = await _wareHouseService.FindElevatorFromPars(q);
|
||||
if (e != null)
|
||||
{
|
||||
Logger.Information($"【TaskChainCallBack】{wmsDistaskH.bill_code} 执行取消电梯任务时 根据任务单号获取电梯结果 {JsonConvert.SerializeObject(e)}");
|
||||
WmsElevatorH wmsElevatorH = await _db.Queryable<WmsElevatorH>().Where(r => r.elevator_id == e.device_id).FirstAsync();
|
||||
if (wmsElevatorH != null)
|
||||
{
|
||||
int eleRow = await _db.Updateable<WmsElevatorH>().SetColumns(r => r.task_nums == r.task_nums - 1).Where(r => r.id == wmsElevatorH.id).ExecuteCommandAsync();
|
||||
Logger.Information($"【TaskChainCallBack】{wmsDistaskH.bill_code} 执行取消电梯任务时 任务数变更{eleRow}");
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.Information($"【TaskChainCallBack】{wmsDistaskH.bill_code} 执行取消电梯任务时 电梯id{e.device_id}找不到对应电梯资料");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.Information($"【TaskChainCallBack】{wmsDistaskH.bill_code} 判断不是在执行取消电梯任务");
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (wmsDistaskH.startlocation_code.Contains("DT") || wmsDistaskH.endlocation_code.Contains("DT"))
|
||||
{
|
||||
//WmsElevatorUnlockInput wmsElevatorUnlockInput = new ();
|
||||
@@ -590,7 +615,29 @@ namespace Tnb.WarehouseMgr
|
||||
List<WmsDistaskH> wmsDistaskHs = _db.Queryable<WmsDistaskH>().Where(P => P.bill_code.Contains(input.taskChainCode)).ToList();
|
||||
|
||||
foreach (WmsDistaskH wmsDistaskH in wmsDistaskHs)
|
||||
{
|
||||
{// 如果是三楼出库任务 扣减电梯任务数
|
||||
ElevagorInfoQuery q = new() { endlocation_id = wmsDistaskH.endlocation_id, taskCode = wmsDistaskH.bill_code };
|
||||
Logger.Information($"【TaskChainCallBack】{wmsDistaskH.bill_code} 判断是否在执行电梯任务 {JsonConvert.SerializeObject(q)}");
|
||||
var e = await _wareHouseService.FindElevatorFromPars(q);
|
||||
if (e != null)
|
||||
{
|
||||
Logger.Information($"【TaskChainCallBack】{wmsDistaskH.bill_code} 执行电梯任务时 根据任务单号获取电梯结果 {JsonConvert.SerializeObject(e)}");
|
||||
WmsElevatorH wmsElevatorH = await _db.Queryable<WmsElevatorH>().Where(r => r.elevator_id == e.device_id).FirstAsync();
|
||||
if (wmsElevatorH != null)
|
||||
{
|
||||
int eleRow = await _db.Updateable<WmsElevatorH>().SetColumns(r => r.task_nums == r.task_nums - 1).Where(r => r.id == wmsElevatorH.id).ExecuteCommandAsync();
|
||||
Logger.Information($"【TaskChainCallBack】{wmsDistaskH.bill_code} 执行取消电梯任务时 任务数变更{eleRow}");
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.Information($"【TaskChainCallBack】{wmsDistaskH.bill_code} 执行电梯任务时 电梯id{e.device_id}找不到对应电梯资料");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.Information($"【TaskChainCallBack】{wmsDistaskH.bill_code} 判断不是在执行电梯任务");
|
||||
}
|
||||
|
||||
if (wmsDistaskH.startlocation_code.Contains("DT") || wmsDistaskH.endlocation_code.Contains("DT"))
|
||||
{
|
||||
//WmsElevatorUnlockInput wmsElevatorUnlockInput = new ();
|
||||
@@ -874,8 +921,7 @@ namespace Tnb.WarehouseMgr
|
||||
await _db.Updateable<WmsElevatorH>().SetColumns(r => new WmsElevatorH
|
||||
{
|
||||
is_use = (int)EnumElevatorUseStatus.空闲,
|
||||
use_tasks = "",
|
||||
task_nums = 0
|
||||
use_tasks = ""
|
||||
})
|
||||
.Where(it => it.elevator_id == wmsElevatorH.elevator_id).ExecuteCommandAsync();
|
||||
|
||||
@@ -884,14 +930,17 @@ namespace Tnb.WarehouseMgr
|
||||
.Where(r => r.startlocation_code.Contains($"DT") && r.endlocation_code.Contains($"DT") && r.act_start_date == null && r.act_end_date == null
|
||||
&& r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).ToList();
|
||||
|
||||
int eleUpdateRow = 0;
|
||||
foreach (var item in elevatorTasks)
|
||||
{
|
||||
item.status = WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID;
|
||||
eleUpdateRow += await _db.Updateable<WmsElevatorH>().SetColumns(it => new WmsElevatorH { task_nums = it.task_nums - 1 }).Where(it => item.area_code == it.area_code).ExecuteCommandAsync();
|
||||
|
||||
}
|
||||
int row = await _db.Updateable(elevatorTasks).ExecuteCommandAsync();
|
||||
|
||||
Logger.Information($"【WmsElevatorUnlock】操作电梯{input.elevator_code}重置电梯任务{row}条 {string.Join(',', elevatorTasks.Select(r => r.bill_code))}");
|
||||
|
||||
Logger.Information($"【WmsElevatorUnlock】操作电梯{input.elevator_code}扣减电梯任务数{eleUpdateRow}条 {string.Join(',', elevatorTasks.Select(r => r.bill_code))}");
|
||||
|
||||
|
||||
s_eleUseStatusDic[wmsElevatorH.elevator_id] = (int)EnumElevatorUseStatus.空闲;
|
||||
|
||||
@@ -1090,7 +1090,7 @@ namespace Tnb.WarehouseMgr
|
||||
wmsRawmatTransferinstockH.contact_person = input.contact_person;
|
||||
wmsRawmatTransferinstockH.tel = input.tel;
|
||||
|
||||
var org_erpExtendField = await db.Queryable<ErpExtendField>().Where(a => a.pk_org == input.outstockorg_code).FirstAsync();
|
||||
var org_erpExtendField = await db.Queryable<ErpExtendField>().Where(a => a.pk_org == input.outstockorg_id).FirstAsync();
|
||||
if (org_erpExtendField != null)
|
||||
{
|
||||
wmsRawmatTransferinstockH.outstockorg_id = org_erpExtendField.pk_org_v;
|
||||
@@ -1098,8 +1098,8 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
else
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】表头明细中组织{input.outstockorg_code}在wms系统中未找到!");
|
||||
throw new AppFriendlyException($@"表头明细中组织{input.outstockorg_code}在wms系统中未找到!", 500);
|
||||
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】表头明细中组织{input.outstockorg_id}在wms系统中未找到!");
|
||||
throw new AppFriendlyException($@"表头明细中组织{input.outstockorg_id}在wms系统中未找到!", 500);
|
||||
}
|
||||
wmsRawmatTransferinstockH.erp_pk = input.erp_pk;
|
||||
wmsRawmatTransferinstockH.create_id = WmsWareHouseConst.ErpUserId;
|
||||
@@ -1121,6 +1121,7 @@ namespace Tnb.WarehouseMgr
|
||||
var erpExtendField = await db.Queryable<ErpExtendField>().InnerJoin<DictionaryDataEntity>((a, b) => a.table_id == b.Id).Where((a, b) => b.EnCode == detail.unit_code).Select((a, b) => b).FirstAsync();
|
||||
if (erpExtendField != null)
|
||||
{
|
||||
msRawmatTransferinstockD.unit_id = erpExtendField.Id;
|
||||
msRawmatTransferinstockD.unit = erpExtendField.EnCode;
|
||||
}
|
||||
else
|
||||
@@ -1158,7 +1159,7 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
wmsTransferInstockH.bill_code = Code;
|
||||
wmsTransferInstockH.erp_bill_code = input.transfer_order;
|
||||
var org_erpExtendField = await db.Queryable<ErpExtendField>().Where(a => a.pk_org == input.outstockorg_code).FirstAsync();
|
||||
var org_erpExtendField = await db.Queryable<ErpExtendField>().Where(a => a.pk_org == input.outstockorg_id).FirstAsync();
|
||||
if (org_erpExtendField != null)
|
||||
{
|
||||
wmsTransferInstockH.outstockorg_id = org_erpExtendField.pk_org_v;
|
||||
@@ -1166,8 +1167,8 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
else
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】表头明细中组织{input.outstockorg_code}在wms系统中未找到!");
|
||||
throw new AppFriendlyException($@"表头明细中组织{input.outstockorg_code}在wms系统中未找到!", 500);
|
||||
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】表头明细中组织{input.outstockorg_id}在wms系统中未找到!");
|
||||
throw new AppFriendlyException($@"表头明细中组织{input.outstockorg_id}在wms系统中未找到!", 500);
|
||||
}
|
||||
wmsTransferInstockH.incoming_ware = warehouse_instock.id;
|
||||
wmsTransferInstockH.org_id = WmsWareHouseConst.AdministratorOrgId;
|
||||
@@ -1290,7 +1291,7 @@ namespace Tnb.WarehouseMgr
|
||||
wmsTransferOrderH.create_id = WmsWareHouseConst.ErpUserId;
|
||||
wmsTransferOrderH.create_time = DateTime.Now;
|
||||
wmsTransferOrderH.org_id = WmsWareHouseConst.AdministratorOrgId;
|
||||
var org_erpExtendField = await db.Queryable<ErpExtendField>().Where(a => a.pk_org == input.instockorg_code).FirstAsync();
|
||||
var org_erpExtendField = await db.Queryable<ErpExtendField>().Where(a => a.pk_org == input.instockorg_id).FirstAsync();
|
||||
if (org_erpExtendField != null)
|
||||
{
|
||||
wmsTransferOrderH.instockorg_id = org_erpExtendField.pk_org_v;
|
||||
@@ -1298,8 +1299,8 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
else
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】表头明细中组织{input.instockorg_code}在wms系统中未找到!");
|
||||
throw new AppFriendlyException($@"表头明细中组织{input.instockorg_code}在wms系统中未找到!", 500);
|
||||
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】表头明细中组织{input.instockorg_id}在wms系统中未找到!");
|
||||
throw new AppFriendlyException($@"表头明细中组织{input.instockorg_id}在wms系统中未找到!", 500);
|
||||
}
|
||||
|
||||
var _erpExtendField = await db.Queryable<ErpExtendField>().InnerJoin<DictionaryDataEntity>((a, b) => a.table_id == b.Id)
|
||||
@@ -1315,55 +1316,15 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
await db.Insertable(wmsTransferOrderH).ExecuteCommandAsync();
|
||||
|
||||
List<WmsTransferOrderD> wmsTransferOrderDs = new List<WmsTransferOrderD>();
|
||||
foreach (var detail in input.details)
|
||||
{
|
||||
WmsTransferOrderD wmsTransferOrderD = new WmsTransferOrderD();
|
||||
|
||||
wmsTransferOrderD.bill_id = wmsTransferOrderD.id;
|
||||
wmsTransferOrderD.unit = detail.unit_code;
|
||||
var erpExtendField = await db.Queryable<ErpExtendField>().InnerJoin<DictionaryDataEntity>((a, b) => a.table_id == b.Id).Where((a, b) => a.cunitid == detail.unit_code).Select((a, b) => b).FirstAsync();
|
||||
if (erpExtendField != null)
|
||||
{
|
||||
wmsTransferOrderD.unit = erpExtendField.EnCode;
|
||||
}
|
||||
else
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【TransferOrder】表体明细中单位{detail.unit_code}在wms系统中未找到!");
|
||||
throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到!", 500);
|
||||
}
|
||||
|
||||
wmsTransferOrderD.qty = detail.qty;
|
||||
wmsTransferOrderD.batchno = detail.code_batch;
|
||||
wmsTransferOrderD.erp_line_pk = detail.erp_line_pk;
|
||||
wmsTransferOrderD.create_id = WmsWareHouseConst.ErpUserId;
|
||||
wmsTransferOrderD.create_time = DateTime.Now;
|
||||
wmsTransferOrderD.lineno = detail.lineno;
|
||||
wmsTransferOrderD.erp_wh_type = detail.warehouse_outstock;
|
||||
|
||||
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
|
||||
if (material != null)
|
||||
{
|
||||
wmsTransferOrderD.material_id = material.id;
|
||||
wmsTransferOrderD.material_code = material.code;
|
||||
wmsTransferOrderD.material_name = material.name;
|
||||
wmsTransferOrderD.material_specification = material.material_specification;
|
||||
}
|
||||
|
||||
wmsTransferOrderDs.Add(wmsTransferOrderD);
|
||||
}
|
||||
|
||||
await db.Insertable(wmsTransferOrderDs).ExecuteCommandAsync();
|
||||
|
||||
Dictionary<string, object> dic_WmsErpWarehouseidrelaH = await db.Queryable<WmsErpWarehouserelaH>()
|
||||
.LeftJoin<BasWarehouse>((a, b) => a.wms_warehousecode == b.whcode)
|
||||
.Select((a, b) => new
|
||||
{
|
||||
a.erp_warehousecode,
|
||||
b.id,
|
||||
b.whcode
|
||||
})
|
||||
.ToDictionaryAsync(k => k.erp_warehousecode, v => v.id);
|
||||
.LeftJoin<BasWarehouse>((a, b) => a.wms_warehousecode == b.whcode)
|
||||
.Select((a, b) => new
|
||||
{
|
||||
a.erp_warehousecode,
|
||||
b.id,
|
||||
b.whcode
|
||||
})
|
||||
.ToDictionaryAsync(k => k.erp_warehousecode, v => v.id);
|
||||
foreach (var key in dic_WmsErpWarehouseidrelaH.Keys)
|
||||
{
|
||||
if (dic_WmsErpWarehouseidrelaH[key] == null)
|
||||
@@ -1383,8 +1344,52 @@ namespace Tnb.WarehouseMgr
|
||||
.ToDictionaryAsync(k => k.erp_warehousecode, v => v.whcode);
|
||||
|
||||
List<TransferOrderInputDetail> details_WAREHOUSE_YCL_ID = input.details.Where(r => dic_WmsErpWarehouseidrelaH[r.warehouse_outstock].ToString() == WmsWareHouseConst.WAREHOUSE_YCL_ID).ToList();
|
||||
List<TransferOrderInputDetail> details_WAREHOUSE_CP_ID = input.details.Where(r => dic_WmsErpWarehouseidrelaH[r.warehouse_outstock].ToString() == WmsWareHouseConst.WAREHOUSE_YCL_ID).ToList();
|
||||
List<TransferOrderInputDetail> details_WAREHOUSE_CP_ID = input.details.Where(r => dic_WmsErpWarehouseidrelaH[r.warehouse_outstock].ToString() == WmsWareHouseConst.WAREHOUSE_CP_ID).ToList();
|
||||
|
||||
List<WmsTransferOrderD> wmsTransferOrderDs = new List<WmsTransferOrderD>();
|
||||
foreach (var detail in input.details)
|
||||
{
|
||||
WmsTransferOrderD wmsTransferOrderD = new WmsTransferOrderD();
|
||||
|
||||
wmsTransferOrderD.bill_id = wmsTransferOrderD.id;
|
||||
wmsTransferOrderD.unit = detail.unit_code;
|
||||
var erpExtendField = await db.Queryable<ErpExtendField>().InnerJoin<DictionaryDataEntity>((a, b) => a.table_id == b.Id).Where((a, b) => a.cunitid == detail.unit_code).Select((a, b) => b).FirstAsync();
|
||||
if (erpExtendField != null)
|
||||
{
|
||||
wmsTransferOrderD.unit_id = erpExtendField.Id;
|
||||
wmsTransferOrderD.unit = erpExtendField.EnCode;
|
||||
}
|
||||
else
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【TransferOrder】表体明细中单位{detail.unit_code}在wms系统中未找到!");
|
||||
throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到!", 500);
|
||||
}
|
||||
|
||||
wmsTransferOrderD.qty = detail.qty;
|
||||
wmsTransferOrderD.batchno = detail.code_batch;
|
||||
wmsTransferOrderD.erp_line_pk = detail.erp_line_pk;
|
||||
wmsTransferOrderD.create_id = WmsWareHouseConst.ErpUserId;
|
||||
wmsTransferOrderD.create_time = DateTime.Now;
|
||||
wmsTransferOrderD.lineno = detail.lineno;
|
||||
wmsTransferOrderD.erp_wh_type = detail.warehouse_outstock;
|
||||
wmsTransferOrderD.warehouse_code = dic_WmsErpWarehousecoderelaH[detail.warehouse_outstock].ToString();
|
||||
wmsTransferOrderD.warehouse_instock_code = detail.warehouse_instock_id;
|
||||
|
||||
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
|
||||
if (material != null)
|
||||
{
|
||||
wmsTransferOrderD.material_id = material.id;
|
||||
wmsTransferOrderD.material_code = material.code;
|
||||
wmsTransferOrderD.material_name = material.name;
|
||||
wmsTransferOrderD.material_specification = material.material_specification;
|
||||
}
|
||||
|
||||
wmsTransferOrderDs.Add(wmsTransferOrderD);
|
||||
}
|
||||
|
||||
await db.Insertable(wmsTransferOrderDs).ExecuteCommandAsync();
|
||||
|
||||
|
||||
if (details_WAREHOUSE_YCL_ID.Count > 0)
|
||||
{
|
||||
WmsRawmatTransferoutstockH wmsRawmatTransferoutstockH = new WmsRawmatTransferoutstockH();
|
||||
@@ -1394,7 +1399,6 @@ namespace Tnb.WarehouseMgr
|
||||
wmsRawmatTransferoutstockH.create_time = DateTime.Now;
|
||||
wmsRawmatTransferoutstockH.biller = input.biller;
|
||||
wmsRawmatTransferoutstockH.dept_code = input.dept_code;
|
||||
wmsRawmatTransferoutstockH.warehouse_code = dic_WmsErpWarehousecoderelaH[details_WAREHOUSE_YCL_ID[0].warehouse_outstock].ToString();
|
||||
wmsRawmatTransferoutstockH.erp_pk = input.erp_pk;
|
||||
wmsRawmatTransferoutstockH.transfer_order_id = wmsTransferOrderH.id;
|
||||
wmsRawmatTransferoutstockH.issuance_status = "0";
|
||||
@@ -1411,6 +1415,7 @@ namespace Tnb.WarehouseMgr
|
||||
var erpExtendField = await db.Queryable<ErpExtendField>().InnerJoin<DictionaryDataEntity>((a, b) => a.table_id == b.Id).Where((a, b) => a.cunitid == detail.unit_code).Select((a, b) => b).FirstAsync();
|
||||
if (erpExtendField != null)
|
||||
{
|
||||
wmsRawmatTransferoutstockD.unit_id = erpExtendField.Id;
|
||||
wmsRawmatTransferoutstockD.unit = erpExtendField.EnCode;
|
||||
}
|
||||
else
|
||||
@@ -1420,6 +1425,8 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
|
||||
wmsRawmatTransferoutstockD.erp_wh_type = detail.warehouse_outstock;
|
||||
wmsRawmatTransferoutstockD.warehouse_code = dic_WmsErpWarehousecoderelaH[detail.warehouse_outstock].ToString();
|
||||
wmsRawmatTransferoutstockD.warehouse_instock_code = detail.warehouse_instock_id;
|
||||
wmsRawmatTransferoutstockD.qty = detail.qty;
|
||||
wmsRawmatTransferoutstockD.code_batch = detail.code_batch;
|
||||
wmsRawmatTransferoutstockD.erp_line_pk = detail.erp_line_pk;
|
||||
@@ -1450,7 +1457,6 @@ namespace Tnb.WarehouseMgr
|
||||
wmsTransferOutstockH.bill_code = code;
|
||||
wmsTransferOutstockH.create_id = WmsWareHouseConst.ErpUserId;
|
||||
wmsTransferOutstockH.create_time = DateTime.Now;
|
||||
wmsTransferOutstockH.warehouse_code = dic_WmsErpWarehousecoderelaH[details_WAREHOUSE_CP_ID[0].warehouse_outstock].ToString();
|
||||
wmsTransferOutstockH.erp_pk = input.erp_pk;
|
||||
wmsTransferOutstockH.transfer_order_id = wmsTransferOrderH.id;
|
||||
wmsTransferOutstockH.issuance_status = "0";
|
||||
@@ -1476,6 +1482,8 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
|
||||
|
||||
wmsTransferOutstockD.warehouse_code = dic_WmsErpWarehousecoderelaH[detail.warehouse_outstock].ToString();
|
||||
wmsTransferOutstockD.warehouse_instock_code = detail.warehouse_instock_id;
|
||||
wmsTransferOutstockD.pr_qty = detail.qty;
|
||||
wmsTransferOutstockD.xf_qty = 0;
|
||||
wmsTransferOutstockD.qty = 0;
|
||||
|
||||
@@ -2466,6 +2466,7 @@ namespace Tnb.WarehouseMgr
|
||||
await db.Ado.RollbackTranAsync();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 任务完成
|
||||
/// </summary>
|
||||
@@ -2483,7 +2484,7 @@ namespace Tnb.WarehouseMgr
|
||||
//更新任务执行表,单据状态为 完成
|
||||
_ = await db.Updateable<WmsDistaskH>().SetColumns(it => new WmsDistaskH { status = WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID, act_end_date = DateTime.Now }).Where(it => input.disTaskIds.Contains(it.id)).ExecuteCommandAsync();
|
||||
List<WmsDistaskH> disTasks = await db.Queryable<WmsDistaskH>().InnerJoin<WmsCarryH>((a, b) => a.carry_id == b.id).Where(a => input.disTaskIds.Contains(a.id)).Select((a, b) => new WmsDistaskH { carry_status = b.carry_status }, true).ToListAsync();
|
||||
|
||||
|
||||
Logger.Information($"【TaskComplate】 disTasks 值 {JsonConvert.SerializeObject(disTasks)}");
|
||||
if (disTasks?.Count > 0)
|
||||
{
|
||||
@@ -2491,8 +2492,19 @@ namespace Tnb.WarehouseMgr
|
||||
List<string> preTaskIds = disTasks.Select(x => x.pretask_id).ToList();
|
||||
_ = await db.Updateable<WmsPretaskH>().SetColumns(it => new WmsPretaskH { status = WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID }).Where(it => preTaskIds.Contains(it.id)).ExecuteCommandAsync();
|
||||
|
||||
//更新电梯任务数量
|
||||
_ = await db.Updateable<WmsElevatorH>().SetColumns(it => new WmsElevatorH { task_nums = it.task_nums - 1}).Where(it => disTasks.Select(x => x.area_code).Contains(it.area_code)).ExecuteCommandAsync();
|
||||
WmsElevatorH wmsElevatorH = await db.Queryable<WmsElevatorH>().Where(r => disTasks.Select(x => x.area_code).Contains(r.area_code)).FirstAsync();
|
||||
if (wmsElevatorH != null)
|
||||
{
|
||||
Logger.LogInformation($"【TaskComplate】更新前电梯{disTasks[0].area_code}信息{JsonConvert.SerializeObject(wmsElevatorH)}");
|
||||
//更新电梯任务数量
|
||||
int eleUpdateRow = 0;
|
||||
foreach (var disTask in disTasks)
|
||||
{
|
||||
eleUpdateRow += await db.Updateable<WmsElevatorH>().SetColumns(it => new WmsElevatorH { task_nums = it.task_nums - 1 }).Where(it => disTask.area_code == it.area_code).ExecuteCommandAsync();
|
||||
}
|
||||
Logger.LogInformation($"【TaskComplate】更新前电梯{disTasks[0].area_code}任务行数{eleUpdateRow}");
|
||||
}
|
||||
|
||||
|
||||
// 更新任务数量
|
||||
_ = await db.Updateable<BasLocation>().SetColumns(it => new BasLocation { task_nums = it.task_nums - 1 }).Where(it => disTasks.Select(x => x.endlocation_code).Contains(it.location_code)).ExecuteCommandAsync();
|
||||
|
||||
Reference in New Issue
Block a user