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);
|
ArrayList<Double> rsDouble = new ArrayList<>();
|
for (Double aDouble : dust) {
|
double v =0.0;
|
if (aDouble>=0 && aDouble<40 ){
|
v = aDouble + 170;
|
}
|
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);
|
}
|
list.addAll(rsDouble);
|
}
|
}
|
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;
|
}
|
|
}
|