待灭菌仓流程,erp采购订单接口,日志完善

This commit is contained in:
2024-07-15 18:06:26 +08:00
parent 71b3cfba94
commit 56f8531044
10 changed files with 809 additions and 27 deletions

View File

@@ -80,13 +80,17 @@ namespace Tnb.ProductionMgr
private static Timer? Floor2timer移走上升降区未生成预任务且满托的料架;
private static Timer? Floor2timer移走下升降区未生成预任务且空托的料架;
// 四楼待灭菌仓到灭菌线
private static Timer? Floor4DMJ2MJXtimer;
// 四楼待灭菌线到灭菌仓
private static Timer? Floor4MJX2MJCtimer;
// 四楼灭菌仓到成品库
private static Timer? Floor4DMC2CPKtimer;
// 四楼包材自动到二楼包材库
private static Timer? PackOutstockServicetimer;
// 检查到电梯任务异常断开后处理
private Thread? ElevatorTaskExceptionHandleThread;
public SemaphoreSlim s_taskCheckGet = new(1);
public SemaphoreSlim s_taskScan = new(1);
public SemaphoreSlim s_taskSSXcode = new(1);
@@ -99,6 +103,9 @@ namespace Tnb.ProductionMgr
public SemaphoreSlim s_task移走上升降区未生成预任务且满托的料架 = new(1);
public SemaphoreSlim s_task移走下升降区未生成预任务且空托的料架 = new(1);
public SemaphoreSlim s_taskPackOutstockService = new(1);
public SemaphoreSlim s_taskFloor4DMJ2MJXService = new(1);
public SemaphoreSlim s_taskFloor4MJX2MJCService = new(1);
public SemaphoreSlim s_taskFloor4DMC2CPKService = new(1);
private StackExRedisHelper _redisData;
private readonly IPrdInstockService _prdInstockService;
@@ -115,6 +122,11 @@ namespace Tnb.ProductionMgr
private ISqlSugarClient db_Floor2timer移走上升降区未生成预任务且满托的料架;
private ISqlSugarClient db_Floor2timer移走下升降区未生成预任务且空托的料架;
private ISqlSugarClient db_PackOutstockService;
private ISqlSugarClient db_Floor4DMJ2MJX;
private ISqlSugarClient db_Floor4MJX2MJC;
private ISqlSugarClient db_Floor4DMC2CPK;
private readonly IWmsPDAScanInStockService _wmsPDAScanInStock;
private readonly IUserManager _userManager;
private readonly IBillRullService _billRullService;
@@ -165,7 +177,10 @@ namespace Tnb.ProductionMgr
db_Floor2timer移走上升降区未生成预任务且满托的料架 = repository.CopyNew();
db_Floor2timer移走下升降区未生成预任务且空托的料架 = repository.CopyNew();
db_PackOutstockService = repository.CopyNew();
}
db_Floor4DMJ2MJX = repository.CopyNew();
db_Floor4MJX2MJC = repository.CopyNew();
db_Floor4DMC2CPK = repository.CopyNew();
}
#endregion
@@ -1716,7 +1731,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
async void ElevatorTaskExceptionHandle(object args)
{
List<WmsDistaskH> wmsDistaskHs = _repository.AsSugarClient().Queryable<WmsDistaskH>()
.Where(r => r.startlocation_code.Contains("DT") && r.endlocation_code.Contains("DT") && r.act_start_date != null && r.act_end_date == null).ToList();
.Where(r => r.startlocation_code.Contains("DT") && r.endlocation_code.Contains("DT") && r.act_start_date == null && r.act_end_date == null).ToList();
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】检查到需要恢复的电梯任务{wmsDistaskHs.Count}条 {string.Join(',', wmsDistaskHs.Select(x => x.bill_code))}");
foreach (WmsDistaskH wmsDistaskH in wmsDistaskHs)
@@ -1850,6 +1865,204 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
#endregion
#region
/// <summary>
/// 四楼待灭菌仓到灭菌线
/// </summary>
/// <param name="args"></param>
private async void Floor4DMJ2MJX(object? args)
{
if (s_taskFloor4DMJ2MJXService.CurrentCount == 0)
return;
await s_taskFloor4DMJ2MJXService.WaitAsync();
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
try
{
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行四楼待灭菌仓到灭菌线");
LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行四楼待灭菌仓到灭菌线");
if (false)
{
return;
}
List<BasLocation> endLocations = db_Floor4DMJ2MJX.Queryable<BasLocation>().Where(r => r.wh_id == WmsWareHouseConst.WAREHOUSE_DMJC_ID
&& r.is_type == ((int)EnumLocationType.).ToString() && r.is_lock == 0).ToList();
Dictionary<BasLocation, string[]> getdic = new Dictionary<BasLocation, string[]>();
foreach (BasLocation endLocation in endLocations)
{
getdic.Add(endLocation, new string[] { "", "" });
}
foreach (var key in getdic.Keys)
{
await db_Floor4DMJ2MJX.Ado.BeginTranAsync();
var strs = getdic.Where(p => p.Key == key).First().Value;
bool result = await GetBoolTag(strs[0], strs[1]);
if (result)
{
LoggerYCLGLDPJInstock.LogInformation($"【四楼待灭菌仓到灭菌线】 上料点 {key} {strs[1]}采集到 {result}");
OutStockStrategyQuery outStockStrategyInput = new()
{
warehouse_id = WmsWareHouseConst.WAREHOUSE_DMJC_ID,
Size = 1
};
List<WmsCarryH> items = await _wareHouseService.OutStockStrategy(outStockStrategyInput);
if (items.Count < 1)
{
LoggerYCLGLDPJInstock.LogInformation($"【四楼待灭菌仓到灭菌线】 没有可以出库的空载具");
}
WmsCarryH wmsCarryH = items[0];
//锁定起点库位 更新为空闲
await db_YCLWXDPJInstocktimer.Updateable<BasLocation>().SetColumns(r => new BasLocation { is_lock = 1, is_use = "0" }).Where(r => r.id == wmsCarryH.location_id).ExecuteCommandAsync();
//锁定终点库位
await db_YCLWXDPJInstocktimer.Updateable<BasLocation>().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == key.id).ExecuteCommandAsync();
bool result_createPretask = await createPretask(wmsCarryH.location_id, key.id, "", "", LoggerYCLGLDPJInstock, db_YCLWXDPJInstocktimer);
if (!result_createPretask)
{
LoggerYCLGLDPJInstock.LogWarning($"【四楼待灭菌仓到灭菌线】 {wmsCarryH.location_code} 到 {key.location_code} 预任务生成失败");
throw new Exception($"【四楼待灭菌仓到灭菌线】 {wmsCarryH.location_code} 到 {key.location_code} 预任务生成失败");
}
LoggerYCLGLDPJInstock.LogWarning($"【四楼待灭菌仓到灭菌线】 {wmsCarryH.location_code} 到 {key.location_code} 预任务生成成功");
}
await db_Floor4DMJ2MJX.Ado.CommitTranAsync();
}
_ = _wareHouseService.GenTaskExecute();
}
catch (ObjectDisposedException ex)
{
LoggerFloor4DMJ2MJX.LogError($"【四楼待灭菌仓到灭菌线】 数据库连接异常:{ex.Message}");
LoggerFloor4DMJ2MJX.LogError($"【四楼待灭菌仓到灭菌线】 数据库连接异常:{ex.StackTrace}");
if (ex.Source == "Npgsql")
db_Floor4DMJ2MJX = _repository.AsSugarClient().CopyNew();
}
catch (Exception ex)
{
Console.WriteLine("【四楼待灭菌仓到灭菌线】" + ex.Message);
LoggerFloor4DMJ2MJX.LogError($"【四楼待灭菌仓到灭菌线】 {ex.Message}");
LoggerFloor4DMJ2MJX.LogError($"【四楼待灭菌仓到灭菌线】 {ex.StackTrace}");
// 数据库连接断开时会报错
try { await db_Floor4DMJ2MJX.Ado.RollbackTranAsync(); } catch { };
}
finally
{
s_taskFloor4DMJ2MJXService.Release();
if (!db_Floor4DMJ2MJX.Ado.Transaction.IsNull())
try { await db_Floor4DMJ2MJX.Ado.CommitTranAsync(); } catch { };
_wareHouseService.GenTaskExecute();
stopwatch.Stop();
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束四楼待灭菌仓到灭菌线 {stopwatch.ElapsedMilliseconds} ms");
LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束四楼待灭菌仓到灭菌线 {stopwatch.ElapsedMilliseconds} ms");
}
}
/// <summary>
/// 四楼待灭菌线到灭菌仓
/// </summary>
/// <param name="args"></param>
private async void Floor4MJX2MJC(object? args)
{
if (s_taskFloor4MJX2MJCService.CurrentCount == 0)
return;
await s_taskFloor4MJX2MJCService.WaitAsync();
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
try
{
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行四楼待灭菌线到灭菌仓");
LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行四楼待灭菌线到灭菌仓");
await db_Floor4MJX2MJC.Ado.BeginTranAsync();
await db_Floor4MJX2MJC.Ado.CommitTranAsync();
}
catch (ObjectDisposedException ex)
{
LoggerFloor4MJX2MJC.LogError($"【四楼待灭菌线到灭菌仓】 数据库连接异常:{ex.Message}");
LoggerFloor4MJX2MJC.LogError($"【四楼待灭菌线到灭菌仓】 数据库连接异常:{ex.StackTrace}");
if (ex.Source == "Npgsql")
db_Floor4MJX2MJC = _repository.AsSugarClient().CopyNew();
}
catch (Exception ex)
{
Console.WriteLine("【四楼待灭菌线到灭菌仓】" + ex.Message);
LoggerFloor4MJX2MJC.LogError($"【四楼待灭菌线到灭菌仓】 {ex.Message}");
LoggerFloor4MJX2MJC.LogError($"【四楼待灭菌线到灭菌仓】 {ex.StackTrace}");
// 数据库连接断开时会报错
try { await db_Floor4MJX2MJC.Ado.RollbackTranAsync(); } catch { };
}
finally
{
s_taskFloor4MJX2MJCService.Release();
if (!db_Floor4MJX2MJC.Ado.Transaction.IsNull())
try { await db_Floor4MJX2MJC.Ado.CommitTranAsync(); } catch { };
_wareHouseService.GenTaskExecute();
stopwatch.Stop();
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束四楼待灭菌线到灭菌仓 {stopwatch.ElapsedMilliseconds} ms");
LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束四楼待灭菌线到灭菌仓 {stopwatch.ElapsedMilliseconds} ms");
}
}
/// <summary>
/// 四楼灭菌仓到成品库
/// </summary>
/// <param name="args"></param>
private async void Floor4DMC2CPK(object? args)
{
if (s_taskFloor4DMC2CPKService.CurrentCount == 0)
return;
await s_taskFloor4DMC2CPKService.WaitAsync();
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
try
{
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行四楼灭菌仓到成品库");
LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行四楼灭菌仓到成品库");
await db_Floor4DMC2CPK.Ado.BeginTranAsync();
await db_Floor4DMC2CPK.Ado.CommitTranAsync();
}
catch (ObjectDisposedException ex)
{
LoggerFloor4DMC2CPK.LogError($"【四楼灭菌仓到成品库】 数据库连接异常:{ex.Message}");
LoggerFloor4DMC2CPK.LogError($"【四楼灭菌仓到成品库】 数据库连接异常:{ex.StackTrace}");
if (ex.Source == "Npgsql")
db_Floor4DMC2CPK = _repository.AsSugarClient().CopyNew();
}
catch (Exception ex)
{
Console.WriteLine("【四楼灭菌仓到成品库】" + ex.Message);
LoggerFloor4DMC2CPK.LogError($"【四楼灭菌仓到成品库】 {ex.Message}");
LoggerFloor4DMC2CPK.LogError($"【四楼灭菌仓到成品库】 {ex.StackTrace}");
// 数据库连接断开时会报错
try { await db_Floor4DMC2CPK.Ado.RollbackTranAsync(); } catch { };
}
finally
{
s_taskFloor4DMC2CPKService.Release();
if (!db_Floor4DMC2CPK.Ado.Transaction.IsNull())
try { await db_Floor4DMC2CPK.Ado.CommitTranAsync(); } catch { };
_wareHouseService.GenTaskExecute();
stopwatch.Stop();
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束四楼灭菌仓到成品库 {stopwatch.ElapsedMilliseconds} ms");
LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束四楼灭菌仓到成品库 {stopwatch.ElapsedMilliseconds} ms");
}
}
#endregion
public Task StartAsync(CancellationToken cancellationToken)
@@ -1883,6 +2096,10 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
ElevatorTaskExceptionHandleThread = new Thread(ElevatorTaskExceptionHandle);
ElevatorTaskExceptionHandleThread.Start();
Floor4DMJ2MJXtimer = new Timer(Floor4DMJ2MJX, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
Floor4MJX2MJCtimer = new Timer(Floor4MJX2MJC, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
Floor4DMC2CPKtimer = new Timer(Floor4DMC2CPK, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
return Task.CompletedTask;
}
@@ -1904,11 +2121,15 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
Floor2timer送满托到下升降区?.Dispose();
Floor2timer移走上升降区未生成预任务且满托的料架?.Dispose();
Floor2timer移走下升降区未生成预任务且空托的料架?.Dispose();
BGWCarrySupplementtimer?.Dispose();
YCLGLDPJInstocktimer?.Dispose();
YCLWXDPJInstocktimer?.Dispose();
GenTaskExecutetimer?.Dispose();
PackOutstockServicetimer?.Dispose();
Floor4DMJ2MJXtimer?.Dispose();
Floor4MJX2MJCtimer?.Dispose();
Floor4DMC2CPKtimer?.Dispose();
ElevatorTaskExceptionHandleThread.Abort();
}
#region
@@ -2095,7 +2316,6 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
}
}
protected string _LoggerBGWCarrySupplementFileName = "";
protected ILogger _LoggerBGWCarrySupplement;
protected ILogger LoggerBGWCarrySupplement
@@ -2197,6 +2417,108 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
return _LoggerTimer;
}
}
protected string _LoggerFloor4DMJ2MJXFileName = "";
protected ILogger _LoggerFloor4DMJ2MJX;
protected ILogger LoggerFloor4DMJ2MJX
{
get
{
string newFileName = $"{AppContext.BaseDirectory}/logs/customFloor4DMJ2MJX{DateTime.Now:yyyyMMdd}.log";
if (_LoggerFloor4DMJ2MJXFileName != newFileName)
{
ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddFile(newFileName, cfgOpts =>
{
//cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff";
cfgOpts.MessageFormat = (logMsg) =>
{
var logLevel = s_logLevelMap[logMsg.LogLevel];
var sb = new StringBuilder();
_ = sb.Append($"[{logLevel}] ");
_ = sb.Append($"{logMsg.LogName} ");
_ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} ");
_ = sb.Append($"#{logMsg.EventId.Id} ");
_ = sb.Append(logMsg.Message + " ");
_ = sb.Append(logMsg.Exception?.ToString());
return sb.ToString();
};
}));
_LoggerFloor4DMJ2MJX = loggerFactory.CreateLogger(this.GetType());
_LoggerFloor4DMJ2MJXFileName = newFileName;
}
return _LoggerFloor4DMJ2MJX;
}
}
protected string _LoggerFloor4MJX2MJCFileName = "";
protected ILogger _LoggerFloor4MJX2MJC;
protected ILogger LoggerFloor4MJX2MJC
{
get
{
string newFileName = $"{AppContext.BaseDirectory}/logs/customFloor4MJX2MJC{DateTime.Now:yyyyMMdd}.log";
if (_LoggerFloor4MJX2MJCFileName != newFileName)
{
ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddFile(newFileName, cfgOpts =>
{
//cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff";
cfgOpts.MessageFormat = (logMsg) =>
{
var logLevel = s_logLevelMap[logMsg.LogLevel];
var sb = new StringBuilder();
_ = sb.Append($"[{logLevel}] ");
_ = sb.Append($"{logMsg.LogName} ");
_ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} ");
_ = sb.Append($"#{logMsg.EventId.Id} ");
_ = sb.Append(logMsg.Message + " ");
_ = sb.Append(logMsg.Exception?.ToString());
return sb.ToString();
};
}));
_LoggerFloor4MJX2MJC = loggerFactory.CreateLogger(this.GetType());
_LoggerFloor4MJX2MJCFileName = newFileName;
}
return _LoggerFloor4MJX2MJC;
}
}
protected string _LoggerFloor4DMC2CPKFileName = "";
protected ILogger _LoggerFloor4DMC2CPK;
protected ILogger LoggerFloor4DMC2CPK
{
get
{
string newFileName = $"{AppContext.BaseDirectory}/logs/customFloor4DMC2CPK{DateTime.Now:yyyyMMdd}.log";
if (_LoggerFloor4DMC2CPKFileName != newFileName)
{
ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddFile(newFileName, cfgOpts =>
{
//cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff";
cfgOpts.MessageFormat = (logMsg) =>
{
var logLevel = s_logLevelMap[logMsg.LogLevel];
var sb = new StringBuilder();
_ = sb.Append($"[{logLevel}] ");
_ = sb.Append($"{logMsg.LogName} ");
_ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} ");
_ = sb.Append($"#{logMsg.EventId.Id} ");
_ = sb.Append(logMsg.Message + " ");
_ = sb.Append(logMsg.Exception?.ToString());
return sb.ToString();
};
}));
_LoggerFloor4DMC2CPK = loggerFactory.CreateLogger(this.GetType());
_LoggerFloor4DMC2CPKFileName = newFileName;
}
return _LoggerFloor4DMC2CPK;
}
}
#endregion
}
}