123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485 |
- 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<String, ProBasicEquipmentPoint> map,Map<String,Map<String,Integer>> partmap) throws Exception {
- Map<String,Integer> resultmap=new HashMap<String,Integer>();
- 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<PointData> 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<ProBasicEquipment> wtls = CacheContext.wtsmap.get(wp.getId());
- Map<String, Map<String, Integer>> clxmap = new HashMap<String, Map<String, Integer>>();
- Map<String, Map<String, Integer>> fdjxmap = new HashMap<String, Map<String, Integer>>();
- Map<String, Map<String, Integer>> bjmap = new HashMap<String, Map<String, Integer>>();
- Map<String, Map<String, Integer>> zkxmap = new HashMap<String, Map<String, Integer>>();
- for (ProBasicEquipment wt : wtls) {
- Map<String, ProBasicEquipmentPoint> 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<String, Map<String, Integer>> ordermap = new HashMap<String, Map<String, Integer>>();
- 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<String, Map<String, Integer>> clxmap,
- Map<String, Map<String, Integer>> fdjmap,
- Map<String, Map<String, Integer>> bjmap,
- Map<String, Map<String, Integer>> zkmap,
- Map<String, Map<String, Integer>> partordermap,List<ProBasicEquipment> wtls) {
- Map<String, Integer> day1map=new HashMap<String, Integer>();
- Map<String, Integer> day3map=new HashMap<String, Integer>();
- Map<String, Integer> day7map=new HashMap<String, Integer>();
- Map<String, Integer> day15map=new HashMap<String, Integer>();
- Map<String, Integer> month1map=new HashMap<String, Integer>();
- /**
- * 遍历风机集合,将四大部件严重数量合计,将严重状态数量作为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<String, Integer> synthesistopummap=getSynthesistopOrderNum(wtls,day1map,day3map,day7map,day15map,month1map );
- /**
- * 将排名结果封装到二级map中
- *
- */
- for (ProBasicEquipment wt : wtls) {
- Map<String, Integer> map=new HashMap<String, Integer>();
- 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<String, Integer> getMapOrder(Map<String, Integer> map) {
- // 这里将map.entrySet()转换成list
- List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(map.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());
- }
- });
- map = new TreeMap<String, Integer>();
- int i = 1;
- for (Map.Entry<String, Integer> mapping : list) {
- // System.out.println(mapping.getKey()+":"+mapping.getValue());
- map.put(mapping.getKey(), i);
- i++;
- }
- return map;
- }
- /**
- * 风机编号》Integer 获得统计综合排名顺序号
- *
- * @return
- */
- public Map<String, Integer> getSynthesistopOrderNum(List<ProBasicEquipment> 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 (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<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;
- }
- public int insertPartstatisticsmain(ProEconPartStatisticsMain po) {
- return proEconPartStatisticsMainService.insertPartstatisticsmain(po);
- }
- }
|