rev:合箱移库、拼箱移库、库内移库、盘点移库 逻辑修改

This commit is contained in:
2025-09-15 16:37:34 +08:00
parent c585ea5468
commit ab3b6b4746
8 changed files with 583 additions and 57 deletions

View File

@@ -262,6 +262,7 @@ public class CheckBackMoveTask extends AbstractTask {
new UpdateWrapper<Structattr>().lambda()
.eq(Structattr::getStruct_code, taskObj.getPoint_code2())
.set(Structattr::getStoragevehicle_code, taskObj.getVehicle_code())
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
);
// 更新盘点明细状态

View File

@@ -25,6 +25,7 @@ import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.nl.wms.warehouse_management.service.*;
import org.nl.wms.warehouse_management.service.dao.StIvtCheckdtl;
import org.nl.wms.warehouse_management.service.dao.StIvtMoveinvdtl;
import org.nl.wms.warehouse_management.service.dao.StIvtPieceBoxDtl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@@ -163,9 +164,6 @@ public class CheckMoveTask extends AbstractTask {
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
if (Integer.parseInt(taskObj.getTask_status()) > Integer.parseInt(TaskStatus.CREATE.getCode())) {
throw new BadRequestException("只能取消生成中的任务!");
}
this.cancelTask(taskObj);
}
@@ -230,4 +228,24 @@ public class CheckMoveTask extends AbstractTask {
public JSONObject resultWeigh(SchBaseTask taskObj) {
return null;
}
/**
* 更新单据货位
* @param task_id 明细任务标识
* @param struct_code 更新的货位
*/
public void updateIosPoint(String task_id, String struct_code) {
Structattr attr = iStructattrService.getByCode(struct_code);
// 更新盘点明细仓位
StIvtCheckdtl dtlDao = iStIvtCheckdtlService.getOne(
new QueryWrapper<StIvtCheckdtl>().lambda()
.eq(StIvtCheckdtl::getTask_id, task_id)
);
dtlDao.setStruct_code(attr.getStruct_code());
dtlDao.setSect_code(attr.getSect_code());
iStIvtCheckdtlService.updateById(dtlDao);
}
}

View File

@@ -181,9 +181,6 @@ public class CombinedBoxMoveTask extends AbstractTask {
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
if (Integer.parseInt(taskObj.getTask_status()) > Integer.parseInt(TaskStatus.CREATE.getCode())) {
throw new BadRequestException("只能取消生成中的任务!");
}
this.cancelTask(taskObj);
}
@@ -267,4 +264,23 @@ public class CombinedBoxMoveTask extends AbstractTask {
public JSONObject resultWeigh(SchBaseTask taskObj) {
return null;
}
/**
* 更新单据货位
* @param task_id 明细任务标识
* @param struct_code 更新的货位
*/
public void updateIosPoint(String task_id, String struct_code) {
// 查询移库明细
StIvtMoveinvdtl dtlDao = iStIvtMoveinvdtlService.getOne(
new QueryWrapper<StIvtMoveinvdtl>().lambda()
.eq(StIvtMoveinvdtl::getTask_id, task_id)
);
// 更新移库明细仓位
Structattr attr = iStructattrService.getByCode(struct_code);
dtlDao.setTurnout_struct_code(attr.getStruct_code());
dtlDao.setTurnout_sect_code(attr.getSect_code());
iStIvtMoveinvdtlService.updateById(dtlDao);
}
}

View File

