From 019cd3c174c0205debe1cbfc0fc2fa2865e70fab Mon Sep 17 00:00:00 2001 From: tuqiang <437016993@qq.com> Date: Fri, 16 Jan 2026 09:55:57 +0800 Subject: [PATCH] =?UTF-8?q?add=EF=BC=9A=E7=8E=B0=E5=9C=BA=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lms/nladmin-system/nlsso-server/pom.xml | 6 +- .../MobileAuthorizationController.java | 1 + .../impl/MdMeMaterialbaseServiceImpl.java | 8 +- .../acs/controller/AcsToWmsController.java | 6 + .../wms/ext/acs/service/AcsToWmsService.java | 2 + .../acs/service/impl/AcsToWmsServiceImpl.java | 37 +- .../task/controller/PdaTaskController.java | 8 +- .../wms/pda/task/service/PdaTaskService.java | 2 + .../task/service/dao/dto/PdaRequestDto.java | 23 +- .../task/service/impl/PdaTaskServiceImpl.java | 488 +++++++++++------- .../service/dto/RegionStructIvtVo.java | 9 + .../service/dto/RegionStructQuery.java | 1 + .../sch/group/controller/GroupController.java | 18 +- .../wms/sch/group/service/dao/GroupPlate.java | 10 + .../sch/group/service/dao/GroupPlatedtl.java | 9 +- .../dao/mapper/MdPbGroupplateMapper.xml | 5 +- .../impl/MdPbGroupplatedtlServiceImpl.java | 2 +- .../sch/point/service/dao/SchBasePoint.java | 3 + .../service/dao/mapper/SchBasePointMapper.xml | 29 +- .../point/service/dto/SchBasePointDto.java | 3 + .../sch/task_manage/AutoInventoryReport.java | 126 +++-- .../org/nl/wms/sch/tasks/scxl/SCXLTask.java | 40 +- .../wms/sch/tasks/scxl/mapper/SCXLMapper.xml | 1 + .../org/nl/wms/sch/tasks/zjps/ZJPSTask.java | 137 +++-- .../wms/sch/tasks/zjps/mapper/ZJPSMapper.java | 2 +- .../wms/sch/tasks/zjps/mapper/ZJPSMapper.xml | 7 +- .../org/nl/wms/sch/tasks/zjxl/ZJXLTask.java | 12 +- .../wms/sch/tasks/zjxl/mapper/ZJXLMapper.xml | 3 +- .../src/views/wms/basedata/material/index.vue | 1 - .../src/views/wms/pdm/group/AddDialog.vue | 29 +- .../src/views/wms/pdm/group/ViewDialog.vue | 28 +- .../src/views/wms/pdm/group/index.vue | 34 +- .../src/views/wms/pdm/structivt/index.vue | 20 +- 33 files changed, 706 insertions(+), 404 deletions(-) diff --git a/lms/nladmin-system/nlsso-server/pom.xml b/lms/nladmin-system/nlsso-server/pom.xml index bea0d5b..696b27f 100644 --- a/lms/nladmin-system/nlsso-server/pom.xml +++ b/lms/nladmin-system/nlsso-server/pom.xml @@ -241,17 +241,17 @@ org.apache.poi poi-ooxml-schemas - 3.17 + 4.1.2 org.apache.poi poi - 3.17 + 4.1.2 org.apache.poi poi-ooxml - 3.17 + 4.1.2 xerces diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/secutiry/MobileAuthorizationController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/secutiry/MobileAuthorizationController.java index 14e48a8..ba4d51d 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/secutiry/MobileAuthorizationController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/secutiry/MobileAuthorizationController.java @@ -79,6 +79,7 @@ public class MobileAuthorizationController { result.put("token", "Bearer " + StpUtil.getTokenValue()); result.put("roles", permissionList); result.put("user", user); + result.put("is_send", userInfo.getGender()); return new ResponseEntity<>(TableDataInfo.buildJson(result), HttpStatus.OK); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata/material/service/impl/MdMeMaterialbaseServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata/material/service/impl/MdMeMaterialbaseServiceImpl.java index c60979d..a68d497 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata/material/service/impl/MdMeMaterialbaseServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata/material/service/impl/MdMeMaterialbaseServiceImpl.java @@ -146,10 +146,8 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl materialList = new ArrayList<>(); for (int i = 1; i < read.size(); i++) { List list = read.get(i); - String m1 = String.valueOf(list.get(0)); - String m2 = String.valueOf(list.get(1)); - String m3 = ObjectUtil.isEmpty(list.get(2)) ? null : String.valueOf(list.get(2)); - String m4 = ObjectUtil.isEmpty(list.get(3)) ? null : String.valueOf(list.get(3)); + String m2 = String.valueOf(list.get(0)); + String m3 = ObjectUtil.isEmpty(list.get(1)) ? null : String.valueOf(list.get(1)); // 根据物料编码查询是否有相同物料编码的物料 MdMeMaterialbase mdMeMaterialbase = this.baseMapper.selectOne( new QueryWrapper().lambda() @@ -160,10 +158,8 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl(acsToWmsService.applyIn(jo), HttpStatus.OK); } + @PostMapping("/applyOut") + @SaIgnore + public ResponseEntity applyOut(@RequestBody JSONObject jo) { + return new ResponseEntity<>(acsToWmsService.applyOut(jo), HttpStatus.OK); + } + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java index e006ccd..9f9cedd 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java @@ -49,4 +49,6 @@ public interface AcsToWmsService { JSONObject actionFinishRequest2(JSONObject param); JSONObject applyIn(JSONObject jo); + + JSONObject applyOut(JSONObject jo); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index 30ef490..11d5077 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -165,9 +165,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } //已分配过二次分配点位 if (StringUtils.isNotBlank(baseTask.getResponse_param())) { - if ("1".equals(type) && baseTask.getResponse_param().equals(PackageInfoIvtEnum.IS_SEND.code("取货是"))) { + if ("1".equals(type) && baseTask.getResponse_param().equals(PackageInfoIvtEnum.IS_ALLOCATE.code("取货是"))) { return baseTask.getPoint_code1(); - } else if ("2".equals(type) && baseTask.getResponse_param().equals(PackageInfoIvtEnum.IS_SEND.code("放货是"))) { + } else if ("2".equals(type) && baseTask.getResponse_param().equals(PackageInfoIvtEnum.IS_ALLOCATE.code("放货是"))) { return baseTask.getPoint_code2(); } } @@ -200,6 +200,10 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } else if (baseTask.getVehicle_code2().equals("4") || baseTask.getVehicle_code2().equals("5")) { if ("1".equals(type)) { updateWrapper.set(SchBaseTask::getPoint_code1, newPoint.getPoint_code()); + if (StringUtils.isNotBlank(newPoint.getStoragevehicle_code())) { + //更新托盘号 + updateWrapper.set(SchBaseTask::getVehicle_code, newPoint.getStoragevehicle_code()); + } } else if ("2".equals(type)) { updateWrapper.set(SchBaseTask::getPoint_code2, newPoint.getPoint_code()); } @@ -376,10 +380,35 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { String region_code = schBasePoint.getRegion_code(); List regionCharges = regionChargeMapper.selectList(new LambdaQueryWrapper() .eq(RegionCharge::getRegion_code, region_code) - .eq(RegionCharge::getIs_delete, Integer.parseInt(GeneralDefinition.NO))); + .eq(RegionCharge::getStatus, Integer.parseInt(GeneralDefinition.ONE))); + if (regionCharges.size() > 0) { + log.info("agv申请进入" + point_code + ",失败,当前区域被管制!"); + throw new BadRequestException("agv申请进入" + point_code + ",失败,当前区域被管制!"); + } + return result; + } + + @Override + public JSONObject applyOut(JSONObject param) { + log.info("ACS请求agv离开参数:{}", param); + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.HTTP_OK); + result.put("message", "agv申请进入成功!"); + String point_code = param.getString("point_code"); + if (ObjectUtil.isEmpty(point_code)) { + throw new BadRequestException("请求进入失败,管制点不能为空!"); + } + SchBasePoint schBasePoint = pointMapper.selectOne(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_code, point_code)); + if (ObjectUtil.isEmpty(schBasePoint)) { + throw new BadRequestException("请求进入失败,找不到点位是" + point_code + "的管制点位!"); + } + String region_code = schBasePoint.getRegion_code(); + List regionCharges = regionChargeMapper.selectList(new LambdaQueryWrapper() + .eq(RegionCharge::getRegion_code, region_code) + .eq(RegionCharge::getStatus, Integer.parseInt(GeneralDefinition.ONE))); if (regionCharges.size() > 0) { log.info("agv申请进入" + point_code + ",失败,当前区域有人员存在!"); - throw new BadRequestException("agv申请进入" + point_code + ",失败,当前区域有人员存在!"); + throw new BadRequestException("agv申请进入" + point_code + ",失败,当前区域被管制!"); } return result; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/controller/PdaTaskController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/controller/PdaTaskController.java index 2166b99..561bc18 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/controller/PdaTaskController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/controller/PdaTaskController.java @@ -348,9 +348,15 @@ public class PdaTaskController { } @PostMapping("/finishTask") - @Log("终点确认") + @Log("强制完成") public PdaResponseVo finishTask(@RequestBody JSONObject whereJson) { return pdaTaskService.finishTask(whereJson); } + @PostMapping("/messageConfirm") + @Log("推送确认") + public PdaResponseVo messageConfirm(@RequestBody JSONObject whereJson) { + return pdaTaskService.messageConfirm(whereJson); + } + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/PdaTaskService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/PdaTaskService.java index aede636..7f1b300 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/PdaTaskService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/PdaTaskService.java @@ -109,4 +109,6 @@ public interface PdaTaskService { PdaResponseVo endPointConfirm(JSONObject whereJson); PdaResponseVo finishTask(JSONObject whereJson); + + PdaResponseVo messageConfirm(JSONObject whereJson); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/dao/dto/PdaRequestDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/dao/dto/PdaRequestDto.java index 45fdd4b..b03e7d2 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/dao/dto/PdaRequestDto.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/dao/dto/PdaRequestDto.java @@ -75,9 +75,14 @@ public class PdaRequestDto { @Data public static class DataItem { /** - * 容器编码(卷号) + * 机台 */ - private String container_code; + private String device_code; + + /** + * DOFF号 + */ + private String doff_code; /** * 物料编码 @@ -88,19 +93,5 @@ public class PdaRequestDto { * 物料名称 */ private String material_name; - - /** - * 数量 - */ - private String qty; - - /** - * 计量单位 - */ - private String measure_unit_id; - /** - * 批次号 - */ - private String pscn; } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/impl/PdaTaskServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/impl/PdaTaskServiceImpl.java index cd46039..c02e0b2 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/impl/PdaTaskServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/impl/PdaTaskServiceImpl.java @@ -1,5 +1,6 @@ package org.nl.wms.pda.task.service.impl; +import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; @@ -70,12 +71,16 @@ import org.nl.wms.sch.task_manage.task.core.TaskType; import org.nl.wms.sch.tasks.PdaPointTask; import org.nl.wms.sch.tasks.netsl.NETSLTask; import org.nl.wms.util.TaskUtils; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import oshi.driver.mac.net.NetStat; +import java.text.SimpleDateFormat; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @Service @@ -117,6 +122,8 @@ public class PdaTaskServiceImpl implements PdaTaskService { private MdPbGroupplatedtlMapper mdPbGroupplatedtlMapper; @Autowired private SysParamMapper sysParamMapper; + @Autowired + private RedissonClient redissonClient; @Override @@ -261,14 +268,14 @@ public class PdaTaskServiceImpl implements PdaTaskService { throw new BadRequestException("物料信息不能为空"); } - for (int i = 0; i < data.size(); i++) { - JSONObject jo = data.getJSONObject(i); - String container_code = jo.getString("container_code"); - List groupPlatedtlList = groupplatedtlService.selectDtlByContainerCode(container_code); - if (ObjectUtil.isNotEmpty(groupPlatedtlList)) { - throw new BadRequestException("该卷号【" + container_code + "】已绑定过,请勿重复操作!"); - } - } +// for (int i = 0; i < data.size(); i++) { +// JSONObject jo = data.getJSONObject(i); +// String container_code = jo.getString("container_code"); +// List groupPlatedtlList = groupplatedtlService.selectDtlByContainerCode(container_code); +// if (ObjectUtil.isNotEmpty(groupPlatedtlList)) { +// throw new BadRequestException("该卷号【" + container_code + "】已绑定过,请勿重复操作!"); +// } +// } SchBasePoint point = pointMapper.selectOne(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_code, point_code)); if (ObjectUtil.isEmpty(point)) { throw new BadRequestException("点位" + point_code + "不存在!"); @@ -316,57 +323,48 @@ public class PdaTaskServiceImpl implements PdaTaskService { private void packageData(List data, String point_code, String vehicleCode) { PdaRequestDto.DataItem jo = data.get(0); - String material_name = jo.getMaterial_name(); - MdMeMaterialbase mdMeMaterialbase = mdMeMaterialbaseMapper.selectOne(new LambdaQueryWrapper().eq(MdMeMaterialbase::getMaterial_name, material_name)); + String material_code = jo.getMaterial_code(); + MdMeMaterialbase mdMeMaterialbase = mdMeMaterialbaseMapper.selectOne(new LambdaQueryWrapper().eq(MdMeMaterialbase::getMaterial_code, material_code)); if (mdMeMaterialbase == null) { - throw new BadRequestException("当前物料不存在【" + material_name + "】"); + throw new BadRequestException("当前物料【" + material_code + "】不存在"); } - String measure_unit_id = jo.getMeasure_unit_id(); if (StrUtil.isEmpty(vehicleCode)) { vehicleCode = "TP" + TaskUtils.getDateTime("yyMMddHHmmss") + CodeUtil.getNewCode("VEHICLE_CODE"); } + String device = jo.getDevice_code(); + String dofCode = jo.getDoff_code(); String group_id = org.nl.common.utils.IdUtil.getStringId(); List list = new ArrayList<>(); List groupPlatedtls = new ArrayList<>(); - int qty = 0; for (int i = 0; i < data.size(); i++) { PdaRequestDto.DataItem jsonObject = data.get(i); - String container_code = jsonObject.getContainer_code(); - qty += Integer.parseInt(jsonObject.getQty()); + String doff_code = jsonObject.getDoff_code(); + String device_code = jsonObject.getDevice_code(); GroupPlatedtl groupPlatedtlBuilder = GroupPlatedtl.builder() .groupdtl_id(org.nl.common.utils.IdUtil.getStringId()) .group_id(group_id) - .pcsn(jsonObject.getPscn()) - .container_code(container_code) + .doff_code(doff_code) + .device_code(device_code) .storagevehicle_code(vehicleCode) - .qty(Integer.parseInt(jsonObject.getQty())) .material_code(mdMeMaterialbase.getMaterial_code()) .material_name(mdMeMaterialbase.getMaterial_name()) - .measure_unit_id(measure_unit_id) - .unit_name(measure_unit_id) .create_id(SecurityUtils.getCurrentUserId()) .create_name(SecurityUtils.getCurrentNickName()) .create_time(DateUtil.now()) .build(); groupPlatedtls.add(groupPlatedtlBuilder); - list.add(container_code); } groupplatedtlService.saveBatch(groupPlatedtls); - //找到最小卷号 - String pscn = list.stream().min(String::compareTo).orElse(""); GroupPlate groupPlateBuilder = GroupPlate.builder() .group_id(group_id) .material_code(mdMeMaterialbase.getMaterial_code()) .material_name(mdMeMaterialbase.getMaterial_name()) - .pcsn(pscn) - .qty(qty) - .measure_unit_id(measure_unit_id) - .unit_name(measure_unit_id) + .device_code(device) + .doff_code(dofCode) .storagevehicle_code(vehicleCode) .create_id(SecurityUtils.getCurrentUserId()) .create_name(SecurityUtils.getCurrentNickName()) .create_time(DateUtil.now()) - .ext_code(list.toString()) .build(); groupplateMapper.insert(groupPlateBuilder); SchBasePoint point = pointMapper.selectOne(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_code, point_code)); @@ -431,7 +429,8 @@ public class PdaTaskServiceImpl implements PdaTaskService { @Override public JSONObject getStartRegions() { - List list = regionMapper.selectList(new LambdaQueryWrapper().eq(SchBaseRegion::getRegion_code, "KCW")); + List regions = Arrays.asList("R1", "R2", "R3", "R4", "R5", "R6", "R7"); + List list = regionMapper.selectList(new LambdaQueryWrapper().in(SchBaseRegion::getRegion_code, regions)); List ja = new ArrayList<>(); list.forEach(region -> { JSONObject jo = new JSONObject(); @@ -451,7 +450,7 @@ public class PdaTaskServiceImpl implements PdaTaskService { @Override public JSONObject getEndRegions() { - List regions = Arrays.asList("L1", "L2"); + List regions = Arrays.asList("R1", "R2", "R3", "R4", "R5", "R6", "R7"); List list = regionMapper.selectList(new LambdaQueryWrapper().in(SchBaseRegion::getRegion_code, regions)); List ja = new ArrayList<>(); list.forEach(region -> { @@ -609,11 +608,10 @@ public class PdaTaskServiceImpl implements PdaTaskService { if (ObjectUtil.isNotEmpty(list)) { list.forEach(groupPlatedtl -> { JSONObject jo = new JSONObject(); - jo.put("container_code", groupPlatedtl.getContainer_code()); + jo.put("device_code", groupPlatedtl.getDevice_code()); + jo.put("doff_code", groupPlatedtl.getDoff_code()); jo.put("material_code", groupPlatedtl.getMaterial_code()); jo.put("material_name", groupPlatedtl.getMaterial_name()); - jo.put("qty", groupPlatedtl.getQty()); - jo.put("measure_unit_id", groupPlatedtl.getUnit_name()); arr.add(jo); }); } @@ -637,34 +635,32 @@ public class PdaTaskServiceImpl implements PdaTaskService { throw new BadRequestException("点位不存在!"); } List arr = new ArrayList<>(); -// if (point.getRegion_code().equals(RegionTypeEnum.REGION_TYPE.code("区域1")) || point.getRegion_code().equals(RegionTypeEnum.REGION_TYPE.code("区域2"))) { -// ResponseVo.DataItem dataItem = new ResponseVo.DataItem(); -// dataItem.setValue(RegionTypeEnum.REGION_TYPE.code("区域3")); -// dataItem.setText(RegionTypeEnum.REGION_TYPE.code("区域3")); -// arr.add(dataItem); -// } else if (point.getRegion_code().equals(RegionTypeEnum.REGION_TYPE.code("区域3"))) { -// List list = Arrays.asList("R4", "R5"); -// list.forEach(region_code -> { -// ResponseVo.DataItem dataItem = new ResponseVo.DataItem(); -// dataItem.setValue(region_code); -// dataItem.setText(region_code); -// arr.add(dataItem); -// }); -// } else - if (point.getRegion_code().equals(RegionTypeEnum.REGION_TYPE.code("区域4")) || point.getRegion_code().equals(RegionTypeEnum.REGION_TYPE.code("区域5"))) { - List list = Arrays.asList("R6", "R7"); - list.forEach(region_code -> { - ResponseVo.DataItem dataItem = new ResponseVo.DataItem(); - dataItem.setValue(region_code); - if (region_code.equals("R6")) { - dataItem.setText("合格区"); - } else { - dataItem.setText("不合格区"); - } - arr.add(dataItem); - }); - } else { - + if (point.getRegion_code().equals(RegionTypeEnum.REGION_TYPE.code("区域4")) || point.getRegion_code().equals(RegionTypeEnum.REGION_TYPE.code("区域5")) || point.getRegion_code().equals(RegionTypeEnum.REGION_TYPE.code("区域3"))) { + if (point.getRegion_code().equals(RegionTypeEnum.REGION_TYPE.code("区域3"))) { + List list = Arrays.asList("R4", "R5"); + list.forEach(region_code -> { + ResponseVo.DataItem dataItem = new ResponseVo.DataItem(); + dataItem.setValue(region_code); + if (region_code.equals("R4")) { + dataItem.setText("区域4"); + } else { + dataItem.setText("区域5"); + } + arr.add(dataItem); + }); + } else { + List list = Arrays.asList("R6", "R7"); + list.forEach(region_code -> { + ResponseVo.DataItem dataItem = new ResponseVo.DataItem(); + dataItem.setValue(region_code); + if (region_code.equals("R6")) { + dataItem.setText("区域6"); + } else { + dataItem.setText("区域7"); + } + arr.add(dataItem); + }); + } } ResponseVo ret = new ResponseVo(); ret.setMessage("查询成功"); @@ -674,7 +670,9 @@ public class PdaTaskServiceImpl implements PdaTaskService { } @Override + @Transactional(rollbackFor = Exception.class) public PdaResponseVo productBlanking(MaterialDto whereJson) { + // String point_code = whereJson.getPoint_code(); String type = whereJson.getType(); if (ObjectUtil.isEmpty(point_code)) { @@ -707,8 +705,8 @@ public class PdaTaskServiceImpl implements PdaTaskService { } // 1.产线下料 2.质检配送 3.质检下料 if (CommonParamEnum.ONE.getCode().equals(type)) { - if (!point.getRegion_code().equals(RegionTypeEnum.REGION_TYPE.code("区域1"))) { - throw new BadRequestException("该点位【" + point.getPoint_code() + "】不是区域1的下料位,请检查输入点位是否有误!"); + if (!point.getRegion_code().equals(RegionTypeEnum.REGION_TYPE.code("区域1")) && !point.getRegion_code().equals(RegionTypeEnum.REGION_TYPE.code("区域2"))) { + throw new BadRequestException("该点位【" + point.getPoint_code() + "】不是区域1或者区域2的下料位,请检查输入点位是否有误!"); } JSONObject param = new JSONObject(); param.put("point3", point.getPoint_code()); @@ -723,17 +721,22 @@ public class PdaTaskServiceImpl implements PdaTaskService { if (!point.getRegion_code().equals(RegionTypeEnum.REGION_TYPE.code("区域3"))) { throw new BadRequestException("该点位【" + point.getPoint_code() + "】不是区域3的下料位,请检查输入点位是否有误!"); } + String region_code = whereJson.getRegion_code(); + if (ObjectUtil.isEmpty(region_code)) { + throw new BadRequestException("区域不能为空!"); + } JSONObject param = new JSONObject(); param.put("device_code", pointMapper.selectOne(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_code, point.getParent_point_code())).getPoint_code());//等待点 param.put("point3", point.getPoint_code()); param.put("material_code", point.getMaterial_code()); param.put("requestNo", IdUtil.simpleUUID()); param.put("config_code", "ZJPSTask"); + param.put("region_code", region_code); param.put("user_id", "1"); taskService.apply(param); } if (CommonParamEnum.THREE.getCode().equals(type)) { - if (!point.getRegion_code().equals(RegionTypeEnum.REGION_TYPE.code("区域4")) || !point.getRegion_code().equals(RegionTypeEnum.REGION_TYPE.code("区域5"))) { + if (!point.getRegion_code().equals(RegionTypeEnum.REGION_TYPE.code("区域4")) && !point.getRegion_code().equals(RegionTypeEnum.REGION_TYPE.code("区域5"))) { throw new BadRequestException("该点位【" + point.getPoint_code() + "】不是区域4或区域5的下料位,请检查输入点位是否有误!"); } String region_code = whereJson.getRegion_code(); @@ -812,31 +815,17 @@ public class PdaTaskServiceImpl implements PdaTaskService { if (ObjectUtil.isEmpty(point)) { throw new BadRequestException("点位【+point.getPoint_code()+】不存在!"); } - List list = pointMapper.selectList(new LambdaQueryWrapper().eq(SchBasePoint::getRegion_code, point.getRegion_code()) - .eq(SchBasePoint::getPoint_type, "1") - .eq(SchBasePoint::getIs_used, "1")); - List ja = new ArrayList<>(); - if (ObjectUtil.isNotEmpty(list)) { - SchBasePoint schBasePoint = list.stream().max(Comparator.comparingInt(SchBasePoint::getRow_num)).orElse(null); - Integer row_num = schBasePoint.getRow_num(); - if (schBasePoint.getRegion_code().equals("R7")){//区域7排数从4开始 - row_num = row_num - 3; - } - for (Integer i = 0; i < row_num; i++) { - JSONObject jo1 = new JSONObject(); - int row = i + 1; - jo1.put("text", String.valueOf(row)); - jo1.put("value", String.valueOf(row)); - ja.add(jo1); - } - } + Integer row_num = point.getRow_num(); + JSONObject jo = new JSONObject(); + jo.put("col",String.valueOf(row_num)); ret.put("code", String.valueOf(HttpStatus.HTTP_OK)); ret.put("message", "查询成功"); - ret.put("data", ja); + ret.put("data", jo); return ret; } @Override + @Transactional(rollbackFor = Exception.class) public JSONObject cleanPoint(JSONObject whereJson) { log.info("人工开始清空点位"); String point_code = whereJson.getString("point_code"); @@ -866,6 +855,7 @@ public class PdaTaskServiceImpl implements PdaTaskService { point.setPoint_status(PointStatusEnum.EMPTY_POINT.getCode()); point.setStoragevehicle_code(""); point.setMaterial_code(""); + point.setSource_id(""); point.setIng_task_code(""); point.setUpdate_id(SecurityUtils.getCurrentUserId()); point.setUpdate_name(SecurityUtils.getCurrentNickName()); @@ -878,6 +868,7 @@ public class PdaTaskServiceImpl implements PdaTaskService { } @Override + @Transactional(rollbackFor = Exception.class) public JSONObject cleanCol(JSONObject whereJson) { log.info("人工开始清空列"); String point_code = whereJson.getString("point_code"); @@ -890,7 +881,7 @@ public class PdaTaskServiceImpl implements PdaTaskService { } Integer col = whereJson.getInteger("col"); if (ObjectUtil.isEmpty(col)) { - throw new BadRequestException("列不能为空!"); + throw new BadRequestException("排不能为空!"); } List pointListlist = pointMapper.selectList(new LambdaQueryWrapper().eq(SchBasePoint::getRegion_code, schBasePoint.getRegion_code()) .eq(SchBasePoint::getPoint_type, "1") @@ -916,6 +907,7 @@ public class PdaTaskServiceImpl implements PdaTaskService { point.setPoint_status(PointStatusEnum.EMPTY_POINT.getCode()); point.setStoragevehicle_code(""); point.setMaterial_code(""); + point.setSource_id(""); point.setIng_task_code(""); point.setUpdate_id(SecurityUtils.getCurrentUserId()); point.setUpdate_name(SecurityUtils.getCurrentNickName()); @@ -1053,15 +1045,37 @@ public class PdaTaskServiceImpl implements PdaTaskService { if (ObjectUtil.isEmpty(option)) { throw new BadRequestException("操作不能为空!"); } - RegionCharge regionCharge = regionChargeMapper.selectOne(new LambdaQueryWrapper().eq(RegionCharge::getRegion_code, region_code)); - if (ObjectUtil.isEmpty(regionCharge)) { - throw new BadRequestException("当前区域为:" + region_code + "的管制记录不存在!"); - } - if (option.equals(regionCharge.getStatus())) { - throw new BadRequestException("当前区域为:" + region_code + "已经被管制,请勿重复操作!"); + RLock lock = redissonClient.getLock(region_code); + boolean getLock; + try { + getLock = lock.tryLock(0, TimeUnit.SECONDS); + } catch (InterruptedException e) { + throw new RuntimeException(e); } + try { + if (getLock) { + String currentUserId = SecurityUtils.getCurrentUserId(); + SchBaseRegion schBaseRegion = regionMapper.selectOne(new LambdaQueryWrapper().eq(SchBaseRegion::getRegion_code, region_code)); + RegionCharge regionCharge = regionChargeMapper.selectOne(new LambdaQueryWrapper().eq(RegionCharge::getRegion_code, region_code)); + if (ObjectUtil.isEmpty(regionCharge)) { + RegionCharge charge = RegionCharge.builder() + .regioncharge_id(IdUtil.simpleUUID()) + .region_code(region_code) + .region_name(schBaseRegion.getRegion_name()) + .is_delete(Integer.parseInt(GeneralDefinition.NO)) + .status(option) + .create_id(currentUserId) + .create_name(SecurityUtils.getCurrentNickName()) + .create_time(DateUtil.now()) + .build(); + regionChargeMapper.insert(charge); + return PdaResponseVo.pdaResultOk("管制成功!"); + } + if (option.equals(regionCharge.getStatus())) { + throw new BadRequestException("当前区域为:" + region_code + "已经被管制,请勿重复操作!"); + } - //下发ACS,执行管制区域动作 + //下发ACS,执行管制区域动作 // JSONArray paramArr = new JSONArray(); // JSONObject param = new JSONObject(); // param.put("device_code", region_code); @@ -1074,15 +1088,18 @@ public class PdaTaskServiceImpl implements PdaTaskService { // if (!StrUtil.equals(result.getString("status"), "200")) { // throw new BadRequestException("操作失败:" + result.getString("message ")); // } - - - String currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - regionCharge.setStatus(option); - regionCharge.setUpdate_optid(currentUserId); - regionCharge.setUpdate_optname(nickName); - regionCharge.setUpdate_time(DateUtil.now()); - regionChargeMapper.updateById(regionCharge); + String nickName = SecurityUtils.getCurrentNickName(); + regionCharge.setStatus(option); + regionCharge.setUpdate_optid(currentUserId); + regionCharge.setUpdate_optname(nickName); + regionCharge.setUpdate_time(DateUtil.now()); + regionChargeMapper.updateById(regionCharge); + } + } finally { + if (getLock) { + lock.unlock(); + } + } return PdaResponseVo.pdaResultOk("管制成功!"); } @@ -1097,15 +1114,37 @@ public class PdaTaskServiceImpl implements PdaTaskService { if (ObjectUtil.isEmpty(option)) { throw new BadRequestException("操作不能为空!"); } - RegionCharge regionCharge = regionChargeMapper.selectOne(new LambdaQueryWrapper().eq(RegionCharge::getRegion_code, region_code)); - if (ObjectUtil.isEmpty(regionCharge)) { - throw new BadRequestException("当前区域为:" + region_code + "的管制记录不存在!"); - } - if (option.equals(regionCharge.getStatus())) { - throw new BadRequestException("当前车区域为:" + region_code + "已经被恢复,请勿重复操作!"); + RLock lock = redissonClient.getLock(region_code); + boolean getLock; + try { + getLock = lock.tryLock(0, TimeUnit.SECONDS); + } catch (InterruptedException e) { + throw new RuntimeException(e); } + try { + if (getLock) { + String currentUserId = SecurityUtils.getCurrentUserId(); + SchBaseRegion schBaseRegion = regionMapper.selectOne(new LambdaQueryWrapper().eq(SchBaseRegion::getRegion_code, region_code)); + RegionCharge regionCharge = regionChargeMapper.selectOne(new LambdaQueryWrapper().eq(RegionCharge::getRegion_code, region_code)); + if (ObjectUtil.isEmpty(regionCharge)) { + RegionCharge charge = RegionCharge.builder() + .regioncharge_id(IdUtil.simpleUUID()) + .region_code(region_code) + .region_name(schBaseRegion.getRegion_name()) + .is_delete(Integer.parseInt(GeneralDefinition.NO)) + .status(option) + .create_id(currentUserId) + .create_name(SecurityUtils.getCurrentNickName()) + .create_time(DateUtil.now()) + .build(); + regionChargeMapper.insert(charge); + return PdaResponseVo.pdaResultOk("解除管制成功!"); + } + if (option.equals(regionCharge.getStatus())) { + throw new BadRequestException("当前车区域为:" + region_code + "已经被恢复,请勿重复操作!"); + } - //下发ACS,执行释放区域动作 + //下发ACS,执行释放区域动作 // JSONArray paramArr = new JSONArray(); // JSONObject param = new JSONObject(); // param.put("device_code", region_code); @@ -1119,72 +1158,92 @@ public class PdaTaskServiceImpl implements PdaTaskService { // throw new BadRequestException("操作失败:" + result.getString("message ")); // } - String currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - regionCharge.setStatus(option); - regionCharge.setUpdate_optid(currentUserId); - regionCharge.setUpdate_optname(nickName); - regionCharge.setUpdate_time(DateUtil.now()); - regionChargeMapper.updateById(regionCharge); + String nickName = SecurityUtils.getCurrentNickName(); + regionCharge.setStatus(option); + regionCharge.setUpdate_optid(currentUserId); + regionCharge.setUpdate_optname(nickName); + regionCharge.setUpdate_time(DateUtil.now()); + regionChargeMapper.updateById(regionCharge); + } + } finally { + if (getLock) { + lock.unlock(); + } + } return PdaResponseVo.pdaResultOk("解除管制成功!"); } @Override @Transactional(rollbackFor = Exception.class) public PdaResponseVo materialTransfer(JSONObject whereJson) { - String point_code1 = whereJson.getString("point_code1"); - String point_code2 = whereJson.getString("point_code2"); - if (ObjectUtil.isEmpty(point_code1) || ObjectUtil.isEmpty(point_code2)) { - throw new BadRequestException("点位不能为空"); + RLock lock = redissonClient.getLock("materialTransfer"); + boolean getLock; + try { + getLock = lock.tryLock(0, TimeUnit.SECONDS); + } catch (InterruptedException e) { + throw new RuntimeException(e); } - SchBasePoint point1 = pointMapper.selectOne(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_code, point_code1)); - SchBasePoint point2 = pointMapper.selectOne(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_code, point_code2)); - if (ObjectUtil.isEmpty(point1)) { - throw new BadRequestException("点位1不存在"); - } - if (ObjectUtil.isEmpty(point2)) { - throw new BadRequestException("点位2不存在"); - } - if (point1.getPoint_status().equals("1")) { - throw new BadRequestException("点位1为:" + point_code1 + "的点位无货!"); - } - if (point2.getPoint_status().equals("2")) { - throw new BadRequestException("点位2为:" + point_code2 + "的点位有货!"); - } - if (ObjectUtil.isEmpty(point1.getStoragevehicle_code())) { - throw new BadRequestException("点位1为:" + point_code1 + "的点位无托盘号!"); - } - List groupPlates = groupplateMapper.selectList(new LambdaQueryWrapper().eq(GroupPlate::getStoragevehicle_code, point1.getStoragevehicle_code())); - if (groupPlates.size() == 0) { - throw new BadRequestException("点位1为:" + point_code1 + "的点位无物料组盘信息!"); - } - boolean flag1 = isSingleTask(point_code1); - if (flag1) { - throw new BadRequestException("点位1为:" + point_code1 + "的点位有未完成的任务!"); - } - boolean flag2 = isSingleTask(point_code2); - if (flag2) { - throw new BadRequestException("点位2为:" + point_code2 + "的点位有未完成的任务!"); - } - //清空点位1的点位信息 - String storagevehicle_code = point1.getStoragevehicle_code(); - String material_code = point1.getMaterial_code(); - point1.setPoint_status(PointStatusEnum.EMPTY_POINT.getCode()); - point1.setStoragevehicle_code(""); - point1.setMaterial_code(""); - point1.setUpdate_id(SecurityUtils.getCurrentUserId()); - point1.setUpdate_name(SecurityUtils.getCurrentNickName()); - point1.setUpdate_time(DateUtil.now()); + try { + if (getLock) { + String point_code1 = whereJson.getString("point_code1"); + String point_code2 = whereJson.getString("point_code2"); + if (ObjectUtil.isEmpty(point_code1) || ObjectUtil.isEmpty(point_code2)) { + throw new BadRequestException("点位不能为空"); + } + SchBasePoint point1 = pointMapper.selectOne(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_code, point_code1)); + SchBasePoint point2 = pointMapper.selectOne(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_code, point_code2)); + if (ObjectUtil.isEmpty(point1)) { + throw new BadRequestException("点位1不存在"); + } + if (ObjectUtil.isEmpty(point2)) { + throw new BadRequestException("点位2不存在"); + } + if (point1.getPoint_status().equals("1")) { + throw new BadRequestException("点位1为:" + point_code1 + "的点位无货!"); + } + if (point2.getPoint_status().equals("2")) { + throw new BadRequestException("点位2为:" + point_code2 + "的点位有货!"); + } + if (ObjectUtil.isEmpty(point1.getStoragevehicle_code())) { + throw new BadRequestException("点位1为:" + point_code1 + "的点位无托盘号!"); + } + List groupPlates = groupplateMapper.selectList(new LambdaQueryWrapper().eq(GroupPlate::getStoragevehicle_code, point1.getStoragevehicle_code())); + if (groupPlates.size() == 0) { + throw new BadRequestException("点位1为:" + point_code1 + "的点位无物料组盘信息!"); + } + boolean flag1 = isSingleTask(point_code1); + if (flag1) { + throw new BadRequestException("点位1为:" + point_code1 + "的点位有未完成的任务!"); + } + boolean flag2 = isSingleTask(point_code2); + if (flag2) { + throw new BadRequestException("点位2为:" + point_code2 + "的点位有未完成的任务!"); + } + //清空点位1的点位信息 + String storagevehicle_code = point1.getStoragevehicle_code(); + String material_code = point1.getMaterial_code(); + point1.setPoint_status(PointStatusEnum.EMPTY_POINT.getCode()); + point1.setStoragevehicle_code(""); + point1.setMaterial_code(""); + point1.setUpdate_id(SecurityUtils.getCurrentUserId()); + point1.setUpdate_name(SecurityUtils.getCurrentNickName()); + point1.setUpdate_time(DateUtil.now()); - //绑定点位2的信息 - point2.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); - point2.setStoragevehicle_code(storagevehicle_code); - point2.setMaterial_code(material_code); - point2.setUpdate_id(SecurityUtils.getCurrentUserId()); - point2.setUpdate_name(SecurityUtils.getCurrentNickName()); - point2.setUpdate_time(DateUtil.now()); - pointMapper.updateById(point1); - pointMapper.updateById(point2); + //绑定点位2的信息 + point2.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); + point2.setStoragevehicle_code(storagevehicle_code); + point2.setMaterial_code(material_code); + point2.setUpdate_id(SecurityUtils.getCurrentUserId()); + point2.setUpdate_name(SecurityUtils.getCurrentNickName()); + point2.setUpdate_time(DateUtil.now()); + pointMapper.updateById(point1); + pointMapper.updateById(point2); + } + } finally { + if (getLock) { + lock.unlock(); + } + } return PdaResponseVo.pdaResultOk("移库成功!"); } @@ -1311,6 +1370,88 @@ public class PdaTaskServiceImpl implements PdaTaskService { return null; } + @Override + public PdaResponseVo messageConfirm(JSONObject whereJson) { + String type = whereJson.getString("type"); + log.info("消息推送确认,请求参数{}", type); + if (ObjectUtil.isEmpty(type)) { + throw new BadRequestException("操作类型不能为空!"); + } + List list = pointMapper.selectList(new LambdaQueryWrapper().eq(SchBasePoint::getRegion_code, "R6") + .eq(SchBasePoint::getPoint_type, "1") + .eq(SchBasePoint::getIs_last, 1)); + List list1 = pointMapper.selectList(new LambdaQueryWrapper().eq(SchBasePoint::getRegion_code, "R7") + .eq(SchBasePoint::getPoint_type, "1") + .eq(SchBasePoint::getIs_last, 1)); + if (list.isEmpty() || list1.isEmpty()) { + throw new BadRequestException("请先确认区域6或者区域7每排是否配置最后一个点位属性!"); + } + if ("1".equals(type)) { + for (SchBasePoint schBasePoint : list) { + if (!schBasePoint.getPoint_status().equals(PointStatusEnum.EMPTY_VEHICLE.getCode())) { + continue; + } else { + if (ObjectUtil.isEmpty(schBasePoint.getSource_id())) { + continue; + } + Date date = new Date(); + date.setTime(date.getTime() + 1 * 60 * 1000); + String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date); + JSONObject jo = new JSONObject(); + jo.put("type", type); + jo.put("date", format); + schBasePoint.setSource_id(jo.toJSONString()); + pointMapper.updateById(schBasePoint); + } + } + for (SchBasePoint schBasePoint : list1) { + if (!schBasePoint.getPoint_status().equals(PointStatusEnum.EMPTY_VEHICLE.getCode())) { + continue; + } else { + if (ObjectUtil.isEmpty(schBasePoint.getSource_id())) { + continue; + } + Date date = new Date(); + date.setTime(date.getTime() + 1 * 60 * 1000); + String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date); + JSONObject jo = new JSONObject(); + jo.put("type", type); + jo.put("date", format); + schBasePoint.setSource_id(jo.toJSONString()); + pointMapper.updateById(schBasePoint); + } + } + } else { + for (SchBasePoint schBasePoint : list) { + if (!schBasePoint.getPoint_status().equals(PointStatusEnum.EMPTY_VEHICLE.getCode())) { + continue; + } else { + if (ObjectUtil.isEmpty(schBasePoint.getSource_id())) { + continue; + } + JSONObject jo = new JSONObject(); + jo.put("type", type); + schBasePoint.setSource_id(jo.toJSONString()); + pointMapper.updateById(schBasePoint); + } + } + for (SchBasePoint schBasePoint : list1) { + if (!schBasePoint.getPoint_status().equals(PointStatusEnum.EMPTY_VEHICLE.getCode())) { + continue; + } else { + if (ObjectUtil.isEmpty(schBasePoint.getSource_id())) { + continue; + } + JSONObject jo = new JSONObject(); + jo.put("type", type); + schBasePoint.setSource_id(jo.toJSONString()); + pointMapper.updateById(schBasePoint); + } + } + } + return PdaResponseVo.pdaResultOk("操作成功!"); + } + //判断该点位是否存在未完成的任务 public boolean isSingleTask(String point_code) { @@ -1350,11 +1491,10 @@ public class PdaTaskServiceImpl implements PdaTaskService { if (ObjectUtil.isNotEmpty(list)) { list.forEach(groupPlatedtl -> { JSONObject jo = new JSONObject(); - jo.put("container_code", groupPlatedtl.getContainer_code()); + jo.put("device_code", groupPlatedtl.getDevice_code()); + jo.put("doff_code", groupPlatedtl.getDoff_code()); jo.put("material_code", groupPlatedtl.getMaterial_code()); jo.put("material_name", groupPlatedtl.getMaterial_name()); - jo.put("qty", groupPlatedtl.getQty()); - jo.put("measure_unit_id", groupPlatedtl.getUnit_name()); arr.add(jo); }); } @@ -1535,10 +1675,10 @@ public class PdaTaskServiceImpl implements PdaTaskService { for (int i = 0; i < data.size(); i++) { PdaRequestDto.DataItem jo = data.get(i); - String container_code = jo.getContainer_code(); - List groupPlatedtlList = groupplatedtlService.selectDtlByContainerCode(container_code); + String doff_code = jo.getDoff_code(); + List groupPlatedtlList = groupplatedtlService.selectDtlByContainerCode(doff_code); if (ObjectUtil.isNotEmpty(groupPlatedtlList)) { - throw new BadRequestException("该卷号【" + container_code + "】已绑定过,请勿重复操作!"); + throw new BadRequestException("该DOFF号【" + doff_code + "】已绑定过,请勿重复操作!"); } } @@ -1557,7 +1697,7 @@ public class PdaTaskServiceImpl implements PdaTaskService { SchBasePoint schBasePoint = list.get(i); boolean singleTask = isSingleTask(schBasePoint.getPoint_code()); if (singleTask) { - throw new BadRequestException("请检查当前点位前面的位置是否有任务,请按顺序放货!"); + throw new BadRequestException("请检查当前点位后面的位置是否有任务,请按顺序放货!"); } } } @@ -1568,13 +1708,13 @@ public class PdaTaskServiceImpl implements PdaTaskService { .eq(SchBasePoint::getRegion_code, point.getRegion_code()) .eq(SchBasePoint::getPoint_type, point.getPoint_type()) .eq(SchBasePoint::getRow_num, point.getRow_num()) - .lt(SchBasePoint::getIn_order_seq, point.getIn_order_seq())); + .gt(SchBasePoint::getIn_order_seq, point.getIn_order_seq())); if (ObjectUtil.isNotEmpty(list)) { for (int i = 0; i < list.size(); i++) { SchBasePoint schBasePoint = list.get(i); boolean singleTask = isSingleTask(schBasePoint.getPoint_code()); if (singleTask) { - throw new BadRequestException("请检查当前点位前面的位置是否有任务,请按顺序放货!"); + throw new BadRequestException("请检查当前点位后面的位置是否有任务,请按顺序放货!"); } } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/structivt/service/dto/RegionStructIvtVo.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/structivt/service/dto/RegionStructIvtVo.java index 7f03b8f..54ccb7e 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/structivt/service/dto/RegionStructIvtVo.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/structivt/service/dto/RegionStructIvtVo.java @@ -26,6 +26,15 @@ public class RegionStructIvtVo { * 物料编码 */ private String material_code; + + /** + * 机台 + */ + private String device_code; + /** + * DOFF号 + */ + private String doff_code; /** * 物料名称 */ diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/structivt/service/dto/RegionStructQuery.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/structivt/service/dto/RegionStructQuery.java index 1e876b7..3a8df1d 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/structivt/service/dto/RegionStructQuery.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/structivt/service/dto/RegionStructQuery.java @@ -15,4 +15,5 @@ public class RegionStructQuery extends BaseQuery { private String material_code; private String storagevehicle_code; private String pcsn; + private String doff_code; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/controller/GroupController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/controller/GroupController.java index 5fdb810..17799f6 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/controller/GroupController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/controller/GroupController.java @@ -89,20 +89,22 @@ public class GroupController { } String measure_unit_id = jo.getString("measure_unit_id"); String unit_name = jo.getString("unit_name"); + String device_code = jo.getString("device_code"); + String dofCode = jo.getString("doff_code"); String vehicleCode = "TP" + TaskUtils.getDateTime("yyMMddHHmmss") + CodeUtil.getNewCode("VEHICLE_CODE"); String group_id = org.nl.common.utils.IdUtil.getStringId(); - List list = new ArrayList<>(); List groupPlatedtls = new ArrayList<>(); int qty = 0; for (int i = 0; i < rows.size(); i++) { JSONObject jsonObject = rows.get(i); - String container_code = jsonObject.getString("container_code"); + String doff_code = jsonObject.getString("doff_code"); qty += jsonObject.getIntValue("qty"); GroupPlatedtl groupPlatedtlBuilder = GroupPlatedtl.builder() .groupdtl_id(org.nl.common.utils.IdUtil.getStringId()) .group_id(group_id) .pcsn(jsonObject.getString("pcsn")) - .container_code(container_code) + .doff_code(doff_code) + .device_code(jsonObject.getString("device_code")) .storagevehicle_code(vehicleCode) .qty(jsonObject.getIntValue("qty")) .material_code(mdMeMaterialbase.getMaterial_code()) @@ -111,24 +113,18 @@ public class GroupController { .unit_name(unit_name) .build(); groupPlatedtls.add(groupPlatedtlBuilder); - list.add(container_code); } groupplatedtlService.saveBatch(groupPlatedtls); - //找到最小卷号 - String pscn = list.stream().min(String::compareTo).orElse(""); GroupPlate groupPlateBuilder = GroupPlate.builder() .group_id(group_id) .material_code(mdMeMaterialbase.getMaterial_code()) .material_name(mdMeMaterialbase.getMaterial_name()) - .pcsn(pscn) - .qty(qty) - .measure_unit_id(measure_unit_id) - .unit_name(unit_name) .storagevehicle_code(vehicleCode) + .doff_code(dofCode) + .device_code(device_code) .create_id(SecurityUtils.getCurrentUserId()) .create_name(SecurityUtils.getCurrentNickName()) .create_time(DateUtil.now()) - .ext_code(list.toString()) .build(); groupplateMapper.insert(groupPlateBuilder); return new ResponseEntity<>(HttpStatus.OK); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/GroupPlate.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/GroupPlate.java index 6a825ac..a2c33ed 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/GroupPlate.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/GroupPlate.java @@ -41,6 +41,16 @@ public class GroupPlate implements Serializable { */ private String material_name; + /** + * DOFF号 + */ + private String doff_code; + + /** + * 机台 + */ + private String device_code; + /** * 批次 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/GroupPlatedtl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/GroupPlatedtl.java index 5df8901..2cb4787 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/GroupPlatedtl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/GroupPlatedtl.java @@ -44,9 +44,14 @@ public class GroupPlatedtl implements Serializable { private String material_name; /** - * 卷号 + * DOFF号 */ - private String container_code; + private String doff_code; + + /** + * 机台 + */ + private String device_code; /** diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/mapper/MdPbGroupplateMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/mapper/MdPbGroupplateMapper.xml index 5a43160..4e99c27 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/mapper/MdPbGroupplateMapper.xml +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/mapper/MdPbGroupplateMapper.xml @@ -34,9 +34,8 @@ mater.material_name LIKE #{param.material_code} ) - - AND - late.pcsn LIKE #{param.pcsn} + + AND late.doff_code = #{param.doff_code} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/impl/MdPbGroupplatedtlServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/impl/MdPbGroupplatedtlServiceImpl.java index e1c58ed..ce63532 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/impl/MdPbGroupplatedtlServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/impl/MdPbGroupplatedtlServiceImpl.java @@ -23,7 +23,7 @@ public class MdPbGroupplatedtlServiceImpl extends ServiceImpl selectDtlByContainerCode(String container_code) { - List list = mdpbGroupplatedtlMapper.selectList(new LambdaQueryWrapper().eq(GroupPlatedtl::getContainer_code, container_code)); + List list = mdpbGroupplatedtlMapper.selectList(new LambdaQueryWrapper().eq(GroupPlatedtl::getDoff_code, container_code)); return list; } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/SchBasePoint.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/SchBasePoint.java index f938eb4..3c69c28 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/SchBasePoint.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/SchBasePoint.java @@ -108,6 +108,9 @@ public class SchBasePoint implements Serializable { /** 是否使用 */ private Boolean is_used; + /** 是否为最后一个位置 */ + private Boolean is_last; + /** 创建人 */ private String create_id; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.xml index 05d57f3..ad52d51 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.xml +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.xml @@ -62,6 +62,8 @@ md_me_materialbase.material_spec, md_pb_groupplate.pcsn, md_pb_groupplate.qty, + md_pb_groupplate.device_code, + md_pb_groupplate.doff_code, md_pb_groupplate.frozen_qty, md_pb_groupplate.unit_name, md_pb_groupplate.status, @@ -80,10 +82,14 @@ AND sch_base_point.point_code = #{query.point_code} + + AND md_pb_groupplate.doff_code = #{query.doff_code} + AND md_pb_groupplate.material_code = #{query.material_code} + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dto/SchBasePointDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dto/SchBasePointDto.java index a1da467..a4af97d 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dto/SchBasePointDto.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dto/SchBasePointDto.java @@ -95,6 +95,9 @@ public class SchBasePointDto implements Serializable { /** 是否启用 */ private Boolean is_used; + /** 是否为最后一个位置 */ + private Boolean is_last; + /** 创建人 */ private String create_id; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AutoInventoryReport.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AutoInventoryReport.java index 4808666..6e8afa7 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AutoInventoryReport.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AutoInventoryReport.java @@ -1,5 +1,8 @@ package org.nl.wms.sch.task_manage; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.SneakyThrows; @@ -34,50 +37,97 @@ public class AutoInventoryReport { @SneakyThrows public void run() { log.debug("定时任务AutoInventoryReport开始执行:"); - boolean flag = checkFullInventory(); - if (flag) { - log.debug("定时任务AutoInventoryReport执行结束:"); - } + checkFullInventory(); } - public boolean checkFullInventory() { + public void checkFullInventory() { List list = schBasePointMapper.selectList(new LambdaQueryWrapper().eq(SchBasePoint::getRegion_code, "R6") - .eq(SchBasePoint::getPoint_type, "1")); + .eq(SchBasePoint::getPoint_type, "1") + .eq(SchBasePoint::getIs_last, 1)); List list1 = schBasePointMapper.selectList(new LambdaQueryWrapper().eq(SchBasePoint::getRegion_code, "R7") - .eq(SchBasePoint::getPoint_type, "1")); - - Map> groupedByRow = list.stream() - .collect(Collectors.groupingBy(SchBasePoint::getRow_num)); - Map> groupedByRow1 = list1.stream() - .collect(Collectors.groupingBy(SchBasePoint::getRow_num)); - Map> mergedMap = Stream.of(groupedByRow, groupedByRow1) - .flatMap(map -> map.entrySet().stream()) - .collect(Collectors.toMap( - Map.Entry::getKey, - Map.Entry::getValue, - (list3, list4) -> { - list3.addAll(list4); - return list3; - } - )); - - for (Map.Entry> entry : mergedMap.entrySet()) { - List points = entry.getValue(); - if (points.stream().allMatch(point -> point.getPoint_status().equals(PointStatusEnum.EMPTY_VEHICLE.getCode()))) { - SchBasePoint schBasePoint = points.get(0); - JSONObject res = new JSONObject(); - res.put("data", schBasePoint.getRegion_code() + "区域第" + schBasePoint.getRow_num() + "排库存已满!"); - SocketMsg messageInfo = new SocketMsg(res, MsgType.INFO); - try { - webSocketServer.sendInfo(messageInfo, "sid"); - } catch (IOException e) { - throw new BadRequestException(LangProcess.msg("error_Send")); - } - return true; - } else { + .eq(SchBasePoint::getPoint_type, "1") + .eq(SchBasePoint::getIs_last, 1)); + if (list.isEmpty() || list1.isEmpty()) { + return; + } + StringBuilder stringBuilder = new StringBuilder(); + for (SchBasePoint schBasePoint : list) { + if (!schBasePoint.getPoint_status().equals(PointStatusEnum.EMPTY_VEHICLE.getCode())) { continue; + } else { + if (ObjectUtil.isEmpty(schBasePoint.getSource_id())) { + Integer row_num = schBasePoint.getRow_num(); + stringBuilder.append(schBasePoint.getRegion_code()) + .append("区域第") + .append(row_num) + .append("排库存已满!请及时取货!"); + JSONObject jo = new JSONObject(); + jo.put("type", "2"); + schBasePoint.setSource_id(jo.toJSONString()); + schBasePointMapper.updateById(schBasePoint); + }else { + JSONObject jsonObject = JSONObject.parseObject(schBasePoint.getSource_id()); + String type = jsonObject.getString("type");//1-稍后提醒 2-确定(不再提醒) + if (type.equals("1")) { + String nowTime = DateUtil.now(); + String date = jsonObject.getString("date"); + long compareResult = DateUtil.compare(DateUtil.parse(date), DateUtil.parse(nowTime)); + if (compareResult <= 0) { + Integer row_num = schBasePoint.getRow_num(); + stringBuilder.append(schBasePoint.getRegion_code()) + .append("区域第") + .append(row_num) + .append("排库存已满!请及时取货!"); + } + } + } + } + } + + for (SchBasePoint schBasePoint : list1) { + if (!schBasePoint.getPoint_status().equals(PointStatusEnum.EMPTY_VEHICLE.getCode())) { + continue; + } else { + if (ObjectUtil.isEmpty(schBasePoint.getSource_id())) { + Integer row_num = schBasePoint.getRow_num(); + stringBuilder.append(schBasePoint.getRegion_code()) + .append("区域第") + .append(row_num) + .append("排库存已满!请及时取货!"); + JSONObject jo = new JSONObject(); + jo.put("type", "2"); + schBasePoint.setSource_id(jo.toJSONString()); + schBasePointMapper.updateById(schBasePoint); + }else { + JSONObject jsonObject = JSONObject.parseObject(schBasePoint.getSource_id()); + String type = jsonObject.getString("type");//1-稍后提醒 2-确定(不再提醒) + if (StrUtil.isNotEmpty(type)) { + if (type.equals("1")) { + String nowTime = DateUtil.now(); + String date = jsonObject.getString("date"); + long compareResult = DateUtil.compare(DateUtil.parse(date), DateUtil.parse(nowTime)); + if (compareResult <= 0) { + Integer row_num = schBasePoint.getRow_num(); + stringBuilder.append(schBasePoint.getRegion_code()) + .append("区域第") + .append(row_num) + .append("排库存已满!请及时取货!"); + } + } + } + } + } + } + + if (stringBuilder.length() > 0) { + JSONObject res = new JSONObject(); + res.put("data", stringBuilder); + SocketMsg messageInfo = new SocketMsg(res, MsgType.INFO); + try { + webSocketServer.sendInfo(messageInfo, "sid"); + } catch (IOException e) { + throw new BadRequestException(LangProcess.msg("error_Send")); } } - return false; } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/scxl/SCXLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/scxl/SCXLTask.java index 5e67b51..9c788de 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/scxl/SCXLTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/scxl/SCXLTask.java @@ -98,7 +98,7 @@ public class SCXLTask extends AbstractTask { findNextPoint(nextRegionStr, task); } - private void findNextPoint(List nextRegionStr, SchBaseTask task) { + public void findNextPoint(List nextRegionStr, SchBaseTask task) { RedissonUtils.lock(c -> { //按组找同一半区没有阻挡的空闲点位 List points = scxlMapper.findNextPoint(nextRegionStr); @@ -116,6 +116,9 @@ public class SCXLTask extends AbstractTask { schBasePoint = point; break; } + if (schBasePoint == null){ + throw new BadRequestException("区域3接收区域没有空闲的点位!"); + } // 设置终点并修改创建成功状态 task.setPoint_code2(schBasePoint.getExt_point_code()); task.setPoint_code4(schBasePoint.getPoint_code()); @@ -134,39 +137,6 @@ public class SCXLTask extends AbstractTask { PointUtils.setUpdateByAcs(schBasePoint); pointService.updateById(schBasePoint); return true; -// List points = pointService.list(new LambdaQueryWrapper() -// .in(SchBasePoint::getRegion_code, nextRegionStr) -// .eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode()) -// .eq(SchBasePoint::getIng_task_code, "") -// .eq(SchBasePoint::getIs_used, true) -// .orderByAsc(SchBasePoint::getIn_order_seq)); -// -// if (CollectionUtils.isEmpty(points)) { -// throw new BadRequestException("区域3没有空闲的上料点位!"); -// } -// SchBasePoint point = getNextPoint(points); -// if (ObjectUtil.isNull(point)) { -// // 找不到一排都为空的点位 取第一列第一个为空的位置 -// point = points.get(0); -// } -// // 设置终点并修改创建成功状态 -// task.setPoint_code2(point.getPoint_code()); -// String requestParam = task.getRequest_param(); -// JSONObject jsonObject = JSONObject.parseObject(requestParam); -// String point3 = jsonObject.getString("point3"); -// if (StrUtil.isNotEmpty(point3)){ -// task.setPoint_code3(point3); -// } -// // 设置终点并修改创建成功状态 -// task.setVehicle_code2(PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取货二次分配")); -// task.setRemark(""); -// task.setTask_status(TaskStatus.CREATED.getCode()); -// taskService.save(task); -// // 点位更新 -// point.setIng_task_code(task.getTask_code()); -// PointUtils.setUpdateByAcs(point); -// pointService.updateById(point); -// return true; }, "SCXLTask", null); } @@ -182,7 +152,7 @@ public class SCXLTask extends AbstractTask { return null; } - private boolean checkMaxTaskNum(SchBasePoint point) { + public boolean checkMaxTaskNum(SchBasePoint point) { String ext_point_code = point.getExt_point_code(); if (StrUtil.isEmpty(ext_point_code)){ throw new BadRequestException("该点位【"+point.getPoint_code()+"】没有设置等待点位!"); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/scxl/mapper/SCXLMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/scxl/mapper/SCXLMapper.xml index ec0ba19..b846f14 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/scxl/mapper/SCXLMapper.xml +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/scxl/mapper/SCXLMapper.xml @@ -6,6 +6,7 @@ WHERE p1.point_status = '1' AND p1.point_type = '1' + AND p1.is_used= '1' AND p1.region_code = 'R3' AND 0 = ( SELECT COUNT(*) diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/zjps/ZJPSTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/zjps/ZJPSTask.java index bd94f02..a621e51 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/zjps/ZJPSTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/zjps/ZJPSTask.java @@ -85,7 +85,7 @@ public class ZJPSTask extends AbstractTask { String requestParam = task.getRequest_param(); JSONObject jsonObject = JSONObject.parseObject(requestParam); String regionCode = jsonObject.getString("region_code"); - findNextPoint(nextRegionStr, task); + findNextPoint(nextRegionStr,regionCode, task); } } @@ -100,56 +100,113 @@ public class ZJPSTask extends AbstractTask { List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")) .collect(Collectors.toList()); // 找终点 - findNextPoint(nextRegionStr, task); + String requestParam = task.getRequest_param(); + JSONObject jsonObject = JSONObject.parseObject(requestParam); + String regionCode = jsonObject.getString("region_code"); + findNextPoint(nextRegionStr,regionCode, task); } - private void findNextPoint(List nextRegionStr,SchBaseTask task) { - RedissonUtils.lock(c -> { - List points = zjpsMapper.findNextPoint(nextRegionStr); - if (CollectionUtils.isEmpty(points)) { - throw new BadRequestException("区域4和区域5没有空闲的上料点位!"); - } - SchBasePoint schBasePoint = null; - for (int i = 0; i < points.size(); i++) { - SchBasePoint point = points.get(i); - - //判断该点位的所在的排是否达到任务最大数 - if (!checkMaxTaskNum(point)) { - continue; + public void findNextPoint(List nextRegionStr,String regionCode,SchBaseTask task) { + if ("R4".equals(regionCode)) { + RedissonUtils.lock(c -> { + List points = zjpsMapper.findNextPoint(nextRegionStr,regionCode); + if (CollectionUtils.isEmpty(points)) { + throw new BadRequestException("区域4没有空闲的上料点位!"); } - schBasePoint = point; - break; - } - // 设置终点并修改创建成功状态 - task.setPoint_code2(schBasePoint.getExt_point_code()); - task.setPoint_code4(schBasePoint.getPoint_code()); - String requestParam = task.getRequest_param(); - JSONObject jsonObject = JSONObject.parseObject(requestParam); - String point3 = jsonObject.getString("point3"); - if (StrUtil.isNotEmpty(point3)){ - task.setPoint_code3(point3); - } - task.setVehicle_code2(PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取放货二次分配")); - task.setRemark(""); - task.setTask_status(TaskStatus.CREATED.getCode()); - taskService.save(task); - // 点位更新 - schBasePoint.setIng_task_code(task.getTask_code()); - PointUtils.setUpdateByAcs(schBasePoint); - pointService.updateById(schBasePoint); - return true; - }, "ZJPSTask", null); + SchBasePoint schBasePoint = null; + for (int i = 0; i < points.size(); i++) { + SchBasePoint point = points.get(i); + + //判断该点位的所在的排是否达到任务最大数 + if (!checkMaxTaskNum(point)) { + continue; + } + schBasePoint = point; + break; + } + if (schBasePoint == null) { + throw new BadRequestException("区域4没有空闲的上料点位!"); + } + // 设置终点并修改创建成功状态 + task.setPoint_code2(schBasePoint.getExt_point_code()); + task.setPoint_code4(schBasePoint.getPoint_code()); + String requestParam = task.getRequest_param(); + JSONObject jsonObject = JSONObject.parseObject(requestParam); + String point3 = jsonObject.getString("point3"); + if (StrUtil.isNotEmpty(point3)){ + task.setPoint_code3(point3); + } + task.setVehicle_code2(PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取放货二次分配")); + task.setRemark(""); + task.setTask_status(TaskStatus.CREATED.getCode()); + taskService.save(task); + // 点位更新 + schBasePoint.setIng_task_code(task.getTask_code()); + PointUtils.setUpdateByAcs(schBasePoint); + pointService.updateById(schBasePoint); + return true; + }, "ZJPSToR4Task", null); + }else { + RedissonUtils.lock(c -> { + List points = zjpsMapper.findNextPoint(nextRegionStr,regionCode); + if (CollectionUtils.isEmpty(points)) { + throw new BadRequestException("区域5没有空闲的上料点位!"); + } + SchBasePoint schBasePoint = null; + for (int i = 0; i < points.size(); i++) { + SchBasePoint point = points.get(i); + + //判断该点位的所在的排是否达到任务最大数 + if (!checkMaxTaskNum(point)) { + continue; + } + schBasePoint = point; + break; + } + if (schBasePoint == null) { + throw new BadRequestException("区域5没有空闲的上料点位!"); + } + // 设置终点并修改创建成功状态 + task.setPoint_code2(schBasePoint.getExt_point_code()); + task.setPoint_code4(schBasePoint.getPoint_code()); + String requestParam = task.getRequest_param(); + JSONObject jsonObject = JSONObject.parseObject(requestParam); + String point3 = jsonObject.getString("point3"); + if (StrUtil.isNotEmpty(point3)){ + task.setPoint_code3(point3); + } + task.setVehicle_code2(PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取放货二次分配")); + task.setRemark(""); + task.setTask_status(TaskStatus.CREATED.getCode()); + taskService.save(task); + // 点位更新 + schBasePoint.setIng_task_code(task.getTask_code()); + PointUtils.setUpdateByAcs(schBasePoint); + pointService.updateById(schBasePoint); + return true; + }, "ZJPSToR5Task", null); + } } - private boolean checkMaxTaskNum(SchBasePoint point) { + public boolean checkMaxTaskNum(SchBasePoint point) { String ext_point_code = point.getExt_point_code(); if (StrUtil.isEmpty(ext_point_code)){ throw new BadRequestException("该点位【"+point.getPoint_code()+"】没有设置等待点位!"); } + String region_code = point.getRegion_code(); + Param zjpsTaskNum = new Param(); + if (region_code.equals("R4")) { + zjpsTaskNum = paramService.findByCode("ZJXLToR4Task_num"); + }else if (region_code.equals("R5")) { + zjpsTaskNum = paramService.findByCode("ZJXLToR5Task_num"); + } List zjpsTask = taskService.findUnFinishTasksByTaskConfigAndPointCode("ZJPSTask", ext_point_code); - Param zjpsTaskNum = paramService.findByCode("ZJPSTask_num"); if (zjpsTaskNum == null) { - throw new BadRequestException("请先设置参数【ZJPSTask_num】!"); + if (region_code.equals("R4")) { + throw new BadRequestException("请先设置参数【ZJXLToR4Task_num】!"); + }else if (region_code.equals("R5")) { + throw new BadRequestException("请先设置参数【ZJXLToR5Task_num】!"); + } } if (zjpsTask.size() >= Integer.parseInt(zjpsTaskNum.getValue())) { return false; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/zjps/mapper/ZJPSMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/zjps/mapper/ZJPSMapper.java index 13a848f..ed739b5 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/zjps/mapper/ZJPSMapper.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/zjps/mapper/ZJPSMapper.java @@ -7,5 +7,5 @@ import org.nl.wms.sch.point.service.dao.SchBasePoint; import java.util.List; public interface ZJPSMapper { - List findNextPoint(@Param("nextRegionStr") List nextRegionStr); + List findNextPoint(@Param("nextRegionStr") List nextRegionStr, @Param("regionCode") String regionCode); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/zjps/mapper/ZJPSMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/zjps/mapper/ZJPSMapper.xml index 434fbd2..f321408 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/zjps/mapper/ZJPSMapper.xml +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/zjps/mapper/ZJPSMapper.xml @@ -7,6 +7,7 @@ p1.point_status = '1' AND p1.point_type = '1' AND p1.is_used= '1' + AND p1.region_code = #{regionCode} AND 0 = ( SELECT COUNT(*) FROM sch_base_task @@ -18,15 +19,15 @@ AND task_status '5' AND is_delete = '0' ) - AND (p1.region_code = 'R4' OR p1.region_code = 'R5') AND 0 = ( SELECT COUNT(1) FROM sch_base_point p2 WHERE p2.point_status = '2' AND p2.row_num = p1.row_num - AND p2.col_num p1.col_num + AND p2.in_order_seq > p1.in_order_seq AND p2.point_type = '1' - AND (p2.region_code = 'R4' OR p2.region_code = 'R5') + AND p2.region_code = #{regionCode} ) + ORDER BY p1.in_order_seq diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/zjxl/ZJXLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/zjxl/ZJXLTask.java index 9508957..4f6a656 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/zjxl/ZJXLTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/zjxl/ZJXLTask.java @@ -82,7 +82,6 @@ public class ZJXLTask extends AbstractTask { List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")) .collect(Collectors.toList()); // 找终点 - // 找终点 String requestParam = task.getRequest_param(); JSONObject jsonObject = JSONObject.parseObject(requestParam); String regionCode = jsonObject.getString("region_code"); @@ -100,7 +99,6 @@ public class ZJXLTask extends AbstractTask { TaskUtils.setUpdateByAcs(task); List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")) .collect(Collectors.toList()); - // 找起点 String requestParam = task.getRequest_param(); JSONObject jsonObject = JSONObject.parseObject(requestParam); String regionCode = jsonObject.getString("region_code"); @@ -108,7 +106,7 @@ public class ZJXLTask extends AbstractTask { findNextPoint(nextRegionStr,regionCode,task); } - private void findNextPoint(List nextRegionStr,String regionCode,SchBaseTask task) { + public void findNextPoint(List nextRegionStr,String regionCode,SchBaseTask task) { // 查找R6 R7区域的空闲点位 if ("R6".equals(regionCode)) { RedissonUtils.lock(c -> { @@ -128,6 +126,9 @@ public class ZJXLTask extends AbstractTask { schBasePoint = point; break; } + if (schBasePoint == null) { + throw new BadRequestException("区域6没有空闲的点位!"); + } // 设置终点并修改创建成功状态 task.setPoint_code2(schBasePoint.getExt_point_code()); task.setPoint_code4(schBasePoint.getPoint_code()); @@ -165,6 +166,9 @@ public class ZJXLTask extends AbstractTask { schBasePoint = point; break; } + if (schBasePoint == null) { + throw new BadRequestException("区域7没有空闲的点位!"); + } // 设置终点并修改创建成功状态 task.setPoint_code2(schBasePoint.getExt_point_code()); task.setPoint_code4(schBasePoint.getPoint_code()); @@ -187,7 +191,7 @@ public class ZJXLTask extends AbstractTask { } } - private boolean checkMaxTaskNum(SchBasePoint point) { + public boolean checkMaxTaskNum(SchBasePoint point) { String ext_point_code = point.getExt_point_code(); if (StrUtil.isEmpty(ext_point_code)){ throw new BadRequestException("该点位【"+point.getPoint_code()+"】没有设置等待点位!"); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/zjxl/mapper/ZJXLMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/zjxl/mapper/ZJXLMapper.xml index 0d56cb5..7a03ad9 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/zjxl/mapper/ZJXLMapper.xml +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/zjxl/mapper/ZJXLMapper.xml @@ -7,6 +7,7 @@ WHERE p1.point_status = '1' AND p1.point_type = '1' + AND p1.is_used= '1' AND p1.region_code = #{regionCode} AND 0 = ( SELECT COUNT(*) @@ -24,7 +25,7 @@ WHERE p2.point_status = '2' AND p2.row_num = p1.row_num - AND p2.col_num p1.col_num + AND p2.in_order_seq > p1.in_order_seq AND p2.point_type = '1' AND p2.region_code = #{regionCode} ) diff --git a/lms/nladmin-ui/src/views/wms/basedata/material/index.vue b/lms/nladmin-ui/src/views/wms/basedata/material/index.vue index 1f7b0fa..2b4b921 100644 --- a/lms/nladmin-ui/src/views/wms/basedata/material/index.vue +++ b/lms/nladmin-ui/src/views/wms/basedata/material/index.vue @@ -134,7 +134,6 @@ style="width: 100%;" @selection-change="crud.selectionChangeHandler" > - diff --git a/lms/nladmin-ui/src/views/wms/pdm/group/AddDialog.vue b/lms/nladmin-ui/src/views/wms/pdm/group/AddDialog.vue index 01cc6af..3b3f973 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/group/AddDialog.vue +++ b/lms/nladmin-ui/src/views/wms/pdm/group/AddDialog.vue @@ -62,28 +62,27 @@ :header-cell-style="{background:'#f5f7fa',color:'#606266'}" > - + - + + + + - - - - - + - - - + + + + - @@ -128,6 +128,8 @@ const defaultForm = { material_name: null, material_code: null, material_spec: null, + doff_code: null, + device_code: null, pcsn: null, qty_unit_id: null, qty_unit_name: null, diff --git a/lms/nladmin-ui/src/views/wms/pdm/structivt/index.vue b/lms/nladmin-ui/src/views/wms/pdm/structivt/index.vue index 6d773a9..2f449de 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/structivt/index.vue +++ b/lms/nladmin-ui/src/views/wms/pdm/structivt/index.vue @@ -36,12 +36,22 @@ class="filter-item" /> + + + @@ -72,10 +82,10 @@ > - - - - + + + +