From 2b088b86c7ebf9e02a25d46520265fb7fd5b85f2 Mon Sep 17 00:00:00 2001 From: jinpengyong <jpy123456> Date: Fri, 16 Dec 2022 16:32:25 +0800 Subject: [PATCH] 添加尘负荷报告模板 --- screen-api/src/main/java/com/moral/api/service/impl/DustldServiceImpl.java | 329 ++++++++++++++++++++++++++++++++++++ screen-api/src/main/java/com/moral/api/service/DustldService.java | 28 +++ screen-api/src/main/java/com/moral/api/mapper/DustldMapper.java | 7 screen-api/src/main/java/com/moral/api/mapper/HistorySecondCruiserMapper.java | 5 screen-api/src/main/java/com/moral/api/pojo/dust/TimeForm.java | 11 + screen-api/src/main/java/com/moral/api/controller/CruiserController.java | 79 ++++++++ screen-api/src/main/java/com/moral/api/pojo/dust/DustForm.java | 12 + screen-api/src/main/resources/mapper/HistorySecondCruiserMapper.xml | 16 + screen-api/src/main/java/com/moral/api/entity/Dustld.java | 27 +++ 9 files changed, 514 insertions(+), 0 deletions(-) diff --git a/screen-api/src/main/java/com/moral/api/controller/CruiserController.java b/screen-api/src/main/java/com/moral/api/controller/CruiserController.java index 55caf5b..421fd08 100644 --- a/screen-api/src/main/java/com/moral/api/controller/CruiserController.java +++ b/screen-api/src/main/java/com/moral/api/controller/CruiserController.java @@ -21,8 +21,10 @@ import javax.servlet.http.HttpServletRequest; +import com.moral.api.entity.Dustld; import com.moral.api.pojo.bo.ExcelBO; import com.moral.api.pojo.vo.excel.DailyVo; +import com.moral.api.service.DustldService; import com.moral.api.service.SpecialDeviceService; import com.moral.constant.ResponseCodeEnum; import com.moral.constant.ResultMessage; @@ -146,5 +148,82 @@ return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(),excelBOS); } + @Autowired + private DustldService dustldService; + + /** + * ��������������� + * @param request + * @return + */ + @PostMapping("getDailyDustld") + public ResultMessage getDailyDustld(HttpServletRequest request) { + Map<String, Object> params = WebUtils.getParametersStartingWith(request, null); + if (!params.containsKey("mac") || !params.containsKey("road") || !params.containsKey("table")){ + return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); + } + MultipartFile file = ((MultipartHttpServletRequest) request).getFile("files"); + + Integer dailyDustld = null; + try { + dailyDustld = dustldService.getDailyDustld(params,file); + } catch (ParseException e) { + log.error("{������}"+e.getMessage()); + } + if (ObjectUtils.isEmpty(dailyDustld)){ + return ResultMessage.fail(ResponseCodeEnum.TARGET_IS_NULL.getCode(), ResponseCodeEnum.TARGET_IS_NULL.getMsg()); + } + return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(),ResponseCodeEnum.SUCCESS.getMsg(),dailyDustld); + } + + /** + * ��������������������� + * @return + */ + @PostMapping("dailyDustld") + public ResultMessage dailyDustld(HttpServletRequest request,Integer id){ + List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("files"); + + Map<String, Object> map = dustldService.dailyDustld(id,files); + if (ObjectUtils.isEmpty(map)){ + return ResultMessage.fail(ResponseCodeEnum.TARGET_IS_NULL.getCode(), ResponseCodeEnum.TARGET_IS_NULL.getMsg()); + } + return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(),ResponseCodeEnum.SUCCESS.getMsg(),map); + } + + /** + * ������������������ + * @param id + * @return + */ + @GetMapping("selectDust") + public ResultMessage selectDust(Integer id){ + Map<String, Object> map = null; + try { + map = dustldService.selectDust(id); + } catch (Exception e) { + log.error("{������}"+e.getMessage()); + } + return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(),ResponseCodeEnum.SUCCESS.getMsg(),map); + } + + /** + * ��������������������������������� + * @param request + * @return + */ + @GetMapping("selectAll") + public ResultMessage selectAll(HttpServletRequest request){ + Map<String, Object> params = WebUtils.getParametersStartingWith(request, null); + List<Dustld> dustlds = null; + try { + dustlds = dustldService.selectAll(params); + } catch (Exception e) { + log.error("{������}"+e.getMessage()); + } + return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(),ResponseCodeEnum.SUCCESS.getMsg(),dustlds); + + } + } diff --git a/screen-api/src/main/java/com/moral/api/entity/Dustld.java b/screen-api/src/main/java/com/moral/api/entity/Dustld.java new file mode 100644 index 0000000..4cadf07 --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/entity/Dustld.java @@ -0,0 +1,27 @@ +package com.moral.api.entity; + + +import lombok.Data; + +import java.util.Date; + +import javax.persistence.Table; + +@Data +@Table(name ="dustld") +public class Dustld { + + + private Integer id; + + private String mac; + + private Date time; + + private String value; + + private String images; + + + private Date endTime; +} diff --git a/screen-api/src/main/java/com/moral/api/mapper/DustldMapper.java b/screen-api/src/main/java/com/moral/api/mapper/DustldMapper.java new file mode 100644 index 0000000..53bcc21 --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/mapper/DustldMapper.java @@ -0,0 +1,7 @@ +package com.moral.api.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.moral.api.entity.Dustld; + +public interface DustldMapper extends BaseMapper<Dustld> { +} diff --git a/screen-api/src/main/java/com/moral/api/mapper/HistorySecondCruiserMapper.java b/screen-api/src/main/java/com/moral/api/mapper/HistorySecondCruiserMapper.java index ab010b5..15261bc 100644 --- a/screen-api/src/main/java/com/moral/api/mapper/HistorySecondCruiserMapper.java +++ b/screen-api/src/main/java/com/moral/api/mapper/HistorySecondCruiserMapper.java @@ -20,4 +20,9 @@ List<String> getDates(Map<String,Object> params); + + String getDaily(Map<String,Object> params); + + List<Double> getDust(String start,String end,String mac); + } diff --git a/screen-api/src/main/java/com/moral/api/pojo/dust/DustForm.java b/screen-api/src/main/java/com/moral/api/pojo/dust/DustForm.java new file mode 100644 index 0000000..4ed9c4b --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/pojo/dust/DustForm.java @@ -0,0 +1,12 @@ +package com.moral.api.pojo.dust; + + +import lombok.Data; + +@Data +public class DustForm { + + private String road; + + private Double value; +} diff --git a/screen-api/src/main/java/com/moral/api/pojo/dust/TimeForm.java b/screen-api/src/main/java/com/moral/api/pojo/dust/TimeForm.java new file mode 100644 index 0000000..f184810 --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/pojo/dust/TimeForm.java @@ -0,0 +1,11 @@ +package com.moral.api.pojo.dust; + +import lombok.Data; + +@Data +public class TimeForm { + + private String start; + + private String end; +} diff --git a/screen-api/src/main/java/com/moral/api/service/DustldService.java b/screen-api/src/main/java/com/moral/api/service/DustldService.java new file mode 100644 index 0000000..4c322e7 --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/service/DustldService.java @@ -0,0 +1,28 @@ +package com.moral.api.service; + +import org.springframework.web.multipart.MultipartFile; + +import java.text.ParseException; +import java.util.List; +import java.util.Map; + +import com.moral.api.entity.Dustld; + +public interface DustldService { + + + + public Integer getDailyDustld(Map<String, Object> params,MultipartFile file ) throws ParseException; + + + public Map<String,Object> dailyDustld(Integer id ,List<MultipartFile> file); + + + Map<String,Object> selectDust(Integer id ); + + + List<Dustld> selectAll(Map<String, Object> params); + + + +} 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 new file mode 100644 index 0000000..ebdc974 --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/service/impl/DustldServiceImpl.java @@ -0,0 +1,329 @@ +package com.moral.api.service.impl; + + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.system.ApplicationHome; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; +import org.springframework.web.multipart.MultipartFile; + +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.UUID; +import java.util.stream.Collectors; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; + +import com.moral.api.entity.Dustld; +import com.moral.api.mapper.DustldMapper; +import com.moral.api.mapper.HistorySecondCruiserMapper; +import com.moral.api.pojo.dust.DustForm; +import com.moral.api.pojo.dust.TimeForm; +import com.moral.api.service.DustldService; +import com.moral.util.DateUtils; +import com.moral.util.FileUtils; + +@Service +@Slf4j +public class DustldServiceImpl implements DustldService { + + + @Autowired + private HistorySecondCruiserMapper historySecondCruiserMapper; + + @Autowired + private DustldMapper dustldMapper; + + /** + * ������������������ + * @param params + * @param file + * @return + * @throws ParseException + */ + @Override + public Integer getDailyDustld(Map<String, Object> params,MultipartFile file ) { + + //������jar��������������� + ApplicationHome applicationHome = new ApplicationHome(getClass()); + //���jar������������������������������upload������������������������������������ + String path = applicationHome.getSource().getParentFile().toString() + "/static/img"; + + + String mac = params.get("mac").toString(); + String time3 = params.get("time3").toString(); + String time4 = params.get("time4").toString(); + String table = params.get("table").toString(); + String substring = time3.substring(0, 10); + //��������� + String road = params.get("road").toString(); + + ArrayList<Double> list = new ArrayList<>(); + List<TimeForm> tables = JSONArray.parseArray(table, TimeForm.class); + + if (!ObjectUtils.isEmpty(tables)){ + for (TimeForm timeForm : tables) { + String start = timeForm.getStart(); + String end = timeForm.getEnd(); + List<Double> dust = historySecondCruiserMapper.getDust(start, end, mac); + list.addAll(dust); + } + } + String format = ""; + if (!ObjectUtils.isEmpty(list)){ + Double collect = (list.stream().collect(Collectors.averagingDouble(Double::doubleValue)))/1000; + format = new DecimalFormat("0.000").format(collect); + } + + QueryWrapper<Dustld> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("mac",mac).likeRight("time",substring); + Dustld dustld = dustldMapper.selectOne(queryWrapper); + + if (ObjectUtils.isEmpty(dustld)){ + Dustld dustld1 = new Dustld(); + if (!ObjectUtils.isEmpty(file)){ + HashMap<String, Object> hashMap = new HashMap<>(); + String fileType = file.getContentType(); + if ("image/jpg".equals(fileType) || "image/png".equals(fileType) || "image/jpeg".equals(fileType)){ + //��������������� + String fileName = file.getOriginalFilename(); + //��������������������� + String suffixName = fileName.substring(fileName.lastIndexOf(".")); + //������������������ + fileName.substring(fileName.lastIndexOf(".")); + //��������������������� + fileName = UUID.randomUUID() + suffixName; + //������������ + if (FileUtils.upload(file, path, fileName)) { + hashMap.put("file1",fileName); + String s = JSON.toJSONString(hashMap); + dustld1.setImages(s); + } + } + } + + HashMap<String, Object> map = new HashMap<>(); + + map.put(road,format); + String value = JSON.toJSONString(map); + dustld1.setMac(mac); + dustld1.setTime(DateUtils.getDate(time3,DateUtils.yyyy_MM_dd_HH_mm_ss_EN)); + dustld1.setValue(value); + dustld1.setEndTime(DateUtils.getDate(time4,DateUtils.yyyy_MM_dd_HH_mm_ss_EN)); + dustldMapper.insert(dustld1); + return 200; + }else { + if (!ObjectUtils.isEmpty(file)){ + HashMap<String, Object> hashMap = new HashMap<>(); + String fileType = file.getContentType(); + if ("image/jpg".equals(fileType) || "image/png".equals(fileType) || "image/jpeg".equals(fileType)){ + //��������������� + String fileName = file.getOriginalFilename(); + //��������������������� + String suffixName = fileName.substring(fileName.lastIndexOf(".")); + //������������������ + fileName.substring(fileName.lastIndexOf(".")); + //��������������������� + fileName = UUID.randomUUID() + suffixName; + //������������ + if (FileUtils.upload(file, path, fileName)) { + hashMap.put("file1",fileName); + String s = JSON.toJSONString(hashMap); + dustld.setImages(s); + } + } + } + String value = dustld.getValue(); + JSONObject jsonObject = JSONObject.parseObject(value); + jsonObject.put(road,format); + String rsValue = JSONObject.toJSONString(jsonObject); + dustld.setValue(rsValue); + dustldMapper.updateById(dustld); + return 200; + } + + } + + /** + * ������������ + * @param id + * @return + */ + @Override + public Map<String,Object> dailyDustld(Integer id,List<MultipartFile> files) { + //������jar��������������� + ApplicationHome applicationHome = new ApplicationHome(getClass()); + //���jar������������������������������upload������������������������������������ + String path = applicationHome.getSource().getParentFile().toString() + "/static/img"; + + HashMap<String, Object> map = new HashMap<>(); + ArrayList<DustForm> list1 = new ArrayList<>(); + ArrayList<DustForm> list2= new ArrayList<>(); + + Dustld dustld = dustldMapper.selectById(id); + if (ObjectUtils.isEmpty(dustld)){ + return null; + } + String pathList = getList(path, files); + String images = dustld.getImages(); + if (ObjectUtils.isEmpty(images)){ + HashMap<String, Object> map1 = new HashMap<>(); + map1.put("file1",""); + if (pathList==null){ + map1.put("file2",""); + }else { + map1.put("file2",pathList); + } + + String s = JSON.toJSONString(map1); + dustld.setImages(s); + dustldMapper.updateById(dustld); + }else { + JSONObject jsonObject = JSONObject.parseObject(images); + if (ObjectUtils.isEmpty(pathList)){ + jsonObject.put("file2",""); + }else { + jsonObject.put("file2",pathList); + } + String s = JSON.toJSONString(jsonObject); + dustld.setImages(s); + dustldMapper.updateById(dustld); + } + + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy���MM���dd���HH���mm���ss���"); + String stsrtTime = sdf.format(dustld.getTime()); + String substring = stsrtTime.substring(5, 14); + String endTime = sdf.format(dustld.getEndTime()); + String substring1 = endTime.substring(5, 14); + + String value = dustld.getValue(); + JSONObject jsonObject = JSONObject.parseObject(value); + Iterator<Map.Entry<String, Object>> iterator = jsonObject.entrySet().iterator(); + while (iterator.hasNext()) { + DustForm dustForm = new DustForm(); + Map.Entry entry = (Map.Entry) iterator.next(); + dustForm.setRoad(entry.getKey().toString()); + dustForm.setValue(Double.parseDouble(entry.getValue().toString())); + double aDouble = Double.parseDouble(entry.getValue().toString()); + list2.add(dustForm); + if (aDouble>=0.3){ + list1.add(dustForm); + } + } + + //������ + list1.sort(Comparator.comparing(DustForm::getValue).reversed()); + list2.sort(Comparator.comparing(DustForm::getValue).reversed()); + map.put("list1",list1); + map.put("list2",list2); + map.put("time",substring+"-"+substring1); + map.put("images",JSON.parseObject(dustld.getImages())); + return map; + } + + /** + * ��������������������� + * @param id + * @return + */ + @Override + public Map<String,Object> selectDust(Integer id) { + + HashMap<String, Object> rsMap = new HashMap<>(); + ArrayList<DustForm> list1 = new ArrayList<>(); + + Dustld dustld = dustldMapper.selectById(id); + if (ObjectUtils.isEmpty(dustld)){ + return null; + } + String value = dustld.getValue(); + JSONObject jsonObject = JSONObject.parseObject(value); + Iterator<Map.Entry<String, Object>> iterator = jsonObject.entrySet().iterator(); + while (iterator.hasNext()) { + DustForm dustForm = new DustForm(); + Map.Entry entry = (Map.Entry) iterator.next(); + dustForm.setRoad(entry.getKey().toString()); + dustForm.setValue(Double.parseDouble(entry.getValue().toString())); + double aDouble = Double.parseDouble(entry.getValue().toString()); + if (aDouble>=0.3){ + list1.add(dustForm); + } + } + if (!ObjectUtils.isEmpty(list1)){ + list1.sort(Comparator.comparing(DustForm::getValue).reversed()); + } + rsMap.put("list",list1); + rsMap.put("count",list1.size()); + return rsMap; + } + + /** + * ������������������ + * @param params + * @return + */ + @Override + public List<Dustld> selectAll(Map<String, Object> params) { + String mac = params.get("mac").toString(); + String time1 = params.get("startTime").toString(); + String time2 = params.get("endTime").toString(); + + QueryWrapper<Dustld> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("mac",mac).between("time",time1,time2); + List<Dustld> dustlds = dustldMapper.selectList(queryWrapper); + if (ObjectUtils.isEmpty(dustlds)){ + return null; + } + return dustlds; + } + + + //������������������ + private String getList(String path, List<MultipartFile> files1) { + ArrayList<String> images = new ArrayList<>(); + if (!ObjectUtils.isEmpty(files1)){ + for (MultipartFile file : files1) { + String fileType = file.getContentType(); + if ("image/jpg".equals(fileType) || "image/png".equals(fileType) || "image/jpeg".equals(fileType)){ + //��������������� + String fileName = file.getOriginalFilename(); + //��������������������� + String suffixName = fileName.substring(fileName.lastIndexOf(".")); + //������������������ + fileName.substring(fileName.lastIndexOf(".")); + //��������������������� + fileName = UUID.randomUUID() + suffixName; + //������������ + if (FileUtils.upload(file, path, fileName)) { + images.add(fileName); + } + } + } + } + + if (!ObjectUtils.isEmpty(images)) { + String image = images.stream() + .map(String::valueOf) + .collect(Collectors.joining(",")); + + return image; + } + return null; + } + +} diff --git a/screen-api/src/main/resources/mapper/HistorySecondCruiserMapper.xml b/screen-api/src/main/resources/mapper/HistorySecondCruiserMapper.xml index 54d7ade..2d3d74c 100644 --- a/screen-api/src/main/resources/mapper/HistorySecondCruiserMapper.xml +++ b/screen-api/src/main/resources/mapper/HistorySecondCruiserMapper.xml @@ -31,4 +31,20 @@ AND organization_id = #{orgId} </select> + + <select id="getDaily" resultType="java.lang.String"> + select AVG(JSON_EXTRACT(value,'$.dustld')) + from `history_second_cruiser` + WHERE mac = #{mac} + AND `time` <![CDATA[>=]]> #{time1} + AND `time` <![CDATA[<=]]> #{time2} + </select> + + <select id="getDust" resultType="java.lang.Double"> + select JSON_EXTRACT(value,'$.dustld') + from `history_second_cruiser` + WHERE mac = #{mac} + AND `time` <![CDATA[>=]]> #{start} + AND `time` <![CDATA[<=]]> #{end} + </select> </mapper> \ No newline at end of file -- Gitblit v1.8.0