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 WcsMain.ApiClient.General;
using WcsMain.Common;
using WcsMain.ExtendMethod;
using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
using WcsMain.Constant.ExtendMethod;
namespace WcsMain.ApiClient.AGV;

View File

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

View File

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

View File

@ -25,5 +25,5 @@ public class AGVTaskResponse
[JsonProperty("robotJobId")]
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>
/// 四向车库的响应
@ -8,16 +10,19 @@ public class ContainerTaskResponse
/// <summary>
/// 响应码
/// </summary>
[JsonProperty("code")]
public string? Code { get; set; }
/// <summary>
/// WMS 任务号
/// </summary>
[JsonProperty("wmstaskid")]
public string? WmsTaskId { get; set; }
/// <summary>
/// 信息
/// </summary>
[JsonProperty("message")]
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>
/// 四向车库出库移库请求
@ -8,31 +10,37 @@ public class ContainerTaskResqust
/// <summary>
/// 请求ID
/// </summary>
[JsonProperty("requestid")]
public string? RequestId { get; set; }
/// <summary>
/// 密钥
/// </summary>
[JsonProperty("key")]
public string? Key { get; set; }
/// <summary>
/// WMS 任务号
/// </summary>
[JsonProperty("wmstaskid")]
public string? WmsTaskId { get; set; }
/// <summary>
/// 载具号
/// </summary>
[JsonProperty("palletno")]
public string? PalletNo { get; set; }
/// <summary>
/// 起始位置
/// </summary>
[JsonProperty("fromcellno")]
public string? FromCellNo { get; set; }
/// <summary>
/// 目标位置
/// </summary>
[JsonProperty("tocellno")]
public string? ToCell { get; set; }
/// <summary>
@ -42,6 +50,7 @@ public class ContainerTaskResqust
/// 2 - 出库
/// 3 - 移库
/// </remarks>
[JsonProperty("tasktype")]
public string? TaskType { get; set; }

View File

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

View File

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

View File

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

View File

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

View File

@ -20,10 +20,16 @@ public class AGVController(AGVService agvService) : ControllerBase
/// <param name="request"></param>
/// <returns></returns>
[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>
/// 提供给四向车的API接口
/// </summary>
[Route("api/container")]
[Route("api/shuttle")]
[ApiController]
[ServiceFilter<ResponseFilterAttribute>]
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);
/// <summary>
/// Wms向Wcs请求修改任务状态
/// Wcs请求修改任务状态
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost("updateWmsTaskStatus")]
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>
/// <returns></returns>
[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>
/// 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

@ -8,6 +8,32 @@ namespace WcsMain.ApiServe.Dto.AGV;
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>
@ -18,7 +44,7 @@ public class AGVRequestBodyLayout<T>
/// 仓库编号
/// </summary>
[JsonPropertyName("warehouseId")]
public string? WarehouseId { get; set; }
public int? WarehouseId { get; set; }
/// <summary>
/// 快仓系统内部任务号
@ -44,6 +70,4 @@ public class AGVRequestBodyLayout<T>
[JsonPropertyName("jobData")]
public T? JobData { get; set; }
}

View File

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

View File

