rev:去掉阻挡移库功能

This commit is contained in:
2025-11-24 15:06:28 +08:00
parent 393745202a
commit 8e7e268a97
5 changed files with 25 additions and 237 deletions

View File

@@ -178,7 +178,7 @@ public class EmpVehicleOutTask extends AbstractTask {
// 更新起点 // 更新起点
iStructattrService.update( iStructattrService.update(
new UpdateWrapper<Structattr>().lambda() new UpdateWrapper<Structattr>().lambda()
.eq(Structattr::getStruct_code, taskObj.getPoint_code4()) .eq(Structattr::getStruct_code, taskObj.getPoint_code1())
.set(Structattr::getStoragevehicle_code, null) .set(Structattr::getStoragevehicle_code, null)
.set(Structattr::getIs_emptyvehicle, IOSConstant.IS_DELETE_NO) .set(Structattr::getIs_emptyvehicle, IOSConstant.IS_DELETE_NO)
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))

View File

@@ -1170,7 +1170,7 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv>
*/ */
// 调用校验方法 // 调用校验方法
String struct_code = ioStorInvDis.getStruct_code(); String struct_code = ioStorInvDis.getStruct_code();
iOutBillService.checkIsHinder(ioStorInvDis); // iOutBillService.checkIsHinder(ioStorInvDis);
//创建任务 //创建任务
JSONObject task_form = new JSONObject(); JSONObject task_form = new JSONObject();

View File

@@ -325,10 +325,10 @@ public class StIvtCheckmstServiceImpl extends ServiceImpl<StIvtCheckmstMapper, S
); );
// 判断是否阻挡 // 判断是否阻挡
JSONObject result = checkMove(dtlDao); // JSONObject result = checkMove(dtlDao);
JSONObject jsonTask = new JSONObject(); JSONObject jsonTask = new JSONObject();
jsonTask.put("point_code1", result.getString("out_point")); jsonTask.put("point_code1", dtlDao.getStruct_code());
jsonTask.put("point_code2", IOSConstant.CZW_POINT); jsonTask.put("point_code2", IOSConstant.CZW_POINT);
jsonTask.put("vehicle_code", dtlDao.getStoragevehicle_code()); jsonTask.put("vehicle_code", dtlDao.getStoragevehicle_code());
String task_id = checkMoveTask.create(jsonTask); String task_id = checkMoveTask.create(jsonTask);
@@ -338,13 +338,13 @@ public class StIvtCheckmstServiceImpl extends ServiceImpl<StIvtCheckmstMapper, S
dtlDao.setStatus(IOSEnum.CHECK_DTL_STATUS.code("移库中")); dtlDao.setStatus(IOSEnum.CHECK_DTL_STATUS.code("移库中"));
// 更新关联任务 // 更新关联任务
if (ObjectUtil.isNotEmpty(result.getString("task_id"))) { /*if (ObjectUtil.isNotEmpty(result.getString("task_id"))) {
iSchBaseTaskService.update( iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda() new UpdateWrapper<SchBaseTask>().lambda()
.set(SchBaseTask::getContact_task, task_id) .set(SchBaseTask::getContact_task, task_id)
.eq(SchBaseTask::getTask_id, result.getString("task_id")) .eq(SchBaseTask::getTask_id, result.getString("task_id"))
); );
} }*/
} }
iStIvtCheckdtlService.updateBatchById(dtlDaoList); iStIvtCheckdtlService.updateBatchById(dtlDaoList);
} }

View File

