Browse Source

Merge branch 'pre'

dzx 7 tháng trước cách đây
mục cha
commit
abd64baa0c
90 tập tin đã thay đổi với 2159 bổ sung242 xóa
  1. 6 1
      src/main/java/com/xjrsoft/common/enums/EvaluateTypeEnum.java
  2. 4 0
      src/main/java/com/xjrsoft/module/courseTable/service/ICourseTableService.java
  3. 35 0
      src/main/java/com/xjrsoft/module/courseTable/service/impl/CourseTableServiceImpl.java
  4. 4 0
      src/main/java/com/xjrsoft/module/evaluate/dto/EvaluateObjectListDto.java
  5. 168 7
      src/main/java/com/xjrsoft/module/evaluate/service/impl/EvaluateObjectServiceImpl.java
  6. 54 41
      src/main/java/com/xjrsoft/module/form/service/impl/FormExecuteServiceImpl.java
  7. 14 14
      src/main/java/com/xjrsoft/module/job/EnrollmentStatisticsInfoTask.java
  8. 51 0
      src/main/java/com/xjrsoft/module/job/OfficialDocumentReceivedHandleTask.java
  9. 6 1
      src/main/java/com/xjrsoft/module/job/WfCourseAdjustTask.java
  10. 6 1
      src/main/java/com/xjrsoft/module/oa/controller/MessageController.java
  11. 29 4
      src/main/java/com/xjrsoft/module/oa/controller/NewsController.java
  12. 8 1
      src/main/java/com/xjrsoft/module/oa/controller/OfficialDocumentPostController.java
  13. 8 1
      src/main/java/com/xjrsoft/module/oa/controller/OfficialDocumentReceivedController.java
  14. 107 0
      src/main/java/com/xjrsoft/module/oa/controller/OfficialDocumentReceivedHandleController.java
  15. 22 3
      src/main/java/com/xjrsoft/module/oa/controller/ProclamationController.java
  16. 8 1
      src/main/java/com/xjrsoft/module/oa/controller/ScheduleController.java
  17. 28 4
      src/main/java/com/xjrsoft/module/oa/controller/WfMeetingApplyController.java
  18. 1 7
      src/main/java/com/xjrsoft/module/oa/dto/AddMeetingConfereeOpinionDto.java
  19. 3 0
      src/main/java/com/xjrsoft/module/oa/dto/AddNewsDto.java
  20. 29 0
      src/main/java/com/xjrsoft/module/oa/dto/AddOfficialDocumentReceivedHandleAlertSetDto.java
  21. 53 0
      src/main/java/com/xjrsoft/module/oa/dto/AddOfficialDocumentReceivedHandleDto.java
  22. 0 3
      src/main/java/com/xjrsoft/module/oa/dto/MeetingConfereeListDto.java
  23. 0 6
      src/main/java/com/xjrsoft/module/oa/dto/MeetingRoomListDto.java
  24. 6 2
      src/main/java/com/xjrsoft/module/oa/dto/NewsPageDto.java
  25. 56 0
      src/main/java/com/xjrsoft/module/oa/dto/OfficialDocumentReceivedHandlePageDto.java
  26. 0 1
      src/main/java/com/xjrsoft/module/oa/dto/TodayMeetingMobilePageDto.java
  27. 3 0
      src/main/java/com/xjrsoft/module/oa/dto/UpdateNewsDto.java
  28. 24 0
      src/main/java/com/xjrsoft/module/oa/dto/UpdateOfficialDocumentReceivedHandleDto.java
  29. 0 4
      src/main/java/com/xjrsoft/module/oa/dto/WfMeetingApplyPageDto.java
  30. 2 6
      src/main/java/com/xjrsoft/module/oa/entity/MeetingConferee.java
  31. 2 6
      src/main/java/com/xjrsoft/module/oa/entity/MeetingConfereeOpinion.java
  32. 2 6
      src/main/java/com/xjrsoft/module/oa/entity/MeetingRoom.java
  33. 3 0
      src/main/java/com/xjrsoft/module/oa/entity/News.java
  34. 5 1
      src/main/java/com/xjrsoft/module/oa/entity/OfficialDocumentPost.java
  35. 19 1
      src/main/java/com/xjrsoft/module/oa/entity/OfficialDocumentReceived.java
  36. 104 0
      src/main/java/com/xjrsoft/module/oa/entity/OfficialDocumentReceivedHandle.java
  37. 0 1
      src/main/java/com/xjrsoft/module/oa/mapper/MeetingConfereeMapper.java
  38. 0 1
      src/main/java/com/xjrsoft/module/oa/mapper/MeetingConfereeOpinionMapper.java
  39. 0 1
      src/main/java/com/xjrsoft/module/oa/mapper/MeetingRoomMapper.java
  40. 2 2
      src/main/java/com/xjrsoft/module/oa/mapper/NewsMapper.java
  41. 14 0
      src/main/java/com/xjrsoft/module/oa/mapper/NewsRelationMapper.java
  42. 21 0
      src/main/java/com/xjrsoft/module/oa/mapper/OfficialDocumentReceivedHandleMapper.java
  43. 0 1
      src/main/java/com/xjrsoft/module/oa/mapper/WfMeetingApplyMapper.java
  44. 9 1
      src/main/java/com/xjrsoft/module/oa/service/INewsService.java
  45. 27 0
      src/main/java/com/xjrsoft/module/oa/service/IOfficialDocumentReceivedHandleService.java
  46. 19 2
      src/main/java/com/xjrsoft/module/oa/service/IWfMeetingApplyService.java
  47. 49 5
      src/main/java/com/xjrsoft/module/oa/service/impl/NewsServiceImpl.java
  48. 89 0
      src/main/java/com/xjrsoft/module/oa/service/impl/OfficialDocumentReceivedHandleServiceImpl.java
  49. 30 7
      src/main/java/com/xjrsoft/module/oa/service/impl/WfMeetingApplyServiceImpl.java
  50. 11 2
      src/main/java/com/xjrsoft/module/oa/service/impl/WfSubscriptionServiceImpl.java
  51. 23 0
      src/main/java/com/xjrsoft/module/oa/vo/LastOfficialDocumentReceivedHandleAlertVo.java
  52. 0 3
      src/main/java/com/xjrsoft/module/oa/vo/MeetingConfereeOpinionListVo.java
  53. 0 1
      src/main/java/com/xjrsoft/module/oa/vo/MeetingMobileInfoVo.java
  54. 0 3
      src/main/java/com/xjrsoft/module/oa/vo/MeetingRoomListVo.java
  55. 6 0
      src/main/java/com/xjrsoft/module/oa/vo/NewsPageVo.java
  56. 6 0
      src/main/java/com/xjrsoft/module/oa/vo/NewsVo.java
  57. 56 0
      src/main/java/com/xjrsoft/module/oa/vo/OfficialDocumentReceivedHandlePageVo.java
  58. 55 0
      src/main/java/com/xjrsoft/module/oa/vo/OfficialDocumentReceivedHandleVo.java
  59. 0 1
      src/main/java/com/xjrsoft/module/oa/vo/TodayMeetingMobilePageVo.java
  60. 1 1
      src/main/java/com/xjrsoft/module/organization/dto/AddRoleDto.java
  61. 4 23
      src/main/java/com/xjrsoft/module/schedule/controller/ScheduleController.java
  62. 26 0
      src/main/java/com/xjrsoft/module/schedule/vo/CurrentWeekVo.java
  63. 13 0
      src/main/java/com/xjrsoft/module/student/controller/PbCseFeeobjupdateController.java
  64. 23 0
      src/main/java/com/xjrsoft/module/student/service/IEnrollmentStatisticsInfoService.java
  65. 33 0
      src/main/java/com/xjrsoft/module/student/service/impl/EnrollmentStatisticsInfoServiceImpl.java
  66. 6 0
      src/main/java/com/xjrsoft/module/student/vo/BaseStudentUserPageVo.java
  67. 1 1
      src/main/java/com/xjrsoft/module/system/service/impl/MenuServiceImpl.java
  68. 2 2
      src/main/java/com/xjrsoft/module/teacher/service/impl/TeacherbaseManagerServiceImpl.java
  69. 1 1
      src/main/java/com/xjrsoft/module/textbook/dto/DistributePageDto.java
  70. 11 0
      src/main/java/com/xjrsoft/module/textbook/entity/TextbookStudentClaim.java
  71. 1 1
      src/main/java/com/xjrsoft/module/textbook/entity/WfTextbookClaim.java
  72. 0 2
      src/main/java/com/xjrsoft/module/textbook/entity/WfTextbookClaimItem.java
  73. 206 50
      src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookStudentClaimServiceImpl.java
  74. 72 2
      src/main/java/com/xjrsoft/module/textbook/service/impl/WfTextbookClaimServiceImpl.java
  75. 22 0
      src/main/java/com/xjrsoft/module/textbook/vo/ClassClaimTextbookIssuePrice.java
  76. 4 1
      src/main/java/com/xjrsoft/module/textbook/vo/HeadTeaLookClassBookCategoryDetailVo.java
  77. 3 0
      src/main/java/com/xjrsoft/module/textbook/vo/TeacherCheckByclassVo.java
  78. 3 0
      src/main/java/com/xjrsoft/module/textbook/vo/TeacherConfirmBatchTextbookListVo.java
  79. 3 0
      src/main/java/com/xjrsoft/module/textbook/vo/TextbookClaimVO.java
  80. 1 0
      src/main/resources/application-dev.yml
  81. 1 0
      src/main/resources/application-pre.yml
  82. 1 0
      src/main/resources/application-prod.yml
  83. 14 3
      src/main/resources/mapper/oa/NewsMapper.xml
  84. 29 0
      src/main/resources/mapper/oa/NewsRelationMapper.xml
  85. 54 0
      src/main/resources/mapper/oa/OfficialDocumentReceivedHandleMapper.xml
  86. 3 1
      src/main/resources/mapper/student/BaseStudentMapper.xml
  87. 2 1
      src/main/resources/mapper/textbook/TextbookStudentClaimMapper.xml
  88. 302 0
      src/main/resources/sqlScript/20250414_sql.sql
  89. 5 0
      src/test/java/com/xjrsoft/module/job/WfCourseAdjustTaskTest.java
  90. 25 0
      src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java

+ 6 - 1
src/main/java/com/xjrsoft/common/enums/EvaluateTypeEnum.java

@@ -20,7 +20,12 @@ public enum EvaluateTypeEnum {
 
     TEACHER_EVALUATE_CLASS("tea_evaluate_class", "任课教师对班级评价"),
 
-    TEACHER_EVALUATE("teacher_evaluate", "任课教师对班级评价");
+    TEACHER_EVALUATE("teacher_evaluate", "任课教师对班级评价"),
+    STU_SELF_EVALUATE("stu_self_evaluate", "学生自评"),
+
+    CLASS_STU_EVALUATE("class_stu_evaluate", "班级学生交叉互评"),
+
+    TEA_EVALUATE_STU("tea_evaluate_stu", "教师评价班级学生");
 
     final String code;
     final String value;

+ 4 - 0
src/main/java/com/xjrsoft/module/courseTable/service/ICourseTableService.java

@@ -13,6 +13,7 @@ import com.xjrsoft.module.schedule.entity.WfCourseAdjust;
 import com.xjrsoft.module.schedule.vo.ClassOptionVo;
 import com.xjrsoft.module.schedule.vo.CourseListVo;
 import com.xjrsoft.module.schedule.vo.CourseTableVo;
+import com.xjrsoft.module.schedule.vo.CurrentWeekVo;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -64,4 +65,7 @@ public interface ICourseTableService extends IService<CourseTable> {
     ByteArrayOutputStream exportQuery(CourseTableExportQueryDto dto) throws IOException;
 
 
+    CurrentWeekVo getCurrentWeek(CourseTableDto dto);
+
+
 }

+ 35 - 0
src/main/java/com/xjrsoft/module/courseTable/service/impl/CourseTableServiceImpl.java

@@ -27,6 +27,7 @@ import com.xjrsoft.common.enums.TimeNumberEnum;
 import com.xjrsoft.common.enums.TimePeriodEnum;
 import com.xjrsoft.common.enums.WeekEnum;
 import com.xjrsoft.common.exception.MyException;
+import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.common.utils.excel.ExcelFillCellMergePrevColUtil;
 import com.xjrsoft.common.utils.excel.ExcelMergeUtil;
@@ -518,6 +519,9 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
             } else if (CourseAdjustTypeEnum.courseSubstitute.getCode().equals(courseAdjust.getAdjustType())) {
                 for (String courseId : courseIds) {
                     CourseTable courseTable = courseTableMapper.selectById(courseId);
+                    if(courseTable == null){
+                        continue;
+                    }
 
                     User applyUser = userService.getById(courseAdjust.getUserId());//申请人
                     User exchangeUser = userService.getById(courseAdjust.getExchangeTeacherId());//顶课人
@@ -1519,4 +1523,35 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
         return bot;
     }
 
+    @Override
+    public CurrentWeekVo getCurrentWeek(CourseTableDto dto) {
+        BaseSemester baseSemester = baseSemesterService.getCurrentSemester();
+        if (baseSemester == null) {
+            return null;
+        }
+        LocalDateTime now = LocalDateTime.now();
+        if (dto.getScheduleDate() != null) {
+            now = dto.getScheduleDate();
+        }
+        //计算本周是第几周
+        LocalDateTime startDateTime = LocalDateTime.ofInstant(baseSemester.getTeachingStart().toInstant(), ZoneId.systemDefault());
+        LocalDateTime endDateTime = LocalDateTime.ofInstant(baseSemester.getTeachingEnd().toInstant(), ZoneId.systemDefault());
+        Duration between = Duration.between(startDateTime, endDateTime);
+        long days = between.toDays();
+        int weeks = (int) Math.ceil((double) days / 7);
+
+        for (int i = 0; i < weeks; i++) {
+            LocalDateTime startDate = startDateTime.plusDays(i * 7L).withHour(0).withMinute(0).withSecond(0).withNano(0);
+            LocalDateTime endDate = startDate.plusDays(6).withHour(23).withMinute(59).withSecond(59).withNano(9999);
+            if (now.isAfter(startDate) && now.isBefore(endDate)) {
+                CurrentWeekVo currentWeekVo = new CurrentWeekVo();
+                currentWeekVo.setWeek(i+ 1);
+                currentWeekVo.setStartDate(startDate.toLocalDate());
+                currentWeekVo.setEndDate(endDate.toLocalDate());
+                return currentWeekVo;
+            }
+        }
+        return null;
+    }
+
 }

+ 4 - 0
src/main/java/com/xjrsoft/module/evaluate/dto/EvaluateObjectListDto.java

@@ -5,6 +5,7 @@ import lombok.Data;
 
 import java.io.Serializable;
 import java.util.Date;
