From a23691d54a0142ba9a0668788d366638bd82349e Mon Sep 17 00:00:00 2001 From: wangxinhui <wangxinhui@hnkhzn.com> Date: 星期二, 26 八月 2025 08:25:41 +0800 Subject: [PATCH] 更新最新代码,码垛,伸缩货叉等 --- 项目代码/WCS/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs | 5 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/StackerCraneJob_CP.cs | 44 项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs | 68 + 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs | 71 + 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/R_MDDBName.cs | 60 + 项目资料/通信协议/龙利得机器人IO通讯表20250712.xlsx | 0 项目代码/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs | 215 ++++ 项目代码/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs | 106 + 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/ConveyorLineJob_CPB.cs | 47 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/ConveyorLineJob_CPH.cs | 40 项目资料/通信协议/原料库输送线通讯协议.xlsx | 0 项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Completed.cs | 4 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/RetractDBName.cs | 59 + 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/W_MDDBName.cs | 52 + 项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs | 413 ++++++---- 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/AGV_CPExtend.cs | 55 + 项目代码/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs | 4 项目资料/通信协议/伸缩货叉接驳台IP分配表.xlsx | 0 项目资料/通信协议/成品输送线通讯协议_20250707.xlsx | 0 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/码垛/MDJob_CP.cs | 165 ++++ 项目代码/WMS/WMSServices/WIDESEA_ITaskInfoService/ITaskService.cs | 40 + 项目代码/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs | 12 项目资料/接口协议/一期BSTERP需求字段.xlsx | 0 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/原料库/ConveyorLineJob_YL1ndFloor.cs | 49 + 项目代码/龙利得PDA/common/config.js | 2 项目代码/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs | 31 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/接驳台/CoveryorJobYL.cs | 116 +++ 项目资料/通信协议/印智云数据字典.xlsx | 0 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/ConveyorLineJob_CPC.cs | 11 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/伸缩货叉/RetractYSJob.cs | 114 +++ 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/ConveyorLineJob_CPA.cs | 24 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/CoveryorDBName.cs | 60 + 项目代码/WMS/WMSServices/WIDESEA_Model/Models/Stock/Dt_ProCache.cs | 12 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/原料库/StackerCraneJob_YLSC2.cs | 49 项目代码/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs | 34 项目代码/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs | 61 + 项目代码/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskSendDTO.cs | 2 项目代码/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvSecureApplyDTO.cs | 2 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/RGVJob_CP.cs | 56 + 项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs | 75 + 项目代码/WCS/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs | 21 项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Reloaction.cs | 63 + 42 files changed, 1,848 insertions(+), 394 deletions(-) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs" index ccd5df8..87025f1 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs" @@ -48,10 +48,10 @@ [Description("AGV寰呮墽琛�")] AGV_Execute = 300, /// <summary> - /// AGV鍙栬揣涓� + /// AGV鍙栬揣瀹屾垚 /// </summary> - [Description("AGV鍙栬揣涓�")] - AGV_Takeing = 305, + [Description("AGV鍙栬揣瀹屾垚")] + AGV_TakeFinish = 305, /// <summary> /// AGV鎵ц涓� /// </summary> @@ -104,6 +104,12 @@ RGV_Executing = 510, /// <summary> + /// 鐮佸灈鎵ц涓� + /// </summary> + [Description("鐮佸灈鎵ц涓�")] + MD_Executing = 520, + + /// <summary> /// 浠诲姟瀹屾垚 /// </summary> [Description("浠诲姟瀹屾垚")] diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs" index aa83b00..7f758b7 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs" @@ -80,6 +80,19 @@ /// </summary> [Description("鎴愬搧MES鎻愬簱")] OutMesRworkProduct = 250, + + /// <summary> + /// 鍗板埛鍑哄簱 + /// </summary> + [Description("鍗板埛鍑哄簱")] + PrintOutbound = 310, + + /// <summary> + /// 鏃犵汉甯冨嚭搴� + /// </summary> + [Description("鏃犵汉甯冨嚭搴�")] + OutWFB = 320, + /// <summary> /// 閲囪喘鍏ュ簱 /// </summary> @@ -155,6 +168,24 @@ EmptyProductBack = 630, /// <summary> + /// 鎴愬搧鐮佸灈 + /// </summary> + [Description("鎴愬搧鐮佸灈")] + ProductMD = 640, + + /// <summary> + /// 鍗板埛鍗婃垚鍝佸叆搴� + /// </summary> + [Description("鍗板埛鍗婃垚鍝佸叆搴�")] + PrintInbound = 710, + + /// <summary> + /// 鍗板埛鍘熸枡浣欐枡閫�搴� + /// </summary> + [Description("鍗板埛鍘熸枡浣欐枡閫�搴�")] + PrintBackInbound = 720, + + /// <summary> /// 宸烽亾鍐呯Щ搴� /// </summary> [Description("宸烽亾鍐呯Щ搴�")] diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvSecureApplyDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvSecureApplyDTO.cs" index b94f32d..d7f0523 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvSecureApplyDTO.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvSecureApplyDTO.cs" @@ -13,7 +13,7 @@ /// </summary> public string ReceiveTaskID { get; set; } /// <summary> - /// 鎵规 + /// 鍦板浘鍙� /// </summary> public string WbCode { get; set; } } diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskSendDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskSendDTO.cs" index b064b5c..2ed4cec 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskSendDTO.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskSendDTO.cs" @@ -44,6 +44,6 @@ public class PointDetail { public string Code { get; set; } - public string Value { get; set; } + public string? Value { get; set; } } } diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs" index 2d1bf0a..d375bea 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs" @@ -71,7 +71,15 @@ /// <param name="palletCode">鎵樼洏</param> /// <param name="sourceAddress">璧风偣</param> /// <returns></returns> - WebResponseContent RequestYLWMSTaskSimple(string palletCode, string sourceAddress); + WebResponseContent RequestYLWMSTaskSimple(string palletCode, string sourceAddress, int taskNum = 0); + + WebResponseContent AssignCPRoadwayNo(); + + // <summary> + /// 璇锋眰鍘熸枡鍏ュ簱宸烽亾 + /// </summary> + /// <returns></returns> + WebResponseContent AssignYLRoadwayNo(string palletCode); /// <summary> /// 璇锋眰鍏ュ簱浠诲姟 /// </summary> @@ -79,7 +87,7 @@ /// <param name="sourceAddress">璧峰鍦板潃</param> /// /// <param name="roadWay">宸烽亾</param> /// <returns></returns> - WebResponseContent RequestWMSTaskSimple(string palletCode, string sourceAddress, string roadWay="", int taskType = 630); + WebResponseContent RequestWMSTaskSimple(string palletCode, string sourceAddress, string roadWay="", int taskType = 630,int taskNum=0,string targetAddress=""); /// <summary> /// 鍚慦MS鐢宠浠诲姟 @@ -97,15 +105,6 @@ /// <param name="roadwayNo">宸烽亾鍙�</param> /// <returns></returns> string? RequestAssignLocation(int taskNum, string roadwayNo); - - /// <summary> - /// 鍚慦MS鐢宠鍒嗛厤璐т綅 - /// </summary> - /// <param name="taskNum">浠诲姟鍙�</param> - /// <param name="roadwayNo">宸烽亾鍙�</param> - /// <param name="heightType">楂樺害</param> - /// <returns></returns> - string? RequestAssignLocationByHeight(int taskNum, string roadwayNo, int heightType); /// <summary> /// 浠诲姟瀹屾垚 diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs" index 4724199..bd06e10 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs" @@ -15,9 +15,12 @@ using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; using WIDESEAWCS_QuartzJob.DTO; +using WIDESEAWCS_QuartzJob.Models; +using WIDESEAWCS_QuartzJob.Repository; using WIDESEAWCS_Tasks; using WIDESEAWCS_Tasks.ConveyorLineJob; using WIDESEAWCS_Tasks.DBNames; +using static Dm.net.buffer.ByteArrayBuffer; namespace WIDESEAWCS_Server.Controllers { @@ -28,12 +31,14 @@ private readonly IStationMangerRepository _stationMangerRepository; private readonly ITaskService _taskService; private readonly ITaskRepository _taskRepository; + private readonly IRouterRepository _routerRepository; - public AGVController(IStationMangerRepository stationMangerRepository, ITaskService taskService, ITaskRepository taskRepository) + public AGVController(IStationMangerRepository stationMangerRepository, ITaskService taskService, ITaskRepository taskRepository,IRouterRepository routerRepository) { _stationMangerRepository = stationMangerRepository; _taskService = taskService; _taskRepository = taskRepository; + _routerRepository = routerRepository; } @@ -53,22 +58,42 @@ if (task == null) throw new Exception("鏈壘鍒颁换鍔�"); if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) { - var content = TakeRequest(task.CurrentAddress); - if (!content.Status) + if (task.TaskState==TaskStatusEnum.AGV_Executing.ObjToInt())//鍑哄簱鍙栬揣璇锋眰 { - throw new Exception(content.Message); + var content = TakeRequest(secureApplyModel.WbCode); + if (!content.Status) + { + throw new Exception(content.Message); + } + } + else//鍑哄簱鏀捐揣璇锋眰 + { + var content = PutRequest(secureApplyModel.WbCode, task.PalletType); + if (!content.Status) + { + throw new Exception(content.Message); + } } } else { - var content = PutRequest(task.NextAddress, task.PalletType); - if (!content.Status) + if (task.TaskState == TaskStatusEnum.AGV_Executing.ObjToInt())//鍏ュ簱鍙栬揣璇锋眰 { - throw new Exception(content.Message); + var content = TakeRequest(secureApplyModel.WbCode); + if (!content.Status) + { + throw new Exception(content.Message); + } + } + else//鍏ュ簱鏀捐揣璇锋眰 + { + var content = PutRequest(secureApplyModel.WbCode, task.TaskNum); + if (!content.Status) + { + throw new Exception(content.Message); + } } } - task.TaskState = TaskStatusEnum.AGV_Puting.ObjToInt(); - var up = _taskRepository.UpdateData(task); agvResponse.OK("鎴愬姛","0"); } catch (Exception ex) @@ -201,6 +226,9 @@ switch (agvUpdateModel.GoodsState) { case "1"://鍑哄簱鏍规嵁杩欎釜淇″彿鍒ゆ柇鍙栬揣瀹屾垚 + + //鏇存柊浠诲姟鐘舵�� + _taskService.UpdateTask(task, TaskStatusEnum.AGV_TakeFinish); if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) { var content = TakeFinish(task.CurrentAddress); @@ -208,9 +236,19 @@ { throw new Exception(content.Message); }; - return agvResponse.OK("鎴愬姛", "0"); } - break; + else + { + if (task.TaskType == TaskTypeEnum.PrintInbound.ObjToInt() || task.TaskType == TaskTypeEnum.PrintBackInbound.ObjToInt()) + { + var content = TakeFinish(task.CurrentAddress); + if (!content.Status) + { + throw new Exception(content.Message); + }; + } + } + return agvResponse.OK("鎴愬姛", "0"); case "2"://鍏ュ簱鏍规嵁杩欎釜淇″彿鍒ゆ柇鏀捐揣瀹屾垚 if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup) { @@ -219,19 +257,41 @@ { throw new Exception($"{task.NextAddress}AGV绔欏彴鏈畾涔�"); } - task.CurrentAddress = dt_Station.StationCode; - task.NextAddress = ""; - task.TaskState = TaskStatusEnum.AGV_Finish.ObjToInt(); - task.DeviceCode = dt_Station.StationDeviceCode; - var up = _taskRepository.UpdateData(task); + if (task.TaskType == TaskTypeEnum.PrintInbound.ObjToInt() || task.TaskType == TaskTypeEnum.PrintBackInbound.ObjToInt()) + { + List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == task.TaskType && task.NextAddress == x.StartPosi); + Dt_Router router = routers.FirstOrDefault(); + if (router == null) + { + throw new Exception($"浠诲姟鍙�:{task.TaskNum}鏈壘鍒拌矾鐢遍厤缃俊鎭�"); + } + string oldAddress = task.NextAddress; + //鏇存柊浠诲姟鐘舵�� + task.CurrentAddress = router.NextPosi; + task.NextAddress = ""; + task.DeviceCode = router.ChildPosiDeviceCode; + _taskService.UpdateTask(task, TaskStatusEnum.AGV_Finish); + PutFinish(oldAddress, task.TaskNum); + } + else + { + task.CurrentAddress = dt_Station.StationCode; + task.NextAddress = ""; + task.TaskState = TaskStatusEnum.AGV_Finish.ObjToInt(); + task.DeviceCode = dt_Station.StationDeviceCode; + _taskRepository.UpdateData(task); + } return agvResponse.OK("鎴愬姛","0"); } - else if(task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) + else { _taskService.TaskCompleted(task.TaskNum); + if (task.TaskType==TaskTypeEnum.PrintOutbound.ObjToInt()) + { + PutFinish(task.NextAddress); + } return agvResponse.OK("鎴愬姛", "0"); } - break; default: throw new Exception($"鏈畾涔夋柟娉曞悕銆恵agvUpdateModel.TaskState}銆�"); } @@ -241,7 +301,6 @@ agvResponse.Error(ex.Message); } return agvResponse; - //return _taskService.AgvUpdateTask(agvUpdateModel); } /// <summary> @@ -251,12 +310,12 @@ /// <param name="palletType"></param> /// <returns></returns> [HttpPost, HttpGet, Route("PutRequest"), AllowAnonymous] - public WebResponseContent PutRequest(string code, int palletType) + public WebResponseContent PutRequest(string code, int taskNum) { WebResponseContent content = new WebResponseContent(); try { - Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == code); + Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == code); if (stationManger == null) { return content.Error($"鏈壘鍒扮珯鍙伴厤缃�"); @@ -269,15 +328,57 @@ OtherDevice otherDevice = (OtherDevice)device; - short Command = otherDevice.GetValue<R_ConveyorLineCPDB, short>(R_ConveyorLineCPDB.Command, stationManger.StationCode); - if (Command == 3) + if (device.DeviceCode.Contains("CP"))//鎴愬搧杈撻�佺嚎 { - content.OK("鍏佽鏀炬枡"); + short Command = otherDevice.GetValue<R_ConveyorLineCPDB, short>(R_ConveyorLineCPDB.Command, stationManger.StationCode); + if (Command == 3) + { + content.OK("鍏佽鏀炬枡"); + } + else + { + return content.Error("绂佹鏀炬枡"); + } } - else + else if (device.DeviceCode.Contains("Coveryor"))//鎺ラ┏鍙� { - return content.Error("绂佹鏀炬枡"); + bool RequestPut = otherDevice.GetValue<CoveryorDB, bool>(CoveryorDB.C_RequestPut, stationManger.StationDeviceCode); + if (!RequestPut) + { + otherDevice.SetValue(CoveryorDB.C_InTaskNum, taskNum, stationManger.StationDeviceCode); + otherDevice.SetValue(CoveryorDB.C_RequestPut, true, stationManger.StationDeviceCode); + Thread.Sleep(1000); + } + bool AllowFinish = otherDevice.GetValue<CoveryorDB, bool>(CoveryorDB.C_AllowFinish, stationManger.StationDeviceCode); + if (AllowFinish) + { + content.OK("鍏佽鏀炬枡"); + } + else + { + return content.Error("绂佹鏀炬枡"); + } } + else if (device.DeviceCode.Contains("Retract"))//浼哥缉璐у弶 + { + bool RequestPut = otherDevice.GetValue<RetractDB, bool>(RetractDB.Ret_RequestPut, stationManger.StationDeviceCode); + if (!RequestPut) + { + otherDevice.SetValue(RetractDB.Ret_TargetAddress, Convert.ToInt16(stationManger.StationCode), stationManger.StationDeviceCode); + otherDevice.SetValue(RetractDB.Ret_RequestPut, true, stationManger.StationDeviceCode); + Thread.Sleep(1000); + } + bool AllowFinish = otherDevice.GetValue<RetractDB, bool>(RetractDB.Ret_AllowFinish, stationManger.StationDeviceCode); + if (AllowFinish) + { + content.OK("鍏佽鏀炬枡"); + } + else + { + return content.Error("绂佹鏀炬枡"); + } + } + return content; } catch (Exception ex) @@ -293,11 +394,11 @@ /// <param name="code"></param> /// <returns></returns> [HttpPost, HttpGet, Route("PutFinish"), AllowAnonymous] - public WebResponseContent PutFinish(string code) + public WebResponseContent PutFinish(string code,int taskNum=0) { try { - Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == code); + Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == code); if (stationManger == null) { return WebResponseContent.Instance.Error($"鏈壘鍒扮珯鍙伴厤缃�"); @@ -309,7 +410,14 @@ } OtherDevice otherDevice = (OtherDevice)device; - otherDevice.SetValue(GroundStationDBName.W_PutFinish, true, stationManger.StationCode); + if (device.DeviceCode.Contains("Coveryor"))//鎺ラ┏鍙� + { + otherDevice.SetValue(CoveryorDB.C_PutFinish, true, stationManger.StationDeviceCode); + } + else if (device.DeviceCode.Contains("Retract"))//浼哥缉璐у弶 + { + otherDevice.SetValue(RetractDB.Ret_PutFinish, true, stationManger.StationDeviceCode); + } return WebResponseContent.Instance.OK(); } catch (Exception ex) @@ -330,7 +438,7 @@ WebResponseContent content = new WebResponseContent(); try { - Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == code); + Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == code); if (stationManger == null) { return WebResponseContent.Instance.Error($"鏈壘鍒扮珯鍙伴厤缃畕code}"); @@ -343,15 +451,43 @@ OtherDevice otherDevice = (OtherDevice)device; - short Command = otherDevice.GetValue<R_ConveyorLineCPDB, short>(R_ConveyorLineCPDB.Command, stationManger.StationCode); - if (Command == 2) + if (otherDevice.DeviceCode.Contains("CP"))//鎴愬搧杈撻�佺嚎 { - content.OK("鍏佽鍙栨枡"); + short Command = otherDevice.GetValue<R_ConveyorLineCPDB, short>(R_ConveyorLineCPDB.Command, stationManger.StationCode); + if (Command == 2) + { + content.OK("鍏佽鍙栨枡"); + } + else + { + return content.Error("绂佹鍙栨枡"); + } } - else + else if (device.DeviceCode.Contains("Coveryor"))//鎺ラ┏鍙� { - return content.Error("绂佹鍙栨枡"); + bool AllowTake = otherDevice.GetValue<CoveryorDB, bool>(CoveryorDB.C_AllowTake, stationManger.StationDeviceCode); + if (AllowTake) + { + content.OK("鍏佽鍙栨枡"); + } + else + { + return content.Error("绂佹鍙栨枡"); + } } + else if (device.DeviceCode.Contains("Retract"))//浼哥缉璐у弶 + { + bool AllowTake = otherDevice.GetValue<RetractDB, bool>(RetractDB.Ret_AllowTake, stationManger.StationDeviceCode); + if (AllowTake) + { + content.OK("鍏佽鍙栨枡"); + } + else + { + return content.Error("绂佹鍙栨枡"); + } + } + return content; } catch (Exception ex) @@ -387,6 +523,15 @@ { otherDevice.SetValue(W_ConveyorLineCPDB.W_Command, 2, stationManger.StationCode); } + else if (device.DeviceCode.Contains("Coveryor")) + { + otherDevice.SetValue(CoveryorDB.C_TakeFinish, true, stationManger.StationDeviceCode); + } + else if (device.DeviceCode.Contains("Retract"))//浼哥缉璐у弶 + { + otherDevice.SetValue(RetractDB.Ret_TakeFinish, true, stationManger.StationDeviceCode); + } + return WebResponseContent.Instance.OK(); } catch (Exception ex) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs" index 35a9f81..18a0ec3 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs" @@ -102,6 +102,11 @@ }; return Service.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO }); } + [HttpPost, HttpGet, Route("AssignCPRoadwayNo"), AllowAnonymous] + public WebResponseContent AssignCPRoadwayNo() + { + return Service.AssignCPRoadwayNo(); + } /// <summary> /// 璇锋眰鍏ュ簱浠诲姟 /// </summary> diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs" index f8398a4..8110c69 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs" @@ -80,6 +80,8 @@ public List<int> TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList().Where(x => x >= 100 && x < 500).ToList(); + public List<int> TaskRelocationTypes => typeof(TaskTypeEnum).GetEnumIndexList().Where(x => x >= 900 && x < 1000).ToList(); + public TaskService(ITaskRepository BaseDal, IMapper mapper, ICacheService cacheService, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IApiInfoRepository apiInfoRepository) : base(BaseDal) { _mapper = mapper; @@ -206,6 +208,10 @@ task.CurrentAddress = router.StartPosi; task.NextAddress = router.NextPosi; task.DeviceCode = router.ChildPosiDeviceCode; + if (task.TaskType == TaskTypeEnum.ProductMD.ObjToInt()) + { + task.TaskState = TaskStatusEnum.Line_Executing.ObjToInt(); + } } else //鍑哄簱 { @@ -312,7 +318,7 @@ /// <param name="sourceAddress">璧峰鍦板潃</param> /// /// <param name="roadWay">宸烽亾</param> /// <returns></returns> - public WebResponseContent RequestYLWMSTaskSimple(string palletCode, string sourceAddress) + public WebResponseContent RequestYLWMSTaskSimple(string palletCode, string sourceAddress,int taskNum=0) { WebResponseContent content = new WebResponseContent(); try @@ -322,7 +328,7 @@ { return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃"); } - string responseStr = HttpHelper.Get($"{address}/api/Task/RequestYLWMSTaskSimple?stationCode={sourceAddress}&palletCode={palletCode}"); + string responseStr = HttpHelper.Get($"{address}/api/Task/RequestYLWMSTaskSimple?stationCode={sourceAddress}&palletCode={palletCode}&taskNum{taskNum}"); WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr); if (responseContent != null && responseContent.Status && responseContent.Data != null) { @@ -340,6 +346,64 @@ } return content; } + + // <summary> + /// 璇锋眰鎴愬搧鍏ュ簱宸烽亾 + /// </summary> + /// <returns></returns> + public WebResponseContent AssignCPRoadwayNo() + { + WebResponseContent content = new WebResponseContent(); + try + { + string address = AppSettings.Get("WMSApiAddress"); + if (string.IsNullOrEmpty(address)) + { + return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃"); + } + string responseStr = HttpHelper.Get($"{address}/api/Task/AssignCPRoadwayNo"); + + if (!responseStr.IsNullOrEmpty()) + { + content.OK("鎴愬姛", responseStr); + } + + } + catch (Exception ex) + { + content = WebResponseContent.Instance.Error(ex.Message); + } + return content; + } + + // <summary> + /// 璇锋眰鍘熸枡鍏ュ簱宸烽亾 + /// </summary> + /// <returns></returns> + public WebResponseContent AssignYLRoadwayNo(string palletCode) + { + WebResponseContent content = new WebResponseContent(); + try + { + string address = AppSettings.Get("WMSApiAddress"); + if (string.IsNullOrEmpty(address)) + { + return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃"); + } + string responseStr = HttpHelper.Get($"{address}/api/Task/AssignYLRoadwayNo?palletCode={palletCode}"); + WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr); + if (responseContent != null && responseContent.Status && responseContent.Data != null) + { + content = responseContent; + } + + } + catch (Exception ex) + { + content = WebResponseContent.Instance.Error(ex.Message); + } + return content; + } // <summary> /// 璇锋眰鍏ュ簱浠诲姟 /// </summary> @@ -347,7 +411,7 @@ /// <param name="sourceAddress">璧峰鍦板潃</param> /// /// <param name="roadWay">宸烽亾</param> /// <returns></returns> - public WebResponseContent RequestWMSTaskSimple(string palletCode, string sourceAddress, string roadWay="", int taskType=630) + public WebResponseContent RequestWMSTaskSimple(string palletCode, string sourceAddress,string roadWay="", int taskType=630, int taskNum = 0, string targetAddress = "") { WebResponseContent content = new WebResponseContent(); try @@ -366,16 +430,15 @@ // { WMSTaskDTO? taskDTO = new WMSTaskDTO() { - Id = 1, - TaskNum = DateTime.Now.ToString("mmss").ObjToInt(), + TaskNum = taskNum ==0 ? DateTime.Now.ToString("mmss").ObjToInt(): taskNum, PalletCode= palletCode, - RoadWay= roadWay ?? "", + RoadWay= roadWay, TaskType= taskType, PalletType=1, - TaskStatus=TaskStatusEnum.New.ObjToInt(), + TaskStatus= TaskStatusEnum.New.ObjToInt(), SourceAddress= sourceAddress, - TargetAddress="", - WarehouseId=1, + TargetAddress= targetAddress, + WarehouseId=2, Grade=0, }; content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO }); @@ -574,29 +637,6 @@ } /// <summary> - /// 鍚慦MS鐢宠鍒嗛厤璐т綅 - /// </summary> - /// <param name="taskNum"></param> - /// <param name="roadwayNo"></param> - /// <param name="heightType"></param> - /// <returns></returns> - /// <exception cref="Exception"></exception> - public string? RequestAssignLocationByHeight(int taskNum, string roadwayNo, int heightType) - { - string address = AppSettings.Get("WMSApiAddress"); - if (string.IsNullOrEmpty(address)) throw new Exception("鏈壘鍒癢MSApi鍦板潃"); - string responseStr = HttpHelper.Get($"{address}/api/Task/AssignInboundTaskLocationByHeight?taskNum={taskNum}&roadwayNo={roadwayNo}&heightType={heightType}"); - - WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr); - if (responseContent != null && responseContent.Status && responseContent.Data != null) - { - return responseContent.Data.ToString(); - } - - return ""; - } - - /// <summary> /// 鏍规嵁璁惧缂栧彿銆佷换鍔$被鍨嬪垎缁�(鍙��)鎸夌収浼樺厛绾т互鍙婂垱寤烘椂闂存帓搴忔煡璇换鍔℃睜鏂板鐨勪换鍔� /// </summary> /// <param name="deviceNo">璁惧缂栧彿</param> @@ -610,6 +650,8 @@ return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy); if (taskTypeGroup.Value == TaskTypeGroup.OutbondGroup) return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy); + if (taskTypeGroup.Value == TaskTypeGroup.RelocationGroup) + return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskRelocationTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy); return null; } diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs" index 5fbd015..4224dae 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs" @@ -62,7 +62,7 @@ ///7锛氱敵璇锋枡妗� ///8锛氭枡妗嗗埌浣� ///9锛氭墽琛屽懡浠や腑 - ///11锛氬紓甯� + ///11锛氭弧鐩樺噯澶� /// </summary> public short Command { get; set; } /// <summary> @@ -261,7 +261,8 @@ public short WR_Height { get; set; } /// <summary> - /// 鐢宠 + /// 鐢宠<br/> + /// 86涓虹敵璇� /// </summary> public short WR_Request { get; set; } @@ -350,4 +351,70 @@ /// </summary> public short TaskReceivedDone { get; set; } } + + /// <summary> + /// 鎺ラ┏鍙版湁鏃犺揣 + /// </summary> + public class C_RequestTakeStatus + { + /// <summary> + /// 鏈敵璇峰彇鏂� + /// </summary> + [BoolIndex(0)] + public bool NoTakeRequest { get; set; } + + /// <summary> + /// 宸茬敵璇峰彇鏂� + /// </summary> + [BoolIndex(1)] + public bool OkTakeRequest { get; set; } + } + + public class CoveryorInfo : DeviceCommand + { + /// <summary> + /// 鏈夋棤璐х姸鎬� + /// </summary> + public byte C_GoodsStatus { get; set; } + /// <summary> + /// 鏁呴殰鐘舵�� + /// </summary> + public short C_Error { get; set; } + /// <summary> + /// 鍏ュ簱鐢宠鏀捐揣 + /// </summary> + public byte C_RequestPut { get; set; } + /// <summary> + /// 鍏ュ簱鏀捐揣瀹屾垚 + /// </summary> + public byte C_PutFinish { get; set; } + /// <summary> + /// 鍏ュ簱鍏佽鏀捐揣 + /// </summary> + public byte C_AllowFinish { get; set; } + /// <summary> + /// 鍑哄簱鐢宠鍙栬揣 + /// </summary> + public byte C_RequestTake { get; set; } + /// <summary> + /// 鍑哄簱鍏佽鍙栬揣 + /// </summary> + public byte C_AllowTake { get; set; } + /// <summary> + /// 鍑哄簱浠诲姟鍙� + /// </summary> + public int C_OutTaskNum { get; set; } + /// <summary> + /// 鍑哄簱鐢宠鍥炲簲 + /// </summary> + public byte C_OutResponse { get; set; } + /// <summary> + /// 鍑哄簱鍙栨枡瀹屾垚 + /// </summary> + public byte C_TakeFinish { get; set; } + /// <summary> + /// 鍏ュ簱浠诲姟鍙� + /// </summary> + public int C_InTaskNum { get; set; } + } } diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/CoveryorDBName.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/CoveryorDBName.cs" new file mode 100644 index 0000000..81bbc9a --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/CoveryorDBName.cs" @@ -0,0 +1,60 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WIDESEAWCS_Tasks.DBNames +{ + /// <summary> + /// 鎺ラ┏鍙颁俊鍙� + /// </summary> + public enum CoveryorDB + { + /// <summary> + /// 鏈夋棤璐х姸鎬� + /// </summary> + C_GoodsStatus, + /// <summary> + /// 鏁呴殰鐘舵�� + /// </summary> + C_Error, + /// <summary> + /// 鍏ュ簱鐢宠鏀捐揣 + /// </summary> + C_RequestPut, + /// <summary> + /// 鍏ュ簱鏀捐揣瀹屾垚 + /// </summary> + C_PutFinish, + /// <summary> + /// 鍏ュ簱鍏佽鏀捐揣 + /// </summary> + C_AllowFinish, + /// <summary> + /// 鍑哄簱鐢宠鍙栬揣 + /// </summary> + C_RequestTake, + /// <summary> + /// 鍑哄簱鍏佽鍙栬揣 + /// </summary> + C_AllowTake, + /// <summary> + /// 鍑哄簱浠诲姟鍙� + /// </summary> + C_OutTaskNum, + /// <summary> + /// 鍑哄簱鐢宠鍥炲簲 + /// </summary> + C_OutResponse, + /// <summary> + /// 鍑哄簱鍙栨枡瀹屾垚 + /// </summary> + C_TakeFinish, + /// <summary> + /// 鍏ュ簱浠诲姟鍙� + /// </summary> + C_InTaskNum, + } + +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/R_MDDBName.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/R_MDDBName.cs" new file mode 100644 index 0000000..c0546ee --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/R_MDDBName.cs" @@ -0,0 +1,60 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WIDESEAWCS_Tasks.DBNames +{ + public enum R_MDDB + { + /// <summary> + /// 1鍏佽鐮佸灈 + /// </summary> + R_MDAllow, + /// <summary> + /// 鐮佸灈1鐘舵��<br/> + /// 1鐮佸灈涓�<br/> + /// 2鐮佸灈瀹屾垚<br/> + /// 4鐮佸灈娓呮墭<br/> + /// </summary> + R_MDStatus1, + /// <summary> + /// 鐮佸灈2鐘舵��<br/> + /// 1鐮佸灈涓�<br/> + /// 2鐮佸灈瀹屾垚<br/> + /// 4鐮佸灈娓呮墭<br/> + /// </summary> + R_MDStatus2, + /// <summary> + /// 鐮佸灈3鐘舵��<br/> + /// 1鐮佸灈涓�<br/> + /// 2鐮佸灈瀹屾垚<br/> + /// 4鐮佸灈娓呮墭<br/> + /// </summary> + R_MDStatus3, + /// <summary> + /// 鐮佸灈4鐘舵��<br/> + /// 1鐮佸灈涓�<br/> + /// 2鐮佸灈瀹屾垚<br/> + /// 4鐮佸灈娓呮墭<br/> + /// </summary> + R_MDStatus4, + /// <summary> + /// 鐮佸灈1鏁伴噺 + /// </summary> + R_MDQtys1, + /// <summary> + /// 鐮佸灈2鏁伴噺 + /// </summary> + R_MDQtys2, + /// <summary> + /// 鐮佸灈3鏁伴噺 + /// </summary> + R_MDQtys3, + /// <summary> + /// 鐮佸灈4鏁伴噺 + /// </summary> + R_MDQtys4 + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/RetractDBName.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/RetractDBName.cs" new file mode 100644 index 0000000..6851a63 --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/RetractDBName.cs" @@ -0,0 +1,59 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WIDESEAWCS_Tasks.DBNames +{ + /// <summary> + /// 浼哥缉璐у弶淇″彿 + /// </summary> + public enum RetractDB + { + /// <summary> + /// 鏈夋棤璐х姸鎬� + /// </summary> + Ret_GoodsStatus, + /// <summary> + /// 鏁呴殰鐘舵�� + /// </summary> + Ret_Error, + /// <summary> + /// 涓婃枡鐢宠鏀捐揣 + /// </summary> + Ret_RequestPut, + /// <summary> + /// 涓婃枡鏀捐揣瀹屾垚 + /// </summary> + Ret_PutFinish, + /// <summary> + /// 涓婃枡鐩殑绔欏彴 + /// </summary> + Ret_TargetAddress, + /// <summary> + /// 涓婃枡鍏佽鏀捐揣 + /// </summary> + Ret_AllowFinish, + /// <summary> + /// 涓嬫枡鐢宠鍙栬揣 + /// </summary> + Ret_RequestTake, + /// <summary> + /// 涓嬫枡鍏佽鍙栬揣 + /// </summary> + Ret_AllowTake, + /// <summary> + /// 涓嬫枡鏉ユ簮绔欏彴 + /// </summary> + Ret_SourceAddress, + /// <summary> + /// 涓嬫枡鐢宠鍥炲簲 + /// </summary> + Ret_OutResponse, + /// <summary> + /// 涓嬫枡鍙栨枡瀹屾垚 + /// </summary> + Ret_TakeFinish + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/W_MDDBName.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/W_MDDBName.cs" new file mode 100644 index 0000000..a7fc602 --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/W_MDDBName.cs" @@ -0,0 +1,52 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WIDESEAWCS_Tasks.DBNames +{ + public enum W_MDDB + { + /// <summary> + /// 浠诲姟涓嬪彂鏍囪瘑 + /// </summary> + W_MDReceiveDone, + /// <summary> + /// 浠诲姟宸ヤ綅1 + /// </summary> + W_MDSend1, + /// <summary> + /// 浠诲姟宸ヤ綅2 + /// </summary> + W_MDSend2, + /// <summary> + /// 浠诲姟宸ヤ綅3 + /// </summary> + W_MDSend3, + /// <summary> + /// 浠诲姟宸ヤ綅4 + /// </summary> + W_MDSend4, + /// <summary> + /// 浠诲姟宸ヤ綅鍙� + /// </summary> + W_MDSendID, + /// <summary> + /// 浠诲姟宸ヤ綅X + /// </summary> + W_MDX, + /// <summary> + /// 浠诲姟宸ヤ綅Y + /// </summary> + W_MDY, + /// <summary> + /// 浠诲姟宸ヤ綅Z + /// </summary> + W_MDZ, + /// <summary> + /// 浠诲姟宸ヤ綅A + /// </summary> + W_MDA + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\344\274\270\347\274\251\350\264\247\345\217\211/RetractYSJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\344\274\270\347\274\251\350\264\247\345\217\211/RetractYSJob.cs" new file mode 100644 index 0000000..7b1a9f8 --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\344\274\270\347\274\251\350\264\247\345\217\211/RetractYSJob.cs" @@ -0,0 +1,114 @@ +锘縰sing Microsoft.AspNetCore.Components.Routing; +using Newtonsoft.Json; +using Quartz; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection.Metadata; +using System.Text; +using System.Threading.Tasks; +using WIDESEAWCS_Common; +using WIDESEAWCS_Common.Helper; +using WIDESEAWCS_Common.TaskEnum; +using WIDESEAWCS_Communicator; +using WIDESEAWCS_Core; +using WIDESEAWCS_Core.Helper; +using WIDESEAWCS_IBasicInfoRepository; +using WIDESEAWCS_ITaskInfoRepository; +using WIDESEAWCS_ITaskInfoService; +using WIDESEAWCS_Model.Models; +using WIDESEAWCS_QuartzJob; +using WIDESEAWCS_QuartzJob.ConveyorLine.Enum; +using WIDESEAWCS_QuartzJob.DTO; +using WIDESEAWCS_QuartzJob.Models; +using WIDESEAWCS_QuartzJob.Repository; +using WIDESEAWCS_QuartzJob.Service; +using WIDESEAWCS_Tasks.ConveyorLineJob; +using WIDESEAWCS_Tasks.DBNames; +using ICacheService = WIDESEAWCS_Core.Caches.ICacheService; + +namespace WIDESEAWCS_Tasks +{ + [DisallowConcurrentExecution] + public class RetractYSJob : JobBase, IJob + { + private readonly ICacheService _cacheService; + private readonly ITaskService _taskService; + private readonly ITaskExecuteDetailService _taskExecuteDetailService; + private readonly ITaskRepository _taskRepository; + private readonly IStationMangerRepository _stationMangerRepository; + private readonly IRouterRepository _routerRepository; + private readonly IRouterService _routerService; + private readonly IRouterExtension _routerExtension; + private readonly List<Dt_WarehouseDevice> warehouseDevices; + + public RetractYSJob(ICacheService cacheService, ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IRouterService routerService, IRouterExtension routerExtension) + { + _cacheService = cacheService; + _taskService = taskService; + _taskExecuteDetailService = taskExecuteDetailService; + _taskRepository = taskRepository; + _stationMangerRepository = stationMangerRepository; + _routerRepository = routerRepository; + _routerService = routerService; + _routerExtension = routerExtension; + + string? warehouseDevicesStr = _cacheService.Get<string>(nameof(Dt_WarehouseDevice)); + if (!string.IsNullOrEmpty(warehouseDevicesStr)) + { + warehouseDevices = JsonConvert.DeserializeObject<List<Dt_WarehouseDevice>>(warehouseDevicesStr) ?? new List<Dt_WarehouseDevice>(); + } + else + { + warehouseDevices = new List<Dt_WarehouseDevice>(); + } + } + + public Task Execute(IJobExecutionContext context) + { + bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value); + if (flag && value != null) + { + OtherDevice device = (OtherDevice)value; + List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode); + foreach (var item in stationMangers) + { + //鑾峰彇鍗忚 + DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationDeviceCode && x.DeviceProParamType == nameof(RetractDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); + if (deviceProRead != null) + { + bool RequestTake = device.GetValue<RetractDB, bool>(RetractDB.Ret_RequestTake, item.StationDeviceCode); + short SourceAddress = device.GetValue<RetractDB, short>(RetractDB.Ret_SourceAddress, item.StationDeviceCode); + if (RequestTake && SourceAddress > 0) //涓�妤煎嵃鍒蜂笅鏂欑敵璇� + { + //鑾峰彇褰撳墠浠诲姟 + Dt_Task task = _taskRepository.QueryFirst(x => x.CurrentAddress == SourceAddress.ToString() && _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.New.ObjToInt() && x.DeviceCode== device.DeviceCode); + if (task != null) + { + //鍒嗛厤宸烽亾 瀛樺叆鎵樼洏鏁版嵁 + List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == task.TaskType && task.CurrentAddress == x.StartPosi && x.ChildPosi==device.DeviceCode); + Dt_Router router = routers.FirstOrDefault(); + if (router == null) + { + WriteError(item.StationName, $"浠诲姟鍙�:{task.TaskNum}鏈壘鍒拌矾鐢遍厤缃俊鎭�"); + return Task.CompletedTask; + } + device.SetValue(RetractDB.Ret_OutResponse, true, item.StationDeviceCode); + //鏇存柊浠诲姟淇℃伅 + task.DeviceCode = item.StackerCraneCode; + _taskService.UpdateTask(task, TaskStatusEnum.AGV_Execute); + WriteInfo(item.StationName, $"浠诲姟鍙穥task.TaskNum}浼哥缉璐у弶涓嬫枡"); + } + } + + } + else + { + WriteError(item.StationName, $"鏈壘鍒拌澶囧瓙缂栧彿{item.StationCode}鐨勫崗璁俊鎭�"); + } + } + } + return Task.CompletedTask; + } + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/ConveyorLineJob_YL1ndFloor.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/ConveyorLineJob_YL1ndFloor.cs" index 2267256..e2fc1d9 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/ConveyorLineJob_YL1ndFloor.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/ConveyorLineJob_YL1ndFloor.cs" @@ -82,7 +82,7 @@ device.SetValue(WR_CLineYLDB.WR_Reresult, 86, item.StationCode); WriteInfo(item.StationCode, $"璇锋眰鍏ュ簱鏉$爜:{conveyorLineInfoRead.WR_TMID}"); } - else if (conveyorLineInfoRead != null && item.StationType == StationTypeEnum.StationType_InboundAndOutbound.ObjToInt() && conveyorLineInfoRead.WR_ToHode <= 0 && conveyorLineInfoRead.WR_Request == 86 && !string.IsNullOrEmpty(conveyorLineInfoRead.WR_TMID)) //涓�妤煎垎閰嶇珯鍙板叆搴撳垎閰嶇洰鏍囩偣 + else if (conveyorLineInfoRead != null && item.StationType == StationTypeEnum.StationType_InboundAndOutbound.ObjToInt() && conveyorLineInfoRead.WR_ToHode <= 0 && conveyorLineInfoRead.WR_Request == 86 && conveyorLineInfoRead.WR_Task <= 0 && !string.IsNullOrEmpty(conveyorLineInfoRead.WR_TMID)) //涓�妤煎垎閰嶇珯鍙板叆搴撳垎閰嶇洰鏍囩偣 { Dt_Task task = _taskRepository.QueryFirst(x => x.PalletCode == conveyorLineInfoRead.WR_TMID && x.CurrentAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.New.ObjToInt() && x.DeviceCode == device.DeviceCode); if (task == null) @@ -99,7 +99,45 @@ device.SetValue(WR_CLineYLDB.WR_ToHode, task.NextAddress, item.StationCode); device.SetValue(WR_CLineYLDB.WR_Reresult, 86, item.StationCode); _taskService.UpdateTask(task, TaskStatusEnum.Line_Executing); - WriteInfo(item.StationCode, conveyorLineInfoRead.Serialize()); + WriteInfo(item.StationCode, $"{conveyorLineInfoRead.Serialize()}"); + } + } + else if (conveyorLineInfoRead != null && item.StationType == StationTypeEnum.StationType_InboundAndOutbound.ObjToInt() && conveyorLineInfoRead.WR_ToHode <= 0 && conveyorLineInfoRead.WR_Request == 86 && conveyorLineInfoRead.WR_Task > 0) //涓�妤煎垎閰嶇珯鍙板叆搴撳垎閰嶇洰鏍囩偣 + { + Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == conveyorLineInfoRead.WR_Task && x.CurrentAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.AGV_Finish.ObjToInt() && x.DeviceCode == device.DeviceCode); + //鍙戦�佷换鍔� + if (task != null) + { + if (string.IsNullOrEmpty(task.Roadway) && string.IsNullOrEmpty(task.NextAddress)) + { + WebResponseContent content = _taskService.AssignYLRoadwayNo(task.PalletCode); + if (!content.Status) + { + WriteError(item.StationCode, $"璇锋眰鍏ュ簱澶辫触锛歿content.Message}"); + } + string roadWay = content.Data.ToString(); + //鑾峰彇璺敱閰嶇疆 + List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == task.TaskType && task.CurrentAddress == x.StartPosi && x.ChildPosiDeviceCode== roadWay); + Dt_Router router = routers.FirstOrDefault(); + if (router == null) + { + WriteError(item.StationName, $"浠诲姟鍙�:{task.TaskNum}鏈壘鍒拌矾鐢遍厤缃俊鎭�"); + return Task.CompletedTask; + } + task.Roadway = roadWay; + task.NextAddress = router.NextPosi; + _taskService.UpdateTask(task,TaskStatusEnum.AGV_Finish); + } + else + { + device.SetValue(WR_CLineYLDB.WR_Task, task.TaskNum, item.StationCode); + device.SetValue(WR_CLineYLDB.WR_ToHode, task.NextAddress, item.StationCode); + device.SetValue(WR_CLineYLDB.WR_Width, task.TaskLength, item.StationCode); + device.SetValue(WR_CLineYLDB.WR_TMID, task.PalletCode, item.StationCode); + device.SetValue(WR_CLineYLDB.WR_Reresult, 86, item.StationCode); + _taskService.UpdateTask(task, TaskStatusEnum.Line_Executing); + WriteInfo(item.StationCode, $"璇锋眰鍏ュ簱鎴愬姛:{conveyorLineInfoRead.Serialize()}"); + } } } else if (conveyorLineInfoRead != null && item.StationType == StationTypeEnum.StationType_OnlyInbound.ObjToInt() && conveyorLineInfoRead.WR_ToHode > 0 && conveyorLineInfoRead.WR_Request == 86 && !string.IsNullOrEmpty(conveyorLineInfoRead.WR_TMID) && conveyorLineInfoRead.WR_Task>0) //鍏ュ簱绔欏彴鐢宠 @@ -137,7 +175,14 @@ device.SetValue(WR_CLineYLDB.WR_TMID, task.PalletCode, item.StationCode); device.SetValue(WR_CLineYLDB.WR_ToHode, task.NextAddress, item.StationCode); device.SetValue(WR_CLineYLDB.WR_Reresult, 86, item.StationCode); + if (task.TaskType==TaskTypeEnum.OutPick.ObjToInt()) + { + task.Roadway = task.TargetAddress; + task.TargetAddress = ""; + task.TaskType=TaskTypeEnum.InPick.ObjToInt(); + } _taskService.UpdateTask(task,TaskStatusEnum.Line_Executing); + WriteInfo(item.StationCode, $"浠诲姟鍙�:{task.TaskNum}鍑哄簱鑷硔task.NextAddress}"); } } else if (conveyorLineInfoRead != null && item.StationType == StationTypeEnum.StationType_InboundAndOutbound.ObjToInt() && conveyorLineInfoRead.WR_Task > 0 && conveyorLineInfoRead.WR_Request == 98) //涓�妤艰�佸巶鍑哄簱鍙e畬鎴� diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/StackerCraneJob_YLSC2.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/StackerCraneJob_YLSC2.cs" index 4c1a6ca..04b620f 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/StackerCraneJob_YLSC2.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/StackerCraneJob_YLSC2.cs" @@ -60,22 +60,26 @@ commonStackerCrane.CheckStackerCraneTaskCompleted();//闃叉浠诲姟瀹屾垚浜嬩欢鐩戞祴瓒呮椂锛屽啀鎵嬪姩瑙﹀彂涓�娆� if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal && commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby) { - Dt_Task? task = GetTask(commonStackerCrane); - if (task != null) + short stackerError = commonStackerCrane.Communicator.Read<short>("DB1000.54.0"); + if (stackerError==0) { - StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task); - if (stackerCraneTaskCommand != null) + Dt_Task? task = GetTask(commonStackerCrane); + if (task != null) { - bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand); - if (sendFlag) + StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task); + if (stackerCraneTaskCommand != null) { - commonStackerCrane.LastTaskType = task.TaskType; - task.Dispatchertime = DateTime.Now; - task.ExceptionMessage = ""; - _taskService.UpdateTask(task, TaskStatusEnum.SC_Executing); - commonStackerCrane.Communicator.Write("DB1000.20.0", true); - //寤舵椂1s - Thread.Sleep(1000); + bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand); + if (sendFlag) + { + commonStackerCrane.LastTaskType = task.TaskType; + task.Dispatchertime = DateTime.Now; + task.ExceptionMessage = ""; + _taskService.UpdateTask(task, TaskStatusEnum.SC_Executing); + commonStackerCrane.Communicator.Write("DB1000.20.0", true); + //寤舵椂1s + Thread.Sleep(1000); + } } } } @@ -112,7 +116,7 @@ { try { - Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == taskNum); + Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == taskNum && x.TaskState == TaskStatusEnum.SC_Executing.ObjToInt()); if (task != null) { if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) @@ -132,7 +136,7 @@ return WebResponseContent.Instance.Error($"鏈壘鍒拌矾鐢变俊鎭�,{task.NextAddress}"); } int oldStatus = task.TaskState; - //todo 鍫嗗灈鏈哄畬鎴愬畬鎴� + // 鍫嗗灈鏈哄畬鎴� _taskService.UpdateTask(task, TaskStatusEnum.Line_Execute, deviceCode: stationManger.StationDeviceCode, currentAddress: stationManger.StationCode, nextAddress: router.NextPosi); _taskExecuteDetailService.AddTaskExecuteDetail(taskNum, $"绯荤粺鑷姩娴佺▼,浠诲姟鐘舵�佷粠銆恵oldStatus}銆戣浆鍒般�恵task.TaskState}銆�"); WriteInfo(deviceCode, $"鍫嗗灈鏈哄嚭搴撲换鍔″畬鎴�,浠诲姟鍙�:{taskNum}"); @@ -172,7 +176,7 @@ /// <returns></returns> private Dt_Task? GetTask(CommonStackerCrane commonStackerCrane) { - Dt_Task task; + Dt_Task? task; if (commonStackerCrane.LastTaskType == null) { task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode); @@ -181,6 +185,7 @@ { if (commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) { + //涓婁竴涓负鍑哄簱鍒欐煡鏄惁瀛樺湪鍏ュ簱浠诲姟 浜ゆ浛鎵ц task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode); if (task == null) { @@ -189,6 +194,7 @@ } else { + //涓婁竴涓负鍏ュ簱鍒欐煡鏄惁瀛樺湪鍑哄簱浠诲姟 浜ゆ浛鎵ц task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode); if (task == null) { @@ -199,6 +205,7 @@ if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) { + //鍒ゆ柇鍑哄簱绔欏彴鍗犵敤 if (OutTaskStationIsOccupied(task) == null) { bool flag = false; @@ -218,7 +225,11 @@ } } } - task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode); + if (task == null) + { + task = _taskService.QuertStackerCraneTask(commonStackerCrane.DeviceCode, TaskTypeGroup.RelocationGroup); + } + return task; } @@ -298,7 +309,7 @@ return null; } } - else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) + else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)//鍒ゆ柇鏄惁鏄嚭搴撲换鍔� { string[] targetCodes = task.NextAddress.Split("-"); if (targetCodes.Length == 3) @@ -327,7 +338,7 @@ return null; } } - else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup) + else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)//鍒ゆ柇鏄惁鏄Щ搴撲换鍔� { string[] targetCodes = task.NextAddress.Split("-"); if (targetCodes.Length == 5) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/AGV_CPExtend.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/AGV_CPExtend.cs" index 06e8917..0af81dc 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/AGV_CPExtend.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/AGV_CPExtend.cs" @@ -22,7 +22,7 @@ { try { - var newTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => (x.TaskState == TaskStatusEnum.AGV_Execute.ObjToInt()|| x.TaskState == TaskStatusEnum.New.ObjToInt()) && x.DeviceCode=="AGV" && x.TaskType!=999).ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList(); + var newTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => (x.TaskState == TaskStatusEnum.AGV_Execute.ObjToInt()|| x.TaskState == TaskStatusEnum.New.ObjToInt()) && x.DeviceCode=="AGV").ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList(); if (newTasks.Count>0) { @@ -48,6 +48,7 @@ Code= "GoodPoint", Value=stationMangerStart.AGVStationCode }; + //鍒ゆ柇鏄惁鏈夊墠缃偣 if (!string.IsNullOrEmpty(stationMangerStart.AGVFrontCode)) { PointDetail pointDetail2 = new PointDetail() @@ -62,7 +63,8 @@ Code = "PointB", Value = stationMangerEnd.AGVStationCode }; - if (!string.IsNullOrEmpty(stationMangerStart.AGVFrontCode)) + //鍒ゆ柇鏄惁鏈夊墠缃偣 + if (!string.IsNullOrEmpty(stationMangerEnd.AGVFrontCode)) { PointDetail pointDetail4 = new PointDetail() { @@ -90,17 +92,61 @@ { throw new Exception("鏈壘鍒癆GV绔欑偣"); } - if (!stationMangerStart.StationCode.Contains("PNT") && stationMangerEnd.StationCode.Contains("PNT")) + //鍙栨斁浠诲姟妯$増 + if (stationMangerStart.StationCode.Contains("PNT") && !stationMangerEnd.StationCode.Contains("PNT"))//璇锋眰鏀� + { + agvTaskSend.TaskCode = "DUIGAO1"; + if (stationMangerStart.StationType == 998 || stationMangerEnd.StationType == 998)//娼滀紡椤跺崌杞� + { + agvTaskSend.TaskCode = "DUOLUN1"; + } + } + else if (!stationMangerStart.StationCode.Contains("PNT") && stationMangerEnd.StationCode.Contains("PNT"))//璇锋眰鍙� { agvTaskSend.TaskCode = "DUIGAO2"; + if (stationMangerStart.StationType==998 || stationMangerEnd.StationType == 998)//娼滀紡椤跺崌杞� + { + agvTaskSend.TaskCode = "DUOLUN2"; + } } + else if (!stationMangerStart.StationCode.Contains("PNT") && !stationMangerEnd.StationCode.Contains("PNT"))//璇锋眰鍙栨斁 + { + agvTaskSend.TaskCode = "DUIGAO3"; + if (stationMangerStart.StationType == 998 || stationMangerEnd.StationType == 998)//娼滀紡椤跺崌杞� + { + agvTaskSend.TaskCode = "DUOLUN3"; + } + } + else if (stationMangerStart.StationCode.Contains("PNT") && stationMangerEnd.StationCode.Contains("PNT"))//鏃犺姹� + { + agvTaskSend.TaskCode = "DUIGAO4"; + if (stationMangerStart.StationType == 998 || stationMangerEnd.StationType == 998)//娼滀紡椤跺崌杞� + { + agvTaskSend.TaskCode = "DUOLUN4"; + } + } + if (stationMangerStart.StationType == 998 || stationMangerEnd.StationType == 998)//娼滀紡椤跺崌杞� + { + agvTaskSend.Variables.FirstOrDefault(x => x.Code == "FHMH").Value = "0"; + agvTaskSend.Variables.FirstOrDefault(x => x.Code == "GoodPoint").Value = ""; + //涓嬪彂浠诲姟AGV浠诲姟闆嗙兢 + agvTaskSend.AgvGroupCode = "QianF"; + PointDetail pointDetail2 = new PointDetail() + { + Code = "CostPoint", + Value = stationMangerStart.AGVStationCode + }; + agvTaskSend.Variables.Add(pointDetail2); + } + //寤舵椂 + Thread.Sleep(500); //鍙戦�丄GV浠诲姟 WebResponseContent content = _taskService.AgvSendTask(agvTaskSend, APIEnum.AgvSendTask); if (!content.Status) throw new Exception(content.Message); task.Dispatchertime = DateTime.Now; _taskService.UpdateTask(task, TaskStatusEnum.AGV_Executing); - Thread.Sleep(500); + Thread.Sleep(200); } catch (Exception ex) { @@ -108,6 +154,7 @@ task.ExceptionMessage = ex.Message; } } + //鏇存柊浠诲姟 if (newTasks.Count > 0) { _taskService.UpdateData(newTasks); diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPA.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPA.cs" index 1fb0fa4..2584f47 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPA.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPA.cs" @@ -67,9 +67,8 @@ { OtherDevice device = (OtherDevice)value; List<string> deviceStations = device.DeviceProDTOs.Select(x => x.DeviceChildCode).ToList(); - //鑾峰彇鏈夊崗璁殑杈撻�佺嚎-z + //鑾峰彇鏈夊崗璁殑杈撻�佺嚎 List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode); - //璁╂瘡涓緭閫佺嚎鍚姩-z foreach (var item in stationMangers.Where(x => deviceStations.Contains(x.StationCode))) { DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(R_ConveyorLineCPDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); @@ -83,22 +82,17 @@ Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == conveyorLineInfoRead.TaskNo && x.NextAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.Line_Executing.ObjToInt() && x.DeviceCode == device.DeviceCode); if (task != null) { - string local = ""; //鍒嗛厤璐т綅 - if (task.HeightType==1) + string? local = _taskService.RequestAssignLocation(task.TaskNum, task.Roadway); + if (!string.IsNullOrEmpty(local)) { - local = "SC02_CP-001-064-001-01"; + task.CurrentAddress = item.StackerCraneStationCode; + task.TargetAddress = local; + task.NextAddress = local; + task.DeviceCode = item.StackerCraneCode; + _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute); + WriteInfo(item.StationName, $"浠诲姟鍙�:{task.TaskNum}杩涜鍫嗗灈鏈哄叆搴�"); } - else if (task.HeightType == 2) - { - local = "SC02_CP-001-063-001-01"; - } - task.CurrentAddress = item.StackerCraneStationCode; - task.TargetAddress= local; - task.NextAddress = local; - task.DeviceCode = item.StackerCraneCode; - _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute); - WriteInfo(item.StationName, $"浠诲姟鍙�:{task.TaskNum}杩涜鍫嗗灈鏈哄叆搴�"); } } else if (conveyorLineInfoRead != null && conveyorLineInfoRead.Command == 4 && conveyorLineInfoRead.TaskNo <= 0 && item.StationType == StationTypeEnum.StationType_OnlyOutbound.ObjToInt()) //浜屾ゼ绾夸綋鍑哄簱绔欏彴 diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPB.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPB.cs" index 0810c02..d04c373 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPB.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPB.cs" @@ -77,36 +77,39 @@ { R_ConveyorLineCPInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_ConveyorLineCPInfo>(deviceProRead.DeviceProAddress); //浜屾ゼ鍏ュ簱鎵爜璇锋眰宸ヤ綅 - if (conveyorLineInfoRead != null && conveyorLineInfoRead.Command == 5 && conveyorLineInfoRead.TaskNo > 0 && !string.IsNullOrEmpty(conveyorLineInfoRead.PalletCode)) + if (conveyorLineInfoRead != null && conveyorLineInfoRead.Command == 5 && conveyorLineInfoRead.TaskNo > 0)//&& !string.IsNullOrEmpty(conveyorLineInfoRead.PalletCode) todo涓存椂鍒犻櫎鏉′欢闄愬埗 { //鏌ユ壘瀵瑰簲浠诲姟 Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == conveyorLineInfoRead.TaskNo && x.NextAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.Line_Executing.ObjToInt() && x.DeviceCode == device.DeviceCode); if (task != null) { //鍒嗛厤宸烽亾 瀛樺叆鎵樼洏鏁版嵁 - List<Dt_Router> routers = _routerService.QueryNextRoutes(item.StationCode, "SC02_CP", task.TaskType); - Dt_Router? router = routers.FirstOrDefault(); - if (routers == null || routers.Count == 0 || router == null) + string roadWay = _taskService.AssignCPRoadwayNo().Data.ToString(); + if (!string.IsNullOrEmpty(roadWay)) { - WriteError(item.StationName, $"鏈壘鍒板搴旇矾鐢变俊鎭�,璁惧缂栧彿:{item.StationCode},浠诲姟鍙�:{task.TaskNum}"); - continue; + List<Dt_Router> routers = _routerService.QueryNextRoutes(item.StationCode, roadWay, task.TaskType); + Dt_Router? router = routers.FirstOrDefault(); + if (routers == null || routers.Count == 0 || router == null) + { + WriteError(item.StationName, $"鏈壘鍒板搴旇矾鐢变俊鎭�,璁惧缂栧彿:{item.StationCode},浠诲姟鍙�:{task.TaskNum}"); + continue; + } + if (routers.Count > 1) + { + WriteError(item.StationName, $"璺敱淇℃伅閰嶇疆閿欒,璁惧缂栧彿:{item.StationCode},浠诲姟鍙�:{task.TaskNum}"); + continue; + } + device.SetValue(W_ConveyorLineCPDB.W_TargetAddress, router.NextPosi, item.StationCode); + device.SetValue(W_ConveyorLineCPDB.W_TaskNo, task.TaskNum, item.StationCode); + device.SetValue(W_ConveyorLineCPDB.W_Command, 1, item.StationCode); + task.CurrentAddress = item.StationCode; + task.NextAddress = router.NextPosi; + task.PalletCode = DateTime.Now.ToString("yyMMddHHmmss");//todo涓存椂 + task.Roadway = roadWay; + task.DeviceCode = router.ChildPosiDeviceCode; + _taskService.UpdateTask(task, TaskStatusEnum.Line_Executing); + WriteInfo(item.StationName, $"浠诲姟鍙穥conveyorLineInfoRead.TaskNo}涓嬩竴姝�"); } - if (routers.Count > 1) - { - WriteError(item.StationName, $"璺敱淇℃伅閰嶇疆閿欒,璁惧缂栧彿:{item.StationCode},浠诲姟鍙�:{task.TaskNum}"); - continue; - } - device.SetValue(W_ConveyorLineCPDB.W_TargetAddress, router.NextPosi, item.StationCode); - device.SetValue(W_ConveyorLineCPDB.W_TaskNo, task.TaskNum, item.StationCode); - device.SetValue(W_ConveyorLineCPDB.W_Command, 1, item.StationCode); - task.CurrentAddress = item.StationCode; - task.NextAddress = router.NextPosi; - task.PalletType = 1; - task.PalletCode = conveyorLineInfoRead.PalletCode; - task.Roadway = "SC02_CP"; - task.DeviceCode = router.ChildPosiDeviceCode; - _taskService.UpdateTask(task, TaskStatusEnum.Line_Executing); - WriteInfo(item.StationName, $"浠诲姟鍙穥conveyorLineInfoRead.TaskNo}涓嬩竴姝�"); } } } diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPC.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPC.cs" index 28f4d66..a662580 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPC.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPC.cs" @@ -82,7 +82,7 @@ if (task == null) { //鑾峰彇绔欏彴鐢熸垚浠诲姟 - WebResponseContent content = _taskService.RequestWMSTaskSimple("", item.StationCode); + WebResponseContent content = _taskService.RequestWMSTaskSimple("", item.StationCode,taskType:TaskTypeEnum.InProduct.ObjToInt()); if (content.Status) { Dt_Task taskNew = _taskRepository.QueryFirst(x => x.SourceAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && (x.TaskState == TaskStatusEnum.New.ObjToInt())); @@ -94,9 +94,18 @@ Thread.Sleep(1000); } } + if (conveyorLineInfoRead != null && conveyorLineInfoRead.StatusPV == 2 && conveyorLineInfoRead.Command == 10) + { + item.IsOccupied = 0; + } + else + { + item.IsOccupied = 1; + } } } + _stationMangerRepository.UpdateData(stationMangers); } return Task.CompletedTask; } diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPH.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPH.cs" index 742eb6b..2f9369c 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPH.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPH.cs" @@ -1,5 +1,6 @@ 锘縰sing Microsoft.AspNetCore.Components.Routing; using Newtonsoft.Json; +using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; using Quartz; using SqlSugar.Extensions; using System; @@ -80,11 +81,24 @@ //鐮佸灈鐜嚎璇锋眰浠诲姟 if (conveyorLineInfoRead != null && (conveyorLineInfoRead.R_State == 2 || conveyorLineInfoRead.R_State == 3) && conveyorLineInfoRead.R_TaskNo <= 0 && !string.IsNullOrEmpty(conveyorLineInfoRead.R_BoxCode) && conveyorLineInfoRead.R_Request==1) { - WebResponseContent content = _taskService.RequestWMSTaskSimple(conveyorLineInfoRead.R_BoxCode, item.StationCode); - //鍚慦MS璇锋眰浠诲姟 - if (true) - { + //WebResponseContent content = _taskService.RequestWMSTaskSimple(conveyorLineInfoRead.R_BoxCode, item.StationCode); + ////鍚慦MS璇锋眰浠诲姟 + //if (true) + //{ + //} + if (conveyorLineInfoRead.R_BoxCode=="1") + { + int taskNum = Convert.ToInt32(DateTime.Now.ToString("ddHHmmss")); + WebResponseContent content = _taskService.RequestWMSTaskSimple(taskNum.ToString(), item.StationCode,taskType:TaskTypeEnum.ProductMD.ObjToInt(),taskNum: taskNum, targetAddress:"2554"); + //璇锋眰浠诲姟 + if (content.Status) + { + //鍐欏叆鍑哄簱绾夸綋鍦板潃 + device.SetValue(W_CLineCPHDB.W_TaskNo, 5, item.StationCode); + device.SetValue(W_CLineCPHDB.W_TaskNo, taskNum, item.StationCode); + device.SetValue(W_ConveyorLineCPDB.W_Command, 1, item.StationCode); + } } } } @@ -94,16 +108,14 @@ //鑾峰彇鐮佸灈鍙d换鍔℃洿鏂颁换鍔$姸鎬� if (conveyorLineInfoRead != null && (conveyorLineInfoRead.R_State == 2 || conveyorLineInfoRead.R_State == 3) && conveyorLineInfoRead.R_TaskNo > 0) { - - } - } - else if (item.StationType == StationTypeEnum.StationType_InboundAndOutbound.ObjToInt() && deviceProRead != null) - { - R_CLineCPHInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_CLineCPHInfo>(deviceProRead.DeviceProAddress); - //鐮佸灈鐜嚎鎺掑嚭鍙h姹傚彇娑堜换鍔� - if (conveyorLineInfoRead != null && (conveyorLineInfoRead.R_State == 2 || conveyorLineInfoRead.R_State == 3) && conveyorLineInfoRead.R_TaskNo > 0 && conveyorLineInfoRead.R_Request == 2) - { - + Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == conveyorLineInfoRead.R_TaskNo && x.NextAddress==item.StationCode && x.TaskState == TaskStatusEnum.Line_Executing.ObjToInt()); + if (task != null) + { + task.CurrentAddress = item.StationCode; + task.NextAddress = task.TargetAddress; + task.DeviceCode = item.StackerCraneCode; + _taskService.UpdateTask(task, TaskStatusEnum.MD_Executing); + } } } else diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/RGVJob_CP.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/RGVJob_CP.cs" index 7d9a407..b9bb207 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/RGVJob_CP.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/RGVJob_CP.cs" @@ -78,66 +78,88 @@ W_RGVCPInfo rgvInfoWrite = device.Communicator.ReadCustomer<W_RGVCPInfo>(deviceProWrite.DeviceProAddress); if ((rgvInfoRead.Mode == 5 || rgvInfoRead.Mode == 4) && rgvInfoRead.State == 0 && rgvInfoRead.TaskDone==1) { + //鑾峰彇浠诲姟 鏄惁鏈塕GV鎵ц鐨勪换鍔� List<Dt_Task> tasks = _taskRepository.QueryData(x => _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState != TaskStatusEnum.RGV_Execute.ObjToInt() && x.DeviceCode == device.DeviceCode); - //鑾峰彇浠诲姟 + Dt_Task? task1 = tasks.FirstOrDefault(x => x.HeightType == 1); Dt_Task? task2 = tasks.FirstOrDefault(x => x.HeightType == 2); Dt_Task? task3 = tasks.FirstOrDefault(x => x.HeightType == 3); List<Dt_Task> tasksDown = _taskRepository.QueryData(x => _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.RGV_Execute.ObjToInt() && x.DeviceCode == device.DeviceCode).OrderBy(x=>x.CreateDate).Take(3).ToList(); - //鍒嗛厤RGV宸ヤ綅浠诲姟 - if (tasksDown.Count>=2) + if (tasksDown.Count>0) { - device.SetValue(W_RgvCPDB.TaskType, 4); - //鍗犵敤涓や釜宸ヤ綅 - if (tasksDown.Count==2) + bool ReceivedDone = false; + //鍒嗛厤RGV宸ヤ綅浠诲姟鍗犵敤涓�涓伐浣� + if (tasksDown.Count == 1) { - device.SetValue(W_RgvCPDB.WorkStation, 4); if (task1 == null) { + //涓嬪彂鎵ц宸ヤ綅 + device.SetValue(W_RgvCPDB.WorkStation, 1); device.SetValue(W_RgvCPDB.WcsTask1, tasksDown[0].TaskNum); device.SetValue(W_RgvCPDB.Qu1, tasksDown[0].CurrentAddress); device.SetValue(W_RgvCPDB.Fang1, tasksDown[0].NextAddress); tasksDown[0].HeightType = 1; _taskService.UpdateTask(tasksDown[0], TaskStatusEnum.RGV_Executing); + Thread.Sleep(100); + ReceivedDone=true; } - if (task2 == null) + } + else if (tasksDown.Count == 2)//鍗犵敤涓や釜宸ヤ綅 + { + + if (task1 == null && task2 == null) { + //涓嬪彂鎵ц宸ヤ綅 + device.SetValue(W_RgvCPDB.WorkStation, 4); + + device.SetValue(W_RgvCPDB.WcsTask1, tasksDown[0].TaskNum); + device.SetValue(W_RgvCPDB.Qu1, tasksDown[0].CurrentAddress); + device.SetValue(W_RgvCPDB.Fang1, tasksDown[0].NextAddress); + tasksDown[0].HeightType = 1; + _taskService.UpdateTask(tasksDown[0], TaskStatusEnum.RGV_Executing); + Thread.Sleep(100); device.SetValue(W_RgvCPDB.WcsTask2, tasksDown[1].TaskNum); device.SetValue(W_RgvCPDB.Qu2, tasksDown[1].CurrentAddress); device.SetValue(W_RgvCPDB.Fang2, tasksDown[1].NextAddress); tasksDown[1].HeightType = 2; _taskService.UpdateTask(tasksDown[1], TaskStatusEnum.RGV_Executing); + Thread.Sleep(100); + ReceivedDone = true; } } else //鍗犵敤涓変釜宸ヤ綅 { - device.SetValue(W_RgvCPDB.WorkStation, 7); - if ( task1 == null) + if (task1 == null && task2 == null && task3 == null) { + //涓嬪彂鎵ц宸ヤ綅 + device.SetValue(W_RgvCPDB.WorkStation, 7); + device.SetValue(W_RgvCPDB.WcsTask1, tasksDown[0].TaskNum); device.SetValue(W_RgvCPDB.Qu1, tasksDown[0].CurrentAddress); device.SetValue(W_RgvCPDB.Fang1, tasksDown[0].NextAddress); tasksDown[0].HeightType = 1; _taskService.UpdateTask(tasksDown[0], TaskStatusEnum.RGV_Executing); - } - if (task2 == null) - { + Thread.Sleep(100); device.SetValue(W_RgvCPDB.WcsTask2, tasksDown[1].TaskNum); device.SetValue(W_RgvCPDB.Qu2, tasksDown[1].CurrentAddress); device.SetValue(W_RgvCPDB.Fang2, tasksDown[1].NextAddress); tasksDown[1].HeightType = 2; _taskService.UpdateTask(tasksDown[1], TaskStatusEnum.RGV_Executing); - } - if (task3 == null) - { + Thread.Sleep(100); device.SetValue(W_RgvCPDB.WcsTask3, tasksDown[2].TaskNum); device.SetValue(W_RgvCPDB.Qu3, tasksDown[2].CurrentAddress); device.SetValue(W_RgvCPDB.Fang3, tasksDown[2].NextAddress); tasksDown[2].HeightType = 3; _taskService.UpdateTask(tasksDown[2], TaskStatusEnum.RGV_Executing); + Thread.Sleep(100); + ReceivedDone = true; } } - device.SetValue(W_RgvCPDB.TaskReceivedDone, 1); + if (ReceivedDone) + { + device.SetValue(W_RgvCPDB.TaskType, 4); + device.SetValue(W_RgvCPDB.TaskReceivedDone, 1); + } } } else if((rgvInfoRead.Mode == 5 || rgvInfoRead.Mode == 4) && rgvInfoRead.TaskDone == 3) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/StackerCraneJob_CP.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/StackerCraneJob_CP.cs" index 789ddf7..35e320b 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/StackerCraneJob_CP.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/StackerCraneJob_CP.cs" @@ -60,22 +60,26 @@ commonStackerCrane.CheckStackerCraneTaskCompleted();//闃叉浠诲姟瀹屾垚浜嬩欢鐩戞祴瓒呮椂锛屽啀鎵嬪姩瑙﹀彂涓�娆� if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal && commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby) { - Dt_Task? task = GetTask(commonStackerCrane); - if (task != null) + short stackerError = commonStackerCrane.Communicator.Read<short>("DB1000.54.0"); + if (stackerError == 0) { - StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task); - if (stackerCraneTaskCommand != null) + Dt_Task? task = GetTask(commonStackerCrane); + if (task != null) { - bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand); - if (sendFlag) + StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task); + if (stackerCraneTaskCommand != null) { - commonStackerCrane.LastTaskType = task.TaskType; - task.Dispatchertime = DateTime.Now; - task.ExceptionMessage = ""; - _taskService.UpdateTask(task, TaskStatusEnum.SC_Executing); - commonStackerCrane.Communicator.Write("DB1000.20.0", true); - //寤舵椂1s - Thread.Sleep(1000); + bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand); + if (sendFlag) + { + commonStackerCrane.LastTaskType = task.TaskType; + task.Dispatchertime = DateTime.Now; + task.ExceptionMessage = ""; + _taskService.UpdateTask(task, TaskStatusEnum.SC_Executing); + commonStackerCrane.Communicator.Write("DB1000.20.0", true); + //寤舵椂1s + Thread.Sleep(1000); + } } } } @@ -112,7 +116,7 @@ { try { - Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == taskNum); + Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == taskNum && x.TaskState==TaskStatusEnum.SC_Executing.ObjToInt()); if (task != null) { if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) @@ -131,13 +135,14 @@ WriteError(deviceCode, $"鏈壘鍒拌矾鐢变俊鎭�,{task.NextAddress}"); return WebResponseContent.Instance.Error($"鏈壘鍒拌矾鐢变俊鎭�,{task.NextAddress}"); } + //鍫嗗灈鏈哄畬鎴愬畬鎴� int oldStatus = task.TaskState; task.DeviceCode = stationManger.StationDeviceCode; task.TaskState = TaskStatusEnum.Line_Execute.ObjToInt(); task.CurrentAddress = stationManger.StationCode; task.NextAddress = router.NextPosi; _taskService.UpdateTask(task, TaskStatusEnum.Line_Execute); - //todo 鍫嗗灈鏈哄畬鎴愬畬鎴� + //_taskService.UpdateTask(task, TaskStatusEnum.Line_Execute, deviceCode: stationManger.StationDeviceCode, currentAddress: stationManger.StationCode, nextAddress: router.NextPosi, targetAddress: router.NextPosi); _taskExecuteDetailService.AddTaskExecuteDetail(taskNum, $"绯荤粺鑷姩娴佺▼,浠诲姟鐘舵�佷粠銆恵oldStatus}銆戣浆鍒般�恵task.TaskState}銆�"); WriteInfo(deviceCode, $"鍫嗗灈鏈轰换鍔″畬鎴�,浠诲姟鍙�:{taskNum}"); @@ -186,6 +191,7 @@ { if (commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) { + //涓婁竴涓负鍑哄簱鍒欐煡鏄惁瀛樺湪鍏ュ簱浠诲姟 浜ゆ浛鎵ц task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode); if (task == null) { @@ -194,6 +200,7 @@ } else { + //涓婁竴涓负鍏ュ簱鍒欐煡鏄惁瀛樺湪鍑哄簱浠诲姟 浜ゆ浛鎵ц task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode); if (task == null) { @@ -204,6 +211,7 @@ if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) { + //鍒ゆ柇鍑哄簱绔欏彴鍗犵敤 if (OutTaskStationIsOccupied(task) == null) { bool flag = false; @@ -234,7 +242,7 @@ /// <returns>濡傛灉鏈鍗犵敤锛岃繑鍥炰紶鍏ョ殑浠诲姟淇℃伅锛屽惁鍒欙紝杩斿洖null</returns> private Dt_Task? OutTaskStationIsOccupied([NotNull] Dt_Task task) { - Dt_StationManger? stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == task.NextAddress && x.StackerCraneCode == task.DeviceCode); + Dt_StationManger? stationManger = _stationMangerRepository.QueryFirst(x => (x.StationCode == task.NextAddress) && x.StackerCraneCode == task.DeviceCode); if (stationManger != null) { IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode); @@ -303,7 +311,7 @@ return null; } } - else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) + else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)//鍒ゆ柇鏄惁鏄嚭搴撲换鍔� { string[] targetCodes = task.NextAddress.Split("-"); if (targetCodes.Length == 3) @@ -332,7 +340,7 @@ return null; } } - else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup) + else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)//鍒ゆ柇鏄惁鏄Щ搴撲换鍔� { string[] targetCodes = task.NextAddress.Split("-"); if (targetCodes.Length == 5) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\216\245\351\251\263\345\217\260/CoveryorJobYL.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\216\245\351\251\263\345\217\260/CoveryorJobYL.cs" new file mode 100644 index 0000000..f4e1ec9 --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\216\245\351\251\263\345\217\260/CoveryorJobYL.cs" @@ -0,0 +1,116 @@ +锘縰sing Microsoft.AspNetCore.Components.Routing; +using Newtonsoft.Json; +using Quartz; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection.Metadata; +using System.Text; +using System.Threading.Tasks; +using WIDESEAWCS_Common; +using WIDESEAWCS_Common.Helper; +using WIDESEAWCS_Common.TaskEnum; +using WIDESEAWCS_Communicator; +using WIDESEAWCS_Core; +using WIDESEAWCS_Core.Helper; +using WIDESEAWCS_IBasicInfoRepository; +using WIDESEAWCS_ITaskInfoRepository; +using WIDESEAWCS_ITaskInfoService; +using WIDESEAWCS_Model.Models; +using WIDESEAWCS_QuartzJob; +using WIDESEAWCS_QuartzJob.ConveyorLine.Enum; +using WIDESEAWCS_QuartzJob.DTO; +using WIDESEAWCS_QuartzJob.Models; +using WIDESEAWCS_QuartzJob.Repository; +using WIDESEAWCS_QuartzJob.Service; +using WIDESEAWCS_Tasks.ConveyorLineJob; +using WIDESEAWCS_Tasks.DBNames; +using ICacheService = WIDESEAWCS_Core.Caches.ICacheService; + +namespace WIDESEAWCS_Tasks +{ + [DisallowConcurrentExecution] + public class CoveryorJobYL : JobBase, IJob + { + private readonly ICacheService _cacheService; + private readonly ITaskService _taskService; + private readonly ITaskExecuteDetailService _taskExecuteDetailService; + private readonly ITaskRepository _taskRepository; + private readonly IStationMangerRepository _stationMangerRepository; + private readonly IRouterRepository _routerRepository; + private readonly IRouterService _routerService; + private readonly IRouterExtension _routerExtension; + private readonly List<Dt_WarehouseDevice> warehouseDevices; + + public CoveryorJobYL(ICacheService cacheService, ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IRouterService routerService, IRouterExtension routerExtension) + { + _cacheService = cacheService; + _taskService = taskService; + _taskExecuteDetailService = taskExecuteDetailService; + _taskRepository = taskRepository; + _stationMangerRepository = stationMangerRepository; + _routerRepository = routerRepository; + _routerService = routerService; + _routerExtension = routerExtension; + + string? warehouseDevicesStr = _cacheService.Get<string>(nameof(Dt_WarehouseDevice)); + if (!string.IsNullOrEmpty(warehouseDevicesStr)) + { + warehouseDevices = JsonConvert.DeserializeObject<List<Dt_WarehouseDevice>>(warehouseDevicesStr) ?? new List<Dt_WarehouseDevice>(); + } + else + { + warehouseDevices = new List<Dt_WarehouseDevice>(); + } + } + + public Task Execute(IJobExecutionContext context) + { + bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value); + if (flag && value != null) + { + OtherDevice device = (OtherDevice)value; + List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode); + foreach (var item in stationMangers) + { + //鑾峰彇鍗忚 + DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationDeviceCode && x.DeviceProParamType == nameof(CoveryorDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); + if (deviceProRead != null) + { + bool RequestTake = device.GetValue<CoveryorDB, bool>(CoveryorDB.C_RequestTake, item.StationDeviceCode); + int OutTaskNum = device.GetValue<CoveryorDB, int>(CoveryorDB.C_OutTaskNum, item.StationDeviceCode); + if (RequestTake && OutTaskNum>0) //涓�妤煎嚭搴撶敵璇� + { + //鑾峰彇褰撳墠浠诲姟 + Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum ==OutTaskNum && x.NextAddress == item.StationCode && _taskService.TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.Line_Executing.ObjToInt()); + if (task != null) + { + //鍒嗛厤宸烽亾 瀛樺叆鎵樼洏鏁版嵁 + List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == task.TaskType && task.NextAddress == x.StartPosi); + Dt_Router router = routers.FirstOrDefault(); + if (router == null) + { + WriteError(item.StationName, $"浠诲姟鍙�:{task.TaskNum}鏈壘鍒拌矾鐢遍厤缃俊鎭�"); + return Task.CompletedTask; + } + device.SetValue(CoveryorDB.C_OutResponse, true, item.StationDeviceCode); + //鏇存柊浠诲姟淇℃伅 + task.CurrentAddress = router.StartPosi; + task.NextAddress = task.TargetAddress; + task.DeviceCode = router.NextPosi; + _taskService.UpdateTask(task, TaskStatusEnum.AGV_Execute); + WriteInfo(item.StationName, $"浠诲姟鍙穥OutTaskNum}鎺ラ┏鍙板嚭搴�"); + } + } + + } + else + { + WriteError(item.StationName, $"鏈壘鍒拌澶囧瓙缂栧彿{item.StationCode}鐨勫崗璁俊鎭�"); + } + } + } + return Task.CompletedTask; + } + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\347\240\201\345\236\233/MDJob_CP.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\347\240\201\345\236\233/MDJob_CP.cs" new file mode 100644 index 0000000..7551321 --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\347\240\201\345\236\233/MDJob_CP.cs" @@ -0,0 +1,165 @@ +锘縰sing Microsoft.AspNetCore.Components.Routing; +using Newtonsoft.Json; +using Quartz; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection.Metadata; +using System.Text; +using System.Threading.Tasks; +using WIDESEAWCS_Common; +using WIDESEAWCS_Common.Helper; +using WIDESEAWCS_Common.TaskEnum; +using WIDESEAWCS_Communicator; +using WIDESEAWCS_Core; +using WIDESEAWCS_Core.Helper; +using WIDESEAWCS_IBasicInfoRepository; +using WIDESEAWCS_ITaskInfoRepository; +using WIDESEAWCS_ITaskInfoService; +using WIDESEAWCS_Model.Models; +using WIDESEAWCS_QuartzJob; +using WIDESEAWCS_QuartzJob.ConveyorLine.Enum; +using WIDESEAWCS_QuartzJob.DTO; +using WIDESEAWCS_QuartzJob.Models; +using WIDESEAWCS_QuartzJob.Repository; +using WIDESEAWCS_QuartzJob.Service; +using WIDESEAWCS_Tasks.ConveyorLineJob; +using WIDESEAWCS_Tasks.DBNames; +using ICacheService = WIDESEAWCS_Core.Caches.ICacheService; + +namespace WIDESEAWCS_Tasks +{ + [DisallowConcurrentExecution] + public class MDJob_CP : JobBase, IJob + { + private readonly ICacheService _cacheService; + private readonly ITaskService _taskService; + private readonly ITaskExecuteDetailService _taskExecuteDetailService; + private readonly ITaskRepository _taskRepository; + private readonly IStationMangerRepository _stationMangerRepository; + private readonly IRouterRepository _routerRepository; + private readonly IRouterService _routerService; + private readonly IRouterExtension _routerExtension; + private readonly List<Dt_WarehouseDevice> warehouseDevices; + + public MDJob_CP(ICacheService cacheService, ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IRouterService routerService, IRouterExtension routerExtension) + { + _cacheService = cacheService; + _taskService = taskService; + _taskExecuteDetailService = taskExecuteDetailService; + _taskRepository = taskRepository; + _stationMangerRepository = stationMangerRepository; + _routerRepository = routerRepository; + _routerService = routerService; + _routerExtension = routerExtension; + + string? warehouseDevicesStr = _cacheService.Get<string>(nameof(Dt_WarehouseDevice)); + if (!string.IsNullOrEmpty(warehouseDevicesStr)) + { + warehouseDevices = JsonConvert.DeserializeObject<List<Dt_WarehouseDevice>>(warehouseDevicesStr) ?? new List<Dt_WarehouseDevice>(); + } + else + { + warehouseDevices = new List<Dt_WarehouseDevice>(); + } + } + + public Task Execute(IJobExecutionContext context) + { + bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value); + if (flag && value != null) + { + OtherDevice device = (OtherDevice)value; + List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StackerCraneCode == device.DeviceCode); + foreach (var item in stationMangers) + { + //鑾峰彇鍗忚 + DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StackerCraneCode && x.DeviceProParamType == nameof(R_MDDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); + DeviceProDTO? deviceProWrite = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StackerCraneCode && x.DeviceProParamType == nameof(W_MDDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); + if (deviceProRead != null && deviceProWrite != null && item.IsOccupied==0) + { + short Allow = device.GetValue<R_MDDB, short>(R_MDDB.R_MDAllow, item.StackerCraneCode); + short R_MDStatus1 = device.GetValue<R_MDDB, short>(R_MDDB.R_MDStatus1, item.StackerCraneCode); + short R_MDStatus2 = device.GetValue<R_MDDB, short>(R_MDDB.R_MDStatus2, item.StackerCraneCode); + short R_MDStatus3 = device.GetValue<R_MDDB, short>(R_MDDB.R_MDStatus3, item.StackerCraneCode); + short R_MDStatus4 = device.GetValue<R_MDDB, short>(R_MDDB.R_MDStatus4, item.StackerCraneCode); + short R_MDQtys1 = device.GetValue<R_MDDB, short>(R_MDDB.R_MDQtys1, item.StackerCraneCode); + short R_MDQtys2 = device.GetValue<R_MDDB, short>(R_MDDB.R_MDQtys2, item.StackerCraneCode); + short R_MDQtys3 = device.GetValue<R_MDDB, short>(R_MDDB.R_MDQtys3, item.StackerCraneCode); + short R_MDQtys4 = device.GetValue<R_MDDB, short>(R_MDDB.R_MDQtys4, item.StackerCraneCode); + if (R_MDStatus1 == 1 || R_MDStatus2 == 1 || R_MDStatus3 == 1 || R_MDStatus4 == 1) + { + Thread.Sleep(500); + device.Communicator.Write<short>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDReceiveDone.ToString()).DeviceProDataBlock, 0); + } + //鑾峰彇褰撳墠浠诲姟 + Dt_Task task = _taskRepository.QueryData(x => x.NextAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.MD_Executing.ObjToInt() && x.DeviceCode == device.DeviceCode).OrderBy(x=>x.TaskNum).First(); + if (task!=null) //鐮佸灈鐢宠 + { + if ((Allow==3 || Allow == 7)&& item.StackerCraneStationCode == "1") + { + if ( R_MDQtys1 / 6 ==1) + { + device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDZ.ToString()).DeviceProDataBlock, 400); + } + else if (R_MDQtys1 / 6 == 2) + { + device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDZ.ToString()).DeviceProDataBlock, 800); + } + else + { + device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDZ.ToString()).DeviceProDataBlock, 0); + } + device.Communicator.Write<short>(device.DeviceProDTOs.FirstOrDefault(x=>x.DeviceProParamName== W_MDDB.W_MDSend1.ToString()).DeviceProDataBlock,1); + device.Communicator.Write<short>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDSendID.ToString()).DeviceProDataBlock, 1); + if (R_MDQtys1 % 6==0) + { + device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDX.ToString()).DeviceProDataBlock, 1675); + device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDY.ToString()).DeviceProDataBlock, 1137); + } + else if (R_MDQtys1 % 6 == 1) + { + device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDX.ToString()).DeviceProDataBlock, 1675); + device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDY.ToString()).DeviceProDataBlock, 1462); + } + else if (R_MDQtys1 % 6 == 2) + { + device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDX.ToString()).DeviceProDataBlock, 1675); + device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDY.ToString()).DeviceProDataBlock, 1787); + } + else if (R_MDQtys1 % 6 == 3) + { + device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDX.ToString()).DeviceProDataBlock, 1250); + device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDY.ToString()).DeviceProDataBlock, 1137); + } + else if (R_MDQtys1 % 6 == 4) + { + device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDX.ToString()).DeviceProDataBlock, 1250); + device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDY.ToString()).DeviceProDataBlock, 1462); + } + else if (R_MDQtys1 % 6 == 5) + { + device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDX.ToString()).DeviceProDataBlock, 1250); + device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDY.ToString()).DeviceProDataBlock, 1787); + } + device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDA.ToString()).DeviceProDataBlock, 1); + device.Communicator.Write<short>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDReceiveDone.ToString()).DeviceProDataBlock, 3); + //鏇存柊浠诲姟淇℃伅 + //_taskService.TaskCompleted(task.TaskNum); + task.TaskState = TaskStatusEnum.Finish.ObjToInt(); + _taskRepository.UpdateData(task); + Thread.Sleep(1500); + WriteInfo(item.StationName, $"浠诲姟鍙穥task.TaskNum}鐮佸灈"); + } + } + } + else + { + WriteError(item.StationName, $"鏈壘鍒拌澶囧瓙缂栧彿{item.StationCode}鐨勫崗璁俊鎭�"); + } + } + } + return Task.CompletedTask; + } + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs" index b4f28e1..c3e5351 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs" @@ -25,7 +25,9 @@ { public partial class LocationInfoService { - + /// <summary> + /// 鍒嗛厤璐т綅 + /// </summary> public Dt_LocationInfo? AssignLocation(string roadwayNo, int palletType, int warehouseId, string beRelocationCode = "", int heightType = 0) { Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == warehouseId); diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs" index d48c3fa..eabcb6e 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs" @@ -37,33 +37,17 @@ SC_Finish = 220, /// <summary> - /// 杈撻�佺嚎寰呮墽琛� - /// </summary> - [Description("杈撻�佺嚎寰呮墽琛�")] - Line_Execute = 400, - - /// <summary> - /// 杈撻�佺嚎鎵ц涓� - /// </summary> - [Description("杈撻�佺嚎鎵ц涓�")] - Line_Executing = 410, - - /// <summary> - /// 杈撻�佺嚎瀹屾垚 - /// </summary> - [Description("杈撻�佺嚎瀹屾垚")] - Line_Finish = 420, - - /// <summary> /// AGV寰呮墽琛� /// </summary> [Description("AGV寰呮墽琛�")] AGV_Execute = 300, + /// <summary> - /// AGV鍙栬揣涓� + /// AGV鍙栬揣瀹屾垚 /// </summary> - [Description("AGV鍙栬揣涓�")] - AGV_Takeing =305, + [Description("AGV鍙栬揣瀹屾垚")] + AGV_TakeFinish = 305, + /// <summary> /// AGV鎵ц涓� /// </summary> @@ -88,6 +72,41 @@ AGV_Finish = 330, /// <summary> + /// 杈撻�佺嚎寰呮墽琛� + /// </summary> + [Description("杈撻�佺嚎寰呮墽琛�")] + Line_Execute = 400, + + /// <summary> + /// 杈撻�佺嚎鎵ц涓� + /// </summary> + [Description("杈撻�佺嚎鎵ц涓�")] + Line_Executing = 410, + + /// <summary> + /// 杈撻�佺嚎瀹屾垚 + /// </summary> + [Description("杈撻�佺嚎瀹屾垚")] + Line_Finish = 420, + + /// <summary> + /// RGV寰呮墽琛� + /// </summary> + [Description("RGV寰呮墽琛�")] + RGV_Execute = 500, + /// <summary> + /// RGV鎵ц涓� + /// </summary> + [Description("RGV鎵ц涓�")] + RGV_Executing = 510, + + /// <summary> + /// 鐮佸灈鎵ц涓� + /// </summary> + [Description("鐮佸灈鎵ц涓�")] + MD_Executing = 520, + + /// <summary> /// 浠诲姟瀹屾垚 /// </summary> [Description("浠诲姟瀹屾垚")] diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs" index 2cd97a0..a52ade1 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs" @@ -80,21 +80,37 @@ /// </summary> [Description("鎴愬搧MES鎻愬簱")] OutMesRworkProduct =250, + + /// <summary> + /// 鍗板埛鍑哄簱 + /// </summary> + [Description("鍗板埛鍑哄簱")] + PrintOutbound = 310, + + /// <summary> + /// 鏃犵汉甯冨嚭搴� + /// </summary> + [Description("鏃犵汉甯冨嚭搴�")] + OutWFB = 320, + /// <summary> /// 閲囪喘鍏ュ簱 /// </summary> [Description("閲囪喘鍏ュ簱")] Inbound = 510, + /// <summary> /// 鐩樼偣鍏ュ簱 /// </summary> [Description("鐩樼偣鍏ュ簱")] InInventory = 520, + /// <summary> /// 鍒嗘嫞鍏ュ簱 /// </summary> [Description("鍒嗘嫞鍏ュ簱")] InPick = 530, + /// <summary> /// 璐ㄦ鍏ュ簱 /// </summary> @@ -155,6 +171,24 @@ EmptyProductBack = 630, /// <summary> + /// 鎴愬搧鐮佸灈 + /// </summary> + [Description("鎴愬搧鐮佸灈")] + ProductMD = 640, + + /// <summary> + /// 鍗板埛鍗婃垚鍝佸叆搴� + /// </summary> + [Description("鍗板埛鍗婃垚鍝佸叆搴�")] + PrintInbound = 710, + + /// <summary> + /// 鍗板埛鍘熸枡浣欐枡閫�搴� + /// </summary> + [Description("鍗板埛鍘熸枡浣欐枡閫�搴�")] + PrintBackInbound = 720, + + /// <summary> /// 宸烽亾鍐呯Щ搴� /// </summary> [Description("宸烽亾鍐呯Щ搴�")] diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_ITaskInfoService/ITaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_ITaskInfoService/ITaskService.cs" index 238ea19..856fcba 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_ITaskInfoService/ITaskService.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_ITaskInfoService/ITaskService.cs" @@ -167,6 +167,14 @@ /// <param name="Count"></param> /// <returns></returns> WebResponseContent RequestCPWMSTaskOut(int Count); + + /// <summary> + /// 鏃犵汉甯冨嚭搴� + /// </summary> + /// <param name="Count"></param> + /// <returns></returns> + WebResponseContent RequestWFBWMSTaskOut(int Count); + /// <summary> /// 鍘熸枡鍑哄簱浠诲姟 /// </summary> @@ -174,8 +182,38 @@ /// <param name="materielWide">鐗╂枡骞呭</param> /// <param name="Count">鍗锋暟</param> /// <returns></returns> - WebResponseContent RequestYLWMSTaskOut(string materielCode, int materielWide, int Count); + WebResponseContent RequestYLWMSTaskOut(string materielCode, int materielWide, int Count, string address = ""); + /// <summary> + /// 鍘熸枡绉诲簱 + /// </summary> + /// <param name="startAddress"></param> + /// <param name="endAddress"></param> + /// <param name="roadWay"></param> + /// <returns></returns> WebResponseContent IsRelocation(string startAddress, string endAddress, string roadWay); + /// <summary> + /// 鍘熸枡宸烽亾闂寸Щ搴撲换鍔� + /// </summary> + WebResponseContent RelocationRoadWay(string roadWay,int Count); + + /// <summary> + /// 鍒嗛厤宸烽亾 + /// </summary> + /// <returns></returns> + string AssignCPRoadwayNo(); + /// <summary> + /// 鍗板埛浣欐枡閫�鏂欎换鍔� + /// </summary> + /// <param name="saveModel"></param> + /// <returns></returns> + WebResponseContent PrintBackInbound(SaveModel saveModel); + + /// <summary> + /// 鍗板埛涓嬫枡浠诲姟 + /// </summary> + /// <param name="saveModel"></param> + /// <returns></returns> + WebResponseContent PrintInbound(SaveModel saveModel); } } diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Stock/Dt_ProCache.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Stock/Dt_ProCache.cs" index ab93e6a..2f61471 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Stock/Dt_ProCache.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Stock/Dt_ProCache.cs" @@ -45,6 +45,18 @@ public string MdQtys { get; set; } /// <summary> + /// 鐮佸灈涓暟閲忥紙鍚凡鐮佸灈锛� + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "鐮佸灈涓暟閲�")] + public string MdingQtys { get; set; } + + /// <summary> + /// 鐮佸灈缁撴墭鏁伴噺 + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "鐮佸灈缁撴墭鏁伴噺")] + public string MdEndQtys { get; set; } + + /// <summary> /// 鍗曞彿 /// </summary> [SugarColumn(IsNullable = true, Length = 30, ColumnDescription = "鍗曞彿")] diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Completed.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Completed.cs" index 1ddd8a0..eb453f5 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Completed.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Completed.cs" @@ -98,10 +98,14 @@ Dt_Task wmsTask = BaseDal.QueryFirst(x=>x.TaskNum == task.TaskNum); if (wmsTask != null) { + wmsTask.PalletCode= task.PalletCode; + wmsTask.Roadway = task.Roadway; wmsTask.TaskStatus = task.TaskState; wmsTask.CurrentAddress = task.CurrentAddress; wmsTask.NextAddress = task.NextAddress; wmsTask.Dispatchertime = task.Dispatchertime; + wmsTask.TaskType = task.TaskType; + wmsTask.TargetAddress = task.TargetAddress; BaseDal.UpdateData(wmsTask); } return WebResponseContent.Instance.OK(); diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs" index 16142da..1f7d0db 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs" @@ -10,6 +10,7 @@ using System.Threading.Tasks; using WIDESEA_Common.CommonEnum; using WIDESEA_Common.LocationEnum; +using WIDESEA_Common.MaterielEnum; using WIDESEA_Common.OrderEnum; using WIDESEA_Common.StockEnum; using WIDESEA_Common.TaskEnum; @@ -127,61 +128,78 @@ /// <returns></returns> public WebResponseContent RequestYLWMSTaskSimple(string stationCode, string palletCode) { - Dt_Task task = Repository.QueryFirst(x => x.PalletCode == palletCode); - if (task != null) + WebResponseContent content = new WebResponseContent(); + try { - PushTasksToWCS(new List<Dt_Task> { task }); - return WebResponseContent.Instance.OK($"璇ユ墭鐩樺凡鐢熸垚浠诲姟", _mapper.Map<WMSTaskDTO>(task)); - } + Dt_Task task = Repository.QueryFirst(x => x.PalletCode == palletCode); + if (task != null) + { + PushTasksToWCS(new List<Dt_Task> { task }); + return content.OK($"璇ユ墭鐩樺凡鐢熸垚浠诲姟", _mapper.Map<WMSTaskDTO>(task)); + } - if (Repository.QueryFirst(x => x.SourceAddress == stationCode && x.TaskStatus == TaskStatusEnum.New.ObjToInt()) != null) - { - return WebResponseContent.Instance.Error($"璇ョ珯鐐瑰凡鏈夋湭鎵ц鐨勪换鍔�"); - } - Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == palletCode); - if (stockInfo == null) - { - return WebResponseContent.Instance.Error($"鏈壘鍒扮粍鐩樹俊鎭�"); - } - if (stockInfo.StockStatus != StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt()) - { - return WebResponseContent.Instance.Error($"璇ユ墭鐩樼姸鎬佷笉姝g‘,涓嶅彲鐢宠鍏ュ簱"); - } - string rowWay = AssignYLRoadwayNo(stockInfo.PalletCode); - Dt_Task newTask = new Dt_Task() - { - CurrentAddress = stationCode, - Grade = 0, - NextAddress = "", - PalletCode = palletCode, - Roadway = rowWay, - SourceAddress = stationCode, - TargetAddress = "", - TaskType = TaskTypeEnum.Inbound.ObjToInt(), - TaskStatus = TaskStatusEnum.New.ObjToInt(), - WarehouseId = stockInfo.WarehouseId, - PalletType = stockInfo.PalletType, - }; + if (Repository.QueryFirst(x => x.SourceAddress == stationCode && x.TaskStatus == TaskStatusEnum.New.ObjToInt()) != null) + { + return content.Error($"璇ョ珯鐐瑰凡鏈夋湭鎵ц鐨勪换鍔�"); + } + Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == palletCode); + if (stockInfo == null) + { + return content.Error($"鏈壘鍒扮粍鐩樹俊鎭�"); + } + if (stockInfo.StockStatus != StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt()) + { + return content.Error($"璇ユ墭鐩樼姸鎬佷笉姝g‘,涓嶅彲鐢宠鍏ュ簱"); + } + string rowWay = AssignYLRoadwayNo(stockInfo.PalletCode); + if (string.IsNullOrEmpty(rowWay)) + { + return content.Error($"鏈壘鍒板彲鍒嗛厤宸烽亾"); + } + Dt_Task newTask = new Dt_Task() + { + CurrentAddress = stationCode, + Grade = 0, + NextAddress = "", + PalletCode = palletCode, + Roadway = rowWay, + SourceAddress = stationCode, + TargetAddress = "", + TaskType = TaskTypeEnum.Inbound.ObjToInt(), + TaskStatus = TaskStatusEnum.New.ObjToInt(), + WarehouseId = stockInfo.WarehouseId, + PalletType = stockInfo.PalletType, + }; - if (stockInfo.StockStatus == StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt()) - { - stockInfo.StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt(); + if (stockInfo.StockStatus == StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt()) + { + stockInfo.StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt(); + } + _unitOfWorkManage.BeginTran(); + int taskId = BaseDal.AddData(newTask); + newTask.TaskId = taskId; + _stockRepository.StockInfoRepository.UpdateData(stockInfo); + _unitOfWorkManage.CommitTran(); + PushTasksToWCS(new List<Dt_Task> { newTask }); + WMSTaskDTO wMSTaskDTO = _mapper.Map<WMSTaskDTO>(newTask); + return content.OK(data: wMSTaskDTO); } - _unitOfWorkManage.BeginTran(); - int taskId = BaseDal.AddData(newTask); - newTask.TaskId = taskId; - _stockRepository.StockInfoRepository.UpdateData(stockInfo); - _unitOfWorkManage.CommitTran(); - PushTasksToWCS(new List<Dt_Task> { newTask }); - WMSTaskDTO wMSTaskDTO = _mapper.Map<WMSTaskDTO>(newTask); - return WebResponseContent.Instance.OK(data: wMSTaskDTO); + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + content.Error(ex.Message); + } + return content; } public string AssignYLRoadwayNo(string palletCode) { try { Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == palletCode); - + if (stockInfo==null) + { + throw new Exception($"缁勭洏搴撳瓨涓嶅瓨鍦�"); + } Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == stockInfo.WarehouseId); if (warehouse == null) @@ -192,11 +210,11 @@ string roadwayNo = ""; if (stockInfo.MaterielThickness > 800) { - List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationType == LocationTypeEnum.Undefined.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.RoadwayNo.Contains("YL")).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList(); + List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.RoadwayNo.Contains("YL")).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList(); roadwayNo = locationCounts.OrderByDescending(x => x.Count).FirstOrDefault()?.RoadwayNo ?? ""; if (stockInfo.MaterielWide > 2200) { - locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationType == LocationTypeEnum.Undefined.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && !x.RoadwayNo.Contains("SC01_YL")).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList(); + locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.RoadwayNo=="SC02_YL").GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList(); roadwayNo = locationCounts.OrderByDescending(x => x.Count).FirstOrDefault()?.RoadwayNo ?? ""; } } @@ -223,7 +241,7 @@ { return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑缁堢偣璐т綅淇℃伅"); } - Dt_AGVStationInfo agvstation = _agvStationInfoRepository.QueryFirst(x => x.AGVStationCode == task.SourceAddress && x.StationArea == AGVStationAreaEnum.AreaA.ObjToInt()); + Dt_AGVStationInfo agvstation = _agvStationInfoRepository.QueryFirst(x => x.AGVStationCode == task.SourceAddress && ( x.StationArea == AGVStationAreaEnum.AreaA.ObjToInt() || x.StationArea == AGVStationAreaEnum.AreaC.ObjToInt())); if (agvstation != null) { agvstation.IsOccupied = WhetherEnum.False.ObjToInt(); @@ -261,8 +279,14 @@ { return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑缁堢偣璐т綅淇℃伅"); } + task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); _unitOfWorkManage.BeginTran(); + if (task.TaskType == TaskTypeEnum.InPick.ObjToInt()) + { + Dt_LocationInfo locationInfoStart = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress); + _basicService.LocationInfoService.UpdateLocationStatus(locationInfoStart, stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId); + } stockInfo.LocationCode = locationInfoEnd.LocationCode; stockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(); _stockService.StockInfoService.Repository.UpdateData(stockInfo); @@ -293,9 +317,8 @@ } string roadwayNo = ""; - List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationType == LocationTypeEnum.Undefined.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.RoadwayNo.Contains("CP")).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList(); - - //鑾峰彇褰撳墠鍏ュ簱浠诲姟涓凡鍒嗛厤宸烽亾浠诲姟鏁伴噺 + List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.RoadwayNo.Contains("CP")).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList(); + //绛涢�夊綋鍓嶅叆搴撲换鍔′腑宸插垎閰嶅贩閬撲换鍔℃暟閲� List<LocationCount> useLocationCounts = Db.Queryable<Dt_Task>().Where(x => x.WarehouseId == warehouse.WarehouseId && locationCounts.Select(j=>j.RoadwayNo).Contains(x.Roadway) && TaskInboundTypes.Contains(x.TaskType)).GroupBy(x => x.Roadway).Select(x => new LocationCount { RoadwayNo = x.Roadway, Count = SqlFunc.AggregateCount(x) }).ToList(); @@ -336,7 +359,7 @@ { return WebResponseContent.Instance.OK(data: task.TargetAddress); } - + //鍒嗛厤璐т綅 Dt_LocationInfo? locationInfo = _basicService.LocationInfoService.AssignLocation(roadwayNo, task.PalletType, task.WarehouseId); if (locationInfo == null) { @@ -356,7 +379,7 @@ LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus; - + //鏇存柊閿佸畾璐т綅 _unitOfWorkManage.BeginTran(); _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationStatusEnum.Lock, LocationChangeType.InboundAssignLocation); _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, task.PalletType, LocationStatusEnum.Lock, task.WarehouseId); @@ -418,119 +441,6 @@ return WebResponseContent.Instance.Error(ex.Message); } } - public readonly string[] OutStartPonits = { "5230", "5237", "5244" }; - /// <summary> - /// 鎴愬搧浣欐枡閫�搴撳叆浠� - /// </summary> - /// <param name="barCode"></param> - /// <param name="startPoint"></param> - /// <returns></returns> - //public WebResponseContent BackProductTask(string barCode, string startPoint) - //{ - // WebResponseContent content = new WebResponseContent(); - // try - // { - // string palletCode = @"^C\d{5}$"; // 姝e垯琛ㄨ揪寮� - // bool isValid = Regex.IsMatch(barCode, palletCode); - // if (!isValid) - // { - // return content.Error($"妗嗙爜鏍煎紡閿欒{barCode}"); - // } - // if (!OutStartPonits.Contains(startPoint)) - // { - // return content.Error($"璧风偣閿欒{startPoint}"); - // } - // //鍒ゆ柇褰撳墠鐐逛綅鏄惁閲嶅 - // Dt_Task taskOldPoint = BaseDal.QueryFirst(x=>x.SourceAddress==startPoint && (x.TaskStatus == TaskStatusEnum.New.ObjToInt()||x.TaskStatus==TaskStatusEnum.Line_Execute.ObjToInt()|| x.TaskStatus == TaskStatusEnum.Line_Executing.ObjToInt() || x.TaskStatus == TaskStatusEnum.AGV_Takeing.ObjToInt())); - // if (taskOldPoint != null) - // { - // return content.Error($"绔欑偣{startPoint}宸插瓨鍦ㄤ换鍔�"); - // } - // Dt_Task taskOld = BaseDal.QueryFirst(x => x.PalletCode == barCode); - // if (taskOld != null) - // { - // return content.Error($"鑳舵{barCode}浠诲姟宸插瓨鍦�"); - // } - // //鑾峰彇鑳舵浣欐枡 - // Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x=>x.PalletCode== barCode).Includes(x=>x.proStockInfoDetails).First(); - // if (proStockInfo==null) - // { - // return content.Error($"鏈壘鍒皗barCode}鑳舵淇℃伅"); - // } - // if (proStockInfo.proStockInfoDetails==null || proStockInfo.proStockInfoDetails.Count<=0) - // { - // return content.Error($"{barCode}鑳舵淇℃伅涓虹┖"); - // } - // if (proStockInfo.StockStatus!=StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt()) - // { - // return content.Error($"{barCode}鑳舵淇℃伅鐘舵�佸紓甯�"); - // } - // //鑾峰彇鎴愬搧骞冲簱 - // Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA101.ToString()); - // if (proStockInfo.WarehouseId != warehouse.WarehouseId && proStockInfo.LocationCode!= "鎴愬搧鍖呰鎷h揣鍖�") - // { - // return content.Error($"{barCode}鑳舵淇℃伅涓嶅湪鎷h揣鍖�"); - // } - // //鑾峰彇褰撳墠鐨勫簱瀛樺睘鎬� - // Dt_Warehouse? warePoint = null; - // switch (proStockInfo.ProStockAttribute) - // { - // case (int)ProStockAttributeEnum.鎴愬搧: - // warePoint = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA71.ToString()); - // break; - // case (int)ProStockAttributeEnum.灏炬暟: - // warePoint = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA72.ToString()); - // break; - // case (int)ProStockAttributeEnum.鐮斿彂: - // warePoint = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA73.ToString()); - // break; - // default: - // throw new Exception($"鏈壘鍒皗barCode}鑳舵淇℃伅搴撳瓨灞炴��"); - // } - // Dt_Warehouse warehouseLocation = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA71.ToString()); - // Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.WarehouseId == warehouseLocation.WarehouseId); - // if (locationInfo == null) - // { - // return content.Error($"鏈壘鍒皗warehouse.WarehouseCode}璐т綅淇℃伅"); - // } - // proStockInfo.StockStatus = StockStatusEmun.鎴愬搧浣欐枡鍥炲簱.ObjToInt(); - // proStockInfo.proStockInfoDetails.ForEach(x => - // { - // x.ProOutDetailStatus = StockStatusEmun.鎴愬搧浣欐枡鍥炲簱.ObjToInt(); - // }); - // Dt_Task newTask = new Dt_Task() - // { - // CurrentAddress = startPoint, - // Grade = 0, - // NextAddress = "", - // PalletCode = proStockInfo.PalletCode, - // Roadway = locationInfo.RoadwayNo, - // SourceAddress = startPoint, - // TargetAddress = "", - // TaskType = TaskTypeEnum.InProductBack.ObjToInt(), - // TaskStatus = TaskStatusEnum.New.ObjToInt(), - // WarehouseId = warePoint.WarehouseId, - // PalletType = proStockInfo.PalletType, - // MaterielCode = proStockInfo.proStockInfoDetails.Where(x => x.ProStockId == proStockInfo.Id).FirstOrDefault()?.ProductCode, - // Quantity = (float)proStockInfo.proStockInfoDetails.Where(x => x.ProStockId == proStockInfo.Id).Sum(x => x.StockPcsQty) - // }; - // _unitOfWorkManage.BeginTran(); - // int taskId = BaseDal.AddData(newTask); - // newTask.TaskId = taskId; - // _stockRepository.ProStockInfoRepository.UpdateData(proStockInfo); - // _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfo.proStockInfoDetails); - // _unitOfWorkManage.CommitTran(); - // //鎺ㄩ�佷换鍔� - // PushTasksToWCS(new List<Dt_Task> { newTask }); - // content.OK("鍙戦�佹垚鍔�"); - // } - // catch (Exception ex) - // { - // _unitOfWorkManage.RollbackTran(); - // content.Error(ex.Message); - // } - // return content; - //} /// <summary> /// 绌烘鍥炲簱 /// </summary> @@ -551,7 +461,7 @@ return content.Error($"璧风偣閿欒{startPoint}"); } //鍒ゆ柇褰撳墠鐐逛綅鏄惁閲嶅 - Dt_Task taskOldPoint = BaseDal.QueryFirst(x => x.SourceAddress == startPoint && x.TaskStatus == TaskStatusEnum.New.ObjToInt()); + Dt_Task taskOldPoint = BaseDal.QueryFirst(x => x.SourceAddress == startPoint &&( x.TaskStatus == TaskStatusEnum.New.ObjToInt() || x.TaskStatus==TaskStatusEnum.AGV_Executing.ObjToInt())); if (taskOldPoint != null) { return content.Error($"绔欑偣{startPoint}宸插瓨鍦ㄤ换鍔�"); @@ -606,6 +516,175 @@ } catch (Exception ex) { + _unitOfWorkManage.RollbackTran(); + content.Error(ex.Message); + } + return content; + } + /// <summary> + /// 鍗板埛浣欐枡閫�鏂欎换鍔� + /// </summary> + public WebResponseContent PrintBackInbound(SaveModel saveModel) + { + WebResponseContent content = new WebResponseContent(); + try + { + var barcode = saveModel.MainData["palletCode"].ToString(); + var warehouseId = saveModel.MainData["warehouseId"].ObjToInt(); + var materSn = saveModel.MainData["materSn"]; + //鐩村緞 + var thickness = saveModel.MainData["thickness"].ObjToInt(); + var weight = saveModel.MainData["weight"].ObjToInt(); + var address = saveModel.MainData["address"].ToString(); + //骞呭 + var wide = saveModel.MainData["wide"].ObjToInt(); + Dt_MaterielInfo? materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == materSn); + if (materielInfo == null) + { + return content.Error("鏈壘鍒扮墿鏂欎俊鎭�"); + } + Dt_StockInfo stockInfoOld = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == barcode); + if (stockInfoOld != null) + { + return content.Error("鎵樼洏淇℃伅宸插瓨鍦�"); + } + //鐢熸垚搴撳瓨缁勭洏淇℃伅 + Dt_StockInfo stockInfo = new Dt_StockInfo() + { + MaterielInvOrgId = materielInfo.MaterielInvOrgId, + PalletCode = barcode, + LocationCode = "", + PalletType = 1, + WarehouseId = warehouseId, + StockAttribute = materielInfo.MaterielSourceType, + StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt(), + MaterielSpec = materielInfo.MaterielSpec, + Unit = materielInfo.MaterielUnit, + MaterielThickness = thickness, + MaterielWide = wide, + MaterielWeight = weight, + MaterielCode = materielInfo.MaterielCode, + MaterielName = materielInfo.MaterielName, + }; + if (wide > 1200) + { + stockInfo.PalletType = 2; + } + + //鐢熸垚鍗板埛浣欐枡閫�鏂欎换鍔� + Dt_Task newTask = new Dt_Task() + { + CurrentAddress = address, + Grade = 0, + NextAddress = "", + PalletCode = barcode, + Roadway = "", + SourceAddress = address, + TargetAddress = "", + TaskType = TaskTypeEnum.PrintBackInbound.ObjToInt(), + TaskStatus = TaskStatusEnum.New.ObjToInt(), + WarehouseId = warehouseId, + PalletType = 1, + TaskLength= wide + }; + _unitOfWorkManage.BeginTran(); + int taskId = BaseDal.AddData(newTask); + _stockRepository.StockInfoRepository.AddData(stockInfo); + newTask.TaskId = taskId; + _unitOfWorkManage.CommitTran(); + //鎺ㄩ�佷换鍔� + PushTasksToWCS(new List<Dt_Task> { newTask }); + content.OK("鍙戦�佹垚鍔�"); + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + content.Error(ex.Message); + } + return content; + } + /// <summary> + /// 鍗板埛涓嬫枡浠诲姟 + /// </summary> + public WebResponseContent PrintInbound(SaveModel saveModel) + { + WebResponseContent content = new WebResponseContent(); + try + { + var barcode = saveModel.MainData["palletCode"].ToString(); + var warehouseId = saveModel.MainData["warehouseId"].ObjToInt(); + var materSn = saveModel.MainData["materSn"]; + //鐩村緞 + var thickness = saveModel.MainData["thickness"].ObjToInt(); + var weight = saveModel.MainData["weight"].ObjToInt(); + var address = saveModel.MainData["address"].ToString(); + //骞呭 + var wide = saveModel.MainData["wide"].ObjToInt(); + Dt_MaterielInfo? materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == materSn); + if (materielInfo == null) + { + return content.Error("鏈壘鍒扮墿鏂欎俊鎭�"); + } + if (materielInfo.MaterielSourceType!=MaterielTypeEnum.鍗婃垚鍝�.ObjToInt()) + { + return content.Error($"鏈壘鍒扮墿鏂檣materielInfo.MaterielCode}鍗婃垚鍝佷俊鎭�"); + } + Dt_StockInfo stockInfoOld = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == barcode); + if (stockInfoOld != null) + { + return content.Error("鎵樼洏淇℃伅宸插瓨鍦�"); + } + //鐢熸垚搴撳瓨缁勭洏淇℃伅 + Dt_StockInfo stockInfo = new Dt_StockInfo() + { + MaterielInvOrgId = materielInfo.MaterielInvOrgId, + PalletCode = barcode, + LocationCode = "", + PalletType = 1, + WarehouseId = warehouseId, + StockAttribute = materielInfo.MaterielSourceType, + StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt(), + MaterielSpec = materielInfo.MaterielSpec, + Unit = materielInfo.MaterielUnit, + MaterielThickness = thickness, + MaterielWide = wide, + MaterielWeight = weight, + MaterielCode = materielInfo.MaterielCode, + MaterielName = materielInfo.MaterielName, + }; + if (wide > 1200) + { + stockInfo.PalletType = 2; + } + + //鐢熸垚鍗板埛鍗婃垚鍝佸叆搴撲换鍔� + Dt_Task newTask = new Dt_Task() + { + CurrentAddress = address, + Grade = 0, + NextAddress = "", + PalletCode = barcode, + Roadway = "", + SourceAddress = address, + TargetAddress = "", + TaskType = TaskTypeEnum.PrintInbound.ObjToInt(), + TaskStatus = TaskStatusEnum.New.ObjToInt(), + WarehouseId = warehouseId, + PalletType = 1, + TaskLength = wide + }; + _unitOfWorkManage.BeginTran(); + int taskId = BaseDal.AddData(newTask); + _stockRepository.StockInfoRepository.AddData(stockInfo); + newTask.TaskId = taskId; + _unitOfWorkManage.CommitTran(); + //鎺ㄩ�佷换鍔� + PushTasksToWCS(new List<Dt_Task> { newTask }); + content.OK("鍙戦�佹垚鍔�"); + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); content.Error(ex.Message); } return content; diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs" index fb613e5..e9c6340 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs" @@ -284,13 +284,77 @@ return content; } /// <summary> + /// 鏃犵汉甯冨嚭搴� + /// </summary> + /// <param name="Count"></param> + /// <returns></returns> + public WebResponseContent RequestWFBWMSTaskOut(int Count) + { + WebResponseContent content = new WebResponseContent(); + try + { + List<Dt_AGVStationInfo> aGVStationInfos = _agvStationInfoRepository.QueryData(x => x.StationArea == AGVStationAreaEnum.AreaC.ObjToInt() && x.IsOccupied == WhetherEnum.False.ObjToInt()); + if (aGVStationInfos.Count < Count) + { + return content.Error($"鍙敤缂撳瓨鏁颁笉瓒�"); + } + List<Dt_ProStockInfo> stockInfos = _stockRepository.ProStockInfoRepository.QueryData(x => x.ProStockAttribute == ProStockAttributeEnum.绌烘墭.ObjToInt() && x.StockStatus == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt()).OrderBy(x => x.CreateDate).Take(Count).ToList(); + List<Dt_LocationInfo> locationInfos = _basicRepository.LocationInfoRepository.QueryData(x => stockInfos.Select(x => x.LocationCode).Contains(x.LocationCode)); + if (stockInfos.Count < Count) + { + return content.Error($"搴撳瓨鏁伴噺涓嶈冻"); + } + foreach (var item in stockInfos) + { + Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.LocationCode == item.LocationCode); + if (locationInfo != null && (locationInfo.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || locationInfo.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && locationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt()) + { + item.StockStatus = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt(); + } + else + { + return content.Error($"璐т綅鐘舵�佷笉姝g‘"); + } + } + List<Dt_Task> tasks = GetTasks(stockInfos, TaskTypeEnum.OutWFB); + if (tasks == null || tasks.Count <= 0) + { + return content.Error($"鐢熸垚浠诲姟澶辫触"); + } + for (int i = 0; i < tasks.Count; i++) + { + aGVStationInfos[i].IsOccupied = WhetherEnum.True.ObjToInt(); + tasks[i].TargetAddress = aGVStationInfos[i].AGVStationCode; + } + //鍒ゆ柇鏄惁鏈夊嚭搴撳崟淇℃伅 + _unitOfWorkManage.BeginTran(); + //鏇存柊搴撳瓨鐘舵�� + _stockRepository.ProStockInfoRepository.UpdateData(stockInfos); + _agvStationInfoRepository.UpdateData(aGVStationInfos); + //鏇存柊璐т綅鐘舵�� + _basicRepository.LocationInfoRepository.UpdateLocationStatus(locationInfos, LocationStatusEnum.Lock); + //鍔犲叆璐т綅鍙樺姩璁板綍 + _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfos, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, taskNums: tasks.Select(x => x.TaskNum).ToList()); + //鏂板缓浠诲姟 + BaseDal.AddData(tasks); + _unitOfWorkManage.CommitTran(); + PushTasksToWCS(tasks); + content.OK(); + } + catch (Exception ex) + { + content.Error(ex.Message); + } + return content; + } + /// <summary> /// 鍘熸枡鍑哄簱浠诲姟 /// </summary> /// <param name="materielCode">鐗╂枡浠g爜</param> /// <param name="materielWide">鐗╂枡骞呭</param> /// <param name="Count">鍗锋暟</param> /// <returns></returns> - public WebResponseContent RequestYLWMSTaskOut(string materielCode, int materielWide, int Count) + public WebResponseContent RequestYLWMSTaskOut(string materielCode, int materielWide, int Count, string address = "") { WebResponseContent content = new WebResponseContent(); try @@ -323,13 +387,20 @@ } else { - taskTypeEnum = TaskTypeEnum.Outbound; + taskTypeEnum = TaskTypeEnum.PrintOutbound; } List<Dt_Task> tasks = GetTasks(stockInfos, taskTypeEnum); if (tasks == null || tasks.Count <= 0) { return content.Error($"鐢熸垚浠诲姟澶辫触"); } + if (!string.IsNullOrEmpty(address)) + { + tasks.ForEach(x => + { + x.TargetAddress= address; + }); + } //鍒ゆ柇鏄惁鏈夊嚭搴撳崟淇℃伅 _unitOfWorkManage.BeginTran(); //鏇存柊搴撳瓨鐘舵�� diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Reloaction.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Reloaction.cs" index 10f4bb0..7968781 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Reloaction.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Reloaction.cs" @@ -1,10 +1,12 @@ -锘縰sing System; +锘縰sing OfficeOpenXml.FormulaParsing.Excel.Functions.Math; +using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.CommonEnum; using WIDESEA_Common.LocationEnum; +using WIDESEA_Common.MaterielEnum; using WIDESEA_Common.OtherEnum; using WIDESEA_Common.StockEnum; using WIDESEA_Common.TaskEnum; @@ -176,8 +178,10 @@ Dt_LocationInfo startLocationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.LocationCode == startAddress); Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.LocationCode == startAddress); Dt_LocationInfo endLocationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.LocationCode == endAddress); + //鍒ゆ柇鏉′欢 if (startLocationInfo != null && startLocationInfo.LocationStatus==LocationStatusEnum.InStock.ObjToInt() && endLocationInfo != null && endLocationInfo.LocationStatus==LocationStatusEnum.Free.ObjToInt() && endLocationInfo.EnableStatus==EnableStatusEnum.Normal.ObjToInt() && stockInfo!=null) { + //鐢熸垚浠诲姟 Dt_Task newTask = new Dt_Task() { Roadway = roadWay, @@ -191,7 +195,7 @@ SourceAddress = startLocationInfo.LocationCode, TargetAddress = endLocationInfo.LocationCode, TaskNum = Repository.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), - TaskStatus = 0, + TaskStatus = TaskStatusEnum.SC_Execute.ObjToInt(), TaskType = TaskTypeEnum.Relocation.ObjToInt() }; stockInfo.StockStatus = StockStatusEmun.绉诲簱閿佸畾.ObjToInt(); @@ -216,5 +220,60 @@ } return content; } + /// <summary> + /// 鍘熸枡宸烽亾闂寸Щ搴撲换鍔� todo:涓存椂 + /// </summary> + public WebResponseContent RelocationRoadWay(string roadWay, int Count) + { + WebResponseContent content = new WebResponseContent(); + try + { + //鑾峰彇瀵瑰簲搴撳瓨 + List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.QueryData(x => x.MaterielWide <2200 && x.StockStatus == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt()).OrderBy(x => x.CreateDate).Take(Count).ToList(); + + //鑾峰彇璐т綅 + List<Dt_LocationInfo> locationInfos = _basicRepository.LocationInfoRepository.QueryData(x => stockInfos.Select(x => x.LocationCode).Contains(x.LocationCode)); + foreach (var item in stockInfos) + { + Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.LocationCode == item.LocationCode); + if (locationInfo != null && (locationInfo.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || locationInfo.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && locationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt()) + { + item.StockStatus = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt(); + } + else + { + return content.Error($"璐т綅鐘舵�佷笉姝g‘"); + } + } + + List<Dt_Task> tasks = GetTasks(stockInfos, TaskTypeEnum.OutPick); + if (tasks == null || tasks.Count <= 0) + { + return content.Error($"鐢熸垚浠诲姟澶辫触"); + } + tasks.ForEach(x => + { + x.TargetAddress = roadWay; + }); + //鍒ゆ柇鏄惁鏈夊嚭搴撳崟淇℃伅 + _unitOfWorkManage.BeginTran(); + //鏇存柊搴撳瓨鐘舵�� + _stockRepository.StockInfoRepository.UpdateData(stockInfos); + //鏇存柊璐т綅鐘舵�� + _basicRepository.LocationInfoRepository.UpdateLocationStatus(locationInfos, LocationStatusEnum.Lock); + //鍔犲叆璐т綅鍙樺姩璁板綍 + _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfos, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, taskNums: tasks.Select(x => x.TaskNum).ToList()); + //鏂板缓浠诲姟 + BaseDal.AddData(tasks); + _unitOfWorkManage.CommitTran(); + PushTasksToWCS(tasks); + content.OK(); + } + catch (Exception ex) + { + content.Error(ex.Message); + } + return content; + } } } diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" index 1d03895..90a0e24 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" @@ -172,6 +172,21 @@ { return Service.RequestYLWMSTaskSimple(stationCode,palletCode); } + /// <summary> + /// 鍒嗛厤鍘熸枡鍏ュ簱宸烽亾 + /// </summary> + /// <param name="palletCode"></param> + /// <returns></returns> + [HttpPost, HttpGet, Route("AssignYLRoadwayNo"), AllowAnonymous] + public WebResponseContent AssignYLRoadwayNo(string palletCode) + { + string roadWay= Service.AssignYLRoadwayNo(palletCode); + if (string.IsNullOrEmpty(roadWay)) + { + return WebResponseContent.Instance.Error("鏈壘鍒板彲鍒嗛厤宸烽亾"); + } + return WebResponseContent.Instance.OK(data: roadWay); + } /// <summary> /// 鎴愬搧鍑哄簱浠诲姟璇锋眰 @@ -182,6 +197,17 @@ { return Service.RequestCPWMSTaskOut(Count); } + + /// <summary> + /// 鏃犵汉甯冨嚭搴� + /// </summary> + /// <returns></returns> + [HttpPost, HttpGet, Route("RequestWFBWMSTaskOut"), AllowAnonymous] + public WebResponseContent RequestWFBWMSTaskOut(int Count) + { + return Service.RequestWFBWMSTaskOut(Count); + } + /// <summary> /// 鍘熸枡鍑哄簱浠诲姟 /// </summary> @@ -190,9 +216,9 @@ /// <param name="Count">鍗锋暟</param> /// <returns></returns> [HttpPost, HttpGet, Route("RequestYLWMSTaskOut"), AllowAnonymous] - public WebResponseContent RequestYLWMSTaskOut(string materielCode,int materielWide, int Count) + public WebResponseContent RequestYLWMSTaskOut(string materielCode,int materielWide, int count,string address="") { - return Service.RequestYLWMSTaskOut(materielCode, materielWide, Count); + return Service.RequestYLWMSTaskOut(materielCode, materielWide, count, address); } /// <summary> /// 鍘熸枡绉诲簱浠诲姟 @@ -206,5 +232,43 @@ { return Service.IsRelocation(startAddress, endAddress, roadWay); } + /// <summary> + /// 鍘熸枡宸烽亾闂寸Щ搴撲换鍔� + /// </summary> + /// <returns></returns> + [HttpPost, HttpGet, Route("RelocationRoadWay"), AllowAnonymous] + public WebResponseContent RelocationRoadWay(string roadWay,int Count) + { + return Service.RelocationRoadWay(roadWay, Count); + } + /// <summary> + /// 鍒嗛厤鎴愬搧宸烽亾 + /// </summary> + /// <returns></returns> + [HttpPost, HttpGet, Route("AssignCPRoadwayNo"), AllowAnonymous] + public string AssignCPRoadwayNo() + { + return Service.AssignCPRoadwayNo(); + } + /// <summary> + /// 鍗板埛浣欐枡閫�鏂欎换鍔� + /// </summary> + /// <param name="saveModel"></param> + /// <returns></returns> + [HttpPost, HttpGet, Route("PrintBackInbound"), AllowAnonymous] + public WebResponseContent PrintBackInbound([FromBody]SaveModel saveModel) + { + return Service.PrintBackInbound(saveModel); + } + /// <summary> + /// 鍗板埛涓嬫枡浠诲姟 + /// </summary> + /// <param name="saveModel"></param> + /// <returns></returns> + [HttpPost, HttpGet, Route("PrintInbound"), AllowAnonymous] + public WebResponseContent PrintInbound([FromBody] SaveModel saveModel) + { + return Service.PrintInbound(saveModel); + } } } diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/\351\276\231\345\210\251\345\276\227PDA/common/config.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/\351\276\231\345\210\251\345\276\227PDA/common/config.js" index 31aeea7..e8ba20c 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/\351\276\231\345\210\251\345\276\227PDA/common/config.js" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/\351\276\231\345\210\251\345\276\227PDA/common/config.js" @@ -1,5 +1,5 @@ let config = { - baseUrl: 'http://127.0.0.1:9293', + baseUrl: 'http://192.168.35.3:9283', urls: [ 'http://192.168.35.3:9283', 'http://192.168.35.3:9283' diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\346\216\245\345\217\243\345\215\217\350\256\256/\344\270\200\346\234\237BSTERP\351\234\200\346\261\202\345\255\227\346\256\265.xlsx" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\346\216\245\345\217\243\345\215\217\350\256\256/\344\270\200\346\234\237BSTERP\351\234\200\346\261\202\345\255\227\346\256\265.xlsx" new file mode 100644 index 0000000..f743eb2 --- /dev/null +++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\346\216\245\345\217\243\345\215\217\350\256\256/\344\270\200\346\234\237BSTERP\351\234\200\346\261\202\345\255\227\346\256\265.xlsx" Binary files differ diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\344\274\270\347\274\251\350\264\247\345\217\211\346\216\245\351\251\263\345\217\260IP\345\210\206\351\205\215\350\241\250.xlsx" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\344\274\270\347\274\251\350\264\247\345\217\211\346\216\245\351\251\263\345\217\260IP\345\210\206\351\205\215\350\241\250.xlsx" new file mode 100644 index 0000000..3fd91ef --- /dev/null +++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\344\274\270\347\274\251\350\264\247\345\217\211\346\216\245\351\251\263\345\217\260IP\345\210\206\351\205\215\350\241\250.xlsx" Binary files differ diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\345\215\260\346\231\272\344\272\221\346\225\260\346\215\256\345\255\227\345\205\270.xlsx" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\345\215\260\346\231\272\344\272\221\346\225\260\346\215\256\345\255\227\345\205\270.xlsx" new file mode 100644 index 0000000..4028ae6 --- /dev/null +++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\345\215\260\346\231\272\344\272\221\346\225\260\346\215\256\345\255\227\345\205\270.xlsx" Binary files differ diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\345\216\237\346\226\231\345\272\223\350\276\223\351\200\201\347\272\277\351\200\232\350\256\257\345\215\217\350\256\256.xlsx" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\345\216\237\346\226\231\345\272\223\350\276\223\351\200\201\347\272\277\351\200\232\350\256\257\345\215\217\350\256\256.xlsx" index a1adcea..7313fdd 100644 --- "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\345\216\237\346\226\231\345\272\223\350\276\223\351\200\201\347\272\277\351\200\232\350\256\257\345\215\217\350\256\256.xlsx" +++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\345\216\237\346\226\231\345\272\223\350\276\223\351\200\201\347\272\277\351\200\232\350\256\257\345\215\217\350\256\256.xlsx" Binary files differ diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\346\210\220\345\223\201\350\276\223\351\200\201\347\272\277\351\200\232\350\256\257\345\215\217\350\256\256_20250707.xlsx" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\346\210\220\345\223\201\350\276\223\351\200\201\347\272\277\351\200\232\350\256\257\345\215\217\350\256\256_20250707.xlsx" index a745a85..dc6a722 100644 --- "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\346\210\220\345\223\201\350\276\223\351\200\201\347\272\277\351\200\232\350\256\257\345\215\217\350\256\256_20250707.xlsx" +++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\346\210\220\345\223\201\350\276\223\351\200\201\347\272\277\351\200\232\350\256\257\345\215\217\350\256\256_20250707.xlsx" Binary files differ diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\351\276\231\345\210\251\345\276\227\346\234\272\345\231\250\344\272\272IO\351\200\232\350\256\257\350\241\25020250712.xlsx" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\351\276\231\345\210\251\345\276\227\346\234\272\345\231\250\344\272\272IO\351\200\232\350\256\257\350\241\25020250712.xlsx" index 9f35452..b93e12b 100644 --- "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\351\276\231\345\210\251\345\276\227\346\234\272\345\231\250\344\272\272IO\351\200\232\350\256\257\350\241\25020250712.xlsx" +++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\351\276\231\345\210\251\345\276\227\346\234\272\345\231\250\344\272\272IO\351\200\232\350\256\257\350\241\25020250712.xlsx" Binary files differ -- Gitblit v1.9.3