@@ -21,8 +21,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.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.util.AbstractTask; 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.TaskFactory;
import org.nl.wms.sch_manage.service.util.tasks.InsideDtlMoveTask;
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.IOSConstant;
import org.nl.wms.warehouse_management.enums.IOSEnum; import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.nl.wms.warehouse_management.service.IStIvtMoveinvService; import org.nl.wms.warehouse_management.service.IStIvtMoveinvService;
@@ -82,18 +80,6 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl<StIvtMoveinvMapper, StI
@Autowired @Autowired
private TaskFactory taskFactory; private TaskFactory taskFactory;
/**
* 移库阻挡移库任务类
*/
@Autowired
private MoveOutMoveTask moveOutMoveTask;
/**
* 库内移库任务类子任务
*/
@Autowired
private InsideDtlMoveTask insideDtlMoveTask;
@Override @Override
public IPage<JSONObject> queryAll(Map whereJson, PageQuery page) { public IPage<JSONObject> queryAll(Map whereJson, PageQuery page) {
return this.baseMapper.queryAllByPage(new Page<>(page.getPage() + 1, page.getSize()), return this.baseMapper.queryAllByPage(new Page<>(page.getPage() + 1, page.getSize()),
@@ -312,28 +298,16 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl<StIvtMoveinvMapper, StI
String task_id = ""; String task_id = "";
AbstractTask task = taskFactory.getTask(IOSEnum.MOVE_CONFIG_CODE.code(mstDao.getBill_type())); AbstractTask task = taskFactory.getTask(IOSEnum.MOVE_CONFIG_CODE.code(mstDao.getBill_type()));
for (StIvtMoveinvdtl dtlDao : dtlList) { for (StIvtMoveinvdtl dtlDao : dtlList) {
if(mstDao.getBill_type().equals(IOSEnum.MOVE_BILL_TYPE.code("库内移库"))) { if (mstDao.getBill_type().equals(IOSEnum.MOVE_BILL_TYPE.code("库内移库"))) {
// 库内移库任务下发 // 库内移库任务下发
task_id = checkMoveInside(dtlDao,task); task_id = checkMoveInside(dtlDao, task);
} else { } else {
// 判断是否阻挡
JSONObject result = checkMove(dtlDao);
JSONObject jsonTask = new JSONObject(); JSONObject jsonTask = new JSONObject();
jsonTask.put("point_code1", result.getString("out_point")); jsonTask.put("point_code1", dtlDao.getTurnout_struct_code());
jsonTask.put("point_code2", dtlDao.getTurnin_struct_code()); jsonTask.put("point_code2", dtlDao.getTurnin_struct_code());
jsonTask.put("vehicle_code", dtlDao.getStoragevehicle_code()); jsonTask.put("vehicle_code", dtlDao.getStoragevehicle_code());
jsonTask.put("vehicle_code2", dtlDao.getStoragevehicle_code2()); jsonTask.put("vehicle_code2", dtlDao.getStoragevehicle_code2());
task_id = task.create(jsonTask); task_id = task.create(jsonTask);
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"))
);
}
} }
// 更新明细任务标识 // 更新明细任务标识
@@ -351,8 +325,9 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl<StIvtMoveinvMapper, StI
/** /**
* 库内移库任务下发 * 库内移库任务下发
*
* @param dtlDao 移库明细 * @param dtlDao 移库明细
* @param task 任务类 * @param task 任务类
* @return task_id * @return task_id
*/ */
private String checkMoveInside(StIvtMoveinvdtl dtlDao, AbstractTask task) { private String checkMoveInside(StIvtMoveinvdtl dtlDao, AbstractTask task) {
@@ -362,181 +337,7 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl<StIvtMoveinvMapper, StI
jsonTask.put("point_code2", dtlDao.getTurnin_struct_code()); jsonTask.put("point_code2", dtlDao.getTurnin_struct_code());
jsonTask.put("vehicle_code", dtlDao.getStoragevehicle_code()); jsonTask.put("vehicle_code", dtlDao.getStoragevehicle_code());
jsonTask.put("vehicle_code2", dtlDao.getStoragevehicle_code2()); jsonTask.put("vehicle_code2", dtlDao.getStoragevehicle_code2());
String task_id = task.create(jsonTask); return task.create(jsonTask);
Structattr startAttr = iStructattrService.getByCode(dtlDao.getTurnout_struct_code());
Structattr endAttr = iStructattrService.getByCode(dtlDao.getTurnin_struct_code());
// ---------- 判断是否是深浅货位互换 ----------
if (startAttr.getBlock_num().equals(endAttr.getBlock_num())
&& startAttr.getCol_num().equals(endAttr.getCol_num())
&& startAttr.getLayer_num().equals(endAttr.getLayer_num())
) {
// 两个货位都必须有货
if (ObjectUtil.isNotEmpty(startAttr.getStoragevehicle_code()) && ObjectUtil.isNotEmpty(endAttr.getStoragevehicle_code())) {
// 子任务1
createInsideDtlMoveTask(startAttr.getStruct_code(),endAttr.getStruct_code(),startAttr.getStoragevehicle_code(),task_id);
// 子任务2
createInsideDtlMoveTask(endAttr.getStruct_code(),startAttr.getStruct_code(),endAttr.getStoragevehicle_code(),task_id);
return task_id;
} else {
throw new BadRequestException("当前仓位互换会造成仓位空洞,不允许互换!");
}
}
// ---------- 判断起点是否阻挡 ----------
// 判断起点深浅货位
if (startAttr.getPlacement_type().equals(IOSEnum.PLACEMENT_TYPE.code("深货位"))) {
// 查询对应浅货位
Structattr shallowStartAttr = iStructattrService.getOne(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getBlock_num, startAttr.getBlock_num())
.eq(Structattr::getCol_num, startAttr.getCol_num())
.eq(Structattr::getLayer_num, startAttr.getLayer_num())
.eq(Structattr::getPlacement_type, IOSEnum.PLACEMENT_TYPE.code("浅货位"))
);
// 判断浅货位是否被锁定
if (!shallowStartAttr.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
throw new BadRequestException("当前起点仓位对应的浅货位【"+shallowStartAttr.getStruct_code()+"】被锁定,无法下发任务");
}
if (ObjectUtil.isNotEmpty(shallowStartAttr.getStoragevehicle_code())) {
// 有货:创建子任务
createInsideDtlMoveTask(shallowStartAttr.getStruct_code(),shallowStartAttr.getStruct_code(),shallowStartAttr.getStoragevehicle_code(),task_id);
}
}
// ---------- 判断终点是否阻挡 ----------
if (endAttr.getPlacement_type().equals(IOSEnum.PLACEMENT_TYPE.code("深货位"))) {
// 查询对应浅货位
Structattr shallowStartAttr = iStructattrService.getOne(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getBlock_num, endAttr.getBlock_num())
.eq(Structattr::getCol_num, endAttr.getCol_num())
.eq(Structattr::getLayer_num, endAttr.getLayer_num())
.eq(Structattr::getPlacement_type, IOSEnum.PLACEMENT_TYPE.code("浅货位"))
);
// 判断浅货位是否被锁定
if (!shallowStartAttr.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
throw new BadRequestException("当前终点仓位对应的浅货位【"+shallowStartAttr.getStruct_code()+"】被锁定,无法下发任务");
}
if (ObjectUtil.isNotEmpty(shallowStartAttr.getStoragevehicle_code())) {
// 有货:创建子任务
createInsideDtlMoveTask(shallowStartAttr.getStruct_code(),shallowStartAttr.getStruct_code(),shallowStartAttr.getStoragevehicle_code(),task_id);
}
} else {
// 查询对应深货位
Structattr attr = iStructattrService.getOne(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getBlock_num, endAttr.getBlock_num())
.eq(Structattr::getCol_num, endAttr.getCol_num())
.eq(Structattr::getLayer_num, endAttr.getLayer_num())
.eq(Structattr::getPlacement_type, IOSEnum.PLACEMENT_TYPE.code("深货位"))
);
// 判断深货位是否被锁定
if (!attr.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
throw new BadRequestException("当前终点仓位对应的深货位【"+attr.getStruct_code()+"】被锁定,无法下发任务");
}
// 判断是否有货
if (ObjectUtil.isEmpty(attr.getStoragevehicle_code())) {
throw new BadRequestException("移库会造成仓位【"+attr.getStruct_code()+"】为空洞,无法下发任务");
}
}
// ---------- 创建起点任务 ----------
createInsideDtlMoveTask(startAttr.getStruct_code(),endAttr.getStruct_code(),startAttr.getStoragevehicle_code(),task_id);
// ---------- 创建终点任务 ----------
if (ObjectUtil.isNotEmpty(endAttr.getStoragevehicle_code())) {
// 终点不为空则需要创建终点到起点的任务
createInsideDtlMoveTask(endAttr.getStruct_code(),startAttr.getStruct_code(),endAttr.getStoragevehicle_code(),task_id);
}
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",outAttr.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 @Override
@@ -566,14 +367,4 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl<StIvtMoveinvMapper, StI
mstDao.setUpdate_time(DateUtil.now()); mstDao.setUpdate_time(DateUtil.now());
this.updateById(mstDao); this.updateById(mstDao);
} }
private void createInsideDtlMoveTask(String point_code1, String point_code2, String vehicle_code, String contact_task) {
JSONObject jsonTask = new JSONObject();
jsonTask.put("point_code1", point_code1);
jsonTask.put("point_code2", point_code2);
jsonTask.put("vehicle_code", vehicle_code);
jsonTask.put("contact_task", contact_task);
insideDtlMoveTask.create(jsonTask);
}
} }

