package com.zy.asrs.task; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.zy.asrs.domain.enums.TaskStatusType; import com.zy.asrs.entity.LocMast; import com.zy.asrs.entity.TaskWrk; import com.zy.asrs.service.ApiLogService; import com.zy.asrs.service.LocMastService; import com.zy.asrs.service.TaskWrkService; import com.zy.common.utils.HttpHandler; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @Slf4j @Component public class AssignAgvTaskScheduler { @Autowired private TaskWrkService taskWrkService; @Autowired private ApiLogService apiLogService; @Autowired private LocMastService locMastService; @Value("${agv.url}") private String agvUrl; @Value("${agv.applyTask}") private String agvApplyTask; /** * 自动派发AGV搬运任务 */ @Scheduled(cron = "0/3 * * * * ? ") public void execute() { List taskWrks = taskWrkService.selectList(new EntityWrapper() .eq("status", TaskStatusType.RECEIVE.id).eq("io_type", 4)); for (TaskWrk taskWrk : taskWrks) { String startPoint = taskWrk.getStartPoint(); String targetPoint = taskWrk.getTargetPoint(); LocMast startLocMast = locMastService.selectByLocNo(startPoint); if(startLocMast == null){ continue; } if (!startLocMast.getLocSts().equals("R")) { continue; } LocMast targetLocMast = locMastService.selectByLocNo(targetPoint); if(targetLocMast == null){ continue; } if (!targetLocMast.getLocSts().equals("S")) { continue; } HashMap requestParam = new HashMap<>(); requestParam.put("reqCode", taskWrk.getTaskNo()); requestParam.put("taskCode", taskWrk.getTaskNo()); requestParam.put("taskTyp", "YK"); ArrayList> positionCodePathList = new ArrayList<>(); HashMap startPointParam = new HashMap<>(); startPointParam.put("positionCode", taskWrk.getStartPoint()); startPointParam.put("type", "00"); HashMap targetPointParam = new HashMap<>(); targetPointParam.put("positionCode", taskWrk.getTargetPoint()); targetPointParam.put("type", "00"); positionCodePathList.add(startPointParam); positionCodePathList.add(targetPointParam); requestParam.put("positionCodePath", positionCodePathList); String response = null; boolean requestStatus = false; try { log.info("WCS派发任务给AGV={}", taskWrk); response = new HttpHandler.Builder() .setUri(agvUrl) .setPath(agvApplyTask) .setJson(JSON.toJSONString(requestParam)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); if (jsonObject.get("code").equals("0")) { taskWrk.setStatus(TaskStatusType.DISTRIBUTE.id); taskWrkService.updateById(taskWrk); requestStatus = true; } } catch (Exception e) { log.error("WCS派发任务给AGV失败{},返回值={}", taskWrk, response); } finally { apiLogService.save("WCS派发任务给AGV" , agvUrl + agvApplyTask , null , "127.0.0.1" , JSON.toJSONString(requestParam) , response , requestStatus ); } } } }