Compare commits

..

10 Commits

Author SHA1 Message Date
6d98f3b987 20241124日调试 2024-11-25 10:46:38 +08:00
2492eaa9df 20241123调试 2024-11-23 09:35:06 +08:00
461095beaa 添加变更任务任务状态的功能 2024-11-22 09:58:36 +08:00
585f0e256e 2024-11-22 调试通过 2024-11-22 08:08:45 +08:00
ad19053505 基本满足四向车,AGV调试需求 2024-11-20 22:35:28 +08:00
ac52f86fc4 修改WCSCOntroller支持前端直接自定义任务状态 2024-11-18 21:01:41 +08:00
9a391e47a3 1、下发任务时起点或终点为空时不执行任务
2、增加四向车指定出库位置的功能
2024-11-18 20:48:41 +08:00
3abbe9a470 1、wms任务添加WCcsId任务号配合四向车系统 2024-11-18 20:43:37 +08:00
4f8bb3316a 1、修复提升机数据查询失败的问题;
2、修复四向车接口加密问题
2024-11-16 09:25:44 +08:00
21ea775325 修改一部分文件结构 2024-11-15 11:51:41 +08:00
60 changed files with 701 additions and 236 deletions

View File

@ -1,8 +1,8 @@
using ApiTool; using ApiTool;
using WcsMain.ApiClient.General; using WcsMain.ApiClient.General;
using WcsMain.Common; using WcsMain.Common;
using WcsMain.ExtendMethod;
using WcsMain.Constant.WcsAttribute.AutoFacAttribute; using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
using WcsMain.Constant.ExtendMethod;
namespace WcsMain.ApiClient.AGV; namespace WcsMain.ApiClient.AGV;

View File

@ -2,8 +2,9 @@
using WcsMain.Common; using WcsMain.Common;
using WcsMain.Constant; using WcsMain.Constant;
using WcsMain.DataBase.TableEntity; using WcsMain.DataBase.TableEntity;
using WcsMain.ExtendMethod;
using WcsMain.Constant.WcsAttribute.AutoFacAttribute; using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
using WcsMain.Constant.ExtendMethod;
using System.Collections.Generic;
namespace WcsMain.ApiClient.AGV; namespace WcsMain.ApiClient.AGV;
@ -13,7 +14,7 @@ namespace WcsMain.ApiClient.AGV;
[Component] [Component]
public class AGVWebApiAction(AGVBaseWebApi webApiPost) public class AGVWebApiAction(AGVBaseWebApi webApiPost)
{ {
private readonly string[] stand = ["FaaZHG", "kzxhes", "yDN8ZZ", "6cDXzi", "ranQyi", "SxjX8e", "jC6x3C", "MSP3te"];
/// <summary> /// <summary>
/// 发送点对点搬运的任务 /// 发送点对点搬运的任务
/// </summary> /// </summary>
@ -21,52 +22,43 @@ public class AGVWebApiAction(AGVBaseWebApi webApiPost)
/// <returns></returns> /// <returns></returns>
public string Send_NO_VERIFY_BUCKET_MOVE(AppWmsTask wmsTask) public string Send_NO_VERIFY_BUCKET_MOVE(AppWmsTask wmsTask)
{ {
AGVRequestLayout<AGVTaskRequest<AGVBucketMove>> request = new() string vehicleNo = wmsTask.VehicleNo ?? "";
AGVTaskRequest<AGVBucketMove> request = new()
{ {
Header = new() RobotJobId = wmsTask.TaskId,
WareHouseId = 1,
RobotJobGroupNum = 1,
JobPriority = 1,
JobProorytyType = 0,
JobType = "NO_VERIFY_BUCKET_MOVE",
OrderSource = "BK",
JobData = new()
{ {
AppKey = ApplicationBaseConfig.APP_KEY, StartPoint = wmsTask.Origin,
AppSecret = ApplicationBaseConfig.APP_SECRET, StartPointName = null,
RequestId = wmsTask.TaskId, WorkFaces = "0",
TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), EndArea = wmsTask.Destination,
version = "2.9" EndPoint = wmsTask.Destination,
}, EndPointName = null,
Body = new() BucketTypeCode = vehicleNo.StartsWith("TP") ? "TP" : "ZYLJ", //
{ LetDownFlag = 2,
RobotJobId = wmsTask.TaskId, NeedOut = stand.Contains(wmsTask.Destination) ? 1 : 0,
WareHouseId = 100, CheckCode = vehicleNo.StartsWith("TP") ? null : 1,
RobotJobGroupId = wmsTask.TaskId,
Sequence = 1,
RobotJobGroupNum = 1,
JobPriority = 1,
JobProorytyType = 0,
JobType = "NO_VERIFY_BUCKET_MOVE",
JobData = new()
{
StartPoint = wmsTask.Origin,
StartPointName = null,
WorkFaces = "0",
EndArea = wmsTask.Destination,
EndPoint = wmsTask.Destination,
EndPointName = null,
BucketTypeCode = "00",
LetDownFlag = 2,
}
} }
}; };
var response = webApiPost.HttpPost<AGVRequestLayout<AGVTaskRequest<AGVBucketMove>>, AGVResponseLayout<AGVTaskResponse>>(request, CommonData.AppApiBaseInfos.GetAddress("AGV_NO_VERIFY_BUCKET_MOVE") ?? ""); var response = webApiPost.HttpPost<List<AGVTaskRequest<AGVBucketMove>>, AGVResponseBody<List<AGVTaskResponse>>> ([request], CommonData.AppApiBaseInfos.GetAddress("AGV_NO_VERIFY_BUCKET_MOVE") ?? "");
var responseData = response.ResponseEntity; var responseData = response.ResponseEntity;
if (!response.IsSend || responseData == null) if (!response.IsSend || responseData == null)
{ {
return "请求失败,网络故障"; return "请求失败,网络故障";
} }
if (responseData.Body!.Success == true && responseData.Body!.Code?.ToLower() == "success") if (responseData.Success == true && responseData.Code?.ToLower() == "success")
{ {
// 发送成功 // 发送成功
return string.Empty; return string.Empty;
} }
return responseData.Body.Message ?? "请求失败,未知原因"; return responseData.Message ?? "请求失败,未知原因";
} }
/// <summary> /// <summary>
@ -76,54 +68,54 @@ public class AGVWebApiAction(AGVBaseWebApi webApiPost)
/// <param name="origin"></param> /// <param name="origin"></param>
/// <param name="destination"></param> /// <param name="destination"></param>
/// <returns></returns> /// <returns></returns>
public string Send_AGV_TASK(string? taskId, string? origin, string? destination) public string Send_AGV_TASK(string? taskId, string? origin, string? destination, int needOut = 0)
{ {
AGVRequestLayout<AGVTaskRequest<AGVBucketMove>> request = new() AGVTaskRequest<AGVBucketMove> request = new()
{ {
Header = new() RobotJobId = taskId,
WareHouseId = 1,
RobotJobGroupNum = 1,
JobPriority = 1,
JobProorytyType = 0,
JobType = "NO_VERIFY_BUCKET_MOVE",
OrderSource = "BK",
JobData = new()
{ {
AppKey = ApplicationBaseConfig.APP_KEY, StartPoint = origin,
AppSecret = ApplicationBaseConfig.APP_SECRET, StartPointName = null,
RequestId = taskId, WorkFaces = "0",
TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), EndPoint = destination,
version = "2.9" EndPointName = null,
}, BucketTypeCode = "TP",
Body = new() LetDownFlag = 2,
{ NeedOut = needOut
RobotJobId = taskId,
WareHouseId = 100,
RobotJobGroupId = taskId,
Sequence = 1,
RobotJobGroupNum = 1,
JobPriority = 1,
JobProorytyType = 0,
JobType = "NO_VERIFY_BUCKET_MOVE",
JobData = new()
{
StartPoint = origin,
StartPointName = null,
WorkFaces = "0",
EndArea = destination,
EndPoint = destination,
EndPointName = null,
BucketTypeCode = "00",
LetDownFlag = 2,
}
} }
}; };
var response = webApiPost.HttpPost<AGVRequestLayout<AGVTaskRequest<AGVBucketMove>>, AGVResponseLayout<AGVTaskResponse>>(request, CommonData.AppApiBaseInfos.GetAddress("AGV_NO_VERIFY_BUCKET_MOVE") ?? "");
var response = webApiPost.HttpPost<List<AGVTaskRequest<AGVBucketMove>>, AGVResponseBody<List<AGVTaskResponse>>>([request], CommonData.AppApiBaseInfos.GetAddress("AGV_NO_VERIFY_BUCKET_MOVE") ?? "");
var responseData = response.ResponseEntity; var responseData = response.ResponseEntity;
if (!response.IsSend || responseData == null) if (!response.IsSend || responseData == null)
{ {
return "请求失败,网络故障"; return "请求失败,网络故障";
} }
if (responseData.Body!.Success == true && responseData.Body!.Code?.ToLower() == "success") if (responseData.Success == true && responseData.Code?.ToLower() == "success")
{ {
// 发送成功 // 发送成功
return string.Empty; return string.Empty;
} }
return responseData.Body.Message ?? "请求失败,未知原因"; return responseData.Message ?? "请求失败,未知原因";
}
public void Send_AGV_Action(string? agvCode, string? commond)
{
AGVActionRequest actionRequest = new()
{
AgvCode = agvCode,
FeedbackCommand = commond,
};
webApiPost.HttpPost<AGVActionRequest, object>(actionRequest, CommonData.AppApiBaseInfos.GetAddress("AGV_ACTION") ?? "");
} }

View File

@ -0,0 +1,14 @@
using Newtonsoft.Json;
namespace WcsMain.ApiClient.AGV.Dto;
public class AGVActionRequest
{
[JsonProperty("agvCode")]
public string? AgvCode { get; set; }
[JsonProperty("feedbackCommand")]
public string? FeedbackCommand{ get; set; }
}

View File

@ -46,7 +46,7 @@ public class AGVBucketMove
/// <summary> /// <summary>
/// 货架类型编码 /// 货架类型编码
/// </summary> /// </summary>
[JsonProperty("buckTypeCode")] [JsonProperty("bucketTypeCode")]
public string? BucketTypeCode { get; set; } public string? BucketTypeCode { get; set; }
/// <summary> /// <summary>

View File

@ -57,7 +57,7 @@ public class AGVResponseHeader
} }
// {"code":"ERR_PARTIAL_FAILURE","message":"Partial failure","success":false,"data":[{"code":"ERR_ILLEGAL_WHI","message":"ERR_ILLEGAL_WHI","robotJobId":"1731831975323001000"}]}
/// <summary> /// <summary>
/// AGV 响应体 /// AGV 响应体
/// </summary> /// </summary>

View File

@ -97,6 +97,12 @@ public class AGVTaskRequest<T> where T : class, new()
[JsonProperty("jobType")] [JsonProperty("jobType")]
public string? JobType { get; set; } public string? JobType { get; set; }
/// <summary>
/// 订单来源
/// </summary>
[JsonProperty("orderSource")]
public string? OrderSource { get; set; }
/// <summary> /// <summary>
/// 任务数据 /// 任务数据
/// </summary> /// </summary>

View File

@ -25,5 +25,5 @@ public class AGVTaskResponse
[JsonProperty("robotJobId")] [JsonProperty("robotJobId")]
public string? RobotJobId { get; set; } public string? RobotJobId { get; set; }
// {"code":"ERR_PARTIAL_FAILURE","message":"Partial failure","success":false,"data":[{"code":"ERR_ILLEGAL_WHI","message":"ERR_ILLEGAL_WHI","robotJobId":"1731831975323001000"}]}
} }

View File

@ -1,4 +1,6 @@
namespace WcsMain.ApiClient.Shuttle.Dto; using Newtonsoft.Json;
namespace WcsMain.ApiClient.Shuttle.Dto;
/// <summary> /// <summary>
/// 四向车库的响应 /// 四向车库的响应
@ -8,16 +10,19 @@ public class ContainerTaskResponse
/// <summary> /// <summary>
/// 响应码 /// 响应码
/// </summary> /// </summary>
[JsonProperty("code")]
public string? Code { get; set; } public string? Code { get; set; }
/// <summary> /// <summary>
/// WMS 任务号 /// WMS 任务号
/// </summary> /// </summary>
[JsonProperty("wmstaskid")]
public string? WmsTaskId { get; set; } public string? WmsTaskId { get; set; }
/// <summary> /// <summary>
/// 信息 /// 信息
/// </summary> /// </summary>
[JsonProperty("message")]
public string? Message { get; set; } public string? Message { get; set; }

View File

@ -1,4 +1,6 @@
namespace WcsMain.ApiClient.Shuttle.Dto; using Newtonsoft.Json;
namespace WcsMain.ApiClient.Shuttle.Dto;
/// <summary> /// <summary>
/// 四向车库出库移库请求 /// 四向车库出库移库请求
@ -8,31 +10,37 @@ public class ContainerTaskResqust
/// <summary> /// <summary>
/// 请求ID /// 请求ID
/// </summary> /// </summary>
[JsonProperty("requestid")]
public string? RequestId { get; set; } public string? RequestId { get; set; }
/// <summary> /// <summary>
/// 密钥 /// 密钥
/// </summary> /// </summary>
[JsonProperty("key")]
public string? Key { get; set; } public string? Key { get; set; }
/// <summary> /// <summary>
/// WMS 任务号 /// WMS 任务号
/// </summary> /// </summary>
[JsonProperty("wmstaskid")]
public string? WmsTaskId { get; set; } public string? WmsTaskId { get; set; }
/// <summary> /// <summary>
/// 载具号 /// 载具号
/// </summary> /// </summary>
[JsonProperty("palletno")]
public string? PalletNo { get; set; } public string? PalletNo { get; set; }
/// <summary> /// <summary>
/// 起始位置 /// 起始位置
/// </summary> /// </summary>
[JsonProperty("fromcellno")]
public string? FromCellNo { get; set; } public string? FromCellNo { get; set; }
/// <summary> /// <summary>
/// 目标位置 /// 目标位置
/// </summary> /// </summary>
[JsonProperty("tocellno")]
public string? ToCell { get; set; } public string? ToCell { get; set; }
/// <summary> /// <summary>
@ -42,6 +50,7 @@ public class ContainerTaskResqust
/// 2 - 出库 /// 2 - 出库
/// 3 - 移库 /// 3 - 移库
/// </remarks> /// </remarks>
[JsonProperty("tasktype")]
public string? TaskType { get; set; } public string? TaskType { get; set; }

