From add5c816a5281cf6b1df4a0988e8b3a0c2b59bee Mon Sep 17 00:00:00 2001 From: whyclxw <810412026@qq.com> Date: 星期三, 25 六月 2025 17:37:03 +0800 Subject: [PATCH] 电源表和电池信息表加入新的字段,添加,编辑需要修改 --- src/main/java/com/whyc/service/BatttestdataInfService.java | 406 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 404 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/whyc/service/BatttestdataInfService.java b/src/main/java/com/whyc/service/BatttestdataInfService.java index 6811e8c..2d40379 100644 --- a/src/main/java/com/whyc/service/BatttestdataInfService.java +++ b/src/main/java/com/whyc/service/BatttestdataInfService.java @@ -7,7 +7,9 @@ import com.whyc.constant.PwrCapperformanceEnum; import com.whyc.constant.StopReasonEnum; import com.whyc.dto.Real.TestDataDto; +import com.whyc.dto.ResSocreHehavior; import com.whyc.dto.Response; +import com.whyc.dto.SocreHehaviorDto; import com.whyc.dto.Statistic.*; import com.whyc.factory.BattCapFactory; import com.whyc.mapper.BatttestdataInfMapper; @@ -27,6 +29,7 @@ import java.time.LocalDateTime; import java.util.*; +import java.util.stream.Collectors; @Service public class BatttestdataInfService { @@ -313,11 +316,14 @@ res.setDevName(binf.getDevName()); res.setProduct(binf.getProduct()); res.setInuseTime(binf.getInuseTime()); + res.setInuseTimeStr(ActionUtil.sdfwithday.format(binf.getInuseTime())); res.setMonvolstd(binf.getMonvolstd()); + res.setMoncapstd(binf.getMoncapstd()); res.setStationId(binf.getStationId()); res.setPowerId(binf.getPowerId()); res.setDevId(binf.getDevId()); res.setBattgroupId(binf.getBattgroupId()); + res.setFullName(binf.getFullName()); //2.鑾峰彇鐢垫睜缁勫湪缁欏畾鏃堕棿娈电殑鏀剧數璁板綍(鎸囧畾鏃堕棿娈电殑鏍囧噯鏍稿鏀剧數) BatttestdataInf tinf =getLastStandardTestDataByTime(binf.getBattgroupId(),stic.getTestStartTime(),stic.getTestEndTime()); if(tinf==null){ @@ -386,11 +392,97 @@ } map.put("avgCap",sumCap/binfList.size()); map.put("standCapDiff",maxCap-minCap); - PageInfo pageInfo=PageInfoUtils.list2PageInfo(comparelist, stic.getPageNum(), stic.getPageSize()); return new Response().setIII(1,comparelist.size()>0,pageInfo,map,"钃勭數姹犵粍瀵规瘮鍒嗘瀽鐣岄潰锛堝悓涓�鍝佺墝鍚屼竴鏃堕棿锛�"); } - + /*钃勭數姹犵粍瀵规瘮鍒嗘瀽瀵煎嚭浣跨敤 + */ + public List<SticCompare15Res> exportBattCompare(BattCompareStic stic) { + //鑾峰彇鏍稿浼樺姡锛屾崯鍧忓弬鏁� + List<AppParam> paramList=appParamService.getHrParam(); + Float badValue=0f; + Float damageValue=0f; + if(paramList!=null){ + for (AppParam param:paramList) { + if(param.getParamNamePsx().equals("batt_mon_deteriorate_val")){ + badValue=param.getParamValue(); + } + if(param.getParamNamePsx().equals("batt_mon_damage_val")){ + damageValue=param.getParamValue(); + } + } + } + //1鏌ヨ绗﹀悎鏉′欢鐨勭數姹犵粍 + List<BattInf> binfList=battInfService.getBattCompare15Statistic(stic); + List<SticCompare15Res> comparelist=new ArrayList<>(); + if(binfList!=null&&binfList.size()>=0){ + for (BattInf binf:binfList) { + SticCompare15Res res=new SticCompare15Res(); + res.setProvice(binf.getProvice()); + res.setCity(binf.getCity()); + res.setCountry(binf.getCountry()); + res.setStationName(binf.getStationName()); + res.setBattgroupName(binf.getBattgroupName()); + res.setDevName(binf.getDevName()); + res.setProduct(binf.getProduct()); + res.setInuseTime(binf.getInuseTime()); + res.setInuseTimeStr(ActionUtil.sdfwithday.format(binf.getInuseTime())); + res.setMonvolstd(binf.getMonvolstd()); + res.setMoncapstd(binf.getMoncapstd()); + res.setStationId(binf.getStationId()); + res.setPowerId(binf.getPowerId()); + res.setDevId(binf.getDevId()); + res.setBattgroupId(binf.getBattgroupId()); + res.setFullName(binf.getFullName()); + //2.鑾峰彇鐢垫睜缁勫湪缁欏畾鏃堕棿娈电殑鏀剧數璁板綍(鎸囧畾鏃堕棿娈电殑鏍囧噯鏍稿鏀剧數) + BatttestdataInf tinf =getLastStandardTestDataByTime(binf.getBattgroupId(),stic.getTestStartTime(),stic.getTestEndTime()); + if(tinf==null){ + res.setRealCap(0f); + res.setPrecentCap("0.00000"); + res.setCapperformance(BattCapperformanceEnum.getValue(BattCapperformanceEnum.BATTSTATE_4.getStateId())); + res.setStopReason("--"); + res.setFloatGroupVol(0f); + }else{ + res.setStopReason(StopReasonEnum.getValue(tinf.getTestStoptype())); + res.setFloatGroupVol(tinf.getFloatGroupVol()); + //鎵捐繖娆℃斁鐢电殑鏈�鍚庝竴绗旀暟鎹� + List<BatttestdataId> idDataList=battTestdataIdService.getLastDataByBattgroupId(tinf.getBattgroupId(),tinf.getTestRecordCount(),tinf.getRecordNum()); + if(idDataList==null||idDataList.size()==0){ + res.setRealCap(0f); + res.setPrecentCap("0.00000"); + res.setCapperformance(BattCapperformanceEnum.getValue(BattCapperformanceEnum.BATTSTATE_4.getStateId())); + res.setFloatGroupVol(0f); + }else{ + Float moncapStd=binf.getMoncapstd(); + int hourRate = BattCapFactory.GetHourRate(tinf.getTestCap(), tinf.getTestCurr()); + Float grouprealCap = (float) BattCapFactory.GetMonomerCap(binf.getMoncapstd(), hourRate, tinf.getTestCap(), tinf.getMaxMonvol(), tinf.getMinMonvol(), tinf.getGroupVol(), BattCapFactory.CapType_Real); + //Float restCap = (float) BattCapFactory.GetMonomerCap(binf.getMoncapstd(), hourRate, tinf.getTestCap(), tinf.getMaxMonvol(), tinf.getMinMonvol(), tinf.getGroupVol(), BattCapFactory.CapType_Rest); + res.setRealCap(grouprealCap); + if(grouprealCap>=moncapStd*badValue){ + res.setCapperformance(BattCapperformanceEnum.getValue(BattCapperformanceEnum.BATTSTATE_1.getStateId())); + } + if(grouprealCap<=moncapStd*damageValue){ + res.setCapperformance(BattCapperformanceEnum.getValue(BattCapperformanceEnum.BATTSTATE_3.getStateId())); + } + if((grouprealCap>moncapStd*damageValue)&&(grouprealCap<moncapStd*badValue)){ + res.setCapperformance(BattCapperformanceEnum.getValue(BattCapperformanceEnum.BATTSTATE_2.getStateId())); + } + //淇濈暀5浣嶅皬鏁� + String precentCap = String.format("%.5f",(grouprealCap/binf.getMoncapstd()*100)); + res.setPrecentCap(precentCap); + } + } + if(stic.getPerformance()==null){ + comparelist.add(res); + }else{ + if(res.getCapperformance().equals(BattCapperformanceEnum.getValue(stic.getPerformance()))){ + comparelist.add(res); + } + } + } + } + return comparelist; + } //钃勭數姹犵粍瀵规瘮鍒嗘瀽鐣岄潰锛堜笉鍚屽搧鐗屽悓涓�鏃堕棿锛�(1.2.16) public Response getBattCompare16Statistic(BattCompareStic stic) { //鑾峰彇鏍稿浼樺姡锛屾崯鍧忓弬鏁� @@ -1090,4 +1182,314 @@ } return new Response().setII(1,list.size()>0,curvelist,"鐐瑰嚮鍙充晶鎶樼嚎鍥剧敾鍑虹數姹犵粍鎵�鏈夊畬鏁村懆鏈熺殑娴厖鐢靛帇鍙樺寲鍥�(1.2.15/16/17)"); } + //寮圭獥鏍规嵁璁剧疆鐨勬潈閲嶈〃鏍艰瘎鍒� + public Response getScoreByHehavior(SocreHehaviorDto dto) { + List<ResSocreHehavior> reslist=new ArrayList<>(); + //璇㈢鍚堟潯浠剁殑鐢垫睜缁勬潈閲嶈〃鏍艰瘎鍒� + List<BattInf> binfList=battInfService.getScoreByHehavior(dto); + if(binfList==null||binfList.size()==0){ + return new Response().set(1,false,"褰撳墠鐢ㄦ埛鏈鐞嗘弧瓒虫潯浠剁殑鐢垫睜缁�"); + }else{ + Map<String, List<BattInf>> map=new HashMap<>(); + if(dto.getSelectType()==1){//閫夊搧鐗岋紝閫夋椂闂� + map=binfList.stream().collect(Collectors.groupingBy(item -> item.getProduct() + '-' + item.getInuseYear())); + groupby1(dto,reslist,map); + } + if(dto.getSelectType()==2){//閫夊搧鐗岋紝涓嶉�夋椂闂� + map=binfList.stream().collect(Collectors.groupingBy(item -> item.getProduct())); + groupby2(dto,reslist,map); + } + if(dto.getSelectType()==3){//涓嶉�夊搧鐗岋紝閫夋椂闂� + map=binfList.stream().collect(Collectors.groupingBy(item -> ""+item.getInuseYear())); + groupby3(dto,reslist,map); + } + if(dto.getSelectType()==4){//涓嶉�夊搧鐗屼笉閫夋椂闂� + map=binfList.stream().collect(Collectors.groupingBy(item -> item.getMonvolstd().toString() + '-' + item.getMoncapstd())); + groupby4(dto,reslist,map); + } + } + return new Response().setII(1,reslist.size()>0,reslist,"寮圭獥鏍规嵁璁剧疆鐨勬潈閲嶈〃鏍艰瘎鍒�"); + } + //涓嶉�夊搧鐗屼笉閫夋椂闂� + private void groupby4(SocreHehaviorDto dto,List<ResSocreHehavior> reslist, Map<String, List<BattInf>> map) { + //鑾峰彇鏍稿浼樺姡锛屾崯鍧忓弬鏁� + List<AppParam> paramList=appParamService.getHrParam(); + Float badValue=0f; + Float damageValue=0f; + if(paramList!=null){ + for (AppParam param:paramList) { + if(param.getParamNamePsx().equals("batt_mon_deteriorate_val")){ + badValue=param.getParamValue(); + } + if(param.getParamNamePsx().equals("batt_mon_damage_val")){ + damageValue=param.getParamValue(); + } + } + } + for (String groupType : map.keySet()) { + List<BattInf> list=map.get(groupType); + Map<String,List<BattInf>> groupMap=list.stream().collect(Collectors.groupingBy(item -> item.getProduct()+"-"+item.getBattYear())); + for (String group : groupMap.keySet()) { + List<BattInf> grouplist=groupMap.get(group); + ResSocreHehavior res=new ResSocreHehavior(); + Integer goodBatt=0; + Integer badBatt=0; + Integer damageBatt=0; + Integer nodisBatt=0; + Integer sumBatt=grouplist.size(); + res.setSumBatt(sumBatt); + String[] productYearparts = group.split("-"); // 浣跨敤split鏂规硶鍒嗗壊瀛楃涓� + res.setProduct(productYearparts[0]); + res.setInuseYear(productYearparts[1]+"骞村唴"); + res.setMonvolstd(dto.getMonvolstd()); + res.setMoncapstd(dto.getMoncapstd()); + for (BattInf binf:grouplist) { + Float moncapStd=binf.getMoncapstd(); + //2.鑾峰彇鐢垫睜缁勫湪缁欏畾鏃堕棿娈电殑鏀剧數璁板綍(鎸囧畾鏃堕棿娈电殑鏍囧噯鏍稿鏀剧數) + BatttestdataInf tinf =getLastStandardTestDataByTime(binf.getBattgroupId(),null,null); + if(tinf==null){ + nodisBatt++; + }else{ + + int hourRate = BattCapFactory.GetHourRate(tinf.getTestCap(), tinf.getTestCurr()); + Float grouprealCap = (float) BattCapFactory.GetMonomerCap(moncapStd, hourRate, tinf.getTestCap(), tinf.getMaxMonvol(), tinf.getMinMonvol(), tinf.getGroupVol(), BattCapFactory.CapType_Real); + if(grouprealCap>=moncapStd*badValue){ + goodBatt++; + } + if(grouprealCap<=moncapStd*damageValue){ + damageBatt++; + } + if((grouprealCap>moncapStd*damageValue)&&(grouprealCap<moncapStd*badValue)){ + badBatt++; + } + } + } + //淇濈暀5浣嶅皬鏁� + String goodPercent = String.format("%.5f",(goodBatt/sumBatt*100.0)); + res.setGoodBatt(goodBatt); + res.setGoodPercent(goodPercent); + String badPercent = String.format("%.5f",(badBatt/sumBatt*100.0)); + res.setBadBatt(badBatt); + res.setBadPercent(badPercent); + String damagePercent = String.format("%.5f",(damageBatt/sumBatt*100.0)); + res.setDamagebatt(damageBatt); + res.setDamagePercent(damagePercent); + String nodisPercent = String.format("%.5f",(nodisBatt/sumBatt*100.0)); + res.setNodisbatt(nodisBatt); + res.setNodisPercent(nodisPercent); + res.setScore(0f); + reslist.add(res); + } + } + } + + //涓嶉�夊搧鐗岋紝閫夋椂闂� + private void groupby3(SocreHehaviorDto dto,List<ResSocreHehavior> reslist, Map<String, List<BattInf>> map) { + //鑾峰彇鏍稿浼樺姡锛屾崯鍧忓弬鏁� + List<AppParam> paramList=appParamService.getHrParam(); + Float badValue=0f; + Float damageValue=0f; + if(paramList!=null){ + for (AppParam param:paramList) { + if(param.getParamNamePsx().equals("batt_mon_deteriorate_val")){ + badValue=param.getParamValue(); + } + if(param.getParamNamePsx().equals("batt_mon_damage_val")){ + damageValue=param.getParamValue(); + } + } + } + for (String groupType : map.keySet()) { + List<BattInf> list=map.get(groupType); + Map<String,List<BattInf>> productMap=list.stream().collect(Collectors.groupingBy(item -> item.getProduct())); + for (String product : productMap.keySet()) { + List<BattInf> productList=productMap.get(product); + ResSocreHehavior res=new ResSocreHehavior(); + res.setInuseYear(dto.getInuseYear()+"骞村唴"); + res.setProduct(product); + Integer goodBatt=0; + Integer badBatt=0; + Integer damageBatt=0; + Integer nodisBatt=0; + Integer sumBatt=productList.size(); + res.setSumBatt(sumBatt); + res.setMonvolstd(dto.getMonvolstd()); + res.setMoncapstd(dto.getMoncapstd()); + for (BattInf binf:productList) { + Float moncapStd=binf.getMoncapstd(); + //2.鑾峰彇鐢垫睜缁勫湪缁欏畾鏃堕棿娈电殑鏀剧數璁板綍(鎸囧畾鏃堕棿娈电殑鏍囧噯鏍稿鏀剧數) + BatttestdataInf tinf =getLastStandardTestDataByTime(binf.getBattgroupId(),null,null); + if(tinf==null){ + nodisBatt++; + }else{ + + int hourRate = BattCapFactory.GetHourRate(tinf.getTestCap(), tinf.getTestCurr()); + Float grouprealCap = (float) BattCapFactory.GetMonomerCap(moncapStd, hourRate, tinf.getTestCap(), tinf.getMaxMonvol(), tinf.getMinMonvol(), tinf.getGroupVol(), BattCapFactory.CapType_Real); + if(grouprealCap>=moncapStd*badValue){ + goodBatt++; + } + if(grouprealCap<=moncapStd*damageValue){ + damageBatt++; + } + if((grouprealCap>moncapStd*damageValue)&&(grouprealCap<moncapStd*badValue)){ + badBatt++; + } + } + } + //淇濈暀5浣嶅皬鏁� + String goodPercent = String.format("%.5f",(goodBatt/sumBatt*100.0)); + res.setGoodBatt(goodBatt); + res.setGoodPercent(goodPercent); + String badPercent = String.format("%.5f",(badBatt/sumBatt*100.0)); + res.setBadBatt(badBatt); + res.setBadPercent(badPercent); + String damagePercent = String.format("%.5f",(damageBatt/sumBatt*100.0)); + res.setDamagebatt(damageBatt); + res.setDamagePercent(damagePercent); + String nodisPercent = String.format("%.5f",(nodisBatt/sumBatt*100.0)); + res.setNodisbatt(nodisBatt); + res.setNodisPercent(nodisPercent); + res.setScore(0f); + reslist.add(res); + } + } + } + + //閫夊搧鐗岋紝涓嶉�夋椂闂� + private void groupby2(SocreHehaviorDto dto,List<ResSocreHehavior> reslist, Map<String, List<BattInf>> map) { + //鑾峰彇鏍稿浼樺姡锛屾崯鍧忓弬鏁� + List<AppParam> paramList=appParamService.getHrParam(); + Float badValue=0f; + Float damageValue=0f; + if(paramList!=null){ + for (AppParam param:paramList) { + if(param.getParamNamePsx().equals("batt_mon_deteriorate_val")){ + badValue=param.getParamValue(); + } + if(param.getParamNamePsx().equals("batt_mon_damage_val")){ + damageValue=param.getParamValue(); + } + } + } + for (String groupType : map.keySet()) { + List<BattInf> list=map.get(groupType); + Map<String,List<BattInf>> timeMap=list.stream().collect(Collectors.groupingBy(item -> item.getBattYear().toString())); + for (String time : timeMap.keySet()) { + List<BattInf> timeList=timeMap.get(time); + ResSocreHehavior res=new ResSocreHehavior(); + res.setProduct(dto.getProduct()); + res.setInuseYear(time+"骞村唴"); + Integer goodBatt=0; + Integer badBatt=0; + Integer damageBatt=0; + Integer nodisBatt=0; + Integer sumBatt=timeList.size(); + res.setSumBatt(sumBatt); + res.setMonvolstd(dto.getMonvolstd()); + res.setMoncapstd(dto.getMoncapstd()); + for (BattInf binf:timeList) { + Float moncapStd=binf.getMoncapstd(); + //2.鑾峰彇鐢垫睜缁勫湪缁欏畾鏃堕棿娈电殑鏀剧數璁板綍(鎸囧畾鏃堕棿娈电殑鏍囧噯鏍稿鏀剧數) + BatttestdataInf tinf =getLastStandardTestDataByTime(binf.getBattgroupId(),null,null); + if(tinf==null){ + nodisBatt++; + }else{ + int hourRate = BattCapFactory.GetHourRate(tinf.getTestCap(), tinf.getTestCurr()); + Float grouprealCap = (float) BattCapFactory.GetMonomerCap(moncapStd, hourRate, tinf.getTestCap(), tinf.getMaxMonvol(), tinf.getMinMonvol(), tinf.getGroupVol(), BattCapFactory.CapType_Real); + if(grouprealCap>=moncapStd*badValue){ + goodBatt++; + } + if(grouprealCap<=moncapStd*damageValue){ + damageBatt++; + } + if((grouprealCap>moncapStd*damageValue)&&(grouprealCap<moncapStd*badValue)){ + badBatt++; + } + } + } + //淇濈暀5浣嶅皬鏁� + String goodPercent = String.format("%.5f",(goodBatt/sumBatt*100.0)); + res.setGoodBatt(goodBatt); + res.setGoodPercent(goodPercent); + String badPercent = String.format("%.5f",(badBatt/sumBatt*100.0)); + res.setBadBatt(badBatt); + res.setBadPercent(badPercent); + String damagePercent = String.format("%.5f",(damageBatt/sumBatt*100.0)); + res.setDamagebatt(damageBatt); + res.setDamagePercent(damagePercent); + String nodisPercent = String.format("%.5f",(nodisBatt/sumBatt*100.0)); + res.setNodisbatt(nodisBatt); + res.setNodisPercent(nodisPercent); + res.setScore(0f); + reslist.add(res); + } + } + } + + //閫夊搧鐗岋紝閫夋椂闂� + private void groupby1(SocreHehaviorDto dto,List<ResSocreHehavior> reslist, Map<String, List<BattInf>> map) { + //鑾峰彇鏍稿浼樺姡锛屾崯鍧忓弬鏁� + List<AppParam> paramList=appParamService.getHrParam(); + Float badValue=0f; + Float damageValue=0f; + if(paramList!=null){ + for (AppParam param:paramList) { + if(param.getParamNamePsx().equals("batt_mon_deteriorate_val")){ + badValue=param.getParamValue(); + } + if(param.getParamNamePsx().equals("batt_mon_damage_val")){ + damageValue=param.getParamValue(); + } + } + } + for (String groupType : map.keySet()) { + List<BattInf> list=map.get(groupType); + ResSocreHehavior res=new ResSocreHehavior(); + res.setProduct(dto.getProduct()); + res.setInuseYear(dto.getInuseYear()+"骞村唴"); + Integer goodBatt=0; + Integer badBatt=0; + Integer damageBatt=0; + Integer nodisBatt=0; + Integer sumBatt=list.size(); + res.setSumBatt(sumBatt); + res.setMonvolstd(dto.getMonvolstd()); + res.setMoncapstd(dto.getMoncapstd()); + for (BattInf binf:list) { + Float moncapStd=binf.getMoncapstd(); + //2.鑾峰彇鐢垫睜缁勫湪缁欏畾鏃堕棿娈电殑鏀剧數璁板綍(鎸囧畾鏃堕棿娈电殑鏍囧噯鏍稿鏀剧數) + BatttestdataInf tinf =getLastStandardTestDataByTime(binf.getBattgroupId(),null,null); + if(tinf==null){ + nodisBatt++; + }else{ + int hourRate = BattCapFactory.GetHourRate(tinf.getTestCap(), tinf.getTestCurr()); + Float grouprealCap = (float) BattCapFactory.GetMonomerCap(moncapStd, hourRate, tinf.getTestCap(), tinf.getMaxMonvol(), tinf.getMinMonvol(), tinf.getGroupVol(), BattCapFactory.CapType_Real); + if(grouprealCap>=moncapStd*badValue){ + goodBatt++; + } + if(grouprealCap<=moncapStd*damageValue){ + damageBatt++; + } + if((grouprealCap>moncapStd*damageValue)&&(grouprealCap<moncapStd*badValue)){ + badBatt++; + } + } + } + //淇濈暀5浣嶅皬鏁� + String goodPercent = String.format("%.5f",(goodBatt/sumBatt*100.0)); + res.setGoodBatt(goodBatt); + res.setGoodPercent(goodPercent); + String badPercent = String.format("%.5f",(badBatt/sumBatt*100.0)); + res.setBadBatt(badBatt); + res.setBadPercent(badPercent); + String damagePercent = String.format("%.5f",(damageBatt/sumBatt*100.0)); + res.setDamagebatt(damageBatt); + res.setDamagePercent(damagePercent); + String nodisPercent = String.format("%.5f",(nodisBatt/sumBatt*100.0)); + res.setNodisbatt(nodisBatt); + res.setNodisPercent(nodisPercent); + res.setScore(0f); + reslist.add(res); + } + } } \ No newline at end of file -- Gitblit v1.9.1