bug修复

This commit is contained in:
2024-06-07 17:30:47 +08:00
parent 3549274b72
commit 51bfc0d99c
56 changed files with 357 additions and 315 deletions

View File

@@ -47,13 +47,12 @@ namespace Tnb.WarehouseMgr
context = new(cfg);
s_elevatorMap = await context.Queryable<WmsElevatorH>().ToDictionaryAsync(x => x.elevator_id, x => x.elevator_code);
s_loadedStatusDic = context.Queryable<WmsElevatorH>().ToList().ToDictionary(x => x.elevator_id, x => x.is_use);
if (s_eleUseStatusDic.Count < 1)
{
foreach (var (k, _) in s_elevatorMap)
{
s_eleUseStatusDic[k] = 0;
s_loadedStatusDic[k] = 0;
}
}

View File

@@ -83,8 +83,7 @@ namespace Tnb.WarehouseMgr
[HttpPost, NonUnify, AllowAnonymous]
public async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> LoadConfirm(ConfirmInput input)
{
Logger.Information("【LoadConfirm】接收到WCS取货确认信号.................. ");
Logger.Information($"【LoadConfirm】接收到WCS取货确认信号.................. {JsonConvert.SerializeObject(input)}");
var dis = _db.Queryable<WmsDistaskH>().Where(P => P.bill_code == input.taskCode).First();
if (dis.area_code == "ZSCJ001")
@@ -324,7 +323,8 @@ namespace Tnb.WarehouseMgr
if (sysStatus == (int)EnumSysStatus. && runStatus == (int)EnumRunStatus.
&& doorStatus == (int)EnumDoorStatus. && s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus.)
{
Logger.Information($"【UnloadConfirm】 成功");
Logger.Information($"【UnloadConfirm】 成功 {devName} 变更为占用");
await _db.Updateable<WmsElevatorH>().SetColumns(r => r.is_use == (int)EnumElevatorUseStatus.).Where(r => r.elevator_id == elevator.device_id).ExecuteCommandAsync();
s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.;
return await ToApiResult(HttpStatusCode.OK, "成功");
}
@@ -458,10 +458,11 @@ namespace Tnb.WarehouseMgr
Logger.Information($"【TaskCallback】 根据任务单查找电梯结果 {JsonConvert.SerializeObject(elevator)}");
if (!elevator?.device_id.IsNullOrEmpty() ?? false)
{
await _db.Updateable<WmsElevatorH>().SetColumns(r => r.is_use == (int)EnumElevatorUseStatus.).Where(r => r.elevator_id == elevator.device_id).ExecuteCommandAsync();
s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.;
// 根据disTask StartLocationId 起始库位关联电梯获取设备ID location_code.Continas("")
// 根据disTask StartLocationId 起始库位关联电梯获取设备ID location_code.Continas("")
var devName = s_elevatorMap[elevator.device_id]?.ToString();
Logger.Information($"【TaskCallback】 {devName.Match(@"\d+")}#梯,设备名称:{devName},开始进入关门流程");
Logger.Information($"【TaskCallback】 {devName.Match(@"\d+")}#梯,设备名称:{devName},开始进入关门流程 {devName} 变更为空闲");
int doorStatus = await _elevatorControlService.GetTagAsync(devName, ElevatorConsts.DoorStatus);
Logger.Information($"【TaskCallback】 设备:{devName},门状态:{doorStatus.ToEnum<EnumDoorStatus>().ToString()}");
if (doorStatus.ToEnum<EnumDoorStatus>() != EnumDoorStatus.

View File

@@ -7,7 +7,6 @@
<Nullable>enable</Nullable>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<Configurations>Debug;Release</Configurations>
<ServerGarbageCollection>false</ServerGarbageCollection>
</PropertyGroup>
<ItemGroup>

View File

@@ -71,7 +71,7 @@ namespace Tnb.WarehouseMgr
private readonly ElevatorControlConfiguration _eleCtlCfg = App.Configuration.Build<ElevatorControlConfiguration>();
private static Dictionary<string, object> locMap = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);
private readonly IConfiguration _configuration;
private readonly RedisData _redisData;
private readonly StackExRedisHelper _redisData;
private readonly IVisualDevService _visualDevService;
private readonly IRunService _runService;
@@ -80,7 +80,7 @@ namespace Tnb.WarehouseMgr
public Func<string, int, Task> AddUnExecuteTask { get; set; }
public WareHouseService(ISqlSugarRepository<WmsInstockH> repository, IDictionaryDataService dictionaryDataService, RedisData redisData,
public WareHouseService(ISqlSugarRepository<WmsInstockH> repository, IDictionaryDataService dictionaryDataService, StackExRedisHelper redisData,
IBillRullService billRullService, IUserManager userManager, ICacheManager cacheManager, IElevatorControlService elevatorControlService,
IWmsCarryBindService wmsCarryBindService,
IRunService runService,
@@ -389,7 +389,7 @@ namespace Tnb.WarehouseMgr
throw new AppFriendlyException("点位" + input.targetName + "不存在", 500);
strs = putdic.Where(p => p.Key == input.targetName).First().Value;
bool flag = await _redisData.HashExist(strs[0], strs[1]);
bool flag = await _redisData.HashExists(strs[0], strs[1]);
if (!flag)
{
throw new AppFriendlyException("点位" + input.targetName + "不存在", 500);
@@ -423,7 +423,7 @@ namespace Tnb.WarehouseMgr
putdic.Add("ZS-C02-1", new string[] { "hxjC", "A3允许入空箱", });
getdic.Add("ZS-C02-2", new string[] { "hxjC", "A3允许取满箱" });
putdic.Add("ZS-C03-1", new string[] { "hxjC", "A4允许入空箱", });
getdic.Add("ZS-C03-2", new string[] { "hxjC", "A4允许取满箱" });
@@ -436,6 +436,7 @@ namespace Tnb.WarehouseMgr
putdic.Add("ZS-C06-1", new string[] { "hxjC", "A7允许入空箱", });
getdic.Add("ZS-C06-2", new string[] { "hxjC", "A7允许取满箱" });
var strs = new string[] { };
if (action == "LOAD")//取货
{
if (!getdic.ContainsKey(code))
@@ -444,15 +445,16 @@ namespace Tnb.WarehouseMgr
}
strs = getdic.Where(p => p.Key == code).First().Value;
bool flag = _redisData.HashExist(strs[0], strs[1]).Result;
bool flag = await _redisData.HashExists(strs[0], strs[1]);
Logger.Information($"【Check】 判断CTU是否可以取货1 {code} {action} flag:{flag} ");
if (!flag)
{
Logger.Information($"【Check】 判断CTU是否可以取货 {code} {action} flag:{flag} ");
return false;
}
string data = _redisData.GetHash(strs[0], strs[1]).Result;
JObject? res = JsonConvert.DeserializeObject<JObject>(data);
bool result = res != null && res["Value"] != null ? res.Value<bool>("Value") : false;
Logger.Information($"【Check】 判断CTU是否可以取货2 {code} {action} result:{result} ");
if (!result)
return false;
return true;
@@ -463,15 +465,16 @@ namespace Tnb.WarehouseMgr
return false;
strs = putdic.Where(p => p.Key == code).First().Value;
bool flag = _redisData.HashExist(strs[0], strs[1]).Result;
bool flag = await _redisData.HashExists(strs[0], strs[1]);
Logger.Information($"【Check】 判断CTU是否可以取货1 {code} {action} flag:{flag} ");
if (!flag)
{
Logger.Information($"【Check】 判断CTU是否可以取货 {code} {action} flag:{flag} ");
return false;
}
string data = _redisData.GetHash(strs[0], strs[1]).Result;
JObject? res = JsonConvert.DeserializeObject<JObject>(data);
bool result = res != null && res["Value"] != null ? res.Value<bool>("Value") : false;
Logger.Information($"【Check】 判断CTU是否可以取货2 {code} {action} result:{result} ");
if (!result)
return false;
return true;
@@ -749,7 +752,7 @@ namespace Tnb.WarehouseMgr
//JObject valueJson = new JObject();
//valueJson["Value"] = value;
//bool res = await _redisData.HSet(DevName, tag, valueJson.ToString());
//_redisData.SetHash(DevName, tag, valueJson.ToString());
//return true;
}

View File

@@ -18,6 +18,7 @@ using SqlSugar;
using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Dto;
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
using Tnb.WarehouseMgr.Entities.Dto.Outputs;
using Tnb.WarehouseMgr.Entities.Enums;
using Tnb.WarehouseMgr.Interfaces;
@@ -177,14 +178,14 @@ namespace Tnb.WarehouseMgr
/// <summary>
/// 二楼机械手
/// 绑定料箱到料架
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="ArgumentNullException"></exception>
/// <exception cref="AppFriendlyException"></exception>
[NonAction]
public async Task<dynamic> CarryBindFloor2UpDownMachine(CarryBindFloor2UpDownMachineInput input)
public async Task<Result> CarryBind(CarryBindInput input)
{
bool isOk = false;
@@ -197,6 +198,7 @@ namespace Tnb.WarehouseMgr
throw new ArgumentNullException(nameof(input));
}
await db.Ado.BeginTranAsync();
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);
if (carry != null && subCarry != null)
@@ -215,6 +217,22 @@ namespace Tnb.WarehouseMgr
{
throw Oops.Oh(ErrorCode.COM1001);
}
// 插入子载具绑定记录
VisualDevModelDataCrInput visualDevModelCrInput = new() { data = new Dictionary<string, object>() };
visualDevModelCrInput.data[nameof(WmsCarrybindH.carry_id)] = input.carry_id;
visualDevModelCrInput.data[nameof(WmsCarrybindH.carry_code)] = input.carry_code;
visualDevModelCrInput.data[nameof(WmsCarrybindH.membercarry_id)] = input.membercarry_id;
visualDevModelCrInput.data[nameof(WmsCarrybindH.membercarry_code)] = input.membercarry_code;
visualDevModelCrInput.data[nameof(WmsCarrybindH.type)] = 0;
visualDevModelCrInput.data[nameof(WmsCarrybindH.carrystd_id)] = carry.carrystd_id;
visualDevModelCrInput.data[nameof(WmsCarrybindH.create_id)] = input.create_id;
visualDevModelCrInput.data[nameof(WmsCarrybindH.create_time)] = DateTime.Now;
visualDevModelCrInput.data[nameof(WmsCarrybindH.loc)] = 1;
VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_WMSCARRYBIND_ID, true);
await _runService.Create(templateEntity, visualDevModelCrInput);
await db.Ado.CommitTranAsync();
}
else
{
@@ -226,54 +244,78 @@ namespace Tnb.WarehouseMgr
}
catch (Exception ex)
{
await db.Ado.RollbackTranAsync();
return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.InternalServerError, ex.Message);
}
}
return Task.FromResult(true);
return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.OK, "成功");
}
/// <summary>
/// 二楼机械手解绑定
/// 解绑定料箱到料架
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="ArgumentNullException"></exception>
/// <exception cref="AppFriendlyException"></exception>
[NonAction]
public async Task<dynamic> CarryUnbindFloor2UpDownMachine(CarryBindFloor2UpDownMachineInput input)
public async Task<Result> CarryUnbind(CarryBindInput input)
{
bool isOk = false;
try
using (var db = _db.CopyNew())
{
if (input == null)
try
{
throw new ArgumentNullException(nameof(input));
}
if (input == null)
{
throw new ArgumentNullException(nameof(input));
}
WmsCarryH? carry = await _db.Queryable<WmsCarryH>().SingleAsync(it => it.id == input.carry_id);
if (carry != null)
{
int row = await _db.Deleteable<WmsCarryD>().Where(r => r.carry_id == input.carry_id).ExecuteCommandAsync();
isOk = row > 0;
if (!isOk)
WmsCarryH? carry = await _db.Queryable<WmsCarryH>().SingleAsync(it => it.id == input.carry_id);
if (carry != null)
{
throw Oops.Oh(ErrorCode.COM1001);
int row = await _db.Deleteable<WmsCarryD>().Where(r => r.carry_id == input.carry_id).ExecuteCommandAsync();
isOk = row > 0;
if (!isOk)
{
throw Oops.Oh(ErrorCode.COM1001);
}
// 插入子载具绑定记录
VisualDevModelDataCrInput visualDevModelCrInput = new() { data = new Dictionary<string, object>() };
visualDevModelCrInput.data[nameof(WmsCarrybindH.carry_id)] = input.carry_id;
visualDevModelCrInput.data[nameof(WmsCarrybindH.carry_code)] = input.carry_code;
visualDevModelCrInput.data[nameof(WmsCarrybindH.membercarry_id)] = input.membercarry_id;
visualDevModelCrInput.data[nameof(WmsCarrybindH.membercarry_code)] = input.membercarry_code;
visualDevModelCrInput.data[nameof(WmsCarrybindH.type)] = 0;
visualDevModelCrInput.data[nameof(WmsCarrybindH.carrystd_id)] = carry.carrystd_id;
visualDevModelCrInput.data[nameof(WmsCarrybindH.create_id)] = input.create_id;
visualDevModelCrInput.data[nameof(WmsCarrybindH.create_time)] = DateTime.Now;
visualDevModelCrInput.data[nameof(WmsCarrybindH.loc)] = 1;
VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_WMSCARRYBIND_ID, true);
await _runService.Create(templateEntity, visualDevModelCrInput);
await db.Ado.CommitTranAsync();
}
else
{
if (carry == null)
{
throw new AppFriendlyException("没有可用的主载具", 500);
}
}
}
else
catch (Exception ex)
{
if (carry == null)
{
throw new AppFriendlyException("没有可用的主载具", 500);
}
await db.Ado.RollbackTranAsync();
return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.InternalServerError, ex.Message);
}
}
catch (Exception ex)
{
}
return Task.FromResult(true);
return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.OK, "成功");
}
/// <summary>
@@ -315,6 +357,7 @@ namespace Tnb.WarehouseMgr
}
catch (Exception ex)
{
return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.InternalServerError, ex.Message);
}
return Task.FromResult(true);
}