View File

@ -1,8 +1,8 @@
using ApiTool; using ApiTool;
using WcsMain.ApiClient.General; using WcsMain.ApiClient.General;
using WcsMain.Common; using WcsMain.Common;
using WcsMain.ExtendMethod;
using WcsMain.Constant.WcsAttribute.AutoFacAttribute; using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
using WcsMain.Constant.ExtendMethod;
namespace WcsMain.ApiClient.Shuttle; namespace WcsMain.ApiClient.Shuttle;

View File

@ -1,8 +1,13 @@
using WcsMain.Common; using WcsMain.Common;
using WcsMain.DataBase.TableEntity; using WcsMain.DataBase.TableEntity;
using WcsMain.ExtendMethod;
using WcsMain.Constant.WcsAttribute.AutoFacAttribute; using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
using WcsMain.ApiClient.Shuttle.Dto; using WcsMain.ApiClient.Shuttle.Dto;
using WcsMain.Constant.ExtendMethod;
using System.Security.Cryptography;
using EncryptTool;
using WcsMain.Constant;
using System.Text;
using WcsMain.ExtendMethod;
namespace WcsMain.ApiClient.Shuttle; namespace WcsMain.ApiClient.Shuttle;
@ -19,11 +24,12 @@ public class ShuttleWebApiAction(ShuttleBaseWebApi webApiPost)
/// <returns></returns> /// <returns></returns>
public string ExecuteMoveTask(AppWmsTask wmsTask) public string ExecuteMoveTask(AppWmsTask wmsTask)
{ {
string requestId = Guid.NewGuid().ToString();
ContainerTaskResqust containerTaskResqust = new() ContainerTaskResqust containerTaskResqust = new()
{ {
RequestId = Guid.NewGuid().ToString(), RequestId = requestId,
Key = "", Key = (requestId + ApplicationBaseConfig.SHUTTLE_PWD).MD5Encrypt32(),
WmsTaskId = wmsTask.TaskId, WmsTaskId = wmsTask.WcsId,
FromCellNo = wmsTask.Origin, FromCellNo = wmsTask.Origin,
TaskType = "3", TaskType = "3",
ToCell = wmsTask.Destination, ToCell = wmsTask.Destination,
@ -52,10 +58,11 @@ public class ShuttleWebApiAction(ShuttleBaseWebApi webApiPost)
/// <returns></returns> /// <returns></returns>
public string ExecuteOutTask(string? taskId, string? origin, string? destination, string? vehicleNo) public string ExecuteOutTask(string? taskId, string? origin, string? destination, string? vehicleNo)
{ {
string requestId = Guid.NewGuid().ToString();
ContainerTaskResqust containerTaskResqust = new() ContainerTaskResqust containerTaskResqust = new()
{ {
RequestId = Guid.NewGuid().ToString(), RequestId = requestId,
Key = "", Key = (requestId + ApplicationBaseConfig.SHUTTLE_PWD).MD5Encrypt32(),
WmsTaskId = taskId, WmsTaskId = taskId,
FromCellNo = origin, FromCellNo = origin,
TaskType = "2", TaskType = "2",

View File

@ -3,8 +3,8 @@ using WcsMain.Common;
using WcsMain.Constant.Enum; using WcsMain.Constant.Enum;
using WcsMain.DataBase.Dao; using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity; using WcsMain.DataBase.TableEntity;
using WcsMain.ExtendMethod;
using WcsMain.Constant.WcsAttribute.AutoFacAttribute; using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
using WcsMain.Constant.ExtendMethod;
namespace WcsMain.ApiClient.WMS; namespace WcsMain.ApiClient.WMS;
@ -71,6 +71,7 @@ public class SendWmsTaskStatus(AppWmsTaskDao wmsTaskDao, WmsBaseWebApi wmsWebApi
return; return;
} }
ConsoleLog.Error($"【异常】发送WMS[任务异常]失败WMS返回异常任务号{wmsTask.TaskId},载具号:{wmsTask.VehicleNo},参考信息:{responseObj.Message}"); ConsoleLog.Error($"【异常】发送WMS[任务异常]失败WMS返回异常任务号{wmsTask.TaskId},载具号:{wmsTask.VehicleNo},参考信息:{responseObj.Message}");
return;
} }
}); });
} }
@ -249,6 +250,7 @@ public class SendWmsTaskStatus(AppWmsTaskDao wmsTaskDao, WmsBaseWebApi wmsWebApi
return; return;
} }
ConsoleLog.Error($"【异常】发送WMS[开始执行]失败WMS返回异常任务号{wmsTask.TaskId},载具号:{wmsTask.VehicleNo},参考信息:{responseObj.Message}"); ConsoleLog.Error($"【异常】发送WMS[开始执行]失败WMS返回异常任务号{wmsTask.TaskId},载具号:{wmsTask.VehicleNo},参考信息:{responseObj.Message}");
return;
} }
}); });
} }
@ -309,6 +311,7 @@ public class SendWmsTaskStatus(AppWmsTaskDao wmsTaskDao, WmsBaseWebApi wmsWebApi
return; return;
} }
ConsoleLog.Error($"【异常】发送WMS[任务完成]失败WMS返回异常任务号{wmsTask.TaskId},载具号:{wmsTask.VehicleNo},参考信息:{responseObj.Message}"); ConsoleLog.Error($"【异常】发送WMS[任务完成]失败WMS返回异常任务号{wmsTask.TaskId},载具号:{wmsTask.VehicleNo},参考信息:{responseObj.Message}");
return;
} }
}); });
} }
@ -350,6 +353,7 @@ public class SendWmsTaskStatus(AppWmsTaskDao wmsTaskDao, WmsBaseWebApi wmsWebApi
return; return;
} }
ConsoleLog.Error($"【异常】发送WMS[任务离开起始位置]失败WMS返回异常任务号{wmsTask.TaskId},载具号:{wmsTask.VehicleNo},参考信息:{responseObj.Message}"); ConsoleLog.Error($"【异常】发送WMS[任务离开起始位置]失败WMS返回异常任务号{wmsTask.TaskId},载具号:{wmsTask.VehicleNo},参考信息:{responseObj.Message}");
return;
} }
}); });
} }

View File

@ -1,8 +1,8 @@
using ApiTool; using ApiTool;
using WcsMain.ApiClient.General; using WcsMain.ApiClient.General;
using WcsMain.Common; using WcsMain.Common;
using WcsMain.ExtendMethod;
using WcsMain.Constant.WcsAttribute.AutoFacAttribute; using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
using WcsMain.Constant.ExtendMethod;
namespace WcsMain.ApiClient.WMS; namespace WcsMain.ApiClient.WMS;

View File

@ -20,10 +20,16 @@ public class AGVController(AGVService agvService) : ControllerBase
/// <param name="request"></param> /// <param name="request"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost("taskCallBack")] [HttpPost("taskCallBack")]
public AGVResponseLayout<AGVResponseLayout<object>> TaskCallBack(ApiServe.Dto.AGV.AGVRequestLayout<AGVRequestBodyLayout<AGVNoVeBuckMoveRequest>> request) => agvService.TaskCallBack(request); public AGVResponseLayout<AGVResponseLayout<object>> TaskCallBack([FromBody] Dto.AGV.AGVRequestLayout<AGVRequestBodyLayout<AGVNoVeBuckMoveRequest>> request) => agvService.TaskCallBack(request);
/// <summary>
/// AGV在点位请求动作
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost("requestAction")]
public AGVResponseLayout<AGVResponseLayout<object>> RequestAction([FromBody] Dto.AGV.AGVRequestLayout<AGVRequestBodyBaseLayout<AGVRequestActionRequest>> request) => agvService.RequestAction(request);
} }

View File

@ -9,7 +9,7 @@ namespace WcsMain.ApiServe.Controllers.ContainerController;
/// <summary> /// <summary>
/// 提供给四向车的API接口 /// 提供给四向车的API接口
/// </summary> /// </summary>
[Route("api/container")] [Route("api/shuttle")]
[ApiController] [ApiController]
[ServiceFilter<ResponseFilterAttribute>] [ServiceFilter<ResponseFilterAttribute>]
public class ContainerController(ContainerService containerService) : ControllerBase public class ContainerController(ContainerService containerService) : ControllerBase

View File

@ -38,11 +38,20 @@ public class WmsTaskController(WmsTaskService wmsTaskService) : ControllerBase
public WcsApiResponse GetStackerTask([FromBody] SetWmsTask request) => wmsTaskService.GetStackerTask(request); public WcsApiResponse GetStackerTask([FromBody] SetWmsTask request) => wmsTaskService.GetStackerTask(request);
/// <summary> /// <summary>
/// Wms向Wcs请求修改任务状态 /// Wcs请求修改任务状态
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost("updateWmsTaskStatus")] [HttpPost("updateWmsTaskStatus")]
public WcsApiResponse UpdateStackerTaskStatus([FromBody] UpdateStackerTaskStatusRequest request) => wmsTaskService.UpdateStackerTaskStatus(request); public WcsApiResponse UpdateStackerTaskStatus([FromBody] UpdateStackerTaskStatusRequest request) => wmsTaskService.UpdateStackerTaskStatus(request);
/// <summary>
///Wcs请求修改任务状态
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost("modifyWmsTaskStatus")]
public WcsApiResponse UpdateWmsTaskStatus([FromBody] UpdateWmsTaskStatusRequest request) => wmsTaskService.UpdateWmsTaskStatus(request);
} }

View File

@ -22,7 +22,7 @@ public class WmsTaskController(WmsTaskService wmsTaskService) : ControllerBase
/// <param name="request"></param> /// <param name="request"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost("setStackerTask")] [HttpPost("setStackerTask")]
public WmsApiResponse<List<GetStackerRequest>> GetStackerTask([FromBody] List<GetStackerRequest> request) => wmsTaskService.GetStackerTask(request); public WmsApiResponse<List<GetStackerRequest>> GetStackerTask([FromBody] GetStackerRequest request) => wmsTaskService.GetStackerTask(request);
/// <summary> /// <summary>
/// Wms向Wcs请求修改任务状态 /// Wms向Wcs请求修改任务状态

View File

@ -0,0 +1,16 @@
using System.Text.Json.Serialization;
namespace WcsMain.ApiServe.Dto.AGV;
public class AGVRequestActionRequest
{
[JsonPropertyName("agvCode")]
public string? AgvCode { get; set; }
[JsonPropertyName("command")]
public string? Command { get; set; }
[JsonPropertyName("jobId")]
public string? JobId { get; set; }
}

View File

@ -7,7 +7,33 @@ namespace WcsMain.ApiServe.Dto.AGV;
/// </summary> /// </summary>
public class AGVRequestBodyLayout<T> public class AGVRequestBodyLayout<T>
{ {
/// <summary>
/// 数据
/// </summary>
[JsonPropertyName("event")]
public AGVRequestBodyDataLayout<T>? Event { get; set; }
}
public class AGVRequestBodyBaseLayout<T>
{
/// <summary>
/// 数据
/// </summary>
[JsonPropertyName("event")]
public T? Event { get; set; }
}
public class AGVRequestBodyDataLayout<T>
{
/// <summary> /// <summary>
/// 上游任务号 /// 上游任务号
/// </summary> /// </summary>
@ -18,7 +44,7 @@ public class AGVRequestBodyLayout<T>
/// 仓库编号 /// 仓库编号
/// </summary> /// </summary>
[JsonPropertyName("warehouseId")] [JsonPropertyName("warehouseId")]
public string? WarehouseId { get; set; } public int? WarehouseId { get; set; }
/// <summary> /// <summary>
/// 快仓系统内部任务号 /// 快仓系统内部任务号
@ -44,6 +70,4 @@ public class AGVRequestBodyLayout<T>
[JsonPropertyName("jobData")] [JsonPropertyName("jobData")]
public T? JobData { get; set; } public T? JobData { get; set; }
} }

View File

@ -23,7 +23,7 @@ public class TaskStateNoticeRequest
/// WMS任务号 /// WMS任务号
/// </summary> /// </summary>
[JsonPropertyName("wmstaskid")] [JsonPropertyName("wmstaskid")]
public string? WmsTaskId { get; set; } public long? WmsTaskId { get; set; }
/// <summary> /// <summary>
/// 最终到达位置 /// 最终到达位置
@ -39,7 +39,7 @@ public class TaskStateNoticeRequest
/// 21 - 取消 /// 21 - 取消
/// </remarks> /// </remarks>
[JsonPropertyName("taskstate")] [JsonPropertyName("taskstate")]
public string? TaskState { get; set; } public int? TaskState { get; set; }

View File

@ -28,6 +28,12 @@ public class SetWmsTask
[JsonPropertyName("priority")] [JsonPropertyName("priority")]
public int? Priority { get; set; } public int? Priority { get; set; }
/// <summary>
/// 任务状态
/// </summary>
[JsonPropertyName("taskStatus")]
public int? TaskStatus { get; set; }
/// <summary> /// <summary>
/// 任务起点 /// 任务起点
/// </summary> /// </summary>

View File

