From ff21fad450ae26447220e2f295c5fd0666c7aac7 Mon Sep 17 00:00:00 2001 From: liuxy Date: Fri, 6 Feb 2026 20:45:50 +0800 Subject: [PATCH] =?UTF-8?q?res=EF=BC=9A=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wms/ext/service/WmsToNotCarService.java | 15 ++ .../service/impl/NotCarToWmsServiceImpl.java | 23 +- .../service/impl/WmsToNotCarServiceImpl.java | 41 ++++ .../controller/PdaNotCarController.java | 36 +++ .../service/PdaNotCarService.java | 41 ++++ .../service/impl/PdaNotCarServiceImpl.java | 112 +++++++++ .../service/util/tasks/NoCarBackCpTask.java | 191 +++++++++++++++ .../service/util/tasks/NoCarInstallTask.java | 218 ++++++++++++++++++ .../service/util/tasks/NoCarUnloadTask.java | 77 +++++-- .../src/views/monitor/log/errorLog.vue | 11 - .../src/views/monitor/log/index.vue | 11 - 11 files changed, 739 insertions(+), 37 deletions(-) create mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/NoCarBackCpTask.java create mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/NoCarInstallTask.java diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToNotCarService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToNotCarService.java index 10749e5..7d0d96e 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToNotCarService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToNotCarService.java @@ -54,4 +54,19 @@ public interface WmsToNotCarService { * @return NoCarResponse */ NoCarResponse callNotCat(JSONObject whereJson); + + /** + * 装货任务完成反馈 + * + * @param param { + * "requestType": "WCS_110", + * "accessId": "1", + * "requestId": "唯一标识", + * "data": { + * "taskNo":"呼叫时的任务号" + * } + * } + * @return NoCarResponse + */ + NoCarResponse continueTask(JSONObject param); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/NotCarToWmsServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/NotCarToWmsServiceImpl.java index ac8b37e..cc413e0 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/NotCarToWmsServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/NotCarToWmsServiceImpl.java @@ -5,6 +5,10 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; +import org.nl.config.SpringContextHolder; +import org.nl.system.service.param.ISysParamService; +import org.nl.system.service.param.dao.Param; +import org.nl.system.service.param.impl.SysParamServiceImpl; import org.nl.wms.ext.service.NotCarToWmsService; import org.nl.wms.ext.util.NoCarResponse; import org.nl.wms.sch_manage.service.ISchBasePointService; @@ -50,6 +54,12 @@ public class NotCarToWmsServiceImpl implements NotCarToWmsService { @Resource private NoCarUnloadTask noCarUnloadTask; + /** + * 系统参数服务 + */ + @Resource + private ISysParamService iSysParamService; + @Override @SneakyThrows public NoCarResponse sendTask(JSONObject whereJson) { @@ -121,6 +131,17 @@ public class NotCarToWmsServiceImpl implements NotCarToWmsService { if (tryLock) { JSONObject data = whereJson.getJSONObject("data"); String statusType = data.getString("statusType"); + if (statusType.equals(IOSConstant.ZERO)) { + // 判断任务号是否一致 + Param sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("NO_CAR_TASK"); + String taskNo = data.getString("taskNo"); + if (!taskNo.equals(sysParamService.getValue())) { + return NoCarResponse.requestError("任务号与呼叫时不一致!"); + } + // 更新值为1 + sysParamService.setRemark(IOSConstant.ONE); + iSysParamService.updateById(sysParamService); + } // 前往点位 } else { log.info("无人车到达输出参数:{}", NoCarResponse.requestError("当前任务正在执行中,请稍后在试...").toString()); @@ -131,7 +152,7 @@ public class NotCarToWmsServiceImpl implements NotCarToWmsService { lock.unlock(); } } - // log.info("无人车到达输出参数:{}", NoCarResponse.responseOk().toString()); + log.info("无人车到达输出参数:{}", NoCarResponse.responseOk().toString()); return NoCarResponse.responseOk(); } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToNotCarServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToNotCarServiceImpl.java index 28d2a65..555bd58 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToNotCarServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToNotCarServiceImpl.java @@ -106,4 +106,45 @@ public class WmsToNotCarServiceImpl implements WmsToNotCarService { } return resultCar; } + + @Override + public NoCarResponse continueTask(JSONObject param) { + log.info("下发无人车接口continueTask的输入参数为:-------------------" + param.toString()); + // 返回参数 + NoCarResponse resultCar; + + // 系统参数类 + SysParamServiceImpl sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class); + //判断是否连接无人车系统 + Param isConnectCar = sysParamService.findByCode(SysParamConstant.IS_NOT_CAR); + if (ObjectUtil.isEmpty(isConnectCar)) { + return NoCarResponse.requestError("系统参数表中:" + SysParamConstant.IS_NOT_CAR + "不存在"); + } + if (isConnectCar.getValue().equals(IOSConstant.ONE)) { + return NoCarResponse.responseOk("下发成功,未连接无人车系统!"); + } + + //无人车系统地址ip + Param acsUrlParam = sysParamService.findByCode(SysParamConstant.CAR_URL); + if (ObjectUtil.isEmpty(acsUrlParam)) { + return NoCarResponse.requestError("系统参数表中:" + SysParamConstant.CAR_URL + "不存在"); + } + + String url = acsUrlParam.getValue() + "openapi/task/continueTask"; + try { + String resultMsg = HttpRequest.post(url) + .body(String.valueOf(param)) + .execute().body(); + // 格式转换 + JSONObject result = JSONObject.parseObject(resultMsg); + resultCar = JSONObject.toJavaObject(result, NoCarResponse.class); + log.info("下发无人车接口continueTask的输出参数为:-------------------" + resultMsg); + } catch (Exception e) { + //网络不通 + String msg = e.getMessage(); + log.error("连接失败:{}", msg); + return NoCarResponse.requestError("网络不通,操作失败!"); + } + return resultCar; + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaNotCarController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaNotCarController.java index d815bd4..ef1a497 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaNotCarController.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaNotCarController.java @@ -74,4 +74,40 @@ public class PdaNotCarController { return new ResponseEntity<>(notCarService.back(whereJson), HttpStatus.OK); } + @PostMapping("/queryZhRegion") + @Log("无人车装货 - 查询装货区下拉框") + @SaIgnore + public ResponseEntity queryZhRegion() { + return new ResponseEntity<>(notCarService.queryZhRegion(), HttpStatus.OK); + } + + @PostMapping("/queryZhPoint") + @Log("无人车装货 - 查询装货区下的点位") + @SaIgnore + public ResponseEntity queryZhPoint(JSONObject whereJson) { + return new ResponseEntity<>(notCarService.queryZhPoint(whereJson), HttpStatus.OK); + } + + @PostMapping("/callCar") + @Log("无人车装货 - 呼叫无人车") + @SaIgnore + public ResponseEntity callCar(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(notCarService.callCar(whereJson), HttpStatus.OK); + } + + @PostMapping("/install") + @Log("无人车装货 - 装货") + @SaIgnore + public ResponseEntity install(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(notCarService.install(whereJson), HttpStatus.OK); + } + + @PostMapping("/installConfirm") + @Log("无人车装货 - 装货完成") + @SaIgnore + public ResponseEntity installConfirm() { + return new ResponseEntity<>(notCarService.installConfirm(), HttpStatus.OK); + } + + } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaNotCarService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaNotCarService.java index db819c9..30e0cd2 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaNotCarService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaNotCarService.java @@ -67,4 +67,45 @@ public interface PdaNotCarService { * @return PdaResponse */ PdaResponse back(JSONObject whereJson); + + /** + * 无人车装货 - 查询装货区下拉框 + * @return PdaResponse + */ + PdaResponse queryZhRegion(); + + /** + * 无人车装货 - 查询装货区下的点位 + * @param whereJson { + * region_code: 区域编码 + * } + * @return PdaResponse + */ + PdaResponse queryZhPoint(JSONObject whereJson); + + /** + * 无人车装货 - 呼叫无人车 + * @param whereJson { + * region_code: 区域编码 + * rows: [明细] + * } + * @return PdaResponse + */ + PdaResponse callCar(JSONObject whereJson); + + /** + * 无人车装货 - 装货 + * @param whereJson { + * region_code: 区域编码 + * rows: [明细] + * } + * @return PdaResponse + */ + PdaResponse install(JSONObject whereJson); + + /** + * 无人车装货 - 装货完成 + * @return PdaResponse + */ + PdaResponse installConfirm(); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaNotCarServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaNotCarServiceImpl.java index 90a7da3..b262c1a 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaNotCarServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaNotCarServiceImpl.java @@ -1,8 +1,15 @@ package org.nl.wms.pda.general_management.service.impl; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.nl.common.exception.BadRequestException; +import org.nl.config.IdUtil; +import org.nl.config.SpringContextHolder; +import org.nl.system.enums.SysParamConstant; +import org.nl.system.service.param.ISysParamService; +import org.nl.system.service.param.dao.Param; +import org.nl.system.service.param.impl.SysParamServiceImpl; import org.nl.wms.ext.service.WmsToNotCarService; import org.nl.wms.pda.general_management.service.PdaNotCarService; import org.nl.wms.pda.util.PdaResponse; @@ -10,6 +17,7 @@ import org.nl.wms.sch_manage.service.ISchBaseRegionService; import org.nl.wms.sch_manage.service.dao.SchBasePoint; import org.nl.wms.sch_manage.service.dao.SchBaseRegion; import org.nl.wms.sch_manage.service.dao.mapper.SchBasePointMapper; +import org.nl.wms.sch_manage.service.util.tasks.NoCarInstallTask; import org.nl.wms.sch_manage.service.util.tasks.PdaNotCarUnloadTask; import org.nl.wms.warehouse_management.enums.IOSConstant; import org.nl.wms.warehouse_management.enums.IOSEnum; @@ -17,6 +25,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.List; /** @@ -54,6 +63,18 @@ public class PdaNotCarServiceImpl implements PdaNotCarService { @Resource private WmsToNotCarService wmsToNotCarService; + /** + * 系统参数服务 + */ + @Resource + private ISysParamService iSysParamService; + + /** + * 无人车装货任务服务 + */ + @Resource + private NoCarInstallTask noCarInstallTask; + @Override public PdaResponse queryXhRegion() { List list = iSchBaseRegionService.list( @@ -110,6 +131,97 @@ public class PdaNotCarServiceImpl implements PdaNotCarService { return PdaResponse.requestOk(); } + @Override + public PdaResponse queryZhRegion() { + return null; + } + + @Override + public PdaResponse queryZhPoint(JSONObject whereJson) { + // 查询此区域下的空位 + List pointList = schBasePointMapper.selectList( + new QueryWrapper().lambda() + .eq(SchBasePoint::getRegion_code, whereJson.getString("region_code")) + .eq(SchBasePoint::getIs_used, IOSConstant.ONE) + .eq(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有箱有料")) + ); + return PdaResponse.requestParamOk(pointList); + } + + @Override + @Transactional + public PdaResponse callCar(JSONObject whereJson) { + // 根据区域找对应的无人车对接点 + String taskNo = IdUtil.getStringId(); + // 将任务号存在系统中 + Param sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("NO_CAR_TASK"); + sysParamService.setValue(taskNo); + iSysParamService.updateById(sysParamService); + + JSONObject param = new JSONObject(); + param.put("requestType", "WCS_101"); + param.put("accessId", IOSConstant.ONE); + param.put("requestId", IdUtil.getStringId()); + + JSONObject data = new JSONObject(); + List detail = new ArrayList<>(); + JSONObject json = new JSONObject(); + json.put("taskNo", taskNo); + json.put("taskType", "MV"); + json.put("taskDate", DateUtil.now()); + json.put("taskState", "00"); + json.put("priority", IOSConstant.ONE); + json.put("wareCode", "W02"); + // 目标点位 + json.put("toLoc", ""); + // 地图 + json.put("udf02", ""); + + detail.add(json); + data.put("detail", detail); + param.put("data", data); + // 呼叫无人车 + wmsToNotCarService.callNotCat(param); + return PdaResponse.requestOk(); + } + + @Override + @Transactional + public PdaResponse install(JSONObject whereJson) { + // 判断无人车是否到位 + Param sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("NO_CAR_TASK"); + if (!sysParamService.getRemark().equals(IOSConstant.ONE)) { + throw new BadRequestException("无人车未到位!"); + } + // 查询无人车上的点位 + // 创建装货任务 + List rows = whereJson.getJSONArray("rows").toJavaList(JSONObject.class); + if (rows.size() > 2) { + throw new BadRequestException("选择物料不能大于2条!"); + } + for (int i = 0; i < rows.size(); i++) { + JSONObject json = rows.get(i); + JSONObject task = new JSONObject(); + task.put("point_code1", json.getString("point_code")); + task.put("point_code2", ""); + task.put("contact_task", sysParamService.getValue()); + noCarInstallTask.create(task); + } + return PdaResponse.requestOk(); + } + + @Override + public PdaResponse installConfirm() { + // 判断无人车是否到位 + Param sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("NO_CAR_TASK"); + sysParamService.setRemark(IOSConstant.ZERO); + iSysParamService.updateById(sysParamService); + + // 调用无人装货任务类 + noCarInstallTask.backParam(sysParamService.getValue()); + return PdaResponse.requestOk(); + } + /** * 根据数量找到对应可用点位 * diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/NoCarBackCpTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/NoCarBackCpTask.java new file mode 100644 index 0000000..f4a05d7 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/NoCarBackCpTask.java @@ -0,0 +1,191 @@ +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.query.QueryWrapper; +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.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.IStIvtMoveinvService; +import org.nl.wms.warehouse_management.service.IStIvtMoveinvdtlService; +import org.nl.wms.warehouse_management.service.dao.StIvtMoveinvdtl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.List; + +/** + *

+ * 无人车卸货回库带成品任务类 + *

+ * + * @author Liuxy + * @since 2026-02-06 + */ +@Component(value = "NoCarBackCpTask") +@TaskType("NoCarBackCpTask") +public class NoCarBackCpTask extends AbstractTask { + + /** + * 任务服务类 + */ + @Autowired + private ISchBaseTaskService taskService; + + /** + * 点位服务 + */ + @Resource + private ISchBasePointService iSchBasePointService; + + /** + * 无人车卸货任务类 + */ + @Resource + private NoCarUnloadTask noCarUnloadTask; + + @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(NoCarBackCpTask.class.getSimpleName()); + task.setPoint_code1(json.getString("point_code1")); + task.setPoint_code2(json.getString("point_code2")); + task.setGroup_id(json.getString("group_id")); + task.setRequest_param(json.toString()); + task.setPriority(json.getString("Priority")); + task.setContact_task(json.getString("contact_task")); + 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.setTask_type(ACSTaskTypeEnum.AGV_TASK.getCode()); + + acsTaskDto.setPriority(IOSConstant.ONE); + acsTaskDto.setAgv_system_type(IOSConstant.TWO); + + 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("该任务不存在"); + } + this.cancelTask(taskObj); + } + + @Override + public void taskConfirm(String task_code) { + } + + @Transactional + public void finishTask(SchBaseTask taskObj) { + // 更新起点 + iSchBasePointService.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, "") + ); + + // 更新任务状态 + taskObj.setRemark("已完成"); + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskService.updateById(taskObj); + + // 判断任务是否全部完成 + List list = taskService.list( + new QueryWrapper().lambda() + .eq(SchBaseTask::getContact_task, taskObj.getContact_task()) + .eq(SchBaseTask::getIs_delete, IOSConstant.ZERO) + .lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()) + ); + if (ObjectUtil.isEmpty(list)) { + // 通知卸货完成回库 + noCarUnloadTask.resultNoCar(taskObj.getContact_task()); + } + + } + + @Transactional + public void cancelTask(SchBaseTask taskObj) { + // 更新任务状态 + taskObj.setRemark("已取消"); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskService.updateById(taskObj); + } +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/NoCarInstallTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/NoCarInstallTask.java new file mode 100644 index 0000000..30e0891 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/NoCarInstallTask.java @@ -0,0 +1,218 @@ +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.query.QueryWrapper; +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.config.SpringContextHolder; +import org.nl.system.service.param.ISysParamService; +import org.nl.system.service.param.dao.Param; +import org.nl.system.service.param.impl.SysParamServiceImpl; +import org.nl.wms.ext.service.WmsToNotCarService; +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.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.List; + +/** + *

+ * 无人车装货任务类 + *

+ * + * @author Liuxy + * @since 2026-02-06 + */ +@Component(value = "NoCarInstallTask") +@TaskType("NoCarInstallTask") +public class NoCarInstallTask extends AbstractTask { + + /** + * 任务服务类 + */ + @Autowired + private ISchBaseTaskService taskService; + + /** + * 点位服务 + */ + @Resource + private ISchBasePointService iSchBasePointService; + + /** + * 系统参数服务 + */ + @Resource + private ISysParamService iSysParamService; + + /** + * wms调用无人车服务 + */ + @Resource + private WmsToNotCarService wmsToNotCarService; + + @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(NoCarInstallTask.class.getSimpleName()); + task.setPoint_code1(json.getString("point_code1")); + task.setPoint_code2(json.getString("point_code2")); + task.setGroup_id(json.getString("group_id")); + task.setRequest_param(json.toString()); + task.setPriority(json.getString("Priority")); + task.setContact_task(json.getString("contact_task")); + 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.setTask_type(ACSTaskTypeEnum.AGV_TASK.getCode()); + + acsTaskDto.setPriority(IOSConstant.ONE); + acsTaskDto.setAgv_system_type(IOSConstant.TWO); + + 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("该任务不存在"); + } + this.cancelTask(taskObj); + } + + @Override + public void taskConfirm(String task_code) { + } + + @Transactional + public void finishTask(SchBaseTask taskObj) { + // 更新起点 + iSchBasePointService.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, "") + ); + + // 更新任务状态 + taskObj.setRemark("已完成"); + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskService.updateById(taskObj); + + // 判断任务是否全部完成 + List list = taskService.list( + new QueryWrapper().lambda() + .eq(SchBaseTask::getContact_task, taskObj.getContact_task()) + .eq(SchBaseTask::getIs_delete, IOSConstant.ZERO) + .lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()) + ); + if (ObjectUtil.isEmpty(list)) { + // 更新系统参数为0 + Param sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("NO_CAR_TASK"); + sysParamService.setRemark(IOSConstant.ZERO); + iSysParamService.updateById(sysParamService); + // 通知装货完成回库 + this.backParam(taskObj.getContact_task()); + } + } + + @Transactional + public void cancelTask(SchBaseTask taskObj) { + // 更新任务状态 + taskObj.setRemark("已取消"); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskService.updateById(taskObj); + } + + /** + * 装货完成 + */ + public void backParam(String taskNo) { + JSONObject param = new JSONObject(); + param.put("requestType", "WCS_110"); + param.put("accessId", IOSConstant.ONE); + param.put("requestId", IdUtil.getStringId()); + + JSONObject data = new JSONObject(); + data.put("taskNo", taskNo); + param.put("data", data); + // 调用服务 + wmsToNotCarService.continueTask(param); + } +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/NoCarUnloadTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/NoCarUnloadTask.java index 406ee80..492e243 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/NoCarUnloadTask.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/NoCarUnloadTask.java @@ -3,11 +3,13 @@ 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.query.QueryWrapper; 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.ext.service.WmsToNotCarService; import org.nl.wms.sch_manage.enums.TaskStatus; import org.nl.wms.sch_manage.service.ISchBasePointService; import org.nl.wms.sch_manage.service.ISchBaseTaskService; @@ -24,6 +26,7 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.List; /** *

@@ -49,6 +52,18 @@ public class NoCarUnloadTask extends AbstractTask { @Resource private ISchBasePointService iSchBasePointService; + /** + * wms调用无人车服务 + */ + @Resource + private WmsToNotCarService wmsToNotCarService; + + /** + * 无人车卸货回库带成品任务类 + */ + @Resource + private NoCarBackCpTask noCarBackCpTask; + @Override public String create(JSONObject json) { SchBaseTask task = new SchBaseTask(); @@ -117,7 +132,6 @@ public class NoCarUnloadTask extends AbstractTask { // 根据传来的类型去对任务进行操作 if (status.equals(TaskStatus.EXECUTING)) { // 更新明细状态 - this.executing(taskObj); taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); taskObj.setRemark("执行中"); taskService.updateById(taskObj); @@ -179,6 +193,38 @@ public class NoCarUnloadTask extends AbstractTask { taskObj.setRemark("已完成"); taskObj.setTask_status(TaskStatus.FINISHED.getCode()); taskService.updateById(taskObj); + + // 判断卸货任务是否全部完成 + List list = taskService.list( + new QueryWrapper().lambda() + .eq(SchBaseTask::getContact_task, taskObj.getContact_task()) + .eq(SchBaseTask::getIs_delete, IOSConstant.ZERO) + .lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()) + ); + if (ObjectUtil.isEmpty(list)) { + // 判断成品区是否有货,有就生成任务 + List pointList = iSchBasePointService.list( + new QueryWrapper().lambda() + .eq(SchBasePoint::getRegion_code, "CPQ01") + .eq(SchBasePoint::getIs_used, IOSConstant.ONE) + .eq(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有箱有料")) + .last("LIMIT 2") + ); + if (ObjectUtil.isNotEmpty(pointList)) { + // 创建装货任务 + for (SchBasePoint dao : pointList) { + JSONObject taskParam = new JSONObject(); + taskParam.put("point_code1", dao.getPoint_code()); + taskParam.put("point_code2", "成品对接点"); + taskParam.put("contact_task", taskObj.getContact_task()); + noCarBackCpTask.create(taskParam); + } + } else { + // 调用无人车卸货完成 + this.resultNoCar(taskObj.getContact_task()); + } + + } } @Transactional @@ -202,18 +248,21 @@ public class NoCarUnloadTask extends AbstractTask { taskService.updateById(taskObj); } - private void executing(SchBaseTask taskObj) { - // 更新起点 - iSchBasePointService.update( - new UpdateWrapper().lambda() - .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1()) - .set(SchBasePoint::getIng_task_code, taskObj.getTask_id()) - ); - // 更新终点 - iSchBasePointService.update( - new UpdateWrapper().lambda() - .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2()) - .set(SchBasePoint::getIng_task_code, taskObj.getTask_id()) - ); + /** + * 卸货任务完成反馈 + * + * @param id 无人车下发任务标识 + */ + public void resultNoCar(String id) { + JSONObject param = new JSONObject(); + param.put("requestType", "WCS_118"); + param.put("accessId", IOSConstant.ONE); + param.put("requestId", IdUtil.getStringId()); + + JSONObject data = new JSONObject(); + data.put("id", id); + data.put("to_command", IOSConstant.TWO); + param.put("data", data); + wmsToNotCarService.resultUnloadTask(param); } } diff --git a/wms/nladmin-ui/src/views/monitor/log/errorLog.vue b/wms/nladmin-ui/src/views/monitor/log/errorLog.vue index 7749a3e..a3f5229 100644 --- a/wms/nladmin-ui/src/views/monitor/log/errorLog.vue +++ b/wms/nladmin-ui/src/views/monitor/log/errorLog.vue @@ -3,17 +3,6 @@

- - {{ $t('ErrorLog.table.clear') }} -
diff --git a/wms/nladmin-ui/src/views/monitor/log/index.vue b/wms/nladmin-ui/src/views/monitor/log/index.vue index 6fcab06..08c51a7 100644 --- a/wms/nladmin-ui/src/views/monitor/log/index.vue +++ b/wms/nladmin-ui/src/views/monitor/log/index.vue @@ -3,17 +3,6 @@
- - {{ $t('ErrorLog.table.clear') }} -