package com.telpo.dipperposition.service.impl; import com.telpo.dipperposition.common.HexConvert; import com.telpo.dipperposition.common.RedisUtil; import com.telpo.dipperposition.common.SocketClient; import com.telpo.dipperposition.config.SchedulingExecutorConfig; import com.telpo.dipperposition.service.IDipperDataAsyncTaskService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; /** * @program: DipperDataAsyncTaskServiceImpl * @description: 获取星历数据。 * @author: king * @create: 2021-01-10 14:01 */ @Service @Slf4j public class DipperDataAsyncTaskServiceImpl implements IDipperDataAsyncTaskService { private static String DIPPER_DATA_KEY = "TaidouDipperData"; private static String DIPPER_ALL_DATA_REQ = "616C6C"; @Autowired private RedisUtil redisUtil; @Autowired private SchedulingExecutorConfig schedulingExecutorConfig; @Override @Async("asyncServiceExecutor") public void pullAstEPH() { // (1) 发送bds获取星历数据 String dipperData = pullEPHFromDipper(); // (2) 获取星历数据 if (dipperData == null) { log.error("获取星历数据错误,取不到星历数据。"); } else { // 保存到DB或者缓存 log.info("保存到DB或者缓存"); redisUtil.set(DIPPER_DATA_KEY,dipperData); } } private String pullEPHFromDipper() { // 创建Socket客户端实例; SocketClient client = new SocketClient(schedulingExecutorConfig.getAstServer(), schedulingExecutorConfig.getEphAstHexPort(),schedulingExecutorConfig.getAstTimeout()); // astTimeCmd 组装 String astTimeCmd = DIPPER_ALL_DATA_REQ; String hexIn = astTimeCmd + HexConvert.makeChecksum(astTimeCmd); String ackAckCheckRef = "233E010102000421293C"; String sendResult = client.sendCmd(hexIn, ackAckCheckRef); client.closeConnection(); return sendResult; } @Override public String getAstEPH(){ return (String)redisUtil.get(DIPPER_DATA_KEY); } }