From df6ab03d4b0723b9c42e0576cbd2fbbbf461dfb9 Mon Sep 17 00:00:00 2001
From: liuxy
Date: Fri, 22 Aug 2025 14:12:55 +0800
Subject: [PATCH] =?UTF-8?q?add:=E5=90=88=E7=AE=B1=E7=AE=A1=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...apper.xml => IStIvtCombinedBoxService.xml} | 0
.../mapper/MdPbStoragevehicleextMapper.java | 8 +
.../mapper/MdPbStoragevehicleextMapper.xml | 64 +++
.../MdPbStoragevehicleextServiceImpl.java | 2 +-
.../service/impl/StructattrServiceImpl.java | 6 +-
...apper.xml => IStIvtCombinedBoxService.xml} | 0
.../service/util/tasks/BackInTask.java | 17 +
.../service/util/tasks/CombinedBoxInTask.java | 228 ++++++++++
.../util/tasks/CombinedBoxMoveTask.java | 265 +++++++++++
.../service/util/tasks/DetainInTask.java | 18 +
.../service/util/tasks/PdaPointTask.java | 9 +-
.../service/util/tasks/SelectBackInTask.java | 16 +
.../ISIvtCombinedBoxController.java | 97 ++++
.../warehouse_management/enums/IOSEnum.java | 9 +-
.../service/IStIvtCombinedBoxService.java | 96 ++++
.../service/IStIvtMoveinvService.java | 6 +
.../service/dao/StIvtCombinedBox.java | 92 ++++
...apper.xml => IStIvtCombinedBoxService.xml} | 0
.../dao/mapper/StIvtCombinedBoxMapper.java | 30 ++
.../dao/mapper/StIvtCombinedBoxMapper.xml | 40 ++
.../service/dto/StIvtCombinedBoxDto.java | 32 ++
.../impl/RawAssistIStorServiceImpl.java | 2 +-
.../impl/StIvtCombinedBoxServiceImpl.java | 425 ++++++++++++++++++
.../service/impl/StIvtMoveinvServiceImpl.java | 21 +-
.../impl/StIvtMoveinvdtlServiceImpl.java | 1 +
.../src/views/wms/st/combinedBox/AddDtl.vue | 218 +++++++++
.../views/wms/st/combinedBox/WeighDialog.vue | 178 ++++++++
.../views/wms/st/combinedBox/combinedBox.js | 59 +++
.../src/views/wms/st/combinedBox/index.vue | 356 +++++++++++++++
.../src/views/wms/st/movebill/index.vue | 1 +
30 files changed, 2274 insertions(+), 22 deletions(-)
rename wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/role/dao/mapper/{SysRoleMapper.xml => IStIvtCombinedBoxService.xml} (100%)
rename wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/{SchBaseTaskconfigMapper.xml => IStIvtCombinedBoxService.xml} (100%)
create mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CombinedBoxInTask.java
create mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CombinedBoxMoveTask.java
create mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/controller/ISIvtCombinedBoxController.java
create mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/IStIvtCombinedBoxService.java
create mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/StIvtCombinedBox.java
rename wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/{IOStorInvDtlMapper.xml => IStIvtCombinedBoxService.xml} (100%)
create mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/StIvtCombinedBoxMapper.java
create mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/StIvtCombinedBoxMapper.xml
create mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dto/StIvtCombinedBoxDto.java
create mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/StIvtCombinedBoxServiceImpl.java
create mode 100644 wms/nladmin-ui/src/views/wms/st/combinedBox/AddDtl.vue
create mode 100644 wms/nladmin-ui/src/views/wms/st/combinedBox/WeighDialog.vue
create mode 100644 wms/nladmin-ui/src/views/wms/st/combinedBox/combinedBox.js
create mode 100644 wms/nladmin-ui/src/views/wms/st/combinedBox/index.vue
diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/role/dao/mapper/SysRoleMapper.xml b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/role/dao/mapper/IStIvtCombinedBoxService.xml
similarity index 100%
rename from wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/role/dao/mapper/SysRoleMapper.xml
rename to wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/role/dao/mapper/IStIvtCombinedBoxService.xml
diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.java
index 1ff38fe..72d72e6 100644
--- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.java
+++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.java
@@ -94,4 +94,12 @@ public interface MdPbStoragevehicleextMapper extends BaseMapper
*/
List getBigScreenIvt();
+
+ /**
+ * 获取可用库存分页查询
+ * @param page 分页条件
+ * @param whereJson 查询条件
+ * @return IPage
+ */
+ IPage getCanuseIvtQtyAsc(Page page, @Param("param") Map whereJson);
}
diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.xml b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.xml
index 746721a..8072c3d 100644
--- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.xml
+++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.xml
@@ -365,4 +365,68 @@
GROUP BY ext.material_id
ORDER BY canuse_qty DESC
+
+
+
diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdPbStoragevehicleextServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdPbStoragevehicleextServiceImpl.java
index 48ff32b..73f4bb0 100644
--- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdPbStoragevehicleextServiceImpl.java
+++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdPbStoragevehicleextServiceImpl.java
@@ -216,7 +216,7 @@ public class MdPbStoragevehicleextServiceImpl extends ServiceImpl dtlList = new ArrayList<>();
diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java
index 13a6ea9..7e3e648 100644
--- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java
+++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java
@@ -312,8 +312,10 @@ public class StructattrServiceImpl extends ServiceImpl row.getStruct_code().equals(json.getString("struct_code")))
.findFirst().orElse(null);
- attrDao.setLock_type(json.getString("lock_type"));
- this.update(attrDao);
+ if (ObjectUtil.isNotEmpty(attrDao)) {
+ attrDao.setLock_type(json.getString("lock_type"));
+ this.update(attrDao);
+ }
}
}
diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskconfigMapper.xml b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/IStIvtCombinedBoxService.xml
similarity index 100%
rename from wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskconfigMapper.xml
rename to wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/IStIvtCombinedBoxService.xml
diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/BackInTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/BackInTask.java
index 0cc6a11..078cae7 100644
--- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/BackInTask.java
+++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/BackInTask.java
@@ -4,6 +4,7 @@ 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;
@@ -11,7 +12,9 @@ import org.nl.config.IdUtil;
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
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;
@@ -46,6 +49,12 @@ public class BackInTask extends AbstractTask {
@Resource
private IOStorInvDisMapper ioStorInvDisMapper;
+ /**
+ * 点位服务
+ */
+ @Autowired
+ private ISchBasePointService iSchBasePointService;
+
@Override
public String create(JSONObject json) {
SchBaseTask task = new SchBaseTask();
@@ -146,6 +155,14 @@ public class BackInTask extends AbstractTask {
taskObj.setRemark("已完成");
taskService.updateById(taskObj);
rawAssistIStorService.taskFinish(taskObj);
+ // 更新起点
+ iSchBasePointService.update(
+ new UpdateWrapper().lambda()
+ .set(SchBasePoint::getVehicle_code, null)
+ .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位"))
+ .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
+
+ );
}
@Transactional(rollbackFor = Exception.class)
diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CombinedBoxInTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CombinedBoxInTask.java
new file mode 100644
index 0000000..e43aabd
--- /dev/null
+++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CombinedBoxInTask.java
@@ -0,0 +1,228 @@
+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.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.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.IOSEnum;
+import org.nl.wms.warehouse_management.service.IRawAssistIStorService;
+import org.nl.wms.warehouse_management.service.IStIvtCombinedBoxService;
+import org.nl.wms.warehouse_management.service.dao.IOStorInvDis;
+import org.nl.wms.warehouse_management.service.dao.IOStorInvDtl;
+import org.nl.wms.warehouse_management.service.dao.StIvtCombinedBox;
+import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper;
+import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDtlMapper;
+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-08-22
+ */
+@Component(value = "CombinedBoxInTask")
+@TaskType("CombinedBoxInTask")
+public class CombinedBoxInTask extends AbstractTask {
+ @Autowired
+ private ISchBaseTaskService taskService;
+
+ /**
+ * 入库服务
+ */
+ @Resource
+ private IRawAssistIStorService rawAssistIStorService;
+
+ /**
+ * 分配明细mapper
+ */
+ @Resource
+ private IOStorInvDisMapper ioStorInvDisMapper;
+
+ /**
+ * 点位服务
+ */
+ @Autowired
+ private ISchBasePointService iSchBasePointService;
+
+ /**
+ * 合箱记录服务
+ */
+ @Autowired
+ private IStIvtCombinedBoxService iStIvtCombinedBoxService;
+
+ /**
+ * 入库明细服务
+ */
+ @Autowired
+ private IOStorInvDtlMapper ioStorInvDtlMapper;
+
+ @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(CombinedBoxInTask.class.getSimpleName());
+ task.setPoint_code1(json.getString("point_code1"));
+ task.setPoint_code2(json.getString("point_code2"));
+ task.setVehicle_code(json.getString("vehicle_code"));
+ task.setMaterial_id(json.getString("material_id"));
+ task.setMaterial_qty(json.getBigDecimal("material_qty"));
+ task.setGroup_id(json.getString("group_id"));
+ 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.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 (!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);
+ rawAssistIStorService.taskFinish(taskObj);
+ // 更新起点
+ iSchBasePointService.update(
+ new UpdateWrapper().lambda()
+ .set(SchBasePoint::getVehicle_code, null)
+ .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位"))
+ .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
+
+ );
+ this.taskConfirm(taskObj.getTask_code());
+ }
+
+ @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())
+ );
+ //分配表清除任务
+ ioStorInvDisMapper.update(new IOStorInvDis(), new LambdaUpdateWrapper<>(IOStorInvDis.class)
+ .set(IOStorInvDis::getTask_id, null)
+ .set(IOStorInvDis::getPoint_code, null)
+ .set(IOStorInvDis::getIs_issued, 0)
+ .set(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("未生成"))
+ .eq(IOStorInvDis::getTask_id, taskObj.getTask_id())
+ );
+
+ // 更新任务状态
+ taskObj.setTask_status(TaskStatus.CANCELED.getCode());
+ taskObj.setRemark("已取消");
+ taskService.updateById(taskObj);
+ }
+
+ @Override
+ public void taskConfirm(String task_code) {
+ SchBaseTask taskObj = taskService.getByCode(task_code);
+ // 查询分配明细
+ IOStorInvDis disDao = ioStorInvDisMapper.selectOne(
+ new QueryWrapper().lambda()
+ .eq(IOStorInvDis::getTask_id, taskObj.getTask_id())
+ );
+ // 查询明细
+ IOStorInvDtl dtlDao = ioStorInvDtlMapper.selectById(disDao.getIostorinvdtl_id());
+ // 更新合箱记录状态为完成
+ StIvtCombinedBox boxDao = iStIvtCombinedBoxService.getById(dtlDao.getSource_bill_code());
+ boxDao.setStatus(IOSEnum.COMBINED_BOX_STATUS.code("完成"));
+ iStIvtCombinedBoxService.updateById(boxDao);
+ }
+}
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
new file mode 100644
index 0000000..b04c8fb
--- /dev/null
+++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CombinedBoxMoveTask.java
@@ -0,0 +1,265 @@
+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.IMdPbStoragevehicleextService;
+import org.nl.wms.basedata_manage.service.IStructattrService;
+import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleext;
+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.IMdPbGroupplateService;
+import org.nl.wms.warehouse_management.service.IStIvtCombinedBoxService;
+import org.nl.wms.warehouse_management.service.IStIvtMoveinvService;
+import org.nl.wms.warehouse_management.service.IStIvtMoveinvdtlService;
+import org.nl.wms.warehouse_management.service.dao.GroupPlate;
+import org.nl.wms.warehouse_management.service.dao.StIvtCombinedBox;
+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-21
+ */
+@Component(value = "CombinedBoxMoveTask")
+@TaskType("CombinedBoxMoveTask")
+public class CombinedBoxMoveTask extends AbstractTask {
+
+ /**
+ * 任务服务类
+ */
+ @Autowired
+ private ISchBaseTaskService taskService;
+
+ /**
+ * 移库主表服务类
+ */
+ @Autowired
+ private IStIvtMoveinvService iStIvtMoveinvService;
+
+ /**
+ * 移库明细服务类
+ */
+ @Autowired
+ private IStIvtMoveinvdtlService iStIvtMoveinvdtlService;
+
+ /**
+ * 合箱记录服务
+ */
+ @Autowired
+ private IStIvtCombinedBoxService iStIvtCombinedBoxService;
+
+ /**
+ * 仓位服务
+ */
+ @Autowired
+ private IStructattrService iStructattrService;
+
+ /**
+ * 点位服务
+ */
+ @Autowired
+ private ISchBasePointService iSchBasePointService;
+
+ /**
+ * 库存记录服务
+ */
+ @Autowired
+ private IMdPbStoragevehicleextService iMdPbStoragevehicleextService;
+
+ /**
+ * 组盘记录服务
+ */
+ @Autowired
+ private IMdPbGroupplateService iMdPbGroupplateService;
+
+ @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(CombinedBoxMoveTask.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)) {
+ // 更新明细状态
+ iStIvtMoveinvService.executing(taskObj);
+ 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) {
+ // 删除任务
+ StIvtMoveinvdtl dtlDao = iStIvtMoveinvdtlService.getOne(
+ new QueryWrapper().lambda()
+ .eq(StIvtMoveinvdtl::getTask_id, taskObj.getTask_id())
+ );
+ iStIvtMoveinvService.cancelTask(dtlDao);
+ // 更新合箱记录状态
+ StIvtCombinedBox boxDao = iStIvtCombinedBoxService.getById(dtlDao.getSource_bill_code());
+ boxDao.setStatus(IOSEnum.COMBINED_BOX_STATUS.code("生成"));
+ boxDao.setMove_id("");
+ iStIvtCombinedBoxService.updateById(boxDao);
+
+ // 更新任务状态
+ taskObj.setRemark("已取消");
+ taskObj.setTask_status(TaskStatus.CANCELED.getCode());
+ taskService.updateById(taskObj);
+ }
+
+ @Override
+ public void taskConfirm(String task_code) {
+ SchBaseTask taskObj = taskService.getByCode(task_code);
+ StIvtMoveinvdtl dtlDao = iStIvtMoveinvdtlService.getOne(
+ new QueryWrapper().lambda()
+ .eq(StIvtMoveinvdtl::getTask_id, taskObj.getTask_id())
+ );
+
+ // 更新起点
+ iStructattrService.update(
+ new UpdateWrapper().lambda()
+ .eq(Structattr::getStruct_code, taskObj.getPoint_code1())
+ .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
+ .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())
+
+ );
+
+ // 更新移库明细状态
+ dtlDao.setWork_status(IOSEnum.MOVE_DTL_STATUS.code("完成"));
+ iStIvtMoveinvdtlService.updateById(dtlDao);
+ // 更新移库主表状态
+ iStIvtMoveinvService.updateMstStatus(dtlDao.getMoveinv_id());
+
+ // 更新合箱记录状态
+ StIvtCombinedBox boxDao = iStIvtCombinedBoxService.getById(dtlDao.getSource_bill_code());
+ boxDao.setStatus(IOSEnum.COMBINED_BOX_STATUS.code("移库完成"));
+ iStIvtCombinedBoxService.updateById(boxDao);
+
+ // 删除库存记录
+ iMdPbStoragevehicleextService.remove(
+ new QueryWrapper().lambda()
+ .eq(MdPbStoragevehicleext::getStoragevehicle_code, dtlDao.getStoragevehicle_code())
+ .eq(MdPbStoragevehicleext::getPcsn, dtlDao.getPcsn())
+ .eq(MdPbStoragevehicleext::getMaterial_id, boxDao.getMaterial_id())
+ );
+
+ // 更新组盘记录为生成
+ iMdPbGroupplateService.update(
+ new UpdateWrapper().lambda()
+ .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("组盘"))
+ .eq(GroupPlate::getStoragevehicle_code, dtlDao.getStoragevehicle_code())
+ .eq(GroupPlate::getPcsn, dtlDao.getPcsn())
+ .eq(GroupPlate::getMaterial_id, boxDao.getMaterial_id())
+ .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库"))
+ );
+ }
+}
diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/DetainInTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/DetainInTask.java
index 999ec9a..287ba66 100644
--- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/DetainInTask.java
+++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/DetainInTask.java
@@ -4,14 +4,18 @@ 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.basedata_manage.service.dao.Structattr;
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;
@@ -46,6 +50,12 @@ public class DetainInTask extends AbstractTask {
@Resource
private IOStorInvDisMapper ioStorInvDisMapper;
+ /**
+ * 点位服务
+ */
+ @Autowired
+ private ISchBasePointService iSchBasePointService;
+
@Override
public String create(JSONObject json) {
SchBaseTask task = new SchBaseTask();
@@ -146,6 +156,14 @@ public class DetainInTask extends AbstractTask {
taskObj.setRemark("已完成");
taskService.updateById(taskObj);
rawAssistIStorService.taskFinish(taskObj);
+ // 更新起点
+ iSchBasePointService.update(
+ new UpdateWrapper().lambda()
+ .set(SchBasePoint::getVehicle_code, null)
+ .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位"))
+ .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
+
+ );
}
@Transactional(rollbackFor = Exception.class)
diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PdaPointTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PdaPointTask.java
index ff1b083..b6d09d4 100644
--- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PdaPointTask.java
+++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PdaPointTask.java
@@ -27,9 +27,12 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
/**
- * @Author: Liuxy
- * @Description: 手持定点任务
- * @Date: 2025/6/6
+ *
+ * 点对点任务类
+ *
+ *
+ * @author Liuxy
+ * @since 2025-08-21
*/
@Component(value = "PdaPointTask")
@TaskType("PdaPointTask")
diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/SelectBackInTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/SelectBackInTask.java
index 67ce618..2f6e12e 100644
--- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/SelectBackInTask.java
+++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/SelectBackInTask.java
@@ -13,7 +13,9 @@ import org.nl.config.IdUtil;
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
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;
@@ -53,6 +55,12 @@ public class SelectBackInTask extends AbstractTask {
@Resource
private IMdPbGroupplateService iMdPbGroupplateService;
+ /**
+ * 点位服务
+ */
+ @Autowired
+ private ISchBasePointService iSchBasePointService;
+
@Override
public String create(JSONObject json) {
SchBaseTask task = new SchBaseTask();
@@ -197,5 +205,13 @@ public class SelectBackInTask extends AbstractTask {
.eq(GroupPlate::getPcsn, disDao.getPcsn())
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))
);
+ // 更新起点
+ iSchBasePointService.update(
+ new UpdateWrapper().lambda()
+ .set(SchBasePoint::getVehicle_code, null)
+ .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位"))
+ .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
+
+ );
}
}
diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/controller/ISIvtCombinedBoxController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/controller/ISIvtCombinedBoxController.java
new file mode 100644
index 0000000..274eea9
--- /dev/null
+++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/controller/ISIvtCombinedBoxController.java
@@ -0,0 +1,97 @@
+package org.nl.wms.warehouse_management.controller;
+
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+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.IStIvtCombinedBoxService;
+import org.nl.wms.warehouse_management.service.dao.StIvtCombinedBox;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ *
+ * 合箱管理 控制层
+ *
+ *
+ * @author Liuxy
+ * @since 2025-08-21
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/combinedBox")
+@Slf4j
+public class ISIvtCombinedBoxController {
+
+ @Autowired
+ private IStIvtCombinedBoxService iStIvtCombinedBoxService;
+
+ @GetMapping
+ @Log("分页查询")
+ public ResponseEntity
+ *
+ * @author Liuxy
+ * @since 2025-08-21
+ */
+@Service
+public class StIvtCombinedBoxServiceImpl extends ServiceImpl implements IStIvtCombinedBoxService {
+
+ /**
+ * 载具扩展属性mapper
+ */
+ @Resource
+ private MdPbStoragevehicleextMapper mdPbStoragevehicleextMapper;
+
+ /**
+ * 仓位服务
+ */
+ @Autowired
+ private IStructattrService iStructattrService;
+
+ /**
+ * 物料服务
+ */
+ @Autowired
+ private IMdMeMaterialbaseService iMdMeMaterialbaseService;
+
+ /**
+ * 计量单位服务
+ */
+ @Autowired
+ private IMdPbMeasureunitService iMdPbMeasureunitService;
+
+ /**
+ * 移库单服务
+ */
+ @Autowired
+ private IStIvtMoveinvService iStIvtMoveinvService;
+
+ /**
+ * 移库单明细服务
+ */
+ @Autowired
+ private IStIvtMoveinvdtlService iStIvtMoveinvdtlService;
+
+ /**
+ * 点位信息服务
+ */
+ @Autowired
+ private ISchBasePointService iSchBasePointService;
+
+ /**
+ * 载具信息服务
+ */
+ @Autowired
+ private IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService;
+
+ /**
+ * wms调用acs服务
+ */
+ @Autowired
+ private WmsToAcsService wmsToAcsService;
+
+ /**
+ * 入库服务
+ */
+ @Autowired
+ private IRawAssistIStorService iRawAssistIStorService;
+
+ /**
+ * 库区服务
+ */
+ @Autowired
+ private ISectattrService iSectattrService;
+
+ /**
+ * 入库明细服务
+ */
+ @Autowired
+ private IOStorInvDtlMapper ioStorInvDtlMapper;
+
+ /**
+ * 组盘记录服务
+ */
+ @Autowired
+ private IMdPbGroupplateService iMdPbGroupplateService;
+
+ @Override
+ public IPage queryAll(Map whereJson, PageQuery page) {
+ return this.baseMapper.queryAllByPage(new Page<>(page.getPage() + 1, page.getSize()),
+ whereJson);
+ }
+
+ @Override
+ @Transactional
+ public void create(StIvtCombinedBox dto) {
+ dto.setId(IdUtil.getStringId());
+ dto.setStatus(IOSEnum.COMBINED_BOX_STATUS.code("生成"));
+ dto.setCreate_id(SecurityUtils.getCurrentUserId());
+ dto.setCreate_name(SecurityUtils.getCurrentNickName());
+ dto.setCreate_time(DateUtil.now());
+ this.save(dto);
+ }
+
+ @Override
+ @Transactional
+ public void update(StIvtCombinedBox dto) {
+ this.updateById(dto);
+ }
+
+ @Override
+ @Transactional
+ public void delete(Set ids) {
+ this.removeByIds(ids);
+ }
+
+ @Override
+ public IPage getCanuseIvt(Map whereJson, PageQuery page) {
+ return mdPbStoragevehicleextMapper.getCanuseIvtQtyAsc(new Page<>(page.getPage() + 1, page.getSize()),
+ whereJson);
+ }
+
+ @Override
+ @Transactional
+ public void sendMoveTask(StIvtCombinedBox dto) {
+ // 组织移库生成单据
+ String movedtl_id = createMoveTask(dto);
+ // 更新单据状态
+ dto.setStatus(IOSEnum.COMBINED_BOX_STATUS.code("移库中"));
+ dto.setMove_id(movedtl_id);
+ this.updateById(dto);
+ }
+
+ @Override
+ public JSONObject getWeigh(StIvtCombinedBox dto) {
+ // 判断当前载具是否是称重位上的载具
+ SchBasePoint pointDao = iSchBasePointService.getById(IOSConstant.CZW_POINT);
+ if (!pointDao.getVehicle_code().equals(dto.getVehicle_code())) {
+ throw new BadRequestException("当前称重位载具与合箱载具不符,当前称重位载具为【" + pointDao.getVehicle_code() + "】");
+ }
+ // 获取载具信息
+ MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getByCode(pointDao.getVehicle_code());
+ if (ObjectUtil.isEmpty(vehicleDao.getWeigth())) {
+ throw new BadRequestException("请维护当前载具重量【" + pointDao.getVehicle_code() + "】");
+ }
+
+ // TODO 调用ACS接口获取称重信息
+ AcsResponse weighAcs = wmsToAcsService.getWeighAcs(new JSONObject());
+ JSONObject jsonResult = weighAcs.getResultData();
+
+ // 称重重量
+ double weigh_qty = NumberUtil.round(jsonResult.getDoubleValue("weigh_qty"), 2).doubleValue();
+ // 扣除载具重量
+ double sub_qty = NumberUtil.sub(weigh_qty, vehicleDao.getWeigth().doubleValue());
+
+ JSONObject result = new JSONObject();
+ result.put("weigh_qty", NumberUtil.round(sub_qty, 2));
+ return result;
+ }
+
+ @Override
+ @Transactional
+ public void saveWeigh(StIvtCombinedBox dto) {
+ // 更新合箱记录称重重量、加料重量
+ StIvtCombinedBox boxDao = this.getById(dto.getId());
+ boxDao.setWeight_qty(dto.getWeight_qty());
+ boxDao.setMaterial_qty(dto.getMaterial_qty());
+ this.updateById(dto);
+
+ // 更新组盘重量
+ iMdPbGroupplateService.update(
+ new UpdateWrapper().lambda()
+ .set(GroupPlate::getQty, dto.getWeight_qty())
+ .eq(GroupPlate::getStoragevehicle_code, dto.getVehicle_code())
+ .eq(GroupPlate::getPcsn, dto.getPcsn())
+ .eq(GroupPlate::getMaterial_id, boxDao.getMaterial_id())
+ .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("组盘"))
+ );
+ }
+
+ @Override
+ @Transactional
+ public void confirmIn(StIvtCombinedBox dto) {
+ // 组织入库数据
+ JSONObject resultJson = createCombineBoxIn(dto);
+ // 调用分配
+ JSONObject resultMap = divCombineBoxIn(resultJson);
+ // 调用下发
+ sendTask(resultMap);
+ // 更新合箱记录为入库中
+ StIvtCombinedBox boxDao = this.getById(dto.getId());
+ boxDao.setStatus(IOSEnum.COMBINED_BOX_STATUS.code("入库中"));
+ this.updateById(boxDao);
+ }
+
+ /**
+ * 创建移库单并下发任务
+ * @param dto 合箱实体类
+ * @return movedtl_id 明细标识
+ */
+ private String createMoveTask(StIvtCombinedBox dto) {
+ // 查询移出货位
+ List attrDaoList = iStructattrService.list(
+ new QueryWrapper().lambda()
+ .eq(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
+ .ne(Structattr::getIs_emptyvehicle, IOSConstant.ONE)
+ .eq(Structattr::getStoragevehicle_code, dto.getVehicle_code())
+ );
+ if (ObjectUtil.isEmpty(attrDaoList)) {
+ throw new BadRequestException("当前载具正在执行任务或者载具不在库内!");
+ }
+ if (attrDaoList.size() > 1) {
+ throw new BadRequestException("库内载具【"+dto.getVehicle_code()+"】重复,请检查数据!");
+ }
+
+ // 组织主表
+ MoveInsertDto moveInsertDto = new MoveInsertDto();
+ moveInsertDto.setBill_type(IOSEnum.MOVE_BILL_TYPE.code("合箱移库"));
+ moveInsertDto.setBiz_date(DateUtil.today());
+ moveInsertDto.setStor_id(attrDaoList.get(0).getStor_id());
+ moveInsertDto.setTotal_qty(dto.getIvt_qty());
+ moveInsertDto.setDetail_count(BigDecimal.ONE);
+ moveInsertDto.setBill_status(IOSEnum.MOVE_MST_STATUS.code("生成"));
+ moveInsertDto.setRemark("由合箱单据创建!");
+
+ // 组织明细
+ List dtlList = new ArrayList<>();
+ JSONObject jsonDtl = new JSONObject();
+ jsonDtl.put("turnout_sect_code", attrDaoList.get(0).getSect_code());
+ jsonDtl.put("turnout_struct_code", attrDaoList.get(0).getStruct_code());
+ MdMeMaterialbase materDao = iMdMeMaterialbaseService.getById(dto.getMaterial_id());
+ jsonDtl.put("material_code", materDao.getMaterial_code());
+ jsonDtl.put("material_id", materDao.getMaterial_id());
+ jsonDtl.put("pcsn", dto.getPcsn());
+ MdPbMeasureunit unitDao = iMdPbMeasureunitService.getByCode("KG");
+ jsonDtl.put("qty_unit_id", unitDao.getMeasure_unit_id());
+ jsonDtl.put("qty_unit_name", unitDao.getUnit_name());
+ jsonDtl.put("qty", dto.getIvt_qty());
+ jsonDtl.put("turnin_sect_code", IOSConstant.CZW_POINT);
+ jsonDtl.put("turnin_struct_code", IOSConstant.CZW_POINT);
+ jsonDtl.put("work_status", IOSEnum.MOVE_DTL_STATUS.code("生成"));
+ jsonDtl.put("storagevehicle_code", dto.getVehicle_code());
+ jsonDtl.put("source_bill_code", dto.getId());
+ dtlList.add(jsonDtl);
+ moveInsertDto.setTableData(dtlList);
+
+ // 调用移库单新增
+ String move_id = iStIvtMoveinvService.create(moveInsertDto);
+ // 下发任务
+ StIvtMoveinv moveDao = new StIvtMoveinv();
+ moveDao.setMoveinv_id(move_id);
+ iStIvtMoveinvService.sendTask(moveDao);
+
+ // 查询明细标识
+ StIvtMoveinvdtl dtlDao = iStIvtMoveinvdtlService.getOne(
+ new QueryWrapper().lambda()
+ .eq(StIvtMoveinvdtl::getMoveinv_id, move_id)
+ );
+ return dtlDao.getMoveinvdtl_id();
+ }
+
+ /**
+ * 组织入库数据
+ * @param dto 合箱实体类dto
+ * @return JSONObject
+ */
+ private JSONObject createCombineBoxIn(StIvtCombinedBox dto) {
+ // 查询移库单明细
+ StIvtMoveinvdtl moveDtlDao = iStIvtMoveinvdtlService.getById(dto.getMove_id());
+ // 查询主表
+ StIvtMoveinv moveMstDao = iStIvtMoveinvService.getById(moveDtlDao.getMoveinv_id());
+ // 查询移库仓位
+ Structattr attrDao = iStructattrService.getByCode(moveDtlDao.getTurnout_struct_code());
+
+ // 组织主表数据
+ Map jsonMst = new HashMap<>();
+ jsonMst.put("stor_id", moveMstDao.getStor_id());
+ jsonMst.put("bill_status", IOSEnum.BILL_STATUS.code("生成"));
+ jsonMst.put("total_qty", dto.getWeight_qty());
+ jsonMst.put("detail_count", 1);
+ jsonMst.put("bill_type", IOSEnum.IN_BILL_TYPE.code("合箱入库"));
+ jsonMst.put("biz_date", DateUtil.now());
+
+ // 组织明细数据
+ ArrayList tableData = new ArrayList<>();
+ HashMap dtl = new HashMap<>();
+ dtl.put("storagevehicle_code", dto.getVehicle_code());
+ dtl.put("pcsn", dto.getPcsn());
+ dtl.put("qty_unit_id", moveDtlDao.getQty_unit_id());
+ dtl.put("qty_unit_name", moveDtlDao.getQty_unit_name());
+ dtl.put("qty", dto.getWeight_qty().toString());
+ MdMeMaterialbase materDao = iMdMeMaterialbaseService.getById(dto.getMaterial_id());
+ dtl.put("material_code", materDao.getMaterial_code());
+ dtl.put("material_name", materDao.getMaterial_name());
+ dtl.put("material_id", materDao.getMaterial_id());
+ dtl.put("plan_qty", dto.getWeight_qty().toString());
+ dtl.put("ext_code", dto.getId());
+ // 调用新增
+ tableData.add(dtl);
+ jsonMst.put("tableData", tableData);
+ String iostorinv_id = iRawAssistIStorService.insertDtl(jsonMst);
+
+ JSONObject result = new JSONObject();
+ result.put("sect_id", attrDao.getSect_id());
+ result.put("iostorinv_id", iostorinv_id);
+ return result;
+ }
+
+ /**
+ * 组织分配数据
+ *
+ * @param whereJson {
+ * iostorinv_id
+ * sect_id
+ * }
+ * @return JSONObject
+ */
+ private JSONObject divCombineBoxIn(JSONObject whereJson) {
+ // 查询库区
+ Sectattr sectDao = iSectattrService.getById(whereJson.getString("sect_id"));
+ // 组织主数据
+ Map jsonMst = new HashMap<>();
+ jsonMst.put("checked", true);
+ jsonMst.put("sect_id", sectDao.getSect_id());
+ jsonMst.put("stor_id", sectDao.getStor_id());
+ // 组织明细数据
+ IOStorInvDtl dtlDao = ioStorInvDtlMapper.selectOne(
+ new QueryWrapper().lambda()
+ .eq(IOStorInvDtl::getIostorinv_id, whereJson.getString("iostorinv_id"))
+ );
+ // 查找分配明细
+ Map map = new HashMap<>();
+ map.put("iostorinvdtl_id", dtlDao.getIostorinvdtl_id());
+ List disDtl = iRawAssistIStorService.getDisDtl(map);
+ // 类型转换
+ ArrayList tableMater = new ArrayList<>();
+ disDtl.forEach(item -> {
+ tableMater.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class));
+ });
+ jsonMst.put("tableMater", tableMater);
+ // 调用分配
+ iRawAssistIStorService.divStruct(jsonMst);
+
+ JSONObject result = new JSONObject();
+ result.put("storagevehicle_code", disDtl.get(0).getStoragevehicle_code());
+ result.put("point_code", IOSConstant.CZW_POINT);
+ result.put("sect_id", disDtl.get(0).getSect_id());
+ result.put("iostorinv_id", disDtl.get(0).getIostorinv_id());
+ return result;
+ }
+
+ /**
+ * 下发任务
+ *
+ * @param whereJson {
+ * storagevehicle_code:载具编码
+ * point_code:点位编码
+ * sect_id:库区
+ * iostorinv_id: id
+ * }
+ */
+ private void sendTask(JSONObject whereJson) {
+ // 组织主数据
+ Map jsonMst = new HashMap<>();
+ jsonMst.put("point_code", whereJson.getString("point_code"));
+ // 组织明细数据
+ IOStorInvDtl dtlDao = ioStorInvDtlMapper.selectOne(
+ new QueryWrapper().lambda()
+ .eq(IOStorInvDtl::getIostorinv_id, whereJson.getString("iostorinv_id"))
+ );
+ // 查找分配明细
+ Map map = new HashMap<>();
+ map.put("iostorinvdtl_id", dtlDao.getIostorinvdtl_id());
+ List disDtl = iRawAssistIStorService.getDisDtl(map);
+ // 类型转换
+ ArrayList tableMater = new ArrayList<>();
+ disDtl.forEach(item -> {
+ tableMater.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class));
+ });
+ jsonMst.put("tableMater", tableMater);
+
+ iRawAssistIStorService.divPoint(jsonMst);
+ }
+}
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 94532a2..d57a31f 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
@@ -14,9 +14,7 @@ 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.IMdPbStoragevehicleextService;
import org.nl.wms.basedata_manage.service.IStructattrService;
-import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper;
import org.nl.wms.sch_manage.enums.TaskStatus;
@@ -24,7 +22,6 @@ 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.InsideMoveTask;
import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.nl.wms.warehouse_management.service.IStIvtMoveinvService;
@@ -37,7 +34,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.util.*;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
import java.util.stream.Collectors;
/**
@@ -141,9 +141,9 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl ids) {
- for(String moveinv_id : ids) {
+ for (String moveinv_id : ids) {
JSONObject json = new JSONObject();
- json.put("moveinv_id",moveinv_id);
+ json.put("moveinv_id", moveinv_id);
List moveDtl = iStIvtMoveinvdtlService.getMoveDtl(json);
// 组织删除参数
@@ -181,7 +181,7 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl moveDtl = iStIvtMoveinvdtlService.getMoveDtl(JSONObject.parseObject(JSONObject.toJSONString(dtlDao),JSONObject.class));
+ List moveDtl = iStIvtMoveinvdtlService.getMoveDtl(JSONObject.parseObject(JSONObject.toJSONString(dtlDao), JSONObject.class));
// 过滤当前明细
List paramList = moveDtl.stream()
.filter(row -> row.getString("moveinvdtl_id").equals(dtlDao.getMoveinvdtl_id()))
@@ -297,11 +297,8 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl dtlDaoList = iStIvtMoveinvdtlService.list(
diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/StIvtMoveinvdtlServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/StIvtMoveinvdtlServiceImpl.java
index 9ee9120..7383c36 100644
--- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/StIvtMoveinvdtlServiceImpl.java
+++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/StIvtMoveinvdtlServiceImpl.java
@@ -75,6 +75,7 @@ public class StIvtMoveinvdtlServiceImpl extends ServiceImpl
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wms/nladmin-ui/src/views/wms/st/combinedBox/WeighDialog.vue b/wms/nladmin-ui/src/views/wms/st/combinedBox/WeighDialog.vue
new file mode 100644
index 0000000..5e6b6ab
--- /dev/null
+++ b/wms/nladmin-ui/src/views/wms/st/combinedBox/WeighDialog.vue
@@ -0,0 +1,178 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 称重
+ 保存
+ 关闭
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wms/nladmin-ui/src/views/wms/st/combinedBox/combinedBox.js b/wms/nladmin-ui/src/views/wms/st/combinedBox/combinedBox.js
new file mode 100644
index 0000000..12f2e18
--- /dev/null
+++ b/wms/nladmin-ui/src/views/wms/st/combinedBox/combinedBox.js
@@ -0,0 +1,59 @@
+import request from '@/utils/request'
+
+export function add(data) {
+ return request({
+ url: 'api/combinedBox',
+ method: 'post',
+ data
+ })
+}
+
+export function del(ids) {
+ return request({
+ url: 'api/combinedBox/',
+ method: 'delete',
+ data: ids
+ })
+}
+
+export function edit(data) {
+ return request({
+ url: 'api/combinedBox',
+ method: 'put',
+ data
+ })
+}
+
+export function sendMoveTask(data) {
+ return request({
+ url: 'api/combinedBox/sendMoveTask',
+ method: 'post',
+ data
+ })
+}
+
+export function getWeigh(data) {
+ return request({
+ url: 'api/combinedBox/getWeigh',
+ method: 'post',
+ data
+ })
+}
+
+export function saveWeigh(data) {
+ return request({
+ url: 'api/combinedBox/saveWeigh',
+ method: 'post',
+ data
+ })
+}
+
+export function confirmIn(data) {
+ return request({
+ url: 'api/combinedBox/confirmIn',
+ method: 'post',
+ data
+ })
+}
+
+export default { add, edit, del, sendMoveTask, getWeigh, saveWeigh, confirmIn }
diff --git a/wms/nladmin-ui/src/views/wms/st/combinedBox/index.vue b/wms/nladmin-ui/src/views/wms/st/combinedBox/index.vue
new file mode 100644
index 0000000..b7ee14e
--- /dev/null
+++ b/wms/nladmin-ui/src/views/wms/st/combinedBox/index.vue
@@ -0,0 +1,356 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 下发移出任务
+
+
+ 加料称重
+
+
+ 入库确认
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wms/nladmin-ui/src/views/wms/st/movebill/index.vue b/wms/nladmin-ui/src/views/wms/st/movebill/index.vue
index 5307feb..704966c 100644
--- a/wms/nladmin-ui/src/views/wms/st/movebill/index.vue
+++ b/wms/nladmin-ui/src/views/wms/st/movebill/index.vue
@@ -185,6 +185,7 @@
+