Browse Source

班级课程管理

brealinxx 1 year ago
parent
commit
bd74727fe9
67 changed files with 1565 additions and 117 deletions
  1. 7 0
      src/main/java/com/xjrsoft/module/hikvision/controller/EventController.java
  2. 163 0
      src/main/java/com/xjrsoft/module/job/AttenDanceWarnNoticeTask.java
  3. 1 1
      src/main/java/com/xjrsoft/module/liteflow/node/AddTextbookNode.java
  4. 2 2
      src/main/java/com/xjrsoft/module/personnel/controller/StundentFaceProcessController.java
  5. 58 26
      src/main/java/com/xjrsoft/module/schedule/util/DataUtil.java
  6. 8 1
      src/main/java/com/xjrsoft/module/student/controller/BaseStudentInfoController.java
  7. 94 5
      src/main/java/com/xjrsoft/module/student/controller/StudentManagerController.java
  8. 0 3
      src/main/java/com/xjrsoft/module/student/entity/BaseStudentFamilyMember.java
  9. 5 1
      src/main/java/com/xjrsoft/module/student/service/IStudentManagerService.java
  10. 30 3
      src/main/java/com/xjrsoft/module/student/service/impl/StudentManagerServiceImpl.java
  11. 3 0
      src/main/java/com/xjrsoft/module/student/vo/BaseStudentSchoolRollVo.java
  12. 6 0
      src/main/java/com/xjrsoft/module/student/vo/BaseStudentUserPageVo.java
  13. 1 0
      src/main/java/com/xjrsoft/module/student/vo/BaseStudentUserVo.java
  14. 7 0
      src/main/java/com/xjrsoft/module/system/controller/LoginController.java
  15. 2 0
      src/main/java/com/xjrsoft/module/system/service/ILoginService.java
  16. 81 1
      src/main/java/com/xjrsoft/module/system/service/impl/LoginServiceImpl.java
  17. 13 2
      src/main/java/com/xjrsoft/module/teacher/controller/AttendanceRecordController.java
  18. 100 0
      src/main/java/com/xjrsoft/module/teacher/controller/TeacherAwardItemController.java
  19. 0 1
      src/main/java/com/xjrsoft/module/teacher/controller/TeacherbaseManagerController.java
  20. 53 0
      src/main/java/com/xjrsoft/module/teacher/dto/AddTeacherAwardItemDto.java
  21. 19 0
      src/main/java/com/xjrsoft/module/teacher/dto/TeacherAwardItemPageDto.java
  22. 24 0
      src/main/java/com/xjrsoft/module/teacher/dto/UpdateTeacherAwardItemDto.java
  23. 105 0
      src/main/java/com/xjrsoft/module/teacher/entity/TeacherAwardItem.java
  24. 16 0
      src/main/java/com/xjrsoft/module/teacher/mapper/TeacherAwardItemMapper.java
  25. 0 1
      src/main/java/com/xjrsoft/module/teacher/mapper/WfTeacherleaveMapper.java
  26. 0 3
      src/main/java/com/xjrsoft/module/teacher/service/IBaseTeacherService.java
  27. 14 0
      src/main/java/com/xjrsoft/module/teacher/service/ITeacherAwardItemService.java
  28. 0 1
      src/main/java/com/xjrsoft/module/teacher/service/IWfTeacherleaveService.java
  29. 19 0
      src/main/java/com/xjrsoft/module/teacher/service/impl/TeacherAwardItemServiceImpl.java
  30. 0 1
      src/main/java/com/xjrsoft/module/teacher/service/impl/TeacherbaseManagerServiceImpl.java
  31. 84 0
      src/main/java/com/xjrsoft/module/teacher/vo/TeacherAwardItemPageVo.java
  32. 58 0
      src/main/java/com/xjrsoft/module/teacher/vo/TeacherAwardItemVo.java
  33. 64 0
      src/main/java/com/xjrsoft/module/textbook/controller/TextbookController.java
  34. 188 0
      src/main/java/com/xjrsoft/module/textbook/controller/WfTextbookSubscriptionController.java
  35. 13 2
      src/main/java/com/xjrsoft/module/textbook/dto/AddWfTextbookSubscriptionDto.java
  36. 6 1
      src/main/java/com/xjrsoft/module/textbook/dto/AddWfTextbookSubscriptionItemDto.java
  37. 3 0
      src/main/java/com/xjrsoft/module/textbook/dto/TextbookPageDto.java
  38. 25 0
      src/main/java/com/xjrsoft/module/textbook/dto/TextbookSubscriptionListDto.java
  39. 11 1
      src/main/java/com/xjrsoft/module/textbook/dto/UpdateWfTextbookSubscriptionDto.java
  40. 1 1
      src/main/java/com/xjrsoft/module/textbook/dto/WfTextbookSubscriptionPageDto.java
  41. 5 1
      src/main/java/com/xjrsoft/module/textbook/entity/Textbook.java
  42. 10 1
      src/main/java/com/xjrsoft/module/textbook/entity/WfTextbookSubscription.java
  43. 6 2
      src/main/java/com/xjrsoft/module/textbook/entity/WfTextbookSubscriptionItem.java
  44. 1 0
      src/main/java/com/xjrsoft/module/textbook/mapper/TextbookIssueRecordMapper.java
  45. 2 1
      src/main/java/com/xjrsoft/module/textbook/mapper/WfTextbookSubscriptionItemMapper.java
  46. 2 1
      src/main/java/com/xjrsoft/module/textbook/mapper/WfTextbookSubscriptionMapper.java
  47. 1 1
      src/main/java/com/xjrsoft/module/textbook/service/ITextbookService.java
  48. 3 11
      src/main/java/com/xjrsoft/module/textbook/service/IWfTextbookSubscriptionService.java
  49. 3 10
      src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookServiceImpl.java
  50. 4 16
      src/main/java/com/xjrsoft/module/textbook/service/impl/WfTextbookSubscriptionServiceImpl.java
  51. 26 0
      src/main/java/com/xjrsoft/module/textbook/vo/GradeClassListVo.java
  52. 25 0
      src/main/java/com/xjrsoft/module/textbook/vo/GradeClassTreeVo.java
  53. 5 0
      src/main/java/com/xjrsoft/module/textbook/vo/TextbookPageVo.java
  54. 63 0
      src/main/java/com/xjrsoft/module/textbook/vo/TextbookSubscriptionListVo.java
  55. 5 0
      src/main/java/com/xjrsoft/module/textbook/vo/TextbookVo.java
  56. 1 1
      src/main/java/com/xjrsoft/module/textbook/vo/WfTextbookSubscriptionItemVo.java
  57. 45 1
      src/main/java/com/xjrsoft/module/textbook/vo/WfTextbookSubscriptionPageVo.java
  58. 6 1
      src/main/java/com/xjrsoft/module/textbook/vo/WfTextbookSubscriptionVo.java
  59. 2 2
      src/main/java/com/xjrsoft/module/workflow/utils/WorkFlowUtil.java
  60. 1 0
      src/main/resources/application-dev.yml
  61. 1 0
      src/main/resources/application-pre.yml
  62. 1 0
      src/main/resources/application-prod.yml
  63. 25 2
      src/main/resources/mapper/student/BaseStudentMapper.xml
  64. 0 1
      src/main/resources/mapper/student/BaseStudentSchoolRollMapper.xml
  65. 1 1
      src/main/resources/mapper/teacher/XjrUserMapper.xml
  66. 30 0
      src/test/java/com/xjrsoft/module/job/AttenDanceWarnNoticeTaskTest.java
  67. 7 7
      src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java

+ 7 - 0
src/main/java/com/xjrsoft/module/hikvision/controller/EventController.java

@@ -91,6 +91,7 @@ public class EventController {
                     }
                     }
                     String happenTime = eventObject.get("happenTime").getAsString();
                     String happenTime = eventObject.get("happenTime").getAsString();
                     String recordTimeStr = outInRecordUtil.ChangeTime(happenTime);
                     String recordTimeStr = outInRecordUtil.ChangeTime(happenTime);
+                    int status = eventObject.get("status").getAsInt();
                     if (idNum == null) continue;
                     if (idNum == null) continue;
                     if (!Objects.equals(faceImportMapper.IsStudentTypeByPersonId(Long.valueOf(idNum)), "学生")) {
                     if (!Objects.equals(faceImportMapper.IsStudentTypeByPersonId(Long.valueOf(idNum)), "学生")) {
                         continue;
                         continue;
@@ -119,6 +120,12 @@ public class EventController {
                         paramJson.put("thing1", student.getName());
                         paramJson.put("thing1", student.getName());
                         paramJson.put("time3", recordTimeStr);
                         paramJson.put("time3", recordTimeStr);
                         paramJson.put("thing2", baseClass.getName());
                         paramJson.put("thing2", baseClass.getName());
+                        if(status == 1){
+                            paramJson.put("const4", "进校");
+                        }else{
+                            paramJson.put("const4", "出校");
+                        }
+
                         weChatSendMessageDto.setContent(paramJson);
                         weChatSendMessageDto.setContent(paramJson);
                         weChatService.sendTemplateMessage(weChatSendMessageDto);
                         weChatService.sendTemplateMessage(weChatSendMessageDto);
                     }
                     }

+ 163 - 0
src/main/java/com/xjrsoft/module/job/AttenDanceWarnNoticeTask.java

@@ -0,0 +1,163 @@
+package com.xjrsoft.module.job;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.xjrsoft.module.attendance.entity.AttendanceRuleDetails;
+import com.xjrsoft.module.attendance.entity.AttendanceUserRelation;
+import com.xjrsoft.module.attendance.mapper.AttendanceUserRelationMapper;
+import com.xjrsoft.module.attendance.service.IAttendanceRuleCategoryService;
+import com.xjrsoft.module.concat.service.IXjrUserService;
+import com.xjrsoft.module.organization.dto.WeChatSendMessageDto;
+import com.xjrsoft.module.organization.service.IWeChatService;
+import com.xjrsoft.module.teacher.entity.XjrUser;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * 考勤预警通知
+ * @author dzx
+ * @date 2024年5月21日
+ */
+@Component
+@Slf4j
+public class AttenDanceWarnNoticeTask {
+    @Autowired
+    private IAttendanceRuleCategoryService categoryService;
+
+    @Autowired
+    private IXjrUserService userService;
+
+    @Autowired
+    private AttendanceUserRelationMapper relationMapper;
+
+    @Autowired
+    private IWeChatService weChatService;
+
+    @Scheduled(cron = "0 */10 * * * ?")
+    public void RefreshConnectionPool() {
+        //获取当前时间
+        LocalDateTime now = LocalDateTime.now();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        String timeStr = now.format(formatter);
+
+        //查询今天所有的考勤规则
+        List<AttendanceRuleDetails> ruleDetailsList = categoryService.getTodayRules();
+        Map<Long, AttendanceRuleDetails> ruleDetailsMap = new HashMap<>();
+        for (AttendanceRuleDetails ruleDetail : ruleDetailsList) {
+            ruleDetailsMap.put(ruleDetail.getAttendanceRuleCategoryId(), ruleDetail);
+        }
+
+        //查询出所有人的考勤规则
+        List<AttendanceUserRelation> relationList = relationMapper.selectList(
+                new QueryWrapper<AttendanceUserRelation>().lambda()
+                        .eq(AttendanceUserRelation::getDeleteMark, 0)
+        );
+        Map<Long, AttendanceRuleDetails> allTodyRule = new HashMap<>();
+        for (AttendanceUserRelation userRelation : relationList) {
+            allTodyRule.put(userRelation.getUserId(), ruleDetailsMap.get(userRelation.getAttendanceRuleCategoryId()));
+        }
+
+        //判断所有当前时间下,哪几条规则需要进行提醒
+        Map<Long, Integer> ruleDetailsJudgeMap = judgeExecuteNotice(now, ruleDetailsList);
+
+        //查询
+
+        //根据规则中的用户id查询出所有绑定了微信的学生和教师
+        List<XjrUser> userList = getUserList(allTodyRule.keySet());
+        for (XjrUser xjrUser : userList) {
+            AttendanceRuleDetails ruleDetails = allTodyRule.get(xjrUser.getId());
+            Integer status = ruleDetailsJudgeMap.get(ruleDetails.getId());
+            if(status == 0){
+                continue;
+            }
+
+            WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
+            weChatSendMessageDto.setUserId(xjrUser.getOpenId());
+            weChatSendMessageDto.setTemplateId("Fg4AWVQRGernl0PiJQ8gRgCUFHEGZuizlClQNuVhqu4");
+            weChatSendMessageDto.setMsgId(xjrUser.getId().toString());
+            JSONObject paramJson = new JSONObject();
+
+            paramJson.put("thing8", xjrUser.getName());
+            paramJson.put("time9", timeStr);
+            if(status == 1){
+                paramJson.put("const12", "进校");
+            }else{
+                paramJson.put("const12", "出校");
+            }
+
+            weChatSendMessageDto.setContent(paramJson);
+            weChatService.sendTemplateMessage(weChatSendMessageDto);
+        }
+    }
+
+    /**
+     * 判断所有规则,哪些需要发送
+     * @param judgeTime
+     * @param ruleDetailsList
+     * @return 0:不需要提醒,-1:待打卡,1:未打卡
+     */
+    Map<Long, Integer> judgeExecuteNotice(LocalDateTime judgeTime, List<AttendanceRuleDetails> ruleDetailsList){
+        Map<Long, Integer> result = new HashMap<>();
+        for (AttendanceRuleDetails ruleDetails : ruleDetailsList) {
+            if(ruleDetails.getIsAllowInOutSchool() != null && ruleDetails.getIsAllowInOutSchool() != 1
+                    && ruleDetails.getIsAttendance() != null && ruleDetails.getIsAttendance() == 1){
+
+                LocalDateTime amStartTime = judgeTime.with(ruleDetails.getAmStartTime());
+                long amBetween = ChronoUnit.MINUTES.between(judgeTime, amStartTime);
+                if(amBetween == ruleDetails.getAgoMinutes()){
+                    result.put(ruleDetails.getId(), - 1);
+                }else if(amBetween == ruleDetails.getOverMinutes()){
+                    result.put(ruleDetails.getId(), - 1);
+                }
+
+                LocalDateTime pmStartTime = judgeTime.with(ruleDetails.getPmStartTime());
+                long pmBetween = ChronoUnit.MINUTES.between(judgeTime, pmStartTime);
+                if(pmBetween == ruleDetails.getAgoMinutes()){
+                    result.put(ruleDetails.getId(), - 1);
+                }else if(pmBetween == ruleDetails.getOverMinutes()){
+                    result.put(ruleDetails.getId(), - 1);
+                }
+
+                LocalDateTime eveningStartTime = judgeTime.with(ruleDetails.getEveningStartTime());
+                long eveningBetween = ChronoUnit.MINUTES.between(judgeTime, eveningStartTime);
+                if(eveningBetween == ruleDetails.getAgoMinutes()){
+                    result.put(ruleDetails.getId(), - 1);
+                }else if(eveningBetween == ruleDetails.getOverMinutes()){
+                    result.put(ruleDetails.getId(), - 1);
+                }
+                if(!result.containsKey(ruleDetails.getId())){
+                    result.put(ruleDetails.getId(), 0);
+                }
+            }else{
+                result.put(ruleDetails.getId(), 0);
+            }
+
+        }
+        return result;
+    }
+    /**
+     * 查询出所有用户信息(openId不为空的)
+     * @param userIds 需要插叙的userid
+     * @return 用户信息
+     */
+    List<XjrUser> getUserList(Set<Long> userIds){
+        return userService.list(
+            new QueryWrapper<XjrUser>().lambda()
+            .eq(XjrUser::getId, userIds)
+            .isNotNull(XjrUser::getOpenId)
+        );
+    }
+
+
+
+}

+ 1 - 1
src/main/java/com/xjrsoft/module/liteflow/node/AddTextbookNode.java

@@ -25,7 +25,7 @@ AddTextbookNode extends NodeComponent {
         Long formId = Convert.toLong(value);
         Long formId = Convert.toLong(value);
         if (formId != null) {
         if (formId != null) {
             // 数据处理
             // 数据处理
-            textbookService.dataHandleAddTextbookNode(formId);
+            //textbookService.dataHandleAddTextbookNode(formId);
         }
         }
     }
     }
 }
 }

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