@ -28,6 +28,12 @@ public class SetWmsTask
[JsonPropertyName("priority")]
public int? Priority { get; set; }
/// <summary>
/// 任务状态
/// </summary>
[JsonPropertyName("taskStatus")]
public int? TaskStatus { get; set; }
/// <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.TableEntity;
using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
using WcsMain.EquipOperation.StackerConvey;
using WcsMain.ApiClient.AGV;
namespace WcsMain.ApiServe.Service.AGVService;
[Service]
public class AGVService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent taskExecuteEvent)
public class AGVService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent taskExecuteEvent, StackerConveyOperation stackerConveyOperation, AGVWebApiAction webApiAction)
{
/// <summary>
/// AGV 任务回告
@ -26,8 +28,8 @@ public class AGVService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent taskExecut
Body = new() { Code = "ERROR", Success = false, Message = "Body 未能正确解析" }
};
}
string? wmsTaskId = bodyData.RobotJobId; // 任务号
string? status = bodyData.State; // 状态
string? wmsTaskId = bodyData.Event?.RobotJobId; // 任务号
string? status = bodyData.Event?.State; // 状态
if(status == default || wmsTaskId == default)
{
return new()
@ -78,7 +80,19 @@ public class AGVService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent taskExecut
// 若是出库位置则在上报任务完成时上报WMS任务完成
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);
if (string.IsNullOrEmpty(errText))
@ -95,7 +109,7 @@ public class AGVService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent taskExecut
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 });
if(updateResult > 0)
@ -145,4 +159,88 @@ public class AGVService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent taskExecut
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.TableEntity;
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;
[Service]
public class ContainerService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent taskExecuteEvent)
public class ContainerService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent taskExecuteEvent, WmsBaseWebApi wmsBaseWebApi, StackerConveyOperation stackerConveyOperation)
{
/// <summary>
/// 请求四向车任务
@ -23,23 +28,56 @@ public class ContainerService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent task
return new() { Code = "400", Message = "缺少必须参数" };
}
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 = "数据连接失败,请重试" };
}
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();
/* 更新状态为前往终点 */
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}");
//Task.Factory.StartNew(() =>
//{
// // 给PLC写完成原因是四向车给PLC经常写入失败。
// Thread.Sleep(500);
// for (int i = 0; i < 3; i++)
// {
// stackerConveyOperation.StandTaskApplyComplete(request.FormCellNo);
// }
//});
return new()
{
Code = "200",
Message = "操作成功",
WmsTaskId = wmsTask.TaskId,
WmsTaskId = wmsTask.WcsId,
PalletNo = wmsTask.VehicleNo,
FromCellNo = request.FormCellNo,
ToCellNo = wmsTask.Destination,
@ -53,11 +91,11 @@ public class ContainerService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent task
/// <returns></returns>
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 = "缺少必须的参数" };
}
List<AppWmsTask>? appWmsTasks = wmsTaskDao.Select(new() { TaskId = request.WmsTaskId });
List<AppWmsTask>? appWmsTasks = wmsTaskDao.Select(new() { WcsId = request.WmsTaskId?.ToString() });
if(appWmsTasks == null)
{
return new() { Code = "400", Message = "数据连接异常,请稍后再试" };
@ -67,18 +105,29 @@ public class ContainerService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent task
return new() { Code = "400", Message = $"该任务号不存在:{request.WmsTaskId}" };
}
AppWmsTask wmsTask = appWmsTasks.First();
if(request.TaskState?.ToString() == "20")
{
if (wmsTask.TaskType == (int)WmsTaskTypeEnum.inTask || wmsTask.TaskType == (int)WmsTaskTypeEnum.moveTask)
{
/* 入库/移库 完成需要反馈WMS任务完成更新任务状态为完成 */
string? errText = taskExecuteEvent.CompleteTaskEvent(wmsTask, "四向车上报完成", request.FactendCell);
return new() { Code = string.IsNullOrEmpty(errText) ? "200" : "400", Message = string.IsNullOrEmpty(errText) ? "成功" : errText, WmsTaskId = request.WmsTaskId };
return new() { Code = string.IsNullOrEmpty(errText) ? "200" : "400", Message = string.IsNullOrEmpty(errText) ? "成功" : errText, WmsTaskId = request.WmsTaskId?.ToString() };
}
if(wmsTask.TaskType == (int)WmsTaskTypeEnum.outTask)
if (wmsTask.TaskType == (int)WmsTaskTypeEnum.outTask)
{
/* 更新任务状态为到达中间点 */
int updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, TaskStatus = (int)WmsTaskStatusEnum.arriveMid, ModifyTime = DateTime.Now });
return new() { Code = updateResult > 0 ? "200" : "400", Message = updateResult > 0 ? "成功" : "数据异常", WmsTaskId = request.WmsTaskId };
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 (request.TaskState?.ToString() == "21")
{
/* 更新任务状态为取消 */
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?.ToString() };
}
return new() { Code = "400", Message = $"不支持的状态类型:{request.TaskState}" };
}
}

View File

