package com.zy.asrs.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.core.exception.CoolException; import com.zy.asrs.controller.requestParam.StationRequestParam; import com.zy.asrs.controller.vo.OpenBusSubmitParam; import com.zy.asrs.controller.vo.StationStatus; import com.zy.asrs.service.CtuMainService; import com.zy.common.utils.HttpHandler; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; /** * 立体仓库WCS系统主流程业务 * Created by vincent on 2020/8/6 */ @Slf4j @Service("ctuMainService") @Transactional @Data public class CtuMainServiceImpl implements CtuMainService { @Value("${ctu.url}") private String ctuUrl; @Value("${ctu.station}") private String station; @Value("${ctu.sendTask}") private String sendTask; private String code ="code"; private String dataCode ="data"; private Integer codeValue =200; private Integer timeout = 1200; @Transactional public boolean sendTask(OpenBusSubmitParam openBusSubmitParam) { String response = ""; try { response = new HttpHandler.Builder() .setUri(ctuUrl) .setPath(sendTask) .setTimeout(timeout, TimeUnit.SECONDS) .setJson(JSON.toJSONString(openBusSubmitParam)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); if (jsonObject.getInteger(code).equals(codeValue)) { log.info("下发任务返回数据:{}", response); return true; } } catch (Exception e) { log.error("请求接口失败!!!url:{};request:{};response:{}", ctuUrl + sendTask, JSON.toJSONString(openBusSubmitParam), response); } return false; } /** * 检查站点状态 * * @param staNo 站点编号 * @return 站点是否可通行 */ public String checkStationStatus(Integer staNo) { StationRequestParam stationRequestParam = new StationRequestParam(); List staNos = new ArrayList<>(); staNos.add(staNo + ""); stationRequestParam.setStaNos(staNos); String response = ""; try { response = new HttpHandler.Builder() .setUri(ctuUrl) .setPath(station) .setTimeout(timeout, TimeUnit.SECONDS) .setJson(JSON.toJSONString(stationRequestParam)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); if (jsonObject.getInteger(code).equals(codeValue)) { log.info("RCS返回数据:{}", response); JSONArray data = jsonObject.getJSONArray(dataCode); List stationStatuses = JSONArray.parseArray(data.toString(), StationStatus.class); for (StationStatus object : stationStatuses) { if (object.getStaNo().equals(staNo + "")) { if (object.getConveyable()) { return object.getTaskNo(); } else { log.info("站点:{}状态不对", staNo); return null; } } } log.info("未返回站点状态:{}", staNo); } else { log.error("调用下发任务接口报错,响应码:{},响应内容:{}", jsonObject.getInteger("code"), response); throw new CoolException("调用下发任务接口报错,响应码:" + jsonObject.getInteger("code")); } } catch (CoolException e) { log.error("调用站点状态接口异常", e); throw e; } catch (Exception e) { log.error("检查站点状态失败,站点编号:{}", staNo, e); } return null; } }