bug处理 料箱出7号线逻辑
This commit is contained in:
@@ -40,6 +40,7 @@ using Tnb.WarehouseMgr.Entities.Configs;
|
|||||||
using Tnb.WarehouseMgr.Entities.Consts;
|
using Tnb.WarehouseMgr.Entities.Consts;
|
||||||
using Tnb.WarehouseMgr.Entities.Dto;
|
using Tnb.WarehouseMgr.Entities.Dto;
|
||||||
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
||||||
|
using Tnb.WarehouseMgr.Entities.Entity;
|
||||||
using Tnb.WarehouseMgr.Entities.Enums;
|
using Tnb.WarehouseMgr.Entities.Enums;
|
||||||
using Tnb.WarehouseMgr.Interfaces;
|
using Tnb.WarehouseMgr.Interfaces;
|
||||||
|
|
||||||
@@ -67,6 +68,9 @@ namespace Tnb.ProductionMgr
|
|||||||
private Timer? Floor2timer移走上升降区未生成预任务且满托的料架;
|
private Timer? Floor2timer移走上升降区未生成预任务且满托的料架;
|
||||||
private Timer? Floor2timer移走下升降区未生成预任务且空托的料架;
|
private Timer? Floor2timer移走下升降区未生成预任务且空托的料架;
|
||||||
|
|
||||||
|
// 7号线补充空料箱
|
||||||
|
private Timer? SSX7Supplementtimer;
|
||||||
|
|
||||||
public static SemaphoreSlim s_taskExecuteFloor2UpMachinecodetimer = new(1);
|
public static SemaphoreSlim s_taskExecuteFloor2UpMachinecodetimer = new(1);
|
||||||
public static SemaphoreSlim s_task送空托到上升降区 = new(1);
|
public static SemaphoreSlim s_task送空托到上升降区 = new(1);
|
||||||
public static SemaphoreSlim s_task送满托到下升降区 = new(1);
|
public static SemaphoreSlim s_task送满托到下升降区 = new(1);
|
||||||
@@ -81,11 +85,14 @@ namespace Tnb.ProductionMgr
|
|||||||
private readonly IBillRullService _billRullService;
|
private readonly IBillRullService _billRullService;
|
||||||
private readonly IWareHouseService _wareHouseService;
|
private readonly IWareHouseService _wareHouseService;
|
||||||
private readonly IWmsCarryBindService _wmsCarryBindService;
|
private readonly IWmsCarryBindService _wmsCarryBindService;
|
||||||
|
private readonly IWmsEmptyOutstockService _wmsEmptyOutstockService;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private readonly ElevatorControlConfiguration _eleCtlCfg = App.Configuration.Build<ElevatorControlConfiguration>();
|
private readonly ElevatorControlConfiguration _eleCtlCfg = App.Configuration.Build<ElevatorControlConfiguration>();
|
||||||
|
|
||||||
public RedisBackGround(RedisData redisData, IPrdInstockService prdInstockService, ISqlSugarRepository<RedisReadConfig> repository, IWmsPDAScanInStockService wmsPDAScanInStock
|
public RedisBackGround(RedisData redisData, IPrdInstockService prdInstockService, ISqlSugarRepository<RedisReadConfig> repository, IWmsPDAScanInStockService wmsPDAScanInStock
|
||||||
, IUserManager userManager, IBillRullService billRullService, IWareHouseService wareHouseService, IWmsCarryBindService wmsCarryBindService)
|
, IUserManager userManager, IBillRullService billRullService, IWareHouseService wareHouseService, IWmsCarryBindService wmsCarryBindService, IWmsEmptyOutstockService wmsEmptyOutstockService)
|
||||||
{
|
{
|
||||||
_redisData = redisData;
|
_redisData = redisData;
|
||||||
_prdInstockService = prdInstockService;
|
_prdInstockService = prdInstockService;
|
||||||
@@ -95,6 +102,7 @@ namespace Tnb.ProductionMgr
|
|||||||
_billRullService = billRullService;
|
_billRullService = billRullService;
|
||||||
_wareHouseService = wareHouseService;
|
_wareHouseService = wareHouseService;
|
||||||
_wmsCarryBindService = wmsCarryBindService;
|
_wmsCarryBindService = wmsCarryBindService;
|
||||||
|
_wmsEmptyOutstockService = wmsEmptyOutstockService;
|
||||||
}
|
}
|
||||||
//获取redis数据
|
//获取redis数据
|
||||||
private void GetRedisData(object? state)
|
private void GetRedisData(object? state)
|
||||||
@@ -405,6 +413,24 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
|
|
||||||
})).CreateLogger(this.GetType());
|
})).CreateLogger(this.GetType());
|
||||||
|
|
||||||
|
protected ILogger LoggerSSX7Supplementtimer => LoggerFactory.Create(builder => builder.AddFile($"{AppContext.BaseDirectory}/logs/customSSX7Supplementtimer{DateTime.Now:yyyyMMdd}.log", 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();
|
||||||
|
};
|
||||||
|
|
||||||
|
})).CreateLogger(this.GetType());
|
||||||
|
|
||||||
protected ILogger LoggerYCLGLDPJInstock => LoggerFactory.Create(builder => builder.AddFile($"{AppContext.BaseDirectory}/logs/customBGWCarrySupplement{DateTime.Now:yyyyMMdd}.log", cfgOpts =>
|
protected ILogger LoggerYCLGLDPJInstock => LoggerFactory.Create(builder => builder.AddFile($"{AppContext.BaseDirectory}/logs/customBGWCarrySupplement{DateTime.Now:yyyyMMdd}.log", cfgOpts =>
|
||||||
{
|
{
|
||||||
//cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff";
|
//cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff";
|
||||||
@@ -544,48 +570,33 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 找到没有库位未锁定的空托盘
|
// 找到库位未锁定的空托盘 todo 待修改为使用出库策略
|
||||||
var wmsPoint = _repository.AsSugarClient().Queryable<WmsPointH>()
|
var wmsLoc = _repository.AsSugarClient().Queryable<BasLocation>()
|
||||||
.InnerJoin<BasLocation>((a, b) => a.location_id == b.id)
|
.InnerJoin<WmsCarryH>((a, b) => a.id == b.location_id)
|
||||||
.InnerJoin<WmsCarryH>((a, b, c) => b.id == c.location_id)
|
.LeftJoin<WmsCarryCode>((a, b, c) => b.id == c.carry_id)
|
||||||
.LeftJoin<WmsCarryCode>((a, b, c, d) => c.id == d.carry_id)
|
.Where((a, b, c) => string.IsNullOrEmpty(c.barcode) && a.wh_id == WmsWareHouseConst.WAREHOUSE_YCL_ID && a.location_code.Contains("YCL-")).OrderBy((a, b, c) => a.location_code).Select((a, b, c) => new
|
||||||
.Where((a, b, c, d) => string.IsNullOrEmpty(d.barcode) && b.wh_id == WmsWareHouseConst.WAREHOUSE_YCL_ID && b.location_code.Contains("YCL-")).OrderBy((a, b, c, d) => b.location_code).Select((a, b, c, d) => new
|
|
||||||
{
|
{
|
||||||
wmsPoint = a,
|
basLocation = a,
|
||||||
FirstWmsCarryH = c
|
FirstWmsCarryH = b
|
||||||
});
|
});
|
||||||
|
|
||||||
LoggerBGWCarrySupplement.LogInformation($"【BGWCarrySupplementtimer】 sql {wmsPoint.ToSqlString()}");
|
BasLocation startLocation = wmsLoc.First().basLocation;
|
||||||
|
|
||||||
if (wmsPoint.Count() == 0)
|
WmsCarryH wmsCarryH = wmsLoc.First().FirstWmsCarryH;
|
||||||
{
|
|
||||||
LoggerBGWCarrySupplement.LogWarning($"【BGWCarrySupplementtimer】 当前没有可以出库的空托盘");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
WmsPointH startPoint = wmsPoint.First().wmsPoint;
|
|
||||||
WmsPointH endPoint = _repository.AsSugarClient().Queryable<WmsPointH>().Where(r => r.location_code == key).First();
|
|
||||||
if (endPoint == null)
|
|
||||||
{
|
|
||||||
LoggerBGWCarrySupplement.LogWarning($"【BGWCarrySupplementtimer】 终点库位{key}没有维护对应的点位");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
//锁定起点库位
|
//锁定起点库位
|
||||||
await _repository.AsSugarClient().Updateable<BasLocation>().SetColumns(r => r.is_lock == 1).Where(r => r.id == startPoint.location_id).ExecuteCommandAsync();
|
await _repository.AsSugarClient().Updateable<BasLocation>().SetColumns(r => r.is_lock == 1).Where(r => r.id == startLocation.id).ExecuteCommandAsync();
|
||||||
//锁定终点库位 更新为空闲
|
//锁定终点库位 更新为空闲
|
||||||
await _repository.AsSugarClient().Updateable<BasLocation>().SetColumns(r => new BasLocation { is_lock = 1, is_use = "0" }).Where(r => r.id == endPoint.location_id).ExecuteCommandAsync();
|
await _repository.AsSugarClient().Updateable<BasLocation>().SetColumns(r => new BasLocation { is_lock = 1, is_use = "0" }).Where(r => r.id == endLocation.id).ExecuteCommandAsync();
|
||||||
|
|
||||||
List<WmsPointH> points = new List<WmsPointH>();
|
|
||||||
points.Add(startPoint);
|
|
||||||
points.Add(endPoint);
|
|
||||||
|
|
||||||
Tuple<bool, WmsPretaskH> result_createPretask = await createPretask(points, wmsPoint.First().FirstWmsCarryH.id, wmsPoint.First().FirstWmsCarryH.carry_code, LoggerBGWCarrySupplement);
|
bool result_createPretask = await createPretask(startLocation.id, endLocation.id, wmsCarryH.id, wmsCarryH.carry_code, LoggerBGWCarrySupplement);
|
||||||
if (!result_createPretask.Item1)
|
if (!result_createPretask)
|
||||||
{
|
{
|
||||||
LoggerBGWCarrySupplement.LogWarning($"【BGWCarrySupplementtimer】 {startPoint.location_code} 到 {endPoint.location_code} 预任务生成失败 ");
|
LoggerBGWCarrySupplement.LogWarning($"【BGWCarrySupplementtimer】 {startLocation.location_code} 到 {endLocation.location_code} 预任务生成失败 ");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
LoggerBGWCarrySupplement.LogWarning($"【BGWCarrySupplementtimer】 {startPoint.location_code} 到 {endPoint.location_code} 预任务生成成功");
|
LoggerBGWCarrySupplement.LogWarning($"【BGWCarrySupplementtimer】 {startLocation.location_code} 到 {endLocation.location_code} 预任务生成成功");
|
||||||
|
|
||||||
|
|
||||||
_ = _wareHouseService.GenTaskExecute();
|
_ = _wareHouseService.GenTaskExecute();
|
||||||
@@ -598,6 +609,85 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 7号输送线空料箱补充
|
||||||
|
/// </summary>
|
||||||
|
private async void SSX7Supplement(object? state)
|
||||||
|
{
|
||||||
|
Dictionary<string, string[]> getdic = new Dictionary<string, string[]>();
|
||||||
|
getdic.Add("SSX-021-007", new string[] { "东面提升机输送线", "出库输送线7呼叫CTU" });
|
||||||
|
|
||||||
|
foreach (var key in getdic.Keys)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var strs = getdic.Where(p => p.Key == key).First().Value;
|
||||||
|
string data = await _redisData.GetHash(strs[0], strs[1]);
|
||||||
|
if (data == null)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
JObject? res = JsonConvert.DeserializeObject<JObject>(data);
|
||||||
|
|
||||||
|
bool result = res != null && res["Value"] != null ? res.Value<bool>("Value") : false;
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
LoggerBGWCarrySupplement.LogInformation($"【SSX7Supplement】 7号输送线 {key} {strs[1]}采集到 {res["Value"]}");
|
||||||
|
|
||||||
|
BasLocation endLocation = _repository.AsSugarClient().Queryable<BasLocation>().Where(r => r.location_code == key).First();
|
||||||
|
if (endLocation == null)
|
||||||
|
{
|
||||||
|
LoggerBGWCarrySupplement.LogWarning($"【SSX7Supplement】 {key}未维护库位信息");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (endLocation.is_lock == 1)
|
||||||
|
{
|
||||||
|
LoggerBGWCarrySupplement.LogInformation($"【SSX7Supplement】 7号输送线 {key} 已锁定");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
BasLocation location = await _repository.AsSugarClient().Queryable<BasLocation>().SingleAsync(it => it.location_code == key && it.is_type != EnumLocationType.存储库位.ToString()) ?? throw new AppFriendlyException("无此库位或为存储库位", 500);
|
||||||
|
//锁定起点库位
|
||||||
|
await _repository.AsSugarClient().Updateable<BasLocation>().SetColumns(r => r.is_lock == 1).Where(r => r.id == location.id).ExecuteCommandAsync();
|
||||||
|
|
||||||
|
Dictionary<string, object> dic = new()
|
||||||
|
{
|
||||||
|
[nameof(WmsEmptyOutstockH.id)] = SnowflakeIdHelper.NextId(),
|
||||||
|
[nameof(WmsEmptyOutstockH.org_id)] = WmsWareHouseConst.AdministratorOrgId,
|
||||||
|
[nameof(WmsEmptyOutstockH.location_id)] = location.id,
|
||||||
|
[nameof(WmsEmptyOutstockH.carrystd_id)] = WmsWareHouseConst.LIAOXIANGID,
|
||||||
|
[nameof(WmsEmptyOutstockH.bill_code)] = _billRullService.GetBillNumber(WmsWareHouseConst.WMS_EMPTYOUTSTK_ENCODE).GetAwaiter().GetResult(),
|
||||||
|
[nameof(WmsEmptyOutstockH.status)] = WmsWareHouseConst.BILLSTATUS_ADD_ID,
|
||||||
|
[nameof(WmsEmptyOutstockH.qty)] = 1,
|
||||||
|
[nameof(WmsEmptyOutstockH.biz_type)] = WmsWareHouseConst.BIZTYPE_WMSEPTYOUTSTK_ID,
|
||||||
|
["warehouse_id"] = WmsWareHouseConst.WAREHOUSE_ZC_ID,
|
||||||
|
[nameof(WmsEmptyOutstockH.create_id)] = WmsWareHouseConst.AdministratorUserId,
|
||||||
|
[nameof(WmsEmptyOutstockH.create_time)] = DateTime.Now
|
||||||
|
};
|
||||||
|
|
||||||
|
VisualDevModelDataCrInput visualDevModelDataCrInput = new()
|
||||||
|
{
|
||||||
|
data = dic,
|
||||||
|
};
|
||||||
|
var result_WmsEmptyOut = await _wmsEmptyOutstockService.WmsEmptyOut(visualDevModelDataCrInput);
|
||||||
|
|
||||||
|
if (result_WmsEmptyOut.code2 != "200")
|
||||||
|
{
|
||||||
|
LoggerBGWCarrySupplement.LogWarning($"【SSX7Supplement】 预任务生成失败 {result_WmsEmptyOut.msg}");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
LoggerBGWCarrySupplement.LogWarning($"【SSX7Supplement】 预任务生成成功");
|
||||||
|
|
||||||
|
_ = _wareHouseService.GenTaskExecute();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LoggerBGWCarrySupplement.LogInformation($"【SSX7Supplement】 7号输送线空料箱补充发生异常:{ex}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 供料叠盘机空托盘自动入库
|
/// 供料叠盘机空托盘自动入库
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -623,54 +713,44 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
{
|
{
|
||||||
LoggerYCLGLDPJInstock.LogInformation($"【YCLGLDPJInstock】 三工位叠盘机 {key} {strs[1]}采集到 {res["Value"]}");
|
LoggerYCLGLDPJInstock.LogInformation($"【YCLGLDPJInstock】 三工位叠盘机 {key} {strs[1]}采集到 {res["Value"]}");
|
||||||
|
|
||||||
BasLocation endLocation = _repository.AsSugarClient().Queryable<BasLocation>().Where(r => r.location_code == key).First();
|
BasLocation startLocation = _repository.AsSugarClient().Queryable<BasLocation>().Where(r => r.location_code == key).First();
|
||||||
if (endLocation == null)
|
if (startLocation == null)
|
||||||
{
|
{
|
||||||
LoggerYCLGLDPJInstock.LogWarning($"【YCLGLDPJInstock】 {key}未维护库位信息");
|
LoggerYCLGLDPJInstock.LogWarning($"【YCLGLDPJInstock】 {key}未维护库位信息");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (endLocation.is_lock == 1)
|
if (startLocation.is_lock == 1)
|
||||||
{
|
{
|
||||||
LoggerYCLGLDPJInstock.LogInformation($"【YCLGLDPJInstock】 三工位叠盘机 {key} 已锁定");
|
LoggerYCLGLDPJInstock.LogInformation($"【YCLGLDPJInstock】 三工位叠盘机 {key} 已锁定");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 找到未锁定且未占用的库位
|
// 找到未锁定且未占用的库位
|
||||||
var wmsPoint = _repository.AsSugarClient().Queryable<WmsPointH>()
|
var endLocations = _repository.AsSugarClient().Queryable<BasLocation>()
|
||||||
.InnerJoin<BasLocation>((a, b) => a.location_id == b.id)
|
.Where(a => a.is_lock == 0 && a.is_use == "0" && a.wh_id == WmsWareHouseConst.WAREHOUSE_YCL_ID && a.location_code.Contains("YCL-"));
|
||||||
.Where((a, b) => b.is_lock == 0 && b.is_use == "0" && b.wh_id == WmsWareHouseConst.WAREHOUSE_YCL_ID && b.location_code.Contains("YCL-"));
|
|
||||||
|
|
||||||
LoggerYCLGLDPJInstock.LogInformation($"【YCLGLDPJInstock】 sql {wmsPoint.ToSqlString()}");
|
LoggerYCLGLDPJInstock.LogInformation($"【YCLGLDPJInstock】 sql {endLocations.ToSqlString()}");
|
||||||
|
|
||||||
if (wmsPoint.Count() == 0)
|
if (endLocations.Count() == 0)
|
||||||
{
|
{
|
||||||
LoggerYCLGLDPJInstock.LogWarning($"【YCLGLDPJInstock】 当前没有空库位可以入库");
|
LoggerYCLGLDPJInstock.LogWarning($"【YCLGLDPJInstock】 当前没有空库位可以入库");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
WmsPointH startPoint = _repository.AsSugarClient().Queryable<WmsPointH>().Where(r => r.location_code == key).First();
|
|
||||||
WmsPointH endPoint = wmsPoint.First();
|
BasLocation endLocation = endLocations.First();
|
||||||
if (endPoint == null)
|
|
||||||
{
|
|
||||||
LoggerYCLGLDPJInstock.LogWarning($"【YCLGLDPJInstock】 起点库位{key}没有维护对应的点位");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
//锁定起点库位 更新为空闲
|
//锁定起点库位 更新为空闲
|
||||||
await _repository.AsSugarClient().Updateable<BasLocation>().SetColumns(r => new BasLocation { is_lock = 1, is_use = "0" }).Where(r => r.id == startPoint.location_id).ExecuteCommandAsync();
|
await _repository.AsSugarClient().Updateable<BasLocation>().SetColumns(r => new BasLocation { is_lock = 1, is_use = "0" }).Where(r => r.id == startLocation.id).ExecuteCommandAsync();
|
||||||
//锁定终点库位
|
//锁定终点库位
|
||||||
await _repository.AsSugarClient().Updateable<BasLocation>().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == endPoint.location_id).ExecuteCommandAsync();
|
await _repository.AsSugarClient().Updateable<BasLocation>().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == endLocation.id).ExecuteCommandAsync();
|
||||||
|
|
||||||
List<WmsPointH> points = new List<WmsPointH>();
|
bool result_createPretask = await createPretask(startLocation.id, endLocation.id, "", "", LoggerYCLGLDPJInstock);
|
||||||
points.Add(startPoint);
|
if (!result_createPretask)
|
||||||
points.Add(endPoint);
|
|
||||||
|
|
||||||
Tuple<bool, WmsPretaskH> result_createPretask = await createPretask(points, "", "", LoggerYCLGLDPJInstock);
|
|
||||||
if (!result_createPretask.Item1)
|
|
||||||
{
|
{
|
||||||
LoggerYCLGLDPJInstock.LogWarning($"【YCLGLDPJInstock】 {startPoint.location_code} 到 {endPoint.location_code} 预任务生成失败");
|
LoggerYCLGLDPJInstock.LogWarning($"【YCLGLDPJInstock】 {startLocation.location_code} 到 {endLocation.location_code} 预任务生成失败");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
LoggerYCLGLDPJInstock.LogWarning($"【YCLGLDPJInstock】 {startPoint.location_code} 到 {endPoint.location_code} 预任务生成成功");
|
LoggerYCLGLDPJInstock.LogWarning($"【YCLGLDPJInstock】 {startLocation.location_code} 到 {endLocation.location_code} 预任务生成成功");
|
||||||
|
|
||||||
|
|
||||||
_ = _wareHouseService.GenTaskExecute();
|
_ = _wareHouseService.GenTaskExecute();
|
||||||
@@ -706,56 +786,46 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
bool result = res != null && res["Value"] != null ? res.Value<bool>("Value") : false;
|
bool result = res != null && res["Value"] != null ? res.Value<bool>("Value") : false;
|
||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
LoggerYCLGLDPJInstock.LogInformation($"【YCLGLDPJInstock】 外协叠盘机 {key} {strs[1]}采集到 {res["Value"]}");
|
LoggerYCLGLDPJInstock.LogInformation($"【YCLWXDPJInstock】 外协叠盘机 {key} {strs[1]}采集到 {res["Value"]}");
|
||||||
|
|
||||||
BasLocation endLocation = _repository.AsSugarClient().Queryable<BasLocation>().Where(r => r.location_code == key).First();
|
BasLocation startLocation = _repository.AsSugarClient().Queryable<BasLocation>().Where(r => r.location_code == key).First();
|
||||||
if (endLocation == null)
|
if (startLocation == null)
|
||||||
{
|
{
|
||||||
LoggerYCLGLDPJInstock.LogWarning($"【YCLGLDPJInstock】 {key}未维护库位信息");
|
LoggerYCLGLDPJInstock.LogWarning($"【YCLWXDPJInstock】 {key}未维护库位信息");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (endLocation.is_lock == 1)
|
if (startLocation.is_lock == 1)
|
||||||
{
|
{
|
||||||
LoggerYCLGLDPJInstock.LogInformation($"【YCLGLDPJInstock】 外协叠盘机 {key} 已锁定");
|
LoggerYCLGLDPJInstock.LogInformation($"【YCLWXDPJInstock】 外协叠盘机 {key} 已锁定");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 找到未锁定且未占用的库位
|
// 找到未锁定且未占用的库位
|
||||||
var wmsPoint = _repository.AsSugarClient().Queryable<WmsPointH>()
|
var endLocations = _repository.AsSugarClient().Queryable<BasLocation>()
|
||||||
.InnerJoin<BasLocation>((a, b) => a.location_id == b.id)
|
.Where(a => a.is_lock == 0 && a.is_use == "0" && a.wh_id == WmsWareHouseConst.WAREHOUSE_YCL_ID && a.location_code.Contains("YCL-"));
|
||||||
.Where((a, b) => b.is_lock == 0 && b.is_use == "0" && b.wh_id == WmsWareHouseConst.WAREHOUSE_YCL_ID && b.location_code.Contains("YCL-"));
|
|
||||||
|
|
||||||
LoggerYCLGLDPJInstock.LogInformation($"【YCLGLDPJInstock】 sql {wmsPoint.ToSqlString()}");
|
LoggerYCLGLDPJInstock.LogInformation($"【YCLWXDPJInstock】 sql {endLocations.ToSqlString()}");
|
||||||
|
|
||||||
if (wmsPoint.Count() == 0)
|
if (endLocations.Count() == 0)
|
||||||
{
|
{
|
||||||
LoggerYCLGLDPJInstock.LogWarning($"【YCLGLDPJInstock】 当前没有空库位可以入库");
|
LoggerYCLGLDPJInstock.LogWarning($"【YCLWXDPJInstock】 当前没有空库位可以入库");
|
||||||
continue;
|
|
||||||
}
|
|
||||||
WmsPointH startPoint = _repository.AsSugarClient().Queryable<WmsPointH>().Where(r => r.location_code == key).First();
|
|
||||||
WmsPointH endPoint = wmsPoint.First();
|
|
||||||
if (endPoint == null)
|
|
||||||
{
|
|
||||||
LoggerYCLGLDPJInstock.LogWarning($"【YCLGLDPJInstock】 起点库位{key}没有维护对应的点位");
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BasLocation endLocation = endLocations.First();
|
||||||
|
|
||||||
//锁定起点库位 更新为空闲
|
//锁定起点库位 更新为空闲
|
||||||
await _repository.AsSugarClient().Updateable<BasLocation>().SetColumns(r => new BasLocation { is_lock = 1, is_use = "0" }).Where(r => r.id == startPoint.location_id).ExecuteCommandAsync();
|
await _repository.AsSugarClient().Updateable<BasLocation>().SetColumns(r => new BasLocation { is_lock = 1, is_use = "0" }).Where(r => r.id == startLocation.id).ExecuteCommandAsync();
|
||||||
//锁定终点库位
|
//锁定终点库位
|
||||||
await _repository.AsSugarClient().Updateable<BasLocation>().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == endPoint.location_id).ExecuteCommandAsync();
|
await _repository.AsSugarClient().Updateable<BasLocation>().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == endLocation.id).ExecuteCommandAsync();
|
||||||
|
|
||||||
List<WmsPointH> points = new List<WmsPointH>();
|
bool result_createPretask = await createPretask(startLocation.id, endLocation.id, "", "", LoggerYCLGLDPJInstock);
|
||||||
points.Add(startPoint);
|
if (!result_createPretask)
|
||||||
points.Add(endPoint);
|
|
||||||
|
|
||||||
Tuple<bool, WmsPretaskH> result_createPretask = await createPretask(points, "", "", LoggerYCLGLDPJInstock);
|
|
||||||
if (!result_createPretask.Item1)
|
|
||||||
{
|
{
|
||||||
LoggerYCLGLDPJInstock.LogWarning($"【YCLGLDPJInstock】 {startPoint.location_code} 到 {endPoint.location_code} 预任务生成失败");
|
LoggerYCLGLDPJInstock.LogWarning($"【YCLWXDPJInstock】 {startLocation.location_code} 到 {endLocation.location_code} 预任务生成失败");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
LoggerYCLGLDPJInstock.LogWarning($"【YCLGLDPJInstock】 {startPoint.location_code} 到 {endPoint.location_code} 预任务生成成功");
|
LoggerYCLGLDPJInstock.LogWarning($"【YCLWXDPJInstock】 {startLocation.location_code} 到 {endLocation.location_code} 预任务生成成功");
|
||||||
|
|
||||||
|
|
||||||
_ = _wareHouseService.GenTaskExecute();
|
_ = _wareHouseService.GenTaskExecute();
|
||||||
@@ -763,7 +833,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
LoggerYCLGLDPJInstock.LogInformation($"【YCLGLDPJInstock】 外协叠盘机空托入库发生异常:{ex}");
|
LoggerYCLGLDPJInstock.LogInformation($"【YCLWXDPJInstock】 外协叠盘机空托入库发生异常:{ex}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -880,6 +950,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
BGWCarrySupplementtimer?.Dispose();
|
BGWCarrySupplementtimer?.Dispose();
|
||||||
YCLGLDPJInstocktimer?.Dispose();
|
YCLGLDPJInstocktimer?.Dispose();
|
||||||
YCLWXDPJInstocktimer?.Dispose();
|
YCLWXDPJInstocktimer?.Dispose();
|
||||||
|
|
||||||
|
SSX7Supplementtimer?.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
#region 二楼上升降机机械臂
|
#region 二楼上升降机机械臂
|
||||||
@@ -1084,16 +1156,15 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
return;
|
return;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
await s_task送空托到上升降区.WaitAsync();
|
||||||
using (var db = _repository.AsSugarClient().CopyNew())
|
using (var db = _repository.AsSugarClient().CopyNew())
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await s_task送空托到上升降区.WaitAsync();
|
|
||||||
// 找到没有绑定料架的且库位未锁定的料架区
|
// 找到没有绑定料架的且库位未锁定的料架区
|
||||||
ISugarQueryable<WmsMechanicalArmH> WmsMechanicalArmHsuagar = db.Queryable<WmsMechanicalArmH>().
|
ISugarQueryable<WmsMechanicalArmH> WmsMechanicalArmHsuagar = db.Queryable<WmsMechanicalArmH>()
|
||||||
InnerJoin<WmsPointH>((a, b) => a.point_id == b.id)
|
.InnerJoin<BasLocation>((a, b) => a.location_id == b.id)
|
||||||
.InnerJoin<BasLocation>((a, b, c) => b.location_id == c.id)
|
.Where((a, b) => string.IsNullOrEmpty(a.rackcode) && b.is_lock == 0 && configs_upMachine.Contains(a.name));
|
||||||
.Where((a, b, c) => string.IsNullOrEmpty(a.rackcode) && c.is_lock == 0 && configs_upMachine.Contains(a.name));
|
|
||||||
|
|
||||||
List<WmsMechanicalArmH> WmsMechanicalArmHs = WmsMechanicalArmHsuagar.ToList();
|
List<WmsMechanicalArmH> WmsMechanicalArmHs = WmsMechanicalArmHsuagar.ToList();
|
||||||
|
|
||||||
@@ -1103,6 +1174,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//await db.BeginTranAsync();
|
||||||
// 料架区
|
// 料架区
|
||||||
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs)
|
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs)
|
||||||
{
|
{
|
||||||
@@ -1123,22 +1195,6 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
|
|
||||||
BasLocation startLocation = rackStartLocations.First();
|
BasLocation startLocation = rackStartLocations.First();
|
||||||
|
|
||||||
List<WmsPointH> startPoints = db.Queryable<WmsPointH>().Where(r => r.location_id == startLocation.id).ToList();
|
|
||||||
|
|
||||||
if (startPoints.Count == 0)
|
|
||||||
{
|
|
||||||
LoggerFloor2RackDelivery.LogError($"【送空托到上升降区】 起始库位{startLocation.location_code}未在点位表维护对应的点位");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<WmsPointH> endPoints = db.Queryable<WmsPointH>().Where(r => r.id == wmsMechanicalArmH.point_id).ToList();
|
|
||||||
|
|
||||||
if (endPoints.Count == 0)
|
|
||||||
{
|
|
||||||
LoggerFloor2RackDelivery.LogError($"【送空托到上升降区】 终点{wmsMechanicalArmH.point_id} {wmsMechanicalArmH.point_code}未在点位表维护对应的点位");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<WmsCarryH> wmsCarryHs = db.Queryable<WmsCarryH>().Where(r => r.location_id == startLocation.id).ToList();
|
List<WmsCarryH> wmsCarryHs = db.Queryable<WmsCarryH>().Where(r => r.location_id == startLocation.id).ToList();
|
||||||
if (wmsCarryHs.Count == 0)
|
if (wmsCarryHs.Count == 0)
|
||||||
{
|
{
|
||||||
@@ -1155,9 +1211,6 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
// 空料架
|
// 空料架
|
||||||
WmsCarryH targetCarry = wmsCarryHs[0];
|
WmsCarryH targetCarry = wmsCarryHs[0];
|
||||||
|
|
||||||
WmsPointH startPoint = startPoints.First();
|
|
||||||
WmsPointH endPoint = endPoints.First();
|
|
||||||
|
|
||||||
await db.Updateable<BasLocation>().SetColumns(r => new BasLocation
|
await db.Updateable<BasLocation>().SetColumns(r => new BasLocation
|
||||||
{
|
{
|
||||||
is_lock = 1
|
is_lock = 1
|
||||||
@@ -1165,25 +1218,24 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
await db.Updateable<BasLocation>().SetColumns(r => new BasLocation
|
await db.Updateable<BasLocation>().SetColumns(r => new BasLocation
|
||||||
{
|
{
|
||||||
is_lock = 1
|
is_lock = 1
|
||||||
}).Where(r => r.id == endPoint.location_id).ExecuteCommandAsync();
|
}).Where(r => r.id == wmsMechanicalArmH.location_id).ExecuteCommandAsync();
|
||||||
|
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【送空托到上升降区】 开始生成预任务 起点{startPoint.point_code} 终点{endPoint.point_code} 料架 {targetCarry.carry_code}");
|
LoggerFloor2RackDelivery.LogInformation($"【送空托到上升降区】 开始生成预任务 起点{startLocation.location_code} 终点{wmsMechanicalArmH.location_code} 料架 {targetCarry.carry_code}");
|
||||||
List<WmsPointH> points = new List<WmsPointH>();
|
|
||||||
points.Add(startPoint);
|
|
||||||
points.Add(endPoint);
|
|
||||||
|
|
||||||
Tuple<bool, WmsPretaskH> result = await createPretask(points, targetCarry.id, targetCarry.carry_code, LoggerFloor2RackDelivery);
|
bool result = await createPretask(startLocation.id, wmsMechanicalArmH.location_id, targetCarry.id, targetCarry.carry_code, LoggerFloor2RackDelivery);
|
||||||
if (!result.Item1)
|
if (!result)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【送空托到上升降区】 未成功生成预任务 起点{startPoint.point_code} 终点{endPoint.point_code} 料架 {targetCarry.carry_code}");
|
LoggerFloor2RackDelivery.LogInformation($"【送空托到上升降区】 未成功生成预任务 起点{startLocation.location_code} 终点{wmsMechanicalArmH.location_code} 料架 {targetCarry.carry_code}");
|
||||||
continue;
|
throw new Exception($"【送空托到上升降区】 未成功生成预任务 起点{startLocation.location_code} 终点{wmsMechanicalArmH.location_code} 料架 {wmsMechanicalArmH.rackcode}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//await db.CommitTranAsync();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
LoggerFloor2RackDelivery.LogInformation($"【送空托到上升降区】 {ex.Message}");
|
||||||
|
LoggerFloor2RackDelivery.LogInformation($"【送空托到上升降区】 {ex.StackTrace}");
|
||||||
|
//await db.RollbackTranAsync();
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@@ -1217,16 +1269,15 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
return;
|
return;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
await s_task送满托到下升降区.WaitAsync();
|
||||||
using (var db = _repository.AsSugarClient().CopyNew())
|
using (var db = _repository.AsSugarClient().CopyNew())
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await s_task送满托到下升降区.WaitAsync();
|
|
||||||
// 找到没有绑定料架的且库位未锁定的料架区
|
// 找到没有绑定料架的且库位未锁定的料架区
|
||||||
ISugarQueryable<WmsMechanicalArmH> WmsMechanicalArmHsuagar = db.Queryable<WmsMechanicalArmH>().
|
ISugarQueryable<WmsMechanicalArmH> WmsMechanicalArmHsuagar = db.Queryable<WmsMechanicalArmH>()
|
||||||
InnerJoin<WmsPointH>((a, b) => a.point_id == b.id)
|
.InnerJoin<BasLocation>((a, b) => a.location_id == b.id)
|
||||||
.InnerJoin<BasLocation>((a, b, c) => b.location_id == c.id)
|
.Where((a, b) => string.IsNullOrEmpty(a.rackcode) && b.is_lock == 0 && configs_upMachine.Contains(a.name));
|
||||||
.Where((a, b, c) => string.IsNullOrEmpty(a.rackcode) && c.is_lock == 0 && configs_upMachine.Contains(a.name));
|
|
||||||
|
|
||||||
List<WmsMechanicalArmH> WmsMechanicalArmHs = WmsMechanicalArmHsuagar.ToList();
|
List<WmsMechanicalArmH> WmsMechanicalArmHs = WmsMechanicalArmHsuagar.ToList();
|
||||||
|
|
||||||
@@ -1236,6 +1287,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//await db.BeginTranAsync();
|
||||||
// 料架区
|
// 料架区
|
||||||
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs)
|
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs)
|
||||||
{
|
{
|
||||||
@@ -1278,22 +1330,6 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
|
|
||||||
BasLocation startLocation = rackStartLocations.First();
|
BasLocation startLocation = rackStartLocations.First();
|
||||||
|
|
||||||
List<WmsPointH> startPoints = db.Queryable<WmsPointH>().Where(r => r.location_id == startLocation.id).ToList();
|
|
||||||
|
|
||||||
if (startPoints.Count == 0)
|
|
||||||
{
|
|
||||||
LoggerFloor2RackDelivery.LogError($"【送满托到下升降区】 起始库位{startLocation.location_code}未在点位表维护对应的点位");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<WmsPointH> endPoints = db.Queryable<WmsPointH>().Where(r => r.id == wmsMechanicalArmH.point_id).ToList();
|
|
||||||
|
|
||||||
if (endPoints.Count == 0)
|
|
||||||
{
|
|
||||||
LoggerFloor2RackDelivery.LogError($"【送满托到下升降区】 终点{wmsMechanicalArmH.point_id} {wmsMechanicalArmH.point_code}未在点位表维护对应的点位");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<WmsCarryH> wmsCarryHs = db.Queryable<WmsCarryH>().Where(r => r.location_id == startLocation.id).ToList();
|
List<WmsCarryH> wmsCarryHs = db.Queryable<WmsCarryH>().Where(r => r.location_id == startLocation.id).ToList();
|
||||||
if (wmsCarryHs.Count == 0)
|
if (wmsCarryHs.Count == 0)
|
||||||
{
|
{
|
||||||
@@ -1310,9 +1346,6 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
// 满料架
|
// 满料架
|
||||||
WmsCarryH targetCarry = wmsCarryHs[0];
|
WmsCarryH targetCarry = wmsCarryHs[0];
|
||||||
|
|
||||||
WmsPointH startPoint = startPoints.First();
|
|
||||||
WmsPointH endPoint = endPoints.First();
|
|
||||||
|
|
||||||
await db.Updateable<BasLocation>().SetColumns(r => new BasLocation
|
await db.Updateable<BasLocation>().SetColumns(r => new BasLocation
|
||||||
{
|
{
|
||||||
is_lock = 1
|
is_lock = 1
|
||||||
@@ -1321,23 +1354,24 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
await db.Updateable<BasLocation>().SetColumns(r => new BasLocation
|
await db.Updateable<BasLocation>().SetColumns(r => new BasLocation
|
||||||
{
|
{
|
||||||
is_lock = 1
|
is_lock = 1
|
||||||
}).Where(r => r.id == endPoint.location_id).ExecuteCommandAsync();
|
}).Where(r => r.id == wmsMechanicalArmH.location_id).ExecuteCommandAsync();
|
||||||
|
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【送满托到下升降区】 开始生成预任务 起点{startPoint.point_code} 终点{endPoint.point_code} 料架 {targetCarry.carry_code}");
|
LoggerFloor2RackDelivery.LogInformation($"【送满托到下升降区】 开始生成预任务 起点{startLocation.location_code} 终点{wmsMechanicalArmH.location_code} 料架 {targetCarry.carry_code}");
|
||||||
List<WmsPointH> points = new List<WmsPointH>();
|
|
||||||
points.Add(startPoint);
|
|
||||||
points.Add(endPoint);
|
|
||||||
|
|
||||||
Tuple<bool, WmsPretaskH> result = await createPretask(points, targetCarry.id, targetCarry.carry_code, LoggerFloor2RackDelivery);
|
bool result = await createPretask(startLocation.id, wmsMechanicalArmH.location_id, targetCarry.id, targetCarry.carry_code, LoggerFloor2RackDelivery);
|
||||||
if (!result.Item1)
|
if (!result)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【送满托到下升降区】 未成功生成预任务 起点{startPoint.point_code} 终点{endPoint.point_code} 料架 {targetCarry.carry_code}");
|
LoggerFloor2RackDelivery.LogInformation($"【送满托到下升降区】 未成功生成预任务 起点{startLocation.location_code} 终点{wmsMechanicalArmH.location_code} 料架 {targetCarry.carry_code}");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//await db.CommitTranAsync();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
LoggerFloor2RackDelivery.LogInformation($"【送满托到下升降区】 {ex.Message}");
|
||||||
|
LoggerFloor2RackDelivery.LogInformation($"【送满托到下升降区】 {ex.StackTrace}");
|
||||||
|
//await db.RollbackTranAsync();
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@@ -1372,36 +1406,26 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
return;
|
return;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
await s_task移走上升降区未生成预任务且满托的料架.WaitAsync();
|
||||||
using (var db = _repository.AsSugarClient().CopyNew())
|
using (var db = _repository.AsSugarClient().CopyNew())
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await s_task移走上升降区未生成预任务且满托的料架.WaitAsync();
|
|
||||||
|
//await db.BeginTranAsync();
|
||||||
// 读取上升降机的左右料架区配置
|
// 读取上升降机的左右料架区配置
|
||||||
|
|
||||||
List<WmsMechanicalArmH> WmsMechanicalArmHs = db.Queryable<WmsMechanicalArmH>().Where(r => r.stackingcount == r.maxnum && r.maxnum != 0 && !string.IsNullOrEmpty(r.rackcode) && r.iscreatepretask == 0 && configs_upMachine.Contains(r.name) && r.mechanicalconfirm == 1).ToList();
|
List<WmsMechanicalArmH> WmsMechanicalArmHs = db.Queryable<WmsMechanicalArmH>().Where(r => r.stackingcount == r.maxnum && r.maxnum != 0 && !string.IsNullOrEmpty(r.rackcode) && r.iscreatepretask == 0 && configs_upMachine.Contains(r.name) && r.mechanicalconfirm == 1).ToList();
|
||||||
|
|
||||||
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs)
|
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【移走上升降区满托的料架】 开始执行预任务生成 {wmsMechanicalArmH.point_code} {wmsMechanicalArmH.outbill} {wmsMechanicalArmH.barcodes}");
|
LoggerFloor2RackDelivery.LogInformation($"【移走上升降区满托的料架】 开始执行预任务生成 {wmsMechanicalArmH.location_code} {wmsMechanicalArmH.outbill} {wmsMechanicalArmH.barcodes}");
|
||||||
|
|
||||||
await db.Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
|
await db.Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
|
||||||
{
|
{
|
||||||
iscreatepretask = 1
|
iscreatepretask = 1
|
||||||
}).Where(r => r.id == wmsMechanicalArmH.id).ExecuteCommandAsync();
|
}).Where(r => r.id == wmsMechanicalArmH.id).ExecuteCommandAsync();
|
||||||
|
|
||||||
List<WmsPointH> points = new List<WmsPointH>();
|
|
||||||
|
|
||||||
List<WmsPointH> startPoints = db.Queryable<WmsPointH>().Where(r => r.id == wmsMechanicalArmH.point_id).ToList();
|
|
||||||
|
|
||||||
if (startPoints.Count == 0)
|
|
||||||
{
|
|
||||||
LoggerFloor2RackDelivery.LogError($"【移走上升降区满托的料架】 起点{wmsMechanicalArmH.point_id} {wmsMechanicalArmH.point_code}未在点位表维护对应的点位");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
WmsPointH startPoint = startPoints.First();
|
|
||||||
points.Add(startPoint);
|
|
||||||
|
|
||||||
// 找到未占用且未锁定的库位
|
// 找到未占用且未锁定的库位
|
||||||
ISugarQueryable<BasLocation> rackEndLocations =
|
ISugarQueryable<BasLocation> rackEndLocations =
|
||||||
@@ -1416,17 +1440,6 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
|
|
||||||
BasLocation endLocation = rackEndLocations.First();
|
BasLocation endLocation = rackEndLocations.First();
|
||||||
|
|
||||||
List<WmsPointH> endPoints = db.Queryable<WmsPointH>().Where(r => r.location_id == endLocation.id).ToList();
|
|
||||||
|
|
||||||
if (endPoints.Count == 0)
|
|
||||||
{
|
|
||||||
LoggerFloor2RackDelivery.LogError($"【移走上升降区满托的料架】 终点库位{endLocation.location_code}未在点位表维护对应的点位");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
WmsPointH endPoint = endPoints.First();
|
|
||||||
points.Add(endPoint);
|
|
||||||
|
|
||||||
// 锁住终点库位
|
// 锁住终点库位
|
||||||
await db.Updateable<BasLocation>(r => new BasLocation
|
await db.Updateable<BasLocation>(r => new BasLocation
|
||||||
{
|
{
|
||||||
@@ -1435,17 +1448,23 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
|
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【移走上升降区满托的料架】 开始执行预任务生成: 料架区为{wmsMechanicalArmH.name}{wmsMechanicalArmH.stackingposition} 料架为{wmsMechanicalArmH.rackcode}");
|
LoggerFloor2RackDelivery.LogInformation($"【移走上升降区满托的料架】 开始执行预任务生成: 料架区为{wmsMechanicalArmH.name}{wmsMechanicalArmH.stackingposition} 料架为{wmsMechanicalArmH.rackcode}");
|
||||||
|
|
||||||
Tuple<bool, WmsPretaskH> result = await createPretask(points, wmsMechanicalArmH.rackid, wmsMechanicalArmH.rackcode, LoggerFloor2RackDelivery);
|
|
||||||
if (!result.Item1)
|
bool result = await createPretask(wmsMechanicalArmH.location_id, endLocation.id, wmsMechanicalArmH.rackid, wmsMechanicalArmH.rackcode, LoggerFloor2RackDelivery);
|
||||||
|
if (!result)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【移走上升降区满托的料架】 未成功生成预任务 起点{startPoint.point_code} 终点{endPoint.point_code} 料架 {wmsMechanicalArmH.rackcode}");
|
LoggerFloor2RackDelivery.LogError($"【移走上升降区满托的料架】 未成功生成预任务 起点{wmsMechanicalArmH.location_code} 终点{endLocation.location_code} 料架 {wmsMechanicalArmH.rackcode}");
|
||||||
continue;
|
throw new Exception($"【移走上升降区满托的料架】 未成功生成预任务 起点{wmsMechanicalArmH.location_code} 终点{endLocation.location_code} 料架 {wmsMechanicalArmH.rackcode}");
|
||||||
}
|
}
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【移走上升降区满托的料架】 成功生成预任务 {result.Item2}");
|
LoggerFloor2RackDelivery.LogInformation($"【移走上升降区满托的料架】 成功生成预任务 {result}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//await db.CommitTranAsync();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
LoggerFloor2RackDelivery.LogInformation($"【移走上升降区未生成预任务且满托的料架】 {ex.Message}");
|
||||||
|
LoggerFloor2RackDelivery.LogInformation($"【移走上升降区未生成预任务且满托的料架】 {ex.StackTrace}");
|
||||||
|
//await db.RollbackTranAsync();
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@@ -1480,38 +1499,26 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
if (configs_upMachine.Count == 0)
|
if (configs_upMachine.Count == 0)
|
||||||
return;
|
return;
|
||||||
#endregion
|
#endregion
|
||||||
|
await s_task移走下升降区未生成预任务且空托的料架.WaitAsync();
|
||||||
using (var db = _repository.AsSugarClient().CopyNew())
|
using (var db = _repository.AsSugarClient().CopyNew())
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await s_task移走下升降区未生成预任务且空托的料架.WaitAsync();
|
|
||||||
|
|
||||||
|
//await db.BeginTranAsync();
|
||||||
// 读取下升降机的左右料架区配置
|
// 读取下升降机的左右料架区配置
|
||||||
|
|
||||||
List<WmsMechanicalArmH> WmsMechanicalArmHs = db.Queryable<WmsMechanicalArmH>().Where(r => !string.IsNullOrEmpty(r.rackcode) && r.iscreatepretask == 0 && configs_upMachine.Contains(r.name)).ToList();
|
List<WmsMechanicalArmH> WmsMechanicalArmHs = db.Queryable<WmsMechanicalArmH>().Where(r => !string.IsNullOrEmpty(r.rackcode) && r.iscreatepretask == 0 && configs_upMachine.Contains(r.name)).ToList();
|
||||||
|
|
||||||
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs)
|
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 开始执行预任务生成 {wmsMechanicalArmH.point_code} {wmsMechanicalArmH.outbill} {wmsMechanicalArmH.barcodes}");
|
LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 开始执行预任务生成 {wmsMechanicalArmH.location_code} {wmsMechanicalArmH.outbill} {wmsMechanicalArmH.barcodes}");
|
||||||
|
|
||||||
await db.Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
|
await db.Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
|
||||||
{
|
{
|
||||||
iscreatepretask = 1
|
iscreatepretask = 1
|
||||||
}).Where(r => r.id == wmsMechanicalArmH.id).ExecuteCommandAsync();
|
}).Where(r => r.id == wmsMechanicalArmH.id).ExecuteCommandAsync();
|
||||||
|
|
||||||
List<WmsPointH> points = new List<WmsPointH>();
|
|
||||||
|
|
||||||
List<WmsPointH> startPoints = db.Queryable<WmsPointH>().Where(r => r.id == wmsMechanicalArmH.point_id).ToList();
|
|
||||||
|
|
||||||
if (startPoints.Count == 0)
|
|
||||||
{
|
|
||||||
LoggerFloor2RackDelivery.LogError($"【移走下升降区空托的料架】 起点{wmsMechanicalArmH.point_id} {wmsMechanicalArmH.point_code}未在点位表维护对应的点位");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
WmsPointH startPoint = startPoints.First();
|
|
||||||
points.Add(startPoint);
|
|
||||||
|
|
||||||
// 找到未占用且未锁定的库位
|
// 找到未占用且未锁定的库位
|
||||||
ISugarQueryable<BasLocation> rackEndLocations =
|
ISugarQueryable<BasLocation> rackEndLocations =
|
||||||
db.Queryable<BasLocation>()
|
db.Queryable<BasLocation>()
|
||||||
@@ -1525,17 +1532,6 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
|
|
||||||
BasLocation endLocation = rackEndLocations.First();
|
BasLocation endLocation = rackEndLocations.First();
|
||||||
|
|
||||||
List<WmsPointH> endPoints = db.Queryable<WmsPointH>().Where(r => r.location_id == endLocation.id).ToList();
|
|
||||||
|
|
||||||
if (endPoints.Count == 0)
|
|
||||||
{
|
|
||||||
LoggerFloor2RackDelivery.LogError($"【移走下升降区空托的料架】 终点库位{endLocation.location_code}未在点位表维护对应的点位");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
WmsPointH endPoint = endPoints.First();
|
|
||||||
points.Add(endPoint);
|
|
||||||
|
|
||||||
// 解除绑定料箱到料架
|
// 解除绑定料箱到料架
|
||||||
CarryBindFloor2UpDownMachineInput carryBindFloor2UpDownMachineInput = new() { };
|
CarryBindFloor2UpDownMachineInput carryBindFloor2UpDownMachineInput = new() { };
|
||||||
carryBindFloor2UpDownMachineInput.carry_id = wmsMechanicalArmH.rackid;
|
carryBindFloor2UpDownMachineInput.carry_id = wmsMechanicalArmH.rackid;
|
||||||
@@ -1551,18 +1547,20 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
|
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 开始执行预任务生成: 料架区为{wmsMechanicalArmH.name}{wmsMechanicalArmH.stackingposition} 料架为{wmsMechanicalArmH.rackcode}");
|
LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 开始执行预任务生成: 料架区为{wmsMechanicalArmH.name}{wmsMechanicalArmH.stackingposition} 料架为{wmsMechanicalArmH.rackcode}");
|
||||||
|
|
||||||
Tuple<bool, WmsPretaskH> result = await createPretask(points, wmsMechanicalArmH.rackid, wmsMechanicalArmH.rackcode, LoggerFloor2RackDelivery);
|
bool result = await createPretask(wmsMechanicalArmH.location_id, endLocation.id, wmsMechanicalArmH.rackid, wmsMechanicalArmH.rackcode, LoggerFloor2RackDelivery);
|
||||||
if (!result.Item1)
|
if (!result)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 未成功生成预任务 起点{startPoint.point_code} 终点{endPoint.point_code} 料架 {wmsMechanicalArmH.rackcode}");
|
LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 未成功生成预任务 起点{wmsMechanicalArmH.location_code} 终点{endLocation.location_code} 料架 {wmsMechanicalArmH.rackcode}");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//await db.CommitTranAsync();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogError(ex.ToString());
|
LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 {ex.Message}");
|
||||||
LoggerFloor2RackDelivery.LogError(ex.StackTrace);
|
LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 {ex.StackTrace}");
|
||||||
|
//await db.RollbackTranAsync();
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@@ -1573,57 +1571,27 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 上下升降机生成预任务(补充料架、上升降机取货到料架、上升降机满托运走,下升降机拿货到输送线、下升降机空托运走)
|
// 上下升降机生成预任务(补充料架、上升降机取货到料架、上升降机满托运走,下升降机拿货到输送线、下升降机空托运走)
|
||||||
private async Task<Tuple<bool, WmsPretaskH>> createPretask(List<WmsPointH> points, string carry_id, string carry_code, ILogger logger)
|
private async Task<bool> createPretask(string startlocation_id, string endlocation_id, string carry_id, string carry_code, ILogger logger)
|
||||||
{
|
{
|
||||||
//根据获取的路径点生成预任务,生成顺序必须预路径算法返回的起终点的顺序一致(预任务顺序)
|
CommonCreatePretaskInput commonCreatePretaskInput = new CommonCreatePretaskInput();
|
||||||
WmsPretaskH preTask = null;
|
commonCreatePretaskInput.startlocation_id = startlocation_id;
|
||||||
string bill_code = _billRullService.GetBillNumber(WmsWareHouseConst.WMS_PRETASK_H_ENCODE).GetAwaiter().GetResult();
|
commonCreatePretaskInput.endlocation_id = endlocation_id;
|
||||||
List<WmsPretaskH> preTasks = points.Where(it => !it.location_id.IsNullOrEmpty()).GroupBy(g => g.area_code).Select(it =>
|
commonCreatePretaskInput.carry_id = carry_id;
|
||||||
{
|
commonCreatePretaskInput.carry_code = carry_code;
|
||||||
WmsPointH? sPoint = it.FirstOrDefault();
|
commonCreatePretaskInput.task_type = WmsWareHouseConst.BIZTYPE_WMSTRANSFER_ID;
|
||||||
WmsPointH? ePoint = it.LastOrDefault();
|
commonCreatePretaskInput.biz_type = "";
|
||||||
|
commonCreatePretaskInput.require_id = "";
|
||||||
|
commonCreatePretaskInput.isExcuteMission = false;
|
||||||
|
|
||||||
preTask = new()
|
logger.LogInformation($"开始执行 GenPreTask {JsonConvert.SerializeObject(commonCreatePretaskInput)}");
|
||||||
|
var res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput);
|
||||||
|
if (res.code == JNPF.Common.Enums.HttpStatusCode.OK)
|
||||||
{
|
{
|
||||||
org_id = "",
|
logger.LogInformation($"GenPreTask 结果 {JsonConvert.SerializeObject(res)}");
|
||||||
startlocation_id = sPoint?.location_id!,
|
return true;
|
||||||
startlocation_code = sPoint?.location_code!,
|
|
||||||
endlocation_id = ePoint?.location_id!,
|
|
||||||
endlocation_code = ePoint?.location_code!,
|
|
||||||
start_floor = sPoint?.floor.ToString(),
|
|
||||||
end_floor = ePoint?.floor.ToString(),
|
|
||||||
startpoint_id = sPoint?.id!,
|
|
||||||
startpoint_code = sPoint?.point_code!,
|
|
||||||
endpoint_id = ePoint?.id!,
|
|
||||||
endpoint_code = ePoint?.point_code!,
|
|
||||||
bill_code = bill_code,
|
|
||||||
status = WmsWareHouseConst.PRETASK_BILL_STATUS_DXF_ID,
|
|
||||||
biz_type = "",
|
|
||||||
task_type = "",
|
|
||||||
carry_id = carry_id,
|
|
||||||
carry_code = carry_code,
|
|
||||||
area_id = sPoint?.area_id!,
|
|
||||||
area_code = it.Key,
|
|
||||||
require_id = "",
|
|
||||||
require_code = "",
|
|
||||||
create_id = "",
|
|
||||||
create_time = DateTime.Now
|
|
||||||
};
|
|
||||||
|
|
||||||
return preTask;
|
|
||||||
}).ToList();
|
|
||||||
//更新页面
|
|
||||||
//赋值签收状态
|
|
||||||
|
|
||||||
LoggerFloor2RackDelivery.LogInformation($"开始执行 GenPreTask {JsonConvert.SerializeObject(preTasks)}");
|
|
||||||
bool result = await _wareHouseService.GenPreTask(preTasks, null!);
|
|
||||||
LoggerFloor2RackDelivery.LogInformation($"GenPreTask 结果 {result}");
|
|
||||||
if (result)
|
|
||||||
{
|
|
||||||
LoggerFloor2RackDelivery.LogInformation($"成功生成预任务:{preTasks.First().bill_code}");
|
|
||||||
return new Tuple<bool, WmsPretaskH>(true, preTask);
|
|
||||||
}
|
}
|
||||||
return new Tuple<bool, WmsPretaskH>(false, null);
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<T> Floor2UpDownMachinecode_GetTag<T>(string tag)
|
private async Task<T> Floor2UpDownMachinecode_GetTag<T>(string tag)
|
||||||
@@ -1634,26 +1602,26 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
|
|
||||||
private async Task<bool> Floor2UpDownMachinecode_SetTag(string tag, string value)
|
private async Task<bool> Floor2UpDownMachinecode_SetTag(string tag, string value)
|
||||||
{
|
{
|
||||||
string DevName = "东面提升机输送线";
|
//string DevName = "东面提升机输送线";
|
||||||
Dictionary<string, string> dicCommand = new(StringComparer.OrdinalIgnoreCase)
|
//Dictionary<string, string> dicCommand = new(StringComparer.OrdinalIgnoreCase)
|
||||||
{
|
//{
|
||||||
["DevName"] = DevName,
|
// ["DevName"] = DevName,
|
||||||
["token"] = _eleCtlCfg.token,
|
// ["token"] = _eleCtlCfg.token,
|
||||||
["TagName"] = tag,
|
// ["TagName"] = tag,
|
||||||
["Value"] = value,
|
// ["Value"] = value,
|
||||||
};
|
//};
|
||||||
string result = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand);
|
//string result = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand);
|
||||||
|
|
||||||
return result.Contains("Ok");
|
//return result.Contains("Ok");
|
||||||
|
|
||||||
// 测试
|
// 测试
|
||||||
//string DevName = "东面提升机输送线";
|
string DevName = "东面提升机输送线";
|
||||||
|
|
||||||
//JObject valueJson = new JObject();
|
JObject valueJson = new JObject();
|
||||||
//valueJson["Value"] = value;
|
valueJson["Value"] = value;
|
||||||
|
|
||||||
//bool res = await _redisData.HSet(DevName, tag, valueJson.ToString());
|
bool res = await _redisData.HSet(DevName, tag, valueJson.ToString());
|
||||||
//return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@@ -1674,13 +1642,17 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
//YCLWXDPJInstocktimer = new Timer(YCLWXDPJInstock, null, TimeSpan.Zero, TimeSpan.FromSeconds(100000));
|
//YCLWXDPJInstocktimer = new Timer(YCLWXDPJInstock, null, TimeSpan.Zero, TimeSpan.FromSeconds(100000));
|
||||||
|
|
||||||
// 二楼上升降机
|
// 二楼上升降机
|
||||||
Floor2UpMachinecodetimer = new Timer(Floor2UpMachinecode, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
|
Floor2UpMachinecodetimer = new Timer(Floor2UpMachinecode, null, TimeSpan.Zero, TimeSpan.FromSeconds(1));
|
||||||
|
|
||||||
// 二楼料架配送
|
// 二楼料架配送
|
||||||
Floor2timer送空托到上升降区 = new Timer(送空托到上升降区, null, TimeSpan.Zero, TimeSpan.FromSeconds(60));
|
Floor2timer送空托到上升降区 = new Timer(送空托到上升降区, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
|
||||||
Floor2timer送满托到下升降区 = new Timer(送满托到下升降区, null, TimeSpan.Zero, TimeSpan.FromSeconds(60));
|
Floor2timer送满托到下升降区 = new Timer(送满托到下升降区, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
|
||||||
Floor2timer移走上升降区未生成预任务且满托的料架 = new Timer(移走上升降区未生成预任务且满托的料架, null, TimeSpan.Zero, TimeSpan.FromSeconds(60));
|
Floor2timer移走上升降区未生成预任务且满托的料架 = new Timer(移走上升降区未生成预任务且满托的料架, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
|
||||||
Floor2timer移走下升降区未生成预任务且空托的料架 = new Timer(移走下升降区未生成预任务且空托的料架, null, TimeSpan.Zero, TimeSpan.FromSeconds(60));
|
Floor2timer移走下升降区未生成预任务且空托的料架 = new Timer(移走下升降区未生成预任务且空托的料架, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
|
||||||
|
|
||||||
|
BGWCarrySupplementtimer = new Timer(BGWCarrySupplement, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
|
||||||
|
// 7号线补充空料箱
|
||||||
|
SSX7Supplementtimer = new Timer(SSX7Supplement, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
|
||||||
|
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,6 +38,11 @@ namespace Tnb.WarehouseMgr.Entities.Dto.Inputs
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public bool isExcuteMission { get; set; } = true;
|
public bool isExcuteMission { get; set; } = true;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否变更载具位置为任务起点
|
||||||
|
/// </summary>
|
||||||
|
public bool isChangeCarryLoc2StartLoc { get; set; } = true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,14 +66,14 @@ public partial class WmsMechanicalArmH : BaseEntity<string>
|
|||||||
public string? rackcode { get; set; }
|
public string? rackcode { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 点位id
|
/// 库位id
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string? point_id { get; set; }
|
public string? location_id { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 点位编号
|
/// 库位编号
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string? point_code { get; set; }
|
public string? location_code { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 取放货确认
|
/// 取放货确认
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
using JNPF.Common.Dtos.VisualDev;
|
||||||
|
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
||||||
|
|
||||||
namespace Tnb.WarehouseMgr.Interfaces
|
namespace Tnb.WarehouseMgr.Interfaces
|
||||||
{
|
{
|
||||||
@@ -13,5 +14,7 @@ namespace Tnb.WarehouseMgr.Interfaces
|
|||||||
/// <param name="input"></param>
|
/// <param name="input"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<dynamic> MESEmptyCarryOutStk(MESEmptyCarryOutStkInput input);
|
Task<dynamic> MESEmptyCarryOutStk(MESEmptyCarryOutStkInput input);
|
||||||
|
|
||||||
|
Task<dynamic> WmsEmptyOut(VisualDevModelDataCrInput input);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,6 +48,16 @@ namespace Tnb.WarehouseMgr
|
|||||||
|
|
||||||
s_elevatorMap = await context.Queryable<WmsElevatorH>().ToDictionaryAsync(x => x.elevator_id, x => x.elevator_code);
|
s_elevatorMap = await context.Queryable<WmsElevatorH>().ToDictionaryAsync(x => x.elevator_id, x => x.elevator_code);
|
||||||
|
|
||||||
|
|
||||||
|
if (s_eleUseStatusDic.Count < 1)
|
||||||
|
{
|
||||||
|
foreach (var (k, _) in s_elevatorMap)
|
||||||
|
{
|
||||||
|
s_eleUseStatusDic[k] = 0;
|
||||||
|
s_loadedStatusDic[k] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
//public static Task InitializationTask => initializationTask.Value;
|
//public static Task InitializationTask => initializationTask.Value;
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,6 @@ namespace Tnb.WarehouseMgr
|
|||||||
private readonly IElevatorControlService _elevatorControlService;
|
private readonly IElevatorControlService _elevatorControlService;
|
||||||
private readonly ElevatorControlConfiguration _eleCtlCfg = App.Configuration.Build<ElevatorControlConfiguration>();
|
private readonly ElevatorControlConfiguration _eleCtlCfg = App.Configuration.Build<ElevatorControlConfiguration>();
|
||||||
private readonly ILoggerFactory _loggerFactory;
|
private readonly ILoggerFactory _loggerFactory;
|
||||||
public static Dictionary<string, int> s_eleUseStatusDic = new();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -63,14 +62,6 @@ namespace Tnb.WarehouseMgr
|
|||||||
_eventPublisher = eventPublisher;
|
_eventPublisher = eventPublisher;
|
||||||
_userManager = userManger;
|
_userManager = userManger;
|
||||||
_elevatorControlService = elevatorControlService;
|
_elevatorControlService = elevatorControlService;
|
||||||
if (s_eleUseStatusDic.Count < 1)
|
|
||||||
{
|
|
||||||
foreach (var (k, _) in s_elevatorMap)
|
|
||||||
{
|
|
||||||
s_eleUseStatusDic[k] = 0;
|
|
||||||
s_loadedStatusDic[k] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -146,7 +137,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
var tags = _eleCtlCfg.tags;
|
var tags = _eleCtlCfg.tags;
|
||||||
await Task.Delay(1000);
|
await Task.Delay(1000);
|
||||||
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None);
|
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None);
|
||||||
Logger.Information($"【LoadConfirm】 电梯当前状态->系统状态:{sysStatus.ToEnum<EnumSysStatus>()},运行状态:{runStatus.ToEnum<EnumRunStatus>()},Agv状态:{agvStatus.ToEnum<EnumAgvStatus>()},当前楼层:{floorNo}");
|
Logger.Information($"【LoadConfirm】 电梯当前状态->系统状态:{sysStatus.ToEnum<EnumSysStatus>()},运行状态:{runStatus.ToEnum<EnumRunStatus>()},Agv状态:{agvStatus.ToEnum<EnumAgvStatus>()},当前楼层:{floorNo},电梯占用状态{s_eleUseStatusDic[elevator.device_id]}");
|
||||||
{
|
{
|
||||||
var curFloor = await GetRealFloor(elevator.end_floor);
|
var curFloor = await GetRealFloor(elevator.end_floor);
|
||||||
/* Logger.Information($"目标楼层:{curFloor},电梯当前楼层:{floorNo}");
|
/* Logger.Information($"目标楼层:{curFloor},电梯当前楼层:{floorNo}");
|
||||||
|
|||||||
@@ -202,7 +202,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await GetElevatorStatus(devName, CancellationToken.None);//elevator.elevator_code
|
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await GetElevatorStatus(devName, CancellationToken.None);//elevator.elevator_code
|
||||||
Logger.Information($"【UnloadConfirm】 电梯当前状态->系统状态:{sysStatus.ToEnum<EnumSysStatus>()},运行状态:{runStatus},门状态:{doorStatus},Agv状态:{agvStatus},当前楼层:{floorNo}");
|
Logger.Information($"【SendOpenCloseCmd】 电梯当前状态->系统状态:{sysStatus.ToEnum<EnumSysStatus>()},运行状态:{runStatus},门状态:{doorStatus},Agv状态:{agvStatus},当前楼层:{floorNo}");
|
||||||
//判断Agv电梯是否进入状态
|
//判断Agv电梯是否进入状态
|
||||||
if (agvStatus != (int)EnumAgvStatus.AGV运行状态)
|
if (agvStatus != (int)EnumAgvStatus.AGV运行状态)
|
||||||
_ = await WriteTagAsync(devName, ElevatorConsts.AGVControl, 1);
|
_ = await WriteTagAsync(devName, ElevatorConsts.AGVControl, 1);
|
||||||
|
|||||||
@@ -561,6 +561,11 @@ namespace Tnb.WarehouseMgr
|
|||||||
// 二楼下升降区料架区点位
|
// 二楼下升降区料架区点位
|
||||||
rackAreaPointsDown.Add("AX01");
|
rackAreaPointsDown.Add("AX01");
|
||||||
rackAreaPointsDown.Add("AX02");
|
rackAreaPointsDown.Add("AX02");
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
await _db.Ado.BeginTranAsync();
|
||||||
|
|
||||||
if (disTask.area_code == "E")
|
if (disTask.area_code == "E")
|
||||||
{
|
{
|
||||||
Logger.Information($"【二楼机械臂Floor2MechanicalComplete】收到到货完成信号 传入参数: {disTask.bill_code} {action}");
|
Logger.Information($"【二楼机械臂Floor2MechanicalComplete】收到到货完成信号 传入参数: {disTask.bill_code} {action}");
|
||||||
@@ -571,7 +576,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
// 去料架区放货
|
// 去料架区放货
|
||||||
if (rackAreaPointsUp.Contains(disTask.endlocation_code) || rackAreaPointsDown.Contains(disTask.endlocation_code))
|
if (rackAreaPointsUp.Contains(disTask.endlocation_code) || rackAreaPointsDown.Contains(disTask.endlocation_code))
|
||||||
{
|
{
|
||||||
ISugarQueryable<WmsMechanicalArmH> WmsMechanicalArmHs = db.Queryable<WmsMechanicalArmH>().Where(r => r.point_code == disTask.endpoint_code);
|
ISugarQueryable<WmsMechanicalArmH> WmsMechanicalArmHs = db.Queryable<WmsMechanicalArmH>().Where(r => r.location_code == disTask.endlocation_code);
|
||||||
if (WmsMechanicalArmHs.Count() == 0)
|
if (WmsMechanicalArmHs.Count() == 0)
|
||||||
{
|
{
|
||||||
Logger.Information($"【二楼机械臂Floor2MechanicalComplete】 任务执行终点{disTask.endpoint_code} 与料架区的点位不匹配");
|
Logger.Information($"【二楼机械臂Floor2MechanicalComplete】 任务执行终点{disTask.endpoint_code} 与料架区的点位不匹配");
|
||||||
@@ -624,6 +629,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
Logger.LogInformation($@"【送满托到下升降区】 料架{target.rackid}下的料箱生成预任务失败");
|
Logger.LogInformation($@"【送满托到下升降区】 料架{target.rackid}下的料箱生成预任务失败");
|
||||||
|
throw new Exception($@"【送满托到下升降区】 料架{target.rackid}下的料箱生成预任务失败");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -652,7 +658,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
else // 去料架区取货
|
else // 去料架区取货
|
||||||
{
|
{
|
||||||
ISugarQueryable<WmsMechanicalArmH> WmsMechanicalArmHs = db.Queryable<WmsMechanicalArmH>().Where(r => r.point_code == disTask.startpoint_code);
|
ISugarQueryable<WmsMechanicalArmH> WmsMechanicalArmHs = db.Queryable<WmsMechanicalArmH>().Where(r => r.location_code == disTask.startlocation_code);
|
||||||
if (WmsMechanicalArmHs.Count() == 0)
|
if (WmsMechanicalArmHs.Count() == 0)
|
||||||
{
|
{
|
||||||
Logger.Information($"【二楼机械臂Floor2MechanicalComplete】 任务执行起点{disTask.endpoint_code} 与料架区的点位不匹配");
|
Logger.Information($"【二楼机械臂Floor2MechanicalComplete】 任务执行起点{disTask.endpoint_code} 与料架区的点位不匹配");
|
||||||
@@ -702,31 +708,40 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await _db.Ado.CommitTranAsync();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
await _db.Ado.RollbackTranAsync();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private async Task<bool> Floor2UpDownMachinecode_SetTag(string tag, string value)
|
private async Task<bool> Floor2UpDownMachinecode_SetTag(string tag, string value)
|
||||||
{
|
{
|
||||||
string DevName = "东面提升机输送线";
|
//string DevName = "东面提升机输送线";
|
||||||
Dictionary<string, string> dicCommand = new(StringComparer.OrdinalIgnoreCase)
|
//Dictionary<string, string> dicCommand = new(StringComparer.OrdinalIgnoreCase)
|
||||||
{
|
//{
|
||||||
["DevName"] = DevName,
|
// ["DevName"] = DevName,
|
||||||
["token"] = _eleCtlCfg.token,
|
// ["token"] = _eleCtlCfg.token,
|
||||||
["TagName"] = tag,
|
// ["TagName"] = tag,
|
||||||
["Value"] = value,
|
// ["Value"] = value,
|
||||||
};
|
//};
|
||||||
string result = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand);
|
//string result = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand);
|
||||||
|
|
||||||
return result.Contains("Ok");
|
//return result.Contains("Ok");
|
||||||
|
|
||||||
// 测试
|
// 测试
|
||||||
//string DevName = "东面提升机输送线";
|
string DevName = "东面提升机输送线";
|
||||||
|
|
||||||
//JObject valueJson = new JObject();
|
JObject valueJson = new JObject();
|
||||||
//valueJson["Value"] = value;
|
valueJson["Value"] = value;
|
||||||
|
|
||||||
//bool res = await _redisData.HSet(DevName, tag, valueJson.ToString());
|
bool res = await _redisData.HSet(DevName, tag, valueJson.ToString());
|
||||||
//return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -736,7 +751,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task GenTaskExecute()
|
public async Task GenTaskExecute()
|
||||||
{
|
{
|
||||||
CTUTaskExecute();
|
await CTUTaskExecute();
|
||||||
await s_taskExecuteSemaphore.WaitAsync();
|
await s_taskExecuteSemaphore.WaitAsync();
|
||||||
|
|
||||||
Stopwatch sw = Stopwatch.StartNew();
|
Stopwatch sw = Stopwatch.StartNew();
|
||||||
@@ -749,10 +764,12 @@ namespace Tnb.WarehouseMgr
|
|||||||
Logger.Information("【GenTaskExecute】 开始获取未下发的预任务...");
|
Logger.Information("【GenTaskExecute】 开始获取未下发的预任务...");
|
||||||
|
|
||||||
ISugarQueryable<WmsPretaskH> sugarQueryable = db.Queryable<WmsPretaskH>()
|
ISugarQueryable<WmsPretaskH> sugarQueryable = db.Queryable<WmsPretaskH>()
|
||||||
.LeftJoin<WmsCarryH>((a, b) => a.startlocation_id == b.location_id && a.carry_id == b.id)
|
.LeftJoin<WmsCarryH>((a, b) => a.carry_id == b.id)
|
||||||
.InnerJoin<WmsAreaH>((a, b, c) => a.area_id == c.id)
|
.InnerJoin<WmsAreaH>((a, b, c) => a.area_id == c.id)
|
||||||
.InnerJoin<BasLocation>((a, b, c, d) => a.endlocation_id == d.id && d.is_use == "0")
|
.InnerJoin<BasLocation>((a, b, c, d) => a.endlocation_id == d.id && d.is_use == "0")
|
||||||
.Where(a => a.status == WmsWareHouseConst.PRETASK_BILL_STATUS_DXF_ID && !string.IsNullOrWhiteSpace(a.startlocation_id))
|
.Where((a, b) => a.status == WmsWareHouseConst.PRETASK_BILL_STATUS_DXF_ID && !string.IsNullOrWhiteSpace(a.startlocation_id)
|
||||||
|
// 载具为空时 不校验载具当前位置是否与预任务起点相同
|
||||||
|
&& (string.IsNullOrEmpty(a.carry_id) || (!string.IsNullOrEmpty(a.carry_id) && a.startlocation_id == b.location_id)))
|
||||||
.OrderBy(a => new { priority = SqlFunc.Desc(a.priority), a.bill_code })
|
.OrderBy(a => new { priority = SqlFunc.Desc(a.priority), a.bill_code })
|
||||||
.Select((a, b, c, d) => new WmsPretaskH
|
.Select((a, b, c, d) => new WmsPretaskH
|
||||||
{
|
{
|
||||||
@@ -906,6 +923,8 @@ namespace Tnb.WarehouseMgr
|
|||||||
|
|
||||||
Logger.Information("【GenTaskExecute】 预任务执行完成");
|
Logger.Information("【GenTaskExecute】 预任务执行完成");
|
||||||
Logger.Information($"【GenTaskExecute】_eleCtlCfg.Environment={_eleCtlCfg.Environment}");
|
Logger.Information($"【GenTaskExecute】_eleCtlCfg.Environment={_eleCtlCfg.Environment}");
|
||||||
|
|
||||||
|
|
||||||
if (string.Equals(_eleCtlCfg.Environment, ElevatorConsts.EnvironmentName, StringComparison.OrdinalIgnoreCase))
|
if (string.Equals(_eleCtlCfg.Environment, ElevatorConsts.EnvironmentName, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
//呼梯操作
|
//呼梯操作
|
||||||
@@ -921,16 +940,24 @@ namespace Tnb.WarehouseMgr
|
|||||||
Logger.Information($"【GenTaskExecute】呼梯时 根据任务单号获取电梯参数 {JsonConvert.SerializeObject(q)}");
|
Logger.Information($"【GenTaskExecute】呼梯时 根据任务单号获取电梯参数 {JsonConvert.SerializeObject(q)}");
|
||||||
var e = await FindElevatorFromPars(q);
|
var e = await FindElevatorFromPars(q);
|
||||||
Logger.Information($"【GenTaskExecute】呼梯时 根据任务单号获取电梯结果 {JsonConvert.SerializeObject(e)}");
|
Logger.Information($"【GenTaskExecute】呼梯时 根据任务单号获取电梯结果 {JsonConvert.SerializeObject(e)}");
|
||||||
if (e != null)
|
|
||||||
|
var tags = _eleCtlCfg.tags;
|
||||||
|
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(e.elevator_code, tags, CancellationToken.None);
|
||||||
|
Logger.Information($"【GenTaskExecute】 电梯当前状态->系统状态:{sysStatus.ToEnum<EnumSysStatus>()},运行状态:{runStatus.ToEnum<EnumRunStatus>()},Agv状态:{agvStatus.ToEnum<EnumAgvStatus>()},当前楼层:{floorNo},电梯占用状态{s_eleUseStatusDic[e.device_id]}");
|
||||||
|
var curFloor = await GetRealFloor(e.end_floor);
|
||||||
|
|
||||||
|
if (e != null && s_eleUseStatusDic[e.device_id] == (int)EnumElevatorUseStatus.空闲 && curFloor != floorNo)
|
||||||
{
|
{
|
||||||
task.device_id = e.device_id;
|
task.device_id = e.device_id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
List<(string endlocation_code, string device_id, string id, int start_floor)> endLocCodes = agvDTTasks
|
Logger.Information($"【GenTaskExecute】呼梯任务数:{agvDTTasks.Count}");
|
||||||
|
List<(string endlocation_code, string device_id, string id, int start_floor)> endLocCodes = agvDTTasks.Where(r => !string.IsNullOrEmpty(r.device_id))
|
||||||
.Select(it => (it.endlocation_code, it.device_id, it.id, it.start_floor)).ToList();
|
.Select(it => (it.endlocation_code, it.device_id, it.id, it.start_floor)).ToList();
|
||||||
var callLiftCnt = endLocCodes?.Count ?? 0;
|
var callLiftCnt = endLocCodes?.Count ?? 0;
|
||||||
Logger.Information($"【GenTaskExecute】呼梯任务数:{callLiftCnt}");
|
Logger.Information($"【GenTaskExecute】实际可呼梯任务数:{callLiftCnt}");
|
||||||
|
|
||||||
if (endLocCodes?.Count > 0)
|
if (endLocCodes?.Count > 0)
|
||||||
{
|
{
|
||||||
if (endLocCodes.Select(x => x.device_id).All(x => !x.IsNullOrWhiteSpace()))
|
if (endLocCodes.Select(x => x.device_id).All(x => !x.IsNullOrWhiteSpace()))
|
||||||
@@ -1720,6 +1747,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
|
|
||||||
List<(string carry_id, string carry_status, string endlocation_id, string endlocation_code)> multiList = disTasks.Select(it => (it.carry_id, it.carry_status, it.endlocation_id, it.endlocation_code)).ToList();
|
List<(string carry_id, string carry_status, string endlocation_id, string endlocation_code)> multiList = disTasks.Select(it => (it.carry_id, it.carry_status, it.endlocation_id, it.endlocation_code)).ToList();
|
||||||
Dictionary<string, object> locWhIdMap = await _db.Queryable<BasLocation>().Where(it => multiList.Select(x => x.endlocation_id).Contains(it.id)).ToDictionaryAsync(it => it.id, it => it.wh_id);
|
Dictionary<string, object> locWhIdMap = await _db.Queryable<BasLocation>().Where(it => multiList.Select(x => x.endlocation_id).Contains(it.id)).ToDictionaryAsync(it => it.id, it => it.wh_id);
|
||||||
|
Dictionary<string, object> locTypeMap = await _db.Queryable<BasLocation>().Where(it => multiList.Select(x => x.endlocation_id).Contains(it.id)).ToDictionaryAsync(it => it.id, it => it.is_type);
|
||||||
List<WmsCarryH> carryIts = new();
|
List<WmsCarryH> carryIts = new();
|
||||||
List<WmsCarryCode> carryCodeIts = new();
|
List<WmsCarryCode> carryCodeIts = new();
|
||||||
List<BasLocation> locIts = new();
|
List<BasLocation> locIts = new();
|
||||||
@@ -1753,6 +1781,11 @@ namespace Tnb.WarehouseMgr
|
|||||||
loc.is_use = ((int)EnumCarryStatus.占用).ToString();
|
loc.is_use = ((int)EnumCarryStatus.占用).ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 如果是出入库位 完成后解除占用
|
||||||
|
string? is_type = locTypeMap.ContainsKey(endLocId) ? locTypeMap[endLocId].ToString() : "";
|
||||||
|
if (is_type == ((int)EnumLocationType.出入库位).ToString())
|
||||||
|
loc.is_use = ((int)EnumCarryStatus.空闲).ToString();
|
||||||
|
|
||||||
locIts.Add(loc);
|
locIts.Add(loc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1768,6 +1801,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
*/ //更新业务主表的单据状态
|
*/ //更新业务主表的单据状态
|
||||||
foreach (WmsDistaskH? dt in disTasks)
|
foreach (WmsDistaskH? dt in disTasks)
|
||||||
{
|
{
|
||||||
|
#region todo 移到service中
|
||||||
// 销售出库
|
// 销售出库
|
||||||
if (dt.biz_type == WmsWareHouseConst.BIZTYPE_WMSSALERELEASE_ID)
|
if (dt.biz_type == WmsWareHouseConst.BIZTYPE_WMSSALERELEASE_ID)
|
||||||
{
|
{
|
||||||
@@ -1797,7 +1831,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
WmsCarryCode wmsCarryCode = await _db.Queryable<WmsCarryCode>().Where(r => r.carry_id == dt.carry_id).FirstAsync();
|
WmsCarryCode wmsCarryCode = await _db.Queryable<WmsCarryCode>().Where(r => r.carry_id == dt.carry_id).FirstAsync();
|
||||||
await _db.Updateable<WmsMaterialTransferD>().SetColumns(r => r.yzqty == r.yzqty + wmsCarryCode.codeqty).Where(r => r.id == dt.require_id).ExecuteCommandAsync();
|
await _db.Updateable<WmsMaterialTransferD>().SetColumns(r => r.yzqty == r.yzqty + wmsCarryCode.codeqty).Where(r => r.id == dt.require_id).ExecuteCommandAsync();
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
List<WmsDistaskCode> disTaskCodes = await _db.Queryable<WmsDistaskCode>().Where(it => it.bill_id == dt.id).ToListAsync();
|
List<WmsDistaskCode> disTaskCodes = await _db.Queryable<WmsDistaskCode>().Where(it => it.bill_id == dt.id).ToListAsync();
|
||||||
WareHouseUpInput upInput = new() { bizTypeId = dt.biz_type, requireId = dt.require_id!, distaskCodes = disTaskCodes, carryIds = disTasks.Select(x => x.carry_id).ToList() };
|
WareHouseUpInput upInput = new() { bizTypeId = dt.biz_type, requireId = dt.require_id!, distaskCodes = disTaskCodes, carryIds = disTasks.Select(x => x.carry_id).ToList() };
|
||||||
@@ -2417,20 +2451,23 @@ namespace Tnb.WarehouseMgr
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost, NonUnify, AllowAnonymous]
|
[HttpPost, NonUnify, AllowAnonymous]
|
||||||
public async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> CommonCreatePretask(CommonCreatePretaskInput input)
|
public async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> CommonCreatePretask(CommonCreatePretaskInput input)
|
||||||
|
{
|
||||||
|
using (var db = _db.CopyNew())
|
||||||
{
|
{
|
||||||
Logger.LogInformation($"【createPretask】 接收到请求 参数:{JsonConvert.SerializeObject(input)}");
|
Logger.LogInformation($"【createPretask】 接收到请求 参数:{JsonConvert.SerializeObject(input)}");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
||||||
WmsPointH? sPoint = null;
|
WmsPointH? sPoint = null;
|
||||||
WmsPointH? ePoint = null;
|
WmsPointH? ePoint = null;
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(input.startlocation_id))
|
if (!string.IsNullOrEmpty(input.startlocation_id))
|
||||||
{
|
{
|
||||||
sPoint = await _db.Queryable<WmsPointH>().FirstAsync(it => it.location_id == input.startlocation_id);
|
sPoint = await db.Queryable<WmsPointH>().FirstAsync(it => it.location_id == input.startlocation_id);
|
||||||
}
|
}
|
||||||
if (!string.IsNullOrEmpty(input.endlocation_id))
|
if (!string.IsNullOrEmpty(input.endlocation_id))
|
||||||
{
|
{
|
||||||
ePoint = await _db.Queryable<WmsPointH>().FirstAsync(it => it.location_id == input.endlocation_id);
|
ePoint = await db.Queryable<WmsPointH>().FirstAsync(it => it.location_id == input.endlocation_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<WmsPointH> points = new List<WmsPointH>();
|
List<WmsPointH> points = new List<WmsPointH>();
|
||||||
@@ -2465,14 +2502,14 @@ namespace Tnb.WarehouseMgr
|
|||||||
// 如果指定了carry_id
|
// 如果指定了carry_id
|
||||||
else if (!string.IsNullOrEmpty(input.carry_id))
|
else if (!string.IsNullOrEmpty(input.carry_id))
|
||||||
{
|
{
|
||||||
wmsCarryH = _db.Queryable<WmsCarryH>().Where(r => r.id == input.carry_id).First();
|
wmsCarryH = db.Queryable<WmsCarryH>().Where(r => r.id == input.carry_id).First();
|
||||||
carry_id = wmsCarryH.id;
|
carry_id = wmsCarryH.id;
|
||||||
carry_code = wmsCarryH.carry_code;
|
carry_code = wmsCarryH.carry_code;
|
||||||
}
|
}
|
||||||
// carry_code
|
// carry_code
|
||||||
else if (!string.IsNullOrEmpty(input.carry_code))
|
else if (!string.IsNullOrEmpty(input.carry_code))
|
||||||
{
|
{
|
||||||
wmsCarryH = _db.Queryable<WmsCarryH>().Where(r => r.carry_code == input.carry_code).First();
|
wmsCarryH = db.Queryable<WmsCarryH>().Where(r => r.carry_code == input.carry_code).First();
|
||||||
carry_id = wmsCarryH.id;
|
carry_id = wmsCarryH.id;
|
||||||
carry_code = wmsCarryH.carry_code;
|
carry_code = wmsCarryH.carry_code;
|
||||||
}
|
}
|
||||||
@@ -2541,18 +2578,31 @@ namespace Tnb.WarehouseMgr
|
|||||||
};
|
};
|
||||||
|
|
||||||
//根据载具移入Id,回更单据状态
|
//根据载具移入Id,回更单据状态
|
||||||
_ = await _db.Updateable<WmsMoveInstock>().SetColumns(it => new WmsMoveInstock { status = WmsWareHouseConst.BILLSTATUS_ON_ID }).Where(it => it.id == preTaskUpInput.RquireId).ExecuteCommandAsync();
|
_ = await db.Updateable<WmsMoveInstock>().SetColumns(it => new WmsMoveInstock { status = WmsWareHouseConst.BILLSTATUS_ON_ID }).Where(it => it.id == preTaskUpInput.RquireId).ExecuteCommandAsync();
|
||||||
|
|
||||||
|
|
||||||
|
Expression<Func<WmsCarryH, WmsCarryH>> wmsCarryHChangeExp = a => new WmsCarryH { is_lock = 1 };
|
||||||
|
|
||||||
|
if (input.isChangeCarryLoc2StartLoc)
|
||||||
|
{
|
||||||
|
wmsCarryHChangeExp = a => new WmsCarryH { is_lock = 1, location_id = preTaskUpInput.CarryStartLocationId, location_code = preTaskUpInput.CarryStartLocationCode };
|
||||||
|
}
|
||||||
|
|
||||||
await GenInStockTaskHandleAfter(preTaskUpInput,
|
await GenInStockTaskHandleAfter(preTaskUpInput,
|
||||||
it => new WmsCarryH { is_lock = 1, location_id = preTaskUpInput.CarryStartLocationId, location_code = preTaskUpInput.CarryStartLocationCode },
|
wmsCarryHChangeExp,
|
||||||
it => new BasLocation { is_lock = 1 });
|
it => new BasLocation { is_lock = 1 });
|
||||||
Logger.LogInformation($"【CommonCreatePretask】 成功生成预任务:{preTasks.First().bill_code}");
|
Logger.LogInformation($"【CommonCreatePretask】 成功生成预任务:{preTasks.First().bill_code}");
|
||||||
return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.OK, "成功");
|
return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.OK, "成功");
|
||||||
}
|
}
|
||||||
return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.InternalServerError, "生成预任务失败");
|
else
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException("生成预任务失败", 500);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
Logger.LogInformation($"【CommonCreatePretask】 {ex.Message}");
|
||||||
|
Logger.LogInformation($"【CommonCreatePretask】 {ex.StackTrace}");
|
||||||
return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.InternalServerError, ex.Message);
|
return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.InternalServerError, ex.Message);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
@@ -2562,7 +2612,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
GenTaskExecute();
|
GenTaskExecute();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|||||||
@@ -184,6 +184,9 @@ namespace Tnb.WarehouseMgr
|
|||||||
public async Task<dynamic> CarryBindFloor2UpDownMachine(CarryBindFloor2UpDownMachineInput input)
|
public async Task<dynamic> CarryBindFloor2UpDownMachine(CarryBindFloor2UpDownMachineInput input)
|
||||||
{
|
{
|
||||||
bool isOk = false;
|
bool isOk = false;
|
||||||
|
|
||||||
|
using (var db = _db.CopyNew())
|
||||||
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (input == null)
|
if (input == null)
|
||||||
@@ -191,8 +194,8 @@ namespace Tnb.WarehouseMgr
|
|||||||
throw new ArgumentNullException(nameof(input));
|
throw new ArgumentNullException(nameof(input));
|
||||||
}
|
}
|
||||||
|
|
||||||
WmsCarryH? carry = await _db.Queryable<WmsCarryH>().SingleAsync(it => it.id == input.carry_id);
|
WmsCarryH? carry = await db.Queryable<WmsCarryH>().SingleAsync(it => it.id == input.carry_id);
|
||||||
WmsCarryH? subCarry = await _db.Queryable<WmsCarryH>().SingleAsync(it => it.id == input.membercarry_id);
|
WmsCarryH? subCarry = await db.Queryable<WmsCarryH>().SingleAsync(it => it.id == input.membercarry_id);
|
||||||
if (carry != null && subCarry != null)
|
if (carry != null && subCarry != null)
|
||||||
{
|
{
|
||||||
WmsCarryD wmsCarryD = new()
|
WmsCarryD wmsCarryD = new()
|
||||||
@@ -203,7 +206,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
loc = 1,
|
loc = 1,
|
||||||
create_time = DateTime.Now
|
create_time = DateTime.Now
|
||||||
};
|
};
|
||||||
int row = await _db.Insertable(wmsCarryD).ExecuteCommandAsync();
|
int row = await db.Insertable(wmsCarryD).ExecuteCommandAsync();
|
||||||
isOk = row > 0;
|
isOk = row > 0;
|
||||||
if (!isOk)
|
if (!isOk)
|
||||||
{
|
{
|
||||||
@@ -221,6 +224,9 @@ namespace Tnb.WarehouseMgr
|
|||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return Task.FromResult(true);
|
return Task.FromResult(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
private async Task<dynamic> WmsEmptyOut(VisualDevModelDataCrInput input)
|
public async Task<dynamic> WmsEmptyOut(VisualDevModelDataCrInput input)
|
||||||
{
|
{
|
||||||
|
|
||||||
try
|
try
|
||||||
|
|||||||
@@ -8,11 +8,13 @@ using JNPF.Common.Core.Manager;
|
|||||||
using JNPF.Common.Dtos.VisualDev;
|
using JNPF.Common.Dtos.VisualDev;
|
||||||
using JNPF.Common.Enums;
|
using JNPF.Common.Enums;
|
||||||
using JNPF.FriendlyException;
|
using JNPF.FriendlyException;
|
||||||
|
using JNPF.Systems.Interfaces.System;
|
||||||
using JNPF.VisualDev;
|
using JNPF.VisualDev;
|
||||||
using JNPF.VisualDev.Entitys;
|
using JNPF.VisualDev.Entitys;
|
||||||
using JNPF.VisualDev.Interfaces;
|
using JNPF.VisualDev.Interfaces;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using SqlSugar;
|
using SqlSugar;
|
||||||
|
using Tnb.BasicData;
|
||||||
using Tnb.BasicData.Entities;
|
using Tnb.BasicData.Entities;
|
||||||
using Tnb.ProductionMgr.Entities;
|
using Tnb.ProductionMgr.Entities;
|
||||||
using Tnb.WarehouseMgr.Entities;
|
using Tnb.WarehouseMgr.Entities;
|
||||||
@@ -31,14 +33,16 @@ namespace Tnb.WarehouseMgr
|
|||||||
private readonly IRunService _runService;
|
private readonly IRunService _runService;
|
||||||
private readonly IVisualDevService _visualDevService;
|
private readonly IVisualDevService _visualDevService;
|
||||||
private readonly IWareHouseService _wareHouseService;
|
private readonly IWareHouseService _wareHouseService;
|
||||||
|
private readonly IBillRullService _billRullService;
|
||||||
|
|
||||||
public WmsPrdInstockHService(ISqlSugarRepository<WmsCarryH> repository, IRunService runService,
|
public WmsPrdInstockHService(ISqlSugarRepository<WmsCarryH> repository, IRunService runService,
|
||||||
IVisualDevService visualDevService, IWareHouseService wareHouseService)
|
IVisualDevService visualDevService, IWareHouseService wareHouseService, IBillRullService billRullService)
|
||||||
{
|
{
|
||||||
_db = repository.AsSugarClient();
|
_db = repository.AsSugarClient();
|
||||||
_runService = runService;
|
_runService = runService;
|
||||||
_visualDevService = visualDevService;
|
_visualDevService = visualDevService;
|
||||||
_wareHouseService = wareHouseService;
|
_wareHouseService = wareHouseService;
|
||||||
|
_billRullService = billRullService;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -58,16 +62,26 @@ namespace Tnb.WarehouseMgr
|
|||||||
// 新建主表
|
// 新建主表
|
||||||
if (prdInstockH == null)
|
if (prdInstockH == null)
|
||||||
{
|
{
|
||||||
VisualDevModelDataCrInput visualDevInput = new VisualDevModelDataCrInput();
|
string bill_code = await _billRullService.GetBillNumber(CodeTemplateConst.PRDOUTSTOCK_CODE);
|
||||||
visualDevInput.data = new Dictionary<string, object>();
|
|
||||||
visualDevInput.data.Add("bill_code", "");
|
|
||||||
|
|
||||||
visualDevInput.data.Add("status", WmsWareHouseConst.BILLSTATUS_ADD_ID);
|
WmsPrdInstockH wmsPrdInstockH = new ();
|
||||||
|
wmsPrdInstockH.create_id = "";
|
||||||
|
wmsPrdInstockH.create_time = DateTime.Now;
|
||||||
|
wmsPrdInstockH.prd_bill_code = input.prd_bill_code;
|
||||||
|
wmsPrdInstockH.bill_code = bill_code;
|
||||||
|
wmsPrdInstockH.material_id = input.material_id;
|
||||||
|
wmsPrdInstockH.material_code = input.material_code;
|
||||||
|
wmsPrdInstockH.material_name = input.material_name;
|
||||||
|
wmsPrdInstockH.material_spec = input.material_spec;
|
||||||
|
wmsPrdInstockH.planqty = input.planqty;
|
||||||
|
wmsPrdInstockH.pqty = input.pqty;
|
||||||
|
wmsPrdInstockH.rqty = input.rqty;
|
||||||
|
wmsPrdInstockH.type = input.type;
|
||||||
|
//wmsPrdInstockH.status = WmsWareHouseConst.BILLSTATUS_ADD_ID;
|
||||||
|
|
||||||
VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_WMSPRDINSTOCK_ID, true);
|
await _db.Insertable(wmsPrdInstockH).ExecuteCommandAsync();
|
||||||
await _runService.Create(templateEntity, visualDevInput);
|
|
||||||
|
|
||||||
prd_instock_code_id = visualDevInput.data["ReturnIdentity"].ToString() ?? "";
|
prd_instock_code_id = wmsPrdInstockH.id;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -77,7 +91,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
{
|
{
|
||||||
pqty = input.pqty,
|
pqty = input.pqty,
|
||||||
rqty = input.rqty
|
rqty = input.rqty
|
||||||
}).ExecuteCommandAsync();
|
}).Where(r => r.id == prd_instock_code_id).ExecuteCommandAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
List<WmsPrdInstockD> WmsPrdInstockDs = new List<WmsPrdInstockD>();
|
List<WmsPrdInstockD> WmsPrdInstockDs = new List<WmsPrdInstockD>();
|
||||||
@@ -154,10 +168,14 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WmsCarryH wmsCarryH = await _db.Queryable<WmsCarryH>().Where(r => r.id == wmsPrdInstockD.carry_id).FirstAsync();
|
||||||
|
|
||||||
// 生成到输送线任务
|
// 生成到输送线任务
|
||||||
CommonCreatePretaskInput commonCreatePretaskInput1 = new CommonCreatePretaskInput();
|
CommonCreatePretaskInput commonCreatePretaskInput1 = new CommonCreatePretaskInput();
|
||||||
commonCreatePretaskInput1.startlocation_id = startLocation.id;
|
commonCreatePretaskInput1.startlocation_id = startLocation.id;
|
||||||
commonCreatePretaskInput1.endlocation_id = endlocation_ssx.id;
|
commonCreatePretaskInput1.endlocation_id = endlocation_ssx.id;
|
||||||
|
commonCreatePretaskInput1.carry_id = wmsCarryH.id;
|
||||||
|
commonCreatePretaskInput1.carry_code = wmsCarryH.carry_code;
|
||||||
commonCreatePretaskInput1.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID;
|
commonCreatePretaskInput1.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID;
|
||||||
commonCreatePretaskInput1.biz_type = "";
|
commonCreatePretaskInput1.biz_type = "";
|
||||||
commonCreatePretaskInput1.require_id = wmsPrdInstockD.id;
|
commonCreatePretaskInput1.require_id = wmsPrdInstockD.id;
|
||||||
@@ -168,10 +186,13 @@ namespace Tnb.WarehouseMgr
|
|||||||
CommonCreatePretaskInput commonCreatePretaskInput2 = new CommonCreatePretaskInput();
|
CommonCreatePretaskInput commonCreatePretaskInput2 = new CommonCreatePretaskInput();
|
||||||
commonCreatePretaskInput2.startlocation_id = startlocation_id_ssx;
|
commonCreatePretaskInput2.startlocation_id = startlocation_id_ssx;
|
||||||
commonCreatePretaskInput2.endlocation_id = endLocation.id;
|
commonCreatePretaskInput2.endlocation_id = endLocation.id;
|
||||||
|
commonCreatePretaskInput2.carry_id = wmsCarryH.id;
|
||||||
|
commonCreatePretaskInput2.carry_code = wmsCarryH.carry_code;
|
||||||
commonCreatePretaskInput2.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID;
|
commonCreatePretaskInput2.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID;
|
||||||
commonCreatePretaskInput2.biz_type = WmsWareHouseConst.BIZTYPE_WMSPRDINSTOCK_ID;
|
commonCreatePretaskInput2.biz_type = WmsWareHouseConst.BIZTYPE_WMSPRDINSTOCK_ID;
|
||||||
commonCreatePretaskInput2.require_id = wmsPrdInstockD.id;
|
commonCreatePretaskInput2.require_id = wmsPrdInstockD.id;
|
||||||
commonCreatePretaskInput2.isExcuteMission = false;
|
commonCreatePretaskInput2.isExcuteMission = false;
|
||||||
|
commonCreatePretaskInput1.isChangeCarryLoc2StartLoc = false;
|
||||||
|
|
||||||
Entities.Dto.Outputs.Result res2 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput2);
|
Entities.Dto.Outputs.Result res2 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput2);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user