@@ -211,8 +211,8 @@ public class StundentFaceProcessController {
             ZipEntry entry = entries.nextElement();
             ZipEntry entry = entries.nextElement();
             String filename = entry.getName();
             String filename = entry.getName();
             InputStream inputStream = zipFile.getInputStream(entry); //读取文件内容
             InputStream inputStream = zipFile.getInputStream(entry); //读取文件内容
-
-            String idNumber = filename.substring(0, 18);
+            String[] split = filename.split("\\.");
+            String idNumber = split[0].substring(split[0].length() - 18);
             BaseStudentUser studentUser = studentMap.get(idNumber);
             BaseStudentUser studentUser = studentMap.get(idNumber);
             if(studentUser == null){
             if(studentUser == null){
                 continue;
                 continue;

+ 58 - 26
src/main/java/com/xjrsoft/module/schedule/util/DataUtil.java

@@ -23,7 +23,6 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
-import java.util.concurrent.CompletableFuture;
 
 
 /**
 /**
  * @author dzx
  * @author dzx
@@ -55,7 +54,7 @@ public class DataUtil {
                 long timestamp = System.currentTimeMillis();
                 long timestamp = System.currentTimeMillis();
                 //生成签名
                 //生成签名
                 String sign = ScheduleUtil.createSign(timestamp);
                 String sign = ScheduleUtil.createSign(timestamp);
-                String result = ScheduleUtil.doPost(url, paramJson.toString(), sign, timestamp);
+                ScheduleUtil.doPost(url, paramJson.toString(), sign, timestamp);
                 continue;
                 continue;
             }
             }
 
 
@@ -80,13 +79,11 @@ public class DataUtil {
                 " INNER JOIN base_office_build t2 ON t1.office_build_id = t2.id" +
                 " INNER JOIN base_office_build t2 ON t1.office_build_id = t2.id" +
                 " WHERE t1.delete_mark = 0 AND t2.delete_mark = 0";
                 " WHERE t1.delete_mark = 0 AND t2.delete_mark = 0";
         List<ClassroomJianyuekbVo> dataList = db.query(sql, ClassroomJianyuekbVo.class);
         List<ClassroomJianyuekbVo> dataList = db.query(sql, ClassroomJianyuekbVo.class);
-        String url  = ScheduleUtil.apiUrl + "classroom/create";
+
         JsonParser jsonParser = new JsonParser();
         JsonParser jsonParser = new JsonParser();
         Map<Long, String> idMap = new HashMap<>();
         Map<Long, String> idMap = new HashMap<>();
         for (ClassroomJianyuekbVo classroom : dataList) {
         for (ClassroomJianyuekbVo classroom : dataList) {
-            if(ids != null && ids.get(classroom.getExtendId()) != null){
-                continue;
-            }
+            String url  = ScheduleUtil.apiUrl + "classroom/create";
             JsonObject paramJson = new JsonObject();
             JsonObject paramJson = new JsonObject();
             paramJson.addProperty("schoolDistrictId", schoolDistrictId);
             paramJson.addProperty("schoolDistrictId", schoolDistrictId);
             paramJson.addProperty("name", classroom.getName());
             paramJson.addProperty("name", classroom.getName());
@@ -95,10 +92,19 @@ public class DataUtil {
             paramJson.addProperty("location", classroom.getLocation());
             paramJson.addProperty("location", classroom.getLocation());
             paramJson.addProperty("extendId", classroom.getExtendId());
             paramJson.addProperty("extendId", classroom.getExtendId());
             paramJson.addProperty("floor", classroom.getFloor());
             paramJson.addProperty("floor", classroom.getFloor());
+
             //获取时间戳
             //获取时间戳
             long timestamp = System.currentTimeMillis();
             long timestamp = System.currentTimeMillis();
             //生成签名
             //生成签名
             String sign = ScheduleUtil.createSign(timestamp);
             String sign = ScheduleUtil.createSign(timestamp);
+
+            if(ids != null && ids.get(classroom.getExtendId()) != null){
+                url  = ScheduleUtil.apiUrl + "classroom/update";
+                paramJson.addProperty("serialNo", ids.get(classroom.getExtendId()));
+                ScheduleUtil.doPost(url, paramJson.toString(), sign, timestamp);
+                continue;
+            }
+
             String result = ScheduleUtil.doPost(url, paramJson.toString(), sign, timestamp);
             String result = ScheduleUtil.doPost(url, paramJson.toString(), sign, timestamp);
             if(result == null){
             if(result == null){
                 continue;
                 continue;
@@ -120,13 +126,11 @@ public class DataUtil {
                 " AND t1.student_id IS NOT NULL AND t1.student_id != ''" +
                 " AND t1.student_id IS NOT NULL AND t1.student_id != ''" +
                 " AND t3.archives_status = 'FB2901'";
                 " AND t3.archives_status = 'FB2901'";
         List<StudentJianyuekbVo> dataList = db.query(sql, StudentJianyuekbVo.class);
         List<StudentJianyuekbVo> dataList = db.query(sql, StudentJianyuekbVo.class);
-        String url  = ScheduleUtil.apiUrl + "student/create";
+
         JsonParser jsonParser = new JsonParser();
         JsonParser jsonParser = new JsonParser();
         Map<Long, String> idMap = new HashMap<>();
         Map<Long, String> idMap = new HashMap<>();
         for (StudentJianyuekbVo student : dataList) {
         for (StudentJianyuekbVo student : dataList) {
-            if(ids != null && ids.get(student.getExtendId()) != null){
-                continue;
-            }
+            String url  = ScheduleUtil.apiUrl + "student/create";
             JsonObject paramJson = new JsonObject();
             JsonObject paramJson = new JsonObject();
             paramJson.addProperty("registerNo", student.getRegisterNo());
             paramJson.addProperty("registerNo", student.getRegisterNo());
             if("SB10001".equals(student.getGender())){
             if("SB10001".equals(student.getGender())){
@@ -143,6 +147,14 @@ public class DataUtil {
             long timestamp = System.currentTimeMillis();
             long timestamp = System.currentTimeMillis();
             //生成签名
             //生成签名
             String sign = ScheduleUtil.createSign(timestamp);
             String sign = ScheduleUtil.createSign(timestamp);
+
+            if(ids != null && ids.get(student.getExtendId()) != null){
+                paramJson.addProperty("serialNo", ids.get(student.getExtendId()));
+                url  = ScheduleUtil.apiUrl + "student/update";
+                ScheduleUtil.doPost(url, paramJson.toString(), sign, timestamp);
+                continue;
+            }
+
             String result = ScheduleUtil.doPost(url, paramJson.toString(), sign, timestamp);
             String result = ScheduleUtil.doPost(url, paramJson.toString(), sign, timestamp);
             if(result == null){
             if(result == null){
                 continue;
                 continue;
@@ -166,14 +178,11 @@ public class DataUtil {
                 " inner join " + tableName + " t3 on t1.id = t3.user_id" +
                 " inner join " + tableName + " t3 on t1.id = t3.user_id" +
                 " where t1.delete_mark = 0 and t2.role_id = 2";
                 " where t1.delete_mark = 0 and t2.role_id = 2";
         List<XjrUser> xjrUsers = db.query(sql, XjrUser.class);
         List<XjrUser> xjrUsers = db.query(sql, XjrUser.class);
-        String url  = ScheduleUtil.apiUrl + "teacher/create";
         JsonParser jsonParser = new JsonParser();
         JsonParser jsonParser = new JsonParser();
 
 
         Map<Long, String> idMap = new HashMap<>();
         Map<Long, String> idMap = new HashMap<>();
         for (XjrUser user : xjrUsers) {
         for (XjrUser user : xjrUsers) {
-            if(ids != null && ids.get(user.getId()) != null){
-                continue;
-            }
+            String url  = ScheduleUtil.apiUrl + "teacher/create";
             JsonObject paramJson = new JsonObject();
             JsonObject paramJson = new JsonObject();
             paramJson.addProperty("jobNumber", user.getUserName());
             paramJson.addProperty("jobNumber", user.getUserName());
             if("SB10001".equals(user.getGender())){
             if("SB10001".equals(user.getGender())){
@@ -189,6 +198,13 @@ public class DataUtil {
             long timestamp = System.currentTimeMillis();
             long timestamp = System.currentTimeMillis();
             //生成签名
             //生成签名
             String sign = ScheduleUtil.createSign(timestamp);
             String sign = ScheduleUtil.createSign(timestamp);
+            if(ids != null && ids.get(user.getId()) != null){
+                url  = ScheduleUtil.apiUrl + "teacher/update";
+                paramJson.addProperty("serialNo", ids.get(user.getId()));
+                ScheduleUtil.doPost(url, paramJson.toString(), sign, timestamp);
+                continue;
+            }
+
             String result = ScheduleUtil.doPost(url, paramJson.toString(), sign, timestamp);
             String result = ScheduleUtil.doPost(url, paramJson.toString(), sign, timestamp);
             if(result == null){
             if(result == null){
                 continue;
                 continue;
@@ -206,13 +222,12 @@ public class DataUtil {
     public Map<Long, String> insertCourse(Db db, String tableName, Map<Long, String> ids, Map<Long, String> tagMap) throws Exception {
     public Map<Long, String> insertCourse(Db db, String tableName, Map<Long, String> ids, Map<Long, String> tagMap) throws Exception {
         String sql = "select * from " + tableName + " where delete_mark = 0";
         String sql = "select * from " + tableName + " where delete_mark = 0";
         List<BaseCourseSubject> list = db.query(sql, BaseCourseSubject.class);
         List<BaseCourseSubject> list = db.query(sql, BaseCourseSubject.class);
-        String url  = ScheduleUtil.apiUrl + "courseclass/Create";
+
         Map<Long, String> idMap = new HashMap<>();
         Map<Long, String> idMap = new HashMap<>();
         JsonParser jsonParser = new JsonParser();
         JsonParser jsonParser = new JsonParser();
         for (BaseCourseSubject courseSubject : list) {
         for (BaseCourseSubject courseSubject : list) {
-            if(ids != null && ids.get(courseSubject.getId()) != null){
-                continue;
-            }
+            String url  = ScheduleUtil.apiUrl + "courseclass/Create";
+
             JsonObject paramJson = new JsonObject();
             JsonObject paramJson = new JsonObject();
             paramJson.addProperty("name", courseSubject.getName());
             paramJson.addProperty("name", courseSubject.getName());
             paramJson.addProperty("code", courseSubject.getCode());
             paramJson.addProperty("code", courseSubject.getCode());
@@ -227,6 +242,14 @@ public class DataUtil {
             long timestamp = System.currentTimeMillis();
             long timestamp = System.currentTimeMillis();
             //生成签名
             //生成签名
             String sign = ScheduleUtil.createSign(timestamp);
             String sign = ScheduleUtil.createSign(timestamp);
+
+            if(ids != null && ids.get(courseSubject.getId()) != null){
+                url  = ScheduleUtil.apiUrl + "courseclass/update";
+                paramJson.addProperty("id", ids.get(courseSubject.getId()));
+                ScheduleUtil.doPost(url, paramJson.toString(), sign, timestamp);
+                continue;
+            }
+
             String result = ScheduleUtil.doPost(url, paramJson.toString(), sign, timestamp);
             String result = ScheduleUtil.doPost(url, paramJson.toString(), sign, timestamp);
             if(result == null){
             if(result == null){
                 continue;
                 continue;
@@ -246,7 +269,7 @@ public class DataUtil {
     public Map<Long, String> insertSemester(Db db, String tableName, Map<Long, String> ids) throws Exception {
     public Map<Long, String> insertSemester(Db db, String tableName, Map<Long, String> ids) throws Exception {
         String sql = "select * from " + tableName + " where delete_mark = 0";
         String sql = "select * from " + tableName + " where delete_mark = 0";
         List<BaseSemester> list = db.query(sql, BaseSemester.class);
         List<BaseSemester> list = db.query(sql, BaseSemester.class);
-        String url  = ScheduleUtil.apiUrl + "semester/Create";
+
         Map<Long, String> idMap = new HashMap<>();
         Map<Long, String> idMap = new HashMap<>();
         JsonParser jsonParser = new JsonParser();
         JsonParser jsonParser = new JsonParser();
         SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy");
         SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy");
@@ -255,9 +278,7 @@ public class DataUtil {
         String autumn = "秋";
         String autumn = "秋";
 
 
         for (BaseSemester semester : list) {
         for (BaseSemester semester : list) {
-            if(ids != null && ids.get(semester.getId()) != null){
-                continue;
-            }
+            String url  = ScheduleUtil.apiUrl + "semester/Create";
             JsonObject paramJson = new JsonObject();
             JsonObject paramJson = new JsonObject();
             paramJson.addProperty("schoolYear", Integer.parseInt(sdfYear.format(semester.getStartDate())));
             paramJson.addProperty("schoolYear", Integer.parseInt(sdfYear.format(semester.getStartDate())));
             Integer period = null;
             Integer period = null;
@@ -282,6 +303,12 @@ public class DataUtil {
             }else{
             }else{
                 paramJson.addProperty("isCurrent", Boolean.FALSE);
                 paramJson.addProperty("isCurrent", Boolean.FALSE);
             }
             }
+            if(ids != null && ids.get(semester.getId()) != null){
+                url  = ScheduleUtil.apiUrl + "semester/update";
+                paramJson.addProperty("serialNo", ids.get(semester.getId()));
+                ScheduleUtil.doPost(url, paramJson.toString(), sign, timestamp);
+                continue;
+            }
 
 
             String result = ScheduleUtil.doPost(url, paramJson.toString(), sign, timestamp);
             String result = ScheduleUtil.doPost(url, paramJson.toString(), sign, timestamp);
 
 
@@ -335,13 +362,11 @@ public class DataUtil {
     public Map<Long, String> insertGrade(Db db, String tableName, String schoolDistrictId, Map<Long, String> ids) throws Exception {
     public Map<Long, String> insertGrade(Db db, String tableName, String schoolDistrictId, Map<Long, String> ids) throws Exception {
         String sql = "select * from " + tableName + " where delete_mark = 0 and status = 1";
         String sql = "select * from " + tableName + " where delete_mark = 0 and status = 1";
         List<BaseGrade> list = db.query(sql, BaseGrade.class);
         List<BaseGrade> list = db.query(sql, BaseGrade.class);
-        String url = ScheduleUtil.apiUrl + "eduyear/create";
+
         JsonParser jsonParser = new JsonParser();
         JsonParser jsonParser = new JsonParser();
         Map<Long, String> idMap = new HashMap<>();
         Map<Long, String> idMap = new HashMap<>();
         for (BaseGrade baseGrade : list) {
         for (BaseGrade baseGrade : list) {
-            if(ids !=null && ids.get(baseGrade.getId()) != null){
-                continue;
-            }
+            String url = ScheduleUtil.apiUrl + "eduyear/create";
             JsonObject paramJson = new JsonObject();
             JsonObject paramJson = new JsonObject();
             paramJson.addProperty("schoolDistrictId", schoolDistrictId);
             paramJson.addProperty("schoolDistrictId", schoolDistrictId);
             paramJson.addProperty("period", 4);
             paramJson.addProperty("period", 4);
@@ -354,6 +379,13 @@ public class DataUtil {
             //生成签名
             //生成签名
             String sign = ScheduleUtil.createSign(timestamp);
             String sign = ScheduleUtil.createSign(timestamp);
 
 
+            if(ids !=null && ids.get(baseGrade.getId()) != null){
+                paramJson.addProperty("serialNo", ids.get(baseGrade.getId()));
+                url = ScheduleUtil.apiUrl + "eduyear/update";
+                ScheduleUtil.doPost(url, paramJson.toString(), sign, timestamp);
+                continue;
+            }
+
             String result = ScheduleUtil.doPost(url, paramJson.toString(), sign, timestamp);
             String result = ScheduleUtil.doPost(url, paramJson.toString(), sign, timestamp);
 
 
             JsonObject resultJson = jsonParser.parse(result).getAsJsonObject();
             JsonObject resultJson = jsonParser.parse(result).getAsJsonObject();

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

@@ -9,10 +9,13 @@ import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.module.student.dto.BaseStudentInfoDetailDto;
 import com.xjrsoft.module.student.dto.BaseStudentInfoDetailDto;
 import com.xjrsoft.module.student.dto.BaseStudentInfoPageDto;
 import com.xjrsoft.module.student.dto.BaseStudentInfoPageDto;
 import com.xjrsoft.module.student.dto.UpdateBaseStudentInfoDto;
 import com.xjrsoft.module.student.dto.UpdateBaseStudentInfoDto;
+import com.xjrsoft.module.student.entity.BaseStudentUser;
 import com.xjrsoft.module.student.service.IBaseStudentSchoolRollService;
 import com.xjrsoft.module.student.service.IBaseStudentSchoolRollService;
+import com.xjrsoft.module.student.service.IStudentManagerService;
 import com.xjrsoft.module.student.vo.BaseStudentInfoDetailVo;
 import com.xjrsoft.module.student.vo.BaseStudentInfoDetailVo;
 import com.xjrsoft.module.student.vo.BaseStudentInfoPageDataVo;
 import com.xjrsoft.module.student.vo.BaseStudentInfoPageDataVo;
 import com.xjrsoft.module.student.vo.BaseStudentInfoPageVo;
 import com.xjrsoft.module.student.vo.BaseStudentInfoPageVo;
+import com.xjrsoft.module.student.vo.BaseStudentUserPageVo;
 import com.xjrsoft.module.student.vo.MobileClassStatisticsVo;
 import com.xjrsoft.module.student.vo.MobileClassStatisticsVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
@@ -38,7 +41,7 @@ import javax.validation.Valid;
 @AllArgsConstructor
 @AllArgsConstructor
 public class BaseStudentInfoController {
 public class BaseStudentInfoController {
 
 
-
+    private final IStudentManagerService studentManagerService;
     private final IBaseStudentSchoolRollService baseStudentSchoolRollService;
     private final IBaseStudentSchoolRollService baseStudentSchoolRollService;
 
 
     @GetMapping(value = "/mobile-page")
     @GetMapping(value = "/mobile-page")
@@ -46,6 +49,10 @@ public class BaseStudentInfoController {
     @SaCheckPermission("basestudentpost:detail")
     @SaCheckPermission("basestudentpost:detail")
     public RT<PageOutput<BaseStudentInfoPageVo>> mobilePage(@Valid BaseStudentInfoPageDto dto){
     public RT<PageOutput<BaseStudentInfoPageVo>> mobilePage(@Valid BaseStudentInfoPageDto dto){
         Page<BaseStudentInfoPageVo> mobilePage = baseStudentSchoolRollService.getMobilePage(new Page<>(dto.getLimit(), dto.getSize()), dto);
         Page<BaseStudentInfoPageVo> mobilePage = baseStudentSchoolRollService.getMobilePage(new Page<>(dto.getLimit(), dto.getSize()), dto);
+        for (BaseStudentInfoPageVo record : mobilePage.getRecords()) {
+            BaseStudentUser user = studentManagerService.getById(record.getId());
+            record.setAvatar(user.getAvatar());
+        }
         PageOutput<BaseStudentInfoPageVo> pageOutput = ConventPage.getPageOutput(mobilePage, BaseStudentInfoPageVo.class);
         PageOutput<BaseStudentInfoPageVo> pageOutput = ConventPage.getPageOutput(mobilePage, BaseStudentInfoPageVo.class);
         return RT.ok(pageOutput);
         return RT.ok(pageOutput);
     }
     }

+ 94 - 5
src/main/java/com/xjrsoft/module/student/controller/StudentManagerController.java

@@ -10,13 +10,17 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.enums.DeleteMark;
 import com.xjrsoft.common.enums.DeleteMark;
 import com.xjrsoft.common.enums.GenderDictionaryEnum;
 import com.xjrsoft.common.enums.GenderDictionaryEnum;
+import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.model.result.R;
 import com.xjrsoft.common.model.result.R;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.page.PageOutput;
+import com.xjrsoft.common.utils.FileZipUtil;
 import com.xjrsoft.common.utils.TreeUtil;
 import com.xjrsoft.common.utils.TreeUtil;
+import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.base.entity.BaseGrade;
 import com.xjrsoft.module.base.entity.BaseGrade;
 import com.xjrsoft.module.base.service.IBaseClassService;
 import com.xjrsoft.module.base.service.IBaseClassService;
@@ -28,6 +32,7 @@ import com.xjrsoft.module.room.service.IRoomBedService;
 import com.xjrsoft.module.student.dto.AddBaseStudentUserDto;
 import com.xjrsoft.module.student.dto.AddBaseStudentUserDto;
 import com.xjrsoft.module.student.dto.BaseStudentUserPageDto;
 import com.xjrsoft.module.student.dto.BaseStudentUserPageDto;
 import com.xjrsoft.module.student.dto.UpdateBaseStudentUserDto;
 import com.xjrsoft.module.student.dto.UpdateBaseStudentUserDto;
+import com.xjrsoft.module.student.entity.BaseStudent;
 import com.xjrsoft.module.student.entity.BaseStudentUser;
 import com.xjrsoft.module.student.entity.BaseStudentUser;
 import com.xjrsoft.module.student.service.IStudentManagerService;
 import com.xjrsoft.module.student.service.IStudentManagerService;
 import com.xjrsoft.module.student.vo.BaseStudentSchoolRollVo;
 import com.xjrsoft.module.student.vo.BaseStudentSchoolRollVo;
@@ -38,6 +43,7 @@ import com.xjrsoft.module.teacher.entity.XjrUser;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -49,14 +55,22 @@ import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
 
 
 import javax.validation.Valid;
 import javax.validation.Valid;
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.IOException;
+import java.io.InputStream;
 import java.text.ParseException;
 import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Base64;
+import java.util.Enumeration;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.HashSet;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.Set;
 import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
 
 
 @RestController
 @RestController
 @RequestMapping("/student" + "/studentmanager")
 @RequestMapping("/student" + "/studentmanager")
@@ -76,6 +90,10 @@ public class StudentManagerController {
     public R page(@Valid BaseStudentUserPageDto dto) {
     public R page(@Valid BaseStudentUserPageDto dto) {
 
 
         IPage<BaseStudentUserPageVo> page = studentManagerService.getStudentPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
         IPage<BaseStudentUserPageVo> page = studentManagerService.getStudentPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
+        for (BaseStudentUserPageVo record : page.getRecords()) {
+            BaseStudentUser user = studentManagerService.getById(record.getId());
+            record.setAvatar(user.getAvatar());
+        }
         PageOutput<BaseStudentUserPageVo> pageOutput = ConventPage.getPageOutput(page, BaseStudentUserPageVo.class);
         PageOutput<BaseStudentUserPageVo> pageOutput = ConventPage.getPageOutput(page, BaseStudentUserPageVo.class);
         return R.ok(pageOutput);
         return R.ok(pageOutput);
     }
     }
@@ -169,6 +187,7 @@ public class StudentManagerController {
         userVo.setDepartmentIds(allDeptIdStr);
         userVo.setDepartmentIds(allDeptIdStr);
 
 
         userVo.setGenderCn(GenderDictionaryEnum.getValue(userVo.getGender()));
         userVo.setGenderCn(GenderDictionaryEnum.getValue(userVo.getGender()));
+
         return R.ok(userVo);
         return R.ok(userVo);
     }
     }
 
 
@@ -176,18 +195,22 @@ public class StudentManagerController {
     @PostMapping
     @PostMapping
     @ApiOperation(value = "新增学生")
     @ApiOperation(value = "新增学生")
     @SaCheckPermission("studentmanager:add")
     @SaCheckPermission("studentmanager:add")
-    public R add(@Valid @RequestBody AddBaseStudentUserDto dto) {
+    public R add(@Valid @RequestBody AddBaseStudentUserDto dto){
         return R.ok(studentManagerService.add(dto));
         return R.ok(studentManagerService.add(dto));
     }
     }
 
 
+    @PostMapping("upload-image")
+    @ApiOperation(value = "上传学生学籍照片")
+    @SaCheckPermission("studentmanager:add")
+    public R uploadImage(@RequestParam("file") MultipartFile file, @Valid @RequestParam Long userId) throws IOException {
+        return R.ok(studentManagerService.uploadImage(userId, file));
+    }
+
     @PutMapping
     @PutMapping
     @ApiOperation(value = "修改学生")
     @ApiOperation(value = "修改学生")
     @SaCheckPermission("studentmanager:edit")
     @SaCheckPermission("studentmanager:edit")
-    public R update(@Valid @RequestBody UpdateBaseStudentUserDto dto) {
-
-
+    public R update(@Valid @RequestBody UpdateBaseStudentUserDto dto){
         return R.ok(studentManagerService.update(dto));
         return R.ok(studentManagerService.update(dto));
-
     }
     }
 
 
     @DeleteMapping
     @DeleteMapping
@@ -212,4 +235,70 @@ public class StudentManagerController {
 
 
         return RT.ok(studentManagerService.importStudentData(excelDataList));
         return RT.ok(studentManagerService.importStudentData(excelDataList));
     }
     }
+
+
+    @PostMapping(value = "/avatar-import")
+    @ApiOperation(value = "批量导入学生学学籍照")
+    @SaCheckPermission("stundentfaceprocess:batch-upload")
+    public RT<Boolean> batchUpload(@RequestParam("file") MultipartFile file) throws Exception {
+        List<BaseStudentUser> list = studentManagerService.list(
+                new MPJLambdaWrapper<BaseStudentUser>().distinct()
+                        .select(BaseStudentUser::getId)
+                        .select(BaseStudentUser.class, x -> VoToColumnUtil.fieldsToColumns(BaseStudentUser.class).contains(x.getProperty()))
+                        .leftJoin(BaseStudent.class, BaseStudent::getUserId, BaseStudentUser::getId)
+                        .eq(BaseStudent::getDeleteMark, DeleteMark.NODELETE.getCode())
+                        .eq(BaseStudentUser::getDeleteMark, DeleteMark.NODELETE.getCode())
+        );
+        Map<String, BaseStudentUser> studentMap = new HashMap<>();
+        for (BaseStudentUser baseStudentUser : list) {
+            studentMap.put(baseStudentUser.getCredentialNumber(), baseStudentUser);
+        }
+
+        ZipFile zipFile = FileZipUtil.convertToZipFile(file);
+        Enumeration<? extends ZipEntry> entries = zipFile.entries();
+
+
+        Map<String, String> map = new HashMap<String, String>() {
+            {
+                put("jpg", "data:image/jpg;base64,");
+                put("jpeg", "data:image/jpeg;base64,");
+                put("png", "data:image/png;base64,");
+            }
+        };
+        String[] imgSuffix = new String[]{"png", "jpg", "jpeg"};
+        while (entries.hasMoreElements()){
+            ZipEntry entry = entries.nextElement();
+            String filename = entry.getName();
+            InputStream inputStream = zipFile.getInputStream(entry); //读取文件内容
+            String[] split = filename.split("\\.");
+            String idNumber = split[0].substring(split[0].length() - 18);
+            String suffix = StringUtils.substringAfterLast(filename, StringPool.DOT);
+
+
+            BaseStudentUser studentUser = studentMap.get(idNumber);
+            if(studentUser == null){
+                continue;
+            }
+            if (!Arrays.asList(imgSuffix).contains(suffix)) {
+                throw new MyException("图片格式不正确!");
+            }
+            //将照片转换成base64
+            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+            byte[] buffer = new byte[4096];
+            int bytesRead;
+            while ((bytesRead = inputStream.read(buffer)) != -1) {
+                outputStream.write(buffer, 0, bytesRead);
+            }
+            byte[] imageBytes = outputStream.toByteArray();
+            String base64String = map.get(suffix) + Base64.getEncoder().encodeToString(imageBytes);
+            inputStream.close();
+            outputStream.close();
+
+            studentUser.setAvatar(base64String);
+
+            studentManagerService.updateById(studentUser);
+
+        }
+        return RT.ok(true);
+    }
 }
 }

+ 0 - 3
src/main/java/com/xjrsoft/module/student/entity/BaseStudentFamilyMember.java

@@ -178,7 +178,4 @@ public class BaseStudentFamilyMember implements Serializable {
     @ApiModelProperty("微信号")
     @ApiModelProperty("微信号")
     private String wechat;
     private String wechat;
 
 
-
-    @ApiModelProperty("微信openId")
-    private String openId;
 }
 }

+ 5 - 1
src/main/java/com/xjrsoft/module/student/service/IStudentManagerService.java

@@ -9,7 +9,9 @@ import com.xjrsoft.module.student.entity.BaseStudentUser;
 import com.xjrsoft.module.student.vo.BaseStudentClassVo;
 import com.xjrsoft.module.student.vo.BaseStudentClassVo;
 import com.xjrsoft.module.student.vo.BaseStudentUserPageVo;
 import com.xjrsoft.module.student.vo.BaseStudentUserPageVo;
 import com.xjrsoft.module.student.vo.PersonalPortraitPersonalInfoVo;
 import com.xjrsoft.module.student.vo.PersonalPortraitPersonalInfoVo;
+import org.springframework.web.multipart.MultipartFile;
 
 
+import java.io.IOException;
 import java.text.ParseException;
 import java.text.ParseException;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
@@ -22,7 +24,7 @@ public interface IStudentManagerService extends MPJBaseService<BaseStudentUser>
      * @param baseStudentUser
      * @param baseStudentUser
      * @return
      * @return
      */
      */
-    Boolean add(AddBaseStudentUserDto baseStudentUser);
+    Long add(AddBaseStudentUserDto baseStudentUser);
 
 
     /**
     /**
      * 更新
      * 更新
@@ -59,4 +61,6 @@ public interface IStudentManagerService extends MPJBaseService<BaseStudentUser>
 
 
 
 
     Page<BaseStudentUserPageVo> getStudentPage(Page<BaseStudentUserPageVo> page, BaseStudentUserPageDto dto);
     Page<BaseStudentUserPageVo> getStudentPage(Page<BaseStudentUserPageVo> page, BaseStudentUserPageDto dto);
+
+    Boolean uploadImage(Long userId, MultipartFile file) throws IOException;
 }
 }

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

@@ -65,10 +65,13 @@ import com.xjrsoft.module.system.mapper.DictionarydetailMapper;
 import com.xjrsoft.module.system.mapper.DictionaryitemMapper;
 import com.xjrsoft.module.system.mapper.DictionaryitemMapper;
 import com.xjrsoft.module.system.service.IAreaService;
 import com.xjrsoft.module.system.service.IAreaService;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
 
+import java.io.IOException;
 import java.text.ParseException;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.LocalDate;
@@ -109,10 +112,11 @@ public class StudentManagerServiceImpl extends MPJBaseServiceImpl<BaseStudentUse
 
 
     @Override
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
-    public Boolean add(AddBaseStudentUserDto dto) {
+    public Long add(AddBaseStudentUserDto dto){
 
 
         BaseStudentUser baseStudentUser = BeanUtil.toBean(dto, BaseStudentUser.class);
         BaseStudentUser baseStudentUser = BeanUtil.toBean(dto, BaseStudentUser.class);
         baseStudentUser.setCode(dto.getUserName());
         baseStudentUser.setCode(dto.getUserName());
+
         // 用户身份证后6位作为默认密码
         // 用户身份证后6位作为默认密码
         baseStudentUser.setPassword(BCrypt.hashpw(propertiesConfig.getDefaultPassword(), BCrypt.gensalt()));
         baseStudentUser.setPassword(BCrypt.hashpw(propertiesConfig.getDefaultPassword(), BCrypt.gensalt()));
         studentbaseManagerBaseStudentUserMapper.insert(baseStudentUser);
         studentbaseManagerBaseStudentUserMapper.insert(baseStudentUser);
@@ -172,15 +176,16 @@ public class StudentManagerServiceImpl extends MPJBaseServiceImpl<BaseStudentUse
             List<UserRoleRelation> userRoleRelationList = userRoleRelationMapper.selectList(Wrappers.lambdaQuery(UserRoleRelation.class));
             List<UserRoleRelation> userRoleRelationList = userRoleRelationMapper.selectList(Wrappers.lambdaQuery(UserRoleRelation.class));
             redisUtil.set(GlobalConstant.USER_ROLE_RELATION_CACHE_KEY, userRoleRelationList);
             redisUtil.set(GlobalConstant.USER_ROLE_RELATION_CACHE_KEY, userRoleRelationList);
         });
         });
-        return true;
+        return baseStudentUser.getId();
     }
     }
 
 
     @Override
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
-    public Boolean update(UpdateBaseStudentUserDto dto) {
+    public Boolean update(UpdateBaseStudentUserDto dto){
 
 
         BaseStudentUser baseStudentUser = BeanUtil.toBean(dto, BaseStudentUser.class);
         BaseStudentUser baseStudentUser = BeanUtil.toBean(dto, BaseStudentUser.class);
         baseStudentUser.setCode(dto.getUserName());
         baseStudentUser.setCode(dto.getUserName());
+
         studentbaseManagerBaseStudentUserMapper.updateById(baseStudentUser);
         studentbaseManagerBaseStudentUserMapper.updateById(baseStudentUser);
 
 
         //先删除再新增
         //先删除再新增
@@ -955,6 +960,28 @@ public class StudentManagerServiceImpl extends MPJBaseServiceImpl<BaseStudentUse
         return baseStudentMapper.getStudentPage(page, dto);
         return baseStudentMapper.getStudentPage(page, dto);
     }
     }
 
 
+    @Override
+    public Boolean uploadImage(Long userId, MultipartFile file) throws IOException {
+        BaseStudentUser studentUser = studentbaseManagerBaseStudentUserMapper.selectById(userId);
+        String[] imgSuffix = new String[]{"png", "jpg", "jpeg"};
+        String suffix = StringUtils.substringAfterLast(file.getOriginalFilename(), StringPool.DOT);
+        if (!Arrays.asList(imgSuffix).contains(suffix)) {
+            throw new MyException("图片格式不正确!");
+        }
+        String base64String = Base64.getEncoder().encodeToString(file.getBytes());
+
+        Map<String, String> map = new HashMap<String, String>() {
+            {
+                put("jpg", "data:image/jpg;base64,");
+                put("jpeg", "data:image/jpeg;base64,");
+                put("png", "data:image/png;base64,");
+            }
+        };
+        studentUser.setAvatar(map.get(suffix) + base64String);
+        studentbaseManagerBaseStudentUserMapper.updateById(studentUser);
+        return true;
+    }
+
     /**
     /**
      * 初始化字典信息
      * 初始化字典信息
      * 身份证类型、
      * 身份证类型、

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

@@ -151,4 +151,7 @@ public class BaseStudentSchoolRollVo {
     @ApiModelProperty("寝室号")
     @ApiModelProperty("寝室号")
     private String roomName;
     private String roomName;
 
 
+
+
+
 }
 }

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

@@ -35,4 +35,10 @@ public class BaseStudentUserPageVo {
 
 
     @ApiModelProperty("学生类别")
     @ApiModelProperty("学生类别")
     private String studentTypeCn;
     private String studentTypeCn;
+
+    @ApiModelProperty("头像照片")
+    private String avatar;
+
+    @ApiModelProperty("学习形式")
+    private String learnStatusCn;
 }
 }

+ 1 - 0
src/main/java/com/xjrsoft/module/student/vo/BaseStudentUserVo.java

@@ -128,4 +128,5 @@ public class BaseStudentUserVo {
 
 
     @ApiModelProperty("部门id")
     @ApiModelProperty("部门id")
     private String departmentIds;
     private String departmentIds;
+
 }
 }

+ 7 - 0
src/main/java/com/xjrsoft/module/system/controller/LoginController.java

@@ -88,6 +88,13 @@ public class LoginController {
         return R.ok(loginService.login(dto));
         return R.ok(loginService.login(dto));
     }
     }
 
 
+    @PostMapping("/findUserByCode")
+    @ApiOperation(value = "登录", notes = "code")
+    @XjrLog(value = "Code登录成功")
+    public R findUserByCode(@RequestBody @Valid LoginByCodeDto dto) throws Exception {
+        return R.ok(loginService.findUserByCode(dto));
+    }
+
     @PostMapping("/loginByCode")
     @PostMapping("/loginByCode")
     @ApiOperation(value = "登录", notes = "code")
     @ApiOperation(value = "登录", notes = "code")
     @XjrLog(value = "Code登录成功")
     @XjrLog(value = "Code登录成功")

+ 2 - 0
src/main/java/com/xjrsoft/module/system/service/ILoginService.java

@@ -35,4 +35,6 @@ public interface ILoginService {
      * @throws Exception
      * @throws Exception
      */
      */
     Boolean loginQRCode(LoginQRCodeDto dto) throws Exception;
     Boolean loginQRCode(LoginQRCodeDto dto) throws Exception;
+
+    LoginVo findUserByCode(LoginByCodeDto dto) throws Exception;
 }
 }

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

@@ -16,11 +16,11 @@ import com.xjrsoft.common.constant.GlobalConstant;
 import com.xjrsoft.common.enums.EnabledMark;
 import com.xjrsoft.common.enums.EnabledMark;
 import com.xjrsoft.common.enums.RoleEnum;
 import com.xjrsoft.common.enums.RoleEnum;
 import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.exception.MyException;
-import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.utils.FixedArithmeticCaptcha;
 import com.xjrsoft.common.utils.FixedArithmeticCaptcha;
 import com.xjrsoft.common.utils.RSAUtil;
 import com.xjrsoft.common.utils.RSAUtil;
 import com.xjrsoft.common.utils.RedisUtil;
 import com.xjrsoft.common.utils.RedisUtil;
 import com.xjrsoft.common.utils.WeChatUtil;
 import com.xjrsoft.common.utils.WeChatUtil;
+import com.xjrsoft.config.CommonPropertiesConfig;
 import com.xjrsoft.config.LicenseConfig;
 import com.xjrsoft.config.LicenseConfig;
 import com.xjrsoft.module.organization.entity.Department;
 import com.xjrsoft.module.organization.entity.Department;
 import com.xjrsoft.module.organization.entity.Post;
 import com.xjrsoft.module.organization.entity.Post;
@@ -52,6 +52,7 @@ import org.springframework.stereotype.Service;
 
 
 import java.util.List;
 import java.util.List;
 import java.util.UUID;
 import java.util.UUID;
+import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**
@@ -82,6 +83,8 @@ public class LoginServiceImpl implements ILoginService {
 
 
     private final IFileService fileService;
     private final IFileService fileService;
 
 
+    private final CommonPropertiesConfig propertiesConfig;
+
     @Override
     @Override
     public LoginVo login(LoginDto dto) throws Exception {
     public LoginVo login(LoginDto dto) throws Exception {
         if (licenseConfig.getEnabled()) {
         if (licenseConfig.getEnabled()) {
@@ -227,6 +230,83 @@ public class LoginServiceImpl implements ILoginService {
         return Boolean.TRUE;
         return Boolean.TRUE;
     }
     }
 
 
+    @Override
+    public LoginVo findUserByCode(LoginByCodeDto dto) throws Exception {
+        WeChatUserInfo weChatUserInfo;
+        if (dto.getType() == 0) {
+            weChatUserInfo = weChatUtil.getMpOpenid(dto.getCode());
+        }else{
+            weChatUserInfo = weChatUtil.getOpenid(dto.getCode());
+        }
+        LoginByCodeVo result = new LoginByCodeVo(){{
+            setOpenId(weChatUserInfo.getOpenid());
+            setUnionId(weChatUserInfo.getUnionid());
+        }};
+        if (weChatUserInfo == null) throw new MyException("code无效");
+
+        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(User::getOpenId, weChatUserInfo.getOpenid());
+
+        User loginUser = userService.getOne(queryWrapper);
+        if (loginUser == null) {//如果未找到用户,需要创建一个游客账号
+            User user = new User();
+            user.setUnionId(weChatUserInfo.getOpenid());
+            user.setOpenId(weChatUserInfo.getOpenid());
+            user.setName("游客");
+            user.setUserName(getUserName());
+            user.setCode(getUserName());
+            //密码加密加盐存储到数据库
+            user.setPassword(BCrypt.hashpw(propertiesConfig.getDefaultPassword(), BCrypt.gensalt()));
+            userService.save(user);
+            //给用户增加游客角色
+            UserRoleRelation userRoleRelation = new UserRoleRelation();
+            userRoleRelation.setUserId(user.getId());
+            userRoleRelation.setRoleId(5L);
+            userRoleRelationMapper.insert(userRoleRelation);
+
+            //给用户增加部门
+            UserDeptRelation userDeptRelation = new UserDeptRelation();
+            userDeptRelation.setUserId(user.getId());
+            userDeptRelation.setDeptId(1684107782861680000L);
+            userDeptRelationService.save(userDeptRelation);
+
+            CompletableFuture.runAsync(() -> {
+                List<User> list = userService.list();
+                redisUtil.set(GlobalConstant.USER_CACHE_KEY, list);
+
+                List<UserDeptRelation> deptRelationList = userDeptRelationService.list(Wrappers.lambdaQuery(UserDeptRelation.class));
+                redisUtil.set(GlobalConstant.USER_DEPT_RELATION_CACHE_KEY, deptRelationList);
+
+                List<UserRoleRelation> roleRelationList = userRoleRelationMapper.selectList(Wrappers.lambdaQuery(UserRoleRelation.class));
+                redisUtil.set(GlobalConstant.USER_ROLE_RELATION_CACHE_KEY, roleRelationList);
+            });
+            loginUser = user;
+        }
+        LoginVo loginVo = getLoginInfo(loginUser, "WX-MP");
+        result.setToken(loginVo.getToken());
+        result.setUserType(loginVo.getUserType());
+
+        return result;
+    }
+
+    private String getUserName(){
+        StringBuilder sb = new StringBuilder();
+        String temp = "0123456789abcdefghjkmnpqrstuvwxyz";
+
+        for(int i=0; i < 6; i++){
+            int intVal = (int)(Math.random() * temp.length());
+            sb.append(temp.charAt(intVal));
+        }
+        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(User::getUserName,sb.toString());
+        long count = userService.count(queryWrapper);
+        if(count > 0){
+            return getUserName();
+        }
+
+        return sb.toString();
+    }
+
     private LoginVo getLoginInfo(User loginUser, String loginType) throws Exception {
     private LoginVo getLoginInfo(User loginUser, String loginType) throws Exception {
         LoginVo result = new LoginVo();
         LoginVo result = new LoginVo();
         if (loginUser.getEnabledMark() == EnabledMark.DISABLED.getCode()) {
         if (loginUser.getEnabledMark() == EnabledMark.DISABLED.getCode()) {

+ 13 - 2
src/main/java/com/xjrsoft/module/teacher/controller/AttendanceRecordController.java

@@ -13,7 +13,11 @@ import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.organization.entity.Department;
 import com.xjrsoft.module.organization.entity.Department;
 import com.xjrsoft.module.organization.entity.UserDeptRelation;
 import com.xjrsoft.module.organization.entity.UserDeptRelation;
-import com.xjrsoft.module.teacher.dto.*;
+import com.xjrsoft.module.teacher.dto.AddAttendanceRecordDto;
+import com.xjrsoft.module.teacher.dto.AttendanceRecordPageDto;
+import com.xjrsoft.module.teacher.dto.ClockInDto;
+import com.xjrsoft.module.teacher.dto.GetCheckInDayDto;
+import com.xjrsoft.module.teacher.dto.UpdateAttendanceRecordDto;
 import com.xjrsoft.module.teacher.entity.AttendanceRecord;
 import com.xjrsoft.module.teacher.entity.AttendanceRecord;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.teacher.service.IAttendanceRecordService;
 import com.xjrsoft.module.teacher.service.IAttendanceRecordService;
@@ -24,7 +28,14 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import org.springframework.http.ResponseEntity;
 import org.springframework.http.ResponseEntity;
-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 javax.validation.Valid;
 import java.io.ByteArrayOutputStream;
 import java.io.ByteArrayOutputStream;

+ 100 - 0
src/main/java/com/xjrsoft/module/teacher/controller/TeacherAwardItemController.java

@@ -0,0 +1,100 @@
+package com.xjrsoft.module.teacher.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.xjrsoft.common.model.result.RT;
+import com.xjrsoft.common.utils.TreeUtil;
+import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.teacher.dto.AddTeacherAwardItemDto;
+import com.xjrsoft.module.teacher.dto.TeacherAwardItemPageDto;
+import com.xjrsoft.module.teacher.dto.UpdateTeacherAwardItemDto;
+import com.xjrsoft.module.teacher.entity.TeacherAwardItem;
+import com.xjrsoft.module.teacher.service.ITeacherAwardItemService;
+import com.xjrsoft.module.teacher.vo.TeacherAwardItemPageVo;
+import com.xjrsoft.module.teacher.vo.TeacherAwardItemVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+* @title: 教师奖项
+* @Author dzx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@RestController
+@RequestMapping("/teacher" + "/teacherAwardItem")
+@Api(value = "/teacher"  + "/teacherAwardItem",tags = "教师奖项代码")
+@AllArgsConstructor
+public class TeacherAwardItemController {
+
+
+    private final ITeacherAwardItemService teacherAwardItemService;
+
+    @GetMapping(value = "/tree-list")
+    @ApiOperation(value="教师奖项列表(树)")
+    @SaCheckPermission("teacherawarditem:detail")
+    public RT<List<TeacherAwardItemVo>> page(@Valid TeacherAwardItemPageDto dto){
+
+        LambdaQueryWrapper<TeacherAwardItem> queryWrapper = new LambdaQueryWrapper<>();
+
+        queryWrapper
+                    .orderByDesc(TeacherAwardItem::getId)
+                .select(TeacherAwardItem.class,x -> VoToColumnUtil.fieldsToColumns(TeacherAwardItemPageVo.class).contains(x.getProperty()));
+        List<TeacherAwardItem> list = teacherAwardItemService.list(queryWrapper);
+        List<TeacherAwardItemVo> itemVos = BeanUtil.copyToList(list, TeacherAwardItemVo.class);
+        List<TeacherAwardItemVo> build = TreeUtil.build(itemVos);
+        return RT.ok(build);
+    }
+
+    @GetMapping(value = "/info")
+    @ApiOperation(value="根据id查询教师奖项信息")
+    @SaCheckPermission("teacherawarditem:detail")
+    public RT<TeacherAwardItemVo> info(@RequestParam Long id){
+        TeacherAwardItem teacherAwardItem = teacherAwardItemService.getById(id);
+        if (teacherAwardItem == null) {
+           return RT.error("找不到此数据!");
+        }
+        return RT.ok(BeanUtil.toBean(teacherAwardItem, TeacherAwardItemVo.class));
+    }
+
+
+    @PostMapping
+    @ApiOperation(value = "新增教师奖项")
+    @SaCheckPermission("teacherawarditem:add")
+    public RT<Boolean> add(@Valid @RequestBody AddTeacherAwardItemDto dto){
+        TeacherAwardItem teacherAwardItem = BeanUtil.toBean(dto, TeacherAwardItem.class);
+        boolean isSuccess = teacherAwardItemService.save(teacherAwardItem);
+        return RT.ok(isSuccess);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "修改教师奖项")
+    @SaCheckPermission("teacherawarditem:edit")
+    public RT<Boolean> update(@Valid @RequestBody UpdateTeacherAwardItemDto dto){
+
+        TeacherAwardItem teacherAwardItem = BeanUtil.toBean(dto, TeacherAwardItem.class);
+        return RT.ok(teacherAwardItemService.updateById(teacherAwardItem));
+
+    }
+
+    @DeleteMapping
+    @ApiOperation(value = "删除教师奖项")
+    @SaCheckPermission("teacherawarditem:delete")
+    public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
+        return RT.ok(teacherAwardItemService.removeBatchByIds(ids));
+    }
+
+}

+ 0 - 1
src/main/java/com/xjrsoft/module/teacher/controller/TeacherbaseManagerController.java

@@ -14,7 +14,6 @@ import com.xjrsoft.common.model.result.R;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.common.utils.VoToColumnUtil;
-import com.xjrsoft.module.attendance.entity.StudentAttendanceRecord;
 import com.xjrsoft.module.organization.entity.UserDeptRelation;
 import com.xjrsoft.module.organization.entity.UserDeptRelation;
 import com.xjrsoft.module.organization.service.IUserDeptRelationService;
 import com.xjrsoft.module.organization.service.IUserDeptRelationService;
 import com.xjrsoft.module.system.entity.DictionaryDetail;
 import com.xjrsoft.module.system.entity.DictionaryDetail;

+ 53 - 0
src/main/java/com/xjrsoft/module/teacher/dto/AddTeacherAwardItemDto.java

@@ -0,0 +1,53 @@
+package com.xjrsoft.module.teacher.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+
+
+/**
+* @title: 教师奖项
+* @Author dzx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@Data
+public class AddTeacherAwardItemDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer sortCode;
+    /**
+    * 奖项名称
+    */
+    @ApiModelProperty("奖项名称")
+    private String name;
+    /**
+    * 是否论文(1:是 0:否)
+    */
+    @ApiModelProperty("是否论文(1:是 0:否)")
+    private Integer isThesis;
+    /**
+    * 是否频分标准(1:是 0:否)
+    */
+    @ApiModelProperty("是否频分标准(1:是 0:否)")
+    private Integer isStandard;
+    /**
+    * 分数
+    */
+    @ApiModelProperty("分数")
+    private BigDecimal score;
+    /**
+    * 父级id
+    */
+    @ApiModelProperty("父级id")
+    private Long parentId;
+
+}

+ 19 - 0
src/main/java/com/xjrsoft/module/teacher/dto/TeacherAwardItemPageDto.java

@@ -0,0 +1,19 @@
+package com.xjrsoft.module.teacher.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+
+/**
+* @title: 教师奖项分页查询入参
+* @Author dzx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class TeacherAwardItemPageDto extends PageInput {
+
+
+}

+ 24 - 0
src/main/java/com/xjrsoft/module/teacher/dto/UpdateTeacherAwardItemDto.java

@@ -0,0 +1,24 @@
+package com.xjrsoft.module.teacher.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+
+/**
+* @title: 教师奖项
+* @Author dzx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@Data
+public class UpdateTeacherAwardItemDto extends AddTeacherAwardItemDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long id;
+}

+ 105 - 0
src/main/java/com/xjrsoft/module/teacher/entity/TeacherAwardItem.java

@@ -0,0 +1,105 @@
+package com.xjrsoft.module.teacher.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.math.BigDecimal;
+import java.util.Date;
+
+
+/**
+* @title: 教师奖项
+* @Author dzx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@Data
+@TableName("teacher_award_item")
+@ApiModel(value = "teacher_award_item", description = "教师奖项")
+public class TeacherAwardItem implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableId
+    private Long id;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUserId;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createDate;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.UPDATE)
+    private Long modifyUserId;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date modifyDate;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer deleteMark;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer enabledMark;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer sortCode;
+    /**
+    * 奖项名称
+    */
+    @ApiModelProperty("奖项名称")
+    private String name;
+    /**
+    * 是否论文(1:是 0:否)
+    */
+    @ApiModelProperty("是否论文(1:是 0:否)")
+    private Integer isThesis;
+    /**
+    * 是否频分标准(1:是 0:否)
+    */
+    @ApiModelProperty("是否频分标准(1:是 0:否)")
+    private Integer isStandard;
+    /**
+    * 分数
+    */
+    @ApiModelProperty("分数")
+    private BigDecimal score;
+    /**
+    * 父级id
+    */
+    @ApiModelProperty("父级id")
+    private Long parentId;
+
+
+}

+ 16 - 0
src/main/java/com/xjrsoft/module/teacher/mapper/TeacherAwardItemMapper.java

@@ -0,0 +1,16 @@
+package com.xjrsoft.module.teacher.mapper;
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.teacher.entity.TeacherAwardItem;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @title: 教师奖项
+* @Author dzx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@Mapper
+public interface TeacherAwardItemMapper extends MPJBaseMapper<TeacherAwardItem> {
+
+}

+ 0 - 1
src/main/java/com/xjrsoft/module/teacher/mapper/WfTeacherleaveMapper.java

@@ -7,7 +7,6 @@ import org.apache.ibatis.annotations.Param;
 
 
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.util.List;
 import java.util.List;
-import java.util.Map;
 
 
 /**
 /**
 * @title: 教职工请假流程
 * @title: 教职工请假流程

+ 0 - 3
src/main/java/com/xjrsoft/module/teacher/service/IBaseTeacherService.java

@@ -2,9 +2,6 @@ package com.xjrsoft.module.teacher.service;
 
 
 import com.github.yulichang.base.MPJBaseService;
 import com.github.yulichang.base.MPJBaseService;
 import com.xjrsoft.module.teacher.entity.BaseTeacher;
 import com.xjrsoft.module.teacher.entity.BaseTeacher;
-import com.xjrsoft.module.teacher.entity.XjrUser;
-
-import java.util.List;
 
 
 /**
 /**
 * @title: service
 * @title: service

+ 14 - 0
src/main/java/com/xjrsoft/module/teacher/service/ITeacherAwardItemService.java

@@ -0,0 +1,14 @@
+package com.xjrsoft.module.teacher.service;
+
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.teacher.entity.TeacherAwardItem;
+
+/**
+* @title: 教师奖项
+* @Author dzx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+
+public interface ITeacherAwardItemService extends MPJBaseService<TeacherAwardItem> {
+}

+ 0 - 1
src/main/java/com/xjrsoft/module/teacher/service/IWfTeacherleaveService.java

@@ -1,7 +1,6 @@
 package com.xjrsoft.module.teacher.service;
 package com.xjrsoft.module.teacher.service;
 
 
 import com.github.yulichang.base.MPJBaseService;
 import com.github.yulichang.base.MPJBaseService;
-import com.xjrsoft.module.personnel.entity.ReservationSchool;
 import com.xjrsoft.module.teacher.entity.WfTeacherleave;
 import com.xjrsoft.module.teacher.entity.WfTeacherleave;
 
 
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;

+ 19 - 0
src/main/java/com/xjrsoft/module/teacher/service/impl/TeacherAwardItemServiceImpl.java

@@ -0,0 +1,19 @@
+package com.xjrsoft.module.teacher.service.impl;
+
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.module.teacher.entity.TeacherAwardItem;
+import com.xjrsoft.module.teacher.mapper.TeacherAwardItemMapper;
+import com.xjrsoft.module.teacher.service.ITeacherAwardItemService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+* @title: 教师奖项
+* @Author dzx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@Service
+@AllArgsConstructor
+public class TeacherAwardItemServiceImpl extends MPJBaseServiceImpl<TeacherAwardItemMapper, TeacherAwardItem> implements ITeacherAwardItemService {
+}

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

@@ -46,7 +46,6 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Arrays;
 import java.util.List;
 import java.util.List;
 import java.util.Objects;
 import java.util.Objects;
-import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**

+ 84 - 0
src/main/java/com/xjrsoft/module/teacher/vo/TeacherAwardItemPageVo.java

@@ -0,0 +1,84 @@
+package com.xjrsoft.module.teacher.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+* @title: 教师奖项分页列表出参
+* @Author dzx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@Data
+public class TeacherAwardItemPageVo {
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private String id;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long createUserId;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Date createDate;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long modifyUserId;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Date modifyDate;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer deleteMark;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer enabledMark;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer sortCode;
+    /**
+    * 奖项名称
+    */
+    @ApiModelProperty("奖项名称")
+    private String name;
+    /**
+    * 是否论文(1:是 0:否)
+    */
+    @ApiModelProperty("是否论文(1:是 0:否)")
+    private Integer isThesis;
+    /**
+    * 是否频分标准(1:是 0:否)
+    */
+    @ApiModelProperty("是否频分标准(1:是 0:否)")
+    private Integer isStandard;
+    /**
+    * 分数
+    */
+    @ApiModelProperty("分数")
+    private BigDecimal score;
+    /**
+    * 父级id
+    */
+    @ApiModelProperty("父级id")
+    private Long parentId;
+
+}

+ 58 - 0
src/main/java/com/xjrsoft/module/teacher/vo/TeacherAwardItemVo.java

@@ -0,0 +1,58 @@
+package com.xjrsoft.module.teacher.vo;
+
+import com.xjrsoft.common.model.tree.ITreeNode;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+* @title: 教师奖项表单出参
+* @Author dzx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@Data
+public class TeacherAwardItemVo implements ITreeNode<TeacherAwardItemVo,Long>, Serializable {
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long id;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer sortCode;
+    /**
+    * 奖项名称
+    */
+    @ApiModelProperty("奖项名称")
+    private String name;
+    /**
+    * 是否论文(1:是 0:否)
+    */
+    @ApiModelProperty("是否论文(1:是 0:否)")
+    private Integer isThesis;
+    /**
+    * 是否频分标准(1:是 0:否)
+    */
+    @ApiModelProperty("是否频分标准(1:是 0:否)")
+    private Integer isStandard;
+    /**
+    * 分数
+    */
+    @ApiModelProperty("分数")
+    private BigDecimal score;
+    /**
+    * 父级id
+    */
+    @ApiModelProperty("父级id")
+    private Long parentId;
+
+
+    private List<TeacherAwardItemVo> children;
+}

+ 64 - 0
src/main/java/com/xjrsoft/module/textbook/controller/TextbookController.java

@@ -5,15 +5,25 @@ import cn.hutool.core.bean.BeanUtil;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.support.ExcelTypeEnum;
 import com.alibaba.excel.support.ExcelTypeEnum;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.model.result.R;
 import com.xjrsoft.common.model.result.R;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.page.PageOutput;
+import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.asset.entity.WfAssetManage;
+import com.xjrsoft.module.asset.vo.WfAssetManageVo;
+import com.xjrsoft.module.base.entity.BaseCourseSubject;
 import com.xjrsoft.module.base.entity.BaseSemester;
 import com.xjrsoft.module.base.entity.BaseSemester;
 import com.xjrsoft.module.base.service.IBaseSemesterService;
 import com.xjrsoft.module.base.service.IBaseSemesterService;
+import com.xjrsoft.module.student.entity.BaseClassMajorSet;
+import com.xjrsoft.module.system.entity.DictionaryDetail;
 import com.xjrsoft.module.textbook.dto.*;
 import com.xjrsoft.module.textbook.dto.*;
 import com.xjrsoft.module.textbook.entity.Textbook;
 import com.xjrsoft.module.textbook.entity.Textbook;
+import com.xjrsoft.module.textbook.entity.TextbookClassRelation;
+import com.xjrsoft.module.textbook.entity.WfTextbookSubscription;
 import com.xjrsoft.module.textbook.service.ITextbookService;
 import com.xjrsoft.module.textbook.service.ITextbookService;
 import com.xjrsoft.module.textbook.vo.*;
 import com.xjrsoft.module.textbook.vo.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
@@ -28,6 +38,7 @@ import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -55,6 +66,59 @@ public class TextbookController {
         return RT.ok(pageOutput);
         return RT.ok(pageOutput);
     }
     }
 
 
+    @GetMapping(value = "/page-subscription")
+    @ApiOperation(value="教材管理列表(分页,教材征订用)")
+    @SaCheckPermission("textbook:detail")
+    public RT<PageOutput<TextbookSubscriptionListVo>> pageSubscription(@Valid TextbookSubscriptionListDto dto){
+        List<String> classIdList = new ArrayList<>();
+        if(dto.getClassIds() != null && !dto.getClassIds().equals("")){
+            String[] classIdArr =  dto.getClassIds().split(",");
+            classIdList = Arrays.asList(classIdArr);
+        }
+
+        MPJLambdaWrapper<Textbook> textbookMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        textbookMPJLambdaWrapper
+                .select(Textbook::getId)
+                .selectAs(BaseCourseSubject::getName, TextbookSubscriptionListVo::getCourseSubjectIdCn)
+                .selectSum(BaseClassMajorSet::getTotalStudent, TextbookSubscriptionListVo::getNumber)
+                .select(Textbook.class, x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionListVo.class).contains(x.getProperty()))
+                .leftJoin(TextbookClassRelation.class, TextbookClassRelation::getTextbookId, Textbook::getId)
+                .leftJoin(BaseClassMajorSet.class, BaseClassMajorSet::getClassId, TextbookClassRelation::getClassId)
+                .leftJoin(BaseCourseSubject.class, BaseCourseSubject::getId, Textbook::getCourseSubjectId)
+                .in(!classIdList.isEmpty(),TextbookClassRelation::getClassId, classIdList)
+                .groupBy(Textbook::getId)
+        ;
+        IPage<TextbookSubscriptionListVo> page = textbookService.selectJoinListPage(ConventPage.getPage(dto),TextbookSubscriptionListVo.class,textbookMPJLambdaWrapper);
+        PageOutput<TextbookSubscriptionListVo> pageOutput = ConventPage.getPageOutput(page, TextbookSubscriptionListVo.class);
+        return RT.ok(pageOutput);
+    }
+
+    @GetMapping(value = "/List-subscription")
+    @ApiOperation(value="教材管理列表(不分页,教材征订用)")
+    @SaCheckPermission("textbook:detail")
+    public RT<List<TextbookSubscriptionListVo>> ListSubscription(@Valid TextbookSubscriptionListDto dto){
+        List<String> classIdList = new ArrayList<>();
+        if(dto.getClassIds() != null && !dto.getClassIds().equals("")){
+            String[] classIdArr =  dto.getClassIds().split(",");
+            classIdList = Arrays.asList(classIdArr);
+        }
+
+        MPJLambdaWrapper<Textbook> textbookMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        textbookMPJLambdaWrapper
+                .select(Textbook::getId)
+                .selectAs(BaseCourseSubject::getName, TextbookSubscriptionListVo::getCourseSubjectIdCn)
+                .selectSum(BaseClassMajorSet::getTotalStudent, TextbookSubscriptionListVo::getNumber)
+                .select(Textbook.class, x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionListVo.class).contains(x.getProperty()))
+                .leftJoin(TextbookClassRelation.class, TextbookClassRelation::getTextbookId, Textbook::getId)
+                .leftJoin(BaseClassMajorSet.class, BaseClassMajorSet::getClassId, TextbookClassRelation::getClassId)
+                .leftJoin(BaseCourseSubject.class, BaseCourseSubject::getId, Textbook::getCourseSubjectId)
+                .in(!classIdList.isEmpty(),TextbookClassRelation::getClassId, classIdList)
+                .groupBy(Textbook::getId)
+                ;
+        List<TextbookSubscriptionListVo> list = textbookService.selectJoinList(TextbookSubscriptionListVo.class,textbookMPJLambdaWrapper);
+        return RT.ok(list);
+    }
+
     @GetMapping(value = "/info-detail")
     @GetMapping(value = "/info-detail")
     @ApiOperation(value="根据id查询教材管理信息")
     @ApiOperation(value="根据id查询教材管理信息")
     @SaCheckPermission("textbook:detail")
     @SaCheckPermission("textbook:detail")

+ 188 - 0
src/main/java/com/xjrsoft/module/textbook/controller/WfTextbookSubscriptionController.java

@@ -0,0 +1,188 @@
+package com.xjrsoft.module.textbook.controller;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+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.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.xjrsoft.common.constant.GlobalConstant;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.xjrsoft.common.enums.DeleteMark;
+import com.xjrsoft.common.page.ConventPage;
+import com.xjrsoft.common.page.PageOutput;
+import com.xjrsoft.common.model.result.RT;
+import com.xjrsoft.common.utils.TreeUtil;
+import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.base.entity.BaseClass;
+import com.xjrsoft.module.base.entity.BaseGrade;
+import com.xjrsoft.module.base.entity.BaseSemester;
+import com.xjrsoft.module.base.mapper.BaseClassMapper;
+import com.xjrsoft.module.oa.vo.NewsGradeClassTreeVo;
+import com.xjrsoft.module.student.vo.BaseClassQfCountVo;
+import com.xjrsoft.module.student.vo.BaseClassTreeVo;
+import com.xjrsoft.module.textbook.dto.AddWfTextbookSubscriptionDto;
+import com.xjrsoft.module.textbook.dto.UpdateWfTextbookSubscriptionDto;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.support.ExcelTypeEnum;
+import com.xjrsoft.module.textbook.vo.GradeClassListVo;
+import com.xjrsoft.module.textbook.vo.GradeClassTreeVo;
+import org.springframework.http.ResponseEntity;
+import java.io.ByteArrayOutputStream;
+import java.util.ArrayList;
+
+import com.xjrsoft.module.textbook.dto.WfTextbookSubscriptionPageDto;
+import com.xjrsoft.module.textbook.entity.WfTextbookSubscription;
+import com.xjrsoft.module.textbook.service.IWfTextbookSubscriptionService;
+import com.xjrsoft.module.textbook.vo.WfTextbookSubscriptionPageVo;
+
+import com.xjrsoft.module.textbook.vo.WfTextbookSubscriptionVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+* @title: 教材教辅征订
+* @Author szs
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@RestController
+@RequestMapping("/textbook" + "/wfTextbookSubscription")
+@Api(value = "/textbook"  + "/wfTextbookSubscription",tags = "教材教辅征订代码")
+@AllArgsConstructor
+public class WfTextbookSubscriptionController {
+
+
+    private final IWfTextbookSubscriptionService wfTextbookSubscriptionService;
+
+    private final BaseClassMapper baseClassMapper;
+
+    @GetMapping(value = "/tree")
+    @ApiOperation(value = "学生年级班级树")
+    @SaCheckPermission("studentmanager:detail")
+    public RT<List<GradeClassTreeVo>> tree() {
+        List<GradeClassTreeVo> voList = new ArrayList<>();
+
+        voList.add(new GradeClassTreeVo() {{
+            setId("666666");
+            setName("班级");
+        }});
+
+        //获取班级List(包含年级信息)
+        MPJLambdaWrapper<BaseClass> baseClassMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        baseClassMPJLambdaWrapper
+                .selectAs(BaseClass::getId, GradeClassListVo::getClassId)
+                .selectAs(BaseClass::getName, GradeClassListVo::getClassName)
+                .selectAs(BaseClass::getGradeId, GradeClassListVo::getGradeId)
+                .selectAs(BaseGrade::getName, GradeClassListVo::getGradeName)
+                .leftJoin(BaseGrade.class, BaseGrade::getId, BaseClass::getGradeId)
+                .eq(BaseClass::getDeleteMark, 0)
+                .eq(BaseClass::getIsGraduate, 1)
+        ;
+        List<GradeClassListVo> gradeClassTreeVoList = baseClassMapper.selectJoinList(GradeClassListVo.class, baseClassMPJLambdaWrapper);
+
+        //年级Map
+        Map<String, GradeClassTreeVo> gradeMap = new HashMap<>();
+        for (GradeClassListVo gradeClassListVo : gradeClassTreeVoList){
+            if(gradeClassListVo.getGradeId() != null && gradeMap.get(gradeClassListVo.getGradeId()) == null){
+                gradeMap.put(gradeClassListVo.getGradeId(), new GradeClassTreeVo(){{
+                    setId(gradeClassListVo.getGradeId());
+                    setName(gradeClassListVo.getGradeName());
+                    setParentId("666666");
+                }});
+            }
+            voList.add(new GradeClassTreeVo() {{
+                setId(gradeClassListVo.getClassId());
+                setName(gradeClassListVo.getClassName());
+                setParentId(gradeClassListVo.getGradeId());
+            }});
+        }
+
+        List<GradeClassTreeVo> gradeList = new ArrayList<>(gradeMap.values());
+        voList.addAll(gradeList);
+
+        List<GradeClassTreeVo> treeVoList = TreeUtil.build(voList);
+
+        return RT.ok(treeVoList);
+    }
+
+    @GetMapping(value = "/page")
+    @ApiOperation(value="教材教辅征订列表(分页)")
+    @SaCheckPermission("wftextbooksubscription:detail")
+    public RT<PageOutput<WfTextbookSubscriptionPageVo>> page(@Valid WfTextbookSubscriptionPageDto dto){
+
+        MPJLambdaWrapper<WfTextbookSubscription> queryWrapper = new MPJLambdaWrapper<>();
+        queryWrapper
+                .select(WfTextbookSubscription::getId)
+                .selectAs(BaseSemester::getName, WfTextbookSubscriptionPageVo::getBaseSemesterIdCn)
+                .select("(select sum(student_subscription_number) + sum(teacher_subscription_number) from wf_textbook_subscription_item a where a.wf_textbook_subscription_id = t.id) as sum")
+                .select(WfTextbookSubscription.class,x -> VoToColumnUtil.fieldsToColumns(WfTextbookSubscriptionPageVo.class).contains(x.getProperty()))
+                .leftJoin(BaseSemester.class, BaseSemester::getId, WfTextbookSubscription::getBaseSemesterId)
+                .orderByDesc(WfTextbookSubscription::getCreateDate)
+        ;
+        IPage<WfTextbookSubscription> page = wfTextbookSubscriptionService.selectJoinListPage(ConventPage.getPage(dto),WfTextbookSubscription.class, queryWrapper);
+        PageOutput<WfTextbookSubscriptionPageVo> pageOutput = ConventPage.getPageOutput(page, WfTextbookSubscriptionPageVo.class);
+        return RT.ok(pageOutput);
+    }
+
+    @GetMapping(value = "/info")
+    @ApiOperation(value="根据id查询教材教辅征订信息")
+    @SaCheckPermission("wftextbooksubscription:detail")
+    public RT<WfTextbookSubscriptionVo> info(@RequestParam Long id){
+        WfTextbookSubscription wfTextbookSubscription = wfTextbookSubscriptionService.getByIdDeep(id);
+        if (wfTextbookSubscription == null) {
+           return RT.error("找不到此数据!");
+        }
+        return RT.ok(BeanUtil.toBean(wfTextbookSubscription, WfTextbookSubscriptionVo.class));
+    }
+
+
+    @PostMapping
+    @ApiOperation(value = "新增教材教辅征订")
+    @SaCheckPermission("wftextbooksubscription:add")
+    public RT<Boolean> add(@Valid @RequestBody AddWfTextbookSubscriptionDto dto){
+        WfTextbookSubscription wfTextbookSubscription = BeanUtil.toBean(dto, WfTextbookSubscription.class);
+        boolean isSuccess = wfTextbookSubscriptionService.add(wfTextbookSubscription);
+    return RT.ok(isSuccess);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "修改教材教辅征订")
+    @SaCheckPermission("wftextbooksubscription:edit")
+    public RT<Boolean> update(@Valid @RequestBody UpdateWfTextbookSubscriptionDto dto){
+
+        WfTextbookSubscription wfTextbookSubscription = BeanUtil.toBean(dto, WfTextbookSubscription.class);
+        return RT.ok(wfTextbookSubscriptionService.update(wfTextbookSubscription));
+
+    }
+
+    @DeleteMapping
+    @ApiOperation(value = "删除教材教辅征订")
+    @SaCheckPermission("wftextbooksubscription:delete")
+    public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
+        return RT.ok(wfTextbookSubscriptionService.delete(ids));
+
+    }
+
+    @GetMapping("/export")
+    @ApiOperation(value = "导出")
+    public ResponseEntity<byte[]> exportData(@Valid WfTextbookSubscriptionPageDto dto, @RequestParam(defaultValue = "false") Boolean isTemplate) {
+        List<WfTextbookSubscriptionPageVo> customerList = isTemplate != null && isTemplate ? new ArrayList<>() : ((PageOutput<WfTextbookSubscriptionPageVo>) page(dto).getData()).getList();
+        ByteArrayOutputStream bot = new ByteArrayOutputStream();
+        EasyExcel.write(bot, WfTextbookSubscriptionPageVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(customerList);
+
+        return RT.fileStream(bot.toByteArray(), "WfTextbookSubscription" + ExcelTypeEnum.XLSX.getValue());
+    }
+}

+ 13 - 2
src/main/java/com/xjrsoft/module/textbook/dto/AddWfTextbookSubscriptionDto.java

@@ -3,14 +3,21 @@ package com.xjrsoft.module.textbook.dto;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
 import java.io.Serializable;
 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.List;
+import java.util.Date;
+import com.xjrsoft.module.textbook.entity.WfTextbookSubscriptionItem;
+
 
 
 
 
 /**
 /**
 * @title: 教材教辅征订
 * @title: 教材教辅征订
 * @Author szs
 * @Author szs
-* @Date: 2023-12-25
+* @Date: 2024-06-04
 * @Version 1.0
 * @Version 1.0
 */
 */
 @Data
 @Data
@@ -53,7 +60,11 @@ public class AddWfTextbookSubscriptionDto implements Serializable {
     */
     */
     @ApiModelProperty("状态(1:结束 0:未结束)")
     @ApiModelProperty("状态(1:结束 0:未结束)")
     private Integer status;
     private Integer status;
-
+    /**
+     * 征订方式(1:结束 2:未结束)
+     */
+    @ApiModelProperty("征订方式(1:按班级征订 2:按教材征订)")
+    private Integer subscription_method;
     /**
     /**
     * wfTextbookSubscriptionItem
     * wfTextbookSubscriptionItem
     */
     */

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

@@ -16,7 +16,7 @@ import java.util.Date;
 /**
 /**
 * @title: 教材教辅征订项
 * @title: 教材教辅征订项
 * @Author szs
 * @Author szs
-* @Date: 2023-12-25
+* @Date: 2024-06-04
 * @Version 1.0
 * @Version 1.0
 */
 */
 @Data
 @Data
@@ -29,6 +29,11 @@ public class AddWfTextbookSubscriptionItemDto implements Serializable {
     */
     */
     @ApiModelProperty("序号")
     @ApiModelProperty("序号")
     private Integer sortCode;
     private Integer sortCode;
+    /**
+     * 教材编号
+     */
+    @ApiModelProperty("教材编号")
+    private Long textbookId;
     /**
     /**
     * 教材教辅征订编号
     * 教材教辅征订编号
     */
     */

+ 3 - 0
src/main/java/com/xjrsoft/module/textbook/dto/TextbookPageDto.java

@@ -1,5 +1,7 @@
 package com.xjrsoft.module.textbook.dto;
 package com.xjrsoft.module.textbook.dto;
 
 
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
 import com.xjrsoft.common.page.PageInput;
 import com.xjrsoft.common.page.PageInput;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
@@ -10,6 +12,7 @@ import java.time.LocalTime;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.Date;
+import java.util.List;
 
 
 
 
 /**
 /**

+ 25 - 0
src/main/java/com/xjrsoft/module/textbook/dto/TextbookSubscriptionListDto.java

@@ -0,0 +1,25 @@
+package com.xjrsoft.module.textbook.dto;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+* @title: 教材管理分页查询入参
+* @Author szs
+* @Date: 2023-12-25
+* @Version 1.0
+*/
+@Data
+public class TextbookSubscriptionListDto extends PageInput {
+    /**
+     * 使用班级
+     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("使用班级")
+    @ApiModelProperty("使用班级")
+    private String classIds;
+}

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

@@ -2,12 +2,22 @@ package com.xjrsoft.module.textbook.dto;
 
 
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
+import java.io.Serializable;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.List;
+import java.util.Date;
+import com.xjrsoft.module.textbook.entity.WfTextbookSubscriptionItem;
+
 
 
 
 
 /**
 /**
 * @title: 教材教辅征订
 * @title: 教材教辅征订
 * @Author szs
 * @Author szs
-* @Date: 2023-12-25
+* @Date: 2024-06-04
 * @Version 1.0
 * @Version 1.0
 */
 */
 @Data
 @Data

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

@@ -15,7 +15,7 @@ import java.util.Date;
 /**
 /**
 * @title: 教材教辅征订分页查询入参
 * @title: 教材教辅征订分页查询入参
 * @Author szs
 * @Author szs
-* @Date: 2023-12-25
+* @Date: 2024-06-04
 * @Version 1.0
 * @Version 1.0
 */
 */
 @Data
 @Data

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

@@ -184,5 +184,9 @@ public class Textbook implements Serializable {
     @EntityMapping(thisField = "id", joinField = "wfTextbookSubscriptionId")
     @EntityMapping(thisField = "id", joinField = "wfTextbookSubscriptionId")
     private List<TextbookSubscriptionRecord> textbookSubscriptionRecordList;
     private List<TextbookSubscriptionRecord> textbookSubscriptionRecordList;
 
 
-
+    /**
+     * 使用类型(单位:学期)
+     */
+    @ApiModelProperty("使用类型(单位:学期)")
+    private Integer useType;
 }
 }

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

@@ -10,6 +10,9 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
 import java.io.Serializable;
 import java.io.Serializable;
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.List;
 import java.util.Date;
 import java.util.Date;
 
 
@@ -17,7 +20,7 @@ import java.util.Date;
 /**
 /**
 * @title: 教材教辅征订
 * @title: 教材教辅征订
 * @Author szs
 * @Author szs
-* @Date: 2023-12-25
+* @Date: 2024-06-04
 * @Version 1.0
 * @Version 1.0
 */
 */
 @Data
 @Data
@@ -106,6 +109,12 @@ public class WfTextbookSubscription implements Serializable {
     @ApiModelProperty("状态(1:结束 0:未结束)")
     @ApiModelProperty("状态(1:结束 0:未结束)")
     private Integer status;
     private Integer status;
 
 
+    /**
+     * 征订方式(1:结束 2:未结束)
+     */
+    @ApiModelProperty("征订方式(1:按班级征订 2:按教材征订)")
+    private Integer subscription_method;
+
     /**
     /**
     * wfTextbookSubscriptionItem
     * wfTextbookSubscriptionItem
     */
     */

+ 6 - 2
src/main/java/com/xjrsoft/module/textbook/entity/WfTextbookSubscriptionItem.java

@@ -20,7 +20,7 @@ import java.util.Date;
 /**
 /**
 * @title: 教材教辅征订项
 * @title: 教材教辅征订项
 * @Author szs
 * @Author szs
-* @Date: 2023-12-25
+* @Date: 2024-06-04
 * @Version 1.0
 * @Version 1.0
 */
 */
 @Data
 @Data
@@ -159,5 +159,9 @@ public class WfTextbookSubscriptionItem implements Serializable {
     @ApiModelProperty("版本")
     @ApiModelProperty("版本")
     private String version;
     private String version;
 
 
-
+    /**
+     * 教材编号
+     */
+    @ApiModelProperty("教材编号")
+    private Long textbookId;
 }
 }

+ 1 - 0
src/main/java/com/xjrsoft/module/textbook/mapper/TextbookIssueRecordMapper.java

@@ -23,3 +23,4 @@ public interface TextbookIssueRecordMapper extends MPJBaseMapper<TextbookIssueRe
 
 
     List<TextbookIssueRecordPageVo> getList(@Param("dto") TextbookIssueRecordExportDto dto);
     List<TextbookIssueRecordPageVo> getList(@Param("dto") TextbookIssueRecordExportDto dto);
 }
 }
+

+ 2 - 1
src/main/java/com/xjrsoft/module/textbook/mapper/WfTextbookSubscriptionItemMapper.java

@@ -1,5 +1,6 @@
 package com.xjrsoft.module.textbook.mapper;
 package com.xjrsoft.module.textbook.mapper;
 
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.github.yulichang.base.MPJBaseMapper;
 import com.github.yulichang.base.MPJBaseMapper;
 import com.xjrsoft.module.textbook.entity.WfTextbookSubscriptionItem;
 import com.xjrsoft.module.textbook.entity.WfTextbookSubscriptionItem;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Mapper;
@@ -7,7 +8,7 @@ import org.apache.ibatis.annotations.Mapper;
 /**
 /**
 * @title: 教材教辅征订项
 * @title: 教材教辅征订项
 * @Author szs
 * @Author szs
-* @Date: 2023-12-25
+* @Date: 2024-06-04
 * @Version 1.0
 * @Version 1.0
 */
 */
 @Mapper
 @Mapper

+ 2 - 1
src/main/java/com/xjrsoft/module/textbook/mapper/WfTextbookSubscriptionMapper.java

@@ -1,5 +1,6 @@
 package com.xjrsoft.module.textbook.mapper;
 package com.xjrsoft.module.textbook.mapper;
 
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.github.yulichang.base.MPJBaseMapper;
 import com.github.yulichang.base.MPJBaseMapper;
 import com.xjrsoft.module.textbook.entity.WfTextbookSubscription;
 import com.xjrsoft.module.textbook.entity.WfTextbookSubscription;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Mapper;
@@ -7,7 +8,7 @@ import org.apache.ibatis.annotations.Mapper;
 /**
 /**
 * @title: 教材教辅征订
 * @title: 教材教辅征订
 * @Author szs
 * @Author szs
-* @Date: 2023-12-25
+* @Date: 2024-06-04
 * @Version 1.0
 * @Version 1.0
 */
 */
 @Mapper
 @Mapper

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

@@ -56,7 +56,7 @@ public interface ITextbookService extends MPJBaseService<Textbook> {
      * @param dataId
      * @param dataId
      * @return
      * @return
      */
      */
-    Boolean dataHandleAddTextbookNode(Long dataId);
+//    Boolean dataHandleAddTextbookNode(Long dataId);
 
 
     /**
     /**
      * 添加作业本规则
      * 添加作业本规则

+ 3 - 11
src/main/java/com/xjrsoft/module/textbook/service/IWfTextbookSubscriptionService.java

@@ -1,14 +1,15 @@
 package com.xjrsoft.module.textbook.service;
 package com.xjrsoft.module.textbook.service;
 
 
+import com.baomidou.mybatisplus.extension.service.IService;
 import com.github.yulichang.base.MPJBaseService;
 import com.github.yulichang.base.MPJBaseService;
 import com.xjrsoft.module.textbook.entity.WfTextbookSubscription;
 import com.xjrsoft.module.textbook.entity.WfTextbookSubscription;
-
+import lombok.Data;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
 * @title: 教材教辅征订
 * @title: 教材教辅征订
 * @Author szs
 * @Author szs
-* @Date: 2023-12-25
+* @Date: 2024-06-04
 * @Version 1.0
 * @Version 1.0
 */
 */
 
 
@@ -36,13 +37,4 @@ public interface IWfTextbookSubscriptionService extends MPJBaseService<WfTextboo
     * @return
     * @return
     */
     */
     Boolean delete(List<Long> ids);
     Boolean delete(List<Long> ids);
-
-    /**
-     * 根据Id查询征订项
-     *
-     * @param id
-     * @return
-     */
-    WfTextbookSubscription selectById(Long id);
-
 }
 }

+ 3 - 10
src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookServiceImpl.java

@@ -19,11 +19,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.enums.ExerciseBookeTypeEnum;
 import com.xjrsoft.common.enums.ExerciseBookeTypeEnum;
-import com.xjrsoft.common.enums.SubscriptionTypeEnum;
 import com.xjrsoft.common.enums.TextbookTypeEnum;
 import com.xjrsoft.common.enums.TextbookTypeEnum;
 import com.xjrsoft.common.enums.WarehouseModeEnum;
 import com.xjrsoft.common.enums.WarehouseModeEnum;
 import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.exception.MyException;
-import com.xjrsoft.common.utils.excel.CustomCellWriteWidthConfig;
 import com.xjrsoft.common.utils.excel.ExcelFillCellMergePrevColUtil;
 import com.xjrsoft.common.utils.excel.ExcelFillCellMergePrevColUtil;
 import com.xjrsoft.common.utils.excel.ExcelMergeUtil;
 import com.xjrsoft.common.utils.excel.ExcelMergeUtil;
 import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.base.entity.BaseClass;
@@ -34,8 +32,6 @@ import com.xjrsoft.module.base.mapper.BaseCourseSubjectMapper;
 import com.xjrsoft.module.base.mapper.BaseGradeMapper;
 import com.xjrsoft.module.base.mapper.BaseGradeMapper;
 import com.xjrsoft.module.base.mapper.BaseSemesterMapper;
 import com.xjrsoft.module.base.mapper.BaseSemesterMapper;
 import com.xjrsoft.module.base.service.IBaseClassService;
 import com.xjrsoft.module.base.service.IBaseClassService;
-import com.xjrsoft.module.courseTable.entity.CourseTable;
-import com.xjrsoft.module.teacher.entity.BaseTeacher;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.textbook.dto.*;
 import com.xjrsoft.module.textbook.dto.*;
 import com.xjrsoft.module.textbook.entity.*;
 import com.xjrsoft.module.textbook.entity.*;
@@ -45,14 +41,12 @@ import com.xjrsoft.module.textbook.vo.*;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import org.apache.poi.ss.usermodel.BorderStyle;
 import org.apache.poi.ss.usermodel.BorderStyle;
 import org.apache.poi.ss.usermodel.HorizontalAlignment;
 import org.apache.poi.ss.usermodel.HorizontalAlignment;
-import org.apache.poi.ss.usermodel.IndexedColors;
 import org.apache.poi.ss.usermodel.VerticalAlignment;
 import org.apache.poi.ss.usermodel.VerticalAlignment;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
 import java.io.ByteArrayOutputStream;
 import java.io.ByteArrayOutputStream;
-import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStream;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.*;
@@ -212,11 +206,10 @@ public class TextbookServiceImpl extends MPJBaseServiceImpl<TextbookMapper, Text
 
 
     @Override
     @Override
     public Page<TextbookPageVo> getPage(Page<TextbookPageDto> page, TextbookPageDto dto) {
     public Page<TextbookPageVo> getPage(Page<TextbookPageDto> page, TextbookPageDto dto) {
-        Page<TextbookPageVo> result = textbookTextbookMapper.getPage(page, dto);
-        return result;
+        return textbookTextbookMapper.getPage(page, dto);
     }
     }
 
 
-    @Override
+   /* @Override
     @Transactional
     @Transactional
     public Boolean dataHandleAddTextbookNode(Long dataId) {
     public Boolean dataHandleAddTextbookNode(Long dataId) {
         WfTextbookSubscription wfTextbookSubscription = iWfTextbookSubscriptionService.selectById(dataId);
         WfTextbookSubscription wfTextbookSubscription = iWfTextbookSubscriptionService.selectById(dataId);
@@ -328,7 +321,7 @@ public class TextbookServiceImpl extends MPJBaseServiceImpl<TextbookMapper, Text
             }
             }
         }
         }
         return true;
         return true;
-    }
+    }*/
 
 
     /**
     /**
      * 添加作业本规则
      * 添加作业本规则

+ 4 - 16
src/main/java/com/xjrsoft/module/textbook/service/impl/WfTextbookSubscriptionServiceImpl.java

@@ -1,25 +1,24 @@
 package com.xjrsoft.module.textbook.service.impl;
 package com.xjrsoft.module.textbook.service.impl;
 
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.base.MPJBaseServiceImpl;
-import com.xjrsoft.module.textbook.entity.WfTextbookSubscription;
 import com.xjrsoft.module.textbook.entity.WfTextbookSubscriptionItem;
 import com.xjrsoft.module.textbook.entity.WfTextbookSubscriptionItem;
 import com.xjrsoft.module.textbook.mapper.WfTextbookSubscriptionItemMapper;
 import com.xjrsoft.module.textbook.mapper.WfTextbookSubscriptionItemMapper;
+import com.xjrsoft.module.textbook.entity.WfTextbookSubscription;
 import com.xjrsoft.module.textbook.mapper.WfTextbookSubscriptionMapper;
 import com.xjrsoft.module.textbook.mapper.WfTextbookSubscriptionMapper;
 import com.xjrsoft.module.textbook.service.IWfTextbookSubscriptionService;
 import com.xjrsoft.module.textbook.service.IWfTextbookSubscriptionService;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
-
 import java.util.List;
 import java.util.List;
 import java.util.Objects;
 import java.util.Objects;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 
 
 /**
 /**
 * @title: 教材教辅征订
 * @title: 教材教辅征订
 * @Author szs
 * @Author szs
-* @Date: 2023-12-25
+* @Date: 2024-06-04
 * @Version 1.0
 * @Version 1.0
 */
 */
 @Service
 @Service
@@ -86,15 +85,4 @@ public class WfTextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<WfText
 
 
         return true;
         return true;
     }
     }
