Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
@@ -1866,21 +1866,70 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
List<WmsDistaskH> wmsDistaskHs = db_ElevatorTaskExceptionHandle.Queryable<WmsDistaskH>()
|
List<WmsDistaskH> elevatorTasks = db_ElevatorTaskExceptionHandle.Queryable<WmsDistaskH>()
|
||||||
.Where(r => r.startlocation_code.Contains("DT") && r.endlocation_code.Contains("DT") && r.act_start_date == null && r.act_end_date == null).ToList();
|
.Where(r => r.startlocation_code.Contains("DT") && r.endlocation_code.Contains("DT") && r.act_start_date == null && r.act_end_date == null).ToList();
|
||||||
|
|
||||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】检查到需要恢复的电梯任务{wmsDistaskHs.Count}条 {string.Join(',', wmsDistaskHs.Select(x => x.bill_code))}");
|
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】检查到需要恢复的电梯任务{elevatorTasks.Count}条 {string.Join(',', elevatorTasks.Select(x => x.bill_code))}");
|
||||||
foreach (WmsDistaskH wmsDistaskH in wmsDistaskHs)
|
|
||||||
{
|
|
||||||
ElevagorInfoQuery q = new() { endlocation_id = wmsDistaskH.endlocation_id, taskCode = wmsDistaskH.bill_code };
|
|
||||||
|
|
||||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】执行电梯任务时 根据任务单号获取电梯参数 {JsonConvert.SerializeObject(q)}");
|
|
||||||
|
if (elevatorTasks?.Count > 0)
|
||||||
|
{
|
||||||
|
List<IGrouping<string, WmsDistaskH>> elevatorTaskGroup = elevatorTasks.GroupBy(r => $"{r.endlocation_code} {r.end_floor}").ToList();
|
||||||
|
foreach (IGrouping<string, WmsDistaskH> group in elevatorTaskGroup)
|
||||||
|
{
|
||||||
|
List<WmsDistaskH> wmsDistaskHs = group.ToList();
|
||||||
|
ElevagorInfoQuery q = new() { endlocation_id = wmsDistaskHs[0].endlocation_id, taskCode = wmsDistaskHs[0].bill_code };
|
||||||
|
LoggerElevatorTask.Information($"【GenTaskExecute】执行电梯任务时 根据任务单号获取电梯参数 {JsonConvert.SerializeObject(q)}");
|
||||||
var e = await _wareHouseService.FindElevatorFromPars(q);
|
var e = await _wareHouseService.FindElevatorFromPars(q);
|
||||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】执行电梯任务时 根据任务单号获取电梯结果 {JsonConvert.SerializeObject(e)}");
|
LoggerElevatorTask.Information($"【GenTaskExecute】执行电梯任务时 根据任务单号获取电梯结果 {JsonConvert.SerializeObject(e)}");
|
||||||
if (e == null)
|
|
||||||
continue;
|
// 三、四号梯发货带两托货
|
||||||
wmsDistaskH.device_id = e.device_id;
|
string[] doubleCarryRunElevators =
|
||||||
await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskH);
|
{
|
||||||
|
"Elevator3","Elevator4"
|
||||||
|
};
|
||||||
|
if (doubleCarryRunElevators.Contains(e.elevator_code) && wmsDistaskHs[0].end_floor == 1)
|
||||||
|
{
|
||||||
|
// 电梯内放置两托货呼叫电梯下
|
||||||
|
if (group.Count() == 2)
|
||||||
|
{
|
||||||
|
if (e != null)
|
||||||
|
{
|
||||||
|
wmsDistaskHs[0].device_id = e.device_id;
|
||||||
|
wmsDistaskHs[1].device_id = e.device_id;
|
||||||
|
}
|
||||||
|
await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs);
|
||||||
|
}
|
||||||
|
// 一托货
|
||||||
|
else if (group.Count() == 1)
|
||||||
|
{
|
||||||
|
// 如果当前电梯没有执行中的任务 则呼叫电梯下
|
||||||
|
|
||||||
|
if (db_ElevatorTaskExceptionHandle.Queryable<WmsDistaskH>().Where(r => r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID
|
||||||
|
&& r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.endlocation_id == wmsDistaskHs[0].startlocation_id).Count() == 0)
|
||||||
|
{
|
||||||
|
if (e != null)
|
||||||
|
{
|
||||||
|
wmsDistaskHs[0].device_id = e.device_id;
|
||||||
|
}
|
||||||
|
await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LoggerElevatorTask.LogError($"电梯 {e.elevator_code} 待执行的电梯任务数异常 目前是{group.Count()} 超过了两托");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (e != null)
|
||||||
|
{
|
||||||
|
wmsDistaskHs[0].device_id = e.device_id;
|
||||||
|
}
|
||||||
|
await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ namespace Tnb.WarehouseMgr.Entities.Dto.ErpInputs
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 单号
|
/// 单号
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string? outsource_order { get; set; }
|
public string? transfer_order { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 联系人
|
/// 联系人
|
||||||
@@ -23,6 +23,16 @@ namespace Tnb.WarehouseMgr.Entities.Dto.ErpInputs
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string? tel { get; set; }
|
public string? tel { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 部门编码
|
||||||
|
/// </summary>
|
||||||
|
public string? dept_code { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 业务员编码
|
||||||
|
/// </summary>
|
||||||
|
public string? biller { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 出库组织编号
|
/// 出库组织编号
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -109,4 +109,14 @@ public partial class WmsRawmatTransferinstockH : BaseEntity<string>
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string? erp_bill_code { get; set; }
|
public string? erp_bill_code { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 部门编码
|
||||||
|
/// </summary>
|
||||||
|
public string? dept_code { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 业务员编码
|
||||||
|
/// </summary>
|
||||||
|
public string? biller { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,6 @@
|
|||||||
KIVA = 2,
|
KIVA = 2,
|
||||||
AGV = 3,
|
AGV = 3,
|
||||||
电梯 = 4,
|
电梯 = 4,
|
||||||
输送线 = 5,
|
电梯载两托货 = 5,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -183,7 +183,7 @@ namespace Tnb.WarehouseMgr.Interfaces
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="disTask"></param>
|
/// <param name="disTask"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task ExecuteTargetFloorTask(WmsDistaskH disTask);
|
Task ExecuteTargetFloorTask(List<WmsDistaskH> disTasks);
|
||||||
|
|
||||||
Task<WmsElevatorH> FindElevatorFromPars(ElevagorInfoQuery input);
|
Task<WmsElevatorH> FindElevatorFromPars(ElevagorInfoQuery input);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,6 +52,9 @@ namespace Tnb.WarehouseMgr
|
|||||||
public static SemaphoreSlim _s_taskExecuteSemaphore_YCLOutstock = new(1);
|
public static SemaphoreSlim _s_taskExecuteSemaphore_YCLOutstock = new(1);
|
||||||
|
|
||||||
|
|
||||||
|
public static SemaphoreSlim _s_taskExecuteSemaphore_F1ZCCInstock = new(1);
|
||||||
|
public static SemaphoreSlim _s_taskExecuteSemaphore_F1ZCCOutstock = new(1);
|
||||||
|
|
||||||
protected static Dictionary<string, int> _s_eleUseStatusDic;
|
protected static Dictionary<string, int> _s_eleUseStatusDic;
|
||||||
|
|
||||||
protected IEventPublisher? EventPublisher { set; get; }
|
protected IEventPublisher? EventPublisher { set; get; }
|
||||||
@@ -189,9 +192,31 @@ namespace Tnb.WarehouseMgr
|
|||||||
/// <param name="floor"></param>
|
/// <param name="floor"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[NonAction]
|
[NonAction]
|
||||||
protected Task<int> GetRealFloor(int floor)
|
protected Task<int> GetRealFloor(string elevator_code, int floor)
|
||||||
{
|
{
|
||||||
int realFloor = 0;
|
int realFloor = 0;
|
||||||
|
|
||||||
|
if (elevator_code == "Elevator1")
|
||||||
|
{
|
||||||
|
if (floor == 4)
|
||||||
|
{
|
||||||
|
realFloor = 6;
|
||||||
|
}
|
||||||
|
else if (floor == 3)
|
||||||
|
{
|
||||||
|
realFloor = 5;
|
||||||
|
}
|
||||||
|
else if (floor == 2)
|
||||||
|
{
|
||||||
|
realFloor = 4;
|
||||||
|
}
|
||||||
|
else if (floor == 1)
|
||||||
|
{
|
||||||
|
realFloor = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
if (floor == 4)
|
if (floor == 4)
|
||||||
{
|
{
|
||||||
realFloor = 5;
|
realFloor = 5;
|
||||||
@@ -208,6 +233,8 @@ namespace Tnb.WarehouseMgr
|
|||||||
{
|
{
|
||||||
realFloor = 1;
|
realFloor = 1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return Task.FromResult(realFloor);
|
return Task.FromResult(realFloor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -172,7 +172,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
(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>()},门状态:{doorStatus},Agv状态:{agvStatus.ToEnum<EnumAgvStatus>()},当前楼层:{floorNo},电梯占用状态{s_eleUseStatusDic[elevator.device_id]}");
|
Logger.Information($"【LoadConfirm】 电梯当前状态->系统状态:{sysStatus.ToEnum<EnumSysStatus>()},运行状态:{runStatus.ToEnum<EnumRunStatus>()},门状态:{doorStatus},Agv状态:{agvStatus.ToEnum<EnumAgvStatus>()},当前楼层:{floorNo},电梯占用状态{s_eleUseStatusDic[elevator.device_id]}");
|
||||||
{
|
{
|
||||||
var curFloor = await GetRealFloor(elevator.end_floor);
|
var curFloor = await GetRealFloor(elevator.elevator_code, elevator.end_floor);
|
||||||
/* Logger.Information($"目标楼层:{curFloor},电梯当前楼层:{floorNo}");
|
/* Logger.Information($"目标楼层:{curFloor},电梯当前楼层:{floorNo}");
|
||||||
Logger.Information($"当前取货设备ID:{elevator.device_id}");
|
Logger.Information($"当前取货设备ID:{elevator.device_id}");
|
||||||
var loadedStatus = s_eleUseStatusDic[elevator.device_id] == 1 ? "完成" : "未完成";
|
var loadedStatus = s_eleUseStatusDic[elevator.device_id] == 1 ? "完成" : "未完成";
|
||||||
@@ -368,7 +368,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
Logger.Information($"【UnloadConfirm】 发送AGVControl 切换电梯{devName}控制模式结果 {JsonConvert.SerializeObject(res)}");
|
Logger.Information($"【UnloadConfirm】 发送AGVControl 切换电梯{devName}控制模式结果 {JsonConvert.SerializeObject(res)}");
|
||||||
}
|
}
|
||||||
|
|
||||||
var curFloor = await GetRealFloor(elevator.end_floor);
|
var curFloor = await GetRealFloor(elevator.elevator_code, elevator.end_floor);
|
||||||
|
|
||||||
|
|
||||||
Logger.Information($"【UnloadConfirm】 电梯状态 {s_eleUseStatusDic[elevator.device_id]} 当前楼层:{curFloor},电梯所在楼层:{floorNo}");
|
Logger.Information($"【UnloadConfirm】 电梯状态 {s_eleUseStatusDic[elevator.device_id]} 当前楼层:{curFloor},电梯所在楼层:{floorNo}");
|
||||||
@@ -397,7 +397,11 @@ namespace Tnb.WarehouseMgr
|
|||||||
if (sysStatus == (int)EnumSysStatus.正常状态 && runStatus == (int)EnumRunStatus.停梯
|
if (sysStatus == (int)EnumSysStatus.正常状态 && runStatus == (int)EnumRunStatus.停梯
|
||||||
&& doorStatus == (int)EnumDoorStatus.开门到位保持 && s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus.空闲)
|
&& doorStatus == (int)EnumDoorStatus.开门到位保持 && s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus.空闲)
|
||||||
{
|
{
|
||||||
await _db.Updateable<WmsElevatorH>().SetColumns(r => r.is_use == (int)EnumElevatorUseStatus.占用).Where(r => r.elevator_id == elevator.device_id).ExecuteCommandAsync();
|
await _db.Updateable<WmsElevatorH>().SetColumns(r => new WmsElevatorH
|
||||||
|
{
|
||||||
|
is_use = (int)EnumElevatorUseStatus.占用,
|
||||||
|
use_tasks = $"','{ r.use_tasks }".Trim(',')
|
||||||
|
}).Where(r => r.elevator_id == elevator.device_id).ExecuteCommandAsync();
|
||||||
s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.占用;
|
s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.占用;
|
||||||
Logger.Information($"【UnloadConfirm】 {devName}放货成功 状态变更为占用 {s_eleUseStatusDic.GetHashCode()} {s_eleUseStatusDic[elevator.device_id]}");
|
Logger.Information($"【UnloadConfirm】 {devName}放货成功 状态变更为占用 {s_eleUseStatusDic.GetHashCode()} {s_eleUseStatusDic[elevator.device_id]}");
|
||||||
return await ToApiResult(HttpStatusCode.OK, "成功");
|
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||||
@@ -698,13 +702,6 @@ namespace Tnb.WarehouseMgr
|
|||||||
{
|
{
|
||||||
var disTask = await _db.Queryable<WmsDistaskH>().FirstAsync(it => it.bill_code == input.taskCode);
|
var disTask = await _db.Queryable<WmsDistaskH>().FirstAsync(it => it.bill_code == input.taskCode);
|
||||||
|
|
||||||
/* 20240627 记录异常情况: WCS给我们发取货完成信号之后,如果我们返回了异常 WCS会一直重试20次,但是AGV已经取货走了,并成功送到库位,此时会给我们反馈放货信号,
|
|
||||||
* 但是由于取货信号一直返回异常,WCS还是会一直重试,会出现我们收到到货信号后又会收到取货信号的异常情况,这里加个任务执行状态判断,用于避免这种情况
|
|
||||||
*/
|
|
||||||
//if (disTask.status == WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID)
|
|
||||||
//{
|
|
||||||
// return await ToApiResult(HttpStatusCode.OK, "此任务");
|
|
||||||
//}
|
|
||||||
|
|
||||||
Logger.Information($"【TaskCallback】 【接收】{input.taskCode} WCS信号 任务状态上报->接收参数:{JsonConvert.SerializeObject(input)}");
|
Logger.Information($"【TaskCallback】 【接收】{input.taskCode} WCS信号 任务状态上报->接收参数:{JsonConvert.SerializeObject(input)}");
|
||||||
try
|
try
|
||||||
@@ -735,7 +732,11 @@ namespace Tnb.WarehouseMgr
|
|||||||
Logger.Information($"【TaskCallback】 根据任务单查找电梯结果 {JsonConvert.SerializeObject(elevator)}");
|
Logger.Information($"【TaskCallback】 根据任务单查找电梯结果 {JsonConvert.SerializeObject(elevator)}");
|
||||||
if (!elevator?.device_id.IsNullOrEmpty() ?? false)
|
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();
|
await _db.Updateable<WmsElevatorH>().SetColumns(r => new WmsElevatorH
|
||||||
|
{
|
||||||
|
is_use = (int)EnumElevatorUseStatus.空闲,
|
||||||
|
use_tasks = ""
|
||||||
|
}).Where(r => r.elevator_id == elevator.device_id).ExecuteCommandAsync();
|
||||||
s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.空闲;
|
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();
|
var devName = s_elevatorMap[elevator.device_id]?.ToString();
|
||||||
@@ -811,7 +812,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
|
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> WmsElevatorUnlock(WmsElevatorUnlockInput input)
|
public async Task<Entities.Dto.Outputs.Result> WmsElevatorUnlock(WmsElevatorUnlockInput input)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -822,7 +823,11 @@ namespace Tnb.WarehouseMgr
|
|||||||
throw new Exception($"未找到电梯{input.elevator_code}的配置");
|
throw new Exception($"未找到电梯{input.elevator_code}的配置");
|
||||||
}
|
}
|
||||||
Logger.Information($"【WmsElevatorUnlock】操作电梯{input.elevator_code}手动解锁");
|
Logger.Information($"【WmsElevatorUnlock】操作电梯{input.elevator_code}手动解锁");
|
||||||
await _db.Updateable<WmsElevatorH>().SetColumns(r => r.is_use == (int)EnumElevatorUseStatus.空闲)
|
await _db.Updateable<WmsElevatorH>().SetColumns(r => new WmsElevatorH
|
||||||
|
{
|
||||||
|
is_use = (int)EnumElevatorUseStatus.空闲,
|
||||||
|
use_tasks = ""
|
||||||
|
})
|
||||||
.Where(it => it.elevator_id == wmsElevatorH.elevator_id).ExecuteCommandAsync();
|
.Where(it => it.elevator_id == wmsElevatorH.elevator_id).ExecuteCommandAsync();
|
||||||
s_eleUseStatusDic[wmsElevatorH.elevator_id] = (int)EnumElevatorUseStatus.空闲;
|
s_eleUseStatusDic[wmsElevatorH.elevator_id] = (int)EnumElevatorUseStatus.空闲;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -849,13 +849,15 @@ namespace Tnb.WarehouseMgr
|
|||||||
Code = await _billRuleService.GetBillNumber("WmsRawMatTransferInstock");
|
Code = await _billRuleService.GetBillNumber("WmsRawMatTransferInstock");
|
||||||
|
|
||||||
wmsRawmatTransferinstockH.bill_code = Code;
|
wmsRawmatTransferinstockH.bill_code = Code;
|
||||||
wmsRawmatTransferinstockH.erp_bill_code = input.outsource_order;
|
wmsRawmatTransferinstockH.erp_bill_code = input.transfer_order;
|
||||||
wmsRawmatTransferinstockH.contact_person = input.contact_person;
|
wmsRawmatTransferinstockH.contact_person = input.contact_person;
|
||||||
wmsRawmatTransferinstockH.tel = input.tel;
|
wmsRawmatTransferinstockH.tel = input.tel;
|
||||||
wmsRawmatTransferinstockH.outstockorg_code = input.outstockorg_code;
|
wmsRawmatTransferinstockH.outstockorg_code = input.outstockorg_code;
|
||||||
wmsRawmatTransferinstockH.erp_pk = input.erp_pk;
|
wmsRawmatTransferinstockH.erp_pk = input.erp_pk;
|
||||||
wmsRawmatTransferinstockH.create_id = WmsWareHouseConst.ErpUserId;
|
wmsRawmatTransferinstockH.create_id = WmsWareHouseConst.ErpUserId;
|
||||||
wmsRawmatTransferinstockH.create_time = DateTime.Now;
|
wmsRawmatTransferinstockH.create_time = DateTime.Now;
|
||||||
|
wmsRawmatTransferinstockH.dept_code = input.dept_code;
|
||||||
|
wmsRawmatTransferinstockH.biller = input.biller;
|
||||||
|
|
||||||
await db.Insertable(wmsRawmatTransferinstockH).ExecuteCommandAsync();
|
await db.Insertable(wmsRawmatTransferinstockH).ExecuteCommandAsync();
|
||||||
|
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ using Tnb.WarehouseMgr.Interfaces;
|
|||||||
using static NPOI.HSSF.Util.HSSFColor;
|
using static NPOI.HSSF.Util.HSSFColor;
|
||||||
using Tnb.BasicData;
|
using Tnb.BasicData;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using NPOI.SS.Format;
|
||||||
|
|
||||||
namespace Tnb.WarehouseMgr
|
namespace Tnb.WarehouseMgr
|
||||||
{
|
{
|
||||||
@@ -98,6 +99,17 @@ namespace Tnb.WarehouseMgr
|
|||||||
get { return _s_taskExecuteSemaphore_YCLOutstock; }
|
get { return _s_taskExecuteSemaphore_YCLOutstock; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SemaphoreSlim s_taskExecuteSemaphore_F1ZCCInstock
|
||||||
|
{
|
||||||
|
get { return _s_taskExecuteSemaphore_F1ZCCInstock; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public SemaphoreSlim s_taskExecuteSemaphore_F1ZCCOutstock
|
||||||
|
{
|
||||||
|
get { return _s_taskExecuteSemaphore_F1ZCCOutstock; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public WareHouseService(ISqlSugarRepository<WmsInstockH> repository, IDictionaryDataService dictionaryDataService, StackExRedisHelper redisData,
|
public WareHouseService(ISqlSugarRepository<WmsInstockH> repository, IDictionaryDataService dictionaryDataService, StackExRedisHelper redisData,
|
||||||
IBillRullService billRullService, IUserManager userManager, ICacheManager cacheManager, IElevatorControlService elevatorControlService,
|
IBillRullService billRullService, IUserManager userManager, ICacheManager cacheManager, IElevatorControlService elevatorControlService,
|
||||||
IWmsCarryBindService wmsCarryBindService,
|
IWmsCarryBindService wmsCarryBindService,
|
||||||
@@ -1014,6 +1026,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
Logger.Information($"SsxControlLOAD:{JsonConvert.SerializeObject(dicCommand)}");
|
Logger.Information($"SsxControlLOAD:{JsonConvert.SerializeObject(dicCommand)}");
|
||||||
var str = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand);
|
var str = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand);
|
||||||
Logger.Information($"SsxControlLOAD:{str}");
|
Logger.Information($"SsxControlLOAD:{str}");
|
||||||
|
Logger.Information($"SsxControlUNLOAD - 控制后查询:{_redisData.GetHash(strarr[0], strarr[1]).Result}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (action == "UNLOAD")//放货
|
else if (action == "UNLOAD")//放货
|
||||||
@@ -1031,6 +1044,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
Logger.Information($"SsxControlUNLOAD:{JsonConvert.SerializeObject(dicCommand)}");
|
Logger.Information($"SsxControlUNLOAD:{JsonConvert.SerializeObject(dicCommand)}");
|
||||||
var str = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand);
|
var str = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand);
|
||||||
Logger.Information($"SsxControlUNLOAD:{str}");
|
Logger.Information($"SsxControlUNLOAD:{str}");
|
||||||
|
Logger.Information($"SsxControlUNLOAD - 控制后查询:{_redisData.GetHash(strarr[0], strarr[1]).Result}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1535,7 +1549,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
var tags = _eleCtlCfg.tags;
|
var tags = _eleCtlCfg.tags;
|
||||||
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(e.elevator_code, tags, CancellationToken.None);
|
(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]}");
|
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);
|
var curFloor = await GetRealFloor(e.elevator_code, e.end_floor);
|
||||||
|
|
||||||
if (e != null && s_eleUseStatusDic[e.device_id] == (int)EnumElevatorUseStatus.空闲 && curFloor != floorNo)
|
if (e != null && s_eleUseStatusDic[e.device_id] == (int)EnumElevatorUseStatus.空闲 && curFloor != floorNo)
|
||||||
{
|
{
|
||||||
@@ -1569,18 +1583,60 @@ namespace Tnb.WarehouseMgr
|
|||||||
Logger.Information($"【GenTaskExecute】当前电梯任务数:{elevatorTasks?.Count ?? 0}");
|
Logger.Information($"【GenTaskExecute】当前电梯任务数:{elevatorTasks?.Count ?? 0}");
|
||||||
if (elevatorTasks?.Count > 0)
|
if (elevatorTasks?.Count > 0)
|
||||||
{
|
{
|
||||||
foreach (WmsDistaskH? elevatorTask in elevatorTasks)
|
List<IGrouping<string, WmsDistaskH>> elevatorTaskGroup = elevatorTasks.GroupBy(r => $"{r.endlocation_code} {r.end_floor}").ToList();
|
||||||
|
foreach (IGrouping<string, WmsDistaskH> group in elevatorTaskGroup)
|
||||||
{
|
{
|
||||||
ElevagorInfoQuery q = new() { endlocation_id = elevatorTask.endlocation_id, taskCode = elevatorTask.bill_code};
|
List<WmsDistaskH> wmsDistaskHs = group.ToList();
|
||||||
|
ElevagorInfoQuery q = new() { endlocation_id = wmsDistaskHs[0].endlocation_id, taskCode = wmsDistaskHs[0].bill_code };
|
||||||
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)}");
|
||||||
|
|
||||||
|
// 三、四号梯发货带两托货
|
||||||
|
string[] doubleCarryRunElevators = new string[2]
|
||||||
|
{
|
||||||
|
"Elevator3","Elevator4"
|
||||||
|
};
|
||||||
|
if (doubleCarryRunElevators.Contains(e.elevator_code) && wmsDistaskHs[0].end_floor == 1)
|
||||||
|
{
|
||||||
|
// 电梯内放置两托货呼叫电梯下
|
||||||
|
if (group.Count() == 2)
|
||||||
|
{
|
||||||
if (e != null)
|
if (e != null)
|
||||||
{
|
{
|
||||||
elevatorTask.device_id = e.device_id;
|
wmsDistaskHs[0].device_id = e.device_id;
|
||||||
|
wmsDistaskHs[1].device_id = e.device_id;
|
||||||
}
|
}
|
||||||
|
_ = ExecuteTargetFloorTask(wmsDistaskHs);
|
||||||
|
}
|
||||||
|
// 一托货
|
||||||
|
else if (group.Count() == 1)
|
||||||
|
{
|
||||||
|
// 如果当前电梯没有执行中的任务 则呼叫电梯下
|
||||||
|
|
||||||
_ = ExecuteTargetFloorTask(elevatorTask);
|
if (_db.Queryable<WmsDistaskH>().Where(r => r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID
|
||||||
|
&& r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.endlocation_id == wmsDistaskHs[0].startlocation_id).Count() == 0)
|
||||||
|
{
|
||||||
|
if (e != null)
|
||||||
|
{
|
||||||
|
wmsDistaskHs[0].device_id = e.device_id;
|
||||||
|
}
|
||||||
|
_ = ExecuteTargetFloorTask(wmsDistaskHs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Logger.LogError($"电梯 {e.elevator_code} 待执行的电梯任务数异常 目前是{group.Count()} 超过了两托");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (e != null)
|
||||||
|
{
|
||||||
|
wmsDistaskHs[0].device_id = e.device_id;
|
||||||
|
}
|
||||||
|
_ = ExecuteTargetFloorTask(wmsDistaskHs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
List<WmsDistaskH> agvTasks = disTasks.Where(it => !it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)).ToList();
|
List<WmsDistaskH> agvTasks = disTasks.Where(it => !it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)).ToList();
|
||||||
@@ -2034,7 +2090,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
|
|
||||||
Logger.Information($"【CallingLanding】 任务开始目标楼层为:{floorNO}");
|
Logger.Information($"【CallingLanding】 任务开始目标楼层为:{floorNO}");
|
||||||
|
|
||||||
int floorN = await GetRealFloor(floorNO);
|
int floorN = await GetRealFloor(devName, floorNO);
|
||||||
//如果电梯在当前楼层则不呼梯
|
//如果电梯在当前楼层则不呼梯
|
||||||
if (floorN == eleStatusMulti.curFloorNo)
|
if (floorN == eleStatusMulti.curFloorNo)
|
||||||
{
|
{
|
||||||
@@ -2092,10 +2148,12 @@ namespace Tnb.WarehouseMgr
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="disTask"></param>
|
/// <param name="disTask"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task ExecuteTargetFloorTask(WmsDistaskH disTask)
|
public async Task ExecuteTargetFloorTask(List<WmsDistaskH> disTasks)
|
||||||
{
|
{
|
||||||
//收到放货确认通知,向电梯发送到3楼的指令
|
//收到放货确认通知,向电梯发送到3楼的指令
|
||||||
Logger.Information($"开始执行电梯任务,任务ID:{disTask.id}");
|
Logger.Information($"开始执行电梯任务,任务:{string.Join(",", disTasks.Select(r => r.bill_code))}");
|
||||||
|
|
||||||
|
var disTask = disTasks[0];
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (!s_elevatorMap.TryGetValue(disTask.device_id, out object? elevatorCode))
|
if (!s_elevatorMap.TryGetValue(disTask.device_id, out object? elevatorCode))
|
||||||
@@ -2136,7 +2194,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
} while (doorStatus != 4);
|
} while (doorStatus != 4);
|
||||||
Logger.Information($"当前门状态:{doorStatus}");
|
Logger.Information($"当前门状态:{doorStatus}");
|
||||||
|
|
||||||
int floor = await GetRealFloor(disTask.end_floor);
|
int floor = await GetRealFloor(devName, disTask.end_floor);
|
||||||
|
|
||||||
//电梯任务手动执行任务状态上报
|
//电梯任务手动执行任务状态上报
|
||||||
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) tuple = (-1, -1, -1, -1, -1);
|
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) tuple = (-1, -1, -1, -1, -1);
|
||||||
@@ -2158,8 +2216,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
if (tuple.sysStatus.ToEnum<EnumSysStatus>() == EnumSysStatus.正常状态 && tuple.runStatus.ToEnum<EnumRunStatus>() == EnumRunStatus.停梯)
|
if (tuple.sysStatus.ToEnum<EnumSysStatus>() == EnumSysStatus.正常状态 && tuple.runStatus.ToEnum<EnumRunStatus>() == EnumRunStatus.停梯)
|
||||||
{
|
{
|
||||||
Logger.Information($"disTask.require_id={disTask.require_id}");
|
Logger.Information($"disTask.require_id={disTask.require_id}");
|
||||||
List<string> disTaskIds = new() { disTask.id };
|
List<string> disTaskIds = new() { disTasks[0].id, disTasks[1].id };
|
||||||
var upInput = new { disTaskIds = disTask.id };
|
|
||||||
TaskExecuteAfterUpInput teaUpInput = new()
|
TaskExecuteAfterUpInput teaUpInput = new()
|
||||||
{
|
{
|
||||||
disTaskIds = disTaskIds,
|
disTaskIds = disTaskIds,
|
||||||
@@ -2200,6 +2257,13 @@ namespace Tnb.WarehouseMgr
|
|||||||
//floor2.Add("AS02");
|
//floor2.Add("AS02");
|
||||||
//floor2.Add("AX01");
|
//floor2.Add("AX01");
|
||||||
//floor2.Add("AX02");
|
//floor2.Add("AX02");
|
||||||
|
|
||||||
|
// 三、四号梯发货带两托货
|
||||||
|
string[] doubleCarryRunElevators =
|
||||||
|
{
|
||||||
|
"29815764588053","29815767573013"
|
||||||
|
};
|
||||||
|
|
||||||
//调用AGV创建任务链接口
|
//调用AGV创建任务链接口
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -2222,24 +2286,31 @@ namespace Tnb.WarehouseMgr
|
|||||||
|
|
||||||
foreach ((string k, object v) in taskChainCodeDic)
|
foreach ((string k, object v) in taskChainCodeDic)
|
||||||
{
|
{
|
||||||
var typeflag = false;
|
|
||||||
var dis = disTasks.Where(p => p.groups == k).First();
|
var dis = disTasks.Where(p => p.groups == k).First();
|
||||||
|
|
||||||
|
dynamic reqBody = new ExpandoObject();
|
||||||
|
reqBody.taskChainCode = k;
|
||||||
|
reqBody.type = (int)EnumTaskChainType.AGV;
|
||||||
|
|
||||||
|
|
||||||
if (kiva.Contains(dis.startlocation_code) || kiva.Contains(dis.endlocation_code)
|
if (kiva.Contains(dis.startlocation_code) || kiva.Contains(dis.endlocation_code)
|
||||||
//|| floor2.Contains(dis.startlocation_code) || floor2.Contains(dis.endlocation_code)
|
//|| floor2.Contains(dis.startlocation_code) || floor2.Contains(dis.endlocation_code)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
typeflag = true;
|
reqBody.type = (int)EnumTaskChainType.KIVA;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果管理区是E(二楼暂存仓和二楼缓存仓) 统一发KIVA
|
// 如果管理区是E(二楼暂存仓和二楼缓存仓) 统一发KIVA
|
||||||
if (dis.area_code == "E")
|
if (dis.area_code == "E")
|
||||||
{
|
{
|
||||||
typeflag = true;
|
reqBody.type = (int)EnumTaskChainType.KIVA;
|
||||||
}
|
}
|
||||||
|
|
||||||
dynamic reqBody = new ExpandoObject();
|
// 三四号电梯出货
|
||||||
reqBody.taskChainCode = k;
|
if (doubleCarryRunElevators.Contains(dis.device_id) && dis.end_floor == 1)
|
||||||
reqBody.type = typeflag ? (int)EnumTaskChainType.KIVA : (int)EnumTaskChainType.AGV;
|
{
|
||||||
|
reqBody.type = (int)EnumTaskChainType.电梯载两托货;
|
||||||
|
}
|
||||||
|
|
||||||
// 原材料仓使用优先级
|
// 原材料仓使用优先级
|
||||||
if (dis.area_code == "A")
|
if (dis.area_code == "A")
|
||||||
@@ -3226,6 +3297,9 @@ namespace Tnb.WarehouseMgr
|
|||||||
BasLocation startLocation = null;
|
BasLocation startLocation = null;
|
||||||
|
|
||||||
int index = 0;
|
int index = 0;
|
||||||
|
|
||||||
|
await _s_taskExecuteSemaphore_F1ZCCInstock.WaitAsync();
|
||||||
|
|
||||||
await _db.Ado.BeginTranAsync();
|
await _db.Ado.BeginTranAsync();
|
||||||
foreach (WmsCarryD wmsCarryD in wmsCarryCodes)
|
foreach (WmsCarryD wmsCarryD in wmsCarryCodes)
|
||||||
{
|
{
|
||||||
@@ -3316,6 +3390,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
_s_taskExecuteSemaphore_F1ZCCInstock.Release();
|
||||||
s_floor2CreatePretask.Release();
|
s_floor2CreatePretask.Release();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,6 +68,10 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
public async Task<dynamic> WmsEmptyIn(VisualDevModelDataCrInput input)
|
public async Task<dynamic> WmsEmptyIn(VisualDevModelDataCrInput input)
|
||||||
{
|
{
|
||||||
|
if (input.data[nameof(OutStockStrategyQuery.warehouse_id)].ToString() == WmsWareHouseConst.WAREHOUSE_ZC_ID)
|
||||||
|
{
|
||||||
|
await _s_taskExecuteSemaphore_F1ZCCInstock.WaitAsync();
|
||||||
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await _db.Ado.BeginTranAsync();
|
await _db.Ado.BeginTranAsync();
|
||||||
@@ -217,6 +221,10 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
if (input.data[nameof(OutStockStrategyQuery.warehouse_id)].ToString() == WmsWareHouseConst.WAREHOUSE_ZC_ID)
|
||||||
|
{
|
||||||
|
_s_taskExecuteSemaphore_F1ZCCInstock.Release();
|
||||||
|
}
|
||||||
//向队列写入消息
|
//向队列写入消息
|
||||||
await InvokeGenPretaskExcute();
|
await InvokeGenPretaskExcute();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,7 +65,10 @@ namespace Tnb.WarehouseMgr
|
|||||||
|
|
||||||
public async Task<dynamic> WmsEmptyOut(VisualDevModelDataCrInput input)
|
public async Task<dynamic> WmsEmptyOut(VisualDevModelDataCrInput input)
|
||||||
{
|
{
|
||||||
|
if (input.data[nameof(OutStockStrategyQuery.warehouse_id)].ToString() == WmsWareHouseConst.WAREHOUSE_ZC_ID)
|
||||||
|
{
|
||||||
|
await _s_taskExecuteSemaphore_F1ZCCOutstock.WaitAsync();
|
||||||
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await _db.Ado.BeginTranAsync();
|
await _db.Ado.BeginTranAsync();
|
||||||
@@ -257,6 +260,10 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
if (input.data[nameof(OutStockStrategyQuery.warehouse_id)].ToString() == WmsWareHouseConst.WAREHOUSE_ZC_ID)
|
||||||
|
{
|
||||||
|
_s_taskExecuteSemaphore_F1ZCCOutstock.Release();
|
||||||
|
}
|
||||||
await InvokeGenPretaskExcute();
|
await InvokeGenPretaskExcute();
|
||||||
}
|
}
|
||||||
return Task.FromResult(true);
|
return Task.FromResult(true);
|
||||||
|
|||||||
@@ -468,7 +468,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
await s_taskDistributeYCL2ZCC.WaitAsync();
|
await _s_taskExecuteSemaphore_F1ZCCInstock.WaitAsync();
|
||||||
WmsMaterialTransferD wmsMaterialTransferD = await _db.Queryable<WmsMaterialTransferD>().FirstAsync(it => it.id == input.source_id);
|
WmsMaterialTransferD wmsMaterialTransferD = await _db.Queryable<WmsMaterialTransferD>().FirstAsync(it => it.id == input.source_id);
|
||||||
WmsMaterialTransfer wmsMaterialTransfer = await _db.Queryable<WmsMaterialTransfer>().FirstAsync(it => it.id == wmsMaterialTransferD.bill_id);
|
WmsMaterialTransfer wmsMaterialTransfer = await _db.Queryable<WmsMaterialTransfer>().FirstAsync(it => it.id == wmsMaterialTransferD.bill_id);
|
||||||
|
|
||||||
@@ -561,7 +561,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
_ = s_taskDistributeYCL2ZCC.Release();
|
_s_taskExecuteSemaphore_F1ZCCInstock.Release();
|
||||||
InvokeGenPretaskExcute();
|
InvokeGenPretaskExcute();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1111,7 +1111,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
[HttpPost, NonUnify, AllowAnonymous]
|
[HttpPost, NonUnify, AllowAnonymous]
|
||||||
public async Task<Entities.Dto.Outputs.Result> DistributeToZCC(MaterialTransferDistributeToZCCInput input)
|
public async Task<Entities.Dto.Outputs.Result> DistributeToZCC(MaterialTransferDistributeToZCCInput input)
|
||||||
{
|
{
|
||||||
s_taskDistributeToZCC.Wait();
|
await _s_taskExecuteSemaphore_F1ZCCOutstock.WaitAsync();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -1239,7 +1239,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
s_taskDistributeToZCC.Release();
|
_s_taskExecuteSemaphore_F1ZCCOutstock.Release();
|
||||||
InvokeGenPretaskExcute();
|
InvokeGenPretaskExcute();
|
||||||
}
|
}
|
||||||
return await ToApiResult(HttpStatusCode.OK, "成功");
|
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||||
@@ -1254,7 +1254,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
[HttpPost, NonUnify, AllowAnonymous]
|
[HttpPost, NonUnify, AllowAnonymous]
|
||||||
public async Task<Entities.Dto.Outputs.Result> DistributeZCCToYCL(MaterialTransferDistributeToZCCInput input)
|
public async Task<Entities.Dto.Outputs.Result> DistributeZCCToYCL(MaterialTransferDistributeToZCCInput input)
|
||||||
{
|
{
|
||||||
s_taskDistributeZCCToYCL.Wait();
|
await _s_taskExecuteSemaphore_F1ZCCOutstock.WaitAsync();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -1375,7 +1375,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
s_taskDistributeZCCToYCL.Release();
|
_s_taskExecuteSemaphore_F1ZCCOutstock.Release(); ;
|
||||||
InvokeGenPretaskExcute();
|
InvokeGenPretaskExcute();
|
||||||
}
|
}
|
||||||
return await ToApiResult(HttpStatusCode.OK, "成功");
|
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||||
|
|||||||
@@ -57,7 +57,10 @@ namespace Tnb.WarehouseMgr
|
|||||||
|
|
||||||
private async Task<dynamic> PDAWmsEmptyIn(VisualDevModelDataCrInput input)
|
private async Task<dynamic> PDAWmsEmptyIn(VisualDevModelDataCrInput input)
|
||||||
{
|
{
|
||||||
|
if (input.data[nameof(OutStockStrategyQuery.warehouse_id)].ToString() == WmsWareHouseConst.WAREHOUSE_ZC_ID)
|
||||||
|
{
|
||||||
|
await _s_taskExecuteSemaphore_F1ZCCInstock.WaitAsync();
|
||||||
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await _db.Ado.BeginTranAsync();
|
await _db.Ado.BeginTranAsync();
|
||||||
@@ -178,6 +181,10 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
if (input.data[nameof(OutStockStrategyQuery.warehouse_id)].ToString() == WmsWareHouseConst.WAREHOUSE_ZC_ID)
|
||||||
|
{
|
||||||
|
_s_taskExecuteSemaphore_F1ZCCInstock.Release();
|
||||||
|
}
|
||||||
await InvokeGenPretaskExcute();
|
await InvokeGenPretaskExcute();
|
||||||
}
|
}
|
||||||
return Task.FromResult(true);
|
return Task.FromResult(true);
|
||||||
|
|||||||
@@ -59,6 +59,10 @@ namespace Tnb.WarehouseMgr
|
|||||||
private async Task<dynamic> PDAWmsEmptyOut(VisualDevModelDataCrInput input)
|
private async Task<dynamic> PDAWmsEmptyOut(VisualDevModelDataCrInput input)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
if (input.data[nameof(OutStockStrategyQuery.warehouse_id)].ToString() == WmsWareHouseConst.WAREHOUSE_ZC_ID)
|
||||||
|
{
|
||||||
|
await _s_taskExecuteSemaphore_F1ZCCOutstock.WaitAsync();
|
||||||
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Logger.Information("开始PDA空载具出库");
|
Logger.Information("开始PDA空载具出库");
|
||||||
@@ -231,6 +235,10 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
if (input.data[nameof(OutStockStrategyQuery.warehouse_id)].ToString() == WmsWareHouseConst.WAREHOUSE_ZC_ID)
|
||||||
|
{
|
||||||
|
_s_taskExecuteSemaphore_F1ZCCOutstock.Release();
|
||||||
|
}
|
||||||
await InvokeGenPretaskExcute();
|
await InvokeGenPretaskExcute();
|
||||||
}
|
}
|
||||||
return Task.FromResult(true);
|
return Task.FromResult(true);
|
||||||
|
|||||||
@@ -60,6 +60,8 @@ namespace Tnb.WarehouseMgr
|
|||||||
var db = _db;
|
var db = _db;
|
||||||
if (dbConn != null)
|
if (dbConn != null)
|
||||||
db = dbConn;
|
db = dbConn;
|
||||||
|
|
||||||
|
string type = "";
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await db.Ado.BeginTranAsync();
|
await db.Ado.BeginTranAsync();
|
||||||
@@ -67,7 +69,6 @@ namespace Tnb.WarehouseMgr
|
|||||||
WmsPrdInstockH prdInstockH = db.Queryable<WmsPrdInstockH>().Where(r => r.prd_bill_code == input.prd_bill_code).First();
|
WmsPrdInstockH prdInstockH = db.Queryable<WmsPrdInstockH>().Where(r => r.prd_bill_code == input.prd_bill_code).First();
|
||||||
|
|
||||||
string prd_instock_code_id = "";
|
string prd_instock_code_id = "";
|
||||||
string type = "";
|
|
||||||
// 新建主表
|
// 新建主表
|
||||||
if (prdInstockH == null)
|
if (prdInstockH == null)
|
||||||
{
|
{
|
||||||
@@ -142,6 +143,19 @@ namespace Tnb.WarehouseMgr
|
|||||||
|
|
||||||
await db.Insertable(WmsPrdInstockCodes).ExecuteCommandAsync();
|
await db.Insertable(WmsPrdInstockCodes).ExecuteCommandAsync();
|
||||||
|
|
||||||
|
if (type == "25019163616533")
|
||||||
|
{
|
||||||
|
await _s_taskExecuteSemaphore_F1ZCCInstock.WaitAsync();
|
||||||
|
}
|
||||||
|
else if (type == "25019172714005")
|
||||||
|
{
|
||||||
|
await _s_taskExecuteSemaphore_F1ZCCInstock.WaitAsync();
|
||||||
|
}
|
||||||
|
else if (type == "25019191681045")
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
foreach (WmsPrdInstockD wmsPrdInstockD in WmsPrdInstockDs)
|
foreach (WmsPrdInstockD wmsPrdInstockD in WmsPrdInstockDs)
|
||||||
{
|
{
|
||||||
//入库取终点
|
//入库取终点
|
||||||
@@ -275,6 +289,19 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
if (type == "25019163616533")
|
||||||
|
{
|
||||||
|
_s_taskExecuteSemaphore_F1ZCCInstock.Release();
|
||||||
|
}
|
||||||
|
else if (type == "25019172714005")
|
||||||
|
{
|
||||||
|
_s_taskExecuteSemaphore_F1ZCCInstock.Release();
|
||||||
|
}
|
||||||
|
else if (type == "25019191681045")
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
_wareHouseService.GenTaskExecute();
|
_wareHouseService.GenTaskExecute();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user