| | |
| | | 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; |
| | | } |
| | | |
| | | } |