diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/TaskExecuteRecordMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/TaskExecuteRecordMapper.java index 7945fa61..deb95b49 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/TaskExecuteRecordMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/TaskExecuteRecordMapper.java @@ -1,10 +1,12 @@ package org.springblade.desk.logistics.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; import org.springblade.desk.logistics.pojo.entity.TaskExecuteRecord; import java.util.List; public interface TaskExecuteRecordMapper extends BaseMapper { + TaskExecuteRecord selectByTaskCode(@Param("taskCode") String taskCode); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/TaskExecuteRecordMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/TaskExecuteRecordMapper.xml index 8b90d363..7f963f0b 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/TaskExecuteRecordMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/TaskExecuteRecordMapper.xml @@ -4,4 +4,8 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/ITaskExecuteRecordService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/ITaskExecuteRecordService.java index 98d0b585..ab980b02 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/ITaskExecuteRecordService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/ITaskExecuteRecordService.java @@ -52,7 +52,7 @@ public interface ITaskExecuteRecordService extends BaseService freeLocations = locationService.selectByLocationStatus(Location.STATUS_FREE); if (CollectionUtils.isEmpty(freeLocations)) { - log.warn("没有空闲库位可用,物料箱:{}", boxBarcode); + log.warn("没有空闲库位可用,物料箱:{}", task.getBoxBarcode()); return false; } String targetLocationCode = freeLocations.get(0).getLocationCode(); @@ -274,7 +274,7 @@ public class PipelineServiceImpl implements IPipelineService { // 2. 查询库位梳齿架子 List combLocations = locationService.selectByStatus(1); if (CollectionUtils.isEmpty(combLocations)) { - log.warn("没有可用的库位梳齿架子,物料箱:{}", boxBarcode); + log.warn("没有可用的库位梳齿架子,物料箱:{}", task.getBoxBarcode()); return false; } String combLocationCode = combLocations.get(0).getLocationCode(); @@ -282,10 +282,12 @@ public class PipelineServiceImpl implements IPipelineService { // 3. 两步操作 log.info("第一步:AGV将物料箱从输送线放入梳齿架子:{}", combLocationCode); - // TODO 调用AGV小车 将输送线物资放入梳齿架子 + // 调用AGV小车 将输送线物资放入梳齿架子 + boolean agvSchedulingTask = genAgvSchedulingTask + ("QM7", Station.PICKUP_CONVEYOR_LINE, combLocationCode, AgvConstant.EQUIPMENT_TYPE_AGV, task); + //第二步 需要agv调用完成之后 给到mes通知接口 log.info("第二步:CTU将物料箱从梳齿架子送往库位:{}", targetLocationCode); - // TODO 调用CTU 将梳齿架子物资放入库位 return true; } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/TaskExecuteRecordServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/TaskExecuteRecordServiceImpl.java index 4326f481..6ddeb793 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/TaskExecuteRecordServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/TaskExecuteRecordServiceImpl.java @@ -7,14 +7,19 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; +import org.redisson.executor.TasksService; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.tool.api.R; +import org.springblade.desk.logistics.constant.AgvConstant; import org.springblade.desk.logistics.mapper.TaskExecuteRecordMapper; import org.springblade.desk.logistics.pojo.dto.AGVCallBackDto; +import org.springblade.desk.logistics.pojo.entity.Location; import org.springblade.desk.logistics.pojo.entity.Task; import org.springblade.desk.logistics.pojo.entity.TaskExecuteRecord; import org.springblade.desk.logistics.pojo.vo.AgvSchedulingTaskVO; +import org.springblade.desk.logistics.service.ILocationService; import org.springblade.desk.logistics.service.ITaskExecuteRecordService; +import org.springblade.desk.logistics.service.ITaskService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @@ -41,6 +46,12 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl @@ -112,8 +123,9 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl 0; } + @Override + public boolean containerToEmpty(String taskCode) { + + TaskExecuteRecord taskExecuteRecord = taskExecuteRecordMapper.selectByTaskCode(taskCode); + if(null == taskExecuteRecord){ + log.error("未根据taskCode查询到有效数据,请求参数:{}", taskCode); + return false; + } + + Task task = taskService.getById(taskExecuteRecord.getTaskId()); + if(null == task){ + log.error("查询不到Task数据,请求参数:{}", taskExecuteRecord.getTaskId()); + return false; + } + if(null == task.getLocationId()){ + //证明不需要送到库位 + //更新task状态 根据taskCode查询 + task.setTaskStatus(Task.STATUS_STATION); + boolean taskUpdate = taskService.updateById(task); + if(!taskUpdate){ + log.error("Task状态修改失败"); + } + return true; + } + + Location location = locationService.getById(task.getLocationId()); + + boolean ctuSchedulingTask = genCtuSchedulingTask + ("CTu2", "1", task.getBoxBarcode(), taskExecuteRecord.getEndPos(), location.getLocationCode(), AgvConstant.EQUIPMENT_TYPE_CTU); + + if(!ctuSchedulingTask){ + task.setTaskStatus(Task.STATUS_LOCATION); + boolean taskUpdate = taskService.updateById(task); + if(!taskUpdate){ + log.error("Task状态修改失败"); + } + } + return true; + } + + @Override + public boolean genCtuSchedulingTask(String taskTyp, String ctnrTyp, String ctnrCode, + String startPos, String endPos, String type) { + // 接口地址 + String url = "http://172.22.252.10:8181/rcms/services/rest/hikRpcService/genAgvSchedulingTask"; + + // 生成唯一标识 + String reqCode = generateReqCode("CTUT"); + String taskCode = reqCode; + + try { + // 构建请求参数 + Map requestBody = new HashMap<>(); + requestBody.put("reqCode", reqCode); + requestBody.put("taskCode", taskCode); + requestBody.put("taskTyp", taskTyp); + requestBody.put("ctnrTyp", ctnrTyp); + requestBody.put("ctnrCode", ctnrCode); + + // 构建位置路径列表 + List> positionCodePath = new ArrayList<>(); + + // 起始位置 + Map startPosition = new HashMap<>(); + startPosition.put("positionCode", startPos); + startPosition.put("type", type); + positionCodePath.add(startPosition); + + // 目标位置 + Map endPosition = new HashMap<>(); + endPosition.put("positionCode", endPos); + endPosition.put("type", type); + positionCodePath.add(endPosition); + + requestBody.put("positionCodePath", positionCodePath); + + // 记录请求日志 + log.info("调用CTU调度任务接口,请求参数:{}", JSON.toJSONString(requestBody)); + + // 发送POST请求 + String responseStr = HttpUtil.post(url, JSON.toJSONString(requestBody)); + + // 记录响应日志 + log.info("调用CTU调度任务接口,响应结果:{}", responseStr); + + if (!StringUtils.hasText(responseStr)) { + log.error("调用CTU调度任务接口失败,响应为空"); + return false; + } + + // 解析响应 + JSONObject response = JSON.parseObject(responseStr); + String code = response.getString("code"); + String message = response.getString("message"); + + // 判断是否调用成功(code为0表示成功) + if ("0".equals(code)) { + log.info("CTU调度任务创建成功,任务类型:{},任务单号:{},容器编号:{},起始位置:{},目标位置:{}", + taskTyp, taskCode, ctnrCode, startPos, endPos); + return true; + } else { + // code不等于0,输出错误信息 + log.error("CTU调度任务创建失败,错误码:{},错误信息:{},任务类型:{},容器编号:{},起始位置:{},目标位置:{}", + code, message, taskTyp, ctnrCode, startPos, endPos); + return false; + } + + } catch (Exception e) { + log.error("调用CTU调度任务接口异常,任务类型:{},容器编号:{},起始位置:{},目标位置:{}", + taskTyp, ctnrCode, startPos, endPos, e); + return false; + } + } + /** * 生成请求唯一标识 * @param prefix 前缀