@ -0,0 +1,19 @@
using System.Text.Json.Serialization;
namespace WcsMain.ApiServe.Dto.WcsDto.WmsTask;
public class UpdateWmsTaskStatusRequest
{
/// <summary>
/// 任务号
/// </summary>
[JsonPropertyName("wmsTaskId")]
public string? WmsTaskId { get; set; }
/// <summary>
/// 任务状态
/// </summary>
[JsonPropertyName("status")]
public int? Status { get; set; }
}

View File

@ -5,10 +5,12 @@ using WcsMain.Constant.Enum.Stacker;
using WcsMain.DataBase.Dao; using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity; using WcsMain.DataBase.TableEntity;
using WcsMain.Constant.WcsAttribute.AutoFacAttribute; using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
using WcsMain.EquipOperation.StackerConvey;
using WcsMain.ApiClient.AGV;
namespace WcsMain.ApiServe.Service.AGVService; namespace WcsMain.ApiServe.Service.AGVService;
[Service] [Service]
public class AGVService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent taskExecuteEvent) public class AGVService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent taskExecuteEvent, StackerConveyOperation stackerConveyOperation, AGVWebApiAction webApiAction)
{ {
/// <summary> /// <summary>
/// AGV 任务回告 /// AGV 任务回告
@ -26,8 +28,8 @@ public class AGVService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent taskExecut
Body = new() { Code = "ERROR", Success = false, Message = "Body 未能正确解析" } Body = new() { Code = "ERROR", Success = false, Message = "Body 未能正确解析" }
}; };
} }
string? wmsTaskId = bodyData.RobotJobId; // 任务号 string? wmsTaskId = bodyData.Event?.RobotJobId; // 任务号
string? status = bodyData.State; // 状态 string? status = bodyData.Event?.State; // 状态
if(status == default || wmsTaskId == default) if(status == default || wmsTaskId == default)
{ {
return new() return new()
@ -78,7 +80,19 @@ public class AGVService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent taskExecut
// 若是出库位置则在上报任务完成时上报WMS任务完成 // 若是出库位置则在上报任务完成时上报WMS任务完成
if (status == "DONE" || status == "ABNORMAL_COMPLETED") if (status == "DONE" || status == "ABNORMAL_COMPLETED")
{ {
if(wmsTask.TaskType == (int)WmsTaskTypeEnum.outTask || wmsTask.TaskType == (int)WmsTaskTypeEnum.agv) Task.Factory.StartNew(() =>
{
// 如果是完成并且是入库任务或者agv任务则给放货位置写放货完成
if (status == "DONE" && (wmsTask.TaskType == (int)WmsTaskTypeEnum.inTask || wmsTask.TaskType == (int)WmsTaskTypeEnum.agv))
{
string? setLocation = wmsTask.TaskType == (int)WmsTaskTypeEnum.inTask ? wmsTask.MidPoint : wmsTask.Destination;
string plcLocation = setLocation == null ? "" : setLocation.Trim().Split('_')[0];
string? plcErrtext = stackerConveyOperation.SetVehicelComplete(plcLocation ?? "");
ConsoleLog.Info($"AGV 放货完成通知PLC结果{(string.IsNullOrEmpty(plcErrtext) ? "" : plcErrtext)},站台:{plcLocation},箱号:{wmsTask.VehicleNo}");
}
});
if(wmsTask.TaskType == (int)WmsTaskTypeEnum.outTask || wmsTask.TaskType == (int)WmsTaskTypeEnum.agv) // 出库或移库
{ {
string? errText = taskExecuteEvent.CompleteTaskEvent(wmsTask, "AGV上报完成", wmsTask.Destination); string? errText = taskExecuteEvent.CompleteTaskEvent(wmsTask, "AGV上报完成", wmsTask.Destination);
if (string.IsNullOrEmpty(errText)) if (string.IsNullOrEmpty(errText))
@ -95,7 +109,7 @@ public class AGVService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent taskExecut
Body = new() { Code = "ERROR", Success = false, Message = $"操作异常:{errText}" } Body = new() { Code = "ERROR", Success = false, Message = $"操作异常:{errText}" }
}; };
} }
if(wmsTask.TaskType == (int)WmsTaskTypeEnum.inTask) if(wmsTask.TaskType == (int)WmsTaskTypeEnum.inTask) // 入库
{ {
var updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, TaskStatus = (int)WmsTaskStatusEnum.arriveMid, ModifyTime = DateTime.Now }); var updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, TaskStatus = (int)WmsTaskStatusEnum.arriveMid, ModifyTime = DateTime.Now });
if(updateResult > 0) if(updateResult > 0)
@ -145,4 +159,88 @@ public class AGVService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent taskExecut
Body = new() { Code = "ERROR", Success = false, Message = $"操作异常数据更新失败" } Body = new() { Code = "ERROR", Success = false, Message = $"操作异常数据更新失败" }
}; };
} }
/// <summary>
/// AGV请求动作
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public AGVResponseLayout<AGVResponseLayout<object>> RequestAction(Dto.AGV.AGVRequestLayout<AGVRequestBodyBaseLayout<AGVRequestActionRequest>> request)
{
string? agvCode = request.Body?.Event?.AgvCode;
string? location = request.Body?.Event?.Command;
if(string.IsNullOrWhiteSpace(agvCode)|| string.IsNullOrWhiteSpace(location))
{
return new()
{
Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") },
Body = new() { Code = "ERROR", Success = false, Message = $"数据无法解析" }
};
}
// [TODO]
webApiAction.Send_AGV_Action(agvCode, "TRUE");
return new()
{
Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") },
Body = new() { Code = "SUCCESS", Success = true, Message = "操作成功" }
};
}
public void test()
{
Dictionary<string, int> locationIndex = [];
/*--------------- 拣选站台 ----------------*/
locationIndex.TryAdd("WWYPYA", 0); // 1-1
locationIndex.TryAdd("wDj7k3", 1); // 1-2
locationIndex.TryAdd("5sNjZj", 2); // 1-3
locationIndex.TryAdd("x3hmTx", 3); // 1-4
locationIndex.TryAdd("TrkieR", 4); // 2-1
locationIndex.TryAdd("fED33G", 5); // 2-2
locationIndex.TryAdd("SAwJWb", 6); // 2-3
locationIndex.TryAdd("kSyBN2", 7); // 2-4
locationIndex.TryAdd("tZQJmY", 8); // 3-1
locationIndex.TryAdd("aHB3A4", 9); // 3-2
locationIndex.TryAdd("WAdrMA", 10);// 3-3
locationIndex.TryAdd("EdW8JH", 11);// 3-4
locationIndex.TryAdd("rK5RbX", 12);// 4-1
locationIndex.TryAdd("rThaME", 13);// 4-2
locationIndex.TryAdd("28PW7p", 14);// 4-3
locationIndex.TryAdd("rNH2Bb", 15);// 4-4
locationIndex.TryAdd("ZbkKHC", 16);// 5-1
locationIndex.TryAdd("YeSNEd", 17);// 5-2
locationIndex.TryAdd("QCECwK", 18);// 5-3
locationIndex.TryAdd("heYrie", 19);// 5-4
locationIndex.TryAdd("byBDnX", 20);// 6
/*----------------- 翻包区 -----------------*/
locationIndex.TryAdd("TQzNDN", 21);
locationIndex.TryAdd("SsNakz", 22);
locationIndex.TryAdd("TjtsJf", 23);
locationIndex.TryAdd("dM28J8", 24);
locationIndex.TryAdd("jAiFNS", 25);
locationIndex.TryAdd("AHQGKW", 26);
locationIndex.TryAdd("ACEMTS", 27);
locationIndex.TryAdd("6HbTKm", 28);
/*----------------- 出入库口 -----------------*/
locationIndex.TryAdd("FaaZHG", 29);
locationIndex.TryAdd("kzxhes", 30);
locationIndex.TryAdd("yDN8ZZ", 31);
locationIndex.TryAdd("6cDXzi", 32);
locationIndex.TryAdd("ranQyi", 33);
locationIndex.TryAdd("SxjX8e", 34);
locationIndex.TryAdd("jC6x3C", 35);
locationIndex.TryAdd("MSP3te", 36);
locationIndex.TryAdd("611", 29);
locationIndex.TryAdd("511", 30);
locationIndex.TryAdd("513", 31);
locationIndex.TryAdd("411", 32);
locationIndex.TryAdd("311", 33);
locationIndex.TryAdd("213", 34);
locationIndex.TryAdd("211", 35);
locationIndex.TryAdd("111", 36);
}
} }

View File

@ -4,11 +4,16 @@ using WcsMain.Constant.Enum.Stacker;
using WcsMain.DataBase.Dao; using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity; using WcsMain.DataBase.TableEntity;
using WcsMain.Constant.WcsAttribute.AutoFacAttribute; using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
using WcsMain.ApiClient.WMS;
using WcsMain.ApiClient.WMS.Dto;
using WcsMain.Common;
using WcsMain.Constant.ExtendMethod;
using WcsMain.EquipOperation.StackerConvey;
namespace WcsMain.ApiServe.Service.ContainerService; namespace WcsMain.ApiServe.Service.ContainerService;
[Service] [Service]
public class ContainerService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent taskExecuteEvent) public class ContainerService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent taskExecuteEvent, WmsBaseWebApi wmsBaseWebApi, StackerConveyOperation stackerConveyOperation)
{ {
/// <summary> /// <summary>
/// 请求四向车任务 /// 请求四向车任务
@ -23,23 +28,56 @@ public class ContainerService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent task
return new() { Code = "400", Message = "缺少必须参数" }; return new() { Code = "400", Message = "缺少必须参数" };
} }
List<AppWmsTask>? wmsTasks = wmsTaskDao.Select(new() { VehicleNo = request.PalleetNo, TaskStatus = (int)WmsTaskStatusEnum.arriveMid })?.OrderByDescending(o => o.CreateTime).ToList(); List<AppWmsTask>? wmsTasks = wmsTaskDao.Select(new() { VehicleNo = request.PalleetNo, TaskStatus = (int)WmsTaskStatusEnum.arriveMid })?.OrderByDescending(o => o.CreateTime).ToList();
if(wmsTasks == null) if (wmsTasks == null)
{ {
return new() { Code = "400", Message = "数据连接失败,请重试" }; return new() { Code = "400", Message = "数据连接失败,请重试" };
} }
if(wmsTasks.Count == 0) bool apply = false;
if (wmsTasks.Count == 0)
{ {
return new() { Code = "400", Message = "该载具暂无待执行的任务" }; /* 请求WMS获取任务 */
ApplyInRequest applyInRequest = new()
{
Point = request.FormCellNo,
VehicleNo = request.PalleetNo,
};
var response = wmsBaseWebApi.HttpPost<ApplyInRequest, WmsResponse>(applyInRequest, CommonData.AppApiBaseInfos.GetAddress("ApplyEnterApiAddress") ?? "");
if(response.IsSend && response.ResponseEntity != null && response.ResponseEntity.Code == 0)
{
int i = 0;
while(i < 5)
{
i++;
Thread.Sleep(1000);
wmsTasks = wmsTaskDao.Select(new() { VehicleNo = request.PalleetNo, TaskStatus = (int)WmsTaskStatusEnum.create })?.OrderByDescending(o => o.CreateTime).ToList();
if (wmsTasks == null || wmsTasks.Count < 1) continue;
apply = true;
break;
}
}
}
if(wmsTasks == default || wmsTasks.Count < 1)
{
return new() { Code = "400", Message = "无任务,请重试" };
} }
AppWmsTask wmsTask = wmsTasks.First(); AppWmsTask wmsTask = wmsTasks.First();
/* 更新状态为前往终点 */ /* 更新状态为前往终点 */
var updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, TaskStatus = (int)WmsTaskStatusEnum.toMid, ModifyTime = DateTime.Now }); var updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, StartTime = apply ? DateTime.Now : null, TaskStatus = (int)WmsTaskStatusEnum.toDestination, ModifyTime = DateTime.Now });
ConsoleLog.Success($"API更新任务状态结果{(updateResult > 0 ? "" : "")},任务号:{wmsTask.TaskId}"); ConsoleLog.Success($"API更新任务状态结果{(updateResult > 0 ? "" : "")},任务号:{wmsTask.TaskId}");
//Task.Factory.StartNew(() =>
//{
// // 给PLC写完成原因是四向车给PLC经常写入失败。
// Thread.Sleep(500);
// for (int i = 0; i < 3; i++)
// {
// stackerConveyOperation.StandTaskApplyComplete(request.FormCellNo);
// }
//});
return new() return new()
{ {
Code = "200", Code = "200",
Message = "操作成功", Message = "操作成功",
WmsTaskId = wmsTask.TaskId, WmsTaskId = wmsTask.WcsId,
PalletNo = wmsTask.VehicleNo, PalletNo = wmsTask.VehicleNo,
FromCellNo = request.FormCellNo, FromCellNo = request.FormCellNo,
ToCellNo = wmsTask.Destination, ToCellNo = wmsTask.Destination,
@ -53,11 +91,11 @@ public class ContainerService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent task
/// <returns></returns> /// <returns></returns>
public TaskStateNoticeResponse TaskStateNotice(TaskStateNoticeRequest request) public TaskStateNoticeResponse TaskStateNotice(TaskStateNoticeRequest request)
{ {
if(string.IsNullOrEmpty(request.TaskState) || string.IsNullOrEmpty(request.WmsTaskId) || string.IsNullOrEmpty(request.FactendCell)) if(string.IsNullOrEmpty(request.TaskState?.ToString()) || string.IsNullOrEmpty(request.WmsTaskId?.ToString()) || string.IsNullOrEmpty(request.FactendCell))
{ {
return new() { Code = "400", Message = "缺少必须的参数" }; return new() { Code = "400", Message = "缺少必须的参数" };
} }
List<AppWmsTask>? appWmsTasks = wmsTaskDao.Select(new() { TaskId = request.WmsTaskId }); List<AppWmsTask>? appWmsTasks = wmsTaskDao.Select(new() { WcsId = request.WmsTaskId?.ToString() });
if(appWmsTasks == null) if(appWmsTasks == null)
{ {
return new() { Code = "400", Message = "数据连接异常,请稍后再试" }; return new() { Code = "400", Message = "数据连接异常,请稍后再试" };
@ -67,18 +105,29 @@ public class ContainerService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent task
return new() { Code = "400", Message = $"该任务号不存在:{request.WmsTaskId}" }; return new() { Code = "400", Message = $"该任务号不存在:{request.WmsTaskId}" };
} }
AppWmsTask wmsTask = appWmsTasks.First(); AppWmsTask wmsTask = appWmsTasks.First();
if (wmsTask.TaskType == (int)WmsTaskTypeEnum.inTask || wmsTask.TaskType == (int)WmsTaskTypeEnum.moveTask) if(request.TaskState?.ToString() == "20")
{ {
/* 入库/移库 完成需要反馈WMS任务完成更新任务状态为完成 */ if (wmsTask.TaskType == (int)WmsTaskTypeEnum.inTask || wmsTask.TaskType == (int)WmsTaskTypeEnum.moveTask)
string? errText = taskExecuteEvent.CompleteTaskEvent(wmsTask, "四向车上报完成", request.FactendCell); {
return new() { Code = string.IsNullOrEmpty(errText) ? "200" : "400", Message = string.IsNullOrEmpty(errText) ? "成功" : errText, WmsTaskId = request.WmsTaskId }; /* 入库/移库 完成需要反馈WMS任务完成更新任务状态为完成 */
string? errText = taskExecuteEvent.CompleteTaskEvent(wmsTask, "四向车上报完成", request.FactendCell);
return new() { Code = string.IsNullOrEmpty(errText) ? "200" : "400", Message = string.IsNullOrEmpty(errText) ? "成功" : errText, WmsTaskId = request.WmsTaskId?.ToString() };
}
if (wmsTask.TaskType == (int)WmsTaskTypeEnum.outTask)
{
/* 更新任务状态为到达中间点 */
int updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, TaskStatus = (int)WmsTaskStatusEnum.arriveMid, ModifyTime = DateTime.Now, TaskMsg = "四向车上报到达中间点" });
return new() { Code = updateResult > 0 ? "200" : "400", Message = updateResult > 0 ? "成功" : "数据异常", WmsTaskId = request.WmsTaskId?.ToString() };
}
return new() { Code = "400", Message = $"该任务不支持的类型:{request.WmsTaskId}" };
} }
if(wmsTask.TaskType == (int)WmsTaskTypeEnum.outTask) if (request.TaskState?.ToString() == "21")
{ {
/* 更新任务状态为到达中间点 */ /* 更新任务状态为取消 */
int updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, TaskStatus = (int)WmsTaskStatusEnum.arriveMid, ModifyTime = DateTime.Now }); int updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, TaskStatus = (int)WmsTaskStatusEnum.err, TaskMsg = "四向车取消", EndTime = DateTime.Now, ModifyTime = DateTime.Now });
return new() { Code = updateResult > 0 ? "200" : "400", Message = updateResult > 0 ? "成功" : "数据异常", WmsTaskId = request.WmsTaskId }; return new() { Code = updateResult > 0 ? "200" : "400", Message = updateResult > 0 ? "成功" : "数据异常", WmsTaskId = request.WmsTaskId?.ToString() };
} }
return new() { Code = "400", Message = $"该任务不支持的类型:{request.WmsTaskId}" }; return new() { Code = "400", Message = $"不支持的状态类型:{request.TaskState}" };
} }
} }