@@ -8,6 +8,8 @@ import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.config.IdUtil;
import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
@@ -53,6 +55,12 @@ public class InsideMoveTask extends AbstractTask {
@Autowired
private IStIvtMoveinvdtlService iStIvtMoveinvdtlService;
/**
* 仓位服务
*/
@Autowired
private IStructattrService iStructattrService;
@Override
public String create(JSONObject json) {
SchBaseTask task = new SchBaseTask();
@@ -146,9 +154,6 @@ public class InsideMoveTask extends AbstractTask {
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
if (Integer.parseInt(taskObj.getTask_status()) > Integer.parseInt(TaskStatus.CREATE.getCode())) {
throw new BadRequestException("只能取消生成中的任务!");
}
this.cancelTask(taskObj);
}
@@ -188,4 +193,23 @@ public class InsideMoveTask extends AbstractTask {
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
taskService.updateById(taskObj);
}
/**
* 更新单据货位
* @param task_id 明细任务标识
* @param struct_code 更新的货位
*/
public void updateIosPoint(String task_id, String struct_code) {
// 查询移库明细
StIvtMoveinvdtl dtlDao = iStIvtMoveinvdtlService.getOne(
new QueryWrapper<StIvtMoveinvdtl>().lambda()
.eq(StIvtMoveinvdtl::getTask_id, task_id)
);
// 更新移库明细仓位
Structattr attr = iStructattrService.getByCode(struct_code);
dtlDao.setTurnout_struct_code(attr.getStruct_code());
dtlDao.setTurnout_sect_code(attr.getSect_code());
iStIvtMoveinvdtlService.updateById(dtlDao);
}
}

View File

@@ -0,0 +1,258 @@
package org.nl.wms.sch_manage.service.util.tasks;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.config.IdUtil;
import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.util.*;
import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
* <p>
* 移库阻挡移库任务类
* </p>
*
* @author Liuxy
* @since 2025-09-15
*/
@Component(value = "MoveOutMoveTask")
@TaskType("MoveOutMoveTask")
public class MoveOutMoveTask extends AbstractTask {
/**
* 任务服务类
*/
@Autowired
private ISchBaseTaskService taskService;
/**
* 仓位服务
*/
@Autowired
private IStructattrService iStructattrService;
/**
* 任务工厂服务
*/
@Autowired
private TaskFactory taskFactory;
/**
* 库内移库任务类
*/
@Autowired
private InsideMoveTask insideMoveTask;
/**
* 合箱移库任务类
*/
@Autowired
private CombinedBoxMoveTask combinedBoxMoveTask;
/**
* 拼箱移库任务类
*/
@Autowired
private PieceBoxMoveTask pieceBoxMoveTask;
/**
* 盘点移库任务类
*/
@Autowired
private CheckMoveTask CheckMoveTask;
@Override
public String create(JSONObject json) {
SchBaseTask task = new SchBaseTask();
task.setTask_id(IdUtil.getStringId());
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
task.setTask_status(TaskStatus.CREATE.getCode());
task.setConfig_code(MoveOutMoveTask.class.getSimpleName());
task.setPoint_code1(json.getString("point_code1"));
task.setPoint_code2(json.getString("point_code2"));
task.setVehicle_code(json.getString("vehicle_code"));
task.setVehicle_code2(json.getString("vehicle_code2"));
task.setGroup_id(json.getString("group_id"));
task.setRequest_param(json.toString());
task.setPriority(json.getString("Priority"));
task.setIs_wait(json.getString("is_wait"));
task.setCreate_id(SecurityUtils.getCurrentUserId());
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
taskService.save(task);
// 下发任务
this.sendTaskOne(task.getTask_id());
return task.getTask_id();
}
@Override
public AcsTaskDto sendAcsParam(String taskId) {
SchBaseTask taskDao = taskService.getById(taskId);
// 组织下发给acs的数据
AcsTaskDto acsTaskDto = new AcsTaskDto();
acsTaskDto.setExt_task_id(taskDao.getTask_id());
acsTaskDto.setTask_code(taskDao.getTask_code());
acsTaskDto.setStart_device_code(taskDao.getPoint_code1());
acsTaskDto.setNext_device_code(taskDao.getPoint_code2());
acsTaskDto.setVehicle_code(taskDao.getVehicle_code());
acsTaskDto.setVehicle_type(IOSConstant.ONE);
acsTaskDto.setIs_wait(IOSConstant.ZERO);
acsTaskDto.setTask_type(ACSTaskTypeEnum.CTU_TASK.getCode());
acsTaskDto.setPriority(IOSConstant.ONE);
acsTaskDto.setAgv_system_type(IOSConstant.THREE);
acsTaskDto.setIs_get_pause(IOSConstant.ZERO);
acsTaskDto.setIs_put_pause(IOSConstant.ZERO);
return acsTaskDto;
}
@Override
@Transactional
protected void updateStatus(String task_code, TaskStatus status) {
// 校验任务
SchBaseTask taskObj = taskService.getByCode(task_code);
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
throw new BadRequestException("该任务已完成!");
}
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
throw new BadRequestException("该任务已取消!");
}
// 根据传来的类型去对任务进行操作
if (status.equals(TaskStatus.EXECUTING)) {
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
taskObj.setRemark("执行中");
taskService.updateById(taskObj);
}
if (status.equals(TaskStatus.FINISHED)) {
this.finishTask(taskObj);
}
if (status.equals(TaskStatus.CANCELED)) {
this.cancelTask(taskObj);
}
}
@Override
@Transactional
public void forceFinish(String task_code) {
SchBaseTask taskObj = taskService.getByCode(task_code);
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
this.finishTask(taskObj);
}
@Override
@Transactional
public void cancel(String task_code) {
SchBaseTask taskObj = taskService.getByCode(task_code);
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
this.cancelTask(taskObj);
}
@Override
public void taskConfirm(String task_code) {
}
@Override
public JSONObject resultWeigh(SchBaseTask taskObj) {
return null;
}
@Transactional
public void finishTask(SchBaseTask taskObj) {
// 起点货位
Structattr startStruct = iStructattrService.getByCode(taskObj.getPoint_code1());
// 终点货位
Structattr endStruct = iStructattrService.getByCode(taskObj.getPoint_code2());
// 更新起点
iStructattrService.update(
new UpdateWrapper<Structattr>().lambda()
.eq(Structattr::getStruct_code, taskObj.getPoint_code1())
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("移出锁"))
.set(Structattr::getStoragevehicle_code, endStruct.getStoragevehicle_code())
.set(Structattr::getIs_emptyvehicle,
endStruct.getIs_emptyvehicle().equals(IOSConstant.IS_DELETE_YES) ? IOSConstant.IS_DELETE_YES
: IOSConstant.IS_DELETE_NO
)
);
// 更新终点
iStructattrService.update(
new UpdateWrapper<Structattr>().lambda()
.eq(Structattr::getStruct_code, taskObj.getPoint_code2())
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.set(Structattr::getStoragevehicle_code, startStruct.getStoragevehicle_code())
.set(Structattr::getIs_emptyvehicle,
startStruct.getIs_emptyvehicle().equals(IOSConstant.IS_DELETE_YES) ? IOSConstant.IS_DELETE_YES
: IOSConstant.IS_DELETE_NO
)
);
// 更新任务状态
taskObj.setRemark("已完成");
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskService.updateById(taskObj);
// 更新源单据货位
SchBaseTask moveIosTask = taskService.getById(taskObj.getContact_task());
if (moveIosTask.getConfig_code().equals(IOSEnum.MOVE_CONFIG_CODE.code("2001"))) {
// 库内移库
insideMoveTask.updateIosPoint(moveIosTask.getTask_id(), startStruct.getStruct_code());
} else if (moveIosTask.getConfig_code().equals(IOSEnum.MOVE_CONFIG_CODE.code("2002"))) {
// 合箱移库
combinedBoxMoveTask.updateIosPoint(moveIosTask.getTask_id(), startStruct.getStruct_code());
} else if (moveIosTask.getConfig_code().equals(IOSEnum.MOVE_CONFIG_CODE.code("2003"))) {
// 拼箱移库
pieceBoxMoveTask.updateIosPoint(moveIosTask.getTask_id(), startStruct.getStruct_code());
} else if (moveIosTask.getConfig_code().equals(IOSEnum.MOVE_CONFIG_CODE.code("2004"))) {
// 盘点移库
CheckMoveTask.updateIosPoint(moveIosTask.getTask_id(), startStruct.getStruct_code());
}
}
@Transactional
public void cancelTask(SchBaseTask taskObj) {
// 根据任务类型取消移库单移库任务
SchBaseTask moveIosTask = taskService.getById(taskObj.getContact_task());
AbstractTask task = taskFactory.getTask(moveIosTask.getConfig_code());
task.cancel(moveIosTask.getTask_code());
// 更新起点
iStructattrService.update(
new UpdateWrapper<Structattr>().lambda()
.eq(Structattr::getStruct_code, taskObj.getPoint_code1())
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
);
// 更新终点
iStructattrService.update(
new UpdateWrapper<Structattr>().lambda()
.eq(Structattr::getStruct_code, taskObj.getPoint_code2())
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
);
// 更新当前任务状态
taskObj.setRemark("已取消");
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
taskService.updateById(taskObj);
}
}

