diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/ConfirmInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/ConfirmInput.cs
new file mode 100644
index 00000000..9a5329fc
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/ConfirmInput.cs
@@ -0,0 +1,25 @@
+using Tnb.WarehouseMgr.Entities.Enums;
+
+namespace Tnb.WarehouseMgr.Entities.Dto
+{
+ public class ConfirmInput
+ {
+ ///
+ /// 任务链编号
+ ///
+ public string taskChainCode { get; set; }
+ ///
+ /// 子任务编号
+ ///
+ public string taskCode { get; set; }
+ ///
+ /// 起点编号
+ ///
+ public string sourceName { get; set; }
+ ///
+ /// 终点编号
+ ///
+ public string targetName { get; set; }
+
+ }
+}
\ No newline at end of file
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/TaskCallBackInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/TaskCallBackInput.cs
new file mode 100644
index 00000000..a5182436
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/TaskCallBackInput.cs
@@ -0,0 +1,34 @@
+using Tnb.WarehouseMgr.Entities.Enums;
+
+namespace Tnb.WarehouseMgr.Entities.Dto
+{
+ public class TaskCallBackInput
+ {
+ ///
+ /// 任务链编号
+ ///
+ public string taskChainCode { get; set; }
+ ///
+ /// 任务链编号
+ ///
+ public string taskCode { get; set; }
+ ///
+ /// 起点编号
+ ///
+ public string sourceName { get; set; }
+ ///
+ /// 终点编号
+ ///
+ public string targetName { get; set; }
+ ///
+ /// 状态
+ ///
+ public string status { get; set; }
+ ///
+ /// 取货/放货
+ ///
+ public string action { get; set; }
+
+
+ }
+}
\ No newline at end of file
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/TaskChainCallBackInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/TaskChainCallBackInput.cs
new file mode 100644
index 00000000..697ff122
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/TaskChainCallBackInput.cs
@@ -0,0 +1,18 @@
+using Tnb.WarehouseMgr.Entities.Enums;
+
+namespace Tnb.WarehouseMgr.Entities.Dto
+{
+ public class TaskChainCallBackInput
+ {
+ ///
+ /// 任务链编号
+ ///
+ public string taskChainCode { get; set; }
+ ///
+ /// 状态
+ ///
+ public string status { get; set; }
+
+
+ }
+}
\ No newline at end of file
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs
index e4cfc765..93adbc1c 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs
@@ -54,5 +54,18 @@ namespace Tnb.WarehouseMgr.Interfaces
///
///
Task TaskComplate(TaskCompleUpInput input);
+ ///
+ /// 任务执行
+ ///
+ ///
+ ///
+ Task TaskExecute(TaskExecuteUpInput input);
+ ///
+ /// 任务执行取操作返回(后续操作)
+ ///
+ /// ///
+ ///
+ Task TaskExecuteAfter(TaskExecuteAfterUpInput input);
+
}
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs
index 3eb13f75..4dd0a4a2 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs
@@ -3,41 +3,190 @@ 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.Systems.Interfaces.System;
using Microsoft.AspNetCore.Mvc;
+using NPOI.OpenXmlFormats;
using Senparc.NeuChar.ApiHandlers;
+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.Entity;
+using Tnb.WarehouseMgr.Interfaces;
namespace Tnb.WarehouseMgr
{
///
/// Wms设备接口提供程序服务类
///
-
+
public class DeviceProviderService : BaseWareHouseService
{
- //[HttpPost,NonUnify]
- //public async Task pickupRequest(pickupRequest)
- //{
- // try
- // {
+ private readonly ISqlSugarClient _db;
+ private readonly IWareHouseService _wareHouseService;
- // }
- // catch (Exception)
- // {
-
- // throw;
- // }
- // return ToApiResult();
- //}
+ public DeviceProviderService(ISqlSugarRepository repository, IWareHouseService wareHouseService)
+ {
+ _db = repository.AsSugarClient();
+ _wareHouseService = wareHouseService;
+ }
///
/// 创建任务链
///
///
- [HttpPost]
- public async Task CreateTaskChain()
+ [HttpPost, NonUnify]
+ public async Task CreateTaskChain()
{
return await Task.FromResult(null);
- }
+ }
+
+ ///
+ /// 取货确认/申请取货
+ ///
+ ///
+ ///
+ [HttpPost, NonUnify]
+ 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.taskChainCode}-{input.taskCode}")
+ .ToListAsync();
+ }
+ catch (Exception)
+ {
+ return await ToApiResult(HttpStatusCode.InternalServerError, "请重试!");
+ throw;
+ }
+ return await ToApiResult(HttpStatusCode.InternalServerError, "未启用");
+ }
+
+ ///
+ /// 放货确认/申请放货
+ ///
+ ///
+ ///
+ [HttpPost, NonUnify]
+ 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.taskChainCode}-{input.taskCode}")
+ .ToListAsync();
+ }
+ catch (Exception)
+ {
+ return await ToApiResult(HttpStatusCode.InternalServerError, "请重试!");
+ throw;
+ }
+ return await ToApiResult(HttpStatusCode.InternalServerError, "未启用");
+ }
+
+ ///
+ /// 任务链状态上报
+ ///
+ ///
+ ///
+ [HttpPost, NonUnify]
+ public async Task TaskChainCallBack(TaskChainCallBackInput input)
+ {
+ try
+ {
+ switch (input.status)
+ {
+ case "CREATED": break;
+ case "ALLOCATED":
+ var disTasks = await _db.Queryable().Where(it => it.bill_code.Contains(input.taskChainCode)).ToListAsync();
+ TaskExecuteUpInput taskExecuteUpInput = new()
+ {
+ disTaskIds = disTasks.Select(x => x.id).ToList(),
+ };
+ await _wareHouseService.TaskExecute(taskExecuteUpInput); break;
+ case "PROGRESSING": 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]
+ public async Task TaskCallback(TaskCallBackInput input)
+ {
+ try
+ {
+ var disTasks = await _db.Queryable().Where(it => it.bill_code.Contains($"{input.taskChainCode}-{input.taskCode}")).ToListAsync();
+ if (input.action == "取货")
+ {
+ TaskExecuteAfterUpInput taskExecuteAfterUpInput = new()
+ {
+ disTaskIds = disTasks.Select(x => x.id).ToList()
+ };
+ await _wareHouseService.TaskExecuteAfter(taskExecuteAfterUpInput);
+ }
+ else if (input.action == "放货")
+ {
+ 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]
+ 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.taskChainCode}-{input.taskCode}")
+ .ToListAsync();
+ }
+ catch (Exception)
+ {
+ return await ToApiResult(HttpStatusCode.InternalServerError, "请重试!");
+ throw;
+ }
+ return await ToApiResult(HttpStatusCode.InternalServerError, "未启用");
+ }
+
+
}
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
index a8a61455..5882098a 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
@@ -164,6 +164,7 @@ namespace Tnb.WarehouseMgr
var whereExp = Expressionable.Create()
.And(it => it.wh_id == input.warehouse_id)
.And(it => it.is_lock == 0)
+ .And(it => it.is_type == ((int)EnumLocationType.存储库位).ToString())
.And(it => it.is_use == ((int)EnumCarryStatus.空闲).ToString())
.ToExpression();
items = await _db.Queryable().Where(whereExp).OrderBy(policy.policy).ToListAsync();
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyInstockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyInstockService.cs
index 6a3eb7fc..01d00f36 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyInstockService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyInstockService.cs
@@ -136,7 +136,7 @@ namespace Tnb.WarehouseMgr
preTaskUpInput.CarryId = input.data[nameof(WmsCarryD.carry_id)]?.ToString()!;
preTaskUpInput.CarryStartLocationId = points.FirstOrDefault()!.location_id!;
preTaskUpInput.CarryStartLocationCode = points.FirstOrDefault()!.location_code!;
- preTaskUpInput.LocationIds = points.Select(x => x.id).ToList();
+ preTaskUpInput.LocationIds = points.Select(x => x.location_id).ToList()!;
preTaskUpInput.PreTaskRecords = preTasks.Adapt>();
preTaskUpInput.PreTaskRecords.ForEach(x => x.id = SnowflakeIdHelper.NextId());
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyInstockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyInstockService.cs
index fda743f8..71b40265 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyInstockService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyInstockService.cs
@@ -132,7 +132,7 @@ namespace Tnb.WarehouseMgr
preTaskUpInput.CarryId = input.data[nameof(WmsCarryD.carry_id)]?.ToString()!;
preTaskUpInput.CarryStartLocationId = points.FirstOrDefault()!.location_id!;
preTaskUpInput.CarryStartLocationCode = points.FirstOrDefault()!.location_code!;
- preTaskUpInput.LocationIds = points.Select(x => x.id).ToList();
+ preTaskUpInput.LocationIds = points.Select(x => x.location_id).ToList()!;
preTaskUpInput.PreTaskRecords = preTasks.Adapt>();
preTaskUpInput.PreTaskRecords.ForEach(x => x.id = SnowflakeIdHelper.NextId());
WmsHandleH handleH = new();