-
-    @Override
-    public WfTextbookSubscription selectById(Long id) {
-        WfTextbookSubscription wfTextbookSubscription = this.getById(id);
-        LambdaQueryWrapper<WfTextbookSubscriptionItem> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper
-                .eq(WfTextbookSubscriptionItem::getWfTextbookSubscriptionId,id);
-        List<WfTextbookSubscriptionItem> wfTextbookSubscriptionItemList = wfTextbookSubscriptionWfTextbookSubscriptionItemMapper.selectList(queryWrapper);
-        wfTextbookSubscription.setWfTextbookSubscriptionItemList(wfTextbookSubscriptionItemList);
-        return wfTextbookSubscription;
-    }
 }
 }

+ 26 - 0
src/main/java/com/xjrsoft/module/textbook/vo/GradeClassListVo.java

@@ -0,0 +1,26 @@
+package com.xjrsoft.module.textbook.vo;
+
+import com.xjrsoft.common.model.tree.ITreeNode;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class GradeClassListVo{
+
+
+    @ApiModelProperty("班级ID")
+    private String classId;
+
+    @ApiModelProperty("班级名称")
+    private String className;
+
+    @ApiModelProperty("年级ID")
+    private String gradeId;
+
+    @ApiModelProperty("班级名称")
+    private String gradeName;
+}
+

