Browse Source

学生肖像修改后整体代码

liu 3 years ago
parent
commit
f9e0b383c6
50 changed files with 1304 additions and 699 deletions
  1. 38 0
      pom.xml
  2. 4 0
      src/main/java/com/chuanghai/student_portrait/StudentPortraitApplication.java
  3. 22 0
      src/main/java/com/chuanghai/student_portrait/config/RedisConfig.java
  4. 160 23
      src/main/java/com/chuanghai/student_portrait/controller/CountController.java
  5. 5 0
      src/main/java/com/chuanghai/student_portrait/controller/FaceDiscernController.java
  6. 5 93
      src/main/java/com/chuanghai/student_portrait/controller/NewSchooluserController.java
  7. 0 174
      src/main/java/com/chuanghai/student_portrait/controller/SubscriptionController.java
  8. 10 0
      src/main/java/com/chuanghai/student_portrait/entity/City.java
  9. 0 1
      src/main/java/com/chuanghai/student_portrait/entity/Consume.java
  10. 12 0
      src/main/java/com/chuanghai/student_portrait/entity/Coord.java
  11. 3 1
      src/main/java/com/chuanghai/student_portrait/entity/dto/CapacityAllDto.java
  12. 3 1
      src/main/java/com/chuanghai/student_portrait/entity/dto/CapacityDto.java
  13. 3 1
      src/main/java/com/chuanghai/student_portrait/entity/dto/ConsumeTotalMoneyDto.java
  14. 3 1
      src/main/java/com/chuanghai/student_portrait/entity/dto/DistrictDto.java
  15. 2 1
      src/main/java/com/chuanghai/student_portrait/entity/dto/EnergyDto.java
  16. 11 0
      src/main/java/com/chuanghai/student_portrait/entity/dto/FaceDisernDto.java
  17. 3 1
      src/main/java/com/chuanghai/student_portrait/entity/dto/PersonConsumDto.java
  18. 6 1
      src/main/java/com/chuanghai/student_portrait/entity/dto/PersonalTrackDto.java
  19. 9 0
      src/main/java/com/chuanghai/student_portrait/mapper/CityMapper.java
  20. 9 0
      src/main/java/com/chuanghai/student_portrait/mapper/CoordMapper.java
  21. 9 0
      src/main/java/com/chuanghai/student_portrait/mapper/FaceDiscernMapper.java
  22. 10 0
      src/main/java/com/chuanghai/student_portrait/mapper/FaceDiscernMapper.xml
  23. 7 0
      src/main/java/com/chuanghai/student_portrait/service/CityService.java
  24. 7 0
      src/main/java/com/chuanghai/student_portrait/service/CoordService.java
  25. 10 1
      src/main/java/com/chuanghai/student_portrait/service/FaceDiscernService.java
  26. 1 1
      src/main/java/com/chuanghai/student_portrait/service/NewSchooluserService.java
  27. 1 2
      src/main/java/com/chuanghai/student_portrait/service/impl/AccessServiceImpl.java
  28. 37 1
      src/main/java/com/chuanghai/student_portrait/service/impl/AffinityScoreServiceImpl.java
  29. 194 92
      src/main/java/com/chuanghai/student_portrait/service/impl/CapacityServiceImpl.java
  30. 11 0
      src/main/java/com/chuanghai/student_portrait/service/impl/CityServiceImpl.java
  31. 35 32
      src/main/java/com/chuanghai/student_portrait/service/impl/ColdWaterServiceImpl.java
  32. 166 34
      src/main/java/com/chuanghai/student_portrait/service/impl/ConsumeServicelmpl.java
  33. 11 0
      src/main/java/com/chuanghai/student_portrait/service/impl/CoordServiceImpl.java
  34. 0 2
      src/main/java/com/chuanghai/student_portrait/service/impl/DormServiceImpl.java
  35. 1 1
      src/main/java/com/chuanghai/student_portrait/service/impl/ElectricityServiceImpl.java
  36. 129 18
      src/main/java/com/chuanghai/student_portrait/service/impl/FaceDiscernServiceImpl.java
  37. 128 113
      src/main/java/com/chuanghai/student_portrait/service/impl/ForewarningServiceImpl.java
  38. 42 3
      src/main/java/com/chuanghai/student_portrait/service/impl/HotWaterServiceImpl.java
  39. 60 7
      src/main/java/com/chuanghai/student_portrait/service/impl/NewSchooluserServiceImpl.java
  40. 3 3
      src/main/java/com/chuanghai/student_portrait/service/impl/OldSchooluserServiceImpl.java
  41. 74 0
      src/main/java/com/chuanghai/student_portrait/utils/JedisUtil.java
  42. 0 8
      src/main/java/com/chuanghai/student_portrait/utils/yushi/LibID.java
  43. 0 11
      src/main/java/com/chuanghai/student_portrait/utils/yushi/SubscribePersonCondition.java
  44. 14 3
      src/main/resources/application.yml
  45. 7 59
      src/main/resources/log4j.properties
  46. 14 3
      target/classes/application.yml
  47. 1 1
      target/maven-archiver/pom.properties
  48. 12 3
      target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
  49. 12 3
      target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
  50. BIN
      target/student_portrait-0.0.1-SNAPSHOT.jar.original

+ 38 - 0
pom.xml

@@ -18,6 +18,18 @@
     <dependencies>
 
         <dependency>
+            <groupId>redis.clients</groupId>
+            <artifactId>jedis</artifactId>
+            <version>3.3.0</version>
+        </dependency>
+
+        <!--redis的起步依赖-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+        </dependency>
+
+        <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter</artifactId>
         </dependency>
@@ -164,10 +176,12 @@
                 </exclusion>
             </exclusions>
         </dependency>
+
         <dependency>
             <groupId>com.jayway.jsonpath</groupId>
             <artifactId>json-path</artifactId>
         </dependency>
+
         <dependency>
             <groupId>org.hibernate.validator</groupId>
             <artifactId>hibernate-validator</artifactId>
@@ -187,6 +201,8 @@
         </dependencies>
     </dependencyManagement>
 
+
+
     <build>
         <plugins>
             <plugin>
@@ -216,6 +232,28 @@
                 </executions>
             </plugin>
         </plugins>
+
+<!--        &lt;!&ndash; 如果不添加此节点mybatis的mapper.xml文件都会被漏掉。 &ndash;&gt;-->
+<!--        <resources>-->
+<!--            <resource>-->
+<!--                <directory>src/main/java</directory>-->
+<!--                <includes>-->
+<!--                    <include>**/*.properties</include>-->
+<!--                    <include>**/*.xml</include>-->
+<!--                </includes>-->
+<!--                <filtering>false</filtering>-->
+<!--            </resource>-->
+<!--            <resource>-->
+<!--                <directory>src/main/resources</directory>-->
+<!--                <includes>-->
+<!--                    <include>**/*.properties</include>-->
+<!--                    <include>**/*.xml</include>-->
+<!--                </includes>-->
+<!--                <filtering>false</filtering>-->
+<!--            </resource>-->
+<!--        </resources>-->
+
+
     </build>
 
 </project>

+ 4 - 0
src/main/java/com/chuanghai/student_portrait/StudentPortraitApplication.java

@@ -1,12 +1,16 @@
 package com.chuanghai.student_portrait;
 
+import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cache.annotation.EnableCaching;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.transaction.event.TransactionalEventListener;
 
 @SpringBootApplication
 @EnableScheduling//开启定时任务
