From e0d89637030791ce1e7dd46ca5fdec9979977960 Mon Sep 17 00:00:00 2001 From: 杨前锦 <1010338399@qq.com> Date: 星期三, 11 六月 2025 17:28:41 +0800 Subject: [PATCH] 印尼佳通-硫化流程出入库流程开发 --- HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/WCSCore.cs | 262 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 262 insertions(+), 0 deletions(-) diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/WCSCore.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/WCSCore.cs new file mode 100644 index 0000000..90f2243 --- /dev/null +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/WCSCore.cs @@ -0,0 +1,262 @@ +锘縰sing HH.WCS.Mobox3.FJJF.models; +using HH.WCS.Mobox3.FJJT.api; +using HH.WCS.Mobox3.FJJT.device; +using HH.WCS.Mobox3.FJJT.dispatch; +using HH.WCS.Mobox3.FJJT.process; +using HH.WCS.Mobox3.FJJT.wms; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web.Http; +using static HH.WCS.Mobox3.FJJT.api.ApiHelper; +using static HH.WCS.Mobox3.FJJT.api.ApiModel; +using HH.WCS.Mobox3.FJJT.util; + +namespace HH.WCS.Mobox3.FJJT.core { + internal class WCSCore { + + /// <summary> + /// AGV浠诲姟鍥炴姤 + /// 1.鏍规嵁鍥炴姤AGV浠诲姟鐘舵�锛屾洿鏂拌揣浣嶄俊鎭拰浠诲姟鐘舵� + /// 2.鍒ゆ柇WMSTask鏄惁鏄嚭搴撲换鍔★紝鏄紝濡傛灉宸ヨ鍐呮湁鐗╂枡锛屽垯鍒ゆ柇鐗╂枡鏄惁鍚堟牸锛屼笉鍚堟牸锛屽垯鐢熸垚涓嶅悎鏍煎搧鍏ュ簱浠诲姟 + /// 3.濡傛灉鍚堟牸锛屽垯瑙﹀彂浣欐枡/绌烘墭鍥炲簱浠诲姟 + /// </summary> + /// <param name="model"></param> + public static void OperateAgvTaskStatus(AgvTaskState model) { + try + { + if (string.IsNullOrEmpty(model.No)) + { + //鏃犱换鍔″彿璇锋眰(浜ょ) + //DeviceProcess.Traffic(model.ForkliftNo, model.LockNo, model.State==1023); + } + else + { + var cst = WCSHelper.GetTask(model.No); + + if (cst != null) + { + var mst = WMSHelper.GetWmsTask(cst.S_OP_CODE); + if (mst != null) + { + WCSHelper.AddActionRecord(model.No, model.State, model.ForkliftNo, model.ExtData); + if (model.State <= 7) + { + //鏈変换鍔″彿璇锋眰 + switch (model.State) + { + case 1: + WCSHelper.Begin(cst); + WMSHelper.updateMesTaskStatus(mst.S_CODE, "2"); // 鏇存柊MES浠诲姟鐘舵� + break; + #region MyRegion + case 3: + WCSHelper.UpdateStatus(cst, "寮�鍙栬揣"); + var locCntrRels = LocationHelper.GetLocCntr(cst.S_START_LOC); + if (locCntrRels.Count > 0) + { + cst.S_CNTR_CODE = locCntrRels[0].S_CNTR_CODE; + WCSHelper.UpdateWcsTask(cst); + } + break; + case 4: + WCSHelper.UpdateStatus(cst, "鍙栬揣瀹屾垚"); + LocationHelper.UnLockLoc(cst.S_START_LOC); + TaskProcess.OperateStatus(cst, 4); + break; + case 5: + WCSHelper.UpdateStatus(cst, "寮�鍗歌揣"); + break; + case 6: + WCSHelper.UpdateStatus(cst, "鍗歌揣瀹屾垚"); + LocationHelper.UnLockLoc(cst.S_END_LOC); + TaskProcess.OperateStatus(cst, 6); + break; + #endregion + case 2: + WCSHelper.End(cst); + break; + case 7: + TaskProcess.OperateStatus(cst, 7); + WCSHelper.Fail(cst); + break; + } + } + else if (model.State == 1012) + { + LogHelper.Info("寮�杩涜RFID鎵弿", "AGV"); + ContainerHelper.UpdateCntrState(cst.S_CNTR_CODE, 1); + WMSHelper.addRfidAnomalyRecord(cst.S_CNTR_CODE, 2, cst.S_START_LOC, null); + // 鏌ヨ鎵弿鐨凴FID + // 鍙戦� 00 04 71 02鍒版壂鐮佸櫒 锛屾帴鍙楄繑鍥炴暟鎹苟瑙f瀽 + /* byte[] bytes = new byte[] { 00, 04, 71, 02 }; + var plc = Settings.carDeviceInfos.Where(a => a.deviceNo == model.ForkliftNo && a.enable == 1).FirstOrDefault(); + TcpServer.TcpServerSend(plc.address, bytes);*/ + } + else if (model.State == 1002) + { + LogHelper.Info("寮�鑾峰彇AGV缁堢偣", "AGV"); + // 鏇存柊AGV缁堢偣 + // 鍒ゆ柇瀹瑰櫒鏄惁寮傚父锛屼慨鏀�002鐨勭粓鐐瑰弬鏁�锛屽苟灏嗗弬鏁�淇敼涓� + Container container = ContainerHelper.GetCntr(cst.S_CNTR_CODE); + if (container != null) + { + LogHelper.Info($"瀹瑰櫒鐨勫紓甯哥姸鎬佷负锛歿container.N_E_STATE}", "AGV"); + string agvEndLoc = null; + if (container.N_E_STATE == 0) + { + agvEndLoc = ApiHelper.AGVApplyDest(model.No, cst.S_START_LOC, cst.S_CNTR_CODE, "1"); + } + else + { + agvEndLoc = ApiHelper.AGVApplyDest(model.No, cst.S_START_LOC, cst.S_CNTR_CODE, "2"); + } + + ChangeParamModel paramModel = new ChangeParamModel() + { + task_no = model.No, + param_no = 0, + param = $"{model.No};{cst.S_START_LOC};{cst.S_END_LOC};4;512;0;1" + }; + NDCApi.ChangeOrderParam(paramModel); + LogHelper.Info($"鍙樻洿AGV缁堢偣锛歿agvEndLoc}", "AGV"); + } + else + { + WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"AGV浠诲姟鍥炴姤,浠诲姟瀹瑰櫒缂栫爜:{cst.S_CNTR_CODE}鐨勫鍣ㄦ病鏈夊綍鍏ュ埌WMS绯荤粺","AGV"); + } + } + else + { + //瀹夊叏璇锋眰绛�+ TaskProcess.OperateReq(model.No, model.State, model.ForkliftNo, model.ExtData); + } + + // AGV浠诲姟瀹屾垚 + if (model.State == 2) + { + // 妫�祴鐗╂枡鏄惁鍚堟牸,濡備笉鍚堟牸锛�+ // 鍒ゆ柇鐗╂枡鏄惁鏄幆甯﹀簱鐗╂枡锛屾槸鍒欏洖鐜甫搴擄紝骞惰鐜甫涓嬪彂鏂扮殑鐗╂枡 + // 闈炵幆甯﹀簱鐗╂枡锛屽垯閫�嚭绔嬪簱锛屽悓鏃朵笅鍙戞柊鐨勭墿鏂欏嚭搴撲换鍔�+ if (cst.S_TYPE.Contains("鍙枡鍑哄簱浠诲姟")) + { + var cntrItemRels = ContainerHelper.GetCntrItemRel(cst.S_CNTR_CODE); + if (cntrItemRels != null && cntrItemRels.Count > 0) + { + if (cntrItemRels[0].S_ITEM_STATE == "2") + { + // 涓嶅悎鏍煎搧鍥炲簱 + ApiHelper.rejectReturnStock(mst, cst); + } + } + } + + // 妫�祴鏄惁鏄鐮佷綅锛岄潪璇荤爜浣嶏紝鍙互婵�椿棰勫垱寤轰换鍔�+ var transfe = WMSHelper.GetTransfeRelevance(cst.S_END_LOC); // 鎺ラ┏浣嶅睘鎬�+ if (transfe != null && transfe.N_READ_LOC == 1) + { + WCSHelper.ActivatePreCreateTask(mst.S_CODE); + } + else if ( transfe.N_READ_LOC == 0) + { + if (cst.S_TYPE.Contains("銆愬紓甯搞�")) + { + WCSHelper.ActivatePreCreateTask(mst.S_CODE,1); + } + else + { + WCSHelper.ActivatePreCreateTask(mst.S_CODE); + } + } + + // 鏌ヨ鏄惁鏈夋湭瀹屾垚鐨勪换鍔�+ if (WMSHelper.isFinishTask(mst.S_CODE)) + { + // 鏇存柊浣滀笟浠诲姟鐘舵� + mst.N_B_STATE = 2; + mst.T_END_TIME = DateTime.Now; + WMSHelper.UpdateTaskState(mst); + + // 鏇存柊浠诲姟涓棿琛ㄧ姸鎬�+ WMSHelper.updateMesTaskStatus(mst.S_CODE, "3"); + + // 濡傛灉浣滀笟鍚嶇О涓烘垚鍨嬫満鍙枡鍑哄簱浠诲姟锛屽垯瑙﹀彂浣欐枡/绌烘墭鎼繍浠诲姟 + string locCode = WMSHelper.getReturnMaterialLocCode(mst.S_END_LOC); + ApiHelper.returnMaterialOrEmptyTray(locCode); + } + } + } + else + { + WMSHelper.addAlarmRecord("绯荤粺閿欒", "楂�, $"AGV浠诲姟鐘舵�鍥炴姤锛屼綔涓氬彿:{cst.S_OP_CODE}锛屾湭鏌ヨ鍒颁綔涓�,"AGV"); + } + } + else + { + WMSHelper.addAlarmRecord("绯荤粺閿欒", "楂�, $"AGV浠诲姟鐘舵�鍥炴姤锛屼换鍔″彿:{model.No}锛屾湭鏌ヨ鍒颁换鍔�,"AGV"); + } + } + } + catch (Exception ex) + { + WMSHelper.addAlarmRecord("绯荤粺閿欒","楂�, $"WMS鍐呴儴閿欒锛歛gv浠诲姟鐘舵�鍥炴姤閿欒锛岄敊璇師鍥�{ex.Message}","AGV"); + } + } + + /// <summary> + /// 浠诲姟鍒嗗彂锛屾牴鎹皟搴︾被鍨嬪彂缁欎笉鍚岀殑璋冨害绯荤粺 + /// </summary> + internal static void Dispatch() { + //鏌ヨ浠诲姟 + //鑾峰彇鎵�湁绛夊緟鐨勪换鍔�+ var list = WCSHelper.GetWaitingTaskList(); + if (list.Count > 0) { + list.ForEach(task => { + + if (!TaskProcess.Intercept(task)) { + //浣跨敤鑷畾涔変换鍔℃帹閫�+ TaskProcess.SendTask(task); + } + + }); + + + } + } + + /// <summary> + /// 鏉ゥ鍫嗗灈鏈轰俊鍙峰弽棣�+ /// </summary> + /// <param name="model"></param> + internal static void OperateHATaskStatus(HanAo.TaskStateInfoModel model) { + var wcsTask = WCSHelper.GetTask(model.requestPk); + if (wcsTask != null) { + if (model.code == "0") { + // + if (wcsTask.S_TYPE == "鍫嗗灈鏈哄叆搴�) { + //缁堢偣鎵樼洏缁戝畾 + if (LocationHelper.BindingLoc(wcsTask.S_END_LOC, new List<string> { wcsTask.S_CNTR_CODE })) { + //淇敼鎵樼洏鐘舵�涓哄彲鐢紝澧炲姞搴撳瓨閲忚〃锛屽悗闈㈠垎鎷e嚭鍙互璁$畻鍒�+ + + } + } + else if (wcsTask.S_TYPE == "鍫嗗灈鏈哄嚭搴�) { + //璧风偣鎵樼洏瑙g粦 + LocationHelper.UnBindingLoc(wcsTask.S_START_LOC, new List<string> { wcsTask.S_CNTR_CODE }); + } + //鏍囪浠诲姟瀹屾垚 + //鏍囪浣滀笟瀹屾垚 + wcsTask.N_B_STATE = 3; + WCSHelper.UpdateStatus(wcsTask); + var wmsTask = WMSHelper.GetWmsTask(wcsTask.S_OP_CODE); + if (wmsTask != null) { + wmsTask.N_B_STATE = 2; + WMSHelper.UpdateTaskState(wmsTask); + } + } + } + } + } +} -- Gitblit v1.9.1