Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
@@ -90,6 +90,9 @@ namespace Tnb.ProductionMgr
|
|||||||
private static Timer? PackOutstockServicetimer;
|
private static Timer? PackOutstockServicetimer;
|
||||||
// 检查到电梯任务异常断开后处理
|
// 检查到电梯任务异常断开后处理
|
||||||
private Thread? ElevatorTaskExceptionHandleThread;
|
private Thread? ElevatorTaskExceptionHandleThread;
|
||||||
|
// 二楼空托盘自动补充到线边
|
||||||
|
private static Timer? F2KTPsupplementtimer;
|
||||||
|
|
||||||
|
|
||||||
public SemaphoreSlim s_taskCheckGet = new(1);
|
public SemaphoreSlim s_taskCheckGet = new(1);
|
||||||
public SemaphoreSlim s_taskScan = new(1);
|
public SemaphoreSlim s_taskScan = new(1);
|
||||||
@@ -106,6 +109,7 @@ namespace Tnb.ProductionMgr
|
|||||||
public SemaphoreSlim s_taskFloor4DMJ2MJXService = new(1);
|
public SemaphoreSlim s_taskFloor4DMJ2MJXService = new(1);
|
||||||
public SemaphoreSlim s_taskFloor4MJX2MJCService = new(1);
|
public SemaphoreSlim s_taskFloor4MJX2MJCService = new(1);
|
||||||
public SemaphoreSlim s_taskFloor4DMC2CPKService = new(1);
|
public SemaphoreSlim s_taskFloor4DMC2CPKService = new(1);
|
||||||
|
public SemaphoreSlim s_taskF2KTPsupplement = new(1);
|
||||||
|
|
||||||
private StackExRedisHelper _redisData;
|
private StackExRedisHelper _redisData;
|
||||||
private readonly IPrdInstockService _prdInstockService;
|
private readonly IPrdInstockService _prdInstockService;
|
||||||
@@ -127,6 +131,7 @@ namespace Tnb.ProductionMgr
|
|||||||
private ISqlSugarClient db_Floor4MJX2MJC;
|
private ISqlSugarClient db_Floor4MJX2MJC;
|
||||||
private ISqlSugarClient db_Floor4DMC2CPK;
|
private ISqlSugarClient db_Floor4DMC2CPK;
|
||||||
private ISqlSugarClient db_ElevatorTaskExceptionHandle;
|
private ISqlSugarClient db_ElevatorTaskExceptionHandle;
|
||||||
|
private ISqlSugarClient db_F2KTPsupplement;
|
||||||
|
|
||||||
|
|
||||||
private readonly IWmsPDAScanInStockService _wmsPDAScanInStock;
|
private readonly IWmsPDAScanInStockService _wmsPDAScanInStock;
|
||||||
@@ -183,6 +188,7 @@ namespace Tnb.ProductionMgr
|
|||||||
db_Floor4MJX2MJC = repository.CopyNew();
|
db_Floor4MJX2MJC = repository.CopyNew();
|
||||||
db_Floor4DMC2CPK = repository.CopyNew();
|
db_Floor4DMC2CPK = repository.CopyNew();
|
||||||
db_ElevatorTaskExceptionHandle = repository.CopyNew();
|
db_ElevatorTaskExceptionHandle = repository.CopyNew();
|
||||||
|
db_F2KTPsupplement = repository.CopyNew();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@@ -1922,13 +1928,11 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
Console.WriteLine($"{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")} 开始执行四楼待灭菌仓到灭菌线");
|
LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行四楼待灭菌仓到灭菌线");
|
||||||
|
|
||||||
if (true)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Dictionary<string, string[]> putdic = new Dictionary<string, string[]>();
|
Dictionary<string, string[]> putdic = new Dictionary<string, string[]>();
|
||||||
putdic.Add("SLD1", new string[] { "设备名", "信号" });
|
putdic.Add("MJQ-FAN01", new string[] { "4楼上料输送西区", "上料工位1请求送盘" });
|
||||||
|
putdic.Add("MJQ-FAN02", new string[] { "4楼上料输送西区", "上料工位2请求送盘" });
|
||||||
|
putdic.Add("MJQ-FAN03", new string[] { "4楼上料输送西区", "上料工位3请求送盘" });
|
||||||
|
putdic.Add("MJQ-FAN04", new string[] { "4楼上料输送西区", "上料工位4请求送盘" });
|
||||||
|
|
||||||
//Dictionary<BasLocation, string[]> putdic = new Dictionary<BasLocation, string[]>();
|
//Dictionary<BasLocation, string[]> putdic = new Dictionary<BasLocation, string[]>();
|
||||||
//List<BasLocation> endLocations = db_Floor4DMJ2MJX.Queryable<BasLocation>().Where(r => r.wh_id == WmsWareHouseConst.WAREHOUSE_DMJC_ID
|
//List<BasLocation> endLocations = db_Floor4DMJ2MJX.Queryable<BasLocation>().Where(r => r.wh_id == WmsWareHouseConst.WAREHOUSE_DMJC_ID
|
||||||
@@ -1958,7 +1962,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
|
|
||||||
if (items.Count < 1)
|
if (items.Count < 1)
|
||||||
{
|
{
|
||||||
LoggerFloor4DMJ2MJX.LogWarning($"【四楼待灭菌仓到灭菌线】 没有可以出库的空载具");
|
LoggerFloor4DMJ2MJX.LogWarning($"【四楼待灭菌仓到灭菌线】 没有可以出库的载具");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
BasLocation endlocation = await db_Floor4DMJ2MJX.Queryable<BasLocation>().Where(r => r.location_code == key).FirstAsync();
|
BasLocation endlocation = await db_Floor4DMJ2MJX.Queryable<BasLocation>().Where(r => r.location_code == key).FirstAsync();
|
||||||
@@ -2027,13 +2031,9 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
Console.WriteLine($"{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")} 开始执行四楼待灭菌线到灭菌仓");
|
LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行四楼待灭菌线到灭菌仓");
|
||||||
|
|
||||||
if (true)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Dictionary<string, string[]> getdic = new Dictionary<string, string[]>();
|
Dictionary<string, string[]> getdic = new Dictionary<string, string[]>();
|
||||||
getdic.Add("SLD1", new string[] { "设备名", "信号", "条码信号" });
|
getdic.Add("MJQ-QU02", new string[] { "4下上料输送西区", "下料工位2请求取盘", "下料工位2条码" });
|
||||||
|
getdic.Add("MJQ-QU01", new string[] { "4下上料输送西区", "下料工位1请求取盘", "下料工位1条码" });
|
||||||
|
|
||||||
//List<BasLocation> startLocations = db_Floor4MJX2MJC.Queryable<BasLocation>().Where(r => r.wh_id == WmsWareHouseConst.WAREHOUSE_MJC_ID
|
//List<BasLocation> startLocations = db_Floor4MJX2MJC.Queryable<BasLocation>().Where(r => r.wh_id == WmsWareHouseConst.WAREHOUSE_MJC_ID
|
||||||
//&& r.is_type == ((int)EnumLocationType.分拣库位).ToString() && r.is_lock == 0).ToList();
|
//&& r.is_type == ((int)EnumLocationType.分拣库位).ToString() && r.is_lock == 0).ToList();
|
||||||
@@ -2051,7 +2051,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
bool result = await GetBoolTag(strs[0], strs[1]);
|
bool result = await GetBoolTag(strs[0], strs[1]);
|
||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
LoggerFloor4MJX2MJC.LogInformation($"【四楼待灭菌线到灭菌仓】 上料点 {key} {strs[1]}采集到 {result}");
|
LoggerFloor4MJX2MJC.LogInformation($"【四楼待灭菌线到灭菌仓】 下料点 {key} {strs[1]}采集到 {result}");
|
||||||
|
|
||||||
InStockStrategyQuery inStockStrategyInput = new()
|
InStockStrategyQuery inStockStrategyInput = new()
|
||||||
{
|
{
|
||||||
@@ -2070,7 +2070,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
BasLocation startlocation = await db_Floor4DMJ2MJX.Queryable<BasLocation>().Where(r => r.location_code == key).FirstAsync();
|
BasLocation startlocation = await db_Floor4DMJ2MJX.Queryable<BasLocation>().Where(r => r.location_code == key).FirstAsync();
|
||||||
BasLocation endlocation = items[0];
|
BasLocation endlocation = items[0];
|
||||||
|
|
||||||
string carry_code = "";
|
string carry_code = await GetStringTag(strs[0], strs[2]);
|
||||||
|
LoggerFloor4MJX2MJC.LogInformation($"【四楼待灭菌线到灭菌仓】 下料点 {key} {strs[2]}采集到 {carry_code}");
|
||||||
WmsCarryH wmsCarryH = await db_Floor4MJX2MJC.Queryable<WmsCarryH>().Where(r => r.carry_code == carry_code).FirstAsync();
|
WmsCarryH wmsCarryH = await db_Floor4MJX2MJC.Queryable<WmsCarryH>().Where(r => r.carry_code == carry_code).FirstAsync();
|
||||||
|
|
||||||
//锁定起点库位
|
//锁定起点库位
|
||||||
@@ -2160,7 +2161,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
|
|
||||||
if (wmsFloor4StewingConfig == null)
|
if (wmsFloor4StewingConfig == null)
|
||||||
{
|
{
|
||||||
LoggerFloor4MJX2MJC.LogWarning($"【四楼灭菌仓到成品库】 未在静置仓配置中配置 静置时间(小时)");
|
LoggerFloor4DMC2CPK.LogWarning($"【四楼灭菌仓到成品库】 未在静置仓配置中配置 静置时间(小时)");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int hours = 168;
|
int hours = 168;
|
||||||
@@ -2187,7 +2188,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
await db_Floor4DMC2CPK.Ado.BeginTranAsync();
|
await db_Floor4DMC2CPK.Ado.BeginTranAsync();
|
||||||
|
|
||||||
|
|
||||||
BasLocation startlocation = await db_Floor4DMJ2MJX.Queryable<BasLocation>().Where(r => r.id == wmsCarryH.location_id).FirstAsync();
|
BasLocation startlocation = await db_Floor4DMC2CPK.Queryable<BasLocation>().Where(r => r.id == wmsCarryH.location_id).FirstAsync();
|
||||||
|
|
||||||
InStockStrategyQuery inStockStrategyInput = new()
|
InStockStrategyQuery inStockStrategyInput = new()
|
||||||
{
|
{
|
||||||
@@ -2253,6 +2254,107 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 二楼空托盘自动补充到线边
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="args"></param>
|
||||||
|
private async void F2KTPsupplement(object? args)
|
||||||
|
{
|
||||||
|
if (s_taskF2KTPsupplement.CurrentCount == 0)
|
||||||
|
return;
|
||||||
|
await s_taskF2KTPsupplement.WaitAsync();
|
||||||
|
Stopwatch stopwatch = new Stopwatch();
|
||||||
|
stopwatch.Start();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行二楼空托盘自动补充到线边");
|
||||||
|
LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行二楼空托盘自动补充到线边");
|
||||||
|
|
||||||
|
Dictionary<string, string[]> putdic = new Dictionary<string, string[]>();
|
||||||
|
putdic.Add("ZZ-01-01", new string[] { "外包装箱码垛线", "WBZX_x1_AGV_fan" });
|
||||||
|
putdic.Add("ZZ-02-01", new string[] { "外包装箱码垛线", "WBZX_x2_AGV_fan" });
|
||||||
|
|
||||||
|
foreach (var key in putdic.Keys)
|
||||||
|
{
|
||||||
|
await db_F2KTPsupplement.Ado.BeginTranAsync();
|
||||||
|
var strs = putdic.Where(p => p.Key == key).First().Value;
|
||||||
|
bool result = await GetBoolTag(strs[0], strs[1]);
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
|
||||||
|
LoggerF2KTPsupplement.LogInformation($"【二楼空托盘自动补充到线边】 上料点 {key} {strs[1]}采集到 {result}");
|
||||||
|
|
||||||
|
OutStockStrategyQuery outStockStrategyInput = new()
|
||||||
|
{
|
||||||
|
warehouse_id = WmsWareHouseConst.WAREHOUSE_F2KTQ_ID,
|
||||||
|
Size = 1
|
||||||
|
};
|
||||||
|
List<WmsCarryH> items = await _wareHouseService.OutStockStrategy(outStockStrategyInput);
|
||||||
|
|
||||||
|
if (items.Count < 1)
|
||||||
|
{
|
||||||
|
LoggerF2KTPsupplement.LogWarning($"【二楼空托盘自动补充到线边】 没有可以出库的空载具");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
BasLocation endlocation = await db_F2KTPsupplement.Queryable<BasLocation>().Where(r => r.location_code == key).FirstAsync();
|
||||||
|
|
||||||
|
if (endlocation.is_use == "1")
|
||||||
|
{
|
||||||
|
LoggerF2KTPsupplement.LogWarning($"【二楼空托盘自动补充到线边】 终点库位{endlocation.location_code}已占用");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (endlocation.is_lock == 1)
|
||||||
|
{
|
||||||
|
LoggerF2KTPsupplement.LogWarning($"【二楼空托盘自动补充到线边】 终点库位{endlocation.location_code}已锁定");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
WmsCarryH wmsCarryH = items[0];
|
||||||
|
|
||||||
|
//锁定起点库位
|
||||||
|
await db_F2KTPsupplement.Updateable<BasLocation>().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == wmsCarryH.location_id).ExecuteCommandAsync();
|
||||||
|
//锁定终点库位
|
||||||
|
await db_F2KTPsupplement.Updateable<BasLocation>().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == endlocation.id).ExecuteCommandAsync();
|
||||||
|
|
||||||
|
bool result_createPretask = await createPretask(wmsCarryH.location_id, endlocation.id, wmsCarryH.id, wmsCarryH.carry_code, LoggerF2KTPsupplement, db_F2KTPsupplement);
|
||||||
|
if (!result_createPretask)
|
||||||
|
{
|
||||||
|
LoggerF2KTPsupplement.LogWarning($"【二楼空托盘自动补充到线边】 {wmsCarryH.location_code} 到 {endlocation.location_code} 预任务生成失败");
|
||||||
|
throw new Exception($"【二楼空托盘自动补充到线边】 {wmsCarryH.location_code} 到 {endlocation.location_code} 预任务生成失败");
|
||||||
|
}
|
||||||
|
LoggerF2KTPsupplement.LogInformation($"【二楼空托盘自动补充到线边】 {wmsCarryH.location_code} 到 {endlocation.location_code} 预任务生成成功");
|
||||||
|
|
||||||
|
}
|
||||||
|
await db_F2KTPsupplement.Ado.CommitTranAsync();
|
||||||
|
}
|
||||||
|
_ = _wareHouseService.GenTaskExecute();
|
||||||
|
}
|
||||||
|
catch (ObjectDisposedException ex)
|
||||||
|
{
|
||||||
|
LoggerF2KTPsupplement.LogError($"【二楼空托盘自动补充到线边】 数据库连接异常:{ex.Message}");
|
||||||
|
LoggerF2KTPsupplement.LogError($"【二楼空托盘自动补充到线边】 数据库连接异常:{ex.StackTrace}");
|
||||||
|
if (ex.Source == "Npgsql")
|
||||||
|
db_F2KTPsupplement = _repository.AsSugarClient().CopyNew();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine("【二楼空托盘自动补充到线边】" + ex.Message);
|
||||||
|
LoggerF2KTPsupplement.LogError($"【二楼空托盘自动补充到线边】 {ex.Message}");
|
||||||
|
LoggerF2KTPsupplement.LogError($"【二楼空托盘自动补充到线边】 {ex.StackTrace}");
|
||||||
|
// 数据库连接断开时会报错
|
||||||
|
try { await db_F2KTPsupplement.Ado.RollbackTranAsync(); } catch { };
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
s_taskF2KTPsupplement.Release();
|
||||||
|
if (!db_F2KTPsupplement.Ado.Transaction.IsNull())
|
||||||
|
try { await db_F2KTPsupplement.Ado.CommitTranAsync(); } catch { };
|
||||||
|
_wareHouseService.GenTaskExecute();
|
||||||
|
stopwatch.Stop();
|
||||||
|
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束二楼空托盘自动补充到线边 {stopwatch.ElapsedMilliseconds} ms");
|
||||||
|
LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束二楼空托盘自动补充到线边 {stopwatch.ElapsedMilliseconds} ms");
|
||||||
|
}
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public Task StartAsync(CancellationToken cancellationToken)
|
public Task StartAsync(CancellationToken cancellationToken)
|
||||||
@@ -2287,10 +2389,11 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
ElevatorTaskExceptionHandleThread = new Thread(ElevatorTaskExceptionHandle);
|
ElevatorTaskExceptionHandleThread = new Thread(ElevatorTaskExceptionHandle);
|
||||||
ElevatorTaskExceptionHandleThread.Start();
|
ElevatorTaskExceptionHandleThread.Start();
|
||||||
|
|
||||||
//Floor4DMJ2MJXtimer = new Timer(Floor4DMJ2MJX, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
|
Floor4DMJ2MJXtimer = new Timer(Floor4DMJ2MJX, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
|
||||||
//Floor4MJX2MJCtimer = new Timer(Floor4MJX2MJC, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
|
Floor4MJX2MJCtimer = new Timer(Floor4MJX2MJC, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
|
||||||
//Floor4DMC2CPKtimer = new Timer(Floor4DMC2CPK, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
|
Floor4DMC2CPKtimer = new Timer(Floor4DMC2CPK, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
|
||||||
|
|
||||||
|
F2KTPsupplementtimer = new Timer(F2KTPsupplement, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2321,6 +2424,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
Floor4MJX2MJCtimer?.Dispose();
|
Floor4MJX2MJCtimer?.Dispose();
|
||||||
Floor4DMC2CPKtimer?.Dispose();
|
Floor4DMC2CPKtimer?.Dispose();
|
||||||
ElevatorTaskExceptionHandleThread.Abort();
|
ElevatorTaskExceptionHandleThread.Abort();
|
||||||
|
F2KTPsupplementtimer?.Dispose();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#region 日志
|
#region 日志
|
||||||
@@ -2710,6 +2815,40 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
return _LoggerFloor4DMC2CPK;
|
return _LoggerFloor4DMC2CPK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected string _LoggerF2KTPsupplementFileName = "";
|
||||||
|
protected ILogger _LoggerF2KTPsupplement;
|
||||||
|
protected ILogger LoggerF2KTPsupplement
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
string newFileName = $"{AppContext.BaseDirectory}/logs/custom二楼空托盘补充{DateTime.Now:yyyyMMdd}.log";
|
||||||
|
if (_LoggerF2KTPsupplementFileName != newFileName)
|
||||||
|
{
|
||||||
|
ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddFile(newFileName, cfgOpts =>
|
||||||
|
{
|
||||||
|
|
||||||
|
//cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff";
|
||||||
|
cfgOpts.MessageFormat = (logMsg) =>
|
||||||
|
{
|
||||||
|
var logLevel = s_logLevelMap[logMsg.LogLevel];
|
||||||
|
var sb = new StringBuilder();
|
||||||
|
_ = sb.Append($"[{logLevel}] ");
|
||||||
|
_ = sb.Append($"{logMsg.LogName} ");
|
||||||
|
_ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} ");
|
||||||
|
_ = sb.Append($"#{logMsg.EventId.Id} ");
|
||||||
|
_ = sb.Append(logMsg.Message + " ");
|
||||||
|
_ = sb.Append(logMsg.Exception?.ToString());
|
||||||
|
return sb.ToString();
|
||||||
|
};
|
||||||
|
|
||||||
|
}));
|
||||||
|
_LoggerF2KTPsupplement = loggerFactory.CreateLogger(this.GetType());
|
||||||
|
_LoggerF2KTPsupplementFileName = newFileName;
|
||||||
|
}
|
||||||
|
return _LoggerF2KTPsupplement;
|
||||||
|
}
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -470,6 +470,22 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public const string ZZCSSX111012 = "32609251845653";
|
public const string ZZCSSX111012 = "32609251845653";
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// 一楼中储仓入库工位
|
||||||
|
/// </summary>
|
||||||
|
public const string ZZCSSX021007 = "32609215284757";
|
||||||
|
/// <summary>
|
||||||
|
/// 一楼中储仓入库工位
|
||||||
|
/// </summary>
|
||||||
|
public const string ZZCSSX011008 = "32609223625237";
|
||||||
|
/// <summary>
|
||||||
|
/// 一楼中储仓入库工位
|
||||||
|
/// </summary>
|
||||||
|
public const string ZZCSSX121009 = "32609229889045";
|
||||||
|
/// <summary>
|
||||||
|
/// 一楼中储仓入库工位
|
||||||
|
/// </summary>
|
||||||
|
public const string ZZCSSX121010 = "32609238573589";
|
||||||
|
/// <summary>
|
||||||
/// 料箱id
|
/// 料箱id
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string LIAOXIANGID = "26037262680357";
|
public const string LIAOXIANGID = "26037262680357";
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
namespace Tnb.WarehouseMgr.Entities.Dto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 库房业务更新输入参数
|
||||||
|
/// </summary>
|
||||||
|
public class MaterialTransferDistributeYCL2ZCCInput
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 组织ID
|
||||||
|
/// </summary>
|
||||||
|
public string org_id { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 创建用户
|
||||||
|
/// </summary>
|
||||||
|
public string create_id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 来源单据id
|
||||||
|
/// </summary>
|
||||||
|
public string? source_id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 载具
|
||||||
|
/// </summary>
|
||||||
|
public List<MaterialTransferDistributeYCL2ZCCDetailInput>? details { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class MaterialTransferDistributeYCL2ZCCDetailInput
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 载具编码
|
||||||
|
/// </summary>
|
||||||
|
public string? carry_code { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 物料数量
|
||||||
|
/// </summary>
|
||||||
|
public decimal qty { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -49,6 +49,10 @@
|
|||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string? material_code { get; set; }
|
public string? material_code { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public string[] endlocations { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,6 +80,15 @@ public partial class WmsMaterialTransferD : BaseEntity<string>
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public decimal? yzqty { get; set; }
|
public decimal? yzqty { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 已下发数量(入库)
|
||||||
|
/// </summary>
|
||||||
|
public decimal? yxfqty_rk { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 已转数量(入库)
|
||||||
|
/// </summary>
|
||||||
|
public decimal? yzqty_rk { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 主表ID
|
/// 主表ID
|
||||||
|
|||||||
@@ -586,7 +586,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
List<Tuple<WmsCarryH, decimal, BasLocation>>? carrys = new List<Tuple<WmsCarryH, decimal, BasLocation>>();
|
List<Tuple<WmsCarryH, decimal, BasLocation>>? carrys = new List<Tuple<WmsCarryH, decimal, BasLocation>>();
|
||||||
|
|
||||||
// 6个下发一条任务链
|
// 6个下发一条任务链
|
||||||
int move_num = 6;
|
int move_num = 6;
|
||||||
int endlocation_index = 0;
|
int endlocation_index = 0;
|
||||||
BasLocation endlocation_ssx = null;
|
BasLocation endlocation_ssx = null;
|
||||||
|
|
||||||
@@ -602,7 +602,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
|
|
||||||
// 每6个重新获取一次终点
|
// 每6个重新获取一次终点
|
||||||
if (i % move_num == 0)
|
if (i % move_num == 0)
|
||||||
if (i % move_num == 0)
|
{
|
||||||
endlocation_ssx = await _db.Queryable<BasLocation>().Where(r => input.endlocations.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync();
|
endlocation_ssx = await _db.Queryable<BasLocation>().Where(r => input.endlocations.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2296,7 +2296,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
string endLocId = multiList[i].endlocation_id;
|
string endLocId = multiList[i].endlocation_id;
|
||||||
|
|
||||||
WmsCarryH wmsCarryH = await _db.Queryable<WmsCarryH>().Where(r => r.id == carry.id).FirstAsync();
|
WmsCarryH wmsCarryH = await _db.Queryable<WmsCarryH>().Where(r => r.id == carry.id).FirstAsync();
|
||||||
WmsCarryH wmsCarryH = await _db.Queryable<WmsCarryH>().Where(r => r.id == carry.id).FirstAsync();
|
// 同步料架下的载具位置
|
||||||
if (wmsCarryH != null && wmsCarryH.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID)
|
if (wmsCarryH != null && wmsCarryH.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID)
|
||||||
{
|
{
|
||||||
List<WmsCarryH> carrys = _db.Queryable<WmsCarryD>()
|
List<WmsCarryH> carrys = _db.Queryable<WmsCarryD>()
|
||||||
@@ -3119,7 +3119,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
{
|
{
|
||||||
List<WmsCarryD> wmsCarryCodes = _db.Queryable<WmsCarryD>().Where(r => r.carry_id == rackid).ToList();
|
List<WmsCarryD> wmsCarryCodes = _db.Queryable<WmsCarryD>().Where(r => r.carry_id == rackid).ToList();
|
||||||
|
|
||||||
|
int move_num = 6;
|
||||||
string[] startlocations = new string[2] { WmsWareHouseConst.ZZCSSX111011, WmsWareHouseConst.ZZCSSX111012 };
|
string[] startlocations = new string[2] { WmsWareHouseConst.ZZCSSX111011, WmsWareHouseConst.ZZCSSX111012 };
|
||||||
BasLocation startLocation = null;
|
BasLocation startLocation = null;
|
||||||
|
|
||||||
@@ -3139,7 +3139,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
|
|
||||||
// 每6个重新获取一次起点
|
// 每6个重新获取一次起点
|
||||||
if (index % move_num == 0)
|
if (index % move_num == 0)
|
||||||
if (index % move_num == 0)
|
{
|
||||||
startLocation = await _db.Queryable<BasLocation>().Where(r => startlocations.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync();
|
startLocation = await _db.Queryable<BasLocation>().Where(r => startlocations.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,13 +38,13 @@ namespace Tnb.WarehouseMgr
|
|||||||
public async Task<dynamic> CarryStock(CarryStockInput input)
|
public async Task<dynamic> CarryStock(CarryStockInput input)
|
||||||
{
|
{
|
||||||
var warehouse_id = "";
|
var warehouse_id = "";
|
||||||
var carry_id = "";
|
var carry_code = "";
|
||||||
var material_id = "";
|
var material_code = "";
|
||||||
if (!input.queryJson.IsNullOrWhiteSpace())
|
if (!input.queryJson.IsNullOrWhiteSpace())
|
||||||
{
|
{
|
||||||
warehouse_id = JObject.Parse(input.queryJson).Value<string>(nameof(WmsCarryCode.warehouse_id));
|
warehouse_id = JObject.Parse(input.queryJson).Value<string>(nameof(WmsCarryCode.warehouse_id));
|
||||||
carry_id = JObject.Parse(input.queryJson).Value<string>(nameof(WmsCarryCode.carry_id));
|
carry_code = JObject.Parse(input.queryJson).Value<string>(nameof(WmsCarryCode.carry_code));
|
||||||
material_id = JObject.Parse(input.queryJson).Value<string>(nameof(WmsCarryCode.material_id));
|
material_code = JObject.Parse(input.queryJson).Value<string>(nameof(WmsCarryCode.material_code));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -58,8 +58,8 @@ namespace Tnb.WarehouseMgr
|
|||||||
.Where((a, b, c, d, e) => a.is_type == ((int)EnumLocationType.存储库位).ToString() && a.is_use == "1"
|
.Where((a, b, c, d, e) => a.is_type == ((int)EnumLocationType.存储库位).ToString() && a.is_use == "1"
|
||||||
&& ((!string.IsNullOrEmpty(b.carry_code) && b.carry_status != "0" && b.carry_status != "6") || string.IsNullOrEmpty(b.carry_code)))
|
&& ((!string.IsNullOrEmpty(b.carry_code) && b.carry_status != "0" && b.carry_status != "6") || string.IsNullOrEmpty(b.carry_code)))
|
||||||
.WhereIF(!string.IsNullOrEmpty(warehouse_id), (a, b, c, d) => c.id == warehouse_id)
|
.WhereIF(!string.IsNullOrEmpty(warehouse_id), (a, b, c, d) => c.id == warehouse_id)
|
||||||
.WhereIF(!string.IsNullOrEmpty(carry_id), (a, b, c, d) => b.id == carry_id)
|
.WhereIF(!string.IsNullOrEmpty(carry_code), (a, b, c, d) => b.carry_code.Contains(carry_code))
|
||||||
.WhereIF(!string.IsNullOrEmpty(material_id), (a, b, c, d, e, f) => f.id == material_id)
|
.WhereIF(!string.IsNullOrEmpty(material_code), (a, b, c, d, e, f) => f.code.Contains(material_code))
|
||||||
.OrderByDescending((a, b, c, d, e, f) => b.carry_code)
|
.OrderByDescending((a, b, c, d, e, f) => b.carry_code)
|
||||||
.Select((a, b, c, d, e, f) => new WmsCarryStockReport
|
.Select((a, b, c, d, e, f) => new WmsCarryStockReport
|
||||||
{
|
{
|
||||||
@@ -97,8 +97,8 @@ namespace Tnb.WarehouseMgr
|
|||||||
.InnerJoin<WmsCarryH>((a, b, c, d, e, f, g, h) => h.id == e.membercarry_id)
|
.InnerJoin<WmsCarryH>((a, b, c, d, e, f, g, h) => h.id == e.membercarry_id)
|
||||||
.Where((a, b, c, d, e) => a.is_type == ((int)EnumLocationType.存储库位).ToString() && a.is_use == "1" && b.carry_status != "0" && b.carry_status != "6")
|
.Where((a, b, c, d, e) => a.is_type == ((int)EnumLocationType.存储库位).ToString() && a.is_use == "1" && b.carry_status != "0" && b.carry_status != "6")
|
||||||
.WhereIF(!string.IsNullOrEmpty(warehouse_id), (a, b, c, d) => c.id == warehouse_id)
|
.WhereIF(!string.IsNullOrEmpty(warehouse_id), (a, b, c, d) => c.id == warehouse_id)
|
||||||
.WhereIF(!string.IsNullOrEmpty(carry_id), (a, b, c, d, e) => b.id == carry_id || e.membercarry_id == carry_id)
|
.WhereIF(!string.IsNullOrEmpty(carry_code), (a, b, c, d, e, f, g, h) => b.carry_code.Contains(carry_code)|| h.carry_code.Contains(carry_code))
|
||||||
.WhereIF(!string.IsNullOrEmpty(material_id), (a, b, c, d, e, f, g) => g.id == material_id)
|
.WhereIF(!string.IsNullOrEmpty(material_code), (a, b, c, d, e, f, g) => g.code.Contains(material_code))
|
||||||
.Select((a, b, c, d, e, f, g, h) => new WmsCarryStockReport
|
.Select((a, b, c, d, e, f, g, h) => new WmsCarryStockReport
|
||||||
{
|
{
|
||||||
warehouse_name = c.whname,
|
warehouse_name = c.whname,
|
||||||
|
|||||||
@@ -66,6 +66,9 @@ namespace Tnb.WarehouseMgr
|
|||||||
private readonly IWmsCarryQueryService _wmsCarryQueryService;
|
private readonly IWmsCarryQueryService _wmsCarryQueryService;
|
||||||
|
|
||||||
public static SemaphoreSlim s_taskDistributeToZCC = new(1);
|
public static SemaphoreSlim s_taskDistributeToZCC = new(1);
|
||||||
|
public static SemaphoreSlim s_taskDistributeYCL2ZCC = new(1);
|
||||||
|
public static SemaphoreSlim s_taskDistributeZCCToYCL = new(1);
|
||||||
|
|
||||||
|
|
||||||
public WmsMaterialTransferService(
|
public WmsMaterialTransferService(
|
||||||
ISqlSugarRepository<WmsCarryH> repository,
|
ISqlSugarRepository<WmsCarryH> repository,
|
||||||
@@ -290,9 +293,8 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 按托下发
|
/// 按托下发(到集中供料或外协)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="input"></param>
|
/// <param name="input"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
@@ -322,12 +324,12 @@ namespace Tnb.WarehouseMgr
|
|||||||
WmsMaterialTransferD wmsMaterialTransferD = await _db.Queryable<WmsMaterialTransferD>().FirstAsync(it => it.id == input.source_id);
|
WmsMaterialTransferD wmsMaterialTransferD = await _db.Queryable<WmsMaterialTransferD>().FirstAsync(it => it.id == input.source_id);
|
||||||
WmsMaterialTransfer wmsMaterialTransfer = await _db.Queryable<WmsMaterialTransfer>().FirstAsync(it => it.id == wmsMaterialTransferD.bill_id);
|
WmsMaterialTransfer wmsMaterialTransfer = await _db.Queryable<WmsMaterialTransfer>().FirstAsync(it => it.id == wmsMaterialTransferD.bill_id);
|
||||||
|
|
||||||
if (wmsMaterialTransferD.yxfqty == wmsMaterialTransferD.qty)
|
await s_taskExecuteSemaphore.WaitAsync();
|
||||||
|
if (wmsMaterialTransferD.yxfqty >= wmsMaterialTransferD.qty)
|
||||||
{
|
{
|
||||||
throw new AppFriendlyException("已下发数量已达到转库数量", 500);
|
throw new AppFriendlyException("已下发数量已达到转库数量", 500);
|
||||||
}
|
}
|
||||||
|
|
||||||
await s_taskExecuteSemaphore.WaitAsync();
|
|
||||||
await _db.Ado.BeginTranAsync();
|
await _db.Ado.BeginTranAsync();
|
||||||
|
|
||||||
//入库取终点 //出库起点
|
//入库取终点 //出库起点
|
||||||
@@ -432,6 +434,120 @@ namespace Tnb.WarehouseMgr
|
|||||||
return await ToApiResult(HttpStatusCode.OK, "成功");
|
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// PDA操作(8线到中储仓)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="input"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost, NonUnify, AllowAnonymous]
|
||||||
|
public async Task<Entities.Dto.Outputs.Result> DistributeYCLToZCC(MaterialTransferDistributeYCL2ZCCInput input)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(input.source_id))
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException("来源单据id不可为空", 500);
|
||||||
|
}
|
||||||
|
if (input.details.Count == 0)
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException("请先扫描料箱", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
input.details.ForEach(r =>
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(r.carry_code))
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException($"料箱编码不能为空", 500);
|
||||||
|
}
|
||||||
|
if (r.qty <= 0)
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException($"料箱{r.carry_code}的数量必须大于0", 500);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
await s_taskDistributeYCL2ZCC.WaitAsync();
|
||||||
|
WmsMaterialTransferD wmsMaterialTransferD = await _db.Queryable<WmsMaterialTransferD>().FirstAsync(it => it.id == input.source_id);
|
||||||
|
WmsMaterialTransfer wmsMaterialTransfer = await _db.Queryable<WmsMaterialTransfer>().FirstAsync(it => it.id == wmsMaterialTransferD.bill_id);
|
||||||
|
|
||||||
|
if (wmsMaterialTransferD.yxfqty_rk >= wmsMaterialTransferD.qty)
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException("已下发数量已达到转库数量", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
decimal qty = input.details.Sum(r => r.qty);
|
||||||
|
if (qty > wmsMaterialTransferD.qty - wmsMaterialTransferD.yxfqty_rk)
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException($"下发数量{qty}已超过可下发数量{wmsMaterialTransferD.qty - wmsMaterialTransferD.yxfqty_rk}", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
await _db.Ado.BeginTranAsync();
|
||||||
|
//入库取终点 //出库起点
|
||||||
|
InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_ZC_ID, Size = input.details.Count };
|
||||||
|
List<BasLocation> endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput);
|
||||||
|
if (endLocations.Count == 0)
|
||||||
|
{
|
||||||
|
Logger.LogWarning("没有可用的入库库位");
|
||||||
|
throw new AppFriendlyException("没有可用的入库库位", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (input.details.Count > endLocations.Count)
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException("可用的入库库位数量少于扫描的料箱数量", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
int index = 0;
|
||||||
|
|
||||||
|
List<WmsCarryH> wmsCarryHs = await _db.Queryable<WmsCarryH>().Where(r => input.details.Select(x => x.carry_code).Contains(r.carry_code)).ToListAsync();
|
||||||
|
|
||||||
|
foreach (var wmsCarryH in input.details)
|
||||||
|
{
|
||||||
|
BasLocation startLocation = await _db.Queryable<BasLocation>().Where(r => r.id == WmsWareHouseConst.ZZCSSX011008).FirstAsync();
|
||||||
|
|
||||||
|
BasLocation endLocation = endLocations[index];
|
||||||
|
|
||||||
|
CommonCreatePretaskInput commonCreatePretaskInput = new CommonCreatePretaskInput();
|
||||||
|
commonCreatePretaskInput.startlocation_id = startLocation.id;
|
||||||
|
commonCreatePretaskInput.endlocation_id = endLocation.id;
|
||||||
|
commonCreatePretaskInput.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID;
|
||||||
|
commonCreatePretaskInput.biz_type = WmsWareHouseConst.BIZTYPE_WMSMATERIALTRANSFER_ID;
|
||||||
|
commonCreatePretaskInput.source_id = input.source_id;
|
||||||
|
commonCreatePretaskInput.carry_id = wmsCarryHs[index].id;
|
||||||
|
commonCreatePretaskInput.carry_code = wmsCarryHs[index].carry_code;
|
||||||
|
commonCreatePretaskInput.isExcuteMission = false;
|
||||||
|
|
||||||
|
Entities.Dto.Outputs.Result res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput, _db);
|
||||||
|
|
||||||
|
if (res.code != HttpStatusCode.OK)
|
||||||
|
{
|
||||||
|
Logger.LogInformation($@"生成预任务失败");
|
||||||
|
throw new AppFriendlyException($@"生成预任务失败", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新子表已下发数量
|
||||||
|
await _db.Updateable<WmsMaterialTransferD>().SetColumns(r => r.yxfqty_rk == r.yxfqty_rk + qty).Where(r => r.id == input.source_id).ExecuteCommandAsync();
|
||||||
|
|
||||||
|
await _db.Ado.CommitTranAsync();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
await _db.Ado.RollbackTranAsync();
|
||||||
|
Logger.LogError("【Distribute】" + ex.Message);
|
||||||
|
Logger.LogError("【Distribute】" + ex.StackTrace);
|
||||||
|
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
_ = s_taskDistributeYCL2ZCC.Release();
|
||||||
|
InvokeGenPretaskExcute();
|
||||||
|
}
|
||||||
|
|
||||||
|
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 按料架下发(缓存仓)
|
/// 按料架下发(缓存仓)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -770,7 +886,6 @@ namespace Tnb.WarehouseMgr
|
|||||||
return await ToApiResult(HttpStatusCode.OK, "成功");
|
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public override async Task ModifyAsync(WareHouseUpInput input)
|
public override async Task ModifyAsync(WareHouseUpInput input)
|
||||||
{
|
{
|
||||||
if (input == null)
|
if (input == null)
|
||||||
@@ -788,9 +903,20 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
await _db.Ado.BeginTranAsync();
|
await _db.Ado.BeginTranAsync();
|
||||||
|
|
||||||
// 更新已转数量
|
bool isOk = false;
|
||||||
bool isOk = await _db.Updateable<WmsMaterialTransferD>().SetColumns(it => new WmsMaterialTransferD { yzqty = it.yzqty + wmsCarryCodes.Sum(r => r.codeqty) })
|
// 入库回写入库数量字段
|
||||||
.Where(it => it.id == input.source_id).ExecuteCommandHasChangeAsync();
|
if (input.wmsDistaskH.task_type == WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID)
|
||||||
|
{
|
||||||
|
// 更新已转数量(入库)
|
||||||
|
isOk = await _db.Updateable<WmsMaterialTransferD>().SetColumns(it => new WmsMaterialTransferD { yzqty_rk = it.yzqty_rk + wmsCarryCodes.Sum(r => r.codeqty) })
|
||||||
|
.Where(it => it.id == input.source_id).ExecuteCommandHasChangeAsync();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 更新已转数量
|
||||||
|
isOk = await _db.Updateable<WmsMaterialTransferD>().SetColumns(it => new WmsMaterialTransferD { yzqty = it.yzqty + wmsCarryCodes.Sum(r => r.codeqty) })
|
||||||
|
.Where(it => it.id == input.source_id).ExecuteCommandHasChangeAsync();
|
||||||
|
}
|
||||||
|
|
||||||
// 如果所有明细已完成 更新主表状态为完成
|
// 如果所有明细已完成 更新主表状态为完成
|
||||||
WmsMaterialTransferD wmsMaterialTransferd = await _db.Queryable<WmsMaterialTransferD>().Where(r => r.id == input.source_id).SingleAsync();
|
WmsMaterialTransferD wmsMaterialTransferd = await _db.Queryable<WmsMaterialTransferD>().Where(r => r.id == input.source_id).SingleAsync();
|
||||||
@@ -811,98 +937,112 @@ namespace Tnb.WarehouseMgr
|
|||||||
throw Oops.Oh(ErrorCode.COM1001);
|
throw Oops.Oh(ErrorCode.COM1001);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await _db.Ado.CommitTranAsync();
|
||||||
|
|
||||||
if (input.area_code == "E")
|
if (input.area_code == "E")
|
||||||
await sign(input);
|
await sign(input);
|
||||||
|
|
||||||
|
|
||||||
WmsMaterialTransfer wmsMaterialTransfer = await _db.Queryable<WmsMaterialTransfer>().SingleAsync(x => x.id == wmsMaterialTransferd.bill_id);
|
// 其它入库
|
||||||
List<WmsMaterialTransferD> dList = await _db.Queryable<WmsMaterialTransferD>().Where(x => x.bill_id == wmsMaterialTransferd.bill_id).OrderBy(x=>x.id).ToListAsync();
|
if (input.wmsDistaskH.task_type == WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID)
|
||||||
DictionaryDataEntity unitData = await _db.Queryable<DictionaryTypeEntity>()
|
|
||||||
.LeftJoin<DictionaryDataEntity>((x, y) => x.Id == y.DictionaryTypeId)
|
|
||||||
.Where((x, y) => x.EnCode == DictConst.MeasurementUnit && y.EnCode == wmsMaterialTransferd.unit_id)
|
|
||||||
.Select((x,y)=>y)
|
|
||||||
.FirstAsync();
|
|
||||||
List<string> ids = new List<string>();
|
|
||||||
ids.Add(wmsMaterialTransfer.create_id);
|
|
||||||
ids.Add(WmsWareHouseConst.AdministratorOrgId);
|
|
||||||
ids.Add(wmsMaterialTransfer.warehouse_outstock);
|
|
||||||
ids.Add(wmsMaterialTransfer.warehouse_instock);
|
|
||||||
ids.Add(wmsMaterialTransferd.material_id);
|
|
||||||
if (unitData != null)
|
|
||||||
{
|
{
|
||||||
ids.Add(unitData.Id);
|
Logger.LogInformation("【WmsMaterialTransferService ModifyAsync】同步其它入库单到erp...");
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
List<ErpExtendField> erpExtendFields = await _db.Queryable<ErpExtendField>().Where(x=>ids.Contains(x.table_id)).ToListAsync();
|
// 其它出库
|
||||||
|
else
|
||||||
ErpExtendField erpOrg = erpExtendFields.Find(x => x.table_id == (wmsMaterialTransfer.org_id ?? WmsWareHouseConst.AdministratorOrgId));
|
|
||||||
string erpCreateId = erpExtendFields.Find(x=>x.table_id==wmsMaterialTransfer.create_id)?.user_id ?? "";
|
|
||||||
|
|
||||||
List<Dictionary<string, object>> requestData = new List<Dictionary<string, object>>();
|
|
||||||
Dictionary<string, object> erpRequestData = new Dictionary<string, object>();
|
|
||||||
string nowStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
||||||
erpRequestData.Add("billmaker",erpCreateId);
|
|
||||||
erpRequestData.Add("cdptid","1001A1100000000JRLI1");// 先写死
|
|
||||||
erpRequestData.Add("cdptvid","0001A11000000007GGO8");// 先写死
|
|
||||||
erpRequestData.Add("corpoid",erpOrg.corpoid);
|
|
||||||
erpRequestData.Add("corpvid",erpOrg.corpoid);
|
|
||||||
erpRequestData.Add("cothercalbodyoid",erpOrg.pk_org);
|
|
||||||
erpRequestData.Add("cotherwhid",erpExtendFields.Find(x=>x.table_id==wmsMaterialTransfer.warehouse_instock)?.cotherwhid ?? "");
|
|
||||||
erpRequestData.Add("creationtime",nowStr);
|
|
||||||
erpRequestData.Add("creator",erpCreateId);
|
|
||||||
erpRequestData.Add("ctrantypeid","0001H11000000000D31W");
|
|
||||||
erpRequestData.Add("cwarehouseid",erpExtendFields.Find(x=>x.table_id==wmsMaterialTransfer.warehouse_outstock)?.cotherwhid ?? "");
|
|
||||||
erpRequestData.Add("dbilldate",nowStr);
|
|
||||||
erpRequestData.Add("dmakedate",nowStr);
|
|
||||||
erpRequestData.Add("ntotalnum",wmsCarryCodes.Sum(r => r.codeqty));
|
|
||||||
erpRequestData.Add("pk_group",erpOrg.pk_group);
|
|
||||||
erpRequestData.Add("pk_org",erpOrg.pk_org);
|
|
||||||
erpRequestData.Add("pk_org_v",erpOrg.pk_org_v);
|
|
||||||
erpRequestData.Add("vbillcode",wmsMaterialTransfer.bill_code);
|
|
||||||
erpRequestData.Add("vtrantypecode","4I-01");//其他出库 先写死
|
|
||||||
List<Dictionary<string, object>> erpRequestDataDetails = new List<Dictionary<string, object>>();
|
|
||||||
erpRequestDataDetails.Add(new Dictionary<string, object>()
|
|
||||||
{
|
{
|
||||||
["cbodytranstypecode"] = "4I-01",
|
Logger.LogInformation("【WmsMaterialTransferService ModifyAsync】同步其它出库单到erp...");
|
||||||
["cbodywarehouseid"] = erpExtendFields.Find(x=>x.table_id==wmsMaterialTransfer.warehouse_outstock)?.cotherwhid ?? "",
|
|
||||||
["cmaterialoid"] = erpExtendFields.Find(x=>x.table_id==wmsMaterialTransferd.material_id)?.cmaterialoid ?? "",
|
|
||||||
["cmaterialvid"] = erpExtendFields.Find(x=>x.table_id==wmsMaterialTransferd.material_id)?.cmaterialvid ?? "",
|
|
||||||
["corpoid"] = erpOrg.corpoid,
|
|
||||||
["corpvid"] = erpOrg.corpvid,
|
|
||||||
["crowno"] = wmsMaterialTransferd.lineno,
|
|
||||||
["csourcebillbid"] = wmsMaterialTransferd.erp_line_pk,
|
|
||||||
["csourcebillhid"] = wmsMaterialTransfer.erp_pk,
|
|
||||||
["cunitid"] = erpExtendFields.Find(x=>x.table_id==unitData?.Id)?.cunitid ?? "",
|
|
||||||
["cvendorid"] = "",
|
|
||||||
["cvendorvid"] = "",
|
|
||||||
["dbizdate"] = nowStr,
|
|
||||||
["nnum"] = wmsCarryCodes.Sum(r => r.codeqty),
|
|
||||||
["nshouldnum"] = wmsMaterialTransferd.qty,
|
|
||||||
["pk_group"] = erpOrg.pk_group,
|
|
||||||
["pk_org"] = erpOrg.pk_org,
|
|
||||||
["pk_org_v"] = erpOrg.pk_org_v,
|
|
||||||
["vbatchcode"] = wmsMaterialTransferd.code_batch,
|
|
||||||
});
|
|
||||||
erpRequestData.Add("dtls",erpRequestDataDetails);
|
|
||||||
requestData.Add(erpRequestData);
|
|
||||||
|
|
||||||
ThirdWebapiRecord thirdWebapiRecord = new ThirdWebapiRecord();
|
WmsMaterialTransfer wmsMaterialTransfer = await _db.Queryable<WmsMaterialTransfer>().SingleAsync(x => x.id == wmsMaterialTransferd.bill_id);
|
||||||
thirdWebapiRecord.id = SnowflakeIdHelper.NextId();
|
List<WmsMaterialTransferD> dList = await _db.Queryable<WmsMaterialTransferD>().Where(x => x.bill_id == wmsMaterialTransferd.bill_id).OrderBy(x => x.id).ToListAsync();
|
||||||
thirdWebapiRecord.third_name = WmsWareHouseConst.BIP;
|
DictionaryDataEntity unitData = await _db.Queryable<DictionaryTypeEntity>()
|
||||||
thirdWebapiRecord.name = "其它出库";
|
.LeftJoin<DictionaryDataEntity>((x, y) => x.Id == y.DictionaryTypeId)
|
||||||
thirdWebapiRecord.method = "POST";
|
.Where((x, y) => x.EnCode == DictConst.MeasurementUnit && y.EnCode == wmsMaterialTransferd.unit_id)
|
||||||
thirdWebapiRecord.url = WmsWareHouseConst.BIP_DOMAIN+"uapws/rest/generalout/save";
|
.Select((x, y) => y)
|
||||||
thirdWebapiRecord.request_data = JsonConvert.SerializeObject(requestData);
|
.FirstAsync();
|
||||||
thirdWebapiRecord.create_time = DateTime.Now;
|
List<string> ids = new List<string>();
|
||||||
|
ids.Add(wmsMaterialTransfer.create_id);
|
||||||
|
ids.Add(WmsWareHouseConst.AdministratorOrgId);
|
||||||
|
ids.Add(wmsMaterialTransfer.warehouse_outstock);
|
||||||
|
ids.Add(wmsMaterialTransfer.warehouse_instock);
|
||||||
|
ids.Add(wmsMaterialTransferd.material_id);
|
||||||
|
if (unitData != null)
|
||||||
|
{
|
||||||
|
ids.Add(unitData.Id);
|
||||||
|
}
|
||||||
|
List<ErpExtendField> erpExtendFields = await _db.Queryable<ErpExtendField>().Where(x => ids.Contains(x.table_id)).ToListAsync();
|
||||||
|
|
||||||
await _db.Insertable(thirdWebapiRecord).ExecuteCommandAsync();
|
ErpExtendField erpOrg = erpExtendFields.Find(x => x.table_id == (wmsMaterialTransfer.org_id ?? WmsWareHouseConst.AdministratorOrgId));
|
||||||
|
string erpCreateId = erpExtendFields.Find(x => x.table_id == wmsMaterialTransfer.create_id)?.user_id ?? "";
|
||||||
|
|
||||||
await _db.Ado.CommitTranAsync();
|
List<Dictionary<string, object>> requestData = new List<Dictionary<string, object>>();
|
||||||
|
Dictionary<string, object> erpRequestData = new Dictionary<string, object>();
|
||||||
|
string nowStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||||||
|
erpRequestData.Add("billmaker", erpCreateId);
|
||||||
|
erpRequestData.Add("cdptid", "1001A1100000000JRLI1");// 先写死
|
||||||
|
erpRequestData.Add("cdptvid", "0001A11000000007GGO8");// 先写死
|
||||||
|
erpRequestData.Add("corpoid", erpOrg.corpoid);
|
||||||
|
erpRequestData.Add("corpvid", erpOrg.corpoid);
|
||||||
|
erpRequestData.Add("cothercalbodyoid", erpOrg.pk_org);
|
||||||
|
erpRequestData.Add("cotherwhid", erpExtendFields.Find(x => x.table_id == wmsMaterialTransfer.warehouse_instock)?.cotherwhid ?? "");
|
||||||
|
erpRequestData.Add("creationtime", nowStr);
|
||||||
|
erpRequestData.Add("creator", erpCreateId);
|
||||||
|
erpRequestData.Add("ctrantypeid", "0001H11000000000D31W");
|
||||||
|
erpRequestData.Add("cwarehouseid", erpExtendFields.Find(x => x.table_id == wmsMaterialTransfer.warehouse_outstock)?.cotherwhid ?? "");
|
||||||
|
erpRequestData.Add("dbilldate", nowStr);
|
||||||
|
erpRequestData.Add("dmakedate", nowStr);
|
||||||
|
erpRequestData.Add("ntotalnum", wmsCarryCodes.Sum(r => r.codeqty));
|
||||||
|
erpRequestData.Add("pk_group", erpOrg.pk_group);
|
||||||
|
erpRequestData.Add("pk_org", erpOrg.pk_org);
|
||||||
|
erpRequestData.Add("pk_org_v", erpOrg.pk_org_v);
|
||||||
|
erpRequestData.Add("vbillcode", wmsMaterialTransfer.bill_code);
|
||||||
|
erpRequestData.Add("vtrantypecode", "4I-01");//其他出库 先写死
|
||||||
|
List<Dictionary<string, object>> erpRequestDataDetails = new List<Dictionary<string, object>>();
|
||||||
|
erpRequestDataDetails.Add(new Dictionary<string, object>()
|
||||||
|
{
|
||||||
|
["cbodytranstypecode"] = "4I-01",
|
||||||
|
["cbodywarehouseid"] = erpExtendFields.Find(x => x.table_id == wmsMaterialTransfer.warehouse_outstock)?.cotherwhid ?? "",
|
||||||
|
["cmaterialoid"] = erpExtendFields.Find(x => x.table_id == wmsMaterialTransferd.material_id)?.cmaterialoid ?? "",
|
||||||
|
["cmaterialvid"] = erpExtendFields.Find(x => x.table_id == wmsMaterialTransferd.material_id)?.cmaterialvid ?? "",
|
||||||
|
["corpoid"] = erpOrg.corpoid,
|
||||||
|
["corpvid"] = erpOrg.corpvid,
|
||||||
|
["crowno"] = wmsMaterialTransferd.lineno,
|
||||||
|
["csourcebillbid"] = wmsMaterialTransferd.erp_line_pk,
|
||||||
|
["csourcebillhid"] = wmsMaterialTransfer.erp_pk,
|
||||||
|
["cunitid"] = erpExtendFields.Find(x => x.table_id == unitData?.Id)?.cunitid ?? "",
|
||||||
|
["cvendorid"] = "",
|
||||||
|
["cvendorvid"] = "",
|
||||||
|
["dbizdate"] = nowStr,
|
||||||
|
["nnum"] = wmsCarryCodes.Sum(r => r.codeqty),
|
||||||
|
["nshouldnum"] = wmsMaterialTransferd.qty,
|
||||||
|
["pk_group"] = erpOrg.pk_group,
|
||||||
|
["pk_org"] = erpOrg.pk_org,
|
||||||
|
["pk_org_v"] = erpOrg.pk_org_v,
|
||||||
|
["vbatchcode"] = wmsMaterialTransferd.code_batch,
|
||||||
|
});
|
||||||
|
erpRequestData.Add("dtls", erpRequestDataDetails);
|
||||||
|
requestData.Add(erpRequestData);
|
||||||
|
|
||||||
|
ThirdWebapiRecord thirdWebapiRecord = new ThirdWebapiRecord();
|
||||||
|
thirdWebapiRecord.id = SnowflakeIdHelper.NextId();
|
||||||
|
thirdWebapiRecord.third_name = WmsWareHouseConst.BIP;
|
||||||
|
thirdWebapiRecord.name = "其它出库";
|
||||||
|
thirdWebapiRecord.method = "POST";
|
||||||
|
thirdWebapiRecord.url = WmsWareHouseConst.BIP_DOMAIN + "uapws/rest/generalout/save";
|
||||||
|
thirdWebapiRecord.request_data = JsonConvert.SerializeObject(requestData);
|
||||||
|
thirdWebapiRecord.create_time = DateTime.Now;
|
||||||
|
|
||||||
|
await _db.Insertable(thirdWebapiRecord).ExecuteCommandAsync();
|
||||||
|
Logger.LogInformation("【WmsMaterialTransferService ModifyAsync】同步其它出库单到erp成功");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch(Exception ex)
|
catch(Exception ex)
|
||||||
{
|
{
|
||||||
Logger.LogError("【WmsMaterialTransferService ModifyAsync】" + ex.Message);
|
Logger.LogError("【WmsMaterialTransferService ModifyAsync】" + ex.Message);
|
||||||
Logger.LogError("【WmsMaterialTransferService ModifyAsync】" + ex.StackTrace);
|
Logger.LogError("【WmsMaterialTransferService ModifyAsync】" + ex.StackTrace);
|
||||||
await _db.Ado.RollbackTranAsync();
|
//await _db.Ado.RollbackTranAsync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -966,11 +1106,11 @@ namespace Tnb.WarehouseMgr
|
|||||||
material_id = wmsMaterialTransferD.material_id,
|
material_id = wmsMaterialTransferD.material_id,
|
||||||
code_batch = wmsMaterialTransferD.code_batch,
|
code_batch = wmsMaterialTransferD.code_batch,
|
||||||
needOut = needOut,
|
needOut = needOut,
|
||||||
material_code = wmsMaterialTransferD.material_code
|
material_code = wmsMaterialTransferD.material_code,
|
||||||
|
endlocations = new string[2] { WmsWareHouseConst.ZZCSSX121009, WmsWareHouseConst.ZZCSSX121010 }
|
||||||
};
|
};
|
||||||
List<Tuple<WmsCarryH, decimal, BasLocation>>? carrys = await _wareHouseService.OutStockStrategyZCC2Floor2(OutStockStrategyInput);
|
|
||||||
|
|
||||||
|
List<Tuple<WmsCarryH, decimal, BasLocation>>? carrys = await _wareHouseService.OutStockStrategyZCC2Floor2(OutStockStrategyInput);
|
||||||
|
|
||||||
foreach (var item in carrys)
|
foreach (var item in carrys)
|
||||||
{
|
{
|
||||||
@@ -1049,6 +1189,144 @@ namespace Tnb.WarehouseMgr
|
|||||||
return await ToApiResult(HttpStatusCode.OK, "成功");
|
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 中储仓退料到原材料仓
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="input"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="AppFriendlyException"></exception>
|
||||||
|
[HttpPost, NonUnify, AllowAnonymous]
|
||||||
|
public async Task<Entities.Dto.Outputs.Result> DistributeZCCToYCL(MaterialTransferDistributeToZCCInput input)
|
||||||
|
{
|
||||||
|
s_taskDistributeZCCToYCL.Wait();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
WmsMaterialTransfer wmsMaterialTransfer = _db.Queryable<WmsMaterialTransfer>().Where(r => r.id == input.source_id).First();
|
||||||
|
if (wmsMaterialTransfer == null)
|
||||||
|
{
|
||||||
|
Logger.LogWarning($"不存在id为{input.source_id}的转库单!");
|
||||||
|
throw new AppFriendlyException($"不存在id为{input.source_id}的转库单!", 500);
|
||||||
|
}
|
||||||
|
if (wmsMaterialTransfer.status != WmsWareHouseConst.BILLSTATUS_ADD_ID)
|
||||||
|
{
|
||||||
|
Logger.LogWarning($@"当前转库单状态为{wmsMaterialTransfer.status},不能下发中储仓退料到原材料仓任务!");
|
||||||
|
throw new AppFriendlyException($@"当前转库单状态为{wmsMaterialTransfer.status},不能下发中储仓退料到原材料仓任务!", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<WmsMaterialTransferD> wmsMaterialTransferds = _db.Queryable<WmsMaterialTransferD>().Where(r => r.bill_id == input.source_id).ToList();
|
||||||
|
|
||||||
|
var wmsMaterialTransferdsDistinct = wmsMaterialTransferds.Select(r => new
|
||||||
|
{
|
||||||
|
material_id = r.material_id,
|
||||||
|
code_batch = r.code_batch,
|
||||||
|
}).Distinct();
|
||||||
|
if (wmsMaterialTransferdsDistinct.Count() < wmsMaterialTransferds.Count)
|
||||||
|
{
|
||||||
|
Logger.LogWarning($@"转库单{wmsMaterialTransfer.bill_code}表体存在物料和批号重复的明细!");
|
||||||
|
throw new AppFriendlyException($@"转库单{wmsMaterialTransfer.bill_code}表体存在物料和批号重复的明细!", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 转库单载具子表
|
||||||
|
List<WmsMaterialTransferCarry> wmsMaterialTransferCarrys = new List<WmsMaterialTransferCarry>();
|
||||||
|
|
||||||
|
foreach (WmsMaterialTransferD wmsMaterialTransferD in wmsMaterialTransferds)
|
||||||
|
{
|
||||||
|
// 需要转库数量
|
||||||
|
decimal? needOut = wmsMaterialTransferD.qty;
|
||||||
|
|
||||||
|
//出库取起点,获取所有符合输入的载具规格的载具
|
||||||
|
OutStockStrategyZCC2Floor2Query OutStockStrategyInput = new()
|
||||||
|
{
|
||||||
|
warehouse_id = "2",
|
||||||
|
material_id = wmsMaterialTransferD.material_id,
|
||||||
|
code_batch = wmsMaterialTransferD.code_batch,
|
||||||
|
needOut = needOut,
|
||||||
|
material_code = wmsMaterialTransferD.material_code,
|
||||||
|
endlocations = new string[] {WmsWareHouseConst.ZZCSSX021007 }
|
||||||
|
};
|
||||||
|
List<Tuple<WmsCarryH, decimal, BasLocation>>? carrys = await _wareHouseService.OutStockStrategyZCC2Floor2(OutStockStrategyInput);
|
||||||
|
|
||||||
|
|
||||||
|
foreach (var item in carrys)
|
||||||
|
{
|
||||||
|
WmsCarryH wmsCarryH = item.Item1;
|
||||||
|
decimal codeqty = item.Item2;
|
||||||
|
BasLocation endlocation_ssx = item.Item3;
|
||||||
|
|
||||||
|
// 转库单载具子表
|
||||||
|
WmsMaterialTransferCarry wmsMaterialTransferCarry = new WmsMaterialTransferCarry();
|
||||||
|
wmsMaterialTransferCarry.bill_id = input.source_id;
|
||||||
|
wmsMaterialTransferCarry.carry_id = wmsCarryH.id;
|
||||||
|
wmsMaterialTransferCarry.carry_code = wmsCarryH.carry_code;
|
||||||
|
wmsMaterialTransferCarry.create_id = input.create_id;
|
||||||
|
wmsMaterialTransferCarry.create_time = DateTime.Now;
|
||||||
|
wmsMaterialTransferCarry.endlocation_id = endlocation_ssx.id;
|
||||||
|
wmsMaterialTransferCarry.endlocation_code = endlocation_ssx.location_code;
|
||||||
|
wmsMaterialTransferCarry.startlocation_id = wmsCarryH.location_id;
|
||||||
|
wmsMaterialTransferCarry.startlocation_code = wmsCarryH.location_code;
|
||||||
|
wmsMaterialTransferCarry.mat_bill_id = wmsMaterialTransferD.id;
|
||||||
|
wmsMaterialTransferCarry.qty = codeqty;
|
||||||
|
wmsMaterialTransferCarrys.Add(wmsMaterialTransferCarry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
await _db.Ado.BeginTranAsync();
|
||||||
|
|
||||||
|
await _db.Updateable<WmsMaterialTransfer>().SetColumns(r => new WmsMaterialTransfer
|
||||||
|
{
|
||||||
|
status = WmsWareHouseConst.BILLSTATUS_ON_ID,
|
||||||
|
carry_count = wmsMaterialTransferCarrys.Count,
|
||||||
|
remainbindracknum = wmsMaterialTransferCarrys.Count
|
||||||
|
}).Where(r => r.id == input.source_id).ExecuteCommandAsync();
|
||||||
|
Logger.LogInformation($"【DistributeZCCToYCL】更新转库单{wmsMaterialTransfer.bill_code}主表的数据");
|
||||||
|
|
||||||
|
await _db.Insertable(wmsMaterialTransferCarrys).ExecuteCommandAsync();
|
||||||
|
Logger.LogInformation($"【DistributeZCCToYCL】插入转库单{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);
|
||||||
|
if (res.code != JNPF.Common.Enums.HttpStatusCode.OK)
|
||||||
|
{
|
||||||
|
Logger.LogInformation($"【DistributeZCCToYCL生成预任务失败 载具 {wmsMaterialTransferCarry.carry_code}");
|
||||||
|
throw new AppFriendlyException($"生成预任务失败 载具 {wmsMaterialTransferCarry.carry_code}", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
await _db.Updateable<WmsMaterialTransferD>().SetColumns(r => r.yxfqty == r.yxfqty + wmsMaterialTransferCarry.qty).Where(r => r.id == wmsMaterialTransferCarry.mat_bill_id).ExecuteCommandAsync();
|
||||||
|
}
|
||||||
|
Logger.LogInformation($"转库单{wmsMaterialTransfer.bill_code}预任务{wmsMaterialTransferCarrys.Count}条全部生成成功");
|
||||||
|
|
||||||
|
|
||||||
|
await _db.Ado.CommitTranAsync();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
await _db.Ado.RollbackTranAsync();
|
||||||
|
Logger.LogError("【DistributeZCCToYCL】" + ex.Message);
|
||||||
|
Logger.LogError("【DistributeZCCToYCL】" + ex.StackTrace);
|
||||||
|
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
s_taskDistributeZCCToYCL.Release();
|
||||||
|
InvokeGenPretaskExcute();
|
||||||
|
}
|
||||||
|
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 从暂存仓呼叫料架到产线
|
/// 从暂存仓呼叫料架到产线
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user