@ -53,7 +53,7 @@ public class WmsTaskService(WmsTaskAction wmsTaskAction, AppWmsTaskDao wmsTaskDa
/// <returns></returns>
public WcsApiResponse GetStackerTask(SetWmsTask request)
{
request.TaskId = dataBaseData.GetNewUUID();
request.TaskId = dataBaseData.GetNewUUID2();
bool checkData = CheckData.CheckDataRules(request);
if (!checkData)
{
@ -63,8 +63,9 @@ public class WmsTaskService(WmsTaskAction wmsTaskAction, AppWmsTaskDao wmsTaskDa
AppWmsTask wmsTask = new()
{
TaskId = request.TaskId,
WcsId = dataBaseData.GetNewUUID2(),
TaskType = request.TaskType,
TaskStatus = (int)WmsTaskStatusEnum.create,
TaskStatus = request.TaskStatus == default ? (int)WmsTaskStatusEnum.create : request.TaskStatus,
Priority = request.Priority ?? 0,
Origin = request.Origin,
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.DataBase.Dao;
using WcsMain.DataBase.TableEntity;
using WcsMain.ExtendMethod;
using WcsMain.StaticData;
using WcsMain.Utils.Plugins;
using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
using WcsMain.Constant.ExtendMethod;
using WcsMain.Common.DataService;
using WcsMain.DataBase.MixDao;
namespace WcsMain.ApiServe.Service.WmsService;
@ -19,76 +21,74 @@ namespace WcsMain.ApiServe.Service.WmsService;
/// Wms任务接口逻辑
/// </summary>
[Service]
public class WmsTaskService(WmsTaskAction wmsTaskAction, AppWmsTaskDao wmsTaskDao)
public class WmsTaskService(WmsTaskAction wmsTaskAction, AppWmsTaskDao wmsTaskDao, DataBaseData dataBaseData)
{
/// <summary>
/// 接收WMS任务数据处理
/// </summary>
/// <param name="request"></param>
/// <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 = []; // 存放错误的请求
/* 插入库存信息 */ // ---- 库存由WMS管理数据库表也无需操作
List<AppWmsTask> wmsTasks = [];
foreach (var taskData in request)
{
/* 检验传入的数据格式 */
bool checkData = CheckData.CheckDataRules(taskData);
bool checkData = CheckData.CheckDataRules(request);
if (!checkData)
{
var errorRequest = ObjectCopy.CopyProperties<GetStackerRequest, GetStackerRequest>(taskData);
var errorRequest = ObjectCopy.CopyProperties<GetStackerRequest, GetStackerRequest>(request);
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);
}
}
///* 检验起点和终点是否正常 */
//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 = taskData.TaskId,
TaskType = taskData.TaskType,
TaskId = request.TaskId,
WcsId = dataBaseData.GetNewUUID2(),
TaskType = request.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,
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) // 如果有错误请求,则返回错误请求
if (errRequest.Count > 0) // 如果有错误请求,则返回错误请求
{
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.MixDao;
using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
@ -7,6 +6,7 @@ using WcsMain.StaticData;
using WcsMain.ApiClient.WMS;
using WcsMain.Constant.Enum.Stacker;
using WcsMain.Constant.Enum.TaskEnum;
using WcsMain.Constant.ExtendMethod;
namespace WcsMain.Business.CommonAction;
@ -159,6 +159,7 @@ public class WCSTaskExecuteEvent(TaskDao taskDao, SendWmsTaskStatus sendWmsTaskS
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);
if (!string.IsNullOrEmpty(errText))
{
@ -172,6 +173,22 @@ public class WCSTaskExecuteEvent(TaskDao taskDao, SendWmsTaskStatus sendWmsTaskS
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>
@ -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 });
if (updateResult < 1)
{
ConsoleLog.Warning($"【异常】任务完成更新WMS任务状态失败");
ConsoleLog.Warning($"【异常】任务离开起点更新WMS任务状态失败");
}
if (task.CreatePerson == StaticData.StaticString.WMS)
{

View File

@ -2,8 +2,8 @@
using WcsMain.ApiClient.WMS.Dto;
using WcsMain.Business.Convey.HistoryDataHandler.HisGetData.I;
using WcsMain.Common;
using WcsMain.Constant.ExtendMethod;
using WcsMain.DataBase.TableEntity;
using WcsMain.ExtendMethod;
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.DataService;
using WcsMain.Constant.Enum.Convey;
using WcsMain.Constant.ExtendMethod;
using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity;
using WcsMain.EquipOperation.Convey;
using WcsMain.EquipOperation.Entity;
using WcsMain.ExtendMethod;
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.DataService;
using WcsMain.Constant.Enum.Convey;
using WcsMain.Constant.ExtendMethod;
using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity;
using WcsMain.EquipOperation.Convey;
using WcsMain.EquipOperation.Entity;
using WcsMain.ExtendMethod;
namespace WcsMain.Business.Convey.HistoryDataHandler.HisGetData;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -3,6 +3,7 @@ using WcsMain.Business.CommonAction;
using WcsMain.Common;
using WcsMain.Constant.Enum.Stacker;
using WcsMain.Constant.Enum.TaskEnum;
using WcsMain.Constant.ExtendMethod;
using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity;
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.Shuttle;
using WcsMain.Constant.Enum.General;
@ -67,6 +69,15 @@ public class ExecuteWmsTask(AppWmsTaskDao wmsTaskDao, StackerConveyOperation sta
/// <param name="wmsTask"></param>
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);
if (!string.IsNullOrEmpty(errText))
{
@ -75,21 +86,26 @@ public class ExecuteWmsTask(AppWmsTaskDao wmsTaskDao, StackerConveyOperation sta
}
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}");
}
/// <summary>
/// 执行入库任务
/// 执行入库任务 --- AGV搬运
/// </summary>
/// <param name="wmsTask"></param>
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; // 没有可用的站台
/* 发送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))
{
ConsoleLog.Warning($"【警告】入库请求AGV搬运失败任务号{wmsTask.TaskId},异常信息:{errText}");
@ -97,7 +113,7 @@ public class ExecuteWmsTask(AppWmsTaskDao wmsTaskDao, StackerConveyOperation sta
}
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}");
/* 四向车任务有接口返回给四向车 */
}
@ -108,18 +124,22 @@ public class ExecuteWmsTask(AppWmsTaskDao wmsTaskDao, StackerConveyOperation sta
/// <param name="wmsTask"></param>
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; // 没有可用站台
/* 发送四向车搬运任务 */
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))
{
ConsoleLog.Warning($"【警告】库请求四向车搬运失败,任务号:{wmsTask.TaskId},异常信息:{errText}");
ConsoleLog.Warning($"【警告】库请求四向车搬运失败,任务号:{wmsTask.TaskId},异常信息:{errText}");
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}");
/* AGV接续任务由定时器触发 */
}
@ -134,12 +154,12 @@ public class ExecuteWmsTask(AppWmsTaskDao wmsTaskDao, StackerConveyOperation sta
string errText = containerAction.ExecuteMoveTask(wmsTask);
if (!string.IsNullOrEmpty(errText))
{
ConsoleLog.Warning($"四向车移库任务请求四向车服务失败,任务号:{wmsTask.TaskId},异常信息:{errText}");
ConsoleLog.Warning($"四向车移库任务请求四向车服务失败,任务号:{wmsTask.TaskId}/{wmsTask.WcsId},异常信息:{errText}");
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}");
}
@ -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 ?? "");
if (!string.IsNullOrEmpty(errText))
{
ConsoleLog.Warning($"【警告】提升机站台信息获取失败,异常信息:{errText}");
//ConsoleLog.Warning($"【警告】提升机站台信息获取失败,异常信息:{errText}");
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();
if (tasks == null || tasks.Count == 0) continue;
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))
{
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 ?? "");
if (!string.IsNullOrEmpty(errText))
{
ConsoleLog.Warning($"【警告】提升机站台信息获取失败,异常信息:{errText}");
//ConsoleLog.Warning($"【警告】提升机站台信息获取失败,异常信息:{errText}");
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;
return liftInfo.Tag;
string location = "";
if (!string.IsNullOrEmpty(liftInfo.Tag))
{
location = liftInfo.Tag.Split(',')[1];
}
return location;
}
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 ?? "");
if (!string.IsNullOrEmpty(errText))
{
ConsoleLog.Warning($"【警告】提升机站台信息获取失败,异常信息:{errText}");
//ConsoleLog.Warning($"【警告】提升机站台信息获取失败,异常信息:{errText}");
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;
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();
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 WcsMain.Common;
using WcsMain.Common.DataService;
using WcsMain.Constant.ExtendMethod;
using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity;
using WcsMain.EquipOperation.Stacker;
using WcsMain.ExtendMethod;
namespace WcsMain.CirculationJob.Stacker;

View File

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

View File

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

View File

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

View File

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

View File

@ -1,6 +1,6 @@
using WcsMain.DataBase.TableEntity;
namespace WcsMain.ExtendMethod;
namespace WcsMain.Constant.ExtendMethod;
public static class AppApiBaseInfoExtendMethod
{

View File

@ -1,6 +1,6 @@
using WcsMain.DataBase.TableEntity;
namespace WcsMain.ExtendMethod;
namespace WcsMain.Constant.ExtendMethod;
/// <summary>
/// 库位的扩展方法
@ -15,10 +15,10 @@ public static class AppLocationExtendMethod
/// <returns></returns>
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)
{
if(!value.Exists(e => e.WmsLocation == wmsLocation)) return false;
if (!value.Exists(e => e.WmsLocation == wmsLocation)) return false;
}
return true;
}
@ -31,7 +31,7 @@ public static class AppLocationExtendMethod
/// <returns></returns>
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);
}

