Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
2024-10-09 18:21:19 +08:00
16 changed files with 504 additions and 189 deletions

View File

@@ -2420,7 +2420,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
}
/// <summary>
/// 四楼灭菌线到灭菌
/// 四楼灭菌线到解析
/// </summary>
/// <param name="args"></param>
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<string, string[]> getdic = new Dictionary<string, string[]>();
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<BasLocation> 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<BasLocation> 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<BasLocation>().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<WmsCarryH>().Where(r => r.carry_code == carry_code).FirstAsync();
if (wmsCarryH == null)
{
LoggerFloor4MJX2MJC.LogWarning($"【四楼灭菌线到解析仓】 托盘号{carry_code}在系统中不存在");
continue;
}
//锁定起点库位
await db_Floor4MJX2MJC.Updateable<BasLocation>().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == startlocation.id).ExecuteCommandAsync();
//锁定终点库位
await db_Floor4MJX2MJC.Updateable<BasLocation>().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<BasLocation>().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<WmsCarryH>().Where(r => r.carry_code == carry_code).FirstAsync();
if (wmsCarryH == null)
finally
{
LoggerFloor4MJX2MJC.LogWarning($"【四楼待灭菌线到灭菌仓】 托盘号{carry_code}在系统中不存在");
continue;
semaphoreSlim.Release();
}
//锁定起点库位
await db_Floor4MJX2MJC.Updateable<BasLocation>().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == startlocation.id).ExecuteCommandAsync();
//锁定终点库位
await db_Floor4MJX2MJC.Updateable<BasLocation>().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<WmsCarryH>().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<WmsCarryH>().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<BasLocation>().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<BasLocation> items = await _wareHouseService.InStockStrategy(inStockStrategyInput);
if (items.Count < 1)
{
LoggerFloor4DMC2CPK.LogWarning($"【四楼灭菌仓到成品库】 没有可以入库的库位");
break;
}
BasLocation endlocation = items[0];
//锁定起点库位
await db_Floor4DMC2CPK.Updateable<BasLocation>().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == startlocation.id).ExecuteCommandAsync();
//锁定终点库位
await db_Floor4DMC2CPK.Updateable<BasLocation>().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<BasLocation>().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<BasLocation> 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<BasLocation>().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == startlocation.id).ExecuteCommandAsync();
//锁定终点库位
await db_Floor4DMC2CPK.Updateable<BasLocation>().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 =>

View File

@@ -126,6 +126,10 @@ namespace Tnb.WarehouseMgr.Entities.Consts
/// 外协调拨出库
/// </summary>
public const string MATERIALTRANSFER_WXDBOUTWAREHOUSE_CODE = "wxdbOutWarehouse";
/// <summary>
/// 灭菌入库
/// </summary>
public const string MATERIALTRANSFER_SterilizationInstock_CODE = "SterilizationInstock";
/// <summary>
/// 出入库单据状态TypeID

View File

@@ -0,0 +1,17 @@
namespace Tnb.WarehouseMgr.Entities.Dto
{
/// <summary>
/// 库房业务更新输入参数
/// </summary>
public class DistributeF4JXCInput
{
/// <summary>
/// 组织ID
/// </summary>
public string org_id { get; set; }
/// <summary>
/// 来源单据id
/// </summary>
public string? source_id { get; set; }
}
}

View File

@@ -89,9 +89,14 @@ public partial class WmsSterilizationInstockH : BaseEntity<string>
/// </summary>
public string? status { get; set; }
/// <summary>
/// 单号
/// </summary>
public string? bill_code { get; set; }
/// <summary>
/// 来源
/// </summary>
public string? origin { get; set; }
}

View File

@@ -72,6 +72,16 @@ namespace Tnb.WarehouseMgr
public static SemaphoreSlim _s_taskExecuteSemaphore_F4DMJCInstock = new(1);
public static SemaphoreSlim _s_taskExecuteSemaphore_F4DMJCOutstock = new(1);
/// <summary>
/// 解析库
/// </summary>
public static SemaphoreSlim _s_taskExecuteSemaphore_F4JXKOutstock = new(1);
public static SemaphoreSlim _s_taskExecuteSemaphore_F4JXKInstock = new(1);
/// <summary>
/// 二楼空托区
/// </summary>
public static SemaphoreSlim _s_taskExecuteSemaphore_F2KTQOutstock = new(1);
public static SemaphoreSlim _s_taskExecuteSemaphore_F2KTQInstock = new(1);
/// <summary>
/// 成品仓
/// </summary>
public static SemaphoreSlim _s_taskExecuteSemaphore_F3CPInstock = new(1);

View File

