diff --git a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs
index 6e63cc9c..ee3b4c82 100644
--- a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs
+++ b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs
@@ -2420,7 +2420,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
}
///
- /// 四楼待灭菌线到灭菌仓
+ /// 四楼灭菌线到解析仓
///
///
private async void Floor4MJX2MJC(object? args)
@@ -2432,8 +2432,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
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")} 开始执行四楼待灭菌线到灭菌仓");
+ Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行四楼灭菌线到解析仓");
+ LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行四楼灭菌线到解析仓");
Dictionary getdic = new Dictionary();
getdic.Add("MJQ-QU01", new string[] { "4楼下料输送西区", "下料工位1请求取盘", "下料工位1条码" });
@@ -2446,75 +2446,89 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
bool result = await GetBoolTag(strs[0], strs[1]);
if (result)
{
- LoggerFloor4MJX2MJC.LogInformation($"【四楼待灭菌线到灭菌仓】 下料点 {key} {strs[1]}采集到 {result}");
-
- InStockStrategyQuery inStockStrategyInput = new()
+ SemaphoreSlim semaphoreSlim = null;
+ try
{
- warehouse_id = WmsWareHouseConst.WAREHOUSE_MJC_ID,
- Size = 1
- };
- List items = await _wareHouseService.InStockStrategy(inStockStrategyInput);
+ semaphoreSlim = _wareHouseService.GetSemaphore("instock", WmsWareHouseConst.WAREHOUSE_MJC_ID);
+ await semaphoreSlim.WaitAsync();
+ LoggerFloor4MJX2MJC.LogInformation($"【四楼灭菌线到解析仓】 下料点 {key} {strs[1]}采集到 {result}");
+
+ InStockStrategyQuery inStockStrategyInput = new()
+ {
+ warehouse_id = WmsWareHouseConst.WAREHOUSE_MJC_ID,
+ Size = 1
+ };
+ List items = await _wareHouseService.InStockStrategy(inStockStrategyInput);
+
+ if (items.Count < 1)
+ {
+ LoggerFloor4MJX2MJC.LogWarning($"【四楼灭菌线到解析仓】 没有可以入库的库位");
+ break;
+ }
+ var endlocation = items.First();
+
+ await db_Floor4MJX2MJC.Ado.BeginTranAsync();
+ BasLocation startlocation = await db_Floor4MJX2MJC.Queryable().Where(r => r.location_code == key).FirstAsync();
+
+ if (startlocation.is_lock == 1)
+ {
+ LoggerFloor4MJX2MJC.LogWarning($"【四楼灭菌线到解析仓】 起点库位{startlocation.location_code}已锁定");
+ continue;
+ }
+ string carry_code = (await GetStringTag(strs[0], strs[2])).Replace("\r", "").Replace(" ", "");
+ LoggerFloor4MJX2MJC.LogInformation($"【四楼灭菌线到解析仓】 下料点 {key} {strs[2]}采集到 {carry_code}");
+ LoggerFloor4MJX2MJC.LogInformation($"【四楼灭菌线到解析仓】 下料点 {key} {strs[2]}采集到长度 {carry_code.Length}");
+ WmsCarryH wmsCarryH = await db_Floor4MJX2MJC.Queryable().Where(r => r.carry_code == carry_code).FirstAsync();
+ if (wmsCarryH == null)
+ {
+ LoggerFloor4MJX2MJC.LogWarning($"【四楼灭菌线到解析仓】 托盘号{carry_code}在系统中不存在");
+ continue;
+ }
+ //锁定起点库位
+ await db_Floor4MJX2MJC.Updateable().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == startlocation.id).ExecuteCommandAsync();
+ //锁定终点库位
+ await db_Floor4MJX2MJC.Updateable().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == endlocation.id).ExecuteCommandAsync();
+
+ DateTime dateTime = DateTime.Now;
+ WmsSterilizationInstockH wmsSterilizationInstockH = new WmsSterilizationInstockH();
+ string code = await _billRullService.GetBillNumber("WmsSterilizationInstockH");
+ wmsSterilizationInstockH.bill_code = code;
+ wmsSterilizationInstockH.carry_id = wmsCarryH.id;
+ wmsSterilizationInstockH.carry_code = wmsCarryH.carry_code;
+ wmsSterilizationInstockH.location_id = endlocation.id;
+ wmsSterilizationInstockH.location_code = endlocation.location_code;
+ wmsSterilizationInstockH.create_id = WmsWareHouseConst.AdministratorUserId;
+ wmsSterilizationInstockH.create_time = dateTime;
+ wmsSterilizationInstockH.instock_time = dateTime;
+ wmsSterilizationInstockH.org_id = WmsWareHouseConst.AdministratorOrgId;
+ wmsSterilizationInstockH.xl_location_id = startlocation.id;
+ wmsSterilizationInstockH.xl_location_code = startlocation.location_code;
+ wmsSterilizationInstockH.status = WmsWareHouseConst.BILLSTATUS_ADD_ID;
+ wmsSterilizationInstockH.origin = "生产入库";
+
+ int row = await db_Floor4MJX2MJC.Insertable(wmsSterilizationInstockH).ExecuteCommandAsync();
+ if (row > 0)
+ LoggerFloor4MJX2MJC.LogInformation($"【四楼灭菌线到解析仓】 灭菌入库记录生成成功");
+ else
+ LoggerFloor4MJX2MJC.LogWarning($"【四楼灭菌线到解析仓】 灭菌入库记录生成失败");
+
+ bool result_createPretask = await createPretask(startlocation.id, endlocation.id, wmsCarryH.id, wmsCarryH.carry_code, LoggerFloor4MJX2MJC, db_Floor4MJX2MJC, WmsWareHouseConst.BIZTYPE_WMSSTERILIZATIONINSTOCKCH_ID, "", wmsSterilizationInstockH.id);
+ if (!result_createPretask)
+ {
+ LoggerFloor4MJX2MJC.LogWarning($"【四楼灭菌线到解析仓】 {startlocation.location_code} 到 {endlocation.location_code} 预任务生成失败");
+ throw new Exception($"【四楼灭菌线到解析仓】 {startlocation.location_code} 到 {endlocation.location_code} 预任务生成失败");
+ }
+ LoggerFloor4MJX2MJC.LogInformation($"【四楼灭菌线到解析仓】 {startlocation.location_code} 到 {endlocation.location_code} 预任务生成成功");
- if (items.Count < 1)
- {
- LoggerFloor4MJX2MJC.LogWarning($"【四楼待灭菌线到灭菌仓】 没有可以入库的库位");
- break;
}
- var endlocation = items.First();
-
- await db_Floor4MJX2MJC.Ado.BeginTranAsync();
- BasLocation startlocation = await db_Floor4MJX2MJC.Queryable().Where(r => r.location_code == key).FirstAsync();
-
- if (startlocation.is_lock == 1)
+ catch
{
- LoggerFloor4MJX2MJC.LogWarning($"【四楼待灭菌线到灭菌仓】 起点库位{startlocation.location_code}已锁定");
- continue;
+ throw;
}
- string carry_code = (await GetStringTag(strs[0], strs[2])).Replace("\r", "").Replace(" ", "");
- LoggerFloor4MJX2MJC.LogInformation($"【四楼待灭菌线到灭菌仓】 下料点 {key} {strs[2]}采集到 {carry_code}");
- LoggerFloor4MJX2MJC.LogInformation($"【四楼待灭菌线到灭菌仓】 下料点 {key} {strs[2]}采集到长度 {carry_code.Length}");
- WmsCarryH wmsCarryH = await db_Floor4MJX2MJC.Queryable().Where(r => r.carry_code == carry_code).FirstAsync();
- if (wmsCarryH == null)
+ finally
{
- LoggerFloor4MJX2MJC.LogWarning($"【四楼待灭菌线到灭菌仓】 托盘号{carry_code}在系统中不存在");
- continue;
+ semaphoreSlim.Release();
}
- //锁定起点库位
- await db_Floor4MJX2MJC.Updateable().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == startlocation.id).ExecuteCommandAsync();
- //锁定终点库位
- await db_Floor4MJX2MJC.Updateable().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == endlocation.id).ExecuteCommandAsync();
-
- DateTime dateTime = DateTime.Now;
- WmsSterilizationInstockH wmsSterilizationInstockH = new WmsSterilizationInstockH();
- string code = await _billRullService.GetBillNumber("WmsSterilizationInstockH");
- wmsSterilizationInstockH.bill_code = code;
- wmsSterilizationInstockH.carry_id = wmsCarryH.id;
- wmsSterilizationInstockH.carry_code = wmsCarryH.carry_code;
- wmsSterilizationInstockH.location_id = endlocation.id;
- wmsSterilizationInstockH.location_code = endlocation.location_code;
- wmsSterilizationInstockH.create_id = WmsWareHouseConst.AdministratorUserId;
- wmsSterilizationInstockH.create_time = dateTime;
- wmsSterilizationInstockH.instock_time = dateTime;
- wmsSterilizationInstockH.org_id = WmsWareHouseConst.AdministratorOrgId;
- wmsSterilizationInstockH.xl_location_id = startlocation.id;
- wmsSterilizationInstockH.xl_location_code = startlocation.location_code;
- wmsSterilizationInstockH.status = WmsWareHouseConst.BILLSTATUS_ADD_ID;
-
- int row = await db_Floor4MJX2MJC.Insertable(wmsSterilizationInstockH).ExecuteCommandAsync();
- if (row > 0)
- LoggerFloor4MJX2MJC.LogInformation($"【四楼待灭菌线到灭菌仓】 灭菌入库记录生成成功");
- else
- LoggerFloor4MJX2MJC.LogWarning($"【四楼待灭菌线到灭菌仓】 灭菌入库记录生成失败");
-
- bool result_createPretask = await createPretask(startlocation.id, endlocation.id, wmsCarryH.id, wmsCarryH.carry_code, LoggerFloor4MJX2MJC, db_Floor4MJX2MJC, WmsWareHouseConst.BIZTYPE_WMSSTERILIZATIONINSTOCKCH_ID, "", wmsSterilizationInstockH.id);
- if (!result_createPretask)
- {
- LoggerFloor4MJX2MJC.LogWarning($"【四楼待灭菌线到灭菌仓】 {startlocation.location_code} 到 {endlocation.location_code} 预任务生成失败");
- throw new Exception($"【四楼待灭菌线到灭菌仓】 {startlocation.location_code} 到 {endlocation.location_code} 预任务生成失败");
- }
- LoggerFloor4MJX2MJC.LogInformation($"【四楼待灭菌线到灭菌仓】 {startlocation.location_code} 到 {endlocation.location_code} 预任务生成成功");
-
-
}
await db_Floor4MJX2MJC.Ado.CommitTranAsync();
}
@@ -2523,16 +2537,16 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
}
catch (ObjectDisposedException ex)
{
- LoggerFloor4MJX2MJC.LogError($"【四楼待灭菌线到灭菌仓】 数据库连接异常:{ex.Message}");
- LoggerFloor4MJX2MJC.LogError($"【四楼待灭菌线到灭菌仓】 数据库连接异常:{ex.StackTrace}");
+ 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}");
+ Console.WriteLine("【四楼灭菌线到解析仓】" + ex.Message);
+ LoggerFloor4MJX2MJC.LogError($"【四楼灭菌线到解析仓】 {ex.Message}");
+ LoggerFloor4MJX2MJC.LogError($"【四楼灭菌线到解析仓】 {ex.StackTrace}");
// 数据库连接断开时会报错
try { await db_Floor4MJX2MJC.Ado.RollbackTranAsync(); } catch { };
}
@@ -2543,8 +2557,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
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");
+ 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");
}
}
@@ -2593,60 +2607,79 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
foreach (WmsSterilizationInstockH wmsSterilizationInstockH in wmsSterilizationInstockHs)
{
- WmsCarryH wmsCarryH = await db_Floor4DMC2CPK.Queryable().Where(r => r.id == wmsSterilizationInstockH.carry_id).FirstAsync();
-
- if (wmsCarryH.location_id != wmsSterilizationInstockH.location_id)
+ SemaphoreSlim semaphoreSlim_MJC = null;
+ SemaphoreSlim semaphoreSlim_CPK = null;
+ try
{
- LoggerFloor4DMC2CPK.LogWarning($"【四楼灭菌仓到成品库】载具{wmsCarryH.carry_code}实际位置与灭菌入库记录位置不一致");
- continue;
+ semaphoreSlim_MJC = _wareHouseService.GetSemaphore("outstock", WmsWareHouseConst.WAREHOUSE_MJC_ID);
+ await semaphoreSlim_MJC.WaitAsync();
+ semaphoreSlim_CPK = _wareHouseService.GetSemaphore("instock", WmsWareHouseConst.WAREHOUSE_CP_ID);
+ await semaphoreSlim_CPK.WaitAsync();
+
+ WmsCarryH wmsCarryH = await db_Floor4DMC2CPK.Queryable().Where(r => r.id == wmsSterilizationInstockH.carry_id).FirstAsync();
+
+ if (wmsCarryH.location_id != wmsSterilizationInstockH.location_id)
+ {
+ LoggerFloor4DMC2CPK.LogWarning($"【四楼灭菌仓到成品库】载具{wmsCarryH.carry_code}实际位置与灭菌入库记录位置不一致");
+ continue;
+ }
+
+ BasLocation startlocation = await db_Floor4DMC2CPK.Queryable().Where(r => r.id == wmsCarryH.location_id).FirstAsync();
+
+ if (startlocation.is_lock == 1)
+ {
+ LoggerFloor4DMC2CPK.LogWarning($"【四楼待灭菌线到灭菌仓】 起点库位{startlocation.location_code}已锁定");
+ continue;
+ }
+ await db_Floor4DMC2CPK.Ado.BeginTranAsync();
+
+
+ InStockStrategyQuery inStockStrategyInput = new()
+ {
+ warehouse_id = WmsWareHouseConst.WAREHOUSE_CP_ID,
+ Region_id = WmsWareHouseConst.REGION_CPOutstock_ID,
+ Size = 1
+ };
+ List items = await _wareHouseService.InStockStrategy(inStockStrategyInput);
+
+ if (items.Count < 1)
+ {
+ LoggerFloor4DMC2CPK.LogWarning($"【四楼灭菌仓到成品库】 没有可以入库的库位");
+ break;
+ }
+ BasLocation endlocation = items[0];
+
+ //锁定起点库位
+ await db_Floor4DMC2CPK.Updateable().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == startlocation.id).ExecuteCommandAsync();
+ //锁定终点库位
+ await db_Floor4DMC2CPK.Updateable().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == endlocation.id).ExecuteCommandAsync();
+
+ bool result_createPretask = await createPretask(startlocation.id, endlocation.id, wmsCarryH.id, wmsCarryH.carry_code,
+ LoggerFloor4DMC2CPK, db_Floor4DMC2CPK, WmsWareHouseConst.BIZTYPE_WMSSTERILIZATIONINSTOCKCH_ID, "", wmsSterilizationInstockH.id);
+ if (!result_createPretask)
+ {
+ LoggerFloor4DMC2CPK.LogWarning($"【四楼灭菌仓到成品库】 {startlocation.location_code} 到 {endlocation.location_code} 预任务生成失败");
+ throw new Exception($"【四楼灭菌仓到成品库】 {startlocation.location_code} 到 {endlocation.location_code} 预任务生成失败");
+ }
+ LoggerFloor4DMC2CPK.LogInformation($"【四楼灭菌仓到成品库】 {startlocation.location_code} 到 {endlocation.location_code} 预任务生成成功");
+
+ wmsSterilizationInstockH.status = WmsWareHouseConst.BILLSTATUS_ON_ID;
+ wmsSterilizationInstockH.cp_location_id = endlocation.id;
+ wmsSterilizationInstockH.cp_location_code = endlocation.location_code;
+
+ await db_Floor4DMC2CPK.Updateable(wmsSterilizationInstockH).UpdateColumns(r => new { r.status }).ExecuteCommandAsync();
+
+ await db_Floor4DMC2CPK.Ado.CommitTranAsync();
}
-
- BasLocation startlocation = await db_Floor4DMC2CPK.Queryable().Where(r => r.id == wmsCarryH.location_id).FirstAsync();
-
- if (startlocation.is_lock == 1)
+ catch
{
- LoggerFloor4DMC2CPK.LogWarning($"【四楼待灭菌线到灭菌仓】 起点库位{startlocation.location_code}已锁定");
- continue;
+ throw;
}
- await db_Floor4DMC2CPK.Ado.BeginTranAsync();
-
-
- InStockStrategyQuery inStockStrategyInput = new()
+ finally
{
- warehouse_id = WmsWareHouseConst.WAREHOUSE_CP_ID,
- Region_id = WmsWareHouseConst.REGION_CPOutstock_ID,
- Size = 1
- };
- List items = await _wareHouseService.InStockStrategy(inStockStrategyInput);
-
- if (items.Count < 1)
- {
- LoggerFloor4DMC2CPK.LogWarning($"【四楼灭菌仓到成品库】 没有可以入库的库位");
- break;
+ semaphoreSlim_MJC.Release();
+ semaphoreSlim_CPK.Release();
}
- BasLocation endlocation = items[0];
-
- //锁定起点库位
- await db_Floor4DMC2CPK.Updateable().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == startlocation.id).ExecuteCommandAsync();
- //锁定终点库位
- await db_Floor4DMC2CPK.Updateable().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == endlocation.id).ExecuteCommandAsync();
-
- bool result_createPretask = await createPretask(startlocation.id, endlocation.id, wmsCarryH.id, wmsCarryH.carry_code,
- LoggerFloor4DMC2CPK, db_Floor4DMC2CPK, WmsWareHouseConst.BIZTYPE_WMSSTERILIZATIONINSTOCKCH_ID, "", wmsSterilizationInstockH.id);
- if (!result_createPretask)
- {
- LoggerFloor4DMC2CPK.LogWarning($"【四楼灭菌仓到成品库】 {startlocation.location_code} 到 {endlocation.location_code} 预任务生成失败");
- throw new Exception($"【四楼灭菌仓到成品库】 {startlocation.location_code} 到 {endlocation.location_code} 预任务生成失败");
- }
- LoggerFloor4DMC2CPK.LogInformation($"【四楼灭菌仓到成品库】 {startlocation.location_code} 到 {endlocation.location_code} 预任务生成成功");
-
- wmsSterilizationInstockH.status = WmsWareHouseConst.BILLSTATUS_ON_ID;
- wmsSterilizationInstockH.cp_location_id = endlocation.id;
- wmsSterilizationInstockH.cp_location_code = endlocation.location_code;
-
- await db_Floor4DMC2CPK.Updateable(wmsSterilizationInstockH).UpdateColumns(r => new { r.status }).ExecuteCommandAsync();
-
- await db_Floor4DMC2CPK.Ado.CommitTranAsync();
}
}
catch (ObjectDisposedException ex)
@@ -3189,7 +3222,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
Floor4DMJ2MJXtimer = new Timer(Floor4DMJ2MJX, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
Floor4MJX2MJCtimer = new Timer(Floor4MJX2MJC, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
- Floor4DMC2CPKtimer = new Timer(Floor4DMC2CPK, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
+ // 需求变更弃用
+ //Floor4DMC2CPKtimer = new Timer(Floor4DMC2CPK, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
F2KTPsupplementtimer = new Timer(F2KTPsupplement, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
YCLInternalTransfertimer = new Timer(YCLInternalTransfer, null, TimeSpan.FromSeconds(15), TimeSpan.FromSeconds(185));
@@ -3391,7 +3425,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
{
get
{
- string newFileName = $"{AppContext.BaseDirectory}/logs/{DateTime.Now:yyyyMMdd}/原材料仓/custom{DateTime.Now:yyyyMMdd}八工位空托盘补充.log";
+ string newFileName = $"{AppContext.BaseDirectory}/logs/{DateTime.Now:yyyyMMdd}/原材料仓/custom{DateTime.Now:yyyyMMdd}八工位入库/空托盘补充.log";
if (_LoggerBGWCarrySupplementFileName != newFileName)
{
ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddFile(newFileName, cfgOpts =>
@@ -3561,7 +3595,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
{
get
{
- string newFileName = $"{AppContext.BaseDirectory}/logs/{DateTime.Now:yyyyMMdd}/四楼灭菌/custom{DateTime.Now:yyyyMMdd}灭菌仓到成品仓.log";
+ string newFileName = $"{AppContext.BaseDirectory}/logs/{DateTime.Now:yyyyMMdd}/四楼灭菌/custom{DateTime.Now:yyyyMMdd}四楼灭菌线到解析仓.log";
if (_LoggerFloor4DMC2CPKFileName != newFileName)
{
ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddFile(newFileName, cfgOpts =>
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
index db25d0ab..6767139d 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
@@ -126,6 +126,10 @@ namespace Tnb.WarehouseMgr.Entities.Consts
/// 外协调拨出库
///
public const string MATERIALTRANSFER_WXDBOUTWAREHOUSE_CODE = "wxdbOutWarehouse";
+ ///
+ /// 灭菌入库
+ ///
+ public const string MATERIALTRANSFER_SterilizationInstock_CODE = "SterilizationInstock";
///
/// 出入库单据状态TypeID
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/DistributeF4JXCInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/DistributeF4JXCInput.cs
new file mode 100644
index 00000000..35526653
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/DistributeF4JXCInput.cs
@@ -0,0 +1,17 @@
+namespace Tnb.WarehouseMgr.Entities.Dto
+{
+ ///
+ /// 库房业务更新输入参数
+ ///
+ public class DistributeF4JXCInput
+ {
+ ///
+ /// 组织ID
+ ///
+ public string org_id { get; set; }
+ ///
+ /// 来源单据id
+ ///
+ public string? source_id { get; set; }
+ }
+}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSterilizationInstockH.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSterilizationInstockH.cs
index 4a20ffa4..aa340b74 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSterilizationInstockH.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSterilizationInstockH.cs
@@ -89,9 +89,14 @@ public partial class WmsSterilizationInstockH : BaseEntity
///
public string? status { get; set; }
-
///
/// 单号
///
public string? bill_code { get; set; }
+
+ ///
+ /// 来源
+ ///
+ public string? origin { get; set; }
+
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs
index 95c739ac..c9bf2a04 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs
@@ -72,6 +72,16 @@ namespace Tnb.WarehouseMgr
public static SemaphoreSlim _s_taskExecuteSemaphore_F4DMJCInstock = new(1);
public static SemaphoreSlim _s_taskExecuteSemaphore_F4DMJCOutstock = new(1);
///
+ /// 解析库
+ ///
+ public static SemaphoreSlim _s_taskExecuteSemaphore_F4JXKOutstock = new(1);
+ public static SemaphoreSlim _s_taskExecuteSemaphore_F4JXKInstock = new(1);
+ ///
+ /// 二楼空托区
+ ///
+ public static SemaphoreSlim _s_taskExecuteSemaphore_F2KTQOutstock = new(1);
+ public static SemaphoreSlim _s_taskExecuteSemaphore_F2KTQInstock = new(1);
+ ///
/// 成品仓
///
public static SemaphoreSlim _s_taskExecuteSemaphore_F3CPInstock = new(1);
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs
index afa24c4f..4635fadb 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs
@@ -622,7 +622,8 @@ namespace Tnb.WarehouseMgr
wmsOutsourceOrderD.fk_wms_outsource_order_id = wmsOutsourceOrderH.id;
wmsOutsourceOrderD.matcode = detail.material_code;
- var erpExtendField = await db.Queryable().InnerJoin((a, b) => a.table_id == b.Id).Where((a, b) => b.EnCode == detail.unit_code).Select((a, b) => b).FirstAsync();
+ var erpExtendField = await db.Queryable().InnerJoin((a, b) => a.table_id == b.Id).Where((a, b) => a.cunitid == detail.unit_code).Select((a, b) => b).FirstAsync();
+
if (erpExtendField != null)
{
wmsOutsourceOrderD.unit_id = erpExtendField.Id;
@@ -761,6 +762,9 @@ namespace Tnb.WarehouseMgr
// 外协调拨出库
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_ZC_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_YCL_ID)
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_WXDBOUTWAREHOUSE_CODE;
+ // 灭菌入库
+ else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_JXK_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_CP_ID)
+ transfer_type = WmsWareHouseConst.MATERIALTRANSFER_SterilizationInstock_CODE;
#endregion
//var wmsMaterialTransferdsDistinct = input.details.Select(r => new
@@ -1025,6 +1029,9 @@ namespace Tnb.WarehouseMgr
// 外协调拨出库
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_ZC_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_YCL_ID)
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_WXDBOUTWAREHOUSE_CODE;
+ // 灭菌入库
+ else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_JXK_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_CP_ID)
+ transfer_type = WmsWareHouseConst.MATERIALTRANSFER_SterilizationInstock_CODE;
#endregion
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
index 160235dc..d91a219a 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
@@ -132,6 +132,14 @@ namespace Tnb.WarehouseMgr
{
get { return _s_taskExecuteSemaphore_F2ZCCOutstock; }
}
+ public SemaphoreSlim s_taskExecuteSemaphore_F4JXKOutstock
+ {
+ get { return _s_taskExecuteSemaphore_F4JXKOutstock; }
+ }
+ public SemaphoreSlim s_taskExecuteSemaphore_F4JXKInstock
+ {
+ get { return _s_taskExecuteSemaphore_F4JXKInstock; }
+ }
public Dictionary s_elevatortaskDic
@@ -1216,20 +1224,20 @@ namespace Tnb.WarehouseMgr
getdic.Add("ZSSSXCTU02", new string[] { "YTCS", "右输送线上层允许出箱3", "true" });
getdic.Add("ZSSSXCTU01", new string[] { "YTCS", "左输送线上层允许出箱1", "true" });
getdic.Add("SSX-011-008", new string[] { "东面提升机输送线", "入库输送线8出箱完毕", "true" });
- getdic.Add("ZS-C01-2", new string[] { "hxjC", "A2AGV允许入满箱", "true" });
- getdic.Add("ZS-C02-2", new string[] { "hxjC", "A3AGV允许入满箱", "true" });
- getdic.Add("ZS-C03-2", new string[] { "hxjC", "A4AGV允许入满箱", "true" });
- getdic.Add("ZS-C04-2", new string[] { "hxjC", "A5AGV允许入满箱", "true" });
- getdic.Add("ZS-C05-2", new string[] { "hxjC", "A6AGV允许入满箱", "true" });
- getdic.Add("ZS-C06-2", new string[] { "hxjC", "A7AGV允许入满箱", "true" });
- getdic.Add("ZS-C07-2", new string[] { "hxjC", "A8AGV允许入满箱", "true" });
- getdic.Add("ZS-C08-2", new string[] { "hxjC", "A9AGV允许入满箱", "true" });
- getdic.Add("ZS-C09-2", new string[] { "hxjC", "A10AGV允许入满箱", "true" });
- getdic.Add("ZS-C10-2", new string[] { "hxjC", "A11AGV允许入满箱", "true" });
- getdic.Add("ZS-C11-2", new string[] { "hxjC", "A12AGV允许入满箱", "true" });
- getdic.Add("ZS-C12-2", new string[] { "hxjC", "A13AGV允许入满箱", "true" });
- getdic.Add("ZS-C13-2", new string[] { "hxjC", "A14AGV允许入满箱", "true" });
- getdic.Add("ZS-C14-2", new string[] { "hxjC", "A1AGV允许入满箱", "true" });
+ getdic.Add("ZS-C01-2", new string[] { "hxjC", "A2AGV允许入满箱", "false" });
+ getdic.Add("ZS-C02-2", new string[] { "hxjC", "A3AGV允许入满箱", "false" });
+ getdic.Add("ZS-C03-2", new string[] { "hxjC", "A4AGV允许入满箱", "false" });
+ getdic.Add("ZS-C04-2", new string[] { "hxjC", "A5AGV允许入满箱", "false" });
+ getdic.Add("ZS-C05-2", new string[] { "hxjC", "A6AGV允许入满箱", "false" });
+ getdic.Add("ZS-C06-2", new string[] { "hxjC", "A7AGV允许入满箱", "false" });
+ getdic.Add("ZS-C07-2", new string[] { "hxjC", "A8AGV允许入满箱", "false" });
+ getdic.Add("ZS-C08-2", new string[] { "hxjC", "A9AGV允许入满箱", "false" });
+ getdic.Add("ZS-C09-2", new string[] { "hxjC", "A10AGV允许入满箱", "false" });
+ getdic.Add("ZS-C10-2", new string[] { "hxjC", "A11AGV允许入满箱", "false" });
+ getdic.Add("ZS-C11-2", new string[] { "hxjC", "A12AGV允许入满箱", "false" });
+ getdic.Add("ZS-C12-2", new string[] { "hxjC", "A13AGV允许入满箱", "false" });
+ getdic.Add("ZS-C13-2", new string[] { "hxjC", "A14AGV允许入满箱", "false" });
+ getdic.Add("ZS-C14-2", new string[] { "hxjC", "A1AGV允许入满箱", "false" });
//getdic.Add("ZS-A01-2", new string[] { "hxjA", "A3AGV允许入满箱", "true" });
//getdic.Add("ZS-A02-2", new string[] { "hxjA", "A4AGV允许入满箱", "true" });
@@ -1237,12 +1245,12 @@ namespace Tnb.WarehouseMgr
//getdic.Add("ZS-D06-2", new string[] { "hxjA", "A6AGV允许入满箱", "true" });
//getdic.Add("ZS-A05-2", new string[] { "hxjA", "A7AGV允许入满箱", "true" });
//getdic.Add("ZS-A06-2", new string[] { "hxjA", "A8AGV允许入满箱", "true" });
- getdic.Add("ZS-A07-2", new string[] { "hxjA", "A9AGV允许入满箱", "true" });
- getdic.Add("ZS-A08-2", new string[] { "hxjA", "A10AGV允许入满箱", "true" });
- getdic.Add("ZS-A09-2", new string[] { "hxjA", "A11AGV允许入满箱", "true" });
- getdic.Add("ZS-A10-2", new string[] { "hxjA", "A12AGV允许入满箱", "true" });
- getdic.Add("ZS-A11-2", new string[] { "hxjA", "A13AGV允许入满箱", "true" });
- getdic.Add("ZS-A12-2", new string[] { "hxjA", "A14AGV允许入满箱", "true" });
+ getdic.Add("ZS-A07-2", new string[] { "hxjA", "A9AGV允许入满箱", "false" });
+ getdic.Add("ZS-A08-2", new string[] { "hxjA", "A10AGV允许入满箱", "false" });
+ getdic.Add("ZS-A09-2", new string[] { "hxjA", "A11AGV允许入满箱", "false" });
+ getdic.Add("ZS-A10-2", new string[] { "hxjA", "A12AGV允许入满箱", "false" });
+ getdic.Add("ZS-A11-2", new string[] { "hxjA", "A13AGV允许入满箱", "false" });
+ getdic.Add("ZS-A12-2", new string[] { "hxjA", "A14AGV允许入满箱", "false" });
getdic.Add("ZS-D01-2", new string[] { "hxjA", "A1AGV允许入满箱", "false" });
getdic.Add("ZS-D02-2", new string[] { "hxjA", "A2AGV允许入满箱", "false" });
@@ -1264,20 +1272,20 @@ namespace Tnb.WarehouseMgr
putdic.Add("SSX-121-009", new string[] { "东面提升机输送线", "上升降机9入箱完毕", "true" });
putdic.Add("SSX-121-010", new string[] { "东面提升机输送线", "上升降机10入箱完毕", "true" });
putdic.Add("YCLCKBGW", new string[] { "CP8", "PutDoneEmptyBox", "true" });
- putdic.Add("ZS-C01-1", new string[] { "hxjC", "A2AGV允许出空箱", "true" });
- putdic.Add("ZS-C02-1", new string[] { "hxjC", "A3AGV允许出空箱", "true" });
- putdic.Add("ZS-C03-1", new string[] { "hxjC", "A4AGV允许出空箱", "true" });
- putdic.Add("ZS-C04-1", new string[] { "hxjC", "A5AGV允许出空箱", "true" });
- putdic.Add("ZS-C05-1", new string[] { "hxjC", "A6AGV允许出空箱", "true" });
- putdic.Add("ZS-C06-1", new string[] { "hxjC", "A7AGV允许出空箱", "true" });
- putdic.Add("ZS-C07-1", new string[] { "hxjC", "A8AGV允许出空箱", "true" });
- putdic.Add("ZS-C08-1", new string[] { "hxjC", "A9AGV允许出空箱", "true" });
- putdic.Add("ZS-C09-1", new string[] { "hxjC", "A10AGV允许出空箱", "true" });
- putdic.Add("ZS-C10-1", new string[] { "hxjC", "A11AGV允许出空箱", "true" });
- putdic.Add("ZS-C11-1", new string[] { "hxjC", "A12AGV允许出空箱", "true" });
- putdic.Add("ZS-C12-1", new string[] { "hxjC", "A13AGV允许出空箱", "true" });
- putdic.Add("ZS-C13-1", new string[] { "hxjC", "A14AGV允许出空箱", "true" });
- putdic.Add("ZS-C14-1", new string[] { "hxjC", "A1AGV允许出空箱", "true" });
+ putdic.Add("ZS-C01-1", new string[] { "hxjC", "A2AGV允许出空箱", "false" });
+ putdic.Add("ZS-C02-1", new string[] { "hxjC", "A3AGV允许出空箱", "false" });
+ putdic.Add("ZS-C03-1", new string[] { "hxjC", "A4AGV允许出空箱", "false" });
+ putdic.Add("ZS-C04-1", new string[] { "hxjC", "A5AGV允许出空箱", "false" });
+ putdic.Add("ZS-C05-1", new string[] { "hxjC", "A6AGV允许出空箱", "false" });
+ putdic.Add("ZS-C06-1", new string[] { "hxjC", "A7AGV允许出空箱", "false" });
+ putdic.Add("ZS-C07-1", new string[] { "hxjC", "A8AGV允许出空箱", "false" });
+ putdic.Add("ZS-C08-1", new string[] { "hxjC", "A9AGV允许出空箱", "false" });
+ putdic.Add("ZS-C09-1", new string[] { "hxjC", "A10AGV允许出空箱", "false" });
+ putdic.Add("ZS-C10-1", new string[] { "hxjC", "A11AGV允许出空箱", "false" });
+ putdic.Add("ZS-C11-1", new string[] { "hxjC", "A12AGV允许出空箱", "false" });
+ putdic.Add("ZS-C12-1", new string[] { "hxjC", "A13AGV允许出空箱", "false" });
+ putdic.Add("ZS-C13-1", new string[] { "hxjC", "A14AGV允许出空箱", "false" });
+ putdic.Add("ZS-C14-1", new string[] { "hxjC", "A1AGV允许出空箱", "false" });
//putdic.Add("ZS-A01-1", new string[] { "hxjA", "A3AGV允许出空箱", "true" });
//putdic.Add("ZS-A02-1", new string[] { "hxjA", "A4AGV允许出空箱", "true" });
@@ -1285,12 +1293,12 @@ namespace Tnb.WarehouseMgr
//putdic.Add("ZS-D06-1", new string[] { "hxjA", "A6AGV允许出空箱", "false" });
//putdic.Add("ZS-A05-1", new string[] { "hxjA", "A7AGV允许出空箱", "true" });
//putdic.Add("ZS-A06-1", new string[] { "hxjA", "A8AGV允许出空箱", "true" });
- putdic.Add("ZS-A07-1", new string[] { "hxjA", "A9AGV允许出空箱", "true" });
- putdic.Add("ZS-A08-1", new string[] { "hxjA", "A10AGV允许出空箱", "true" });
- putdic.Add("ZS-A09-1", new string[] { "hxjA", "A11AGV允许出空箱", "true" });
- putdic.Add("ZS-A10-1", new string[] { "hxjA", "A12AGV允许出空箱", "true" });
+ putdic.Add("ZS-A07-1", new string[] { "hxjA", "A9AGV允许出空箱", "false" });
+ putdic.Add("ZS-A08-1", new string[] { "hxjA", "A10AGV允许出空箱", "false" });
+ putdic.Add("ZS-A09-1", new string[] { "hxjA", "A11AGV允许出空箱", "false" });
+ putdic.Add("ZS-A10-1", new string[] { "hxjA", "A12AGV允许出空箱", "false" });
putdic.Add("ZS-A11-1", new string[] { "hxjA", "A13AGV允许出空箱", "false" });
- putdic.Add("ZS-A12-1", new string[] { "hxjA", "A14AGV允许出空箱", "true" });
+ putdic.Add("ZS-A12-1", new string[] { "hxjA", "A14AGV允许出空箱", "false" });
// D线 待改成配置
putdic.Add("ZS-D01-1", new string[] { "hxjA", "A1AGV允许出空箱", "false" });
@@ -2874,7 +2882,8 @@ namespace Tnb.WarehouseMgr
WmsCarryH wmsCarryH = await _db.Queryable().Where(r => r.location_id == wmsDistaskH.startlocation_id
&& r.carry_code != wmsDistaskH.carry_code).FirstAsync();
BasLocation startlocation = await _db.Queryable().Where(r => r.location_code == wmsDistaskH.startlocation_code).FirstAsync();
- if (wmsCarryH != null && startlocation.is_type == ((int)(EnumLocationType.存储库位)).ToString())
+ WmsCarryH wmsTaskCarryH = await _db.Queryable().Where(r => r.id == wmsDistaskH.carry_id).FirstAsync();
+ if (wmsCarryH != null && startlocation.is_type == ((int)(EnumLocationType.存储库位)).ToString() && wmsTaskCarryH.carrystd_id != WmsWareHouseConst.CARRY_LJSTD_ID)
{
throw Oops.Bah($"任务单{wmsDistaskH.bill_code}的起点库位{wmsDistaskH.startlocation_code}是存储库位,且已被载具{wmsCarryH.carry_code}占用!");
}
@@ -2973,7 +2982,8 @@ namespace Tnb.WarehouseMgr
{
WmsCarryH wmsCarryH = await _db.Queryable().Where(r => r.location_id == wmsDistaskH.endlocation_id && r.carry_code != wmsDistaskH.carry_code).FirstAsync();
BasLocation endlocation = await _db.Queryable().Where(r => r.location_code == wmsDistaskH.endlocation_code).FirstAsync();
- if (wmsCarryH != null && endlocation.is_type == ((int)(EnumLocationType.存储库位)).ToString())
+ WmsCarryH wmsTaskCarryH = await _db.Queryable().Where(r => r.id == wmsDistaskH.carry_id).FirstAsync();
+ if (wmsCarryH != null && endlocation.is_type == ((int)(EnumLocationType.存储库位)).ToString() && wmsTaskCarryH.carrystd_id != WmsWareHouseConst.CARRY_LJSTD_ID)
{
throw Oops.Bah($"任务单{wmsDistaskH.bill_code}的终点库位{wmsDistaskH.endlocation_code}是存储库位,且已被载具{wmsCarryH.carry_code}占用!");
}
@@ -3587,8 +3597,8 @@ namespace Tnb.WarehouseMgr
// points.Add(wmsPointHs.Where(r => r.id == pEndId).First());
//}
#endregion
- //1-3
- if (startlocation.wh_id == WmsWareHouseConst.WAREHOUSE_CPCRK_ID && endlocation.wh_id == WmsWareHouseConst.WAREHOUSE_CP_ID)
+ //1-4
+ if (startlocation.wh_id == WmsWareHouseConst.WAREHOUSE_CPCRK_ID && endlocation.wh_id == WmsWareHouseConst.WAREHOUSE_JXK_ID)
{
WmsElevatorH wmsElevatorH = await _db.Queryable().Where(it => it.elevator_group == "2" && it.enabled == 1).OrderBy(r => r.task_nums).FirstAsync();
string elevatorSno = wmsElevatorH.elevator_code.Replace("Elevator", "");
@@ -3596,8 +3606,8 @@ namespace Tnb.WarehouseMgr
points.Add(wmsPointHs.Where(r => r.id == pStartId).First());
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-01-0{elevatorSno}").First());
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-1-{elevatorSno}").First());
- points.Add(wmsPointHs.Where(r => r.point_code == $"DT-3-{elevatorSno}").First());
- points.Add(wmsPointHs.Where(r => r.point_code == $"DT-03-0{elevatorSno}").First());
+ points.Add(wmsPointHs.Where(r => r.point_code == $"DT-4-{elevatorSno}").First());
+ points.Add(wmsPointHs.Where(r => r.point_code == $"DT-04-0{elevatorSno}").First());
points.Add(wmsPointHs.Where(r => r.id == pEndId).First());
}
// 2-4
@@ -4596,6 +4606,22 @@ namespace Tnb.WarehouseMgr
result = _s_taskExecuteSemaphore_F2BCQInstock;
break;
}
+ case WmsWareHouseConst.WAREHOUSE_MJC_ID:
+ {
+ if (type == "outstock")
+ result = _s_taskExecuteSemaphore_F4JXKOutstock;
+ else if (type == "instock")
+ result = _s_taskExecuteSemaphore_F4JXKInstock;
+ break;
+ }
+ case WmsWareHouseConst.WAREHOUSE_F2KTQ_ID:
+ {
+ if (type == "outstock")
+ result = _s_taskExecuteSemaphore_F2KTQOutstock;
+ else if (type == "instock")
+ result = _s_taskExecuteSemaphore_F2KTQInstock;
+ break;
+ }
}
return result;
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialSignHService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialSignHService.cs
index 23318609..d4771d02 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialSignHService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialSignHService.cs
@@ -91,6 +91,11 @@ namespace Tnb.WarehouseMgr
throw new ArgumentNullException(nameof(input));
}
+ if (input.details.Count == 0)
+ {
+ throw new AppFriendlyException($"【MaterialSign】未接收到物料列表数据,请重试", 500);
+ }
+
WmsCarryH wmsCarryH = await _db.Queryable().Where(r => r.carry_code == input.carry_code).FirstAsync();
if (wmsCarryH == null)
{
@@ -282,6 +287,7 @@ namespace Tnb.WarehouseMgr
}
}
+ await _db.Updateable().SetColumns(r => r.is_use == "0").Where(r => r.id == carryLoc.id).ExecuteCommandAsync();
await _db.Insertable(wmsMaterialSignH).ExecuteCommandAsync();
await _db.Insertable(wmsMaterialSignDs).ExecuteCommandAsync();
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs
index 23d0355e..c5b75933 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs
@@ -380,7 +380,7 @@ namespace Tnb.WarehouseMgr
List endLocations = new List();
// 集中供料区三工位
- if (wmsMaterialTransfer.warehouse_instock == WmsWareHouseConst.WAREHOUSE_JZGL_ID|| wmsMaterialTransfer.warehouse_instock == WmsWareHouseConst.WAREHOUSE_WBZHHC_ID)
+ if (wmsMaterialTransfer.warehouse_instock == WmsWareHouseConst.WAREHOUSE_JZGL_ID || wmsMaterialTransfer.warehouse_instock == WmsWareHouseConst.WAREHOUSE_WBZHHC_ID)
{
// 控制权限 原材料出库到集中供料权限 1.注塑加料工权限 2.注塑领班权限
var power = _db.Queryable()
@@ -474,6 +474,186 @@ namespace Tnb.WarehouseMgr
return await ToApiResult(HttpStatusCode.OK, "成功");
}
+ ///
+ /// 灭菌入库
+ ///
+ ///
+ ///
+ ///
+ ///
+ public async Task DistributeF4JXC(DistributeF4JXCInput input)
+ {
+ SemaphoreSlim semaphoreSlim_MJC = null;
+ SemaphoreSlim semaphoreSlim_CPK = null;
+ try
+ {
+ semaphoreSlim_MJC = _wareHouseService.GetSemaphore("outstock", WmsWareHouseConst.WAREHOUSE_MJC_ID);
+ await semaphoreSlim_MJC.WaitAsync();
+ semaphoreSlim_CPK = _wareHouseService.GetSemaphore("instock", WmsWareHouseConst.WAREHOUSE_CP_ID);
+ await semaphoreSlim_CPK.WaitAsync();
+
+ if (string.IsNullOrEmpty(input.source_id))
+ {
+ throw new AppFriendlyException("来源单据id不可为空", 500);
+ }
+
+ WmsMaterialTransfer wmsMaterialTransfer = await _db.Queryable().FirstAsync(it => it.id == input.source_id);
+ List wmsMaterialTransferDs = _db.Queryable()
+ .Where(a => a.bill_id == wmsMaterialTransfer.id).ToList();
+
+ if (wmsMaterialTransfer == null)
+ {
+ throw new AppFriendlyException($"不存在id为{input.source_id}的转库单", 500);
+ }
+
+ await _db.Ado.BeginTranAsync();
+
+ foreach (WmsMaterialTransferD wmsMaterialTransferD in wmsMaterialTransferDs)
+ {
+ // 转库单载具子表
+ List wmsMaterialTransferCarrys = new List();
+
+ // 需要转库数量
+ decimal needOut = (wmsMaterialTransferD.qty - wmsMaterialTransferD.yxfqty).Value;
+
+ //出库取起点,获取所有符合输入的载具规格的载具
+ OutStockStrategyQuery outStockStrategyInput = new()
+ {
+ warehouse_id = WmsWareHouseConst.WAREHOUSE_HCC_ID,
+ material_id = wmsMaterialTransferD.material_id,
+ code_batch = wmsMaterialTransferD.code_batch,
+ qty = needOut,
+ dbConn = _db
+ };
+ List> carryitems = await _wareHouseService.OutStockStrategy_saleRelease(outStockStrategyInput);
+ List> items_pretask = carryitems.Where(r => r.Item1 == "预任务").ToList();
+
+ decimal canOutstockQty = items_pretask.Sum(r => r.Item3.codeqty).ParseToDecimal();
+ if (canOutstockQty != needOut)
+ {
+ throw new AppFriendlyException($@"当前可出库数量与需要出库数量不一致时无法出库! 当前可出库数量为 {canOutstockQty.ToString("G")},需要出库数量为{needOut.ToString("G")}", 500);
+ }
+
+ InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_CP_ID, Size = items_pretask.Count, Region_id = WmsWareHouseConst.REGION_CPOutstock_ID };
+ List endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput);
+
+ int instockLocIndex = 0;
+ foreach (Tuple item in items_pretask)
+ {
+ WmsCarryH wmsCarryH = item.Item2;
+ WmsCarryCode carryCode = item.Item3;
+ decimal codeqty = carryCode.codeqty;
+ BasLocation startLocation = item.Item4;
+
+
+ WmsSterilizationInstockH wmsSterilizationInstockH = await _db.Queryable().Where(r => r.carry_id == wmsCarryH.id
+ && r.status == WmsWareHouseConst.BILLSTATUS_ADD_ID && r.origin == "外协调拨入库").FirstAsync();
+ if (wmsSterilizationInstockH == null)
+ {
+ Logger.LogWarning($"【四楼静置仓到成品库】载具{wmsCarryH.carry_code}没有找到新增状态且来源是外协调拨入库的灭菌入库记录!");
+ continue;
+ }
+ if (wmsCarryH.location_id != wmsSterilizationInstockH.location_id)
+ {
+ Logger.LogWarning($"【四楼静置仓到成品库】载具{wmsCarryH.carry_code}实际位置与灭菌入库记录位置不一致");
+ continue;
+ }
+
+ BasLocation startlocation = await _db.Queryable().Where(r => r.id == wmsCarryH.location_id).FirstAsync();
+
+ if (startlocation.is_lock == 1)
+ {
+ Logger.LogWarning($"【四楼静置仓到成品库】 起点库位{startlocation.location_code}已锁定");
+ continue;
+ }
+
+ wmsSterilizationInstockH.status = WmsWareHouseConst.BILLSTATUS_ON_ID;
+ wmsSterilizationInstockH.cp_location_id = endLocations[instockLocIndex].id;
+ wmsSterilizationInstockH.cp_location_code = endLocations[instockLocIndex].location_code;
+
+ await _db.Updateable(wmsSterilizationInstockH).UpdateColumns(r => new { r.status }).ExecuteCommandAsync();
+
+ // 转库单载具子表
+ WmsMaterialTransferCarry wmsMaterialTransferCarry = new WmsMaterialTransferCarry();
+ wmsMaterialTransferCarry.bill_id = input.source_id;
+ wmsMaterialTransferCarry.carry_id = wmsCarryH.id;
+ wmsMaterialTransferCarry.carry_code = wmsCarryH.carry_code;
+ wmsMaterialTransferCarry.create_id = _userManager.UserId;
+ wmsMaterialTransferCarry.create_time = DateTime.Now;
+ wmsMaterialTransferCarry.endlocation_id = endLocations[instockLocIndex].id;
+ wmsMaterialTransferCarry.endlocation_code = endLocations[instockLocIndex].location_code;
+ wmsMaterialTransferCarry.startlocation_id = startLocation.id;
+ wmsMaterialTransferCarry.startlocation_code = startLocation.location_code;
+ wmsMaterialTransferCarry.mat_bill_id = wmsMaterialTransferD.id;
+ wmsMaterialTransferCarry.qty = codeqty;
+ wmsMaterialTransferCarrys.Add(wmsMaterialTransferCarry);
+
+ await _db.Updateable().SetColumns(r => r.work_station == wmsMaterialTransferD.station_code).Where(r => r.id == wmsCarryH.id).ExecuteCommandAsync();
+
+ instockLocIndex++;
+ }
+
+ await _db.Updateable().SetColumns(r => new WmsMaterialTransfer
+ {
+ status = WmsWareHouseConst.BILLSTATUS_ON_ID,
+ carry_count = (r.carry_count == null ? 0 : r.carry_count) + wmsMaterialTransferCarrys.Count,
+ remainbindracknum = (r.remainbindracknum == null ? 0 : r.remainbindracknum) + wmsMaterialTransferCarrys.Count
+ }).Where(r => r.id == input.source_id).ExecuteCommandAsync();
+ Logger.LogInformation($"【DistributeF4JXC】更新转库单{wmsMaterialTransfer.bill_code}主表的数据");
+
+ foreach (WmsMaterialTransferCarry wmsMaterialTransferCarry in wmsMaterialTransferCarrys)
+ {
+ CommonCreatePretaskInput commonCreatePretaskInput = new CommonCreatePretaskInput();
+ commonCreatePretaskInput.startlocation_id = wmsMaterialTransferCarry.startlocation_id;
+ commonCreatePretaskInput.endlocation_id = wmsMaterialTransferCarry.endlocation_id;
+ commonCreatePretaskInput.carry_id = wmsMaterialTransferCarry.carry_id;
+ commonCreatePretaskInput.carry_code = wmsMaterialTransferCarry.carry_code;
+ commonCreatePretaskInput.task_type = WmsWareHouseConst.WMS_PRETASK_OUTSTOCK_TYPE_ID;
+ commonCreatePretaskInput.biz_type = WmsWareHouseConst.BIZTYPE_WMSMATERIALTRANSFER_ID;
+ commonCreatePretaskInput.source_id = wmsMaterialTransferCarry.mat_bill_id;
+ commonCreatePretaskInput.isExcuteMission = false;
+
+ var res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput, _db);
+ if (res.code != JNPF.Common.Enums.HttpStatusCode.OK)
+ {
+ Logger.LogInformation($"【DistributeF4JXC】生成预任务失败 载具 {wmsMaterialTransferCarry.carry_code}");
+ throw new AppFriendlyException($"生成预任务失败 载具 {wmsMaterialTransferCarry.carry_code}", 500);
+ }
+ JObject keyValuePairs = JObject.Parse(res.data.ToString());
+ JArray array = JArray.Parse(keyValuePairs["pretaskids"].ToString());
+ wmsMaterialTransferCarry.pretask_id = array[0].ToString();
+
+ await _db.Updateable().SetColumns(r => r.yxfqty == r.yxfqty + wmsMaterialTransferCarry.qty).Where(r => r.id == wmsMaterialTransferCarry.mat_bill_id).ExecuteCommandAsync();
+ }
+
+ await _db.Insertable(wmsMaterialTransferCarrys).ExecuteCommandAsync();
+ Logger.LogInformation($"【DistributeF4JXC】插入转库单{wmsMaterialTransfer.bill_code}载具表的数据");
+
+ Logger.LogInformation($"转库单{wmsMaterialTransfer.bill_code} 行号 {wmsMaterialTransferD.lineno}预任务{wmsMaterialTransferCarrys.Count}条全部生成成功");
+ }
+
+ await _db.Ado.CommitTranAsync();
+
+
+
+ }
+ catch(Exception ex)
+ {
+ await _db.Ado.RollbackTranAsync();
+ Logger.LogError("【DistributeF4JXC】" + ex.Message);
+ Logger.LogError("【DistributeF4JXC】" + ex.StackTrace);
+ return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
+ }
+ finally
+ {
+ semaphoreSlim_MJC.Release();
+ semaphoreSlim_CPK.Release();
+ }
+
+
+ return await ToApiResult(HttpStatusCode.OK, "成功");
+ }
+
[HttpPost, NonUnify, AllowAnonymous]
public async Task QtckList(QueryQTCKInput input)
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryBindService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryBindService.cs
index 5b6e1a6d..3b11f5d1 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryBindService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryBindService.cs
@@ -157,7 +157,7 @@ namespace Tnb.WarehouseMgr
}*/
///
- /// 1楼到3楼 外协入库
+ /// 1楼到4楼 外协入库
///
///
///
@@ -198,7 +198,7 @@ namespace Tnb.WarehouseMgr
}
await _db.Ado.BeginTranAsync();
//入库取终点 //出库起点
- InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_CP_ID,Region_id = WmsWareHouseConst.REGION_CPOutstock_ID, Size = 1 };
+ InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_JXK_ID, Size = 1 };
List endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput);
if (endLocations.Count == 0)
{
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPackInstockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPackInstockService.cs
index 42ec0b47..15309423 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPackInstockService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPackInstockService.cs
@@ -94,13 +94,11 @@ namespace Tnb.WarehouseMgr
}
}
- await _db.Ado.CommitTranAsync();
}
catch (Exception ex)
{
Logger.LogWarning("【WmsPackInstockService ModifyAsync】" + ex.Message);
Logger.LogWarning("【WmsPackInstockService ModifyAsync】" + ex.StackTrace);
- await _db.Ado.RollbackTranAsync();
}
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleReleaseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleReleaseService.cs
index c25f8335..6236ec43 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleReleaseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleReleaseService.cs
@@ -205,7 +205,7 @@ namespace Tnb.WarehouseMgr
if (endLocations.Count < items_pretask.Count)
{
- throw new AppFriendlyException("三楼人工出库区没有足够的未锁定且空闲的出库工位", 500);
+ throw new AppFriendlyException($"三楼人工出库区没有足够的未锁定且空闲的出库库位!需要{items_pretask.Count}个库位,实际可用{endLocations.Count}个库位", 500);
}
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsSortingtaskService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsSortingtaskService.cs
index 75a7f811..6677f821 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsSortingtaskService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsSortingtaskService.cs
@@ -106,33 +106,33 @@ namespace Tnb.WarehouseMgr
else
{
input.sidx = input.sidx.Replace("create_time", "a.create_time").Replace("erp_bill_code", "e.erp_bill_code");
-
}
- Dictionary status_dic = await _db.Queryable()
- .InnerJoin((a, b) => a.Id == b.DictionaryTypeId)
- .Where((a, b) => a.FullName == "单据状态").Select((a, b) => b).ToDictionaryAsync(k => k.Id, v => v.FullName);
-
- SqlSugarPagedList result = await _db.Queryable()
+ var _result = await _db.Queryable()
.InnerJoin((a, b) => a.carry_id == b.carry_id)
.InnerJoin((a, b, c) => b.material_id == c.id)
.InnerJoin((a, b, c, d) => a.source_id == d.id)
.InnerJoin((a, b, c, d, e) => e.id == d.bill_id)
- .WhereIF(!string.IsNullOrEmpty(status), (a, b, c, d, e) => a.status == status)
- .Select((a, b, c, d, e) => new WmsSortingtask
+ .InnerJoin((a, b, c, d, e, f) => f.Id == a.status)
+ .WhereIF(!string.IsNullOrEmpty(status), (a, b, c, d, e, f) => a.status == status)
+ .Select((a, b, c, d, e, f) => new WmsSortingtask
{
+ id = a.id,
create_time = DateTime.Parse(a.create_time.ToString("yyyy-MM-dd HH:mm:ss")),
material_id = c.id,
- material_code =c.code ,
+ material_code = c.code,
material_name = c.name,
- material_specification =c.material_specification,
+ material_specification = c.material_specification,
code_batch = b.code_batch,
- erp_bill_code = e.erp_bill_code
+ erp_bill_code = e.erp_bill_code,
+ status = f.FullName
}, true)
.OrderBy($"{input.sidx} {input.sort}")
.ToPagedListAsync(input.currentPage, input.pageSize);
- return PageResult.SqlSugarPageResult(result);
+ var result = PageResult.SqlSugarPageResult(_result);
+
+ return result;
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs
index 8a624f16..7d78cf00 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs
@@ -66,6 +66,7 @@ namespace Tnb.WarehouseMgr
.WhereIF(!string.IsNullOrEmpty(container_no), (a, b, c, d, e, f) => f.container_no.Contains(container_no))
.WhereIF(!string.IsNullOrEmpty(material_code), (a, b, c, d, e, f) => f.code.Contains(material_code))
.WhereIF(!string.IsNullOrEmpty(warehouse_id), (a, b, c, d, e, f) => c.wh_id == warehouse_id)
+ .Where((a, b, c, d, e, f) => c.is_type == ((int)EnumLocationType.存储库位).ToString())
.Select((a, b, c, d, e, f, g, h) => new WmsStockReportH
{
org_id = e.org_id,
@@ -136,6 +137,7 @@ namespace Tnb.WarehouseMgr
.WhereIF(!string.IsNullOrEmpty(container_no), (a, b, c, d, e, f, g, h) => f.container_no.Contains(container_no))
.WhereIF(!string.IsNullOrEmpty(material_code), (a, b, c, d, e, f) => f.code.Contains(material_code))
.WhereIF(!string.IsNullOrEmpty(warehouse_id), (a, b, c, d, e, f) => c.wh_id == warehouse_id)
+ .Where((a, b, c, d, e, f) => c.is_type == ((int)EnumLocationType.存储库位).ToString())
.Select((a, b, c, d, e, f, g, h) => new WmsStockReportH
{
org_id = e.org_id,
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferInstockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferInstockService.cs
index db8f8d75..f47b7037 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferInstockService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferInstockService.cs
@@ -30,6 +30,7 @@ using Tnb.WarehouseMgr.Interfaces;
using Tnb.BasicData;
using Tnb.ProductionMgr.Entities.Entity;
using Tnb.BasicData.Interfaces;
+using System.Security.Cryptography.X509Certificates;
namespace Tnb.WarehouseMgr
{
@@ -73,6 +74,31 @@ namespace Tnb.WarehouseMgr
{
throw new ArgumentNullException(nameof(input));
}
+ WmsCarryH wmsCarryH = await _db.Queryable().FirstAsync(x => x.id == input.wmsDistaskH.carry_id);
+ DateTime dateTime = DateTime.Now;
+ WmsSterilizationInstockH wmsSterilizationInstockH = new WmsSterilizationInstockH();
+ string code = await _billRullService.GetBillNumber("WmsSterilizationInstockH");
+ wmsSterilizationInstockH.bill_code = code;
+ wmsSterilizationInstockH.carry_id = wmsCarryH.id;
+ wmsSterilizationInstockH.carry_code = wmsCarryH.carry_code;
+ wmsSterilizationInstockH.location_id = input.wmsDistaskH.endlocation_id;
+ wmsSterilizationInstockH.location_code = input.wmsDistaskH.endlocation_code;
+ wmsSterilizationInstockH.create_id = WmsWareHouseConst.AdministratorUserId;
+ wmsSterilizationInstockH.create_time = dateTime;
+ wmsSterilizationInstockH.instock_time = dateTime;
+ wmsSterilizationInstockH.org_id = WmsWareHouseConst.AdministratorOrgId;
+ wmsSterilizationInstockH.xl_location_id = input.wmsDistaskH.startlocation_id;
+ wmsSterilizationInstockH.xl_location_code = input.wmsDistaskH.startlocation_code;
+ wmsSterilizationInstockH.status = WmsWareHouseConst.BILLSTATUS_ADD_ID;
+ wmsSterilizationInstockH.origin = "外协调拨入库";
+
+ int row = await _db.Insertable(wmsSterilizationInstockH).ExecuteCommandAsync();
+ if (row > 0)
+ Logger.LogInformation($"【外协到解析仓】 灭菌入库记录生成成功");
+ else
+ Logger.LogWarning($"【外协到解析仓】 灭菌入库记录生成失败");
+
+
Logger.Information($"进入成品调拨入库单上传BIP逻辑");
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferOutstockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferOutstockService.cs
index 9364824c..7f695e72 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferOutstockService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferOutstockService.cs
@@ -129,7 +129,7 @@ namespace Tnb.WarehouseMgr
if (endLocations.Count < items_pretask.Count)
{
- throw new AppFriendlyException("三楼人工出库区没有足够的未锁定且空闲的出库工位", 500);
+ throw new AppFriendlyException($"三楼人工出库区没有足够的未锁定且空闲的出库库位!需要{items_pretask.Count}个库位,实际可用{endLocations.Count}个库位", 500);
}
}