Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
@@ -117,7 +117,6 @@ namespace Tnb.ProductionMgr
|
||||
public SemaphoreSlim s_taskF2KTPsupplement = new(1);
|
||||
public SemaphoreSlim s_taskYCLInternalTransfer = new(1);
|
||||
|
||||
public Dictionary<string, SemaphoreSlim> s_elevatortaskDic = new();
|
||||
|
||||
private StackExRedisHelper _redisData;
|
||||
private readonly IPrdInstockService _prdInstockService;
|
||||
@@ -138,7 +137,6 @@ namespace Tnb.ProductionMgr
|
||||
private ISqlSugarClient db_Floor4DMJ2MJX;
|
||||
private ISqlSugarClient db_Floor4MJX2MJC;
|
||||
private ISqlSugarClient db_Floor4DMC2CPK;
|
||||
private List<ISqlSugarClient> db_ElevatorTaskExceptionHandles = new ();
|
||||
private ISqlSugarClient db_F2KTPsupplement;
|
||||
private ISqlSugarClient db_YCLInternalTransfer;
|
||||
|
||||
@@ -203,9 +201,9 @@ namespace Tnb.ProductionMgr
|
||||
foreach (var s_elevatorArea in elevatorAreas)
|
||||
{
|
||||
ISqlSugarClient db_ElevatorTaskExceptionHandle = repository.CopyNew();
|
||||
db_ElevatorTaskExceptionHandles.Add(db_ElevatorTaskExceptionHandle);
|
||||
_wareHouseService.db_ElevatorTaskExceptionHandles.Add(db_ElevatorTaskExceptionHandle);
|
||||
SemaphoreSlim s_elevatortask = new(1);
|
||||
s_elevatortaskDic.Add(s_elevatorArea, s_elevatortask);
|
||||
_wareHouseService.s_elevatortaskDic.Add(s_elevatorArea, s_elevatortask);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1010,7 +1008,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
continue;
|
||||
}
|
||||
|
||||
var DistaskH = db_SSXcodetimer.Queryable<WmsDistaskH>().Where(p => p.carry_code == result && p.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).OrderByDescending(p => p.create_time).First();
|
||||
var DistaskH = db_SSXcodetimer.Queryable<WmsDistaskH>().Where(p => p.carry_code == result && p.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID && p.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID).OrderByDescending(p => p.create_time).First();
|
||||
if (DistaskH != null)
|
||||
{
|
||||
string target = putdic.Keys.Contains(DistaskH.startlocation_code) ? putdic.Where(p => p.Key == DistaskH.startlocation_code).First().Value.ToString() : "13";
|
||||
@@ -1926,24 +1924,26 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
|
||||
async void ElevatorTaskExceptionHandle(object args)
|
||||
{
|
||||
Task[] taskActions = new Task[s_elevatortaskDic.Count];
|
||||
Task[] taskActions = new Task[_wareHouseService.s_elevatortaskDic.Count];
|
||||
int index = 0;
|
||||
foreach (string area in s_elevatortaskDic.Keys)
|
||||
foreach (string area in _wareHouseService.s_elevatortaskDic.Keys)
|
||||
{
|
||||
SemaphoreSlim s_elevatortask = s_elevatortaskDic[area];
|
||||
SemaphoreSlim s_elevatortask = _wareHouseService.s_elevatortaskDic[area];
|
||||
|
||||
if (s_elevatortask.CurrentCount == 0)
|
||||
return;
|
||||
|
||||
await s_elevatortask.WaitAsync();
|
||||
|
||||
var db_ElevatorTaskExceptionHandle = db_ElevatorTaskExceptionHandles[index];
|
||||
var db_ElevatorTaskExceptionHandle = _wareHouseService.db_ElevatorTaskExceptionHandles[index];
|
||||
taskActions[index] = Task.Run(async () =>
|
||||
{
|
||||
try
|
||||
{
|
||||
// 获取未判定几托下的电梯任务或者已判定一托下的电梯任务
|
||||
// 因为电梯任务判定为一托下之后会回写act_start_date,后续同电梯小车不会进入到已判定过几托下的电梯,不存在同电梯既有act_start_date为空又有act_start_date不为空的情况
|
||||
List<WmsDistaskH> elevatorTasks = db_ElevatorTaskExceptionHandle.Queryable<WmsDistaskH>()
|
||||
.Where(r => r.area_code == area && r.act_start_date == null && r.act_end_date == null
|
||||
.Where(r => r.area_code == area && r.act_end_date == null
|
||||
&& r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).ToList();
|
||||
|
||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】检查到需要恢复/执行的电梯任务{elevatorTasks.Count}条 {string.Join(',', elevatorTasks.Select(x => x.bill_code))}");
|
||||
@@ -1951,6 +1951,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
|
||||
if (elevatorTasks?.Count > 0)
|
||||
{
|
||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】{JsonConvert.SerializeObject(elevatorTasks)}");
|
||||
|
||||
List<IGrouping<string, WmsDistaskH>> elevatorTaskGroup = elevatorTasks.GroupBy(r => $"{r.endlocation_code} {r.end_floor}").ToList();
|
||||
foreach (IGrouping<string, WmsDistaskH> group in elevatorTaskGroup)
|
||||
{
|
||||
@@ -1977,8 +1979,9 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
wmsDistaskHs[0].device_id = e.device_id;
|
||||
wmsDistaskHs[1].device_id = e.device_id;
|
||||
}
|
||||
|
||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}");
|
||||
await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs);
|
||||
await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs, db_ElevatorTaskExceptionHandle);
|
||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}执行完成");
|
||||
}
|
||||
// 一托货
|
||||
@@ -1993,9 +1996,13 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
{
|
||||
wmsDistaskHs[0].device_id = e.device_id;
|
||||
}
|
||||
|
||||
|
||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}");
|
||||
await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs);
|
||||
await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs, db_ElevatorTaskExceptionHandle);
|
||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}执行完成");
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -2011,7 +2018,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
wmsDistaskHs[0].device_id = e.device_id;
|
||||
}
|
||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}");
|
||||
await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs);
|
||||
await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs, db_ElevatorTaskExceptionHandle);
|
||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}执行完成");
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
namespace Tnb.WarehouseMgr.Entities.Dto.Inputs
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class ElevatorStatusInput
|
||||
{
|
||||
// ELE03 ELE04
|
||||
public string ElevatorName { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,7 @@ namespace Tnb.WarehouseMgr.Entities.Dto
|
||||
public string carry_code { get; set; }
|
||||
public string material_code { get; set; }
|
||||
public string material_name { get; set; }
|
||||
public string material_specification { get; set; }
|
||||
public string code_batch { get; set; }
|
||||
public decimal num { get; set; }
|
||||
/// <summary>
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Security;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Tnb.BasicData.Entities.Entity;
|
||||
|
||||
/// <summary>
|
||||
/// 编码规则记录表
|
||||
/// </summary>
|
||||
[SugarTable("bas_coderules")]
|
||||
public partial class BasCoderules : BaseEntity<string>
|
||||
{
|
||||
public BasCoderules()
|
||||
{
|
||||
id = SnowflakeIdHelper.NextId();
|
||||
}
|
||||
/// <summary>
|
||||
/// 创建用户
|
||||
/// </summary>
|
||||
public string? create_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime? create_time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 修改用户
|
||||
/// </summary>
|
||||
public string? modify_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 修改时间
|
||||
/// </summary>
|
||||
public DateTime? modify_time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 前缀
|
||||
/// </summary>
|
||||
public string? prefix { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 自定义
|
||||
/// </summary>
|
||||
public string? custom { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 当前流水号
|
||||
/// </summary>
|
||||
public int? waternumber{ get; set; }
|
||||
|
||||
}
|
||||
@@ -33,7 +33,16 @@ namespace Tnb.WarehouseMgr.Interfaces
|
||||
SemaphoreSlim s_taskExecuteSemaphore_F2ZCCOutstock { get; }
|
||||
|
||||
SemaphoreSlim _s_GenTaskExecute { get; }
|
||||
|
||||
|
||||
Dictionary<string, SemaphoreSlim> s_elevatortaskDic
|
||||
{
|
||||
get;
|
||||
}
|
||||
List<ISqlSugarClient> db_ElevatorTaskExceptionHandles
|
||||
{
|
||||
get;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 入库策略
|
||||
/// </summary>
|
||||
@@ -144,7 +153,7 @@ namespace Tnb.WarehouseMgr.Interfaces
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
Task TaskComplate(TaskCompleUpInput input);
|
||||
Task TaskComplate(TaskCompleUpInput input, ISqlSugarClient db = null);
|
||||
/// <summary>
|
||||
/// 任务执行
|
||||
/// </summary>
|
||||
@@ -156,7 +165,7 @@ namespace Tnb.WarehouseMgr.Interfaces
|
||||
/// </summary>
|
||||
/// /// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
Task TaskExecuteAfter(TaskExecuteAfterUpInput input);
|
||||
Task TaskExecuteAfter(TaskExecuteAfterUpInput input, ISqlSugarClient db = null);
|
||||
/// <summary>
|
||||
/// 路径算法(同时出库多个载具)
|
||||
/// </summary>
|
||||
@@ -200,8 +209,10 @@ namespace Tnb.WarehouseMgr.Interfaces
|
||||
/// </summary>
|
||||
/// <param name="disTask"></param>
|
||||
/// <returns></returns>
|
||||
Task ExecuteTargetFloorTask(List<WmsDistaskH> disTasks);
|
||||
Task ExecuteTargetFloorTask(List<WmsDistaskH> disTasks, ISqlSugarClient db = null);
|
||||
|
||||
Task<WmsElevatorH> FindElevatorFromPars(ElevagorInfoQuery input);
|
||||
|
||||
Task<string> CreateCodeRules(string prefix, string custom, int watercodeLength);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,9 +63,13 @@ namespace Tnb.WarehouseMgr
|
||||
public static SemaphoreSlim _s_taskExecuteSemaphore_F4DMJCOutstock = new(1);
|
||||
|
||||
public static SemaphoreSlim _s_taskExecuteSemaphore_AddOutinStockDetail = new(1);
|
||||
public static SemaphoreSlim _s_taskExecuteSemaphore_codeRules = new(1);
|
||||
|
||||
protected static Dictionary<string, int> _s_eleUseStatusDic;
|
||||
|
||||
public Dictionary<string, SemaphoreSlim> _s_elevatortaskDic = new();
|
||||
public List<ISqlSugarClient> _db_ElevatorTaskExceptionHandles = new();
|
||||
|
||||
public static SemaphoreSlim s_GenTaskExecute = new(1);
|
||||
protected IEventPublisher? EventPublisher { set; get; }
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Dynamic;
|
||||
using Aliyun.OSS;
|
||||
using Aop.Api.Domain;
|
||||
using JNPF;
|
||||
@@ -23,6 +24,7 @@ using SqlSugar;
|
||||
using Tnb.BasicData.Entities;
|
||||
using Tnb.Common.Extension;
|
||||
using Tnb.EquipMgr.Entities;
|
||||
using Tnb.QcMgr.Entities;
|
||||
using Tnb.WarehouseMgr.Entities;
|
||||
using Tnb.WarehouseMgr.Entities.Configs;
|
||||
using Tnb.WarehouseMgr.Entities.Consts;
|
||||
@@ -395,17 +397,30 @@ namespace Tnb.WarehouseMgr
|
||||
_ = await _elevatorControlService.SendOpenCloseCmd(devName, 3); //发送电梯前门开门指令
|
||||
}
|
||||
|
||||
// 3 4号梯只要电梯是当前楼层开门状态就能进
|
||||
// 3 4号梯需要电梯是当前楼层开门状态就能进
|
||||
bool canEnter = false;
|
||||
if (devName == "Elevator3" || devName == "Elevator4")
|
||||
{
|
||||
string sno = devName.Match(@"\d+");
|
||||
|
||||
// 如果判定好了几托下,则不允许开门放货
|
||||
List<WmsDistaskH> elevatorTasks = _db.Queryable<WmsDistaskH>()
|
||||
.Where(r => r.startlocation_code == $"DT-3-{sno}" && r.endlocation_code == $"DT-1-{sno}" && r.act_start_date != null && r.act_end_date == null
|
||||
&& r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).ToList();
|
||||
if (elevatorTasks.Count >= 0)
|
||||
{
|
||||
Logger.LogInformation($"电梯{devName}内已有货,且已判定为一托下!");
|
||||
return await ToApiResult(HttpStatusCode.InternalServerError, $"电梯内{devName}已有货,且已判定为一托下!");
|
||||
}
|
||||
|
||||
// 如果还未判定几托下,判断是否放了两托货
|
||||
elevatorTasks = _db.Queryable<WmsDistaskH>()
|
||||
.Where(r => r.startlocation_code == $"DT-3-{sno}" && r.endlocation_code == $"DT-1-{sno}" && r.act_start_date == null && r.act_end_date == null
|
||||
&& r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).ToList();
|
||||
if (elevatorTasks.Count >= 2)
|
||||
{
|
||||
return await ToApiResult(HttpStatusCode.InternalServerError, "电梯内已有两托货!");
|
||||
Logger.LogInformation($"电梯内{devName}已有两托货!");
|
||||
return await ToApiResult(HttpStatusCode.InternalServerError, $"电梯内{devName}已有两托货!");
|
||||
}
|
||||
canEnter = true;
|
||||
}
|
||||
@@ -1064,5 +1079,37 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
return ToApiResult(HttpStatusCode.OK, data);
|
||||
}
|
||||
|
||||
///// <summary>
|
||||
///// 电梯有货无货状态(给三四号梯发货用)
|
||||
///// </summary>
|
||||
///// <param name="input"></param>
|
||||
///// <returns></returns>
|
||||
//[HttpPost]
|
||||
//public async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> ElevatorStatus(ElevatorStatusInput input)
|
||||
//{
|
||||
// try
|
||||
// {
|
||||
// //List<WmsDistaskH> elevatorTasks = _db.Queryable<WmsDistaskH>()
|
||||
// // .Where(r => r.area_code == input.ElevatorName && r.act_start_date == null && r.act_end_date == null && r.start_floor == 3 && r.end_floor == 1
|
||||
// // && r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).ToList();
|
||||
|
||||
// WmsElevatorH wmsElevatorH = await _db.Queryable<WmsElevatorH>().Where(r => r.area_code == input.ElevatorName).FirstAsync();
|
||||
|
||||
// dynamic data = new ExpandoObject();
|
||||
// data.ElevatorName = input.ElevatorName;
|
||||
// data.status = wmsElevatorH.isneedwcsreset == 1;
|
||||
// Logger.Information($"获取电梯{input.ElevatorName} 是否需要重置WCS深浅位 {wmsElevatorH.isneedwcsreset == 1}");
|
||||
|
||||
// return await ToApiResult(HttpStatusCode.OK, data);
|
||||
// }
|
||||
// catch (Exception ex)
|
||||
// {
|
||||
// Logger.Error($"获取电梯{input.ElevatorName}是否需要重置WCS深浅位失败", ex.Message);
|
||||
// Logger.Error($"获取电梯{input.ElevatorName}是否需要重置WCS深浅位失败", ex.StackTrace);
|
||||
// return await ToApiResult(HttpStatusCode.InternalServerError, $"获取电梯{input.ElevatorName}是否需要重置WCS深浅位失败");
|
||||
// }
|
||||
//}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -338,6 +338,7 @@ namespace Tnb.WarehouseMgr
|
||||
{
|
||||
var mat = mats.Where(p => p.id == carrycode.material_id).First();
|
||||
locationOutput.material_name = mat.name;
|
||||
locationOutput.material_specification = mat.material_specification;
|
||||
}
|
||||
|
||||
locationOutput.code_batch = carrycode.code_batch;
|
||||
|
||||
@@ -57,6 +57,8 @@ using static NPOI.HSSF.Util.HSSFColor;
|
||||
using Tnb.BasicData;
|
||||
using System.Reflection;
|
||||
using NPOI.SS.Format;
|
||||
using Aspose.Cells.Drawing;
|
||||
using Tnb.BasicData.Entities.Entity;
|
||||
|
||||
namespace Tnb.WarehouseMgr
|
||||
{
|
||||
@@ -128,6 +130,15 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
|
||||
|
||||
public Dictionary<string, SemaphoreSlim> s_elevatortaskDic
|
||||
{
|
||||
get { return _s_elevatortaskDic; }
|
||||
}
|
||||
public List<ISqlSugarClient> db_ElevatorTaskExceptionHandles
|
||||
{
|
||||
get { return _db_ElevatorTaskExceptionHandles; }
|
||||
}
|
||||
|
||||
|
||||
public WareHouseService(ISqlSugarRepository<WmsInstockH> repository, IDictionaryDataService dictionaryDataService, StackExRedisHelper redisData,
|
||||
IBillRullService billRullService, IUserManager userManager, ICacheManager cacheManager, IElevatorControlService elevatorControlService,
|
||||
@@ -2191,12 +2202,20 @@ namespace Tnb.WarehouseMgr
|
||||
/// </summary>
|
||||
/// <param name="disTask"></param>
|
||||
/// <returns></returns>
|
||||
public async Task ExecuteTargetFloorTask(List<WmsDistaskH> disTasks)
|
||||
public async Task ExecuteTargetFloorTask(List<WmsDistaskH> disTasks, ISqlSugarClient db = null)
|
||||
{
|
||||
//收到放货确认通知,向电梯发送到3楼的指令
|
||||
Logger.Information($"开始执行电梯任务,任务:{string.Join(",", disTasks.Select(r => r.bill_code))}");
|
||||
|
||||
var disTask = disTasks[0];
|
||||
|
||||
Logger.Information($"disTask.require_id={disTask.require_id}");
|
||||
List<string> disTaskIds = new() { disTasks[0].id };
|
||||
if (disTasks.Count == 2)
|
||||
{
|
||||
disTaskIds.Add(disTasks[1].id);
|
||||
}
|
||||
string devName = "";
|
||||
try
|
||||
{
|
||||
if (!s_elevatorMap.TryGetValue(disTask.device_id, out object? elevatorCode))
|
||||
@@ -2204,10 +2223,46 @@ namespace Tnb.WarehouseMgr
|
||||
Logger.Information($"开始执行电梯任务,没有取到设备{disTask.device_id}的 elevatorCode! s_elevatorMap: {JsonConvert.SerializeObject(s_elevatorMap)}");
|
||||
return;
|
||||
}
|
||||
string devName = s_elevatorMap[disTask.device_id]?.ToString() ?? _eleCtlCfg.DevName3;
|
||||
devName = s_elevatorMap[disTask.device_id]?.ToString() ?? _eleCtlCfg.DevName3;
|
||||
|
||||
Logger.Information($"当前:{devName.Match(@"\d+")}#梯");
|
||||
|
||||
// 回写act_start_date之前会发给wcs重置深浅位,没回写就是没发
|
||||
if (disTasks[0].act_start_date == null)
|
||||
{
|
||||
TaskExecuteAfterUpInput teaUpInput = new()
|
||||
{
|
||||
disTaskIds = disTaskIds,
|
||||
};
|
||||
await TaskExecuteAfter(teaUpInput, db);
|
||||
|
||||
string[] doubleCarryRunElevators =
|
||||
{
|
||||
"Elevator3","Elevator4"
|
||||
};
|
||||
if (doubleCarryRunElevators.Contains(devName) && disTasks[0].end_floor == 1)
|
||||
{
|
||||
AgvRequestConfig requestCfg = App.Configuration.Build<AgvRequestConfig>();
|
||||
string url = requestCfg.AgvRequestUrls.CreateTaskChainUrl;
|
||||
dynamic reqBody = new ExpandoObject();
|
||||
reqBody.floor = devName == "Elevator3" ? "03" : "04";
|
||||
reqBody.isDown = true;
|
||||
CancellationTokenSource Ctu = new();
|
||||
Logger.Information($"【ElevatorTaskExceptionHandle】 电梯{devName}下行 开始请求WCS lift/thirdFloor接口 请求地址:{url} 请求参数:{JsonConvert.SerializeObject(reqBody)} ");
|
||||
dynamic respBody = await HttpClientHelper.PostStreamAsync(url, reqBody, Ctu.Token);
|
||||
Logger.Information($"【ElevatorTaskExceptionHandle】 电梯{devName}下行 接收到WCS lift/thirdFloor接口信息:{respBody}");
|
||||
if (respBody.code != "200")
|
||||
{
|
||||
throw new Exception($"通知WCS电梯{devName}下行接口调用错误");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
catch { throw; }
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
var tags = new[] { "SysStatus", "RunStatus", "FloorNo", "DoorStatus", "AGVStatus" };
|
||||
(int sysStatus, int runStatus, int curFloorNo, int doorStatus, int agvStatus) eleStatusMulti = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None);
|
||||
if (eleStatusMulti.agvStatus != (int)EnumAgvStatus.AGV运行状态)
|
||||
@@ -2260,22 +2315,11 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
if (tuple.sysStatus.ToEnum<EnumSysStatus>() == EnumSysStatus.正常状态 && tuple.runStatus.ToEnum<EnumRunStatus>() == EnumRunStatus.停梯)
|
||||
{
|
||||
Logger.Information($"disTask.require_id={disTask.require_id}");
|
||||
List<string> disTaskIds = new() { disTasks[0].id };
|
||||
if (disTasks.Count == 2)
|
||||
{
|
||||
disTaskIds.Add(disTasks[1].id);
|
||||
}
|
||||
TaskExecuteAfterUpInput teaUpInput = new()
|
||||
{
|
||||
disTaskIds = disTaskIds,
|
||||
};
|
||||
await TaskExecuteAfter(teaUpInput);
|
||||
TaskCompleUpInput tcUpInput = new()
|
||||
{
|
||||
disTaskIds = disTaskIds,
|
||||
};
|
||||
await TaskComplate(tcUpInput);
|
||||
await TaskComplate(tcUpInput, db);
|
||||
|
||||
Logger.Information($"{devName.Match(@"\d+")}#梯 电梯任务执行完成");
|
||||
}
|
||||
@@ -2392,7 +2436,7 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 任务执行
|
||||
/// </summary>
|
||||
@@ -2434,10 +2478,12 @@ namespace Tnb.WarehouseMgr
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task TaskExecuteAfter(TaskExecuteAfterUpInput input)
|
||||
public async Task TaskExecuteAfter(TaskExecuteAfterUpInput input, ISqlSugarClient dbConn = null)
|
||||
{
|
||||
//更新任务执行表单据状态
|
||||
var db = _db.CopyNew();
|
||||
var db = dbConn;
|
||||
if (dbConn == null)
|
||||
db = _db.CopyNew();
|
||||
try
|
||||
{
|
||||
|
||||
@@ -2473,10 +2519,12 @@ namespace Tnb.WarehouseMgr
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task TaskComplate(TaskCompleUpInput input)
|
||||
public async Task TaskComplate(TaskCompleUpInput input, ISqlSugarClient dbConn = null)
|
||||
{
|
||||
|
||||
var db = _db.CopyNew();
|
||||
var db = dbConn;
|
||||
if (dbConn == null)
|
||||
db = _db.CopyNew();
|
||||
|
||||
try
|
||||
{
|
||||
Logger.Information($"【TaskComplate】 开始执行TaskComplate {JsonConvert.SerializeObject(input)}");
|
||||
@@ -3879,7 +3927,46 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<string> CreateCodeRules(string prefix, string custom, int watercodeLength)
|
||||
{
|
||||
try
|
||||
{
|
||||
await _s_taskExecuteSemaphore_codeRules.WaitAsync();
|
||||
string watercode = "";
|
||||
int? waternumber = 1;
|
||||
BasCoderules basCoderules = await _db.Queryable<BasCoderules>().Where(r => r.prefix == prefix && r.custom == custom).FirstAsync();
|
||||
if (basCoderules == null)
|
||||
{
|
||||
watercode = "1";
|
||||
BasCoderules basCoderulesIns = new BasCoderules();
|
||||
basCoderulesIns.create_time = DateTime.Now;
|
||||
basCoderulesIns.prefix = prefix;
|
||||
basCoderulesIns.custom = custom;
|
||||
basCoderulesIns.waternumber = waternumber;
|
||||
await _db.Insertable(basCoderulesIns).ExecuteCommandAsync();
|
||||
watercode = waternumber.ToString().PadLeft(watercodeLength, '0');
|
||||
}
|
||||
else
|
||||
{
|
||||
waternumber = basCoderules.waternumber;
|
||||
waternumber++;
|
||||
await _db.Updateable<BasCoderules>().SetColumns(r => r.waternumber == waternumber).ExecuteCommandAsync();
|
||||
watercode = waternumber.ToString().PadLeft(watercodeLength, '0');
|
||||
}
|
||||
return watercode;
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
throw;
|
||||
}
|
||||
finally
|
||||
{
|
||||
_s_taskExecuteSemaphore_codeRules.Release();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user