From 15a46f0c62ff398b49ba35105c83e0011a140e32 Mon Sep 17 00:00:00 2001 From: gongbaoxiong <751575283@qq.com> Date: Tue, 18 Jun 2024 12:48:01 +0800 Subject: [PATCH 01/30] =?UTF-8?q?opt:6.18=20=E7=BA=BF=E4=B8=8A=E9=83=A8?= =?UTF-8?q?=E7=BD=B2=E6=B5=8B=E8=AF=95=E7=8E=AF=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/PdmBiSubpackagerelationMapper.xml | 2 +- .../PdmBiSubpackagerelationServiceImpl.java | 22 +++++++++---------- .../config/thread/AsyncTaskExecutePool.java | 3 +++ .../src/views/wms/pdm/sub/MaterDialog.vue | 2 +- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.xml index d08ade145..b2dd6d33c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.xml @@ -54,7 +54,7 @@ FROM pdm_bi_subpackagerelation WHERE - container_name IN (SELECT container_name FROM bst_ivt_packageinfoivt WHERE point_status = '3') + container_name IN (SELECT container_name FROM bst_ivt_packageinfoivt WHERE point_status = '6') AND sale_order_name LIKE CONCAT('%', #{sale_order_name}, '%') diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java index 006ccd474..bb2774e37 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java @@ -404,9 +404,9 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl packagerelationList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class); List isOutBox = packagerelationList.stream().filter(r -> r.getStatus().equals("0")).collect(Collectors.toList()); - if (isOutBox.size() > 0) { - throw new BadRequestException("标记为黄色的子卷号已分配木箱,请重新选择未分配木箱的子卷"); - } + if (isOutBox.size() > 0) { + throw new BadRequestException("标记为黄色的子卷号已分配木箱,请重新选择未分配木箱的子卷"); + } JSONArray jsonArray = whereJson.getJSONArray("tableMater"); if (jsonArray == null || jsonArray.size() == 0) { throw new BadRequestException("无选中子卷信息"); @@ -467,14 +467,14 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl装箱区agv任务 - String finalDeviceCode = deviceCode; - CompletableFuture.runAsync(() -> { - try { - agvTransfer(packagerelationList, finalDeviceCode, boxSn); - } catch (Exception e) { - log.error("异常信息:" + e); - } - }, pool); + // String finalDeviceCode = deviceCode; + // CompletableFuture.runAsync(() -> { + // try { + // agvTransfer(packagerelationList, finalDeviceCode, boxSn); + // } catch (Exception e) { + // log.error("异常信息:" + e); + // } + // }, pool); } private String getPointCode() { diff --git a/lms/nladmin-system/src/main/java/org/nl/config/thread/AsyncTaskExecutePool.java b/lms/nladmin-system/src/main/java/org/nl/config/thread/AsyncTaskExecutePool.java index d0405e84d..9eb668558 100644 --- a/lms/nladmin-system/src/main/java/org/nl/config/thread/AsyncTaskExecutePool.java +++ b/lms/nladmin-system/src/main/java/org/nl/config/thread/AsyncTaskExecutePool.java @@ -17,6 +17,7 @@ package org.nl.config.thread; import lombok.extern.slf4j.Slf4j; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.AsyncConfigurer; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; @@ -63,6 +64,8 @@ public class AsyncTaskExecutePool implements AsyncConfigurer { return executor; } + + @Override public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { return (throwable, method, objects) -> { diff --git a/lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue b/lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue index 64daf2c6d..7313a8da2 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue +++ b/lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue @@ -66,7 +66,7 @@ export default { url: 'api/Materialbase', idField: 'material_id', sort: 'material_id,desc', - query: { search: 'MX', material_id: '' }, + query: { box: '木箱', material_id: '' }, crudMethod: { ...crudMaterattr } }) }, From cf95dc505c812f4f348aca371946dfc70149491a Mon Sep 17 00:00:00 2001 From: gongbaoxiong <751575283@qq.com> Date: Tue, 18 Jun 2024 15:33:14 +0800 Subject: [PATCH 02/30] =?UTF-8?q?fix:=E5=8F=91=E8=B4=A7=E5=87=BA=E5=BA=93?= =?UTF-8?q?=E6=9C=A8=E7=AE=B1=E5=8F=B7=E8=A7=A3=E6=9E=90=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E6=9F=A5=E4=B8=8D=E5=88=B0=E5=AD=90=E5=8D=B7?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iostorInv/util/impl/InBussManageServiceImpl.java | 6 +----- .../util/impl/SendOutManageServiceImpl.java | 12 +++++++++--- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBussManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBussManageServiceImpl.java index 17cfb5c40..6f9d65c40 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBussManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBussManageServiceImpl.java @@ -215,11 +215,7 @@ public class InBussManageServiceImpl implements InBussManageService { } List pcsnList = Arrays.asList(material_barcode.split(",")); // 查询子卷包装关系 -// List subList = subTab.query("container_name ='B2512402242302B1A1' and status in ('0','1')") -// .getResultJSONArray(0).toJavaList(JSONObject.class); -// List subList = subTab.query("container_name ='B2512402242302B1A1' and status in ('0','1')") -// .getResultJSONArray(0).toJavaList(JSONObject.class); - List subList = subTab.query("container_name in ('" + String.join("','", pcsnList) + "') and status in ('0','1')") + List subList = subTab.query("container_name in ('" + String.join("','", pcsnList) + "') and status in ('0','1','99')") .getResultJSONArray(0).toJavaList(JSONObject.class); if (ObjectUtil.isEmpty(subList)) { throw new BadRequestException("未查询到子卷包装信息!"); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/SendOutManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/SendOutManageServiceImpl.java index 09408f133..99e8645dc 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/SendOutManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/SendOutManageServiceImpl.java @@ -1,11 +1,13 @@ package org.nl.b_lms.storage_manage.ios.service.iostorInv.util.impl; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; import org.nl.b_lms.sch.point.dao.SchBasePoint; import org.nl.b_lms.sch.point.dao.mapper.SchBasePointMapper; import org.nl.b_lms.sch.point.service.IschBasePointService; @@ -20,6 +22,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; +import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; @@ -69,13 +72,16 @@ public class SendOutManageServiceImpl implements SendOutManageService { .eq(SchBasePoint::getIs_used, IOSEnum.IS_NOTANDYES.code("是")) .eq(SchBasePoint::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")) ); - // 1.查询此木箱号的子卷包装关系 - JSONObject jsonSub = subTab.query("package_box_sn = '" + whereJson.getString("vehicle_code") + "'").uniqueResult(0); + if(StringUtils.isEmpty(whereJson.getString("vehicle_code"))){ + throw new BadRequestException("木箱号不能为空!"); + } + //木箱号可能用逗号隔开 + String vehicleCode = Arrays.asList(whereJson.getString("vehicle_code").split(",")).get(0); + JSONObject jsonSub = subTab.query("package_box_sn = '" + vehicleCode + "'").uniqueResult(0); if (ObjectUtil.isEmpty(jsonSub)) { throw new BadRequestException("未查询到该木箱对应的包装关系!"); } - // 2.找相同订单号的所有排 jsonSub.put("region_id", RegionTypeEnum.TWO_FH01.getId()); List pointLikeOrder = schBasePointMapper.queryLikeOrderRow(jsonSub); From 41cf6d7466e9aa4641ab39a138bb09d04a931b17 Mon Sep 17 00:00:00 2001 From: gongbaoxiong <751575283@qq.com> Date: Tue, 18 Jun 2024 16:00:57 +0800 Subject: [PATCH 03/30] =?UTF-8?q?opt:=E5=8F=AA=E6=98=BE=E7=A4=BA=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E7=82=B9=E4=BD=8D=E7=9A=84=E5=AD=90=E5=8D=B7=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/PdmBiSubpackagerelationMapper.java | 2 ++ .../mapper/PdmBiSubpackagerelationMapper.xml | 12 +++++++++++ .../PdmBiSubpackagerelationServiceImpl.java | 20 +------------------ 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.java index 315554a65..c269fc620 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.java @@ -28,4 +28,6 @@ public interface PdmBiSubpackagerelationMapper extends BaseMapper queryContainerNameBySaleOrder( @Param("sale_order_name") String sale_order_name); + } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.xml index b2dd6d33c..032d3abad 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.xml @@ -72,5 +72,17 @@ ORDER BY MAX(create_time) DESC + + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java index bb2774e37..f4c885abc 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java @@ -153,25 +153,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl queryContainerNameBySaleOrder(Map whereJson) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - if (whereJson.containsKey("customer_description")) { - queryWrapper.like(PdmBiSubpackagerelation::getCustomer_description, whereJson.get("customer_description")); - } - if (whereJson.containsKey("sale_order_name")) { - queryWrapper.eq(PdmBiSubpackagerelation::getSale_order_name, whereJson.get("sale_order_name")); - } - if (whereJson.containsKey("customer_name")) { - queryWrapper.like(PdmBiSubpackagerelation::getCustomer_name, whereJson.get("customer_name")); - } - if (whereJson.containsKey("status")) { - if ("99".equals(whereJson.get("status"))) { - queryWrapper.eq(PdmBiSubpackagerelation::getStatus, whereJson.get("status")); - } else { - queryWrapper.ge(PdmBiSubpackagerelation::getStatus, whereJson.get("status")); - } - } - queryWrapper.orderByDesc(PdmBiSubpackagerelation::getBox_group); - List pdmBiSubpackagerelationList = pdmBiSubpackagerelationMapper.selectList(queryWrapper); + List pdmBiSubpackagerelationList = pdmBiSubpackagerelationMapper.queryContainerNameBySaleOrder(whereJson.get("sale_order_name").toString()); Map countByGroup = pdmBiSubpackagerelationList.stream() .filter(item -> item.getBox_group() != null) .collect(Collectors.groupingBy(PdmBiSubpackagerelation::getBox_group, Collectors.counting())); From 9186ce137f2a67a4d8d7bb1cbfcc40cf69729d22 Mon Sep 17 00:00:00 2001 From: liuxy Date: Tue, 18 Jun 2024 16:34:21 +0800 Subject: [PATCH 04/30] =?UTF-8?q?rev=EF=BC=9A1.=E5=87=BA=E5=BA=93=E5=85=AD?= =?UTF-8?q?=E4=B8=AA=E4=BD=8D=E7=BD=AE=E5=9C=A8=E4=B8=80=E4=B8=AA=E5=87=BA?= =?UTF-8?q?=E5=BA=93=E5=8D=95=E4=B8=8A=E4=B8=80=E8=B5=B7=E5=87=BA=E5=BA=93?= =?UTF-8?q?=E7=9A=84=E6=97=B6=E5=80=99=20=E6=8A=A5=E9=94=99=EF=BC=9A?= =?UTF-8?q?=E2=80=98=E4=BB=93=E4=BD=8D=E4=B8=8D=E8=B6=B3=E2=80=99=202.?= =?UTF-8?q?=E5=87=BA=E5=BA=93=E6=8D=86=E6=89=8E=E7=9A=84=E6=97=B6=E5=80=99?= =?UTF-8?q?=E8=A6=81=E8=BF=9B=E8=A1=8C=E5=88=A4=E6=96=AD=E6=AD=A4=E8=A7=84?= =?UTF-8?q?=E6=A0=BC=E6=98=AF=E5=90=A6=E5=8F=AA=E6=9C=89=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E7=AE=B1=E5=AD=90=EF=BC=8C=E5=A6=82=E6=9E=9C=E6=98=AF=E7=9B=B4?= =?UTF-8?q?=E6=8E=A5=E8=B0=83=E7=94=A8acs=E6=8E=A5=E5=8F=A3=E6=94=BE?= =?UTF-8?q?=E8=A1=8C=203.=E6=8D=86=E6=89=8E=E7=9A=84=E6=97=B6=E5=80=99?= =?UTF-8?q?=E6=8D=86=E6=89=8E=E4=BD=8D=E5=A6=82=E6=9E=9C=E6=9C=89=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E7=9B=B8=E5=90=8C=E8=A7=84=E6=A0=BC=E7=9A=84=E7=AE=B1?= =?UTF-8?q?=E5=AD=90=20=E8=A6=81=E4=BC=98=E5=85=88=E6=94=BE=E5=9C=A8?= =?UTF-8?q?=E8=BF=99=E4=B8=AA=E4=BD=8D=E7=BD=AE=E4=B8=8A=204.=E7=94=9F?= =?UTF-8?q?=E6=88=90=E8=BD=AC=E5=BA=93=E4=BB=BB=E5=8A=A1=E6=97=B6=20?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E6=8F=90=E5=89=8D=E7=A1=AE=E5=AE=9A=E5=B7=B7?= =?UTF-8?q?=E9=81=93=E7=9A=84=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/nl/b_lms/sch/tasks/TwoLashTask.java | 16 +++++ .../nl/b_lms/sch/tasks/TwoOutHeapTask.java | 1 + .../org/nl/b_lms/sch/tasks/TwoOutTask.java | 3 +- .../impl/StIvtIostorinvOutServiceImpl.java | 59 +++++++++++++------ .../util/impl/InBussManageServiceImpl.java | 38 +++++++++--- .../util/impl/LashManageServiceImpl.java | 4 ++ .../util/impl/OutBussManageServiceImpl.java | 33 +++++++++++ .../util/service/InBussManageService.java | 1 + .../util/service/LashManageService.java | 2 + 9 files changed, 131 insertions(+), 26 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoLashTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoLashTask.java index 285d30ffe..43f1abfb5 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoLashTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoLashTask.java @@ -141,6 +141,21 @@ public class TwoLashTask extends AbstractAcsTask { // 完成 if (status.equals(TaskStatusEnum.FINISHED.getCode())) { + // 判断当前任务组的所有任务是否都为完成:如果都为完成则 调用acs接口允许此木箱离开 + JSONObject groupTask = WQLObject.getWQLObject("sch_base_task").query("task_group_id = '" + taskObj.getString("task_group_id") + "' and is_delete = '0' and task_status <> 07 and task_id <> '"+taskObj.getString("task_id")+"'") + .uniqueResult(0); + + if (ObjectUtil.isEmpty(groupTask)) { + // 更新点位载具、数量 + JSONObject pointDao = pointTab.query("point_code = '" + taskObj.getString("point_code2") + "'").uniqueResult(0); + pointDao.put("vehicle_code", ""); + pointDao.put("vehicle_qty",0); + WQLObject.getWQLObject("sch_base_point").update(pointDao); + + // TODO 调用acs接口告诉此木箱可以离开 + + } + map.put("task_status", TaskStatusEnum.FINISHED.getCode()); } @@ -219,6 +234,7 @@ public class TwoLashTask extends AbstractAcsTask { json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); json.put("point_code1", form.getString("start_device_code")); json.put("point_code2", form.getString("next_device_code")); + json.put("task_group_id", form.getString("task_group_id")); json.put("is_auto_issue", form.getString("is_auto_issue")); json.put("handle_class", this.getClass().getName()); json.put("create_id", SecurityUtils.getCurrentUserId()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutHeapTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutHeapTask.java index 353b5f2b1..c059e9993 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutHeapTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutHeapTask.java @@ -110,6 +110,7 @@ public class TwoOutHeapTask extends AbstractAcsTask { JSONObject jsonParam = new JSONObject(); jsonParam.put("device_code",jsonTask.getString("point_code2")); jsonParam.put("vehicle_code",jsonTask.getString("vehicle_code")); + jsonParam.put("task_group_id",jsonTask.getString("task_group_id")); LashManageServiceImpl bean1 = SpringContextHolder.getBean(LashManageServiceImpl.class); bean1.createLashTask(jsonParam); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutTask.java index 62f100129..b530d2f1d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutTask.java @@ -163,13 +163,14 @@ public class TwoOutTask extends AbstractAcsTask { bean.finishTask(jsonTask); // 判断此任务组是否全部完成 - JSONArray resultJSONArray = taskTab.query("task_group_id = '" + jsonTask.getString("task_group_id") + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'") + JSONArray resultJSONArray = taskTab.query("task_group_id = '" + jsonTask.getString("task_group_id") + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "' and handle_class = '"+THIS_CLASS+"'") .getResultJSONArray(0); // 下发堆垛机至行架任务(2个行架位) JSONObject jsonParam = new JSONObject(); jsonParam.put("device_code",jsonTask.getString("point_code2")); jsonParam.put("vehicle_code",jsonTask.getString("vehicle_code")); + jsonParam.put("task_group_id",jsonTask.getString("task_group_id")); jsonParam.put("vehicle_type",jsonTask.getJSONObject("request_param").getString("containerType")); LashManageServiceImpl bean1 = SpringContextHolder.getBean(LashManageServiceImpl.class); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java index dd5ad95cf..3cc003f8b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java @@ -33,6 +33,7 @@ import org.nl.modules.common.exception.BadRequestException; import org.nl.common.utils.CodeUtil; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.system.service.param.ISysParamService; import org.nl.wms.basedata.st.service.StorattrService; import org.nl.wms.basedata.st.service.dto.StorattrDto; import org.nl.wms.pda.mps.eum.RegionTypeEnum; @@ -102,6 +103,9 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl '07' and is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonTask)) { flag = false; - } else { - // 不相同:判断是否有此木箱的任务 - JSONObject jsonTask = taskService.query("table_fk = '" + iostorinv_id + "' and vehicle_code = '" + jsonLow.getString("storagevehicle_code") + "' and is_delete = '0'").uniqueResult(0); - - if (ObjectUtil.isNotEmpty(jsonTask)) { - flag = false; - } - } + } if (flag) { @@ -1160,7 +1154,36 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl().lambda() + .eq(BstIvtBoxinfo::getBox_no, jsonLow.getString("storagevehicle_code")) + ); + + String box_high = boxDao.getBox_high(); + if (Integer.parseInt(box_high) <= Integer.parseInt(heightLevel1)) { + height = "1"; + } else if (Integer.parseInt(box_high) > Integer.parseInt(heightLevel1) && Integer.parseInt(box_high) <= Integer.parseInt(heightLevel2)) { + height = "2"; + } else { + height = "3"; + } + moveParam.put("height", height); + moveParam.put("vehicle_type", boxDao.getVehicle_type()); + moveParam.put("move_block_num", jsonLow.getString("block_num")); + + // 查询物料id + StIvtIostorinvdis disDao = iStIvtIostorinvdisService.list( + new QueryWrapper().lambda() + .ne(StIvtIostorinvdis::getWork_status,IOSEnum.BILL_STATUS.code("完成")) + .eq(StIvtIostorinvdis::getBox_no, jsonLow.getString("storagevehicle_code")) + ).get(0); + + moveParam.put("material_id", disDao.getMaterial_id()); JSONObject jsonMove = inBussManageService.getOneStruct(moveParam); // 生成任务 diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBussManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBussManageServiceImpl.java index 17cfb5c40..b299ad1cb 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBussManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBussManageServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONAware; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -119,12 +120,27 @@ public class InBussManageServiceImpl implements InBussManageService { * 判断是否有仓位 * 判断条件:库区、仓库、是否启用、是否删除、未锁定、没有载具 */ - JSONArray attrArry = attrTab.query("IFNULL(storagevehicle_code,'') = '' " + - "AND is_used = '" + IOSEnum.IS_NOTANDYES.code("是") + "' AND is_delete = '" + IOSEnum.IS_NOTANDYES.code("否") + "' " + - "AND lock_type = '" + IOSEnum.LOCK_TYPE.code("未锁定") + "' AND stor_id = '" + jsonObject.getString("stor_id") + "' " + - "AND storagevehicle_type = '" + jsonObject.getString("vehicle_type") + "'" + - "AND height = '" + jsonObject.getString("height") + "'" + - "AND sect_id = '" + jsonObject.getString("sect_id") + "'").getResultJSONArray(0); + // 是否是移库: 提前确定的巷道 + String block_num = jsonObject.getString("move_block_num"); + + JSONArray attrArry = new JSONArray(); + if (ObjectUtil.isEmpty(block_num)) { + attrArry = attrTab.query("IFNULL(storagevehicle_code,'') = '' " + + "AND is_used = '" + IOSEnum.IS_NOTANDYES.code("是") + "' AND is_delete = '" + IOSEnum.IS_NOTANDYES.code("否") + "' " + + "AND lock_type = '" + IOSEnum.LOCK_TYPE.code("未锁定") + "' AND stor_id = '" + jsonObject.getString("stor_id") + "' " + + "AND storagevehicle_type = '" + jsonObject.getString("vehicle_type") + "'" + + "AND height = '" + jsonObject.getString("height") + "'" + + "AND sect_id = '" + jsonObject.getString("sect_id") + "'").getResultJSONArray(0); + } else { + attrArry = attrTab.query("IFNULL(storagevehicle_code,'') = '' " + + "AND is_used = '" + IOSEnum.IS_NOTANDYES.code("是") + "' AND is_delete = '" + IOSEnum.IS_NOTANDYES.code("否") + "' " + + "AND lock_type = '" + IOSEnum.LOCK_TYPE.code("未锁定") + "' AND stor_id = '" + jsonObject.getString("stor_id") + "' " + + "AND storagevehicle_type = '" + jsonObject.getString("vehicle_type") + "'" + + "AND height = '" + jsonObject.getString("height") + "'" + + "AND sect_id = '" + jsonObject.getString("sect_id") + "' AND block_num = '"+block_num+"'") + .getResultJSONArray(0); + } + if (ObjectUtil.isEmpty(attrArry)) { notInRowList.clear(); @@ -143,7 +159,10 @@ public class InBussManageServiceImpl implements InBussManageService { jsonSub.put("vehicle_type", jsonObject.getString("vehicle_type")); jsonSub.put("height", jsonObject.getString("height")); - String block_num = getMinBlock(jsonSub); + // 不是移库则需要找新巷道 + if (ObjectUtil.isEmpty(block_num)) { + block_num = getMinBlock(jsonSub); + } /* * 确定哪排:查看每排相同木箱规格等 的数量,找到数量最小的那排 */ @@ -156,6 +175,11 @@ public class InBussManageServiceImpl implements InBussManageService { jsonSub.put("row_num", row_num); JSONObject jsonAttr = queryStruct(jsonSub); + // 如果是移库空并且仓位为空则报错 + if (ObjectUtil.isNotEmpty(jsonObject.getString("move_block_num")) && ObjectUtil.isEmpty(jsonAttr)) { + throw new BadRequestException("仓位不足!"); + } + // 为空则新找巷道 if (ObjectUtil.isEmpty(jsonAttr)) { diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/LashManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/LashManageServiceImpl.java index e9b6c7a76..d9d300604 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/LashManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/LashManageServiceImpl.java @@ -10,6 +10,8 @@ import org.hibernate.annotations.Source; import org.nl.b_lms.sch.point.dao.SchBasePoint; import org.nl.b_lms.sch.point.dao.mapper.SchBasePointMapper; import org.nl.b_lms.sch.point.service.IschBasePointService; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.nl.b_lms.sch.task.dao.mapper.SchBaseTaskMapper; import org.nl.b_lms.sch.tasks.TwoLashTask; import org.nl.b_lms.sch.tasks.TwoOutHeapTask; import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService; @@ -184,6 +186,7 @@ public class LashManageServiceImpl implements LashManageService { jsonTaskParam.put("task_type", "010707"); jsonTaskParam.put("start_device_code", whereJson.getString("device_code")); jsonTaskParam.put("next_device_code", end_point); + jsonTaskParam.put("task_group_id", whereJson.getString("task_group_id")); jsonTaskParam.put("vehicle_code", whereJson.getString("vehicle_code")); jsonTaskParam.put("is_auto_issue", is_move); @@ -218,6 +221,7 @@ public class LashManageServiceImpl implements LashManageService { jsonTaskParam.put("task_type", "010720"); whereJson.put("containerType", whereJson.getString("vehicle_type")); jsonTaskParam.put("point_code1", whereJson.getString("device_code")); + jsonTaskParam.put("task_group_id", whereJson.getString("task_group_id")); jsonTaskParam.put("point_code2", next_device_code); jsonTaskParam.put("vehicle_code", whereJson.getString("vehicle_code")); jsonTaskParam.put("request_param", whereJson); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBussManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBussManageServiceImpl.java index c419f8b50..acb269bd8 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBussManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBussManageServiceImpl.java @@ -5,6 +5,9 @@ import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService; +import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxinfo; import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvOutService; import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdtlService; @@ -17,6 +20,7 @@ import org.nl.common.utils.IdUtil; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.system.service.param.ISysParamService; import org.nl.wms.pda.mps.eum.RegionTypeEnum; import org.nl.wms.st.inbill.service.StorPublicService; import org.nl.wms.st.instor.service.HandMoveStorService; @@ -72,6 +76,12 @@ public class OutBussManageServiceImpl implements OutBussManageService { @Autowired private HandMoveStorService handMoveStorService; + @Autowired + private ISysParamService iSysParamService; + + @Autowired + private IBstIvtBoxinfoService iBstIvtBoxinfoService; + @Override @Transactional public void lockStruct(List param, JSONObject json) { @@ -381,6 +391,29 @@ public class OutBussManageServiceImpl implements OutBussManageService { moveParam.put("sect_id", RegionTypeEnum.TWO_BZC01.getId()); moveParam.put("box_no", json.getString("storagevehicle_code")); moveParam.put("material_id", jsonMater.getString("material_id")); + //根据木箱高度,判断入库仓位的高度、 + String height = ""; + String heightLevel1 = iSysParamService.findByCode("height_level_1").getValue(); + String heightLevel2 = iSysParamService.findByCode("height_level_2").getValue(); + // 查询木箱信息 + BstIvtBoxinfo boxDao = iBstIvtBoxinfoService.getOne( + new QueryWrapper().lambda() + .eq(BstIvtBoxinfo::getBox_no, json.getString("storagevehicle_code")) + ); + + String box_high = boxDao.getBox_high(); + if (Integer.parseInt(box_high) <= Integer.parseInt(heightLevel1)) { + height = "1"; + } else if (Integer.parseInt(box_high) > Integer.parseInt(heightLevel1) && Integer.parseInt(box_high) <= Integer.parseInt(heightLevel2)) { + height = "2"; + } else { + height = "3"; + } + moveParam.put("height", height); + moveParam.put("vehicle_type", boxDao.getVehicle_type()); + // 移库巷道 + moveParam.put("move_block_num",json.getString("block_num")); + JSONObject jsonMove = inBussManageService.getOneStruct(moveParam); // 查询移出货位的库存物料 diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/InBussManageService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/InBussManageService.java index 332a11f87..45ebf41ae 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/InBussManageService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/InBussManageService.java @@ -38,6 +38,7 @@ public interface InBussManageService { * sect_id:库区标识 * material_id: 物料标识 * box_no:木箱号 + * move_block_num: 是否移库:提前确定巷道 * } * @return JSONObject 仓位对象 */ diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/LashManageService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/LashManageService.java index 0d86dce68..d5ae9ab9e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/LashManageService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/LashManageService.java @@ -17,6 +17,7 @@ public interface LashManageService { * @param whereJson { * device_code:起点 * vehicle_code: 箱号 + * task_group_id: 任务组 * * } */ @@ -28,6 +29,7 @@ public interface LashManageService { * device_code:起点 * vehicle_code: 箱号 * vehicle_type: 载具类型 + * task_group_id: 任务组 * * } */ From 2c208789ce427d9e7683babf60bf3b557b07bc73 Mon Sep 17 00:00:00 2001 From: liuxy Date: Tue, 18 Jun 2024 16:35:05 +0800 Subject: [PATCH 05/30] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=90=88=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java index 3cc003f8b..600a4ca50 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java @@ -1270,6 +1270,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl row.getString("task_id").equals(json.getString("task_code"))) .collect(Collectors.toList()).get(0); + // 完成 if (jsonTask.getString("task_status").equals(TaskStatusEnum.FINISHED.getCode())) { From ceb0bac4970dce23920b9b0d96404dd7d8d16f9c Mon Sep 17 00:00:00 2001 From: gongbaoxiong <751575283@qq.com> Date: Tue, 18 Jun 2024 17:17:57 +0800 Subject: [PATCH 06/30] =?UTF-8?q?opt:=E5=8F=AA=E6=98=BE=E7=A4=BA=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E7=82=B9=E4=BD=8D=E7=9A=84=E5=AD=90=E5=8D=B7=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wms/ext/acs/service/impl/AcsToWmsServiceImpl.java | 2 +- .../src/main/java/org/nl/wms/sch/AcsUtil.java | 6 +++++- .../java/org/nl/wms/sch/manage/AbstractAcsTask.java | 11 ++++++----- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index 19d21baf7..af64a785e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -1905,7 +1905,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { // 6-退货入库 whereJson.put("bill_type", IOSEnum.IN_TYPE.code("退货入库")); whereJson.put("box_no", whereJson.getString("material_barcode")); - JSONArray resultJSONArray = WQLObject.getWQLObject("pdm_bi_subpackagerelation").query("package_box_sn = '" + whereJson.getString("material_barcode") + "' AND status in ('0','1')").getResultJSONArray(0); + JSONArray resultJSONArray = WQLObject.getWQLObject("pdm_bi_subpackagerelation").query("package_box_sn = '" + whereJson.getString("material_barcode") + "' AND status in ('0','1','99')").getResultJSONArray(0); if (ObjectUtil.isEmpty(resultJSONArray)) { throw new BadRequestException("未查询到子卷包装信息!"); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtil.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtil.java index 79a096006..60d2083a7 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtil.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtil.java @@ -50,6 +50,8 @@ public class AcsUtil { throw new BadRequestException("未查询到区域对应的acs地址!"); } String url =acs_url + api; + //String url ="10.1.3.96:8011/"+ api; + //String url ="10.21.1.196:8011/"+ api; try { JSONArray rows = new JSONArray(); rows.add(jo); @@ -117,7 +119,9 @@ public class AcsUtil { throw new BadRequestException("未查询到区域对应的acs地址!"); } - String url = acs_url + api; + //String url = acs_url + api; + //String url ="10.1.3.96:8011/"+ api; + String url ="10.21.1.196:8011/"+ api; try { String resultMsg = HttpRequest.post(url) .body(String.valueOf(list)) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java index f157990bb..7b7b7f3a3 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java @@ -108,12 +108,13 @@ public abstract class AbstractAcsTask { * */ public JSONObject immediateNotifyAcs(String task_id) { - List taskList = this.schedule(); - if (ObjectUtil.isNotEmpty(taskList)) { - JSONArray arr = JSONArray.parseArray(JSON.toJSONString(taskList)); - return AcsUtil.notifyAcs("api/wms/task", arr); - } + List taskList = this.schedule(); + if (ObjectUtil.isNotEmpty(taskList)) { + JSONArray arr = JSONArray.parseArray(JSON.toJSONString(taskList)); + return AcsUtil.notifyAcs("api/wms/task", arr); + } return null; + } /** From bee84574962492ae5d2a7b5bea408ca9e28ae742 Mon Sep 17 00:00:00 2001 From: gongbaoxiong <751575283@qq.com> Date: Tue, 18 Jun 2024 17:19:56 +0800 Subject: [PATCH 07/30] =?UTF-8?q?opt:=E5=8F=AA=E6=98=BE=E7=A4=BA=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E7=82=B9=E4=BD=8D=E7=9A=84=E5=AD=90=E5=8D=B7=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue b/lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue index 7313a8da2..8cae9799c 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue +++ b/lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue @@ -66,7 +66,7 @@ export default { url: 'api/Materialbase', idField: 'material_id', sort: 'material_id,desc', - query: { box: '木箱', material_id: '' }, + query: { box: '木箱', search: '木箱', material_id: '' }, crudMethod: { ...crudMaterattr } }) }, From 87dca36386ed67c76ae18de40769f11ce696a2fd Mon Sep 17 00:00:00 2001 From: gongbaoxiong <751575283@qq.com> Date: Tue, 18 Jun 2024 18:19:23 +0800 Subject: [PATCH 08/30] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../b_lms/sch/tasks/first_floor_area/DjqTask.java | 2 +- .../b_lms/sch/tasks/first_floor_area/GzqTask.java | 2 +- .../sch/tasks/first_floor_area/KzjhcwTask.java | 14 ++++++++------ .../sch/tasks/first_floor_area/MzhcwTask.java | 2 +- .../sch/tasks/first_floor_area/SendKzjTask.java | 2 +- .../sch/tasks/first_floor_area/SsxDjwTask.java | 2 +- .../sch/tasks/first_floor_area/ZxDjwTask.java | 2 +- .../b_lms/sch/tasks/first_floor_area/ZxqTask.java | 2 +- 8 files changed, 15 insertions(+), 13 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqTask.java index 25e5a07b2..40f370f94 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqTask.java @@ -184,7 +184,7 @@ public class DjqTask extends AbstractAcsTask { .is_send(isSend ? "1" : "0") .acs_task_type(StrUtil.isEmpty(form.getString("acs_task_type")) ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : form.getString("acs_task_type")) .task_status(StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")) - .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "B2" : form.getString("product_area")) + .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "BLK" : form.getString("product_area")) .build(); SchBaseTask task = new SchBaseTask(); BeanUtils.copyProperties(schBaseTaskVo, task); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java index 7f6dc17bf..930b9e5ef 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java @@ -169,7 +169,7 @@ public class GzqTask extends AbstractAcsTask { .is_send(isSend ? "1" : "0") .acs_task_type(StrUtil.isEmpty(form.getString("acs_task_type")) ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : form.getString("acs_task_type")) .task_status(StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")) - .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "B2" : form.getString("product_area")) + .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "BLK" : form.getString("product_area")) .build(); SchBaseTask task = new SchBaseTask(); BeanUtils.copyProperties(schBaseTaskVo, task); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/KzjhcwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/KzjhcwTask.java index 5741b0a73..db3c611fe 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/KzjhcwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/KzjhcwTask.java @@ -173,7 +173,7 @@ public class KzjhcwTask extends AbstractAcsTask { .is_send(isSend ? "1" : "0") .acs_task_type(StrUtil.isEmpty(form.getString("acs_task_type")) ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : form.getString("acs_task_type")) .task_status(StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")) - .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "B2" : form.getString("product_area")) + .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "BLK" : form.getString("product_area")) .build(); SchBaseTask task = new SchBaseTask(); BeanUtils.copyProperties(schBaseTaskVo, task); @@ -217,7 +217,7 @@ public class KzjhcwTask extends AbstractAcsTask { */ public void toKzjHcw1(String pointCode) { //存在空载具缓存位无空载具的点位 - List kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空"), "2",""); + List kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空"), "2", ""); String pointCode1 = null; JSONObject toKzjHcwTask = new JSONObject(); if (StringUtils.isNotBlank(pointCode)) { @@ -255,21 +255,23 @@ public class KzjhcwTask extends AbstractAcsTask { public void toKzjHcw(String pointCode) { //存在空载具缓存位无空载具的点位 - List kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空"), "2",""); + List kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空"), "2", ""); String pointCode1 = null; JSONObject toKzjHcwTask = new JSONObject(); if (StringUtils.isNotBlank(pointCode)) { pointCode1 = pointCode; } else { //查询装箱区有空载具 - List zxqPointList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), "1",""); + List zxqPointList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), "1", ""); //装箱区有空载具 if (CollectionUtils.isNotEmpty(zxqPointList)) { pointCode1 = zxqPointList.get(0).getPoint_code(); } else { //待检区有空载具 - List djqPointList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), "1",""); - pointCode1 = djqPointList.get(0).getPoint_code(); + List djqPointList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), "1", ""); + if (CollectionUtils.isNotEmpty(djqPointList)) { + pointCode1 = djqPointList.get(0).getPoint_code(); + } } } //去装箱区搬运空载具 diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java index ff459e99d..73f62fd36 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java @@ -327,7 +327,7 @@ public class MzhcwTask extends AbstractAcsTask { .is_send(isSend ? "1" : "0") .acs_task_type(StrUtil.isEmpty(form.getString("acs_task_type")) ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : form.getString("acs_task_type")) .task_status(StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")) - .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "B2" : form.getString("product_area")) + .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "BLK" : form.getString("product_area")) .build(); SchBaseTask task = new SchBaseTask(); BeanUtils.copyProperties(schBaseTaskVo, task); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendKzjTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendKzjTask.java index 7e17dc23f..1212b86aa 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendKzjTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendKzjTask.java @@ -146,7 +146,7 @@ public class SendKzjTask extends AbstractAcsTask { .is_send(isSend ? "1" : "0") .acs_task_type(StrUtil.isEmpty(form.getString("acs_task_type")) ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : form.getString("acs_task_type")) .task_status(StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")) - .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "B2" : form.getString("product_area")) + .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "BLK" : form.getString("product_area")) .build(); SchBaseTask task = new SchBaseTask(); BeanUtils.copyProperties(schBaseTaskVo, task); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java index de5b828e7..65eb95275 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java @@ -165,7 +165,7 @@ public class SsxDjwTask extends AbstractAcsTask { .is_send(isSend ? "1" : "0") .acs_task_type(StrUtil.isEmpty(form.getString("acs_task_type")) ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : form.getString("acs_task_type")) .task_status(StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")) - .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "B2" : form.getString("product_area")) + .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "BLK" : form.getString("product_area")) .build(); SchBaseTask task = new SchBaseTask(); BeanUtils.copyProperties(schBaseTaskVo, task); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java index 67c80e0b4..e829f8d1d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java @@ -196,7 +196,7 @@ public class ZxDjwTask extends AbstractAcsTask { .is_send(isSend ? "1" : "0") .acs_task_type(StrUtil.isEmpty(form.getString("acs_task_type")) ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : form.getString("acs_task_type")) .task_status(StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")) - .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "B2" : form.getString("product_area")) + .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "BLK" : form.getString("product_area")) .build(); SchBaseTask task = new SchBaseTask(); BeanUtils.copyProperties(schBaseTaskVo, task); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java index ed1bcfbd7..eac540018 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java @@ -270,7 +270,7 @@ public class ZxqTask extends AbstractAcsTask { .request_param(form.getString("request_param")) .acs_task_type(StrUtil.isEmpty(form.getString("acs_task_type")) ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : form.getString("acs_task_type")) .task_status(StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")) - .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "B2" : form.getString("product_area")) + .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "BLK" : form.getString("product_area")) .build(); SchBaseTask task = new SchBaseTask(); BeanUtils.copyProperties(schBaseTaskVo, task); From daa1a8a64e72a8653d28cc5137837fee0d4576cb Mon Sep 17 00:00:00 2001 From: gongbaoxiong <751575283@qq.com> Date: Tue, 18 Jun 2024 18:20:29 +0800 Subject: [PATCH 09/30] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtil.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtil.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtil.java index 60d2083a7..7b7bd1623 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtil.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtil.java @@ -50,8 +50,6 @@ public class AcsUtil { throw new BadRequestException("未查询到区域对应的acs地址!"); } String url =acs_url + api; - //String url ="10.1.3.96:8011/"+ api; - //String url ="10.21.1.196:8011/"+ api; try { JSONArray rows = new JSONArray(); rows.add(jo); From 810e8bb510a826021dc41407af3b6593f0966222 Mon Sep 17 00:00:00 2001 From: gongbaoxiong <751575283@qq.com> Date: Tue, 18 Jun 2024 20:53:13 +0800 Subject: [PATCH 10/30] =?UTF-8?q?add:=E5=A2=9E=E5=8A=A0=E5=AD=90=E5=8D=B7?= =?UTF-8?q?=E8=B4=A8=E6=A3=80=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pda/controller/VehicleTwoController.java | 16 +++++ .../PdmBiSubpackagerelationServiceImpl.java | 11 ++-- .../BstIvtPackageinfoivtController.java | 59 +++++++++++++++++++ .../service/IbstIvtPackageinfoivtService.java | 5 +- .../impl/BstIvtPackageinfoivtServiceImpl.java | 45 +++++++++----- .../sch/tasks/first_floor_area/MzhcwTask.java | 1 - .../acs/service/impl/AcsToWmsServiceImpl.java | 17 +++--- .../src/views/wms/pdm/sub/DivDialog.vue | 1 - .../src/views/wms/pdm/sub/MaterDialog.vue | 2 +- 9 files changed, 125 insertions(+), 32 deletions(-) create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/controller/BstIvtPackageinfoivtController.java diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/VehicleTwoController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/VehicleTwoController.java index 8ea7c4852..a22ba2469 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/VehicleTwoController.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/VehicleTwoController.java @@ -5,6 +5,7 @@ import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.nl.b_lms.pda.service.VehicleTwoService; +import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; import org.nl.modules.logging.annotation.Log; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -14,6 +15,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.annotation.Resource; + /** * @author liuxy * @date 2022-05-25 @@ -26,6 +29,10 @@ public class VehicleTwoController { @Autowired private VehicleTwoService vehicleTwoService; + @Resource + private IbstIvtPackageinfoivtService bstIvtPackageInfoIvtService; + + @PostMapping("/vehicleIn") @Log("入空载具") @SaIgnore @@ -53,4 +60,13 @@ public class VehicleTwoController { public ResponseEntity reback(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(vehicleTwoService.reback(whereJson), HttpStatus.OK); } + + + @PostMapping("/updatePackageInfo") + @Log("一楼待检区-管制区子卷质检") + @SaIgnore + public ResponseEntity updatePackageInfo(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(bstIvtPackageInfoIvtService.update(whereJson), HttpStatus.OK); + } + } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java index f4c885abc..131c91337 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java @@ -153,6 +153,9 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl queryContainerNameBySaleOrder(Map whereJson) { + if (!whereJson.containsKey("sale_order_name")) { + return null; + } List pdmBiSubpackagerelationList = pdmBiSubpackagerelationMapper.queryContainerNameBySaleOrder(whereJson.get("sale_order_name").toString()); Map countByGroup = pdmBiSubpackagerelationList.stream() .filter(item -> item.getBox_group() != null) @@ -386,9 +389,9 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl packagerelationList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class); List isOutBox = packagerelationList.stream().filter(r -> r.getStatus().equals("0")).collect(Collectors.toList()); - if (isOutBox.size() > 0) { - throw new BadRequestException("标记为黄色的子卷号已分配木箱,请重新选择未分配木箱的子卷"); - } + if (isOutBox.size() > 0) { + throw new BadRequestException("标记为黄色的子卷号已分配木箱,请重新选择未分配木箱的子卷"); + } JSONArray jsonArray = whereJson.getJSONArray("tableMater"); if (jsonArray == null || jsonArray.size() == 0) { throw new BadRequestException("无选中子卷信息"); @@ -441,7 +444,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl 装箱对接位,木箱码不能为空!"); } //更新子卷包装关系更新木箱号 - CompletableFuture.runAsync(() -> { + CompletableFuture.runAsync(() -> { try { updateBoxInfo(entityList, boxSn); } catch (Exception e) { diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/controller/BstIvtPackageinfoivtController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/controller/BstIvtPackageinfoivtController.java new file mode 100644 index 000000000..07e2471a9 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/controller/BstIvtPackageinfoivtController.java @@ -0,0 +1,59 @@ +package org.nl.b_lms.sch.point.controller; +import java.util.Set; +import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; +import org.springframework.web.bind.annotation.*; +import lombok.RequiredArgsConstructor; +import javax.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; + + +/** + * {@code @Description:} 装箱区点位库存表(BstIvtPackageinfoivt)控制层 + * {@code @Author:} gbx + * + * @since 2024-06-18 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/bstIvtPackageinfoivt") +@Slf4j +public class BstIvtPackageinfoivtController { + + + @Resource + private IbstIvtPackageinfoivtService bstIvtPackageinfoivtService; + + + /** + * 新增数据 + * + * @param params 实体对象 + * @return 新增结果 + */ + @PostMapping + public ResponseEntity create(@RequestBody BstIvtPackageinfoivt params) { + bstIvtPackageinfoivtService.create(params); + return new ResponseEntity<>(HttpStatus.OK); + } + + + + + /** + * 删除数据 + * + * @param ids 多个主键Id + * @return 删除结果 + */ + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + bstIvtPackageinfoivtService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + +} + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/IbstIvtPackageinfoivtService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/IbstIvtPackageinfoivtService.java index 7dcabe2df..6e962a804 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/IbstIvtPackageinfoivtService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/IbstIvtPackageinfoivtService.java @@ -1,5 +1,6 @@ package org.nl.b_lms.sch.point.service; +import com.alibaba.fastjson.JSONObject; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import com.baomidou.mybatisplus.extension.service.IService; @@ -54,9 +55,9 @@ public interface IbstIvtPackageinfoivtService extends IService().eq(BstIvtPackageinfoivt::getContainer_name, whereJson.getString("container_name"))); + if (dto == null) { + result.put("status", org.springframework.http.HttpStatus.BAD_REQUEST.value()); + result.put("message", "不存在该数据!"); + return result; + } + dto.setIvt_status(whereJson.getString("ivt_status")); + bstIvtPackageinfoivtMapper.updateById(getBasicInfo(dto, false)); + result.put("status", org.springframework.http.HttpStatus.OK.value()); + result.put("message", "检验成功!"); + return result; } @@ -170,14 +185,14 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl输送线)")); toSsxTask.put("vehicle_code", schBaseTask.getVehicle_code()); - //toSsxTask.put("vehicle_code", containerInfo.getContainer_name()); //判断空载具缓存位是否有空载具库存,有就叫桁架去任一位置搬空载具 if (CollectionUtils.isNotEmpty(kzjPointList)) { //直接创建搬运空载具任务 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index af64a785e..ba04ddea7 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -64,10 +64,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -1753,7 +1750,10 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { log.info("二楼到一楼,成品子卷到达一楼输送线,sendProductToFirstFloor--------------------------:" + whereJson.toString()); JSONObject result = new JSONObject(); if (StringUtils.isBlank(whereJson.getString("device_code")) || StringUtils.isBlank(whereJson.getString("material_barcode"))) { - throw new BadRequestException("接口sendProductToFirstFloor,任务号或子卷号参数为空!"); + throw new BadRequestException("接口sendProductToFirstFloor,目标站点或子卷号参数为空!"); + } + if (whereJson.getString("device_code").equals("null") || whereJson.getString("material_barcode").equals("null")) { + throw new BadRequestException("接口sendProductToFirstFloor,目标站点或子卷号参数为null!"); } RLock lock = redissonClient.getLock(whereJson.getString("material_barcode")); boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); @@ -1777,7 +1777,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { jo.put("point_code2", mzPointList.get(0).getPoint_code()); List kzjPointList = bstIvtPackageinfoivtList.stream() .filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位").equals(r.getPoint_status()) - && PackageInfoIvtEnum.IVT_STATUS.code("空载具").equals(r.getIvt_status())).collect(Collectors.toList()); + && PackageInfoIvtEnum.IVT_STATUS.code("空载具").equals(r.getIvt_status())) + .sorted(Comparator.comparing(BstIvtPackageinfoivt::getSort_seq).reversed()).collect(Collectors.toList()); //空载具缓存位有空载具 if (CollectionUtils.isNotEmpty(kzjPointList)) { jo.put("point_code3", kzjPointList.get(0).getPoint_code()); @@ -1794,6 +1795,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { .eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否"))); if (CollectionUtils.isEmpty(existTaskList)) { JSONObject jo1 = new JSONObject(); + //创建确定终点任务 jo1.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务")); jo1.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)")); jo1.put("point_code2", "NBJ1002"); @@ -1926,8 +1928,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { log.info("applyTwo返回参数:---------------------------------------------" + result.toString()); return result; } - } - finally { + } finally { if (tryLock) { lock.unlock(); } diff --git a/lms/nladmin-ui/src/views/wms/pdm/sub/DivDialog.vue b/lms/nladmin-ui/src/views/wms/pdm/sub/DivDialog.vue index 8c03808d8..06c1e9791 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/sub/DivDialog.vue +++ b/lms/nladmin-ui/src/views/wms/pdm/sub/DivDialog.vue @@ -46,7 +46,6 @@ -
diff --git a/lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue b/lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue index 8cae9799c..a39f5ea29 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue +++ b/lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue @@ -66,7 +66,7 @@ export default { url: 'api/Materialbase', idField: 'material_id', sort: 'material_id,desc', - query: { box: '木箱', search: '木箱', material_id: '' }, + query: { box: '木箱', search: 'MX', material_id: '' }, crudMethod: { ...crudMaterattr } }) }, From 5bb695619eb5e1cef81db62093f34e4808527aed Mon Sep 17 00:00:00 2001 From: liuxy Date: Wed, 19 Jun 2024 14:59:15 +0800 Subject: [PATCH 11/30] =?UTF-8?q?rev=EF=BC=9A=E5=8F=91=E8=B4=A7=E5=8C=BA?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../point/dao/mapper/SchBasePointMapper.xml | 4 +- .../util/impl/SendOutManageServiceImpl.java | 49 ++++++++----------- 2 files changed, 23 insertions(+), 30 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/SchBasePointMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/SchBasePointMapper.xml index 5457c2ae2..1d2286b20 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/SchBasePointMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/SchBasePointMapper.xml @@ -106,7 +106,7 @@ LEFT JOIN sch_base_point point2 ON point1.row_num = point2.row_num WHERE IFNULL( point2.vehicle_code, '' ) != '' - AND point2.out_order_seq > point1.out_order_seq + AND point1.out_order_seq > point2.out_order_seq AND point1.point_code= #{point_code} @@ -125,7 +125,7 @@ LEFT JOIN sch_base_point point2 ON point1.row_num = point2.row_num WHERE IFNULL( point2.vehicle_code, '' ) = '' - AND point2.out_order_seq > point1.out_order_seq + AND point1.out_order_seq > point2.out_order_seq AND point1.point_code= #{point_code} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/SendOutManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/SendOutManageServiceImpl.java index 99e8645dc..511e36ddc 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/SendOutManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/SendOutManageServiceImpl.java @@ -61,7 +61,6 @@ public class SendOutManageServiceImpl implements SendOutManageService { * 1)有相同订单号有空位的:相同订单号的放在一排 * 2)没有相同订单号的:新开一排 * 3)有相同订单号的但是没有空位:新开一排 - * 2.删除载具对应木箱记录 */ CutConveyorTask cutConveyorTask = new CutConveyorTask(); @@ -72,16 +71,14 @@ public class SendOutManageServiceImpl implements SendOutManageService { .eq(SchBasePoint::getIs_used, IOSEnum.IS_NOTANDYES.code("是")) .eq(SchBasePoint::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")) ); - // 1.查询此木箱号的子卷包装关系 - if(StringUtils.isEmpty(whereJson.getString("vehicle_code"))){ - throw new BadRequestException("木箱号不能为空!"); - } + //木箱号可能用逗号隔开 String vehicleCode = Arrays.asList(whereJson.getString("vehicle_code").split(",")).get(0); JSONObject jsonSub = subTab.query("package_box_sn = '" + vehicleCode + "'").uniqueResult(0); if (ObjectUtil.isEmpty(jsonSub)) { throw new BadRequestException("未查询到该木箱对应的包装关系!"); } + // 2.找相同订单号的所有排 jsonSub.put("region_id", RegionTypeEnum.TWO_FH01.getId()); List pointLikeOrder = schBasePointMapper.queryLikeOrderRow(jsonSub); @@ -99,7 +96,7 @@ public class SendOutManageServiceImpl implements SendOutManageService { ObjectUtil.isEmpty(row.getVehicle_code()) && row.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定")) ) - .sorted(Comparator.comparing(SchBasePoint::getOut_order_seq)) + .sorted(Comparator.comparing(SchBasePoint::getIn_order_seq)) .collect(Collectors.toList()); joArr.addAll(rowPointList); @@ -122,19 +119,17 @@ public class SendOutManageServiceImpl implements SendOutManageService { ObjectUtil.isEmpty(row.getVehicle_code()) && row.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定")) ) - .sorted(Comparator.comparing(SchBasePoint::getOut_order_seq)) + .sorted(Comparator.comparing(SchBasePoint::getIn_order_seq)) .collect(Collectors.toList()); - if (rowPointList.size() == 4) { - JSONObject jsonNewRow = JSONObject.parseObject(JSON.toJSONString(rowPointList.get(0))); + JSONObject jsonNewRow = JSONObject.parseObject(JSON.toJSONString(rowPointList.get(0))); - if (cutConveyorTask.isSingleTask(jsonNewRow.getString("point_code"))) { - continue; - } - - point_code = jsonNewRow.getString("point_code"); - break; + if (cutConveyorTask.isSingleTask(jsonNewRow.getString("point_code"))) { + continue; } + + point_code = jsonNewRow.getString("point_code"); + break; } } else { // 校验此货位是否被堵住:1.如果被堵住则判断下一个是否被堵住 2.如果全部被堵住则新开一排 @@ -178,19 +173,17 @@ public class SendOutManageServiceImpl implements SendOutManageService { ObjectUtil.isEmpty(row.getVehicle_code()) && row.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定")) ) - .sorted(Comparator.comparing(SchBasePoint::getOut_order_seq)) + .sorted(Comparator.comparing(SchBasePoint::getIn_order_seq)) .collect(Collectors.toList()); - if (rowPointList.size() == 4) { - JSONObject jsonNewRow = JSONObject.parseObject(JSON.toJSONString(rowPointList.get(0))); + JSONObject jsonNewRow = JSONObject.parseObject(JSON.toJSONString(rowPointList.get(0))); - if (cutConveyorTask.isSingleTask(jsonNewRow.getString("point_code"))) { - continue; - } - - point_code = jsonNewRow.getString("point_code"); - break; + if (cutConveyorTask.isSingleTask(jsonNewRow.getString("point_code"))) { + continue; } + + point_code = jsonNewRow.getString("point_code"); + break; } } @@ -200,8 +193,8 @@ public class SendOutManageServiceImpl implements SendOutManageService { //创建任务 JSONObject task_jo = new JSONObject(); task_jo.put("point_code1", whereJson.getString("device_code")); - task_jo.put("point_code2", "CK2023"); - task_jo.put("vehicle_code", whereJson.getString("vehicle_code")); + task_jo.put("point_code2", point_code); + task_jo.put("vehicle_code", vehicleCode); task_jo.put("task_type", "010708"); TwoSendOutTask taskBean = new TwoSendOutTask(); taskBean.createTask(task_jo); @@ -209,9 +202,9 @@ public class SendOutManageServiceImpl implements SendOutManageService { // 锁住点位 ischBasePointService.update( new UpdateWrapper().lambda() - .eq(SchBasePoint::getPoint_code, "CK2023") + .eq(SchBasePoint::getPoint_code, point_code) .set(SchBasePoint::getLock_type, IOSEnum.LOCK_TYPE.code("其它")) - .set(SchBasePoint::getVehicle_code, whereJson.getString("vehicle_code")) + .set(SchBasePoint::getVehicle_code, vehicleCode) ); // 删除载具对应木箱记录 From 3c2da9058f01e823d68d8ded808997b4500f33b2 Mon Sep 17 00:00:00 2001 From: liuxy Date: Thu, 20 Jun 2024 09:39:22 +0800 Subject: [PATCH 12/30] =?UTF-8?q?rev=EF=BC=9A=E5=8F=91=E8=B4=A7=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E4=BA=8C=E6=AC=A1=E5=88=86=E9=85=8D=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nl/b_lms/sch/tasks/TwoSendOutTask.java | 35 ++- .../storage_manage/ios/enums/IOSEnum.java | 3 + .../util/impl/SendOutManageServiceImpl.java | 259 ++++++++++++++++++ .../util/service/SendOutManageService.java | 18 ++ .../acs/service/impl/AcsToWmsServiceImpl.java | 31 ++- 5 files changed, 323 insertions(+), 23 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoSendOutTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoSendOutTask.java index 7b5d04e7e..c3c68b775 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoSendOutTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoSendOutTask.java @@ -39,6 +39,8 @@ public class TwoSendOutTask extends AbstractAcsTask { /* * 下发给ACS时需要特殊处理 */ + WQLObject taskTab = WQLObject.getWQLObject("sch_base_task"); + 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); ArrayList resultList = new ArrayList<>(); @@ -60,6 +62,11 @@ public class TwoSendOutTask extends AbstractAcsTask { .remark(json.getString("remark")) .build(); resultList.add(dto); + + // 更新任务为下发 + JSONObject paramMap = new JSONObject(); + paramMap.put("task_status", TaskStatusEnum.ISSUE.getCode()); + taskTab.update(paramMap, "task_id ='" + json.getString("task_id") + "'"); } return resultList; } @@ -79,7 +86,16 @@ public class TwoSendOutTask extends AbstractAcsTask { jsonTask.put("update_time", DateUtil.now()); taskTab.update(jsonTask); - JSONObject jsonPoint2 = pointTab.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0); + JSONObject jsonPoint2; + + if (ObjectUtil.isNotEmpty(jsonTask.getString("point_code4"))) { + // 第一次申请取消 + jsonPoint2 = pointTab.query("point_code = '" + jsonTask.getString("point_code4") + "'").uniqueResult(0); + } else { + // 第二次申请取消 + jsonPoint2 = pointTab.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0); + } + jsonPoint2.put("lock_type", IOSEnum.LOCK_TYPE.code("未锁定")); jsonPoint2.put("vehicle_code", ""); pointTab.update(jsonPoint2); @@ -102,11 +118,13 @@ public class TwoSendOutTask extends AbstractAcsTask { jsonTask.put("update_time", DateUtil.now()); taskTab.update(jsonTask); - // 更新暂存区点位状态 - JSONObject jsonPoint2 = WQLObject.getWQLObject("sch_base_point").query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0); - jsonPoint2.put("lock_type", IOSEnum.LOCK_TYPE.code("未锁定")); - jsonPoint2.put("vehicle_code", jsonTask.getString("vehicle_code")); - pointTab.update(jsonPoint2); + if (ObjectUtil.isEmpty(jsonTask.getString("point_code4"))) { + // 第二次申请任务完成 - 更新点位状态 + JSONObject jsonPoint2 = WQLObject.getWQLObject("sch_base_point").query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0); + jsonPoint2.put("lock_type", IOSEnum.LOCK_TYPE.code("未锁定")); + jsonPoint2.put("vehicle_code", jsonTask.getString("vehicle_code")); + pointTab.update(jsonPoint2); + } } } @@ -126,10 +144,6 @@ public class TwoSendOutTask extends AbstractAcsTask { WQLObject tab = WQLObject.getWQLObject("SCH_BASE_Task"); CutConveyorTask cutConveyorTask = new CutConveyorTask(); - String point_code2 = form.getString("point_code2"); - if (cutConveyorTask.isSingleTask(point_code2)) { - throw new BadRequestException("点位:" + point_code2 + "存在未完成的任务!"); - } JSONObject json = new JSONObject(); json.put("task_id", IdUtil.getSnowflake(1, 1).nextId()); json.put("task_code", IdUtil.getSnowflake(1, 1).nextId()); @@ -138,6 +152,7 @@ public class TwoSendOutTask extends AbstractAcsTask { json.put("point_code1", form.getString("point_code1")); json.put("route_plan_code", getRoutePlanCode(json.getString("point_code1"))); json.put("point_code2", form.getString("point_code2")); + json.put("point_code4", form.getString("point_code4")); json.put("vehicle_code", form.getString("vehicle_code")); json.put("handle_class", THIS_CLASS); json.put("create_id", SecurityUtils.getCurrentUserId()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/enums/IOSEnum.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/enums/IOSEnum.java index c124c041b..0cfd0678a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/enums/IOSEnum.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/enums/IOSEnum.java @@ -103,6 +103,9 @@ public enum IOSEnum { OUT_POINT(MapOf.of("1","CK2038", "2","CK2038", "3","CK2042", "4","CK2042" ,"5","CK2046", "6","CK2046", "7","7", "8","8", "9","9", "10","10")), + // 出库发货等待点 + OUT_FH_POINT(MapOf.of("1","B_FH_01_0", "2","B_FH_02_0", "3","B_FH_03_0", "4","B_FH_04_0" ,"5","B_FH_05_0", + "6","B_FH_06_0")), // 行架点位 OUT_HANGER(MapOf.of("行架位1", "CK2013","行架位2", "CK2017")), diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/SendOutManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/SendOutManageServiceImpl.java index 511e36ddc..4f9e688ef 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/SendOutManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/SendOutManageServiceImpl.java @@ -210,4 +210,263 @@ public class SendOutManageServiceImpl implements SendOutManageService { // 删除载具对应木箱记录 //extTab.delete(jsonExt); } + + @Override + public void createSendOutTaskOne(JSONObject whereJson) { + // 子卷包装关系表 + WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation"); + // 载具扩展属性表 + WQLObject extTab = WQLObject.getWQLObject("md_pb_storagevehicleext"); + /* + * 1.找相同订单号的木箱 + * 1)有相同订单号有空位的:相同订单号的放在一排 + * 2)没有相同订单号的:新开一排 + * 3)有相同订单号的但是没有空位:新开一排 + */ + CutConveyorTask cutConveyorTask = new CutConveyorTask(); + + // 所有发货区点位 + List pointDaoList = ischBasePointService.list( + new QueryWrapper().lambda() + .eq(SchBasePoint::getRegion_id, RegionTypeEnum.TWO_FH01.getId()) + .eq(SchBasePoint::getIs_used, IOSEnum.IS_NOTANDYES.code("是")) + .eq(SchBasePoint::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")) + ); + + //木箱号可能用逗号隔开 + String vehicleCode = Arrays.asList(whereJson.getString("vehicle_code").split(",")).get(0); + JSONObject jsonSub = subTab.query("package_box_sn = '" + vehicleCode + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonSub)) { + throw new BadRequestException("未查询到该木箱对应的包装关系!"); + } + + // 2.找相同订单号的所有排 + jsonSub.put("region_id", RegionTypeEnum.TWO_FH01.getId()); + List pointLikeOrder = schBasePointMapper.queryLikeOrderRow(jsonSub); + + // 3.找相同订单号的所在排的所有空位 + String point_code = ""; + List joArr = new ArrayList<>(); + + for (int i = 0; i < pointLikeOrder.size(); i++) { + JSONObject json = pointLikeOrder.get(i); + + // 过滤此排的空位 + List rowPointList = pointDaoList.stream() + .filter(row -> row.getRow_num().toString().equals(json.getString("row_num")) && + ObjectUtil.isEmpty(row.getVehicle_code()) && + row.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定")) + ) + .sorted(Comparator.comparing(SchBasePoint::getIn_order_seq)) + .collect(Collectors.toList()); + + joArr.addAll(rowPointList); + } + + if (ObjectUtil.isEmpty(joArr)) { + //查询新的一排 + List newRowPointList = schBasePointMapper.queryNewRow(jsonSub); + + if (ObjectUtil.isEmpty(newRowPointList)) { + throw new BadRequestException("未查询到相同销售订单的放货区点位或空的一排!"); + } + + for (int i = 0; i < newRowPointList.size(); i++) { + JSONObject json = newRowPointList.get(i); + + // 找出这一排的所有空位 + List rowPointList = pointDaoList.stream() + .filter(row -> row.getRow_num().toString().equals(json.getString("row_num")) && + ObjectUtil.isEmpty(row.getVehicle_code()) && + row.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定")) + ) + .sorted(Comparator.comparing(SchBasePoint::getIn_order_seq)) + .collect(Collectors.toList()); + + JSONObject jsonNewRow = JSONObject.parseObject(JSON.toJSONString(rowPointList.get(0))); + + if (cutConveyorTask.isSingleTask(jsonNewRow.getString("point_code"))) { + continue; + } + + point_code = jsonNewRow.getString("point_code"); + break; + } + } else { + // 校验此货位是否被堵住:1.如果被堵住则判断下一个是否被堵住 2.如果全部被堵住则新开一排 + for (int i = 0; i < joArr.size(); i++) { + JSONObject json = JSONObject.parseObject(JSON.toJSONString(joArr.get(i))); + + // 判断是否被挡住 + JSONObject paramJson = new JSONObject(); + paramJson.put("point_code", json.getString("point_code")); + paramJson.put("region_id", RegionTypeEnum.TWO_FH01.getId()); + List isBlock = schBasePointMapper.isBlock(paramJson); + + if (ObjectUtil.isNotEmpty(isBlock)) { + // 堵住则判断下一个 + continue; + } else { + if (cutConveyorTask.isSingleTask(json.getString("point_code"))) { + continue; + } + // 未堵住: 跳出循环 + point_code = json.getString("point_code"); + break; + } + } + } + + if (ObjectUtil.isEmpty(point_code)) { + //查询新的一排 + List newRowPointList = schBasePointMapper.queryNewRow(jsonSub); + + if (ObjectUtil.isEmpty(newRowPointList)) { + throw new BadRequestException("未查询到相同销售订单的放货区点位或空的一排!"); + } + + for (int i = 0; i < newRowPointList.size(); i++) { + JSONObject json = newRowPointList.get(i); + + // 找出这一排的所有空位 + List rowPointList = pointDaoList.stream() + .filter(row -> row.getRow_num().toString().equals(json.getString("row_num")) && + ObjectUtil.isEmpty(row.getVehicle_code()) && + row.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定")) + ) + .sorted(Comparator.comparing(SchBasePoint::getIn_order_seq)) + .collect(Collectors.toList()); + + JSONObject jsonNewRow = JSONObject.parseObject(JSON.toJSONString(rowPointList.get(0))); + + if (cutConveyorTask.isSingleTask(jsonNewRow.getString("point_code"))) { + continue; + } + + point_code = jsonNewRow.getString("point_code"); + break; + } + } + + if (ObjectUtil.isEmpty(point_code)) { + throw new BadRequestException("未查询到相同销售订单的放货区点位或空的一排!"); + } + + //创建任务 + JSONObject task_jo = new JSONObject(); + task_jo.put("point_code1", whereJson.getString("device_code")); + // 根据此排找到对应的等待点 + String finalPoint_code = point_code; + SchBasePoint schBasePoint = pointDaoList.stream() + .filter(row -> row.getPoint_code().equals(finalPoint_code)) + .findFirst().orElse(null); + String code = IOSEnum.OUT_FH_POINT.code(schBasePoint.getRow_num().toString()); + + task_jo.put("point_code2", code); + task_jo.put("point_code4", point_code); + task_jo.put("vehicle_code", vehicleCode); + task_jo.put("task_type", "010708"); + TwoSendOutTask taskBean = new TwoSendOutTask(); + taskBean.createTask(task_jo); + + // 锁住点位 + ischBasePointService.update( + new UpdateWrapper().lambda() + .eq(SchBasePoint::getPoint_code, point_code) + .set(SchBasePoint::getLock_type, IOSEnum.LOCK_TYPE.code("其它")) + ); + + } + + @Override + public void createSendOutTaskTwo(JSONObject whereJson) { + WQLObject taskTab = WQLObject.getWQLObject("sch_base_task"); + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + + // 根据任务号找到第一次申请时的任务 + JSONObject taskJson = taskTab.query("task_code = '" + whereJson.getString("task_code") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(taskJson)) { + throw new BadRequestException("任务号为:"+ whereJson.getString("task_code")+ "的任务不存在!"); + } + + String point_code4 = ""; + + // 判断当前点位是否被堵住 + JSONObject paramJson = new JSONObject(); + paramJson.put("point_code", taskJson.getString("point_code4")); + paramJson.put("region_id", RegionTypeEnum.TWO_FH01.getId()); + List isBlock = schBasePointMapper.isBlock(paramJson); + + if (ObjectUtil.isNotEmpty(isBlock)) { + // 堵住: 找这一排的的空位 + // 所有发货区点位 + List pointDaoList = ischBasePointService.list( + new QueryWrapper().lambda() + .eq(SchBasePoint::getRegion_id, RegionTypeEnum.TWO_FH01.getId()) + .eq(SchBasePoint::getIs_used, IOSEnum.IS_NOTANDYES.code("是")) + .eq(SchBasePoint::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")) + ); + + SchBasePoint pointDao = pointDaoList.stream() + .filter(row -> row.getPoint_code().equals(taskJson.getString("point_code4"))) + .findFirst().orElse(null); + + // 找出这一排所有空位 + List rowPointList = pointDaoList.stream() + .filter(row -> row.getRow_num().toString().equals(pointDao.getRow_num().toString()) && + ObjectUtil.isEmpty(row.getVehicle_code()) && + row.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定")) + ) + .sorted(Comparator.comparing(SchBasePoint::getIn_order_seq)) + .collect(Collectors.toList()); + + // 判断是否被堵住 + for (int i = 0; i < rowPointList.size(); i++) { + SchBasePoint json = rowPointList.get(i); + + JSONObject paramJson2 = new JSONObject(); + paramJson2.put("point_code", json.getPoint_code()); + paramJson2.put("region_id", RegionTypeEnum.TWO_FH01.getId()); + List isBlock2 = schBasePointMapper.isBlock(paramJson2); + + if (ObjectUtil.isNotEmpty(isBlock2)) { + continue; + } else { + JSONObject jsonNewRow = JSONObject.parseObject(JSON.toJSONString(rowPointList.get(0))); + point_code4 = jsonNewRow.getString("point_code"); + break; + } + } + + // 更新原仓位 + JSONObject jsonUpdate = new JSONObject(); + jsonUpdate.put("lock_type", IOSEnum.LOCK_TYPE.code("未锁定")); + pointTab.update(jsonUpdate,"point_code = '"+taskJson.getString("point_code4")+"'"); + + if (ObjectUtil.isEmpty(point_code4)) { + // 如果没有找到此排空位 则重新下发到别的排 + JSONObject param = new JSONObject(); + param.put("device_code", taskJson.getString("point_code2")); + param.put("vehicle_code", taskJson.getString("vehicle_code")); + createSendOutTaskOne(param); + return; + } else { + // 更新现仓位 + jsonUpdate.put("lock_type", IOSEnum.LOCK_TYPE.code("其它")); + pointTab.update(jsonUpdate,"point_code = '"+point_code4+"'"); + } + + } else { + point_code4 = taskJson.getString("point_code4"); + } + + //创建任务 + JSONObject task_jo = new JSONObject(); + task_jo.put("point_code1", taskJson.getString("point_code2")); + task_jo.put("point_code2", point_code4); + task_jo.put("vehicle_code", taskJson.getString("vehicle_code")); + task_jo.put("task_type", "010721"); + TwoSendOutTask taskBean = new TwoSendOutTask(); + taskBean.createTask(task_jo); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/SendOutManageService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/SendOutManageService.java index deba0362c..1859463dc 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/SendOutManageService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/SendOutManageService.java @@ -21,4 +21,22 @@ public interface SendOutManageService { */ void createSendOutTask(JSONObject whereJson); + /** + * 创建发货任务 - 到等待点 + * @param whereJson { + * device_code:起点 + * vehicle_code: 载具号 + * } + */ + void createSendOutTaskOne(JSONObject whereJson); + + + /** + * 创建发货任务 等待点 - 具体点位 + * @param whereJson { + * task_code:任务号(第一次申请时下发的任务号) + * } + */ + void createSendOutTaskTwo(JSONObject whereJson); + } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index ba04ddea7..c92b3b827 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -1943,21 +1943,26 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { @Transactional(rollbackFor = Exception.class) public JSONObject applySendOutTwo(JSONObject whereJson) { log.info("applySendOutTwo输入参数:---------------------------------------------" + whereJson.toString()); - - // 校验 - if (ObjectUtil.isEmpty(whereJson.getString("device_code"))) { - throw new BadRequestException("设备号不能为空!"); - } - - if (ObjectUtil.isEmpty(whereJson.getString("vehicle_code"))) { - throw new BadRequestException("载具号不能为空!"); - } - JSONObject result = new JSONObject(); - try { - // 调用服务 - sendOutManageService.createSendOutTask(whereJson); + try{ + // 校验是否是二次分配 + if (ObjectUtil.isEmpty(whereJson.getString("task_code"))) { + // 第一次申请 + if (ObjectUtil.isEmpty(whereJson.getString("device_code"))) { + throw new BadRequestException("设备号不能为空!"); + } + + if (ObjectUtil.isEmpty(whereJson.getString("vehicle_code"))) { + throw new BadRequestException("载具号不能为空!"); + } + + // 调用服务 + sendOutManageService.createSendOutTaskOne(whereJson); + } else { + // 第二次申请 + sendOutManageService.createSendOutTaskTwo(whereJson); + } result.put("status", HttpStatus.OK.value()); result.put("message", "下发成功!"); return result; From d04e6261310b51cc7a29f80aa6f087c67f7bc611 Mon Sep 17 00:00:00 2001 From: liuxy Date: Thu, 20 Jun 2024 10:57:11 +0800 Subject: [PATCH 13/30] =?UTF-8?q?rev:=E5=8F=91=E8=B4=A7=E5=8C=BA=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../util/impl/SendOutManageServiceImpl.java | 107 ++++++++---------- 1 file changed, 48 insertions(+), 59 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/SendOutManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/SendOutManageServiceImpl.java index 4f9e688ef..72e17f939 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/SendOutManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/SendOutManageServiceImpl.java @@ -384,80 +384,69 @@ public class SendOutManageServiceImpl implements SendOutManageService { WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 根据任务号找到第一次申请时的任务 - JSONObject taskJson = taskTab.query("task_code = '" + whereJson.getString("task_code") + "'").uniqueResult(0); + JSONObject taskJson = taskTab.query("task_code = '" + whereJson.getString("task_code") + "' AND is_delete = '0'").uniqueResult(0); if (ObjectUtil.isEmpty(taskJson)) { throw new BadRequestException("任务号为:"+ whereJson.getString("task_code")+ "的任务不存在!"); } String point_code4 = ""; - // 判断当前点位是否被堵住 - JSONObject paramJson = new JSONObject(); - paramJson.put("point_code", taskJson.getString("point_code4")); - paramJson.put("region_id", RegionTypeEnum.TWO_FH01.getId()); - List isBlock = schBasePointMapper.isBlock(paramJson); + // 所有发货区点位 + List pointDaoList = ischBasePointService.list( + new QueryWrapper().lambda() + .eq(SchBasePoint::getRegion_id, RegionTypeEnum.TWO_FH01.getId()) + .eq(SchBasePoint::getIs_used, IOSEnum.IS_NOTANDYES.code("是")) + .eq(SchBasePoint::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")) + ); - if (ObjectUtil.isNotEmpty(isBlock)) { - // 堵住: 找这一排的的空位 - // 所有发货区点位 - List pointDaoList = ischBasePointService.list( - new QueryWrapper().lambda() - .eq(SchBasePoint::getRegion_id, RegionTypeEnum.TWO_FH01.getId()) - .eq(SchBasePoint::getIs_used, IOSEnum.IS_NOTANDYES.code("是")) - .eq(SchBasePoint::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")) - ); + SchBasePoint pointDao = pointDaoList.stream() + .filter(row -> row.getPoint_code().equals(taskJson.getString("point_code4"))) + .findFirst().orElse(null); - SchBasePoint pointDao = pointDaoList.stream() - .filter(row -> row.getPoint_code().equals(taskJson.getString("point_code4"))) - .findFirst().orElse(null); + // 找出这一排所有空位 + List rowPointList = pointDaoList.stream() + .filter(row -> row.getRow_num().toString().equals(pointDao.getRow_num().toString()) && + ObjectUtil.isEmpty(row.getVehicle_code()) + ) + .sorted(Comparator.comparing(SchBasePoint::getIn_order_seq)) + .collect(Collectors.toList()); - // 找出这一排所有空位 - List rowPointList = pointDaoList.stream() - .filter(row -> row.getRow_num().toString().equals(pointDao.getRow_num().toString()) && - ObjectUtil.isEmpty(row.getVehicle_code()) && - row.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定")) - ) - .sorted(Comparator.comparing(SchBasePoint::getIn_order_seq)) - .collect(Collectors.toList()); + // 判断是否被堵住 + for (int i = 0; i < rowPointList.size(); i++) { + SchBasePoint json = rowPointList.get(i); - // 判断是否被堵住 - for (int i = 0; i < rowPointList.size(); i++) { - SchBasePoint json = rowPointList.get(i); + JSONObject paramJson2 = new JSONObject(); + paramJson2.put("point_code", json.getPoint_code()); + paramJson2.put("region_id", RegionTypeEnum.TWO_FH01.getId()); + List isBlock2 = schBasePointMapper.isBlock(paramJson2); - JSONObject paramJson2 = new JSONObject(); - paramJson2.put("point_code", json.getPoint_code()); - paramJson2.put("region_id", RegionTypeEnum.TWO_FH01.getId()); - List isBlock2 = schBasePointMapper.isBlock(paramJson2); + if (ObjectUtil.isNotEmpty(isBlock2)) { + continue; - if (ObjectUtil.isNotEmpty(isBlock2)) { - continue; - } else { - JSONObject jsonNewRow = JSONObject.parseObject(JSON.toJSONString(rowPointList.get(0))); - point_code4 = jsonNewRow.getString("point_code"); - break; - } - } - - // 更新原仓位 - JSONObject jsonUpdate = new JSONObject(); - jsonUpdate.put("lock_type", IOSEnum.LOCK_TYPE.code("未锁定")); - pointTab.update(jsonUpdate,"point_code = '"+taskJson.getString("point_code4")+"'"); - - if (ObjectUtil.isEmpty(point_code4)) { - // 如果没有找到此排空位 则重新下发到别的排 - JSONObject param = new JSONObject(); - param.put("device_code", taskJson.getString("point_code2")); - param.put("vehicle_code", taskJson.getString("vehicle_code")); - createSendOutTaskOne(param); - return; } else { - // 更新现仓位 - jsonUpdate.put("lock_type", IOSEnum.LOCK_TYPE.code("其它")); - pointTab.update(jsonUpdate,"point_code = '"+point_code4+"'"); + JSONObject jsonNewRow = JSONObject.parseObject(JSON.toJSONString(json)); + point_code4 = jsonNewRow.getString("point_code"); + break; } + } - } else { - point_code4 = taskJson.getString("point_code4"); + if (ObjectUtil.isEmpty(point_code4)) { + throw new BadRequestException("此排没有空位!"+pointDao.getRow_num()); + } + + // 判断货位是否是第一次申请的货位 + if (!point_code4.equals(taskJson.getString("point_code4"))) { + // 更新现仓位 + JSONObject jsonUpdate = new JSONObject(); + jsonUpdate.put("lock_type", IOSEnum.LOCK_TYPE.code("其它")); + pointTab.update(jsonUpdate,"point_code = '"+point_code4+"'"); + + // 判断此货位是否是最后一个入库的货位 如果是就解锁: 5 / 9 + if ("5,9".contains(pointDao.getIn_order_seq().toString())) { + // 更新原仓位 + jsonUpdate.put("lock_type", IOSEnum.LOCK_TYPE.code("未锁定")); + pointTab.update(jsonUpdate,"point_code = '"+taskJson.getString("point_code4")+"'"); + } } //创建任务 From cbfec25a9fe1ef56f0a19ebc173718e8346986bc Mon Sep 17 00:00:00 2001 From: liuxy Date: Fri, 21 Jun 2024 10:23:38 +0800 Subject: [PATCH 14/30] =?UTF-8?q?rev=EF=BC=9A=E5=8F=91=E8=B4=A7=E5=8C=BA?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../util/impl/SendOutManageServiceImpl.java | 18 +++++++++--------- .../util/service/SendOutManageService.java | 3 ++- .../acs/service/impl/AcsToWmsServiceImpl.java | 3 ++- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/SendOutManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/SendOutManageServiceImpl.java index 72e17f939..374c11db4 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/SendOutManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/SendOutManageServiceImpl.java @@ -379,7 +379,7 @@ public class SendOutManageServiceImpl implements SendOutManageService { } @Override - public void createSendOutTaskTwo(JSONObject whereJson) { + public String createSendOutTaskTwo(JSONObject whereJson) { WQLObject taskTab = WQLObject.getWQLObject("sch_base_task"); WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); @@ -449,13 +449,13 @@ public class SendOutManageServiceImpl implements SendOutManageService { } } - //创建任务 - JSONObject task_jo = new JSONObject(); - task_jo.put("point_code1", taskJson.getString("point_code2")); - task_jo.put("point_code2", point_code4); - task_jo.put("vehicle_code", taskJson.getString("vehicle_code")); - task_jo.put("task_type", "010721"); - TwoSendOutTask taskBean = new TwoSendOutTask(); - taskBean.createTask(task_jo); + // 更新当前点位终点 + taskJson.put("point_code2", point_code4); + taskJson.put("point_code4", ""); + taskTab.update(taskJson); + + // 返回点位 + return point_code4; + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/SendOutManageService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/SendOutManageService.java index 1859463dc..e9dbe2856 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/SendOutManageService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/SendOutManageService.java @@ -36,7 +36,8 @@ public interface SendOutManageService { * @param whereJson { * task_code:任务号(第一次申请时下发的任务号) * } + * @return 新点位 */ - void createSendOutTaskTwo(JSONObject whereJson); + String createSendOutTaskTwo(JSONObject whereJson); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index c92b3b827..3cd8b75d5 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -1961,7 +1961,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { sendOutManageService.createSendOutTaskOne(whereJson); } else { // 第二次申请 - sendOutManageService.createSendOutTaskTwo(whereJson); + String point_code = sendOutManageService.createSendOutTaskTwo(whereJson); + result.put("data", point_code); } result.put("status", HttpStatus.OK.value()); result.put("message", "下发成功!"); From d95ecd0405d40d2a2da6eee39615e5c7122bc60b Mon Sep 17 00:00:00 2001 From: zhouz <> Date: Fri, 21 Jun 2024 11:01:02 +0800 Subject: [PATCH 15/30] =?UTF-8?q?fix:=E5=87=BA=E5=85=A5=E5=BA=93=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/nl/b_lms/sch/tasks/TwoInEmpTask.java | 1 - .../org/nl/b_lms/sch/tasks/TwoLashTask.java | 50 ++++++++++++------- .../nl/b_lms/sch/tasks/TwoMoveBoxTask.java | 3 ++ .../util/impl/OutBoxManageServiceImpl.java | 2 + .../impl/StoragevehicleinfoServiceImpl.java | 7 ++- .../wms/ext/mes/rest/BLmsToMesController.java | 40 +++++++++++++++ .../wms/ext/mes/service/LmsToMesService.java | 6 +++ .../mes/service/impl/LmsToMesServiceImpl.java | 48 ++++++++++++++++++ 8 files changed, 136 insertions(+), 21 deletions(-) create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/BLmsToMesController.java diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoInEmpTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoInEmpTask.java index 659b3717f..9f6c8e5d6 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoInEmpTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoInEmpTask.java @@ -99,7 +99,6 @@ public class TwoInEmpTask extends AbstractAcsTask { JSONObject jsonAttr = attrTab.query("struct_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0); jsonAttr.put("lock_type",IOSEnum.LOCK_TYPE.code("未锁定")); jsonAttr.put("storagevehicle_code",jsonTask.getString("vehicle_code")); - jsonAttr.put("storagevehicle_type",jsonTask.getString("vehicle_type")); jsonAttr.put("is_emptyvehicle",IOSEnum.IS_NOTANDYES.code("是")); attrTab.update(jsonAttr); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoLashTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoLashTask.java index 43f1abfb5..6fa312241 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoLashTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoLashTask.java @@ -23,6 +23,8 @@ import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.ext.acs.service.WmsToAcsService; import org.nl.wms.sch.AcsTaskDto; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; @@ -85,13 +87,13 @@ public class TwoLashTask extends AbstractAcsTask { } JSONObject interaction_json = new JSONObject(); - interaction_json.put("isLeave",json.getString("is_auto_issue")); - interaction_json.put("length",dao.get(0).getBox_length()); - interaction_json.put("weight",dao.get(0).getBox_width()); - interaction_json.put("height",dao.get(0).getBox_high()); - interaction_json.put("template",dao.get(0).getLash_num()); + interaction_json.put("isLeave", json.getString("is_auto_issue")); + interaction_json.put("length", dao.get(0).getBox_length()); + interaction_json.put("weight", dao.get(0).getBox_width()); + interaction_json.put("height", dao.get(0).getBox_high()); + interaction_json.put("template", dao.get(0).getLash_num()); //第二次捆扎次数 - interaction_json.put("bindingTimes","3"); + interaction_json.put("bindingTimes", "3"); interaction_json.put("isBinding", IOSEnum.IS_SEND.code("是")); char dtl_type = json.getString("task_type").charAt(json.getString("task_type").length() - 1); AcsTaskDto dto = AcsTaskDto.builder() @@ -121,6 +123,7 @@ public class TwoLashTask extends AbstractAcsTask { @Override @Transactional(rollbackFor = Exception.class) public void updateTaskStatus(JSONObject taskObj, String status) { + JSONObject task_jo = WQLObject.getWQLObject("sch_base_task").query("task_code = '"+taskObj.getString("task_code")+"'").uniqueResult(0); // 点位表 WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 木箱绑定表 @@ -140,19 +143,28 @@ public class TwoLashTask extends AbstractAcsTask { // 完成 if (status.equals(TaskStatusEnum.FINISHED.getCode())) { - // 判断当前任务组的所有任务是否都为完成:如果都为完成则 调用acs接口允许此木箱离开 - JSONObject groupTask = WQLObject.getWQLObject("sch_base_task").query("task_group_id = '" + taskObj.getString("task_group_id") + "' and is_delete = '0' and task_status <> 07 and task_id <> '"+taskObj.getString("task_id")+"'") + JSONObject groupTask = WQLObject.getWQLObject("sch_base_task").query("task_group_id = '" + task_jo.getString("task_group_id") + "' and is_delete = '0' and task_status <> 07 and task_id <> '" + taskObj.getString("task_id") + "'") .uniqueResult(0); if (ObjectUtil.isEmpty(groupTask)) { - // 更新点位载具、数量 - JSONObject pointDao = pointTab.query("point_code = '" + taskObj.getString("point_code2") + "'").uniqueResult(0); - pointDao.put("vehicle_code", ""); - pointDao.put("vehicle_qty",0); - WQLObject.getWQLObject("sch_base_point").update(pointDao); - // TODO 调用acs接口告诉此木箱可以离开 + //给捆扎点下发强制放行 + WmsToAcsService wmsToAcsService = SpringContextHolder.getBean(WmsToAcsService.class); + JSONArray action_rows = new JSONArray(); + JSONObject action_jo = new JSONObject(); + action_jo.put("device_code", task_jo.getString("point_code2")); + action_jo.put("code", "to_command"); + action_jo.put("product_area", "BLK"); + action_jo.put("value", "26"); + action_rows.add(action_jo); + wmsToAcsService.action(action_rows); + + // 更新点位载具、数量 + JSONObject pointDao = pointTab.query("point_code = '" + task_jo.getString("point_code2") + "'").uniqueResult(0); + pointDao.put("vehicle_code", ""); + pointDao.put("vehicle_qty", 0); + WQLObject.getWQLObject("sch_base_point").update(pointDao); } @@ -170,26 +182,26 @@ public class TwoLashTask extends AbstractAcsTask { map.put("is_delete", IOSEnum.IS_NOTANDYES.code("是")); // 减去终点点位载具数量 - JSONObject pointDao = pointTab.query("point_code = '" + taskObj.getString("point_code2") + "'").uniqueResult(0); + JSONObject pointDao = pointTab.query("point_code = '" + task_jo.getString("point_code2") + "'").uniqueResult(0); - pointDao.put("vehicle_qty", NumberUtil.sub(pointDao.getIntValue("vehicle_qty"),1)); + pointDao.put("vehicle_qty", NumberUtil.sub(pointDao.getIntValue("vehicle_qty"), 1)); if (pointDao.getIntValue("vehicle_qty") <= 0) { // 清空载具号 pointDao.put("vehicle_code", ""); - pointDao.put("vehicle_qty",0); + pointDao.put("vehicle_qty", 0); } pointTab.update(pointDao); // 删除木箱绑定数据 - boxTab.delete("box_no = '"+taskObj.getString("vehicle_code")+"'"); + boxTab.delete("box_no = '" + task_jo.getString("vehicle_code") + "'"); } map.put("update_optid", SecurityUtils.getCurrentUserId()); map.put("update_optname", SecurityUtils.getCurrentNickName()); map.put("update_time", DateUtil.now()); - WQLObject.getWQLObject("SCH_BASE_Task").update(map, "task_id = '" + taskObj.getString("task_id") + "'"); + WQLObject.getWQLObject("SCH_BASE_Task").update(map, "task_id = '" + task_jo.getString("task_id") + "'"); } @Override diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoMoveBoxTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoMoveBoxTask.java index 1f695df2b..809c20814 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoMoveBoxTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoMoveBoxTask.java @@ -17,6 +17,8 @@ import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; +import static org.nl.wms.util.TaskUtil.getRoutePlanCode; + /** * 二期空木箱移库任务类 * Created by Lxy on 2024/1/19. @@ -46,6 +48,7 @@ public class TwoMoveBoxTask extends AbstractAcsTask { .task_type(json.getString("acs_task_type")) .start_device_code(json.getString("point_code1")) .next_device_code(json.getString("point_code2")) + .route_plan_code(getRoutePlanCode(json.getString("point_code2"))) .vehicle_code(json.getString("vehicle_code")) .priority(json.getString("priority")) .class_type(json.getString("task_type")) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBoxManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBoxManageServiceImpl.java index 1b840b546..d73c03dc0 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBoxManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBoxManageServiceImpl.java @@ -538,6 +538,8 @@ public class OutBoxManageServiceImpl implements OutBoxManageService { JSONObject paramIn = new JSONObject(); paramIn.put("stor_id", IOSEnum.STOR_ID.code("二期")); paramIn.put("sect_id", RegionTypeEnum.TWO_BZC01.getId()); + paramIn.put("vehicle_type", jsonObject.getString("storagevehicle_type")); + paramIn.put("height", jsonObject.getString("height")); InBoxManageServiceImpl bean = SpringContextHolder.getBean(InBoxManageServiceImpl.class); JSONObject jsonAttr = bean.getStruct(paramIn); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/StoragevehicleinfoServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/StoragevehicleinfoServiceImpl.java index 2ea448b12..67a495ef7 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/StoragevehicleinfoServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/StoragevehicleinfoServiceImpl.java @@ -129,7 +129,12 @@ public class StoragevehicleinfoServiceImpl implements StoragevehicleinfoService code = "VEHICLE_CODE_GXTP"; break; case "0003": - code = "VEHICLE_CODE_LK"; + if (class_jo.getString("class_code").equals("000301")){ + code = "VEHICLE_CODE_LK"; + } + if (class_jo.getString("class_code").equals("000302")){ + code = "VEHICLE_CODE_LKB"; + } break; default: break; diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/BLmsToMesController.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/BLmsToMesController.java new file mode 100644 index 000000000..ab2106a67 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/BLmsToMesController.java @@ -0,0 +1,40 @@ +package org.nl.wms.ext.mes.rest; + +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.ext.mes.service.LmsToMesService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor + +@RequestMapping("/CamstarApi") +@Slf4j +public class BLmsToMesController { + private final LmsToMesService lmsToMesService; + + @PostMapping("/momAutoTransterMoveIn") + @Log("表处、分切上料反馈接口") + public ResponseEntity momAutoTransterMoveIn(@RequestBody JSONObject jo) { + return new ResponseEntity<>(lmsToMesService.momAutoTransterMoveIn(jo), HttpStatus.OK); + } + + @PostMapping("/momGetPackingInfo") + @Log("LMS通过木箱号调用木箱信息") + public ResponseEntity momGetPackingInfo(@RequestBody JSONObject jo) { + return new ResponseEntity<>(lmsToMesService.momGetPackingInfo(jo), HttpStatus.OK); + } + + @PostMapping("/momBoxPackageSubmit") + @Log("LMS装箱完成传MES包装关系") + public ResponseEntity momBoxPackageSubmit(@RequestBody JSONObject jo) { + return new ResponseEntity<>(lmsToMesService.momBoxPackageSubmit(jo), HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/LmsToMesService.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/LmsToMesService.java index 0b0104e42..b15ab4505 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/LmsToMesService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/LmsToMesService.java @@ -135,4 +135,10 @@ public interface LmsToMesService { * } */ JSONObject ChildScrapUpdate(JSONObject jo); + + JSONObject momAutoTransterMoveIn(JSONObject jo); + + JSONObject momGetPackingInfo(JSONObject jo); + + JSONObject momBoxPackageSubmit(JSONObject jo); } 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 4d9624bf3..4317217a3 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 @@ -700,4 +700,52 @@ public class LmsToMesServiceImpl implements LmsToMesService { } return result; } + + @Override + public JSONObject momAutoTransterMoveIn(JSONObject param){ return null;} /*{ + String from_area = param.getString("from_area"); + String to_area = param.getString("to_area"); + String container_name = param.getString("container_name"); + + + log.info("momAutoTransterMoveIn接口输入参数为:-------------------" + param.toString()); + + String url = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_URL").getValue(); + String api = "CamstarApi/momAutoTransterMoveIn"; + url = url + api; + + String UserName = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_USERNAME").getValue(); + String Password = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_PASSWORD").getValue(); + param.put("UserName", UserName); + param.put("Password", Password); + + try { + String resultMsg = HttpRequest.post(url) + .body(String.valueOf(param)) + .execute().body(); + result = JSONObject.parseObject(resultMsg); + log.info("LMSPackakge接口输出参数为:-------------------" + result.toString()); + + + String RTYPE = result.getString("RTYPE"); + if ("E".equals(RTYPE)) { + throw new BadRequestException(result.getString("RTMSG")); + } + + + } catch (Exception e) { + throw new BadRequestException("MES提示错误:" + e.getMessage()); + } + return result; + }*/ + + @Override + public JSONObject momGetPackingInfo(JSONObject jo) { + return null; + } + + @Override + public JSONObject momBoxPackageSubmit(JSONObject jo) { + return null; + } } From a9d3f7d1ccc9f6daae3fd4e9fda61d7aec1412e4 Mon Sep 17 00:00:00 2001 From: gongbaoxiong <751575283@qq.com> Date: Fri, 21 Jun 2024 11:40:03 +0800 Subject: [PATCH 16/30] =?UTF-8?q?add:=E5=A2=9E=E5=8A=A0=E4=BA=8C=E6=AC=A1?= =?UTF-8?q?=E5=88=86=E9=85=8D=E4=BB=A3=E7=A0=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nl/common/enums/PackageInfoIvtEnum.java | 35 +++++++++++++++---- .../main/java/org/nl/wms/sch/AcsTaskDto.java | 7 ++++ 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/common/enums/PackageInfoIvtEnum.java b/lms/nladmin-system/src/main/java/org/nl/common/enums/PackageInfoIvtEnum.java index ff766ab84..83dea1ca7 100644 --- a/lms/nladmin-system/src/main/java/org/nl/common/enums/PackageInfoIvtEnum.java +++ b/lms/nladmin-system/src/main/java/org/nl/common/enums/PackageInfoIvtEnum.java @@ -18,23 +18,38 @@ import java.util.Map; @Getter public enum PackageInfoIvtEnum { //点位类型 - POINT_STATUS(MapOf.of("满轴缓存位", "1", "空载具缓存位", "2", "待检区", "3", "管制区", "4", "装箱位", "5","装箱区", "6")), - - + POINT_STATUS(MapOf.of("满轴缓存位", "1", "空载具缓存位", "2", "待检区", "3", "管制区", "4", "装箱位", "5", "装箱区", "6","等待点", "7")), //任务类型 TASK_TYPE(MapOf.of("输送线->满轴缓存位", "010901", "满轴缓存位->待检区", "010902", "满轴缓存位->管制区", "010903", "放空(空载具缓存位->输送线)", - "010904", "取空(待检区或管制区->空载具缓存位)", "010905", "待检区->管制区", "010906","管制区->待检区", "010907","待检区->装箱区", "010908", "装箱区->装箱对接位", "010909","放空(装箱区->待检区)", "010910","输送线四个点任务", "010911","送空(装箱区->待检区或管制区)", "010912")), + "010904", "补空(待检区或管制区->空载具缓存位)", "010905", "待检区->管制区", "010906", "管制区->待检区", "010907", "待检区->装箱区", "010908", "装箱区->装箱对接位", "010909", "放空(装箱区->待检区)", "010910", "输送线四个点任务", "010911", "送空(装箱区->待检区或管制区)", "010912")), //ACS任务类型 ACS_TASK_TYPE(MapOf.of("agv任务", "1", "桁架任务", "6")), + + //agv二次分配类型 + AGV_ACTION_TYPE(MapOf.of("普通任务", "1", "取货二次分配", "2", "放货二次分配", "3", "取放货二次分配", "4")), + + + //二次分配请求类型 + TASK_ACTION_TYPE(MapOf.of("取货分配", "1", "放货分配", "2", "取货完成", "3", "放货完成", "4")), + + + //起点终点类型 + TASK_POINT_TYPE(MapOf.of("取货任务", "1", "放货任务", "2")), + + + //排序方式 + SORT_TYPE(MapOf.of("升序", "1", "降序", "2")), + + //ACS系统类型 AGV_SYSTEM_TYPE(MapOf.of("1楼诺宝任务", "1", "2楼1区域AGV系统", "2", "1楼叉车任务", "3")), //桁架任务类型 - TRUSS_TYPE(MapOf.of("点对点任务", "1", "下卷拔轴任务", "6", "换轴任务", "7","放轴任务", "8")), + TRUSS_TYPE(MapOf.of("点对点任务", "1", "下卷拔轴任务", "6", "换轴任务", "7", "放轴任务", "8")), //是否 IS_USED(MapOf.of("启用", "1", "未启用", "0")), @@ -43,7 +58,7 @@ public enum PackageInfoIvtEnum { POINT_LOCATION(MapOf.of("上", "0", "下", "1")), //库存状态 - IVT_STATUS(MapOf.of("空", "0","空载具", "1","有子卷","2","合格品","3","管制品","4")); + IVT_STATUS(MapOf.of("空", "0", "空载具", "1", "有子卷", "2", "合格品", "3", "管制品", "4")); private Map code; @@ -56,6 +71,14 @@ public enum PackageInfoIvtEnum { throw new BadRequestException(this.name() + "对应类型" + desc + "未定义"); } + public Long longCode(String desc) { + String code = this.getCode().get(desc); + if (StringUtils.isNotEmpty(code)) { + return Long.valueOf(code); + } + throw new BadRequestException(this.name() + "对应类型" + desc + "未定义"); + } + public String check(String code) { for (Map.Entry entry : this.getCode().entrySet()) { if (entry.getValue().equals("code")) { diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsTaskDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsTaskDto.java index d37274860..e6ee2a257 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsTaskDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsTaskDto.java @@ -51,6 +51,13 @@ public class AcsTaskDto { * Agv系统类型 */ private String agv_system_type; + + /** + * agv二次分配类型(1、普通任务 2、取货二次分配 3、放货二次分配 4、取放货二次分配) + */ + private String agv_action_type; + + /** * 备注 */ From 387f5a77f815aabc8a5a9dcfe513999ccf1e4b1f Mon Sep 17 00:00:00 2001 From: liuxy Date: Fri, 21 Jun 2024 18:04:20 +0800 Subject: [PATCH 17/30] =?UTF-8?q?add:=E5=8F=91=E8=B4=A7=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=89=A9=E5=B1=95=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/nl/b_lms/sch/tasks/TwoSendOutTask.java | 3 +++ .../src/main/java/org/nl/wms/sch/AcsTaskDto.java | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoSendOutTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoSendOutTask.java index c3c68b775..f58f8c333 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoSendOutTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoSendOutTask.java @@ -42,6 +42,8 @@ public class TwoSendOutTask extends AbstractAcsTask { WQLObject taskTab = WQLObject.getWQLObject("sch_base_task"); 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); + // 获取系统参数 + String expandWidthLength = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("expandWidthLength").getValue(); ArrayList resultList = new ArrayList<>(); for (int i = 0; i < arr.size(); i++) { @@ -60,6 +62,7 @@ public class TwoSendOutTask extends AbstractAcsTask { .dtl_type(String.valueOf(dtl_type)) .route_plan_code(getRoutePlanCode(json.getString("point_code1"))) .remark(json.getString("remark")) + .expandWidthLength(expandWidthLength) .build(); resultList.add(dto); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsTaskDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsTaskDto.java index e6ee2a257..0e44bb89c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsTaskDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsTaskDto.java @@ -140,4 +140,10 @@ public class AcsTaskDto { private String barcode; + /** + * 发货任务下发货叉宽度 + */ + private String expandWidthLength; + + } From 23a1787e7e490e724f0d6013dc7e7840f66d69df Mon Sep 17 00:00:00 2001 From: zhouz <> Date: Sat, 22 Jun 2024 10:48:42 +0800 Subject: [PATCH 18/30] =?UTF-8?q?fix:=E5=8F=91=E8=B4=A7=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nl/b_lms/sch/tasks/TwoSendOutTask.java | 3 + .../util/impl/LashManageServiceImpl.java | 2 +- .../mes/service/impl/LmsToMesServiceImpl.java | 125 ++++++++++++++++-- 3 files changed, 120 insertions(+), 10 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoSendOutTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoSendOutTask.java index c3c68b775..a8a81e8fa 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoSendOutTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoSendOutTask.java @@ -10,6 +10,7 @@ import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; +import org.nl.common.enums.PackageInfoIvtEnum; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.WQL; @@ -57,6 +58,8 @@ public class TwoSendOutTask extends AbstractAcsTask { .vehicle_code(json.getString("vehicle_code")) .priority(json.getString("priority")) .class_type(json.getString("task_type")) + .agv_system_type("3") + .agv_action_type(PackageInfoIvtEnum.AGV_ACTION_TYPE.code("放货二次分配")) .dtl_type(String.valueOf(dtl_type)) .route_plan_code(getRoutePlanCode(json.getString("point_code1"))) .remark(json.getString("remark")) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/LashManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/LashManageServiceImpl.java index d9d300604..58af8a8da 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/LashManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/LashManageServiceImpl.java @@ -260,7 +260,7 @@ public class LashManageServiceImpl implements LashManageService { result.put("printQty", "1"); //第一次捆扎次数 - result.put("bundleTimes", "2"); + result.put("bundleTimes", "3"); return result; } 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 4317217a3..23fabe3cf 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 @@ -702,11 +702,24 @@ public class LmsToMesServiceImpl implements LmsToMesService { } @Override - public JSONObject momAutoTransterMoveIn(JSONObject param){ return null;} /*{ + public JSONObject momAutoTransterMoveIn(JSONObject param) { String from_area = param.getString("from_area"); String to_area = param.getString("to_area"); String container_name = param.getString("container_name"); + if (StrUtil.isEmpty(from_area)){ + throw new BadRequestException("起始区域不能为空!"); + } + + if (StrUtil.isEmpty(to_area)){ + throw new BadRequestException("目的区域不能为空!"); + } + + if (StrUtil.isEmpty(container_name)){ + throw new BadRequestException("子卷号不能为空!"); + } + + JSONObject result = new JSONObject(); log.info("momAutoTransterMoveIn接口输入参数为:-------------------" + param.toString()); @@ -718,13 +731,16 @@ public class LmsToMesServiceImpl implements LmsToMesService { String Password = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_PASSWORD").getValue(); param.put("UserName", UserName); param.put("Password", Password); + param.put("SourceLocation", from_area); + param.put("ContainerName", container_name); + param.put("DestLocation", to_area); try { String resultMsg = HttpRequest.post(url) .body(String.valueOf(param)) .execute().body(); result = JSONObject.parseObject(resultMsg); - log.info("LMSPackakge接口输出参数为:-------------------" + result.toString()); + log.info("momAutoTransterMoveIn接口输出参数为:-------------------" + result.toString()); String RTYPE = result.getString("RTYPE"); @@ -737,15 +753,106 @@ public class LmsToMesServiceImpl implements LmsToMesService { throw new BadRequestException("MES提示错误:" + e.getMessage()); } return result; - }*/ - - @Override - public JSONObject momGetPackingInfo(JSONObject jo) { - return null; } @Override - public JSONObject momBoxPackageSubmit(JSONObject jo) { - return null; + public JSONObject momGetPackingInfo(JSONObject param) { + String box_no = param.getString("box_no"); + + if (StrUtil.isEmpty(box_no)) { + throw new BadRequestException("木箱号不能为空!"); + } + + JSONObject result = new JSONObject(); + + log.info("momGetPackingInfo接口输入参数为:-------------------" + param.toString()); + + String url = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_URL").getValue(); + String api = "CamstarApi/momGetPackingInfo"; + url = url + api; + + String UserName = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_USERNAME").getValue(); + String Password = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_PASSWORD").getValue(); + param.put("UserName", UserName); + param.put("Password", Password); + param.put("ContainerName", box_no); + + try { + String resultMsg = HttpRequest.post(url) + .body(String.valueOf(param)) + .execute().body(); + result = JSONObject.parseObject(resultMsg); + log.info("momGetPackingInfo接口输出参数为:-------------------" + result.toString()); + + + String RTYPE = result.getString("RTYPE"); + if ("E".equals(RTYPE)) { + throw new BadRequestException(result.getString("RTMSG")); + } + + + } catch (Exception e) { + throw new BadRequestException("MES提示错误:" + e.getMessage()); + } + return result; + } + + @Override + public JSONObject momBoxPackageSubmit(JSONObject param) { + + log.info("momBoxPackageSubmit接口输入参数为:-------------------" + param.toString()); + + + String box_no = param.getString("box_no"); + String num = param.getString("num"); + String box_weight = param.getString("box_weight"); + JSONArray rows = param.getJSONArray("rows"); + + if(StrUtil.isEmpty(box_no)){ + throw new BadRequestException("木箱号不能为空!"); + } + + if(StrUtil.isEmpty(num)){ + throw new BadRequestException("箱内子卷数不能为空!"); + } + + if(StrUtil.isEmpty(box_weight)){ + throw new BadRequestException("木箱毛重不能为空!"); + } + + if(ObjectUtil.isEmpty(rows)){ + throw new BadRequestException("箱内子卷信息不能为空!"); + } + + JSONObject result = new JSONObject(); + + String url = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_URL").getValue(); + String api = "CamstarApi/momBoxPackageSubmit"; + url = url + api; + + String UserName = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_USERNAME").getValue(); + String Password = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_PASSWORD").getValue(); + param.put("UserName", UserName); + param.put("Password", Password); + param.put("ContainerName", box_no); + + try { + String resultMsg = HttpRequest.post(url) + .body(String.valueOf(param)) + .execute().body(); + result = JSONObject.parseObject(resultMsg); + log.info("momGetPackingInfo接口输出参数为:-------------------" + result.toString()); + + + String RTYPE = result.getString("RTYPE"); + if ("E".equals(RTYPE)) { + throw new BadRequestException(result.getString("RTMSG")); + } + + + } catch (Exception e) { + throw new BadRequestException("MES提示错误:" + e.getMessage()); + } + return result; } } From 74db7e79e0fe4e1fb719ab0a28ecc26c727c1ef3 Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Sat, 22 Jun 2024 17:26:10 +0800 Subject: [PATCH 19/30] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=88=86?= =?UTF-8?q?=E5=88=87=E4=B8=8B=E6=96=99AGV=E4=BB=BB=E5=8A=A1=E6=B2=A1?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E7=A6=81=E7=94=A8=E7=82=B9=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/nl/b_lms/sch/tasks/slitter/SlitterDownAgvTask.java | 4 ++++ .../nl/b_lms/sch/tasks/slitter/auto/AutoUpShaftTrussTask.java | 4 ++-- .../org/nl/b_lms/sch/tasks/slitter/constant/SlitterEnum.java | 2 +- .../org/nl/b_lms/sch/tasks/slitter/mapper/SlitterMapper.xml | 1 + .../sch/tasks/slitter/service/impl/SlitterServiceImpl.java | 2 ++ 5 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SlitterDownAgvTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SlitterDownAgvTask.java index b6b9015f5..0dde816da 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SlitterDownAgvTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SlitterDownAgvTask.java @@ -13,6 +13,7 @@ import org.nl.b_lms.sch.task.service.IschBaseTaskService; import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.TaskUtils; +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.sch.AcsTaskDto; @@ -76,6 +77,9 @@ public class SlitterDownAgvTask extends AbstractAcsTask { task.setTask_status(TaskStatusEnum.EXECUTING.getCode()); } if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { + if (TaskStatusEnum.FINISHED.getCode().equals(task.getTask_status())) { + throw new BadRequestException("任务[" + task.getTask_code() + "]已经完成!"); + } task.setTask_status(TaskStatusEnum.FINISHED.getCode()); // 互换资源 String startPoint = task.getPoint_code1(); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoUpShaftTrussTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoUpShaftTrussTask.java index 95e346bbd..6d3c220ea 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoUpShaftTrussTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoUpShaftTrussTask.java @@ -97,9 +97,9 @@ public class AutoUpShaftTrussTask { if (ObjectUtil.isNotEmpty(nextUpPlan) && ObjectUtil.isNotEmpty(nextDownPlan)) { // 双轴任务参数构建 - param.put("point_code1", newCutPoint.getTruss_point_code2()); + param.put("point_code1", newCutPoint.getTruss_point_code1()); param.put("point_code2", device.getUp_point_code()); - param.put("point_code3", newCutPoint.getTruss_point_code1()); + param.put("point_code3", newCutPoint.getTruss_point_code2()); param.put("point_code4", device.getDown_point_code()); param.put("vehicle_code1", newCutPoint.getQzz_no1()); param.put("vehicle_code2", newCutPoint.getQzz_no2()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/constant/SlitterEnum.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/constant/SlitterEnum.java index bb13f020f..626d53979 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/constant/SlitterEnum.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/constant/SlitterEnum.java @@ -21,7 +21,7 @@ public enum SlitterEnum { */ TASK_TYPE(MapOf.of("穿拔轴缓存<>穿拔轴位", "010801", "穿拔轴缓存<>分切对接位", "010802", "穿拔轴位<>气胀轴缓存位", "010803" , "分切机下料AGV任务", "010804", "分切机上气胀轴", "010805", "分切机下气胀轴", "010806", "备货区送载具", "010807" - , "备货区送纸管", "010808")); + , "备货区送纸管", "010808", "分切机下料桁架任务", "010809")); private Map code; public String code(String desc) { diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/SlitterMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/SlitterMapper.xml index e1c36a0fa..f2c289916 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/SlitterMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/SlitterMapper.xml @@ -27,6 +27,7 @@ FROM `bst_ivt_cutpointivt` bct WHERE bct.point_type IN ('2', '3') AND bct.point_status = '3' + AND bct.is_used = '1' AND 0 = (SELECT COUNT(*) FROM sch_base_task t WHERE t.task_status '07' diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java index f1e8f4e6a..8b9841694 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java @@ -414,6 +414,7 @@ public class SlitterServiceImpl implements SlitterService { taskParam.put("truss_type", "1"); taskParam.put("empty_site", "0"); } + taskParam.put("task_type", SlitterEnum.TASK_TYPE.code("分切机下料桁架任务")); taskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA); // 分切计划修改状态 05 -> 06 currentPlans.forEach(plan -> { @@ -505,6 +506,7 @@ public class SlitterServiceImpl implements SlitterService { throw new BadRequestException("错误表达式"); } // 创建任务 + taskParam.put("task_type", SlitterEnum.TASK_TYPE.code("分切机下料桁架任务")); taskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA); slitterDownTrussTask.createTask(taskParam); // 下来的分切计划修改状态:05 -> 06 From c86ee18d3a0eaf664f5d38b862e70e12ccb74dc9 Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Sun, 23 Jun 2024 14:50:50 +0800 Subject: [PATCH 20/30] =?UTF-8?q?feat:=20=E5=86=85=E5=8C=85=E9=97=B4?= =?UTF-8?q?=E4=B8=8D=E5=A5=97=E8=BD=B4=E4=B8=9A=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tasks/slitter/service/impl/SlitterServiceImpl.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java index 8b9841694..426e320d2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java @@ -117,9 +117,17 @@ public class SlitterServiceImpl implements SlitterService { throw new BadRequestException("设备:{ " + deviceCode + " }对应的气胀轴尺寸不批对" + ",需要气胀轴尺寸:{ " + point.getQzz_size() + " },实际尺寸:{ " + size + " }"); } + List tubes = Stream.of(point.getTube_code1(), point.getTube_code2()) + .filter(ObjectUtil::isNotEmpty) + .collect(Collectors.toList()); + // 判断是否存在纸管 + List list = papervehicleService.list(new LambdaQueryWrapper() + .in(MdPbPapervehicle::getMaterial_code, tubes) + .gt(MdPbPapervehicle::getQty, 0)); // point.getTube_code1() 编码 , getTube_name1() : 纸制筒管|纸管|6英寸|1300 or 纸制筒管|纸管|3英寸|12|650 res.put("device_code", deviceCode); res.put("data", con); + con.put("is_bushing", list.size() > 0 ? SlitterConstant.SLITTER_YES : SlitterConstant.SLITTER_NO); con.put("left", point.getTube_code1()); con.put("leftSize", ObjectUtil.isNotEmpty(point.getTube_name1()) ? point.getTube_name1().split("\\|")[2].charAt(0) : ""); From 55cd804fa18fa7339c3a384104b25929d256842b Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Mon, 24 Jun 2024 15:29:49 +0800 Subject: [PATCH 21/30] =?UTF-8?q?fix:=20=E5=88=86=E5=88=87=E5=AF=B9?= =?UTF-8?q?=E6=8E=A5=E4=BD=8D=E5=8C=BA=E5=88=86=E5=8C=BA=E5=9F=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../slitter/auto/AutoSendAirShaftAgvTask.java | 6 +++- .../tasks/slitter/mapper/SlitterMapper.java | 5 ++-- .../tasks/slitter/mapper/SlitterMapper.xml | 1 + .../service/impl/SlitterServiceImpl.java | 11 ++++---- .../tasks/slitter/util/SlitterTaskUtil.java | 28 +++++++++++++++++++ 5 files changed, 43 insertions(+), 8 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoSendAirShaftAgvTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoSendAirShaftAgvTask.java index f847dbaf3..d9ea066f0 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoSendAirShaftAgvTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoSendAirShaftAgvTask.java @@ -15,6 +15,7 @@ import org.nl.b_lms.sch.tasks.slitter.SendAirShaftAgvTask; import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant; import org.nl.b_lms.sch.tasks.slitter.constant.SlitterEnum; import org.nl.b_lms.sch.tasks.slitter.mapper.SlitterMapper; +import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil; import org.nl.modules.common.exception.BadRequestException; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; @@ -84,7 +85,10 @@ public class AutoSendAirShaftAgvTask { } // 如果两个气涨轴编码则表示一组满了 // 查找分切对接没任务的空位 - List emptyPoint = slitterMapper.getEmptyCutPointNotTask(area, deviceCut.getSort_seq()); + List emptyPoint = slitterMapper.getEmptyCutPointNotTask(area, + deviceCut.getSort_seq(), + SlitterTaskUtil.getPointLocationInCutDevice( + SlitterTaskUtil.getNumberByResourceCode(demoPlan.getResource_name()))); if (emptyPoint.size() == 0) { log.warn("找不到对应的位置!"); return; diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/SlitterMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/SlitterMapper.java index 7f9e2c266..21dce6d38 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/SlitterMapper.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/SlitterMapper.java @@ -37,9 +37,10 @@ public interface SlitterMapper { * 获取分切机下料位没任务的点位 * @param area 区域 * @param sortSeq 设备序号 - * @return + * @param location 区域 1-5:0 6-10:1 + * @return / */ - List getEmptyCutPointNotTask(String area, BigDecimal sortSeq); + List getEmptyCutPointNotTask(String area, BigDecimal sortSeq, String location); /** * 获取分切机下一组分切计划对应的点位 diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/SlitterMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/SlitterMapper.xml index f2c289916..040815d30 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/SlitterMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/SlitterMapper.xml @@ -50,6 +50,7 @@ `bst_ivt_cutpointivt` bcp WHERE bcp.point_type = '3' AND bcp.point_status = '1' AND bcp.is_used = '1' AND bcp.product_area = #{area} + AND bcp.point_location = #{location} AND 0 = ( SELECT COUNT(*) FROM sch_base_task t WHERE t.task_status '07' AND (t.point_code2 = bcp.point_code OR t.point_code2 = bcp.truss_point_code1 diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java index 426e320d2..c84631c4d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java @@ -46,16 +46,15 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; -import java.util.Objects; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import java.util.stream.Stream; +import static org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil.getPointLocationInCutDevice; +import static org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil.getNumberByResourceCode; + /** * @author lyd * @description 服务接口 @@ -393,7 +392,9 @@ public class SlitterServiceImpl implements SlitterService { if (timePlans.size() == 0) { // 如果没有下一组的分切计划,就只做下卷任务(判断下单/下双) // 获取分切对接位没任务的空位置 - List emptyPoints = slitterMapper.getEmptyCutPointNotTask(area, device.getSort_seq()); + List emptyPoints = slitterMapper.getEmptyCutPointNotTask(area, + device.getSort_seq(), + getPointLocationInCutDevice(getNumberByResourceCode(demoPlan.getResource_name()))); if (emptyPoints.size() == 0) { log.error("分切机【" + device.getExt_code() + "】找不到对应的对接位!"); throw new BadRequestException("分切机【" + device.getExt_code() + "】找不到对应的对接位!"); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/util/SlitterTaskUtil.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/util/SlitterTaskUtil.java index 9747a45ce..adf830794 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/util/SlitterTaskUtil.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/util/SlitterTaskUtil.java @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant; +import org.nl.modules.common.exception.BadRequestException; import java.util.List; import java.util.StringJoiner; @@ -150,4 +151,31 @@ public class SlitterTaskUtil { } } + /** + * 获取设备号 + * @param resourceCode / + * @return / + */ + public static int getNumberByResourceCode(String resourceCode) { + if (ObjectUtil.isEmpty(resourceCode)) { + throw new BadRequestException("输入的设备号编码不能为空!"); + } + String trimStr = resourceCode.trim(); + // 提取最后两位作为字符串 + String lastTwoDigitsString = trimStr.substring(trimStr.length() - 2); + // 将整数再转换回字符串以供返回 + return Integer.parseInt(lastTwoDigitsString); + } + + /** + * 获取上下区域 + * @param num / + * @return / + */ + public static String getPointLocationInCutDevice(int num) { + if (num >= 1 && num <= 5) { + return "0"; + } + return "1"; + } } From 87ebb39603ec591d7841a6847e7c5fd1e952f05a Mon Sep 17 00:00:00 2001 From: zhouz <> Date: Mon, 24 Jun 2024 16:25:41 +0800 Subject: [PATCH 22/30] =?UTF-8?q?fix:MES=E5=AF=B9=E6=8E=A5=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dao/PdmBiSubpackagerelation.java | 6 +- .../impl/BstIvtBoxinfoServiceImpl.java | 15 ++ .../util/impl/InBoxManageServiceImpl.java | 14 +- .../util/impl/InVehicleManageServiceImpl.java | 1 + .../util/impl/OutBoxManageServiceImpl.java | 1 + .../iostorInv/util/wql/BST_INVEHICLE.wql | 3 + .../wms/ext/mes/rest/BLmsToMesController.java | 40 ----- .../wms/ext/mes/rest/LmsToMesController.java | 18 ++ .../mes/service/impl/LmsToMesServiceImpl.java | 21 ++- .../mes/service/impl/MesToLmsServiceImpl.java | 158 ++++++++++++++++-- .../bi/service/dto/SubpackagerelationDto.java | 6 +- 11 files changed, 211 insertions(+), 72 deletions(-) delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/BLmsToMesController.java diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/PdmBiSubpackagerelation.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/PdmBiSubpackagerelation.java index 61f667cb7..836d85d84 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/PdmBiSubpackagerelation.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/PdmBiSubpackagerelation.java @@ -117,19 +117,19 @@ public class PdmBiSubpackagerelation extends Model { /** * 单位面积质量 */ - private BigDecimal mass_per_unit_area; + private String mass_per_unit_area; /** * 净重 */ - private BigDecimal net_weight; + private String net_weight; /** * 长度 */ - private BigDecimal length; + private String length; /** diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/impl/BstIvtBoxinfoServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/impl/BstIvtBoxinfoServiceImpl.java index 27dbc3e41..5fb64b0b2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/impl/BstIvtBoxinfoServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/impl/BstIvtBoxinfoServiceImpl.java @@ -9,6 +9,8 @@ import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService; import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxinfo; import org.nl.b_lms.storage_manage.database.service.dao.mapper.BstIvtBoxinfoMapper; import org.nl.common.utils.IdUtil; +import org.nl.system.service.param.ISysParamService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -28,6 +30,9 @@ public class BstIvtBoxinfoServiceImpl extends ServiceImpl queryAll(Map whereJson, Pageable page) { @@ -46,6 +51,15 @@ public class BstIvtBoxinfoServiceImpl extends ServiceImpl '' @@ -113,6 +115,7 @@ attr.is_used = '1' AND attr.is_delete = '0' AND attr.lock_type = '1' + AND height = '2' AND IFNULL(attr.storagevehicle_code,'') = '' AND attr.stor_id = 输入.stor_id AND attr.sect_id = 输入.sect_id diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/BLmsToMesController.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/BLmsToMesController.java deleted file mode 100644 index ab2106a67..000000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/BLmsToMesController.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.nl.wms.ext.mes.rest; - -import com.alibaba.fastjson.JSONObject; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.modules.logging.annotation.Log; -import org.nl.wms.ext.mes.service.LmsToMesService; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequiredArgsConstructor - -@RequestMapping("/CamstarApi") -@Slf4j -public class BLmsToMesController { - private final LmsToMesService lmsToMesService; - - @PostMapping("/momAutoTransterMoveIn") - @Log("表处、分切上料反馈接口") - public ResponseEntity momAutoTransterMoveIn(@RequestBody JSONObject jo) { - return new ResponseEntity<>(lmsToMesService.momAutoTransterMoveIn(jo), HttpStatus.OK); - } - - @PostMapping("/momGetPackingInfo") - @Log("LMS通过木箱号调用木箱信息") - public ResponseEntity momGetPackingInfo(@RequestBody JSONObject jo) { - return new ResponseEntity<>(lmsToMesService.momGetPackingInfo(jo), HttpStatus.OK); - } - - @PostMapping("/momBoxPackageSubmit") - @Log("LMS装箱完成传MES包装关系") - public ResponseEntity momBoxPackageSubmit(@RequestBody JSONObject jo) { - return new ResponseEntity<>(lmsToMesService.momBoxPackageSubmit(jo), HttpStatus.OK); - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/LmsToMesController.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/LmsToMesController.java index 71a49963f..4f7c69aea 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/LmsToMesController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/LmsToMesController.java @@ -117,4 +117,22 @@ public class LmsToMesController { public ResponseEntity ChildScrapUpdate(@RequestBody JSONObject jo) { return new ResponseEntity<>(lmsToMesService.ChildScrapUpdate(jo), HttpStatus.OK); } + + @PostMapping("/momAutoTransterMoveIn") + @Log("表处、分切上料反馈接口") + public ResponseEntity momAutoTransterMoveIn(@RequestBody JSONObject jo) { + return new ResponseEntity<>(lmsToMesService.momAutoTransterMoveIn(jo), HttpStatus.OK); + } + + @PostMapping("/momGetPackingInfo") + @Log("LMS通过木箱号调用木箱信息") + public ResponseEntity momGetPackingInfo(@RequestBody JSONObject jo) { + return new ResponseEntity<>(lmsToMesService.momGetPackingInfo(jo), HttpStatus.OK); + } + + @PostMapping("/momBoxPackageSubmit") + @Log("LMS装箱完成传MES包装关系") + public ResponseEntity momBoxPackageSubmit(@RequestBody JSONObject jo) { + return new ResponseEntity<>(lmsToMesService.momBoxPackageSubmit(jo), HttpStatus.OK); + } } 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 23fabe3cf..f51d82f0c 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 @@ -707,15 +707,15 @@ public class LmsToMesServiceImpl implements LmsToMesService { String to_area = param.getString("to_area"); String container_name = param.getString("container_name"); - if (StrUtil.isEmpty(from_area)){ + if (StrUtil.isEmpty(from_area)) { throw new BadRequestException("起始区域不能为空!"); } - if (StrUtil.isEmpty(to_area)){ + if (StrUtil.isEmpty(to_area)) { throw new BadRequestException("目的区域不能为空!"); } - if (StrUtil.isEmpty(container_name)){ + if (StrUtil.isEmpty(container_name)) { throw new BadRequestException("子卷号不能为空!"); } @@ -808,19 +808,19 @@ public class LmsToMesServiceImpl implements LmsToMesService { String box_weight = param.getString("box_weight"); JSONArray rows = param.getJSONArray("rows"); - if(StrUtil.isEmpty(box_no)){ + if (StrUtil.isEmpty(box_no)) { throw new BadRequestException("木箱号不能为空!"); } - if(StrUtil.isEmpty(num)){ + if (StrUtil.isEmpty(num)) { throw new BadRequestException("箱内子卷数不能为空!"); } - if(StrUtil.isEmpty(box_weight)){ + if (StrUtil.isEmpty(box_weight)) { throw new BadRequestException("木箱毛重不能为空!"); } - if(ObjectUtil.isEmpty(rows)){ + if (ObjectUtil.isEmpty(rows)) { throw new BadRequestException("箱内子卷信息不能为空!"); } @@ -834,14 +834,17 @@ public class LmsToMesServiceImpl implements LmsToMesService { String Password = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_PASSWORD").getValue(); param.put("UserName", UserName); param.put("Password", Password); - param.put("ContainerName", box_no); + param.put("PackageBoxSN", box_no); + param.put("QuanlityInBox", num); + param.put("BoxWeight", box_weight); + param.put("ContainerList", box_weight); try { String resultMsg = HttpRequest.post(url) .body(String.valueOf(param)) .execute().body(); result = JSONObject.parseObject(resultMsg); - log.info("momGetPackingInfo接口输出参数为:-------------------" + result.toString()); + log.info("momBoxPackageSubmit接口输出参数为:-------------------" + result.toString()); String RTYPE = result.getString("RTYPE"); 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 f351df350..5338ecd04 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 @@ -8,13 +8,16 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.checkerframework.checker.units.qual.C; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; +import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; import org.nl.b_lms.sch.tasks.ProcessTask; @@ -32,6 +35,7 @@ import org.nl.wms.ext.mes.service.MesToLmsService; import org.nl.wms.pda.mps.service.InService; import org.nl.wms.pda.mps.service.OutService; import org.nl.wms.pda.mps.service.impl.BakingServiceImpl; +import org.nl.wms.pdm.bi.service.dto.SubpackagerelationDto; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.tasks.CoolCutTask; import org.nl.wms.st.inbill.service.CheckOutBillService; @@ -1736,6 +1740,32 @@ public class MesToLmsServiceImpl implements MesToLmsService { public JSONObject momSendSplitMfgOrderBOM(JSONObject param) { log.info("momSendSplitMfgOrderBOM输入参数为:-------------------" + param.toString()); + /* MES传递的入参内容 + [ + { + "MfgOrderName": "25529502-20230926$02#02", + "ProductName": "44151000900045", + "Description": "木制包装容器及板材|木箱|650|4|3|1290*750*494", + "CarrierName": "48221000000001", + "CarrierDescription": "纸制筒管|纸管|3英寸|650", + "Type": "RW2", + "HL01": "A+", + "HL02": "520", + "HL03": "1,538.000", + "HL031": "2,000.000", + "HL04": "100.000", + "HL041": "130.000", + "HL05": "20,000.000", + "HL06": "CC", + "HL07": "4", + "HL08": "ZT1(纸筒-3寸)", + "HL081": "650", + "HL09": "ROF(毛面朝外)", + "HL10": "纸管长度650,中性包装", + "HL11": null + } +]*/ + JSONObject resultParam = new JSONObject(); resultParam.put("RTYPE", "S"); resultParam.put("Code", "0"); @@ -1748,27 +1778,51 @@ public class MesToLmsServiceImpl implements MesToLmsService { public JSONObject getRollInfo(JSONObject param) { String ContainerName = param.getString("ContainerName"); PdmBiSlittingproductionplan one = slittingproductionplanService.getOne(new LambdaQueryWrapper().eq(PdmBiSlittingproductionplan::getContainer_name, ContainerName)); - if (ObjectUtil.isEmpty(one)){ - throw new BadRequestException("未查询到子卷号为["+ContainerName+"]的分切计划!"); + if (ObjectUtil.isEmpty(one)) { + throw new BadRequestException("未查询到子卷号为[" + ContainerName + "]的分切计划!"); } JSONObject resultParam = new JSONObject(); - resultParam.put("ContainerName",ContainerName); - resultParam.put("ResourceName",""); - resultParam.put("Weight",one.getWeight()); - resultParam.put("WeighDate",DateUtil.now()); - resultParam.put("Type",one.getPaper_tube_or_FRP()); - resultParam.put("CarrierWeight",one.getPaper_weight()); + resultParam.put("ContainerName", ContainerName); + resultParam.put("ResourceName", ""); + resultParam.put("Weight", one.getWeight()); + resultParam.put("WeighDate", DateUtil.now()); + resultParam.put("Type", one.getPaper_tube_or_FRP()); + resultParam.put("CarrierWeight", one.getPaper_weight()); return resultParam; } @Override public JSONObject sendLevelInfo(JSONObject param) { log.info("sendLevelInfo输入参数为:-------------------" + param.toString()); - JSONObject resultParam = new JSONObject(); - resultParam.put("RTYPE", "S"); - resultParam.put("Code", "0"); - resultParam.put("RTMSG", "操作成功!"); + + String ContainerName = param.getString("ContainerName"); + String Level = param.getString("Level"); + + try { + if (StrUtil.isEmpty(ContainerName)) { + throw new BadRequestException("子卷号不能为空!"); + } + if (StrUtil.isEmpty(Level)) { + throw new BadRequestException("子卷等级不能为空!"); + } + + PdmBiSlittingproductionplan plan = slittingproductionplanService.getOne(new LambdaQueryWrapper().eq(PdmBiSlittingproductionplan::getContainer_name, ContainerName) + .eq(PdmBiSlittingproductionplan::getIs_delete, "0")); + if (ObjectUtil.isEmpty(plan)) { + throw new BadRequestException("未查询到对应的分切计划!"); + } + plan.setLevel(Level); + slittingproductionplanService.update(plan); + resultParam.put("RTYPE", "S"); + resultParam.put("Code", "0"); + resultParam.put("RTMSG", "操作成功!"); + } catch (Exception e) { + resultParam.put("RTYPE", "E"); + resultParam.put("Code", "1"); + resultParam.put("RTMSG", "操作失败!," + e.getMessage()); + } + return resultParam; } @@ -1787,6 +1841,86 @@ public class MesToLmsServiceImpl implements MesToLmsService { @Override public JSONObject sendSubInfo(JSONObject param) { + + /* {"ContainerName":"A1222211290105A3", + "SAPLotNumber":"A000000168", + "SaleOrderName":"100000022-100", + "CustomerName":"10000282", + "CustomerDescription":"深圳市金泰莱新材料有限公司", + "WidthPlan":null,"ThicknessPlan":"6", + "Width":"710","Thickness":"1", + "MassPerUnitArea":"1","NetWeight":204.906, + "Length":"6500","DateOfProduction":"2024-05-24", + "isUnPlanProduction":"0", + "UnPlanProductProperty1":"面密度/g/m²:1|面密度极差/g/m²:0.4|铬含量/ppm:1|断裂伸长率/%:1.0|高温抗氧化性(150℃|10min):1|M面光泽度/GU:1|M面粗糙度Rz/μm:1|S面粗糙度Ra/μm:1|抗拉强度/Mpa:1.0|厚度/μm:1|润湿性/mN/m - ≥:1|翘曲/mm:1", + "UnPlanProductProperty2":"", + "UnPlanProductProperty3":"", + "SOTensileStrengthLowerLimit":null, + "ETTensileStrengthLowerLimit":"300", + "TensileStrength":"1.0"}*/ + + //子卷号 + String ContainerName = param.getString("ContainerName"); + //SAP批次 + String SAPLotNumber = param.getString("SAPLotNumber"); + //销售订单及行号 + String SaleOrderName = param.getString("SaleOrderName"); + //客户编号 + String CustomerName = param.getString("CustomerName"); + //客户名称 + String CustomerDescription = param.getString("CustomerDescription"); + //计划幅宽 + String WidthPlan = param.getString("WidthPlan"); + //计划厚度 + String ThicknessPlan = param.getString("ThicknessPlan"); + //产品幅宽 + String Width = param.getString("Width"); + //产品厚度 + String Thickness = param.getString("Thickness"); + //单位面积质量 + String MassPerUnitArea = param.getString("MassPerUnitArea"); + //净重 + String NetWeight = param.getString("NetWeight"); + //长度 + String Length = param.getString("Length"); + //制造完成日期 + String DateOfProduction = param.getString("DateOfProduction"); + //计划外分切的子卷 + String isUnPlanProduction = param.getString("isUnPlanProduction"); + //子卷的物性值1 + String UnPlanProductProperty1 = param.getString("UnPlanProductProperty1"); + //子卷的物性值2 + String UnPlanProductProperty2 = param.getString("UnPlanProductProperty2"); + //子卷的物性值3 + String UnPlanProductProperty3 = param.getString("UnPlanProductProperty3"); + //客户需求抗拉下限 + String SOTensileStrengthLowerLimit = param.getString("SOTensileStrengthLowerLimit"); + //内控标准抗拉下限 + String ETTensileStrengthLowerLimit = param.getString("ETTensileStrengthLowerLimit"); + //生产实际抗拉值 + String TensileStrength = param.getString("TensileStrength"); + + PdmBiSubpackagerelation dto = new PdmBiSubpackagerelation(); + dto.setContainer_name(ContainerName); + dto.setSap_pcsn(SAPLotNumber); + dto.setSale_order_name(SaleOrderName); + dto.setContainer_name(CustomerName); + dto.setCustomer_description(CustomerDescription); + dto.setWidth(Width); + dto.setThickness(Thickness); + dto.setMass_per_unit_area(MassPerUnitArea); + dto.setNet_weight(NetWeight); + dto.setLength(Length); + dto.setDate_of_production(DateOfProduction); + dto.setIs_un_plan_production(isUnPlanProduction); + dto.setUn_plan_product_property1(UnPlanProductProperty1); + dto.setUn_plan_product_property2(UnPlanProductProperty2); + dto.setUn_plan_product_property3(UnPlanProductProperty3); + dto.setDemand_limit(SOTensileStrengthLowerLimit); + dto.setStandard_limit(ETTensileStrengthLowerLimit); + dto.setActual_value(TensileStrength); + + log.info("sendSubInfo输入参数为:-------------------" + param.toString()); JSONObject resultParam = new JSONObject(); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/bi/service/dto/SubpackagerelationDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/bi/service/dto/SubpackagerelationDto.java index de3d0c90a..2571965e6 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/bi/service/dto/SubpackagerelationDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/bi/service/dto/SubpackagerelationDto.java @@ -90,17 +90,17 @@ public class SubpackagerelationDto implements Serializable { /** * 单位面积质量 */ - private BigDecimal mass_per_unit_area; + private String mass_per_unit_area; /** * 净重 */ - private BigDecimal net_weight; + private String net_weight; /** * 长度 */ - private BigDecimal length; + private String length; /** * 制造完成日期 From 0814124414ae0266211a6658acfa53d18ed3d76c Mon Sep 17 00:00:00 2001 From: liuxy Date: Mon, 24 Jun 2024 17:39:45 +0800 Subject: [PATCH 23/30] =?UTF-8?q?rev=EF=BC=9A=E4=BA=8C=E6=AC=A1=E5=88=86?= =?UTF-8?q?=E9=85=8D=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/nl/b_lms/sch/tasks/TwoSendOutTask.java | 4 +++- .../java/org/nl/b_lms/storage_manage/ios/enums/IOSEnum.java | 4 ++-- .../src/main/java/org/nl/wms/sch/AcsTaskDto.java | 6 ------ 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoSendOutTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoSendOutTask.java index 459318cc8..a70e335b2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoSendOutTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoSendOutTask.java @@ -45,6 +45,8 @@ public class TwoSendOutTask extends AbstractAcsTask { 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); // 获取系统参数 String expandWidthLength = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("expandWidthLength").getValue(); + JSONObject param = new JSONObject(); + param.put("expandWidthLength",expandWidthLength); ArrayList resultList = new ArrayList<>(); for (int i = 0; i < arr.size(); i++) { @@ -65,7 +67,7 @@ public class TwoSendOutTask extends AbstractAcsTask { .dtl_type(String.valueOf(dtl_type)) .route_plan_code(getRoutePlanCode(json.getString("point_code1"))) .remark(json.getString("remark")) - .expandWidthLength(expandWidthLength) + .interaction_json(param) .build(); resultList.add(dto); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/enums/IOSEnum.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/enums/IOSEnum.java index 0cfd0678a..f8527b61e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/enums/IOSEnum.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/enums/IOSEnum.java @@ -104,8 +104,8 @@ public enum IOSEnum { "6","CK2046", "7","7", "8","8", "9","9", "10","10")), // 出库发货等待点 - OUT_FH_POINT(MapOf.of("1","B_FH_01_0", "2","B_FH_02_0", "3","B_FH_03_0", "4","B_FH_04_0" ,"5","B_FH_05_0", - "6","B_FH_06_0")), + OUT_FH_POINT(MapOf.of("1","B_FH01_0", "2","B_FH02_0", "3","B_FH03_0", "4","B_FH04_0" ,"5","B_FH05_0", + "6","B_FH06_0")), // 行架点位 OUT_HANGER(MapOf.of("行架位1", "CK2013","行架位2", "CK2017")), diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsTaskDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsTaskDto.java index 0e44bb89c..e6ee2a257 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsTaskDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsTaskDto.java @@ -140,10 +140,4 @@ public class AcsTaskDto { private String barcode; - /** - * 发货任务下发货叉宽度 - */ - private String expandWidthLength; - - } From 2f396a9a71122d852df8b3974fa1714c20e22f49 Mon Sep 17 00:00:00 2001 From: liuxy Date: Tue, 25 Jun 2024 17:10:06 +0800 Subject: [PATCH 24/30] =?UTF-8?q?add=EF=BC=9A=E4=BB=93=E4=BD=8D=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E6=96=B0=E5=A2=9E=20=E5=B7=B7=E9=81=93=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../st/rest/StructattrController.java | 7 ++ .../st/service/StructattrService.java | 9 ++ .../service/impl/StructattrServiceImpl.java | 14 +++ .../views/wms/basedata/st/struct/index.vue | 99 ++++++++++++++++++- .../wms/basedata/st/struct/structattr.js | 10 +- 5 files changed, 137 insertions(+), 2 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/rest/StructattrController.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/rest/StructattrController.java index 30e651073..0b8011ab2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/rest/StructattrController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/rest/StructattrController.java @@ -94,4 +94,11 @@ public class StructattrController { public ResponseEntity unLockPoint(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(structattrService.unLockPoint(whereJson), HttpStatus.OK); } + + @PostMapping("/tunConfirm") + @Log("二期禁用巷道") + public ResponseEntity tunConfirm(@RequestBody JSONObject json) { + structattrService.tunConfirm(json); + return new ResponseEntity<>(HttpStatus.OK); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/StructattrService.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/StructattrService.java index aa54af38d..e1b7e3421 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/StructattrService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/StructattrService.java @@ -98,4 +98,13 @@ public interface StructattrService { * @return */ JSONObject unLockPoint(JSONObject whereJson); + + /** + * 二期禁用巷道 + * @param json :{ + * block_num: 巷道 + * is_used: 0-禁用,1-启用 + * } + */ + void tunConfirm(JSONObject json); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructattrServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructattrServiceImpl.java index e185a2736..85999f5f4 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructattrServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructattrServiceImpl.java @@ -10,6 +10,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.common.utils.MapOf; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; @@ -513,4 +514,17 @@ public class StructattrServiceImpl implements StructattrService { return null; } + @Override + @Transactional(rollbackFor = Exception.class) + public void tunConfirm(JSONObject json) { + WQLObject tab = WQLObject.getWQLObject("st_ivt_structattr"); + + // 将这一巷道的所有仓位都禁用 + JSONObject param = new JSONObject(); + param.put("is_used", json.getString("is_used")); + + tab.update(param,"sect_id = '"+IOSEnum.SECT_ID.code("二期主存区")+"' AND block_num = '"+json.getString("block_num")+"' AND is_delete = '0'"); + + } + } diff --git a/lms/nladmin-ui/src/views/wms/basedata/st/struct/index.vue b/lms/nladmin-ui/src/views/wms/basedata/st/struct/index.vue index 8ca226768..72ac7a646 100644 --- a/lms/nladmin-ui/src/views/wms/basedata/st/struct/index.vue +++ b/lms/nladmin-ui/src/views/wms/basedata/st/struct/index.vue @@ -60,7 +60,67 @@ - + + + 巷道管理 + + + + + + + + + + + + + + + + + + + + + + 禁用 + + + + + 启用 + + + + + + { }) + }, + closeTun() { + this.dialogVisible2 = true + }, + tunOpen() { + if (!this.formMst.block_num) { + this.crud.notify('请选择巷道!', CRUD.NOTIFICATION_TYPE.INFO) + return + } + this.formMst.is_used = '1' + crudStructattr.tunConfirm(this.formMst).then(res => { + this.$refs['form2'].resetFields() + this.dialogVisible2 = false + this.crud.toQuery() + }) + }, + tunClose() { + if (!this.formMst.block_num) { + this.crud.notify('请选择巷道!', CRUD.NOTIFICATION_TYPE.INFO) + return + } + this.formMst.is_used = '0' + crudStructattr.tunConfirm(this.formMst).then(res => { + this.$refs['form2'].resetFields() + this.dialogVisible2 = false + this.crud.toQuery() + }) } } } diff --git a/lms/nladmin-ui/src/views/wms/basedata/st/struct/structattr.js b/lms/nladmin-ui/src/views/wms/basedata/st/struct/structattr.js index fbcd30c8e..a45a67635 100644 --- a/lms/nladmin-ui/src/views/wms/basedata/st/struct/structattr.js +++ b/lms/nladmin-ui/src/views/wms/basedata/st/struct/structattr.js @@ -32,4 +32,12 @@ export function changeActive(data) { }) } -export default { add, edit, del, changeActive } +export function tunConfirm(data) { + return request({ + url: 'api/structattr/tunConfirm', + method: 'post', + data + }) +} + +export default { add, edit, del, changeActive, tunConfirm } From bd153c9044f3182547c44855b44a0c11912810a8 Mon Sep 17 00:00:00 2001 From: gongbaoxiong <751575283@qq.com> Date: Tue, 25 Jun 2024 19:06:07 +0800 Subject: [PATCH 25/30] =?UTF-8?q?add:=E5=A2=9E=E5=8A=A0=E4=BA=8C=E6=AC=A1?= =?UTF-8?q?=E5=88=86=E9=85=8D=E4=BB=A3=E7=A0=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PdmBiSubpackagerelationController.java | 9 + .../dao/PdmBiSubpackagerelation.java | 6 + .../mapper/PdmBiSubpackagerelationMapper.xml | 18 +- .../IpdmBiSubpackagerelationService.java | 13 + .../PdmBiSubpackagerelationServiceImpl.java | 597 ++++++++++-------- .../BstIvtPackageinfoivtController.java | 35 +- .../sch/point/dao/BstIvtPackageinfoivt.java | 4 + .../mapper/BstIvtPackageinfoivtMapper.java | 7 + .../dao/mapper/BstIvtPackageinfoivtMapper.xml | 15 +- .../service/IbstIvtPackageinfoivtService.java | 22 +- .../impl/BstIvtPackageinfoivtServiceImpl.java | 353 +++++++++-- .../sch/tasks/first_floor_area/DjqTask.java | 11 +- .../first_floor_area/DjqToKzjhcwTask.java | 297 +++++++++ .../sch/tasks/first_floor_area/GzqTask.java | 1 + .../{KzjhcwTask.java => GzqToKzjhcwTask.java} | 90 +-- .../sch/tasks/first_floor_area/MzhcwTask.java | 7 +- .../{SendKzjTask.java => SendDjqKzjTask.java} | 19 +- .../first_floor_area/SendGzqKzjTask.java | 190 ++++++ .../tasks/first_floor_area/SsxDjwTask.java | 3 +- .../sch/tasks/first_floor_area/ZxDjwTask.java | 7 +- .../sch/tasks/first_floor_area/ZxqTask.java | 2 + .../auto/AutoSendDjqToGzq.java | 62 ++ .../auto/AutoSendDjqToZxqTwo.java | 50 -- .../auto/AutoSendGzqToDjq.java | 66 ++ .../auto/AutoSendMzToDjq.java | 83 ++- .../first_floor_area/auto/AutoSendToZxq.java | 22 +- .../auto/AutoSendVehicleToDjq.java | 91 ++- .../auto/AutoSendVehicleToKz.java | 30 - .../auto/AutoSendVehicleToKzj.java | 121 ++++ .../auto/AutoSendZxToDjw.java | 183 +++--- .../first_floor_area/auto/TaskQueue.java | 49 +- .../nl/common/enums/PackageInfoIvtEnum.java | 11 +- .../nl/modules/common/utils/RedisUtils.java | 43 +- .../acs/service/impl/AcsToWmsServiceImpl.java | 72 ++- .../org/nl/wms/sch/rest/TaskController.java | 2 + .../src/test/java/org/nl/init/EventTest.java | 7 +- .../src/views/wms/pdm/sub/DivDialog.vue | 14 +- .../src/views/wms/pdm/sub/MaterDialog.vue | 80 ++- 38 files changed, 1996 insertions(+), 696 deletions(-) create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqToKzjhcwTask.java rename lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/{KzjhcwTask.java => GzqToKzjhcwTask.java} (65%) rename lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/{SendKzjTask.java => SendDjqKzjTask.java} (91%) create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendGzqKzjTask.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendDjqToGzq.java delete mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendDjqToZxqTwo.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendGzqToDjq.java delete mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToKz.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToKzj.java diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/controller/PdmBiSubpackagerelationController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/controller/PdmBiSubpackagerelationController.java index 1d92ff64b..b2fcf2cef 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/controller/PdmBiSubpackagerelationController.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/controller/PdmBiSubpackagerelationController.java @@ -6,6 +6,7 @@ import java.util.Map; import com.alibaba.fastjson.JSONObject; import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation; import org.nl.common.TableDataInfo; +import org.springframework.data.domain.Pageable; import org.springframework.web.bind.annotation.*; import lombok.RequiredArgsConstructor; @@ -49,6 +50,14 @@ public class PdmBiSubpackagerelationController { } + @GetMapping("/queryBoxSpec") + @Log("查询待检区木箱规格") + public ResponseEntity queryBoxSpec(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(pdmBiSubpackagerelationService.queryBoxSpec(whereJson, page), HttpStatus.OK); + } + + + /** * 查询订单装箱信息 * diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/PdmBiSubpackagerelation.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/PdmBiSubpackagerelation.java index 836d85d84..fba4e8893 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/PdmBiSubpackagerelation.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/PdmBiSubpackagerelation.java @@ -310,6 +310,12 @@ public class PdmBiSubpackagerelation extends Model { */ private String box_group; + /** + * 纸管规格 + */ + @TableField(exist = false) + private String paper_tube_description; + /** diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.xml index 032d3abad..84ee3186e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.xml @@ -73,15 +73,17 @@ MAX(create_time) DESC diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/IpdmBiSubpackagerelationService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/IpdmBiSubpackagerelationService.java index 562e886b9..73bd2a5b9 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/IpdmBiSubpackagerelationService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/IpdmBiSubpackagerelationService.java @@ -9,7 +9,9 @@ import java.util.Map; import java.util.Set; import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxinfo; import org.nl.common.domain.query.PageQuery; +import org.springframework.data.domain.Pageable; import org.springframework.web.bind.annotation.RequestBody; @@ -32,6 +34,17 @@ public interface IpdmBiSubpackagerelationService extends IService queryAll(Map whereJson, PageQuery pageable); + /** + * 查询待检区木箱规格 + * + * @param whereJson 查询条件 + * @param page 分页参数 + * @return Map + */ + Map queryBoxSpec(Map whereJson, Pageable page); + + + /** * 查询订单装箱信息 * diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java index 131c91337..6b90e07b8 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java @@ -20,6 +20,8 @@ import org.nl.b_lms.sch.task.dao.SchBaseTask; import org.nl.b_lms.sch.tasks.first_floor_area.*; import org.nl.b_lms.sch.tasks.first_floor_area.auto.TaskQueueManager; import org.nl.b_lms.sch.tasks.first_floor_area.auto.TaskQueue; +import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxinfo; +import org.nl.b_lms.storage_manage.database.service.dao.mapper.BstIvtBoxinfoMapper; import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBoxManageService; import org.nl.common.enums.PackageInfoIvtEnum; import org.nl.common.utils.SecurityUtils; @@ -27,8 +29,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.nl.modules.common.exception.BadRequestException; import org.nl.system.service.param.ISysParamService; +import org.nl.wms.sch.manage.TaskStatusEnum; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.scheduling.annotation.Async; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.metadata.IPage; import org.nl.common.domain.query.PageQuery; @@ -66,7 +69,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl queryBoxSpec(Map whereJson, Pageable page) { + Map boxInfoList = new HashMap(); + //IPage resultPage = new Page<>(page.getPageNumber(), page.getPageSize()); + IPage resultPage = new Page<>(page.getPageNumber() + 1, page.getPageSize()); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (whereJson.containsKey("search")) { + String searchValue = whereJson.get("search").toString(); + queryWrapper.and(w -> + w.eq(BstIvtBoxinfo::getBox_length, searchValue) + .or() + .eq(BstIvtBoxinfo::getMaterial_code, searchValue) + .or() + .like(BstIvtBoxinfo::getMaterial_name, searchValue) + .or() + .like(BstIvtBoxinfo::getBox_no, searchValue) + .or() + .eq(BstIvtBoxinfo::getBox_id, searchValue) + .or() + .eq(BstIvtBoxinfo::getBox_high, searchValue) + .or() + .eq(BstIvtBoxinfo::getBox_width, searchValue) + .or() + .eq(BstIvtBoxinfo::getNum, searchValue) + .or() + .eq(BstIvtBoxinfo::getVehicle_type, searchValue) + ); + } + queryWrapper.eq(BstIvtBoxinfo::getIs_packing, "0"); + queryWrapper.groupBy(BstIvtBoxinfo::getMaterial_code); + queryWrapper.orderByAsc(BstIvtBoxinfo::getBox_id); + IPage result = bstIvtBoxinfoMapper.selectPage(resultPage, queryWrapper); + boxInfoList.put("content", result.getRecords()); + boxInfoList.put("totalElements", result.getTotal()); + return boxInfoList; + } + + @Override public IPage queryContainerization(Map whereJson, PageQuery pageable) { Page pageObject = new Page<>(pageable.getPage(), pageable.getSize()); @@ -154,7 +203,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl queryContainerNameBySaleOrder(Map whereJson) { if (!whereJson.containsKey("sale_order_name")) { - return null; + return Collections.emptyList(); } List pdmBiSubpackagerelationList = pdmBiSubpackagerelationMapper.queryContainerNameBySaleOrder(whereJson.get("sale_order_name").toString()); Map countByGroup = pdmBiSubpackagerelationList.stream() @@ -189,6 +238,285 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl packagerelationList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class); + //检查是否存在已分配规格的子卷号 + List isOutBox = packagerelationList.stream().filter(r -> r.getStatus().equals("0")).collect(Collectors.toList()); + if (isOutBox.size() > 0) { + throw new BadRequestException("标记为黄色的子卷号已分配且对应的木箱正在出库,请重新选择未分配木箱规格的子卷"); + } + JSONArray jsonArray = whereJson.getJSONArray("tableMater"); + if (jsonArray == null || jsonArray.size() == 0) { + throw new BadRequestException("无选中子卷信息"); + } + //均衡获取木箱出库装箱区对接位 + String deviceCode = getPointCode(); + Integer taskCount = bstIvtPackageinfoivtMapper.getZxqTaskCount(deviceCode.substring(deviceCode.lastIndexOf("_") + 1)); + if (taskCount + packagerelationList.size() > 10) { + throw new BadRequestException("子卷搬运任务数已达上限!"); + } + List pdmBiSubpackagerelationList = pdmBiSubpackagerelationMapper + .selectList(new LambdaQueryWrapper().eq(PdmBiSubpackagerelation::getSale_order_name, jsonArray.getJSONObject(0).getString("sale_order_name"))); + Integer maxBoxGroup = pdmBiSubpackagerelationList.stream() + .map(PdmBiSubpackagerelation::getBox_group) + .filter(Objects::nonNull) + .map(Integer::parseInt) + .max(Integer::compareTo) + .orElse(0) + 1; + try { + List entityList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class).stream() + .map(PdmBiSubpackagerelation::getWorkorder_id) + .map(String::valueOf) + .collect(Collectors.toList()); + if (entityList.isEmpty()) { + return; + } + outBox(entityList, packagerelationList, deviceCode, maxBoxGroup, whereJson.getString("checked")); + } catch (Exception e) { + throw new BadRequestException(e.getMessage()); + } + } + + + /** + * 空木箱出库 + */ + private void outBox(List entityList, List packagerelationList, String deviceCode, Integer maxBoxGroup, String boxType) { + //均衡获取装箱对接位 + //String deviceCode = "ZXQ_1_1"; + JSONObject boxInfo = new JSONObject(); + //确定装箱区终点 + boxInfo.put("device_code", deviceCode); + boxInfo.put("material_code", boxType); + boxInfo.put("num", entityList.size()); + String boxSn = outBoxManageService.outBox(boxInfo); + if (StringUtils.isBlank(boxSn)) { + throw new BadRequestException("装箱区 -> 装箱对接位,木箱码不能为空!"); + } + //更新及子卷包装状态已分配规格及木箱规格组 + CompletableFuture.runAsync(() -> { + try { + updateBoxGroup(maxBoxGroup, entityList, boxType); + } catch (Exception e) { + log.error("异常信息:" + e); + } + }, pool); + //更新子卷包装关系更新木箱号 + CompletableFuture.runAsync(() -> { + try { + updateBoxInfo(entityList, boxSn); + } catch (Exception e) { + log.error("异常信息:" + e); + } + }, pool); + //待检区->装箱区agv任务 +// CompletableFuture.runAsync(() -> { +// try { +// agvTransfer(packagerelationList, deviceCode, boxSn); +// } catch (Exception e) { +// log.error("异常信息:" + e); +// } +// }, pool); + } + + private void updateBoxGroup(Integer maxBoxGroup, List entityList, String boxType) { + // code:终点,material_code:木箱规格,num: 子卷数 + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("box_type", boxType); + updateWrapper.set("box_group", maxBoxGroup); + updateWrapper.set("status", "0"); + updateWrapper.in("workorder_id", entityList); + pdmBiSubpackagerelationMapper.update(null, updateWrapper); + } + + private String getPointCode() { + //均衡获取木箱出库装箱区对接位 + List bstIvtPackageinfoivtList = bstIvtPackageinfoivtMapper.selectList(new LambdaQueryWrapper().eq(BstIvtPackageinfoivt::getPoint_status, "5").eq(BstIvtPackageinfoivt::getIs_used, "1").orderByAsc(BstIvtPackageinfoivt::getPoint_code)); + if (CollectionUtils.isEmpty(bstIvtPackageinfoivtList)) { + throw new BadRequestException("没有可用的装箱区对接位"); + } + Map resultMap = new HashMap<>(); + //获取装箱位任务数量 + List> taskCount = bstIvtPackageinfoivtMapper.getPointTaskCount(); + if (taskCount != null) { + for (Map map : taskCount) { + Object pointCode2Obj = map.get("point_code2"); + Object countObj = map.get("count"); + if (pointCode2Obj != null && countObj != null) { + String pointCode2 = pointCode2Obj.toString(); + Long countLong = (Long) countObj; + Integer count = countLong.intValue(); + resultMap.merge(pointCode2, count, Integer::sum); + } + } + } + bstIvtPackageinfoivtList.stream() + .collect(Collectors.toMap( + BstIvtPackageinfoivt::getPoint_code, + p -> StringUtils.isNotBlank(p.getContainer_name()) ? 1 : 0, + Integer::sum + )) + .forEach((key, value) -> resultMap.merge(key, value, Integer::sum)); + List> result = resultMap.entrySet().stream() + .map(entry -> Collections.singletonMap(entry.getKey(), entry.getValue())) + .collect(Collectors.toList()); + //获取数量最少的点位 + Optional minPointCode = result.stream() + .min(Comparator.comparingInt(map -> map.entrySet().iterator().next().getValue())) + .map(map -> map.keySet().iterator().next()); + return minPointCode.orElseGet(() -> bstIvtPackageinfoivtList.get(0).getPoint_code()); + } + + + protected void updateBoxInfo(List entityList, String boxSn) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("package_box_sn", boxSn); + updateWrapper.in("workorder_id", entityList); + pdmBiSubpackagerelationMapper.update(null, updateWrapper); + } + + + protected void agvTransfer(List packagerelationList, String deviceCode, String boxSn) { + //待检区点位 + List djqPointList = packageinfoivtService + .list(new LambdaUpdateWrapper() + .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("待检区")) + .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) + //.eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("合格品")) + .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("有子卷")) + .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); + Set containerNames = packagerelationList.stream() + .map(PdmBiSubpackagerelation::getContainer_name) + .collect(Collectors.toSet()); + List djqPoints = djqPointList.stream() + .filter(r -> containerNames.contains(r.getContainer_name())) + .collect(Collectors.toList()); + //任务组id + String groupId = deviceCode.substring(deviceCode.lastIndexOf("_") + 1); + List schBaseTaskList = new ArrayList<>(); + //确定起点,安装装箱组标识加入任务队列 + djqPoints.forEach(r -> { + JSONObject jo = new JSONObject(); + jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区")); + jo.put("vehicle_code", r.getContainer_name()); + jo.put("point_code1", r.getPoint_code()); + jo.put("task_status", TaskStatusEnum.SURE_START.getCode()); + //木箱号 + jo.put("vehicle_code2", groupId); + //任务组id + //jo.put("car_no", deviceCode); + SchBaseTask task = new SchBaseTask(); + task.setTask_id(zxqTask.createTask(jo)); + //增加任务到队列 + schBaseTaskList.add(task); + }); + //taskQueueManager.addTasksToQueue(groupId, schBaseTaskList); + if (CollectionUtils.isNotEmpty(schBaseTaskList)) { + taskQueue.addTasksToQueue(groupId, schBaseTaskList); + } + } + + /** + * 待检区->装箱区agv任务 + */ + private void agvTransfer1(List packagerelationList, String deviceCode, String boxSn) { + //待检区点位 + List djqPointList = packageinfoivtService + .list(new LambdaUpdateWrapper() + .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("待检区")) + .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) + //todo 暂时改为合格品 + .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("合格品")) + .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); + Set containerNames = packagerelationList.stream() + .map(PdmBiSubpackagerelation::getContainer_name) + .collect(Collectors.toSet()); + List djqPoints = djqPointList.stream() + .filter(djqPoint -> containerNames.contains(djqPoint.getContainer_name())) + .collect(Collectors.toList()); + //下发agv任务 + djqPoints.forEach(r -> { + //装箱区点位 + List zxqPointList = packageinfoivtService + .list(new LambdaUpdateWrapper() + .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("装箱区")) + .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) + .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空")) + .eq(BstIvtPackageinfoivt::getBlock, deviceCode.substring(deviceCode.indexOf("_") + 1)) + .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); + JSONObject jo = new JSONObject(); + jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区")); + jo.put("vehicle_code", r.getContainer_name()); + jo.put("point_code1", r.getPoint_code()); + //木箱号 + jo.put("vehicle_code2", boxSn); + if (CollectionUtils.isEmpty(zxqPointList)) { + throw new BadRequestException("装箱区点位已满!"); + } + jo.put("point_code2", zxqPointList.get(0).getPoint_code()); + zxqTask.createTask(jo); + }); + } + + /** + * 多选删除 + * + * @param ids 多个Id主键 + */ + @Override + public void deleteAll(Set ids) { + // 物理删除 + pdmBiSubpackagerelationMapper.deleteBatchIds(ids); + } + + + /** + * 获取实体基础信息 + * + * @param entity 对象实体 + * @param isCreate 是否创建 + */ + private PdmBiSubpackagerelation getBasicInfo(PdmBiSubpackagerelation entity, boolean isCreate) { + if (isCreate) { + entity.setCreate_id(Long.valueOf(SecurityUtils.getCurrentUserId())); + entity.setCreate_name(SecurityUtils.getCurrentNickName()); + entity.setCreate_time(DateUtil.now()); + } + return entity; + } + /** * 满轴->待检 */ @@ -354,267 +682,6 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl packagerelationList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class); - List isOutBox = packagerelationList.stream().filter(r -> r.getStatus().equals("0")).collect(Collectors.toList()); - if (isOutBox.size() > 0) { - throw new BadRequestException("标记为黄色的子卷号已分配木箱,请重新选择未分配木箱的子卷"); - } - JSONArray jsonArray = whereJson.getJSONArray("tableMater"); - if (jsonArray == null || jsonArray.size() == 0) { - throw new BadRequestException("无选中子卷信息"); - } - List pdmBiSubpackagerelationList = pdmBiSubpackagerelationMapper - .selectList(new LambdaQueryWrapper().eq(PdmBiSubpackagerelation::getSale_order_name, jsonArray.getJSONObject(0).getString("sale_order_name"))); - Integer maxBoxGroup = pdmBiSubpackagerelationList.stream() - .map(PdmBiSubpackagerelation::getBox_group) - .filter(Objects::nonNull) - .map(Integer::parseInt) - .max(Integer::compareTo) - .orElse(0) + 1; - try { - List entityList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class).stream() - .map(PdmBiSubpackagerelation::getWorkorder_id) - .map(String::valueOf) - .collect(Collectors.toList()); - if (entityList.isEmpty()) { - return; - } - // code:终点,material_code:木箱规格,num: 子卷数 - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - String boxType = whereJson.getString("checked"); - updateWrapper.set("box_type", boxType); - updateWrapper.set("box_group", maxBoxGroup); - updateWrapper.set("status", "0"); - updateWrapper.in("workorder_id", entityList); - pdmBiSubpackagerelationMapper.update(null, updateWrapper); - outBox(entityList, packagerelationList, boxType); - } catch (Exception e) { - throw new BadRequestException(e.getMessage()); - } - } - - - /** - * 空木箱出库 - */ - private void outBox(List entityList, List packagerelationList, String boxType) { - //均衡获取装箱对接位 - //String deviceCode= getPointCode(); - String deviceCode = "ZXQ_1_1"; - JSONObject boxInfo = new JSONObject(); - //确定装箱区终点 - boxInfo.put("device_code", deviceCode); - boxInfo.put("material_code", boxType); - boxInfo.put("num", entityList.size()); - String boxSn = outBoxManageService.outBox(boxInfo); - if (StringUtils.isBlank(boxSn)) { - throw new BadRequestException("库位 -> 装箱对接位,木箱码不能为空!"); - } - //更新子卷包装关系更新木箱号 - CompletableFuture.runAsync(() -> { - try { - updateBoxInfo(entityList, boxSn); - } catch (Exception e) { - log.error("异常信息:" + e); - } - }, pool); - //待检区->装箱区agv任务 - // String finalDeviceCode = deviceCode; - // CompletableFuture.runAsync(() -> { - // try { - // agvTransfer(packagerelationList, finalDeviceCode, boxSn); - // } catch (Exception e) { - // log.error("异常信息:" + e); - // } - // }, pool); - } - - private String getPointCode() { - //均衡获取木箱出库终点 - List bstIvtPackageinfoivtList = bstIvtPackageinfoivtMapper.selectList(new LambdaQueryWrapper().eq(BstIvtPackageinfoivt::getPoint_status, "5").eq(BstIvtPackageinfoivt::getIs_used, "1").orderByAsc(BstIvtPackageinfoivt::getPoint_code)); - if (CollectionUtils.isEmpty(bstIvtPackageinfoivtList)) { - throw new BadRequestException("没有可用的装箱区对接位"); - } - Map resultMap = new HashMap<>(); - //获取装箱位任务数量 - List> taskCount = bstIvtPackageinfoivtMapper.getPointTaskCount(); - if (taskCount != null) { - for (Map map : taskCount) { - Object pointCode2Obj = map.get("point_code2"); - Object countObj = map.get("count"); - if (pointCode2Obj != null && countObj != null) { - String pointCode2 = pointCode2Obj.toString(); - Long countLong = (Long) countObj; - Integer count = countLong.intValue(); - resultMap.merge(pointCode2, count, Integer::sum); - } - } - } - bstIvtPackageinfoivtList.stream() - .collect(Collectors.toMap( - BstIvtPackageinfoivt::getPoint_code, - p -> StringUtils.isNotBlank(p.getContainer_name()) ? 1 : 0, - Integer::sum - )) - .forEach((key, value) -> resultMap.merge(key, value, Integer::sum)); - List> result = resultMap.entrySet().stream() - .map(entry -> Collections.singletonMap(entry.getKey(), entry.getValue())) - .collect(Collectors.toList()); - //获取数量最少的点位 - Optional minPointCode = result.stream() - .min(Comparator.comparingInt(map -> map.entrySet().iterator().next().getValue())) - .map(map -> map.keySet().iterator().next()); - return minPointCode.orElseGet(() -> bstIvtPackageinfoivtList.get(0).getPoint_code()); - } - - - protected void updateBoxInfo(List entityList, String boxSn) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.set("package_box_sn", boxSn); - updateWrapper.in("workorder_id", entityList); - pdmBiSubpackagerelationMapper.update(null, updateWrapper); - } - - - /** - * 待检区->装箱区agv任务 - */ - private void agvTransfer1(List packagerelationList, String deviceCode, String boxSn) { - //待检区点位 - List djqPointList = packageinfoivtService - .list(new LambdaUpdateWrapper() - .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("待检区")) - .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) - //todo 暂时改为合格品 - .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("合格品")) - .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); - Set containerNames = packagerelationList.stream() - .map(PdmBiSubpackagerelation::getContainer_name) - .collect(Collectors.toSet()); - List djqPoints = djqPointList.stream() - .filter(djqPoint -> containerNames.contains(djqPoint.getContainer_name())) - .collect(Collectors.toList()); - //下发agv任务 - djqPoints.forEach(r -> { - //装箱区点位 - List zxqPointList = packageinfoivtService - .list(new LambdaUpdateWrapper() - .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("装箱区")) - .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) - .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空")) - .eq(BstIvtPackageinfoivt::getBlock, deviceCode.substring(deviceCode.indexOf("_") + 1)) - .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); - JSONObject jo = new JSONObject(); - jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区")); - jo.put("vehicle_code", r.getContainer_name()); - jo.put("point_code1", r.getPoint_code()); - //木箱号 - jo.put("vehicle_code2", boxSn); - if (CollectionUtils.isEmpty(zxqPointList)) { - throw new BadRequestException("装箱区点位已满!"); - } - jo.put("point_code2", zxqPointList.get(0).getPoint_code()); - zxqTask.createTask(jo); - }); - } - - - protected void agvTransfer(List packagerelationList, String deviceCode, String boxSn) { - //待检区点位 - List djqPointList = packageinfoivtService - .list(new LambdaUpdateWrapper() - .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("待检区")) - .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) - //.eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("合格品")) - .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("有子卷")) - .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); - Set containerNames = packagerelationList.stream() - .map(PdmBiSubpackagerelation::getContainer_name) - .collect(Collectors.toSet()); - List djqPoints = djqPointList.stream() - .filter(djqPoint -> containerNames.contains(djqPoint.getContainer_name())) - .collect(Collectors.toList()); - //任务组id - String groupId = deviceCode.substring(deviceCode.lastIndexOf("_") + 1); - List schBaseTaskList = new ArrayList<>(); - //确定起点,安装装箱组标识加入任务队列 - djqPoints.forEach(r -> { - JSONObject jo = new JSONObject(); - jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区")); - jo.put("vehicle_code", r.getContainer_name()); - jo.put("point_code1", r.getPoint_code()); - //木箱号 - jo.put("vehicle_code2", boxSn); - SchBaseTask task = new SchBaseTask(); - task.setTask_id(zxqTask.createTask(jo)); - //增加任务到队列 - schBaseTaskList.add(task); - }); - //taskQueueManager.addTasksToQueue(groupId, schBaseTaskList); - // taskQueue.addTasksToQueue(groupId, schBaseTaskList); - } - - - /** - * 多选删除 - * - * @param ids 多个Id主键 - */ - @Override - public void deleteAll(Set ids) { - // 物理删除 - pdmBiSubpackagerelationMapper.deleteBatchIds(ids); - } - - - /** - * 获取实体基础信息 - * - * @param entity 对象实体 - * @param isCreate 是否创建 - */ - private PdmBiSubpackagerelation getBasicInfo(PdmBiSubpackagerelation entity, boolean isCreate) { - if (isCreate) { - entity.setCreate_id(Long.valueOf(SecurityUtils.getCurrentUserId())); - entity.setCreate_name(SecurityUtils.getCurrentNickName()); - entity.setCreate_time(DateUtil.now()); - } - return entity; - } - } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/controller/BstIvtPackageinfoivtController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/controller/BstIvtPackageinfoivtController.java index 07e2471a9..fb0fd0c6a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/controller/BstIvtPackageinfoivtController.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/controller/BstIvtPackageinfoivtController.java @@ -1,9 +1,17 @@ package org.nl.b_lms.sch.point.controller; + import java.util.Set; + +import cn.dev33.satoken.annotation.SaIgnore; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; +import org.nl.modules.common.exception.BadRequestException; import org.springframework.web.bind.annotation.*; import lombok.RequiredArgsConstructor; + import javax.annotation.Resource; + import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -18,7 +26,7 @@ import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; */ @RestController @RequiredArgsConstructor -@RequestMapping("/api/bstIvtPackageinfoivt") +@RequestMapping("/api/bstIvtPackageInfoIvt") @Slf4j public class BstIvtPackageinfoivtController { @@ -27,6 +35,29 @@ public class BstIvtPackageinfoivtController { private IbstIvtPackageinfoivtService bstIvtPackageinfoivtService; + /** + * 一楼装箱区点位二次分配 + * + * @param whereJson 任务编号,动作类型:1、取货分配 2、放货分配 3、取货完成 + * @return JSONObject 返回信息 + */ + @PostMapping("/secondaryAllocationPoint") + @SaIgnore + ResponseEntity secondaryAllocationPoint(@RequestBody JSONObject whereJson) { + log.info("一楼装箱区点位二次分配接口请求参数:---------------------------------------------" + whereJson.toString()); + String taskCode = whereJson.getString("taskCode"); + String actionType = whereJson.getString("actionType"); + if (StrUtil.isEmpty(whereJson.getString("taskCode")) || StrUtil.isEmpty(whereJson.getString("actionType"))) { + throw new BadRequestException("任务编号或动作类型不能为空!"); + } + return new ResponseEntity<>(bstIvtPackageinfoivtService.secondaryAllocationPoint(taskCode, actionType), HttpStatus.OK); + } + + /** + * agv二次分配类型(1、普通任务 2、取货二次分配 3、防货二次分配 4、取放货二次分配) + */ + private String agv_action_type; + /** * 新增数据 * @@ -40,8 +71,6 @@ public class BstIvtPackageinfoivtController { } - - /** * 删除数据 * diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/BstIvtPackageinfoivt.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/BstIvtPackageinfoivt.java index 9b846b80c..fac1b0812 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/BstIvtPackageinfoivt.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/BstIvtPackageinfoivt.java @@ -135,6 +135,10 @@ public class BstIvtPackageinfoivt extends Model { */ private String plan; + /** + * 规划 + */ + private String wait_point_type; /** * 获取主键值 diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/BstIvtPackageinfoivtMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/BstIvtPackageinfoivtMapper.java index df2246777..6f43bc389 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/BstIvtPackageinfoivtMapper.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/BstIvtPackageinfoivtMapper.java @@ -21,4 +21,11 @@ public interface BstIvtPackageinfoivtMapper extends BaseMapper> getPointTaskCount(); + + /** + * 获取待检区到装箱区的任务数量 + */ + Integer getZxqTaskCount(String groupId); + + } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/BstIvtPackageinfoivtMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/BstIvtPackageinfoivtMapper.xml index 41483a2b7..17f1ae6c9 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/BstIvtPackageinfoivtMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/BstIvtPackageinfoivtMapper.xml @@ -9,8 +9,19 @@ sch_base_task t WHERE t.task_type ='010704' - AND t.task_status 08 + AND t.create_time >= DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%s') + AND t.task_status '07' GROUP BY t.point_code2 - + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/IbstIvtPackageinfoivtService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/IbstIvtPackageinfoivtService.java index 6e962a804..9b2f475c2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/IbstIvtPackageinfoivtService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/IbstIvtPackageinfoivtService.java @@ -36,9 +36,29 @@ public interface IbstIvtPackageinfoivtService extends IService */ - List checkEndPointTask(String ivtType, String ivtStatus, String pointCode,String taskType); + List checkEndPointTask(String ivtType, String ivtStatus, String pointCode,String sortType,String taskType); + + + /** + * 获取等待点 + */ + String getWaitPoint(String block, String waitPointType); + + + /** + * 一楼装箱区点位二次分配 + * @param taskCode 任务编号 + * @param actionType 动作类型:1、申请起点 2、申请终点 3、取货完成 4、放货完成 + * @return JSONObject 返回信息 + */ + Map secondaryAllocationPoint(String taskCode, String actionType); + + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/BstIvtPackageinfoivtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/BstIvtPackageinfoivtServiceImpl.java index 5dff76afa..5057a7640 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/BstIvtPackageinfoivtServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/BstIvtPackageinfoivtServiceImpl.java @@ -4,48 +4,58 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; -import jodd.net.HttpStatus; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.point.dao.mapper.BstIvtPackageinfoivtMapper; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; import cn.hutool.core.date.DateUtil; import org.nl.b_lms.sch.task.dao.SchBaseTask; import org.nl.b_lms.sch.task.service.IschBaseTaskService; -import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.common.enums.PackageInfoIvtEnum; import org.nl.common.utils.SecurityUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.nl.modules.common.exception.BadRequestException; import org.nl.wms.sch.manage.TaskStatusEnum; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.metadata.IPage; import org.nl.common.domain.query.PageQuery; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** - * {@code @Description:} 装箱区点位库存表(BstIvtPackageinfoivt)服务实现层 + * {@code @Description:} 装箱区点位库存表(BstIvtPackageInfoIvt)服务实现层 * {@code @Author:} gbx * * @since 2024-01-24 */ @Service("bstIvtPackageinfoivtService") +@Slf4j public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl implements IbstIvtPackageinfoivtService { - - @Resource - private BstIvtPackageinfoivtMapper bstIvtPackageinfoivtMapper; + private RedissonClient redissonClient; @Resource private IschBaseTaskService taskService; + @Resource + private BstIvtPackageinfoivtMapper bstIvtPackageinfoivtMapper; /** @@ -60,15 +70,81 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl checkEndPointTask(String ivtType, String ivtStatus, String pointCode, String taskType) { - List packageinfoivtList = bstIvtPackageinfoivtMapper - .selectList(new LambdaUpdateWrapper() - .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) - .eq(BstIvtPackageinfoivt::getPoint_status, ivtType) - .eq(BstIvtPackageinfoivt::getIvt_status, ivtStatus) - .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); + public List checkEndPointTask(String ivtType, String ivtStatus, String pointCode, String sortType, String taskType) { + List packageinfoivtList = getBstIvtPackageinfoivts(ivtType, ivtStatus, sortType); + Set pointIds = packageinfoivtList.stream() + .map(BstIvtPackageinfoivt::getPoint_code) + .collect(Collectors.toSet()); + if (CollectionUtils.isEmpty(pointIds)) { + return null; + } + SFunction pointCodeType1; + SFunction pointCodeType2 = null; + if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"))) { + pointCodeType1 = SchBaseTask::getPoint_code1; + } else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"))) { + pointCodeType1 = SchBaseTask::getPoint_code2; + } else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货分配"))) { + pointCodeType1 = SchBaseTask::getPoint_code3; + } else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"))) { + pointCodeType1 = SchBaseTask::getPoint_code4; + } else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务取货分配"))) { + pointCodeType1 = SchBaseTask::getPoint_code1; + pointCodeType2 = SchBaseTask::getPoint_code3; + } else { + pointCodeType1 = SchBaseTask::getPoint_code2; + pointCodeType2 = SchBaseTask::getPoint_code4; + } + // 查询未完成任务 + LambdaQueryWrapper taskQueryWrapper = new LambdaQueryWrapper() + .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) + .in(pointCodeType1, pointIds); + if (pointCodeType2 != null) { + taskQueryWrapper = new LambdaQueryWrapper() + .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) + .in(pointCodeType1, pointIds).in(pointCodeType2, pointIds); + } + if (taskType != null && !taskType.isEmpty()) { + taskQueryWrapper.eq(SchBaseTask::getTask_type, taskType); + } + List taskList = taskService.list(taskQueryWrapper); + SFunction finalPointCodeType2 = pointCodeType2; + Set taskPointCodes = taskList.stream() + .flatMap(task -> { + Set pointCodeTypes = new HashSet<>(); + pointCodeTypes.add(pointCodeType1.apply(task)); + if (finalPointCodeType2 != null) { + pointCodeTypes.add(finalPointCodeType2.apply(task)); + } + return pointCodeTypes.stream(); + }) + .collect(Collectors.toSet()); + // 过滤未完成任务的任务 + return packageinfoivtList.stream() + .filter(packageInfo -> !taskPointCodes.contains(packageInfo.getPoint_code())) + .collect(Collectors.toList()); + + } + + private List getBstIvtPackageinfoivts(String ivtType, String ivtStatus, String sortType) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) + .eq(BstIvtPackageinfoivt::getPoint_status, ivtType) + .eq(BstIvtPackageinfoivt::getIvt_status, ivtStatus); + if (PackageInfoIvtEnum.SORT_TYPE.code("升序").equals(sortType)) { + queryWrapper.orderByAsc(BstIvtPackageinfoivt::getSort_seq); + } else if (PackageInfoIvtEnum.SORT_TYPE.code("降序").equals(sortType)) { + queryWrapper.orderByDesc(BstIvtPackageinfoivt::getSort_seq); + } else { + queryWrapper.orderByAsc(BstIvtPackageinfoivt::getSort_seq); + } + return bstIvtPackageinfoivtMapper.selectList(queryWrapper); + } + + + public List checkEndPointTask1(String ivtType, String ivtStatus, String pointCode, String sortType, String taskType) { + List packageinfoivtList = getBstIvtPackageinfoivts(ivtType, ivtStatus, sortType); Set pointIds = packageinfoivtList.stream().map(BstIvtPackageinfoivt::getPoint_code).collect(Collectors.toSet()); if (CollectionUtils.isEmpty(pointIds)) { return null; @@ -95,36 +171,228 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl checkEndPointTask1(String ivtType, String ivtStatus, String pointCode, String taskType) { - List packageinfoivtList = bstIvtPackageinfoivtMapper - .selectList(new LambdaQueryWrapper() - .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) - .eq(BstIvtPackageinfoivt::getPoint_status, ivtType) - .eq(BstIvtPackageinfoivt::getIvt_status, ivtStatus) - .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); - Set pointIds = packageinfoivtList.stream() - .map(BstIvtPackageinfoivt::getPoint_code) - .collect(Collectors.toSet()); - if (CollectionUtils.isEmpty(pointIds)) { - return null; + /** + * 获取等待点 + */ + @Override + public String getWaitPoint(String block, String waitPointType) { + List waitPointList = bstIvtPackageinfoivtMapper.selectList(new LambdaQueryWrapper() + .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) + .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("等待点")) + .eq(BstIvtPackageinfoivt::getBlock, block)); + if (CollectionUtils.isEmpty(waitPointList)) { + throw new BadRequestException("找不到等待点!"); } - //1起点2终点 - SFunction pointCodeType = pointCode.equals("1") ? SchBaseTask::getPoint_code1 : SchBaseTask::getPoint_code2; - // 查询未完成任务 - LambdaQueryWrapper taskQueryWrapper = new LambdaQueryWrapper() - .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) - .in(pointCodeType, pointIds); - if (taskType != null && !taskType.isEmpty()) { - taskQueryWrapper.eq(SchBaseTask::getTask_type, taskType); + List waitPoints = waitPointList.stream().filter(r -> r.getPoint_location().equals(waitPointType)).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(waitPoints)) { + throw new BadRequestException("找不到等待点!"); + } + return waitPoints.get(0).getPoint_code(); + } + + + /** + * @param taskCode 任务编码唯一ID + * @param actionType 1、取货分配 2、放货分配 3、取货完成 + * @author gbx + */ + @Transactional(rollbackFor = Exception.class) + @SneakyThrows + public Map secondaryAllocationPoint(String taskCode, String actionType) { + String pointCode = ""; + JSONObject result = new JSONObject(); + RLock lock = redissonClient.getLock(taskCode); + boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); + try { + if (tryLock) { + switch (actionType) { + case "1": + case "2": + // 取货分配, 放货分配 + pointCode = getNewPoint(taskCode, actionType); + break; + case "3": + // 取货完成 + updatePointStatus(taskCode, actionType); + break; + case "4": + // 放货完成,就是任务完成,不需要执行任何操作,但是取货任务的放货完成,需要改变updateTaskStatus:只更新终点库存; + //updatePointStatus(taskCode, pointType); + break; + default: + return null; + } + result.put("status", HttpStatus.OK.value()); + result.put("message", "操作成功!"); + result.put("data", pointCode); + log.info("一楼装箱区点位二次分配接口请求返回结果:---------------------------------------------" + result); + } else { + log.info("一楼装箱区点位二次分配接口异常,正在分配中!"); + result.put("status", HttpStatus.BAD_REQUEST.value()); + result.put("message", "二次分配点位正在分配中!"); + } + } finally { + if (tryLock) { + lock.unlock(); + } + } + return result; + } + + /** + * 根据取放货类型二次分配新的点位 + * + * @param taskCode 任务编号 + * @param actionType 动作类型 + * @return 新的点位 + */ + private String getNewPoint(String taskCode, String actionType) { + //执行中的任务 + SchBaseTask baseTask = taskService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTask::getTask_code, taskCode) + .eq(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode())); + if (baseTask == null) { + throw new BadRequestException("该任务未执行或不存在!"); + } + //1取货任务2放货任务 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) { + queryWrapper.eq(BstIvtPackageinfoivt::getPoint_code, baseTask.getPoint_code3()); + } else if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("放货分配").equals(actionType)) { + queryWrapper.eq(BstIvtPackageinfoivt::getPoint_code, baseTask.getPoint_code4()); + } + BstIvtPackageinfoivt bstIvtPackageinfoivt = bstIvtPackageinfoivtMapper.selectOne(queryWrapper); + //根据任务类型返回点位分配规则 + BstIvtPackageinfoivt ivtInfo = getIvtInfoFromRegion(baseTask.getTask_type(), actionType); + List newPointList = getBstIvtPackageinfoivts(bstIvtPackageinfoivt.getPoint_status(), ivtInfo.getIvt_status(), ivtInfo.getSort_seq().toString()); + if (CollectionUtils.isEmpty(newPointList)) { + throw new BadRequestException("暂无点位资源!"); + } + BstIvtPackageinfoivt point = newPointList.get(0); + if (point != null) { + //更新任务起点或终点 + if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) { + baseTask.setPoint_code1(point.getPoint_code()); + if (StringUtils.isNotBlank(point.getContainer_name())) { + //更新子卷号 + baseTask.setVehicle_code(point.getContainer_name()); + } + } else if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("放货分配").equals(actionType)) { + baseTask.setPoint_code2(point.getPoint_code()); + } + taskService.updateById(baseTask); + return point.getPoint_code(); + } else { + return ""; + } + } + + + /** + * 二次分配逻辑,根据任务类型与acs申请动作类型返回点位分配规则 + */ + public BstIvtPackageinfoivt getIvtInfoFromRegion(String taskType, String actionType) { + BstIvtPackageinfoivt bstIvtPackageinfoivt = new BstIvtPackageinfoivt(); + switch (taskType) { + //满轴缓存位->待检区 + case "010902": + if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) { + bstIvtPackageinfoivt.setIvt_status(PackageInfoIvtEnum.IVT_STATUS.code("有子卷")); + bstIvtPackageinfoivt.setSort_seq(BigDecimal.valueOf(PackageInfoIvtEnum.SORT_TYPE.longCode("降序"))); + } else { + bstIvtPackageinfoivt.setIvt_status(PackageInfoIvtEnum.IVT_STATUS.code("空")); + bstIvtPackageinfoivt.setSort_seq(BigDecimal.valueOf(PackageInfoIvtEnum.SORT_TYPE.longCode("降序"))); + } + break; + //待检区->管制区 + case "010906": + if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) { + bstIvtPackageinfoivt.setIvt_status(PackageInfoIvtEnum.IVT_STATUS.code("管制品")); + bstIvtPackageinfoivt.setSort_seq(BigDecimal.valueOf(PackageInfoIvtEnum.SORT_TYPE.longCode("升序"))); + } else { + bstIvtPackageinfoivt.setIvt_status(PackageInfoIvtEnum.IVT_STATUS.code("空")); + bstIvtPackageinfoivt.setSort_seq(BigDecimal.valueOf(PackageInfoIvtEnum.SORT_TYPE.longCode("升序"))); + } + break; + //管制区->待检区 + case "010907": + if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) { + bstIvtPackageinfoivt.setIvt_status(PackageInfoIvtEnum.IVT_STATUS.code("合格品")); + bstIvtPackageinfoivt.setSort_seq(BigDecimal.valueOf(PackageInfoIvtEnum.SORT_TYPE.longCode("降序"))); + } else { + bstIvtPackageinfoivt.setIvt_status(PackageInfoIvtEnum.IVT_STATUS.code("空")); + bstIvtPackageinfoivt.setSort_seq(BigDecimal.valueOf(PackageInfoIvtEnum.SORT_TYPE.longCode("升序"))); + } + break; + //补空(待检区->空载具缓存位) + case "010905": + if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) { + bstIvtPackageinfoivt.setIvt_status(PackageInfoIvtEnum.IVT_STATUS.code("空载具")); + bstIvtPackageinfoivt.setSort_seq(BigDecimal.valueOf(PackageInfoIvtEnum.SORT_TYPE.longCode("升序"))); + } else { + bstIvtPackageinfoivt.setIvt_status(PackageInfoIvtEnum.IVT_STATUS.code("空")); + bstIvtPackageinfoivt.setSort_seq(BigDecimal.valueOf(PackageInfoIvtEnum.SORT_TYPE.longCode("降序"))); + } + break; + //"补空(装箱区->待检区) + case "010910": + if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) { + bstIvtPackageinfoivt.setIvt_status(PackageInfoIvtEnum.IVT_STATUS.code("空")); + bstIvtPackageinfoivt.setSort_seq(BigDecimal.valueOf(PackageInfoIvtEnum.SORT_TYPE.longCode("升序"))); + + } else { + bstIvtPackageinfoivt.setIvt_status(PackageInfoIvtEnum.IVT_STATUS.code("空")); + bstIvtPackageinfoivt.setSort_seq(BigDecimal.valueOf(PackageInfoIvtEnum.SORT_TYPE.longCode("升序"))); + } + break; + //补空(装箱区->管制区) + case "010912": + if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) { + bstIvtPackageinfoivt.setIvt_status(PackageInfoIvtEnum.IVT_STATUS.code("空载具")); + bstIvtPackageinfoivt.setSort_seq(BigDecimal.valueOf(PackageInfoIvtEnum.SORT_TYPE.longCode("升序"))); + } else { + bstIvtPackageinfoivt.setIvt_status(PackageInfoIvtEnum.IVT_STATUS.code("空")); + bstIvtPackageinfoivt.setSort_seq(BigDecimal.valueOf(PackageInfoIvtEnum.SORT_TYPE.longCode("升序"))); + } + break; + //补空(管制区->空载具缓存位) + case "010913": + if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) { + bstIvtPackageinfoivt.setIvt_status(PackageInfoIvtEnum.IVT_STATUS.code("空载具")); + bstIvtPackageinfoivt.setSort_seq(BigDecimal.valueOf(PackageInfoIvtEnum.SORT_TYPE.longCode("降序"))); + } else { + bstIvtPackageinfoivt.setIvt_status(PackageInfoIvtEnum.IVT_STATUS.code("空")); + bstIvtPackageinfoivt.setSort_seq(BigDecimal.valueOf(PackageInfoIvtEnum.SORT_TYPE.longCode("降序"))); + } + break; + default: + return null; + } + return bstIvtPackageinfoivt; + } + + + /** + * 更新点位状态 + * + * @param taskCode 任务编码 + * @param actionType 动作类型 + */ + private void updatePointStatus(String taskCode, String actionType) { + SchBaseTask baseTask = taskService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTask::getTask_code, taskCode) + .eq(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode())); + if (baseTask == null) { + throw new BadRequestException("任务不存在!"); + } + //取货任务 + if (actionType.equals(PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货完成"))) { + //清空起点库存状态 + bstIvtPackageinfoivtMapper.update(null, new UpdateWrapper() + .setSql("ivt_status = null, container_name = '0'") + .eq("point_code", baseTask.getPoint_code1())); + } - List taskList = taskService.list(taskQueryWrapper); - Set taskPointCodes = taskList.stream() - .map(pointCodeType) - .collect(Collectors.toSet()); - // 过滤未完成任务的任务 - return packageinfoivtList.stream() - .filter(packageInfo -> !taskPointCodes.contains(packageInfo.getPoint_code())) - .collect(Collectors.toList()); } @@ -141,7 +409,6 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); + //2.改变起点点位状态,二次分配,取货完成就改起点库存 + //packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); //3更新库存记录 //todo 暂时改为质检合格品 packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2())); + //清除首次分配目标点位 + schBaseTask.setPoint_code3(""); //4.判断是否存在确定起点的输送线->满轴缓存位任务,存在就下发任务 List taskList = taskService.list(new LambdaQueryWrapper() //确定起点未下发 @@ -198,7 +199,7 @@ public class DjqTask extends AbstractAcsTask { public void sendDjqToZxq(SchBaseTask schBaseTask) { //装箱区有空位 - List bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), "2", ""); + List bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空"),PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "",""); if (CollectionUtils.isNotEmpty(bstIvtPackageinfoivtList)) { Map> ivtList = bstIvtPackageinfoivtList.stream() .collect(Collectors.groupingBy( diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqToKzjhcwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqToKzjhcwTask.java new file mode 100644 index 000000000..0d5625916 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqToKzjhcwTask.java @@ -0,0 +1,297 @@ +package org.nl.b_lms.sch.tasks.first_floor_area; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.BooleanUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; +import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.nl.b_lms.sch.task.dto.SchBaseTaskVO; +import org.nl.b_lms.sch.task.service.IschBaseTaskService; +import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; +import org.nl.common.enums.PackageInfoIvtEnum; +import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.wms.sch.AcsTaskDto; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + + +/** + * 3 目标空载具缓存位, 待检区->空载具缓存位补空agv任务 + * + * @author gbx + * @since 2024-01-24 + */ +@Service() +@RequiredArgsConstructor +@Slf4j +public class DjqToKzjhcwTask extends AbstractAcsTask { + + + private final String THIS_CLASS = DjqToKzjhcwTask.class.getName(); + @Resource + private IschBaseTaskService taskService; + + @Resource + private IbstIvtPackageinfoivtService packageinfoivtService; + + + @Resource + private SsxDjwTask ssxDjwTask; + + + @Override + public List addTask() { + ArrayList resultList = new ArrayList<>(); + List taskList = taskService.list(new LambdaUpdateWrapper().eq(SchBaseTask::getHandle_class, THIS_CLASS) + .eq(SchBaseTask::getTask_status, TaskStatusEnum.START_AND_POINT.getCode()) + .eq(SchBaseTask::getIs_delete, 0) + ); + taskList.forEach(r -> { + AcsTaskDto dto = AcsTaskDto.builder() + .ext_task_id(r.getTask_id().toString()) + .task_code(r.getTask_code()) + .task_type(r.getAcs_task_type()) + .start_device_code(r.getPoint_code1()) + .next_device_code(r.getPoint_code2()) + .vehicle_code(r.getVehicle_code()) + .priority(r.getPriority()) + .remark(r.getRemark()) + .product_area(r.getProduct_area()) + .agv_action_type(r.getVehicle_code2()) + .agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼诺宝任务")) + .interaction_json(JSON.parseObject(r.getRequest_param())) + .build(); + resultList.add(dto); + }); + return resultList; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateTaskStatus(JSONObject taskObj, String status) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false); + if (schBaseTask == null) { + throw new BadRequestException("待检区->空载具缓存位完成接口任务号为空!"); + } + if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { + // 更新任务状态为执行中 + schBaseTask.setTask_status(TaskStatusEnum.EXECUTING.getCode()); + } + if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { + //1.更改任务状态为完成 + schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode()); + //2.改变起点点位状态 + packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); + //清除首次分配目标点位 + schBaseTask.setPoint_code4(""); + //更新库存记录 + packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空载具")).eq("point_code", schBaseTask.getPoint_code2())); + //3.待检区或管制区搬运空载具到空载具缓存位完毕,判断是否存在确定终点的空载具缓存位->输送线任务,存在就下发任务 + List taskList = taskService.list(new LambdaQueryWrapper() + //确定终点未下发 + .eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_END.getCode()) + .eq(SchBaseTask::getPoint_code2, "NBJ1002") + .eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)")).eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")) + ); + if (CollectionUtils.isNotEmpty(taskList)) { + SchBaseTask task = taskList.get(0); + task.setPoint_code1(schBaseTask.getPoint_code2()); + task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); + task.setUpdate_time(DateUtil.now()); + task.setUpdate_optid(SecurityUtils.getCurrentUserId()); + task.setUpdate_optname(SecurityUtils.getCurrentNickName()); + taskService.update(task); + //任务下发 + ssxDjwTask.immediateNotifyAcs(task.getTask_id().toString()); + } + } + // 取消 + if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { + if (Integer.parseInt(schBaseTask.getTask_status()) > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) { + throw new BadRequestException("任务已执行不能取消"); + } + //任务被标记为取消 + schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + } + schBaseTask.setUpdate_time(DateUtil.now()); + schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); + schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); + taskService.update(schBaseTask); + } + + @Override + public String createTask(JSONObject form) { + Assert.notNull(form, "请求参数不能为空"); + String taskType = form.getString("task_type"); + if (StrUtil.isBlank(taskType)) { + throw new BadRequestException("业务类型不能为空"); + } + String vehicleCode = form.getString("vehicle_code"); + // if (StrUtil.isBlank(vehicleCode)) { + // throw new BadRequestException("载具号不能为空"); + // } + String pointCode1 = form.getString("point_code1"); + if (StrUtil.isBlank(pointCode1)) { + throw new BadRequestException("起点不能为空"); + } + String pointCode2 = form.getString("point_code2"); + if (StrUtil.isBlank(pointCode2)) { + throw new BadRequestException("下一点不能为空"); + } + //是否立即下发 + boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send")); + SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder() + .task_type(taskType) + .vehicle_code(vehicleCode) + .vehicle_code2(form.getString("vehicle_code2")) + .point_code1(pointCode1) + .point_code2(pointCode2) + .point_code3(form.getString("point_code3")) + .point_code4(form.getString("point_code4")) + .task_id(org.nl.common.utils.IdUtil.getStringId()) + .task_code(org.nl.common.utils.IdUtil.getStringId()) + .handle_class(THIS_CLASS) + .create_id(SecurityUtils.getCurrentUserId()) + .create_name(SecurityUtils.getCurrentUsername()) + .create_time(DateUtil.now()) + .is_send(isSend ? "1" : "0") + .acs_task_type(StrUtil.isEmpty(form.getString("acs_task_type")) ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : form.getString("acs_task_type")) + .task_status(StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")) + .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "BLK" : form.getString("product_area")) + .build(); + SchBaseTask task = new SchBaseTask(); + BeanUtils.copyProperties(schBaseTaskVo, task); + taskService.save(task); + //如果目标点位没有空位先创建不下发 + if (isSend) { + this.immediateNotifyAcs(null); + } + return task.getTask_id(); + } + + + @Override + @Transactional + public void forceFinish(String taskId) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(SchBaseTask::getTask_id, taskId), false); + if (schBaseTask == null) { + throw new BadRequestException("待检区->空载具缓存位强制完成接口任务号为空!"); + } + updateTaskStatus(JSONObject.parseObject(JSON.toJSONString(schBaseTask)), TaskStatusEnum.FINISHED.getCode()); + } + + + @Override + public void cancel(String taskId) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(SchBaseTask::getTask_id, taskId), false); + if (schBaseTask == null) { + throw new BadRequestException("待检区->空载具缓存位取消接口任务号为空!"); + } + schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + schBaseTask.setUpdate_time(DateUtil.now()); + schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); + schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); + taskService.update(schBaseTask); + } + + // /** + // * 装箱区->空载具缓存位补空 + // */ + // public void toKzjHcw1(String pointCode) { + // //存在空载具缓存位无空载具的点位 + // List kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"), "", ""); + // String pointCode1 = null; + // JSONObject task = new JSONObject(); + // if (StringUtils.isNotBlank(pointCode)) { + // pointCode1 = pointCode; + // } else { + // //待检区有空载具且过滤未完成任务 + // List djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务取货分配"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), ""); + // if (CollectionUtils.isNotEmpty(djqPackageinfoivtList)) { + // //无二次分配 + // List notNeedAllocation = djqPackageinfoivtList.stream().filter(r -> !r.getWait_point_type().equals(PackageInfoIvtEnum.WAIT_POINT_TYPE.code("待检区等待点"))).collect(Collectors.toList()); + // if (CollectionUtils.isNotEmpty(notNeedAllocation)) { + // pointCode1 = notNeedAllocation.get(0).getPoint_code(); + // task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("放货二次分配")); + // } else { + // if (CollectionUtils.isNotEmpty(djqPackageinfoivtList)) { + // pointCode1 = packageinfoivtService.getWaitPoint(djqPackageinfoivtList.get(0).getBlock(), djqPackageinfoivtList.get(0).getWait_point_type()); + // task.put("vehicle_code1", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取放货二次分配")); + // task.put("point_code3", djqPackageinfoivtList.get(0).getPoint_code()); + // } + // } + // } else { + // //管制区有空位 + // List gzqList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货分配"), "", ""); + // if (CollectionUtils.isNotEmpty(gzqList)) { + // //需要二次分配,起点分配等待点 + // pointCode1 = packageinfoivtService.getWaitPoint(gzqList.get(0).getBlock(), gzqList.get(0).getWait_point_type()); + // task.put("point_code3", gzqList.get(0).getPoint_code()); + // task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取放货二次分配")); + // } + // } + // //去待检区或管制区搬运空载具 + // if (CollectionUtils.isNotEmpty(kzjIvtList) && pointCode1 != null) { + // task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")); + // task.put("point_code1", pointCode1); + // //送空二次分配,目标点分配等待点 + // task.put("point_code4", kzjIvtList.get(0).getPoint_code()); + // task.put("point_code2", packageinfoivtService.getWaitPoint(kzjIvtList.get(0).getBlock(), kzjIvtList.get(0).getWait_point_type())); + // this.createTask(task); + // } + // } + // } + // + // public void toKzjHcw(String pointCode) { + // //存在空载具缓存位无空载具的点位 + // List kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), ""); + // String pointCode1 = null; + // JSONObject toKzjHcwTask = new JSONObject(); + // if (StringUtils.isNotBlank(pointCode)) { + // pointCode1 = pointCode; + // } else { + // //查询装箱区有空载具 + // List zxqPointList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", ""); + // //装箱区有空载具 + // if (CollectionUtils.isNotEmpty(zxqPointList)) { + // pointCode1 = zxqPointList.get(0).getPoint_code(); + // } else { + // //待检区有空载具 + // List djqPointList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", ""); + // if (CollectionUtils.isNotEmpty(djqPointList)) { + // pointCode1 = djqPointList.get(0).getPoint_code(); + // } + // } + // } + // //去装箱区搬运空载具 + // if (CollectionUtils.isNotEmpty(kzjIvtList) && pointCode1 != null) { + // toKzjHcwTask.put("point_code1", pointCode1); + // //送到到任意空载具缓存位 + // toKzjHcwTask.put("point_code2", kzjIvtList.get(0).getPoint_code()); + // toKzjHcwTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")); + // this.createTask(toKzjHcwTask); + // } + // } + } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java index 930b9e5ef..7e2097f9e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java @@ -69,6 +69,7 @@ public class GzqTask extends AbstractAcsTask { .priority(r.getPriority()) .remark(r.getRemark()) .product_area(r.getProduct_area()) + .agv_action_type(r.getVehicle_code2()) .agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼诺宝任务")) //.truss_type(PackageInfoIvtEnum.TRUSS_TYPE.code("点对点任务")) //.dtl_type(r.getDtl_type()) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/KzjhcwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqToKzjhcwTask.java similarity index 65% rename from lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/KzjhcwTask.java rename to lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqToKzjhcwTask.java index db3c611fe..6d1d6db3e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/KzjhcwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqToKzjhcwTask.java @@ -32,10 +32,11 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** - * 3 目标空载具缓存位, 待检区或管制区 -> 空载具缓存位补空agv任务 + * 3 目标空载具缓存位, 管制区->空载具缓存位补空agv任务 * * @author gbx * @since 2024-01-24 @@ -43,15 +44,17 @@ import java.util.List; @Service() @RequiredArgsConstructor @Slf4j -public class KzjhcwTask extends AbstractAcsTask { +public class GzqToKzjhcwTask extends AbstractAcsTask { - private final String THIS_CLASS = KzjhcwTask.class.getName(); + private final String THIS_CLASS = GzqToKzjhcwTask.class.getName(); @Resource private IschBaseTaskService taskService; @Resource private IbstIvtPackageinfoivtService packageinfoivtService; + + @Resource private SsxDjwTask ssxDjwTask; @@ -70,12 +73,11 @@ public class KzjhcwTask extends AbstractAcsTask { .task_type(r.getAcs_task_type()) .start_device_code(r.getPoint_code1()) .next_device_code(r.getPoint_code2()) - .start_device_code2(r.getPoint_code3()) - .next_device_code2(r.getPoint_code4()) .vehicle_code(r.getVehicle_code()) .priority(r.getPriority()) .remark(r.getRemark()) .product_area(r.getProduct_area()) + .agv_action_type(r.getVehicle_code2()) .agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼诺宝任务")) .interaction_json(JSON.parseObject(r.getRequest_param())) .build(); @@ -89,7 +91,7 @@ public class KzjhcwTask extends AbstractAcsTask { public void updateTaskStatus(JSONObject taskObj, String status) { SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false); if (schBaseTask == null) { - throw new BadRequestException("待检区或管制区 -> 空载具缓存位完成接口任务号为空!"); + throw new BadRequestException("管制区->空载具缓存位完成接口任务号为空!"); } if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { // 更新任务状态为执行中 @@ -100,6 +102,8 @@ public class KzjhcwTask extends AbstractAcsTask { schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode()); //2.改变起点点位状态 packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); + //清除首次分配目标点位 + schBaseTask.setPoint_code4(""); //更新库存记录 packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空载具")).eq("point_code", schBaseTask.getPoint_code2())); //3.待检区或管制区搬运空载具到空载具缓存位完毕,判断是否存在确定终点的空载具缓存位->输送线任务,存在就下发任务 @@ -192,7 +196,7 @@ public class KzjhcwTask extends AbstractAcsTask { SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() .eq(SchBaseTask::getTask_id, taskId), false); if (schBaseTask == null) { - throw new BadRequestException("待检区或管制区 -> 空载具缓存位强制完成接口任务号为空!"); + throw new BadRequestException("管制区->空载具缓存位强制完成接口任务号为空!"); } updateTaskStatus(JSONObject.parseObject(JSON.toJSONString(schBaseTask)), TaskStatusEnum.FINISHED.getCode()); } @@ -203,7 +207,7 @@ public class KzjhcwTask extends AbstractAcsTask { SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() .eq(SchBaseTask::getTask_id, taskId), false); if (schBaseTask == null) { - throw new BadRequestException("待检区或管制区 -> 空载具缓存位取消接口任务号为空!"); + throw new BadRequestException("管制区->空载具缓存位取消接口任务号为空!"); } schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); schBaseTask.setUpdate_time(DateUtil.now()); @@ -212,75 +216,5 @@ public class KzjhcwTask extends AbstractAcsTask { taskService.update(schBaseTask); } - /** - * 装箱区->空载具缓存位补空 - */ - public void toKzjHcw1(String pointCode) { - //存在空载具缓存位无空载具的点位 - List kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空"), "2", ""); - String pointCode1 = null; - JSONObject toKzjHcwTask = new JSONObject(); - if (StringUtils.isNotBlank(pointCode)) { - pointCode1 = pointCode; - } else { - //查询待检区有空载具 - List djqPointList = packageinfoivtService - .list(new LambdaUpdateWrapper() - .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("待检区")) - .eq(BstIvtPackageinfoivt::getIs_used, IOSEnum.IS_NOTANDYES.code("是")) - .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空载具")).orderByAsc(BstIvtPackageinfoivt::getSort_seq)); - if (CollectionUtils.isNotEmpty(djqPointList)) { - pointCode1 = djqPointList.get(0).getPoint_code(); - } else { - //去管制区搬运空载具 - List gzqPointList = packageinfoivtService - .list(new LambdaUpdateWrapper() - .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("管制区")) - .eq(BstIvtPackageinfoivt::getIs_used, IOSEnum.IS_NOTANDYES.code("是")) - .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空载具")).orderByAsc(BstIvtPackageinfoivt::getSort_seq)); - if (CollectionUtils.isNotEmpty(gzqPointList)) { - pointCode1 = gzqPointList.get(0).getPoint_code(); - } - } - //去待检区或管制区搬运空载具 - if (CollectionUtils.isNotEmpty(kzjIvtList) && pointCode1 != null) { - toKzjHcwTask.put("point_code1", pointCode1); - //送到到任意空载具缓存位 - toKzjHcwTask.put("point_code2", kzjIvtList.get(0).getPoint_code()); - toKzjHcwTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("取空(待检区或管制区->空载具缓存位)")); - this.createTask(toKzjHcwTask); - } - } - } - public void toKzjHcw(String pointCode) { - //存在空载具缓存位无空载具的点位 - List kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空"), "2", ""); - String pointCode1 = null; - JSONObject toKzjHcwTask = new JSONObject(); - if (StringUtils.isNotBlank(pointCode)) { - pointCode1 = pointCode; - } else { - //查询装箱区有空载具 - List zxqPointList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), "1", ""); - //装箱区有空载具 - if (CollectionUtils.isNotEmpty(zxqPointList)) { - pointCode1 = zxqPointList.get(0).getPoint_code(); - } else { - //待检区有空载具 - List djqPointList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), "1", ""); - if (CollectionUtils.isNotEmpty(djqPointList)) { - pointCode1 = djqPointList.get(0).getPoint_code(); - } - } - } - //去装箱区搬运空载具 - if (CollectionUtils.isNotEmpty(kzjIvtList) && pointCode1 != null) { - toKzjHcwTask.put("point_code1", pointCode1); - //送到到任意空载具缓存位 - toKzjHcwTask.put("point_code2", kzjIvtList.get(0).getPoint_code()); - toKzjHcwTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("取空(待检区或管制区->空载具缓存位)")); - this.createTask(toKzjHcwTask); - } - } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java index 8647258a0..f92fcf7e6 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java @@ -69,7 +69,7 @@ public class MzhcwTask extends AbstractAcsTask { @Resource - private KzjhcwTask kzjhcwTask; + private DjqToKzjhcwTask djqToKzjhcwTask; @Resource private SsxDjwTask ssxDjwTask; @@ -95,6 +95,7 @@ public class MzhcwTask extends AbstractAcsTask { .priority(r.getPriority()) .remark(r.getRemark()) .product_area(r.getProduct_area()) + .agv_action_type(PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务")) .interaction_json(JSON.parseObject(r.getRequest_param())) .build(); resultList.add(dto); @@ -199,12 +200,12 @@ public class MzhcwTask extends AbstractAcsTask { toKzjHcwTask.put("point_code1", djqOrGzqPointList.get(0).getPoint_code()); } - toKzjHcwTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("取空(待检区或管制区->空载具缓存位)")); + toKzjHcwTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")); //送到到任意空载具缓存位 toKzjHcwTask.put("point_code2", kzjPoint.get(0).getPoint_code()); //toKzjHcwTask.put("vehicle_code", containerInfo.getContainer_name()); toKzjHcwTask.put("vehicle_code", schBaseTask.getVehicle_code()); - kzjhcwTask.createTask(toKzjHcwTask); + djqToKzjhcwTask.createTask(toKzjHcwTask); } } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendKzjTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendDjqKzjTask.java similarity index 91% rename from lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendKzjTask.java rename to lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendDjqKzjTask.java index 1212b86aa..4935afadb 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendKzjTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendDjqKzjTask.java @@ -31,7 +31,7 @@ import java.util.ArrayList; import java.util.List; /** - * 7 目标待检区, 装箱区 -> 待检区或管制区送空载具,agv任务 + * 7 目标待检区, 装箱区 -> 待检区送空载具,agv任务 * * @author gbx * @since 2024-01-24 @@ -39,13 +39,13 @@ import java.util.List; @Service() @RequiredArgsConstructor @Slf4j -public class SendKzjTask extends AbstractAcsTask { +public class SendDjqKzjTask extends AbstractAcsTask { @Resource private IschBaseTaskService taskService; @Resource private IbstIvtPackageinfoivtService packageinfoivtService; - private final String THIS_CLASS = SendKzjTask.class.getName(); + private final String THIS_CLASS = SendDjqKzjTask.class.getName(); @Override public List addTask() { @@ -67,6 +67,7 @@ public class SendKzjTask extends AbstractAcsTask { .priority(r.getPriority()) .remark(r.getRemark()) .product_area(r.getProduct_area()) + .agv_action_type(r.getVehicle_code2()) .agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼诺宝任务")) .interaction_json(JSON.parseObject(r.getRequest_param())) .build(); @@ -80,7 +81,7 @@ public class SendKzjTask extends AbstractAcsTask { public void updateTaskStatus(JSONObject taskObj, String status) { SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false); if (schBaseTask == null) { - throw new BadRequestException("装箱区->待检区或管制区送空载具完成接口任务号为空!"); + throw new BadRequestException("装箱区->待检区送空载具完成接口任务号为空!"); } if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { // 更新任务状态为执行中 @@ -116,9 +117,9 @@ public class SendKzjTask extends AbstractAcsTask { throw new BadRequestException("业务类型不能为空"); } String vehicleCode = form.getString("vehicle_code"); - if (StrUtil.isBlank(vehicleCode)) { - throw new BadRequestException("载具号不能为空"); - } + // if (StrUtil.isBlank(vehicleCode)) { + // throw new BadRequestException("载具号不能为空"); + // } String pointCode1 = form.getString("point_code1"); if (StrUtil.isBlank(pointCode1)) { throw new BadRequestException("起点不能为空"); @@ -165,7 +166,7 @@ public class SendKzjTask extends AbstractAcsTask { SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() .eq(SchBaseTask::getTask_id, taskId), false); if (schBaseTask == null) { - throw new BadRequestException("装箱区->待检区或管制区送空载具强制完成接口任务号为空!"); + throw new BadRequestException("装箱区->待检区送空载具强制完成接口任务号为空!"); } updateTaskStatus(JSONObject.parseObject(JSON.toJSONString(schBaseTask)), TaskStatusEnum.FINISHED.getCode()); } @@ -176,7 +177,7 @@ public class SendKzjTask extends AbstractAcsTask { SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() .eq(SchBaseTask::getTask_id, taskId), false); if (schBaseTask == null) { - throw new BadRequestException("装箱区->待检区或管制区送空载具取消接口任务号为空!"); + throw new BadRequestException("装箱区->待检区送空载具取消接口任务号为空!"); } schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); schBaseTask.setUpdate_time(DateUtil.now()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendGzqKzjTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendGzqKzjTask.java new file mode 100644 index 000000000..7278fd2e4 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendGzqKzjTask.java @@ -0,0 +1,190 @@ +package org.nl.b_lms.sch.tasks.first_floor_area; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.BooleanUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; +import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.nl.b_lms.sch.task.dto.SchBaseTaskVO; +import org.nl.b_lms.sch.task.service.IschBaseTaskService; +import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; +import org.nl.common.enums.PackageInfoIvtEnum; +import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.wms.sch.AcsTaskDto; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * 7 目标管制区, 装箱区 -> 管制区送空载具,agv任务 + * + * @author gbx + * @since 2024-01-24 + */ +@Service() +@RequiredArgsConstructor +@Slf4j +public class SendGzqKzjTask extends AbstractAcsTask { + @Resource + private IschBaseTaskService taskService; + @Resource + private IbstIvtPackageinfoivtService packageinfoivtService; + + private final String THIS_CLASS = SendGzqKzjTask.class.getName(); + + @Override + public List addTask() { + ArrayList resultList = new ArrayList<>(); + List taskList = taskService.list(new LambdaUpdateWrapper().eq(SchBaseTask::getHandle_class, THIS_CLASS) + .eq(SchBaseTask::getTask_status, TaskStatusEnum.START_AND_POINT.getCode()) + .eq(SchBaseTask::getIs_delete, 0) + ); + taskList.forEach(r -> { + AcsTaskDto dto = AcsTaskDto.builder() + .ext_task_id(r.getTask_id().toString()) + .task_code(r.getTask_code()) + .task_type(r.getAcs_task_type()) + .start_device_code(r.getPoint_code1()) + .next_device_code(r.getPoint_code2()) + .start_device_code2(r.getPoint_code3()) + .next_device_code2(r.getPoint_code4()) + .vehicle_code(r.getVehicle_code()) + .priority(r.getPriority()) + .remark(r.getRemark()) + .product_area(r.getProduct_area()) + .agv_action_type(r.getVehicle_code2()) + .agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼诺宝任务")) + .interaction_json(JSON.parseObject(r.getRequest_param())) + .build(); + resultList.add(dto); + }); + return resultList; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateTaskStatus(JSONObject taskObj, String status) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false); + if (schBaseTask == null) { + throw new BadRequestException("装箱区->管制区送空载具完成接口任务号为空!"); + } + if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { + // 更新任务状态为执行中 + schBaseTask.setTask_status(TaskStatusEnum.EXECUTING.getCode()); + } + if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { + //1.更改任务状态为完成 + schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode()); + //2.改变起点点位状态 + packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); + //3.更新库存记录 + packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空载具")).eq("point_code", schBaseTask.getPoint_code2())); + } + // 取消 + if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { + if (Integer.parseInt(schBaseTask.getTask_status()) > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) { + throw new BadRequestException("任务已执行不能取消"); + } + //任务被标记为取消 + schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + } + schBaseTask.setUpdate_time(DateUtil.now()); + schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); + schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); + taskService.update(schBaseTask); + } + + @Override + public String createTask(JSONObject form) { + Assert.notNull(form, "请求参数不能为空"); + String taskType = form.getString("task_type"); + if (StrUtil.isBlank(taskType)) { + throw new BadRequestException("业务类型不能为空"); + } + String vehicleCode = form.getString("vehicle_code"); + // if (StrUtil.isBlank(vehicleCode)) { + // throw new BadRequestException("载具号不能为空"); + // } + String pointCode1 = form.getString("point_code1"); + if (StrUtil.isBlank(pointCode1)) { + throw new BadRequestException("起点不能为空"); + } + String pointCode2 = form.getString("point_code2"); + if (StrUtil.isBlank(pointCode2)) { + throw new BadRequestException("下一点不能为空"); + } + //是否立即下发 + boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send")); + SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder() + .task_type(taskType) + .vehicle_code(vehicleCode) + .vehicle_code2(form.getString("vehicle_code2")) + .point_code1(pointCode1) + .point_code2(pointCode2) + .point_code3(form.getString("point_code3")) + .point_code4(form.getString("point_code4")) + .task_id(org.nl.common.utils.IdUtil.getStringId()) + .task_code(org.nl.common.utils.IdUtil.getStringId()) + .handle_class(THIS_CLASS) + .create_id(SecurityUtils.getCurrentUserId()) + .create_name(SecurityUtils.getCurrentUsername()) + .create_time(DateUtil.now()) + .is_send(isSend ? "1" : "0") + .acs_task_type(StrUtil.isEmpty(form.getString("acs_task_type")) ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : form.getString("acs_task_type")) + .task_status(StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")) + .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "BLK" : form.getString("product_area")) + .build(); + SchBaseTask task = new SchBaseTask(); + BeanUtils.copyProperties(schBaseTaskVo, task); + taskService.save(task); + //如果目标点位没有空位先创建不下发 + if (isSend) { + this.immediateNotifyAcs(null); + } + return task.getTask_id(); + } + + + @Override + @Transactional + public void forceFinish(String taskId) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(SchBaseTask::getTask_id, taskId), false); + if (schBaseTask == null) { + throw new BadRequestException("装箱区->管制区送空载具强制完成接口任务号为空!"); + } + updateTaskStatus(JSONObject.parseObject(JSON.toJSONString(schBaseTask)), TaskStatusEnum.FINISHED.getCode()); + } + + + @Override + public void cancel(String taskId) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(SchBaseTask::getTask_id, taskId), false); + if (schBaseTask == null) { + throw new BadRequestException("装箱区->管制区送空载具取消接口任务号为空!"); + } + schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + schBaseTask.setUpdate_time(DateUtil.now()); + schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); + schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); + taskService.update(schBaseTask); + } + + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java index 65eb95275..085e9cf44 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java @@ -71,6 +71,7 @@ public class SsxDjwTask extends AbstractAcsTask { .vehicle_code(r.getVehicle_code()) .priority(r.getPriority()) .remark(r.getRemark()) + .agv_action_type(PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务")) .product_area(r.getProduct_area()) .interaction_json(JSON.parseObject(r.getRequest_param())) .build(); @@ -105,7 +106,7 @@ public class SsxDjwTask extends AbstractAcsTask { // //有空载具,创建搬运空载具任务 // if (CollectionUtils.isNotEmpty(zxqPointList)) { // JSONObject toKzjhcwTask = new JSONObject(); - // toKzjhcwTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("取空(待检区或管制区->空载具缓存位)")); + // toKzjhcwTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")); // toKzjhcwTask.put("point_code1", zxqPointList.get(0).getPoint_code()); // //任务起点为补空载具终点 // toKzjhcwTask.put("point_code2", schBaseTask.getPoint_code1()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java index e829f8d1d..f5adf7673 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java @@ -12,7 +12,6 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation; @@ -38,7 +37,6 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; /** * 6 目标装箱对接位, 装箱区 -> 装箱对接位,桁架任务 @@ -52,7 +50,7 @@ import java.util.stream.Collectors; public class ZxDjwTask extends AbstractAcsTask { @Resource - private KzjhcwTask kzjhcwTask; + private DjqToKzjhcwTask djqToKzjhcwTask; @Resource private DjqTask djqTask; @Resource @@ -85,6 +83,7 @@ public class ZxDjwTask extends AbstractAcsTask { .start_device_code2(r.getPoint_code3()) .next_device_code2(r.getPoint_code4()) .vehicle_code(r.getVehicle_code()) + .agv_action_type(PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务")) .interaction_json(JSON.parseObject(r.getRequest_param())) .priority(r.getPriority()) .remark(r.getRemark()) @@ -148,8 +147,8 @@ public class ZxDjwTask extends AbstractAcsTask { } //任务被标记为取消 schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + schBaseTask.setRemark("任务被强制取消,不执行任何逻辑!"); } - schBaseTask.setRemark("任务被强制取消,不执行任何逻辑!"); schBaseTask.setUpdate_time(DateUtil.now()); schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java index eac540018..b64698f16 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java @@ -99,6 +99,7 @@ public class ZxqTask extends AbstractAcsTask { .remark(r.getRemark()) .product_area(r.getProduct_area()) .interaction_json(JSON.parseObject(r.getRequest_param())) + .agv_action_type(PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务")) .agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼诺宝任务")) //.truss_type(PackageInfoIvtEnum.TRUSS_TYPE.code("点对点任务")) //.dtl_type(r.getDtl_type()) @@ -263,6 +264,7 @@ public class ZxqTask extends AbstractAcsTask { .task_id(org.nl.common.utils.IdUtil.getStringId()) .task_code(org.nl.common.utils.IdUtil.getStringId()) .handle_class(THIS_CLASS) + .car_no(form.getString("car_no")) .create_id(SecurityUtils.getCurrentUserId()) .create_name(SecurityUtils.getCurrentUsername()) .create_time(DateUtil.now()) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendDjqToGzq.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendDjqToGzq.java new file mode 100644 index 000000000..00661196f --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendDjqToGzq.java @@ -0,0 +1,62 @@ +package org.nl.b_lms.sch.tasks.first_floor_area.auto; + +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; +import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; +import org.nl.b_lms.sch.tasks.first_floor_area.GzqTask; +import org.nl.common.enums.PackageInfoIvtEnum; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + + +@Slf4j +@Component +@RequiredArgsConstructor +public class AutoSendDjqToGzq { + + @Resource + private GzqTask gzqTask; + + @Resource + private IbstIvtPackageinfoivtService packageinfoivtService; + + //待检区->管制区agv自动搬运任务 + public void run() { + //this.sendDjqToGzq(); + } + + void sendDjqToGzq() { + JSONObject task = new JSONObject(); + String pointCode1; + //待检区有管制品且过滤未完成任务 + List djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("管制品"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务取货分配"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), ""); + if (CollectionUtils.isEmpty(djqPackageinfoivtList)) { + return; + } + //无需二次分配 + List notNeedAllocation = djqPackageinfoivtList.stream().filter(r -> !r.getWait_point_type().equals(PackageInfoIvtEnum.WAIT_POINT_TYPE.code("待检区等待点"))).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(notNeedAllocation)) { + pointCode1 = notNeedAllocation.get(0).getPoint_code(); + task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("放货二次分配")); + } else { + pointCode1 = packageinfoivtService.getWaitPoint(djqPackageinfoivtList.get(0).getBlock(), djqPackageinfoivtList.get(0).getWait_point_type()); + task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取放货二次分配")); + task.put("point_code3", djqPackageinfoivtList.get(0).getPoint_code()); + } + List gzqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"), "", ""); + if (pointCode1 != null && CollectionUtils.isNotEmpty(gzqPackageinfoivtList)) { + task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->管制区")); + task.put("point_code1", pointCode1); + //需要二次分配,起点分配等待点 + task.put("point_code2", packageinfoivtService.getWaitPoint(gzqPackageinfoivtList.get(0).getBlock(), gzqPackageinfoivtList.get(0).getWait_point_type())); + task.put("point_code4", gzqPackageinfoivtList.get(0).getPoint_code()); + gzqTask.createTask(task); + } + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendDjqToZxqTwo.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendDjqToZxqTwo.java deleted file mode 100644 index 7c242dbcb..000000000 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendDjqToZxqTwo.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.nl.b_lms.sch.tasks.first_floor_area.auto; - -import com.alibaba.fastjson.JSONObject; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections4.CollectionUtils; -import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; -import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; -import org.nl.b_lms.sch.tasks.first_floor_area.ZxqTask; -import org.nl.common.enums.PackageInfoIvtEnum; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; -import java.util.List; - - -@Slf4j -@Component -@RequiredArgsConstructor -public class AutoSendDjqToZxqTwo { - - @Resource - private IbstIvtPackageinfoivtService packageinfoivtService; - @Resource - private ZxqTask zxqTask; - @Resource - private TaskQueueManager taskQueueManager; - @Resource - private TaskQueue taskQueue; - //待检区->装箱区agv自动搬运任务 - public void run() { - this.sendDjqToZxq(); - } - - void sendDjqToZxq() { - JSONObject toDjqTask =new JSONObject(); - //待检区有子卷且没有未完成任务 - List djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"), "1",""); - List zxqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), "2",""); - if (CollectionUtils.isNotEmpty(djqPackageinfoivtList)&&CollectionUtils.isNotEmpty(zxqPackageinfoivtList)) { - toDjqTask.put("vehicle_code", djqPackageinfoivtList.get(0).getContainer_name()); - toDjqTask.put("point_code1", djqPackageinfoivtList.get(0).getPoint_code()); - toDjqTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区")); - toDjqTask.put("point_code2", zxqPackageinfoivtList.get(0).getPoint_code()); - zxqTask.createTask(toDjqTask); - } - } - - -} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendGzqToDjq.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendGzqToDjq.java new file mode 100644 index 000000000..d2972ee34 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendGzqToDjq.java @@ -0,0 +1,66 @@ +package org.nl.b_lms.sch.tasks.first_floor_area.auto; + +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; +import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; +import org.nl.b_lms.sch.tasks.first_floor_area.DjqTask; +import org.nl.common.enums.PackageInfoIvtEnum; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + + +@Slf4j +@Component +@RequiredArgsConstructor +public class AutoSendGzqToDjq { + + @Resource + private DjqTask djqTask; + + @Resource + private IbstIvtPackageinfoivtService packageinfoivtService; + + //管制区->待检区agv自动搬运任务 + public void run() { + //this.sendGzqToDjq(); + } + + void sendGzqToDjq() { + JSONObject task = new JSONObject(); + String pointCode2; + //管制区有合格品且过滤未完成任务 + List gzqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("合格品"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货分配"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), ""); + if (CollectionUtils.isEmpty(gzqPackageinfoivtList)) { + return; + } + //待检区有空位且过滤未完成任务 + List djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务放货分配"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), ""); + if (CollectionUtils.isEmpty(djqPackageinfoivtList)) { + return; + } + //无需二次分配 + List notNeedAllocation = djqPackageinfoivtList.stream().filter(r -> !r.getWait_point_type().equals(PackageInfoIvtEnum.WAIT_POINT_TYPE.code("待检区等待点"))).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(notNeedAllocation)) { + pointCode2 = notNeedAllocation.get(0).getPoint_code(); + task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取货二次分配")); + } else { + pointCode2 = packageinfoivtService.getWaitPoint(djqPackageinfoivtList.get(0).getBlock(), djqPackageinfoivtList.get(0).getWait_point_type()); + task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取放货二次分配")); + task.put("point_code4", djqPackageinfoivtList.get(0).getPoint_code()); + } + if (pointCode2 != null) { + task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("管制区->待检区")); + //需要二次分配,起点分配等待点 + task.put("point_code1", packageinfoivtService.getWaitPoint(gzqPackageinfoivtList.get(0).getBlock(), gzqPackageinfoivtList.get(0).getWait_point_type())); + task.put("point_code3", gzqPackageinfoivtList.get(0).getPoint_code()); + task.put("point_code2", pointCode2); + djqTask.createTask(task); + } + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendMzToDjq.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendMzToDjq.java index 831e2880e..c1a9243d5 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendMzToDjq.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendMzToDjq.java @@ -28,21 +28,64 @@ public class AutoSendMzToDjq { //满轴->待检区agv自动搬运任务 public void run() { - this.sendMzqToDjq(); + this.sendMzqToDjq(); } void sendMzqToDjq() { - JSONObject toDjqTask =new JSONObject(); + JSONObject toDjqTask = new JSONObject(); //满轴有子卷且没有未完成任务 - List bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"), "1",""); - List djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), "2",""); - if (CollectionUtils.isNotEmpty(bstIvtPackageinfoivtList)&&CollectionUtils.isNotEmpty(djqPackageinfoivtList)) { - toDjqTask.put("vehicle_code", bstIvtPackageinfoivtList.get(0).getContainer_name()); - toDjqTask.put("point_code1", bstIvtPackageinfoivtList.get(0).getPoint_code()); - toDjqTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区")); - toDjqTask.put("point_code2", djqPackageinfoivtList.get(0).getPoint_code()); - djqTask.createTask(toDjqTask); + List bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"), "1", "2", ""); + if (CollectionUtils.isEmpty(bstIvtPackageinfoivtList)) { + return; } + List djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), "2", "1", ""); + if (CollectionUtils.isNotEmpty(djqPackageinfoivtList)) { + toDjqTask.put("vehicle_code", bstIvtPackageinfoivtList.get(0).getContainer_name()); + toDjqTask.put("point_code1", bstIvtPackageinfoivtList.get(0).getPoint_code()); + toDjqTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区")); + toDjqTask.put("point_code2", djqPackageinfoivtList.get(0).getPoint_code()); + djqTask.createTask(toDjqTask); + } + } + + + void sendMzqToDjq1() { + try { + String pointCode2 = null; + JSONObject task = new JSONObject(); + //满轴有子卷且过滤未完成任务 + List mzqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货分配"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), ""); + if (CollectionUtils.isEmpty(mzqPackageinfoivtList)) { + return; + } + //待检区有空位且过滤未完成任务 + List djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务放货分配"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), ""); + if (CollectionUtils.isEmpty(djqPackageinfoivtList)) { + return; + } + //无需二次分配 + List notNeedAllocation = djqPackageinfoivtList.stream().filter(r -> !r.getWait_point_type().equals(PackageInfoIvtEnum.WAIT_POINT_TYPE.code("待检区等待点"))).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(notNeedAllocation)) { + pointCode2 = notNeedAllocation.get(0).getPoint_code(); + task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取货二次分配")); + } else { + pointCode2 = packageinfoivtService.getWaitPoint(djqPackageinfoivtList.get(0).getBlock(), djqPackageinfoivtList.get(0).getWait_point_type()); + task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取放货二次分配")); + task.put("point_code4", djqPackageinfoivtList.get(0).getPoint_code()); + } + if (pointCode2 != null) { + task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区")); + task.put("vehicle_code", mzqPackageinfoivtList.get(0).getContainer_name()); + //需要二次分配,起点分配等待点 + task.put("point_code1", packageinfoivtService.getWaitPoint(mzqPackageinfoivtList.get(0).getBlock(), mzqPackageinfoivtList.get(0).getWait_point_type())); + task.put("point_code3", mzqPackageinfoivtList.get(0).getPoint_code()); + task.put("point_code2", pointCode2); + djqTask.createTask(task); + } + } catch (Exception ex) { + log.error("sendMzqToDjq1 error:{}", ex.getMessage()); + } + } // void sendMzqToDjq() { // //满轴位有子卷 @@ -68,8 +111,8 @@ public class AutoSendMzToDjq { // throw new BadRequestException("非法的子卷等级!"); // } // level = "1"; - // JSONObject toDjqTask = new JSONObject(); - // toDjqTask.put("vehicle_code", containerName); + // JSONObject task = new JSONObject(); + // task.put("vehicle_code", containerName); // // 判断子卷等级属于待检区还是管制区,创建满轴缓存位到待检区或管制区的agv任务 // String finalLevel1 = level; // if (Stream.of(ContainerLevelEnum.BEST, ContainerLevelEnum.WELL, ContainerLevelEnum.COMMON).anyMatch(enumItem -> enumItem.getCode().equals(finalLevel1))) { @@ -79,10 +122,10 @@ public class AutoSendMzToDjq { // if (CollectionUtils.isEmpty(djqPointList)) { // throw new BadRequestException("待检区暂无空余库位!"); // } - // toDjqTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区")); - // toDjqTask.put("point_code1", pointCode); - // toDjqTask.put("point_code2", djqPointList.get(0).getPoint_code()); - // djqTask.createTask(toDjqTask); + // task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区")); + // task.put("point_code1", pointCode); + // task.put("point_code2", djqPointList.get(0).getPoint_code()); + // djqTask.createTask(task); // } else { // String finalLevel2 = level; // if (Stream.of(ContainerLevelEnum.REWORK, ContainerLevelEnum.CONTROL).anyMatch(enumItem -> enumItem.getCode().equals(finalLevel2))) { @@ -92,10 +135,10 @@ public class AutoSendMzToDjq { // if (CollectionUtils.isEmpty(gkqPointList)) { // throw new BadRequestException("管控区暂无空余库位!"); // } - // toDjqTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->管制区")); - // toDjqTask.put("point_code1", pointCode); - // toDjqTask.put("point_code2", gkqPointList.get(0).getPoint_code()); - // gzqTask.createTask(toDjqTask); + // task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->管制区")); + // task.put("point_code1", pointCode); + // task.put("point_code2", gkqPointList.get(0).getPoint_code()); + // gzqTask.createTask(task); // } // } // } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendToZxq.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendToZxq.java index a6c995d6d..b952870d9 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendToZxq.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendToZxq.java @@ -17,7 +17,6 @@ import java.util.Map; import java.util.stream.Collectors; - @Slf4j @Component @RequiredArgsConstructor @@ -31,17 +30,21 @@ public class AutoSendToZxq { private TaskQueueManager taskQueueManager; @Resource private TaskQueue taskQueue; + //待检区->装箱区agv自动搬运任务 public void run() { this.sendDjqToZxq(); } - void sendDjqToZxq1() { - JSONObject toDjqTask =new JSONObject(); - //待检区有子卷且没有未完成任务 - List djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"), "1",""); - List zxqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), "2",""); - if (CollectionUtils.isNotEmpty(djqPackageinfoivtList)&&CollectionUtils.isNotEmpty(zxqPackageinfoivtList)) { + void sendDjqToZxq() { + JSONObject toDjqTask = new JSONObject(); + //待检区有子卷且过滤未完成任务 + List djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", ""); + if (CollectionUtils.isEmpty(djqPackageinfoivtList)) { + return; + } + List zxqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), "", ""); + if (CollectionUtils.isNotEmpty(zxqPackageinfoivtList)) { toDjqTask.put("vehicle_code", djqPackageinfoivtList.get(0).getContainer_name()); toDjqTask.put("point_code1", djqPackageinfoivtList.get(0).getPoint_code()); toDjqTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区")); @@ -51,11 +54,12 @@ public class AutoSendToZxq { } - public void sendDjqToZxq() { + public void sendDjqToZxq1() { //装箱区有空位,去待检区消费合格品子卷 List bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask( PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), - PackageInfoIvtEnum.IVT_STATUS.code("空"),"2",""); + PackageInfoIvtEnum.IVT_STATUS.code("空"), + PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), "", ""); if (CollectionUtils.isNotEmpty(bstIvtPackageinfoivtList)) { Map> ivtList = bstIvtPackageinfoivtList.stream() .collect(Collectors.groupingBy( diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToDjq.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToDjq.java index cb09a4f82..e0517deff 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToDjq.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToDjq.java @@ -1,65 +1,92 @@ package org.nl.b_lms.sch.tasks.first_floor_area.auto; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; -import org.nl.b_lms.sch.tasks.first_floor_area.SendKzjTask; -import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; +import org.nl.b_lms.sch.tasks.first_floor_area.DjqToKzjhcwTask; +import org.nl.b_lms.sch.tasks.first_floor_area.GzqToKzjhcwTask; +import org.nl.b_lms.sch.tasks.first_floor_area.SendDjqKzjTask; +import org.nl.b_lms.sch.tasks.first_floor_area.SendGzqKzjTask; import org.nl.common.enums.PackageInfoIvtEnum; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.List; +import java.util.stream.Collectors; @Slf4j @Component +@RequiredArgsConstructor public class AutoSendVehicleToDjq { + @Resource + private SendDjqKzjTask sendDjqKzjTask; + @Resource + private SendGzqKzjTask sendGzqKzjTask; @Resource private IbstIvtPackageinfoivtService packageinfoivtService; - @Resource - private SendKzjTask sendKzjTask; - //装箱区->待检区送空agv自动搬运任务 + public void run() { - //this.sendKzjHcwEmptyVehicle(); + //this.sendVehicleToDjqOrGzq(); } - void sendKzjHcwEmptyVehicle() { + /** + * 装箱区->待检区或管制区补空载具 + */ + public void sendVehicleToDjqOrGzq() { + //存在装箱区有空载具的点位 + String pointCode2 = null; JSONObject task = new JSONObject(); - String pointCode1=null; - String pointCode2; - //待检区有空位 - List djqList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空"),"2",""); - if (CollectionUtils.isNotEmpty(djqList)) { - pointCode2=djqList.get(0).getPoint_code(); - }else{ + List zxqIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", ""); + if (CollectionUtils.isEmpty(zxqIvtList)) { + return; + } + //待检区有空位且过滤未完成任务 + List djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), ""); + if (CollectionUtils.isNotEmpty(djqPackageinfoivtList)) { + //无二次分配 + List notNeedAllocation = djqPackageinfoivtList.stream().filter(r -> !r.getWait_point_type().equals(PackageInfoIvtEnum.WAIT_POINT_TYPE.code("待检区等待点"))).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(notNeedAllocation)) { + pointCode2 = notNeedAllocation.get(0).getPoint_code(); + task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务")); + } else { + if (CollectionUtils.isNotEmpty(djqPackageinfoivtList)) { + pointCode2 = packageinfoivtService.getWaitPoint(djqPackageinfoivtList.get(0).getBlock(), djqPackageinfoivtList.get(0).getWait_point_type()); + task.put("vehicle_code1", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("放货二次分配")); + task.put("point_code4", djqPackageinfoivtList.get(0).getPoint_code()); + } + } + task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)")); + } else { //管制区有空位 - List zxqList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空"),"2",""); - pointCode2=zxqList.get(0).getPoint_code(); + List gzqList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), ""); + if (CollectionUtils.isNotEmpty(gzqList)) { + //需要二次分配,起点分配等待点 + pointCode2 = packageinfoivtService.getWaitPoint(gzqList.get(0).getBlock(), gzqList.get(0).getWait_point_type()); + task.put("point_code4", gzqList.get(0).getPoint_code()); + //agv二次分配类型 + task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取放货二次分配")); + task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->管制区)")); + } } - //查询装箱区有空载具 - List zxqPointList = packageinfoivtService - .list(new LambdaUpdateWrapper() - .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("装箱区")) - .eq(BstIvtPackageinfoivt::getIs_used, IOSEnum.IS_NOTANDYES.code("是")) - .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空载具")).orderByAsc(BstIvtPackageinfoivt::getSort_seq)); - //装箱区有空载具 - if (CollectionUtils.isNotEmpty(zxqPointList)) { - pointCode1 = zxqPointList.get(0).getPoint_code(); - } - //去装箱区搬运空载具 - if (pointCode1 != null && pointCode2 != null) { - task.put("point_code1", pointCode1); + //去待检区或管制区搬运空载具 + if (pointCode2 != null) { task.put("point_code2", pointCode2); - task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("送空(装箱区->待检区或管制区)")); - sendKzjTask.createTask(task); + //送空二次分配,目标点分配等待点 + task.put("point_code3", zxqIvtList.get(0).getPoint_code()); + task.put("point_code1", packageinfoivtService.getWaitPoint(zxqIvtList.get(0).getBlock(), zxqIvtList.get(0).getWait_point_type())); + if (task.getString("task_type").equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)"))) { + sendDjqKzjTask.createTask(task); + } else { + sendGzqKzjTask.createTask(task); + } } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToKz.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToKz.java deleted file mode 100644 index 21284bcda..000000000 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToKz.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.nl.b_lms.sch.tasks.first_floor_area.auto; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.b_lms.sch.tasks.first_floor_area.KzjhcwTask; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; - - -@Slf4j -@Component -@RequiredArgsConstructor -public class AutoSendVehicleToKz { - - @Resource - private KzjhcwTask kzjhcwTask; - - - public void run() { - this.sendToKzjHcw(); - } - - //待检区->空轴缓存位补空agv自动搬运任务 - void sendToKzjHcw() { - kzjhcwTask.toKzjHcw(""); - } - - -} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToKzj.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToKzj.java new file mode 100644 index 000000000..b859711a2 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToKzj.java @@ -0,0 +1,121 @@ +package org.nl.b_lms.sch.tasks.first_floor_area.auto; + +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; +import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; +import org.nl.b_lms.sch.tasks.first_floor_area.DjqToKzjhcwTask; +import org.nl.b_lms.sch.tasks.first_floor_area.GzqToKzjhcwTask; +import org.nl.common.enums.PackageInfoIvtEnum; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + + +@Slf4j +@Component +@RequiredArgsConstructor +public class AutoSendVehicleToKzj { + + @Resource + private DjqToKzjhcwTask djqToKzjhcwTask; + @Resource + private GzqToKzjhcwTask gzqToKzjhcwTask; + + @Resource + private IbstIvtPackageinfoivtService packageinfoivtService; + + + public void run() { + this.toKzjHcw(); + } + + + /** + * 待检区或管制区->空载具缓存位补空 + */ + public void toKzjHcw1() { + //存在空载具缓存位无空载具的点位 + String pointCode1 = null; + JSONObject task = new JSONObject(); + List kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"), "", ""); + if (CollectionUtils.isEmpty(kzjIvtList)) { + return; + } + //待检区有空载具且过滤未完成任务 + List djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务取货分配"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), ""); + if (CollectionUtils.isNotEmpty(djqPackageinfoivtList)) { + //无二次分配 + List notNeedAllocation = djqPackageinfoivtList.stream().filter(r -> !r.getWait_point_type().equals(PackageInfoIvtEnum.WAIT_POINT_TYPE.code("待检区等待点"))).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(notNeedAllocation)) { + pointCode1 = notNeedAllocation.get(0).getPoint_code(); + task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("放货二次分配")); + } else { + if (CollectionUtils.isNotEmpty(djqPackageinfoivtList)) { + pointCode1 = packageinfoivtService.getWaitPoint(djqPackageinfoivtList.get(0).getBlock(), djqPackageinfoivtList.get(0).getWait_point_type()); + task.put("vehicle_code1", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取放货二次分配")); + task.put("point_code3", djqPackageinfoivtList.get(0).getPoint_code()); + } + } + task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")); + } else { + //管制区有空位 + List gzqList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货分配"), "", ""); + if (CollectionUtils.isNotEmpty(gzqList)) { + //需要二次分配,起点分配等待点 + pointCode1 = packageinfoivtService.getWaitPoint(gzqList.get(0).getBlock(), gzqList.get(0).getWait_point_type()); + task.put("point_code3", gzqList.get(0).getPoint_code()); + //agv二次分配类型 + task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取放货二次分配")); + task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)")); + } + } + //去待检区或管制区搬运空载具 + if (pointCode1 != null) { + task.put("point_code1", pointCode1); + //送空二次分配,目标点分配等待点 + task.put("point_code4", kzjIvtList.get(0).getPoint_code()); + task.put("point_code2", packageinfoivtService.getWaitPoint(kzjIvtList.get(0).getBlock(), kzjIvtList.get(0).getWait_point_type())); + if (task.getString("task_type").equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"))) { + djqToKzjhcwTask.createTask(task); + } else { + gzqToKzjhcwTask.createTask(task); + } + } + } + + public void toKzjHcw() { + //存在空载具缓存位无空载具的点位 + List kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), ""); + if (CollectionUtils.isEmpty(kzjIvtList)) { + return; + } + String pointCode1 = null; + JSONObject toKzjHcwTask = new JSONObject(); + //查询装箱区有空载具 + List zxqPointList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", ""); + //装箱区有空载具 + if (CollectionUtils.isNotEmpty(zxqPointList)) { + pointCode1 = zxqPointList.get(0).getPoint_code(); + } else { + //待检区有空载具 + List djqPointList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", ""); + if (CollectionUtils.isNotEmpty(djqPointList)) { + pointCode1 = djqPointList.get(0).getPoint_code(); + } + } + //去装箱区搬运空载具 + if (pointCode1 != null) { + toKzjHcwTask.put("point_code1", pointCode1); + //送到到任意空载具缓存位 + toKzjHcwTask.put("point_code2", kzjIvtList.get(0).getPoint_code()); + toKzjHcwTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")); + djqToKzjhcwTask.createTask(toKzjHcwTask); + } + } + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendZxToDjw.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendZxToDjw.java index fe5a053bd..1fc929787 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendZxToDjw.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendZxToDjw.java @@ -6,15 +6,13 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; -import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService; +import org.apache.commons.lang3.StringUtils; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.mapper.PdmBiSlittingproductionplanMapper; import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation; import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; -import org.nl.b_lms.sch.task.service.IschBaseTaskService; -import org.nl.b_lms.sch.tasks.first_floor_area.DjqTask; import org.nl.b_lms.sch.tasks.first_floor_area.ZxDjwTask; import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxinfo; import org.nl.b_lms.storage_manage.database.service.dao.mapper.BstIvtBoxinfoMapper; @@ -52,98 +50,121 @@ public class AutoSendZxToDjw { @Resource private ISysParamService iSysParamService; - //满轴->待检区agv自动搬运任务 + //装箱区->装箱对接位agv自动搬运任务 public void run() { this.sendZxToDjw(); } void sendZxToDjw() { - List zxqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"), "1",""); - List zxwPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱位"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), "2",PackageInfoIvtEnum.TASK_TYPE.code("装箱区->装箱对接位")); - if (CollectionUtils.isNotEmpty(zxqPackageinfoivtList) && CollectionUtils.isNotEmpty(zxwPackageinfoivtList)) { - //3.查询子卷对应的包装关系表,判断装箱位的木箱号是否为子卷对应的木箱号,是,创建搬运任务到装箱对接位位桁架任务,否,什么都不做 - PdmBiSubpackagerelation pdmBiSubpackagerelation = subpackageRelationService - .getOne(new LambdaUpdateWrapper().eq(PdmBiSubpackagerelation::getPackage_box_sn, zxwPackageinfoivtList.get(0).getContainer_name()), false); - if (pdmBiSubpackagerelation == null) { - throw new BadRequestException("装箱位木箱号无对应子卷包装关系的木箱号!"); - } + //装箱区有子卷且没有正在进行的装箱任务 + List zxqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", ""); + if (CollectionUtils.isEmpty(zxqPackageinfoivtList)) { + return; + } + //装箱位有木箱 + List zxwPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱位"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), PackageInfoIvtEnum.TASK_TYPE.code("装箱区->装箱对接位")); + if (CollectionUtils.isNotEmpty(zxwPackageinfoivtList)) { //装箱位上的木箱号 String boxNo = zxwPackageinfoivtList.get(0).getContainer_name(); - String containerName = pdmBiSubpackagerelation.getContainer_name(); - List zxqPoint = zxqPackageinfoivtList.stream().filter(r -> r.getContainer_name().equals(containerName)).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(zxqPoint)) { - throw new BadRequestException("装箱区暂无该子卷信息"); - } - List productionPlanList = pdmBiSlittingproductionplanMapper.selectList(new LambdaQueryWrapper().eq(PdmBiSlittingproductionplan::getContainer_name, containerName)); - if (productionPlanList.isEmpty()) { - throw new BadRequestException("该子卷暂无分切计划信息"); - } - //创建搬运任务到装箱位 - JSONObject jo = new JSONObject(); - jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("装箱区->装箱对接位")); - jo.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务")); - jo.put("point_code1", zxqPoint.get(0).getPoint_code()); - jo.put("point_code2", zxwPackageinfoivtList.get(0).getPoint_code()); - jo.put("vehicle_code", pdmBiSubpackagerelation.getContainer_name()); - jo.put("vehicle_code2", boxNo); - jo.put("is_send", "1"); - //获取纸管长度 - String containerLength = productionPlanList.get(0).getPaper_tube_or_FRP().equals("1") ? productionPlanList.get(0).getPaper_tube_description() : productionPlanList.get(0).getFRP_description(); - int maxNum = 0; - for (String part : containerLength.split("\\|")) { - String numStr = part.replaceAll("\\D+", ""); - if (!numStr.isEmpty()) { - int num = Integer.parseInt(numStr); - if (num > maxNum) { - maxNum = num; - } - } - } - //扩展参数 - JSONObject param = new JSONObject(); //获取木箱信息,未包装的木箱 BstIvtBoxinfo bstIvtBoxinfo = bstIvtBoxinfoMapper.selectOne(new LambdaQueryWrapper().eq(BstIvtBoxinfo::getBox_no, boxNo).ne(BstIvtBoxinfo::getIs_packing, "1")); if (bstIvtBoxinfo == null) { - throw new BadRequestException("找不到木箱信息!"); + throw new BadRequestException("请检查木箱号:"+ boxNo +"是否存在或者状态为已装箱!"); } - //获取木箱高度等级 - String height = ""; - String heightLevel1 = iSysParamService.findByCode("height_level_1").getValue(); - String heightLevel2 = iSysParamService.findByCode("height_level_2").getValue(); - String box_high = bstIvtBoxinfo.getBox_high(); - if (Integer.parseInt(box_high) <= Integer.parseInt(heightLevel1)) { - height = "1"; - } else if (Integer.parseInt(box_high) > Integer.parseInt(heightLevel1) && Integer.parseInt(box_high) <= Integer.parseInt(heightLevel2)) { - height = "2"; - } else { - height = "3"; + //检查木箱信息 + checkBoxParams(boxNo, bstIvtBoxinfo); + //3.查询子卷对应的包装关系表,判断装箱位的木箱号是否为子卷对应的木箱号,是,创建搬运任务到装箱对接位位桁架任务 + List relationList = subpackageRelationService + .list(new LambdaUpdateWrapper().eq(PdmBiSubpackagerelation::getPackage_box_sn, boxNo).eq(PdmBiSubpackagerelation::getStatus, "0")); + if (CollectionUtils.isEmpty(relationList)) { + throw new BadRequestException("装箱位的木箱号"+boxNo+"对应的子卷包装关系异常,请检查子卷包装关系状态是否为0!"); + } + //获取与该木箱号匹配的子卷号 + String containerName = relationList.get(0).getContainer_name(); + List zxqPoint = zxqPackageinfoivtList.stream().filter(r -> r.getContainer_name().equals(containerName)).collect(Collectors.toList()); + //装箱区点位上有与该木箱号匹配的子卷 + if (CollectionUtils.isNotEmpty(zxqPoint)) { + List productionPlanList = pdmBiSlittingproductionplanMapper.selectList(new LambdaQueryWrapper().eq(PdmBiSlittingproductionplan::getContainer_name, containerName)); + if (productionPlanList.isEmpty()) { + throw new BadRequestException("装箱区的子卷号为"+containerName+"无对应的分切计划信息,请检查!"); + } + //创建搬运任务到装箱位 + JSONObject jo = new JSONObject(); + jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("装箱区->装箱对接位")); + jo.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务")); + jo.put("point_code1", zxqPoint.get(0).getPoint_code()); + jo.put("point_code2", zxwPackageinfoivtList.get(0).getPoint_code()); + jo.put("vehicle_code", containerName); + jo.put("vehicle_code2", boxNo); + jo.put("is_send", "1"); + //扩展参数 + JSONObject param = new JSONObject(); + //查询是否为最后一个子卷,相同木箱号且子卷包装状态为生成 + List packagerelationList = subpackageRelationService.list(new LambdaQueryWrapper().eq(PdmBiSubpackagerelation::getPackage_box_sn, boxNo).eq(PdmBiSubpackagerelation::getStatus, "0")); + if (packagerelationList.size() == 1 && packagerelationList.get(0).getContainer_name().equals(containerName)) { + //最后子卷 + param.put("lastOne", "1"); + } else { + param.put("lastOne", "0"); + } + //获取木箱高度等级 + param.put("heightLevel", getHeightLevel(bstIvtBoxinfo)); + //获取子卷长度 + param.put("len", getMaxNum(productionPlanList)); + //木箱最大数量 + param.put("maxNo", bstIvtBoxinfo.getNum()); + //托盘类型 1小托盘 2大托盘 + param.put("containerType", bstIvtBoxinfo.getVehicle_type()); + //木箱需放入子卷数量 + param.put("boxNo", relationList.get(0).getQuanlity_in_box()); + //子卷号 + param.put("barcode", containerName); + jo.put("request_param", param.toString()); + zxDjwTask.createTask(jo); } - //木箱高度等级 - param.put("heightLevel", height); - //木箱最大数量 - param.put("maxNo", bstIvtBoxinfo.getNum()); - //托盘类型 1小托盘 2大托盘 - param.put("containerType", bstIvtBoxinfo.getVehicle_type()); - //查询是否为最后一个子卷,相同木箱号且状态为生成 - // List packagerelationList = subpackageRelationService.list(new LambdaQueryWrapper().eq(PdmBiSubpackagerelation::getPackage_box_sn, boxNo).eq(PdmBiSubpackagerelation::getStatus, "0")); - // if (packagerelationList.size() == 1 && packagerelationList.get(0).getContainer_name().equals(containerName)) { - // //最后子卷 - // param.put("lastOne", "1"); - // } else { - // param.put("lastOne", "0"); - // } - param.put("lastOne", "1"); - //木箱放入子卷数量 - //param.put("boxNo", pdmBiSubpackagerelation.getQuanlity_in_box()); - param.put("boxNo", "1"); - //子卷号 - param.put("barcode", containerName); - //子卷长度 - param.put("len", maxNum); - jo.put("request_param", param.toString()); - zxDjwTask.createTask(jo); } + } + private static void checkBoxParams(String boxNo, BstIvtBoxinfo bstIvtBoxinfo) { + if (StringUtils.isBlank(bstIvtBoxinfo.getBox_high())) { + throw new BadRequestException("请检查木箱号:"+ boxNo +"木箱高度不能为空!"); + } + if (StringUtils.isBlank(bstIvtBoxinfo.getNum())) { + throw new BadRequestException("请检查木箱号:"+ boxNo +"能装的最大子卷数不能为空!"); + } + if (StringUtils.isBlank(bstIvtBoxinfo.getVehicle_type())) { + throw new BadRequestException("请检查木箱号:"+ boxNo +"托盘类型不能为空!"); + } + } + + private String getHeightLevel(BstIvtBoxinfo bstIvtBoxinfo) { + String height; + String heightLevel1 = iSysParamService.findByCode("height_level_1").getValue(); + String heightLevel2 = iSysParamService.findByCode("height_level_2").getValue(); + String box_high = bstIvtBoxinfo.getBox_high(); + if (Integer.parseInt(box_high) <= Integer.parseInt(heightLevel1)) { + height = "1"; + } else if (Integer.parseInt(box_high) > Integer.parseInt(heightLevel1) && Integer.parseInt(box_high) <= Integer.parseInt(heightLevel2)) { + height = "2"; + } else { + height = "3"; + } + return height; + } + + private static int getMaxNum(List productionPlanList) { + String containerLength = productionPlanList.get(0).getPaper_tube_or_FRP().equals("1") ? productionPlanList.get(0).getPaper_tube_description() : productionPlanList.get(0).getFRP_description(); + int maxNum = 0; + for (String part : containerLength.split("\\|")) { + String numStr = part.replaceAll("\\D+", ""); + if (!numStr.isEmpty()) { + int num = Integer.parseInt(numStr); + if (num > maxNum) { + maxNum = num; + } + } + } + return maxNum; } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/TaskQueue.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/TaskQueue.java index 5c4d1f3c7..970bfd78b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/TaskQueue.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/TaskQueue.java @@ -1,11 +1,14 @@ package org.nl.b_lms.sch.tasks.first_floor_area.auto; + import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.b_lms.sch.task.dao.SchBaseTask; import org.nl.b_lms.sch.task.service.IschBaseTaskService; import org.nl.b_lms.sch.tasks.first_floor_area.ZxqTask; import org.nl.modules.common.utils.RedisUtils; +import org.nl.wms.sch.manage.TaskStatusEnum; import org.springframework.stereotype.Service; + import javax.annotation.Resource; import java.util.List; import java.util.Map; @@ -17,19 +20,30 @@ public class TaskQueue { @Resource private IschBaseTaskService taskService; + @Resource + private ZxqTask zxqTask; private final RedisUtils redisUtils; private static final String TASK_QUEUE_PREFIX = "taskQueue:"; + + /** + * 添加任务 + */ public void addTasksToQueue(String groupId, List tasks) { tasks.forEach(task -> redisUtils.pushToList(TASK_QUEUE_PREFIX + groupId, task)); } + /** + * 任务下发 + */ public void processTasks(Map> tasksToProcessPerQueue) { tasksToProcessPerQueue.forEach((groupId, points) -> { int taskCount = points.size(); for (int i = 0; i < taskCount; i++) { + //List taskElements = getTaskElements(groupId); + //Long taskCounts = getTaskCount(groupId); SchBaseTask task = (SchBaseTask) redisUtils.popFromList(TASK_QUEUE_PREFIX + groupId, SchBaseTask.class); if (task != null) { String pointCode = points.get(i); @@ -42,9 +56,40 @@ public class TaskQueue { private void executeTask(SchBaseTask task, String pointCode) { if (task != null) { task.setPoint_code2(pointCode); + task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); taskService.updateById(task); - ZxqTask taskBean = new ZxqTask(); - taskBean.immediateNotifyAcs(null); + zxqTask.immediateNotifyAcs(null); } } + + /** + * 获取队列元素个数 + */ + public long getTaskCount(String groupId) { + return redisUtils.getListSize(TASK_QUEUE_PREFIX + groupId); + } + + /** + * 获取队列元素 + */ + public List getTaskElements(String groupId) { + return redisUtils.getListElements(TASK_QUEUE_PREFIX + groupId); + } + + /** + * 删除队列中的所有元素 + */ + public void clearTaskQueue(String groupId) { + redisUtils.clearList(TASK_QUEUE_PREFIX + groupId); + } + + /** + * 删除队列中的某个元素 + */ + public void removeTaskFromQueue(String groupId, SchBaseTask task) { + redisUtils.removeFromList(TASK_QUEUE_PREFIX + groupId, task); + } + + } + diff --git a/lms/nladmin-system/src/main/java/org/nl/common/enums/PackageInfoIvtEnum.java b/lms/nladmin-system/src/main/java/org/nl/common/enums/PackageInfoIvtEnum.java index 83dea1ca7..4faa6c0a8 100644 --- a/lms/nladmin-system/src/main/java/org/nl/common/enums/PackageInfoIvtEnum.java +++ b/lms/nladmin-system/src/main/java/org/nl/common/enums/PackageInfoIvtEnum.java @@ -22,8 +22,11 @@ public enum PackageInfoIvtEnum { //任务类型 - TASK_TYPE(MapOf.of("输送线->满轴缓存位", "010901", "满轴缓存位->待检区", "010902", "满轴缓存位->管制区", "010903", "放空(空载具缓存位->输送线)", - "010904", "补空(待检区或管制区->空载具缓存位)", "010905", "待检区->管制区", "010906", "管制区->待检区", "010907", "待检区->装箱区", "010908", "装箱区->装箱对接位", "010909", "放空(装箱区->待检区)", "010910", "输送线四个点任务", "010911", "送空(装箱区->待检区或管制区)", "010912")), + TASK_TYPE(MapOf.of("输送线->满轴缓存位", "010901", "满轴缓存位->待检区", "010902", "满轴缓存位->管制区", + "010903", "放空(空载具缓存位->输送线)", "010904", "补空(待检区->空载具缓存位)", "010905", "待检区->管制区", + "010906", "管制区->待检区", "010907", "待检区->装箱区", "010908", "装箱区->装箱对接位", "010909", + "补空(装箱区->待检区)", "010910", "输送线四个点任务", "010911", "补空(装箱区->管制区)", "010912", + "补空(管制区->空载具缓存位)","010913")), //ACS任务类型 ACS_TASK_TYPE(MapOf.of("agv任务", "1", "桁架任务", "6")), @@ -38,8 +41,10 @@ public enum PackageInfoIvtEnum { //起点终点类型 - TASK_POINT_TYPE(MapOf.of("取货任务", "1", "放货任务", "2")), + TASK_POINT_TYPE(MapOf.of("取货任务", "1", "放货任务", "2", "取货分配", "3", "放货分配", "4", "取货任务取货分配", "5", "放货任务放货分配", "6")), + //等待点类型 + WAIT_POINT_TYPE(MapOf.of("满轴区等待点", "1", "待检区等待点", "2")), //排序方式 SORT_TYPE(MapOf.of("升序", "1", "降序", "2")), diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/RedisUtils.java b/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/RedisUtils.java index 020247af9..14e2465c3 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/RedisUtils.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/RedisUtils.java @@ -48,7 +48,6 @@ public class RedisUtils { private final ObjectMapper objectMapper = new ObjectMapper(); - public RedisUtils(RedisTemplate redisTemplate) { this.redisTemplate = redisTemplate; } @@ -716,6 +715,10 @@ public class RedisUtils { log.debug("--------------------------------------------"); } + + /** + * 队列新增 + */ public void pushToList(String key, Object value) { try { String valueJson = objectMapper.writeValueAsString(value); @@ -725,6 +728,9 @@ public class RedisUtils { } } + /** + * 队列移除 + */ public Object popFromList(String key, Class valueType) { String valueJson = (String) redisTemplate.opsForList().leftPop(key); if (valueJson != null) { @@ -736,4 +742,39 @@ public class RedisUtils { } return null; } + + + /** + * 获取队列元素个数 + */ + public long getListSize(String key) { + Long size = redisTemplate.opsForList().size(key); + return (size != null) ? size : 0; + } + + + /** + * 获取队列元素 + */ + public List getListElements(String key) { + List elements = redisTemplate.opsForList().range(key, 0, -1); + return elements; + } + + /** + * 删除队列中的某个元素 + */ + public void removeFromList(String key, Object value) { + redisTemplate.opsForList().remove(key, 1, value); + } + + + /** + * 删除队列中的所有元素 + */ + public void clearList(String key) { + redisTemplate.delete(key); + } + + } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index 3cd8b75d5..edb9281ab 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -1779,21 +1779,29 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { .filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位").equals(r.getPoint_status()) && PackageInfoIvtEnum.IVT_STATUS.code("空载具").equals(r.getIvt_status())) .sorted(Comparator.comparing(BstIvtPackageinfoivt::getSort_seq).reversed()).collect(Collectors.toList()); - //空载具缓存位有空载具 + //空载具缓存位有空载具,桁架取空载具从外到里取空载具,升序 if (CollectionUtils.isNotEmpty(kzjPointList)) { - jo.put("point_code3", kzjPointList.get(0).getPoint_code()); - //终点为输送线点位 - jo.put("point_code4", whereJson.getString("device_code")); - jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务")); - } else { - jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位")); - //空载具缓存位缺少空载具,下发一个确定终点的空载具缓存位->输送线任务 // 创建前先判断是否有已创建相同任务 - List existTaskList = taskService.list(new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)")) - .eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_END.getCode()) - .eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否"))); + List existTaskList = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务")); if (CollectionUtils.isEmpty(existTaskList)) { + jo.put("point_code3", kzjPointList.get(0).getPoint_code()); + //终点为输送线点位 + jo.put("point_code4", whereJson.getString("device_code")); + jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务")); + jo.put("is_send", true); + mzhcwTask.createTask(jo); + } + } else { + //如果空载具缓存位确少空载具,创建输送线->满轴缓存位两个点任务 + List existTaskList = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位")); + if (CollectionUtils.isEmpty(existTaskList)) { + jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位")); + jo.put("is_send", true); + mzhcwTask.createTask(jo); + } + //空载具缓存位缺少空载具,下发一个确定终点的空载具缓存位->输送线任务 + List existTasks = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)")); + if (CollectionUtils.isEmpty(existTasks)) { JSONObject jo1 = new JSONObject(); //创建确定终点任务 jo1.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务")); @@ -1804,27 +1812,24 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { ssxDjwTask.createTask(jo1); } } - jo.put("is_send", true); - mzhcwTask.createTask(jo); result.put("status", HttpStatus.OK.value()); result.put("message", "反馈成功!"); } else { // 如果满轴位没有可用的空点位,先创建一个桁架任务但是不下发,等这边空出来点位,判断是否有这种桁架任务然后补发; - // 创建前先判断是否有已创建相同任务 - List existTaskList = taskService.list(new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位")) - .eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode()).eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否"))); - //如果有就不创建,没有就创建 - if (CollectionUtils.isEmpty(existTaskList)) { - //只确定起点NBJ1002 - JSONObject jo2 = new JSONObject(); - jo2.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务")); - jo2.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位")); - jo2.put("point_code1", "NBJ1002"); - jo.put("task_status", TaskStatusEnum.SURE_START.getCode()); - jo2.put("is_send", false); - mzhcwTask.createTask(jo2); - } + // List existTaskList = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位")); + // //如果有就不创建,没有就创建 + // if (CollectionUtils.isEmpty(existTaskList)) { + // //只确定起点NBJ1002 + // JSONObject jo2 = new JSONObject(); + // jo2.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务")); + // jo2.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位")); + // jo2.put("point_code1", "NBJ1002"); + // jo.put("task_status", TaskStatusEnum.SURE_START.getCode()); + // jo2.put("is_send", false); + // mzhcwTask.createTask(jo2); + // } + result.put("status", HttpStatus.BAD_REQUEST.value()); + result.put("message", "满轴缓存位暂无空位!"); } } else { log.info("二楼到一楼,成品子卷到达一楼输送线,异常,任务正在创建中"); @@ -1839,6 +1844,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { return result; } + private List getExistTasks(String taskType) { + return taskService.list(new LambdaUpdateWrapper() + .eq(SchBaseTask::getTask_type, taskType) + .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) + .eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否"))); + } + @Override @Transactional(rollbackFor = Exception.class) @@ -1945,7 +1957,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { log.info("applySendOutTwo输入参数:---------------------------------------------" + whereJson.toString()); JSONObject result = new JSONObject(); - try{ + try { // 校验是否是二次分配 if (ObjectUtil.isEmpty(whereJson.getString("task_code"))) { // 第一次申请 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/rest/TaskController.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/rest/TaskController.java index 765fcfaa0..cdcb51768 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/rest/TaskController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/rest/TaskController.java @@ -1,6 +1,7 @@ package org.nl.wms.sch.rest; +import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; @@ -69,6 +70,7 @@ public class TaskController { @PutMapping("/operation") @Log("任务操作") + @SaIgnore public ResponseEntity update(@RequestBody Map map) { taskService.operation(map); return new ResponseEntity<>(HttpStatus.NO_CONTENT); diff --git a/lms/nladmin-system/src/test/java/org/nl/init/EventTest.java b/lms/nladmin-system/src/test/java/org/nl/init/EventTest.java index bfcaa63c9..fa0744316 100644 --- a/lms/nladmin-system/src/test/java/org/nl/init/EventTest.java +++ b/lms/nladmin-system/src/test/java/org/nl/init/EventTest.java @@ -9,11 +9,9 @@ import org.apache.commons.lang3.StringUtils; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.mapper.PdmBiSlittingproductionplanMapper; import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation; import org.nl.b_lms.pdm.subpackagerelation.dao.mapper.PdmBiSubpackagerelationMapper; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; -import org.nl.b_lms.sch.point.dao.mapper.BstIvtPackageinfoivtMapper; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; import org.nl.b_lms.sch.tasks.first_floor_area.*; import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBoxManageService; @@ -21,7 +19,6 @@ import org.nl.common.enums.ContainerLevelEnum; import org.nl.common.enums.PackageInfoIvtEnum; import org.nl.modules.common.exception.BadRequestException; import org.nl.system.service.param.ISysParamService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit.jupiter.SpringExtension; @@ -50,7 +47,7 @@ public class EventTest { private GzqTask gzqTask; @Resource - private KzjhcwTask kzjhcwTask; + private DjqToKzjhcwTask djqToKzjhcwTask; @Resource private OutBoxManageService outBoxManageService; @@ -66,7 +63,7 @@ public class EventTest { */ @Test public void zxToKzjHcw() { - kzjhcwTask.toKzjHcw(""); + //djqToKzjhcwTask.toKzjHcw(""); } /** diff --git a/lms/nladmin-ui/src/views/wms/pdm/sub/DivDialog.vue b/lms/nladmin-ui/src/views/wms/pdm/sub/DivDialog.vue index 06c1e9791..c85add6e7 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/sub/DivDialog.vue +++ b/lms/nladmin-ui/src/views/wms/pdm/sub/DivDialog.vue @@ -45,7 +45,7 @@ - +
@@ -82,9 +82,10 @@ type="primary" icon="el-icon-plus" size="mini" + :disabled="isButtonDisabled" @click="divStruct()" > - 分配 + 分配木箱规格
@@ -103,10 +104,10 @@ - + - + @@ -150,6 +151,7 @@ export default { }, data() { return { + isButtonDisabled: false, // 木箱规格分配按钮 searchText: '', // 存储搜索前的选中状态 previousSelection: [], @@ -164,6 +166,7 @@ export default { stor_id: '', sect_id: '', sectProp: null, + paper_tube_description: '', bucketProp: {}, structShow: false, bucketObj: null, @@ -299,6 +302,7 @@ export default { // 表格1的行点击事件 handleRowClick(scope) { debugger + this.isButtonDisabled = !!(scope.status !== '99' || scope.box_group !== '0') const table2 = this.$refs.dis_table const table2Data = Array.from(this.openParam) const groupValue = scope.box_group === '0' ? scope.container_name : scope.box_group @@ -343,7 +347,9 @@ export default { this.$emit('childEvent') }, divStruct() { + debugger if (this.currentSelection.length > 0 && this.$refs.dis_table.selection.length > 0) { + this.paper_tube_description = this.currentSelection[0].paper_tube_description this.structShow = true this.$refs.child.getMsg(false) } else { diff --git a/lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue b/lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue index a39f5ea29..de651c9a1 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue +++ b/lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue @@ -16,7 +16,7 @@ clearable style="width: 200px" size="mini" - placeholder="输入木箱物料名称" + placeholder="输入关键词搜索" prefix-icon="el-icon-search" class="filter-item" /> @@ -38,8 +38,13 @@ @select-all="onSelectAll" > - + + + + + + @@ -47,6 +52,36 @@ 取 消 确 定 + + +
+
+ + 请仔细核对子卷与木箱规格是否匹配, +
+
+ 木箱长度为:{{ this.box_length }}, +
+
+ 子卷规格为:{{ this.paper_tube_description }}, +
+
+ 点击确定后将立即生成木箱出库任务,无法更改! +
+
+
+ + 取消 + 确定 + +
@@ -63,10 +98,10 @@ export default { return CRUD({ title: '木箱规格', optShow: {}, - url: 'api/Materialbase', - idField: 'material_id', - sort: 'material_id,desc', - query: { box: '木箱', search: 'MX', material_id: '' }, + url: 'api/pdmBiSubpackagerelation/queryBoxSpec', + idField: 'box_id', + sort: 'material_name,desc', + query: { material_id: '' }, crudMethod: { ...crudMaterattr } }) }, @@ -78,12 +113,18 @@ export default { }, sectProp: { type: Object + }, + paperTubeDescription: { + type: String, + default: '' } }, data() { return { + box_length: '', classes: [], dialogVisible: false, + dialogVisible1: false, sect: {}, checkrow: {}, rows: [], @@ -170,14 +211,39 @@ export default { submit() { debugger this.rows = this.$refs.table.selection + this.box_length = this.rows[0].box_length if (this.rows.length <= 0) { this.$message('请先选择木箱信息') return } + this.dialogVisible1 = true + }, + confirmSubmit() { + this.dialogVisible1 = false this.$emit('update:dialogShow', false) this.$emit('tableChanged', this.checkrow) } } } - + From 4d729392c9c5089087b1d6c631f389a020c95e77 Mon Sep 17 00:00:00 2001 From: gongbaoxiong <751575283@qq.com> Date: Wed, 26 Jun 2024 12:46:51 +0800 Subject: [PATCH 26/30] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E5=AD=90=E5=8D=B7=E8=A7=84=E6=A0=BC=E6=97=A0=E6=B3=95=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E9=97=AE=E9=A2=98=EF=BC=8C=E8=A3=85=E7=AE=B1=E5=AF=B9?= =?UTF-8?q?=E6=8E=A5=E4=BD=8D=E5=AD=90=E5=8D=B7=E8=A3=85=E7=AE=B1=E6=95=B0?= =?UTF-8?q?=E9=87=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PdmBiSubpackagerelationServiceImpl.java | 1 + .../sch/tasks/first_floor_area/ZxDjwTask.java | 30 ++-- .../auto/AutoSendZxToDjw.java | 130 +++++++++--------- 3 files changed, 84 insertions(+), 77 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java index 6b90e07b8..6b3966b33 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java @@ -354,6 +354,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl entityList, String boxType) { // code:终点,material_code:木箱规格,num: 子卷数 UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("quanlity_in_box", entityList.size()); updateWrapper.set("box_type", boxType); updateWrapper.set("box_group", maxBoxGroup); updateWrapper.set("status", "0"); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java index f5adf7673..7fbd68e39 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java @@ -120,23 +120,27 @@ public class ZxDjwTask extends AbstractAcsTask { schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode()); //2.改变起点点位状态 packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空载具")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); - //更新库存记录 - packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code2())); - //3.更改子卷信息状态为包装1,创建装箱区->装箱位桁架任务的时候判断是否最后一个子卷:相同木箱号如果生成状态0个数等于1且子卷号等于当前载具号,就是最后一个子卷 + //3.判断是否最后一个子卷:相同木箱号的子卷包装关系如果生成状态:0,且个数等于1且子卷号等于当前载具号,就是最后一个子卷 + List packagerelationList = subpackageRelationService.list(new LambdaQueryWrapper().eq(PdmBiSubpackagerelation::getPackage_box_sn, schBaseTask.getVehicle_code2()).eq(PdmBiSubpackagerelation::getStatus, "0")); + //所有木箱已装箱 + if (CollectionUtils.isEmpty(packagerelationList)) { + BstIvtBoxinfo bstIvtBoxinfo = bstIvtBoxinfoMapper.selectOne(new LambdaQueryWrapper().eq(BstIvtBoxinfo::getBox_no, schBaseTask.getVehicle_code2()).ne(BstIvtBoxinfo::getIs_packing, "1")); + if (bstIvtBoxinfo == null) { + throw new BadRequestException("子卷包装关系为已装箱或找该任务的木箱号不存在!"); + } + //4.更改木箱信息为已装箱:1 + bstIvtBoxinfo.setIs_packing("1"); + bstIvtBoxinfoMapper.updateById(bstIvtBoxinfo); + } + if (packagerelationList.size() == 1 && packagerelationList.get(0).getContainer_name().equals(schBaseTask.getVehicle_code())) { + //5.最后一个子卷,清除装箱位木箱信息 + packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code2())); + } + //6.改变子卷包装状态为已装箱:1 PdmBiSubpackagerelation pdmBiSubpackagerelation = subpackageRelationService .getOne(new LambdaUpdateWrapper().eq(PdmBiSubpackagerelation::getContainer_name, schBaseTask.getVehicle_code()), false); pdmBiSubpackagerelation.setStatus("1"); subpackageRelationService.updateById(pdmBiSubpackagerelation); - //4.查询同一个木箱号如果生成状态0个数等于0,更新该木箱信息表为包装1 - List packagerelationList = subpackageRelationService.list(new LambdaQueryWrapper().eq(PdmBiSubpackagerelation::getPackage_box_sn, schBaseTask.getVehicle_code2()).eq(PdmBiSubpackagerelation::getStatus, "0")); - if (CollectionUtils.isEmpty(packagerelationList)) { - BstIvtBoxinfo bstIvtBoxinfo = bstIvtBoxinfoMapper.selectOne(new LambdaQueryWrapper().eq(BstIvtBoxinfo::getBox_no, schBaseTask.getVehicle_code2()).ne(BstIvtBoxinfo::getIs_packing, "1")); - if (bstIvtBoxinfo == null) { - throw new BadRequestException("找不到该木箱信息!"); - } - bstIvtBoxinfo.setIs_packing("1"); - bstIvtBoxinfoMapper.updateById(bstIvtBoxinfo); - } //创建装箱区->空载具缓存位补空任务 //kzjhcwTask.toKzjHcw(schBaseTask.getPoint_code1()); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendZxToDjw.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendZxToDjw.java index 1fc929787..10a4e49ea 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendZxToDjw.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendZxToDjw.java @@ -56,84 +56,86 @@ public class AutoSendZxToDjw { } void sendZxToDjw() { + //装箱位有木箱 + List zxwPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱位"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), PackageInfoIvtEnum.TASK_TYPE.code("装箱区->装箱对接位")); + if (CollectionUtils.isEmpty(zxwPackageinfoivtList)) { + return; + } //装箱区有子卷且没有正在进行的装箱任务 List zxqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", ""); if (CollectionUtils.isEmpty(zxqPackageinfoivtList)) { return; } - //装箱位有木箱 - List zxwPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱位"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), PackageInfoIvtEnum.TASK_TYPE.code("装箱区->装箱对接位")); - if (CollectionUtils.isNotEmpty(zxwPackageinfoivtList)) { - //装箱位上的木箱号 - String boxNo = zxwPackageinfoivtList.get(0).getContainer_name(); - //获取木箱信息,未包装的木箱 - BstIvtBoxinfo bstIvtBoxinfo = bstIvtBoxinfoMapper.selectOne(new LambdaQueryWrapper().eq(BstIvtBoxinfo::getBox_no, boxNo).ne(BstIvtBoxinfo::getIs_packing, "1")); - if (bstIvtBoxinfo == null) { - throw new BadRequestException("请检查木箱号:"+ boxNo +"是否存在或者状态为已装箱!"); - } - //检查木箱信息 - checkBoxParams(boxNo, bstIvtBoxinfo); - //3.查询子卷对应的包装关系表,判断装箱位的木箱号是否为子卷对应的木箱号,是,创建搬运任务到装箱对接位位桁架任务 - List relationList = subpackageRelationService - .list(new LambdaUpdateWrapper().eq(PdmBiSubpackagerelation::getPackage_box_sn, boxNo).eq(PdmBiSubpackagerelation::getStatus, "0")); - if (CollectionUtils.isEmpty(relationList)) { - throw new BadRequestException("装箱位的木箱号"+boxNo+"对应的子卷包装关系异常,请检查子卷包装关系状态是否为0!"); - } - //获取与该木箱号匹配的子卷号 - String containerName = relationList.get(0).getContainer_name(); - List zxqPoint = zxqPackageinfoivtList.stream().filter(r -> r.getContainer_name().equals(containerName)).collect(Collectors.toList()); - //装箱区点位上有与该木箱号匹配的子卷 - if (CollectionUtils.isNotEmpty(zxqPoint)) { - List productionPlanList = pdmBiSlittingproductionplanMapper.selectList(new LambdaQueryWrapper().eq(PdmBiSlittingproductionplan::getContainer_name, containerName)); - if (productionPlanList.isEmpty()) { - throw new BadRequestException("装箱区的子卷号为"+containerName+"无对应的分切计划信息,请检查!"); - } - //创建搬运任务到装箱位 - JSONObject jo = new JSONObject(); - jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("装箱区->装箱对接位")); - jo.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务")); - jo.put("point_code1", zxqPoint.get(0).getPoint_code()); - jo.put("point_code2", zxwPackageinfoivtList.get(0).getPoint_code()); - jo.put("vehicle_code", containerName); - jo.put("vehicle_code2", boxNo); - jo.put("is_send", "1"); - //扩展参数 - JSONObject param = new JSONObject(); - //查询是否为最后一个子卷,相同木箱号且子卷包装状态为生成 - List packagerelationList = subpackageRelationService.list(new LambdaQueryWrapper().eq(PdmBiSubpackagerelation::getPackage_box_sn, boxNo).eq(PdmBiSubpackagerelation::getStatus, "0")); - if (packagerelationList.size() == 1 && packagerelationList.get(0).getContainer_name().equals(containerName)) { - //最后子卷 - param.put("lastOne", "1"); - } else { - param.put("lastOne", "0"); - } - //获取木箱高度等级 - param.put("heightLevel", getHeightLevel(bstIvtBoxinfo)); - //获取子卷长度 - param.put("len", getMaxNum(productionPlanList)); - //木箱最大数量 - param.put("maxNo", bstIvtBoxinfo.getNum()); - //托盘类型 1小托盘 2大托盘 - param.put("containerType", bstIvtBoxinfo.getVehicle_type()); - //木箱需放入子卷数量 - param.put("boxNo", relationList.get(0).getQuanlity_in_box()); - //子卷号 - param.put("barcode", containerName); - jo.put("request_param", param.toString()); - zxDjwTask.createTask(jo); - } + //装箱位上的木箱号 + String boxNo = zxwPackageinfoivtList.get(0).getContainer_name(); + //获取木箱信息,未包装的木箱 + BstIvtBoxinfo bstIvtBoxinfo = bstIvtBoxinfoMapper.selectOne(new LambdaQueryWrapper().eq(BstIvtBoxinfo::getBox_no, boxNo).ne(BstIvtBoxinfo::getIs_packing, "1")); + if (bstIvtBoxinfo == null) { + throw new BadRequestException("请检查木箱号:" + boxNo + "是否存在或者状态为已装箱!"); } + //检查木箱信息 + checkBoxParams(boxNo, bstIvtBoxinfo); + //3.查询子卷对应的包装关系表,判断装箱位的木箱号是否为子卷对应的木箱号,是,创建搬运任务到装箱对接位位桁架任务 + List relationList = subpackageRelationService + .list(new LambdaUpdateWrapper().eq(PdmBiSubpackagerelation::getPackage_box_sn, boxNo).eq(PdmBiSubpackagerelation::getStatus, "0")); + if (CollectionUtils.isEmpty(relationList)) { + throw new BadRequestException("装箱位的木箱号" + boxNo + "对应的子卷包装关系异常,请检查子卷包装关系状态是否为0!"); + } + //获取与该木箱号匹配的子卷号 + String containerName = relationList.get(0).getContainer_name(); + List zxqPoint = zxqPackageinfoivtList.stream().filter(r -> r.getContainer_name().equals(containerName)).collect(Collectors.toList()); + //装箱区点位上有与该木箱号匹配的子卷 + if (CollectionUtils.isNotEmpty(zxqPoint)) { + List productionPlanList = pdmBiSlittingproductionplanMapper.selectList(new LambdaQueryWrapper().eq(PdmBiSlittingproductionplan::getContainer_name, containerName)); + if (productionPlanList.isEmpty()) { + throw new BadRequestException("装箱区的子卷号为" + containerName + "无对应的分切计划信息,请检查!"); + } + //创建搬运任务到装箱位 + JSONObject jo = new JSONObject(); + jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("装箱区->装箱对接位")); + jo.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务")); + jo.put("point_code1", zxqPoint.get(0).getPoint_code()); + jo.put("point_code2", zxwPackageinfoivtList.get(0).getPoint_code()); + jo.put("vehicle_code", containerName); + jo.put("vehicle_code2", boxNo); + jo.put("is_send", "1"); + //扩展参数 + JSONObject param = new JSONObject(); + //查询是否为最后一个子卷,相同木箱号且子卷包装状态为生成 + List packagerelationList = subpackageRelationService.list(new LambdaQueryWrapper().eq(PdmBiSubpackagerelation::getPackage_box_sn, boxNo).eq(PdmBiSubpackagerelation::getStatus, "0")); + if (packagerelationList.size() == 1 && packagerelationList.get(0).getContainer_name().equals(containerName)) { + //最后子卷 + param.put("lastOne", "1"); + } else { + param.put("lastOne", "0"); + } + //获取木箱高度等级 + param.put("heightLevel", getHeightLevel(bstIvtBoxinfo)); + //获取子卷长度 + param.put("len", getMaxNum(productionPlanList)); + //木箱最大数量 + param.put("maxNo", bstIvtBoxinfo.getNum()); + //托盘类型 1小托盘 2大托盘 + param.put("containerType", bstIvtBoxinfo.getVehicle_type()); + //木箱需放入子卷数量 + param.put("boxNo", relationList.get(0).getQuanlity_in_box()); + //子卷号 + param.put("barcode", containerName); + jo.put("request_param", param.toString()); + zxDjwTask.createTask(jo); + } + } private static void checkBoxParams(String boxNo, BstIvtBoxinfo bstIvtBoxinfo) { if (StringUtils.isBlank(bstIvtBoxinfo.getBox_high())) { - throw new BadRequestException("请检查木箱号:"+ boxNo +"木箱高度不能为空!"); + throw new BadRequestException("请检查木箱号:" + boxNo + "木箱高度不能为空!"); } if (StringUtils.isBlank(bstIvtBoxinfo.getNum())) { - throw new BadRequestException("请检查木箱号:"+ boxNo +"能装的最大子卷数不能为空!"); + throw new BadRequestException("请检查木箱号:" + boxNo + "能装的最大子卷数不能为空!"); } if (StringUtils.isBlank(bstIvtBoxinfo.getVehicle_type())) { - throw new BadRequestException("请检查木箱号:"+ boxNo +"托盘类型不能为空!"); + throw new BadRequestException("请检查木箱号:" + boxNo + "托盘类型不能为空!"); } } From ea8b70ec38ac744aa17bb8464b2ed2347ad7e6a6 Mon Sep 17 00:00:00 2001 From: gongbaoxiong <751575283@qq.com> Date: Wed, 26 Jun 2024 14:17:15 +0800 Subject: [PATCH 27/30] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E5=AD=90=E5=8D=B7=E8=A7=84=E6=A0=BC=E6=97=A0=E6=B3=95=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lms/nladmin-ui/src/views/wms/pdm/sub/DivDialog.vue | 12 +++++++----- lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue | 8 ++++---- lms/nladmin-ui/src/views/wms/pdm/sub/index.vue | 10 ++++------ 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/lms/nladmin-ui/src/views/wms/pdm/sub/DivDialog.vue b/lms/nladmin-ui/src/views/wms/pdm/sub/DivDialog.vue index c85add6e7..b36fd8bbc 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/sub/DivDialog.vue +++ b/lms/nladmin-ui/src/views/wms/pdm/sub/DivDialog.vue @@ -107,7 +107,7 @@ - + @@ -166,7 +166,7 @@ export default { stor_id: '', sect_id: '', sectProp: null, - paper_tube_description: '', + paperTubeDescription: '', bucketProp: {}, structShow: false, bucketObj: null, @@ -337,9 +337,9 @@ export default { debugger this.form.tableMater = this.currentSelection this.form.checked = row.material_code - this.form.sale_order_name = this.sale_order_name + this.form.sale_order_name = this.saleOrderName await crudPackagerelation.updateEntityList(this.form) - const res = crudSubpackagerelation.queryContainerization({ 'sale_order_name': this.sale_order_name }) + const res = crudSubpackagerelation.queryContainerization({ 'sale_order_name': this.saleOrderName }) this.openParam = res.content this.clearSelection() this.form.tableMater = [] @@ -349,7 +349,9 @@ export default { divStruct() { debugger if (this.currentSelection.length > 0 && this.$refs.dis_table.selection.length > 0) { - this.paper_tube_description = this.currentSelection[0].paper_tube_description + debugger + const paper_description = this.currentSelection.filter(item => item.paper_tube_description !== null && item.paper_tube_description !== '') + this.paperTubeDescription = paper_description[0].paper_tube_description this.structShow = true this.$refs.child.getMsg(false) } else { diff --git a/lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue b/lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue index de651c9a1..c406f6ecb 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue +++ b/lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue @@ -67,10 +67,10 @@ 请仔细核对子卷与木箱规格是否匹配,

- 木箱长度为:{{ this.box_length }}, + 木箱长度为:{{ this.boxLength }}

- 子卷规格为:{{ this.paper_tube_description }}, + 子卷规格为:{{ this.paperTubeDescription }}

点击确定后将立即生成木箱出库任务,无法更改! @@ -121,7 +121,7 @@ export default { }, data() { return { - box_length: '', + boxLength: '', classes: [], dialogVisible: false, dialogVisible1: false, @@ -211,7 +211,7 @@ export default { submit() { debugger this.rows = this.$refs.table.selection - this.box_length = this.rows[0].box_length + this.boxLength = this.rows[0].box_length if (this.rows.length <= 0) { this.$message('请先选择木箱信息') return diff --git a/lms/nladmin-ui/src/views/wms/pdm/sub/index.vue b/lms/nladmin-ui/src/views/wms/pdm/sub/index.vue index bd5e38549..4f8db0261 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/sub/index.vue +++ b/lms/nladmin-ui/src/views/wms/pdm/sub/index.vue @@ -127,7 +127,7 @@ @@ -198,7 +198,7 @@ export default { activeName: 'first', divShow: false, openParam: [], - sale_order_name: null, + saleOrderName: null, bussConfig: null, currentRow: null, dis_flag: true, @@ -224,15 +224,13 @@ export default { this.crud.toQuery() }, async divOpen() { - debugger - this.sale_order_name = this.currentRow.sale_order_name + this.saleOrderName = this.currentRow.sale_order_name const res = await crudSubpackagerelation.queryContainerization({ 'sale_order_name': this.currentRow.sale_order_name }) this.openParam = res.content // this.divShow = true }, divOpen1() { - debugger - this.sale_order_name = this.currentRow.sale_order_name + this.saleOrderName = this.currentRow.sale_order_name crudSubpackagerelation.queryContainerization({ 'sale_order_name': this.currentRow.sale_order_name }).then(res => { this.openParam = res.content this.divShow = true From 0473d9529ece08bcb98c26a2552f7ba093db60ef Mon Sep 17 00:00:00 2001 From: liuxy Date: Wed, 26 Jun 2024 17:13:34 +0800 Subject: [PATCH 28/30] =?UTF-8?q?rev=EF=BC=9A=E7=A9=BA=E6=9C=A8=E7=AE=B1?= =?UTF-8?q?=E5=85=A5=E5=BA=93=EF=BC=9A=E4=BC=98=E5=85=88=E5=B0=86=E7=9B=B8?= =?UTF-8?q?=E5=90=8C=E6=9C=A8=E7=AE=B1=E8=A7=84=E6=A0=BC=E7=9A=84=E6=9C=A8?= =?UTF-8?q?=E7=AE=B1=E6=94=BE=E5=9C=A8=E5=90=8C=E4=B8=80=E6=B7=B1=E6=B5=85?= =?UTF-8?q?=E8=B4=A7=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../util/impl/InBoxManageServiceImpl.java | 91 ++++++++++++++++++- .../service/iostorInv/util/wql/BST_INBOX.wql | 65 ++++++++++++- 2 files changed, 154 insertions(+), 2 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBoxManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBoxManageServiceImpl.java index 84a41f20d..0cfd69156 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBoxManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBoxManageServiceImpl.java @@ -31,6 +31,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; +import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; @@ -132,7 +133,15 @@ public class InBoxManageServiceImpl implements InBoxManageService { jsonParam.put("box_high", boxDao.getBox_high()); jsonParam.put("vehicle_type", boxDao.getVehicle_type()); jsonParam.put("height", height); - JSONObject jsonAttr = getStruct(jsonParam); + + // 优先找相同规格的木箱:如果未找到在执行负载均衡策略 + JSONObject jsonAttr; + jsonAttr = queryEqualBox(jsonParam); + + if (ObjectUtil.isEmpty(jsonAttr)) { + jsonAttr = getStruct(jsonParam); + } + if (ObjectUtil.isEmpty(jsonAttr)) { notInRowList.clear(); notInBlockList.clear(); @@ -412,6 +421,84 @@ public class InBoxManageServiceImpl implements InBoxManageService { return jsonAttrNow; } + /** + * 根据木箱规格找相同规格的仓位 + * @param jsonParam { + * stor_id:仓库标识 + * sect_id:库区标识 + * box_length:木箱长度 + * box_width:木箱宽度 + * box_high:木箱高度 + * vehicle_type: 载具类型 + * height: 仓位高度 + * } + * @return JSONObject : 仓位对象 + */ + private JSONObject queryEqualBox(JSONObject jsonParam) { + // 需要返回的仓位 + JSONObject result = new JSONObject(); + + // 1.匹配相同木箱规格的排(row_num) + jsonParam.put("flag", "6"); + List rowList = WQL.getWO("BST_INBOX").addParamMap(jsonParam) + .process().getResultJSONArray(0).toJavaList(JSONObject.class); + + // 查询此排的所有仓位 + String row_in = rowList.stream() + .map(row -> row.getString("row_num")) + .collect(Collectors.joining("','")); + + List attrRowAllList = WQL.getWO("BST_INBOX").addParam("flag", "7").addParam("sect_id", jsonParam.getString("sect_id")) + .addParam("row_in", "('" + row_in + "')").process().getResultJSONArray(0).toJavaList(JSONObject.class); + + + outerLoop: for (JSONObject jsonRow : rowList) { + // 查询这一排相同木箱规格的仓位 + List attrRowList = attrRowAllList.stream() + .filter(row -> row.getString("row_num").equals(jsonRow.getString("row_num"))) + .filter(row -> row.getDoubleValue("box_length") == jsonParam.getDoubleValue("box_length") + && row.getDoubleValue("box_width") == jsonParam.getDoubleValue("box_width") + && row.getDoubleValue("box_high") == jsonParam.getDoubleValue("box_high") + && ObjectUtil.isNotEmpty(row.getString("storagevehicle_code")) + ) + .collect(Collectors.toList()); + + // 匹配货位 + for (JSONObject json : attrRowList) { + // 判断此货位是深位还是浅位 + if (json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("浅")) + || json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("无")) + ) { + continue; + } + + // 如果是深位:找出对应浅位 + JSONObject lowAttr = attrRowAllList.stream() + .filter(row -> row.getString("col_num").equals(json.getString("col_num")) && + row.getString("layer_num").equals(json.getString("layer_num")) && + row.getString("row_num").equals(json.getString("row_num")) && + row.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("浅"))) + .findFirst().orElse(null); + + if (ObjectUtil.isEmpty(lowAttr)) { + throw new BadRequestException("仓位:" + json.getString("struct_code") + "对应的浅货位错误!"); + } + + // 判断此仓位是否有货、是否被锁住 + if (ObjectUtil.isNotEmpty(lowAttr.getString("storagevehicle_code")) + || !lowAttr.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定")) + ) { + continue; + } + + result = lowAttr; + break outerLoop; + } + + } + return result; + } + /** * 找一个空仓位(木箱区) * @@ -502,6 +589,7 @@ public class InBoxManageServiceImpl implements InBoxManageService { * box_length:木箱长度 * box_width:木箱宽度 * box_high:木箱高度 + * vehicle_type: 载具类型 * } * @return String 巷道 */ @@ -562,6 +650,7 @@ public class InBoxManageServiceImpl implements InBoxManageService { * box_length:木箱长度 * box_width:木箱宽度 * box_high:木箱高度 + * vehicle_type: 载具类型 * } * @return String 排 */ diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_INBOX.wql b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_INBOX.wql index 795a6f307..a3c17f1f2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_INBOX.wql +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_INBOX.wql @@ -20,6 +20,9 @@ 输入.height TYPEAS s_string 输入.row_num TYPEAS s_string 输入.vehicle_type TYPEAS s_string + 输入.box_length TYPEAS s_string + 输入.box_width TYPEAS s_string + 输入.box_high TYPEAS s_string 输入.block_in TYPEAS f_string 输入.row_in TYPEAS f_string 输入.not_row_in TYPEAS f_string @@ -184,4 +187,64 @@ ENDSELECT ENDQUERY - ENDIF \ No newline at end of file + ENDIF + + IF 输入.flag = "6" + QUERY + SELECT + attr.row_num + FROM + st_ivt_structattr attr + INNER JOIN bst_ivt_boxinfo box ON box.box_no = attr.storagevehicle_code + WHERE + attr.is_used = '1' + AND attr.is_delete = '0' + AND attr.stor_id = 输入.stor_id + AND attr.sect_id = 输入.sect_id + AND attr.storagevehicle_type = 输入.vehicle_type + AND box.is_packing = '0' + AND IFNULL(attr.storagevehicle_code,'') <> '' + + OPTION 输入.box_length <> "" + box.box_length = 输入.box_length + ENDOPTION + + OPTION 输入.box_width <> "" + box.box_width = 输入.box_width + ENDOPTION + + OPTION 输入.box_high <> "" + box.box_high = 输入.box_high + ENDOPTION + + GROUP BY attr.row_num + + ENDOPTION + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "7" + QUERY + SELECT + attr.*, + box.box_length, + box.box_width, + box.box_high + FROM + st_ivt_structattr attr + LEFT JOIN bst_ivt_boxinfo box ON box.box_no = attr.storagevehicle_code AND box.is_packing = '0' + WHERE + attr.is_used = '1' + AND attr.is_delete = '0' + AND attr.sect_id = 输入.sect_id + + OPTION 输入.row_in <> "" + attr.row_num IN 输入.row_in + ENDOPTION + + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF From 35d18e93b00594be2b70400e6a3b879214ce60b8 Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Wed, 26 Jun 2024 17:46:19 +0800 Subject: [PATCH 29/30] =?UTF-8?q?remove:=20=E5=8E=BB=E9=99=A4=E5=A4=87?= =?UTF-8?q?=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/nl/b_lms/sch/tasks/slitter/StockAreaCallTubeTask.java | 1 - .../org/nl/b_lms/sch/tasks/slitter/StockAreaSendVehicleTask.java | 1 - 2 files changed, 2 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaCallTubeTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaCallTubeTask.java index 33748cd88..118a9f3e1 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaCallTubeTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaCallTubeTask.java @@ -70,7 +70,6 @@ public class StockAreaCallTubeTask extends AbstractAcsTask { .vehicle_code(task.getVehicle_code()) .agv_system_type(agv_system_type) .priority(task.getPriority()) - .remark(task.getRemark()) .product_area(task.getProduct_area()) .build(); resultList.add(dto); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaSendVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaSendVehicleTask.java index c65cc6640..b98cd6256 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaSendVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaSendVehicleTask.java @@ -64,7 +64,6 @@ public class StockAreaSendVehicleTask extends AbstractAcsTask { .vehicle_code(task.getVehicle_code()) .agv_system_type(agv_system_type) .priority(task.getPriority()) - .remark(task.getRemark()) .product_area(task.getProduct_area()) .build(); resultList.add(dto); From 2fad0075c6e2cdcb1e3ed13eccb645295f457f95 Mon Sep 17 00:00:00 2001 From: zhouz <> Date: Wed, 26 Jun 2024 21:49:19 +0800 Subject: [PATCH 30/30] =?UTF-8?q?fix:MES=E7=9B=B8=E5=85=B3=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pda/controller/SlitterPdaController.java | 8 ++ .../org/nl/b_lms/sch/tasks/ProcessTask.java | 37 +++++++ .../tasks/slitter/service/SlitterService.java | 2 + .../service/impl/SlitterServiceImpl.java | 22 +++- .../acs/service/impl/AcsToWmsServiceImpl.java | 3 + .../wms/ext/mes/rest/LmsToMesController.java | 4 + .../mes/service/impl/LmsToMesServiceImpl.java | 8 +- .../mes/service/impl/MesToLmsServiceImpl.java | 104 ++++++++++++++++-- 8 files changed, 176 insertions(+), 12 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/SlitterPdaController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/SlitterPdaController.java index 2767479c1..677c3804d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/SlitterPdaController.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/SlitterPdaController.java @@ -53,10 +53,18 @@ public class SlitterPdaController { public ResponseEntity getShaftPoint() { return new ResponseEntity<>(slitterDevices.getShaftPoint(), HttpStatus.OK); } + @PostMapping("/doInitShaftPoint") @Log("初始化套拔轴点位") @SaIgnore public ResponseEntity doInitShaftPoint(@RequestBody JSONObject param) { return new ResponseEntity<>(slitterDevices.doInitShaftPoint(param), HttpStatus.OK); } + + @PostMapping("/cutIn") + @Log("分切母卷上料") + @SaIgnore + public ResponseEntity cutIn(@RequestBody JSONObject param) { + return new ResponseEntity<>(slitterDevices.cutIn(param), HttpStatus.OK); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/ProcessTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/ProcessTask.java index d3f686fc2..f10674574 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/ProcessTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/ProcessTask.java @@ -12,6 +12,8 @@ import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.ext.mes.service.LmsToMesService; import org.nl.wms.sch.AcsTaskDto; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; @@ -128,6 +130,17 @@ public class ProcessTask extends AbstractAcsTask { map3.put("empty_vehicle_code", empty_vehicle_code); map3.put("empty_point_status", "02"); ivtTab.update(map3, "empty_point_code = '" + point_code4 + "'"); + + //调用MES转移接口 + String from_area = cool_jo1.getString("point_code").substring(0,2); + String to_area = st_jo1.getString("ext_code").substring(0, 2); + JSONObject mom_jo = new JSONObject(); + mom_jo.put("from_area", from_area); + mom_jo.put("to_area", to_area); + mom_jo.put("container_name", container_name); + LmsToMesService bean = SpringContextHolder.getBean(LmsToMesService.class); + bean.momAutoTransterMoveIn(mom_jo); + } if ("011002".equals(task_type)) { //维护冷却区满轴点位的库存 @@ -142,6 +155,18 @@ public class ProcessTask extends AbstractAcsTask { HashMap map2 = new HashMap(); map2.put("up_scroll", full_vehicle_code); stTab.update(map2, "up_point_code = '" + point_code2.split("_K")[0] + "'").uniqueResult(0); + JSONObject st_jo1 = stTab.query("up_point_code = '" + point_code2.split("_M")[0] + "'").uniqueResult(0); + + //调用MES转移接口 + String from_area = cool_jo1.getString("point_code").substring(0,2); + String to_area = st_jo1.getString("ext_code").substring(0, 2); + JSONObject mom_jo = new JSONObject(); + mom_jo.put("from_area", from_area); + mom_jo.put("to_area", to_area); + mom_jo.put("container_name", container_name); + LmsToMesService bean = SpringContextHolder.getBean(LmsToMesService.class); + bean.momAutoTransterMoveIn(mom_jo); + } if ("010703".equals(task_type)) { //维护表处区点位 @@ -169,6 +194,18 @@ public class ProcessTask extends AbstractAcsTask { map3.put("container_name", container_name); map3.put("full_point_status", "02"); ivtTab.update(map3, "full_point_code = '" + point_code2 + "'"); + + JSONObject cool_jo1 = ivtTab.query("full_point_code = '" + point_code2 + "'").uniqueResult(0); + + //调用MES转移接口 + String from_area = st_jo1.getString("ext_code").substring(0, 2); + String to_area = cool_jo1.getString("point_code").substring(0,2); + JSONObject mom_jo = new JSONObject(); + mom_jo.put("from_area", from_area); + mom_jo.put("to_area", to_area); + mom_jo.put("container_name", container_name); + LmsToMesService bean = SpringContextHolder.getBean(LmsToMesService.class); + bean.momAutoTransterMoveIn(mom_jo); } } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/SlitterService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/SlitterService.java index d71ab930c..016e5dc20 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/SlitterService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/SlitterService.java @@ -118,4 +118,6 @@ public interface SlitterService { * @return / */ JSONObject doInitShaftPoint(JSONObject param); + + JSONObject cutIn(JSONObject param); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java index c84631c4d..73097ca23 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java @@ -39,6 +39,7 @@ import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil; import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.TaskUtils; import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.core.bean.WQLObject; import org.nl.wms.ext.acs.service.WmsToAcsService; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; @@ -610,7 +611,7 @@ public class SlitterServiceImpl implements SlitterService { } res.put("RTOAL", 0); res.put("RTMSG", "操作失败!"); - res.put("RTYPE", "F"); + res.put("RTYPE", "E"); return res; } @@ -800,4 +801,23 @@ public class SlitterServiceImpl implements SlitterService { res.put("message", "请求成功!"); return res; } + + @Override + public JSONObject cutIn(JSONObject param) { + String container_name = param.getString("container_name"); + //如果have_empty为0,则不做四个点的任务,为1则做四个点的任务 + String have_empty = param.getString("have_empty"); + String device_code = param.getString("device_code"); + + //查询当前母卷所在的点位在哪 + JSONObject cache_jo = WQLObject.getWQLObject("st_ivt_stpointcacheivt").query("container_name = '"+container_name+"'").uniqueResult(0); + if (ObjectUtil.isEmpty(cache_jo)) { + throw new BadRequestException("未查询到母卷所在的点位!"); + } + + + + + return null; + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index 3cd8b75d5..55a42d144 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -1874,6 +1874,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { if (ObjectUtil.isEmpty(whereJson.getString("material_barcode"))) { throw new BadRequestException("子卷号不能为空!"); } + if (whereJson.getIntValue("weight") <= 0) { + throw new BadRequestException("上报的重量不能为0!"); + } whereJson.put("bill_type", IOSEnum.IN_TYPE.code("生产入库")); inBussManageService.inTask(whereJson); } else if (type.equals(IOSEnum.ACSTOLMS_TYPE.code("空盘入库"))) { diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/LmsToMesController.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/LmsToMesController.java index 4f7c69aea..43bd520eb 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/LmsToMesController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/LmsToMesController.java @@ -1,5 +1,6 @@ package org.nl.wms.ext.mes.rest; +import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -120,18 +121,21 @@ public class LmsToMesController { @PostMapping("/momAutoTransterMoveIn") @Log("表处、分切上料反馈接口") + @SaIgnore public ResponseEntity momAutoTransterMoveIn(@RequestBody JSONObject jo) { return new ResponseEntity<>(lmsToMesService.momAutoTransterMoveIn(jo), HttpStatus.OK); } @PostMapping("/momGetPackingInfo") @Log("LMS通过木箱号调用木箱信息") + @SaIgnore public ResponseEntity momGetPackingInfo(@RequestBody JSONObject jo) { return new ResponseEntity<>(lmsToMesService.momGetPackingInfo(jo), HttpStatus.OK); } @PostMapping("/momBoxPackageSubmit") @Log("LMS装箱完成传MES包装关系") + @SaIgnore public ResponseEntity momBoxPackageSubmit(@RequestBody JSONObject jo) { return new ResponseEntity<>(lmsToMesService.momBoxPackageSubmit(jo), HttpStatus.OK); } 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 f51d82f0c..2a09ffa44 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 @@ -724,7 +724,7 @@ public class LmsToMesServiceImpl implements LmsToMesService { log.info("momAutoTransterMoveIn接口输入参数为:-------------------" + param.toString()); String url = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_URL").getValue(); - String api = "CamstarApi/momAutoTransterMoveIn"; + String api = "/momAutoTransterMoveIn"; url = url + api; String UserName = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_USERNAME").getValue(); @@ -768,7 +768,7 @@ public class LmsToMesServiceImpl implements LmsToMesService { log.info("momGetPackingInfo接口输入参数为:-------------------" + param.toString()); String url = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_URL").getValue(); - String api = "CamstarApi/momGetPackingInfo"; + String api = "momGetPackingInfo"; url = url + api; String UserName = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_USERNAME").getValue(); @@ -827,7 +827,7 @@ public class LmsToMesServiceImpl implements LmsToMesService { JSONObject result = new JSONObject(); String url = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_URL").getValue(); - String api = "CamstarApi/momBoxPackageSubmit"; + String api = "momBoxPackageSubmit"; url = url + api; String UserName = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_USERNAME").getValue(); @@ -837,7 +837,7 @@ public class LmsToMesServiceImpl implements LmsToMesService { param.put("PackageBoxSN", box_no); param.put("QuanlityInBox", num); param.put("BoxWeight", box_weight); - param.put("ContainerList", box_weight); + param.put("ContainerList", rows); try { String resultMsg = HttpRequest.post(url) 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 5338ecd04..887c301ad 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpStatus; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -15,6 +16,10 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.checkerframework.checker.units.qual.C; +import org.nl.b_lms.bst.ivt.scale.bound.service.IBstIvtScaleboundService; +import org.nl.b_lms.bst.ivt.scale.bound.service.dao.BstIvtScalebound; +import org.nl.b_lms.bst.ivt.scale.history.service.IBstIvtScalehistoryService; +import org.nl.b_lms.bst.ivt.scale.history.service.dao.BstIvtScalehistory; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation; @@ -23,6 +28,7 @@ import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; import org.nl.b_lms.sch.tasks.ProcessTask; import org.nl.b_lms.sch.tasks.first_floor_area.DjqTask; import org.nl.b_lms.sch.tasks.first_floor_area.GzqTask; +import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant; import org.nl.common.enums.PackageInfoIvtEnum; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; @@ -31,6 +37,7 @@ import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.SpringContextHolder; import org.nl.system.service.param.impl.SysParamServiceImpl; +import org.nl.wms.ext.acs.service.WmsToAcsService; import org.nl.wms.ext.mes.service.MesToLmsService; import org.nl.wms.pda.mps.service.InService; import org.nl.wms.pda.mps.service.OutService; @@ -64,11 +71,20 @@ public class MesToLmsServiceImpl implements MesToLmsService { @Autowired private IPdmBiSlittingproductionplanService slittingproductionplanService; + @Autowired + private WmsToAcsService wmsToAcsService; + @Resource private DjqTask djqTask; @Resource private GzqTask gzqTask; + @Autowired + private IBstIvtScalehistoryService scaleHistoryService; + + @Autowired + private IBstIvtScaleboundService scaleBoundService; + @Resource private IbstIvtPackageinfoivtService packageinfoivtService; @@ -102,6 +118,7 @@ public class MesToLmsServiceImpl implements MesToLmsService { String EqpVelocity = param.getString("EqpVelocity"); String UpCoilerDate = param.getString("UpCoilerDate"); String IsReloadSend = param.getString("IsReloadSend"); + String Attribute1 = param.getString("Attribute1"); WQLObject pointTab = WQLObject.getWQLObject("ST_IVT_SbPointIvt"); WQLObject orderTab = WQLObject.getWQLObject("PDM_BI_RawFoilWorkOrder"); @@ -153,6 +170,11 @@ public class MesToLmsServiceImpl implements MesToLmsService { json.put("is_reload_send", IsReloadSend); json.put("product_area", jsonPoint.getString("product_area")); json.put("point_code", jsonPoint.getString("point_code")); + if (Attribute1.equals("SF1")) { + json.put("order_type", "1"); + } else if (Attribute1.equals("SF2")) { + json.put("order_type", "2"); + } json.put("realstart_time", DateUtil.now()); json.put("status", "01"); json.put("is_delete", "0"); @@ -1776,11 +1798,13 @@ public class MesToLmsServiceImpl implements MesToLmsService { @Override public JSONObject getRollInfo(JSONObject param) { + JSONObject result = new JSONObject(); String ContainerName = param.getString("ContainerName"); PdmBiSlittingproductionplan one = slittingproductionplanService.getOne(new LambdaQueryWrapper().eq(PdmBiSlittingproductionplan::getContainer_name, ContainerName)); if (ObjectUtil.isEmpty(one)) { throw new BadRequestException("未查询到子卷号为[" + ContainerName + "]的分切计划!"); } + JSONArray arr = new JSONArray(); JSONObject resultParam = new JSONObject(); resultParam.put("ContainerName", ContainerName); resultParam.put("ResourceName", ""); @@ -1788,7 +1812,13 @@ public class MesToLmsServiceImpl implements MesToLmsService { resultParam.put("WeighDate", DateUtil.now()); resultParam.put("Type", one.getPaper_tube_or_FRP()); resultParam.put("CarrierWeight", one.getPaper_weight()); - return resultParam; + arr.add(resultParam); + result.put("RTYPE", "S"); + result.put("RTMSG", "操作成功!"); + result.put("RTOAL", 1); + result.put("RTDAT", arr); + + return result; } @Override @@ -1947,18 +1977,78 @@ public class MesToLmsServiceImpl implements MesToLmsService { public JSONObject getWasteFoilWeight(JSONObject param) { log.info("getWasteFoilWeight输入参数为:-------------------" + param.toString()); - JSONObject resultParam = new JSONObject(); - resultParam.put("RTYPE", "S"); - resultParam.put("Code", "0"); - resultParam.put("RTMSG", "操作成功!"); - - return resultParam; + { + log.info("分切子卷获取LMS,AGV废箔称重重量的输入参数为:{}", param); + JSONObject res = new JSONObject(); + JSONObject resData = new JSONObject(); + String resourceName = param.getString("ResourceName"); + // 获取称的设备号 + BstIvtScalebound scaleEquipment = scaleBoundService.getOne(new LambdaQueryWrapper() + .eq(BstIvtScalebound::getDevice_code, resourceName)); + // 下发给acs称重 + JSONObject acsWeighing = new JSONObject(); + acsWeighing.put("device_code", scaleEquipment.getScale_code()); + acsWeighing.put("type", "1"); + acsWeighing.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + JSONObject action = wmsToAcsService.getWeight(acsWeighing); + if (HttpStatus.HTTP_OK == action.getInteger("status")) { + JSONObject data = action.getJSONObject("data"); + String currentWeight = data.getString("currentWeight"); + String lastWeight = data.getString("lastWeight"); + String weightGap = data.getString("weightGap"); + String now = DateUtil.now(); + // 记录数据库 + BstIvtScalehistory history = new BstIvtScalehistory(); + history.setHistory_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + history.setScale_code(scaleEquipment.getScale_code()); + history.setDevice_code(scaleEquipment.getDevice_code()); + history.setCurrent_weight(currentWeight); + history.setLast_weight(lastWeight); + history.setWeight_gap(weightGap); + history.setRecord_time(now); + scaleHistoryService.save(history); + log.info("废箔称重记录:{}", history); + res.put("RTOAL", 1); + res.put("RTMSG", "操作成功!"); + res.put("RTYPE", "S"); + res.put("RTDAT", resData); + resData.put("ResourceName", resourceName); + resData.put("Weight", weightGap); + resData.put("WeighDate", now); + log.info("废箔称重反馈MES, 反馈信息:{}", res); + return res; + } + res.put("RTOAL", 0); + res.put("RTMSG", "称重失败!"); + res.put("RTYPE", "F"); + log.error("废箔称重反馈MES, 反馈信息:{}", res); + return res; + } } @Override public JSONObject WasteFoilSuccess(JSONObject param) { log.info("WasteFoilSuccess输入参数为:-------------------" + param.toString()); + log.info("分切子卷获取LMS,AGV废箔称重重量MES提交废箔成功的输入参数为:{}", param); + JSONObject res = new JSONObject(); + String resourceName = param.getString("ResourceName"); + // 获取称的设备号 + BstIvtScalebound scaleEquipment = scaleBoundService.getOne(new LambdaQueryWrapper() + .eq(BstIvtScalebound::getDevice_code, resourceName)); + // 下发给acs称重 + JSONObject acsWeighing = new JSONObject(); + acsWeighing.put("device_code", scaleEquipment.getScale_code()); + acsWeighing.put("type", "2"); + acsWeighing.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + JSONObject action = wmsToAcsService.getWeight(acsWeighing); + if (HttpStatus.HTTP_OK == action.getInteger("status")) { + // 记录数据库 + res.put("RTOAL", 1); + res.put("RTMSG", "操作成功!"); + res.put("RTYPE", "S"); + return res; + } JSONObject resultParam = new JSONObject(); resultParam.put("RTYPE", "S"); resultParam.put("Code", "0");