using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using JNPF.Common.Core.Manager; using JNPF.Common.Enums; using JNPF.Common.Extension; using JNPF.FriendlyException; using JNPF.Logging; using JNPF.Systems.Interfaces.System; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using NPOI.OpenXmlFormats; using Senparc.NeuChar.ApiHandlers; using SqlSugar; using Tnb.EquipMgr.Entities; 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.Entity; using Tnb.WarehouseMgr.Interfaces; namespace Tnb.WarehouseMgr { /// /// Wms设备接口提供程序服务类 /// public class DeviceProviderService : BaseWareHouseService { private readonly ISqlSugarClient _db; private readonly IWareHouseService _wareHouseService; public DeviceProviderService(ISqlSugarRepository repository, IWareHouseService wareHouseService) { _db = repository.AsSugarClient(); _wareHouseService = wareHouseService; } /// /// 创建任务链 /// /// [HttpPost, NonUnify] public async Task CreateTaskChain() { return await Task.FromResult(null); } /// /// 取货确认/申请取货 /// /// /// [HttpPost, NonUnify, AllowAnonymous] public async Task LoadConfirm(ConfirmInput input) { try { var eles = await _db.Queryable().LeftJoin((a, b) => a.id == b.bill_id) .LeftJoin((a, b, c) => b.location_id == c.startlocation_id) .Where((a, b, c) => c.startlocation_code == input.sourceName && c.bill_code == input.taskCode) .ToListAsync(); } catch (Exception) { return await ToApiResult(HttpStatusCode.InternalServerError, "请重试!"); throw; } return await ToApiResult(HttpStatusCode.OK, "未启用"); } /// /// 放货确认/申请放货 /// /// /// [HttpPost, NonUnify, AllowAnonymous] public async Task UnloadConfirm(ConfirmInput input) { try { var eles = await _db.Queryable().LeftJoin((a, b) => a.id == b.bill_id) .LeftJoin((a, b, c) => b.location_id == c.endlocation_id) .Where((a, b, c) => c.endlocation_code == input.targetName && c.bill_code == input.taskCode) .ToListAsync(); } catch (Exception) { return await ToApiResult(HttpStatusCode.InternalServerError, "请重试!"); throw; } return await ToApiResult(HttpStatusCode.OK, "未启用"); } /// /// 任务链状态上报 /// /// [HttpPost, NonUnify,AllowAnonymous] public async Task TaskChainCallBack(TaskChainCallBackInput input) { try { Log.Information($"任务链编号:{input.taskChainCode},状态:{input.status},设备ID:{input.deviceID}"); switch (input.status) { case "CREATED": break; case "ALLOCATED":break; case "PROCESSING": var disTasks = await _db.Queryable().Where(it => it.bill_code.Contains(input.taskChainCode)).ToListAsync(); var eps = await _db.Queryable().Where(it => it.code.Contains(input.deviceID)).ToListAsync(); TaskExecuteUpInput taskExecuteUpInput = new() { disTaskIds = disTasks.Select(x => x.id).ToList(), EqpIds = eps.Select(x => x.id).ToList(), }; await _wareHouseService.TaskExecute(taskExecuteUpInput); break; case "CANCELLED": break; case "SUCCEED": break; case "FAILURE": break; case "FINISHED": break; default: break; } } catch (Exception) { return await ToApiResult(HttpStatusCode.InternalServerError, "请重试!"); throw; } return await ToApiResult(HttpStatusCode.OK, "成功"); } /// /// 任务状态上报 /// /// /// [HttpPost, NonUnify, AllowAnonymous] public async Task TaskCallback(TaskCallBackInput input) { Log.Information($"接收参数:{JsonConvert.SerializeObject(input)}"); try { var disTasks = await _db.Queryable().Where(it => it.bill_code.Contains(input.taskCode)).ToListAsync(); if (input.action == "LOAD") { TaskExecuteAfterUpInput taskExecuteAfterUpInput = new() { disTaskIds = disTasks.Select(x => x.id).ToList() }; await _wareHouseService.TaskExecuteAfter(taskExecuteAfterUpInput); } else if (input.action == "UNLOAD") { TaskCompleUpInput taskCompleUpInput = new() { disTaskIds = disTasks.Select(x => x.id).ToList() }; await _wareHouseService.TaskComplate(taskCompleUpInput); } } catch (Exception) { return await ToApiResult(HttpStatusCode.InternalServerError, "请重试!"); throw; } return await ToApiResult(HttpStatusCode.OK, "成功"); } /// /// 申请进出电梯 /// /// /// [HttpPost, NonUnify, AllowAnonymous] public async Task ElevatorConfirm(ConfirmInput input) { try { var eles = await _db.Queryable().LeftJoin((a, b) => a.id == b.bill_id) .LeftJoin((a, b, c) => b.location_id == c.startlocation_id) .Where((a, b, c) => c.startlocation_code == input.sourceName && c.bill_code == input.taskCode) .ToListAsync(); } catch (Exception) { return await ToApiResult(HttpStatusCode.InternalServerError, "请重试!"); throw; } return await ToApiResult(HttpStatusCode.OK, "未启用"); } } }