Newer
Older
device-data-creator / src / main / java / com / casic / service / impl / DayDataProvider.java
chaizhuang on 20 Jul 2023 8 KB 新增kafka发送,时间乱序
package com.casic.service.impl;

import com.alibaba.druid.util.StringUtils;
import com.alibaba.fastjson.JSON;
import com.casic.config.KafkaTopicConfig;
import com.casic.dao.*;
import com.casic.entity.*;
import com.casic.kafka.Producer;
import com.casic.service.DayDataService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;

@Service
@RequiredArgsConstructor
public class DayDataProvider implements DayDataService {

    private final DayDataDao dayDataDao;
    private final WellLocalDataMapper wellLocalDataMapper;
    private final WellInfoDao wellInfoDao;
    private final LiquidDataMapper liquidDataMapper;
    private final HarmfulDataMapper harmfulDataMapper;
    private final KafkaTopicConfig kafkaTopicConfig;

    @Override
    public void wellLocalData() {
        List<Map<String, String>> devcodeList = dayDataDao.getWellLocalByType();
        if (devcodeList != null) {
            for (int i = 0; i < devcodeList.size() * 0.9; i++) {
                String devcode = devcodeList.get(i).get("DEVCODE");
                String wellCode = devcodeList.get(i).get("wellCode");
                CreateWellDataLocal(devcode, wellCode);
            }
        }
    }

    @Override
    public void wellCoverData() {
        List<Map<String, String>> devcodeList = dayDataDao.getWellCoverByType();
        if (devcodeList != null) {
            for (int i = 0; i < devcodeList.size() * 0.9; i++) {
                String devcode = devcodeList.get(i).get("DEVCODE");
                String wellCode = devcodeList.get(i).get("wellCode");
                wellDataCreator(devcode, wellCode);
            }
        }
    }

    @Override
    public void liquidData() {
        List<Map<String, Object>> devcodeList = dayDataDao.getLiquidByType();
        List<Map<String, Object>> standardLiquid = dayDataDao.getStandardLiquid();
        Optional<Map<String, Object>> standardLiquidOptional = standardLiquid.stream().findFirst();
        float proportion = 0.0f;
        if (standardLiquidOptional.isPresent()) {
            String liquiddata = String.valueOf(standardLiquidOptional.get().get("liquiddata"));
            String deep = standardLiquidOptional.get().get("DEEP").toString();
            proportion = Float.valueOf(liquiddata) / Float.valueOf(deep);
        }
        if (devcodeList != null) {
            for (int i = 0; i < devcodeList.size() * 0.9; i++) {
                String devcode = String.valueOf(devcodeList.get(i).get("DEVCODE"));
                String wellCode = String.valueOf(devcodeList.get(i).get("wellCode"));
                String deep = String.valueOf(devcodeList.get(i).get("DEEP"));
                Float liquidValue = 0.0f;
                if (!StringUtils.isEmpty(deep)) {
                    liquidValue = proportion * Float.valueOf(deep);
                }
                liquidDataCreator(devcode, wellCode, liquidValue);
            }
        }
    }

    @Override
    public void harmFulData() {
        List<Map<String, String>> devcodeList = dayDataDao.getHarmfulCode();
        if (devcodeList != null) {
            for (int i = 0; i < devcodeList.size() * 0.9; i++) {
                String switchs = String.valueOf(devcodeList.get(i).get("switch"));
                String devcode = String.valueOf(devcodeList.get(i).get("DEVCODE"));
                String wellCode = String.valueOf(devcodeList.get(i).get("wellCode"));
                harmfulDataCreator(devcode, wellCode, switchs);
            }
        }
    }


    private void harmfulDataCreator(String devcode, String wellCode, String switchs) {
        DecimalFormat df = new DecimalFormat("0.00");
        HarmfulData harmfulData = new HarmfulData();
        harmfulData.setWellCode(wellCode);
        harmfulData.setDevcode(devcode);
        Double coData = Math.random();
        harmfulData.setCo(df.format(coData));
        harmfulData.setH2s("0");
        harmfulData.setO2(df.format(coData));
        harmfulData.setUptime(new Date());
        harmfulData.setLogtime(new Date());
        harmfulData.setSWITCH(switchs);
        harmfulDataMapper.insert(harmfulData);
    }


