From a93b0e99036c24b9bd58c79bf5e7364b1ba28bae Mon Sep 17 00:00:00 2001 From: 杨前锦 <1010338399@qq.com> Date: 星期二, 01 七月 2025 16:02:33 +0800 Subject: [PATCH] 福建佳通-流程优化 --- HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs | 989 +++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 771 insertions(+), 218 deletions(-) diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs index 98b534f..c8f040b 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs @@ -1,8 +1,10 @@ -锘縰sing HH.WCS.Mobox3.YNJT_PT.device; +锘縰sing HH.WCS.Mobox3.YNJT_PT.core; +using HH.WCS.Mobox3.YNJT_PT.device; using HH.WCS.Mobox3.YNJT_PT.models; using HH.WCS.Mobox3.YNJT_PT.process; using HH.WCS.Mobox3.YNJT_PT.util; using HH.WCS.Mobox3.YNJT_PT.wms; +using MySqlX.XDevAPI.Common; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using SqlSugar; @@ -11,10 +13,15 @@ using System.Collections.Generic; using System.Linq; using System.Reflection; +using System.Text.RegularExpressions; using System.Threading; +using Ubiety.Dns.Core; using static HH.WCS.Mobox3.YNJT_PT.api.ApiModel; using static HH.WCS.Mobox3.YNJT_PT.api.OtherModel; using static HH.WCS.Mobox3.YNJT_PT.api.WmsController; +using static HH.WCS.Mobox3.YNJT_PT.dispatch.WCSDispatch; +using static HH.WCS.Mobox3.YNJT_PT.util.Settings; +using static HH.WCS.Mobox3.YNJT_PT.wms.WMSHelper; using static System.Net.Mime.MediaTypeNames; namespace HH.WCS.Mobox3.YNJT_PT.api { @@ -30,42 +37,35 @@ /// 鎴愬瀷鏈轰笅绾胯褰� /// </summary> /// <param name="model"></param> - public static ResponseResult cxjOffLineRecord(OffLineModel model) + public static ResponseResult cxjOffLineRecord(NotifyDeviceSignalModel model) { ResponseResult response = new ResponseResult(); - var container = ContainerHelper.GetCntr(model.rfid); - var location = LocationHelper.GetLoc(model.loc); - if (location != null) + var container = ContainerHelper.GetCntr(model.cntrNo); + if (container == null) { - if (container == null) - { - ContainerHelper.AddCntr(model.rfid); - } - - try - { - OffLineRecord record = new OffLineRecord() - { - S_RFID = model.rfid, - S_LOC = model.loc, - N_IS_URGENT = model.isUrgent, - T_OFF_TIME = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), - N_IS_FULL = model.isFull, - - }; - WMSHelper.addOffLineRecord(record); - } - catch (Exception ex) - { - LogHelper.Info($"娣诲姞鎴愬瀷鏈轰笅绾胯褰曢敊璇紝閿欒鍘熷洜锛歿ex.Message}", "WMS"); - response.code = 500; - response.msg = "WMS绯荤粺鍐呴儴閿欒锛岃鑱旂郴寮�彂浜哄憳鎺掓煡闂"; - } + ContainerHelper.AddCntr(model.cntrNo); } - else + + try { - response.code = 1; - response.msg = $"璐т綅锛歿model.loc}涓嶅瓨鍦�; + OffLineModel extData1 = JsonConvert.DeserializeObject<OffLineModel>(model.extData.ToString()); + OffLineRecord record = new OffLineRecord() + { + S_RFID = model.cntrNo, + S_DEVICE_NO = model.deviceNo, + N_IS_URGENT = extData1.isUrgent, + T_OFF_TIME = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + N_IS_FULL = extData1.isFull, + N_NEED_PAIR = extData1.needPair, + S_LOC = model.loc + }; + WMSHelper.addOffLineRecord(record); + } + catch (Exception ex) + { + LogHelper.Info($"娣诲姞鎴愬瀷鏈轰笅绾胯褰曢敊璇紝閿欒鍘熷洜锛歿ex.Message}", "WMS"); + response.code = 500; + response.msg = "WMS绯荤粺鍐呴儴閿欒锛岃鑱旂郴寮�彂浜哄憳鎺掓煡闂"; } return response; } @@ -80,7 +80,7 @@ var startLoc = LocationHelper.GetLoc(model.loc); if (startLoc != null) { - List<BarcodeModel> extData = model.extData; + List<BarcodeModel> extData = JsonConvert.DeserializeObject<List<BarcodeModel>>(model.extData.ToString()); int dataCount = extData.Count; if (dataCount > 0) { @@ -89,129 +89,104 @@ { response.code = 1; response.msg = "rfid涓嶈兘涓虹┖"; + return response; } else { - Dictionary<BarcodeModel, bool> rfidDic = new Dictionary<BarcodeModel, bool>(); - foreach (var ext in extData) + if (extData.Count > 0) { - string rfid = ext.rfid; - if (rfid.Contains("ET")) + List<BarcodeModel> barcodeList = new List<BarcodeModel>(); + foreach (var ext in extData) { - rfidDic.Add(ext, false); - } - else - { - // 1.鏌ヨ鎴愬瀷鏈轰腑闂磋〃锛宺fid 鏄惁瀛樺湪 - var offLineRecord = WMSHelper.getOffLineRecord(rfid); - if (offLineRecord != null) + string rfid = ext.rfid; + if (rfid == "88888888") { - // 2.鏌ヨ鐗╂枡鏉$爜淇℃伅琛紝鏉$爜淇℃伅鏄惁瀛樺湪 - var itemBarcodeInfo = WMSHelper.GetGreenTireInformation(ext.barcode); - if (itemBarcodeInfo == null) - { - rfidDic.Add(ext, false); - } - else - { - rfidDic.Add(ext, true); - } + // 璁板綍鎵樼洏寮傚父 + } - else + else { - rfidDic.Add(ext, false); - } - } - } - - // 鍒ゆ柇鏄惁鏈夊紓甯告墭鐩�- bool isNormal = rfidDic.Where(a => a.Value == false).Count() == 0; - if (isNormal && extData.Count == 2) - { - // 鍙屾墭姝e父鏂欏叆搴�- Location endLoc = null; - var itemBarcodeInfo = WMSHelper.GetGreenTireInformation(extData[0].barcode); - string groupNo = WMSHelper.GenerateTaskGroupNo(); - var endLocList = WMSHelper.getInStockEndLoc(itemBarcodeInfo.ITEMCODE, 2); - if (endLocList.Count == 2) - { - var rfidList = rfidDic.Keys.ToList(); - for (int i = 0; i < rfidList.Count; i++) - { - endLoc = endLocList[i]; - var wmsTask = new WMSTask() + // 鏌ヨ鎴愬瀷鏈轰腑闂磋〃锛宺fid 鏄惁瀛樺湪 + var offLineRecord = WMSHelper.getOffLineRecord(rfid); + if (offLineRecord != null) { - S_CNTR_CODE = rfidList[i].rfid, - S_CODE = WMSHelper.GenerateTaskNo(), - S_START_LOC = startLoc.S_CODE, - S_START_AREA = startLoc.S_AREA_CODE, - S_END_LOC = endLoc.S_CODE, - S_END_AREA = endLoc.S_AREA_CODE, - S_TYPE = "婊℃枡涓嬬嚎鍏ュ簱浠诲姟", - S_OP_DEF_CODE = model.reqId, - S_OP_DEF_NAME = "鎴愬瀷鏈烘弧鏂欎笅绾垮叆搴�, - N_PRIORITY = 1, - T_START_TIME = DateTime.Now, - S_GROUP_NO = groupNo, - }; - if (WMSHelper.CreateWmsTask(wmsTask)) - { - // 鍒涘缓涓�鍏ュ簱浠诲姟 - WCSTask wcsTask = new WCSTask() + if (offLineRecord.N_IS_FULL == 1) { - S_OP_NAME = wmsTask.S_OP_DEF_NAME, - S_OP_CODE = wmsTask.S_CODE, - S_CODE = WCSHelper.GenerateTaskNo(), - S_CNTR_CODE = wmsTask.S_CNTR_CODE, - S_TYPE = wmsTask.S_TYPE, - S_START_LOC = startLoc.S_CODE, - S_START_AREA = startLoc.S_AREA_CODE, - S_END_LOC = endLoc.S_CODE, - S_END_AREA = endLoc.S_AREA_CODE, - S_SCHEDULE_TYPE = "WCS", - N_PRIORITY = 1, - T_START_TIME = DateTime.Now, - }; + if (ext.barcode.Contains("99999999")) + { + // 璁板綍鏉$爜鎵弿寮傚父 - if (WCSHelper.CreateTask(wcsTask)) - { - // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�- LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); - LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); + } + else + { + // 2.鏌ヨ鐗╂枡鏉$爜淇℃伅琛紝鏉$爜淇℃伅鏄惁瀛樺湪 + var itemBarcodeInfo = WMSHelper.GetGreenTireInformation(ext.barcode); + if (itemBarcodeInfo != null) + { + itemBarcodeInfo.N_URGENT_FLAG = offLineRecord.N_IS_URGENT; + // 璁$畻鐢熸晥鏃堕棿銆佸け鏁堟椂闂�+ var overage = WMSHelper.getOverage(itemBarcodeInfo.BARCODE); + LogHelper.Info($"璁$畻鐢熸晥鏃堕棿銆佸け鏁堟椂闂达紝杩斿洖鍊硷細{JsonConvert.SerializeObject(overage)}", "WMS"); + if (overage != null) + { + DateTime txndate = DateTime.Parse(itemBarcodeInfo.TXNDATE); + DateTime minTime = txndate.AddHours(overage.MINHOUR); + DateTime maxTime = txndate.AddDays(overage.OVERAGE); + itemBarcodeInfo.S_EFFECTIVE_TIME = minTime.ToString("yyyy-MM-dd HH:mm:ss"); + itemBarcodeInfo.S_EXPIRATION_TIME = maxTime.ToString("yyyy-MM-dd HH:mm:ss"); + } + else + { + response.code = 1; + response.msg = $"鏈煡璇㈠埌鐗╂枡瀛樻斁鏃堕棿閰嶇疆淇℃伅锛屾潯褰㈢爜锛歿itemBarcodeInfo.BARCODE}"; + return response; + } - // 鏇存柊浣滀笟浠诲姟鐘舵� - wmsTask.N_B_STATE = 1; - WMSHelper.UpdateTaskState(wmsTask); + ContainerHelper.addCntrItemRel(rfid, itemBarcodeInfo); + barcodeList.Add(ext); + } + else + { + // 璁板綍鏌ヨ鏉$爜淇℃伅寮傚父 - // 缁戝畾瀹瑰櫒鐗╂枡淇℃伅 - WMSHelper.bindBarcodeItemInfo(wmsTask.S_CNTR_CODE,itemBarcodeInfo); + } + } } } } } - else + + EndLocGroup endLocGroup = null; + if (barcodeList.Count > 0) { - response.code = 1; - response.msg = "搴撳尯娌℃湁鍙叆鐨勭┖璐т綅"; + string itemCode = null; + var cntrItemRels = ContainerHelper.GetCntrItemRel(barcodeList[0].rfid); + if (cntrItemRels.Count > 0) + { + itemCode = cntrItemRels[0].S_ITEM_CODE; + } + endLocGroup = WMSHelper.getInStockEndLoc(barcodeList.Count, itemCode); } - } - else - { - // 寮傚父鏂欏嚭搴撴淇�鎴�鍗曟嫋鐗╂枡鍏ュ簱 - foreach (var dic in rfidDic) + + foreach (var ext in extData) { - Location middleLoc = null; Location endLoc = null; - if (dic.Value) + string groupNo = null; + if (barcodeList.Contains(ext)) { - var itemBarcodeInfo = WMSHelper.GetGreenTireInformation(dic.Key.barcode); - var endLocList = WMSHelper.getInStockEndLoc(itemBarcodeInfo.ITEMCODE, 1); - if (endLocList.Count == 1) + // 婊℃枡鍏ュ簱 + if (endLocGroup != null) { - endLoc = endLocList[0]; + groupNo = endLocGroup.groupNo; + endLoc = endLocGroup.endLocList[0]; + endLocGroup.endLocList.Remove(endLoc); + } + + if (endLoc != null) + { var wmsTask = new WMSTask() { - S_CNTR_CODE = dic.Key.rfid, + S_CNTR_CODE = ext.rfid, S_CODE = WMSHelper.GenerateTaskNo(), S_START_LOC = startLoc.S_CODE, S_START_AREA = startLoc.S_AREA_CODE, @@ -222,6 +197,7 @@ S_OP_DEF_NAME = "鎴愬瀷鏈烘弧鏂欎笅绾垮叆搴�, N_PRIORITY = 1, T_START_TIME = DateTime.Now, + S_GROUP_NO = groupNo, }; if (WMSHelper.CreateWmsTask(wmsTask)) { @@ -252,64 +228,68 @@ wmsTask.N_B_STATE = 1; WMSHelper.UpdateTaskState(wmsTask); - // 缁戝畾瀹瑰櫒鐗╂枡淇℃伅 - WMSHelper.bindBarcodeItemInfo(wmsTask.S_CNTR_CODE, itemBarcodeInfo); + /*// 缁戝畾瀹瑰櫒鐗╂枡淇℃伅 + var itemBarcodeInfo = WMSHelper.GetGreenTireInformation(ext.barcode); + WMSHelper.bindBarcodeItemInfo(wmsTask.S_CNTR_CODE, itemBarcodeInfo);*/ } } } - else - { - response.code = 1; - response.msg = "搴撳尯娌℃湁鍙叆鐨勭┖璐т綅"; - } } - else + else { - middleLoc = WMSHelper.getMinTaskMiddleLoc(1); // 1.寮傚父鎺掑嚭浣�- endLoc = WMSHelper.getAbnormalAreaEmptyLoc(Settings.abnormalArea); - var wmsTask = new WMSTask() + // 寮傚父鎵樼洏鎺掗櫎 + var middleLoc = WMSHelper.getMinTaskMiddleLoc(1); // 1.鎺掑嚭浣�+ endLoc = WMSHelper.getOnlneLoc(2); // 2.绌烘墭涓婄嚎浣嶏紙鎺掑嚭鐨勬墭鐩橀兘鍑哄簱鍒扮┖鎵樹笂绾夸綅杩涜澶勭悊锛�+ if (endLoc != null && middleLoc != null) { - S_CNTR_CODE = dic.Key.rfid, - S_CODE = WMSHelper.GenerateTaskNo(), - S_START_LOC = startLoc.S_CODE, - S_START_AREA = startLoc.S_AREA_CODE, - S_END_LOC = endLoc.S_CODE, - S_END_AREA = endLoc.S_AREA_CODE, - S_TYPE = "寮傚父鎵樼洏鍑哄簱浠诲姟", - S_OP_DEF_CODE = model.reqId, - S_OP_DEF_NAME = "寮傚父鎵樼洏鍑哄簱妫�慨", - N_PRIORITY = 1, - T_START_TIME = DateTime.Now, - }; - if (WMSHelper.CreateWmsTask(wmsTask)) - { - // 鍒涘缓涓�鍏ュ簱浠诲姟 - WCSTask wcsTask = new WCSTask() + var wmsTask = new WMSTask() { - S_OP_NAME = wmsTask.S_OP_DEF_NAME, - S_OP_CODE = wmsTask.S_CODE, - S_CODE = WCSHelper.GenerateTaskNo(), - S_CNTR_CODE = wmsTask.S_CNTR_CODE, - S_TYPE = wmsTask.S_TYPE, + S_CNTR_CODE = ext.rfid, + S_CODE = WMSHelper.GenerateTaskNo(), S_START_LOC = startLoc.S_CODE, S_START_AREA = startLoc.S_AREA_CODE, - S_END_LOC = middleLoc.S_CODE, - S_END_AREA = middleLoc.S_AREA_CODE, - S_SCHEDULE_TYPE = "WCS", + S_END_LOC = endLoc.S_CODE, + S_END_AREA = endLoc.S_AREA_CODE, + S_TYPE = "寮傚父鎵樼洏鍑哄簱浠诲姟", + S_OP_DEF_CODE = model.reqId, + S_OP_DEF_NAME = "寮傚父鎵樼洏鍑哄簱妫�慨", N_PRIORITY = 1, T_START_TIME = DateTime.Now, }; - - if (WCSHelper.CreateTask(wcsTask)) + if (WMSHelper.CreateWmsTask(wmsTask)) { - // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�- LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); - LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); + // 鍒涘缓涓�鍏ュ簱浠诲姟 + WCSTask wcsTask = new WCSTask() + { + S_OP_NAME = wmsTask.S_OP_DEF_NAME, + S_OP_CODE = wmsTask.S_CODE, + S_CODE = WCSHelper.GenerateTaskNo(), + S_CNTR_CODE = wmsTask.S_CNTR_CODE, + S_TYPE = wmsTask.S_TYPE, + S_START_LOC = startLoc.S_CODE, + S_START_AREA = startLoc.S_AREA_CODE, + S_END_LOC = middleLoc.S_CODE, + S_END_AREA = middleLoc.S_AREA_CODE, + S_SCHEDULE_TYPE = "WCS", + N_PRIORITY = 1, + T_START_TIME = DateTime.Now, + }; - // 鏇存柊浣滀笟浠诲姟鐘舵� - wmsTask.N_B_STATE = 1; - WMSHelper.UpdateTaskState(wmsTask); + if (WCSHelper.CreateTask(wcsTask)) + { + // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+ LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); + LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); + + // 鏇存柊浣滀笟浠诲姟鐘舵� + wmsTask.N_B_STATE = 1; + WMSHelper.UpdateTaskState(wmsTask); + } } + } + else + { + LogHelper.Info("寮傚父鎵樼洏鎺掑嚭锛屾湭鑾峰彇寮傚父鎺掗櫎鎺ラ┏浣�, "WMS"); } } } @@ -332,6 +312,7 @@ /// <summary> /// 璇荤爜璇锋眰 + /// 鍦烘櫙锛�. /// </summary> public static ResponseResult readCodeRequest(NotifyDeviceSignalModel model) { @@ -340,60 +321,51 @@ { verifyResult = true }; - var wmsTask = WMSHelper.GetWmsTask(model.taskNo); - if (wmsTask != null) + var wcsTask = WCSHelper.GetTask(model.taskNo); + var wmsTask = WMSHelper.GetWmsTask(wcsTask.S_OP_CODE); + if (wcsTask != null && wmsTask != null) { - if (wmsTask.S_TYPE != "寮傚父鎵樼洏鍑哄簱浠诲姟") + Location endLoc = LocationHelper.GetLoc(wmsTask.S_END_LOC); // 鍘熺粓鐐�+ if (wcsTask.S_TYPE == "婊℃枡涓嬬嚎鍏ュ簱浠诲姟") { - Location endLoc = null; - Location middleLoc = null; // 鍒ゆ柇rfid鏄惁寮傚父 - if (model.cntrNo != wmsTask.S_CNTR_CODE) + if (model.cntrNo != wcsTask.S_CNTR_CODE) { - middleLoc = WMSHelper.getMinTaskMiddleLoc(1); // 1.寮傚父鎺掑嚭浣�- endLoc = WMSHelper.getAbnormalAreaEmptyLoc(Settings.abnormalArea); + // 鏌ヨ鎺掑嚭鍙�+ Location middleLoc = WMSHelper.getMinTaskMiddleLoc(1, 0, endLoc.N_ROADWAY); + // 鏌ヨ鏂扮粓鐐�+ endLoc = WMSHelper.getOnlneLoc(2); + + wcsTask.S_END_LOC = middleLoc.S_CODE; + wcsTask.S_END_AREA = middleLoc.S_AREA_CODE; + WCSHelper.updateTaskEnd(wcsTask); + wmsTask.S_END_LOC = endLoc.S_CODE; wmsTask.S_END_AREA = endLoc.S_AREA_CODE; WMSHelper.UpdateTaskEnd(wmsTask); - var wcsTask = WCSHelper.GetTaskBySrcNo(wmsTask.S_CODE); - if (wcsTask != null) - { - wcsTask.S_END_LOC = middleLoc.S_CODE; - wcsTask.S_END_AREA = middleLoc.S_AREA_CODE; - WCSHelper.updateTaskEnd(wcsTask); - } - readCodeFeedbackResponse.verifyResult = false; readCodeFeedbackResponse.endLoc = middleLoc.S_CODE; - response.data = readCodeFeedbackResponse; } - else + } + else if (wcsTask.S_TYPE == "鑳氳儙鍙枡鍑哄簱浠诲姟") + { + var cntrItemRels = ContainerHelper.GetCntrItemRel(wcsTask.S_CNTR_CODE); + if (model.cntrNo != wcsTask.S_CNTR_CODE || cntrItemRels.Count == 0 || cntrItemRels.Count > 0 && cntrItemRels[0].S_ITEM_STATE != "OK") { - var cntrItemRels = ContainerHelper.GetCntrItemRel(wmsTask.S_CNTR_CODE); - if (cntrItemRels.Count > 0) - { - if (cntrItemRels[0].S_ITEM_STATE != "OK") - { - middleLoc = WMSHelper.getMinTaskMiddleLoc(1); // 1.寮傚父鎺掑嚭浣�- endLoc = WMSHelper.getAbnormalAreaEmptyLoc(Settings.abnormalArea); - wmsTask.S_END_LOC = endLoc.S_CODE; - wmsTask.S_END_AREA = endLoc.S_AREA_CODE; - WMSHelper.UpdateTaskEnd(wmsTask); + // 璁$畻鎺掑嚭鍙�+ endLoc = WMSHelper.getCallOutLoc(endLoc.N_ROW); - var wcsTask = WCSHelper.GetTaskBySrcNo(wmsTask.S_CODE); - if (wcsTask != null) - { - wcsTask.S_END_LOC = middleLoc.S_CODE; - wcsTask.S_END_AREA = middleLoc.S_AREA_CODE; - WCSHelper.updateTaskEnd(wcsTask); - } + wcsTask.S_END_LOC = endLoc.S_CODE; + wcsTask.S_END_AREA = endLoc.S_AREA_CODE; + WCSHelper.updateTaskEnd(wcsTask); - readCodeFeedbackResponse.verifyResult = false; - readCodeFeedbackResponse.endLoc = middleLoc.S_CODE; - response.data = readCodeFeedbackResponse; - } - } + wmsTask.S_END_LOC = endLoc.S_CODE; + wmsTask.S_END_AREA = endLoc.S_AREA_CODE; + WMSHelper.UpdateTaskEnd(wmsTask); + + readCodeFeedbackResponse.verifyResult = false; + readCodeFeedbackResponse.endLoc = endLoc.S_CODE; } } } @@ -407,14 +379,596 @@ } /// <summary> - /// 纭寲鏈哄懠鍙儦鑳庡嚭搴�+ /// 寮傚父鐢宠锛堝彇娑堜换鍔★級 /// </summary> /// <param name="model"></param> - public static ResponseResult callItemOutStock(CallItemModel model) + /// <returns></returns> + public static ResponseResult anomalyRequest(NotifyDeviceSignalModel model) + { + ResponseResult response = new ResponseResult(); + readCodeFeedbackResponse readCodeFeedbackResponse = new readCodeFeedbackResponse() + { + verifyResult = true + }; + var wcsTask = WCSHelper.GetTask(model.taskNo); + var wmsTask = WMSHelper.GetWmsTask(wcsTask.S_OP_CODE); + if (wcsTask != null && wmsTask != null) + { + Location endLoc = LocationHelper.GetLoc(wmsTask.S_END_LOC); // 鍘熺粓鐐�+ if (wcsTask.S_TYPE == "婊℃枡涓嬬嚎鍏ュ簱浠诲姟") + { + // 鏌ヨ鎺掑嚭鍙�+ var middleLoc = WMSHelper.getMinTaskMiddleLoc(1, 0, endLoc.N_ROADWAY); + wcsTask.S_END_LOC = middleLoc.S_CODE; + wcsTask.S_END_AREA = middleLoc.S_AREA_CODE; + WCSHelper.updateTaskEnd(wcsTask); + readCodeFeedbackResponse.verifyResult = false; + readCodeFeedbackResponse.endLoc = middleLoc.S_CODE; + + // 鏌ヨ鏂扮粓鐐�+ endLoc = WMSHelper.getOnlneLoc(2); + } + else if (wcsTask.S_TYPE == "鑳氳儙鍙枡鍑哄簱浠诲姟") + { + endLoc = WMSHelper.getCallOutLoc(endLoc.N_ROW); + readCodeFeedbackResponse.verifyResult = false; + readCodeFeedbackResponse.endLoc = endLoc.S_CODE; + } + wmsTask.S_END_LOC = endLoc.S_CODE; + wmsTask.S_END_AREA = endLoc.S_AREA_CODE; + WMSHelper.UpdateTaskEnd(wmsTask); + } + else + { + response.code = 1; + response.msg = $"浠诲姟鍙凤細{model.taskNo},鏈煡璇㈠埌鎵ц涓殑浠诲姟"; + } + response.data = readCodeFeedbackResponse; + return response; + } + + /// <summary> + /// 鐢宠鏂扮粓鐐�+ /// </summary> + /// <param name="model"></param> + /// <returns></returns> + public static ResponseResult applyDest(ApplyDestModel model) + { + ResponseResult response = new ResponseResult(); + ApplyDest applyDest = new ApplyDest(); + var wcsTask = WCSHelper.GetTask(model.taskNo); + if (wcsTask != null) + { + var wmsTask = WMSHelper.GetWmsTask(wcsTask.S_OP_CODE); + if (wcsTask != null) + { + string itemCode = null; + var endLoc = LocationHelper.GetLoc(wcsTask.S_END_LOC); + var cntrItemRels = ContainerHelper.GetCntrItemRel(wcsTask.S_CNTR_CODE); + if (cntrItemRels.Count > 0) + { + itemCode = cntrItemRels[0].S_ITEM_CODE; + } + + if (model.applyType == 1) + { + LocationHelper.LockLoc(wcsTask.S_END_LOC, 3); // 灏嗗師璐т綅閿佸畾锛堝叾浠栭攣锛�+ var endLocGroup = WMSHelper.getInStockEndLoc(1, itemCode, endLoc.N_ROADWAY); + if (endLocGroup.endLocList.Count > 0) + { + endLoc = endLocGroup.endLocList[0]; + applyDest.endLoc = endLoc.S_CODE; + } + } + else if (model.applyType == 2) + { + var endLocGroup = WMSHelper.getInStockEndLoc(1, cntrItemRels[0].S_ITEM_CODE, 0, endLoc.N_ROADWAY); + if (endLocGroup.endLocList.Count > 0) + { + endLoc = endLocGroup.endLocList[0]; + applyDest.endLoc = endLoc.S_CODE; + } + } + } + } + else + { + response.code = 1; + response.msg = $"浠诲姟:{model.taskNo}涓嶅瓨鍦�; + } + return response; + } + + public class ApplyDest + { + public string endLoc { get; set; } + } + + /// <summary> + /// 4.纭寲鏈哄懠鍙儦鑳庡嚭搴�+ /// 閫昏緫锛�+ /// 1.鏍规嵁鏈哄彴鍙锋煡璇€�纭寲鏈哄伐鍗曡〃銆戙�銆愯儦鑳庡凡瀹屾垚鐨勬潯鐮佷腑闂磋〃銆戠瓫閫夊綋鍓嶇彮娆$殑鐢熶骇璁″垝鏁伴噺鏄惁婊¤冻锛屽綋棰勮鐢熶骇鏁伴噺 = 瀹為檯鏁�鍦ㄩ�鏁伴噺 锛屽垯鍋滄鍙枡 + /// 2.鏌ヨ鏈哄彴鍙峰湪銆愮~鍖栨満宸ュ崟琛ㄣ�瀵瑰簲鐨勭墿鏂欑紪鐮侊紝 + /// 寮�璁$畻锛�.宸烽亾涓嶆姤璀︺�2.鐗╂枡鐘舵�OK銆�.灏忎簬澶辨晥鏃堕棿 澶т簬绛変簬鐢熸晥鏃堕棿 4.鍔犳�鏂欏厛鍑恒�5.鍏堝叆鍏堝嚭锛堢敓浜ф椂闂达級锛夊嚭搴撶墿鏂欙紝鐢熸垚浠诲姟 + /// </summary> + /// <param name="model"></param> + public static ResponseResult callItemOutStock(NotifyDeviceSignalModel model) { ResponseResult response = new ResponseResult(); + var locCodes = model.loc.Split(',').ToList(); + + int locNum = locCodes.Count; + if (locNum > 0) + { + Location prevLoc = null; + Dictionary<string,Location> outLocDic = new Dictionary<string,Location>(); + foreach (var mcn in locCodes) + { + // 1.涓�釜纭寲鏈哄伐浣嶅彧鑳藉悓鏃跺瓨鍦ㄤ竴涓鍦ㄦ墽琛屼腑鐨勪换鍔�+ var existTask = WCSHelper.GetTaskByEnd(mcn); + if (existTask.Count == 0) + { + // 2.鏍规嵁褰撳墠鏃堕棿锛屽垽鏂彮娆℃棩鏈熷拰鐝 + var currentTime = DateTime.Now; + var shift = getShift(currentTime.TimeOfDay); // 鐝 + var dateShift = currentTime.ToString("dd/MM/yyyy"); + TimeSpan shiftIII_Start = new TimeSpan(7, 00, 0); // 7:00:00 + if (shift == "III" && currentTime.TimeOfDay < shiftIII_Start) + { + dateShift = DateTime.Now.AddDays(-1).ToString("dd/MM/yyyy"); + } + + // 3.鏍规嵁鐝鏃ユ湡+鐝+纭寲鏈哄伐浣嶅彿鏌ヨ 纭寲鏈哄伐鍗�涓殑鐗╂枡缂栫爜銆侀璁$敓浜ф暟閲�+ var productionShedule = WMSHelper.getProductionShedule(dateShift, mcn, shift); + + if (productionShedule != null && productionShedule.QTY != 0) + { + // 4鏌ヨ銆愯儦鑳庡凡瀹屾垚鐨勬潯鐮佷腑闂磋〃銆戝苟璁$畻褰撳墠鐝鐨勫凡瀹屾垚鏁伴噺 + int finishNum = WMSHelper.getEmbryoFinishNum(dateShift, mcn, shift); + if (productionShedule.QTY > finishNum) + { + // 5.鍑哄簱绛栫暐 1.浼樺厛鏌ヨ鍓嶄竴鎷栬揣浣嶇殑宸﹀彸涓よ竟鏄惁婊¤冻鏉′欢 2.璁$畻锛�.宸烽亾涓嶆姤璀︺�2.鐗╂枡鐘舵�OK銆�.灏忎簬澶辨晥鏃堕棿 澶т簬绛変簬鐢熸晥鏃堕棿 4.鍔犳�鏂欏厛鍑恒�5.鍏堝叆鍏堝嚭锛堢敓浜ф椂闂达級锛夊嚭搴撶墿鏂欙紝鐢熸垚浠诲姟 + var startLoc = WMSHelper.getOutStockStartLoc(productionShedule.ITEMCODE, prevLoc); + if (startLoc != null) + { + outLocDic.Add(mcn, startLoc); + prevLoc = startLoc; + } + } + } + } + } + + // 6.鍒ゆ柇鍑哄簱璐т綅鏄惁鏄悓涓�贩閬擄紝鍚屼竴宸烽亾鐢熸垚浠诲姟缁勫彿 + string groupNo = null; + if (outLocDic.Count > 1) + { + var groupNum = outLocDic.Select(a => a.Value).ToList().GroupBy(a => a.N_ROADWAY).Count(); + if (groupNum == 1) + { + groupNo = GenerateTaskGroupNo(); + } + } + + // 7.鐢熸垚鍑哄簱浠诲姟 + if (outLocDic.Count > 0) + { + foreach (var item in outLocDic) + { + Location endLoc = LocationHelper.GetLoc(item.Key); + Location startLoc = item.Value; + if (endLoc != null) + { + var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE); + if (locCntrRels != null && locCntrRels.Count > 0) + { + var wmsTask = new WMSTask() + { + S_CNTR_CODE = locCntrRels[0].S_CNTR_CODE, + S_CODE = WMSHelper.GenerateTaskNo(), + S_START_LOC = startLoc.S_CODE, + S_START_AREA = startLoc.S_AREA_CODE, + S_END_LOC = endLoc.S_CODE, + S_END_AREA = endLoc.S_AREA_CODE, + S_TYPE = "鑳氳儙鍙枡鍑哄簱浠诲姟", + S_OP_DEF_CODE = model.reqId, + S_OP_DEF_NAME = "纭寲鏈哄懠鍙儦鑳庡嚭搴�, + N_PRIORITY = 1, + T_START_TIME = DateTime.Now, + S_GROUP_NO = groupNo, + }; + if (WMSHelper.CreateWmsTask(wmsTask)) + { + // 鍒涘缓涓�鍏ュ簱浠诲姟 + WCSTask wcsTask = new WCSTask() + { + S_OP_NAME = wmsTask.S_OP_DEF_NAME, + S_OP_CODE = wmsTask.S_CODE, + S_CODE = WCSHelper.GenerateTaskNo(), + S_CNTR_CODE = wmsTask.S_CNTR_CODE, + S_TYPE = wmsTask.S_TYPE, + S_START_LOC = startLoc.S_CODE, + S_START_AREA = startLoc.S_AREA_CODE, + S_END_LOC = endLoc.S_CODE, + S_END_AREA = endLoc.S_AREA_CODE, + S_SCHEDULE_TYPE = "WCS", + N_PRIORITY = 1, + T_START_TIME = DateTime.Now, + }; + + if (WCSHelper.CreateTask(wcsTask)) + { + // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+ LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); + LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); + + // 鏇存柊浣滀笟浠诲姟鐘舵� + wmsTask.N_B_STATE = 1; + WMSHelper.UpdateTaskState(wmsTask); + } + } + } + } + } + } + } return response; + } + + /// <summary> + /// 绌烘墭鍏ュ簱 + /// </summary> + /// <param name="model"></param> + /// <returns></returns> + public static ResponseResult emptyTrayInStock(NotifyDeviceSignalModel model) + { + ResponseResult response = new ResponseResult(); + Location startLoc = LocationHelper.GetLoc(model.loc); + + var cntrCodeList = model.loc.Split(',').ToList(); + if (cntrCodeList.Count > 0) + { + var endLocGroup = WMSHelper.getInStockEndLoc(cntrCodeList.Count, null); + if (endLocGroup.endLocList.Count > 0) + { + foreach (var endLoc in endLocGroup.endLocList) + { + var wmsTask = new WMSTask() + { + S_CNTR_CODE = model.cntrNo, + S_CODE = WMSHelper.GenerateTaskNo(), + S_START_LOC = startLoc.S_CODE, + S_START_AREA = startLoc.S_AREA_CODE, + S_END_LOC = endLoc.S_CODE, + S_END_AREA = endLoc.S_AREA_CODE, + S_TYPE = "绌烘墭鍏ュ簱浠诲姟", + S_OP_DEF_CODE = model.reqId, + S_OP_DEF_NAME = "绌烘墭鐩樺洖搴撲换鍔�, + N_PRIORITY = 1, + T_START_TIME = DateTime.Now, + S_GROUP_NO = endLocGroup.groupNo, + }; + if (WMSHelper.CreateWmsTask(wmsTask)) + { + // 鍒涘缓涓�鍏ュ簱浠诲姟 + WCSTask wcsTask = new WCSTask() + { + S_OP_NAME = wmsTask.S_OP_DEF_NAME, + S_OP_CODE = wmsTask.S_CODE, + S_CODE = WCSHelper.GenerateTaskNo(), + S_CNTR_CODE = wmsTask.S_CNTR_CODE, + S_TYPE = wmsTask.S_TYPE, + S_START_LOC = startLoc.S_CODE, + S_START_AREA = startLoc.S_AREA_CODE, + S_END_LOC = endLoc.S_CODE, + S_END_AREA = endLoc.S_AREA_CODE, + S_SCHEDULE_TYPE = "WCS", + N_PRIORITY = 1, + T_START_TIME = DateTime.Now, + }; + + if (WCSHelper.CreateTask(wcsTask)) + { + // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+ LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); + LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); + + // 鏇存柊浣滀笟浠诲姟鐘舵� + wmsTask.N_B_STATE = 1; + WMSHelper.UpdateTaskState(wmsTask); + } + } + } + } + else + { + response.code = 1; + response.msg = "搴撳尯娌℃湁鍙叆鐨勭┖璐т綅"; + } + } + + return response; + } + + /// <summary> + /// 鍛煎彨绌烘墭鍑哄簱 + /// </summary> + /// <returns></returns> + public static ResponseResult callEmptyTrayOutStock(NotifyDeviceSignalModel model) + { + ResponseResult responseResult = new ResponseResult(); + int executeNum = 0; + string startLocCode = null; + for (int i = 1; i <= 2; i++) + { + Location startLoc = WMSHelper.getOutStockStartLoc(startLocCode); + if (startLoc != null) + { + startLocCode = startLoc.S_CODE; + Location endLoc = WMSHelper.getMinTaskMiddleLoc(1, 0, startLoc.N_ROADWAY); + if (endLoc != null) + { + var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE); + if (locCntrRels != null && locCntrRels.Count > 0) + { + var wmsTask = new WMSTask() + { + S_CNTR_CODE = locCntrRels[0].S_CNTR_CODE, + S_CODE = WMSHelper.GenerateTaskNo(), + S_START_LOC = startLoc.S_CODE, + S_START_AREA = startLoc.S_AREA_CODE, + S_END_LOC = endLoc.S_CODE, + S_END_AREA = endLoc.S_AREA_CODE, + S_TYPE = "鍛煎彨绌烘墭鍑哄簱", + S_OP_DEF_CODE = model.reqId, + S_OP_DEF_NAME = "鍛煎彨绌烘墭鍑哄簱", + N_PRIORITY = 1, + T_START_TIME = DateTime.Now + }; + if (WMSHelper.CreateWmsTask(wmsTask)) + { + // 鍒涘缓涓�鍏ュ簱浠诲姟 + WCSTask wcsTask = new WCSTask() + { + S_OP_NAME = wmsTask.S_OP_DEF_NAME, + S_OP_CODE = wmsTask.S_CODE, + S_CODE = WCSHelper.GenerateTaskNo(), + S_CNTR_CODE = wmsTask.S_CNTR_CODE, + S_TYPE = wmsTask.S_TYPE, + S_START_LOC = startLoc.S_CODE, + S_START_AREA = startLoc.S_AREA_CODE, + S_END_LOC = endLoc.S_CODE, + S_END_AREA = endLoc.S_AREA_CODE, + S_SCHEDULE_TYPE = "WCS", + N_PRIORITY = 1, + T_START_TIME = DateTime.Now, + }; + + if (WCSHelper.CreateTask(wcsTask)) + { + // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+ LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); + LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); + + // 鏇存柊浣滀笟浠诲姟鐘舵� + wmsTask.N_B_STATE = 1; + WMSHelper.UpdateTaskState(wmsTask); + + executeNum += 1; + } + } + } + } + } + } + + if (executeNum < 1) + { + responseResult.code = 1; + responseResult.msg = "绔嬪簱鍐呯┖鎵樼洏鏁伴噺涓嶈冻"; + } + return responseResult; + } + + /// <summary> + /// 鑳氳儙鎶芥鍑哄簱 + /// </summary> + /// <returns></returns> + public static SimpleResult embryoCheckOutStock(EmbryoCheckOutStockModel model) + { + SimpleResult result = new SimpleResult(); + var locCntrs = LocationHelper.GetLocCntrRelByCntr(model.trayCode); + if (locCntrs.Count == 1) + { + Location startLoc = LocationHelper.GetLoc(locCntrs[0].S_LOC_CODE); + var connectLoc = Settings.connectLocList.Where(a => a.roadway == startLoc.N_ROADWAY).First(); + Location middleLoc = LocationHelper.GetLoc(connectLoc.locCode); + Location endLoc = LocationHelper.GetLoc(""); + if (endLoc != null) + { + var wmsTask = new WMSTask() + { + S_CNTR_CODE = model.trayCode, + S_CODE = WMSHelper.GenerateTaskNo(), + S_START_LOC = startLoc.S_CODE, + S_START_AREA = startLoc.S_AREA_CODE, + S_END_LOC = endLoc.S_CODE, + S_END_AREA = endLoc.S_AREA_CODE, + S_TYPE = "鑳氳儙鎶芥鍑哄簱浠诲姟", + S_OP_DEF_CODE = model.reqId, + S_OP_DEF_NAME = "鑳氳儙鎶芥鍑哄簱鍑哄簱浠诲姟", + N_PRIORITY = 1, + T_START_TIME = DateTime.Now, + }; + if (WMSHelper.CreateWmsTask(wmsTask)) + { + // 鍒涘缓涓�鍏ュ簱浠诲姟 + WCSTask wcsTask = new WCSTask() + { + S_OP_NAME = wmsTask.S_OP_DEF_NAME, + S_OP_CODE = wmsTask.S_CODE, + S_CODE = WCSHelper.GenerateTaskNo(), + S_CNTR_CODE = wmsTask.S_CNTR_CODE, + S_TYPE = wmsTask.S_TYPE, + S_START_LOC = startLoc.S_CODE, + S_START_AREA = startLoc.S_AREA_CODE, + S_END_LOC = middleLoc.S_CODE, + S_END_AREA = middleLoc.S_AREA_CODE, + S_SCHEDULE_TYPE = "WCS", + N_PRIORITY = 1, + T_START_TIME = DateTime.Now, + }; + + if (WCSHelper.CreateTask(wcsTask)) + { + // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+ LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); + LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); + + // 鏇存柊浣滀笟浠诲姟鐘舵� + wmsTask.N_B_STATE = 1; + WMSHelper.UpdateTaskState(wmsTask); + } + } + } + } + return result; + } + + /// <summary> + /// 寮傚父鎵樼洏鍥炲簱娴佺▼ + /// </summary> + /// <param name="model"></param> + /// <returns></returns> + public static ResponseResult anomalyTrayInStock(NotifyDeviceSignalModel model) + { + ResponseResult responseResult = new ResponseResult(); + LocationHelper.UnBindingLoc(model.loc, new List<string>() { model.cntrNo }); + ContainerHelper.deleteCntrItemRelByCntr(model.cntrNo); + return responseResult; + } + + /// <summary> + /// 浠诲姟鐘舵�鍥炴姤 + /// 浠诲姟鐘舵� 1锛氬紑濮�鎵ц涓紱瀹屾垚锛�锛氬噯澶囧彇璐э紱4锛氬彇璐у畬鎴愶紱5锛氬噯澶囧嵏璐э紱6锛氬嵏璐у畬鎴愶紱7锛氬紓甯稿彇娑堬紱8锛氬己鍒跺畬鎴�+ /// 1.鏍规嵁浠诲姟鐘舵�鍥炴姤鏇存柊璐т綅鐘舵�銆佷换鍔$姸鎬�+ /// 2.鏇存柊浠诲姟涓棿琛ㄧ姸鎬�+ /// 4.鏇存柊鍑哄簱浠诲姟涓棿琛ㄧ姸鎬�+ /// </summary> + /// <param name="model"></param> + /// <returns></returns> + public static ReturnResult taskStatusFeedback(TaskStatusFeedbackModel model) + { + ReturnResult responseResult = new ReturnResult(); + WCSTask cst = WCSHelper.GetTask(model.taskNo); + if (cst != null) + { + bool isExist = WCSHelper.CheckActionRecordExist(cst.S_CODE, model.status); + if (!isExist) + { + WMSTask mst = WMSHelper.GetWmsTask(cst.S_OP_CODE); + if (mst != null) + { + switch (model.status) + { + case 1: + WCSHelper.Begin(cst); + break; + case 2: + WCSHelper.End(cst); + break; + case 3: + WCSHelper.UpdateStatus(cst, "鍑嗗鍙栬揣"); + break; + case 4: + WCSHelper.UpdateStatus(cst, "鍙栬揣瀹屾垚"); + TaskProcess.OperateStatus(cst, 4); + break; + case 5: + WCSHelper.UpdateStatus(cst, "鍑嗗鍗歌揣"); + break; + case 6: + WCSHelper.UpdateStatus(cst, "鍗歌揣瀹屾垚"); + TaskProcess.OperateStatus(cst, 6); + break; + case 7: + WCSHelper.Cancel(cst); + WCSHelper.UpdateStatus(cst, "鍙栨秷"); + TaskProcess.OperateStatus(cst, 7); + break; + case 8: + WCSHelper.UpdateStatus(cst, "寮哄埗瀹屾垚"); + WCSHelper.End(cst); + break; + } + // 娣诲姞WCS鍔ㄤ綔璁板綍 + WCSHelper.AddActionRecord(model.taskNo, model.status, model.deviceNo, model.loc); + + if (model.status == 2 || model.status == 8) + { + if (mst != null && mst.N_B_STATE != 2) + { + if (mst.S_END_LOC != cst.S_END_LOC) + { + WCSCore.createLastTask(cst.S_END_LOC, mst); + } + else + { + mst.N_B_STATE = 2; + WMSHelper.UpdateTaskState(mst); + } + + if (mst.S_TYPE == "鍛煎彨绌烘墭鍑哄簱") + { + LocationHelper.UnBindingLoc(mst.S_END_LOC, new List<string>() { mst.S_CNTR_CODE }); + } + } + } + } + } + } + return responseResult; + } + + /// <summary> + /// 鏌ヨ鐝 + /// </summary> + /// <param name="time"></param> + /// <returns></returns> + public static string getShift(TimeSpan time) + { + TimeSpan shiftI_Start = new TimeSpan(07, 00, 0); // 07:00:00 + TimeSpan shiftI_End = new TimeSpan(14, 59, 59); // 14:59:59 + + TimeSpan shiftII_Start = new TimeSpan(15, 00, 0); // 15:00:00 + TimeSpan shiftII_End = new TimeSpan(22, 59, 59); // 22:59:59 + + TimeSpan shiftIII_Start = new TimeSpan(23, 00, 0); // 23:00:00 + TimeSpan shiftIII_End = new TimeSpan(06, 59, 59); // 06:59:59 + + // 鍒ゆ柇鏄惁鍦�Shift III锛堣法澶╅渶鐗规畩澶勭悊锛�+ bool isShiftIII = time >= shiftIII_Start || time <= shiftIII_End; + + // 杩斿洖缁撴灉 + if (time >= shiftI_Start && time <= shiftI_End) + return "I"; + else if (time >= shiftII_Start && time <= shiftII_End) + return "II"; + else if (isShiftIII) + return "III"; + else + return "No shift"; // 鐞嗚涓婁笉浼氳Е鍙�+ } + + /// <summary> + /// 绌烘墭瑙g粦 + /// </summary> + public static ReturnResult emptyTrayUnBind(EmptyTrayUnBindModel model) + { + ReturnResult responseResult = new ReturnResult(); + ContainerHelper.deleteCntrItemRelByCntr(model.rfid); + return responseResult; } public class readCodeFeedbackResponse @@ -554,10 +1108,9 @@ public class OffLineModel { - public string rfid { get; set; } // 鎵樼洏鍙�- public string loc { get; set; } // 涓嬬嚎璐т綅 public int isUrgent { get; set; } // N_IS_URGENT 鏄惁鍔犳�锛�.鍚�1.鏄級 public int isFull { get; set; } // 鏄惁婊℃嫋 0.鍚�1.鏄�+ public int needPair { get; set; } // 0.鍚� 1.鏄紙褰撳墠绌烘墭鐩樹负閰嶅鎵樼洏锛� } public class AddTaskModel { public string From { get; set; } -- Gitblit v1.9.1