+ 25 - 0
src/main/java/com/xjrsoft/module/textbook/vo/GradeClassTreeVo.java

@@ -0,0 +1,25 @@
+package com.xjrsoft.module.textbook.vo;
+
+import com.xjrsoft.common.model.tree.ITreeNode;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class GradeClassTreeVo implements ITreeNode<GradeClassTreeVo,String>, Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private String id;
+
+    @ApiModelProperty("")
+    private String name;
+
+    @ApiModelProperty("")
+    private String parentId;
+
+    private List<GradeClassTreeVo> children;
+}
+

+ 5 - 0
src/main/java/com/xjrsoft/module/textbook/vo/TextbookPageVo.java

@@ -160,4 +160,9 @@ public class TextbookPageVo {
     @ExcelProperty("使用班级")
     @ExcelProperty("使用班级")
     @ApiModelProperty("使用班级")
     @ApiModelProperty("使用班级")
     private String useClass;
     private String useClass;
+    /**
+     * 使用类型(单位:学期)
+     */
+    @ApiModelProperty("使用类型(单位:学期)")
+    private Integer useType;
 }
 }

+ 63 - 0
src/main/java/com/xjrsoft/module/textbook/vo/TextbookSubscriptionListVo.java

@@ -0,0 +1,63 @@
+package com.xjrsoft.module.textbook.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+* @title: 教材管理表单出参
+* @Author szs
+* @Date: 2023-12-25
+* @Version 1.0
+*/
+@Data
+public class TextbookSubscriptionListVo {
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    private Long id;
+    /**
+     * 课程编号(base_course_subject)
+     */
+    @ApiModelProperty("课程编号(base_course_subject)")
+    private Long courseSubjectId;
+    /**
+     * 课程编号(base_course_subject)
+     */
+    @ApiModelProperty("课程编号(base_course_subject)")
+    private String courseSubjectIdCn;
+    /**
+    * 书名
+    */
+    @ApiModelProperty("书名")
+    private String bookName;
+    /**
+    * 出版社
+    */
+    @ApiModelProperty("出版社")
+    private String publishingHouse;
+    /**
+    * 教材类型(xjr_dictionary_item[textbook_type])
+    */
+    @ApiModelProperty("教材类型(xjr_dictionary_item[textbook_type])")
+    private String textbookType;
+    /**
+     * 教材类型(xjr_dictionary_item[textbook_type])
+     */
+    @ApiModelProperty("教材类型(xjr_dictionary_item[textbook_type])")
+    private String textbookTypeCn;
+    /**
+     * 使用类型(单位:学期)
+     */
+    @ApiModelProperty("使用类型(单位:学期)")
+    private Integer useType;
+    /**
+     * 学生用书征订数量
+     */
+    @ApiModelProperty("学生用书征订数量")
+    private Integer number;
+}

