Browse Source

Merge branch 'pre'

dzx 1 year ago
parent
commit
6a7af2e54a
100 changed files with 5046 additions and 85 deletions
  1. 180 0
      src/main/java/com/xjrsoft/module/activity/controller/ActivityEnrollController.java
  2. 243 0
      src/main/java/com/xjrsoft/module/activity/controller/ActivityInfoController.java
  3. 28 0
      src/main/java/com/xjrsoft/module/activity/dto/ActivityEnrollPageDto.java
  4. 28 0
      src/main/java/com/xjrsoft/module/activity/dto/ActivityInfoPageDto.java
  5. 32 0
      src/main/java/com/xjrsoft/module/activity/dto/AddActivityEnrollDto.java
  6. 42 0
      src/main/java/com/xjrsoft/module/activity/dto/AddActivityEnrollRangeDto.java
  7. 99 0
      src/main/java/com/xjrsoft/module/activity/dto/AddActivityInfoDto.java
  8. 30 0
      src/main/java/com/xjrsoft/module/activity/dto/ChangeStatusDto.java
  9. 24 0
      src/main/java/com/xjrsoft/module/activity/dto/UpdateActivityInfoDto.java
  10. 26 0
      src/main/java/com/xjrsoft/module/activity/dto/UserEnrollDto.java
  11. 89 0
      src/main/java/com/xjrsoft/module/activity/entity/ActivityEnroll.java
  12. 94 0
      src/main/java/com/xjrsoft/module/activity/entity/ActivityEnrollRange.java
  13. 165 0
      src/main/java/com/xjrsoft/module/activity/entity/ActivityInfo.java
  14. 25 0
      src/main/java/com/xjrsoft/module/activity/mapper/ActivityEnrollMapper.java
  15. 16 0
      src/main/java/com/xjrsoft/module/activity/mapper/ActivityEnrollRangeMapper.java
  16. 23 0
      src/main/java/com/xjrsoft/module/activity/mapper/ActivityInfoMapper.java
  17. 47 0
      src/main/java/com/xjrsoft/module/activity/service/IActivityEnrollService.java
  18. 47 0
      src/main/java/com/xjrsoft/module/activity/service/IActivityInfoService.java
  19. 132 0
      src/main/java/com/xjrsoft/module/activity/service/impl/ActivityEnrollServiceImpl.java
  20. 139 0
      src/main/java/com/xjrsoft/module/activity/service/impl/ActivityInfoServiceImpl.java
  21. 47 0
      src/main/java/com/xjrsoft/module/activity/vo/ActivityEnrollExcelVo.java
  22. 63 0
      src/main/java/com/xjrsoft/module/activity/vo/ActivityEnrollPageVo.java
  23. 47 0
      src/main/java/com/xjrsoft/module/activity/vo/ActivityEnrollRangeVo.java
  24. 40 0
      src/main/java/com/xjrsoft/module/activity/vo/ActivityEnrollVo.java
  25. 117 0
      src/main/java/com/xjrsoft/module/activity/vo/ActivityInfoPageVo.java
  26. 127 0
      src/main/java/com/xjrsoft/module/activity/vo/ActivityInfoVo.java
  27. 1 1
      src/main/java/com/xjrsoft/module/attendance/controller/AttendanceMessageSetController.java
  28. 11 0
      src/main/java/com/xjrsoft/module/banding/controller/BandingTaskClassController.java
  29. 30 0
      src/main/java/com/xjrsoft/module/banding/dto/ChangeClassStatusDto.java
  30. 2 0
      src/main/java/com/xjrsoft/module/banding/entity/BandingTaskClass.java
  31. 1 0
      src/main/java/com/xjrsoft/module/banding/service/impl/BandingTaskClassServiceImpl.java
  32. 10 0
      src/main/java/com/xjrsoft/module/banding/service/impl/BandingTaskServiceImpl.java
  33. 3 0
      src/main/java/com/xjrsoft/module/banding/vo/BandingTaskClassPageVo.java
  34. 27 4
      src/main/java/com/xjrsoft/module/base/controller/WhitelistManagementController.java
  35. 6 0
      src/main/java/com/xjrsoft/module/base/entity/BaseClassroom.java
  36. 2 1
      src/main/java/com/xjrsoft/module/base/service/IWhitelistManagementService.java
  37. 4 0
      src/main/java/com/xjrsoft/module/base/service/impl/BaseClassServiceImpl.java
  38. 28 24
      src/main/java/com/xjrsoft/module/base/service/impl/WhitelistManagementServiceImpl.java
  39. 2 1
      src/main/java/com/xjrsoft/module/form/service/impl/FormExecuteServiceImpl.java
  40. 5 1
      src/main/java/com/xjrsoft/module/form/utils/FormDataTransUtil.java
  41. 49 0
      src/main/java/com/xjrsoft/module/job/ExamScoreDataTask.java
  42. 4 0
      src/main/java/com/xjrsoft/module/organization/controller/UserController.java
  43. 3 0
      src/main/java/com/xjrsoft/module/organization/dto/UserPageDto.java
  44. 2 0
      src/main/java/com/xjrsoft/module/organization/vo/UserPageVo.java
  45. 10 10
      src/main/java/com/xjrsoft/module/student/controller/BaseStudentScholarshipApplicantController.java
  46. 23 0
      src/main/java/com/xjrsoft/module/student/controller/StudentManagerController.java
  47. 11 2
      src/main/java/com/xjrsoft/module/student/dto/BaseStudentUserPageDto.java
  48. 151 0
      src/main/java/com/xjrsoft/module/student/entity/BaseMajor.java
  49. 6 0
      src/main/java/com/xjrsoft/module/student/entity/BaseStudentScholarshipCategory.java
  50. 16 0
      src/main/java/com/xjrsoft/module/student/mapper/BaseMajorMapper.java
  51. 14 0
      src/main/java/com/xjrsoft/module/student/service/IBaseMajorService.java
  52. 4 0
      src/main/java/com/xjrsoft/module/student/service/IStudentManagerService.java
  53. 19 0
      src/main/java/com/xjrsoft/module/student/service/impl/BaseMajorServiceImpl.java
  54. 6 0
      src/main/java/com/xjrsoft/module/student/service/impl/BaseNewStudentServiceImpl.java
  55. 79 17
      src/main/java/com/xjrsoft/module/student/service/impl/StudentManagerServiceImpl.java
  56. 15 2
      src/main/java/com/xjrsoft/module/student/vo/BaseClassMajorSetVo.java
  57. 32 0
      src/main/java/com/xjrsoft/module/student/vo/BaseDepMajorGradeClassStudenTreeVo.java
  58. 3 0
      src/main/java/com/xjrsoft/module/student/vo/BaseStudentScholarshipApplicantPageVo.java
  59. 2 2
      src/main/java/com/xjrsoft/module/workflow/service/impl/WorkflowExecuteServiceImpl.java
  60. 154 0
      src/main/java/com/xjrsoft/module/xycxedu/controller/ExamPlanController.java
  61. 45 0
      src/main/java/com/xjrsoft/module/xycxedu/controller/ExamSubjectScoreController.java
  62. 43 0
      src/main/java/com/xjrsoft/module/xycxedu/dto/AddExamPlanDto.java
  63. 31 0
      src/main/java/com/xjrsoft/module/xycxedu/dto/ExamPlanPageDto.java
  64. 31 0
      src/main/java/com/xjrsoft/module/xycxedu/dto/ExamStatisticsPageDto.java
  65. 27 0
      src/main/java/com/xjrsoft/module/xycxedu/dto/ExamSubjectScoreDto.java
  66. 32 0
      src/main/java/com/xjrsoft/module/xycxedu/dto/UpdateExamPlanDto.java
  67. 93 0
      src/main/java/com/xjrsoft/module/xycxedu/entity/ExamPlan.java
  68. 97 0
      src/main/java/com/xjrsoft/module/xycxedu/entity/ExamSubjectScore.java
  69. 71 0
      src/main/java/com/xjrsoft/module/xycxedu/entity/XycxeduExamList.java
  70. 17 0
      src/main/java/com/xjrsoft/module/xycxedu/mapper/ExamPlanMapper.java
  71. 27 0
      src/main/java/com/xjrsoft/module/xycxedu/mapper/ExamSubjectScoreMappper.java
  72. 16 0
      src/main/java/com/xjrsoft/module/xycxedu/mapper/XycxeduExamListMappper.java
  73. 17 0
      src/main/java/com/xjrsoft/module/xycxedu/service/IExamPlanService.java
  74. 28 0
      src/main/java/com/xjrsoft/module/xycxedu/service/IExamSubjectScoreService.java
  75. 15 0
      src/main/java/com/xjrsoft/module/xycxedu/service/IXycxeduExamListService.java
  76. 25 0
      src/main/java/com/xjrsoft/module/xycxedu/service/impl/ExamPlanServiceImpl.java
  77. 38 0
      src/main/java/com/xjrsoft/module/xycxedu/service/impl/ExamSubjectScoreServiceImpl.java
  78. 19 0
      src/main/java/com/xjrsoft/module/xycxedu/service/impl/XycxeduExamListServiceImpl.java
  79. 66 0
      src/main/java/com/xjrsoft/module/xycxedu/util/ApiUtil.java
  80. 129 0
      src/main/java/com/xjrsoft/module/xycxedu/util/DataUtil.java
  81. 26 0
      src/main/java/com/xjrsoft/module/xycxedu/vo/ExamPlanListVo.java
  82. 103 0
      src/main/java/com/xjrsoft/module/xycxedu/vo/ExamPlanPageVo.java
  83. 44 0
      src/main/java/com/xjrsoft/module/xycxedu/vo/ExamPlanVo.java
  84. 41 0
      src/main/java/com/xjrsoft/module/xycxedu/vo/ExamStatisticsPageVo.java
  85. 36 0
      src/main/java/com/xjrsoft/module/xycxedu/vo/ExamSubjectScorePageVo.java
  86. 27 0
      src/main/java/com/xjrsoft/module/xycxedu/vo/XycxeduExamListVo.java
  87. 30 0
      src/main/resources/mapper/activity/ActivityEnrollMapper.xml
  88. 39 0
      src/main/resources/mapper/activity/ActivityInfoMapper.xml
  89. 2 2
      src/main/resources/mapper/banding/BandingTaskClassMapper.xml
  90. 14 2
      src/main/resources/mapper/student/BaseStudentMapper.xml
  91. 42 0
      src/main/resources/mapper/xycxedu/ExamSubjectScoreMappper.xml
  92. 316 0
      src/main/resources/sqlScript/20240627_sql.sql
  93. 7 5
      src/main/resources/sqlScript/20240708_sql.sql
  94. 12 11
      src/main/resources/sqlScript/20240711_sql.sql
  95. 182 0
      src/main/resources/sqlScript/20240717_sql.sql
  96. 363 0
      src/main/resources/sqlScript/20240718_sql.sql
  97. 42 0
      src/test/java/com/xjrsoft/module/job/ExamScoreDataTaskTest.java
  98. 67 0
      src/test/java/com/xjrsoft/module/workflow/service/impl/WorkflowExecuteServiceImplTest.java
  99. 33 0
      src/test/java/com/xjrsoft/module/xycxedu/util/ApiUtilTest.java
  100. 68 0
      src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java

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

@@ -0,0 +1,180 @@
+package com.xjrsoft.module.activity.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.StrUtil;
+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.xjrsoft.common.model.result.RT;
+import com.xjrsoft.common.page.ConventPage;
+import com.xjrsoft.common.page.PageOutput;
+import com.xjrsoft.module.activity.dto.ActivityEnrollPageDto;
+import com.xjrsoft.module.activity.dto.AddActivityEnrollDto;
+import com.xjrsoft.module.activity.dto.ChangeStatusDto;
+import com.xjrsoft.module.activity.dto.UpdateActivityInfoDto;
+import com.xjrsoft.module.activity.dto.UserEnrollDto;
+import com.xjrsoft.module.activity.entity.ActivityEnroll;
+import com.xjrsoft.module.activity.service.IActivityEnrollService;
+import com.xjrsoft.module.activity.vo.ActivityEnrollExcelVo;
+import com.xjrsoft.module.activity.vo.ActivityEnrollPageVo;
+import com.xjrsoft.module.banding.vo.BandingTaskClassExcelVo;
+import com.xjrsoft.module.concat.service.IXjrUserService;
+import com.xjrsoft.module.teacher.entity.XjrUser;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.http.ResponseEntity;
+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.RestController;
+
+import javax.validation.Valid;
+import java.io.ByteArrayOutputStream;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+* @title: 活动信息
+* @Author dzx
+* @Date: 2024-07-19
+* @Version 1.0
+*/
+@RestController
+@RequestMapping("/activity" + "/activityEnroll")
+@Api(value = "/activity"  + "/activityEnroll",tags = "活动登记代码")
+@AllArgsConstructor
+public class ActivityEnrollController {
+
+    private final IXjrUserService xjrUserService;
+    private final IActivityEnrollService activityEnrollService;
+
+
+    @GetMapping(value = "/page")
+    @ApiOperation(value="活动信息列表(分页)")
+    @SaCheckPermission("activityinfo:detail")
+    public RT<PageOutput<ActivityEnrollPageVo>> page(@Valid ActivityEnrollPageDto dto){
+
+        Page<ActivityEnrollPageVo> page = activityEnrollService.getPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
+        PageOutput<ActivityEnrollPageVo> pageOutput = ConventPage.getPageOutput(page, ActivityEnrollPageVo.class);
+        for (ActivityEnrollPageVo item : pageOutput.getList()) {
+            if(item.getStudentId() != null){
+                item.setRoleId(3L);
+            }else if(item.getTeacherId() != null){
+                item.setRoleId(2L);
+            }
+        }
+        return RT.ok(pageOutput);
+    }
+
+    @PostMapping(value = "/change-status")
+    @ApiOperation(value="修改状态")
+    @SaCheckPermission("officebuild:detail")
+    public RT<Boolean> changeStatus(@Valid @RequestBody List<ChangeStatusDto> dtoList) throws Exception {
+        List<ActivityEnroll> enrollList = new ArrayList<>();
+        for (ChangeStatusDto dto : dtoList) {
+            ActivityEnroll enroll = activityEnrollService.getById(dto.getId());
+            enroll.setStatus(dto.getStatus());
+            enrollList.add(enroll);
+        }
+
+        activityEnrollService.updateBatchById(enrollList);
+        return RT.ok(true);
+    }
+
+
+    @PostMapping
+    @ApiOperation(value = "新增活动信息")
+    @SaCheckPermission("activityinfo:add")
+    public RT<Boolean> add(@Valid @RequestBody AddActivityEnrollDto dto){
+
+        boolean isSuccess = activityEnrollService.save(dto);
+        return RT.ok(isSuccess);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "修改活动信息")
+    @SaCheckPermission("activityinfo:edit")
+    public RT<Boolean> update(@Valid @RequestBody UpdateActivityInfoDto dto){
+
+        ActivityEnroll activityInfo = BeanUtil.toBean(dto, ActivityEnroll.class);
+        return RT.ok(activityEnrollService.update(activityInfo));
+
+    }
+
+    @DeleteMapping
+    @ApiOperation(value = "删除活动信息")
+    @SaCheckPermission("activityinfo:delete")
+    public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
+        return RT.ok(activityEnrollService.delete(ids));
+    }
+
+
+    @PostMapping("/export-query")
+    @ApiOperation(value = "导出列表")
+    public ResponseEntity<byte[]> exportData(@Valid @RequestBody ActivityEnrollPageDto dto) {
+        List<ActivityEnrollPageVo> listVos = activityEnrollService.getList(dto);
+        List<ActivityEnrollExcelVo> list = new ArrayList<>();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
+        for (ActivityEnrollPageVo listVo : listVos) {
+            list.add(new ActivityEnrollExcelVo(){{
+                setName(listVo.getName());
+                setMobile(listVo.getMobile());
+                if(listVo.getRoleId() == 2L){
+                    setRoleType("教师");
+                }else if(listVo.getRoleId() == 3L){
+                    setRoleType("学生");
+                }
+                if(listVo.getStatus() == 0){
+                    setStatus("待确认");
+                }else if(listVo.getStatus() == 1){
+                    setStatus("未参与");
+                }else if(listVo.getStatus() == 2){
+                    setStatus("已参与");
+                }
+                setUserName(listVo.getUserName());
+                setCreateDate(sdf.format(listVo.getCreateDate()));
+            }});
+        }
+
+        ByteArrayOutputStream bot = new ByteArrayOutputStream();
+        EasyExcel.write(bot, BandingTaskClassExcelVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(list);
+
+        return RT.fileStream(bot.toByteArray(), "banding" + ExcelTypeEnum.XLSX.getValue());
+    }
+
+    @PostMapping(value = "/enroll")
+    @ApiOperation(value="报名")
+    @SaCheckPermission("activityinfo:detail")
+    public RT<Boolean> enroll(@Valid UserEnrollDto dto){
+        List<ActivityEnroll> enrollList = activityEnrollService.list(
+                new QueryWrapper<ActivityEnroll>().lambda()
+                        .eq(ActivityEnroll::getUserId, StpUtil.getLoginIdAsLong())
+                        .eq(ActivityEnroll::getActivityInfoId, dto.getActivityInfoId())
+        );
+        if(!enrollList.isEmpty()){
+            return RT.error("已报名,无需重复报名");
+        }
+        ActivityEnroll activityEnroll = new ActivityEnroll() {{
+            setUserId(StpUtil.getLoginIdAsLong());
+            setActivityInfoId(dto.getActivityInfoId());
+        }};
+        boolean save = activityEnrollService.save(activityEnroll);
+
+        XjrUser xjrUser = xjrUserService.getById(StpUtil.getLoginIdAsLong());
+        if(StrUtil.isNotEmpty(dto.getMobile()) && !dto.getMobile().equals(xjrUser.getMobile())){
+            xjrUser.setMobile(dto.getMobile());
+            xjrUserService.updateById(xjrUser);
+        }
+
+        return RT.ok(save);
+    }
+
+}

+ 243 - 0
src/main/java/com/xjrsoft/module/activity/controller/ActivityInfoController.java

@@ -0,0 +1,243 @@
+package com.xjrsoft.module.activity.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.db.Entity;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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.ActivityEnrollPageDto;
+import com.xjrsoft.module.activity.dto.ActivityInfoPageDto;
+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.ActivityInfo;
+import com.xjrsoft.module.activity.service.IActivityEnrollService;
+import com.xjrsoft.module.activity.service.IActivityInfoService;
+import com.xjrsoft.module.activity.vo.ActivityEnrollPageVo;
+import com.xjrsoft.module.activity.vo.ActivityEnrollRangeVo;
+import com.xjrsoft.module.activity.vo.ActivityInfoPageVo;
+import com.xjrsoft.module.activity.vo.ActivityInfoVo;
+import com.xjrsoft.module.base.entity.BaseClass;
+import com.xjrsoft.module.base.service.IBaseClassService;
+import com.xjrsoft.module.concat.service.IXjrUserService;
+import com.xjrsoft.module.organization.entity.Department;
+import com.xjrsoft.module.organization.service.IDepartmentService;
+import com.xjrsoft.module.system.entity.File;
+import com.xjrsoft.module.system.service.IFileService;
+import com.xjrsoft.module.teacher.entity.XjrUser;
+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.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+* @title: 活动信息
+* @Author dzx
+* @Date: 2024-07-19
+* @Version 1.0
+*/
+@RestController
+@RequestMapping("/activity" + "/activityInfo")
+@Api(value = "/activity"  + "/activityInfo",tags = "活动信息代码")
+@AllArgsConstructor
+public class ActivityInfoController {
+
+
+    private final IActivityInfoService activityInfoService;
+    private final IBaseClassService classService;
+    private final IDepartmentService departmentService;
+    private final IXjrUserService xjrUserService;
+    private final IFileService fileService;
+    private final IActivityEnrollService enrollService;
+
+
+    @GetMapping(value = "/page")
+    @ApiOperation(value="活动信息列表(分页)")
+    @SaCheckPermission("activityinfo:detail")
+    public RT<PageOutput<ActivityInfoPageVo>> page(@Valid ActivityInfoPageDto dto){
+
+        Page<ActivityInfoPageVo> page = activityInfoService.getPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
+        PageOutput<ActivityInfoPageVo> pageOutput = ConventPage.getPageOutput(page, ActivityInfoPageVo.class);
+        return RT.ok(pageOutput);
+    }
+
+    @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());
+            }
+        }
+        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());
+            }
+        }
+
+        List<ActivityEnrollRangeVo> userRelationList = new ArrayList<>();
+        for (ActivityEnroll jsonElement : activityInfo.getActivityEnrollList()) {
+            ActivityEnrollRangeVo relationDto = BeanUtil.toBean(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());
+                }
+            }
+            userRelationList.add(relationDto);
+        }
+        infoVo.setActivityEnrollRangeList(userRelationList);
+
+        ActivityEnrollPageDto dto = new ActivityEnrollPageDto();
+        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());
+
+        Set<ActivityEnrollPageVo> studentSet = enrollList.stream().filter(x -> x.getStudentId() != null).collect(Collectors.toSet());
+        infoVo.setStudentCount(studentSet.size());
+
+        Set<ActivityEnrollPageVo> suretSet = enrollList.stream().filter(x -> (x.getStatus() == 1 || x.getStatus() == 2)).collect(Collectors.toSet());
+        infoVo.setSureCount(suretSet.size());
+
+        Set<ActivityEnrollPageVo> notSuretSet = enrollList.stream().filter(x -> x.getStatus() == 0).collect(Collectors.toSet());
+        infoVo.setNotSureCount(notSuretSet.size());
+        return RT.ok(infoVo);
+    }
+
+    @PostMapping(value = "/change-status")
+    @ApiOperation(value="修改状态")
+    @SaCheckPermission("officebuild:detail")
+    public RT<Boolean> changeStatus(@Valid @RequestBody ChangeStatusDto dto) throws Exception {
+        ActivityInfo activityInfo = activityInfoService.getById(dto.getId());
+        if(activityInfo == null){
+            throw new MyException("未能找到活动信息");
+        }
+        activityInfo.setStatus(dto.getStatus());
+        activityInfoService.updateById(activityInfo);
+        return RT.ok(true);
+    }
+
+
+    @PostMapping
+    @ApiOperation(value = "新增活动信息")
+    @SaCheckPermission("activityinfo:add")
+    public RT<Boolean> add(@Valid @RequestBody AddActivityInfoDto dto){
+
+        boolean isSuccess = activityInfoService.add(dto);
+        return RT.ok(isSuccess);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "修改活动信息")
+    @SaCheckPermission("activityinfo:edit")
+    public RT<Boolean> update(@Valid @RequestBody UpdateActivityInfoDto dto){
+
+        ActivityInfo activityInfo = BeanUtil.toBean(dto, ActivityInfo.class);
+        return RT.ok(activityInfoService.update(activityInfo));
+
+    }
+
+    @DeleteMapping
+    @ApiOperation(value = "删除活动信息")
+    @SaCheckPermission("activityinfo:delete")
+    public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
+        return RT.ok(activityInfoService.delete(ids));
+    }
+
+
+    @GetMapping(value = "/effective-list")
+    @ApiOperation(value="移动端活动信息列表(分页)")
+    @SaCheckPermission("activityinfo:detail")
+    public RT<PageOutput<ActivityInfoPageVo>> mobilePage(@Valid ActivityInfoPageDto dto){
+        dto.setIsEffective(1);
+        Page<ActivityInfoPageVo> page = activityInfoService.getPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
+
+        List<ActivityEnroll> enrollList = enrollService.list(
+                new QueryWrapper<ActivityEnroll>().lambda()
+                        .eq(ActivityEnroll::getUserId, StpUtil.getLoginIdAsLong())
+        );
+        Set<Long> collect = enrollList.stream().map(ActivityEnroll::getActivityInfoId).collect(Collectors.toSet());
+
+        for (ActivityInfoPageVo record : page.getRecords()) {
+            record.setIsEnroll(0);
+            if(collect.contains(Long.parseLong(record.getId()))){
+                record.setIsEnroll(1);
+            }
+            if(record.getCoverFileId() != null){
+                File file = fileService.getOne(new QueryWrapper<File>().lambda().eq(File::getFolderId, record.getCoverFileId()));
+                if(file != null){
+                    record.setCoverFileUrl(file.getFileUrl());
+                }
+            }
+        }
+
+        PageOutput<ActivityInfoPageVo> pageOutput = ConventPage.getPageOutput(page, ActivityInfoPageVo.class);
+        return RT.ok(pageOutput);
+    }
+
+    @GetMapping(value = "/my-enroll-list")
+    @ApiOperation(value="我的报名记录(分页)")
+    @SaCheckPermission("activityinfo:detail")
+    public RT<PageOutput<ActivityInfoPageVo>> myEnrollList(@Valid ActivityInfoPageDto dto){
+        dto.setLoginUserId(StpUtil.getLoginIdAsLong());
+        Page<ActivityInfoPageVo> page = activityInfoService.getMyPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
+        for (ActivityInfoPageVo record : page.getRecords()) {
+            if(record.getCoverFileId() != null){
+                File file = fileService.getOne(new QueryWrapper<File>().lambda().eq(File::getFolderId, record.getCoverFileId()));
+                if(file != null){
+                    record.setCoverFileUrl(file.getFileUrl());
+                }
+            }
+        }
+
+        PageOutput<ActivityInfoPageVo> pageOutput = ConventPage.getPageOutput(page, ActivityInfoPageVo.class);
+        return RT.ok(pageOutput);
+    }
+}

+ 28 - 0
src/main/java/com/xjrsoft/module/activity/dto/ActivityEnrollPageDto.java

@@ -0,0 +1,28 @@
+package com.xjrsoft.module.activity.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+
+/**
+* @title: 活动信息分页查询入参
+* @Author dzx
+* @Date: 2024-07-19
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class ActivityEnrollPageDto extends PageInput {
+
+    @ApiModelProperty("活动id")
+    private Long activityInfoId;
+
+    @ApiModelProperty("状态(0:待确认 1:未参与 2:已参与)")
+    private Integer status;
+
+    @ApiModelProperty("登录人id")
+    private Long loginUserId;
+
+}

+ 28 - 0
src/main/java/com/xjrsoft/module/activity/dto/ActivityInfoPageDto.java

@@ -0,0 +1,28 @@
+package com.xjrsoft.module.activity.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+
+/**
+* @title: 活动信息分页查询入参
+* @Author dzx
+* @Date: 2024-07-19
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class ActivityInfoPageDto extends PageInput {
+
+    @ApiModelProperty("活动类别(1:校企合作活动 2:赛事活动)")
+    private Integer category;
+
+
+    @ApiModelProperty("是否有效活动(1:是 0:否)")
+    private Integer isEffective;
+
+    @ApiModelProperty("登录者id")
+    private Long loginUserId;
+}

+ 32 - 0
src/main/java/com/xjrsoft/module/activity/dto/AddActivityEnrollDto.java

@@ -0,0 +1,32 @@
+package com.xjrsoft.module.activity.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+
+/**
+* @title: 活动登记表
+* @Author dzx
+* @Date: 2024-07-19
+* @Version 1.0
+*/
+@Data
+public class AddActivityEnrollDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 活动(activity_info)
+    */
+    @ApiModelProperty("活动(activity_info)")
+    private Long activityInfoId;
+    /**
+    * 参与人(xjr_user)
+    */
+    @ApiModelProperty("参与人")
+    private List<AddActivityEnrollRangeDto> enrollRangeList;
+
+}

+ 42 - 0
src/main/java/com/xjrsoft/module/activity/dto/AddActivityEnrollRangeDto.java

@@ -0,0 +1,42 @@
+package com.xjrsoft.module.activity.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+
+
+/**
+* @title: 活动报名范围
+* @Author dzx
+* @Date: 2024-07-19
+* @Version 1.0
+*/
+@Data
+public class AddActivityEnrollRangeDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 所属班级id
+    */
+    @ApiModelProperty("所属班级id")
+    private Long classId;
+    /**
+    * 所属部门id
+    */
+    @ApiModelProperty("所属部门id")
+    private Long deptId;
+    /**
+    * 用id
+    */
+    @ApiModelProperty("用id")
+    private Long userId;
+    /**
+    * 活动(activity)
+    */
+    @ApiModelProperty("活动(activity)")
+    private Long activityInfoId;
+
+}

