Bladeren bron

Merge remote-tracking branch 'origin/dev_v3.2.2' into dev_v3.2.2

wangliang 2 jaren geleden
bovenliggende
commit
8cb5120bd7

+ 10 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamCard.java

@@ -83,6 +83,8 @@ public class ExamCard extends BaseEntity implements Serializable {
 
     private Boolean enable;
 
+    private Boolean used;
+
     private String remark;
 
     @JsonSerialize(using = ToStringSerializer.class)
@@ -192,6 +194,14 @@ public class ExamCard extends BaseEntity implements Serializable {
         this.enable = enable;
     }
 
+    public Boolean getUsed() {
+        return used;
+    }
+
+    public void setUsed(Boolean used) {
+        this.used = used;
+    }
+
     public String getRemark() {
         return remark;
     }

+ 2 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamCardMapper.java

@@ -11,7 +11,6 @@ import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
-import java.util.Set;
 
 /**
  * <p>
@@ -27,9 +26,9 @@ public interface ExamCardMapper extends BaseMapper<ExamCard> {
 
     CardDetailDto getCardDetail(Long cardId);
 
-    List<ExamCard> listGenericCard(@Param("schoolId") Long schoolId, @Param("dpr") DataPermissionRule dpr, @Param("type") String type, @Param("cardRuleId") Long cardRuleId);
+    List<ExamCard> listGenericCard(@Param("schoolId") Long schoolId, @Param("type") String type, @Param("cardRuleId") Long cardRuleId);
 
-    List<ExamCard> listCustom(@Param("schoolId") Long schoolId, @Param("orgId") Long orgId, @Param("courseCode") String courseCode, @Param("type") String type);
+    List<ExamCard> listCustom(@Param("schoolId") Long schoolId, @Param("orgId") Long orgId, @Param("courseCode") String courseCode, @Param("type") String type, @Param("userId") Long userId);
 
     CardDetailDto getCardDetailBySelect(Long cardId);
 

+ 12 - 11
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardServiceImpl.java

@@ -259,30 +259,31 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
     public List<ExamCard> listSelectCard(String courseCode, Long cardRuleId, String paperNumber) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId,sysUser.getId(),ServletUtil.getRequest().getServletPath());
 
         // 通用题卡
         List<ExamCard> list = new ArrayList<>();
-        List<ExamCard> genericCards = this.baseMapper.listGenericCard(schoolId, dpr, CardTypeEnum.GENERIC.name(), cardRuleId);
+        List<ExamCard> genericCards = this.baseMapper.listGenericCard(schoolId, CardTypeEnum.GENERIC.name(), cardRuleId);
         if (!genericCards.isEmpty()) {
             list.addAll(genericCards);
         }
         // 专卡
         if (SystemConstant.ALL_CARD != cardRuleId) {
-            List<ExamCard> customCards = this.baseMapper.listCustom(schoolId, sysUser.getOrgId(), courseCode, CardTypeEnum.CUSTOM.name());
+            // 只查自己创建的专卡
+            List<ExamCard> customCards = this.baseMapper.listCustom(schoolId, sysUser.getOrgId(), courseCode, CardTypeEnum.CUSTOM.name(), sysUser.getId());
             if (!customCards.isEmpty()) {
-                // 只查自己创建的专卡
-                customCards = customCards.stream().filter(m -> Objects.equals(m.getCreateId(), sysUser.getId())).collect(Collectors.toList());
-                if (!customCards.isEmpty()) {
-                    list.addAll(customCards);
-                }
+                list.addAll(customCards);
             }
         }
 
         // 命题任务未提交的任务,单独查询题卡
         List<ExamCard> customCards = this.baseMapper.listCustomByExamStage(schoolId, courseCode, paperNumber, CardTypeEnum.CUSTOM.name());
         if (!customCards.isEmpty()) {
-            list.addAll(customCards);
+            for (ExamCard customCard : customCards) {
+                long count = list.stream().filter(m -> m.getId().equals(customCard.getId())).count();
+                if (count == 0) {
+                    list.add(customCard);
+                }
+            }
         }
         list.sort(Comparator.comparing(ExamCard::getType));
         return list;
@@ -341,8 +342,8 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
     public IPage<ExamCard> listPage(String type, String title, String createMethod, Boolean enable, Long createStartTime, Long createEndTime, Integer pageNumber, Integer pageSize) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
-        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId,requestUser.getId(),ServletUtil.getRequest().getServletPath());
-        return this.baseMapper.listPage(new Page<>(pageNumber, pageSize), schoolId, type, title, createMethod, enable, createStartTime, createEndTime,dpr);
+        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId, requestUser.getId(), ServletUtil.getRequest().getServletPath());
+        return this.baseMapper.listPage(new Page<>(pageNumber, pageSize), schoolId, type, title, createMethod, enable, createStartTime, createEndTime, dpr);
     }
 
     @Transactional

+ 23 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskDetailServiceImpl.java

@@ -1,5 +1,6 @@
 package com.qmth.distributed.print.business.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -11,6 +12,7 @@ import com.qmth.distributed.print.business.bean.dto.ExamTaskDetailDto;
 import com.qmth.distributed.print.business.bean.dto.ExamTaskDetailPdfDownloadDto;
 import com.qmth.distributed.print.business.bean.params.RelatePaperParam;
 import com.qmth.distributed.print.business.entity.*;
+import com.qmth.distributed.print.business.enums.CardTypeEnum;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
 import com.qmth.distributed.print.business.enums.FlowJoinTypeEnum;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
@@ -52,6 +54,9 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
     @Resource
     private ExamTaskService examTaskService;
 
+    @Resource
+    private ExamCardService examCardService;
+
     @Resource
     private ExamDetailService examDetailService;
 
@@ -607,5 +612,23 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
                 throw ExceptionResultEnum.ERROR.exception("已有试卷曝光,不能修改题卡");
             }
         }
+
+        // 将旧题卡更新为未绑定
+        List<JSONObject> oldPaperAttachmentIdsJson = JSON.parseArray(examTaskDetailTemp.getPaperAttachmentIds(), JSONObject.class);
+        List<Long> oldCardIds = oldPaperAttachmentIdsJson.stream().filter(m-> CardTypeEnum.CUSTOM.name().equals(m.getString("cardType"))).map(m->m.getLong("cardId")).collect(Collectors.toList());
+        for (Long cardId : oldCardIds) {
+            UpdateWrapper<ExamCard> cardUpdateWrapper = new UpdateWrapper<>();
+            cardUpdateWrapper.lambda().set(ExamCard::getUsed, false).eq(ExamCard::getId, cardId);
+            examCardService.update(cardUpdateWrapper);
+        }
+
+        // 将新题卡更新为已绑定
+        List<JSONObject> newPaperAttachmentIdsJson = JSON.parseArray(examTaskDetail.getPaperAttachmentIds(), JSONObject.class);
+        List<Long> cardIds = newPaperAttachmentIdsJson.stream().filter(m-> CardTypeEnum.CUSTOM.name().equals(m.getString("cardType"))).map(m->m.getLong("cardId")).collect(Collectors.toList());
+        for (Long cardId : cardIds) {
+            UpdateWrapper<ExamCard> cardUpdateWrapper = new UpdateWrapper<>();
+            cardUpdateWrapper.lambda().set(ExamCard::getUsed, true).eq(ExamCard::getId, cardId);
+            examCardService.update(cardUpdateWrapper);
+        }
     }
 }

+ 35 - 4
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -554,6 +554,8 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         examTaskImportDto.setBatchNo(batchNo);
         List<ExamTaskDto> tasks = new ArrayList<>();
         Set<String> paperNumbers = new HashSet<>();
+
+        List<BasicCourse> userCourses = printCommonService.list(null, null, null);
         // 错误信息
         StringJoiner stringJoiner = new StringJoiner(";");
         for (int i = 0; i < finalList.size(); i++) {
@@ -562,6 +564,13 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             for (int y = 0; y < examTaskTempList.size(); y++) {
                 ExamTaskTempDto examTaskTempDto = (ExamTaskTempDto) examTaskTempList.get(y);
                 ExamTaskTemp examTaskTemp = gson.fromJson(gson.toJson(examTaskTempDto), ExamTaskTemp.class);
+                // 校验该用户是否有科目
+                long matchCourseCount = userCourses.stream().filter(m -> examTaskTemp.getCourseCode().equals(m.getCode())).count();
+                if (matchCourseCount == 0) {
+                    throw ExceptionResultEnum.ERROR.exception("该用户没有科目[" + examTaskTemp.getCourseName() + "(" + examTaskTemp.getCourseCode() + ")]权限");
+                }
+
+
                 examTaskTemp.setId(SystemConstant.getDbUuid());
                 examTaskTemp.setBatchNo(batchNo);
                 examTaskTemp.setSchoolId(schoolId);
@@ -646,7 +655,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
 
         // 异常抛出 by 20230214
         String errorMsg = stringJoiner.toString();
-        if(errorMsg.length()>0){
+        if (errorMsg.length() > 0) {
             throw ExceptionResultEnum.ERROR.exception(errorMsg);
         }
 
@@ -928,7 +937,18 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         }
         examTaskDetail.setUpdateId(sysUser.getId());
         examTaskDetail.setUpdateTime(System.currentTimeMillis());
-        return examTaskDetailService.saveOrUpdate(examTaskDetail);
+         examTaskDetailService.saveOrUpdate(examTaskDetail);
+
+        // 将题卡更新为已绑定
+        String paperAttachmentIds = examTaskDetail.getPaperAttachmentIds();
+        List<JSONObject> paperAttachmentIdsJson = JSON.parseArray(paperAttachmentIds, JSONObject.class);
+        List<Long> cardIds = paperAttachmentIdsJson.stream().filter(m->CardTypeEnum.CUSTOM.name().equals(m.getString("cardType"))).map(m->m.getLong("cardId")).collect(Collectors.toList());
+        for (Long cardId : cardIds) {
+            UpdateWrapper<ExamCard> cardUpdateWrapper = new UpdateWrapper<>();
+            cardUpdateWrapper.lambda().set(ExamCard::getUsed, true).eq(ExamCard::getId, cardId);
+            examCardService.update(cardUpdateWrapper);
+        }
+        return true;
     }
 
     @Override
@@ -1616,6 +1636,17 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
 
             examTaskDetailService.save(examTaskDetail);
 
+            // 将题卡更新为已绑定
+            String paperAttachmentIds = examTaskDetail.getPaperAttachmentIds();
+            List<JSONObject> paperAttachmentIdsJson = JSON.parseArray(paperAttachmentIds, JSONObject.class);
+            List<Long> cardIds = paperAttachmentIdsJson.stream().filter(m->CardTypeEnum.CUSTOM.name().equals(m.getString("cardType"))).map(m->m.getLong("cardId")).collect(Collectors.toList());
+            for (Long cardId : cardIds) {
+                UpdateWrapper<ExamCard> updateWrapper = new UpdateWrapper<>();
+                updateWrapper.lambda().set(ExamCard::getUsed, true).eq(ExamCard::getId, cardId);
+                examCardService.update(updateWrapper);
+            }
+
+
             BasicCourse basicCourse = basicCourseService.findByCourseCode(examTask.getCourseCode(), schoolId);
 
             BasicExam basicExam = basicExamService.getById(examTask.getExamId());
@@ -1634,8 +1665,8 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                 examPrintPlan.setExamEndTime(examDetailParams.getExamEndTime());
                 List<String> stringList = JSONObject.parseArray(basicPrintConfig.getPrintContent(), String.class);
                 if (!stringList.contains("PAPER")) {
-                    List<Map> paperAttachmentIds = JSONObject.parseArray(examTaskDetail.getPaperAttachmentIds(), Map.class);
-                    long count = paperAttachmentIds.stream().filter(m -> StringUtils.isBlank(m.get("attachmentId").toString())).count();
+                    List<Map> paperAttachmentIdsMap = JSONObject.parseArray(examTaskDetail.getPaperAttachmentIds(), Map.class);
+                    long count = paperAttachmentIdsMap.stream().filter(m -> StringUtils.isBlank(m.get("attachmentId").toString())).count();
                     if (count == 0) {
                         stringList.add("PAPER");
                     }

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

@@ -657,23 +657,23 @@ public class PrintCommonServiceImpl implements PrintCommonService {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         Set<Long> orgIds = teachcloudCommonService.listSubOrgIds(teachingRoomId);
-        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId, requestUser.getId(), ServletUtil.getRequest().getServletPath());
+//        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId, requestUser.getId(), ServletUtil.getRequest().getServletPath());
         /*if (Objects.nonNull(teachingRoomId)) {
             orgIds = new HashSet<>(Arrays.asList(teachingRoomId));
         } else {
             orgIds = teachcloudCommonService.listSubOrgIds(teachingRoomId);
         }*/
-        if (printPlanIdList.size() == 0) {
+        if (CollectionUtils.isEmpty(printPlanIdList)) {
             QueryWrapper<BasicCourse> queryWrapper = new QueryWrapper<>();
             queryWrapper.lambda().eq(BasicCourse::getSchoolId, schoolId)
                     .eq(BasicCourse::getEnable, true)
                     .in(BasicCourse::getTeachingRoomId, orgIds);
-            if (SystemConstant.longNotNull(dpr.getRequestUserId())) {
+            /*if (SystemConstant.longNotNull(dpr.getRequestUserId())) {
                 queryWrapper.lambda().eq(BasicCourse::getCreateId, dpr.getRequestUserId());
             }
             if (dpr.getOrgIdSet() != null && dpr.getOrgIdSet().size() > 0) {
                 queryWrapper.lambda().in(BasicCourse::getOrgId, dpr.getOrgIdSet());
-            }
+            }*/
             if (StringUtils.isNotBlank(param)) {
                 queryWrapper.lambda().and(i -> i.like(BasicCourse::getCode, SystemConstant.translateSpecificSign(param))
                         .or().like(BasicCourse::getName, SystemConstant.translateSpecificSign(param)));

+ 13 - 22
distributed-print-business/src/main/resources/mapper/ExamCardMapper.xml

@@ -21,6 +21,7 @@
         <result column="attachment_id" property="attachmentId"/>
         <result column="sync_status" property="syncStatus"/>
         <result column="enable" property="enable"/>
+        <result column="used" property="used"/>
         <result column="remark" property="remark"/>
         <result column="card_rule_id" property="cardRuleId"/>
     </resultMap>
@@ -28,7 +29,7 @@
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
         id,
-        school_id,org_id, course_code, course_name, title, make_method, status, create_id, create_time, update_id, update_time, type, create_method, attachment_id, sync_status, enable, remark, card_rule_id
+        school_id,org_id, course_code, course_name, title, make_method, status, create_id, create_time, update_id, update_time, type, create_method, attachment_id, sync_status, enable, used, remark, card_rule_id
     </sql>
     <select id="listCardCust" resultType="com.qmth.distributed.print.business.bean.dto.CardCustDto">
         SELECT
@@ -120,17 +121,6 @@
             <if test="cardRuleId == '-1'">
                 AND a.create_method != 'STANDARD'
             </if>
-<!--            <if test="dpr != null">-->
-<!--                <if test="dpr.requestUserId != null">-->
-<!--                    AND a.create_id = #{dpr.requestUserId}-->
-<!--                </if>-->
-<!--                <if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">-->
-<!--                    AND a.org_id IN-->
-<!--                    <foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">-->
-<!--                        #{item}-->
-<!--                    </foreach>-->
-<!--                </if>-->
-<!--            </if>-->
         order by a.id desc
     </select>
     <select id="listCustom" resultType="com.qmth.distributed.print.business.entity.ExamCard">
@@ -142,14 +132,14 @@
             a.school_id = #{schoolId}
             AND a.type = #{type}
             AND a.course_code = #{courseCode}
-            AND NOT EXISTS( SELECT
-                1
-            FROM
-                exam_task_detail b
-                    LEFT JOIN exam_task et on b.exam_task_id = et.id
-                    LEFT JOIN t_f_flow_approve e ON et.flow_id = e.flow_id
-            WHERE
-                e.status != 'CANCEL' and FIND_IN_SET(a.id, REPLACE(REPLACE(substring_index(substring_index(CONVERT((b.paper_attachment_ids ->>'$[*].cardId') USING utf8), ']', 1), '[',-1),' "','"'),'"','')))
+            AND a.used = false
+            AND a.create_id = #{userId}
+            -- NOT EXISTS( SELECT 1 FROM
+            --     exam_task_detail b
+            --        LEFT JOIN exam_task et on b.exam_task_id = et.id
+            --        LEFT JOIN t_f_flow_approve e ON et.flow_id = e.flow_id
+            -- WHERE
+            --    e.status != 'CANCEL' and FIND_IN_SET(a.id, REPLACE(REPLACE(substring_index(substring_index(CONVERT((b.paper_attachment_ids ->>'$[*].cardId') USING utf8), ']', 1), '[',-1),' "','"'),'"','')))
         order by a.create_time desc
     </select>
     <select id="getCardDetailBySelect" resultType="com.qmth.distributed.print.business.bean.dto.CardDetailDto">
@@ -237,13 +227,14 @@
             a.school_id = #{schoolId}
           AND a.type = #{type}
           AND a.course_code = #{courseCode}
-          AND EXISTS( SELECT
+          AND EXISTS ( SELECT
                               1
                           FROM
                               exam_task_detail b
                                   LEFT JOIN exam_task et on b.exam_task_id = et.id
                           WHERE
-                              et.paper_number = #{paperNumber} and FIND_IN_SET(a.id, REPLACE(REPLACE(substring_index(substring_index(CONVERT((b.paper_attachment_ids ->>'$[*].cardId') USING utf8), ']', 1), '[',-1),' "','"'),'"','')))
+                              et.paper_number = #{paperNumber}
+                            and FIND_IN_SET(a.id, REPLACE(REPLACE(substring_index(substring_index(CONVERT((b.paper_attachment_ids ->>'$[*].cardId') USING utf8), ']', 1), '[',-1),' "','"'),'"','')))
         order by a.create_time desc
     </select>
 </mapper>

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

@@ -337,7 +337,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
     public List<SysRole> listToAdmin() {
         QueryWrapper<SysRole> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().isNull(SysRole::getSchoolId)
-                .ne(SysRole::getType, RoleTypeEnum.ADMIN)
+                .and(s->s.ne(SysRole::getType, RoleTypeEnum.ADMIN).or().isNull(SysRole::getType))
                 .eq(SysRole::getEnable, true)
                 .orderByAsc(SysRole::getId);
         return this.list(queryWrapper);