From ab3b6b47469f89d0be8ba1a83a5304a5b7160977 Mon Sep 17 00:00:00 2001 From: liuxy Date: Mon, 15 Sep 2025 16:37:34 +0800 Subject: [PATCH] =?UTF-8?q?rev=EF=BC=9A=E5=90=88=E7=AE=B1=E7=A7=BB?= =?UTF-8?q?=E5=BA=93=E3=80=81=E6=8B=BC=E7=AE=B1=E7=A7=BB=E5=BA=93=E3=80=81?= =?UTF-8?q?=E5=BA=93=E5=86=85=E7=A7=BB=E5=BA=93=E3=80=81=E7=9B=98=E7=82=B9?= =?UTF-8?q?=E7=A7=BB=E5=BA=93=20=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/util/tasks/CheckBackMoveTask.java | 1 + .../service/util/tasks/CheckMoveTask.java | 24 +- .../util/tasks/CombinedBoxMoveTask.java | 22 +- .../service/util/tasks/InsideMoveTask.java | 30 +- .../service/util/tasks/MoveOutMoveTask.java | 258 ++++++++++++++++++ .../service/util/tasks/PieceBoxMoveTask.java | 27 +- .../impl/StIvtCheckmstServiceImpl.java | 138 +++++++++- .../service/impl/StIvtMoveinvServiceImpl.java | 140 +++++++--- 8 files changed, 583 insertions(+), 57 deletions(-) create mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/MoveOutMoveTask.java diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CheckBackMoveTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CheckBackMoveTask.java index 2a13328..5070463 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CheckBackMoveTask.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CheckBackMoveTask.java @@ -262,6 +262,7 @@ public class CheckBackMoveTask extends AbstractTask { new UpdateWrapper().lambda() .eq(Structattr::getStruct_code, taskObj.getPoint_code2()) .set(Structattr::getStoragevehicle_code, taskObj.getVehicle_code()) + .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) ); // 更新盘点明细状态 diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CheckMoveTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CheckMoveTask.java index c673d84..1ede2b6 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CheckMoveTask.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CheckMoveTask.java @@ -25,6 +25,7 @@ import org.nl.wms.warehouse_management.enums.IOSEnum; import org.nl.wms.warehouse_management.service.*; import org.nl.wms.warehouse_management.service.dao.StIvtCheckdtl; import org.nl.wms.warehouse_management.service.dao.StIvtMoveinvdtl; +import org.nl.wms.warehouse_management.service.dao.StIvtPieceBoxDtl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @@ -163,9 +164,6 @@ public class CheckMoveTask extends AbstractTask { if (ObjectUtil.isEmpty(taskObj)) { throw new BadRequestException("该任务不存在"); } - if (Integer.parseInt(taskObj.getTask_status()) > Integer.parseInt(TaskStatus.CREATE.getCode())) { - throw new BadRequestException("只能取消生成中的任务!"); - } this.cancelTask(taskObj); } @@ -230,4 +228,24 @@ public class CheckMoveTask extends AbstractTask { public JSONObject resultWeigh(SchBaseTask taskObj) { return null; } + + + /** + * 更新单据货位 + * @param task_id 明细任务标识 + * @param struct_code 更新的货位 + */ + public void updateIosPoint(String task_id, String struct_code) { + Structattr attr = iStructattrService.getByCode(struct_code); + + // 更新盘点明细仓位 + StIvtCheckdtl dtlDao = iStIvtCheckdtlService.getOne( + new QueryWrapper().lambda() + .eq(StIvtCheckdtl::getTask_id, task_id) + ); + + dtlDao.setStruct_code(attr.getStruct_code()); + dtlDao.setSect_code(attr.getSect_code()); + iStIvtCheckdtlService.updateById(dtlDao); + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CombinedBoxMoveTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CombinedBoxMoveTask.java index 24aeb26..be6111e 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CombinedBoxMoveTask.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CombinedBoxMoveTask.java @@ -181,9 +181,6 @@ public class CombinedBoxMoveTask extends AbstractTask { if (ObjectUtil.isEmpty(taskObj)) { throw new BadRequestException("该任务不存在"); } - if (Integer.parseInt(taskObj.getTask_status()) > Integer.parseInt(TaskStatus.CREATE.getCode())) { - throw new BadRequestException("只能取消生成中的任务!"); - } this.cancelTask(taskObj); } @@ -267,4 +264,23 @@ public class CombinedBoxMoveTask extends AbstractTask { public JSONObject resultWeigh(SchBaseTask taskObj) { return null; } + + /** + * 更新单据货位 + * @param task_id 明细任务标识 + * @param struct_code 更新的货位 + */ + public void updateIosPoint(String task_id, String struct_code) { + // 查询移库明细 + StIvtMoveinvdtl dtlDao = iStIvtMoveinvdtlService.getOne( + new QueryWrapper().lambda() + .eq(StIvtMoveinvdtl::getTask_id, task_id) + ); + // 更新移库明细仓位 + Structattr attr = iStructattrService.getByCode(struct_code); + + dtlDao.setTurnout_struct_code(attr.getStruct_code()); + dtlDao.setTurnout_sect_code(attr.getSect_code()); + iStIvtMoveinvdtlService.updateById(dtlDao); + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/InsideMoveTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/InsideMoveTask.java index 5a58b77..8ccab81 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/InsideMoveTask.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/InsideMoveTask.java @@ -8,6 +8,8 @@ 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.service.IStructattrService; +import org.nl.wms.basedata_manage.service.dao.Structattr; 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; @@ -53,6 +55,12 @@ public class InsideMoveTask extends AbstractTask { @Autowired private IStIvtMoveinvdtlService iStIvtMoveinvdtlService; + /** + * 仓位服务 + */ + @Autowired + private IStructattrService iStructattrService; + @Override public String create(JSONObject json) { SchBaseTask task = new SchBaseTask(); @@ -146,9 +154,6 @@ public class InsideMoveTask extends AbstractTask { if (ObjectUtil.isEmpty(taskObj)) { throw new BadRequestException("该任务不存在"); } - if (Integer.parseInt(taskObj.getTask_status()) > Integer.parseInt(TaskStatus.CREATE.getCode())) { - throw new BadRequestException("只能取消生成中的任务!"); - } this.cancelTask(taskObj); } @@ -188,4 +193,23 @@ public class InsideMoveTask extends AbstractTask { taskObj.setTask_status(TaskStatus.CANCELED.getCode()); taskService.updateById(taskObj); } + + /** + * 更新单据货位 + * @param task_id 明细任务标识 + * @param struct_code 更新的货位 + */ + public void updateIosPoint(String task_id, String struct_code) { + // 查询移库明细 + StIvtMoveinvdtl dtlDao = iStIvtMoveinvdtlService.getOne( + new QueryWrapper().lambda() + .eq(StIvtMoveinvdtl::getTask_id, task_id) + ); + // 更新移库明细仓位 + Structattr attr = iStructattrService.getByCode(struct_code); + + dtlDao.setTurnout_struct_code(attr.getStruct_code()); + dtlDao.setTurnout_sect_code(attr.getSect_code()); + iStIvtMoveinvdtlService.updateById(dtlDao); + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/MoveOutMoveTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/MoveOutMoveTask.java new file mode 100644 index 0000000..5e98a69 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/MoveOutMoveTask.java @@ -0,0 +1,258 @@ +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.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.service.IStructattrService; +import org.nl.wms.basedata_manage.service.dao.Structattr; +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.*; +import org.nl.wms.warehouse_management.enums.IOSConstant; +import org.nl.wms.warehouse_management.enums.IOSEnum; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +/** + *