View File

@@ -184,9 +184,6 @@ public class PieceBoxMoveTask extends AbstractTask {
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
if (Integer.parseInt(taskObj.getTask_status()) > Integer.parseInt(TaskStatus.CREATE.getCode())) {
throw new BadRequestException("只能取消生成中的任务!");
}
this.cancelTask(taskObj);
}
@@ -272,4 +269,28 @@ public class PieceBoxMoveTask extends AbstractTask {
public JSONObject resultWeigh(SchBaseTask taskObj) {
return null;
}
/**
* 更新单据货位
* @param task_id 明细任务标识
* @param struct_code 更新的货位
*/
public void updateIosPoint(String task_id, String struct_code) {
// 查询移库明细
StIvtMoveinvdtl dtlDao = iStIvtMoveinvdtlService.getOne(
new QueryWrapper<StIvtMoveinvdtl>().lambda()
.eq(StIvtMoveinvdtl::getTask_id, task_id)
);
// 更新移库明细仓位
Structattr attr = iStructattrService.getByCode(struct_code);
dtlDao.setTurnout_struct_code(attr.getStruct_code());
dtlDao.setTurnout_sect_code(attr.getSect_code());
iStIvtMoveinvdtlService.updateById(dtlDao);
// 更新拼箱明细仓位
StIvtPieceBoxDtl boxDtlDao = iStIvtPieceBoxDtlService.getById(dtlDao.getSource_bill_code());
boxDtlDao.setStruct_code(struct_code);
iStIvtPieceBoxDtlService.updateById(boxDtlDao);
}
}

