Ver código fonte

Merge branch 'dev_v2.2.1' of http://git.qmth.com.cn/wangliang/distributed-print-service into dev_v2.2.1

xiaof 3 anos atrás
pai
commit
3fa037a42c
24 arquivos alterados com 363 adições e 194 exclusões
  1. 1 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/DictionaryEnum.java
  2. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamTaskMapper.java
  3. 18 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TSyncExamStudentScoreMapper.java
  4. 18 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TSyncExamStudentScoreService.java
  5. 2 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  6. 5 4
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TBSyncTaskServiceImpl.java
  7. 16 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TSyncExamStudentScoreServiceImpl.java
  8. 24 21
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/PushLogicServiceImpl.java
  9. 6 6
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java
  10. 70 39
      distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml
  11. 6 0
      distributed-print-business/src/main/resources/mapper/TSyncExamStudentScoreMapper.xml
  12. 45 25
      distributed-print/src/main/java/com/qmth/distributed/print/api/SysController.java
  13. 19 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/TSyncExamStudentScoreController.java
  14. 2 1
      distributed-print/src/test/java/com/qmth/distributed/print/SyncHelpTest.java
  15. 13 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/UserPushParam.java
  16. 6 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/BasicStudent.java
  17. 37 37
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicStudentServiceImpl.java
  18. 11 7
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/OrgCenterDataDisposeServiceImpl.java
  19. 1 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/PushUserTrackServiceImpl.java
  20. 46 45
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java
  21. 7 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/sync/StmmsUtils.java
  22. 0 3
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/service/impl/JobServiceImpl.java
  23. 5 0
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/start/StartRunning.java
  24. 4 1
      teachcloud-task/src/main/resources/application-task.properties

+ 1 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/DictionaryEnum.java

@@ -8,6 +8,7 @@ import java.util.Objects;
  * @Date: 2021-11-02
  */
 public enum DictionaryEnum {
+    CAMPUS("校区"),
     SEMESTER("学期"),
     COLLEGE("学院"),
     MAJOR("专业"),

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamTaskMapper.java

@@ -34,7 +34,7 @@ public interface ExamTaskMapper extends BaseMapper<ExamTask> {
 
     IPage<ExamTaskDto> listTaskReviewUnaudited(Page<ExamTaskDto> page, @Param("schoolId") Long schoolId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber, @Param("userId") Long userId, @Param("cardRuleId") Long cardRuleId, @Param("startTime") Long startTime, @Param("endTime") Long endTime, @Param("orgIds") Set<Long> orgIds, @Param("startCreateTime") Long startCreateTime, @Param("endCreateTime") Long endCreateTime, @Param("createName") String createName, @Param("currentUserId") Long currentUserId);
 
-    IPage<ExamTaskDto> listTaskReviewAudited(Page<ExamTaskDto> page, @Param("schoolId") Long schoolId, @Param("reviewStatus") String reviewStatus, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber, @Param("userId") Long userId, @Param("cardRuleId") Long cardRuleId, @Param("startTime") Long startTime, @Param("endTime") Long endTime, @Param("orgIds") Set<Long> orgIds, @Param("startCreateTime") Long startCreateTime, @Param("endCreateTime") Long endCreateTime, @Param("createName") String createName);
+    IPage<ExamTaskDto> listTaskReviewAudited(Page<ExamTaskDto> page, @Param("schoolId") Long schoolId, @Param("reviewStatus") String reviewStatus, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber, @Param("userId") Long userId, @Param("cardRuleId") Long cardRuleId, @Param("startTime") Long startTime, @Param("endTime") Long endTime, @Param("orgIds") Set<Long> orgIds, @Param("startCreateTime") Long startCreateTime, @Param("endCreateTime") Long endCreateTime, @Param("createName") String createName, @Param("currentUserId") Long currentUserId);
 
     IPage<ExamTaskDetailDto> listTaskPaper(Page<ExamTaskDetailDto> page, @Param("schoolId") Long schoolId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber, @Param("startTime") Long startTime, @Param("endTime") Long endTime, @Param("orgIds") Set<Long> orgIds, @Param("containsQuestionTeacher") boolean containsQuestionTeacher, @Param("userId") Long userId, @Param("makeMethod") MakeMethodEnum makeMethod, @Param("cardRuleId") Long cardRuleId);
 

+ 18 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TSyncExamStudentScoreMapper.java

@@ -56,4 +56,22 @@ public interface TSyncExamStudentScoreMapper extends BaseMapper<TSyncExamStudent
                                                     @Param("majorId") Long majorId,
                                                     @Param("clazzId") Long clazzId,
                                                     @Param("courseCode") String courseCode);
+
+    /**
+     * 成绩导出计数
+     *
+     * @param schoolId
+     * @param semesterId
+     * @param orgId
+     * @param majorId
+     * @param clazzId
+     * @param courseCode
+     * @return
+     */
+    public int exportCount(@Param("schoolId") Long schoolId,
+                           @Param("semesterId") Long semesterId,
+                           @Param("orgId") Long orgId,
+                           @Param("majorId") Long majorId,
+                           @Param("clazzId") Long clazzId,
+                           @Param("courseCode") String courseCode);
 }

+ 18 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TSyncExamStudentScoreService.java

@@ -56,6 +56,24 @@ public interface TSyncExamStudentScoreService extends IService<TSyncExamStudentS
                                                     Long clazzId,
                                                     String courseCode);
 
