using 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 { /// /// wms管到作业 /// 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 GetOperationListByState(string state) { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.S_B_STATE == state && a.S_FACTORY == Settings.FacCode).ToList(); } internal static List GetOperationListByState(int state) { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.N_B_STATE == state && a.S_FACTORY == Settings.FacCode).ToList(); } internal static List GetWaitingOperationList() { var db = new SqlHelper().GetInstance(); return db.Queryable().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().GetInstance(); return db.Insertable(wmsTask).ExecuteCommand() > 0; } catch (Exception ex) { Console.WriteLine(ex.Message); throw; } } internal static bool DeleteWmsTask(string code) { try { var db = new SqlHelper().GetInstance(); return db.Deleteable().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().GetInstance(); var wmsTaskList = db.Queryable() .LeftJoin((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().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().GetInstance(); if (active) { result = db.Queryable().Where(a => a.S_CNTR_CODE.Contains(cntr) && a.N_B_STATE < 2).First(); } else { result = db.Queryable().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().GetInstance(); task.T_MODIFY = DateTime.Now; task.S_B_STATE = WMSTask.GetStateStr(task.N_B_STATE); db.Updateable(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().GetInstance(); a.T_MODIFY = DateTime.Now; return db.Updateable(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().GetInstance(); return db.Queryable().Where(a => a.S_CODE.Trim() == code).First(); } internal static WMSTask GetWmsTaskByEnd(string endLoc) { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.S_END_LOC.Trim() == endLoc && a.N_B_STATE < 2).First(); } internal static WMSTask GetWmsTaskByStart(string startLoc) { var db = new SqlHelper().GetInstance(); return db.Queryable().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().GetInstance(); result = db.Queryable().Where(a => a.S_OP_CODE.Trim() == wmsTaskNo && a.N_B_STATE < 3).Count() == 0; return result; } /// /// /// /// /// public static string getReturnMaterialLocCode(string locCode) { var db = new SqlHelper().GetInstance(); var returnMaterialLoc = db.Queryable().Where(a => a.S_LOC_CODE.Trim() == locCode).First(); if (returnMaterialLoc != null) { return returnMaterialLoc.S_RETURN_LOC_CODE; } return null; } // --------------------------------------------------------福建佳通----------------------------------------- /// /// 查询逻辑配置表 /// /// 任务类型 /// internal static List getLogicConfigByTaskType(string taskType) { var db = new SqlHelper().GetInstance(); var logicConfigList = db.Queryable() .Where(a => a.S_TASK_TYPE.Trim() == taskType && a.S_ENABLE.Trim() == "是") .OrderBy(a => a.S_PRI) .ToList(); return logicConfigList; } /// /// 查询逻辑配置表 /// /// 补空缓存位 /// internal static LogicConfig getLogicConfigByHcLoc(string hcLocCode) { var db = new SqlHelper().GetInstance(); var logicConfig = db.Queryable() .Where(a => a.S_LKBKHCLOC.Trim() == hcLocCode && a.S_ENABLE.Trim() == "是") .OrderBy(a => a.S_PRI) .First(); return logicConfig; } /// /// 查询逻辑配置表 /// /// 满料接驳位 /// internal static LogicConfig getLogicConfigByMtjbLoc(string mtjbLoc) { var db = new SqlHelper().GetInstance(); var logicConfig = db.Queryable() .Where(a => a.S_MTJBLOC.Trim() == mtjbLoc && a.S_ENABLE.Trim() == "是") .OrderBy(a => a.S_PRI) .First(); return logicConfig; } /// /// 查询逻辑配置表 /// /// /// internal static LogicConfig getLogicConfigByJtCode(string jtCode) { var db = new SqlHelper().GetInstance(); var logicConfig = db.Queryable() .Where(a => a.S_JT_CODE.Trim() == jtCode && a.S_ENABLE.Trim() == "是") .OrderBy(a => a.S_PRI) .First(); return logicConfig; } /// /// 查询出库开始起点 /// 注:需过滤堆垛机故障的巷道 /// /// /// 0.默认、1.异常 /// /// /// internal static Location getOutStockStartLoc(string areaCode ,string materialCode,int traySatus = 0, string trayCode = "") { Location loc = null; var db = new SqlHelper().GetInstance(); var queryable = db.Queryable() .LeftJoin((a, b) => a.S_CODE == b.S_LOC_CODE) .LeftJoin((a, b, c) => b.S_CNTR_CODE == c.S_CODE) .LeftJoin((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; } /// /// 查询入库终点货位 /// /// /// 0.空车 1.满车 /// /// internal static Location getInStockEndLoc(string areaCode,int trayStatus, int trayType = 0) { LogHelper.Info("开始查询立库终点货位", "WMS"); Location location = null; var db = new SqlHelper().GetInstance(); try { string S_ZONE_CLS_CODE = ""; if (trayStatus == 0) { S_ZONE_CLS_CODE = "KGZ"; } else if (trayStatus == 1) { S_ZONE_CLS_CODE = "ML"; } if (areaCode == null) { if (trayType != 0) { // 根据托盘类型查询对应的立库编码 List areaCodes = Settings.getCntrAreaList(trayType); LogHelper.Info($"托盘类型对应的库区:{JsonConvert.SerializeObject(areaCodes)}", "WMS"); // 计算立库的容积率,取容积率最大的库区 var areaList = db.Queryable() .LeftJoin((a, b) => a.S_CODE == b.S_LOC_CODE) .LeftJoin((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() .LeftJoin((a, b) => a.S_CODE == b.S_LOC_CODE) .LeftJoin((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(); if (location != null) { return location; } } } // 库区安全库存监测,并报警 /* var safety_Inventory = getSafetyInventory(areaCode,null, trayType.ToString()); if (safety_Inventory != null) { }*/ } else { location = db.Queryable() .LeftJoin((a, b) => a.S_CODE == b.S_LOC_CODE) .LeftJoin((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($"查询结束,立库终点货位:{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().GetInstance(); LogHelper.Info(alarmMsg, logSite); AlarmRecord alarmRecord = new AlarmRecord() { S_ALARM_CODE = GenerateAlarmNo(), S_ALARM_TYPE = alarmType, S_ALARM_LEVEL = alarmLevel, S_ALARM_MSG = alarmMsg, S_FILE_NAME = logSite, }; return db.Insertable(alarmRecord).ExecuteCommand()>0; } public static bool addRfidAnomalyRecord(string rfid ,int anomalyType ,string locCode ,string taskNo) { var db = new SqlHelper().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(anomalyRecord).ExecuteCommand() > 0; } /// /// 查询成型机线边 /// /// /// public static SideLocConfig GetLineSideLoc(string locCode) { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.S_LOC_CODE.Trim() == locCode).First(); } /// /// 获取异常库货位 /// /// /// public static Location getAbnormalAreaLoc(string areaCode) { Location loc = null; var db = new SqlHelper().GetInstance(); loc = db.Queryable() .LeftJoin((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; } /// /// 查询接驳位关联属性 /// /// /// public static TransfeRelevance GetTransfeRelevance(string locCode) { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.S_LOC_CODE.Trim() == locCode).First(); } /// /// 查询接驳位关联属性 /// 注: /// 1.查询异常区货位 /// /// 库区 /// 货位属性(1.直连 2.非直连) /// 动作类型(0.人工接驳位 1.入库接驳位 2.出库接驳位) /// public static Location GetTransfeRelevanceLoc(string areaCode ,int actType ,int property ) { Location loc = null; var db = new SqlHelper().GetInstance(); loc = db.Queryable() .LeftJoin((a,b)=> a.S_CODE == b.S_LOC_CODE) .Where((a, b) => b.S_RELE_AREA.Trim() == areaCode && b.N_PROPERTY == property && b.N_ACT_TYPE == actType && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y") .First(); return loc; } /// /// 查询接驳位关联属性 /// /// /// 货位属性 (0.非人工 1.人工) /// public static bool updateTransfeLocProperty(string locCode ,int isManual) { bool result = false; var db = new SqlHelper().GetInstance(); result = db.Updateable().SetColumns(a => new TransfeRelevance() { N_IS_MANUAL = isManual } ).Where(a => a.S_LOC_CODE.Trim() == locCode).ExecuteCommand() > 0; return result; } /// /// 查询立库接驳位 /// 注:查询任务最少的接驳位 /// /// 库区 /// 货位属性 ( 0.人工 1.直连 2.非直连) /// 动作类型 (1.入库接驳位 2.出库接驳位) /// public static Location GetMinTaskTransfeLoc(string areaCode ,int actType, int property) { var db = new SqlHelper().GetInstance(); var loc = db.Queryable() .LeftJoin((a,b) => a.S_CODE == b.S_LOC_CODE) .LeftJoin((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_ACT_TYPE == actType && 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() //需要加MergeTable才能排序统计过的列 .OrderBy(it => it.count) .First(); if (loc != null) { return LocationHelper.GetLoc(loc.code); } return null; } /// /// 查询物料信息 /// /// /// public static TN_Material GetMaterial(string materialCode) { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.S_ITEM_CODE.Trim() == materialCode).First(); } /// /// 查询安全库存 /// public static Safety_Inventory getSafetyInventory(string areaCode, string materialCode ,string trayType) { var db = new SqlHelper().GetInstance(); var query = db.Queryable().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中间表----------------------------------------------- /// /// 读取MES下料任务 /// 1.备份容器物料信息 /// 2.更新中间表状态为已读 /// /// /// /// internal static LjMesTask readLjMesOffItemTask(string taskNo , int id) { LogHelper.Info($"查询到MES下发WMS任务,mesTaskId:{id},任务号:{taskNo}" , "WMS"); var db = new SqlHelper().GetInstance(); try { db.BeginTran(); // 1.查询MES任务表 var mesTask = db.Queryable().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; } /// /// 更新托盘物料信息 /// public static void updatePalletAndMateral() { var db = new SqlHelper().GetInstance(); var lotCarrierList = db.Queryable().Where(a => a.RECEIVE_FLAG.Trim() == "PENDING").ToList(); foreach (var lotCarrier in lotCarrierList) { CntrItemRel cntrItemRel = db.Queryable().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(); } } /// /// 更新物料信息 /// public static void updateMateral() { var db = new SqlHelper().GetInstance(); var materialList = db.Queryable().Where(a => a.RECEIVE_FLAG.Trim() == "PENDING").ToList(); foreach (var item in materialList) { TN_Material material = db.Queryable().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(); } } /// /// 查询托盘物料信息 /// /// /// internal static LjLotCarrier getLjCntrMaterial(string trayNo) { // 1.查询MES任务表 var db = new SqlHelper().GetInstance(); var lotCarrier = db.Queryable().Where(a => a.PALLET_ID.Trim() == trayNo).First(); return lotCarrier; } /// /// 查询MES反料任务 /// /// /// internal static LjMesTask getLjMesTaskByCntr(string cntrCode) { // 1.查询MES任务表 var db = new SqlHelper().GetInstance(); var mesTask = db.Queryable().Where(a => a.PALLET_ID.Trim() == cntrCode && a.RECEIVE_FLAG.Trim() == "PENDING").OrderByDescending(a => a.T_CREATE).First(); return mesTask; } /// /// 查询MES叫料任务 /// /// /// internal static LjMesTask getLjMesTaskByLoc(string positionId) { // 1.查询MES任务表 var db = new SqlHelper().GetInstance(); var mesTask = db.Queryable().Where(a => a.POSITION_ID.Trim() == positionId && a.RECEIVE_FLAG.Trim() == "PENDING").OrderByDescending(a => a.T_CREATE).First(); return mesTask; } /// /// 更新MES任务中间表 /// /// /// internal static bool updateLjMesTask(LjMesTask mesTask) { bool result = false; var db = new SqlHelper().GetInstance(); mesTask.RECEIVE_FLAG = "COMPLETE"; mesTask.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd"); result = db.Updateable(mesTask).ExecuteCommand() > 0; return result; } /// /// 读取MES叫料任务 /// 1.备份容器物料信息 /// 2.更新中间表状态为已读 /// /// /// /// internal static bool readLjMesCallItemTask(string taskNo, int id) { LogHelper.Info( $"读取MES叫料任务,任务号:{taskNo},MES下发任务ID:{id}", "WMS"); bool result = false; var db = new SqlHelper().GetInstance(); try { db.BeginTran(); var mesTask = db.Queryable().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叫料任务,ERROR_MSG:" + ex.Message, ex, "WMS"); } return result; } /// /// 查询MES任务表 /// /// /// public static LjMesTask GetLjMesTaskByAgvorderId(string taskNo) { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.AGVORDER_ID.Trim() == taskNo).First(); } /// /// 查询MES任务表 /// /// /// public static LjMesTask GetLjMesTaskById(int mesTaskId) { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.ID == mesTaskId).First(); } /// /// 查询MES任务表 /// /// 已读标识 /// public static List GetLjMesTaskList(string receiveFlag ) { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.RECEIVE_FLAG.Trim() == receiveFlag ).ToList(); } /// /// 更新MES任务状态 /// /// /// 0:默认值 1:任务已生成 2:任务运行中 3:任务完成 4:任务失败 5:任务取消 6:其他错误 等 /// /// public static bool updateMesTaskStatus(string taskNo, string status, string msg = "") { bool result = false; var db = new SqlHelper().GetInstance(); result = db.Updateable().SetColumns(a => new LjMesTask() { RETURN_CODE = status , RECEIVE_MSG = msg}).Where(a => a.AGVORDER_ID.Trim() == taskNo).ExecuteCommand() > 0; return result; } /// /// 更新出库任务中间表状态 /// /// /// 1:执行中,2:完成 等 /// public static bool updateMesOutTaskStatus(int taskNo, string status) { bool result = false; var db = new SqlHelper().GetInstance(); result = db.Updateable().SetColumns(a => new LjLotOutTask() { TASK_STATUS = status }).Where(a => a.ID == taskNo).ExecuteCommand() > 0; return result; } /// /// 添加库存表 /// /// /// public static bool addLjLotOnhand(LjLotOnhand ljLotOnhand) { bool result = false; var db = new SqlHelper().GetInstance(); ljLotOnhand.CREATION_DATE = DateTime.Now; result = db.Insertable(ljLotOnhand).ExecuteCommand()>0; return result; } /// /// 添加出库任务记录 /// /// /// public static bool addLotOutTask(string locCode) { bool result = false; var db = new SqlHelper().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).ExecuteCommand() > 0; } return result; } /// /// 更新出库任务记录 /// /// /// /// public static bool updateLotOutTask(string cntrCode,string status) { bool result = false; var db = new SqlHelper().GetInstance(); var ljLotOutTask = db.Queryable().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).ExecuteCommand()>0; } return result; } // -----------------------------------------斜裁中间表---------------------------------------------- /// /// 下发XC任务 /// /// /// public static bool addLjXcTask(int mesTaksId) { bool result = false; var db = new SqlHelper().GetInstance(); var ljMesTask = GetLjMesTaskById(mesTaksId); if (ljMesTask != null) { LjXcTask ljXcTask = new LjXcTask() { ID = ljMesTask.ID, POSITION_ID = ljMesTask.POSITION_ID, RETURN_CODE = ljMesTask.RETURN_CODE, MSG_TYPE = ljMesTask.MSG_TYPE, PALLET_TYPE = ljMesTask.PALLET_TYPE, MATERIAL_NAME = ljMesTask.MATERIAL_NAME, MATERIAL_CODE = ljMesTask.MATERIAL_CODE, QTY = ljMesTask.QTY, YCL_BATCH = ljMesTask.YCL_BATCH, PALLET_ID = ljMesTask.PALLET_ID, AGVORDER_ID = ljMesTask.AGVORDER_ID, CREATION_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), RECEIVE_FLAG = ljMesTask.RECEIVE_FLAG, EQP = ljMesTask.EQP, PLAN_ID = ljMesTask.PLAN_ID }; result = db.Insertable(ljXcTask).ExecuteCommand() > 0; } return result; } /// /// 查询斜裁任务表 /// /// /// public static LjXcTask GetLjXcTaskById(int mesTaskId) { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.ID == mesTaskId).First(); } /// /// 查询斜裁出库任务表 /// /// /// /// public static List getLjXcOutTask(string receiveFlag ,string taskStatus) { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.RECEIVE_FLAG == receiveFlag && a.TASK_STATUS == taskStatus).ToList(); } } }