rev:空载具出入库分配逻辑修改,料箱出入库分配逻辑修改
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package org.nl.wms.basedata_manage.service.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
@@ -305,4 +306,10 @@ public class Structattr implements Serializable {
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 备注任务标识
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private String task_id;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,221 @@
|
||||
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.ACSTaskTypeEnum;
|
||||
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.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 空载具出库移库任务类
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2025-09-12
|
||||
*/
|
||||
@Component(value = "EmpOutMoveTask")
|
||||
@TaskType("EmpOutMoveTask")
|
||||
public class EmpOutMoveTask extends AbstractTask {
|
||||
|
||||
/**
|
||||
* 任务服务类
|
||||
*/
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
|
||||
/**
|
||||
* 仓位服务
|
||||
*/
|
||||
@Autowired
|
||||
private IStructattrService iStructattrService;
|
||||
|
||||
@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(EmpOutMoveTask.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("该任务不存在");
|
||||
}
|
||||
if (Integer.parseInt(taskObj.getTask_status()) > Integer.parseInt(TaskStatus.CREATE.getCode())) {
|
||||
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);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void cancelTask(SchBaseTask taskObj) {
|
||||
|
||||
// 取消空载具出库任务
|
||||
SchBaseTask empTask = taskService.getById(taskObj.getExt_group_data());
|
||||
empTask.setRemark("已取消");
|
||||
empTask.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
taskService.updateById(empTask);
|
||||
|
||||
|
||||
// 更新起点
|
||||
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);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,250 @@
|
||||
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.ACSTaskTypeEnum;
|
||||
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.dao.IOStorInvDis;
|
||||
import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 出库单出库移库任务类
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2025-09-12
|
||||
*/
|
||||
@Component(value = "IosOutMoveTask")
|
||||
@TaskType("IosOutMoveTask")
|
||||
public class IosOutMoveTask extends AbstractTask {
|
||||
|
||||
/**
|
||||
* 任务服务类
|
||||
*/
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
|
||||
/**
|
||||
* 仓位服务
|
||||
*/
|
||||
@Autowired
|
||||
private IStructattrService iStructattrService;
|
||||
|
||||
/*
|
||||
* 分配明细mapper
|
||||
*/
|
||||
@Resource
|
||||
private IOStorInvDisMapper ioStorInvDisMapper;
|
||||
|
||||
@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(IosOutMoveTask.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.setExt_group_data(json.getString("ext_group_data"));
|
||||
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("该任务不存在");
|
||||
}
|
||||
if (Integer.parseInt(taskObj.getTask_status()) > Integer.parseInt(TaskStatus.CREATE.getCode())) {
|
||||
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::getInv_id, endStruct.getInv_id())
|
||||
.set(Structattr::getInv_code, endStruct.getInv_code())
|
||||
.set(Structattr::getInv_type, endStruct.getInv_type())
|
||||
.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::getInv_id, null)
|
||||
.set(Structattr::getInv_code, null)
|
||||
.set(Structattr::getInv_type, null)
|
||||
.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);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void cancelTask(SchBaseTask taskObj) {
|
||||
// 查询终点仓位信息
|
||||
Structattr attrDao = iStructattrService.getByCode(taskObj.getPoint_code2());
|
||||
|
||||
// 还原出库分配明细仓位 / 取消分配明细任务
|
||||
IOStorInvDis ioStorInvDis = ioStorInvDisMapper.selectById(taskObj.getExt_group_data());
|
||||
// 取消分配明细任务
|
||||
SchBaseTask disTask = taskService.getById(ioStorInvDis.getTask_id());
|
||||
disTask.setRemark("已取消");
|
||||
disTask.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
taskService.updateById(disTask);
|
||||
|
||||
ioStorInvDis.setStruct_id(attrDao.getStruct_id());
|
||||
ioStorInvDis.setStruct_code(attrDao.getStruct_code());
|
||||
ioStorInvDis.setStruct_name(attrDao.getStruct_name());
|
||||
ioStorInvDis.setTask_id("");
|
||||
ioStorInvDis.setPoint_code("");
|
||||
ioStorInvDis.setIs_issued(IOSConstant.ZERO);
|
||||
ioStorInvDis.setWork_status(IOSEnum.INBILL_DIS_STATUS.code("未生成"));
|
||||
ioStorInvDisMapper.updateById(ioStorInvDis);
|
||||
|
||||
// 更新起点
|
||||
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);
|
||||
}
|
||||
}
|
||||
@@ -73,6 +73,9 @@ public enum IOSEnum {
|
||||
"库存锁","7", "回库锁","8", "其他锁","99"
|
||||
)),
|
||||
|
||||
// 仓位类型
|
||||
PLACEMENT_TYPE(MapOf.of("深货位", "1", "浅货位", "2")),
|
||||
|
||||
// 库区编码
|
||||
SECT_CODE(MapOf.of("合格区", "HG01", "待检区", "DJ01", "不合格区", "BHG01")),
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ import org.nl.common.domain.query.PageQuery;
|
||||
import org.nl.wms.basedata_manage.service.dto.MdPbStoragevehicleextDto;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
|
||||
import org.nl.wms.warehouse_management.service.dao.IOStorInv;
|
||||
import org.nl.wms.warehouse_management.service.dao.IOStorInvDis;
|
||||
import org.nl.wms.warehouse_management.service.dto.IOStorInvDisDto;
|
||||
import org.nl.wms.warehouse_management.service.dto.IOStorInvDtlDto;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
@@ -176,4 +177,19 @@ public interface IOutBillService extends IService<IOStorInv> {
|
||||
* @return
|
||||
*/
|
||||
List<Map<String, Object>> getIoDisDtl(JSONObject param);
|
||||
|
||||
/**
|
||||
* 一键设置:创建任务
|
||||
* @param ioStorInvDis 分配明细实体类
|
||||
* @param point_code 出库点位
|
||||
* @param ioStorInv 主表实体类
|
||||
*/
|
||||
void createTask(IOStorInvDis ioStorInvDis, String point_code, IOStorInv ioStorInv);
|
||||
|
||||
/**
|
||||
* 一键设置:下发任务校验是否阻挡
|
||||
* @param ioStorInvDis 分配明细实体类
|
||||
* @return struct_code 仓位编码
|
||||
*/
|
||||
String checkIsHinder(IOStorInvDis ioStorInvDis);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.nl.wms.warehouse_management.service.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
@@ -132,4 +133,34 @@ public class IOStorInvDis implements Serializable {
|
||||
*/
|
||||
private BigDecimal check_qty;
|
||||
|
||||
/**
|
||||
* 仓位放置类型
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private String placement_type;
|
||||
|
||||
/**
|
||||
* 仓位巷道
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private String block_num;
|
||||
|
||||
/**
|
||||
* 仓位排
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private BigDecimal row_num;
|
||||
|
||||
/**
|
||||
* 仓位列
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private BigDecimal col_num;
|
||||
|
||||
/**
|
||||
* 仓位层
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private BigDecimal layer_num;
|
||||
|
||||
}
|
||||
|
||||
@@ -25,4 +25,11 @@ public interface IOStorInvDisMapper extends BaseMapper<IOStorInvDis> {
|
||||
List<IOStorInvDisDto> queryOutBillDisDtl(@Param("params") Map whereJson);
|
||||
|
||||
List<Map<String, Object>> getIoDisDtl(@Param("param") JSONObject param);
|
||||
|
||||
/**
|
||||
* 获取下发任务的分配明细
|
||||
* @param param /
|
||||
* @return List<IOStorInvDis>
|
||||
*/
|
||||
List<IOStorInvDis> getListDisSend(@Param("param") JSONObject param);
|
||||
}
|
||||
|
||||
@@ -101,4 +101,26 @@
|
||||
ORDER BY ios.bill_code, dis.seq_no ASC
|
||||
</select>
|
||||
|
||||
<select id="getListDisSend" resultType="org.nl.wms.warehouse_management.service.dao.IOStorInvDis">
|
||||
SELECT
|
||||
dis.*,
|
||||
attr.placement_type,
|
||||
attr.row_num,
|
||||
attr.col_num,
|
||||
attr.layer_num,
|
||||
attr.block_num
|
||||
FROM
|
||||
st_ivt_iostorinvdis dis
|
||||
LEFT JOIN st_ivt_structattr attr ON attr.struct_id = dis.struct_id
|
||||
<where>
|
||||
dis.work_status = '00'
|
||||
|
||||
<if test="param.iostorinv_id != null and param.iostorinv_id != ''">
|
||||
AND dis.iostorinv_id = #{param.iostorinv_id}
|
||||
</if>
|
||||
|
||||
</where>
|
||||
ORDER BY dis.is_check ASC, attr.placement_type DESC
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -19,11 +19,13 @@ 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.config.SpringContextHolder;
|
||||
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
|
||||
import org.nl.wms.basedata_manage.service.IBsrealStorattrService;
|
||||
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleextService;
|
||||
import org.nl.wms.basedata_manage.service.IStructattrService;
|
||||
import org.nl.wms.basedata_manage.service.dao.BsrealStorattr;
|
||||
import org.nl.wms.basedata_manage.service.dao.Structattr;
|
||||
import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper;
|
||||
import org.nl.wms.basedata_manage.service.dto.MdPbStoragevehicleextDto;
|
||||
import org.nl.wms.pdm_manage.enums.BomEnum;
|
||||
@@ -36,6 +38,7 @@ import org.nl.wms.sch_manage.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch_manage.service.dao.mapper.SchBasePointMapper;
|
||||
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.IosOutMoveTask;
|
||||
import org.nl.wms.warehouse_management.enums.IOSConstant;
|
||||
import org.nl.wms.warehouse_management.enums.IOSEnum;
|
||||
import org.nl.wms.warehouse_management.service.IOutBillService;
|
||||
@@ -131,6 +134,18 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv>
|
||||
@Resource
|
||||
private IPdmBomCallMaterialService iPdmBomCallMaterialService;
|
||||
|
||||
/**
|
||||
* 出库单服务
|
||||
*/
|
||||
@Autowired
|
||||
private IOutBillService iOutBillService;
|
||||
|
||||
/**
|
||||
* 出库单出库移库任务类
|
||||
*/
|
||||
@Autowired
|
||||
private IosOutMoveTask iosOutMoveTask;
|
||||
|
||||
/**
|
||||
* 任务工厂服务
|
||||
*/
|
||||
@@ -212,6 +227,7 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv>
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void update(JSONObject whereJson) {
|
||||
String iostorinv_id = (String) whereJson.get("iostorinv_id");
|
||||
|
||||
@@ -268,6 +284,7 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv>
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void deleteAll(String[] ids) {
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String nickName = SecurityUtils.getCurrentNickName();
|
||||
@@ -782,6 +799,7 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv>
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void autoCancel(JSONObject whereJson) {
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String nickName = SecurityUtils.getCurrentNickName();
|
||||
@@ -1010,6 +1028,7 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv>
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void oneCancel(JSONObject whereJson) {
|
||||
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
@@ -1112,50 +1131,139 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv>
|
||||
throw new BadRequestException("未查到相关出库单");
|
||||
}
|
||||
|
||||
List<IOStorInvDis> ioStorInvDisList = ioStorInvDisMapper.selectList(new LambdaQueryWrapper<>(IOStorInvDis.class)
|
||||
.eq(IOStorInvDis::getIostorinv_id, iostorinv_id)
|
||||
.eq(IOStorInvDis::getIs_issued, BaseDataEnum.IS_YES_NOT.code("否"))
|
||||
.and(wrapper -> wrapper.isNotNull(IOStorInvDis::getStruct_code).ne(IOStorInvDis::getStruct_code, ""))
|
||||
.orderByAsc(IOStorInvDis::getIs_check)
|
||||
List<IOStorInvDis> ioStorInvDisList = ioStorInvDisMapper.getListDisSend(whereJson);
|
||||
|
||||
);
|
||||
if (ObjectUtil.isEmpty(ioStorInvDisList)) {
|
||||
throw new BadRequestException("当前没有可设置的分配明细");
|
||||
}
|
||||
|
||||
// 根据任务类创建任务
|
||||
IOStorInv iosMstDao = ioStorInvMapper.selectById(ioStorInvDisList.get(0).getIostorinv_id());
|
||||
for (IOStorInvDis ioStorInvDis : ioStorInvDisList) {
|
||||
//创建任务
|
||||
JSONObject task_form = new JSONObject();
|
||||
task_form.put("task_type", "STOutTask");
|
||||
task_form.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
|
||||
task_form.put("point_code1", ioStorInvDis.getStruct_code());
|
||||
task_form.put("point_code2", point_code);
|
||||
task_form.put("vehicle_code", ioStorInvDis.getStoragevehicle_code());
|
||||
task_form.put("material_id", ioStorInvDis.getMaterial_id());
|
||||
task_form.put("material_qty", ioStorInvDis.getPlan_qty());
|
||||
if (ioStorInvDis.getIs_check().equals(IOSConstant.ONE)) {
|
||||
task_form.put("is_wait", IOSConstant.ONE);
|
||||
} else {
|
||||
task_form.put("is_wait", IOSConstant.ZERO);
|
||||
}
|
||||
|
||||
AbstractTask task = taskFactory.getTask(IOSEnum.OUT_CONFIG_CODE.code(iosMstDao.getBill_type()));
|
||||
String task_id = task.create(task_form);
|
||||
|
||||
//分配明细表更新任务相关数据
|
||||
IOStorInvDis dis = new IOStorInvDis();
|
||||
dis.setIostorinvdis_id(ioStorInvDis.getIostorinvdis_id());
|
||||
dis.setWork_status(IOSEnum.INBILL_DIS_STATUS.code("生成"));
|
||||
dis.setTask_id(task_id);
|
||||
dis.setIs_issued(BaseDataEnum.IS_YES_NOT.code("是"));
|
||||
dis.setPoint_code(point_code);
|
||||
ioStorInvDisMapper.updateById(dis);
|
||||
// 创建任务
|
||||
iOutBillService.createTask(ioStorInvDis,point_code,ioStorInv);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createTask(IOStorInvDis ioStorInvDis, String point_code, IOStorInv ioStorInv) {
|
||||
/*
|
||||
* 判断是否是深浅货位
|
||||
* 1.浅货位:直接创建任务
|
||||
* 2.深货位
|
||||
* 1):判断浅货位没货:直接创建任务
|
||||
* 2):浅货位有货且未锁定:生成深浅货位互换移库后在下发出库任务
|
||||
* 3):浅货位有货且锁定:判断是否此单据下的出库任务,如果是则直接生成出库任务
|
||||
* 如果不是则报错提示
|
||||
*/
|
||||
// 调用校验方法
|
||||
String struct_code = iOutBillService.checkIsHinder(ioStorInvDis);
|
||||
|
||||
//创建任务
|
||||
JSONObject task_form = new JSONObject();
|
||||
task_form.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
|
||||
task_form.put("point_code1", struct_code);
|
||||
task_form.put("point_code2", point_code);
|
||||
task_form.put("vehicle_code", ioStorInvDis.getStoragevehicle_code());
|
||||
task_form.put("material_id", ioStorInvDis.getMaterial_id());
|
||||
task_form.put("material_qty", ioStorInvDis.getPlan_qty());
|
||||
if (ioStorInvDis.getIs_check().equals(IOSConstant.ONE)) {
|
||||
task_form.put("is_wait", IOSConstant.ONE);
|
||||
} else {
|
||||
task_form.put("is_wait", IOSConstant.ZERO);
|
||||
}
|
||||
|
||||
AbstractTask task = taskFactory.getTask(IOSEnum.OUT_CONFIG_CODE.code(ioStorInv.getBill_type()));
|
||||
String task_id = task.create(task_form);
|
||||
|
||||
//分配明细表更新任务相关数据
|
||||
IOStorInvDis dis = new IOStorInvDis();
|
||||
dis.setIostorinvdis_id(ioStorInvDis.getIostorinvdis_id());
|
||||
dis.setWork_status(IOSEnum.INBILL_DIS_STATUS.code("生成"));
|
||||
dis.setTask_id(task_id);
|
||||
dis.setIs_issued(BaseDataEnum.IS_YES_NOT.code("是"));
|
||||
dis.setPoint_code(point_code);
|
||||
ioStorInvDisMapper.updateById(dis);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String checkIsHinder(IOStorInvDis ioStorInvDis) {
|
||||
// 返回仓位
|
||||
String struct_code;
|
||||
|
||||
// 1.判断仓位深浅货位
|
||||
if (ioStorInvDis.getPlacement_type().equals(IOSEnum.PLACEMENT_TYPE.code("浅货位"))) {
|
||||
// 浅货位直接生成任务
|
||||
return ioStorInvDis.getStruct_code();
|
||||
}
|
||||
|
||||
// 2.深货位:判断浅货位是否有货
|
||||
// 查询浅货位
|
||||
Structattr shallowAttr = iStructattrService.getOne(
|
||||
new QueryWrapper<Structattr>().lambda()
|
||||
.eq(Structattr::getBlock_num, ioStorInvDis.getBlock_num())
|
||||
.eq(Structattr::getCol_num, ioStorInvDis.getCol_num())
|
||||
.eq(Structattr::getLayer_num, ioStorInvDis.getLayer_num())
|
||||
.eq(Structattr::getPlacement_type, IOSEnum.PLACEMENT_TYPE.code("浅货位"))
|
||||
);
|
||||
if (ObjectUtil.isEmpty(shallowAttr)) {
|
||||
throw new BadRequestException("仓位【"+ioStorInvDis.getStruct_code()+"】对应的浅货位不存在,请检查数据!");
|
||||
}
|
||||
|
||||
// 判断浅货位是否有货
|
||||
if (ObjectUtil.isNotEmpty(shallowAttr.getStoragevehicle_code())) {
|
||||
// 判断是否被锁定
|
||||
if (shallowAttr.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
|
||||
// 未锁定:生成出库移库任务
|
||||
JSONObject jsonMoveTask = new JSONObject();
|
||||
jsonMoveTask.put("point_code1", shallowAttr.getStruct_code());
|
||||
jsonMoveTask.put("point_code2", ioStorInvDis.getStruct_code());
|
||||
jsonMoveTask.put("vehicle_code", shallowAttr.getStoragevehicle_code());
|
||||
jsonMoveTask.put("vehicle_code2", ioStorInvDis.getStoragevehicle_code());
|
||||
jsonMoveTask.put("ext_group_data", ioStorInvDis.getIostorinvdis_id());
|
||||
iosOutMoveTask.create(jsonMoveTask);
|
||||
|
||||
// 更新起点锁类型
|
||||
iStructattrService.update(
|
||||
new UpdateWrapper<Structattr>().lambda()
|
||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("移出锁"))
|
||||
.eq(Structattr::getStruct_code, jsonMoveTask.getString("point_code1"))
|
||||
);
|
||||
// 更新终点锁类型
|
||||
iStructattrService.update(
|
||||
new UpdateWrapper<Structattr>().lambda()
|
||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("移入锁"))
|
||||
.eq(Structattr::getStruct_code, jsonMoveTask.getString("point_code2"))
|
||||
);
|
||||
// 更新分配明细新仓位
|
||||
ioStorInvDis.setStruct_id(shallowAttr.getStruct_id());
|
||||
ioStorInvDis.setStruct_code(shallowAttr.getStruct_code());
|
||||
ioStorInvDis.setStruct_name(shallowAttr.getStruct_name());
|
||||
ioStorInvDisMapper.updateById(ioStorInvDis);
|
||||
|
||||
struct_code = shallowAttr.getStruct_code();
|
||||
} else {
|
||||
// 被锁定:判断是否是本单据
|
||||
if (ObjectUtil.isNotEmpty(shallowAttr.getInv_id()) && shallowAttr.getInv_id().equals(ioStorInvDis.getIostorinv_id())) {
|
||||
// 相同单据出库任务:直接生成出库任务
|
||||
return ioStorInvDis.getStruct_code();
|
||||
} else {
|
||||
throw new BadRequestException("当前仓位【"+shallowAttr.getStruct_code()+"】被其他出库单据锁定或人工锁定,无法下发移库任务!");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 浅货位无货
|
||||
if (shallowAttr.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
|
||||
// 直接生成出库任务
|
||||
return ioStorInvDis.getStruct_code();
|
||||
} else {
|
||||
throw new BadRequestException("当前仓位【"+shallowAttr.getStruct_code()+"】有其他入库任务或人工锁定,无法下发出库任务,请等待任务完成或人工解锁!");
|
||||
}
|
||||
}
|
||||
|
||||
return struct_code;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void confirm(JSONObject whereJson) {
|
||||
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
|
||||
@@ -771,6 +771,7 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
|
||||
.eq(Structattr::getIs_delete, IOSConstant.IS_DELETE_NO)
|
||||
.eq(Structattr::getIs_used, IOSConstant.IS_DELETE_YES)
|
||||
.and(wrapper -> wrapper.isNull(Structattr::getStoragevehicle_code).or().eq(Structattr::getStoragevehicle_code, ""))
|
||||
.orderByAsc(Structattr::getPlacement_type)
|
||||
.orderByAsc(Structattr::getStruct_code)
|
||||
);
|
||||
|
||||
|
||||
@@ -139,6 +139,7 @@ public class VehicleInServiceImpl implements VehicleInService {
|
||||
.eq(Structattr::getIs_delete, IOSConstant.IS_DELETE_NO)
|
||||
.eq(Structattr::getIs_used, IOSConstant.IS_DELETE_YES)
|
||||
.and(wrapper -> wrapper.isNull(Structattr::getStoragevehicle_code).or().eq(Structattr::getStoragevehicle_code, ""))
|
||||
.orderByAsc(Structattr::getPlacement_type)
|
||||
.orderByAsc(Structattr::getStruct_code)
|
||||
);
|
||||
|
||||
|
||||
@@ -3,13 +3,18 @@ package org.nl.wms.warehouse_management.service.impl;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
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.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
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.dao.mapper.SchBaseTaskMapper;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.EmpOutMoveTask;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.EmpVehicleOutTask;
|
||||
import org.nl.wms.warehouse_management.enums.IOSConstant;
|
||||
import org.nl.wms.warehouse_management.enums.IOSEnum;
|
||||
@@ -34,11 +39,17 @@ import java.util.Map;
|
||||
public class VehicleOutServiceImpl implements VehicleOutService {
|
||||
|
||||
/**
|
||||
* 任务服务
|
||||
* 任务mapper
|
||||
*/
|
||||
@Autowired
|
||||
private SchBaseTaskMapper schBaseTaskMapper;
|
||||
|
||||
/**
|
||||
* 任务服务
|
||||
*/
|
||||
@Autowired
|
||||
private ISchBaseTaskService iSchBaseTaskService;
|
||||
|
||||
/**
|
||||
* 仓位服务
|
||||
*/
|
||||
@@ -51,6 +62,12 @@ public class VehicleOutServiceImpl implements VehicleOutService {
|
||||
@Resource
|
||||
private EmpVehicleOutTask empVehicleOutTask;
|
||||
|
||||
/**
|
||||
* 空载具出库移库任务类
|
||||
*/
|
||||
@Autowired
|
||||
private EmpOutMoveTask empOutMoveTask;
|
||||
|
||||
@Override
|
||||
public IPage<JSONObject> queryAll(Map whereJson, PageQuery page) {
|
||||
whereJson.put("config_code", EmpVehicleOutTask.class.getSimpleName());
|
||||
@@ -61,10 +78,55 @@ public class VehicleOutServiceImpl implements VehicleOutService {
|
||||
@Transactional
|
||||
public void create(JSONObject whereJson) {
|
||||
// 根据库区找空载具
|
||||
Structattr structattr = autoDivStruct(whereJson);
|
||||
// 锁定仓位
|
||||
structattr.setLock_type(IOSEnum.LOCK_TYPE.code("空托盘出库锁"));
|
||||
iStructattrService.updateById(structattr);
|
||||
List<Structattr> attrList = autoDivStruct(whereJson);
|
||||
|
||||
Structattr structattr = new Structattr();
|
||||
for (Structattr attrDao : attrList) {
|
||||
// 判断是深浅货位
|
||||
if (attrDao.getPlacement_type().equals(IOSEnum.PLACEMENT_TYPE.code("浅货位"))) {
|
||||
// 直接创建出库任务
|
||||
structattr = attrDao;
|
||||
break;
|
||||
} else {
|
||||
// 深货位:判断浅货位是否有货
|
||||
// 查询浅货位
|
||||
Structattr shallowAttr = iStructattrService.getOne(
|
||||
new QueryWrapper<Structattr>().lambda()
|
||||
.eq(Structattr::getBlock_num, attrDao.getBlock_num())
|
||||
.eq(Structattr::getCol_num, attrDao.getCol_num())
|
||||
.eq(Structattr::getLayer_num, attrDao.getLayer_num())
|
||||
.eq(Structattr::getPlacement_type, IOSEnum.PLACEMENT_TYPE.code("浅货位"))
|
||||
);
|
||||
if (ObjectUtil.isEmpty(shallowAttr)) {
|
||||
throw new BadRequestException("仓位【" + attrDao.getStruct_code() + "】对应的浅货位不存在,请检查数据!");
|
||||
}
|
||||
|
||||
if (ObjectUtil.isEmpty(shallowAttr.getStoragevehicle_code())) {
|
||||
// 浅货位空位
|
||||
if (shallowAttr.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
|
||||
// 直接创建出库任务
|
||||
structattr = attrDao;
|
||||
break;
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
|
||||
} else {
|
||||
// 浅货位有货
|
||||
if (shallowAttr.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
|
||||
// 创建移库任务
|
||||
structattr = createMoveTask(attrDao, shallowAttr);
|
||||
break;
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ObjectUtil.isEmpty(structattr)) {
|
||||
throw new BadRequestException("暂时没有可用的空载具!");
|
||||
}
|
||||
|
||||
// 创建任务
|
||||
JSONObject jsonTask = new JSONObject();
|
||||
@@ -72,10 +134,54 @@ public class VehicleOutServiceImpl implements VehicleOutService {
|
||||
jsonTask.put("point_code2", 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("vehicle_code", structattr.getStoragevehicle_code());
|
||||
empVehicleOutTask.create(jsonTask);
|
||||
String task_id = empVehicleOutTask.create(jsonTask);
|
||||
|
||||
if (ObjectUtil.isNotEmpty(structattr.getTask_id())) {
|
||||
// 更新空载具出库任务类ext_group_data字段
|
||||
iSchBaseTaskService.update(
|
||||
new UpdateWrapper<SchBaseTask>().lambda()
|
||||
.set(SchBaseTask::getExt_group_data, task_id)
|
||||
.eq(SchBaseTask::getTask_id, structattr.getTask_id())
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建移库任务
|
||||
*
|
||||
* @param attrDao 深货位
|
||||
* @param shallowAttr 浅货位
|
||||
* @return Structattr 新货位
|
||||
*/
|
||||
private Structattr createMoveTask(Structattr attrDao, Structattr shallowAttr) {
|
||||
// 锁定起点
|
||||
iStructattrService.update(
|
||||
new UpdateWrapper<Structattr>().lambda()
|
||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("移出锁"))
|
||||
.eq(Structattr::getStruct_code, shallowAttr.getStruct_code())
|
||||
);
|
||||
// 锁定终点
|
||||
iStructattrService.update(
|
||||
new UpdateWrapper<Structattr>().lambda()
|
||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("移入锁"))
|
||||
.eq(Structattr::getStruct_code, attrDao.getStruct_code())
|
||||
);
|
||||
|
||||
// 创建移库任务
|
||||
JSONObject jsonMoveTask = new JSONObject();
|
||||
jsonMoveTask.put("point_code1", shallowAttr.getStruct_code());
|
||||
jsonMoveTask.put("point_code2", attrDao.getStruct_code());
|
||||
jsonMoveTask.put("vehicle_code", shallowAttr.getStoragevehicle_code());
|
||||
jsonMoveTask.put("vehicle_code2", attrDao.getStoragevehicle_code());
|
||||
|
||||
String task_id = empOutMoveTask.create(jsonMoveTask);
|
||||
shallowAttr.setTask_id(task_id);
|
||||
|
||||
shallowAttr.setStoragevehicle_code(attrDao.getStoragevehicle_code());
|
||||
return shallowAttr;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -84,24 +190,25 @@ public class VehicleOutServiceImpl implements VehicleOutService {
|
||||
* @param whereJson {
|
||||
* sect_code: 库区编码
|
||||
* }
|
||||
* @return Structattr 仓位实体类
|
||||
* @return List<Structattr> 仓位实体类即可
|
||||
*/
|
||||
private Structattr autoDivStruct(JSONObject whereJson) {
|
||||
private List<Structattr> autoDivStruct(JSONObject whereJson) {
|
||||
|
||||
// 根据库区查询对应载具
|
||||
List<Structattr> structattr = iStructattrService.list(new LambdaQueryWrapper<>(Structattr.class)
|
||||
List<Structattr> attrList = iStructattrService.list(new LambdaQueryWrapper<>(Structattr.class)
|
||||
.eq(Structattr::getSect_code, whereJson.getString("sect_code"))
|
||||
.eq(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||
.eq(Structattr::getIs_delete, IOSConstant.IS_DELETE_NO)
|
||||
.eq(Structattr::getIs_used, IOSConstant.IS_DELETE_YES)
|
||||
.eq(Structattr::getIs_emptyvehicle, IOSConstant.IS_DELETE_YES)
|
||||
.and(wrapper -> wrapper.isNotNull(Structattr::getStoragevehicle_code).or().ne(Structattr::getStoragevehicle_code, ""))
|
||||
.orderByDesc(Structattr::getPlacement_type)
|
||||
.orderByAsc(Structattr::getStruct_code)
|
||||
);
|
||||
|
||||
if (ObjectUtil.isEmpty(structattr)) {
|
||||
throw new BadRequestException("未找到满足的仓位");
|
||||
if (ObjectUtil.isEmpty(attrList)) {
|
||||
throw new BadRequestException("库内没有空载具");
|
||||
}
|
||||
return structattr.get(0);
|
||||
return attrList;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user