| | |
| | | using System.Globalization; |
| | | using System.Linq; |
| | | using System.Linq.Expressions; |
| | | using System.Numerics; |
| | | using System.Reflection; |
| | | using System.Runtime.ConstrainedExecution; |
| | | using System.Threading.Tasks; |
| | |
| | | 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(); |
| | |
| | | /// </summary> |
| | | /// <param name="itemCode"></param> |
| | | /// <returns></returns> |
| | | public static List<CntrItemRel> getZZKInventoryInfo(string itemCode) |
| | | public static DateTime getZZKInventoryInfo(string itemCode) |
| | | { |
| | | DateTime inboundTime = DateTime.MinValue; |
| | | 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>() |
| | | 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) |
| | |
| | | && d.N_E_STATE == 0 // 托盘正常 |
| | | ) |
| | | .OrderBy((a, b, c, d) => a.T_INBOUND_TIME) |
| | | .ToList(); |
| | | .Select((a, b, c, d) => a.T_INBOUND_TIME) |
| | | .First(); |
| | | } |
| | | return cntrItemRels; |
| | | return inboundTime; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | 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) |
| | | { |
| | |
| | | /// 1.查询异常区货位 |
| | | /// </summary> |
| | | /// <param name="areaCode">库区</param> |
| | | /// <param name="property">货位属性(1.直连 2.非直连)</param> |
| | | /// <param name="type">动作类型(0.人工接驳位 1.入库接驳位 2.出库接驳位)</param> |
| | | /// <param name="property">货位属性(1.直连 2.非直连)</param> |
| | | /// <returns></returns> |
| | | public static Location GetTransfeRelevanceLoc(string areaCode ,int type ,int property ) |
| | | { |
| | |
| | | |
| | | /// <summary> |
| | | /// 读取MES下料任务 |
| | | /// 1.备份容器物料信息 |
| | | /// 2.更新中间表状态为已读 |
| | | /// 1.读取MES下发任务表 |
| | | /// 2.读取托盘物料信息表 |
| | | /// 3.读取基础物料信息表 |
| | | /// </summary> |
| | | /// <param name="taskNo"></param> |
| | | /// <param name="id"></param> |
| | | /// <returns></returns> |
| | | internal static LjMesTask readLjMesOffItemTask(string taskNo , int id) |
| | | 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任务表 |
| | | // 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); |
| | | |
| | | // 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"); |
| | | mesTask.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); |
| | | db.Updateable(mesTask).ExecuteCommand(); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info("未查询到MES下发WMS任务", "WMS"); |
| | | WMSHelper.addAlarmRecord("流程异常", "中", $"未查询到MES下发的任务,MES任务ID:{id}"); |
| | | } |
| | | db.CommitTran(); |
| | | return mesTask; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | res = false; |
| | | db.RollbackTran(); |
| | | LogHelper.Info($"读取MES下发任务失败,错误原因:{ex.Message}" , "WMS"); |
| | | WMSHelper.addAlarmRecord("系统错误", "高", $"读取MES下发任务失败,错误原因:{ex.Message}"); |
| | | } |
| | | return null; |
| | | 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> |
| | |
| | | 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) |
| | |
| | | /// <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> |
| | | /// <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> |
| | |
| | | |
| | | // -----------------------------------------斜裁中间表---------------------------------------------- |
| | | |
| | | /// <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> |
| | | /// 下发XC任务 |
| | | /// 将MES下发任务、托盘物料信息 转发给斜裁 |
| | | /// </summary> |
| | | /// <param name="mesTask"></param> |
| | | /// <returns></returns> |
| | |
| | | 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, |
| | |
| | | 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; |
| | | } |