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 new file mode 100644 index 0000000..39c55de --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CheckBackMoveTask.java @@ -0,0 +1,227 @@ +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.query.QueryWrapper; +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.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.nl.wms.warehouse_management.enums.IOSEnum; +import org.nl.wms.warehouse_management.service.IStIvtCheckdtlService; +import org.nl.wms.warehouse_management.service.IStIvtCheckmstService; +import org.nl.wms.warehouse_management.service.dao.StIvtCheckdtl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +/** + *

+ * 盘点回库移库任务类 + *

+ * + * @author Liuxy + * @since 2025-08-28 + */ +@Component(value = "CheckBackMoveTask") +@TaskType("CheckBackMoveTask") +public class CheckBackMoveTask extends AbstractTask { + + /** + * 任务服务类 + */ + @Autowired + private ISchBaseTaskService taskService; + + /** + * 仓位服务 + */ + @Autowired + private IStructattrService iStructattrService; + + /** + * 点位服务 + */ + @Autowired + private ISchBasePointService iSchBasePointService; + + /** + * 盘点主表服务 + */ + @Autowired + private IStIvtCheckmstService iStIvtCheckmstService; + + /** + * 盘点明细服务 + */ + @Autowired + private IStIvtCheckdtlService iStIvtCheckdtlService; + + @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(CheckBackMoveTask.class.getSimpleName()); + task.setPoint_code1(json.getString("point_code1")); + task.setPoint_code2(json.getString("point_code2")); + task.setVehicle_code(json.getString("vehicle_code")); + task.setContact_task(json.getString("contact_task")); + task.setGroup_id(json.getString("group_id")); + task.setRequest_param(json.toString()); + 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.setPriority(taskDao.getPriority()); + acsTaskDto.setVehicle_code(taskDao.getVehicle_code()); + acsTaskDto.setTask_type("1"); + return acsTaskDto; + } + + @Override + 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 + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj); + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + if (Integer.parseInt(taskObj.getTask_status()) > Integer.parseInt(TaskStatus.CREATE.getCode())) { + throw new BadRequestException("只能取消生成中的任务!"); + } + this.cancelTask(taskObj); + } + + @Transactional + public void finishTask(SchBaseTask taskObj) { + // 完成任务 + this.taskConfirm(taskObj.getTask_code()); + // 更新任务状态 + taskObj.setRemark("已完成"); + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskService.updateById(taskObj); + } + + @Transactional + public void cancelTask(SchBaseTask taskObj) { + // 查询明细 + SchBaseTask moveTask = taskService.getById(taskObj.getContact_task()); + StIvtCheckdtl dtlDao = iStIvtCheckdtlService.getOne( + new QueryWrapper().lambda() + .eq(StIvtCheckdtl::getTask_id, moveTask.getTask_id()) + ); + // 更新盘点明细状态 + + dtlDao.setStatus(IOSEnum.CHECK_DTL_STATUS.code("盘点中") ); + dtlDao.setCheck_result(IOSConstant.ZERO); + dtlDao.setIs_down(IOSConstant.ZERO); + dtlDao.setCheck_optid(SecurityUtils.getCurrentUserId()); + dtlDao.setCheck_optname(SecurityUtils.getCurrentNickName()); + dtlDao.setCheck_optname(DateUtil.now()); + iStIvtCheckdtlService.updateById(dtlDao); + + // 更新主表状态 + iStIvtCheckmstService.updateMst(dtlDao.getCheck_id()); + + // 更新任务状态 + taskObj.setRemark("已取消"); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskService.updateById(taskObj); + } + + @Override + public void taskConfirm(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + SchBaseTask moveTask = taskService.getById(taskObj.getContact_task()); + // 更新起点 + iSchBasePointService.update( + new UpdateWrapper().lambda() + .set(SchBasePoint::getVehicle_code, null) + .set(SchBasePoint::getIng_task_code, null) + .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位")) + .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1()) + ); + // 更新终点 + iStructattrService.update( + new UpdateWrapper().lambda() + .eq(Structattr::getStruct_code, taskObj.getPoint_code2()) + .set(Structattr::getStoragevehicle_code, taskObj.getVehicle_code()) + ); + + // 更新盘点明细状态 + StIvtCheckdtl dtlDao = iStIvtCheckdtlService.getOne( + new QueryWrapper().lambda() + .eq(StIvtCheckdtl::getTask_id, moveTask.getTask_id()) + ); + dtlDao.setStatus(IOSEnum.CHECK_DTL_STATUS.code("完成")); + iStIvtCheckdtlService.updateById(dtlDao); + + // 更新主表状态 + iStIvtCheckmstService.updateMst(dtlDao.getCheck_id()); + + } +} 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 new file mode 100644 index 0000000..c5b5352 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CheckMoveTask.java @@ -0,0 +1,213 @@ +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.query.QueryWrapper; +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.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.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.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +/** + *

+ * 盘点移库任务类 + *

+ * + * @author Liuxy + * @since 2025-08-28 + */ +@Component(value = "CheckMoveTask") +@TaskType("CheckMoveTask") +public class CheckMoveTask extends AbstractTask { + + /** + * 任务服务类 + */ + @Autowired + private ISchBaseTaskService taskService; + + /** + * 仓位服务 + */ + @Autowired + private IStructattrService iStructattrService; + + /** + * 点位服务 + */ + @Autowired + private ISchBasePointService iSchBasePointService; + + /** + * 盘点主表服务 + */ + @Autowired + private IStIvtCheckmstService iStIvtCheckmstService; + + /** + * 盘点明细服务 + */ + @Autowired + private IStIvtCheckdtlService iStIvtCheckdtlService; + + @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(CheckMoveTask.class.getSimpleName()); + task.setPoint_code1(json.getString("point_code1")); + task.setPoint_code2(json.getString("point_code2")); + task.setVehicle_code(json.getString("vehicle_code")); + task.setGroup_id(json.getString("group_id")); + task.setRequest_param(json.toString()); + 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.setPriority(taskDao.getPriority()); + acsTaskDto.setVehicle_code(taskDao.getVehicle_code()); + acsTaskDto.setTask_type("1"); + return acsTaskDto; + } + + @Override + 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 + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj); + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + if (Integer.parseInt(taskObj.getTask_status()) > Integer.parseInt(TaskStatus.CREATE.getCode())) { + throw new BadRequestException("只能取消生成中的任务!"); + } + this.cancelTask(taskObj); + } + + @Transactional + public void finishTask(SchBaseTask taskObj) { + // 完成任务 + this.taskConfirm(taskObj.getTask_code()); + // 更新任务状态 + taskObj.setRemark("已完成"); + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskService.updateById(taskObj); + } + + @Transactional + public void cancelTask(SchBaseTask taskObj) { + // 更新盘点明细状态 + iStIvtCheckdtlService.update( + new UpdateWrapper().lambda() + .set(StIvtCheckdtl::getStatus, IOSEnum.CHECK_DTL_STATUS.code("生成") ) + .set(StIvtCheckdtl::getTask_id, "") + .eq(StIvtCheckdtl::getTask_id, taskObj.getTask_id()) + ); + + // 更新任务状态 + taskObj.setRemark("已取消"); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskService.updateById(taskObj); + } + + @Override + public void taskConfirm(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + // 更新起点 + iStructattrService.update( + new UpdateWrapper().lambda() + .eq(Structattr::getStruct_code, taskObj.getPoint_code1()) + .set(Structattr::getStoragevehicle_code, null) + ); + // 更新终点 + iSchBasePointService.update( + new UpdateWrapper().lambda() + .set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code()) + .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有箱有料")) + .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2()) + .set(SchBasePoint::getIng_task_code, taskObj.getTask_id()) + ); + + // 更新盘点明细状态 + StIvtCheckdtl dtlDao = iStIvtCheckdtlService.getOne( + new QueryWrapper().lambda() + .eq(StIvtCheckdtl::getTask_id, taskObj.getTask_id()) + ); + dtlDao.setStatus(IOSEnum.CHECK_DTL_STATUS.code("盘点中")); + iStIvtCheckdtlService.updateById(dtlDao); + + // 更新主表状态 + iStIvtCheckmstService.updateMst(dtlDao.getCheck_id()); + + } +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/controller/CheckController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/controller/CheckController.java index 1d58b2c..5aeddec 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/controller/CheckController.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/controller/CheckController.java @@ -7,6 +7,7 @@ import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; import org.nl.common.logging.annotation.Log; import org.nl.wms.warehouse_management.service.IStIvtCheckmstService; +import org.nl.wms.warehouse_management.service.dao.StIvtCheckdtl; import org.nl.wms.warehouse_management.service.dto.CheckInsertDto; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -64,13 +65,20 @@ public class CheckController { @GetMapping("/getDtl") @Log("获取明细") public ResponseEntity getDtl(@RequestParam Map whereJson) { - return new ResponseEntity<>(iStIvtCheckmstService.getDtl(whereJson),HttpStatus.OK); + return new ResponseEntity<>(iStIvtCheckmstService.getDtl(whereJson), HttpStatus.OK); } - @PostMapping("/saveCheck") - @Log("保存盘点") - public ResponseEntity saveCheck(@RequestBody CheckInsertDto dto) { - iStIvtCheckmstService.saveCheck(dto); + @PostMapping("/dtlCheckConfirm") + @Log("明细盘点确认") + public ResponseEntity dtlCheckConfirm(@RequestBody StIvtCheckdtl dao) { + iStIvtCheckmstService.dtlCheckConfirm(dao); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/sendMoveTask") + @Log("下发移库任务") + public ResponseEntity sendMoveTask(@RequestBody CheckInsertDto dto) { + iStIvtCheckmstService.sendMoveTask(dto); return new ResponseEntity<>(HttpStatus.OK); } 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 13e6a9c..a16d4e7 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 @@ -52,7 +52,7 @@ public enum IOSEnum { // 移库任务配置类编码 MOVE_CONFIG_CODE(MapOf.of("2001","InsideMoveTask", "2002", "CombinedBoxMoveTask", - "2003", "PieceBoxMoveTask", "2004", "2004" + "2003", "PieceBoxMoveTask", "CheckMoveTask", "2004" )), //入库分配明细状态 @@ -106,7 +106,7 @@ public enum IOSEnum { CHECK_MST_STATUS(MapOf.of("生成", "10", "盘点中", "20", "完成", "99")), // 盘点明细状态 - CHECK_DTL_STATUS(MapOf.of("生成", "10", "盘点中", "20", "已盘点", "30", "完成", "99")), + CHECK_DTL_STATUS(MapOf.of("生成", "10", "移库中", "15", "盘点中", "20", "回库中", "30", "完成", "99")), // 拼箱主表状态 PIECE_MST_STATUS(MapOf.of("生成", "10", "拼箱中", "20", "完成", "99")), diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/IStIvtCheckmstService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/IStIvtCheckmstService.java index 80a2c56..f182b61 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/IStIvtCheckmstService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/IStIvtCheckmstService.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import org.nl.common.domain.query.PageQuery; +import org.nl.wms.warehouse_management.service.dao.StIvtCheckdtl; import org.nl.wms.warehouse_management.service.dao.StIvtCheckmst; import org.nl.wms.warehouse_management.service.dto.CheckInsertDto; @@ -56,10 +57,10 @@ public interface IStIvtCheckmstService extends IService { List getDtl(Map whereJson); /** - * 保存盘点单 - * @param dto 新增修改dto实体类 + * 明细盘点确认 + * @param dao 明细实体类 */ - void saveCheck(CheckInsertDto dto); + void dtlCheckConfirm(StIvtCheckdtl dao); /** * 确认盘点 @@ -72,4 +73,11 @@ public interface IStIvtCheckmstService extends IService { * @param check_id 主表id */ void updateMst(String check_id); + + /** + * 下发移库任务 + * @param dto 实体类dto + */ + void sendMoveTask(CheckInsertDto dto); + } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/StIvtCheckdtl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/StIvtCheckdtl.java index e50fb0b..3785c94 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/StIvtCheckdtl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/StIvtCheckdtl.java @@ -100,10 +100,15 @@ public class StIvtCheckdtl implements Serializable { private BigDecimal fac_qty; /** - * 盘点结果 + * 盘点结果 1-正常 2-异常 */ private String check_result; + /** + * 任务标识 + */ + private String task_id; + /** * 盘点人 */ diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/StIvtCheckmst.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/StIvtCheckmst.java index 442a58c..49e5b14 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/StIvtCheckmst.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/StIvtCheckmst.java @@ -114,6 +114,11 @@ public class StIvtCheckmst implements Serializable { */ private String status; + /** + * 是否异常 + */ + private String is_nok; + /** * 是否删除 */ diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/StIvtCheckdtlMapper.xml b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/StIvtCheckdtlMapper.xml index e65bfe8..461315d 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/StIvtCheckdtlMapper.xml +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/StIvtCheckdtlMapper.xml @@ -8,13 +8,21 @@ material.material_code, material.material_name, sect.sect_name, - attr.struct_name + attr.struct_name, + task.task_code, + ( + CASE + WHEN dtl.status > '20' THEN true + ELSE false + END + ) AS edit FROM st_ivt_checkdtl dtl LEFT JOIN st_ivt_checkmst ios ON ios.check_id = dtl.check_id LEFT JOIN md_me_materialbase material ON material.material_id = dtl.material_id LEFT JOIN st_ivt_sectattr sect ON sect.sect_code = dtl.sect_code LEFT JOIN st_ivt_structattr attr ON attr.struct_code = dtl.struct_code + LEFT JOIN sch_base_task task ON task.task_id = dtl.task_id ios.is_delete = '0' 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 5ca87ce..300afb2 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 @@ -11,14 +11,19 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.nl.common.domain.query.PageQuery; +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.enums.BaseDataEnum; +import org.nl.wms.sch_manage.service.util.tasks.CheckBackMoveTask; +import org.nl.wms.sch_manage.service.util.tasks.CheckMoveTask; 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.IStIvtCheckdtlService; import org.nl.wms.warehouse_management.service.IStIvtCheckmstService; +import org.nl.wms.warehouse_management.service.dao.GroupPlate; import org.nl.wms.warehouse_management.service.dao.StIvtCheckdtl; import org.nl.wms.warehouse_management.service.dao.StIvtCheckmst; import org.nl.wms.warehouse_management.service.dao.mapper.StIvtCheckmstMapper; @@ -27,6 +32,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; @@ -42,9 +48,30 @@ import java.util.Set; @Service public class StIvtCheckmstServiceImpl extends ServiceImpl implements IStIvtCheckmstService { + /** + * 盘点明细服务 + */ @Autowired private IStIvtCheckdtlService iStIvtCheckdtlService; + /** + * 盘点移库任务类服务 + */ + @Autowired + private CheckMoveTask checkMoveTask; + + /** + * 盘点回库任务类服务 + */ + @Autowired + private CheckBackMoveTask checkBackMoveTask; + + /** + * 组盘记录服务 + */ + @Autowired + private IMdPbGroupplateService iMdPbGroupplateService; + @Override public IPage queryAll(Map whereJson, PageQuery page) { String check_code = MapUtil.getStr(whereJson, "check_code"); @@ -126,23 +153,56 @@ public class StIvtCheckmstServiceImpl extends ServiceImpl dtlDaoList = new ArrayList<>(); + dtlDaoList.add(dtlDao); + 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("入库")) + ); + // 更新明细 - iStIvtCheckdtlService.remove( - new QueryWrapper().lambda() - .eq(StIvtCheckdtl::getCheck_id, mstDao.getCheck_id()) - .ne(StIvtCheckdtl::getStatus, IOSEnum.CHECK_DTL_STATUS.code("完成")) - ); - iStIvtCheckdtlService.createCheckDtl(dto); - iStIvtCheckdtlService.update( - new UpdateWrapper().lambda() - .eq(StIvtCheckdtl::getCheck_id, dto.getCheck_id()) - .ne(StIvtCheckdtl::getStatus, IOSEnum.CHECK_DTL_STATUS.code("完成")) - .set(StIvtCheckdtl::getStatus, IOSEnum.CHECK_DTL_STATUS.code("盘点中")) - ); + iStIvtCheckdtlService.updateById(dtlDao); + // 更新主表状态 + updateMst(dao.getCheck_id()); } @Override @@ -170,19 +230,66 @@ public class StIvtCheckmstServiceImpl extends ServiceImpl dtlDaoList = iStIvtCheckdtlService.list( new QueryWrapper().lambda() .eq(StIvtCheckdtl::getCheck_id, check_id) ); + + boolean is_create = dtlDaoList.stream() + .allMatch(row -> row.getStatus().equals(IOSEnum.CHECK_DTL_STATUS.code("生成"))); + + boolean is_check = dtlDaoList.stream() + .anyMatch(row -> row.getStatus().equals(IOSEnum.CHECK_DTL_STATUS.code("盘点中"))); + boolean is_confirm = dtlDaoList.stream() .allMatch(row -> row.getStatus().equals(IOSEnum.CHECK_DTL_STATUS.code("完成"))); - mstDao.setStatus(is_confirm ? IOSEnum.CHECK_MST_STATUS.code("完成") : IOSEnum.CHECK_MST_STATUS.code("盘点中")); - mstDao.setConfirm_optid(SecurityUtils.getCurrentUserId()); - mstDao.setConfirm_optname(SecurityUtils.getCurrentNickName()); - mstDao.setConfirm_time(DateUtil.now()); + if (is_create) { + mstDao.setStatus(IOSEnum.CHECK_MST_STATUS.code("生成")); + } else if (is_check) { + mstDao.setStatus(IOSEnum.CHECK_MST_STATUS.code("盘点中")); + } else if (is_confirm) { + mstDao.setStatus(IOSEnum.CHECK_MST_STATUS.code("完成")); + mstDao.setConfirm_optid(SecurityUtils.getCurrentUserId()); + mstDao.setConfirm_optname(SecurityUtils.getCurrentNickName()); + mstDao.setConfirm_time(DateUtil.now()); + } + + // 判断是否异常 + boolean is_result = dtlDaoList.stream() + .filter(row -> ObjectUtil.isNotEmpty(row.getCheck_result())) + .anyMatch(row -> row.getCheck_result().equals(IOSConstant.TWO)); + + mstDao.setIs_nok(is_result ? IOSConstant.TWO : IOSConstant.ONE); this.updateById(mstDao); } + + @Override + @Transactional + public void sendMoveTask(CheckInsertDto dto) { + // 查询所有生成的明细 + List dtlDaoList = iStIvtCheckdtlService.list( + new QueryWrapper().lambda() + .eq(StIvtCheckdtl::getCheck_id, dto.getCheck_id()) + .eq(StIvtCheckdtl::getStatus, IOSEnum.CHECK_DTL_STATUS.code("生成")) + ); + + // 生成盘点移库任务 + for (StIvtCheckdtl dtlDao : dtlDaoList) { + JSONObject jsonTask = new JSONObject(); + jsonTask.put("point_code1", dtlDao.getStruct_code()); + jsonTask.put("point_code2", IOSConstant.CZW_POINT); + jsonTask.put("vehicle_code", dtlDao.getStoragevehicle_code()); + String task_id = checkMoveTask.create(jsonTask); + + // 更新明细 + dtlDao.setTask_id(task_id); + dtlDao.setStatus(IOSEnum.CHECK_DTL_STATUS.code("移库中")); + } + iStIvtCheckdtlService.updateBatchById(dtlDaoList); + } } diff --git a/wms/nladmin-ui/src/views/wms/basedata/group/AddDtl.vue b/wms/nladmin-ui/src/views/wms/basedata/group/AddDtl.vue index 5eff77f..7a2c7df 100644 --- a/wms/nladmin-ui/src/views/wms/basedata/group/AddDtl.vue +++ b/wms/nladmin-ui/src/views/wms/basedata/group/AddDtl.vue @@ -39,7 +39,7 @@ - + diff --git a/wms/nladmin-ui/src/views/wms/basedata/structattr/index.vue b/wms/nladmin-ui/src/views/wms/basedata/structattr/index.vue index 68d85a1..06af75f 100644 --- a/wms/nladmin-ui/src/views/wms/basedata/structattr/index.vue +++ b/wms/nladmin-ui/src/views/wms/basedata/structattr/index.vue @@ -237,13 +237,19 @@ - - + + + + + + + + diff --git a/wms/nladmin-ui/src/views/wms/st/checkbill/AddDialog.vue b/wms/nladmin-ui/src/views/wms/st/checkbill/AddDialog.vue index 77d5ca3..0ce98da 100644 --- a/wms/nladmin-ui/src/views/wms/st/checkbill/AddDialog.vue +++ b/wms/nladmin-ui/src/views/wms/st/checkbill/AddDialog.vue @@ -124,6 +124,7 @@ + @@ -132,9 +133,6 @@ export default { type: Boolean, default: false }, - bussConfig: { - type: Object - }, openParam: { type: Object } @@ -147,6 +145,7 @@ export default { nowrow: null, nowindex: '', storlist: [], + tableData: [], form1: { check_id: '', check_code: '', @@ -168,31 +167,27 @@ export default { dialogShow: { handler(newValue) { this.dialogVisible = newValue + this.form1 = this.openParam } } }, methods: { open() { + this.getDtl() // 查询原材料库的仓库 crudStorattr.getStor({}).then(res => { this.storlist = res }) - check.getDtl({ 'check_id': this.form1.check_id }).then(res => { - this.form1.tableData = res - // 将明细变成不可编辑 - for (let i = 0; i < this.form1.tableData.length; i++) { - const row = this.form1.tableData[i] - row.edit = false - if (row.status > '20') { - row.edit = true - } - this.$set(this.form1.tableData, i, row) - } - }) - this.$forceUpdate() }, close() { - this.$emit('AddChanged') + this.$refs['form1'].resetFields() + this.$emit('update:dialogShow', false) + this.crud.toQuery() + }, + getDtl() { + check.getDtl({ 'check_id': this.form1.check_id }).then(res => { + this.tableData = res + }) }, handleCurrentChange(current) { if (current !== null) { @@ -276,10 +271,6 @@ export default { } } }, - setForm(row) { - this.dialogVisible = true - this.form1 = row - }, bill_statusFormat(row, column) { return this.dict.label.CHECK_DTL_STATUS[row.status] }, @@ -300,29 +291,10 @@ export default { row.edit = !row.edit this.form1.tableData.splice(index, 1, row) // 通过splice 替换数据 触发视图更新 }, - deleteRow(index, rows) { - rows.splice(index, 1) - this.nowindex = '' - this.nowrow = null - this.form1.detail_count = this.form1.tableData.length - }, - saveCheck() { - if (this.form1.tableData.length === 0) { - this.crud.notify('请至少选择一条明细', CRUD.NOTIFICATION_TYPE.INFO) - return false - } - for (let i = 0; i < this.form1.tableData.length; i++) { - if (!this.form1.tableData[i].edit) { - this.crud.notify('尚有未完成编辑的物料明细序号' + (i + 1) + ',请检查!') - return false - } - if (this.form1.tableData[i].fac_qty === '' || this.form1.tableData[i].fac_qty === 0) { - this.crud.notify('盘点数量不能为0序号' + (i + 1) + ',请检查!') - return false - } - } - check.saveCheck(this.form1).then(res => { - this.dialogVisible = false + dtlCheckConfirm(index, row) { + check.dtlCheckConfirm(row).then(res => { + this.crud.notify('操作成功!', CRUD.NOTIFICATION_TYPE.SUCCESS) + this.getDtl() }) } } @@ -330,14 +302,4 @@ export default { diff --git a/wms/nladmin-ui/src/views/wms/st/checkbill/check.js b/wms/nladmin-ui/src/views/wms/st/checkbill/check.js index eb11069..be2f509 100644 --- a/wms/nladmin-ui/src/views/wms/st/checkbill/check.js +++ b/wms/nladmin-ui/src/views/wms/st/checkbill/check.js @@ -46,11 +46,21 @@ export function confirm(data) { data }) } -export function saveCheck(data) { + +export function sendMoveTask(data) { return request({ - url: '/api/check/saveCheck', + url: '/api/check/sendMoveTask', method: 'post', data }) } -export default { add, edit, del, getDtl, getStructIvt, confirm, saveCheck } + +export function dtlCheckConfirm(data) { + return request({ + url: '/api/check/dtlCheckConfirm', + method: 'post', + data + }) +} + +export default { add, edit, del, getDtl, getStructIvt, confirm, sendMoveTask, dtlCheckConfirm } diff --git a/wms/nladmin-ui/src/views/wms/st/checkbill/index.vue b/wms/nladmin-ui/src/views/wms/st/checkbill/index.vue index f8a9f51..955a6ab 100644 --- a/wms/nladmin-ui/src/views/wms/st/checkbill/index.vue +++ b/wms/nladmin-ui/src/views/wms/st/checkbill/index.vue @@ -108,6 +108,17 @@ + + 下发移库 + 盘点 - 确认 - + --> - + @@ -217,7 +228,7 @@ export default { }, mixins: [presenter(), header(), crud()], // 数据字典 - dicts: ['CHECK_BILL_STATUS', 'ST_CREATE_MODE', 'ST_INV_TYPE_CK'], + dicts: ['CHECK_BILL_STATUS', 'ST_CREATE_MODE', 'ST_INV_TYPE_CK', 'check_result'], data() { return { height: document.documentElement.clientHeight - 180 + 'px;', @@ -227,6 +238,8 @@ export default { del: ['admin', 'check:del'] }, check_flag: true, + openParam: null, + openCheck: false, downdtl_flag: true, confirm_flag: true, currentRow: null, @@ -293,11 +306,7 @@ export default { return this.dict.label.ST_CREATE_MODE[row.create_mode] }, is_nokFormat(row) { - if (row.is_nok === '1') { - return '异常' - } else { - return '正常' - } + return this.dict.label.check_result[row.is_nok] }, handleCurrentChange(current) { if (current === null) { @@ -310,9 +319,16 @@ export default { checkboxT(row) { return row.bill_status !== '99' }, + sendMoveTask() { + check.sendMoveTask(this.currentRow).then(res => { + this.crud.notify('操作成功', CRUD.NOTIFICATION_TYPE.SUCCESS) + this.crud.toQuery() + }) + }, checkOpen() { if (this.currentRow !== null) { - this.$refs.child.setForm(this.currentRow) + this.openParam = this.currentRow + this.openCheck = true } }, confirm() {