+@MapperScan(basePackages = "com.chuanghai.student_portrait.mapper")
+@EnableCaching
 public class StudentPortraitApplication {
 
     public static void main(String[] args) {

+ 22 - 0
src/main/java/com/chuanghai/student_portrait/config/RedisConfig.java

@@ -0,0 +1,22 @@
+package com.chuanghai.student_portrait.config;
+
+import org.springframework.cache.annotation.CachingConfigurerSupport;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+@Configuration
+public class RedisConfig extends CachingConfigurerSupport {
+    @Bean
+    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
+        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
+        //默认的Key序列化器为:JdkSerializationRedisSerializer
+        redisTemplate.setKeySerializer(new StringRedisSerializer());
+        redisTemplate.setConnectionFactory(connectionFactory);
+        return redisTemplate;
+    }
+
+
+}

+ 160 - 23
src/main/java/com/chuanghai/student_portrait/controller/CountController.java

@@ -1,25 +1,35 @@
 package com.chuanghai.student_portrait.controller;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.chuanghai.student_portrait.entity.City;
+import com.chuanghai.student_portrait.entity.Forewarning;
 import com.chuanghai.student_portrait.entity.NewSchooluser;
 import com.chuanghai.student_portrait.entity.Province;
+import com.chuanghai.student_portrait.entity.dto.CapacityAllDto;
+import com.chuanghai.student_portrait.entity.dto.ConsumeDto;
 import com.chuanghai.student_portrait.entity.dto.DistrictDto;
 import com.chuanghai.student_portrait.response.BaseResponse;
 import com.chuanghai.student_portrait.response.enums.StatusEnum;
+import com.chuanghai.student_portrait.service.CityService;
 import com.chuanghai.student_portrait.service.ForewarningService;
 import com.chuanghai.student_portrait.service.NewSchooluserService;
 import com.chuanghai.student_portrait.service.ProvinceService;
+import com.chuanghai.student_portrait.utils.JedisUtil;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.HashMap;
-import java.util.List;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
 
 @RestController
 @RequestMapping
@@ -34,21 +44,33 @@ public class CountController {
     @Autowired
     ProvinceService provinceService;
 
+    @Autowired
+    CityService cityService;
+
+    @Autowired
+    JedisUtil jedisUtil;
 
     @GetMapping("/count")
     @ApiOperation(value = "查询院系数量,在校学生,预警数量")
     public BaseResponse count() {
+        ObjectMapper objectMapper = new ObjectMapper();
+        //        redis 缓存
+        if (jedisUtil.exists("count")) {
+            String count = jedisUtil.get("count");
+            Map map = JSON.parseObject(count,Map.class);
+            return BaseResponse.ok(StatusEnum.SUCCESS, map);
+        }
         Calendar calendar = Calendar.getInstance();
         // 获取当前年
         int year = calendar.get(Calendar.YEAR);
 // 获取当前月
         int month = calendar.get(Calendar.MONTH) + 1;
-        int oldYear=0;
+        int oldYear = 0;
 
-        if (month>=7) {
-            oldYear=year-3;
-        }else {
-            oldYear=year-4;
+        if (month >= 7) {
+            oldYear = year - 3;
+        } else {
+            oldYear = year - 4;
         }
 
         HashMap<String, Object> mapCount = new HashMap<>();
@@ -62,38 +84,55 @@ public class CountController {
                 .between(NewSchooluser::getGrade, oldYear, year)
         );
 //查询所有预警数据次数
-        long countForewarning = forewarningService.count();
+//        获取前30天
+        String firstMonthDay = getFirstMonthDay();
+//        获取当天
+        String lastMonthDay = getLastMonthDay();
 
-        mapCount.put("facultyCount","09");
-        mapCount.put("studentCount",countSchoolUser);
-        mapCount.put("ForewarningCount",countForewarning);
+        long countForewarning = forewarningService.count(Wrappers.<Forewarning>lambdaQuery().between(Forewarning::getDateTime, firstMonthDay, lastMonthDay));
 
-        return BaseResponse.ok(StatusEnum.SUCCESS,mapCount);
+        mapCount.put("facultyCount", "09");
+        mapCount.put("studentCount", countSchoolUser);
+        mapCount.put("ForewarningCount", countForewarning);
+        String jsonStr = null;
+        try {
+            jsonStr = objectMapper.writeValueAsString(mapCount);	//areaList序列化为json字符串
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+        jedisUtil.setnx("count", jsonStr);
+        return BaseResponse.ok(StatusEnum.SUCCESS, mapCount);
     }
 
 
-
     @GetMapping("/provinceCount")
     @ApiOperation(value = "查询各省份人数")
-    public BaseResponse provinceCount(){
+    public BaseResponse provinceCount() {
+        ObjectMapper objectMapper = new ObjectMapper();
+        //        redis 缓存
+        if (jedisUtil.exists("provinceCount")) {
+            String count = jedisUtil.get("provinceCount");
+            List<DistrictDto> districtDtos = com.alibaba.fastjson.JSON.parseArray(count, DistrictDto.class);
+            return BaseResponse.ok(StatusEnum.SUCCESS, districtDtos);
+        }
         List<DistrictDto> districtDtos = new ArrayList<>();
         Calendar calendar = Calendar.getInstance();
         // 获取当前年
         int year = calendar.get(Calendar.YEAR);
 // 获取当前月
         int month = calendar.get(Calendar.MONTH) + 1;
-        int oldYear=0;
+        int oldYear = 0;
 
-        if (month>=7) {
-            oldYear=year-3;
-        }else {
-            oldYear=year-4;
+        if (month >= 7) {
+            oldYear = year - 3;
+        } else {
+            oldYear = year - 4;
         }
         List<NewSchooluser> list = newSchooluserService.list(Wrappers.<NewSchooluser>lambdaQuery()
                 .select(NewSchooluser::getProvince)
                 .groupBy(NewSchooluser::getProvince)
         );
-        if (ObjectUtils.isNotEmpty(list)&&list.size()>0) {
+        if (ObjectUtils.isNotEmpty(list) && list.size() > 0) {
             for (NewSchooluser newSchooluser : list) {
                 DistrictDto districtDto = new DistrictDto();
 //                省份
@@ -114,7 +153,105 @@ public class CountController {
 
             }
         }
-        return BaseResponse.ok(StatusEnum.SUCCESS,districtDtos);
+        String jsonStr = null;
+        try {
+            jsonStr = objectMapper.writeValueAsString(districtDtos);	//areaList序列化为json字符串
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+        jedisUtil.setnx("provinceCount", jsonStr);
+        return BaseResponse.ok(StatusEnum.SUCCESS, districtDtos);
     }
 
+
+    @GetMapping("/cityCount")
+    @ApiOperation(value = "查询各市人数,name为中文,key为英文")
+    public BaseResponse cityCount(String name,String key) {
+        ObjectMapper objectMapper = new ObjectMapper();
+
+        //        redis 缓存
+        if (jedisUtil.exists("cityCount"+key)) {
+            String capacityAll = jedisUtil.get("cityCount"+key);
+            Map map = JSON.parseObject(capacityAll,Map.class);
+            return BaseResponse.ok(StatusEnum.SUCCESS,map);
+        }
+        if (ObjectUtils.isEmpty(name)) {
+            return BaseResponse.error(StatusEnum.FAIL, "参数异常");
+        }
+        City one = cityService.getOne(Wrappers.<City>lambdaQuery().eq(City::getCityName, name));
+        String cityCode = one.getCityCode();
+        String provinceCode = one.getProvinceCode() + "";
+
+        Calendar calendar = Calendar.getInstance();
+        // 获取当前年
+        int year = calendar.get(Calendar.YEAR);
+// 获取当前月
+        int month = calendar.get(Calendar.MONTH) + 1;
+        int oldYear = 0;
+
+        if (month >= 7) {
+            oldYear = year - 3;
+        } else {
+            oldYear = year - 4;
+        }
+        HashMap<String, Object> mapCount = new HashMap<>();
+
+        long countSchoolUser = newSchooluserService.count(Wrappers.<NewSchooluser>lambdaQuery()
+                .between(NewSchooluser::getGrade, oldYear, year)
+                .eq(NewSchooluser::getProvince, provinceCode)
+                .eq(NewSchooluser::getCity, cityCode)
+        );
+
+
+
+//        获取前30天
+        String firstMonthDay = getFirstMonthDay();
+//        获取当天
+        String lastMonthDay = getLastMonthDay();
+
+        int countForewarning = 0;
+        List<Forewarning> list = forewarningService.list(Wrappers.<Forewarning>lambdaQuery().between(Forewarning::getDateTime, firstMonthDay, lastMonthDay));
+        for (Forewarning forewarning : list) {
+            String schooluserId = forewarning.getSchooluserId();
+            if (ObjectUtils.isNotEmpty(schooluserId)) {
+                NewSchooluser byId = newSchooluserService.getById(schooluserId);
+                String city = byId.getCity();
+                String province = byId.getProvince();
+                if (city.equals(cityCode) && province.equals(provinceCode)) {
+                    countForewarning = countForewarning + 1;
+                }
+            }
+        }
+        mapCount.put("studentCount", countSchoolUser);
+        mapCount.put("ForewarningCount", countForewarning);
+
+        String jsonStr = null;
+        try {
+            jsonStr = objectMapper.writeValueAsString(mapCount);	//areaList序列化为json字符串
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+        jedisUtil.setnx("cityCount"+key, jsonStr);
+
+        return BaseResponse.ok(StatusEnum.SUCCESS, mapCount);
+
+    }
+
+    public static String getFirstMonthDay() {
+        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime start = now.minusDays(30).withHour(0).withMinute(0).withSecond(0);
+        return start.format(pattern);
+    }
+
+
+    public static String getLastMonthDay() {
+        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime end = now.withHour(23).withMinute(59).withSecond(59);
+        return end.format(pattern);
+    }
+
+
+
 }

+ 5 - 0
src/main/java/com/chuanghai/student_portrait/controller/FaceDiscernController.java

@@ -1,5 +1,6 @@
 package com.chuanghai.student_portrait.controller;
 
+import com.chuanghai.student_portrait.entity.dto.FaceDisernDto;
 import com.chuanghai.student_portrait.response.BaseResponse;
 import com.chuanghai.student_portrait.service.FaceDiscernService;
 import com.chuanghai.student_portrait.utils.ReturnValueUtil;
@@ -10,6 +11,8 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 /**
  * @Author:liu
  * @Date: 2022/9/28  17:33
@@ -40,6 +43,8 @@ public class FaceDiscernController {
         return faceDiscernService.personalTrack(id);
     }
 
+
+
 //    @PostMapping("get")
 //    public ReturnValueUtil online(Integer page1){
 //        return faceDiscernService.online(page1);

+ 5 - 93
src/main/java/com/chuanghai/student_portrait/controller/NewSchooluserController.java

@@ -60,100 +60,12 @@ public class NewSchooluserController {
     public BaseResponse getSchoolUser(String id) {
         return newSchooluserService.getSchoolUser(id);
     }
+    @GetMapping("/exercise/getSchoolUsers")
+    @ApiOperation(value = "查询出现次数最多的")
+    public BaseResponse getTenStudent(){
+        return newSchooluserService.getTenStudent();
+    }
 
 
-//    @GetMapping("/like/getSchoolUser")
-//    public BaseResponse likeSchoolUser(String kegWord){
-//        return newSchooluserService.likeSchoolUser(kegWord);
-//    }
-
-//
-//
-//    /**
-//     * 导入student的准考证信息
-//     *
-//     * @param file
-//     * @return
-//     */
-//    @PostMapping("/importExcel")
-//    public ResultValue importExcel(MultipartFile file) {
-//        try {
-//            // 1.解析文档需要用到ImportParams 对象
-//            final ImportParams importParams = new ImportParams();
-//            importParams.setTitleRows(1);
-//            importParams.setHeadRows(1);
-//
-//            // 2.使用ExcelImportUtil工具类获取Excel表格中的内容,并转为List<T>,实际情况下我们需要知道上传的表格是什么类型的
-//            // *.因为所有的pojo都是按照用户需求创建的,拥有模板,上传的数据必须符合这些模板
-//            // *.那么实际开发中,可以通过访问的url判断本次上传的文件是属于什么类型的pojo
-//            final List<Student> studentList = ExcelImportUtil.importExcel(
-//                    file.getInputStream(),
-//                    Student.class,
-//                    importParams
-//            );
-//            ArrayList<NewSchooluser> schoolUsersList = new ArrayList<>();
-//            studentList.forEach(student -> {
-//                NewSchooluser schoolUser = querySchoolUser(student.getStudentIdCard());
-//                schoolUser.setStudentNts(student.getStudentNTS());
-//                schoolUsersList.add(schoolUser);
-//            });
-//            newSchooluserService.saveOrUpdateBatch(schoolUsersList);
-//            return ResultValue.success("导入模板成功");
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-//        return ResultValue.error("导入模板错误");
-//    }
-//
-//    /**
-//     * 导出学生准考证模板
-//     *
-//     * @param response
-//     */
-//    @RequestMapping("/exportExcel")
-//    public ResultValue exportExcel(HttpServletResponse response) {
-//        try {
-//            List<Student> studentList = new ArrayList<>();
-//            //生成Execl表,使用ExcelExportUtil工具
-//            Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("准考证模板", "准考证"), Student.class, studentList);
-//            response.setHeader("content-disposition", "attachment;fileName=" + URLEncoder.encode("准考证模板.xls", "UTF-8"));
-//            ServletOutputStream outputStream = response.getOutputStream();
-//            workbook.write(outputStream);
-//            outputStream.close();
-//            workbook.close();
-//            return ResultValue.success("导出模板成功");
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-//        return ResultValue.error("导出模板错误");
-//    }
-//
-//    /**
-//     * 通过cardNumber判断该用户是否存在于数据库SchoolUser表当中
-//     *
-//     * @param cardNumber
-//     * @param
-//     * @return
-//     */
-//    @PostMapping("/querySchoolUser")
-//    public NewSchooluser querySchoolUser(String cardNumber) {
-//        QueryWrapper<NewSchooluser> wrapper = new QueryWrapper<>();
-//        //通过微校用户的 cardNumber idCard workNo studentNo 四者均为唯一标识查找用户是否存在数据库中
-//        wrapper.eq("cardNumber", cardNumber)
-//                .or()
-//                .eq("idCard", cardNumber);
-//        List<NewSchooluser> list = newSchooluserService.list(wrapper);
-//        NewSchooluser schoolUser = new NewSchooluser();
-//        if (list.size() > 0) {
-//            schoolUser = list.get(0);
-//        }
-//        return schoolUser;
-//    }
-
-//    @PostMapping("/save/studentNts")
-//    @ApiOperation(value = "给学生添加准考证信息")
-//    private BaseResponse saveStudenNts(Integer page){
-//        return newSchooluserService.saveStudenNts(page);
-//    }
 
 }

+ 0 - 174
src/main/java/com/chuanghai/student_portrait/controller/SubscriptionController.java

@@ -1,174 +0,0 @@
-package com.chuanghai.student_portrait.controller;
-
-
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.chuanghai.student_portrait.config.SubscriptionConfig;
-import com.chuanghai.student_portrait.utils.Base64Utils;
-import com.chuanghai.student_portrait.utils.FileUtil;
-import com.chuanghai.student_portrait.utils.yushi.SubscribePersonCondition;
-import com.chuanghai.student_portrait.utils.vo.SubscriptionVo;
-import org.apache.commons.lang3.ObjectUtils;
-import org.python.jline.internal.Log;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.UnsupportedEncodingException;
-import java.util.*;
-
-@RestController
-@RequestMapping
-public class SubscriptionController {
-
-
-    @PostMapping("/post/getSubscription")
-    public SubscriptionVo getSubscription() {
-        SubscribePersonCondition subscribePersonCondition = new SubscribePersonCondition();
-        subscribePersonCondition.setLibIDNum(0);
-        JSONObject map = new JSONObject();
-        map.put("AddressType", 0);
-        map.put("IPAddress", "192.168.161.207");
-        map.put("Port", 8086);
-        map.put("Duration", 3600);
-        map.put("SubscribePersonCondition", subscribePersonCondition);
-        String jsonString = map.toJSONString();
-        SubscriptionVo subscriptionVo = new SubscriptionVo();
-        return SubscriptionConfig.subscriptionRecord(subscriptionVo, "POST", jsonString, "/LAPI/V1.0/System/Event/Subscription");
-
-    }
-
-    @PostMapping("/common/{method}")
-    public Map<String, Object> getCommon(@RequestBody Map<String, Object> map, @PathVariable String method, String url) {
-        Log.info("接收json参数:{}", map);
-        Log.info("接收路径参数:{}", method);
-        Log.info("接收参数:{}", url);
-
-        HashMap<String, Object> hashMap = new HashMap<>();
-//        String method = map.get("method").toString();
-        JSONObject jsonObject = new JSONObject();
-        if (ObjectUtils.isNotEmpty(map)) {
-            Set<Map.Entry<String, Object>> entries = map.entrySet();
-            for (Map.Entry<String, Object> entry : entries) {
-                jsonObject.put(entry.getKey(), entry.getValue());
-            }
-        }
-        String toJSONString = jsonObject.toJSONString();
-        Map<String, Object> stringObjectMap = SubscriptionConfig.commonRecord(hashMap, method, toJSONString, url);
-
-        return stringObjectMap;
-    }
-
-
-
-
-
-    @PostMapping("/LAPI/V1.0/System/Event/Notification/{url}")
-    public void a(HttpServletRequest request, HttpServletResponse response/*, BufferedReader br*/, @PathVariable String url /*, @RequestBody Map<String, Object> params*/) {
-        Log.info("调用接口:{}", url);
-
-//            System.out.println("被调用: " + url);
-
-        //System.out.print(request.getHeaderNames());
-
-//        Set<Map.Entry<String, Object>> entries = params.entrySet();
-//        for (Map.Entry<String, Object> entry : entries) {
-//            System.out.println("[ " + entry.getKey() + "," + entry.getValue() + "]");
-//        }
-
-        //Enumeration enum1 = request.getHeaderNames();
-
-        //while (enum1.hasMoreElements()) {
-
-        //    String key = (String) enum1.nextElement();
-
-        //   String value = request.getHeader(key);
-
-        //    System.out.println(key + "\t" + value);
-
-        //}
-
-        if ("PersonInfo".equals(url)) {
-
-            try {
-                BufferedReader streamReader = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
-                StringBuilder responseStrBuilder = new StringBuilder();
-                String inputStr;
-                while ((inputStr = streamReader.readLine()) != null) {
-                    responseStrBuilder.append(inputStr);
-                }
-                //        结构化事件
-//                JSONObject jsonObject = JSONObject.parseObject(responseStrBuilder.toString());
-//                JSONObject structureInfo = JSONObject.parseObject(jsonObject.get("StructureInfo").toString());
-//                JSONArray imageInfoList = structureInfo.getJSONArray("ImageInfoList");
-//                for (int i = 0; i < imageInfoList.size(); i++) {
-//                    String data = "data:image/jpeg;base64,"+imageInfoList.getJSONObject(i).get("Data").toString();
-//                    String fileNameWithPath = FileUtil.getFileNameWithPath() + ".jpg";
-//                    FileUtil.makeDirs(fileNameWithPath, "E:\\image2");
-//                    String imgFilePath = "E:\\image2\\" + fileNameWithPath;
-//                    Base64Utils.GenerateImage(data, imgFilePath);
-//                }
-
-//                人脸对比上报预警
-                JSONObject jsonObject = JSONObject.parseObject(responseStrBuilder.toString());
-                JSONObject personEventInfo = JSONObject.parseObject(jsonObject.get("PersonEventInfo").toString());
-                JSONArray faceInfoList = personEventInfo.getJSONArray("FaceInfoList");
-                for (int i = 0; i < faceInfoList.size(); i++) {
-//                    通道号
-                    String channelID = faceInfoList.getJSONObject(i).get("ChannelID").toString();
-
-                    JSONObject compareInfo = JSONObject.parseObject(faceInfoList.getJSONObject(i).get("CompareInfo").toString());
-                    JSONObject snapshotImage = JSONObject.parseObject(compareInfo.getString("SnapshotImage"));
-                    JSONObject bigImage = JSONObject.parseObject(snapshotImage.getString("BigImage"));
-//                    获取base64为编码
-                    String dataBase ="data:image/jpeg;base64,"+bigImage.getString("Data");
-
-                    String fileNameWithPath = FileUtil.getFileNameWithPath() + ".jpg";
-                    FileUtil.makeDirs(fileNameWithPath, "E:\\image3");
-                    String imgFilePath = "E:\\image3\\" + fileNameWithPath;
-                    Base64Utils.GenerateImage(dataBase, imgFilePath);
-
-                }
-
-
-            } catch (UnsupportedEncodingException e) {
-                throw new RuntimeException(e);
-            } catch (IOException e) {
-                throw new RuntimeException(e);
-            }
-            //body部分
-
-//        String inputLine;
-//
-//        String str = "";
-//
-//        try {
-//
-//            while ((inputLine = br.readLine()) != null) {
-//
-//                str += inputLine;
-//
-//            }
-//
-//            br.close();
-//
-//        } catch (IOException e) {
-//
-//            System.out.println("IOException: " + e);
-//
-//        }
-//
-//        System.out.println("str:" + str);
-
-
-        }
-    }
-
-
-}
-
-
-

+ 10 - 0
src/main/java/com/chuanghai/student_portrait/entity/City.java

@@ -0,0 +1,10 @@
+package com.chuanghai.student_portrait.entity;
+
+import lombok.Data;
+
+@Data
+public class City {
+    private Integer provinceCode;
+    private  String cityCode;
+    private  String cityName;
+}

+ 0 - 1
src/main/java/com/chuanghai/student_portrait/entity/Consume.java

@@ -14,7 +14,6 @@ import java.util.Date;
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
-@ToString
 @TableName(value = "consume")
 public class Consume {
     /**

+ 12 - 0
src/main/java/com/chuanghai/student_portrait/entity/Coord.java

@@ -0,0 +1,12 @@
+package com.chuanghai.student_portrait.entity;
+
+import lombok.Data;
+
+@Data
+public class Coord {
+    private Integer id;
+    private String buildingName;
+    private String longitude;
+    private String latitude;
+    private String remarks;
+}

+ 3 - 1
src/main/java/com/chuanghai/student_portrait/entity/dto/CapacityAllDto.java

@@ -2,8 +2,10 @@ package com.chuanghai.student_portrait.entity.dto;
 
 import lombok.Data;
 
+import java.io.Serializable;
+
 @Data
-public class CapacityAllDto {
+public class CapacityAllDto implements Serializable {
     private String name;
     private long threshold;
     private long truth;

+ 3 - 1
src/main/java/com/chuanghai/student_portrait/entity/dto/CapacityDto.java

@@ -2,8 +2,10 @@ package com.chuanghai.student_portrait.entity.dto;
 
 import lombok.Data;
 
+import java.io.Serializable;
+
 @Data
-public class CapacityDto {
+public class CapacityDto implements Serializable {
     private String name;
     private Double max;
 }

+ 3 - 1
src/main/java/com/chuanghai/student_portrait/entity/dto/ConsumeTotalMoneyDto.java

@@ -2,8 +2,10 @@ package com.chuanghai.student_portrait.entity.dto;
 
 import lombok.Data;
 
+import java.io.Serializable;
+
 @Data
-public class ConsumeTotalMoneyDto {
+public class ConsumeTotalMoneyDto implements Serializable {
 //    省份
     private String province;
 //    总金额

+ 3 - 1
src/main/java/com/chuanghai/student_portrait/entity/dto/DistrictDto.java

@@ -2,8 +2,10 @@ package com.chuanghai.student_portrait.entity.dto;
 
 import lombok.Data;
 
+import java.io.Serializable;
+
 @Data
-public class DistrictDto {
+public class DistrictDto implements Serializable {
     private String province;
     private Long Count;
 }

+ 2 - 1
src/main/java/com/chuanghai/student_portrait/entity/dto/EnergyDto.java

@@ -2,10 +2,11 @@ package com.chuanghai.student_portrait.entity.dto;
 
 import lombok.Data;
 
+import java.io.Serializable;
 import java.util.Date;
 
 @Data
-public class EnergyDto {
+public class EnergyDto implements Serializable {
     private String genderDrom;
     private Double totalMoney;
     private Object date;

+ 11 - 0
src/main/java/com/chuanghai/student_portrait/entity/dto/FaceDisernDto.java

@@ -0,0 +1,11 @@
+package com.chuanghai.student_portrait.entity.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class FaceDisernDto implements Serializable {
+    private String schoolUserID;
+    private Integer count;
+}

+ 3 - 1
src/main/java/com/chuanghai/student_portrait/entity/dto/PersonConsumDto.java

@@ -2,8 +2,10 @@ package com.chuanghai.student_portrait.entity.dto;
 
 import lombok.Data;
 
+import java.io.Serializable;
+
 @Data
-public class PersonConsumDto {
+public class PersonConsumDto implements Serializable {
     private String name;
     private Object money;
     private String percentage;

+ 6 - 1
src/main/java/com/chuanghai/student_portrait/entity/dto/PersonalTrackDto.java

@@ -2,10 +2,11 @@ package com.chuanghai.student_portrait.entity.dto;
 
 import lombok.Data;
 
+import java.io.Serializable;
 import java.util.Date;
 
 @Data
-public class PersonalTrackDto {
+public class PersonalTrackDto  implements Serializable {
     private Date dateTime;
 //    图片
     private String image;
@@ -13,4 +14,8 @@ public class PersonalTrackDto {
     private String affair;
 //   名字
     private String name;
+//    坐标--经度
+    private String longitude;
+//    坐标--纬度
+    private String latitude;
 }

+ 9 - 0
src/main/java/com/chuanghai/student_portrait/mapper/CityMapper.java

@@ -0,0 +1,9 @@
+package com.chuanghai.student_portrait.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.student_portrait.entity.City;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface CityMapper extends BaseMapper<City> {
+}

+ 9 - 0
src/main/java/com/chuanghai/student_portrait/mapper/CoordMapper.java

@@ -0,0 +1,9 @@
+package com.chuanghai.student_portrait.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.student_portrait.entity.Coord;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface CoordMapper extends BaseMapper<Coord> {
+}

+ 9 - 0
src/main/java/com/chuanghai/student_portrait/mapper/FaceDiscernMapper.java

@@ -2,8 +2,17 @@ package com.chuanghai.student_portrait.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.chuanghai.student_portrait.entity.FaceDiscern;
+import com.chuanghai.student_portrait.entity.dto.FaceDisernDto;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
 
 @Mapper
 public interface FaceDiscernMapper extends BaseMapper<FaceDiscern> {
+   @Select(" select shooluser_id as schoolUserID,COUNT(shooluser_id) as count from facediscern " +
+            "WHERE faceDiscern_time > #{startTime} and faceDiscern_time < #{endTime} GROUP BY shooluser_id ORDER BY count DESC")
+    List<FaceDisernDto> getStudentCount(@Param("startTime") String startTime, @Param("endTime") String endTime);
 }

+ 10 - 0
src/main/java/com/chuanghai/student_portrait/mapper/FaceDiscernMapper.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.chuanghai.student_portrait.mapper.FaceDiscernMapper">
+
+<!--    <select id="getStudentCount" resultType="com.chuanghai.student_portrait.entity.dto.FaceDisernDto">-->
+<!--        select shooluser_id as schoolUserID,COUNT(shooluser_id) as count from facediscern-->
+<!--        WHERE faceDiscern_time &gt; #{startTime} and faceDiscern_time &lt;#{endTime} GROUP BY shooluser_id ORDER BY count DESC-->
+<!--    </select>-->
+</mapper>
+

+ 7 - 0
src/main/java/com/chuanghai/student_portrait/service/CityService.java

@@ -0,0 +1,7 @@
+package com.chuanghai.student_portrait.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chuanghai.student_portrait.entity.City;
+
+public interface CityService extends IService<City> {
+}

+ 7 - 0
src/main/java/com/chuanghai/student_portrait/service/CoordService.java

@@ -0,0 +1,7 @@
+package com.chuanghai.student_portrait.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chuanghai.student_portrait.entity.Coord;
+
+public interface CoordService extends IService<Coord> {
+}

+ 10 - 1
src/main/java/com/chuanghai/student_portrait/service/FaceDiscernService.java

@@ -2,9 +2,12 @@ package com.chuanghai.student_portrait.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.chuanghai.student_portrait.entity.FaceDiscern;
+import com.chuanghai.student_portrait.entity.dto.FaceDisernDto;
 import com.chuanghai.student_portrait.response.BaseResponse;
 import com.chuanghai.student_portrait.utils.ReturnValueUtil;
 
+import java.util.List;
+
 /**
  * @Author:liu
  * @Date: 2022/9/6  14:30
@@ -15,7 +18,13 @@ public interface FaceDiscernService extends IService<FaceDiscern> {
 
     BaseResponse unitAccessCount(String startTime, String endTime, String id);
 
-    BaseResponse personalTrack(String id);
+    BaseResponse    personalTrack(String id);
+
+    /**
+     * 获取7天内最活跃的人
+     * @return
+     */
+    List<FaceDisernDto> getStudentCount();
 
 
 //    ReturnValueUtil online(Integer page1);

+ 1 - 1
src/main/java/com/chuanghai/student_portrait/service/NewSchooluserService.java

@@ -15,6 +15,6 @@ public interface NewSchooluserService extends IService<NewSchooluser> {
     BaseResponse getSchoolUser(String id);
 
 
-
+    BaseResponse getTenStudent();
 
 }

+ 1 - 2
src/main/java/com/chuanghai/student_portrait/service/impl/AccessServiceImpl.java

@@ -63,8 +63,7 @@ public class AccessServiceImpl extends ServiceImpl<AccessMapper, Access> impleme
     /**
      * 每3小时拉取一次门禁的数据
      */
-//    @Scheduled(cron = "0 0 0/3 * * ? ")
-    @Scheduled(cron = "0 0/3 * * * ? ")
+    @Scheduled(cron = "0 0 0/2 * * ? ")
     public void autoQueryOrder() {
         getQRCode();
     }

+ 37 - 1
src/main/java/com/chuanghai/student_portrait/service/impl/AffinityScoreServiceImpl.java

@@ -15,8 +15,13 @@ import com.chuanghai.student_portrait.service.ConsumeService;
 import com.chuanghai.student_portrait.service.FaceDiscernService;
 import com.chuanghai.student_portrait.service.NewSchooluserService;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.chuanghai.student_portrait.utils.JedisUtil;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
@@ -38,12 +43,43 @@ public class AffinityScoreServiceImpl extends ServiceImpl<AffinityScoreMapper, A
     @Autowired
     NewSchooluserService newSchooluserService;
 
+    @Autowired
+    JedisUtil jedisUtil;
+
     @Override
     public BaseResponse getAffinityScore(String id) {
+
+        ObjectMapper objectMapper = new ObjectMapper();
+        List<AffinityScore> list = new ArrayList<>();
+//        redis 缓存
+        if (jedisUtil.exists("affinity"+id)) {
+            String affinity = jedisUtil.get("affinity"+id);
+            JavaType javaType = objectMapper.getTypeFactory()
+                    .constructParametricType(ArrayList.class, AffinityScore.class);  //json字符串反序列化为AffinityScore数组
+            try {
+                list = objectMapper.readValue(affinity, javaType);
+            } catch (JsonProcessingException e) {
+                e.printStackTrace();
+            }
+            return BaseResponse.ok(StatusEnum.SUCCESS, list);
+        }
+
         if (ObjectUtils.isEmpty(id)) {
             return BaseResponse.error(StatusEnum.FAIL, "参数异常");
         }
-        List<AffinityScore> list = this.list(Wrappers.<AffinityScore>lambdaQuery().eq(AffinityScore::getSchooluserId, id).orderByDesc(AffinityScore::getCount));
+
+        list = this.list(Wrappers.<AffinityScore>lambdaQuery().eq(AffinityScore::getSchooluserId, id).orderByDesc(AffinityScore::getCount));
+        if (ObjectUtils.isEmpty(list)&&list.size()<=0) {
+            return BaseResponse.error(StatusEnum.FAIL,"参数异常");
+        }
+
+        String jsonStr = null;
+        try {
+            jsonStr = objectMapper.writeValueAsString(list);	//areaList序列化为json字符串
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+        jedisUtil.setnx("affinity"+id, jsonStr);
 
         return BaseResponse.ok(StatusEnum.SUCCESS, list);
     }

+ 194 - 92
src/main/java/com/chuanghai/student_portrait/service/impl/CapacityServiceImpl.java

@@ -1,5 +1,8 @@
 package com.chuanghai.student_portrait.service.impl;
 
+import com.alibaba.fastjson2.JSON;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -11,7 +14,11 @@ import com.chuanghai.student_portrait.response.BaseResponse;
 import com.chuanghai.student_portrait.response.enums.StatusEnum;
 import com.chuanghai.student_portrait.service.*;
 import com.chuanghai.student_portrait.utils.DateUtils;
+import com.chuanghai.student_portrait.utils.JedisUtil;
 import com.chuanghai.student_portrait.utils.LogUtils;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
@@ -46,11 +53,14 @@ public class CapacityServiceImpl extends ServiceImpl<CapacityMapper, Capacity> i
     @Autowired
     NewSchooluserServiceImpl newSchooluserService;
 
+    @Autowired
+    JedisUtil jedisUtil;
+
     //健康
     //  一月一次
-    @Scheduled(cron = "0 27 23 2 * ? ")
+    @Scheduled(cron = "0 25 23 2 * ? ")
     public void saveHealthCapacity() {
-//        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         String startTime = startTime();
         String endTime = endTime();
         LocalDateTime start = LocalDateTime.parse(startTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
@@ -73,93 +83,127 @@ public class CapacityServiceImpl extends ServiceImpl<CapacityMapper, Capacity> i
             LocalDateTime localDateTime5 = time.withHour(16).withMinute(0).withSecond(0);
             LocalDateTime localDateTime6 = time.withHour(20).withMinute(0).withSecond(0);
 
-            List<Consume> list1 = consumeService.list(Wrappers.<Consume>lambdaQuery().select(Consume::getIdCard).between(Consume::getConsumeTime, localDateTime1, localDateTime2).groupBy(Consume::getIdCard));
-            List<Consume> list2 = consumeService.list(Wrappers.<Consume>lambdaQuery().select(Consume::getIdCard).between(Consume::getConsumeTime, localDateTime3, localDateTime4).groupBy(Consume::getIdCard));
-            List<Consume> list3 = consumeService.list(Wrappers.<Consume>lambdaQuery().select(Consume::getIdCard).between(Consume::getConsumeTime, localDateTime5, localDateTime6).groupBy(Consume::getIdCard));
+//            QueryWrapper<Consume> warpper=new QueryWrapper<>();
+//            warpper.select("count(*) as count,id_card").between("consume_time",localDateTime1,localDateTime2).groupBy("id_card");
+//            List<Consume> list1 = consumeService.list(warpper);
+//
+//            QueryWrapper<Consume> warpper1=new QueryWrapper<>();
+//            warpper1.select("count(*) as count,id_card").between("consume_time",localDateTime3,localDateTime4).groupBy("id_card");
+//            List<Consume> list2 = consumeService.list(warpper1);
+//
+//            QueryWrapper<Consume> warpper2=new QueryWrapper<>();
+//            warpper2.select("count(*) as count,id_card").between("consume_time",localDateTime5,localDateTime6).groupBy("id_card");
+//            List<Consume> list3 = consumeService.list(warpper2);
+            List<Consume> list1 = consumeService.list(Wrappers.<Consume>lambdaQuery()
+                    .select(Consume::getIdCard)
+                    .between(Consume::getConsumeTime, localDateTime1, localDateTime2)
+                    .groupBy(Consume::getIdCard)
+            );
+
+
+            List<Consume> list2 = consumeService.list(Wrappers.<Consume>lambdaQuery()
+                    .select(Consume::getIdCard)
+                    .between(Consume::getConsumeTime, localDateTime3, localDateTime4)
+                    .groupBy(Consume::getIdCard));
+
+            List<Consume> list3 = consumeService.list(Wrappers.<Consume>lambdaQuery()
+                    .select(Consume::getIdCard)
+                    .between(Consume::getConsumeTime, localDateTime5, localDateTime6)
+                    .groupBy(Consume::getIdCard));
+
+//第一个数据都是空的
             for (Consume consume : list1) {
-                String idCard = consume.getIdCard();
-                if (ObjectUtils.isNotEmpty(idCard)) {
-                    String capacityName = "健康";
-                    Capacity capacity = getCapacity(idCard, capacityName, startTime);
-                    if (ObjectUtils.isNotEmpty(capacity)) {
-                        String units = capacity.getUnits();
-                        int i1 = Integer.parseInt(units);
-                        int un = i1 + 1;
-                        String s = String.valueOf(un);
-                        capacity.setUnits(s);
-                        this.updateById(capacity);
-                    } else {
-                        Capacity capacity1 = new Capacity();
-                        capacity1.setCapacityName(capacityName);
-                        capacity1.setSchooluserId(idCard);
-                        Date date = null;
-                        try {
-                            date = DateUtils.stringToDate(startTime);
-                        } catch (Exception e) {
-                            LogUtils.logError(e);
-                            throw new RuntimeException(e);
+                if (ObjectUtils.isNotEmpty(consume)) {
+                    String idCard = consume.getIdCard();
+                    if (ObjectUtils.isNotEmpty(idCard)) {
+                        String capacityName = "健康";
+                        Capacity capacity = getCapacity(idCard, capacityName, startTime);
+                        if (ObjectUtils.isNotEmpty(capacity)) {
+                            String units = capacity.getUnits();
+                            int i1 = Integer.parseInt(units);
+                            int un = i1 + 1;
+                            String s = String.valueOf(un);
+                            capacity.setUnits(s);
+                            this.updateById(capacity);
+                        } else {
+                            Capacity capacity1 = new Capacity();
+                            capacity1.setCapacityName(capacityName);
+                            capacity1.setSchooluserId(idCard);
+                            Date date = null;
+                            try {
+                                date = DateUtils.stringToDate(startTime);
+                            } catch (Exception e) {
+                                LogUtils.logError(e);
+                                throw new RuntimeException(e);
+                            }
+                            capacity1.setDateTime(date);
+                            capacity1.setUnits("1");
+                            this.save(capacity1);
                         }
-                        capacity1.setDateTime(date);
-                        capacity1.setUnits("1");
-                        this.save(capacity1);
                     }
                 }
             }
+
             for (Consume consume : list2) {
-                String idCard = consume.getIdCard();
-                if (ObjectUtils.isNotEmpty(idCard)) {
-                    String capacityName = "健康";
-                    Capacity capacity = getCapacity(idCard, capacityName, startTime);
-                    if (ObjectUtils.isNotEmpty(capacity)) {
-                        String units = capacity.getUnits();
-                        int i1 = Integer.parseInt(units);
-                        int un = i1 + 1;
-                        String s = String.valueOf(un);
-                        capacity.setUnits(s);
-                        this.updateById(capacity);
-                    } else {
-                        Capacity capacity1 = new Capacity();
-                        capacity1.setCapacityName(capacityName);
-                        capacity1.setSchooluserId(idCard);
-                        Date date = null;
-                        try {
-                            date = DateUtils.stringToDate(startTime);
-                        } catch (Exception e) {
-                            LogUtils.logError(e);
-                            throw new RuntimeException(e);
+                if (ObjectUtils.isNotEmpty(consume)) {
+                    String idCard = consume.getIdCard();
+                    if (ObjectUtils.isNotEmpty(idCard)) {
+                        String capacityName = "健康";
+                        Capacity capacity = getCapacity(idCard, capacityName, startTime);
+                        if (ObjectUtils.isNotEmpty(capacity)) {
+                            String units = capacity.getUnits();
+                            int i1 = Integer.parseInt(units);
+                            int un = i1 + 1;
+                            String s = String.valueOf(un);
+                            capacity.setUnits(s);
+                            this.updateById(capacity);
+                        } else {
+                            Capacity capacity1 = new Capacity();
+                            capacity1.setCapacityName(capacityName);
+                            capacity1.setSchooluserId(idCard);
+                            Date date = null;
+                            try {
+                                date = DateUtils.stringToDate(startTime);
+                            } catch (Exception e) {
+                                LogUtils.logError(e);
+                                throw new RuntimeException(e);
+                            }
+                            capacity1.setDateTime(date);
+                            capacity1.setUnits("1");
+                            this.save(capacity1);
                         }
-                        capacity1.setDateTime(date);
-                        capacity1.setUnits("1");
-                        this.save(capacity1);
                     }
                 }
             }
+
             for (Consume consume : list3) {
-                String idCard = consume.getIdCard();
-                if (ObjectUtils.isNotEmpty(idCard)) {
-                    String capacityName = "健康";
-                    Capacity capacity = getCapacity(idCard, capacityName, startTime);
-                    if (ObjectUtils.isNotEmpty(capacity)) {
-                        String units = capacity.getUnits();
-                        int i1 = Integer.parseInt(units);
-                        int un = i1 + 1;
-                        String s = String.valueOf(un);
-                        capacity.setUnits(s);
-                        this.updateById(capacity);
-                    } else {
-                        Capacity capacity1 = new Capacity();
-                        capacity1.setCapacityName(capacityName);
-                        capacity1.setSchooluserId(idCard);
-                        Date date = null;
-                        try {
-                            date = DateUtils.stringToDate(startTime);
-                        } catch (Exception e) {
-                            LogUtils.logError(e);
-                            throw new RuntimeException(e);
+                if (ObjectUtils.isNotEmpty(consume)) {
+                    String idCard = consume.getIdCard();
+                    if (ObjectUtils.isNotEmpty(idCard)) {
+                        String capacityName = "健康";
+                        Capacity capacity = getCapacity(idCard, capacityName, startTime);
+                        if (ObjectUtils.isNotEmpty(capacity)) {
+                            String units = capacity.getUnits();
+                            int i1 = Integer.parseInt(units);
+                            int un = i1 + 1;
+                            String s = String.valueOf(un);
+                            capacity.setUnits(s);
+                            this.updateById(capacity);
+                        } else {
+                            Capacity capacity1 = new Capacity();
+                            capacity1.setCapacityName(capacityName);
+                            capacity1.setSchooluserId(idCard);
+                            Date date = null;
+                            try {
+                                date = DateUtils.stringToDate(startTime);
+                            } catch (Exception e) {
+                                LogUtils.logError(e);
+                                throw new RuntimeException(e);
+                            }
+                            capacity1.setDateTime(date);
+                            capacity1.setUnits("1");
+                            this.save(capacity1);
                         }
-                        capacity1.setDateTime(date);
-                        capacity1.setUnits("1");
-                        this.save(capacity1);
                     }
                 }
             }
@@ -382,7 +426,6 @@ public class CapacityServiceImpl extends ServiceImpl<CapacityMapper, Capacity> i
         }
     }
 
-
     public static String startTime() {
         DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         LocalDateTime now = LocalDateTime.now();
@@ -390,6 +433,7 @@ public class CapacityServiceImpl extends ServiceImpl<CapacityMapper, Capacity> i
         return start.minusMonths(1).format(pattern);
     }
 
+
     public static String endTime() {
         DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         LocalDateTime now = LocalDateTime.now();
@@ -397,6 +441,20 @@ public class CapacityServiceImpl extends ServiceImpl<CapacityMapper, Capacity> i
         return end.minusDays(1).format(pattern);
     }
 
+    public static String dateTime() {
+        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDateTime now = LocalDateTime.now();
+        int day = now.getDayOfMonth();
+        LocalDateTime start = null;
+        if (day <= 2) {
+            start = now.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).minusMonths(2);
+        } else {
+            start = now.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).minusMonths(1);
+        }
+        return start.format(pattern);
+    }
+
+
     public Capacity getCapacity(String schooluserId, String capacityName, String startTime) {
         Capacity one = this.getOne(Wrappers.<Capacity>lambdaQuery()
                 .eq(Capacity::getSchooluserId, schooluserId)
@@ -407,25 +465,30 @@ public class CapacityServiceImpl extends ServiceImpl<CapacityMapper, Capacity> i
 
     //    健康,爱动,消费,关系的平均数
     public CapacityDto getAverage(String name) {
-        String s = startTime();
-
+        String s = dateTime();
         CapacityDto capacityDto = new CapacityDto();
         List<Capacity> list = this.list(Wrappers.<Capacity>lambdaQuery().eq(Capacity::getDateTime, s).eq(Capacity::getCapacityName, name));
         Double average = 0.0;
-        for (Capacity capacity : list) {
-            String units = capacity.getUnits();
-            double v = Double.parseDouble(units);
-            average = average + v;
+        if (ObjectUtils.isNotEmpty(list) && list.size() > 0) {
+            for (Capacity capacity : list) {
+                String units = capacity.getUnits();
+                double v = Double.parseDouble(units);
+                average = average + v;
+            }
+            capacityDto.setMax(Math.ceil(average / list.size()));
+        } else {
+            capacityDto.setMax(average);
         }
         capacityDto.setName(name);
-        capacityDto.setMax(Math.ceil(average / list.size()));
-
         return capacityDto;
     }
 
     //    大于等于平均数的人数
     public long getGeAverageCount(Double average, String name, String dateTime) {
-        long count = this.count(Wrappers.<Capacity>lambdaQuery().eq(Capacity::getCapacityName, name).eq(Capacity::getDateTime, dateTime).ge(Capacity::getUnits, average));
+        long count = this.count(Wrappers.<Capacity>lambdaQuery()
+                .eq(Capacity::getCapacityName, name)
+                .eq(Capacity::getDateTime, dateTime)
+                .ge(Capacity::getUnits, average));
         return count;
     }
 
@@ -437,7 +500,7 @@ public class CapacityServiceImpl extends ServiceImpl<CapacityMapper, Capacity> i
 
     //    单个学生总数
     public CapacityDto getCapacityDto(String id, String name) {
-        String s = startTime();
+        String s = dateTime();
         Capacity capacity = this.getOne(Wrappers.<Capacity>lambdaQuery().eq(Capacity::getSchooluserId, id).eq(Capacity::getDateTime, s).eq(Capacity::getCapacityName, name));
         CapacityDto capacityDto = new CapacityDto();
         capacityDto.setName(name);
@@ -449,11 +512,26 @@ public class CapacityServiceImpl extends ServiceImpl<CapacityMapper, Capacity> i
         return capacityDto;
     }
 
+
     @Override
     public BaseResponse getOneStudent(String id) {
+//        ObjectMapper objectMapper = new ObjectMapper();
+//
+//        //        redis 缓存
+//        if (jedisUtil.exists("capacityOne"+id)) {
+//            String capacityOne = jedisUtil.get("capacityOne"+id);
+//            Map map1 = JSON.parseObject(capacityOne,Map.class);
+//            return BaseResponse.ok(StatusEnum.SUCCESS, map1);
+//        }
+
+        HashMap<String, Object> map = new HashMap<>();
         if (ObjectUtils.isEmpty(id)) {
             return BaseResponse.error(StatusEnum.FAIL, "参数异常");
         }
+        NewSchooluser byId = newSchooluserService.getById(id);
+        if (ObjectUtils.isEmpty(byId)) {
+            return BaseResponse.error(StatusEnum.FAIL, "该学生不存在");
+        }
         String s = startTime();
         String health = "健康";
         String exercise = "爱动";
@@ -485,7 +563,7 @@ public class CapacityServiceImpl extends ServiceImpl<CapacityMapper, Capacity> i
         capacityDto.setMax(max + max1 + max2);
         averages.add(capacityDto);
 
-        HashMap<String, Object> map = new HashMap<>();
+
         ArrayList<CapacityDto> capacityDtos = new ArrayList<>();
 
         CapacityDto capacityDto1 = getCapacityDto(id, health);
@@ -526,19 +604,37 @@ public class CapacityServiceImpl extends ServiceImpl<CapacityMapper, Capacity> i
 
         map.put("average", averages);
         map.put("list", capacityDtos);
+//        String jsonStr = null;
+//        try {
+//            jsonStr = objectMapper.writeValueAsString(map);	//areaList序列化为json字符串
+//        } catch (JsonProcessingException e) {
+//            e.printStackTrace();
+//        }
+//        jedisUtil.setnx("capacityOne"+id, jsonStr);
+
         return BaseResponse.ok(StatusEnum.SUCCESS, map);
+
     }
 
     @Override
     public BaseResponse getAllStudents() {
-        String s = startTime();
+        ObjectMapper objectMapper = new ObjectMapper();
+
+        //        redis 缓存
+        if (jedisUtil.exists("capacityAll")) {
+            String capacityAll = jedisUtil.get("capacityAll");
+            List<CapacityAllDto> listStr = JSON.parseArray(capacityAll, CapacityAllDto.class);
+            return BaseResponse.ok(StatusEnum.SUCCESS, listStr);
+        }
+
+        String s = dateTime();
         String health = "健康";
         String exercise = "爱动";
         String consume = "消费";
         String affinityScore = "关系";
         String safety = "安全";
         String conscientiousness = "尽责心";
-        ArrayList<CapacityAllDto> list = new ArrayList<>();
+        List<CapacityAllDto> list = new ArrayList<>();
 
 //        健康
         CapacityDto average = getAverage(health);
@@ -609,7 +705,13 @@ public class CapacityServiceImpl extends ServiceImpl<CapacityMapper, Capacity> i
         capacityAllDto5.setThreshold(totalCount5);
         capacityAllDto5.setTruth(geAverageCount5);
         list.add(capacityAllDto5);
-
+        String jsonStr = null;
+        try {
+            jsonStr = objectMapper.writeValueAsString(list);    //areaList序列化为json字符串
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+        jedisUtil.setnx("capacityAll", jsonStr);
 
         return BaseResponse.ok(StatusEnum.SUCCESS, list);
     }

+ 11 - 0
src/main/java/com/chuanghai/student_portrait/service/impl/CityServiceImpl.java

@@ -0,0 +1,11 @@
+package com.chuanghai.student_portrait.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chuanghai.student_portrait.entity.City;
+import com.chuanghai.student_portrait.mapper.CityMapper;
+import com.chuanghai.student_portrait.service.CityService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class CityServiceImpl extends ServiceImpl<CityMapper, City> implements CityService {
+}

+ 35 - 32
src/main/java/com/chuanghai/student_portrait/service/impl/ColdWaterServiceImpl.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.chuanghai.student_portrait.entity.ColdWater;
@@ -37,7 +38,7 @@ public class ColdWaterServiceImpl extends ServiceImpl<ColdWaterMapper, ColdWater
     private Integer size = 8;
 
     //    20秒钟运行一次
-    @Scheduled(cron = "0/20 0 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 1 * ? ")
+    @Scheduled(cron = "0/20 * * 1 * ?  ")
     public void autoQueryOrder() {
         Page<Dorm> dormPage = dormService.page(new Page<Dorm>(page, size));
         List<Dorm> records = dormPage.getRecords();
@@ -76,39 +77,41 @@ public class ColdWaterServiceImpl extends ServiceImpl<ColdWaterMapper, ColdWater
         JSONObject jsonObj = JSON.parseObject(responseEntity.getBody());
 
         JSONArray jsonArray = jsonObj.getJSONArray("rows");
-
-        JSONObject jsonMap = jsonArray.getJSONObject(0);
-        if (jsonMap != null) {
-            ColdWater coldWater = new ColdWater();
-            String dom = jsonMap.get("dom").toString();
-            coldWater.setDom(dom);
-
-            Double totalMoney = Double.valueOf(jsonMap.get("totalMoney").toString());
-            Double totalPower = Double.valueOf(jsonMap.get("totalPower").toString());
-            BigDecimal bg = new BigDecimal(totalMoney);
-            BigDecimal bg2 = new BigDecimal(totalPower);
-            /**
-             * 参数:
-             newScale - 要返回的 BigDecimal 值的标度。
-             roundingMode - 要应用的舍入模式。
-             返回:
-             一个 BigDecimal,其标度为指定值,其非标度值可以通过此 BigDecimal 的非标度值乘以或除以十的适当次幂来确定。
-             */
-            double f1 = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-            double f2 = bg2.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-
-            coldWater.setTotalMoney(f1);
-            coldWater.setTotalPower(f2);
-            String dateTime = jsonMap.get("dataTime").toString();
-            coldWater.setDataTime(dateTime);
-
-
-            Boolean exists = chackColdWaterActive(dom, dateTime);
-            if (!exists) {
-                this.save(coldWater);
+        if (ObjectUtils.isNotEmpty(jsonArray)) {
+
+
+            JSONObject jsonMap = jsonArray.getJSONObject(0);
+            if (jsonMap != null) {
+                ColdWater coldWater = new ColdWater();
+                String dom = jsonMap.get("dom").toString();
+                coldWater.setDom(dom);
+
+                Double totalMoney = Double.valueOf(jsonMap.get("totalMoney").toString());
+                Double totalPower = Double.valueOf(jsonMap.get("totalPower").toString());
+                BigDecimal bg = new BigDecimal(totalMoney);
+                BigDecimal bg2 = new BigDecimal(totalPower);
+                /**
+                 * 参数:
+                 newScale - 要返回的 BigDecimal 值的标度。
+                 roundingMode - 要应用的舍入模式。
+                 返回:
+                 一个 BigDecimal,其标度为指定值,其非标度值可以通过此 BigDecimal 的非标度值乘以或除以十的适当次幂来确定。
+                 */
+                double f1 = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+                double f2 = bg2.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+
+                coldWater.setTotalMoney(f1);
+                coldWater.setTotalPower(f2);
+                String dateTime = jsonMap.get("dataTime").toString();
+                coldWater.setDataTime(dateTime);
+
+
+                Boolean exists = chackColdWaterActive(dom, dateTime);
+                if (!exists) {
+                    this.save(coldWater);
+                }
             }
         }
-
         return ResultValue.success(jsonObj);
     }
 

+ 166 - 34
src/main/java/com/chuanghai/student_portrait/service/impl/ConsumeServicelmpl.java

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.chuanghai.student_portrait.config.TokenConfig;
 import com.chuanghai.student_portrait.entity.*;
+import com.chuanghai.student_portrait.entity.dto.CapacityAllDto;
 import com.chuanghai.student_portrait.entity.dto.ConsumeDto;
 import com.chuanghai.student_portrait.entity.dto.ConsumeTotalMoneyDto;
 import com.chuanghai.student_portrait.entity.dto.PersonConsumDto;
@@ -17,7 +18,9 @@ import com.chuanghai.student_portrait.response.BaseResponse;
 import com.chuanghai.student_portrait.response.enums.StatusEnum;
 import com.chuanghai.student_portrait.service.*;
 import com.chuanghai.student_portrait.utils.DateUtils;
+import com.chuanghai.student_portrait.utils.JedisUtil;
 import com.chuanghai.student_portrait.utils.LogUtils;
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.sun.org.apache.bcel.internal.generic.NEW;
@@ -64,9 +67,19 @@ public class ConsumeServicelmpl extends ServiceImpl<ConsumeMapper, Consume> impl
     @Autowired
     ElectricityService electricityService;
 
+    @Autowired
+    JedisUtil jedisUtil;
+
 
     @Override
     public BaseResponse getAddress(String startTime, String endTime, String idCard) {
+//        ObjectMapper objectMapper = new ObjectMapper();
+//        //        redis 缓存
+//        if (jedisUtil.exists("address"+idCard)) {
+//            String address = jedisUtil.get("address"+idCard);
+//            List<ConsumeDto> list = com.alibaba.fastjson2.JSON.parseArray(address, ConsumeDto.class);
+//            return BaseResponse.ok(StatusEnum.SUCCESS, list);
+//        }
         DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         LocalDateTime now = LocalDateTime.now();
 //        为空,默认为昨天的
@@ -104,7 +117,7 @@ public class ConsumeServicelmpl extends ServiceImpl<ConsumeMapper, Consume> impl
             Integer value = entry.getValue();
             Stall one = stallService.getOne(Wrappers.<Stall>lambdaQuery().eq(Stall::getAddress, address));
             ConsumeDto consumeDto = new ConsumeDto();
-            if (one == null) {
+            if (ObjectUtils.isEmpty(one)) {
                 consumeDto.setName(address);
             } else {
                 consumeDto.setName(one.getName());
@@ -112,12 +125,20 @@ public class ConsumeServicelmpl extends ServiceImpl<ConsumeMapper, Consume> impl
             consumeDto.setCount(value);
             consumeDtos.add(consumeDto);
         }
-
+//        String jsonStr = null;
+//        try {
+//            jsonStr = objectMapper.writeValueAsString(consumeDtos);	//areaList序列化为json字符串
+//        } catch (JsonProcessingException e) {
+//            e.printStackTrace();
+//        }
+//        jedisUtil.setnx("address"+idCard, jsonStr);
         return BaseResponse.ok(StatusEnum.SUCCESS, consumeDtos);
     }
 
-    @Override
-    public BaseResponse consumeProvinceRanking() {
+
+    //    @Override
+    public BaseResponse consumeProvinceRanking1() {
+
         Calendar calendar = Calendar.getInstance();
         // 获取当前年
         int year = calendar.get(Calendar.YEAR);
@@ -130,12 +151,10 @@ public class ConsumeServicelmpl extends ServiceImpl<ConsumeMapper, Consume> impl
         } else {
             oldYear = year - 4;
         }
-
-        Date date = new Date();
-//        获取当月第一天
-        Date firstMonthDay = getFirstMonthDay(date);
-//        获取当月最后一天
-        Date lastMonthDay = getLastMonthDay(date);
+//        获取当前
+        String firstMonthDay = getFirstMonthDay();
+//        获取当前时间的前30天时间
+        String lastMonthDay = getLastMonthDay();
 //      获取所有省份分组
         List<NewSchooluser> list = newSchooluserService.list(Wrappers.<NewSchooluser>lambdaQuery()
                 .select(NewSchooluser::getProvince)
@@ -190,8 +209,121 @@ public class ConsumeServicelmpl extends ServiceImpl<ConsumeMapper, Consume> impl
     }
 
     @Override
+    public BaseResponse consumeProvinceRanking() {
+        ObjectMapper objectMapper = new ObjectMapper();
+        //        redis 缓存
+        if (jedisUtil.exists("consumeProvinceRanking")) {
+            String address = jedisUtil.get("consumeProvinceRanking");
+            List<ConsumeTotalMoneyDto> list = com.alibaba.fastjson2.JSON.parseArray(address, ConsumeTotalMoneyDto.class);
+            return BaseResponse.ok(StatusEnum.SUCCESS, list);
+        }
+        Calendar calendar = Calendar.getInstance();
+        // 获取当前年
+        int year = calendar.get(Calendar.YEAR);
+        // 获取当前月
+        int month = calendar.get(Calendar.MONTH) + 1;
+        int oldYear = 0;
+
+        if (month >= 7) {
+            oldYear = year - 3;
+        } else {
+            oldYear = year - 4;
+        }
+
+
+
+        String firstMonthDay = getFirstMonthDay();
+
+        String lastMonthDay = getLastMonthDay();
+
+        List<Consume> list1 = this.list(Wrappers.<Consume>lambdaQuery()
+                .select(Consume::getIdCard)
+                .groupBy(Consume::getIdCard)
+                .between(Consume::getConsumeTime, firstMonthDay, lastMonthDay)
+        );
+        ArrayList<ConsumeTotalMoneyDto> dtos = new ArrayList<>();
+        if (ObjectUtils.isNotEmpty(list1) && list1.size() > 0) {
+            for (Consume consume : list1) {
+                if (ObjectUtils.isNotEmpty(consume)) {
+                    String idCard = consume.getIdCard();
+                    ConsumeTotalMoneyDto consumeTotalMoneyDto = new ConsumeTotalMoneyDto();
+                    NewSchooluser byId = newSchooluserService.getById(idCard);
+                    if (ObjectUtils.isNotEmpty(byId)) {
+                        consumeTotalMoneyDto.setProvince(byId.getProvince());
+                    }
+                    Integer totalMoney = 0;
+                    List<Consume> consumeList = this.list(Wrappers.<Consume>lambdaQuery()
+                            .eq(Consume::getIdCard, idCard)
+                            .between(Consume::getConsumeTime, firstMonthDay, lastMonthDay)
+                    );
+                    if (ObjectUtils.isNotEmpty(consumeList) && consumeList.size() > 0) {
+                        for (Consume consume1 : consumeList) {
+                            String consumeAmount = consume1.getConsumeAmount();
+                            int money = Integer.parseInt(consumeAmount);
+                            totalMoney = totalMoney + money;
+                        }
+                    }
+                    consumeTotalMoneyDto.setTotalMoney(totalMoney);
+                    dtos.add(consumeTotalMoneyDto);
+                }
+            }
+        }
+
+        ArrayList<ConsumeTotalMoneyDto> consumeTotalMoneyDtos = new ArrayList<>();
+
+//      获取所有省份
+        List<Province> list = provinceService.list();
+
+        if (list.size() > 0 && ObjectUtils.isNotEmpty(list)) {
+            for (Province province : list) {
+                ConsumeTotalMoneyDto consumeTotalMoneyDto = new ConsumeTotalMoneyDto();
+//                省份
+                String provinceName = province.getProvinceName();
+                consumeTotalMoneyDto.setProvince(provinceName);
+//                编号
+                String provinceCode = province.getProvinceCode();
+//                获取每个省份的学生
+
+                Integer totalMoney = 0;
+                for (ConsumeTotalMoneyDto dto : dtos) {
+                    String province1 = dto.getProvince();
+                    if (provinceCode.equals(province1)) {
+                        Integer totalMoney1 = dto.getTotalMoney();
+                        totalMoney = totalMoney + totalMoney1;
+                    }
+                }
+                consumeTotalMoneyDto.setTotalMoney(totalMoney);
+                consumeTotalMoneyDtos.add(consumeTotalMoneyDto);
+            }
+        }
+        String jsonStr = null;
+        try {
+            jsonStr = objectMapper.writeValueAsString(consumeTotalMoneyDtos);	//areaList序列化为json字符串
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+        jedisUtil.setnx("consumeProvinceRanking", jsonStr);
+
+        return BaseResponse.ok(StatusEnum.SUCCESS, consumeTotalMoneyDtos);
+    }
+
+
+
+
+    @Override
     public BaseResponse personConsum(String id, String startTime, String endTime) {
+        ObjectMapper objectMapper = new ObjectMapper();
+        //        redis 缓存
+        if (jedisUtil.exists("personConsum"+id+startTime+endTime)) {
+            String address = jedisUtil.get("personConsum"+id+startTime+endTime);
+            List<PersonConsumDto> list = com.alibaba.fastjson2.JSON.parseArray(address, PersonConsumDto.class);
+            return BaseResponse.ok(StatusEnum.SUCCESS, list);
+        }
 //        默认本月,从1号到下一个月1号
+        NewSchooluser byId = newSchooluserService.getById(id);
+        if (ObjectUtils.isEmpty(byId)) {
+            return BaseResponse.error(StatusEnum.FAIL, "学生不存在");
+        }
         DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         LocalDateTime now = LocalDateTime.now();
         if (ObjectUtils.isEmpty(startTime)) {
@@ -223,7 +355,9 @@ public class ConsumeServicelmpl extends ServiceImpl<ConsumeMapper, Consume> impl
         Double hotWaterMoney = 0.0;
         for (HotWater hotWater : list1) {
             double aDouble = Double.parseDouble(hotWater.getHotwaterAmount());
-            hotWaterMoney = hotWaterMoney + aDouble;
+            BigDecimal b1 = new BigDecimal(Double.toString(hotWaterMoney));
+            BigDecimal b2 = new BigDecimal(Double.toString(aDouble));
+            hotWaterMoney = b1.add(b2).doubleValue();
         }
         personConsumDto2.setName("热水");
         personConsumDto2.setMoney(hotWaterMoney);
@@ -315,6 +449,15 @@ public class ConsumeServicelmpl extends ServiceImpl<ConsumeMapper, Consume> impl
         dtos.add(personConsumDto);
         dtos.add(personConsumDto2);
         dtos.add(personConsumDto1);
+
+        String jsonStr = null;
+        try {
+            jsonStr = objectMapper.writeValueAsString(dtos);	//areaList序列化为json字符串
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+        jedisUtil.setnx("personConsum"+id+startTime+endTime, jsonStr);
+
         return BaseResponse.ok(StatusEnum.SUCCESS, dtos);
     }
 
@@ -361,7 +504,6 @@ public class ConsumeServicelmpl extends ServiceImpl<ConsumeMapper, Consume> impl
         ResponseEntity<String> forEntity = restTemplate.getForEntity(userInfoUrl, String.class);
         JSONObject jsonObj = JSON.parseObject(forEntity.getBody());
         String data = jsonObj.getString("data");
-        System.out.println("data = " + data);
         JSONObject jsonData = JSONObject.parseObject(data);
         if (jsonData.getJSONArray("list") != null) {
             JSONArray list = jsonData.getJSONArray("list");
@@ -399,7 +541,7 @@ public class ConsumeServicelmpl extends ServiceImpl<ConsumeMapper, Consume> impl
             //计数器递增
             page += 1;
         } else {
-            page -= 1;
+            page = 1;
         }
 
         return null;
@@ -421,31 +563,21 @@ public class ConsumeServicelmpl extends ServiceImpl<ConsumeMapper, Consume> impl
     }
 
 
-    public static Date getFirstMonthDay(Date dt) {
-        //获取当前月第一天:
-        Calendar ca = Calendar.getInstance();
-        ca.setTime(dt);
-        // ca.add(Calendar.MONTH, 0); 此方法可以获取前n月或后n月
-        ca.set(Calendar.DAY_OF_MONTH, 1);//设置为1号,当前日期既为本月第一天
-        ca.set(Calendar.HOUR, 0);
-        ca.set(Calendar.MINUTE, 0);
-        ca.set(Calendar.SECOND, 0);
-
-        return ca.getTime();
+    public static String getFirstMonthDay() {
+        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime start = now.minusDays(30).withHour(0).withMinute(0).withSecond(0);
+        return start.format(pattern);
     }
 
 
-    public static Date getLastMonthDay(Date dt) {
-        //获取当前月最后一天
-        Calendar ca = Calendar.getInstance();
-        ca.setTime(dt);
-        ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
-        ca.set(Calendar.HOUR, 23);
-        ca.set(Calendar.MINUTE, 59);
-        ca.set(Calendar.SECOND, 59);
-
-        return ca.getTime();
+    public static String getLastMonthDay() {
+        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime end = now.withHour(23).withMinute(59).withSecond(59);
+        return end.format(pattern);
     }
 
 
+
 }

+ 11 - 0
src/main/java/com/chuanghai/student_portrait/service/impl/CoordServiceImpl.java

@@ -0,0 +1,11 @@
+package com.chuanghai.student_portrait.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chuanghai.student_portrait.entity.Coord;
+import com.chuanghai.student_portrait.mapper.CoordMapper;
+import com.chuanghai.student_portrait.service.CoordService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class CoordServiceImpl extends ServiceImpl<CoordMapper, Coord> implements CoordService {
+}

+ 0 - 2
src/main/java/com/chuanghai/student_portrait/service/impl/DormServiceImpl.java

@@ -49,7 +49,6 @@ public class DormServiceImpl extends ServiceImpl<DormMapper, Dorm> implements Do
         List<Map<String, String>> doms = this.getDoms();
         ArrayList<Dorm> dorms = new ArrayList<>();
         for (Map<String, String> dom : doms) {
-//            System.out.println("dom = " + dom);
             String school = dom.get("school");
             String build = dom.get("build");
             String floors = dom.get("floors");
@@ -118,7 +117,6 @@ public class DormServiceImpl extends ServiceImpl<DormMapper, Dorm> implements Do
             for (Object datum : data) {
                 Map<String, String> map = mapper.readValue(datum.toString(), new TypeReference<Map<String, String>>() {
                 });
-//            System.out.println("map = " + map);
                 maps.add(map);
             }
         }

+ 1 - 1
src/main/java/com/chuanghai/student_portrait/service/impl/ElectricityServiceImpl.java

@@ -68,7 +68,7 @@ public class ElectricityServiceImpl extends ServiceImpl<ElectricityMapper, Elect
 
 
 
-    @Scheduled(cron = "0/30 0 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 1 * ? ")
+    @Scheduled(cron = "0/20 * * 1 * ? ")
     public void autoQueryOrder() {
         Page<Dorm> dormPage = dormService.page(new Page<Dorm>(page, size));
         List<Dorm> records = dormPage.getRecords();

+ 129 - 18
src/main/java/com/chuanghai/student_portrait/service/impl/FaceDiscernServiceImpl.java

@@ -10,6 +10,8 @@ import com.chuanghai.student_portrait.config.ChannelDetailInfos;
 import com.chuanghai.student_portrait.config.FacePassRecord;
 import com.chuanghai.student_portrait.entity.*;
 import com.chuanghai.student_portrait.entity.dto.AccessCountDto;
+import com.chuanghai.student_portrait.entity.dto.ConsumeTotalMoneyDto;
+import com.chuanghai.student_portrait.entity.dto.FaceDisernDto;
 import com.chuanghai.student_portrait.entity.dto.PersonalTrackDto;
 import com.chuanghai.student_portrait.mapper.FaceDiscernMapper;
 import com.chuanghai.student_portrait.response.BaseResponse;
@@ -17,9 +19,11 @@ import com.chuanghai.student_portrait.response.enums.StatusEnum;
 import com.chuanghai.student_portrait.service.*;
 import com.chuanghai.student_portrait.utils.*;
 import com.chuanghai.student_portrait.utils.vo.UniviewVO;
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import net.sf.jsqlparser.statement.select.Select;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.impl.client.HttpClients;
 import org.apache.http.util.EntityUtils;
@@ -65,8 +69,22 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
     @Autowired
     StallService stallService;
 
+    @Autowired
+    CoordService coordService;
+
+    @Autowired
+    JedisUtil jedisUtil;
+
     @Override
     public BaseResponse shoolAccessCount(String startTime, String endTime) {
+        ObjectMapper objectMapper = new ObjectMapper();
+        //        redis 缓存
+        if (jedisUtil.exists("shoolAccessCount")) {
+            String count = jedisUtil.get("shoolAccessCount");
+            List<AccessCountDto> list = JSON.parseArray(count,AccessCountDto.class);
+            return BaseResponse.ok(StatusEnum.SUCCESS, list);
+        }
+
         DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         LocalDateTime now = LocalDateTime.now();
 //        为空,默认为昨天的
@@ -94,7 +112,6 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
                 int dorm = accessService.list(Wrappers.<Access>lambdaQuery().between(Access::getAccessTime, startTime, stop).like(Access::getAccessAddress, "宿舍")).size();
 
                 int count = size + dorm;
-                System.out.println("count = " + count);
 
                 AccessCountDto accessCountDto = new AccessCountDto();
                 accessCountDto.setAddress("宿舍");
@@ -118,25 +135,43 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
             }
         }
 
+        String jsonStr = null;
+        try {
+            jsonStr = objectMapper.writeValueAsString(accessCountDtos);	//areaList序列化为json字符串
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+        jedisUtil.setnx("shoolAccessCount", jsonStr);
+
         return BaseResponse.ok(StatusEnum.SUCCESS, accessCountDtos);
     }
 
 
     @Override
     public BaseResponse unitAccessCount(String startTime, String endTime, String id) {
+        ObjectMapper objectMapper = new ObjectMapper();
+        //        redis 缓存
+        if (jedisUtil.exists("unitAccessCount"+id)) {
+            String address = jedisUtil.get("unitAccessCount"+id);
+            List<AccessCountDto> list = JSON.parseArray(address, AccessCountDto.class);
+            return BaseResponse.ok(StatusEnum.SUCCESS, list);
+        }
+        NewSchooluser byId = newSchooluserService.getById(id);
+        if (ObjectUtils.isEmpty(byId)) {
+            return BaseResponse.error(StatusEnum.FAIL, "该学生不存在");
+        }
         DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         LocalDateTime now = LocalDateTime.now();
 //        为空,默认为上个月的
         if (ObjectUtils.isEmpty(startTime)) {
-            LocalDateTime start = now.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0);
-            startTime = start.minusMonths(1).format(pattern);
+            LocalDateTime start = now.minusDays(30).withHour(0).withMinute(0).withSecond(0);
+            startTime = start.format(pattern);
         }
         if (ObjectUtils.isEmpty(endTime)) {
-            LocalDateTime end = now.withDayOfMonth(1).withHour(23).withMinute(59).withSecond(59);
-            endTime = end.minusDays(1).format(pattern);
+            LocalDateTime end = now.withHour(23).withMinute(59).withSecond(59);
+            endTime = end.format(pattern);
         }
 
-
         ArrayList<AccessCountDto> accessCountDtos = new ArrayList<>();
 
         LocalDateTime start = LocalDateTime.parse(startTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
@@ -176,16 +211,32 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
                 break;
             }
         }
-
+        String jsonStr = null;
+        try {
+            jsonStr = objectMapper.writeValueAsString(accessCountDtos);	//areaList序列化为json字符串
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+        jedisUtil.setnx("unitAccessCount"+id, jsonStr);
         return BaseResponse.ok(StatusEnum.SUCCESS, accessCountDtos);
     }
 
     @Override
     public BaseResponse personalTrack(String id) {
+        ObjectMapper objectMapper = new ObjectMapper();
+        //        redis 缓存
+        if (jedisUtil.exists("personalTrack"+id)) {
+            String address = jedisUtil.get("personalTrack"+id);
+            List<PersonalTrackDto> list = JSON.parseArray(address, PersonalTrackDto.class);
+            return BaseResponse.ok(StatusEnum.SUCCESS, list);
+        }
         if (ObjectUtils.isEmpty(id)) {
             return BaseResponse.error(StatusEnum.FAIL, "参数异常");
         }
-
+        NewSchooluser byId = newSchooluserService.getById(id);
+        if (ObjectUtils.isEmpty(byId)) {
+            return BaseResponse.error(StatusEnum.FAIL, "该学生不存在");
+        }
         DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         LocalDateTime now = LocalDateTime.now();
 //        前七天
@@ -206,15 +257,22 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
                 String pictureScene = faceDiscern.getPictureScene();
                 if (ObjectUtils.isNotEmpty(pictureScene)) {
                     if ("U".equals(faceDiscern.getFacediscernType())) {
-                        int e = pictureScene.indexOf("e");
-                        String substring = pictureScene.substring(e + 1);
-                        pictureScene="http://172.16.20.69:80/"+substring;
+                        pictureScene="https://chtech.ncjti.edu.cn/studentsportrait/dev-img/"+pictureScene;
                     }
                     dto.setImage(pictureScene);
                 }
 //                事件
                 String facediscernAddress = faceDiscern.getFacediscernAddress();
                 dto.setAffair(facediscernAddress);
+
+                Coord coord = coordService.getOne(Wrappers.<Coord>lambdaQuery().eq(Coord::getBuildingName, facediscernAddress));
+                if (ObjectUtils.isNotEmpty(coord)) {
+                    String longitude = coord.getLongitude();
+                    String latitude = coord.getLatitude();
+                    dto.setLongitude(longitude);
+                    dto.setLatitude(latitude);
+                }
+
                 personalTrackDtos.add(dto);
             }
         }
@@ -228,6 +286,15 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
                 String accessAddress = access.getAccessAddress();
                 dto.setAffair(accessEvent + accessAddress);
                 dto.setName("扫码");
+
+                Coord coord = coordService.getOne(Wrappers.<Coord>lambdaQuery().eq(Coord::getBuildingName, access.getAccessAddress()));
+                if (ObjectUtils.isNotEmpty(coord)) {
+                    String longitude = coord.getLongitude();
+                    String latitude = coord.getLatitude();
+                    dto.setLongitude(longitude);
+                    dto.setLatitude(latitude);
+                }
+
                 personalTrackDtos.add(dto);
             }
         }
@@ -240,6 +307,18 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
                 dto.setDateTime(hotwaterTime);
                 dto.setAffair(hotwaterAddress);
                 dto.setName(hotWater.getHotwaterEvent());
+
+
+                String[] split = hotwaterAddress.split("-");
+                String address=split[0]+ "栋";
+                Coord coord = coordService.getOne(Wrappers.<Coord>lambdaQuery().eq(Coord::getBuildingName, address));
+                if (ObjectUtils.isNotEmpty(coord)) {
+                    String longitude = coord.getLongitude();
+                    String latitude = coord.getLatitude();
+                    dto.setLongitude(longitude);
+                    dto.setLatitude(latitude);
+                }
+
                 personalTrackDtos.add(dto);
             }
         }
@@ -270,20 +349,55 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
                 } else if ( localDateTime.isBefore(localDateTime5)) {
                     dto.setName("夜宵");
                 }
+
+                Coord coord = coordService.getOne(Wrappers.<Coord>lambdaQuery().eq(Coord::getBuildingName, "食堂"));
+                if (ObjectUtils.isNotEmpty(coord)) {
+                    String longitude = coord.getLongitude();
+                    String latitude = coord.getLatitude();
+                    dto.setLongitude(longitude);
+                    dto.setLatitude(latitude);
+                }
                 personalTrackDtos.add(dto);
             }
         }
         Collections.sort(personalTrackDtos, Comparator.comparing((h) -> {
             return h.getDateTime();
         }));
+        String jsonStr = null;
+        try {
+            jsonStr = objectMapper.writeValueAsString(personalTrackDtos);	//areaList序列化为json字符串
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+        jedisUtil.setnx("personalTrack"+id, jsonStr);
 
-        System.out.println("consumeList.size() = " + consumeList.size());
         return BaseResponse.ok(StatusEnum.SUCCESS, personalTrackDtos);
     }
 
 
 
 
+    @Override
+    public List<FaceDisernDto> getStudentCount(){
+        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDateTime now = LocalDateTime.now();
+//        前七天
+        String startTime = now.minusDays(7).withHour(0).withMinute(0).withSecond(0).format(pattern);
+
+//        今天凌晨
+        String endTime = now.withHour(0).withMinute(0).withSecond(0).format(pattern);
+
+        List<FaceDisernDto> dtoList = baseMapper.getStudentCount(startTime,endTime);
+        ArrayList<FaceDisernDto> faceDisernDtos = new ArrayList<>();
+        for (int i = 0; i <= 9; i++) {
+            faceDisernDtos.add(dtoList.get(i));
+        }
+        return faceDisernDtos;
+    }
+
+
+
+
     //用于记录查询百胜门禁机的页数
     private Integer page = 15;
     //百胜云平台接口的 api_id,用于请求接口
@@ -325,8 +439,6 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
             JSONObject jsonObj = JSON.parseObject(responseEntity.getBody());
             String data = jsonObj.getString("data");
 
-//            System.out.println("data = " + data);
-
             JSONObject dataJson = JSON.parseObject(data);
             // String total_page = dataJson.getString("total_page");
             JSONObject jsonData = JSONObject.parseObject(data);
@@ -367,7 +479,6 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
                             }
                         }
                     } catch (Exception e) {
-                        LogUtils.logError(e);
                         e.printStackTrace();
                     }
                 });
@@ -529,14 +640,14 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
                     faceDiscern.setShooluserId(schooluser.getId());
                     if (!chackFaceActive(faceDiscern.getShooluserId(), DateUtils.dateToString(univiewVO.getActiveTime()))) {
                         String fileNameWithPath = FileUtil.getFileNameWithPath() + ".jpg";
-                        FileUtil.makeDirs(fileNameWithPath, "/home/image");
-                        String imgFilePath = "/home/image" + fileNameWithPath;
+                        FileUtil.makeDirs(fileNameWithPath, "/home/nginx/html/image");
+                        String imgFilePath = "/home/nginx/html/image/" + fileNameWithPath;
                         try {
                             Base64Utils.GenerateImage(dataBase, imgFilePath);
                         } catch (IOException e) {
                             throw new RuntimeException(e);
                         }
-                        faceDiscern.setPictureScene(imgFilePath);
+                        faceDiscern.setPictureScene(fileNameWithPath);
 
                         this.save(faceDiscern);
                     }

+ 128 - 113
src/main/java/com/chuanghai/student_portrait/service/impl/ForewarningServiceImpl.java

@@ -10,6 +10,7 @@ import com.chuanghai.student_portrait.response.BaseResponse;
 import com.chuanghai.student_portrait.response.enums.StatusEnum;
 import com.chuanghai.student_portrait.service.*;
 import com.chuanghai.student_portrait.utils.DateUtils;
+import com.chuanghai.student_portrait.utils.LogUtils;
 import jdk.net.SocketFlow;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
@@ -21,10 +22,7 @@ import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.SimpleTimeZone;
+import java.util.*;
 
 @Service
 public class ForewarningServiceImpl extends ServiceImpl<ForewarningMapper, Forewarning> implements ForewarningService {
@@ -52,6 +50,7 @@ public class ForewarningServiceImpl extends ServiceImpl<ForewarningMapper, Forew
 
     @Override
     public BaseResponse getgetForewarning(String keyWord, String startTime, String endTime, Integer page, Integer size) {
+
 //        参数校验
         if (ObjectUtils.isEmpty(startTime)) {
             startTime = getStartTime();
@@ -83,14 +82,12 @@ public class ForewarningServiceImpl extends ServiceImpl<ForewarningMapper, Forew
     }
 
 
-
-
     /**
      * 人脸
      *
      * @return
      */
-    @Scheduled(cron = "0 6 23 ? * ? ")
+    @Scheduled(cron = "0 6 21,22,23 ? * ? ")
     public void addForewarning() {
         DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         LocalDateTime now = LocalDateTime.now();
@@ -115,40 +112,40 @@ public class ForewarningServiceImpl extends ServiceImpl<ForewarningMapper, Forew
                         .eq(FaceDiscern::getShooluserId, faceDiscern.getShooluserId())
                         .orderByDesc(FaceDiscern::getFacediscernTime)
                 );
-                if (ObjectUtils.isNotEmpty(faceDiscerns1)&&faceDiscerns1.size()>0) {
-                FaceDiscern faceDiscern1 = faceDiscerns1.get(0);
-                if ("北校门出口".equals(faceDiscern1.getFacediscernAddress())) {
-                    Forewarning forewarning = new Forewarning();
+                if (ObjectUtils.isNotEmpty(faceDiscerns1) && faceDiscerns1.size() > 0) {
+                    FaceDiscern faceDiscern1 = faceDiscerns1.get(0);
+                    if ("北校门出口".equals(faceDiscern1.getFacediscernAddress())) {
+                        Forewarning forewarning = new Forewarning();
 //                预警原因
-                    forewarning.setWarningReason("出校未归");
+                        forewarning.setWarningReason("出校未归");
 //                姓名
-                    String name = faceDiscern1.getName();
-                    forewarning.setName(faceDiscern1.getName());
+                        String name = faceDiscern1.getName();
+                        forewarning.setName(faceDiscern1.getName());
 //                时间
-                    Date date = faceDiscern1.getFacediscernTime();
-                    forewarning.setDateTime(faceDiscern1.getFacediscernTime());
+                        Date date = faceDiscern1.getFacediscernTime();
+                        forewarning.setDateTime(faceDiscern1.getFacediscernTime());
 
-                    String shooluserId = faceDiscern1.getShooluserId();
-                    NewSchooluser newSchooluser = newSchooluserService.getOne(Wrappers.<NewSchooluser>lambdaQuery().eq(NewSchooluser::getId, shooluserId));
+                        String shooluserId = faceDiscern1.getShooluserId();
+                        NewSchooluser newSchooluser = newSchooluserService.getOne(Wrappers.<NewSchooluser>lambdaQuery().eq(NewSchooluser::getId, shooluserId));
 //               专业名称
-                    String profession = newSchooluser.getProfession();
-                    forewarning.setProfessionName(profession);
+                        String profession = newSchooluser.getProfession();
+                        forewarning.setProfessionName(profession);
 //                学号
-                    String studentId = newSchooluser.getStudentId();
-                    forewarning.setStudentId(studentId);
+                        String studentId = newSchooluser.getStudentId();
+                        forewarning.setStudentId(studentId);
 //              班级
-                    String clazz = newSchooluser.getClazz();
-                    forewarning.setClazz(clazz);
+                        String clazz = newSchooluser.getClazz();
+                        forewarning.setClazz(clazz);
 
-                    forewarning.setSchooluserId(shooluserId);
-                    forewarning.setRemark("异常");
+                        forewarning.setSchooluserId(shooluserId);
+                        forewarning.setRemark("异常");
 //                判断该数据是否已添加
-                    Boolean exists = queryForewarningExists(name, date, "出校未归");
-                    if (!exists) {
-                        this.save(forewarning);
+                        Boolean exists = queryForewarningExists(name, date, "出校未归");
+                        if (!exists) {
+                            this.save(forewarning);
+                        }
                     }
                 }
-                }
             }
         }
 
@@ -160,7 +157,7 @@ public class ForewarningServiceImpl extends ServiceImpl<ForewarningMapper, Forew
      *
      * @return
      */
-    @Scheduled(cron = "0 8 23 ? * ? ")
+    @Scheduled(cron = "0 8 21,22,23 ? * ? ")
     public void saveForewarningAccess() {
         DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         LocalDateTime now = LocalDateTime.now();
@@ -186,94 +183,44 @@ public class ForewarningServiceImpl extends ServiceImpl<ForewarningMapper, Forew
                         .eq(Access::getCardNumber, cardNumber)
                         .orderByDesc(Access::getAccessTime)
                 );
-                if (ObjectUtils.isNotEmpty(access)&&accesses.size()>0) {
+                if (ObjectUtils.isNotEmpty(access) && accesses.size() > 0) {
 
 
-                Access access1 = accesses.get(0);
-                if ("北校门出口".equals(access1.getAccessEvent())) {
-                    NewSchooluser newSchooluser = newSchooluserService.getOne(Wrappers.<NewSchooluser>lambdaQuery().eq(NewSchooluser::getId, cardNumber));
-                    Forewarning forewarning = new Forewarning();
+                    Access access1 = accesses.get(0);
+                    if ("北校门出口".equals(access1.getAccessEvent())) {
+                        NewSchooluser newSchooluser = newSchooluserService.getOne(Wrappers.<NewSchooluser>lambdaQuery().eq(NewSchooluser::getId, cardNumber));
+                        Forewarning forewarning = new Forewarning();
 //                预警原因
-                    forewarning.setWarningReason("出校未归");
+                        forewarning.setWarningReason("出校未归");
 //                姓名
-                    String name = newSchooluser.getName();
-                    forewarning.setName(name);
+                        String name = newSchooluser.getName();
+                        forewarning.setName(name);
 //                时间
-                    Date date = access1.getAccessTime();
-                    forewarning.setDateTime(date);
+                        Date date = access1.getAccessTime();
+                        forewarning.setDateTime(date);
 //               专业名称
-                    String profession = newSchooluser.getProfession();
-                    forewarning.setProfessionName(profession);
+                        String profession = newSchooluser.getProfession();
+                        forewarning.setProfessionName(profession);
 //                学号
-                    String studentId = newSchooluser.getStudentId();
-                    forewarning.setStudentId(studentId);
+                        String studentId = newSchooluser.getStudentId();
+                        forewarning.setStudentId(studentId);
 //              班级
-                    String clazz = newSchooluser.getClazz();
-                    forewarning.setClazz(clazz);
+                        String clazz = newSchooluser.getClazz();
+                        forewarning.setClazz(clazz);
 
-                    forewarning.setSchooluserId(cardNumber);
-                    forewarning.setRemark("异常");
+                        forewarning.setSchooluserId(cardNumber);
+                        forewarning.setRemark("异常");
 
 //                判断该数据是否已添加
-                    Boolean exists = queryForewarningExists(name, date, "出校未归");
-                    if (!exists) {
-                        this.save(forewarning);
+                        Boolean exists = queryForewarningExists(name, date, "出校未归");
+                        if (!exists) {
+                            this.save(forewarning);
+                        }
                     }
                 }
-                }
-            }
-        }
-
-    }
-
-
-    /**
-     * 热水消费预警
-     *
-     * @return
-     */
-    @Scheduled(cron = "0 10 23 ? * ? ")
-    public void saveForewarningHotWater() {
-        String startTime = getStartTime();
-        String endTime = getEndTime();
-
-        List<HotWater> hotWaterList = hotWaterService.list(Wrappers.<HotWater>lambdaQuery()
-                .between(HotWater::getHotwaterTime, startTime, endTime)
-                .ge(HotWater::getHotwaterAmount, 5)
-        );
-        ArrayList<Forewarning> forewarnings = new ArrayList<>();
-        if (ObjectUtils.isNotEmpty(hotWaterList) && hotWaterList.size() > 0) {
-
-            for (HotWater hotWater : hotWaterList) {
-                String cardNumber = hotWater.getCardNumber();
-                NewSchooluser schooluser = newSchooluserService.getById(cardNumber);
-//             名字
-                String name = schooluser.getName();
-//            学号
-                String studentId = schooluser.getStudentId();
-//            专业
-                String profession = schooluser.getProfession();
-//            班级
-                String clazz = schooluser.getClazz();
-//            时间
-                Date hotwaterTime = hotWater.getHotwaterTime();
-                Forewarning forewarning = new Forewarning();
-                forewarning.setName(name);
-                forewarning.setStudentId(studentId);
-                forewarning.setProfessionName(profession);
-                forewarning.setClazz(clazz);
-                forewarning.setDateTime(hotwaterTime);
-                forewarning.setWarningReason("热水消费异常");
-                forewarning.setRemark(hotWater.getHotwaterAmount()+"元");
-                forewarning.setSchooluserId(cardNumber);
-                Boolean exists = queryForewarningExists(name, hotwaterTime, "热水消费异常");
-                if (!exists) {
-                    this.save(forewarning);
-                }
             }
         }
 
-
     }
 
 
@@ -282,7 +229,7 @@ public class ForewarningServiceImpl extends ServiceImpl<ForewarningMapper, Forew
      *
      * @return
      */
-    @Scheduled(cron = "0 12 23 ? * ? ")
+    @Scheduled(cron = "0 12 21,22,23 * * ? ")
     public void saveForewarningConsume() {
         String startTime = getStartTime();
         String endTime = getEndTime();
@@ -313,15 +260,15 @@ public class ForewarningServiceImpl extends ServiceImpl<ForewarningMapper, Forew
                 forewarning.setClazz(clazz);
                 forewarning.setDateTime(consumeTime);
                 forewarning.setWarningReason("食堂消费过高");
-                forewarning.setRemark(consume.getConsumeAmount()+"元");
+                forewarning.setRemark(consume.getConsumeAmount() + "元");
                 forewarning.setSchooluserId(schoolId);
                 Boolean exists = queryForewarningExists(name, consumeTime, "食堂消费过高");
                 if (!exists) {
-                   this.save(forewarning);
+                    this.save(forewarning);
                 }
             }
         }
-
+        LogUtils.logInfo(new Date());
     }
 
     /**
@@ -329,7 +276,7 @@ public class ForewarningServiceImpl extends ServiceImpl<ForewarningMapper, Forew
      *
      * @return
      */
-    @Scheduled(cron = "0 14 23 ? * ? ")
+    @Scheduled(cron = "0 14 21,22,23 ? * ? ")
     public void saveForewarningDormAccess() {
         String startTime = getStartTime();
         String endTime = getEndTime();
@@ -343,7 +290,7 @@ public class ForewarningServiceImpl extends ServiceImpl<ForewarningMapper, Forew
         ArrayList<Forewarning> forewarnings = new ArrayList<>();
 //        人脸部分
         List<FaceDiscern> faceDiscerns = faceDiscernService.list(Wrappers.<FaceDiscern>lambdaQuery()
-                .between(FaceDiscern::getFacediscernTime,  dateTime, endTime)
+                .between(FaceDiscern::getFacediscernTime, dateTime, endTime)
                 .like(FaceDiscern::getFacediscernAddress, "学生")
         );
         if (ObjectUtils.isNotEmpty(forewarnings) && forewarnings.size() > 0) {
@@ -417,7 +364,8 @@ public class ForewarningServiceImpl extends ServiceImpl<ForewarningMapper, Forew
 
     /**
      * 冷水消费预警
-     *一个月一次
+     * 一个月一次
+     *
      * @return
      */
     @Scheduled(cron = "0 20 23 1 * ? ")
@@ -453,7 +401,7 @@ public class ForewarningServiceImpl extends ServiceImpl<ForewarningMapper, Forew
             forewarning.setDateTime(date1);
             forewarning.setWarningReason("冷水消费异常");
 
-            forewarning.setRemark(coldWater.getTotalMoney()+"元");
+            forewarning.setRemark(coldWater.getTotalMoney() + "元");
             Boolean exists = queryForewarningExists(dom, date1, "冷水消费异常");
             if (!exists) {
                 this.save(forewarning);
@@ -464,7 +412,8 @@ public class ForewarningServiceImpl extends ServiceImpl<ForewarningMapper, Forew
 
     /**
      * 电费消费预警
-     *一个月一次
+     * 一个月一次
+     *
      * @return
      */
     @Scheduled(cron = "0 25 23 1 * ? ")
@@ -497,7 +446,7 @@ public class ForewarningServiceImpl extends ServiceImpl<ForewarningMapper, Forew
             }
             forewarning.setDateTime(date1);
             forewarning.setWarningReason("电费消费异常");
-            forewarning.setRemark(electricity.getTotalMoney()+"元");
+            forewarning.setRemark(electricity.getTotalMoney() + "元");
             Boolean exists = queryForewarningExists(dom, date1, "电费消费异常");
             if (!exists) {
                 this.save(forewarning);
@@ -507,6 +456,67 @@ public class ForewarningServiceImpl extends ServiceImpl<ForewarningMapper, Forew
     }
 
     /**
+     * 热水消费过低
+     *
+     * @return
+     */
+    @Scheduled(cron = "0 30 23 2,3 * ? ")
+    public void saveForewarningHotWater() {
+
+        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDateTime now = LocalDateTime.now();
+//        上个月的
+        LocalDateTime start = now.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0);
+        String startTime = start.minusMonths(1).format(pattern);
+
+        LocalDateTime end = now.withDayOfMonth(1).withHour(23).withMinute(59).withSecond(59);
+        String endTime = end.minusDays(1).format(pattern);
+
+        String dateTiem = now.withDayOfMonth(1).withHour(1).withMinute(1).withSecond(1).minusMonths(1).format(pattern);
+
+
+        Calendar calendar = Calendar.getInstance();
+//        当前年份
+        int year = calendar.get(Calendar.YEAR);
+//        当前月份
+        int month = calendar.get(Calendar.MONTH) + 1;
+//        获取当前年份,和月份,当月份为7,则当前年份减4,否则年份减5
+        Integer grade = null;
+        if (month >= 7) {
+            grade = year - 3;
+        } else {
+            grade = year - 4;
+        }
+        List<NewSchooluser> newSchooluserList = newSchooluserService.list(Wrappers.<NewSchooluser>lambdaQuery().ge(NewSchooluser::getGrade, grade));
+        List<HotWater> hotWaterList = hotWaterService.list(Wrappers.<HotWater>lambdaQuery().between(HotWater::getHotwaterTime, startTime, endTime).select(HotWater::getCardNumber).groupBy(HotWater::getCardNumber));
+        for (NewSchooluser newSchooluser : newSchooluserList) {
+            String id = newSchooluser.getId();
+            List<HotWater> list = hotWaterService.list(Wrappers.<HotWater>lambdaQuery().between(HotWater::getHotwaterTime, startTime, endTime).eq(HotWater::getCardNumber, id));
+            if (ObjectUtils.isEmpty(list) && list.size() <= 0) {
+                Forewarning forewarning = new Forewarning();
+                forewarning.setName(newSchooluser.getName());
+                forewarning.setStudentId(newSchooluser.getStudentId());
+                forewarning.setProfessionName(newSchooluser.getProfession());
+                forewarning.setClazz(newSchooluser.getClazz());
+                Date date = null;
+                try {
+                    date = DateUtils.stringToDate(dateTiem);
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+                forewarning.setDateTime(date);
+                forewarning.setWarningReason("热水月消费过低");
+                forewarning.setRemark(0 + "元");
+                forewarning.setSchooluserId(id);
+                Boolean exists = queryForewarningExists(newSchooluser.getName(), date, "热水月消费过低");
+                if (!exists) {
+                    this.save(forewarning);
+                }
+            }
+        }
+    }
+
+    /**
      * 获取前一天开始的时间
      *
      * @return
@@ -550,4 +560,9 @@ public class ForewarningServiceImpl extends ServiceImpl<ForewarningMapper, Forew
 
     }
 
+    public static void main(String[] args) {
+        Date date = new Date();
+        LogUtils.logInfo("时间:"+date);
+    }
+
 }

+ 42 - 3
src/main/java/com/chuanghai/student_portrait/service/impl/HotWaterServiceImpl.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.chuanghai.student_portrait.entity.*;
+import com.chuanghai.student_portrait.entity.dto.AccessCountDto;
 import com.chuanghai.student_portrait.entity.dto.EnergyDto;
 import com.chuanghai.student_portrait.exception.ResultValue;
 import com.chuanghai.student_portrait.mapper.HotWaterMapper;
@@ -15,7 +16,9 @@ import com.chuanghai.student_portrait.response.BaseResponse;
 import com.chuanghai.student_portrait.response.enums.StatusEnum;
 import com.chuanghai.student_portrait.service.*;
 import com.chuanghai.student_portrait.utils.DateUtils;
+import com.chuanghai.student_portrait.utils.JedisUtil;
 import com.chuanghai.student_portrait.utils.LogUtils;
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -32,6 +35,7 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.client.RestTemplate;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -53,6 +57,8 @@ public class HotWaterServiceImpl extends ServiceImpl<HotWaterMapper, HotWater> i
     @Autowired
     ColdWaterService coldWaterService;
 
+    @Autowired
+    JedisUtil jedisUtil;
 
 
 //    @Override
@@ -209,6 +215,13 @@ public class HotWaterServiceImpl extends ServiceImpl<HotWaterMapper, HotWater> i
 
     @Override
     public BaseResponse hotWaterEnergy() {
+        ObjectMapper objectMapper = new ObjectMapper();
+        //        redis 缓存
+        if (jedisUtil.exists("hotWaterEnergy")) {
+            String hotWaterEnergy= jedisUtil.get("hotWaterEnergy");
+            Map list=JSON.parseObject(hotWaterEnergy,Map.class);
+            return BaseResponse.ok(StatusEnum.SUCCESS, list);
+        }
         HashMap<Object, Object> hashMap = new HashMap<>();
         HashMap<Object, Object> map = new HashMap<>();
         HashMap<Object, Object> map2 = new HashMap<>();
@@ -308,6 +321,14 @@ public class HotWaterServiceImpl extends ServiceImpl<HotWaterMapper, HotWater> i
         map2.put("list", hotWaterEnergyDtos2);
         hashMap.put("hotWater", map);
         hashMap.put("electricityAndColdWater", map2);
+        String jsonStr = null;
+        try {
+            jsonStr = objectMapper.writeValueAsString(hashMap);	//areaList序列化为json字符串
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+        jedisUtil.setnx("hotWaterEnergy", jsonStr);
+
         return BaseResponse.ok(StatusEnum.SUCCESS, hashMap);
     }
 
@@ -342,6 +363,13 @@ public class HotWaterServiceImpl extends ServiceImpl<HotWaterMapper, HotWater> i
 
     @Override
     public BaseResponse personHotwaterEnergy(String id) {
+        ObjectMapper objectMapper = new ObjectMapper();
+        //        redis 缓存
+        if (jedisUtil.exists("personHotwaterEnergy"+id)) {
+            String hotWaterEnergy= jedisUtil.get("personHotwaterEnergy"+id);
+            Map list=JSON.parseObject(hotWaterEnergy,Map.class);
+            return BaseResponse.ok(StatusEnum.SUCCESS, list);
+        }
 //        参数校验
         if (ObjectUtils.isEmpty(id)) {
             return BaseResponse.error(StatusEnum.FAIL, "参数错误");
@@ -423,6 +451,14 @@ public class HotWaterServiceImpl extends ServiceImpl<HotWaterMapper, HotWater> i
         map2.put("list", electricityAndColdWaterDtos);
         hashMap.put("hotWater", map);
         hashMap.put("electricityAndColdWater", map2);
+
+        String jsonStr = null;
+        try {
+            jsonStr = objectMapper.writeValueAsString(hashMap);	//areaList序列化为json字符串
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+        jedisUtil.setnx("personHotwaterEnergy"+id, jsonStr);
         return BaseResponse.ok(StatusEnum.SUCCESS, hashMap);
     }
 
@@ -527,10 +563,14 @@ public class HotWaterServiceImpl extends ServiceImpl<HotWaterMapper, HotWater> i
                     hotWater.setCardNumber(stu_number);
                     hotWater.setHotwaterAddress(dom);
                     hotWater.setHotwaterEvent("洗浴用水");
-                    hotWater.setHotwaterAmount(use_amount);
+                    double v = Double.parseDouble(use_amount);
+                    BigDecimal bigDecimal = new BigDecimal(v).setScale(2, RoundingMode.HALF_UP);
+                    double newDouble = bigDecimal.doubleValue();
+                    String s = String.valueOf(newDouble);
+                    hotWater.setHotwaterAmount(s);
                     hotWater.setHotwaterTime(DateUtils.stringToDate(begin_time));
                     NewSchooluser schoolUser = querySchoolUser(stu_number);
-                    if (schoolUser.getId() != null) {
+                    if (ObjectUtils.isNotEmpty(schoolUser)) {
                         String userId = schoolUser.getId();
                         //将用户的id与cardNumber 相匹配
                         hotWater.setCardNumber(userId);
@@ -590,7 +630,6 @@ public class HotWaterServiceImpl extends ServiceImpl<HotWaterMapper, HotWater> i
      * @return
      */
     public NewSchooluser querySchoolUser(String cardNumber) {
-        //  System.out.println(cardNumber);
         QueryWrapper<NewSchooluser> wrapper = new QueryWrapper<>();
         //通过微校用户的 cardNumber idCard workNo studentNo 四者均为唯一标识查找用户是否存在数据库中
         wrapper.eq("id_card", cardNumber)

+ 60 - 7
src/main/java/com/chuanghai/student_portrait/service/impl/NewSchooluserServiceImpl.java

@@ -1,21 +1,28 @@
 package com.chuanghai.student_portrait.service.impl;
 
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.chuanghai.student_portrait.controller.GetSchoolUserController;
 import com.chuanghai.student_portrait.entity.*;
 import com.chuanghai.student_portrait.entity.dto.CapacityDto;
+import com.chuanghai.student_portrait.entity.dto.FaceDisernDto;
 import com.chuanghai.student_portrait.mapper.NewSchooluserMapper;
 import com.chuanghai.student_portrait.response.BaseResponse;
 import com.chuanghai.student_portrait.response.enums.StatusEnum;
 import com.chuanghai.student_portrait.service.AffinityScoreService;
 import com.chuanghai.student_portrait.service.CapacityService;
+import com.chuanghai.student_portrait.service.FaceDiscernService;
 import com.chuanghai.student_portrait.service.NewSchooluserService;
+import com.chuanghai.student_portrait.utils.JedisUtil;
 import com.fasterxml.jackson.core.JsonProcessingException;
-import org.apache.commons.lang3.ObjectUtils;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -43,6 +50,12 @@ public class NewSchooluserServiceImpl extends ServiceImpl<NewSchooluserMapper, N
     @Autowired
     AffinityScoreService affinityScoreService;
 
+    @Autowired
+    FaceDiscernService faceDiscernService;
+
+    @Autowired
+    JedisUtil jedisUtil;
+
     @Override
     public BaseResponse listSchoolUser(Integer page, Integer size, String keyWord) {
         if (ObjectUtils.isEmpty(page)) {
@@ -79,12 +92,25 @@ public class NewSchooluserServiceImpl extends ServiceImpl<NewSchooluserMapper, N
         return BaseResponse.ok(StatusEnum.SUCCESS, page1);
     }
 
+
+
     @Override
     public BaseResponse getSchoolUser(String id) {
+//        ObjectMapper objectMapper = new ObjectMapper();
+//        //        redis 缓存
+//        if (jedisUtil.exists("getOneSchoolUser"+id)) {
+//            String getTenStudent= jedisUtil.get("getOneSchoolUser"+id);
+//            NewSchooluser newSchooluser = JSONObject.parseObject(getTenStudent, NewSchooluser.class);
+//            return BaseResponse.ok(StatusEnum.SUCCESS, newSchooluser);
+//        }
         if (ObjectUtils.isEmpty(id)) {
-            return BaseResponse.error(StatusEnum.FAIL, "该学生不存在");
+            return BaseResponse.error(StatusEnum.FAIL, "参数异常");
         }
+
         NewSchooluser schooluser = this.getById(id);
+        if (ObjectUtils.isEmpty(schooluser)) {
+            return BaseResponse.error(StatusEnum.FAIL, "该学生不存在");
+        }
         ArrayList<String> strings = new ArrayList<>();
         strings.add(schooluser.getCardNumber());
         String headImage = null;
@@ -153,15 +179,43 @@ public class NewSchooluserServiceImpl extends ServiceImpl<NewSchooluserMapper, N
             schooluser.setAffinityScoreName(affinityScoreName);
         }
 
+//        String jsonStr = null;
+//        try {
+//            jsonStr = objectMapper.writeValueAsString(schooluser);	//areaList序列化为json字符串
+//        } catch (JsonProcessingException e) {
+//            e.printStackTrace();
+//        }
+//        jedisUtil.setnx("getOneSchoolUser"+id, jsonStr);
 
         return BaseResponse.ok(StatusEnum.SUCCESS_SELECT, schooluser);
     }
 
-    public static void main(String[] args) {
-        String[] affinityScoreName={"1","2"};
-        System.out.println("affinityScoreName = " + affinityScoreName);
-    }
+    @Override
+    public BaseResponse getTenStudent() {
+        ObjectMapper objectMapper = new ObjectMapper();
+        //        redis 缓存
+        if (jedisUtil.exists("getTenStudent")) {
+            String getTenStudent= jedisUtil.get("getTenStudent");
+            List<NewSchooluser> list = JSON.parseArray(getTenStudent, NewSchooluser.class);
+            return BaseResponse.ok(StatusEnum.SUCCESS, list);
+        }
 
+        List<FaceDisernDto> studentCount = faceDiscernService.getStudentCount();
+        ArrayList<NewSchooluser> newSchoolusers = new ArrayList<>();
+        for (FaceDisernDto faceDisernDto : studentCount) {
+            String schoolUserID = faceDisernDto.getSchoolUserID();
+            NewSchooluser byId = this.getById(schoolUserID);
+            newSchoolusers.add(byId);
+        }
+        String jsonStr = null;
+        try {
+            jsonStr = objectMapper.writeValueAsString(newSchoolusers);	//areaList序列化为json字符串
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+        jedisUtil.setnx("getTenStudent", jsonStr);
+        return BaseResponse.ok(StatusEnum.SUCCESS,newSchoolusers);
+    }
 
 
     public long getSchoolUserCount() {
@@ -190,7 +244,6 @@ public class NewSchooluserServiceImpl extends ServiceImpl<NewSchooluserMapper, N
 //    @Scheduled(cron = "0 0/1 * * * ?  ")
 //    public void save() {
 //        BaseResponse baseResponse = this.saveStudenNts(i);
-//        System.out.println("i = " + i);
 //        i = i + 1;
 //    }
 

+ 3 - 3
src/main/java/com/chuanghai/student_portrait/service/impl/OldSchooluserServiceImpl.java

@@ -42,9 +42,9 @@ public class OldSchooluserServiceImpl extends ServiceImpl<OldSchooluserMapper, O
         } else {
             i = i - 1;
         }
-        System.out.println("i = " + i);
+
         Boolean aBoolean = addNewSchooluser(i);
-        System.out.println(aBoolean);
+
     }
 
     @Override
@@ -135,7 +135,7 @@ public class OldSchooluserServiceImpl extends ServiceImpl<OldSchooluserMapper, O
             NewSchooluser newSchooluser1 = queryNewSchoolUser(newSchooluser.getIdCard());
             if (ObjectUtils.isNotEmpty(newSchooluser1)) {
                 newSchooluser.setId(newSchooluser1.getId());
-                newSchooluserService.updateById(newSchooluser);
+//                newSchooluserService.updateById(newSchooluser);
             } else {
                 newSchoolusers.add(newSchooluser);
             }

+ 74 - 0
src/main/java/com/chuanghai/student_portrait/utils/JedisUtil.java

@@ -0,0 +1,74 @@
+package com.chuanghai.student_portrait.utils;
+
+import org.springframework.context.annotation.Configuration;
+import redis.clients.jedis.Jedis;
+import redis.clients.jedis.JedisPool;
+
+import java.util.Random;
+
+@Configuration
+public class JedisUtil {
+    private JedisPool jedisPool;
+
+    public void setJedisPool(JedisPool jedisPool) {
+        this.jedisPool = jedisPool;
+    }
+
+    public JedisPool getJedisPool() {
+        return jedisPool;
+    }
+
+//    获取一个jedis连接
+    public  Jedis getJedis(){
+        //本机地址,端口号
+        Jedis jedis=new Jedis("127.0.0.1",6379);
+        //认证密码
+//        jedis.auth(" chuanghai2022");
+        return jedis;
+    }
+    //获取一个jedis连接
+//    public Jedis getJedis() {
+//        return jedisPool.getResource();
+//    }
+
+
+    //键
+
+    public boolean exists(String key) {     //查询键是否存在
+        Jedis jedis = getJedis();
+        boolean exis = jedis.exists(key);
+        jedis.close();
+        return exis;
+    }
+
+    //清除键值对
+    public long del(String... keys) {
+        Jedis jedis = getJedis();
+        long count = jedis.del(keys);
+        jedis.close();
+        return count;
+    }
+
+
+    //字符串类型
+
+    public String get(String key) {     //根据键获取值
+        Jedis jedis = getJedis();
+        String value = jedis.get(key);
+        jedis.close();
+        return value;
+    }
+
+    public long setnx(String key, String value) {   //设置键值对
+        Random rand = new Random();
+        int i = rand.nextInt(1000)+3600;
+        Jedis jedis = getJedis();
+        long num = jedis.setnx(key, value);
+        jedis.expire(key,i);
+        jedis.close();
+        return num;
+    }
+
+
+
+}

+ 0 - 8
src/main/java/com/chuanghai/student_portrait/utils/yushi/LibID.java

@@ -1,8 +0,0 @@
-package com.chuanghai.student_portrait.utils.yushi;
-
-import lombok.Data;
-
-@Data
-public class LibID {
-    private Integer LibID;
-}

+ 0 - 11
src/main/java/com/chuanghai/student_portrait/utils/yushi/SubscribePersonCondition.java

@@ -1,11 +0,0 @@
-package com.chuanghai.student_portrait.utils.yushi;
-
-import lombok.Data;
-
-import java.util.List;
-
-@Data
-public class SubscribePersonCondition {
-    private Integer LibIDNum;
-    private List<LibID> LibIDList;
-}

+ 14 - 3
src/main/resources/application.yml

@@ -4,8 +4,8 @@ server:
 
 spring:
   profiles:
-    active: dev #开发环境配置文件
-#    active: test  #测试环境配置文件
+#    active: dev #开发环境配置文件
+    active: test  #测试环境配置文件
 #    active: pro  #生产环境配置文件
   application:
     name: student_portrait
@@ -24,6 +24,17 @@ spring:
       file-size-threshold: 0
       max-file-size: 10MB
       max-request-size: 10MB
+  redis:
+    host: 127.0.0.1
+    port: 6379
+    #    password: root@123456 没有设置密码
+    database: 0
+    timeout: 20000
+  cache:
+    redis:
+      time-to-live: 20000 #设置缓存数据的过期时间
+      cache-null-values: false #是否缓存空值
+
 #logging:
 #  # 设置logback.xml位置
 #  #  config: classpath:logs/logback.xml
@@ -36,7 +47,7 @@ mybatis-plus:
     # 驼峰命名和底杠命名自动转换
     map-underscore-to-camel-case: true
     # Mybatis默认简单日志
-    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+    #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  #mybatis 的运行日志,测试时需注释
     # MyBatis 自动映射策略,通过该配置可指定 MyBatis 是否并且如何来自动映射数据表字段与对象的属性,总共有 3 种可选值:
     # AutoMappingBehavior.NONE:不启用自动映射
     # AutoMappingBehavior.PARTIAL:只对非嵌套的 resultMap 进行自动映射

+ 7 - 59
src/main/resources/log4j.properties

@@ -1,59 +1,7 @@
-#log4j \u914D\u7F6E
-#log4j\u5B9A\u4E49\u4E868\u4E2A\u7EA7\u522B\u7684log\u4F18\u5148\u7EA7\u4ECE\u9AD8\u5230\u4F4E\u4F9D\u6B21\u4E3A\uFF1AOFF\u3001FATAL\u3001ERROR\u3001WARN\u3001INFO\u3001DEBUG\u3001TRACE\u3001 ALL\u3002
-#CONSOLE\u524D\u9762\u7684DEBUG\u662F\u63A7\u5236\u53F0\u9700\u8981\u6253\u5370\u4EC0\u4E48DEBUG\u7EA7\u522B\u4EE5\u4E0A\u7684\u65E5\u5FD7\u7684\u4FE1\u606F
-#log4j.rootLogger=DEBUG, CONSOLE, ERROR, WARN, INFO, DEBUG, ALL
-log4j.rootLogger=ERROR
-#-----------------------------------------------------------------------------------------------------
-#\u8F93\u51FA\u4FE1\u606F\u5230\u63A7\u5236\u53F0CONSOLE
-log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
-log4j.appender.CONSOLE.Target=System.out
-log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
-log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
-#-----------------------------------------------------------------------------------------------------
-#\u8F93\u51FAERROR \u7EA7\u522B\u4EE5\u4E0A\u7684\u65E5\u5FD7\u5230error.logs
-log4j.logger.ERROR=ERROR
-log4j.appender.ERROR=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.ERROR.File=logs/error.log
-log4j.appender.ERROR.Threshold=ERROR
-log4j.appender.ERROR.Append=true
-log4j.appender.ERROR.layout=org.apache.log4j.PatternLayout
-log4j.appender.ERROR.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
-#-----------------------------------------------------------------------------------------------------
-#\u8F93\u51FAWARN \u7EA7\u522B\u4EE5\u4E0A\u7684\u65E5\u5FD7\u5230warn.logs
-log4j.logger.WARN=WARN
-log4j.appender.WARN=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.WARN.File=logs/warn.log
-log4j.appender.WARN.Threshold=WARN
-log4j.appender.WARN.Append=true
-log4j.appender.WARN.layout=org.apache.log4j.PatternLayout
-log4j.appender.WARN.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
-#-----------------------------------------------------------------------------------------------------
-#\u8F93\u51FAINFO\u7EA7\u522B\u4EE5\u4E0A\u7684\u5185\u5BB9\u5230info.log\u4E2D
-log4j.logger.INFO=INFO
-log4j.appender.INFO=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.INFO.File=logs/info.log
-log4j.appender.INFO.Threshold=INFO
-log4j.appender.INFO.Append=true
-log4j.appender.INFO.layout=org.apache.log4j.PatternLayout
-log4j.appender.INFO.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
-#-----------------------------------------------------------------------------------------------------
-#\u8F93\u51FADEBUG \u7EA7\u522B\u4EE5\u4E0A\u7684\u65E5\u5FD7\u5230debugger.logs
-log4j.logger.DEBUG=DEBUG
-log4j.appender.DEBUG=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.DEBUG.File=logs/debug.log
-log4j.appender.DEBUG.Threshold=DEBUG
-log4j.appender.DEBUG.Append=true
-log4j.appender.DEBUG.layout=org.apache.log4j.PatternLayout
-log4j.appender.DEBUG.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
-#-----------------------------------------------------------------------------------------------------
-#\u8F93\u51FAALL\u7EA7\u522B\u7684\u65E5\u5FD7\u5230all.logs
-log4j.logger.ALL=ALL
-log4j.appender.ALL=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.ALL.File=logs/all.log
-log4j.appender.file.DatePattern='.'yyyy-MM-dd
-log4j.appender.ALL.Threshold=ALL
-log4j.appender.ALL.Append=true
-log4j.appender.ALL.layout=org.apache.log4j.PatternLayout
-log4j.appender.ALL.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
-
-
+### ???Logger###
+log4j.rootLogger=debug,stdout
+### ???????? ###
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS}  %l   %m%n

+ 14 - 3
target/classes/application.yml

@@ -4,8 +4,8 @@ server:
 
 spring:
   profiles:
-    active: dev #开发环境配置文件
-#    active: test  #测试环境配置文件
+#    active: dev #开发环境配置文件
+    active: test  #测试环境配置文件
 #    active: pro  #生产环境配置文件
   application:
     name: student_portrait
@@ -24,6 +24,17 @@ spring:
       file-size-threshold: 0
       max-file-size: 10MB
       max-request-size: 10MB
+  redis:
+    host: 127.0.0.1
+    port: 6379
+    #    password: root@123456 没有设置密码
+    database: 0
+    timeout: 20000
+  cache:
+    redis:
+      time-to-live: 20000 #设置缓存数据的过期时间
+      cache-null-values: false #是否缓存空值
+
 #logging:
 #  # 设置logback.xml位置
 #  #  config: classpath:logs/logback.xml
@@ -36,7 +47,7 @@ mybatis-plus:
     # 驼峰命名和底杠命名自动转换
     map-underscore-to-camel-case: true
     # Mybatis默认简单日志
-    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+    #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  #mybatis 的运行日志,测试时需注释
     # MyBatis 自动映射策略,通过该配置可指定 MyBatis 是否并且如何来自动映射数据表字段与对象的属性,总共有 3 种可选值:
     # AutoMappingBehavior.NONE:不启用自动映射
     # AutoMappingBehavior.PARTIAL:只对非嵌套的 resultMap 进行自动映射

+ 1 - 1
target/maven-archiver/pom.properties

@@ -1,5 +1,5 @@
 #Generated by Maven
-#Tue Nov 15 16:13:58 CST 2022
+#Wed Dec 07 10:30:27 CST 2022
 version=0.0.1-SNAPSHOT
 groupId=com.chuanghai
 artifactId=student_portrait

+ 12 - 3
target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst

@@ -18,12 +18,15 @@ com\chuanghai\student_portrait\service\CapacityService.class
 com\chuanghai\student_portrait\exception\BaseErrorInfoInterface.class
 com\chuanghai\student_portrait\service\OldSchooluserService.class
 com\chuanghai\student_portrait\service\impl\AirConditioningServiceImpl.class
-com\chuanghai\student_portrait\controller\SubscriptionController.class
 com\chuanghai\student_portrait\service\AccessService.class
 com\chuanghai\student_portrait\utils\HMAC.class
+com\chuanghai\student_portrait\entity\dto\FaceDisernDto.class
 com\chuanghai\student_portrait\entity\dto\PersonalTrackDto.class
 com\chuanghai\student_portrait\mapper\CapacityMapper.class
+com\chuanghai\student_portrait\service\CityService.class
 com\chuanghai\student_portrait\service\StallService.class
+com\chuanghai\student_portrait\service\impl\CoordServiceImpl.class
+com\chuanghai\student_portrait\service\CoordService.class
 com\chuanghai\student_portrait\service\impl\HotWaterServiceImpl.class
 com\chuanghai\student_portrait\mapper\NewSchooluserMapper.class
 com\chuanghai\student_portrait\service\impl\AccessServiceImpl.class
@@ -43,12 +46,12 @@ com\chuanghai\student_portrait\exception\ResultValue.class
 com\chuanghai\student_portrait\mapper\FaceDiscernMapper.class
 com\chuanghai\student_portrait\entity\Forewarning.class
 com\chuanghai\student_portrait\service\ForewarningService.class
-com\chuanghai\student_portrait\utils\yushi\SubscribePersonCondition.class
 com\chuanghai\student_portrait\controller\GetSchoolUserController$1.class
 com\chuanghai\student_portrait\exception\BizException.class
 com\chuanghai\student_portrait\service\impl\FaceDiscernServiceImpl$1.class
 com\chuanghai\student_portrait\controller\AffinityScoreController.class
 com\chuanghai\student_portrait\service\impl\DormServiceImpl.class
+com\chuanghai\student_portrait\entity\City.class
 com\chuanghai\student_portrait\mapper\ConsumeMapper.class
 com\chuanghai\student_portrait\service\impl\NewSchooluserServiceImpl.class
 com\chuanghai\student_portrait\entity\FaceDiscern.class
@@ -59,6 +62,7 @@ com\chuanghai\student_portrait\entity\Student.class
 com\chuanghai\student_portrait\service\impl\StallServiceImpl.class
 com\chuanghai\student_portrait\exception\CommonEnum.class
 com\chuanghai\student_portrait\service\impl\AffinityScoreServiceImpl.class
+com\chuanghai\student_portrait\service\impl\CityServiceImpl.class
 com\chuanghai\student_portrait\utils\FileUtil.class
 com\chuanghai\student_portrait\mapper\AccessMapper.class
 com\chuanghai\student_portrait\controller\CapacityController.class
@@ -74,30 +78,35 @@ com\chuanghai\student_portrait\service\FaceDiscernService.class
 com\chuanghai\student_portrait\utils\DateUtils.class
 com\chuanghai\student_portrait\config\FacePassRecord.class
 com\chuanghai\student_portrait\entity\dto\CapacityAllDto.class
+com\chuanghai\student_portrait\mapper\CityMapper.class
+com\chuanghai\student_portrait\entity\Coord.class
 com\chuanghai\student_portrait\mapper\HotWaterMapper.class
 com\chuanghai\student_portrait\service\AirConditioningService.class
 com\chuanghai\student_portrait\entity\ColdWater.class
 com\chuanghai\student_portrait\service\impl\ConsumeServicelmpl.class
 com\chuanghai\student_portrait\entity\dto\CapacityDto.class
 com\chuanghai\student_portrait\controller\GetSchoolUserController.class
-com\chuanghai\student_portrait\utils\yushi\LibID.class
 com\chuanghai\student_portrait\entity\Province.class
 com\chuanghai\student_portrait\mapper\ForewarningMapper.class
 com\chuanghai\student_portrait\entity\Capacity.class
 com\chuanghai\student_portrait\response\enums\StatusEnum.class
 com\chuanghai\student_portrait\entity\User.class
 com\chuanghai\student_portrait\entity\dto\EnergyDto.class
+com\chuanghai\student_portrait\mapper\CoordMapper.class
 com\chuanghai\student_portrait\controller\FaceDiscernController.class
 com\chuanghai\student_portrait\mapper\StallMapper.class
 com\chuanghai\student_portrait\service\impl\DormServiceImpl$2.class
 com\chuanghai\student_portrait\exception\validatorConfiguration.class
 com\chuanghai\student_portrait\utils\vo\SubscriptionVo.class
 com\chuanghai\student_portrait\response\enums\Code.class
+com\chuanghai\student_portrait\config\RedisConfig.class
 com\chuanghai\student_portrait\service\ProvinceService.class
 com\chuanghai\student_portrait\entity\Consume.class
 com\chuanghai\student_portrait\controller\ForeWarningReportFormController.class
+com\chuanghai\student_portrait\utils\JedisUtil.class
 com\chuanghai\student_portrait\entity\AffinityScore.class
 com\chuanghai\student_portrait\config\PageConfig.class
+com\chuanghai\student_portrait\utils\LogUtils.class
 com\chuanghai\student_portrait\service\impl\DormServiceImpl$3.class
 com\chuanghai\student_portrait\service\impl\ElectricityServiceImpl.class
 com\chuanghai\student_portrait\entity\Access.class

+ 12 - 3
target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst

@@ -2,6 +2,7 @@ E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\se
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\exception\BizException.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\entity\AffinityScore.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\mapper\ProvinceMapper.java
+E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\entity\City.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\service\AirConditioningService.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\service\ForewarningService.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\entity\Stall.java
@@ -16,10 +17,10 @@ E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\ma
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\service\impl\HotWaterServiceImpl.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\entity\Warning.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\mapper\AffinityScoreMapper.java
+E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\config\RedisConfig.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\entity\Electricity.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\service\impl\ForewarningServiceImpl.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\entity\dto\CapacityAllDto.java
-E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\utils\yushi\LibID.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\mapper\AccessMapper.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\service\FaceDiscernService.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\controller\GetSchoolUserController.java
@@ -28,7 +29,9 @@ E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\en
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\service\impl\NewSchooluserServiceImpl.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\entity\dto\ConsumeDto.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\controller\DormController.java
+E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\entity\dto\FaceDisernDto.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\entity\HotWater.java
+E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\service\CoordService.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\service\impl\ConsumeServicelmpl.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\mapper\ElectricityMapper.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\service\DormService.java
@@ -39,11 +42,14 @@ E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\ma
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\mapper\HotWaterMapper.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\controller\CountController.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\exception\CommonEnum.java
+E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\service\impl\CoordServiceImpl.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\mapper\StallMapper.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\exception\validatorConfiguration.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\service\NewSchooluserService.java
+E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\entity\Coord.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\mapper\NewSchooluserMapper.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\utils\HMAC.java
+E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\utils\JedisUtil.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\utils\ReturnValueUtil.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\service\ProvinceService.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\controller\NewSchooluserController.java
@@ -55,11 +61,11 @@ E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\en
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\entity\NewSchooluser.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\controller\HotWaterController.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\entity\Access.java
+E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\service\CityService.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\entity\AirConditioning.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\entity\dto\ConsumeTotalMoneyDto.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\entity\User.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\service\AffinityScoreService.java
-E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\controller\SubscriptionController.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\controller\CapacityController.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\service\impl\FaceDiscernServiceImpl.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\service\OldSchooluserService.java
@@ -68,8 +74,8 @@ E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\se
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\service\impl\AccessServiceImpl.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\entity\dto\AccessCountDto.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\entity\Consume.java
-E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\utils\yushi\SubscribePersonCondition.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\entity\dto\PersonalTrackDto.java
+E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\mapper\CoordMapper.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\controller\ConsumeController.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\entity\Forewarning.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\service\ConsumeService.java
@@ -92,7 +98,10 @@ E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\se
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\mapper\AirConditioningMapper.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\service\impl\ProvinceServiceImpl.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\config\ChannelDetailInfos.java
+E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\mapper\CityMapper.java
+E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\service\impl\CityServiceImpl.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\controller\AirConditioningController.java
+E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\utils\LogUtils.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\mapper\CapacityMapper.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\exception\ResultValue.java
 E:\company\student_portraits_api\src\main\java\com\chuanghai\student_portrait\response\enums\Code.java

BIN
target/student_portrait-0.0.1-SNAPSHOT.jar.original