From a022ae9804d0c2f402711b6b5202319d853919cf Mon Sep 17 00:00:00 2001 From: cjl <909710561@qq.com> Date: Fri, 09 Aug 2024 13:38:47 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into cjl --- screen-api/src/main/java/com/moral/api/service/impl/DustldServiceImpl.java | 243 ++++++++++++++++++++++++++++++++++-------------- 1 files changed, 173 insertions(+), 70 deletions(-) diff --git a/screen-api/src/main/java/com/moral/api/service/impl/DustldServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/DustldServiceImpl.java index ec8164a..be4b23c 100644 --- a/screen-api/src/main/java/com/moral/api/service/impl/DustldServiceImpl.java +++ b/screen-api/src/main/java/com/moral/api/service/impl/DustldServiceImpl.java @@ -1,10 +1,21 @@ package com.moral.api.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.moral.api.config.Interceptor.UserHelper; +import com.moral.api.entity.SecondCruiserSort; +import com.moral.api.entity.SysDictData; +import com.moral.api.exception.BusinessException; +import com.moral.api.mapper.*; +import com.moral.api.pojo.enums.SysDictTypeEnum; +import com.moral.api.pojo.vo.user.QxUser; +import com.moral.api.service.SysDictTypeService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.system.ApplicationHome; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; @@ -13,18 +24,7 @@ import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.Date; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.UUID; +import java.util.*; import java.util.stream.Collectors; import com.alibaba.fastjson.JSON; @@ -34,9 +34,7 @@ import com.moral.api.entity.Dustld; import com.moral.api.entity.ManageCoordinate; -import com.moral.api.mapper.DustldMapper; -import com.moral.api.mapper.HistorySecondCruiserMapper; -import com.moral.api.mapper.ManageCoordinateMapper; +import com.moral.api.entity.MaxRoad; import com.moral.api.pojo.dto.historySecondCruiser.DustldDTO; import com.moral.api.pojo.dust.DustForm; import com.moral.api.pojo.dust.TimeForm; @@ -56,6 +54,9 @@ @Autowired private DustldMapper dustldMapper; + @Autowired + private SecondCruiserSortMapper secondCruiserSortMapper; + /** * ������������������ * @param params @@ -65,7 +66,7 @@ */ @Override public Integer getDailyDustld(Map<String, Object> params,MultipartFile file ) { - + SysDictData listDict = sysDictTypeService.listOne(SysDictTypeEnum.SYS_SECOND_CRUISER.getValue(),"dustld"); //������jar��������������� ApplicationHome applicationHome = new ApplicationHome(getClass()); //���jar������������������������������upload������������������������������������ @@ -87,29 +88,33 @@ for (TimeForm timeForm : tables) { String start = timeForm.getStart(); String end = timeForm.getEnd(); - List<Double> dust = historySecondCruiserMapper.getDust(start, end, mac); + List<String> dust = historySecondCruiserMapper.getDust(start, end, mac); ArrayList<Double> rsDouble = new ArrayList<>(); - for (Double aDouble : dust) { - double v =0.0; - if (aDouble>=0 && aDouble<40 ){ - v = aDouble + 170; + for (String s : dust) { + double aDouble = Double.parseDouble(s); + if(listDict.getDataValue().contains(",")){ + List<String> resultStr = Arrays.asList(listDict.getDataValue().split(",")); + if(resultStr.size() % 2 ==0){ + aDouble = numAvg(resultStr,BigDecimal.valueOf(aDouble)).doubleValue(); + } + }else { + BigDecimal dataValue = Objects.nonNull(listDict.getDataValue())?BigDecimal.valueOf(Double.parseDouble(listDict.getDataValue())):BigDecimal.ZERO; + aDouble = BigDecimal.valueOf(aDouble).add(dataValue).doubleValue(); } - if (aDouble>=40 && aDouble<60 ){ - v = aDouble + 130; - } - if (aDouble>=60 && aDouble<100 ){ - v = aDouble + 110; - } - if (aDouble>=100 && aDouble<150 ){ - v = aDouble + 70; - } - if (aDouble>=150 && aDouble<180 ){ - v = aDouble + 30; - } - if (aDouble>=180){ - v= aDouble; - } - rsDouble.add(v); + /*if (aDouble>=0 && aDouble<40 ){ + aDouble = aDouble + 170; + }else if (aDouble>=40 && aDouble<60){ + aDouble = aDouble + 130; + }else if (aDouble>=60 && aDouble<100 ){ + aDouble = aDouble + 110; + }else if (aDouble>=100 && aDouble<150){ + aDouble = aDouble + 70; + }else if (aDouble>=150 && aDouble<180){ + aDouble = aDouble + 30; + }else { + aDouble= aDouble+0; + }*/ + rsDouble.add(aDouble); } list.addAll(rsDouble); } @@ -269,22 +274,40 @@ @Autowired private ManageCoordinateMapper manageCoordinateMapper; + @Autowired + private MaxRoadMapper maxRoadMapper; + @Autowired + private OrganizationMapper organizationMapper; + @Autowired + private SysDictTypeService sysDictTypeService; @Override - public Map<String, Object> dailyDustlds(List<MultipartFile> file,Map<String, Object> params) { + @Transactional + public Map<String, Object> dailyDustlds(Map<String, Object> params) { + SysDictData list = sysDictTypeService.listOne(SysDictTypeEnum.SYS_SECOND_CRUISER.getValue(),"dustld"); Map<String, Object> userInfo = (Map<String, Object>) TokenUtils.getUserInfo(); Map<String, Object> orgInfo = (Map<String, Object>) userInfo.get("organization"); Integer orgId = (Integer) orgInfo.get("id"); - String time1 = params.get("time1").toString(); - String substring1 = time1.substring(5, 14); - String time2 = params.get("time2").toString(); - String substring2 = time2.substring(5, 14); + String mac = params.get("mac").toString(); + List<Integer> orgList = organizationMapper.orgIdSpecialDevList(orgId,mac); + if(CollectionUtils.isEmpty(orgList)){ + throw new BusinessException("������������������������������������"); + } + String time1 = params.get("startTime").toString(); + String dateString1 = DateUtils.stringToDateString(time1, DateUtils.yyyy_MM_dd_HH_mm_ss_EN, DateUtils.yyyy_MM_dd_HH_mm_CN); + String rsTime1 = dateString1.substring(5, 14); + String time2 = params.get("endTime").toString(); + String dateString2 = DateUtils.stringToDateString(time2, DateUtils.yyyy_MM_dd_HH_mm_ss_EN, DateUtils.yyyy_MM_dd_HH_mm_CN); + String rsTime2 = dateString2.substring(5, 14); HashMap<String, Object> rsMap = new HashMap<>(); List<Map<String, Object>> dusts = historySecondCruiserMapper.getDusts(params); - Map<String, List<DustldDTO>> collect = manageCoordinateMapper.CompareTo(orgId).stream().collect(Collectors.groupingBy(o -> o.getName())); + Map<String, List<DustldDTO>> collect = manageCoordinateMapper.CompareTo(orgList.get(0)).stream().collect(Collectors.groupingBy(o -> o.getName())); + if (ObjectUtils.isEmpty(dusts) || ObjectUtils.isEmpty(collect)){ + return null; + } Set<String> strings = collect.keySet(); ArrayList<DustForm> list1 = new ArrayList<>(); - ArrayList<DustForm> list2 = new ArrayList<>(); + //��������������������� StringBuilder builder = new StringBuilder(); int i = 1; @@ -295,53 +318,93 @@ for (DustldDTO dustldDTO : dustldDTOS) { String flyLat = dustldDTO.getFlyLat(); String flyLon = dustldDTO.getFlyLon(); + if (flyLon==null && flyLat==null){ + continue; + } + double latDouble1 = Double.parseDouble(flyLat); + double lonDouble1 = Double.parseDouble(flyLon); for (Map<String, Object> dust : dusts) { String flyLat1 = Objects.nonNull(dust.get("flyLat")) ? dust.get("flyLat").toString() :"0"; String flyLon1 = Objects.nonNull(dust.get("flyLon")) ? dust.get("flyLon").toString() :"0"; + double latDouble = Double.parseDouble(flyLat1); + double lonDouble = Double.parseDouble(flyLon1); // String flyLon1 = dust.get("flyLon").toString(); - if (flyLat1.equals(flyLat) && flyLon1.equals(flyLon)){ + if (latDouble1==latDouble && lonDouble1==lonDouble){ Double dustld = Objects.nonNull(dust.get("dustld"))?Double.parseDouble(dust.get("dustld").toString()):0d; - - if (dustld>=0 && dustld<40 ){ - dustld = dustld + 170; - } - if (dustld>=40 && dustld<60 ){ - dustld = dustld + 130; - } - if (dustld>=60 && dustld<100 ){ - dustld = dustld + 110; - } - if (dustld>=100 && dustld<150 ){ - dustld = dustld + 70; - } - if (dustld>=150 && dustld<180 ){ - dustld = dustld + 30; + if(list.getDataValue().contains(",")){ + List<String> resultStr = Arrays.asList(list.getDataValue().split(",")); + if(resultStr.size() % 2 ==0){ + dustld = numAvg(resultStr,BigDecimal.valueOf(dustld)).doubleValue(); + } + }else { + BigDecimal dataValue = Objects.nonNull(list.getDataValue())?BigDecimal.valueOf(Double.parseDouble(list.getDataValue())):BigDecimal.ZERO; + dustld = BigDecimal.valueOf(dustld).add(dataValue).doubleValue(); } doubleArrayList.add(dustld); break; } } } + if (ObjectUtils.isEmpty(doubleArrayList)){ + continue; + } Double ListAva = doubleArrayList.stream() .collect(Collectors.averagingDouble(Double::doubleValue)); double rsAvg = new BigDecimal(ListAva/1000).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); dustForm.setRoad(string); dustForm.setValue(rsAvg); + list1.add(dustForm); if (rsAvg>=0.3){ builder.append("("+i+")"+string); - - list1.add(dustForm); - }else { - list2.add(dustForm); + i++; + //������������������ + QueryWrapper<MaxRoad> wrapper = new QueryWrapper<>(); + wrapper.eq("name",string); + wrapper.eq("time",DateUtils.getDate(time1,DateUtils.yyyy_MM_dd_EN)); + Integer integer = maxRoadMapper.selectCount(wrapper); + if (integer==0){ + MaxRoad maxRoad = new MaxRoad(); + maxRoad.setData(rsAvg); + maxRoad.setName(string); + maxRoad.setTime(DateUtils.getDate(time1,DateUtils.yyyy_MM_dd_EN)); + maxRoadMapper.insert(maxRoad); + } } } //������ list1.sort(Comparator.comparing(DustForm::getValue).reversed()); - list2.sort(Comparator.comparing(DustForm::getValue).reversed()); rsMap.put("list1",list1); - rsMap.put("list2",list2); - rsMap.put("data",builder); - rsMap.put("list3",""); - rsMap.put("time",substring1+"-"+substring2); + + + //������������������������������ + ArrayList<Map<String, Object>> list3 = new ArrayList<>(); + QueryWrapper<MaxRoad> wrapper = new QueryWrapper<>(); + wrapper.lt("time",DateUtils.getDate(time1,DateUtils.yyyy_MM_dd_EN)); + wrapper.orderByDesc("time"); + + List<MaxRoad> maxRoads = maxRoadMapper.selectList(wrapper); + String dateString3 = DateUtils.dateToDateString(maxRoads.get(0).getTime(), DateUtils.yyyy_MM_dd_CN); + QueryWrapper<MaxRoad> wrapper2 = new QueryWrapper<>(); + wrapper2.eq("time",maxRoads.get(0).getTime()); + List<MaxRoad> maxRoads1 = maxRoadMapper.selectList(wrapper2); + + //������������������������������ + for (MaxRoad road : maxRoads1) { + for (DustForm dustForm : list1) { + if (road.getName().equals(dustForm.getRoad())){ + HashMap<String, Object> map = new HashMap<>(); + map.put("road",road.getName()); + map.put("value1",String.format("%.2f",road.getData())); + map.put("value2",String.format("%.2f",dustForm.getValue())); + map.put("value3",String.format("%.2f",road.getData()-dustForm.getValue())); + list3.add(map); + } + } + } + rsMap.put("data",ObjectUtils.isEmpty(builder)?"������������������":builder); + rsMap.put("list3",list3); + rsMap.put("time",rsTime1+"-"+rsTime2); + rsMap.put("date1",dateString3.substring(5,10)); + rsMap.put("date2",dateString1.substring(5,10)); return rsMap; } @@ -401,6 +464,37 @@ return dustlds; } + /** + * ������������ + * @param mac + * @param startTime + * @param endTime + * @return + */ + @Override + public List<SecondCruiserSort> sort(String mac, String startTime, String endTime) { + SysDictData list = sysDictTypeService.listOne(SysDictTypeEnum.SYS_SECOND_CRUISER.getValue(),"dustld"); + List<SecondCruiserSort> secondCruiserSorts = secondCruiserSortMapper.getSort(mac, startTime, endTime); + + //��������������� + if (!ObjectUtils.isEmpty(secondCruiserSorts)){ + for (SecondCruiserSort secondCruiserSort : secondCruiserSorts) { + if(list.getDataValue().contains(",")){ + List<String> resultStr = Arrays.asList(list.getDataValue().split(",")); + if(resultStr.size() % 2 ==0){ +// secondCruiserSort.setAvg(numAvg(resultStr,BigDecimal.valueOf(secondCruiserSort.getAvg())).doubleValue()); + secondCruiserSort.setAvg((double) Math.round(numAvg(resultStr, BigDecimal.valueOf(secondCruiserSort.getAvg())).doubleValue())); + } + }else { + BigDecimal dataValue = Objects.nonNull(list.getDataValue())?BigDecimal.valueOf(Double.parseDouble(list.getDataValue())):BigDecimal.ZERO; +// secondCruiserSort.setAvg(BigDecimal.valueOf(secondCruiserSort.getAvg()).add(dataValue).doubleValue()); + secondCruiserSort.setAvg((double) Math.round(BigDecimal.valueOf(secondCruiserSort.getAvg()).add(dataValue).doubleValue())); + } + } + } + return secondCruiserSorts; + } + //������������������ private String getList(String path, List<MultipartFile> files1) { @@ -434,5 +528,14 @@ } return null; } - + private BigDecimal numAvg(List<String> list , BigDecimal num){ + int nums = 1; + for (int i=0;i<list.size();i=i+2){ + if(num.compareTo(BigDecimal.valueOf(Double.parseDouble(list.get(i))))>= 0 ){ + return num.add(BigDecimal.valueOf(Double.parseDouble(list.get(i+1)))); + } + nums+=2; + } + return num; + } } -- Gitblit v1.8.0