View File

@@ -3,7 +3,6 @@ package org.nl.wms.warehouse_management.service.impl;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -12,7 +11,6 @@ import org.nl.common.exception.BadRequestException;
import org.nl.wms.basedata_manage.service.IStructattrService; 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.Structattr;
import org.nl.wms.sch_manage.service.ISchBaseTaskService; import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.dao.mapper.SchBaseTaskMapper; import org.nl.wms.sch_manage.service.dao.mapper.SchBaseTaskMapper;
import org.nl.wms.sch_manage.service.util.tasks.EmpOutMoveTask; import org.nl.wms.sch_manage.service.util.tasks.EmpOutMoveTask;
import org.nl.wms.sch_manage.service.util.tasks.EmpVehicleOutTask; import org.nl.wms.sch_manage.service.util.tasks.EmpVehicleOutTask;
@@ -79,9 +77,12 @@ public class VehicleOutServiceImpl implements VehicleOutService {
public void create(JSONObject whereJson) { public void create(JSONObject whereJson) {
// 根据库区找空载具 // 根据库区找空载具
List<Structattr> attrList = autoDivStruct(whereJson); List<Structattr> attrList = autoDivStruct(whereJson);
if (ObjectUtil.isEmpty(attrList)) {
throw new BadRequestException("暂时没有可用的空载具!");
}
Structattr structattr = new Structattr(); Structattr structattr = attrList.get(0);
String point_code1 = ""; /*String point_code1 = "";
for (Structattr attrDao : attrList) { for (Structattr attrDao : attrList) {
// 判断是深浅货位 // 判断是深浅货位
if (attrDao.getPlacement_type().equals(IOSEnum.PLACEMENT_TYPE.code("浅货位"))) { if (attrDao.getPlacement_type().equals(IOSEnum.PLACEMENT_TYPE.code("浅货位"))) {
@@ -126,40 +127,36 @@ public class VehicleOutServiceImpl implements VehicleOutService {
} }
} }
} }
} }*/
if (ObjectUtil.isEmpty(structattr)) {
throw new BadRequestException("暂时没有可用的空载具!");
}
// 锁定仓位 // 锁定仓位
iStructattrService.update( iStructattrService.update(
new UpdateWrapper<Structattr>().lambda() new UpdateWrapper<Structattr>().lambda()
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("空托盘出库锁")) .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("空托盘出库锁"))
.eq(Structattr::getStruct_code, structattr.getStruct_code()) .eq(Structattr::getStruct_code, structattr.getStruct_code())
); );
// 创建任务 // 创建任务
JSONObject jsonTask = new JSONObject(); JSONObject jsonTask = new JSONObject();
jsonTask.put("point_code1", point_code1); jsonTask.put("point_code1", structattr.getStruct_code());
jsonTask.put("point_code2", IOSConstant.CZW_POINT); jsonTask.put("point_code2", IOSConstant.CZW_POINT);
// 判断终点是否是称重位 // 判断终点是否是称重位
jsonTask.put("point_code3", whereJson.getString("point_code").equals(IOSConstant.CZW_POINT) jsonTask.put("point_code3", whereJson.getString("point_code").equals(IOSConstant.CZW_POINT)
? "" : whereJson.getString("point_code") ? "" : whereJson.getString("point_code")
); );
// 用于任务完成时更新原仓位 // 用于任务完成时更新原仓位
jsonTask.put("point_code4", structattr.getStruct_code()); // jsonTask.put("point_code4", structattr.getStruct_code());
jsonTask.put("vehicle_code", structattr.getStoragevehicle_code()); // jsonTask.put("vehicle_code", structattr.getStoragevehicle_code());
String task_id = empVehicleOutTask.create(jsonTask); String task_id = empVehicleOutTask.create(jsonTask);
if (ObjectUtil.isNotEmpty(structattr.getTask_id())) { /* if (ObjectUtil.isNotEmpty(structattr.getTask_id())) {
// 更新空载具出库任务类ext_group_data字段 // 更新空载具出库任务类ext_group_data字段
iSchBaseTaskService.update( iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda() new UpdateWrapper<SchBaseTask>().lambda()
.set(SchBaseTask::getExt_group_data, task_id) .set(SchBaseTask::getExt_group_data, task_id)
.eq(SchBaseTask::getTask_id, structattr.getTask_id()) .eq(SchBaseTask::getTask_id, structattr.getTask_id())
); );
} }*/
} }
/** /**