新增日志归类,将日志写入到指定的文件中

This commit is contained in:
yang.lee
2023-10-27 17:08:03 +08:00
parent 4215ad600f
commit 40d0878aa6
6 changed files with 158 additions and 80 deletions

View File

@@ -54,7 +54,7 @@ namespace Tnb.WarehouseMgr
private static Dictionary<string, IWHStorageService> _storeMap = new(StringComparer.OrdinalIgnoreCase);
public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc();
private readonly ChannelWriter<NotifyMessage> _channelWriter;
public BaseWareHouseService(ChannelWriter<NotifyMessage>? channelWriter = default)

View File

@@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using JNPF.Common.Contracts;
using JNPF.Logging;
using Microsoft.Extensions.Logging;
namespace Tnb.WarehouseMgr
{
public class BaseWareHouseService<T> : BaseWareHouseService
{
protected ILogger Logger => LoggerFactory.Create(builder => builder.AddFile($"{AppContext.BaseDirectory}/logs/custom{DateTime.Now:yyyyMMdd}.log", cfgOpts =>
{
//cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff";
cfgOpts.MessageFormat = (logMsg) =>
{
Span<char> span = logMsg.LogLevel.ToString().ToCharArray();
var sb = new StringBuilder();
sb.Append($"{span.Slice(0, 4)} ");
sb.Append($"{logMsg.LogName} ");
sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} ");
sb.Append($"#{logMsg.EventId.Id} ");
sb.Append(logMsg.Message + " ");
sb.Append(logMsg.Exception?.ToString());
return sb.ToString();
};
})).CreateLogger<T>();
}
public static class CustomLoggerExtenstions
{
public static void Information(this ILogger logger, string message, params object[] parameters)
{
logger.LogInformation(message, parameters);
}
public static void Error(this ILogger logger, string message, Exception ex, params object[] parameters)
{
logger.LogError(ex, message, parameters);
}
}
}

View File

