| | |
| | | public static ResponseResult offLineProcess(OffLineRequest model) { |
| | | ResponseResult responseResult = new ResponseResult(); |
| | | |
| | | // 查询起点货位是否存在已存在任务,防止任务重复发起 |
| | | var existWmsTask = WMSHelper.GetWmsTaskByStart(model.loc); |
| | | if (existWmsTask == null) |
| | | var areaCodes = Settings.areaPropertyList.Select(a => a.areaCode).ToList(); |
| | | var isExistCntr = LocationHelper.checkAreaExistCntr(areaCodes,model.cntrNo); |
| | | if (!isExistCntr) |
| | | { |
| | | // 查询对应机台的物料下线配置信息 |
| | | var logicConfig = WMSHelper.getLogicConfigByJtCode(model.jtNo); |
| | | if (logicConfig != null) |
| | | // 查询起点货位是否存在已存在任务,防止任务重复发起 |
| | | var existWmsTask = WMSHelper.GetWmsTaskByStart(model.loc); |
| | | if (existWmsTask == null) |
| | | { |
| | | Container container = ContainerHelper.GetCntr(model.cntrNo); |
| | | if (container == null || !model.isNormal) |
| | | // 查询对应机台的物料下线配置信息 |
| | | var logicConfig = WMSHelper.getLogicConfigByJtCode(model.jtNo); |
| | | if (logicConfig != null) |
| | | { |
| | | ContainerHelper.AddCntr(model.cntrNo); |
| | | ContainerHelper.UpdateCntrState(model.cntrNo, 1); |
| | | WMSHelper.addRfidAnomalyRecord(model.cntrNo, 1, model.loc, null); |
| | | } |
| | | Container container = ContainerHelper.GetCntr(model.cntrNo); |
| | | if (container == null || !model.isNormal) |
| | | { |
| | | ContainerHelper.AddCntr(model.cntrNo); |
| | | ContainerHelper.UpdateCntrState(model.cntrNo, 1); |
| | | WMSHelper.addRfidAnomalyRecord(model.cntrNo, 1, model.loc, null); |
| | | } |
| | | |
| | | // 根据物料下线配置信息,判断任务类型是直连下线还是非直连下线 |
| | | if (logicConfig.S_TASK_TYPE == "1" || logicConfig.S_TASK_TYPE == "2") |
| | | { |
| | | triggerItemOffLineFlow(model.loc, model.cntrNo, logicConfig); |
| | | // 根据物料下线配置信息,判断任务类型是直连下线还是非直连下线 |
| | | if (logicConfig.S_TASK_TYPE == "1" || logicConfig.S_TASK_TYPE == "2") |
| | | { |
| | | triggerItemOffLineFlow(model.loc, model.cntrNo, logicConfig); |
| | | } |
| | | else |
| | | { |
| | | // 满料下线(非直连) |
| | | triggerItemOffLineFlow4(model.loc, model.cntrNo, logicConfig); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // 满料下线(非直连) |
| | | triggerItemOffLineFlow4(model.loc, model.cntrNo, logicConfig); |
| | | WMSHelper.addAlarmRecord("流程异常", "高", $"机台号{model.jtNo},没有可用的逻辑线路,请联系管理人员"); |
| | | throw new BusinessException($"机台号{model.jtNo},没有可用的逻辑线路,请联系管理人员"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | WMSHelper.addAlarmRecord("流程异常", "高", $"机台号{model.jtNo},没有可用的逻辑线路,请联系管理人员"); |
| | | throw new BusinessException($"机台号{model.jtNo},没有可用的逻辑线路,请联系管理人员"); |
| | | WMSHelper.addAlarmRecord("流程异常", "低", $"下线货位:{model.loc}已有任务,请勿重复下发任务"); |
| | | throw new BusinessException($"下线货位:{model.loc}已有任务,请勿重复下发任务"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | WMSHelper.addAlarmRecord("流程异常", "低", $"下线货位:{model.loc}已有任务,请勿重复下发任务"); |
| | | throw new BusinessException($"下线货位:{model.loc}已有任务,请勿重复下发任务"); |
| | | WMSHelper.addAlarmRecord("流程异常", "高", $"工装:{model.cntrNo}已入库,请勿重复入库"); |
| | | throw new BusinessException($"工装:{model.cntrNo}已入库,请勿重复入库"); |
| | | } |
| | | return responseResult; |
| | | } |
| | |
| | | } |
| | | else |
| | | { |
| | | WMSHelper.addAlarmRecord("流程异常", "中", $"空工装出库站台:{logicConfig.S_LKKTJBLOC},没有空工装"); |
| | | photoStatus = false; |
| | | kgzCntrCode = "虚拟容器"; |
| | | WMSHelper.addAlarmRecord("流程异常", "低", $"空工装出库站台:{logicConfig.S_LKKTJBLOC},没有空工装"); |
| | | } |
| | | } |
| | | |
| | |
| | | // 更新出库任务中间表状态 |
| | | WMSHelper.updateLotOutTask(cst.S_CNTR_CODE, "2"); |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | |
| | | if (mst != null && mst.N_B_STATE < 2) { |
| | | |
| | | int emptyFlag = 0; // 容器空满标识 |
| | | Container cntr = ContainerHelper.GetCntr(cst.S_CNTR_CODE); |
| | | if (cntr != null && cntr.N_DETAIL_COUNT > 0) { |
| | | var cntrItemRels = ContainerHelper.GetCntrItemRel(cst.S_CNTR_CODE); |
| | | if (cntrItemRels.Count > 0) { |
| | | emptyFlag = 1; |
| | | } |
| | | |
| | | // 1:堆垛机放货异常申请新终点 |
| | | if (model.applyType == 1) { |
| | | // 报警:流程异常 |
| | | WMSHelper.addAlarmRecord("流程异常", "低", $"堆垛机放货异常,异常货位:{cst.S_END_LOC}"); |
| | | WMSHelper.addAlarmRecord("流程异常", "中", $"堆垛机放货异常,任务号:{cst.S_CODE},异常货位:{cst.S_END_LOC}"); |
| | | |
| | | // 1.将异常货位上锁,并报警 |
| | | LocationHelper.LockLoc(cst.S_END_LOC, 3); |
| | | |
| | | // 2.查询新的入库终点 |
| | | Location endLoc = WMSHelper.getInStockEndLoc(cst.S_END_AREA, emptyFlag); |
| | | Location endLoc = WMSHelper.getInStockEndLoc(cst.S_END_AREA, emptyFlag ); |
| | | cst.S_END_LOC = endLoc.S_CODE; |
| | | WCSHelper.UpdateEndLoc(cst); |
| | | |
| | | LocationHelper.LockLoc(endLoc.S_CODE, 1); |
| | | applyDest.destLoc = endLoc.S_CODE; |
| | | } |
| | | else if (model.applyType == 2) |
| | | { |
| | | if (cst.S_END_LOC == "虚拟库位") |
| | | { |
| | | var transfeRelevance = WMSHelper.GetTransfeRelevance(model.loc); // 接驳位关联属性 |
| | | if (transfeRelevance != null) |
| | | { |
| | | // 1.查询新的入库终点 |
| | | Location endLoc = WMSHelper.getInStockEndLoc(transfeRelevance.S_RELE_AREA, emptyFlag); |
| | | cst.S_END_LOC = endLoc.S_CODE; |
| | | WCSHelper.UpdateEndLoc(cst); |
| | | |
| | | LocationHelper.LockLoc(endLoc.S_CODE, 1); |
| | | applyDest.destLoc = endLoc.S_CODE; |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | result.data = applyDest; |
| | |
| | | { |
| | | if (mst.S_TYPE == "余料/空工装入库") |
| | | { |
| | | var mesTask = WMSHelper.GetLjMesTaskById(int.Parse(mst.S_OP_DEF_CODE)); |
| | | if (mesTask.QTY != 0) |
| | | var bo = int.TryParse(mst.S_OP_DEF_CODE, out int mesId); |
| | | if (bo) |
| | | { |
| | | var awaitTask = WMSHelper.GetAwaitWmsTaskByMaterialCode(mesTask.MATERIAL_CODE); |
| | | if (awaitTask != null) |
| | | var mesTask = WMSHelper.GetLjMesTaskById(mesId); |
| | | if (mesTask.QTY != 0) |
| | | { |
| | | // 取消任务 |
| | | ApiHelper.cancelTask(awaitTask.S_CODE); |
| | | // 修改终点 |
| | | agvEndLoc = LocationHelper.GetLoc(awaitTask.S_END_LOC); |
| | | wmsEndLoc = agvEndLoc; |
| | | mst.S_TYPE = "叫料出库任务"; |
| | | var awaitTask = WMSHelper.GetAwaitWmsTaskByMaterialCode(mesTask.MATERIAL_CODE); |
| | | if (awaitTask != null) |
| | | { |
| | | // 取消任务 |
| | | ApiHelper.cancelTask(awaitTask.S_CODE); |
| | | // 修改终点 |
| | | agvEndLoc = LocationHelper.GetLoc(awaitTask.S_END_LOC); |
| | | wmsEndLoc = agvEndLoc; |
| | | mst.S_TYPE = "叫料出库任务"; |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | else |
| | | { |
| | | WMSHelper.addAlarmRecord("流程异常", "高", $"AGV申请终点失败,未查询到立库接驳位"); |
| | | WMSHelper.addAlarmRecord("流程异常", "高", $"AGV申请终点失败,立库:{wmsEndLoc.S_AREA_CODE}未配置立库接驳位"); |
| | | return null; |
| | | } |
| | | } |
| | |
| | | /// 成新机叫料 |
| | | /// </summary> |
| | | /// <param name="materialCode"></param> |
| | | /// <param name="endLocCode"></param> |
| | | /// <param name="jtNo"></param> |
| | | /// <param name="mesTaskId"></param> |
| | | public static void callMaterial(string materialCode, string endLocCode, int mesTaskId) |
| | | public static void callMaterial(string materialCode, string jtNo, int mesTaskId) |
| | | { |
| | | var oldWmsTask = WMSHelper.GetWmsTaskByEnd(endLocCode); |
| | | if (oldWmsTask == null) { |
| | | string cntrCode = ""; |
| | | Location endLoc = LocationHelper.GetLoc(endLocCode); |
| | | string cntrCode = ""; |
| | | var mesTask = WMSHelper.GetLjMesTaskById(mesTaskId); |
| | | |
| | | if (mesTask != null) |
| | | { |
| | | Location endLoc = WMSHelper.getCallMaterialLocCode(jtNo); |
| | | if (endLoc != null) |
| | | { |
| | | Location middleLoc = null; |
| | | Location startLoc = WMSHelper.getOutStockStartLoc(null, materialCode); |
| | | if (startLoc == null) |
| | | { |
| | | var mesTask = WMSHelper.GetLjMesTaskById(mesTaskId); |
| | | if (mesTask != null) |
| | | { |
| | | mesTask.RECEIVE_MSG = "没有库存"; |
| | | WMSHelper.updateLjMesTask(mesTask); |
| | | } |
| | | WMSHelper.addAlarmRecord("流程异常", "高", $"叫料失败,物料:{materialCode}没有库存"); |
| | | return; |
| | | } |
| | | else |
| | | if (startLoc != null) |
| | | { |
| | | var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE); |
| | | if (locCntrRels.Count > 0) |
| | | { |
| | | cntrCode = locCntrRels[0].S_CNTR_CODE; |
| | | } |
| | | else |
| | | { |
| | | WMSHelper.addAlarmRecord("流程异常", "高", $"查询物料异常,货位:{startLoc.S_CODE}缺少容器信息"); |
| | | return; |
| | | } |
| | | } |
| | | |
| | | middleLoc = WMSHelper.GetTransfeRelevanceLoc(startLoc.S_AREA_CODE, 1 , 2); |
| | | |
| | | if (middleLoc != null) |
| | | { |
| | | // 1.创建成新机叫料作业 |
| | | var wmsTask = new WMSTask() |
| | | { |
| | | S_CNTR_CODE = cntrCode, |
| | | S_CODE = WMSHelper.GenerateTaskNo(), |
| | | S_START_LOC = startLoc.S_CODE, |
| | | S_START_AREA = startLoc.S_AREA_CODE, |
| | | S_END_LOC = endLoc.S_CODE, |
| | | S_END_AREA = endLoc.S_AREA_CODE, |
| | | S_TYPE = "叫料出库任务", |
| | | S_OP_DEF_CODE = mesTaskId.ToString(), |
| | | S_OP_DEF_NAME = "成型机叫料出库任务", |
| | | T_START_TIME = DateTime.Now, |
| | | }; |
| | | if (WMSHelper.CreateWmsTask(wmsTask)) |
| | | { |
| | | WCSTask wcsTask = new WCSTask() |
| | | middleLoc = WMSHelper.GetTransfeRelevanceLoc(startLoc.S_AREA_CODE, 1, 2); |
| | | if (middleLoc != null) |
| | | { |
| | | S_OP_NAME = wmsTask.S_OP_DEF_NAME, |
| | | S_OP_CODE = wmsTask.S_CODE, |
| | | S_CODE = WCSHelper.GenerateTaskNo(), |
| | | S_CNTR_CODE = wmsTask.S_CNTR_CODE, |
| | | S_TYPE = wmsTask.S_TYPE + "-WCS", |
| | | S_START_LOC = startLoc.S_CODE, |
| | | S_START_AREA = startLoc.S_AREA_CODE, |
| | | S_END_LOC = middleLoc.S_CODE, |
| | | S_END_AREA = middleLoc.S_AREA_CODE, |
| | | S_SCHEDULE_TYPE = "WCS", |
| | | N_PRIORITY = 10, |
| | | T_START_TIME = DateTime.Now, |
| | | }; |
| | | // 1.创建成新机叫料作业 |
| | | var wmsTask = new WMSTask() |
| | | { |
| | | S_CNTR_CODE = cntrCode, |
| | | S_CODE = WMSHelper.GenerateTaskNo(), |
| | | S_START_LOC = startLoc.S_CODE, |
| | | S_START_AREA = startLoc.S_AREA_CODE, |
| | | S_END_LOC = endLoc.S_CODE, |
| | | S_END_AREA = endLoc.S_AREA_CODE, |
| | | S_TYPE = "叫料出库任务", |
| | | S_OP_DEF_CODE = mesTaskId.ToString(), |
| | | S_OP_DEF_NAME = "成型机叫料出库任务", |
| | | T_START_TIME = DateTime.Now, |
| | | }; |
| | | if (WMSHelper.CreateWmsTask(wmsTask)) |
| | | { |
| | | WCSTask wcsTask = new WCSTask() |
| | | { |
| | | S_OP_NAME = wmsTask.S_OP_DEF_NAME, |
| | | S_OP_CODE = wmsTask.S_CODE, |
| | | S_CODE = WCSHelper.GenerateTaskNo(), |
| | | S_CNTR_CODE = wmsTask.S_CNTR_CODE, |
| | | S_TYPE = wmsTask.S_TYPE, |
| | | S_START_LOC = startLoc.S_CODE, |
| | | S_START_AREA = startLoc.S_AREA_CODE, |
| | | S_END_LOC = middleLoc.S_CODE, |
| | | S_END_AREA = middleLoc.S_AREA_CODE, |
| | | S_SCHEDULE_TYPE = "WCS", |
| | | N_PRIORITY = 10, |
| | | T_START_TIME = DateTime.Now, |
| | | }; |
| | | |
| | | if (WCSHelper.CreateTask(wcsTask)) |
| | | { |
| | | // 起点、终点加锁 |
| | | LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); |
| | | LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); |
| | | if (WCSHelper.CreateTask(wcsTask)) |
| | | { |
| | | // 起点、终点加锁 |
| | | LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); |
| | | LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); |
| | | |
| | | // 更新作业任务状态 |
| | | wmsTask.N_B_STATE = 1; |
| | | WMSHelper.UpdateTaskState(wmsTask); |
| | | // 更新作业任务状态 |
| | | wmsTask.N_B_STATE = 1; |
| | | WMSHelper.UpdateTaskState(wmsTask); |
| | | } |
| | | |
| | | // 预创建二段任务 |
| | | WCSTask twoWcsTask = new WCSTask() |
| | | { |
| | | S_OP_NAME = wmsTask.S_OP_DEF_NAME, |
| | | S_OP_CODE = wmsTask.S_CODE, |
| | | S_CODE = WCSHelper.GenerateTaskNo(), |
| | | S_CNTR_CODE = wmsTask.S_CNTR_CODE, |
| | | S_TYPE = wmsTask.S_TYPE, |
| | | S_START_LOC = middleLoc.S_CODE, |
| | | S_START_AREA = middleLoc.S_AREA_CODE, |
| | | S_END_LOC = endLoc.S_CODE, |
| | | S_END_AREA = endLoc.S_AREA_CODE, |
| | | S_SCHEDULE_TYPE = "AGV", |
| | | N_PRIORITY = 10, |
| | | T_START_TIME = DateTime.Now, |
| | | N_B_STATE = -1 |
| | | }; |
| | | WCSHelper.CreateTask(twoWcsTask); |
| | | WMSHelper.readLjMesCallItemTask(wmsTask.S_CODE, mesTaskId); |
| | | } |
| | | } |
| | | |
| | | // 预创建二段任务 |
| | | WCSTask twoWcsTask = new WCSTask() |
| | | else |
| | | { |
| | | S_OP_NAME = wmsTask.S_OP_DEF_NAME, |
| | | S_OP_CODE = wmsTask.S_CODE, |
| | | S_CODE = WCSHelper.GenerateTaskNo(), |
| | | S_CNTR_CODE = wmsTask.S_CNTR_CODE, |
| | | S_TYPE = wmsTask.S_TYPE, |
| | | S_START_LOC = middleLoc.S_CODE, |
| | | S_START_AREA = middleLoc.S_AREA_CODE, |
| | | S_END_LOC = endLoc.S_CODE, |
| | | S_END_AREA = endLoc.S_AREA_CODE, |
| | | S_SCHEDULE_TYPE = "AGV", |
| | | N_PRIORITY = 10, |
| | | T_START_TIME = DateTime.Now, |
| | | N_B_STATE = -1 |
| | | }; |
| | | WCSHelper.CreateTask(twoWcsTask); |
| | | |
| | | WMSHelper.readLjMesCallItemTask(wmsTask.S_CODE, mesTaskId); |
| | | WMSHelper.addAlarmRecord("流程异常", "高", $"成型机叫料失败,库区{startLoc.S_AREA_CODE}未查询到可用的接驳位"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | WMSHelper.addAlarmRecord("流程异常", "高", $"成型机叫料失败,开始货位:{startLoc.S_CODE}异常,缺少容器信息"); |
| | | } |
| | | } |
| | | else |
| | | else |
| | | { |
| | | WMSHelper.addAlarmRecord("流程异常", "高", $"库区{startLoc.S_AREA_CODE}未查询到可用的接驳位"); |
| | | } |
| | | mesTask.AWAIT_MSG = "库存不足"; |
| | | WMSHelper.updateLjMesTask(mesTask); |
| | | WMSHelper.addAlarmRecord("流程异常", "高", $"成型机叫料失败,物料:{materialCode}库存不足"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <param name="materialCode"></param> |
| | | /// <param name="endLocCode"></param> |
| | | /// <param name="mesTaskId"></param> |
| | | public static void callMaterialHDK(string materialCode, string endLocCode, int mesTaskId) |
| | | public static void callMaterialXC(string materialCode, string endLocCode, int mesTaskId) |
| | | { |
| | | // 1.查询环带库物料库存 |
| | | DateTime inStockTimeXc = DateTime.MinValue; |
| | | List<CntrItemRel> cntrItemRelsXc = new List<CntrItemRel>(); |
| | | if (cntrItemRelsXc.Count > 0) |
| | | { |
| | | inStockTimeXc = cntrItemRelsXc[0].T_INBOUND_TIME; |
| | | } |
| | | |
| | | // 2.查询中转库库存,根据入库时间 进行先入先出 |
| | | // 2.查询中转库库存 |
| | | DateTime inStockTime = DateTime.MinValue; |
| | | var cntrItemRels = WMSHelper.getZZKInventoryInfo(materialCode); |
| | | if (cntrItemRels.Count > 0) |
| | | { |
| | | inStockTime = cntrItemRels[0].T_INBOUND_TIME; |
| | | } |
| | | |
| | | // 3.将MES任务写入环带库任务中间表 |
| | | WMSHelper.addLjXcTask(mesTaskId); |
| | | // 3.根据先进先出计算出库的物料是环带库 还是中转库 |
| | | var mesTask = WMSHelper.GetLjMesTaskById(mesTaskId); |
| | | if (inStockTime >= inStockTimeXc) |
| | | { |
| | | //斜裁物料出库 |
| | | if (cntrItemRelsXc.Count > 0) |
| | | { |
| | | // 4.将MES任务写入环带库任务中间表 |
| | | WMSHelper.addLjXcTask(mesTask); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | //中转库物料出库 |
| | | if (cntrItemRels.Count > 0) |
| | | { |
| | | var cntrItemRel = cntrItemRels[0]; |
| | | var locCntrRel = LocationHelper.GetLocCntrByCntr(cntrItemRel.S_CNTR_CODE); |
| | | if (locCntrRel != null) |
| | | { |
| | | var endLoc = LocationHelper.GetLoc(locCntrRel.S_LOC_CODE); |
| | | if (endLoc != null) |
| | | { |
| | | Location middleLoc = null; |
| | | Location startLoc = WMSHelper.getOutStockStartLoc(null, materialCode); |
| | | if (startLoc != null) |
| | | { |
| | | var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE); |
| | | if (locCntrRels.Count > 0) |
| | | { |
| | | var cntrCode = cntrItemRel.S_CNTR_CODE; |
| | | middleLoc = WMSHelper.GetTransfeRelevanceLoc(startLoc.S_AREA_CODE, 1, 2); |
| | | if (middleLoc != null) |
| | | { |
| | | // 1.创建成新机叫料作业 |
| | | var wmsTask = new WMSTask() |
| | | { |
| | | S_CNTR_CODE = cntrCode, |
| | | S_CODE = WMSHelper.GenerateTaskNo(), |
| | | S_START_LOC = startLoc.S_CODE, |
| | | S_START_AREA = startLoc.S_AREA_CODE, |
| | | S_END_LOC = endLoc.S_CODE, |
| | | S_END_AREA = endLoc.S_AREA_CODE, |
| | | S_TYPE = "叫料出库任务", |
| | | S_OP_DEF_CODE = mesTaskId.ToString(), |
| | | S_OP_DEF_NAME = "成型机叫料出库任务", |
| | | T_START_TIME = DateTime.Now, |
| | | }; |
| | | if (WMSHelper.CreateWmsTask(wmsTask)) |
| | | { |
| | | WCSTask wcsTask = new WCSTask() |
| | | { |
| | | S_OP_NAME = wmsTask.S_OP_DEF_NAME, |
| | | S_OP_CODE = wmsTask.S_CODE, |
| | | S_CODE = WCSHelper.GenerateTaskNo(), |
| | | S_CNTR_CODE = wmsTask.S_CNTR_CODE, |
| | | S_TYPE = wmsTask.S_TYPE, |
| | | S_START_LOC = startLoc.S_CODE, |
| | | S_START_AREA = startLoc.S_AREA_CODE, |
| | | S_END_LOC = middleLoc.S_CODE, |
| | | S_END_AREA = middleLoc.S_AREA_CODE, |
| | | S_SCHEDULE_TYPE = "WCS", |
| | | N_PRIORITY = 10, |
| | | T_START_TIME = DateTime.Now, |
| | | }; |
| | | |
| | | if (WCSHelper.CreateTask(wcsTask)) |
| | | { |
| | | // 起点、终点加锁 |
| | | LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); |
| | | LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); |
| | | |
| | | // 更新作业任务状态 |
| | | wmsTask.N_B_STATE = 1; |
| | | WMSHelper.UpdateTaskState(wmsTask); |
| | | } |
| | | |
| | | // 预创建二段任务 |
| | | WCSTask twoWcsTask = new WCSTask() |
| | | { |
| | | S_OP_NAME = wmsTask.S_OP_DEF_NAME, |
| | | S_OP_CODE = wmsTask.S_CODE, |
| | | S_CODE = WCSHelper.GenerateTaskNo(), |
| | | S_CNTR_CODE = wmsTask.S_CNTR_CODE, |
| | | S_TYPE = wmsTask.S_TYPE, |
| | | S_START_LOC = middleLoc.S_CODE, |
| | | S_START_AREA = middleLoc.S_AREA_CODE, |
| | | S_END_LOC = endLoc.S_CODE, |
| | | S_END_AREA = endLoc.S_AREA_CODE, |
| | | S_SCHEDULE_TYPE = "AGV", |
| | | N_PRIORITY = 10, |
| | | T_START_TIME = DateTime.Now, |
| | | N_B_STATE = -1 |
| | | }; |
| | | WCSHelper.CreateTask(twoWcsTask); |
| | | WMSHelper.readLjMesCallItemTask(wmsTask.S_CODE, mesTaskId); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | WMSHelper.addAlarmRecord("流程异常", "高", $"成型机叫料失败,库区{startLoc.S_AREA_CODE}未查询到可用的接驳位"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | WMSHelper.addAlarmRecord("流程异常", "高", $"成型机叫料失败,开始货位:{startLoc.S_CODE}异常,缺少容器信息"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | mesTask.AWAIT_MSG = "库存不足"; |
| | | WMSHelper.updateLjMesTask(mesTask); |
| | | WMSHelper.addAlarmRecord("流程异常", "高", $"成型机叫料失败,物料:{materialCode}库存不足"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// 3.创建余料回库作业,创建agv搬运任务,虚拟终点 |
| | | /// </summary> |
| | | /// <param name="locCode">成型机叫料终点</param> |
| | | public static void returnMaterialOrEmptyTray(string locCode) |
| | | /// <param name="jtNo">成型机叫料终点</param> |
| | | public static void returnMaterialOrEmptyTray(string locCode ,string jtNo) |
| | | { |
| | | if (locCode != null) |
| | | { |
| | | // 2.查询mes任务中间表 |
| | | var mesTask = WMSHelper.getLjMesTaskByLoc(locCode); |
| | | var mesTask = WMSHelper.getLjMesTaskByJtNo(jtNo); |
| | | if (mesTask != null) |
| | | { |
| | | createReturnTask(locCode, mesTask); |
| | |
| | | } |
| | | } |
| | | |
| | | if (cst.S_TYPE == "叫料出库任务") |
| | | var bo = int.TryParse(mst.S_OP_DEF_CODE, out int mesId); |
| | | if (bo) |
| | | { |
| | | var mesTask = WMSHelper.GetLjMesTaskByAgvorderId(mst.S_CODE); |
| | | callMaterial( mesTask.MATERIAL_CODE, mesTask.POSITION_ID, mesTask.ID); |
| | | var mesTask = WMSHelper.GetLjMesTaskById(mesId); |
| | | callMaterial(mesTask.MATERIAL_CODE, mesTask.POSITION_ID, mesTask.ID); |
| | | } |
| | | } |
| | | return result; |
| | |
| | | //---------------------------------------------------------------------------------------------------------------------------- |
| | | public class LocModel |
| | | { |
| | | public string locCode { get; set; } |
| | | public string locCode { get; set; } // 返料货位编号 |
| | | public string jtNo { get; set; } // 机台号 |
| | | } |
| | | |
| | | public class ApplyDest { |