#
vincentlu
6 天以前 940992f0d26959d7ee6a6038c2c9b21cfb74533b
#
2个文件已添加
3个文件已修改
289 ■■■■ 已修改文件
zy-acs-manager/src/main/java/com/zy/acs/manager/common/config/ConveyorProperties.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/DemoController.java 95 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/conveyor/SiemensConveyorStationService.java 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/dto/HttpResult.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/resources/application.yml 4 ●●●● 补丁 | 查看 | 原始文档 | 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