package com.zy.asrs.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.core.exception.CoolException; import com.zy.asrs.entity.AgvWrkMast; import com.zy.asrs.entity.param.AgvTaskCreateParam; import com.zy.asrs.entity.param.AgvTaskParam; import com.zy.asrs.entity.param.AgvTaskkDescribeParam; import com.zy.asrs.mapper.AgvWrkMastMapper; import com.zy.asrs.service.AgvLocMastService; import com.zy.asrs.service.AgvWrkDetlService; import com.zy.asrs.service.AgvWrkMastService; import com.zy.asrs.service.ApiLogService; 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.stereotype.Service; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Service @Slf4j public class AgvWrkMastServiceImp extends ServiceImpl implements AgvWrkMastService { @Value("${agv.url}") private String url; @Value("${agv.taskCreatePath}") private String taskCreatePath; @Value("${agv.containerMoveInPath}") private String containerMoveInPath; @Value("${agv.containerMoveOutPath}") private String containerMoveOutPath; @Autowired AgvWrkMastMapper agvWrkMastMapper; @Autowired AgvWrkDetlService agvWrkDetlService; @Autowired AgvLocMastService agvLocMastService; @Autowired ApiLogService apiLogService; public void updateWrkStsByWrkNo(int wrkNo, long wrkSts) { AgvWrkMast agvWrkMast = this.selectById(wrkNo); //判断要修改的工作档状态是否合理,如果不合理则抛出异常 checkWrkSts(agvWrkMast,wrkSts); agvWrkMast.setWrkSts(wrkSts); this.updateById(agvWrkMast); } // TODO 判断规则 private boolean checkWrkSts(AgvWrkMast agvWrkMast,long wrkSts){ return true; } public int startWrk(List agvWrkMastList, String taskType) throws IOException { AgvTaskCreateParam agvTaskCreateParam = new AgvTaskCreateParam(); agvTaskCreateParam.setTaskType(taskType); // //调用容器入场时所需要参数 // Map>> containerMoveParam = new HashMap<>(); // List> positionCodeMapList = new ArrayList<>(); // containerMoveParam.put("containerMoveIns",positionCodeMapList); getRequestParam(agvTaskCreateParam,agvWrkMastList); return doHttpRequest(agvTaskCreateParam,"上架任务下发",url, taskCreatePath,null,"127.0.0.1"); //return containerMoveParam; } //容器入场 public int containerMove(List agvWrkMastList) throws IOException { //调用容器入场时所需要参数 Map>> containerMoveParam = new HashMap<>(); List> positionCodeMapList = new ArrayList<>(); containerMoveParam.put("containerMoveIns",positionCodeMapList); getContainerMoveParam(agvWrkMastList,positionCodeMapList); return doHttpRequest(containerMoveParam,"容器入场任务下发",url, containerMoveInPath,null,"127.0.0.1"); } //容器离场 public int containerMoveOut(List agvWrkMastList){ Map>> containerMoveParam = new HashMap<>(); List> positionCodeMapList = new ArrayList<>(); containerMoveParam.put("containerMoveOuts",positionCodeMapList); for(AgvWrkMast agvWrkMast : agvWrkMastList){ Map positionCodeMap = new HashMap<>(); positionCodeMap.put("positionCode",agvWrkMast.getLocNo()); positionCodeMapList.add(positionCodeMap); } return doHttpRequest(containerMoveParam,"容器离场任务下发",url, containerMoveOutPath,null,"127.0.0.1"); } public boolean insertByIncrease(AgvWrkMast agvWrkMast) { int index = this.baseMapper.insertByIncrease(agvWrkMast); return index > 0; } private void getContainerMoveParam(List agvWrkMastList,List> positionCodeMapList){ //往容器入场参数中放入源站点位置 for(AgvWrkMast agvWrkMast : agvWrkMastList){ Map positionCodeMap = new HashMap<>(); positionCodeMap.put("positionCode",agvWrkMast.getSourceLocNo()); positionCodeMapList.add(positionCodeMap); } } private void getRequestParam(AgvTaskCreateParam agvTaskCreateParam,List agvWrkMastList){ List agvTaskParamList = agvWrkMastList.stream().map(agvWrkMast -> { AgvTaskParam agvTaskParam = new AgvTaskParam(); AgvTaskkDescribeParam agvTaskkDescribeParam = new AgvTaskkDescribeParam(); agvTaskParam.setTaskDescribe(agvTaskkDescribeParam); //AgvTaskParam if(agvWrkMast.getIoType() == 53 || agvWrkMast.getIoType() == 57){ agvTaskParam.setTaskCode(-agvWrkMast.getWrkNo() + ""); }else{ agvTaskParam.setTaskCode(agvWrkMast.getWrkNo() + ""); } agvTaskParam.setTaskPriority(agvWrkMast.getIoPri().intValue()); //AgvTaskkDescribeParam agvTaskkDescribeParam.setFromLocationCode(agvWrkMast.getSourceLocNo()); agvTaskkDescribeParam.setToLocationCode(agvWrkMast.getLocNo()); agvTaskkDescribeParam.setContainerCode(agvWrkMast.getBarcode()); return agvTaskParam; }).collect(Collectors.toList()); agvTaskCreateParam.setTasks(agvTaskParamList); } private int doHttpRequest(Object requestParam, String namespace, String url, String path, String appkey, String ip){ String response = ""; boolean success = false; try { response = new HttpHandler.Builder() .setUri(url) .setPath(path) .setJson(JSONObject.toJSONString(requestParam)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); int code = (int) jsonObject.get("code"); if(code != 0){ throw new CoolException("调用AGV响应错误"); } success = true; return code; }catch (Exception e){ log.error(e.getMessage()); throw new CoolException("调用AGV响应错误"); }finally { apiLogService.save( namespace, url + path, appkey, ip, JSON.toJSONString(JSONObject.toJSONString(requestParam)), response, success ); } } }