package com.gyee.failurestatistics.service; import com.gyee.common.contant.ContantXk; import com.gyee.common.model.PointData; import com.gyee.common.model.StringUtils; import com.gyee.failurestatistics.init.CacheContext; import com.gyee.failurestatistics.model.auto.ProBasicEquipment; import com.gyee.failurestatistics.model.auto.ProBasicEquipmentPoint; import com.gyee.failurestatistics.model.auto.ProBasicPowerstation; import com.gyee.failurestatistics.model.auto.ProEconPartStatisticsMain; import com.gyee.failurestatistics.service.auto.IProEconPartStatisticsMainService; import com.gyee.failurestatistics.util.DateUtils; import com.gyee.failurestatistics.util.IRealTimeDataBaseUtil; import com.gyee.failurestatistics.util.realtimesource.EdosUtil; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.text.SimpleDateFormat; import java.util.*; import java.util.Map.Entry; /** * @ClassName : PartstatisticsService * @Description : 部件健康状态统计service */ @Service public class PartstatisticsService { private IRealTimeDataBaseUtil ednaApiUtil = new EdosUtil(); @Resource private IProEconPartStatisticsMainService proEconPartStatisticsMainService; private final String DAY1NUM ="day1num"; private final String DAY3NUM ="day3num"; private final String DAY7NUM ="day7num"; private final String DAY15NUM ="day15num"; private final String MONTH1NUM ="month1num"; private final String SYNTHESISNUM ="synthesisnum"; private final long STEP =1800; private final int DAYSTEP = 48; // private final long STEP = 900; // private final int DAYSTEP = 96; SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public void deletePartstatisticsmain(Date recodedate) { proEconPartStatisticsMainService.deletePartstatisticsmain(recodedate); } private void getPartTargetValue(ProBasicEquipment wt,String code, Date endDate, Date beginDate,long daynum, Map map,Map> partmap) throws Exception { Map resultmap=new HashMap(); resultmap.put(DAY1NUM, 0); resultmap.put(DAY3NUM, 0); resultmap.put(DAY7NUM, 0); resultmap.put(DAY15NUM, 0); resultmap.put(MONTH1NUM, 0); if(map.containsKey(code)) { ProBasicEquipmentPoint point = map.get(code); List pointls = ednaApiUtil.getHistoryDatasSnap(point, beginDate.getTime() / 1000, endDate.getTime() / 1000, (long) (daynum * DAYSTEP), STEP); if (!pointls.isEmpty()) { int i=0; int number=0; for(PointData pd:pointls) { if(pd.getPointValueInDouble()==4) { number++; } i++; switch (i) { case DAYSTEP: resultmap.put(DAY1NUM, number); break; case DAYSTEP*3: resultmap.put(DAY3NUM, number); break; case DAYSTEP*7: resultmap.put(DAY7NUM, number); break; case DAYSTEP*15: resultmap.put(DAY15NUM, number); break; default: break; } } resultmap.put(MONTH1NUM, number); }else { resultmap.put(DAY1NUM, 0); resultmap.put(DAY3NUM, 0); resultmap.put(DAY7NUM, 0); resultmap.put(DAY15NUM, 0); resultmap.put(MONTH1NUM, 0); } }else { resultmap.put(DAY1NUM, 0); resultmap.put(DAY3NUM, 0); resultmap.put(DAY7NUM, 0); resultmap.put(DAY15NUM, 0); resultmap.put(MONTH1NUM, 0); } partmap.put(wt.getId(), resultmap); } public void savePartstatisticsmain() 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.add(Calendar.MONTH, -1); Date beginDate = cal.getTime(); int daynum = DateUtils.daysDiff(beginDate, endDate); for (ProBasicPowerstation wp : CacheContext.wpls) { if (wp.getId().contains("FDC")) { System.out.println("开始统计" + wp.getName() + "部件健康状况和故障数量统计"); List wtls = CacheContext.wtsmap.get(wp.getId()); Map> clxmap = new HashMap>(); Map> fdjxmap = new HashMap>(); Map> bjmap = new HashMap>(); Map> zkxmap = new HashMap>(); for (ProBasicEquipment wt : wtls) { Map map = CacheContext.wtpAimap.get(wt.getId()); if(StringUtils.notEmp(map) && !map.isEmpty()) { getPartTargetValue(wt, ContantXk.JKZT002, endDate, beginDate, daynum, map,clxmap); getPartTargetValue(wt, ContantXk.JKZT003, endDate, beginDate, daynum, map,fdjxmap); getPartTargetValue(wt, ContantXk.JKZT004, endDate, beginDate, daynum, map,bjmap); getPartTargetValue(wt, ContantXk.JKZT005, endDate, beginDate, daynum, map,zkxmap); } } Map> ordermap = new HashMap>(); if(StringUtils.notEmp(clxmap) && !clxmap.isEmpty() && StringUtils.notEmp(fdjxmap) && !fdjxmap.isEmpty() && StringUtils.notEmp(bjmap) && !bjmap.isEmpty() && StringUtils.notEmp(zkxmap) && !zkxmap.isEmpty() ) { setPartOrderMap(clxmap,fdjxmap,bjmap,zkxmap, ordermap, wtls); cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); for (ProBasicEquipment wt : wtls) { ProEconPartStatisticsMain po = new ProEconPartStatisticsMain(); po.setId(StringUtils.getUUID()); po.setWpId(wp.getId()); po.setWpName(wp.getName()); po.setWtId(wt.getId()); po.setWtName(wt.getName()); po.setRecordDate(cal.getTime()); /*********************************************************************************/ po.setDay1clx(clxmap.get(wt.getId()).get(DAY1NUM)); po.setDay1fdj(fdjxmap.get(wt.getId()).get(DAY1NUM)); po.setDay1bj(bjmap.get(wt.getId()).get(DAY1NUM)); po.setDay1zk(zkxmap.get(wt.getId()).get(DAY1NUM)); po.setDay1bpq(0); po.setDay1ph(0); po.setDay1zz(0); po.setDay1jc(0); po.setDay1clxname("严重"); po.setDay1fdjname("严重"); po.setDay1bjname("严重"); po.setDay1zkname("严重"); po.setDay1bpqname("严重"); po.setDay1phname("严重"); po.setDay1zzname("严重"); po.setDay1jcname("严重"); po.setDay1topnum(ordermap.get(wt.getId()).get(DAY1NUM)); /*********************************************************************************/ po.setDay3clx(clxmap.get(wt.getId()).get(DAY3NUM)); po.setDay3fdj(fdjxmap.get(wt.getId()).get(DAY3NUM)); po.setDay3bj(bjmap.get(wt.getId()).get(DAY3NUM)); po.setDay3zk(zkxmap.get(wt.getId()).get(DAY3NUM)); po.setDay3bpq(0); po.setDay3ph(0); po.setDay3zz(0); po.setDay3jc(0); po.setDay3clxname("严重"); po.setDay3fdjname("严重"); po.setDay3bjname("严重"); po.setDay3zkname("严重"); po.setDay3bpqname("严重"); po.setDay3phname("严重"); po.setDay3zzname("严重"); po.setDay3jcname("严重"); po.setDay3topnum(ordermap.get(wt.getId()).get(DAY3NUM)); /*********************************************************************************/ po.setDay7clx(clxmap.get(wt.getId()).get(DAY7NUM)); po.setDay7fdj(fdjxmap.get(wt.getId()).get(DAY7NUM)); po.setDay7bj(bjmap.get(wt.getId()).get(DAY7NUM)); po.setDay7zk(zkxmap.get(wt.getId()).get(DAY7NUM)); po.setDay7bpq(0); po.setDay7ph(0); po.setDay7zz(0); po.setDay7jc(0); po.setDay7clxname("严重"); po.setDay7fdjname("严重"); po.setDay7bjname("严重"); po.setDay7zkname("严重"); po.setDay7bpqname("严重"); po.setDay7phname("严重"); po.setDay7zzname("严重"); po.setDay7jcname("严重"); po.setDay7topnum(ordermap.get(wt.getId()).get(DAY7NUM)); /*********************************************************************************/ po.setDay15clx(clxmap.get(wt.getId()).get(DAY15NUM)); po.setDay15fdj(fdjxmap.get(wt.getId()).get(DAY15NUM)); po.setDay15bj(bjmap.get(wt.getId()).get(DAY15NUM)); po.setDay15zk(zkxmap.get(wt.getId()).get(DAY15NUM)); po.setDay15bpq(0); po.setDay15ph(0); po.setDay15zz(0); po.setDay15jc(0); po.setDay15clxname("严重"); po.setDay15fdjname("严重"); po.setDay15bjname("严重"); po.setDay15zkname("严重"); po.setDay15bpqname("严重"); po.setDay15phname("严重"); po.setDay15zzname("严重"); po.setDay15jcname("严重"); po.setDay15topnum(ordermap.get(wt.getId()).get(DAY15NUM)); /*********************************************************************************/ po.setMonth1clx(clxmap.get(wt.getId()).get(MONTH1NUM)); po.setMonth1fdj(fdjxmap.get(wt.getId()).get(MONTH1NUM)); po.setMonth1bj(bjmap.get(wt.getId()).get(MONTH1NUM)); po.setMonth1zk(zkxmap.get(wt.getId()).get(MONTH1NUM)); po.setMonth1bpq(0); po.setMonth1ph(0); po.setMonth1zz(0); po.setMonth1jc(0); po.setMonth1clxname("严重"); po.setMonth1fdjname("严重"); po.setMonth1bjname("严重"); po.setMonth1zkname("严重"); po.setMonth1bpqname("严重"); po.setMonth1phname("严重"); po.setMonth1zzname("严重"); po.setMonth1jcname("严重"); po.setMonth1topnum(ordermap.get(wt.getId()).get(MONTH1NUM)); /*********************************************************************************/ po.setSynthesistopnum(ordermap.get(wt.getId()).get(SYNTHESISNUM)); /*********************************************************************************/ insertPartstatisticsmain(po); } } System.out.println("结束统计" + wp.getName() + "部件健康状况和故障数量统计"); } } } /** * 进行排名分天排名 * * @param partordermap */ private void setPartOrderMap(Map> clxmap, Map> fdjmap, Map> bjmap, Map> zkmap, Map> partordermap,List wtls) { Map day1map=new HashMap(); Map day3map=new HashMap(); Map day7map=new HashMap(); Map day15map=new HashMap(); Map month1map=new HashMap(); /** * 遍历风机集合,将四大部件严重数量合计,将严重状态数量作为value赋值到key为风机编号的不同天数map集合中 */ for (ProBasicEquipment wt : wtls) { int day1num=clxmap.get(wt.getId()).get(DAY1NUM)+fdjmap.get(wt.getId()).get(DAY1NUM)+ bjmap.get(wt.getId()).get(DAY1NUM)+zkmap.get(wt.getId()).get(DAY1NUM); int day3num=clxmap.get(wt.getId()).get(DAY3NUM)+fdjmap.get(wt.getId()).get(DAY3NUM)+ bjmap.get(wt.getId()).get(DAY3NUM)+zkmap.get(wt.getId()).get(DAY3NUM); int day7num=clxmap.get(wt.getId()).get(DAY7NUM)+fdjmap.get(wt.getId()).get(DAY7NUM)+ bjmap.get(wt.getId()).get(DAY7NUM)+zkmap.get(wt.getId()).get(DAY7NUM); int day15num=clxmap.get(wt.getId()).get(DAY15NUM)+fdjmap.get(wt.getId()).get(DAY15NUM)+ bjmap.get(wt.getId()).get(DAY15NUM)+zkmap.get(wt.getId()).get(DAY15NUM); int month1num=clxmap.get(wt.getId()).get(MONTH1NUM)+fdjmap.get(wt.getId()).get(MONTH1NUM)+ bjmap.get(wt.getId()).get(MONTH1NUM)+zkmap.get(wt.getId()).get(MONTH1NUM); day1map.put(wt.getId(), day1num); day3map.put(wt.getId(), day3num); day7map.put(wt.getId(), day7num); day15map.put(wt.getId(), day15num); month1map.put(wt.getId(), month1num); } /** * 对不同天数的风机严重状况map进分类排序 */ day1map=getMapOrder(day1map); day3map=getMapOrder(day3map); day7map=getMapOrder(day7map); day15map=getMapOrder(day15map); month1map=getMapOrder(month1map); /** * 进行不同天数的综合排名 */ Map synthesistopummap=getSynthesistopOrderNum(wtls,day1map,day3map,day7map,day15map,month1map ); /** * 将排名结果封装到二级map中 * */ for (ProBasicEquipment wt : wtls) { Map map=new HashMap(); map.put(DAY1NUM, day1map.get(wt.getId())); map.put(DAY3NUM, day3map.get(wt.getId())); map.put(DAY7NUM, day7map.get(wt.getId())); map.put(DAY15NUM, day15map.get(wt.getId())); map.put(MONTH1NUM, month1map.get(wt.getId())); map.put(SYNTHESISNUM, synthesistopummap.get(wt.getId())); partordermap.put(wt.getId(), map); } } private Map getMapOrder(Map map) { // 这里将map.entrySet()转换成list List> list = new ArrayList>(map.entrySet()); // 然后通过比较器来实现排序 Collections.sort(list, new Comparator>() { // 升序排序 public int compare(Entry o1, Entry o2) { return o1.getValue().compareTo(o2.getValue()); } }); map = new TreeMap(); int i = 1; for (Map.Entry mapping : list) { // System.out.println(mapping.getKey()+":"+mapping.getValue()); map.put(mapping.getKey(), 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 (ProBasicEquipment 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; } public int insertPartstatisticsmain(ProEconPartStatisticsMain po) { return proEconPartStatisticsMainService.insertPartstatisticsmain(po); } }