@@ -20,12 +20,15 @@ using JNPF.Systems.Interfaces.System;
using JNPF.WorkFlow.Entitys.Dto.FlowLaunch;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using NPOI.OpenXmlFormats;
using Senparc.NeuChar.ApiHandlers;
using SqlSugar;
using Tnb.Common.Extension;
using Tnb.EquipMgr.Entities;
using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Configs;
using Tnb.WarehouseMgr.Entities.Consts;
using Tnb.WarehouseMgr.Entities.Dto;
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
@@ -40,7 +43,7 @@ namespace Tnb.WarehouseMgr
/// Wms设备接口提供程序服务类
/// </summary>
public class DeviceProviderService : BaseWareHouseService
public class DeviceProviderService : BaseWareHouseService<DeviceProviderService>
{
private readonly ISqlSugarClient _db;
private readonly IWareHouseService _wareHouseService;
@@ -48,6 +51,9 @@ namespace Tnb.WarehouseMgr
private readonly IEventPublisher _eventPublisher;
private readonly IUserManager _userManager;
private readonly IElevatorControlService _elevatorControlService;
private readonly ElevatorControlConfiguration _eleCtlCfg = App.Configuration.Build<ElevatorControlConfiguration>();
private readonly ILoggerFactory _loggerFactory;
public DeviceProviderService(ISqlSugarRepository<WmsInstockH> repository, IWareHouseService wareHouseService,
@@ -72,6 +78,7 @@ namespace Tnb.WarehouseMgr
[HttpPost, NonUnify]
public async Task<Result> CreateTaskChain()
{
Logger.LogInformation("fasdfadsfadsfasdfasdfadsfasdfadsfadsfasdfasdfasdfasdfas");
return await Task.FromResult<Result>(null);
}
@@ -95,14 +102,14 @@ namespace Tnb.WarehouseMgr
//Log.Information($"elevator!=null?{elevator!=null}");
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus("Elevator1", CancellationToken.None);
Log.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum<EnumSysStatus>().ToString()},运行状态:{runStatus.ToEnum<EnumRunStatus>().ToString()},Agv状态:{agvStatus.ToEnum<EnumAgvStatus>().ToString()},当前楼层:{floorNo}");
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(_eleCtlCfg.DevName, CancellationToken.None);
Logger.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum<EnumSysStatus>().ToString()},运行状态:{runStatus.ToEnum<EnumRunStatus>().ToString()},Agv状态:{agvStatus.ToEnum<EnumAgvStatus>().ToString()},当前楼层:{floorNo}");
{
//var endFloor = elevator.end_floor;
var floor = 5;
if (doorStatus.ToEnum<EnumDoorStatus>() != EnumDoorStatus.)
{
await _elevatorControlService.SendOpenCloseCmd("Elevator1", 3); //发送电梯前门开门指令
await _elevatorControlService.SendOpenCloseCmd(_eleCtlCfg.DevName, 3); //发送电梯前门开门指令
}
if (sysStatus.ToEnum<EnumSysStatus>() == EnumSysStatus. && runStatus.ToEnum<EnumRunStatus>() == EnumRunStatus.)
{
@@ -130,7 +137,7 @@ namespace Tnb.WarehouseMgr
[HttpPost, NonUnify, AllowAnonymous]
public async Task<Result> UnloadConfirm(ConfirmInput input)//
{
Log.Information("放货确认..................");
Logger.Information("放货确认..................");
try
{
//根据Agv传递的参数获取对应的电梯
@@ -141,20 +148,20 @@ namespace Tnb.WarehouseMgr
.Select((a, b, c, d) => new WmsElevatorH { end_floor = SqlFunc.ToInt32(c.end_floor) }, true)
.FirstAsync();
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus("Elevator1", CancellationToken.None);//elevator.elevator_code
Log.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum<EnumSysStatus>().ToString()},运行状态:{runStatus},门状态:{doorStatus},Agv状态:{agvStatus},当前楼层:{floorNo}");
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(_eleCtlCfg.DevName, CancellationToken.None);//elevator.elevator_code
Logger.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum<EnumSysStatus>().ToString()},运行状态:{runStatus},门状态:{doorStatus},Agv状态:{agvStatus},当前楼层:{floorNo}");
//判断Agv电梯是否进入状态
if (agvStatus != (int)EnumAgvStatus.AGV运行状态)
{
await _elevatorControlService.WriteTagAsync("Elevator1", ElevatorConsts.AGVControl, 1);
await _elevatorControlService.WriteTagAsync(_eleCtlCfg.DevName, ElevatorConsts.AGVControl, 1);
}
Log.Information("目前正常");
Logger.Information("目前正常");
//电梯到达目标楼层后,判断当前电梯门状态是否为开门到位保持状态
if (doorStatus != (int)EnumDoorStatus.)
{
await _elevatorControlService.SendOpenCloseCmd("Elevator1", 3); //发送电梯前门开门指令
await _elevatorControlService.SendOpenCloseCmd(_eleCtlCfg.DevName, 3); //发送电梯前门开门指令
}
if (sysStatus == (int)EnumSysStatus. && runStatus == (int)EnumRunStatus.
&& doorStatus == (int)EnumDoorStatus.)
@@ -162,13 +169,13 @@ namespace Tnb.WarehouseMgr
Log.Information("进入开门状态,马上要成功了");
try
{
elevator.current_floor = elevator.end_floor;
await _db.Updateable(elevator).UpdateColumns(it => it.current_floor).ExecuteCommandAsync();
/* elevator.current_floor = elevator.end_floor;
await _db.Updateable(elevator).UpdateColumns(it => it.current_floor).ExecuteCommandAsync();*/
}
catch (Exception ex)
{
Log.Error("更新延迟队列异常", ex);
Logger.LogError("更新延迟队列异常", ex);
throw;
}
@@ -194,7 +201,7 @@ namespace Tnb.WarehouseMgr
{
try
{
Log.Information($"任务链编号:{input.taskChainCode},状态:{input.status},设备ID{input.deviceID}");
Logger.Information($"任务链编号:{input.taskChainCode},状态:{input.status},设备ID{input.deviceID}");
switch (input.status)
{
case "CREATED": break;
@@ -235,8 +242,9 @@ namespace Tnb.WarehouseMgr
CreatorTime = DateTime.Now
}));
}
catch (Exception)
catch (Exception ex)
{
Logger.Error("任务链状态上报", ex);
return await ToApiResult(HttpStatusCode.InternalServerError, "请重试!");
throw;
}
@@ -263,16 +271,16 @@ namespace Tnb.WarehouseMgr
disTaskIds = disTasks.Select(x => x.id).ToList()
};
await _wareHouseService.TaskExecuteAfter(taskExecuteAfterUpInput);
Log.Information("Agv取货完成");
Logger.Information("Agv取货完成");
var elevatorQueueItem = await _db.Queryable<WmsElevatorUnexecute>().FirstAsync(it => disTasks.Select(x => x.id).Contains(it.distask_id) && it.task_status == "执行中");
if (elevatorQueueItem != null)
{
Log.Information("开始进入关门流程");
Logger.Information("开始进入关门流程");
var disTask = disTasks.Find(x => x.id == elevatorQueueItem.distask_id);
//if (disTask?.status == WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID)
{
var doorStatus = await _elevatorControlService.GetTagAsync("Elevator1", ElevatorConsts.DoorStatus);
var doorStatus = await _elevatorControlService.GetTagAsync(_eleCtlCfg.DevName, ElevatorConsts.DoorStatus);
if (doorStatus.ToEnum<EnumDoorStatus>() != EnumDoorStatus.)
{
await _elevatorControlService.SendOpenCloseCmd(elevatorQueueItem.elevator_code, 4); //向电梯发送前门关门指令
@@ -299,7 +307,7 @@ namespace Tnb.WarehouseMgr
}
catch (Exception ex)
{
Log.Error("任务状态上报出现错误", ex);
Logger.Error("任务状态上报出现错误", ex);
return await ToApiResult(HttpStatusCode.InternalServerError, "请重试!");
throw;
}

View File

@@ -90,15 +90,7 @@ namespace Tnb.WarehouseMgr
_eventPublisher = App.GetRequiredService<IEventPublisher>();
var whSvc = App.GetRequiredService<IWareHouseService>();
TimedTask(token => whSvc.GenTaskExecute(), stoppingToken, 1);
////齐套出库
var kittingOutService = App.GetRequiredService<IWmskittingOutService>();
TimedTask(token => kittingOutService.KittingOutByAdd(token), stoppingToken, 1);
TimedTask(token => kittingOutService.KittingOutByIsToBeShipped(token), stoppingToken, 1);
//齐套分拣
var setSortingService = App.GetRequiredService<IWmsSetSortingService>();
TimedTask(token => setSortingService.PackSortingByAdd(token), stoppingToken, 2);
//电梯Agv心跳检测
TimedTask(async token =>
{
var parameter = new Dictionary<string, string>();
@@ -109,9 +101,18 @@ namespace Tnb.WarehouseMgr
var result = await HttpClientHelper.GetAsync(_elevatorControlConfiguration.WriteTagUrl, pars: parameter);
await Console.Out.WriteLineAsync($"心跳检测结果:{result}");
}, stoppingToken, 30, TimeSpanUnit.Seconds);
////齐套出库
/*var kittingOutService = App.GetRequiredService<IWmskittingOutService>();
TimedTask(token => kittingOutService.KittingOutByAdd(token), stoppingToken, 1);
TimedTask(token => kittingOutService.KittingOutByIsToBeShipped(token), stoppingToken, 1);
//齐套分拣
var setSortingService = App.GetRequiredService<IWmsSetSortingService>();
TimedTask(token => setSortingService.PackSortingByAdd(token), stoppingToken, 2);
//最低库存检查
var transferSignService = App.GetRequiredService<IWmsPDATransferSignService>();
TimedTask(token => transferSignService.IsMinStorage(token), stoppingToken, 30, TimeSpanUnit.Minutes);
TimedTask(token => transferSignService.IsMinStorage(token), stoppingToken, 30, TimeSpanUnit.Minutes);*/
}, stoppingToken);