@@ -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<ErpExtendField>().InnerJoin<DictionaryDataEntity>((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<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)
{
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

View File

@@ -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<string, SemaphoreSlim> 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<WmsCarryH>().Where(r => r.location_id == wmsDistaskH.startlocation_id
&& r.carry_code != wmsDistaskH.carry_code).FirstAsync();
BasLocation startlocation = await _db.Queryable<BasLocation>().Where(r => r.location_code == wmsDistaskH.startlocation_code).FirstAsync();
if (wmsCarryH != null && startlocation.is_type == ((int)(EnumLocationType.)).ToString())
WmsCarryH wmsTaskCarryH = await _db.Queryable<WmsCarryH>().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<WmsCarryH>().Where(r => r.location_id == wmsDistaskH.endlocation_id && r.carry_code != wmsDistaskH.carry_code).FirstAsync();
BasLocation endlocation = await _db.Queryable<BasLocation>().Where(r => r.location_code == wmsDistaskH.endlocation_code).FirstAsync();
if (wmsCarryH != null && endlocation.is_type == ((int)(EnumLocationType.)).ToString())
WmsCarryH wmsTaskCarryH = await _db.Queryable<WmsCarryH>().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<WmsElevatorH>().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;
}

View File

@@ -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<WmsCarryH>().Where(r => r.carry_code == input.carry_code).FirstAsync();
if (wmsCarryH == null)
{
@@ -282,6 +287,7 @@ namespace Tnb.WarehouseMgr
}
}
await _db.Updateable<BasLocation>().SetColumns(r => r.is_use == "0").Where(r => r.id == carryLoc.id).ExecuteCommandAsync();
await _db.Insertable(wmsMaterialSignH).ExecuteCommandAsync();
await _db.Insertable(wmsMaterialSignDs).ExecuteCommandAsync();

View File

@@ -380,7 +380,7 @@ namespace Tnb.WarehouseMgr
List<BasLocation> endLocations = new List<BasLocation>();
// 集中供料区三工位
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<UserEntity>()
@@ -474,6 +474,186 @@ namespace Tnb.WarehouseMgr
return await ToApiResult(HttpStatusCode.OK, "成功");
}
/// <summary>
/// 灭菌入库
/// </summary>
/// <param name="input"></param>
/// <param name="wmsMaterialTransferD"></param>
/// <param name="wmsMaterialTransfer"></param>
/// <returns></returns>
public async Task<Entities.Dto.Outputs.Result> 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<WmsMaterialTransfer>().FirstAsync(it => it.id == input.source_id);
List<WmsMaterialTransferD> wmsMaterialTransferDs = _db.Queryable<WmsMaterialTransferD>()
.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<WmsMaterialTransferCarry> wmsMaterialTransferCarrys = new List<WmsMaterialTransferCarry>();
// 需要转库数量
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<Tuple<string, WmsCarryH, WmsCarryCode, BasLocation>> carryitems = await _wareHouseService.OutStockStrategy_saleRelease(outStockStrategyInput);
List<Tuple<string, WmsCarryH, WmsCarryCode, BasLocation>> 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<BasLocation> endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput);
int instockLocIndex = 0;
foreach (Tuple<string, WmsCarryH, WmsCarryCode, BasLocation> 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<WmsSterilizationInstockH>().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<BasLocation>().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<WmsCarryH>().SetColumns(r => r.work_station == wmsMaterialTransferD.station_code).Where(r => r.id == wmsCarryH.id).ExecuteCommandAsync();
instockLocIndex++;
}
await _db.Updateable<WmsMaterialTransfer>().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<WmsMaterialTransferD>().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<Entities.Dto.Outputs.Result> QtckList(QueryQTCKInput input)

View File

@@ -157,7 +157,7 @@ namespace Tnb.WarehouseMgr
}*/
/// <summary>
/// 1楼到3楼 外协入库
/// 1楼到4楼 外协入库
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
@@ -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<BasLocation> endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput);
if (endLocations.Count == 0)
{

View File

@@ -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();
}
}

View File

@@ -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);
}
}

View File

@@ -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<string, object> status_dic = await _db.Queryable<DictionaryTypeEntity>()
.InnerJoin<DictionaryDataEntity>((a, b) => a.Id == b.DictionaryTypeId)
.Where((a, b) => a.FullName == "单据状态").Select((a, b) => b).ToDictionaryAsync(k => k.Id, v => v.FullName);
SqlSugarPagedList<WmsSortingtask> result = await _db.Queryable<WmsSortingtask>()
var _result = await _db.Queryable<WmsSortingtask>()
.InnerJoin<WmsCarryCode>((a, b) => a.carry_id == b.carry_id)
.InnerJoin<BasMaterial>((a, b, c) => b.material_id == c.id)
.InnerJoin<WmsSaleD>((a, b, c, d) => a.source_id == d.id)
.InnerJoin<WmsSaleH>((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<DictionaryDataEntity>((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<WmsSortingtask>.SqlSugarPageResult(result);
var result = PageResult<WmsSortingtask>.SqlSugarPageResult(_result);
return result;
}

View File

@@ -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,

View File

@@ -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<WmsCarryH>().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逻辑");

View File

@@ -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);
}
}