123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586 |
- 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<String, List<EventVo>> day1nummap = getCountMap(beginDate, endDate);
- //Map<String, Map<String, List<ShutdowneventVo>>> day1eventmap = getEventMap(beginDate, endDate);
- Map<String, Integer> 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<String, List<EventVo>> day3nummap = getCountMap(beginDate, endDate);
- //Map<String, Map<String, List<ShutdowneventVo>>> day3eventmap = getEventMap(beginDate, endDate);
- Map<String, Integer> 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<String, List<EventVo>> day7nummap = getCountMap(beginDate, endDate);
- //Map<String, Map<String, List<ShutdowneventVo>>> day7eventmap = getEventMap(beginDate, endDate);
- Map<String, Integer> 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<String, List<EventVo>> day15nummap = getCountMap(beginDate, endDate);
- //Map<String, Map<String, List<ShutdowneventVo>>> day15eventmap = getEventMap(beginDate, endDate);
- Map<String, Integer> 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<String, List<EventVo>> month1nummap = getCountMap(beginDate, endDate);
- // Map<String, Map<String, List<ShutdowneventVo>>> month1eventmap = getEventMap(beginDate, endDate);
- Map<String, Integer> 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<Windturbine> wtls = CacheContext.wtsmap.get(wp.getId());
- Map<String, Integer> 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<String, List<EventVo>> nummap, Windturbine wt) {
- List<EventVo> 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<EventVo> 获得统计数量map
- *
- * @param beginDate
- * @param endDate
- * @return
- */
- @SuppressWarnings({ "unchecked", "rawtypes" })
- public Map<String, List<EventVo>> getCountMap(Date beginDate, Date endDate) {
- Map<String, List<EventVo>> map = new HashMap<String, List<EventVo>>();
- if (StringUtils.notEmp(beginDate) && StringUtils.notEmp(endDate)) {
- List<EventVo> list =earlywarningmainService.getCountMap(beginDate, endDate);
- if (!list.isEmpty()) {
- for (EventVo vo : list) {
- if (map.containsKey(vo.getWtId())) {
- List<EventVo> ls = map.get(vo.getWtId());
- ls.add(vo);
- map.put(vo.getWtId(), ls);
- } else {
- List<EventVo> ls = new ArrayList<EventVo>();
- ls.add(vo);
- map.put(vo.getWtId(), ls);
- }
- }
- }
- }
- return map;
- }
- /**
- * 风机编号》Integer 获得统计排名顺序号
- *
- * @param beginDate
- * @param endDate
- * @return
- */
- @SuppressWarnings({ "unchecked", "rawtypes" })
- public Map<String, Integer> getCountOrderNum(Date beginDate, Date endDate) {
- Map<String, Integer> map = new HashMap<String, Integer>();
- if (StringUtils.notEmp(beginDate) && StringUtils.notEmp(endDate)) {
- List<EventVo> 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<String, Integer> getSynthesistopOrderNum(List<Windturbine> wtls, Map<String, Integer> day1ordermap, Map<String, Integer> day3ordermap, Map<String, Integer> day7ordermap, Map<String, Integer> day15ordermap, Map<String, Integer> month1ordermap) {
- Map<String, Integer> synthesistopordermap = new TreeMap<String, Integer>();
- 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<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(synthesistopordermap.entrySet());
- // 然后通过比较器来实现排序
- Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
- // 升序排序
- public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
- return o1.getValue().compareTo(o2.getValue());
- }
- });
- synthesistopordermap = new TreeMap<String, Integer>();
- int i = 1;
- for (Map.Entry<String, Integer> mapping : list) {
- // System.out.println(mapping.getKey()+":"+mapping.getValue());
- synthesistopordermap.put(mapping.getKey(), i);
- i++;
- }
- return synthesistopordermap;
- }
- /**
- * 获得风机》报警编号》List<ShutdowneventVo>
- *
- * @param beginDate
- * @param endDate
- * @return
- */
- @SuppressWarnings({ "unchecked", "rawtypes" })
- public Map<String, Map<String, List<ShutdowneventVo>>> getEventMap(Date beginDate, Date endDate) {
- Map<String, Map<String, List<ShutdowneventVo>>> map = new HashMap<String, Map<String, List<ShutdowneventVo>>>();
- if (StringUtils.notEmp(beginDate) && StringUtils.notEmp(endDate)) {
- List<ShutdowneventVo> list = earlywarningmainService.getEventMap(beginDate, endDate);
- if (!list.isEmpty()) {
- for (ShutdowneventVo vo : list) {
- if (map.containsKey(vo.getWindTurbineId())) {
- Map<String, List<ShutdowneventVo>> tempmap = map.get(vo.getWindTurbineId());
- if (tempmap.containsKey(vo.getWarningId())) {
- List<ShutdowneventVo> ls = tempmap.get(vo.getWarningId());
- ls.add(vo);
- tempmap.put(vo.getWarningId(), ls);
- } else {
- List<ShutdowneventVo> ls = new ArrayList<ShutdowneventVo>();
- ls.add(vo);
- tempmap.put(vo.getWarningId(), ls);
- }
- map.put(vo.getWindTurbineId(), tempmap);
- } else {
- Map<String, List<ShutdowneventVo>> tempmap = new HashMap<String, List<ShutdowneventVo>>();
- List<ShutdowneventVo> ls = new ArrayList<ShutdowneventVo>();
- ls.add(vo);
- tempmap.put(vo.getWarningId(), ls);
- map.put(vo.getWindTurbineId(), tempmap);
- }
- }
- }
- }
- return map;
- }
- private void saveEarlywarningsub(Calendar cal, Map<String, Map<String, List<ShutdowneventVo>>> eventmap, Windpowerstation wp, Windturbine wt,
- Earlywarningmain po, String tid,String name,String warningId) {
- if(eventmap.containsKey(wt.getId()))
- {
- Map<String, List<ShutdowneventVo>> map=eventmap.get(wt.getId());
- if(map.containsKey(warningId))
- {
- List<ShutdowneventVo> 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);
- }
- }
|