View File

@@ -35,6 +35,8 @@ using JNPF.Systems.Entitys.System;
using JNPF.Systems.Entitys.Permission;
using Aop.Api.Domain;
using Senparc.Weixin.Work.AdvancedAPIs.OaDataOpen;
using NPOI.SS.Formula.Functions;
using Org.BouncyCastle.Asn1.X509;
namespace Tnb.WarehouseMgr
{
@@ -52,6 +54,7 @@ namespace Tnb.WarehouseMgr
private readonly IWareHouseService _wareHouseService;
private readonly IBillRullService _billRullService;
private readonly IUserManager _userManager;
private readonly IWmsCarryBindService _wmsCarryBindService;
public static SemaphoreSlim s_taskDistributeToZCC = new(1);
@@ -62,7 +65,8 @@ namespace Tnb.WarehouseMgr
IWareHouseService wareHouseService,
IUserManager userManager,
IBillRullService billRullService,
IEventPublisher eventPublisher)
IEventPublisher eventPublisher,
IWmsCarryBindService wmsCarryBindService)
{
_db = repository.AsSugarClient();
_runService = runService;
@@ -70,6 +74,7 @@ namespace Tnb.WarehouseMgr
_wareHouseService = wareHouseService;
_userManager = userManager;
_billRullService = billRullService;
_wmsCarryBindService = wmsCarryBindService;
OverideFuncs.GetListAsync = GetList;
}
@@ -650,8 +655,8 @@ namespace Tnb.WarehouseMgr
.Where((a, b) => input.details.Select(r => r.carry_code).Contains(a.carry_code)).Select((a, b) => b).ToList();
if (wmsCarryCodes.Count > 0)
{
Logger.LogWarning($"【RackEmptyInstock】存在非空料箱{string.Join(',', wmsCarryCodes.Select(r => r.carry_code).Distinct())},不能入库!{input.carry_code}");
throw new AppFriendlyException($"【RackEmptyInstock】存在非空料箱{string.Join(',', wmsCarryCodes.Select(r => r.carry_code).Distinct())},不能入库!{input.carry_code}", 500);
Logger.LogWarning($"【RackEmptyInstock】存在非空料箱不能入库{input.carry_code}");
throw new AppFriendlyException($"【RackEmptyInstock】存在非空料箱不能入库{input.carry_code}", 500);
}
}
@@ -668,10 +673,45 @@ namespace Tnb.WarehouseMgr
BasLocation endlocation = rackEndLocations.First();
WmsCarryH wmsCarryH = await _db.Queryable<WmsCarryH>().Where(r => r.carry_code == input.carry_code).FirstAsync();
// 重新绑定料箱到料架
// 清空料架
Logger.LogWarning($"【RackEmptyInstock】清空料架");
CommonCreatePretaskInput commonCreatePretaskInput = new CommonCreatePretaskInput();
List<WmsCarryH> membercarrys = _db.Queryable<WmsCarryH>().Where(r => input.details.Select(r => r.carry_code).Contains(r.carry_code)).ToList();
await _db.Ado.BeginTranAsync();
// 解除绑定料箱到料架
CarryBindInput carryBindInput = new();
carryBindInput.carry_id = wmsCarryH.id;
carryBindInput.carry_code = wmsCarryH.carry_code;
var resCarryUnbind = await _wmsCarryBindService.CarryUnbind(carryBindInput);
if (resCarryUnbind.code != JNPF.Common.Enums.HttpStatusCode.OK)
{
throw new AppFriendlyException($"解除绑定料箱到料架失败 载具 {input.carry_code}", 500);
}
Logger.LogWarning($"【RackEmptyInstock】绑定料箱到料架");
foreach (WmsCarryH membercarry in membercarrys)
{
// 绑定料箱到料架
CarryBindInput _carryBindInput = new();
_carryBindInput.carry_id = wmsCarryH.id;
_carryBindInput.carry_code = wmsCarryH.carry_code;
_carryBindInput.membercarry_id = membercarry.id;
_carryBindInput.membercarry_code = membercarry.carry_code;
_carryBindInput.carrystd_id = wmsCarryH.carrystd_id;
var resCarrybind = await _wmsCarryBindService.CarryBind(_carryBindInput);
if (resCarrybind.code != JNPF.Common.Enums.HttpStatusCode.OK)
{
throw new AppFriendlyException($"绑定料箱到料架失败 载具 {input.carry_code}", 500);
}
}
Logger.LogWarning($"【RackEmptyInstock】开始生成预任务");
CommonCreatePretaskInput commonCreatePretaskInput = new ();
commonCreatePretaskInput.startlocation_id = startlocation.id;
commonCreatePretaskInput.endlocation_id = endlocation.id;
commonCreatePretaskInput.carry_id = wmsCarryH.id;
commonCreatePretaskInput.carry_code = input.carry_code;
commonCreatePretaskInput.task_type = "";
commonCreatePretaskInput.biz_type = "FloorCallMaterial";
@@ -682,11 +722,14 @@ namespace Tnb.WarehouseMgr
Logger.LogInformation($"【RackEmptyInstock】生成预任务失败 载具 {input.carry_code}");
throw new AppFriendlyException($"生成预任务失败 载具 {input.carry_code}", 500);
}
Logger.LogWarning($"【RackEmptyInstock】生成预任务成功");
await _db.Ado.CommitTranAsync();
}
catch (Exception ex)
{
Logger.LogError("【RackEmptyInstock】" + ex.Message);
Logger.LogError("【RackEmptyInstock】" + ex.StackTrace);
await _db.Ado.RollbackTranAsync();
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
}