View File

@@ -16,8 +16,13 @@ import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.util.tasks.CheckBackMoveTask;
import org.nl.wms.sch_manage.service.util.tasks.CheckMoveTask;
import org.nl.wms.sch_manage.service.util.tasks.MoveOutMoveTask;
import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.nl.wms.warehouse_management.service.IMdPbGroupplateService;
@@ -72,6 +77,24 @@ public class StIvtCheckmstServiceImpl extends ServiceImpl<StIvtCheckmstMapper, S
@Autowired
private IMdPbGroupplateService iMdPbGroupplateService;
/**
* 仓位服务
*/
@Autowired
private IStructattrService iStructattrService;
/**
* 移库阻挡移库任务类
*/
@Autowired
private MoveOutMoveTask moveOutMoveTask;
/**
* 任务服务
*/
@Autowired
private ISchBaseTaskService iSchBaseTaskService;
@Override
public IPage<StIvtCheckmst> queryAll(Map whereJson, PageQuery page) {
String check_code = MapUtil.getStr(whereJson, "check_code");
@@ -156,7 +179,7 @@ public class StIvtCheckmstServiceImpl extends ServiceImpl<StIvtCheckmstMapper, S
public void dtlCheckConfirm(StIvtCheckdtl dao) {
StIvtCheckdtl dtlDao = iStIvtCheckdtlService.getById(dao.getCheckdtl_id());
String dtlVehicle = dtlDao.getStoragevehicle_code();
if (!dtlVehicle.equals(dao.getStoragevehicle_code())){
if (!dtlVehicle.equals(dao.getStoragevehicle_code())) {
throw new BadRequestException("扫码托盘不属于当前盘点当");
}
dtlDao.setFac_qty(dao.getFac_qty());
@@ -191,16 +214,16 @@ public class StIvtCheckmstServiceImpl extends ServiceImpl<StIvtCheckmstMapper, S
// 生成损益单据
List<StIvtCheckdtl> dtlDaoList = new ArrayList<>();
dtlDaoList.add(dtlDao);
iStIvtCheckdtlService.createMore(dtlDaoList,dtlDao.getCheck_id());
iStIvtCheckdtlService.createMore(dtlDaoList, dtlDao.getCheck_id());
// 更新组盘记录表
iMdPbGroupplateService.update(
new UpdateWrapper<GroupPlate>().lambda()
.set(GroupPlate::getQty, dtlDao.getFac_qty())
.eq(GroupPlate::getMaterial_id, dtlDao.getMaterial_id())
.eq(GroupPlate::getStoragevehicle_code, dtlDao.getStoragevehicle_code())
.eq(GroupPlate::getPcsn, dtlDao.getPcsn())
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库"))
.set(GroupPlate::getQty, dtlDao.getFac_qty())
.eq(GroupPlate::getMaterial_id, dtlDao.getMaterial_id())
.eq(GroupPlate::getStoragevehicle_code, dtlDao.getStoragevehicle_code())
.eq(GroupPlate::getPcsn, dtlDao.getPcsn())
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库"))
);
// 更新明细
@@ -282,10 +305,24 @@ public class StIvtCheckmstServiceImpl extends ServiceImpl<StIvtCheckmstMapper, S
.eq(StIvtCheckdtl::getStatus, IOSEnum.CHECK_DTL_STATUS.code("生成"))
);
if (dtlDaoList.size() > 1) {
throw new BadRequestException("当前CTU只支持单条盘点移库任务请保证盘点单只有一条明细!");
}
// 生成盘点移库任务
for (StIvtCheckdtl dtlDao : dtlDaoList) {
// 锁定盘点货位
iStructattrService.update(
new UpdateWrapper<Structattr>().lambda()
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("移出锁"))
.eq(Structattr::getStruct_code, dtlDao.getStruct_code())
);
// 判断是否阻挡
JSONObject result = checkMove(dtlDao);
JSONObject jsonTask = new JSONObject();
jsonTask.put("point_code1", dtlDao.getStruct_code());
jsonTask.put("point_code1", result.getString("out_point"));
jsonTask.put("point_code2", IOSConstant.CZW_POINT);
jsonTask.put("vehicle_code", dtlDao.getStoragevehicle_code());
String task_id = checkMoveTask.create(jsonTask);
@@ -293,7 +330,92 @@ public class StIvtCheckmstServiceImpl extends ServiceImpl<StIvtCheckmstMapper, S
// 更新明细
dtlDao.setTask_id(task_id);
dtlDao.setStatus(IOSEnum.CHECK_DTL_STATUS.code("移库中"));
// 更新关联任务
if (ObjectUtil.isNotEmpty(result.getString("task_id"))) {
iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda()
.set(SchBaseTask::getContact_task, task_id)
.eq(SchBaseTask::getTask_id, result.getString("task_id"))
);
}
}
iStIvtCheckdtlService.updateBatchById(dtlDaoList);
}
/**
* 判断是否浅货位阻挡移库
*
* @param dtlDao 移出货位
* @return JSONObject {
* out_point 移库单移出货位
* task_id 移库阻挡移库任务标识
* }
*/
public JSONObject checkMove(StIvtCheckdtl dtlDao) {
JSONObject result = new JSONObject();
// 查询移出货位
Structattr outAttr = iStructattrService.getByCode(dtlDao.getStruct_code());
// 判断移出货位是深货位还是浅货位
if (outAttr.getPlacement_type().equals(IOSEnum.PLACEMENT_TYPE.code("浅货位"))) {
result.put("out_point", outAttr.getStruct_code());
return result;
}
// 查询对应的浅货位
Structattr shallowAttr = iStructattrService.getOne(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getBlock_num, outAttr.getBlock_num())
.eq(Structattr::getCol_num, outAttr.getCol_num())
.eq(Structattr::getLayer_num, outAttr.getLayer_num())
.eq(Structattr::getPlacement_type, IOSEnum.PLACEMENT_TYPE.code("浅货位"))
);
if (ObjectUtil.isEmpty(shallowAttr)) {
throw new BadRequestException("仓位【" + outAttr.getStruct_code() + "】对应的浅货位不存在,请检查数据!");
}
// 判断浅货位是否空位
if (ObjectUtil.isEmpty(shallowAttr.getStoragevehicle_code())) {
// 浅货位空位
if (shallowAttr.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
result.put("out_point", outAttr.getStruct_code());
return result;
} else {
throw new BadRequestException("当前浅货位被锁定或有正在入库的任务,请稍后在试!【" + shallowAttr.getStruct_code() + "");
}
}
// 浅货位有货
if (shallowAttr.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
// 有货未锁定生成移库任务
JSONObject jsonTask = new JSONObject();
jsonTask.put("point_code1", shallowAttr.getStruct_code());
jsonTask.put("point_code2", outAttr.getStruct_code());
jsonTask.put("vehicle_code", shallowAttr.getStoragevehicle_code());
jsonTask.put("vehicle_code2", outAttr.getStoragevehicle_code());
String task_id = moveOutMoveTask.create(jsonTask);
result.put("out_point", shallowAttr.getStruct_code());
result.put("task_id", task_id);
// 锁定起点
iStructattrService.update(
new UpdateWrapper<Structattr>().lambda()
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("移出锁"))
.eq(Structattr::getStruct_code, jsonTask.getString("point_code1"))
);
// 锁定终点
iStructattrService.update(
new UpdateWrapper<Structattr>().lambda()
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("移入锁"))
.eq(Structattr::getStruct_code, jsonTask.getString("point_code2"))
);
} else {
// 有货锁定
throw new BadRequestException("当前浅货位被锁定或有正在出库的任务,请稍后在试!【" + shallowAttr.getStruct_code() + "");
}
return result;
}
}

