Parcourir la source

添加新功能

liu il y a 1 an
Parent
commit
207faa77f1
88 fichiers modifiés avec 2316 ajouts et 284 suppressions
  1. 1 1
      src/main/java/com/template/AutoCode.java
  2. 1 1
      src/main/java/com/template/api/SmartAttendanceControllerAPI.java
  3. 3 0
      src/main/java/com/template/api/SmartClassControllerAPI.java
  4. 4 0
      src/main/java/com/template/api/SmartDeviceControllerAPI.java
  5. 4 2
      src/main/java/com/template/api/SmartEnrollmentUserControllerAPI.java
  6. 4 0
      src/main/java/com/template/api/SmartGradeControllerAPI.java
  7. 25 0
      src/main/java/com/template/api/SmartLateControllerAPI.java
  8. 22 1
      src/main/java/com/template/api/SmartLateSettingControllerAPI.java
  9. 1 1
      src/main/java/com/template/api/SmartLateTimeControllerAPI.java
  10. 5 4
      src/main/java/com/template/api/SmartSchoolSettingControllerAPI.java
  11. 26 6
      src/main/java/com/template/api/SmartUserControllerAPI.java
  12. 1 1
      src/main/java/com/template/api/SmartVisitorControllerAPI.java
  13. 7 2
      src/main/java/com/template/api/WechatScanLoginControllerAPI.java
  14. 2 0
      src/main/java/com/template/common/utils/AesTestOne.java
  15. 28 0
      src/main/java/com/template/common/utils/TimeSlot.java
  16. 75 8
      src/main/java/com/template/controller/DriverStockController.java
  17. 49 0
      src/main/java/com/template/controller/GraduateController.java
  18. 7 3
      src/main/java/com/template/controller/SmartAttendanceController.java
  19. 16 0
      src/main/java/com/template/controller/SmartClassController.java
  20. 10 0
      src/main/java/com/template/controller/SmartDeviceController.java
  21. 342 112
      src/main/java/com/template/controller/SmartEnrollmentUserController.java
  22. 128 13
      src/main/java/com/template/controller/SmartFaceDiscernController.java
  23. 16 0
      src/main/java/com/template/controller/SmartGradeController.java
  24. 65 0
      src/main/java/com/template/controller/SmartLateController.java
  25. 176 2
      src/main/java/com/template/controller/SmartLateSettingController.java
  26. 64 4
      src/main/java/com/template/controller/SmartSchoolSettingController.java
  27. 480 20
      src/main/java/com/template/controller/SmartUserController.java
  28. 2 2
      src/main/java/com/template/controller/SmartVisitorController.java
  29. 112 58
      src/main/java/com/template/controller/WechatScanLoginController.java
  30. 2 0
      src/main/java/com/template/mapper/SmartAccessMapper.java
  31. 1 1
      src/main/java/com/template/mapper/SmartAttendanceMapper.java
  32. 2 0
      src/main/java/com/template/mapper/SmartClassMapper.java
  33. 4 0
      src/main/java/com/template/mapper/SmartGradeMapper.java
  34. 25 0
      src/main/java/com/template/mapper/SmartLateMapper.java
  35. 6 0
      src/main/java/com/template/mapper/SmartLateSettingMapper.java
  36. 7 0
      src/main/java/com/template/mapper/SmartLateTimeMapper.java
  37. 5 2
      src/main/java/com/template/mapper/SmartUserMapper.java
  38. 1 1
      src/main/java/com/template/mapper/SmartVisitorMapper.java
  39. 10 0
      src/main/java/com/template/model/dto/AppRemoveClassDro.java
  40. 16 0
      src/main/java/com/template/model/dto/AppSaveClassDto.java
  41. 6 4
      src/main/java/com/template/model/dto/SmartEnrollmentUserSaveDto.java
  42. 28 0
      src/main/java/com/template/model/dto/SmartLateSettingDto.java
  43. 3 0
      src/main/java/com/template/model/pojo/SmartEnrollmentUser.java
  44. 73 0
      src/main/java/com/template/model/pojo/SmartLate.java
  45. 2 5
      src/main/java/com/template/model/pojo/SmartLateSetting.java
  46. 5 2
      src/main/java/com/template/model/pojo/SmartLateTime.java
  47. 6 3
      src/main/java/com/template/model/pojo/SmartSchoolSetting.java
  48. 1 1
      src/main/java/com/template/model/pojo/SmartScore.java
  49. 11 0
      src/main/java/com/template/model/pojo/SmartUser.java
  50. 7 0
      src/main/java/com/template/model/request/insertSmartUserRequest.java
  51. 5 0
      src/main/java/com/template/model/request/smartUserExportRequest.java
  52. 7 0
      src/main/java/com/template/model/request/updateSmartUserRequest.java
  53. 8 0
      src/main/java/com/template/model/tongji/MeterMonthData.java
  54. 5 0
      src/main/java/com/template/model/vo/ClassUserDetailVo.java
  55. 18 0
      src/main/java/com/template/model/vo/ManageClassGroupVo.java
  56. 10 0
      src/main/java/com/template/model/vo/ManageClassVo.java
  57. 6 0
      src/main/java/com/template/model/vo/SmartEnrollmentUserVo.java
  58. 33 0
      src/main/java/com/template/model/vo/SmartLateSettingVo.java
  59. 40 0
      src/main/java/com/template/model/vo/SmartLateVo.java
  60. 17 0
      src/main/java/com/template/model/vo/UserVo.java
  61. 3 0
      src/main/java/com/template/services/SmartAccessService.java
  62. 1 1
      src/main/java/com/template/services/SmartAttendanceService.java
  63. 1 0
      src/main/java/com/template/services/SmartClassService.java
  64. 2 0
      src/main/java/com/template/services/SmartGradeService.java
  65. 21 0
      src/main/java/com/template/services/SmartLateService.java
  66. 3 0
      src/main/java/com/template/services/SmartLateSettingService.java
  67. 3 0
      src/main/java/com/template/services/SmartLateTimeService.java
  68. 6 2
      src/main/java/com/template/services/SmartUserService.java
  69. 1 1
      src/main/java/com/template/services/SmartVisitorService.java
  70. 2 0
      src/main/java/com/template/services/WechatScanLoginService.java
  71. 5 0
      src/main/java/com/template/services/impl/SmartAccessServiceImpl.java
  72. 2 2
      src/main/java/com/template/services/impl/SmartAttendanceServiceImpl.java
  73. 5 0
      src/main/java/com/template/services/impl/SmartClassServiceImpl.java
  74. 1 2
      src/main/java/com/template/services/impl/SmartFaceDiscernServiceImpl.java
  75. 5 0
      src/main/java/com/template/services/impl/SmartGradeServiceImpl.java
  76. 42 0
      src/main/java/com/template/services/impl/SmartLateServiceImpl.java
  77. 10 0
      src/main/java/com/template/services/impl/SmartLateSettingServiceImpl.java
  78. 10 0
      src/main/java/com/template/services/impl/SmartLateTimeServiceImpl.java
  79. 18 4
      src/main/java/com/template/services/impl/SmartUserServiceImpl.java
  80. 2 2
      src/main/java/com/template/services/impl/SmartVisitorServiceImpl.java
  81. 32 2
      src/main/java/com/template/services/impl/WechatScanLoginServiceImpl.java
  82. 1 1
      src/main/resources/mapper/template/DriverStockMapper.xml
  83. 21 1
      src/main/resources/mapper/template/SmartAccessMapper.xml
  84. 8 2
      src/main/resources/mapper/template/SmartAttendanceMapper.xml
  85. 8 0
      src/main/resources/mapper/template/SmartClassMapper.xml
  86. 8 0
      src/main/resources/mapper/template/SmartGradeMapper.xml
  87. 47 2
      src/main/resources/mapper/template/SmartUserMapper.xml
  88. 2 2
      src/main/resources/mapper/template/SmartVisitorMapper.xml

+ 1 - 1
src/main/java/com/template/AutoCode.java

