浏览代码

新增统计管理-命题任务统计

wangliang 11 月之前
父节点
当前提交
bc67500e0d

+ 21 - 9
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/statistics/StatementResult.java

@@ -3,6 +3,7 @@ package com.qmth.distributed.print.business.bean.result.statistics;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.distributed.print.business.enums.CardTypeEnum;
+import com.qmth.distributed.print.business.enums.StatisticsStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
@@ -38,7 +39,7 @@ public class StatementResult implements Serializable {
     private Integer totalExamination;
 
     @ApiModelProperty(value = "已生成")
-    private Integer generated;
+    private Integer generate;
 
     @ApiModelProperty(value = "未生成")
     private Integer unGenerated;
@@ -61,8 +62,11 @@ public class StatementResult implements Serializable {
     @ApiModelProperty(value = "题卡类型str")
     private String cardTypeStr;
 
-    @ApiModelProperty(value = "状态")
-    private Boolean finishStatus;
+    @ApiModelProperty(value = "状态,FINISH:已完成,UN_FINISH:未完成")
+    private StatisticsStatusEnum finishStatus;
+
+    @ApiModelProperty(value = "题卡类型str")
+    private String finishStatusStr;
 
     public Long getId() {
         return id;
@@ -112,12 +116,12 @@ public class StatementResult implements Serializable {
         this.totalExamination = totalExamination;
     }
 
-    public Integer getGenerated() {
-        return generated;
+    public Integer getGenerate() {
+        return generate;
     }
 
-    public void setGenerated(Integer generated) {
-        this.generated = generated;
+    public void setGenerate(Integer generate) {
+        this.generate = generate;
     }
 
     public Integer getUnGenerated() {
@@ -176,11 +180,19 @@ public class StatementResult implements Serializable {
         this.cardTypeStr = cardTypeStr;
     }
 
-    public Boolean getFinishStatus() {
+    public StatisticsStatusEnum getFinishStatus() {
         return finishStatus;
     }
 
-    public void setFinishStatus(Boolean finishStatus) {
+    public void setFinishStatus(StatisticsStatusEnum finishStatus) {
         this.finishStatus = finishStatus;
     }
+
+    public String getFinishStatusStr() {
+        return Objects.nonNull(finishStatus) ? finishStatus.getTitle() : finishStatusStr;
+    }
+
+    public void setFinishStatusStr(String finishStatusStr) {
+        this.finishStatusStr = finishStatusStr;
+    }
 }

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

@@ -6,7 +6,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.distributed.print.business.bean.dto.*;
 import com.qmth.distributed.print.business.bean.dto.approvalForm.ExamPackageDetail;
 import com.qmth.distributed.print.business.bean.result.WorkResult;
+import com.qmth.distributed.print.business.bean.result.statistics.StatementResult;
 import com.qmth.distributed.print.business.entity.ExamTask;
+import com.qmth.distributed.print.business.enums.CardTypeEnum;
 import com.qmth.distributed.print.business.enums.MakeMethodEnum;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.teachcloud.common.bean.dto.BlurryUserDto;
@@ -99,4 +101,21 @@ public interface ExamTaskMapper extends BaseMapper<ExamTask> {
 
     IPage<MakeupExamTaskDto> listMakeupExamTask(@Param("page") Page<MakeupExamTaskDto> page, @Param("printPlanId") Long printPlanId, @Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("collegeId") Long collegeId, @Param("courseId") Long courseId, @Param("paperNumber") String paperNumber, @Param("userName") String userName);
 
+    /**
+     * 命题任务统计查询
+     *
+     * @param iPage
+     * @param schoolId
+     * @param semesterId
+     * @param examId
+     * @param printPlanId
+     * @param collegeId
+     * @param courseId
+     * @param paperNumber
+     * @param cardType
+     * @param finishStatus
+     * @param dpr
+     * @return
+     */
+    IPage<StatementResult> statementCountList(IPage<Map> iPage, @Param("schoolId") Long schoolId, @Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("printPlanId") Long printPlanId, @Param("collegeId") Long collegeId, @Param("courseId") Long courseId, @Param("paperNumber") String paperNumber, @Param("cardType") String cardType, @Param("finishStatus") String finishStatus, @Param("dpr") DataPermissionRule dpr);
 }

+ 16 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskService.java

@@ -15,6 +15,7 @@ import com.qmth.distributed.print.business.entity.ExamDetail;
 import com.qmth.distributed.print.business.entity.ExamTask;
 import com.qmth.distributed.print.business.entity.ExamTaskDetail;
 import com.qmth.distributed.print.business.enums.CardTypeEnum;
+import com.qmth.distributed.print.business.enums.StatisticsStatusEnum;
 import com.qmth.teachcloud.common.bean.dto.BlurryUserDto;
 import com.qmth.teachcloud.common.bean.tiku.TikuPaperInfo;
 import com.qmth.teachcloud.common.entity.BasicExam;
@@ -196,5 +197,19 @@ public interface ExamTaskService extends IService<ExamTask> {
 
     ExamTask validExamTaskAuditPass(Long schoolId, Long examId, Long courseId, String paperNumber);
 
-    public IPage<StatementResult> statementCount(IPage<Map> iPage, Long semesterId, Long examId, Long printPlanId, Long collegeId, Long courseId, String paperNumber, CardTypeEnum cardType, Boolean finishStatus);
+    /**
+     * 命题任务统计查询
+     *
+     * @param iPage
+     * @param semesterId
+     * @param examId
+     * @param printPlanId
+     * @param collegeId
+     * @param courseId
+     * @param paperNumber
+     * @param cardType
+     * @param finishStatus
+     * @return
+     */
+    public IPage<StatementResult> statementCountList(IPage<Map> iPage, Long semesterId, Long examId, Long printPlanId, Long collegeId, Long courseId, String paperNumber, CardTypeEnum cardType, StatisticsStatusEnum finishStatus);
 }

+ 19 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -59,7 +59,6 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
-import javax.websocket.RemoteEndpoint;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
@@ -83,8 +82,6 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
 
     private static final Logger logger = LoggerFactory.getLogger(ExamTaskServiceImpl.class);
 
-    @Resource
-    private BasicTeachClazzService basicTeachClazzService;
     @Resource
     private BasicExamStudentService basicExamStudentService;
     @Resource
@@ -1967,9 +1964,26 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         return examTask;
     }
 
+    /**
+     * 命题任务统计查询
+     *
+     * @param iPage
+     * @param semesterId
+     * @param examId
+     * @param printPlanId
+     * @param collegeId
+     * @param courseId
+     * @param paperNumber
+     * @param cardType
+     * @param finishStatus
+     * @return
+     */
     @Override
-    public IPage<StatementResult> statementCount(IPage<Map> iPage, Long semesterId, Long examId, Long printPlanId, Long collegeId, Long courseId, String paperNumber, CardTypeEnum cardType, Boolean finishStatus) {
-        return null;
+    public IPage<StatementResult> statementCountList(IPage<Map> iPage, Long semesterId, Long examId, Long printPlanId, Long collegeId, Long courseId, String paperNumber, CardTypeEnum cardType, StatisticsStatusEnum finishStatus) {
+        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.statementCountList(iPage, schoolId, semesterId, examId, printPlanId, collegeId, courseId, paperNumber, Objects.nonNull(cardType) ? cardType.name() : null, Objects.nonNull(finishStatus) ? finishStatus.name() : null, dpr);
     }
 
     private ExamTaskPaperData saveTikuPaperData(Long examId, Long paperId, String uuid, File zipFile) {

+ 105 - 0
distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml

@@ -1299,4 +1299,109 @@
         print_plan_id = #{printPlanId}) b ON a.exam_id = b.exam_id
         AND a.paper_number = b.paper_number
     </select>
+
+    <sql id="statementStatusCount">
+        select
+            count(1)
+        from
+            exam_detail ed
+        where
+            ed.school_id = et.school_id
+          and ed.exam_id = et.exam_id
+          and exists(
+                select
+                    edc.id
+                from
+                    exam_detail_course edc
+                where
+                    edc.paper_number = et.paper_number
+                  and edc.exam_detail_id = ed.id
+    </sql>
+
+    <select id="statementCountList" resultType="com.qmth.distributed.print.business.bean.result.statistics.StatementResult">
+        select
+            t.*,
+            ec.type as cardType,
+            if(t.unGenerated = 0 and t.unPrinted = 0,'FINISH','UN_FINISH') as finishStatus
+        from
+            (
+                select distinct
+                    et.id,
+                    GROUP_CONCAT(distinct bc.name, '(', bc.code, ')') as courseNameCode,
+                    et.paper_number as paperNumber,
+                    replace(substring_index(substring_index(convert((etd.paper_attachment_ids ->>'$[*].cardId') using utf8), ']', 1), '[',-1), '"', '') as cardId,
+                    so.name as college,
+                    (<include refid="statementStatusCount" />)) as totalExamination,
+                    (<include refid="statementStatusCount" /> and ed.status in ('READY', 'WAITING', 'PRINTING', 'FINISH'))) as generate,
+                    (<include refid="statementStatusCount" /> and ed.status in ('NEW', 'CREATING'))) as unGenerated,
+                    (<include refid="statementStatusCount" /> and ed.status = 'FINISH')) as printed,
+                    (<include refid="statementStatusCount" /> and ed.status in ('READY', 'WAITING', 'PRINTING'))) as unPrinted,
+                    (<include refid="statementStatusCount" /> and ed.status = 'CANCEL')) as invalid,
+                    (<include refid="statementStatusCount" /> and ed.status = 'REJECT')) as reject
+                from exam_task et
+                        left join basic_course bc on bc.id = et.course_id
+                        left join exam_task_detail etd on etd.exam_task_id = et.id
+                        left join exam_detail_course edc on edc.course_id = et.course_id
+                        left join exam_detail ed on ed.id = edc.exam_detail_id
+                        left join sys_org so on so.id = bc.teaching_room_id
+                        left join t_f_flow_approve tffa on tffa.flow_id = et.flow_id
+                        left join basic_exam be on be.id = et.exam_id and be.enable = true
+                        left join basic_semester bs on bs.id = be.semester_id and bs.enable = true
+                <where> 1 = 1
+                    and (et.status = 'SUBMIT' and (et.flow_id is null or (et.flow_id is not null and tffa.status = 'FINISH')))
+                    <if test="schoolId != null and schoolId != ''">
+                        AND et.school_id = #{schoolId}
+                    </if>
+                    <if test="semesterId != null and semesterId != ''">
+                        AND be.semester_id = #{semesterId}
+                    </if>
+                    <if test="examId != null and examId != ''">
+                        AND be.id = #{examId}
+                    </if>
+                    <if test="printPlanId != null and printPlanId != ''">
+                        AND ed.print_plan_id = #{printPlanId}
+                    </if>
+                    <if test="collegeId != null and collegeId != ''">
+                        AND so.id = #{collegeId}
+                    </if>
+                    <if test="courseId != null and courseId != ''">
+                        AND bc.id = #{courseId}
+                    </if>
+                    <if test="paperNumber != null and paperNumber != ''">
+                        AND et.paper_number = #{paperNumber}
+                    </if>
+                    <if test="dpr != null">
+                        <if test="dpr.requestUserId != null">
+                            AND et.user_id = #{dpr.requestUserId}
+                        </if>
+                        <if test="dpr.courseUserId != null">
+                            AND EXISTS( SELECT 1 FROM (select course_id from teach_course where exam_id = #{examId} and user_id = #{dpr.courseUserId}) tc WHERE tc.course_id = et.course_id)
+                        </if>
+                        <if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
+                            AND bc.teaching_room_id IN
+                            <foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
+                                #{item}
+                            </foreach>
+                        </if>
+                    </if>
+                </where>
+                group by et.id,bc.code,bc.name,et.paper_number) t
+                left join exam_card ec on ec.id = t.cardId
+                <where>
+                    <if test="cardType != null and cardType != ''">
+                        AND ec.type = #{cardType}
+                    </if>
+                    <if test="finishStatus != null and finishStatus != ''">
+                        <choose>
+                            <when test="finishStatus == 'FINISH'">
+                                and (t.unGenerated = and or t.unPrinted = 0)
+                            </when>
+                            <otherwise>
+                                and (t.unGenerated <![CDATA[ > ]]> 0 or t.unPrinted <![CDATA[ > ]]> 0)
+                            </otherwise>
+                        </choose>
+                    </if>
+                </where>
+                order by t.paperNumber desc
+    </select>
 </mapper>

+ 23 - 0
distributed-print/install/mysql/upgrade/3.4.0.sql

@@ -250,3 +250,26 @@ INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES ('1179', '主观题复核', 'InspectedSubjective', 'LINK', '946', '9', 'AUTH', '956,957,958', '1', '0', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES ('1180', '客观题复核', 'ObjectiveSubjective', 'LINK', '946', '10', 'AUTH', '959,960', '1', '0', '1');
 UPDATE `sys_privilege` SET `related` = '953,954,955,969,1139' WHERE (`id` = '950');
+
+-- 2024-07-10
+INSERT INTO sys_privilege
+(id, name, url, `type`, parent_id, `sequence`, property, related, enable, default_auth, front_display)
+VALUES(2087, '统计管理', 'count', 'MENU', 1, 6, NULL, NULL, 1, 0, 1);
+INSERT INTO sys_privilege
+(id, name, url, `type`, parent_id, `sequence`, property, related, enable, default_auth, front_display)
+VALUES(2088, '命题任务统计', 'StatementCount', 'MENU', 2087, 1, NULL, NULL, 1, 0, 1);
+INSERT INTO sys_privilege
+(id, name, url, `type`, parent_id, `sequence`, property, related, enable, default_auth, front_display)
+VALUES(2089, '印刷任务统计', 'PrintCount', 'MENU', 2087, 2, NULL, NULL, 1, 0, 1);
+INSERT INTO sys_privilege
+(id, name, url, `type`, parent_id, `sequence`, property, related, enable, default_auth, front_display)
+VALUES(2090, '查询', 'Select', 'BUTTON', 2088, 1, 'AUTH', '2093', 1, 0, 1);
+INSERT INTO sys_privilege
+(id, name, url, `type`, parent_id, `sequence`, property, related, enable, default_auth, front_display)
+VALUES(2091, '查询条件', 'Condition', 'CONDITION', 2088, 1, 'AUTH', '2093', 1, 0, 1);
+INSERT INTO sys_privilege
+(id, name, url, `type`, parent_id, `sequence`, property, related, enable, default_auth, front_display)
+VALUES(2092, '列表', 'List', 'LIST', 2088, 1, 'AUTH', '2093', 1, 0, 1);
+INSERT INTO sys_privilege
+(id, name, url, `type`, parent_id, `sequence`, property, related, enable, default_auth, front_display)
+VALUES(2093, '命题任务统计查询', '/api/admin/statistics/statement/count', 'URL', 2088, 1, 'AUTH', NULL, 1, 1, 1);

+ 53 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/StatisticalManagementController.java

@@ -0,0 +1,53 @@
+package com.qmth.distributed.print.api;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.distributed.print.business.bean.result.statistics.StatementResult;
+import com.qmth.distributed.print.business.enums.CardTypeEnum;
+import com.qmth.distributed.print.business.enums.StatisticsStatusEnum;
+import com.qmth.distributed.print.business.service.ExamTaskService;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.util.Result;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import io.swagger.annotations.*;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+
+/**
+ * <p>
+ * 统计管理 前端控制器
+ * </p>
+ */
+@Api(tags = "统计管理Controller")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_STATISTICS)
+@Validated
+public class StatisticalManagementController {
+
+    @Resource
+    ExamTaskService examTaskService;
+
+    @ApiOperation(value = "命题任务统计")
+    @RequestMapping(value = "/statement/count", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "分页查询", response = StatementResult.class)})
+    public Result taskList(@ApiParam(value = "学期ID", required = true) @RequestParam Long semesterId,
+                           @ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
+                           @ApiParam(value = "印刷计划ID") @RequestParam(required = false) Long printPlanId,
+                           @ApiParam(value = "开课学院id") @RequestParam(required = false) Long collegeId,
+                           @ApiParam(value = "课程ID") @RequestParam(required = false) Long courseId,
+                           @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber,
+                           @ApiParam(value = "题卡类型,GENERIC:通卡,CUSTOM:自定义") @RequestParam(required = false) CardTypeEnum cardType,
+                           @ApiParam(value = "状态,FINISH:已完成,UN_FINISH:未完成") @RequestParam(required = false) StatisticsStatusEnum finishStatus,
+                           @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+                           @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+        return ResultUtil.ok(examTaskService.statementCountList(new Page<>(pageNumber, pageSize), semesterId, examId, printPlanId, collegeId, courseId, paperNumber, cardType, finishStatus));
+    }
+}
+