View File

@@ -13,7 +13,6 @@ import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService;
import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper;
@@ -22,6 +21,7 @@ import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.sch_manage.service.util.TaskFactory;
import org.nl.wms.sch_manage.service.util.tasks.MoveOutMoveTask;
import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.nl.wms.warehouse_management.service.IStIvtMoveinvService;
@@ -63,12 +63,6 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl<StIvtMoveinvMapper, StI
@Autowired
private IStIvtMoveinvdtlService iStIvtMoveinvdtlService;
/**
* 物料服务
*/
@Autowired
private IMdMeMaterialbaseService iMdMeMaterialbaseService;
/**
* 仓位服务
*/
@@ -87,6 +81,12 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl<StIvtMoveinvMapper, StI
@Autowired
private TaskFactory taskFactory;
/**
* 移库阻挡移库任务类
*/
@Autowired
private MoveOutMoveTask moveOutMoveTask;
@Override
public IPage<JSONObject> queryAll(Map whereJson, PageQuery page) {
return this.baseMapper.queryAllByPage(new Page<>(page.getPage() + 1, page.getSize()),
@@ -238,7 +238,7 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl<StIvtMoveinvMapper, StI
new UpdateWrapper<Structattr>().lambda()
.eq(Structattr::getStruct_code, dtlDao.getTurnin_struct_code())
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.set(Structattr::getIs_emptyvehicle,IOSConstant.IS_DELETE_NO)
.set(Structattr::getIs_emptyvehicle, IOSConstant.IS_DELETE_NO)
);
}
@@ -286,33 +286,7 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl<StIvtMoveinvMapper, StI
@Override
@Transactional
public void sendTask(StIvtMoveinv dao) {
StIvtMoveinv mstDao = this.getById(dao.getMoveinv_id());
if (!mstDao.getBill_status().equals(IOSEnum.MORE_MST_STATUS.code("生成"))) {
throw new BadRequestException("当前移库单已下发任务!");
}
List<StIvtMoveinvdtl> dtlList = iStIvtMoveinvdtlService.list(
new QueryWrapper<StIvtMoveinvdtl>().lambda()
.eq(StIvtMoveinvdtl::getMoveinv_id, dao.getMoveinv_id())
);
AbstractTask task = taskFactory.getTask(IOSEnum.MOVE_CONFIG_CODE.code(mstDao.getBill_type()));
for (StIvtMoveinvdtl dtlDao : dtlList) {
JSONObject jsonTask = new JSONObject();
jsonTask.put("point_code1", dtlDao.getTurnout_struct_code());
jsonTask.put("point_code2", dtlDao.getTurnin_struct_code());
jsonTask.put("vehicle_code", dtlDao.getStoragevehicle_code());
jsonTask.put("vehicle_code2", dtlDao.getStoragevehicle_code2());
String task_id = task.create(jsonTask);
// 更新明细任务标识
dtlDao.setTask_id(task_id);
}
iStIvtMoveinvdtlService.updateBatchById(dtlList);
// 更新主表状态为提交
dao.setBill_status(IOSEnum.MOVE_MST_STATUS.code("提交"));
this.updateById(dao);
this.sendOneTask(dao);
}
@Override
@@ -331,15 +305,26 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl<StIvtMoveinvMapper, StI
String task_id = "";
AbstractTask task = taskFactory.getTask(IOSEnum.MOVE_CONFIG_CODE.code(mstDao.getBill_type()));
for (StIvtMoveinvdtl dtlDao : dtlList) {
// 判断是否阻挡
JSONObject result = checkMove(dtlDao);
JSONObject jsonTask = new JSONObject();
jsonTask.put("point_code1", dtlDao.getTurnout_struct_code());
jsonTask.put("point_code1", result.getString("out_point"));
jsonTask.put("point_code2", dtlDao.getTurnin_struct_code());
jsonTask.put("vehicle_code", dtlDao.getStoragevehicle_code());
jsonTask.put("vehicle_code2", dtlDao.getStoragevehicle_code2());
task_id = task.create(jsonTask);
// 更新明细任务标识
dtlDao.setTask_id(task_id);
if (ObjectUtil.isNotEmpty(result.getString("task_id"))) {
// 更新关联任务标识
iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda()
.set(SchBaseTask::getContact_task, task_id)
.eq(SchBaseTask::getTask_id, result.getString("task_id"))
);
}
}
iStIvtMoveinvdtlService.updateBatchById(dtlList);
@@ -350,6 +335,87 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl<StIvtMoveinvMapper, StI
return task_id;
}
/**
* 判断是否浅货位阻挡移库
*
* @param dtlDao 移出货位
* @return JSONObject {
* out_point 移库单移出货位
* task_id 移库阻挡移库任务标识
* }
*/
public JSONObject checkMove(StIvtMoveinvdtl dtlDao) {
JSONObject result = new JSONObject();
// 查询移出货位
Structattr outAttr = iStructattrService.getByCode(dtlDao.getTurnout_struct_code());
// 判断移出货位是深货位还是浅货位
if (outAttr.getPlacement_type().equals(IOSEnum.PLACEMENT_TYPE.code("浅货位"))) {
result.put("out_point",outAttr.getStruct_code());
return result;
}
// 查询对应的浅货位
Structattr shallowAttr = iStructattrService.getOne(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getBlock_num, outAttr.getBlock_num())
.eq(Structattr::getCol_num, outAttr.getCol_num())
.eq(Structattr::getLayer_num, outAttr.getLayer_num())
.eq(Structattr::getPlacement_type, IOSEnum.PLACEMENT_TYPE.code("浅货位"))
);
if (ObjectUtil.isEmpty(shallowAttr)) {
throw new BadRequestException("仓位【" + outAttr.getStruct_code() + "】对应的浅货位不存在,请检查数据!");
}
// 判断浅货位是否空位
if (ObjectUtil.isEmpty(shallowAttr.getStoragevehicle_code())) {
// 浅货位空位
if (shallowAttr.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
result.put("out_point",outAttr.getStruct_code());
return result;
} else {
throw new BadRequestException("当前浅货位被锁定或有正在入库的任务,请稍后在试!【"+shallowAttr.getStruct_code()+"");
}
}
// 浅货位有货
if (shallowAttr.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
// 有货未锁定生成移库任务
JSONObject jsonTask = new JSONObject();
jsonTask.put("point_code1", shallowAttr.getStruct_code());
jsonTask.put("point_code2", outAttr.getStruct_code());
jsonTask.put("vehicle_code", shallowAttr.getStoragevehicle_code());
jsonTask.put("vehicle_code2", outAttr.getStoragevehicle_code());
// 锁定起点
iStructattrService.update(
new UpdateWrapper<Structattr>().lambda()
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("移出锁"))
.eq(Structattr::getStruct_code, jsonTask.getString("point_code1"))
);
// 锁定终点
iStructattrService.update(
new UpdateWrapper<Structattr>().lambda()
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("移入锁"))
.eq(Structattr::getStruct_code, jsonTask.getString("point_code2"))
);
String task_id = moveOutMoveTask.create(jsonTask);
result.put("out_point",shallowAttr.getStruct_code());
result.put("task_id",task_id);
} else {
// 判断是否是当前移库单的移库
if (shallowAttr.getStruct_code().equals(dtlDao.getTurnin_struct_code())) {
result.put("out_point",outAttr.getStruct_code());
} else {
// 有货锁定
throw new BadRequestException("当前浅货位被锁定或有正在出库的任务,请稍后在试!【"+shallowAttr.getStruct_code()+"");
}
}
return result;
}
@Override
public void updateMstStatus(String moveinv_id) {
StIvtMoveinv mstDao = this.getById(moveinv_id);