|  |  |  | 
|---|
|  |  |  | package com.zy.asrs.service.impl; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.alibaba.fastjson.JSON; | 
|---|
|  |  |  | import com.alibaba.fastjson.JSONObject; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.mapper.EntityWrapper; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.mapper.Wrapper; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.service.impl.ServiceImpl; | 
|---|
|  |  |  | import com.core.common.Cools; | 
|---|
|  |  |  | 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.AgvWrkMastService; | 
|---|
|  |  |  | import com.zy.asrs.service.*; | 
|---|
|  |  |  | 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<AgvWrkMastMapper, AgvWrkMast> 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; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Value("${agv.containerArrivedPath}") | 
|---|
|  |  |  | private String containerArrivedPath; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | AgvWrkMastMapper agvWrkMastMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | AgvWrkDetlService agvWrkDetlService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | AgvLocMastService agvLocMastService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | ApiLogService apiLogService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | AgvBasDevpService agvBasDevpService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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<AgvWrkMast> agvWrkMastList, String taskType) throws IOException { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | AgvTaskCreateParam agvTaskCreateParam = new AgvTaskCreateParam(); | 
|---|
|  |  |  | agvTaskCreateParam.setTaskType(taskType); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | getRequestParam(agvTaskCreateParam,agvWrkMastList); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return doHttpRequest(agvTaskCreateParam,"搬运任务下发",url, taskCreatePath,null,"127.0.0.1"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //return containerMoveParam; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //容器入场 | 
|---|
|  |  |  | public int containerMoveIn(List<AgvWrkMast> agvWrkMastList) throws IOException { | 
|---|
|  |  |  | //调用容器入场时所需要参数 | 
|---|
|  |  |  | Map<String,List<Map<String,String>>> containerMoveParam = new HashMap<>(); | 
|---|
|  |  |  | List<Map<String,String>> positionCodeMapList = new ArrayList<>(); | 
|---|
|  |  |  | containerMoveParam.put("containerMoveIns",positionCodeMapList); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | getContainerMoveParam(agvWrkMastList,positionCodeMapList); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(Cools.isEmpty(positionCodeMapList)){ | 
|---|
|  |  |  | return 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return doHttpRequest(containerMoveParam,"容器入场任务下发",url, containerMoveInPath,null,"127.0.0.1"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //容器离场 | 
|---|
|  |  |  | public int containerMoveOut(List<AgvWrkMast> agvWrkMastList){ | 
|---|
|  |  |  | Map<String,List<Map<String,String>>> containerMoveParam = new HashMap<>(); | 
|---|
|  |  |  | List<Map<String,String>> positionCodeMapList = new ArrayList<>(); | 
|---|
|  |  |  | containerMoveParam.put("containerMoveOuts",positionCodeMapList); | 
|---|
|  |  |  | for(AgvWrkMast agvWrkMast : agvWrkMastList){ | 
|---|
|  |  |  | Map<String,String> 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; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public boolean deleteByWrkNo(int wrkNo) { | 
|---|
|  |  |  | return this.delete(new EntityWrapper<AgvWrkMast>().eq("wrk_no", wrkNo)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //容器到达通知 | 
|---|
|  |  |  | public int containerArrived(AgvWrkMast agvWrkMast) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Map<String,String> containerArrivedParam = new HashMap<>(); | 
|---|
|  |  |  | containerArrivedParam.put("slotCode",agvWrkMast.getSourceLocNo()); | 
|---|
|  |  |  | containerArrivedParam.put("containerCode",agvWrkMast.getBarcode()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return doHttpRequest(containerArrivedParam,"容器达到通知",url, containerArrivedPath,null,"127.0.0.1"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public List<AgvWrkMast> selectReadyAgvWrkMast() { | 
|---|
|  |  |  | List<String> stationCodes = agvBasDevpService.selectAllStationCode(); | 
|---|
|  |  |  | Wrapper<AgvWrkMast> wrapper = new EntityWrapper<AgvWrkMast>().eq("wrk_sts", 21L).like(false, "loc_no", "@"); | 
|---|
|  |  |  | wrapper.in("loc_no",stationCodes); | 
|---|
|  |  |  | return this.selectList(wrapper); | 
|---|
|  |  |  | //return this.baseMapper.selectReadyAgvWrkMast(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public AgvWrkMast selectByContainerCode(String containerCode) { | 
|---|
|  |  |  | return this.selectOne(new EntityWrapper<AgvWrkMast>().eq("barcode",containerCode)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private void getContainerMoveParam(List<AgvWrkMast> agvWrkMastList,List<Map<String,String>> positionCodeMapList){ | 
|---|
|  |  |  | //往容器入场参数中放入源站点位置 | 
|---|
|  |  |  | for(AgvWrkMast agvWrkMast : agvWrkMastList){ | 
|---|
|  |  |  | //判断是否为输送线入库,是则不需要容器进场请求 | 
|---|
|  |  |  | if("Y".equals(agvWrkMast.getMk())){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Map<String,String> positionCodeMap = new HashMap<>(); | 
|---|
|  |  |  | positionCodeMap.put("positionCode",agvWrkMast.getSourceLocNo()); | 
|---|
|  |  |  | positionCodeMapList.add(positionCodeMap); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private void getRequestParam(AgvTaskCreateParam agvTaskCreateParam,List<AgvWrkMast> agvWrkMastList){ | 
|---|
|  |  |  | List<AgvTaskParam> 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 | 
|---|
|  |  |  | if(agvWrkMast.getSourceLocNo().contains("CS") || agvWrkMast.getSourceLocNo().contains("SK")){ | 
|---|
|  |  |  | agvTaskkDescribeParam.setFromLocationCode(agvWrkMast.getSourceLocNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(agvWrkMast.getLocNo().contains("SK")){ | 
|---|
|  |  |  | agvTaskkDescribeParam.setToLocationCode(agvWrkMast.getLocNo()); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | agvTaskkDescribeParam.setToStationCode(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 | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|