+ 5 - 0
src/main/java/com/xjrsoft/module/textbook/vo/TextbookVo.java

@@ -113,4 +113,9 @@ public class TextbookVo {
     @ApiModelProperty("使用班级")
     @ApiModelProperty("使用班级")
     private List<TextbookClassRelationVo> textbookClassRelationList;
     private List<TextbookClassRelationVo> textbookClassRelationList;
 
 
+    /**
+     * 使用类型(单位:学期)
+     */
+    @ApiModelProperty("使用类型(单位:学期)")
+    private Integer useType;
 }
 }

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

@@ -12,7 +12,7 @@ import java.util.Date;
 /**
 /**
 * @title: 教材教辅征订项表单出参
 * @title: 教材教辅征订项表单出参
 * @Author szs
 * @Author szs
-* @Date: 2023-12-25
+* @Date: 2024-06-04
 * @Version 1.0
 * @Version 1.0
 */
 */
 @Data
 @Data

+ 45 - 1
src/main/java/com/xjrsoft/module/textbook/vo/WfTextbookSubscriptionPageVo.java

@@ -1,5 +1,8 @@
 package com.xjrsoft.module.textbook.vo;
 package com.xjrsoft.module.textbook.vo;
 
 
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
@@ -14,7 +17,7 @@ import java.util.Date;
 /**
 /**
 * @title: 教材教辅征订分页列表出参
 * @title: 教材教辅征订分页列表出参
 * @Author szs
 * @Author szs
-* @Date: 2023-12-25
+* @Date: 2024-06-04
 * @Version 1.0
 * @Version 1.0
 */
 */
 @Data
 @Data