+import java.util.List;
 
 
 /**
@@ -43,4 +44,7 @@ public class EvaluateObjectListDto implements Serializable {
     @ApiModelProperty("结束时间")
     private Date endTime;
 
+    @ApiModelProperty("班级ids")
+    private String classIds;
+
 }

+ 168 - 7
src/main/java/com/xjrsoft/module/evaluate/service/impl/EvaluateObjectServiceImpl.java

@@ -14,6 +14,7 @@ import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.base.entity.BaseGrade;
 import com.xjrsoft.module.courseTable.dto.ClassTeacherDto;
 import com.xjrsoft.module.courseTable.mapper.CourseTableMapper;
+import com.xjrsoft.module.courseTable.service.ICourseTableService;
 import com.xjrsoft.module.courseTable.vo.ClassTeacherVo;
 import com.xjrsoft.module.evaluate.dto.*;
 import com.xjrsoft.module.evaluate.entity.EvaluateExecuter;
@@ -27,6 +28,11 @@ import com.xjrsoft.module.evaluate.service.IEvaluateObjectService;
 import com.xjrsoft.module.evaluate.vo.*;
 import com.xjrsoft.module.organization.entity.User;
 import com.xjrsoft.module.organization.service.IUserService;
+import com.xjrsoft.module.schedule.dto.CourseTableDto;
+import com.xjrsoft.module.schedule.vo.CurrentWeekVo;
+import com.xjrsoft.module.student.dto.BaseStudentUserPageDto;
+import com.xjrsoft.module.student.service.IBaseStudentService;
+import com.xjrsoft.module.student.vo.BaseStudentUserPageVo;
 import com.xjrsoft.module.teacher.entity.BaseTeacher;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
@@ -51,6 +57,8 @@ public class EvaluateObjectServiceImpl extends MPJBaseServiceImpl<EvaluateObject
     private final EvaluateExecuterMapper evaluateExecuterMapper;
     private final CourseTableMapper courseTableMapper;
     private final IUserService userService;
+    private final IBaseStudentService studentService;
+    private final ICourseTableService courseTableService;
 
 
     @Override
@@ -242,7 +250,8 @@ public class EvaluateObjectServiceImpl extends MPJBaseServiceImpl<EvaluateObject
                 objectListVo.setExecuterCount(executerList.size());
                 objectListVo.setExecuterList(executerList);
             }
-        } else if (dto.getEvaluateType() != null && dto.getEvaluateType().equals(EvaluateTypeEnum.DRILLMASTER_EVALUATE_CLASS.getCode())) {//入参评价类型是教官评价班级
+        }
+        else if (dto.getEvaluateType() != null && dto.getEvaluateType().equals(EvaluateTypeEnum.DRILLMASTER_EVALUATE_CLASS.getCode())) {//入参评价类型是教官评价班级
             newObjectList = evaluateObjectMapper.getNewObjectList(dto);
             List<EvaluateExecuterVo> newExecuterList = evaluateObjectMapper.getNewExecuterList(dto);
 
@@ -250,15 +259,16 @@ public class EvaluateObjectServiceImpl extends MPJBaseServiceImpl<EvaluateObject
                 objectListVo.setExecuterCount(newExecuterList.size());
                 objectListVo.setExecuterList(newExecuterList);
             }
-        } else if (dto.getEvaluateType() != null && dto.getEvaluateType().equals(EvaluateTypeEnum.TEACHER_EVALUATE_CLASS.getCode())) {//任课教师对班级评价
-            EvaluateManage manage = evaluateManageMapper.selectById(dto.getEvaluateManageId());
+        }
+        else if (dto.getEvaluateType() != null && dto.getEvaluateType().equals(EvaluateTypeEnum.TEACHER_EVALUATE_CLASS.getCode())) {//任课教师对班级评价
+            CurrentWeekVo currentWeek = courseTableService.getCurrentWeek(new CourseTableDto());
             newObjectList = evaluateObjectMapper.getNewObjectList(dto);
 
             List<ClassTeacherVo> classTeacher = courseTableMapper.getClassTeacherIds(
                     new ClassTeacherDto() {{
-                        setStartDate(manage.getStartTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
+                        setStartDate(currentWeek.getStartDate());
                         setGradeId(dto.getGradeId());
-                        setEndDate(manage.getEndTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
+                        setEndDate(currentWeek.getEndDate());
                     }}
             );
 
@@ -278,18 +288,21 @@ public class EvaluateObjectServiceImpl extends MPJBaseServiceImpl<EvaluateObject
 
                     String[] teacherIds = executerVo.getTeacherId().split(",");
                     for (String teacherId : teacherIds) {
+                        if("0".equals(teacherId)){
+                            continue;
+                        }
                         EvaluateExecuterVo evaluateExecuterVo = new EvaluateExecuterVo();
                         evaluateExecuterVo.setExecuterId(teacherId);
                         evaluateExecuterVo.setEvaluateObjectId(objectListVo.getObjectId());
                         evaluateExecuterVo.setExecuterName(userMap.get(Long.parseLong(teacherId.trim())));
-                        evaluateExecuterVo.setEvaluateManageId(dto.getEvaluateManageId().toString());
                         currentExecuterList.add(evaluateExecuterVo);
                     }
                 }
                 objectListVo.setExecuterCount(currentExecuterList.size());
                 objectListVo.setExecuterList(currentExecuterList);
             }
-        } else if (dto.getEvaluateType() != null && dto.getEvaluateType().equals(EvaluateTypeEnum.STUDENT_EVALUATE_COURSE_TEACHER.getCode())) {//入参评价类型是学生评价教师
+        }
+        else if (dto.getEvaluateType() != null && dto.getEvaluateType().equals(EvaluateTypeEnum.STUDENT_EVALUATE_COURSE_TEACHER.getCode())) {//入参评价类型是学生评价教师
             EvaluateManage manage = evaluateManageMapper.selectById(dto.getEvaluateManageId());
             //查询这个年级的所有学生
             List<EvaluateExecuterVo> newExecuterList = evaluateObjectMapper.getNewExecuterList(dto);
@@ -358,6 +371,154 @@ public class EvaluateObjectServiceImpl extends MPJBaseServiceImpl<EvaluateObject
                 newObjectList.add(objectListVo);
             }
         }
+        else if (dto.getEvaluateType() != null && dto.getEvaluateType().equals(EvaluateTypeEnum.STU_SELF_EVALUATE.getCode())){//学生自评
+            BaseStudentUserPageDto studentUserPageDto = new BaseStudentUserPageDto();
+            studentUserPageDto.setGradeId(dto.getGradeId());
+            if(StrUtil.isNotEmpty(dto.getClassIds())){
+                String[] ids = dto.getClassIds().split(",");
+                List<Long> classIds = new ArrayList<>();
+                for (String id : ids) {
+                    classIds.add(Long.parseLong(id));
+                }
+                studentUserPageDto.setClassIds(classIds);
+            }
+            List<BaseStudentUserPageVo> studentList = studentService.getStudentList(studentUserPageDto);
+
+            for (BaseStudentUserPageVo student : studentList) {
+                EvaluateObjectListVo object = new EvaluateObjectListVo();
+                object.setObjectName(student.getName());
+                object.setObjectId(student.getId());
+                object.setGradeId(student.getGradeId().toString());
+                object.setGradeName(student.getGradeName());
+                object.setClassId(student.getClassId().toString());
+
+                List<EvaluateExecuterVo> executerList = new ArrayList<>();
+
+                EvaluateExecuterVo executerVo = new EvaluateExecuterVo();
+                executerVo.setEvaluateObjectId(student.getId());
+                executerVo.setExecuterName(student.getName());
+                executerVo.setExecuterId(student.getId());
+                executerVo.setGradeId(student.getGradeId().toString());
+                executerVo.setClassId(student.getClassId().toString());
+
+                executerList.add(executerVo);
+                object.setExecuterList(executerList);
+                object.setExecuterCount(executerList.size());
+
+                newObjectList.add(object);
+            }
+        }
+        else if (dto.getEvaluateType() != null && dto.getEvaluateType().equals(EvaluateTypeEnum.CLASS_STU_EVALUATE.getCode())){//班级学生交叉互评
+            BaseStudentUserPageDto studentUserPageDto = new BaseStudentUserPageDto();
+            studentUserPageDto.setGradeId(dto.getGradeId());
+            if(StrUtil.isNotEmpty(dto.getClassIds())){
+                String[] ids = dto.getClassIds().split(",");
+                List<Long> classIds = new ArrayList<>();
+                for (String id : ids) {
+                    classIds.add(Long.parseLong(id));
+                }
+                studentUserPageDto.setClassIds(classIds);
+            }
+            List<BaseStudentUserPageVo> studentList = studentService.getStudentList(studentUserPageDto);
+            Map<Long, List<BaseStudentUserPageVo>> classStudentMap = studentList.stream().collect(Collectors.groupingBy(BaseStudentUserPageVo::getClassId));
+            for (BaseStudentUserPageVo student : studentList) {
+                EvaluateObjectListVo object = new EvaluateObjectListVo();
+                object.setObjectName(student.getName());
+                object.setObjectId(student.getId());
+                object.setGradeId(student.getGradeId().toString());
+                object.setGradeName(student.getGradeName());
+                object.setClassId(student.getClassId().toString());
+
+                List<BaseStudentUserPageVo> classStudentList = classStudentMap.get(student.getClassId());
+
+                List<EvaluateExecuterVo> executerList = new ArrayList<>();
+                if(classStudentList != null){
+                    for (BaseStudentUserPageVo otherStudent : classStudentList) {
+                        if(otherStudent.getId().equals(student.getId())){
+                            continue;
+                        }
+                        EvaluateExecuterVo executerVo = new EvaluateExecuterVo();
+                        executerVo.setEvaluateObjectId(student.getId());
+                        executerVo.setExecuterName(otherStudent.getName());
+                        executerVo.setExecuterId(otherStudent.getId());
+                        executerVo.setGradeId(otherStudent.getGradeId().toString());
+                        executerVo.setClassId(otherStudent.getClassId().toString());
+
+                        executerList.add(executerVo);
+                    }
+                }
+
+                object.setExecuterList(executerList);
+                object.setExecuterCount(executerList.size());
+                newObjectList.add(object);
+            }
+        }
+        else if (dto.getEvaluateType() != null && dto.getEvaluateType().equals(EvaluateTypeEnum.TEA_EVALUATE_STU.getCode())){//教师评价班级学生
+            BaseStudentUserPageDto studentUserPageDto = new BaseStudentUserPageDto();
+            studentUserPageDto.setGradeId(dto.getGradeId());
+            if(StrUtil.isNotEmpty(dto.getClassIds())){
+                String[] ids = dto.getClassIds().split(",");
+                List<Long> classIds = new ArrayList<>();
+                for (String id : ids) {
+                    classIds.add(Long.parseLong(id));
+                }
+                studentUserPageDto.setClassIds(classIds);
+            }
+
+
+            List<BaseStudentUserPageVo> studentList = studentService.getStudentList(studentUserPageDto);
+
+            for (BaseStudentUserPageVo student : studentList) {
+                EvaluateObjectListVo object = new EvaluateObjectListVo();
+                object.setObjectName(student.getName());
+                object.setObjectId(student.getId());
+                object.setGradeId(student.getGradeId().toString());
+                object.setGradeName(student.getGradeName());
+                object.setClassId(student.getClassId().toString());
+                newObjectList.add(object);
+            }
+
+
+            CurrentWeekVo currentWeek = courseTableService.getCurrentWeek(new CourseTableDto());
+            List<ClassTeacherVo> classTeacher = courseTableMapper.getClassTeacherIds(
+                    new ClassTeacherDto() {{
+                        setStartDate(currentWeek.getStartDate());
+                        setGradeId(dto.getGradeId());
+                        setEndDate(currentWeek.getEndDate());
+                    }}
+            );
+
+            List<User> userList = userService.list(
+                    new MPJLambdaWrapper<User>()
+                            .select(User::getId)
+                            .select(User.class, x -> VoToColumnUtil.fieldsToColumns(User.class).contains(x.getProperty()))
+                            .innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
+            );
+            Map<Long, String> userMap = userList.stream().collect(Collectors.toMap(User::getId, User::getName));
+            for (EvaluateObjectListVo objectListVo : newObjectList) {
+                List<EvaluateExecuterVo> currentExecuterList = new ArrayList<>();
+                for (ClassTeacherVo executerVo : classTeacher) {
+                    if (!objectListVo.getClassId().equals(executerVo.getClassId().toString())) {
+                        continue;
+                    }
+
+                    String[] teacherIds = executerVo.getTeacherId().split(",");
+                    for (String teacherId : teacherIds) {
+                        if("0".equals(teacherId)){
+                            continue;
+                        }
+                        EvaluateExecuterVo evaluateExecuterVo = new EvaluateExecuterVo();
+                        evaluateExecuterVo.setExecuterId(teacherId);
+                        evaluateExecuterVo.setEvaluateObjectId(objectListVo.getObjectId());
+                        evaluateExecuterVo.setExecuterName(userMap.get(Long.parseLong(teacherId.trim())));
+                        currentExecuterList.add(evaluateExecuterVo);
+                    }
+                }
+                objectListVo.setExecuterCount(currentExecuterList.size());
+                objectListVo.setExecuterList(currentExecuterList);
+            }
+
+        }
 
         return newObjectList;
     }

+ 54 - 41
src/main/java/com/xjrsoft/module/form/service/impl/FormExecuteServiceImpl.java

@@ -1707,7 +1707,6 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
             throw new MyException("主键不存在");
         }
 
-
         List<net.sf.jsqlparser.schema.Column> jsqlColumn = new ArrayList<>();
         for (String field : fieldsList) {
             jsqlColumn.add(new net.sf.jsqlparser.schema.Column(field));
@@ -1740,56 +1739,70 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
                 String endTime = MapUtil.get(params, fieldName + GlobalConstant.END_TIME_SUFFIX, String.class);
 
                 //如果全都没有数据 则跳过
-                if (startTime == null && endTime == null) {
-                    continue;
-                }
-                Expression startRightExp = null;
-                Expression endRightExp = null;
-                Column queryColumn = columns.stream().filter(c -> StrUtil.equalsIgnoreCase(c.getName(), fieldName)).findFirst().get();
-                JdbcType type = queryColumn.getTypeEnum();
-                if (type == JdbcType.TIME) {
-                    if (StrUtil.isNotEmpty(startTime)) startRightExp = new StringValue(startTime);
-                    if (StrUtil.isNotEmpty(endTime)) endRightExp = new StringValue(endTime);
-                } else if (type == JdbcType.DATE || type == JdbcType.TIMESTAMP) {
-                    if (StrUtil.isNotEmpty(startTime))
-                        startRightExp = new TimestampValue().withValue(Timestamp.valueOf(LocalDateTimeUtil.parseDateByLength(startTime)));
-                    if (StrUtil.isNotEmpty(endTime))
-                        endRightExp = new TimestampValue().withValue(Timestamp.valueOf(LocalDateTimeUtil.parseDateByLength(endTime)));
-                } else if (StrUtil.equalsIgnoreCase(queryColumn.getTypeName(), OracleFieldsType.TIME.getType())) {
-                    // oracle时间字段处理
-                    if (StrUtil.isNotEmpty(startTime))
-                        startRightExp = new StringValue(StringPool.ZERO + StringPool.SPACE + startTime);
-                    if (StrUtil.isNotEmpty(endTime))
-                        endRightExp = new StringValue(StringPool.ZERO + StringPool.SPACE + endTime);
-                }
-                if (startTime != null) {
-                    GreaterThanEquals geq = new GreaterThanEquals(); // ">="
-                    geq.setLeftExpression(new net.sf.jsqlparser.schema.Column(fieldName));
-                    geq.setRightExpression(startRightExp == null ? new StringValue(startTime) : startRightExp);
+                if (StringUtils.isNotEmpty(startTime) || StringUtils.isNotEmpty(endTime)) {
+                    Expression startRightExp = null;
+                    Expression endRightExp = null;
+                    Column queryColumn = columns.stream().filter(c -> StrUtil.equalsIgnoreCase(c.getName(), fieldName)).findFirst().get();
+                    JdbcType type = queryColumn.getTypeEnum();
+                    if (type == JdbcType.TIME) {
+                        if (StrUtil.isNotEmpty(startTime)) startRightExp = new StringValue(startTime);
+                        if (StrUtil.isNotEmpty(endTime)) endRightExp = new StringValue(endTime);
+                    } else if (type == JdbcType.DATE || type == JdbcType.TIMESTAMP) {
+                        if (StrUtil.isNotEmpty(startTime))
+                            startRightExp = new TimestampValue().withValue(Timestamp.valueOf(LocalDateTimeUtil.parseDateByLength(startTime)));
+                        if (StrUtil.isNotEmpty(endTime))
+                            endRightExp = new TimestampValue().withValue(Timestamp.valueOf(LocalDateTimeUtil.parseDateByLength(endTime)));
+                    } else if (StrUtil.equalsIgnoreCase(queryColumn.getTypeName(), OracleFieldsType.TIME.getType())) {
+                        // oracle时间字段处理
+                        if (StrUtil.isNotEmpty(startTime))
+                            startRightExp = new StringValue(StringPool.ZERO + StringPool.SPACE + startTime);
+                        if (StrUtil.isNotEmpty(endTime))
+                            endRightExp = new StringValue(StringPool.ZERO + StringPool.SPACE + endTime);
+                    }
+                    if (startTime != null) {
+                        GreaterThanEquals geq = new GreaterThanEquals(); // ">="
+                        geq.setLeftExpression(new net.sf.jsqlparser.schema.Column(fieldName));
+                        geq.setRightExpression(startRightExp == null ? new StringValue(startTime) : startRightExp);
 
-                    //如果是第一个条件 直接赋值
-                    if (ObjectUtil.isNull(queryExpression)) {
-                        queryExpression = geq;
-                    } else {
-                        queryExpression = new AndExpression(queryExpression, geq);
+                        //如果是第一个条件 直接赋值
+                        if (ObjectUtil.isNull(queryExpression)) {
+                            queryExpression = geq;
+                        } else {
+                            queryExpression = new AndExpression(queryExpression, geq);
+                        }
                     }
-                }
 
-                if (endTime != null) {
-                    MinorThanEquals leq = new MinorThanEquals();// "<="
-                    leq.setLeftExpression(new net.sf.jsqlparser.schema.Column(fieldName));
-                    leq.setRightExpression(endRightExp == null ? new StringValue(endTime) : endRightExp);
+                    if (endTime != null) {
+                        MinorThanEquals leq = new MinorThanEquals();// "<="
+                        leq.setLeftExpression(new net.sf.jsqlparser.schema.Column(fieldName));
+                        leq.setRightExpression(endRightExp == null ? new StringValue(endTime) : endRightExp);
+
+                        //如果是第一个条件 直接赋值
+                        if (ObjectUtil.isNull(queryExpression)) {
+                            queryExpression = leq;
+                        } else {
+                            queryExpression = new AndExpression(queryExpression, leq);
+                        }
+                    }
+                }else{
+                    Object value = MapUtil.get(params, fieldName, Object.class);
+                    //如果没有数据 则跳过
+                    if (value == null || StrUtil.isEmpty(String.valueOf(value))) {
+                        continue;
+                    }
+
+                    EqualsTo eq = new EqualsTo();
+                    eq.setLeftExpression(new net.sf.jsqlparser.schema.Column(fieldName));
+                    eq.setRightExpression(new StringValue(String.valueOf(value)));
 
                     //如果是第一个条件 直接赋值
                     if (ObjectUtil.isNull(queryExpression)) {
-                        queryExpression = leq;
+                        queryExpression = eq;
                     } else {
-                        queryExpression = new AndExpression(queryExpression, leq);
+                        queryExpression = new AndExpression(queryExpression, eq);
                     }
                 }
-
             } else {
-
                 Object value = MapUtil.get(params, fieldName, Object.class);
                 //如果没有数据 则跳过
                 if (value == null || StrUtil.isEmpty(String.valueOf(value))) {

+ 14 - 14
src/main/java/com/xjrsoft/module/job/EnrollmentStatisticsInfoTask.java

@@ -6,7 +6,7 @@ import com.xjrsoft.module.student.dto.EnrollmentStatisticsCalendarInfoDto;
 import com.xjrsoft.module.student.dto.EnrollmentStatisticsGraduationInfoDto;
 import com.xjrsoft.module.student.dto.EnrollmentStatisticsInfoDto;
 import com.xjrsoft.module.student.entity.EnrollmentStatisticsInfo;
-import com.xjrsoft.module.student.mapper.EnrollmentStatisticsInfoMapper;
+import com.xjrsoft.module.student.service.IEnrollmentStatisticsInfoService;
 import com.xjrsoft.module.student.service.IPbCseFeeobjupdateService;
 import com.xjrsoft.module.student.vo.EnrollmentStatisticsCalendarInfoVo;
 import com.xjrsoft.module.student.vo.EnrollmentStatisticsGraduationInfoVo;
@@ -39,15 +39,15 @@ public class EnrollmentStatisticsInfoTask {
     private IPbCseFeeobjupdateService pbCseFeeobjupdateService;
 
     @Autowired
-    private EnrollmentStatisticsInfoMapper enrollmentStatisticsInfoMapper;
+    private IEnrollmentStatisticsInfoService enrollmentStatisticsInfoService;
 
-    @Async
-    @Scheduled(cron = "00 0/20 * * * ?")
-    public void execute() {
-        doExecute();
-    }
+//    @Async
+//    @Scheduled(cron = "00 0/20 * * * ?")
+//    public void execute() {
+//        doExecute(pbCseFeeobjupdateService, enrollmentStatisticsInfoService);
+//    }
 
-    void doExecute() {
+    public void doExecute(IPbCseFeeobjupdateService pbCseFeeobjupdateService, IEnrollmentStatisticsInfoService enrollmentStatisticsInfoService) {
         LocalDate now = LocalDate.now();
         String dataDate = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
         EnrollmentStatisticsInfoDto dto = new EnrollmentStatisticsInfoDto();
@@ -55,7 +55,7 @@ public class EnrollmentStatisticsInfoTask {
         dto.setYear(now.getYear() + "");
         EnrollmentStatisticsInfoVo info = pbCseFeeobjupdateService.getEnrollmentStatisticsInfo(dto);
         if(info != null){
-            enrollmentStatisticsInfoMapper.deleteDataByDate(dataDate);
+            enrollmentStatisticsInfoService.deleteDataByDate(dataDate);
             EnrollmentStatisticsInfo infoData = new EnrollmentStatisticsInfo();
             infoData.setEnabledMark(EnabledMark.ENABLED.getCode());
             infoData.setDeleteMark(DeleteMark.NODELETE.getCode());
@@ -64,7 +64,7 @@ public class EnrollmentStatisticsInfoTask {
             infoData.setDataJson(JsonUtil.toJsonString(info));
             infoData.setDataType(1);
             infoData.setDataDay(now);
-            enrollmentStatisticsInfoMapper.insert(infoData);
+            enrollmentStatisticsInfoService.save(infoData);
         }
 
         EnrollmentStatisticsGraduationInfoDto graduationInfoDto = new EnrollmentStatisticsGraduationInfoDto();
@@ -72,7 +72,7 @@ public class EnrollmentStatisticsInfoTask {
         EnrollmentStatisticsGraduationInfoVo graduationInfo = pbCseFeeobjupdateService.getEnrollmentStatisticsGraduationInfo(graduationInfoDto);
 
         if(graduationInfo != null){
-            enrollmentStatisticsInfoMapper.deleteGraduationDataByDate(dataDate);
+            enrollmentStatisticsInfoService.deleteGraduationDataByDate(dataDate);
 
             EnrollmentStatisticsInfo infoData = new EnrollmentStatisticsInfo();
             infoData.setEnabledMark(EnabledMark.ENABLED.getCode());
@@ -82,7 +82,7 @@ public class EnrollmentStatisticsInfoTask {
             infoData.setDataJson(JsonUtil.toJsonString(graduationInfo));
             infoData.setDataType(2);
             infoData.setDataDay(now);
-            enrollmentStatisticsInfoMapper.insert(infoData);
+            enrollmentStatisticsInfoService.save(infoData);
         }
 
         LocalDate thisSaturday = now.with(TemporalAdjusters.nextOrSame(DayOfWeek.SATURDAY));
@@ -98,7 +98,7 @@ public class EnrollmentStatisticsInfoTask {
         EnrollmentStatisticsCalendarInfoVo calendarInfoVo = pbCseFeeobjupdateService.getEnrollmentStatisticsCalendarInfo(calendarInfoDto);
 
         if(calendarInfoVo != null){
-            enrollmentStatisticsInfoMapper.deleteCalendarDataByDate(lastSundayStr, thisSaturdayStr);
+            enrollmentStatisticsInfoService.deleteCalendarDataByDate(lastSundayStr, thisSaturdayStr);
 
             EnrollmentStatisticsInfo infoData = new EnrollmentStatisticsInfo();
             infoData.setEnabledMark(EnabledMark.ENABLED.getCode());
@@ -110,7 +110,7 @@ public class EnrollmentStatisticsInfoTask {
             infoData.setDataStartDay(lastSunday);
             infoData.setDataEndDay(thisSaturday);
             infoData.setDataDay(now);
-            enrollmentStatisticsInfoMapper.insert(infoData);
+            enrollmentStatisticsInfoService.save(infoData);
         }
     }
 }

+ 51 - 0
src/main/java/com/xjrsoft/module/job/OfficialDocumentReceivedHandleTask.java

@@ -0,0 +1,51 @@
+package com.xjrsoft.module.job;
+
+import com.xjrsoft.common.enums.DeleteMark;
+import com.xjrsoft.common.enums.EnabledMark;
+import com.xjrsoft.module.oa.service.IOfficialDocumentReceivedHandleService;
+import com.xjrsoft.module.student.dto.EnrollmentStatisticsCalendarInfoDto;
+import com.xjrsoft.module.student.dto.EnrollmentStatisticsGraduationInfoDto;
+import com.xjrsoft.module.student.dto.EnrollmentStatisticsInfoDto;
+import com.xjrsoft.module.student.entity.EnrollmentStatisticsInfo;
+import com.xjrsoft.module.student.mapper.EnrollmentStatisticsInfoMapper;
+import com.xjrsoft.module.student.service.IPbCseFeeobjupdateService;
+import com.xjrsoft.module.student.vo.EnrollmentStatisticsCalendarInfoVo;
+import com.xjrsoft.module.student.vo.EnrollmentStatisticsGraduationInfoVo;
+import com.xjrsoft.module.student.vo.EnrollmentStatisticsInfoVo;
+import com.yomahub.liteflow.util.JsonUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.time.DayOfWeek;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAdjusters;
+import java.util.Date;
+
+/**
+ * 将招生计划数据固化
+ *
+ * @author dzx
+ * @date 2025年3月17日
+ */
+@Component
+@Slf4j
+public class OfficialDocumentReceivedHandleTask {
+
+
+    @Autowired
+    private IOfficialDocumentReceivedHandleService officialDocumentReceivedHandleService;
+
+    @Async
+    @Scheduled(cron = "00 0/30 * * * ?")
+    public void execute() {
+        doExecute();
+    }
+
+    void doExecute() {
+
+    }
+}

+ 6 - 1
src/main/java/com/xjrsoft/module/job/WfCourseAdjustTask.java

@@ -10,6 +10,7 @@ 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 me.zhyd.oauth.log.Log;
 import org.camunda.bpm.engine.history.HistoricProcessInstance;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
@@ -58,7 +59,11 @@ public class WfCourseAdjustTask {
                 continue;
             }
 
-            courseTableService.adjustCourse(wfCourseAdjust);
+            try {
+                courseTableService.adjustCourse(wfCourseAdjust);
+            }catch (Exception e){
+                Log.error(e.getMessage());
+            }
         }
     }
 }

+ 6 - 1
src/main/java/com/xjrsoft/module/oa/controller/MessageController.java

@@ -25,7 +25,12 @@ import com.xjrsoft.module.organization.dto.ResetPasswordDto;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 import java.time.Duration;
 import java.time.LocalDateTime;

+ 29 - 4
src/main/java/com/xjrsoft/module/oa/controller/NewsController.java