View File

@ -53,7 +53,7 @@ public class WmsTaskService(WmsTaskAction wmsTaskAction, AppWmsTaskDao wmsTaskDa
/// <returns></returns> /// <returns></returns>
public WcsApiResponse GetStackerTask(SetWmsTask request) public WcsApiResponse GetStackerTask(SetWmsTask request)
{ {
request.TaskId = dataBaseData.GetNewUUID(); request.TaskId = dataBaseData.GetNewUUID2();
bool checkData = CheckData.CheckDataRules(request); bool checkData = CheckData.CheckDataRules(request);
if (!checkData) if (!checkData)
{ {
@ -63,8 +63,9 @@ public class WmsTaskService(WmsTaskAction wmsTaskAction, AppWmsTaskDao wmsTaskDa
AppWmsTask wmsTask = new() AppWmsTask wmsTask = new()
{ {
TaskId = request.TaskId, TaskId = request.TaskId,
WcsId = dataBaseData.GetNewUUID2(),
TaskType = request.TaskType, TaskType = request.TaskType,
TaskStatus = (int)WmsTaskStatusEnum.create, TaskStatus = request.TaskStatus == default ? (int)WmsTaskStatusEnum.create : request.TaskStatus,
Priority = request.Priority ?? 0, Priority = request.Priority ?? 0,
Origin = request.Origin, Origin = request.Origin,
MidPoint = request.Midpoint, MidPoint = request.Midpoint,
@ -127,6 +128,25 @@ public class WmsTaskService(WmsTaskAction wmsTaskAction, AppWmsTaskDao wmsTaskDa
} }
} }
/// <summary>
/// 更新任务状态
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public WcsApiResponse UpdateWmsTaskStatus(UpdateWmsTaskStatusRequest request)
{
if(request.WmsTaskId == default || request.Status == default)
{
return WcsApiResponseFactory.RequestErr();
}
var updateResult = wmsTaskDao.Update(new AppWmsTask { TaskId = request.WmsTaskId, TaskStatus = request.Status, TaskMsg = $"WCS界面修改状态{request.Status}" });
if(updateResult > 0)
{
return WcsApiResponseFactory.Success();
}
return WcsApiResponseFactory.DataBaseErr();
}
} }

View File

@ -8,10 +8,12 @@ using WcsMain.Common;
using WcsMain.Constant.Enum.Stacker; using WcsMain.Constant.Enum.Stacker;
using WcsMain.DataBase.Dao; using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity; using WcsMain.DataBase.TableEntity;
using WcsMain.ExtendMethod;
using WcsMain.StaticData; using WcsMain.StaticData;
using WcsMain.Utils.Plugins; using WcsMain.Utils.Plugins;
using WcsMain.Constant.WcsAttribute.AutoFacAttribute; using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
using WcsMain.Constant.ExtendMethod;
using WcsMain.Common.DataService;
using WcsMain.DataBase.MixDao;
namespace WcsMain.ApiServe.Service.WmsService; namespace WcsMain.ApiServe.Service.WmsService;
@ -19,76 +21,74 @@ namespace WcsMain.ApiServe.Service.WmsService;
/// Wms任务接口逻辑 /// Wms任务接口逻辑
/// </summary> /// </summary>
[Service] [Service]
public class WmsTaskService(WmsTaskAction wmsTaskAction, AppWmsTaskDao wmsTaskDao) public class WmsTaskService(WmsTaskAction wmsTaskAction, AppWmsTaskDao wmsTaskDao, DataBaseData dataBaseData)
{ {
/// <summary> /// <summary>
/// 接收WMS任务数据处理 /// 接收WMS任务数据处理
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <returns></returns> /// <returns></returns>
public WmsApiResponse<List<GetStackerRequest>> GetStackerTask(List<GetStackerRequest> request) public WmsApiResponse<List<GetStackerRequest>> GetStackerTask(GetStackerRequest request)
{ {
if (request.Count < 1 || request.Count > 20) return WmsApiResponseFactory.RequestErr<List<GetStackerRequest>>(null, "请求的任务数量只能在 1 至 20 范围内"); //if (request.Count < 1 || request.Count > 20) return WmsApiResponseFactory.RequestErr<List<GetStackerRequest>>(null, "请求的任务数量只能在 1 至 20 范围内");
List<GetStackerRequest> errRequest = []; // 存放错误的请求 List<GetStackerRequest> errRequest = []; // 存放错误的请求
/* 插入库存信息 */ // ---- 库存由WMS管理数据库表也无需操作 /* 插入库存信息 */ // ---- 库存由WMS管理数据库表也无需操作
List<AppWmsTask> wmsTasks = []; List<AppWmsTask> wmsTasks = [];
foreach (var taskData in request) /* 检验传入的数据格式 */
bool checkData = CheckData.CheckDataRules(request);
if (!checkData)
{ {
/* 检验传入的数据格式 */ var errorRequest = ObjectCopy.CopyProperties<GetStackerRequest, GetStackerRequest>(request);
bool checkData = CheckData.CheckDataRules(taskData); errRequest.Add(errorRequest);
if (!checkData)
{
var errorRequest = ObjectCopy.CopyProperties<GetStackerRequest, GetStackerRequest>(taskData);
errRequest.Add(errorRequest);
}
/* 检验起点和终点是否正常 */
if(taskData.TaskType == (int)WmsTaskTypeEnum.moveTask)
{
var existOringin = CommonData.AppLocations.ExistWmsLocation(taskData.Origin);
var existDestination = CommonData.AppLocations.ExistWmsLocation(taskData.Destination);
if (!existOringin || !existDestination)
{
var errorRequest = ObjectCopy.CopyProperties<GetStackerRequest, GetStackerRequest>(taskData);
errRequest.Add(errorRequest);
}
}
else if(taskData.TaskType == (int)WmsTaskTypeEnum.inTask)
{
var existDestination = CommonData.AppLocations.ExistWmsLocation(taskData.Destination);
if (!existDestination)
{
var errorRequest = ObjectCopy.CopyProperties<GetStackerRequest, GetStackerRequest>(taskData);
errRequest.Add(errorRequest);
}
}
else if(taskData.TaskType == (int)WmsTaskTypeEnum.outTask)
{
var existOringin = CommonData.AppLocations.ExistWmsLocation(taskData.Origin);
if (!existOringin)
{
var errorRequest = ObjectCopy.CopyProperties<GetStackerRequest, GetStackerRequest>(taskData);
errRequest.Add(errorRequest);
}
}
/* 构造任务 */
wmsTasks.Add(new AppWmsTask()
{
TaskId = taskData.TaskId,
TaskType = taskData.TaskType,
TaskStatus = (int)WmsTaskStatusEnum.create,
Priority = taskData.Priority ?? -1,
Origin = taskData.Origin,
MidPoint = taskData.Midpoint,
Destination = taskData.Destination,
VehicleNo = taskData.VehicleNo,
VehicleSize = taskData.VehicleSize ?? -1,
Weight = taskData.Weight ?? -1,
CreateTime = DateTime.Now,
ModifyTime = DateTime.Now,
CreatePerson = StaticString.WMS,
});
} }
if(errRequest.Count > 0) // 如果有错误请求,则返回错误请求 ///* 检验起点和终点是否正常 */
//if (request.TaskType == (int)WmsTaskTypeEnum.moveTask)
//{
// var existOringin = CommonData.AppLocations.ExistWmsLocation(request.Origin);
// var existDestination = CommonData.AppLocations.ExistWmsLocation(request.Destination);
// if (!existOringin || !existDestination)
// {
// var errorRequest = ObjectCopy.CopyProperties<GetStackerRequest, GetStackerRequest>(request);
// errRequest.Add(errorRequest);
// }
//}
//else if (request.TaskType == (int)WmsTaskTypeEnum.inTask)
//{
// var existDestination = CommonData.AppLocations.ExistWmsLocation(request.Destination);
// if (!existDestination)
// {
// var errorRequest = ObjectCopy.CopyProperties<GetStackerRequest, GetStackerRequest>(request);
// errRequest.Add(errorRequest);
// }
//}
//else if (request.TaskType == (int)WmsTaskTypeEnum.outTask)
//{
// var existOringin = CommonData.AppLocations.ExistWmsLocation(request.Origin);
// if (!existOringin)
// {
// var errorRequest = ObjectCopy.CopyProperties<GetStackerRequest, GetStackerRequest>(request);
// errRequest.Add(errorRequest);
// }
//}
/* 构造任务 */
wmsTasks.Add(new AppWmsTask()
{
TaskId = request.TaskId,
WcsId = dataBaseData.GetNewUUID2(),
TaskType = request.TaskType,
TaskStatus = (int)WmsTaskStatusEnum.create,
Priority = request.Priority ?? -1,
Origin = request.Origin,
MidPoint = request.Midpoint,
Destination = request.Destination,
VehicleNo = request.VehicleNo,
VehicleSize = request.VehicleSize ?? -1,
Weight = request.Weight ?? -1,
CreateTime = DateTime.Now,
ModifyTime = DateTime.Now,
CreatePerson = StaticString.WMS,
});
if (errRequest.Count > 0) // 如果有错误请求,则返回错误请求
{ {
return WmsApiResponseFactory.RequestErr(errRequest, "请求的任务数据存在异常"); return WmsApiResponseFactory.RequestErr(errRequest, "请求的任务数据存在异常");
} }

View File

@ -1,5 +1,4 @@
using WcsMain.ExtendMethod; using WcsMain.DataBase.Dao;
using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity; using WcsMain.DataBase.TableEntity;
using WcsMain.DataBase.MixDao; using WcsMain.DataBase.MixDao;
using WcsMain.Constant.WcsAttribute.AutoFacAttribute; using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
@ -7,6 +6,7 @@ using WcsMain.StaticData;
using WcsMain.ApiClient.WMS; using WcsMain.ApiClient.WMS;
using WcsMain.Constant.Enum.Stacker; using WcsMain.Constant.Enum.Stacker;
using WcsMain.Constant.Enum.TaskEnum; using WcsMain.Constant.Enum.TaskEnum;
using WcsMain.Constant.ExtendMethod;
namespace WcsMain.Business.CommonAction; namespace WcsMain.Business.CommonAction;
@ -159,6 +159,7 @@ public class WCSTaskExecuteEvent(TaskDao taskDao, SendWmsTaskStatus sendWmsTaskS
public string? CompleteTaskEvent(AppWmsTask task, string msg, string? destination) public string? CompleteTaskEvent(AppWmsTask task, string msg, string? destination)
{ {
/* 更新任务信息,任务完成 */ /* 更新任务信息,任务完成 */
task.Destination = string.IsNullOrEmpty(destination) ? task.Destination : task.Destination + "_" + destination;
string? errText = taskDao.ComlpeteTask(task, msg); string? errText = taskDao.ComlpeteTask(task, msg);
if (!string.IsNullOrEmpty(errText)) if (!string.IsNullOrEmpty(errText))
{ {
@ -172,6 +173,22 @@ public class WCSTaskExecuteEvent(TaskDao taskDao, SendWmsTaskStatus sendWmsTaskS
return errText; return errText;
} }
public string? CancelTaskEvent(AppWmsTask task, string msg, string? destination)
{
/* 更新任务信息,任务完成 */
int updateResult = wmsTaskDao.Update(new() { TaskId = task.TaskId, TaskStatus = task.TaskType = (int)WmsTaskStatusEnum.err, TaskMsg = msg, ModifyTime = DateTime.Now });
if (updateResult < 1)
{
ConsoleLog.Warning($"【异常】任务取消更新WMS任务状态失败");
}
//if (task.CreatePerson == StaticData.StaticString.WMS)
//{
// /* 上报WMS */
// sendWmsTaskStatus.SendTaskComplete(task.TaskId, destination: destination);
//}
return "更新信息失败";
}
/// <summary> /// <summary>
/// 发送任务离开起始位置 /// 发送任务离开起始位置
/// </summary> /// </summary>
@ -182,7 +199,7 @@ public class WCSTaskExecuteEvent(TaskDao taskDao, SendWmsTaskStatus sendWmsTaskS
int updateResult = wmsTaskDao.Update(new() { TaskId = task.TaskId, TaskStatus = task.TaskType == (int)WmsTaskTypeEnum.moveTask ? (int)WmsTaskStatusEnum.toDestination : (int)WmsTaskStatusEnum.toMid, ModifyTime = DateTime.Now }); int updateResult = wmsTaskDao.Update(new() { TaskId = task.TaskId, TaskStatus = task.TaskType == (int)WmsTaskTypeEnum.moveTask ? (int)WmsTaskStatusEnum.toDestination : (int)WmsTaskStatusEnum.toMid, ModifyTime = DateTime.Now });
if (updateResult < 1) if (updateResult < 1)
{ {
ConsoleLog.Warning($"【异常】任务完成更新WMS任务状态失败"); ConsoleLog.Warning($"【异常】任务离开起点更新WMS任务状态失败");
} }
if (task.CreatePerson == StaticData.StaticString.WMS) if (task.CreatePerson == StaticData.StaticString.WMS)
{ {

View File

@ -2,8 +2,8 @@
using WcsMain.ApiClient.WMS.Dto; using WcsMain.ApiClient.WMS.Dto;
using WcsMain.Business.Convey.HistoryDataHandler.HisGetData.I; using WcsMain.Business.Convey.HistoryDataHandler.HisGetData.I;
using WcsMain.Common; using WcsMain.Common;
using WcsMain.Constant.ExtendMethod;
using WcsMain.DataBase.TableEntity; using WcsMain.DataBase.TableEntity;
using WcsMain.ExtendMethod;
namespace WcsMain.Business.Convey.HistoryDataHandler.HisGetData; namespace WcsMain.Business.Convey.HistoryDataHandler.HisGetData;

View File

@ -4,11 +4,11 @@ using WcsMain.Business.Convey.HistoryDataHandler.HisGetData.I;
using WcsMain.Common; using WcsMain.Common;
using WcsMain.Common.DataService; using WcsMain.Common.DataService;
using WcsMain.Constant.Enum.Convey; using WcsMain.Constant.Enum.Convey;
using WcsMain.Constant.ExtendMethod;
using WcsMain.DataBase.Dao; using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity; using WcsMain.DataBase.TableEntity;
using WcsMain.EquipOperation.Convey; using WcsMain.EquipOperation.Convey;
using WcsMain.EquipOperation.Entity; using WcsMain.EquipOperation.Entity;
using WcsMain.ExtendMethod;
namespace WcsMain.Business.Convey.HistoryDataHandler.HisGetData; namespace WcsMain.Business.Convey.HistoryDataHandler.HisGetData;

View File

@ -4,11 +4,11 @@ using WcsMain.Business.Convey.HistoryDataHandler.HisGetData.I;
using WcsMain.Common; using WcsMain.Common;
using WcsMain.Common.DataService; using WcsMain.Common.DataService;
using WcsMain.Constant.Enum.Convey; using WcsMain.Constant.Enum.Convey;
using WcsMain.Constant.ExtendMethod;
using WcsMain.DataBase.Dao; using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity; using WcsMain.DataBase.TableEntity;
using WcsMain.EquipOperation.Convey; using WcsMain.EquipOperation.Convey;
using WcsMain.EquipOperation.Entity; using WcsMain.EquipOperation.Entity;
using WcsMain.ExtendMethod;
namespace WcsMain.Business.Convey.HistoryDataHandler.HisGetData; namespace WcsMain.Business.Convey.HistoryDataHandler.HisGetData;

View File

@ -3,11 +3,11 @@ using WcsMain.Common;
using WcsMain.Common.DataService; using WcsMain.Common.DataService;
using WcsMain.Constant.Enum.Convey; using WcsMain.Constant.Enum.Convey;
using WcsMain.Constant.Enum.Stacker; using WcsMain.Constant.Enum.Stacker;
using WcsMain.Constant.ExtendMethod;
using WcsMain.DataBase.Dao; using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity; using WcsMain.DataBase.TableEntity;
using WcsMain.EquipOperation.Convey; using WcsMain.EquipOperation.Convey;
using WcsMain.EquipOperation.Entity; using WcsMain.EquipOperation.Entity;
using WcsMain.ExtendMethod;
namespace WcsMain.Business.Convey.HistoryDataHandler.HisGetData; namespace WcsMain.Business.Convey.HistoryDataHandler.HisGetData;

View File

@ -3,11 +3,11 @@ using WcsMain.Common;
using WcsMain.Common.DataService; using WcsMain.Common.DataService;
using WcsMain.Constant.Enum.Convey; using WcsMain.Constant.Enum.Convey;
using WcsMain.Constant.Enum.Stacker; using WcsMain.Constant.Enum.Stacker;
using WcsMain.Constant.ExtendMethod;
using WcsMain.DataBase.Dao; using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity; using WcsMain.DataBase.TableEntity;
using WcsMain.EquipOperation.Convey; using WcsMain.EquipOperation.Convey;
using WcsMain.EquipOperation.Entity; using WcsMain.EquipOperation.Entity;
using WcsMain.ExtendMethod;
namespace WcsMain.Business.Convey.HistoryDataHandler.HisGetData; namespace WcsMain.Business.Convey.HistoryDataHandler.HisGetData;

View File

@ -10,6 +10,7 @@ using WcsMain.DataBase.TableEntity;
using WcsMain.EquipOperation.ElTag; using WcsMain.EquipOperation.ElTag;
using WcsMain.ExtendMethod; using WcsMain.ExtendMethod;
using WcsMain.Constant.WcsAttribute.AutoFacAttribute; using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
using WcsMain.Constant.ExtendMethod;
namespace WcsMain.Business.ElTag.Atop; namespace WcsMain.Business.ElTag.Atop;

View File

@ -3,10 +3,10 @@ using WcsMain.ApiClient.WMS;
using WcsMain.ApiClient.WMS.Dto; using WcsMain.ApiClient.WMS.Dto;
using WcsMain.Common; using WcsMain.Common;
using WcsMain.Constant.Enum.Convey; using WcsMain.Constant.Enum.Convey;
using WcsMain.Constant.ExtendMethod;
using WcsMain.DataBase.Dao; using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity; using WcsMain.DataBase.TableEntity;
using WcsMain.EquipOperation.Convey; using WcsMain.EquipOperation.Convey;
using WcsMain.ExtendMethod;
namespace WcsMain.CirculationJob.Convey; namespace WcsMain.CirculationJob.Convey;

View File

@ -4,10 +4,10 @@ using WcsMain.ApiClient.WMS;
using WcsMain.ApiClient.WMS.Dto; using WcsMain.ApiClient.WMS.Dto;
using WcsMain.Common; using WcsMain.Common;
using WcsMain.Constant.Enum.Convey; using WcsMain.Constant.Enum.Convey;
using WcsMain.Constant.ExtendMethod;
using WcsMain.DataBase.Dao; using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity; using WcsMain.DataBase.TableEntity;
using WcsMain.EquipOperation.Convey; using WcsMain.EquipOperation.Convey;
using WcsMain.ExtendMethod;
namespace WcsMain.CirculationJob.Convey; namespace WcsMain.CirculationJob.Convey;

View File

@ -2,11 +2,11 @@
using WcsMain.Business.CommonAction; using WcsMain.Business.CommonAction;
using WcsMain.Common; using WcsMain.Common;
using WcsMain.Constant.Enum; using WcsMain.Constant.Enum;
using WcsMain.Constant.ExtendMethod;
using WcsMain.DataBase.Dao; using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity; using WcsMain.DataBase.TableEntity;
using WcsMain.EquipOperation.Entity; using WcsMain.EquipOperation.Entity;
using WcsMain.EquipOperation.Stacker; using WcsMain.EquipOperation.Stacker;
using WcsMain.ExtendMethod;
namespace WcsMain.CirculationJob.Stacker; namespace WcsMain.CirculationJob.Stacker;

View File

@ -3,6 +3,7 @@ using WcsMain.Business.CommonAction;
using WcsMain.Common; using WcsMain.Common;
using WcsMain.Common.DataService; using WcsMain.Common.DataService;
using WcsMain.Constant.Enum.Stacker; using WcsMain.Constant.Enum.Stacker;
using WcsMain.Constant.ExtendMethod;
using WcsMain.DataBase.Dao; using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity; using WcsMain.DataBase.TableEntity;
using WcsMain.EquipOperation.Convey; using WcsMain.EquipOperation.Convey;

View File

@ -3,6 +3,7 @@ using WcsMain.Business.CommonAction;
using WcsMain.Common; using WcsMain.Common;
using WcsMain.Constant.Enum.Stacker; using WcsMain.Constant.Enum.Stacker;
using WcsMain.Constant.Enum.TaskEnum; using WcsMain.Constant.Enum.TaskEnum;
using WcsMain.Constant.ExtendMethod;
using WcsMain.DataBase.Dao; using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity; using WcsMain.DataBase.TableEntity;
using WcsMain.EquipOperation.Entity.Stacker; using WcsMain.EquipOperation.Entity.Stacker;

View File

@ -1,4 +1,6 @@
using CirculateTool.Attribute; using System.Runtime;
using System.Text.RegularExpressions;
using CirculateTool.Attribute;
using WcsMain.ApiClient.AGV; using WcsMain.ApiClient.AGV;
using WcsMain.ApiClient.Shuttle; using WcsMain.ApiClient.Shuttle;
using WcsMain.Constant.Enum.General; using WcsMain.Constant.Enum.General;
@ -67,6 +69,15 @@ public class ExecuteWmsTask(AppWmsTaskDao wmsTaskDao, StackerConveyOperation sta
/// <param name="wmsTask"></param> /// <param name="wmsTask"></param>
private void ExecuteAGVTask(AppWmsTask wmsTask) private void ExecuteAGVTask(AppWmsTask wmsTask)
{ {
string[] stand = ["FaaZHG", "kzxhes", "yDN8ZZ", "6cDXzi", "ranQyi", "SxjX8e", "jC6x3C", "MSP3te"];
if (string.IsNullOrEmpty(wmsTask.Destination)) return;
if (stand.Contains(wmsTask.Destination))
{
// 获取终点的任务,没有任务可以发送
List<AppWmsTask> tasks = [];
tasks.AddRange(wmsTaskDao.SelectRunningTask(wmsTask.Destination) ?? []);
if (tasks == default || tasks.Count > 0) return;
}
string errText = agvAction.Send_NO_VERIFY_BUCKET_MOVE(wmsTask); string errText = agvAction.Send_NO_VERIFY_BUCKET_MOVE(wmsTask);
if (!string.IsNullOrEmpty(errText)) if (!string.IsNullOrEmpty(errText))
{ {
@ -75,21 +86,26 @@ public class ExecuteWmsTask(AppWmsTaskDao wmsTaskDao, StackerConveyOperation sta
} }
ConsoleLog.Success($"AGV点对点搬运请求AGV服务成功任务号{wmsTask.TaskId}"); ConsoleLog.Success($"AGV点对点搬运请求AGV服务成功任务号{wmsTask.TaskId}");
/* 更新任务状态为执行中 */ /* 更新任务状态为执行中 */
var updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, TaskStatus = (int)WmsTaskStatusEnum.running, ModifyTime = DateTime.Now }); var updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, TaskStatus = (int)WmsTaskStatusEnum.running, StartTime = DateTime.Now, ModifyTime = DateTime.Now });
ConsoleLog.Success($"更新任务状态结果:{(updateResult > 0 ? "" : "")},任务号:{wmsTask.TaskId}"); ConsoleLog.Success($"更新任务状态结果:{(updateResult > 0 ? "" : "")},任务号:{wmsTask.TaskId}");
} }
/// <summary> /// <summary>
/// 执行入库任务 /// 执行入库任务 --- AGV搬运
/// </summary> /// </summary>
/// <param name="wmsTask"></param> /// <param name="wmsTask"></param>
private void ExecuteInTask(AppWmsTask wmsTask) private void ExecuteInTask(AppWmsTask wmsTask)
{ {
string? midPoint = GetEmptyInLift(wmsTask.Destination); string? midPoint = wmsTask.MidPoint;
if (string.IsNullOrEmpty(wmsTask.Origin) || Regex.IsMatch(wmsTask.Origin, "^\\d+$")) return;
if (string.IsNullOrEmpty(midPoint))
{
midPoint = GetEmptyInLift(wmsTask.Destination);
}
if (string.IsNullOrEmpty(midPoint)) return; // 没有可用的站台 if (string.IsNullOrEmpty(midPoint)) return; // 没有可用的站台
/* 发送AGV 搬运任务 */ /* 发送AGV 搬运任务 */
string errText = agvAction.Send_AGV_TASK(wmsTask.TaskId, wmsTask.Origin, midPoint); string errText = agvAction.Send_AGV_TASK(wmsTask.TaskId, wmsTask.Origin, midPoint, 1);
if (!string.IsNullOrEmpty(errText)) if (!string.IsNullOrEmpty(errText))
{ {
ConsoleLog.Warning($"【警告】入库请求AGV搬运失败任务号{wmsTask.TaskId},异常信息:{errText}"); ConsoleLog.Warning($"【警告】入库请求AGV搬运失败任务号{wmsTask.TaskId},异常信息:{errText}");
@ -97,7 +113,7 @@ public class ExecuteWmsTask(AppWmsTaskDao wmsTaskDao, StackerConveyOperation sta
} }
ConsoleLog.Success($"入库搬运请求AGV成功任务号{wmsTask.TaskId}"); ConsoleLog.Success($"入库搬运请求AGV成功任务号{wmsTask.TaskId}");
/* 更新任务状态为前往中间点,更新中间点 */ /* 更新任务状态为前往中间点,更新中间点 */
var updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, MidPoint = midPoint, TaskStatus = (int)WmsTaskStatusEnum.toMid, ModifyTime = DateTime.Now }); var updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, MidPoint = midPoint, TaskStatus = (int)WmsTaskStatusEnum.toMid, StartTime = DateTime.Now, ModifyTime = DateTime.Now });
ConsoleLog.Success($"更新任务状态结果:{(updateResult > 0 ? "" : "")},任务号:{wmsTask.TaskId}"); ConsoleLog.Success($"更新任务状态结果:{(updateResult > 0 ? "" : "")},任务号:{wmsTask.TaskId}");
/* 四向车任务有接口返回给四向车 */ /* 四向车任务有接口返回给四向车 */
} }
@ -108,18 +124,22 @@ public class ExecuteWmsTask(AppWmsTaskDao wmsTaskDao, StackerConveyOperation sta
/// <param name="wmsTask"></param> /// <param name="wmsTask"></param>
private void ExecuteOutTask(AppWmsTask wmsTask) private void ExecuteOutTask(AppWmsTask wmsTask)
{ {
string? midPoint = GetEmptyOutLift(wmsTask.Origin); string? midPoint = wmsTask.MidPoint;
if(string.IsNullOrEmpty(midPoint))
{
midPoint = GetEmptyOutLift(wmsTask.Origin);
}
if (string.IsNullOrEmpty(midPoint)) return; // 没有可用站台 if (string.IsNullOrEmpty(midPoint)) return; // 没有可用站台
/* 发送四向车搬运任务 */ /* 发送四向车搬运任务 */
string? errText = containerAction.ExecuteOutTask(wmsTask.TaskId, wmsTask.Origin, midPoint, wmsTask.VehicleNo); string? errText = containerAction.ExecuteOutTask(wmsTask.WcsId, wmsTask.Origin, midPoint, wmsTask.VehicleNo);
if (!string.IsNullOrEmpty(errText)) if (!string.IsNullOrEmpty(errText))
{ {
ConsoleLog.Warning($"【警告】库请求四向车搬运失败,任务号:{wmsTask.TaskId},异常信息:{errText}"); ConsoleLog.Warning($"【警告】库请求四向车搬运失败,任务号:{wmsTask.TaskId},异常信息:{errText}");
return; return;
} }
ConsoleLog.Success($"库搬运请求四向车成功,任务号:{wmsTask.TaskId}"); ConsoleLog.Success($"库搬运请求四向车成功,任务号:{wmsTask.TaskId}/{wmsTask.WcsId}");
/* 更新任务状态为前往中间点,更新中间点 */ /* 更新任务状态为前往中间点,更新中间点 */
var updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, MidPoint = midPoint, TaskStatus = (int)WmsTaskStatusEnum.toMid, ModifyTime = DateTime.Now }); var updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, MidPoint = midPoint, TaskStatus = (int)WmsTaskStatusEnum.toMid, StartTime = DateTime.Now, ModifyTime = DateTime.Now });
ConsoleLog.Success($"更新任务状态结果:{(updateResult > 0 ? "" : "")},任务号:{wmsTask.TaskId}"); ConsoleLog.Success($"更新任务状态结果:{(updateResult > 0 ? "" : "")},任务号:{wmsTask.TaskId}");
/* AGV接续任务由定时器触发 */ /* AGV接续任务由定时器触发 */
} }
@ -134,12 +154,12 @@ public class ExecuteWmsTask(AppWmsTaskDao wmsTaskDao, StackerConveyOperation sta
string errText = containerAction.ExecuteMoveTask(wmsTask); string errText = containerAction.ExecuteMoveTask(wmsTask);
if (!string.IsNullOrEmpty(errText)) if (!string.IsNullOrEmpty(errText))
{ {
ConsoleLog.Warning($"四向车移库任务请求四向车服务失败,任务号:{wmsTask.TaskId},异常信息:{errText}"); ConsoleLog.Warning($"四向车移库任务请求四向车服务失败,任务号:{wmsTask.TaskId}/{wmsTask.WcsId},异常信息:{errText}");
return; return;
} }
ConsoleLog.Success($"四向车移库任务请求四向车服务成功,任务号:{wmsTask.TaskId}"); ConsoleLog.Success($"四向车移库任务请求四向车服务成功,任务号:{wmsTask.TaskId}/{wmsTask.WcsId}");
/* 更新任务状态为执行中 */ /* 更新任务状态为执行中 */
var updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, TaskStatus = (int)WmsTaskStatusEnum.running, ModifyTime = DateTime.Now }); var updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, TaskStatus = (int)WmsTaskStatusEnum.running, StartTime = DateTime.Now, ModifyTime = DateTime.Now });
ConsoleLog.Success($"更新任务状态结果:{(updateResult > 0 ? "" : "")},任务号:{wmsTask.TaskId}"); ConsoleLog.Success($"更新任务状态结果:{(updateResult > 0 ? "" : "")},任务号:{wmsTask.TaskId}");
} }
@ -156,7 +176,7 @@ public class ExecuteWmsTask(AppWmsTaskDao wmsTaskDao, StackerConveyOperation sta
(string errText, short model, short allowAction, short errCode, string code) = stackerConveyOperation.GetLiftInfo(liftInfo.LiftId ?? ""); (string errText, short model, short allowAction, short errCode, string code) = stackerConveyOperation.GetLiftInfo(liftInfo.LiftId ?? "");
if (!string.IsNullOrEmpty(errText)) if (!string.IsNullOrEmpty(errText))
{ {
ConsoleLog.Warning($"【警告】提升机站台信息获取失败,异常信息:{errText}"); //ConsoleLog.Warning($"【警告】提升机站台信息获取失败,异常信息:{errText}");
continue; continue;
} }
if (model != 2 || allowAction != (short)TrueFalseEnum.TRUE || errCode != 0) continue; // 不满足执行条件 if (model != 2 || allowAction != (short)TrueFalseEnum.TRUE || errCode != 0) continue; // 不满足执行条件
@ -164,8 +184,9 @@ public class ExecuteWmsTask(AppWmsTaskDao wmsTaskDao, StackerConveyOperation sta
List<AppWmsTask>? tasks = wmsTaskDao.Select(new() { VehicleNo = code, TaskStatus = (int)WmsTaskStatusEnum.arriveMid })?.OrderByDescending(o => o.CreateTime).ToList(); List<AppWmsTask>? tasks = wmsTaskDao.Select(new() { VehicleNo = code, TaskStatus = (int)WmsTaskStatusEnum.arriveMid })?.OrderByDescending(o => o.CreateTime).ToList();
if (tasks == null || tasks.Count == 0) continue; if (tasks == null || tasks.Count == 0) continue;
var task = tasks.First(); var task = tasks.First();
if (string.IsNullOrEmpty(task.Destination)) continue;
/* 下发任务 */ /* 下发任务 */
string agvErrText = agvAction.Send_AGV_TASK(task.TaskId, task.MidPoint, task.Destination); string agvErrText = agvAction.Send_AGV_TASK(task.TaskId, GetAgvNo(task.MidPoint), task.Destination);
if (!string.IsNullOrEmpty(agvErrText)) if (!string.IsNullOrEmpty(agvErrText))
{ {
ConsoleLog.Warning($"【警告】AGV出库任务请求AGV服务失败任务号{task.TaskId},异常信息:{agvErrText}"); ConsoleLog.Warning($"【警告】AGV出库任务请求AGV服务失败任务号{task.TaskId},异常信息:{agvErrText}");
@ -195,19 +216,28 @@ public class ExecuteWmsTask(AppWmsTaskDao wmsTaskDao, StackerConveyOperation sta
(string errText, short model, short allowAction, short errCode, string code) = stackerConveyOperation.GetLiftInfo(liftInfo.LiftId ?? ""); (string errText, short model, short allowAction, short errCode, string code) = stackerConveyOperation.GetLiftInfo(liftInfo.LiftId ?? "");
if (!string.IsNullOrEmpty(errText)) if (!string.IsNullOrEmpty(errText))
{ {
ConsoleLog.Warning($"【警告】提升机站台信息获取失败,异常信息:{errText}"); //ConsoleLog.Warning($"【警告】提升机站台信息获取失败,异常信息:{errText}");
continue; continue;
} }
if (model != 1 || allowAction != (short)TrueFalseEnum.TRUE || errCode != 0) continue; if (model != 1 || allowAction != (short)TrueFalseEnum.TRUE || errCode != 0) continue;
/* 检验任务是否是第一层,若是不是第一层不能分配第一层出入口 */ /* 检验任务是否是第一层,若是不是第一层不能分配第一层出入口 */
if (destination.StartsWith("1")) // [TODO] if (!destination.EndsWith('1'))
{ {
if (liftInfo.LiftMode != 2) continue; if (liftInfo.LiftMode == 2) continue;
} }
/* 获取这个站台的任务.没有占用任务即可重新使用 */ /* 获取这个站台的任务.没有占用任务即可重新使用 */
List<AppWmsTask>? tasks = wmsTaskDao.Select(new() { MidPoint = liftInfo.Tag, TaskStatus = (int)WmsTaskStatusEnum.toMid }); List<AppWmsTask> tasks = [];
tasks.AddRange(wmsTaskDao.Select(new() { MidPoint = liftInfo.Tag!.Split(',')[0], TaskStatus = (int)WmsTaskStatusEnum.toMid }) ?? []);
tasks.AddRange(wmsTaskDao.Select(new() { MidPoint = liftInfo.Tag!.Split(',')[1], TaskStatus = (int)WmsTaskStatusEnum.toMid }) ?? []);
tasks.AddRange(wmsTaskDao.Select(new() { MidPoint = liftInfo.Tag!.Split(',')[0], TaskStatus = (int)WmsTaskStatusEnum.arriveMid }) ?? []);
tasks.AddRange(wmsTaskDao.Select(new() { MidPoint = liftInfo.Tag!.Split(',')[1], TaskStatus = (int)WmsTaskStatusEnum.arriveMid }) ?? []);
if (tasks == default || tasks.Count > 0) continue; if (tasks == default || tasks.Count > 0) continue;
return liftInfo.Tag; string location = "";
if (!string.IsNullOrEmpty(liftInfo.Tag))
{
location = liftInfo.Tag.Split(',')[1];
}
return location;
} }
return default; return default;
} }
@ -228,19 +258,26 @@ public class ExecuteWmsTask(AppWmsTaskDao wmsTaskDao, StackerConveyOperation sta
(string errText, short model, short allowAction, short errCode, string code) = stackerConveyOperation.GetLiftInfo(liftInfo.LiftId ?? ""); (string errText, short model, short allowAction, short errCode, string code) = stackerConveyOperation.GetLiftInfo(liftInfo.LiftId ?? "");
if (!string.IsNullOrEmpty(errText)) if (!string.IsNullOrEmpty(errText))
{ {
ConsoleLog.Warning($"【警告】提升机站台信息获取失败,异常信息:{errText}"); //ConsoleLog.Warning($"【警告】提升机站台信息获取失败,异常信息:{errText}");
continue; continue;
} }
if (model != 2 || allowAction != (short)TrueFalseEnum.TRUE || errCode != 0) continue; if (model != 2 || allowAction != (short)TrueFalseEnum.FALSE || errCode != 0) continue;
/* 检验任务是否是第一层,若是不是第一层不能分配第一层出入口 */ /* 检验任务是否是第一层,若是不是第一层不能分配第一层出入口 */
if (origin.StartsWith("1")) // [TODO] if (!origin.EndsWith('1'))
{ {
if (liftInfo.LiftMode != 2) continue; if (liftInfo.LiftMode == 2) continue;
} }
/* 获取这个站台的任务.并计数 */ /* 获取这个站台的任务.并计数 */
List<AppWmsTask>? tasks = wmsTaskDao.Select(new() { MidPoint = liftInfo.Tag, TaskStatus = (int)WmsTaskStatusEnum.toMid }); List<AppWmsTask> tasks = [];
tasks.AddRange(wmsTaskDao.Select(new() { MidPoint = liftInfo.Tag!.Split(',')[0], TaskStatus = (int)WmsTaskStatusEnum.toMid }) ?? []);
tasks.AddRange(wmsTaskDao.Select(new() { MidPoint = liftInfo.Tag!.Split(',')[1], TaskStatus = (int)WmsTaskStatusEnum.toMid }) ?? []);
if (tasks == default) continue; if (tasks == default) continue;
liftTaskCount.TryAdd(liftInfo.Tag ?? "", tasks.Count); string location = "";
if(!string.IsNullOrEmpty(liftInfo.Tag))
{
location = liftInfo.Tag.Split(',')[0];
}
liftTaskCount.TryAdd(location, tasks.Count);
} }
var sortLiftInfos = liftTaskCount.OrderBy(o => o.Value).ToDictionary(); var sortLiftInfos = liftTaskCount.OrderBy(o => o.Value).ToDictionary();
if (sortLiftInfos.Count > 0) return sortLiftInfos.First().Key; if (sortLiftInfos.Count > 0) return sortLiftInfos.First().Key;
@ -248,4 +285,15 @@ public class ExecuteWmsTask(AppWmsTaskDao wmsTaskDao, StackerConveyOperation sta
} }
private string? GetAgvNo(string? lift)
{
List<AppLiftInfo>? liftInfos = liftInfoDao.Query(new() { Status = (int)TrueFalseEnum.TRUE });
if (liftInfos == default || liftInfos.Count < 1) return default;
AppLiftInfo? appLiftInfo = liftInfos.Find(f => f.Tag!.Contains(lift!));
if (appLiftInfo == null) return default;
return appLiftInfo.Tag?.Split(',')[1];
}
} }