@@ -23,72 +26,113 @@ public class WfTextbookSubscriptionPageVo {
     /**
     /**
     * 主键编号
     * 主键编号
     */
     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("主键编号")
     @ApiModelProperty("主键编号")
     @ApiModelProperty("主键编号")
     private String id;
     private String id;
     /**
     /**
     * 创建人
     * 创建人
     */
     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("创建人")
     @ApiModelProperty("创建人")
     @ApiModelProperty("创建人")
     private Long createUserId;
     private Long createUserId;
     /**
     /**
     * 创建时间
     * 创建时间
     */
     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("创建时间")
     @ApiModelProperty("创建时间")
     @ApiModelProperty("创建时间")
     private Date createDate;
     private Date createDate;
     /**
     /**
     * 修改人
     * 修改人
     */
     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("修改人")
     @ApiModelProperty("修改人")
     @ApiModelProperty("修改人")
     private Long modifyUserId;
     private Long modifyUserId;
     /**
     /**
     * 修改时间
     * 修改时间
     */
     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("修改时间")
     @ApiModelProperty("修改时间")
     @ApiModelProperty("修改时间")
     private Date modifyDate;
     private Date modifyDate;
     /**
     /**
     * 删除标记
     * 删除标记
     */
     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("删除标记")
     @ApiModelProperty("删除标记")
     @ApiModelProperty("删除标记")
     private Integer deleteMark;
     private Integer deleteMark;
     /**
     /**
     * 有效标志
     * 有效标志
     */
     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("有效标志")
     @ApiModelProperty("有效标志")
     @ApiModelProperty("有效标志")
     private Integer enabledMark;
     private Integer enabledMark;
     /**
     /**
     * 序号
     * 序号
     */
     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("序号")
     @ApiModelProperty("序号")
     @ApiModelProperty("序号")
     private Integer sortCode;
     private Integer sortCode;
     /**
     /**
     * 申请人
     * 申请人
     */
     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("申请人")
     @ApiModelProperty("申请人")
     @ApiModelProperty("申请人")
     private Long applicantUserId;
     private Long applicantUserId;
     /**
     /**
     * 所在部门编号
     * 所在部门编号
     */
     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("所在部门编号")
     @ApiModelProperty("所在部门编号")
     @ApiModelProperty("所在部门编号")
     private Long deptId;
     private Long deptId;
     /**
     /**
     * 学期ID(base_semester)
     * 学期ID(base_semester)
     */
     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("学期ID(base_semester)")
     @ApiModelProperty("学期ID(base_semester)")
     @ApiModelProperty("学期ID(base_semester)")
     private Long baseSemesterId;
     private Long baseSemesterId;
+    /**
+     * 学期ID(base_semester)
+     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("学期ID(base_semester)")
+    @ApiModelProperty("学期ID(base_semester)")
+    private String baseSemesterIdCn;
     /**
     /**
     * 学科组管理编号(subject_group)
     * 学科组管理编号(subject_group)
     */
     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("学科组管理编号(subject_group)")
     @ApiModelProperty("学科组管理编号(subject_group)")
     @ApiModelProperty("学科组管理编号(subject_group)")
     private Long subjectGroupId;
     private Long subjectGroupId;
     /**
     /**
     * 备注
     * 备注
     */
     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("备注")
     @ApiModelProperty("备注")
     @ApiModelProperty("备注")
     private String remark;
     private String remark;
     /**
     /**
     * 状态(1:结束 0:未结束)
     * 状态(1:结束 0:未结束)
     */
     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("状态(1:结束 0:未结束)")
     @ApiModelProperty("状态(1:结束 0:未结束)")
     @ApiModelProperty("状态(1:结束 0:未结束)")
     private Integer status;
     private Integer status;
+    /**
+     * 征订方式(1:结束 2:未结束)
+     */
+    @ApiModelProperty("征订方式(1:按班级征订 2:按教材征订)")
+    private Integer subscription_method;
 
 
+    private Integer sum;
 }
 }