@@ -56,7 +56,7 @@ public class AutoCode {
         mpg.setPackageInfo(pc);
         //4、策略配置
         StrategyConfig strategy = new StrategyConfig();
-        strategy.setInclude("smart_late_setting"); // 设置要映射的表名"smart_class","smart_grade","smart_attendance"
+        strategy.setInclude("smart_late"); // 设置要映射的表名"smart_class","smart_grade","smart_attendance"
         strategy.setNaming(NamingStrategy.underline_to_camel);//下划线转驼峰
         strategy.setColumnNaming(NamingStrategy.underline_to_camel);//下划线转驼峰
         strategy.setEntityLombokModel(true); // 自动lombok;

+ 1 - 1
src/main/java/com/template/api/SmartAttendanceControllerAPI.java

@@ -104,7 +104,7 @@ public interface SmartAttendanceControllerAPI {
 
     @GetMapping(value = "/askForLeaveScreenPage")
     @ApiOperation(value = "大屏——请假数据展示", notes = "大屏——请假数据展示", httpMethod = "GET")
-    CommonResult askForLeaveScreenPage(@RequestParam int currentPage, @RequestParam int pageCount, String cardNo, String ifVerification);
+    CommonResult askForLeaveScreenPage(@RequestParam int currentPage, @RequestParam int pageCount, String keyWord, String ifVerification,Integer gradeId,Integer classId);
 
     /**
      * 领导驾驶舱——考勤管理——学生考勤

+ 3 - 0
src/main/java/com/template/api/SmartClassControllerAPI.java

@@ -58,4 +58,7 @@ public interface SmartClassControllerAPI {
     CommonResult getClassId(@RequestParam int schoolClass);
 
 
+    @GetMapping(value = "/querySmartLargeClasses")
+    @ApiOperation(value = "大屏班级集合列表数据", notes = "班级集合列表数据", httpMethod = "GET")
+    CommonResult querySmartLargeClasses(@RequestParam int gradeId);
 }

+ 4 - 0
src/main/java/com/template/api/SmartDeviceControllerAPI.java

@@ -32,4 +32,8 @@ public interface SmartDeviceControllerAPI {
     @GetMapping(value = "/deleteSmartDeviceById")
     @ApiOperation(value = "根据ID删除指定设备", notes = "根据ID删除指定设备", httpMethod = "GET")
     CommonResult deleteSmartDeviceById(@RequestParam int id);
+
+    @GetMapping(value = "/getSmartDeviceGroup")
+    @ApiOperation(value = "设备分组", notes = "设备分组", httpMethod = "GET")
+    CommonResult getSmartDeviceGroup();
 }

+ 4 - 2
src/main/java/com/template/api/SmartEnrollmentUserControllerAPI.java

@@ -15,16 +15,18 @@ public interface SmartEnrollmentUserControllerAPI {
     @ApiOperation(value = "添加家长提交信息", notes = "添加家长提交信息", httpMethod = "POST")
     CommonResult insertSmartEnrollmentUser(@Validated @RequestBody SmartEnrollmentUserSaveDto dto, BindingResult bindingResult);
 
-
     @GetMapping(value = "/list")
     @ApiOperation(value = "信息展示", notes = "信息展示", httpMethod = "GET")
     CommonResult list(@RequestParam Integer currentPage,@RequestParam Integer pageCount, String status, String grade, Integer schoolClass, String keyWord);
 
-
     @PostMapping(value = "/examine")
     @ApiOperation(value = "状态审批", notes = "状态审批", httpMethod = "POST")
     CommonResult examine(@RequestBody SmartEnrollmentUserExamineDto dto) throws Exception;
 
+    @PostMapping(value = "/insertTeacherSmartEnrollmentUser")
+    @ApiOperation(value = "添加老师提交信息", notes = "添加老师提交信息", httpMethod = "POST")
+    CommonResult insertTeacherSmartEnrollmentUser(@RequestBody SmartEnrollmentUserSaveDto dto) throws Exception;
+
 }
 
 

+ 4 - 0
src/main/java/com/template/api/SmartGradeControllerAPI.java

@@ -47,4 +47,8 @@ public interface SmartGradeControllerAPI {
     @ApiOperation(value = "班级和年级联动列表",notes = "班级和年级联动列表", httpMethod = "GET")
     CommonResult getGradeAndClass();
 
+    @GetMapping(value = "/querySmartLargeGrades")
+    @ApiOperation(value = "大屏年级集合列表数据", notes = "年级集合列表数据", httpMethod = "GET")
+    CommonResult querySmartLargeGrades();
+
 }

+ 25 - 0
src/main/java/com/template/api/SmartLateControllerAPI.java

@@ -0,0 +1,25 @@
+package com.template.api;
+
+import com.template.model.result.CommonResult;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+@RequestMapping("/api/smartLate")
+public interface SmartLateControllerAPI {
+
+    @GetMapping("/list")
+    @ApiOperation(value = "查询迟到数据", notes = "查询迟到数据", httpMethod = "GET")
+    CommonResult getList(@RequestParam int currentPage, @RequestParam int pageCount,String keyWord,String startTime,String endTime);
+
+    @GetMapping("/delete")
+    @ApiOperation(value = "删除迟到数据", notes = "删除迟到数据", httpMethod = "GET")
+    CommonResult getDelete(@RequestParam int id);
+
+    @GetMapping("/listApp")
+    @ApiOperation(value = "小程序查询迟到数据", notes = "小程序查询迟到数据", httpMethod = "GET")
+    CommonResult listApp(@RequestParam int currentPage, @RequestParam int pageCount,@RequestParam Integer classId,String startTime,String endTime);
+
+
+}

+ 22 - 1
src/main/java/com/template/api/SmartLateSettingControllerAPI.java

@@ -1,7 +1,28 @@
 package com.template.api;
 
+import com.template.model.dto.SmartLateSettingDto;
+import com.template.model.pojo.SmartSchoolSetting;
+import com.template.model.result.CommonResult;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 
-@RequestMapping("/auto/smart-late-setting")
+@RequestMapping("/api/smartLateSetting")
 public interface SmartLateSettingControllerAPI {
+
+    @GetMapping("/get")
+    @ApiOperation(value = "查询迟到设置", notes = "查询迟到设置", httpMethod = "GET")
+    CommonResult getList();
+
+
+    @PostMapping("/saveOrUpdate")
+    @ApiOperation(value = "编辑迟到设置", notes = "编辑迟到设置", httpMethod = "POST")
+    CommonResult saveOrUpdate(@RequestBody SmartLateSettingDto dto);
+
+    @GetMapping("/delete")
+    @ApiOperation(value = "删除迟到设置", notes = "删除迟到设置", httpMethod = "GET")
+    CommonResult delete(Integer id);
+
 }

+ 1 - 1
src/main/java/com/template/api/SmartLateTimeControllerAPI.java

@@ -2,6 +2,6 @@ package com.template.api;
 
 import org.springframework.web.bind.annotation.RequestMapping;
 
-@RequestMapping("/auto/smart-late-time")
+@RequestMapping("/api/smartLateTime")
 public interface SmartLateTimeControllerAPI {
 }

+ 5 - 4
src/main/java/com/template/api/SmartSchoolSettingControllerAPI.java

@@ -5,18 +5,19 @@ import com.template.model.result.CommonResult;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 
-@RequestMapping("/auto/smart-school-setting")
+@RequestMapping("/api/smartSchoolSetting")
 public interface SmartSchoolSettingControllerAPI {
 
-    @GetMapping("get")
+    @GetMapping("/get")
     @ApiOperation(value = "查询学校设置", notes = "查询学校设置", httpMethod = "GET")
     CommonResult getList();
 
 
-    @PostMapping("saveOrUpdate")
+    @PostMapping("/saveOrUpdate")
     @ApiOperation(value = "编辑学校设置", notes = "编辑学校设置", httpMethod = "POST")
-    CommonResult saveOrUpdate(SmartSchoolSetting smartSchoolSetting);
+    CommonResult saveOrUpdate(@RequestBody SmartSchoolSetting smartSchoolSetting);
 
 }

+ 26 - 6
src/main/java/com/template/api/SmartUserControllerAPI.java

@@ -1,11 +1,10 @@
 package com.template.api;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.template.model.dto.AppRemoveClassDro;
+import com.template.model.dto.AppSaveClassDto;
 import com.template.model.request.*;
 import com.template.model.result.CommonResult;
-import com.template.model.result.PageUtils;
-import com.template.model.vo.UserDeleteVo;
-import com.template.model.vo.gauageOutfitVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.validation.BindingResult;
@@ -15,7 +14,6 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
-import java.util.List;
 
 /**
  * @Author: binguo
@@ -112,7 +110,7 @@ public interface SmartUserControllerAPI {
 
     @GetMapping(value = "/queryPageSmartUser")
     @ApiOperation(value = "用户分页数据", notes = "用户分页数据", httpMethod = "GET")
-    CommonResult queryPageSmartUser(@RequestParam int currentPage, @RequestParam int pageCount, Integer departmentId, String name, @RequestHeader("user_head") String userhead);
+    CommonResult queryPageSmartUser(@RequestParam int currentPage, @RequestParam int pageCount, Integer departmentId, String name,Integer ifGraduate, @RequestHeader("user_head") String userhead);
 
     @GetMapping(value = "/queryPageSmartUserNoAuth")
     @ApiOperation(value = "用户分页数据", notes = "用户分页数据", httpMethod = "GET")
@@ -230,7 +228,7 @@ public interface SmartUserControllerAPI {
      */
     @GetMapping(value = "/queryClassUser")
     @ApiOperation(value = "获取班级下的学生", notes = "获取班级下的学生", httpMethod = "GET")
-    CommonResult queryClassUser(@RequestParam int userId, String keyWord);
+    CommonResult queryClassUser(@RequestParam int userId, String keyWord,Integer classId);
 
 
     /**
@@ -292,4 +290,26 @@ public interface SmartUserControllerAPI {
     @GetMapping(value = "/lostBan")
     @ApiOperation(value = "退班", notes = "退班", httpMethod = "GET")
     CommonResult lostBan(@RequestParam String teacherUid,@RequestParam String classUid);
+
+
+    @PostMapping(value = "/appRemoveClass")
+    @ApiOperation(value = "将学生移除班级到未分组", notes = "将学生移除班级到未分组", httpMethod = "POST")
+    CommonResult appRemoveClass(@RequestBody AppRemoveClassDro dro);
+
+    @PostMapping(value = "/appSaveClass")
+    @ApiOperation(value = "将未分组学生添加到班级", notes = "将未分组学生添加到班级", httpMethod = "POST")
+    CommonResult appSaveClass(@RequestBody AppSaveClassDto dto) throws Exception;
+
+    @GetMapping(value = "/appListClass")
+    @ApiOperation(value = "查询未分组的学生", notes = "查询未分组的学生", httpMethod = "GET")
+    CommonResult appListClass(String keyWord);
+
+    @GetMapping(value = "/manageClassGroup")
+    @ApiOperation(value = "管理班级的分组", notes = "管理班级的分组", httpMethod = "GET")
+    CommonResult manageClassGroup();
+
+    @GetMapping(value = "/getManageClass")
+    @ApiOperation(value = "管理班级的分组", notes = "管理班级的分组", httpMethod = "GET")
+    CommonResult getManageClass(@RequestParam Integer id);
+
 }

+ 1 - 1
src/main/java/com/template/api/SmartVisitorControllerAPI.java

@@ -146,7 +146,7 @@ public interface SmartVisitorControllerAPI {
 
     @GetMapping(value = "/getScreenPage")
     @ApiOperation(value = "大屏——家长访客预约数据", notes = "大屏——家长访客预约数据", httpMethod = "GET")
-    CommonResult getScreenPage(@RequestParam int currentPage, @RequestParam int pageCount,String phone,String status);
+    CommonResult getScreenPage(@RequestParam int currentPage, @RequestParam int pageCount,String keyWord,String status);
 
     @GetMapping(value = "/cancel")
     @ApiOperation(value = "大屏——学生家长预约取消", notes = "大屏——学生家长预约取消", httpMethod = "GET")

+ 7 - 2
src/main/java/com/template/api/WechatScanLoginControllerAPI.java

@@ -112,7 +112,7 @@ public interface WechatScanLoginControllerAPI {
 
     @RequestMapping(value = "/queryPhoneBook")
     @ResponseBody
-    public CommonResult queryPhoneBook(@RequestParam Integer id);
+    public CommonResult queryPhoneBook(@RequestParam Integer id,@RequestParam Integer gradeId,@RequestParam Integer classId);
 
     @RequestMapping(value = "/getWechatPhone")
     @ResponseBody
@@ -134,7 +134,12 @@ public interface WechatScanLoginControllerAPI {
     @GetMapping(value = "/getAppMeterMonthPage")
     @ApiOperation(value = "小程序区域能耗统计", notes = "小程序区域能耗统计", httpMethod = "GET")
     @ResponseBody
-    public CommonResult getAppMeterMonthPage(int currentPage, int pageCount,String date);
+    public CommonResult getAppMeterMonthPage(@RequestParam int currentPage,@RequestParam int pageCount,String date);
 
 
+    @GetMapping(value = "/getAppMeterDayPage")
+    @ApiOperation(value = "小程序实时抄表", notes = "小程序实时抄表", httpMethod = "GET")
+    @ResponseBody
+    public CommonResult getAppMeterDayPage(@RequestParam int currentPage,@RequestParam int pageCount,Integer type,String date);
+
 }

+ 2 - 0
src/main/java/com/template/common/utils/AesTestOne.java

@@ -1,7 +1,9 @@
 package com.template.common.utils;
 
 import com.template.config.ControlConfig;
+import com.template.model.vo.BsStudentNoVo;
 import org.apache.commons.codec.binary.Base64;
+import org.aspectj.weaver.ast.Var;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 

+ 28 - 0
src/main/java/com/template/common/utils/TimeSlot.java

@@ -0,0 +1,28 @@
+package com.template.common.utils;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+@Data
+public class TimeSlot {
+    private LocalDateTime startTime;
+    private LocalDateTime endTime;
+ 
+    public TimeSlot(LocalDateTime startTime, LocalDateTime endTime) {
+        this.startTime = startTime;
+        this.endTime = endTime;
+    }
+ 
+    public LocalDateTime getStartTime() {
+        return startTime;
+    }
+ 
+    public LocalDateTime getEndTime() {
+        return endTime;
+    }
+ 
+    // 判断两个时间段是否有重叠
+    public static boolean overlaps(TimeSlot slot1, TimeSlot slot2) {
+        return !(slot1.getEndTime().isBefore(slot2.getStartTime()) || slot1.getStartTime().isAfter(slot2.getEndTime()));
+    }
+}

+ 75 - 8
src/main/java/com/template/controller/DriverStockController.java

@@ -4,7 +4,9 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.template.annotation.DESRespondSecret;
@@ -56,16 +58,24 @@ public class DriverStockController implements DriverStockControllerAPI {
         List<Tj> list = driverStockService.getClassTj();
         BigDecimal num = new BigDecimal(0.0);
         for (Tj teacherData:list) {
-            if (teacherData.getName().contains("老师")) {
+            if (teacherData.getName().contains("老师") || teacherData.getName().contains("班主任") || teacherData.getName().contains("年级主任") || teacherData.getName().contains("超级管理员")) {
                 num = num.add(new BigDecimal(teacherData.getNum()));
             }
         }
         Tj teacher = new Tj();
         teacher.setName("教师");
         teacher.setNum(num.doubleValue());
-        list = list.stream().filter(e -> !e.name.contains("老师") && !e.name.contains("家长")).collect(Collectors.toList());
+        list = list.stream().filter(e -> !e.name.contains("老师") && !e.name.contains("家长")&& !e.name.contains("未分组")).collect(Collectors.toList());
         list.add(teacher);
-        return CommonResult.ok(list);
+//        去掉班主任
+        ArrayList<Tj> vos = new ArrayList<>();
+        for (Tj tj : list) {
+            if (!tj.getName().contains("班主任") && !tj.getName().contains("年级主任") && !tj.getName().contains("超级管理员")) {
+                vos.add(tj);
+            }
+        }
+
+        return CommonResult.ok(vos);
     }
 
     @Override
@@ -142,6 +152,16 @@ public class DriverStockController implements DriverStockControllerAPI {
     @DESRespondSecret(validated = false)
     public CommonResult getEnergyTj() {
         List<TjFloat> list = driverStockService.getEnergyTj();
+        for (int i = 0; i < list.size(); i++) {
+            TjFloat tjFloat = list.get(i);
+            String name = tjFloat.getName();
+            if ("用电量".equals(name)) {
+                Double num = tjFloat.getNum();
+                BigDecimal bigDecimal = new BigDecimal(num);
+                double v = bigDecimal.multiply(new BigDecimal(80)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+                tjFloat.setNum(v);
+            }
+        }
         return CommonResult.ok(list);
     }
 
@@ -159,6 +179,16 @@ public class DriverStockController implements DriverStockControllerAPI {
         for (int i = 0; i < list.size(); i++) {
             list.get(i).setNum(list.get(i).getNum() / userNum);
         }
+        for (int j = 0; j < list.size(); j++) {
+            TjFloat tjFloat = list.get(j);
+            String name = tjFloat.getName();
+            if ("用电量".equals(name)) {
+                Double num = tjFloat.getNum();
+                BigDecimal bigDecimal = new BigDecimal(num);
+                double v = bigDecimal.multiply(new BigDecimal(80)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+                tjFloat.setNum(v);
+            }
+        }
         return CommonResult.ok(list);
     }
 
@@ -173,6 +203,18 @@ public class DriverStockController implements DriverStockControllerAPI {
             calendar.add(Calendar.MONTH, i);
             String date = simpleDateFormat.format(calendar.getTime());
             List<TjFloat> list = driverStockService.getEnergyMonth(date, type);
+            if (type==1) {
+                for (int i1 = 0; i1 < list.size(); i1++) {
+                    TjFloat tj = list.get(i1);
+                    Double num = tj.getNum();
+                    BigDecimal bigDecimal = new BigDecimal(num);
+                    if (ObjectUtils.isNotEmpty(num)) {
+                        BigDecimal multiply = bigDecimal.multiply(new BigDecimal(80)).setScale(2,BigDecimal.ROUND_HALF_UP);
+                        num=multiply.doubleValue();
+                    }
+                    tj.setNum(num);
+                }
+            }
             JSONObject jsonObject = new JSONObject();
             jsonObject.put("month", date);
             jsonObject.put("data", list);
@@ -192,6 +234,18 @@ public class DriverStockController implements DriverStockControllerAPI {
             calendar.add(Calendar.DATE, i);
             String date = simpleDateFormat.format(calendar.getTime());
             List<TjFloat> list = driverStockService.getEnergyDay(date, type);
+            if (type==1) {
+                for (int i1 = 0; i1 < list.size(); i1++) {
+                    TjFloat tj = list.get(i1);
+                    Double num = tj.getNum();
+                    BigDecimal bigDecimal = new BigDecimal(num);
+                    if (ObjectUtils.isNotEmpty(num)) {
+                        BigDecimal multiply = bigDecimal.multiply(new BigDecimal(80)).setScale(2,BigDecimal.ROUND_HALF_UP);
+                        num=multiply.doubleValue();
+                    }
+                    tj.setNum(num);
+                }
+            }
             JSONObject jsonObject = new JSONObject();
             jsonObject.put("date", date);
             jsonObject.put("data", list);
@@ -239,11 +293,24 @@ public class DriverStockController implements DriverStockControllerAPI {
     @PassToken
     @DESRespondSecret(validated = false)
     public CommonResult getUserPage(int currentPage, int pageCount, String key, Integer identityId,Integer graderId,Integer classId) {
-//        查询对应的班级
-        LambdaQueryWrapper<SmartClass> wrapper=new LambdaQueryWrapper<>();
-        wrapper.eq(ObjectUtils.isNotEmpty(graderId),SmartClass::getGradeId,graderId)
-                        .eq(ObjectUtils.isNotEmpty(classId),SmartClass::getId,classId);
-        List<SmartClass> smartClasses = smartClassService.list(wrapper);
+//        当班级和年级为空时则不要毕业的班级
+        List<SmartClass> smartClasses=new ArrayList<>();
+        if (ObjectUtils.isEmpty(graderId)||ObjectUtils.isEmpty(classId)) {
+            //        获取未毕业的班级
+            List<Integer> grades=smartUserService.getNotGraduateGrade();
+
+            LambdaQueryWrapper<SmartClass> wrapper = new LambdaQueryWrapper<>();
+            wrapper.in(SmartClass::getGradeId,grades);
+            smartClasses = smartClassService.list(wrapper);
+        }else {
+            //        查询对应的班级
+            LambdaQueryWrapper<SmartClass> wrapper=new LambdaQueryWrapper<>();
+            wrapper.eq(ObjectUtils.isNotEmpty(graderId),SmartClass::getGradeId,graderId)
+                    .eq(ObjectUtils.isNotEmpty(classId),SmartClass::getId,classId);
+            smartClasses = smartClassService.list(wrapper);
+        }
+
+
 //        组合班级id
         String classIds="";
         for (int i = 0; i < smartClasses.size(); i++) {

+ 49 - 0
src/main/java/com/template/controller/GraduateController.java

@@ -3,6 +3,7 @@ package com.template.controller;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.seewo.open.sdk.DefaultSeewoClient;
 import com.seewo.open.sdk.SeewoClient;
@@ -23,10 +24,13 @@ import com.template.model.result.PageUtils;
 import com.template.model.seewo.*;
 import com.template.model.vo.*;
 import com.template.services.*;
+import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestHeader;
@@ -38,6 +42,7 @@ import java.net.URLDecoder;
 import java.net.URLEncoder;
 import java.time.LocalDate;
 import java.time.Year;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -75,6 +80,9 @@ public class GraduateController implements GraduateControllerAPI {
     @Autowired
     private SmartVisitorParentsConfigService smartVisitorParentsConfigService;
 
+    @Autowired
+    SmartSchoolSettingService smartSchoolSettingService;
+
     @Override
     public CommonResult getAesStr(int classNo) throws Exception {
         if (classNo <= 0) {
@@ -121,8 +129,11 @@ public class GraduateController implements GraduateControllerAPI {
         foreachDepartments.addAll(studentDepartments);
         List<SmartDepartment> parentDepartments = departments.stream().filter(e -> !e.getName().contains("毕业") && e.getName().contains("九") && e.getParentId().equals(oDepartmentpd.get().getId())).collect(Collectors.toList());
         foreachDepartments.addAll(parentDepartments);
+//        获取部门
+        ArrayList<Integer> departmentIds = new ArrayList<>();
         for (SmartDepartment fd : foreachDepartments) {
             if (fd.getName().contains("九")) {
+                departmentIds.add(fd.getId());
                 String fdName = null;
                 if (fd.getName().contains("九")) {
                     fdName = fd.getName().replace("九年级", year + "级毕业");
@@ -168,6 +179,18 @@ public class GraduateController implements GraduateControllerAPI {
                 }
             }
         }
+
+//        升班时将九年级设置成已毕业
+        LambdaQueryWrapper<SmartUser> wrapper=new LambdaQueryWrapper<>();
+        wrapper.in(SmartUser::getDepartmentId,departmentIds);
+        List<SmartUser> smartUsers = smartUserService.list(wrapper);
+        for (int i = 0; i < smartUsers.size(); i++) {
+            SmartUser smartUser = smartUsers.get(i);
+            smartUser.setIfGraduate(1);
+        }
+        smartUserService.updateBatchById(smartUsers);
+
+
         //endregion
         foreachDepartments = new ArrayList<>();
         //region 八年级
@@ -832,5 +855,31 @@ public class GraduateController implements GraduateControllerAPI {
         return newTrees;
     }
     //endregion
+
+    @Scheduled(cron = "0 0 1 * * ? ")
+    @Async
+    public void goUp(){
+        List<SmartSchoolSetting> list = smartSchoolSettingService.list(new LambdaQueryWrapper<>());
+        if (ObjectUtils.isNotEmpty(list)) {
+            SmartSchoolSetting smartSchoolSetting = list.get(0);
+            String progressingTime = smartSchoolSetting.getProgressingTime();
+            DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            LocalDate now = LocalDate.now();
+            int year = now.getYear();
+            String date=year+"-"+progressingTime;
+
+            String format = now.format(dateTimeFormatter2);
+
+            if (date.equals(format)) {
+                System.out.println("到升学时间,执行自动升学");
+            }else {
+                System.out.println("未到升学时间");
+            }
+
+
+        }
+    }
+
+
 }
 

+ 7 - 3
src/main/java/com/template/controller/SmartAttendanceController.java

@@ -670,8 +670,8 @@ public class SmartAttendanceController implements SmartAttendanceControllerAPI {
     @Override
     @DESRespondSecret(validated = true)
     @PassToken
-    public CommonResult askForLeaveScreenPage(int currentPage, int pageCount, String cardNo, String ifVerification) {
-        PageUtils<AskForLeaveScreenVo> result = smartAttendanceService.askForLeaveScreenPage(currentPage, pageCount, cardNo, ifVerification);
+    public CommonResult askForLeaveScreenPage(int currentPage, int pageCount, String keyWord, String ifVerification,Integer gradeId,Integer classId) {
+        PageUtils<AskForLeaveScreenVo> result = smartAttendanceService.askForLeaveScreenPage(currentPage, pageCount, keyWord, ifVerification,gradeId,classId);
 
         return CommonResult.ok(result);
     }
@@ -730,8 +730,12 @@ public class SmartAttendanceController implements SmartAttendanceControllerAPI {
     @DESRespondSecret(validated = true)
     public CommonResult classHistoricalAttendance(String dateTime, int currentPage, int pageCount, String className) {
 
+//        获取未毕业的班级
+        List<Integer> grades=smartUserService.getNotGraduateGrade();
+
         LambdaQueryWrapper<SmartClass> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(ObjectUtils.isNotEmpty(className), SmartClass::getName, className);
+        wrapper.eq(ObjectUtils.isNotEmpty(className), SmartClass::getName, className)
+                .in(SmartClass::getGradeId,grades);
         IPage<SmartClass> page = smartClassService.page(new Page<>(currentPage, pageCount), wrapper);
 
 

+ 16 - 0
src/main/java/com/template/controller/SmartClassController.java

@@ -8,6 +8,7 @@ import com.seewo.open.sdk.DefaultSeewoClient;
 import com.seewo.open.sdk.SeewoClient;
 import com.seewo.open.sdk.auth.Account;
 import com.template.annotation.DESRespondSecret;
+import com.template.annotation.PassToken;
 import com.template.api.SmartClassControllerAPI;
 import com.template.common.utils.*;
 import com.template.config.ControlConfig;
@@ -482,5 +483,20 @@ public class SmartClassController implements SmartClassControllerAPI {
         SchoolClassVo vo = smartClassService.getClassId(schoolClass);
         return CommonResult.ok(vo);
     }
+
+    @Override
+    @DESRespondSecret(validated = true)
+    @PassToken
+    public CommonResult querySmartLargeClasses(int gradeId) {
+        List<SmartClass> datas = smartClassService.getSmartClassByGradeID(gradeId);
+        List<SemesterVo> result = new ArrayList<>();
+        for (SmartClass data : datas) {
+            SemesterVo model = new SemesterVo();
+            model.setId(data.getId());
+            model.setName(data.getName());
+            result.add(model);
+        }
+        return CommonResult.ok(result);
+    }
 }
 

+ 10 - 0
src/main/java/com/template/controller/SmartDeviceController.java

@@ -1,6 +1,7 @@
 package com.template.controller;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.template.annotation.DESRespondSecret;
 import com.template.api.SmartDeviceControllerAPI;
 import com.template.common.utils.paramUtils;
@@ -15,6 +16,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 /**
  * <p>
  * 应用管理 前端控制器
@@ -99,5 +102,12 @@ public class SmartDeviceController implements SmartDeviceControllerAPI {
 
         return result > 0 ? CommonResult.ok("删除成功") : CommonResult.fail("删除失败");
     }
+
+    @Override
+    @DESRespondSecret(validated = true)
+    public CommonResult getSmartDeviceGroup() {
+        List<SmartDevice> list = smartDeviceService.list(new LambdaQueryWrapper<>());
+        return CommonResult.ok(list);
+    }
 }
 

+ 342 - 112
src/main/java/com/template/controller/SmartEnrollmentUserController.java

@@ -1,18 +1,21 @@
 package com.template.controller;
 
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.seewo.open.sdk.DefaultSeewoClient;
 import com.seewo.open.sdk.SeewoClient;
 import com.seewo.open.sdk.auth.Account;
 import com.template.annotation.DESRespondSecret;
 import com.template.annotation.PassToken;
 import com.template.api.SmartEnrollmentUserControllerAPI;
-import com.template.common.utils.TimeExchange;
+import com.template.common.utils.*;
+import com.template.config.ControlConfig;
 import com.template.config.SeewoConfig;
 import com.template.model.dto.SmartEnrollmentUserSaveDto;
 import com.template.model.enumModel.eDuties;
@@ -26,10 +29,14 @@ import com.template.model.request.isrRequest;
 import com.template.model.result.CommonResult;
 import com.template.model.result.PageUtils;
 import com.template.model.seewo.PhotoServiceSavePhotosParam;
+import com.template.model.vo.BsStudentNoVo;
+import com.template.model.vo.BsStudentVo;
 import com.template.model.vo.SmartEnrollmentUserExamineDto;
 import com.template.model.vo.SmartEnrollmentUserVo;
 import com.template.services.*;
 import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.BindingResult;
@@ -37,8 +44,12 @@ import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
 import java.util.*;
 
+import static com.template.common.utils.AesTestOne.decrypt;
+
 /**
  * <p>
  * 前端控制器
@@ -74,6 +85,13 @@ public class SmartEnrollmentUserController implements SmartEnrollmentUserControl
     @Autowired
     private SmartOperationUserService smartOperationUserService;
 
+    @Resource
+    private ControlConfig controlConfig;
+
+    @Autowired
+    private SmartTimeGroupService smartTimeGroupService;
+
+    private static Logger logger = LoggerFactory.getLogger(SmartUserController.class);
 
     @Override
     @PassToken
@@ -83,21 +101,23 @@ public class SmartEnrollmentUserController implements SmartEnrollmentUserControl
         BeanUtils.copyProperties(dto, smartEnrollmentUser);
 
 //        找到对应的年级
-        String gradeName = dto.getGradeName();
-        LambdaQueryWrapper<SmartGrade> wrapperSG = new LambdaQueryWrapper<>();
-        wrapperSG.eq(SmartGrade::getName, gradeName);
-        SmartGrade smartGrade = smartGradeService.getOne(wrapperSG);
+        Integer gradeId = dto.getGradeId();
+//        LambdaQueryWrapper<SmartGrade> wrapperSG = new LambdaQueryWrapper<>();
+//        wrapperSG.eq(SmartGrade::getName, gradeName);
+//        SmartGrade smartGrade = smartGradeService.getOne(wrapperSG);
+        SmartGrade smartGrade = smartGradeService.getById(gradeId);
         if (ObjectUtils.isEmpty(smartGrade)) {
             return CommonResult.fail("年级不存在");
-
         }
         smartEnrollmentUser.setGrade(smartGrade.getId() + "");
 
 //        找到对应的班级
-        String schoolClassName = dto.getSchoolClassName();
-        LambdaQueryWrapper<SmartClass> wrapperSC = new LambdaQueryWrapper<>();
-        wrapperSC.eq(SmartClass::getName, schoolClassName);
-        SmartClass smartClass = smartClassService.getOne(wrapperSC);
+//        String schoolClassName = dto.getSchoolClassName();
+//        LambdaQueryWrapper<SmartClass> wrapperSC = new LambdaQueryWrapper<>();
+//        wrapperSC.eq(SmartClass::getName, schoolClassName);
+//        SmartClass smartClass = smartClassService.getOne(wrapperSC);
+        Integer classId = dto.getClassId();
+        SmartClass smartClass = smartClassService.getById(classId);
         if (ObjectUtils.isEmpty(smartClass)) {
             return CommonResult.fail("班级不存在");
         }
@@ -114,6 +134,9 @@ public class SmartEnrollmentUserController implements SmartEnrollmentUserControl
         smartEnrollmentUser.setIdentityId(2);
         smartEnrollmentUser.setTimeGroupId(8);
 //        获取学号
+        String schoolClassName = smartClass.getName();
+        String gradeName = smartGrade.getName();
+        String year = gradeName.replace("级", "");
         String[] s = schoolClassName.split("级");
         if (s.length < 2) {
             return CommonResult.fail("获取学号异常");
@@ -127,14 +150,21 @@ public class SmartEnrollmentUserController implements SmartEnrollmentUserControl
         if (ObjectUtils.isEmpty(s3)) {
             return CommonResult.fail("获取学号异常");
         }
-        LambdaQueryWrapper<SmartEnrollmentUser> wrapperCount = new LambdaQueryWrapper<>();
-        wrapperCount.eq(SmartEnrollmentUser::getIdentityId, 2)
-                .eq(SmartEnrollmentUser::getGrade, smartGrade.getId())
-                .eq(SmartEnrollmentUser::getSchoolClass, smartClass.getId());
-        int count = smartEnrollmentUserService.count(wrapperCount);
-        String cardNo = cardNo(s3, count + 1);
-
-        smartEnrollmentUser.setCardNo(cardNo);
+        LambdaQueryWrapper<SmartUser> wrapperCount = new LambdaQueryWrapper<>();
+        wrapperCount.eq(SmartUser::getIdentityId, 2)
+                .eq(SmartUser::getGrade, smartGrade.getId())
+                .eq(SmartUser::getSchoolClass, smartClass.getId());
+        int count = smartUserService.count(wrapperCount);
+        Calendar cal = Calendar.getInstance();
+        int year2 = cal.get(Calendar.YEAR);
+        Integer integer = Integer.valueOf(year);
+        if (year2==integer) {
+            String cardNo = cardNo(year,s3, count + 1);
+            smartEnrollmentUser.setCardNo(cardNo);
+        }else {
+            String cardNo = cardNo(year,s3, count + 10);
+            smartEnrollmentUser.setCardNo(cardNo);
+        }
 
         smartEnrollmentUserService.save(smartEnrollmentUser);
 
@@ -158,7 +188,7 @@ public class SmartEnrollmentUserController implements SmartEnrollmentUserControl
             } else {
                 String affiliate = user.getAffiliate();
                 user.setAffiliate(affiliate + "," + smartEnrollmentUser.getId() + "");
-                smartEnrollmentUserService.save(user);
+                smartEnrollmentUserService.updateById(user);
             }
 
         }
@@ -169,7 +199,7 @@ public class SmartEnrollmentUserController implements SmartEnrollmentUserControl
 
     @Override
     @PassToken
-    @DESRespondSecret(validated = false)
+    @DESRespondSecret(validated = true)
     public CommonResult list(Integer currentPage, Integer pageCount, String status, String grade, Integer schoolClass, String keyWord) {
 
         PageUtils<SmartEnrollmentUserVo> result = smartEnrollmentUserService.listPage(currentPage, pageCount, status, grade, schoolClass, keyWord);
@@ -178,8 +208,8 @@ public class SmartEnrollmentUserController implements SmartEnrollmentUserControl
     }
 
     @Override
+    @DESRespondSecret(validated = true)
     @PassToken
-    @DESRespondSecret(validated = false)
     public CommonResult examine(SmartEnrollmentUserExamineDto dto) throws Exception {
         Integer id = dto.getId();
         String status = dto.getStatus();
@@ -191,124 +221,76 @@ public class SmartEnrollmentUserController implements SmartEnrollmentUserControl
             return CommonResult.fail("学生信息不存在");
         }
 
-        smartEnrollmentUser2.setStatus(status);
-        smartEnrollmentUser2.setRemark(remark);
 
-//        smartEnrollmentUserService.updateById(smartEnrollmentUser2);
-
-//        获取
-//        家长信息
+//        获取家长信息
         Integer userId = smartEnrollmentUser2.getId();
 
         List<SmartEnrollmentUser> list = smartEnrollmentUserService.getJiaZhang(userId);
 
-        ArrayList<SmartEnrollmentUser> smartEnrollmentUsers = new ArrayList<>();
-        smartEnrollmentUsers.add(smartEnrollmentUser2);
-        smartEnrollmentUsers.addAll(list);
-
-
-        SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
 
         //同意
         if ("1".equals(status)) {
-            for (SmartEnrollmentUser smartEnrollmentUser : smartEnrollmentUsers) {
+            String affiliate="";
+//            需要先添加学生才能添加家长
+            if (ObjectUtils.isNotEmpty(smartEnrollmentUser2)) {
+                SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
+                smartEnrollmentUser2.setStatus(status);
+                smartEnrollmentUser2.setRemark(remark);
 
 //            需要同步到学生表,然后同步到希沃,百胜门禁
                 int useBs = 1;
                 int useXw = 1;
                 SmartGrade gradeData = null;
                 SmartClass classData = null;
-                if (org.springframework.util.StringUtils.hasText(smartEnrollmentUser.getCardNo())) {
+                if (org.springframework.util.StringUtils.hasText(smartEnrollmentUser2.getCardNo())) {
                     //重复性判断
-                    int existCount = smartUserService.querySmartUserByCardNo(smartEnrollmentUser.getCardNo());
+                    int existCount = smartUserService.querySmartUserByCardNo(smartEnrollmentUser2.getCardNo());
                     if (existCount > 0) {
                         return CommonResult.fail("当前学号已存在,请勿重复添加");
                     }
                 }
 
                 SmartUser su = new SmartUser();
-                su.setTimeGroupId(smartEnrollmentUser.getTimeGroupId());
-                su.setCardNo(smartEnrollmentUser.getCardNo());
-                su.setName(smartEnrollmentUser.getName());
-                su.setIdentityId(smartEnrollmentUser.getIdentityId());
-                su.setIdCard(smartEnrollmentUser.getIdCard());
-                su.setSexId(smartEnrollmentUser.getSexId());
-                su.setDepartmentId(smartEnrollmentUser.getDepartmentId());
-                su.setHeadImage(smartEnrollmentUser.getHeadImage());
-                su.setGrade(smartEnrollmentUser.getGrade());
-                su.setSchoolClass(smartEnrollmentUser.getSchoolClass());
-                su.setPhone(smartEnrollmentUser.getPhone());
-                su.setAffiliate(smartEnrollmentUser.getAffiliate());
+                su.setTimeGroupId(smartEnrollmentUser2.getTimeGroupId());
+                su.setCardNo(smartEnrollmentUser2.getCardNo());
+                su.setName(smartEnrollmentUser2.getName());
+                su.setIdentityId(smartEnrollmentUser2.getIdentityId());
+                su.setIdCard(smartEnrollmentUser2.getIdCard());
+                su.setSexId(smartEnrollmentUser2.getSexId());
+                su.setDepartmentId(smartEnrollmentUser2.getDepartmentId());
+                su.setHeadImage(smartEnrollmentUser2.getHeadImage());
+                su.setGrade(smartEnrollmentUser2.getGrade());
+                su.setSchoolClass(smartEnrollmentUser2.getSchoolClass());
+                su.setPhone(smartEnrollmentUser2.getPhone());
+                su.setAffiliate(smartEnrollmentUser2.getAffiliate());
                 su.setIsCancel(eLogOff.Unlogout.getValue());
 
-                //region 人员信息加入到第三方api
-                //要将用户数据加入到希沃和百胜中
-                //希沃和百胜的老师、学生数据添加是不一样的,所以按身份添加
-                if (smartEnrollmentUser.getIdentityId().intValue() == eIdentityStatu.Parent.getValue()) {//家长
-
-                    //region 家长参数必填判断:手机号
-                    if (smartEnrollmentUser.getPhone() == null) {
-                        return CommonResult.fail("家长手机号不能为空");
-                    }
-                    //endregion
-
-                    //查找家长身份是否存在用了该手机号的用户
-//                    int existCount = smartUserService.queryParentByCount(smartEnrollmentUser.getPhone());
-//                    if (existCount > 0) {
-//                        return CommonResult.fail("当前手机号已被其他家长使用");
-//                    }
-
-                    //拿到被关联学生的信息去获取对应的卡号
-                    //有多个学生就循环学生
-
-                    if (smartEnrollmentUser.getAffiliate() == null) {
-                        return CommonResult.fail("被关联人不能为空");
-                    }
-                    String affiliate = smartEnrollmentUser.getAffiliate();
-                    String[] split = affiliate.split(",");
-                    ArrayList<String> affiliateList = new ArrayList<>();
-                    affiliateList.addAll(Arrays.asList(split));
-                    if (affiliateList.size() <= 0) {
-                        return CommonResult.fail("被关联人不能为空");
-                    }
-
-                    List<SmartUser> studentDatas = smartUserService.getSmartUserIds(affiliateList);
-
-                    //region 希沃新增编辑学生家长信息
-                    if (useXw == 1) {
-                        CommonResult insertOrUpdateStudent = smartUserController.insertOrUpdateStudentParent(seewoClient, studentDatas, "其他", smartEnrollmentUser.getPhone(), true);
-                        if (!insertOrUpdateStudent.isSuccess()) {
-                            return CommonResult.fail("希沃平台:" + insertOrUpdateStudent.getMessage());
-                        }
-                    }
-                    //endregion
-
-                } else if (smartEnrollmentUser.getIdentityId().intValue() == eIdentityStatu.Student.getValue()) {//学生
+                if (smartEnrollmentUser2.getIdentityId() == eIdentityStatu.Student.getValue()) {//学生
 
                     //region 学生参数必填判断:年级、班级
-                    if (smartEnrollmentUser.getGrade() == null) {
+                    if (smartEnrollmentUser2.getGrade() == null) {
                         return CommonResult.fail("学生年级不能为空");
                     }
 
-                    if (smartEnrollmentUser.getSchoolClass() == null) {
+                    if (smartEnrollmentUser2.getSchoolClass() == null) {
                         return CommonResult.fail("学生班级不能为空");
                     }
                     //endregion
 
                     //获取班级Uid
-                    classData = smartClassService.getSmartClassById(smartEnrollmentUser.getSchoolClass());
+                    classData = smartClassService.getSmartClassById(smartEnrollmentUser2.getSchoolClass());
                     if (classData == null) {
                         return CommonResult.fail("班级数据无效,新增失败");
                     }
 
-                    gradeData = smartGradeService.querySmartGradeById(su.getGrade() == null || su.getGrade() == "" ? null : Integer.valueOf(smartEnrollmentUser.getGrade()));
+                    gradeData = smartGradeService.querySmartGradeById(su.getGrade() == null || su.getGrade() == "" ? null : Integer.valueOf(smartEnrollmentUser2.getGrade()));
                     if (gradeData == null) {
                         return CommonResult.fail("年级数据无效,新增失败");
                     }
 
                     //region 希沃新增学生信息
                     if (useXw == 1) {
-                        CommonResult<String> insertStudent = smartUserController.SeewoInsertStudent(seewoClient, smartEnrollmentUser.getName(), smartEnrollmentUser.getCardNo(), smartEnrollmentUser.getSexId(), smartEnrollmentUser.getPhone(), classData.getClassUid());
+                        CommonResult<String> insertStudent = smartUserController.SeewoInsertStudent(seewoClient, smartEnrollmentUser2.getName(), smartEnrollmentUser2.getCardNo(), smartEnrollmentUser2.getSexId(), smartEnrollmentUser2.getPhone(), classData.getClassUid());
                         if (!insertStudent.isSuccess()) {
                             return CommonResult.fail("希沃平台:" + insertStudent.getMessage());
                         }
@@ -335,7 +317,7 @@ public class SmartEnrollmentUserController implements SmartEnrollmentUserControl
                          */
                         String startTime = TimeExchange.DateToString(new Date(), "yyyy-MM-dd HH:mm:ss");
                         String endTime = smartUserController.queryGraduationYear(gradeData.getGradeNo());
-                        CommonResult<String> insertBsStudent = smartUserController.bsInsertStudent(smartEnrollmentUser.getName(), smartEnrollmentUser.getCardNo(), smartEnrollmentUser.getSexId(), smartEnrollmentUser.getHeadImage(), smartEnrollmentUser.getTimeGroupId(), classData.getBsClassNo(), startTime, endTime, smartEnrollmentUser.getIdCard());
+                        CommonResult<String> insertBsStudent = bsInsertStudent(smartEnrollmentUser2.getName(), smartEnrollmentUser2.getCardNo(), smartEnrollmentUser2.getSexId(), smartEnrollmentUser2.getHeadImage(), smartEnrollmentUser2.getTimeGroupId(), classData.getBsClassNo(), startTime, endTime, smartEnrollmentUser2.getIdCard());
                         if (!insertBsStudent.isSuccess()) {
                             return CommonResult.fail("百胜平台:" + insertBsStudent.getMessage());
                         }
@@ -345,9 +327,9 @@ public class SmartEnrollmentUserController implements SmartEnrollmentUserControl
 
 
                 //最后都要把数据加入到数据库中
-                if (org.springframework.util.StringUtils.hasText(smartEnrollmentUser.getPhone())) {
+                if (org.springframework.util.StringUtils.hasText(smartEnrollmentUser2.getPhone())) {
                     //多身份
-                    List<SmartUser> users = smartUserService.getPhoneUsers(smartEnrollmentUser.getPhone());
+                    List<SmartUser> users = smartUserService.getPhoneUsers(smartEnrollmentUser2.getPhone());
                     if (users != null && users.size() > 0) {
                         Optional<SmartUser> ownerUser = users.stream().filter(e -> org.springframework.util.StringUtils.hasText(e.getXOpenId())).findFirst();
                         if (ownerUser != null && ownerUser.isPresent()) {
@@ -358,6 +340,10 @@ public class SmartEnrollmentUserController implements SmartEnrollmentUserControl
 
                 int result = smartUserService.insertSmartUser(su);
 
+                affiliate=su.getId()+"";
+                smartEnrollmentUser2.setUserAffiliate(affiliate);
+                smartEnrollmentUserService.updateById(smartEnrollmentUser2);
+
                 if (result > 0) {
                     //        将添加的用户同步到海康平台
                     Integer identityId = su.getIdentityId();
@@ -373,7 +359,118 @@ public class SmartEnrollmentUserController implements SmartEnrollmentUserControl
                 }
             }
 
-        }else {//拒绝
+
+
+            for (SmartEnrollmentUser smartEnrollmentUser : list) {
+                SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
+                smartEnrollmentUser.setStatus(status);
+                smartEnrollmentUser.setRemark(remark);
+
+//            需要同步到学生表,然后同步到希沃,百胜门禁
+                int useBs = 1;
+                int useXw = 1;
+                SmartGrade gradeData = null;
+                SmartClass classData = null;
+                if (org.springframework.util.StringUtils.hasText(smartEnrollmentUser.getCardNo())) {
+                    //重复性判断
+                    int existCount = smartUserService.querySmartUserByCardNo(smartEnrollmentUser.getCardNo());
+                    if (existCount > 0) {
+                        return CommonResult.fail("当前学号已存在,请勿重复添加");
+                    }
+                }
+
+                SmartUser su = new SmartUser();
+                su.setTimeGroupId(smartEnrollmentUser.getTimeGroupId());
+                su.setCardNo(smartEnrollmentUser.getCardNo());
+                su.setName(smartEnrollmentUser.getName());
+                su.setIdentityId(smartEnrollmentUser.getIdentityId());
+                su.setIdCard(smartEnrollmentUser.getIdCard());
+                su.setSexId(smartEnrollmentUser.getSexId());
+                su.setDepartmentId(smartEnrollmentUser.getDepartmentId());
+                su.setHeadImage(smartEnrollmentUser.getHeadImage());
+                su.setGrade(smartEnrollmentUser.getGrade());
+                su.setSchoolClass(smartEnrollmentUser.getSchoolClass());
+                su.setPhone(smartEnrollmentUser.getPhone());
+                String userAffiliate = smartEnrollmentUser.getUserAffiliate();
+                if (ObjectUtils.isNotEmpty(userAffiliate)) {
+                    userAffiliate=userAffiliate+","+affiliate;
+                }else {
+                    userAffiliate=affiliate;
+                }
+                smartEnrollmentUser.setUserAffiliate(userAffiliate);
+                su.setAffiliate(userAffiliate);
+                su.setIsCancel(eLogOff.Unlogout.getValue());
+
+                //region 人员信息加入到第三方api
+                //要将用户数据加入到希沃和百胜中
+                //希沃和百胜的老师、学生数据添加是不一样的,所以按身份添加
+                if (smartEnrollmentUser.getIdentityId() == eIdentityStatu.Parent.getValue()) {//家长
+
+                    //region 家长参数必填判断:手机号
+                    if (smartEnrollmentUser.getPhone() == null) {
+                        return CommonResult.fail("家长手机号不能为空");
+                    }
+                    //endregion
+
+                    //查找家长身份是否存在用了该手机号的用户
+//                    int existCount = smartUserService.queryParentByCount(smartEnrollmentUser.getPhone());
+//                    if (existCount > 0) {
+//                        return CommonResult.fail("当前手机号已被其他家长使用");
+//                    }
+
+                    //拿到被关联学生的信息去获取对应的卡号
+                    //有多个学生就循环学生
+
+                    if (smartEnrollmentUser.getAffiliate() == null) {
+                        return CommonResult.fail("被关联人不能为空");
+                    }
+
+                    String[] split = affiliate.split(",");
+                    ArrayList<String> affiliateList = new ArrayList<>();
+                    affiliateList.addAll(Arrays.asList(split));
+                    if (affiliateList.size() <= 0) {
+                        return CommonResult.fail("被关联人不能为空");
+                    }
+
+                    List<SmartUser> studentDatas = smartUserService.getSmartUserIds(affiliateList);
+
+                    //region 希沃新增编辑学生家长信息
+                    if (useXw == 1) {
+                        CommonResult insertOrUpdateStudent = smartUserController.insertOrUpdateStudentParent(seewoClient, studentDatas, "其他", smartEnrollmentUser.getPhone(), true);
+                        if (!insertOrUpdateStudent.isSuccess()) {
+                            return CommonResult.fail("希沃平台:" + insertOrUpdateStudent.getMessage());
+                        }
+                    }
+                    //endregion
+
+                }
+
+
+                //最后都要把数据加入到数据库中
+                if (org.springframework.util.StringUtils.hasText(smartEnrollmentUser.getPhone())) {
+                    //多身份
+                    List<SmartUser> users = smartUserService.getPhoneUsers(smartEnrollmentUser.getPhone());
+                    if (users != null && users.size() > 0) {
+                        Optional<SmartUser> ownerUser = users.stream().filter(e -> org.springframework.util.StringUtils.hasText(e.getXOpenId())).findFirst();
+                        if (ownerUser != null && ownerUser.isPresent()) {
+                            su.setXOpenId(ownerUser.get().getXOpenId());
+                        }
+                    }
+                }
+
+                int result = smartUserService.insertSmartUser(su);
+
+                smartEnrollmentUserService.updateById(smartEnrollmentUser);
+
+            }
+
+
+
+        } else if ("2".equals(status)){//拒绝
+            smartEnrollmentUser2.setStatus(status);
+            smartEnrollmentUser2.setRemark(remark);
+            smartEnrollmentUserService.updateById(smartEnrollmentUser2);
+
 //          需要修改家长信息
             for (int i = 0; i < list.size(); i++) {
                 SmartEnrollmentUser smartEnrollmentUser = list.get(i);
@@ -381,20 +478,20 @@ public class SmartEnrollmentUserController implements SmartEnrollmentUserControl
                 String[] split = affiliate.split(",");
                 ArrayList<String> affiliateList = new ArrayList<>(Arrays.asList(split));
                 affiliateList.remove(String.valueOf(userId));
-                String aff="";
+                String aff = "";
                 for (int j = 0; j < affiliateList.size(); j++) {
                     String s = affiliateList.get(j);
-                    if (j==0) {
-                        aff=s;
-                    }else {
-                        aff=aff+","+s;
+                    if (j == 0) {
+                        aff = s;
+                    } else {
+                        aff = aff + "," + s;
                     }
                 }
                 if (ObjectUtils.isEmpty(aff)) {
 //                    则需要删除
                     smartEnrollmentUserService.removeById(smartEnrollmentUser.getId());
 
-                }else {
+                } else {
 //                    需要修改关系人
                     smartEnrollmentUser.setAffiliate(aff);
                     smartEnrollmentUserService.updateById(smartEnrollmentUser);
@@ -404,15 +501,100 @@ public class SmartEnrollmentUserController implements SmartEnrollmentUserControl
             }
 
         }
-        smartEnrollmentUserService.updateById(smartEnrollmentUser2);
 
+
+        return CommonResult.ok();
+    }
+
+    @Override
+    @PassToken
+    @DESRespondSecret(validated = true)
+    public CommonResult insertTeacherSmartEnrollmentUser(SmartEnrollmentUserSaveDto dto) throws Exception {
+        SmartEnrollmentUser smartEnrollmentUser = new SmartEnrollmentUser();
+        BeanUtils.copyProperties(dto, smartEnrollmentUser);
+
+//        找到对应的年级
+        Integer gradeId = dto.getGradeId();
+
+        SmartGrade smartGrade = smartGradeService.getById(gradeId);
+        if (ObjectUtils.isEmpty(smartGrade)) {
+            return CommonResult.fail("年级不存在");
+        }
+        smartEnrollmentUser.setGrade(smartGrade.getId() + "");
+
+//        找到对应的班级
+        Integer classId = dto.getClassId();
+        SmartClass smartClass = smartClassService.getById(classId);
+        if (ObjectUtils.isEmpty(smartClass)) {
+            return CommonResult.fail("班级不存在");
+        }
+        smartEnrollmentUser.setSchoolClass(smartClass.getId());
+
+        smartEnrollmentUser.setStatus("0");
+        smartEnrollmentUser.setIsCancel(0);
+        smartEnrollmentUser.setIdentityId(2);
+
+//        获取学号
+        String schoolClassName = smartClass.getName();
+        String gradeName = smartGrade.getName();
+        String year = gradeName.replace("级", "");
+        String[] s = schoolClassName.split("级");
+        if (s.length < 2) {
+            return CommonResult.fail("获取学号异常");
+        }
+        String s1 = s[1];
+        if (ObjectUtils.isEmpty(s1)) {
+            return CommonResult.fail("获取学号异常");
+        }
+        String[] s2 = s1.split("班");
+        String s3 = s2[0];
+        if (ObjectUtils.isEmpty(s3)) {
+            return CommonResult.fail("获取学号异常");
+        }
+        LambdaQueryWrapper<SmartUser> wrapperCount = new LambdaQueryWrapper<>();
+        wrapperCount.eq(SmartUser::getIdentityId, 2)
+                .eq(SmartUser::getGrade, smartGrade.getId())
+                .eq(SmartUser::getSchoolClass, smartClass.getId());
+        int count = smartUserService.count(wrapperCount);
+        String cardNo = cardNo(year,s3, count + 1);
+
+        smartEnrollmentUser.setCardNo(cardNo);
+
+        smartEnrollmentUserService.save(smartEnrollmentUser);
+
+        List<SmartEnrollmentUser> list = dto.getList();
+        for (SmartEnrollmentUser enrollmentUser : list) {
+//            判断该父母是否已存在
+            String phone = enrollmentUser.getPhone();
+            LambdaQueryWrapper<SmartEnrollmentUser> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(SmartEnrollmentUser::getPhone, phone);
+            SmartEnrollmentUser user = smartEnrollmentUserService.getOne(wrapper);
+
+
+            if (ObjectUtils.isEmpty(user)) {
+                enrollmentUser.setSexId(1);
+                enrollmentUser.setAffiliate(smartEnrollmentUser.getId() + "");
+                enrollmentUser.setStatus("0");
+                enrollmentUser.setIsCancel(0);
+
+                enrollmentUser.setIdentityId(1);
+                smartEnrollmentUserService.save(enrollmentUser);
+            } else {
+                String affiliate = user.getAffiliate();
+                user.setAffiliate(affiliate + "," + smartEnrollmentUser.getId() + "");
+                smartEnrollmentUserService.save(user);
+            }
+
+        }
+        SmartEnrollmentUserExamineDto smartEnrollmentUserExamineDto = new SmartEnrollmentUserExamineDto();
+        smartEnrollmentUserExamineDto.setId(smartEnrollmentUser.getId());
+        smartEnrollmentUserExamineDto.setStatus("1");
+        smartEnrollmentUserExamineDto.setRemark("老师添加");
+        examine(smartEnrollmentUserExamineDto);
         return CommonResult.ok();
     }
 
-    public static String cardNo(String grade, Integer count) {
-        Calendar calendar = Calendar.getInstance();
-        // 获取当前年
-        int year = calendar.get(Calendar.YEAR);
+    public static String cardNo(String year,String grade, Integer count) {
         if (grade.length() < 2) {
             Integer i = 2 - grade.length();
             for (int j = 0; j < i; j++) {
@@ -420,7 +602,7 @@ public class SmartEnrollmentUserController implements SmartEnrollmentUserControl
             }
         }
 
-        String card = year + "" + grade;
+        String card = year+grade;
         String s = "";
         if (count < 10) {
             s = "0" + count + "";
@@ -431,7 +613,55 @@ public class SmartEnrollmentUserController implements SmartEnrollmentUserControl
         return cardNo;
     }
 
+    public CommonResult<String> bsInsertStudent(String name, String cardNo, Integer sexId, String
+            headImage, Integer timeGroupId, String bsClassNo, String startDate, String endDate, String idCard) throws
+            Exception {
+        //region 百胜新增学生信息
+        String appId = controlConfig.getAppId();
+        String schoolno = controlConfig.getSchoolCode();
+        String timestamp = TimeExchange.DateNowTimeStamo();
+        String appSecret = controlConfig.getAppSecret();
+        String url = controlConfig.getUrl() + "student/create";
+
+        String idCardStr = org.springframework.util.StringUtils.hasText(idCard) ? "\",\"student_idcard\":\"" + idCard : "\",\"student_idcard\":\"" + "";
+
+        String bsGroupNo = eGroupTime(timeGroupId);
+        JSONObject jsonobject = new JSONObject();
+        jsonobject.put("appid", appId);
+        String str = "{\"student_name\":\"" + name + "\",\"classtab_no\":\"" + bsClassNo + "\",\"student_number\":\"" + cardNo + "\",\"student_sex\":\"" + sexId + idCardStr + "\",\"student_photo\":\"" + imageUtils.getBase64Url(headImage) + "\",\"student_startdate\":\"" + startDate + "\",\"student_effdate\":\"" + endDate + "\",\"student_tgno\":\"" + bsGroupNo + "\"}";
+        String aesStr = URLEncoder.encode(AesTestOne.encrypt(str, controlConfig.getAppSecret()), "UTF-8");
+        jsonobject.put("data", aesStr);
+        jsonobject.put("schoolno", schoolno);
+        jsonobject.put("timestamp", timestamp);
+
+        String md5Str = "appid=" + appId + "&data={\"student_name\":\"" + name + "\",\"classtab_no\":\"" + bsClassNo + "\",\"student_number\":\"" + cardNo + "\",\"student_sex\":\"" + sexId + idCardStr + "\",\"student_photo\":\"" + imageUtils.getBase64Url(headImage) + "\",\"student_startdate\":\"" + startDate + "\",\"student_effdate\":\"" + endDate + "\",\"student_tgno\":\"" + bsGroupNo + "\"}" + "&schoolno=" + schoolno + "&timestamp=" + timestamp + "&key=" + appSecret;
+        String sign = CommonUtil.MD5(md5Str);
+        //sign签名
+        jsonobject.put("sign", sign);
+
+        //返回的结果中 code为1表示成功
+        String bsResult = RequestUtils.httpPost(url, jsonobject.toJSONString());
+
+        ObjectMapper objectMapper = new ObjectMapper();
+        BsStudentVo grade = objectMapper.readValue(bsResult, BsStudentVo.class);
+
+        if (!bsResult.contains("添加成功")) {
+            return CommonResult.fail("百胜平台:" + grade.getMsg());
+        }
+
+        // URL解码
+        String decodedUrl = URLDecoder.decode(grade.getData(), "UTF-8");
+
+        BsStudentNoVo studentNo = objectMapper.readValue(decrypt(decodedUrl, controlConfig.getAppSecret()), BsStudentNoVo.class);
 
+        return CommonResult.ok("200", "新增成功", studentNo.getStudent_no());
+        //endregion
+    }
+
+    public String eGroupTime(Integer id) {
+        SmartTimeGroup result = smartTimeGroupService.queryTimeGroupById(id);
+        return result == null ? "" : result.getBsno();
+    }
 
 }
 

+ 128 - 13
src/main/java/com/template/controller/SmartFaceDiscernController.java

@@ -98,6 +98,16 @@ public class SmartFaceDiscernController implements SmartFaceDiscernControllerAPI
     @Autowired
     SmartCoordService smartCoordService;
 
+
+    @Autowired
+    SmartLateService smartLateService;
+
+    @Autowired
+    SmartLateSettingService smartLateSettingService;
+
+    @Autowired
+    SmartLateTimeService smartLateTimeService;
+
     @Override
     @DESRespondSecret(validated = true)
     public CommonResult track(Integer id, String startTime, String endTime) {
@@ -212,8 +222,8 @@ public class SmartFaceDiscernController implements SmartFaceDiscernControllerAPI
             //=0 : A = B
             //>0 : A > B
             int faceDiscernCount = 0;
-            Optional<FaceDiscernVo> oFaceDiscern =smartAccesses.stream().filter(e -> e.getDateStr().equals(dateTime)).findFirst();
-            if(oFaceDiscern != null && oFaceDiscern.isPresent()){
+            Optional<FaceDiscernVo> oFaceDiscern = smartAccesses.stream().filter(e -> e.getDateStr().equals(dateTime)).findFirst();
+            if (oFaceDiscern != null && oFaceDiscern.isPresent()) {
                 faceDiscernCount = oFaceDiscern.get().getCount();
             }
 
@@ -405,6 +415,93 @@ public class SmartFaceDiscernController implements SmartFaceDiscernControllerAPI
                     Integer identityId = smartUser.getIdentityId();
 //                    判断是否是学生
                     if (2 == identityId) {
+
+//                            判断该学生是否迟到,是则需要添加到迟到表中
+//                            获取迟到设置
+                        LambdaQueryWrapper<SmartLateSetting> wrapperLS = new LambdaQueryWrapper<>();
+                        wrapperLS.ge(SmartLateSetting::getEndTime, time)
+                                .le(SmartLateSetting::getStartTime, time);
+                        List<SmartLateSetting> smartLateSettings = smartLateSettingService.list(wrapperLS);
+                        if (ObjectUtils.isNotEmpty(smartLateSettings)) {
+                            SmartLateSetting smartLateSetting = smartLateSettings.get(0);
+                            Integer smartDeviceId = smartLateSetting.getSmartDeviceId();
+                            LambdaQueryWrapper<SmartLateTime> wrapperLT = new LambdaQueryWrapper<>();
+                            wrapperLT.eq(SmartLateTime::getSmartLateSettingId, smartLateSetting.getId());
+                            List<SmartLateTime> smartLateTimes = smartLateTimeService.list(wrapperLT);
+                            for (SmartLateTime smartLateTime : smartLateTimes) {
+//                只有时分秒,缺失年月日
+                                String startTime = smartLateTime.getStartTime();
+                                String endTime = smartLateTime.getEndTime();
+                                Integer gradeId = smartLateTime.getGradeId();
+
+                                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYY-MM-dd");
+                                String format = simpleDateFormat.format(new Date());
+
+                                String start = format + " " + startTime;
+                                String end = format + " " + endTime;
+
+                                LocalDateTime dateTime = LocalDateTime.parse(start, dateTimeFormatter1);
+                                LocalDateTime dateTime1 = LocalDateTime.parse(end, dateTimeFormatter1);
+                                LocalDateTime dateTime3 = LocalDateTime.parse(time, dateTimeFormatter1);
+
+//                                    在迟到时间内
+                                if (dateTime3.isAfter(dateTime) && dateTime1.isAfter(dateTime3)) {
+                                    if (smartDeviceId != 0) {
+                                        SmartDevice smartDevice1 = smartDeviceService.getById(smartDeviceId);
+                                        if (ObjectUtils.isNotEmpty(smartDevice1)) {
+                                            String num = smartDevice1.getNum();
+                                            if (sn.equals(num)) {
+                                                if (gradeId != 0) {
+                                                    String grade = smartUser.getGrade();
+                                                    if (grade.equals(gradeId + "")) {
+                                                        SmartLate smartLate = new SmartLate();
+                                                        smartLate.setUserId(smartFaceDiscern.getUserId());
+                                                        smartLate.setName(smartFaceDiscern.getName());
+                                                        smartLate.setImage(smartFaceDiscern.getImage());
+                                                        smartLate.setDateTime(smartFaceDiscern.getDateTime());
+                                                        smartLate.setClassId(smartUser.getSchoolClass());
+                                                        smartLateService.save(smartLate);
+                                                    }
+                                                } else {
+                                                    SmartLate smartLate = new SmartLate();
+                                                    smartLate.setUserId(smartFaceDiscern.getUserId());
+                                                    smartLate.setName(smartFaceDiscern.getName());
+                                                    smartLate.setImage(smartFaceDiscern.getImage());
+                                                    smartLate.setDateTime(smartFaceDiscern.getDateTime());
+                                                    smartLate.setClassId(smartUser.getSchoolClass());
+                                                    smartLateService.save(smartLate);
+                                                }
+                                            }
+
+                                        }
+
+                                    } else {
+                                        if (gradeId != 0) {
+                                            String grade = smartUser.getGrade();
+                                            if (grade.equals(gradeId + "")) {
+                                                SmartLate smartLate = new SmartLate();
+                                                smartLate.setUserId(smartFaceDiscern.getUserId());
+                                                smartLate.setName(smartFaceDiscern.getName());
+                                                smartLate.setImage(smartFaceDiscern.getImage());
+                                                smartLate.setDateTime(smartFaceDiscern.getDateTime());
+                                                smartLate.setClassId(smartUser.getSchoolClass());
+                                                smartLateService.save(smartLate);
+                                            }
+                                        } else {
+                                            SmartLate smartLate = new SmartLate();
+                                            smartLate.setUserId(smartFaceDiscern.getUserId());
+                                            smartLate.setName(smartFaceDiscern.getName());
+                                            smartLate.setImage(smartFaceDiscern.getImage());
+                                            smartLate.setDateTime(smartFaceDiscern.getDateTime());
+                                            smartLate.setClassId(smartUser.getSchoolClass());
+                                            smartLateService.save(smartLate);
+                                        }
+                                    }
+                                }
+
+                            }
+                        }
+
                         //                    获取推送配置
                         List<SmartPushConfig> pushConfigs = smartPushConfigService.list(new LambdaQueryWrapper<>());
                         SmartPushConfig smartPushConfig = pushConfigs.get(0);
@@ -412,6 +509,7 @@ public class SmartFaceDiscernController implements SmartFaceDiscernControllerAPI
                         Integer chargeTeacherPush = smartPushConfig.getChargeTeacherPush();
 
                         if (parentsPush == 1) {
+
 //                        通过学生id找到关联的家长affiliate,并找到公众号,如果openid为空则不传
                             List<SmartUser> userList = smartUserService.getAffiliateList(userId);
                             if (ObjectUtils.isNotEmpty(userList) && userList.size() > 0) {
@@ -544,6 +642,7 @@ public class SmartFaceDiscernController implements SmartFaceDiscernControllerAPI
         return r.toJSONString();
     }
 
+
     @Override
     @DESRespondSecret(validated = true)
     public CommonResult selectTrack(Integer userId, String startTime, String endTime) {
@@ -618,10 +717,11 @@ public class SmartFaceDiscernController implements SmartFaceDiscernControllerAPI
         }
 
 //        排序
-        Collections.sort(vos, Comparator.comparing((h) -> {
-            return h.getDateTime();
-        }));
-
+//        Collections.sort(vos, Comparator.comparing((h) -> {
+//            return h.getDateTime();
+//        }));
+//      按照时间倒叙
+        Collections.sort(vos,Comparator.comparing(SelectTrackVo::getDateTime,(t1,t2)->t2.compareTo(t1)));
 
         return CommonResult.ok(vos);
     }
@@ -694,15 +794,30 @@ public class SmartFaceDiscernController implements SmartFaceDiscernControllerAPI
     }
 
     public static void main(String[] args) {
-        LocalDateTime dateTime1 = LocalDateTime.of(2022, 8, 29, 12, 0, 0);
-        LocalDateTime dateTime2 = LocalDateTime.of(2022, 8, 30, 12, 0, 0);
-        LocalDateTime dateTime3 = LocalDateTime.of(2022, 8, 28, 12, 0, 0);
+//        LocalDateTime dateTime1 = LocalDateTime.of(2022, 8, 29, 12, 0, 0);
+//        LocalDateTime dateTime2 = LocalDateTime.of(2022, 8, 30, 12, 0, 0);
+//        LocalDateTime dateTime3 = LocalDateTime.of(2022, 8, 28, 12, 0, 0);
+//
+//        boolean isBefore = dateTime1.isBefore(dateTime2);
+//        boolean isBefore2 = dateTime1.isBefore(dateTime3);
+//
+//        System.out.println("dateTime1 is before dateTime2: " + isBefore);
+//        System.out.println("dateTime1 is before dateTime2: " + isBefore2);
 
-        boolean isBefore = dateTime1.isBefore(dateTime2);
-        boolean isBefore2 = dateTime1.isBefore(dateTime3);
+        DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        String start = "2025-02-25 11:00:00";
+        String end = "2025-02-25 15:00:00";
+        String time = "2025-02-25 11:01:00";
+        LocalDateTime dateTime = LocalDateTime.parse(start, dateTimeFormatter1);
+        LocalDateTime dateTime1 = LocalDateTime.parse(end, dateTimeFormatter1);
+        LocalDateTime dateTime3 = LocalDateTime.parse(time, dateTimeFormatter1);
 
-        System.out.println("dateTime1 is before dateTime2: " + isBefore);
-        System.out.println("dateTime1 is before dateTime2: " + isBefore2);
+//                                    在迟到时间内
+        if (dateTime3.isAfter(dateTime) && dateTime1.isAfter(dateTime3)) {
+
+        } else {
+
+        }
 
     }
 

+ 16 - 0
src/main/java/com/template/controller/SmartGradeController.java

@@ -4,6 +4,7 @@ package com.template.controller;
 import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.template.annotation.DESRespondSecret;
+import com.template.annotation.PassToken;
 import com.template.api.SmartGradeControllerAPI;
 import com.template.common.utils.*;
 import com.template.config.ControlConfig;
@@ -312,5 +313,20 @@ public class SmartGradeController implements SmartGradeControllerAPI {
         return CommonResult.ok(subjectVos);
     }
 
+    @Override
+    @DESRespondSecret(validated = true)
+    @PassToken
+    public CommonResult querySmartLargeGrades() {
+        List<SmartGrade> datas = smartGradeService.getSmartGrades();
+        List<SemesterVo> result = new ArrayList<>();
+        for (SmartGrade data : datas) {
+            SemesterVo model = new SemesterVo();
+            model.setId(data.getId());
+            model.setName(data.getName());
+            result.add(model);
+        }
+        return CommonResult.ok(result);
+    }
+
 }
 

+ 65 - 0
src/main/java/com/template/controller/SmartLateController.java

@@ -0,0 +1,65 @@
+package com.template.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.template.annotation.DESRespondSecret;
+import com.template.annotation.PassToken;
+import com.template.api.SmartLateControllerAPI;
+import com.template.model.pojo.*;
+import com.template.model.result.CommonResult;
+import com.template.model.result.PageUtils;
+import com.template.model.vo.SmartLateVo;
+import com.template.services.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author ceshi
+ * @since 2025-02-21
+ */
+@RestController
+public class SmartLateController implements SmartLateControllerAPI {
+
+    @Autowired
+    SmartLateService smartLateService;
+
+
+    @Override
+    @DESRespondSecret(validated = true)
+    @PassToken
+    public CommonResult getList(int currentPage, int pageCount, String keyWord, String startTime, String endTime) {
+        PageUtils<SmartLateVo> pageUtils =smartLateService.getList(currentPage,pageCount,keyWord,startTime,endTime);
+        return CommonResult.ok(pageUtils);
+    }
+
+    @Override
+    @DESRespondSecret(validated = true)
+    @PassToken
+    public CommonResult getDelete(int id) {
+        smartLateService.removeById(id);
+        return CommonResult.ok();
+    }
+
+    @Override
+    @DESRespondSecret(validated = true)
+    public CommonResult listApp(int currentPage, int pageCount, Integer classId, String startTime, String endTime) {
+        PageUtils<SmartLateVo> pageUtils =smartLateService.getListApp(currentPage,pageCount,classId,startTime,endTime);
+        return CommonResult.ok(pageUtils);
+    }
+
+
+}
+

+ 176 - 2
src/main/java/com/template/controller/SmartLateSettingController.java

@@ -1,14 +1,36 @@
 package com.template.controller;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.template.annotation.DESRespondSecret;
 import com.template.api.SmartLateSettingControllerAPI;
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.template.common.utils.TimeSlot;
+import com.template.model.dto.SmartLateSettingDto;
+import com.template.model.pojo.SmartLateSetting;
+import com.template.model.pojo.SmartLateTime;
+import com.template.model.result.CommonResult;
+import com.template.model.vo.SmartLateSettingVo;
+import com.template.services.SmartLateSettingService;
+import com.template.services.SmartLateTimeService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 
 import org.springframework.web.bind.annotation.RestController;
 
+import java.time.LocalDate;
+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.Objects;
+
 /**
  * <p>
- *  前端控制器
+ * 前端控制器
  * </p>
  *
  * @author ceshi
@@ -17,5 +39,157 @@ import org.springframework.web.bind.annotation.RestController;
 @RestController
 public class SmartLateSettingController implements SmartLateSettingControllerAPI {
 
+    @Autowired
+    SmartLateSettingService smartLateSettingService;
+
+    @Autowired
+    SmartLateTimeService smartLateTimeService;
+
+    @Override
+    @DESRespondSecret(validated = true)
+    public CommonResult getList() {
+        DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        List<SmartLateSetting> smartLateSettingList = smartLateSettingService.list(new QueryWrapper<>());
+        ArrayList<SmartLateSettingVo> vos = new ArrayList<SmartLateSettingVo>();
+        for (SmartLateSetting smartLateSetting : smartLateSettingList) {
+            SmartLateSettingVo smartLateSettingVo = new SmartLateSettingVo();
+            BeanUtils.copyProperties(smartLateSetting, smartLateSettingVo);
+            Date createTime = smartLateSetting.getCreateTime();
+            LocalDateTime localDateTime = LocalDateTime.ofInstant(createTime.toInstant(), ZoneId.systemDefault());
+            smartLateSettingVo.setCreateTime(localDateTime.format(dateTimeFormatter1));
+            if (ObjectUtils.isNotEmpty(smartLateSetting)) {
+                LambdaQueryWrapper<SmartLateTime> wrapper = new LambdaQueryWrapper<>();
+                wrapper.eq(SmartLateTime::getSmartLateSettingId, smartLateSetting.getId());
+                List<SmartLateTime> list = smartLateTimeService.list(wrapper);
+                smartLateSettingVo.setLateTimes(list);
+                vos.add(smartLateSettingVo);
+            }
+        }
+        return CommonResult.ok(vos);
+    }
+
+    @Override
+    @DESRespondSecret(validated = true)
+    public CommonResult saveOrUpdate(SmartLateSettingDto dto) {
+        Integer id = dto.getId();
+
+//        先判断改时间内是否包含其他时间
+        String startTime = dto.getStartTime();
+        String endTime = dto.getEndTime();
+        List<SmartLateSetting> list = smartLateSettingService.getOverlap(startTime,endTime);
+        if (ObjectUtils.isNotEmpty(list)) {
+            if (ObjectUtils.isEmpty(id)) {
+                return CommonResult.fail("运行周期已重复");
+            }
+            for (SmartLateSetting smartLateSetting : list) {
+                Integer id1 = smartLateSetting.getId();
+                if (!id1.equals(id)) {
+                    return CommonResult.fail("运行周期已重复");
+                }
+            }
+
+        }
+
+
+//        迟到设置时间也不能重叠
+        List<SmartLateTime> lateTimes1 = dto.getLateTimes();
+        List<TimeSlot> slots = new ArrayList<>();
+        // 获取当前日期
+        LocalDate currentDate = LocalDate.now();
+        DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        String time = currentDate.format(dateTimeFormatter2);
+        for (SmartLateTime smartLateTime : lateTimes1) {
+            String startTime1 = smartLateTime.getStartTime();
+            String endTime1 = smartLateTime.getEndTime();
+            LocalDateTime dateTime = LocalDateTime.parse(time + " " + startTime1, dateTimeFormatter1);
+            LocalDateTime dateTime2 = LocalDateTime.parse(time + " " + endTime1, dateTimeFormatter1);
+            TimeSlot timeSlot = new TimeSlot(dateTime,dateTime2);
+            slots.add(timeSlot);
+        }
+
+        for (int i = 0; i < slots.size(); i++) {
+            for (int j = i + 1; j < slots.size(); j++) {
+                if (TimeSlot.overlaps(slots.get(i), slots.get(j))) {
+                    return CommonResult.fail("迟到时间已重复");
+                }
+            }
+        }
+
+        if (ObjectUtils.isNotEmpty(id)) {
+            SmartLateSetting smartLateSetting = smartLateSettingService.getById(id);
+            if (ObjectUtils.isEmpty(smartLateSetting)) {
+                return CommonResult.fail("不存在该配置");
+            }
+            smartLateSetting.setStartTime(dto.getStartTime());
+            smartLateSetting.setEndTime(dto.getEndTime());
+            smartLateSetting.setSmartDeviceId(dto.getSmartDeviceId());
+            smartLateSetting.setName(dto.getName());
+            smartLateSettingService.updateById(smartLateSetting);
+
+            List<SmartLateTime> lateTimes = dto.getLateTimes();
+
+//            先删除迟到时间配置
+            LambdaQueryWrapper<SmartLateTime> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(SmartLateTime::getSmartLateSettingId, smartLateSetting.getId());
+            smartLateTimeService.remove(wrapper);
+            smartLateTimeService.saveBatch(lateTimes);
+            return CommonResult.ok();
+        } else {
+
+            SmartLateSetting smartLateSetting = new SmartLateSetting();
+            smartLateSetting.setStartTime(dto.getStartTime());
+            smartLateSetting.setEndTime(dto.getEndTime());
+            smartLateSetting.setSmartDeviceId(dto.getSmartDeviceId());
+            smartLateSetting.setName(dto.getName());
+            smartLateSettingService.save(smartLateSetting);
+            List<SmartLateTime> lateTimes = dto.getLateTimes();
+            for (int i = 0; i < lateTimes.size(); i++) {
+                SmartLateTime smartLateTime = lateTimes.get(i);
+                smartLateTime.setSmartLateSettingId(smartLateSetting.getId());
+            }
+            smartLateTimeService.saveBatch(lateTimes);
+            return CommonResult.ok();
+        }
+    }
+
+
+    public static void main(String[] args) {
+        List<TimeSlot> slots = new ArrayList<>();
+        slots.add(new TimeSlot(LocalDateTime.of(2023, 1, 1, 9, 0), LocalDateTime.of(2023, 1, 1, 12, 0))); // 9am to 12pm
+        slots.add(new TimeSlot(LocalDateTime.of(2023, 1, 1, 13, 0), LocalDateTime.of(2023, 1, 1, 15, 0))); // 1pm to 3pm
+        slots.add(new TimeSlot(LocalDateTime.of(2023, 1, 1, 14, 0), LocalDateTime.of(2023, 1, 1, 16, 0))); // 2pm to 4pm
+        slots.add(new TimeSlot(LocalDateTime.of(2023, 1, 1, 8, 0), LocalDateTime.of(2023, 1, 1, 9, 30))); // 8am to 9:30am
+
+        boolean hasOverlap = false;
+        for (int i = 0; i < slots.size(); i++) {
+            for (int j = i + 1; j < slots.size(); j++) {
+                if (TimeSlot.overlaps(slots.get(i), slots.get(j))) {
+                    System.out.println("Overlap found between " + slots.get(i).getStartTime() + " and " + slots.get(j).getStartTime());
+                    hasOverlap = true;
+                }
+            }
+        }
+        if (!hasOverlap) {
+            System.out.println("No overlap found.");
+        }
+    }
+
+
+    @Override
+    @DESRespondSecret(validated = true)
+    public CommonResult delete(Integer id) {
+        SmartLateSetting smartLateSetting = smartLateSettingService.getById(id);
+        if (ObjectUtils.isEmpty(smartLateSetting)) {
+            return CommonResult.fail("不存在该配置");
+        }
+        //            先删除迟到时间配置
+        LambdaQueryWrapper<SmartLateTime> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SmartLateTime::getSmartLateSettingId, smartLateSetting.getId());
+        smartLateTimeService.remove(wrapper);
+        smartLateSettingService.removeById(id);
+
+        return CommonResult.ok();
+    }
 }
 

+ 64 - 4
src/main/java/com/template/controller/SmartSchoolSettingController.java

@@ -2,6 +2,9 @@ package com.template.controller;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.template.annotation.DESRespondSecret;
+import com.template.annotation.PassToken;
 import com.template.api.SmartSchoolSettingControllerAPI;
 import com.template.model.pojo.SmartSchoolSetting;
 import com.template.model.result.CommonResult;
@@ -11,6 +14,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 /**
  * <p>
  *  前端控制器
@@ -26,17 +31,72 @@ public class SmartSchoolSettingController implements SmartSchoolSettingControlle
     SmartSchoolSettingService smartSchoolSettingService;
 
     @Override
+    @DESRespondSecret(validated = true)
     public CommonResult getList() {
 
-        SmartSchoolSetting smartSchoolSetting = smartSchoolSettingService.list(new QueryWrapper<>()).get(0);
-
-        return CommonResult.ok(smartSchoolSetting);
+        List<SmartSchoolSetting> smartSchoolSettings = smartSchoolSettingService.list(new QueryWrapper<>());
+        if (ObjectUtils.isNotEmpty(smartSchoolSettings)) {
+            return CommonResult.ok(smartSchoolSettings.get(0));
+        }
+        return CommonResult.ok(smartSchoolSettings);
     }
 
     @Override
+    @DESRespondSecret(validated = true)
     public CommonResult saveOrUpdate(SmartSchoolSetting smartSchoolSetting) {
+        Integer id = smartSchoolSetting.getId();
+        String progressingTime = smartSchoolSetting.getProgressingTime();
+
+
+        String[] split = progressingTime.split("-");
+        StringBuilder progressingTime2= null;
+        for (int i = 0; i < split.length; i++) {
+            String s = split[i];
+            if (i==0) {
+                if (s.length()<2) {
+                    progressingTime2 = new StringBuilder("0" + s);
+                }else {
+                    progressingTime2 = new StringBuilder(s + "");
+                }
+            }else {
+                if (s.length()<2) {
+                    progressingTime2.append("-").append("0").append(s);
+                }else {
+                    progressingTime2.append("-").append(s);
+                }
+            }
+        }
+
+        String graduateTime = smartSchoolSetting.getGraduateTime();
+        String[] split2 = graduateTime.split("-");
+
+        StringBuilder graduateTime2= null;
+        for (int i = 0; i < split2.length; i++) {
+            String s = split2[i];
+            if (i==0) {
+                if (s.length()<2) {
+                    graduateTime2 = new StringBuilder("0" + s);
+                }else {
+                    graduateTime2 = new StringBuilder(s + "");
+                }
+            }else {
+                if (s.length()<2) {
+                    graduateTime2.append("-").append("0").append(s);
+                }else {
+                    graduateTime2.append("-").append(s);
+                }
+            }
+        }
+
+        smartSchoolSetting.setProgressingTime(progressingTime2.toString());
+        smartSchoolSetting.setGraduateTime(graduateTime2.toString());
+
+        if (ObjectUtils.isNotEmpty(id)) {
+            smartSchoolSettingService.updateById(smartSchoolSetting);
+        }else {
+            smartSchoolSettingService.save(smartSchoolSetting);
+        }
 
-        smartSchoolSettingService.saveOrUpdate(smartSchoolSetting);
 
         return CommonResult.ok();
     }

+ 480 - 20
src/main/java/com/template/controller/SmartUserController.java

@@ -21,6 +21,8 @@ import com.template.api.SmartUserControllerAPI;
 import com.template.common.utils.*;
 import com.template.config.ControlConfig;
 import com.template.config.SeewoConfig;
+import com.template.model.dto.AppRemoveClassDro;
+import com.template.model.dto.AppSaveClassDto;
 import com.template.model.enumModel.*;
 import com.template.model.evaluate.teacher.SmartEvaluateTeacher;
 import com.template.model.pojo.*;
@@ -3891,6 +3893,8 @@ public class SmartUserController implements SmartUserControllerAPI {
         su.setGraduate(isur.getGraduate());
         su.setDuties(isur.getDuties());
         su.setIsCancel(eLogOff.Unlogout.getValue());
+        su.setManageGrade(isur.getManageGrade());
+        su.setManageSchoolClass(isur.getManageSchoolClass());
 
         //region 人员信息加入到第三方api
         //要将用户数据加入到希沃和百胜中
@@ -4023,8 +4027,10 @@ public class SmartUserController implements SmartUserControllerAPI {
                 }
             }
             //endregion
-
-            if (isur.getDuties().intValue() == eDuties.ClassTeacher.getValue()) {
+            Integer identityId = isur.getIdentityId();
+//            if (isur.getDuties().intValue() == eDuties.ClassTeacher.getValue()) {
+//            身份20的是班主任
+            if (identityId == 20) {
                 //获取班级Uid
                 classData = smartClassService.getSmartClassById(isur.getSchoolClass());
                 if (classData == null) {
@@ -4199,7 +4205,10 @@ public class SmartUserController implements SmartUserControllerAPI {
             boolean changeIdentity = false;
             Integer oldIdentity = null;
             String oldAffiliate = su.getAffiliate();
-            Integer oldSchoolClass = su.getSchoolClass();
+            Integer oldSchoolClass = su.getOldSchoolClass();
+            if (ObjectUtils.isEmpty(oldSchoolClass)) {
+                oldSchoolClass = su.getSchoolClass();
+            }
             String oldStaffNo = su.getBsStaffCode();
             String oldCardNo = su.getCardNo();
             if (usur.getIdentityId().intValue() != su.getIdentityId().intValue()) {
@@ -4392,7 +4401,11 @@ public class SmartUserController implements SmartUserControllerAPI {
         boolean changeIdentity = false;
         Integer oldIdentity = null;
         String oldAffiliate = su.getAffiliate();
-        Integer oldSchoolClass = su.getSchoolClass();
+        Integer oldSchoolClass = su.getOldSchoolClass();
+        if (ObjectUtils.isEmpty(oldSchoolClass)) {
+           oldSchoolClass = su.getSchoolClass();
+        }
+
         String oldStaffNo = su.getBsStaffCode();
         String oldCardNo = su.getCardNo();
         if (usur.getIdentityId().intValue() != su.getIdentityId().intValue()) {
@@ -4424,6 +4437,8 @@ public class SmartUserController implements SmartUserControllerAPI {
         su.setGraduate(usur.getGraduate());
         su.setDuties(usur.getDuties());
         su.setIsCancel(eLogOff.Unlogout.getValue());
+        su.setManageGrade(usur.getManageGrade());
+        su.setManageSchoolClass(usur.getManageSchoolClass());
 
         if (usur.getIdentityId().intValue() == eIdentityStatu.Parent.getValue()) {//家长
             //拿到被关联学生的信息去获取对应的卡号
@@ -6134,7 +6149,7 @@ public class SmartUserController implements SmartUserControllerAPI {
     @Override
     @DESRespondSecret(validated = true)
     public CommonResult queryPageSmartUser(int currentPage, int pageCount, Integer departmentId, String
-            name, String userhead) {
+            name,Integer ifGraduate, String userhead) {
         //region 角色判断
         String userID = AesUtils.decrypt(userhead);
         SmartUser operateData = smartUserService.getSmartById(Integer.valueOf(userID));
@@ -6192,7 +6207,7 @@ public class SmartUserController implements SmartUserControllerAPI {
 
         PageUtils<UserVo> result = null;
         if (authDepartments != null && authDepartments.size() > 0) {
-            result = smartUserService.querySmartUserPages(currentPage, pageCount, authDepartments, name);
+            result = smartUserService.querySmartUserPages(currentPage, pageCount, authDepartments, name,ifGraduate);
         } else {
             IPage<UserVo> userData = new Page<>();
             result = new PageUtils<UserVo>(userData);
@@ -6276,6 +6291,45 @@ public class SmartUserController implements SmartUserControllerAPI {
                     }
                 }
                 data.setAffiliates(datas);
+
+                String manageGrade = data.getManageGrade();
+                String manageSchoolClass = data.getManageSchoolClass();
+                if (ObjectUtils.isNotEmpty(manageGrade) && ObjectUtils.isNotEmpty(manageSchoolClass)) {
+                    String[] split = manageGrade.split(",");
+                    ArrayList<Integer> gradeIds = new ArrayList<>();
+                    for (String s : split) {
+                        gradeIds.add(Integer.valueOf(s));
+                    }
+                    data.setManageGradeIds(gradeIds);
+
+
+                    String[] split2 = manageSchoolClass.split(",");
+                    ArrayList<Integer> classIds = new ArrayList<>();
+                    for (String s : split2) {
+                        classIds.add(Integer.valueOf(s));
+                    }
+
+                    data.setManageSchoolClassIds(classIds);
+
+
+                    LambdaQueryWrapper<SmartClass> wrapper=new LambdaQueryWrapper<>();
+                    wrapper.in(SmartClass::getId,classIds);
+                    List<SmartClass> list = smartClassService.list(wrapper);
+
+                    ArrayList<ManageClassGroupVo> vos = new ArrayList<>();
+                    for (Integer gradeId : gradeIds) {
+                        List<SmartClass> smartClasses=list.stream().filter(e->e.getGradeId().equals(gradeId)).collect(Collectors.toList());
+
+                        ManageClassGroupVo vo = new ManageClassGroupVo();
+                        vo.setId(gradeId);
+                        vo.setChildren(smartClasses);
+                        vos.add(vo);
+                    }
+                    data.setVos(vos);
+                }
+
+
+
             }
         }
 
@@ -6317,7 +6371,7 @@ public class SmartUserController implements SmartUserControllerAPI {
 
         PageUtils<UserVo> result = null;
         if (childDepartmentIds != null && childDepartmentIds.size() > 0) {
-            result = smartUserService.querySmartUserPages(currentPage, pageCount, childDepartmentIds, name);
+            result = smartUserService.querySmartUserNoAuthPages(currentPage, pageCount, childDepartmentIds, name);
         } else {
             IPage<UserVo> userData = new Page<>();
             result = new PageUtils<UserVo>(userData);
@@ -6539,6 +6593,12 @@ public class SmartUserController implements SmartUserControllerAPI {
         graduate.setName("毕业学院");
         govs.add(graduate);
         //endregion
+        //region 毕业学院
+        gauageOutfitVo ifGraduate = new gauageOutfitVo();
+        ifGraduate.setId(i);
+        ifGraduate.setName("是否毕业");
+        govs.add(ifGraduate);
+        //endregion
         return CommonResult.ok(govs);
     }
 
@@ -7015,6 +7075,381 @@ public class SmartUserController implements SmartUserControllerAPI {
         return CommonResult.ok();
     }
 
+    @Override
+    @PassToken
+    @DESRespondSecret(validated = true)
+    public CommonResult appRemoveClass(AppRemoveClassDro dto) {
+//        将部门改成未分组
+        ArrayList<SmartUser> smartUsers = new ArrayList<>();
+        List<Integer> ids = dto.getIds();
+        for (int i = 0; i < ids.size(); i++) {
+            Integer id = ids.get(i);
+            SmartUser smartUser = smartUserService.getById(id);
+            if (ObjectUtils.isEmpty(smartUser)) {
+                return CommonResult.fail("用户不存在");
+            }
+            Integer schoolClass = smartUser.getSchoolClass();
+            smartUser.setDepartmentId(286);
+            smartUser.setOldSchoolClass(schoolClass);
+            smartUser.setSchoolClass(0);
+            smartUsers.add(smartUser);
+        }
+
+        smartUserService.updateBatchById(smartUsers);
+
+        return CommonResult.ok();
+    }
+
+    @Override
+    @PassToken
+    @DESRespondSecret(validated = true)
+    public CommonResult appSaveClass(AppSaveClassDto dto) throws Exception{
+        Integer schoolClass = dto.getSchoolClass();
+//        Integer departmentId = dto.getDepartmentId();
+        List<Integer> ids = dto.getIds();
+
+        //SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
+
+//        通过班级找学生部门
+        LambdaQueryWrapper<SmartUser> wrapper=new LambdaQueryWrapper<>();
+        wrapper.eq(SmartUser::getSchoolClass,schoolClass)
+                .eq(SmartUser::getIdentityId,2);
+        List<SmartUser> list = smartUserService.list(wrapper);
+        if (ObjectUtils.isEmpty(list)) {
+            return CommonResult.fail("请先加入学生后在选择添加未分组学生");
+        }
+        Integer departmentId = list.get(0).getDepartmentId();
+
+        for (int i = 0; i < ids.size(); i++) {
+            Integer id = ids.get(i);
+            SmartUser usur = smartUserService.getById(id);
+            if (ObjectUtils.isEmpty(usur)) {
+                return CommonResult.fail("用户不存在");
+            }
+            usur.setSchoolClass(schoolClass);
+            usur.setDepartmentId(departmentId);
+
+            int useXw = 1;
+            int useBs = 1;
+
+            //更新的同时将百胜用户信息同步过去或者同步过来?
+            SmartUser su = smartUserService.getSmartById(id);
+            if (su == null) {
+                return CommonResult.fail("用户数据已失效,修改失败!");
+            }
+
+            //是否转换身份
+            boolean changeIdentity = false;
+            Integer oldIdentity = null;
+            String oldAffiliate = su.getAffiliate();
+
+            Integer oldSchoolClass = su.getOldSchoolClass();
+            if (ObjectUtils.isEmpty(oldSchoolClass)) {
+                oldSchoolClass = su.getSchoolClass();
+            }
+            String oldStaffNo = su.getBsStaffCode();
+            String oldCardNo = su.getCardNo();
+            if (usur.getIdentityId().intValue() != su.getIdentityId().intValue()) {
+                changeIdentity = true;
+                oldIdentity = su.getIdentityId().intValue();
+            }
+            SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
+
+            su.setTimeGroupId(usur.getTimeGroupId());
+            su.setCardNo(usur.getCardNo());
+            su.setName(usur.getName());
+            su.setIdentityId(usur.getIdentityId());
+            su.setIdCard(usur.getIdCard());
+            su.setSexId(usur.getSexId());
+            su.setDepartmentId(usur.getDepartmentId());
+            su.setHeadImage(usur.getHeadImage());
+            su.setGrade(usur.getGrade());
+            su.setCollege(usur.getCollege());
+            su.setSpeciality(usur.getSpeciality());
+            su.setSchoolClass(usur.getSchoolClass());
+            su.setCampus(usur.getCampus());
+            su.setDormitoryNumber(usur.getDormitoryNumber());
+            su.setPhone(usur.getPhone());
+            su.setAffiliate(StringUtils.join(usur.getAffiliate(), ","));
+            su.setTitle(usur.getTitle());
+            su.setAddress(usur.getAddress());
+            su.setNation(usur.getNation());
+            su.setOfStudent(usur.getOfStudent());
+            su.setGraduate(usur.getGraduate());
+            su.setDuties(usur.getDuties());
+            su.setIsCancel(eLogOff.Unlogout.getValue());
+
+            if (usur.getIdentityId().intValue() == eIdentityStatu.Student.getValue()) {//学生
+
+                //region 年级和班级不能为空
+                if (usur.getGrade() == null) {
+                    return CommonResult.fail("学生年级不能为空");
+                }
+                if (usur.getSchoolClass() == null) {
+                    return CommonResult.fail("学生班级不能为空");
+                }
+                //endregion
+                //获取班级Uid
+                SmartClass classData = smartClassService.getSmartClassById(su.getSchoolClass());
+                if (classData == null) {
+                    return CommonResult.fail("班级数据无效,更新失败");
+                }
+                //获取年级Uid
+                SmartGrade gradeData = smartGradeService.querySmartGradeById(su.getGrade() == null || su.getGrade() == "" ? null : Integer.valueOf(su.getGrade()));
+                if (gradeData == null) {
+                    return CommonResult.fail("年级数据无效,新增失败");
+                }
+                if (!changeIdentity) {
+                    //region 更新希沃学生信息
+                    if (useXw == 1) {
+                        CommonResult updateStudent = SeewoUpdateStudent(seewoClient, su);
+                        if (!updateStudent.isSuccess()) {
+                            if (updateStudent.getMessage().equals("学生不存在")) {
+                                CommonResult<String> insertStudent = SeewoInsertStudent(seewoClient, su.getName(), su.getCardNo(), su.getSexId(), su.getPhone(), classData.getClassUid());
+                                if (!insertStudent.isSuccess()) {
+                                    return CommonResult.fail("希沃平台:" + insertStudent.getMessage());
+                                }
+                            }
+                        } else {
+                            if (!su.getSchoolClass().equals(oldSchoolClass)) {
+                                //获取班级Uid
+                                SmartClass oldClassData = smartClassService.getSmartClassById(oldSchoolClass);
+                                if (oldClassData == null) {
+                                    return CommonResult.fail("班级数据无效,更新失败");
+                                }
+
+                                CommonResult changeClass = SeewoChangeClass(seewoClient, seewoConfig.getSchoolId(), su.getXwStudentUid(), oldClassData.getClassUid(), classData.getClassUid());
+                                if (!changeClass.isSuccess()) {
+                                    return CommonResult.fail("希沃平台:" + changeClass.getMessage());
+                                }
+                            }
+
+                        }
+
+                        //上传图片
+                        List<PhotoServiceSavePhotosParam.ThirdSavePhotoQuery> photoList = new ArrayList<>();
+                        PhotoServiceSavePhotosParam.ThirdSavePhotoQuery photo = new PhotoServiceSavePhotosParam.ThirdSavePhotoQuery();
+                        photo.setPhotoUrl(su.getHeadImage());
+                        photo.setUserCode(su.getCardNo());
+                        photoList.add(photo);
+                        CommonResult result = SeewoInsertBatchPhoto(seewoClient, photoList, eSeewoUserType.Student.getValue());
+                        if (!result.isSuccess()) {
+                            return result;
+                        }
+                    }
+                    //endregion
+
+                    //region 更新百胜学生信息
+                    if (useBs == 1) {
+                        /**
+                         * 学生数据的有效期是到毕业年份的8月31日
+                         */
+                        String startTime = TimeExchange.DateToString(new Date(), "yyyy-MM-dd HH:mm:ss");
+                        String endTime = queryGraduationYear(gradeData.getGradeNo());
+                        CommonResult updateBsStudent = bsUpdateStudent(su, classData.getBsClassNo(), startTime, endTime);
+                        if (!updateBsStudent.isSuccess()) {
+                            if (updateBsStudent.getMessage().equals("人员不存在或已删除")) {
+                                //region 百胜新增学生信息
+                                CommonResult<String> insertBsStudent = bsInsertStudent(usur.getName(), usur.getCardNo(), usur.getSexId(), usur.getHeadImage(), usur.getTimeGroupId(), classData.getBsClassNo(), startTime, endTime, usur.getIdCard());
+                                if (!insertBsStudent.isSuccess()) {
+                                    return CommonResult.fail("百胜平台:" + insertBsStudent.getMessage());
+                                }
+                                su.setBsStudentNo(insertBsStudent.getData());
+                                //endregion
+                            } else {
+                                return CommonResult.fail("百胜平台:" + updateBsStudent.getMessage());
+                            }
+                        }
+                    }
+                    //endregion
+                } else {
+                    if (oldIdentity.intValue() == eIdentityStatu.Parent.getValue()) {
+
+                        List<SmartUser> studentDatas = smartUserService.getSmartUserIds(Arrays.asList(oldAffiliate.split(",")));
+
+                        //region 希沃删除原有的家长关系
+                        if (useXw == 1) {
+                            CommonResult deleteResult = deleteOldParentShip(seewoClient, studentDatas, su.getPhone());
+                            if (!deleteResult.isSuccess()) {
+                                return CommonResult.fail("希沃平台:" + deleteResult.getMessage());
+                            }
+
+                            smartFamilyIndexService.deleteSmartFamilyByPhone(su.getPhone());
+                        }
+                        //endregion
+                    } else if (oldIdentity.intValue() == eIdentityStatu.Teacher.getValue()) {
+                        if(oldSchoolClass != null){
+                            //获取班级Uid
+                            SmartClass oldClassData = smartClassService.getSmartClassById(oldSchoolClass);
+                            if (oldClassData == null) {
+                                return CommonResult.fail("班级数据无效,更新失败");
+                            }
+
+                            //region 希沃删除教师
+                            if (useXw == 1) {
+                                CommonResult deleteTeacher = SeewoDeleteTeacher(seewoClient, su.getPhone());
+                                if (!deleteTeacher.isSuccess()) {
+                                    return CommonResult.fail("希沃平台:" + deleteTeacher.getMessage());
+                                }
+                            }
+                            //endregion
+
+                            //region 希沃删除班主任
+                            if (useXw == 1) {
+                                CommonResult deleteMaster = SeewoDeleteTeacherMaster(seewoClient, oldClassData.getClassUid(), su.getPhone());
+                                if (!deleteMaster.isSuccess()) {
+                                    return CommonResult.fail("希沃平台:" + deleteMaster.getMessage());
+                                }
+                            }
+                            //endregion
+                        }
+
+                        //region 百胜删除教师
+                        if (useBs == 1) {
+                            CommonResult deleteBsTeacher = bsDeleteTeacher(oldStaffNo);
+                            if (!deleteBsTeacher.isSuccess()) {
+                                return CommonResult.fail("百胜平台:" + deleteBsTeacher.getMessage());
+                            }
+                        }
+                        //endregion
+                    }
+
+                    //region 希沃新增学生信息
+                    if (useXw == 1) {
+                        CommonResult<String> insertStudent = SeewoInsertStudent(seewoClient, su.getName(), su.getCardNo(), su.getSexId(), su.getPhone(), classData.getClassUid());
+                        if (!insertStudent.isSuccess()) {
+                            return CommonResult.fail("希沃平台:" + insertStudent.getMessage());
+                        } else {
+                            su.setXwStudentUid(insertStudent.getData());
+                        }
+
+                        //上传图片
+                        List<PhotoServiceSavePhotosParam.ThirdSavePhotoQuery> photoList = new ArrayList<>();
+                        PhotoServiceSavePhotosParam.ThirdSavePhotoQuery photo = new PhotoServiceSavePhotosParam.ThirdSavePhotoQuery();
+                        photo.setPhotoUrl(su.getHeadImage());
+                        photo.setUserCode(su.getCardNo());
+                        photoList.add(photo);
+                        CommonResult result = SeewoInsertBatchPhoto(seewoClient, photoList, eSeewoUserType.Student.getValue());
+                        if (!result.isSuccess()) {
+                            return result;
+                        }
+                    }
+                    //endregion
+
+                    //region 百胜新增学生信息
+                    if (useBs == 1) {
+                        /**
+                         * 学生数据的有效期是到毕业年份的8月31日
+                         */
+                        String startTime = TimeExchange.DateToString(new Date(), "yyyy-MM-dd HH:mm:ss");
+                        String endTime = queryGraduationYear(gradeData.getGradeNo());
+                        CommonResult<String> insertBsStudent = bsInsertStudent(su.getName(), su.getCardNo(), su.getSexId(), su.getHeadImage(), su.getTimeGroupId(), classData.getBsClassNo(), startTime, endTime, su.getIdCard());
+
+                        if (insertBsStudent.isSuccess()) {
+                            su.setBsStudentNo(insertBsStudent.getData());
+                        } else {
+                            //region 希沃删除学生
+                            //百胜数据插入失败后需要把已插入到希沃的数据删除
+                            CommonResult deleteStudent = SeewoDeleteStudent(seewoClient, classData.getClassUid(), oldCardNo);
+                            if (!deleteStudent.isSuccess()) {
+                                return CommonResult.fail("百胜平台:" + deleteStudent.getMessage());
+                            }
+                            //endregion
+
+                            return CommonResult.fail("切换身份后," + insertBsStudent.getMessage() + ",百胜无法插入学生数据");
+                        }
+                    }
+                    //endregion
+
+                }
+
+            }
+
+            int result = smartUserService.updateSmartUser(su);
+            if (result<=0) {
+                return CommonResult.fail("添加失败");
+            }
+//        修改需同步到海康平台
+            if (result > 0) {
+                Integer identityId = su.getIdentityId();
+                if (2 == identityId || identityId == 3) {
+                    Integer id2 = su.getId();
+                    SmartOperationUser smartOperationUser = new SmartOperationUser();
+                    smartOperationUser.setOperationId(id2);
+                    smartOperationUser.setOperationMode("2");
+                    smartOperationUser.setStatus(1);
+                    smartOperationUser.setType(identityId);
+                    smartOperationUserService.save(smartOperationUser);
+                }
+            }
+        }
+
+        return CommonResult.ok();
+    }
+
+    @Override
+    @PassToken
+    @DESRespondSecret(validated = true)
+    public CommonResult appListClass(String keyWord){
+        LambdaQueryWrapper<SmartUser> wrapper=new LambdaQueryWrapper<>();
+        wrapper.eq(SmartUser::getDepartmentId,286)
+                        .eq(SmartUser::getIdentityId,2)
+                .like(ObjectUtils.isNotEmpty(keyWord),SmartUser::getName,keyWord);
+        List<SmartUser> list = smartUserService.list(wrapper);
+        return CommonResult.ok(list);
+    }
+
+    @Override
+    @PassToken
+    @DESRespondSecret(validated = true)
+    public CommonResult manageClassGroup() {
+        LambdaQueryWrapper<SmartGrade> wrapper=new LambdaQueryWrapper<>();
+        wrapper.orderByAsc(SmartGrade::getGradeNo);
+        List<SmartGrade> gradeList = smartGradeService.list(wrapper);
+        List<SmartClass> smartClassList = smartClassService.list(new LambdaQueryWrapper<SmartClass>().orderByAsc(SmartClass::getClassNo));
+        ArrayList<ManageClassGroupVo> vos = new ArrayList<>();
+        for (SmartGrade smartGrade : gradeList) {
+            ManageClassGroupVo vo = new ManageClassGroupVo();
+            Integer id = smartGrade.getId();
+            List<SmartClass> smartClasses=smartClassList.stream().filter(e->e.getGradeId().equals(id)).collect(Collectors.toList());
+            vo.setId(id);
+            vo.setName(smartGrade.getName());
+            vo.setChildren(smartClasses);
+            vos.add(vo);
+        }
+
+        return CommonResult.ok(vos);
+    }
+
+    @Override
+    @DESRespondSecret(validated = true)
+    public CommonResult getManageClass(Integer id) {
+        SmartUser byId = smartUserService.getById(id);
+        if (ObjectUtils.isEmpty(byId)) {
+            return CommonResult.fail("用户不存在");
+        }
+        String manageGrade = byId.getManageGrade();
+        String manageSchoolClass = byId.getManageSchoolClass();
+        List<SmartGrade> grades=smartGradeService.getManageGrade(manageGrade);
+        List<SmartClass> classes=smartClassService.getManageClass(manageSchoolClass);
+        ArrayList<ManageClassVo> vos = new ArrayList<>();
+        for (SmartGrade grade : grades) {
+            String gradeName = grade.getName();
+            Integer gradeId = grade.getId();
+            List<SmartClass> collect = classes.stream().filter(e -> e.getGradeId().equals(gradeId)).collect(Collectors.toList());
+            for (SmartClass smartClass : collect) {
+                Integer classId = smartClass.getId();
+                String className = smartClass.getName();
+                ManageClassVo vo = new ManageClassVo();
+                vo.setGradeId(gradeId);
+                vo.setClassId(classId);
+                vo.setName(gradeName+"/"+className);
+                vos.add(vo);
+            }
+        }
+        return CommonResult.ok(vos);
+    }
+
 
     public CommonResult seeWoLostBan(SeewoClient seewoClient, String schoolUid, String classUid, String teacherUid) {
         MdmTeacherClassApiTeacherLeaveClassParam requestParam = new MdmTeacherClassApiTeacherLeaveClassParam();
@@ -7059,6 +7494,7 @@ public class SmartUserController implements SmartUserControllerAPI {
      */
     @Override
     @DESRespondSecret(validated = false)
+    @PassToken
     public CommonResult smartUserExport(HttpServletResponse response, String userhead, smartUserExportRequest sure) {
         if (sure.getGauageOutfitVos() == null) {
             return CommonResult.fail("表头数据为空");
@@ -7116,8 +7552,8 @@ public class SmartUserController implements SmartUserControllerAPI {
                 }
 
                 String name = sure != null ? sure.getName() : null;
-
-                List<SmartUser> users = smartUserService.querySmartUsers(authDepartments, name);
+                Integer ifGraduate = sure != null ? sure.getIfGraduate() : null;
+                List<SmartUser> users = smartUserService.querySmartUsers(authDepartments, name,ifGraduate);
 
                 List<String> affiliates = new ArrayList<>();
                 List<String> affiliateStr = users.stream().map(SmartUser::getAffiliate).distinct().collect(Collectors.toList());
@@ -7234,7 +7670,10 @@ public class SmartUserController implements SmartUserControllerAPI {
                     headerRow.createCell(exportIndex).setCellValue("毕业学院");
                     exportIndex++;
                 }
-
+                if (gauageStrs.contains("是否毕业")) {
+                    headerRow.createCell(exportIndex).setCellValue("是否毕业");
+                    exportIndex++;
+                }
 
                 List<SmartTimeGroup> timeGroups = new ArrayList<>();
                 if (gauageStrs.contains("时间组")) {
@@ -7374,6 +7813,14 @@ public class SmartUserController implements SmartUserControllerAPI {
                         dataRow.createCell(valueIndex).setCellValue(user.getGraduate() == null ? "" : user.getGraduate());//毕业学校
                         valueIndex++;
                     }
+                    if (gauageStrs.contains("是否毕业")) {
+                        if (ObjectUtils.isEmpty(user.getIfGraduate())) {
+                            dataRow.createCell(valueIndex).setCellValue("在校");//是否毕业
+                        }else{
+                            dataRow.createCell(valueIndex).setCellValue("毕业");//是否毕业
+                        }
+                        valueIndex++;
+                    }
                 }
 
                 // 将工作簿写入文件
@@ -8056,18 +8503,24 @@ public class SmartUserController implements SmartUserControllerAPI {
 
     //region 获取班级下的学生
     @Override
-    public CommonResult queryClassUser(
-            int userId, String keyWord) {
+    public CommonResult queryClassUser(int userId, String keyWord,Integer classId) {
         SmartUser userData = smartUserService.getSmartById(userId);
         if (userData == null) {
             return CommonResult.fail("未查到用户信息,获取失败");
         }
 
-        if (userData.getSchoolClass() == null) {
-            return CommonResult.fail("当前用户所在班级为空,获取失败");
+//        if (userData.getSchoolClass() == null) {
+//            return CommonResult.fail("当前用户所在班级为空,获取失败");
+//        }
+//
+//        SmartClass classData = smartClassService.getSmartClassById(userData.getSchoolClass());
+//        if (classData == null) {
+//            return CommonResult.fail("班级数据为空,获取失败");
+//        }
+        if (ObjectUtils.isEmpty(classId)) {
+            return CommonResult.fail();
         }
-
-        SmartClass classData = smartClassService.getSmartClassById(userData.getSchoolClass());
+        SmartClass classData = smartClassService.getSmartClassById(classId);
         if (classData == null) {
             return CommonResult.fail("班级数据为空,获取失败");
         }
@@ -8078,8 +8531,14 @@ public class SmartUserController implements SmartUserControllerAPI {
         }
 
         //查找部门名称
-        String departmentName = classData.getName().replace("年级", "") + "学生";
-        Optional<SmartDepartment> department = departments.stream().filter(e -> e.getName().equals(departmentName)).findFirst();
+        String departmentName2;
+        if (classData.getName().contains("临时")) {
+            departmentName2 = classData.getName().replace("班级", "");
+        }else {
+            departmentName2 = classData.getName().replace("年级", "") + "学生";
+        }
+
+        Optional<SmartDepartment> department = departments.stream().filter(e -> e.getName().equals(departmentName2)).findFirst();
         if (!(department != null && department.isPresent())) {
             return CommonResult.fail("部门数据为空,获取失败");
         }
@@ -8088,11 +8547,11 @@ public class SmartUserController implements SmartUserControllerAPI {
         String departmentStr = QueryParentDepartments(department.get().getParentId(), departments, null);
 
         ClassUserVo result = new ClassUserVo();
-        result.setClassId(userData.getSchoolClass());
+        result.setClassId(classId);
         result.setName(departmentStr);
         List<ClassUserDetailVo> userDetails = new ArrayList<>();
         //region 用户明细集合数据
-        List<SmartUser> users = smartUserService.queryUsersByClass(userData.getSchoolClass());
+        List<SmartUser> users = smartUserService.queryUsersByClass(classId);
         if (users != null && users.size() > 0) {
             List<SmartTimeGroup> timeGroups = smartTimeGroupService.list(null);
             for (SmartUser user : users) {
@@ -8100,6 +8559,7 @@ public class SmartUserController implements SmartUserControllerAPI {
                 userDetail.setId(user.getId());
                 userDetail.setName(user.getName());
                 userDetail.setCardNo(user.getCardNo());
+                userDetail.setHeadImage(user.getHeadImage());
                 Optional<SmartTimeGroup> timeGroup = timeGroups.stream().filter(e -> e.getId().equals(user.getTimeGroupId())).findFirst();
                 if (timeGroup != null && timeGroup.isPresent()) {
                     userDetail.setTimeGroup(timeGroup.get().getName());

+ 2 - 2
src/main/java/com/template/controller/SmartVisitorController.java

@@ -990,8 +990,8 @@ public class SmartVisitorController implements SmartVisitorControllerAPI {
     @Override
     @DESRespondSecret(validated = true)
     @PassToken
-    public CommonResult getScreenPage(int currentPage, int pageCount, String phone, String status) {
-        PageUtils<SmartVisitorScreenListVo> page = smartVisitorService.getScreenPage(currentPage, pageCount, phone, status);
+    public CommonResult getScreenPage(int currentPage, int pageCount, String keyWord, String status) {
+        PageUtils<SmartVisitorScreenListVo> page = smartVisitorService.getScreenPage(currentPage, pageCount, keyWord, status);
 
         return CommonResult.ok(page);
     }

+ 112 - 58
src/main/java/com/template/controller/WechatScanLoginController.java

@@ -33,6 +33,7 @@ import com.template.model.vo.WechatUserVo;
 import com.template.model.weixin.*;
 import com.template.model.weixin.AccessToken;
 import com.template.services.*;
+import io.swagger.models.auth.In;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -378,7 +379,7 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
         if (ObjectUtils.isNotEmpty(num)) {
             BigDecimal bigDecimal = new BigDecimal(num);
             BigDecimal subtract = bigDecimal.multiply(new BigDecimal(80));
-            Double el=subtract.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
+            Double el = subtract.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
             list.setNum(el);
         }
         return CommonResult.ok(list);
@@ -412,8 +413,8 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
                 Double num = tj.getNum();
                 BigDecimal bigDecimal = new BigDecimal(num);
                 if (ObjectUtils.isNotEmpty(num)) {
-                    BigDecimal multiply = bigDecimal.multiply(new BigDecimal(80)).setScale(2,BigDecimal.ROUND_HALF_UP);
-                    num=multiply.doubleValue();
+                    BigDecimal multiply = bigDecimal.multiply(new BigDecimal(80)).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    num = multiply.doubleValue();
                 }
                 tj.setNum(num);
             }
@@ -864,7 +865,7 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
     @Override
     @PassToken
     @DESRespondSecret(validated = false)
-    public CommonResult queryPhoneBook(Integer id) {
+    public CommonResult queryPhoneBook(Integer id, Integer gradeId, Integer classId) {
         if (id == null) {
             return CommonResult.fail("请传入id");
         }
@@ -875,54 +876,92 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
         if (user.getId() < 3) {
             return CommonResult.fail("无权限查询");
         }
-        List<GradeBook> gradeBookList = null;
-        if (GlobalData.getAddressBook() == null) {
-            QueryWrapper<SmartGrade> queryWrapper1 = new QueryWrapper<>();
-            queryWrapper1.eq("deleted", 0);
-            queryWrapper1.eq("id", user.getGrade());
-            List<SmartGrade> grades = smartGradeService.list(queryWrapper1);
-            gradeBookList = new ArrayList<>();
-            for (int i = 0; i < grades.size(); i++) {
-                QueryWrapper<SmartClass> queryWrapper2 = new QueryWrapper<>();
-                queryWrapper2.eq("deleted", 0);
-                queryWrapper2.eq("id", user.getSchoolClass());
-                List<SmartClass> classes = smartClassService.list(queryWrapper2);
-                GradeBook gradeBook = new GradeBook();
-                gradeBook.setGradeName(grades.get(i).getName());
-                List<ClassBook> classBookList = new ArrayList<>();
-                for (int j = 0; j < classes.size(); j++) {
-                    ClassBook classBook = new ClassBook();
-                    classBook.setClassName(classes.get(j).getName());
-                    QueryWrapper<SmartUser> queryWrapper3 = new QueryWrapper<>();
-                    queryWrapper3.eq("deleted", 0);
-                    queryWrapper3.eq("is_cancel", 0);
-                    queryWrapper3.eq("school_class", user.getSchoolClass());
-                    queryWrapper3.eq("identity_id", eIdentityStatu.Student.getValue());
-                    List<SmartUser> users = smartUserService.list(queryWrapper3);
-                    List<BookUser> bookUserList = new ArrayList<>();
-                    List<Integer> studentIds = users.stream().map(SmartUser::getId).collect(Collectors.toList());
-                    List<SmartUser> usersPrarents = smartUserService.querySmartParentByIds(studentIds);
-
-                    for (int k = 0; k < users.size(); k++) {
-                        if (Objects.equals(users.get(k).getSchoolClass(), user.getSchoolClass())) {
-                            SmartUser userData = users.get(k);
-                            String ob = JSONObject.toJSONString(userData);
-                            BookUser bookUser = JSONObject.parseObject(ob, BookUser.class);
-                            List<SmartUser> usersPrarent = usersPrarents.stream().filter(e -> ("," + e.getAffiliate() + ",").contains("," + userData.getId() + ",")).collect(Collectors.toList());
-                            bookUser.setUserParents(usersPrarent);
-                            bookUserList.add(bookUser);
-                        }
-                    }
-                    classBook.setBookUserList(bookUserList);
-                    classBookList.add(classBook);
-                }
-                gradeBook.setClassBookList(classBookList);
-                gradeBookList.add(gradeBook);
+//        List<GradeBook> gradeBookList = null;
+//        if (GlobalData.getAddressBook() == null) {
+//            QueryWrapper<SmartGrade> queryWrapper1 = new QueryWrapper<>();
+//            queryWrapper1.eq("deleted", 0);
+//            queryWrapper1.eq("id", user.getGrade());
+//            List<SmartGrade> grades = smartGradeService.list(queryWrapper1);
+//            gradeBookList = new ArrayList<>();
+//            for (int i = 0; i < grades.size(); i++) {
+//                QueryWrapper<SmartClass> queryWrapper2 = new QueryWrapper<>();
+//                queryWrapper2.eq("deleted", 0);
+//                queryWrapper2.eq("id", user.getSchoolClass());
+//                List<SmartClass> classes = smartClassService.list(queryWrapper2);
+//                GradeBook gradeBook = new GradeBook();
+//                gradeBook.setGradeName(grades.get(i).getName());
+//                List<ClassBook> classBookList = new ArrayList<>();
+//                for (int j = 0; j < classes.size(); j++) {
+//                    ClassBook classBook = new ClassBook();
+//                    classBook.setClassName(classes.get(j).getName());
+//                    QueryWrapper<SmartUser> queryWrapper3 = new QueryWrapper<>();
+//                    queryWrapper3.eq("deleted", 0);
+//                    queryWrapper3.eq("is_cancel", 0);
+//                    queryWrapper3.eq("school_class", user.getSchoolClass());
+//                    queryWrapper3.eq("identity_id", eIdentityStatu.Student.getValue());
+//                    List<SmartUser> users = smartUserService.list(queryWrapper3);
+//                    List<BookUser> bookUserList = new ArrayList<>();
+//                    List<Integer> studentIds = users.stream().map(SmartUser::getId).collect(Collectors.toList());
+//                    List<SmartUser> usersPrarents = smartUserService.querySmartParentByIds(studentIds);
+//
+//                    for (int k = 0; k < users.size(); k++) {
+//                        if (Objects.equals(users.get(k).getSchoolClass(), user.getSchoolClass())) {
+//                            SmartUser userData = users.get(k);
+//                            String ob = JSONObject.toJSONString(userData);
+//                            BookUser bookUser = JSONObject.parseObject(ob, BookUser.class);
+//                            List<SmartUser> usersPrarent = usersPrarents.stream().filter(e -> ("," + e.getAffiliate() + ",").contains("," + userData.getId() + ",")).collect(Collectors.toList());
+//                            bookUser.setUserParents(usersPrarent);
+//                            bookUserList.add(bookUser);
+//                        }
+//                    }
+//                    classBook.setBookUserList(bookUserList);
+//                    classBookList.add(classBook);
+//                }
+//                gradeBook.setClassBookList(classBookList);
+//                gradeBookList.add(gradeBook);
+//            }
+//            GlobalData.setAddressBook(gradeBookList);
+//        } else {
+//            gradeBookList = GlobalData.getAddressBook();
+//        }
+
+
+        SmartGrade grades = smartGradeService.getById(gradeId);
+        List<GradeBook> gradeBookList = new ArrayList<>();
+
+        SmartClass classes = smartClassService.getById(classId);
+        GradeBook gradeBook = new GradeBook();
+        gradeBook.setGradeName(grades.getName());
+        List<ClassBook> classBookList = new ArrayList<>();
+
+        ClassBook classBook = new ClassBook();
+        classBook.setClassName(classes.getName());
+        QueryWrapper<SmartUser> queryWrapper3 = new QueryWrapper<>();
+        queryWrapper3.eq("deleted", 0);
+        queryWrapper3.eq("is_cancel", 0);
+        queryWrapper3.eq("school_class", classId);
+        queryWrapper3.eq("identity_id", eIdentityStatu.Student.getValue());
+        List<SmartUser> users = smartUserService.list(queryWrapper3);
+        List<BookUser> bookUserList = new ArrayList<>();
+        List<Integer> studentIds = users.stream().map(SmartUser::getId).collect(Collectors.toList());
+        List<SmartUser> usersPrarents = smartUserService.querySmartParentByIds(studentIds);
+
+        for (int k = 0; k < users.size(); k++) {
+            if (Objects.equals(users.get(k).getSchoolClass(), classId)) {
+                SmartUser userData = users.get(k);
+                String ob = JSONObject.toJSONString(userData);
+                BookUser bookUser = JSONObject.parseObject(ob, BookUser.class);
+                List<SmartUser> usersPrarent = usersPrarents.stream().filter(e -> ("," + e.getAffiliate() + ",").contains("," + userData.getId() + ",")).collect(Collectors.toList());
+                bookUser.setUserParents(usersPrarent);
+                bookUserList.add(bookUser);
             }
-            GlobalData.setAddressBook(gradeBookList);
-        } else {
-            gradeBookList = GlobalData.getAddressBook();
         }
+        classBook.setBookUserList(bookUserList);
+        classBookList.add(classBook);
+
+        gradeBook.setClassBookList(classBookList);
+        gradeBookList.add(gradeBook);
+
         return CommonResult.ok(gradeBookList);
     }
 
@@ -972,26 +1011,26 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
 
     @Override
     @PassToken
-    @DESRespondSecret(validated = false)
+    @DESRespondSecret(validated = true)
     public CommonResult statistics() {
         LocalDateTime end = LocalDateTime.now();
 
 //        近24小时能耗统计
         LocalDateTime startDay = end.minusHours(24);
 //        电
-        BigDecimal elcDay=wechatScanLoginService.statisticsElc(startDay,end);
+        BigDecimal elcDay = wechatScanLoginService.statisticsElc(startDay, end);
 //        水
-        BigDecimal waterDay=wechatScanLoginService.statisticsWater(startDay,end);
+        BigDecimal waterDay = wechatScanLoginService.statisticsWater(startDay, end);
 
 //        近30天能耗统计
         LocalDateTime startMonth = end.minusDays(30);
-        BigDecimal elcMonth=wechatScanLoginService.statisticsElc(startMonth,end);
-        BigDecimal waterMonth=wechatScanLoginService.statisticsWater(startMonth,end);
+        BigDecimal elcMonth = wechatScanLoginService.statisticsElc(startMonth, end);
+        BigDecimal waterMonth = wechatScanLoginService.statisticsWater(startMonth, end);
 
 //        近1年能耗统计
         LocalDateTime startYear = end.minusYears(1);
-        BigDecimal elcYear=wechatScanLoginService.statisticsElc(startYear,end);
-        BigDecimal waterYear=wechatScanLoginService.statisticsWater(startYear,end);
+        BigDecimal elcYear = wechatScanLoginService.statisticsElc(startYear, end);
+        BigDecimal waterYear = wechatScanLoginService.statisticsWater(startYear, end);
 
         MeterStatisticsVo meterStatisticsVo = new MeterStatisticsVo();
         meterStatisticsVo.setElcDay(elcDay);
@@ -1006,12 +1045,27 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
 
     @Override
     @PassToken
+    @DESRespondSecret(validated = true)
     public CommonResult getAppMeterMonthPage(int currentPage, int pageCount, String date) {
         PageHelper.startPage(currentPage, pageCount);
         MeterMonthData meterMonthData = new MeterMonthData();
         meterMonthData.setDate(date);
-        PageInfo<MeterMonthData> list = wechatScanLoginService.getMeterMonthPage(meterMonthData);
+        Integer id = (currentPage - 1) * pageCount + 1;
+        PageInfo<MeterMonthData> list = wechatScanLoginService.getAppMeterMonthPage(meterMonthData, id);
+        return CommonResult.ok(list);
+    }
+
+    @Override
+    @PassToken
+    @DESRespondSecret(validated = true)
+    public CommonResult getAppMeterDayPage(int currentPage, int pageCount, Integer type, String date) {
+        PageHelper.startPage(currentPage, pageCount);
+        MeterMonthData meterMonthData = new MeterMonthData();
+        meterMonthData.setType(type);
+        meterMonthData.setDate(date);
+        PageInfo<MeterMonthDataVo> list = wechatScanLoginService.getMeterDayPage(meterMonthData);
         return CommonResult.ok(list);
     }
 
+
 }

+ 2 - 0
src/main/java/com/template/mapper/SmartAccessMapper.java

@@ -33,4 +33,6 @@ public interface SmartAccessMapper extends BaseMapper<SmartAccess> {
     List<SmartAccess> toDatelist(@Param("start") LocalDateTime start,@Param("end") LocalDateTime end);
 
     List<SmartAccess> toDateAndPlacelist(@Param("startTime") LocalDateTime startTime,@Param("endTime") LocalDateTime endTime,@Param("type") String type);
+
+    List<SmartAccess> getLata(@Param("start") String start,@Param("end") String end,@Param("gradeId") Integer gradeId,@Param("smartDeviceId") Integer smartDeviceId);
 }

+ 1 - 1
src/main/java/com/template/mapper/SmartAttendanceMapper.java

@@ -31,7 +31,7 @@ public interface SmartAttendanceMapper extends BaseMapper<SmartAttendance> {
 
     List<SmartAttendanceVo> queryExpor(@Param("gradeId") Integer gradeId, @Param("classId") Integer classId, @Param("status") String status, @Param("studentNo") String studentNo, @Param("name") String name, @Param("startTime") String startTime, @Param("endTime") String endTime);
 
-    IPage<AskForLeaveScreenVo> askForLeaveScreenPage(Page<AskForLeaveScreenVo> page, @Param("cardNo") String cardNo, @Param("ifVerification") String ifVerification);
+    IPage<AskForLeaveScreenVo> askForLeaveScreenPage(Page<AskForLeaveScreenVo> page, @Param("keyWord") String keyWord, @Param("ifVerification") String ifVerification,@Param("gradeId") Integer gradeId,@Param("classId") Integer classId);
 
     List<ClasAttendanceVo> getClassHistoricalAttendance(@Param("startTime") Date startTime,@Param("endTime") Date endTime,@Param("id") Integer id);
 

+ 2 - 0
src/main/java/com/template/mapper/SmartClassMapper.java

@@ -26,4 +26,6 @@ public interface SmartClassMapper extends BaseMapper<SmartClass> {
     SmartClassVo getSchoolClassId(@Param("schoolClass") int schoolClass,@Param("className") String className);
 
     SchoolClassVo getClassId(@Param("schoolClass") int schoolClass);
+
+    List<SmartClass> getManageClass(@Param("manageSchoolClass") String manageSchoolClass);
 }

+ 4 - 0
src/main/java/com/template/mapper/SmartGradeMapper.java

@@ -2,8 +2,11 @@ package com.template.mapper;
 
 import com.template.model.pojo.SmartGrade;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 /**
  * <p>
  * 楼栋表 Mapper 接口
@@ -15,4 +18,5 @@ import org.springframework.stereotype.Repository;
 @Repository
 public interface SmartGradeMapper extends BaseMapper<SmartGrade> {
 
+    List<SmartGrade> getManageGrade(@Param("manageGrade") String manageGrade);
 }

+ 25 - 0
src/main/java/com/template/mapper/SmartLateMapper.java

@@ -0,0 +1,25 @@
+package com.template.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.template.model.pojo.SmartLate;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.template.model.vo.SmartLateVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ceshi
+ * @since 2025-02-21
+ */
+@Mapper
+public interface SmartLateMapper extends BaseMapper<SmartLate> {
+
+    IPage<SmartLateVo> getList(Page<SmartLateVo> page, @Param("keyWord") String keyWord,@Param("startTime") String startTime,@Param("endTime") String endTime);
+
+    IPage<SmartLateVo> getListApp(Page<SmartLateVo> page,@Param("classId") Integer classId,@Param("startTime") String startTime,@Param("endTime") String endTime);
+}

+ 6 - 0
src/main/java/com/template/mapper/SmartLateSettingMapper.java

@@ -2,6 +2,10 @@ package com.template.mapper;
 
 import com.template.model.pojo.SmartLateSetting;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -11,6 +15,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @author ceshi
  * @since 2025-02-18
  */
+@Mapper
 public interface SmartLateSettingMapper extends BaseMapper<SmartLateSetting> {
 
+    List<SmartLateSetting> getOverlap(@Param("startTime") String startTime,@Param("endTime") String endTime);
 }

+ 7 - 0
src/main/java/com/template/mapper/SmartLateTimeMapper.java

@@ -2,6 +2,10 @@ package com.template.mapper;
 
 import com.template.model.pojo.SmartLateTime;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -11,6 +15,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @author ceshi
  * @since 2025-02-18
  */
+@Mapper
 public interface SmartLateTimeMapper extends BaseMapper<SmartLateTime> {
 
+    List<SmartLateTime> getGroup(@Param("smartLateTimeGroup") String smartLateTimeGroup);
+
 }

+ 5 - 2
src/main/java/com/template/mapper/SmartUserMapper.java

@@ -24,9 +24,10 @@ import java.util.List;
 public interface SmartUserMapper extends BaseMapper<SmartUser> {
     List<AffiliateUserVo> queryAffiliateUserById(@Param("id") Integer id);
 
-    IPage<UserVo> querySmartUserPages(IPage<UserVo> page, @Param("departmentIds") List<Integer> departmentIds, @Param("name") String name);
+    IPage<UserVo> querySmartUserPages(IPage<UserVo> page, @Param("departmentIds") List<Integer> departmentIds, @Param("name") String name,@Param("ifGraduate")Integer ifGraduate);
+    IPage<UserVo> querySmartUserNoAuthPages(IPage<UserVo> page, @Param("departmentIds") List<Integer> departmentIds, @Param("name") String name);
 
-    List<SmartUser> querySmartUsers(@Param("departmentIds") List<Integer> departmentIds, @Param("name") String name);
+    List<SmartUser> querySmartUsers(@Param("departmentIds") List<Integer> departmentIds, @Param("name") String name,@Param("ifGraduate") Integer ifGraduate);
 
     IPage<GradeVo> querySmartSecordPage(IPage<GradeVo> page, @Param("name") String name, @Param("userId") Integer userId);
 
@@ -79,4 +80,6 @@ public interface SmartUserMapper extends BaseMapper<SmartUser> {
     List<StatisticsStatement> getUserAckTotal(@Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
 
     List<StatisticsStatement> getUserNormalTotal(@Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
+
+    List<Integer> getNotGraduateGrade();
 }

+ 1 - 1
src/main/java/com/template/mapper/SmartVisitorMapper.java

@@ -31,7 +31,7 @@ public interface SmartVisitorMapper extends BaseMapper<SmartVisitor> {
     IPage<SmartVisitorPageVo> getPage(Page<SmartVisitorPageVo> page, @Param("type")Integer type, @Param("keyWord") String keyWord, @Param("status") Integer status, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("visitorStartTime") String visitorStartTime, @Param("visitorEndTime") String visitorEndTime);
 
 
-    IPage<SmartVisitorScreenVo> getScreenPage(Page<SmartVisitorScreenVo> page,@Param("phone") String phone,@Param("status")  String status);
+    IPage<SmartVisitorScreenVo> getScreenPage(Page<SmartVisitorScreenVo> page,@Param("keyWord") String keyWord,@Param("status")  String status);
 
     IPage<SmartVisitorScreenVo> parentsScreenPage(Page<SmartVisitorScreenVo> page,@Param("userId") int userId,@Param("status") String status);
 }

+ 10 - 0
src/main/java/com/template/model/dto/AppRemoveClassDro.java

@@ -0,0 +1,10 @@
+package com.template.model.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AppRemoveClassDro {
+    private List<Integer> ids;
+}

+ 16 - 0
src/main/java/com/template/model/dto/AppSaveClassDto.java

@@ -0,0 +1,16 @@
+package com.template.model.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AppSaveClassDto {
+    private List<Integer> ids;
+
+//    班级
+    private Integer schoolClass;
+
+//    部门
+    private Integer departmentId;
+}

+ 6 - 4
src/main/java/com/template/model/dto/SmartEnrollmentUserSaveDto.java

@@ -23,11 +23,13 @@ public class SmartEnrollmentUserSaveDto {
     @ApiModelProperty(value = "部门ID")
     private Integer departmentId;
 
-    @ApiModelProperty(value = "年级名称")
-    private String gradeName;
+    @ApiModelProperty(value = "年级id")
+    private Integer gradeId;
 
-    @ApiModelProperty(value = "班级名称")
-    private String schoolClassName;
+    @ApiModelProperty(value = "班级id")
+    private Integer classId;
 
     private List<SmartEnrollmentUser> list;
+
+    private Integer timeGroupId;
 }

+ 28 - 0
src/main/java/com/template/model/dto/SmartLateSettingDto.java

@@ -0,0 +1,28 @@
+package com.template.model.dto;
+
+import com.template.model.pojo.SmartLateTime;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class SmartLateSettingDto {
+    private Integer id;
+
+    @ApiModelProperty(value = "名称")
+    private String name;
+
+    @ApiModelProperty(value = "开始时间")
+    private String startTime;
+
+    @ApiModelProperty(value = "结束时间")
+    private String endTime;
+
+    @ApiModelProperty(value = "迟到时间数据")
+    private List<SmartLateTime> lateTimes;
+
+    @ApiModelProperty(value = "设备id")
+    private Integer smartDeviceId;
+}

+ 3 - 0
src/main/java/com/template/model/pojo/SmartEnrollmentUser.java

@@ -82,6 +82,9 @@ public class SmartEnrollmentUser implements Serializable {
     @ApiModelProperty(value = "备注")
     private String remark;
 
+    @ApiModelProperty(value = "用户关联人")
+    private String userAffiliate;
+
     @ApiModelProperty(value = "创建时间")
     @TableField(fill = FieldFill.INSERT)
     private Date createTime;

+ 73 - 0
src/main/java/com/template/model/pojo/SmartLate.java

@@ -0,0 +1,73 @@
+package com.template.model.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author ceshi
+ * @since 2025-02-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="SmartLate对象", description="")
+public class SmartLate implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "名字")
+    private String name;
+
+    @ApiModelProperty(value = "用户表id")
+    private Integer userId;
+
+    @ApiModelProperty(value = "图片")
+    private String image;
+
+    @ApiModelProperty(value = "发生时间")
+    private String dateTime;
+
+    @ApiModelProperty(value = "班级id")
+    private Integer classId;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新时间")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Date updateTime;
+
+    @ApiModelProperty(value = "创建人员")
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    @ApiModelProperty(value = "更新人员")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateUser;
+
+    @ApiModelProperty(value = "逻辑删除 未删除:0;删除:1")
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer deleted;
+
+
+}

+ 2 - 5
src/main/java/com/template/model/pojo/SmartLateSetting.java

@@ -38,13 +38,10 @@ public class SmartLateSetting implements Serializable {
     private String name;
 
     @ApiModelProperty(value = "开始时间")
-    private Date satrtTime;
+    private String startTime;
 
     @ApiModelProperty(value = "结束时间")
-    private Date endTime;
-
-    @ApiModelProperty(value = "迟到时间组")
-    private String smartLateTimeGroup;
+    private String endTime;
 
     @ApiModelProperty(value = "设备id")
     private Integer smartDeviceId;

+ 5 - 2
src/main/java/com/template/model/pojo/SmartLateTime.java

@@ -35,14 +35,17 @@ public class SmartLateTime implements Serializable {
     private Integer id;
 
     @ApiModelProperty(value = "开始时间")
-    private Date startTime;
+    private String startTime;
 
     @ApiModelProperty(value = "结束时间")
-    private Date endTime;
+    private String endTime;
 
     @ApiModelProperty(value = "年级")
     private Integer gradeId;
 
+    @ApiModelProperty(value = "迟到设置id")
+    private Integer smartLateSettingId;
+
     @ApiModelProperty(value = "创建时间")
     @TableField(fill = FieldFill.INSERT)
     private Date createTime;

+ 6 - 3
src/main/java/com/template/model/pojo/SmartSchoolSetting.java

@@ -31,14 +31,17 @@ public class SmartSchoolSetting implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @ApiModelProperty(value = "学校设置表")
-    @TableId(value = "id", type = IdType.UUID)
+    @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
 
     @ApiModelProperty(value = "升班时间")
-    private Date progressingTime;
+    private String progressingTime;
 
     @ApiModelProperty(value = "毕业时间")
-    private Date graduateTime;
+    private String graduateTime;
+
+    @ApiModelProperty(value = "班级数量")
+    private Integer classCount;
 
     @ApiModelProperty(value = "创建时间")
     @TableField(fill = FieldFill.INSERT)

+ 1 - 1
src/main/java/com/template/model/pojo/SmartScore.java

@@ -92,7 +92,7 @@ public class SmartScore implements Serializable {
 
     @ApiModelProperty(value = "逻辑删除 未删除:0;删除:1")
     @TableField(fill = FieldFill.INSERT)
-        @TableLogic
+    @TableLogic
     private Integer deleted;
 
 

+ 11 - 0
src/main/java/com/template/model/pojo/SmartUser.java

@@ -173,5 +173,16 @@ public class SmartUser implements Serializable {
     @ApiModelProperty(value = "钉钉Id")
     private String dingId;
 
+    @ApiModelProperty(value = "旧班级")
+    private Integer oldSchoolClass;
+
+    @ApiModelProperty(value = "管理的班级")
+    private String manageSchoolClass;
+
+    @ApiModelProperty(value = "管理的年级")
+    private String manageGrade;
+
+    @ApiModelProperty(value = "是否毕业 1是,没有则不是")
+    private Integer ifGraduate;
 
 }

+ 7 - 0
src/main/java/com/template/model/request/insertSmartUserRequest.java

@@ -1,6 +1,7 @@
 package com.template.model.request;
 
 import com.template.model.vo.SubjectVo;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.validation.constraints.NotBlank;
@@ -143,4 +144,10 @@ public class insertSmartUserRequest {
      */
     private List<isrRequest> isr;
 
+    @ApiModelProperty(value = "管理的班级id")
+    private String manageSchoolClass;
+
+    @ApiModelProperty(value = "管理的年级id")
+    private String manageGrade;
+
 }

+ 5 - 0
src/main/java/com/template/model/request/smartUserExportRequest.java

@@ -29,6 +29,11 @@ public class smartUserExportRequest {
     private String name;
 
     /**
+     * 是否毕业
+     */
+    private Integer ifGraduate;
+
+    /**
      * 表头集合
      */
     private List<gauageOutfitVo> gauageOutfitVos;

+ 7 - 0
src/main/java/com/template/model/request/updateSmartUserRequest.java

@@ -1,6 +1,7 @@
 package com.template.model.request;
 
 import com.template.model.vo.SubjectVo;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.validation.constraints.NotBlank;
@@ -166,4 +167,10 @@ public class updateSmartUserRequest {
      * 任课数据
      */
     private List<isrRequest> usr;
+
+    @ApiModelProperty(value = "管理的班级id")
+    private String manageSchoolClass;
+
+    @ApiModelProperty(value = "管理的年级id")
+    private String manageGrade;
 }

+ 8 - 0
src/main/java/com/template/model/tongji/MeterMonthData.java

@@ -52,4 +52,12 @@ public class MeterMonthData {
     public void seteNum(Double eNum) {
         this.eNum = eNum;
     }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
 }

+ 5 - 0
src/main/java/com/template/model/vo/ClassUserDetailVo.java

@@ -29,4 +29,9 @@ public class ClassUserDetailVo {
      * 时间组
      */
     private String timeGroup;
+
+    /**
+     * 头像
+     */
+    private String headImage;
 }

+ 18 - 0
src/main/java/com/template/model/vo/ManageClassGroupVo.java

@@ -0,0 +1,18 @@
+package com.template.model.vo;
+
+import com.template.model.pojo.SmartClass;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ManageClassGroupVo {
+    private Integer id;
+
+    @ApiModelProperty(value = "年级名称")
+    private String name;
+
+    @ApiModelProperty(value = "年级数据")
+    private List<SmartClass> children;
+}

+ 10 - 0
src/main/java/com/template/model/vo/ManageClassVo.java

@@ -0,0 +1,10 @@
+package com.template.model.vo;
+
+import lombok.Data;
+
+@Data
+public class ManageClassVo {
+    private Integer gradeId;
+    private Integer classId;
+    private String name;
+}

+ 6 - 0
src/main/java/com/template/model/vo/SmartEnrollmentUserVo.java

@@ -1,9 +1,12 @@
 package com.template.model.vo;
 
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.template.model.pojo.SmartEnrollmentUser;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.Date;
 import java.util.List;
 
 @Data
@@ -45,4 +48,7 @@ public class SmartEnrollmentUserVo {
     private String remark;
 
     private List<SmartEnrollmentAffiliateVo> list;
+
+    @ApiModelProperty(value = "创建时间")
+    private String createTime;
 }

+ 33 - 0
src/main/java/com/template/model/vo/SmartLateSettingVo.java

@@ -0,0 +1,33 @@
+package com.template.model.vo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.template.model.pojo.SmartLateTime;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class SmartLateSettingVo {
+    private Integer id;
+
+    @ApiModelProperty(value = "名称")
+    private String name;
+
+    @ApiModelProperty(value = "开始时间")
+    private String startTime;
+
+    @ApiModelProperty(value = "结束时间")
+    private String endTime;
+
+    @ApiModelProperty(value = "迟到时间数据")
+    private List<SmartLateTime> lateTimes;
+
+    @ApiModelProperty(value = "设备id")
+    private Integer smartDeviceId;
+
+    @ApiModelProperty(value = "创建时间")
+    private String createTime;
+}

+ 40 - 0
src/main/java/com/template/model/vo/SmartLateVo.java

@@ -0,0 +1,40 @@
+package com.template.model.vo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class SmartLateVo {
+    private Integer id;
+
+    @ApiModelProperty(value = "名字")
+    private String name;
+
+    @ApiModelProperty(value = "用户表id")
+    private Integer userId;
+
+    @ApiModelProperty(value = "图片")
+    private String image;
+
+    @ApiModelProperty(value = "发生时间")
+    private String dateTime;
+
+    @ApiModelProperty(value = "班级id")
+    private Integer classId;
+
+    @ApiModelProperty(value = "年级名称")
+    private String gradeName;
+
+    @ApiModelProperty(value = "班级名称")
+    private String className;
+
+    @ApiModelProperty(value = "学号")
+    private String cardNo;
+
+    @ApiModelProperty(value = "创建时间")
+    private String createTime;
+}

+ 17 - 0
src/main/java/com/template/model/vo/UserVo.java

@@ -1,6 +1,7 @@
 package com.template.model.vo;
 
 import com.template.model.request.isrRequest;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.util.List;
@@ -164,4 +165,20 @@ public class UserVo {
      */
     private List<isrRequest> subjectVos;
 
+    @ApiModelProperty(value = "管理的班级id")
+    private String manageSchoolClass;
+
+    @ApiModelProperty(value = "管理的年级id")
+    private String manageGrade;
+
+    @ApiModelProperty(value = "管理的班级集合")
+    private List<Integer> manageSchoolClassIds;
+
+    @ApiModelProperty(value = "管理的年级集合")
+    private List<Integer> manageGradeIds;
+
+    List<ManageClassGroupVo> vos;
+
+    @ApiModelProperty(value = "是否毕业 1是,没有则不是")
+    private Integer ifGraduate;
 }

+ 3 - 0
src/main/java/com/template/services/SmartAccessService.java

@@ -30,4 +30,7 @@ public interface SmartAccessService extends IService<SmartAccess> {
     List<SmartAccess> toDatelist(LocalDateTime start, LocalDateTime end);
 
     List<SmartAccess> toDateAndPlacelist(LocalDateTime startTime, LocalDateTime endTime, String type);
+
+    List<SmartAccess> getLata(String start, String end, Integer gradeId, Integer smartDeviceId);
+
 }

+ 1 - 1
src/main/java/com/template/services/SmartAttendanceService.java

@@ -43,7 +43,7 @@ public interface SmartAttendanceService extends IService<SmartAttendance> {
 
     List<SmartAttendanceVo> queryExpor(Integer gradeId, Integer classId, String status, String studentNo, String name, String startTime, String endTime);
 
-    PageUtils<AskForLeaveScreenVo> askForLeaveScreenPage(int currentPage, int pageCount, String cardNo, String ifVerification);
+    PageUtils<AskForLeaveScreenVo> askForLeaveScreenPage(int currentPage, int pageCount, String keyWord, String ifVerification,Integer gradeId,Integer classId);
 
     Integer getStudentHistoricalAttendance(Integer status, Date startTime, Date endTime);
 

+ 1 - 0
src/main/java/com/template/services/SmartClassService.java

@@ -48,4 +48,5 @@ public interface SmartClassService extends IService<SmartClass> {
 
     List<SmartClass> getSmartClasssByGrade(List<Integer> gradeIds);
 
+    List<SmartClass> getManageClass(String manageSchoolClass);
 }

+ 2 - 0
src/main/java/com/template/services/SmartGradeService.java

@@ -39,4 +39,6 @@ public interface SmartGradeService extends IService<SmartGrade> {
     int deleteGradeById(Integer id);
 
     SmartGrade querySmartGradeByName(String name);
+
+    List<SmartGrade> getManageGrade(String manageGrade);
 }

+ 21 - 0
src/main/java/com/template/services/SmartLateService.java

@@ -0,0 +1,21 @@
+package com.template.services;
+
+import com.template.model.pojo.SmartLate;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.template.model.result.PageUtils;
+import com.template.model.vo.SmartLateVo;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author ceshi
+ * @since 2025-02-21
+ */
+public interface SmartLateService extends IService<SmartLate> {
+
+    PageUtils<SmartLateVo> getList(int currentPage, int pageCount, String keyWord, String startTime, String endTime);
+
+    PageUtils<SmartLateVo> getListApp(int currentPage, int pageCount, Integer classId, String startTime, String endTime);
+}

+ 3 - 0
src/main/java/com/template/services/SmartLateSettingService.java

@@ -3,6 +3,8 @@ package com.template.services;
 import com.template.model.pojo.SmartLateSetting;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * <p>
  *  服务类
@@ -13,4 +15,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface SmartLateSettingService extends IService<SmartLateSetting> {
 
+    List<SmartLateSetting> getOverlap(String startTime, String endTime);
 }

+ 3 - 0
src/main/java/com/template/services/SmartLateTimeService.java

@@ -3,6 +3,8 @@ package com.template.services;
 import com.template.model.pojo.SmartLateTime;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * <p>
  *  服务类
@@ -13,4 +15,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface SmartLateTimeService extends IService<SmartLateTime> {
 
+    List<SmartLateTime> getGroup(String smartLateTimeGroup);
 }

+ 6 - 2
src/main/java/com/template/services/SmartUserService.java

@@ -48,11 +48,12 @@ public interface SmartUserService extends IService<SmartUser> {
 
     List<SmartUser> queryDatasByDepartments(List<Integer> departments);
 
-    PageUtils<UserVo> querySmartUserPages(int currentPage, int pageCount, List<Integer> departmentIds, String name);
+    PageUtils<UserVo> querySmartUserPages(int currentPage, int pageCount, List<Integer> departmentIds, String name,Integer ifGraduate);
+    PageUtils<UserVo> querySmartUserNoAuthPages(int currentPage, int pageCount, List<Integer> departmentIds, String name);
 
     PageUtils<GradeVo> querySmartSecordPage(int currentPage, int pageCount, String name, Integer userId);
 
-    List<SmartUser> querySmartUsers(List<Integer> departmentIds, String name);
+    List<SmartUser> querySmartUsers(List<Integer> departmentIds, String name,Integer ifGraduate);
 
     List<SmartUser> queryStudentDatas(Integer identityId,List<Integer> gradeIds);
 
@@ -188,4 +189,7 @@ public interface SmartUserService extends IService<SmartUser> {
     List<StatisticsStatement> getUserAckTotal(LocalDateTime startTime, LocalDateTime endTime);
 
     List<StatisticsStatement> getUserNormalTotal(LocalDateTime startTime, LocalDateTime endTime);
+
+    List<Integer> getNotGraduateGrade();
+
 }

+ 1 - 1
src/main/java/com/template/services/SmartVisitorService.java

@@ -42,7 +42,7 @@ public interface SmartVisitorService extends IService<SmartVisitor> {
 
     PageUtils<SmartVisitorVo> getPage(int currentPage, int pageCount, Integer type, String keyWord, Integer status, String startTime, String endTime, String visitorStartTime, String visitorEndTime);
 
-    PageUtils<SmartVisitorScreenListVo> getScreenPage(int currentPage, int pageCount, String phone, String status);
+    PageUtils<SmartVisitorScreenListVo> getScreenPage(int currentPage, int pageCount, String keyWord, String status);
 
     PageUtils<SmartVisitorScreenListVo> parentsScreenPage(int currentPage, int pageCount, int userId, String status);
 }

+ 2 - 0
src/main/java/com/template/services/WechatScanLoginService.java

@@ -77,4 +77,6 @@ public interface WechatScanLoginService {
 	BigDecimal statisticsElc(LocalDateTime start, LocalDateTime end);
 
 	BigDecimal statisticsWater(LocalDateTime start, LocalDateTime end);
+
+	PageInfo<MeterMonthData> getAppMeterMonthPage(MeterMonthData meterMonthData,Integer id);
 }

+ 5 - 0
src/main/java/com/template/services/impl/SmartAccessServiceImpl.java

@@ -76,4 +76,9 @@ public class SmartAccessServiceImpl extends ServiceImpl<SmartAccessMapper, Smart
         List<SmartAccess> list = smartAccessMapper.toDateAndPlacelist(startTime,endTime,type);
         return list;
     }
+
+    @Override
+    public List<SmartAccess> getLata(String start, String end, Integer gradeId, Integer smartDeviceId) {
+        return smartAccessMapper.getLata(start,end,gradeId,smartDeviceId);
+    }
 }

+ 2 - 2
src/main/java/com/template/services/impl/SmartAttendanceServiceImpl.java

@@ -151,9 +151,9 @@ public class SmartAttendanceServiceImpl extends ServiceImpl<SmartAttendanceMappe
     }
 
     @Override
-    public PageUtils<AskForLeaveScreenVo> askForLeaveScreenPage(int currentPage, int pageCount, String cardNo, String ifVerification) {
+    public PageUtils<AskForLeaveScreenVo> askForLeaveScreenPage(int currentPage, int pageCount, String keyWord, String ifVerification,Integer gradeId,Integer classId) {
         Page<AskForLeaveScreenVo> page = new Page<>(currentPage,pageCount);
-        IPage<AskForLeaveScreenVo> datas = smartAttendanceMapper.askForLeaveScreenPage(page,cardNo,ifVerification);
+        IPage<AskForLeaveScreenVo> datas = smartAttendanceMapper.askForLeaveScreenPage(page,keyWord,ifVerification,gradeId,classId);
         return new PageUtils(datas);
     }
 

+ 5 - 0
src/main/java/com/template/services/impl/SmartClassServiceImpl.java

@@ -141,4 +141,9 @@ public class SmartClassServiceImpl extends ServiceImpl<SmartClassMapper, SmartCl
         List<SmartClass> result = smartClassMapper.selectList(queryWrapper);
         return result;
     }
+
+    @Override
+    public List<SmartClass> getManageClass(String manageSchoolClass) {
+        return smartClassMapper.getManageClass(manageSchoolClass);
+    }
 }

+ 1 - 2
src/main/java/com/template/services/impl/SmartFaceDiscernServiceImpl.java

@@ -72,8 +72,7 @@ public class SmartFaceDiscernServiceImpl extends ServiceImpl<SmartFaceDiscernMap
     private Integer size = 50;
 
 
-//    @Async
-//    @Scheduled(cron = "0 0 0/1 * * ? ")
+
     public void baiS() {
         if(scheduleConfig.getIsOpen().equals("1")){
             try {

+ 5 - 0
src/main/java/com/template/services/impl/SmartGradeServiceImpl.java

@@ -117,4 +117,9 @@ public class SmartGradeServiceImpl extends ServiceImpl<SmartGradeMapper, SmartGr
         return result;
     }
 
+    @Override
+    public List<SmartGrade> getManageGrade(String manageGrade) {
+        return smartGradeMapper.getManageGrade(manageGrade);
+    }
+
 }

+ 42 - 0
src/main/java/com/template/services/impl/SmartLateServiceImpl.java

@@ -0,0 +1,42 @@
+package com.template.services.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.template.model.pojo.SmartLate;
+import com.template.mapper.SmartLateMapper;
+import com.template.model.result.PageUtils;
+import com.template.model.vo.SmartLateVo;
+import com.template.services.SmartLateService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author ceshi
+ * @since 2025-02-21
+ */
+@Service
+public class SmartLateServiceImpl extends ServiceImpl<SmartLateMapper, SmartLate> implements SmartLateService {
+
+    @Autowired
+    SmartLateMapper smartLateMapper;
+
+    @Override
+    public PageUtils<SmartLateVo> getList(int currentPage, int pageCount, String keyWord, String startTime, String endTime) {
+        Page<SmartLateVo> page = new Page<>(currentPage, pageCount);
+        IPage<SmartLateVo> result=smartLateMapper.getList(page,keyWord,startTime,endTime);
+        return new PageUtils<SmartLateVo>(result);
+    }
+
+    @Override
+    public PageUtils<SmartLateVo> getListApp(int currentPage, int pageCount, Integer classId, String startTime, String endTime) {
+        Page<SmartLateVo> page = new Page<>(currentPage, pageCount);
+        IPage<SmartLateVo> result=smartLateMapper.getListApp(page,classId,startTime,endTime);
+        return new PageUtils<SmartLateVo>(result);
+    }
+
+}

+ 10 - 0
src/main/java/com/template/services/impl/SmartLateSettingServiceImpl.java

@@ -4,8 +4,11 @@ import com.template.model.pojo.SmartLateSetting;
 import com.template.mapper.SmartLateSettingMapper;
 import com.template.services.SmartLateSettingService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  *  服务实现类
@@ -17,4 +20,11 @@ import org.springframework.stereotype.Service;
 @Service
 public class SmartLateSettingServiceImpl extends ServiceImpl<SmartLateSettingMapper, SmartLateSetting> implements SmartLateSettingService {
 
+    @Autowired
+    SmartLateSettingMapper smartLateSettingMapper;
+
+    @Override
+    public List<SmartLateSetting> getOverlap(String startTime, String endTime) {
+        return smartLateSettingMapper.getOverlap(startTime,endTime);
+    }
 }

+ 10 - 0
src/main/java/com/template/services/impl/SmartLateTimeServiceImpl.java

@@ -4,8 +4,11 @@ import com.template.model.pojo.SmartLateTime;
 import com.template.mapper.SmartLateTimeMapper;
 import com.template.services.SmartLateTimeService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  *  服务实现类
@@ -17,4 +20,11 @@ import org.springframework.stereotype.Service;
 @Service
 public class SmartLateTimeServiceImpl extends ServiceImpl<SmartLateTimeMapper, SmartLateTime> implements SmartLateTimeService {
 
+    @Autowired
+    SmartLateTimeMapper smartLateTimeMapper;
+
+    @Override
+    public List<SmartLateTime> getGroup(String smartLateTimeGroup) {
+        return smartLateTimeMapper.getGroup(smartLateTimeGroup);
+    }
 }

+ 18 - 4
src/main/java/com/template/services/impl/SmartUserServiceImpl.java

@@ -57,11 +57,20 @@ public class SmartUserServiceImpl extends ServiceImpl<SmartUserMapper, SmartUser
     }
 
     @Override
-    public PageUtils<UserVo> querySmartUserPages(int currentPage, int pageCount, List<Integer> departmentIds, String name) {
+    public PageUtils<UserVo> querySmartUserPages(int currentPage, int pageCount, List<Integer> departmentIds, String name,Integer ifGraduate) {
         Page<UserVo> page = new Page<>();
         page.setCurrent(currentPage);
         page.setSize(pageCount);
-        IPage<UserVo> result = smartUserMapper.querySmartUserPages(page, departmentIds, name);
+        IPage<UserVo> result = smartUserMapper.querySmartUserPages(page, departmentIds, name,ifGraduate);
+        return new PageUtils(result);
+    }
+
+    @Override
+    public PageUtils<UserVo> querySmartUserNoAuthPages(int currentPage, int pageCount, List<Integer> departmentIds, String name) {
+        Page<UserVo> page = new Page<>();
+        page.setCurrent(currentPage);
+        page.setSize(pageCount);
+        IPage<UserVo> result = smartUserMapper.querySmartUserNoAuthPages(page, departmentIds, name);
         return new PageUtils(result);
     }
 
@@ -75,8 +84,8 @@ public class SmartUserServiceImpl extends ServiceImpl<SmartUserMapper, SmartUser
     }
 
     @Override
-    public List<SmartUser> querySmartUsers(List<Integer> departmentIds, String name) {
-        List<SmartUser> result = smartUserMapper.querySmartUsers(departmentIds, name);
+    public List<SmartUser> querySmartUsers(List<Integer> departmentIds, String name,Integer ifGraduate) {
+        List<SmartUser> result = smartUserMapper.querySmartUsers(departmentIds, name,ifGraduate);
         return result;
     }
 
@@ -519,5 +528,10 @@ public class SmartUserServiceImpl extends ServiceImpl<SmartUserMapper, SmartUser
         return smartUserMapper.getUserNormalTotal(startTime, endTime);
     }
 
+    @Override
+    public List<Integer> getNotGraduateGrade() {
+        return smartUserMapper.getNotGraduateGrade();
+    }
+
 
 }

+ 2 - 2
src/main/java/com/template/services/impl/SmartVisitorServiceImpl.java

@@ -178,11 +178,11 @@ public class SmartVisitorServiceImpl extends ServiceImpl<SmartVisitorMapper, Sma
     }
 
     @Override
-    public PageUtils<SmartVisitorScreenListVo> getScreenPage(int currentPage, int pageCount, String phone, String status) {
+    public PageUtils<SmartVisitorScreenListVo> getScreenPage(int currentPage, int pageCount, String keyWord, String status) {
         Page<SmartVisitorScreenVo> page = new Page<>();
         page.setCurrent(currentPage);
         page.setSize(pageCount);
-        IPage<SmartVisitorScreenVo> datas = smartVisitorMapper.getScreenPage(page,phone,status);
+        IPage<SmartVisitorScreenVo> datas = smartVisitorMapper.getScreenPage(page,keyWord,status);
 
         List<SmartVisitorScreenVo> list = datas.getRecords();
         ArrayList<SmartVisitorScreenListVo> smartVisitorVos = new ArrayList<>();

+ 32 - 2
src/main/java/com/template/services/impl/WechatScanLoginServiceImpl.java

@@ -185,8 +185,17 @@ public class WechatScanLoginServiceImpl implements WechatScanLoginService {
     @Override
     public SmartUser selectTeacherByOpenid(String openid) {
         QueryWrapper<SmartUser> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("open_id", openid);
-        queryWrapper.eq("identity_id", eIdentityStatu.Teacher.getValue());
+//        queryWrapper.eq("open_id", openid);
+//        queryWrapper.eq("identity_id", eIdentityStatu.Teacher.getValue())
+//        只有年级主任,超级管理员,班主任
+        queryWrapper.eq("identity_id", 18)
+                .eq("open_id", openid)
+                .or()
+                .eq("identity_id",19)
+                .eq("open_id", openid)
+                .or()
+                .eq("identity_id",20)
+                .eq("open_id", openid);
         List<SmartUser> users = smartUserMapper.selectList(queryWrapper);
         if (users == null || users.size() <= 0) {
             return null;
@@ -417,4 +426,25 @@ public class WechatScanLoginServiceImpl implements WechatScanLoginService {
     public BigDecimal statisticsWater(LocalDateTime start, LocalDateTime end) {
         return wechatScanLoginMapper.statisticsWater(start,end);
     }
+
+    @Override
+    public PageInfo<MeterMonthData> getAppMeterMonthPage(MeterMonthData meterMonthData,Integer id) {
+        List<MeterMonthData> list = wechatScanLoginMapper.getMeterMonthPage(meterMonthData);
+
+//        电费需要乘以80倍
+        for (int i = 0; i < list.size(); i++) {
+            MeterMonthData meterMonthData1 = list.get(i);
+            meterMonthData1.setId(id+i);
+            Double aDouble = meterMonthData1.geteNum();
+            if (ObjectUtils.isNotEmpty(aDouble)) {
+                BigDecimal bigDecimal = new BigDecimal(aDouble);
+                BigDecimal subtract = bigDecimal.multiply(new BigDecimal(80));
+                Double el=subtract.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
+                meterMonthData1.seteNum(el);
+            }
+        }
+
+        PageInfo<MeterMonthData> meterPageInfo = new PageInfo<>(list);
+        return meterPageInfo;
+    }
 }

+ 1 - 1
src/main/resources/mapper/template/DriverStockMapper.xml

@@ -34,7 +34,7 @@
         select `name`, COUNT(*) as num from ( select CONCAT(IFNULL(b.`name`,''),i.`name` ) `name` from `smart_user` a
 left join smart_identity i on i.deleted = 0 and i.id = a.identity_id
 left join `smart_grade` b on b.deleted = 0 and a.`grade`=b.id
-where a.deleted =0 and a.is_cancel = 0) c group by `name`
+where a.deleted =0 and a.is_cancel = 0 and a.if_graduate is null ) c group by `name` ORDER BY `name`
     </select>
 
     <!--访客统计-->

+ 21 - 1
src/main/resources/mapper/template/SmartAccessMapper.xml

@@ -153,6 +153,26 @@
           AND su.identity_id = 2
           AND sa.date_time >= #{startTime}
           AND #{endTime} >= sa.date_time
-          AND sa.type=#{type}
+          AND sa.type = #{type}
+    </select>
+    <select id="getLata" resultType="com.template.model.pojo.SmartAccess">
+        SELECT
+        *
+        FROM
+        `smart_access` sa
+        LEFT JOIN smart_user su ON su.id = sa.user_id
+        LEFT JOIN smart_device sd ON sd.num = sa.sn
+        LEFT JOIN smart_grade sg ON sg.id = su.grade
+        WHERE
+        sa.deleted = 0
+        AND sa.date_time > #{start}
+        AND #{end}>sa.date_time
+            AND su.identity_id=2
+        <if test="gradeId != 0">
+            and su.grade=#{gradeId}
+        </if>
+        <if test="smartDeviceId != 0">
+            and sd.id= #{smartDeviceId}
+        </if>
     </select>
 </mapper>

+ 8 - 2
src/main/resources/mapper/template/SmartAttendanceMapper.xml

@@ -138,12 +138,18 @@
         WHERE
         sa.deleted = 0
         AND sa.`status` =6
-        <if test="cardNo != null and cardNo != ''">
-            and su.card_no like '%' #{cardNo} '%'
+        <if test="keyWord != null and keyWord != ''">
+            and (su.card_no like '%' #{keyWord} '%' or su.name like '%' #{keyWord} '%')
         </if>
         <if test="ifVerification != null and ifVerification != ''">
             and sa.if_verification = #{ifVerification}
         </if>
+        <if test="gradeId != null and gradeId != ''">
+            and su.grade = #{gradeId}
+        </if>
+        <if test="classId != null and classId != ''">
+            and su.school_class = #{classId}
+        </if>
         ORDER BY sa.initiate_time desc
     </select>
     <select id="getClassHistoricalAttendance" resultType="com.template.model.vo.ClasAttendanceVo">

+ 8 - 0
src/main/resources/mapper/template/SmartClassMapper.xml

@@ -34,5 +34,13 @@
                  LEFT JOIN smart_grade sg ON sc.grade_id = sg.id
         WHERE sc.id = #{schoolClass} and sc.deleted=0
     </select>
+    <select id="getManageClass" resultType="com.template.model.pojo.SmartClass">
+        SELECT
+            *
+        FROM
+            `smart_class`
+        WHERE deleted=0
+          AND FIND_IN_SET(id,#{manageSchoolClass})
+    </select>
 
 </mapper>

+ 8 - 0
src/main/resources/mapper/template/SmartGradeMapper.xml

@@ -2,4 +2,12 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.template.mapper.SmartGradeMapper">
 
+    <select id="getManageGrade" resultType="com.template.model.pojo.SmartGrade">
+        SELECT
+            *
+        FROM
+            `smart_grade`
+        WHERE deleted=0
+          AND FIND_IN_SET(id,#{manageGrade})
+    </select>
 </mapper>

+ 47 - 2
src/main/resources/mapper/template/SmartUserMapper.xml

@@ -43,11 +43,37 @@
         <result property="graduate" column="graduate"/>
         <result property="duties" column="duties"/>
         <result property="timeGroupId" column="time_group_id"/>
+        <result property="manageSchoolClass" column="manage_school_class"/>
+        <result property="manageGrade" column="manage_grade"/>
+        <result property="ifGraduate" column="if_graduate"/>
     </resultMap>
     <select id="querySmartUserPages" resultType="com.template.model.vo.UserVo" resultMap="smartUserPageMap">
         select
         id,card_no,name,identity_id,id_card,sex_id,department_id,head_image,grade,college,speciality,school_class,campus,dormitory_number,
-        phone,affiliate,title,address,nation,of_student,graduate,duties,time_group_id
+        phone,affiliate,title,address,nation,of_student,graduate,duties,time_group_id,manage_school_class,manage_grade,if_graduate
+        from smart_user
+        where deleted = 0 and is_cancel = 0
+        <if test="departmentIds != null and departmentIds.size() > 0">
+            and department_id in
+            <foreach collection="departmentIds" item="departmentId" index="index" open="(" close=")" separator=",">
+                ${departmentId}
+            </foreach>
+        </if>
+        <if test="name != null and name != ''">
+            and (name like '%' #{name} '%' or card_no like '%' #{name} '%')
+        </if>
+        <if test="ifGraduate != null and ifGraduate == 1">
+            and if_graduate= #{ifGraduate}
+        </if>
+        <if test="ifGraduate != null and ifGraduate == 0">
+            and if_graduate is null
+        </if>
+    </select>
+
+    <select id="querySmartUserNoAuthPages" resultType="com.template.model.vo.UserVo" resultMap="smartUserPageMap">
+        select
+        id,card_no,name,identity_id,id_card,sex_id,department_id,head_image,grade,college,speciality,school_class,campus,dormitory_number,
+        phone,affiliate,title,address,nation,of_student,graduate,duties,time_group_id,manage_school_class,manage_grade
         from smart_user
         where deleted = 0 and is_cancel = 0
         <if test="departmentIds != null and departmentIds.size() > 0">
@@ -85,11 +111,12 @@
         <result property="graduate" column="graduate"/>
         <result property="duties" column="duties"/>
         <result property="timeGroupId" column="time_group_id"/>
+        <result property="ifGraduate" column="if_graduate"/>
     </resultMap>
     <select id="querySmartUsers" resultType="com.template.model.pojo.SmartUser" resultMap="smartUsersMap">
         select
         card_no,name,identity_id,id_card,sex_id,department_id,head_image,grade,college,time_group_id,speciality,school_class,campus,dormitory_number,
-        phone,affiliate,title,address,nation,of_student,graduate,duties from smart_user
+        phone,affiliate,title,address,nation,of_student,graduate,duties,if_graduate from smart_user
         where deleted = 0 and is_cancel = 0
         <if test="departmentIds != null and departmentIds.size() > 0">
             and department_id in
@@ -100,6 +127,12 @@
         <if test="name != null and name != ''">
             and name like '%' #{name} '%'
         </if>
+        <if test="ifGraduate != null and ifGraduate == 1">
+            and if_graduate= #{ifGraduate}
+        </if>
+        <if test="ifGraduate != null and ifGraduate == 0">
+            and if_graduate is null
+        </if>
     </select>
 
 
@@ -490,6 +523,8 @@
             su.deleted = 0
           AND su.is_cancel = 0
           AND su.identity_id = 2
+          and su.school_class != 0
+          AND sc.`name` not LIKE '%临时%'
         GROUP BY
             sc.id
     </select>
@@ -545,5 +580,15 @@
         GROUP BY
             sc.id
     </select>
+    <select id="getNotGraduateGrade" resultType="java.lang.Integer">
+        SELECT
+            grade
+        FROM
+            `smart_user`
+        WHERE deleted=0
+          AND if_graduate is NULL
+          and identity_id=2
+        GROUP BY grade
+    </select>
 
 </mapper>

+ 2 - 2
src/main/resources/mapper/template/SmartVisitorMapper.xml

@@ -157,8 +157,8 @@
         <if test="status != null and status != ''">
             and sv.statu = #{status}
         </if>
-        <if test="phone != null and phone != ''">
-            and sv.user_phone = #{phone}
+        <if test="keyWord != null and keyWord != ''">
+            and (sv.user_phone = #{keyWord} or su.`name` like '%' #{keyWord} '%' )
         </if>
         order by sv.visitor_time desc
     </select>