@@ -18,7 +18,14 @@ import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.utils.VoToColumnUtil;
-import com.xjrsoft.module.oa.dto.*;
+import com.xjrsoft.module.oa.dto.AddNewsDto;
+import com.xjrsoft.module.oa.dto.ChangeNewsDto;
+import com.xjrsoft.module.oa.dto.DeleteNewsRelationDto;
+import com.xjrsoft.module.oa.dto.NewsPageDto;
+import com.xjrsoft.module.oa.dto.NewsRelationPageDto;
+import com.xjrsoft.module.oa.dto.NewsReplyDto;
+import com.xjrsoft.module.oa.dto.UpdateNewsDto;
+import com.xjrsoft.module.oa.dto.UpdateNewsRelationDto;
 import com.xjrsoft.module.oa.entity.News;
 import com.xjrsoft.module.oa.entity.NewsAppendix;
 import com.xjrsoft.module.oa.entity.NewsRelation;
@@ -27,9 +34,16 @@ import com.xjrsoft.module.oa.service.INewsAppendixService;
 import com.xjrsoft.module.oa.service.INewsRelationConfigService;
 import com.xjrsoft.module.oa.service.INewsRelationService;
 import com.xjrsoft.module.oa.service.INewsService;
-import com.xjrsoft.module.oa.vo.*;
+import com.xjrsoft.module.oa.vo.NewsAppendixVo;
+import com.xjrsoft.module.oa.vo.NewsCountTypeVo;
+import com.xjrsoft.module.oa.vo.NewsPageVo;
+import com.xjrsoft.module.oa.vo.NewsRelationConfigVo;
+import com.xjrsoft.module.oa.vo.NewsRelationVo;
+import com.xjrsoft.module.oa.vo.NewsVo;
 import com.xjrsoft.module.organization.entity.Department;
+import com.xjrsoft.module.organization.entity.User;
 import com.xjrsoft.module.organization.mapper.DepartmentMapper;
+import com.xjrsoft.module.organization.service.IUserService;
 import com.xjrsoft.module.system.entity.File;
 import com.xjrsoft.module.system.entity.SystemUpdateMessage;
 import com.xjrsoft.module.system.entity.SystemUpdateMessageNotice;
@@ -40,7 +54,14 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang3.BooleanUtils;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 import java.time.LocalDateTime;
 import java.util.ArrayList;
@@ -65,6 +86,7 @@ public class NewsController {
     private INewsAppendixService newsAppendixService;
     private DepartmentMapper departmentMapper;
     private INewsRelationConfigService newsRelationConfigService;
+    private final IUserService userService;
 
     @GetMapping
     @ApiOperation(value = "获取新闻分页")
@@ -149,6 +171,9 @@ public class NewsController {
         NewsVo newsVo = BeanUtil.toBean(news, NewsVo.class);
         newsVo.setRelationList(newsRelationVoList);
 
+        User user = userService.getById(news.getCreateUserId());
+        newsVo.setCreateUserName(user.getName());
+
         Department department = departmentMapper.selectById(newsVo.getSendDeptId());
         if (department != null) {
             newsVo.setSendDeptIdCN(department.getName());
@@ -184,7 +209,7 @@ public class NewsController {
                                 .selectAs(File::getFileUrl, NewsAppendixVo::getFileUrl))
         );
 
-        if (newsAppendixVoList.size() > 0) {
+        if (!newsAppendixVoList.isEmpty()) {
             newsVo.setAppendixList(newsAppendixVoList);
         }
 

+ 8 - 1
src/main/java/com/xjrsoft/module/oa/controller/OfficialDocumentPostController.java

@@ -19,7 +19,14 @@ import com.xjrsoft.module.oa.vo.OfficialDocumentPostVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
 import java.util.List;

+ 8 - 1
src/main/java/com/xjrsoft/module/oa/controller/OfficialDocumentReceivedController.java

@@ -19,7 +19,14 @@ import com.xjrsoft.module.oa.vo.OfficialDocumentReceivedVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
 import java.util.List;

+ 107 - 0
src/main/java/com/xjrsoft/module/oa/controller/OfficialDocumentReceivedHandleController.java

@@ -0,0 +1,107 @@
+package com.xjrsoft.module.oa.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.xjrsoft.common.annotation.XjrLog;
+import com.xjrsoft.common.enums.DeleteMark;
+import com.xjrsoft.common.model.result.RT;
+import com.xjrsoft.common.page.ConventPage;
+import com.xjrsoft.common.page.PageOutput;
+import com.xjrsoft.module.oa.dto.AddOfficialDocumentReceivedHandleDto;
+import com.xjrsoft.module.oa.dto.OfficialDocumentReceivedHandlePageDto;
+import com.xjrsoft.module.oa.dto.AddOfficialDocumentReceivedHandleAlertSetDto;
+import com.xjrsoft.module.oa.entity.OfficialDocumentReceivedHandle;
+import com.xjrsoft.module.oa.service.IOfficialDocumentReceivedHandleService;
+import com.xjrsoft.module.oa.vo.LastOfficialDocumentReceivedHandleAlertVo;
+import com.xjrsoft.module.oa.vo.OfficialDocumentReceivedHandlePageVo;
+import com.xjrsoft.module.oa.vo.OfficialDocumentReceivedHandleVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import javax.ws.rs.GET;
+import java.util.List;
+
+/**
+* @title: 公文收文-承办表
+* @Author dzx
+* @Date: 2025-04-14
+* @Version 1.0
+*/
+@RestController
+@RequestMapping("/oa" + "/officialDocumentReceivedHandle")
+@Api(value = "/oa"  + "/officialDocumentReceivedHandle",tags = "公文收文-承办表代码")
+@AllArgsConstructor
+public class OfficialDocumentReceivedHandleController {
+
+    private final IOfficialDocumentReceivedHandleService officialDocumentReceivedHandleService;
+
+    @GetMapping(value = "/page")
+    @ApiOperation(value="公文收文-承办表列表(分页)")
+    @SaCheckPermission("officialdocumentreceivedhandle:detail")
+    @XjrLog(value = "公文收文-承办表列表(分页)")
+    public RT<PageOutput<OfficialDocumentReceivedHandlePageVo>> page(@Valid OfficialDocumentReceivedHandlePageDto dto){
+        Page<OfficialDocumentReceivedHandlePageVo> page = officialDocumentReceivedHandleService.getPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
+        PageOutput<OfficialDocumentReceivedHandlePageVo> pageOutput = ConventPage.getPageOutput(page, OfficialDocumentReceivedHandlePageVo.class);
+        return RT.ok(pageOutput);
+    }
+
+    @GetMapping(value = "last-alert-time")
+    @ApiOperation(value = "新增公文收文-承办表-最新提醒时间")
+    @SaCheckPermission("officialdocumentreceivedhandle:add")
+    @XjrLog(value = "新增公文收文-承办表-最新提醒时间")
+    public RT<LastOfficialDocumentReceivedHandleAlertVo> lastAlertTime(@RequestParam Long id){
+        List<OfficialDocumentReceivedHandle> list = officialDocumentReceivedHandleService.list(
+                new QueryWrapper<OfficialDocumentReceivedHandle>().lambda()
+                        .eq(OfficialDocumentReceivedHandle::getDeleteMark, DeleteMark.NODELETE.getCode())
+                        .eq(OfficialDocumentReceivedHandle::getIsTransfer, 0)
+                        .eq(OfficialDocumentReceivedHandle::getOfficialDocumentReceivedId, id)
+                        .eq(OfficialDocumentReceivedHandle::getReceiveUserId, StpUtil.getLoginIdAsLong())
+                        .orderByDesc(OfficialDocumentReceivedHandle::getId)
+
+        );
+        if(!list.isEmpty()){
+            OfficialDocumentReceivedHandle receivedHandle = list.get(0);
+            LastOfficialDocumentReceivedHandleAlertVo alertVo = BeanUtil.toBean(receivedHandle, LastOfficialDocumentReceivedHandleAlertVo.class);
+            alertVo.setId(receivedHandle.getOfficialDocumentReceivedId());
+            return RT.ok(alertVo);
+        }
+        return RT.ok(new LastOfficialDocumentReceivedHandleAlertVo());
+    }
+
+    @PostMapping(value = "alert-set")
+    @ApiOperation(value = "新增公文收文-承办表-提醒设置")
+    @SaCheckPermission("officialdocumentreceivedhandle:add")
+    @XjrLog(value = "新增公文收文-承办表-提醒设置")
+    public RT<Boolean> alertSet(@Valid @RequestBody AddOfficialDocumentReceivedHandleAlertSetDto dto){
+        return RT.ok(officialDocumentReceivedHandleService.addAlertTime(dto));
+    }
+
+
+    @PostMapping(value = "handle")
+    @ApiOperation(value = "新增公文收文-承办表-处理")
+    @SaCheckPermission("officialdocumentreceivedhandle:add")
+    @XjrLog(value = "新增公文收文-承办表-处理")
+    public RT<Boolean> handle(@Valid @RequestBody AddOfficialDocumentReceivedHandleDto dto){
+        return RT.ok(officialDocumentReceivedHandleService.handle(dto));
+    }
+
+    @PostMapping(value = "transfer")
+    @ApiOperation(value = "新增公文收文-承办表-转办")
+    @SaCheckPermission("officialdocumentreceivedhandle:add")
+    @XjrLog(value = "新增公文收文-承办表-转办")
+    public RT<Boolean> transfer(@Valid @RequestBody AddOfficialDocumentReceivedHandleDto dto){
+        return RT.ok(officialDocumentReceivedHandleService.transfer(dto));
+    }
+
+}

+ 22 - 3
src/main/java/com/xjrsoft/module/oa/controller/ProclamationController.java

@@ -13,19 +13,38 @@ import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.utils.VoToColumnUtil;
-import com.xjrsoft.module.oa.dto.*;
+import com.xjrsoft.module.oa.dto.AddProclamationDto;
+import com.xjrsoft.module.oa.dto.ChangeNewsDto;
+import com.xjrsoft.module.oa.dto.DeleteNewsRelationDto;
+import com.xjrsoft.module.oa.dto.NewsRelationPageDto;
+import com.xjrsoft.module.oa.dto.NewsReplyDto;
+import com.xjrsoft.module.oa.dto.ProclamationPageDto;
+import com.xjrsoft.module.oa.dto.UpdateNewsRelationDto;
+import com.xjrsoft.module.oa.dto.UpdateProclamationDto;
 import com.xjrsoft.module.oa.entity.News;
 import com.xjrsoft.module.oa.entity.NewsRelation;
 import com.xjrsoft.module.oa.entity.NewsRelationConfig;
 import com.xjrsoft.module.oa.service.INewsRelationConfigService;
 import com.xjrsoft.module.oa.service.INewsRelationService;
 import com.xjrsoft.module.oa.service.INewsService;
-import com.xjrsoft.module.oa.vo.*;
+import com.xjrsoft.module.oa.vo.NewsCountTypeVo;
+import com.xjrsoft.module.oa.vo.NewsGradeClassTreeVo;
+import com.xjrsoft.module.oa.vo.NewsRelationConfigVo;
+import com.xjrsoft.module.oa.vo.NewsRelationVo;
+import com.xjrsoft.module.oa.vo.ProclamationPageVo;
+import com.xjrsoft.module.oa.vo.ProclamationVo;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 import java.time.LocalDateTime;
 import java.util.ArrayList;

+ 8 - 1
src/main/java/com/xjrsoft/module/oa/controller/ScheduleController.java

@@ -16,7 +16,14 @@ import com.xjrsoft.module.oa.vo.ScheduleVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 import java.util.ArrayList;
 import java.util.List;

+ 28 - 4
src/main/java/com/xjrsoft/module/oa/controller/WfMeetingApplyController.java

@@ -1,7 +1,6 @@
 package com.xjrsoft.module.oa.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
-import cn.dev33.satoken.stp.StpUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.xjrsoft.common.annotation.XjrLog;
@@ -10,17 +9,42 @@ import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.utils.QrCodeUtil;
 import com.xjrsoft.config.CommonPropertiesConfig;
-import com.xjrsoft.module.oa.dto.*;
+import com.xjrsoft.module.oa.dto.AddMeetingConfereeOpinionDto;
+import com.xjrsoft.module.oa.dto.HistoryMeetingMobilePageDto;
+import com.xjrsoft.module.oa.dto.MeetingConfereeListDto;
+import com.xjrsoft.module.oa.dto.MeetingConfereeOpinionListDto;
+import com.xjrsoft.module.oa.dto.MeetingRoomListDto;
+import com.xjrsoft.module.oa.dto.SponsorMeetingMobilePageDto;
+import com.xjrsoft.module.oa.dto.TodayMeetingMobilePageDto;
+import com.xjrsoft.module.oa.dto.UpdateMeetingCheckInDto;
+import com.xjrsoft.module.oa.dto.UpdateMeetingSummaryDto;
+import com.xjrsoft.module.oa.dto.UpdateRevocationMeetingDto;
+import com.xjrsoft.module.oa.dto.WfMeetingApplyPageDto;
 import com.xjrsoft.module.oa.entity.WfMeetingApply;
 import com.xjrsoft.module.oa.service.IWfMeetingApplyService;
-import com.xjrsoft.module.oa.vo.*;
+import com.xjrsoft.module.oa.vo.HistoryMeetingMobilePageVo;
+import com.xjrsoft.module.oa.vo.MeetingConfereeListVo;
+import com.xjrsoft.module.oa.vo.MeetingConfereeOpinionListVo;
+import com.xjrsoft.module.oa.vo.MeetingMobileInfoVo;
+import com.xjrsoft.module.oa.vo.MeetingRoomListVo;
+import com.xjrsoft.module.oa.vo.MeetingSummaryVo;
+import com.xjrsoft.module.oa.vo.SponsorMeetingMobilePageVo;
+import com.xjrsoft.module.oa.vo.TodayMeetingMobilePageVo;
+import com.xjrsoft.module.oa.vo.WfMeetingApplyInWorkflowVo;
+import com.xjrsoft.module.oa.vo.WfMeetingApplyPageVo;
 import com.xjrsoft.module.system.entity.File;
 import com.xjrsoft.module.system.service.IFileService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
 import java.util.List;

+ 1 - 7
src/main/java/com/xjrsoft/module/oa/dto/AddMeetingConfereeOpinionDto.java

@@ -2,14 +2,8 @@ package com.xjrsoft.module.oa.dto;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import java.io.Serializable;
-import com.fasterxml.jackson.annotation.JsonFormat;
 
-import java.time.LocalTime;
-import java.time.LocalDateTime;
-import java.math.BigDecimal;
-import java.util.List;
-import java.util.Date;
+import java.io.Serializable;
 
 
 

+ 3 - 0
src/main/java/com/xjrsoft/module/oa/dto/AddNewsDto.java

@@ -202,4 +202,7 @@ public class AddNewsDto {
     @TableField(exist = false)
     @EntityMapping(thisField = "id", joinField = "newsId")
     private List<AddNewsRelationDto> relationList;
+
+    @ApiModelProperty("办事指南显示范围")
+    private String guideShowRange;
 }

+ 29 - 0
src/main/java/com/xjrsoft/module/oa/dto/AddOfficialDocumentReceivedHandleAlertSetDto.java

@@ -0,0 +1,29 @@
+package com.xjrsoft.module.oa.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+
+/**
+* @title: 公文收文-承办表
+* @Author dzx
+* @Date: 2025-04-14
+* @Version 1.0
+*/
+@Data
+public class AddOfficialDocumentReceivedHandleAlertSetDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("收文id")
+    private Long id;
+
+    @ApiModelProperty("提醒时间")
+    private LocalDateTime alertTime;
+}

+ 53 - 0
src/main/java/com/xjrsoft/module/oa/dto/AddOfficialDocumentReceivedHandleDto.java

@@ -0,0 +1,53 @@
+package com.xjrsoft.module.oa.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+
+
+/**
+* @title: 公文收文-承办表
+* @Author dzx
+* @Date: 2025-04-14
+* @Version 1.0
+*/
+@Data
+public class AddOfficialDocumentReceivedHandleDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 公文收文id(official_document_post)
+    */
+    @ApiModelProperty("公文收文id(official_document_post)")
+    private Long officialDocumentReceivedId;
+    /**
+    * 转办人id(xjr_user)
+    */
+    @ApiModelProperty("转办人id(xjr_user)")
+    private Long receiveUserId;
+    /**
+    * 是否落实
+    */
+    @ApiModelProperty("是否落实")
+    private Integer isHandle;
+    /**
+    * 落实时间
+    */
+    @ApiModelProperty("落实时间")
+    private LocalDateTime handleTime;
+    /**
+    * 提醒时间
+    */
+    @ApiModelProperty("提醒时间")
+    private LocalDateTime alertTime;
+    /**
+    * 是否转办
+    */
+    @ApiModelProperty("是否转办")
+    private Integer isTransfer;
+
+}

+ 0 - 3
src/main/java/com/xjrsoft/module/oa/dto/MeetingConfereeListDto.java

@@ -2,9 +2,6 @@ package com.xjrsoft.module.oa.dto;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.time.LocalDate;
 
 /**
 * @title: 会议参会人员列表(不分页)入参

+ 0 - 6
src/main/java/com/xjrsoft/module/oa/dto/MeetingRoomListDto.java

@@ -1,13 +1,7 @@
 package com.xjrsoft.module.oa.dto;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
 
 /**
 * @title: 会议室列表(不分页)入参

+ 6 - 2
src/main/java/com/xjrsoft/module/oa/dto/NewsPageDto.java

@@ -17,10 +17,11 @@ import javax.validation.constraints.NotNull;
 public class NewsPageDto extends PageInput {
 
     @ApiModelProperty(value = "类型(1-新闻2-公告)")
-    @NotNull(message = "类型不能为空!")
-    @Min(value = 1, message = "类型必须大于0")
     private Integer type;
 
+    @ApiModelProperty(value = "类型(1-新闻2-公告)")
+    private Integer typeId;
+
     /**
      * 完整标题
      */
@@ -45,4 +46,7 @@ public class NewsPageDto extends PageInput {
     @ApiModelProperty(value = "当前角色id", hidden = true)
     private Long loginRoleId;
 
+    @ApiModelProperty("办事指南显示范围")
+    private String guideShowRange;
+
 }

+ 56 - 0
src/main/java/com/xjrsoft/module/oa/dto/OfficialDocumentReceivedHandlePageDto.java

@@ -0,0 +1,56 @@
+package com.xjrsoft.module.oa.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDate;
+
+
+/**
+* @title: 公文收文-承办表分页查询入参
+* @Author dzx
+* @Date: 2025-04-14
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class OfficialDocumentReceivedHandlePageDto extends PageInput {
+
+    @ApiModelProperty("收文类型(xjr_dictionary_item[received_type])")
+    private String receivedType;
+
+    @ApiModelProperty("收文标题")
+    private String receivedTitle;
+
+    @ApiModelProperty("是否已落实")
+    private Integer isHandle;
+
+    @ApiModelProperty("落实人")
+    private String handleUserName;
+
+    @ApiModelProperty("落实负责人")
+    private String handleDutyUserName;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty("收文日期-开始")
+    private LocalDate receivedDateStart;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty("收文日期-结束")
+    private LocalDate receivedDateEnd;
+
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty("落实日期-开始")
+    private LocalDate handleDateStart;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty("落实日期-结束")
+    private LocalDate handleDateEnd;
+
+    @ApiModelProperty("登录人id")
+    private Long loginUserId;
+}

+ 0 - 1
src/main/java/com/xjrsoft/module/oa/dto/TodayMeetingMobilePageDto.java

@@ -1,6 +1,5 @@
 package com.xjrsoft.module.oa.dto;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
 import com.xjrsoft.common.page.PageInput;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;

+ 3 - 0
src/main/java/com/xjrsoft/module/oa/dto/UpdateNewsDto.java

@@ -193,4 +193,7 @@ public class UpdateNewsDto {
     @TableField(exist = false)
     @EntityMapping(thisField = "id", joinField = "newsId")
     private List<AddNewsRelationDto> relationList;
+
+    @ApiModelProperty("办事指南显示范围")
+    private String guideShowRange;
 }

+ 24 - 0
src/main/java/com/xjrsoft/module/oa/dto/UpdateOfficialDocumentReceivedHandleDto.java

@@ -0,0 +1,24 @@
+package com.xjrsoft.module.oa.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+
+/**
+* @title: 公文收文-承办表
+* @Author dzx
+* @Date: 2025-04-14
+* @Version 1.0
+*/
+@Data
+public class UpdateOfficialDocumentReceivedHandleDto extends AddOfficialDocumentReceivedHandleDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    private Long id;
+}

+ 0 - 4
src/main/java/com/xjrsoft/module/oa/dto/WfMeetingApplyPageDto.java