View File

@ -1,10 +1,10 @@
using CirculateTool.Attribute; using CirculateTool.Attribute;
using WcsMain.Common; using WcsMain.Common;
using WcsMain.Common.DataService; using WcsMain.Common.DataService;
using WcsMain.Constant.ExtendMethod;
using WcsMain.DataBase.Dao; using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity; using WcsMain.DataBase.TableEntity;
using WcsMain.EquipOperation.Stacker; using WcsMain.EquipOperation.Stacker;
using WcsMain.ExtendMethod;
namespace WcsMain.CirculationJob.Stacker; namespace WcsMain.CirculationJob.Stacker;

View File

@ -3,8 +3,8 @@ using WcsMain.ApiClient.WMS;
using WcsMain.ApiClient.WMS.Dto; using WcsMain.ApiClient.WMS.Dto;
using WcsMain.Common; using WcsMain.Common;
using WcsMain.Constant.Enum.Stacker; using WcsMain.Constant.Enum.Stacker;
using WcsMain.Constant.ExtendMethod;
using WcsMain.EquipOperation.Stacker; using WcsMain.EquipOperation.Stacker;
using WcsMain.ExtendMethod;
namespace WcsMain.CirculationJob.Stacker; namespace WcsMain.CirculationJob.Stacker;