View File

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

View File

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

View File

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

View File

@ -1,4 +1,6 @@
using HslCommunication;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
namespace WcsMain.ExtendMethod;
@ -97,4 +99,23 @@ public static partial class StringExtendMethod
[GeneratedRegex("^\\d+$")]
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>
/// 任务扩展方法

View File

@ -84,9 +84,11 @@ public class AppWmsTaskDao
{
var sqlFuc = CommonTool.DbServe.Queryable<AppWmsTask>()
.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.TaskStatus != null, w => w.TaskStatus == appWmsTask.TaskStatus)
.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),
w => w.Destination == appWmsTask.Destination)
.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>
@ -208,6 +247,7 @@ public class AppWmsTaskDao
var sqlFuc = CommonTool.DbServe.Queryable<AppWmsTask>()
.WhereIF(!string.IsNullOrEmpty(pageRequest.SearchStr),
w => w.Destination!.Contains(pageRequest.SearchStr!)
|| w.WcsId!.Contains(pageRequest.SearchStr!)
|| w.Origin!.Contains(pageRequest.SearchStr!)
|| w.VehicleNo!.Contains(pageRequest.SearchStr!)
|| w.TaskId!.Contains(pageRequest.SearchStr!)

View File

@ -1,8 +1,8 @@
using WcsMain.Common;
using WcsMain.Constant.Enum.Stacker;
using WcsMain.DataBase.TableEntity;
using WcsMain.ExtendMethod;
using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
using WcsMain.Constant.ExtendMethod;
namespace WcsMain.DataBase.MixDao;
@ -218,7 +218,7 @@ public class TaskDao
{
var updateResult = CommonTool.DbServe
.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)
.ExecuteCommand();
return updateResult > 0 ? null : "失败";

View File

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

View File

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

View File

@ -73,6 +73,39 @@ public class StackerConveyOperation
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>
/// 获取输送机任务号

View File

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

View File

@ -4,8 +4,8 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
<PropertyGroup>
<_PublishTargetUrl>F:\AProject\A菲达宝开项目\(2023-11)徐州工厂立库\应用程序\wcs_serve_cs\wcs_serve_cs\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>
<_PublishTargetUrl>F:\A开发项目\A菲达宝开项目\2024-08_上汽试制仓\应用程序\WcsService\WcsMain\bin\Release\net8.0\publish\</_PublishTargetUrl>
<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 />
</PropertyGroup>
</Project>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<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_SelectedScaffolderCategoryPath>root/Common/Api</Controller_SelectedScaffolderCategoryPath>
</PropertyGroup>

View File

@ -7,8 +7,8 @@
},
"AllowedHosts": "*",
"Settings": {
"DBMysql": "server=10.90.36.71;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;",
"DBMysql": "server=192.168.234.128;port=3306;user=developer;password=developer;database=wcs_kate_suzhou;",
"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;",
"DBMssqlLocal": "Data Source=192.168.142.131;Initial Catalog=wcs_stacker;User Id=sa;Password=Sa123;",