浏览代码

Merge remote-tracking branch 'origin/dev' into dev

大数据与最优化研究所 3 月之前
父节点
当前提交
189b5e0fae
共有 100 个文件被更改,包括 3262 次插入268 次删除
  1. 1 1
      src/main/java/com/xjrsoft/common/xss/XssHttpServletRequestWrapper.java
  2. 2 2
      src/main/java/com/xjrsoft/module/activity/controller/ActivityEnrollController.java
  3. 120 59
      src/main/java/com/xjrsoft/module/activity/controller/ActivityInfoController.java
  4. 1 1
      src/main/java/com/xjrsoft/module/activity/dto/UserEnrollDto.java
  5. 5 4
      src/main/java/com/xjrsoft/module/activity/service/impl/ActivityEnrollServiceImpl.java
  6. 6 0
      src/main/java/com/xjrsoft/module/attendance/controller/StatisticsController.java
  7. 3 3
      src/main/java/com/xjrsoft/module/attendance/controller/TeacherStatisticsController.java
  8. 27 1
      src/main/java/com/xjrsoft/module/base/controller/BaseClassController.java
  9. 58 28
      src/main/java/com/xjrsoft/module/base/controller/BaseClassCourseController.java
  10. 21 0
      src/main/java/com/xjrsoft/module/base/controller/WhitelistManagementController.java
  11. 2 0
      src/main/java/com/xjrsoft/module/base/dto/AddBaseClassPageDto.java
  12. 3 0
      src/main/java/com/xjrsoft/module/base/entity/BaseClass.java
  13. 1 1
      src/main/java/com/xjrsoft/module/base/entity/BaseUserStudent.java
  14. 2 0
      src/main/java/com/xjrsoft/module/base/service/IWhitelistManagementService.java
  15. 196 0
      src/main/java/com/xjrsoft/module/base/service/impl/WhitelistManagementServiceImpl.java
  16. 5 0
      src/main/java/com/xjrsoft/module/base/vo/BaseClassPageVo.java
  17. 3 0
      src/main/java/com/xjrsoft/module/base/vo/BaseClassVo.java
  18. 4 2
      src/main/java/com/xjrsoft/module/courseTable/controller/SecondCourseController.java
  19. 10 1
      src/main/java/com/xjrsoft/module/courseTable/service/impl/SecondCourseServiceImpl.java
  20. 290 0
      src/main/java/com/xjrsoft/module/databoard/controller/DataboardController.java
  21. 19 0
      src/main/java/com/xjrsoft/module/databoard/dto/StatisticsDto.java
  22. 34 0
      src/main/java/com/xjrsoft/module/databoard/vo/CourseStatisticsVo.java
  23. 28 0
      src/main/java/com/xjrsoft/module/databoard/vo/HealthStatisticsVo.java
  24. 26 0
      src/main/java/com/xjrsoft/module/databoard/vo/MeetingStatisticsVo.java
  25. 62 0
      src/main/java/com/xjrsoft/module/databoard/vo/PersonStatisticsVo.java
  26. 31 0
      src/main/java/com/xjrsoft/module/databoard/vo/ProcessStatisticsVo.java
  27. 22 0
      src/main/java/com/xjrsoft/module/databoard/vo/VisitorStatisticsVo.java
  28. 24 10
      src/main/java/com/xjrsoft/module/form/service/impl/FormExecuteServiceImpl.java
  29. 34 0
      src/main/java/com/xjrsoft/module/job/ActivityInfoTask.java
  30. 20 3
      src/main/java/com/xjrsoft/module/job/AttenDanceWarnNoticeTask.java
  31. 5 1
      src/main/java/com/xjrsoft/module/job/AttendanceMessageTask.java
  32. 3 0
      src/main/java/com/xjrsoft/module/job/HikvisionBaseDataTask.java
  33. 0 23
      src/main/java/com/xjrsoft/module/job/HikvisionLeaveTask.java
  34. 3 0
      src/main/java/com/xjrsoft/module/job/InsertOutInRecordTask.java
  35. 72 56
      src/main/java/com/xjrsoft/module/job/JianyuekbScheduleTask.java
  36. 18 1
      src/main/java/com/xjrsoft/module/organization/controller/UserController.java
  37. 3 0
      src/main/java/com/xjrsoft/module/organization/dto/AddDepartmentDto.java
  38. 4 0
      src/main/java/com/xjrsoft/module/organization/dto/DepartmentPageDto.java
  39. 4 0
      src/main/java/com/xjrsoft/module/organization/dto/DepartmentTreeDto.java
  40. 40 0
      src/main/java/com/xjrsoft/module/organization/dto/PersonPageDto.java
  41. 1 0
      src/main/java/com/xjrsoft/module/organization/dto/UserStudentBindDto.java
  42. 3 0
      src/main/java/com/xjrsoft/module/organization/entity/Department.java
  43. 4 0
      src/main/java/com/xjrsoft/module/organization/mapper/UserMapper.java
  44. 6 0
      src/main/java/com/xjrsoft/module/organization/service/IUserService.java
  45. 9 0
      src/main/java/com/xjrsoft/module/organization/service/impl/UserServiceImpl.java
  46. 4 2
      src/main/java/com/xjrsoft/module/organization/service/impl/UserStudentServiceImpl.java
  47. 46 0
      src/main/java/com/xjrsoft/module/organization/vo/PersonPageVo.java
  48. 2 1
      src/main/java/com/xjrsoft/module/outint/entity/VisitorOutInRecord.java
  49. 11 2
      src/main/java/com/xjrsoft/module/personnel/controller/StundentFaceProcessController.java
  50. 36 28
      src/main/java/com/xjrsoft/module/personnel/controller/TeacherFaceProcessController.java
  51. 2 2
      src/main/java/com/xjrsoft/module/schedule/controller/ScheduleController.java
  52. 87 20
      src/main/java/com/xjrsoft/module/schedule/util/DataUtil.java
  53. 2 1
      src/main/java/com/xjrsoft/module/schedule/util/ScheduleUtil.java
  54. 12 1
      src/main/java/com/xjrsoft/module/student/controller/BaseNewStudentController.java
  55. 131 0
      src/main/java/com/xjrsoft/module/student/controller/BaseStudentDevelopmentController.java
  56. 5 1
      src/main/java/com/xjrsoft/module/student/controller/BaseStudentScholarshipApplicantController.java
  57. 1 1
      src/main/java/com/xjrsoft/module/student/controller/BaseStudentScholarshipCategoryController.java
  58. 15 3
      src/main/java/com/xjrsoft/module/student/controller/BaseStudentScholarshipReleaseController.java
  59. 2 1
      src/main/java/com/xjrsoft/module/student/controller/CadreDeptController.java
  60. 149 0
      src/main/java/com/xjrsoft/module/student/dto/AddBaseStudentDevelopmentDto.java
  61. 2 1
      src/main/java/com/xjrsoft/module/student/dto/AddBaseStudentScholarshipReleaseDto.java
  62. 3 1
      src/main/java/com/xjrsoft/module/student/dto/AddStudentScholarshipDto.java
  63. 21 0
      src/main/java/com/xjrsoft/module/student/dto/BaseStudentDevelopmentPageDto.java
  64. 5 0
      src/main/java/com/xjrsoft/module/student/dto/BaseStudentSimpleInfoDto.java
  65. 24 0
      src/main/java/com/xjrsoft/module/student/dto/UpdateBaseStudentDevelopmentDto.java
  66. 199 0
      src/main/java/com/xjrsoft/module/student/entity/BaseStudentDevelopment.java
  67. 2 1
      src/main/java/com/xjrsoft/module/student/entity/BaseStudentScholarshipRelease.java
  68. 20 0
      src/main/java/com/xjrsoft/module/student/mapper/BaseStudentDevelopmentMapper.java
  69. 2 0
      src/main/java/com/xjrsoft/module/student/mapper/BaseStudentMapper.java
  70. 18 0
      src/main/java/com/xjrsoft/module/student/service/IBaseStudentDevelopmentService.java
  71. 0 1
      src/main/java/com/xjrsoft/module/student/service/IBaseStudentScholarshipApplicantService.java
  72. 0 1
      src/main/java/com/xjrsoft/module/student/service/IBaseStudentScholarshipCategoryService.java
  73. 6 0
      src/main/java/com/xjrsoft/module/student/service/IBaseStudentService.java
  74. 1 0
      src/main/java/com/xjrsoft/module/student/service/impl/BaseStudentAssessmentInspectionServiceImpl.java
  75. 24 0
      src/main/java/com/xjrsoft/module/student/service/impl/BaseStudentDevelopmentServiceImpl.java
  76. 12 1
      src/main/java/com/xjrsoft/module/student/service/impl/BaseStudentServiceImpl.java
  77. 3 0
      src/main/java/com/xjrsoft/module/student/service/impl/PbVXsxxsfytbServiceImpl.java
  78. 153 0
      src/main/java/com/xjrsoft/module/student/vo/BaseStudentDevelopmentPageVo.java
  79. 155 0
      src/main/java/com/xjrsoft/module/student/vo/BaseStudentDevelopmentVo.java
  80. 3 0
      src/main/java/com/xjrsoft/module/student/vo/BaseStudentGraduatePageVo.java
  81. 3 0
      src/main/java/com/xjrsoft/module/student/vo/BaseStudentUserPageVo.java
  82. 0 2
      src/main/java/com/xjrsoft/module/student/vo/ScholarshipApplicantImportVo.java
  83. 109 0
      src/main/java/com/xjrsoft/module/system/controller/XjrMenuGroupSetController.java
  84. 145 0
      src/main/java/com/xjrsoft/module/system/controller/XjrTipsMessageController.java
  85. 32 0
      src/main/java/com/xjrsoft/module/system/dto/AddXjrMenuGroupDto.java
  86. 43 0
      src/main/java/com/xjrsoft/module/system/dto/AddXjrMenuGroupSetDto.java
  87. 39 0
      src/main/java/com/xjrsoft/module/system/dto/AddXjrTipsMessageDto.java
  88. 24 0
      src/main/java/com/xjrsoft/module/system/dto/UpdateXjrMenuGroupSetDto.java
  89. 24 0
      src/main/java/com/xjrsoft/module/system/dto/UpdateXjrTipsMessageDto.java
  90. 21 0
      src/main/java/com/xjrsoft/module/system/dto/XjrMenuGroupMenuListDto.java
  91. 19 0
      src/main/java/com/xjrsoft/module/system/dto/XjrMenuGroupSetPageDto.java
  92. 21 0
      src/main/java/com/xjrsoft/module/system/dto/XjrTipsMessagePageDto.java
  93. 84 0
      src/main/java/com/xjrsoft/module/system/entity/XjrMenuGroup.java
  94. 98 0
      src/main/java/com/xjrsoft/module/system/entity/XjrMenuGroupSet.java
  95. 90 0
      src/main/java/com/xjrsoft/module/system/entity/XjrTipsMessage.java
  96. 22 0
      src/main/java/com/xjrsoft/module/system/mapper/XjrMenuGroupMapper.java
  97. 16 0
      src/main/java/com/xjrsoft/module/system/mapper/XjrMenuGroupSetMapper.java
  98. 16 0
      src/main/java/com/xjrsoft/module/system/mapper/XjrTipsMessageMapper.java
  99. 49 0
      src/main/java/com/xjrsoft/module/system/service/IXjrMenuGroupSetService.java
  100. 14 0
      src/main/java/com/xjrsoft/module/system/service/IXjrTipsMessageService.java

+ 1 - 1
src/main/java/com/xjrsoft/common/xss/XssHttpServletRequestWrapper.java

@@ -34,7 +34,7 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
 
     private String method;
 
-    private final List<String> ignoreXssUrl = ListUtil.toList("/magic-api/**", "/magic/web/**");
+    private final List<String> ignoreXssUrl = ListUtil.toList("/magic-api/**", "/magic/web/**","/workflow/execute/*");
     //html过滤
     private final static HTMLFilter HTML_FILTER = new HTMLFilter();
 

+ 2 - 2
src/main/java/com/xjrsoft/module/activity/controller/ActivityEnrollController.java

@@ -155,7 +155,7 @@ public class ActivityEnrollController {
     @PostMapping(value = "/enroll")
     @ApiOperation(value="报名")
     @SaCheckPermission("activityinfo:detail")
-    public RT<Boolean> enroll(@Valid UserEnrollDto dto){
+    public RT<Boolean> enroll(@Valid @RequestBody UserEnrollDto dto){
         List<ActivityEnroll> enrollList = activityEnrollService.list(
                 new QueryWrapper<ActivityEnroll>().lambda()
                         .eq(ActivityEnroll::getUserId, StpUtil.getLoginIdAsLong())
@@ -167,7 +167,7 @@ public class ActivityEnrollController {
         ActivityEnroll activityEnroll = new ActivityEnroll() {{
             setUserId(StpUtil.getLoginIdAsLong());
             setCreateDate(new Date());
-            setActivityInfoId(dto.getActivityInfoId());
+            setActivityInfoId(Long.parseLong(dto.getActivityInfoId()));
         }};
         boolean save = activityEnrollService.save(activityEnroll);
 

+ 120 - 59
src/main/java/com/xjrsoft/module/activity/controller/ActivityInfoController.java

@@ -8,24 +8,18 @@ import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
 import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.module.activity.dto.ActivityEnrollExportDto;
-import com.xjrsoft.module.activity.dto.ActivityEnrollPageDto;
 import com.xjrsoft.module.activity.dto.ActivityInfoPageDto;
 import com.xjrsoft.module.activity.dto.AddActivityEnrollRangeDto;
 import com.xjrsoft.module.activity.dto.AddActivityInfoDto;
 import com.xjrsoft.module.activity.dto.ChangeStatusDto;
 import com.xjrsoft.module.activity.dto.UpdateActivityInfoDto;
 import com.xjrsoft.module.activity.entity.ActivityEnroll;
-import com.xjrsoft.module.activity.entity.ActivityEnrollRange;
 import com.xjrsoft.module.activity.entity.ActivityInfo;
 import com.xjrsoft.module.activity.service.IActivityEnrollRangeService;
 import com.xjrsoft.module.activity.service.IActivityEnrollService;
@@ -55,7 +49,10 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -95,72 +92,136 @@ public class ActivityInfoController {
     @GetMapping(value = "/info")
     @ApiOperation(value="根据id查询活动信息信息")
     @SaCheckPermission("activityinfo:detail")
-    public RT<ActivityInfoVo> info(@RequestParam Long id){
-        ActivityInfo activityInfo = activityInfoService.getByIdDeep(id);
-        if (activityInfo == null) {
-           return RT.error("找不到此数据!");
-        }
-        ActivityInfoVo infoVo = BeanUtil.toBean(activityInfo, ActivityInfoVo.class);
-        if(infoVo.getOrgId() != null){
-            Department department = departmentService.getById(infoVo.getOrgId());
-            if(department != null){
-                infoVo.setOrgName(department.getName());
+    public RT<ActivityInfoVo> info(@RequestParam Long id, Integer category){
+        ActivityInfoVo infoVo = null;
+        if(category == null || (category == 1 || category == 2)){
+            ActivityInfo activityInfo = activityInfoService.getByIdDeep(id);
+            if (activityInfo == null) {
+                return RT.error("找不到此数据!");
             }
-        }
-        if(infoVo.getEnterpriseId() != null){
-            String tableName = "company_coop";
-            Entity where = Entity.create(tableName);
-            where.set("id", infoVo.getEnterpriseId());
-            Map<String, Object> objectMap = SqlRunnerAdapter.db().dynamicSelectOne(tableName, where);
+            infoVo = BeanUtil.toBean(activityInfo, ActivityInfoVo.class);
+            if(infoVo.getOrgId() != null){
+                Department department = departmentService.getById(infoVo.getOrgId());
+                if(department != null){
+                    infoVo.setOrgName(department.getName());
+                }
+            }
+            if(infoVo.getEnterpriseId() != null){
+                String tableName = "company_coop";
+                Entity where = Entity.create(tableName);
+                where.set("id", infoVo.getEnterpriseId());
+                Map<String, Object> objectMap = SqlRunnerAdapter.db().dynamicSelectOne(tableName, where);
 
-            if(objectMap != null && objectMap.containsKey("company_name")){
-                infoVo.setEnterpriseName(objectMap.get("company_name").toString());
+                if(objectMap != null && objectMap.containsKey("company_name")){
+                    infoVo.setEnterpriseName(objectMap.get("company_name").toString());
+                }
             }
-        }
 
-        List<ActivityEnrollRangeVo> userRelationList = new ArrayList<>();
-        if(activityInfo.getEnrollRange() != null && !activityInfo.getEnrollRange().isEmpty()){
-            JSONArray asJsonArray = JSONUtil.parseArray(activityInfo.getEnrollRange());
-            for (Object jsonElement : asJsonArray) {
-                ActivityEnrollRangeVo relationDto = JSONUtil.toBean(JSONUtil.parseObj(jsonElement), ActivityEnrollRangeVo.class);
-                if(relationDto.getUserId() != null){
-                    XjrUser xjrUser = xjrUserService.getById(relationDto.getUserId());
-                    if(xjrUser != null){
-                        relationDto.setName(xjrUser.getName());
-                    }
-                }else if(relationDto.getDeptId() != null){
-                    Department department = departmentService.getById(relationDto.getDeptId());
-                    if(department != null){
-                        relationDto.setName(department.getName());
-                    }
+            List<ActivityEnrollRangeVo> userRelationList = new ArrayList<>();
+            if(activityInfo.getEnrollRange() != null && !activityInfo.getEnrollRange().isEmpty()){
+                JSONArray asJsonArray = JSONUtil.parseArray(activityInfo.getEnrollRange());
+                for (Object jsonElement : asJsonArray) {
+                    ActivityEnrollRangeVo relationDto = JSONUtil.toBean(JSONUtil.parseObj(jsonElement), ActivityEnrollRangeVo.class);
+                    if(relationDto.getUserId() != null){
+                        XjrUser xjrUser = xjrUserService.getById(relationDto.getUserId());
+                        if(xjrUser != null){
+                            relationDto.setName(xjrUser.getName());
+                        }
+                    }else if(relationDto.getDeptId() != null){
+                        Department department = departmentService.getById(relationDto.getDeptId());
+                        if(department != null){
+                            relationDto.setName(department.getName());
+                        }
 
-                }else if(relationDto.getClassId() != null){
-                    BaseClass aClass = classService.getById(relationDto.getClassId());
-                    if(aClass != null){
-                        relationDto.setName(aClass.getName());
+                    }else if(relationDto.getClassId() != null){
+                        BaseClass aClass = classService.getById(relationDto.getClassId());
+                        if(aClass != null){
+                            relationDto.setName(aClass.getName());
+                        }
                     }
+                    userRelationList.add(relationDto);
                 }
-                userRelationList.add(relationDto);
             }
-        }
-        infoVo.setActivityEnrollRangeList(userRelationList);
+            infoVo.setActivityEnrollRangeList(userRelationList);
+
+            ActivityEnrollExportDto dto = new ActivityEnrollExportDto();
+            dto.setActivityInfoId(id);
+            List<ActivityEnrollPageVo> enrollList = enrollService.getList(dto);
+            infoVo.setEnrollCount(enrollList.size());
+
+            Set<ActivityEnrollPageVo> teacherSet = enrollList.stream().filter(x -> x.getTeacherId() != null).collect(Collectors.toSet());
+            infoVo.setTeacherCount(teacherSet.size());
 
-        ActivityEnrollExportDto dto = new ActivityEnrollExportDto();
-        dto.setActivityInfoId(id);
-        List<ActivityEnrollPageVo> enrollList = enrollService.getList(dto);
-        infoVo.setEnrollCount(enrollList.size());
+            Set<ActivityEnrollPageVo> studentSet = enrollList.stream().filter(x -> x.getStudentId() != null).collect(Collectors.toSet());
+            infoVo.setStudentCount(studentSet.size());
 
-        Set<ActivityEnrollPageVo> teacherSet = enrollList.stream().filter(x -> x.getTeacherId() != null).collect(Collectors.toSet());
-        infoVo.setTeacherCount(teacherSet.size());
+            Set<ActivityEnrollPageVo> suretSet = enrollList.stream().filter(x -> (x.getStatus() == 2)).collect(Collectors.toSet());
+            infoVo.setSureCount(suretSet.size());
 
-        Set<ActivityEnrollPageVo> studentSet = enrollList.stream().filter(x -> x.getStudentId() != null).collect(Collectors.toSet());
-        infoVo.setStudentCount(studentSet.size());
+            Set<ActivityEnrollPageVo> notSuretSet = enrollList.stream().filter(x -> (x.getStatus() == 1 || x.getStatus() == 0)).collect(Collectors.toSet());
+            infoVo.setNotSureCount(notSuretSet.size());
+        }else if(category == 3){
+            String tableName = "club_activities";
+            Entity where = Entity.create(tableName);
+            where.set("id", id);
+            Map<String, Object> objectMap = SqlRunnerAdapter.db().dynamicSelectOne(tableName, where);
+            infoVo = new ActivityInfoVo();
+            if(objectMap == null){
+                return RT.ok(infoVo);
+            }
 
-        Set<ActivityEnrollPageVo> suretSet = enrollList.stream().filter(x -> (x.getStatus() == 1 || x.getStatus() == 2)).collect(Collectors.toSet());
-        infoVo.setSureCount(suretSet.size());
+            infoVo.setName(objectMap.get("club_activities_name").toString());
+            infoVo.setContent(objectMap.get("club_activities_content").toString());
+            infoVo.setStartDate((Date)objectMap.get("start_time"));
+            infoVo.setEndDate((Date)objectMap.get("end_time"));
+            infoVo.setPlace(objectMap.get("activity_location").toString());
+        }else if(category == 4){
+            String tableName = "moral_event";
+            Entity where = Entity.create(tableName);
+            where.set("id", id);
+            Map<String, Object> objectMap = SqlRunnerAdapter.db().dynamicSelectOne(tableName, where);
+            infoVo = new ActivityInfoVo();
+            if(objectMap == null){
+                return RT.ok(infoVo);
+            }
+            infoVo.setName(objectMap.get("moral_event_name").toString());
+            infoVo.setContent(objectMap.get("event_content").toString());
+            infoVo.setStartDate((Date)objectMap.get("event_start_time"));
+            infoVo.setEndDate((Date)objectMap.get("event_end_time"));
+            infoVo.setPlace(objectMap.get("event_address").toString());
+            infoVo.setOrgName(objectMap.get("host_unit").toString());
+            infoVo.setDutyPerson(objectMap.get("event_leader").toString());
+        }else if(category == 5){
+            String tableName = "wf_teacher_training";
+            Entity where = Entity.create(tableName);
+            where.set("id", id);
+            Map<String, Object> objectMap = SqlRunnerAdapter.db().dynamicSelectOne(tableName, where);
+            infoVo = new ActivityInfoVo();
+            if(objectMap == null){
+                return RT.ok(infoVo);
+            }
+            infoVo.setName(objectMap.get("training_name").toString());
+            infoVo.setContent(objectMap.get("training_topic").toString());
+            infoVo.setStartDate(Date.from(((LocalDateTime)objectMap.get("start_time")).atZone(ZoneId.systemDefault()).toInstant()));
+            infoVo.setEndDate(Date.from(((LocalDateTime)objectMap.get("end_time")).atZone(ZoneId.systemDefault()).toInstant()));
+            infoVo.setPlace(objectMap.get("training_address").toString());
+            infoVo.setDutyPerson(objectMap.get("person_in_charge").toString());
+        }else if(category == 6){
+            String tableName = "party_build_event";
+            Entity where = Entity.create(tableName);
+            where.set("id", id);
+            Map<String, Object> objectMap = SqlRunnerAdapter.db().dynamicSelectOne(tableName, where);
+            infoVo = new ActivityInfoVo();
+            if(objectMap == null){
+                return RT.ok(infoVo);
+            }
+            infoVo.setName(objectMap.get("event_type").toString());
+            infoVo.setContent(objectMap.get("event_content").toString());
+            infoVo.setStartDate((Date)objectMap.get("event_start_time"));
+            infoVo.setEndDate((Date)objectMap.get("event_end_time"));
+            infoVo.setPlace(objectMap.get("event_address").toString());
+        }
 
-        Set<ActivityEnrollPageVo> notSuretSet = enrollList.stream().filter(x -> x.getStatus() == 0).collect(Collectors.toSet());
-        infoVo.setNotSureCount(notSuretSet.size());
         return RT.ok(infoVo);
     }
 

+ 1 - 1
src/main/java/com/xjrsoft/module/activity/dto/UserEnrollDto.java

@@ -18,7 +18,7 @@ public class UserEnrollDto implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @ApiModelProperty("活动id")
-    private Long activityInfoId;
+    private String activityInfoId;
     /**
     */
     @ApiModelProperty("手机号")

+ 5 - 4
src/main/java/com/xjrsoft/module/activity/service/impl/ActivityEnrollServiceImpl.java

@@ -59,7 +59,7 @@ public class ActivityEnrollServiceImpl extends MPJBaseServiceImpl<ActivityEnroll
                                     setUserId(enrollRange.getUserId());
                                     setCreateDate(createDate);
                                     setActivityInfoId(dto.getActivityInfoId());
-                                    setStatus(0);
+                                    setStatus(2);
                                 }}
                         );
                     }
@@ -78,7 +78,7 @@ public class ActivityEnrollServiceImpl extends MPJBaseServiceImpl<ActivityEnroll
                                         setUserId(user.getId());
                                         setCreateDate(createDate);
                                         setActivityInfoId(dto.getActivityInfoId());
-                                        setStatus(0);
+                                        setStatus(2);
                                     }}
                             );
                         }
@@ -98,7 +98,7 @@ public class ActivityEnrollServiceImpl extends MPJBaseServiceImpl<ActivityEnroll
                                         setUserId(user.getUserId());
                                         setCreateDate(createDate);
                                         setActivityInfoId(dto.getActivityInfoId());
-                                        setStatus(0);
+                                        setStatus(2);
                                     }}
                             );
                         }
