| zy-acs-manager/src/main/java/com/zy/acs/manager/common/config/ConveyorProperties.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| zy-acs-manager/src/main/java/com/zy/acs/manager/core/DemoController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/conveyor/SiemensConveyorStationService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/dto/HttpResult.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| zy-acs-manager/src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
zy-acs-manager/src/main/java/com/zy/acs/manager/common/config/ConveyorProperties.java
New file @@ -0,0 +1,54 @@ package com.zy.acs.manager.common.config; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; import java.net.InetAddress; import java.net.UnknownHostException; /** * 输送线plc系统配置 * Created by luxiaotao on 2018/10/15 */ @Configuration @ConfigurationProperties(prefix = "convey-plc") public class ConveyorProperties { public static String HOST_NAME; static { try { HOST_NAME = InetAddress.getLocalHost().getHostName(); } catch (UnknownHostException e) { System.err.println("find hostname err"); } } private String host; private Integer port; public static String getHostName() { return HOST_NAME; } public static void setHostName(String hostName) { HOST_NAME = hostName; } public String getHost() { return host; } public void setHost(String host) { this.host = host; } public Integer getPort() { return port; } public void setPort(Integer port) { this.port = port; } } zy-acs-manager/src/main/java/com/zy/acs/manager/core/DemoController.java
@@ -3,17 +3,17 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.zy.acs.common.enums.AgvStatusType; import com.zy.acs.framework.common.R; import com.zy.acs.framework.common.SnowflakeIdWorker; import com.zy.acs.manager.core.service.*; import com.zy.acs.manager.core.service.astart.MapDataDispatcher; import com.zy.acs.manager.core.utils.RouteGenerator; import com.zy.acs.manager.core.integrate.conveyor.ConveyorStationService; import com.zy.acs.manager.core.service.AvoidWaveCalculator; import com.zy.acs.manager.core.service.MapService; import com.zy.acs.manager.core.service.PatrolService; import com.zy.acs.manager.manager.entity.*; import com.zy.acs.manager.manager.enums.FuncStaType; import com.zy.acs.manager.manager.enums.StaReserveType; import com.zy.acs.manager.manager.enums.StatusType; import com.zy.acs.manager.manager.service.*; import com.zy.acs.manager.system.controller.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; @@ -33,100 +33,33 @@ @Autowired private AgvDetailService agvDetailService; @Autowired private TaskService taskService; @Autowired private MainService mainService; @Autowired private MainLockWrapService mainLockWrapService; @Autowired private SnowflakeIdWorker snowflakeIdWorker; @Autowired private CodeService codeService; @Autowired private JdbcTemplate jdbcTemplate; @Autowired private LocService locService; @Autowired private TrafficService trafficService; @Autowired private ThreadPoolRegulator threadPoolRegulator; @Autowired private MapDataDispatcher mapDataDispatcher; @Autowired private AvoidWaveCalculator avoidWaveCalculator; @Autowired private PatrolService patrolService; @Autowired private RouteGenerator routeGenerator; @Autowired private FuncStaService funcStaService; @Autowired private AgvModelService agvModelService; @Autowired private StaService staService; // @Autowired // private ConveyorStationService siemensConveyorStationService; @Autowired private ConveyorStationService siemensConveyorStationService; @RequestMapping(value = "/system/info", method = {RequestMethod.GET, RequestMethod.POST}) public R systemInfo() { return R.ok("RCS-FLOW-1.0.0"); } // {"msg":"Success","code":200,"data":[[38,2],[38,3],[38,4],[38,5],[38,6],[37,6],[36,6],[35,6],[34,6],[33,6],[32,6],[31,6],[30,6],[29,6],[28,6],[27,6],[26,6],[25,6]]} // {"msg":"Success","code":200,"data":[[38,2],[38,3],[38,4],[38,5],[38,6],[37,6],[36,6],[35,6],[34,6],[33,6],[32,6],[31,6],[30,6],[29,6],[28,6],[27,6],[26,6],[25,6]]} @RequestMapping(value = "/system/demo", method = {RequestMethod.GET, RequestMethod.POST}) public R demo() { long startTime = System.currentTimeMillis(); for (int i = 0; i < 1000; i++) { this.demo1(); } System.out.println(System.currentTimeMillis() - startTime); return R.ok(); Sta sta = staService.selectByStaNo("1006"); boolean b = siemensConveyorStationService.allowAgvWork(sta, null, null, StaReserveType.IN); return R.ok().add(b); } private R demo1() { List<String> path = new ArrayList<>(); path.add("00000035"); path.add("00000085"); path.add("00000135"); path.add("00000185"); path.add("00000235"); path.add("00000234"); path.add("00000233"); path.add("00000232"); path.add("00000231"); path.add("00000230"); path.add("00000229"); path.add("00000228"); path.add("00000227"); path.add("00000226"); path.add("00000225"); path.add("00000224"); path.add("00000223"); path.add("00000222"); // List<int[]> codeMatrixIdxList = new ArrayList<>(); // for (String pathStr : path) { // int[] codeMatrixIdx = mapDataDispatcher.getCodeMatrixIdx(null, pathStr); // codeMatrixIdxList.add(codeMatrixIdx); // } // List<int[]> codeMatrixIdxList = mapDataDispatcher.getCodeMatrixIdxList(null, path); // System.out.println(codeMatrixIdxList.toString()); // return R.ok().add(codeMatrixIdxList); for (String codeData : path) { Code code = codeService.getCacheByData(codeData); Code byId = codeService.getCacheById(code.getId()); } return R.ok(); } // @RequestMapping(value = "/system/route/generate", method = {RequestMethod.GET, RequestMethod.POST}) // public R generate() { // String[][] codeMatrix = mapDataDispatcher.getCodeMatrix(null); // List<String> list = routeGenerator.generateRoutes(codeMatrix); // return R.ok(String.valueOf(list.size())).add(list); // } // http://localhost:8088/demo/auto/go/standby @GetMapping("/auto/go/standby") zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/conveyor/SiemensConveyorStationService.java
@@ -1,19 +1,139 @@ package com.zy.acs.manager.core.integrate.conveyor; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.zy.acs.framework.common.Cools; import com.zy.acs.manager.common.config.ConveyorProperties; import com.zy.acs.manager.common.utils.HttpGo; import com.zy.acs.manager.core.integrate.dto.ConveyorStaDto; import com.zy.acs.manager.core.integrate.dto.HttpResult; import com.zy.acs.manager.manager.entity.Segment; import com.zy.acs.manager.manager.entity.Sta; import com.zy.acs.manager.manager.entity.Task; import com.zy.acs.manager.manager.enums.StaReserveType; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; import java.time.Duration; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Slf4j @Service public class SiemensConveyorStationService implements ConveyorStationService { @Autowired private ConveyorProperties conveyorProperties; private HttpGo http; @PostConstruct public void init() { this.http = HttpGo.builder() .connectTimeout(Duration.ofSeconds(8)) .readTimeout(Duration.ofSeconds(15)) // .defaultHeader("User-Agent", "HttpGo/1.0") // .trustAllSsl(true) // ONLY if you really need it (self-signed internal) .build(); } @Override public boolean allowAgvWork(Sta sta, Task task, Segment seg, StaReserveType type) { final String staNo = sta.getStaNo(); // staNo // url String url = this.buildUrl("/station/query"); // headers Map<String, String> headers = new HashMap<>(); // params Map<String, Object> params = new HashMap<>(); List<String> list = new ArrayList<>(); list.add(staNo); params.put("staNos", list); // do request HttpResult<List<ConveyorStaDto>> result; try { result = postForResult(url, headers, params); Integer code = result.getCode(); if (null == code || 200 != code) { return false; } List<ConveyorStaDto> dtoList = result.getData(); if (Cools.isEmpty(list)) { return false; } ConveyorStaDto staDto = dtoList.stream() .filter(dto -> !Cools.isEmpty(dto.getStaNo()) && dto.getStaNo().equals(staNo)) .findFirst().orElse(null); if (null == staDto) { return false; } if (!staDto.getOnline()) { return false; } // outbound: checkout nothing and inEnable if (type.equals(StaReserveType.IN)) { if (staDto.getOccupied()) { return false; } if (!staDto.getInEnable()) { return false; } } // inbound: checkout occupied and outEnable if (type.equals(StaReserveType.OUT)) { if (!staDto.getOccupied()) { return false; } if (!staDto.getOutEnable()) { return false; } } } catch (Exception e) { log.error("Conveyor query failed, FAIL-OPEN. staNo={}, taskId={}, type={}", sta.getStaNo(), task.getSeqNum(), type, e); return false; } // ok return true; } private String buildUrl(String path) { String host = conveyorProperties.getHost(); Integer port = conveyorProperties.getPort(); String p = (path == null) ? "" : (path.startsWith("/") ? path : ("/" + path)); return "http://" + host + ":" + port + p; } private HttpResult<List<ConveyorStaDto>> postForResult(String url , Map<String, String> headers, Map<String, Object> params) throws Exception { String json = JSON.toJSONString(params); HttpGo.HttpResponse response = this.http.postJson(url, headers, json); int status = response.statusCode(); if (status != 200) { throw new RuntimeException("Conveyor HTTP error: status=" + status + ", body=" + response.body()); } String body = response.body(); if (Cools.isEmpty(body)) { throw new RuntimeException("Conveyor empty response body."); } HttpResult<List<ConveyorStaDto>> result = JSON.parseObject(body, new TypeReference<HttpResult<List<ConveyorStaDto>>>() {}); if (result == null) { throw new RuntimeException("Conveyor parse HttpResult failed: body=" + body); } return result; } } zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/dto/HttpResult.java
New file @@ -0,0 +1,14 @@ package com.zy.acs.manager.core.integrate.dto; import lombok.Data; @Data public class HttpResult<T> { private Integer code; private String msg; private T data; } zy-acs-manager/src/main/resources/application.yml
@@ -50,6 +50,10 @@ timeout: 5000 index: 8 convey-plc: host: 192.168.3.54 port: 9090 floyd: enable: false