+ 99 - 0
src/main/java/com/xjrsoft/module/activity/dto/AddActivityInfoDto.java

@@ -0,0 +1,99 @@
+package com.xjrsoft.module.activity.dto;
+
+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-07-19
+* @Version 1.0
+*/
+@Data
+public class AddActivityInfoDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 赛事名称
+    */
+    @ApiModelProperty("赛事名称")
+    private String name;
+    /**
+    * 活动地点
+    */
+    @ApiModelProperty("活动地点")
+    private String place;
+    /**
+    * 活动开始时间
+    */
+    @ApiModelProperty("活动开始时间")
+    private Date startDate;
+    /**
+    * 活动结束时间
+    */
+    @ApiModelProperty("活动结束时间")
+    private Date endDate;
+    /**
+    * 活动类型(xjr_dictionary_detail[match_activity_type])
+    */
+    @ApiModelProperty("活动类型(xjr_dictionary_detail[match_activity_type])")
+    private String type;
+    /**
+    * 组织部门(xjr_department)
+    */
+    @ApiModelProperty("组织部门(xjr_department)")
+    private Long orgId;
+    /**
+    * 报名结束时间
+    */
+    @ApiModelProperty("报名结束时间")
+    private Date enrollEndTime;
+    /**
+    * 活动负责人
+    */
+    @ApiModelProperty("活动负责人")
+    private String dutyPerson;
+    /**
+    * 活动负责人电话
+    */
+    @ApiModelProperty("活动负责人电话")
+    private String dutyPersonMobile;
+    /**
+    * 封面图片
+    */
+    @ApiModelProperty("封面图片")
+    private String coverFileId;
+    /**
+    * 状态(0:未发布 1:报名中 2:报名结束 3:活动结束)
+    */
+    @ApiModelProperty("状态(0:未发布 1:报名中 2:报名结束 3:活动结束)")
+    private Integer status;
+    /**
+    * 活动内容
+    */
+    @ApiModelProperty("活动内容")
+    private String content;
+    /**
+    * 合作企业
+    */
+    @ApiModelProperty("合作企业(校企活动时填写)")
+    private Long enterpriseId;
+    /**
+    * 1:校企合作活动 2:赛事活动
+    */
+    @ApiModelProperty("1:校企合作活动 2:赛事活动")
+    private Integer category;
+
+    /**
+    * activityEnrollRange
+    */
+    @ApiModelProperty("activityEnrollRange子表")
+    private List<AddActivityEnrollRangeDto> activityEnrollRangeList;
+}

+ 30 - 0
src/main/java/com/xjrsoft/module/activity/dto/ChangeStatusDto.java

@@ -0,0 +1,30 @@
+package com.xjrsoft.module.activity.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+
+/**
+* @title: 活动信息
+* @Author dzx
+* @Date: 2024-07-19
+* @Version 1.0
+*/
+@Data
+public class ChangeStatusDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 赛事名称
+    */
+    @ApiModelProperty("主键编号")
+    private Long id;
+    /**
+    * 状态(0:未发布 1:报名中 2:报名结束 3:活动结束)
+    */
+    @ApiModelProperty("状态")
+    private Integer status;
+}

+ 24 - 0
src/main/java/com/xjrsoft/module/activity/dto/UpdateActivityInfoDto.java

@@ -0,0 +1,24 @@
+package com.xjrsoft.module.activity.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+
+/**
+* @title: 活动信息
+* @Author dzx
+* @Date: 2024-07-19
+* @Version 1.0
+*/
+@Data
+public class UpdateActivityInfoDto extends AddActivityInfoDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long id;
+}

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

@@ -0,0 +1,26 @@
+package com.xjrsoft.module.activity.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+
+/**
+* @title: 活动信息
+* @Author dzx
+* @Date: 2024-07-19
+* @Version 1.0
+*/
+@Data
+public class UserEnrollDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("活动id")
+    private Long activityInfoId;
+    /**
+    */
+    @ApiModelProperty("手机号")
+    private String mobile;
+}

+ 89 - 0
src/main/java/com/xjrsoft/module/activity/entity/ActivityEnroll.java

@@ -0,0 +1,89 @@
+package com.xjrsoft.module.activity.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-07-19
+* @Version 1.0
+*/
+@Data
+@TableName("activity_enroll")
+@ApiModel(value = "activity_enroll", description = "活动登记表")
+public class ActivityEnroll 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;
+    /**
+    * 活动(activity_info)
+    */
+    @ApiModelProperty("活动(activity_info)")
+    private Long activityInfoId;
+    /**
+    * 参与人(xjr_user)
+    */
+    @ApiModelProperty("参与人(xjr_user)")
+    private Long userId;
+    /**
+    * 状态(0:待确认 1:未参与 2:已参与)
+    */
+    @ApiModelProperty("状态(0:待确认 1:未参与 2:已参与)")
+    private Integer status;
+
+
+}

+ 94 - 0
src/main/java/com/xjrsoft/module/activity/entity/ActivityEnrollRange.java

@@ -0,0 +1,94 @@
+package com.xjrsoft.module.activity.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-07-19
+* @Version 1.0
+*/
+@Data
+@TableName("activity_enroll_range")
+@ApiModel(value = "activity_enroll_range", description = "活动报名范围")
+public class ActivityEnrollRange 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
+    */
+    @ApiModelProperty("所属班级id")
+    private Long classId;
+    /**
+    * 所属部门id
+    */
+    @ApiModelProperty("所属部门id")
+    private Long deptId;
+    /**
+    * 用id
+    */
+    @ApiModelProperty("用id")
+    private Long userId;
+    /**
+    * 活动(activity)
+    */
+    @ApiModelProperty("活动(activity)")
+    private Long activityInfoId;
+
+
+}

+ 165 - 0
src/main/java/com/xjrsoft/module/activity/entity/ActivityInfo.java

@@ -0,0 +1,165 @@
+package com.xjrsoft.module.activity.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-07-19
+* @Version 1.0
+*/
+@Data
+@TableName("activity_info")
+@ApiModel(value = "activity_info", description = "活动信息")
+public class ActivityInfo 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;
+    /**
+    * 活动地点
+    */
+    @ApiModelProperty("活动地点")
+    private String place;
+    /**
+    * 活动开始时间
+    */
+    @ApiModelProperty("活动开始时间")
+    private Date startDate;
+    /**
+    * 活动结束时间
+    */
+    @ApiModelProperty("活动结束时间")
+    private Date endDate;
+    /**
+    * 活动类型(xjr_dictionary_detail[match_activity_type])
+    */
+    @ApiModelProperty("活动类型(xjr_dictionary_detail[match_activity_type])")
+    private String type;
+    /**
+    * 组织部门(xjr_department)
+    */
+    @ApiModelProperty("组织部门(xjr_department)")
+    private Long orgId;
+    /**
+    * 报名结束时间
+    */
+    @ApiModelProperty("报名结束时间")
+    private Date enrollEndTime;
+    /**
+    * 活动负责人
+    */
+    @ApiModelProperty("活动负责人")
+    private String dutyPerson;
+    /**
+    * 活动负责人电话
+    */
+    @ApiModelProperty("活动负责人电话")
+    private String dutyPersonMobile;
+    /**
+    * 封面图片
+    */
+    @ApiModelProperty("封面图片")
+    private String coverFileId;
+    /**
+    * 报名范围
+    */
+    @ApiModelProperty("报名范围")
+    private String enrollRange;
+    /**
+    * 状态(0:未发布 1:报名中 2:报名结束 3:活动结束)
+    */
+    @ApiModelProperty("状态(0:未发布 1:报名中 2:报名结束 3:活动结束)")
+    private Integer status;
+    /**
+    * 活动内容
+    */
+    @ApiModelProperty("活动内容")
+    private String content;
+    /**
+    * 合作企业
+    */
+    @ApiModelProperty("合作企业")
+    private Long enterpriseId;
+    /**
+    * 1:校企合作活动 2:赛事活动
+    */
+    @ApiModelProperty("活动类别(1:校企合作活动 2:赛事活动)")
+    private Integer category;
+
+    /**
+    * activityEnrollRange
+    */
+    @ApiModelProperty("activityEnrollRange子表")
+    @TableField(exist = false)
+    @EntityMapping(thisField = "id", joinField = "activityInfoId")
+    private List<ActivityEnrollRange> activityEnrollRangeList;
+    /**
+    * activityEnroll
+    */
+    @ApiModelProperty("activityEnroll子表")
+    @TableField(exist = false)
+    @EntityMapping(thisField = "id", joinField = "activityInfoId")
+    private List<ActivityEnroll> activityEnrollList;
+
+}

+ 25 - 0
src/main/java/com/xjrsoft/module/activity/mapper/ActivityEnrollMapper.java

@@ -0,0 +1,25 @@
+package com.xjrsoft.module.activity.mapper;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.activity.dto.ActivityEnrollPageDto;
+import com.xjrsoft.module.activity.entity.ActivityEnroll;
+import com.xjrsoft.module.activity.vo.ActivityEnrollPageVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+* @title: 活动登记表
+* @Author dzx
+* @Date: 2024-07-19
+* @Version 1.0
+*/
+@Mapper
+public interface ActivityEnrollMapper extends MPJBaseMapper<ActivityEnroll> {
+
+    Page<ActivityEnrollPageVo> getPage(Page<ActivityEnrollPageVo> page, @Param("dto") ActivityEnrollPageDto dto);
+
+    List<ActivityEnrollPageVo> getList(@Param("dto") ActivityEnrollPageDto dto);
+}

+ 16 - 0
src/main/java/com/xjrsoft/module/activity/mapper/ActivityEnrollRangeMapper.java

@@ -0,0 +1,16 @@
+package com.xjrsoft.module.activity.mapper;
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.activity.entity.ActivityEnrollRange;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @title: 活动报名范围
+* @Author dzx
+* @Date: 2024-07-19
+* @Version 1.0
+*/
+@Mapper
+public interface ActivityEnrollRangeMapper extends MPJBaseMapper<ActivityEnrollRange> {
+
+}

+ 23 - 0
src/main/java/com/xjrsoft/module/activity/mapper/ActivityInfoMapper.java

@@ -0,0 +1,23 @@
+package com.xjrsoft.module.activity.mapper;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.activity.dto.ActivityInfoPageDto;
+import com.xjrsoft.module.activity.entity.ActivityInfo;
+import com.xjrsoft.module.activity.vo.ActivityInfoPageVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+* @title: 活动信息
+* @Author dzx
+* @Date: 2024-07-19
+* @Version 1.0
+*/
+@Mapper
+public interface ActivityInfoMapper extends MPJBaseMapper<ActivityInfo> {
+
+    Page<ActivityInfoPageVo> getPage(Page<ActivityInfoPageVo> page, @Param("dto") ActivityInfoPageDto dto);
+
+    Page<ActivityInfoPageVo> getMyPage(Page<ActivityInfoPageVo> page, @Param("dto") ActivityInfoPageDto dto);
+}

+ 47 - 0
src/main/java/com/xjrsoft/module/activity/service/IActivityEnrollService.java

@@ -0,0 +1,47 @@
+package com.xjrsoft.module.activity.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.activity.dto.ActivityEnrollPageDto;
+import com.xjrsoft.module.activity.dto.AddActivityEnrollDto;
+import com.xjrsoft.module.activity.entity.ActivityEnroll;
+import com.xjrsoft.module.activity.vo.ActivityEnrollPageVo;
+
+import java.util.List;
+
+/**
+* @title: 活动信息
+* @Author dzx
+* @Date: 2024-07-19
+* @Version 1.0
+*/
+
+public interface IActivityEnrollService extends MPJBaseService<ActivityEnroll> {
+    /**
+    * 新增
+    *
+    * @return
+    */
+    Boolean save(AddActivityEnrollDto dto);
+
+    /**
+    * 更新
+    *
+    * @param activityInfo
+    * @return
+    */
+    Boolean update(ActivityEnroll activityInfo);
+
+    /**
+    * 删除
+    *
+    * @param ids
+    * @return
+    */
+    Boolean delete(List<Long> ids);
+
+
+    Page<ActivityEnrollPageVo> getPage(Page<ActivityEnrollPageVo> page, ActivityEnrollPageDto dto);
+
+    List<ActivityEnrollPageVo> getList(ActivityEnrollPageDto dto);
+}

+ 47 - 0
src/main/java/com/xjrsoft/module/activity/service/IActivityInfoService.java

@@ -0,0 +1,47 @@
+package com.xjrsoft.module.activity.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.activity.dto.ActivityInfoPageDto;
+import com.xjrsoft.module.activity.dto.AddActivityInfoDto;
+import com.xjrsoft.module.activity.entity.ActivityInfo;
+import com.xjrsoft.module.activity.vo.ActivityInfoPageVo;
+
+import java.util.List;
+
+/**
+* @title: 活动信息
+* @Author dzx
+* @Date: 2024-07-19
+* @Version 1.0
+*/
+
+public interface IActivityInfoService extends MPJBaseService<ActivityInfo> {
+    /**
+    * 新增
+    *
+    * @return
+    */
+    Boolean add(AddActivityInfoDto dto);
+
+    /**
+    * 更新
+    *
+    * @param activityInfo
+    * @return
+    */
+    Boolean update(ActivityInfo activityInfo);
+
+    /**
+    * 删除
+    *
+    * @param ids
+    * @return
+    */
+    Boolean delete(List<Long> ids);
+
+
+    Page<ActivityInfoPageVo> getPage(Page<ActivityInfoPageVo> page, ActivityInfoPageDto dto);
+
+    Page<ActivityInfoPageVo> getMyPage(Page<ActivityInfoPageVo> page, ActivityInfoPageDto dto);
+}

+ 132 - 0
src/main/java/com/xjrsoft/module/activity/service/impl/ActivityEnrollServiceImpl.java

@@ -0,0 +1,132 @@
+package com.xjrsoft.module.activity.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.xjrsoft.common.enums.DeleteMark;
+import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.activity.dto.ActivityEnrollPageDto;
+import com.xjrsoft.module.activity.dto.AddActivityEnrollDto;
+import com.xjrsoft.module.activity.dto.AddActivityEnrollRangeDto;
+import com.xjrsoft.module.activity.entity.ActivityEnroll;
+import com.xjrsoft.module.activity.mapper.ActivityEnrollMapper;
+import com.xjrsoft.module.activity.service.IActivityEnrollService;
+import com.xjrsoft.module.activity.vo.ActivityEnrollPageVo;
+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.student.entity.BaseStudentSchoolRoll;
+import com.xjrsoft.module.student.service.IBaseStudentSchoolRollService;
+import com.xjrsoft.module.teacher.entity.XjrUser;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+* @title: 活动信息
+* @Author dzx
+* @Date: 2024-07-19
+* @Version 1.0
+*/
+@Service
+@AllArgsConstructor
+public class ActivityEnrollServiceImpl extends MPJBaseServiceImpl<ActivityEnrollMapper, ActivityEnroll> implements IActivityEnrollService {
+    private final IUserService userService;
+    private final IBaseStudentSchoolRollService rollService;
+    @Override
+    public Boolean save(AddActivityEnrollDto dto) {
+        List<ActivityEnroll> insertList = new ArrayList<>();
+        if(dto.getEnrollRangeList() != null){
+            List<ActivityEnroll> existList = this.list(
+                    new QueryWrapper<ActivityEnroll>().lambda()
+                            .eq(ActivityEnroll::getActivityInfoId, dto.getActivityInfoId())
+                            .eq(ActivityEnroll::getDeleteMark, DeleteMark.NODELETE.getCode())
+            );
+            Date createDate = new Date();
+            Set<Long> existUserId = existList.stream().map(ActivityEnroll::getUserId).collect(Collectors.toSet());
+            for (AddActivityEnrollRangeDto enrollRange : dto.getEnrollRangeList()) {
+                if(enrollRange.getUserId() != null){
+                    if(!existUserId.contains(enrollRange.getUserId() )){
+                        insertList.add(
+                                new ActivityEnroll(){{
+                                    setUserId(enrollRange.getUserId());
+                                    setCreateDate(createDate);
+                                    setActivityInfoId(dto.getActivityInfoId());
+                                    setStatus(0);
+                                }}
+                        );
+                    }
+                }else if(enrollRange.getDeptId() != null){
+                    List<User> userList = userService.list(
+                            new MPJLambdaWrapper<User>()
+                                    .select(XjrUser::getId)
+                                    .select(XjrUser.class, x -> VoToColumnUtil.fieldsToColumns(XjrUser.class).contains(x.getProperty()))
+                                    .innerJoin(UserDeptRelation.class, UserDeptRelation::getUserId, User::getId)
+                                    .eq(UserDeptRelation::getDeptId, enrollRange.getDeptId())
+                    );
+                    for (User user : userList) {
+                        if(!existUserId.contains(user.getId() )) {
+                            insertList.add(
+                                    new ActivityEnroll() {{
+                                        setUserId(user.getId());
+                                        setCreateDate(createDate);
+                                        setActivityInfoId(dto.getActivityInfoId());
+                                        setStatus(0);
+                                    }}
+                            );
+                        }
+                    }
+                }else if(enrollRange.getClassId() != null){
+                    List<BaseStudentSchoolRoll> userList = rollService.list(
+                            new MPJLambdaWrapper<BaseStudentSchoolRoll>()
+                                    .select(BaseStudentSchoolRoll::getId)
+                                    .select(BaseStudentSchoolRoll.class, x -> VoToColumnUtil.fieldsToColumns(BaseStudentSchoolRoll.class).contains(x.getProperty()))
+                                    .innerJoin(XjrUser.class, XjrUser::getId, BaseStudentSchoolRoll::getUserId)
+                                    .eq(BaseStudentSchoolRoll::getClassId, enrollRange.getClassId())
+                    );
+                    for (BaseStudentSchoolRoll user : userList) {
+                        if(!existUserId.contains(user.getId() )) {
+                            insertList.add(
+                                    new ActivityEnroll() {{
+                                        setUserId(user.getUserId());
+                                        setCreateDate(createDate);
+                                        setActivityInfoId(dto.getActivityInfoId());
+                                        setStatus(0);
+                                    }}
+                            );
+                        }
+                    }
+                }
+            }
+        }
+        if(!insertList.isEmpty()){
+            this.saveBatch(insertList);
+        }
+        return true;
+    }
+
+    @Override
+    public Boolean update(ActivityEnroll activityInfo) {
+        return null;
+    }
+
+    @Override
+    public Boolean delete(List<Long> ids) {
+        return null;
+    }
+
+    public Page<ActivityEnrollPageVo> getPage(Page<ActivityEnrollPageVo> page, ActivityEnrollPageDto dto) {
+        return this.baseMapper.getPage(page, dto);
+    }
+
+    @Override
+    public List<ActivityEnrollPageVo> getList(ActivityEnrollPageDto dto) {
+        return this.baseMapper.getList(dto);
+    }
+}

+ 139 - 0
src/main/java/com/xjrsoft/module/activity/service/impl/ActivityInfoServiceImpl.java