View File

@@ -39,7 +39,7 @@ namespace Tnb.WarehouseMgr
/// <summary>
/// 库房业务类(出入库)
/// </summary>
public class WareHouseService : BaseWareHouseService, IWareHouseService
public class WareHouseService : BaseWareHouseService<WareHouseService>, IWareHouseService
{
private readonly ISqlSugarClient _db;
private readonly IDictionaryDataService _dictionaryDataService;
@@ -352,11 +352,13 @@ namespace Tnb.WarehouseMgr
}
//执行电梯任务
var elevatorTasks = disTasks.Where(it => it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)).ToList();
Log.Information($"当前电梯任务数:{elevatorTasks?.Count ?? 0}");
Log.Information("准备执行电梯任务");
if (elevatorTasks?.Count > 0)
{
Log.Information("执行电梯任务");
Logger.Information($"当前电梯任务数:{elevatorTasks?.Count ?? 0}");
Logger.Information("准备执行电梯任务");
Logger.Information("执行电梯任务");
foreach (var elevatorTask in elevatorTasks)
{
await ExecuteTargetFloorTask(elevatorTask);
@@ -378,7 +380,7 @@ namespace Tnb.WarehouseMgr
}
catch (Exception ex)
{
Log.Error("生成预任务执行时出现错误", ex);
Logger.Error("生成预任务执行时出现错误", ex);
await db.Ado.RollbackTranAsync();
throw;
}
@@ -394,7 +396,7 @@ namespace Tnb.WarehouseMgr
/// <returns></returns>
private async Task CallingLanding(List<(string endlocation_code, string device_id, string id, string floorNO)> endLocCodes)
{
Log.Information($"开始呼梯操作.............");
Logger.Information($"开始呼梯操作.............");
try
{
var item = endLocCodes.FirstOrDefault();
@@ -402,7 +404,7 @@ namespace Tnb.WarehouseMgr
var devName = _eleCtlCfg.DevName;
{
var agvStatus = await _elevatorControlService.GetTagAsync(devName, ElevatorConsts.AGVControl);
Log.Information($"当前Agv状态:{agvStatus.ToEnum<EnumAgvStatus>().ToString()}");
Logger.Information($"当前Agv状态:{agvStatus.ToEnum<EnumAgvStatus>().ToString()}");
//判断当前设备是否为运行状态不是则进入Agv电梯控制状态
if (agvStatus.ToEnum<EnumAgvStatus>() != EnumAgvStatus.AGV运行状态)
@@ -415,11 +417,11 @@ namespace Tnb.WarehouseMgr
foreach (var (_, devId, disTaskId, floorNO) in endLocCodes)
{
Log.Information($"任务开始目标楼层为:{floorNO}");
Logger.Information($"任务开始目标楼层为:{floorNO}");
var floorN = await GetRealFloor(floorNO.ParseToInt());
Log.Information($"实际目标楼层为:{floorN}");
Logger.Information($"实际目标楼层为:{floorN}");
WmsElevatorUnexecute elevatorQueueItem = new()
{
@@ -431,7 +433,7 @@ namespace Tnb.WarehouseMgr
create_id = _userManager.UserId,
create_time = DateTime.Now
};
var elevatorQueue = await _db.Queryable<WmsElevatorUnexecute>().Where(it => it.elevator_id == devId && it.task_status == "执行中").ToListAsync();
var elevatorQueue = await _db.Queryable<WmsElevatorUnexecute>().Where(it => it.distask_id == disTaskId && it.task_status == "执行中").ToListAsync();
if ((elevatorQueue.IsNull() || elevatorQueue.Count < 1) && floorNO.ParseToInt() != curFloorNo)
{
@@ -439,7 +441,7 @@ namespace Tnb.WarehouseMgr
var callLiftRes = await _elevatorControlService.CallLift(devName, floorN, CancellationToken.None);
string successful = "成功", fail = "失败";
var callLiftResult = callLiftRes ? successful : fail;
Log.Information($"呼梯结果:{callLiftResult}");
Logger.Information($"呼梯结果:{callLiftResult}");
}
//如果当前电梯有任务在做,将当前呼梯任务放入待执行队列
@@ -450,11 +452,11 @@ namespace Tnb.WarehouseMgr
}
catch (Exception ex)
{
Log.Error("呼梯操作错误", ex);
Logger.Error("呼梯操作错误", ex);
throw;
}
}
/// <summary>
/// 执行到目标楼层电梯任务
/// </summary>
@@ -463,48 +465,52 @@ namespace Tnb.WarehouseMgr
private async Task ExecuteTargetFloorTask(WmsDistaskH disTask)
{
//收到放货确认通知向电梯发送到3楼的指令
Log.Information($"开始执行电梯任务任务ID:{disTask.id}");
Logger.Information($"开始执行电梯任务任务ID:{disTask.id}");
try
{
var elevatorQueueItem = await _db.Queryable<WmsElevatorUnexecute>().FirstAsync(it => it.task_status == "执行中");
/* var elevatorQueueItem = await _db.Queryable<WmsElevatorUnexecute>().FirstAsync(it => it.task_status == "执行中");
Log.Information($"是否存在电梯任务项:{elevatorQueueItem != null}");
if (elevatorQueueItem != null)
*/ //if (elevatorQueueItem != null)
{
//var disTask = disTasks.Find(x => x.id == elevatorQueueItem.distask_id);
//if (disTask?.status == WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID)
{
var doorStatus = -1;
var closeDoorRes = await _elevatorControlService.SendOpenCloseCmd(elevatorQueueItem.elevator_code, 4); //向电梯发送前门关门指令
Log.Information($"关门结果:{closeDoorRes}");
var closeDoorRes = await _elevatorControlService.SendOpenCloseCmd(_eleCtlCfg.DevName, 4); //向电梯发送前门关门指令
Logger.Information($"关门结果:{closeDoorRes}");
do
{
doorStatus = await _elevatorControlService.GetTagAsync(elevatorQueueItem.elevator_code, ElevatorConsts.DoorStatus);
doorStatus = await _elevatorControlService.GetTagAsync(_eleCtlCfg.DevName, ElevatorConsts.DoorStatus);
await Task.Delay(2000);
} while (doorStatus != 4);
Log.Information($"当前门状态:{doorStatus}");
Logger.Information($"当前门状态:{doorStatus}");
var floor = await GetRealFloor(disTask.end_floor.ParseToInt());
Log.Information($"目标楼层:{floor}");
Logger.Information($"目标楼层:{floor}");
//发送到目标楼的指令
var reuslt = await _elevatorControlService.WriteTagAsync(elevatorQueueItem.elevator_code, ElevatorConsts.FloorExecute, floor);
var reuslt = await _elevatorControlService.WriteTagAsync(_eleCtlCfg.DevName, ElevatorConsts.FloorExecute, floor);
//电梯任务手动执行任务状态上报
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) tuple = (-1, -1, -1, -1, -1);
do
{
tuple = await _elevatorControlService.GetElevatorStatus(elevatorQueueItem.elevator_code, CancellationToken.None);
tuple = await _elevatorControlService.GetElevatorStatus(_eleCtlCfg.DevName, CancellationToken.None);
await Task.Delay(2000);
} while (tuple.sysStatus != 3 && tuple.runStatus != 0);
Log.Information($"sysStatus:{tuple.sysStatus},runStatus:{tuple.runStatus},floorNo:{tuple.floorNo},disTask.end_floor={disTask.end_floor}");
Logger.Information($"sysStatus:{tuple.sysStatus},runStatus:{tuple.runStatus},floorNo:{tuple.floorNo},disTask.end_floor={disTask.end_floor}");
if (tuple.sysStatus.ToEnum<EnumSysStatus>() == EnumSysStatus. && tuple.runStatus.ToEnum<EnumRunStatus>() == EnumRunStatus.)
{
Log.Information($"disTask.require_id={disTask.require_id}");
List<string> disTaskIds = new() { disTask.id };
Log.Information($"disTaskIds={string.Join(",", disTaskIds)}");
TaskExecuteAfterUpInput teaUpInput = new() { disTaskIds = disTaskIds };
await TaskExecuteAfter(teaUpInput);
TaskCompleUpInput tcUpInput = new() { disTaskIds = disTaskIds };
await TaskComplate(tcUpInput);
}
@@ -513,7 +519,7 @@ namespace Tnb.WarehouseMgr
}
catch (Exception ex)
{
Log.Error("执行到目标楼层电梯任务失败", ex);
Logger.Error("执行到目标楼层电梯任务失败", ex);
throw;
}
}
@@ -538,7 +544,7 @@ namespace Tnb.WarehouseMgr
targetName = it.endpoint_code,
containerCode = it.carry_code,
}));
Log.Information($"请求地址:{url}");
Logger.Information($"请求地址:{url}");
foreach (var (k, v) in taskChainCodeDic)
{
dynamic reqBody = new ExpandoObject();
@@ -547,14 +553,14 @@ namespace Tnb.WarehouseMgr
reqBody.sequential = false;
reqBody.taskChainPriority = 0;
reqBody.taskList = v;
Log.Information($"请求参数:{JsonConvert.SerializeObject(reqBody)}");
Logger.Information($"请求参数:{JsonConvert.SerializeObject(reqBody)}");
var respBody = await HttpClientHelper.PostStreamAsync(url, reqBody, token);
Log.Information($"调用Agv接口响应结果:{respBody}");
Logger.Information($"调用Agv接口响应结果:{respBody}");
}
}
catch (Exception ex)
{
Log.Error("agv调度失败异常", ex);
Logger.Error("agv调度失败异常", ex);
throw;
}
}
@@ -658,11 +664,13 @@ namespace Tnb.WarehouseMgr
await _db.Updateable<WmsPretaskH>().SetColumns(it => new WmsPretaskH { status = WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID }).Where(it => preTaskIds.Contains(it.id)).ExecuteCommandAsync();
//更新电梯任务数量
var eles = await _db.Queryable<WmsElevatorH>().Where(it => disTasks.Select(x => x.area_code).Contains(it.area_code)).ToListAsync();
if (eles?.Count > 0)
await _db.Updateable(eles).ReSetValue(it => it.task_nums--).ExecuteCommandAsync();
/* var eles = await _db.Queryable<WmsElevatorH>().Where(it => disTasks.Select(x => x.area_code).Contains(it.area_code)).ToListAsync();
if (eles?.Count > 0)
await _db.Updateable(eles).ReSetValue(it => it.task_nums--).ExecuteCommandAsync();
*/
//更新载具,锁定状态为未锁定,更新载具的库位当前任务的目标库位
Logger.Information("更新载具及库位准备中.....");
var multiList = disTasks.Select(it => (it.carry_id, it.carry_status, it.endlocation_id, it.endlocation_code)).ToList();
var locWhIdMap = await _db.Queryable<BasLocation>().Where(it => multiList.Select(x => x.endlocation_id).Contains(it.id)).ToDictionaryAsync(it => it.id, it => it.wh_id);
List<WmsCarryH> carryIts = new();
@@ -677,9 +685,10 @@ namespace Tnb.WarehouseMgr
location_id = multiList[i].endlocation_id,
location_code = multiList[i].endlocation_code
};
var endLocId = multiList[i].endlocation_id;
WmsCarryCode carryCode = new()
{
warehouse_id = locWhIdMap[multiList[i].endlocation_id].ToString(),
warehouse_id = locWhIdMap.ContainsKey(endLocId) ? locWhIdMap[endLocId].ToString() : "",
location_id = multiList[i].endlocation_id,
location_code = multiList[i].endlocation_code
};
@@ -697,25 +706,37 @@ namespace Tnb.WarehouseMgr
locIts.Add(loc);
}
Log.Information("更新载具及库位开始.....");
Logger.Information("更新载具及库位开始.....");
await _db.Updateable(carryIts).UpdateColumns(it => new { it.is_lock, it.location_id, it.location_code }).ExecuteCommandAsync();
//更新条码的库位和仓库信息
await _db.Updateable(carryCodeIts).UpdateColumns(it => new { it.warehouse_id, it.location_id, it.location_code }).Where(it => multiList.Select(x => x.carry_id).Contains(it.carry_id)).ExecuteCommandAsync();
//更新库位信息,使用状态为 使用,锁定状态为未锁定
await _db.Updateable(locIts).UpdateColumns(it => new { it.is_use, it.is_lock }).ExecuteCommandAsync();
Log.Information("更新载具及库位结束.....");
Log.Information($"_userManager.LoginType={_userManager.LoginType}");
//更新业务主表的单据状态
Logger.Information("更新载具及库位结束.....");
Logger.Information($"_userManager==null:{_userManager == null}");
/* var loginType= _userManager?.LoginType ?? "web";
Log.Information($"_userManager.LoginType={loginType}");
*/ //更新业务主表的单据状态
foreach (var dt in disTasks)
{
Logger.Information("开始业务回更");
var disTaskCodes = await _db.Queryable<WmsDistaskCode>().Where(it => it.bill_id == dt.id).ToListAsync();
var upInput = new WareHouseUpInput { bizTypeId = dt.biz_type, requireId = dt.require_id!, distaskCodes = disTaskCodes, carryIds = disTasks.Select(x => x.carry_id).ToList() };
upInput.loginType = !_userManager.LoginType.IsNullOrEmpty() ? "app" : "web";
Log.Information($"upInput.loginType={upInput.loginType}");
/*if (!_userManager?.LoginType.IsNullOrEmpty() ?? false)
{
upInput.loginType = "app";
}
else
{
upInput.loginType = "web";
}*/
Logger.Information("loginType赋值前");
upInput.loginType = "web";//(!string.IsNullOrEmpty(_userManager?.LoginType) ? "app" : "web") ?? "web";
Logger.Information($"upInput.loginType={upInput.loginType}");
if (dt.is_sign == 1 && dt.chain_type == "3")
{
Log.Information("执行业务回更操作.....");
Logger.Information("执行业务回更操作.....");
await DoUpdate(upInput);
}
}
@@ -724,8 +745,8 @@ namespace Tnb.WarehouseMgr
}
catch (Exception ex)
{
Log.Error($"任务结束失败", ex);
Log.Error($"任务结束失败堆栈异常", ex.StackTrace);
Logger.Error($"任务结束失败", ex);
Log .Error($"任务结束失败堆栈异常", ex.StackTrace);
await _db.Ado.RollbackTranAsync();
throw;
}
@@ -792,11 +813,13 @@ namespace Tnb.WarehouseMgr
{
row = await _db.Insertable(preTaskCodes).ExecuteCommandAsync();
}
var eleP = preTasks.Find(x => x.area_code.Contains("ELE"));
if (eleP != null)
{
row = await _db.Updateable<WmsElevatorH>().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => it.area_code == eleP.area_code).ExecuteCommandAsync();
}
//先注释 by ly on 20231025
/* var eleP = preTasks.Find(x => x.area_code.Contains("ELE"));
if (eleP != null)
{
row = await _db.Updateable<WmsElevatorH>().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => it.area_code == eleP.area_code).ExecuteCommandAsync();
}
*/
return row > 0;
}
/// <summary>
@@ -847,7 +870,7 @@ namespace Tnb.WarehouseMgr
[NonAction]
public async Task<List<WmsPointH>> PathAlgorithms(string pStartId, string pEndId)
{
var roads = await _db.Queryable<WmsRoad>().ToListAsync();
var roads = await _db.Queryable<WmsRoad>().Where(it => it.status == 1).ToListAsync();
var points = await LocPathCalcAlgorithms(pStartId, pEndId, roads);
try
{

View File

@@ -1,5 +1,5 @@
{
"DevName": "Elevator1",
"DevName": "Elevator2",
"token": "780BE4144636CF47DDF3920B0F1D069B",
"GetTagListUrl": "http://192.168.11.110:9100/Dev/GetTagList",
"GetTagUrl": "http://192.168.11.110:9100/Dev/GetTag",