From d42ad8b01195def2a9309930e14f90ff13ad47b1 Mon Sep 17 00:00:00 2001 From: 杨前锦 <1010338399@qq.com> Date: 星期四, 19 六月 2025 17:24:28 +0800 Subject: [PATCH] 印尼佳通出入库策略优化 --- HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WCSHelper.cs | 3 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/Container.cs | 20 - HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotOnhand.cs | 2 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/process/TaskProcess.cs | 75 ---- HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/WCSTask.cs | 7 HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/process/TaskProcess.cs | 4 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs | 189 ++++++++-- HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/core/WCSCore.cs | 19 + HH.WCS.Mobox3/HH.WCS.Mobox3.HD/api/WmsController.cs | 20 + HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/WmsController.cs | 67 ++- HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/Monitor.cs | 17 HH.WCS.Mobox3/HH.WCS.Mobox3.HD/core/Monitor.cs | 10 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/MoboxController.cs | 26 + HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/Program.cs | 2 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/packages.config | 6 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/SYSHelper.cs | 2 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/App.config | 8 HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/core/Monitor.cs | 2 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs | 4 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs | 2 HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/wms/WMSHelper.cs | 18 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/OffLineRecord.cs | 3 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/config/config.json | 2 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/Overage.cs | 2 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/config/config.json | 73 +++ HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/dispatch/NDCApi.cs | 43 - HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/process/TaskProcess.cs | 2 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/config/config.json | 25 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/util/Settings.cs | 26 + HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs | 163 ++++++-- HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/ContainerHelper.cs | 161 ++------ HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/util/SqlHelper.cs | 2 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/core/WCSCore.cs | 10 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/HH.WCS.Mobox3.YNJT_PT.csproj | 28 + HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/core/WMSCore.cs | 3 HH.WCS.Mobox3/HH.WCS.Mobox3.HD/process/TaskProcess.cs | 1 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/GreenTireInformation.cs | 7 37 files changed, 643 insertions(+), 411 deletions(-) diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs index 49ea593..9fe06a7 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs @@ -363,7 +363,7 @@ kgzEndLoc = LocationHelper.GetLoc(logicConfig.S_LKBKHCLOC); if (kgzStartLoc == null) { - WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"搴撳尯:{logicConfig.S_AREA_CODE},娌℃湁鍙敤鐨勭┖宸ヨ"); + WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"绌哄伐瑁呭嚭搴撶珯鍙�{logicConfig.S_LKKTJBLOC},娌℃湁鍦╓MS绯荤粺涓綍鍏�); photoStatus = false; } if (kgzEndLoc == null) diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/config/config.json b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/config/config.json index cf55ba9..540ba02 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/config/config.json +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/config/config.json @@ -86,7 +86,7 @@ { "areaCode": "ZZFZLCK", "areaName": "涓浆搴�闈炵洿杩�", - "cntrType": [ 7 ], + "cntrType": [ 0 ], "type": 2 } ], diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/Monitor.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/Monitor.cs index 889f4cc..9436f87 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/Monitor.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/Monitor.cs @@ -266,17 +266,17 @@ public static void UpdateInventoryRegularly() { var db = new SqlHelper<object>().GetInstance(); + var areaCodeList = Settings.areaPropertyList.Select(a => a.areaCode).ToList(); var locations = db.Queryable<Location>() - .LeftJoin<LjLotOnhand>((a, b) => a.S_CODE == b.STORAGE_LOCATION) - .LeftJoin<LocCntrRel>((a, b, c) => a.S_CODE == c.S_LOC_CODE) - .Where((a, b, c) => b.PALLET_ID != c.S_CNTR_CODE) + .LeftJoin<LocCntrRel>((a, b) => a.S_CODE == b.S_LOC_CODE) + .Where((a,b) => a.N_CURRENT_NUM > 0 && b.S_CNTR_CODE != null && areaCodeList.Contains(a.S_AREA_CODE) ) .ToList(); foreach (var loc in locations) { var lotOnhand = db.Queryable<LjLotOnhand>().Where(a => a.STORAGE_LOCATION == loc.S_CODE).First(); if (lotOnhand != null) { - db.Deleteable(lotOnhand).ExecuteCommand(); + db.Deleteable<LjLotOnhand>().Where(a => a.ID == lotOnhand.ID).ExecuteCommand(); } var locCntrRels = LocationHelper.GetLocCntr(loc.S_CODE); @@ -289,16 +289,19 @@ var material = WMSHelper.GetMaterial(cntrItem.S_ITEM_CODE); LjLotOnhand ljLotOnhand = new LjLotOnhand() { + ID = WMSHelper.GenerateStockRecordNo(), MATERIAL_CODE = cntrItem.S_ITEM_CODE, LOT_NAME = cntrItem.S_BATCH_NO, PALLET_ID = cntrItem.S_CNTR_CODE, STORAGE_LOCATION = loc.S_CODE, QC_STATUS = cntrItem.S_ITEM_STATE, - UNIT = material.S_UNIT, + UNIT = material == null ? "":material.S_UNIT, QTY = cntrItem.F_QTY, - IN_DATE = cntrItem.T_INBOUND_TIME, + IN_DATE = cntrItem.T_INBOUND_TIME.ToString("yyyy-MM-dd"), + CREATION_DATE = DateTime.Now, + WAREHOUSE_TYPE = "2" }; - db.Insertable(lotOnhand).ExecuteCommand(); + db.Insertable(ljLotOnhand).ExecuteCommand(); } }); } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotOnhand.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotOnhand.cs index 547af1b..cd726eb 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotOnhand.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotOnhand.cs @@ -22,7 +22,7 @@ public string QC_STATUS { get; set; } //鐘舵� public string UNIT { get; set; } //鍗曚綅 public float QTY { get; set; } //鏁伴噺 - public DateTime IN_DATE { get; set; } //鍏ュ簱鏃堕棿 + public string IN_DATE { get; set; } //鍏ュ簱鏃堕棿 public DateTime CREATION_DATE { get; set; } //鍒涘缓鏃ユ湡 public string WAREHOUSE_TYPE { get; set; } //鍖哄垎涓嶅悓鍘傚锛�/鎬濆皵鐗癸紝2/鏉弶锛� } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs index 66bc083..7acb4b7 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs @@ -33,6 +33,10 @@ var date = DateTime.Now.ToString("yyMMdd"); return $"SO{date}{id.ToString().PadLeft(4, '0')}"; } + internal static int GenerateStockRecordNo() + { + return SYSHelper.GetSerialNumber("搴撳瓨璁板綍鍙�, "SR"); + } internal static string GenerateAlarmNo() { diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/api/WmsController.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/api/WmsController.cs index 06b9fdd..570f642 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/api/WmsController.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/api/WmsController.cs @@ -63,6 +63,7 @@ result.success = false; result.message = "鍐呴儴寮傚父锛岃鑱旂郴寮�彂浜哄憳澶勭悊"; LogHelper.Info($"鍐呴儴寮傚父锛岄敊璇俊鎭細{ex.Message}", "杞﹂棿鎺у埗鍣�); + LogHelper.Info(ex.StackTrace, "杞﹂棿鎺у埗鍣�); } LogHelper.Info("鍒涘缓鍏ュ簱鎼繍浠诲姟-createInOrder 鍑哄弬锛� + JsonConvert.SerializeObject(result), "杞﹂棿鎺у埗鍣�); return result; @@ -96,6 +97,7 @@ result.success = false; result.message = "鍐呴儴寮傚父锛岃鑱旂郴寮�彂浜哄憳澶勭悊"; LogHelper.Info($"鍐呴儴寮傚父锛岄敊璇俊鎭細{ex.Message}", "杞﹂棿鎺у埗鍣�); + LogHelper.Info(ex.StackTrace, "杞﹂棿鎺у埗鍣�); } LogHelper.Info("鍒涘缓鍑哄簱鎼繍浠诲姟-createOutOrder 鍑哄弬锛� + JsonConvert.SerializeObject(result), "杞﹂棿鎺у埗鍣�); @@ -602,6 +604,20 @@ if (wcsTask.S_SCHEDULE_TYPE.Contains("LD")) { + if (wcsTask.S_TYPE.Contains("鍑哄簱")) + { + var locCntrs = LocationHelper.GetLocCntrRel(wcsTask.S_START_LOC); + if (locCntrs.Count > 0) + { + var cntrList = locCntrs.Select(a => a.S_CNTR_CODE).ToList(); + if (cntrList.Contains(wcsTask.S_CNTR_CODE)) + { + var linePlcInfo = WCSHelper.GetLinePlcInfo(wcsTask.S_START_LOC); + triggerAlarmCommand(linePlcInfo , 1); + } + } + } + LocationHelper.UnBindingLoc(wcsTask.S_START_LOC, new List<string>() { wcsTask.S_CNTR_CODE }); LocationHelper.UnBindingLoc(wcsTask.S_END_LOC, new List<string>() { wcsTask.S_CNTR_CODE }); @@ -619,7 +635,11 @@ ContainerHelper.deleteCntrItem(wmsTask.S_CNTR_CODE); } } + + } + + WCSHelper.Fail(wcsTask); LocationHelper.UnLockLoc(wcsTask.S_START_LOC); LocationHelper.UnLockLoc(wcsTask.S_END_LOC); diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/core/Monitor.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/core/Monitor.cs index 1c56af2..efa0ea3 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/core/Monitor.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/core/Monitor.cs @@ -498,6 +498,16 @@ S7Helper.WriteInt(line.deviceNo, 101, line.writeAddr + 8, command); // 涓嬪彂鎸囦护锛堥粯璁�0 鍏ュ簱=2 鍑哄簱=1 涓嶅悎鏍奸�鍥�3锛� } + /// <summary> + /// 娓呴櫎杈撻�绾垮懡浠�+ /// </summary> + /// <param name="line"></param> + /// <param name="command"> 1.agv浠诲姟寮傚父鍙栨秷</param> + public static void triggerAlarmCommand(LinePlcInfo line, short command) + { + S7Helper.WriteDint(line.deviceNo, 101, line.writeAddr + 20, command); // 浠诲姟鍙�+ } + public class SSXStatusInfo { public string deviceNo { get; set; } public string status { get; set; } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/process/TaskProcess.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/process/TaskProcess.cs index 4428931..990dee3 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/process/TaskProcess.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/process/TaskProcess.cs @@ -240,7 +240,6 @@ else { Console.WriteLine($"璧风偣鎵樼洏鏁伴噺鍜岃揣浣嶅鍣ㄨ〃涓嶇鍚堬紝璇锋鏌ャ�璐т綅琛ㄣ�鍜屻�璐т綅瀹瑰櫒琛ㄣ�"); } - } } } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/core/Monitor.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/core/Monitor.cs index 07262ce..b7d79c7 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/core/Monitor.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/core/Monitor.cs @@ -149,7 +149,7 @@ { float weight = pipelineSignalInfo.weight / trayCodes.Count; - float furWeight = WMSHelper.getFurWeight(child.LOTATT09); // 姣涚毊閲嶉噺 + float furWeight = WMSHelper.getFurWeight(child.LOTATT10); // 姣涚毊閲嶉噺 child.F_NET_WEIGHT = weight - furWeight; asnNo = child.S_ASN_NO; orientSign = child.LOTATT18; diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/core/WCSCore.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/core/WCSCore.cs index 0f3fad3..d1dad47 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/core/WCSCore.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/core/WCSCore.cs @@ -312,6 +312,25 @@ ContainerHelper.deleteCntrItem(cntrCode); } } + + if (wst.S_TYPE == "鍑哄簱浠诲姟") + { + var child = WMSHelper.getOutstockListChild(wst.S_OP_DEF_CODE, cst.S_DATA); + + var cntrCodeList = cst.S_CNTR_CODE.Split(',').ToList(); + // 鏇存柊鍑哄簱鏁伴噺 + float qty = 0; + for (int i = 0; i < cntrCodeList.Count; i++) + { + var cntrItemRels = ContainerHelper.GetCntrItemRel(cntrCodeList[i]); + foreach (var cntrItemRel in cntrItemRels) + { + qty -= cntrItemRel.F_QTY; + } + } + child.PRE_COMPLETED_QTY = child.PRE_COMPLETED_QTY + qty; + WMSHelper.updateOutStockListChild(child); + } } } } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/process/TaskProcess.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/process/TaskProcess.cs index 9cae50b..d5aecc2 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/process/TaskProcess.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/process/TaskProcess.cs @@ -280,7 +280,7 @@ var cntrItemRel = ContainerHelper.GetCntrItemRel(downCntr.S_CNTR_CODE).FirstOrDefault(); if (cntrItemRel != null) { - float height = WMSHelper.getFurHeight(cntrItemRel.LOTATT09); + float height = WMSHelper.getFurHeight(cntrItemRel.LOTATT10); mst.S_START_LOC = mst.S_START_LOC + "-" + height; } } @@ -291,7 +291,7 @@ if (endLocCntrRels != null && endLocCntrRels.Count == 1) { var cntrItemRel = ContainerHelper.GetCntrItemRel(endLocCntrRels[0].S_CNTR_CODE).FirstOrDefault(); if (cntrItemRel != null) { - float height = WMSHelper.getFurHeight(cntrItemRel.LOTATT09); + float height = WMSHelper.getFurHeight(cntrItemRel.LOTATT10); mst.S_END_LOC = mst.S_END_LOC + "-" + height; } } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/wms/WMSHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/wms/WMSHelper.cs index 9999732..52c4633 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/wms/WMSHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/wms/WMSHelper.cs @@ -1360,12 +1360,22 @@ } // 鏌ヨ鍚屾壒娆″叆搴撻攣鏁伴噺锛屽鏋滈攣鏁伴噺 >= 2 ,鍒欎笉鍐嶄粠銆愮┖鎺掋�鍏ュ簱 - int lockNum = db.Queryable<Location>().Where(a => a.N_LOCK_STATE == 1 && a.S_LOCK_OP.Trim() == asnNo).Count(); - LogHelper.Info("鍚屾壒娆″叆搴撻攣鏁伴噺锛� + lockNum, "Mobox"); - if (end == null && rowNum < 2 && lockNum < 2 ) + var lockRow = db.Queryable<Location>().Where(a => a.N_LOCK_STATE == 1 && a.S_LOCK_OP.Trim() == asnNo).Take(1).PartitionBy(l => new { l.S_AREA_CODE, l.N_ROW }).ToList(); + LogHelper.Info("鍚屾壒娆″叆搴撻攣鏁伴噺锛� + lockRow.Count, "Mobox"); + if (end == null && rowNum < 2 && lockRow.Count < 2 ) { string fullerCode = null; - if (rowNum == 1) + if (lockRow.Count > 0) + { + var maxLoc = lockRow[0]; + var fuller = db.Queryable<TN_Fuller>().Where(a => a.S_AREA_CODE == maxLoc.S_AREA_CODE && a.N_ROW == maxLoc.N_ROW).First(); + if (fuller != null) + { + fullerCode = fuller.FULLER_CODE; + } + } + + if (fullerCode == null && rowNum > 0 ) { var maxLoc = listMaxCol[0]; var fuller = db.Queryable<TN_Fuller>().Where(a => a.S_AREA_CODE == maxLoc.S_AREA_CODE && a.N_ROW == maxLoc.N_ROW).First(); diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/config/config.json b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/config/config.json index 67b3418..e2e8447 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/config/config.json +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/config/config.json @@ -1,6 +1,7 @@ { "HostToAgvServerUrl": "http://192.168.1.146:9988/HostToAGV.cgi", "HASeverUrl": "http://172.16.10.41", + "NDCApiUrl": "", "SqlServer": "server=192.168.1.204;uid=root;pwd=yn123456;database=oimobox", "SqlServer1": "Data Source=192.168.1.198\\sql2008;Initial Catalog=OIMobox;User ID=sa;Password=sa@2015", "ApiPort": 8901, @@ -8,24 +9,24 @@ "WHCode": "IW001", "NDCApiUrl": "", "baseTrayBufferLoc": [ - - { + + { "bufferOutLoc": "SeA26", "bufferInLoc": "PPA06-12-1-2" }, - { + { "bufferOutLoc": "SeA27", "bufferInLoc": "PPA07-13-1-1" }, - { + { "bufferOutLoc": "SeA28", "bufferInLoc": "PPA07-13-1-2" }, - { + { "bufferOutLoc": "SeA29", "bufferInLoc": "PPA07-14-1-1" }, - { + { "bufferOutLoc": "SeA231", "bufferInLoc": "PPA07-14-1-2" } @@ -69,7 +70,7 @@ }, { "locCode": "SeA05", - "roadway": [ 2], + "roadway": [ 2 ], "action": 1 }, { @@ -94,7 +95,7 @@ }, { "locCode": "SeA10", - "roadway": [ 3 ], + "roadway": [ 3 ], "action": 1 }, { @@ -189,22 +190,22 @@ }, { "locCode": "SeA29", - "roadway": [ 6,7 ], + "roadway": [ 6, 7 ], "action": 1 }, { "locCode": "SeA30", - "roadway": [ 6,7 ], + "roadway": [ 6, 7 ], "action": 2 }, { "locCode": "SeA31", - "roadway": [ 6,7 ], + "roadway": [ 6, 7 ], "action": 1 }, { "locCode": "SeA32", - "roadway": [ 6,7 ], + "roadway": [ 6, 7 ], "action": 2 } ] diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/dispatch/NDCApi.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/dispatch/NDCApi.cs index 926a604..47e2af7 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/dispatch/NDCApi.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/dispatch/NDCApi.cs @@ -8,6 +8,7 @@ { public class NDCApi { + private static readonly HttpHelper apiHelper = new HttpHelper(); public static string NDCApiUrl { set; get; } static NDCApi() { @@ -20,20 +21,19 @@ /// <param name="ts"></param> /// <param name="pri"></param> /// <param name="taskNo"></param> - /// <param name="param"></param> + /// <param name="paramList"></param> /// <returns></returns> public static AgvApiResult AddOrderNew(int ts, int pri, string taskNo, List<Param> paramList) { - var httpH = new HttpHelper(); var agvApiResult = new AgvApiResult(); var model = new AddOrderNewModel(); model.ts_no = ts; model.pri = pri; model.task_no = taskNo; - model.paramList = paramList; + model.param = paramList; try { LogHelper.Info($"浠诲姟{taskNo}涓嬪彂锛寋JsonConvert.SerializeObject(model)}" , "NDC"); - var result = httpH.WebPost(NDCApiUrl + "Add",JsonConvert.SerializeObject(model)); + var result = apiHelper.Post(NDCApiUrl + "Add",JsonConvert.SerializeObject(model)); LogHelper.Info($"浠诲姟涓嬪彂缁撴灉res={result}", "NDC"); agvApiResult = JsonConvert.DeserializeObject<AgvApiResult>(result); return agvApiResult; @@ -53,15 +53,12 @@ /// <returns></returns> public static AgvApiResult AddOrderNew(AddOrderNewModel model) { - var httpH = new HttpHelper(); var agvApiResult = new AgvApiResult(); try { LogHelper.Info($"浠诲姟{model.task_no}涓嬪彂锛寋JsonConvert.SerializeObject(model)}", "NDC"); - Console.WriteLine($"浠诲姟{model.task_no}涓嬪彂锛寋JsonConvert.SerializeObject(model)}", "NDC"); - var result = httpH.WebPost(NDCApiUrl + "Add", JsonConvert.SerializeObject(model)); + var result = apiHelper.Post(NDCApiUrl + "Add", JsonConvert.SerializeObject(model)); LogHelper.Info($"浠诲姟涓嬪彂缁撴灉res={result}", "NDC"); - Console.WriteLine($"浠诲姟涓嬪彂缁撴灉res={result}"); agvApiResult = JsonConvert.DeserializeObject<AgvApiResult>(result); return agvApiResult; } @@ -82,7 +79,6 @@ /// <returns></returns> public static AgvApiResult CancelOrder(string tsNo, bool is_force) { - var httpH = new HttpHelper(); var agvApiResult = new AgvApiResult(); var model = new CancelOrderModel(); model.task_no = tsNo; @@ -90,7 +86,7 @@ try { LogHelper.Info($"浠诲姟{model.task_no}鍙栨秷锛寋JsonConvert.SerializeObject(model)}", "NDC"); Console.WriteLine($"浠诲姟{model.task_no}鍙栨秷锛寋JsonConvert.SerializeObject(model)}", "NDC"); - var result = httpH.WebPost(NDCApiUrl + "Cancel", JsonConvert.SerializeObject(model)); + var result = apiHelper.Post(NDCApiUrl + "Cancel", JsonConvert.SerializeObject(model)); LogHelper.Info($"浠诲姟{model.task_no}鍙栨秷缁撴灉={result}", "NDC"); Console.WriteLine($"浠诲姟{model.task_no}鍙栨秷缁撴灉={result}", "NDC"); agvApiResult = JsonConvert.DeserializeObject<AgvApiResult>(result); @@ -111,15 +107,12 @@ /// <returns></returns> public static AgvApiResult CancelOrder(CancelOrderModel model) { - var httpH = new HttpHelper(); var agvApiResult = new AgvApiResult(); try { LogHelper.Info($"浠诲姟{model.task_no}鍙栨秷锛寋JsonConvert.SerializeObject(model)}", "NDC"); - Console.WriteLine($"浠诲姟{model.task_no}鍙栨秷锛寋JsonConvert.SerializeObject(model)}", "NDC"); - var result = httpH.WebPost(NDCApiUrl + "Cancel", JsonConvert.SerializeObject(model)); + var result = apiHelper.Post(NDCApiUrl + "Cancel", JsonConvert.SerializeObject(model)); LogHelper.Info($"浠诲姟{model.task_no}鍙栨秷缁撴灉={result}", "NDC"); - Console.WriteLine($"浠诲姟{model.task_no}鍙栨秷缁撴灉={result}", "NDC"); agvApiResult = JsonConvert.DeserializeObject<AgvApiResult>(result); return agvApiResult; } @@ -141,7 +134,6 @@ /// <returns></returns> public static AgvApiResult ChangeOrderPri(string taskNo, int newPri) { - var httpH = new HttpHelper(); var agvApiResult = new AgvApiResult(); var model = new ChangePriModel(); model.task_no = taskNo; @@ -149,10 +141,8 @@ try { LogHelper.Info($"浠诲姟{model.task_no}浼樺厛绾ф洿鏀癸紝{JsonConvert.SerializeObject(model)}", "NDC"); - Console.WriteLine($"浠诲姟{model.task_no}浼樺厛绾ф洿鏀癸紝{JsonConvert.SerializeObject(model)}", "NDC"); - var result = httpH.WebPost(NDCApiUrl + "ChangePri", JsonConvert.SerializeObject(model)); + var result = apiHelper.Post(NDCApiUrl + "ChangePri", JsonConvert.SerializeObject(model)); LogHelper.Info($"浠诲姟{model.task_no}浼樺厛绾ф洿鏀圭粨鏋�{result}", "NDC"); - Console.WriteLine($"浠诲姟{model.task_no}浼樺厛绾ф洿鏀圭粨鏋�{result}", "NDC"); agvApiResult = JsonConvert.DeserializeObject<AgvApiResult>(result); return agvApiResult; } @@ -172,15 +162,12 @@ /// <returns></returns> public static AgvApiResult ChangeOrderPri(ChangePriModel model) { - var httpH = new HttpHelper(); var agvApiResult = new AgvApiResult(); try { LogHelper.Info($"浠诲姟{model.task_no}浼樺厛绾ф洿鏀癸紝{JsonConvert.SerializeObject(model)}", "NDC"); - Console.WriteLine($"浠诲姟{model.task_no}浼樺厛绾ф洿鏀癸紝{JsonConvert.SerializeObject(model)}", "NDC"); - var result = httpH.WebPost(NDCApiUrl + "ChangePri", JsonConvert.SerializeObject(model)); + var result = apiHelper.Post(NDCApiUrl + "ChangePri", JsonConvert.SerializeObject(model)); LogHelper.Info($"浠诲姟{model.task_no}浼樺厛绾ф洿鏀圭粨鏋�{result}", "NDC"); - Console.WriteLine($"浠诲姟{model.task_no}浼樺厛绾ф洿鏀圭粨鏋�{result}", "NDC"); agvApiResult = JsonConvert.DeserializeObject<AgvApiResult>(result); return agvApiResult; } @@ -202,7 +189,6 @@ /// <returns></returns> public static AgvApiResult ChangeOrderParam(string taskNo,int paramNo, string paramStr) { - var httpH = new HttpHelper(); var agvApiResult = new AgvApiResult(); var model = new ChangeParamModel(); model.task_no = taskNo; @@ -210,10 +196,8 @@ model.param = paramStr; try { LogHelper.Info($"浠诲姟{model.task_no}鍙傛暟鏇存敼锛寋JsonConvert.SerializeObject(model)}", "NDC"); - Console.WriteLine($"浠诲姟{model.task_no}鍙傛暟鏇存敼锛寋JsonConvert.SerializeObject(model)}", "NDC"); - var result = httpH.WebPost(NDCApiUrl + "ChangeParam", JsonConvert.SerializeObject(model)); + var result = apiHelper.Post(NDCApiUrl + "ChangeParam", JsonConvert.SerializeObject(model)); LogHelper.Info($"浠诲姟{model.task_no}鍙傛暟鏇存敼缁撴灉={result}", "NDC"); - Console.WriteLine($"浠诲姟{model.task_no}鍙傛暟鏇存敼缁撴灉={result}", "NDC"); agvApiResult = JsonConvert.DeserializeObject<AgvApiResult>(result); return agvApiResult; } @@ -232,15 +216,12 @@ /// <returns></returns> public static AgvApiResult ChangeOrderParam(ChangeParamModel model) { - var httpH = new HttpHelper(); var agvApiResult = new AgvApiResult(); try { LogHelper.Info($"浠诲姟{model.task_no}鍙傛暟鏇存敼锛寋JsonConvert.SerializeObject(model)}", "NDC"); - Console.WriteLine($"浠诲姟{model.task_no}鍙傛暟鏇存敼锛寋JsonConvert.SerializeObject(model)}", "NDC"); - var result = httpH.WebPost(NDCApiUrl + "ChangeParam", JsonConvert.SerializeObject(model)); + var result = apiHelper.Post(NDCApiUrl + "ChangeParam", JsonConvert.SerializeObject(model)); LogHelper.Info($"浠诲姟{model.task_no}鍙傛暟鏇存敼缁撴灉={result}", "NDC"); - Console.WriteLine($"浠诲姟{model.task_no}鍙傛暟鏇存敼缁撴灉={result}", "NDC"); agvApiResult = JsonConvert.DeserializeObject<AgvApiResult>(result); return agvApiResult; } @@ -269,7 +250,7 @@ public int ts_no { set; get; }//TS 鍙凤紝蹇呴』鏈夊� public int pri { set; get; }//浼樺厛绾� public string task_no { set; get; }//涓婃父浠诲姟缂栫爜锛屽鏋�no_feedback = 1 鏃讹紝鍙互涓虹┖ - public List<Param> paramList { set; get; } = new List<Param>();//鍙傛暟鍒楄〃 + public List<Param> param { set; get; } = new List<Param>();//鍙傛暟鍒楄〃 } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/process/TaskProcess.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/process/TaskProcess.cs index ed693e9..5aaec1e 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/process/TaskProcess.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/process/TaskProcess.cs @@ -255,7 +255,7 @@ }; paramList.Add(param); } - model.paramList = paramList; + model.param = paramList; LogHelper.Info($"鍚慉GV涓嬪彂浠诲姟锛屼换鍔″弬鏁帮細{model}", "WMS"); var res = NDCApi.AddOrderNew(model); if (res != null && res.err_code == 0 || true) diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/App.config b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/App.config index 7f541b1..44d0f06 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/App.config +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/App.config @@ -37,6 +37,14 @@ <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.2.9.0" newVersion="5.2.9.0" /> </dependentAssembly> + <dependentAssembly> + <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-8.0.30.0" newVersion="8.0.30.0" /> + </dependentAssembly> + <dependentAssembly> + <assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" /> + </dependentAssembly> </assemblyBinding> </runtime> </configuration> diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/HH.WCS.Mobox3.YNJT_PT.csproj b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/HH.WCS.Mobox3.YNJT_PT.csproj index bc8dae9..612ea58 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/HH.WCS.Mobox3.YNJT_PT.csproj +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/HH.WCS.Mobox3.YNJT_PT.csproj @@ -35,8 +35,23 @@ <WarningLevel>4</WarningLevel> </PropertyGroup> <ItemGroup> + <Reference Include="BouncyCastle.Crypto, Version=1.9.0.0, Culture=neutral, PublicKeyToken=0e99375e54769942, processorArchitecture=MSIL"> + <HintPath>packages\Portable.BouncyCastle.1.9.0\lib\net40\BouncyCastle.Crypto.dll</HintPath> + </Reference> <Reference Include="EasyModbus, Version=5.6.0.0, Culture=neutral, processorArchitecture=MSIL"> <HintPath>packages\EasyModbusTCP.5.6.0\lib\net40\EasyModbus.dll</HintPath> + </Reference> + <Reference Include="Google.Protobuf, Version=3.19.4.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL"> + <HintPath>packages\Google.Protobuf.3.19.4\lib\net45\Google.Protobuf.dll</HintPath> + </Reference> + <Reference Include="K4os.Compression.LZ4, Version=1.2.6.0, Culture=neutral, PublicKeyToken=2186fa9121ef231d, processorArchitecture=MSIL"> + <HintPath>packages\K4os.Compression.LZ4.1.2.6\lib\net46\K4os.Compression.LZ4.dll</HintPath> + </Reference> + <Reference Include="K4os.Compression.LZ4.Streams, Version=1.2.6.0, Culture=neutral, PublicKeyToken=2186fa9121ef231d, processorArchitecture=MSIL"> + <HintPath>packages\K4os.Compression.LZ4.Streams.1.2.6\lib\net46\K4os.Compression.LZ4.Streams.dll</HintPath> + </Reference> + <Reference Include="K4os.Hash.xxHash, Version=1.0.6.0, Culture=neutral, PublicKeyToken=32cd54395057cec3, processorArchitecture=MSIL"> + <HintPath>packages\K4os.Hash.xxHash.1.0.6\lib\net46\K4os.Hash.xxHash.dll</HintPath> </Reference> <Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=7.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> <HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.7.0.0\lib\netstandard2.0\Microsoft.Bcl.AsyncInterfaces.dll</HintPath> @@ -52,6 +67,9 @@ </Reference> <Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath> + </Reference> + <Reference Include="MySql.Data, Version=8.0.30.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL"> + <HintPath>packages\MySql.Data.8.0.30\lib\net452\MySql.Data.dll</HintPath> </Reference> <Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <HintPath>..\ConsoleApp1\packages\Newtonsoft.Json.13.0.2\lib\net45\Newtonsoft.Json.dll</HintPath> @@ -82,10 +100,13 @@ <Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> <HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath> </Reference> + <Reference Include="System.ComponentModel, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /> + <Reference Include="System.ComponentModel.DataAnnotations" /> <Reference Include="System.Configuration" /> <Reference Include="System.Configuration.Install" /> <Reference Include="System.Core" /> <Reference Include="System.IO.Compression" /> + <Reference Include="System.Management" /> <Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> <HintPath>..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath> </Reference> @@ -109,6 +130,7 @@ <Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> <HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath> </Reference> + <Reference Include="System.Transactions" /> <Reference Include="System.Web" /> <Reference Include="System.Web.Http, Version=5.2.9.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <HintPath>..\packages\System.Web.Http.dll</HintPath> @@ -132,9 +154,15 @@ <Reference Include="Topshelf.NLog, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b800c4cfcdeea87b, processorArchitecture=MSIL"> <HintPath>..\packages\Topshelf.NLog.4.3.0\lib\net452\Topshelf.NLog.dll</HintPath> </Reference> + <Reference Include="Ubiety.Dns.Core, Version=2.2.1.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL"> + <HintPath>packages\MySql.Data.8.0.30\lib\net452\Ubiety.Dns.Core.dll</HintPath> + </Reference> <Reference Include="WebActivatorEx, Version=2.0.0.0, Culture=neutral, PublicKeyToken=7b26dc2a43f6a0d4, processorArchitecture=MSIL"> <HintPath>..\packages\WebActivatorEx.2.0\lib\net40\WebActivatorEx.dll</HintPath> </Reference> + <Reference Include="ZstdNet, Version=1.4.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL"> + <HintPath>packages\MySql.Data.8.0.30\lib\net452\ZstdNet.dll</HintPath> + </Reference> </ItemGroup> <ItemGroup> <Compile Include="api\MoboxController.cs" /> diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/Program.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/Program.cs index 595c4df..3244513 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/Program.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/Program.cs @@ -22,6 +22,8 @@ internal class Program { static void Main(string[] args) { + + Settings.Init(); //1.0 寮�惎api Startup(); //2.0 寮�惎tcp 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 959c9e7..c63c661 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 @@ -4,6 +4,7 @@ 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; @@ -52,7 +53,7 @@ N_IS_URGENT = model.isUrgent, T_OFF_TIME = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), N_IS_FULL = model.isFull, - + S_LOC = model.loc }; WMSHelper.addOffLineRecord(record); } @@ -118,6 +119,26 @@ 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; + } + + ContainerHelper.addCntrItemRel(rfid, itemBarcodeInfo); barcodeList.Add(ext); } else @@ -203,9 +224,9 @@ wmsTask.N_B_STATE = 1; WMSHelper.UpdateTaskState(wmsTask); - // 缁戝畾瀹瑰櫒鐗╂枡淇℃伅 + /*// 缁戝畾瀹瑰櫒鐗╂枡淇℃伅 var itemBarcodeInfo = WMSHelper.GetGreenTireInformation(ext.barcode); - WMSHelper.bindBarcodeItemInfo(wmsTask.S_CNTR_CODE, itemBarcodeInfo); + WMSHelper.bindBarcodeItemInfo(wmsTask.S_CNTR_CODE, itemBarcodeInfo);*/ } } } @@ -213,8 +234,8 @@ else { // 寮傚父鎵樼洏鎺掗櫎 - var middleLoc = WMSHelper.getMinTaskMiddleLoc(1); // 1.寮傚父鎺掑嚭浣�- endLoc = WMSHelper.getAbnormalAreaEmptyLoc(Settings.abnormalArea); + var middleLoc = WMSHelper.getMinTaskMiddleLoc(1); // 1.鎺掑嚭浣�+ endLoc = WMSHelper.getOnlneLoc(2); // 2.绌烘墭涓婄嚎浣嶏紙鎺掑嚭鐨勬墭鐩橀兘鍑哄簱鍒扮┖鎵樹笂绾夸綅杩涜澶勭悊锛� if (endLoc != null && middleLoc != null) { var wmsTask = new WMSTask() @@ -287,6 +308,7 @@ /// <summary> /// 璇荤爜璇锋眰 + /// 鍦烘櫙锛�. /// </summary> public static ResponseResult readCodeRequest(NotifyDeviceSignalModel model) { @@ -295,63 +317,74 @@ { 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) { - endLoc = LocationHelper.GetLoc(wmsTask.S_END_LOC); - var connectLoc = Settings.connectLocList.Where(a => a.roadway == endLoc.N_ROADWAY && a.type == 1).FirstOrDefault(); - middleLoc = LocationHelper.GetLoc(connectLoc.locCode); - 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 if (wcsTask.S_TYPE == "鑳氳儙鍙枡鍑哄簱浠诲姟") + { + if (model.cntrNo != wcsTask.S_CNTR_CODE) + { + // 璁$畻鎺掑嚭鍙�+ endLoc = WMSHelper.getCallOutLoc(endLoc.N_ROW); + + wcsTask.S_END_LOC = endLoc.S_CODE; + wcsTask.S_END_AREA = endLoc.S_AREA_CODE; + WCSHelper.updateTaskEnd(wcsTask); + + 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; } else { - var cntrItemRels = ContainerHelper.GetCntrItemRel(wmsTask.S_CNTR_CODE); - if (cntrItemRels.Count > 0) + var cntrItemRels = ContainerHelper.GetCntrItemRel(wcsTask.S_CNTR_CODE); + if (cntrItemRels.Count > 0) { - if (cntrItemRels[0].S_ITEM_STATE != "OK") + if (cntrItemRels[0].S_ITEM_STATE != "OK") { - middleLoc = WMSHelper.getMinTaskMiddleLoc(1); // 1.寮傚父鎺掑嚭浣�- endLoc = WMSHelper.getAbnormalAreaEmptyLoc(Settings.abnormalArea); + endLoc = WMSHelper.getMinTaskMiddleLoc(1,endLoc.N_ROADWAY); ; + + wcsTask.S_END_LOC = endLoc.S_CODE; + wcsTask.S_END_AREA = endLoc.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; + readCodeFeedbackResponse.endLoc = endLoc.S_CODE; } } } + } } else @@ -361,6 +394,63 @@ } 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> @@ -444,9 +534,9 @@ S_START_AREA = startLoc.S_AREA_CODE, S_END_LOC = endLoc.S_CODE, S_END_AREA = endLoc.S_AREA_CODE, - S_TYPE = "婊℃枡涓嬬嚎鍏ュ簱浠诲姟", + S_TYPE = "鑳氳儙鍙枡鍑哄簱浠诲姟", S_OP_DEF_CODE = model.reqId, - S_OP_DEF_NAME = "鎴愬瀷鏈烘弧鏂欎笅绾垮叆搴�, + S_OP_DEF_NAME = "纭寲鏈哄懠鍙儦鑳庡嚭搴�, N_PRIORITY = 1, T_START_TIME = DateTime.Now, S_GROUP_NO = groupNo, @@ -642,7 +732,7 @@ if (locCntrs.Count == 1) { Location startLoc = LocationHelper.GetLoc(locCntrs[0].S_LOC_CODE); - var connectLoc = Settings.connectLocList.Where(a => a.roadway == startLoc.N_ROADWAY && a.type == 1).First(); + 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) @@ -767,11 +857,21 @@ if (model.status == 2 || model.status == 8) { - if (mst != null) + if (mst != null && mst.N_B_STATE != 2) { - if (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 }); } } } @@ -958,6 +1058,7 @@ public class OffLineModel { + public string loc { get; set; } // 涓嬬嚎浣� public string rfid { get; set; } // 鎵樼洏鍙� public string deviceNo { get; set; } // 鏈哄彴鍙� public int isUrgent { get; set; } // N_IS_URGENT 鏄惁鍔犳�锛�.鍚�1.鏄級 diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/MoboxController.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/MoboxController.cs index 8823cb0..5c915b5 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/MoboxController.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/MoboxController.cs @@ -26,7 +26,9 @@ var result = new SimpleResult(); var task = WCSHelper.GetTask(model.TaskNo); if (task != null) { - if (task.N_B_STATE == 0) { + + if (task.N_B_STATE == 0) + { //绛夊緟鐩存帴淇敼鐘舵�涓哄彇娑� WCSHelper.UpdateStatus(model.TaskNo, "鍙栨秷"); LocationHelper.UnLockLoc(task.S_START_LOC); @@ -35,15 +37,27 @@ /*LocationHelper.UnBindingLoc(task.S_START_LOC, new List<string> { task.S_CNTR_CODE });*/ result.resultMsg = "浠诲姟绛夊緟锛岀洿鎺ュ彇娑�; } - else if (task.N_B_STATE < 3) { - //宸叉帹閫佷絾鏄病鏈夊畬鎴愭垨鑰呭彇娑堬紝閫氱煡hosttoagv - NDCHelper.Cancel(task.S_CODE); - result.resultMsg = "浠诲姟鍙栨秷宸茬粡鍙戦�缁欏皬杞�; + else if (task.N_B_STATE < 3) + { + if (task.S_SCHEDULE_TYPE == "AGV") + { + //宸叉帹閫佷絾鏄病鏈夊畬鎴愭垨鑰呭彇娑堬紝閫氱煡hosttoagv + NDCHelper.Cancel(task.S_CODE); + result.resultMsg = "浠诲姟鍙栨秷宸茬粡鍙戦�缁欏皬杞�; + } + else if (task.S_SCHEDULE_TYPE == "WCS") + { + + } + } - else { + else + { result.resultCode = 1; result.resultMsg = "浠诲姟宸茬粨鏉�; } + + } else { result.resultCode = 1; diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/WmsController.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/WmsController.cs index 6d02829..8bec1eb 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/WmsController.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/WmsController.cs @@ -66,6 +66,7 @@ catch (Exception ex) { LogHelper.Info($"WMS鍐呴儴閿欒,閿欒鍘熷洜锛歿ex.Message}", "WMS"); + LogHelper.Info(ex.StackTrace, "WMS"); responseResult.code = 500; responseResult.msg = $"WMS鍐呴儴閿欒锛岃鑱旂郴寮�彂浜哄憳澶勭悊"; } @@ -74,7 +75,22 @@ } /// <summary> - /// 3.纭寲鏈哄懠鍙儦鑳庡嚭搴�+ /// 3.鐢宠缁堢偣 + /// 鍦烘櫙锛�.鍫嗗灈鏈烘斁璐у紓甯哥敵璇锋柊缁堢偣锛�2.鍫嗗灈鏈哄叆搴撹緭閫佺嚎鍫靛鐢宠鏂扮粓鐐�+ /// </summary> + /// <param name="model"></param> + /// <returns></returns> + public ResponseResult applyDest(ApplyDestModel model) + { + LogHelper.Info("銆�.鐢宠缁堢偣銆慳pplyDest 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS"); + ResponseResult responseResult = new ResponseResult(); + responseResult = ApiHelper.applyDest(model); + LogHelper.Info("銆�.鐢宠缁堢偣銆慳pplyDest 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS"); + return responseResult; + } + + /// <summary> + /// 4.纭寲鏈哄懠鍙儦鑳庡嚭搴� /// 閫昏緫锛� /// 1.鏍规嵁鏈哄彴鍙锋煡璇€�纭寲鏈哄伐鍗曡〃銆戙�銆愯儦鑳庡凡瀹屾垚鐨勬潯鐮佷腑闂磋〃銆戠瓫閫夊綋鍓嶇彮娆$殑鐢熶骇璁″垝鏁伴噺鏄惁婊¤冻锛屽綋棰勮鐢熶骇鏁伴噺 = 瀹為檯鏁�鍦ㄩ�鏁伴噺 锛屽垯鍋滄鍙枡 /// 2.鏌ヨ鏈哄彴鍙峰湪銆愮~鍖栨満宸ュ崟琛ㄣ�瀵瑰簲鐨勭墿鏂欑紪鐮侊紝 @@ -84,71 +100,71 @@ /// <returns></returns> public ResponseResult callItemOutStock(CallItemModel model ) { - LogHelper.Info("銆�.纭寲鏈哄懠鍙儦鑳庡嚭搴撱�callItemOutStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS"); + LogHelper.Info("銆�.纭寲鏈哄懠鍙儦鑳庡嚭搴撱�callItemOutStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS"); ResponseResult responseResult = new ResponseResult(); responseResult = ApiHelper.callItemOutStock(model); - LogHelper.Info("銆�.纭寲鏈哄懠鍙儦鑳庡嚭搴撱�callItemOutStock 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS"); + LogHelper.Info("銆�.纭寲鏈哄懠鍙儦鑳庡嚭搴撱�callItemOutStock 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS"); return responseResult; } /// <summary> - /// 4.绌烘墭鍥炵珛搴�+ /// 5.绌烘墭鍥炵珛搴� /// </summary> /// <param name="model"></param> /// <returns></returns> public ResponseResult emptyTrayInStock(EmptyTrayInStockModel model ) { - LogHelper.Info("銆�.绌烘墭鍥炵珛搴撱�emptyTrayInStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS"); + LogHelper.Info("銆�.绌烘墭鍥炵珛搴撱�emptyTrayInStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS"); ResponseResult responseResult = new ResponseResult(); responseResult = ApiHelper.emptyTrayInStock(model); - LogHelper.Info("銆�.绌烘墭鍥炵珛搴撱�emptyTrayInStock 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS"); + LogHelper.Info("銆�.绌烘墭鍥炵珛搴撱�emptyTrayInStock 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS"); return responseResult; } /// <summary> - /// 5.鎴愬瀷鏈哄懠鍙┖鎵�+ /// 6.鎴愬瀷鏈哄懠鍙┖鎵� /// </summary> /// <param name="model"></param> /// <returns></returns> public ResponseResult callEmptyTrayOutStock(CallEmptyTrayOutStockModel model) { - LogHelper.Info("銆�.鎴愬瀷鏈哄懠鍙┖鎵樸�callEmptyTrayOutStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS"); + LogHelper.Info("銆�.鎴愬瀷鏈哄懠鍙┖鎵樸�callEmptyTrayOutStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS"); ResponseResult responseResult = new ResponseResult(); responseResult = ApiHelper.callEmptyTrayOutStock(model); - LogHelper.Info("銆�.鎴愬瀷鏈哄懠鍙┖鎵樸�callEmptyTrayOutStock 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS"); + LogHelper.Info("銆�.鎴愬瀷鏈哄懠鍙┖鎵樸�callEmptyTrayOutStock 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS"); return responseResult; } /// <summary> - /// 6.鑳庤儦绔嬪簱鎶芥鍑哄簱銆佷汉宸ュ嚭搴撹儙鑳�+ /// 7.鑳庤儦绔嬪簱鎶芥鍑哄簱銆佷汉宸ュ嚭搴撹儙鑳� /// </summary> /// <param name="model"></param> /// <returns></returns> public ResponseResult embryoCheckOutStock(EmbryoCheckOutStockModel model) { - LogHelper.Info("銆�.鑳庤儦绔嬪簱鎶芥鍑哄簱銆慹mbryoCheckOutStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS"); + LogHelper.Info("銆�.鑳庤儦绔嬪簱鎶芥鍑哄簱銆慹mbryoCheckOutStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS"); ResponseResult responseResult = new ResponseResult(); responseResult = ApiHelper.embryoCheckOutStock(model); - LogHelper.Info("銆�6.鑳庤儦绔嬪簱鎶芥鍑哄簱銆慹mbryoCheckOutStock 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS"); + LogHelper.Info("銆�7.鑳庤儦绔嬪簱鎶芥鍑哄簱銆慹mbryoCheckOutStock 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS"); return responseResult; } /// <summary> - /// 7.寮傚父鍥炲簱娴佺▼ + /// 8.寮傚父鍥炲簱娴佺▼ /// </summary> /// <param name="model"></param> /// <returns></returns> public ResponseResult anomalyTrayInStock(AnomalyTrayInStockModel model) { - LogHelper.Info("銆�.寮傚父鍥炲簱娴佺▼銆慹mbryoCheckOutStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS"); + LogHelper.Info("銆�.寮傚父鍥炲簱娴佺▼銆慹mbryoCheckOutStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS"); ResponseResult responseResult = new ResponseResult(); responseResult = ApiHelper.anomalyTrayInStock(model); - LogHelper.Info("銆�.寮傚父鍥炲簱娴佺▼銆慹mbryoCheckOutStock 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS"); + LogHelper.Info("銆�.寮傚父鍥炲簱娴佺▼銆慹mbryoCheckOutStock 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS"); return responseResult; } /// <summary> - /// 8.WCS 浠诲姟鐘舵�鍙嶉 + /// 9.WCS 浠诲姟鐘舵�鍙嶉 /// 涓氬姟鍦烘櫙锛歐CS鍦ㄦ墽琛屼换鍔℃椂锛屽洖鎶ヤ换鍔$姸鎬� /// </summary> /// <param name="model"></param> @@ -157,14 +173,14 @@ /*[Route("notifyTaskStatus")]*/ public ReturnResult notifyTaskStatus(TaskStatusFeedbackModel model) { - LogHelper.Info("銆�.WCS浠诲姟鐘舵�鍙嶉銆慠equest锛� + JsonConvert.SerializeObject(model), "WMS"); + LogHelper.Info("銆�.WCS浠诲姟鐘舵�鍙嶉銆慠equest锛� + JsonConvert.SerializeObject(model), "WMS"); var result = ApiHelper.taskStatusFeedback(model); - LogHelper.Info("銆�.WCS浠诲姟鐘舵�鍙嶉銆憆esponse锛� + JsonConvert.SerializeObject(result), "WMS"); + LogHelper.Info("銆�.WCS浠诲姟鐘舵�鍙嶉銆憆esponse锛� + JsonConvert.SerializeObject(result), "WMS"); return result; } /// <summary> - /// 9.绌烘墭鐩樿В缁�+ /// 10.绌烘墭鐩樿В缁� /// 涓氬姟鍦烘櫙锛氱┖鎵樼洏鍥炰富绾� /// </summary> /// <param name="model"></param> @@ -172,9 +188,9 @@ [HttpPost] public ReturnResult emptyTrayUnBind(EmptyTrayUnBindModel model) { - LogHelper.Info("銆�.绌烘墭鐩樿В缁戙�Request锛� + JsonConvert.SerializeObject(model), "WMS"); + LogHelper.Info("銆�0.绌烘墭鐩樿В缁戙�Request锛� + JsonConvert.SerializeObject(model), "WMS"); var result = ApiHelper.emptyTrayUnBind(model); - LogHelper.Info("銆�.绌烘墭鐩樿В缁戙�response锛� + JsonConvert.SerializeObject(result), "WMS"); + LogHelper.Info("銆�0.绌烘墭鐩樿В缁戙�response锛� + JsonConvert.SerializeObject(result), "WMS"); return result; } @@ -226,6 +242,15 @@ public string trayCode { get; set; } // 瀹瑰櫒缂栫爜 } + public class ApplyDestModel + { + public string reqId { get; set; } + public string reqTime { get; set; } + public string taskNo { get; set; } // 浠诲姟鍙�+ public int applyType { get; set; } //鐢宠绫诲瀷 1.鍫嗗灈鏈烘斁璐у紓甯哥敵璇锋柊缁堢偣锛�2.鍫嗗灈鏈哄叆搴撹緭閫佺嚎鍫靛鐢宠鏂扮粓鐐�+ public string loc { get; set; } + } + public class CallItemModel { public string reqId { get; set; } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/config/config.json b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/config/config.json index 1469950..495b2d3 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/config/config.json +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/config/config.json @@ -1,25 +1,82 @@ { "HostToAgvServerUrl": "http://192.168.1.146:9988/HostToAGV.cgi", "HASeverUrl": "http://172.16.10.41", - "SqlServer": "Data Source=192.168.1.188;Initial Catalog=OIMobox;User ID=sa;Password=Am123123", + "SqlServer": "server=192.168.1.204;uid=root;pwd=yn123456;database=oimobox", "SqlServer1": "Data Source=192.168.1.198\\sql2008;Initial Catalog=OIMobox;User ID=sa;Password=sa@2015", "ApiPort": 8901, "FacCode": "1122", "WHCode": "TSCK", - "StockArea": "area2", - "AbnormalArea": "area1", // 寮傚父鍖�+ "StockArea": "SSA", - // 鎺ラ┏浣�type 1.鎺掑嚭鍙�+ // 鎺ラ┏浣�type 1.绔嬪簱鍓嶆帓鍑哄彛 2.婊℃枡涓婄嚎浣�3.绌烘墭涓婄嚎浣�4.纭寲鏈哄墠鎺掗櫎鍙� "ConnectLoc": [ { - "locCode": "loc1", - "roadway": 1, + "locCode": "OA1-1-1-1", + "roadway": 1 + }, + { + "locCode": "OA1-1-2-1", + "roadway": 2 + }, + { + "locCode": "OA1-1-3-1", + "roadway": 3 + }, + { + "locCode": "OA1-1-4-1", + "roadway": 4 + }, + { + "locCode": "OA1-1-5-1", + "roadway": 5 + }, + { + "locCode": "OA1-1-6-1", + "roadway": 6 + }, + { + "locCode": "OA1-1-7-1", + "roadway": 7 + }, + { + "locCode": "OA1-1-8-1", + "roadway": 8 + } + ], + + // 涓�杈撻�)绾胯揣浣�type 1.婊℃枡涓婄嚎浣�2.绌烘墭涓婄嚎浣�+ "OnLineLoc": [ + { + "locCode": "UCL1-1-1-1", "type": 1 }, { - "locCode": "loc1", - "roadway": 2, + "locCode": "UCL1-1-2-1", "type": 1 + }, + { + "locCode": "UCL1-1-3-1", + "type": 2 + } + ], + + // 鍙枡寮傚父鎺掗櫎浣�+ "CallOutLoc": [ + { + "locCode": "OA1-2-1-1", + "row": 1 + }, + { + "locCode": "OA1-2-2-1", + "row": 2 + }, + { + "locCode": "OA1-2-3-1", + "row": 3 + }, + { + "locCode": "OA1-2-4-1", + "roadway": 4 } ] } \ No newline at end of file diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/core/WCSCore.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/core/WCSCore.cs index e7363b5..f987756 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/core/WCSCore.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/core/WCSCore.cs @@ -70,6 +70,16 @@ //瀹夊叏璇锋眰绛� TaskProcess.OperateReq(model.No, model.State, model.ForkliftNo, model.ExtData); } + + if (model.State == 2) + { + var mst = WMSHelper.GetWmsTask(TN_Task.S_OP_CODE); + if (mst.S_END_LOC == TN_Task.S_END_LOC) + { + mst.N_B_STATE = 2; + WMSHelper.UpdateTaskState(mst); + } + } } } } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/core/WMSCore.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/core/WMSCore.cs index 3790928..b781003 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/core/WMSCore.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/core/WMSCore.cs @@ -80,7 +80,6 @@ S_START_LOC = a.S_START_LOC, S_END_LOC = a.S_END_LOC, S_SCHEDULE_TYPE = "鏉ゥ", - N_CNTR_COUNT = 1, S_CNTR_CODE = a.S_CNTR_CODE, }; @@ -123,7 +122,7 @@ S_START_LOC = a.S_START_LOC, S_END_LOC = a.S_END_LOC, S_SCHEDULE_TYPE = "鏉ゥ", - N_CNTR_COUNT = 1, + S_CNTR_CODE = a.S_CNTR_CODE, }; diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/Container.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/Container.cs index 210a4ba..8750729 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/Container.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/Container.cs @@ -11,28 +11,10 @@ public string S_CODE { get; set; } public string S_TYPE { get; set; } public string S_SPEC { get; set; } - public float F_WEIGHT { get; set; } - public float F_LOAD_WEIGHT { get; set; } - public float F_MAX_WEIGHT { get; set; } - public int N_LENGTH { get; set; } - public int N_WIDTH { get; set; } - public int N_HEIGHT { get; set; } - public string C_IS_VIRTUAL { get; set; } = "N"; - public int N_TYPE { get; set; } - public string C_ENABLE { get; set; } = "Y"; - public string S_STATE_PRE { get; set; } - public int N_REVIEW_RESULT { get; set; } public int N_DETAIL_COUNT { get; set; } public int N_B_STATE { get; set; } - public string S_LOCK_OP_CODE { get; set; } - public string S_LOCK_STATE { get; set; } - public int N_LOCK_STATE { get; set; } - /// <summary> - /// 码盘时候标记 - /// </summary> - public string S_SRC { get; internal set; } - public string S_DEST { get; internal set; } + [SugarColumn(IsIgnore = true)] diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/GreenTireInformation.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/GreenTireInformation.cs index 16aa6c8..e6a8414 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/GreenTireInformation.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/GreenTireInformation.cs @@ -22,5 +22,12 @@ public int QTY { get; set; } // 鏁伴噺 public string TXNDATE { get; set; } // 鐢熶骇鏃堕棿 public string DATE_SHIFT { get; set; } // 杞彮鏃ユ湡 + + [SugarColumn(IsIgnore = true)] + public string S_EFFECTIVE_TIME { get; set; } // 鐢熸晥鏃堕棿 + [SugarColumn(IsIgnore = true)] + public string S_EXPIRATION_TIME { get; set; } // 澶辨晥鏃堕棿 + [SugarColumn(IsIgnore = true)] + public int N_URGENT_FLAG { get; set; } = 0; // 鍔犳�鏍囪瘑 } } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/OffLineRecord.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/OffLineRecord.cs index bb12b0f..8ba5b9e 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/OffLineRecord.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/OffLineRecord.cs @@ -15,7 +15,8 @@ { public string S_RFID { get; set; } // 鎵樼洏鍙� public string S_LOC { get; set; } // 涓嬬嚎璐т綅 - public string S_DEVICE_NO { get; set; } // 涓嬬嚎璐т綅 + public string S_ITEM_STATUS { get; set; } = "OK"; // 涓嬬嚎璐т綅 + public string S_DEVICE_NO { get; set; } // 璁惧鍙� public int N_IS_URGENT { get; set; } // N_IS_URGENT 鏄惁鍔犳�锛�.鍚�1.鏄級 public string T_OFF_TIME { get; set; } // 涓嬬嚎鏃堕棿 public int N_IS_FULL { get; set; } // 鏄惁婊℃嫋 0.鍚�1.鏄�diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/Overage.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/Overage.cs index 200e750..e6b3ddc 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/Overage.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/Overage.cs @@ -11,7 +11,7 @@ [SugarTable("TN_standard_overage")] internal class Overage : BaseModel { - public string MCNGRP { get; set; } //鐢熶骇娴佺▼缁�+ public string MCNGRP { get; set; } //鐢熶骇娴佺▼缁� 0.纭寲鏈�1.鍗婂埗鍝� public string ITEMPATT { get; set; } // 鐗╂枡鍓嶇紑 public int OVERAGE { get; set; } // 鏈�ぇ淇濆瓨鏃堕棿 public float MINHOUR { get; set; } // 澶氫箙鍚庣敓鏁�diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/WCSTask.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/WCSTask.cs index a0491c2..97f9349 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/WCSTask.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/WCSTask.cs @@ -50,12 +50,7 @@ public string S_OP_NAME { get; set; } public string S_WORKSHOP_NO { get; set; } public string S_WORKSHOP_NAME { get; set; } - // 璧风偣灞傛暟 - public int N_START_LAYER { get; internal set; } - // 缁堢偣灞傛暟 - public int N_END_LAYER { get; internal set; } - // 瀹瑰櫒鏁伴噺 - public int N_CNTR_COUNT { get; internal set; } + internal static string GetStateStr(int state) { //0绛夊緟 1宸叉帹閫� 2鎵ц 3瀹屾垚 4閿欒 diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/packages.config b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/packages.config index 8e27579..cb87077 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/packages.config +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/packages.config @@ -1,6 +1,10 @@ 锘�?xml version="1.0" encoding="utf-8"?> <packages> <package id="EasyModbusTCP" version="5.6.0" targetFramework="net461" /> + <package id="Google.Protobuf" version="3.19.4" targetFramework="net461" /> + <package id="K4os.Compression.LZ4" version="1.2.6" targetFramework="net461" /> + <package id="K4os.Compression.LZ4.Streams" version="1.2.6" targetFramework="net461" /> + <package id="K4os.Hash.xxHash" version="1.0.6" targetFramework="net461" /> <package id="Microsoft.AspNet.WebApi.Client" version="5.2.9" targetFramework="net461" /> <package id="Microsoft.AspNet.WebApi.Core" version="5.2.9" targetFramework="net461" /> <package id="Microsoft.AspNet.WebApi.Owin" version="5.2.9" targetFramework="net461" /> @@ -19,11 +23,13 @@ <package id="Microsoft.Owin.Host.HttpListener" version="4.2.2" targetFramework="net461" /> <package id="Microsoft.Owin.Hosting" version="4.2.2" targetFramework="net461" /> <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net461" /> + <package id="MySql.Data" version="8.0.30" targetFramework="net461" /> <package id="Newtonsoft.Json" version="13.0.2" targetFramework="net461" /> <package id="NLog" version="5.1.1" targetFramework="net452" requireReinstallation="true" /> <package id="NModbus" version="3.0.81" targetFramework="net461" /> <package id="NModbus4" version="2.1.0" targetFramework="net461" /> <package id="Owin" version="1.0" targetFramework="net461" /> + <package id="Portable.BouncyCastle" version="1.9.0" targetFramework="net461" /> <package id="S7netplus" version="0.20.0" targetFramework="net461" /> <package id="SqlSugar" version="5.1.3.47" targetFramework="net461" /> <package id="Swashbuckle" version="5.6.0" targetFramework="net461" /> diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/process/TaskProcess.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/process/TaskProcess.cs index 146d3d4..95fb466 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/process/TaskProcess.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/process/TaskProcess.cs @@ -20,7 +20,6 @@ /// <param name="mst"></param> /// <param name="v"></param> internal static void CacheBitUpdate(WCSTask mst, bool load) { - var trayCarryCount = mst.N_CNTR_COUNT > 0 ? mst.N_CNTR_COUNT : 1; if (load) { Console.WriteLine($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_START_LOC}鍙栬揣瀹屾垚锛岃捣鐐硅В缁戝鍣▄mst.S_CNTR_CODE}"); LogHelper.Info($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_START_LOC}鍙栬揣瀹屾垚锛岃捣鐐硅В缁戝鍣▄mst.S_CNTR_CODE}"); @@ -245,79 +244,7 @@ var endLoc = LocationHelper.GetLocation(mst.S_END_LOC); if (mst.S_SCHEDULE_TYPE == "NDC") { - Console.WriteLine($"SendTask {mst.S_CODE}"); - var dic = new Dictionary<string, string>(); - dic.Add("No", mst.S_CODE); - dic.Add("Pri", mst.N_PRIORITY.ToString()); - dic.Add("From", startLoc.S_AGV_SITE); - dic.Add("To", endLoc.S_AGV_SITE); - if (mst.S_TYPE == "绉诲簱") - { - dic.Add("FUNC", "32"); - } - else - { - dic.Add("FUNC", "0"); - } - - var data = mst.N_END_LAYER + 16 * mst.N_START_LAYER; - // 鍙傛暟4 - dic.Add("DATA", data.ToString()); - //鐗╂枡淇℃伅涓幏鍙�- //鍏堣幏鍙栨墭鐩樹俊鎭�- var itemInfo = LocationHelper.GetCntrItem(mst.S_CNTR_CODE); - if (itemInfo != null) { - // 鍙傛暟5 - dic.Add("ItemHeight", itemInfo.N_TS_HEIGHT); - //鍙傛暟6 榛樿鍊�- string[] parts = itemInfo.Item_Spec.Split('*'); - if (parts.Length > 1) - { - if (parts[1].Equals("1200")) - { - dic.Add("TrayType", "1"); - } - else if (parts[1].Equals("1210")) - { - dic.Add("TrayType", "2"); - } - } - } - - //鑾峰彇鍙傛暟7鍜� - dic.Add("FromCol", "0"); - dic.Add("ToCol", "0"); - - //鏀硅捣鐐�- var flb1 = GetFreeLineBit(startLoc.S_AREA_CODE, startLoc.N_ROW, startLoc.N_COL); - if (flb1 != null) { - dic["FromCol"] = (startLoc.N_COL - flb1.minCol).ToString(); - if (mst.N_START_LAYER == 1) { - dic["From"] = flb1.bit1.ToString(); - } - else { - dic["From"] = flb1.bit2.ToString(); - } - } - //鏀圭粓鐐�- var flb = GetFreeLineBit(endLoc.S_AREA_CODE, endLoc.N_ROW, endLoc.N_COL); - if (flb != null) { - dic["ToCol"] = (endLoc.N_COL - flb.minCol).ToString(); - if (mst.N_END_LAYER == 1) { - dic["To"] = flb.bit1.ToString(); - } - else { - dic["To"] = flb.bit2.ToString(); - } - } - - var res = NDC.AddNewOrderNew(5, mst.N_PRIORITY, mst.S_CODE, dic); - if (res != null && (res.Res.ErrCode == 0 || res.Res.ErrCode == 50009)) { - //鎺ㄩ�鎴愬姛锛屼慨鏀逛换鍔′紭鍏堢骇 - mst.N_B_STATE = 1; - WCSHelper.UpdateStatus(mst); - result = true; - } + } else if (mst.S_SCHEDULE_TYPE == "鏉ゥ") { //璋冪涓夋柟鎺ュ彛 diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/util/Settings.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/util/Settings.cs index 1926b76..282a25a 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/util/Settings.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/util/Settings.cs @@ -13,13 +13,14 @@ { public static string HostToAgvServerUrl { get; set; } public static string HASeverUrl { get; set; } - public static string SqlServer { get; set; } + public static string SqlServer { get; set; } public static string SqlServer1 { get; set; } public static List<ConnectLoc> connectLocList { get; set; } + public static List<OnLineLoc> onLineLocList { get; set; } + public static List<CallOutLoc> callOutLocList { get; set; } public static int port { get; set; } public static string WHCode { get; set; } public static string FacCode { get; set; } - public static string abnormalArea { get; set; } public static string stockArea { get; set; } @@ -56,9 +57,13 @@ if (keyValue.Name == "ConnectLoc") { connectLocList = JsonConvert.DeserializeObject<List<ConnectLoc>>(keyValue.Value.ToString()); } - if (keyValue.Name == "AbnormalArea") + if (keyValue.Name == "OnLineLoc") { - abnormalArea = keyValue.Value.ToString(); + onLineLocList = JsonConvert.DeserializeObject<List<OnLineLoc>>(keyValue.Value.ToString()); + } + if (keyValue.Name == "CallOutLoc") + { + callOutLocList = JsonConvert.DeserializeObject<List<CallOutLoc>>(keyValue.Value.ToString()); } if (keyValue.Name == "StockArea") { @@ -81,8 +86,19 @@ { public string locCode { get; set; } public int roadway { get; set; } + } + + public class OnLineLoc + { + public string locCode { get; set; } public int type { get; set; } } - + + public class CallOutLoc + { + public string locCode { get; set; } + public int row { get; set; } + } + } } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/util/SqlHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/util/SqlHelper.cs index 1fd3e11..0a0aba5 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/util/SqlHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/util/SqlHelper.cs @@ -116,7 +116,7 @@ { ConnectionString = string.IsNullOrEmpty(url) ? Settings.SqlServer : url, //ConnectionString = @"Data Source=192.168.1.198\sql2008;Initial Catalog=OIMobox;User ID=sa;Password=sa@2015", - DbType = DbType.SqlServer, + DbType = DbType.MySql, IsAutoCloseConnection = true, InitKeyType = InitKeyType.Attribute//浠庣壒鎬ц鍙栦富閿嚜澧炰俊鎭� }); diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/ContainerHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/ContainerHelper.cs index b9f2949..b3997b9 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/ContainerHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/ContainerHelper.cs @@ -1,4 +1,5 @@ -锘縰sing HH.WCS.Mobox3.YNJT_PT.models.other; +锘縰sing HH.WCS.Mobox3.YNJT_PT.models; +using HH.WCS.Mobox3.YNJT_PT.models.other; using HH.WCS.Mobox3.YNJT_PT.util; using System; using System.Collections.Generic; @@ -17,20 +18,7 @@ var date = DateTime.Now.ToString("yyMMdd"); return $"TP{date}{id.ToString().PadLeft(4, '0')}"; } - /// <summary> - /// 鏍规嵁瀹瑰櫒绫诲瀷銆佺洰鐨勫湴銆佺姸鎬佹煡璇㈠鍣�- /// </summary> - /// <param name="dest"></param> - /// <param name="cntrType"></param> - /// <param name="state"></param> - /// <returns></returns> - internal static List<Container> GetCntrListByPurpose(string dest, string cntrType, int state) { - //1.0 鏌ヨ揣浣嶅鍣ㄨ〃 - var db = new SqlHelper<object>().GetInstance(); - var list = db.Queryable<Container>().Where(a => a.S_DEST == dest && a.S_TYPE == cntrType && a.N_B_STATE == state).ToList(); - return list; - - } + /// <summary> /// TN_ContainerHelper.test("4L澶╃劧姘寸瑁�鍏�, 50, "335ml涓滄柟鏍戝彾15鍏�, 30); /// </summary> @@ -144,113 +132,54 @@ } /// <summary> - /// 鏍规嵁瀹瑰櫒鏉ユ簮鍜岀姸鎬佽幏鍙栨墭鐩�+ /// 娣诲姞瀹瑰櫒鐗╂枡淇℃伅 /// </summary> - /// <param name="src"></param> - /// <param name="state"></param> /// <returns></returns> - internal static List<Container> GetCntr(string dest, int state, string cntrType = "") { + public static bool addCntrItemRel( string cntrCode,GreenTireInformation info) + { + bool res = false; var db = new SqlHelper<object>().GetInstance(); - if (cntrType == "") { - return db.Queryable<Container>().Where(a => a.S_DEST == dest && a.N_B_STATE == state).ToList(); - } - else { - return db.Queryable<Container>().Where(a => a.S_DEST == dest && a.N_B_STATE == state && a.S_TYPE == cntrType).ToList(); - } - } - internal static bool UpdateCntr(List<string> cntrs, string dest, int state) { - var res = false; - var db = new SqlHelper<object>().GetInstance(); - var models = db.Queryable<Container>().Where(a => cntrs.Contains(a.S_CODE)).ToList(); - if (models.Count > 0) { - models.ForEach(a => { - a.S_DEST = dest; a.N_B_STATE = state; - db.Updateable(a).UpdateColumns(it => new { it.S_DEST, it.N_B_STATE }).ExecuteCommand(); - }); - res = true; - } - return res; - } - internal static bool UpdateCntrDest(List<string> cntrs, string dest) { - var res = false; - var db = new SqlHelper<object>().GetInstance(); - var models = db.Queryable<Container>().Where(a => cntrs.Contains(a.S_CODE)).ToList(); - if (models.Count > 0) { - models.ForEach(a => { - a.S_DEST = dest; - db.Updateable(a).UpdateColumns(it => new { it.S_DEST }).ExecuteCommand(); - }); - res = true; - } - return res; - } - /// <summary> - /// 鏇存柊鎵樼洏鏉ユ簮 - /// </summary> - /// <param name="cntr"></param> - /// <param name="src"></param> - /// <returns></returns> - internal static bool UpdateCntrSrc(string cntr, string src) { - var res = false; - var db = new SqlHelper<object>().GetInstance(); - var model = db.Queryable<Container>().Where(a => a.S_CODE == cntr).First(); - if (model != null) { - model.S_SRC = src; - model.T_MODIFY = DateTime.Now; - res = db.Updateable(model).UpdateColumns(it => new { it.S_SRC, it.T_MODIFY }).ExecuteCommand() > 0; - } - return res; - } - internal static bool UpdateCntrState(List<string> cntrs, int state) { - var res = false; - var db = new SqlHelper<object>().GetInstance(); - var models = db.Queryable<Container>().Where(a => cntrs.Contains(a.S_CODE)).ToList(); - if (models.Count > 0) { - models.ForEach(a => { - a.N_B_STATE = state; - db.Updateable(a).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); - }); - res = true; - } - return res; - } + var container = ContainerHelper.GetCntr(cntrCode); + if (container != null) + { + try + { + db.BeginTran(); + db.Deleteable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntrCode).ExecuteCommand(); - internal static bool UpdateCntr(List<string> cntrs, string src, string dest, int state) { - var res = false; - var db = new SqlHelper<object>().GetInstance(); - var models = db.Queryable<Container>().Where(a => cntrs.Contains(a.S_CODE)).ToList(); - if (models.Count > 0) { - models.ForEach(a => { - a.S_DEST = dest; a.N_B_STATE = state; a.S_SRC = src; - db.Updateable(a).UpdateColumns(it => new { it.S_DEST, it.N_B_STATE, it.S_SRC }).ExecuteCommand(); - }); - res = true; + CntrItemRel cntrItemRel = new CntrItemRel() + { + S_CG_ID = info.BARCODE, + S_CNTR_CODE = cntrCode, + S_ITEM_CODE = info.ITEMCODE, + S_CELL_NO = info.TIRECODE, + F_QTY = info.QTY, + S_MCN = info.MCN, + S_OPR = info.OPR, + S_OPR02 = info.OPR02, + S_OPR03 = info.OPR03, + S_OPR04 = info.OPR04, + S_WINDUP = info.WINDUP, + S_TXNDATE = info.TXNDATE, + S_DATE_SHIFT = info.DATE_SHIFT, + S_EFFECTIVE_TIME = info.S_EFFECTIVE_TIME, + S_EXPIRATION_TIME = info.S_EXPIRATION_TIME, + N_URGENT_FLAG = info.N_URGENT_FLAG, + }; + + db.Insertable(cntrItemRel).ExecuteCommand(); + container.N_DETAIL_COUNT = 1; + db.Updateable(container).ExecuteCommand(); + db.CommitTran(); + res = true; + } + catch (Exception ex) + { + db.RollbackTran(); + } } return res; } - public static bool ClearCntrInfo(string cntr) { - - var db = new SqlHelper<object>().GetInstance(); - var model = db.Queryable<Container>().Where(a => a.S_CODE == cntr).First(); - if (model != null) { - model.S_SRC = ""; - model.S_DEST = ""; - model.N_B_STATE = 0; - model.T_MODIFY = DateTime.Now; - - } - db.Updateable(model).UpdateColumns(it => new { it.S_SRC, it.S_DEST, it.N_B_STATE, it.T_MODIFY }).ExecuteCommand(); - return db.Deleteable<CntrItemRel>().Where(a => a.S_CNTR_CODE.Trim() == cntr.Trim()).ExecuteCommand() > 0; - } - internal static List<Container> GetCntrBySrc(string src, int state, string cntrType = "") { - var db = new SqlHelper<object>().GetInstance(); - if (cntrType == "") { - return db.Queryable<Container>().Where(a => a.S_SRC == src && a.N_B_STATE == state).ToList(); - } - else { - return db.Queryable<Container>().Where(a => a.S_SRC == src && a.N_B_STATE == state && a.S_TYPE == cntrType).ToList(); - } - } - + } } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/SYSHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/SYSHelper.cs index 4408adc..45fca5b 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/SYSHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/SYSHelper.cs @@ -32,7 +32,7 @@ return result; } - [SugarTable("dbo.OI_SYS_MAXID")] + [SugarTable("OI_SYS_MAXID")] public class OI_SYS_MAXID { public string CN_S_TYPE { get; set; } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WCSHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WCSHelper.cs index aa9cc21..d04f74e 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WCSHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WCSHelper.cs @@ -109,9 +109,6 @@ N_SCHEDULE_TYPE=1, S_B_STATE = "绛夊緟", S_CNTR_CODE = cntrInfo, - N_START_LAYER = startLayer, - N_END_LAYER = endLayer, - N_CNTR_COUNT = cntrCount }; diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs index da0078c..a1736e8 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs @@ -507,15 +507,31 @@ /// </summary> /// <param name="locNum"></param> /// <param name="itemCode"></param> + /// <param name="roadway"></param> + /// <param name="excludeRoadway"></param> /// <returns></returns> - public static EndLocGroup getInStockEndLoc(int locNum, string itemCode) + public static EndLocGroup getInStockEndLoc(int locNum, string itemCode , int roadway = 0 ,int excludeRoadway = 0) { var db = new SqlHelper<object>().GetInstance(); EndLocGroup endLocGroup = new EndLocGroup { endLocList = new List<Location>() }; // 1. 鑾峰彇鍊欓�宸烽亾鍒楄〃锛堢墿鏂欏潎琛℃垨宸烽亾鍧囪 锛�- var candidateRoadways = GetCandidateRoadways(db, itemCode); - if (candidateRoadways.Count == 0) return endLocGroup; + List<int> candidateRoadways = new List<int>(); + if (roadway == 0) + { + candidateRoadways = GetCandidateRoadways(db, itemCode); + if (candidateRoadways.Count == 0) return endLocGroup; + + if (excludeRoadway != 0) + { + candidateRoadways.Remove(excludeRoadway); + } + } + else + { + candidateRoadways.Add(roadway); + } + // 2. 澶勭悊鍗曡揣浣嶅叆搴� if (locNum == 1) @@ -532,38 +548,62 @@ /// </summary> private static List<int> GetCandidateRoadways(SqlSugarClient db, string itemCode) { + var list = new List<int>(); // 绛栫暐1锛氬贩閬撳唴鍚岃鏍肩墿鏂�< 10 鐨勫贩閬擄紙鎸夋暟閲忓崌搴忥級 - var materialRoadways = db.Queryable<Location>() - .LeftJoin<LocCntrRel>((a, b) => a.S_CODE == b.S_LOC_CODE) - .LeftJoin<CntrItemRel>((a, b, c) => b.S_CNTR_CODE == c.S_CNTR_CODE) - .Where((a, b, c) => - a.S_AREA_CODE == Settings.stockArea && - a.N_CURRENT_NUM == 1 && - a.N_LOCK_STATE == 0 && - a.C_ENABLE == "Y" && - b.S_CNTR_CODE != null && - c.S_ITEM_CODE == itemCode) - .GroupBy(a => a.N_ROADWAY) - .Having(a => SqlFunc.AggregateCount(a.S_CODE) < 10) - .Select(a => new { Roadway = a.N_ROADWAY, Count = SqlFunc.AggregateCount(a.S_CODE) }) - .OrderBy(a => a.Count) - .Select(a => a.Roadway) - .ToList(); + var materialRoadwayGroup = db.Queryable<Location>() + // 琛ㄥ埆鍚嶏細a = Location, b = LocCntrRel, c = CntrItemRel + .LeftJoin<LocCntrRel>((a, b) => a.S_CODE == b.S_LOC_CODE) + .LeftJoin<CntrItemRel>((a, b, c) => b.S_CNTR_CODE == c.S_CNTR_CODE) - if (materialRoadways.Count > 0) return materialRoadways; + // 鍩虹绛涢�鏉′欢锛堟墍鏈変綅缃級 + .Where((a, b, c) => + a.S_AREA_CODE == Settings.stockArea && // 鎸囧畾鍖哄煙 + a.N_LOCK_STATE == 0 && // 鏈攣瀹�+ a.C_ENABLE == "Y") // 鍚敤鐘舵� - // 绛栫暐2锛氭墍鏈夊贩閬撴寜绌鸿揣浣嶆暟闄嶅簭鎺掑簭 - return db.Queryable<Location>() - .Where(a => - a.S_AREA_CODE == Settings.stockArea && - a.N_CURRENT_NUM == 0 && - a.N_LOCK_STATE == 0 && - a.C_ENABLE == "Y") - .GroupBy(a => a.N_ROADWAY) - .Select(a => new { Roadway = a.N_ROADWAY, Count = SqlFunc.AggregateCount(a.S_CODE) }) - .OrderByDescending(a => a.Count) - .Select(a => a.Roadway) - .ToList(); + // 鎸夊贩閬撳垎缁勶紙浣跨敤鍘熷琛ㄥ瓧娈碉級 + .GroupBy((a, b, c) => a.N_ROADWAY) + + // 閫夋嫨鍒嗙粍缁撴灉锛堝寘鍚仛鍚堣绠楋級 + .Select((a, b, c) => new + { + Roadway = a.N_ROADWAY, // 宸烽亾缂栧彿 + + // 缁熻婊¤冻鐗瑰畾鏉′欢鐨勬暟閲忥細 + // 1. 褰撳墠鏁伴噺=1 (a.N_CURRENT_NUM == 1) + // 2. 鐗╂枡鍖归厤 (c.S_ITEM_CODE == itemCode) + // 3. 瀹瑰櫒鍏宠仈瀛樺湪 (b.S_CNTR_CODE != null) + validCount = SqlFunc.AggregateSum(SqlFunc.IIF( + a.N_CURRENT_NUM == 1 && + c.S_ITEM_CODE == itemCode && + b.S_CNTR_CODE != null, + 1, 0)) + }) + .ToList(); + + + + if (materialRoadwayGroup.Count > 0) + { + list = materialRoadwayGroup.Where(a => a.validCount < 10).OrderBy(a => a.validCount).Select(a => a.Roadway).ToList(); + } + + if (list.Count == 0) + { + // 绛栫暐2锛氭墍鏈夊贩閬撴寜绌鸿揣浣嶆暟闄嶅簭鎺掑簭 + materialRoadwayGroup = db.Queryable<Location>() + .Where(a => + a.S_AREA_CODE == Settings.stockArea && + a.N_CURRENT_NUM == 0 && + a.N_LOCK_STATE == 0 && + a.C_ENABLE == "Y") + .GroupBy(a => a.N_ROADWAY) + .Select(a => new { Roadway = a.N_ROADWAY, validCount = SqlFunc.AggregateCount(a.S_CODE) }) + .ToList(); + + list = materialRoadwayGroup.OrderByDescending(a => a.validCount).Select(a => a.Roadway).ToList(); + } + return list; } /// <summary> @@ -657,6 +697,7 @@ // 鎸夊眰->鍒楁帓搴忥紝渚夸簬鏌ユ壘鐩搁偦 var sorted = locations .OrderBy(l => l.N_LAYER) + .ThenBy(l => l.N_ROW) .ThenBy(l => l.N_COL) .ToList(); @@ -741,12 +782,13 @@ { // 鏌ヨ宸烽亾鏄惁姝e父锛屽紓甯歌烦杩� var stackerStates = WCSDispatch.getStackerState(loc.N_ROADWAY); - if (stackerStates.Count == 0 || stackerStates[0].roadway_state == "0" || stackerStates[0].roadway_state == "3") + if ( false /*stackerStates.Count == 0 || stackerStates[0].roadway_state == "0" || stackerStates[0].roadway_state == "3"*/) { continue; } startLoc = loc; + break; } } return startLoc; @@ -775,25 +817,32 @@ /// 鏌ヨ宸烽亾浠诲姟鏈�皯鐨勬帴椹充綅 /// </summary> /// <returns></returns> - public static Location getMinTaskMiddleLoc(int type) + public static Location getMinTaskMiddleLoc(int type , int roadway = 0 , int excludeRoadway = 0) { Location location = new Location(); var db = new SqlHelper<object>().GetInstance(); - var roadwayGroup = db.Queryable<Location>() + var query = db.Queryable<Location>() .LeftJoin<WCSTask>((a, b) => a.S_CODE == b.S_END_LOC && b.N_B_STATE < 3) - .Where((a, b) => a.S_AREA_CODE == Settings.stockArea) - .GroupBy((a, b) => a.N_ROADWAY) + .Where((a, b) => a.S_AREA_CODE == Settings.stockArea); + + if (roadway != 0) + { + query = query.Where((a, b) => a.N_ROADWAY == roadway); + } + if (excludeRoadway != 0) + { + query = query.Where((a, b) => a.N_ROADWAY != excludeRoadway); + } + + var roadwayGroup = query.GroupBy((a, b) => a.N_ROADWAY) .Select((a, b) => new { roadway = a.N_ROADWAY, num = SqlFunc.AggregateDistinctCount(b.S_CODE != null) }) .OrderBy(a => a.num) .ToList(); foreach (var item in roadwayGroup) { - // 1.鏌ヨ宸烽亾鍐呯殑鍫嗗灈鏈虹姸鎬佹槸鍚︽甯�- - // 2.鏌ヨ鎺ラ┏浣�- var connectLoc = Settings.connectLocList.Where(a => a.type == type && a.roadway == item.roadway).FirstOrDefault(); + var connectLoc = Settings.connectLocList.Where(a => a.roadway == item.roadway).FirstOrDefault(); if (connectLoc != null) { location = LocationHelper.GetLoc(connectLoc.locCode); @@ -804,6 +853,38 @@ } /// <summary> + /// 鏌ヨ涓婄嚎璐т綅 + /// </summary> + /// <param name="type"></param> + /// <returns></returns> + public static Location getOnlneLoc(int type) + { + Location location = null; + var connectLoc = Settings.onLineLocList.Where(a => a.type == type).FirstOrDefault(); + if (connectLoc != null) + { + location = LocationHelper.GetLoc(connectLoc.locCode); + } + return location; + } + + /// <summary> + /// 鏌ヨ鍙枡寮傚父鎺掑嚭浣�+ /// </summary> + /// <param name="row"></param> + /// <returns></returns> + public static Location getCallOutLoc(int row) + { + Location location = null; + var connectLoc = Settings.callOutLocList.Where(a => a.row == row).FirstOrDefault(); + if (connectLoc != null) + { + location = LocationHelper.GetLoc(connectLoc.locCode); + } + return location; + } + + /// <summary> /// 鏌ヨ鐗╂枡瀛樻斁鏃堕棿閰嶇疆淇℃伅 /// </summary> /// <param name="bc_entried"></param> -- Gitblit v1.9.1