Browse Source

Merge branch 'pre'

dzx 9 months ago
parent
commit
cca7e4c51d
55 changed files with 2133 additions and 259 deletions
  1. 12 3
      src/main/java/com/xjrsoft/common/enums/StudentTypeEnum.java
  2. 9 0
      src/main/java/com/xjrsoft/common/enums/StudyStatusEnum.java
  3. 20 51
      src/main/java/com/xjrsoft/module/banding/controller/BandingTaskClassController.java
  4. 14 2
      src/main/java/com/xjrsoft/module/banding/controller/BandingTaskController.java
  5. 12 0
      src/main/java/com/xjrsoft/module/banding/service/IBandingTaskClassService.java
  6. 3 0
      src/main/java/com/xjrsoft/module/banding/service/IBandingTaskService.java
  7. 245 0
      src/main/java/com/xjrsoft/module/banding/service/impl/BandingTaskClassServiceImpl.java
  8. 27 1
      src/main/java/com/xjrsoft/module/banding/service/impl/BandingTaskServiceImpl.java
  9. 7 0
      src/main/java/com/xjrsoft/module/base/service/impl/BaseClassServiceImpl.java
  10. 0 1
      src/main/java/com/xjrsoft/module/databoard/controller/DataboardController.java
  11. 1 1
      src/main/java/com/xjrsoft/module/databoard/controller/DatadetailController.java
  12. 18 0
      src/main/java/com/xjrsoft/module/hikvision/vo/HikvisionIdVo.java
  13. 215 0
      src/main/java/com/xjrsoft/module/job/BaseNewStudentTask.java
  14. 9 1
      src/main/java/com/xjrsoft/module/job/JianyuekbScheduleTask.java
  15. 63 0
      src/main/java/com/xjrsoft/module/job/WfCourseAdjustTask.java
  16. 2 0
      src/main/java/com/xjrsoft/module/liteflow/node/NewsSendMessageNode.java
  17. 2 2
      src/main/java/com/xjrsoft/module/liteflow/node/StudentDropOutNode.java
  18. 2 2
      src/main/java/com/xjrsoft/module/liteflow/node/StudentResumeSchoolingNode.java
  19. 14 0
      src/main/java/com/xjrsoft/module/oa/controller/NewsController.java
  20. 9 3
      src/main/java/com/xjrsoft/module/oa/service/impl/NewsServiceImpl.java
  21. 3 0
      src/main/java/com/xjrsoft/module/oa/vo/NewsPageVo.java
  22. 24 0
      src/main/java/com/xjrsoft/module/student/controller/BaseNewStudentController.java
  23. 24 0
      src/main/java/com/xjrsoft/module/student/dto/AddBaseNewStudentDto.java
  24. 28 0
      src/main/java/com/xjrsoft/module/student/dto/ChangeBandingStatusDto.java
  25. 32 8
      src/main/java/com/xjrsoft/module/student/entity/BaseNewStudent.java
  26. 55 95
      src/main/java/com/xjrsoft/module/student/entity/PbCseFeeobjupdate.java
  27. 2 2
      src/main/java/com/xjrsoft/module/student/service/impl/SchoolRollStudentServiceImpl.java
  28. 3 0
      src/main/java/com/xjrsoft/module/student/service/impl/StudentManagerServiceImpl.java
  29. 24 0
      src/main/java/com/xjrsoft/module/student/vo/BaseNewStudentPageVo.java
  30. 2 3
      src/main/java/com/xjrsoft/module/textbook/controller/TextbookWarehouseRecordDetailController.java
  31. 27 5
      src/main/java/com/xjrsoft/module/textbook/controller/WfTextbookClaimController.java
  32. 8 8
      src/main/java/com/xjrsoft/module/textbook/dto/AddTextbookSubscriptionItemDto.java
  33. 13 0
      src/main/java/com/xjrsoft/module/textbook/dto/ClaimRecordsExportQueryDto.java
  34. 7 1
      src/main/java/com/xjrsoft/module/textbook/service/IWfTextbookClaimService.java
  35. 42 19
      src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookSubscriptionServiceImpl.java
  36. 124 2
      src/main/java/com/xjrsoft/module/textbook/service/impl/WfTextbookClaimServiceImpl.java
  37. 64 0
      src/main/java/com/xjrsoft/module/textbook/vo/ClaimRecordsExportQueryVo.java
  38. 18 0
      src/main/java/com/xjrsoft/module/textbook/vo/DistributePageVo.java
  39. 52 0
      src/main/java/com/xjrsoft/module/textbook/vo/DistributeRecordVo.java
  40. 10 6
      src/main/resources/mapper/banding/BandingTaskClassMapper.xml
  41. 5 3
      src/main/resources/mapper/banding/BandingTaskClassStudentMapper.xml
  42. 1 0
      src/main/resources/mapper/banding/BandingTaskMapper.xml
  43. 7 5
      src/main/resources/mapper/student/BaseNewStudentMapper.xml
  44. 257 0
      src/main/resources/sqlScript/20250224修改教师任课状况.sql
  45. 32 30
      src/main/resources/sqlScript/textbook_sql.sql
  46. 2 2
      src/main/resources/sqlScript/学生异动视图.sql
  47. 39 0
      src/main/resources/sqlScript/院系视图和专业视图.sql
  48. 160 0
      src/test/java/com/xjrsoft/module/classtime/service/impl/ClassTimeStatisticsServiceImplTest2.java
  49. 217 0
      src/test/java/com/xjrsoft/module/job/BaseNewStudentTaskTest.java
  50. 47 0
      src/test/java/com/xjrsoft/module/ledger/controller/LedgerCustomControllerTest.java
  51. 1 1
      src/test/java/com/xjrsoft/module/liteflow/node/WfCourseAdjustNodeTest.java
  52. 30 0
      src/test/java/com/xjrsoft/module/student/service/impl/StudentReportRecordServiceImplTest.java
  53. 1 1
      src/test/java/com/xjrsoft/module/textbook/service/impl/WfTextbookRecedeServiceImplTest.java
  54. 80 0
      src/test/java/com/xjrsoft/xjrsoftboot/EvaluateResultTest.java
  55. 8 1
      src/test/java/com/xjrsoft/xjrsoftboot/IdCreateTest.java

+ 12 - 3
src/main/java/com/xjrsoft/common/enums/StudentTypeEnum.java