@@ -0,0 +1,139 @@
+package com.xjrsoft.module.activity.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.module.activity.dto.ActivityInfoPageDto;
+import com.xjrsoft.module.activity.dto.AddActivityInfoDto;
+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.mapper.ActivityEnrollMapper;
+import com.xjrsoft.module.activity.mapper.ActivityEnrollRangeMapper;
+import com.xjrsoft.module.activity.mapper.ActivityInfoMapper;
+import com.xjrsoft.module.activity.service.IActivityInfoService;
+import com.xjrsoft.module.activity.vo.ActivityInfoPageVo;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+* @title: 活动信息
+* @Author dzx
+* @Date: 2024-07-19
+* @Version 1.0
+*/
+@Service
+@AllArgsConstructor
+public class ActivityInfoServiceImpl extends MPJBaseServiceImpl<ActivityInfoMapper, ActivityInfo> implements IActivityInfoService {
+    private final ActivityInfoMapper activityInfoActivityInfoMapper;
+
+    private final ActivityEnrollRangeMapper activityInfoActivityEnrollRangeMapper;
+    private final ActivityEnrollMapper activityInfoActivityEnrollMapper;
+
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean add(AddActivityInfoDto dto) {
+        ActivityInfo activityInfo = BeanUtil.toBean(dto, ActivityInfo.class);
+        if(activityInfo.getActivityEnrollRangeList() != null){
+            for (ActivityEnrollRange activityEnrollRange : activityInfo.getActivityEnrollRangeList()) {
+                activityEnrollRange.setActivityInfoId(activityInfo.getId());
+                activityInfoActivityEnrollRangeMapper.insert(activityEnrollRange);
+            }
+            activityInfo.setEnrollRange(activityInfo.getActivityEnrollRangeList().toString());
+        }
+        activityInfoActivityInfoMapper.insert(activityInfo);
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean update(ActivityInfo activityInfo) {
+        activityInfoActivityInfoMapper.updateById(activityInfo);
+        //********************************* ActivityEnrollRange  增删改  开始 *******************************************/
+        {
+            // 查出所有子级的id
+            List<ActivityEnrollRange> activityEnrollRangeList = activityInfoActivityEnrollRangeMapper.selectList(Wrappers.lambdaQuery(ActivityEnrollRange.class).eq(ActivityEnrollRange::getActivityInfoId, activityInfo.getId()).select(ActivityEnrollRange::getId));
+            List<Long> activityEnrollRangeIds = activityEnrollRangeList.stream().map(ActivityEnrollRange::getId).collect(Collectors.toList());
+            //原有子表单 没有被删除的主键
+            List<Long> activityEnrollRangeOldIds = activityInfo.getActivityEnrollRangeList().stream().map(ActivityEnrollRange::getId).filter(Objects::nonNull).collect(Collectors.toList());
+            //找到需要删除的id
+            List<Long> activityEnrollRangeRemoveIds = activityEnrollRangeIds.stream().filter(item -> !activityEnrollRangeOldIds.contains(item)).collect(Collectors.toList());
+
+            for (ActivityEnrollRange activityEnrollRange : activityInfo.getActivityEnrollRangeList()) {
+                //如果不等于空则修改
+                if (activityEnrollRange.getId() != null) {
+                    activityInfoActivityEnrollRangeMapper.updateById(activityEnrollRange);
+                }
+                //如果等于空 则新增
+                else {
+                    //已经不存在的id 删除
+                    activityEnrollRange.setActivityInfoId(activityInfo.getId());
+                    activityInfoActivityEnrollRangeMapper.insert(activityEnrollRange);
+                }
+            }
+            //已经不存在的id 删除
+            if(activityEnrollRangeRemoveIds.size() > 0){
+                activityInfoActivityEnrollRangeMapper.deleteBatchIds(activityEnrollRangeRemoveIds);
+            }
+        }
+        //********************************* ActivityEnrollRange  增删改  结束 *******************************************/
+
+        //********************************* ActivityEnroll  增删改  开始 *******************************************/
+        {
+            // 查出所有子级的id
+            List<ActivityEnroll> activityEnrollList = activityInfoActivityEnrollMapper.selectList(Wrappers.lambdaQuery(ActivityEnroll.class).eq(ActivityEnroll::getActivityInfoId, activityInfo.getId()).select(ActivityEnroll::getId));
+            List<Long> activityEnrollIds = activityEnrollList.stream().map(ActivityEnroll::getId).collect(Collectors.toList());
+            //原有子表单 没有被删除的主键
+            List<Long> activityEnrollOldIds = activityInfo.getActivityEnrollList().stream().map(ActivityEnroll::getId).filter(Objects::nonNull).collect(Collectors.toList());
+            //找到需要删除的id
+            List<Long> activityEnrollRemoveIds = activityEnrollIds.stream().filter(item -> !activityEnrollOldIds.contains(item)).collect(Collectors.toList());
+
+            for (ActivityEnroll activityEnroll : activityInfo.getActivityEnrollList()) {
+                //如果不等于空则修改
+                if (activityEnroll.getId() != null) {
+                    activityInfoActivityEnrollMapper.updateById(activityEnroll);
+                }
+                //如果等于空 则新增
+                else {
+                    //已经不存在的id 删除
+                    activityEnroll.setActivityInfoId(activityInfo.getId());
+                    activityInfoActivityEnrollMapper.insert(activityEnroll);
+                }
+            }
+            //已经不存在的id 删除
+            if(activityEnrollRemoveIds.size() > 0){
+                activityInfoActivityEnrollMapper.deleteBatchIds(activityEnrollRemoveIds);
+            }
+        }
+        //********************************* ActivityEnroll  增删改  结束 *******************************************/
+
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean delete(List<Long> ids) {
+        activityInfoActivityInfoMapper.deleteBatchIds(ids);
+        activityInfoActivityEnrollRangeMapper.delete(Wrappers.lambdaQuery(ActivityEnrollRange.class).in(ActivityEnrollRange::getActivityInfoId, ids));
+        activityInfoActivityEnrollMapper.delete(Wrappers.lambdaQuery(ActivityEnroll.class).in(ActivityEnroll::getActivityInfoId, ids));
+
+        return true;
+    }
+
+    @Override
+    public Page<ActivityInfoPageVo> getPage(Page<ActivityInfoPageVo> page, ActivityInfoPageDto dto) {
+        return this.baseMapper.getPage(page, dto);
+    }
+
+    @Override
+    public Page<ActivityInfoPageVo> getMyPage(Page<ActivityInfoPageVo> page, ActivityInfoPageDto dto) {
+        return this.baseMapper.getMyPage(page, dto);
+    }
+}

+ 47 - 0
src/main/java/com/xjrsoft/module/activity/vo/ActivityEnrollExcelVo.java

@@ -0,0 +1,47 @@
+package com.xjrsoft.module.activity.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+* @title: 活动信息分页列表出参
+* @Author dzx
+* @Date: 2024-07-19
+* @Version 1.0
+*/
+@Data
+public class ActivityEnrollExcelVo {
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("用户类型")
+    @ApiModelProperty("用户类型")
+    private String roleType;
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("姓名")
+    @ApiModelProperty("姓名")
+    private String name;
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("用户名")
+    @ApiModelProperty("用户名")
+    private String userName;
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("手机号")
+    @ApiModelProperty("手机号")
+    private String mobile;
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("报名时间")
+    @ApiModelProperty("报名时间")
+    private String createDate;
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("参与状态")
+    @ApiModelProperty("参与状态")
+    private String status;
+
+}

+ 63 - 0
src/main/java/com/xjrsoft/module/activity/vo/ActivityEnrollPageVo.java

@@ -0,0 +1,63 @@
+package com.xjrsoft.module.activity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+* @title: 活动信息分页列表出参
+* @Author dzx
+* @Date: 2024-07-19
+* @Version 1.0
+*/
+@Data
+public class ActivityEnrollPageVo {
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private String id;
+    /**
+    * 赛事名称
+    */
+    @ApiModelProperty("参与人员名称")
+    private String name;
+    /**
+    * 报名时间
+    */
+    @ApiModelProperty("报名时间")
+    private Date createDate;
+    /**
+    * 活动结束时间
+    */
+    @ApiModelProperty("活动结束时间")
+    private Date endDate;
+    /**
+    * 用户名
+    */
+    @ApiModelProperty("用户名")
+    private String userName;
+
+    @ApiModelProperty("手机号")
+    private String mobile;
+
+    @ApiModelProperty("角色id")
+    private Long roleId;
+    /**
+    * 状态(0:待确认 1:未参与 2:已参与)
+    */
+    @ApiModelProperty("状态(0:待确认 1:未参与 2:已参与)")
+    private Integer status;
+
+    @ApiModelProperty("活动id")
+    private String activityInfoId;
+
+    @ApiModelProperty("教师表id")
+    private Long teacherId;
+
+    @ApiModelProperty("学生表id")
+    private Long studentId;
+
+}

+ 47 - 0
src/main/java/com/xjrsoft/module/activity/vo/ActivityEnrollRangeVo.java

@@ -0,0 +1,47 @@
+package com.xjrsoft.module.activity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+* @title: 活动报名范围表单出参
+* @Author dzx
+* @Date: 2024-07-19
+* @Version 1.0
+*/
+@Data
+public class ActivityEnrollRangeVo {
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long id;
+    /**
+    * 所属班级id
+    */
+    @ApiModelProperty("所属班级id")
+    private Long classId;
+    /**
+    * 所属部门id
+    */
+    @ApiModelProperty("所属部门id")
+    private Long deptId;
+    /**
+    * 用id
+    */
+    @ApiModelProperty("用id")
+    private Long userId;
+    /**
+    * 活动(activity)
+    */
+    @ApiModelProperty("活动(activity)")
+    private Long activityInfoId;
+
+
+    @ApiModelProperty("名称")
+    private String name;
+
+
+
+}

+ 40 - 0
src/main/java/com/xjrsoft/module/activity/vo/ActivityEnrollVo.java

@@ -0,0 +1,40 @@
+package com.xjrsoft.module.activity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+* @title: 活动登记表表单出参
+* @Author dzx
+* @Date: 2024-07-19
+* @Version 1.0
+*/
+@Data
+public class ActivityEnrollVo {
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long id;
+    /**
+    * 活动(activity_info)
+    */
+    @ApiModelProperty("活动(activity_info)")
+    private Long activityInfoId;
+    /**
+    * 参与人(xjr_user)
+    */
+    @ApiModelProperty("参与人(xjr_user)")
+    private Date userId;
+    /**
+    * 状态(0:待确认 1:未参与 2:已参与)
+    */
+    @ApiModelProperty("状态(0:待确认 1:未参与 2:已参与)")
+    private Integer STATUS;
+
+
+
+}

+ 117 - 0
src/main/java/com/xjrsoft/module/activity/vo/ActivityInfoPageVo.java

@@ -0,0 +1,117 @@
+package com.xjrsoft.module.activity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+* @title: 活动信息分页列表出参
+* @Author dzx
+* @Date: 2024-07-19
+* @Version 1.0
+*/
+@Data
+public class ActivityInfoPageVo {
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private String id;
+    /**
+    * 赛事名称
+    */
+    @ApiModelProperty("活动名称")
+    private String name;
+    /**
+    * 活动地点
+    */
+    @ApiModelProperty("活动地点")
+    private String place;
+    /**
+    * 活动开始时间
+    */
+    @ApiModelProperty("活动开始时间")
+    private Date startDate;
+    /**
+    * 活动结束时间
+    */
+    @ApiModelProperty("活动结束时间")
+    private Date endDate;
+    /**
+    * 活动类型(xjr_dictionary_detail[match_activity_type])
+    */
+    @ApiModelProperty("活动类型(xjr_dictionary_detail[match_activity_type])")
+    private String type;
+
+    @ApiModelProperty("活动类型-中文")
+    private String typeCn;
+    /**
+    * 组织部门(xjr_department)
+    */
+    @ApiModelProperty("组织部门(xjr_department)")
+    private Long orgId;
+    /**
+    * 报名结束时间
+    */
+    @ApiModelProperty("报名结束时间")
+    private Date enrollEndTime;
+    /**
+    * 活动负责人
+    */
+    @ApiModelProperty("活动负责人")
+    private String dutyPerson;
+    /**
+    * 活动负责人电话
+    */
+    @ApiModelProperty("活动负责人电话")
+    private String dutyPersonMobile;
+    /**
+    * 封面图片
+    */
+    @ApiModelProperty("封面图片")
+    private String coverFileId;
+
+    @ApiModelProperty("封面图片地址")
+    private String coverFileUrl;
+    /**
+    * 报名范围
+    */
+    @ApiModelProperty("报名范围")
+    private String enrollRange;
+    /**
+    * 状态(0:未发布 1:报名中 2:报名结束 3:活动结束)
+    */
+    @ApiModelProperty("状态(0:未发布 1:报名中 2:报名结束 3:活动结束)")
+    private Integer status;
+    /**
+    * 活动内容
+    */
+    @ApiModelProperty("活动内容")
+    private String content;
+    /**
+    * 合作企业
+    */
+    @ApiModelProperty("合作企业")
+    private Long enterpriseId;
+    /**
+    * 1:校企合作活动 2:赛事活动
+    */
+    @ApiModelProperty("1:校企合作活动 2:赛事活动")
+    private Integer category;
+
+    @ApiModelProperty("合作企业名称")
+    private String enterpriseName;
+
+    @ApiModelProperty("报名人数")
+    private Integer enrollCount;
+
+
+    @ApiModelProperty("是否已报名(1:是 0:否)")
+    private Integer isEnroll;
+
+    @ApiModelProperty("参与状态(0:待确认 1:未参与 2:已参与)")
+    private Integer enrollStatus;
+
+}

+ 127 - 0
src/main/java/com/xjrsoft/module/activity/vo/ActivityInfoVo.java

@@ -0,0 +1,127 @@
+package com.xjrsoft.module.activity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+* @title: 活动信息表单出参
+* @Author dzx
+* @Date: 2024-07-19
+* @Version 1.0
+*/
+@Data
+public class ActivityInfoVo {
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long id;
+    /**
+    * 赛事名称
+    */
+    @ApiModelProperty("赛事名称")
+    private String name;
+    /**
+    * 活动地点
+    */
+    @ApiModelProperty("活动地点")
+    private String place;
+    /**
+    * 活动开始时间
+    */
+    @ApiModelProperty("活动开始时间")
+    private Date startDate;
+    /**
+    * 活动结束时间
+    */
+    @ApiModelProperty("活动结束时间")
+    private Date endDate;
+    /**
+    * 活动类型(xjr_dictionary_detail[match_activity_type])
+    */
+    @ApiModelProperty("活动类型(xjr_dictionary_detail[match_activity_type])")
+    private String type;
+    /**
+    * 组织部门(xjr_department)
+    */
+    @ApiModelProperty("组织部门(xjr_department)")
+    private Long orgId;
+
+    @ApiModelProperty("组织部门名称")
+    private String orgName;
+    /**
+    * 报名结束时间
+    */
+    @ApiModelProperty("报名结束时间")
+    private Date enrollEndTime;
+    /**
+    * 活动负责人
+    */
+    @ApiModelProperty("活动负责人")
+    private String dutyPerson;
+    /**
+    * 活动负责人电话
+    */
+    @ApiModelProperty("活动负责人电话")
+    private String dutyPersonMobile;
+    /**
+    * 封面图片
+    */
+    @ApiModelProperty("封面图片")
+    private String coverFileId;
+    /**
+    * 报名范围
+    */
+    @ApiModelProperty("报名范围")
+    private String enrollRange;
+    /**
+    * 状态(0:未发布 1:报名中 2:报名结束 3:活动结束)
+    */
+    @ApiModelProperty("状态(0:未发布 1:报名中 2:报名结束 3:活动结束)")
+    private Integer status;
+    /**
+    * 活动内容
+    */
+    @ApiModelProperty("活动内容")
+    private String content;
+    /**
+    * 合作企业
+    */
+    @ApiModelProperty("合作企业")
+    private Long enterpriseId;
+
+    @ApiModelProperty("合作企业名称")
+    private String enterpriseName;
+    /**
+    * 1:校企合作活动 2:赛事活动
+    */
+    @ApiModelProperty("1:校企合作活动 2:赛事活动")
+    private Integer category;
+
+
+    /**
+    * activityEnrollRange
+    */
+    @ApiModelProperty("activityEnrollRange子表")
+    private List<ActivityEnrollRangeVo> activityEnrollRangeList;
+
+
+    @ApiModelProperty("报名人数")
+    private Integer enrollCount;
+
+    @ApiModelProperty("学生人数")
+    private Integer studentCount;
+
+    @ApiModelProperty("教师人数")
+    private Integer teacherCount;
+
+    @ApiModelProperty("确认参与人数")
+    private Integer sureCount;
+
+    @ApiModelProperty("未确认参与人数")
+    private Integer notSureCount;
+}

+ 1 - 1
src/main/java/com/xjrsoft/module/attendance/controller/AttendanceMessageSetController.java

@@ -128,7 +128,7 @@ public class AttendanceMessageSetController {
     public RT<Boolean> add(@Valid @RequestBody AddAttendanceMessageSetDto dto){
         AttendanceMessageSet attendanceMessageSet = BeanUtil.toBean(dto, AttendanceMessageSet.class);
         boolean isSuccess = attendanceMessageSetService.add(attendanceMessageSet);
-    return RT.ok(isSuccess);
+        return RT.ok(isSuccess);
     }
 
     @PutMapping

+ 11 - 0
src/main/java/com/xjrsoft/module/banding/controller/BandingTaskClassController.java

@@ -13,6 +13,7 @@ import com.xjrsoft.module.banding.dto.BandingTaskClassListDto;
 import com.xjrsoft.module.banding.dto.BandingTaskClassPageDto;
 import com.xjrsoft.module.banding.dto.BandingTaskClassStudentPageDto;
 import com.xjrsoft.module.banding.dto.ChangeClassDto;
+import com.xjrsoft.module.banding.dto.ChangeClassStatusDto;
 import com.xjrsoft.module.banding.dto.StudentDto;
 import com.xjrsoft.module.banding.dto.SureBandingTaskDto;
 import com.xjrsoft.module.banding.dto.UpdateBandingClassDto;
@@ -266,4 +267,14 @@ public class BandingTaskClassController {
         );
         return RT.ok(list);
     }
+
+    @PostMapping(value = "/change-status")
+    @ApiOperation(value="修改状态")
+    @SaCheckPermission("officebuild:detail")
+    public RT<Boolean> changeStatus(@Valid @RequestBody ChangeClassStatusDto dto) throws Exception {
+        BandingTaskClass taskClass = bandingTaskClassService.getById(dto.getId());
+        taskClass.setStatus(dto.getStatus());
+        bandingTaskClassService.updateById(taskClass);
+        return RT.ok(true);
+    }
 }

+ 30 - 0
src/main/java/com/xjrsoft/module/banding/dto/ChangeClassStatusDto.java

@@ -0,0 +1,30 @@
+package com.xjrsoft.module.banding.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+
+/**
+* @title: 活动信息
+* @Author dzx
+* @Date: 2024-07-19
+* @Version 1.0
+*/
+@Data
+public class ChangeClassStatusDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 赛事名称
+    */
+    @ApiModelProperty("主键编号")
+    private Long id;
+    /**
+    * 状态(0:未发布 1:报名中 2:报名结束 3:活动结束)
+    */
+    @ApiModelProperty("是否锁定(0:否 1:是)")
+    private Integer status;
+}

+ 2 - 0
src/main/java/com/xjrsoft/module/banding/entity/BandingTaskClass.java

@@ -122,4 +122,6 @@ public class BandingTaskClass implements Serializable {
     @ApiModelProperty("班级类型")
     private String classType;
 
+    @ApiModelProperty("是否锁定(0:否 1:是)")
+    private Integer status;
 }

+ 1 - 0
src/main/java/com/xjrsoft/module/banding/service/impl/BandingTaskClassServiceImpl.java

@@ -89,6 +89,7 @@ public class BandingTaskClassServiceImpl extends MPJBaseServiceImpl<BandingTaskC
         List<BandingTaskClass> classList = this.baseMapper.selectList(
                 new QueryWrapper<BandingTaskClass>().lambda()
                         .eq(BandingTaskClass::getBandingTaskId, bandingTaskId)
+                        .eq(BandingTaskClass::getStatus, 0)
         );
 
         for (BandingTaskClass bandingTaskClass : classList) {

+ 10 - 0
src/main/java/com/xjrsoft/module/banding/service/impl/BandingTaskServiceImpl.java

@@ -142,6 +142,15 @@ public class BandingTaskServiceImpl extends MPJBaseServiceImpl<BandingTaskMapper
             throw new MyException("未能查询到该任务,无法自动分班");
         }
         //1、查询需要分班的学生信息
+        List<BandingTaskClassStudent> classStudents = classStudentService.selectJoinList(BandingTaskClassStudent.class,
+                new MPJLambdaWrapper<BandingTaskClassStudent>()
+                        .select(BandingTaskClassStudent::getId)
+                        .select(BandingTaskClassStudent.class, x -> VoToColumnUtil.fieldsToColumns(BandingTaskClassStudent.class).contains(x.getProperty()))
+                        .leftJoin(BandingTaskClass.class, BandingTaskClass::getId, BandingTaskClassStudent::getBandingTaskClassId)
+                        .eq(BandingTaskClass::getStatus, 0)
+        );
+        List<Long> studentIds = classStudents.stream().map(BandingTaskClassStudent::getNewStudentId).collect(Collectors.toList());
+
         List<String> orderColumn = new ArrayList();
         orderColumn.add("score");
         List<BaseNewStudent> baseNewStudents = newStudentService.selectJoinList(BaseNewStudent.class,
@@ -152,6 +161,7 @@ public class BandingTaskServiceImpl extends MPJBaseServiceImpl<BandingTaskMapper
                         .eq(EnrollmentPlan::getGradeId, bandingTask.getGradeId())
                         .eq(EnrollmentPlan::getEnrollType, bandingTask.getEnrollType())
                         .eq(BaseNewStudent::getStatus, 0)
+                        .notIn(!studentIds.isEmpty(), BaseNewStudent::getId, studentIds)
                         .orderByDescStr(orderColumn)
         );
         //2、查询所有班级信息

+ 3 - 0
src/main/java/com/xjrsoft/module/banding/vo/BandingTaskClassPageVo.java

@@ -68,4 +68,7 @@ public class BandingTaskClassPageVo {
     @ApiModelProperty("班级类型")
     private String classType;
 
+    @ApiModelProperty("是否锁定(0:否 1:是)")
+    private Integer status;
+
 }

+ 27 - 4
src/main/java/com/xjrsoft/module/base/controller/WhitelistManagementController.java

@@ -33,7 +33,10 @@ 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.List;
+import java.util.Map;
 import java.util.concurrent.CompletableFuture;
 
 /**
@@ -122,10 +125,30 @@ public class WhitelistManagementController {
 
     @PostMapping("/import")
     @ApiOperation(value = "导入")
-    public RT<Boolean> importData(@RequestParam MultipartFile file) throws IOException {
-        List<WhitelistManagementPageVo> savedDataList = EasyExcel.read(file.getInputStream()).headRowNumber(3).head(WhitelistManagementPageVo.class).sheet().doReadSync();
-        Boolean b = whitelistManagementService.importData(savedDataList);
-        return RT.ok(b);
+    public RT<List<Map<String, String>>> importData(@RequestParam MultipartFile file) throws IOException {
+        List<Map<Integer, Object>> excelDataList = EasyExcel.read(file.getInputStream()).sheet().headRowNumber(3).doReadSync();
+        List<Map<Integer, Object>> errorList = whitelistManagementService.importData(excelDataList);
+        List<Map<String, String>> result = new ArrayList<>();
+
+        for (Map<Integer, Object> objectMap : errorList) {
+            Map<String, String> object = new LinkedHashMap<>();
+            List<String> errorMsg = new ArrayList<>();
+            if(objectMap.get(0) == null){
+                errorMsg.add("姓名未填写");
+            }
+            if(objectMap.get(1) == null){
+                errorMsg.add("身份证未填写");
+            }
+            if(objectMap.get(2) == null){
+                errorMsg.add("手机号未填写");
+            }
+            object.put("姓名", objectMap.get(0)==null?"":objectMap.get(0).toString());
+            object.put("身份证", objectMap.get(1)==null?"":objectMap.get(1).toString());
+            object.put("手机号", objectMap.get(13)==null?"":objectMap.get(13).toString());
+            object.put("错误信息", errorMsg.toString().replace("[","").replace("]", ""));
+            result.add(object);
+        }
+        return RT.ok(result);
     }
 
 }

+ 6 - 0
src/main/java/com/xjrsoft/module/base/entity/BaseClassroom.java

@@ -70,4 +70,10 @@ public class BaseClassroom implements Serializable {
 
     @ApiModelProperty("状态(1:可用 0:停用)")
     private Integer status;
+
+    @ApiModelProperty("描述")
+    private String explains;
+
+    @ApiModelProperty("座位数")
+    private Integer seatNumber;
 }

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

@@ -8,6 +8,7 @@ import com.xjrsoft.module.base.entity.WhitelistManagement;
 import com.xjrsoft.module.base.vo.WhitelistManagementPageVo;
 
 import java.util.List;
+import java.util.Map;
 
 /**
 * @title: 白名单管理
@@ -36,5 +37,5 @@ public interface IWhitelistManagementService extends MPJBaseService<WhitelistMan
      */
     void loadCaches();
 
-    Boolean importData(List<WhitelistManagementPageVo> savedDataList);
+    List<Map<Integer, Object>> importData(List<Map<Integer, Object>> savedDataList);
 }

+ 4 - 0
src/main/java/com/xjrsoft/module/base/service/impl/BaseClassServiceImpl.java

@@ -49,11 +49,15 @@ public class BaseClassServiceImpl extends MPJBaseServiceImpl<BaseClassMapper, Ba
                     .disableSubLogicDel()
                     .rightJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getClassId, BaseStudent::getId)
                     .innerJoin(BaseStudentUser.class, BaseStudentUser::getId, BaseStudentSchoolRoll::getUserId)
+                    .leftJoin(XjrUser.class, XjrUser::getId, BaseClass::getTeacherId)
                     .in(BaseStudentSchoolRoll::getUserId, studentIds)
                     .selectAs(BaseClass::getName, UserStudentVo::getClassName)
                     .selectAs(BaseStudentUser::getName, UserStudentVo::getStudentName)
                     .selectAs(BaseStudentUser::getId, UserStudentVo::getStudentId)
                     .selectAs(BaseStudentSchoolRoll::getClassId, UserStudentVo::getClassId)
+                    .selectAs(XjrUser::getName, UserStudentVo::getTeacherName)
+                    .selectAs(XjrUser::getMobile, UserStudentVo::getTeacherMobile)
+                    .selectAs(XjrUser::getId, UserStudentVo::getTeacherId)
                     .selectAs(BaseStudentUser::getAvatar, UserStudentVo::getAvatar);
 
             list = selectJoinList(UserStudentVo.class, queryWrapper);

+ 28 - 24
src/main/java/com/xjrsoft/module/base/service/impl/WhitelistManagementServiceImpl.java

@@ -110,32 +110,36 @@ public class WhitelistManagementServiceImpl extends MPJBaseServiceImpl<Whitelist
     }
 
     @Override
-    public Boolean importData(List<WhitelistManagementPageVo> savedDataList) {
+    public List<Map<Integer, Object>> importData(List<Map<Integer, Object>> savedDataList) {
+        List<Map<Integer, Object>> errorList = new ArrayList<>();
+
         List<WhitelistManagement> whitelistManagements = new ArrayList<>();
         List<String> errorLogs = new ArrayList<>();
 
-        for (WhitelistManagementPageVo vo : savedDataList) {
-            try {
-                if (this.checkExist(vo.getCredentialNumber())) continue;
-
-                String name = this.GetName(vo.getName());
-                String credentialNumber = this.GetCredentialNumber(vo.getCredentialNumber());
-                Long userId = this.getUserId(credentialNumber);
-                String phone = this.GetPhone(vo.getPhone().toString());
-
-                if (!name.isEmpty() && !credentialNumber.isEmpty() && !phone.isEmpty()) {
-                    WhitelistManagement whitelistManagement = new WhitelistManagement();
-                    whitelistManagement.setCreateDate(new Date());
-                    whitelistManagement.setDeleteMark(0);
-                    whitelistManagement.setEnabledMark(0);
-                    whitelistManagement.setUserId(userId);
-                    whitelistManagement.setName(name);
-                    whitelistManagement.setCredentialNumber(credentialNumber);
-                    whitelistManagement.setPhone(phone);
-                    whitelistManagements.add(whitelistManagement);
-                }
-            } catch (Exception e) {
-                errorLogs.add(String.format("[意外错误(检查输入的是否正确且存在,输入错误可能返回 null)] 姓名: %s, 身份证: %s, 手机号: %s - 错误信息:%s", vo.getName(), vo.getCredentialNumber(), vo.getPhone(), e.getMessage()));
+        for (Map<Integer, Object> vo : savedDataList) {
+            if(vo.get(0) == null || vo.get(1) == null || vo.get(2) == null){
+                errorList.add(vo);
+                continue;
+            }
+            if (this.checkExist(vo.get(1).toString())) {
+                continue;
+            }
+
+            String name = vo.get(0).toString();
+            String credentialNumber = vo.get(1).toString();
+            Long userId = this.getUserId(credentialNumber);
+            String phone = vo.get(2).toString();
+
+            if (!name.isEmpty() && !credentialNumber.isEmpty() && !phone.isEmpty()) {
+                WhitelistManagement whitelistManagement = new WhitelistManagement();
+                whitelistManagement.setCreateDate(new Date());
+                whitelistManagement.setDeleteMark(0);
+                whitelistManagement.setEnabledMark(0);
+                whitelistManagement.setUserId(userId);
+                whitelistManagement.setName(name);
+                whitelistManagement.setCredentialNumber(credentialNumber);
+                whitelistManagement.setPhone(phone);
+                whitelistManagements.add(whitelistManagement);
             }
         }
 
@@ -150,6 +154,6 @@ public class WhitelistManagementServiceImpl extends MPJBaseServiceImpl<Whitelist
             throw new MyException(detailedMessage);
         }
 
-        return result;
+        return errorList;
     }
 }

+ 2 - 1
src/main/java/com/xjrsoft/module/form/service/impl/FormExecuteServiceImpl.java

@@ -655,7 +655,8 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
                             //删除子表单数据
                             Entity childDeleteWhere = Entity.create(tableConfig.getTableName()).
                                     set(childTableConfig.get().getRelationField(), keyValues);
-                            Boolean result = SqlRunnerAdapter.db().dynamicDelete(tableName, childDeleteWhere);
+                            Boolean result = SqlRunnerAdapter.db().dynamicDelete(childTableConfig.get().getTableName(), childDeleteWhere);
+                            // TODO 当子表没有添加数据的时候,删除结果为false。
                             if (!result) {
                                 throw new MyException("删除数据失败");
                             }

+ 5 - 1
src/main/java/com/xjrsoft/module/form/utils/FormDataTransUtil.java

@@ -103,7 +103,11 @@ public final class FormDataTransUtil {
                             apiDataList = (List<Map<String, Object>>) resultApiData;
                         }
                         if (isCascade) apiDataList = treeToList(apiDataList);
-                        if (apiDataList != null ) apiDataMap.put(apiId, apiDataList.stream().filter(x -> ObjectUtil.isNotNull(x.get("value"))).collect(Collectors.toMap(data -> data.get("value").toString(), data -> data.get("label"), (e1, e2) -> e1)));
+                        if (apiDataList != null ){
+                            apiDataMap.put(apiId, apiDataList.stream()
+                                    .filter(x -> ObjectUtil.isNotNull(x.get("value")))
+                                    .collect(Collectors.toMap(data -> data.get("value").toString(), data -> data.get("label"), (e1, e2) -> e1)));
+                        }
                     }
                     fieldValuesMap.put(bindField, apiDataMap.get(apiId));
                 }

+ 49 - 0
src/main/java/com/xjrsoft/module/job/ExamScoreDataTask.java

@@ -0,0 +1,49 @@
+package com.xjrsoft.module.job;
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.xjrsoft.module.base.service.IBaseCourseSubjectService;
+import com.xjrsoft.module.xycxedu.service.IExamSubjectScoreService;
+import com.xjrsoft.module.xycxedu.service.IXycxeduExamListService;
+import com.xjrsoft.module.xycxedu.util.DataUtil;
+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/8
+ */
+@Component
+@Slf4j
+public class ExamScoreDataTask {
+
+    @Autowired
+    private IXycxeduExamListService examListService;
+
+    @Autowired
+    private IExamSubjectScoreService scoreService;
+
+    @Autowired
+    private IBaseCourseSubjectService courseService;
+    @Scheduled(cron = "0 */15 * * * ?")
+    public void RefreshConnectionPool() {
+        String active = SpringUtil.getActiveProfile();
+        if(!"prod".equals(active)){
+            log.info("非正式环境,无法执行数据推送");
+            return;
+        }
+        doExecute();
+    }
+
+    void doExecute(){
+        //同步考试计划数据
+        DataUtil dataUtil = new DataUtil();
+        dataUtil.examListData(examListService);
+
+        //同步成绩
+        dataUtil.studentScoreData(examListService, scoreService, courseService);
+    }
+
+
+}

+ 4 - 0
src/main/java/com/xjrsoft/module/organization/controller/UserController.java

@@ -209,10 +209,12 @@ public class UserController {
                     .eq(ObjectUtil.isNotNull(dto.getUserType()), Role::getId, dto.getUserType())
                     .eq(ObjectUtil.isNotNull(dto.getEmployType()), BaseTeacher::getEmployType, dto.getEmployType())
                     .eq(ObjectUtil.isNotNull(dto.getEmployWay()), BaseTeacher::getEmployWay, dto.getEmployWay())
+                    .eq(ObjectUtil.isNotNull(dto.getClassId()), BaseStudentSchoolRoll::getClassId, dto.getClassId())
                     .orderByDesc(User::getId)
                     .select(User::getId)
                     .select("d1.name", UserPageVo::getEmployWay)
                     .select("d2.name", UserPageVo::getEmployType)
+                    .selectAs(BaseStudentSchoolRoll::getClassId, UserPageVo::getClassId)
                     .select(User.class, x -> VoToColumnUtil.fieldsToColumns(UserPageVo.class).contains(x.getProperty()))
                     .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, User::getId)
                     .leftJoin(UserRoleRelation.class, UserRoleRelation::getUserId, User::getId)
@@ -259,10 +261,12 @@ public class UserController {
                             .eq((ObjectUtil.isNotNull(dto.getTreeType()) && dto.getTreeType() == 4), BaseStudentSchoolRoll::getClassId, dto.getTreeId())
                             .eq(ObjectUtil.isNotNull(dto.getEmployType()), BaseTeacher::getEmployType, dto.getEmployType())
                             .eq(ObjectUtil.isNotNull(dto.getEmployWay()), BaseTeacher::getEmployWay, dto.getEmployWay())
+                            .eq(ObjectUtil.isNotNull(dto.getClassId()), BaseStudentSchoolRoll::getClassId, dto.getClassId())
                             .orderByDesc(User::getId)
                             .select(User::getId)
                             .select("d1.name", UserPageVo::getEmployWay)
                             .select("d2.name", UserPageVo::getEmployType)
+                            .selectAs(BaseStudentSchoolRoll::getClassId, UserPageVo::getClassId)
                             .select(User.class, x -> VoToColumnUtil.fieldsToColumns(UserPageVo.class).contains(x.getProperty()))
                             .leftJoin(UserRoleRelation.class, UserRoleRelation::getUserId, User::getId)
                             .leftJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getUserId, User::getId)

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

@@ -43,4 +43,7 @@ public class UserPageDto extends PageInput {
     private String employType;
 
     private String employWay;
+
+    @ApiModelProperty("班级id")
+    private Long classId;
 }

+ 2 - 0
src/main/java/com/xjrsoft/module/organization/vo/UserPageVo.java

@@ -102,4 +102,6 @@ public class UserPageVo implements Serializable {
     private String employType;
 
     private String employWay;
+
+    private Long classId;
 }

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

@@ -19,7 +19,6 @@ import com.xjrsoft.module.student.dto.UpdateBaseStudentScholarshipApplicantDto;
 import com.xjrsoft.module.student.entity.BaseStudentScholarshipApplicant;
 import com.xjrsoft.module.student.entity.BaseStudentScholarshipCategory;
 import com.xjrsoft.module.student.service.IBaseStudentScholarshipApplicantService;
-import com.xjrsoft.module.student.service.IBaseStudentScholarshipCategoryService;
 import com.xjrsoft.module.student.vo.BaseStudentScholarshipApplicantCategoryPageVo;
 import com.xjrsoft.module.student.vo.BaseStudentScholarshipApplicantPageVo;
 import com.xjrsoft.module.student.vo.BaseStudentScholarshipApplicantVo;