@@ -119,7 +119,8 @@ public class ActivityEnrollServiceImpl extends MPJBaseServiceImpl<ActivityEnroll
 
     @Override
     public Boolean delete(List<Long> ids) {
-        return null;
+        this.baseMapper.deleteBatchIds(ids);
+        return true;
     }
 
     public Page<ActivityEnrollPageVo> getPage(Page<ActivityEnrollPageVo> page, ActivityEnrollPageDto dto) {

+ 6 - 0
src/main/java/com/xjrsoft/module/attendance/controller/StatisticsController.java

@@ -103,16 +103,22 @@ public class StatisticsController {
             List<TeacherOutInRecord> outInRecords = teacherOutInRecordService.list(
                     new MPJLambdaWrapper<TeacherOutInRecord>()
                             .le(TeacherOutInRecord::getRecordTime, endTime)
+                            .select(TeacherOutInRecord::getId)
+                            .select(TeacherOutInRecord.class, x -> VoToColumnUtil.fieldsToColumns(TeacherOutInRecord.class).contains(x.getProperty()))
                             .eq(TeacherOutInRecord::getStatus, 1)
+                            .eq(dto.getDeptId() != null, UserDeptRelation::getDeptId, dto.getDeptId())
                             .eq("DATE_FORMAT(record_time, '%Y-%m-%d')", endTime.toLocalDate())
                             .ge(dto.getTimePeriod() == 2 && amEndTime != null, CarOutInRecord::getRecordTime, amEndTime)
+                            .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, TeacherOutInRecord::getUserId)
                             .orderByAsc(TeacherOutInRecord::getRecordTime)
             );
 
             long count = carMessageApplyService.count(
                     new MPJLambdaWrapper<CarMessageApply>()
                             .innerJoin(CarOutInRecord.class, CarOutInRecord::getCarMessageApplyId, CarMessageApply::getId)
+                            .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, CarMessageApply::getUserId)
                             .le(CarOutInRecord::getRecordTime, endTime)
+                            .eq(dto.getDeptId() != null, UserDeptRelation::getDeptId, dto.getDeptId())
                             .eq("DATE_FORMAT(record_time, '%Y-%m-%d')", endTime.toLocalDate())
                             .ge(dto.getTimePeriod() == 2 && amEndTime != null, CarOutInRecord::getRecordTime, amEndTime)
                             .eq(CarOutInRecord::getStatus, OutInStatusEnum.enter.getCode())

+ 3 - 3
src/main/java/com/xjrsoft/module/attendance/controller/TeacherStatisticsController.java

@@ -126,7 +126,7 @@ public class TeacherStatisticsController {
             for (TeacherStatisticsPageVo record : voIPage.getRecords()) {
                 LocalDateTime startTime, endTime, amEndTime = null;
                 AttendanceRuleDetailsUserVo detailsUserVo = teacherTodyRuleByUserId.get(record.getUserId());
-                if(dto.getTimePeriod() == 1){
+                if(dto.getTimePeriod() != null && dto.getTimePeriod() == 1){
                     startTime = queryDate.atTime(5, 0, 0);
                     if(detailsUserVo != null && detailsUserVo.getAmStartTime() != null){
                         startTime = queryDate.atTime(detailsUserVo.getAmStartTime());
@@ -135,7 +135,7 @@ public class TeacherStatisticsController {
                     if(detailsUserVo != null && detailsUserVo.getAmEndTime() != null){
                         endTime = queryDate.atTime(detailsUserVo.getAmEndTime());
                     }
-                }else if(dto.getTimePeriod() == 2){
+                }else if(dto.getTimePeriod() != null && dto.getTimePeriod() == 2){
                     startTime = queryDate.atTime(12, 0, 0);
                     if(detailsUserVo != null && detailsUserVo.getPmStartTime() != null){
                         startTime = queryDate.atTime(detailsUserVo.getPmStartTime());
@@ -199,7 +199,7 @@ public class TeacherStatisticsController {
                                     .le(CarOutInRecord::getRecordTime, endTime)
                                     .eq("DATE_FORMAT(record_time, '%Y-%m-%d')", endTime.toLocalDate())
                                     .eq(CarMessageApply::getUserId, record.getUserId())
-                                    .ge(dto.getTimePeriod() == 2 && amEndTime != null, CarOutInRecord::getRecordTime, amEndTime)
+                                    .ge(dto.getTimePeriod() != null && dto.getTimePeriod() == 2 && amEndTime != null, CarOutInRecord::getRecordTime, amEndTime)
                                     .eq(CarOutInRecord::getStatus, OutInStatusEnum.enter.getCode())
                                     .orderByAsc(CarOutInRecord::getRecordTime)
                     );

+ 27 - 1
src/main/java/com/xjrsoft/module/base/controller/BaseClassController.java

@@ -3,6 +3,7 @@ package com.xjrsoft.module.base.controller;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.xjrsoft.common.enums.DeleteMark;
 import com.xjrsoft.common.enums.EnabledMark;
@@ -16,6 +17,8 @@ import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.base.service.IBaseClassService;
 import com.xjrsoft.module.base.vo.BaseClassPageVo;
 import com.xjrsoft.module.base.vo.BaseClassVo;
+import com.xjrsoft.module.student.entity.BaseClassMajorSet;
+import com.xjrsoft.module.student.service.IBaseClassMajorSetService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
@@ -44,6 +47,7 @@ import java.util.List;
 @AllArgsConstructor
 public class BaseClassController {
     private final IBaseClassService baseClassService;
+    private final IBaseClassMajorSetService majorSetService;
 
     @GetMapping(value = "/page")
     @ApiOperation(value="班级列表(分页)")
@@ -83,6 +87,14 @@ public class BaseClassController {
         baseClass.setEnabledMark(EnabledMark.ENABLED.getCode());
         baseClass.setCreateUserId(StpUtil.getLoginIdAsLong());
         boolean isSuccess = baseClassService.save(baseClass);
+
+        if(isSuccess){
+            BaseClassMajorSet majorSet = new BaseClassMajorSet();
+            majorSet.setClassId(baseClass.getId());
+            majorSet.setMajorSetId(dto.getMajorSetId());
+            majorSet.setCreateDate(new Date());
+            majorSetService.save(majorSet);
+        }
         return RT.ok(isSuccess);
     }
 
@@ -94,6 +106,20 @@ public class BaseClassController {
         BaseClass baseClass = BeanUtil.toBean(dto, BaseClass.class);
         baseClass.setModifyDate(new Date());
         baseClass.setModifyUserId(StpUtil.getLoginIdAsLong());
-        return RT.ok(baseClassService.updateById(baseClass));
+        boolean update = baseClassService.updateById(baseClass);
+        if(update){
+            BaseClassMajorSet majorSet = majorSetService.getOne(
+                    new QueryWrapper<BaseClassMajorSet>().lambda()
+                            .eq(BaseClassMajorSet::getClassId, baseClass.getId())
+            );
+            if(majorSet != null){
+                majorSet.setClassId(baseClass.getId());
+                majorSet.setMajorSetId(dto.getMajorSetId());
+                majorSet.setModifyDate(new Date());
+                majorSetService.updateById(majorSet);
+            }
+        }
+
+        return RT.ok(update);
     }
 }

+ 58 - 28
src/main/java/com/xjrsoft/module/base/controller/BaseClassCourseController.java

@@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.hutool.core.bean.BeanUtil;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.support.ExcelTypeEnum;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.model.result.RT;
@@ -22,13 +23,15 @@ import com.xjrsoft.module.base.entity.BaseSemester;
 import com.xjrsoft.module.base.entity.ClassCourseTextbook;
 import com.xjrsoft.module.base.entity.CourseBookInfo;
 import com.xjrsoft.module.base.service.IBaseClassCourseService;
-import com.xjrsoft.module.base.service.impl.BaseCourseSubjectServiceImpl;
+import com.xjrsoft.module.base.service.IBaseClassService;
+import com.xjrsoft.module.base.service.IBaseCourseSubjectService;
+import com.xjrsoft.module.base.service.IBaseSemesterService;
 import com.xjrsoft.module.base.vo.BaseClassCourseExportListVo;
 import com.xjrsoft.module.base.vo.BaseClassCourseListVo;
 import com.xjrsoft.module.base.vo.BaseClassCoursePageVo;
 import com.xjrsoft.module.base.vo.BaseClassCourseVo;
 import com.xjrsoft.module.textbook.entity.Textbook;
-import com.xjrsoft.module.textbook.service.impl.TextbookServiceImpl;
+import com.xjrsoft.module.textbook.service.ITextbookService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
@@ -50,8 +53,10 @@ import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @title: 班级课程
@@ -68,8 +73,10 @@ public class BaseClassCourseController {
 
     private static final Logger log = LoggerFactory.getLogger(BaseClassCourseController.class);
     private final IBaseClassCourseService baseClassCourseService;
-    private final BaseCourseSubjectServiceImpl baseCourseSubjectServiceImpl;
-    private final TextbookServiceImpl textbookServiceImpl;
+    private final IBaseCourseSubjectService subjectService;
+    private final ITextbookService textbookService;
+    private final IBaseClassService classService;
+    private final IBaseSemesterService semesterService;
 
     @GetMapping(value = "/page")
     @ApiOperation(value = "班级课程列表(分页)")
@@ -167,7 +174,6 @@ public class BaseClassCourseController {
     @ApiOperation(value = "复用课程教材")
     @SaCheckPermission("baseclasscourse:detail")
     public RT<Boolean> insertClassCourseTextbookCombinations(@Valid @RequestBody ClassCourseReuseDto dto) {
-//        baseClassCourseService.markExistingRecordsAsDeleted(newClassId, sourceClassId);
         return RT.ok(baseClassCourseService.duplicateCourseBook(dto));
     }
 
@@ -206,33 +212,57 @@ public class BaseClassCourseController {
         List<BaseClassCourse> baseClassCourses = new ArrayList<>();
         List<String> duplicateLogs = new ArrayList<>();
         List<String> errorLogs = new ArrayList<>();
+        List<BaseClass> classList = classService.list(new QueryWrapper<BaseClass>());
+        Map<String, Long> classMap = new HashMap<>();
+        for (BaseClass baseClass : classList) {
+            classMap.put(baseClass.getName(), baseClass.getId());
+        }
+        List<BaseCourseSubject> courseSubjectList = subjectService.list(new QueryWrapper<BaseCourseSubject>());
+        Map<String, Long> courseSubjectMap = new HashMap<>();
+        for (BaseCourseSubject baseCourseSubject : courseSubjectList) {
+            courseSubjectMap.put(baseCourseSubject.getName(), baseCourseSubject.getId());
+        }
+        List<Textbook> textbookList = textbookService.list(new QueryWrapper<Textbook>());
+        Map<String, Long> textbookMap = new HashMap<>();
+        for (Textbook textbook : textbookList) {
+            textbookMap.put(textbook.getBookName(), textbook.getId());
+        }
+
+        List<BaseSemester> semesterList = semesterService.list(new QueryWrapper<BaseSemester>());
+        Map<String, Long> semesterMap = new HashMap<>();
+        for (BaseSemester baseSemester : semesterList) {
+            semesterMap.put(baseSemester.getName(), baseSemester.getId());
+        }
 
         for (BaseClassCoursePageVo vo : savedDataList) {
-            try {
-                Long classId = Long.parseLong(baseClassCourseService.GetClassIdByName(vo.getClassName()).toString());
-                Long courseId = Long.parseLong(baseClassCourseService.GetCourseIdByName(vo.getCourseName()).toString());
-                Long textbookId = Long.parseLong(baseClassCourseService.GetTextbookIdByName(vo.getTextbookName()).toString());
-                Long baseSemesterId = Long.parseLong(baseClassCourseService.GetBaseSemesterIdByName(vo.getSemester()).toString());
-
-                if (baseClassCourseService.checkExits(classId, courseId, textbookId)) {
-                    duplicateLogs.add(String.format("[输入的信息重复添加] 班级: %s, 课程: %s, 教材: %s", vo.getClassName(), vo.getCourseName(), vo.getTextbookName()));
-                    continue;
-                }
+            String[] textbookNames = vo.getTextbookName().split(" ");
+            for (String textbookName : textbookNames) {
+                try {
+                    Long classId = classMap.get(vo.getClassName());
+                    Long courseId = courseSubjectMap.get(vo.getCourseName());
+                    Long textbookId = textbookMap.get(textbookName);
+                    Long baseSemesterId = semesterMap.get(vo.getSemester());
+
+                    if (baseClassCourseService.checkExits(classId, courseId, textbookId)) {
+                        duplicateLogs.add(String.format("[输入的信息重复添加] 班级: %s, 课程: %s, 教材: %s", vo.getClassName(), vo.getCourseName(), vo.getTextbookName()));
+                        continue;
+                    }
 
-                if (classId != null && courseId != null && textbookId != null && baseSemesterId != null) {
-                    BaseClassCourse baseClassCourse = new BaseClassCourse();
-                    baseClassCourse.setClassId(classId);
-                    baseClassCourse.setCourseId(courseId);
-                    baseClassCourse.setTextbookId(textbookId);
-                    baseClassCourse.setCreateDate(new Date());
-                    baseClassCourse.setDeleteMark(0);
-                    baseClassCourse.setBaseSemesterId(baseSemesterId);
-                    baseClassCourses.add(baseClassCourse);
+                    if (classId != null && courseId != null && textbookId != null && baseSemesterId != null) {
+                        BaseClassCourse baseClassCourse = new BaseClassCourse();
+                        baseClassCourse.setClassId(classId);
+                        baseClassCourse.setCourseId(courseId);
+                        baseClassCourse.setTextbookId(textbookId);
+                        baseClassCourse.setCreateDate(new Date());
+                        baseClassCourse.setDeleteMark(0);
+                        baseClassCourse.setBaseSemesterId(baseSemesterId);
+                        baseClassCourses.add(baseClassCourse);
+                    }
+                } catch (NumberFormatException e) {
+                    errorLogs.add(String.format("[无法解析输入的信息] 班级: %s, 班级: %s, 教材: %s", vo.getClassName(), vo.getCourseName(), vo.getTextbookName()));
+                } catch (Exception e) {
+                    errorLogs.add(String.format("[意外错误(检查输入的名称是否正确且存在,输入错误可能返回 null)] 班级: %s, 课程: %s, 教材: %s - 错误信息:%s", vo.getClassName(), vo.getCourseName(), vo.getTextbookName(), e.getMessage()));
                 }
-            } catch (NumberFormatException e) {
-                errorLogs.add(String.format("[无法解析输入的信息] 班级: %s, 班级: %s, 教材: %s", vo.getClassName(), vo.getCourseName(), vo.getTextbookName()));
-            } catch (Exception e) {
-                errorLogs.add(String.format("[意外错误(检查输入的名称是否正确且存在,输入错误可能返回 null)] 班级: %s, 课程: %s, 教材: %s - 错误信息:%s", vo.getClassName(), vo.getCourseName(), vo.getTextbookName(), e.getMessage()));
             }
         }
 

+ 21 - 0
src/main/java/com/xjrsoft/module/base/controller/WhitelistManagementController.java

@@ -34,6 +34,7 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.validation.Valid;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -151,4 +152,24 @@ public class WhitelistManagementController {
         return RT.ok(result);
     }
 
+    @PostMapping("/activate-import")
+    @ApiOperation(value = "新生账号激活导入")
+    public RT<List<Map<String, String>>> activateImport(@RequestParam MultipartFile file) throws IOException {
+        List<Map<Integer, Object>> excelDataList = EasyExcel.read(file.getInputStream()).sheet().headRowNumber(3).doReadSync();
+        List<Map<Integer, Object>> errorList = whitelistManagementService.activateImport(excelDataList);
+        List<Map<String, String>> result = new ArrayList<>();
+
+        for (Map<Integer, Object> objectMap : errorList) {
+            Map<String, String> object = new LinkedHashMap<>();
+            object.put("学生姓名", objectMap.get(0)==null?"":objectMap.get(0).toString());
+            object.put("学生身份证", objectMap.get(1)==null?"":objectMap.get(1).toString());
+            object.put("智慧校园卡号", objectMap.get(2)==null?"":objectMap.get(2).toString());
+            object.put("家长姓名", objectMap.get(3)==null?"":objectMap.get(3).toString());
+            object.put("家长手机号", objectMap.get(4)==null?"":objectMap.get(4).toString());
+            object.put("错误信息", objectMap.get(5)==null?"":objectMap.get(5).toString());
+            result.add(object);
+        }
+        return RT.ok(result);
+    }
+
 }

+ 2 - 0
src/main/java/com/xjrsoft/module/base/dto/AddBaseClassPageDto.java

@@ -43,4 +43,6 @@ public class AddBaseClassPageDto implements Serializable {
     @ApiModelProperty("班级类型(xjr_dictionary_item[class_type])")
     private String classType;
 
+    @ApiModelProperty("专业方向id(base_major_set)")
+    private Long majorSetId;
 }

+ 3 - 0
src/main/java/com/xjrsoft/module/base/entity/BaseClass.java

@@ -73,4 +73,7 @@ public class BaseClass implements Serializable {
 
     @ApiModelProperty("班级类型(xjr_dictionary_item[class_type])")
     private String classType;
+
+    @ApiModelProperty("专业方向id(base_major_set)")
+    private Long majorSetId;
 }

+ 1 - 1
src/main/java/com/xjrsoft/module/base/entity/BaseUserStudent.java

@@ -49,7 +49,7 @@ public class BaseUserStudent implements Serializable {
     private Long classId;
 
     @ApiModelProperty("学生班主任id(xjr_user)")
-    private Long teacher_id;
+    private Long teacherId;
 
     @ApiModelProperty("流程状态(0:审核中,1:通过,2:拒绝)")
     private Integer status;

+ 2 - 0
src/main/java/com/xjrsoft/module/base/service/IWhitelistManagementService.java

@@ -38,4 +38,6 @@ public interface IWhitelistManagementService extends MPJBaseService<WhitelistMan
     void loadCaches();
 
     List<Map<Integer, Object>> importData(List<Map<Integer, Object>> savedDataList);
+
+    List<Map<Integer, Object>> activateImport(List<Map<Integer, Object>> savedDataList);
 }

+ 196 - 0
src/main/java/com/xjrsoft/module/base/service/impl/WhitelistManagementServiceImpl.java

@@ -1,28 +1,50 @@
 package com.xjrsoft.module.base.service.impl;
 
+import cn.dev33.satoken.secure.BCrypt;
+import cn.hutool.core.util.IdUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.constant.GlobalConstant;
+import com.xjrsoft.common.enums.EnabledMark;
+import com.xjrsoft.common.enums.RoleEnum;
 import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.utils.RedisUtil;
+import com.xjrsoft.config.CommonPropertiesConfig;
 import com.xjrsoft.module.base.dto.WhitelistManagementPageDto;
+import com.xjrsoft.module.base.entity.BaseClass;
+import com.xjrsoft.module.base.entity.BaseUserStudent;
 import com.xjrsoft.module.base.entity.TreeNode;
 import com.xjrsoft.module.base.entity.WhiteBaseClass;
 import com.xjrsoft.module.base.entity.WhiteBaseGrade;
 import com.xjrsoft.module.base.entity.WhitelistManagement;
 import com.xjrsoft.module.base.mapper.WhitelistManagementMapper;
+import com.xjrsoft.module.base.service.IBaseClassService;
+import com.xjrsoft.module.base.service.IBaseUserStudentService;
 import com.xjrsoft.module.base.service.IWhitelistManagementService;
 import com.xjrsoft.module.base.vo.WhitelistManagementPageVo;
+import com.xjrsoft.module.organization.entity.User;
+import com.xjrsoft.module.organization.entity.UserRoleRelation;
+import com.xjrsoft.module.organization.service.IUserRoleRelationService;
+import com.xjrsoft.module.organization.service.IUserService;
+import com.xjrsoft.module.student.entity.BaseStudent;
+import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
+import com.xjrsoft.module.student.service.IBaseStudentSchoolRollService;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 
@@ -40,6 +62,12 @@ public class WhitelistManagementServiceImpl extends MPJBaseServiceImpl<Whitelist
 
     private RedisUtil redisUtil;
 
+    private final IUserService userService;
+    private final IBaseClassService classService;
+    private final IBaseStudentSchoolRollService rollService;
+    private final CommonPropertiesConfig propertiesConfig;
+    private final IBaseUserStudentService userStudentService;
+    private final IUserRoleRelationService roleRelationService;
     @Override
     public Page<WhitelistManagementPageVo> getPage(Page<Object> objectPage, WhitelistManagementPageDto dto) {
         return whitelistManagementMapper.getPage(objectPage, dto);
@@ -156,4 +184,172 @@ public class WhitelistManagementServiceImpl extends MPJBaseServiceImpl<Whitelist
 
         return errorList;
     }
+
+    @Override
+    public List<Map<Integer, Object>> activateImport(List<Map<Integer, Object>> savedDataList) {
+        List<Map<Integer, Object>> errorList = new ArrayList<>();
+
+        List<User> studentList = userService.selectJoinList(User.class,
+                new MPJLambdaWrapper<User>()
+                        .innerJoin(BaseStudent.class, BaseStudent::getUserId, User::getId)
+        );
+        Map<String, User> studentMap = new HashMap<>();
+        for (User user : studentList) {
+            String key = user.getName() + user.getCredentialNumber();
+            studentMap.put(key, user);
+        }
+
+        List<BaseClass> classList = classService.list(new QueryWrapper<BaseClass>());
+        Map<Long, Long> classTeacherMap = new HashMap<>();
+        for (BaseClass baseClass : classList) {
+            classTeacherMap.put(baseClass.getId(), baseClass.getTeacherId());
+        }
+
+        List<BaseStudentSchoolRoll> schoolRollList = rollService.list(new QueryWrapper<BaseStudentSchoolRoll>());
+        Map<Long, Long> studentClassMap = new HashMap<>();
+        for (BaseStudentSchoolRoll el : schoolRollList) {
+            studentClassMap.put(el.getUserId(), el.getClassId());
+        }
+
+        List<User> parents = userService.list(
+                new QueryWrapper<User>().lambda()
+                        .notIn(User::getId, "SELECT user_id FROM base_student")
+        );
+        Map<String, User> parentsMap = new HashMap<>();
+        for (User parent : parents) {
+            parentsMap.put(parent.getMobile(), parent);
+        }
+
+        Set<Long> whitelistUsers = this.baseMapper.selectList(new QueryWrapper<>()).stream().map(WhitelistManagement::getUserId).collect(Collectors.toSet());
+
+
+        // 1、先把文件中的所有家长信息去重并提取出来
+        List<Map<Integer, Object>> dataList = new ArrayList<>();
+        for (Map<Integer, Object> vo : savedDataList) {
+            List<String> errorLogs = new ArrayList<>();
+
+            if(vo.get(0) == null || "".equals(vo.get(0).toString())){
+                errorLogs.add("学生姓名为空");
+            }
+            if(vo.get(1) == null || "".equals(vo.get(1).toString())){
+                errorLogs.add("学生身份证为空");
+            }
+            if(vo.get(2) == null || "".equals(vo.get(2).toString())){
+                errorLogs.add("智慧校园卡号为空");
+            }
+            if(vo.get(3) == null || "".equals(vo.get(3).toString())){
+                errorLogs.add("家长姓名为空");
+            }
+            if(vo.get(4) == null || "".equals(vo.get(4).toString())){
+                errorLogs.add("家长手机号为空");
+            }
+            String studentKey = vo.get(0).toString() + vo.get(1).toString();
+            if(!studentMap.containsKey(studentKey)){
+                errorLogs.add("未能查询到该学生");
+            }
+            if(!errorLogs.isEmpty()){
+                vo.put(5, errorLogs.toString().replace("[", "").replace("]", ""));
+                errorList.add(vo);
+                continue;
+            }
+            dataList.add(vo);
+        }
+
+        List<User> updateList = new ArrayList<>();
+        List<BaseUserStudent> userStudentList = new ArrayList<>();
+        List<User> parentInsList = new ArrayList<>();
+        List<User> parentUpdList = new ArrayList<>();
+        List<UserRoleRelation> roleRelationList = new ArrayList<>();
+        List<WhitelistManagement> whitelist = new ArrayList();
+        LocalDateTime now = LocalDateTime.now();
+        Date createDate = new Date();
+
+        for (Map<Integer, Object> vo : dataList) {
+            String studentKey = vo.get(0).toString() + vo.get(1).toString();
+            long parentId = IdUtil.getSnowflakeNextId();
+            if(parentsMap.get(vo.get(4).toString()) != null){
+                User parent = parentsMap.get(vo.get(4).toString());
+                parentId = parent.getId();
+                parent.setName(vo.get(3).toString());
+                parent.setModifyDate(now);
+                parentUpdList.add(parent);
+            }else{
+                User parent = new User();
+                parent.setId(parentId);
+                parent.setPassword(BCrypt.hashpw(vo.get(4).toString(), BCrypt.gensalt()));
+                parent.setCreateDate(now);
+                parent.setMobile(vo.get(4).toString());
+                parent.setName(vo.get(3).toString());
+                parent.setUserName(vo.get(4).toString());
+                parent.setIsChangePassword(1);
+                parentInsList.add(parent);
+
+                UserRoleRelation roleRelation = new UserRoleRelation();
+                roleRelation.setRoleId(RoleEnum.PARENT.getCode());
+                roleRelation.setUserId(parentId);
+                roleRelationList.add(roleRelation);
+            }
+
+            User user = studentMap.get(studentKey);
+            user.setMobile(vo.get(2).toString());
+            user.setEnabledMark(EnabledMark.ENABLED.getCode());
+            updateList.add(user);
+            Long classId = studentClassMap.get(user.getId());
+            Long teacherId = classTeacherMap.get(classId);
+
+            BaseUserStudent userStudent = new BaseUserStudent();
+            userStudent.setStatus(1);
+            userStudent.setStudentId(user.getId());
+            userStudent.setStudentIdentity(user.getCredentialNumber());
+            userStudent.setStudentNane(user.getName());
+            userStudent.setCreateDate(new Date());
+            userStudent.setClassId(classId);
+            userStudent.setTeacherId(teacherId);
+            userStudent.setUserId(parentId);
+            userStudent.setUserPhone(vo.get(4).toString());
+            userStudentList.add(userStudent);
+
+
+            if(!whitelistUsers.contains(user.getId())){
+                whitelist.add(new WhitelistManagement(){{
+                    setCredentialNumber(user.getCredentialNumber());
+                    setUserId(user.getId());
+                    setName(user.getName());
+                    setPhone(user.getMobile());
+                    setCreateDate(createDate);
+                }});
+            }
+        }
+
+        if(!updateList.isEmpty()){
+            userService.updateBatchById(updateList);
+        }
+        if(!userStudentList.isEmpty()){
+            userStudentService.saveBatch(userStudentList);
+        }
+        if(!parentInsList.isEmpty()){
+            userService.saveBatch(parentInsList);
+        }
+        if(!parentUpdList.isEmpty()){
+            userService.updateBatchById(parentUpdList);
+        }
+        if(!roleRelationList.isEmpty()){
+            roleRelationService.saveBatch(roleRelationList);
+        }
+        if(!whitelist.isEmpty()){
+            this.saveBatch(whitelist);
+        }
+
+        CompletableFuture.runAsync(() -> {
+            List<User> list = userService.list();
+            redisUtil.set(GlobalConstant.USER_CACHE_KEY, list);
+
+            List<UserRoleRelation> userRoleRelationList = roleRelationService.list(Wrappers.lambdaQuery(UserRoleRelation.class));
+            redisUtil.set(GlobalConstant.USER_ROLE_RELATION_CACHE_KEY, userRoleRelationList);
+
+            this.loadCaches();
+        });
+
+        return errorList;
+    }
 }

+ 5 - 0
src/main/java/com/xjrsoft/module/base/vo/BaseClassPageVo.java

@@ -52,4 +52,9 @@ public class BaseClassPageVo {
     @ApiModelProperty("机构名称")
     private String orgName;
 
+    @ApiModelProperty("专业方向id(base_major_set)")
+    private Long majorSetId;
+
+    @ApiModelProperty("专业方向名称")
+    private String majorSetName;
 }

+ 3 - 0
src/main/java/com/xjrsoft/module/base/vo/BaseClassVo.java

@@ -68,4 +68,7 @@ public class BaseClassVo {
     @ApiModelProperty("班级类型(xjr_dictionary_item[class_type])")
     private String classType;
 
+    @ApiModelProperty("专业方向id(base_major_set)")
+    private Long majorSetId;
+
 }

+ 4 - 2
src/main/java/com/xjrsoft/module/courseTable/controller/SecondCourseController.java

@@ -223,7 +223,9 @@ public class SecondCourseController {
                     setRoleType("学生");
                 }
                 setUserName(listVo.getUserName());
-                setCreateDate(sdf.format(listVo.getCreateDate()));
+                if(listVo.getCreateDate() != null){
+                    setCreateDate(sdf.format(listVo.getCreateDate()));
+                }
             }});
         }
 
@@ -237,7 +239,7 @@ public class SecondCourseController {
     @PostMapping(value = "/enroll")
     @ApiOperation(value="报名")
     @SaCheckPermission("secondcourse:detail")
-    public RT<Boolean> enroll(@Valid UserEnrollDto dto){
+    public RT<Boolean> enroll(@Valid @RequestBody UserEnrollDto dto){
         Boolean enroll = secondCourseService.enroll(dto);
         return RT.ok(enroll);
     }

+ 10 - 1
src/main/java/com/xjrsoft/module/courseTable/service/impl/SecondCourseServiceImpl.java

@@ -31,6 +31,7 @@ import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
@@ -56,16 +57,19 @@ public class SecondCourseServiceImpl extends MPJBaseServiceImpl<SecondCourseMapp
     public Boolean add(AddSecondCourseDto dto) {
         SecondCourse secondCourse = BeanUtil.toBean(dto, SecondCourse.class);
         secondCourse.setEnrollRange(JSONUtil.toJsonStr(dto.getSecondCourseEnrollRangeList()));
+        secondCourse.setCreateDate(new Date());
         courseMapper.insert(secondCourse);
-        if(secondCourse.getSecondCourseEnrollList() != null){
+        if(secondCourse.getSecondCourseTimeList() != null){
             for (SecondCourseTime secondCourseTime : secondCourse.getSecondCourseTimeList()) {
                 secondCourseTime.setSecondCourseId(secondCourse.getId());
+                secondCourseTime.setCreateDate(new Date());
                 courseTimeMapper.insert(secondCourseTime);
             }
         }
         if(secondCourse.getSecondCourseEnrollRangeList() != null){
             for (SecondCourseEnrollRange secondCourseEnrollRange : secondCourse.getSecondCourseEnrollRangeList()) {
                 secondCourseEnrollRange.setSecondCourseId(secondCourse.getId());
+                secondCourseEnrollRange.setCreateDate(new Date());
                 enrollRangeMapper.insert(secondCourseEnrollRange);
             }
         }
@@ -78,6 +82,7 @@ public class SecondCourseServiceImpl extends MPJBaseServiceImpl<SecondCourseMapp
     public Boolean update(UpdateSecondCourseDto dto) {
         SecondCourse secondCourse = BeanUtil.toBean(dto, SecondCourse.class);
         secondCourse.setEnrollRange(JSONUtil.toJsonStr(dto.getSecondCourseEnrollRangeList()));
+        secondCourse.setModifyDate(new Date());
         courseMapper.updateById(secondCourse);
         //********************************* SecondCourseTime  增删改  开始 *******************************************/
         {
@@ -92,12 +97,14 @@ public class SecondCourseServiceImpl extends MPJBaseServiceImpl<SecondCourseMapp
             for (SecondCourseTime secondCourseTime : secondCourse.getSecondCourseTimeList()) {
                 //如果不等于空则修改
                 if (secondCourseTime.getId() != null) {
+                    secondCourseTime.setModifyDate(new Date());
                     courseTimeMapper.updateById(secondCourseTime);
                 }
                 //如果等于空 则新增
                 else {
                     //已经不存在的id 删除
                     secondCourseTime.setSecondCourseId(secondCourse.getId());
+                    secondCourseTime.setCreateDate(new Date());
                     courseTimeMapper.insert(secondCourseTime);
                 }
             }
@@ -121,12 +128,14 @@ public class SecondCourseServiceImpl extends MPJBaseServiceImpl<SecondCourseMapp
             for (SecondCourseEnrollRange secondCourseEnrollRange : secondCourse.getSecondCourseEnrollRangeList()) {
                 //如果不等于空则修改
                 if (secondCourseEnrollRange.getId() != null) {
+                    secondCourseEnrollRange.setModifyDate(new Date());
                     enrollRangeMapper.updateById(secondCourseEnrollRange);
                 }
                 //如果等于空 则新增
                 else {
                     //已经不存在的id 删除
                     secondCourseEnrollRange.setSecondCourseId(secondCourse.getId());
+                    secondCourseEnrollRange.setCreateDate(new Date());
                     enrollRangeMapper.insert(secondCourseEnrollRange);
                 }
             }

+ 290 - 0
src/main/java/com/xjrsoft/module/databoard/controller/DataboardController.java

@@ -0,0 +1,290 @@
+package com.xjrsoft.module.databoard.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.github.yulichang.toolkit.MPJWrappers;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.xjrsoft.common.enums.DeleteMark;
+import com.xjrsoft.common.enums.GenderDictionaryEnum;
+import com.xjrsoft.common.enums.StudyStatusEnum;
+import com.xjrsoft.common.enums.WorkflowIsRecycleType;
+import com.xjrsoft.common.model.result.RT;
+import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
+import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.courseTable.entity.CourseTable;
+import com.xjrsoft.module.courseTable.service.ICourseTableService;
+import com.xjrsoft.module.databoard.dto.StatisticsDto;
+import com.xjrsoft.module.databoard.vo.CourseStatisticsVo;
+import com.xjrsoft.module.databoard.vo.HealthStatisticsVo;
+import com.xjrsoft.module.databoard.vo.MeetingStatisticsVo;
+import com.xjrsoft.module.databoard.vo.PersonStatisticsVo;
+import com.xjrsoft.module.databoard.vo.ProcessStatisticsVo;
+import com.xjrsoft.module.databoard.vo.VisitorStatisticsVo;
+import com.xjrsoft.module.outint.entity.VisitorOutInRecord;
+import com.xjrsoft.module.outint.service.IVisitorOutInRecordService;
+import com.xjrsoft.module.student.dto.BaseStudentUserPageDto;
+import com.xjrsoft.module.student.service.IBaseStudentService;
+import com.xjrsoft.module.student.vo.BaseStudentUserPageVo;
+import com.xjrsoft.module.system.entity.DictionaryDetail;
+import com.xjrsoft.module.teacher.entity.BaseTeacher;
+import com.xjrsoft.module.teacher.entity.XjrUser;
+import com.xjrsoft.module.teacher.service.ITeacherbaseManagerService;
+import com.xjrsoft.module.teacher.vo.XjrUserPageVo;
+import com.xjrsoft.module.workflow.constant.WorkflowConstant;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.camunda.bpm.engine.HistoryService;
+import org.camunda.bpm.engine.history.HistoricProcessInstanceQuery;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import java.time.LocalDate;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+* @title: 数据看板代码
+* @Date: 2024年8月2日
+* @Version 1.0
+*/
+@RestController
+@RequestMapping("/databoard" + "/databoard")
+@Api(value = "/dataexpert"  + "/databoard",tags = "数据看板代码")
+@AllArgsConstructor
+public class DataboardController {
+
+    private final HistoryService historyService;
+    private final ICourseTableService courseTableService;
+    private final IVisitorOutInRecordService visitorService;
+    private final IBaseStudentService studentService;
+    private final ITeacherbaseManagerService teacherService;
+
+    @GetMapping(value = "/process-statistics")
+    @ApiOperation(value="流程统计")
+    @SaCheckPermission("databoard:detail")
+    public RT<ProcessStatisticsVo> processStatistics(@Valid StatisticsDto dto){
+        HistoricProcessInstanceQuery historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery()
+                .variableValueEquals(WorkflowConstant.PROCESS_ISRECYCLE_FLAG_KEY, WorkflowIsRecycleType.NO.getCode());
+        if(dto.getUserId() != null){
+            historicProcessInstanceQuery.variableValueEquals(WorkflowConstant.PROCESS_START_USER_ID_KEY, dto.getUserId());
+        }
+
+        ProcessStatisticsVo result = new ProcessStatisticsVo();
+        result.setAllCount(historicProcessInstanceQuery.list().size());
+        result.setCompleteCount(historicProcessInstanceQuery.finished().list().size());
+        result.setUncompleteCount(historicProcessInstanceQuery.unfinished().list().size());
+
+        return RT.ok(result);
+    }
+
+    @GetMapping(value = "/meeting-statistics")
+    @ApiOperation(value="会议统计")
+    @SaCheckPermission("databoard:detail")
+    public RT<MeetingStatisticsVo> meetingStatistics(@Valid StatisticsDto dto){
+        String sql = "SELECT id, (SELECT COUNT(*) FROM xjr_user WHERE FIND_IN_SET(id, meeting_apply_participants)) AS person_count FROM wf_meeting_apply";
+        List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
+        MeetingStatisticsVo result = new MeetingStatisticsVo();
+        result.setAllCount(list.size());
+        int personCount = 0;
+        for (Map<String, Object> objectMap : list) {
+            personCount += (Long)objectMap.get("person_count");
+        }
+        result.setPersonCount(personCount);
+        return RT.ok(result);
+    }
+
+    @GetMapping(value = "/course-statistics")
+    @ApiOperation(value="课表统计")
+    @SaCheckPermission("databoard:detail")
+    public RT<CourseStatisticsVo> courseStatistics(@Valid StatisticsDto dto){
+        List<CourseTable> list = courseTableService.list(
+                new QueryWrapper<CourseTable>().lambda()
+                        .eq(CourseTable::getScheduleDate, new Date())
+        );
+        CourseStatisticsVo result = new CourseStatisticsVo();
+        result.setAllCount(list.size());
+        int teacherCount = 0, noTeacherCount = 0;
+        for (CourseTable courseTable : list) {
+            if(courseTable.getTimePeriod() != null && courseTable.getTeacherId() != 0){
+                teacherCount ++;
+            }else{
+                noTeacherCount ++;
+            }
+        }
+        result.setTeacherCount(teacherCount);
+        result.setNoTeacherCount(noTeacherCount);
+
+        String sql = "SELECT * FROM wf_course_adjust WHERE STATUS = 1 AND exchange_date = NOW() and adjust_type = 'course_adjust'";
+        long adjustCount = SqlRunnerAdapter.db().selectCount(sql);
+        result.setAdjustCount(Integer.parseInt(adjustCount + ""));
+
+        sql = "SELECT * FROM wf_course_adjust WHERE STATUS = 1 AND exchange_date = NOW() and adjust_type = 'course_exchange'";
+        long exchangeCount = SqlRunnerAdapter.db().selectCount(sql);
+        result.setReplaceCount(Integer.parseInt(exchangeCount + ""));
+
+        return RT.ok(result);
+    }
+
+    @GetMapping(value = "/visitor-statistics")
+    @ApiOperation(value="访客统计")
+    @SaCheckPermission("databoard:detail")
+    public RT<VisitorStatisticsVo> visitorStatistics(@Valid StatisticsDto dto){
+        List<VisitorOutInRecord> list = visitorService.list(
+                new QueryWrapper<VisitorOutInRecord>().lambda()
+                        .eq(VisitorOutInRecord::getDeleteMark, DeleteMark.DELETED.getCode())
+        );
+        VisitorStatisticsVo result = new VisitorStatisticsVo();
+        result.setAllCount(list.size());
+        LocalDate today = LocalDate.now();
+        int todayCount = 0;
+        for (VisitorOutInRecord record : list) {
+            if(today.equals(record.getRecordTime().toLocalDate())){
+                todayCount ++;
+            }
+        }
+        result.setTodayCount(todayCount);
+        return RT.ok(result);
+    }
+
+    @GetMapping(value = "/person-statistics")
+    @ApiOperation(value="全校师生数据概览")
+    @SaCheckPermission("databoard:detail")
+    public RT<PersonStatisticsVo> personStatistics(@Valid StatisticsDto dto){
+
+        List<BaseStudentUserPageVo> studentList = studentService.getStudentList(new BaseStudentUserPageDto());
+
+        PersonStatisticsVo result = new PersonStatisticsVo();
+        result.setStudentCount(studentList.size());
+
+        Set<String> studentMaleSet = studentList.stream()
+                .filter(x -> (x.getGenderCn() != null && x.getGenderCn().equals(GenderDictionaryEnum.MALE.getCode())))
+                .map(BaseStudentUserPageVo::getId).collect(Collectors.toSet());
+        result.setStudentMaleCount(studentMaleSet.size());
+
+        Set<String> studentFemaleSet = studentList.stream()
+                .filter(x -> (x.getGenderCn() != null && x.getGenderCn().equals(GenderDictionaryEnum.FEMALE.getCode())))
+                .map(BaseStudentUserPageVo::getId).collect(Collectors.toSet());
+        result.setStudentFemaleCount(studentFemaleSet.size());
+
+        Set<String> studentStayMaleSet = studentList.stream()
+                .filter(x -> (
+                        x.getGenderCn() != null
+                        && x.getGenderCn().equals(GenderDictionaryEnum.MALE.getCode())
+                        && x.getStduyStatusCn() != null
+                        && x.getStduyStatusCn().equals(StudyStatusEnum.InResidence.getCode())
+                ))
+                .map(BaseStudentUserPageVo::getId).collect(Collectors.toSet());
+        result.setStudentStayMaleCount(studentStayMaleSet.size());
+
+        Set<String> studentNotStayMaleSet = studentList.stream()
+                .filter(x -> (
+                        x.getGenderCn() != null
+                                && x.getGenderCn().equals(GenderDictionaryEnum.MALE.getCode())
+                                && x.getStduyStatusCn() != null
+                                && x.getStduyStatusCn().equals(StudyStatusEnum.AttendDaySchool.getCode())
+                ))
+                .map(BaseStudentUserPageVo::getId).collect(Collectors.toSet());
+        result.setStudentNotStayMaleCount(studentNotStayMaleSet.size());
+
+        Set<String> studentStayFemaleSet = studentList.stream()
+                .filter(x -> (
+                        x.getGenderCn() != null
+                                && x.getGenderCn().equals(GenderDictionaryEnum.FEMALE.getCode())
+                                && x.getStduyStatusCn() != null
+                                && x.getStduyStatusCn().equals(StudyStatusEnum.InResidence.getCode())
+                ))
+                .map(BaseStudentUserPageVo::getId).collect(Collectors.toSet());
+        result.setStudentStayFemaleCount(studentStayFemaleSet.size());
+
+        Set<String> studentNotStayFemaleSet = studentList.stream()
+                .filter(x -> (
+                        x.getGenderCn() != null
+                                && x.getGenderCn().equals(GenderDictionaryEnum.FEMALE.getCode())
+                                && x.getStduyStatusCn() != null
+                                && x.getStduyStatusCn().equals(StudyStatusEnum.AttendDaySchool.getCode())
+                ))
+                .map(BaseStudentUserPageVo::getId).collect(Collectors.toSet());
+        result.setStudentNotStayFemaleCount(studentNotStayFemaleSet.size());
+
+        MPJLambdaWrapper<XjrUser> queryWrapper = MPJWrappers.<XjrUser>lambdaJoin()
+                .disableSubLogicDel()
+                .orderByDesc(XjrUser::getId)
+                .select(XjrUser::getId)
+                .select(XjrUser.class,x -> VoToColumnUtil.fieldsToColumns(XjrUserPageVo.class).contains(x.getProperty()))
+                .innerJoin(BaseTeacher.class,BaseTeacher::getUserId,XjrUser::getId)
+                .leftJoin(DictionaryDetail.class,DictionaryDetail::getCode,BaseTeacher::getJobState, ext->ext.selectAs(DictionaryDetail::getName, XjrUserPageVo::getJobState))
+                .leftJoin(DictionaryDetail.class,DictionaryDetail::getCode,XjrUser::getCredentialType,ext->ext.selectAs(DictionaryDetail::getName, XjrUserPageVo::getCredentialType))
+                .leftJoin(DictionaryDetail.class,DictionaryDetail::getCode,BaseTeacher::getEmployWay,ext->ext.selectAs(DictionaryDetail::getName, XjrUserPageVo::getEmployWay))
+
+                .selectAsClass(BaseTeacher.class, XjrUserPageVo.class);
+
+        List<XjrUserPageVo> teacherList = teacherService.selectJoinList(XjrUserPageVo.class, queryWrapper);
+        result.setTeacherCount(teacherList.size());
+
+        Set<String> teacherMaleSet = teacherList.stream()
+                .filter(x -> (x.getGender() != null && x.getGender().equals(GenderDictionaryEnum.MALE.getCode())))
+                .map(XjrUserPageVo::getId).collect(Collectors.toSet());
+        result.setTeacherMaleCount(teacherMaleSet.size());
+
+        Set<String> teacherFemaleSet = teacherList.stream()
+                .filter(x -> (x.getGender() != null && x.getGender().equals(GenderDictionaryEnum.FEMALE.getCode())))
+                .map(XjrUserPageVo::getId).collect(Collectors.toSet());
+        result.setTeacherFemaleCount(teacherFemaleSet.size());
+
+        Set<String> teacherSet1 = teacherList.stream()
+                .filter(x -> (x.getEmployWay() != null && x.getEmployWay().equals("FB1601")))
+                .map(XjrUserPageVo::getId).collect(Collectors.toSet());
+        result.setTeacherCount1(teacherSet1.size());
+        Set<String> teacherSet2 = teacherList.stream()
+                .filter(x -> (x.getEmployWay() != null && x.getEmployWay().equals("FB1602")))
+                .map(XjrUserPageVo::getId).collect(Collectors.toSet());
+        result.setTeacherCount2(teacherSet2.size());
+        Set<String> teacherSet3 = teacherList.stream()
+                .filter(x -> (x.getEmployWay() != null && x.getEmployWay().equals("FB1606")))
+                .map(XjrUserPageVo::getId).collect(Collectors.toSet());
+        result.setTeacherCount3(teacherSet3.size());
+        Set<String> teacherSet4 = teacherList.stream()
+                .filter(x -> (x.getEmployWay() != null && x.getEmployWay().equals("FB1609")))
+                .map(XjrUserPageVo::getId).collect(Collectors.toSet());
+        result.setTeacherCount4(teacherSet4.size());
+        Set<String> teacherSet5 = teacherList.stream()
+                .filter(x -> (x.getEmployWay() != null && x.getEmployWay().equals("FB1608")))
+                .map(XjrUserPageVo::getId).collect(Collectors.toSet());
+        result.setTeacherCount5(teacherSet5.size());
+        return RT.ok(result);
+    }
+
+    @GetMapping(value = "/health-statistics")
+    @ApiOperation(value="学生健康统计")
+    @SaCheckPermission("databoard:detail")
+    public RT<HealthStatisticsVo> healthStatistics(@Valid StatisticsDto dto){
+        String sql = "SELECT gender,COUNT(*) AS a_count FROM student_infection WHERE status = 1 GROUP BY gender";
+        List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
+        HealthStatisticsVo result = new HealthStatisticsVo();
+        for (Map<String, Object> objectMap : list) {
+            if(GenderDictionaryEnum.FEMALE.getCode().equals(objectMap.get("gender").toString())){
+                result.setInfectionFemaleCount(Integer.parseInt(objectMap.get("a_count").toString()));
+            }if(GenderDictionaryEnum.MALE.getCode().equals(objectMap.get("gender").toString())){
+                result.setInfectionMaleCount(Integer.parseInt(objectMap.get("a_count").toString()));
+            }
+        }
+
+        sql = "SELECT gender,COUNT(*) AS a_count FROM student_psychological WHERE status = 1 GROUP BY gender";
+        list = SqlRunnerAdapter.db().selectList(sql);
+        for (Map<String, Object> objectMap : list) {
+            if(GenderDictionaryEnum.FEMALE.getCode().equals(objectMap.get("gender").toString())){
+                result.setInfectionFemaleCount(Integer.parseInt(objectMap.get("a_count").toString()));
+            }if(GenderDictionaryEnum.MALE.getCode().equals(objectMap.get("gender").toString())){
+                result.setPsychologicalMaleCount(Integer.parseInt(objectMap.get("a_count").toString()));
+            }
+        }
+        return RT.ok(result);
+    }
+
+}

+ 19 - 0
src/main/java/com/xjrsoft/module/databoard/dto/StatisticsDto.java

@@ -0,0 +1,19 @@
+package com.xjrsoft.module.databoard.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+* @title: 数据看板-流程统计入参
+* @Author dzx
+* @Date: 2024年8月2日
+* @Version 1.0
+*/
+@Data
+public class StatisticsDto {
+
+    @ApiModelProperty("用户id")
+    private Long userId;
+
+}

+ 34 - 0
src/main/java/com/xjrsoft/module/databoard/vo/CourseStatisticsVo.java

@@ -0,0 +1,34 @@
+package com.xjrsoft.module.databoard.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+* @title: 数据看板-课程统计出参
+* @Author dzx
+* @Date: 2024年8月2日
+* @Version 1.0
+*/
+@Data
+public class CourseStatisticsVo {
+
+    /**
+    * 发起流程总数
+    */
+    @ApiModelProperty("课程总数")
+    private Integer allCount;
+    /**
+    * 完成总数
+    */
+    @ApiModelProperty("有课老师总数")
+    private Integer teacherCount;
+
+    @ApiModelProperty("有课老师总数")
+    private Integer noTeacherCount;
+
+    @ApiModelProperty("调课总数")
+    private Integer adjustCount;
+
+    @ApiModelProperty("顶课总数")
+    private Integer replaceCount;
+}

+ 28 - 0
src/main/java/com/xjrsoft/module/databoard/vo/HealthStatisticsVo.java

@@ -0,0 +1,28 @@
+package com.xjrsoft.module.databoard.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+* @title: 数据看板-课程统计出参
+* @Author dzx
+* @Date: 2024年8月2日
+* @Version 1.0
+*/
+@Data
+public class HealthStatisticsVo {
+
+
+    @ApiModelProperty("传染病登记人数-男")
+    private Integer infectionMaleCount;
+
+    @ApiModelProperty("传染病登记人数-女")
+    private Integer infectionFemaleCount;
+
+    @ApiModelProperty("心理咨询人数-男")
+    private Integer psychologicalMaleCount;
+
+    @ApiModelProperty("心理咨询人数-女")
+    private Integer psychologicalFemaleCount;
+
+}

+ 26 - 0
src/main/java/com/xjrsoft/module/databoard/vo/MeetingStatisticsVo.java

@@ -0,0 +1,26 @@
+package com.xjrsoft.module.databoard.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+* @title: 数据看板-会议统计出参
+* @Author dzx
+* @Date: 2024年8月2日
+* @Version 1.0
+*/
+@Data
+public class MeetingStatisticsVo {
+
+    /**
+    * 发起流程总数
+    */
+    @ApiModelProperty("会议总数")
+    private Integer allCount;
+    /**
+    * 完成总数
+    */
+    @ApiModelProperty("参会总人数")
+    private Integer personCount;
+
+}

+ 62 - 0
src/main/java/com/xjrsoft/module/databoard/vo/PersonStatisticsVo.java

@@ -0,0 +1,62 @@
+package com.xjrsoft.module.databoard.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+* @title: 数据看板-课程统计出参
+* @Author dzx
+* @Date: 2024年8月2日
+* @Version 1.0
+*/
+@Data
+public class PersonStatisticsVo {
+
+
+    @ApiModelProperty("教师总人数")
+    private Integer teacherCount;
+
+    @ApiModelProperty("男教师总人数")
+    private Integer teacherMaleCount;
+
+    @ApiModelProperty("女教师总人数")
+    private Integer teacherFemaleCount;
+
+    @ApiModelProperty("正式聘用教师数")
+    private Integer teacherCount1;
+
+    @ApiModelProperty("外聘/临聘教师数")
+    private Integer teacherCount2;
+
+    @ApiModelProperty("兼职教师数")
+    private Integer teacherCount3;
+
+    @ApiModelProperty("合作办学教师数")
+    private Integer teacherCount4;
+
+    @ApiModelProperty("其他人员")
+    private Integer teacherCount5;
+
+
+    @ApiModelProperty("学生总人数")
+    private Integer studentCount;
+
+    @ApiModelProperty("男学生总人数")
+    private Integer studentMaleCount;
+
+    @ApiModelProperty("女学生总人数")
+    private Integer studentFemaleCount;
+
+    @ApiModelProperty("住校男学生总人数")
+    private Integer studentStayMaleCount;
+
+    @ApiModelProperty("住校女学生总人数")
+    private Integer studentStayFemaleCount;
+
+    @ApiModelProperty("走读男学生总人数")
+    private Integer studentNotStayMaleCount;
+
+    @ApiModelProperty("走读女学生总人数")
+    private Integer studentNotStayFemaleCount;
+
+}

+ 31 - 0
src/main/java/com/xjrsoft/module/databoard/vo/ProcessStatisticsVo.java

@@ -0,0 +1,31 @@
+package com.xjrsoft.module.databoard.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+* @title: 数据看板-流程统计出参
+* @Author dzx
+* @Date: 2024年8月2日
+* @Version 1.0
+*/
+@Data
+public class ProcessStatisticsVo {
+
+    /**
+    * 发起流程总数
+    */
+    @ApiModelProperty("发起流程总数")
+    private Integer allCount;
+    /**
+    * 完成总数
+    */
+    @ApiModelProperty("完成总数")
+    private Integer completeCount;
+    /**
+    * 未完成总数
+    */
+    @ApiModelProperty("未完成总数")
+    private Integer uncompleteCount;
+
+}

+ 22 - 0
src/main/java/com/xjrsoft/module/databoard/vo/VisitorStatisticsVo.java

@@ -0,0 +1,22 @@
+package com.xjrsoft.module.databoard.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+* @title: 数据看板-课程统计出参
+* @Author dzx
+* @Date: 2024年8月2日
+* @Version 1.0
+*/
+@Data
+public class VisitorStatisticsVo {
+
+
+    @ApiModelProperty("历史访客总数")
+    private Integer allCount;
+
+    @ApiModelProperty("今日访客数")
+    private Integer todayCount;
+
+}

+ 24 - 10
src/main/java/com/xjrsoft/module/form/service/impl/FormExecuteServiceImpl.java

@@ -1294,12 +1294,22 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
 
                 //主表如果有审计字段  默认填充值
                 putAuditEntityUpdateData(entity, columns);
-
-                Boolean result = SqlRunnerAdapter.db().dynamicUpdate(tableName, entity, where);
-                if (!result) {
-                    throw new MyException("更新数据失败");
+                Entity findwhere = Entity.create(tableName);
+                findwhere.putAll(where);
+                findwhere.putAll(entity);
+                Map<String, Object> objectMap = SqlRunnerAdapter.db().dynamicSelectOne(tableName, findwhere);
+                Boolean isUpdate = false;
+                if(objectMap == null){
+                    isUpdate = true;
                 }
 
+                Boolean result = null;
+                if(isUpdate){
+                    result = SqlRunnerAdapter.db().dynamicUpdate(tableName, entity, where);
+                    if (!result) {
+                        throw new MyException("更新数据失败");
+                    }
+                }
                 // 遍历数据 根据 表名 保存子表数据
                 for (Map.Entry<String, List<Entity>> tableMap : childMaps.entrySet()) {
                     //先删除子表单数据 然后再新增  这里使用物理删除  不再逻辑删除。  tableMap的key  就是 子表的表名
@@ -1307,15 +1317,19 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
 
                     if (childTableConfig.isPresent()) {
                         //删除子表单数据
-                        Entity childDeleteWhere = Entity.create(tableMap.getKey()).set(childTableConfig.get().getRelationField(), keyValue);
-                        result = SqlRunnerAdapter.db().dynamicDelete(tableName, childDeleteWhere);
-                        if (!result) {
-                            throw new MyException("删除数据失败");
-                        }
+                        String keyValuesStr = "(" + keyValue + ")";
 
+                        long count = SqlRunnerAdapter.db().selectCount("select * from " + childTableConfig.get().getTableName() + " where " + childTableConfig.get().getRelationField() + " in " + keyValuesStr);
+                        if(count > 0){
+                            Entity childDeleteWhere = Entity.create(tableMap.getKey()).set(childTableConfig.get().getRelationField(), keyValue);
+                            result = SqlRunnerAdapter.db().dynamicDelete(childTableConfig.get().getTableName(), childDeleteWhere);
+                            if (!result) {
+                                throw new MyException("删除数据失败");
+                            }
+                        }
                         //再重新新增
                         List<Entity> childList = tableMap.getValue();
-                        result = SqlRunnerAdapter.db().dynamicInsertBatch(tableName, childList);
+                        result = SqlRunnerAdapter.db().dynamicInsertBatch(childTableConfig.get().getTableName(), childList);
                         if (!result) {
                             throw new MyException("添加数据失败");
                         }

+ 34 - 0
src/main/java/com/xjrsoft/module/job/ActivityInfoTask.java

@@ -0,0 +1,34 @@
+package com.xjrsoft.module.job;
+
+import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author dzx
+ * @date 2024年8月8日
+ */
+@Component
+@Slf4j
+public class ActivityInfoTask {
+
+    @Scheduled(cron = "0 */5 * * * ?")
+    public void RefreshConnectionPool() {
+//        String active = SpringUtil.getActiveProfile();
+//        if(!"prod".equals(active)){
+//            log.info("非正式环境,无法执行数据推送");
+//            return;
+//        }
+        doExecute();
+    }
+
+    void doExecute(){
+        String sql = "UPDATE activity_info SET STATUS = 2 WHERE delete_mark = 0 AND enroll_end_time < NOW()";
+        SqlRunnerAdapter.db().update(sql);
+        sql = "UPDATE activity_info SET STATUS = 3 WHERE delete_mark = 0 AND end_date < NOW()";
+        SqlRunnerAdapter.db().update(sql);
+    }
+
+
+}

+ 20 - 3
src/main/java/com/xjrsoft/module/job/AttenDanceWarnNoticeTask.java

@@ -22,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
+import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
@@ -61,6 +62,9 @@ public class AttenDanceWarnNoticeTask {
     private IHolidayDateService holidayDateService;
 
     @Scheduled(cron = "0 */1 * * * ?")
+    public void execute(){
+        RefreshConnectionPool();
+    }
     public void RefreshConnectionPool() {
         String active = SpringUtil.getActiveProfile();
         if("dev".equals(active)){
@@ -74,6 +78,10 @@ public class AttenDanceWarnNoticeTask {
 
         //查询今天所有的考勤规则
         List<AttendanceRuleDetails> ruleDetailsList = categoryService.getTodayRules();
+        if(ruleDetailsList.isEmpty()){
+            log.info("未能查询出规则,不进行推送");
+            return;
+        }
         Map<Long, AttendanceRuleDetails> ruleDetailsMap = new HashMap<>();
         for (AttendanceRuleDetails ruleDetail : ruleDetailsList) {
             ruleDetailsMap.put(ruleDetail.getAttendanceRuleCategoryId(), ruleDetail);
@@ -111,13 +119,17 @@ public class AttenDanceWarnNoticeTask {
         }
         //未查询到数据
         String dayOfWeek = now.getDayOfWeek().name();
-        if(holidayDate == null || "SUNDAY".equals(dayOfWeek) || "SATURDAY".equals(dayOfWeek)){
+        if("SUNDAY".equals(dayOfWeek) || "SATURDAY".equals(dayOfWeek)){
             log.info("非工作日,不需要提醒");
             return;
         }
 
         //获取最近的时间
         LocalDateTime recentlyTime = getRecentlyTime(ruleDetailsList, now);
+        if(recentlyTime == null){
+            log.info("未到时间,不进行推送");
+            return;
+        }
         long minute = Math.abs(ChronoUnit.MINUTES.between(now, recentlyTime));
         if(minute >= 1){
             log.info("未到时间,不进行推送");
@@ -142,6 +154,9 @@ public class AttenDanceWarnNoticeTask {
         List<XjrUser> userList = getUserList(allTodyRule.keySet());
         for (XjrUser xjrUser : userList) {
             AttendanceRuleDetails ruleDetails = allTodyRule.get(xjrUser.getId());
+            if(ruleDetails == null){
+                continue;
+            }
             Integer status = ruleDetailsJudgeMap.get(ruleDetails.getId());
             if(status == 0){
                 continue;
@@ -186,11 +201,13 @@ public class AttenDanceWarnNoticeTask {
             weChatService.sendTemplateMessage(weChatSendMessageDto);
 
         }
-
+        SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
         String table = "wechat_message_log";
+        long id = IdUtil.getSnowflakeNextId();
         Entity entity = Entity.create(table);
+        entity.set("id", id);
         entity.set("content", "消息推送人数:" + userList.size());
-        entity.set("create_date", new Date());
+        entity.set("create_date", sdf.format(new Date()));
         entity.set("template_id", wechatTemplate);
         entity.set("send_time", recentlyTime);
         SqlRunnerAdapter.db().dynamicInsert(table, entity);

+ 5 - 1
src/main/java/com/xjrsoft/module/job/AttendanceMessageTask.java

@@ -34,6 +34,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
+import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
@@ -302,9 +303,12 @@ public class AttendanceMessageTask {
             }
 
             if(isInsert){
+                SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
                 Entity entity = Entity.create(table);
+                entity.set("id", IdUtil.getSnowflakeNextId());
+                entity.set("content", "消息推送人数:" + userCount);
+                entity.set("create_date", sdf.format(new Date()));
                 entity.set("content", "消息推送人数:" + userCount);
-                entity.set("create_date", LocalDateTime.now());
                 entity.set("template_id", wechatTemplate);
                 entity.set("send_time", recentlyTime);
                 SqlRunnerAdapter.db().dynamicInsert(table, entity);

+ 3 - 0
src/main/java/com/xjrsoft/module/job/HikvisionBaseDataTask.java

@@ -29,6 +29,9 @@ public class HikvisionBaseDataTask {
     private HikvisionDataMapper hikvisionDataMapper;
 
     @Scheduled(cron = "0 */15 * * * ?")
+    public void execute() {
+        RefreshConnectionPool();
+    }
     public void RefreshConnectionPool() {
         String active = SpringUtil.getActiveProfile();
         if(!"prod".equals(active)){

+ 0 - 23
src/main/java/com/xjrsoft/module/job/HikvisionLeaveTask.java

@@ -1,23 +0,0 @@
-package com.xjrsoft.module.job;
-
-import com.xjrsoft.module.teacher.mapper.FaceImportMapper;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-
-/**
- * 用于请假后删除权限
- * @author dzx
- * @date 2024年5月21日
- */
-@Component
-@Slf4j
-public class HikvisionLeaveTask {
-    @Autowired
-    private FaceImportMapper faceImportMapper;
-
-    @Scheduled(cron = "0 */15 * * * ?")
-    public void RefreshConnectionPool() {
-    }
-}

+ 3 - 0
src/main/java/com/xjrsoft/module/job/InsertOutInRecordTask.java

@@ -21,6 +21,9 @@ public class InsertOutInRecordTask {
     OutInRecordUtil out_in_recordUtil = new OutInRecordUtil();
 
     @Scheduled(cron = "0 */30 * * * ?")
+    public void execute() {
+        RefreshConnectionPool();
+    }
     public void RefreshConnectionPool() {
         String active = SpringUtil.getActiveProfile();
         if(!"prod".equals(active)){

+ 72 - 56
src/main/java/com/xjrsoft/module/job/JianyuekbScheduleTask.java

@@ -3,21 +3,22 @@ package com.xjrsoft.module.job;
 import cn.hutool.extra.spring.SpringUtil;
 import com.google.gson.JsonArray;
 import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
-import com.xjrsoft.common.utils.SqlRunnerAdapterUtil;
 import com.xjrsoft.module.schedule.entity.CourseReceiveMsg;
-import com.xjrsoft.module.schedule.entity.JianyueData;
 import com.xjrsoft.module.schedule.util.DataUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
-import java.sql.SQLException;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+
 /**
  * @author dzx
  * @date 2024/1/25
@@ -26,7 +27,10 @@ import java.util.Set;
 @Slf4j
 public class JianyuekbScheduleTask {
     @Scheduled(cron = "0 */10 * * * ?")
-    public void RefreshConnectionPool() throws SQLException, InterruptedException {
+    public void execute() throws Exception {
+        RefreshConnectionPool();
+    }
+    public void RefreshConnectionPool() throws Exception {
         String active = SpringUtil.getActiveProfile();
         if(!"prod".equals(active)){
             log.info("非正式环境,无法执行获取课表数据");
@@ -34,70 +38,82 @@ public class JianyuekbScheduleTask {
         }
         String sql = "SELECT * FROM course_receive_msg WHERE delete_mark = 0 AND is_callback IS NULL";
         List<Map<String, Object>> receiveMsgs = SqlRunnerAdapter.db().selectList(sql, CourseReceiveMsg.class);
-        for (Map<String, Object> receiveMsgMap : receiveMsgs) {
-            CourseReceiveMsg receiveMsg = SqlRunnerAdapterUtil.convertMapToEntity(receiveMsgMap, CourseReceiveMsg.class);
-            String updSql = "update course_receive_msg set is_callback = 0 where id = " + receiveMsg.getId();
+        JsonArray allScheduleInfo = new JsonArray();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        DataUtil dataUtil = new DataUtil();
+        for (Map<String, Object> receiveMsg : receiveMsgs) {
+            String updSql = "update course_receive_msg set is_callback = 0 where id = " + receiveMsg.get("id").toString();
             SqlRunnerAdapter.db().update(updSql);
 
-            doExecute(receiveMsg.getEduYearSerialNo(), receiveMsg.getStartDate(), receiveMsg.getEndDate());
+            String eduYearSerialNo = receiveMsg.get("edu_year_serial_no").toString();
+
+            LocalDate startDateObj = LocalDate.parse(receiveMsg.get("start_date").toString());
+            LocalDate endDateObj = LocalDate.parse(receiveMsg.get("end_date").toString());
+            long between = ChronoUnit.DAYS.between(startDateObj, endDateObj);
+            int times = Integer.parseInt(((between / 7) + 1) + "");
 
-            updSql = "update course_receive_msg set is_callback = 1 where id = " + receiveMsg.getId();
+            for (int index = 0; index < times; index ++) {
+                LocalDate statrTime = startDateObj.plusDays(index * 7L);
+                String startDate = statrTime.format(formatter);
+                LocalDate endTime = statrTime.plusDays(6L);
+                if(endTime.isAfter(endDateObj)){
+                    endTime = endDateObj;
+                }
+
+                String endDate = endTime.format(formatter);
+                //获取课表并存到数据库
+                JsonArray scheduleInfo = dataUtil.getScheduleInfoByGrade(eduYearSerialNo, startDate, endDate);
+                allScheduleInfo.addAll(scheduleInfo);
+            }
+
+            updSql = "update course_receive_msg set is_callback = 1 where id = " + receiveMsg.get("id").toString();
             SqlRunnerAdapter.db().update(updSql);
         }
+        doExecute(allScheduleInfo);
     }
 
-    void doExecute(String eduYearSerialNo, String startDate, String endDate){
-        log.info("开始获取课表数据");
-        try {
-            String sql = "SELECT distinct table_name FROM jianyue_data WHERE 1 = 1";
-            List<Map<String, Object>> query = SqlRunnerAdapter.db().selectList(sql, JianyueData.class);
-            Set<String> tables = new HashSet<>();
-            for (Map<String, Object> jianyueDataMap : query) {
-                JianyueData jianyueData = SqlRunnerAdapterUtil.convertMapToEntity(jianyueDataMap, JianyueData.class);
-                tables.add(jianyueData.getTableName());
-            }
-            sql = "SELECT * FROM jianyue_data WHERE 0 = 0";
-            List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql, JianyueData.class);
-            Map<String, Map<String, String>> dataMap = new HashMap<>();
-            for (String table : tables) {
-                Map<String, String> tableData = new HashMap<>();
-                for (Map<String, Object> jianyueDataMap : list) {
-                    JianyueData jianyueData = SqlRunnerAdapterUtil.convertMapToEntity(jianyueDataMap, JianyueData.class);
-                    if(!table.equals(jianyueData.getTableName())){
-                        continue;
-                    }
-                    tableData.put(jianyueData.getJianyueId(), jianyueData.getSourceId());
+    void doExecute(JsonArray scheduleInfo){
+        String sql = "SELECT distinct table_name FROM jianyue_data WHERE 1 = 1";
+        List<Map<String, Object>> query = SqlRunnerAdapter.db().selectList(sql);
+        Set<String> tables = new HashSet<>();
+        for (Map<String, Object> jianyueData : query) {
+            tables.add(jianyueData.get("table_name").toString());
+        }
+        sql = "SELECT * FROM jianyue_data WHERE 0 = 0";
+        List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
+        Map<String, Map<String, String>> dataMap = new HashMap<>();
+        for (String table : tables) {
+            Map<String, String> tableData = new HashMap<>();
+            for (Map<String, Object> jianyueData : list) {
+                if(!table.equals(jianyueData.get("table_name").toString())){
+                    continue;
                 }
-                dataMap.put(table, tableData);
+                tableData.put(jianyueData.get("jianyue_id").toString(), jianyueData.get("source_id").toString());
             }
-            DataUtil dataUtil = new DataUtil();
-            //获取年级
-            String tableName = "base_grade";
+            dataMap.put(table, tableData);
+        }
+        DataUtil dataUtil = new DataUtil();
+        //获取年级
+        String tableName = "base_grade";
 //            Map<String, Long> gradeMap = dataMap.get(tableName);
-            //获取学期
-            tableName = "base_semester";
-            Map<String, String> semesterMap = dataMap.get(tableName);
-            //获取课程
-            tableName = "base_course_subject";
-            Map<String, String> courseMap = dataMap.get(tableName);
-            //获取教职工
-            tableName = "base_teacher";
-            Map<String, String> teacherMap = dataMap.get(tableName);
-            //获取行政班
-            tableName = "base_class";
-            Map<String, String> classMap = dataMap.get(tableName);
+        //获取学期
+        tableName = "base_semester";
+        Map<String, String> semesterMap = dataMap.get(tableName);
+        //获取课程
+        tableName = "base_course_subject";
+        Map<String, String> courseMap = dataMap.get(tableName);
+        //获取教职工
+        tableName = "base_teacher";
+        Map<String, String> teacherMap = dataMap.get(tableName);
+        //获取行政班
+        tableName = "base_class";
+        Map<String, String> classMap = dataMap.get(tableName);
 
-            tableName = "base_classroom";
-            Map<String, String> classroomMap = dataMap.get(tableName);
+        tableName = "base_classroom";
+        Map<String, String> classroomMap = dataMap.get(tableName);
 
-            //获取课表并存到数据库
-            JsonArray scheduleInfo = dataUtil.getScheduleInfoByGrade(eduYearSerialNo, startDate, endDate);
-            dataUtil.insertCourseTable(scheduleInfo, classroomMap, courseMap, semesterMap, teacherMap, classMap);
-            dataUtil.insertClassTime(scheduleInfo);
-            log.info("课表数据获取完成");
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
-        }
+        dataUtil.insertCourseTableEntiy(scheduleInfo, classroomMap, courseMap, semesterMap, teacherMap, classMap);
+        dataUtil.insertClassTime(scheduleInfo);
     }
 
 }

+ 18 - 1
src/main/java/com/xjrsoft/module/organization/controller/UserController.java

@@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.github.yulichang.toolkit.MPJWrappers;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
@@ -39,6 +40,7 @@ import com.xjrsoft.module.hikvision.util.DataUtil;
 import com.xjrsoft.module.organization.dto.AddUserDto;
 import com.xjrsoft.module.organization.dto.BindOpenidDto;
 import com.xjrsoft.module.organization.dto.LoginResetPasswordDto;
+import com.xjrsoft.module.organization.dto.PersonPageDto;
 import com.xjrsoft.module.organization.dto.RegisterDto;
 import com.xjrsoft.module.organization.dto.ResetPasswordDto;
 import com.xjrsoft.module.organization.dto.UpdateInfoDto;
@@ -68,6 +70,7 @@ import com.xjrsoft.module.organization.service.IUserService;
 import com.xjrsoft.module.organization.service.IUserStudentService;
 import com.xjrsoft.module.organization.utils.OrganizationUtil;
 import com.xjrsoft.module.organization.vo.PendingCountDto;
+import com.xjrsoft.module.organization.vo.PersonPageVo;
 import com.xjrsoft.module.organization.vo.ResetUserPageVo;
 import com.xjrsoft.module.organization.vo.ResetUserRoleVo;
 import com.xjrsoft.module.organization.vo.UserDeptVo;
@@ -284,6 +287,14 @@ public class UserController {
         }
     }
 
+    @GetMapping(value = "/person-page")
+    @ApiOperation(value = "人员选择组件(分页)")
+    public R personPage(PersonPageDto dto) {
+        Page<PersonPageVo> voPage = userService.personPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
+        PageOutput<PersonPageVo> pageOutput = ConventPage.getPageOutput(voPage, PersonPageVo.class);
+        return R.ok(pageOutput);
+    }
+
     @GetMapping(value = "/info")
     @ApiOperation(value = "根据id查询用户信息")
     public R info(@RequestParam Long id) {
@@ -723,7 +734,10 @@ public class UserController {
     public R bindStudent(@Valid @RequestBody UserStudentBindDto dto) {
         User user = userService.getOne(Wrappers.<User>query().lambda()
                 .eq(User::getName, dto.getName())
-                .eq(User::getCredentialNumber, dto.getIdCard()));
+                .eq(User::getCredentialNumber, dto.getIdCard())
+                .eq(User::getMobile, dto.getMobile())
+        );
+
         UserStudentAddDto userStudentAddDto = new UserStudentAddDto();
         if (user == null) {
             return R.error("学生不存在!");
@@ -749,6 +763,9 @@ public class UserController {
         if (userStudentInfoVo == null) {
             return RT.error("学生不存在!");
         }
+        if(!dto.getMobile().equals(userStudentInfoVo.getMobile())){
+            return RT.error("该学生的手机号和当前输入的手机号不一致!");
+        }
 
         List<WhitelistManagement> managementList = whitelistManagementService.list(
                 new QueryWrapper<WhitelistManagement>().lambda()

+ 3 - 0
src/main/java/com/xjrsoft/module/organization/dto/AddDepartmentDto.java

@@ -61,4 +61,7 @@ public class AddDepartmentDto  implements Serializable {
 
     @ApiModelProperty("组织类别,1:公司,0:部门")
     private Integer departmentType;
+
+    @ApiModelProperty("是否专业部(1:是 0:否)")
+    private Integer isMajor;
 }

+ 4 - 0
src/main/java/com/xjrsoft/module/organization/dto/DepartmentPageDto.java

@@ -1,6 +1,7 @@
 package com.xjrsoft.module.organization.dto;
 
 import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.hibernate.validator.constraints.Length;
@@ -22,4 +23,7 @@ public class DepartmentPageDto extends PageInput {
     private String code;
 
     private Integer enabledMark;
+
+    @ApiModelProperty("是否专业部(1:是 0:否)")
+    private Integer isMajor;
 }

+ 4 - 0
src/main/java/com/xjrsoft/module/organization/dto/DepartmentTreeDto.java

@@ -1,5 +1,6 @@
 package com.xjrsoft.module.organization.dto;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.hibernate.validator.constraints.Length;
 
@@ -21,4 +22,7 @@ public class DepartmentTreeDto {
     private Integer enabledMark;
 
     private Integer isOrg;
+
+    @ApiModelProperty("是否专业部(1:是 0:否)")
+    private Integer isMajor;
 }

+ 40 - 0
src/main/java/com/xjrsoft/module/organization/dto/PersonPageDto.java

@@ -0,0 +1,40 @@
+package com.xjrsoft.module.organization.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.hibernate.validator.constraints.Length;
+
+/**
+ * @title: PersonPageDto
+ * @Author dzx
+ * @Date: 2024年8月15日
+ * @Version 1.0
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class PersonPageDto extends PageInput {
+
+    @ApiModelProperty("所属部门")
+    private Long departmentId;
+
+    @ApiModelProperty("用户名")
+    @Length(max = 20, message = "用户名长度不能超过20")
+    private String userName;
+
+    @ApiModelProperty("姓名")
+    @Length(max = 20, message = "姓名长度不能超过20")
+    private String name;
+
+    @ApiModelProperty("手机号")
+    @Length(max = 20, message = "手机号长度不能超过20")
+    private String mobile;
+
+    @ApiModelProperty("聘用类型")
+    private String employType;
+
+    @ApiModelProperty("聘用方式")
+    private String employWay;
+
+}

+ 1 - 0
src/main/java/com/xjrsoft/module/organization/dto/UserStudentBindDto.java

@@ -7,4 +7,5 @@ public class UserStudentBindDto {
     private Long userId;
     private String name;
     private String idCard;
+    private String mobile;
 }

+ 3 - 0
src/main/java/com/xjrsoft/module/organization/entity/Department.java

@@ -59,4 +59,7 @@ public class Department extends AuditEntity implements Serializable {
 
     @ApiModelProperty("组织类别,1:公司,0:部门")
     private Integer departmentType;
+
+    @ApiModelProperty("是否专业部(1:是 0:否)")
+    private Integer isMajor;
 }

+ 4 - 0
src/main/java/com/xjrsoft/module/organization/mapper/UserMapper.java

@@ -2,8 +2,10 @@ package com.xjrsoft.module.organization.mapper;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.organization.dto.PersonPageDto;
 import com.xjrsoft.module.organization.dto.UserPageDto;
 import com.xjrsoft.module.organization.entity.User;
+import com.xjrsoft.module.organization.vo.PersonPageVo;
 import com.xjrsoft.module.organization.vo.ResetUserPageVo;
 import com.xjrsoft.module.student.dto.BaseStudentSimpleInfoDto;
 import com.xjrsoft.module.student.vo.BaseStudentSompleInfoVo;
@@ -25,4 +27,6 @@ public interface UserMapper extends MPJBaseMapper<User> {
     Page<ResetUserPageVo> getResetUserPage(Page<ResetUserPageVo> page, UserPageDto dto);
 
     List<BaseStudentSompleInfoVo> getInfosByParam(@Param("dto") BaseStudentSimpleInfoDto dto);
+
+    Page<PersonPageVo> personPage(Page<PersonPageVo> page, @Param("dto") PersonPageDto dto);
 }

+ 6 - 0
src/main/java/com/xjrsoft/module/organization/service/IUserService.java

@@ -1,15 +1,18 @@
 package com.xjrsoft.module.organization.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseService;
 import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.module.organization.dto.AddUserDto;
 import com.xjrsoft.module.organization.dto.BindOpenidDto;
+import com.xjrsoft.module.organization.dto.PersonPageDto;
 import com.xjrsoft.module.organization.dto.ResetPasswordDto;
 import com.xjrsoft.module.organization.dto.UpdatePasswordDto;
 import com.xjrsoft.module.organization.dto.UpdateUserDto;
 import com.xjrsoft.module.organization.dto.UserPageDto;
 import com.xjrsoft.module.organization.dto.WeChatPageDto;
 import com.xjrsoft.module.organization.entity.User;
+import com.xjrsoft.module.organization.vo.PersonPageVo;
 import com.xjrsoft.module.organization.vo.ResetUserPageVo;
 import com.xjrsoft.module.organization.vo.UserInfoVo;
 import com.xjrsoft.module.organization.vo.WeChatPageVO;
@@ -77,4 +80,7 @@ public interface IUserService extends MPJBaseService<User> {
     PageOutput<WeChatPageVO> getPage(WeChatPageDto dto);
 
     PageOutput<ResetUserPageVo> getResetUserPage(UserPageDto dto);
+
+    Page<PersonPageVo> personPage(Page<PersonPageVo> page, PersonPageDto dto);
+
 }

+ 9 - 0
src/main/java/com/xjrsoft/module/organization/service/impl/UserServiceImpl.java

@@ -23,6 +23,7 @@ import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.config.CommonPropertiesConfig;
 import com.xjrsoft.module.organization.dto.AddUserDto;
 import com.xjrsoft.module.organization.dto.BindOpenidDto;
+import com.xjrsoft.module.organization.dto.PersonPageDto;
 import com.xjrsoft.module.organization.dto.ResetPasswordDto;
 import com.xjrsoft.module.organization.dto.UpdatePasswordDto;
 import com.xjrsoft.module.organization.dto.UpdateUserDto;
@@ -38,6 +39,7 @@ import com.xjrsoft.module.organization.mapper.UserPostRelationMapper;
 import com.xjrsoft.module.organization.mapper.UserRoleRelationMapper;
 import com.xjrsoft.module.organization.service.IUserDeptRelationService;
 import com.xjrsoft.module.organization.service.IUserService;
+import com.xjrsoft.module.organization.vo.PersonPageVo;
 import com.xjrsoft.module.organization.vo.ResetUserPageVo;
 import com.xjrsoft.module.organization.vo.UserInfoVo;
 import com.xjrsoft.module.organization.vo.WeChatPageVO;
@@ -362,4 +364,11 @@ public class UserServiceImpl extends MPJBaseServiceImpl<UserMapper, User> implem
         PageOutput<ResetUserPageVo> pageOutput = ConventPage.getPageOutput(resetUserPage, ResetUserPageVo.class);
         return pageOutput;
     }
+
+    @Override
+    public Page<PersonPageVo> personPage(Page<PersonPageVo> page, PersonPageDto dto) {
+        Page<PersonPageVo> result = userMapper.personPage(page, dto);
+        return result;
+    }
+
 }

+ 4 - 2
src/main/java/com/xjrsoft/module/organization/service/impl/UserStudentServiceImpl.java

@@ -6,6 +6,7 @@ import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.module.organization.dto.UserStudentAddDto;
 import com.xjrsoft.module.organization.dto.UserStudentDeleteDto;
+import com.xjrsoft.module.organization.entity.User;
 import com.xjrsoft.module.organization.entity.UserStudent;
 import com.xjrsoft.module.organization.mapper.UserStudentMapper;
 import com.xjrsoft.module.organization.service.IUserStudentService;
@@ -23,9 +24,10 @@ public class UserStudentServiceImpl extends MPJBaseServiceImpl<UserStudentMapper
     public boolean add(UserStudentAddDto dto) {
         long count = count(Wrappers.<UserStudent>query().lambda()
                 .eq(UserStudent::getUserId, dto.getUserId())
-                .eq(UserStudent::getStudentId, dto.getStudentId()));
+                .eq(UserStudent::getStudentId, dto.getStudentId())
+        );
         if (count > 0) {
-            throw new MyException("已经绑定了学生,不能出重复绑定");
+            throw new MyException("已经绑定了学生,不能出重复绑定");
         }
         UserStudent userStudent = BeanUtil.toBean(dto, UserStudent.class);
         userStudentMapper.insert(userStudent);

+ 46 - 0
src/main/java/com/xjrsoft/module/organization/vo/PersonPageVo.java

@@ -0,0 +1,46 @@
+package com.xjrsoft.module.organization.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @title: PersonPageVo
+ * @Author dzx
+ * @Date: 2024年8月15日
+ * @Version 1.0
+ */
+@Data
+public class PersonPageVo implements Serializable {
+
+    /**
+     * 主键
+     */
+    @ApiModelProperty("主键")
+    private Long id;
+    /**
+     * 账户
+     */
+    @ApiModelProperty("工号/学号")
+    private String userName;
+
+    /**
+     * 姓名
+     */
+    @ApiModelProperty("姓名")
+    private String name;
+
+    @ApiModelProperty("性别-中文")
+    private String genderCn;
+
+    @ApiModelProperty("手机号")
+    private String mobile;
+
+    @ApiModelProperty("聘用类型")
+    private String employType;
+
+    @ApiModelProperty("聘用方式")
+    private String employWay;
+
+}

+ 2 - 1
src/main/java/com/xjrsoft/module/outint/entity/VisitorOutInRecord.java

@@ -10,6 +10,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.time.LocalDateTime;
 import java.util.Date;
 
 
@@ -78,7 +79,7 @@ public class VisitorOutInRecord implements Serializable {
     * 记录时间
     */
     @ApiModelProperty("记录时间")
-    private String recordTime;
+    private LocalDateTime recordTime;
     /**
     * 人脸照片
     */

+ 11 - 2
src/main/java/com/xjrsoft/module/personnel/controller/StundentFaceProcessController.java

@@ -233,6 +233,15 @@ public class StundentFaceProcessController {
         }
         JsonParser parser = new JsonParser();
 
+        String[] imgSuffix = new String[]{"png", "jpg", "jpeg"};
+        Map<String, String> map = new HashMap<String, String>() {
+            {
+                put("jpg", "data:image/jpg;base64,");
+                put("jpeg", "data:image/jpeg;base64,");
+                put("png", "data:image/png;base64,");
+            }
+        };
+
         ApiUtil apiUtil = new ApiUtil();
         ZipFile zipFile = FileZipUtil.convertToZipFile(file);
         Enumeration<? extends ZipEntry> entries = zipFile.entries();
@@ -305,7 +314,7 @@ public class StundentFaceProcessController {
                 long baseFaceId = IdUtil.getSnowflakeNextId();
                 FaceManagement baseFace = new FaceManagement();
                 baseFace.setId(baseFaceId);
-                baseFace.setRegisterBase64(base64String);
+                baseFace.setRegisterBase64(map.get(suffix) + base64String);
                 baseFace.setUserId(studentUser.getId());
                 baseFace.setSex(studentUser.getGender());
                 baseFace.setName(studentUser.getName());
@@ -411,7 +420,7 @@ public class StundentFaceProcessController {
 
                 FaceManagement faceManagement = faceManagementMap.get(studentUser.getId());
                 faceManagement.setVerifyStatus(2);
-                faceManagement.setRegisterBase64(base64String);
+                faceManagement.setRegisterBase64(map.get(suffix) + base64String);
                 faceManagement.setFileId(folderId);
                 faceManagementService.update(faceManagement);
             }

+ 36 - 28
src/main/java/com/xjrsoft/module/personnel/controller/TeacherFaceProcessController.java

@@ -24,8 +24,9 @@ import com.xjrsoft.common.utils.ImageUtil;
 import com.xjrsoft.common.utils.UploadUtil;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.hikvision.util.ApiUtil;
-import com.xjrsoft.module.organization.entity.Department;
+import com.xjrsoft.module.organization.entity.User;
 import com.xjrsoft.module.organization.entity.UserDeptRelation;
+import com.xjrsoft.module.organization.service.IUserService;
 import com.xjrsoft.module.personnel.dto.AddTeacherFaceProcessDto;
 import com.xjrsoft.module.personnel.dto.TeacherFaceProcessPageDto;
 import com.xjrsoft.module.personnel.dto.UpdateTeacherFaceProcessDto;
@@ -38,9 +39,9 @@ import com.xjrsoft.module.personnel.vo.TeacherFaceProcessVo;
 import com.xjrsoft.module.system.entity.DictionaryDetail;
 import com.xjrsoft.module.system.entity.File;
 import com.xjrsoft.module.system.service.IFileService;
+import com.xjrsoft.module.teacher.entity.BaseTeacher;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.teacher.service.ITeacherbaseManagerService;
-import com.xjrsoft.module.teacher.vo.XjrUserPageVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
@@ -90,6 +91,7 @@ public class TeacherFaceProcessController {
     private final IFaceManagementService faceManagementService;
 
     private final IFileService fileService;
+    private final IUserService userService;
 
     @GetMapping(value = "/page")
     @ApiOperation(value="人脸信息审核列表(分页)")
@@ -170,20 +172,16 @@ public class TeacherFaceProcessController {
     @ApiOperation(value = "批量新增教师人脸")
     @SaCheckPermission("stundentfaceprocess:batch-upload")
     public RT<Boolean> batchUpload(@RequestParam("file") MultipartFile file) throws Exception {
-        List<XjrUserPageVo> list = teacherbaseManagerService.selectJoinList(XjrUserPageVo.class,
-                new MPJLambdaWrapper<XjrUser>()
+        List<User> list = userService.list(
+                new MPJLambdaWrapper<User>()
                         .distinct()
-                        .select(XjrUser::getId)
-                        .selectAs(Department::getId, XjrUserPageVo::getDeptId)
-                        .selectAs(Department::getName, XjrUserPageVo::getDeptIdCn)
-                        .select(XjrUser.class, x -> VoToColumnUtil.fieldsToColumns(XjrUserPageVo.class).contains(x.getProperty()))
-                        .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, XjrUser::getId)
-                        .leftJoin(Department.class, Department::getId, UserDeptRelation::getDeptId)
-                        .eq(XjrUser::getDeleteMark, DeleteMark.NODELETE.getCode())
-                        .eq(Department::getDeleteMark, DeleteMark.NODELETE.getCode())
+                        .select(User::getId)
+                        .select(User.class, x -> VoToColumnUtil.fieldsToColumns(User.class).contains(x.getProperty()))
+                        .innerJoin(BaseTeacher.class, BaseTeacher::getUserId, XjrUser::getId)
+                        .eq(User::getDeleteMark, DeleteMark.NODELETE.getCode())
         );
-        Map<String, XjrUserPageVo> teacherMap = new HashMap<>();
-        for (XjrUserPageVo teacher : list) {
+        Map<String, User> teacherMap = new HashMap<>();
+        for (User teacher : list) {
             teacherMap.put(teacher.getCredentialNumber(), teacher);
         }
 
@@ -212,13 +210,23 @@ public class TeacherFaceProcessController {
         ApiUtil apiUtil = new ApiUtil();
         ZipFile zipFile = FileZipUtil.convertToZipFile(file);
         Enumeration<? extends ZipEntry> entries = zipFile.entries();
+
+        String[] imgSuffix = new String[]{"png", "jpg", "jpeg"};
+        Map<String, String> map = new HashMap<String, String>() {
+            {
+                put("jpg", "data:image/jpg;base64,");
+                put("jpeg", "data:image/jpeg;base64,");
+                put("png", "data:image/png;base64,");
+            }
+        };
+
         while (entries.hasMoreElements()){
             ZipEntry entry = entries.nextElement();
             String filename = entry.getName();
             InputStream inputStream = zipFile.getInputStream(entry); //读取文件内容
             String[] split = filename.split("\\.");
             String idNumber = split[0].substring(split[0].length() - 18);
-            XjrUserPageVo teacherUser = teacherMap.get(idNumber);
+            User teacherUser = teacherMap.get(idNumber);
             if(teacherUser == null){
                 continue;
             }
@@ -272,13 +280,13 @@ public class TeacherFaceProcessController {
             fileEntity.setFileType(suffix);
             fileService.save(fileEntity);
 
-            TeacherFaceProcess process = faceMap.get(Long.parseLong(teacherUser.getId()));
+            TeacherFaceProcess process = faceMap.get(teacherUser.getId());
             if(process == null){
                 long baseFaceId = IdUtil.getSnowflakeNextId();
                 FaceManagement baseFace = new FaceManagement();
                 baseFace.setId(baseFaceId);
-                baseFace.setRegisterBase64(base64String);
-                baseFace.setUserId(Long.parseLong(teacherUser.getId()));
+                baseFace.setRegisterBase64(map.get(suffix) + base64String);
+                baseFace.setUserId(teacherUser.getId());
                 baseFace.setSex(teacherUser.getGender());
                 baseFace.setName(teacherUser.getName());
                 baseFace.setIdno(teacherUser.getCredentialNumber());
@@ -288,7 +296,8 @@ public class TeacherFaceProcessController {
                 baseFace.setDeleteMark(0);
                 baseFace.setStatus(1);
                 baseFace.setFileId(folderId);
-                baseFace.setUserType(2L);
+                baseFace.setUserType(1L);
+                baseFace.setVerifyStatus(1);
                 faceManagementService.save(baseFace);
 
                 TeacherFaceProcess teacherFace = new TeacherFaceProcess();
@@ -299,11 +308,11 @@ public class TeacherFaceProcessController {
                 teacherFace.setGender(teacherUser.getGender());
                 teacherFace.setFacePhoto(folderId);
                 teacherFace.setName(teacherUser.getName());
-                teacherFace.setDepId(Long.parseLong(teacherUser.getDeptId()));
-                teacherFace.setDepCn(teacherUser.getDeptIdCn());
+//                teacherFace.setDepId(Long.parseLong(teacherUser.getDeptId()));
+//                teacherFace.setDepCn(teacherUser.getDeptIdCn());
                 teacherFace.setIdentityCard(teacherUser.getCredentialNumber());
                 teacherFace.setStatus(1);
-                teacherFace.setUserId(Long.parseLong(teacherUser.getId()));
+                teacherFace.setUserId(teacherUser.getId());
                 teacherFace.setExamStatus(1);
 
                 //将人脸上传海康
@@ -351,7 +360,6 @@ public class TeacherFaceProcessController {
                             if(personPhoto.size() > 0){
                                 faceId = personPhoto.get(0).getAsJsonObject().get("personPhotoIndexCode").getAsString();
                             }
-
                         }
                     }
                 }
@@ -379,22 +387,22 @@ public class TeacherFaceProcessController {
 
                 teacherFaceProcessService.updateById(process);
 
-                FaceManagement faceManagement = faceManagementMap.get(Long.parseLong(teacherUser.getId()));
+                FaceManagement faceManagement = faceManagementMap.get(teacherUser.getId());
                 if(faceManagement == null){
                     faceManagement = new FaceManagement();
-                    faceManagement.setUserType(2L);
-                    faceManagement.setUserId(Long.parseLong(teacherUser.getId()));
+                    faceManagement.setUserType(1L);
+                    faceManagement.setUserId(teacherUser.getId());
                     faceManagement.setFileId(folderId);
                     faceManagement.setIdno(teacherUser.getCredentialNumber());
                     faceManagement.setName(teacherUser.getName());
                     faceManagement.setSyncStatus(1);
                     faceManagement.setSex(teacherUser.getGender());
                     faceManagement.setVerifyStatus(2);
-                    faceManagement.setRegisterBase64(base64String);
+                    faceManagement.setRegisterBase64(map.get(suffix) + base64String);
                     faceManagementService.save(faceManagement);
                 }else{
                     faceManagement.setVerifyStatus(2);
-                    faceManagement.setRegisterBase64(base64String);
+                    faceManagement.setRegisterBase64(map.get(suffix) + base64String);
                     faceManagementService.update(faceManagement);
                 }
 

+ 2 - 2
src/main/java/com/xjrsoft/module/schedule/controller/ScheduleController.java

@@ -154,13 +154,13 @@ public class ScheduleController {
                 CourseTable courseTable = courseTableService.getById(dto.getCourseId());
                 CourseTable swapCourseTable = courseTableService.getById(dto.getSwapCourseId());
                 JsonObject preCheck = getExtendPreCheck(dto, courseTable, swapCourseTable);
-                if(!preCheck.get("data").getAsBoolean()){
+                if(preCheck.get("code").getAsInt() != 0){
                    return RT.error(preCheck.get("msg").getAsString());
                 }
             }else if(dto.getPreCheckType() == 2){
                 CourseTable courseTable = courseTableService.getById(dto.getCourseId());
                 JsonObject jsonObject = substitutePreTestin(dto, courseTable);
-                if(!jsonObject.get("data").getAsBoolean()){
+                if(jsonObject.get("code").getAsInt() != 0){
                     return RT.error(jsonObject.get("msg").getAsString());
                 }
             }

+ 87 - 20
src/main/java/com/xjrsoft/module/schedule/util/DataUtil.java

@@ -1,6 +1,8 @@
 package com.xjrsoft.module.schedule.util;
 
+import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.db.Entity;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
@@ -19,10 +21,13 @@ import com.xjrsoft.module.teacher.entity.XjrUser;
 import lombok.extern.slf4j.Slf4j;
 
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * @author dzx
@@ -85,13 +90,17 @@ public class DataUtil {
             BaseClass baseClass = SqlRunnerAdapterUtil.convertMapToEntity(baseClassMap, BaseClass.class);
             String url  = ScheduleUtil.apiUrl + "class/create";
             JsonObject paramJson = new JsonObject();
-            paramJson.addProperty("teacherSerialNo", teacherMap.get(baseClass.getTeacherId().toString()));
+            if(baseClass.getTeacherId() != null && teacherMap.get(baseClass.getTeacherId().toString()) != null){
+                paramJson.addProperty("teacherSerialNo", teacherMap.get(baseClass.getTeacherId().toString()));
+            }
             paramJson.addProperty("name", baseClass.getName());
 
             paramJson.addProperty("semesterSerialNo", semesterSerialNo);
             paramJson.addProperty("eduYearSerialNo", gradeMap.get(baseClass.getOrgId() + "_" + baseClass.getGradeId().toString()));
             paramJson.addProperty("extendId", baseClass.getId());
-            paramJson.addProperty("classRoomSerialNo", classroomMap.get(baseClass.getClassroomId().toString()));
+            if(baseClass.getClassroomId() != null && classroomMap.get(baseClass.getClassroomId().toString()) != null){
+                paramJson.addProperty("classRoomSerialNo", classroomMap.get(baseClass.getClassroomId().toString()));
+            }
             if(ids != null && ids.get(baseClass.getId().toString()) != null){
                 url  = ScheduleUtil.apiUrl + "class/update";
                 paramJson.addProperty("serialNo", ids.get(baseClass.getId().toString()));
@@ -224,27 +233,26 @@ public class DataUtil {
         JsonParser jsonParser = new JsonParser();
 
         Map<String, String> idMap = new HashMap<>();
-        for (Map<String, Object> userMap : xjrUsers) {
-            XjrUser user = SqlRunnerAdapterUtil.convertMapToEntity(userMap, XjrUser.class);
+        for (Map<String, Object> user : xjrUsers) {
             String url  = ScheduleUtil.apiUrl + "teacher/create";
             JsonObject paramJson = new JsonObject();
-            paramJson.addProperty("jobNumber", user.getUserName());
-            if("SB10001".equals(user.getGender())){
+            paramJson.addProperty("jobNumber", user.get("user_name").toString());
+            if("SB10001".equals(user.get("gender").toString())){
                 paramJson.addProperty("gender", 1);
-            }else if("SB10002".equals(user.getGender())){
+            }else if("SB10002".equals(user.get("gender").toString())){
                 paramJson.addProperty("gender", 2);
             }
 
-            paramJson.addProperty("name", user.getName());
-            paramJson.addProperty("alias", user.getNickName());
-            paramJson.addProperty("extendId", user.getId().toString());
+            paramJson.addProperty("name", user.get("name").toString());
+            paramJson.addProperty("alias", user.get("nick_name").toString());
+            paramJson.addProperty("extendId", user.get("id").toString());
             //获取时间戳
             long timestamp = System.currentTimeMillis();
             //生成签名
             String sign = ScheduleUtil.createSign(timestamp);
-            if(ids != null && ids.get(user.getId().toString()) != null){
+            if(ids != null && ids.get(user.get("id").toString()) != null){
                 url  = ScheduleUtil.apiUrl + "teacher/update";
-                paramJson.addProperty("serialNo", ids.get(user.getId().toString()));
+                paramJson.addProperty("serialNo", ids.get(user.get("id").toString()));
                 ScheduleUtil.doPost(url, paramJson.toString(), sign, timestamp);
                 continue;
             }
@@ -254,7 +262,7 @@ public class DataUtil {
                 continue;
             }
             JsonObject resultJson = jsonParser.parse(result).getAsJsonObject();
-            idMap.put(user.getId().toString(), resultJson.get("data").getAsString());
+            idMap.put(user.get("id").toString(), resultJson.get("data").getAsString());
         }
         //插入记录表
         insertRecord(tableName, idMap);
@@ -608,6 +616,66 @@ public class DataUtil {
         }
     }
 
+    public void insertCourseTableEntiy(JsonArray data, Map<String, String> classroomMap, Map<String, String> coureseMap,
+                                  Map<String, String> semesterMap, Map<String, String> teacherMap, Map<String, String> classMap) {
+        Map<Integer, Integer> tmePeriod = ScheduleUtil.getTmePeriod();
+        String tableName = "course_table";
+        List<Entity> entityList = new ArrayList();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
+        List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList("select * from course_table");
+        Set<String> serialNos = new HashSet<>();
+        for (Map<String, Object> objectMap : list) {
+            if(objectMap.get("jianyue_id") == null){
+                continue;
+            }
+            serialNos.add(objectMap.get("jianyue_id").toString());
+        }
+        for (JsonElement jsonElement : data) {
+            JsonObject asJsonObject = jsonElement.getAsJsonObject();
+            JsonArray teachers = asJsonObject.get("teachers").getAsJsonArray();
+            if(asJsonObject.get("courseClassId").isJsonNull() || coureseMap.get(asJsonObject.get("courseClassId").getAsString()) == null){
+                continue;
+            }
+            if(serialNos.contains(asJsonObject.get("id").getAsString())){
+                continue;
+            }
+            int timeNumber = asJsonObject.get("numberOfDay").getAsInt();//节次
+
+            Entity entity = Entity.create(tableName);
+            entity.set("id", IdUtil.getSnowflakeNextId());
+            entity.set("base_semester_id", semesterMap.get(asJsonObject.get("semesterSerialNo").getAsString()));
+
+            if(teachers.size() > 0){
+                JsonObject teacherJson = teachers.get(0).getAsJsonObject();
+                entity.set("teacher_id", (teacherMap.get(teacherJson.get("teacherSerialNo").getAsString())==null?0:teacherMap.get(teacherJson.get("teacherSerialNo").getAsString())));
+                entity.set("teacher_name", teacherJson.get("name").getAsString());
+                entity.set("teacher_serial_no", teacherJson.get("teacherSerialNo").getAsString());
+            }else{
+                entity.set("teacher_id", 0);
+//                entity.set("teacher_name", "");
+//                entity.set("teacher_serial_no", "");
+            }
+            entity.set("course_id", coureseMap.get(asJsonObject.get("courseClassId").getAsString()));
+            entity.set("course_name", asJsonObject.get("courseClassName").getAsString());
+            entity.set("class_id", classMap.get(asJsonObject.get("classSerialNo").getAsString()));
+            entity.set("class_name", asJsonObject.get("className").getAsString());
+            entity.set("weeks", asJsonObject.get("dayOfWeek").getAsInt());
+            entity.set("weeks_cn", asJsonObject.get("dayOfWeekName").getAsString());
+            entity.set("time_period", tmePeriod.get(asJsonObject.get("timeOption").getAsInt()));
+            entity.set("time_number", timeNumber);
+            entity.set("site_id", (classroomMap.get(asJsonObject.get("classRoomSerialNo").getAsString()) == null ? 0 : classroomMap.get(asJsonObject.get("classRoomSerialNo").getAsString())));
+            entity.set("site_name", asJsonObject.get("classRoomName").getAsString());
+            entity.set("status", 1);
+            entity.set("create_date", sdf.format(new Date()));
+            entity.set("schedule_date", asJsonObject.get("scheduleDate").getAsString());
+            entity.set("jianyue_id", asJsonObject.get("id").getAsString());
+            entityList.add(entity);
+        }
+        if(!entityList.isEmpty()){
+            SqlRunnerAdapter.db().dynamicInsertBatch(tableName, entityList);
+        }
+    }
+
     /**
      * 提取课时相关信息
      * @param data 数据
@@ -627,26 +695,25 @@ public class DataUtil {
             json.add("numberOfDay", asJsonObject.get("numberOfDay"));
             infoMap.put(numberOfDayName, json);
         }
-//        List<String> sqls = new ArrayList<>();
         int count = 1;
         for (String number : infoMap.keySet()) {
-            String substring1 = number.substring(number.length() - 1);
             JsonObject jsonObject = infoMap.get(number);
+            int timeNumber = jsonObject.get("numberOfDay").getAsInt();//节次
             long id = System.currentTimeMillis();
-            String fullName = "第" +substring1 + "节课";
+
             String sql = "INSERT INTO class_time(id,time_period,number,full_name,short_name,create_date,summer_start_time"
                     + ",summer_end_time,winter_start_time,winter_end_time) select " + id + String.format("%04d", count) + ","
                     + jsonObject.get("tmePeriod").getAsInt() + ","
-                    + substring1 + ","
-                    + "'" + fullName + "',"
-                    + "'" + fullName + "',now(),"
+                    + timeNumber + ","
+                    + "'" + number + "',"
+                    + "'" + number + "',now(),"
                     + "'" + jsonObject.get("startTime").getAsString() + "',"
                     + "'" + jsonObject.get("endTime").getAsString() + "',"
                     + "'" + jsonObject.get("startTime").getAsString() + "',"
                     + "'" + jsonObject.get("endTime").getAsString() + "' FROM DUAL"
                     + " WHERE NOT EXISTS(SELECT * FROM class_time WHERE time_period = "
                     + jsonObject.get("tmePeriod").getAsInt()
-                    + " and number = " + substring1 + ")";
+                    + " and number = " + timeNumber + ")";
 //            sqls.add(sql);
             SqlRunnerAdapter.db().insert(sql);
             count ++;

+ 2 - 1
src/main/java/com/xjrsoft/module/schedule/util/ScheduleUtil.java

@@ -158,9 +158,10 @@ public class ScheduleUtil {
 
     public static Map<Integer, Integer> getTmePeriod(){
         Map<Integer, Integer> map = new HashMap<>();
+        map.put(1, 0);
         map.put(2, 1);
         map.put(3, 2);
-        map.put(5, 3);
+        map.put(4, 3);
         return map;
     }
 

+ 12 - 1
src/main/java/com/xjrsoft/module/student/controller/BaseNewStudentController.java

@@ -241,7 +241,8 @@ public class BaseNewStudentController {
         List<User> parents = userService.list(
                 new QueryWrapper<User>().lambda()
                         .eq(User::getUserName, dto.getParentMobile())
-                        .eq(User::getName, dto.getParentName())
+                        .or()
+                        .eq(User::getMobile, dto.getParentMobile())
         );
         if(parents.isEmpty()){
             User parentUser = new User() {{
@@ -260,6 +261,16 @@ public class BaseNewStudentController {
                 setRoleId(4L);
             }});
 
+            BaseUserStudent userStudent = new BaseUserStudent();
+            userStudent.setStudentId(user.getId());
+            userStudent.setStudentNane(user.getName());
+            userStudent.setStudentIdentity(user.getCredentialNumber());
+            userStudent.setCreateDate(new Date());
+            userStudent.setUserId(parentUser.getId());
+            userStudent.setStatus(1);
+            userStudentService.save(userStudent);
+        }else{
+            User parentUser = parents.get(0);
             BaseUserStudent userStudent = new BaseUserStudent();
             userStudent.setStudentId(user.getId());
             userStudent.setStudentNane(user.getName());

+ 131 - 0
src/main/java/com/xjrsoft/module/student/controller/BaseStudentDevelopmentController.java

@@ -0,0 +1,131 @@
+package com.xjrsoft.module.student.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.db.Entity;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.xjrsoft.common.model.result.RT;
+import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
+import com.xjrsoft.common.page.ConventPage;
+import com.xjrsoft.common.page.PageOutput;
+import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.student.dto.AddBaseStudentDevelopmentDto;
+import com.xjrsoft.module.student.dto.BaseStudentDevelopmentPageDto;
+import com.xjrsoft.module.student.dto.UpdateBaseStudentDevelopmentDto;
+import com.xjrsoft.module.student.entity.BaseStudentDevelopment;
+import com.xjrsoft.module.student.service.IBaseStudentDevelopmentService;
+import com.xjrsoft.module.student.vo.BaseStudentDevelopmentPageVo;
+import com.xjrsoft.module.student.vo.BaseStudentDevelopmentVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+* @title: 学生去向登记
+* @Author dzx
+* @Date: 2024-08-04
+* @Version 1.0
+*/
+@RestController
+@RequestMapping("/student" + "/baseStudentDevelopment")
+@Api(value = "/student"  + "/baseStudentDevelopment",tags = "学生去向登记代码")
+@AllArgsConstructor
+public class BaseStudentDevelopmentController {
+
+
+    private final IBaseStudentDevelopmentService developmentService;
+
+    @GetMapping(value = "/page")
+    @ApiOperation(value="学生去向登记列表(分页)")
+    @SaCheckPermission("basestudentdevelopment:detail")
+    public RT<PageOutput<BaseStudentDevelopmentPageVo>> page(@Valid BaseStudentDevelopmentPageDto dto){
+
+        MPJLambdaWrapper<BaseStudentDevelopment> queryWrapper = new MPJLambdaWrapper<BaseStudentDevelopment>();
+        queryWrapper
+                .eq(BaseStudentDevelopment::getBaseStudentGraduateId, dto.getBaseStudentGraduateId())
+                    .orderByDesc(BaseStudentDevelopment::getId)
+                .select(BaseStudentDevelopment.class,x -> VoToColumnUtil.fieldsToColumns(BaseStudentDevelopmentPageVo.class).contains(x.getProperty()));
+        IPage<BaseStudentDevelopment> page = developmentService.page(ConventPage.getPage(dto), queryWrapper);
+        PageOutput<BaseStudentDevelopmentPageVo> pageOutput = ConventPage.getPageOutput(page, BaseStudentDevelopmentPageVo.class);
+        return RT.ok(pageOutput);
+    }
+
+    @GetMapping(value = "/info")
+    @ApiOperation(value="根据id查询学生去向登记信息")
+    @SaCheckPermission("basestudentdevelopment:detail")
+    public RT<BaseStudentDevelopmentVo> info(@RequestParam Long id){
+        BaseStudentDevelopmentVo baseStudentDevelopment = developmentService.getInfoById(id);
+        if (baseStudentDevelopment == null) {
+           return RT.error("找不到此数据!");
+        }
+        return RT.ok(baseStudentDevelopment);
+    }
+
+
+    @PostMapping
+    @ApiOperation(value = "新增学生去向登记")
+    @SaCheckPermission("basestudentdevelopment:add")
+    public RT<Boolean> add(@Valid @RequestBody AddBaseStudentDevelopmentDto dto){
+        BaseStudentDevelopment baseStudentDevelopment = BeanUtil.toBean(dto, BaseStudentDevelopment.class);
+        baseStudentDevelopment.setCreateDate(new Date());
+
+        if(baseStudentDevelopment.getCompanyCoopId() != null){
+            String tableName = "company_coop";
+            Entity entity = Entity.create(tableName);
+            entity.set("id", baseStudentDevelopment.getCompanyCoopId());
+
+            Map<String, Object> objectMap = SqlRunnerAdapter.db().dynamicSelectOne(tableName, entity);
+            if(objectMap != null){
+                baseStudentDevelopment.setWorkCompany(objectMap.get("company_name").toString());
+                baseStudentDevelopment.setCompanyScale(objectMap.get("company_size").toString());
+            }
+        }
+        boolean isSuccess = developmentService.save(baseStudentDevelopment);
+        return RT.ok(isSuccess);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "修改学生去向登记")
+    @SaCheckPermission("basestudentdevelopment:edit")
+    public RT<Boolean> update(@Valid @RequestBody UpdateBaseStudentDevelopmentDto dto){
+
+        BaseStudentDevelopment baseStudentDevelopment = BeanUtil.toBean(dto, BaseStudentDevelopment.class);
+        baseStudentDevelopment.setModifyDate(new Date());
+        if(baseStudentDevelopment.getCompanyCoopId() != null){
+            String tableName = "company_coop";
+            Entity entity = Entity.create(tableName);
+            entity.set("id", baseStudentDevelopment.getCompanyCoopId());
+
+            Map<String, Object> objectMap = SqlRunnerAdapter.db().dynamicSelectOne(tableName, entity);
+            if(objectMap != null){
+                baseStudentDevelopment.setWorkCompany(objectMap.get("company_name").toString());
+                baseStudentDevelopment.setCompanyScale(objectMap.get("company_size").toString());
+            }
+        }
+        return RT.ok(developmentService.updateById(baseStudentDevelopment));
+
+    }
+
+    @DeleteMapping
+    @ApiOperation(value = "删除学生去向登记")
+    @SaCheckPermission("basestudentdevelopment:delete")
+    public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
+        return RT.ok(developmentService.removeBatchByIds(ids));
+    }
+
+}

+ 5 - 1
src/main/java/com/xjrsoft/module/student/controller/BaseStudentScholarshipApplicantController.java

@@ -8,11 +8,13 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.toolkit.MPJWrappers;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.base.entity.BaseSemester;
+import com.xjrsoft.module.organization.entity.User;
 import com.xjrsoft.module.student.dto.AddBaseStudentScholarshipApplicantDto;
 import com.xjrsoft.module.student.dto.BaseStudentScholarshipApplicantCategoryPageDto;
 import com.xjrsoft.module.student.dto.BaseStudentScholarshipApplicantPageDto;
@@ -133,9 +135,11 @@ public class BaseStudentScholarshipApplicantController {
     @SaCheckPermission("basestudentscholarshipapplicant:detail")
     public RT<List<ScholarshipApplicantOptionVo>> optionSelect(@Valid BaseStudentScholarshipApplicantPageDto dto){
         List<BaseStudentScholarshipApplicant> applicantList = applicantService.list(
-            new QueryWrapper<BaseStudentScholarshipApplicant>().lambda()
+            new MPJLambdaWrapper<BaseStudentScholarshipApplicant>()
             .select(BaseStudentScholarshipApplicant::getId)
+            .selectAs(User::getName, BaseStudentScholarshipApplicant::getName)
             .select(BaseStudentScholarshipApplicant.class,x -> VoToColumnUtil.fieldsToColumns(BaseStudentScholarshipApplicantPageVo.class).contains(x.getProperty()))
+            .leftJoin(User.class, User::getId, BaseStudentScholarshipApplicant::getApplicantUserId)
             .eq(ObjectUtil.isNotNull(dto.getBaseStudentScholarshipCategoryId()),BaseStudentScholarshipApplicant::getBaseStudentScholarshipCategoryId, dto.getBaseStudentScholarshipCategoryId())
             .eq(ObjectUtil.isNotNull(dto.getSemesterId()), BaseStudentScholarshipApplicant::getBaseSemesterId, dto.getSemesterId())
             .eq(BaseStudentScholarshipApplicant::getStatus, 1)

+ 1 - 1
src/main/java/com/xjrsoft/module/student/controller/BaseStudentScholarshipCategoryController.java

@@ -58,7 +58,7 @@ public class BaseStudentScholarshipCategoryController {
         IPage<BaseStudentScholarshipCategoryPageVo> page = categoryService.selectJoinListPage(ConventPage.getPage(dto), BaseStudentScholarshipCategoryPageVo.class,
             MPJWrappers.<BaseStudentScholarshipCategory>lambdaJoin().disableSubLogicDel()
             .like(StrUtil.isNotEmpty(dto.getScholarshipName()), BaseStudentScholarshipCategory::getName, dto.getScholarshipName())
-            .like(StrUtil.isNotEmpty(dto.getScholarshipSource()), DictionaryDetail::getName, dto.getScholarshipSource())
+            .like(StrUtil.isNotEmpty(dto.getScholarshipSource()), DictionaryDetail::getCode, dto.getScholarshipSource())
             .eq(ObjectUtil.isNotNull(dto.getScholarshipLevel()), BaseStudentScholarshipCategory::getScholarshipLevel, dto.getScholarshipLevel())
             .select(BaseStudentScholarshipCategory::getId)
             .selectAs(DictionaryDetail::getName, BaseStudentScholarshipCategoryPageVo::getScholarshipSourceCn)

+ 15 - 3
src/main/java/com/xjrsoft/module/student/controller/BaseStudentScholarshipReleaseController.java

@@ -22,7 +22,6 @@ import com.xjrsoft.module.student.service.IBaseStudentScholarshipReleaseService;
 import com.xjrsoft.module.student.vo.BaseStudentScholarshipReleasePageVo;
 import com.xjrsoft.module.student.vo.BaseStudentScholarshipReleaseRecordVo;
 import com.xjrsoft.module.student.vo.BaseStudentScholarshipReleaseVo;
-import com.xjrsoft.module.student.vo.ScholarshipApplicantImportVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
@@ -39,7 +38,7 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.validation.Valid;
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.LinkedHashMap;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -57,7 +56,6 @@ public class BaseStudentScholarshipReleaseController {
 
     private final IBaseStudentScholarshipApplicantService applicantService;
     private final IBaseStudentScholarshipReleaseService releaseService;
-    private final IUserService userService;
 
     @GetMapping(value = "/page")
     @ApiOperation(value = "奖学金发放记录表列表(分页)")
@@ -141,14 +139,28 @@ public class BaseStudentScholarshipReleaseController {
                             .in(BaseStudentScholarshipApplicant::getId, dto.getApplicantIds())
             );
             List<BaseStudentScholarshipApplicant> dataList = new ArrayList<>();
+            List<BaseStudentScholarshipRelease> insertList = new ArrayList<>();
             for (BaseStudentScholarshipApplicant applicantVo : applicantList) {
                 applicantVo.setScholarshipLevel(dto.getScholarshipLevel());
                 applicantVo.setBaseStudentScholarshipCategoryId(dto.getBaseStudentScholarshipCategoryId());
+                applicantVo.setReviewStatus(1);
+                applicantVo.setAmount(dto.getTotalAmount().doubleValue());
                 dataList.add(applicantVo);
+
+                insertList.add(
+                        new BaseStudentScholarshipRelease(){{
+                            setCreateDate(new Date());
+                            setAmount(applicantVo.getAmount());
+                            setBaseStudentScholarshipApplicantId(applicantVo.getId());
+                        }}
+                );
             }
             if(!dataList.isEmpty()){
                 applicantService.updateBatchById(dataList);
             }
+            if(!insertList.isEmpty()){
+                releaseService.saveBatch(insertList);
+            }
         }
         return RT.ok(true);
     }

+ 2 - 1
src/main/java/com/xjrsoft/module/student/controller/CadreDeptController.java

@@ -118,8 +118,9 @@ public class CadreDeptController {
         //校验code唯一性
         if(ObjectUtil.isNotNull(dto.getCode())){
             CadreDept cadreDept = cadreDeptService.getOne(Wrappers.<CadreDept>lambdaQuery()
+                            .ne(CadreDept::getId, dto.getId())
                     .eq(CadreDept::getCode,dto.getCode()));
-            if(ObjectUtil.isNotNull(cadreDept) && cadreDept.getId() != (dto.getId())){
+            if(ObjectUtil.isNotNull(cadreDept)){
                 throw new MyException("干部部门编号不唯一");
             }
         }

+ 149 - 0
src/main/java/com/xjrsoft/module/student/dto/AddBaseStudentDevelopmentDto.java

@@ -0,0 +1,149 @@
+package com.xjrsoft.module.student.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.util.Date;
+
+
+
+/**
+* @title: 学生去向登记
+* @Author dzx
+* @Date: 2024-08-04
+* @Version 1.0
+*/
+@Data
+public class AddBaseStudentDevelopmentDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 学生id(xjr_user)
+    */
+    @ApiModelProperty("学生id(xjr_user)")
+    private Long userId;
+    /**
+    * 登记类型(1:升学 2:就业 3:未就业)
+    */
+    @ApiModelProperty("登记类型(1:升学 2:就业 3:未就业)")
+    private Integer enrollType;
+    /**
+    * 毕业id(base_student_graduate)
+    */
+    @ApiModelProperty("毕业id(base_student_graduate)")
+    private Long baseStudentGraduateId;
+    /**
+    * 是否自己创业(1:是 0:否)
+    */
+    @ApiModelProperty("是否自己创业(1:是 0:否)")
+    private Integer isEntrepreneurship;
+    /**
+    * 创业项目名称
+    */
+    @ApiModelProperty("创业项目名称")
+    private String entrepreneurialProject;
+    /**
+    * 是否灵活就业(1:是 0:否)
+    */
+    @ApiModelProperty("是否灵活就业(1:是 0:否)")
+    private Integer isFlexibleWork;
+    /**
+    * 是否灵活就业(1:是 0:否)
+    */
+    @ApiModelProperty("工作内容")
+    private String workContent;
+    /**
+    * 是否校企合作单位(1:是 0:否)
+    */
+    @ApiModelProperty("是否校企合作单位(1:是 0:否)")
+    private Integer isCompanyCoop;
+    /**
+    * 企合作单位(company_coop),是校企合作单位
+    */
+    @ApiModelProperty("企合作单位(company_coop),是校企合作单位")
+    private Long companyCoopId;
+    /**
+    * 就业单位名称(非校企合作单位)
+    */
+    @ApiModelProperty("就业单位名称(非校企合作单位)")
+    private String workCompany;
+    /**
+    * 就业单位行业
+    */
+    @ApiModelProperty("就业单位行业")
+    private String companyIndustry;
+    /**
+    * 就业单位性质
+    */
+    @ApiModelProperty("就业单位性质")
+    private String companyNature;
+    /**
+    * 就业单位规模(xjr_dictionary_item[company_scale])
+    */
+    @ApiModelProperty("就业单位规模(xjr_dictionary_item[company_scale])")
+    private String companyScale;
+    /**
+    * 是否对口(1:是 0:否)
+    */
+    @ApiModelProperty("是否对口(1:是 0:否)")
+    private Integer isMatching;
+    /**
+    * 最低薪资
+    */
+    @ApiModelProperty("最低薪资")
+    private Double money;
+    /**
+    * 就业日期
+    */
+    @ApiModelProperty("就业日期")
+    private LocalDate workDate;
+    /**
+    * 就业所在地区
+    */
+    @ApiModelProperty("就业所在地区")
+    private String workCity;
+    /**
+    * 学生类型(xjr_dictionary_item[culture_type])
+    */
+    @ApiModelProperty("学生类型(xjr_dictionary_item[culture_type])")
+    private String cultureType;
+    /**
+    * 升学渠道(xjr_dictionary_item[ascending_channels])
+    */
+    @ApiModelProperty("升学渠道(xjr_dictionary_item[ascending_channels])")
+    private String ascendingChannels;
+    /**
+    * 学校名称
+    */
+    @ApiModelProperty("学校名称")
+    private String school;
+    /**
+    * 录取专业
+    */
+    @ApiModelProperty("录取专业")
+    private String admissionMajor;
+    /**
+    * 分数
+    */
+    @ApiModelProperty("分数")
+    private Integer score;
+    /**
+    * 升学层次(xjr_dictionary_item[ascending_arrangement])
+    */
+    @ApiModelProperty("升学层次(xjr_dictionary_item[ascending_arrangement])")
+    private String ascendingArrangement;
+    /**
+    * 未就业类型(xjr_dictionary_item[unemployed_type])
+    */
+    @ApiModelProperty("未就业类型(xjr_dictionary_item[unemployed_type])")
+    private String unemployedType;
+    /**
+    * 备注信息
+    */
+    @ApiModelProperty("备注信息")
+    private String remark;
+
+}

+ 2 - 1
src/main/java/com/xjrsoft/module/student/dto/AddBaseStudentScholarshipReleaseDto.java

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.time.LocalDate;
 import java.util.Date;
 
 
@@ -33,6 +34,6 @@ public class AddBaseStudentScholarshipReleaseDto implements Serializable {
     * 发放日期
     */
     @ApiModelProperty("发放日期")
-    private Date releaseDate;
+    private LocalDate releaseDate;
 
 }

+ 3 - 1
src/main/java/com/xjrsoft/module/student/dto/AddStudentScholarshipDto.java

@@ -4,7 +4,6 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
-import java.math.BigDecimal;
 import java.util.List;
 
 
@@ -39,4 +38,7 @@ public class AddStudentScholarshipDto implements Serializable {
     */
     @ApiModelProperty("等级")
     private Integer scholarshipLevel;
+
+    @ApiModelProperty("金额")
+    private Integer totalAmount;
 }

+ 21 - 0
src/main/java/com/xjrsoft/module/student/dto/BaseStudentDevelopmentPageDto.java

@@ -0,0 +1,21 @@
+package com.xjrsoft.module.student.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+
+/**
+* @title: 学生去向登记分页查询入参
+* @Author dzx
+* @Date: 2024-08-04
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class BaseStudentDevelopmentPageDto extends PageInput {
+
+    @ApiModelProperty("毕业id")
+    private Long baseStudentGraduateId;
+}

+ 5 - 0
src/main/java/com/xjrsoft/module/student/dto/BaseStudentSimpleInfoDto.java

@@ -15,4 +15,9 @@ public class BaseStudentSimpleInfoDto {
 
     @ApiModelProperty("用户id")
     private Long userId;
+
+    @ApiModelProperty("姓名")
+    private String name;
+
+    private String idNumber;
 }

+ 24 - 0
src/main/java/com/xjrsoft/module/student/dto/UpdateBaseStudentDevelopmentDto.java

@@ -0,0 +1,24 @@
+package com.xjrsoft.module.student.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+
+/**
+* @title: 学生去向登记
+* @Author dzx
+* @Date: 2024-08-04
+* @Version 1.0
+*/
+@Data
+public class UpdateBaseStudentDevelopmentDto extends AddBaseStudentDevelopmentDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long id;
+}

+ 199 - 0
src/main/java/com/xjrsoft/module/student/entity/BaseStudentDevelopment.java

@@ -0,0 +1,199 @@
+package com.xjrsoft.module.student.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+* @title: 学生去向登记
+* @Author dzx
+* @Date: 2024-08-04
+* @Version 1.0
+*/
+@Data
+@TableName("base_student_development")
+@ApiModel(value = "base_student_development", description = "学生去向登记")
+public class BaseStudentDevelopment implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableId
+    private Long id;
+    /**
+    * 创建人
+    */
+    @ApiModelProperty("创建人")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUserId;
+    /**
+    * 创建时间
+    */
+    @ApiModelProperty("创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createDate;
+    /**
+    * 修改人
+    */
+    @ApiModelProperty("修改人")
+    @TableField(fill = FieldFill.UPDATE)
+    private Long modifyUserId;
+    /**
+    * 修改日期
+    */
+    @ApiModelProperty("修改日期")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date modifyDate;
+    /**
+    * 删除标记
+    */
+    @ApiModelProperty("删除标记")
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer deleteMark;
+    /**
+    * 有效标记
+    */
+    @ApiModelProperty("有效标记")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer enabledMark;
+    /**
+    * 学生id(xjr_user)
+    */
+    @ApiModelProperty("学生id(xjr_user)")
+    private Long userId;
+    /**
+    * 登记类型(1:升学 2:就业 3:未就业)
+    */
+    @ApiModelProperty("登记类型(1:升学 2:就业 3:未就业)")
+    private Integer enrollType;
+    /**
+    * 毕业id(base_student_graduate)
+    */
+    @ApiModelProperty("毕业id(base_student_graduate)")
+    private Long baseStudentGraduateId;
+    /**
+    * 是否自己创业(1:是 0:否)
+    */
+    @ApiModelProperty("是否自己创业(1:是 0:否)")
+    private Integer isEntrepreneurship;
+    /**
+    * 创业项目名称
+    */
+    @ApiModelProperty("创业项目名称")
+    private String entrepreneurialProject;
+    /**
+    * 是否灵活就业(1:是 0:否)
+    */
+    @ApiModelProperty("是否灵活就业(1:是 0:否)")
+    private Integer isFlexibleWork;
+    /**
+    * 是否灵活就业(1:是 0:否)
+    */
+    @ApiModelProperty("工作内容")
+    private String workContent;
+    /**
+    * 是否校企合作单位(1:是 0:否)
+    */
+    @ApiModelProperty("是否校企合作单位(1:是 0:否)")
+    private Integer isCompanyCoop;
+    /**
+    * 企合作单位(company_coop),是校企合作单位
+    */
+    @ApiModelProperty("企合作单位(company_coop),是校企合作单位")
+    private Long companyCoopId;
+    /**
+    * 就业单位名称(非校企合作单位)
+    */
+    @ApiModelProperty("就业单位名称(非校企合作单位)")
+    private String workCompany;
+    /**
+    * 就业单位行业
+    */
+    @ApiModelProperty("就业单位行业")
+    private String companyIndustry;
+    /**
+    * 就业单位性质
+    */
+    @ApiModelProperty("就业单位性质")
+    private String companyNature;
+    /**
+    * 就业单位规模(xjr_dictionary_item[company_scale])
+    */
+    @ApiModelProperty("就业单位规模(xjr_dictionary_item[company_scale])")
+    private String companyScale;
+    /**
+    * 是否对口(1:是 0:否)
+    */
+    @ApiModelProperty("是否对口(1:是 0:否)")
+    private Integer isMatching;
+    /**
+    * 最低薪资
+    */
+    @ApiModelProperty("最低薪资")
+    private Double money;
+    /**
+    * 就业日期
+    */
+    @ApiModelProperty("就业日期")
+    private Date workDate;
+    /**
+    * 就业所在地区
+    */
+    @ApiModelProperty("就业所在地区")
+    private String workCity;
+    /**
+    * 学生类型(xjr_dictionary_item[culture_type])
+    */
+    @ApiModelProperty("学生类型(xjr_dictionary_item[culture_type])")
+    private String cultureType;
+    /**
+    * 升学渠道(xjr_dictionary_item[ascending_channels])
+    */
+    @ApiModelProperty("升学渠道(xjr_dictionary_item[ascending_channels])")
+    private String ascendingChannels;
+    /**
+    * 学校名称
+    */
+    @ApiModelProperty("学校名称")
+    private String school;
+    /**
+    * 录取专业
+    */
+    @ApiModelProperty("录取专业")
+    private String admissionMajor;
+    /**
+    * 分数
+    */
+    @ApiModelProperty("分数")
+    private Integer score;
+    /**
+    * 升学层次(xjr_dictionary_item[ascending_arrangement])
+    */
+    @ApiModelProperty("升学层次(xjr_dictionary_item[ascending_arrangement])")
+    private String ascendingArrangement;
+    /**
+    * 未就业类型(xjr_dictionary_item[unemployed_type])
+    */
+    @ApiModelProperty("未就业类型(xjr_dictionary_item[unemployed_type])")
+    private String unemployedType;
+    /**
+    * 备注信息
+    */
+    @ApiModelProperty("备注信息")
+    private String remark;
+
+
+}

+ 2 - 1
src/main/java/com/xjrsoft/module/student/entity/BaseStudentScholarshipRelease.java

@@ -10,6 +10,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.time.LocalDate;
 import java.util.Date;
 
 
@@ -83,7 +84,7 @@ public class BaseStudentScholarshipRelease implements Serializable {
     * 发放日期
     */
     @ApiModelProperty("发放日期")
-    private Date releaseDate;
+    private LocalDate releaseDate;
 
 
 }

+ 20 - 0
src/main/java/com/xjrsoft/module/student/mapper/BaseStudentDevelopmentMapper.java

@@ -0,0 +1,20 @@
+package com.xjrsoft.module.student.mapper;
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.student.entity.BaseStudentDevelopment;
+import com.xjrsoft.module.student.vo.BaseStudentDevelopmentVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+* @title: 学生去向登记
+* @Author dzx
+* @Date: 2024-08-04
+* @Version 1.0
+*/
+@Mapper
+public interface BaseStudentDevelopmentMapper extends MPJBaseMapper<BaseStudentDevelopment> {
+
+    BaseStudentDevelopmentVo getInfoById(@Param("id") Long id);
+
+}

+ 2 - 0
src/main/java/com/xjrsoft/module/student/mapper/BaseStudentMapper.java

@@ -34,4 +34,6 @@ public interface BaseStudentMapper extends MPJBaseMapper<BaseStudent> {
     List<String> getCredentialNumbers();
 
     Page<BaseStudentUserPageVo> getStudentPage(Page<BaseStudentUserPageVo> page, BaseStudentUserPageDto dto);
+
+    List<BaseStudentUserPageVo> getStudentList(BaseStudentUserPageDto dto);
 }

+ 18 - 0
src/main/java/com/xjrsoft/module/student/service/IBaseStudentDevelopmentService.java

@@ -0,0 +1,18 @@
+package com.xjrsoft.module.student.service;
+
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.student.entity.BaseStudentDevelopment;
+import com.xjrsoft.module.student.vo.BaseStudentDevelopmentVo;
+import org.apache.ibatis.annotations.Param;
+
+/**
+* @title: 学生去向登记
+* @Author dzx
+* @Date: 2024-08-04
+* @Version 1.0
+*/
+
+public interface IBaseStudentDevelopmentService extends MPJBaseService<BaseStudentDevelopment> {
+
+    BaseStudentDevelopmentVo getInfoById(Long id);
+}

+ 0 - 1
src/main/java/com/xjrsoft/module/student/service/IBaseStudentScholarshipApplicantService.java

@@ -5,7 +5,6 @@ import com.github.yulichang.base.MPJBaseService;
 import com.xjrsoft.module.student.dto.BaseStudentScholarshipApplicantCategoryPageDto;
 import com.xjrsoft.module.student.entity.BaseStudentScholarshipApplicant;
 import com.xjrsoft.module.student.vo.BaseStudentScholarshipApplicantCategoryPageVo;
-import com.xjrsoft.module.student.vo.ScholarshipApplicantImportVo;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;

+ 0 - 1
src/main/java/com/xjrsoft/module/student/service/IBaseStudentScholarshipCategoryService.java

@@ -6,7 +6,6 @@ import com.xjrsoft.module.student.dto.BaseStudentScholarshipReleasePageDto;
 import com.xjrsoft.module.student.entity.BaseStudentScholarshipCategory;
 import com.xjrsoft.module.student.vo.BaseStudentScholarshipCategoryStatisticPageVo;
 import com.xjrsoft.module.student.vo.BaseStudentScholarshipReleasePageVo;
-import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 

+ 6 - 0
src/main/java/com/xjrsoft/module/student/service/IBaseStudentService.java

@@ -1,9 +1,13 @@
 package com.xjrsoft.module.student.service;
 
 import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.student.dto.BaseStudentUserPageDto;
 import com.xjrsoft.module.student.entity.BaseStudent;
+import com.xjrsoft.module.student.vo.BaseStudentUserPageVo;
 import com.xjrsoft.module.student.vo.StudentPersonalInfoVo;
 
+import java.util.List;
+
 /**
 * @title: 奖学金申请
 * @Author dzx
@@ -13,4 +17,6 @@ import com.xjrsoft.module.student.vo.StudentPersonalInfoVo;
 
 public interface IBaseStudentService extends MPJBaseService<BaseStudent> {
     StudentPersonalInfoVo getPersonalInfo(Long userId);
+
+    List<BaseStudentUserPageVo> getStudentList(BaseStudentUserPageDto dto);
 }

+ 1 - 0
src/main/java/com/xjrsoft/module/student/service/impl/BaseStudentAssessmentInspectionServiceImpl.java

@@ -291,6 +291,7 @@ public class BaseStudentAssessmentInspectionServiceImpl extends MPJBaseServiceIm
                         }
 
                         if(conventionalManagementMap.get(classId) != null){
+                            QuantitativeAssessmentSingleScoreVo scoreVo = conventionalManagementMap.get(classId);
                             c.setClassConventionalManageSubScore(conventionalManagementMap.get(classId).getSumScore());
                             c.setClassConventionalManageScore((100 + conventionalManagementMap.get(classId).getSumScore())/100*25);
                         }

+ 24 - 0
src/main/java/com/xjrsoft/module/student/service/impl/BaseStudentDevelopmentServiceImpl.java

@@ -0,0 +1,24 @@
+package com.xjrsoft.module.student.service.impl;
+
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.module.student.entity.BaseStudentDevelopment;
+import com.xjrsoft.module.student.mapper.BaseStudentDevelopmentMapper;
+import com.xjrsoft.module.student.service.IBaseStudentDevelopmentService;
+import com.xjrsoft.module.student.vo.BaseStudentDevelopmentVo;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+* @title: 学生去向登记
+* @Author dzx
+* @Date: 2024-08-04
+* @Version 1.0
+*/
+@Service
+@AllArgsConstructor
+public class BaseStudentDevelopmentServiceImpl extends MPJBaseServiceImpl<BaseStudentDevelopmentMapper, BaseStudentDevelopment> implements IBaseStudentDevelopmentService {
+    @Override
+    public BaseStudentDevelopmentVo getInfoById(Long id) {
+        return this.baseMapper.getInfoById(id);
+    }
+}

+ 12 - 1
src/main/java/com/xjrsoft/module/student/service/impl/BaseStudentServiceImpl.java

@@ -1,13 +1,17 @@
 package com.xjrsoft.module.student.service.impl;
 
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.module.student.dto.BaseStudentUserPageDto;
 import com.xjrsoft.module.student.entity.BaseStudent;
 import com.xjrsoft.module.student.mapper.BaseStudentMapper;
 import com.xjrsoft.module.student.service.IBaseStudentService;
+import com.xjrsoft.module.student.vo.BaseStudentUserPageVo;
 import com.xjrsoft.module.student.vo.StudentPersonalInfoVo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
 * @title: 助学金申请
 * @Author dzx
@@ -22,5 +26,12 @@ public class BaseStudentServiceImpl extends MPJBaseServiceImpl<BaseStudentMapper
     @Override
     public StudentPersonalInfoVo getPersonalInfo(Long userId){
         return studentMapper.getPersonalInfo(userId);
-    };
+    }
+
+    @Override
+    public List<BaseStudentUserPageVo> getStudentList(BaseStudentUserPageDto dto) {
+        return this.baseMapper.getStudentList(dto);
+    }
+
+    ;
 }

+ 3 - 0
src/main/java/com/xjrsoft/module/student/service/impl/PbVXsxxsfytbServiceImpl.java

@@ -314,6 +314,9 @@ public class PbVXsxxsfytbServiceImpl extends MPJBaseServiceImpl<PbVXsxxsfytbMapp
         Integer allCount = (result.getStayCount() == null?0:result.getStayCount())
                 + (result.getNotStayCount() == null?0:result.getNotStayCount());
         BigDecimal divide = BigDecimal.ZERO;
+        if(result.getStayCount() == null){
+            result.setStayCount(0);
+        }
         if(allCount != 0){
             divide = BigDecimal.valueOf(result.getStayCount()).divide(BigDecimal.valueOf(allCount), 4, RoundingMode.HALF_UP);
         }

+ 153 - 0
src/main/java/com/xjrsoft/module/student/vo/BaseStudentDevelopmentPageVo.java

@@ -0,0 +1,153 @@
+package com.xjrsoft.module.student.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+* @title: 学生去向登记分页列表出参
+* @Author dzx
+* @Date: 2024-08-04
+* @Version 1.0
+*/
+@Data
+public class BaseStudentDevelopmentPageVo {
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private String id;
+    /**
+    * 创建时间
+    */
+    @ApiModelProperty("创建时间")
+    private Date createDate;
+    /**
+    * 学生id(xjr_user)
+    */
+    @ApiModelProperty("学生id(xjr_user)")
+    private Long userId;
+    /**
+    * 登记类型(1:升学 2:就业 3:未就业)
+    */
+    @ApiModelProperty("登记类型(1:升学 2:就业 3:未就业)")
+    private Integer enrollType;
+    /**
+    * 毕业id(base_student_graduate)
+    */
+    @ApiModelProperty("毕业id(base_student_graduate)")
+    private Long baseStudentGraduateId;
+    /**
+    * 是否自己创业(1:是 0:否)
+    */
+    @ApiModelProperty("是否自己创业(1:是 0:否)")
+    private Integer isEntrepreneurship;
+    /**
+    * 创业项目名称
+    */
+    @ApiModelProperty("创业项目名称")
+    private String entrepreneurialProject;
+    /**
+    * 是否灵活就业(1:是 0:否)
+    */
+    @ApiModelProperty("是否灵活就业(1:是 0:否)")
+    private Integer isFlexibleWork;
+    /**
+    * 是否灵活就业(1:是 0:否)
+    */
+    @ApiModelProperty("工作内容")
+    private String workContent;
+    /**
+    * 是否校企合作单位(1:是 0:否)
+    */
+    @ApiModelProperty("是否校企合作单位(1:是 0:否)")
+    private Integer isCompanyCoop;
+    /**
+    * 企合作单位(company_coop),是校企合作单位
+    */
+    @ApiModelProperty("企合作单位(company_coop),是校企合作单位")
+    private Integer companyCoopId;
+    /**
+    * 就业单位名称(非校企合作单位)
+    */
+    @ApiModelProperty("就业单位名称(非校企合作单位)")
+    private String workCompany;
+    /**
+    * 就业单位行业
+    */
+    @ApiModelProperty("就业单位行业")
+    private String companyIndustry;
+    /**
+    * 就业单位性质
+    */
+    @ApiModelProperty("就业单位性质")
+    private String companyNature;
+    /**
+    * 就业单位规模(xjr_dictionary_item[company_scale])
+    */
+    @ApiModelProperty("就业单位规模(xjr_dictionary_item[company_scale])")
+    private String companyScale;
+    /**
+    * 是否对口(1:是 0:否)
+    */
+    @ApiModelProperty("是否对口(1:是 0:否)")
+    private Integer isMatching;
+    /**
+    * 最低薪资
+    */
+    @ApiModelProperty("最低薪资")
+    private Double money;
+    /**
+    * 就业日期
+    */
+    @ApiModelProperty("就业日期")
+    private Date workDate;
+    /**
+    * 就业所在地区
+    */
+    @ApiModelProperty("就业所在地区")
+    private String workCity;
+    /**
+    * 学生类型(xjr_dictionary_item[culture_type])
+    */
+    @ApiModelProperty("学生类型(xjr_dictionary_item[culture_type])")
+    private String cultureType;
+    /**
+    * 升学渠道(xjr_dictionary_item[ascending_channels])
+    */
+    @ApiModelProperty("升学渠道(xjr_dictionary_item[ascending_channels])")
+    private String ascendingChannels;
+    /**
+    * 学校名称
+    */
+    @ApiModelProperty("学校名称")
+    private String school;
+    /**
+    * 录取专业
+    */
+    @ApiModelProperty("录取专业")
+    private String admissionMajor;
+    /**
+    * 分数
+    */
+    @ApiModelProperty("分数")
+    private Integer score;
+    /**
+    * 升学层次(xjr_dictionary_item[ascending_arrangement])
+    */
+    @ApiModelProperty("升学层次(xjr_dictionary_item[ascending_arrangement])")
+    private String ascendingArrangement;
+    /**
+    * 未就业类型(xjr_dictionary_item[unemployed_type])
+    */
+    @ApiModelProperty("未就业类型(xjr_dictionary_item[unemployed_type])")
+    private String unemployedType;
+    /**
+    * 备注信息
+    */
+    @ApiModelProperty("备注信息")
+    private String remark;
+
+}

+ 155 - 0
src/main/java/com/xjrsoft/module/student/vo/BaseStudentDevelopmentVo.java

@@ -0,0 +1,155 @@
+package com.xjrsoft.module.student.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+* @title: 学生去向登记表单出参
+* @Author dzx
+* @Date: 2024-08-04
+* @Version 1.0
+*/
+@Data
+public class BaseStudentDevelopmentVo {
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long id;
+    /**
+    * 登记类型(1:升学 2:就业 3:未就业)
+    */
+    @ApiModelProperty("登记类型(1:升学 2:就业 3:未就业)")
+    private Integer enrollType;
+    /**
+    * 毕业id(base_student_graduate)
+    */
+    @ApiModelProperty("毕业id(base_student_graduate)")
+    private Long baseStudentGraduateId;
+    /**
+    * 是否自己创业(1:是 0:否)
+    */
+    @ApiModelProperty("是否自己创业(1:是 0:否)")
+    private Integer isEntrepreneurship;
+    /**
+    * 创业项目名称
+    */
+    @ApiModelProperty("创业项目名称")
+    private String entrepreneurialProject;
+    /**
+    * 是否灵活就业(1:是 0:否)
+    */
+    @ApiModelProperty("是否灵活就业(1:是 0:否)")
+    private Integer isFlexibleWork;
+    /**
+    * 是否灵活就业(1:是 0:否)
+    */
+    @ApiModelProperty("工作内容")
+    private Integer workContent;
+    /**
+    * 是否校企合作单位(1:是 0:否)
+    */
+    @ApiModelProperty("是否校企合作单位(1:是 0:否)")
+    private Integer isCompanyCoop;
+    /**
+    * 企合作单位(company_coop),是校企合作单位
+    */
+    @ApiModelProperty("企合作单位(company_coop),是校企合作单位")
+    private Integer companyCoopId;
+    /**
+    * 就业单位名称(非校企合作单位)
+    */
+    @ApiModelProperty("就业单位名称(非校企合作单位)")
+    private String workCompany;
+    /**
+    * 就业单位行业
+    */
+    @ApiModelProperty("就业单位行业")
+    private String companyIndustry;
+    /**
+    * 就业单位性质
+    */
+    @ApiModelProperty("就业单位性质")
+    private String companyNature;
+    /**
+    * 就业单位规模(xjr_dictionary_item[company_scale])
+    */
+    @ApiModelProperty("就业单位规模(xjr_dictionary_item[company_scale])")
+    private String companyScaleCn;
+    /**
+    * 是否对口(1:是 0:否)
+    */
+    @ApiModelProperty("是否对口(1:是 0:否)")
+    private Integer isMatching;
+    /**
+    * 最低薪资
+    */
+    @ApiModelProperty("最低薪资")
+    private Double money;
+    /**
+    * 就业日期
+    */
+    @ApiModelProperty("就业日期")
+    private Date workDate;
+    /**
+    * 就业所在地区
+    */
+    @ApiModelProperty("就业所在地区")
+    private String workCity;
+    /**
+    * 学生类型(xjr_dictionary_item[culture_type])
+    */
+    @ApiModelProperty("学生类型(xjr_dictionary_item[culture_type])")
+    private String cultureTypeCn;
+    /**
+    * 升学渠道(xjr_dictionary_item[ascending_channels])
+    */
+    @ApiModelProperty("升学渠道(xjr_dictionary_item[ascending_channels])")
+    private String ascendingChannelsCn;
+
+    @ApiModelProperty("学生类型(xjr_dictionary_item[culture_type])")
+    private String cultureType;
+    /**
+     * 升学渠道(xjr_dictionary_item[ascending_channels])
+     */
+    @ApiModelProperty("升学渠道(xjr_dictionary_item[ascending_channels])")
+    private String ascendingChannels;
+    /**
+    * 学校名称
+    */
+    @ApiModelProperty("学校名称")
+    private String school;
+    /**
+    * 录取专业
+    */
+    @ApiModelProperty("录取专业")
+    private String admissionMajor;
+    /**
+    * 分数
+    */
+    @ApiModelProperty("分数")
+    private Integer score;
+    /**
+    * 升学层次(xjr_dictionary_item[ascending_arrangement])
+    */
+    @ApiModelProperty("升学层次(xjr_dictionary_item[ascending_arrangement])")
+    private String ascendingArrangementCn;
+    /**
+    * 未就业类型(xjr_dictionary_item[unemployed_type])
+    */
+    @ApiModelProperty("未就业类型(xjr_dictionary_item[unemployed_type])")
+    private String unemployedTypeCn;
+    /**
+    * 备注信息
+    */
+    @ApiModelProperty("备注信息")
+    private String remark;
+
+    @ApiModelProperty("未就业类型(xjr_dictionary_item[unemployed_type])")
+    private String unemployedType;
+
+
+}

+ 3 - 0
src/main/java/com/xjrsoft/module/student/vo/BaseStudentGraduatePageVo.java

@@ -167,4 +167,7 @@ public class BaseStudentGraduatePageVo {
      */
     @ApiModelProperty("公文附件列表")
     private List<File> fileInfos;
+
+    @ApiModelProperty("登记状态(0:未登记 1:升学 2:就业 3:未就业)")
+    private Integer enrollStatus;
 }

+ 3 - 0
src/main/java/com/xjrsoft/module/student/vo/BaseStudentUserPageVo.java

@@ -41,4 +41,7 @@ public class BaseStudentUserPageVo {
 
     @ApiModelProperty("学习形式")
     private String learnStatusCn;
+
+    @ApiModelProperty("工号/学号")
+    private String userName;
 }

+ 0 - 2
src/main/java/com/xjrsoft/module/student/vo/ScholarshipApplicantImportVo.java

@@ -4,8 +4,6 @@ import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
-import java.util.Date;
-
 /**
 * @title: 奖学金申请表单出参
 * @Author dzx

+ 109 - 0
src/main/java/com/xjrsoft/module/system/controller/XjrMenuGroupSetController.java

@@ -0,0 +1,109 @@
+package com.xjrsoft.module.system.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.xjrsoft.common.model.result.RT;
+import com.xjrsoft.common.page.ConventPage;
+import com.xjrsoft.common.page.PageOutput;
+import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.system.dto.AddXjrMenuGroupDto;
+import com.xjrsoft.module.system.dto.XjrMenuGroupMenuListDto;
+import com.xjrsoft.module.system.dto.XjrMenuGroupSetPageDto;
+import com.xjrsoft.module.system.entity.XjrMenuGroupSet;
+import com.xjrsoft.module.system.service.IXjrMenuGroupSetService;
+import com.xjrsoft.module.system.vo.XjrMenuGroupMenuListVo;
+import com.xjrsoft.module.system.vo.XjrMenuGroupSetPageVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+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;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+* @title: 功能分类设置
+* @Author dzx
+* @Date: 2024-08-09
+* @Version 1.0
+*/
+@RestController
+@RequestMapping("/system" + "/xjrMenuGroupSet")
+@Api(value = "/system"  + "/xjrMenuGroupSet",tags = "功能分类设置代码")
+@AllArgsConstructor
+public class XjrMenuGroupSetController {
+
+
+    private final IXjrMenuGroupSetService xjrMenuGroupSetService;
+
+    @GetMapping(value = "/page")
+    @ApiOperation(value="功能分类设置列表(分页)")
+    @SaCheckPermission("xjrmenugroupset:detail")
+    public RT<PageOutput<XjrMenuGroupSetPageVo>> page(@Valid XjrMenuGroupSetPageDto dto){
+
+        LambdaQueryWrapper<XjrMenuGroupSet> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper
+                    .orderByDesc(XjrMenuGroupSet::getId)
+                .select(XjrMenuGroupSet.class,x -> VoToColumnUtil.fieldsToColumns(XjrMenuGroupSetPageVo.class).contains(x.getProperty()));
+        IPage<XjrMenuGroupSet> page = xjrMenuGroupSetService.page(ConventPage.getPage(dto), queryWrapper);
+        PageOutput<XjrMenuGroupSetPageVo> pageOutput = ConventPage.getPageOutput(page, XjrMenuGroupSetPageVo.class);
+        return RT.ok(pageOutput);
+    }
+
+//    @GetMapping(value = "/info")
+//    @ApiOperation(value="根据id查询功能分类设置信息")
+//    @SaCheckPermission("xjrmenugroupset:detail")
+//    public RT<XjrMenuGroupSetVo> info(@RequestParam Long id){
+//        XjrMenuGroupSet xjrMenuGroupSet = xjrMenuGroupSetService.getByIdDeep(id);
+//        if (xjrMenuGroupSet == null) {
+//           return RT.error("找不到此数据!");
+//        }
+//        return RT.ok(BeanUtil.toBean(xjrMenuGroupSet, XjrMenuGroupSetVo.class));
+//    }
+//
+//
+//    @PostMapping
+//    @ApiOperation(value = "新增功能分类设置")
+//    @SaCheckPermission("xjrmenugroupset:add")
+//    public RT<Boolean> add(@Valid @RequestBody AddXjrMenuGroupSetDto dto){
+//        XjrMenuGroupSet xjrMenuGroupSet = BeanUtil.toBean(dto, XjrMenuGroupSet.class);
+//        boolean isSuccess = xjrMenuGroupSetService.add(xjrMenuGroupSet);
+//        return RT.ok(isSuccess);
+//    }
+//
+//    @PutMapping
+//    @ApiOperation(value = "修改功能分类设置")
+//    @SaCheckPermission("xjrmenugroupset:edit")
+//    public RT<Boolean> update(@Valid @RequestBody UpdateXjrMenuGroupSetDto dto){
+//        XjrMenuGroupSet xjrMenuGroupSet = BeanUtil.toBean(dto, XjrMenuGroupSet.class);
+//        return RT.ok(xjrMenuGroupSetService.update(xjrMenuGroupSet));
+//    }
+//
+//    @DeleteMapping
+//    @ApiOperation(value = "删除功能分类设置")
+//    @SaCheckPermission("xjrmenugroupset:delete")
+//    public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
+//        return RT.ok(xjrMenuGroupSetService.delete(ids));
+//    }
+
+    @GetMapping(value = "/menu-list")
+    @ApiOperation(value = "查询学生菜单")
+    @SaCheckPermission("xjrmenugroupset:detail")
+    public RT<List<XjrMenuGroupMenuListVo>> menuList(@Valid XjrMenuGroupMenuListDto dto){
+        return RT.ok(xjrMenuGroupSetService.getMenuList(dto));
+    }
+
+    @PostMapping(value = "/set-menu")
+    @ApiOperation(value = "配置功能")
+    @SaCheckPermission("xjrmenugroupset:add")
+    public RT<Boolean> setMenu(@Valid @RequestBody AddXjrMenuGroupDto dto){
+        boolean isSuccess = xjrMenuGroupSetService.setMenu(dto);
+        return RT.ok(isSuccess);
+    }
+
+}

+ 145 - 0
src/main/java/com/xjrsoft/module/system/controller/XjrTipsMessageController.java

@@ -0,0 +1,145 @@
+package com.xjrsoft.module.system.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+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.xjrsoft.common.model.result.RT;
+import com.xjrsoft.common.page.ConventPage;
+import com.xjrsoft.common.page.PageOutput;
+import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.system.dto.AddXjrTipsMessageDto;
+import com.xjrsoft.module.system.dto.UpdateXjrTipsMessageDto;
+import com.xjrsoft.module.system.dto.XjrTipsMessagePageDto;
+import com.xjrsoft.module.system.entity.XjrTipsMessage;
+import com.xjrsoft.module.system.service.IXjrTipsMessageService;
+import com.xjrsoft.module.system.vo.XjrTipsMessagePageVo;
+import com.xjrsoft.module.system.vo.XjrTipsMessageVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+* @title: 系统提示信息设置
+* @Author dzx
+* @Date: 2024-08-12
+* @Version 1.0
+*/
+@RestController
+@RequestMapping("/system" + "/xjrTipsMessage")
+@Api(value = "/system"  + "/xjrTipsMessage",tags = "系统提示信息设置代码")
+@AllArgsConstructor
+public class XjrTipsMessageController {
+
+
+    private final IXjrTipsMessageService xjrTipsMessageService;
+
+    @GetMapping(value = "/page")
+    @ApiOperation(value="系统提示信息设置列表(分页)")
+    @SaCheckPermission("xjrtipsmessage:detail")
+    public RT<PageOutput<XjrTipsMessagePageVo>> page(@Valid XjrTipsMessagePageDto dto){
+
+        LambdaQueryWrapper<XjrTipsMessage> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper
+                .orderByDesc(XjrTipsMessage::getId)
+                .eq(ObjectUtil.isNotNull(dto), XjrTipsMessage::getGroupName, dto.getGroupName())
+                .select(XjrTipsMessage.class,x -> VoToColumnUtil.fieldsToColumns(XjrTipsMessagePageVo.class).contains(x.getProperty()));
+        IPage<XjrTipsMessage> page = xjrTipsMessageService.page(ConventPage.getPage(dto), queryWrapper);
+        PageOutput<XjrTipsMessagePageVo> pageOutput = ConventPage.getPageOutput(page, XjrTipsMessagePageVo.class);
+        return RT.ok(pageOutput);
+    }
+
+    @GetMapping(value = "/list")
+    @ApiOperation(value="系统提示信息设置列表")
+    @SaCheckPermission("xjrtipsmessage:detail")
+    public RT<List<XjrTipsMessagePageVo>> list(@Valid XjrTipsMessagePageDto dto){
+
+        LambdaQueryWrapper<XjrTipsMessage> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper
+                .eq(ObjectUtil.isNotNull(dto), XjrTipsMessage::getGroupName, dto.getGroupName())
+                .orderByDesc(XjrTipsMessage::getId)
+                .select(XjrTipsMessage.class,x -> VoToColumnUtil.fieldsToColumns(XjrTipsMessagePageVo.class).contains(x.getProperty()));
+        List<XjrTipsMessage> list = xjrTipsMessageService.list(queryWrapper);
+        return RT.ok(BeanUtil.copyToList(list, XjrTipsMessagePageVo.class));
+    }
+
+    @GetMapping(value = "/info")
+    @ApiOperation(value="根据id查询系统提示信息设置信息")
+    @SaCheckPermission("xjrtipsmessage:detail")
+    public RT<XjrTipsMessageVo> info(@RequestParam Long id){
+        XjrTipsMessage xjrTipsMessage = xjrTipsMessageService.getById(id);
+        if (xjrTipsMessage == null) {
+           return RT.error("找不到此数据!");
+        }
+        return RT.ok(BeanUtil.toBean(xjrTipsMessage, XjrTipsMessageVo.class));
+    }
+
+    @GetMapping(value = "/infoByCode")
+    @ApiOperation(value="根据code查询系统提示信息设置信息")
+    @SaCheckPermission("xjrtipsmessage:detail")
+    public RT<XjrTipsMessageVo> infoByCode(@RequestParam String code){
+        XjrTipsMessage xjrTipsMessage = xjrTipsMessageService.getOne(
+                new QueryWrapper<XjrTipsMessage>().lambda().eq(XjrTipsMessage::getCode, code)
+        );
+        if (xjrTipsMessage == null) {
+            return RT.error("找不到此数据!");
+        }
+        return RT.ok(BeanUtil.toBean(xjrTipsMessage, XjrTipsMessageVo.class));
+    }
+
+
+    @PostMapping
+    @ApiOperation(value = "新增系统提示信息设置")
+    @SaCheckPermission("xjrtipsmessage:add")
+    public RT<Boolean> add(@Valid @RequestBody AddXjrTipsMessageDto dto){
+        long count = xjrTipsMessageService.count(
+                new QueryWrapper<XjrTipsMessage>().lambda()
+                        .eq(XjrTipsMessage::getCode, dto.getCode())
+        );
+        if(count > 0){
+            return RT.error("code已存在!请保证code唯一!");
+        }
+        XjrTipsMessage xjrTipsMessage = BeanUtil.toBean(dto, XjrTipsMessage.class);
+        boolean isSuccess = xjrTipsMessageService.save(xjrTipsMessage);
+        return RT.ok(isSuccess);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "修改系统提示信息设置")
+    @SaCheckPermission("xjrtipsmessage:edit")
+    public RT<Boolean> update(@Valid @RequestBody UpdateXjrTipsMessageDto dto){
+        long count = xjrTipsMessageService.count(
+                new QueryWrapper<XjrTipsMessage>().lambda()
+                        .eq(XjrTipsMessage::getCode, dto.getCode())
+                        .ne(XjrTipsMessage::getId, dto.getId())
+        );
+        if(count > 0){
+            return RT.error("code已存在!请保证code唯一!");
+        }
+        XjrTipsMessage xjrTipsMessage = BeanUtil.toBean(dto, XjrTipsMessage.class);
+        return RT.ok(xjrTipsMessageService.updateById(xjrTipsMessage));
+
+    }
+
+    @DeleteMapping
+    @ApiOperation(value = "删除系统提示信息设置")
+    @SaCheckPermission("xjrtipsmessage:delete")
+    public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
+        return RT.ok(xjrTipsMessageService.removeBatchByIds(ids));
+
+    }
+
+}

+ 32 - 0
src/main/java/com/xjrsoft/module/system/dto/AddXjrMenuGroupDto.java

@@ -0,0 +1,32 @@
+package com.xjrsoft.module.system.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+
+/**
+* @title: 功能分类设置菜单关联表
+* @Author dzx
+* @Date: 2024-08-09
+* @Version 1.0
+*/
+@Data
+public class AddXjrMenuGroupDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 菜单id(xjr_menu)
+    */
+    @ApiModelProperty("菜单id(xjr_menu)")
+    private List<Long> xjrMenuIds;
+    /**
+    * 功能分类设置(xjr_menu_group_set)
+    */
+    @ApiModelProperty("功能分类设置(xjr_menu_group_set)")
+    private Long xjrMenuGroupSetId;
+
+}

+ 43 - 0
src/main/java/com/xjrsoft/module/system/dto/AddXjrMenuGroupSetDto.java

@@ -0,0 +1,43 @@
+package com.xjrsoft.module.system.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+
+
+/**
+* @title: 功能分类设置
+* @Author dzx
+* @Date: 2024-08-09
+* @Version 1.0
+*/
+@Data
+public class AddXjrMenuGroupSetDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 功能分类名称
+    */
+    @ApiModelProperty("功能分类名称")
+    private String name;
+    /**
+    * 分组代码(xjr_dictionary_item[xjr_menu_group])
+    */
+    @ApiModelProperty("分组代码(xjr_dictionary_item[xjr_menu_group])")
+    private String code;
+    /**
+    * 使用范围(1:全部学生 2:白名单学生)
+    */
+    @ApiModelProperty("使用范围(1:全部学生 2:白名单学生)")
+    private Integer useRange;
+
+    /**
+    * xjrMenuGroup
+    */
+    @ApiModelProperty("xjrMenuGroup子表")
+    private List<AddXjrMenuGroupDto> xjrMenuGroupList;
+}

+ 39 - 0
src/main/java/com/xjrsoft/module/system/dto/AddXjrTipsMessageDto.java

@@ -0,0 +1,39 @@
+package com.xjrsoft.module.system.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+
+
+/**
+* @title: 系统提示信息设置
+* @Author dzx
+* @Date: 2024-08-12
+* @Version 1.0
+*/
+@Data
+public class AddXjrTipsMessageDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 消息分组
+    */
+    @ApiModelProperty("消息分组")
+    private String groupName;
+    /**
+    * 唯一code
+    */
+    @ApiModelProperty("唯一code")
+    private String code;
+    /**
+    * 消息内容
+    */
+    @ApiModelProperty("消息内容")
+    private String content;
+
+    @ApiModelProperty("提示名称")
+    private String name;
+}

+ 24 - 0
src/main/java/com/xjrsoft/module/system/dto/UpdateXjrMenuGroupSetDto.java

@@ -0,0 +1,24 @@
+package com.xjrsoft.module.system.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+
+/**
+* @title: 功能分类设置
+* @Author dzx
+* @Date: 2024-08-09
+* @Version 1.0
+*/
+@Data
+public class UpdateXjrMenuGroupSetDto extends AddXjrMenuGroupSetDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long id;
+}

+ 24 - 0
src/main/java/com/xjrsoft/module/system/dto/UpdateXjrTipsMessageDto.java

@@ -0,0 +1,24 @@
+package com.xjrsoft.module.system.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+
+/**
+* @title: 系统提示信息设置
+* @Author dzx
+* @Date: 2024-08-12
+* @Version 1.0
+*/
+@Data
+public class UpdateXjrTipsMessageDto extends AddXjrTipsMessageDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long id;
+}

+ 21 - 0
src/main/java/com/xjrsoft/module/system/dto/XjrMenuGroupMenuListDto.java

@@ -0,0 +1,21 @@
+package com.xjrsoft.module.system.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+
+/**
+* @title: 功能分类设置分页查询入参
+* @Author dzx
+* @Date: 2024-08-09
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class XjrMenuGroupMenuListDto extends PageInput {
+
+    @ApiModelProperty("功能分类设置id")
+    private Long xjrMenuGroupSetId;
+}

+ 19 - 0
src/main/java/com/xjrsoft/module/system/dto/XjrMenuGroupSetPageDto.java

@@ -0,0 +1,19 @@
+package com.xjrsoft.module.system.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+
+/**
+* @title: 功能分类设置分页查询入参
+* @Author dzx
+* @Date: 2024-08-09
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class XjrMenuGroupSetPageDto extends PageInput {
+
+
+}

+ 21 - 0
src/main/java/com/xjrsoft/module/system/dto/XjrTipsMessagePageDto.java

@@ -0,0 +1,21 @@
+package com.xjrsoft.module.system.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+
+/**
+* @title: 系统提示信息设置分页查询入参
+* @Author dzx
+* @Date: 2024-08-12
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class XjrTipsMessagePageDto extends PageInput {
+
+    @ApiModelProperty("分组名称(精准查询)")
+    private String groupName;
+}

+ 84 - 0
src/main/java/com/xjrsoft/module/system/entity/XjrMenuGroup.java

@@ -0,0 +1,84 @@
+package com.xjrsoft.module.system.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+* @title: 功能分类设置菜单关联表
+* @Author dzx
+* @Date: 2024-08-09
+* @Version 1.0
+*/
+@Data
+@TableName("xjr_menu_group")
+@ApiModel(value = "xjr_menu_group", description = "功能分类设置菜单关联表")
+public class XjrMenuGroup implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableId
+    private Long id;
+    /**
+    * 创建人
+    */
+    @ApiModelProperty("创建人")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUserId;
+    /**
+    * 创建时间
+    */
+    @ApiModelProperty("创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createDate;
+    /**
+    * 修改人
+    */
+    @ApiModelProperty("修改人")
+    @TableField(fill = FieldFill.UPDATE)
+    private Long modifyUserId;
+    /**
+    * 修改日期
+    */
+    @ApiModelProperty("修改日期")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date modifyDate;
+    /**
+    * 删除标记
+    */
+    @ApiModelProperty("删除标记")
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer deleteMark;
+    /**
+    * 有效标记
+    */
+    @ApiModelProperty("有效标记")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer enabledMark;
+    /**
+    * 菜单id(xjr_menu)
+    */
+    @ApiModelProperty("菜单id(xjr_menu)")
+    private Long xjrMenuId;
+    /**
+    * 功能分类设置(xjr_menu_group_set)
+    */
+    @ApiModelProperty("功能分类设置(xjr_menu_group_set)")
+    private Long xjrMenuGroupSetId;
+
+
+}

+ 98 - 0
src/main/java/com/xjrsoft/module/system/entity/XjrMenuGroupSet.java

@@ -0,0 +1,98 @@
+package com.xjrsoft.module.system.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.github.yulichang.annotation.EntityMapping;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+* @title: 功能分类设置
+* @Author dzx
+* @Date: 2024-08-09
+* @Version 1.0
+*/
+@Data
+@TableName("xjr_menu_group_set")
+@ApiModel(value = "xjr_menu_group_set", description = "功能分类设置")
+public class XjrMenuGroupSet implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableId
+    private Long id;
+    /**
+    * 创建人
+    */
+    @ApiModelProperty("创建人")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUserId;
+    /**
+    * 创建时间
+    */
+    @ApiModelProperty("创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createDate;
+    /**
+    * 修改人
+    */
+    @ApiModelProperty("修改人")
+    @TableField(fill = FieldFill.UPDATE)
+    private Long modifyUserId;
+    /**
+    * 修改日期
+    */
+    @ApiModelProperty("修改日期")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date modifyDate;
+    /**
+    * 删除标记
+    */
+    @ApiModelProperty("删除标记")
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer deleteMark;
+    /**
+    * 有效标记
+    */
+    @ApiModelProperty("有效标记")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer enabledMark;
+    /**
+    * 功能分类名称
+    */
+    @ApiModelProperty("功能分类名称")
+    private String name;
+    /**
+    * 分组代码(xjr_dictionary_item[xjr_menu_group])
+    */
+    @ApiModelProperty("分组代码(xjr_dictionary_item[xjr_menu_group])")
+    private String code;
+    /**
+    * 使用范围(1:全部学生 2:白名单学生)
+    */
+    @ApiModelProperty("使用范围(1:全部学生 2:白名单学生)")
+    private Integer useRange;
+
+    /**
+    * xjrMenuGroup
+    */
+    @ApiModelProperty("xjrMenuGroup子表")
+    @TableField(exist = false)
+    @EntityMapping(thisField = "id", joinField = "xjrMenuGroupSetId")
+    private List<XjrMenuGroup> xjrMenuGroupList;
+
+}

+ 90 - 0
src/main/java/com/xjrsoft/module/system/entity/XjrTipsMessage.java

@@ -0,0 +1,90 @@
+package com.xjrsoft.module.system.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+* @title: 系统提示信息设置
+* @Author dzx
+* @Date: 2024-08-12
+* @Version 1.0
+*/
+@Data
+@TableName("xjr_tips_message")
+@ApiModel(value = "xjr_tips_message", description = "系统提示信息设置")
+public class XjrTipsMessage implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableId
+    private Long id;
+    /**
+    * 创建人
+    */
+    @ApiModelProperty("创建人")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUserId;
+    /**
+    * 创建时间
+    */
+    @ApiModelProperty("创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createDate;
+    /**
+    * 修改人
+    */
+    @ApiModelProperty("修改人")
+    @TableField(fill = FieldFill.UPDATE)
+    private Long modifyUserId;
+    /**
+    * 修改日期
+    */
+    @ApiModelProperty("修改日期")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date modifyDate;
+    /**
+    * 删除标记
+    */
+    @ApiModelProperty("删除标记")
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer deleteMark;
+    /**
+    * 有效标记
+    */
+    @ApiModelProperty("有效标记")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer enabledMark;
+    /**
+    * 消息分组
+    */
+    @ApiModelProperty("消息分组")
+    private String groupName;
+    /**
+    * 唯一code
+    */
+    @ApiModelProperty("唯一code")
+    private String code;
+    /**
+    * 消息内容
+    */
+    @ApiModelProperty("消息内容")
+    private String content;
+
+    @ApiModelProperty("提示名称")
+    private String name;
+}

+ 22 - 0
src/main/java/com/xjrsoft/module/system/mapper/XjrMenuGroupMapper.java

@@ -0,0 +1,22 @@
+package com.xjrsoft.module.system.mapper;
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.system.dto.XjrMenuGroupMenuListDto;
+import com.xjrsoft.module.system.entity.XjrMenuGroup;
+import com.xjrsoft.module.system.vo.XjrMenuGroupMenuListVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+* @title: 功能分类设置菜单关联表
+* @Author dzx
+* @Date: 2024-08-09
+* @Version 1.0
+*/
+@Mapper
+public interface XjrMenuGroupMapper extends MPJBaseMapper<XjrMenuGroup> {
+
+    List<XjrMenuGroupMenuListVo> getMenuList(@Param("dto")XjrMenuGroupMenuListDto dto);
+}

+ 16 - 0
src/main/java/com/xjrsoft/module/system/mapper/XjrMenuGroupSetMapper.java

@@ -0,0 +1,16 @@
+package com.xjrsoft.module.system.mapper;
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.system.entity.XjrMenuGroupSet;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @title: 功能分类设置
+* @Author dzx
+* @Date: 2024-08-09
+* @Version 1.0
+*/
+@Mapper
+public interface XjrMenuGroupSetMapper extends MPJBaseMapper<XjrMenuGroupSet> {
+
+}

+ 16 - 0
src/main/java/com/xjrsoft/module/system/mapper/XjrTipsMessageMapper.java

@@ -0,0 +1,16 @@
+package com.xjrsoft.module.system.mapper;
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.system.entity.XjrTipsMessage;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @title: 系统提示信息设置
+* @Author dzx
+* @Date: 2024-08-12
+* @Version 1.0
+*/
+@Mapper
+public interface XjrTipsMessageMapper extends MPJBaseMapper<XjrTipsMessage> {
+
+}

+ 49 - 0
src/main/java/com/xjrsoft/module/system/service/IXjrMenuGroupSetService.java

@@ -0,0 +1,49 @@
+package com.xjrsoft.module.system.service;
+
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.system.dto.AddXjrMenuGroupDto;
+import com.xjrsoft.module.system.dto.XjrMenuGroupMenuListDto;
+import com.xjrsoft.module.system.entity.XjrMenuGroup;
+import com.xjrsoft.module.system.entity.XjrMenuGroupSet;
+import com.xjrsoft.module.system.vo.XjrMenuGroupMenuListVo;
+
+import java.util.List;
+
+/**
+* @title: 功能分类设置
+* @Author dzx
+* @Date: 2024-08-09
+* @Version 1.0
+*/
+
+public interface IXjrMenuGroupSetService extends MPJBaseService<XjrMenuGroupSet> {
+    /**
+    * 新增
+    *
+    * @param xjrMenuGroupSet
+    * @return
+    */
+    Boolean add(XjrMenuGroupSet xjrMenuGroupSet);
+
+    /**
+    * 更新
+    *
+    * @param xjrMenuGroupSet
+    * @return
+    */
+    Boolean update(XjrMenuGroupSet xjrMenuGroupSet);
+
+    /**
+    * 删除
+    *
+    * @param ids
+    * @return
+    */
+    Boolean delete(List<Long> ids);
+
+    List<XjrMenuGroupMenuListVo> getMenuList(XjrMenuGroupMenuListDto dto);
+
+    Boolean setMenu(AddXjrMenuGroupDto dto);
+
+    List<XjrMenuGroup> getXjrMenuGroupMenu();
+}

+ 14 - 0
src/main/java/com/xjrsoft/module/system/service/IXjrTipsMessageService.java

@@ -0,0 +1,14 @@
+package com.xjrsoft.module.system.service;
+
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.system.entity.XjrTipsMessage;
+
+/**
+* @title: 系统提示信息设置
+* @Author dzx
+* @Date: 2024-08-12
+* @Version 1.0
+*/
+
+public interface IXjrTipsMessageService extends MPJBaseService<XjrTipsMessage> {
+}

部分文件因为文件数量过多而无法显示