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); } } }