| | |
| | | } |
| | | //弹窗根据设置的权重表格评分 |
| | | 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; |
| | |
| | | } |
| | | } |
| | | } |
| | | 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=binfList.stream().collect(Collectors.groupingBy(item -> item.getMonvolstd().toString() + '-' + item.getMoncapstd())); |
| | | for (String volcap : map.keySet()) { |
| | | List<BattInf> list=map.get(volcap); |
| | | 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(); |
| | | res.setProduct(dto.getProduct()); |
| | | res.setInuseYear(dto.getInuserYear()+"年内"); |
| | | Integer goodBatt=0; |
| | | Integer badBatt=0; |
| | | Integer damageBatt=0; |
| | | Integer nodisBatt=0; |
| | | Integer sumBatt=list.size(); |
| | | Integer sumBatt=grouplist.size(); |
| | | res.setSumBatt(sumBatt); |
| | | String[] parts = volcap.split("-"); // 使用split方法分割字符串 |
| | | res.setMonvolstd(Float.valueOf(parts[0])); |
| | | res.setMoncapstd(Float.valueOf(parts[1])); |
| | | for (BattInf binf:list) { |
| | | 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{ |
| | | 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 grouprealCap = (float) BattCapFactory.GetMonomerCap(moncapStd, hourRate, tinf.getTestCap(), tinf.getMaxMonvol(), tinf.getMinMonvol(), tinf.getGroupVol(), BattCapFactory.CapType_Real); |
| | | if(grouprealCap>=moncapStd*badValue){ |
| | | goodBatt++; |
| | | } |
| | |
| | | reslist.add(res); |
| | | } |
| | | } |
| | | return new Response().setII(1,reslist.size()>0,reslist,"弹窗根据设置的权重表格评分"); |
| | | } |
| | | |
| | | //不选品牌,选时间 |
| | | 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); |
| | | } |
| | | } |
| | | } |