From b7308bba3d7ffad271ce7fc7a93c8c45d76be87d Mon Sep 17 00:00:00 2001 From: 杨前锦 <1010338399@qq.com> Date: 星期五, 13 六月 2025 17:21:03 +0800 Subject: [PATCH] 优化印尼佳通-硫化胚胎出入库逻辑策略优化 --- HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs | 1020 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 1,020 insertions(+), 0 deletions(-) diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs new file mode 100644 index 0000000..66bc083 --- /dev/null +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs @@ -0,0 +1,1020 @@ +锘縰sing HH.WCS.Mobox3.FJJF.models; +using HH.WCS.Mobox3.FJJT.models; +using HH.WCS.Mobox3.FJJT.models.other; +using HH.WCS.Mobox3.FJJT.util; +using Newtonsoft.Json; +using NLog.Fluent; +using SqlSugar; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; +using System.Runtime.ConstrainedExecution; +using System.Threading.Tasks; +using System.Web.UI.WebControls; +using static HH.WCS.Mobox3.FJJT.api.ApiModel; +using static HH.WCS.Mobox3.FJJT.util.Settings; + +namespace HH.WCS.Mobox3.FJJT.wms { + /// <summary> + /// wms绠″埌浣滀笟 + /// </summary> + internal class WMSHelper { + internal static string GenerateTaskNo() { + var id = SYSHelper.GetSerialNumber("浣滀笟鍙�, "OP"); + var date = DateTime.Now.ToString("yyMMdd"); + return $"OP{date}{id.ToString().PadLeft(4, '0')}"; + } + internal static string GenerateSortingNo() { + var id = SYSHelper.GetSerialNumber("鍒嗘嫞鍗�, "SO"); + var date = DateTime.Now.ToString("yyMMdd"); + return $"SO{date}{id.ToString().PadLeft(4, '0')}"; + } + + internal static string GenerateAlarmNo() + { + var id = SYSHelper.GetSerialNumber("鎶ヨ璁板綍鍗�, "AL"); + var date = DateTime.Now.ToString("yyMMdd"); + return $"AL{date}{id.ToString().PadLeft(4, '0')}"; + } + internal static string GenerateTempCntrNo() + { + var id = SYSHelper.GetSerialNumber("涓存椂瀹瑰櫒鍙�, "CN"); + var date = DateTime.Now.ToString("yyMMdd"); + return $"CN{date}{id.ToString().PadLeft(4, '0')}"; + } + internal static List<WMSTask> GetOperationListByState(string state) { + var db = new SqlHelper<object>().GetInstance(); + return db.Queryable<WMSTask>().Where(a => a.S_B_STATE == state && a.S_FACTORY == Settings.FacCode).ToList(); + } + internal static List<WMSTask> GetOperationListByState(int state) { + var db = new SqlHelper<object>().GetInstance(); + return db.Queryable<WMSTask>().Where(a => a.N_B_STATE == state && a.S_FACTORY == Settings.FacCode).ToList(); + } + internal static List<WMSTask> GetWaitingOperationList() { + var db = new SqlHelper<object>().GetInstance(); + return db.Queryable<WMSTask>().Where(a => (a.N_B_STATE == 0 || a.N_B_STATE == 3) && a.S_FACTORY == Settings.FacCode).ToList(); + } + + internal static bool CreateWmsTask(WMSTask wmsTask) { + try { + var db = new SqlHelper<object>().GetInstance(); + return db.Insertable<WMSTask>(wmsTask).ExecuteCommand() > 0; + } + catch (Exception ex) { + Console.WriteLine(ex.Message); + throw; + } + } + + internal static bool DeleteWmsTask(string code) + { + try + { + var db = new SqlHelper<object>().GetInstance(); + return db.Deleteable<WMSTask>().Where(a => a.S_CODE == code).ExecuteCommand() > 0; + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + throw; + } + } + + internal static WMSTask GetAwaitWmsTaskByMaterialCode(string materialCode) { + WMSTask wmsTask = null; + var db = new SqlHelper<object>().GetInstance(); + var wmsTaskList = db.Queryable<WMSTask>() + .LeftJoin<CntrItemRel>((a,b) => a.S_CNTR_CODE == b.S_CNTR_CODE) + .Where((a, b) => a.N_B_STATE == 1 && b.S_ITEM_CODE.Trim() == materialCode && a.S_TYPE.Trim() == "鍙枡鍑哄簱浠诲姟").ToList(); + foreach (var task in wmsTaskList) + { + var result = db.Queryable<WCSTask>().Where(a => a.S_OP_CODE == task.S_CODE && a.N_B_STATE > 0).Count() == 0; + if (result) + { + wmsTask = task; + return wmsTask; + } + } + return wmsTask; + } + + internal static WMSTask GetWmsTaskByCntr(string cntr, bool active = true) + { + WMSTask result = null; + var db = new SqlHelper<object>().GetInstance(); + if (active) + { + result = db.Queryable<WMSTask>().Where(a => a.S_CNTR_CODE.Contains(cntr) && a.N_B_STATE < 2).First(); + } + else + { + result = db.Queryable<WMSTask>().Where(a => a.S_CNTR_CODE.Contains(cntr)).First(); + } + return result; + } + + internal static Location GetEnd(WMSTask a) { + throw new NotImplementedException(); + } + + internal static Location GetStart(WMSTask a) { + throw new NotImplementedException(); + } + + internal static void UpdateTaskState(WMSTask task) { + var db = new SqlHelper<object>().GetInstance(); + task.T_MODIFY = DateTime.Now; + task.S_B_STATE = WMSTask.GetStateStr(task.N_B_STATE); + db.Updateable<WMSTask>(task).UpdateColumns(a => new { a.N_TYPE,a.N_B_STATE, a.S_B_STATE, a.T_MODIFY,a.T_END_TIME }).ExecuteCommand(); + } + + + internal static bool UpdateTaskEnd(WMSTask a) { + var db = new SqlHelper<object>().GetInstance(); + a.T_MODIFY = DateTime.Now; + return db.Updateable<WMSTask>(a).UpdateColumns(it => new { it.S_TYPE,it.S_END_LOC,it.S_END_AREA, it.T_MODIFY }).ExecuteCommand() > 0; + } + + internal static WMSTask GetWmsTask(string code) { + var db = new SqlHelper<object>().GetInstance(); + return db.Queryable<WMSTask>().Where(a => a.S_CODE.Trim() == code).First(); + } + + internal static WMSTask GetWmsTaskByEnd(string endLoc) + { + var db = new SqlHelper<object>().GetInstance(); + return db.Queryable<WMSTask>().Where(a => a.S_END_LOC.Trim() == endLoc && a.N_B_STATE < 2).First(); + } + + internal static WMSTask GetWmsTaskByStart(string startLoc) + { + var db = new SqlHelper<object>().GetInstance(); + return db.Queryable<WMSTask>().Where(a => a.S_START_LOC.Trim() == startLoc && a.N_B_STATE < 2).First(); + } + + internal static bool isFinishTask(string wmsTaskNo) + { + bool result = false; + var db = new SqlHelper<object>().GetInstance(); + result = db.Queryable<WCSTask>().Where(a => a.S_OP_CODE.Trim() == wmsTaskNo && a.N_B_STATE < 3).Count() == 0; + return result; + } + + /// <summary> + /// 鏌ヨ鎴愬瀷鏈鸿繑鏂欒揣浣�+ /// </summary> + /// <param name="locCode"></param> + /// <returns></returns> + public static SideLocConfig getReturnMaterialLocCode(string locCode) + { + var db = new SqlHelper<object>().GetInstance(); + return db.Queryable<SideLocConfig>().Where(a => a.S_LOC_CODE.Trim() == locCode).First(); + } + + /// <summary> + /// 鏌ヨ鎴愬瀷鏈哄彨鏂欎綅 + /// </summary> + /// <param name="jtNo"></param> + /// <returns></returns> + public static Location getCallMaterialLocCode(string jtNo) + { + var db = new SqlHelper<object>().GetInstance(); + + Location loc = null; + var returnMaterialLocs = db.Queryable<SideLocConfig>().Where(a => a.EQP.Trim() == jtNo).ToList(); + if (returnMaterialLocs.Count > 0) + { + foreach (var item in returnMaterialLocs) + { + loc = LocationHelper.GetLoc(item.S_LOC_CODE); + if (loc.N_CURRENT_NUM == 0 && loc.N_LOCK_STATE == 0) + { + break; + } + } + } + return loc; + } + // --------------------------------------------------------绂忓缓浣抽�----------------------------------------- + + + /// <summary> + /// 鏌ヨ閫昏緫閰嶇疆琛�+ /// </summary> + /// <param name="taskType">浠诲姟绫诲瀷</param> + /// <returns></returns> + internal static List<LogicConfig> getLogicConfigByTaskType(string taskType) + { + var db = new SqlHelper<object>().GetInstance(); + var logicConfigList = db.Queryable<LogicConfig>() + .Where(a => a.S_TASK_TYPE.Trim() == taskType && a.S_ENABLE.Trim() == "鏄�) + .OrderBy(a => a.S_PRI) + .ToList(); + return logicConfigList; + } + + /// <summary> + /// 鏌ヨ閫昏緫閰嶇疆琛�+ /// </summary> + /// <param name="hcLocCode">琛ョ┖缂撳瓨浣�/param> + /// <returns></returns> + internal static LogicConfig getLogicConfigByHcLoc(string hcLocCode) + { + var db = new SqlHelper<object>().GetInstance(); + var logicConfig = db.Queryable<LogicConfig>() + .Where(a => a.S_LKBKHCLOC.Trim() == hcLocCode && a.S_ENABLE.Trim() == "鏄�) + .OrderBy(a => a.S_PRI) + .First(); + return logicConfig; + } + + /// <summary> + /// 鏌ヨ閫昏緫閰嶇疆琛�+ /// </summary> + /// <param name="mtjbLoc">婊℃枡鎺ラ┏浣�/param> + /// <returns></returns> + internal static LogicConfig getLogicConfigByMtjbLoc(string mtjbLoc) + { + var db = new SqlHelper<object>().GetInstance(); + var logicConfig = db.Queryable<LogicConfig>() + .Where(a => a.S_MTJBLOC.Trim() == mtjbLoc && a.S_ENABLE.Trim() == "鏄�) + .OrderBy(a => a.S_PRI) + .First(); + return logicConfig; + } + + /// <summary> + /// 鏌ヨ閫昏緫閰嶇疆琛�+ /// </summary> + /// <param name="jtCode"></param> + /// <returns></returns> + internal static LogicConfig getLogicConfigByJtCode(string jtCode) + { + var db = new SqlHelper<object>().GetInstance(); + var logicConfig = db.Queryable<LogicConfig>() + .Where(a => a.S_JT_CODE.Trim() == jtCode && a.S_ENABLE.Trim() == "鏄�) + .OrderBy(a => a.S_PRI) + .First(); + return logicConfig; + } + + /// <summary> + /// 鏌ヨ鏌愪釜鐗╂枡鍦ㄤ腑杞簱鐨勫簱瀛樹俊鎭�+ /// </summary> + /// <param name="itemCode"></param> + /// <returns></returns> + public static List<CntrItemRel> getZZKInventoryInfo(string itemCode) + { + var db = new SqlHelper<object>().GetInstance(); + List < CntrItemRel > cntrItemRels = new List<CntrItemRel>(); + string areaCode = Settings.areaPropertyList.Where(a => a.areaName.Contains("涓浆搴�)).Select(a => a.areaCode).FirstOrDefault(); + if (areaCode != null) + { + cntrItemRels = db.Queryable<CntrItemRel>() + .LeftJoin<LocCntrRel>((a, b) => a.S_CNTR_CODE == b.S_CNTR_CODE) + .LeftJoin<Location>((a, b, c) => b.S_LOC_CODE == c.S_CODE) + .LeftJoin<Container>((a, b, c, d) => a.S_CNTR_CODE == d.S_CODE) + .Where((a, b, c, d) => c.S_AREA_CODE == areaCode + && c.N_CURRENT_NUM == 1 + && c.N_LOCK_STATE == 0 + && a.S_ITEM_CODE == itemCode + && d.N_E_STATE == 0 // 鎵樼洏姝e父 + ) + .OrderBy((a, b, c, d) => a.T_INBOUND_TIME) + .ToList(); + } + return cntrItemRels; + } + + /// <summary> + /// 鏌ヨ鍑哄簱寮�璧风偣 + /// 娉細闇�繃婊ゅ爢鍨涙満鏁呴殰鐨勫贩閬�+ /// </summary> + /// <param name="areaCode"></param> + /// <param name="traySatus">0.榛樿銆�.寮傚父</param> + /// <param name="materialCode"></param> + /// <param name="trayCode"></param> + /// <returns></returns> + internal static Location getOutStockStartLoc(string areaCode ,string materialCode,int traySatus = 0, string trayCode = "") + { + Location loc = null; + var db = new SqlHelper<object>().GetInstance(); + + var queryable = db.Queryable<Location>() + .LeftJoin<LocCntrRel>((a, b) => a.S_CODE == b.S_LOC_CODE) + .LeftJoin<Container>((a, b, c) => b.S_CNTR_CODE == c.S_CODE) + .LeftJoin<CntrItemRel>((a, b, c, d) => c.S_CODE == d.S_CNTR_CODE) + .Where((a, b, c, d) => a.N_CURRENT_NUM > 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE.Trim() == "Y" ); + + if (areaCode != null && areaCode != "") + { + queryable = queryable.Where((a, b, c, d ) => a.S_AREA_CODE.Trim() == areaCode); + } + if (traySatus == 0) + { + queryable = queryable.Where((a, b, c, d) => c.N_E_STATE == 0); + } + else if (traySatus == 1) + { + queryable = queryable.Where((a, b, c, d) => c.N_E_STATE != 0); + } + if (materialCode != null && materialCode != "") + { + queryable = queryable.Where((a, b, c, d) => d.S_ITEM_CODE.Trim() == materialCode); + } + else + { + queryable = queryable.Where((a, b, c, d) => d.S_ITEM_CODE == null); + } + if (trayCode != null && trayCode != "") + { + queryable = queryable.Where((a, b, c, d) => b.S_CNTR_CODE.Trim() == trayCode); + } + + loc = queryable.OrderBy((a, b, c, d) => d.T_INBOUND_TIME).First(); + return loc; + } + + /// <summary> + /// 鏌ヨ鍏ュ簱缁堢偣璐т綅 + /// </summary> + /// <param name="areaCode"></param> + /// <param name="trayStatus">0.绌鸿溅 1.婊¤溅 </param> + /// <param name="trayType"></param> + /// <returns></returns> + internal static Location getInStockEndLoc(string areaCode,int trayStatus, int trayType = 0) + { + LogHelper.Info("寮�鏌ヨ绔嬪簱缁堢偣璐т綅", "WMS"); + Location location = null; + var db = new SqlHelper<object>().GetInstance(); + try + { + string S_ZONE_CLS_CODE = ""; + if (trayStatus == 0) + { + S_ZONE_CLS_CODE = "KT"; + } + else if (trayStatus == 1) + { + S_ZONE_CLS_CODE = "ML"; + } + + if (areaCode == null) + { + if (trayType != 0) + { + // 鏍规嵁鎵樼洏绫诲瀷鏌ヨ瀵瑰簲鐨勭珛搴撶紪鐮�+ List<string> areaCodes = Settings.getCntrAreaList(trayType); + LogHelper.Info($"鎵樼洏绫诲瀷瀵瑰簲鐨勫簱鍖猴細{JsonConvert.SerializeObject(areaCodes)}", "WMS"); + + // 璁$畻绔嬪簱鐨勫绉巼锛屽彇瀹圭Н鐜囨渶澶х殑搴撳尯 + var areaList = db.Queryable<Location>() + .LeftJoin<ZoneLoc>((a, b) => a.S_CODE == b.S_LOC_CODE) + .LeftJoin<Zone>((a, b, c) => b.S_ZONE_CODE == c.S_CODE) + .Where((a, b, c) => areaCodes.Contains(a.S_AREA_CODE.Trim()) && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y" && c.S_ZONE_CLS_CODE.Trim() == S_ZONE_CLS_CODE) + .GroupBy((a, b, c) => a.S_AREA_CODE) + .Select((a, b, c) => new + { + S_AREA_CODE = a.S_AREA_CODE, + num = SqlFunc.AggregateCount(a.S_CODE) + }) + .MergeTable() + .OrderByDescending(s => s.num) + .ToList(); + LogHelper.Info($"鎸夊绉巼鎺掑簭鐨勫簱鍖猴細{JsonConvert.SerializeObject(areaList)}", "WMS"); + + foreach (var item in areaList) + { + location = db.Queryable<Location>() + .LeftJoin<ZoneLoc>((a, b) => a.S_CODE == b.S_LOC_CODE) + .LeftJoin<Zone>((a, b, c) => b.S_ZONE_CODE == c.S_CODE) + .Where((a, b, c) => a.S_AREA_CODE.Trim() == item.S_AREA_CODE.Trim() && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y" && c.S_ZONE_CLS_CODE.Trim() == S_ZONE_CLS_CODE) + .OrderBy((a, b, c) => a.N_LAYER) + .First(); + } + } + + // 搴撳尯瀹夊叏搴撳瓨鐩戞祴锛屽苟鎶ヨ + /* var safety_Inventory = getSafetyInventory(areaCode,null, trayType.ToString()); + if (safety_Inventory != null) + { + + }*/ + } + else + { + location = db.Queryable<Location>() + .LeftJoin<ZoneLoc>((a, b) => a.S_CODE == b.S_LOC_CODE) + .LeftJoin<Zone>((a, b, c) => b.S_ZONE_CODE == c.S_CODE) + .Where((a, b, c) => a.S_AREA_CODE.Trim() == areaCode && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y" && c.S_ZONE_CLS_CODE == S_ZONE_CLS_CODE) + .OrderBy((a, b, c) => a.N_LAYER) + .First(); + } + LogHelper.Info($"鏌ヨ缁撴潫,绔嬪簱缁堢偣璐т綅:{JsonConvert.SerializeObject(location)}","WMS"); + } + catch (Exception ex) + { + LogHelper.Info($"WMS鍐呴儴閿欒:鏌ヨ鍏ュ簱缁堢偣璐т綅(getInStockEndLoc)閿欒,閿欒鍘熷洜锛歿ex.Message}", "WMS"); + throw ex; + } + return location; + } + + public static bool addAlarmRecord(string alarmType , string alarmLevel ,string alarmMsg ,string logSite = "WMS") { + var db = new SqlHelper<object>().GetInstance(); + bool result = true; + LogHelper.Info(alarmMsg, logSite); + var alarmRecord = db.Queryable<AlarmRecord>().Where(a => a.N_IS_READ == 0 && a.S_ALARM_MSG == alarmMsg).First(); + if (alarmRecord == null) + { + alarmRecord = new AlarmRecord() + { + S_ALARM_CODE = GenerateAlarmNo(), + S_ALARM_TYPE = alarmType, + S_ALARM_LEVEL = alarmLevel, + S_ALARM_MSG = alarmMsg, + S_FILE_NAME = logSite, + }; + result = db.Insertable<AlarmRecord>(alarmRecord).ExecuteCommand() > 0; + } + else + { + alarmRecord.T_MODIFY = DateTime.Now; + result = db.Updateable<AlarmRecord>(alarmRecord).ExecuteCommand() > 0; + } + return result; + } + + public static bool addRfidAnomalyRecord(string rfid ,int anomalyType ,string locCode ,string taskNo) + { + var db = new SqlHelper<object>().GetInstance(); + RfidAnomalyRecord anomalyRecord = new RfidAnomalyRecord() + { + S_RFID = rfid, + N_ANOMALY_TYPE = anomalyType, + S_ANOMALY_TYPE = RfidAnomalyRecord.getAnomalyType(anomalyType), + S_LOC_CODE = locCode, + S_TASK_NO = taskNo + }; + return db.Insertable<RfidAnomalyRecord>(anomalyRecord).ExecuteCommand() > 0; + } + + /// <summary> + /// 鏌ヨ鎴愬瀷鏈虹嚎杈�+ /// </summary> + /// <param name="jtNo"></param> + /// <returns></returns> + public static SideLocConfig GetLineSideLoc(string jtNo) + { + var db = new SqlHelper<object>().GetInstance(); + return db.Queryable<SideLocConfig>().Where(a => a.EQP.Trim() == jtNo).First(); + } + + /// <summary> + /// 鑾峰彇寮傚父搴撹揣浣�+ /// </summary> + /// <param name="areaCode"></param> + /// <returns></returns> + public static Location getAbnormalAreaLoc(string areaCode) + { + Location loc = null; + var db = new SqlHelper<object>().GetInstance(); + loc = db.Queryable<Location>() + .LeftJoin<AbnormalAreaConfig>((a, b) => a.S_AREA_CODE == b.S_SUP_AREA) + .Where((a, b) => a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y" && b.S_AREA_CODE.Trim() == areaCode) + .First(); + return loc; + } + + /// <summary> + /// 鏌ヨ鎺ラ┏浣嶅叧鑱斿睘鎬�+ /// </summary> + /// <param name="locCode"></param> + /// <returns></returns> + public static TransfeRelevance GetTransfeRelevance(string locCode) { + var db = new SqlHelper<object>().GetInstance(); + return db.Queryable<TransfeRelevance>().Where(a => a.S_LOC_CODE.Trim() == locCode).First(); + } + + /// <summary> + /// 鏌ヨ鎺ラ┏浣嶅叧鑱斿睘鎬�+ /// 娉細 + /// 1.鏌ヨ寮傚父鍖鸿揣浣�+ /// </summary> + /// <param name="areaCode">搴撳尯</param> + /// <param name="property">璐т綅灞炴�锛�.鐩磋繛 2.闈炵洿杩烇級</param> + /// <param name="type">鍔ㄤ綔绫诲瀷锛�.浜哄伐鎺ラ┏浣�1.鍏ュ簱鎺ラ┏浣�2.鍑哄簱鎺ラ┏浣嶏級</param> + /// <returns></returns> + public static Location GetTransfeRelevanceLoc(string areaCode ,int type ,int property ) + { + Location loc = null; + var db = new SqlHelper<object>().GetInstance(); + loc = db.Queryable<Location>() + .LeftJoin<TransfeRelevance>((a,b)=> a.S_CODE == b.S_LOC_CODE) + .Where((a, b) => b.S_RELE_AREA.Trim() == areaCode && b.N_PROPERTY == property && b.N_TYPE == type && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y") + .First(); + return loc; + } + + /// <summary> + /// 鏌ヨ鎺ラ┏浣嶅叧鑱斿睘鎬�+ /// </summary> + /// <param name="locCode"></param> + /// <param name="isManual">璐т綅灞炴� (0.闈炰汉宸�1.浜哄伐)</param> + /// <returns></returns> + public static bool updateTransfeLocProperty(string locCode ,int isManual) + { + bool result = false; + var db = new SqlHelper<object>().GetInstance(); + result = db.Updateable<TransfeRelevance>().SetColumns(a => new TransfeRelevance() { N_IS_MANUAL = isManual } ).Where(a => a.S_LOC_CODE.Trim() == locCode).ExecuteCommand() > 0; + return result; + } + + /// <summary> + /// 鏌ヨ绔嬪簱鎺ラ┏浣�+ /// 娉細鏌ヨ浠诲姟鏈�皯鐨勬帴椹充綅 + /// </summary> + /// <param name="areaCode">搴撳尯</param> + /// <param name="property">璐т綅灞炴� ( 1.鐩磋繛 2.闈炵洿杩�</param> + /// <param name="type">鍔ㄤ綔绫诲瀷 锛�.鍏ュ簱鎺ラ┏浣� 2.鍑哄簱鎺ラ┏浣嶏級</param> + /// <returns></returns> + public static Location GetMinTaskTransfeLoc(string areaCode ,int type, int property) + { + var db = new SqlHelper<object>().GetInstance(); + var loc = db.Queryable<Location>() + .LeftJoin<TransfeRelevance>((a,b) => a.S_CODE == b.S_LOC_CODE) + .LeftJoin<WCSTask>((a,b,c) => a.S_CODE == c.S_END_LOC && c.N_B_STATE < 3) + .Where((a, b, c) => b.S_RELE_AREA.Trim() == areaCode && b.N_TYPE == type && b.N_PROPERTY == property && a.N_LOCK_STATE < 3 && a.C_ENABLE == "Y") + .GroupBy((a, b, c) => a.S_CODE) + .Select((a, b, c) => new { + count = SqlFunc.AggregateCount(c.S_END_LOC), + code = a.S_CODE.Trim() + }) + .MergeTable() //闇�鍔燤ergeTable鎵嶈兘鎺掑簭缁熻杩囩殑鍒�+ .OrderBy(it => it.count) + .First(); + if (loc != null) + { + return LocationHelper.GetLoc(loc.code); + } + return null; + } + + /// <summary> + /// 鏌ヨ鐗╂枡淇℃伅 + /// </summary> + /// <param name="materialCode"></param> + /// <returns></returns> + public static TN_Material GetMaterial(string materialCode) { + var db = new SqlHelper<object>().GetInstance(); + return db.Queryable<TN_Material>().Where(a => a.S_ITEM_CODE.Trim() == materialCode).First(); + } + + /// <summary> + /// 鏌ヨ瀹夊叏搴撳瓨 + /// </summary> + public static Safety_Inventory getSafetyInventory(string areaCode, string materialCode ,string trayType) + { + var db = new SqlHelper<object>().GetInstance(); + var query = db.Queryable<Safety_Inventory>().Where(a => a.S_AREA_CODE.Trim() == areaCode); + if (materialCode != null) + { + query = query.Where(a => a.S_MATERIAL_CODE == materialCode); + } + if (trayType != null) + { + query = query.Where(a => a.S_PALLET_TYPE == trayType); + } + return query.First(); + } + + //------------------------------------------------MES涓棿琛�---------------------------------------------- + + + /// <summary> + /// 璇诲彇MES涓嬫枡浠诲姟 + /// 1.澶囦唤瀹瑰櫒鐗╂枡淇℃伅 + /// 2.鏇存柊涓棿琛ㄧ姸鎬佷负宸茶 + /// </summary> + /// <param name="taskNo"></param> + /// <param name="id"></param> + /// <returns></returns> + internal static LjMesTask readLjMesOffItemTask(string taskNo , int id) + { + LogHelper.Info($"鏌ヨ鍒癕ES涓嬪彂WMS浠诲姟,mesTaskId:{id},浠诲姟鍙�{taskNo}" , "WMS"); + var db = new SqlHelper<object>().GetInstance(); + try + { + db.BeginTran(); + // 1.鏌ヨMES浠诲姟琛�+ var mesTask = db.Queryable<LjMesTask>().Where(a => a.ID == id && a.RECEIVE_FLAG.Trim() == "PENDING" ).OrderByDescending(a => a.T_CREATE).First(); + if (mesTask != null) + { + // 閲嶇疆绌哄伐瑁呬俊鎭�+ ContainerHelper.AddContainer(mesTask.PALLET_ID, int.Parse(mesTask.PALLET_TYPE),mesTask.QTY == 0 ? 0 : 1); + + mesTask.AGVORDER_ID = taskNo; + mesTask.RETURN_CODE = "1"; + mesTask.RECEIVE_FLAG = "COMPLETE"; + mesTask.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd"); + db.Updateable(mesTask).ExecuteCommand(); + } + else + { + LogHelper.Info("鏈煡璇㈠埌MES涓嬪彂WMS浠诲姟", "WMS"); + } + db.CommitTran(); + return mesTask; + } + catch (Exception ex) + { + db.RollbackTran(); + LogHelper.Info($"璇诲彇MES涓嬪彂浠诲姟澶辫触锛岄敊璇師鍥�{ex.Message}" , "WMS"); + WMSHelper.addAlarmRecord("绯荤粺閿欒", "楂�, $"璇诲彇MES涓嬪彂浠诲姟澶辫触锛岄敊璇師鍥�{ex.Message}"); + } + return null; + } + + /// <summary> + /// 鏇存柊鎵樼洏鐗╂枡淇℃伅 + /// </summary> + public static void updatePalletAndMateral() + { + var db = new SqlHelper<object>().GetInstance(); + var lotCarrierList = db.Queryable<LjLotCarrier>().Where(a => a.RECEIVE_FLAG.Trim() == "PENDING").ToList(); + foreach (var lotCarrier in lotCarrierList) + { + CntrItemRel cntrItemRel = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == lotCarrier.PALLET_ID).First(); + + if (cntrItemRel != null) + { + cntrItemRel.S_CNTR_CODE = lotCarrier.PALLET_ID; + cntrItemRel.S_BATCH_NO = lotCarrier.LOT_NAME; + cntrItemRel.S_SERIAL_NO = lotCarrier.YCL_BATCH; + cntrItemRel.S_ITEM_CODE = lotCarrier.MATERIALCODE; + cntrItemRel.F_QTY = lotCarrier.QTY; + cntrItemRel.D_PRD_DATE = lotCarrier.PRODUCTION_DATE; + cntrItemRel.S_ITEM_STATE = lotCarrier.QC_STATUS; + cntrItemRel.D_EXP_DATE = lotCarrier.SHELFLIFE_DATE; + cntrItemRel.D_EXP_DATE1 = lotCarrier.MINSHELFLIFE_DATE; + db.Updateable(cntrItemRel).ExecuteCommand(); + } + else + { + cntrItemRel = new CntrItemRel() + { + S_CNTR_CODE = lotCarrier.PALLET_ID, + S_BATCH_NO = lotCarrier.LOT_NAME, + S_SERIAL_NO = lotCarrier.YCL_BATCH, + S_ITEM_CODE = lotCarrier.MATERIALCODE, + F_QTY = lotCarrier.QTY, + D_PRD_DATE = lotCarrier.PRODUCTION_DATE, + S_ITEM_STATE = lotCarrier.QC_STATUS, + D_EXP_DATE = lotCarrier.SHELFLIFE_DATE, + D_EXP_DATE1 = lotCarrier.MINSHELFLIFE_DATE, + }; + db.Insertable(cntrItemRel).ExecuteCommand(); + } + + lotCarrier.RECEIVE_FLAG = "COMPLETE"; + lotCarrier.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd"); + db.Updateable(lotCarrier).UpdateColumns(a => new { a.RECEIVE_FLAG, a.RECEIVE_DATE }).ExecuteCommand(); + } + } + + /// <summary> + /// 鏇存柊鐗╂枡淇℃伅 + /// </summary> + public static void updateMateral() + { + var db = new SqlHelper<object>().GetInstance(); + var materialList = db.Queryable<LjItem>().Where(a => a.RECEIVE_FLAG.Trim() == "PENDING").ToList(); + foreach (var item in materialList) + { + TN_Material material = db.Queryable<TN_Material>().Where(a => a.S_ITEM_CODE == item.MATERIAL_CODE).First(); + + if (material != null) + { + material.S_ITEM_CODE = item.MATERIAL_CODE; + material.S_ITEM_NAME = item.MATERIAL_NAME; + material.S_SPEC = item.SPEC; + material.S_MODEL = item.MODEL; + material.S_UNIT = item.UNIT; + material.S_MEMO = item.MEMO; + db.Updateable(material).ExecuteCommand(); + } + else + { + material = new TN_Material() + { + S_ITEM_CODE = item.MATERIAL_CODE, + S_ITEM_NAME = item.MATERIAL_NAME, + S_SPEC = item.SPEC, + S_MODEL = item.MODEL, + S_UNIT = item.UNIT, + S_MEMO = item.MEMO, + }; + db.Insertable(material).ExecuteCommand(); + } + + item.RECEIVE_FLAG = "COMPLETE"; + item.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd"); + db.Updateable(item).ExecuteCommand(); + } + } + + /// <summary> + /// 鏌ヨ鎵樼洏鐗╂枡淇℃伅 + /// </summary> + /// <param name="trayNo"></param> + /// <returns></returns> + internal static LjLotCarrier getLjCntrMaterial(string trayNo) + { + // 1.鏌ヨMES浠诲姟琛�+ var db = new SqlHelper<object>().GetInstance(); + var lotCarrier = db.Queryable<LjLotCarrier>().Where(a => a.PALLET_ID.Trim() == trayNo).First(); + return lotCarrier; + } + + + /// <summary> + /// 鏌ヨMES鍙嶆枡浠诲姟 + /// </summary> + /// <param name="cntrCode"></param> + /// <returns></returns> + internal static LjMesTask getLjMesTaskByCntr(string cntrCode) + { + // 1.鏌ヨMES浠诲姟琛�+ var db = new SqlHelper<object>().GetInstance(); + var mesTask = db.Queryable<LjMesTask>().Where(a => a.PALLET_ID.Trim() == cntrCode && a.RECEIVE_FLAG.Trim() == "PENDING").OrderByDescending(a => a.T_CREATE).First(); + return mesTask; + } + + /// <summary> + /// 鏍规嵁鏈哄彴鍙锋煡璇ES浠诲姟 + /// </summary> + /// <param name="jtNo"></param> + /// <returns></returns> + internal static LjMesTask getLjMesTaskByJtNo(string jtNo) + { + // 1.鏌ヨMES浠诲姟琛�+ var db = new SqlHelper<object>().GetInstance(); + var mesTask = db.Queryable<LjMesTask>().Where(a => a.EQP.Trim() == jtNo && a.RECEIVE_FLAG.Trim() == "PENDING").OrderByDescending(a => a.T_CREATE).First(); + return mesTask; + } + + /// <summary> + /// 鏍规嵁鐐逛綅缂栧彿鏌ヨMES鍙枡浠诲姟 + /// </summary> + /// <param name="positionId"></param> + /// <returns></returns> + internal static LjMesTask getLjMesTaskByLoc(string positionId) + { + // 1.鏌ヨMES浠诲姟琛�+ var db = new SqlHelper<object>().GetInstance(); + var mesTask = db.Queryable<LjMesTask>().Where(a => a.POSITION_ID.Trim() == positionId && a.RECEIVE_FLAG.Trim() == "PENDING").OrderByDescending(a => a.T_CREATE).First(); + return mesTask; + } + + /// <summary> + /// 鏇存柊MES浠诲姟涓棿琛�+ /// </summary> + /// <param name="mesTask"></param> + /// <returns></returns> + internal static bool updateLjMesTask(LjMesTask mesTask) + { + bool result = false; + var db = new SqlHelper<object>().GetInstance(); + result = db.Updateable(mesTask).ExecuteCommand() > 0; + return result; + } + + /// <summary> + /// 璇诲彇MES鍙枡浠诲姟 + /// 1.澶囦唤瀹瑰櫒鐗╂枡淇℃伅 + /// 2.鏇存柊涓棿琛ㄧ姸鎬佷负宸茶 + /// </summary> + /// <param name="taskNo"></param> + /// <param name="id"></param> + /// <returns></returns> + internal static bool readLjMesCallItemTask(string taskNo, int id) + { + LogHelper.Info( $"璇诲彇MES鍙枡浠诲姟,浠诲姟鍙�{taskNo},MES涓嬪彂浠诲姟ID锛歿id}", "WMS"); + bool result = false; + var db = new SqlHelper<object>().GetInstance(); + try + { + db.BeginTran(); + var mesTask = db.Queryable<LjMesTask>().Where(a => a.ID == id ).OrderByDescending(a => a.T_CREATE).First(); + if (mesTask != null) + { + mesTask.AGVORDER_ID = taskNo; + mesTask.RETURN_CODE = "1"; + mesTask.RECEIVE_FLAG = "COMPLETE"; + mesTask.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd"); + result = db.Updateable(mesTask).ExecuteCommand() > 0; + } + else + { + LogHelper.Info("鏈煡璇㈠埌MES涓嬪彂WMS浠诲姟", "WMS"); + } + db.CommitTran(); + } + catch (Exception ex) + { + db.RollbackTran(); + LogHelper.Error("璇诲彇MES鍙枡浠诲姟锛孍RROR_MSG:" + ex.Message, ex, "WMS"); + } + return result; + } + + /// <summary> + /// 鏌ヨMES浠诲姟琛�+ /// </summary> + /// <param name="taskNo"></param> + /// <returns></returns> + public static LjMesTask GetLjMesTaskByAgvorderId(string taskNo) { + var db = new SqlHelper<object>().GetInstance(); + return db.Queryable<LjMesTask>().Where(a => a.AGVORDER_ID.Trim() == taskNo).First(); + } + + /// <summary> + /// 鏌ヨMES浠诲姟琛�+ /// </summary> + /// <param name="mesTaskId"></param> + /// <returns></returns> + public static LjMesTask GetLjMesTaskById(int mesTaskId) + { + var db = new SqlHelper<object>().GetInstance(); + return db.Queryable<LjMesTask>().Where(a => a.ID == mesTaskId).First(); + } + + /// <summary> + /// 鏌ヨMES浠诲姟琛�+ /// </summary> + /// <param name="receiveFlag">宸茶鏍囪瘑</param> + /// <returns></returns> + public static List<LjMesTask> GetLjMesTaskList(string receiveFlag ) + { + var db = new SqlHelper<object>().GetInstance(); + return db.Queryable<LjMesTask>().Where(a => a.RECEIVE_FLAG.Trim() == receiveFlag ).ToList(); + } + + /// <summary> + /// 鏇存柊MES浠诲姟鐘舵� + /// </summary> + /// <param name="taskNo"></param> + /// <param name="status">0:榛樿鍊�1锛氫换鍔″凡鐢熸垚 2锛氫换鍔¤繍琛屼腑 3锛氫换鍔″畬鎴�4锛氫换鍔″け璐�5锛氫换鍔″彇娑�6锛氬叾浠栭敊璇�绛�/param> + /// <param name="msg"></param> + /// <returns></returns> + public static bool updateMesTaskStatus(string taskNo, string status, string msg = "") + { + bool result = false; + var db = new SqlHelper<object>().GetInstance(); + result = db.Updateable<LjMesTask>().SetColumns(a => new LjMesTask() { RETURN_CODE = status , RECEIVE_MSG = msg}).Where(a => a.AGVORDER_ID.Trim() == taskNo).ExecuteCommand() > 0; + return result; + } + + /// <summary> + /// 鏇存柊鍑哄簱浠诲姟涓棿琛ㄧ姸鎬�+ /// </summary> + /// <param name="taskNo"></param> + /// <param name="status">1锛氭墽琛屼腑锛�锛氬畬鎴�绛�/param> + /// <returns></returns> + public static bool updateMesOutTaskStatus(int taskNo, string status) + { + bool result = false; + var db = new SqlHelper<object>().GetInstance(); + result = db.Updateable<LjLotOutTask>().SetColumns(a => new LjLotOutTask() { TASK_STATUS = status }).Where(a => a.ID == taskNo).ExecuteCommand() > 0; + return result; + } + + /// <summary> + /// 娣诲姞搴撳瓨琛�+ /// </summary> + /// <param name="ljLotOnhand"></param> + /// <returns></returns> + public static bool addLjLotOnhand(LjLotOnhand ljLotOnhand) { + bool result = false; + var db = new SqlHelper<object>().GetInstance(); + ljLotOnhand.CREATION_DATE = DateTime.Now; + result = db.Insertable<LjLotOnhand>(ljLotOnhand).ExecuteCommand()>0; + return result; + } + + /// <summary> + /// 娣诲姞鍑哄簱浠诲姟璁板綍 + /// </summary> + /// <param name="locCode"></param> + /// <returns></returns> + public static bool addLotOutTask(string locCode) { + bool result = false; + var db = new SqlHelper<object>().GetInstance(); + var locCntrs = LocationHelper.GetLocCntr(locCode); + if (locCntrs != null && locCntrs.Count > 0) + { + LjLotOutTask ljLotOutTask = new LjLotOutTask() + { + PALLET_ID = locCntrs[0].S_CNTR_CODE, + POSITION_ID = locCntrs[0].S_LOC_CODE, + CREATION_DATE = DateTime.Now.ToString("yyyy-MM-dd"), + TASK_STATUS = "1" // 1.鎵ц涓�+ }; + + var cntrItems = ContainerHelper.GetCntrItemRel(locCntrs[0].S_CNTR_CODE); + if (cntrItems != null && cntrItems.Count > 0) + { + ljLotOutTask.MATERIAL_CODE = cntrItems[0].S_ITEM_CODE; + ljLotOutTask.LOT_NAME = cntrItems[0].S_BATCH_NO; + ljLotOutTask.QC_STATUS = cntrItems[0].S_ITEM_STATE; + ljLotOutTask.UNIT = cntrItems[0].S_UOM; + ljLotOutTask.QTY = (int)cntrItems[0].F_QTY; + } + result = db.Insertable<LjLotOutTask>(ljLotOutTask).ExecuteCommand() > 0; + } + return result; + } + + /// <summary> + /// 鏇存柊鍑哄簱浠诲姟璁板綍 + /// </summary> + /// <param name="cntrCode"></param> + /// <param name="status"></param> + /// <returns></returns> + public static bool updateLotOutTask(string cntrCode,string status) + { + bool result = false; + var db = new SqlHelper<object>().GetInstance(); + var ljLotOutTask = db.Queryable<LjLotOutTask>().Where(a => a.PALLET_ID == cntrCode && a.TASK_STATUS == "1").OrderByDescending(a => a.T_CREATE).First(); + if (ljLotOutTask != null) { + ljLotOutTask.TASK_STATUS = status; + result = db.Updateable<LjLotOutTask>(ljLotOutTask).ExecuteCommand()>0; + } + return result; + } + + // -----------------------------------------鏂滆涓棿琛�--------------------------------------------- + + + /// <summary> + /// 涓嬪彂XC浠诲姟 + /// </summary> + /// <param name="mesTask"></param> + /// <returns></returns> + public static bool addLjXcTask(LjMesTask mesTask) + { + bool result = false; + var db = new SqlHelper<object>().GetInstance(); + if (mesTask != null) { + LjXcTask ljXcTask = new LjXcTask() { + ID = mesTask.ID, + POSITION_ID = mesTask.POSITION_ID, + RETURN_CODE = mesTask.RETURN_CODE, + MSG_TYPE = mesTask.MSG_TYPE, + PALLET_TYPE = mesTask.PALLET_TYPE, + MATERIAL_NAME = mesTask.MATERIAL_NAME, + MATERIAL_CODE = mesTask.MATERIAL_CODE, + QTY = mesTask.QTY, + YCL_BATCH = mesTask.YCL_BATCH, + PALLET_ID = mesTask.PALLET_ID, + AGVORDER_ID = mesTask.AGVORDER_ID, + CREATION_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + RECEIVE_FLAG = mesTask.RECEIVE_FLAG, + EQP = mesTask.EQP, + PLAN_ID = mesTask.PLAN_ID + }; + result = db.Insertable<LjXcTask>(ljXcTask).ExecuteCommand() > 0; + } + return result; + } + + + /// <summary> + /// 鏌ヨ鏂滆浠诲姟琛�+ /// </summary> + /// <param name="mesTaskId"></param> + /// <returns></returns> + public static LjXcTask GetLjXcTaskById(int mesTaskId) + { + var db = new SqlHelper<object>().GetInstance(); + return db.Queryable<LjXcTask>().Where(a => a.ID == mesTaskId).First(); + } + + /// <summary> + /// 鏌ヨ鏂滆鍑哄簱浠诲姟琛�+ /// </summary> + /// <param name="taskStatus"></param> + /// <param name="receiveFlag"></param> + /// <returns></returns> + public static List<LjXcOutTask> getLjXcOutTask(string receiveFlag ,string taskStatus) + { + var db = new SqlHelper<object>().GetInstance(); + return db.Queryable<LjXcOutTask>().Where(a => a.RECEIVE_FLAG == receiveFlag && a.TASK_STATUS == taskStatus).ToList(); + } + + } +} -- Gitblit v1.9.1