diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaCommonController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaCommonController.java index 09ec94b..3cfed4f 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaCommonController.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaCommonController.java @@ -50,6 +50,18 @@ public class PdaCommonController { public ResponseEntity inEmptyVehicle(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(pdaCommonService.inEmptyVehicle(whereJson), HttpStatus.OK); } + @PostMapping("/queryPointDtl") + @Log("空载具堆叠-查询点位堆叠明细") + @SaIgnore + public ResponseEntity queryPointDtl() { + return new ResponseEntity<>(pdaCommonService.queryPointDtl(), HttpStatus.OK); + } + @PostMapping("/callStackPlates") + @Log("空载具堆叠-呼叫堆叠") + @SaIgnore + public ResponseEntity callStackPlates(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaCommonService.callStackPlates(whereJson), HttpStatus.OK); + } @PostMapping("/confirmBagAssembly") @Log("物料组袋-确认组袋") @SaIgnore diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaCommonService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaCommonService.java index 03be9b9..996acb1 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaCommonService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaCommonService.java @@ -44,4 +44,20 @@ public interface PdaCommonService { PdaResponse inEmptyVehicle(JSONObject param); PdaResponse confirmBucketAssembly(AssemblyBucketParam param); + + /** + * 空载具堆叠-查询点位堆叠明细 + * @return PdaResponse + */ + PdaResponse queryPointDtl(); + + /** + * 空载具堆叠-呼叫堆叠 + * @param whereJson { + * point_code: 载具点位 + * row: {明细} + * } + * @return PdaResponse + */ + PdaResponse callStackPlates(JSONObject whereJson); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaCommonServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaCommonServiceImpl.java index d1a61a5..88fe14b 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaCommonServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaCommonServiceImpl.java @@ -2,9 +2,11 @@ package org.nl.wms.pda.general_management.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; 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.UpdateWrapper; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -25,9 +27,14 @@ import org.nl.wms.pda.general_management.service.dto.AssemblyBagParam; import org.nl.wms.pda.general_management.service.dto.AssemblyBucketParam; import org.nl.wms.pda.general_management.service.dto.AssemblyPalletParam; import org.nl.wms.pda.util.PdaResponse; +import org.nl.wms.sch_manage.enums.TaskStatus; +import org.nl.wms.sch_manage.service.ISchBasePointService; import org.nl.wms.sch_manage.service.ISchBaseTaskService; +import org.nl.wms.sch_manage.service.dao.SchBasePoint; import org.nl.wms.sch_manage.service.dao.SchBaseTask; +import org.nl.wms.sch_manage.service.util.tasks.EmpStackPlatesTask; import org.nl.wms.sch_manage.service.util.tasks.EmpVehicleOutTask; +import org.nl.wms.warehouse_management.enums.IOSConstant; import org.nl.wms.warehouse_management.enums.IOSEnum; import org.nl.wms.warehouse_management.service.IMdPbGroupplateService; import org.nl.wms.warehouse_management.service.VehicleInService; @@ -36,10 +43,13 @@ import org.nl.wms.warehouse_management.service.dao.GroupPlate; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; 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.concurrent.TimeUnit; +import java.util.stream.Collectors; /** * @Author: lyd @@ -72,6 +82,19 @@ public class PdaCommonServiceImpl implements PdaCommonService { private IMdPbStoragevehicleinfoService storagevehicleinfoService; @Resource private IMdPdGroupbucketService groupbucketService; + + /** + * 点位服务类 + */ + @Resource + private ISchBasePointService iSchBasePointService; + + /** + * 空托盘叠盘任务类 + */ + @Resource + private EmpStackPlatesTask empStackPlatesTask; + @SneakyThrows @Override public PdaResponse callEmptyVehicle(JSONObject param) { @@ -198,4 +221,65 @@ public class PdaCommonServiceImpl implements PdaCommonService { groupbucketService.save(groupbucket); return PdaResponse.requestOk(); } + + @Override + public PdaResponse queryPointDtl() { + List pointDaoList = iSchBasePointService.list( + new QueryWrapper().lambda() + .eq(SchBasePoint::getRegion_code, IOSEnum.REGION_CODE.code("空托盘堆叠区域")) + .eq(SchBasePoint::getIs_used, IOSConstant.ONE) + ); + List pointCodeList = pointDaoList.stream() + .map(SchBasePoint::getPoint_code) + .collect(Collectors.toList()); + + // 查询当前正在执行的任务 + List taskList = taskService.list( + new QueryWrapper().lambda() + .lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()) + .eq(SchBaseTask::getIs_delete, IOSConstant.ZERO) + .eq(SchBaseTask::getConfig_code, EmpStackPlatesTask.class.getSimpleName()) + .in(SchBaseTask::getPoint_code2, pointCodeList) + ); + + // 需返回的集合 + List resultList = new ArrayList<>(); + for (SchBasePoint pointDao : pointDaoList) { + JSONObject json = new JSONObject(); + json.put("point_code", pointDao.getPoint_code()); + json.put("vehicle_qty", pointDao.getVehicle_qty()); + // 查询待堆叠数量 + List collectQtyList = taskList.stream() + .filter(row -> row.getPoint_code2().equals(pointDao.getPoint_code())) + .collect(Collectors.toList()); + json.put("execution_task", ObjectUtil.isNotEmpty(collectQtyList) ? collectQtyList.size() : 0); + // 计算剩余可堆叠数量 + json.put("remaining_qty", NumberUtil.sub(pointDao.getVehicle_max_qty(), pointDao.getVehicle_qty(),json.getIntValue("execution_task"))); + resultList.add(json); + } + return PdaResponse.requestParamOk(resultList); + } + + @Override + @Transactional + public PdaResponse callStackPlates(JSONObject whereJson) { + // 判断起点点位是否存在 + SchBasePoint startPointDao = iSchBasePointService.getById(whereJson.getString("point_code")); + if (ObjectUtil.isEmpty(startPointDao)) { + throw new BadRequestException("当前点位不存在【"+whereJson.getString("point_code")+"】"); + } + + // 计算叠盘位是否还能继续叠盘 + JSONObject row = whereJson.getJSONObject("row"); + if (row.getIntValue("remaining_qty") == 0) { + throw new BadRequestException("当前堆叠位空托盘数量已满【"+row.getString("point_code")+"】"); + } + + // 生成任务 + JSONObject jsonTask = new JSONObject(); + jsonTask.put("point_code1", whereJson.getString("point_code")); + jsonTask.put("point_code2", row.getString("point_code")); + empStackPlatesTask.create(jsonTask); + return PdaResponse.requestOk(); + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/packaging_management/service/impl/PdaPackagingServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/packaging_management/service/impl/PdaPackagingServiceImpl.java index 8d6a8ab..5145ff5 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/packaging_management/service/impl/PdaPackagingServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/packaging_management/service/impl/PdaPackagingServiceImpl.java @@ -180,7 +180,9 @@ public class PdaPackagingServiceImpl implements PdaPackagingService { // 创建agv任务 JSONObject jsonTask = new JSONObject(); jsonTask.put("point_code1", whereJson.getString("point_code")); - jsonTask.put("point_code2", IOSConstant.AGVZJZ001); + // 判断点位是否需要二次配送 + SchBasePoint endPoint = iSchBasePointService.getById(whereJson.getString("in_point_code")); + jsonTask.put("point_code2", endPoint.getIs_auto() ? whereJson.getString("in_point_code") : IOSConstant.AGVZJZ001); jsonTask.put("point_code3", whereJson.getString("in_point_code")); jsonTask.put("material_id", rows.get(0).getString("material_id")); jsonTask.put("material_qty", whereJson.getString("total_qty")); @@ -239,11 +241,11 @@ public class PdaPackagingServiceImpl implements PdaPackagingService { public PdaResponse packConfirmReturn(JSONObject whereJson) { SchBasePoint pointDao = iSchBasePointService.getById(whereJson.getString("point_code")); if (ObjectUtil.isEmpty(pointDao)) { - throw new BadRequestException("当前点位不存在【"+whereJson.getString("point_code")+"】"); + throw new BadRequestException("当前点位不存在【" + whereJson.getString("point_code") + "】"); } // 判断点位区域是否是外包材区域 if (!pointDao.getRegion_code().equals(IOSEnum.REGION_CODE.code("外包材区域"))) { - throw new BadRequestException("当前点位不属于还回区域点位【"+whereJson.getString("point_code")+"】"); + throw new BadRequestException("当前点位不属于还回区域点位【" + whereJson.getString("point_code") + "】"); } // 查询当前点位是否有库存 List packDaoList = iMdPdmPackagingService.list( diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PackagingInTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/EmpStackPlatesTask.java similarity index 85% rename from wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PackagingInTask.java rename to wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/EmpStackPlatesTask.java index 1db7038..40460a7 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PackagingInTask.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/EmpStackPlatesTask.java @@ -1,20 +1,20 @@ package org.nl.wms.sch_manage.service.util.tasks; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.CodeUtil; import org.nl.common.utils.SecurityUtils; import org.nl.config.IdUtil; import org.nl.wms.basedata_manage.enums.BaseDataEnum; -import org.nl.wms.pdm_management.service.IMdPdmPackagingService; -import org.nl.wms.pdm_management.service.dao.MdPdmPackaging; import org.nl.wms.sch_manage.enums.TaskEnum; import org.nl.wms.sch_manage.enums.TaskStatus; +import org.nl.wms.sch_manage.service.ISchBasePointService; import org.nl.wms.sch_manage.service.ISchBaseTaskService; +import org.nl.wms.sch_manage.service.dao.SchBasePoint; import org.nl.wms.sch_manage.service.dao.SchBaseTask; import org.nl.wms.sch_manage.service.util.AbstractTask; import org.nl.wms.sch_manage.service.util.AcsTaskDto; @@ -28,24 +28,24 @@ import javax.annotation.Resource; /** *

- * 内包材送入任务类(中间站至外包材点位) + * 空托盘叠盘任务类 *

* * @author Liuxy - * @since 2025-12-29 + * @since 2025-12-30 */ -@Component(value = "PackagingInTask") -@TaskType("PackagingInTask") -public class PackagingInTask extends AbstractTask { +@Component(value = "EmpStackPlatesTask") +@TaskType("EmpStackPlatesTask") +public class EmpStackPlatesTask extends AbstractTask { @Autowired private ISchBaseTaskService taskService; /** - * 外包材服务类 + * 点位服务 */ @Resource - private IMdPdmPackagingService iMdPdmPackagingService; + private ISchBasePointService iSchBasePointService; @Override public String create(JSONObject json) { @@ -53,15 +53,14 @@ public class PackagingInTask extends AbstractTask { task.setTask_id(IdUtil.getStringId()); task.setTask_code(CodeUtil.getNewCode("TASK_CODE")); task.setTask_status(TaskStatus.CREATE.getCode()); - task.setConfig_code(PackagingInTask.class.getSimpleName()); + task.setConfig_code(EmpStackPlatesTask.class.getSimpleName()); task.setPoint_code1(json.getString("point_code1")); task.setPoint_code2(json.getString("point_code2")); - task.setPoint_code3(json.getString("point_code3")); task.setVehicle_code(json.getString("vehicle_code")); task.setMaterial_id(json.getString("material_id")); task.setMaterial_qty(json.getBigDecimal("material_qty")); task.setRequest_param(json.toString()); - task.setTask_type(TaskEnum.TASK_TYPE.code("料箱")); + task.setTask_type(TaskEnum.TASK_TYPE.code("载具")); task.setPriority(json.getString("Priority")); task.setCreate_id(SecurityUtils.getCurrentUserId()); task.setCreate_name(SecurityUtils.getCurrentNickName()); @@ -147,12 +146,10 @@ public class PackagingInTask extends AbstractTask { taskObj.setTask_status(TaskStatus.FINISHED.getCode()); taskObj.setRemark("已完成"); taskService.updateById(taskObj); - // 更新点位库存 - iMdPdmPackagingService.update( - new UpdateWrapper().lambda() - .set(MdPdmPackaging::getPoint_code, taskObj.getPoint_code2()) - .eq(MdPdmPackaging::getPoint_code, taskObj.getPoint_code3()) - ); + // 更新当前点位载具数量 + SchBasePoint pointDao = iSchBasePointService.getById(taskObj.getPoint_code2()); + pointDao.setVehicle_qty(NumberUtil.add(pointDao.getVehicle_qty(), Integer.valueOf(1)).intValue()); + iSchBasePointService.updateById(pointDao); } @Transactional(rollbackFor = Exception.class) diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PackagingMiddleTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PackagingMiddleTask.java index 2c66826..cc5caf8 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PackagingMiddleTask.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PackagingMiddleTask.java @@ -14,9 +14,7 @@ import org.nl.wms.pdm_management.service.IMdPdmPackagingService; import org.nl.wms.pdm_management.service.dao.MdPdmPackaging; import org.nl.wms.sch_manage.enums.TaskEnum; import org.nl.wms.sch_manage.enums.TaskStatus; -import org.nl.wms.sch_manage.service.ISchBasePointService; import org.nl.wms.sch_manage.service.ISchBaseTaskService; -import org.nl.wms.sch_manage.service.dao.SchBasePoint; import org.nl.wms.sch_manage.service.dao.SchBaseTask; import org.nl.wms.sch_manage.service.util.AbstractTask; import org.nl.wms.sch_manage.service.util.AcsTaskDto; @@ -30,7 +28,7 @@ import javax.annotation.Resource; /** *

- * 内包材送入中间站任务类 + * 内包材送入任务类 *

* * @author Liuxy @@ -43,24 +41,12 @@ public class PackagingMiddleTask extends AbstractTask { @Autowired private ISchBaseTaskService taskService; - /** - * 点位服务 - */ - @Autowired - private ISchBasePointService iSchBasePointService; - /** * 外包材服务类 */ @Resource private IMdPdmPackagingService iMdPdmPackagingService; - /** - * 内包材送入任务类 - */ - @Resource - private PackagingInTask packagingInTask; - @Override public String create(JSONObject json) { SchBaseTask task = new SchBaseTask(); @@ -161,26 +147,12 @@ public class PackagingMiddleTask extends AbstractTask { taskObj.setTask_status(TaskStatus.FINISHED.getCode()); taskObj.setRemark("已完成"); taskService.updateById(taskObj); - // 判断第三个点位是否是agv搬运任务 - SchBasePoint pointDao = iSchBasePointService.getById(taskObj.getPoint_code3()); - if (pointDao.getIs_auto()) { - // 生成中间站至内包材点位agv任务 - JSONObject jsonTask = new JSONObject(); - jsonTask.put("point_code1", taskObj.getPoint_code2()); - jsonTask.put("point_code2", taskObj.getPoint_code3()); - jsonTask.put("point_code3", taskObj.getPoint_code1()); - jsonTask.put("vehicle_code", taskObj.getVehicle_code()); - jsonTask.put("material_id", taskObj.getMaterial_qty()); - packagingInTask.create(jsonTask); - - } else { - // 直接更新点位库存 - iMdPdmPackagingService.update( - new UpdateWrapper().lambda() - .set(MdPdmPackaging::getPoint_code, taskObj.getPoint_code3()) - .eq(MdPdmPackaging::getPoint_code, taskObj.getPoint_code1()) - ); - } + // 跟更新库存点位 + iMdPdmPackagingService.update( + new UpdateWrapper().lambda() + .set(MdPdmPackaging::getPoint_code, taskObj.getPoint_code3()) + .eq(MdPdmPackaging::getPoint_code, taskObj.getPoint_code1()) + ); } @Transactional(rollbackFor = Exception.class) diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSEnum.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSEnum.java index 424a552..a1ec1d6 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSEnum.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSEnum.java @@ -119,7 +119,7 @@ public enum IOSEnum { // 区域编码 REGION_CODE(MapOf.of("出入库区域", "INOUR01", "AGV对接区", "AGVDJ01", "临时储存区", "LSCC01" - , "外包材区域", "WBCZC01" + , "外包材区域", "WBCZC01", "空托盘堆叠区域", "EMPDD01" )), ;