@@ -52,14 +51,13 @@ import java.util.List;
 public class BaseStudentScholarshipApplicantController {
 
 
-    private final IBaseStudentScholarshipApplicantService baseStudentScholarshipApplicantService;
-    private final IBaseStudentScholarshipCategoryService baseStudentScholarshipCategoryService;
+    private final IBaseStudentScholarshipApplicantService applicantService;
 
     @GetMapping(value = "/page")
     @ApiOperation(value="奖学金申请列表(分页)")
     @SaCheckPermission("basestudentscholarshipapplicant:detail")
     public RT<PageOutput<BaseStudentScholarshipApplicantPageVo>> page(@Valid BaseStudentScholarshipApplicantPageDto dto){
-        IPage<BaseStudentScholarshipApplicantPageVo> page = baseStudentScholarshipApplicantService.selectJoinListPage(ConventPage.getPage(dto), BaseStudentScholarshipApplicantPageVo.class,
+        IPage<BaseStudentScholarshipApplicantPageVo> page = applicantService.selectJoinListPage(ConventPage.getPage(dto), BaseStudentScholarshipApplicantPageVo.class,
         MPJWrappers.<BaseStudentScholarshipApplicant>lambdaJoin()
                 .like(StrUtil.isNotEmpty(dto.getName()), BaseStudentScholarshipApplicant::getName, dto.getName())
                 .eq(ObjectUtil.isNotNull(dto.getSemesterId()), BaseStudentScholarshipCategory::getBaseSemesterId, dto.getSemesterId())
@@ -69,12 +67,14 @@ public class BaseStudentScholarshipApplicantController {
                 .eq(BaseStudentScholarshipApplicant::getBaseStudentScholarshipCategoryId,dto.getBaseStudentScholarshipCategoryId())
                 .orderByAsc(BaseStudentScholarshipApplicant::getSortCode)
                 .selectAs(BaseStudentScholarshipApplicant::getId, BaseStudentScholarshipApplicantPageVo::getId)
-                .selectAs(DictionaryDetail::getName, BaseStudentScholarshipApplicantPageVo::getBankTypeCn)
+                .select(" t4.name as bank_type_cn")
                 .selectAs(BaseSemester::getName, BaseStudentScholarshipApplicantPageVo::getSemesterName)
+                .select(" t5.name as category_cn")
                 .select(BaseStudentScholarshipApplicant.class,x -> VoToColumnUtil.fieldsToColumns(BaseStudentScholarshipApplicantPageVo.class).contains(x.getProperty()))
                 .innerJoin(BaseStudentScholarshipCategory.class, BaseStudentScholarshipCategory::getId, BaseStudentScholarshipApplicant::getBaseStudentScholarshipCategoryId)
                 .leftJoin(BaseSemester.class, BaseSemester::getId, BaseStudentScholarshipApplicant::getBaseSemesterId)
                 .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, BaseStudentScholarshipApplicant::getBankType)
+                .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, BaseStudentScholarshipCategory::getCategory)
         );
         PageOutput<BaseStudentScholarshipApplicantPageVo> pageOutput = ConventPage.getPageOutput(page, BaseStudentScholarshipApplicantPageVo.class);
         return RT.ok(pageOutput);
@@ -84,7 +84,7 @@ public class BaseStudentScholarshipApplicantController {
     @ApiOperation(value="奖学金名称表(分页)")
     @SaCheckPermission("basestudentscholarshipapplicant:detail")
     public RT<PageOutput<BaseStudentScholarshipApplicantCategoryPageVo>> scholarshiPage(@Valid BaseStudentScholarshipApplicantCategoryPageDto dto){
-        IPage<BaseStudentScholarshipApplicantCategoryPageVo> page = baseStudentScholarshipApplicantService.getScholarshiPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
+        IPage<BaseStudentScholarshipApplicantCategoryPageVo> page = applicantService.getScholarshiPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
         PageOutput<BaseStudentScholarshipApplicantCategoryPageVo> pageOutput = ConventPage.getPageOutput(page, BaseStudentScholarshipApplicantCategoryPageVo.class);
         return RT.ok(pageOutput);
     }
@@ -93,7 +93,7 @@ public class BaseStudentScholarshipApplicantController {
     @ApiOperation(value="根据id查询奖学金申请信息")
     @SaCheckPermission("basestudentscholarshipapplicant:detail")
     public RT<BaseStudentScholarshipApplicantVo> info(@RequestParam Long id){
-        BaseStudentScholarshipApplicant baseStudentScholarshipApplicant = baseStudentScholarshipApplicantService.getById(id);
+        BaseStudentScholarshipApplicant baseStudentScholarshipApplicant = applicantService.getById(id);
         if (baseStudentScholarshipApplicant == null) {
            return RT.error("找不到此数据!");
         }
@@ -106,7 +106,7 @@ public class BaseStudentScholarshipApplicantController {
     @SaCheckPermission("basestudentscholarshipapplicant:add")
     public RT<Boolean> add(@Valid @RequestBody AddBaseStudentScholarshipApplicantDto dto){
         BaseStudentScholarshipApplicant baseStudentScholarshipApplicant = BeanUtil.toBean(dto, BaseStudentScholarshipApplicant.class);
-        boolean isSuccess = baseStudentScholarshipApplicantService.save(baseStudentScholarshipApplicant);
+        boolean isSuccess = applicantService.save(baseStudentScholarshipApplicant);
     return RT.ok(isSuccess);
     }
 
@@ -116,7 +116,7 @@ public class BaseStudentScholarshipApplicantController {
     public RT<Boolean> update(@Valid @RequestBody UpdateBaseStudentScholarshipApplicantDto dto){
 
         BaseStudentScholarshipApplicant baseStudentScholarshipApplicant = BeanUtil.toBean(dto, BaseStudentScholarshipApplicant.class);
-        return RT.ok(baseStudentScholarshipApplicantService.updateById(baseStudentScholarshipApplicant));
+        return RT.ok(applicantService.updateById(baseStudentScholarshipApplicant));
 
     }
 
@@ -124,7 +124,7 @@ public class BaseStudentScholarshipApplicantController {
     @ApiOperation(value = "删除奖学金申请")
     @SaCheckPermission("basestudentscholarshipapplicant:delete")
     public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
-        return RT.ok(baseStudentScholarshipApplicantService.removeBatchByIds(ids));
+        return RT.ok(applicantService.removeBatchByIds(ids));
 
     }
 

+ 23 - 0
src/main/java/com/xjrsoft/module/student/controller/StudentManagerController.java

@@ -23,19 +23,27 @@ import com.xjrsoft.common.utils.TreeUtil;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.base.entity.BaseGrade;
+import com.xjrsoft.module.base.entity.BaseMajorSet;
 import com.xjrsoft.module.base.service.IBaseClassService;
 import com.xjrsoft.module.base.service.IBaseGradeService;
 import com.xjrsoft.module.concat.service.IXjrUserService;
 import com.xjrsoft.module.hikvision.util.DataUtil;
+import com.xjrsoft.module.organization.entity.Department;
 import com.xjrsoft.module.organization.entity.UserDeptRelation;
+import com.xjrsoft.module.organization.service.IDepartmentService;
 import com.xjrsoft.module.organization.service.IUserDeptRelationService;
 import com.xjrsoft.module.room.service.IRoomBedService;
 import com.xjrsoft.module.student.dto.AddBaseStudentUserDto;
 import com.xjrsoft.module.student.dto.BaseStudentUserPageDto;
 import com.xjrsoft.module.student.dto.UpdateBaseStudentUserDto;
+import com.xjrsoft.module.student.entity.BaseClassMajorSet;
+import com.xjrsoft.module.student.entity.BaseMajor;
 import com.xjrsoft.module.student.entity.BaseStudent;
 import com.xjrsoft.module.student.entity.BaseStudentUser;
+import com.xjrsoft.module.student.service.IBaseMajorService;
 import com.xjrsoft.module.student.service.IStudentManagerService;
+import com.xjrsoft.module.student.vo.BaseClassMajorSetVo;
+import com.xjrsoft.module.student.vo.BaseDepMajorGradeClassStudenTreeVo;
 import com.xjrsoft.module.student.vo.BaseStudentSchoolRollVo;
 import com.xjrsoft.module.student.vo.BaseStudentTreeVo;
 import com.xjrsoft.module.student.vo.BaseStudentUserPageVo;
@@ -89,6 +97,14 @@ public class StudentManagerController {
     @ApiOperation(value = "学生列表(分页)")
     @SaCheckPermission("studentmanager:detail")
     public R page(@Valid BaseStudentUserPageDto dto) {
+        if(dto.getTreeType() != null && dto.getTreeId() != null){
+            dto.setQueryId(dto.getTreeId());
+            if(dto.getTreeType() == 3){
+                String[] split = dto.getTreeId().split("_");
+                dto.setTreeId(split[0]);
+                dto.setQueryId(split[1]);
+            }
+        }
 
         IPage<BaseStudentUserPageVo> page = studentManagerService.getStudentPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
         for (BaseStudentUserPageVo record : page.getRecords()) {
@@ -192,6 +208,13 @@ public class StudentManagerController {
         return R.ok(userVo);
     }
 
+    @GetMapping(value = "/major-grade-class-tree")
+    @ApiOperation(value = "学生部门专业年级班级树")
+    @SaCheckPermission("studentmanager:detail")
+    public RT<List<BaseDepMajorGradeClassStudenTreeVo>> tree2() {
+        return RT.ok(studentManagerService.deptMajorGradeClassTree());
+    }
+
 
     @PostMapping
     @ApiOperation(value = "新增学生")

+ 11 - 2
src/main/java/com/xjrsoft/module/student/dto/BaseStudentUserPageDto.java

@@ -38,7 +38,16 @@ public class BaseStudentUserPageDto extends PageInput {
     /**
      * 班级id
      */
-    @ApiModelProperty("班级id")
-    private Long classId;
+    @ApiModelProperty("树id")
+    private String treeId;
+
+    @ApiModelProperty("树类型(1:部门  2:专业  3:年级  4:班级)")
+    private Integer treeType;
+
+    /**
+     * 班级id
+     */
+    @ApiModelProperty("树-查询id")
+    private String queryId;
 
 }

+ 151 - 0
src/main/java/com/xjrsoft/module/student/entity/BaseMajor.java

@@ -0,0 +1,151 @@
+package com.xjrsoft.module.student.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+/**
+* @title: 专业表
+* @Author wyf
+* @Date: 2024-07-01
+* @Version 1.0
+*/
+@Data
+@TableName("base_major")
+@ApiModel(value = "base_major", description = "专业表")
+public class BaseMajor 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;
+    /**
+    * 专业代码
+    */
+    @ApiModelProperty("专业代码")
+    private String code;
+    /**
+    * 修业年限(0.5的整数倍)
+    */
+    @ApiModelProperty("修业年限(0.5的整数倍)")
+    private BigDecimal studyYear;
+    /**
+    * 重点专业(xjr_dictionary_item[key_major])
+    */
+    @ApiModelProperty("重点专业(xjr_dictionary_item[key_major])")
+    private String keyMajor;
+    /**
+    * 特色专业(xjr_dictionary_item[feature_major])
+    */
+    @ApiModelProperty("特色专业(xjr_dictionary_item[feature_major])")
+    private String featureMajor;
+    /**
+    * 批准设置日期
+    */
+    @ApiModelProperty("批准设置日期")
+    private Date approveSetDate;
+    /**
+    * 首次招生日期(年月)
+    */
+    @ApiModelProperty("首次招生日期(年月)")
+    private Date firstRecruitStudentDate;
+    /**
+    * 专业状态(1:正常、2:停招、3:撤销)
+    */
+    @ApiModelProperty("专业状态(1:正常、2:停招、3:撤销)")
+    private Integer status;
+    /**
+    * 专业带头人
+    */
+    @ApiModelProperty("专业带头人")
+    private String leaderName;
+    /**
+    * 专业负责人
+    */
+    @ApiModelProperty("专业负责人")
+    private String directorName;
+    /**
+    * 任职日期开始
+    */
+    @ApiModelProperty("任职日期开始")
+    private Date officeStartDate;
+    /**
+    * 任职日期结束
+    */
+    @ApiModelProperty("任职日期结束")
+    private Date officeEndDate;
+    /**
+    * 是否全日制
+    */
+    @ApiModelProperty("是否全日制")
+    private Integer isFullTime;
+    /**
+    * 办学层次(base_major_gradation)
+    */
+    @ApiModelProperty("办学层次(base_major_gradation)")
+    private Long majorGradationId;
+    /**
+    * 专业分类(base_major_categor)
+    */
+    @ApiModelProperty("专业分类(base_major_categor)")
+    private Long majorCategorId;
+    /**
+    * 所属机构(xjr_department)
+    */
+    @ApiModelProperty("所属机构(xjr_department)")
+    private Long departmentId;
+
+
+}

+ 6 - 0
src/main/java/com/xjrsoft/module/student/entity/BaseStudentScholarshipCategory.java

@@ -115,4 +115,10 @@ public class BaseStudentScholarshipCategory implements Serializable {
     @EntityMapping(thisField = "id", joinField = "baseStudentScholarshipCategoryId")
     private List<BaseStudentScholarshipLevel> baseStudentScholarshipLevelList;
 
+    @ApiModelProperty("奖助学金类型(xjr_dictionary_item[scholarship_category])")
+    private String category;
+
+    @ApiModelProperty("资助单位/个人")
+    private String supportSource;
+
 }

+ 16 - 0
src/main/java/com/xjrsoft/module/student/mapper/BaseMajorMapper.java

@@ -0,0 +1,16 @@
+package com.xjrsoft.module.student.mapper;
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.student.entity.BaseMajor;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @title: 专业表
+* @Author wyf
+* @Date: 2024-07-01
+* @Version 1.0
+*/
+@Mapper
+public interface BaseMajorMapper extends MPJBaseMapper<BaseMajor> {
+
+}

+ 14 - 0
src/main/java/com/xjrsoft/module/student/service/IBaseMajorService.java

@@ -0,0 +1,14 @@
+package com.xjrsoft.module.student.service;
+
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.student.entity.BaseMajor;
+
+/**
+* @title: 专业表
+* @Author wyf
+* @Date: 2024-07-01
+* @Version 1.0
+*/
+
+public interface IBaseMajorService extends MPJBaseService<BaseMajor> {
+}

+ 4 - 0
src/main/java/com/xjrsoft/module/student/service/IStudentManagerService.java

@@ -6,6 +6,7 @@ import com.xjrsoft.module.student.dto.AddBaseStudentUserDto;
 import com.xjrsoft.module.student.dto.BaseStudentUserPageDto;
 import com.xjrsoft.module.student.dto.UpdateBaseStudentUserDto;
 import com.xjrsoft.module.student.entity.BaseStudentUser;
+import com.xjrsoft.module.student.vo.BaseDepMajorGradeClassStudenTreeVo;
 import com.xjrsoft.module.student.vo.BaseStudentClassVo;
 import com.xjrsoft.module.student.vo.BaseStudentUserPageVo;
 import com.xjrsoft.module.student.vo.PersonalPortraitPersonalInfoVo;
@@ -63,4 +64,7 @@ public interface IStudentManagerService extends MPJBaseService<BaseStudentUser>
     Page<BaseStudentUserPageVo> getStudentPage(Page<BaseStudentUserPageVo> page, BaseStudentUserPageDto dto);
 
     Boolean uploadImage(Long userId, MultipartFile file) throws IOException;
+
+     List<BaseDepMajorGradeClassStudenTreeVo> deptMajorGradeClassTree();
+
 }

+ 19 - 0
src/main/java/com/xjrsoft/module/student/service/impl/BaseMajorServiceImpl.java

@@ -0,0 +1,19 @@
+package com.xjrsoft.module.student.service.impl;
+
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.module.student.entity.BaseMajor;
+import com.xjrsoft.module.student.mapper.BaseMajorMapper;
+import com.xjrsoft.module.student.service.IBaseMajorService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+* @title: 专业表
+* @Author wyf
+* @Date: 2024-07-01
+* @Version 1.0
+*/
+@Service
+@AllArgsConstructor
+public class BaseMajorServiceImpl extends MPJBaseServiceImpl<BaseMajorMapper, BaseMajor> implements IBaseMajorService {
+}

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

@@ -153,6 +153,9 @@ public class BaseNewStudentServiceImpl extends MPJBaseServiceImpl<BaseNewStudent
                 if(objectMap.get(14) != null){
                     student.setFamilyAddress(objectMap.get(14).toString());
                 }
+                if(objectMap.get(15) != null){
+                    student.setScore(BigDecimal.valueOf(Double.parseDouble(objectMap.get(15).toString())));
+                }
                 updateList.add(student);
                 continue;
             }
@@ -185,6 +188,9 @@ public class BaseNewStudentServiceImpl extends MPJBaseServiceImpl<BaseNewStudent
                     if(objectMap.get(14) != null){
                         setFamilyAddress(objectMap.get(14).toString());
                     }
+                    if(objectMap.get(15) != null){
+                        setScore(BigDecimal.valueOf(Double.parseDouble(objectMap.get(15).toString())));
+                    }
                     setEnrollmentPlanId(treeId);
                     setStatus(0);
                 }}

+ 79 - 17
src/main/java/com/xjrsoft/module/student/service/impl/StudentManagerServiceImpl.java

@@ -20,6 +20,7 @@ import com.xjrsoft.common.enums.RoleEnum;
 import com.xjrsoft.common.enums.YesOrNoEnum;
 import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.utils.RedisUtil;
+import com.xjrsoft.common.utils.TreeUtil;
 import com.xjrsoft.config.CommonPropertiesConfig;
 import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.base.entity.BaseGrade;
@@ -27,37 +28,27 @@ import com.xjrsoft.module.base.entity.BaseMajorSet;
 import com.xjrsoft.module.base.mapper.BaseClassMapper;
 import com.xjrsoft.module.base.mapper.BaseGradeMapper;
 import com.xjrsoft.module.base.mapper.BaseMajorSetMapper;
+import com.xjrsoft.module.base.service.IBaseClassService;
+import com.xjrsoft.module.base.service.IBaseGradeService;
+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.entity.UserRoleRelation;
 import com.xjrsoft.module.organization.mapper.UserDeptRelationMapper;
 import com.xjrsoft.module.organization.mapper.UserRoleRelationMapper;
+import com.xjrsoft.module.organization.service.IDepartmentService;
 import com.xjrsoft.module.organization.service.IUserDeptRelationService;
 import com.xjrsoft.module.organization.service.IUserService;
 import com.xjrsoft.module.student.dto.AddBaseStudentUserDto;
 import com.xjrsoft.module.student.dto.BaseStudentUserPageDto;
 import com.xjrsoft.module.student.dto.UpdateBaseStudentUserDto;
-import com.xjrsoft.module.student.entity.BaseStudent;
-import com.xjrsoft.module.student.entity.BaseStudentContact;
-import com.xjrsoft.module.student.entity.BaseStudentFamily;
-import com.xjrsoft.module.student.entity.BaseStudentFamilyMember;
-import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
-import com.xjrsoft.module.student.entity.BaseStudentSubsidize;
-import com.xjrsoft.module.student.entity.BaseStudentUser;
+import com.xjrsoft.module.student.entity.*;
 import com.xjrsoft.module.student.mapper.BaseStudentFamilyMapper;
 import com.xjrsoft.module.student.mapper.BaseStudentFamilyMemberMapper;
 import com.xjrsoft.module.student.mapper.BaseStudentMapper;
 import com.xjrsoft.module.student.mapper.BaseStudentUserMapper;
-import com.xjrsoft.module.student.service.IBaseStudentContactService;
-import com.xjrsoft.module.student.service.IBaseStudentFamilyService;
-import com.xjrsoft.module.student.service.IBaseStudentSchoolRollService;
-import com.xjrsoft.module.student.service.IBaseStudentService;
-import com.xjrsoft.module.student.service.IBaseStudentSubsidizeService;
-import com.xjrsoft.module.student.service.IStudentManagerService;
-import com.xjrsoft.module.student.vo.BaseStudentClassVo;
-import com.xjrsoft.module.student.vo.BaseStudentUserPageVo;
-import com.xjrsoft.module.student.vo.PersonalPortraitPersonalInfoVo;
-import com.xjrsoft.module.student.vo.StudentPersonalInfoVo;
+import com.xjrsoft.module.student.service.*;
+import com.xjrsoft.module.student.vo.*;
 import com.xjrsoft.module.system.entity.Area;
 import com.xjrsoft.module.system.entity.DictionaryDetail;
 import com.xjrsoft.module.system.entity.DictionaryItem;
@@ -118,6 +109,14 @@ public class StudentManagerServiceImpl extends MPJBaseServiceImpl<BaseStudentUse
     private final IUserService userService;
     private final CommonPropertiesConfig propertiesConfig;
 
+    private final IDepartmentService baseDeparmentService;
+    private final IBaseMajorService baseMajorService;
+
+
+    private final IBaseClassService baseClassService;
+
+    private final IBaseGradeService baseGradeService;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long add(AddBaseStudentUserDto dto){
@@ -990,6 +989,69 @@ public class StudentManagerServiceImpl extends MPJBaseServiceImpl<BaseStudentUse
         return true;
     }
 
+    @Override
+    public List<BaseDepMajorGradeClassStudenTreeVo> deptMajorGradeClassTree() {
+        List<BaseDepMajorGradeClassStudenTreeVo> voList = new ArrayList<>();
+        MPJLambdaWrapper<BaseClass> baseClassMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        baseClassMPJLambdaWrapper
+                .selectAs(BaseClass::getId, BaseClassMajorSetVo::getClassId)
+                .selectAs(BaseMajorSet::getMajorId, BaseClassMajorSetVo::getMajorId)
+                .selectAs(BaseClass::getName, BaseClassMajorSetVo::getClassName)
+                .selectAs(BaseClass::getGradeId, BaseClassMajorSetVo::getGradeId)
+                .leftJoin(BaseClassMajorSet.class, BaseClassMajorSet::getClassId, BaseClass::getId)
+                .leftJoin(BaseMajorSet.class, BaseMajorSet::getId, BaseClassMajorSet::getMajorSetId)
+        ;
+
+        List<BaseClassMajorSetVo> majorSetList = baseClassService.selectJoinList(BaseClassMajorSetVo.class, baseClassMPJLambdaWrapper);
+
+
+        List<BaseGrade> gradeList = baseGradeService.list(
+                new QueryWrapper<BaseGrade>().lambda().eq(BaseGrade::getDeleteMark, DeleteMark.NODELETE.getCode())
+        );
+        List<BaseMajor> majorList = baseMajorService.list(
+                new QueryWrapper<BaseMajor>().lambda().eq(BaseMajor::getDeleteMark, DeleteMark.NODELETE.getCode())
+        );
+        List<Department> departmentList =baseDeparmentService.list(
+                new QueryWrapper<Department>().lambda().eq(Department::getDeleteMark, DeleteMark.NODELETE.getCode())
+                        .eq(Department::getParentId,"1684107782861680008")
+        );
+        departmentList.forEach((node) -> {
+            voList.add(new BaseDepMajorGradeClassStudenTreeVo(){{
+                setId(node.getId().toString());
+                setTreeType(1);
+                setName(node.getName());
+                setParentId("0");
+            }});
+        });
+        majorList.forEach((node)->{
+            voList.add(new BaseDepMajorGradeClassStudenTreeVo(){{
+                setId(node.getId().toString());
+                setName(node.getName());
+                setTreeType(2);
+                setParentId(node.getDepartmentId().toString());
+            }});
+            gradeList.forEach((DDD)->{
+                voList.add(new BaseDepMajorGradeClassStudenTreeVo(){{
+                    setId(node.getId().toString()+"_"+DDD.getId().toString());
+                    setName(DDD.getName());
+                    setTreeType(3);
+                    setParentId(node.getId().toString());
+                }});
+            });
+        });
+        majorSetList.forEach((node)->{
+            voList.add(new BaseDepMajorGradeClassStudenTreeVo(){{
+                setId(node.getClassId().toString());
+                setName(node.getClassName());
+                setTreeType(4);
+                setParentId(node.getMajorId().toString()+"_"+node.getGradeId());
+            }});
+        });
+
+        List<BaseDepMajorGradeClassStudenTreeVo> treeVoList = TreeUtil.build(voList);
+        return treeVoList;
+    }
+
     /**
      * 初始化字典信息
      * 身份证类型、

+ 15 - 2
src/main/java/com/xjrsoft/module/student/vo/BaseClassMajorSetVo.java

@@ -5,8 +5,8 @@ import lombok.Data;
 
 /**
 * @title: 班级专业方向表表单出参
-* @Author szs
-* @Date: 2023-12-28
+* @Author wyf
+* @Date: 2024-07-09
 * @Version 1.0
 */
 @Data
@@ -22,11 +22,24 @@ public class BaseClassMajorSetVo {
     */
     @ApiModelProperty("班级(base_class_major_set)")
     private Long classId;
+    /**
+     * 班级(base_class_major_set)
+     */
+    @ApiModelProperty("班级(base_class_major_set)")
+    private String className;
     /**
     * 专业方向(base_major_set)
     */
     @ApiModelProperty("专业方向(base_major_set)")
     private Long majorSetId;
+
+    @ApiModelProperty("所属年级(base_grade)")
+    private Long gradeId;
+    /**
+     * 专业(base_major)
+     */
+    @ApiModelProperty("专业(base_major)")
+    private Long majorId;
     /**
     * 计划人数
     */

+ 32 - 0
src/main/java/com/xjrsoft/module/student/vo/BaseDepMajorGradeClassStudenTreeVo.java

@@ -0,0 +1,32 @@
+package com.xjrsoft.module.student.vo;
+
+import com.xjrsoft.common.model.tree.ITreeNode;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public  class BaseDepMajorGradeClassStudenTreeVo implements ITreeNode<BaseDepMajorGradeClassStudenTreeVo,String>, Serializable {
+
+
+    @ApiModelProperty("id")
+    private String id;
+
+
+    @ApiModelProperty("name")
+    private String name;
+
+
+    @ApiModelProperty("disabled")
+    private String parentId;
+
+
+    @ApiModelProperty("children")
+    private List<BaseDepMajorGradeClassStudenTreeVo> children;
+
+    @ApiModelProperty("树类型(1:部门  2:专业  3:年级  4:班级)")
+    private Integer treeType;
+
+}

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

@@ -139,4 +139,7 @@ public class BaseStudentScholarshipApplicantPageVo {
     @ApiModelProperty("发放状态(1:已发放 0:未发放)")
     private Integer releaseStatus;
 
+    @ApiModelProperty("奖助学金类型-中文")
+    private String categoryCn;
+
 }

+ 2 - 2
src/main/java/com/xjrsoft/module/workflow/service/impl/WorkflowExecuteServiceImpl.java

@@ -1839,7 +1839,7 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
 //        WorkflowSchema workflowSchema = workflowSchemaMapper.selectById(schemaId);
         //获取到整个流程模板的配置
         WorkflowSchemaConfig workflowSchemaConfig = null;
-        // TODO 判断当前流程是否发生了变更
+        // TODO 判断当前流程是否发生了变更1
         if (workflowSchema.getDefinitionId().equals(task.getProcessDefinitionId())) {
             workflowSchemaConfig = JSONUtil.toBean(workflowSchema.getJsonContent(), WorkflowSchemaConfig.class);
         } else {
@@ -3675,7 +3675,7 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
 
 
             for (HistoricProcessInstance historicProcessInstance : historicProcessInstances) {
-                //找到当前流程的 任务开始时间 最大值 为当前审批节点
+                // 找到当前流程的 任务开始时间 最大值 为当前审批节点
                 workflowExtras.stream()
                         .filter(e -> e.getProcessId().equals(historicProcessInstance.getId()))
                         .max(Comparator.comparing(WorkflowExtra::getStartTime))

+ 154 - 0
src/main/java/com/xjrsoft/module/xycxedu/controller/ExamPlanController.java

@@ -0,0 +1,154 @@
+package com.xjrsoft.module.xycxedu.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.StrUtil;
+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.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.xycxedu.dto.AddExamPlanDto;
+import com.xjrsoft.module.xycxedu.dto.ExamPlanPageDto;
+import com.xjrsoft.module.xycxedu.dto.ExamStatisticsPageDto;
+import com.xjrsoft.module.xycxedu.dto.UpdateExamPlanDto;
+import com.xjrsoft.module.xycxedu.entity.ExamPlan;
+import com.xjrsoft.module.xycxedu.entity.XycxeduExamList;
+import com.xjrsoft.module.xycxedu.service.IExamPlanService;
+import com.xjrsoft.module.xycxedu.service.IExamSubjectScoreService;
+import com.xjrsoft.module.xycxedu.service.IXycxeduExamListService;
+import com.xjrsoft.module.xycxedu.vo.ExamPlanListVo;
+import com.xjrsoft.module.xycxedu.vo.ExamPlanPageVo;
+import com.xjrsoft.module.xycxedu.vo.ExamPlanVo;
+import com.xjrsoft.module.xycxedu.vo.ExamStatisticsPageVo;
+import com.xjrsoft.module.xycxedu.vo.XycxeduExamListVo;
+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.Arrays;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+* @title: 考试计划维护
+* @Author dzx
+* @Date: 2024-07-18
+* @Version 1.0
+*/
+@RestController
+@RequestMapping("/xycxedu" + "/examPlan")
+@Api(value = "/xycxedu"  + "/examPlan",tags = "考试计划维护代码")
+@AllArgsConstructor
+public class ExamPlanController {
+
+
+    private final IExamPlanService examPlanService;
+    private final IXycxeduExamListService examListService;
+    private final IExamSubjectScoreService scoreService;
+    @GetMapping(value = "/page")
+    @ApiOperation(value="考试计划维护列表(分页)")
+    @SaCheckPermission("examplan:detail")
+    public RT<PageOutput<ExamPlanPageVo>> page(@Valid ExamPlanPageDto dto){
+
+        MPJLambdaWrapper<ExamPlan> queryWrapper = new MPJLambdaWrapper<>();
+        queryWrapper.orderByDesc(ExamPlan::getId)
+                .eq(dto.getSemesterId() != null, ExamPlan::getSemesterId, dto.getSemesterId())
+                .like(StrUtil.isNotEmpty(dto.getName()), ExamPlan::getName, dto.getName())
+                .leftJoin(BaseSemester.class, BaseSemester::getId, ExamPlan::getSemesterId)
+                .select(ExamPlan::getId)
+                .selectAs(BaseSemester::getName, ExamPlanPageVo::getSemesterName)
+                .select(ExamPlan.class,x -> VoToColumnUtil.fieldsToColumns(ExamPlanPageVo.class).contains(x.getProperty()));
+        IPage<ExamPlan> page = examPlanService.page(ConventPage.getPage(dto), queryWrapper);
+        PageOutput<ExamPlanPageVo> pageOutput = ConventPage.getPageOutput(page, ExamPlanPageVo.class);
+        for (ExamPlanPageVo record : pageOutput.getList()) {
+            String[] split = record.getMilexamids().split(",");
+            List<Long> milexamids = Arrays.asList(split).stream()
+                    .map(Long::parseLong)
+                    .collect(Collectors.toList());
+            List<XycxeduExamList> list = examListService.list(new QueryWrapper<XycxeduExamList>().lambda().in(XycxeduExamList::getMilexamid, milexamids));
+            Set<String> collect = list.stream().map(XycxeduExamList::getMilexamname).collect(Collectors.toSet());
+            record.setMilexamnames(collect.toString().replace("[", "").replace("]", ""));
+        }
+        return RT.ok(pageOutput);
+    }
+
+    @GetMapping(value = "/info")
+    @ApiOperation(value="根据id查询考试计划维护信息")
+    @SaCheckPermission("examplan:detail")
+    public RT<ExamPlanVo> info(@RequestParam Long id){
+        ExamPlan examPlan = examPlanService.getById(id);
+        if (examPlan == null) {
+           return RT.error("找不到此数据!");
+        }
+        return RT.ok(BeanUtil.toBean(examPlan, ExamPlanVo.class));
+    }
+
+
+    @PostMapping
+    @ApiOperation(value = "新增考试计划维护")
+    @SaCheckPermission("examplan:add")
+    public RT<Boolean> add(@Valid @RequestBody AddExamPlanDto dto){
+        ExamPlan examPlan = BeanUtil.toBean(dto, ExamPlan.class);
+        boolean isSuccess = examPlanService.save(examPlan);
+        return RT.ok(isSuccess);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "修改考试计划维护")
+    @SaCheckPermission("examplan:edit")
+    public RT<Boolean> update(@Valid @RequestBody UpdateExamPlanDto dto){
+
+        ExamPlan examPlan = BeanUtil.toBean(dto, ExamPlan.class);
+        return RT.ok(examPlanService.updateById(examPlan));
+
+    }
+
+    @DeleteMapping
+    @ApiOperation(value = "删除考试计划维护")
+    @SaCheckPermission("examplan:delete")
+    public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
+        return RT.ok(examPlanService.removeBatchByIds(ids));
+    }
+
+    @GetMapping(value = "/exam-list")
+    @ApiOperation(value="查询所有考试记录")
+    @SaCheckPermission("examplan:detail")
+    public RT<List<XycxeduExamListVo>> allExam(){
+        List<XycxeduExamList> list = examListService.list();
+        List<XycxeduExamListVo> listVos = BeanUtil.copyToList(list, XycxeduExamListVo.class);
+        return RT.ok(listVos);
+    }
+
+    @GetMapping(value = "/plan-list")
+    @ApiOperation(value="查询所有考试计划")
+    @SaCheckPermission("examplan:detail")
+    public RT<List<ExamPlanListVo>> allPlan(){
+        List<ExamPlan> list = examPlanService.list();
+        List<ExamPlanListVo> listVos = BeanUtil.copyToList(list, ExamPlanListVo.class);
+        return RT.ok(listVos);
+    }
+
+    @GetMapping(value = "/exam-statistics")
+    @ApiOperation(value="考试记录(分页)")
+    @SaCheckPermission("examplan:detail")
+    public RT<PageOutput<ExamStatisticsPageVo>> page(@Valid ExamStatisticsPageDto dto){
+        Page<ExamStatisticsPageVo> page = scoreService.getStatisticsPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
+        PageOutput<ExamStatisticsPageVo> pageOutput = ConventPage.getPageOutput(page, ExamStatisticsPageVo.class);
+        return RT.ok(pageOutput);
+    }
+}

+ 45 - 0
src/main/java/com/xjrsoft/module/xycxedu/controller/ExamSubjectScoreController.java

@@ -0,0 +1,45 @@
+package com.xjrsoft.module.xycxedu.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.xjrsoft.common.model.result.RT;
+import com.xjrsoft.common.page.ConventPage;
+import com.xjrsoft.common.page.PageOutput;
+import com.xjrsoft.module.xycxedu.dto.ExamSubjectScoreDto;
+import com.xjrsoft.module.xycxedu.service.IExamSubjectScoreService;
+import com.xjrsoft.module.xycxedu.vo.ExamSubjectScorePageVo;
+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.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+
+/**
+* @title: 考试计划维护
+* @Author dzx
+* @Date: 2024-07-18
+* @Version 1.0
+*/
+@RestController
+@RequestMapping("/xycxedu" + "/ExamSubjectScore")
+@Api(value = "/xycxedu"  + "/ExamSubjectScore",tags = "成绩查询代码")
+@AllArgsConstructor
+public class ExamSubjectScoreController {
+
+
+    private final IExamSubjectScoreService scoreService;
+
+    @GetMapping(value = "/page")
+    @ApiOperation(value="考试成绩查询(分页)")
+    @SaCheckPermission("examplan:detail")
+    public RT<PageOutput<ExamSubjectScorePageVo>> page(@Valid ExamSubjectScoreDto dto){
+        Page<ExamSubjectScorePageVo> page = scoreService.getPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
+        PageOutput<ExamSubjectScorePageVo> pageOutput = ConventPage.getPageOutput(page, ExamSubjectScorePageVo.class);
+        return RT.ok(pageOutput);
+    }
+
+
+}

+ 43 - 0
src/main/java/com/xjrsoft/module/xycxedu/dto/AddExamPlanDto.java

@@ -0,0 +1,43 @@
+package com.xjrsoft.module.xycxedu.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+
+
+
+/**
+* @title: 考试计划维护
+* @Author dzx
+* @Date: 2024-07-18
+* @Version 1.0
+*/
+@Data
+public class AddExamPlanDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 学期id
+    */
+    @ApiModelProperty("学期id")
+    private Long semesterId;
+    /**
+    * 考试计划名称
+    */
+    @ApiModelProperty("考试计划名称")
+    private String name;
+    /**
+    * 晓羊策学考试计划id
+    */
+    @ApiModelProperty("晓羊策学考试计划id")
+    private String milexamids;
+
+}

+ 31 - 0
src/main/java/com/xjrsoft/module/xycxedu/dto/ExamPlanPageDto.java

@@ -0,0 +1,31 @@
+package com.xjrsoft.module.xycxedu.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+/**
+* @title: 考试计划维护分页查询入参
+* @Author dzx
+* @Date: 2024-07-18
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class ExamPlanPageDto extends PageInput {
+
+    @ApiModelProperty("学期id")
+    private Long semesterId;
+
+    @ApiModelProperty("计划名称")
+    private String name;
+
+}

+ 31 - 0
src/main/java/com/xjrsoft/module/xycxedu/dto/ExamStatisticsPageDto.java

@@ -0,0 +1,31 @@
+package com.xjrsoft.module.xycxedu.dto;
+
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class ExamStatisticsPageDto extends PageInput {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 用户ID(xjr_user)
+     */
+    @ApiModelProperty("考试名称")
+    private String milexamname;
+    /**
+     * 学号
+     */
+    @ApiModelProperty("学期id")
+    private Long semesterId;
+
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("开始时间")
+    private String startDate;
+
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("结束时间")
+    private String endDate;
+}

+ 27 - 0
src/main/java/com/xjrsoft/module/xycxedu/dto/ExamSubjectScoreDto.java

@@ -0,0 +1,27 @@
+package com.xjrsoft.module.xycxedu.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class ExamSubjectScoreDto extends PageInput {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 用户ID(xjr_user)
+     */
+    @ApiModelProperty("用户id")
+    private Long userId;
+    /**
+     * 学号
+     */
+    @ApiModelProperty("学期id")
+    private Long semesterId;
+
+    @ApiModelProperty("考试计划id")
+    private Long examPlanId;
+}

+ 32 - 0
src/main/java/com/xjrsoft/module/xycxedu/dto/UpdateExamPlanDto.java

@@ -0,0 +1,32 @@
+package com.xjrsoft.module.xycxedu.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.List;
+import java.util.Date;
+
+
+
+/**
+* @title: 考试计划维护
+* @Author dzx
+* @Date: 2024-07-18
+* @Version 1.0
+*/
+@Data
+public class UpdateExamPlanDto extends AddExamPlanDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long id;
+}

+ 93 - 0
src/main/java/com/xjrsoft/module/xycxedu/entity/ExamPlan.java

@@ -0,0 +1,93 @@
+package com.xjrsoft.module.xycxedu.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableId;
+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.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+
+
+/**
+* @title: 考试计划维护
+* @Author dzx
+* @Date: 2024-07-18
+* @Version 1.0
+*/
+@Data
+@TableName("exam_plan")
+@ApiModel(value = "exam_plan", description = "考试计划维护")
+public class ExamPlan 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
+    */
+    @ApiModelProperty("学期id")
+    private Long semesterId;
+    /**
+    * 考试计划名称
+    */
+    @ApiModelProperty("考试计划名称")
+    private String name;
+    /**
+    * 晓羊策学考试计划id
+    */
+    @ApiModelProperty("晓羊策学考试计划id")
+    private String milexamids;
+
+
+}

+ 97 - 0
src/main/java/com/xjrsoft/module/xycxedu/entity/ExamSubjectScore.java

@@ -0,0 +1,97 @@
+package com.xjrsoft.module.xycxedu.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年7月18日
+* @Version 1.0
+*/
+@Data
+@TableName("exam_subject_score")
+@ApiModel(value = "考试科目成绩表", description = "考试科目成绩表")
+public class ExamSubjectScore 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
+    */
+    @ApiModelProperty("学期id")
+    private Long semesterId;
+    /**
+    * 考试计划名称
+    */
+    @ApiModelProperty("考试计划名称")
+    private String milexamname;
+    /**
+    * 考试计划id
+    */
+    @ApiModelProperty("考试计划id")
+    private Long milexamid;
+
+    @ApiModelProperty("课程科目id(base_course_subject)")
+    private Long courseSubjectId;
+
+    @ApiModelProperty("课程名称")
+    private String coursename;
+
+    @ApiModelProperty("学生id(xjr_user)")
+    private Long userId;
+
+    @ApiModelProperty("分数")
+    private Integer score;
+
+    @ApiModelProperty("班级排名")
+    private Integer classRanking;
+
+    @ApiModelProperty("年级排名")
+    private Integer gradeRanking;
+
+}

+ 71 - 0
src/main/java/com/xjrsoft/module/xycxedu/entity/XycxeduExamList.java

@@ -0,0 +1,71 @@
+package com.xjrsoft.module.xycxedu.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.time.LocalDate;
+import java.util.Date;
+
+
+/**
+* @title: 晓羊策学考试计划表
+* @Author dzx
+* @Date: 2024年7月18日
+* @Version 1.0
+*/
+@Data
+@TableName("xycxedu_exam_list")
+@ApiModel(value = "晓羊策学考试计划表", description = "晓羊策学考试计划表")
+public class XycxeduExamList implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    @ApiModelProperty("主键")
+    @TableId
+    private Long id;
+    /**
+    * 创建时间
+    */
+    @ApiModelProperty("首次推送时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createDate;
+    /**
+    * 修改时间
+    */
+    @ApiModelProperty("修改时间")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date modifyDate;
+
+    @ApiModelProperty("删除标记")
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer deleteMark;
+    /**
+    * 表名
+    */
+    @ApiModelProperty("考试计划id")
+    private Long milexamid;
+    /**
+    * 英文姓名
+    */
+    @ApiModelProperty("考试计划名称")
+    private String milexamname;
+    /**
+    * 姓名拼音
+    */
+    @ApiModelProperty("学年")
+    private Integer regyear;
+
+    @ApiModelProperty("年级名称")
+    private String grade;
+
+    @ApiModelProperty("考试时间")
+    private LocalDate sdate;
+
+}

+ 17 - 0
src/main/java/com/xjrsoft/module/xycxedu/mapper/ExamPlanMapper.java

@@ -0,0 +1,17 @@
+package com.xjrsoft.module.xycxedu.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.xycxedu.entity.ExamPlan;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @title: 考试计划维护
+* @Author dzx
+* @Date: 2024-07-18
+* @Version 1.0
+*/
+@Mapper
+public interface ExamPlanMapper extends MPJBaseMapper<ExamPlan> {
+
+}

+ 27 - 0
src/main/java/com/xjrsoft/module/xycxedu/mapper/ExamSubjectScoreMappper.java

@@ -0,0 +1,27 @@
+package com.xjrsoft.module.xycxedu.mapper;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.xycxedu.dto.ExamStatisticsPageDto;
+import com.xjrsoft.module.xycxedu.dto.ExamSubjectScoreDto;
+import com.xjrsoft.module.xycxedu.entity.ExamSubjectScore;
+import com.xjrsoft.module.xycxedu.vo.ExamStatisticsPageVo;
+import com.xjrsoft.module.xycxedu.vo.ExamSubjectScorePageVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+* @title: 晓羊策学考试计划表
+* @Author dzx
+* @Date: 2024年7月18日
+* @Version 1.0
+*/
+@Mapper
+public interface ExamSubjectScoreMappper extends MPJBaseMapper<ExamSubjectScore> {
+
+    Long getUserIdByIdNumber(@Param("idNumber") String idNumber);
+
+    Page<ExamSubjectScorePageVo> getPage(Page<ExamSubjectScorePageVo> page, @Param("dto") ExamSubjectScoreDto dto);
+
+    Page<ExamStatisticsPageVo> getStatisticsPage(Page<ExamStatisticsPageVo> page, @Param("dto") ExamStatisticsPageDto dto);
+}

+ 16 - 0
src/main/java/com/xjrsoft/module/xycxedu/mapper/XycxeduExamListMappper.java

@@ -0,0 +1,16 @@
+package com.xjrsoft.module.xycxedu.mapper;
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.xycxedu.entity.XycxeduExamList;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @title: 晓羊策学考试计划表
+* @Author dzx
+* @Date: 2024年7月18日
+* @Version 1.0
+*/
+@Mapper
+public interface XycxeduExamListMappper extends MPJBaseMapper<XycxeduExamList> {
+
+}

+ 17 - 0
src/main/java/com/xjrsoft/module/xycxedu/service/IExamPlanService.java

@@ -0,0 +1,17 @@
+package com.xjrsoft.module.xycxedu.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.xycxedu.entity.ExamPlan;
+import lombok.Data;
+import java.util.List;
+
+/**
+* @title: 考试计划维护
+* @Author dzx
+* @Date: 2024-07-18
+* @Version 1.0
+*/
+
+public interface IExamPlanService extends MPJBaseService<ExamPlan> {
+}

+ 28 - 0
src/main/java/com/xjrsoft/module/xycxedu/service/IExamSubjectScoreService.java

@@ -0,0 +1,28 @@
+package com.xjrsoft.module.xycxedu.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.room.dto.RoomPageDto;
+import com.xjrsoft.module.room.vo.RoomPageVo;
+import com.xjrsoft.module.xycxedu.dto.ExamStatisticsPageDto;
+import com.xjrsoft.module.xycxedu.dto.ExamSubjectScoreDto;
+import com.xjrsoft.module.xycxedu.entity.ExamSubjectScore;
+import com.xjrsoft.module.xycxedu.vo.ExamStatisticsPageVo;
+import com.xjrsoft.module.xycxedu.vo.ExamSubjectScorePageVo;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @title: 晓羊策学考试计划表
+ * @Author dzx
+ * @Date: 2024年7月18日
+ * @Version 1.0
+*/
+
+public interface IExamSubjectScoreService extends MPJBaseService<ExamSubjectScore> {
+
+    Long getUserIdByIdNumber(String idNumber);
+
+    Page<ExamSubjectScorePageVo> getPage(Page<ExamSubjectScorePageVo> page, ExamSubjectScoreDto dto);
+
+    Page<ExamStatisticsPageVo> getStatisticsPage(Page<ExamStatisticsPageVo> page, ExamStatisticsPageDto dto);
+}

+ 15 - 0
src/main/java/com/xjrsoft/module/xycxedu/service/IXycxeduExamListService.java

@@ -0,0 +1,15 @@
+package com.xjrsoft.module.xycxedu.service;
+
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.xycxedu.entity.XycxeduExamList;
+
+/**
+ * @title: 晓羊策学考试计划表
+ * @Author dzx
+ * @Date: 2024年7月18日
+ * @Version 1.0
+*/
+
+public interface IXycxeduExamListService extends MPJBaseService<XycxeduExamList> {
+
+}

+ 25 - 0
src/main/java/com/xjrsoft/module/xycxedu/service/impl/ExamPlanServiceImpl.java

@@ -0,0 +1,25 @@
+package com.xjrsoft.module.xycxedu.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.module.xycxedu.entity.ExamPlan;
+import com.xjrsoft.module.xycxedu.mapper.ExamPlanMapper;
+import com.xjrsoft.module.xycxedu.service.IExamPlanService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+
+/**
+* @title: 考试计划维护
+* @Author dzx
+* @Date: 2024-07-18
+* @Version 1.0
+*/
+@Service
+@AllArgsConstructor
+public class ExamPlanServiceImpl extends MPJBaseServiceImpl<ExamPlanMapper, ExamPlan> implements IExamPlanService {
+}

+ 38 - 0
src/main/java/com/xjrsoft/module/xycxedu/service/impl/ExamSubjectScoreServiceImpl.java

@@ -0,0 +1,38 @@
+package com.xjrsoft.module.xycxedu.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.module.xycxedu.dto.ExamStatisticsPageDto;
+import com.xjrsoft.module.xycxedu.dto.ExamSubjectScoreDto;
+import com.xjrsoft.module.xycxedu.entity.ExamSubjectScore;
+import com.xjrsoft.module.xycxedu.mapper.ExamSubjectScoreMappper;
+import com.xjrsoft.module.xycxedu.service.IExamSubjectScoreService;
+import com.xjrsoft.module.xycxedu.vo.ExamStatisticsPageVo;
+import com.xjrsoft.module.xycxedu.vo.ExamSubjectScorePageVo;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * @title: 晓羊策学考试计划表
+ * @Author dzx
+ * @Date: 2024年7月18日
+ * @Version 1.0
+*/
+@Service
+@AllArgsConstructor
+public class ExamSubjectScoreServiceImpl extends MPJBaseServiceImpl<ExamSubjectScoreMappper, ExamSubjectScore> implements IExamSubjectScoreService {
+    @Override
+    public Long getUserIdByIdNumber(String idNumber) {
+        return this.baseMapper.getUserIdByIdNumber(idNumber);
+    }
+
+    @Override
+    public Page<ExamSubjectScorePageVo> getPage(Page<ExamSubjectScorePageVo> page, ExamSubjectScoreDto dto) {
+        return this.baseMapper.getPage(page, dto);
+    }
+
+    @Override
+    public Page<ExamStatisticsPageVo> getStatisticsPage(Page<ExamStatisticsPageVo> page, ExamStatisticsPageDto dto) {
+        return this.baseMapper.getStatisticsPage(page, dto);
+    }
+}

+ 19 - 0
src/main/java/com/xjrsoft/module/xycxedu/service/impl/XycxeduExamListServiceImpl.java

@@ -0,0 +1,19 @@
+package com.xjrsoft.module.xycxedu.service.impl;
+
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.module.xycxedu.entity.XycxeduExamList;
+import com.xjrsoft.module.xycxedu.mapper.XycxeduExamListMappper;
+import com.xjrsoft.module.xycxedu.service.IXycxeduExamListService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * @title: 晓羊策学考试计划表
+ * @Author dzx
+ * @Date: 2024年7月18日
+ * @Version 1.0
+*/
+@Service
+@AllArgsConstructor
+public class XycxeduExamListServiceImpl extends MPJBaseServiceImpl<XycxeduExamListMappper, XycxeduExamList> implements IXycxeduExamListService {
+}

+ 66 - 0
src/main/java/com/xjrsoft/module/xycxedu/util/ApiUtil.java

@@ -0,0 +1,66 @@
+package com.xjrsoft.module.xycxedu.util;
+
+import cn.hutool.http.HttpUtil;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * @author dzx
+ * @date 2024/7/17
+ */
+@Slf4j
+public class ApiUtil {
+
+    private final static int schoolid = 189;
+    private final static String sign = "888";
+    private final static String accessid = "86a5d02ae9f78470";
+
+    private final static String host = "https://openapi.xycxedu.com";
+
+
+    public static JsonArray getExamList() {
+        String url = host + "/exam/list?schoolid=" + schoolid + "&accessid=" + accessid + "&sign=" + sign;
+        String result = HttpUtil.get(url);
+        JsonParser parser = new JsonParser();
+        JsonObject asJsonObject = parser.parse(result).getAsJsonObject();
+        if(asJsonObject.get("data").isJsonNull()){
+            return new JsonArray();
+        }
+        JsonArray jsonArray = asJsonObject.get("data").getAsJsonArray();
+        return jsonArray;
+    }
+
+    public static JsonArray getStudentScoreByCourse(Integer examid) {
+        long timeMillis = System.currentTimeMillis();
+        String url = host + "/exam/totalscore?schoolid=" + schoolid + "&accessid=" + accessid + "&sign=" + sign + "&examid=" + examid + "&timestamp=" + timeMillis;
+        String result = HttpUtil.get(url);
+        JsonParser parser = new JsonParser();
+        JsonObject asJsonObject = parser.parse(result).getAsJsonObject();
+        if(asJsonObject.get("data").isJsonNull()){
+            return new JsonArray();
+        }
+        JsonArray jsonArray = asJsonObject.get("data").getAsJsonArray();
+        return jsonArray;
+    }
+
+    /**
+     * 根据考试id获取考试下的科目信息
+     * @param milexamid
+     * @return
+     */
+    public static JsonArray getCourseByExam(Long milexamid) {
+        long timeMillis = System.currentTimeMillis();
+        String url = host + "/exam/course?schoolid=" + schoolid + "&accessid=" + accessid + "&sign=" + sign + "&milexamid=" + milexamid + "&timestamp=" + timeMillis;
+        String result = HttpUtil.get(url);
+        JsonParser parser = new JsonParser();
+        JsonObject asJsonObject = parser.parse(result).getAsJsonObject();
+        if(asJsonObject.get("data").isJsonNull()){
+            return new JsonArray();
+        }
+        JsonArray jsonArray = asJsonObject.get("data").getAsJsonArray();
+        return jsonArray;
+    }
+
+}

+ 129 - 0
src/main/java/com/xjrsoft/module/xycxedu/util/DataUtil.java

@@ -0,0 +1,129 @@
+package com.xjrsoft.module.xycxedu.util;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.xjrsoft.common.enums.DeleteMark;
+import com.xjrsoft.module.base.entity.BaseCourseSubject;
+import com.xjrsoft.module.base.service.IBaseCourseSubjectService;
+import com.xjrsoft.module.xycxedu.entity.ExamSubjectScore;
+import com.xjrsoft.module.xycxedu.entity.XycxeduExamList;
+import com.xjrsoft.module.xycxedu.service.IExamSubjectScoreService;
+import com.xjrsoft.module.xycxedu.service.IXycxeduExamListService;
+import com.yomahub.liteflow.util.JsonUtil;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+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;
+
+/**
+ * @author dzx
+ * @date 2024/7/17
+ */
+public class DataUtil {
+
+    /**
+     * 同步考试计划信息
+     * @param examListService
+     */
+    public void examListData(IXycxeduExamListService examListService){
+        JsonArray examList = ApiUtil.getExamList();
+        List<XycxeduExamList> updateList = new ArrayList<>();
+        List<XycxeduExamList> insertList = new ArrayList<>();
+        Date date = new Date();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        for (JsonElement jsonElement : examList) {
+            XycxeduExamList parseObject = new XycxeduExamList();
+            JsonObject object = jsonElement.getAsJsonObject();
+            parseObject.setMilexamname(object.get("milexamname").getAsString());
+            parseObject.setMilexamid(object.get("milexamid").getAsLong());
+            parseObject.setRegyear(object.get("regyear").getAsInt());
+            parseObject.setGrade(object.get("grade").getAsString());
+            parseObject.setSdate(LocalDate.parse(object.get("sdate").getAsString(), formatter));
+            XycxeduExamList oldData = examListService.getOne(
+                    new QueryWrapper<XycxeduExamList>().lambda()
+                            .eq(XycxeduExamList::getMilexamid, parseObject.getMilexamid())
+            );
+            if(oldData != null){
+                BeanUtil.copyProperties(parseObject, oldData);
+                oldData.setModifyDate(date);
+                updateList.add(oldData);
+                continue;
+            }
+
+            parseObject.setCreateDate(date);
+            insertList.add(parseObject);
+        }
+        if(!updateList.isEmpty()){
+            examListService.updateBatchById(updateList);
+        }
+        if(!insertList.isEmpty()){
+            examListService.saveBatch(insertList);
+        }
+    }
+
+    public void studentScoreData(IXycxeduExamListService examListService, IExamSubjectScoreService scoreService, IBaseCourseSubjectService courseService){
+        //  查询出所有的考试计划
+        List<XycxeduExamList> list = examListService.list(
+                new QueryWrapper<XycxeduExamList>().lambda()
+        );
+        Map<Integer, Integer> examidXMilexamidMap = new HashMap<>();//存考试下的科目id和考试id关系
+        Map<Integer, String> examidXCoursenameMap = new HashMap<>();
+        for (XycxeduExamList el : list) {
+            // 根据考试计划,查询出所有科目信息
+            JsonArray courseByExam = ApiUtil.getCourseByExam(el.getMilexamid());
+            for (JsonElement jsonElement : courseByExam) {
+                JsonObject courseObj = jsonElement.getAsJsonObject();
+                examidXMilexamidMap.put(courseObj.get("examid").getAsInt(), courseObj.get("milexamid").getAsInt());
+                examidXCoursenameMap.put(courseObj.get("examid").getAsInt(), courseObj.get("coursename").getAsString());
+            }
+        }
+        Map<String, Long> courseMap = courseService.list(
+                new QueryWrapper<BaseCourseSubject>().lambda().eq(BaseCourseSubject::getDeleteMark, DeleteMark.NODELETE.getCode())
+        ).stream().collect(
+                Collectors.toMap(BaseCourseSubject::getName, BaseCourseSubject::getId)
+        );
+
+        Date date = new Date();
+        // 查询每次考试每个科目的学生的成绩
+        for (Integer examid : examidXMilexamidMap.keySet()) {
+            List<ExamSubjectScore> insertList = new ArrayList<>();
+            JsonArray jsonArray = ApiUtil.getStudentScoreByCourse(examid);
+            for (JsonElement jsonElement : jsonArray) {
+                JsonObject scoreObj = jsonElement.getAsJsonObject();
+                Long userId = scoreService.getUserIdByIdNumber(scoreObj.get("stunum").getAsString());
+
+                long count = scoreService.count(
+                        new QueryWrapper<ExamSubjectScore>().lambda()
+                                .eq(ExamSubjectScore::getUserId, userId)
+                                .eq(ExamSubjectScore::getCourseSubjectId, courseMap.get(examidXCoursenameMap.get(examid)))
+                                .eq(ExamSubjectScore::getMilexamid, examidXMilexamidMap.get(examid).longValue())
+                );
+                if(count > 0){
+                    continue;
+                }
+                ExamSubjectScore score = new ExamSubjectScore() {{
+                    setUserId(userId);
+                    setScore(scoreObj.get("score").getAsInt());
+                    setMilexamid(examidXMilexamidMap.get(examid).longValue());
+                    setGradeRanking(scoreObj.get("gradeorder").getAsInt());
+                    setClassRanking(scoreObj.get("classorder").getAsInt());
+                    setCoursename(examidXCoursenameMap.get(examid));
+                    setCourseSubjectId(courseMap.get(examidXCoursenameMap.get(examid)));
+                    setCreateDate(date);
+                }};
+                insertList.add(score);
+            }
+            if(!insertList.isEmpty()){
+                scoreService.saveBatch(insertList);
+            }
+        }
+    }
+}

+ 26 - 0
src/main/java/com/xjrsoft/module/xycxedu/vo/ExamPlanListVo.java

@@ -0,0 +1,26 @@
+package com.xjrsoft.module.xycxedu.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+* @title: 考试计划维护表单出参
+* @Author dzx
+* @Date: 2024-07-18
+* @Version 1.0
+*/
+@Data
+public class ExamPlanListVo {
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long id;
+    /**
+    * 学期id
+    */
+    @ApiModelProperty("考试计划名称")
+    private String name;
+
+}

+ 103 - 0
src/main/java/com/xjrsoft/module/xycxedu/vo/ExamPlanPageVo.java

@@ -0,0 +1,103 @@
+package com.xjrsoft.module.xycxedu.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import com.xjrsoft.common.annotation.Trans;
+import com.xjrsoft.common.enums.TransType;
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+* @title: 考试计划维护分页列表出参
+* @Author dzx
+* @Date: 2024-07-18
+* @Version 1.0
+*/
+@Data
+public class ExamPlanPageVo {
+
+    /**
+    * 
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("")
+    @ApiModelProperty("")
+    private String id;
+    /**
+    * 创建人
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("创建人")
+    @ApiModelProperty("创建人")
+    private Long createUserId;
+    /**
+    * 创建时间
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("创建时间")
+    @ApiModelProperty("创建时间")
+    private Date createDate;
+    /**
+    * 修改人
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("修改人")
+    @ApiModelProperty("修改人")
+    private Long modifyUserId;
+    /**
+    * 修改日期
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("修改日期")
+    @ApiModelProperty("修改日期")
+    private Date modifyDate;
+    /**
+    * 删除标记
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("删除标记")
+    @ApiModelProperty("删除标记")
+    private Integer deleteMark;
+    /**
+    * 有效标记
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("有效标记")
+    @ApiModelProperty("有效标记")
+    private Integer enabledMark;
+    /**
+    * 学期id
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("学期id")
+    @ApiModelProperty("学期id")
+    private Long semesterId;
+
+    @ApiModelProperty("学期名称")
+    private String semesterName;
+    /**
+    * 考试计划名称
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("考试计划名称")
+    @ApiModelProperty("考试计划名称")
+    private String name;
+    /**
+    * 晓羊策学考试计划id
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("晓羊策学考试计划id")
+    @ApiModelProperty("晓羊策学考试计划id")
+    private String milexamids;
+
+    @ApiModelProperty("晓羊策学考试计划名称")
+    private String milexamnames;
+
+}

+ 44 - 0
src/main/java/com/xjrsoft/module/xycxedu/vo/ExamPlanVo.java

@@ -0,0 +1,44 @@
+package com.xjrsoft.module.xycxedu.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+
+/**
+* @title: 考试计划维护表单出参
+* @Author dzx
+* @Date: 2024-07-18
+* @Version 1.0
+*/
+@Data
+public class ExamPlanVo {
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long id;
+    /**
+    * 学期id
+    */
+    @ApiModelProperty("学期id")
+    private Long semesterId;
+    /**
+    * 考试计划名称
+    */
+    @ApiModelProperty("考试计划名称")
+    private String name;
+    /**
+    * 晓羊策学考试计划id
+    */
+    @ApiModelProperty("晓羊策学考试计划id")
+    private String milexamids;
+
+
+
+}

+ 41 - 0
src/main/java/com/xjrsoft/module/xycxedu/vo/ExamStatisticsPageVo.java

@@ -0,0 +1,41 @@
+package com.xjrsoft.module.xycxedu.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+/**
+* @title: 考试计划维护表单出参
+* @Author dzx
+* @Date: 2024-07-18
+* @Version 1.0
+*/
+@Data
+public class ExamStatisticsPageVo {
+
+    /**
+    * 考试计划名称
+    */
+    @ApiModelProperty("学期名称")
+    private String semesterName;
+    /**
+    * 晓羊策学考试计划id
+    */
+    @ApiModelProperty("考试名称")
+    private String milexamname;
+
+    @ApiModelProperty("考试时间")
+    private LocalDate sdate;
+
+    @ApiModelProperty("学生数量")
+    private Integer studentCount;
+
+    @ApiModelProperty("班级数量")
+    private Integer classCount;
+
+    @ApiModelProperty("主键")
+    private Long id;
+
+
+}

+ 36 - 0
src/main/java/com/xjrsoft/module/xycxedu/vo/ExamSubjectScorePageVo.java

@@ -0,0 +1,36 @@
+package com.xjrsoft.module.xycxedu.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+* @title: 考试计划维护表单出参
+* @Author dzx
+* @Date: 2024-07-18
+* @Version 1.0
+*/
+@Data
+public class ExamSubjectScorePageVo {
+
+    /**
+    * 考试计划名称
+    */
+    @ApiModelProperty("学期名称")
+    private String semesterName;
+    /**
+    * 晓羊策学考试计划id
+    */
+    @ApiModelProperty("考试名称")
+    private String milexamname;
+
+    @ApiModelProperty("科目")
+    private String coursename;
+
+    @ApiModelProperty("成绩")
+    private Integer score;
+
+    @ApiModelProperty("年级排名")
+    private Integer gradeRanking;
+
+
+}

+ 27 - 0
src/main/java/com/xjrsoft/module/xycxedu/vo/XycxeduExamListVo.java

@@ -0,0 +1,27 @@
+package com.xjrsoft.module.xycxedu.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+* @title: 考试计划维护表单出参
+* @Author dzx
+* @Date: 2024-07-18
+* @Version 1.0
+*/
+@Data
+public class XycxeduExamListVo {
+
+    /**
+    * 考试计划名称
+    */
+    @ApiModelProperty("考试计划名称")
+    private String milexamname;
+    /**
+    * 晓羊策学考试计划id
+    */
+    @ApiModelProperty("晓羊策学考试计划id")
+    private Long milexamid;
+
+
+}

+ 30 - 0
src/main/resources/mapper/activity/ActivityEnrollMapper.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xjrsoft.module.activity.mapper.ActivityEnrollMapper">
+    <select id="getPage" parameterType="com.xjrsoft.module.activity.dto.ActivityEnrollPageDto" resultType="com.xjrsoft.module.activity.vo.ActivityEnrollPageVo">
+        SELECT t1.id,t1.status,t2.name,t1.create_date,t2.user_name,t2.mobile,
+        (select id from base_teacher where user_id = t1.id) as teacher_id,
+        (select id from base_student where user_id = t1.id) as student_id FROM activity_enroll t1
+        INNER JOIN xjr_user t2 ON t1.user_id = t2.id
+        WHERE t1.delete_mark = 0 AND t1.activity_info_id = #{dto.activityInfoId}
+        <if test="dto.status != null">
+            and t1.status = #{dto.status}
+        </if>
+    </select>
+
+    <select id="getList" parameterType="com.xjrsoft.module.activity.dto.ActivityEnrollPageDto" resultType="com.xjrsoft.module.activity.vo.ActivityEnrollPageVo">
+        SELECT t1.id,t1.status,t2.name,t1.create_date,t2.user_name,t2.mobile,t1.activity_info_id,
+        (select id from base_teacher where user_id = t1.id) as teacher_id,
+        (select id from base_student where user_id = t1.id) as student_id FROM activity_enroll t1
+        INNER JOIN xjr_user t2 ON t1.user_id = t2.id
+        WHERE t1.delete_mark = 0 AND t1.activity_info_id = #{dto.activityInfoId}
+        <if test="dto.status != null">
+            and t1.status = #{dto.status}
+        </if>
+        <if test="dto.loginUserId != null">
+            and t1.user_id = #{dto.loginUserId}
+        </if>
+    </select>
+</mapper>

+ 39 - 0
src/main/resources/mapper/activity/ActivityInfoMapper.xml

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xjrsoft.module.activity.mapper.ActivityInfoMapper">
+    <select id="getPage" parameterType="com.xjrsoft.module.activity.dto.ActivityInfoPageDto" resultType="com.xjrsoft.module.activity.vo.ActivityInfoPageVo">
+        SELECT t1.id,t2.name AS type_cn,t3.company_name AS enterprise_name,t1.name,t1.place,t1.start_date,t1.end_date,
+        t1.type, t4.name AS org_name, t1.enroll_end_time, t1.duty_person,t1.duty_person_mobile, t1.cover_file_id,
+        t1.enroll_range, t1.status,t1.content,t1.category,
+        (SELECT COUNT(*) FROM activity_enroll WHERE delete_mark = 0 AND activity_info_id = t1.id) as enroll_count FROM activity_info t1
+        LEFT JOIN xjr_dictionary_detail t2 ON t1.type = t2.code
+        LEFT JOIN company_coop t3 ON t1.enterprise_id = t3.id
+        LEFT JOIN xjr_department t4 ON t1.org_id = t4.id
+        WHERE t1.delete_mark = 0
+        <if test="dto.category != null">
+            and t1.category = #{dto.category}
+        </if>
+        <if test="dto.isEffective != null and dto.isEffective == 1">
+            and (t1.status = 1 or t1.status = 2) and NOW() between t1.start_date and t1.end_date
+        </if>
+    </select>
+    <select id="getMyPage" parameterType="com.xjrsoft.module.activity.dto.ActivityInfoPageDto" resultType="com.xjrsoft.module.activity.vo.ActivityInfoPageVo">
+        SELECT t1.id,t2.name AS type_cn,t3.company_name AS enterprise_name,t1.name,t1.place,t1.start_date,t1.end_date,
+        t1.type, t4.name AS org_name, t1.enroll_end_time, t1.duty_person,t1.duty_person_mobile, t1.cover_file_id,
+        t1.enroll_range, t1.status,t1.content,t1.category,t5.status as enroll_status,
+        (SELECT COUNT(*) FROM activity_enroll WHERE delete_mark = 0 AND activity_info_id = t1.id) as enroll_count FROM activity_info t1
+        LEFT JOIN xjr_dictionary_detail t2 ON t1.type = t2.code
+        LEFT JOIN company_coop t3 ON t1.enterprise_id = t3.id
+        LEFT JOIN xjr_department t4 ON t1.org_id = t4.id
+        LEFT JOIN activity_enroll t5 ON t1.id = t5.activity_info_id
+        WHERE t1.delete_mark = 0 and t5.user_id = #{dto.loginUserId}
+        <if test="dto.category != null">
+            and t1.category = #{dto.category}
+        </if>
+        <if test="dto.isEffective != null and dto.isEffective == 1">
+            and (t1.status = 1 or t1.status = 2) and NOW() between t1.start_date and t1.end_date
+        </if>
+    </select>
+</mapper>

+ 2 - 2
src/main/resources/mapper/banding/BandingTaskClassMapper.xml

@@ -4,7 +4,7 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.xjrsoft.module.banding.mapper.BandingTaskClassMapper">
     <select id="getList" parameterType="com.xjrsoft.module.banding.dto.BandingTaskClassPageDto" resultType="com.xjrsoft.module.banding.vo.BandingTaskClassPageVo">
-        SELECT t1.id, t1.major_set_id,t2.name AS major_set_name, t1.name, t1.number,t1.sort_code,t1.is_order_class,t1.class_type,
+        SELECT t1.id, t1.major_set_id,t2.name AS major_set_name, t1.name, t1.number,t1.sort_code,t1.is_order_class,t1.class_type,t1.status,
         (SELECT COUNT(*) FROM base_new_student a1
         INNER JOIN enrollment_plan a2 ON a1.enrollment_plan_id = a2.id
         WHERE a1.delete_mark = 0 AND a1.first_ambition_id = t1.major_set_id
@@ -126,6 +126,6 @@
     </select>
 
     <select id="getListOrderByAsc" resultType="com.xjrsoft.module.banding.entity.BandingTaskClass">
-        SELECT * FROM banding_task_class WHERE delete_mark = 0 and banding_task_id = #{id} ORDER BY sort_code IS NULL, sort_code ASC
+        SELECT * FROM banding_task_class WHERE delete_mark = 0 and banding_task_id = #{id} and status = 0 ORDER BY sort_code IS NULL, sort_code ASC
     </select>
 </mapper>

+ 14 - 2
src/main/resources/mapper/student/BaseStudentMapper.xml

@@ -76,9 +76,21 @@
         <if test="dto.email != null and dto.email != ''">
             and t1.email like concat('%', #{dto.email},'%')
         </if>
-        <if test="dto.classId != null">
-            and t4.id = #{dto.classId}
+        <if test="dto.treeType != null and dto.queryId != null">
+            <if test="dto.treeType == 1">
+                and t4.org_id = #{dto.queryId}
+            </if>
+            <if test="dto.treeType == 2">
+                and t3.major_set_id = #{dto.queryId}
+            </if>
+            <if test="dto.treeType == 3">
+                and t4.grade_id = #{dto.queryId} and t3.major_set_id = #{dto.treeId}
+            </if>
+            <if test="dto.treeType == 4">
+                and t4.id = #{dto.queryId}
+            </if>
         </if>
+
         <if test="dto.order == null">
             order by t1.id
         </if>

+ 42 - 0
src/main/resources/mapper/xycxedu/ExamSubjectScoreMappper.xml

@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xjrsoft.module.xycxedu.mapper.ExamSubjectScoreMappper">
+    <select id="getUserIdByIdNumber" parameterType="java.lang.String" resultType="java.lang.Long">
+        SELECT t1.id FROM xjr_user t1
+        INNER JOIN base_student t2 ON t1.id = t2.user_id
+        WHERE t1.credential_number = #{idNumber}
+    </select>
+
+    <select id="getPage" parameterType="com.xjrsoft.module.xycxedu.dto.ExamSubjectScoreDto" resultType="com.xjrsoft.module.xycxedu.vo.ExamSubjectScorePageVo">
+        SELECT t4.name AS semester_name,t2.milexamname,t1.coursename,t1.score,t1.grade_ranking FROM exam_subject_score t1
+        INNER JOIN xycxedu_exam_list t2 ON t1.milexamid = t2.milexamid
+        LEFT JOIN exam_plan t3 ON t3.milexamids LIKE CONCAT('%', t1.milexamid, '%')
+        LEFT JOIN base_semester t4 ON t3.semester_id = t4.id
+        WHERE t1.delete_mark = 0 AND t1.user_id = #{dto.userId}
+        <if test="dto.semesterId != null">
+            and t4.id = #{dto.semesterId}
+        </if>
+        <if test="dto.semesterId != null">
+            and t3.id = #{dto.examPlanId}
+        </if>
+    </select>
+
+    <select id="getStatisticsPage" parameterType="com.xjrsoft.module.xycxedu.dto.ExamStatisticsPageDto" resultType="com.xjrsoft.module.xycxedu.vo.ExamStatisticsPageVo">
+        SELECT t1.id, t1.milexamname,t3.name AS semester_name,t1.sdate,
+        (SELECT COUNT(DISTINCT(user_id)) FROM exam_subject_score WHERE delete_mark = 0 AND milexamid = t1.milexamid) AS student_count,
+        (SELECT COUNT(DISTINCT(a2.class_id)) FROM exam_subject_score a1
+        INNER JOIN base_student_school_roll a2 ON a1.user_id = a2.user_id
+        WHERE a1.delete_mark = 0 AND a1.milexamid = t1.milexamid) AS class_count FROM xycxedu_exam_list t1
+        LEFT JOIN exam_plan t2 ON t2.milexamids LIKE CONCAT('%', t1.milexamid ,'%')
+        LEFT JOIN base_semester t3 ON t2.semester_id = t3.id
+        WHERE t1.delete_mark = 0
+        <if test="dto.semesterId != null">
+            and t3.id = #{dto.semesterId}
+        </if>
+        <if test="dto.startDate != null and dto.endDate != null">
+            and t1.sdate between #{dto.startDate} and #{dto.endDate}
+        </if>
+    </select>
+</mapper>

+ 316 - 0
src/main/resources/sqlScript/20240627_sql.sql

@@ -0,0 +1,316 @@
+-- ----------------------------------------------------------------------------------------
+-- 白名单管理
+-- ----------------------------------------------------------------------------------------   
+DROP TABLE IF EXISTS whitelist_management;
+CREATE TABLE whitelist_management
+(
+    id                BIGINT        NOT NULL COMMENT '主键编号'
+        PRIMARY KEY,
+    create_date       DATETIME      NULL COMMENT '创建时间',
+    modify_date       DATETIME      NULL COMMENT '修改时间',
+    delete_mark       INT           NOT NULL COMMENT '删除标记',
+    enabled_mark      INT           NOT NULL COMMENT '有效标志',
+    user_id             BIGINT      NOT NULL COMMENT '用户id',
+    NAME              VARCHAR(10)   NOT NULL COMMENT '姓名',
+    credential_number        VARCHAR(30)   NOT NULL COMMENT '身份证',
+    phone               BIGINT  NOT NULL  COMMENT '手机号'
+)
+    COMMENT '白名单管理';
+-- ----------------------------------------------------------------------------------------
+-- 新生维护信息
+-- ----------------------------------------------------------------------------------------   
+DROP TABLE IF EXISTS base_new_student;   
+CREATE TABLE `base_new_student` (
+  `id` BIGINT NOT NULL,
+  `create_user_id` BIGINT DEFAULT NULL,
+  `create_date` DATETIME(3) DEFAULT NULL,
+  `modify_user_id` BIGINT DEFAULT NULL,
+  `modify_date` DATETIME(3) DEFAULT NULL,
+  `delete_mark` INT DEFAULT NULL,
+  `enabled_mark` INT DEFAULT NULL,
+  `sort_code` INT DEFAULT NULL,
+  `graduate_school` VARCHAR(50) DEFAULT NULL COMMENT '毕业学校',
+  `name` VARCHAR(50) DEFAULT NULL COMMENT '学生姓名',
+  `gender` VARCHAR(20) DEFAULT NULL COMMENT '性别(xjr_dictionary_item[gender])',
+  `credential_number` VARCHAR(30) DEFAULT NULL COMMENT '身份证号',
+  `height` DECIMAL(6,1) DEFAULT NULL COMMENT '身高',
+  `weight` DECIMAL(6,1) DEFAULT NULL COMMENT '体重',
+  `score` DECIMAL(6,1) DEFAULT NULL COMMENT '成绩',
+  `graduate_class` VARCHAR(50) DEFAULT NULL COMMENT '毕业班级',
+  `source` VARCHAR(50) DEFAULT NULL COMMENT '学生来源(xjr_dictionary_item[student_type])',
+  `stduy_status` VARCHAR(20) DEFAULT NULL COMMENT '住宿类型(xjr_dictionary_item[stduy_status])',
+  `mobile` VARCHAR(20) DEFAULT NULL COMMENT '手机号',
+  `first_ambition` VARCHAR(50) DEFAULT NULL COMMENT '第一志愿',
+  `second_ambition` VARCHAR(50) DEFAULT NULL COMMENT '第二志愿',
+  `is_adjust` INT DEFAULT NULL COMMENT '是否可调配(0:否,1:是)',
+  `status` INT DEFAULT NULL COMMENT '班级状态(0:未分配, 1:已分配)',
+  `enrollment_plan_id` BIGINT DEFAULT NULL COMMENT '招生计划id(enrollment_plan)',
+  `family_mobile` VARCHAR(20) DEFAULT NULL COMMENT '家庭电话',
+  `family_address` VARCHAR(50) DEFAULT NULL COMMENT '家庭地址',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='新生维护信息';
+
+
+ALTER TABLE `tl`.`base_new_student`   
+  ADD COLUMN `first_ambition_id` BIGINT NULL   COMMENT '第一志愿专业id(base_class_major_set)' AFTER `enrollment_plan_id`,
+  ADD COLUMN `second_ambition_id` BIGINT NULL   COMMENT '第二志愿专业id(base_class_major_set)' AFTER `first_ambition_id`;
+
+-- ----------------------------------------------------------------------------------------
+-- 新生分班任务
+-- ----------------------------------------------------------------------------------------
+DROP TABLE IF EXISTS banding_task;   
+CREATE TABLE `banding_task` (
+  `id` BIGINT NOT NULL,
+  `create_user_id` BIGINT DEFAULT NULL,
+  `create_date` DATETIME(3) DEFAULT NULL,
+  `modify_user_id` BIGINT DEFAULT NULL,
+  `modify_date` DATETIME(3) DEFAULT NULL,
+  `delete_mark` INT DEFAULT NULL,
+  `enabled_mark` INT DEFAULT NULL,
+  `sort_code` INT DEFAULT NULL,
+  `grade_id` BIGINT DEFAULT NULL COMMENT '年级id',
+  `enroll_type` VARCHAR(50) DEFAULT NULL COMMENT '招生类型',
+  `name` VARCHAR(30) DEFAULT NULL COMMENT '分班任务名称',
+  `status` INT DEFAULT 0 COMMENT '任务状态(0:未确认 1:已确认)',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='新生分班任务';
+
+-- ----------------------------------------------------------------------------------------
+-- 新生分班规则
+-- ----------------------------------------------------------------------------------------
+DROP TABLE IF EXISTS banding_rule;   
+CREATE TABLE `banding_rule` (
+  `id` BIGINT NOT NULL,
+  `create_user_id` BIGINT DEFAULT NULL,
+  `create_date` DATETIME(3) DEFAULT NULL,
+  `modify_user_id` BIGINT DEFAULT NULL,
+  `modify_date` DATETIME(3) DEFAULT NULL,
+  `delete_mark` INT DEFAULT NULL,
+  `enabled_mark` INT DEFAULT NULL,
+  `sort_code` INT DEFAULT NULL,
+  `name` VARCHAR(200) DEFAULT NULL COMMENT '规则名称',
+  `code` VARCHAR(50) DEFAULT NULL COMMENT '规则代码',
+  `choose_type` VARCHAR(50) DEFAULT NULL COMMENT '选择方式(radtio:单选, multi:多选)',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='新生分班规则';
+
+DELETE FROM banding_rule;
+INSERT INTO banding_rule(id,create_user_id,create_date,NAME,CODE,choose_type)
+VALUE(1807614834171953155, 1000000000000000000, NOW(), '使每班的男女生性别比例比较均衡(男女比例“1:1”,数量为奇数是多的随机分配)','BR0001','multi');
+INSERT INTO banding_rule(id,create_user_id,create_date,NAME,CODE,choose_type)
+VALUE(1807614834171953156, 1000000000000000000, NOW(), '使每班的学生成绩比例比较均衡(根据成绩均衡分班方法进行均衡分班)','BR0002','multi');
+INSERT INTO banding_rule(id,create_user_id,create_date,NAME,CODE,choose_type)
+VALUE(1807614834171953157, 1000000000000000000, NOW(), '使姓名相同的学生分到不同的班级','BR0003','multi');
+INSERT INTO banding_rule(id,create_user_id,create_date,NAME,CODE,choose_type)
+VALUE(1807614834171953159, 1000000000000000000, NOW(), '使同专业方向班级人数比例比较均衡(同一个专业方向分多个班级时,使每个班级人数比较均衡,数量为奇数是多的随机分配)','BR0004','radio');
+INSERT INTO banding_rule(id,create_user_id,create_date,NAME,CODE,choose_type)
+VALUE(1807614834171953160, 1000000000000000000, NOW(), '使同专业班级一个班级排满在排下一个班级(同一个专业方向分多个班级时,先将第一个班级人数分满,在分第二个班级,以此类推)','BR0005','radio');
+
+UPDATE banding_rule SET delete_mark = 0, enabled_mark = 1;
+
+-- ----------------------------------------------------------------------------------------
+-- 新生分班任务规则
+-- ----------------------------------------------------------------------------------------
+DROP TABLE IF EXISTS banding_task_rule;   
+CREATE TABLE `banding_task_rule` (
+  `id` BIGINT NOT NULL,
+  `create_user_id` BIGINT DEFAULT NULL,
+  `create_date` DATETIME(3) DEFAULT NULL,
+  `modify_user_id` BIGINT DEFAULT NULL,
+  `modify_date` DATETIME(3) DEFAULT NULL,
+  `delete_mark` INT DEFAULT NULL,
+  `enabled_mark` INT DEFAULT NULL,
+  `sort_code` INT DEFAULT NULL,
+  `banding_rule_id` BIGINT DEFAULT NULL COMMENT '新生分班规则(banding_rule)',
+  `banding_task_id` BIGINT DEFAULT NULL COMMENT '分班任务(banding_task)',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='新生分班任务规则';
+
+-- ----------------------------------------------------------------------------------------
+-- 新生分班任务专业限制条件
+-- ----------------------------------------------------------------------------------------
+DROP TABLE IF EXISTS banding_task_major_condition;   
+CREATE TABLE `banding_task_major_condition` (
+  `id` BIGINT NOT NULL,
+  `create_user_id` BIGINT DEFAULT NULL,
+  `create_date` DATETIME(3) DEFAULT NULL,
+  `modify_user_id` BIGINT DEFAULT NULL,
+  `modify_date` DATETIME(3) DEFAULT NULL,
+  `delete_mark` INT DEFAULT NULL,
+  `enabled_mark` INT DEFAULT NULL,
+  `sort_code` INT DEFAULT NULL,
+  `major_set_id` BIGINT DEFAULT NULL COMMENT '	',
+  `height` DECIMAL(6,1) DEFAULT NULL COMMENT '身高',
+  `score` DECIMAL(6,1) DEFAULT NULL COMMENT '分数',
+  `banding_task_id` BIGINT DEFAULT NULL COMMENT '分班任务(banding_task)',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='新生分班任务专业限制条件';
+
+-- ----------------------------------------------------------------------------------------
+-- 新生分班任务班级配置
+-- ----------------------------------------------------------------------------------------
+DROP TABLE IF EXISTS banding_task_class;   
+CREATE TABLE `banding_task_class` (
+  `id` BIGINT NOT NULL,
+  `create_user_id` BIGINT DEFAULT NULL,
+  `create_date` DATETIME(3) DEFAULT NULL,
+  `modify_user_id` BIGINT DEFAULT NULL,
+  `modify_date` DATETIME(3) DEFAULT NULL,
+  `delete_mark` INT DEFAULT NULL,
+  `enabled_mark` INT DEFAULT NULL,
+  `sort_code` INT DEFAULT NULL,
+  `name` VARCHAR(50) DEFAULT NULL COMMENT '规则名称',
+  `major_set_id` BIGINT DEFAULT NULL COMMENT '专业方向id',
+  `number` INT DEFAULT NULL COMMENT '班级人数',
+  `teacher_id` BIGINT DEFAULT NULL COMMENT '班主任id',
+  `classroom_id` BIGINT DEFAULT NULL COMMENT '教室id',
+  `is_order_class` INT DEFAULT NULL COMMENT '是否订单班(0:否 1:是)',
+  `height` DECIMAL(6,1) DEFAULT NULL COMMENT '身高',
+  `score` DECIMAL(6,1) DEFAULT NULL COMMENT '分数',
+  `banding_task_id` BIGINT DEFAULT NULL COMMENT '分班任务(banding_task)',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='新生分班任务班级配置';
+
+
+-- ----------------------------------------------------------------------------------------
+-- 新生分班任务班级学生关系表
+-- ----------------------------------------------------------------------------------------
+DROP TABLE IF EXISTS banding_task_class_student;   
+CREATE TABLE `banding_task_class_student` (
+  `id` BIGINT NOT NULL,
+  `create_user_id` BIGINT DEFAULT NULL,
+  `create_date` DATETIME(3) DEFAULT NULL,
+  `modify_user_id` BIGINT DEFAULT NULL,
+  `modify_date` DATETIME(3) DEFAULT NULL,
+  `delete_mark` INT DEFAULT NULL,
+  `enabled_mark` INT DEFAULT NULL,
+  `sort_code` INT DEFAULT NULL,
+  `banding_task_class_id` BIGINT DEFAULT NULL COMMENT '分班表的id',
+  `new_student_id` BIGINT DEFAULT NULL COMMENT '新生id',
+  `status` INT DEFAULT NULL COMMENT '状态(0:未确认 1:已确认)',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='新生分班任务班级学生关系表';
+
+DROP TABLE IF EXISTS ods_zzxxgkjcsj;   
+CREATE TABLE `ods_zzxxgkjcsj` (
+  `id` BIGINT NOT NULL,
+  `create_user_id` BIGINT DEFAULT NULL COMMENT '创建人',
+  `create_date` DATE DEFAULT NULL COMMENT '创建时间',
+  `modify_user_id` BIGINT DEFAULT NULL COMMENT '修改人',
+  `modify_date` DATE DEFAULT NULL COMMENT '修改日期',
+  `delete_mark` INT DEFAULT NULL COMMENT '删除标记',
+  `enabled_mark` INT DEFAULT NULL COMMENT '有效标记',
+  `school_name` VARCHAR(500) DEFAULT NULL COMMENT '学校名称',
+  `school_code` VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '学校代码',
+  `school_institution_code` VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '学校机构代码',
+  `school_type` VARCHAR(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '学校类别',
+  `organizer_name` VARCHAR(255) DEFAULT NULL COMMENT '学校举办者名称',
+  `school_organizer_nature` VARCHAR(500) DEFAULT NULL COMMENT '学校举办者性质',
+  `superintendent` VARCHAR(255) DEFAULT NULL COMMENT '学校负责人姓名',
+  `establish_date` DATE DEFAULT NULL COMMENT '建校年月',
+  PRIMARY KEY (`id`)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='学校基本数据子类表';
+
+
+ALTER TABLE ods_zzxxgkjcsj
+ADD  location VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '学校所在地行政区域', 
+ADD  supervisory_department VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '学校主管部门',
+ADD  exit_bandwidth VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '学校园出口带宽',
+ADD  backbone_bandwidth VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '校园主干网带宽',
+ADD  wired_access INT DEFAULT NULL COMMENT '有线网络接入数',
+ADD  wireless_access INT DEFAULT NULL COMMENT '无线网络接入数',
+ADD  multimedia_classrooms INT DEFAULT NULL COMMENT '多媒体教室数',
+ADD  is_double_excellence VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '是否双优学校';
+
+DROP TABLE IF EXISTS ods_zzxqjcsj;   
+CREATE TABLE `ods_zzxqjcsj` (
+  `id` BIGINT NOT NULL,
+  `create_user_id` BIGINT DEFAULT NULL COMMENT '创建人',
+  `create_date` DATE DEFAULT NULL COMMENT '创建时间',
+  `modify_user_id` BIGINT DEFAULT NULL COMMENT '修改人',
+  `modify_date` DATE DEFAULT NULL COMMENT '修改日期',
+  `delete_mark` INT DEFAULT NULL COMMENT '删除标记',
+  `enabled_mark` INT DEFAULT NULL COMMENT '有效标记',
+  `school_id` BIGINT DEFAULT NULL COMMENT '所属学校(ods_zzxxgkjcsj_id)',
+  `school_number` VARCHAR(20) DEFAULT NULL COMMENT '校区编号',
+  `name` VARCHAR(255) DEFAULT NULL COMMENT '校区名称',
+  `name_s` VARCHAR(255) DEFAULT NULL COMMENT '校区简称',
+  `administrative_location` VARCHAR(500) DEFAULT NULL COMMENT '校区所在地行政区域',
+  `address` VARCHAR(500) DEFAULT NULL COMMENT '地址',
+  `phone` BIGINT DEFAULT NULL COMMENT '校区联系电话',
+  `postal_code` VARCHAR(100) DEFAULT NULL COMMENT '校区邮政编码',
+  `build_date` DATE DEFAULT NULL COMMENT '校区成立日期',
+  `director` VARCHAR(255) DEFAULT NULL COMMENT '校区负责人',
+  PRIMARY KEY (`id`)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='校区基本数据子类表';
+
+DROP TABLE IF EXISTS student_psychological;  
+CREATE TABLE `student_psychological` (
+  `id` BIGINT NOT NULL,
+  `create_user_id` BIGINT DEFAULT NULL COMMENT '创建人',
+  `create_date` DATE DEFAULT NULL COMMENT '创建时间',
+  `modify_user_id` BIGINT DEFAULT NULL COMMENT '修改人',
+  `modify_date` DATE DEFAULT NULL COMMENT '修改日期',
+  `delete_mark` INT DEFAULT NULL COMMENT '删除标记',
+  `enabled_mark` INT DEFAULT NULL COMMENT '有效标记',
+  `class_id` BIGINT DEFAULT NULL COMMENT '学生班级id',
+  `student_id` BIGINT DEFAULT NULL COMMENT '学生',
+  `gender` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '学生性别',
+  `identity_card` VARCHAR(255) DEFAULT NULL COMMENT '身份证号',
+  `teacher_id` BIGINT DEFAULT NULL COMMENT '班主任id',
+  `appoint_time` DATETIME DEFAULT NULL,
+  `remark` VARCHAR(1000) DEFAULT NULL COMMENT '备注',
+  `confirm_time` DATETIME DEFAULT NULL COMMENT '确认时间',
+  `location` VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '咨询地点',
+  `student_conclusion` VARCHAR(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '心理咨询结论(学生寄语)',
+  `teacher_conclusion` VARCHAR(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '心理咨询结论(班主任寄语)',
+  `parent_conclusion` VARCHAR(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '心理咨询结论(家长寄语)',
+  `status` INT DEFAULT NULL COMMENT '流程状态(1:结束,0:未结束)',
+  PRIMARY KEY (`id`)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='学生心理咨询表';
+
+DROP TABLE IF EXISTS student_infection; 
+CREATE TABLE `student_infection` (
+  `id` BIGINT NOT NULL,
+  `create_user_id` BIGINT DEFAULT NULL COMMENT '创建人',
+  `create_date` DATE DEFAULT NULL COMMENT '创建时间',
+  `modify_user_id` BIGINT DEFAULT NULL COMMENT '修改人',
+  `modify_date` DATE DEFAULT NULL COMMENT '修改日期',
+  `delete_mark` INT DEFAULT NULL COMMENT '删除标记',
+  `enabled_mark` INT DEFAULT NULL COMMENT '有效标记',
+  `class_id` BIGINT DEFAULT NULL COMMENT '学生班级id',
+  `teacher_id` BIGINT DEFAULT NULL COMMENT '班主任id',
+  `student_id` BIGINT DEFAULT NULL COMMENT '学生',
+  `gender` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '学生性别',
+  `identity_card` VARCHAR(255) DEFAULT NULL COMMENT '身份证号',
+  `infect_time` DATE DEFAULT NULL COMMENT '感染时间',
+  `infect_name` VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '传染病名称',
+  `disposal_method` VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '处理方式',
+  `status` INT DEFAULT NULL COMMENT '流程状态(1:结束,0:未结束)',
+  PRIMARY KEY (`id`)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='学生传染病登记表';
+
+ALTER TABLE `base_class`   
+  CHANGE `delete_mark` `delete_mark` INT DEFAULT 0  NOT NULL   COMMENT '删除标记',
+  CHANGE `enabled_mark` `enabled_mark` INT DEFAULT 1  NOT NULL   COMMENT '有效标志';
+  
+ALTER TABLE `banding_task_class`   
+  ADD INDEX (`banding_task_id`),
+  ADD INDEX (`major_set_id`),
+  ADD INDEX (`teacher_id`),
+  ADD INDEX (`classroom_id`);
+
+ALTER TABLE `banding_task_class_student`   
+  ADD INDEX (`banding_task_class_id`),
+  ADD INDEX (`new_student_id`);
+
+ALTER TABLE `banding_task_major_condition`   
+  ADD INDEX (`banding_task_id`),
+  ADD INDEX (`major_set_id`);
+
+ALTER TABLE `banding_task_rule`   
+  ADD INDEX (`banding_rule_id`),
+  ADD INDEX (`banding_task_id`);
+  
+ALTER TABLE `banding_task_class`   
+  ADD COLUMN `class_type` VARCHAR(50) NULL   COMMENT '班级类型(xjr_dictionary_item[class_type])' AFTER `banding_task_id`;

+ 7 - 5
src/main/resources/sqlScript/20240708_sql.sql

@@ -93,13 +93,13 @@ CREATE TABLE student_cert_table
     class_name         varchar(64)  not null comment '学生班级',
     teacher_id         bigint       NOT NULL COMMENT '教师id',
     teacher_name       varchar(64)  NOT NULL COMMENT '教师姓名',
-    cert_name          varchar(255) NOT NULL COMMENT '证书名称',
-    cert_id            varchar(128) NOT NULL COMMENT '证书编号',
-    cert_grade         varchar(64)  NOT NULL COMMENT '证书等级',
+    cert_name          varchar(512) NOT NULL COMMENT '证书名称',
+    cert_id            varchar(256) NOT NULL COMMENT '证书编号',
+    cert_grade         varchar(64)  NULL COMMENT '证书等级',
     cert_organizations varchar(255) NOT NULL COMMENT '证书发放机构',
-    cert_date          date         NOT NULL COMMENT '证书发放日期',
+    cert_date          date         NULL COMMENT '证书发放日期',
     cert_electronic    varchar(64)  NOT NULL COMMENT '是否支持电子证书(0:否,1:是)',
-    remark             varchar(255) DEFAULT NULL COMMENT '备注',
+    remark             varchar(1024) DEFAULT NULL COMMENT '备注',
     file_id            longtext     NOT NULL COMMENT '附件',
     status             int          NOT NULL COMMENT '状态(1:结束 0:未结束)'
 ) ENGINE = InnoDB
@@ -149,6 +149,8 @@ CREATE TABLE `scholarship_bursary_applications`
     `enabled_mark`                         int          NOT NULL COMMENT '有效标志',
     `sort_code`                            int          NULL DEFAULT NULL COMMENT '序号',
     `class_name`                           varchar(256) NOT NULL COMMENT '班级',
+    `teacher_id`                           bigint       NOT NULL COMMENT '班主任id',
+    `teacher_name`                         varchar(256) NOT NULL COMMENT '班主任姓名',
     `student_name`                         varchar(64)  not null comment '学生姓名',
     `student_gender`                       varchar(32)  NOT NULL COMMENT '学生性别',
     `identification_number`                varchar(64)  NOT NULL COMMENT '身份证号',

+ 12 - 11
src/main/resources/sqlScript/20240711_sql.sql

@@ -39,8 +39,8 @@ CREATE TABLE `training_protuct`
     `training_number`           varchar(32)  NOT NULL COMMENT '实训室号',
     `department_id`             bigint       NOT NULL COMMENT '所属机构(xjr_department)',
     `department_name`           varchar(255) NOT NULL COMMENT '所属机构',
-    `school_training_base_id`   bigint       NOT NULL COMMENT '所属实训基地id(school_training_base)',
-    `school_training_base_name` varchar(255) NOT NULL COMMENT '所属实训基地',
+    `school_training_base_id`   bigint       NULL COMMENT '所属实训基地id(school_training_base)',
+    `school_training_base_name` varchar(255) NULL COMMENT '所属实训基地',
     `training_createdate`       date         NOT NULL COMMENT '实验室建立日期',
     `contact_id`                bigint       NOT NULL COMMENT '负责人(xjr_user)',
     `contact_name`              varchar(255) NOT NULL COMMENT '负责人',
@@ -71,20 +71,21 @@ create table training_project_safe
     base_major_id          bigint       not null comment '归口专业id(base_major)',
     base_major_name        varchar(255) not null comment '归口专业名称',
     dummy_pro              varchar(25)  not null comment '是否虚拟仿真实训项目',
-    skill_request          varchar(255) comment '技能要求',
-    assorted_resource_name varchar(512) comment '配套实训资源名称',
-    model_count            int comment '模块数量',
-    assess_manner          varchar(255) comment '考核方式',
+    skill_request          varchar(255) NULL comment '技能要求',
+    assorted_resource_name varchar(512) NULL comment '配套实训资源名称',
+    model_count            int          NULL comment '模块数量',
+    assess_manner          varchar(255) NULL comment '考核方式',
     out_service            varchar(25)  not null comment '是否对外服务',
-    student_class_count    int comment '学生实训课时数',
+    student_class_count    double       NULL comment '学生实训课时数',
     study_year             varchar(255) not null comment '学年(度)',
-    base_semester_id       bigint not null comment '学期id(base_semester)',
+    base_semester_id       bigint       not null comment '学期id(base_semester)',
     base_semester_name     varchar(255) not null comment '学期名称',
-    training_address       varchar(255) comment '实训地点',
-    training_protuct_id    bigint comment '校内实训室id',
-    training_protuct_name  varchar(255) comment '校内实训室'
+    training_address       varchar(255) NULL comment '实训地点',
+    training_protuct_id    bigint       NULL comment '校内实训室id',
+    training_protuct_name  varchar(255) NULL comment '校内实训室'
 ) comment '实训项目维护';
 
+-- 实训教学过程
 DROP TABLE IF EXISTS `practical_tt_records`;
 CREATE TABLE `practical_tt_records`
 (

+ 182 - 0
src/main/resources/sqlScript/20240717_sql.sql

@@ -0,0 +1,182 @@
+-- 党员管理数据表
+DROP TABLE IF EXISTS `party_member_manage`;
+CREATE TABLE party_member_manage
+(
+    id                bigint       not null comment '主键编号' primary key,
+    create_user_id    bigint       null comment '创建人',
+    create_date       datetime     null comment '创建时间',
+    modify_user_id    bigint       null comment '修改人',
+    modify_date       datetime     null comment '修改时间',
+    delete_mark       int          not null comment '删除标记',
+    enabled_mark      int          not null comment '有效标志',
+    sort_code         int          null comment '序号',
+    party_member_name VARCHAR(36)  not null comment '党员姓名',
+    party_member_id   bigint       not null comment '党员编号',
+    party_member_oa   VARCHAR(64)  not null comment '党员oa',
+    party_tissue_name VARCHAR(256) not null comment '所属党组织名称',
+    party_tissue_code bigint       not null comment '所属党组织编号',
+    party_tissue_type varchar(256) not null comment '党组织类型',
+    new_party_member  VARCHAR(25)  not null comment '是否新党员',
+    member_type       VARCHAR(25)  null comment '新党员类型',
+    growing_status    VARCHAR(25)  null comment '党员发展状态',
+    activists_date    DATE         null comment '成为积极分子日期',
+    prepare_member    DATE         null comment '成为预备党员日期',
+    formal_member     DATE         null comment '成为正式党员日期'
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4
+    COMMENT ='党员管理数据表';
+
+# 数据字典项               		编号                          			备注
+# 新党员类型代码                 party_member_type			          		新党员类型代码
+# 字典名        编号                     字典值
+# 教职工        member_type_1            1
+# 学生          member_type_2            2
+# 其他          member_type_3            9
+
+
+-- 党组织管理
+DROP TABLE IF EXISTS `party_tissue_manager`;
+CREATE TABLE `party_tissue_manager`
+(
+    id                    bigint       not null comment '主键编号'
+        primary key,
+    create_user_id        bigint       null comment '创建人',
+    create_date           datetime     null comment '创建时间',
+    modify_user_id        bigint       null comment '修改人',
+    modify_date           datetime     null comment '修改时间',
+    delete_mark           int          not null comment '删除标记',
+    enabled_mark          int          not null comment '有效标志',
+    sort_code             int          null comment '序号',
+    party_tissue_name     varchar(256) not null comment '党组织名称',
+    party_tissue_code     varchar(256) not null comment '党组织编号',
+    party_tissue_type     varchar(256) not null comment '党组织类型',
+    superior_party_tissue varchar(256) null comment '隶属上级党组织',
+    leadership_name       varchar(256) not null comment '党内领导姓名',
+    leadership_number     varchar(256) null comment '党内领导工号',
+    leadership_position   varchar(256) null comment '党内领导职务',
+    party_counter         int          null comment '党组织党员数量'
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4
+    comment '党组织管理';
+
+
+# 数据字典
+# party_typ 党组织类型
+# 值 名称  编号
+# 1 党委   party_typ1
+# 2 党总支 party_typ2
+# 3 党支部 party_typ3
+
+# party_lead 党内领导职务
+# 值  名称       编号
+# 1  书记       par_lead1
+# 2  副书记      par_lead2
+# 3  组织委员     par_lead3
+# 4  宣传委员     par_lead4
+# 5  纪检委员     par_lead5
+# 6  青年委员     par_lead6
+# 7  统战委员     par_lead7
+# 8  保密委员     par_lead8
+# 9  妇女委员     par_lead9
+# 99 其他       par_lead99
+
+-- 证明申请
+DROP TABLE IF EXISTS `prove_application`;
+CREATE TABLE `prove_application`
+(
+    `id`                        bigint       NOT NULL COMMENT '主键编号',
+    `create_user_id`            bigint       NULL DEFAULT NULL COMMENT '创建人',
+    `create_date`               datetime     NULL DEFAULT NULL COMMENT '创建时间',
+    `modify_user_id`            bigint       NULL DEFAULT NULL COMMENT '修改人',
+    `modify_date`               datetime     NULL DEFAULT NULL COMMENT '修改时间',
+    `delete_mark`               int          NOT NULL COMMENT '删除标记',
+    `enabled_mark`              int          NOT NULL COMMENT '有效标志',
+    `sort_code`                 int          NULL DEFAULT NULL COMMENT '序号',
+    `department_id`             bigint       NOT NULL comment '所在部门id',
+    `department`                varchar(255) NOT NULL COMMENT '所在部门',
+    `application_id`            bigint       NOT NULL COMMENT '申请人id',
+    `application_name`          varchar(255) NULL DEFAULT NULL COMMENT '申请人',
+    `application_time`          datetime     NULL DEFAULT NULL COMMENT '申请时间',
+    `application_c_explanation` varchar(255) NULL DEFAULT NULL COMMENT '申请证明说明',
+    `status`                    int          NOT NULL COMMENT '状态',
+    PRIMARY KEY (`id`)
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4
+    COMMENT ='证明申请';
+
+
+-- 报销记录表
+DROP TABLE IF EXISTS `billing_reimbursement`;
+create table billing_reimbursement
+(
+    id                   bigint         NOT NULL comment '主键编号'
+        primary key,
+    create_user_id       bigint         NULL comment '创建人',
+    create_date          datetime       NULL comment '创建时间',
+    modify_user_id       bigint         NULL comment '修改人',
+    modify_date          datetime       NULL comment '修改时间',
+    delete_mark          int            NOT NULL comment '删除标记',
+    enabled_mark         int            NOT NULL comment '有效标志',
+    sort_code            int            NULL comment '序号',
+    department_id        bigint         NOT NULL comment '所在部门id',
+    department_name      varchar(255)   NOT NULL comment '所在部门',
+    applicant_id         bigint         NOT NULL comment '申请人id',
+    applicant_name       varchar(255)   NOT NULL comment '申请人',
+    department_manger_id bigint         NULL comment '所在部门主任id',
+    aply_time            datetime       NOT NULL comment '申请时间',
+    gotrip_time          date           NOT NULL comment '出差开始日期',
+    end_time             date           NOT NULL comment '出差结束日期',
+    start_end_o_postion  varchar(255)   NOT NULL comment '起讫地点',
+    city_in              int            NOT NULL comment '市内市外',         -- 0为室内,1为市外
+    business_trip_day    int            NOT NULL comment '天数',
+    business_trip_reason varchar(512)   NOT NULL comment '出差事由',
+    is_car               int            NOT NULL comment '是否派车',         -- 0为不派车,1为派车,
+    city_traffic_fee     DECIMAL(10, 2) NULL comment '城市交通费',
+    b_trip_traffic_fee   DECIMAL(10, 2) NULL comment '出差地交通费',
+    is_lodging           int            NOT NULL comment '主办方是否包食宿', -- 0为不包,1为包
+    food_fee             DECIMAL(10, 2) NULL comment '伙食补助费',
+    lodging_fee          DECIMAL(10, 2) NULL comment '住宿费',
+    total_amount         DECIMAL(10, 2) NOT NULL comment '报销费用合计(元)',
+    file_id              longtext       NOT NULL COMMENT '附件',
+    `status`             int            NOT NULL COMMENT '状态'
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4
+    comment '报销记录表';
+
+
+-- 社团活动表
+DROP TABLE IF EXISTS `club_activities`;
+CREATE TABLE `club_activities`
+(
+    `id`                      bigint       NOT NULL COMMENT '主键编号',
+    `create_user_id`          bigint       NULL DEFAULT NULL COMMENT '创建人',
+    `create_date`             datetime     NULL DEFAULT NULL COMMENT '创建时间',
+    `modify_user_id`          bigint       NULL DEFAULT NULL COMMENT '修改人',
+    `modify_date`             datetime     NULL DEFAULT NULL COMMENT '修改时间',
+    `delete_mark`             int          NOT NULL COMMENT '删除标记',
+    `enabled_mark`            int          NOT NULL COMMENT '有效标志',
+    `sort_code`               int          NULL DEFAULT NULL COMMENT '序号',
+    `club_activities_name`    varchar(255) NOT NULL COMMENT '社团活动名称',
+    `club_activities_content` text         NULL COMMENT '社团活动内容',
+    `activity_type`           varchar(255) NOT NULL COMMENT '活动类型',
+    `activity_location`       varchar(255) NULL DEFAULT NULL COMMENT '活动地点',
+    `leader`                  varchar(255) NULL DEFAULT NULL COMMENT '负责人',
+    `user_id`                 bigint       NOT NULL COMMENT '用户id',
+    `student_name`            varchar(255) NOT NULL COMMENT '参与学生姓名',
+    `student_id`              varchar(255) NOT NULL COMMENT '学号',
+    `start_time`              datetime     NOT NULL COMMENT '活动开始时间',
+    `end_time`                datetime     NULL DEFAULT NULL COMMENT '活动结束时间',
+    PRIMARY KEY (`id`)
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4
+    COMMENT = '社团活动表';
+
+# 数据字典
+# activity_type 活动类型
+# 值  名称      编号
+# 1   公益服务  act_type_1
+# 2   科学技术  act_type_2
+# 3   理论学校  act_type_3
+# 4   文艺体育  act_type_4
+
+

+ 363 - 0
src/main/resources/sqlScript/20240718_sql.sql

@@ -0,0 +1,363 @@
+-- 党员干部学习
+DROP TABLE IF EXISTS `party_cadre_study`;
+CREATE TABLE `party_cadre_study`
+(
+    id                        BIGINT       NOT NULL COMMENT '主键编号'
+        PRIMARY KEY,
+    create_user_id            BIGINT       NULL COMMENT '创建人',
+    create_date               DATETIME     NULL COMMENT '创建时间',
+    modify_user_id            BIGINT       NULL COMMENT '修改人',
+    modify_date               DATETIME     NULL COMMENT '修改时间',
+    delete_mark               INT          NOT NULL COMMENT '删除标记',
+    enabled_mark              INT          NOT NULL COMMENT '有效标志',
+    sort_code                 INT          NULL COMMENT '序号',
+
+    party_tissue_id           BIGINT       NOT NULL COMMENT '党组织主键id(party_tissue_manager)',
+    party_tissue_name         VARCHAR(256) NOT NULL COMMENT '党组织名称',
+    party_tissue_code         VARCHAR(256) NOT NULL COMMENT '党组织编号',
+
+    party_train_way_carrier   VARCHAR(500) NOT NULL COMMENT '党员干部学习培训主要途径和载体',
+    party_train_way_content   VARCHAR(500) NOT NULL COMMENT '党员干部学习培训内容',
+
+    start_time                DATE         NOT NULL COMMENT '活动开始日期',
+    end_time                  DATE         NOT NULL COMMENT '活动结束日期',
+
+    participate_teacher_count INT          NULL COMMENT '参与教师数',
+    participate_student_count INT          NULL COMMENT '参与学生数'
+) ENGINE = INNODB
+  DEFAULT CHARSET = utf8mb4
+    COMMENT '党员干部学习';
+
+-- 党员干部学习活动参与人
+DROP TABLE IF EXISTS `party_cadre_study_participant`;
+CREATE TABLE `party_cadre_study_participant`
+(
+    id                   BIGINT       NOT NULL COMMENT '主键编号'
+        PRIMARY KEY,
+    create_user_id       BIGINT       NULL COMMENT '创建人',
+    create_date          DATETIME     NULL COMMENT '创建时间',
+    modify_user_id       BIGINT       NULL COMMENT '修改人',
+    modify_date          DATETIME     NULL COMMENT '修改时间',
+    delete_mark          INT          NOT NULL COMMENT '删除标记',
+    enabled_mark         INT          NOT NULL COMMENT '有效标志',
+    sort_code            INT          NULL COMMENT '序号',
+
+    party_cadre_study_id BIGINT       NULL COMMENT '党员干部学习主键id(party_cadre_study)',
+    participant_id       BIGINT       NULL COMMENT '活动参与人id',
+    participant_remark   VARCHAR(256) NULL COMMENT '活动参与人类型',
+    participant_username VARCHAR(256) NULL COMMENT '活动参与人oa',
+    participant_user_id  VARCHAR(256) NULL COMMENT '活动参与人学号,工号',
+    participant_name     VARCHAR(256) NULL COMMENT '活动参与人姓名'
+) ENGINE = INNODB
+  DEFAULT CHARSET = utf8mb4
+    COMMENT '党员干部学习活动参与人';
+
+# 数据字典
+# par_part 党员干部学习培训内容
+# 值  名称               编号
+# 1 党的理论              par_part1
+# 2 相关政策文件            par_part2
+# 3 党规党纪及国家法律法规   par_part3
+# 4 教育教学业务            par_part4
+# 5 学校管理              par_part5
+# 6 文化建设              par_part6
+# 7 经济方面              par_part7
+# 8 互联网与新媒体方面     par_part8
+# 9 心理健康              par_part9
+# 10 师德师风             par_part10
+# 99 其他                 par_part99
+#
+# party_way 党员干部学习培训主要途径和载体
+# 值  名称               编号
+# 1  实践活动             party_way1
+# 2  会议               party_way2
+# 3  讲座报告             party_way3
+# 4  学校定期集中学习         party_way4
+# 5  支部定期集中学习         party_way5
+# 6   微信 QQ               party_way6
+# 7  移动端培训平台          party_way7
+# 8  分发图书资料           party_way8
+# 9  个人学习             party_way9
+# 10 在线教育网站           party_way10
+# 11 参观学习             party_way11
+# 99 其他                   party_way99
+-- 党课管理数据表
+DROP TABLE IF EXISTS party_class_manage;
+CREATE TABLE party_class_manage
+(
+    id                        BIGINT       NOT NULL COMMENT '主键编号' PRIMARY KEY,
+    create_user_id            BIGINT       NULL COMMENT '创建人',
+    create_date               DATETIME     NULL COMMENT '创建时间',
+    modify_user_id            BIGINT       NULL COMMENT '修改人',
+    modify_date               DATETIME     NULL COMMENT '修改时间',
+    delete_mark               INT          NOT NULL COMMENT '删除标记',
+    enabled_mark              INT          NOT NULL COMMENT '有效标志',
+    sort_code                 INT          NULL COMMENT '序号',
+
+    party_tissue_name         VARCHAR(256) NOT NULL COMMENT '党组织名称',
+    party_tissue_code         VARCHAR(256) NOT NULL COMMENT '党组织编号',
+    party_tissue_id           BIGINT       NOT NULL COMMENT '党组织主键id(party_tissue_manager)',
+
+    activity_type             VARCHAR(256) NULL COMMENT '活动形式',
+    speaker_name              VARCHAR(256) NULL COMMENT '党课主讲人',
+
+    start_time                DATE         NOT NULL COMMENT '活动开始时间',
+    end_time                  DATE         NOT NULL COMMENT '活动结束时间',
+
+    activities_content        TEXT         NULL COMMENT '活动内容',
+
+    participate_teacher_count INT          NULL COMMENT '参与教师数',
+    participate_student_count INT          NULL COMMENT '参与学生数'
+
+) ENGINE = INNODB
+  DEFAULT CHARSET = utf8mb4
+    COMMENT ='党课管理数据表';
+
+-- 党课活动参与人表
+DROP TABLE IF EXISTS party_class_manage_participant;
+CREATE TABLE party_class_manage_participant
+(
+    id                    BIGINT       NOT NULL COMMENT '主键编号' PRIMARY KEY,
+    create_user_id        BIGINT       NULL COMMENT '创建人',
+    create_date           DATETIME     NULL COMMENT '创建时间',
+    modify_user_id        BIGINT       NULL COMMENT '修改人',
+    modify_date           DATETIME     NULL COMMENT '修改时间',
+    delete_mark           INT          NOT NULL COMMENT '删除标记',
+    enabled_mark          INT          NOT NULL COMMENT '有效标志',
+    sort_code             INT          NULL COMMENT '序号',
+
+    party_class_manage_id BIGINT       NOT NULL COMMENT '党课管理id',
+
+    participant_id        BIGINT       NULL COMMENT '活动参与人id',
+    participant_remark    VARCHAR(256) NULL COMMENT '活动参与人类型',
+    participant_username  VARCHAR(256) NULL COMMENT '活动参与人oa',
+    participant_user_id   VARCHAR(256) NULL COMMENT '活动参与人学号,工号',
+    participant_name      VARCHAR(256) NULL COMMENT '活动参与人姓名'
+
+) ENGINE = INNODB
+  DEFAULT CHARSET = utf8mb4
+    COMMENT ='党课活动参与人表';
+
+-- 党建活动
+DROP TABLE IF EXISTS `party_build_event`;
+CREATE TABLE party_build_event
+(
+    id                 BIGINT       NOT NULL COMMENT '主键编号'
+        PRIMARY KEY,
+    create_user_id     BIGINT       NULL COMMENT '创建人',
+    create_date        DATETIME     NULL COMMENT '创建时间',
+    modify_user_id     BIGINT       NULL COMMENT '修改人',
+    modify_date        DATETIME     NULL COMMENT '修改时间',
+    delete_mark        INT          NOT NULL COMMENT '删除标记',
+    enabled_mark       INT          NOT NULL COMMENT '有效标志',
+    sort_code          INT          NULL COMMENT '序号',
+
+    event_type         VARCHAR(255) NOT NULL COMMENT '活动类型',
+    party_tissue_id    BIGINT       NOT NULL COMMENT '党组织主键id(party_tissue_manager)',
+    party_tissue_name  VARCHAR(256) NOT NULL COMMENT '党组织名称',
+    party_tissue_code  VARCHAR(256) NOT NULL COMMENT '党组织编号',
+    event_address      VARCHAR(255) NULL COMMENT '活动地点',
+    event_content      TEXT         NULL COMMENT '活动内容',
+    event_start_time   DATE         NOT NULL COMMENT '活动开始时间',
+    event_end_time     DATE         NOT NULL COMMENT '活动结束时间',
+    attend_teacher_num INT          NULL COMMENT '参于教师数',
+    attend_student_num INT          NULL COMMENT '参于学生数'
+) ENGINE = INNODB
+  DEFAULT CHARSET = utf8mb4
+    COMMENT ='党建活动';
+
+-- 党建活动参与人员
+DROP TABLE IF EXISTS `party_build_event_participant`;
+CREATE TABLE `party_build_event_participant`
+(
+    id                   BIGINT       NOT NULL COMMENT '主键编号'
+        PRIMARY KEY,
+    create_user_id       BIGINT       NULL COMMENT '创建人',
+    create_date          DATETIME     NULL COMMENT '创建时间',
+    modify_user_id       BIGINT       NULL COMMENT '修改人',
+    modify_date          DATETIME     NULL COMMENT '修改时间',
+    delete_mark          INT          NOT NULL COMMENT '删除标记',
+    enabled_mark         INT          NOT NULL COMMENT '有效标志',
+    sort_code            INT          NULL COMMENT '序号',
+
+    party_build_event_id BIGINT       NULL COMMENT '党建活动主键id(party_build_event)',
+    participant_id       BIGINT       NULL COMMENT '参与活动人id',
+    participant_remark   VARCHAR(256) NULL COMMENT '活动参与人类型',
+    participant_username VARCHAR(256) NULL COMMENT '活动参与人oa',
+    participant_user_id  VARCHAR(256) NULL COMMENT '活动参与人学号,工号',
+    participant_name     VARCHAR(256) NULL COMMENT '活动参与人姓名'
+) ENGINE = INNODB
+  DEFAULT CHARSET = utf8mb4
+    COMMENT '党建活动参与人员';
+
+-- --------------------------------------------------------------------------------------------
+-- 考试科目成绩表
+-- --------------------------------------------------------------------------------------------
+DROP TABLE IF EXISTS exam_subject_score;   
+CREATE TABLE `exam_subject_score` (
+  `id` BIGINT NOT NULL,
+  `create_user_id` BIGINT DEFAULT NULL COMMENT '创建人',
+  `create_date` DATETIME DEFAULT NULL COMMENT '创建时间',
+  `modify_user_id` BIGINT DEFAULT NULL COMMENT '修改人',
+  `modify_date` DATETIME DEFAULT NULL COMMENT '修改日期',
+  `delete_mark` INT DEFAULT NULL COMMENT '删除标记',
+  `enabled_mark` INT DEFAULT NULL COMMENT '有效标记',
+  `semester_id` BIGINT DEFAULT NULL COMMENT '学期',
+  `milexamname` VARCHAR(50) DEFAULT NULL COMMENT '考试计划',
+  `milexamid` BIGINT DEFAULT NULL COMMENT '考试计划id',
+  `course_subject_id` BIGINT DEFAULT NULL COMMENT '课程科目id(base_course_subject)',
+  `coursename` VARCHAR(50) DEFAULT NULL COMMENT '课程名称',
+  `score` INT DEFAULT NULL COMMENT '分数',
+  `class_ranking` INT DEFAULT NULL COMMENT '班级排名',
+  `grade_ranking` INT DEFAULT NULL COMMENT '年级排名',
+  `user_id` BIGINT DEFAULT NULL COMMENT '学生id(xjr_user)',
+  PRIMARY KEY (`id`)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='考试科目成绩表';
+
+
+-- --------------------------------------------------------------------------------------------
+-- 晓羊策学考试计划表
+-- --------------------------------------------------------------------------------------------
+DROP TABLE IF EXISTS xycxedu_exam_list;   
+CREATE TABLE `xycxedu_exam_list` (
+  `id` BIGINT NOT NULL,
+  `create_date` DATETIME DEFAULT NULL COMMENT '创建时间',
+  `modify_date` DATETIME DEFAULT NULL COMMENT '修改日期',
+  `delete_mark` INT DEFAULT NULL COMMENT '删除标记',
+  `milexamid` BIGINT DEFAULT NULL COMMENT '考试计划id',
+  `milexamname` VARCHAR(50) DEFAULT NULL COMMENT '考试计划名称',
+  regyear INT DEFAULT NULL COMMENT '学年',
+  grade VARCHAR(20) DEFAULT NULL COMMENT '年级名称',
+  sdate DATE DEFAULT NULL COMMENT '考试时间',
+  PRIMARY KEY (`id`)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='晓羊策学考试计划表';
+
+-- --------------------------------------------------------------------------------------------
+-- 考试计划维护
+-- --------------------------------------------------------------------------------------------
+DROP TABLE IF EXISTS exam_plan;   
+CREATE TABLE `exam_plan` (
+  `id` BIGINT NOT NULL,
+  `create_user_id` BIGINT DEFAULT NULL COMMENT '创建人',
+  `create_date` DATETIME DEFAULT NULL COMMENT '创建时间',
+  `modify_user_id` BIGINT DEFAULT NULL COMMENT '修改人',
+  `modify_date` DATETIME DEFAULT NULL COMMENT '修改日期',
+  `delete_mark` INT DEFAULT NULL COMMENT '删除标记',
+  `enabled_mark` INT DEFAULT NULL COMMENT '有效标记',
+  `semester_id` BIGINT DEFAULT NULL COMMENT '学期id',
+  `name` VARCHAR(50) DEFAULT NULL COMMENT '考试计划名称',
+  milexamids TEXT DEFAULT NULL COMMENT '晓羊策学考试计划id',
+  PRIMARY KEY (`id`)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='考试计划维护';
+
+
+-- --------------------------------------------------------------------------------------------
+-- 活动信息
+-- --------------------------------------------------------------------------------------------
+DROP TABLE IF EXISTS activity_info;   
+CREATE TABLE `activity_info` (
+  `id` BIGINT NOT NULL,
+  `create_user_id` BIGINT DEFAULT NULL COMMENT '创建人',
+  `create_date` DATETIME DEFAULT NULL COMMENT '创建时间',
+  `modify_user_id` BIGINT DEFAULT NULL COMMENT '修改人',
+  `modify_date` DATETIME DEFAULT NULL COMMENT '修改日期',
+  `delete_mark` INT DEFAULT NULL COMMENT '删除标记',
+  `enabled_mark` INT DEFAULT NULL COMMENT '有效标记',
+  `name` VARCHAR(50) DEFAULT NULL COMMENT '赛事名称',
+  place VARCHAR(50) DEFAULT NULL COMMENT '活动地点',
+  start_date DATETIME DEFAULT NULL COMMENT '活动开始时间',
+  end_date DATETIME DEFAULT NULL COMMENT '活动结束时间',
+  `type` VARCHAR(50) DEFAULT NULL COMMENT '活动类型(xjr_dictionary_detail[match_activity_type])',
+  org_id BIGINT DEFAULT NULL COMMENT '组织部门(xjr_department)',
+  `enroll_end_time` DATETIME DEFAULT NULL COMMENT '报名结束时间',
+  `duty_person` VARCHAR(50) DEFAULT NULL COMMENT '活动负责人',
+  `duty_person_mobile` VARCHAR(50) DEFAULT NULL COMMENT '活动负责人电话',
+  `cover_file_id` VARCHAR(50) DEFAULT NULL COMMENT '封面图片',
+  `enroll_range` LONGTEXT DEFAULT NULL COMMENT '报名范围',
+  `status` INT DEFAULT 0 COMMENT '状态(0:未发布 1:报名中 2:报名结束 3:活动结束)',
+  `content` LONGTEXT DEFAULT NULL COMMENT '活动内容',
+  enterprise_id BIGINT DEFAULT NULL COMMENT '合作企业(company_coop)',
+  category INT DEFAULT NULL COMMENT '活动类别(1:校企合作活动 2:赛事活动)',
+  PRIMARY KEY (`id`)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='活动信息';
+
+-- --------------------------------------------------------------------------------------------
+-- 活动报名范围
+-- --------------------------------------------------------------------------------------------
+DROP TABLE IF EXISTS activity_enroll_range;
+CREATE TABLE `activity_enroll_range` (
+  `id` BIGINT NOT NULL,
+  `create_user_id` BIGINT DEFAULT NULL,
+  `create_date` DATETIME(3) DEFAULT NULL,
+  `modify_user_id` BIGINT DEFAULT NULL,
+  `modify_date` DATETIME(3) DEFAULT NULL,
+  `delete_mark` INT DEFAULT NULL,
+  `enabled_mark` INT DEFAULT NULL,
+  `class_id` BIGINT DEFAULT NULL COMMENT '所属班级id',
+  `dept_id` BIGINT DEFAULT NULL COMMENT '所属部门id',
+  `user_id` BIGINT DEFAULT NULL COMMENT '用id',
+  activity_info_id BIGINT DEFAULT NULL COMMENT '活动(activity)',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='活动报名范围';
+
+-- --------------------------------------------------------------------------------------------
+-- 活动登记表
+-- --------------------------------------------------------------------------------------------
+DROP TABLE IF EXISTS activity_enroll;   
+CREATE TABLE `activity_enroll` (
+  `id` BIGINT NOT NULL,
+  `create_user_id` BIGINT DEFAULT NULL COMMENT '创建人',
+  `create_date` DATETIME DEFAULT NULL COMMENT '创建时间',
+  `modify_user_id` BIGINT DEFAULT NULL COMMENT '修改人',
+  `modify_date` DATETIME DEFAULT NULL COMMENT '修改日期',
+  `delete_mark` INT DEFAULT NULL COMMENT '删除标记',
+  `enabled_mark` INT DEFAULT NULL COMMENT '有效标记',
+  activity_info_id BIGINT DEFAULT NULL COMMENT '活动(activity_info)',
+  user_id BIGINT DEFAULT NULL COMMENT '参与人(xjr_user)',
+  `status` INT DEFAULT 0 COMMENT '状态(0:待确认 1:未参与 2:已参与)',
+  PRIMARY KEY (`id`)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='活动登记表';
+
+ALTER TABLE  `patrol_offline_courses`   
+  ADD COLUMN `patrol_user_id` BIGINT NULL   COMMENT '巡课人(xjr_user)' AFTER `status`;
+  
+  
+-- --------------------------------------------------------------------------------------------
+-- 微信消息模板
+-- --------------------------------------------------------------------------------------------
+DROP TABLE IF EXISTS wechat_message_template;   
+CREATE TABLE `wechat_message_template` (
+  `id` BIGINT NOT NULL,
+  `create_user_id` BIGINT DEFAULT NULL COMMENT '创建人',
+  `create_date` DATETIME DEFAULT NULL COMMENT '创建时间',
+  `modify_user_id` BIGINT DEFAULT NULL COMMENT '修改人',
+  `modify_date` DATETIME DEFAULT NULL COMMENT '修改日期',
+  `delete_mark` INT DEFAULT NULL COMMENT '删除标记',
+  `enabled_mark` INT DEFAULT NULL COMMENT '有效标记',
+  `name` BIGINT DEFAULT NULL COMMENT '活动(activity_info)',
+  user_id DATETIME DEFAULT NULL COMMENT '参与人(xjr_user)',
+  STATUS INT DEFAULT 0 COMMENT '状态(0:待确认 1:未参与 2:已参与)',
+  PRIMARY KEY (`id`)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='活动登记表';
+
+
+-- ---------------------------------------------------------------------------------------------
+-- 奖助学金类别表增加字段
+-- ---------------------------------------------------------------------------------------------
+ALTER TABLE `base_student_scholarship_category`   
+  ADD COLUMN `category` VARCHAR(30) NULL   COMMENT '奖助学金类型(xjr_dictionary_item[s_b_categories])' AFTER `remark`,
+  ADD COLUMN `support_source` VARCHAR(200) NULL   COMMENT '资助单位/个人' AFTER `category`;publishing DATE
+
+-- ---------------------------------------------------------------------------------------------
+-- 教室信息增加字段
+-- ---------------------------------------------------------------------------------------------
+ALTER TABLE `base_classroom`   
+  ADD COLUMN `seat_number` INT NULL   COMMENT '座位数',
+  ADD COLUMN `explains` VARCHAR(500) NULL   COMMENT '描述';
+  
+-- ---------------------------------------------------------------------------------------------
+-- 自动分班增加锁定班级功能
+-- ---------------------------------------------------------------------------------------------
+ALTER TABLE `banding_task_class`   
+  ADD COLUMN `status` INT DEFAULT 0  NULL   COMMENT '是否锁定(0:否 1:是)' AFTER `class_type`;
+

+ 42 - 0
src/test/java/com/xjrsoft/module/job/ExamScoreDataTaskTest.java

@@ -0,0 +1,42 @@
+package com.xjrsoft.module.job;
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.xjrsoft.module.base.service.IBaseCourseSubjectService;
+import com.xjrsoft.module.xycxedu.service.IExamSubjectScoreService;
+import com.xjrsoft.module.xycxedu.service.IXycxeduExamListService;
+import com.xjrsoft.module.xycxedu.util.DataUtil;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * @author dzx
+ * @date 2024/7/18
+ */
+@SpringBootTest
+class ExamScoreDataTaskTest {
+    @Autowired
+    private IXycxeduExamListService examListService;
+
+    @Autowired
+    private IExamSubjectScoreService scoreService;
+
+    @Autowired
+    private IBaseCourseSubjectService courseService;
+    @Test
+    public void RefreshConnectionPool() {
+        doExecute();
+    }
+
+    void doExecute(){
+        //同步考试计划数据
+        DataUtil dataUtil = new DataUtil();
+        dataUtil.examListData(examListService);
+
+        //同步成绩
+        dataUtil.studentScoreData(examListService, scoreService, courseService);
+    }
+}

+ 67 - 0
src/test/java/com/xjrsoft/module/workflow/service/impl/WorkflowExecuteServiceImplTest.java

@@ -1,23 +1,90 @@
 package com.xjrsoft.module.workflow.service.impl;
 
+import cn.hutool.core.convert.Convert;
+import cn.hutool.db.Session;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.xjrsoft.common.page.PageOutput;
+import com.xjrsoft.module.form.dto.FormExecuteWorkflowUpdateDto;
+import com.xjrsoft.module.workflow.constant.WorkflowConstant;
+import com.xjrsoft.module.workflow.dto.RelationTaskPageDto;
+import com.xjrsoft.module.workflow.model.FormConfig;
+import com.xjrsoft.module.workflow.service.IWorkflowExecuteService;
+import com.xjrsoft.module.workflow.utils.WorkFlowUtil;
+import com.xjrsoft.module.workflow.vo.AllRecordListVo;
+import com.xjrsoft.module.workflow.vo.ProcessInfoVo;
+import com.xjrsoft.module.workflow.vo.RelationTaskPageVo;
+import com.xjrsoft.module.workflow.vo.UserTaskInfoVo;
+import org.apache.commons.lang3.tuple.Triple;
+import org.camunda.bpm.engine.HistoryService;
 import org.camunda.bpm.engine.RuntimeService;
 import org.camunda.bpm.engine.TaskService;
+import org.camunda.bpm.engine.history.HistoricProcessInstance;
+import org.camunda.bpm.engine.history.HistoricVariableInstance;
+import org.camunda.bpm.engine.task.Task;
+import org.camunda.bpm.engine.variable.VariableMap;
+import org.camunda.bpm.engine.variable.Variables;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 @SpringBootTest
 class WorkflowExecuteServiceImplTest {
 
     @Autowired
     private TaskService taskService;
 
+    @Autowired
+    private HistoryService historyService;
+
     @Autowired
     private RuntimeService runtimeService;
 
+    @Autowired
+    private IWorkflowExecuteService workflowExecuteService;
+
     @Test
     public void testDeleteTask(){
         //taskService.deleteTask("8abd7148-e58b-11ee-a00e-0242c8000007");
         runtimeService.deleteProcessInstance("45a1a081-f8a0-11ee-92e5-0242d200000c", "该流程已经停止");
     }
+
+    @Test
+    public void testGetRelationTaskPage(){
+        //taskService.deleteTask("8abd7148-e58b-11ee-a00e-0242c8000007");
+        PageOutput<RelationTaskPageVo> pageOutput = workflowExecuteService.getRelationTaskPage(new RelationTaskPageDto(){{
+            setSchemaId(1717071192907317250L);
+        }});
+        System.err.println(pageOutput.getList());
+    }
+
+    @Test
+    public void testAll(){
+//        List<HistoricProcessInstance> historicProcessInstances = historyService.createHistoricProcessInstanceQuery().processDefinitionId("process_hf6d97xl:37:f21a1fac-bb50-11ee-88a7-0242c8000006").list();
+//        List<HistoricVariableInstance> list = historyService.createHistoricVariableInstanceQuery().processInstanceId("1a428758-bb1c-11ee-88a7-0242c8000006").list();
+        HistoricVariableInstance formDataList = historyService.createHistoricVariableInstanceQuery()
+                .processInstanceId("1a428758-bb1c-11ee-88a7-0242c8000006")
+                .variableName("form_1717020683051728897_1702299402475")
+                .singleResult();
+        //List<HistoricVariableInstance> thisTaskFormData = formDataList.stream().filter(x -> x.getProcessInstanceId().equals("1a428758-bb1c-11ee-88a7-0242c8000006")).collect(Collectors.toList());
+        //拼凑成表单 Map<String, Map<String, Object>> 类型
+       // Map<String, Map<String, Object>> allFormData = new HashMap<>();
+        VariableMap variableMap = Variables.createVariables();
+
+//        for (HistoricVariableInstance variableInstance : thisTaskFormData) {
+//            allFormData.put(variableInstance.getName(), Convert.toMap(String.class, Object.class, variableInstance.getValue()));
+//        }
+        Map<String, Object> allFormData =  Convert.toMap(String.class, Object.class, formDataList.getValue());
+        System.err.println(formDataList.getValue());
+    }
+
+    @Test
+    public void testGetProcessInfo(){
+        ProcessInfoVo processInfo = workflowExecuteService.getProcessInfo("775eb10a-bb56-11ee-88a7-0242c8000006");
+        System.err.println(processInfo);
+    }
 }

+ 33 - 0
src/test/java/com/xjrsoft/module/xycxedu/util/ApiUtilTest.java

@@ -0,0 +1,33 @@
+package com.xjrsoft.module.xycxedu.util;
+
+import cn.hutool.http.HttpUtil;
+import org.junit.jupiter.api.Test;
+
+import java.io.IOException;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * @author dzx
+ * @date 2024/7/18
+ */
+class ApiUtilTest {
+    private final static int schoolid = 189;
+    private final static String sign = "888";
+    private final static String accessid = "86a5d02ae9f78470";
+
+    private final static String host = "https://openapi.xycxedu.com";
+    @Test
+    void test() throws IOException {
+        String url = host + "/exam/list?schoolid=" + schoolid + "&accessid=" + accessid + "&sign=" + sign;
+        String s = HttpUtil.get(url);
+    }
+
+    @Test
+    void test1() throws IOException {
+        String url = host + "/exam/list?schoolid=" + schoolid + "&accessid=" + accessid + "&sign=" + sign;
+        String s = HttpUtil.get(url);
+
+        System.out.println(s);
+    }
+}

+ 68 - 0
src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java

@@ -3430,4 +3430,72 @@ public class FreeMarkerGeneratorTest {
 
         apiGeneratorService.generateCodes(params);
     }
+
+    @Test
+    public void gcExamPlan() throws IOException {
+        List<TableConfig> tableConfigs = new ArrayList<>();
+        TableConfig mainTable = new TableConfig();
+        mainTable.setTableName("exam_plan");//init_sql中的表名
+        mainTable.setIsMain(true);//是否是主表,一般默认为true
+        mainTable.setPkField(GlobalConstant.DEFAULT_PK);//设置主键
+        mainTable.setPkType(GlobalConstant.DEFAULT_PK_TYPE);//设置主键类型
+        tableConfigs.add(mainTable);
+
+        ApiGenerateCodesDto params = new ApiGenerateCodesDto();
+        params.setAuthor("dzx");//作者名称
+        params.setPackageName("xycxedu");//包名
+        params.setTableConfigs(tableConfigs);
+        params.setPage(true);//是否生成分页接口
+        params.setImport(true);//是否生成导入接口
+        params.setExport(false);//是否生成导出接口
+        params.setOutMainDir(true);//是否生成在主目录,前期测试可设置成false
+        params.setDs(ds);
+
+        IApiGeneratorService apiGeneratorService = new ApiGeneratorServiceImpl();
+
+        apiGeneratorService.generateCodes(params);
+    }
+
+    @Test
+    public void gcMatchActivity() throws IOException {
+        List<TableConfig> tableConfigs = new ArrayList<>();
+        TableConfig mainTable = new TableConfig();
+        mainTable.setTableName("activity_info");//init_sql中的表名
+        mainTable.setIsMain(true);//是否是主表,一般默认为true
+        mainTable.setPkField(GlobalConstant.DEFAULT_PK);//设置主键
+        mainTable.setPkType(GlobalConstant.DEFAULT_PK_TYPE);//设置主键类型
+        tableConfigs.add(mainTable);
+
+        mainTable = new TableConfig();
+        mainTable.setTableName("activity_enroll_range");//init_sql中的表名
+        mainTable.setIsMain(false);//是否是主表,一般默认为true
+        mainTable.setPkField(GlobalConstant.DEFAULT_PK);//设置主键
+        mainTable.setPkType(GlobalConstant.DEFAULT_PK_TYPE);//设置主键类型
+        mainTable.setRelationField("activity_info_id");//设置外键
+        mainTable.setRelationTableField(GlobalConstant.DEFAULT_PK);//设置外键
+        tableConfigs.add(mainTable);
+
+        mainTable = new TableConfig();
+        mainTable.setTableName("activity_enroll");//init_sql中的表名
+        mainTable.setIsMain(false);//是否是主表,一般默认为true
+        mainTable.setPkField(GlobalConstant.DEFAULT_PK);//设置主键
+        mainTable.setPkType(GlobalConstant.DEFAULT_PK_TYPE);//设置主键类型
+        mainTable.setRelationField("activity_info_id");//设置外键
+        mainTable.setRelationTableField(GlobalConstant.DEFAULT_PK);//设置外键
+        tableConfigs.add(mainTable);
+
+        ApiGenerateCodesDto params = new ApiGenerateCodesDto();
+        params.setAuthor("dzx");//作者名称
+        params.setPackageName("activity");//包名
+        params.setTableConfigs(tableConfigs);
+        params.setPage(true);//是否生成分页接口
+        params.setImport(false);//是否生成导入接口
+        params.setExport(false);//是否生成导出接口
+        params.setOutMainDir(true);//是否生成在主目录,前期测试可设置成false
+        params.setDs(ds);
+
+        IApiGeneratorService apiGeneratorService = new ApiGeneratorServiceImpl();
+
+        apiGeneratorService.generateCodes(params);
+    }
 }