| | |
| | | using HH.WCS.Mobox3.FJJF.models; |
| | | using HH.WCS.Mobox3.FJJT.dispatch; |
| | | using HH.WCS.Mobox3.FJJT.models; |
| | | using HH.WCS.Mobox3.FJJT.models.other; |
| | | using HH.WCS.Mobox3.FJJT.util; |
| | |
| | | using System.Threading.Tasks; |
| | | using System.Web.UI.WebControls; |
| | | using static HH.WCS.Mobox3.FJJT.api.ApiModel; |
| | | using static HH.WCS.Mobox3.FJJT.util.ExcetionHelper; |
| | | using static HH.WCS.Mobox3.FJJT.util.Settings; |
| | | |
| | | namespace HH.WCS.Mobox3.FJJT.wms { |
| | |
| | | |
| | | |
| | | /// <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> |
| | |
| | | { |
| | | DateTime inboundTime = DateTime.MinValue; |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | string areaCode = Settings.areaPropertyList.Where(a => a.areaName.Contains("中转库")).Select(a => a.areaCode).FirstOrDefault(); |
| | | string areaCode = Settings.areaRelevanceList.Where(a => a.areaCode.Contains("ZZFZLKQ")).Select(a => a.areaCode).FirstOrDefault(); |
| | | if (areaCode != null) |
| | | { |
| | | inboundTime = db.Queryable<CntrItemRel>() |
| | |
| | | } |
| | | else |
| | | { |
| | | List<string> areaCodes = Settings.areaPropertyList.Select(a => a.areaCode).ToList(); |
| | | List<string> areaCodes = Settings.areaRelevanceList.Select(a => a.areaCode).ToList(); |
| | | queryable = queryable.Where((a, b, c, d) => areaCodes.Contains(a.S_AREA_CODE.Trim())); |
| | | } |
| | | if (traySatus == 0) |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 查询有空工装的固定空工装出库站台 |
| | | /// </summary> |
| | | /// <param name="areaCode"></param> |
| | | /// <returns></returns> |
| | | public static Location GetFullFixedOutLoc(string areaCode) |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | return db.Queryable<Location>() |
| | | .LeftJoin<TransfeRelevance>((a,b) => b.S_LOC_CODE == a.S_CODE) |
| | | .Where((a, b) => a.S_AREA_CODE.Trim() == areaCode && b.N_IS_FIXED_OUT == 1 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y" && a.N_CURRENT_NUM == 1).First(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 查询所有空的固定空工装出库站台 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public static List<Location> GetEmptyFixedOutLocList() |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | return db.Queryable<Location>() |
| | | .LeftJoin<TransfeRelevance>((a, b) => b.S_LOC_CODE == a.S_CODE) |
| | | .Where((a, b) => b.N_IS_FIXED_OUT == 1 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y" && a.N_CURRENT_NUM == 0).ToList(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 查询接驳位关联属性 |
| | | /// </summary> |
| | | /// <param name="locCode"></param> |
| | |
| | | return query.First(); |
| | | } |
| | | |
| | | public static BufferLocConfig GetBufferLocConfig(string locCode) |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | return db.Queryable<BufferLocConfig>().Where(a => a.S_LOC_CODE == locCode).First(); |
| | | } |
| | | |
| | | public static BufferLocConfig GetBufferLocConfigByJtNo(string jtNo) |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | return db.Queryable<BufferLocConfig>().Where(a => a.S_OFF_LINE_JT_NO == jtNo).First(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 查询空工装缓存位(非直连) |
| | | /// </summary> |
| | | /// <param name="areaCode"></param> |
| | | /// <returns></returns> |
| | | public static Location getEmptyBufferLoc(string areaCode) |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | var emptyBufferLocList = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == areaCode && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").ToList(); |
| | | if (emptyBufferLocList.Count > 0) |
| | | { |
| | | foreach (var bufferLoc in emptyBufferLocList) |
| | | { |
| | | var bufferLocConfig = GetBufferLocConfig(bufferLoc.S_CODE); |
| | | |
| | | return bufferLoc; |
| | | // 业务代码,勿删 |
| | | /* var deviceStatusDatas = WCSDispatch.getDeviceStatus(new List<string>() { bufferLocConfig.S_DEVICE_NO }); |
| | | if (deviceStatusDatas != null && deviceStatusDatas.Count > 0) |
| | | { |
| | | var deviceStatus = deviceStatusDatas[0]; |
| | | if (deviceStatus.workStatus == 1 && deviceStatus.manualStatus == 0) |
| | | { |
| | | return bufferLoc; |
| | | } |
| | | else |
| | | { |
| | | WMSHelper.addAlarmRecord("流程异常", "高", $"设备号:{bufferLocConfig.S_DEVICE_NO},设备当前处于不可用状态,请联系管理人员调整设备状态"); |
| | | throw new BusinessException($"设备号:{bufferLocConfig.S_DEVICE_NO},设备当前处于不可用状态,请联系管理人员调整设备状态"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | WMSHelper.addAlarmRecord("流程异常", "高", $"设备号:{bufferLocConfig.S_DEVICE_NO},查询设备状态失败,请联系工作人员查看设备是否正常"); |
| | | throw new BusinessException($"设备号:{bufferLocConfig.S_DEVICE_NO},查询设备状态失败,请联系工作人员查看设备是否正常"); |
| | | }*/ |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | //------------------------------------------------MES中间表----------------------------------------------- |
| | | |
| | | |
| | |
| | | if (mesTask != null) |
| | | { |
| | | // 2.读取托盘物料信息表 |
| | | res = updateCarrier(mesTask.PALLET_ID); |
| | | if (res) |
| | | var container = ContainerHelper.GetCntr(mesTask.PALLET_ID); |
| | | if (container != null) |
| | | { |
| | | 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(); |
| | | container.N_DETAIL_COUNT = mesTask.QTY == 0 ? 0 : 1; |
| | | ContainerHelper.UpdateCntr(container); |
| | | updateCarrier(mesTask.PALLET_ID); |
| | | } |
| | | 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 |
| | | { |
| | |
| | | { |
| | | 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) |
| | | { |
| | | // 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 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() |
| | | { |
| | | 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(); |
| | | 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 |
| | | { |
| | | cntrItemRel = new CntrItemRel() |
| | | tn_material = new TN_Material() |
| | | { |
| | | 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, |
| | | 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(cntrItemRel).ExecuteCommand(); |
| | | db.Insertable(material).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(); |
| | | } |
| | | 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; |
| | | } |