报表、电梯优化......
This commit is contained in:
@@ -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