package com.moral.strategy; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.moral.service.DeviceService; import com.moral.service.HistoryMinutelyService; import com.moral.service.SensorService; import com.moral.util.DateUtil; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.log.XxlJobLogger; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.util.ObjectUtils; import javax.annotation.Resource; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @Service public class RepairMinutelyData implements RepairDataStrategy { @Resource SensorService sensorService; @Resource DeviceService deviceService; @Resource HistoryMinutelyService historyMinutelyService; @Resource RedisTemplate redisTemplate; @Override public void repairData(String time, MultiValueMap result) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date endTimeDate = new Date(Long.parseLong(time) * 1000); Date startTimeDate = DateUtil.rollMinute(endTimeDate, -1); StringBuilder endTime = new StringBuilder(sdf.format(endTimeDate)); StringBuilder startTime = new StringBuilder(sdf.format(startTimeDate)); endTime.replace(17, 19, "00"); startTime.replace(17, 19, "00"); String queryYearAndMonthDay = DateUtil.getYear(startTimeDate) + DateUtil.getMonth(startTimeDate) + DateUtil.getDay(startTimeDate); Map devices = new HashMap<>(); List sensorKeys = sensorService.getSensorKeys(); devices.put("sensorKeys", sensorKeys); devices.put("start", startTime.toString()); devices.put("end", endTime.toString()); devices.put("yearAndMonthDay", queryYearAndMonthDay); try { List> minutelyData = deviceService.getSensorData(devices); XxlJobLogger.log("historyMinutelyData:" + minutelyData.size()); List> minutelyDataList = new ArrayList<>(); for (Map deviceData : minutelyData) { if (!ObjectUtils.isEmpty(deviceData)) { Map minutelyDataMap = new LinkedHashMap<>(); JSONObject jo = new JSONObject(true); minutelyDataMap.put("mac", deviceData.get("mac")); minutelyDataMap.put("time", endTime.toString()); JSONArray jsonArray = new JSONArray(); for (String key : deviceData.keySet()) { if (!key.equals("mac") && !key.startsWith("M")) { List date = new ArrayList<>(); date.add(deviceData.get(key)); date.add(deviceData.get("MIN" + key)); date.add(deviceData.get("MAX" + key)); jo.put(key, date); } } jsonArray.add(jo); minutelyDataMap.put("json", jsonArray.get(0).toString()); minutelyDataList.add(minutelyDataMap); } } if (!CollectionUtils.isEmpty(minutelyDataList)) { String insertYearAndMonth = DateUtil.getYear(endTimeDate) + DateUtil.getMonth(endTimeDate); historyMinutelyService.insertHistoryMinutely(minutelyDataList, insertYearAndMonth); result.add("200", "修补分钟数据成功-"+endTime); return; } } catch (Exception e) { XxlJobLogger.log("repairHistoryMinutelyException:" + e.getMessage()); result.add("500", "修补分钟数据失败-"+endTime); redisTemplate.opsForList().leftPush("unSuccessRepair_data","minutely_"+endTime); return; } result.add("500", "修补分钟数据失败-"+endTime); redisTemplate.opsForList().leftPush("unSuccessRepair_data","minutely_"+endTime); } }