From 7316933ac357c95485bfc389bed2e75041a449ef Mon Sep 17 00:00:00 2001 From: "ZHOUZ\\Noble'lift" <1014987728@qq.com> Date: Sat, 25 Feb 2023 14:10:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/service/impl/LmsToMesServiceImpl.java | 4 ++ .../mes/service/impl/MesToLmsServiceImpl.java | 28 +++++++----- .../wms/pda/mps/rest/ShippingController.java | 2 +- .../mps/service/impl/CasingServiceImpl.java | 16 +++---- .../mps/service/impl/ShippingServiceImpl.java | 40 +++++++++++++++--- .../java/org/nl/wms/pda/mps/wql/PDA_02.wql | 24 +++++++++++ .../src/main/java/org/nl/wms/pdm/wql/pdm.xls | Bin 249856 -> 250368 bytes .../org/nl/wms/sch/tasks/CutConveyorTask.java | 15 +++++++ .../org/nl/wms/sch/tasks/CutTrussTask.java | 15 ++++++- 9 files changed, 119 insertions(+), 25 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/LmsToMesServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/LmsToMesServiceImpl.java index 06287c6d8..db31a7ce3 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/LmsToMesServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/LmsToMesServiceImpl.java @@ -233,6 +233,10 @@ public class LmsToMesServiceImpl implements LmsToMesService { JSONObject jo = new JSONObject(); jo.put("iContainerName", container_name); jo.put("iisAirSwellAssComplete", 1); + //发送MES运输中 + if (StrUtil.isNotEmpty(param.getString("is_send"))) { + jo.put("Attribute1", 1); + } // String url = acsUrl + api; String url = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_URL").getValue(); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java index 56c321df8..f44ba5c1d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java @@ -469,15 +469,6 @@ public class MesToLmsServiceImpl implements MesToLmsService { try { String is_mesTolms = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("is_mesTolms").getValue(); if (StrUtil.equals(is_mesTolms, "1")) { - String Attribute1 = param.getString("Attribute1"); - if (Attribute1.equals("0")) { - result.put("RTYPE", "S"); - result.put("RTMSG", "操作成功!"); - result.put("RTOAL", 1); - result.put("RTDAT", null); - System.out.println(result); - return result; - } String container_name = param.getString("ContainerName"); if (StrUtil.isEmpty(container_name)) { throw new BadRequestException("子卷号不能为空!"); @@ -488,6 +479,23 @@ public class MesToLmsServiceImpl implements MesToLmsService { if (ObjectUtil.isEmpty(plan_jo)) { throw new BadRequestException("未查询到该子卷号对应的分切计划!"); } + String Attribute1 = param.getString("Attribute1"); + String Attribute2 = param.getString("Attribute2"); + + if (StrUtil.equals("1", Attribute2)) { + //更新该子卷号对应的分切计划为已呼叫 + plan_jo.put("is_call", "1"); + WQLObject.getWQLObject("PDM_BI_SlittingProductionPlan").update(plan_jo); + } + + if (Attribute1.equals("0")) { + result.put("RTYPE", "S"); + result.put("RTMSG", "操作成功!"); + result.put("RTOAL", 1); + result.put("RTDAT", null); + System.out.println(result); + return result; + } //查询该分切机对应的点位 JSONObject cut_jo = WQLObject.getWQLObject("st_ivt_cutpointivt").query("ext_code = '" + plan_jo.getString("resource_name") + "'").uniqueResult(0); @@ -700,7 +708,7 @@ public class MesToLmsServiceImpl implements MesToLmsService { if (ObjectUtil.isEmpty(plan_jo)) { throw new BadRequestException("未查询到分切计划:" + row.getString("ContainerGroup")); } - //如果入站的分切计划气涨轴为空,则虚拟一个气涨轴编号 + //如果入站的分切计划气涨轴为空,则虚拟一个气a涨轴编号 if (StrUtil.isEmpty(plan_jo.getString("qzzno"))) { if (i == 0 || i == 2) { plan_jo.put("qzzno", "XN-" + plan_jo.getString("resource_name") + "A"); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/ShippingController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/ShippingController.java index 1fd6409e5..386678c6f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/ShippingController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/ShippingController.java @@ -39,7 +39,7 @@ public class ShippingController { } @PostMapping("/confirm") - @Log("套轴确认") + @Log("配送确认") @ApiOperation("配送确认") public ResponseEntity confirm(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(shippingService.confirm(whereJson), HttpStatus.OK); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/CasingServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/CasingServiceImpl.java index c84a78492..c3b15675a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/CasingServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/CasingServiceImpl.java @@ -113,14 +113,6 @@ public class CasingServiceImpl implements CasingService { } } - //如果一个分切组只有两个子卷,则一定得分两根轴进行绑定 - if (rows.size() == 2 && order_type.equals("1")) { - JSONArray group_rows = WQLObject.getWQLObject("pdm_bi_slittingproductionplan").query("parent_container_name = '" + parent_container_name + "' AND split_group = '" + split_group + "' AND is_delete = '0'").getResultJSONArray(0); - if (group_rows.size() == 2) { - throw new BadRequestException("该分切组只有两个分切计划,请选择两个不同的轴进行绑定!"); - } - } - //查询该气涨轴是否存在已经套轴的分切计划 JSONArray case_rows = WQLObject.getWQLObject("pdm_bi_slittingproductionplan").query("qzzno = '" + qzzno + "' AND is_delete = '0' AND is_child_tz_ok = '1' AND status < '09'").getResultJSONArray(0); for (int i = 0; i < case_rows.size(); i++) { @@ -145,6 +137,14 @@ public class CasingServiceImpl implements CasingService { throw new BadRequestException("该气涨轴上已经绑定了两个分切计划,无法继续绑定!"); } + //如果一个分切组只有两个子卷,则一定得分两根轴进行绑定 + if ((rows.size() == 2 || (rows.size() == 1 && case_rows.size() == 1)) && order_type.equals("1")) { + JSONArray group_rows = WQLObject.getWQLObject("pdm_bi_slittingproductionplan").query("parent_container_name = '" + parent_container_name + "' AND split_group = '" + split_group + "' AND is_delete = '0'").getResultJSONArray(0); + if (group_rows.size() == 2) { + throw new BadRequestException("该分切组只有两个分切计划,请选择两个不同的轴进行绑定!"); + } + } + for (int i = 0; i < rows.size(); i++) { JSONObject row = rows.getJSONObject(i); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/ShippingServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/ShippingServiceImpl.java index 1173550df..3a5c5fcd2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/ShippingServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/ShippingServiceImpl.java @@ -9,6 +9,7 @@ import lombok.extern.slf4j.Slf4j; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.ext.mes.service.LmsToMesService; import org.nl.wms.pda.mps.service.CasingService; import org.nl.wms.pda.mps.service.ShippingService; import org.nl.wms.sch.tasks.CutConveyorTask; @@ -141,8 +142,27 @@ public class ShippingServiceImpl implements ShippingService { if (StrUtil.isNotEmpty(qzzno)) { map.put("qzzno", qzzno); } - JSONObject plan_jo = WQL.getWO("PDA_02").addParamMap(map).process().uniqueResult(0); + JSONArray plan = WQL.getWO("PDA_02").addParamMap(map).process().getResultJSONArray(0); + if (ObjectUtil.isEmpty(plan)) { + throw new BadRequestException("未找到气涨轴【" + qzzno + "】对应的分切计划!"); + } + + //判断该气涨轴对应的分切计划是否呼叫,如果没有呼叫不允许配送 + //判断该接口是否需要卡MES是否呼叫 + JSONObject back_jo = WQLObject.getWQLObject("MD_PB_InterfaceBack").query("interface_name = 'callNextAssAndMomRoll'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(back_jo) && back_jo.getString("is_back").equals("1")) { + for (int i = 0; i < plan.size(); i++) { + JSONObject plan_jo = plan.getJSONObject(i); + String is_call = plan_jo.getString("is_call"); + if (StrUtil.equals("0", is_call)) { + throw new BadRequestException("子卷号为:" + plan_jo.getString("container_name") + "的分切计划未呼叫,不允许进行配送!"); + } + } + } + + + JSONObject plan_jo = plan.getJSONObject(0); JSONObject cut_jo = WQLObject.getWQLObject("st_ivt_cutpointivt").query("ext_code = '" + resource_name + "'").uniqueResult(0); String product_area = cut_jo.getString("product_area"); String point_location = cut_jo.getString("point_location"); @@ -164,6 +184,7 @@ public class ShippingServiceImpl implements ShippingService { if (ObjectUtil.isEmpty(vehicle_area)) { throw new BadRequestException("该气涨轴无法放在该载具上!"); } + //查询离该分切计划包含机台最近的一个空点位 JSONObject empty_point = WQL.getWO("PDA_02") .addParam("sql_str", " ORDER BY abs(" + plan_jo.getString("sort_seq") + "-sort_seq),point_code") @@ -367,11 +388,11 @@ public class ShippingServiceImpl implements ShippingService { if (StrUtil.isEmpty(qzzno)) { throw new BadRequestException("气涨轴不能为空!"); } - JSONObject plan = WQLObject.getWQLObject("pdm_bi_slittingproductionplan").query("qzzno = '" + qzzno + "'").uniqueResult(0); + JSONArray plan = WQLObject.getWQLObject("pdm_bi_slittingproductionplan").query("qzzno = '" + qzzno + "'").getResultJSONArray(0); if (ObjectUtil.isEmpty(plan)) { throw new BadRequestException("未找到气涨轴【" + qzzno + "】对应的分切计划!"); } - String resource_name = plan.getString("resource_name"); + String resource_name = plan.getJSONObject(0).getString("resource_name"); JSONObject cut_jo = WQLObject.getWQLObject("st_ivt_cutpointivt").query("ext_code = '" + resource_name + "'").uniqueResult(0); String product_area = cut_jo.getString("product_area"); String point_location = cut_jo.getString("point_location"); @@ -394,10 +415,19 @@ public class ShippingServiceImpl implements ShippingService { } } + //判断该气涨轴对应的分切计划是否呼叫,如果没有呼叫不允许配送 + JSONObject back_jo = WQLObject.getWQLObject("MD_PB_InterfaceBack").query("interface_name = 'callNextAssAndMomRoll'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(back_jo) && back_jo.getString("is_back").equals("1")) { + for (int i = 0; i < plan.size(); i++) { + JSONObject plan_jo = plan.getJSONObject(i); + String is_call = plan_jo.getString("is_call"); + if (StrUtil.equals("0", is_call)) { + throw new BadRequestException("子卷号为:" + plan_jo.getString("container_name") + "的分切计划未呼叫,不允许进行配送!"); + } + } + } JSONObject jo = new JSONObject(); jo.put("message", "校验无误,可以进行配送!"); return jo; } - - } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/wql/PDA_02.wql b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/wql/PDA_02.wql index 2abc35881..f56593d4c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/wql/PDA_02.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/wql/PDA_02.wql @@ -27,6 +27,8 @@ 输入.resource_name TYPEAS s_string 输入.ext_code TYPEAS s_string 输入.find_type TYPEAS s_string + 输入.point_code1 TYPEAS s_string + 输入.point_code2 TYPEAS s_string [临时表] @@ -641,6 +643,28 @@ ENDQUERY ENDIF + IF 输入.flag = "19" + QUERY + SELECT + * + FROM + sch_base_task task + INNER JOIN ( + SELECT + ivt.up_point_code + FROM + st_ivt_cutpointivt ivt + WHERE + ( ivt.down_point_code = 输入.point_code1 OR ivt.down_point_code = 输入.point_code2 )) a ON a.up_point_code = task.point_code1 + OR a.up_point_code = task.point_code2 + WHERE + task.is_delete = '0' + AND + task.task_status < '04' + ENDSELECT + ENDQUERY + ENDIF + diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/wql/pdm.xls b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/wql/pdm.xls index f40b984fc0cb3814eed5d61e19946013e2618859..c59ba5410508323805d0bda7e7168c9aba7e37d7 100644 GIT binary patch delta 17723 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 delta 17348 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 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CutConveyorTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CutConveyorTask.java index 0b2abb48f..37ea36732 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CutConveyorTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CutConveyorTask.java @@ -103,6 +103,21 @@ public class CutConveyorTask extends AbstractAcsTask { jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode()); jsonTask.put("update_time", DateUtil.now()); taskTab.update(jsonTask); + + //调用MES接口,通知MES运输中 + LmsToMesService lmsToMesService = SpringContextHolder.getBean(LmsToMesService.class); + JSONArray rows = WQLObject.getWQLObject("PDM_BI_SlittingProductionPlan").query("qzzno = '" + jsonTask.getString("vehicle_code") + "' AND is_child_tz_ok = '1' AND is_delete ='0' AND status < '09'").getResultJSONArray(0); + for (int i = 0; i < rows.size(); i++) { + JSONObject row = rows.getJSONObject(i); + JSONObject jo = new JSONObject(); + jo.put("container_name", row.getString("container_name")); + jo.put("is_send", "1"); + //判断该接口是否需要回传 + JSONObject back_jo = WQLObject.getWQLObject("MD_PB_InterfaceBack").query("interface_name = 'airSwellWithPaperTubeAssComplete'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(back_jo) && back_jo.getString("is_back").equals("1")) { + lmsToMesService.airSwellWithPaperTubeAssComplete(jo); + } + } } if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CutTrussTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CutTrussTask.java index af3a825e5..4b72a3241 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CutTrussTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CutTrussTask.java @@ -21,6 +21,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; @Service @@ -34,7 +35,7 @@ public class CutTrussTask extends AbstractAcsTask { /* * 下发给ACS时需要特殊处理 */ - JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0); + JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0' order by task_code").getResultJSONArray(0); ArrayList resultList = new ArrayList<>(); for (int i = 0; i < arr.size(); i++) { @@ -49,6 +50,18 @@ public class CutTrussTask extends AbstractAcsTask { agv_system_type = "3"; } + //添加过滤,如果为分切机B轴的下料位,要判断该分切机A轴的点位是否存在未下发的任务,存在则也不允许下发 + String point_code1 = json.getString("point_code1"); + String point_code2 = json.getString("point_code2"); + JSONObject task_jo = new JSONObject(); + task_jo.put("point_code1", point_code1); + task_jo.put("point_code2", point_code2); + task_jo.put("flag", "19"); + JSONObject up_task = WQL.getWO("PDA_02").addParamMap(task_jo).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(up_task)) { + log.info("点位:" + point_code1 + "分切机的A轴存在未完成的任务,无法下发分切机B轴的任务!"); + continue; + } AcsTaskDto dto = AcsTaskDto.builder() .ext_task_id(json.getString("task_id")) .task_code(json.getString("task_code"))