    private Random random = new Random();

    /**
     * 井盖儿3天创建6条
     */
    private void wellDataCreator(String devcode, String wellCode) {
        WellInfo wellInfo = new WellInfo();
//      wellInfo.setId(SnowBizPhyId.getBizPhyId());
        wellInfo.setWellCode(wellCode);
        wellInfo.setDevcode(devcode);
        List<Map<String, String>> mapList2 = new ArrayList<>();
        Map<String, String> cellDataMap = new HashMap<>();
        cellDataMap.put("Key", "Power");
        cellDataMap.put("Value", "-");
        Map<String, String> dataMap = new HashMap<>();
        dataMap.put("Key", "Status");
        dataMap.put("Value", "心跳");
        mapList2.add(cellDataMap);
        mapList2.add(dataMap);
        wellInfo.setDescn("心跳");
        wellInfo.setStatus("0");
        long initTime = System.currentTimeMillis();
        initTime += random.nextInt(64800000);

        wellInfo.setLogtime(new Date());
        for (int i = 0; i < 6; i++) {
            wellInfoDao.insert(wellInfo);
            initTime -= random.nextInt(200000);
            wellInfo.setLogtime(new Date(initTime));
            dayDataDao.clearOnline(devcode);
            sendData(wellInfo.getLogtime(), devcode, mapList2);
        }
    }

    /**
     * 1天6次,发六次
     */
    private void liquidDataCreator(String devcode, String wellCode, Float liquidValue) {
        LiquidData liquidData = new LiquidData();
        DecimalFormat df = new DecimalFormat("0.00");
//      liquidData.setId(SnowBizPhyId.getBizPhyId());
        liquidData.setWellCode(wellCode);
        liquidData.setDevcode(devcode);
        liquidData.setCell("22");
        long initTime = System.currentTimeMillis();
        initTime += random.nextInt(64800000);
        liquidData.setUptime(new Date(initTime));
        Map<String, String> cellDataMap = new HashMap<>();
        cellDataMap.put("Key", "Power");
        cellDataMap.put("Value", "22");
        Map<String, String> dataMap = new HashMap<>();
        dataMap.put("Key", "Level");
        for (int i = 0; i < 6; i++) {
            List<Map<String, String>> mapList2 = new ArrayList<>();
            Double errorData = Math.random() * 0.2 - 0.1;
            liquidData.setLiquiddata(df.format(liquidValue + errorData));
            dataMap.put("Value", liquidData.getLiquiddata());
            mapList2.add(dataMap);
            mapList2.add(cellDataMap);
            initTime -= random.nextInt(200000);
            liquidData.setLogtime(new Date(initTime));
            dayDataDao.clearOnline(devcode);
            liquidDataMapper.insert(liquidData);
            sendData(liquidData.getLogtime(), devcode, mapList2);
        }
    }

    private void sendData(Date logtime, String devcode, List<Map<String, String>> mapList2) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String logTime = sdf.format(logtime);
        if (!StringUtils.isEmpty(kafkaTopicConfig.getKafkaSendTopic())) {
            StandardData standardData = new StandardData(devcode, "LiquidLevel", JSON.toJSONString(mapList2), logTime);
            Producer.send(JSON.toJSONString(standardData), kafkaTopicConfig.getKafkaSendTopic());
        }
    }


    /**
     * 4天发六次
     */
    private void CreateWellDataLocal(String devcode, String wellCode) {
        WellLocalData wellLocalData = new WellLocalData();
        DecimalFormat df = new DecimalFormat("0.000000");
//      wellLocalData.setId(SnowBizPhyId.getBizPhyId());
        wellLocalData.setWellCode(wellCode);
        wellLocalData.setDevcode(devcode);
        Double lng = 116.54 + Math.random() * 0.02 - 0.01;
        Double lat = 39.79 + Math.random() * 0.02 - 0.01;
        wellLocalData.setLng(df.format(lng));
        wellLocalData.setLat(df.format(lat));
        long initTime = System.currentTimeMillis();
        for (int i = 0; i < 6; i++) {
            initTime += random.nextInt(200000);
            wellLocalData.setLogtime(new Date(initTime));
            wellLocalDataMapper.insert(wellLocalData);
        }

    }


}