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