New file |
| | |
| | | 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.Numerics; |
| | | 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 int GenerateStockRecordNo() |
| | | { |
| | | return SYSHelper.GetSerialNumber("库存记录号", "SR"); |
| | | } |
| | | |
| | | 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 void UpdateWmsTask(WMSTask task) |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | task.T_MODIFY = DateTime.Now; |
| | | db.Updateable<WMSTask>(task).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 DateTime getZZKInventoryInfo(string itemCode) |
| | | { |
| | | DateTime inboundTime = DateTime.MinValue; |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | string areaCode = Settings.areaPropertyList.Where(a => a.areaName.Contains("中转库")).Select(a => a.areaCode).FirstOrDefault(); |
| | | if (areaCode != null) |
| | | { |
| | | inboundTime = 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 // 托盘正常 |
| | | ) |
| | | .OrderBy((a, b, c, d) => a.T_INBOUND_TIME) |
| | | .Select((a, b, c, d) => a.T_INBOUND_TIME) |
| | | .First(); |
| | | } |
| | | return inboundTime; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 查询出库开始起点 |
| | | /// 注:需过滤堆垛机故障的巷道 |
| | | /// </summary> |
| | | /// <param name="areaCode"></param> |
| | | /// <param name="traySatus">0.默认、1.异常</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); |
| | | } |
| | | else |
| | | { |
| | | List<string> areaCodes = Settings.areaPropertyList.Select(a => a.areaCode).ToList(); |
| | | queryable = queryable.Where((a, b, c, d) => areaCodes.Contains(a.S_AREA_CODE.Trim())); |
| | | } |
| | | 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> |
| | | /// 查询接驳位关联属性 |
| | | /// </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="type">动作类型 (1.入库接驳位 2.出库接驳位)</param> |
| | | /// <returns></returns> |
| | | public static Location GetMinTaskTransfeLoc(string areaCode ,int type) |
| | | { |
| | | 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 && 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; |
| | | } |
| | | |
| | | /// <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.读取MES下发任务表 |
| | | /// 2.读取托盘物料信息表 |
| | | /// 3.读取基础物料信息表 |
| | | /// </summary> |
| | | /// <param name="taskNo"></param> |
| | | /// <param name="id"></param> |
| | | /// <returns></returns> |
| | | internal static bool readLjMesOffItemTask(string taskNo , int id) |
| | | { |
| | | bool res = true; |
| | | LogHelper.Info($"查询到MES下发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) |
| | | { |
| | | // 2.读取托盘物料信息表 |
| | | res = updateCarrier(mesTask.PALLET_ID); |
| | | if (res) |
| | | { |
| | | mesTask.AGVORDER_ID = taskNo; |
| | | mesTask.RETURN_CODE = "1"; |
| | | mesTask.RECEIVE_FLAG = "COMPLETE"; |
| | | mesTask.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); |
| | | db.Updateable(mesTask).ExecuteCommand(); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | WMSHelper.addAlarmRecord("流程异常", "中", $"未查询到MES下发的任务,MES任务ID:{id}"); |
| | | } |
| | | db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | res = false; |
| | | db.RollbackTran(); |
| | | LogHelper.Info($"读取MES下发任务失败,错误原因:{ex.Message}" , "WMS"); |
| | | WMSHelper.addAlarmRecord("系统错误", "高", $"读取MES下发任务失败,错误原因:{ex.Message}"); |
| | | } |
| | | return res; |
| | | } |
| | | |
| | | public static bool updateCarrier(string palletId) |
| | | { |
| | | bool res = true; |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | var container = ContainerHelper.GetCntr(palletId); |
| | | if (container != null) |
| | | { |
| | | // 1.读取托盘物料信息表 |
| | | var lotCarrier = db.Queryable<LjLotCarrier>().Where(a => a.RECEIVE_FLAG.Trim() == "PENDING" && a.PALLET_ID == palletId).OrderByDescending(a => a.CREATION_DATE).First(); |
| | | if (lotCarrier != null) |
| | | { |
| | | CntrItemRel cntrItemRel = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == palletId).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(); |
| | | |
| | | // 读取基础物料信息表 |
| | | var material = db.Queryable<LjItem>().Where(a => a.RECEIVE_FLAG.Trim() == "PENDING" && a.MATERIAL_CODE == lotCarrier.MATERIALCODE).OrderByDescending(a => a.CREATION_DATE).First(); |
| | | if (material != null) |
| | | { |
| | | TN_Material tn_material = db.Queryable<TN_Material>().Where(a => a.S_ITEM_CODE == material.MATERIAL_CODE).First(); |
| | | |
| | | if (tn_material != null) |
| | | { |
| | | tn_material.S_ITEM_CODE = material.MATERIAL_CODE; |
| | | tn_material.S_ITEM_NAME = material.MATERIAL_NAME; |
| | | tn_material.S_SPEC = material.SPEC; |
| | | tn_material.S_MODEL = material.MODEL; |
| | | tn_material.S_UNIT = material.UNIT; |
| | | tn_material.S_MEMO = material.MEMO; |
| | | db.Updateable(material).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | tn_material = new TN_Material() |
| | | { |
| | | S_ITEM_CODE = material.MATERIAL_CODE, |
| | | S_ITEM_NAME = material.MATERIAL_NAME, |
| | | S_SPEC = material.SPEC, |
| | | S_MODEL = material.MODEL, |
| | | S_UNIT = material.UNIT, |
| | | S_MEMO = material.MEMO, |
| | | }; |
| | | db.Insertable(material).ExecuteCommand(); |
| | | } |
| | | |
| | | material.RECEIVE_FLAG = "COMPLETE"; |
| | | material.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd"); |
| | | db.Updateable(material).ExecuteCommand(); |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | WMSHelper.addAlarmRecord("流程异常", "中", $"未在WMS系统中查询到容器信息,容器编码:{palletId}"); |
| | | res = false; |
| | | } |
| | | return res; |
| | | } |
| | | |
| | | /// <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) |
| | | { |
| | | 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> |
| | | /// 根据机台号查询MES任务 |
| | | /// </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叫料任务,ERROR_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> |
| | | /// <returns></returns> |
| | | public static List<LjMesTask> GetLjMesTaskListHD() |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | return db.Queryable<LjMesTask>().Where(a => (a.PALLET_TYPE == "5" || a.PALLET_TYPE == "6") && (a.RETURN_CODE.Trim() == "0" || a.RETURN_CODE.Trim() == "1" || a.RETURN_CODE.Trim() == "2")).ToList(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 更新MES任务状态 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public static bool updateMesTaskStatus(LjMesTask mesTask) |
| | | { |
| | | bool result = false; |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | result = db.Updateable<LjMesTask>(mesTask).ExecuteCommand() > 0; |
| | | return result; |
| | | } |
| | | |
| | | /// <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:执行中,2:完成 等</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> |
| | | /// 更新MES任务状态 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public static bool updateXcTaskStatus(LjXcTask xcTask) |
| | | { |
| | | bool result = false; |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | result = db.Updateable<LjXcTask>(xcTask).ExecuteCommand() > 0; |
| | | return result; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 将MES下发任务、托盘物料信息 转发给斜裁 |
| | | /// </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) { |
| | | if (mesTask.MSG_TYPE == "1") |
| | | { |
| | | // 转发托盘物料信息 |
| | | var ljLotCarrier = db.Queryable<LjLotCarrier>().Where(a => a.PALLET_ID == mesTask.PALLET_ID && a.RECEIVE_FLAG == "PENDING").OrderByDescending(a => a.CREATION_DATE).First(); |
| | | if (ljLotCarrier != null) |
| | | { |
| | | LjXcCarrier ljXcCarrier = new LjXcCarrier() |
| | | { |
| | | ID = ljLotCarrier.ID, |
| | | PALLET_ID = ljLotCarrier.PALLET_ID, |
| | | LOT_NAME = ljLotCarrier.LOT_NAME, |
| | | YCL_BATCH = ljLotCarrier.YCL_BATCH, |
| | | MATERIALCODE = ljLotCarrier.MATERIALCODE, |
| | | QTY = ljLotCarrier.QTY, |
| | | PRODUCTION_DATE = ljLotCarrier.PRODUCTION_DATE, |
| | | QC_STATUS = ljLotCarrier.QC_STATUS, |
| | | SHELFLIFE_DATE = ljLotCarrier.SHELFLIFE_DATE, |
| | | MINSHELFLIFE_DATE = ljLotCarrier.MINSHELFLIFE_DATE, |
| | | CREATION_DATE = ljLotCarrier.CREATION_DATE, |
| | | RECEIVE_FLAG = ljLotCarrier.RECEIVE_FLAG, |
| | | }; |
| | | var bo = db.Insertable<LjXcCarrier>(ljXcCarrier).ExecuteCommand() > 0; |
| | | if (bo) |
| | | { |
| | | ljLotCarrier.RECEIVE_FLAG = "COMPLETE"; |
| | | ljLotCarrier.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); |
| | | db.Updateable<LjLotCarrier>(ljLotCarrier).ExecuteCommand(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | 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; |
| | | if (result) |
| | | { |
| | | mesTask.RETURN_CODE = "1"; |
| | | mesTask.RECEIVE_FLAG = "COMPLETE"; |
| | | mesTask.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); |
| | | db.Updateable<LjMesTask>(mesTask).ExecuteCommand(); |
| | | } |
| | | } |
| | | 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(); |
| | | } |
| | | |
| | | } |
| | | } |