+    /**
+     * 成绩导出计数
+     *
+     * @param schoolId
+     * @param semesterId
+     * @param orgId
+     * @param majorId
+     * @param clazzId
+     * @param courseCode
+     * @return
+     */
+    public int exportCount(Long schoolId,
+                           Long semesterId,
+                           Long orgId,
+                           Long majorId,
+                           Long clazzId,
+                           String courseCode);
+
     /**
      * 创建动态轨迹图
      *

+ 2 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -753,7 +753,8 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         createName = SystemConstant.translateSpecificSign(createName);
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         Set<Long> orgIds = teachcloudCommonService.listSubOrgIds(null);
-        IPage<ExamTaskDto> examTaskDtoIPage = this.baseMapper.listTaskReviewAudited(new Page<>(pageNumber, pageSize), schoolId, reviewStatus, courseCode, paperNumber, userId, cardRuleId, startTime, endTime, orgIds, startCreateTime, endCreateTime, createName);
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        IPage<ExamTaskDto> examTaskDtoIPage = this.baseMapper.listTaskReviewAudited(new Page<>(pageNumber, pageSize), schoolId, reviewStatus, courseCode, paperNumber, userId, cardRuleId, startTime, endTime, orgIds, startCreateTime, endCreateTime, createName, sysUser.getId());
         return examTaskDtoIPage;
     }
 

+ 5 - 4
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TBSyncTaskServiceImpl.java

@@ -32,6 +32,7 @@ import java.util.Set;
 public class TBSyncTaskServiceImpl extends ServiceImpl<TBSyncTaskMapper, TBSyncTask> implements TBSyncTaskService {
     @Resource
     TBSyncTaskMapper tbSyncTaskMapper;
+
     @Override
     public TBSyncTask saveTask(ExamPrintPlan examPrintPlan) {
         QueryWrapper<TBSyncTask> queryWrapper = new QueryWrapper<>();
@@ -75,12 +76,12 @@ public class TBSyncTaskServiceImpl extends ServiceImpl<TBSyncTaskMapper, TBSyncT
     public IPage<SyncListResult> query(Long schoolId, TaskStatusEnum status, PushTypeEnum type, TaskResultEnum result, int pageNumber, int pageSize) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         Set<Long> orgIds = null;
-        IPage<SyncListResult> page = tbSyncTaskMapper.query(new Page<>(pageNumber,pageSize),schoolId,status,type,result,sysUser.getId(),orgIds);
+        IPage<SyncListResult> page = tbSyncTaskMapper.query(new Page<>(pageNumber, pageSize), schoolId, status, type, result, sysUser.getId(), orgIds);
         List<SyncListResult> list = page.getRecords();
         for (SyncListResult syncListResult : list) {
-            syncListResult.setStatus(TaskStatusEnum.valueOf(syncListResult.getStatus()).getTitle());
-            syncListResult.setType(PushTypeEnum.valueOf(syncListResult.getType()).getTitle());
-            syncListResult.setResult(TaskResultEnum.valueOf(syncListResult.getResult()).getTitle());
+            syncListResult.setStatus(Objects.nonNull(syncListResult.getStatus()) ? TaskStatusEnum.valueOf(syncListResult.getStatus()).getTitle() : null);
+            syncListResult.setType(Objects.nonNull(syncListResult.getType()) ? PushTypeEnum.valueOf(syncListResult.getType()).getTitle() : null);
+            syncListResult.setResult(Objects.nonNull(syncListResult.getResult()) ? TaskResultEnum.valueOf(syncListResult.getResult()).getTitle() : null);
         }
         return page;
     }

+ 16 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TSyncExamStudentScoreServiceImpl.java

@@ -78,6 +78,22 @@ public class TSyncExamStudentScoreServiceImpl extends ServiceImpl<TSyncExamStude
         return tSyncExamStudentScoreMapper.export(schoolId, semesterId, orgId, majorId, clazzId, courseCode);
     }
 
+    /**
+     * 成绩导出计数
+     *
+     * @param schoolId
+     * @param semesterId
+     * @param orgId
+     * @param majorId
+     * @param clazzId
+     * @param courseCode
+     * @return
+     */
+    @Override
+    public int exportCount(Long schoolId, Long semesterId, Long orgId, Long majorId, Long clazzId, String courseCode) {
+        return tSyncExamStudentScoreMapper.exportCount(schoolId, semesterId, orgId, majorId, clazzId, courseCode);
+    }
+
     /**
      * 创建动态轨迹图
      *

+ 24 - 21
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/PushLogicServiceImpl.java

@@ -93,37 +93,40 @@ public class PushLogicServiceImpl implements PushLogicService {
                 int pageNos = mod == 0 ? totalCount / pageSize : totalCount / pageSize + 1;
                 Map<String, SysOrg> orgMap = new HashMap<>();
                 Map<String, BasicClazz> clazzMap = new HashMap<>();
-                Long semesterId = examPrintPlanService.getOne(new QueryWrapper<ExamPrintPlan>().lambda().eq(ExamPrintPlan::getThirdRelateId, examIdLong)).getId();
+                Long semesterId = examPrintPlanService.getOne(new QueryWrapper<ExamPrintPlan>().lambda().eq(ExamPrintPlan::getThirdRelateId, examIdLong)).getSemesterId();
                 tSyncExamStudentScoreList = new ArrayList<>();
                 errorTSyncExamStudentScoreList = new ArrayList<>();
                 for (int i = 1; i <= pageNos; i++) {
                     List<Map> students = stmmsUtils.getStudentScore(schoolId, examId, null, null, null, subjectCode, college, className, null, true, i, pageSize);
                     for (Map student : students) {
                         try {
-                            //查学院id
-                            Long orgId = null;
-                            if (!orgMap.containsKey(student.get("college"))) {
-                                SysOrg sysOrg = sysOrgService.getOne(new QueryWrapper<SysOrg>().lambda().eq(SysOrg::getSchoolId, schoolId).eq(SysOrg::getName, student.get("college")));
-                                if (Objects.nonNull(sysOrg)) {
-                                    orgId = sysOrg.getId();
-                                    orgMap.put(sysOrg.getName(), sysOrg);
+                            Long orgId = null, clazzId = null, majorId = null;
+                            if (Objects.nonNull(student.get("college")) && Objects.equals("无", student.get("college"))) {
+                                //查学院id
+                                if (!orgMap.containsKey(student.get("college"))) {
+                                    SysOrg sysOrg = sysOrgService.getOne(new QueryWrapper<SysOrg>().lambda().eq(SysOrg::getSchoolId, schoolId).eq(SysOrg::getName, student.get("college")));
+                                    if (Objects.nonNull(sysOrg)) {
+                                        orgId = sysOrg.getId();
+                                        orgMap.put(sysOrg.getName(), sysOrg);
+                                    }
+                                } else {
+                                    orgId = orgMap.get(student.get("college")).getId();
                                 }
-                            } else {
-                                orgId = orgMap.get(student.get("college")).getId();
                             }
 
-                            //查班级和专业id
-                            Long clazzId = null, majorId = null;
-                            if (!clazzMap.containsKey(student.get("className"))) {
-                                BasicClazz basicClazz = basicClazzService.getOne(new QueryWrapper<BasicClazz>().lambda().eq(BasicClazz::getSchoolId, schoolId).eq(BasicClazz::getClazzName, student.get("className")));
-                                if (Objects.nonNull(basicClazz)) {
-                                    clazzId = basicClazz.getId();
-                                    majorId = basicClazz.getMajorId();
-                                    clazzMap.put(basicClazz.getClazzName(), basicClazz);
+                            if (Objects.nonNull(student.get("className")) && Objects.equals("无", student.get("className"))) {
+                                //查班级和专业id
+                                if (!clazzMap.containsKey(student.get("className"))) {
+                                    BasicClazz basicClazz = basicClazzService.getOne(new QueryWrapper<BasicClazz>().lambda().eq(BasicClazz::getSchoolId, schoolId).eq(BasicClazz::getClazzName, student.get("className")));
+                                    if (Objects.nonNull(basicClazz)) {
+                                        clazzId = basicClazz.getId();
+                                        majorId = basicClazz.getMajorId();
+                                        clazzMap.put(basicClazz.getClazzName(), basicClazz);
+                                    }
+                                } else {
+                                    clazzId = clazzMap.get(student.get("className")).getId();
+                                    majorId = clazzMap.get(student.get("className")).getMajorId();
                                 }
-                            } else {
-                                clazzId = clazzMap.get(student.get("className")).getId();
-                                majorId = clazzMap.get(student.get("className")).getMajorId();
                             }
                             student.put(SystemConstant.SCHOOL_ID, schoolId);
                             student.put("semesterId", semesterId);

+ 6 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java

@@ -1182,7 +1182,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         InputStream inputStream = (InputStream) map.get("inputStream");
         List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(inputStream, Lists.newArrayList(BasicCourseImportDto.class, DescribeImportDto.class), (finalExcelList, finalColumnNameList, finalExcelErrorList) -> {
             List<ExcelError> excelErrorTemp = new ArrayList<>();
-            Map<String, String> checkMap = new HashMap<>();
+//            Map<String, String> checkMap = new HashMap<>();
             for (int i = 0; i < finalExcelList.size(); i++) {
                 LinkedMultiValueMap<Integer, Object> excelMap = finalExcelList.get(i);
                 List<Object> basicCourseImportDtoList = excelMap.get(i);
@@ -1198,11 +1198,11 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                     String clazz = basicCourseImportDto.getClazz();
 
                     // 检验excel中
-                    if (checkMap.containsKey(courseCode)) {
-                        throw ExceptionResultEnum.ERROR.exception("导入的excel中包含在重复的【课程编号】:" + courseCode);
-                    } else {
-                        checkMap.put(courseCode, courseName);
-                    }
+//                    if (checkMap.containsKey(courseCode)) {
+//                        throw ExceptionResultEnum.ERROR.exception("导入的excel中包含在重复的【课程编号】:" + courseCode);
+//                    } else {
+//                        checkMap.put(courseCode, courseName);
+//                    }
 
                     excelErrorTemp.addAll(ExcelUtil.checkExcelField(basicCourseImportDto, y, i));
                     if (Objects.isNull(courseCode) || courseCode.length() > 30 || !courseCode.matches(SystemConstant.REGULAR_EXPRESSION_OF_CODE)) {

+ 70 - 39
distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml

@@ -317,48 +317,85 @@
     </select>
     <select id="listTaskReviewAudited" resultType="com.qmth.distributed.print.business.bean.dto.ExamTaskDto">
         SELECT
-            distinct a.id,
-            a.school_id schoolId,
-            a.course_code courseCode,
-            a.course_name courseName,
-            a.specialty,
-            a.paper_number paperNumber,
-            a.card_rule_id cardRuleId,
-            case a.card_rule_id when -1 then '全部通卡' else b.name end cardRuleName,
-            a.user_id userId,
-            c.real_name userName,
-            d.real_name createName,
-            a.start_time startTime,
-            a.end_time endTime,
-            f.status auditStatus,
-            a.review_status reviewStatus,
-            a.enable,
-            a.create_id createId,
-            a.create_time createTime,
-            a.status,
-            a.flow_id flowId,
-            f.setup,
-            f.status as flowStatus,
-            a.teacher_name teacherName,
-            a.lecturer_name lecturerName,
-            e.name teachingRoomName
+        distinct a.id,
+        a.school_id schoolId,
+        a.course_code courseCode,
+        a.course_name courseName,
+        a.specialty,
+        a.paper_number paperNumber,
+        a.card_rule_id cardRuleId,
+        case a.card_rule_id when -1 then '全部通卡' else b.name end cardRuleName,
+        a.user_id userId,
+        c.real_name userName,
+        d.real_name createName,
+        a.start_time startTime,
+        a.end_time endTime,
+        f.status auditStatus,
+        a.review_status reviewStatus,
+        a.enable,
+        a.create_id createId,
+        a.create_time createTime,
+        a.status,
+        a.flow_id flowId,
+        f.setup,
+        f.status as flowStatus,
+        a.teacher_name teacherName,
+        a.lecturer_name lecturerName,
+        e.name teachingRoomName
         FROM
-            exam_task a
+        exam_task a
         LEFT JOIN
-            basic_card_rule b ON a.card_rule_id = b.id
+        basic_card_rule b ON a.card_rule_id = b.id
         LEFT JOIN
-            sys_user c ON a.user_id = c.id
+        sys_user c ON a.user_id = c.id
         LEFT JOIN
-            sys_user d ON a.create_id = d.id
+        sys_user d ON a.create_id = d.id
         LEFT JOIN t_f_flow_approve f ON
-            a.flow_id = f.flow_id
+        a.flow_id = f.flow_id
         LEFT JOIN t_f_flow_approve_log tffal ON
-            a.flow_id = tffal.flow_id
+        a.flow_id = tffal.flow_id
         LEFT JOIN
-            sys_org e ON a.teaching_room_id = e.id
+        sys_org e ON a.teaching_room_id = e.id
         <where>
             a.enable = true and a.review = true
-            and EXISTS (select distinct t.PROC_INST_ID_ from ACT_HI_TASKINST t where t.TASK_DEF_KEY_ <![CDATA[ <> ]]> 'usertask1' and t.END_TIME_ is not null and t.PROC_INST_ID_ = a.flow_id)
+            and (f.status = 'AUDITING' or f.status = 'FINISH')
+            and EXISTS (
+            select
+            aht.PROC_INST_ID_
+            from
+            ACT_HI_TASKINST aht
+            where
+            aht.TASK_DEF_KEY_ <![CDATA[ <> ]]> 'usertask1'
+            and aht.ASSIGNEE_ = cast(#{currentUserId} as char)
+            and aht.END_TIME_ is not null
+            union all
+            select
+            t.PROC_INST_ID_
+            from
+            (
+            select
+            ahi.*
+            from
+            ACT_HI_IDENTITYLINK ahi
+            where
+            ahi.TYPE_ = 'candidate'
+            and exists(
+            select
+            distinct aht.id_
+            from
+            ACT_HI_TASKINST aht
+            where
+            aht.TASK_DEF_KEY_ <![CDATA[ <> ]]> 'usertask1'
+            and aht.ASSIGNEE_ is null
+            and aht.END_TIME_ is not null
+            and ahi.TASK_ID_ = aht.id_)
+            and ahi.USER_ID_ = cast(#{currentUserId} as char)) temp
+            join ACT_HI_TASKINST t on
+            t.ID_ = temp.TASK_ID_
+            join t_f_flow_approve_log tffal on
+            tffal.flow_id = t.PROC_INST_ID_
+            where (tffal.primary_approve_id = #{currentUserId} or tffal.second_approve_id = #{currentUserId})
+            and t.PROC_INST_ID_ = a.flow_id)
             <if test="schoolId != null and schoolId != ''">
                 and a.school_id = #{schoolId}
             </if>
@@ -392,12 +429,6 @@
             <if test="createName != null and createName != ''">
                 and d.real_name like concat('%',#{createName},'%')
             </if>
-            <if test="orgIds != null">
-                AND a.org_id IN
-                <foreach collection="orgIds" item="item" index="index" open="(" separator="," close=")">
-                    #{item}
-                </foreach>
-            </if>
         </where>
         order by a.create_time desc
     </select>

+ 6 - 0
distributed-print-business/src/main/resources/mapper/TSyncExamStudentScoreMapper.xml

@@ -84,4 +84,10 @@
         <include refid="middleCommonSql"/>
         <include refid="footCommonSql"/>
     </select>
+
+    <select id="exportCount" resultType="java.lang.Integer">
+        select count(1) from t_sync_exam_student_score tsess
+        <include refid="middleCommonSql"/>
+        <include refid="footCommonSql"/>
+    </select>
 </mapper>

+ 45 - 25
distributed-print/src/main/java/com/qmth/distributed/print/api/SysController.java

@@ -31,7 +31,6 @@ import io.swagger.annotations.*;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
@@ -52,14 +51,14 @@ import java.util.stream.Collectors;
 public class SysController {
     private final static Logger log = LoggerFactory.getLogger(SysController.class);
 
-    @Autowired
-    private SysUserService sysUserService;
+    @Resource
+    SysUserService sysUserService;
 
-    @Autowired
-    private BasicVerifyCodeService basicVerifyCodeService;
+    @Resource
+    BasicVerifyCodeService basicVerifyCodeService;
 
-    @Autowired
-    private DictionaryConfig dictionaryConfig;
+    @Resource
+    DictionaryConfig dictionaryConfig;
 
     @Resource
     CommonCacheService commonCacheService;
@@ -73,8 +72,8 @@ public class SysController {
     @Resource
     BasicAttachmentService basicAttachmentService;
 
-    @Autowired
-    private SysUserRoleService sysUserRoleService;
+    @Resource
+    SysUserRoleService sysUserRoleService;
 
     @Resource
     TeachcloudCommonService teachcloudCommonService;
@@ -100,6 +99,9 @@ public class SysController {
     @Resource
     TBSyncTaskService tbSyncTaskService;
 
+    @Resource
+    BasicCampusService basicCampusService;
+
     /**
      * 登录
      *
@@ -276,13 +278,13 @@ public class SysController {
     public Result fileDownload(@ApiParam(value = "任务id", required = true) @RequestParam String id,
                                @ApiParam(value = "下载文件类型", required = true) @RequestParam DownloadFileEnum type) {
         String path = null;
-        if (DownloadFileEnum.SYNC_REPORT.equals(type)){
+        if (DownloadFileEnum.SYNC_REPORT.equals(type)) {
             TBSyncTask tbSyncTask = tbSyncTaskService.getById(SystemConstant.convertIdToLong(id));
-            if (Objects.isNull(tbSyncTask)){
+            if (Objects.isNull(tbSyncTask)) {
                 throw ExceptionResultEnum.SYNC_TASK_NO_DATA.exception();
             }
             path = tbSyncTask.getReportFilePath();
-        }else {
+        } else {
             TBTask tbTask = tbTaskService.getById(Long.parseLong(id));
             if (Objects.isNull(tbTask)) {
                 throw ExceptionResultEnum.TASK_NO_DATA.exception();
@@ -342,7 +344,8 @@ public class SysController {
     @ApiOperation(value = "共用接口-查询字典")
     @RequestMapping(value = "/get_dictionary", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
-    public Result findDictionaryList(@ApiParam(value = "学期id") @RequestParam(required = false) String semesterId,
+    public Result findDictionaryList(@ApiParam(value = "校区id") @RequestParam(required = false) String campusId,
+                                     @ApiParam(value = "学期id") @RequestParam(required = false) String semesterId,
                                      @ApiParam(value = "学院id") @RequestParam(required = false) String collegeId,
                                      @ApiParam(value = "专业id") @RequestParam(required = false) String majorId,
                                      @ApiParam(value = "班级id") @RequestParam(required = false) String clazzId,
@@ -351,6 +354,16 @@ public class SysController {
         Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
         List<DictionaryResult> dictionaryResultList = new ArrayList<>();
         switch (dictionaryEnum) {
+            case CAMPUS:
+                List<BasicCampus> basicCampusList = basicCampusService.list(new QueryWrapper<BasicCampus>().lambda().eq(BasicCampus::getSchoolId, schoolId));
+                dictionaryResultList = basicCampusList.stream().map(e -> {
+                    DictionaryResult dictionaryResult = new DictionaryResult();
+                    dictionaryResult.setName(e.getCampusName());
+                    dictionaryResult.setCode(e.getCampusCode());
+                    dictionaryResult.setId(e.getId());
+                    return dictionaryResult;
+                }).collect(Collectors.toList());
+                break;
             case SEMESTER:
                 List<BasicSemester> basicSemesterList = basicSemesterService.list(new QueryWrapper<BasicSemester>().lambda().eq(BasicSemester::getSchoolId, schoolId).eq(BasicSemester::getEnable, true));
                 dictionaryResultList = basicSemesterList.stream().map(e -> {
@@ -367,18 +380,19 @@ public class SysController {
                     examPrintPlanQueryWrapper.select(" DISTINCT org_id as orgId ")
                             .eq("semester_id", SystemConstant.convertIdToLong(semesterId));
                     List<ExamPrintPlan> examPrintPlanList = examPrintPlanService.list(examPrintPlanQueryWrapper);
-                    Set<Long> orgIdSet = examPrintPlanList.stream().map(s -> s.getOrgId()).collect(Collectors.toSet());
-
-                    QueryWrapper<SysOrg> sysOrgQueryWrapper = new QueryWrapper<>();
-                    sysOrgQueryWrapper.lambda().in(SysOrg::getId, orgIdSet);
-                    List<SysOrg> sysOrgList = sysOrgService.list(sysOrgQueryWrapper);
-                    dictionaryResultList = sysOrgList.stream().map(e -> {
-                        DictionaryResult dictionaryResult = new DictionaryResult();
-                        dictionaryResult.setId(e.getId());
-                        dictionaryResult.setCode(e.getCode());
-                        dictionaryResult.setName(e.getName());
-                        return dictionaryResult;
-                    }).collect(Collectors.toList());
+                    if (Objects.nonNull(examPrintPlanList) && examPrintPlanList.size() > 0) {
+                        Set<Long> orgIdSet = examPrintPlanList.stream().map(s -> s.getOrgId()).collect(Collectors.toSet());
+                        QueryWrapper<SysOrg> sysOrgQueryWrapper = new QueryWrapper<>();
+                        sysOrgQueryWrapper.lambda().in(SysOrg::getId, orgIdSet);
+                        List<SysOrg> sysOrgList = sysOrgService.list(sysOrgQueryWrapper);
+                        dictionaryResultList = sysOrgList.stream().map(e -> {
+                            DictionaryResult dictionaryResult = new DictionaryResult();
+                            dictionaryResult.setId(e.getId());
+                            dictionaryResult.setCode(e.getCode());
+                            dictionaryResult.setName(e.getName());
+                            return dictionaryResult;
+                        }).collect(Collectors.toList());
+                    }
                 } else {
                     List<SysOrg> sysOrgList = sysOrgService.list(new QueryWrapper<SysOrg>().lambda().eq(SysOrg::getSchoolId, schoolId).eq(SysOrg::getEnable, true));
                     dictionaryResultList = sysOrgList.stream().map(e -> {
@@ -411,6 +425,9 @@ public class SysController {
             case CLAZZ:
                 QueryWrapper<BasicClazz> clazzQueryWrapper = new QueryWrapper<>();
                 clazzQueryWrapper.lambda().eq(BasicClazz::getSchoolId, schoolId).eq(BasicClazz::getEnable, true);
+                if (SystemConstant.longNotNull(SystemConstant.convertIdToLong(campusId))) {
+                    clazzQueryWrapper.lambda().eq(BasicClazz::getCampusId, campusId);
+                }
                 if (SystemConstant.longNotNull(SystemConstant.convertIdToLong(majorId))) {
                     clazzQueryWrapper.lambda().eq(BasicClazz::getMajorId, majorId);
                 }
@@ -426,6 +443,9 @@ public class SysController {
             case STUDENT:
                 QueryWrapper<BasicStudent> studentQueryWrapper = new QueryWrapper<>();
                 studentQueryWrapper.lambda().eq(BasicStudent::getSchoolId, schoolId).eq(BasicStudent::getEnable, true);
+                if (SystemConstant.longNotNull(SystemConstant.convertIdToLong(campusId))) {
+                    studentQueryWrapper.lambda().eq(BasicStudent::getCampusId, campusId);
+                }
                 if (SystemConstant.longNotNull(SystemConstant.convertIdToLong(collegeId))) {
                     studentQueryWrapper.lambda().eq(BasicStudent::getBelongOrgId, collegeId);
                 }

+ 19 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/TSyncExamStudentScoreController.java

@@ -111,6 +111,15 @@ public class TSyncExamStudentScoreController {
                          @ApiParam(value = "专业id", required = false) @RequestParam(required = false) String majorId,
                          @ApiParam(value = "班级id", required = false) @RequestParam(required = false) String clazzId,
                          @ApiParam(value = "课程编码", required = false) @RequestParam(required = false) String courseCode) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        int count = tSyncExamStudentScoreService.exportCount(sysUser.getSchoolId()
+                , SystemConstant.convertIdToLong(semesterId)
+                , SystemConstant.convertIdToLong(orgId)
+                , SystemConstant.convertIdToLong(majorId)
+                , SystemConstant.convertIdToLong(clazzId), courseCode);
+        if (count == 0) {
+            throw ExceptionResultEnum.ERROR.exception("没有成绩信息");
+        }
         Map<String, Object> map = printCommonService.saveTask(TaskTypeEnum.SCORE_EXPORT);
         map.computeIfAbsent("semesterId", v -> SystemConstant.convertIdToLong(semesterId));
         map.computeIfAbsent("orgId", v -> SystemConstant.convertIdToLong(orgId));
@@ -153,7 +162,7 @@ public class TSyncExamStudentScoreController {
         map.computeIfAbsent("subjectCode", v -> courseCode);
         map.computeIfAbsent("college", v -> sysOrg.getName());
         BasicClazz finalBasicClazz = basicClazz;
-        map.computeIfAbsent("className", v -> finalBasicClazz.getClazzName());
+        map.computeIfAbsent("className", v -> Objects.nonNull(finalBasicClazz) ? finalBasicClazz.getClazzName() : null);
         asyncScorePushService.pushTask(map);
         TBSyncTask tbSyncTask = Objects.nonNull(map.get(SystemConstant.TB_SYNC_TASK)) ? (TBSyncTask) map.get(SystemConstant.TB_SYNC_TASK) : null;
         return Objects.nonNull(tbSyncTask) ? ResultUtil.ok(tbSyncTask.getId()) : ResultUtil.error("创建同步推送任务失败");
@@ -187,6 +196,15 @@ public class TSyncExamStudentScoreController {
                                 @ApiParam(value = "专业id", required = false) @RequestParam(required = false) String majorId,
                                 @ApiParam(value = "班级id", required = false) @RequestParam(required = false) String clazzId,
                                 @ApiParam(value = "课程编码", required = false) @RequestParam(required = false) String courseCode) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        int count = tSyncExamStudentScoreService.exportCount(sysUser.getSchoolId()
+                , SystemConstant.convertIdToLong(semesterId)
+                , SystemConstant.convertIdToLong(orgId)
+                , SystemConstant.convertIdToLong(majorId)
+                , SystemConstant.convertIdToLong(clazzId), courseCode);
+        if (count == 0) {
+            throw ExceptionResultEnum.ERROR.exception("没有成绩信息");
+        }
         Map<String, Object> map = printCommonService.saveTask(TaskTypeEnum.SCORE_DOWNLOAD);
         map.computeIfAbsent("semesterId", v -> SystemConstant.convertIdToLong(semesterId));
         map.computeIfAbsent("orgId", v -> SystemConstant.convertIdToLong(orgId));

+ 2 - 1
distributed-print/src/test/java/com/qmth/distributed/print/SyncHelpTest.java

@@ -39,7 +39,8 @@ public class SyncHelpTest {
             }else {
                 userPushParam.setRole(SpecialPrivilegeEnum.SUBJECT_HEADER);
             }
-            stmmsUtils.syncUser(userPushParam,2L);
+            userPushParam.setSchoolId(2L);
+            stmmsUtils.syncUser(userPushParam);
         }
     }
 

+ 13 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/UserPushParam.java

@@ -37,6 +37,11 @@ public class UserPushParam {
     @ApiModelProperty(value = "科组长关联科目,科目代码用,分割,例如ASC,WED")
     private String subjectCodes;
 
+    @ApiModelProperty(value = "学校id")
+    @DBVerify(value = "学校id",required = true)
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long schoolId;
+
     public UserPushParam() {
     }
 
@@ -95,4 +100,12 @@ public class UserPushParam {
     public void setSubjectCodes(String subjectCodes) {
         this.subjectCodes = subjectCodes;
     }
+
+    public Long getSchoolId() {
+        return schoolId;
+    }
+
+    public void setSchoolId(Long schoolId) {
+        this.schoolId = schoolId;
+    }
 }

+ 6 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/BasicStudent.java

@@ -34,13 +34,17 @@ public class BasicStudent extends BaseEntity implements Serializable {
     private String studentCode;
 
     @ApiModelProperty(value = "电话号码")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private String phoneNumber;
 
     @ApiModelProperty(value = "校区主键")
     @JsonSerialize(using = ToStringSerializer.class)
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private Long campusId;
 
     @ApiModelProperty(value = "班级id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private Long clazzId;
 
     @ApiModelProperty(value = "可用状态(1:可用,0:不可用)")
@@ -48,15 +52,16 @@ public class BasicStudent extends BaseEntity implements Serializable {
 
     @ApiModelProperty(value = "可操作人机构id")
     @JsonSerialize(using = ToStringSerializer.class)
-    @TableField(value = "org_id", updateStrategy = FieldStrategy.IGNORED)
     private Long orgId;
 
     @ApiModelProperty(value = "所属机构id")
     @JsonSerialize(using = ToStringSerializer.class)
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private Long belongOrgId;
 
     @ApiModelProperty(value = "专业id")
     @JsonSerialize(using = ToStringSerializer.class)
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private Long majorId;
 
     public Long getBelongOrgId() {

+ 37 - 37
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicStudentServiceImpl.java

@@ -48,12 +48,12 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
     private BasicCampusService basicCampusService;
 
     @Override
-    public IPage<BasicStudentResult> basicStudentPage(String queryParams,Long campusId, Set<Long> clazzIdList,int pageNumber, int pageSize) {
+    public IPage<BasicStudentResult> basicStudentPage(String queryParams, Long campusId, Set<Long> clazzIdList, int pageNumber, int pageSize) {
         Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
 //        Set<Long> orgIds = teachcloudCommonService.listSubOrgIds(null);
         Set<Long> orgIds = null;
         queryParams = SystemConstant.translateSpecificSign(queryParams);
-        return basicStudentMapper.findBasicStudentPage(new Page<>(pageNumber, pageSize), queryParams, schoolId,campusId, clazzIdList,orgIds);
+        return basicStudentMapper.findBasicStudentPage(new Page<>(pageNumber, pageSize), queryParams, schoolId, campusId, clazzIdList, orgIds);
     }
 
     @Override
@@ -85,7 +85,7 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
         if (idList.size() == 0) {
             throw ExceptionResultEnum.ERROR.exception("请选择要删除的目标");
         }
-        return this.remove(new QueryWrapper<BasicStudent>().lambda().in(BasicStudent::getId,idList));
+        return this.remove(new QueryWrapper<BasicStudent>().lambda().in(BasicStudent::getId, idList));
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -95,13 +95,13 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
         Long schoolId = sysUser.getSchoolId();
         final String link = "-";
         // key = campusName
-        Map<String,BasicCampus> campusMap = new HashMap<>();
+        Map<String, BasicCampus> campusMap = new HashMap<>();
         // key = collegeName
-        Map<String,SysOrg> collegeMap = new HashMap<>();
+        Map<String, SysOrg> collegeMap = new HashMap<>();
         // key = collegeId + "-" + majorName
-        Map<String,Long> majorMap = new HashMap<>();
+        Map<String, Long> majorMap = new HashMap<>();
         // key = majorId + "-" + clazzName
-        Map<String,Long> clazzMap = new HashMap<>();
+        Map<String, Long> clazzMap = new HashMap<>();
 
         List<BasicStudentParams> addBasicStudentParamsList = new ArrayList<>();
         for (int i = 0; i < finalList.size(); i++) {
@@ -109,7 +109,7 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
             List<Object> basicStudentImportDtoList = excelMap.get(i);
 
             assert basicStudentImportDtoList != null;
-            if (basicStudentImportDtoList.get(0) instanceof DescribeImportDto){
+            if (basicStudentImportDtoList.get(0) instanceof DescribeImportDto) {
                 continue;
             }
             List<BasicStudentImportDto> datasource = basicStudentImportDtoList.stream().map(e -> {
@@ -141,7 +141,7 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
                         basicCampus = basicCampusService.getOne(new QueryWrapper<BasicCampus>().lambda()
                                 .eq(BasicCampus::getSchoolId, schoolId)
                                 .eq(BasicCampus::getCampusName, campusName));
-                        if (Objects.isNull(basicCampus)){
+                        if (Objects.isNull(basicCampus)) {
                             throw ExceptionResultEnum.ERROR.exception("系统中不存在【校区】:" + campusName);
                         }
                         campusMap.put(campusName, basicCampus);
@@ -151,7 +151,7 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
 
                 // 学院
                 Long collegeId = null;
-                if (SystemConstant.strNotNull(collegeName)){
+                if (SystemConstant.strNotNull(collegeName)) {
                     SysOrg sysOrg;
                     if (collegeMap.containsKey(collegeName)) {
                         sysOrg = collegeMap.get(collegeName);
@@ -159,7 +159,7 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
                         sysOrg = sysOrgService.getOne(new QueryWrapper<SysOrg>().lambda()
                                 .eq(SysOrg::getSchoolId, schoolId)
                                 .eq(SysOrg::getName, collegeName));
-                        if (Objects.isNull(sysOrg)){
+                        if (Objects.isNull(sysOrg)) {
                             throw ExceptionResultEnum.ERROR.exception("系统中不存在【学院】:" + collegeName);
                         }
                         collegeMap.put(collegeName, sysOrg);
@@ -196,36 +196,36 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
 
                 // 班级
                 Long clazzId = null;
-                if (SystemConstant.strNotNull(clazzName)){
-                    if (!SystemConstant.longNotNull(campusId)){
+                if (SystemConstant.strNotNull(clazzName)) {
+                    if (!SystemConstant.longNotNull(campusId)) {
                         throw ExceptionResultEnum.ERROR.exception("学生班级信息缺失校区信息异常");
                     }
-                    if (!SystemConstant.longNotNull(collegeId)){
+                    if (!SystemConstant.longNotNull(collegeId)) {
                         throw ExceptionResultEnum.ERROR.exception("学生班级信息缺失学院信息异常");
                     }
-                    if (!SystemConstant.longNotNull(majorId)){
+                    if (!SystemConstant.longNotNull(majorId)) {
                         throw ExceptionResultEnum.ERROR.exception("学生班级信息缺失专业信息异常");
                     }
 
                     String clazzKey = majorId + link + clazzName;
-                    if (clazzMap.containsKey(clazzKey)){
+                    if (clazzMap.containsKey(clazzKey)) {
                         clazzId = clazzMap.get(clazzKey);
-                    }else {
+                    } else {
                         BasicClazz basicClazz = basicClazzService.getOne(new QueryWrapper<BasicClazz>().lambda()
-                                .eq(BasicClazz::getSchoolId,schoolId)
-                                .eq(BasicClazz::getMajorId,majorId)
-                                .eq(BasicClazz::getClazzName,clazzName));
-                        if (Objects.isNull(basicClazz)){
+                                .eq(BasicClazz::getSchoolId, schoolId)
+                                .eq(BasicClazz::getMajorId, majorId)
+                                .eq(BasicClazz::getClazzName, clazzName));
+                        if (Objects.isNull(basicClazz)) {
                             // 新增一个clazz
                             BasicClazzParams basicClazzParams = new BasicClazzParams();
                             basicClazzParams.setCampusId(campusId);
                             basicClazzParams.setMajorId(majorId);
                             basicClazzParams.setClazzName(clazzName);
-                            clazzId = basicClazzService.saveBasicClazz(basicClazzParams,sysUser);
-                        }else {
+                            clazzId = basicClazzService.saveBasicClazz(basicClazzParams, sysUser);
+                        } else {
                             clazzId = basicClazz.getId();
                         }
-                        clazzMap.put(clazzKey,clazzId);
+                        clazzMap.put(clazzKey, clazzId);
                     }
                 }
                 // 学生信息组装
@@ -233,16 +233,16 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
                 basicStudentParams.setStudentName(studentName);
                 basicStudentParams.setStudentCode(studentCode);
                 basicStudentParams.setPhoneNumber(phoneNumber);
-                if (SystemConstant.longNotNull(campusId)){
+                if (SystemConstant.longNotNull(campusId)) {
                     basicStudentParams.setCampusId(campusId);
                 }
-                if (SystemConstant.longNotNull(collegeId)){
+                if (SystemConstant.longNotNull(collegeId)) {
                     basicStudentParams.setCollegeId(collegeId);
                 }
-                if (SystemConstant.longNotNull(majorId)){
+                if (SystemConstant.longNotNull(majorId)) {
                     basicStudentParams.setMajorId(majorId);
                 }
-                if (SystemConstant.longNotNull(clazzId)){
+                if (SystemConstant.longNotNull(clazzId)) {
                     basicStudentParams.setClazzId(clazzId);
                 }
 
@@ -283,19 +283,19 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
             Long collegeId = basicStudentParams.getCollegeId();
 
             // 班级验证
-            if (SystemConstant.longNotNull(clazzId)){
+            if (SystemConstant.longNotNull(clazzId)) {
                 // 如果有班级id 再验证
                 BasicClazz basicClazz = basicClazzService.getById(clazzId);
                 if (Objects.isNull(basicClazz)) {
                     throw ExceptionResultEnum.ERROR.exception("所选班级不存在");
                 }
-                if (SystemConstant.longNotNull(campusId)){
-                    if (!campusId.equals(basicClazz.getCampusId())){
+                if (SystemConstant.longNotNull(campusId)) {
+                    if (!campusId.equals(basicClazz.getCampusId())) {
                         throw ExceptionResultEnum.ERROR.exception("学生所属班级信息和学生信息中【校区】不对应");
                     }
                 }
-                if (SystemConstant.longNotNull(majorId)){
-                    if (!majorId.equals(basicClazz.getMajorId())){
+                if (SystemConstant.longNotNull(majorId)) {
+                    if (!majorId.equals(basicClazz.getMajorId())) {
                         throw ExceptionResultEnum.ERROR.exception("学生所属班级信息和学生信息中【专业】不对应");
                     }
                 }
@@ -303,13 +303,13 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
 
 
             // 专业验证
-            if (SystemConstant.longNotNull(majorId)){
+            if (SystemConstant.longNotNull(majorId)) {
                 BasicMajor basicMajor = basicMajorService.getById(majorId);
                 if (Objects.isNull(basicMajor)) {
                     throw ExceptionResultEnum.ERROR.exception("所选专业不存在");
                 }
-                if (SystemConstant.longNotNull(collegeId)){
-                    if (!collegeId.equals(basicMajor.getBelongOrgId())){
+                if (SystemConstant.longNotNull(collegeId)) {
+                    if (!collegeId.equals(basicMajor.getBelongOrgId())) {
                         throw ExceptionResultEnum.ERROR.exception("学生所属专业信息和学生信息中【学院】不对应");
                     }
                 }
@@ -328,7 +328,7 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
             }
 
             // 检验有值的电话在学校的唯一性
-            if (SystemConstant.strNotNull(phoneNumber)){
+            if (SystemConstant.strNotNull(phoneNumber)) {
                 BasicStudent checkPhone = this.getOne(new QueryWrapper<BasicStudent>().lambda()
                         .eq(BasicStudent::getSchoolId, schoolId)
                         .eq(BasicStudent::getPhoneNumber, phoneNumber)

+ 11 - 7
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/OrgCenterDataDisposeServiceImpl.java

@@ -7,13 +7,19 @@ import com.qmth.teachcloud.common.entity.BasicSchool;
 import com.qmth.teachcloud.common.entity.SysOrg;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.OrgTypeEnum;
-import com.qmth.teachcloud.common.service.*;
+import com.qmth.teachcloud.common.service.BasicSchoolService;
+import com.qmth.teachcloud.common.service.CallApiOrgCenterService;
+import com.qmth.teachcloud.common.service.OrgCenterDataDisposeService;
+import com.qmth.teachcloud.common.service.SysOrgService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.io.IOException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -29,8 +35,6 @@ public class OrgCenterDataDisposeServiceImpl implements OrgCenterDataDisposeServ
     private BasicSchoolService basicSchoolService;
     @Resource
     private SysOrgService sysOrgService;
-    @Resource
-    private TeachcloudCommonService teachcloudCommonService;
 
     @Transactional(rollbackFor = Exception.class)
     @Override
@@ -74,14 +78,14 @@ public class OrgCenterDataDisposeServiceImpl implements OrgCenterDataDisposeServ
                 schoolId = oldSchool.getId();
             } else {
                 // 系统中没有该学校 -》 新增 (优先使用机构中心id如果该id在系统中已经被占用则会使用分布式id)
-                if (basicSchoolList.stream().map(BaseEntity::getId).collect(Collectors.toSet()).contains(orgCenterAppSchoolId)){
+                if (basicSchoolList.stream().map(BaseEntity::getId).collect(Collectors.toSet()).contains(orgCenterAppSchoolId)) {
                     schoolId = SystemConstant.getDbUuid();
-                }else {
+                } else {
                     schoolId = orgCenterAppSchoolId;
                 }
             }
             // 断言schoolId非空
-            if (!SystemConstant.longNotNull(schoolId)){
+            if (!SystemConstant.longNotNull(schoolId)) {
                 throw ExceptionResultEnum.ERROR.exception();
             }
 

+ 1 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/PushUserTrackServiceImpl.java

@@ -163,6 +163,7 @@ public class PushUserTrackServiceImpl extends ServiceImpl<PushUserTrackMapper, P
 
                 UserPushParam cell = new UserPushParam();
                 cell.setUserId(userId);
+                cell.setSchoolId(currentUser.getSchoolId());
                 cell.setName(currentUser.getRealName());
                 cell.setPassword(currentUser.getPassword());
                 cell.setRole(identify);

+ 46 - 45
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java

@@ -131,7 +131,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
     @Transactional
     @Override
-    public boolean saveUser(UserSaveParams userSaveParams) {
+    public boolean saveUser(UserSaveParams userSaveParams) throws IllegalAccessException {
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         Long oldId = userSaveParams.getId();
         Set<Long> dbRoleIdSet = new HashSet<>();
@@ -144,9 +144,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         Long upUserId = saveUserCommon(userSaveParams, null);
         if (SystemConstant.longNotNull(upUserId)) {
             result = true;
-            List<PushUserTrack> pushUserTrackList = pushUserTrackService.createPushTrackUser(dbRoleIdSet,currentRoleIdSet,upUserId,this.getById(upUserId).getEnable(),requestUser.getId());
+            List<PushUserTrack> pushUserTrackList = pushUserTrackService.createPushTrackUser(dbRoleIdSet, currentRoleIdSet, upUserId, this.getById(upUserId).getEnable(), requestUser.getId());
             List<UserPushParam> userPushParamList = pushUserTrackService.analyzeUserPushSpecialPrivilege(pushUserTrackList);
-            if (userPushParamList != null && userPushParamList.size() > 0){
+            if (userPushParamList != null && userPushParamList.size() > 0) {
                 this.userPushService(userPushParamList, requestUser.getId());
             }
         }
@@ -166,7 +166,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             commonService.removeUserInfo(user.getId(), true);
         }
         if (success) {
-            this.analyzeUserEnableSpecialPrivilege(user.getId(), user.getEnable(),requestUser.getId());
+            this.analyzeUserEnableSpecialPrivilege(user.getId(), user.getEnable(), requestUser.getId());
         }
         return success;
     }
@@ -664,11 +664,11 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     /**
      * 过滤拥有审核权限的人
      *
-     * @param schoolId schoolId
-     * @param orgIds orgIds
-     * @param filter filter
+     * @param schoolId    schoolId
+     * @param orgIds      orgIds
+     * @param filter      filter
      * @param approveName approveName
-     * @param realName realName
+     * @param realName    realName
      * @return return
      */
     @Override