@@ -7,10 +7,6 @@ import lombok.EqualsAndHashCode;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.time.LocalDate;
-import java.time.LocalTime;
-import java.time.LocalDateTime;
-import java.math.BigDecimal;
-import java.util.Date;
 
 
 /**

+ 2 - 6
src/main/java/com/xjrsoft/module/oa/entity/MeetingConferee.java

@@ -2,18 +2,14 @@ package com.xjrsoft.module.oa.entity;
 
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.github.yulichang.annotation.EntityMapping;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+
 import java.io.Serializable;
-import java.time.LocalTime;
-import java.time.LocalDateTime;
-import java.math.BigDecimal;
-import java.util.List;
 import java.util.Date;
 
 

+ 2 - 6
src/main/java/com/xjrsoft/module/oa/entity/MeetingConfereeOpinion.java

@@ -2,18 +2,14 @@ package com.xjrsoft.module.oa.entity;
 
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.github.yulichang.annotation.EntityMapping;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+
 import java.io.Serializable;
-import java.time.LocalTime;
-import java.time.LocalDateTime;
-import java.math.BigDecimal;
-import java.util.List;
 import java.util.Date;
 
 

+ 2 - 6
src/main/java/com/xjrsoft/module/oa/entity/MeetingRoom.java

@@ -2,18 +2,14 @@ package com.xjrsoft.module.oa.entity;
 
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.github.yulichang.annotation.EntityMapping;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+
 import java.io.Serializable;
-import java.time.LocalTime;
-import java.time.LocalDateTime;
-import java.math.BigDecimal;
-import java.util.List;
 import java.util.Date;
 
 

+ 3 - 0
src/main/java/com/xjrsoft/module/oa/entity/News.java

@@ -132,4 +132,7 @@ public class News extends AuditEntity implements Serializable {
 
     @ApiModelProperty("创建人id")
     private Long createUserId;
+
+    @ApiModelProperty("办事指南显示范围")
+    private String guideShowRange;
 }

+ 5 - 1
src/main/java/com/xjrsoft/module/oa/entity/OfficialDocumentPost.java

@@ -1,6 +1,10 @@
 package com.xjrsoft.module.oa.entity;
 
-import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;

+ 19 - 1
src/main/java/com/xjrsoft/module/oa/entity/OfficialDocumentReceived.java

@@ -1,11 +1,16 @@
 package com.xjrsoft.module.oa.entity;
 
-import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.time.LocalDateTime;
 import java.util.Date;
 
 
@@ -122,4 +127,17 @@ public class OfficialDocumentReceived implements Serializable {
     private Long fileId;
 
 
+    @ApiModelProperty("是否已落实")
+    private Integer isHandle;
+
+    @ApiModelProperty("落实时间")
+    private LocalDateTime handleTime;
+
+    @ApiModelProperty("落实人")
+    private Long handleUserId;
+
+    @ApiModelProperty("落实负责人")
+    private Long handleDutyUserId;
+
+
 }

+ 104 - 0
src/main/java/com/xjrsoft/module/oa/entity/OfficialDocumentReceivedHandle.java

@@ -0,0 +1,104 @@
+package com.xjrsoft.module.oa.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+
+/**
+* @title: 公文收文-承办表
+* @Author dzx
+* @Date: 2025-04-14
+* @Version 1.0
+*/
+@Data
+@TableName("official_document_received_handle")
+@ApiModel(value = "official_document_received_handle", description = "公文收文-承办表")
+public class OfficialDocumentReceivedHandle 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 LocalDateTime createDate;
+    /**
+    * 修改人
+    */
+    @ApiModelProperty("修改人")
+    @TableField(fill = FieldFill.UPDATE)
+    private Long modifyUserId;
+    /**
+    * 修改时间
+    */
+    @ApiModelProperty("修改时间")
+    @TableField(fill = FieldFill.UPDATE)
+    private LocalDateTime modifyDate;
+    /**
+    * 删除标记
+    */
+    @ApiModelProperty("删除标记")
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer deleteMark;
+    /**
+    * 有效标志
+    */
+    @ApiModelProperty("有效标志")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer enabledMark;
+    /**
+    * 公文收文id(official_document_post)
+    */
+    @ApiModelProperty("公文收文id(official_document_post)")
+    private Long officialDocumentReceivedId;
+    /**
+    * 转办人id(xjr_user)
+    */
+    @ApiModelProperty("转办人id(xjr_user)")
+    private Long receiveUserId;
+    /**
+    * 是否落实
+    */
+    @ApiModelProperty("是否落实")
+    private Integer isHandle;
+    /**
+    * 落实时间
+    */
+    @ApiModelProperty("落实时间")
+    private LocalDateTime handleTime;
+    /**
+    * 提醒时间
+    */
+    @ApiModelProperty("提醒时间")
+    private LocalDateTime alertTime;
+    /**
+    * 是否转办
+    */
+    @ApiModelProperty("是否转办")
+    private Integer isTransfer;
+
+
+}

+ 0 - 1
src/main/java/com/xjrsoft/module/oa/mapper/MeetingConfereeMapper.java

@@ -1,6 +1,5 @@
 package com.xjrsoft.module.oa.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.github.yulichang.base.MPJBaseMapper;
 import com.xjrsoft.module.oa.entity.MeetingConferee;
 import org.apache.ibatis.annotations.Mapper;

+ 0 - 1
src/main/java/com/xjrsoft/module/oa/mapper/MeetingConfereeOpinionMapper.java

@@ -1,6 +1,5 @@
 package com.xjrsoft.module.oa.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.github.yulichang.base.MPJBaseMapper;
 import com.xjrsoft.module.oa.entity.MeetingConfereeOpinion;
 import org.apache.ibatis.annotations.Mapper;

+ 0 - 1
src/main/java/com/xjrsoft/module/oa/mapper/MeetingRoomMapper.java

@@ -1,6 +1,5 @@
 package com.xjrsoft.module.oa.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.github.yulichang.base.MPJBaseMapper;
 import com.xjrsoft.module.oa.entity.MeetingRoom;
 import org.apache.ibatis.annotations.Mapper;

+ 2 - 2
src/main/java/com/xjrsoft/module/oa/mapper/NewsMapper.java