+ * 移库阻挡移库任务类 + *

+ * + * @author Liuxy + * @since 2025-09-15 + */ +@Component(value = "MoveOutMoveTask") +@TaskType("MoveOutMoveTask") +public class MoveOutMoveTask extends AbstractTask { + + /** + * 任务服务类 + */ + @Autowired + private ISchBaseTaskService taskService; + + /** + * 仓位服务 + */ + @Autowired + private IStructattrService iStructattrService; + + /** + * 任务工厂服务 + */ + @Autowired + private TaskFactory taskFactory; + + /** + * 库内移库任务类 + */ + @Autowired + private InsideMoveTask insideMoveTask; + + /** + * 合箱移库任务类 + */ + @Autowired + private CombinedBoxMoveTask combinedBoxMoveTask; + + /** + * 拼箱移库任务类 + */ + @Autowired + private PieceBoxMoveTask pieceBoxMoveTask; + + /** + * 盘点移库任务类 + */ + @Autowired + private CheckMoveTask CheckMoveTask; + + @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(MoveOutMoveTask.class.getSimpleName()); + task.setPoint_code1(json.getString("point_code1")); + task.setPoint_code2(json.getString("point_code2")); + task.setVehicle_code(json.getString("vehicle_code")); + task.setVehicle_code2(json.getString("vehicle_code2")); + task.setGroup_id(json.getString("group_id")); + task.setRequest_param(json.toString()); + task.setPriority(json.getString("Priority")); + task.setIs_wait(json.getString("is_wait")); + 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.setVehicle_type(IOSConstant.ONE); + acsTaskDto.setIs_wait(IOSConstant.ZERO); + acsTaskDto.setTask_type(ACSTaskTypeEnum.CTU_TASK.getCode()); + + acsTaskDto.setPriority(IOSConstant.ONE); + acsTaskDto.setAgv_system_type(IOSConstant.THREE); + acsTaskDto.setIs_get_pause(IOSConstant.ZERO); + acsTaskDto.setIs_put_pause(IOSConstant.ZERO); + + 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("该任务不存在"); + } + this.finishTask(taskObj); + } + + @Override + @Transactional + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.cancelTask(taskObj); + } + + @Override + public void taskConfirm(String task_code) { + } + + @Override + public JSONObject resultWeigh(SchBaseTask taskObj) { + return null; + } + + @Transactional + public void finishTask(SchBaseTask taskObj) { + // 起点货位 + Structattr startStruct = iStructattrService.getByCode(taskObj.getPoint_code1()); + // 终点货位 + Structattr endStruct = iStructattrService.getByCode(taskObj.getPoint_code2()); + + // 更新起点 + iStructattrService.update( + new UpdateWrapper().lambda() + .eq(Structattr::getStruct_code, taskObj.getPoint_code1()) + .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("移出锁")) + .set(Structattr::getStoragevehicle_code, endStruct.getStoragevehicle_code()) + .set(Structattr::getIs_emptyvehicle, + endStruct.getIs_emptyvehicle().equals(IOSConstant.IS_DELETE_YES) ? IOSConstant.IS_DELETE_YES + : IOSConstant.IS_DELETE_NO + ) + ); + + // 更新终点 + iStructattrService.update( + new UpdateWrapper().lambda() + .eq(Structattr::getStruct_code, taskObj.getPoint_code2()) + .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) + .set(Structattr::getStoragevehicle_code, startStruct.getStoragevehicle_code()) + .set(Structattr::getIs_emptyvehicle, + startStruct.getIs_emptyvehicle().equals(IOSConstant.IS_DELETE_YES) ? IOSConstant.IS_DELETE_YES + : IOSConstant.IS_DELETE_NO + ) + ); + + // 更新任务状态 + taskObj.setRemark("已完成"); + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskService.updateById(taskObj); + + // 更新源单据货位 + SchBaseTask moveIosTask = taskService.getById(taskObj.getContact_task()); + if (moveIosTask.getConfig_code().equals(IOSEnum.MOVE_CONFIG_CODE.code("2001"))) { + // 库内移库 + insideMoveTask.updateIosPoint(moveIosTask.getTask_id(), startStruct.getStruct_code()); + } else if (moveIosTask.getConfig_code().equals(IOSEnum.MOVE_CONFIG_CODE.code("2002"))) { + // 合箱移库 + combinedBoxMoveTask.updateIosPoint(moveIosTask.getTask_id(), startStruct.getStruct_code()); + } else if (moveIosTask.getConfig_code().equals(IOSEnum.MOVE_CONFIG_CODE.code("2003"))) { + // 拼箱移库 + pieceBoxMoveTask.updateIosPoint(moveIosTask.getTask_id(), startStruct.getStruct_code()); + } else if (moveIosTask.getConfig_code().equals(IOSEnum.MOVE_CONFIG_CODE.code("2004"))) { + // 盘点移库 + CheckMoveTask.updateIosPoint(moveIosTask.getTask_id(), startStruct.getStruct_code()); + } + } + + @Transactional + public void cancelTask(SchBaseTask taskObj) { + // 根据任务类型取消移库单移库任务 + SchBaseTask moveIosTask = taskService.getById(taskObj.getContact_task()); + AbstractTask task = taskFactory.getTask(moveIosTask.getConfig_code()); + task.cancel(moveIosTask.getTask_code()); + + // 更新起点 + iStructattrService.update( + new UpdateWrapper().lambda() + .eq(Structattr::getStruct_code, taskObj.getPoint_code1()) + .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) + ); + // 更新终点 + iStructattrService.update( + new UpdateWrapper().lambda() + .eq(Structattr::getStruct_code, taskObj.getPoint_code2()) + .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) + ); + + // 更新当前任务状态 + taskObj.setRemark("已取消"); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskService.updateById(taskObj); + } +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PieceBoxMoveTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PieceBoxMoveTask.java index d7b98ae..873224f 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PieceBoxMoveTask.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PieceBoxMoveTask.java @@ -184,9 +184,6 @@ public class PieceBoxMoveTask extends AbstractTask { if (ObjectUtil.isEmpty(taskObj)) { throw new BadRequestException("该任务不存在"); } - if (Integer.parseInt(taskObj.getTask_status()) > Integer.parseInt(TaskStatus.CREATE.getCode())) { - throw new BadRequestException("只能取消生成中的任务!"); - } this.cancelTask(taskObj); } @@ -272,4 +269,28 @@ public class PieceBoxMoveTask extends AbstractTask { public JSONObject resultWeigh(SchBaseTask taskObj) { return null; } + + /** + * 更新单据货位 + * @param task_id 明细任务标识 + * @param struct_code 更新的货位 + */ + public void updateIosPoint(String task_id, String struct_code) { + // 查询移库明细 + StIvtMoveinvdtl dtlDao = iStIvtMoveinvdtlService.getOne( + new QueryWrapper().lambda() + .eq(StIvtMoveinvdtl::getTask_id, task_id) + ); + // 更新移库明细仓位 + Structattr attr = iStructattrService.getByCode(struct_code); + + dtlDao.setTurnout_struct_code(attr.getStruct_code()); + dtlDao.setTurnout_sect_code(attr.getSect_code()); + iStIvtMoveinvdtlService.updateById(dtlDao); + + // 更新拼箱明细仓位 + StIvtPieceBoxDtl boxDtlDao = iStIvtPieceBoxDtlService.getById(dtlDao.getSource_bill_code()); + boxDtlDao.setStruct_code(struct_code); + iStIvtPieceBoxDtlService.updateById(boxDtlDao); + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/StIvtCheckmstServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/StIvtCheckmstServiceImpl.java index 158f82b..e044cb8 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/StIvtCheckmstServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/StIvtCheckmstServiceImpl.java @@ -16,8 +16,13 @@ import org.nl.common.utils.CodeUtil; import org.nl.common.utils.IdUtil; import org.nl.common.utils.SecurityUtils; import org.nl.wms.basedata_manage.enums.BaseDataEnum; +import org.nl.wms.basedata_manage.service.IStructattrService; +import org.nl.wms.basedata_manage.service.dao.Structattr; +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.tasks.CheckBackMoveTask; import org.nl.wms.sch_manage.service.util.tasks.CheckMoveTask; +import org.nl.wms.sch_manage.service.util.tasks.MoveOutMoveTask; import org.nl.wms.warehouse_management.enums.IOSConstant; import org.nl.wms.warehouse_management.enums.IOSEnum; import org.nl.wms.warehouse_management.service.IMdPbGroupplateService; @@ -72,6 +77,24 @@ public class StIvtCheckmstServiceImpl extends ServiceImpl queryAll(Map whereJson, PageQuery page) { String check_code = MapUtil.getStr(whereJson, "check_code"); @@ -156,7 +179,7 @@ public class StIvtCheckmstServiceImpl extends ServiceImpl dtlDaoList = new ArrayList<>(); dtlDaoList.add(dtlDao); - iStIvtCheckdtlService.createMore(dtlDaoList,dtlDao.getCheck_id()); + iStIvtCheckdtlService.createMore(dtlDaoList, dtlDao.getCheck_id()); // 更新组盘记录表 iMdPbGroupplateService.update( new UpdateWrapper().lambda() - .set(GroupPlate::getQty, dtlDao.getFac_qty()) - .eq(GroupPlate::getMaterial_id, dtlDao.getMaterial_id()) - .eq(GroupPlate::getStoragevehicle_code, dtlDao.getStoragevehicle_code()) - .eq(GroupPlate::getPcsn, dtlDao.getPcsn()) - .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")) + .set(GroupPlate::getQty, dtlDao.getFac_qty()) + .eq(GroupPlate::getMaterial_id, dtlDao.getMaterial_id()) + .eq(GroupPlate::getStoragevehicle_code, dtlDao.getStoragevehicle_code()) + .eq(GroupPlate::getPcsn, dtlDao.getPcsn()) + .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")) ); // 更新明细 @@ -282,10 +305,24 @@ public class StIvtCheckmstServiceImpl extends ServiceImpl 1) { + throw new BadRequestException("当前CTU只支持单条盘点移库任务,请保证盘点单只有一条明细!"); + } + // 生成盘点移库任务 for (StIvtCheckdtl dtlDao : dtlDaoList) { + // 锁定盘点货位 + iStructattrService.update( + new UpdateWrapper().lambda() + .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("移出锁")) + .eq(Structattr::getStruct_code, dtlDao.getStruct_code()) + ); + + // 判断是否阻挡 + JSONObject result = checkMove(dtlDao); + JSONObject jsonTask = new JSONObject(); - jsonTask.put("point_code1", dtlDao.getStruct_code()); + jsonTask.put("point_code1", result.getString("out_point")); jsonTask.put("point_code2", IOSConstant.CZW_POINT); jsonTask.put("vehicle_code", dtlDao.getStoragevehicle_code()); String task_id = checkMoveTask.create(jsonTask); @@ -293,7 +330,92 @@ public class StIvtCheckmstServiceImpl extends ServiceImpl().lambda() + .set(SchBaseTask::getContact_task, task_id) + .eq(SchBaseTask::getTask_id, result.getString("task_id")) + ); + } } iStIvtCheckdtlService.updateBatchById(dtlDaoList); } + + /** + * 判断是否浅货位阻挡移库 + * + * @param dtlDao 移出货位 + * @return JSONObject { + * out_point: 移库单移出货位 + * task_id: 移库阻挡移库任务标识 + * } + */ + public JSONObject checkMove(StIvtCheckdtl dtlDao) { + JSONObject result = new JSONObject(); + + // 查询移出货位 + Structattr outAttr = iStructattrService.getByCode(dtlDao.getStruct_code()); + // 判断移出货位是深货位还是浅货位 + if (outAttr.getPlacement_type().equals(IOSEnum.PLACEMENT_TYPE.code("浅货位"))) { + result.put("out_point", outAttr.getStruct_code()); + return result; + } + + // 查询对应的浅货位 + Structattr shallowAttr = iStructattrService.getOne( + new QueryWrapper().lambda() + .eq(Structattr::getBlock_num, outAttr.getBlock_num()) + .eq(Structattr::getCol_num, outAttr.getCol_num()) + .eq(Structattr::getLayer_num, outAttr.getLayer_num()) + .eq(Structattr::getPlacement_type, IOSEnum.PLACEMENT_TYPE.code("浅货位")) + ); + if (ObjectUtil.isEmpty(shallowAttr)) { + throw new BadRequestException("仓位【" + outAttr.getStruct_code() + "】对应的浅货位不存在,请检查数据!"); + } + + // 判断浅货位是否空位 + if (ObjectUtil.isEmpty(shallowAttr.getStoragevehicle_code())) { + // 浅货位空位 + if (shallowAttr.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { + result.put("out_point", outAttr.getStruct_code()); + return result; + } else { + throw new BadRequestException("当前浅货位被锁定或有正在入库的任务,请稍后在试!【" + shallowAttr.getStruct_code() + "】"); + } + } + + // 浅货位有货 + if (shallowAttr.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { + // 有货未锁定生成移库任务 + JSONObject jsonTask = new JSONObject(); + jsonTask.put("point_code1", shallowAttr.getStruct_code()); + jsonTask.put("point_code2", outAttr.getStruct_code()); + jsonTask.put("vehicle_code", shallowAttr.getStoragevehicle_code()); + jsonTask.put("vehicle_code2", outAttr.getStoragevehicle_code()); + + String task_id = moveOutMoveTask.create(jsonTask); + result.put("out_point", shallowAttr.getStruct_code()); + result.put("task_id", task_id); + + // 锁定起点 + iStructattrService.update( + new UpdateWrapper().lambda() + .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("移出锁")) + .eq(Structattr::getStruct_code, jsonTask.getString("point_code1")) + ); + // 锁定终点 + iStructattrService.update( + new UpdateWrapper().lambda() + .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("移入锁")) + .eq(Structattr::getStruct_code, jsonTask.getString("point_code2")) + ); + } else { + // 有货锁定 + throw new BadRequestException("当前浅货位被锁定或有正在出库的任务,请稍后在试!【" + shallowAttr.getStruct_code() + "】"); + } + + return result; + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/StIvtMoveinvServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/StIvtMoveinvServiceImpl.java index 59226b2..bc77bbf 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/StIvtMoveinvServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/StIvtMoveinvServiceImpl.java @@ -13,7 +13,6 @@ import org.nl.common.exception.BadRequestException; import org.nl.common.utils.CodeUtil; import org.nl.common.utils.IdUtil; import org.nl.common.utils.SecurityUtils; -import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService; import org.nl.wms.basedata_manage.service.IStructattrService; import org.nl.wms.basedata_manage.service.dao.Structattr; import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper; @@ -22,6 +21,7 @@ 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.TaskFactory; +import org.nl.wms.sch_manage.service.util.tasks.MoveOutMoveTask; import org.nl.wms.warehouse_management.enums.IOSConstant; import org.nl.wms.warehouse_management.enums.IOSEnum; import org.nl.wms.warehouse_management.service.IStIvtMoveinvService; @@ -63,12 +63,6 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl queryAll(Map whereJson, PageQuery page) { return this.baseMapper.queryAllByPage(new Page<>(page.getPage() + 1, page.getSize()), @@ -238,7 +238,7 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl().lambda() .eq(Structattr::getStruct_code, dtlDao.getTurnin_struct_code()) .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) - .set(Structattr::getIs_emptyvehicle,IOSConstant.IS_DELETE_NO) + .set(Structattr::getIs_emptyvehicle, IOSConstant.IS_DELETE_NO) ); } @@ -286,33 +286,7 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl dtlList = iStIvtMoveinvdtlService.list( - new QueryWrapper().lambda() - .eq(StIvtMoveinvdtl::getMoveinv_id, dao.getMoveinv_id()) - ); - - AbstractTask task = taskFactory.getTask(IOSEnum.MOVE_CONFIG_CODE.code(mstDao.getBill_type())); - for (StIvtMoveinvdtl dtlDao : dtlList) { - JSONObject jsonTask = new JSONObject(); - jsonTask.put("point_code1", dtlDao.getTurnout_struct_code()); - jsonTask.put("point_code2", dtlDao.getTurnin_struct_code()); - jsonTask.put("vehicle_code", dtlDao.getStoragevehicle_code()); - jsonTask.put("vehicle_code2", dtlDao.getStoragevehicle_code2()); - String task_id = task.create(jsonTask); - - // 更新明细任务标识 - dtlDao.setTask_id(task_id); - } - iStIvtMoveinvdtlService.updateBatchById(dtlList); - - // 更新主表状态为提交 - dao.setBill_status(IOSEnum.MOVE_MST_STATUS.code("提交")); - this.updateById(dao); + this.sendOneTask(dao); } @Override @@ -331,15 +305,26 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl().lambda() + .set(SchBaseTask::getContact_task, task_id) + .eq(SchBaseTask::getTask_id, result.getString("task_id")) + ); + } } iStIvtMoveinvdtlService.updateBatchById(dtlList); @@ -350,6 +335,87 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl().lambda() + .eq(Structattr::getBlock_num, outAttr.getBlock_num()) + .eq(Structattr::getCol_num, outAttr.getCol_num()) + .eq(Structattr::getLayer_num, outAttr.getLayer_num()) + .eq(Structattr::getPlacement_type, IOSEnum.PLACEMENT_TYPE.code("浅货位")) + ); + if (ObjectUtil.isEmpty(shallowAttr)) { + throw new BadRequestException("仓位【" + outAttr.getStruct_code() + "】对应的浅货位不存在,请检查数据!"); + } + + // 判断浅货位是否空位 + if (ObjectUtil.isEmpty(shallowAttr.getStoragevehicle_code())) { + // 浅货位空位 + if (shallowAttr.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { + result.put("out_point",outAttr.getStruct_code()); + return result; + } else { + throw new BadRequestException("当前浅货位被锁定或有正在入库的任务,请稍后在试!【"+shallowAttr.getStruct_code()+"】"); + } + } + + // 浅货位有货 + if (shallowAttr.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { + // 有货未锁定生成移库任务 + JSONObject jsonTask = new JSONObject(); + jsonTask.put("point_code1", shallowAttr.getStruct_code()); + jsonTask.put("point_code2", outAttr.getStruct_code()); + jsonTask.put("vehicle_code", shallowAttr.getStoragevehicle_code()); + jsonTask.put("vehicle_code2", outAttr.getStoragevehicle_code()); + + // 锁定起点 + iStructattrService.update( + new UpdateWrapper().lambda() + .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("移出锁")) + .eq(Structattr::getStruct_code, jsonTask.getString("point_code1")) + ); + // 锁定终点 + iStructattrService.update( + new UpdateWrapper().lambda() + .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("移入锁")) + .eq(Structattr::getStruct_code, jsonTask.getString("point_code2")) + ); + + String task_id = moveOutMoveTask.create(jsonTask); + result.put("out_point",shallowAttr.getStruct_code()); + result.put("task_id",task_id); + } else { + // 判断是否是当前移库单的移库 + if (shallowAttr.getStruct_code().equals(dtlDao.getTurnin_struct_code())) { + result.put("out_point",outAttr.getStruct_code()); + } else { + // 有货锁定 + throw new BadRequestException("当前浅货位被锁定或有正在出库的任务,请稍后在试!【"+shallowAttr.getStruct_code()+"】"); + } + } + + return result; + } + @Override public void updateMstStatus(String moveinv_id) { StIvtMoveinv mstDao = this.getById(moveinv_id);