电梯代码调整
This commit is contained in:
@@ -1,5 +1,8 @@
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using JNPF;
|
using JNPF;
|
||||||
|
using JNPF.Common.Extension;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using SqlSugar;
|
using SqlSugar;
|
||||||
using Tnb.WarehouseMgr.Entities;
|
using Tnb.WarehouseMgr.Entities;
|
||||||
@@ -16,6 +19,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
private static SqlSugarScope context;
|
private static SqlSugarScope context;
|
||||||
private readonly ISqlSugarClient _db;
|
private readonly ISqlSugarClient _db;
|
||||||
public static Dictionary<string, int> s_eleUseStatusDic = new();
|
public static Dictionary<string, int> s_eleUseStatusDic = new();
|
||||||
|
public static Dictionary<string, int> s_loadedStatusDic = new();
|
||||||
|
|
||||||
static DevServBase()
|
static DevServBase()
|
||||||
{
|
{
|
||||||
@@ -55,16 +59,28 @@ namespace Tnb.WarehouseMgr
|
|||||||
/// endlocation_id:目标库位ID
|
/// endlocation_id:目标库位ID
|
||||||
/// </param>
|
/// </param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
|
|
||||||
protected async Task<WmsElevatorH> FindElevatorFromPars(ElevagorInfoQuery input)
|
protected async Task<WmsElevatorH> FindElevatorFromPars(ElevagorInfoQuery input)
|
||||||
{
|
{
|
||||||
|
var whereExpable = Expressionable.Create<WmsElevatorH, WmsElevatorD, WmsDistaskH>()
|
||||||
|
.And((a, b, c) => a.enabled == 1);
|
||||||
|
if (!input.taskCode.IsNullOrEmpty())
|
||||||
|
{
|
||||||
|
whereExpable.AndIF(!SqlFunc.IsNullOrEmpty(input.taskCode), (a, b, c) => c.bill_code == input.taskCode);
|
||||||
|
}
|
||||||
|
if (!input.endlocation_id.IsNullOrEmpty())
|
||||||
|
{
|
||||||
|
whereExpable.AndIF(!SqlFunc.IsNullOrEmpty(input.endlocation_id), (a, b, c) => b.location_id == input.endlocation_id);
|
||||||
|
}
|
||||||
|
if (!input.startlocation_id.IsNullOrEmpty())
|
||||||
|
{
|
||||||
|
whereExpable.AndIF(!SqlFunc.IsNullOrEmpty(input.startlocation_id), (a, b, c) => b.location_id == input.startlocation_id);
|
||||||
|
}
|
||||||
var ele = await _db.CopyNew().Queryable<WmsElevatorH>().InnerJoin<WmsElevatorD>((a, b) => a.id == b.bill_id)
|
var ele = await _db.CopyNew().Queryable<WmsElevatorH>().InnerJoin<WmsElevatorD>((a, b) => a.id == b.bill_id)
|
||||||
.InnerJoin<WmsDistaskH>((a, b, c) => b.location_code == c.endlocation_code || b.location_code == c.startpoint_code)
|
.InnerJoin<WmsDistaskH>((a, b, c) => b.location_code == c.endlocation_code || b.location_code == c.startlocation_code)
|
||||||
.Where((a, b, c) => a.enabled == 1)
|
.Where(whereExpable.ToExpression())
|
||||||
.WhereIF(!SqlFunc.IsNullOrEmpty(input.taskCode), (a, b, c) => c.bill_code == input.taskCode)
|
|
||||||
.WhereIF(!SqlFunc.IsNullOrEmpty(input.endlocation_id), (a, b, c) => b.location_id == input.endlocation_id)
|
|
||||||
.WhereIF(!SqlFunc.IsNullOrEmpty(input.startlocation_id), (a, b, c) => b.location_id == input.startlocation_id)
|
|
||||||
.WhereIF(!SqlFunc.IsNullOrEmpty(input.sourceName) && SqlFunc.StartsWith("DT-R", input.sourceName), (a, b, c) => c.startpoint_code == input.sourceName)
|
.WhereIF(!SqlFunc.IsNullOrEmpty(input.sourceName) && SqlFunc.StartsWith("DT-R", input.sourceName), (a, b, c) => c.startpoint_code == input.sourceName)
|
||||||
.WhereIF(!SqlFunc.IsNullOrEmpty(input.sourceName) && SqlFunc.StartsWith("DT-C", input.sourceName), (a, b, c) => c.endpoint_code == input.sourceName)
|
//.WhereIF(!SqlFunc.IsNullOrEmpty(input.sourceName) && SqlFunc.StartsWith("DT-C", input.sourceName), (a, b, c) => c.endpoint_code == input.sourceName)
|
||||||
.Select((a, b, c) => new WmsElevatorH
|
.Select((a, b, c) => new WmsElevatorH
|
||||||
{
|
{
|
||||||
bill_code = c.bill_code,
|
bill_code = c.bill_code,
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ 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;
|
||||||
|
private static bool unLoadComplete = true; //是否放货完成
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -67,6 +68,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
foreach (var (k, _) in s_elevatorMap)
|
foreach (var (k, _) in s_elevatorMap)
|
||||||
{
|
{
|
||||||
s_eleUseStatusDic[k] = 0;
|
s_eleUseStatusDic[k] = 0;
|
||||||
|
s_loadedStatusDic[k] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -109,7 +111,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
.FirstAsync();*/
|
.FirstAsync();*/
|
||||||
Logger.Information($"当前取货,子任务编号:{input.taskCode}");
|
Logger.Information($"当前取货,子任务编号:{input.taskCode}");
|
||||||
|
|
||||||
ElevagorInfoQuery q = new() { taskCode = input.taskCode };
|
ElevagorInfoQuery q = new() { taskCode = input.taskCode, sourceName = input.sourceName };
|
||||||
WmsElevatorH elevator = await FindElevatorFromPars(q);
|
WmsElevatorH elevator = await FindElevatorFromPars(q);
|
||||||
if (elevator.IsNull())
|
if (elevator.IsNull())
|
||||||
{
|
{
|
||||||
@@ -121,7 +123,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
{
|
{
|
||||||
if (s_elevatorMap.TryGetValue(elevator.device_id, out object? elevatorCode))
|
if (s_elevatorMap.TryGetValue(elevator.device_id, out object? elevatorCode))
|
||||||
{
|
{
|
||||||
s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.空闲;
|
//s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.空闲;
|
||||||
string devName = elevatorCode?.ToString();
|
string devName = elevatorCode?.ToString();
|
||||||
Logger.Information($"获取设备:{devName},状态");
|
Logger.Information($"获取设备:{devName},状态");
|
||||||
var tags = _eleCtlCfg.tags;
|
var tags = _eleCtlCfg.tags;
|
||||||
@@ -134,9 +136,9 @@ namespace Tnb.WarehouseMgr
|
|||||||
var loadedStatus = s_eleUseStatusDic[elevator.device_id] == 1 ? "完成" : "未完成";
|
var loadedStatus = s_eleUseStatusDic[elevator.device_id] == 1 ? "完成" : "未完成";
|
||||||
Logger.Information($"{devName.Match(@"\d+")}#梯,取货-> {loadedStatus}");
|
Logger.Information($"{devName.Match(@"\d+")}#梯,取货-> {loadedStatus}");
|
||||||
*/
|
*/
|
||||||
if (s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus.空闲 && curFloor != floorNo)
|
if (s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus.空闲 &&curFloor != floorNo)
|
||||||
{
|
{
|
||||||
_ = await _elevatorControlService.CallLift(devName, elevator.end_floor, CancellationToken.None);
|
_ = await _elevatorControlService.CallLift(devName, curFloor, CancellationToken.None);
|
||||||
}
|
}
|
||||||
if (curFloor != floorNo)
|
if (curFloor != floorNo)
|
||||||
{
|
{
|
||||||
@@ -178,6 +180,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
{
|
{
|
||||||
Logger.Information("放货确认..................");
|
Logger.Information("放货确认..................");
|
||||||
Logger.Information($"当前放货,任务编号:{input.taskCode}");
|
Logger.Information($"当前放货,任务编号:{input.taskCode}");
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
/*var whereExp = Expressionable.Create<WmsElevatorH, WmsElevatorD, WmsDistaskH>()
|
/*var whereExp = Expressionable.Create<WmsElevatorH, WmsElevatorD, WmsDistaskH>()
|
||||||
@@ -197,7 +200,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
device_id = a.elevator_id,
|
device_id = a.elevator_id,
|
||||||
}, true)
|
}, true)
|
||||||
.FirstAsync();*/
|
.FirstAsync();*/
|
||||||
ElevagorInfoQuery q = new() { taskCode = input.taskCode };
|
ElevagorInfoQuery q = new() { taskCode = input.taskCode, sourceName = input.sourceName };
|
||||||
WmsElevatorH elevator = await FindElevatorFromPars(q);
|
WmsElevatorH elevator = await FindElevatorFromPars(q);
|
||||||
if (elevator.IsNull())
|
if (elevator.IsNull())
|
||||||
{
|
{
|
||||||
@@ -205,8 +208,14 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
if (s_elevatorMap.TryGetValue(elevator.device_id, out object? elevatorCode))
|
if (s_elevatorMap.TryGetValue(elevator.device_id, out object? elevatorCode))
|
||||||
{
|
{
|
||||||
|
|
||||||
string devName = elevatorCode?.ToString();
|
string devName = elevatorCode?.ToString();
|
||||||
|
|
||||||
|
Logger.Information($"当前放货设备ID:{elevator.device_id}");
|
||||||
|
var loadedStatus = s_eleUseStatusDic[elevator.device_id] == 1 ? "占用" : "空闲";
|
||||||
|
Logger.Information($"{devName.Match(@"\d+")}#梯,状态-> {loadedStatus}");
|
||||||
Logger.Information($"获取设备:{devName},状态");
|
Logger.Information($"获取设备:{devName},状态");
|
||||||
|
//await Task.Delay(3000);
|
||||||
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(devName, _eleCtlCfg.tags, CancellationToken.None);//elevator.elevator_code
|
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(devName, _eleCtlCfg.tags, CancellationToken.None);//elevator.elevator_code
|
||||||
Logger.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum<EnumSysStatus>()},运行状态:{runStatus},门状态:{doorStatus},Agv状态:{agvStatus},当前楼层:{floorNo}");
|
Logger.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum<EnumSysStatus>()},运行状态:{runStatus},门状态:{doorStatus},Agv状态:{agvStatus},当前楼层:{floorNo}");
|
||||||
//判断Agv电梯是否进入状态
|
//判断Agv电梯是否进入状态
|
||||||
@@ -216,19 +225,22 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
|
|
||||||
var curFloor = await GetRealFloor(elevator.end_floor);
|
var curFloor = await GetRealFloor(elevator.end_floor);
|
||||||
Logger.Information($"当前放货设备ID:{elevator.device_id}");
|
|
||||||
var loadedStatus = s_eleUseStatusDic[elevator.device_id] == 1 ? "占用" : "空闲";
|
|
||||||
Logger.Information($"{devName.Match(@"\d+")}#梯,状态-> {loadedStatus}");
|
|
||||||
|
|
||||||
if (s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus.空闲 && curFloor != floorNo)
|
if (s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus.空闲 && curFloor != floorNo)
|
||||||
{
|
{
|
||||||
_ = await _elevatorControlService.CallLift(devName, elevator.end_floor, CancellationToken.None);
|
_ = await _elevatorControlService.CallLift(devName, curFloor, CancellationToken.None);
|
||||||
}
|
}
|
||||||
if (curFloor != floorNo)
|
if (curFloor != floorNo)
|
||||||
{
|
{
|
||||||
return await ToApiResult(HttpStatusCode.InternalServerError, "电梯还未开门,请重试!");
|
return await ToApiResult(HttpStatusCode.InternalServerError, "电梯还未开门,请重试!");
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.Information($"当前楼层:{curFloor},电梯所在楼层:{floorNo}");
|
Logger.Information($"当前楼层:{curFloor},电梯所在楼层:{floorNo}");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (doorStatus == (int)EnumDoorStatus.开门到位保持 && s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus.占用)
|
if (doorStatus == (int)EnumDoorStatus.开门到位保持 && s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus.占用)
|
||||||
{
|
{
|
||||||
Logger.Information($"{devName.Match(@"\d+")}#梯,任务未完成");
|
Logger.Information($"{devName.Match(@"\d+")}#梯,任务未完成");
|
||||||
@@ -241,7 +253,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sysStatus == (int)EnumSysStatus.正常状态 && runStatus == (int)EnumRunStatus.停梯
|
if (sysStatus == (int)EnumSysStatus.正常状态 && runStatus == (int)EnumRunStatus.停梯
|
||||||
&& doorStatus == (int)EnumDoorStatus.开门到位保持)
|
&& doorStatus == (int)EnumDoorStatus.开门到位保持 && s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus.空闲)
|
||||||
{
|
{
|
||||||
s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.占用;
|
s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.占用;
|
||||||
Logger.Information($"当前电梯状态:{s_eleUseStatusDic[elevator.device_id].ToEnum<EnumElevatorUseStatus>().ToString()}");
|
Logger.Information($"当前电梯状态:{s_eleUseStatusDic[elevator.device_id].ToEnum<EnumElevatorUseStatus>().ToString()}");
|
||||||
@@ -298,7 +310,9 @@ namespace Tnb.WarehouseMgr
|
|||||||
case "CANCELLED": break;
|
case "CANCELLED": break;
|
||||||
case "SUCCEED": break;
|
case "SUCCEED": break;
|
||||||
case "FAILURE": break;
|
case "FAILURE": break;
|
||||||
case "FINISHED": break;
|
case "FINISHED":
|
||||||
|
|
||||||
|
break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -351,7 +365,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
List<WmsDistaskH> disTasks = new() { disTask };
|
List<WmsDistaskH> disTasks = new() { disTask };
|
||||||
if (input.action == "LOAD")
|
if (input.action == "LOAD")
|
||||||
{
|
{
|
||||||
|
unLoadComplete = true;
|
||||||
TaskExecuteAfterUpInput taskExecuteAfterUpInput = new()
|
TaskExecuteAfterUpInput taskExecuteAfterUpInput = new()
|
||||||
{
|
{
|
||||||
disTaskIds = disTasks.Select(x => x.id).ToList()
|
disTaskIds = disTasks.Select(x => x.id).ToList()
|
||||||
@@ -360,27 +374,33 @@ namespace Tnb.WarehouseMgr
|
|||||||
await _wareHouseService.TaskExecuteAfter(taskExecuteAfterUpInput);
|
await _wareHouseService.TaskExecuteAfter(taskExecuteAfterUpInput);
|
||||||
Logger.Information($"Agv取货完成,任务编号:{string.Join(",", disTasks.Select(x => x.bill_code))}");
|
Logger.Information($"Agv取货完成,任务编号:{string.Join(",", disTasks.Select(x => x.bill_code))}");
|
||||||
|
|
||||||
|
|
||||||
if (disTask != null && !disTask.startlocation_code.StartsWith("DT", StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
return await ToApiResult(HttpStatusCode.OK, "成功");
|
|
||||||
}
|
|
||||||
//根据Agv传递的参数获取,对应的电梯
|
//根据Agv传递的参数获取,对应的电梯
|
||||||
ElevagorInfoQuery q = new() { taskCode = input.taskCode };
|
|
||||||
WmsElevatorH elevator = await FindElevatorFromPars(q);
|
if(!input.sourceName.IsNullOrWhiteSpace() && input.sourceName.Contains("DT-R", StringComparison.OrdinalIgnoreCase))
|
||||||
//s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.空闲;
|
|
||||||
Logger.Information($"当前取货设备ID:{elevator.device_id}");
|
|
||||||
//根据disTask StartLocationId 起始库位关联电梯获取设备ID location_code.Continas("")
|
|
||||||
var devName = s_elevatorMap[elevator.device_id]?.ToString();
|
|
||||||
Logger.Information($"{devName.Match(@"\d+")}#梯,设备名称:{devName},开始进入关门流程");
|
|
||||||
int doorStatus = await _elevatorControlService.GetTagAsync(devName, ElevatorConsts.DoorStatus);
|
|
||||||
Logger.Information($"设备:{devName},门状态:{doorStatus.ToEnum<EnumDoorStatus>().ToString()}");
|
|
||||||
if (doorStatus.ToEnum<EnumDoorStatus>() != EnumDoorStatus.关门到位保持
|
|
||||||
&& !disTask.endlocation_code.StartsWith("DT", StringComparison.OrdinalIgnoreCase)
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
_ = await _elevatorControlService.SendOpenCloseCmd(devName, 4); //向电梯发送前门关门指令
|
ElevagorInfoQuery q = new() { taskCode = input.taskCode };
|
||||||
|
if (!input.sourceName.IsNullOrEmpty())
|
||||||
|
{
|
||||||
|
q = new() { taskCode = input.taskCode, sourceName = input.sourceName };
|
||||||
|
}
|
||||||
|
WmsElevatorH elevator = await FindElevatorFromPars(q);
|
||||||
|
if (!elevator?.device_id.IsNullOrEmpty() ?? false)
|
||||||
|
{
|
||||||
|
s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.空闲;
|
||||||
|
// 根据disTask StartLocationId 起始库位关联电梯获取设备ID location_code.Continas("")
|
||||||
|
var devName = s_elevatorMap[elevator.device_id]?.ToString();
|
||||||
|
Logger.Information($"{devName.Match(@"\d+")}#梯,设备名称:{devName},开始进入关门流程");
|
||||||
|
int doorStatus = await _elevatorControlService.GetTagAsync(devName, ElevatorConsts.DoorStatus);
|
||||||
|
Logger.Information($"设备:{devName},门状态:{doorStatus.ToEnum<EnumDoorStatus>().ToString()}");
|
||||||
|
if (doorStatus.ToEnum<EnumDoorStatus>() != EnumDoorStatus.关门到位保持
|
||||||
|
)//&& !disTask.endlocation_code.StartsWith("DT", StringComparison.OrdinalIgnoreCase)
|
||||||
|
{
|
||||||
|
_ = await _elevatorControlService.SendOpenCloseCmd(devName, 4); //向电梯发送前门关门指令
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WmsElevatorUnexecute elevatorQueueItem = await _db.Queryable<WmsElevatorUnexecute>().FirstAsync(it => disTasks.Select(x => x.id).Contains(it.distask_id) && it.task_status == "执行中");
|
WmsElevatorUnexecute elevatorQueueItem = await _db.Queryable<WmsElevatorUnexecute>().FirstAsync(it => disTasks.Select(x => x.id).Contains(it.distask_id) && it.task_status == "执行中");
|
||||||
if (elevatorQueueItem != null)
|
if (elevatorQueueItem != null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -272,7 +272,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
//一楼中储仓CTU
|
//一楼中储仓CTU
|
||||||
CTUTaskExecute(db);
|
//CTUTaskExecute(db);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -317,9 +317,9 @@ namespace Tnb.WarehouseMgr
|
|||||||
var elePreTasks = preTasks.Where(it => it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)).ToList();
|
var elePreTasks = preTasks.Where(it => it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)).ToList();
|
||||||
var normalPreTasks = preTasks.Where(it => !agvElevatorTasks.Concat(elePreTasks).Select(x => x.endlocation_code).Contains(it.endlocation_code)).ToList();
|
var normalPreTasks = preTasks.Where(it => !agvElevatorTasks.Concat(elePreTasks).Select(x => x.endlocation_code).Contains(it.endlocation_code)).ToList();
|
||||||
|
|
||||||
IEnumerable<WmsPretaskH?> firstEleGrp = agvElevatorTasks.GroupBy(g => g.endlocation_code).Select(t => t.OrderBy(o => o.bill_code).FirstOrDefault());
|
/* IEnumerable<WmsPretaskH?> firstEleGrp = agvElevatorTasks.GroupBy(g => g.endlocation_code).Select(t => t.OrderBy(o => o.bill_code).FirstOrDefault());
|
||||||
agvElevatorTasks = firstEleGrp?.ToList() ?? Enumerable.Empty<WmsPretaskH>().ToList()!;
|
agvElevatorTasks = firstEleGrp?.ToList() ?? Enumerable.Empty<WmsPretaskH>().ToList()!;
|
||||||
|
*/
|
||||||
|
|
||||||
//如果电梯任务,预Agv任务存在相同目标库位,删除Agv任务保证电梯任务先行
|
//如果电梯任务,预Agv任务存在相同目标库位,删除Agv任务保证电梯任务先行
|
||||||
var equalEndLocPreTasks = elePreTasks.Select(x => x.endlocation_code).Intersect(agvElevatorTasks.Select(x => x.endlocation_code));
|
var equalEndLocPreTasks = elePreTasks.Select(x => x.endlocation_code).Intersect(agvElevatorTasks.Select(x => x.endlocation_code));
|
||||||
|
|||||||
@@ -213,14 +213,16 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
throw new AppFriendlyException("没有匹配的空载具可以出库", 500);
|
throw new AppFriendlyException("没有匹配的空载具可以出库", 500);
|
||||||
}
|
}
|
||||||
|
|
||||||
await _db.Ado.CommitTranAsync();
|
await _db.Ado.CommitTranAsync();
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
Logger.Information($"空载具出库错误", ex);
|
||||||
await _db.Ado.RollbackTranAsync();
|
await _db.Ado.RollbackTranAsync();
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -115,20 +115,39 @@ namespace Tnb.WarehouseMgr
|
|||||||
return Task.FromResult(_configuration["TestLocation"]);
|
return Task.FromResult(_configuration["TestLocation"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<WmsElevatorH> GetElevatorByBillCode(ElevagorInfoQuery input)
|
[AllowAnonymous,HttpPost]
|
||||||
|
public async Task<WmsElevatorH> ElevatorByBillCode([FromBody]ElevagorInfoQuery input)
|
||||||
{
|
{
|
||||||
|
var whereExpable = Expressionable.Create<WmsElevatorH, WmsElevatorD, WmsDistaskH>()
|
||||||
|
.And((a, b, c) => a.enabled == 1);
|
||||||
|
if (!input.taskCode.IsNullOrEmpty())
|
||||||
|
{
|
||||||
|
whereExpable.AndIF(!SqlFunc.IsNullOrEmpty(input.taskCode), (a, b, c) => c.bill_code == input.taskCode);
|
||||||
|
}
|
||||||
|
if (!input.endlocation_id.IsNullOrEmpty())
|
||||||
|
{
|
||||||
|
whereExpable.AndIF(!SqlFunc.IsNullOrEmpty(input.endlocation_id), (a, b, c) => b.location_id == input.endlocation_id);
|
||||||
|
}
|
||||||
|
if (!input.startlocation_id.IsNullOrEmpty())
|
||||||
|
{
|
||||||
|
whereExpable.AndIF(!SqlFunc.IsNullOrEmpty(input.startlocation_id), (a, b, c) => b.location_id == input.startlocation_id);
|
||||||
|
}
|
||||||
var ele = await _db.CopyNew().Queryable<WmsElevatorH>().InnerJoin<WmsElevatorD>((a, b) => a.id == b.bill_id)
|
var ele = await _db.CopyNew().Queryable<WmsElevatorH>().InnerJoin<WmsElevatorD>((a, b) => a.id == b.bill_id)
|
||||||
.InnerJoin<WmsDistaskH>((a, b, c) => b.location_code == c.endlocation_code)
|
.InnerJoin<WmsDistaskH>((a, b, c) => b.location_code == c.endlocation_code || b.location_code == c.startlocation_code)
|
||||||
.WhereIF(SqlFunc.IsNullOrEmpty(input.taskCode), (a, b, c) => c.bill_code == input.taskCode)
|
.Where(whereExpable.ToExpression())
|
||||||
.WhereIF(SqlFunc.IsNullOrEmpty(input.endlocation_id), (a, b, c) => c.endlocation_id == input.endlocation_id)
|
.WhereIF(!SqlFunc.IsNullOrEmpty(input.sourceName) && SqlFunc.StartsWith("DT-R", input.sourceName), (a, b, c) => c.startpoint_code == input.sourceName)
|
||||||
.Select((a, b, c) => new WmsElevatorH { bill_code = c.bill_code, device_id = a.elevator_id }, true)
|
.WhereIF(!SqlFunc.IsNullOrEmpty(input.sourceName) && SqlFunc.StartsWith("DT-C", input.sourceName), (a, b, c) => c.endpoint_code == input.sourceName)
|
||||||
|
.Select((a, b, c) => new WmsElevatorH
|
||||||
|
{
|
||||||
|
bill_code = c.bill_code,
|
||||||
|
device_id = a.elevator_id,
|
||||||
|
end_floor = c.end_floor
|
||||||
|
}, true)
|
||||||
.FirstAsync();
|
.FirstAsync();
|
||||||
//_db.Aop.OnLogExecuting = (sql, args) =>
|
|
||||||
//{
|
|
||||||
// var q = sql;
|
|
||||||
// Console.WriteLine("sql stat:" + sql);
|
|
||||||
//};
|
|
||||||
return ele;
|
return ele;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user