View File

@ -9,6 +9,7 @@ using WcsMain.ApiClient.WMS;
using WcsMain.Common.DataService; using WcsMain.Common.DataService;
using WcsMain.Constant.Enum.Stacker; using WcsMain.Constant.Enum.Stacker;
using WcsMain.Constant.Enum.TaskEnum; using WcsMain.Constant.Enum.TaskEnum;
using WcsMain.Constant.ExtendMethod;
namespace WcsMain.CirculationJob.TaskData; namespace WcsMain.CirculationJob.TaskData;

View File

@ -141,7 +141,7 @@ public class DataBaseData(AppSettingsDao settingsDao)
{ {
wcsId = "0"; wcsId = "0";
} }
string timeTick = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString(); string timeTick = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
if (timeTick != lasTimeTick2) if (timeTick != lasTimeTick2)
{ {
lasTimeTick2 = timeTick; lasTimeTick2 = timeTick;

View File

@ -11,4 +11,7 @@ public class ApplicationBaseConfig
/// AGV /// AGV
/// </summary> /// </summary>
public const string APP_SECRET = ""; public const string APP_SECRET = "";
public const string SHUTTLE_PWD = "safer*123";
} }

View File

@ -1,6 +1,6 @@
using WcsMain.DataBase.TableEntity; using WcsMain.DataBase.TableEntity;
namespace WcsMain.ExtendMethod; namespace WcsMain.Constant.ExtendMethod;
public static class AppApiBaseInfoExtendMethod public static class AppApiBaseInfoExtendMethod
{ {
@ -15,5 +15,5 @@ public static class AppApiBaseInfoExtendMethod
var baseInfo = baseData?.Find(f => f.ApiKey == apiKey); var baseInfo = baseData?.Find(f => f.ApiKey == apiKey);
return baseInfo?.Address; return baseInfo?.Address;
} }
} }

