package com.gyee.failurestatistics.service; import com.gyee.common.model.PointData; import com.gyee.common.model.StringUtils; import com.gyee.failurestatistics.init.CacheContext; import com.gyee.failurestatistics.init.Constant; import com.gyee.failurestatistics.model.auto.*; import com.gyee.failurestatistics.service.auto.IPartpowerstatticsmainService; import com.gyee.failurestatistics.service.auto.IPartpowerstatticssubService; 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.math.BigDecimal; import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.util.*; /** * @ClassName : PartpowerstatticsService * @Description : 部件功率统计service */ @Service public class PartpowerstatticsService { private IRealTimeDataBaseUtil ednaApiUtil = new EdosUtil(); @Resource private IPartpowerstatticsmainService partpowerstatticsmainService; @Resource private IPartpowerstatticssubService partpowerstatticssubService; SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private final int DIGIT = 2; private final long STEP = 900; private final long DAYSTEP = 96; private final double EARLYWARNPER = 1.15; private final double CRITICALPER = 1.30; private String CLXSRZYW1 = "AI038";// 齿轮箱输入轴油温1 private String CLXSRZYW2 = "AI039";// 齿轮箱输入轴油温2 private String CLXRKYW = "AI040";// 齿轮箱入口温度 private String CLXYW = "AI041";// 齿轮箱油温 private String FDJZCWDA = "AI052";// 发电机轴承温度A private String FDJZCWDB = "AI053";// 发电机轴承温度B private String FDJUXYZWD = "AI045";// 发电机U相绕组温度 private String FDJVXYZWD = "AI047";// 发电机V相绕组温度 private String FDJWXYZWD = "AI049";// 发电机W相绕组温度 private String FDJLQFWD = "AI054";// 发电机冷却风温度 private String BJDRQWD = "AI113";// 变浆电容器温度 private String BJDRDY = "AI236";// 变浆电容温度 private String BJDLQWD = "AI239";// 变浆电流器温度 private String BJDJWD = "AI242";// 电机温度 private String BJKZGWD = "AI233";// 变浆控制柜温度 private String TDGWD = "AI069";// 塔底柜温度 private String TDJGWD = "AI070";// 塔顶机柜温度 public void deletePartpowerstatticsmain(Date recodedate) { partpowerstatticsmainService.deletePartpowerstatticsmain(recodedate); } public void savePartpowerstatticsmain() 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.DAY_OF_MONTH, -1); Date beginDate = cal.getTime(); List codels=new ArrayList(); Map codeParentmap =new HashMap(); Map codenamemap =new HashMap(); initialCodeValue(codels, codeParentmap, codenamemap); for (Windpowerstation wp : CacheContext.wpls) { if (wp.getId().endsWith("FDC")) { System.out.println("开始统计" + wp.getName() + "功率对应部件指标统计"); List wtls = CacheContext.wtsmap.get(wp.getId()); for (Windturbine wt : wtls) { Map map = CacheContext.wtpAimap.get(wt.getId()); Equipmentmodel model = null; if (CacheContext.mlmap.containsKey(wt.getModelid())) { model = CacheContext.mlmap.get(wt.getModelid()); } if(StringUtils.notEmp(map) && !map.isEmpty()) { Map glmap = getPartTargetValue(wt, Constant.TPOINT_WT_FJGL, endDate, beginDate, map); Map ztmap = getPartTargetValue(wt, Constant.FJZT, endDate, beginDate, map); Map cLXSRZYW1map = getPartTargetValue(wt, CLXSRZYW1, endDate, beginDate, map); Map cLXSRZYW2map = getPartTargetValue(wt, CLXSRZYW2, endDate, beginDate, map); Map cLXRKYWmap = getPartTargetValue(wt, CLXRKYW, endDate, beginDate, map); Map cLXYWmap = getPartTargetValue(wt, CLXYW, endDate, beginDate, map); Map fDJZCWDAmap = getPartTargetValue(wt, FDJZCWDA, endDate, beginDate, map); Map fDJZCWDBmap = getPartTargetValue(wt, FDJZCWDB, endDate, beginDate, map); Map fDJUXYZWDmap = getPartTargetValue(wt, FDJUXYZWD, endDate, beginDate, map); Map fDJVXYZWDmap = getPartTargetValue(wt, FDJVXYZWD, endDate, beginDate, map); Map fDJWXYZWDmap = getPartTargetValue(wt, FDJWXYZWD, endDate, beginDate, map); Map fDJLQFWDmap = getPartTargetValue(wt, FDJLQFWD, endDate, beginDate, map); Map bJDRQWDmap = getPartTargetValue(wt, BJDRQWD, endDate, beginDate, map); Map bJDRDYmap = getPartTargetValue(wt, BJDRDY, endDate, beginDate, map); Map bJDLQWDmap = getPartTargetValue(wt, BJDLQWD, endDate, beginDate, map); Map bJDJWDmap = getPartTargetValue(wt, BJDJWD, endDate, beginDate, map); Map bJKZGWDmap = getPartTargetValue(wt, BJKZGWD, endDate, beginDate, map); Map tDGWDmap = getPartTargetValue(wt, TDGWD, endDate, beginDate, map); Map tDJGWDmap = getPartTargetValue(wt, TDJGWD, endDate, beginDate, map); // Map<功率,Map<统一编码,List<指标结果集合>>> Map>> totalmap = new HashMap>>(); if (!glmap.isEmpty() && null != model) { int step = 0; if (model.getPowerproduction() == 1500.0) { step = 150; } else if (model.getPowerproduction() == 2000.0) { step = 200; } Set> set = glmap.entrySet(); for (Iterator> it = set.iterator(); it.hasNext();) { Map.Entry entry = (Map.Entry) it.next(); // System.out.println(entry.getKey() + "--->" + // entry.getValue()); if(ztmap.containsKey(entry.getKey())) { double zt=ztmap.get(entry.getKey()); if(zt==1) { if (entry.getValue() <= step) { setTotalmapValue(step, cLXSRZYW1map, cLXSRZYW2map, cLXRKYWmap, cLXYWmap, fDJZCWDAmap, fDJZCWDBmap, fDJUXYZWDmap, fDJVXYZWDmap, fDJWXYZWDmap, fDJLQFWDmap, bJDRQWDmap, bJDRDYmap, bJDLQWDmap, bJDJWDmap, bJKZGWDmap, tDGWDmap, tDJGWDmap, totalmap, entry); } else if (entry.getValue() <= step * 2) { setTotalmapValue(step * 2, cLXSRZYW1map, cLXSRZYW2map, cLXRKYWmap, cLXYWmap, fDJZCWDAmap, fDJZCWDBmap, fDJUXYZWDmap, fDJVXYZWDmap, fDJWXYZWDmap, fDJLQFWDmap, bJDRQWDmap, bJDRDYmap, bJDLQWDmap, bJDJWDmap, bJKZGWDmap, tDGWDmap, tDJGWDmap, totalmap, entry); } else if (entry.getValue() <= step * 3) { setTotalmapValue(step * 3, cLXSRZYW1map, cLXSRZYW2map, cLXRKYWmap, cLXYWmap, fDJZCWDAmap, fDJZCWDBmap, fDJUXYZWDmap, fDJVXYZWDmap, fDJWXYZWDmap, fDJLQFWDmap, bJDRQWDmap, bJDRDYmap, bJDLQWDmap, bJDJWDmap, bJKZGWDmap, tDGWDmap, tDJGWDmap, totalmap, entry); } else if (entry.getValue() <= step * 4) { setTotalmapValue(step * 4, cLXSRZYW1map, cLXSRZYW2map, cLXRKYWmap, cLXYWmap, fDJZCWDAmap, fDJZCWDBmap, fDJUXYZWDmap, fDJVXYZWDmap, fDJWXYZWDmap, fDJLQFWDmap, bJDRQWDmap, bJDRDYmap, bJDLQWDmap, bJDJWDmap, bJKZGWDmap, tDGWDmap, tDJGWDmap, totalmap, entry); } else if (entry.getValue() <= step * 5) { setTotalmapValue(step * 5, cLXSRZYW1map, cLXSRZYW2map, cLXRKYWmap, cLXYWmap, fDJZCWDAmap, fDJZCWDBmap, fDJUXYZWDmap, fDJVXYZWDmap, fDJWXYZWDmap, fDJLQFWDmap, bJDRQWDmap, bJDRDYmap, bJDLQWDmap, bJDJWDmap, bJKZGWDmap, tDGWDmap, tDJGWDmap, totalmap, entry); } else if (entry.getValue() <= step * 6) { setTotalmapValue(step * 6, cLXSRZYW1map, cLXSRZYW2map, cLXRKYWmap, cLXYWmap, fDJZCWDAmap, fDJZCWDBmap, fDJUXYZWDmap, fDJVXYZWDmap, fDJWXYZWDmap, fDJLQFWDmap, bJDRQWDmap, bJDRDYmap, bJDLQWDmap, bJDJWDmap, bJKZGWDmap, tDGWDmap, tDJGWDmap, totalmap, entry); } else if (entry.getValue() <= step * 7) { setTotalmapValue(step * 7, cLXSRZYW1map, cLXSRZYW2map, cLXRKYWmap, cLXYWmap, fDJZCWDAmap, fDJZCWDBmap, fDJUXYZWDmap, fDJVXYZWDmap, fDJWXYZWDmap, fDJLQFWDmap, bJDRQWDmap, bJDRDYmap, bJDLQWDmap, bJDJWDmap, bJKZGWDmap, tDGWDmap, tDJGWDmap, totalmap, entry); } else if (entry.getValue() <= step * 8) { setTotalmapValue(step * 8, cLXSRZYW1map, cLXSRZYW2map, cLXRKYWmap, cLXYWmap, fDJZCWDAmap, fDJZCWDBmap, fDJUXYZWDmap, fDJVXYZWDmap, fDJWXYZWDmap, fDJLQFWDmap, bJDRQWDmap, bJDRDYmap, bJDLQWDmap, bJDJWDmap, bJKZGWDmap, tDGWDmap, tDJGWDmap, totalmap, entry); } else if (entry.getValue() <= step * 9) { setTotalmapValue(step * 9, cLXSRZYW1map, cLXSRZYW2map, cLXRKYWmap, cLXYWmap, fDJZCWDAmap, fDJZCWDBmap, fDJUXYZWDmap, fDJVXYZWDmap, fDJWXYZWDmap, fDJLQFWDmap, bJDRQWDmap, bJDRDYmap, bJDLQWDmap, bJDJWDmap, bJKZGWDmap, tDGWDmap, tDJGWDmap, totalmap, entry); } else { setTotalmapValue(step * 10, cLXSRZYW1map, cLXSRZYW2map, cLXRKYWmap, cLXYWmap, fDJZCWDAmap, fDJZCWDBmap, fDJUXYZWDmap, fDJVXYZWDmap, fDJWXYZWDmap, fDJLQFWDmap, bJDRQWDmap, bJDRDYmap, bJDLQWDmap, bJDJWDmap, bJKZGWDmap, tDGWDmap, tDJGWDmap, totalmap, entry); } } } } Partpowerstatticsmain po = new Partpowerstatticsmain(); po.setWpid(wp.getId()); po.setWpname(wp.getName()); po.setWtid(wt.getId()); po.setWtname(wt.getName()); po.setRecodedate(endDate); po.setModel(wt.getModelid()); String tid= com.gyee.failurestatistics.util.StringUtils.getUUID(); po.setId(tid); insertPartpowerstatticsmain(po); Set>>> set2 = totalmap.entrySet(); for (Iterator>>> it = set2.iterator(); it.hasNext();) { Map.Entry>> entry2 = (Map.Entry>>) it.next(); for(String code:codels) { Partpowerstatticssub sub = new Partpowerstatticssub(); sub.setId(StringUtils.getUUID()); sub.setTid(tid); StringBuilder sb=new StringBuilder(); if (model.getPowerproduction() == 1500.0) { sb.append(Integer.valueOf(entry2.getKey())-150); sb.append("kw"); sb.append("-"); sb.append(Integer.valueOf(entry2.getKey())); sb.append("kw"); sub.setPower(String.valueOf(sb)); }else if (model.getPowerproduction() == 2000.0) { sb.append(Integer.valueOf(entry2.getKey())-200); sb.append("kw"); sb.append("-"); sb.append(Integer.valueOf(entry2.getKey())); sb.append("kw"); sub.setPower(String.valueOf(sb)); } //sub.setPower(Double.valueOf(entry2.getKey())); sub.setRecodedate(po.getRecodedate()); Map> submap=entry2.getValue(); if(codenamemap.containsKey(code)) { sub.setName(codenamemap.get(code)); } if(codeParentmap.containsKey(code)) { sub.setPartid(codeParentmap.get(code)); } if(submap.containsKey(code)) { List values=submap.get(code); if(!values.isEmpty()) { double sum=0; for(Double value:values) { sum=sum+value; } sub.setDatavalue(new BigDecimal(sum).divide(new BigDecimal(values.size()), DIGIT, RoundingMode.HALF_EVEN).doubleValue()); sub.setEarlywarningvalue(StringUtils.round(new BigDecimal(sub.getDatavalue()).multiply(new BigDecimal(EARLYWARNPER)).doubleValue(), DIGIT)); //sub.setEarlywarningvalue(new BigDecimal(sub.getDatavalue()).multiply(new BigDecimal(EARLYWARNPER)).doubleValue()); //sub.setCriticalvalue(new BigDecimal(sub.getDatavalue()).multiply(new BigDecimal(CRITICALPER)).doubleValue()); sub.setCriticalvalue(StringUtils.round(new BigDecimal(sub.getDatavalue()).multiply(new BigDecimal(CRITICALPER)).doubleValue(), DIGIT)); }else { sub.setDatavalue(0.0); sub.setEarlywarningvalue(0.0); sub.setCriticalvalue(0.0); } } partpowerstatticssubService.insertPartpowerstatticssub(sub); } } } else { Windturbinetestingpointnew point = map.get(Constant.TPOINT_WT_FJGL); StringBuilder sb=new StringBuilder(); sb.append("功率数据取值失败或不存在该风机型号!风机编号是"); sb.append(wt.getId()); sb.append(",功率测点是"); sb.append(point.getId()); System.out.println(sb); } } } System.out.println("结束统计" + wp.getName() + "功率对应部件指标统计"); } } } private void initialCodeValue(List codels, Map codeParentmap, Map codenamemap) { codels.add(CLXSRZYW1); codels.add(CLXSRZYW2); codels.add(CLXRKYW); codels.add(CLXYW); codels.add(FDJZCWDA); codels.add(FDJZCWDB); codels.add(FDJUXYZWD); codels.add(FDJVXYZWD); codels.add(FDJWXYZWD); codels.add(FDJLQFWD); codels.add(BJDRQWD); codels.add(BJDRDY); codels.add(BJDLQWD); codels.add(BJDJWD); codels.add(BJKZGWD); codels.add(TDGWD); codels.add(TDJGWD); codeParentmap.put(CLXSRZYW1, "clx"); codeParentmap.put(CLXSRZYW2, "clx"); codeParentmap.put(CLXRKYW, "clx"); codeParentmap.put(CLXYW, "clx"); codeParentmap.put(FDJZCWDA, "fdj"); codeParentmap.put(FDJZCWDB, "fdj"); codeParentmap.put(FDJUXYZWD, "fdj"); codeParentmap.put(FDJVXYZWD, "fdj"); codeParentmap.put(FDJWXYZWD, "fdj"); codeParentmap.put(FDJLQFWD, "fdj"); codeParentmap.put(BJDRQWD, "bj"); codeParentmap.put(BJDRDY, "bj"); codeParentmap.put(BJDLQWD, "bj"); codeParentmap.put(BJDJWD, "bj"); codeParentmap.put(BJKZGWD, "bj"); codeParentmap.put(TDGWD, "zk"); codeParentmap.put(TDJGWD, "zk"); codenamemap.put(CLXSRZYW1, "齿轮箱输入轴油温1"); codenamemap.put(CLXSRZYW2, "齿轮箱输入轴油温2"); codenamemap.put(CLXRKYW, "齿轮箱入口温度"); codenamemap.put(CLXYW, "齿轮箱油温"); codenamemap.put(FDJZCWDA, "发电机轴承温度A"); codenamemap.put(FDJZCWDB, "发电机轴承温度B"); codenamemap.put(FDJUXYZWD, "发电机U相绕组温度"); codenamemap.put(FDJVXYZWD, "发电机V相绕组温度"); codenamemap.put(FDJWXYZWD, "发电机W相绕组温度"); codenamemap.put(FDJLQFWD, "发电机冷却风温度"); codenamemap.put(BJDRQWD, "变浆电容器温度"); codenamemap.put(BJDRDY, "变浆电容温度"); codenamemap.put(BJDLQWD, "变浆电流器温度"); codenamemap.put(BJDJWD, "电机温度"); codenamemap.put(BJKZGWD, "变浆控制柜温度"); codenamemap.put(TDGWD, "塔底柜温度"); codenamemap.put(TDJGWD, "塔顶机柜温度"); } private void setTotalmapValue(int step, Map cLXSRZYW1map, Map cLXSRZYW2map, Map cLXRKYWmap, Map cLXYWmap, Map fDJZCWDAmap, Map fDJZCWDBmap, Map fDJUXYZWDmap, Map fDJVXYZWDmap, Map fDJWXYZWDmap, Map fDJLQFWDmap, Map bJDRQWDmap, Map bJDRDYmap, Map bJDLQWDmap, Map bJDJWDmap, Map bJKZGWDmap, Map tDGWDmap, Map tDJGWDmap, Map>> totalmap, Map.Entry entry) { if (totalmap.containsKey(String.valueOf(step))) { Map> tempmap = totalmap.get(String.valueOf(step)); setTeamMapValues(CLXSRZYW1, cLXSRZYW1map, entry, tempmap); setTeamMapValues(CLXSRZYW2, cLXSRZYW2map, entry, tempmap); setTeamMapValues(CLXRKYW, cLXRKYWmap, entry, tempmap); setTeamMapValues(CLXYW, cLXYWmap, entry, tempmap); setTeamMapValues(FDJZCWDA, fDJZCWDAmap, entry, tempmap); setTeamMapValues(FDJZCWDB, fDJZCWDBmap, entry, tempmap); setTeamMapValues(FDJUXYZWD, fDJUXYZWDmap, entry, tempmap); setTeamMapValues(FDJVXYZWD, fDJVXYZWDmap, entry, tempmap); setTeamMapValues(FDJWXYZWD, fDJWXYZWDmap, entry, tempmap); setTeamMapValues(FDJLQFWD, fDJLQFWDmap, entry, tempmap); setTeamMapValues(BJDRQWD, bJDRQWDmap, entry, tempmap); setTeamMapValues(BJDRDY, bJDRDYmap, entry, tempmap); setTeamMapValues(BJDLQWD, bJDLQWDmap, entry, tempmap); setTeamMapValues(BJDJWD, bJDJWDmap, entry, tempmap); setTeamMapValues(BJKZGWD, bJKZGWDmap, entry, tempmap); setTeamMapValues(TDGWD, tDGWDmap, entry, tempmap); setTeamMapValues(TDJGWD, tDJGWDmap, entry, tempmap); } else { Map> tempmap = new HashMap>(); setTeamMapValues(CLXSRZYW1, cLXSRZYW1map, entry, tempmap); setTeamMapValues(CLXSRZYW2, cLXSRZYW2map, entry, tempmap); setTeamMapValues(CLXRKYW, cLXRKYWmap, entry, tempmap); setTeamMapValues(CLXYW, cLXYWmap, entry, tempmap); setTeamMapValues(FDJZCWDA, fDJZCWDAmap, entry, tempmap); setTeamMapValues(FDJZCWDB, fDJZCWDBmap, entry, tempmap); setTeamMapValues(FDJUXYZWD, fDJUXYZWDmap, entry, tempmap); setTeamMapValues(FDJVXYZWD, fDJVXYZWDmap, entry, tempmap); setTeamMapValues(FDJWXYZWD, fDJWXYZWDmap, entry, tempmap); setTeamMapValues(FDJLQFWD, fDJLQFWDmap, entry, tempmap); setTeamMapValues(BJDRQWD, bJDRQWDmap, entry, tempmap); setTeamMapValues(BJDRDY, bJDRDYmap, entry, tempmap); setTeamMapValues(BJDLQWD, bJDLQWDmap, entry, tempmap); setTeamMapValues(BJDJWD, bJDJWDmap, entry, tempmap); setTeamMapValues(BJKZGWD, bJKZGWDmap, entry, tempmap); setTeamMapValues(TDGWD, tDGWDmap, entry, tempmap); setTeamMapValues(TDJGWD, tDJGWDmap, entry, tempmap); totalmap.put(String.valueOf(step), tempmap); } } private void setTeamMapValues(String code, Map cLXSRZYW1map, Map.Entry entry, Map> tempmap) { if (tempmap.containsKey(code)) { List ls = tempmap.get(code); if (cLXSRZYW1map.containsKey(entry.getKey())) { double value = cLXSRZYW1map.get(entry.getKey()); ls.add(value); tempmap.put(code, ls); } } else { if (cLXSRZYW1map.containsKey(entry.getKey())) { List ls = new ArrayList(); double value = cLXSRZYW1map.get(entry.getKey()); ls.add(value); tempmap.put(code, ls); } } } private Map getPartTargetValue(Windturbine wt, String code, Date endDate, Date beginDate, Map map) throws Exception { Map resultmap = new TreeMap(); if (map.containsKey(code)) { Windturbinetestingpointnew point = map.get(code); try { List pointls = ednaApiUtil.getHistoryDatasSnap(point, beginDate.getTime() / 1000, endDate.getTime() / 1000, DAYSTEP, STEP); if (!pointls.isEmpty()) { for (PointData pd : pointls) { Date date = DateUtils.parseLongToDate(pd.getPointTime() * 1000); resultmap.put(df2.format(date), pd.getPointValueInDouble()); } } } catch (Exception e) { //System.out.println(point.getId()); } } return resultmap; } public int insertPartpowerstatticsmain(Partpowerstatticsmain po) { return partpowerstatticsmainService.insertPartpowerstatticsmain(po); } }