From 0a5fe359b2367087adaa971c6034012466ec5adc Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Tue, 2 Dec 2025 16:02:23 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8A=A0=E5=B7=A5=E4=B8=8B=E6=96=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/nl/common/utils/ValidationUtil.java | 16 ++ .../controller/PdaProductionController.java | 12 ++ .../service/PdaProductionService.java | 14 ++ .../impl/PdaProductionServiceImpl.java | 43 +++- .../service/ISchBasePointService.java | 7 + .../dao/mapper/SchBasePointMapper.java | 2 + .../service/dao/mapper/SchBasePointMapper.xml | 8 + .../service/impl/SchBasePointServiceImpl.java | 5 + .../service/util/tasks/CallMaterialTask.java | 2 +- .../util/tasks/PreProcessingInTask.java | 183 ++++++++++++++++++ .../service/util/tasks/RawInTask.java | 2 +- 11 files changed, 289 insertions(+), 5 deletions(-) create mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PreProcessingInTask.java diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/ValidationUtil.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/ValidationUtil.java index 7d3f97c..730b6e9 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/ValidationUtil.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/ValidationUtil.java @@ -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); + } + } + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaProductionController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaProductionController.java index def9e30..8b86911 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaProductionController.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaProductionController.java @@ -60,6 +60,12 @@ public class PdaProductionController { public ResponseEntity takeTheVehicle(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(pdaProductionService.takeTheVehicle(whereJson), HttpStatus.OK); } + @PostMapping("/takeFinish") + @Log("点位取货-取货完成") + @SaIgnore + public ResponseEntity takeFinish(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaProductionService.takeFinish(whereJson), HttpStatus.OK); + } @PostMapping("/getGroupInfo") @Log("剩料回库-获取物料信息") @@ -74,4 +80,10 @@ public class PdaProductionController { public ResponseEntity leftoverMaterialBack(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(pdaProductionService.leftoverMaterialBack(whereJson), HttpStatus.OK); } + @PostMapping("/preProcessingDown") + @Log("预加工下料-下料") + @SaIgnore + public ResponseEntity preProcessingDown(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaProductionService.preProcessingDown(whereJson), HttpStatus.OK); + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaProductionService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaProductionService.java index 25f21b0..285335f 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaProductionService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaProductionService.java @@ -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); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaProductionServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaProductionServiceImpl.java index 8c84f28..65def5a 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaProductionServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaProductionServiceImpl.java @@ -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 tasks = taskService.getTaskByQuery(new LambdaQueryWrapper() + .eq(SchBaseTask::getPoint_code1, pointCode)); + if (tasks.size() > 0) { + throw new BadRequestException("该点位已创建过任务!"); + } + String vehicleCode = param.getString("vehicle_code"); + List 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; + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBasePointService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBasePointService.java index a08302e..0df962a 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBasePointService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBasePointService.java @@ -132,4 +132,11 @@ public interface ISchBasePointService extends IService { * @return */ SchBasePoint getByPointCode(String pointCode, boolean flag); + + /** + * 获取空位无任务的点位 + * @param regionCode + * @return + */ + List getCanUsePointByRegion(String regionCode); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.java index 4012c50..162feee 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.java @@ -56,4 +56,6 @@ public interface SchBasePointMapper extends BaseMapper { * @return List */ List getPointDtl(@Param("param") JSONObject whereJson); + + List getCanUsePointByRegion(String regionCode); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.xml b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.xml index 2bae81c..88380dc 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.xml +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.xml @@ -110,4 +110,12 @@ + diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBasePointServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBasePointServiceImpl.java index a009d94..47e73f4 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBasePointServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBasePointServiceImpl.java @@ -317,4 +317,9 @@ public class SchBasePointServiceImpl extends ServiceImpl getCanUsePointByRegion(String regionCode) { + return this.baseMapper.getCanUsePointByRegion(regionCode); + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CallMaterialTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CallMaterialTask.java index e76c9b9..3b927b7 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CallMaterialTask.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CallMaterialTask.java @@ -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")); diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PreProcessingInTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PreProcessingInTask.java new file mode 100644 index 0000000..bd04f05 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PreProcessingInTask.java @@ -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 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() + .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().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().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) { + + } +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/RawInTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/RawInTask.java index ecf63cd..d0430eb 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/RawInTask.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/RawInTask.java @@ -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"));