package com.gyee.failurestatistics.service; import com.gyee.common.model.StringUtils; import com.gyee.failurestatistics.init.CacheContext; import com.gyee.failurestatistics.model.auto.Earlywarningmain; import com.gyee.failurestatistics.model.auto.Earlywarningsub; import com.gyee.failurestatistics.model.auto.Windpowerstation; import com.gyee.failurestatistics.model.auto.Windturbine; import com.gyee.failurestatistics.service.auto.IEarlywarningmainService; import com.gyee.failurestatistics.service.auto.IEarlywarningsubService; import com.gyee.failurestatistics.vo.EventVo; import com.gyee.failurestatistics.vo.ShutdowneventVo; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.sql.ResultSet; import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.*; import java.util.Map.Entry; /** * @ClassName : EarlywarningService * @Description : 报警统计service */ @Service public class EarlywarningService { @Resource private IEarlywarningmainService earlywarningmainService; @Resource private IEarlywarningsubService earlywarningsubService; public void saveEarlywarningmain() throws Exception { Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); Date endDate = cal.getTime(); cal.set(Calendar.DAY_OF_MONTH, -1); Date beginDate = cal.getTime(); Map> day1nummap = getCountMap(beginDate, endDate); //Map>> day1eventmap = getEventMap(beginDate, endDate); Map day1ordermap = getCountOrderNum(beginDate, endDate); cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); endDate = cal.getTime(); cal.set(Calendar.DAY_OF_MONTH, -3); beginDate = cal.getTime(); Map> day3nummap = getCountMap(beginDate, endDate); //Map>> day3eventmap = getEventMap(beginDate, endDate); Map day3ordermap = getCountOrderNum(beginDate, endDate); cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); endDate = cal.getTime(); cal.set(Calendar.DAY_OF_MONTH, -7); beginDate = cal.getTime(); Map> day7nummap = getCountMap(beginDate, endDate); //Map>> day7eventmap = getEventMap(beginDate, endDate); Map day7ordermap = getCountOrderNum(beginDate, endDate); cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); endDate = cal.getTime(); cal.set(Calendar.DAY_OF_MONTH, -15); beginDate = cal.getTime(); Map> day15nummap = getCountMap(beginDate, endDate); //Map>> day15eventmap = getEventMap(beginDate, endDate); Map day15ordermap = getCountOrderNum(beginDate, endDate); cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); endDate = cal.getTime(); cal.set(Calendar.MONTH, -1); beginDate = cal.getTime(); Map> month1nummap = getCountMap(beginDate, endDate); // Map>> month1eventmap = getEventMap(beginDate, endDate); Map month1ordermap = getCountOrderNum(beginDate, endDate); cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); for (Windpowerstation wp : CacheContext.wpls) { if (wp.getId().endsWith("FDC")) { System.out.println("开始统计"+wp.getName()+"预警排名和次数统计"); List wtls = CacheContext.wtsmap.get(wp.getId()); Map synthesistopordermap =getSynthesistopOrderNum(wtls,day1ordermap, day3ordermap, day7ordermap, day15ordermap, month1ordermap); for (Windturbine wt : wtls) { Earlywarningmain po = new Earlywarningmain(); po.setWpid(wp.getId()); po.setWpname(wp.getName()); po.setWtid(wt.getId()); po.setWtname(wt.getName()); po.setRecodedate(cal.getTime()); if (day1nummap.containsKey(wt.getId())) { /*********************************************************************************/ setEarlywarningmainValue(po, 0, day1nummap, wt); if (day1ordermap.containsKey(wt.getId())) { po.setDay1topnum(day1ordermap.get(wt.getId())); } else { po.setDay1topnum(wtls.size()); } } if (day3nummap.containsKey(wt.getId())) { /*********************************************************************************/ setEarlywarningmainValue(po, 1, day3nummap, wt); if (day3ordermap.containsKey(wt.getId())) { po.setDay3topnum(day3ordermap.get(wt.getId())); } else { po.setDay3topnum(wtls.size()); } } if (day7nummap.containsKey(wt.getId())) { /*********************************************************************************/ setEarlywarningmainValue(po, 2, day7nummap, wt); if (day7ordermap.containsKey(wt.getId())) { po.setDay7topnum(day7ordermap.get(wt.getId())); } else { po.setDay7topnum(wtls.size()); } } /*********************************************************************************/ if (day15nummap.containsKey(wt.getId())) { setEarlywarningmainValue(po, 3, day15nummap, wt); if (day15ordermap.containsKey(wt.getId())) { po.setDay15topnum(day15ordermap.get(wt.getId())); } else { po.setDay15topnum(wtls.size()); } } /*********************************************************************************/ if (month1nummap.containsKey(wt.getId())) { setEarlywarningmainValue(po, 4, month1nummap, wt); if (month1ordermap.containsKey(wt.getId())) { po.setMonth1topnum(month1ordermap.get(wt.getId())); } else { po.setMonth1topnum(wtls.size()); } } /*********************************************************************************/ if(synthesistopordermap.containsKey(wt.getId())) { po.setSynthesistopnum(synthesistopordermap.get(wt.getId())); }else { po.setSynthesistopnum(wtls.size()); } String tid=com.gyee.failurestatistics.util.StringUtils.getUUID(); po.setId(tid); insertEarlywarningmain(po); // DAY3TOP1 // DAY3TOP2 // DAY3TOP3 // DAY7TOP1 // DAY7TOP2 // DAY7TOP3 // DAY15TOP1 // DAY15TOP2 // DAY15TOP3 // MONTH1TOP1 // MONTH1TOP2 // MONTH1TOP3 //保存子表分类统计1天预警编号 // saveEarlywarningsub(cal, day1eventmap, wp, wt, po, tid, "DAY1TOP1", po.getDay1top1Id()); // saveEarlywarningsub(cal, day1eventmap, wp, wt, po, tid, "DAY1TOP2", po.getDay1top2Id()); // saveEarlywarningsub(cal, day1eventmap, wp, wt, po, tid, "DAY1TOP3", po.getDay1top3Id()); // //保存子表分类统计3天预警编号 // saveEarlywarningsub(cal, day3eventmap, wp, wt, po, tid, "DAY3TOP1", po.getDay3top1Id()); // saveEarlywarningsub(cal, day3eventmap, wp, wt, po, tid, "DAY3TOP2", po.getDay3top2Id()); // saveEarlywarningsub(cal, day3eventmap, wp, wt, po, tid, "DAY3TOP3", po.getDay3top3Id()); // //保存子表分类统计7天预警编号 // saveEarlywarningsub(cal, day7eventmap, wp, wt, po, tid, "DAY7TOP1", po.getDay7top1Id()); // saveEarlywarningsub(cal, day7eventmap, wp, wt, po, tid, "DAY7TOP2", po.getDay7top2Id()); // saveEarlywarningsub(cal, day7eventmap, wp, wt, po, tid, "DAY7TOP3", po.getDay7top3Id()); // //保存子表分类统计15天预警编号 // saveEarlywarningsub(cal, day15eventmap, wp, wt, po, tid, "DAY15TOP1", po.getDay15top1Id()); // saveEarlywarningsub(cal, day15eventmap, wp, wt, po, tid, "DAY15TOP2", po.getDay15top2Id()); // saveEarlywarningsub(cal, day15eventmap, wp, wt, po, tid, "DAY15TOP3", po.getDay15top3Id()); // //保存子表分类统计1月预警编号 // saveEarlywarningsub(cal, month1eventmap, wp, wt, po, tid, "MONTH1TOP1", po.getMonth1top1Id()); // saveEarlywarningsub(cal, month1eventmap, wp, wt, po, tid, "MONTH1TOP2", po.getMonth1top2Id()); // saveEarlywarningsub(cal, month1eventmap, wp, wt, po, tid, "MONTH1TOP3", po.getMonth1top3Id()); } } System.out.println("结束统计"+wp.getName()+"预警排名和次数统计"); } } /** * 复制排名前三的预警名称和预警数量 * * @param po * @param type * @param nummap * @param wt */ private void setEarlywarningmainValue(Earlywarningmain po, int type, Map> nummap, Windturbine wt) { List eventls = nummap.get(wt.getId()); int i = 1; if (type == 0) { for (EventVo vo : eventls) { switch (i) { case 1: po.setDay1top1(vo.getEventnum()); po.setDay1top1Id(vo.getWarnId()); po.setDay1top1name(vo.getWarnName()); i++; break; case 2: po.setDay1top2(vo.getEventnum()); po.setDay1top2Id(vo.getWarnId()); po.setDay1top2name(vo.getWarnName()); i++; break; case 3: po.setDay1top3(vo.getEventnum()); po.setDay1top3Id(vo.getWarnId()); po.setDay1top3name(vo.getWarnName()); i++; break; default: break; } } } else if (type == 1) { for (EventVo vo : eventls) { switch (i) { case 1: po.setDay3top1(vo.getEventnum()); po.setDay3top1Id(vo.getWarnId()); po.setDay3top1name(vo.getWarnName()); i++; break; case 2: po.setDay3top2(vo.getEventnum()); po.setDay3top2Id(vo.getWarnId()); po.setDay3top2name(vo.getWarnName()); i++; break; case 3: po.setDay3top3(vo.getEventnum()); po.setDay3top3Id(vo.getWarnId()); po.setDay3top3name(vo.getWarnName()); i++; break; default: break; } } } else if (type == 2) { for (EventVo vo : eventls) { switch (i) { case 1: po.setDay7top1(vo.getEventnum()); po.setDay7top1Id(vo.getWarnId()); po.setDay7top1name(vo.getWarnName()); i++; break; case 2: po.setDay7top2(vo.getEventnum()); po.setDay7top2Id(vo.getWarnId()); po.setDay7top2name(vo.getWarnName()); i++; break; case 3: po.setDay7top3(vo.getEventnum()); po.setDay7top3Id(vo.getWarnId()); po.setDay7top3name(vo.getWarnName()); i++; break; default: break; } } } else if (type == 3) { for (EventVo vo : eventls) { switch (i) { case 1: po.setDay15top1(vo.getEventnum()); po.setDay15top1Id(vo.getWarnId()); po.setDay15top1name(vo.getWarnName()); i++; break; case 2: po.setDay15top2(vo.getEventnum()); po.setDay15top2Id(vo.getWarnId()); po.setDay15top2name(vo.getWarnName()); i++; break; case 3: po.setDay15top3(vo.getEventnum()); po.setDay15top3Id(vo.getWarnId()); po.setDay15top3name(vo.getWarnName()); i++; break; default: break; } } } else if (type == 4) { for (EventVo vo : eventls) { switch (i) { case 1: po.setMonth1top1(vo.getEventnum()); po.setMonth1top1Id(vo.getWarnId()); po.setMonth1top1name(vo.getWarnName()); i++; break; case 2: po.setMonth1top2(vo.getEventnum()); po.setMonth1top2Id(vo.getWarnId()); po.setMonth1top2name(vo.getWarnName()); i++; break; case 3: po.setMonth1top3(vo.getEventnum()); po.setMonth1top3Id(vo.getWarnId()); po.setMonth1top3name(vo.getWarnName()); i++; break; default: break; } } } } /** * 风机编号》Listt 获得统计数量map * * @param beginDate * @param endDate * @return */ @SuppressWarnings({ "unchecked", "rawtypes" }) public Map> getCountMap(Date beginDate, Date endDate) { Map> map = new HashMap>(); if (StringUtils.notEmp(beginDate) && StringUtils.notEmp(endDate)) { List list =earlywarningmainService.getCountMap(beginDate, endDate); if (!list.isEmpty()) { for (EventVo vo : list) { if (map.containsKey(vo.getWtId())) { List ls = map.get(vo.getWtId()); ls.add(vo); map.put(vo.getWtId(), ls); } else { List ls = new ArrayList(); ls.add(vo); map.put(vo.getWtId(), ls); } } } } return map; } /** * 风机编号》Integer 获得统计排名顺序号 * * @param beginDate * @param endDate * @return */ @SuppressWarnings({ "unchecked", "rawtypes" }) public Map getCountOrderNum(Date beginDate, Date endDate) { Map map = new HashMap(); if (StringUtils.notEmp(beginDate) && StringUtils.notEmp(endDate)) { List list = earlywarningmainService.getCountOrderNum(beginDate, endDate); if (!list.isEmpty()) { String wpId = list.get(0).getWpId(); int i = 1; for (EventVo vo : list) { if (wpId.equals(vo.getWpId())) { map.put(vo.getWtId(), i); i++; } else { wpId = vo.getWpId(); i = 1; map.put(vo.getWtId(), i); i++; } } } } return map; } /** * 风机编号》Integer 获得统计综合排名顺序号 * * @return */ public Map getSynthesistopOrderNum(List wtls, Map day1ordermap, Map day3ordermap, Map day7ordermap, Map day15ordermap, Map month1ordermap) { Map synthesistopordermap = new TreeMap(); if (StringUtils.notEmp(wtls) && !wtls.isEmpty() && StringUtils.notEmp(day3ordermap) && StringUtils.notEmp(day7ordermap) && StringUtils.notEmp(day15ordermap) && StringUtils.notEmp(month1ordermap)) { for (Windturbine wt : wtls) { int day1 = 0; int day3 = 0; int day7 = 0; int day15 = 0; int month1 = 0; if (day1ordermap.containsKey(wt.getId())) { day1 = day1ordermap.get(wt.getId()); } else { day1 = wtls.size(); } if (day3ordermap.containsKey(wt.getId())) { day3 = day3ordermap.get(wt.getId()); } else { day3 = wtls.size(); } if (day7ordermap.containsKey(wt.getId())) { day7 = day7ordermap.get(wt.getId()); } else { day7 = wtls.size(); } if (day15ordermap.containsKey(wt.getId())) { day15 = day15ordermap.get(wt.getId()); } else { day15 = wtls.size(); } if (month1ordermap.containsKey(wt.getId())) { month1 = month1ordermap.get(wt.getId()); } else { month1 = wtls.size(); } synthesistopordermap.put(wt.getId(), day1 +day3 + day7 + day15 + month1); } } // 这里将map.entrySet()转换成list List> list = new ArrayList>(synthesistopordermap.entrySet()); // 然后通过比较器来实现排序 Collections.sort(list, new Comparator>() { // 升序排序 public int compare(Entry o1, Entry o2) { return o1.getValue().compareTo(o2.getValue()); } }); synthesistopordermap = new TreeMap(); int i = 1; for (Map.Entry mapping : list) { // System.out.println(mapping.getKey()+":"+mapping.getValue()); synthesistopordermap.put(mapping.getKey(), i); i++; } return synthesistopordermap; } /** * 获得风机》报警编号》List * * @param beginDate * @param endDate * @return */ @SuppressWarnings({ "unchecked", "rawtypes" }) public Map>> getEventMap(Date beginDate, Date endDate) { Map>> map = new HashMap>>(); if (StringUtils.notEmp(beginDate) && StringUtils.notEmp(endDate)) { List list = earlywarningmainService.getEventMap(beginDate, endDate); if (!list.isEmpty()) { for (ShutdowneventVo vo : list) { if (map.containsKey(vo.getWindTurbineId())) { Map> tempmap = map.get(vo.getWindTurbineId()); if (tempmap.containsKey(vo.getWarningId())) { List ls = tempmap.get(vo.getWarningId()); ls.add(vo); tempmap.put(vo.getWarningId(), ls); } else { List ls = new ArrayList(); ls.add(vo); tempmap.put(vo.getWarningId(), ls); } map.put(vo.getWindTurbineId(), tempmap); } else { Map> tempmap = new HashMap>(); List ls = new ArrayList(); ls.add(vo); tempmap.put(vo.getWarningId(), ls); map.put(vo.getWindTurbineId(), tempmap); } } } } return map; } private void saveEarlywarningsub(Calendar cal, Map>> eventmap, Windpowerstation wp, Windturbine wt, Earlywarningmain po, String tid,String name,String warningId) { if(eventmap.containsKey(wt.getId())) { Map> map=eventmap.get(wt.getId()); if(map.containsKey(warningId)) { List eventls=map.get(warningId); for(ShutdowneventVo vo:eventls) { Earlywarningsub subpo=new Earlywarningsub(); subpo.setTid(tid); subpo.setWpid(wp.getId()); subpo.setWpname(wp.getName()); subpo.setWtid(wt.getId()); subpo.setWtname(wt.getName()); subpo.setRecodedate(cal.getTime()); subpo.setName(name); subpo.setEventid(vo.getId()); earlywarningsubService.insertEarlywarningsub(subpo); } } } } public void deleteEarlywarningmain(Date recodedate) { earlywarningmainService.deleteEarlywarningmain(recodedate); } public int insertEarlywarningmain(Earlywarningmain po) { return earlywarningmainService.insertEarlywarningmain(po); } }