+ 6 - 1
src/main/java/com/xjrsoft/module/textbook/vo/WfTextbookSubscriptionVo.java

@@ -3,12 +3,17 @@ package com.xjrsoft.module.textbook.vo;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
 
 
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.List;
+import java.util.Date;
+import com.xjrsoft.module.textbook.entity.WfTextbookSubscriptionItem;
 
 
 /**
 /**
 * @title: 教材教辅征订表单出参
 * @title: 教材教辅征订表单出参
 * @Author szs
 * @Author szs
-* @Date: 2023-12-25
+* @Date: 2024-06-04
 * @Version 1.0
 * @Version 1.0
 */
 */
 @Data
 @Data

+ 2 - 2
src/main/java/com/xjrsoft/module/workflow/utils/WorkFlowUtil.java

@@ -135,8 +135,8 @@ public class WorkFlowUtil {
                 .replace(WorkflowConstant.TASK_ID_PLACEHOLDER, workflowSchema.getDefinitionId())
                 .replace(WorkflowConstant.TASK_ID_PLACEHOLDER, workflowSchema.getDefinitionId())
                 .replace(WorkflowConstant.INITIATOR_ID_PLACEHOLDER, StrUtil.toString(user.getId()))
                 .replace(WorkflowConstant.INITIATOR_ID_PLACEHOLDER, StrUtil.toString(user.getId()))
                 .replace(WorkflowConstant.INITIATOR_USER_NAME_PLACEHOLDER, user.getName())
                 .replace(WorkflowConstant.INITIATOR_USER_NAME_PLACEHOLDER, user.getName())
-                .replace(WorkflowConstant.INITIATOR_CODE_PLACEHOLDER, user.getCode())
-                .replace(WorkflowConstant.INITIATOR_MOBILE_PLACEHOLDER, user.getMobile())
+                .replace(WorkflowConstant.INITIATOR_CODE_PLACEHOLDER, user.getCode()==null?"":user.getCode())
+                .replace(WorkflowConstant.INITIATOR_MOBILE_PLACEHOLDER, user.getMobile()==null?"":user.getMobile())
                 .replace(WorkflowConstant.INITIATOR_DEPT_NAME_PLACEHOLDER, department.getName()==null?"":department.getName())
                 .replace(WorkflowConstant.INITIATOR_DEPT_NAME_PLACEHOLDER, department.getName()==null?"":department.getName())
 //                .replace(WorkflowConstant.INITIATOR_POST_NAME_PLACEHOLDER, post.getName())
 //                .replace(WorkflowConstant.INITIATOR_POST_NAME_PLACEHOLDER, post.getName())
                 .replace(WorkflowConstant.YYYYMMDDHHMMSS_24_PLACEHOLDER, DateUtil.format(LocalDateTime.now(), GlobalConstant.YYYY_MM_DD_HH_MM_SS_24))
                 .replace(WorkflowConstant.YYYYMMDDHHMMSS_24_PLACEHOLDER, DateUtil.format(LocalDateTime.now(), GlobalConstant.YYYY_MM_DD_HH_MM_SS_24))

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

@@ -113,6 +113,7 @@ xjrsoft:
       - /system/QR-code-login
       - /system/QR-code-login
       - /event/receivePeople
       - /event/receivePeople
       - /event/receiveCar
       - /event/receiveCar
+      - /system/findUserByCode
     approval-time: 300 # 审核超时时间 目前设为5分钟
     approval-time: 300 # 审核超时时间 目前设为5分钟
   email:
   email:
     host:  #邮件服务器的SMTP地址,可选,默认为smtp.<发件人邮箱后缀>
     host:  #邮件服务器的SMTP地址,可选,默认为smtp.<发件人邮箱后缀>

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

@@ -97,6 +97,7 @@ xjrsoft:
       - /system/QR-code-login
       - /system/QR-code-login
       - /event/receivePeople
       - /event/receivePeople
       - /event/receiveCar
       - /event/receiveCar
+      - /system/findUserByCode
     approval-time: 300 # 审核超时时间 目前设为5分钟
     approval-time: 300 # 审核超时时间 目前设为5分钟
   email:
   email:
     host:  #邮件服务器的SMTP地址,可选,默认为smtp.<发件人邮箱后缀>
     host:  #邮件服务器的SMTP地址,可选,默认为smtp.<发件人邮箱后缀>

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

@@ -93,6 +93,7 @@ xjrsoft:
       - /system/QR-code-login
       - /system/QR-code-login
       - /event/receivePeople
       - /event/receivePeople
       - /event/receiveCar
       - /event/receiveCar
+      - /system/findUserByCode
     approval-time: 300 # 审核超时时间 目前设为5分钟
     approval-time: 300 # 审核超时时间 目前设为5分钟
   email:
   email:
     host:  #邮件服务器的SMTP地址,可选,默认为smtp.<发件人邮箱后缀>
     host:  #邮件服务器的SMTP地址,可选,默认为smtp.<发件人邮箱后缀>

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

@@ -52,7 +52,7 @@
     </select>
     </select>
     <select id="getStudentPage" parameterType="com.xjrsoft.module.student.dto.BaseStudentUserPageDto" resultType="com.xjrsoft.module.student.vo.BaseStudentUserPageVo">
     <select id="getStudentPage" 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,t6.name AS gender_cn,t1.credential_number,
         SELECT t1.id,t4.name AS class_name,t5.name AS teacher_name,t1.name,t6.name AS gender_cn,t1.credential_number,
-        t1.mobile,t7.name AS archives_status_cn ,t8.name AS stduy_status_cn,t9.name AS student_type_cn FROM xjr_user t1
+        t1.mobile,t7.name AS archives_status_cn ,t8.name AS stduy_status_cn,t9.name AS student_type_cn,t10.name as learn_status_cn FROM xjr_user t1
         INNER JOIN base_student t2 ON t1.id = t2.user_id
         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_student_school_roll t3 ON t1.id = t3.user_id
         LEFT JOIN base_class t4 ON t4.id = t3.class_id
         LEFT JOIN base_class t4 ON t4.id = t3.class_id
@@ -61,7 +61,9 @@
         LEFT JOIN xjr_dictionary_detail t7 ON t3.archives_status = t7.code AND t7.item_id = 2023000000000000029
         LEFT JOIN xjr_dictionary_detail t7 ON t3.archives_status = t7.code AND t7.item_id = 2023000000000000029
         LEFT JOIN xjr_dictionary_detail t8 ON t3.stduy_status = t8.code AND t8.item_id = 2023000000000000030
         LEFT JOIN xjr_dictionary_detail t8 ON t3.stduy_status = t8.code AND t8.item_id = 2023000000000000030
         LEFT JOIN xjr_dictionary_detail t9 ON t3.student_type = t9.code AND t9.item_id = 2023000000000000028
         LEFT JOIN xjr_dictionary_detail t9 ON t3.student_type = t9.code AND t9.item_id = 2023000000000000028
+        LEFT JOIN xjr_dictionary_detail t10 ON t3.learn_status = t10.code AND t10.item_id = 1762024751192084482
         WHERE t1.delete_mark = 0 AND t2.delete_mark = 0
         WHERE t1.delete_mark = 0 AND t2.delete_mark = 0
+        and t3.archives_status = 'FB2901'
         <if test="dto.name != null and dto.name != ''">
         <if test="dto.name != null and dto.name != ''">
             and t1.name like concat('%', #{dto.name},'%')
             and t1.name like concat('%', #{dto.name},'%')
         </if>
         </if>
@@ -77,7 +79,28 @@
         <if test="dto.classId != null">
         <if test="dto.classId != null">
             and t4.id = #{dto.classId}
             and t4.id = #{dto.classId}
         </if>
         </if>
-        order by t1.id
+        <if test="dto.order == null">
+            order by t1.id
+        </if>
+        <if test="dto.order != null">
+            <if test="dto.order == 'ascend'">
+                <if test="dto.field != null and dto.field == 'stduyStatusCn'">
+                    order by t8.name
+                </if>
+                <if test="dto.field != null and dto.field == 'name'">
+                    order by t1.name asc
+                </if>
+            </if>
+            <if test="dto.order == 'descend'">
+                <if test="dto.field != null and dto.field == 'stduyStatusCn'">
+                    order by t8.name desc
+                </if>
+                <if test="dto.field != null and dto.field == 'name'">
+                    order by t1.name desc
+                </if>
+            </if>
+        </if>
+
     </select>
     </select>
 
 
 </mapper>
 </mapper>

+ 0 - 1
src/main/resources/mapper/student/BaseStudentSchoolRollMapper.xml

@@ -22,7 +22,6 @@
             t2.gender,
             t2.gender,
             t10.name AS genderCn,
             t10.name AS genderCn,
             t2.birth_date,
             t2.birth_date,
-            t2.avatar,
             t6.name AS nation,
             t6.name AS nation,
             t3.archives_status AS archivesStatusCode,
             t3.archives_status AS archivesStatusCode,
             t3.stduy_status AS stduyStatusCode,
             t3.stduy_status AS stduyStatusCode,

+ 1 - 1
src/main/resources/mapper/teacher/XjrUserMapper.xml

@@ -34,6 +34,6 @@
         LEFT JOIN base_teacher t1 ON (t1.user_id = t.id)
         LEFT JOIN base_teacher t1 ON (t1.user_id = t.id)
         LEFT JOIN xjr_user_dept_relation t2 ON (t2.user_id = t.id) WHERE t.delete_mark = 0 AND t1.delete_mark = 0
         LEFT JOIN xjr_user_dept_relation t2 ON (t2.user_id = t.id) WHERE t.delete_mark = 0 AND t1.delete_mark = 0
         AND t1.delete_mark = 0
         AND t1.delete_mark = 0
-        <if test="dto."></if>
+        <!--<if test="dto."></if>-->
     </select>
     </select>
 </mapper>
 </mapper>

+ 30 - 0
src/test/java/com/xjrsoft/module/job/AttenDanceWarnNoticeTaskTest.java

@@ -0,0 +1,30 @@
+package com.xjrsoft.module.job;
+
+import org.junit.jupiter.api.Test;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * @author dzx
+ * @date 2024/6/4
+ */
+class AttenDanceWarnNoticeTaskTest {
+
+
+    @Test
+    void test(){
+        LocalDateTime now = LocalDateTime.now();
+        System.out.println(now.getDayOfWeek().name());
+
+        LocalTime amStartTime = LocalTime.of(8,0,0);
+        System.out.println(now.with(amStartTime));
+
+        System.out.println(1L == 1);
+
+    }
+
+}

+ 7 - 7
src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java

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