View File

@ -1,6 +1,6 @@
using WcsMain.DataBase.TableEntity; using WcsMain.DataBase.TableEntity;
namespace WcsMain.ExtendMethod; namespace WcsMain.Constant.ExtendMethod;
/// <summary> /// <summary>
/// 库位的扩展方法 /// 库位的扩展方法
@ -15,10 +15,10 @@ public static class AppLocationExtendMethod
/// <returns></returns> /// <returns></returns>
public static bool ExistWmsLocation(this List<AppLocation>? value, params string?[] wmsLocations) public static bool ExistWmsLocation(this List<AppLocation>? value, params string?[] wmsLocations)
{ {
if(value == default || wmsLocations == default || wmsLocations.Length < 1) return false; if (value == default || wmsLocations == default || wmsLocations.Length < 1) return false;
foreach (var wmsLocation in wmsLocations) foreach (var wmsLocation in wmsLocations)
{ {
if(!value.Exists(e => e.WmsLocation == wmsLocation)) return false; if (!value.Exists(e => e.WmsLocation == wmsLocation)) return false;
} }
return true; return true;
} }
@ -31,7 +31,7 @@ public static class AppLocationExtendMethod
/// <returns></returns> /// <returns></returns>
public static AppLocation? DetailWithWmsLocation(this List<AppLocation>? value, string? wmsLocation) public static AppLocation? DetailWithWmsLocation(this List<AppLocation>? value, string? wmsLocation)
{ {
if(value == default || wmsLocation == default) return default; if (value == default || wmsLocation == default) return default;
return value.Find(f => f.WmsLocation == wmsLocation); return value.Find(f => f.WmsLocation == wmsLocation);
} }

View File

@ -1,6 +1,6 @@
using WcsMain.DataBase.TableEntity; using WcsMain.DataBase.TableEntity;
namespace WcsMain.ExtendMethod; namespace WcsMain.Constant.ExtendMethod;
/// <summary> /// <summary>
/// 堆垛机操作扩展方法 /// 堆垛机操作扩展方法
@ -14,7 +14,7 @@ public static class AppStackerExtendMethod
/// <returns></returns> /// <returns></returns>
public static List<AppStacker> Open(this List<AppStacker>? value) public static List<AppStacker> Open(this List<AppStacker>? value)
{ {
if(value == default) return []; if (value == default) return [];
return value.FindAll(f => f.StackerStatus == 1); return value.FindAll(f => f.StackerStatus == 1);
} }

View File

@ -2,7 +2,7 @@
using WcsMain.DataBase.TableEntity; using WcsMain.DataBase.TableEntity;
using WcsMain.EquipOperation.Entity.Stacker; using WcsMain.EquipOperation.Entity.Stacker;
namespace WcsMain.ExtendMethod; namespace WcsMain.Constant.ExtendMethod;
/// <summary> /// <summary>
/// wcs 任务表的扩展方法 /// wcs 任务表的扩展方法
@ -141,5 +141,5 @@ public static class AppWcsTaskExtendMethod
} }
} }

View File

@ -1,6 +1,6 @@
using WcsMain.Constant.Enum.Stacker; using WcsMain.Constant.Enum.Stacker;
namespace WcsMain.ExtendMethod; namespace WcsMain.Constant.ExtendMethod;
public static class StackerExtendMethod public static class StackerExtendMethod
{ {

View File

@ -1,4 +1,6 @@
using HslCommunication; using HslCommunication;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
namespace WcsMain.ExtendMethod; namespace WcsMain.ExtendMethod;
@ -97,4 +99,23 @@ public static partial class StringExtendMethod
[GeneratedRegex("^\\d+$")] [GeneratedRegex("^\\d+$")]
private static partial Regex IsNumberRegex(); private static partial Regex IsNumberRegex();
/// <summary>
/// 32位加密
/// </summary>
/// <param name="password"></param>
/// <returns></returns>
public static string MD5Encrypt32(this string password)
{
string cl = password;
string pwd = "";
//MD5 md5 = MD5.Create(); //实例化一个md5对像
byte[] s = MD5.HashData(Encoding.UTF8.GetBytes(cl));
for (int i = 0; i < s.Length; i++)
{
pwd = pwd + s[i].ToString("X2");
}
return pwd;
}
} }

View File

@ -1,4 +1,4 @@
namespace WcsMain.ExtendMethod; namespace WcsMain.Constant.ExtendMethod;
/// <summary> /// <summary>
/// 任务扩展方法 /// 任务扩展方法

View File