@@ -22,9 +22,9 @@ import java.util.List;
  */
 @Mapper
 public interface NewsMapper extends MPJBaseMapper<News> {
-    IPage<NewsPageVo> manageBox(IPage<NewsPageDto> page, NewsPageDto dto);
+    IPage<NewsPageVo> manageBox(IPage<NewsPageVo> page, @Param("dto") NewsPageDto dto);
 
-    IPage<NewsPageVo> receiptBox(IPage<NewsPageDto> page, NewsPageDto dto);
+    IPage<NewsPageVo> receiptBox(IPage<NewsPageVo> page, NewsPageDto dto);
 
     List<DeptIdOrClassIdVo> getDeptIdOrClassId(@Param("personalIdList") List<Long> personalIdList);
 

+ 14 - 0
src/main/java/com/xjrsoft/module/oa/mapper/NewsRelationMapper.java

@@ -18,6 +18,20 @@ public interface NewsRelationMapper extends MPJBaseMapper<NewsRelation> {
      */
     Boolean insertAllTeaStaff(@Param("newsId") Long newsId);
 
+    /**
+     * 添加所有家长
+     * @param newsId
+     * @return
+     */
+    Boolean insertAllParentsStaff(@Param("newsId") Long newsId);
+
+    /**
+     * 添加所有学生
+     * @param newsId
+     * @return
+     */
+    Boolean insertAllStudentStaff(@Param("newsId") Long newsId);
+
     /**
      * 添加部门下面的人
      *

+ 21 - 0
src/main/java/com/xjrsoft/module/oa/mapper/OfficialDocumentReceivedHandleMapper.java

@@ -0,0 +1,21 @@
+package com.xjrsoft.module.oa.mapper;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.oa.dto.OfficialDocumentReceivedHandlePageDto;
+import com.xjrsoft.module.oa.entity.OfficialDocumentReceivedHandle;
+import com.xjrsoft.module.oa.vo.OfficialDocumentReceivedHandlePageVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+* @title: 公文收文-承办表
+* @Author dzx
+* @Date: 2025-04-14
+* @Version 1.0
+*/
+@Mapper
+public interface OfficialDocumentReceivedHandleMapper extends MPJBaseMapper<OfficialDocumentReceivedHandle> {
+
+    Page<OfficialDocumentReceivedHandlePageVo> getPage(Page<OfficialDocumentReceivedHandlePageVo> page, @Param("dto") OfficialDocumentReceivedHandlePageDto dto);
+}

+ 0 - 1
src/main/java/com/xjrsoft/module/oa/mapper/WfMeetingApplyMapper.java

@@ -1,6 +1,5 @@
 package com.xjrsoft.module.oa.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.github.yulichang.base.MPJBaseMapper;
 import com.xjrsoft.module.oa.entity.WfMeetingApply;
 import org.apache.ibatis.annotations.Mapper;

+ 9 - 1
src/main/java/com/xjrsoft/module/oa/service/INewsService.java

@@ -2,7 +2,15 @@ package com.xjrsoft.module.oa.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.yulichang.base.MPJBaseService;
-import com.xjrsoft.module.oa.dto.*;
+import com.xjrsoft.module.oa.dto.AddNewsDto;
+import com.xjrsoft.module.oa.dto.AddProclamationDto;
+import com.xjrsoft.module.oa.dto.ChangeNewsDto;
+import com.xjrsoft.module.oa.dto.DeleteNewsRelationDto;
+import com.xjrsoft.module.oa.dto.NewsPageDto;
+import com.xjrsoft.module.oa.dto.ProclamationPageDto;
+import com.xjrsoft.module.oa.dto.UpdateNewsDto;
+import com.xjrsoft.module.oa.dto.UpdateNewsRelationDto;
+import com.xjrsoft.module.oa.dto.UpdateProclamationDto;
 import com.xjrsoft.module.oa.entity.News;
 import com.xjrsoft.module.oa.vo.NewsGradeClassTreeVo;
 import com.xjrsoft.module.oa.vo.NewsPageVo;

+ 27 - 0
src/main/java/com/xjrsoft/module/oa/service/IOfficialDocumentReceivedHandleService.java

@@ -0,0 +1,27 @@
+package com.xjrsoft.module.oa.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.oa.dto.AddOfficialDocumentReceivedHandleAlertSetDto;
+import com.xjrsoft.module.oa.dto.AddOfficialDocumentReceivedHandleDto;
+import com.xjrsoft.module.oa.dto.OfficialDocumentReceivedHandlePageDto;
+import com.xjrsoft.module.oa.entity.OfficialDocumentReceivedHandle;
+import com.xjrsoft.module.oa.vo.OfficialDocumentReceivedHandlePageVo;
+
+/**
+* @title: 公文收文-承办表
+* @Author dzx
+* @Date: 2025-04-14
+* @Version 1.0
+*/
+
+public interface IOfficialDocumentReceivedHandleService extends MPJBaseService<OfficialDocumentReceivedHandle> {
+
+    Page<OfficialDocumentReceivedHandlePageVo> getPage(Page<OfficialDocumentReceivedHandlePageVo> page, OfficialDocumentReceivedHandlePageDto dto);
+
+    Boolean addAlertTime(AddOfficialDocumentReceivedHandleAlertSetDto dto);
+
+    Boolean handle(AddOfficialDocumentReceivedHandleDto dto);
+
+    Boolean transfer(AddOfficialDocumentReceivedHandleDto dto);
+}

+ 19 - 2
src/main/java/com/xjrsoft/module/oa/service/IWfMeetingApplyService.java

@@ -2,9 +2,26 @@ package com.xjrsoft.module.oa.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.yulichang.base.MPJBaseService;
-import com.xjrsoft.module.oa.dto.*;
+import com.xjrsoft.module.oa.dto.AddMeetingConfereeOpinionDto;
+import com.xjrsoft.module.oa.dto.HistoryMeetingMobilePageDto;
+import com.xjrsoft.module.oa.dto.MeetingConfereeListDto;
+import com.xjrsoft.module.oa.dto.MeetingConfereeOpinionListDto;
+import com.xjrsoft.module.oa.dto.MeetingRoomListDto;
+import com.xjrsoft.module.oa.dto.SponsorMeetingMobilePageDto;
+import com.xjrsoft.module.oa.dto.TodayMeetingMobilePageDto;
+import com.xjrsoft.module.oa.dto.UpdateMeetingCheckInDto;
+import com.xjrsoft.module.oa.dto.UpdateRevocationMeetingDto;
+import com.xjrsoft.module.oa.dto.WfMeetingApplyPageDto;
 import com.xjrsoft.module.oa.entity.WfMeetingApply;
-import com.xjrsoft.module.oa.vo.*;
+import com.xjrsoft.module.oa.vo.HistoryMeetingMobilePageVo;
+import com.xjrsoft.module.oa.vo.MeetingConfereeListVo;
+import com.xjrsoft.module.oa.vo.MeetingConfereeOpinionListVo;
+import com.xjrsoft.module.oa.vo.MeetingMobileInfoVo;
+import com.xjrsoft.module.oa.vo.MeetingRoomListVo;
+import com.xjrsoft.module.oa.vo.SponsorMeetingMobilePageVo;
+import com.xjrsoft.module.oa.vo.TodayMeetingMobilePageVo;
+import com.xjrsoft.module.oa.vo.WfMeetingApplyInWorkflowVo;
+import com.xjrsoft.module.oa.vo.WfMeetingApplyPageVo;
 
 import java.util.List;
 

+ 49 - 5
src/main/java/com/xjrsoft/module/oa/service/impl/NewsServiceImpl.java

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.enums.EnabledMark;
@@ -22,7 +23,18 @@ import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.base.entity.BaseGrade;
 import com.xjrsoft.module.base.mapper.BaseClassMapper;
 import com.xjrsoft.module.base.mapper.BaseGradeMapper;
-import com.xjrsoft.module.oa.dto.*;
+import com.xjrsoft.module.oa.dto.AddNewsAppendixDto;
+import com.xjrsoft.module.oa.dto.AddNewsDto;
+import com.xjrsoft.module.oa.dto.AddNewsRelationDto;
+import com.xjrsoft.module.oa.dto.AddProclamationDto;
+import com.xjrsoft.module.oa.dto.ChangeNewsDto;
+import com.xjrsoft.module.oa.dto.DeleteNewsRelationDto;
+import com.xjrsoft.module.oa.dto.NewsPageDto;
+import com.xjrsoft.module.oa.dto.NewsRelationConfigDto;
+import com.xjrsoft.module.oa.dto.ProclamationPageDto;
+import com.xjrsoft.module.oa.dto.UpdateNewsDto;
+import com.xjrsoft.module.oa.dto.UpdateNewsRelationDto;
+import com.xjrsoft.module.oa.dto.UpdateProclamationDto;
 import com.xjrsoft.module.oa.entity.News;
 import com.xjrsoft.module.oa.entity.NewsAppendix;
 import com.xjrsoft.module.oa.entity.NewsRelation;
@@ -34,7 +46,14 @@ import com.xjrsoft.module.oa.mapper.NewsRelationMapper;
 import com.xjrsoft.module.oa.service.INewsAppendixService;
 import com.xjrsoft.module.oa.service.INewsRelationService;
 import com.xjrsoft.module.oa.service.INewsService;
-import com.xjrsoft.module.oa.vo.*;
+import com.xjrsoft.module.oa.vo.DeptIdOrClassIdVo;
+import com.xjrsoft.module.oa.vo.NewsAppendixVo;
+import com.xjrsoft.module.oa.vo.NewsGradeClassTreeVo;
+import com.xjrsoft.module.oa.vo.NewsPageVo;
+import com.xjrsoft.module.oa.vo.NewsRelationConfigVo;
+import com.xjrsoft.module.oa.vo.NewsRelationVo;
+import com.xjrsoft.module.oa.vo.ProclamationPageVo;
+import com.xjrsoft.module.oa.vo.ProclamationVo;
 import com.xjrsoft.module.organization.dto.WeChatSendMessageDto;
 import com.xjrsoft.module.organization.entity.Department;
 import com.xjrsoft.module.organization.entity.User;
@@ -504,12 +523,32 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
         return true;
     }
 
+    private Boolean addRelationByGuideShowRange(News xjrNews) {
+        if (xjrNews.getGuideShowRange().contains("2")) {
+            newsRelationMapper.insertAllTeaStaff(xjrNews.getId());
+        }
+        if (xjrNews.getGuideShowRange().contains("3")) {
+            newsRelationMapper.insertAllStudentStaff(xjrNews.getId());
+        }
+        if(xjrNews.getGuideShowRange().contains("4")){
+            newsRelationMapper.insertAllParentsStaff(xjrNews.getId());
+        }
+        return true;
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean add(AddNewsDto addNewsDto) {
 
         News news = BeanUtil.toBean(addNewsDto, News.class);
         news.setEnabledMark(EnabledMark.ENABLED.getCode());
+        if(news.getTypeId() != null && news.getTypeId() == 3){
+            news.setWfStatus(1);
+            news.setStatus(2);
+        }
+
+        news.setCreateDate(LocalDateTime.now());
+        news.setCreateUserId(StpUtil.getLoginIdAsLong());
 
         newsMapper.insert(news);
         //添加附件子表
@@ -523,9 +562,14 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
 
         //公告需要添加阅读关系,发送范围 1=全校教职工 2=全校师生 3=指定人员
         //1=全校教职工,添加全校教职工到关系表
-        addRelation(news, BeanUtil.toBean(addNewsDto, AddProclamationDto.class), 1);
+        if(news.getTypeId() != null && news.getTypeId() == 3){
+            addRelationByGuideShowRange(news);
+        }else{
+            addRelation(news, BeanUtil.toBean(addNewsDto, AddProclamationDto.class), 1);
+        }
+
         //添加新闻和公告的时候,如果状态是2,表示新闻和公告实时发布了,张贴开始时间就应该是发布时间需要发送消息
-        if (ObjectUtil.isNotNull(addNewsDto.getStatus()) && addNewsDto.getStatus() == 2) {
+        if (ObjectUtil.isNotNull(addNewsDto.getStatus()) && addNewsDto.getStatus() == 2 && addNewsDto.getTypeId() != 3) {
             SendMessage(news.getId());
         }
 
@@ -535,7 +579,7 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
     @Override
     public IPage<NewsPageVo> manageBox(NewsPageDto dto) {
         dto.setLoginId(StpUtil.getLoginIdAsLong());
-        IPage<NewsPageVo> page = newsMapper.manageBox(ConventPage.getPage(dto), dto);
+        IPage<NewsPageVo> page = newsMapper.manageBox(new Page<>(dto.getLimit(), dto.getSize()), dto);
         return page;
     }
 

+ 89 - 0
src/main/java/com/xjrsoft/module/oa/service/impl/OfficialDocumentReceivedHandleServiceImpl.java

@@ -0,0 +1,89 @@
+package com.xjrsoft.module.oa.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.extension.plugins.pagination.Page;
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.module.oa.dto.AddOfficialDocumentReceivedHandleAlertSetDto;
+import com.xjrsoft.module.oa.dto.AddOfficialDocumentReceivedHandleDto;
+import com.xjrsoft.module.oa.dto.OfficialDocumentReceivedHandlePageDto;
+import com.xjrsoft.module.oa.entity.OfficialDocumentReceived;
+import com.xjrsoft.module.oa.entity.OfficialDocumentReceivedHandle;
+import com.xjrsoft.module.oa.mapper.OfficialDocumentReceivedHandleMapper;
+import com.xjrsoft.module.oa.mapper.OfficialDocumentReceivedMapper;
+import com.xjrsoft.module.oa.service.IOfficialDocumentReceivedHandleService;
+import com.xjrsoft.module.oa.vo.OfficialDocumentReceivedHandlePageVo;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+* @title: 公文收文-承办表
+* @Author dzx
+* @Date: 2025-04-14
+* @Version 1.0
+*/
+@Service
+@AllArgsConstructor
+public class OfficialDocumentReceivedHandleServiceImpl extends MPJBaseServiceImpl<OfficialDocumentReceivedHandleMapper, OfficialDocumentReceivedHandle> implements IOfficialDocumentReceivedHandleService {
+    private final OfficialDocumentReceivedMapper documentReceivedMapper;
+
+    @Override
+    public Page<OfficialDocumentReceivedHandlePageVo> getPage(Page<OfficialDocumentReceivedHandlePageVo> page, OfficialDocumentReceivedHandlePageDto dto) {
+        dto.setLoginUserId(StpUtil.getLoginIdAsLong());
+        List<String> roleList = StpUtil.getRoleList();
+        if(roleList.contains("undertaker")){
+            dto.setLoginUserId(null);
+        }
+        return this.baseMapper.getPage(page, dto);
+    }
+
+    @Override
+    @Transactional
+    public Boolean addAlertTime(AddOfficialDocumentReceivedHandleAlertSetDto dto) {
+        this.remove(
+                new QueryWrapper<OfficialDocumentReceivedHandle>().lambda()
+                        .eq(OfficialDocumentReceivedHandle::getOfficialDocumentReceivedId, dto.getId())
+                        .eq(OfficialDocumentReceivedHandle::getReceiveUserId, StpUtil.getLoginIdAsLong())
+        );
+        OfficialDocumentReceivedHandle receivedHandle = new OfficialDocumentReceivedHandle();
+        receivedHandle.setAlertTime(dto.getAlertTime());
+        receivedHandle.setOfficialDocumentReceivedId(dto.getId());
+        receivedHandle.setIsTransfer(0);
+        receivedHandle.setReceiveUserId(StpUtil.getLoginIdAsLong());
+        boolean isSuccess = this.save(receivedHandle);
+        return isSuccess;
+    }
+
+    @Override
+    @Transactional
+    public Boolean handle(AddOfficialDocumentReceivedHandleDto dto) {
+        LocalDateTime now = LocalDateTime.now();
+        OfficialDocumentReceivedHandle handle = BeanUtil.toBean(dto, OfficialDocumentReceivedHandle.class);
+        handle.setIsHandle(1);
+        handle.setReceiveUserId(StpUtil.getLoginIdAsLong());
+        handle.setHandleTime(now);
+        this.save(handle);
+
+        OfficialDocumentReceived received = documentReceivedMapper.selectById(handle.getOfficialDocumentReceivedId());
+        received.setIsHandle(1);
+        received.setHandleTime(now);
+        received.setHandleUserId(StpUtil.getLoginIdAsLong());
+        documentReceivedMapper.updateById(received);
+        return true;
+    }
+
+    @Override
+    @Transactional
+    public Boolean transfer(AddOfficialDocumentReceivedHandleDto dto) {
+        OfficialDocumentReceivedHandle handle = BeanUtil.toBean(dto, OfficialDocumentReceivedHandle.class);
+        handle.setIsHandle(0);
+        handle.setIsTransfer(1);
+        this.save(handle);
+        return true;
+    }
+}

+ 30 - 7
src/main/java/com/xjrsoft/module/oa/service/impl/WfMeetingApplyServiceImpl.java

@@ -14,25 +14,42 @@ import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.enums.MeetingTypeEnum;
 import com.xjrsoft.common.page.ConventPage;
-import com.xjrsoft.common.page.PageOutput;
-import com.xjrsoft.common.utils.LocalDateTimeUtil;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.config.CommonPropertiesConfig;
 import com.xjrsoft.module.base.entity.BaseOfficeBuild;
 import com.xjrsoft.module.ledger.vo.WorkflowRecordVo;
-import com.xjrsoft.module.oa.dto.*;
-import com.xjrsoft.module.oa.entity.*;
+import com.xjrsoft.module.oa.dto.AddMeetingConfereeOpinionDto;
+import com.xjrsoft.module.oa.dto.HistoryMeetingMobilePageDto;
+import com.xjrsoft.module.oa.dto.MeetingConfereeListDto;
+import com.xjrsoft.module.oa.dto.MeetingConfereeOpinionListDto;
+import com.xjrsoft.module.oa.dto.MeetingRoomListDto;
+import com.xjrsoft.module.oa.dto.SponsorMeetingMobilePageDto;
+import com.xjrsoft.module.oa.dto.TodayMeetingMobilePageDto;
+import com.xjrsoft.module.oa.dto.UpdateMeetingCheckInDto;
+import com.xjrsoft.module.oa.dto.UpdateRevocationMeetingDto;
+import com.xjrsoft.module.oa.dto.WfMeetingApplyPageDto;
+import com.xjrsoft.module.oa.entity.MeetingConferee;
+import com.xjrsoft.module.oa.entity.MeetingConfereeOpinion;
+import com.xjrsoft.module.oa.entity.MeetingRoom;
+import com.xjrsoft.module.oa.entity.WfMeetingApply;
 import com.xjrsoft.module.oa.mapper.MeetingConfereeMapper;
 import com.xjrsoft.module.oa.mapper.MeetingConfereeOpinionMapper;
 import com.xjrsoft.module.oa.mapper.MeetingRoomMapper;
 import com.xjrsoft.module.oa.mapper.WfMeetingApplyMapper;
 import com.xjrsoft.module.oa.service.IWfMeetingApplyService;
-import com.xjrsoft.module.oa.vo.*;
+import com.xjrsoft.module.oa.vo.HistoryMeetingMobilePageVo;
+import com.xjrsoft.module.oa.vo.MeetingConfereeListVo;
+import com.xjrsoft.module.oa.vo.MeetingConfereeOpinionListVo;
+import com.xjrsoft.module.oa.vo.MeetingMobileInfoVo;
+import com.xjrsoft.module.oa.vo.MeetingRoomListVo;
+import com.xjrsoft.module.oa.vo.SponsorMeetingMobilePageVo;
+import com.xjrsoft.module.oa.vo.TodayMeetingMobilePageVo;
+import com.xjrsoft.module.oa.vo.WfMeetingApplyInWorkflowVo;
+import com.xjrsoft.module.oa.vo.WfMeetingApplyPageVo;
 import com.xjrsoft.module.organization.dto.WeChatSendMessageDto;
 import com.xjrsoft.module.organization.entity.User;
 import com.xjrsoft.module.organization.service.IUserService;
 import com.xjrsoft.module.organization.service.IWeChatService;
-import com.xjrsoft.module.schedule.vo.TodayScheduleVo;
 import com.xjrsoft.module.system.entity.DictionaryDetail;
 import com.xjrsoft.module.system.entity.File;
 import com.xjrsoft.module.system.mapper.FileMapper;
@@ -56,7 +73,13 @@ import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**

+ 11 - 2
src/main/java/com/xjrsoft/module/oa/service/impl/WfSubscriptionServiceImpl.java

@@ -9,7 +9,11 @@ import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.ledger.dto.WfSubscriptionPageDto;
-import com.xjrsoft.module.ledger.vo.*;
+import com.xjrsoft.module.ledger.vo.WfSubscriptionExcelVo;
+import com.xjrsoft.module.ledger.vo.WfSubscriptionListInfoVo;
+import com.xjrsoft.module.ledger.vo.WfSubscriptionListVo;
+import com.xjrsoft.module.ledger.vo.WfSubscriptionPageVo;
+import com.xjrsoft.module.ledger.vo.WorkflowRecordVo;
 import com.xjrsoft.module.oa.entity.WfSubscription;
 import com.xjrsoft.module.oa.entity.WfSubscriptionList;
 import com.xjrsoft.module.oa.mapper.WfSubscriptionListMapper;
@@ -30,7 +34,12 @@ import org.springframework.transaction.annotation.Transactional;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.ZoneId;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**

+ 23 - 0
src/main/java/com/xjrsoft/module/oa/vo/LastOfficialDocumentReceivedHandleAlertVo.java

@@ -0,0 +1,23 @@
+package com.xjrsoft.module.oa.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+* @title: 公文收文-承办表表单出参
+* @Author dzx
+* @Date: 2025-04-14
+* @Version 1.0
+*/
+@Data
+public class LastOfficialDocumentReceivedHandleAlertVo {
+
+    @ApiModelProperty("主键编号")
+    private Long id;
+
+    @ApiModelProperty("提醒时间")
+    private LocalDateTime alertTime;
+
+}

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

@@ -1,12 +1,9 @@
 package com.xjrsoft.module.oa.vo;
 
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.TableField;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.time.LocalDateTime;
-import java.util.Date;
 
 /**
 * @title: 会议参会人员意见表单出参

+ 0 - 1
src/main/java/com/xjrsoft/module/oa/vo/MeetingMobileInfoVo.java

@@ -6,7 +6,6 @@ import lombok.Data;
 
 import java.time.LocalDate;
 import java.time.LocalTime;
-import java.util.Date;
 import java.util.List;
 
 /**

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

@@ -3,9 +3,6 @@ package com.xjrsoft.module.oa.vo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-
 /**
 * @title: 会议室列表(不分页)出参
 * @Author phoenix

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

@@ -190,4 +190,10 @@ public class NewsPageVo {
 
     @ApiModelProperty("封面url")
     private String coverUrl;
+
+    @ApiModelProperty("办事指南显示范围")
+    private String guideShowRange;
+
+    @ApiModelProperty("创建时间")
+    private LocalDateTime modifyDate;
 }

+ 6 - 0
src/main/java/com/xjrsoft/module/oa/vo/NewsVo.java

@@ -144,4 +144,10 @@ public class NewsVo {
     @EntityMapping(thisField = "id", joinField = "newsId")
     private List<NewsRelationVo> relationList;
 
+    @ApiModelProperty("办事指南显示范围")
+    private String guideShowRange;
+
+    @ApiModelProperty("创建人名字")
+    private String createUserName;
+
 }

+ 56 - 0
src/main/java/com/xjrsoft/module/oa/vo/OfficialDocumentReceivedHandlePageVo.java

@@ -0,0 +1,56 @@
+package com.xjrsoft.module.oa.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+* @title: 公文收文-承办表分页列表出参
+* @Author dzx
+* @Date: 2025-04-14
+* @Version 1.0
+*/
+@Data
+public class OfficialDocumentReceivedHandlePageVo {
+
+    @ApiModelProperty("主键编号")
+    private String id;
+
+    @ApiModelProperty("收文类型")
+    private String receivedTypeCn;
+
+    @ApiModelProperty("收文标题")
+    private String receivedTitle;
+
+    @ApiModelProperty("收文文号/序号")
+    private String receivedNumber;
+
+    @ApiModelProperty("收文日期")
+    private LocalDate receivedDate;
+
+    @ApiModelProperty("来文机关")
+    private String communicationOrg;
+
+    @ApiModelProperty("来文文号")
+    private String communicationNumber;
+
+    @ApiModelProperty("落实负责人")
+    private String handleDutyUserName;
+
+    @ApiModelProperty("转办人")
+    private String receiveUserNames;
+
+    @ApiModelProperty("是否落实(0:未落实 1:已落实)")
+    private Integer isHandle;
+
+    @ApiModelProperty("落实人")
+    private String handleUserName;
+
+    @ApiModelProperty("落实时间")
+    private LocalDateTime handleTime;
+
+    @ApiModelProperty("是否转办(0:否 1:是)")
+    private Integer isTransfer;
+}

+ 55 - 0
src/main/java/com/xjrsoft/module/oa/vo/OfficialDocumentReceivedHandleVo.java

@@ -0,0 +1,55 @@
+package com.xjrsoft.module.oa.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+* @title: 公文收文-承办表表单出参
+* @Author dzx
+* @Date: 2025-04-14
+* @Version 1.0
+*/
+@Data
+public class OfficialDocumentReceivedHandleVo {
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    private Long id;
+    /**
+    * 公文收文id(official_document_post)
+    */
+    @ApiModelProperty("公文收文id(official_document_post)")
+    private Long officialDocumentReceivedId;
+    /**
+    * 转办人id(xjr_user)
+    */
+    @ApiModelProperty("转办人id(xjr_user)")
+    private Long receiveUserId;
+    /**
+    * 是否落实
+    */
+    @ApiModelProperty("是否落实")
+    private Integer isHandle;
+    /**
+    * 落实时间
+    */
+    @ApiModelProperty("落实时间")
+    private LocalDateTime handleTime;
+    /**
+    * 提醒时间
+    */
+    @ApiModelProperty("提醒时间")
+    private LocalDateTime alertTime;
+    /**
+    * 是否转办
+    */
+    @ApiModelProperty("是否转办")
+    private Integer isTransfer;
+
+
+
+}

+ 0 - 1
src/main/java/com/xjrsoft/module/oa/vo/TodayMeetingMobilePageVo.java

@@ -3,7 +3,6 @@ package com.xjrsoft.module.oa.vo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
-import java.time.LocalDate;
 import java.time.LocalTime;
 
 /**

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

@@ -24,7 +24,7 @@ public class AddRoleDto implements Serializable {
     private String name;
 
     @NotNull(message = "角色编码不能为空")
-    @Length(min = 1, max = 10, message = "编码最多20个字符!")
+    @Length(min = 1, max = 10, message = "编码最多10个字符!")
     @ApiModelProperty("编码")
     private String code;
 

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

@@ -28,6 +28,7 @@ import com.xjrsoft.module.schedule.vo.ClassOptionVo;
 import com.xjrsoft.module.schedule.vo.CourseListVo;
 import com.xjrsoft.module.schedule.vo.CourseNamesVo;
 import com.xjrsoft.module.schedule.vo.CourseTableVo;
+import com.xjrsoft.module.schedule.vo.CurrentWeekVo;
 import com.xjrsoft.module.schedule.vo.ScheduleWeekVo;
 import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
 import com.xjrsoft.module.student.service.IBaseStudentSchoolRollService;
@@ -159,30 +160,10 @@ public class ScheduleController {
     @SaCheckPermission("schedule:detail")
     @XjrLog(value = "获取当前周次", saveResponseData = true)
     public RT<Integer> currentWeek(CourseTableDto dto) {
-        BaseSemester baseSemester = semesterService.getCurrentSemester();
-        if (baseSemester == null) {
-            return RT.ok(0);
+        CurrentWeekVo currentWeek = courseTableService.getCurrentWeek(dto);
+        if(currentWeek != null){
+            return RT.ok(currentWeek.getWeek());
         }
-        LocalDateTime now = LocalDateTime.now();
-        if (dto.getScheduleDate() != null) {
-            now = dto.getScheduleDate();
-        }
-        //计算本周是第几周
-        LocalDateTime startDateTime = LocalDateTime.ofInstant(baseSemester.getTeachingStart().toInstant(), ZoneId.systemDefault());
-        LocalDateTime endDateTime = LocalDateTime.ofInstant(baseSemester.getTeachingEnd().toInstant(), ZoneId.systemDefault());
-        Duration between = Duration.between(startDateTime, endDateTime);
-        long days = between.toDays();
-        int weeks = (int) Math.ceil((double) days / 7);
-        if (dto.getWeek() == null) {
-            for (int i = 0; i < weeks; i++) {
-                LocalDateTime startDate = startDateTime.plusDays(i * 7L).withHour(0).withMinute(0).withSecond(0).withNano(0);
-                LocalDateTime endDate = startDate.plusDays(6).withHour(23).withMinute(59).withSecond(59).withNano(9999);
-                if (now.isAfter(startDate) && now.isBefore(endDate)) {
-                    return RT.ok(i + 1);
-                }
-            }
-        }
-
         return RT.ok(0);
     }
 

+ 26 - 0
src/main/java/com/xjrsoft/module/schedule/vo/CurrentWeekVo.java

@@ -0,0 +1,26 @@
+package com.xjrsoft.module.schedule.vo;
+
+import com.xjrsoft.module.courseTable.entity.ClassTime;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * 当前周
+ * @author dzx
+ * @date 2025年4月17日
+ */
+@Data
+public class CurrentWeekVo {
+
+    @ApiModelProperty("第几周")
+    private Integer week;
+
+    @ApiModelProperty("开始时间")
+    private LocalDate startDate;
+
+    @ApiModelProperty("结束时间")
+    private LocalDate endDate;
+}

+ 13 - 0
src/main/java/com/xjrsoft/module/student/controller/PbCseFeeobjupdateController.java

@@ -17,8 +17,10 @@ import com.xjrsoft.common.utils.TreeUtil;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.base.entity.BaseGrade;
 import com.xjrsoft.module.base.service.IBaseGradeService;
+import com.xjrsoft.module.job.EnrollmentStatisticsInfoTask;
 import com.xjrsoft.module.student.dto.*;
 import com.xjrsoft.module.student.entity.PbCseFeeobjupdate;
+import com.xjrsoft.module.student.service.IEnrollmentStatisticsInfoService;
 import com.xjrsoft.module.student.service.IPbCseFeeobjupdateService;
 import com.xjrsoft.module.student.vo.*;
 import io.swagger.annotations.Api;
@@ -51,6 +53,8 @@ public class PbCseFeeobjupdateController {
 
     private final IBaseGradeService baseGradeService;
 
+    private final IEnrollmentStatisticsInfoService enrollmentStatisticsInfoService;
+
     @GetMapping(value = "/grade-enrolltype-tree")
     @ApiOperation(value = "年级招生类型树")
     @XjrLog(value = "年级招生类型树")
@@ -185,4 +189,13 @@ public class PbCseFeeobjupdateController {
         EasyExcel.write(bot, PbCseFeeobjupdatePageVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(customerList);
         return RT.fileStream(bot.toByteArray(), "PbCseFeeobjupdate" + ExcelTypeEnum.XLSX.getValue());
     }
+
+    @GetMapping("/enrollment-statistics-start")
+    @ApiOperation(value = "触发招生统计")
+    @XjrLog(value = "触发招生统计")
+    public RT<Boolean> exportData() {
+        EnrollmentStatisticsInfoTask statisticsInfoTask = new EnrollmentStatisticsInfoTask();
+        statisticsInfoTask.doExecute(pbCseFeeobjupdateService, enrollmentStatisticsInfoService);
+        return RT.ok(true);
+    }
 }

+ 23 - 0
src/main/java/com/xjrsoft/module/student/service/IEnrollmentStatisticsInfoService.java

@@ -0,0 +1,23 @@
+package com.xjrsoft.module.student.service;
+
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.student.entity.EnrollmentPlan;
+import com.xjrsoft.module.student.entity.EnrollmentStatisticsInfo;
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @title: 招生计划维护
+ * @Author phoenix
+ * @Date: 2024-06-13
+ * @Version 1.0
+ */
+
+public interface IEnrollmentStatisticsInfoService extends MPJBaseService<EnrollmentStatisticsInfo> {
+
+    Boolean deleteDataByDate(String dataDay);
+
+    Boolean deleteGraduationDataByDate(String dataDay);
+
+    Boolean deleteCalendarDataByDate(String dataStartDay, String dataEndDay);
+}

+ 33 - 0
src/main/java/com/xjrsoft/module/student/service/impl/EnrollmentStatisticsInfoServiceImpl.java

@@ -0,0 +1,33 @@
+package com.xjrsoft.module.student.service.impl;
+
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.module.student.entity.EnrollmentStatisticsInfo;
+import com.xjrsoft.module.student.mapper.EnrollmentStatisticsInfoMapper;
+import com.xjrsoft.module.student.service.IEnrollmentStatisticsInfoService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * @title: 招生计划维护
+ * @Author phoenix
+ * @Date: 2024-06-13
+ * @Version 1.0
+ */
+@Service
+@AllArgsConstructor
+public class EnrollmentStatisticsInfoServiceImpl extends MPJBaseServiceImpl<EnrollmentStatisticsInfoMapper, EnrollmentStatisticsInfo> implements IEnrollmentStatisticsInfoService {
+    @Override
+    public Boolean deleteDataByDate(String dataDay) {
+        return this.baseMapper.deleteDataByDate(dataDay);
+    }
+
+    @Override
+    public Boolean deleteGraduationDataByDate(String dataDay) {
+        return this.baseMapper.deleteGraduationDataByDate(dataDay);
+    }
+
+    @Override
+    public Boolean deleteCalendarDataByDate(String dataStartDay, String dataEndDay) {
+        return this.baseMapper.deleteCalendarDataByDate(dataStartDay, dataEndDay);
+    }
+}

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

@@ -47,4 +47,10 @@ public class BaseStudentUserPageVo {
 
     @ApiModelProperty("班级id")
     private Long classId;
+
+    @ApiModelProperty("年级id")
+    private Long gradeId;
+
+    @ApiModelProperty("年级姓名")
+    private String gradeName;
 }

+ 1 - 1
src/main/java/com/xjrsoft/module/system/service/impl/MenuServiceImpl.java

@@ -469,7 +469,7 @@ public class MenuServiceImpl extends MPJBaseServiceImpl<MenuMapper, Menu> implem
      */
     private MenuVo getParentMenu(Long parentId, Map<Long, MenuVo> menuMap) {
         MenuVo menuVo = menuMap.get(parentId);
-        if (menuVo.getParentId().equals(GlobalConstant.FIRST_NODE_VALUE)) {
+        if (menuVo != null && GlobalConstant.FIRST_NODE_VALUE.equals(menuVo.getParentId())) {
             return menuVo;
         }
         return getParentMenu(menuVo.getParentId(), menuMap);

+ 2 - 2
src/main/java/com/xjrsoft/module/teacher/service/impl/TeacherbaseManagerServiceImpl.java

@@ -829,8 +829,8 @@ public class TeacherbaseManagerServiceImpl extends MPJBaseServiceImpl<XjrUserMap
             // 只有在职状态被修改时,才触发 insert
             if (!Objects.equals(oldJobState, newJobState)) {
                 BaseTeacherChangeRecord insetBaseTeacherChangeRecord = new BaseTeacherChangeRecord();
-                insetBaseTeacherChangeRecord.setCreateUserId(StpUtil.getLoginIdAsLong());
-                insetBaseTeacherChangeRecord.setCreateDate(new Date());
+                insetBaseTeacherChangeRecord.setCreateUserId(wfTextbookRecede.getApplicantUserId());
+                insetBaseTeacherChangeRecord.setCreateDate(nowDate);
                 insetBaseTeacherChangeRecord.setUserId(wfTextbookRecede.getApplicantUserId());
                 insetBaseTeacherChangeRecord.setChangeType(TeaChangeTypeEnum.TCT0001.getCode());
 

+ 1 - 1
src/main/java/com/xjrsoft/module/textbook/dto/DistributePageDto.java

@@ -21,7 +21,7 @@ public class DistributePageDto extends PageInput {
     @ApiModelProperty("申领类型(xjr_dictionary_item[claim_type])")
     private String claimType;
 
-    @ApiModelProperty("是否有过发放(1:未发放,2:部分发放,3:全部发放)")
+    @ApiModelProperty("是否有过发放(1:未发放,2:部分发放,3:全部发放,4:有发放)")
     private Integer distributeStatus;
 
     @ApiModelProperty("姓名")

+ 11 - 0
src/main/java/com/xjrsoft/module/textbook/entity/TextbookStudentClaim.java

@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 
 
@@ -90,11 +91,21 @@ public class TextbookStudentClaim implements Serializable {
      */
     @ApiModelProperty("教材管理编号")
     private Long textbookId;
+    /**
+     * 教材确认领取的价格
+     */
+    @ApiModelProperty("教材确认领取的价格")
+    private BigDecimal price;
     /**
      * 是否领取(1:已领取 0:未领取 2:领取后退还教务处了)
      */
     @ApiModelProperty("是否领取(1:已领取 0:未领取 2:领取后退还教务处了)")
     private Integer isClaim;
+    /**
+     * 确认领取来源(1:个人申领发放,当确认领取不能被修改未领取,2:班级申领发放,可以修改为未领取)
+     */
+    @ApiModelProperty("确认领取来源(1:个人申领发放,当确认领取不能被修改未领取,2:班级申领发放,可以修改为未领取)")
+    private Integer claimSource;
     /**
      * 备注
      */

+ 1 - 1
src/main/java/com/xjrsoft/module/textbook/entity/WfTextbookClaim.java

@@ -120,7 +120,7 @@ public class WfTextbookClaim implements Serializable {
     /**
      * 状态(1:结束 0:未结束)
      */
-    @ApiModelProperty("状态(1:结束 0:未结束)")
+    @ApiModelProperty("是否有过发放(1:未发放,2:部分发放,3:全部发放)")
     private Integer status;
     /**
      * 流程状态(0:未结束,1:已结束,正常通过,2:已结束,未通过)

+ 0 - 2
src/main/java/com/xjrsoft/module/textbook/entity/WfTextbookClaimItem.java

@@ -90,6 +90,4 @@ public class WfTextbookClaimItem implements Serializable {
      */
     @ApiModelProperty("已发放数量")
     private Integer issueNumber;
-
-
 }

+ 206 - 50
src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookStudentClaimServiceImpl.java

@@ -29,10 +29,7 @@ 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.*;
-import com.xjrsoft.module.textbook.entity.Textbook;
-import com.xjrsoft.module.textbook.entity.TextbookStudentClaim;
-import com.xjrsoft.module.textbook.entity.WfTextbookClaim;
-import com.xjrsoft.module.textbook.entity.WfTextbookClaimItem;
+import com.xjrsoft.module.textbook.entity.*;
 import com.xjrsoft.module.textbook.mapper.TextbookMapper;
 import com.xjrsoft.module.textbook.mapper.TextbookStudentClaimMapper;
 import com.xjrsoft.module.textbook.mapper.WfTextbookClaimItemMapper;
@@ -41,6 +38,8 @@ import com.xjrsoft.module.textbook.service.ITextbookStudentClaimService;
 import com.xjrsoft.module.textbook.vo.*;
 import com.xjrsoft.module.workflow.entity.WorkflowFormRelation;
 import lombok.AllArgsConstructor;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.camunda.bpm.engine.history.HistoricProcessInstance;
@@ -226,38 +225,37 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
         MPJLambdaWrapper<BaseClassAdminCourse> courseMPJLambdaWrapper = new MPJLambdaWrapper<>();
         courseMPJLambdaWrapper
                 .disableSubLogicDel()
-                .selectAs(WfTextbookClaimItem::getTextbookId, HeadTeaLookClassBookCategoryDetailVo::getTextbookId)
+                .selectAs(BaseClassCourse::getTextbookId, HeadTeaLookClassBookCategoryDetailVo::getTextbookId)
                 .selectAs(Textbook::getBookName, HeadTeaLookClassBookCategoryDetailVo::getBookName)
                 .selectAs(Textbook::getPrice, HeadTeaLookClassBookCategoryDetailVo::getPrice)
                 .selectAs(Textbook::getTextbookType, HeadTeaLookClassBookCategoryDetailVo::getTextbookType)
+                .select("1 as claim_num")
+                .select("3 as is_claim")
+                .select("0 as is_issue")
                 .innerJoin(BaseClassCourse.class, BaseClassCourse::getClassId, BaseClassAdminCourse::getId)
                 .innerJoin(Textbook.class, Textbook::getId, BaseClassCourse::getTextbookId)
                 .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, Textbook::getTextbookType,
                         wrapper -> wrapper
                                 .selectAs(DictionaryDetail::getName, HeadTeaLookClassBookCategoryDetailVo::getTextbookTypeCn)
                 )
-                .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, WfTextbookClaim::getClaimType,
-                        wrapper -> wrapper
-                                .selectAs(DictionaryDetail::getName, HeadTeaLookClassBookCategoryDetailVo::getClaimTypeCn)
-                )
-                .eq(WfTextbookClaim::getBaseSemesterId, dto.getBaseSemesterId())
-                .eq(WfTextbookClaim::getClassId, result.getClassId())
+                .eq(BaseClassAdminCourse::getBaseSemesterId, dto.getBaseSemesterId())
+                .eq(BaseClassAdminCourse::getClassId, result.getClassId())
         ;
         List<HeadTeaLookClassBookCategoryDetailVo> courselList = baseClassAdminCourseMapper.selectJoinList(HeadTeaLookClassBookCategoryDetailVo.class, courseMPJLambdaWrapper);
 
-
-        // 学生查看自己的教材来源于两个方面,一个是班级申领教材,一个是个人申领的教材
+        // 学生查看自己待领取的教材来源于两个方面,一个是班级申领教材,一个是个人申领的教材
         // 班级申领教材
         MPJLambdaWrapper<WfTextbookClaimItem> classMPJLambdaWrapper = new MPJLambdaWrapper<>();
         classMPJLambdaWrapper
                 .disableSubLogicDel()
                 .selectAs(WfTextbookClaimItem::getTextbookId, HeadTeaLookClassBookCategoryDetailVo::getTextbookId)
                 .selectAs(Textbook::getBookName, HeadTeaLookClassBookCategoryDetailVo::getBookName)
-                .selectAs(Textbook::getPrice, HeadTeaLookClassBookCategoryDetailVo::getPrice)
+//                .selectAs(Textbook::getPrice, HeadTeaLookClassBookCategoryDetailVo::getPrice)
                 .selectAs(Textbook::getTextbookType, HeadTeaLookClassBookCategoryDetailVo::getTextbookType)
                 .selectAs(WfTextbookClaimItem::getCreateDate, HeadTeaLookClassBookCategoryDetailVo::getClaimTime)
                 .selectAs(WfTextbookClaim::getClaimType, HeadTeaLookClassBookCategoryDetailVo::getClaimType)
                 .select("1 as claim_num")
+                .select("if(t.issue_number > 0, 1, 0) as is_issue")
                 .innerJoin(WfTextbookClaim.class, WfTextbookClaim::getId, WfTextbookClaimItem::getWfTextbookClaimId)
                 .innerJoin(WorkflowFormRelation.class, WorkflowFormRelation::getFormKeyValue, WfTextbookClaim::getId)
                 .eq(WorkflowFormRelation::getCurrentState, HistoricProcessInstance.STATE_COMPLETED)
@@ -282,11 +280,12 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
                 .disableSubLogicDel()
                 .selectAs(WfTextbookClaimItem::getTextbookId, HeadTeaLookClassBookCategoryDetailVo::getTextbookId)
                 .selectAs(Textbook::getBookName, HeadTeaLookClassBookCategoryDetailVo::getBookName)
-                .selectAs(Textbook::getPrice, HeadTeaLookClassBookCategoryDetailVo::getPrice)
+//                .selectAs(Textbook::getPrice, HeadTeaLookClassBookCategoryDetailVo::getPrice)
                 .selectAs(Textbook::getTextbookType, HeadTeaLookClassBookCategoryDetailVo::getTextbookType)
                 .selectAs(WfTextbookClaimItem::getCreateDate, HeadTeaLookClassBookCategoryDetailVo::getClaimTime)
                 .selectAs(WfTextbookClaim::getClaimType, HeadTeaLookClassBookCategoryDetailVo::getClaimType)
                 .select("1 as claim_num")
+                .select("if(t.issue_number > 0, 1, 0) as is_issue")
                 .innerJoin(WfTextbookClaim.class, WfTextbookClaim::getId, WfTextbookClaimItem::getWfTextbookClaimId)
                 .innerJoin(WorkflowFormRelation.class, WorkflowFormRelation::getFormKeyValue, WfTextbookClaim::getId)
                 .eq(WorkflowFormRelation::getCurrentState, HistoricProcessInstance.STATE_COMPLETED)
@@ -305,7 +304,7 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
         ;
         List<HeadTeaLookClassBookCategoryDetailVo> personalList = wfTextbookClaimItemMapper.selectJoinList(HeadTeaLookClassBookCategoryDetailVo.class, personalMPJLambdaWrapper);
 
-        // 合并两个列表,如果有个人领记录,应该保留个人的,移除班级的
+        // 合并两个列表,如果有个人领记录,应该保留个人的,移除班级的
         List<HeadTeaLookClassBookCategoryDetailVo> mergedDistinctList = new ArrayList<>(Stream.concat(classList.stream(), personalList.stream())
                 .collect(Collectors.toMap(
                         // 使用唯一标识作为 key
@@ -316,6 +315,13 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
                 ))
                 .values()); // 转换回 List
 
+        // 如果申领教材列表为空,应该使用基础数据维护的
+        boolean isCourseFlag = false;
+        if (CollectionUtils.isEmpty(mergedDistinctList)) {
+            isCourseFlag = true;
+            mergedDistinctList = courselList;
+        }
+
         // 获取当前学生当前学期所有已经领取的数据
         LambdaQueryWrapper<TextbookStudentClaim> textbookStudentClaimLambdaQueryWrapper = new LambdaQueryWrapper<>();
         textbookStudentClaimLambdaQueryWrapper
@@ -352,16 +358,18 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
 
                     categoryTotalPrice = BigDecimal.ZERO;
                     for (HeadTeaLookClassBookCategoryDetailVo vo : value) {
-                        textbookStudentClaim = byTextbookId.get(vo.getTextbookId());
-                        if (ObjectUtils.isNotEmpty(textbookStudentClaim)) {
-                            vo.setTextbookStudentClaimId(textbookStudentClaim.getId());
-                            vo.setIsClaim(textbookStudentClaim.getIsClaim());
-                        } else {
-                            vo.setIsClaim(0);
-                        }
-                        if (ObjectUtils.isEmpty(vo.getPrice())) {
-                            vo.setPrice(BigDecimal.ZERO);
+                        if (!isCourseFlag) {
+                            textbookStudentClaim = byTextbookId.get(vo.getTextbookId());
+                            if (ObjectUtils.isNotEmpty(textbookStudentClaim)) {
+                                vo.setTextbookStudentClaimId(textbookStudentClaim.getId());
+                                vo.setIsClaim(textbookStudentClaim.getIsClaim());
+                                vo.setPrice(textbookStudentClaim.getPrice());
+                            } else {
+                                vo.setIsClaim(0);
+                                vo.setPrice(BigDecimal.ZERO);
+                            }
                         }
+
                         categoryTotalPrice = categoryTotalPrice.add(vo.getPrice().multiply(BigDecimal.valueOf(vo.getClaimNum())));
                         totalPrice = totalPrice.add(vo.getPrice().multiply(BigDecimal.valueOf(vo.getClaimNum())));
                     }
@@ -438,7 +446,7 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
                 .eq(WorkflowFormRelation::getCurrentState, HistoricProcessInstance.STATE_COMPLETED)
                 .eq(WfTextbookClaim::getClassId, baseStudentSchoolRoll.getClassId())
                 .eq(WfTextbookClaim::getClaimType, ClaimTypeEnum.ClaimClass.getCode())
-               ;
+        ;
         List<StudentSemesterTextbookVo> classList = wfTextbookClaimMapper.selectJoinList(StudentSemesterTextbookVo.class, classMPJLambdaWrapper);
         // 根据学期 ID 分组,再根据教材 ID 映射
         Map<Long, Map<Long, StudentSemesterTextbookVo>> classMap = classList.stream()
@@ -492,7 +500,7 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
         TextbookStudentSemesterVo result;
         List<Long> mergedKeyList;
         int status = 2;
-        for(StudentSemesterTextbookVo vo : mergedDistinctList){
+        for (StudentSemesterTextbookVo vo : mergedDistinctList) {
             result = new TextbookStudentSemesterVo();
             Long semester = vo.getBaseSemesterId();
             result.setBaseSemesterId(semester);
@@ -511,10 +519,8 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
                     .distinct() // 去重
                     .collect(Collectors.toList()); // 转换为 List
 
-            for(Long textbookId : mergedKeyList){
-                StudentSemesterTextbookVo studentClaimVo = studentClaimSemesterMap.get(textbookId);
-                // 当教材没有确认领取记录的时候当前学期状态应该是待领取
-                if(ObjectUtils.isEmpty(studentClaimVo)){
+            for (Long textbookId : mergedKeyList) {
+                if (ObjectUtils.isEmpty(studentClaimSemesterMap) || ObjectUtils.isEmpty(studentClaimSemesterMap.get(textbookId))) {
                     status = 1;
                     break;
                 }
@@ -570,7 +576,6 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
 //                .groupBy("t.base_semester_id", "t.class_id", "t.textbook_id")
 //                ;
 
-
         return textbookStudentClaimMapper.getTeacherCheckByclassList(ConventPage.getPage(dto), dto);
     }
 
@@ -583,6 +588,7 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
                 .selectAs(WfTextbookClaim::getClassId, TextbookClaimVO::getTextbookStudentClaimId)
                 .selectAs(WfTextbookClaimItem::getTextbookId, TextbookClaimVO::getTextbookId)
                 .selectAs(Textbook::getBookName, TextbookClaimVO::getBookName)
+                .select("if(t.issue_number > 0, 1, 0) as is_issue")
                 .innerJoin(WfTextbookClaim.class, WfTextbookClaim::getId, WfTextbookClaimItem::getWfTextbookClaimId)
                 .leftJoin(Textbook.class, Textbook::getId, WfTextbookClaimItem::getTextbookId)
                 .eq(WfTextbookClaim::getClassId, dto.getClassId())
@@ -820,6 +826,26 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
         Map<String, TextbookStudentClaim> byUserIdAndTextbookId = textbookStudentClaimList.stream()
                 .collect(Collectors.toMap(t -> "" + t.getStudentUserId() + t.getTextbookId(), t -> t, (t1, t2) -> t1));
 
+        // 处理确认领取教材的价格
+        // 根据学期,班级获取申领教材信息
+        MPJLambdaWrapper<WfTextbookClaim> wfTextbookClaimLambdaQueryWrapper = new MPJLambdaWrapper<>();
+        wfTextbookClaimLambdaQueryWrapper
+                .selectAs(WfTextbookClaimItem::getTextbookId, ClassClaimTextbookIssuePrice::getTextbookId)
+                .selectAs(TextbookWarehouseRecord::getSubtotal, ClassClaimTextbookIssuePrice::getPrice)
+                .innerJoin(WfTextbookClaimItem.class, WfTextbookClaimItem::getWfTextbookClaimId, WfTextbookClaim::getId)
+                .innerJoin(TextbookIssueRecord.class,
+                        wrapper -> wrapper
+                                .eq(TextbookIssueRecord::getDataId, WfTextbookClaim::getId)
+                                .eq(TextbookIssueRecord::getDataItemId, WfTextbookClaimItem::getId)
+                )
+                .innerJoin(TextbookWarehouseRecord.class, TextbookWarehouseRecord::getId, TextbookIssueRecord::getTextbookWarehouseRecordId)
+                .eq(WfTextbookClaim::getBaseSemesterId, dto.getBaseSemesterId())
+                .eq(WfTextbookClaim::getClassId, dto.getClassId())
+        ;
+        List<ClassClaimTextbookIssuePrice> classClaimTextbookIssuePrices = wfTextbookClaimMapper.selectJoinList(ClassClaimTextbookIssuePrice.class, wfTextbookClaimLambdaQueryWrapper);
+
+        Map<Long, BigDecimal> textBookPriceMap = classClaimTextbookIssuePrices.stream()
+                .collect(Collectors.toMap(ClassClaimTextbookIssuePrice::getTextbookId, ClassClaimTextbookIssuePrice::getPrice, (p1, p2) -> p2));
 
         List<TextbookStudentClaim> insertList = new ArrayList<>();
         List<TextbookStudentClaim> updateList = new ArrayList<>();
@@ -830,13 +856,26 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
         Long loginUserId = StpUtil.getLoginIdAsLong();
         for (Long textbookId : dto.getTextbookIds()) {
             for (Long userId : dto.getUserIds()) {
+                BigDecimal price = BigDecimal.ZERO;
+                if (MapUtils.isNotEmpty(textBookPriceMap) && ObjectUtils.isNotEmpty(textBookPriceMap.get(textbookId))) {
+                    price = textBookPriceMap.get(textbookId);
+                }
                 oldTextbookStudentClaim = byUserIdAndTextbookId.get("" + userId + textbookId);
-                if (ObjectUtils.isNotEmpty(oldTextbookStudentClaim)) {
+                if (ObjectUtils.isNotEmpty(oldTextbookStudentClaim)
+                        && (ObjectUtils.isEmpty(oldTextbookStudentClaim.getClaimSource()) || oldTextbookStudentClaim.getClaimSource() != 1)
+                ) {
                     updateTextbookStudentClaim = new TextbookStudentClaim();
                     updateTextbookStudentClaim.setId(oldTextbookStudentClaim.getId());
                     updateTextbookStudentClaim.setIsClaim(dto.getIsClaim());
                     updateTextbookStudentClaim.setModifyDate(nowDate);
                     updateTextbookStudentClaim.setModifyUserId(loginUserId);
+                    if (dto.getIsClaim() == 0) {
+                        updateTextbookStudentClaim.setPrice(BigDecimal.ZERO);
+                    }
+                    if (dto.getIsClaim() == 1) {
+                        updateTextbookStudentClaim.setPrice(price);
+                    }
+                    updateTextbookStudentClaim.setClaimSource(2);
                     updateList.add(updateTextbookStudentClaim);
                 } else {
                     insertTextbookStudentClaim = new TextbookStudentClaim();
@@ -847,6 +886,13 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
                     insertTextbookStudentClaim.setIsClaim(dto.getIsClaim());
                     insertTextbookStudentClaim.setCreateDate(nowDate);
                     insertTextbookStudentClaim.setCreateUserId(loginUserId);
+                    if (dto.getIsClaim() == 0) {
+                        insertTextbookStudentClaim.setPrice(BigDecimal.ZERO);
+                    }
+                    if (dto.getIsClaim() == 1) {
+                        insertTextbookStudentClaim.setPrice(price);
+                    }
+                    insertTextbookStudentClaim.setClaimSource(2);
                     insertList.add(insertTextbookStudentClaim);
                 }
             }
@@ -903,6 +949,29 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
         Map<String, TextbookStudentClaim> byUserIdAndTextbookId = textbookStudentClaimList.stream()
                 .collect(Collectors.toMap(t -> "" + t.getBaseSemesterId() + t.getClassId() + t.getStudentUserId() + t.getTextbookId(), t -> t, (t1, t2) -> t1));
 
+        Map<Long, TextbookStudentClaim> byClaimSource = textbookStudentClaimList.stream()
+                .collect(Collectors.toMap(TextbookStudentClaim::getId, t -> t, (t1, t2) -> t1));
+
+        // 根据学期,班级获取申领教材信息
+        MPJLambdaWrapper<WfTextbookClaim> wfTextbookClaimLambdaQueryWrapper = new MPJLambdaWrapper<>();
+        wfTextbookClaimLambdaQueryWrapper
+                .selectAs(WfTextbookClaimItem::getTextbookId, ClassClaimTextbookIssuePrice::getTextbookId)
+                .selectAs(TextbookWarehouseRecord::getSubtotal, ClassClaimTextbookIssuePrice::getPrice)
+                .innerJoin(WfTextbookClaimItem.class, WfTextbookClaimItem::getWfTextbookClaimId, WfTextbookClaim::getId)
+                .innerJoin(TextbookIssueRecord.class,
+                        wrapper -> wrapper
+                                .eq(TextbookIssueRecord::getDataId, WfTextbookClaim::getId)
+                                .eq(TextbookIssueRecord::getDataItemId, WfTextbookClaimItem::getId)
+                )
+                .innerJoin(TextbookWarehouseRecord.class, TextbookWarehouseRecord::getId, TextbookIssueRecord::getTextbookWarehouseRecordId)
+                .in(WfTextbookClaim::getBaseSemesterId, baseSemesterIds)
+                .in(WfTextbookClaim::getClassId, classIds)
+        ;
+
+        List<ClassClaimTextbookIssuePrice> classClaimTextbookIssuePrices = wfTextbookClaimMapper.selectJoinList(ClassClaimTextbookIssuePrice.class, wfTextbookClaimLambdaQueryWrapper);
+
+        Map<Long, BigDecimal> textBookPriceMap = classClaimTextbookIssuePrices.stream()
+                .collect(Collectors.toMap(ClassClaimTextbookIssuePrice::getTextbookId, ClassClaimTextbookIssuePrice::getPrice, (p1, p2) -> p2));
 
         List<TextbookStudentClaim> insertList = new ArrayList<>();
         List<TextbookStudentClaim> updateList = new ArrayList<>();
@@ -912,21 +981,46 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
         Date nowDate = new Date();
         Long loginUserId = StpUtil.getLoginIdAsLong();
         for (TeacherConfirmDto dto : dtos) {
-            if (ObjectUtils.isNotEmpty(dto.getTextbookStudentClaimId()) && dto.getTextbookStudentClaimId() != 0) {
-                updateTextbookStudentClaim = new TextbookStudentClaim();
-                updateTextbookStudentClaim.setId(dto.getTextbookStudentClaimId());
-                updateTextbookStudentClaim.setIsClaim(dto.getIsClaim());
-                updateTextbookStudentClaim.setModifyUserId(loginUserId);
-                updateTextbookStudentClaim.setModifyDate(nowDate);
-                updateList.add(updateTextbookStudentClaim);
+            BigDecimal price = BigDecimal.ZERO;
+            if (MapUtils.isNotEmpty(textBookPriceMap) && ObjectUtils.isNotEmpty(textBookPriceMap.get(dto.getTextbookId()))) {
+                price = textBookPriceMap.get(dto.getTextbookId());
+            }
+            if (ObjectUtils.isNotEmpty(dto.getTextbookStudentClaimId())
+                    && dto.getTextbookStudentClaimId() != 0) {
+                oldTextbookStudentClaim = byClaimSource.get(dto.getTextbookStudentClaimId());
+                if (ObjectUtils.isNotEmpty(oldTextbookStudentClaim)
+                        && (ObjectUtils.isEmpty(oldTextbookStudentClaim.getClaimSource()) || oldTextbookStudentClaim.getClaimSource() != 1)) {
+                    updateTextbookStudentClaim = new TextbookStudentClaim();
+                    updateTextbookStudentClaim.setId(dto.getTextbookStudentClaimId());
+                    updateTextbookStudentClaim.setIsClaim(dto.getIsClaim());
+                    updateTextbookStudentClaim.setModifyUserId(loginUserId);
+                    updateTextbookStudentClaim.setModifyDate(nowDate);
+                    if (dto.getIsClaim() == 0) {
+                        updateTextbookStudentClaim.setPrice(BigDecimal.ZERO);
+                    }
+                    if (dto.getIsClaim() == 1) {
+                        updateTextbookStudentClaim.setPrice(price);
+                    }
+                    updateTextbookStudentClaim.setClaimSource(2);
+                    updateList.add(updateTextbookStudentClaim);
+                }
             } else {
                 oldTextbookStudentClaim = byUserIdAndTextbookId.get("" + dto.getBaseSemesterId() + dto.getClassId() + dto.getStudentUserId() + dto.getTextbookId());
-                if (ObjectUtils.isNotEmpty(oldTextbookStudentClaim)) {
+                if (ObjectUtils.isNotEmpty(oldTextbookStudentClaim)
+                        && (ObjectUtils.isEmpty(oldTextbookStudentClaim.getClaimSource()) || oldTextbookStudentClaim.getClaimSource() != 1)
+                ) {
                     updateTextbookStudentClaim = new TextbookStudentClaim();
                     updateTextbookStudentClaim.setId(oldTextbookStudentClaim.getId());
                     updateTextbookStudentClaim.setIsClaim(dto.getIsClaim());
                     updateTextbookStudentClaim.setModifyDate(nowDate);
                     updateTextbookStudentClaim.setModifyUserId(loginUserId);
+                    if (dto.getIsClaim() == 0) {
+                        updateTextbookStudentClaim.setPrice(BigDecimal.ZERO);
+                    }
+                    if (dto.getIsClaim() == 1) {
+                        updateTextbookStudentClaim.setPrice(price);
+                    }
+                    updateTextbookStudentClaim.setClaimSource(2);
                     updateList.add(updateTextbookStudentClaim);
                 } else {
                     insertTextbookStudentClaim = new TextbookStudentClaim();
@@ -937,6 +1031,13 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
                     insertTextbookStudentClaim.setIsClaim(dto.getIsClaim());
                     insertTextbookStudentClaim.setCreateDate(nowDate);
                     insertTextbookStudentClaim.setCreateUserId(loginUserId);
+                    if (dto.getIsClaim() == 0) {
+                        insertTextbookStudentClaim.setPrice(BigDecimal.ZERO);
+                    }
+                    if (dto.getIsClaim() == 1) {
+                        insertTextbookStudentClaim.setPrice(price);
+                    }
+                    insertTextbookStudentClaim.setClaimSource(2);
                     insertList.add(insertTextbookStudentClaim);
                 }
             }
@@ -994,6 +1095,29 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
         Map<String, TextbookStudentClaim> byUserIdAndTextbookId = textbookStudentClaimList.stream()
                 .collect(Collectors.toMap(t -> "" + t.getStudentUserId() + t.getTextbookId(), t -> t, (t1, t2) -> t1));
 
+        Map<Long, TextbookStudentClaim> byClaimSource = textbookStudentClaimList.stream()
+                .collect(Collectors.toMap(TextbookStudentClaim::getId, t -> t, (t1, t2) -> t1));
+
+        // 根据学期,班级获取申领教材信息
+        MPJLambdaWrapper<WfTextbookClaim> wfTextbookClaimLambdaQueryWrapper = new MPJLambdaWrapper<>();
+        wfTextbookClaimLambdaQueryWrapper
+                .selectAs(WfTextbookClaimItem::getTextbookId, ClassClaimTextbookIssuePrice::getTextbookId)
+                .selectAs(TextbookWarehouseRecord::getSubtotal, ClassClaimTextbookIssuePrice::getPrice)
+                .innerJoin(WfTextbookClaimItem.class, WfTextbookClaimItem::getWfTextbookClaimId, WfTextbookClaim::getId)
+                .innerJoin(TextbookIssueRecord.class,
+                        wrapper -> wrapper
+                                .eq(TextbookIssueRecord::getDataId, WfTextbookClaim::getId)
+                                .eq(TextbookIssueRecord::getDataItemId, WfTextbookClaimItem::getId)
+                )
+                .innerJoin(TextbookWarehouseRecord.class, TextbookWarehouseRecord::getId, TextbookIssueRecord::getTextbookWarehouseRecordId)
+                .eq(WfTextbookClaim::getBaseSemesterId, dto.getBaseSemesterId())
+                .eq(WfTextbookClaim::getClassId, baseStudentSchoolRoll.getClassId())
+        ;
+        List<ClassClaimTextbookIssuePrice> classClaimTextbookIssuePrices = wfTextbookClaimMapper.selectJoinList(ClassClaimTextbookIssuePrice.class, wfTextbookClaimLambdaQueryWrapper);
+
+        Map<Long, BigDecimal> textBookPriceMap = classClaimTextbookIssuePrices.stream()
+                .collect(Collectors.toMap(ClassClaimTextbookIssuePrice::getTextbookId, ClassClaimTextbookIssuePrice::getPrice, (p1, p2) -> p2));
+
         List<TextbookStudentClaim> insertList = new ArrayList<>();
         List<TextbookStudentClaim> updateList = new ArrayList<>();
         TextbookStudentClaim oldTextbookStudentClaim;
@@ -1002,21 +1126,45 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
         Date nowDate = new Date();
         Long loginUserId = StpUtil.getLoginIdAsLong();
         for (StudentConfirmDetailDto studentConfirmDetailDto : dto.getStudentConfirmDetail()) {
-            if (ObjectUtils.isNotEmpty(studentConfirmDetailDto.getTextbookStudentClaimId()) && studentConfirmDetailDto.getTextbookStudentClaimId() != 0) {
-                updateTextbookStudentClaim = new TextbookStudentClaim();
-                updateTextbookStudentClaim.setId(studentConfirmDetailDto.getTextbookStudentClaimId());
-                updateTextbookStudentClaim.setIsClaim(dto.getIsClaim());
-                updateTextbookStudentClaim.setModifyUserId(loginUserId);
-                updateTextbookStudentClaim.setModifyDate(nowDate);
-                updateList.add(updateTextbookStudentClaim);
+            BigDecimal price = BigDecimal.ZERO;
+            if (MapUtils.isNotEmpty(textBookPriceMap) && ObjectUtils.isNotEmpty(textBookPriceMap.get(studentConfirmDetailDto.getTextbookId()))) {
+                price = textBookPriceMap.get(studentConfirmDetailDto.getTextbookId());
+            }
+            if (ObjectUtils.isNotEmpty(studentConfirmDetailDto.getTextbookStudentClaimId())
+                    && studentConfirmDetailDto.getTextbookStudentClaimId() != 0
+            ) {
+                oldTextbookStudentClaim = byClaimSource.get(studentConfirmDetailDto.getTextbookStudentClaimId());
+                if (ObjectUtils.isNotEmpty(oldTextbookStudentClaim)
+                        && (ObjectUtils.isEmpty(oldTextbookStudentClaim.getClaimSource()) || oldTextbookStudentClaim.getClaimSource() != 1)) {
+                    updateTextbookStudentClaim = new TextbookStudentClaim();
+                    updateTextbookStudentClaim.setId(studentConfirmDetailDto.getTextbookStudentClaimId());
+                    updateTextbookStudentClaim.setIsClaim(dto.getIsClaim());
+                    updateTextbookStudentClaim.setModifyUserId(loginUserId);
+                    updateTextbookStudentClaim.setModifyDate(nowDate);
+                    if (dto.getIsClaim() == 0) {
+                        updateTextbookStudentClaim.setPrice(BigDecimal.ZERO);
+                    }
+                    if (dto.getIsClaim() == 1) {
+                        updateTextbookStudentClaim.setPrice(price);
+                    }
+                    updateTextbookStudentClaim.setClaimSource(2);
+                    updateList.add(updateTextbookStudentClaim);
+                }
             } else {
                 oldTextbookStudentClaim = byUserIdAndTextbookId.get("" + baseStudentSchoolRoll.getUserId() + studentConfirmDetailDto.getTextbookId());
-                if (ObjectUtils.isNotEmpty(oldTextbookStudentClaim)) {
+                if (ObjectUtils.isNotEmpty(oldTextbookStudentClaim) && (ObjectUtils.isEmpty(oldTextbookStudentClaim.getClaimSource()) || oldTextbookStudentClaim.getClaimSource() != 1)) {
                     updateTextbookStudentClaim = new TextbookStudentClaim();
                     updateTextbookStudentClaim.setId(oldTextbookStudentClaim.getId());
                     updateTextbookStudentClaim.setIsClaim(dto.getIsClaim());
                     updateTextbookStudentClaim.setModifyDate(nowDate);
                     updateTextbookStudentClaim.setModifyUserId(loginUserId);
+                    if (dto.getIsClaim() == 0) {
+                        updateTextbookStudentClaim.setPrice(BigDecimal.ZERO);
+                    }
+                    if (dto.getIsClaim() == 1) {
+                        updateTextbookStudentClaim.setPrice(price);
+                    }
+                    updateTextbookStudentClaim.setClaimSource(2);
                     updateList.add(updateTextbookStudentClaim);
                 } else {
                     insertTextbookStudentClaim = new TextbookStudentClaim();
@@ -1027,6 +1175,13 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
                     insertTextbookStudentClaim.setIsClaim(dto.getIsClaim());
                     insertTextbookStudentClaim.setCreateDate(nowDate);
                     insertTextbookStudentClaim.setCreateUserId(loginUserId);
+                    if (dto.getIsClaim() == 0) {
+                        insertTextbookStudentClaim.setPrice(BigDecimal.ZERO);
+                    }
+                    if (dto.getIsClaim() == 1) {
+                        insertTextbookStudentClaim.setPrice(price);
+                    }
+                    insertTextbookStudentClaim.setClaimSource(2);
                     insertList.add(insertTextbookStudentClaim);
                 }
             }
@@ -1044,7 +1199,7 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
             }
         }
 
-        return null;
+        return true;
     }
 
     @Override
@@ -1055,6 +1210,7 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
                 .distinct()
                 .selectAs(WfTextbookClaimItem::getTextbookId, TeacherConfirmBatchTextbookListVo::getTextbookId)
                 .selectAs(Textbook::getBookName, TeacherConfirmBatchTextbookListVo::getBookName)
+                .select("if(t.issue_number > 0, 1, 0) as is_issue")
                 .innerJoin(WfTextbookClaim.class, WfTextbookClaim::getId, WfTextbookClaimItem::getWfTextbookClaimId)
                 .leftJoin(Textbook.class, Textbook::getId, WfTextbookClaimItem::getTextbookId)
                 .eq(WfTextbookClaim::getBaseSemesterId, dto.getBaseSemesterId())

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

@@ -31,6 +31,7 @@ import com.xjrsoft.module.textbook.vo.*;
 import com.xjrsoft.module.workflow.entity.WorkflowFormRelation;
 import com.xjrsoft.module.workflow.mapper.WorkflowFormRelationMapper;
 import lombok.AllArgsConstructor;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.camunda.bpm.engine.history.HistoricProcessInstance;
@@ -67,6 +68,7 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
     private final WorkflowFormRelationMapper workflowFormRelationMapper;
 
     private final TextbookWarehouseRecordMapper textbookWarehouseRecordMapper;
+    private final TextbookStudentClaimMapper textbookStudentClaimMapper;
 
     @Override
     public IPage<DistributePageVo> distributePage(DistributePageDto dto) {
@@ -99,7 +101,6 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
                 .eq(WorkflowFormRelation::getCurrentState, HistoricProcessInstance.STATE_COMPLETED)
                 .eq(WfTextbookClaim::getBaseSemesterId, dto.getBaseSemesterId())
                 .eq(StringUtils.isNotEmpty(dto.getClaimType()), WfTextbookClaim::getClaimType, dto.getClaimType())
-                .eq(ObjectUtils.isNotEmpty(dto.getDistributeStatus()), WfTextbookClaim::getStatus, dto.getDistributeStatus())
                 .and(StringUtils.isNotEmpty(dto.getName()),
                         wrapper -> wrapper
                                 .like(XjrUser::getName, dto.getName())
@@ -107,6 +108,18 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
                                 .like(BaseClass::getName, dto.getName())
                 )
         ;
+        if(ObjectUtils.isNotEmpty(dto.getDistributeStatus())){
+            if(dto.getDistributeStatus() == 4){
+                wfTextbookClaimMPJLambdaWrapper
+                        .ne(WfTextbookClaim::getStatus, 1)
+                ;
+            }else {
+                wfTextbookClaimMPJLambdaWrapper
+                        .eq(WfTextbookClaim::getStatus, dto.getDistributeStatus())
+                ;
+            }
+
+        }
         IPage<DistributePageVo> page = this.selectJoinListPage(ConventPage.getPage(dto), DistributePageVo.class, wfTextbookClaimMPJLambdaWrapper);
 
         List<DistributePageVo> distributePageVos = page.getRecords();
@@ -347,6 +360,17 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
         Map<Long, WfTextbookClaimItem> wfTextbookClaimItemMap = wfTextbookClaimItemList.stream()
                 .collect(Collectors.toMap(WfTextbookClaimItem::getId, w -> w, (w1, w2) -> w1));
 
+        // 根据学期,班级获取学生确认领取记录
+        LambdaQueryWrapper<TextbookStudentClaim> textbookStudentClaimLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        textbookStudentClaimLambdaQueryWrapper
+                .eq(TextbookStudentClaim::getBaseSemesterId, wfTextbookClaim.getBaseSemesterId())
+                .eq(TextbookStudentClaim::getClassId, wfTextbookClaim.getClassId())
+        ;
+        List<TextbookStudentClaim> textbookStudentClaimList = textbookStudentClaimMapper.selectList(textbookStudentClaimLambdaQueryWrapper);
+
+        Map<String, TextbookStudentClaim> byUserIdAndTextbookId = textbookStudentClaimList.stream()
+                .collect(Collectors.toMap(t -> "" + t.getStudentUserId() + t.getTextbookId(), t -> t, (t1, t2) -> t1));
+
         // 处理出库单号
         StringBuilder sb = new StringBuilder();
         sb.append("CK");
@@ -357,8 +381,15 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
         int oldOrderInteger = 0;
         int oldOrderLastInteger = 0;
 
-        //操作每一个申领项
+        // 操作每一个申领项
         WfTextbookClaimItem updateWfTextbookClaimItem;
+        // 学生确认处理
+        List<TextbookStudentClaim> insertList = new ArrayList<>();
+        List<TextbookStudentClaim> updateList = new ArrayList<>();
+        TextbookStudentClaim oldTextbookStudentClaim;
+        TextbookStudentClaim insertTextbookStudentClaim;
+        TextbookStudentClaim updateTextbookStudentClaim;
+        Long loginUserId = StpUtil.getLoginIdAsLong();
         for (ConfirmDistributeDto.TextbookClaimItem textbookClaimItem : dto.getTextbookClaimItemList()) {
 //            WfTextbookClaimItem wfTextbookClaimItem = wfTextbookClaimWfTextbookClaimItemMapper.selectById(textbookClaimItem.getTextbookClaimItemId());
             WfTextbookClaimItem wfTextbookClaimItem = wfTextbookClaimItemMap.get(textbookClaimItem.getTextbookClaimItemId());
@@ -466,6 +497,33 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
                 textbookIssueRecord.setIssueTimes(issueTimes);
 
                 textbookIssueRecordMapper.insert(textbookIssueRecord);
+
+                // 如果申领项是个人申领,发放的时候应该直接帮助学生确认领取
+                if(ClaimTypeEnum.ClaimStudent.getCode().equals(wfTextbookClaim.getClaimType())){
+                    oldTextbookStudentClaim = byUserIdAndTextbookId.get("" + wfTextbookClaim.getApplicantUserId() + wfTextbookClaimItem.getTextbookId());
+                    if (ObjectUtils.isNotEmpty(oldTextbookStudentClaim) && (ObjectUtils.isEmpty(oldTextbookStudentClaim.getClaimSource()) || oldTextbookStudentClaim.getClaimSource() != 1)) {
+                        updateTextbookStudentClaim = new TextbookStudentClaim();
+                        updateTextbookStudentClaim.setId(oldTextbookStudentClaim.getId());
+                        updateTextbookStudentClaim.setIsClaim(1);
+                        updateTextbookStudentClaim.setModifyDate(nowDate);
+                        updateTextbookStudentClaim.setModifyUserId(loginUserId);
+                        updateTextbookStudentClaim.setPrice(textbookWarehouseRecord.getSubtotal());
+                        updateTextbookStudentClaim.setClaimSource(2);
+                        updateList.add(updateTextbookStudentClaim);
+                    } else {
+                        insertTextbookStudentClaim = new TextbookStudentClaim();
+                        insertTextbookStudentClaim.setBaseSemesterId(wfTextbookClaim.getBaseSemesterId());
+                        insertTextbookStudentClaim.setClassId(wfTextbookClaim.getClassId());
+                        insertTextbookStudentClaim.setStudentUserId(wfTextbookClaim.getApplicantUserId());
+                        insertTextbookStudentClaim.setTextbookId(wfTextbookClaimItem.getTextbookId());
+                        insertTextbookStudentClaim.setIsClaim(1);
+                        insertTextbookStudentClaim.setCreateDate(nowDate);
+                        insertTextbookStudentClaim.setCreateUserId(loginUserId);
+                        insertTextbookStudentClaim.setPrice(textbookWarehouseRecord.getSubtotal());
+                        insertTextbookStudentClaim.setClaimSource(2);
+                        insertList.add(insertTextbookStudentClaim);
+                    }
+                }
             }
 
             // 修改征订项发放数量
@@ -478,6 +536,18 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
             wfTextbookClaimWfTextbookClaimItemMapper.updateById(updateWfTextbookClaimItem);
         }
 
+        if (CollectionUtils.isNotEmpty(insertList)) {
+            for (TextbookStudentClaim insert : insertList) {
+                textbookStudentClaimMapper.insert(insert);
+            }
+        }
+
+        if (CollectionUtils.isNotEmpty(updateList)) {
+            for (TextbookStudentClaim update : updateList) {
+                textbookStudentClaimMapper.updateById(update);
+            }
+        }
+
         // 查询当前申领所有子项是否已经完成, 发放数量大于申领数量
         MPJLambdaWrapper<WfTextbookClaimItem> wfTextbookClaimItemMPJLambdaWrapper = new MPJLambdaWrapper<>();
         wfTextbookClaimItemMPJLambdaWrapper

+ 22 - 0
src/main/java/com/xjrsoft/module/textbook/vo/ClassClaimTextbookIssuePrice.java

@@ -0,0 +1,22 @@
+package com.xjrsoft.module.textbook.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @title: 班级申领教材发放价格
+ * @Author szs
+ * @Date: 2023-12-26
+ * @Version 1.0
+ */
+@Data
+public class ClassClaimTextbookIssuePrice {
+
+    @ApiModelProperty("教材管理编号")
+    private Long textbookId;
+
+    @ApiModelProperty("教材发放的入库的价格")
+    private BigDecimal price;
+}

+ 4 - 1
src/main/java/com/xjrsoft/module/textbook/vo/HeadTeaLookClassBookCategoryDetailVo.java

@@ -33,7 +33,10 @@ public class HeadTeaLookClassBookCategoryDetailVo {
     @ApiModelProperty("申领数量")
     private Integer claimNum;
 
-    @ApiModelProperty("是否已经领取")
+    @ApiModelProperty("申领项是否发放领取,0:未有发放;1:已有发放;")
+    private Integer isIssue;
+
+    @ApiModelProperty("是否已经领取,0:未领取;1:已领取;2:领取后退还教务处了;3:未申领")
     private Integer isClaim;
 
     @ApiModelProperty("申领类型")

+ 3 - 0
src/main/java/com/xjrsoft/module/textbook/vo/TeacherCheckByclassVo.java

@@ -57,4 +57,7 @@ public class TeacherCheckByclassVo {
      */
     @ApiModelProperty("已经确认领取人数")
     private Long actualClaimNum;
+
+    @ApiModelProperty("申领项是否发放领取,0:未有发放;1:已有发放;")
+    private Integer isIssue;
 }

+ 3 - 0
src/main/java/com/xjrsoft/module/textbook/vo/TeacherConfirmBatchTextbookListVo.java

@@ -22,4 +22,7 @@ public class TeacherConfirmBatchTextbookListVo {
      */
     @ApiModelProperty("教材名称")
     private String bookName;
+
+    @ApiModelProperty("申领项是否发放领取,0:未有发放;1:已有发放;")
+    private Integer isIssue;
 }

+ 3 - 0
src/main/java/com/xjrsoft/module/textbook/vo/TextbookClaimVO.java

@@ -54,4 +54,7 @@ public class TextbookClaimVO {
      */
     @ApiModelProperty("是否领取(1:已领取 0:未领取)")
     private Integer isClaim;
+
+    @ApiModelProperty("申领项是否发放领取,0:未有发放;1:已有发放;")
+    private Integer isIssue;
 }

+ 1 - 0
src/main/resources/application-dev.yml

@@ -116,6 +116,7 @@ xjrsoft:
       - /system/findUserByCode
       - /system/imgcaptcha-answer
       - /student/basestudentinfo/studentinfoByKeyWord
+      - /student/pbCseFeeobjupdate/enrollment-statistics-start
     approval-time: 300 # 审核超时时间 目前设为5分钟
   email:
     host:  #邮件服务器的SMTP地址,可选,默认为smtp.<发件人邮箱后缀>

+ 1 - 0
src/main/resources/application-pre.yml

@@ -98,6 +98,7 @@ xjrsoft:
       - /event/visit
       - /system/findUserByCode
       - /student/basestudentinfo/studentinfoByKeyWord
+      - /student/pbCseFeeobjupdate/enrollment-statistics-start
     approval-time: 300 # 审核超时时间 目前设为5分钟
   email:
     host:  #邮件服务器的SMTP地址,可选,默认为smtp.<发件人邮箱后缀>

+ 1 - 0
src/main/resources/application-prod.yml

@@ -95,6 +95,7 @@ xjrsoft:
       - /system/findUserByCode
       - /student/basestudentinfo/studentinfoByKeyWord
       - /system/xjrTipsMessage/infoByCode
+      - /student/pbCseFeeobjupdate/enrollment-statistics-start
     approval-time: 300 # 审核超时时间 目前设为5分钟
   email:
     host:  #邮件服务器的SMTP地址,可选,默认为smtp.<发件人邮箱后缀>

+ 14 - 3
src/main/resources/mapper/oa/NewsMapper.xml

@@ -6,13 +6,15 @@
     <select id="manageBox" parameterType="com.xjrsoft.module.oa.dto.NewsPageDto"
             resultType="com.xjrsoft.module.oa.vo.NewsPageVo">
         select
-        t.*,
-        t2.name as classIdCN
+        t.*
         from xjr_oa_news t
         where t.delete_mark = 0
-        <if test="dto.type != null and dto.type > 0">
+        <if test="dto.type != null">
             and t.type_id = #{dto.type}
         </if>
+        <if test="dto.typeId != null">
+            and t.type_id = #{dto.typeId}
+        </if>
         <if test="dto.type != null and dto.type = 1">
             and t.wf_status = 1
         </if>
@@ -26,6 +28,9 @@
             and (t.full_head LIKE CONCAT('%',#{dto.keyword},'%')
             or t.news_content LIKE CONCAT('%',#{dto.keyword},'%'))
         </if>
+        <if test="dto.guideShowRange != null and dto.guideShowRange != ''">
+            and t.guide_show_range LIKE CONCAT('%',#{dto.guideShowRange},'%')
+        </if>
         order by t.release_time desc
     </select>
 
@@ -43,6 +48,9 @@
         <if test="dto.type != null and dto.type > 0">
             and t.type_id = #{dto.type}
         </if>
+        <if test="dto.typeId != null">
+            and t.type_id = #{dto.typeId}
+        </if>
         <if test="dto.fullHead != null and dto.fullHead != ''">
             and t.full_head LIKE CONCAT('%',#{dto.fullHead},'%')
         </if>
@@ -53,6 +61,9 @@
         <if test="dto.loginId != null and dto.readMark != null">
             and t3.read_mark =  #{dto.readMark}
         </if>
+        <if test="dto.guideShowRange != null and dto.guideShowRange != ''">
+            and t.guide_show_range LIKE CONCAT('%',#{dto.guideShowRange},'%')
+        </if>
         order by
         t.release_time desc
     </select>

+ 29 - 0
src/main/resources/mapper/oa/NewsRelationMapper.xml

@@ -17,6 +17,35 @@
              where t.delete_mark = 0 and t4.id = 2)
     </insert>
 
+    <insert id="insertAllStudentStaff" parameterType="java.lang.Long">
+        insert into xjr_oa_news_relation (id, news_id, user_id, create_date, read_mark)
+            (SELECT
+                 UUID(),
+                 #{newsId},
+                 t.id,
+                 NOW(),
+                 0
+             FROM xjr_user t
+                      LEFT JOIN xjr_user_role_relation t3 ON t3.user_id = t.id
+                      LEFT JOIN xjr_role t4 ON t4.id = t3.role_id
+                      LEFT JOIN base_student_school_roll t5 ON t.id = t5.user_id
+             WHERE t.delete_mark = 0 AND t4.id = 3
+               AND t5.archives_status = 'FB2901')
+    </insert>
+    <insert id="insertAllParentsStaff" parameterType="java.lang.Long">
+        insert into xjr_oa_news_relation (id, news_id, user_id, create_date, read_mark)
+            (select
+                 UUID(),
+                 #{newsId},
+                 t.id,
+                 NOW(),
+                 0
+             from xjr_user t
+                      left join xjr_user_role_relation t3 on t3.user_id = t.id
+                      LEFT JOIN xjr_role t4 ON t4.id = t3.role_id
+             where t.delete_mark = 0 and t4.id = 4)
+    </insert>
+
     <insert id="insertDeptUser">
         insert into xjr_oa_news_relation (id, news_id, user_id, create_date, read_mark)
         (select

+ 54 - 0
src/main/resources/mapper/oa/OfficialDocumentReceivedHandleMapper.xml

@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xjrsoft.module.oa.mapper.OfficialDocumentReceivedHandleMapper">
+    <select id="getPage" parameterType="com.xjrsoft.module.oa.dto.OfficialDocumentReceivedHandlePageDto" resultType="com.xjrsoft.module.oa.vo.OfficialDocumentReceivedHandlePageVo">
+        SELECT DISTINCT t1.id, t6.name AS receivedTypeCn, t1.received_title,t1.received_number,
+        t1.received_date,t1.communication_org,t1.communication_number,t3.name AS handle_duty_user_name,
+        REPLACE((
+        SELECT GROUP_CONCAT(c2.name) FROM official_document_received_handle c1
+        INNER JOIN xjr_user c2 ON c1.receive_user_id = c2.id
+        WHERE c1.delete_mark = 0 AND c1.official_document_received_id = t1.id AND c1.is_transfer = 1
+        ORDER BY c1.create_date
+        ),',', '>') AS receive_user_names,t1.is_handle,t4.name AS handle_user_name,t1.handle_time,
+        IFNULL((
+        SELECT COUNT(*) > 0 FROM official_document_received_handle WHERE official_document_received_id = t1.id
+        AND create_user_id = #{dto.loginUserId}
+        ), 0) AS is_transfer
+        FROM official_document_received t1
+        INNER JOIN xjr_workflow_form_relation t2 ON t1.id = CAST(t2.form_key_value AS SIGNED)
+        LEFT JOIN xjr_user t3 ON t1.handle_duty_user_id = t3.id
+        LEFT JOIN xjr_user t4 ON t1.handle_user_id = t4.id
+        LEFT JOIN official_document_received_handle t5 ON t1.id = t5.official_document_received_id
+        LEFT JOIN xjr_dictionary_detail t6 ON t1.received_type = t6.code
+        WHERE t2.current_state = 'COMPLETED'
+        AND t1.delete_mark = 0
+        <if test="dto.loginUserId != null">
+            AND (t1.handle_duty_user_id = #{dto.loginUserId} or t5.receive_user_id = #{dto.loginUserId})
+        </if>
+        <if test="dto.handleUserName != null and dto.handleUserName != ''">
+            AND t4.name like concat('%', #{dto.handleUserName},'%')
+        </if>
+        <if test="dto.handleDutyUserName != null and dto.handleDutyUserName != ''">
+            AND t3.name like concat('%', #{dto.handleDutyUserName},'%')
+        </if>
+        <if test="dto.receivedTitle != null and dto.receivedTitle != ''">
+            AND t1.received_title like concat('%', #{dto.receivedTitle},'%')
+        </if>
+        <if test="dto.isHandle != null">
+            AND t1.is_handle = #{dto.isHandle}
+        </if>
+        <if test="dto.receivedType != null and dto.receivedType != ''">
+            AND t1.received_type like concat('%', #{dto.receivedType},'%')
+        </if>
+        <if test="dto.receivedDateStart != null and dto.receivedDateEnd != ''">
+            AND t1.received_date between and #{dto.receivedDateStart} and #{dto.receivedDateEnd}
+        </if>
+        <if test="dto.handleDateStart != null and dto.handleDateEnd != ''">
+            AND DATE_FORMAT(t1.handle_time, '%Y-%m-%d') between and #{dto.handleDateStart} and #{dto.handleDateEnd}
+        </if>
+        order by t1.id desc
+    </select>
+
+</mapper>

+ 3 - 1
src/main/resources/mapper/student/BaseStudentMapper.xml

@@ -137,11 +137,13 @@
 
     <select id="getStudentList" parameterType="com.xjrsoft.module.student.dto.BaseStudentUserPageDto" resultType="com.xjrsoft.module.student.vo.BaseStudentUserPageVo">
         SELECT t1.id,t4.name AS class_name,t5.name AS teacher_name,t1.name,t1.gender AS gender_cn,t1.credential_number,
-        t1.mobile,t3.archives_status AS archives_status_cn ,t3.stduy_status AS stduy_status_cn,t3.student_type AS student_type_cn,t3.learn_status as learn_status_cn FROM xjr_user t1
+        t1.mobile,t3.archives_status AS archives_status_cn ,t3.stduy_status AS stduy_status_cn,t3.student_type AS student_type_cn,
+        t3.learn_status as learn_status_cn,t3.grade_id,t6.name as grade_name,t3.class_id FROM xjr_user t1
         INNER JOIN base_student t2 ON t1.id = t2.user_id
         LEFT JOIN base_student_school_roll t3 ON t1.id = t3.user_id
         LEFT JOIN base_class t4 ON t4.id = t3.class_id
         LEFT JOIN xjr_user t5 ON t4.teacher_id = t5.id
+        LEFT JOIN base_grade t6 ON t3.grade_id = t6.id
         WHERE t1.delete_mark = 0 AND t2.delete_mark = 0
         and t3.archives_status = 'FB2901' and t2.is_normal = 1
         <if test="dto.classIds != null and dto.classIds.size() > 0">

+ 2 - 1
src/main/resources/mapper/textbook/TextbookStudentClaimMapper.xml

@@ -80,7 +80,8 @@
         t5.name as baseSemesterIdCN,
         ifnull(t.received_num, 0) AS actualReceivedNum,
         ifnull(t4.total_student, 0) AS classStudentNum,
-        ifnull(t3.claim_num, 0) AS actualClaimNum
+        ifnull(t3.claim_num, 0) AS actualClaimNum,
+        if(t.received_num > 0, 1, 0) as is_issue
         FROM textbook_claim_counts t
         inner join textbook t1 on t1.id = t.textbook_id
         LEFT JOIN base_class t2 ON t2.id = t.class_id

+ 302 - 0
src/main/resources/sqlScript/20250414_sql.sql

@@ -0,0 +1,302 @@
+alter table wf_meeting_apply
+    modify meeting_room_id varchar(32) null comment '会议室管理主键id(meeting_room)';
+
+-- ---------------------------------------------------------------
+-- 教职工职称信息
+-- ---------------------------------------------------------------
+drop table if exists `professional_title`;
+create table `professional_title`
+(
+    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 '有效标志',
+
+    `user_id`                     bigint       not null comment '教职工主键id(xjr_user)',
+    `user_name`                   varchar(32)  default null comment '工号',
+    `dept_id`                     varchar(512) default null comment '部门主键id(xjr_dept)',
+    `name`                        varchar(256) not null comment '职称名称',
+    `professional_title_no`       varchar(256) not null comment '证书编号',
+    `get_date`                    date         default null comment '取得时间',
+    `subject_category`            varchar(256) default null comment '学科类别',
+    `be_honored_date`             date         default null comment '授予时间',
+    `issuance_date`               date         default null comment '发证时间',
+    `qualification_start_date`    date         default null comment '任职资格开始时间',
+    `qualification_end_date`      date         default null comment '任职资格结束时间',
+    `notice_date`                 date         default null comment '发文时间',
+    `professional_title_category` varchar(256) default null comment '职称类别',
+    `job_status`                  char(1)      default null comment '是否现任(0:否;1:是)',
+    `accord_file_id`              bigint       default null comment '依据附件id'
+) engine = innodb
+  default charset = utf8mb4 comment = '教职工职称信息';
+
+alter table textbook_student_claim
+    add price decimal(15, 6) default 0 null comment '教材确认领取的价格' after textbook_id;
+
+alter table textbook_student_claim
+    add claim_source int default 0 comment '确认领取来源(1:个人申领发放,当确认领取不能被修改未领取,2:班级申领发放,可以修改为未领取)' after is_claim;
+ALTER TABLE xjr_oa_news
+  CHANGE type_id type_id INT NULL COMMENT '类型(1-新闻2-公告3-办事指南)',
+  ADD COLUMN guide_show_range VARCHAR (10) NULL COMMENT '办事指南显示范围' AFTER cover;
+
+
+DROP TABLE IF EXISTS `official_document_received_handle`;
+CREATE TABLE `official_document_received_handle`
+(
+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 '有效标志',
+
+`official_document_received_id` BIGINT NOT NULL COMMENT '公文收文id(official_document_post)',
+`receive_user_id` BIGINT NOT NULL COMMENT '转办人id(xjr_user)',
+`is_handle` INT DEFAULT NULL COMMENT '是否落实',
+`handle_time` DATETIME DEFAULT NULL COMMENT '落实时间',
+`alert_time` DATETIME DEFAULT NULL COMMENT '提醒时间',
+`is_transfer` INT DEFAULT 0 COMMENT '是否转办'
+) ENGINE = INNODB
+  DEFAULT CHARSET = utf8mb4 COMMENT = '公文收文-承办表';
+
+ALTER TABLE official_document_received
+  ADD COLUMN is_handle INT DEFAULT 0 NULL COMMENT '是否已落实',
+  ADD COLUMN handle_time DATETIME NULL COMMENT '落实时间',
+  ADD COLUMN handle_user_id BIGINT NULL COMMENT '落实人';
+
+ALTER TABLE official_document_received
+  ADD COLUMN handle_duty_user_id BIGINT DEFAULT 0 NULL COMMENT '落实负责人';
+
+-- ---------------------------------------------------------------
+-- 教师资格证信息
+-- ---------------------------------------------------------------
+drop table if exists `teacher_certification`;
+create table `teacher_certification`
+(
+    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 '有效标志',
+
+    `user_id`              bigint       not null comment '教职工主键id(xjr_user)',
+    `user_name`            varchar(32)  default null comment '工号',
+    `dept_id`              varchar(512) default null comment '部门主键id(xjr_dept)',
+    `name`                 varchar(256) not null comment '证书名称',
+    `certification_no`     varchar(256) not null comment '证书编号',
+    `subject_category`     varchar(256) default null comment '任教学科',
+    `category`             varchar(256) default null comment '资格种类',
+    `certifying_authority` varchar(256) default null comment '发证机构',
+    `issuance_date`        date         default null comment '发证时间',
+    `accord_file_id`       bigint       default null comment '依据附件id'
+) engine = innodb
+  default charset = utf8mb4 comment = '教师资格证信息';
+
+-- ---------------------------------------------------------------
+-- 考评员信息
+-- ---------------------------------------------------------------
+drop table if exists `evaluator_information`;
+create table `evaluator_information`
+(
+    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 '有效标志',
+
+    `user_id`              bigint       not null comment '教职工主键id(xjr_user)',
+    `user_name`            varchar(32)  default null comment '工号',
+    `dept_id`              varchar(512) default null comment '部门主键id(xjr_dept)',
+    `name`                 varchar(256) not null comment '证书名称',
+    `certification_no`     varchar(256) not null comment '证书编号',
+    `subject_category`     varchar(256) default null comment '任教学科',
+    `level`                varchar(256) default null comment '级别',
+    `certifying_authority` varchar(256) default null comment '发证机构',
+    `issuance_date`        date         default null comment '发证时间',
+    `validity`             date         default null comment '有效期',
+    `accord_file_id`       bigint       default null comment '依据附件id'
+) engine = innodb
+  default charset = utf8mb4 comment = '考评员信息';
+
+-- ---------------------------------------------------------------
+-- 语言能力信息
+-- ---------------------------------------------------------------
+drop table if exists `language_competence`;
+create table `language_competence`
+(
+    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 '有效标志',
+
+    `user_id`          bigint       not null comment '教职工主键id(xjr_user)',
+    `user_name`        varchar(32)  default null comment '工号',
+    `dept_id`          varchar(512) default null comment '部门主键id(xjr_dept)',
+    `name`             varchar(256) not null comment '语言种类',
+    `level`            varchar(256) not null comment '等级',
+    `certification_no` varchar(256) not null comment '证书编号',
+    `exam_authority`   varchar(256) default null comment '测试机构',
+    `issuance_unit`    varchar(256) default null comment '发证单位',
+    `issuance_date`    date         default null comment '发证时间',
+    `accord_file_id`   bigint       default null comment '依据附件id'
+) engine = innodb
+  default charset = utf8mb4 comment = '语言能力信息';
+
+-- ---------------------------------------------------------------
+-- 教职工合同记录
+-- ---------------------------------------------------------------
+drop table if exists `faculty_contract`;
+create table `faculty_contract`
+(
+    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 '有效标志',
+
+    `user_id`           bigint   not null comment '教职工主键id(xjr_user)',
+    `user_name`         varchar(32)  default null comment '工号',
+    `dept_id`           varchar(512) default null comment '部门主键id(xjr_dept)',
+    `start_date`        date     not null comment '起始日期',
+    `end_date`          date     not null comment '结束日期',
+    `contract_position` varchar(256) default null comment '合同岗位',
+    `accord_file_id`    bigint       default null comment '依据附件id'
+) engine = innodb
+  default charset = utf8mb4 comment = '教职工合同记录';
+
+-- ---------------------------------------------------------------
+-- 校外其他协会记录
+-- ---------------------------------------------------------------
+drop table if exists `outside_associations`;
+create table `outside_associations`
+(
+    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 '有效标志',
+
+    `user_id`        bigint       not null comment '教职工主键id(xjr_user)',
+    `user_name`      varchar(32)  default null comment '工号',
+    `dept_id`        varchar(512) default null comment '部门主键id(xjr_dept)',
+    `name`           varchar(256) not null comment '协会名称',
+    `join_date`      date         not null comment '加入时间',
+    `exit_date`      date         default null comment '退出时间',
+    `duty`           varchar(256) default null comment '职务',
+    `remark`         varchar(512) default null comment '说明',
+    `accord_file_id` bigint       default null comment '依据附件id'
+) engine = innodb
+  default charset = utf8mb4 comment = '校外其他协会记录';
+
+-- ---------------------------------------------------------------
+-- 骨干教师记录
+-- ---------------------------------------------------------------
+drop table if exists `core_teacher`;
+create table `core_teacher`
+(
+    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 '有效标志',
+
+    `user_id`          bigint       not null comment '教职工主键id(xjr_user)',
+    `user_name`        varchar(32)  default null comment '工号',
+    `dept_id`          varchar(512) default null comment '部门主键id(xjr_dept)',
+    `level`            varchar(256) not null comment '级别',
+    `subject_category` varchar(256) not null comment '任教学科',
+    `certification_no` varchar(256) not null comment '证书编号',
+    `specialty_dept`   varchar(256) default null comment '专业部',
+    `reference_number` varchar(256) default null comment '文号',
+    `issuance_date`    date         default null comment '认证时间',
+    `remark`           varchar(512) default null comment '备注',
+    `accord_file_id`   bigint       default null comment '依据附件id'
+) engine = innodb
+  default charset = utf8mb4 comment = '骨干教师记录';
+
+-- ---------------------------------------------------------------
+-- 科研信息记录
+-- ---------------------------------------------------------------
+drop table if exists `scientific_research`;
+create table `scientific_research`
+(
+    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 '有效标志',
+
+    `user_id`              bigint       not null comment '教职工主键id(xjr_user)',
+    `user_name`            varchar(32)  default null comment '工号',
+    `dept_id`              varchar(512) default null comment '部门主键id(xjr_dept)',
+    `name`                 varchar(256) not null comment '科研名称',
+    `scientific_no`        varchar(256) default null comment '科研编号',
+    `subject_category`     varchar(256) default null comment '任教学科',
+    `level`                varchar(256) default null comment '等级',
+    `certifying_authority` varchar(256) default null comment '发证机构',
+    `issuance_date`        date         default null comment '发证时间',
+    `remark`               varchar(512) default null comment '备注',
+    `accord_file_id`       bigint       default null comment '依据附件id'
+) engine = innodb
+  default charset = utf8mb4 comment = '科研信息记录';
+
+-- ---------------------------------------------------------------
+-- 岗位信息记录
+-- ---------------------------------------------------------------
+drop table if exists `job_information`;
+create table `job_information`
+(
+    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 '有效标志',
+
+    `user_id`            bigint       not null comment '教职工主键id(xjr_user)',
+    `user_name`          varchar(32)  default null comment '工号',
+    `dept_id`            varchar(512) default null comment '部门主键id(xjr_dept)',
+    `job_category`       varchar(256) not null comment '岗位类型',
+    `job_name`           varchar(256) not null comment '岗位名称',
+    `employ_date`        date         default null comment '聘用时间',
+    `employ_no`          varchar(256) default null comment '聘用文号',
+    `leader_status`      char(1)          default null comment '是否领导岗位',
+    `job_dept`           varchar(256) default null comment '行政岗位部门',
+    `concurrent_college` varchar(256) default null comment '兼课学院',
+    `remark`             varchar(512) default null comment '备注',
+    `accord_file_id`     bigint       default null comment '依据附件id'
+) engine = innodb
+  default charset = utf8mb4 comment = '岗位信息记录';
+
+
+

+ 5 - 0
src/test/java/com/xjrsoft/module/job/WfCourseAdjustTaskTest.java

@@ -18,6 +18,7 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import static org.junit.jupiter.api.Assertions.*;
@@ -38,6 +39,9 @@ class WfCourseAdjustTaskTest {
 
     @Test
     public void execute() {
+        List<Long> ids = new ArrayList<>();
+        ids.add(1910895102200975360L);
+        ids.add(1910894870629257216L);
         List<WfCourseAdjust> list = wfCourseAdjustService.list(
                 new MPJLambdaWrapper<WfCourseAdjust>()
                         .select(WfCourseAdjust::getId)
@@ -46,6 +50,7 @@ class WfCourseAdjustTaskTest {
                         .eq(WorkflowFormRelation::getCurrentState, HistoricProcessInstance.STATE_COMPLETED)
                         .eq(WfCourseAdjust::getDeleteMark, DeleteMark.NODELETE.getCode())
                         .eq(WfCourseAdjust::getEnabledMark, EnabledMark.ENABLED.getCode())
+                        .in(!ids.isEmpty(), WfCourseAdjust::getId, ids)
         );
 
         for (WfCourseAdjust wfCourseAdjust : list) {

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

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