From f59f3b24814387573b5bca9a9b6c832a3720ee7e Mon Sep 17 00:00:00 2001
From: zhangchengsong <zhangchengsong@hnkhzn.com>
Date: 星期三, 22 四月 2026 17:46:35 +0800
Subject: [PATCH] 最新
---
项目代码/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WMSTaskService.cs | 192 ++++++++++++++++++++++++++++++++++++++---------
1 files changed, 155 insertions(+), 37 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WMSTaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WMSTaskService.cs"
index f3a9c86..8257891 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WMSTaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WMSTaskService.cs"
@@ -16,7 +16,9 @@
#endregion << 鐗� 鏈� 娉� 閲� >>
using AutoMapper;
+using AutoMapper.Internal;
using Castle.Components.DictionaryAdapter.Xml;
+using HslCommunication;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.OpenApi.Any;
@@ -84,7 +86,7 @@
if (transfer.to == null || string.IsNullOrEmpty(transfer.to.code)) return apiResponse.ErrorResponse("鐩爣浣嶇疆涓嶈兘涓虹┖");
if (transfer.device == null || string.IsNullOrEmpty(transfer.device.uuid)) return apiResponse.ErrorResponse("璁惧鏍囪瘑涓嶈兘涓虹┖");
- Dt_Task setask = BaseDal.QueryData(x => x.WMStaskid == transfer.barCode).FirstOrDefault();
+ Dt_Task? setask = BaseDal.QueryData(x => x.WMStaskid == transfer.barCode).FirstOrDefault();
if (setask != null) return apiResponse.ErrorResponse($"WCS宸叉湁褰撳墠浠诲姟锛屼笉鍙噸澶嶄笅鍙戯紝鎵樼洏缂栧彿锛歿transfer.barCode}");
@@ -110,6 +112,7 @@
task.Grade = 1;
task.Creater = "WMS";
task.CreateDate = DateTime.Now;
+ task.WMStaskid = transfer.barCode;
task.deviceuuid = transfer.device.uuid;
_unitOfWorkManage.BeginTran();
@@ -157,23 +160,44 @@
ApiResponse apiResponse = new ApiResponse();
try
{
- //IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "1002");
- //if (device == null) return apiResponse.ErrorResponse("WCS鏈兘鑾峰彇鍒板簱鍙e疄渚�");
- //CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
+
Dictionary<string, int> portStatusDict = new Dictionary<string, int>();
foreach (string DeStateName in datas)
{
- //鏆傛椂鏁版嵁
- portStatusDict[DeStateName] = 1;
+ string DeciceCodes = "1003";
+ if (DeStateName.StartsWith("C")) DeciceCodes = "1004";
- /*DeviceProDTO? deviceProDTO = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == DeStateName && x.DeviceProParamName == "StationFree");
- if (deviceProDTO == null) return apiResponse.ErrorResponse($"WCS鏈壘鍒板簱鍙o細{DeStateName},瀵瑰簲鐨勫崗璁�");
- conveyorLine.Communicator.Read<bool>(deviceProDTO.DeviceProAddress);
- bool portStatus = conveyorLine.Communicator.Read<bool>(deviceProDTO.DeviceProAddress);
- int statusValue = portStatus ? 1 : 0;
- portStatusDict[DeStateName] = statusValue;*/
+
+ IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == DeciceCodes);
+ if (device == null) return apiResponse.ErrorResponse("WCS鏈兘鑾峰彇鍒板簱鍙e疄渚�");
+ CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
+
+
+ //鏄惁鍙繘鍑�
+ DeviceProDTO? deviceProDTO = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == DeStateName && x.DeviceProParamName == "PermitHandShake");
+ //鏄惁鏈夎揣
+ DeviceProDTO? StationNumProDTO = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == DeStateName && x.DeviceProParamName == "StationNum");
+ if (deviceProDTO == null || StationNumProDTO ==null) return apiResponse.ErrorResponse($"WCS鏈壘鍒板簱鍙o細{DeStateName},瀵瑰簲鐨勫崗璁�");
+
+ int statusValue = 0;
+ //1鍏佽鍙� 2鍏佽鏀�
+ int portStatus = conveyorLine.Communicator.Read<ushort>(deviceProDTO.DeviceProAddress);
+ //鏄惁鏈夎揣
+ int StationStatus = conveyorLine.Communicator.Read<ushort>(StationNumProDTO.DeviceProAddress);
+
+
+ if(DeStateName== "G01" || DeStateName == "G06" || DeStateName == "G07")
+ {
+ //鏈夎揣锛屽彲杩涗俊鍙�
+ statusValue = (portStatus == 1 && StationStatus == 1) ? 1 : (portStatus == 2 && StationStatus == 0) ?0: (portStatus == 0) ? 0 : 0;
+ }
+ else
+ {
+ statusValue = StationStatus == 1 ? 0 : 1;
+ }
+ portStatusDict[DeStateName] = statusValue;
}
return apiResponse.SuccessResponse(portStatusDict);
@@ -186,7 +210,7 @@
//鑾峰彇鍏夊箷鐘舵��
- public ApiResponse getSafeStatus(string[] datas)
+ public ApiResponse getSafeStatus(string[] datas)
{
WriteLog.Write_Log("鑾峰彇鍏夊箷鐘舵�佹帴鍙�", "鑾峰彇鍏夊箷鐘舵�佷俊鎭�", "璋冨彇鍙傛暟", setCurtain);
ApiResponse apiResponse = new ApiResponse();
@@ -205,47 +229,134 @@
return apiResponse.ErrorResponse($"WCS浠诲姟娣诲姞閿欒锛屽師鍥狅細{ex.Message}");
}
}
-
-
- //璁剧疆鍏夊箷
+ /// <summary>
+ /// 璁剧疆鍏夊箷
+ /// </summary>
+ /// <param name="setCurtain"></param>
+ /// <returns></returns>
public ApiResponse setCurtain(SetCurtainRequest setCurtain)
{
- //鑾峰彇WMS璋冨彇鐨勫弬鏁�
- WriteLog.Write_Log("璁剧疆鍏夊箷鎺ュ彛", "璁剧疆鍏夊箷淇℃伅", "璋冨彇鍙傛暟", setCurtain);
+ if (setCurtain == null || setCurtain.Datas == null || setCurtain.Datas.Length == 0)
+ {
+ return new ApiResponse().ErrorResponse("璇锋眰鍙傛暟鎴栧簱鍙e垪琛ㄤ笉鑳戒负绌�");
+ }
+ if (string.IsNullOrWhiteSpace(setCurtain.Operate))
+ {
+ return new ApiResponse().ErrorResponse("鎿嶄綔绫诲瀷(Operate)涓嶈兘涓虹┖");
+ }
+ WriteLog.Write_Log("璁剧疆鍏夊箷鎺ュ彛", "璁剧疆鍏夊箷鎺ュ彛淇℃伅", $"搴撳彛鍚嶇О锛氥�恵string.Join(",", setCurtain.Datas)}銆�,鐢宠鐘舵�侊細銆恵setCurtain.Operate}銆�");
ApiResponse apiResponse = new ApiResponse();
+ bool allSuccess = true;
+ var specialPorts = new[] { "G01", "G06", "G07" };
+
try
{
- return apiResponse.SuccessResponse();
+ foreach (string portName in setCurtain.Datas)
+ {
+ if (string.IsNullOrWhiteSpace(portName)) { allSuccess = false; continue; }
+ string deviceCode = portName.StartsWith("C") ? "1004" : "1003";
+
+ CommonConveyorLine? conveyorLine = Storage.Devices.FirstOrDefault(x => x.DeviceCode == deviceCode) as CommonConveyorLine;
+ if (conveyorLine == null) { allSuccess = false; continue; }
+
+ DeviceProDTO? handShakeDto = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == portName && x.DeviceProParamName == "HandShake");
+ DeviceProDTO? requestDto = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == portName && x.DeviceProParamName == "Request");
+ if (handShakeDto == null) { allSuccess = false; continue; }
+
+ bool writeResult = false;
+ //StringComparison.OrdinalIgnoreCase鏄吋瀹瑰ぇ灏忓啓
+ if (setCurtain.Operate.Equals("OPEN", StringComparison.OrdinalIgnoreCase))
+ {
+ if (specialPorts.Contains(portName))
+ writeResult = conveyorLine.Communicator.Write<short>(requestDto.DeviceProAddress, 0);
+ else
+ writeResult = conveyorLine.Communicator.Write<short>(handShakeDto.DeviceProAddress, 0);
+ }
+ else if (setCurtain.Operate.Equals("CLOSE", StringComparison.OrdinalIgnoreCase))
+ {
+ if (specialPorts.Contains(portName))
+ writeResult = conveyorLine.Communicator.Write<short>(handShakeDto.DeviceProAddress, 1) && conveyorLine.Communicator.Write<short>(requestDto.DeviceProAddress, 1);
+ else
+ writeResult = conveyorLine.Communicator.Write<short>(handShakeDto.DeviceProAddress, 1);
+ }
+ if (!writeResult) allSuccess = false;
+ }
+
+ return allSuccess ? apiResponse.SuccessResponse() : apiResponse.ErrorResponse("閮ㄥ垎/鍏ㄩ儴搴撳彛鍐欏叆PLC淇″彿澶辫触");
}
catch (Exception ex)
{
- return apiResponse.ErrorResponse($"WCS浠诲姟娣诲姞閿欒锛屽師鍥狅細{ex.Message}");
+ WriteLog.Write_Log("璁剧疆鍏夊箷鎺ュ彛寮傚父", "閿欒淇℃伅", ex.ToString());
+ return apiResponse.ErrorResponse($"WCS璁剧疆鍏夊箷閿欒锛屽師鍥狅細{ex.Message}");
}
}
-
-
- //agv杩涘嚭鐘舵�佸弽棣�
+ #endregion
+ /// <summary>
+ /// agv杩涘嚭鍏ュ弽棣�
+ /// </summary>
+ /// <param name="agvUpdateRequest"></param>
+ /// <returns></returns>
public ApiResponse getAGVStatus(AgvUpdateRequest agvUpdateRequest)
{
- //鑾峰彇WMS璋冨彇鐨勫弬鏁�
- WriteLog.Write_Log("agv杩涘嚭鐘舵�佸弽棣堟帴鍙�", "agv杩涘嚭鐘舵�佷俊鎭�", "璋冨彇鍙傛暟", setCurtain);
+ if (agvUpdateRequest == null) return new ApiResponse().ErrorResponse("璇锋眰鍙傛暟涓嶈兘涓虹┖");
+ if (string.IsNullOrWhiteSpace(agvUpdateRequest.warehousenumber)) return new ApiResponse().ErrorResponse("搴撳彛缂栧彿涓嶈兘涓虹┖");
+ WriteLog.Write_Log("agv杩涘嚭鐘舵�佸弽棣堟帴鍙�", "agv杩涘嚭鐘舵�佷俊鎭�", $"搴撳彛鍚嶇О锛氥�恵agvUpdateRequest.warehousenumber}銆戯紝鐢宠鐘舵�侊細銆恵agvUpdateRequest.agvstatus}銆�");
ApiResponse apiResponse = new ApiResponse();
+
try
{
+ string deviceCode = agvUpdateRequest.warehousenumber.StartsWith("C") ? "1004" : "1003";
+ CommonConveyorLine? conveyorLine = Storage.Devices.FirstOrDefault(x => x.DeviceCode == deviceCode) as CommonConveyorLine;
+ if (conveyorLine == null) return apiResponse.ErrorResponse("WCS鏈兘鑾峰彇鍒板簱鍙e疄渚�");
- return apiResponse.SuccessResponse();
+ DeviceProDTO? handShake = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == agvUpdateRequest.warehousenumber && x.DeviceProParamName == "HandShake");
+ if (handShake == null) return apiResponse.ErrorResponse($"WCS鏈壘鍒板簱鍙o細{agvUpdateRequest.warehousenumber},瀵瑰簲鐨勫崗璁�");
+ DeviceProDTO? request = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == agvUpdateRequest.warehousenumber && x.DeviceProParamName == "Request");
+
+ if (agvUpdateRequest.agvstatus == 1)
+ {
+ bool writeHandShake = conveyorLine.Communicator.Write<short>(handShake.DeviceProAddress, 1);
+ if (!writeHandShake) return apiResponse.ErrorResponse("鍐欏叆plc杩涘叆淇″彿澶辫触");
+ if (request != null) conveyorLine.Communicator.Write<short>(request.DeviceProAddress, 1);
+
+ var specialPorts = new[] { "G01", "G06", "G07" };
+ if (specialPorts.Contains(agvUpdateRequest.warehousenumber))
+ {
+ DeviceProDTO? permitHandShake = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == agvUpdateRequest.warehousenumber && x.DeviceProParamName == "PermitHandShake");
+ DeviceProDTO? stationNum = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == agvUpdateRequest.warehousenumber && x.DeviceProParamName == "StationNum");
+ if (permitHandShake == null || stationNum == null) return apiResponse.ErrorResponse($"WCS鏈壘鍒板簱鍙o細{agvUpdateRequest.warehousenumber},瀵瑰簲鐨勫崗璁�");
+
+ int portStatus = conveyorLine.Communicator.Read<ushort>(permitHandShake.DeviceProAddress);
+ int stationStatus = conveyorLine.Communicator.Read<ushort>(stationNum.DeviceProAddress);
+ bool canEnter = (portStatus == 1 && stationStatus == 1) || (portStatus == 2 && stationStatus == 0);
+ if (!canEnter)
+ {
+ if (request != null) conveyorLine.Communicator.Write<short>(request.DeviceProAddress, 0);
+ return apiResponse.ErrorResponse("璇诲彇plc涓嶅彲杩涘叆淇℃伅");
+ }
+ }
+ return apiResponse.SuccessResponse();
+ }
+ else if (agvUpdateRequest.agvstatus == 2)
+ {
+ bool clearHandShake = conveyorLine.Communicator.Write<short>(handShake.DeviceProAddress, 0);
+ if (!clearHandShake) return apiResponse.ErrorResponse("鍐欏叆plc娓呴櫎淇″彿澶辫触");
+ if (request != null) conveyorLine.Communicator.Write<short>(request.DeviceProAddress, 0);
+ return apiResponse.SuccessResponse();
+ }
+ else
+ {
+ return apiResponse.ErrorResponse($"agv瀵瑰簲鐨勭敵璇烽敊璇紝瀛楁锛歛gvstatus锛岀敵璇风殑鍊硷細{agvUpdateRequest.agvstatus}");
+ }
}
catch (Exception ex)
{
- return apiResponse.ErrorResponse($"WCS浠诲姟娣诲姞閿欒锛屽師鍥狅細{ex.Message}");
+ return apiResponse.ErrorResponse($"WCS AGV鐘舵�侀敊璇紝鍘熷洜锛歿ex.Message}");
}
}
- #endregion
-
-
#region 璋冨彇涓婃父鎺ュ彛
public CommandResult taskreturn(int taskId, string taskType, string invType, string psd)
@@ -257,18 +368,21 @@
taskInfo1.taskId = taskId;
taskInfo1.taskType = taskType;
taskInfo1.invType = invType;
- taskInfo1.psd = psd;
+ taskInfo1.psd = "akjfapjfpadaoif";
+
commandResult = HttpHelper.Post<CommandResult>(urlWMStaskreturn, taskInfo1, "浠诲姟鐘舵�佸洖璋�");
- WriteLog.Write_Log("鍚屾缁欎笂娓稿弽棣堜换鍔″畬鎴�", "浠诲姟淇℃伅", $"浠诲姟鍙凤細{taskId}", $"璋冨彇鍙傛暟锛歿taskInfo1.ToJson()},杩斿洖鍙傛暟锛歿commandResult.ToJson()}");
+ WriteLog.Write_Log("鍚屾缁欎笂娓稿弽棣堜换鍔″畬鎴�", "浠诲姟淇℃伅", $"浠诲姟鍙凤細銆恵taskId}銆�", $"璋冨彇鍙傛暟锛氥�恵taskInfo1.ToJsonString()}銆慭n杩斿洖鍙傛暟锛歿commandResult.ToJsonString()}銆�");
return commandResult;
}
catch (Exception ex)
{
+ Console.WriteLine("璋冨彇涓婃父鎺ュ彛閿欒锛氬師鍥狅細"+ex.Message);
commandResult.status = "error";
- commandResult.result = $"WCS鎺ュ彛閿欒锛屽師鍥狅細{ex.Message}";
+ string resujos = $"WCS鎺ュ彛閿欒锛屽師鍥狅細{ex.Message}";
+ commandResult.result = resujos.ToJsonString();
- WriteLog.Write_Log("鍚屾缁欎笂娓稿弽棣堜换鍔″畬鎴�", "浠诲姟淇℃伅", $"浠诲姟鍙凤細{taskId}", $"WCS鎺ュ彛閿欒锛屽師鍥狅細{ex.Message}");
+ WriteLog.Write_Log("鍚屾缁欎笂娓稿弽棣堜换鍔″畬鎴�", "浠诲姟淇℃伅", $"浠诲姟鍙凤細銆恵taskId}銆�", $"闇�瑕佷笂浼燱MS淇℃伅鍐呭锛氥�恵commandResult.ToJsonString()}銆慭nWCS鎺ュ彛閿欒锛屽師鍥狅細{ex.Message}");
return commandResult;
}
@@ -296,7 +410,7 @@
}
},
dealType = dealType,
- psd = psd
+ psd = "akjfapjfpadaoif",
};
commandResult = HttpHelper.Post<CommandResult>(urlWMSdeverror, deviceErrorRequest, "璁惧鏁呴殰鍥炶皟");
@@ -306,7 +420,9 @@
catch (Exception ex)
{
commandResult.status = "error";
- commandResult.result = $"WCS鎺ュ彛閿欒锛屽師鍥狅細{ex.Message}";
+ string resujos = $"WCS鎺ュ彛閿欒锛屽師鍥狅細{ex.Message}";
+ commandResult.result = resujos.ToJsonString();
+
WriteLog.Write_Log("鍚屾缁欎笂娓歌澶囨晠闅滀俊鎭�", "璁惧鏁呴殰淇℃伅", $"璁惧id锛歿devuuid}锛屽け璐�", $"WCS鎺ュ彛閿欒锛屽師鍥狅細{ex.Message}");
return commandResult;
@@ -334,7 +450,9 @@
catch (Exception ex)
{
commandResult.status = "error";
- commandResult.result = $"WCS鎺ュ彛閿欒锛屽師鍥狅細{ex.Message}";
+ string resujos = $"WCS鎺ュ彛閿欒锛屽師鍥狅細{ex.Message}";
+ commandResult.result = resujos.ToJsonString();
+
WriteLog.Write_Log("鍚屾缁欎笂娓告彁鍗囧埌浣嶄俊鎭�", "淇℃伅鍐呭", $"閿欒淇℃伅", $"WCS鎺ュ彛閿欒锛屽師鍥狅細{ex.Message}");
return commandResult;
}
--
Gitblit v1.9.3