32 changed files with 892 additions and 83 deletions
@ -0,0 +1,49 @@ |
|||||
|
package org.nl.wms.pda.ios_manage.controller; |
||||
|
|
||||
|
|
||||
|
import cn.dev33.satoken.annotation.SaIgnore; |
||||
|
import com.alibaba.fastjson.JSONObject; |
||||
|
import lombok.RequiredArgsConstructor; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
import org.nl.common.logging.annotation.Log; |
||||
|
import org.nl.wms.pda.ios_manage.service.PdaEmpVehicleService; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.http.HttpStatus; |
||||
|
import org.springframework.http.ResponseEntity; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 手持空托盘管理 控制层 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author Liuxy |
||||
|
* @since 2025-08-05 |
||||
|
*/ |
||||
|
@RestController |
||||
|
@RequiredArgsConstructor |
||||
|
@RequestMapping("/api/pda/empVehicle") |
||||
|
@Slf4j |
||||
|
public class PdaEmpVehicleController { |
||||
|
|
||||
|
@Autowired |
||||
|
private PdaEmpVehicleService pdaEmpVehicleService; |
||||
|
|
||||
|
@PostMapping("/in") |
||||
|
@Log("空托盘入库") |
||||
|
@SaIgnore |
||||
|
public ResponseEntity<Object> empVehicleIn(@RequestBody JSONObject whereJson) { |
||||
|
return new ResponseEntity<>(pdaEmpVehicleService.empVehicleIn(whereJson),HttpStatus.OK); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/out") |
||||
|
@Log("空托盘出库") |
||||
|
@SaIgnore |
||||
|
public ResponseEntity<Object> empVehicleOut(@RequestBody JSONObject whereJson) { |
||||
|
return new ResponseEntity<>(pdaEmpVehicleService.empVehicleOut(whereJson),HttpStatus.OK); |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,36 @@ |
|||||
|
package org.nl.wms.pda.ios_manage.service; |
||||
|
|
||||
|
import com.alibaba.fastjson.JSONObject; |
||||
|
import org.nl.wms.pda.util.PdaResponse; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 手持空托盘管理 服务类 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author Liuxy |
||||
|
* @since 2025-08-05 |
||||
|
*/ |
||||
|
public interface PdaEmpVehicleService { |
||||
|
|
||||
|
/** |
||||
|
* 空托盘入库 |
||||
|
* @param whereJson { |
||||
|
* point_code: 起点 |
||||
|
* storagevehicle_code: 载具编码 |
||||
|
* |
||||
|
* } |
||||
|
* @return PdaResponse |
||||
|
*/ |
||||
|
PdaResponse empVehicleIn(JSONObject whereJson); |
||||
|
|
||||
|
/** |
||||
|
* |
||||
|
* @param whereJson { |
||||
|
* point_code: 终点 |
||||
|
* storagevehicle_type: 载具类型 |
||||
|
* } |
||||
|
* @return PdaResponse |
||||
|
*/ |
||||
|
PdaResponse empVehicleOut(JSONObject whereJson); |
||||
|
} |
@ -0,0 +1,186 @@ |
|||||
|
package org.nl.wms.pda.ios_manage.service.impl; |
||||
|
|
||||
|
import cn.hutool.core.util.ObjectUtil; |
||||
|
import com.alibaba.fastjson.JSONObject; |
||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
|
import org.nl.common.exception.BadRequestException; |
||||
|
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService; |
||||
|
import org.nl.wms.basedata_manage.service.IStructattrService; |
||||
|
import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo; |
||||
|
import org.nl.wms.basedata_manage.service.dao.Structattr; |
||||
|
import org.nl.wms.pda.ios_manage.service.PdaEmpVehicleService; |
||||
|
import org.nl.wms.pda.util.PdaResponse; |
||||
|
import org.nl.wms.sch_manage.service.util.tasks.EmpVehicleInTask; |
||||
|
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; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.transaction.annotation.Transactional; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 手持空托盘管理 实现类 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author Liuxy |
||||
|
* @since 2025-08-05 |
||||
|
*/ |
||||
|
@Service |
||||
|
public class PdaEmpVehicleServiceImpl implements PdaEmpVehicleService { |
||||
|
|
||||
|
/** |
||||
|
* 载具服务 |
||||
|
*/ |
||||
|
@Autowired |
||||
|
private IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService; |
||||
|
|
||||
|
/** |
||||
|
* 仓位服务 |
||||
|
*/ |
||||
|
@Autowired |
||||
|
private IStructattrService iStructattrService; |
||||
|
|
||||
|
/** |
||||
|
* 载具入库任务类 |
||||
|
*/ |
||||
|
@Autowired |
||||
|
private EmpVehicleInTask empVehicleInTask; |
||||
|
|
||||
|
/** |
||||
|
* 载具出库任务类 |
||||
|
*/ |
||||
|
@Autowired |
||||
|
private EmpVehicleOutTask empVehicleOutTask; |
||||
|
|
||||
|
@Override |
||||
|
@Transactional |
||||
|
public PdaResponse empVehicleIn(JSONObject whereJson) { |
||||
|
// 基础校验
|
||||
|
MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getByCode(whereJson.getString("storagevehicle_code")); |
||||
|
if (ObjectUtil.isEmpty(vehicleDao)) { |
||||
|
throw new BadRequestException("载具不存在!【" + whereJson.getString("storagevehicle_code") + "】"); |
||||
|
} |
||||
|
if (ObjectUtil.isEmpty(whereJson.getString("point_code"))) { |
||||
|
throw new BadRequestException("起点不能为空!"); |
||||
|
} |
||||
|
|
||||
|
// 根据托盘类型,尺寸大小找对应入库货位
|
||||
|
Structattr attrDao = queryInPoint(vehicleDao); |
||||
|
if (ObjectUtil.isEmpty(attrDao)) { |
||||
|
throw new BadRequestException("仓位不足或条件不满足!"); |
||||
|
} |
||||
|
|
||||
|
// 锁定终点
|
||||
|
attrDao.setLock_type(IOSEnum.LOCK_TYPE.code("空托盘入库锁")); |
||||
|
iStructattrService.updateById(attrDao); |
||||
|
|
||||
|
// 创建任务
|
||||
|
JSONObject jsonTask = new JSONObject(); |
||||
|
jsonTask.put("point_code1", whereJson.getString("point_code")); |
||||
|
jsonTask.put("point_code2", attrDao.getStruct_code()); |
||||
|
jsonTask.put("vehicle_code", whereJson.getString("storagevehicle_code")); |
||||
|
jsonTask.put("Priority", IOSConstant.IS_DELETE_YES); |
||||
|
empVehicleInTask.create(jsonTask); |
||||
|
|
||||
|
return PdaResponse.requestOk(); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
@Transactional |
||||
|
public PdaResponse empVehicleOut(JSONObject whereJson) { |
||||
|
// 基础校验
|
||||
|
if (ObjectUtil.isEmpty(whereJson.getString("point_code"))) { |
||||
|
throw new BadRequestException("终点不能为空!"); |
||||
|
} |
||||
|
if (ObjectUtil.isEmpty(whereJson.getString("storagevehicle_type"))) { |
||||
|
throw new BadRequestException("载具类型不能为空!"); |
||||
|
} |
||||
|
// 根据载具类型查找对应载具
|
||||
|
Structattr attrDao = queryOutPoint(whereJson); |
||||
|
if (ObjectUtil.isEmpty(attrDao)) { |
||||
|
throw new BadRequestException("库内此类型空托盘不足!【" + whereJson.getString("storagevehicle_type") + "】"); |
||||
|
} |
||||
|
|
||||
|
// 锁定仓位
|
||||
|
attrDao.setLock_type(IOSEnum.LOCK_TYPE.code("空托盘出库锁")); |
||||
|
iStructattrService.updateById(attrDao); |
||||
|
|
||||
|
// 创建任务
|
||||
|
JSONObject jsonTask = new JSONObject(); |
||||
|
jsonTask.put("point_code1", attrDao.getStruct_code()); |
||||
|
jsonTask.put("point_code2", whereJson.getString("point_code")); |
||||
|
jsonTask.put("vehicle_code", attrDao.getStoragevehicle_code()); |
||||
|
jsonTask.put("Priority", IOSConstant.IS_DELETE_YES); |
||||
|
empVehicleOutTask.create(jsonTask); |
||||
|
|
||||
|
return PdaResponse.requestOk(); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 查找入库货位 |
||||
|
* 分配规则: |
||||
|
* 1.满足托盘类型 2.满足载具的长宽高 |
||||
|
* |
||||
|
* @param vehicleDao 载具实体类 |
||||
|
* @return Structattr 仓位实体类 |
||||
|
*/ |
||||
|
private Structattr queryInPoint(MdPbStoragevehicleinfo vehicleDao) { |
||||
|
// 默认库区为主存区
|
||||
|
List<Structattr> structattrList = iStructattrService.list(new LambdaQueryWrapper<>(Structattr.class) |
||||
|
.eq(Structattr::getSect_code, IOSConstant.SECT_CODE) |
||||
|
.eq(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) |
||||
|
.and(wrapper -> wrapper.isNull(Structattr::getStoragevehicle_code).or().eq(Structattr::getStoragevehicle_code, "")) |
||||
|
.eq(vehicleDao.getStoragevehicle_type().equals(IOSEnum.VEHICLE_TYPE.code("金属托盘")), |
||||
|
Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("金属托盘")) |
||||
|
.eq(vehicleDao.getStoragevehicle_type().equals(IOSEnum.VEHICLE_TYPE.code("小料架")), |
||||
|
Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("小料架")) |
||||
|
.eq(vehicleDao.getStoragevehicle_type().equals(IOSEnum.VEHICLE_TYPE.code("大料架(短边)")), |
||||
|
Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("大料架(短边)")) |
||||
|
.eq(vehicleDao.getStoragevehicle_type().equals(IOSEnum.VEHICLE_TYPE.code("大料架(长边)")), |
||||
|
Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("大料架(长边)")) |
||||
|
.orderByAsc(Structattr::getStruct_code) |
||||
|
); |
||||
|
|
||||
|
// 校验长宽高
|
||||
|
Structattr structattr = structattrList.stream().filter(st -> |
||||
|
st.getWidth().compareTo(vehicleDao.getVehicle_width()) >= 0 && |
||||
|
st.getHeight().compareTo(vehicleDao.getVehicle_height()) >= 0 && |
||||
|
st.getZdepth().compareTo(vehicleDao.getVehicle_long()) >= 0 |
||||
|
).findAny().get(); |
||||
|
return structattr; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 寻找出库托盘仓位 |
||||
|
* 分配规则 |
||||
|
* 1.根据载具类型匹配 |
||||
|
* |
||||
|
* @param whereJson { |
||||
|
* storagevehicle_type: 载具类型 |
||||
|
* } |
||||
|
* @return Structattr 仓位实体类 |
||||
|
*/ |
||||
|
private Structattr queryOutPoint(JSONObject whereJson) { |
||||
|
// 默认库区为主存区
|
||||
|
String storagevehicle_type = whereJson.getString("storagevehicle_type"); |
||||
|
Structattr attrDao = iStructattrService.getOne(new LambdaQueryWrapper<>(Structattr.class) |
||||
|
.eq(Structattr::getSect_code, IOSConstant.SECT_CODE) |
||||
|
.eq(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) |
||||
|
.eq(Structattr::getIs_emptyvehicle, IOSConstant.IS_DELETE_YES) |
||||
|
.and(wrapper -> wrapper.isNotNull(Structattr::getStoragevehicle_code).or().ne(Structattr::getStoragevehicle_code, "")) |
||||
|
.eq(storagevehicle_type.equals(IOSEnum.VEHICLE_TYPE.code("金属托盘")), |
||||
|
Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("金属托盘")) |
||||
|
.eq(storagevehicle_type.equals(IOSEnum.VEHICLE_TYPE.code("小料架")), |
||||
|
Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("小料架")) |
||||
|
.eq(storagevehicle_type.equals(IOSEnum.VEHICLE_TYPE.code("大料架(短边)")), |
||||
|
Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("大料架(短边)")) |
||||
|
.eq(storagevehicle_type.equals(IOSEnum.VEHICLE_TYPE.code("大料架(长边)")), |
||||
|
Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("大料架(长边)")) |
||||
|
.orderByAsc(Structattr::getStruct_code) |
||||
|
); |
||||
|
return attrDao; |
||||
|
} |
||||
|
} |
@ -0,0 +1,165 @@ |
|||||
|
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.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; |
||||
|
|
||||
|
/** |
||||
|
* @Author: Liuxy |
||||
|
* @Description: 空载具入库 |
||||
|
* @Date: 2025/8/5 |
||||
|
*/ |
||||
|
@Component(value = "EmpVehicleInTask") |
||||
|
@TaskType("EmpVehicleInTask") |
||||
|
public class EmpVehicleInTask 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(EmpVehicleInTask.class.getSimpleName()); |
||||
|
task.setPoint_code1(json.getString("point_code1")); |
||||
|
task.setPoint_code2(json.getString("point_code2")); |
||||
|
task.setVehicle_code(json.getString("vehicle_code")); |
||||
|
task.setRequest_param(json.toString()); |
||||
|
task.setPriority(json.getString("Priority")); |
||||
|
task.setCreate_id(SecurityUtils.getCurrentUserId()); |
||||
|
// task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
|
task.setCreate_name("管理员"); |
||||
|
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); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void backMes(String task_code) { |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public void finishTask(SchBaseTask taskObj) { |
||||
|
// 更新终点
|
||||
|
iStructattrService.update( |
||||
|
new UpdateWrapper<Structattr>().lambda() |
||||
|
.eq(Structattr::getStruct_code, taskObj.getPoint_code2()) |
||||
|
.set(Structattr::getStoragevehicle_code, taskObj.getVehicle_code()) |
||||
|
.set(Structattr::getIs_emptyvehicle, IOSConstant.IS_DELETE_YES) |
||||
|
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) |
||||
|
); |
||||
|
// 更新任务
|
||||
|
taskObj.setRemark("已完成"); |
||||
|
taskObj.setTask_status(TaskStatus.FINISHED.getCode()); |
||||
|
taskService.updateById(taskObj); |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public void cancelTask(SchBaseTask taskObj) { |
||||
|
// 更新终点
|
||||
|
iStructattrService.update( |
||||
|
new UpdateWrapper<Structattr>().lambda() |
||||
|
.eq(Structattr::getStruct_code, taskObj.getPoint_code2()) |
||||
|
.set(Structattr::getTaskdtl_id, null) |
||||
|
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) |
||||
|
); |
||||
|
// 更新任务
|
||||
|
taskObj.setRemark("已取消"); |
||||
|
taskObj.setTask_status(TaskStatus.CANCELED.getCode()); |
||||
|
taskService.updateById(taskObj); |
||||
|
} |
||||
|
} |
@ -0,0 +1,165 @@ |
|||||
|
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.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; |
||||
|
|
||||
|
/** |
||||
|
* @Author: Liuxy |
||||
|
* @Description: 空载具出库 |
||||
|
* @Date: 2025/8/5 |
||||
|
*/ |
||||
|
@Component(value = "EmpVehicleOutTask") |
||||
|
@TaskType("EmpVehicleOutTask") |
||||
|
public class EmpVehicleOutTask 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(EmpVehicleOutTask.class.getSimpleName()); |
||||
|
task.setPoint_code1(json.getString("point_code1")); |
||||
|
task.setPoint_code2(json.getString("point_code2")); |
||||
|
task.setVehicle_code(json.getString("vehicle_code")); |
||||
|
task.setRequest_param(json.toString()); |
||||
|
task.setPriority(json.getString("Priority")); |
||||
|
task.setCreate_id(SecurityUtils.getCurrentUserId()); |
||||
|
// task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
|
task.setCreate_name("管理员"); |
||||
|
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); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void backMes(String task_code) { |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public void finishTask(SchBaseTask taskObj) { |
||||
|
// 更新起点
|
||||
|
iStructattrService.update( |
||||
|
new UpdateWrapper<Structattr>().lambda() |
||||
|
.eq(Structattr::getStruct_code, taskObj.getPoint_code1()) |
||||
|
.set(Structattr::getStoragevehicle_code, null) |
||||
|
.set(Structattr::getIs_emptyvehicle, IOSConstant.IS_DELETE_NO) |
||||
|
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) |
||||
|
); |
||||
|
// 更新任务
|
||||
|
taskObj.setRemark("已完成"); |
||||
|
taskObj.setTask_status(TaskStatus.FINISHED.getCode()); |
||||
|
taskService.updateById(taskObj); |
||||
|
} |
||||
|
|
||||
|
@Transactional |
||||
|
public void cancelTask(SchBaseTask taskObj) { |
||||
|
// 更新终点
|
||||
|
iStructattrService.update( |
||||
|
new UpdateWrapper<Structattr>().lambda() |
||||
|
.eq(Structattr::getStruct_code, taskObj.getPoint_code1()) |
||||
|
.set(Structattr::getTaskdtl_id, null) |
||||
|
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) |
||||
|
); |
||||
|
// 更新任务
|
||||
|
taskObj.setRemark("已取消"); |
||||
|
taskObj.setTask_status(TaskStatus.CANCELED.getCode()); |
||||
|
taskService.updateById(taskObj); |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue