From 39473900c2c8b232cb932def092573ccb70b3e24 Mon Sep 17 00:00:00 2001 From: liuxy Date: Mon, 29 Dec 2025 17:55:54 +0800 Subject: [PATCH] =?UTF-8?q?add=EF=BC=9A=E6=89=8B=E6=8C=81=E5=A4=96?= =?UTF-8?q?=E5=8C=85=E6=9D=90=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PdaPackagingController.java | 43 +++- .../service/PdaPackagingService.java | 79 ++++++- .../service/impl/PdaPackagingServiceImpl.java | 158 +++++++++++++- .../service/util/tasks/PackagingInTask.java | 176 +++++++++++++++ .../util/tasks/PackagingMiddleTask.java | 204 ++++++++++++++++++ .../enums/IOSConstant.java | 5 + .../warehouse_management/enums/IOSEnum.java | 4 +- 7 files changed, 659 insertions(+), 10 deletions(-) create mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PackagingInTask.java create mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PackagingMiddleTask.java diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/packaging_management/controller/PdaPackagingController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/packaging_management/controller/PdaPackagingController.java index 488e6ec..06c70a0 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/packaging_management/controller/PdaPackagingController.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/packaging_management/controller/PdaPackagingController.java @@ -6,7 +6,6 @@ import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.common.logging.annotation.Log; -import org.nl.wms.pda.general_management.service.PdaPublicInterfaceService; import org.nl.wms.pda.packaging_management.service.PdaPackagingService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -61,4 +60,46 @@ public class PdaPackagingController { return new ResponseEntity<>(pdaPackagingService.confirmTransfer(whereJson), HttpStatus.OK); } + @PostMapping("/queryPointInDtl") + @Log("外包材送入-查询点位库存明细") + @SaIgnore + public ResponseEntity queryPointInDtl(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaPackagingService.queryPointInDtl(whereJson), HttpStatus.OK); + } + + @PostMapping("/queryPointInDownload") + @Log("外包材送入-查询外包材区域点位下拉框") + @SaIgnore + public ResponseEntity queryPointInDownload() { + return new ResponseEntity<>(pdaPackagingService.queryPointInDownload(), HttpStatus.OK); + } + + @PostMapping("/packInConfirm") + @Log("外包材送入-送入") + @SaIgnore + public ResponseEntity packInConfirm(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaPackagingService.packInConfirm(whereJson), HttpStatus.OK); + } + + @PostMapping("/queryPointDrawDtl") + @Log("外包材领用-查询点位库存明细") + @SaIgnore + public ResponseEntity queryPointDrawDtl(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaPackagingService.queryPointDrawDtl(whereJson), HttpStatus.OK); + } + + @PostMapping("/queryDrawConfirm") + @Log("外包材领用-确认取货") + @SaIgnore + public ResponseEntity queryDrawConfirm(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaPackagingService.queryDrawConfirm(whereJson), HttpStatus.OK); + } + + @PostMapping("/packConfirmReturn") + @Log("外包材还回-确认还回") + @SaIgnore + public ResponseEntity packConfirmReturn(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaPackagingService.packConfirmReturn(whereJson), HttpStatus.OK); + } + } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/packaging_management/service/PdaPackagingService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/packaging_management/service/PdaPackagingService.java index e11375e..8fc4c69 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/packaging_management/service/PdaPackagingService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/packaging_management/service/PdaPackagingService.java @@ -15,15 +15,17 @@ public interface PdaPackagingService { /** * 外包材收货-根据点位查询下拉框 + * * @param whereJson { * point_code: 点位编码 - * } + * } * @return PdaResponse */ PdaResponse queryPointRegion(JSONObject whereJson); /** * 外包材收货-确认收货 + * * @param whereJson { * point_code: 点位编码 * region_code: 区域编码 @@ -34,28 +36,91 @@ public interface PdaPackagingService { * qty: 数量 * qty_unit_name: 计量单位名称 * remark: 备注 - * } + * } * @return PdaResponse */ PdaResponse confirmStock(JSONObject whereJson); /** * 外包材转运-查询明细 + * * @param whereJson { * out_point: 移出点位 - * } + * } * @return PdaResponse */ PdaResponse queryTransferDtl(JSONObject whereJson); /** * 外包材转运-确认转运 + * * @param whereJson { - * out_point: 移出点位 - * in_point: 移入点位 - * rows: 勾选的列表明细 - * } + * out_point: 移出点位 + * in_point: 移入点位 + * rows: 勾选的列表明细 + * } * @return PdaResponse */ PdaResponse confirmTransfer(JSONObject whereJson); + + /** + * 外包材送入-查询库存明细 + * + * @param whereJson { + * point_code: 点位编码 + * } + * @return PdaResponse + */ + PdaResponse queryPointInDtl(JSONObject whereJson); + + /** + * 外包材送入-查询外包材区域点位下拉框 + * @return PdaResponse + */ + PdaResponse queryPointInDownload(); + + /** + * 外包材送入-送入 + * @param whereJson { + * + * } + * @return PdaResponse + */ + PdaResponse packInConfirm(JSONObject whereJson); + + /** + * 外包材领用-查询点位库存明细 + * @param whereJson { + * + * } + * @return PdaResponse + */ + PdaResponse queryPointDrawDtl(JSONObject whereJson); + + /** + * 外包材领用-确认取货 + * @param whereJson { + * point_code: 点位编码 + * total_qty: 总数量 + * rows: 外包材库存明细 + * } + * @return PdaResponse + */ + PdaResponse queryDrawConfirm(JSONObject whereJson); + + /** + * + * @param whereJson { + * point_code: 点位 + * material_id: 物料标识 + * material_code: 物料编码 + * material_name: 物料名称 + * pcsn: 批号 + * qty: 数量 + * remark: 备注 + * + * } + * @return PdaResponse + */ + PdaResponse packConfirmReturn(JSONObject whereJson); } 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 aacf8ff..8d6a8ab 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 @@ -6,6 +6,7 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.IdUtil; import org.nl.common.utils.JSONObjectOf; import org.nl.common.utils.SecurityUtils; import org.nl.wms.pda.general_management.service.PdaPublicInterfaceService; @@ -16,6 +17,9 @@ import org.nl.wms.pdm_management.service.dao.MdPdmPackaging; import org.nl.wms.pdm_management.service.dao.mapper.MdPdmPackagingMapper; import org.nl.wms.sch_manage.service.ISchBasePointService; import org.nl.wms.sch_manage.service.dao.SchBasePoint; +import org.nl.wms.sch_manage.service.util.tasks.PackagingMiddleTask; +import org.nl.wms.warehouse_management.enums.IOSConstant; +import org.nl.wms.warehouse_management.enums.IOSEnum; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -60,11 +64,17 @@ public class PdaPackagingServiceImpl implements PdaPackagingService { @Resource private MdPdmPackagingMapper mdPdmPackagingMapper; + /** + * 内包材送入中间站任务类 + */ + @Resource + private PackagingMiddleTask packagingMiddleTask; + @Override public PdaResponse queryPointRegion(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") + "】"); } return pdaPublicInterfaceService.queryRegionDropdown(JSONObjectOf.of("region", pointDao.getRegion_code())); } @@ -136,4 +146,150 @@ public class PdaPackagingServiceImpl implements PdaPackagingService { }); return PdaResponse.requestOk(); } + + @Override + public PdaResponse queryPointInDtl(JSONObject whereJson) { + // 判断点位是否是agv对接区 + SchBasePoint pointDao = iSchBasePointService.getById(whereJson.getString("point_code")); + if (ObjectUtil.isEmpty(pointDao)) { + throw new BadRequestException("当前点位不存在【" + whereJson.getString("point_code") + "】"); + } + + if (!pointDao.getRegion_code().equals(IOSEnum.REGION_CODE.code("AGV对接区"))) { + throw new BadRequestException("当前点位不在AGV对接区,请先转运【" + whereJson.getString("point_code") + "】"); + } + + whereJson.put("out_point", whereJson.getString("point_code")); + return PdaResponse.requestParamOk(mdPdmPackagingMapper.queryTransferDtl(whereJson)); + } + + @Override + public PdaResponse queryPointInDownload() { + List pointDaoList = iSchBasePointService.list( + new QueryWrapper().lambda() + .eq(SchBasePoint::getRegion_code, IOSEnum.REGION_CODE.code("外包材区域")) + .eq(SchBasePoint::getIs_used, IOSConstant.ONE) + ); + return PdaResponse.requestParamOk(pointDaoList); + } + + @Override + @Transactional + public PdaResponse packInConfirm(JSONObject whereJson) { + List rows = whereJson.getJSONArray("rows").toJavaList(JSONObject.class); + // 创建agv任务 + JSONObject jsonTask = new JSONObject(); + jsonTask.put("point_code1", whereJson.getString("point_code")); + jsonTask.put("point_code2", 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")); + packagingMiddleTask.create(jsonTask); + return PdaResponse.requestOk(); + } + + @Override + public PdaResponse queryPointDrawDtl(JSONObject whereJson) { + // 判断点位是否是外包材区 + SchBasePoint pointDao = iSchBasePointService.getById(whereJson.getString("point_code")); + if (ObjectUtil.isEmpty(pointDao)) { + throw new BadRequestException("当前点位不存在【" + whereJson.getString("point_code") + "】"); + } + + if (!pointDao.getRegion_code().equals(IOSEnum.REGION_CODE.code("外包材区域"))) { + throw new BadRequestException("当前点位不在外包材区域,不允许领用!"); + } + + whereJson.put("out_point", whereJson.getString("point_code")); + return PdaResponse.requestParamOk(mdPdmPackagingMapper.queryTransferDtl(whereJson)); + } + + @Override + @Transactional + public PdaResponse queryDrawConfirm(JSONObject whereJson) { + List rows = whereJson.getJSONArray("rows").toJavaList(JSONObject.class); + // 查询原库存数量 + List oldPackDaoList = iMdPdmPackagingService.list( + new QueryWrapper().lambda() + .in(MdPdmPackaging::getPacking_id, rows.stream() + .map(row -> row.getString("packing_id")) + .collect(Collectors.toList())) + ); + + for (JSONObject json : rows) { + MdPdmPackaging packDao = oldPackDaoList.stream() + .filter(row -> row.getPacking_id().equals(json.getString("packing_id"))) + .findFirst().orElse(null); + // 计算重量 + double new_qty = NumberUtil.sub(packDao.getQty(), json.getBigDecimal("qty")).doubleValue(); + if (new_qty == 0) { + // 删除库存信息 + iMdPdmPackagingService.removeById(packDao); + } else { + // 更新库存信息 + packDao.setQty(BigDecimal.valueOf(new_qty)); + iMdPdmPackagingService.updateById(packDao); + } + } + return PdaResponse.requestOk(); + } + + @Override + @Transactional + public PdaResponse packConfirmReturn(JSONObject whereJson) { + SchBasePoint pointDao = iSchBasePointService.getById(whereJson.getString("point_code")); + if (ObjectUtil.isEmpty(pointDao)) { + throw new BadRequestException("当前点位不存在【"+whereJson.getString("point_code")+"】"); + } + // 判断点位区域是否是外包材区域 + if (!pointDao.getRegion_code().equals(IOSEnum.REGION_CODE.code("外包材区域"))) { + throw new BadRequestException("当前点位不属于还回区域点位【"+whereJson.getString("point_code")+"】"); + } + // 查询当前点位是否有库存 + List packDaoList = iMdPdmPackagingService.list( + new QueryWrapper().lambda() + .eq(MdPdmPackaging::getPoint_code, whereJson.getString("point_code")) + ); + + MdPdmPackaging mdPdmPackaging = new MdPdmPackaging(); + mdPdmPackaging.setPacking_id(IdUtil.getStringId()); + mdPdmPackaging.setMaterial_id(whereJson.getString("material_id")); + mdPdmPackaging.setPcsn(whereJson.getString("pcsn")); + mdPdmPackaging.setPoint_code(whereJson.getString("point_code")); + mdPdmPackaging.setQty(whereJson.getBigDecimal("qty")); + mdPdmPackaging.setRemark(whereJson.getString("remark")); + mdPdmPackaging.setCreate_id(SecurityUtils.getCurrentUserId()); + mdPdmPackaging.setCreate_name(SecurityUtils.getCurrentNickName()); + mdPdmPackaging.setCreate_time(DateUtil.now()); + + if (ObjectUtil.isNotEmpty(packDaoList)) { + // 判断物料是否相同 + boolean is_like = packDaoList.stream() + .allMatch(row -> row.getMaterial_id().equals(whereJson.getString("material_id"))); + if (!is_like) { + throw new BadRequestException("当前点位物料与还回物料不符!"); + } + + // 查询是否有相同批次 + MdPdmPackaging likePcsnDao = packDaoList.stream() + .filter(row -> row.getPcsn().equals(whereJson.getString("pcsn"))) + .findFirst().orElse(null); + if (ObjectUtil.isNotEmpty(likePcsnDao)) { + // 重量叠加 + likePcsnDao.setQty(NumberUtil.add(likePcsnDao.getQty(), whereJson.getBigDecimal("qty"))); + likePcsnDao.setCreate_id(SecurityUtils.getCurrentUserId()); + likePcsnDao.setCreate_name(SecurityUtils.getCurrentNickName()); + likePcsnDao.setCreate_time(DateUtil.now()); + likePcsnDao.setRemark(whereJson.getString("remark")); + iMdPdmPackagingService.updateById(likePcsnDao); + } else { + // 新增点位库存记录 + iMdPdmPackagingService.save(mdPdmPackaging); + } + } else { + // 新增带你为库存记录 + iMdPdmPackagingService.save(mdPdmPackaging); + } + return PdaResponse.requestOk(); + } } 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/PackagingInTask.java new file mode 100644 index 0000000..1db7038 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PackagingInTask.java @@ -0,0 +1,176 @@ +package org.nl.wms.sch_manage.service.util.tasks; + +import cn.hutool.core.date.DateUtil; +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.ISchBaseTaskService; +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; +import org.nl.wms.sch_manage.service.util.TaskType; +import org.nl.wms.warehouse_management.enums.IOSConstant; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; + +/** + *

+ * 内包材送入任务类(中间站至外包材点位) + *

+ * + * @author Liuxy + * @since 2025-12-29 + */ +@Component(value = "PackagingInTask") +@TaskType("PackagingInTask") +public class PackagingInTask extends AbstractTask { + + @Autowired + private ISchBaseTaskService taskService; + + /** + * 外包材服务类 + */ + @Resource + private IMdPdmPackagingService iMdPdmPackagingService; + + @Override + public String create(JSONObject json) { + SchBaseTask task = new SchBaseTask(); + 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.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.setPriority(json.getString("Priority")); + task.setCreate_id(SecurityUtils.getCurrentUserId()); + task.setCreate_name(SecurityUtils.getCurrentNickName()); + task.setCreate_time(DateUtil.now()); + taskService.save(task); + + // 下发任务 + this.sendTaskOne(task.getTask_id()); + return task.getTask_id(); + } + + @Override + public AcsTaskDto sendAcsParam(String taskId) { + SchBaseTask taskDao = taskService.getById(taskId); + + // 组织下发给acs的数据 + AcsTaskDto acsTaskDto = new AcsTaskDto(); + acsTaskDto.setExt_task_id(taskDao.getTask_id()); + acsTaskDto.setTask_code(taskDao.getTask_code()); + acsTaskDto.setStart_device_code(taskDao.getPoint_code1()); + acsTaskDto.setNext_device_code(taskDao.getPoint_code2()); + acsTaskDto.setVehicle_code(taskDao.getVehicle_code()); + acsTaskDto.setPriority(IOSConstant.ONE); + + return acsTaskDto; + } + + @Override + @Transactional + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getByCode(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { + this.finishTask(taskObj); + } + if (status.equals(TaskStatus.CANCELED)) { + this.cancelTask(taskObj); + } + + } + + @Override + @Transactional + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("已完成"); + taskService.updateById(taskObj); + } + + @Override + @Transactional + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + if (!TaskStatus.CREATE.getCode().equals(taskObj.getTask_status())) { + throw new BadRequestException("任务状态必须为生成才能取消任务"); + } + this.cancelTask(taskObj); + + } + + @Transactional(rollbackFor = Exception.class) + public void finishTask(SchBaseTask taskObj) { + // 任务完成 + 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()) + ); + } + + @Transactional(rollbackFor = Exception.class) + public void cancelTask(SchBaseTask taskObj) { + // 取消任务 + taskService.update(new LambdaUpdateWrapper() + .set(SchBaseTask::getIs_delete, BaseDataEnum.IS_YES_NOT.code("是")) + .set(SchBaseTask::getTask_status, TaskStatus.CANCELED.getCode()) + .set(SchBaseTask::getRemark, "已取消") + .eq(SchBaseTask::getTask_id, taskObj.getTask_id()) + ); + // 更新任务状态 + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setRemark("已取消"); + taskService.updateById(taskObj); + } + + @Override + public void taskConfirm(String task_code) { + } +} 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 new file mode 100644 index 0000000..2c66826 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PackagingMiddleTask.java @@ -0,0 +1,204 @@ +package org.nl.wms.sch_manage.service.util.tasks; + +import cn.hutool.core.date.DateUtil; +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; +import org.nl.wms.sch_manage.service.util.TaskType; +import org.nl.wms.warehouse_management.enums.IOSConstant; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; + +/** + *

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

+ * + * @author Liuxy + * @since 2025-12-29 + */ +@Component(value = "PackagingMiddleTask") +@TaskType("PackagingMiddleTask") +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(); + task.setTask_id(IdUtil.getStringId()); + task.setTask_code(CodeUtil.getNewCode("TASK_CODE")); + task.setTask_status(TaskStatus.CREATE.getCode()); + task.setConfig_code(PackagingMiddleTask.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.setPriority(json.getString("Priority")); + task.setCreate_id(SecurityUtils.getCurrentUserId()); + task.setCreate_name(SecurityUtils.getCurrentNickName()); + task.setCreate_time(DateUtil.now()); + taskService.save(task); + + // 下发任务 + this.sendTaskOne(task.getTask_id()); + return task.getTask_id(); + } + + @Override + public AcsTaskDto sendAcsParam(String taskId) { + SchBaseTask taskDao = taskService.getById(taskId); + + // 组织下发给acs的数据 + AcsTaskDto acsTaskDto = new AcsTaskDto(); + acsTaskDto.setExt_task_id(taskDao.getTask_id()); + acsTaskDto.setTask_code(taskDao.getTask_code()); + acsTaskDto.setStart_device_code(taskDao.getPoint_code1()); + acsTaskDto.setNext_device_code(taskDao.getPoint_code2()); + acsTaskDto.setVehicle_code(taskDao.getVehicle_code()); + acsTaskDto.setPriority(IOSConstant.ONE); + + return acsTaskDto; + } + + @Override + @Transactional + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getByCode(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { + this.finishTask(taskObj); + } + if (status.equals(TaskStatus.CANCELED)) { + this.cancelTask(taskObj); + } + + } + + @Override + @Transactional + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("已完成"); + taskService.updateById(taskObj); + } + + @Override + @Transactional + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + if (!TaskStatus.CREATE.getCode().equals(taskObj.getTask_status())) { + throw new BadRequestException("任务状态必须为生成才能取消任务"); + } + this.cancelTask(taskObj); + + } + + @Transactional(rollbackFor = Exception.class) + public void finishTask(SchBaseTask taskObj) { + // 任务完成 + 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()) + ); + } + } + + @Transactional(rollbackFor = Exception.class) + public void cancelTask(SchBaseTask taskObj) { + // 取消任务 + taskService.update(new LambdaUpdateWrapper() + .set(SchBaseTask::getIs_delete, BaseDataEnum.IS_YES_NOT.code("是")) + .set(SchBaseTask::getTask_status, TaskStatus.CANCELED.getCode()) + .set(SchBaseTask::getRemark, "已取消") + .eq(SchBaseTask::getTask_id, taskObj.getTask_id()) + ); + // 更新任务状态 + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setRemark("已取消"); + taskService.updateById(taskObj); + } + + @Override + public void taskConfirm(String task_code) { + } +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSConstant.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSConstant.java index 267287a..e4cadcc 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSConstant.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSConstant.java @@ -42,6 +42,11 @@ public class IOSConstant { */ public final static String CREATE_TYPE = "1"; + /** + * AGV中间站点位编码 + */ + public final static String AGVZJZ001 = "AGVZJZ001"; + /** * 更新库存状态:加可用(插入数据) */ 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 f0b4497..424a552 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 @@ -118,7 +118,9 @@ public enum IOSEnum { CHECK_DTL_STATUS(MapOf.of("生成", "10", "移库中", "15", "盘点中", "20", "回库中", "30", "完成", "99")), // 区域编码 - REGION_CODE(MapOf.of("出入库区域", "INOUR01", "AGV对接区", "AGVDJ01", "临时储存区", "LSCC01")), + REGION_CODE(MapOf.of("出入库区域", "INOUR01", "AGV对接区", "AGVDJ01", "临时储存区", "LSCC01" + , "外包材区域", "WBCZC01" + )), ;