feat: 加工下料
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
package org.nl.common.utils;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.hibernate.validator.internal.constraintvalidators.hv.EmailValidator;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.config.language.LangProcess;
|
||||
@@ -42,4 +43,19 @@ public class ValidationUtil{
|
||||
public static boolean isEmail(String email) {
|
||||
return new EmailValidator().isValid(email, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 入参校验
|
||||
*/
|
||||
public static void assertNotBlankJson(JSONObject json, String message, String... keys) {
|
||||
if (json == null) {
|
||||
throw new IllegalArgumentException(message);
|
||||
}
|
||||
for (String key : keys) {
|
||||
String value = json.getString(key);
|
||||
if (value == null || value.trim().isEmpty()) {
|
||||
throw new IllegalArgumentException(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,6 +60,12 @@ public class PdaProductionController {
|
||||
public ResponseEntity<Object> takeTheVehicle(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaProductionService.takeTheVehicle(whereJson), HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("/takeFinish")
|
||||
@Log("点位取货-取货完成")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> takeFinish(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaProductionService.takeFinish(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/getGroupInfo")
|
||||
@Log("剩料回库-获取物料信息")
|
||||
@@ -74,4 +80,10 @@ public class PdaProductionController {
|
||||
public ResponseEntity<Object> leftoverMaterialBack(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaProductionService.leftoverMaterialBack(whereJson), HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("/preProcessingDown")
|
||||
@Log("预加工下料-下料")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> preProcessingDown(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaProductionService.preProcessingDown(whereJson), HttpStatus.OK);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,4 +51,18 @@ public interface PdaProductionService {
|
||||
* @return
|
||||
*/
|
||||
PdaResponse leftoverMaterialBack(JSONObject param);
|
||||
|
||||
/**
|
||||
* 预加工下料
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
PdaResponse preProcessingDown(JSONObject param);
|
||||
|
||||
/**
|
||||
* 取货完成
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
PdaResponse takeFinish(JSONObject param);
|
||||
}
|
||||
|
||||
@@ -1,16 +1,13 @@
|
||||
package org.nl.wms.pda.general_management.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleextService;
|
||||
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService;
|
||||
@@ -22,7 +19,10 @@ import org.nl.wms.pda.general_management.service.PdaPreTreatmentService;
|
||||
import org.nl.wms.pda.general_management.service.PdaProductionService;
|
||||
import org.nl.wms.pda.util.PdaResponse;
|
||||
import org.nl.wms.sch_manage.service.ISchBasePointService;
|
||||
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.PreProcessingInTask;
|
||||
import org.nl.wms.warehouse_management.enums.IOSEnum;
|
||||
import org.nl.wms.warehouse_management.service.IMdPbGroupplateService;
|
||||
import org.nl.wms.warehouse_management.service.IOutBillService;
|
||||
@@ -38,6 +38,8 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.nl.common.utils.ValidationUtil.*;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
* @Date: 2025/12/1
|
||||
@@ -65,6 +67,10 @@ public class PdaProductionServiceImpl implements PdaProductionService {
|
||||
private VehicleInService vehicleInService;
|
||||
@Resource
|
||||
private IRawAssistIStorService rawAssistIStorService;
|
||||
@Resource
|
||||
private PreProcessingInTask preProcessingInTask;
|
||||
@Resource
|
||||
private ISchBaseTaskService taskService;
|
||||
@Override
|
||||
public PdaResponse getGroupInfo(JSONObject param) {
|
||||
// search;
|
||||
@@ -253,4 +259,35 @@ public class PdaProductionServiceImpl implements PdaProductionService {
|
||||
}
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponse preProcessingDown(JSONObject param) {
|
||||
log.info("加工下料:{}", param);
|
||||
// vehicle_code、 point_code, region_code, 。。。rows
|
||||
assertNotBlankJson(param, "请求参数不能为空!", "vehicle_code", "point_code", "sect_code");
|
||||
String pointCode = param.getString("point_code");
|
||||
SchBasePoint startPoint = pointService.getByPointCode(pointCode, false);
|
||||
if (ObjectUtil.isEmpty(startPoint)) {
|
||||
throw new BadRequestException("当前点位不存在,请检查是否正确!");
|
||||
}
|
||||
// 判断任务是否创建
|
||||
List<SchBaseTask> tasks = taskService.getTaskByQuery(new LambdaQueryWrapper<SchBaseTask>()
|
||||
.eq(SchBaseTask::getPoint_code1, pointCode));
|
||||
if (tasks.size() > 0) {
|
||||
throw new BadRequestException("该点位已创建过任务!");
|
||||
}
|
||||
String vehicleCode = param.getString("vehicle_code");
|
||||
List<JSONObject> res = groupplateService.getPalletViewByVehicleCode(vehicleCode);
|
||||
if (res.size() == 0) {
|
||||
throw new BadRequestException("当前托盘号不存在物料信息,请检查!");
|
||||
}
|
||||
preProcessingInTask.create(param);
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponse takeFinish(JSONObject param) {
|
||||
// todo: 下发允许AGV通过
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,4 +132,11 @@ public interface ISchBasePointService extends IService<SchBasePoint> {
|
||||
* @return
|
||||
*/
|
||||
SchBasePoint getByPointCode(String pointCode, boolean flag);
|
||||
|
||||
/**
|
||||
* 获取空位无任务的点位
|
||||
* @param regionCode
|
||||
* @return
|
||||
*/
|
||||
List<SchBasePoint> getCanUsePointByRegion(String regionCode);
|
||||
}
|
||||
|
||||
@@ -56,4 +56,6 @@ public interface SchBasePointMapper extends BaseMapper<SchBasePoint> {
|
||||
* @return List<JSONObject>
|
||||
*/
|
||||
List<JSONObject> getPointDtl(@Param("param") JSONObject whereJson);
|
||||
|
||||
List<SchBasePoint> getCanUsePointByRegion(String regionCode);
|
||||
}
|
||||
|
||||
@@ -110,4 +110,12 @@
|
||||
|
||||
</where>
|
||||
</select>
|
||||
<select id="getCanUsePointByRegion" resultType="org.nl.wms.sch_manage.service.dao.SchBasePoint">
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
`sch_base_point` p
|
||||
WHERE p.region_code = #{region_code} AND p.is_used = TRUE
|
||||
AND p.point_status = '1'
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -317,4 +317,9 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
|
||||
.eq(flag, SchBasePoint::getIs_used, true);
|
||||
return getOne(lam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SchBasePoint> getCanUsePointByRegion(String regionCode) {
|
||||
return this.baseMapper.getCanUsePointByRegion(regionCode);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ public class CallMaterialTask extends AbstractTask {
|
||||
task.setTask_id(IdUtil.getStringId());
|
||||
task.setTask_code(json.getString("TaskCode"));
|
||||
task.setTask_status(TaskStatus.CREATE.getCode());
|
||||
task.setConfig_code(HandOutTask.class.getSimpleName());
|
||||
task.setConfig_code(CallMaterialTask.class.getSimpleName());
|
||||
task.setPoint_code1(json.getString("point_code1"));
|
||||
task.setPoint_code2(json.getString("point_code2"));
|
||||
task.setVehicle_code(json.getString("vehicle_code"));
|
||||
|
||||
@@ -0,0 +1,183 @@
|
||||
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.LambdaUpdateWrapper;
|
||||
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.enums.BaseDataEnum;
|
||||
import org.nl.wms.sch_manage.enums.TaskEnum;
|
||||
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||
import org.nl.wms.sch_manage.service.ISchBasePointService;
|
||||
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch_manage.service.util.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.IRawAssistIStorService;
|
||||
import org.nl.wms.warehouse_management.service.dao.IOStorInvDis;
|
||||
import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 加工入库
|
||||
* @Author: lyd
|
||||
* @Date: 2025/12/2
|
||||
*/
|
||||
@Component(value = "PreProcessingInTask")
|
||||
@TaskType("PreProcessingInTask")
|
||||
public class PreProcessingInTask extends AbstractTask {
|
||||
@Resource
|
||||
private ISchBaseTaskService taskService;
|
||||
@Resource
|
||||
private ISchBasePointService pointService;
|
||||
|
||||
@Override
|
||||
public String create(JSONObject json) {
|
||||
// 获取终点
|
||||
List<SchBasePoint> points = pointService.getCanUsePointByRegion(json.getString("region_code"));
|
||||
if (ObjectUtil.isEmpty(points)) {
|
||||
throw new BadRequestException("暂无可用点位!");
|
||||
}
|
||||
SchBasePoint point = points.get(0);
|
||||
|
||||
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(PreProcessingInTask.class.getSimpleName());
|
||||
task.setPoint_code1(json.getString("point_code"));
|
||||
task.setPoint_code2(point.getPoint_code());
|
||||
task.setVehicle_code(json.getString("vehicle_code"));
|
||||
task.setRequest_param(json.toString());
|
||||
task.setTask_type(TaskEnum.TASK_TYPE.code("料箱"));
|
||||
task.setPriority("1");
|
||||
task.setIs_wait("0");
|
||||
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
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
private void cancelTask(SchBaseTask taskObj) {
|
||||
// 取消任务
|
||||
taskService.update(new LambdaUpdateWrapper<SchBaseTask>()
|
||||
.set(SchBaseTask::getIs_delete, BaseDataEnum.IS_YES_NOT.code("是"))
|
||||
.set(SchBaseTask::getTask_status, TaskStatus.CANCELED.getCode())
|
||||
.set(SchBaseTask::getRemark, "已取消")
|
||||
.eq(SchBaseTask::getTask_id, taskObj.getTask_id())
|
||||
);
|
||||
}
|
||||
|
||||
private void finishTask(SchBaseTask taskObj) {
|
||||
// 任务完成
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark("已完成");
|
||||
taskService.updateById(taskObj);
|
||||
// 更新起点
|
||||
pointService.update(
|
||||
new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.set(SchBasePoint::getVehicle_code, "")
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位"))
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
|
||||
.set(SchBasePoint::getIng_task_code, "")
|
||||
);
|
||||
// 更新起点
|
||||
pointService.update(
|
||||
new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code())
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有箱有料"))
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2())
|
||||
.set(SchBasePoint::getIng_task_code, "")
|
||||
);
|
||||
}
|
||||
|
||||
@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 (!TaskStatus.CREATE.getCode().equals(taskObj.getTask_status())) {
|
||||
throw new BadRequestException("任务状态必须为生成才能取消任务");
|
||||
}
|
||||
this.cancelTask(taskObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void taskConfirm(String task_code) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -52,7 +52,7 @@ public class RawInTask extends AbstractTask {
|
||||
task.setTask_id(IdUtil.getStringId());
|
||||
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
|
||||
task.setTask_status(TaskStatus.CREATED.getCode());
|
||||
task.setConfig_code(HandInTask.class.getSimpleName());
|
||||
task.setConfig_code(RawInTask.class.getSimpleName());
|
||||
task.setPoint_code1(json.getString("point_code1"));
|
||||
task.setPoint_code2(json.getString("point_code2"));
|
||||
task.setVehicle_code(json.getString("vehicle_code"));
|
||||
|
||||
Reference in New Issue
Block a user