@@ -728,9 +728,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                 if (SystemConstant.longNotNull(upUserId)) {
 
                     Set<Long> currentRoleIdSet = new HashSet<>(Arrays.asList(userSaveParams.getRoleIds()));
-                    List<PushUserTrack> pushUserTrackList = pushUserTrackService.createPushTrackUser(oldRoleIdSet,currentRoleIdSet,upUserId,true,requestUser.getId());
+                    List<PushUserTrack> pushUserTrackList = pushUserTrackService.createPushTrackUser(oldRoleIdSet, currentRoleIdSet, upUserId, true, requestUser.getId());
                     List<UserPushParam> userPushParamCell = pushUserTrackService.analyzeUserPushSpecialPrivilege(pushUserTrackList);
-                    if (userPushParamCell != null && userPushParamCell.size() > 0){
+                    if (userPushParamCell != null && userPushParamCell.size() > 0) {
                         userPushParamList.addAll(userPushParamCell);
                     }
                 }
@@ -769,7 +769,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
      * 获取命题审批人
      *
      * @param courseCode courseCode
-     * @param realName realName
+     * @param realName   realName
      * @return return
      */
     @Override
@@ -792,7 +792,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
      * 获取教研室主任审批人
      *
      * @param courseCode courseCode
-     * @param realName realName
+     * @param realName   realName
      * @return return
      */
     @Override
@@ -821,7 +821,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     /**
      * 获取院长审批人
      *
-     * @param orgIds orgIds
+     * @param orgIds   orgIds
      * @param realName realName
      * @return return
      */
@@ -847,9 +847,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     /**
      * 获取同级别下一级审批人
      *
-     * @param courseCode courseCode
-     * @param orgIds orgIds
-     * @param realName realName
+     * @param courseCode          courseCode
+     * @param orgIds              orgIds
+     * @param realName            realName
      * @param flowApproveNameEnum flowApproveNameEnum
      * @return return
      */
@@ -940,21 +940,21 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
     @Transactional
     @Override
-    public boolean userPushService(List<UserPushParam> userPushParamList, Long requestUserId) {
+    public boolean userPushService(List<UserPushParam> userPushParamList, Long requestUserId) throws IllegalAccessException {
         SysUser requestUser = this.getById(requestUserId);
-        if (Objects.isNull(requestUser)){
+        if (Objects.isNull(requestUser)) {
             log.error("未找到请求用户信息 requestUserId = " + requestUserId);
             throw ExceptionResultEnum.ERROR.exception("未找到请求用户信息");
         }
         boolean result = true;
         for (UserPushParam userPushParam : userPushParamList) {
-            boolean syncResult = stmmsUtils.syncUser(userPushParam, requestUser.getSchoolId());
+            boolean syncResult = stmmsUtils.syncUser(userPushParam);
             if (!syncResult) {
                 log.warn("-----------------------------用户同步推送失败----------------------------");
                 result = false;
                 PushUserError pushUserError = new PushUserError();
                 pushUserError.setId(SystemConstant.getDbUuid());
-                pushUserError.setSchoolId(requestUser.getSchoolId());
+                pushUserError.setSchoolId(userPushParam.getSchoolId());
                 pushUserError.setUserId(userPushParam.getUserId());
                 pushUserError.setAccount(userPushParam.getAccount());
                 pushUserError.setName(userPushParam.getName());
@@ -972,24 +972,24 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
     @Transactional
     @Override
-    public void autoPushUserErrorData() {
+    public void autoPushUserErrorData() throws IllegalAccessException {
         List<PushUserError> pushUserErrorList = pushUserErrorService.list();
         Set<Long> userIdSet = pushUserErrorList.stream().map(PushUserError::getUserId).collect(Collectors.toSet());
-        List<SysUser> sysUserList = this.listByIds(userIdSet);
-        // 清空push-user-error表
-        pushUserErrorService.remove(new QueryWrapper<PushUserError>().lambda().in(PushUserError::getUserId, userIdSet));
-        for (SysUser sysUser : sysUserList) {
-            if (!SyncStatusEnum.NEED_PUSH_AGAIN.equals(sysUser.getSyncStatus())) {
-                // 用户同步状态不为需要重新同步的错误数据再同步(防止和需要重新同步类型的数据冲突或因为权限改动导致的反复同步!)
-                Long userId = sysUser.getId();
-                Long schoolId = sysUser.getSchoolId();
-                Set<Long> roleIdSet = sysUserRoleService.listRoleByUserId(userId).stream().map(BaseEntity::getId).collect(Collectors.toSet());
-
-                // TODO: 2021/11/4 系统管理员的id判断
-                Long requestUserId = 1L; // 系统管理员
-                List<PushUserTrack> pushUserTrackList = pushUserTrackService.createPushTrackUser(null,roleIdSet,userId,sysUser.getEnable(),requestUserId);
-                List<UserPushParam> userPushParamList = pushUserTrackService.analyzeUserPushSpecialPrivilege(pushUserTrackList);
-                this.userPushService(userPushParamList, requestUserId);
+        if (userIdSet.size() > 0) {
+            List<SysUser> sysUserList = this.listByIds(userIdSet);
+            // 清空push-user-error表
+            pushUserErrorService.remove(new QueryWrapper<PushUserError>().lambda().in(PushUserError::getUserId, userIdSet));
+            for (SysUser sysUser : sysUserList) {
+                if (!SyncStatusEnum.NEED_PUSH_AGAIN.equals(sysUser.getSyncStatus())) {
+                    // 用户同步状态不为需要重新同步的错误数据再同步(防止和需要重新同步类型的数据冲突或因为权限改动导致的反复同步!)
+                    Long userId = sysUser.getId();
+                    Set<Long> roleIdSet = sysUserRoleService.listRoleByUserId(userId).stream().map(BaseEntity::getId).collect(Collectors.toSet());
+
+                    Long requestUserId = 1L; // 系统管理员
+                    List<PushUserTrack> pushUserTrackList = pushUserTrackService.createPushTrackUser(null, roleIdSet, userId, sysUser.getEnable(), requestUserId);
+                    List<UserPushParam> userPushParamList = pushUserTrackService.analyzeUserPushSpecialPrivilege(pushUserTrackList);
+                    this.userPushService(userPushParamList, requestUserId);
+                }
             }
         }
     }
@@ -1037,7 +1037,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     public SyncCountResult needPushAgainOperate(SysUser requestUser) throws IllegalAccessException {
         int correctCount = 0;
         int totalCount = 0;
-        if (Objects.isNull(requestUser)){
+        if (Objects.isNull(requestUser)) {
             throw ExceptionResultEnum.ERROR.exception("未找到请求用户");
         }
         Long schoolId = requestUser.getSchoolId();
@@ -1045,8 +1045,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         // 需要同步的用户
         QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(SysUser::getSyncStatus, SyncStatusEnum.NEED_PUSH_AGAIN);
-        if (SystemConstant.longNotNull(schoolId)){
-            queryWrapper.lambda().eq(SysUser::getSchoolId,schoolId);
+        if (SystemConstant.longNotNull(schoolId)) {
+            queryWrapper.lambda().eq(SysUser::getSchoolId, schoolId);
         }
         List<SysUser> sysUserList = sysUserService.list(queryWrapper);
         totalCount = sysUserList.size();
@@ -1189,20 +1189,21 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
     /**
      * 用户禁用启用特殊权限判断及处理
-     * @param userId 用户id
-     * @param enable 启用/禁用
+     *
+     * @param userId        用户id
+     * @param enable        启用/禁用
      * @param requestUserId 请求人id
      */
-    private void analyzeUserEnableSpecialPrivilege(Long userId, boolean enable,Long requestUserId) {
+    private void analyzeUserEnableSpecialPrivilege(Long userId, boolean enable, Long requestUserId) throws IllegalAccessException {
         SysUser dbUser = sysUserService.getById(userId);
         if (Objects.isNull(dbUser)) {
             throw ExceptionResultEnum.ERROR.exception("未找到系统用户");
         }
         Set<Long> currentRoleIdSet = new HashSet<>(sysRoleService.getUserRoles(userId));
-        List<PushUserTrack> pushUserTrackList = pushUserTrackService.createPushTrackUser(null,currentRoleIdSet,userId,enable,requestUserId);
+        List<PushUserTrack> pushUserTrackList = pushUserTrackService.createPushTrackUser(null, currentRoleIdSet, userId, enable, requestUserId);
         List<UserPushParam> userPushParamList = pushUserTrackService.analyzeUserPushSpecialPrivilege(pushUserTrackList);
-        if (userPushParamList != null && userPushParamList.size() > 0){
-            this.userPushService(userPushParamList,requestUserId);
+        if (userPushParamList != null && userPushParamList.size() > 0) {
+            this.userPushService(userPushParamList, requestUserId);
         }
     }
 }

+ 7 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/sync/StmmsUtils.java

@@ -6,6 +6,7 @@ import com.qmth.teachcloud.common.SignatureEntityTest;
 import com.qmth.teachcloud.common.bean.dto.PaperDTO;
 import com.qmth.teachcloud.common.bean.dto.QuestionDTO;
 import com.qmth.teachcloud.common.bean.params.UserPushParam;
+import com.qmth.teachcloud.common.bean.result.DBVerifyResult;
 import com.qmth.teachcloud.common.config.DictionaryConfig;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicSchool;
@@ -79,12 +80,17 @@ public class StmmsUtils {
         }
     }
 
-    public boolean syncUser(UserPushParam userPushParam, Long schoolId) {
+    public boolean syncUser(UserPushParam userPushParam) throws IllegalAccessException {
+        DBVerifyResult verifyResult = SystemConstant.verifyDBFields(userPushParam,userPushParam.getClass());
+        if (!verifyResult.getStatus()){
+            throw ExceptionResultEnum.ERROR.exception(verifyResult.getMessage());
+        }
         String account = userPushParam.getAccount();
         String name = userPushParam.getName();
         String password = userPushParam.getPassword();
         int roleValue = userPushParam.getRole().getValue();
         Boolean enable = userPushParam.getEnable();
+        Long schoolId = userPushParam.getSchoolId();
 
 
         String hostUrl = dictionaryConfig.syncDataDomain().getHostUrl();

+ 0 - 3
teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/service/impl/JobServiceImpl.java

@@ -59,9 +59,6 @@ public class JobServiceImpl implements JobService {
     @Autowired
     DataSyncService dataSyncService;
 
-    @Autowired
-    private SysConfigService sysConfigService;
-
     @Resource
     RedisUtil redisUtil;
 

+ 5 - 0
teachcloud-task/src/main/java/com/qmth/teachcloud/task/start/StartRunning.java

@@ -1,5 +1,6 @@
 package com.qmth.teachcloud.task.start;
 
+import com.qmth.distributed.print.business.service.PrintCommonService;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.task.enums.JobEnum;
 import com.qmth.teachcloud.task.job.*;
@@ -31,11 +32,15 @@ public class StartRunning implements CommandLineRunner {
     @Resource
     JobService jobService;
 
+    @Resource
+    PrintCommonService printCommonService;
+
     @Override
     public void run(String... args) throws Exception {
         log.info("服务器启动时执行 start");
         SystemConstant.initTempFiles();
         jobService.machineHeart();
+        printCommonService.updateStatus();
 
         log.info("增加学校信息同步定时任务 start");
         Map schoolJobMap = new HashMap();

+ 4 - 1
teachcloud-task/src/main/resources/application-task.properties

@@ -128,4 +128,7 @@ spring.quartz.properties.org.quartz.threadPool.threadCount=10
 spring.quartz.properties.org.quartz.threadPool.threadPriority=5
 
 #\u914D\u7F6E\u6587\u4EF6
-#spring.profiles=task
+#spring.profiles=task
+sync.config.hostUrl=http://localhost:8081
+
+sync.config.userSaveUrl=/api/user/external/save