| package com.moral.api.service.impl; | 
|   | 
| import com.alibaba.fastjson.JSONObject; | 
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 
| import com.moral.api.entity.BenchmarkWindConfig; | 
| import com.moral.api.entity.Device; | 
| import com.moral.api.entity.WindModel; | 
| import com.moral.api.entity.WindModelConfig; | 
| import com.moral.api.mapper.BenchmarkWindConfigMapper; | 
| import com.moral.api.mapper.DeviceMapper; | 
| import com.moral.api.mapper.WindModelConfigMapper; | 
| import com.moral.api.mapper.WindModelMapper; | 
| import com.moral.api.service.WindModelService; | 
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | 
| import com.moral.constant.Constants; | 
| import com.moral.util.DateUtils; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.data.redis.core.RedisTemplate; | 
| import org.springframework.stereotype.Service; | 
|   | 
| import java.util.*; | 
| import java.util.stream.Collectors; | 
|   | 
| /** | 
|  * <p> | 
|  *  服务实现类 | 
|  * </p> | 
|  * | 
|  * @author moral | 
|  * @since 2022-08-10 | 
|  */ | 
| @Service | 
| public class WindModelServiceImpl extends ServiceImpl<WindModelMapper, WindModel> implements WindModelService { | 
|   | 
|     @Autowired | 
|     private BenchmarkWindConfigMapper benchmarkWindConfigMapper; | 
|   | 
|     @Autowired | 
|     private RedisTemplate redisTemplate; | 
|   | 
|     @Autowired | 
|     private WindModelMapper windModelMapper; | 
|   | 
|     @Autowired | 
|     private DeviceMapper deviceMapper; | 
|   | 
|     @Autowired | 
|     private WindModelConfigMapper windModelConfigMapper; | 
|   | 
|     @Override | 
|     public void windFieldStatistics() { | 
|         QueryWrapper<WindModelConfig> windModelConfigQueryWrapper = new QueryWrapper<>(); | 
|         windModelConfigQueryWrapper.eq("is_delete",Constants.NOT_DELETE); | 
|         List<WindModelConfig> windModelConfigs = windModelConfigMapper.selectList(windModelConfigQueryWrapper); | 
|         List<Integer> orgIdList = windModelConfigs.stream().map(WindModelConfig::getOrganizationId).collect(Collectors.toList()); | 
|         QueryWrapper<BenchmarkWindConfig> benchmarkWindConfigQueryWrapper = new QueryWrapper<>(); | 
|         benchmarkWindConfigQueryWrapper.eq("is_delete",Constants.NOT_DELETE); | 
|         benchmarkWindConfigQueryWrapper.in("organization_id",orgIdList); | 
|         List<Map<String, Object>> benchmarkWindConfigMaps = benchmarkWindConfigMapper.selectMaps(benchmarkWindConfigQueryWrapper); | 
|         for (Map<String, Object> benchmarkWindConfig:benchmarkWindConfigMaps) { | 
|             String benchmark = benchmarkWindConfig.get("benchmark").toString(); | 
|             String preservation = benchmarkWindConfig.get("preservation").toString(); | 
|             JSONObject benchmarkJson = JSONObject.parseObject(benchmark); | 
|             JSONObject preservationJson = JSONObject.parseObject(preservation); | 
|             Iterator benchmarkJsonIter = benchmarkJson.entrySet().iterator(); | 
|             Iterator preservationJsonIter = preservationJson.entrySet().iterator(); | 
|             JSONObject windModelJson = new JSONObject(); | 
|             while (benchmarkJsonIter.hasNext()) { | 
|                 Map.Entry entry = (Map.Entry) benchmarkJsonIter.next(); | 
|                 if (redisTemplate.opsForHash().hasKey("data_second",entry.getValue())){ | 
|                     Object benchmarkObject = redisTemplate.opsForHash().get("data_second",entry.getValue()); | 
|                     Map benchmarkMap = JSONObject.parseObject(JSONObject.toJSONString(benchmarkObject), Map.class); | 
|                     windModelJson.put(entry.getKey().toString(),benchmarkMap.get("a01008")); | 
|                 } | 
|             } | 
|             JSONObject windModelValue = new JSONObject(); | 
|             while (preservationJsonIter.hasNext()) { | 
|                 Map.Entry entry = (Map.Entry) preservationJsonIter.next(); | 
|                 if (redisTemplate.opsForHash().hasKey("data_second",entry.getValue())){ | 
|                     Object preservationObject = redisTemplate.opsForHash().get("data_second",entry.getValue()); | 
|                     QueryWrapper<Device> deviceQueryWrapper = new QueryWrapper<>(); | 
|                     deviceQueryWrapper.eq("is_delete", Constants.NOT_DELETE); | 
|                     deviceQueryWrapper.eq("mac",entry.getValue()); | 
|                     Device device = deviceMapper.selectOne(deviceQueryWrapper); | 
|                     Map preservationMap = JSONObject.parseObject(JSONObject.toJSONString(preservationObject), Map.class); | 
|                     Object[] preservationArray = new Object[4]; | 
|                     preservationArray[0] = device.getLongitude(); | 
|                     preservationArray[1] = device.getLatitude(); | 
|                     preservationArray[2] = preservationMap.get("a01007"); | 
|                     preservationArray[3] = preservationMap.get("a01008"); | 
|                     windModelValue.put(entry.getKey().toString(),preservationArray); | 
|                 } | 
|             } | 
|             int dayOfMonth = DateUtils.getDay(new Date()); | 
|             int remainder = dayOfMonth % 15; | 
|             String remainderStr = ""; | 
|             if (remainder<10){ | 
|                 remainderStr = "0"+remainder; | 
|             }else { | 
|                 remainderStr = remainder+""; | 
|             } | 
|             Map<String,Object> insertMap = new HashMap<>(); | 
|             insertMap.put("destinationTab",benchmarkWindConfig.get("destination_tab").toString()+remainderStr); | 
|             insertMap.put("json",windModelJson.toJSONString()); | 
|             insertMap.put("value",windModelValue.toJSONString()); | 
|             windModelMapper.insert(insertMap); | 
|         } | 
|     } | 
| } |