Newer
Older
newfiber-data-adapter / src / main / java / org / springnewfiber / dataadapter / ziguang / bz / action / BzAction.java
package org.springnewfiber.dataadapter.ziguang.bz.action;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.ImmutableMap;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;
import org.springnewfiber.dataadapter.config.BladeRedis;
import org.springnewfiber.dataadapter.ziguang.bz.dto.BzDto;
import org.springnewfiber.dataadapter.ziguang.common.LoginAction;
import org.springnewfiber.dataadapter.ziguang.common.ZiGuangConfig;

import java.util.List;
import java.util.Map;

/**
 * @program: newfiber-data-adapter
 * @description:
 * @author: djt
 * @create: 2022-01-20 14:24
 **/
//@Component
@Slf4j
@AllArgsConstructor
public class BzAction {
    private final BladeRedis bladeRedis;
    private final ZiGuangConfig ziGuangConfig;
    private final LoginAction loginAction;
    private static Map<String, Object> baseListPramMap = ImmutableMap.of("searchFilters", ImmutableMap.of("addvcd", "420113", "stnm", "", "stcd", ""));
    private final RabbitTemplate rabbitTemplate;

    /**
     * 基本信息,列表
     */
//    @PostConstruct
    public void list() {
        HttpRequest request = loginAction.getPostAuthRequest(ziGuangConfig.getBz().getListUrl());
        request.body(JSONObject.toJSONString(baseListPramMap));
        HttpResponse response = request.execute();
        log.info("泵站基础信息list:{}", response.body());//{"msg":"此账号可能已在别处登录","code":500}
        List<BzDto> list = JSONObject.parseArray(response.body(), BzDto.class);
        list.forEach(i -> {
            realTimeData(i.getSTCD());
        });
    }

    /**
     * 获取实时数据
     *
     * @param stcd
     */
    public void realTimeData(String stcd) {
        try {
            Map<String, Object> listByPramMap = ImmutableMap.of("searchFilters", ImmutableMap.of("stcd", stcd, "datatime", DateUtil.today()));
            HttpRequest request = loginAction.getPostAuthRequest(ziGuangConfig.getBz().getRealUrl());
            request.body(JSONObject.toJSONString(listByPramMap));
            HttpResponse response = request.execute();
            log.info("泵站单个实时数据,stcd:{},数据:{}", stcd, response.body());
            List<BzDto> list = JSONObject.parseArray(response.body(), BzDto.class);
            if (CollectionUtil.isNotEmpty(list)) {
                Boolean flag = bladeRedis.exists("BZ:" + stcd);
                List<BzDto> newList = CollectionUtil.reverseNew(list);
                newList.forEach(i -> {
                    BzDto dto = new BzDto();
                    if ((flag && (dto = bladeRedis.get("BZ:" + stcd)) != null && DateUtil.parse(dto.getTM()).before(DateUtil.parse(i.getTM()))) || !flag) {
                        log.info("泵站redis的数据:{},请求到的最新数据:{}", JSONObject.toJSONString(dto), JSONObject.toJSONString(i.getTM()));
                        rabbitTemplate.convertAndSend(JSONObject.toJSONString(BzDto.convert(i)));
                        bladeRedis.set("BZ:" + stcd, i);
                        log.info("发送泵站的数据:code:{},data:{}", stcd, JSONObject.toJSONString(BzDto.convert(i)));
                        return;
                    }
                });
            }
        } catch (Exception e) {
            log.error("泵站数据出错:stcd:{},Cause:{}", stcd, e.getCause());
        }
    }
}