@ -84,9 +84,11 @@ public class AppWmsTaskDao
{ {
var sqlFuc = CommonTool.DbServe.Queryable<AppWmsTask>() var sqlFuc = CommonTool.DbServe.Queryable<AppWmsTask>()
.WhereIF(!string.IsNullOrEmpty(appWmsTask.TaskId), w => w.TaskId == appWmsTask.TaskId) .WhereIF(!string.IsNullOrEmpty(appWmsTask.TaskId), w => w.TaskId == appWmsTask.TaskId)
.WhereIF(appWmsTask.WcsId != null, w => w.WcsId == appWmsTask.WcsId)
.WhereIF(appWmsTask.TaskType != null, w => w.TaskType == appWmsTask.TaskType) .WhereIF(appWmsTask.TaskType != null, w => w.TaskType == appWmsTask.TaskType)
.WhereIF(appWmsTask.TaskStatus != null, w => w.TaskStatus == appWmsTask.TaskStatus) .WhereIF(appWmsTask.TaskStatus != null, w => w.TaskStatus == appWmsTask.TaskStatus)
.WhereIF(!string.IsNullOrEmpty(appWmsTask.Origin), w => w.Origin == appWmsTask.Origin) .WhereIF(!string.IsNullOrEmpty(appWmsTask.Origin), w => w.Origin == appWmsTask.Origin)
.WhereIF(!string.IsNullOrEmpty(appWmsTask.MidPoint), w => w.MidPoint == appWmsTask.MidPoint)
.WhereIF(!string.IsNullOrEmpty(appWmsTask.Destination), .WhereIF(!string.IsNullOrEmpty(appWmsTask.Destination),
w => w.Destination == appWmsTask.Destination) w => w.Destination == appWmsTask.Destination)
.WhereIF(!string.IsNullOrEmpty(appWmsTask.VehicleNo), w => w.VehicleNo == appWmsTask.VehicleNo) .WhereIF(!string.IsNullOrEmpty(appWmsTask.VehicleNo), w => w.VehicleNo == appWmsTask.VehicleNo)
@ -108,6 +110,43 @@ public class AppWmsTaskDao
} }
public List<AppWmsTask>? SelectRunningTask(string? destination)
{
try
{
var sqlFuc = CommonTool.DbServe.Queryable<AppWmsTask>()
.Where(w => (w.MidPoint!.Contains(destination!) || w.Destination!.Contains(destination!))
&& (w.TaskStatus == (int)WmsTaskStatusEnum.toMid || w.TaskStatus == (int)WmsTaskStatusEnum.arriveMid))
.OrderBy(o => o.CreateTime);
_ = sqlFuc.ToSql();
return sqlFuc.ToList();
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
public List<AppWmsTask>? SelectRunningTask2(string? location)
{
try
{
var sqlFuc = CommonTool.DbServe.Queryable<AppWmsTask>()
.Where(w => location!.Contains(w.MidPoint!)
&& (w.TaskStatus == (int)WmsTaskStatusEnum.toMid || w.TaskStatus == (int)WmsTaskStatusEnum.arriveMid))
.OrderBy(o => o.CreateTime);
_ = sqlFuc.ToSql();
return sqlFuc.ToList();
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
/// <summary> /// <summary>
/// 查找所有数据 /// 查找所有数据
/// </summary> /// </summary>
@ -208,6 +247,7 @@ public class AppWmsTaskDao
var sqlFuc = CommonTool.DbServe.Queryable<AppWmsTask>() var sqlFuc = CommonTool.DbServe.Queryable<AppWmsTask>()
.WhereIF(!string.IsNullOrEmpty(pageRequest.SearchStr), .WhereIF(!string.IsNullOrEmpty(pageRequest.SearchStr),
w => w.Destination!.Contains(pageRequest.SearchStr!) w => w.Destination!.Contains(pageRequest.SearchStr!)
|| w.WcsId!.Contains(pageRequest.SearchStr!)
|| w.Origin!.Contains(pageRequest.SearchStr!) || w.Origin!.Contains(pageRequest.SearchStr!)
|| w.VehicleNo!.Contains(pageRequest.SearchStr!) || w.VehicleNo!.Contains(pageRequest.SearchStr!)
|| w.TaskId!.Contains(pageRequest.SearchStr!) || w.TaskId!.Contains(pageRequest.SearchStr!)

View File

@ -1,8 +1,8 @@
using WcsMain.Common; using WcsMain.Common;
using WcsMain.Constant.Enum.Stacker; using WcsMain.Constant.Enum.Stacker;
using WcsMain.DataBase.TableEntity; using WcsMain.DataBase.TableEntity;
using WcsMain.ExtendMethod;
using WcsMain.Constant.WcsAttribute.AutoFacAttribute; using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
using WcsMain.Constant.ExtendMethod;
namespace WcsMain.DataBase.MixDao; namespace WcsMain.DataBase.MixDao;
@ -218,7 +218,7 @@ public class TaskDao
{ {
var updateResult = CommonTool.DbServe var updateResult = CommonTool.DbServe
.Updateable(new AppWmsTask() .Updateable(new AppWmsTask()
{ TaskId = wmsTask.TaskId, TaskStatus = (int)WmsTaskStatusEnum.complete, EndTime = DateTime.Now, TaskMsg = msg }) { TaskId = wmsTask.TaskId, TaskStatus = (int)WmsTaskStatusEnum.complete, Destination = wmsTask.Destination, EndTime = DateTime.Now, TaskMsg = msg })
.IgnoreColumns(ignoreAllNullColumns: true) .IgnoreColumns(ignoreAllNullColumns: true)
.ExecuteCommand(); .ExecuteCommand();
return updateResult > 0 ? null : "失败"; return updateResult > 0 ? null : "失败";

View File

@ -3,41 +3,49 @@
/// <summary> /// <summary>
/// 提升机信息 /// 提升机信息
/// </summary> /// </summary>
[SqlSugar.SugarTable("tbl_app_lift_info")]
public class AppLiftInfo public class AppLiftInfo
{ {
/// <summary> /// <summary>
/// 提升机ID /// 提升机ID
/// </summary> /// </summary>
[SqlSugar.SugarColumn(ColumnName = "lift_id", IsPrimaryKey = true)]
public string? LiftId { get; set; } public string? LiftId { get; set; }
/// <summary> /// <summary>
/// 提升机名称 /// 提升机名称
/// </summary> /// </summary>
[SqlSugar.SugarColumn(ColumnName = "lift_name")]
public string? LiftName { get; set; } public string? LiftName { get; set; }
/// <summary> /// <summary>
/// 提升机类型 /// 提升机类型
/// </summary> /// </summary>
[SqlSugar.SugarColumn(ColumnName = "lift_type")]
public string? LiftType { get; set; } public string? LiftType { get; set; }
/// <summary> /// <summary>
/// 标记 /// 标记
/// </summary> /// </summary>
[SqlSugar.SugarColumn(ColumnName = "tag")]
public string? Tag { get; set; } public string? Tag { get; set; }
/// <summary> /// <summary>
/// 状态 /// 状态
/// </summary> /// </summary>
[SqlSugar.SugarColumn(ColumnName = "status")]
public int? Status { get; set; } public int? Status { get; set; }
/// <summary> /// <summary>
/// 提升机模式 /// 提升机模式
/// </summary> /// </summary>
[SqlSugar.SugarColumn(ColumnName = "lift_mode")]
public int? LiftMode { get; set; } public int? LiftMode { get; set; }
/// <summary> /// <summary>
/// 备注 /// 备注
/// </summary> /// </summary>
[SqlSugar.SugarColumn(ColumnName = "remark")]
public string? Remark { get; set; } public string? Remark { get; set; }

View File

@ -19,6 +19,13 @@ public class AppWmsTask
[JsonPropertyName("taskId")] [JsonPropertyName("taskId")]
public string? TaskId { get; set; } public string? TaskId { get; set; }
/// <summary>
/// WCS 的任务Id给四向车用的他们必须int64格式
/// </summary>
[SugarColumn(ColumnName = "wcs_id")]
[JsonPropertyName("wcsId")]
public string? WcsId { get; set; }
/// <summary> /// <summary>
/// 任务类型 /// 任务类型
/// </summary> /// </summary>

View File

@ -73,6 +73,39 @@ public class StackerConveyOperation
return (string.Empty, model, allowAction, errCode, code); return (string.Empty, model, allowAction, errCode, code);
} }
/// <summary>
/// 通知PLC放货完成
/// </summary>
/// <param name="location"></param>
/// <returns></returns>
public string? SetVehicelComplete(string location)
{
if (!CommonData.IsConnectPlc || CommonTool.Siemens == default)
{
return "设备尚未连接"; // 未连接PLC
}
(var writeResult, byte[]? data) = CommonTool.Siemens.WritePlcWhithName($"站台放货完成{location}", (short)1);
if (writeResult.Success)
{
return string.Empty;
}
return writeResult.Message;
}
public string? StandTaskApplyComplete(string location)
{
if (!CommonData.IsConnectPlc || CommonTool.Siemens == default)
{
return "设备尚未连接"; // 未连接PLC
}
(var writeResult, byte[]? data) = CommonTool.Siemens.WritePlcWhithName($"站台任务申请完成{location}", (short)1);
if (writeResult.Success)
{
return string.Empty;
}
return writeResult.Message;
}
/// <summary> /// <summary>
/// 获取输送机任务号 /// 获取输送机任务号

View File

@ -15,7 +15,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<_TargetId>Folder</_TargetId> <_TargetId>Folder</_TargetId>
<SiteUrlToLaunchAfterPublish /> <SiteUrlToLaunchAfterPublish />
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>win-x86</RuntimeIdentifier> <RuntimeIdentifier>win-x64</RuntimeIdentifier>
<PublishSingleFile>true</PublishSingleFile> <PublishSingleFile>true</PublishSingleFile>
<ProjectGuid>ed59f010-b3e5-4e19-be65-18053645dfc5</ProjectGuid> <ProjectGuid>ed59f010-b3e5-4e19-be65-18053645dfc5</ProjectGuid>
<SelfContained>true</SelfContained> <SelfContained>true</SelfContained>

View File

@ -4,8 +4,8 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
--> -->
<Project> <Project>
<PropertyGroup> <PropertyGroup>
<_PublishTargetUrl>F:\AProject\A菲达宝开项目\(2023-11)徐州工厂立库\应用程序\wcs_serve_cs\wcs_serve_cs\bin\Release\net8.0\publish\</_PublishTargetUrl> <_PublishTargetUrl>F:\A开发项目\A菲达宝开项目\2024-08_上汽试制仓\应用程序\WcsService\WcsMain\bin\Release\net8.0\publish\</_PublishTargetUrl>
<History>True|2023-12-21T07:04:28.6290873Z;True|2023-12-21T14:59:03.4454135+08:00;True|2023-12-21T14:51:08.6690406+08:00;True|2023-12-21T14:26:42.6801144+08:00;False|2023-12-21T14:26:14.3256943+08:00;True|2023-12-21T14:13:42.5511801+08:00;True|2023-12-21T13:56:38.5871005+08:00;True|2023-12-19T12:19:57.9900187+08:00;True|2023-12-19T11:53:33.6930379+08:00;True|2023-12-17T12:51:32.6510827+08:00;False|2023-12-17T12:49:32.9022541+08:00;</History> <History>True|2024-11-24T07:54:22.8370880Z||;True|2024-11-24T13:25:56.1353533+08:00||;True|2024-11-24T11:18:32.6506847+08:00||;True|2024-11-24T10:50:39.8134466+08:00||;True|2024-11-23T15:05:38.5131893+08:00||;True|2024-11-23T14:13:58.0382497+08:00||;True|2024-11-23T14:12:00.7634049+08:00||;True|2024-11-23T13:14:24.2275063+08:00||;True|2024-11-23T12:53:07.7352348+08:00||;True|2024-11-23T12:48:43.3192685+08:00||;True|2024-11-23T12:01:19.9580187+08:00||;True|2024-11-23T11:57:28.7283976+08:00||;True|2024-11-22T12:34:16.7539579+08:00||;True|2024-11-22T12:31:12.2247208+08:00||;True|2024-11-22T10:08:38.6674414+08:00||;True|2024-11-22T09:58:07.3694815+08:00||;True|2024-11-22T09:40:25.3466460+08:00||;True|2024-11-21T16:33:23.0082958+08:00||;True|2024-11-21T16:21:46.1852307+08:00||;True|2024-11-21T13:56:06.5543719+08:00||;True|2024-11-21T11:41:50.4634584+08:00||;True|2024-11-21T11:30:54.9747290+08:00||;False|2024-11-21T11:30:18.2738127+08:00||;True|2024-11-21T10:45:42.5524544+08:00||;True|2024-11-20T17:08:23.7162943+08:00||;True|2024-11-20T16:54:01.3629057+08:00||;True|2024-11-20T16:40:49.6894280+08:00||;True|2024-11-20T16:37:47.3670812+08:00||;False|2024-11-20T16:37:04.0777763+08:00||;True|2024-11-20T16:25:26.3145915+08:00||;True|2024-11-20T16:10:13.7558526+08:00||;True|2024-11-20T16:07:37.8681228+08:00||;True|2024-11-20T15:55:28.7196074+08:00||;True|2024-11-20T15:52:40.6653904+08:00||;True|2024-11-20T15:30:21.5138564+08:00||;True|2024-11-20T15:24:40.6286995+08:00||;True|2024-11-18T21:16:47.1821173+08:00||;True|2024-11-18T21:14:40.1209255+08:00||;True|2024-11-18T21:11:32.0010536+08:00||;True|2024-11-18T21:10:56.2142485+08:00||;True|2024-11-18T20:59:50.6846634+08:00||;True|2024-11-16T14:31:14.2653894+08:00||;True|2024-11-16T14:16:17.4271635+08:00||;True|2024-11-16T14:16:08.1284507+08:00||;True|2024-11-16T14:08:02.8639352+08:00||;True|2024-11-16T14:07:06.6785776+08:00||;True|2024-11-16T13:14:33.8282571+08:00||;True|2024-11-16T13:14:09.9233077+08:00||;True|2024-11-16T12:49:45.5891890+08:00||;True|2024-11-16T12:19:05.5997384+08:00||;True|2024-11-16T11:49:43.2660430+08:00||;True|2024-11-16T11:49:12.7318514+08:00||;True|2024-11-16T11:43:41.8128931+08:00||;True|2024-11-16T10:39:25.1387254+08:00||;True|2024-11-16T10:24:19.4879139+08:00||;True|2024-11-15T17:47:10.4630939+08:00||;True|2024-11-15T17:42:25.6985733+08:00||;True|2024-11-15T17:39:43.9409305+08:00||;True|2024-11-15T17:26:18.2886475+08:00||;True|2024-11-15T17:23:05.3112513+08:00||;True|2024-11-15T17:16:40.2960771+08:00||;True|2024-11-15T17:14:12.3416383+08:00||;True|2024-11-15T17:09:43.2642034+08:00||;True|2024-11-15T17:05:04.4694932+08:00||;False|2024-11-15T17:04:34.2335564+08:00||;False|2024-11-15T17:04:12.5281280+08:00||;True|2024-11-15T17:01:49.4325408+08:00||;False|2024-11-15T17:01:29.1872712+08:00||;True|2024-11-15T16:00:18.8617729+08:00||;True|2024-11-15T15:56:13.9285180+08:00||;True|2024-11-15T15:50:53.6121456+08:00||;True|2024-11-15T15:17:41.0508047+08:00||;True|2024-11-15T13:50:06.8021767+08:00||;True|2024-11-15T13:17:48.2695650+08:00||;True|2023-12-21T15:04:28.6290873+08:00||;True|2023-12-21T14:59:03.4454135+08:00||;True|2023-12-21T14:51:08.6690406+08:00||;True|2023-12-21T14:26:42.6801144+08:00||;False|2023-12-21T14:26:14.3256943+08:00||;True|2023-12-21T14:13:42.5511801+08:00||;True|2023-12-21T13:56:38.5871005+08:00||;True|2023-12-19T12:19:57.9900187+08:00||;True|2023-12-19T11:53:33.6930379+08:00||;True|2023-12-17T12:51:32.6510827+08:00||;False|2023-12-17T12:49:32.9022541+08:00||;</History>
<LastFailureDetails /> <LastFailureDetails />
</PropertyGroup> </PropertyGroup>
</Project> </Project>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup> <PropertyGroup>
<NameOfLastUsedPublishProfile>F:\A开发项目\A菲达宝开项目\2024-05_苏州卡特\应用程序\WcsService\WcsMain\Properties\PublishProfiles\FolderProfile.pubxml</NameOfLastUsedPublishProfile> <NameOfLastUsedPublishProfile>F:\A开发项目\A菲达宝开项目\2024-08_上汽试制仓\应用程序\WcsService\WcsMain\Properties\PublishProfiles\FolderProfile2.pubxml</NameOfLastUsedPublishProfile>
<Controller_SelectedScaffolderID>ApiControllerEmptyScaffolder</Controller_SelectedScaffolderID> <Controller_SelectedScaffolderID>ApiControllerEmptyScaffolder</Controller_SelectedScaffolderID>
<Controller_SelectedScaffolderCategoryPath>root/Common/Api</Controller_SelectedScaffolderCategoryPath> <Controller_SelectedScaffolderCategoryPath>root/Common/Api</Controller_SelectedScaffolderCategoryPath>
</PropertyGroup> </PropertyGroup>

View File

@ -7,8 +7,8 @@
}, },
"AllowedHosts": "*", "AllowedHosts": "*",
"Settings": { "Settings": {
"DBMysql": "server=10.90.36.71;port=3306;user=developer;password=developer;database=wcs_kate_suzhou;", "DBMysql": "server=192.168.234.128;port=3306;user=developer;password=developer;database=wcs_kate_suzhou;",
"DBMysqlLocal": "server=192.168.234.134;port=3306;user=developer;password=developer;database=app_wcs_shangqi;", "DBMysqlLocal": "server=172.168.61.200;port=3306;user=developer;password=developer;database=app_wcs_shangqi;",
"DBMssql": "Data Source=192.168.142.131;Initial Catalog=wcs;User Id=sa;Password=Sa123;", "DBMssql": "Data Source=192.168.142.131;Initial Catalog=wcs;User Id=sa;Password=Sa123;",
"DBMssqlLocal": "Data Source=192.168.142.131;Initial Catalog=wcs_stacker;User Id=sa;Password=Sa123;", "DBMssqlLocal": "Data Source=192.168.142.131;Initial Catalog=wcs_stacker;User Id=sa;Password=Sa123;",