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 1dbe4fa4b..2f3e5e438 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 @@ -30,6 +30,7 @@ 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.task.dao.SchBaseTask; +import org.nl.b_lms.sch.task.dto.SchBaseTaskDto; 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.ZxqTask; @@ -52,7 +53,6 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - import javax.annotation.Resource; import java.math.BigDecimal; import java.util.*; @@ -92,8 +92,6 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl queryContainerization1(Map whereJson, PageQuery pageable) { - IPage resultPage = new Page<>(pageable.getPage(), pageable.getSize()); - 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.like(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.lt(PdmBiSubpackagerelation::getStatus, "99"); - } - } - queryWrapper.groupBy(PdmBiSubpackagerelation::getSale_order_name) - .orderByDesc(PdmBiSubpackagerelation::getCreate_time); - return pdmBiSubpackagerelationMapper.selectPage(resultPage, queryWrapper); - } - /** * 根据订单号查询子卷信息 @@ -261,10 +229,6 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl packagerelationList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class); - if (CollectionUtils.isEmpty(packagerelationList)) { - throw new BadRequestException("无选中子卷信息"); - } - //检查是否存在已分配规格的子卷号 - List isOutBox = packagerelationList.stream().filter(r -> !r.getStatus().equals("99")).collect(Collectors.toList()); - if (isOutBox.size() > 0) { - throw new BadRequestException("标记为黄色的子卷号为已分配且对应的木箱已出库,请重新选择未分配木箱规格的子卷"); - } - JSONArray jsonArray = whereJson.getJSONArray("tableMater"); - if (jsonArray == null || jsonArray.size() == 0) { - throw new BadRequestException("无选中子卷信息"); - } + //子卷信息校验 + checkEntityList(whereJson, packagerelationList); //均衡获取木箱出库装箱区对接位 String deviceCode = getPointCode(); Integer taskCount = bstIvtPackageinfoivtMapper.getZxqTaskCount(deviceCode.substring(deviceCode.lastIndexOf("_") + 1)); + //每个装箱区只能搬10个子卷 if (taskCount + packagerelationList.size() > 10) { throw new BadRequestException("子卷搬运任务数已达上限!"); } - List pdmBiSubpackagerelationList = pdmBiSubpackagerelationMapper - .selectList(new LambdaQueryWrapper().eq(PdmBiSubpackagerelation::getSale_order_name, packagerelationList.get(0).getSale_order_name())); - Integer maxBoxGroup = pdmBiSubpackagerelationList.stream() - .map(PdmBiSubpackagerelation::getBox_group) - .filter(Objects::nonNull) - .map(Integer::parseInt) - .max(Integer::compareTo) - .orElse(0) + 1; try { List workIdList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class).stream() .map(PdmBiSubpackagerelation::getWorkorder_id) .map(String::valueOf) .collect(Collectors.toList()); - if (workIdList.isEmpty()) { - return; - } //根据分切计划获取子卷重量计算理论毛重 Set containerNameList = packagerelationList.stream() .map(PdmBiSubpackagerelation::getContainer_name) .collect(Collectors.toSet()); List planList = iPdmBiSlittingproductionplanService.list(new LambdaQueryWrapper().in(PdmBiSlittingproductionplan::getContainer_name, containerNameList)); if (CollectionUtils.isEmpty(planList)) { - throw new BadRequestException("存在查询不到分切计划的子卷号"); + throw new BadRequestException("子卷查询不到分切计划,请检查!"); } BigDecimal totalWeight; totalWeight = planList.stream() @@ -329,66 +273,64 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl pdmBiSubpackagerelationList = pdmBiSubpackagerelationMapper + .selectList(new LambdaQueryWrapper().eq(PdmBiSubpackagerelation::getSale_order_name, packagerelationList.get(0).getSale_order_name())); + Integer maxBoxGroup = pdmBiSubpackagerelationList.stream() + .map(PdmBiSubpackagerelation::getBox_group) + .filter(Objects::nonNull) + .map(Integer::parseInt) + .max(Integer::compareTo) + .orElse(0) + 1; + outBox(workIdList, containerNameList, deviceCode, maxBoxGroup, whereJson, totalWeight); } catch (Exception e) { throw new BadRequestException(e.getMessage()); } } - /** - * 子卷装箱 - * - * @param whereJson 分配信息 - */ - // @Override - @Transactional(rollbackFor = Exception.class) - public void updateEntityList8(JSONObject whereJson) { - List packagerelationList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class); + private void checkEntityList(JSONObject whereJson, List packagerelationList) { + JSONArray jsonArray = whereJson.getJSONArray("tableMater"); + if (jsonArray == null || jsonArray.size() == 0) { + throw new BadRequestException("无选中子卷信息"); + } if (CollectionUtils.isEmpty(packagerelationList)) { throw new BadRequestException("无选中子卷信息"); } //检查是否存在已分配规格的子卷号 - List isOutBox = packagerelationList.stream().filter(r -> r.getStatus().equals("0")).collect(Collectors.toList()); - if (isOutBox.size() > 0) { - throw new BadRequestException("标记为黄色的子卷号已分配且对应的木箱已出库,请重新选择未分配木箱规格的子卷"); + if (packagerelationList.stream() + .anyMatch(r -> !r.getStatus().equals("99"))) { + throw new BadRequestException("标记为黄色的子卷号为已分配且对应的木箱已出库,请重新选择未分配木箱规格的子卷!"); } - //均衡获取木箱出库装箱区对接位 - String deviceCode = getPointCode(); - Integer taskCount = bstIvtPackageinfoivtMapper.getZxqTaskCount(deviceCode.substring(deviceCode.lastIndexOf("_") + 1)); - if (taskCount + packagerelationList.size() > 10) { - throw new BadRequestException("子卷搬运任务数已达上限!"); + if (packagerelationList.stream() + .anyMatch(r -> !r.getSale_order_name().equals(packagerelationList.get(0).getSale_order_name()))) { + throw new BadRequestException("子卷的订单号不一致,请检查!"); } - List pdmBiSubpackagerelationList = pdmBiSubpackagerelationMapper - .selectList(new LambdaQueryWrapper().eq(PdmBiSubpackagerelation::getSale_order_name, packagerelationList.get(0).getSale_order_name())); - Integer maxBoxGroup = pdmBiSubpackagerelationList.stream() - .map(PdmBiSubpackagerelation::getBox_group) - .filter(Objects::nonNull) - .map(Integer::parseInt) - .max(Integer::compareTo) - .orElse(0) + 1; - List workIdList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class).stream() - .map(PdmBiSubpackagerelation::getWorkorder_id) - .map(String::valueOf) - .collect(Collectors.toList()); - if (workIdList.isEmpty()) { - return; + if (packagerelationList.stream() + .anyMatch(r -> StringUtils.isBlank(r.getPaper_tube_description()))) { + throw new BadRequestException("存在子卷规格信息为空的子卷号,请检查!"); } - //根据分切计划获取子卷重量计算理论毛重 - Set containerNameList = packagerelationList.stream() - .map(PdmBiSubpackagerelation::getContainer_name) - .collect(Collectors.toSet()); - outBox8(workIdList, containerNameList, deviceCode, maxBoxGroup, whereJson.getString("checked")); + if (packagerelationList.stream() + .anyMatch(r -> StringUtils.isBlank(r.getWeight()))) { + throw new BadRequestException("存在子卷重量为空的子卷号,请检查!"); + } + if (packagerelationList.stream() + .anyMatch(r -> !r.getPaper_tube_description().equals(packagerelationList.get(0).getPaper_tube_description()))) { + throw new BadRequestException("子卷规格不一致,请检查!"); + } + } + + /** * 空木箱出库 */ private void outBox(List workIdList, Set containerNameList, String deviceCode, Integer maxBoxGroup, JSONObject whereJson, BigDecimal totalWeight) { JSONObject boxInfo = new JSONObject(); - //确定装箱区终点 + //确定木箱出库装箱区 boxInfo.put("device_code", deviceCode); - boxInfo.put("material_code",whereJson.getString("checked")); + boxInfo.put("material_code", whereJson.getString("checked")); boxInfo.put("num", workIdList.size()); String boxSn = outBoxManageService.outBox(boxInfo); BstIvtBoxinfo boxDao = iBstIvtBoxinfoService.getOne( @@ -398,6 +340,9 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl Integer.parseInt(boxDao.getNum())) { + throw new BadRequestException("子卷数量超过木箱的最大装卷数!"); + } //木箱重量 BigDecimal boxWeight = new BigDecimal(boxDao.getBox_weight()); if (boxWeight.compareTo(new BigDecimal(0)) == 0) { @@ -413,7 +358,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl装箱区agv任务 @@ -429,43 +374,13 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl装箱区agv确定起点任务创建异常:" + e); - } - }, pool); - - - } - - /** - * 空木箱出库 - */ - private void outBox8(List workIdList, Set containerNameList, String deviceCode, Integer - maxBoxGroup, String boxType) { - //均衡获取装箱对接位 - JSONObject boxInfo = new JSONObject(); - //确定装箱区终点 - boxInfo.put("device_code", deviceCode); - boxInfo.put("material_code", boxType); - boxInfo.put("num", workIdList.size()); - String boxSn = outBoxManageService.outBox(boxInfo); - //更新及子卷包装状态已分配规格及木箱规格组 - CompletableFuture.runAsync(() -> { - try { - // updateBoxGroup(maxBoxGroup, workIdList, boxSn, boxType); - } catch (Exception e) { - log.error("updateBoxGroup接口更新及子卷包装状态已分配规格及木箱规格组异常:" + e); - } - }, pool); - //待检区->装箱区agv任务 - CompletableFuture.runAsync(() -> { - try { - agvTransfer(containerNameList, deviceCode, boxSn); - } catch (Exception e) { - log.error("agvTransfer接口待检区->装箱区agv任务异常:" + e); + log.error("子卷装箱异常,agvTransfer待检区->装箱区agv确定起点任务创建异常,木箱号为:" + boxSn + ",异常信息:" + e); } }, pool); } + + private void updateBoxGroup(Integer maxBoxGroup, List entityList, String boxSn, String boxType, String totalWeight) { UpdateWrapper updateWrapper = new UpdateWrapper<>(); //理论毛重 @@ -510,42 +425,6 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl containerNameList, 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)); - List djqPoints = djqPointList.stream() - .filter(r -> containerNameList.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); - } - } private String getPointCode() { //均衡获取木箱出库装箱区对接位 @@ -679,7 +558,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl schBaseTaskList = new ArrayList<>(); + List schBaseTaskList = new ArrayList<>(); //确定起点,安装装箱组标识加入任务队列 djqPoints.forEach(r -> { //校验重复任务 @@ -687,6 +566,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl装箱区")); jo.put("vehicle_code", r.getContainer_name()); jo.put("point_code1", r.getPoint_code()); @@ -694,7 +574,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl tasks) { + public void addTasksToQueue(String groupId, List tasks) { tasks.forEach(task -> { redisUtils.pushToList(TASK_QUEUE_PREFIX + groupId, task); //redisUtils.pushToList(TASK_QUEUE_PREFIX + groupId, task,3,TimeUnit.HOURS); - log.info("待检区->装箱区agv任务组为:" + groupId + ",任务编号为:" + task.getTask_code() + "成功添加到任务队列。"); + log.info("子卷装箱:待检区->装箱区agv任务组为:" + groupId + ",任务编号为:" + task.getTask_code() + "成功添加到任务队列。"); }); } @@ -67,15 +62,11 @@ public class TaskQueue { private void executeTask(SchBaseTask task, String pointCode) { if (task != null) { task.setPoint_code2(pointCode); - log.info("待检区->装箱区agv任务编号为:"+task.getTask_code()+",任务状态为:"+task.getTask_status()+"任务开始下发。"); + log.info("子卷装箱:待检区->装箱区agv任务编号为:"+task.getTask_code()+",任务状态为:"+task.getTask_status()+"任务开始下发。"); task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); taskService.updateById(task); zxqTask.immediateNotifyAcs(null); - log.info("待检区->装箱区agv任务编号为:"+task.getTask_code()+",任务状态为:"+task.getTask_status()+"下发完成。"); - //同步删除子卷包装关系 - //LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - //queryWrapper.eq(PdmBiSubpackagerelation::getContainer_name, task.getVehicle_code()); - //pdmBiSubpackagerelationMapper.delete(queryWrapper); + log.info("子卷装箱:待检区->装箱区agv任务编号为:"+task.getTask_code()+",任务状态为:"+task.getTask_status()+"下发完成。"); } } 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 0058368a3..dc16fe4eb 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/sub/index.vue +++ b/lms/nladmin-ui/src/views/wms/pdm/sub/index.vue @@ -190,7 +190,10 @@ export default { title: '子卷装箱', optShow: { add: false, edit: false, del: false }, url: 'api/pdmBiSubpackagerelation/queryContainerization', - crudMethod: { ...crudSubpackagerelation } + crudMethod: { ...crudSubpackagerelation }, + query: { + status: '99' + } }) }, data() {