|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- 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;
-
- import static java.lang.Thread.sleep;
-
- /**
- * @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(int tryTimes) throws InterruptedException {
- tryTimes--;
- // (1) 发送bds获取星历数据
- byte[] dipperData = pullEPHFromDipper();
-
- // (2) 获取星历数据
- if (dipperData == null) {
- log.error("获取星历数据错误,取不到星历数据。");
- if (tryTimes>0) {
- log.info("等待10秒再获取1次。");
- sleep(10000);
- pullAstEPH(tryTimes);
- }
- } else {
- // 保存到DB或者缓存
- log.info("保存到DB或者缓存");
- redisUtil.set(DIPPER_DATA_KEY,dipperData);
- }
- }
-
- private byte[] pullEPHFromDipper() {
-
- // 创建Socket客户端实例;
- String serverAddr = schedulingExecutorConfig.getAstServer();
- int serverPort = schedulingExecutorConfig.getAstEphAstHexPort();
- SocketClient client = new SocketClient(serverAddr,serverPort,schedulingExecutorConfig.getAstTimeout());
-
- // astTimeCmd 组装
- String astTimeCmd = DIPPER_ALL_DATA_REQ;
- String checkSum = HexConvert.makeChecksum(astTimeCmd.toString()).toUpperCase();
- StringBuilder astCheckSumBuf = new StringBuilder();
- astCheckSumBuf.append(checkSum);
- while (astCheckSumBuf.length()<4) {
- astCheckSumBuf.insert(0,"0");
- }
- checkSum = astCheckSumBuf.toString();
-
- String hexIn = astTimeCmd + checkSum.substring(0,2) + " " + checkSum.substring(2,4);
-
- byte[] sendResult = null;
- //String ackAckCheckRef = "233E010102000421293C";
- sendResult = client.sendCmd(hexIn);
- client.closeConnection();
-
- return sendResult;
- }
-
- @Override
- public byte[] getAstEPH(){
- // String dipperData = pullEPHFromDipper();
- byte[] dipperData;
- if (!redisUtil.hasKey(DIPPER_DATA_KEY)) {
- try {
- this.pullAstEPH(1);
- } catch (InterruptedException e) {
- log.error("获取星历数据发生异常:", e);
- }
- }
-
- dipperData = (byte[])redisUtil.get(DIPPER_DATA_KEY);
- return dipperData;
- }
- }
|