@@ -10,11 +10,11 @@ import java.util.Map;
  * @Version 1.0
  */
 public enum StudentTypeEnum {
-    FB2801("FB2801", "普惠制学生"),
+    FB2801("FB2801", "普通学生(非贫困)"),
 
-    FB2802("FB2802", "建卡、低保、特困学生"),
+    FB2802("FB2802", "贫困生(建卡、低保、特困)"),
 
-    FB2803("FB2803", "其他贫困学生");
+    FB2803("FB2803", "其他类型贫困");
 
     final String code;
     final String value;
@@ -43,4 +43,13 @@ public enum StudentTypeEnum {
     public static String fromCode(String code) {
         return lookup.get(code);
     }
+
+    public static String getCode(String value) {
+        for (StudentTypeEnum item : values()) {
+            if (item.getValue().equals(value)) {
+                return  item.getCode();
+            }
+        }
+        return null;
+    }
 }

+ 9 - 0
src/main/java/com/xjrsoft/common/enums/StudyStatusEnum.java

@@ -57,4 +57,13 @@ public enum StudyStatusEnum {
     public static String fromCode(String code) {
         return lookup.get(code);
     }
+
+    public static String getCode(String value) {
+        for (StudyStatusEnum item : values()) {
+            if (item.getValue().equals(value)) {
+                return  item.getCode();
+            }
+        }
+        return null;
+    }
 }

+ 20 - 51
src/main/java/com/xjrsoft/module/banding/controller/BandingTaskClassController.java

@@ -6,6 +6,7 @@ import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.support.ExcelTypeEnum;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.xjrsoft.common.annotation.XjrLog;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.banding.dto.AddBandingTaskClassDto;
@@ -19,7 +20,6 @@ import com.xjrsoft.module.banding.dto.SureBandingTaskDto;
 import com.xjrsoft.module.banding.dto.UpdateBandingClassDto;
 import com.xjrsoft.module.banding.entity.BandingTask;
 import com.xjrsoft.module.banding.entity.BandingTaskClass;
-import com.xjrsoft.module.banding.entity.BandingTaskClassStudent;
 import com.xjrsoft.module.banding.service.IBandingTaskClassService;
 import com.xjrsoft.module.banding.service.IBandingTaskClassStudentService;
 import com.xjrsoft.module.banding.service.IBandingTaskService;
@@ -70,6 +70,7 @@ public class BandingTaskClassController {
     @GetMapping(value = "/list")
     @ApiOperation(value="新生分班任务班级配置列表")
     @SaCheckPermission("bandingtask:detail")
+    @XjrLog(value = "新生分班任务班级配置列表")
     public RT<List<BandingTaskClassPageVo>> list(@Valid BandingTaskClassPageDto dto){
 
         List<BandingTaskClassPageVo> list = bandingTaskClassService.getList(dto);
@@ -79,6 +80,7 @@ public class BandingTaskClassController {
     @GetMapping(value = "/class-student")
     @ApiOperation(value="分班后的学生列表")
     @SaCheckPermission("bandingtask:detail")
+    @XjrLog(value = "分班后的学生列表")
     public RT<List<BandingTaskClassStudentListVo>> classStudent(@Valid BandingTaskClassStudentPageDto dto){
         List<BandingTaskClassStudentListVo> list = bandingTaskClassService.classStudent(dto);
         return RT.ok(list);
@@ -87,6 +89,7 @@ public class BandingTaskClassController {
     @GetMapping(value = "/class-sure")
     @ApiOperation(value="分班确认列表")
     @SaCheckPermission("bandingtask:detail")
+    @XjrLog(value = "分班确认列表")
     public RT<List<BandingTaskClassSureListVo>> classSure(@Valid BandingTaskClassStudentPageDto dto){
         List<BandingTaskClassSureListVo> list = bandingTaskClassService.getClassSure(dto);
         return RT.ok(list);
@@ -95,6 +98,7 @@ public class BandingTaskClassController {
     @GetMapping(value = "/info")
     @ApiOperation(value="根据id查询新生分班任务信息")
     @SaCheckPermission("bandingTaskClass:detail")
+    @XjrLog(value = "根据id查询新生分班任务信息")
     public RT<BandingTaskClassVo> info(@RequestParam Long id){
         BandingTaskClass bandingTaskClass = bandingTaskClassService.getById(id);
         if (bandingTaskClass == null) {
@@ -107,6 +111,7 @@ public class BandingTaskClassController {
     @PostMapping
     @ApiOperation(value = "新增新生分班")
     @SaCheckPermission("bandingTaskClass:add")
+    @XjrLog(value = "新增新生分班")
     public RT<Boolean> add(@Valid @RequestBody List<AddBandingTaskClassDto> dtoList){
         List<BandingTaskClass> dataList = new ArrayList<>();
         List<String> errorList = new ArrayList<>();
@@ -140,67 +145,22 @@ public class BandingTaskClassController {
     @PutMapping
     @ApiOperation(value = "批量新增或者修改新生分班")
     @SaCheckPermission("bandingTaskClass:edit")
+    @XjrLog(value = "批量新增或者修改新生分班")
     public RT<Boolean> update(@Valid @RequestBody List<UpdateBandingClassDto> dtoList){
-        List<BandingTaskClass> insList = new ArrayList<>();
-        List<BandingTaskClass> updList = new ArrayList<>();
-
-        List<BandingTaskClass> updNullList = new ArrayList<>();
-        List<String> errorList = new ArrayList<>();
-        for (UpdateBandingClassDto dto : dtoList) {
-            if(dto.getSortCode() != null){
-                List<BandingTaskClass> list = bandingTaskClassService.list(
-                        new QueryWrapper<BandingTaskClass>().lambda()
-                                .eq(BandingTaskClass::getSortCode, dto.getSortCode())
-                                .eq(BandingTaskClass::getBandingTaskId, dto.getBandingTaskId())
-                                .ne(dto.getId() != null,BandingTaskClass::getId, dto.getId())
-                );
-                if(!list.isEmpty()){
-                    errorList.add(dto.getName());
-                }
-            }
-
-            BandingTaskClass bandingTask = BeanUtil.toBean(dto, BandingTaskClass.class);
-            if(bandingTask.getId() != null){
-                bandingTask.setModifyDate(new Date());
-                if(bandingTask.getSortCode() == null){
-                    updNullList.add(bandingTask);
-                }else{
-                    updList.add(bandingTask);
-                }
-            }else{
-                bandingTask.setCreateDate(new Date());
-                insList.add(bandingTask);
-            }
-        }
-        if(!errorList.isEmpty()){
-            return RT.error(errorList.toString().replace("[", "").replace("]", "") + ",分班排序重复");
-        }
-
-        if(!updNullList.isEmpty()){
-            bandingTaskClassService.updateNull(updNullList);
-        }
-
-        boolean saveBatch = bandingTaskClassService.saveBatch(insList);
-        boolean isSuccess = bandingTaskClassService.updateBatchById(updList);
+        Boolean isSuccess = bandingTaskClassService.saveClass(dtoList);
         return RT.ok(isSuccess);
     }
 
     @DeleteMapping
     @ApiOperation(value = "删除新生分班")
     @SaCheckPermission("bandingTaskClass:delete")
+    @XjrLog(value = "删除新生分班")
     public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
-        if(!ids.isEmpty()){
-            classStudentService.remove(
-                    new QueryWrapper<BandingTaskClassStudent>().lambda()
-                            .in(BandingTaskClassStudent::getBandingTaskClassId, ids)
-            );
-        }
-
-        return RT.ok(bandingTaskClassService.delete(ids));
-
+        return RT.ok(bandingTaskClassService.deleteClass(ids));
     }
     @PostMapping("/import")
     @ApiOperation(value = "导入")
+    @XjrLog(value = "导入")
     public RT<Boolean> importData(@RequestParam Long bandingTaskId, @RequestParam MultipartFile file) throws IOException {
         List<Map<Integer, Object>> excelDataList = EasyExcel.read(file.getInputStream()).sheet().headRowNumber(3).doReadSync();
         Boolean result = bandingTaskClassService.importData(bandingTaskId, excelDataList);
@@ -209,6 +169,7 @@ public class BandingTaskClassController {
 
     @PostMapping("/export-query")
     @ApiOperation(value = "导出学生列表")
+    @XjrLog(value = "导出学生列表")
     public ResponseEntity<byte[]> exportData(@Valid @RequestBody BandingTaskClassStudentPageDto dto) {
         List<BandingTaskClassStudentListVo> listVos = bandingTaskClassService.classStudent(dto);
         List<BandingTaskClassExcelVo> list = BeanUtil.copyToList(listVos, BandingTaskClassExcelVo.class);
@@ -221,6 +182,7 @@ public class BandingTaskClassController {
     @PostMapping("/reset")
     @ApiOperation(value = "重置功能")
     @SaCheckPermission("bandingTaskClass:add")
+    @XjrLog(value = "重置功能")
     public RT<Boolean> reset(@Valid @RequestBody SureBandingTaskDto dto){
         boolean isSuccess = bandingTaskClassService.reset(dto.getBandingTaskId());
         return RT.ok(isSuccess);
@@ -230,6 +192,7 @@ public class BandingTaskClassController {
     @PostMapping("/change-class")
     @ApiOperation(value = "调整班级")
     @SaCheckPermission("bandingTaskClass:change-class")
+    @XjrLog(value = "调整班级")
     public RT<Boolean> changeClass(@Valid @RequestBody ChangeClassDto dto){
         boolean isSuccess = classStudentService.changeClass(dto);
         return RT.ok(isSuccess);
@@ -237,6 +200,7 @@ public class BandingTaskClassController {
 
     @PostMapping("/remove-student")
     @ApiOperation(value = "移出学生")
+    @XjrLog(value = "移出学生")
     @SaCheckPermission("bandingTaskClass:remove-student")
     public RT<Boolean> removeStudent(@Valid @RequestBody ChangeClassDto dto){
         boolean isSuccess = classStudentService.removeStudent(dto);
@@ -246,6 +210,7 @@ public class BandingTaskClassController {
     @PostMapping("/insert-student")
     @ApiOperation(value = "移入学生")
     @SaCheckPermission("bandingTaskClass:insert-student")
+    @XjrLog(value = "移入学生")
     public RT<Boolean> insertStudent(@Valid @RequestBody ChangeClassDto dto){
         boolean isSuccess = classStudentService.insertStudent(dto);
         return RT.ok(isSuccess);
@@ -254,6 +219,7 @@ public class BandingTaskClassController {
     @GetMapping("/satisfy-student")
     @ApiOperation(value = "满足学生")
     @SaCheckPermission("bandingTaskClass:satisfy-student")
+    @XjrLog(value = "满足学生")
     public RT<List<BaseNewStudentPageDto>> satisfyStudent(@Valid StudentDto dto){
         List<BaseNewStudentPageDto> list = classStudentService.satisfyStudent(dto);
         return RT.ok(list);
@@ -262,6 +228,7 @@ public class BandingTaskClassController {
     @GetMapping("/surplus-student")
     @ApiOperation(value = "剩余学生")
     @SaCheckPermission("bandingTaskClass:surplus-student")
+    @XjrLog(value = "剩余学生")
     public RT<List<BaseNewStudentPageDto>> surplusStudent(@Valid StudentDto dto){
         List<BaseNewStudentPageDto> list = classStudentService.surplusStudent(dto);
         return RT.ok(list);
@@ -271,6 +238,7 @@ public class BandingTaskClassController {
     @GetMapping("/classListParam")
     @ApiOperation(value = "根据专业和年级查询班级")
     @SaCheckPermission("bandingTaskClass:surplus-student")
+    @XjrLog(value = "根据专业和年级查询班级")
     public RT<List<BandingTaskClassVo>> classListParam(@Valid BandingTaskClassListDto dto){
         List<BandingTaskClassVo> list = bandingTaskClassService.selectJoinList(BandingTaskClassVo.class,
                 new MPJLambdaWrapper<BandingTaskClass>()
@@ -286,6 +254,7 @@ public class BandingTaskClassController {
     @PostMapping(value = "/change-status")
     @ApiOperation(value="修改状态")
     @SaCheckPermission("officebuild:detail")
+    @XjrLog(value = "修改状态")
     public RT<Boolean> changeStatus(@Valid @RequestBody ChangeClassStatusDto dto) throws Exception {
         BandingTaskClass taskClass = bandingTaskClassService.getById(dto.getId());
         taskClass.setStatus(dto.getStatus());

+ 14 - 2
src/main/java/com/xjrsoft/module/banding/controller/BandingTaskController.java

@@ -5,6 +5,7 @@ import cn.hutool.core.bean.BeanUtil;
 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.xjrsoft.common.annotation.XjrLog;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
@@ -18,6 +19,7 @@ import com.xjrsoft.module.banding.entity.BandingRule;
 import com.xjrsoft.module.banding.entity.BandingTask;
 import com.xjrsoft.module.banding.entity.BandingTaskRule;
 import com.xjrsoft.module.banding.service.IBandingRuleService;
+import com.xjrsoft.module.banding.service.IBandingTaskClassService;
 import com.xjrsoft.module.banding.service.IBandingTaskRuleService;
 import com.xjrsoft.module.banding.service.IBandingTaskService;
 import com.xjrsoft.module.banding.vo.BandingTaskPageVo;
@@ -58,12 +60,13 @@ public class BandingTaskController {
     private final IBandingTaskService bandingTaskService;
     private final IBandingRuleService ruleService;
     private final IBandingTaskRuleService taskRuleService;
+    private final IBandingTaskClassService bandingTaskClassService;
 
     @GetMapping(value = "/page")
     @ApiOperation(value="新生分班任务列表(分页)")
     @SaCheckPermission("bandingtask:detail")
+    @XjrLog(value = "新生分班任务列表(分页)")
     public RT<PageOutput<BandingTaskPageVo>> page(@Valid BandingTaskPageDto dto){
-
         IPage<BandingTaskPageVo> page = bandingTaskService.getPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
         PageOutput<BandingTaskPageVo> pageOutput = ConventPage.getPageOutput(page, BandingTaskPageVo.class);
         return RT.ok(pageOutput);
@@ -72,6 +75,7 @@ public class BandingTaskController {
     @GetMapping(value = "/info")
     @ApiOperation(value="根据id查询新生分班任务信息")
     @SaCheckPermission("bandingtask:detail")
+    @XjrLog(value = "根据id查询新生分班任务信息")
     public RT<BandingTaskVo> info(@RequestParam Long id){
         BandingTask bandingTask = bandingTaskService.getById(id);
         if (bandingTask == null) {
@@ -84,6 +88,7 @@ public class BandingTaskController {
     @PostMapping
     @ApiOperation(value = "新增新生分班任务")
     @SaCheckPermission("bandingtask:add")
+    @XjrLog(value = "新增新生分班任务")
     public RT<Boolean> add(@Valid @RequestBody AddBandingTaskDto dto){
         List<BandingTask> list = bandingTaskService.list(
                 new QueryWrapper<BandingTask>().lambda()
@@ -95,12 +100,14 @@ public class BandingTaskController {
         }
         BandingTask bandingTask = BeanUtil.toBean(dto, BandingTask.class);
         boolean isSuccess = bandingTaskService.add(bandingTask);
+        bandingTaskClassService.initClassByBaseClass(bandingTask);
         return RT.ok(isSuccess);
     }
 
     @PostMapping("/set-rule")
     @ApiOperation(value = "设置规则")
     @SaCheckPermission("bandingtask:set-rule")
+    @XjrLog(value = "设置规则")
     public RT<Boolean> setRule(@Valid @RequestBody AddBandingTaskRuleDto dto){
         taskRuleService.remove(
                 new QueryWrapper<BandingTaskRule>().lambda()
@@ -122,6 +129,7 @@ public class BandingTaskController {
     @PutMapping
     @ApiOperation(value = "修改新生分班任务")
     @SaCheckPermission("bandingtask:edit")
+    @XjrLog(value = "修改新生分班任务")
     public RT<Boolean> update(@Valid @RequestBody UpdateBandingTaskDto dto){
 
         BandingTask bandingTask = BeanUtil.toBean(dto, BandingTask.class);
@@ -132,6 +140,7 @@ public class BandingTaskController {
     @DeleteMapping
     @ApiOperation(value = "删除新生分班任务")
     @SaCheckPermission("bandingtask:delete")
+    @XjrLog(value = "删除新生分班任务")
     public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
         return RT.ok(bandingTaskService.delete(ids));
     }
@@ -139,6 +148,7 @@ public class BandingTaskController {
     @GetMapping(value = "/rule-list")
     @ApiOperation(value="查询所有规则")
     @SaCheckPermission("bandingtask:detail")
+    @XjrLog(value = "查询所有规则")
     public RT<List<BandingTaskRuleVo>> ruleList(@RequestParam Long id){
         List<BandingRule> ruleList = ruleService.list();
 
@@ -159,8 +169,9 @@ public class BandingTaskController {
     @PostMapping("/sure")
     @ApiOperation(value = "确认分班")
     @SaCheckPermission("bandingTaskClass:sure")
+    @XjrLog(value = "确认分班")
     public RT<Boolean> sure(@Valid @RequestBody SureBandingTaskDto dto){
-        Boolean isSuccess = bandingTaskService.sure(dto);
+        Boolean isSuccess = bandingTaskService.sureReport(dto);
         return RT.ok(isSuccess);
     }
 
@@ -169,6 +180,7 @@ public class BandingTaskController {
     @PostMapping("/automatic-banding")
     @ApiOperation(value = "自动分班")
     @SaCheckPermission("bandingTaskClass:automatic-banding")
+    @XjrLog(value = "自动分班")
     public RT<Boolean> automaticBanding(@Valid @RequestBody AutomaticBandingTaskDto dto){
         Boolean aBoolean = bandingTaskService.automaticBanding(dto);
         return RT.ok(aBoolean);

+ 12 - 0
src/main/java/com/xjrsoft/module/banding/service/IBandingTaskClassService.java

@@ -3,10 +3,13 @@ package com.xjrsoft.module.banding.service;
 import com.github.yulichang.base.MPJBaseService;
 import com.xjrsoft.module.banding.dto.BandingTaskClassPageDto;
 import com.xjrsoft.module.banding.dto.BandingTaskClassStudentPageDto;
+import com.xjrsoft.module.banding.dto.UpdateBandingClassDto;
+import com.xjrsoft.module.banding.entity.BandingTask;
 import com.xjrsoft.module.banding.entity.BandingTaskClass;
 import com.xjrsoft.module.banding.vo.BandingTaskClassPageVo;
 import com.xjrsoft.module.banding.vo.BandingTaskClassStudentListVo;
 import com.xjrsoft.module.banding.vo.BandingTaskClassSureListVo;
+import com.xjrsoft.module.base.entity.BaseClass;
 
 import java.util.List;
 import java.util.Map;
@@ -55,4 +58,13 @@ public interface IBandingTaskClassService extends MPJBaseService<BandingTaskClas
     Boolean importData(Long bandingTaskId, List<Map<Integer, Object>> excelDataList);
 
     Boolean updateNull(List<BandingTaskClass> updNullList);
+
+    Boolean saveClass(List<UpdateBandingClassDto> dtoList);
+
+
+    Boolean updateByBaseClass(BaseClass baseClass);
+
+    Boolean initClassByBaseClass(BandingTask bandingTask);
+
+    Boolean deleteClass(List<Long> ids);
 }

+ 3 - 0
src/main/java/com/xjrsoft/module/banding/service/IBandingTaskService.java

@@ -49,4 +49,7 @@ public interface IBandingTaskService extends MPJBaseService<BandingTask> {
 
     Page<BandingTaskPageVo> getPage(Page<BandingTaskPageVo> page, BandingTaskPageDto dto);
 
+
+    Boolean sureReport(SureBandingTaskDto dto);
+
 }

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

@@ -1,14 +1,20 @@
 package com.xjrsoft.module.banding.service.impl;
 
+import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.enums.DeleteMark;
+import com.xjrsoft.common.enums.EnabledMark;
 import com.xjrsoft.common.enums.YesOrNoEnum;
+import com.xjrsoft.common.exception.MyException;
+import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.banding.dto.BandingTaskClassPageDto;
 import com.xjrsoft.module.banding.dto.BandingTaskClassStudentPageDto;
+import com.xjrsoft.module.banding.dto.UpdateBandingClassDto;
 import com.xjrsoft.module.banding.entity.BandingTask;
 import com.xjrsoft.module.banding.entity.BandingTaskClass;
 import com.xjrsoft.module.banding.entity.BandingTaskClassStudent;
@@ -19,8 +25,10 @@ import com.xjrsoft.module.banding.service.IBandingTaskClassService;
 import com.xjrsoft.module.banding.vo.BandingTaskClassPageVo;
 import com.xjrsoft.module.banding.vo.BandingTaskClassStudentListVo;
 import com.xjrsoft.module.banding.vo.BandingTaskClassSureListVo;
+import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.base.entity.BaseClassroom;
 import com.xjrsoft.module.base.entity.BaseMajorSet;
+import com.xjrsoft.module.base.mapper.BaseClassMapper;
 import com.xjrsoft.module.base.service.IBaseClassroomService;
 import com.xjrsoft.module.base.service.IBaseMajorSetService;
 import com.xjrsoft.module.organization.entity.User;
@@ -56,6 +64,7 @@ public class BandingTaskClassServiceImpl extends MPJBaseServiceImpl<BandingTaskC
     private final IUserService userService;
     private final IBaseMajorSetService majorSetService;
     private final DictionarydetailMapper detailMapper;
+    private final BaseClassMapper classMapper;
     @Override
     public Boolean add(BandingTaskClass bandingTaskClass) {
         bandingTaskClass.setCreateDate(new Date());
@@ -187,6 +196,7 @@ public class BandingTaskClassServiceImpl extends MPJBaseServiceImpl<BandingTaskC
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean updateNull(List<BandingTaskClass> updNullList) {
         for (BandingTaskClass taskClass : updNullList) {
             UpdateWrapper<BandingTaskClass> updateWrapper = new UpdateWrapper<>();
@@ -197,4 +207,239 @@ public class BandingTaskClassServiceImpl extends MPJBaseServiceImpl<BandingTaskC
 
         return true;
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean saveClass(List<UpdateBandingClassDto> dtoList) {
+        List<BandingTaskClass> insList = new ArrayList<>();//新增班级
+        List<BandingTaskClass> updList = new ArrayList<>();//修改班级
+        List<BandingTaskClass> updNullList = new ArrayList<>();//修改班级
+        List<String> errorList = new ArrayList<>();//修改班级
+
+        UpdateBandingClassDto updateBandingClassDto = dtoList.get(0);
+        BandingTask task;
+        if(updateBandingClassDto.getBandingTaskId() == null){
+            BandingTaskClass taskClass = this.getById(updateBandingClassDto.getId());
+            task = bandingTaskMapper.selectById(taskClass.getBandingTaskId());
+        }else{
+            task = bandingTaskMapper.selectById(updateBandingClassDto.getBandingTaskId());
+        }
+        List<BaseClass> classList = classMapper.selectList(
+                new QueryWrapper<BaseClass>().lambda()
+                        .eq(BaseClass::getDeleteMark, DeleteMark.NODELETE.getCode())
+                        .eq(BaseClass::getGradeId, task.getGradeId())
+                        .eq(BaseClass::getEnrollType, task.getEnrollType())
+        );
+
+        Map<String, BaseClass> classMap = classList.stream().collect(Collectors.toMap(BaseClass::getName, x -> x));
+        List<BaseClass> updateClassList = new ArrayList<>();//修改班级
+        List<BaseClass> insertClassList = new ArrayList<>();//修改班级
+
+        List<BaseMajorSet> majorSetList = majorSetService.list(
+                new QueryWrapper<BaseMajorSet>().lambda()
+                        .eq(BaseMajorSet::getDeleteMark, DeleteMark.NODELETE.getCode())
+        );
+        Map<Long, Long> majorDeptMap = majorSetList.stream().collect(Collectors.toMap(BaseMajorSet::getId, BaseMajorSet::getDepartmentId));
+
+        for (UpdateBandingClassDto dto : dtoList) {
+            if(dto.getSortCode() != null){
+                List<BandingTaskClass> list = this.list(
+                        new QueryWrapper<BandingTaskClass>().lambda()
+                                .eq(BandingTaskClass::getSortCode, dto.getSortCode())
+                                .eq(BandingTaskClass::getBandingTaskId, dto.getBandingTaskId())
+                                .ne(dto.getId() != null,BandingTaskClass::getId, dto.getId())
+                );
+                if(!list.isEmpty()){
+                    errorList.add(dto.getName());
+                }
+            }
+
+            BandingTaskClass taskClass = BeanUtil.toBean(dto, BandingTaskClass.class);
+            if(taskClass.getId() != null){
+                taskClass.setModifyDate(new Date());
+                if(taskClass.getSortCode() == null){
+                    updNullList.add(taskClass);
+                }else{
+                    updList.add(taskClass);
+                }
+            }else{
+                taskClass.setCreateDate(new Date());
+                insList.add(taskClass);
+            }
+            if(classMap.containsKey(taskClass.getName())){
+                BaseClass baseClass = classMap.get(taskClass.getName());
+                baseClass.setClassType(taskClass.getClassType());
+                baseClass.setTeacherId(taskClass.getTeacherId());
+                baseClass.setMajorSetId(taskClass.getMajorSetId());
+                baseClass.setClassroomId(taskClass.getClassroomId());
+                baseClass.setIsOrderClass(taskClass.getIsOrderClass());
+                baseClass.setOrgId(majorDeptMap.get(taskClass.getMajorSetId()));
+                baseClass.setEnrollType(task.getEnrollType());
+                updateClassList.add(baseClass);
+            }else{
+                BaseClass baseClass = new BaseClass();
+                baseClass.setClassType(taskClass.getClassType());
+                baseClass.setTeacherId(taskClass.getTeacherId());
+                baseClass.setMajorSetId(taskClass.getMajorSetId());
+                baseClass.setClassroomId(taskClass.getClassroomId());
+                baseClass.setIsOrderClass(taskClass.getIsOrderClass());
+                baseClass.setOrgId(majorDeptMap.get(taskClass.getMajorSetId()));
+                baseClass.setName(taskClass.getName());
+                baseClass.setGradeId(task.getGradeId());
+                baseClass.setEnrollType(task.getEnrollType());
+                baseClass.setIsGraduate(1);
+                baseClass.setCreateUserId(StpUtil.getLoginIdAsLong());
+                baseClass.setCreateDate(new Date());
+                insertClassList.add(baseClass);
+            }
+        }
+        if(!errorList.isEmpty()){
+            throw new MyException(errorList.toString().replace("[", "").replace("]", "") + ",分班排序重复");
+        }
+
+        if(!updNullList.isEmpty()){
+            this.updateNull(updNullList);
+        }
+
+        if(!insertClassList.isEmpty()){
+            for (BaseClass baseClass : insertClassList) {
+                classMapper.insert(baseClass);
+            }
+        }
+        if(!updateClassList.isEmpty()){
+            for (BaseClass baseClass : updateClassList) {
+                classMapper.updateById(baseClass);
+            }
+        }
+
+        this.saveBatch(insList);
+        return this.updateBatchById(updList);
+    }
+
+    /**
+     * 班级管理中,修改信息时同步修改新生分班中的班级信息
+     * @param baseClass
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean updateByBaseClass(BaseClass baseClass) {
+        List<BandingTask> bandingTasks = bandingTaskMapper.selectList(
+                new QueryWrapper<BandingTask>().lambda()
+                        .eq(BandingTask::getDeleteMark, DeleteMark.NODELETE.getCode())
+                        .eq(BandingTask::getGradeId, baseClass.getGradeId())
+                        .eq(BandingTask::getEnrollType, baseClass.getEnrollType())
+                        .orderByDesc(BandingTask::getId)
+                        .eq(BandingTask::getStatus, 0)
+        );
+        if(bandingTasks.isEmpty()){
+            return true;
+        }
+        BandingTaskClass one = this.getOne(
+                new MPJLambdaWrapper<BandingTaskClass>()
+                        .select(BandingTaskClass::getId)
+                        .select(BandingTaskClass.class, x -> VoToColumnUtil.fieldsToColumns(BandingTaskClass.class).contains(x.getProperty()))
+                        .innerJoin(BandingTask.class, BandingTask::getId, BandingTaskClass::getBandingTaskId)
+                        .eq(BandingTaskClass::getDeleteMark, DeleteMark.NODELETE.getCode())
+                        .eq(BandingTaskClass::getName, baseClass.getName())
+                        .eq(BandingTask::getGradeId, baseClass.getGradeId())
+                        .eq(BandingTask::getEnrollType, baseClass.getEnrollType())
+                        .eq(BandingTask::getStatus, 0)
+        );
+        if(one == null){
+            BandingTask task = bandingTasks.get(0);
+            one = new BandingTaskClass();
+            one.setBandingTaskId(task.getId());
+            one.setIsOrderClass(baseClass.getIsOrderClass());
+            one.setClassType(baseClass.getClassType());
+            one.setTeacherId(baseClass.getTeacherId());
+            one.setMajorSetId(baseClass.getMajorSetId());
+            one.setClassroomId(baseClass.getClassroomId());
+            one.setDeleteMark(DeleteMark.NODELETE.getCode());
+            one.setCreateDate(new Date());
+            one.setEnabledMark(EnabledMark.ENABLED.getCode());
+            one.setName(baseClass.getName());
+            one.setCreateUserId(StpUtil.getLoginIdAsLong());
+            this.save(one);
+        }else{
+            one.setIsOrderClass(baseClass.getIsOrderClass());
+            one.setClassType(baseClass.getClassType());
+            one.setTeacherId(baseClass.getTeacherId());
+            one.setMajorSetId(baseClass.getMajorSetId());
+            one.setClassroomId(baseClass.getClassroomId());
+            one.setModifyDate(new Date());
+            one.setModifyUserId(StpUtil.getLoginIdAsLong());
+            this.updateById(one);
+        }
+        return true;
+    }
+
+    /**
+     * 新增分班任务后,自动初始化班级数据
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean initClassByBaseClass(BandingTask bandingTask) {
+        List<BaseClass> classList = classMapper.selectList(
+                new QueryWrapper<BaseClass>().lambda()
+                        .eq(BaseClass::getDeleteMark, DeleteMark.NODELETE.getCode())
+                        .eq(BaseClass::getGradeId, bandingTask.getGradeId())
+                        .eq(BaseClass::getIsGraduate, 1)
+                        .eq(BaseClass::getEnrollType, bandingTask.getEnrollType())
+        );
+        List<BandingTaskClass> insList = new ArrayList<>();//新增班级
+        for (BaseClass baseClass : classList) {
+            BandingTaskClass one = new BandingTaskClass();
+            one.setBandingTaskId(bandingTask.getId());
+            one.setIsOrderClass(baseClass.getIsOrderClass());
+            one.setClassType(baseClass.getClassType());
+            one.setTeacherId(baseClass.getTeacherId());
+            one.setMajorSetId(baseClass.getMajorSetId());
+            one.setClassroomId(baseClass.getClassroomId());
+            one.setDeleteMark(DeleteMark.NODELETE.getCode());
+            one.setCreateDate(new Date());
+            one.setEnabledMark(EnabledMark.ENABLED.getCode());
+            one.setName(baseClass.getName());
+            one.setCreateUserId(StpUtil.getLoginIdAsLong());
+            one.setStatus(0);
+            insList.add(one);
+        }
+        if(!insList.isEmpty()){
+           this.saveBatch(insList);
+        }
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean deleteClass(List<Long> ids) {
+        if(!ids.isEmpty()){
+            List<BandingTaskClassStudent> list = classStudentMapper.selectList(
+                    new QueryWrapper<BandingTaskClassStudent>().lambda()
+                            .in(BandingTaskClassStudent::getBandingTaskClassId, ids)
+                            .eq(BandingTaskClassStudent::getDeleteMark, DeleteMark.NODELETE.getCode())
+            );
+            if(!list.isEmpty()){
+                throw new MyException("该班级下已分配学生,无法删除");
+            }
+        }
+
+        List<BandingTaskClass> classList = this.listByIds(ids);
+        for (BandingTaskClass taskClass : classList) {
+
+            BandingTask bandingTask = bandingTaskMapper.selectById(taskClass.getBandingTaskId());
+            BaseClass baseClass = classMapper.selectOne(
+                    new QueryWrapper<BaseClass>().lambda()
+                            .eq(BaseClass::getDeleteMark, DeleteMark.NODELETE.getCode())
+                            .eq(BaseClass::getGradeId, bandingTask.getGradeId())
+                            .eq(BaseClass::getName, taskClass.getName())
+                            .eq(BaseClass::getIsGraduate, 1)
+                            .eq(BaseClass::getEnrollType, bandingTask.getEnrollType())
+            );
+
+            classMapper.deleteById(baseClass);
+            this.removeById(taskClass);
+        }
+        return true;
+    }
 }

+ 27 - 1
src/main/java/com/xjrsoft/module/banding/service/impl/BandingTaskServiceImpl.java

@@ -141,6 +141,7 @@ public class BandingTaskServiceImpl extends MPJBaseServiceImpl<BandingTaskMapper
      * 5、完成后,将分好班的信息存到banding_task_class_student表中
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean automaticBanding(AutomaticBandingTaskDto dto) {
         BandingTask bandingTask = this.getById(dto.getBandingTaskId());
         if(bandingTask == null){
@@ -156,7 +157,7 @@ public class BandingTaskServiceImpl extends MPJBaseServiceImpl<BandingTaskMapper
         );
         List<Long> studentIds = classStudents.stream().map(BandingTaskClassStudent::getNewStudentId).collect(Collectors.toList());
 
-        List<String> orderColumn = new ArrayList();
+        List<String> orderColumn = new ArrayList<>();
         orderColumn.add("score");
         List<BaseNewStudent> baseNewStudents = newStudentService.selectJoinList(BaseNewStudent.class,
                 new MPJLambdaWrapper<BaseNewStudent>()
@@ -166,6 +167,7 @@ public class BandingTaskServiceImpl extends MPJBaseServiceImpl<BandingTaskMapper
                         .eq(EnrollmentPlan::getGradeId, bandingTask.getGradeId())
                         .eq(EnrollmentPlan::getEnrollType, bandingTask.getEnrollType())
                         .eq(BaseNewStudent::getStatus, 0)
+                        .eq(BaseNewStudent::getIsCanBanding, 1)
                         .notIn(!studentIds.isEmpty(), BaseNewStudent::getId, studentIds)
                         .orderByDescStr(orderColumn)
         );
@@ -526,6 +528,9 @@ public class BandingTaskServiceImpl extends MPJBaseServiceImpl<BandingTaskMapper
         return classStudentMap;
     }
 
+    /**
+     * 确认分班,老规则,确认之后直接进入学生基本信息中(2025年3月6日停用)
+     */
     @Transactional
     @Override
     public Boolean sure(SureBandingTaskDto dto) {
@@ -707,6 +712,27 @@ public class BandingTaskServiceImpl extends MPJBaseServiceImpl<BandingTaskMapper
         return this.baseMapper.getPage(page, dto);
     }
 
+    /**
+     * 确认分班后,进入
+     * @param dto
+     * @return
+     */
+    @Override
+    @Transactional
+    public Boolean sureReport(SureBandingTaskDto dto) {
+        List<BandingTaskClassStudent> list = classStudentService.list(
+                new MPJLambdaWrapper<BandingTaskClassStudent>()
+                        .innerJoin(BandingTaskClass.class, BandingTaskClass::getId, BandingTaskClassStudent::getBandingTaskClassId)
+                        .eq(BandingTaskClass::getBandingTaskId, dto.getBandingTaskId())
+        );
+
+        BandingTask bandingTask = this.getById(dto.getId());
+        bandingTask.setStatus(1);
+        bandingTask.setModifyDate(new Date());
+        Boolean isSuccess = this.update(bandingTask);
+        return isSuccess;
+    }
+
     LocalDate getBirthDate(String idCardNumber){
         // 获取出生日期前6位,即yyyyMM
         String birthdayString = idCardNumber.substring(6, 14);

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

@@ -15,6 +15,7 @@ import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.utils.RedisUtil;
 import com.xjrsoft.module.attendance.dto.AttendanceStatisticDto;
 import com.xjrsoft.module.attendance.vo.ClassStatisticsVo;
+import com.xjrsoft.module.banding.service.IBandingTaskClassService;
 import com.xjrsoft.module.base.dto.AddBaseClassPageDto;
 import com.xjrsoft.module.base.dto.BaseClassPageDto;
 import com.xjrsoft.module.base.dto.UpdateBaseClassPageDto;
@@ -58,6 +59,8 @@ public class BaseClassServiceImpl extends MPJBaseServiceImpl<BaseClassMapper, Ba
 
     private final RedisUtil redisUtil;
 
+    private final IBandingTaskClassService bandingTaskClassService;
+
     /**
      * 获取家长关联的学生 id 是家长的ID
      * @param id
@@ -174,6 +177,8 @@ public class BaseClassServiceImpl extends MPJBaseServiceImpl<BaseClassMapper, Ba
         boolean isSuccess = this.save(baseClass);
 
         if(isSuccess){
+            bandingTaskClassService.updateByBaseClass(baseClass);
+
             BaseClassMajorSet majorSet = new BaseClassMajorSet();
             majorSet.setClassId(baseClass.getId());
             majorSet.setMajorSetId(dto.getMajorSetId());
@@ -227,6 +232,8 @@ public class BaseClassServiceImpl extends MPJBaseServiceImpl<BaseClassMapper, Ba
         baseClass.setModifyUserId(StpUtil.getLoginIdAsLong());
         boolean update = this.updateById(baseClass);
         if(update){
+            bandingTaskClassService.updateByBaseClass(baseClass);
+
             BaseClassMajorSet majorSet = majorSetService.getOne(
                     new QueryWrapper<BaseClassMajorSet>().lambda()
                             .eq(BaseClassMajorSet::getClassId, baseClass.getId())

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

@@ -275,7 +275,6 @@ public class DataboardController {
                 .leftJoin(DictionaryDetail.class,DictionaryDetail::getCode,BaseTeacher::getJobState, ext->ext.selectAs(DictionaryDetail::getName, XjrUserPageVo::getJobState))
                 .leftJoin(DictionaryDetail.class,DictionaryDetail::getCode,XjrUser::getCredentialType,ext->ext.selectAs(DictionaryDetail::getName, XjrUserPageVo::getCredentialType))
                 .leftJoin(DictionaryDetail.class,DictionaryDetail::getCode,BaseTeacher::getEmployType,ext->ext.selectAs(DictionaryDetail::getName, XjrUserPageVo::getEmployWay))
-
                 .selectAsClass(BaseTeacher.class, XjrUserPageVo.class);
 
         List<XjrUserPageVo> teacherList = teacherService.selectJoinList(XjrUserPageVo.class, queryWrapper);

+ 1 - 1
src/main/java/com/xjrsoft/module/databoard/controller/DatadetailController.java

@@ -354,7 +354,7 @@ public class DatadetailController {
 
         sql = "SELECT IFNULL(t3.name,'未填写') AS item ,ifnull(COUNT(*), 0) AS a_count FROM xjr_user t1" +
             " INNER JOIN base_teacher t2 ON t1.id = t2.user_id" +
-            " LEFT JOIN xjr_dictionary_detail t3 ON t2.employ_way  = t3.code AND t3.item_id = 2023000000000000016" +
+            " LEFT JOIN xjr_dictionary_detail t3 ON t2.employ_type  = t3.code AND t3.item_id = 2023000000000000016" +
             " WHERE t1.delete_mark = 0 GROUP BY t3.name";
         list = SqlRunnerAdapter.db().selectList(sql);
         List<ItemCountVo> employList = new ArrayList<>();

+ 18 - 0
src/main/java/com/xjrsoft/module/hikvision/vo/HikvisionIdVo.java

@@ -0,0 +1,18 @@
+package com.xjrsoft.module.hikvision.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+ * 查询海康门禁点事件返回结果对象
+ * @Author: dzx
+ * @Date: 2024年9月19日
+ */
+@Data
+public class HikvisionIdVo {
+
+
+    @ApiModelProperty("车牌号码")
+    private String plateNo;
+}

+ 215 - 0
src/main/java/com/xjrsoft/module/job/BaseNewStudentTask.java

@@ -0,0 +1,215 @@
+package com.xjrsoft.module.job;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.xjrsoft.common.enums.DeleteMark;
+import com.xjrsoft.common.enums.EnabledMark;
+import com.xjrsoft.common.enums.EnrollTypeEnum;
+import com.xjrsoft.common.enums.GenderDictionaryEnum;
+import com.xjrsoft.common.enums.StudentTypeEnum;
+import com.xjrsoft.common.enums.StudyStatusEnum;
+import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
+import com.xjrsoft.module.base.entity.BaseGrade;
+import com.xjrsoft.module.base.entity.BaseMajorSet;
+import com.xjrsoft.module.base.service.IBaseGradeService;
+import com.xjrsoft.module.base.service.IBaseMajorSetService;
+import com.xjrsoft.module.student.entity.BaseNewStudent;
+import com.xjrsoft.module.student.entity.EnrollmentPlan;
+import com.xjrsoft.module.student.entity.PbCseFeeobjupdate;
+import com.xjrsoft.module.student.service.IBaseNewStudentService;
+import com.xjrsoft.module.student.service.IEnrollmentPlanService;
+import com.xjrsoft.module.student.service.IPbCseFeeobjupdateService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+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 2025/3/4
+ */
+@Component
+@Slf4j
+public class BaseNewStudentTask {
+
+
+    @Autowired
+    private IBaseNewStudentService newStudentService;
+
+    @Autowired
+    private IPbCseFeeobjupdateService cseFeeobjupdateService;
+
+    @Autowired
+    private IEnrollmentPlanService planService;
+
+    @Autowired
+    private IBaseGradeService gradeService;
+
+    @Autowired
+    private IBaseMajorSetService majorSetService;
+
+    @Scheduled(cron = "0 */15 * * * ?")
+    public void execute(){
+        doExecute();
+    }
+
+    void doExecute(){
+        List<PbCseFeeobjupdate> dataList = cseFeeobjupdateService.list();
+
+        String sql = "select distinct enteryear, userdef6 from pb_cse_feeobjupdate";
+        List<Map<String, Object>> gradeList = SqlRunnerAdapter.db().selectList(sql);
+
+
+        List<EnrollmentPlan> planDataList = planService.list(
+                new QueryWrapper<EnrollmentPlan>().lambda()
+                        .eq(EnrollmentPlan::getDeleteMark, DeleteMark.NODELETE.getCode())
+                        .eq(EnrollmentPlan::getEnabledMark, EnabledMark.ENABLED.getCode())
+        );
+        Map<String, Long> planDataMap = planDataList.stream().collect(Collectors.toMap(x -> x.getEnrollType() + x.getGradeId(), EnrollmentPlan::getId));
+
+        Map<String, Long> planMap = new HashMap<>();
+        //插入招生计划数据
+        gradeList.forEach((x)->{
+            EnrollmentPlan plan = new EnrollmentPlan();
+            plan.setCreateDate(new Date());
+            plan.setEnabledMark(EnabledMark.ENABLED.getCode());
+            plan.setDeleteMark(DeleteMark.NODELETE.getCode());
+            if("1".equals(x.get("userdef6").toString())){
+                plan.setEnrollType(EnrollTypeEnum.SPRING_ENROLLMENT.getCode());
+            }else if("2".equals(x.get("userdef6").toString())){
+                plan.setEnrollType(EnrollTypeEnum.AUTUMN_ENROLLMENT.getCode());
+            }
+
+            //查询年级
+            BaseGrade grade = gradeService.getOne(
+                    new QueryWrapper<BaseGrade>().lambda()
+                            .eq(BaseGrade::getDeleteMark, DeleteMark.NODELETE.getCode())
+                            .like(BaseGrade::getTitle, x.get("enteryear").toString())
+            );
+            plan.setGradeId(grade.getId());
+
+            Long oldPlanId = planDataMap.get(plan.getEnrollType() + plan.getGradeId());
+
+            planMap.put(x.get("enteryear").toString() + x.get("userdef6").toString(), oldPlanId);
+
+            //判断是否已经存在,不存在就新增
+            if(oldPlanId == null){
+                planService.save(plan);
+                planMap.put(x.get("enteryear").toString() + x.get("userdef6").toString(), plan.getId());
+            }
+        });
+
+        //查询已存在的新生信息
+        List<BaseNewStudent> existsNewStudentList = newStudentService.list(
+                new QueryWrapper<BaseNewStudent>().lambda()
+                        .eq(BaseNewStudent::getDeleteMark, DeleteMark.NODELETE.getCode())
+        );
+        Map<String, BaseNewStudent> existsNewStudentMap = existsNewStudentList.stream().filter(x -> StrUtil.isEmpty(x.getDeleteReason())).collect(Collectors.toMap(BaseNewStudent::getCredentialNumber, x -> x));
+
+        List<BaseMajorSet> majorSetList = majorSetService.list(
+                new QueryWrapper<BaseMajorSet>().lambda()
+                        .eq(BaseMajorSet::getDeleteMark, DeleteMark.NODELETE.getCode())
+                        .eq(BaseMajorSet::getEnabledMark, EnabledMark.ENABLED.getCode())
+        );
+        Map<String, Long> majorSetNameMap = majorSetList.stream().collect(Collectors.toMap(BaseMajorSet::getName, BaseMajorSet::getId));
+
+        //循环攀宝的数据,准备更新到新生表中
+        List<BaseNewStudent> updateList = new ArrayList<>();
+        List<BaseNewStudent> insertList = new ArrayList<>();
+        for (PbCseFeeobjupdate feeobjupdate : dataList) {
+            BaseNewStudent existsNewStudent = existsNewStudentMap.get(feeobjupdate.getPersonalid());
+
+            if(existsNewStudent != null){
+                existsNewStudent.setName(feeobjupdate.getFeeobjname());
+                existsNewStudent.setPaymnystate(feeobjupdate.getPaymnystate());
+                existsNewStudent.setPrevious(feeobjupdate.getPrevious());
+                existsNewStudent.setProvince(feeobjupdate.getProvince());
+                existsNewStudent.setCity(feeobjupdate.getCity());
+                existsNewStudent.setMyarea(feeobjupdate.getMyarea());
+                if(StrUtil.isNotEmpty(feeobjupdate.getSg())){
+                    if(StringUtils.isNumeric(feeobjupdate.getSg())){
+                        existsNewStudent.setHeight(BigDecimal.valueOf(Double.parseDouble(feeobjupdate.getSg())));
+                    }
+                }
+                if(StrUtil.isNotEmpty(feeobjupdate.getTz())){
+                    if(StringUtils.isNumeric(feeobjupdate.getTz())){
+                        existsNewStudent.setWeight(BigDecimal.valueOf(Double.parseDouble(feeobjupdate.getTz())));
+                    }
+                }
+                existsNewStudent.setGraduateSchool(feeobjupdate.getGraduations());
+                existsNewStudent.setStduyStatus(StudyStatusEnum.getCode(feeobjupdate.getQuartername()));
+                existsNewStudent.setSource(StudentTypeEnum.getCode(feeobjupdate.getResourcename()));
+                existsNewStudent.setMobile(feeobjupdate.getTelephone());
+                existsNewStudent.setFamilyMobile(feeobjupdate.getJzlxdh());
+                existsNewStudent.setFamilyAddress(feeobjupdate.getAddress());
+                existsNewStudent.setFirstAmbition(majorSetNameMap.get(feeobjupdate.getSpecname()));
+                existsNewStudent.setFirstAmbitionId(majorSetNameMap.get(feeobjupdate.getSpecname()));
+                existsNewStudent.setSecondAmbition(majorSetNameMap.get(feeobjupdate.getZytjspec()));
+                existsNewStudent.setSecondAmbitionId(majorSetNameMap.get(feeobjupdate.getZytjspec()));
+                existsNewStudent.setGender(GenderDictionaryEnum.getCode(feeobjupdate.getSex()));
+                existsNewStudent.setModifyDate(new Date());
+                existsNewStudent.setStatus(0);
+                existsNewStudent.setIsCanBanding(1);
+
+                updateList.add(existsNewStudent);
+                continue;
+            }
+
+            Long planId = planMap.get(feeobjupdate.getEnteryear() + feeobjupdate.getUserdef6());
+            insertList.add(
+                    new BaseNewStudent(){{
+                        setCredentialNumber(feeobjupdate.getPersonalid());
+                        setName(feeobjupdate.getFeeobjname());
+                        setPaymnystate(feeobjupdate.getPaymnystate());
+                        setPrevious(feeobjupdate.getPrevious());
+                        setProvince(feeobjupdate.getProvince());
+                        setCity(feeobjupdate.getCity());
+                        setMyarea(feeobjupdate.getMyarea());
+                        if(StrUtil.isNotEmpty(feeobjupdate.getSg())){
+                            if(StringUtils.isNumeric(feeobjupdate.getSg())){
+                                setHeight(BigDecimal.valueOf(Double.parseDouble(feeobjupdate.getSg())));
+                            }
+                        }
+                        if(StrUtil.isNotEmpty(feeobjupdate.getTz())){
+                            if(StringUtils.isNumeric(feeobjupdate.getTz())){
+                                setWeight(BigDecimal.valueOf(Double.parseDouble(feeobjupdate.getTz())));
+                            }
+                        }
+                        setGraduateSchool(feeobjupdate.getGraduations());
+                        setStduyStatus(StudyStatusEnum.getCode(feeobjupdate.getQuartername()));
+                        setSource(StudentTypeEnum.getCode(feeobjupdate.getResourcename()));
+                        setMobile(feeobjupdate.getTelephone());
+                        setFamilyMobile(feeobjupdate.getJzlxdh());
+                        setFamilyAddress(feeobjupdate.getAddress());
+                        setFirstAmbition(majorSetNameMap.get(feeobjupdate.getSpecname()));
+                        setFirstAmbitionId(majorSetNameMap.get(feeobjupdate.getSpecname()));
+                        setSecondAmbition(majorSetNameMap.get(feeobjupdate.getZytjspec()));
+                        setSecondAmbitionId(majorSetNameMap.get(feeobjupdate.getZytjspec()));
+                        setGender(GenderDictionaryEnum.getCode(feeobjupdate.getSex()));
+                        setEnrollmentPlanId(planId);
+                        setCreateDate(new Date());
+                        setStatus(0);
+                        setIsCanBanding(1);
+                    }}
+            );
+        }
+
+        if(!updateList.isEmpty()){
+            newStudentService.updateBatchById(updateList);
+        }
+        if(!insertList.isEmpty()){
+            newStudentService.saveBatch(insertList);
+        }
+
+    }
+}

+ 9 - 1
src/main/java/com/xjrsoft/module/job/JianyuekbScheduleTask.java

@@ -19,7 +19,9 @@ import com.xjrsoft.common.utils.RedisUtil;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.config.CommonPropertiesConfig;
 import com.xjrsoft.module.base.entity.BaseClass;
+import com.xjrsoft.module.base.entity.BaseGrade;
 import com.xjrsoft.module.base.service.IBaseClassService;
+import com.xjrsoft.module.base.service.IBaseGradeService;
 import com.xjrsoft.module.courseTable.dto.ClassTeacherDto;
 import com.xjrsoft.module.courseTable.entity.CourseTable;
 import com.xjrsoft.module.courseTable.service.ICourseTableService;
@@ -145,6 +147,9 @@ public class JianyuekbScheduleTask {
     @Autowired
     private ICourseReceiveMsgService receiveMsgService;
 
+    @Autowired
+    private IBaseGradeService gradeService;
+
     @Scheduled(cron = "0 */10 * * * ?")
     public void execute(){
         doExecute();
@@ -301,6 +306,9 @@ public class JianyuekbScheduleTask {
             );
             String[] sourceId = jianyueData.getSourceId().split("_");
             Department department = departmentService.getById(sourceId[0]);
+
+            BaseGrade grade = gradeService.getById(sourceId[1]);
+
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
             //通知对应教师
             List<User> userList = userService.listByIds(new ArrayList<>(techerIds));
@@ -314,7 +322,7 @@ public class JianyuekbScheduleTask {
                 paramJson.put("thing8", thing8);
 
                 JSONObject thing2 = new JSONObject();
-                thing2.put("value", department.getName());
+                thing2.put("value", department.getName() + grade.getName());
                 paramJson.put("thing2", thing2);
 
                 JSONObject thing6 = new JSONObject();

+ 63 - 0
src/main/java/com/xjrsoft/module/job/WfCourseAdjustTask.java

@@ -0,0 +1,63 @@
+package com.xjrsoft.module.job;
+
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.xjrsoft.common.enums.DeleteMark;
+import com.xjrsoft.common.enums.EnabledMark;
+import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
+import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.courseTable.service.ICourseTableService;
+import com.xjrsoft.module.schedule.entity.WfCourseAdjust;
+import com.xjrsoft.module.schedule.service.IWfCourseAdjustService;
+import com.xjrsoft.module.workflow.entity.WorkflowFormRelation;
+import lombok.extern.slf4j.Slf4j;
+import org.camunda.bpm.engine.history.HistoricProcessInstance;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * 每过10分钟定时处理没有处理成功的调课或者顶课流程
+ * @author dzx
+ * @date 2025/3/3
+ */
+@Component
+@Slf4j
+public class WfCourseAdjustTask {
+
+    @Autowired
+    private IWfCourseAdjustService wfCourseAdjustService;
+
+    @Autowired
+    private ICourseTableService courseTableService;
+
+
+    @Scheduled(cron = "0 */10 * * * ?")
+    public void execute() {
+        List<WfCourseAdjust> list = wfCourseAdjustService.list(
+                new MPJLambdaWrapper<WfCourseAdjust>()
+                        .select(WfCourseAdjust::getId)
+                        .select(WfCourseAdjust.class, x -> VoToColumnUtil.fieldsToColumns(WfCourseAdjust.class).contains(x.getProperty()))
+                        .innerJoin(WorkflowFormRelation.class, WorkflowFormRelation::getFormKeyValue, WfCourseAdjust::getId)
+                        .eq(WorkflowFormRelation::getCurrentState, HistoricProcessInstance.STATE_COMPLETED)
+                        .eq(WfCourseAdjust::getDeleteMark, DeleteMark.NODELETE.getCode())
+                        .eq(WfCourseAdjust::getEnabledMark, EnabledMark.ENABLED.getCode())
+        );
+
+        for (WfCourseAdjust wfCourseAdjust : list) {
+            String sql = "SELECT * FROM course_table t1" +
+                    " INNER JOIN course_table_bak t2 ON t1.id = t2.id" +
+                    " WHERE t2.wf_course_adjust_id = " + wfCourseAdjust.getId() +
+                    " AND t1.course_id = t2.course_id" +
+                    " AND t1.course_name = t2.course_name" +
+                    " AND t1.site_id = t2.site_id" +
+                    " AND t1.teacher_name = t2.teacher_name";
+            long count = SqlRunnerAdapter.db().selectCount(sql);
+            if(count > 0){
+                continue;
+            }
+            courseTableService.adjustCourse(wfCourseAdjust);
+        }
+    }
+}

+ 2 - 0
src/main/java/com/xjrsoft/module/liteflow/node/NewsSendMessageNode.java

@@ -25,6 +25,8 @@ public class NewsSendMessageNode extends NodeComponent {
         if (formId != null) {
             // 数据处理
             newsService.dataHandle(formId);
+            newsService.SendMessage(formId);
+
         }
     }
 }

+ 2 - 2
src/main/java/com/xjrsoft/module/liteflow/node/StudentDropOutNode.java

@@ -99,10 +99,10 @@ public class StudentDropOutNode extends NodeComponent {
 
                         //记录异动
                         changeRecordService.insertData(
-                                schoolRoll.getArchivesStatus(),
                                 ArchivesStatusEnum.fromCode(schoolRoll.getArchivesStatus()),
-                                ArchivesStatusEnum.FB2904.getCode(),
+                                schoolRoll.getArchivesStatus(),
                                 ArchivesStatusEnum.FB2904.getValue(),
+                                ArchivesStatusEnum.FB2904.getCode(),
                                 studentDropOut.getStudentUserId(),
                                 studentDropOut.getCreateUserId(),
                                 StudentChangeTypeEnum.ArchivesStatus.getCode(),

+ 2 - 2
src/main/java/com/xjrsoft/module/liteflow/node/StudentResumeSchoolingNode.java

@@ -101,10 +101,10 @@ public class StudentResumeSchoolingNode extends NodeComponent {
 
                         //记录异动
                         changeRecordService.insertData(
-                                schoolRoll.getArchivesStatus(),
                                 ArchivesStatusEnum.fromCode(schoolRoll.getArchivesStatus()),
-                                ArchivesStatusEnum.FB2904.getCode(),
+                                schoolRoll.getArchivesStatus(),
                                 ArchivesStatusEnum.FB2904.getValue(),
+                                ArchivesStatusEnum.FB2904.getCode(),
                                 studentUserId,
                                 Long.parseLong(objectMap.get("create_user_id").toString()),
                                 StudentChangeTypeEnum.ArchivesStatus.getCode(),

+ 14 - 0
src/main/java/com/xjrsoft/module/oa/controller/NewsController.java

@@ -5,6 +5,7 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.yulichang.toolkit.MPJWrappers;
@@ -42,6 +43,7 @@ import com.xjrsoft.module.organization.mapper.DepartmentMapper;
 import com.xjrsoft.module.system.entity.File;
 import com.xjrsoft.module.system.entity.SystemUpdateMessage;
 import com.xjrsoft.module.system.entity.SystemUpdateMessageNotice;
+import com.xjrsoft.module.system.service.IFileService;
 import com.xjrsoft.module.system.service.ISystemUpdateMessageService;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import io.swagger.annotations.Api;
@@ -80,6 +82,7 @@ public class NewsController {
     private DepartmentMapper departmentMapper;
     private INewsRelationConfigService newsRelationConfigService;
     private final ISystemUpdateMessageService systemUpdateMessageService;
+    private final IFileService fileService;
 
 
     @GetMapping
@@ -107,6 +110,17 @@ public class NewsController {
     @ApiOperation(value = "获取接受新闻分页")
     public RT<PageOutput<NewsPageVo>> receiptBox(NewsPageDto dto) {
         IPage<NewsPageVo> page = newsService.receiptBox(dto);
+        for (NewsPageVo record : page.getRecords()) {
+            File file = fileService.getOne(
+                    new QueryWrapper<File>().lambda()
+                            .eq(File::getFolderId, record.getCover())
+                            .eq(File::getDeleteMark, DeleteMark.NODELETE.getCode())
+            );
+            if(file == null){
+                continue;
+            }
+            record.setCoverUrl(file.getFileUrl());
+        }
         PageOutput<NewsPageVo> pageOutput = ConventPage.getPageOutput(page, NewsPageVo.class);
         return RT.ok(pageOutput);
     }

+ 9 - 3
src/main/java/com/xjrsoft/module/oa/service/impl/NewsServiceImpl.java

@@ -167,6 +167,8 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
         News news = BeanUtil.toBean(addProclamationDto, News.class);
         news.setTypeId(2);
         news.setEnabledMark(EnabledMark.ENABLED.getCode());
+        news.setCreateDate(LocalDateTime.now());
+        news.setCreateUserId(StpUtil.getLoginIdAsLong());
         //LambdaQueryWrapper<News> queryWrapperSortcode = new LambdaQueryWrapper<>();
         //queryWrapperSortcode.select("SELECT IFNULL(MAX(sort_code),1)");
         newsMapper.insert(news);
@@ -776,9 +778,13 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
 
     @Override
     public boolean dataHandle(Long id) {
-        CompletableFuture.runAsync(() -> {
-            this.SendMessage(id);
-        });
+        News news = this.getById(id);
+        if(news.getTypeId() != 1){
+            return true;
+        }
+        news.setSendRange(2);
+        this.updateById(news);
+        newsRelationMapper.insertAllTeaStaff(news.getId());
         return true;
     }
 

+ 3 - 0
src/main/java/com/xjrsoft/module/oa/vo/NewsPageVo.java

@@ -187,4 +187,7 @@ public class NewsPageVo {
 
     @ApiModelProperty("是否已读(2:是 0:否)")
     private Integer readMark;
+
+    @ApiModelProperty("封面url")
+    private String coverUrl;
 }

+ 24 - 0
src/main/java/com/xjrsoft/module/student/controller/BaseNewStudentController.java

@@ -9,6 +9,7 @@ import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.support.ExcelTypeEnum;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.xjrsoft.common.constant.GlobalConstant;
@@ -29,9 +30,11 @@ import com.xjrsoft.module.organization.entity.User;
 import com.xjrsoft.module.organization.entity.UserRoleRelation;
 import com.xjrsoft.module.organization.service.IUserRoleRelationService;
 import com.xjrsoft.module.organization.service.IUserService;
+import com.xjrsoft.module.room.entity.RoomBed;
 import com.xjrsoft.module.student.dto.ActiveAccountDto;
 import com.xjrsoft.module.student.dto.AddBaseNewStudentDto;
 import com.xjrsoft.module.student.dto.BaseNewStudentPageDto;
+import com.xjrsoft.module.student.dto.ChangeBandingStatusDto;
 import com.xjrsoft.module.student.dto.DeleteNewStudentDto;
 import com.xjrsoft.module.student.dto.UpdateBaseNewStudentDto;
 import com.xjrsoft.module.student.entity.BaseNewStudent;
@@ -403,4 +406,25 @@ public class BaseNewStudentController {
         return RT.fileStream(bot.toByteArray(), "RoomBed" + ExcelTypeEnum.XLSX.getValue());
     }
 
+    @PostMapping("/change-banding-status")
+    @ApiOperation(value = "修改分班状态")
+    @SaCheckPermission("basenewstudent:add")
+    public RT<Boolean> changeBandingStatus(@Valid @RequestBody List<ChangeBandingStatusDto> dto){
+        for (ChangeBandingStatusDto el : dto) {
+            BaseNewStudent newStudent = baseNewStudentService.getById(el.getId());
+
+            UpdateWrapper<BaseNewStudent> updateWrapper = new UpdateWrapper<>();
+            updateWrapper.eq("id", newStudent.getId());
+            updateWrapper.setSql("is_can_banding = " + el.getIsCanBanding());
+            if(StrUtil.isNotEmpty(el.getRemarks())){
+                updateWrapper.setSql("remarks = '" + el.getRemarks() + "'");
+            }else{
+                updateWrapper.setSql("remarks = null");
+            }
+            baseNewStudentService.update(newStudent, updateWrapper);
+        }
+
+        return RT.ok(true);
+    }
+
 }

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

@@ -106,4 +106,28 @@ public class AddBaseNewStudentDto implements Serializable {
 
     @ApiModelProperty("家庭地址")
     private String familyAddress;
+
+    @ApiModelProperty("缴费状态(已缴费、未缴费)")
+    private String paymnystate;
+
+    @ApiModelProperty("招生季(1春招、2秋招)")
+    private Integer userdef6;
+
+    @ApiModelProperty("应届生、往届生")
+    private String previous;
+
+    @ApiModelProperty("户籍所属省")
+    private String province;
+
+    @ApiModelProperty("户籍所属市")
+    private String city;
+
+    @ApiModelProperty("户籍所属区")
+    private String myarea;
+
+    @ApiModelProperty("备注")
+    private String remarks;
+
+    @ApiModelProperty("是否可以分班(0:否,1:是)")
+    private Integer isCanBanding;
 }

+ 28 - 0
src/main/java/com/xjrsoft/module/student/dto/ChangeBandingStatusDto.java

@@ -0,0 +1,28 @@
+package com.xjrsoft.module.student.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+
+/**
+* @title: 新生维护信息
+* @Author dzx
+* @Date: 2024-06-27
+* @Version 1.0
+*/
+@Data
+public class ChangeBandingStatusDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("主键id")
+    private Long id;
+
+    @ApiModelProperty("备注")
+    private String remarks;
+
+    @ApiModelProperty("是否可以分班(0:否,1:是)")
+    private Integer isCanBanding;
+}

+ 32 - 8
src/main/java/com/xjrsoft/module/student/entity/BaseNewStudent.java

@@ -28,50 +28,50 @@ public class BaseNewStudent 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 Integer sortCode;
@@ -169,4 +169,28 @@ public class BaseNewStudent implements Serializable {
 
     @ApiModelProperty("删除原因(用于新生删除功能)")
     private String deleteReason;
+
+    @ApiModelProperty("缴费状态(已缴费、未缴费)")
+    private String paymnystate;
+
+    @ApiModelProperty("招生季(1春招、2秋招)")
+    private Integer userdef6;
+
+    @ApiModelProperty("应届生、往届生")
+    private String previous;
+
+    @ApiModelProperty("户籍所属省")
+    private String province;
+
+    @ApiModelProperty("户籍所属市")
+    private String city;
+
+    @ApiModelProperty("户籍所属区")
+    private String myarea;
+
+    @ApiModelProperty("备注")
+    private String remarks;
+
+    @ApiModelProperty("是否可以分班(0:否,1:是)")
+    private Integer isCanBanding;
 }

+ 55 - 95
src/main/java/com/xjrsoft/module/student/entity/PbCseFeeobjupdate.java

@@ -21,160 +21,120 @@ public class PbCseFeeobjupdate implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    /**
-    * 
-    */
+    
     @ApiModelProperty("学生主键")
     private String pkfeeobj;
-    /**
-    * 
-    */
+    
     @ApiModelProperty("学号")
     private String studentcode;
-    /**
-    * 
-    */
+    
     @ApiModelProperty("姓名")
     private String feeobjname;
-    /**
-    * 
-    */
+    
     @ApiModelProperty("身份证号")
     private String personalid;
-    /**
-    * 
-    */
+    
     @ApiModelProperty("民族")
     private String nationality;
-    /**
-    * 
-    */
+    
     @ApiModelProperty("出生年月")
     private String birthday;
-    /**
-    * 
-    */
+    
     @ApiModelProperty("所属院系编码")
     private String deptcode;
-    /**
-    * 
-    */
+    
     @ApiModelProperty("所属院系名称")
     private String deptname;
-    /**
-    * 
-    */
+    
     @ApiModelProperty("所属专业代码")
     private String speccode;
-    /**
-    * 
-    */
+    
     @ApiModelProperty("所属专业名称")
     private String specname;
-    /**
-    * 
-    */
+    
     @ApiModelProperty("所属班级代码")
     private String classcode;
-    /**
-    * 
-    */
+
+    @ApiModelProperty("缴费状态")
+    private String paymnystate;
+    
     @ApiModelProperty("所属班级名称")
     private String classname;
-    /**
-    * 
-    */
+    
     @ApiModelProperty("学制")
     private String ratetypename;
-    /**
-    * 
-    */
+    
     @ApiModelProperty("性别")
     private String sex;
-    /**
-    * 
-    */
+    
     @ApiModelProperty("在校状态")
     private String state;
-    /**
-    * 
-    */
+    
     @ApiModelProperty("入校年度")
     private String enteryear;
-    /**
-    * 
-    */
+    
     @ApiModelProperty("离校年度")
     private String leaveyear;
-    /**
-    * 
-    */
+    
     @ApiModelProperty("学生联系电话")
     private String telephone;
-    /**
-    * 
-    */
+    
     @ApiModelProperty("家长联系电话")
     private String jzlxdh;
-    /**
-    * 
-    */
+    
     @ApiModelProperty("志愿调剂专业")
     private String zytjspec;
-    /**
-    * 
-    */
+    
     @ApiModelProperty("身高")
     private String sg;
-    /**
-    * 
-    */
+    
     @ApiModelProperty("体重")
     private String tz;
-    /**
-    * 
-    */
+
+    @ApiModelProperty("应往届")
+    private String previous;
+
     @ApiModelProperty("招生老师")
     private String recruiters;
-    /**
-    * 
-    */
+    
+    @ApiModelProperty("招生区域")
+    private String area;
+
+    @ApiModelProperty("省")
+    private String province;
+
+    @ApiModelProperty("市")
+    private String city;
+
+    @ApiModelProperty("区")
+    private String myarea;
+    
     @ApiModelProperty("毕业学校")
     private String graduations;
-    /**
-    * 
-    */
+    
     @ApiModelProperty("备注")
     private String remarks;
-    /**
-    * 
-    */
+
+    @ApiModelProperty("报名时间")
+    private String userdef3;
+
+    @ApiModelProperty("招生季(1春招、2秋招)")
+    private String userdef6;
+    
     @ApiModelProperty("资助类型")
     private String resourcename;
-    /**
-    * 
-    */
+    
     @ApiModelProperty("住宿类型")
     private String quartername;
-    /**
-    * 
-    */
+    
     @ApiModelProperty("地址")
     private String address;
-    /**
-    * 
-    */
+    
     @ApiModelProperty("创建时间")
     private String cratetime;
-    /**
-    * 
-    */
+    
     @ApiModelProperty("更新时间")
     private String updatetime;
-    /**
-    * 
-    */
-    @ApiModelProperty("")
-    private Long rn;
+    
 
 }

+ 2 - 2
src/main/java/com/xjrsoft/module/student/service/impl/SchoolRollStudentServiceImpl.java

@@ -87,10 +87,10 @@ public class SchoolRollStudentServiceImpl extends MPJBaseServiceImpl<SchoolRollS
 
             //记录异动
             changeRecordService.insertData(
-                    studentSchoolRoll.getArchivesStatus(),
                     ArchivesStatusEnum.fromCode(studentSchoolRoll.getArchivesStatus()),
-                    ArchivesStatusEnum.FB2902.getCode(),
+                    studentSchoolRoll.getArchivesStatus(),
                     ArchivesStatusEnum.FB2902.getValue(),
+                    ArchivesStatusEnum.FB2902.getCode(),
                     studentSchoolRoll.getUserId(),
                     StpUtil.getLoginIdAsLong(),
                     StudentChangeTypeEnum.ArchivesStatus.getCode(),

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

@@ -15,6 +15,7 @@ import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.constant.GlobalConstant;
 import com.xjrsoft.common.enums.DeleteMark;
+import com.xjrsoft.common.enums.EnabledMark;
 import com.xjrsoft.common.enums.GenderDictionaryEnum;
 import com.xjrsoft.common.enums.RoleEnum;
 import com.xjrsoft.common.enums.YesOrNoEnum;
@@ -1073,6 +1074,8 @@ public class StudentManagerServiceImpl extends MPJBaseServiceImpl<BaseStudentUse
                 .leftJoin(BaseClassMajorSet.class, BaseClassMajorSet::getClassId, BaseClass::getId)
                 .leftJoin(BaseMajorSet.class, BaseMajorSet::getId, BaseClassMajorSet::getMajorSetId)
                 .eq(dto.getIsGraduate() != null, BaseClass::getIsGraduate, dto.getIsGraduate())
+                .eq(BaseClass::getDeleteMark, DeleteMark.NODELETE.getCode())
+                .eq(BaseClass::getEnabledMark, EnabledMark.ENABLED.getCode())
         ;
 
         List<BaseClassMajorSetVo> majorSetList = baseClassService.selectJoinList(BaseClassMajorSetVo.class, baseClassMPJLambdaWrapper);

+ 24 - 0
src/main/java/com/xjrsoft/module/student/vo/BaseNewStudentPageVo.java

@@ -173,4 +173,28 @@ public class BaseNewStudentPageVo {
 
     @ApiModelProperty("是否已报到(1:是 0:否)")
     private Integer isReport;
+
+    @ApiModelProperty("缴费状态(已缴费、未缴费)")
+    private String paymnystate;
+
+    @ApiModelProperty("招生季(1春招、2秋招)")
+    private Integer userdef6;
+
+    @ApiModelProperty("应届生、往届生")
+    private String previous;
+
+    @ApiModelProperty("户籍所属省")
+    private String province;
+
+    @ApiModelProperty("户籍所属市")
+    private String city;
+
+    @ApiModelProperty("户籍所属区")
+    private String myarea;
+
+    @ApiModelProperty("备注")
+    private String remarks;
+
+    @ApiModelProperty("是否可以分班(0:否,1:是)")
+    private Integer isCanBanding;
 }

+ 2 - 3
src/main/java/com/xjrsoft/module/textbook/controller/TextbookWarehouseRecordDetailController.java

@@ -69,8 +69,8 @@ public class TextbookWarehouseRecordDetailController {
                                 .selectAs(DictionaryDetail::getName, TextbookWarehouseRecordDetailPageVo::getWarehouseModeCn)
                 )
                 .eq(ObjectUtils.isNotEmpty(dto.getTextbookWarehouseRecordId()), TextbookWarehouseRecordDetail::getTextbookWarehouseRecordId, dto.getTextbookWarehouseRecordId())
-                .eq(ObjectUtils.isNotEmpty(dto.getWarehouseModeInt()) && dto.getWarehouseModeInt() == 1, TextbookWarehouseRecordDetail::getWarehouseMode, WarehouseModeEnum.WmRecede)
-                .ne(ObjectUtils.isNotEmpty(dto.getWarehouseModeInt()) && dto.getWarehouseModeInt() != 1, TextbookWarehouseRecordDetail::getWarehouseMode, WarehouseModeEnum.WmRecede)
+                .eq(ObjectUtils.isNotEmpty(dto.getWarehouseModeInt()) && dto.getWarehouseModeInt() == 1, TextbookWarehouseRecordDetail::getWarehouseMode, WarehouseModeEnum.WmRecede.getCode())
+                .ne(ObjectUtils.isNotEmpty(dto.getWarehouseModeInt()) && dto.getWarehouseModeInt() != 1, TextbookWarehouseRecordDetail::getWarehouseMode, WarehouseModeEnum.WmRecede.getCode())
                 .eq(StringUtils.isNotEmpty(dto.getWarehouseMode()), TextbookWarehouseRecordDetail::getWarehouseMode, dto.getWarehouseMode())
                 .ge(ObjectUtils.isNotEmpty(dto.getStartCreateDate()), TextbookWarehouseRecordDetail::getCreateDate, dto.getStartCreateDate())
                 .le(ObjectUtils.isNotEmpty(dto.getEndCreateDate()), TextbookWarehouseRecordDetail::getCreateDate, dto.getEndCreateDate())
@@ -92,7 +92,6 @@ public class TextbookWarehouseRecordDetailController {
         return RT.ok(BeanUtil.toBean(textbookWarehouseRecordDetail, TextbookWarehouseRecordDetailVo.class));
     }
 
-
     @PostMapping
     @ApiOperation(value = "新增教材入库记录详细入库记录")
     @SaCheckPermission("textbookwarehouserecorddetail:add")

+ 27 - 5
src/main/java/com/xjrsoft/module/textbook/controller/WfTextbookClaimController.java

@@ -3,6 +3,7 @@ package com.xjrsoft.module.textbook.controller;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.excel.support.ExcelTypeEnum;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.model.result.RT;
@@ -14,16 +15,14 @@ import com.xjrsoft.module.base.entity.BaseSemester;
 import com.xjrsoft.module.textbook.dto.*;
 import com.xjrsoft.module.textbook.entity.WfTextbookClaim;
 import com.xjrsoft.module.textbook.service.IWfTextbookClaimService;
-import com.xjrsoft.module.textbook.vo.DistributePageVo;
-import com.xjrsoft.module.textbook.vo.DistributeSemesterVo;
-import com.xjrsoft.module.textbook.vo.WfTextbookClaimPageVo;
-import com.xjrsoft.module.textbook.vo.WfTextbookClaimVo;
+import com.xjrsoft.module.textbook.vo.*;
 import com.xjrsoft.module.workflow.entity.WorkflowFormRelation;
 import com.xjrsoft.module.workflow.entity.XjrWorkflowOperateRecord;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.camunda.bpm.engine.history.HistoricProcessInstance;
+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;
@@ -34,6 +33,10 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
 import java.util.List;
 
 import static org.camunda.bpm.engine.impl.cmmn.execution.CaseExecutionState.COMPLETED;
@@ -76,7 +79,7 @@ public class WfTextbookClaimController {
     @ApiOperation(value="教材发放列表(移动端)")
     @SaCheckPermission("wftextbookclaim:detail")
     public RT<PageOutput<DistributePageVo>> distributePage(@Valid DistributePageDto dto){
-        IPage<DistributePageVo> page = wfTextbookClaimService.distributePageVo(dto);;
+        IPage<DistributePageVo> page = wfTextbookClaimService.distributePage(dto);;
         PageOutput<DistributePageVo> pageOutput = ConventPage.getPageOutput(page, DistributePageVo.class);
         return RT.ok(pageOutput);
     }
@@ -113,6 +116,14 @@ public class WfTextbookClaimController {
         return RT.ok(BeanUtil.toBean(wfTextbookClaimVo, WfTextbookClaimVo.class));
     }
 
+    @GetMapping(value = "/distribute-record")
+    @ApiOperation(value = "pc端教材发放记录")
+    @SaCheckPermission("wftextbookclaim:detail")
+    public RT<List<DistributeRecordVo>> distributeRecord(@RequestParam Long id) {
+        List<DistributeRecordVo> distributeRecordVos = wfTextbookClaimService.distributeRecord(id);
+        return RT.ok(distributeRecordVos);
+    }
+
     @PostMapping
     @ApiOperation(value = "新增教材申领")
     @SaCheckPermission("wftextbookclaim:add")
@@ -165,4 +176,15 @@ public class WfTextbookClaimController {
 
     }
 
+    @PostMapping("/claim-records-export-query")
+    @ApiOperation(value = "申领记录条件导出")
+    public ResponseEntity<byte[]> claimRecordsExportQuery(@Valid @RequestBody ClaimRecordsExportQueryDto dto) throws IOException {
+//    @GetMapping("/claim-records-export-query")
+//    @ApiOperation(value = "申领记录条件导出")
+//    public ResponseEntity<byte[]> claimRecordsExportQuery(@Valid ClaimRecordsExportQueryDto dto) throws IOException {
+        ByteArrayOutputStream bot = wfTextbookClaimService.claimRecordsExportQuery(dto);
+        String fileName = "申领记录";
+        fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8);
+        return RT.fileStream(bot.toByteArray(), fileName + ExcelTypeEnum.XLSX.getValue());
+    }
 }

+ 8 - 8
src/main/java/com/xjrsoft/module/textbook/dto/AddTextbookSubscriptionItemDto.java

@@ -49,16 +49,16 @@ public class AddTextbookSubscriptionItemDto implements Serializable {
     */
     @ApiModelProperty("教师用书征订数量")
     private Integer teacherNum;
-    /**
-     * 定价(元)
-     */
-    @ApiModelProperty("定价(元)")
-    private BigDecimal sourcePrice;
 //    /**
-//     * 小计(元)
+//     * 定价(元)
 //     */
-//    @ApiModelProperty("小计(元)")
-//    private BigDecimal price;
+//    @ApiModelProperty("定价(元)")
+//    private BigDecimal sourcePrice;
+    /**
+     * 小计(元)
+     */
+    @ApiModelProperty("小计(元)")
+    private BigDecimal price;
     /**
     * 实际折扣
     */

+ 13 - 0
src/main/java/com/xjrsoft/module/textbook/dto/ClaimRecordsExportQueryDto.java

@@ -0,0 +1,13 @@
+package com.xjrsoft.module.textbook.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ClaimRecordsExportQueryDto {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("学期主键编号")
+    private String baseSemesterId;
+}

+ 7 - 1
src/main/java/com/xjrsoft/module/textbook/service/IWfTextbookClaimService.java

@@ -2,14 +2,17 @@ package com.xjrsoft.module.textbook.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.textbook.dto.ClaimRecordsExportQueryDto;
 import com.xjrsoft.module.textbook.dto.ConfirmDistributeDto;
 import com.xjrsoft.module.textbook.dto.DistributePageDto;
 import com.xjrsoft.module.textbook.dto.WfTextbookClaimPageDto;
 import com.xjrsoft.module.textbook.entity.WfTextbookClaim;
 import com.xjrsoft.module.textbook.vo.DistributePageVo;
+import com.xjrsoft.module.textbook.vo.DistributeRecordVo;
 import com.xjrsoft.module.textbook.vo.WfTextbookClaimPageVo;
 import com.xjrsoft.module.textbook.vo.WfTextbookClaimVo;
 
+import java.io.ByteArrayOutputStream;
 import java.util.List;
 
 /**
@@ -21,7 +24,7 @@ import java.util.List;
 
 public interface IWfTextbookClaimService extends MPJBaseService<WfTextbookClaim> {
 
-    IPage<DistributePageVo> distributePageVo(DistributePageDto dto);
+    IPage<DistributePageVo> distributePage(DistributePageDto dto);
 
     /**
     * 新增
@@ -61,6 +64,8 @@ public interface IWfTextbookClaimService extends MPJBaseService<WfTextbookClaim>
      */
     WfTextbookClaimVo infoDistribute(Long id);
 
+    List<DistributeRecordVo> distributeRecord(Long id);
+
     /**
      * 确认发放
      * @param dto
@@ -70,4 +75,5 @@ public interface IWfTextbookClaimService extends MPJBaseService<WfTextbookClaim>
 
     Boolean dataHandleAddClaimUserNode(Long id);
 
+    ByteArrayOutputStream claimRecordsExportQuery(ClaimRecordsExportQueryDto dto);
 }

+ 42 - 19
src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookSubscriptionServiceImpl.java

@@ -267,11 +267,14 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
         BigDecimal currentPrice;
         BigDecimal currentTotalPrice;
         for (TextbookSubscriptionItem textbookSubscriptionItem : textbookSubscriptionItemList) {
-            stuNum += textbookSubscriptionItem.getStudentNum();
-            teaNum += textbookSubscriptionItem.getTeacherNum();
+            int itemStuNum = ObjectUtils.isNotEmpty(textbookSubscriptionItem.getStudentNum()) ? textbookSubscriptionItem.getStudentNum() : 0;
+            int itemTeaNum = ObjectUtils.isNotEmpty(textbookSubscriptionItem.getTeacherNum()) ? textbookSubscriptionItem.getTeacherNum() : 0;
+
+            stuNum += itemStuNum;
+            teaNum += itemTeaNum;
 
             currentPrice = textbookSubscriptionItem.getPrice();
-            currentTotalPrice = currentPrice.multiply(BigDecimal.valueOf(textbookSubscriptionItem.getTeacherNum() + textbookSubscriptionItem.getStudentNum()));
+            currentTotalPrice = currentPrice.multiply(BigDecimal.valueOf(itemStuNum + itemTeaNum));
             totalPrice = totalPrice.add(currentTotalPrice);
         }
         TextbookSubscriptionDetailVo textbookSubscriptionDetailVo = new TextbookSubscriptionDetailVo();
@@ -367,22 +370,22 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
     public Boolean add(AddTextbookSubscriptionDto dto) {
         TextbookSubscription textbookSubscription = BeanUtil.toBean(dto, TextbookSubscription.class);
 
-        List<TextbookSubscriptionItem> textbookSubscriptionItemList = new ArrayList<>();
-        TextbookSubscriptionItem item;
-        for(AddTextbookSubscriptionItemDto addItemDto : dto.getTextbookSubscriptionItemList()){
-            item = BeanUtil.toBean(addItemDto, TextbookSubscriptionItem.class);
-            if(ObjectUtils.isEmpty(addItemDto.getSourcePrice())){
-                addItemDto.setSourcePrice(BigDecimal.ZERO);
-            }
-
-            if(ObjectUtils.isEmpty(addItemDto.getDiscount())){
-                addItemDto.setDiscount(10D);
-            }
-
-            item.setPrice(addItemDto.getSourcePrice().multiply(BigDecimal.valueOf(addItemDto.getDiscount() / 10)));
-            textbookSubscriptionItemList.add(item);
-        }
-        textbookSubscription.setTextbookSubscriptionItemList(textbookSubscriptionItemList);
+//        List<TextbookSubscriptionItem> textbookSubscriptionItemList = new ArrayList<>();
+//        TextbookSubscriptionItem item;
+//        for(AddTextbookSubscriptionItemDto addItemDto : dto.getTextbookSubscriptionItemList()){
+//            item = BeanUtil.toBean(addItemDto, TextbookSubscriptionItem.class);
+//            if(ObjectUtils.isEmpty(addItemDto.getSourcePrice())){
+//                addItemDto.setSourcePrice(BigDecimal.ZERO);
+//            }
+//
+//            if(ObjectUtils.isEmpty(addItemDto.getDiscount())){
+//                addItemDto.setDiscount(10D);
+//            }
+//
+//            item.setPrice(addItemDto.getSourcePrice().multiply(BigDecimal.valueOf(addItemDto.getDiscount() / 10)));
+//            textbookSubscriptionItemList.add(item);
+//        }
+//        textbookSubscription.setTextbookSubscriptionItemList(textbookSubscriptionItemList);
 
         // 处理征订表
         int sum = 0;
@@ -444,6 +447,17 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
         // 处理征订项
         TextbookSubscriptionItemClass textbookSubscriptionItemClass;
         for (TextbookSubscriptionItem textbookSubscriptionItem : textbookSubscription.getTextbookSubscriptionItemList()) {
+
+            if(ObjectUtils.isEmpty(textbookSubscriptionItem.getPrice())){
+                textbookSubscriptionItem.setPrice(BigDecimal.ZERO);
+            }
+
+            if(ObjectUtils.isEmpty(textbookSubscriptionItem.getDiscount())){
+                textbookSubscriptionItem.setDiscount(10D);
+            }
+
+            textbookSubscriptionItem.setPrice(textbookSubscriptionItem.getPrice().multiply(BigDecimal.valueOf(textbookSubscriptionItem.getDiscount() / 10)));
+
             String[] classIdArr = new String[0];
             if (ObjectUtils.isNotEmpty(textbookSubscription.getSubscriptionMethod())
                     && textbookSubscription.getSubscriptionMethod() == 1
@@ -815,6 +829,15 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
 
             TextbookSubscriptionItemClass textbookSubscriptionItemClass;
             for (TextbookSubscriptionItem textbookSubscriptionItem : textbookSubscription.getTextbookSubscriptionItemList()) {
+                if(ObjectUtils.isEmpty(textbookSubscriptionItem.getPrice())){
+                    textbookSubscriptionItem.setPrice(BigDecimal.ZERO);
+                }
+
+                if(ObjectUtils.isEmpty(textbookSubscriptionItem.getDiscount())){
+                    textbookSubscriptionItem.setDiscount(10D);
+                }
+
+                textbookSubscriptionItem.setPrice(textbookSubscriptionItem.getPrice().multiply(BigDecimal.valueOf(textbookSubscriptionItem.getDiscount() / 10)));
                 // 如果不等于空则修改
                 if (textbookSubscriptionItem.getId() != null) {
                     textbookSubscriptionTextbookSubscriptionItemMapper.updateById(textbookSubscriptionItem);

+ 124 - 2
src/main/java/com/xjrsoft/module/textbook/service/impl/WfTextbookClaimServiceImpl.java

@@ -1,6 +1,8 @@
 package com.xjrsoft.module.textbook.service.impl;
 
 import cn.dev33.satoken.stp.StpUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.support.ExcelTypeEnum;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -15,12 +17,14 @@ import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.utils.SortCodeUtil;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.base.entity.BaseClass;
+import com.xjrsoft.module.base.entity.BaseSemester;
 import com.xjrsoft.module.organization.entity.Role;
 import com.xjrsoft.module.organization.entity.UserRoleRelation;
 import com.xjrsoft.module.organization.mapper.RoleMapper;
 import com.xjrsoft.module.system.entity.DictionaryDetail;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.teacher.mapper.XjrUserMapper;
+import com.xjrsoft.module.textbook.dto.ClaimRecordsExportQueryDto;
 import com.xjrsoft.module.textbook.dto.ConfirmDistributeDto;
 import com.xjrsoft.module.textbook.dto.DistributePageDto;
 import com.xjrsoft.module.textbook.dto.WfTextbookClaimPageDto;
@@ -37,6 +41,7 @@ import org.camunda.bpm.engine.history.HistoricProcessInstance;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.io.ByteArrayOutputStream;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -52,6 +57,7 @@ import java.util.stream.Collectors;
 @Service
 @AllArgsConstructor
 public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookClaimMapper, WfTextbookClaim> implements IWfTextbookClaimService {
+
     private final WfTextbookClaimMapper wfTextbookClaimWfTextbookClaimMapper;
 
     private final WfTextbookClaimItemMapper wfTextbookClaimWfTextbookClaimItemMapper;
@@ -67,7 +73,7 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
     private final TextbookWarehouseRecordMapper textbookWarehouseRecordMapper;
 
     @Override
-    public IPage<DistributePageVo> distributePageVo(DistributePageDto dto) {
+    public IPage<DistributePageVo> distributePage(DistributePageDto dto) {
         MPJLambdaWrapper<WfTextbookClaim> wfTextbookClaimMPJLambdaWrapper = new MPJLambdaWrapper<>();
         wfTextbookClaimMPJLambdaWrapper
                 .disableSubLogicDel()
@@ -86,6 +92,14 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
                         wrapper -> wrapper
                                 .selectAs(BaseClass::getName, DistributePageVo::getClassIdCn)
                 )
+                .leftJoin(BaseSemester.class, BaseSemester::getId, WfTextbookClaim::getBaseSemesterId,
+                        wrapper -> wrapper
+                                .selectAs(BaseSemester::getName, DistributePageVo::getBaseSemesterIdCn)
+                )
+                .leftJoin(XjrUser.class, XjrUser::getId, WfTextbookClaim::getStudentUserId,
+                        wrapper -> wrapper
+                                .selectAs(XjrUser::getName, DistributePageVo::getStudentUserIdCn)
+                )
                 .eq(WorkflowFormRelation::getCurrentState, HistoricProcessInstance.STATE_COMPLETED)
                 .eq(WfTextbookClaim::getBaseSemesterId, dto.getBaseSemesterId())
                 .eq(StringUtils.isNotEmpty(dto.getClaimType()), WfTextbookClaim::getClaimType, dto.getClaimType())
@@ -109,7 +123,7 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
                     .collect(Collectors.toList());
             Map<Long, WfTextbookClaimItem> applicantTatolNumberMap = new HashMap<>();
             WfTextbookClaimItem wfTextbookClaimItem;
-            if(ObjectUtils.isNotEmpty(distributePageVos)){
+            if(ObjectUtils.isNotEmpty(textbookClaimIds)){
                 MPJLambdaWrapper<WfTextbookClaimItem> wfTextbookClaimItemLambdaQueryWrapper = new MPJLambdaWrapper<>();
                 wfTextbookClaimItemLambdaQueryWrapper
                         .selectAs(WfTextbookClaimItem::getWfTextbookClaimId, WfTextbookClaimItem::getWfTextbookClaimId)
@@ -268,6 +282,29 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
         return wfTextbookClaimVo;
     }
 
+    @Override
+    public List<DistributeRecordVo> distributeRecord(Long id) {
+        MPJLambdaWrapper<TextbookIssueRecord> textbookIssueRecordMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        textbookIssueRecordMPJLambdaWrapper
+                .disableSubLogicDel()
+                .selectAs(TextbookIssueRecord::getCreateDate, DistributeRecordVo::getIssueDate)
+                .selectAs(TextbookIssueRecord::getIssueNumber, DistributeRecordVo::getIssueNumber)
+                .selectAs(TextbookIssueRecord::getOrderNumber, DistributeRecordVo::getOrderNumber)
+                .selectAs(TextbookIssueRecord::getRemark, DistributeRecordVo::getRemark)
+                .leftJoin(Textbook.class, Textbook::getId, TextbookIssueRecord::getTextbookId,
+                        wrapper -> wrapper
+                                .selectAs(Textbook::getBookName, DistributeRecordVo::getTextbookIdCn)
+                        )
+                .leftJoin(XjrUser.class, XjrUser::getId, TextbookIssueRecord::getIssueUserId,
+                        wrapper -> wrapper
+                                .selectAs(XjrUser::getName, DistributeRecordVo::getIssueUser)
+                )
+                .eq(TextbookIssueRecord::getDataId, id)
+                ;
+
+        return textbookIssueRecordMapper.selectJoinList(DistributeRecordVo.class, textbookIssueRecordMPJLambdaWrapper);
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean confirmDistribute(ConfirmDistributeDto dto) {
@@ -539,4 +576,89 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
         }
         return true;
     }
+
+    @Override
+    public ByteArrayOutputStream claimRecordsExportQuery(ClaimRecordsExportQueryDto dto) {
+        MPJLambdaWrapper<WfTextbookClaim> wfTextbookClaimMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        wfTextbookClaimMPJLambdaWrapper
+                .disableSubLogicDel()
+                .select(WfTextbookClaim::getId)
+                .select(WfTextbookClaim.class,x -> VoToColumnUtil.fieldsToColumns(ClaimRecordsExportQueryVo.class).contains(x.getProperty()))
+                .innerJoin(WorkflowFormRelation.class, WorkflowFormRelation::getFormKeyValue, WfTextbookClaim::getId)
+                .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, WfTextbookClaim::getClaimType,
+                        wrapper -> wrapper
+                                .selectAs(DictionaryDetail::getName, ClaimRecordsExportQueryVo::getClaimTypeCn)
+                )
+                .leftJoin(XjrUser.class, XjrUser::getId, WfTextbookClaim::getApplicantUserId,
+                        wrapper -> wrapper
+                                .selectAs(XjrUser::getName, ClaimRecordsExportQueryVo::getApplicantUserIdCn)
+                )
+                .leftJoin(BaseClass.class, BaseClass::getId, WfTextbookClaim::getClassId,
+                        wrapper -> wrapper
+                                .selectAs(BaseClass::getName, ClaimRecordsExportQueryVo::getClassIdCn)
+                )
+                .leftJoin(BaseSemester.class, BaseSemester::getId, WfTextbookClaim::getBaseSemesterId,
+                        wrapper -> wrapper
+                                .selectAs(BaseSemester::getName, ClaimRecordsExportQueryVo::getBaseSemesterIdCn)
+                )
+                .eq(WorkflowFormRelation::getCurrentState, HistoricProcessInstance.STATE_COMPLETED)
+                .eq(ObjectUtils.isNotEmpty(dto.getBaseSemesterId()), WfTextbookClaim::getBaseSemesterId, dto.getBaseSemesterId())
+        ;
+        List<ClaimRecordsExportQueryVo> dataList = this.selectJoinList(ClaimRecordsExportQueryVo.class, wfTextbookClaimMPJLambdaWrapper);
+
+        // 处理申领总数量和已经发放总数量
+        if(ObjectUtils.isNotEmpty(dataList)){
+            List<Long> textbookClaimIds = dataList.stream()
+                    .map(ClaimRecordsExportQueryVo::getId)
+                    .collect(Collectors.toList());
+            Map<Long, WfTextbookClaimItem> applicantTatolNumberMap = new HashMap<>();
+            WfTextbookClaimItem wfTextbookClaimItem;
+            if(ObjectUtils.isNotEmpty(textbookClaimIds)){
+                MPJLambdaWrapper<WfTextbookClaimItem> wfTextbookClaimItemLambdaQueryWrapper = new MPJLambdaWrapper<>();
+                wfTextbookClaimItemLambdaQueryWrapper
+                        .selectAs(WfTextbookClaimItem::getWfTextbookClaimId, WfTextbookClaimItem::getWfTextbookClaimId)
+                        .selectSum(WfTextbookClaimItem::getApplicantNumber, WfTextbookClaimItem::getApplicantNumber)
+                        .selectSum(WfTextbookClaimItem::getIssueNumber, WfTextbookClaimItem::getIssueNumber)
+                        .in(WfTextbookClaimItem::getWfTextbookClaimId, textbookClaimIds)
+                        .groupBy(WfTextbookClaimItem::getWfTextbookClaimId)
+                ;
+                List<WfTextbookClaimItem> wfTextbookClaimItemList = wfTextbookClaimWfTextbookClaimItemMapper.selectJoinList(WfTextbookClaimItem.class, wfTextbookClaimItemLambdaQueryWrapper);
+                if(ObjectUtils.isNotEmpty(wfTextbookClaimItemList)){
+                    applicantTatolNumberMap = wfTextbookClaimItemList.stream()
+                            .collect(Collectors.toMap(WfTextbookClaimItem::getWfTextbookClaimId, w -> w, (w1, w2) -> w1));
+                }
+            }
+            if(ObjectUtils.isNotEmpty(applicantTatolNumberMap)){
+                for(ClaimRecordsExportQueryVo vo : dataList){
+                    wfTextbookClaimItem = applicantTatolNumberMap.get(vo.getId());
+                    if(ObjectUtils.isNotEmpty(wfTextbookClaimItem)){
+                        vo.setApplicantTatolNumber(wfTextbookClaimItem.getApplicantNumber());
+                        vo.setIssueTatolNumber(wfTextbookClaimItem.getIssueNumber());
+                    }
+                }
+            }
+        }
+
+        for(ClaimRecordsExportQueryVo vo : dataList){
+            if(ObjectUtils.isNotEmpty(vo.getClaimType()) && ClaimTypeEnum.ClaimClass.getCode().equals(vo.getClaimType())){
+                vo.setReceiver(vo.getClassIdCn());
+            }else {
+                vo.setReceiver(vo.getApplicantUserIdCn());
+            }
+
+            // 1:未发放,2:部分发放,3:全部发放)
+            if (vo.getStatus() == 2) {
+                vo.setStatusStr("部分发放");
+            }else if (vo.getStatus() == 3) {
+                vo.setStatusStr("全部发放");
+            }else {
+                vo.setStatusStr("未发放");
+            }
+        }
+
+        ByteArrayOutputStream bot = new ByteArrayOutputStream();
+        EasyExcel.write(bot, ClaimRecordsExportQueryVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(dataList);
+
+        return bot;
+    }
 }

+ 64 - 0
src/main/java/com/xjrsoft/module/textbook/vo/ClaimRecordsExportQueryVo.java

@@ -0,0 +1,64 @@
+package com.xjrsoft.module.textbook.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ClaimRecordsExportQueryVo {
+    @ExcelIgnore
+    @ApiModelProperty("主键编号")
+    private Long id;
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("学期")
+    @ApiModelProperty("学期ID(base_semester)")
+    private String baseSemesterIdCn;
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelIgnore
+    @ApiModelProperty("申领类型(xjr_dictionary_item[claim_type])")
+    private String claimType;
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("申领类型")
+    @ApiModelProperty("申领类型(xjr_dictionary_item[claim_type])")
+    private String claimTypeCn;
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("领取人")
+    @ApiModelProperty("领取人")
+    private String receiver;
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelIgnore
+    @ApiModelProperty("申请人")
+    private String applicantUserIdCn;
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelIgnore
+    @ApiModelProperty("班级编号")
+    private String classIdCn;
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("申请数量")
+    @ApiModelProperty("申请总数量")
+    private Integer applicantTatolNumber;
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelIgnore
+    @ApiModelProperty("状态()")
+    private Integer status;
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("发放状态")
+    @ApiModelProperty("状态()")
+    private String statusStr;
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("发放数量")
+    @ApiModelProperty("已经发放总数量")
+    private Integer issueTatolNumber;
+}

+ 18 - 0
src/main/java/com/xjrsoft/module/textbook/vo/DistributePageVo.java

@@ -21,6 +21,12 @@ public class DistributePageVo {
     @ApiModelProperty("申请人")
     private String applicantUserIdCn;
 
+    @ApiModelProperty("学期ID(base_semester)")
+    private Long baseSemesterId;
+
+    @ApiModelProperty("学期ID(base_semester)")
+    private String baseSemesterIdCn;
+
     @ApiModelProperty("班级编号")
     private Long classId;
 
@@ -32,4 +38,16 @@ public class DistributePageVo {
 
     @ApiModelProperty("已经发放总数量")
     private Integer issueTatolNumber;
+
+    @ApiModelProperty("学生编号")
+    private Long studentUserId;
+
+    @ApiModelProperty("学生编号")
+    private String studentUserIdCn;
+
+    @ApiModelProperty("领取地点")
+    private String claimAddress;
+
+    @ApiModelProperty("状态()")
+    private Integer status;
 }

+ 52 - 0
src/main/java/com/xjrsoft/module/textbook/vo/DistributeRecordVo.java

@@ -0,0 +1,52 @@
+package com.xjrsoft.module.textbook.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+* @title: 教材入库表单出参
+* @Author dzx
+* @Date: 2023-12-26
+* @Version 1.0
+*/
+@Data
+public class DistributeRecordVo {
+
+    /**
+    * 出库时间
+    */
+    @ApiModelProperty("出库时间")
+    private Date issueDate;
+
+    /**
+    * 出库人员
+    */
+    @ApiModelProperty("出库人员")
+    private String issueUser;
+
+    /**
+     * 教材管理编号
+     */
+    @ApiModelProperty("教材管理编号")
+    private String textbookIdCn;
+
+    /**
+     * 出库单号(标识+当前时间(YYYYMMDDHHmmss)+三位序号+当前申领项出库次数(-n))
+     */
+    @ApiModelProperty("出库单号(标识+当前时间(YYYYMMDDHHmmss)+三位序号+当前申领项出库次数(-n))")
+    private String orderNumber;
+
+    /**
+    * 出库数量
+    */
+    @ApiModelProperty("出库数量")
+    private Integer issueNumber;
+
+    /**
+     * 备注
+     */
+    @ApiModelProperty("备注")
+    private String remark;
+}

+ 10 - 6
src/main/resources/mapper/banding/BandingTaskClassMapper.xml

@@ -8,20 +8,24 @@
         (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
+        and a1.is_can_banding = 1
         AND a2.enroll_type = #{dto.enrollType} AND a2.grade_id =#{dto.gradeId} ) AS first_ambition_count,
         (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.second_ambition_id = t1.major_set_id
+        and a1.is_can_banding = 1
         AND a2.enroll_type = #{dto.enrollType} AND a2.grade_id =#{dto.gradeId} ) AS second_ambition_count,
         t5.height, t5.score, (
             SELECT count(a1.id) FROM base_new_student a1
             INNER JOIN banding_task_class_student t5 ON a1.id = t5.new_student_id
+            and a1.is_can_banding = 1
             WHERE a1.delete_mark = 0 AND t5.delete_mark = 0 AND t5.banding_task_class_id = t1.id
         ) as satisfy_count, (
             SELECT count(a1.id) FROM base_new_student a1
             LEFT JOIN enrollment_plan a2 ON a1.enrollment_plan_id = a2.id
             LEFT JOIN banding_task a3 ON a2.grade_id = a3.grade_id AND a2.enroll_type = a3.enroll_type
             WHERE a1.delete_mark = 0 AND a3.id = t1.banding_task_id
+            and a1.is_can_banding = 1
             AND (a1.first_ambition_id = t1.major_set_id or a1.second_ambition_id = t1.major_set_id)
             and a1.id not in (SELECT new_student_id FROM banding_task_class_student c1
             INNER JOIN banding_task_class c2 ON c1.banding_task_class_id = c2.id
@@ -47,19 +51,19 @@
         SELECT t1.id, t1.major_set_id,t2.name AS major_set_name, t1.name,t1.sort_code,
         (SELECT COUNT(*) FROM base_new_student a1
         INNER JOIN banding_task_class_student a2 ON a1.id = a2.new_student_id
-        WHERE a1.delete_mark = 0 AND a2.delete_mark = 0 AND a2.banding_task_class_id = t1.id) AS number,
+        WHERE a1.delete_mark = 0 AND a2.delete_mark = 0 AND a2.banding_task_class_id = t1.id and a1.is_can_banding = 1) AS number,
         (SELECT COUNT(*) FROM base_new_student a1
         INNER JOIN banding_task_class_student a2 ON a1.id = a2.new_student_id
-        WHERE a1.delete_mark = 0 AND a2.delete_mark = 0 AND a2.banding_task_class_id = t1.id AND a1.gender = 'SB10001') AS male_count,
+        WHERE a1.delete_mark = 0 AND a2.delete_mark = 0 AND a2.banding_task_class_id = t1.id and a1.is_can_banding = 1 AND a1.gender = 'SB10001') AS male_count,
         (SELECT COUNT(*) FROM base_new_student a1
         INNER JOIN banding_task_class_student a2 ON a1.id = a2.new_student_id
-        WHERE a1.delete_mark = 0 AND a2.delete_mark = 0 AND a2.banding_task_class_id = t1.id AND a1.gender = 'SB10002') AS female_count,
+        WHERE a1.delete_mark = 0 AND a2.delete_mark = 0 AND a2.banding_task_class_id = t1.id and a1.is_can_banding = 1 AND a1.gender = 'SB10002') AS female_count,
         (SELECT COUNT(*) FROM base_new_student a1
         INNER JOIN banding_task_class_student a2 ON a1.id = a2.new_student_id
-        WHERE a1.delete_mark = 0 AND a2.delete_mark = 0 AND a2.banding_task_class_id = t1.id AND a1.stduy_status = 'FB3001') AS not_stay_count,
+        WHERE a1.delete_mark = 0 AND a2.delete_mark = 0 AND a2.banding_task_class_id = t1.id and a1.is_can_banding = 1 AND a1.stduy_status = 'FB3001') AS not_stay_count,
         (SELECT COUNT(*) FROM base_new_student a1
         INNER JOIN banding_task_class_student a2 ON a1.id = a2.new_student_id
-        WHERE a1.delete_mark = 0 AND a2.delete_mark = 0 AND a2.banding_task_class_id = t1.id AND a1.stduy_status = 'FB3002') AS stay_count,
+        WHERE a1.delete_mark = 0 AND a2.delete_mark = 0 AND a2.banding_task_class_id = t1.id and a1.is_can_banding = 1 AND a1.stduy_status = 'FB3002') AS stay_count,
         t3.name AS teacher_name,t4.name as classroom_name, t1.is_order_class FROM banding_task_class t1
         LEFT JOIN base_major_set t2 ON t1.major_set_id = t2.id
         LEFT JOIN xjr_user t3 ON t1.teacher_id = t3.id
@@ -80,7 +84,7 @@
         LEFT JOIN xjr_dictionary_detail t7 ON t1.stduy_status = t7.code
         LEFT JOIN xjr_user t8 ON t3.teacher_id = t8.id
         INNER JOIN enrollment_plan t9 ON t1.enrollment_plan_id = t9.id
-        WHERE t1.delete_mark = 0
+        WHERE t1.delete_mark = 0 and t1.is_can_banding = 1
         and t9.grade_id = #{dto.gradeId} and t9.enroll_type = #{dto.enrollType}
         <if test="dto.credentialNumber != null and dto.credentialNumber != ''">
             AND t1.credential_number like concat('%', #{dto.credentialNumber}, '%')

+ 5 - 3
src/main/resources/mapper/banding/BandingTaskClassStudentMapper.xml

@@ -6,7 +6,7 @@
     <select id="satisfyStudent" parameterType="com.xjrsoft.module.banding.dto.StudentDto" resultType="com.xjrsoft.module.student.vo.BaseNewStudentPageVo">
         SELECT t1.id,t1.graduate_school,t1.name,t1.gender,t2.name AS gender_cn,t1.credential_number,t1.height,t1.weight,
         t1.score,t1.graduate_class,t6.name as source,t1.stduy_status,t3.name AS stduy_status_cn,t1.mobile,t7.name as first_ambition,
-        t8.name as second_ambition,t1.is_adjust,t1.status FROM base_new_student t1
+        t8.name as second_ambition,t1.is_adjust,t1.status,t1.remarks FROM base_new_student t1
         INNER JOIN banding_task_class_student t5 ON t1.id = t5.new_student_id
         LEFT JOIN xjr_dictionary_detail t2 ON t1.gender = t2.code AND t2.item_id = 2023000000000000004
         LEFT JOIN xjr_dictionary_detail t3 ON t1.stduy_status = t3.code AND t3.item_id = 2023000000000000030
@@ -14,7 +14,8 @@
         LEFT JOIN enrollment_plan t4 ON t1.enrollment_plan_id = t4.id
         LEFT JOIN base_major_set t7 ON t1.first_ambition = t7.id
         LEFT JOIN base_major_set t8 ON t1.second_ambition = t8.id
-        WHERE t1.delete_mark = 0 AND t5.delete_mark = 0 AND t5.banding_task_class_id = #{dto.bandingTaskClassId}
+        WHERE t1.delete_mark = 0 AND t5.delete_mark = 0 and t1.is_can_banding = 1
+        AND t5.banding_task_class_id = #{dto.bandingTaskClassId}
         <if test="dto.name != null and dto.name != ''">
             and t1.name like concat('%', #{dto.name},'%')
         </if>
@@ -53,7 +54,7 @@
     <select id="surplusStudent" parameterType="com.xjrsoft.module.banding.dto.StudentDto" resultType="com.xjrsoft.module.student.vo.BaseNewStudentPageVo">
         SELECT t1.id,t1.graduate_school,t1.name,t1.gender,t2.name AS gender_cn,t1.credential_number,t1.height,t1.weight,
         t1.score,t1.graduate_class,t6.name as source,t1.stduy_status,t3.name AS stduy_status_cn,t1.mobile,t7.name as first_ambition,
-        t8.name as second_ambition,t1.is_adjust,t1.status FROM base_new_student t1
+        t8.name as second_ambition,t1.is_adjust,t1.status,t1.remarks FROM base_new_student t1
         LEFT JOIN xjr_dictionary_detail t2 ON t1.gender = t2.code AND t2.item_id = 2023000000000000004
         LEFT JOIN xjr_dictionary_detail t3 ON t1.stduy_status = t3.code AND t3.item_id = 2023000000000000030
         LEFT JOIN enrollment_plan t4 ON t1.enrollment_plan_id = t4.id
@@ -62,6 +63,7 @@
         LEFT JOIN base_major_set t7 ON t1.first_ambition = t7.id
         LEFT JOIN base_major_set t8 ON t1.second_ambition = t8.id
         WHERE t1.delete_mark = 0 AND t5.id = #{dto.bandingTaskId}
+        and t1.is_can_banding = 1
         AND (t1.first_ambition_id = #{dto.majorSetId} or t1.second_ambition_id = #{dto.majorSetId})
             and t1.id not in (SELECT new_student_id FROM banding_task_class_student c1
             INNER JOIN banding_task_class c2 ON c1.banding_task_class_id = c2.id

+ 1 - 0
src/main/resources/mapper/banding/BandingTaskMapper.xml

@@ -9,6 +9,7 @@
         INNER JOIN enrollment_plan a2 ON a1.enrollment_plan_id = a2.id
         WHERE a1.delete_mark = 0 AND a2.delete_mark = 0
         AND a2.grade_id = t.grade_id AND a2.enroll_type = t.enroll_type
+        and a1.is_can_banding = 1
         ) AS admissions_count,
         (SELECT COUNT(*) FROM banding_task_class_student a1
         INNER JOIN banding_task_class a2 ON a1.banding_task_class_id = a2.id

+ 7 - 5
src/main/resources/mapper/student/BaseNewStudentMapper.xml

@@ -6,7 +6,8 @@
     <select id="getPage" parameterType="com.xjrsoft.module.student.dto.BaseNewStudentPageDto" resultType="com.xjrsoft.module.student.vo.BaseNewStudentPageVo">
         SELECT t1.id,t1.graduate_school,t1.name,t1.gender,t2.name AS gender_cn,t1.credential_number,t1.height,t1.weight,
         t1.score,t1.graduate_class,t1.source,t5.name as source_cn,t1.stduy_status,t3.name AS stduy_status_cn,t1.mobile,t7.name as first_ambition,
-        t8.name as second_ambition,t1.is_adjust,t1.status,ifnull(t11.name,t1.delete_reason) AS class_name,t12.name AS teacher_name FROM base_new_student t1
+        t8.name as second_ambition,t1.is_adjust,t1.status,ifnull(t11.name,t1.delete_reason) AS class_name,t12.name AS teacher_name,
+        t1.paymnystate,t1.userdef6,t1.previous,t1.province,t1.city,t1.myarea,t1.remarks,t1.is_can_banding FROM base_new_student t1
         LEFT JOIN xjr_dictionary_detail t2 ON t1.gender = t2.code AND t2.item_id = 2023000000000000004
         LEFT JOIN xjr_dictionary_detail t3 ON t1.stduy_status = t3.code AND t3.item_id = 2023000000000000030
         LEFT JOIN xjr_dictionary_detail t5 ON t1.source = t5.code AND t5.item_id = 2023000000000000028
@@ -272,14 +273,14 @@
     <select id="getFirstAmbitionStudentCount" resultType="com.xjrsoft.module.outint.vo.IdCountVo">
         SELECT t1.first_ambition_id,COUNT(t1.id) FROM base_new_student t1
         INNER JOIN enrollment_plan t2 ON t1.enrollment_plan_id = t2.id
-        WHERE t1.delete_mark = 0 AND t2.grade_id = #{gradeId} AND t2.enroll_type = #{enrollType}
+        WHERE t1.delete_mark = 0 AND t2.grade_id = #{gradeId} AND t2.enroll_type = #{enrollType} and t1.is_can_banding = 1
         GROUP BY t1.first_ambition_id
     </select>
 
     <select id="getSecondAmbitionStudentCount" resultType="com.xjrsoft.module.outint.vo.IdCountVo">
         SELECT t1.second_ambition_id,COUNT(t1.id) FROM base_new_student t1
         INNER JOIN enrollment_plan t2 ON t1.enrollment_plan_id = t2.id
-        WHERE t1.delete_mark = 0 AND t2.grade_id = #{gradeId} AND t2.enroll_type = #{enrollType}
+        WHERE t1.delete_mark = 0 AND t2.grade_id = #{gradeId} AND t2.enroll_type = #{enrollType} and t1.is_can_banding = 1
         GROUP BY t1.second_ambition_id
     </select>
     <select id="getMajorStudentCount" resultType="com.xjrsoft.module.banding.vo.IdManyCountVo">
@@ -287,16 +288,17 @@
         SELECT COUNT(id) FROM base_new_student WHERE delete_mark = 0
         AND (first_ambition_id = t1.id OR second_ambition_id = t1.id)
         AND score >= IFNULL(t2.score,0) AND height >= IFNULL(t2.height,0)
+        and is_can_banding = 1
         ) AS count,(
         SELECT COUNT(id) FROM base_new_student WHERE delete_mark = 0
         AND (first_ambition_id = t1.id OR second_ambition_id = t1.id)
         AND score >= IFNULL(t2.score,0) AND height >= IFNULL(t2.height,0)
-        AND gender = 'SB10001'
+        AND gender = 'SB10001' and is_can_banding = 1
         ) AS male_count,(
         SELECT COUNT(id) FROM base_new_student WHERE delete_mark = 0
         AND (first_ambition_id = t1.id OR second_ambition_id = t1.id)
         AND score >= IFNULL(t2.score,0) AND height >= IFNULL(t2.height,0)
-        AND gender = 'SB10002'
+        AND gender = 'SB10002' and is_can_banding = 1
         ) AS female_count FROM base_major_set t1
         LEFT JOIN banding_task_major_condition t2 ON t1.id = t2.major_set_id AND t2.banding_task_id = #{id}
         AND t2.delete_mark = 0

+ 257 - 0
src/main/resources/sqlScript/20250224修改教师任课状况.sql

@@ -0,0 +1,257 @@
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954799374790;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954799658310;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954799879750;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954799989446;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954800061382;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954800124998;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954800267206;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954800338502;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954800663878;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954800729414;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954800861125;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954800923462;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954801050054;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954801127366;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954801262918;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954801314118;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954801469510;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954801522118;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954801634373;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954801696582;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954801758022;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954801811782;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954801865670;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954801923654;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954801977158;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954802031430;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954802086470;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954802144965;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954802209734;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954802263622;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954802315078;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954802387398;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954802443974;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954802495814;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954802549318;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954802607430;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954802667206;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954802721094;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954802774854;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954802829510;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954802890950;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954802974790;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954803038533;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954803099462;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954803163718;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954803230022;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954803294533;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954803353286;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954803422150;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954803479493;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954803537990;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954803638854;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954803690950;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954803745605;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954803800645;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954803858502;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954803912262;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954803967430;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954804022086;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954804076870;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954804129350;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954804188102;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954804240198;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954804294982;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954804348358;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954804408901;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954804463046;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954804515525;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954804566342;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954804711366;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954804763590;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954804814790;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954804867910;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954804921158;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954804984005;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954805050182;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954805179717;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954805247174;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954805310022;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954805371590;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954805436358;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954805497925;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954805603781;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954805657797;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954805708742;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954805761862;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954805813957;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954805865413;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954805914565;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954805970502;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954806025158;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954806076486;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954806131910;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954806186694;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954806239046;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954806289349;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954806340934;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954806398661;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954806452293;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954806507078;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954806566597;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954806671301;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954806729286;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954806783429;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954806840517;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954806910277;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954806963654;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954807016389;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954807072325;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954807126981;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954807179078;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954807233989;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954807285318;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954807337797;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954807403590;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954807464645;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954807528390;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954807593669;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954807658181;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954807722054;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954807789510;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954807852358;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954807984837;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954808053318;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954808118597;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954808193222;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954808252997;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954808305862;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954808357445;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954808407621;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954808458310;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954808506310;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954808563398;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954808614853;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954808666310;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954808717125;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954808776261;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954808825925;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954808879942;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954808930374;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954809128646;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954809180486;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954809230534;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954809282885;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954809344837;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954809408966;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954809476293;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954809540038;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954809603013;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954809663302;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954809726278;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954809856710;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954809973701;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954810028230;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954810084806;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954810137541;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954810187334;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954810287813;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954810345542;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954810421446;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954810522566;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954810941125;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954811050182;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954811099462;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954811209541;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954811274565;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954811337926;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954811461957;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954811527493;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954811591109;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954811657413;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954811869126;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954811987269;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954812109510;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954812217542;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954812809926;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954812870853;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954813001542;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954813069253;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954813134662;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954813260998;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954813353797;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954813417157;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954813743045;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954813899461;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954813945925;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954814093766;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954814295494;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954814347333;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954814403141;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954814454342;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954814504262;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954814557253;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954814606150;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954814708037;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954814918470;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954814969797;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954815249478;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954815309766;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954815372101;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954815638726;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954815704518;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954815769286;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954815828550;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954815957062;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954816018885;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954816085573;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954816148806;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954816214342;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954816270917;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954816325189;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954816376133;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954816523462;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954825256773;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954825310277;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 14954825361350;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331003650245;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331003775046;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331003820486;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331003902918;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331003948229;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331003989318;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331004047814;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331004110789;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331004147782;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331004231109;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331004284870;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331004332741;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331004404166;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331004442822;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331004489542;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331004532933;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331004591046;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331004629574;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331004669766;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331004709701;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331004748229;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331004791878;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331004840133;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331004886854;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331004962246;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331005008837;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331005062470;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331005146181;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331005250502;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331005340102;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331005428422;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331005503302;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331005611589;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331005694021;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010"]' WHERE user_id = 15331005996230;
+
+UPDATE base_teacher_regular SET teaching_status = '["FB2010", "FB2011"]' WHERE user_id = 14954799823302;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010", "FB2011"]' WHERE user_id = 1809453985425829889;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010", "FB2001"]' WHERE user_id = 1831563149358706689;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010", "FB2002"]' WHERE user_id = 1831628634259501057;
+UPDATE base_teacher_regular SET teaching_status = '["FB2010", "FB2002"]' WHERE user_id = 1833687003929554945;

+ 32 - 30
src/main/resources/sqlScript/textbook_sql.sql

@@ -387,22 +387,23 @@ create table `wf_textbook_recede`
 (
     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 '序号',
-
-    applicant_user_id bigint        null comment '申请人',
-    recede_type       varchar(20)   null comment '退书类型(xjr_dictionary_item[recede_type])',
-
-    base_semester_id  bigint        null comment '学期id(base_semester)',
-    class_id          bigint        null comment '班级编号',
+    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 '序号',
 
-    recede_address    varchar(1000) null comment '退还地点',
-    status            int default 0 not null comment '状态(1:结束 0:未结束)'
+    applicant_user_id    bigint        null comment '申请人',
+    is_stu_flag          int           null comment '是否是学生',
+    is_head_tea_flag     int           null comment '是否是班主任',
+    is_class_recede_flag int           null comment '是否是班主任为班级退书',
+    recede_type          varchar(20)   null comment '退书类型(xjr_dictionary_item[recede_type])',
+    base_semester_id     bigint        null comment '学期id(base_semester)',
+    class_id             bigint        null comment '班级编号',
+    recede_address       varchar(1000) null comment '退还地点',
+    status               int default 0 not null comment '状态(1:结束 0:未结束)'
 ) engine = innodb
   default charset = utf8mb4
   collate = utf8mb4_0900_ai_ci comment ='退书申请';
@@ -416,18 +417,20 @@ create table `wf_textbook_recede_item`
 (
     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 '序号',
-
-    wf_textbook_recede_id bigint   null comment '退书申请编号',
-
-    textbook_id           bigint   null comment '教材管理编号',
-    number                int      null comment '数量'
+    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 '序号',
+
+    wf_textbook_recede_id       bigint       null comment '退书申请编号',
+    textbook_issue_record_id    bigint       null comment '出库记录主键',
+    textbook_issue_order_number varchar(256) null comment '出库订单号',
+    textbook_id                 bigint       null comment '教材管理编号',
+    textbook_name               varchar(256) null comment '教材名字',
+    number                      int          null comment '数量'
 ) engine = innodb
   default charset = utf8mb4
   collate = utf8mb4_0900_ai_ci comment ='退书申请项';
@@ -458,10 +461,9 @@ create table `textbook_discount_alter_record`
   collate = utf8mb4_0900_ai_ci comment ='教材折扣变更记录';
 
 alter table wf_textbook_recede_item
-    change textbook_issue_record_id textbook_issue_order_number varchar(256) null comment '出库订单号';
+    add textbook_issue_order_number varchar(256) null comment '出库订单号' after textbook_issue_record_id;
+
 
-alter table wf_textbook_recede_item
-    add textbook_issue_record_id bigint null comment '出库记录主键' after wf_textbook_recede_id;
 
 
 

+ 2 - 2
src/main/resources/sqlScript/学生异动视图.sql

@@ -11,7 +11,7 @@ IF(t1.change_type = 'student_type',t1.after_data,NULL) AS newresourcecode,
 IF(t1.change_type = 'stduy_status',t1.after_data,NULL) AS newquartercode,
 t14.code AS newdeptcode,NULL AS newenteryear, NULL AS newleaveyear,NULL AS newratetypecode,
 IF(t1.change_type = 'archives_status',t1.after_data,NULL) AS newstate,
-t16.name AS operator,DATE_FORMAT(t1.create_date, '%Y-%m-%d') AS opertordate,t1.id AS pkfeeobjchange,t2.credential_number AS Personalid,t2.name AS Feeobjname,
+t16.name AS operator,t1.create_date AS opertordate,t1.id AS pkfeeobjchange,t2.credential_number AS Personalid,t2.name AS Feeobjname,
 t17.student_id AS Studentcode,NULL AS biztype,NULL AS delflag,NULL AS updateflag
 FROM student_change_record t1
 INNER JOIN xjr_user t2 ON t1.user_id = t2.id
@@ -51,7 +51,7 @@ CREATE TABLE `test_cse_feeobj_change1`(
          `newratetypecode`  VARCHAR(30) DEFAULT NULL,
          `newstate`  VARCHAR(10) DEFAULT NULL,
          `operator`  VARCHAR(20) DEFAULT NULL,
-         `opertordate`  CHAR(10) DEFAULT NULL,
+         `opertordate`  CHAR(30) DEFAULT NULL,
          `pkfeeobjchange`  VARCHAR(40) DEFAULT NULL,
          `Personalid`  VARCHAR(20) DEFAULT NULL,
          `Feeobjname`  VARCHAR(60) DEFAULT NULL,

+ 39 - 0
src/main/resources/sqlScript/院系视图和专业视图.sql

@@ -0,0 +1,39 @@
+-- 正式环境院系视图
+DROP VIEW IF EXISTS bd_dept1;
+CREATE VIEW bd_dept1 AS
+SELECT t1.id AS pl_dept, t1.code AS deptcode, t1.name AS deptname,'1001' AS pk_crop,
+NULL AS deptdirector,t1.mobile AS Tel, NULL AS Tel2
+FROM xjr_department t1
+WHERE t1.delete_mark = 0 AND t1.enabled_mark = 1;
+
+-- 中台表
+CREATE TABLE `test_bd_dept1`(
+ `pl_dept` VARCHAR(40) DEFAULT NULL,
+ `deptcode` VARCHAR(40) DEFAULT NULL,
+ `deptname` VARCHAR(60) DEFAULT NULL,
+ `pk_crop` CHAR(4) DEFAULT NULL,
+ `deptdirector` VARCHAR(25) DEFAULT NULL,
+ `Tel` VARCHAR(30) DEFAULT NULL,
+ `Tel2` VARCHAR(30) DEFAULT NULL
+)ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='VIEW';
+
+
+
+-- 正式环境专业视图
+DROP VIEW IF EXISTS cse_spec1;
+CREATE VIEW cse_spec1 AS
+SELECT t1.id AS pkspec, t1.code AS speccode, t1.name AS specname,t2.code AS deptcode,'1001' AS pk_crop,
+t1.remark AS remarks
+FROM base_major_set t1
+INNER JOIN xjr_department t2 ON t1.department_id = t2.id
+WHERE t1.delete_mark = 0 AND t1.enabled_mark = 1;
+
+-- 中台表结构
+CREATE TABLE `test_cse_spec1`(
+   `pkspec`  VARCHAR(40) DEFAULT NULL,
+ `speccode`  VARCHAR(30) DEFAULT NULL,
+ `specname`  VARCHAR(60) DEFAULT NULL,
+ `deptcode`  VARCHAR(40) DEFAULT NULL,
+ `pk_crop`  CHAR(4) DEFAULT NULL,
+ `remarks`  VARCHAR(50) DEFAULT NULL
+)ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='VIEW'; 

+ 160 - 0
src/test/java/com/xjrsoft/module/classtime/service/impl/ClassTimeStatisticsServiceImplTest2.java

@@ -0,0 +1,160 @@
+package com.xjrsoft.module.classtime.service.impl;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.jupiter.api.Test;
+
+import java.util.Iterator;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * @author dzx
+ * @date 2024/12/2
+ */
+class ClassTimeStatisticsServiceImplTest2 {
+
+    @Test
+    void test() throws JsonProcessingException {
+        String columnTitle = "[\n" +
+                "        {\n" +
+                "            \"type\": \"早自习\",\n" +
+                "            \"content\": 0,\n" +
+                "            \"scheduleDate\": \"\",\n" +
+                "            \"adjustType\": \"\"\n" +
+                "        },\n" +
+                "        {\n" +
+                "            \"type\": \"上1\",\n" +
+                "            \"content\": 12,\n" +
+                "            \"scheduleDate\": \"\",\n" +
+                "            \"adjustType\": \"\"\n" +
+                "        },\n" +
+                "        {\n" +
+                "            \"type\": \"上2\",\n" +
+                "            \"content\": 12,\n" +
+                "            \"scheduleDate\": \"\",\n" +
+                "            \"adjustType\": \"\"\n" +
+                "        },\n" +
+                "        {\n" +
+                "            \"type\": \"上3\",\n" +
+                "            \"content\": 7,\n" +
+                "            \"scheduleDate\": \"\",\n" +
+                "            \"adjustType\": \"\"\n" +
+                "        },\n" +
+                "        {\n" +
+                "            \"type\": \"上4\",\n" +
+                "            \"content\": 1,\n" +
+                "            \"scheduleDate\": \"\",\n" +
+                "            \"adjustType\": \"\"\n" +
+                "        },\n" +
+                "        {\n" +
+                "            \"type\": \"下1\",\n" +
+                "            \"content\": 14,\n" +
+                "            \"scheduleDate\": \"\",\n" +
+                "            \"adjustType\": \"\"\n" +
+                "        },\n" +
+                "        {\n" +
+                "            \"type\": \"下2\",\n" +
+                "            \"content\": 7,\n" +
+                "            \"scheduleDate\": \"\",\n" +
+                "            \"adjustType\": \"\"\n" +
+                "        },\n" +
+                "        {\n" +
+                "            \"type\": \"下3\",\n" +
+                "            \"content\": 3,\n" +
+                "            \"scheduleDate\": \"\",\n" +
+                "            \"adjustType\": \"\"\n" +
+                "        },\n" +
+                "        {\n" +
+                "            \"type\": \"下4\",\n" +
+                "            \"content\": 0,\n" +
+                "            \"scheduleDate\": \"\",\n" +
+                "            \"adjustType\": \"\"\n" +
+                "        },\n" +
+                "        {\n" +
+                "            \"type\": \"晚1\",\n" +
+                "            \"content\": 9,\n" +
+                "            \"scheduleDate\": \"\",\n" +
+                "            \"adjustType\": \"\"\n" +
+                "        },\n" +
+                "        {\n" +
+                "            \"type\": \"晚2\",\n" +
+                "            \"content\": 9,\n" +
+                "            \"scheduleDate\": \"\",\n" +
+                "            \"adjustType\": \"\"\n" +
+                "        },\n" +
+                "        {\n" +
+                "            \"type\": \"晚3\",\n" +
+                "            \"content\": 7.5,\n" +
+                "            \"scheduleDate\": \"\",\n" +
+                "            \"adjustType\": \"\"\n" +
+                "        },\n" +
+                "        {\n" +
+                "            \"type\": \"督导听课\",\n" +
+                "            \"content\": 0,\n" +
+                "            \"scheduleDate\": \"\",\n" +
+                "            \"adjustType\": \"\"\n" +
+                "        },\n" +
+                "        {\n" +
+                "            \"type\": \"教研会\",\n" +
+                "            \"content\": 3,\n" +
+                "            \"scheduleDate\": \"\",\n" +
+                "            \"adjustType\": \"\"\n" +
+                "        },\n" +
+                "        {\n" +
+                "            \"type\": \"周末培优\",\n" +
+                "            \"content\": 0,\n" +
+                "            \"scheduleDate\": \"\",\n" +
+                "            \"adjustType\": \"\"\n" +
+                "        },\n" +
+                "        {\n" +
+                "            \"type\": \"阅卷\",\n" +
+                "            \"content\": 0,\n" +
+                "            \"scheduleDate\": \"\",\n" +
+                "            \"adjustType\": \"\"\n" +
+                "        },\n" +
+                "        {\n" +
+                "            \"type\": \"出题\",\n" +
+                "            \"content\": 0,\n" +
+                "            \"scheduleDate\": \"\",\n" +
+                "            \"adjustType\": \"\"\n" +
+                "        },\n" +
+                "        {\n" +
+                "            \"type\": \"临近三年退休政策\",\n" +
+                "            \"content\": 0,\n" +
+                "            \"scheduleDate\": \"\",\n" +
+                "            \"adjustType\": \"\"\n" +
+                "        },\n" +
+                "        {\n" +
+                "            \"type\": \"监考\",\n" +
+                "            \"content\": 0,\n" +
+                "            \"scheduleDate\": \"\",\n" +
+                "            \"adjustType\": \"\"\n" +
+                "        },\n" +
+                "        {\n" +
+                "            \"type\": \"其他\",\n" +
+                "            \"content\": 0,\n" +
+                "            \"scheduleDate\": \"\",\n" +
+                "            \"adjustType\": \"\"\n" +
+                "        }\n" +
+                "    ]";
+        ObjectMapper objectMapper = new ObjectMapper();
+        JsonNode rootNode = objectMapper.readTree(columnTitle.toString());
+        double sum = 0;
+
+        // 遍历 JSON 数组中的每一个元素
+        Iterator<JsonNode> elements = rootNode.elements();
+        while (elements.hasNext()) {
+            JsonNode element = elements.next();
+
+            // 获取 "value" 键对应的数值,并累加到总和中
+            if (element.has("content") && element.get("content").isNumber()) {
+                sum += element.get("content").asDouble();
+            }
+        }
+
+        System.out.println(sum);
+    }
+
+}

+ 217 - 0
src/test/java/com/xjrsoft/module/job/BaseNewStudentTaskTest.java

@@ -0,0 +1,217 @@
+package com.xjrsoft.module.job;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.xjrsoft.XjrSoftApplication;
+import com.xjrsoft.common.enums.DeleteMark;
+import com.xjrsoft.common.enums.EnabledMark;
+import com.xjrsoft.common.enums.EnrollTypeEnum;
+import com.xjrsoft.common.enums.GenderDictionaryEnum;
+import com.xjrsoft.common.enums.StudentTypeEnum;
+import com.xjrsoft.common.enums.StudyStatusEnum;
+import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
+import com.xjrsoft.module.base.entity.BaseGrade;
+import com.xjrsoft.module.base.entity.BaseMajorSet;
+import com.xjrsoft.module.base.service.IBaseGradeService;
+import com.xjrsoft.module.base.service.IBaseMajorSetService;
+import com.xjrsoft.module.student.entity.BaseNewStudent;
+import com.xjrsoft.module.student.entity.EnrollmentPlan;
+import com.xjrsoft.module.student.entity.PbCseFeeobjupdate;
+import com.xjrsoft.module.student.service.IBaseNewStudentService;
+import com.xjrsoft.module.student.service.IEnrollmentPlanService;
+import com.xjrsoft.module.student.service.IPbCseFeeobjupdateService;
+import org.apache.commons.lang.StringUtils;
+import org.junit.jupiter.api.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.math.BigDecimal;
+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;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * @author dzx
+ * @date 2025/3/4
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = XjrSoftApplication.class)
+class BaseNewStudentTaskTest {
+
+
+    @Autowired
+    private IBaseNewStudentService newStudentService;
+
+    @Autowired
+    private IPbCseFeeobjupdateService cseFeeobjupdateService;
+
+    @Autowired
+    private IEnrollmentPlanService planService;
+
+    @Autowired
+    private IBaseGradeService gradeService;
+
+    @Autowired
+    private IBaseMajorSetService majorSetService;
+
+    @Test
+    public void execute(){
+        doExecute();
+    }
+
+    void doExecute(){
+        List<PbCseFeeobjupdate> dataList = cseFeeobjupdateService.list();
+
+        String sql = "select distinct enteryear, userdef6 from pb_cse_feeobjupdate";
+        List<Map<String, Object>> gradeList = SqlRunnerAdapter.db().selectList(sql);
+
+
+        List<EnrollmentPlan> planDataList = planService.list(
+                new QueryWrapper<EnrollmentPlan>().lambda()
+                        .eq(EnrollmentPlan::getDeleteMark, DeleteMark.NODELETE.getCode())
+                        .eq(EnrollmentPlan::getEnabledMark, EnabledMark.ENABLED.getCode())
+        );
+        Map<String, Long> planDataMap = planDataList.stream().collect(Collectors.toMap(x -> x.getEnrollType() + x.getGradeId(), EnrollmentPlan::getId));
+
+        Map<String, Long> planMap = new HashMap<>();
+        //插入招生计划数据
+        gradeList.forEach((x)->{
+            EnrollmentPlan plan = new EnrollmentPlan();
+            plan.setCreateDate(new Date());
+            plan.setEnabledMark(EnabledMark.ENABLED.getCode());
+            plan.setDeleteMark(DeleteMark.NODELETE.getCode());
+            if("1".equals(x.get("userdef6").toString())){
+                plan.setEnrollType(EnrollTypeEnum.SPRING_ENROLLMENT.getCode());
+            }else if("2".equals(x.get("userdef6").toString())){
+                plan.setEnrollType(EnrollTypeEnum.AUTUMN_ENROLLMENT.getCode());
+            }
+
+            //查询年级
+            BaseGrade grade = gradeService.getOne(
+                    new QueryWrapper<BaseGrade>().lambda()
+                            .eq(BaseGrade::getDeleteMark, DeleteMark.NODELETE.getCode())
+                            .like(BaseGrade::getTitle, x.get("enteryear").toString())
+            );
+            plan.setGradeId(grade.getId());
+
+            Long oldPlanId = planDataMap.get(plan.getEnrollType() + plan.getGradeId());
+
+            planMap.put(x.get("enteryear").toString() + x.get("userdef6").toString(), oldPlanId);
+
+            //判断是否已经存在,不存在就新增
+            if(oldPlanId == null){
+                planService.save(plan);
+                planMap.put(x.get("enteryear").toString() + x.get("userdef6").toString(), plan.getId());
+            }
+        });
+
+        //查询已存在的新生信息
+        List<BaseNewStudent> existsNewStudentList = newStudentService.list(
+                new QueryWrapper<BaseNewStudent>().lambda()
+                        .eq(BaseNewStudent::getDeleteMark, DeleteMark.NODELETE.getCode())
+        );
+        Map<String, BaseNewStudent> existsNewStudentMap = existsNewStudentList.stream().filter(x -> StrUtil.isEmpty(x.getDeleteReason())).collect(Collectors.toMap(BaseNewStudent::getCredentialNumber, x -> x));
+
+        List<BaseMajorSet> majorSetList = majorSetService.list(
+                new QueryWrapper<BaseMajorSet>().lambda()
+                        .eq(BaseMajorSet::getDeleteMark, DeleteMark.NODELETE.getCode())
+                        .eq(BaseMajorSet::getEnabledMark, EnabledMark.ENABLED.getCode())
+        );
+        Map<String, Long> majorSetMap = majorSetList.stream().collect(Collectors.toMap(BaseMajorSet::getCode, BaseMajorSet::getId));
+
+        //循环攀宝的数据,准备更新到新生表中
+        List<BaseNewStudent> updateList = new ArrayList<>();
+        List<BaseNewStudent> insertList = new ArrayList<>();
+        for (PbCseFeeobjupdate feeobjupdate : dataList) {
+            BaseNewStudent existsNewStudent = existsNewStudentMap.get(feeobjupdate.getPersonalid());
+
+            if(existsNewStudent != null){
+                existsNewStudent.setName(feeobjupdate.getFeeobjname());
+                existsNewStudent.setPaymnystate(feeobjupdate.getPaymnystate());
+                existsNewStudent.setPrevious(feeobjupdate.getPrevious());
+                existsNewStudent.setProvince(feeobjupdate.getProvince());
+                existsNewStudent.setCity(feeobjupdate.getCity());
+                existsNewStudent.setMyarea(feeobjupdate.getMyarea());
+                if(StrUtil.isNotEmpty(feeobjupdate.getSg())){
+                    if(StringUtils.isNumeric(feeobjupdate.getSg())){
+                        existsNewStudent.setHeight(BigDecimal.valueOf(Double.parseDouble(feeobjupdate.getSg())));
+                    }
+                }
+                if(StrUtil.isNotEmpty(feeobjupdate.getTz())){
+                    if(StringUtils.isNumeric(feeobjupdate.getTz())){
+                        existsNewStudent.setWeight(BigDecimal.valueOf(Double.parseDouble(feeobjupdate.getTz())));
+                    }
+                }
+                existsNewStudent.setGraduateSchool(feeobjupdate.getGraduations());
+                existsNewStudent.setStduyStatus(StudyStatusEnum.getCode(feeobjupdate.getQuartername()));
+                existsNewStudent.setSource(StudentTypeEnum.getCode(feeobjupdate.getResourcename()));
+                existsNewStudent.setMobile(feeobjupdate.getTelephone());
+                existsNewStudent.setFamilyMobile(feeobjupdate.getJzlxdh());
+                existsNewStudent.setFamilyAddress(feeobjupdate.getAddress());
+                existsNewStudent.setFirstAmbition(majorSetMap.get(feeobjupdate.getSpeccode()));
+                existsNewStudent.setFirstAmbitionId(majorSetMap.get(feeobjupdate.getSpeccode()));
+                existsNewStudent.setSecondAmbition(majorSetMap.get(feeobjupdate.getZytjspec()));
+                existsNewStudent.setSecondAmbitionId(majorSetMap.get(feeobjupdate.getZytjspec()));
+                existsNewStudent.setGender(GenderDictionaryEnum.getCode(feeobjupdate.getSex()));
+                existsNewStudent.setModifyDate(new Date());
+
+                updateList.add(existsNewStudent);
+                continue;
+            }
+
+            Long planId = planMap.get(feeobjupdate.getEnteryear() + feeobjupdate.getUserdef6());
+            insertList.add(
+                    new BaseNewStudent(){{
+                        setCredentialNumber(feeobjupdate.getPersonalid());
+                        setName(feeobjupdate.getFeeobjname());
+                        setPaymnystate(feeobjupdate.getPaymnystate());
+                        setPrevious(feeobjupdate.getPrevious());
+                        setProvince(feeobjupdate.getProvince());
+                        setCity(feeobjupdate.getCity());
+                        setMyarea(feeobjupdate.getMyarea());
+                        if(StrUtil.isNotEmpty(feeobjupdate.getSg())){
+                            if(StringUtils.isNumeric(feeobjupdate.getSg())){
+                                setHeight(BigDecimal.valueOf(Double.parseDouble(feeobjupdate.getSg())));
+                            }
+                        }
+                        if(StrUtil.isNotEmpty(feeobjupdate.getTz())){
+                            if(StringUtils.isNumeric(feeobjupdate.getTz())){
+                                setWeight(BigDecimal.valueOf(Double.parseDouble(feeobjupdate.getTz())));
+                            }
+                        }
+
+                        setGraduateSchool(feeobjupdate.getGraduations());
+                        setStduyStatus(StudyStatusEnum.getCode(feeobjupdate.getQuartername()));
+                        setSource(StudentTypeEnum.getCode(feeobjupdate.getResourcename()));
+                        setMobile(feeobjupdate.getTelephone());
+                        setFamilyMobile(feeobjupdate.getJzlxdh());
+                        setFamilyAddress(feeobjupdate.getAddress());
+                        setFirstAmbition(majorSetMap.get(feeobjupdate.getSpeccode()));
+                        setFirstAmbitionId(majorSetMap.get(feeobjupdate.getSpeccode()));
+                        setSecondAmbition(majorSetMap.get(feeobjupdate.getZytjspec()));
+                        setSecondAmbitionId(majorSetMap.get(feeobjupdate.getZytjspec()));
+                        setGender(GenderDictionaryEnum.getCode(feeobjupdate.getSex()));
+                        setEnrollmentPlanId(planId);
+                        setCreateDate(new Date());
+                    }}
+            );
+        }
+
+        if(!updateList.isEmpty()){
+            newStudentService.updateBatchById(updateList);
+        }
+        if(!insertList.isEmpty()){
+            newStudentService.saveBatch(insertList);
+        }
+
+    }
+
+}

+ 47 - 0
src/test/java/com/xjrsoft/module/ledger/controller/LedgerCustomControllerTest.java

@@ -0,0 +1,47 @@
+package com.xjrsoft.module.ledger.controller;
+
+import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.db.Entity;
+import com.xjrsoft.XjrSoftApplication;
+import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
+import org.junit.jupiter.api.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Date;
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * @author dzx
+ * @date 2024/12/30
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = XjrSoftApplication.class)
+class LedgerCustomControllerTest {
+
+
+    @Test
+    void test(){
+        String tableName = "base_student_assessment_inspection";
+        Entity params = Entity.create(tableName);
+        params.set("enabled_mark", 0);
+
+        Entity where = Entity.create(tableName);
+        where.set("id", "1871788563762819074");
+
+        Map<String, Object> objectMap = SqlRunnerAdapter.db().dynamicSelectOne(tableName, where);
+        if(objectMap.containsKey("modify_user_id")){
+            params.set("modify_user_id", "1000000000000000000");
+        }
+        if(objectMap.containsKey("modify_date")){
+            params.set("modify_date", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        }
+
+        SqlRunnerAdapter.db().dynamicUpdate(tableName, params, where);
+    }
+}

+ 1 - 1
src/test/java/com/xjrsoft/module/liteflow/node/WfCourseAdjustNodeTest.java

@@ -24,7 +24,7 @@ class WfCourseAdjustNodeTest {
 
     @Test
     void test() throws Exception {
-        Long formId = 1847200925738921984L;
+        Long formId = 1896396299641098240L;
         if (formId != null) {
             // 数据处理
             WfCourseAdjust courseAdjust = wfCourseAdjustService.getById(formId);

+ 30 - 0
src/test/java/com/xjrsoft/module/student/service/impl/StudentReportRecordServiceImplTest.java

@@ -0,0 +1,30 @@
+package com.xjrsoft.module.student.service.impl;
+
+import com.xjrsoft.common.exception.MyException;
+import com.xjrsoft.common.utils.LocalDateUtil;
+import org.junit.jupiter.api.Test;
+
+import java.time.LocalDate;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * @author dzx
+ * @date 2025/2/11
+ */
+class StudentReportRecordServiceImplTest {
+
+    @Test
+    void Test(){
+        LocalDate startDate = LocalDate.of(2024, 2, 11);
+        LocalDate endDate = LocalDate.of(2024, 2, 15);
+        LocalDate now = LocalDate.now();
+
+        if(LocalDateUtil.isDateInRange(now, startDate, endDate)){
+            System.out.println(111);
+        }else{
+            System.out.println(222);
+        }
+    }
+
+}

+ 1 - 1
src/test/java/com/xjrsoft/module/textbook/service/impl/WfTextbookRecedeServiceImplTest.java

@@ -19,6 +19,6 @@ class WfTextbookRecedeServiceImplTest {
 
     @Test
     void dataHandle() {
-        wfTextbookRecedeService.dataHandle(1894552632448589824L);
+        wfTextbookRecedeService.dataHandle(1895468330793390080L);
     }
 }

+ 80 - 0
src/test/java/com/xjrsoft/xjrsoftboot/EvaluateResultTest.java

@@ -0,0 +1,80 @@
+package com.xjrsoft.xjrsoftboot;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.xjrsoft.XjrSoftApplication;
+import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
+import org.junit.jupiter.api.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @author dzx
+ * @date 2024/11/26
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = XjrSoftApplication.class)
+public class EvaluateResultTest {
+
+    @Test
+    void test(){
+        String sql = "SELECT t1.submit_record_id,count(*) as a_count FROM evaluate_result t1\n" +
+                "INNER JOIN evaluate_submit_record t2 ON t1.submit_record_id = t2.id\n" +
+                "WHERE t2.evaluate_manage_id = '1859429753152909313' \n" +
+                "GROUP BY t1.submit_record_id HAVING COUNT(*) > 10 ORDER BY COUNT(*) DESC";
+        List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
+        Map<String, Integer> evaluateResultMap = new HashMap<>();
+        for (Map<String, Object> objectMap : list) {
+            evaluateResultMap.put(objectMap.get("submit_record_id").toString(), Integer.parseInt(objectMap.get("a_count").toString()));
+        }
+
+        sql = "select * from evaluate_manage_item where evaluate_manage_id = '1859429753152909313'";
+        list = SqlRunnerAdapter.db().selectList(sql);
+        List<Long> itemIds = list.stream().map(x -> Long.parseLong(x.get("id").toString())).collect(Collectors.toList());
+
+        for (String submitRecordId : evaluateResultMap.keySet()) {
+            Integer count = evaluateResultMap.get(submitRecordId);
+            int i = count / itemIds.size();
+            for (Long itemId : itemIds) {
+                String delSql = "delete from evaluate_result where submit_record_id = '" + submitRecordId
+                        + "' and evaluate_item_id = " + itemId + " limit " + (i - 1);
+                SqlRunnerAdapter.db().delete(delSql);
+            }
+        }
+    }
+
+    @Test
+    void test2(){
+
+        JsonParser parser = new JsonParser();
+        String sql = "SELECT t1.* FROM evaluate_result t1" +
+                " INNER JOIN evaluate_submit_record t2 ON t1.submit_record_id = t2.id" +
+                " WHERE t2.evaluate_manage_id = '1859429753152909313'" +
+                " AND t1.score > 10";
+        List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
+
+        sql = "select * from evaluate_manage_item where evaluate_manage_id = '1859429753152909313'";
+        List<Map<String, Object>> list2 = SqlRunnerAdapter.db().selectList(sql);
+        Map<Long, String> optionMap = list2.stream().collect(Collectors.toMap(x -> Long.parseLong(x.get("id").toString()), x -> x.get("option_json").toString()));
+
+        for (Map<String, Object> objectMap : list) {
+            String id = objectMap.get("id").toString();
+            Integer optionContent = Integer.parseInt(objectMap.get("option_content").toString());
+            Long evaluateItemId = Long.parseLong(objectMap.get("evaluate_item_id").toString());
+            JsonArray jsonObject = parser.parse(optionMap.get(evaluateItemId)).getAsJsonArray();
+            int score = jsonObject.get(optionContent).getAsJsonObject().get("score").getAsInt();
+            String updateSql = "update evaluate_result set score = " + score + " where id = " + id;
+            SqlRunnerAdapter.db().update(updateSql);
+        }
+
+
+
+    }
+}

+ 8 - 1
src/test/java/com/xjrsoft/xjrsoftboot/IdCreateTest.java

@@ -1,8 +1,11 @@
 package com.xjrsoft.xjrsoftboot;
 
 import cn.hutool.core.util.IdUtil;
+import org.apache.commons.lang.StringUtils;
 import org.junit.jupiter.api.Test;
 
+import java.math.BigDecimal;
+
 /**
  * @author dzx
  * @date 2024/3/12
@@ -10,6 +13,10 @@ import org.junit.jupiter.api.Test;
 public class IdCreateTest {
     @Test
     void test(){
-        System.out.println(IdUtil.getSnowflakeNextId());
+        String sg = "1米7";
+        System.out.println(StringUtils.isNumeric(sg));
+
+        String sg2 = "170";
+        System.out.println(StringUtils.isNumeric(sg2));
     }
 }