Bläddra i källkod

Merge remote-tracking branch 'origin/dev_v1.0.0' into dev_v1.0.0

wangliang 2 år sedan
förälder
incheckning
0369f2c0db

+ 70 - 0
paper-library-business/src/main/java/com/qmth/paper/library/business/bean/result/BindDetailResult.java

@@ -0,0 +1,70 @@
+package com.qmth.paper.library.business.bean.result;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 绑定详情返回值
+ * @Author: CaoZixuan
+ * @Date: 2022-10-08
+ */
+public class BindDetailResult implements Serializable {
+    @ApiModelProperty(value = "绑定员id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long bindUserId;
+
+    @ApiModelProperty(value = "绑定员名称")
+    private String bindUserName;
+
+    @ApiModelProperty(value = "已经绑定的数量")
+    private int boundCount;
+
+    @ApiModelProperty(value = "正在绑定的数量")
+    private int bindingCount;
+
+    @ApiModelProperty(value = "该用户相关绑定任务总数")
+    private int totalCount;
+
+    public Long getBindUserId() {
+        return bindUserId;
+    }
+
+    public void setBindUserId(Long bindUserId) {
+        this.bindUserId = bindUserId;
+    }
+
+    public String getBindUserName() {
+        return bindUserName;
+    }
+
+    public void setBindUserName(String bindUserName) {
+        this.bindUserName = bindUserName;
+    }
+
+    public int getBoundCount() {
+        return boundCount;
+    }
+
+    public void setBoundCount(int boundCount) {
+        this.boundCount = boundCount;
+    }
+
+    public int getBindingCount() {
+        return bindingCount;
+    }
+
+    public void setBindingCount(int bindingCount) {
+        this.bindingCount = bindingCount;
+    }
+
+    public int getTotalCount() {
+        return totalCount;
+    }
+
+    public void setTotalCount(int totalCount) {
+        this.totalCount = totalCount;
+    }
+}

+ 12 - 0
paper-library-business/src/main/java/com/qmth/paper/library/business/bean/result/PaperScanTaskResult.java

@@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 /**
  * @Description: 扫描任务查询结果
@@ -45,6 +46,9 @@ public class PaperScanTaskResult implements Serializable {
     @ApiModelProperty(value = "扫描量")
     private int scanCount;
 
+    @ApiModelProperty(value = "绑定进度")
+    private BigDecimal bindProgress;
+
     @ApiModelProperty(value = "扫描员id")
     @JsonSerialize(using = ToStringSerializer.class)
     private Long scanUserId;
@@ -132,6 +136,14 @@ public class PaperScanTaskResult implements Serializable {
         this.scanCount = scanCount;
     }
 
+    public BigDecimal getBindProgress() {
+        return bindProgress;
+    }
+
+    public void setBindProgress(BigDecimal bindProgress) {
+        this.bindProgress = bindProgress;
+    }
+
     public Long getScanUserId() {
         return scanUserId;
     }

+ 25 - 11
paper-library-business/src/main/java/com/qmth/paper/library/business/mapper/PaperScanTaskMapper.java

@@ -3,13 +3,13 @@ package com.qmth.paper.library.business.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmth.paper.library.business.bean.result.BindDetailResult;
 import com.qmth.paper.library.business.bean.result.PaperScanTaskDetailResult;
 import com.qmth.paper.library.business.bean.result.PaperScanTaskResult;
 import com.qmth.paper.library.business.entity.PaperScanTask;
-import com.qmth.paper.library.common.bean.result.BasicStudentResult;
 import org.apache.ibatis.annotations.Param;
-import org.springframework.context.annotation.Primary;
 
+import java.util.List;
 import java.util.Set;
 
 /**
@@ -22,17 +22,21 @@ public interface PaperScanTaskMapper extends BaseMapper<PaperScanTask> {
     /**
      * 扫描任务分页查询
      *
-     * @param iPage       分页参数
-     * @param schoolId    学校id
-     * @param courseName  课程名称
-     * @param teacherName 教师名称
-     * @param orgIds      数据权限
+     * @param iPage           分页参数
+     * @param schoolId        学校id
+     * @param courseName      课程名称
+     * @param teacherName     教师名称
+     * @param smallerProgress 进度阈值(小)
+     * @param largerProgress  进度阈值(大)
+     * @param orgIds          数据权限
      * @return 分页查询结果
      */
     IPage<PaperScanTaskResult> findPaperScanTaskPage(@Param("iPage") Page<PaperScanTaskResult> iPage,
                                                      @Param("schoolId") Long schoolId,
                                                      @Param("courseName") String courseName,
                                                      @Param("teacherName") String teacherName,
+                                                     @Param("smallerProgress") int smallerProgress,
+                                                     @Param("largerProgress") int largerProgress,
                                                      @Param("orgIds") Set<Long> orgIds);
 
     /**
@@ -44,8 +48,18 @@ public interface PaperScanTaskMapper extends BaseMapper<PaperScanTask> {
      * @param orgIds          数据权限
      * @return 分页查询结果
      */
-    IPage<PaperScanTaskDetailResult> findPaperScanTaskDetailPageByTaskId(@Param("iPage") Page<PaperScanTaskDetailResult> iPage,
-                                                                         @Param("schoolId") Long schoolId,
-                                                                         @Param("paperScanTaskId") Long paperScanTaskId,
-                                                                         @Param("orgIds") Set<Long> orgIds);
+    IPage<PaperScanTaskDetailResult> findPaperScanTaskDetailPageByScanTaskId(@Param("iPage") Page<PaperScanTaskDetailResult> iPage,
+                                                                             @Param("schoolId") Long schoolId,
+                                                                             @Param("paperScanTaskId") Long paperScanTaskId,
+                                                                             @Param("orgIds") Set<Long> orgIds);
+
+    /**
+     * 根据扫描任务id查询扫描任务的绑定详情
+     *
+     * @param schoolId        学校id
+     * @param paperScanTaskId 扫描任务id
+     * @return 查询结果
+     */
+    List<BindDetailResult> findBindDetailByScanTaskId(@Param("schoolId") Long schoolId,
+                                                      @Param("paperScanTaskId") Long paperScanTaskId);
 }

+ 29 - 7
paper-library-business/src/main/java/com/qmth/paper/library/business/service/PaperScanTaskService.java

@@ -3,6 +3,7 @@ package com.qmth.paper.library.business.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.paper.library.business.bean.params.PaperScanTaskParam;
+import com.qmth.paper.library.business.bean.result.BindDetailResult;
 import com.qmth.paper.library.business.bean.result.PaperScanTaskDetailResult;
 import com.qmth.paper.library.business.bean.result.PaperScanTaskResult;
 import com.qmth.paper.library.business.entity.PaperScanTask;
@@ -16,17 +17,20 @@ import java.util.List;
  * </p>
  */
 public interface PaperScanTaskService extends IService<PaperScanTask> {
+
     /**
      * 扫描任务分页查询
      *
-     * @param courseName  课程名称
-     * @param teacherName 任课教师
-     * @param pageNumber  分页页数
-     * @param pageSize    分页容量
-     * @param requestUser 请求用户
+     * @param courseName      课程名称
+     * @param teacherName     任课教师
+     * @param smallerProgress 进度阈值(小)
+     * @param largerProgress  进度阈值(大)
+     * @param pageNumber      分页页数
+     * @param pageSize        分页容量
+     * @param requestUser     请求用户
      * @return 分页结果
      */
-    IPage<PaperScanTaskResult> paperScanTaskPage(String courseName, String teacherName, int pageNumber, int pageSize, SysUser requestUser);
+    IPage<PaperScanTaskResult> paperScanTaskPage(String courseName, String teacherName, int smallerProgress, int largerProgress, int pageNumber, int pageSize, SysUser requestUser);
 
     /**
      * 扫描任务编辑
@@ -59,7 +63,7 @@ public interface PaperScanTaskService extends IService<PaperScanTask> {
      * @param requestUser     请求的用户
      * @return 扫描任务详情分页结果
      */
-    IPage<PaperScanTaskDetailResult> findPaperScanTaskDetailPageByTaskId(Long paperScanTaskId, int pageNumber, int pageSize, SysUser requestUser);
+    IPage<PaperScanTaskDetailResult> findPaperScanTaskDetailPageByScanTaskId(Long paperScanTaskId, int pageNumber, int pageSize, SysUser requestUser);
 
     /**
      * 清除扫描任务数据
@@ -69,6 +73,24 @@ public interface PaperScanTaskService extends IService<PaperScanTask> {
      */
     void clearScanData(Long paperScanTaskId, SysUser requestUser);
 
+    /**
+     * 根据扫描任务id查询扫描任务的绑定详情
+     *
+     * @param paperScanTaskId 扫描任务id
+     * @param requestUser     请求的用户
+     * @return 绑定详情集合
+     */
+    List<BindDetailResult> findBindDetailByScanTaskId(Long paperScanTaskId, SysUser requestUser);
+
+    /**
+     * 释放数据检察员正在绑定的任务
+     *
+     * @param paperScanTaskId 扫描任务id
+     * @param bindUserId      数据检察员id
+     * @param requestUser     请求的用户
+     */
+    void releaseBindingTask(Long paperScanTaskId, Long bindUserId, SysUser requestUser);
+
 
     List<PaperScanTask> listByPaperArchivesId(Long id);
 }

+ 29 - 4
paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/PaperScanTaskServiceImpl.java

@@ -1,11 +1,13 @@
 package com.qmth.paper.library.business.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.paper.library.business.bean.dto.excel.ScannerBindingDto;
 import com.qmth.paper.library.business.bean.params.PaperScanTaskParam;
+import com.qmth.paper.library.business.bean.result.BindDetailResult;
 import com.qmth.paper.library.business.bean.result.PaperScanTaskDetailResult;
 import com.qmth.paper.library.business.bean.result.PaperScanTaskResult;
 import com.qmth.paper.library.business.entity.PaperLibrary;
@@ -44,11 +46,11 @@ public class PaperScanTaskServiceImpl extends ServiceImpl<PaperScanTaskMapper, P
     private PaperLibraryService paperLibraryService;
 
     @Override
-    public IPage<PaperScanTaskResult> paperScanTaskPage(String courseName, String teacherName, int pageNumber, int pageSize, SysUser requestUser) {
+    public IPage<PaperScanTaskResult> paperScanTaskPage(String courseName, String teacherName, int smallerProgress, int largerProgress, int pageNumber, int pageSize, SysUser requestUser) {
         Long schoolId = requestUser.getSchoolId();
         courseName = SystemConstant.strNotNull(courseName) ? SystemConstant.translateSpecificSign(courseName) : null;
         teacherName = SystemConstant.strNotNull(teacherName) ? SystemConstant.translateSpecificSign(teacherName) : null;
-        return this.baseMapper.findPaperScanTaskPage(new Page<>(pageNumber, pageSize), schoolId, courseName, teacherName, null);
+        return this.baseMapper.findPaperScanTaskPage(new Page<>(pageNumber, pageSize), schoolId, courseName, teacherName, smallerProgress, largerProgress, null);
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -172,9 +174,9 @@ public class PaperScanTaskServiceImpl extends ServiceImpl<PaperScanTaskMapper, P
     }
 
     @Override
-    public IPage<PaperScanTaskDetailResult> findPaperScanTaskDetailPageByTaskId(Long paperScanTaskId, int pageNumber, int pageSize, SysUser requestUser) {
+    public IPage<PaperScanTaskDetailResult> findPaperScanTaskDetailPageByScanTaskId(Long paperScanTaskId, int pageNumber, int pageSize, SysUser requestUser) {
         Long schoolId = requestUser.getSchoolId();
-        return this.baseMapper.findPaperScanTaskDetailPageByTaskId(new Page<>(pageNumber, pageSize), paperScanTaskId, schoolId, null);
+        return this.baseMapper.findPaperScanTaskDetailPageByScanTaskId(new Page<>(pageNumber, pageSize), paperScanTaskId, schoolId, null);
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -209,6 +211,29 @@ public class PaperScanTaskServiceImpl extends ServiceImpl<PaperScanTaskMapper, P
         }
     }
 
+    @Override
+    public List<BindDetailResult> findBindDetailByScanTaskId(Long paperScanTaskId, SysUser requestUser) {
+        Long schoolId = requestUser.getSchoolId();
+        if (!SystemConstant.longNotNull(paperScanTaskId)) {
+            throw ExceptionResultEnum.ERROR.exception("缺少扫描任务id");
+        }
+        return this.baseMapper.findBindDetailByScanTaskId(schoolId, paperScanTaskId);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void releaseBindingTask(Long paperScanTaskId, Long bindUserId, SysUser requestUser) {
+        UpdateWrapper<PaperLibrary> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda()
+                .set(PaperLibrary::getUserId, null)
+                .set(PaperLibrary::getCreateId, requestUser.getId())
+                .set(PaperLibrary::getCreateTime, System.currentTimeMillis())
+                .eq(PaperLibrary::getPaperScanTaskId, paperScanTaskId)
+                .eq(PaperLibrary::getUserId, bindUserId)
+                .eq(PaperLibrary::getPaperScanTaskDetailId, null);
+        paperLibraryService.update(updateWrapper);
+    }
+
     @Override
     public List<PaperScanTask> listByPaperArchivesId(Long paperArchivesId) {
         QueryWrapper<PaperScanTask> queryWrapper = new QueryWrapper<>();

+ 39 - 5
paper-library-business/src/main/resources/mapper/PaperScanTaskMapper.xml

@@ -15,19 +15,20 @@
             pa.archives_name AS archivesName,
             pa.archives_code AS archivesCode,
             pl.scan_count AS scanCount,
+            ROUND((pl.bound / pl.scan_count) * 100, 2) AS bindProgress,
             su.real_name AS scanUserName
         FROM
             paper_scan_task pst
                 LEFT JOIN
             paper_archives pa ON pst.paper_archives_id = pa.id
                 LEFT JOIN
-            paper_scan_task_detail pstd ON pst.id = pstd.paper_scan_task_id
-                LEFT JOIN
             (SELECT
-                 paper_scan_task_detail_id, COUNT(*) AS scan_count
+                 paper_scan_task_id,
+                 COUNT(*) AS scan_count,
+                 SUM(IF(paper_scan_task_detail_id IS NULL, 0, 1)) AS bound,
              FROM
                  paper_library
-             GROUP BY paper_scan_task_detail_id) pl ON pstd.id = pl.paper_scan_task_detail_id
+             GROUP BY paper_scan_task_id) pl ON pst.id = pl.paper_scan_task_id
                 LEFT JOIN
             sys_user su ON pst.scan_user_id = su.id
         <where>
@@ -40,10 +41,16 @@
             <if test="teacherName != null and teacherName != ''">
                 AND pst.teacher_name like CONCAT('%',#{teacherName},'%')
             </if>
+            <if test="smallerProgress != null and smallerProgress != ''">
+                AND ROUND((pl.bound / pl.scan_count) * 100, 2) >= #{smallerProgress}
+            </if>
+            <if test="largerProgress != null and largerProgress != ''">
+                AND #{largerProgress} >= ROUND((pl.bound / pl.scan_count) * 100, 2)
+            </if>
         </where>
     </select>
 
-    <select id="findPaperScanTaskDetailPageByTaskId"
+    <select id="findPaperScanTaskDetailPageByScanTaskId"
             resultType="com.qmth.paper.library.business.bean.result.PaperScanTaskDetailResult">
         SELECT
             bs.student_name AS studentName,
@@ -74,4 +81,31 @@
         </where>
         ORDER BY scanCount desc
     </select>
+
+    <select id="findBindDetailByScanTaskId"
+            resultType="com.qmth.paper.library.business.bean.result.BindDetailResult">
+        SELECT
+            su.real_name AS bindUserName,
+            pl.user_id AS bindUserId,
+            pl.total_count AS totalCount,
+            pl.bound AS boundCount,
+            pl.binding AS bindingCount
+        FROM
+            (SELECT
+                 user_id,
+                 COUNT(*) AS total_count,
+                 SUM(IF(paper_scan_task_detail_id IS NULL, 0, 1)) AS bound,
+                 SUM(IF(paper_scan_task_detail_id IS NULL, 1, 0)) AS binding
+             FROM
+                 paper_library
+             <where>
+                 user_id > 0
+                 <if test="paperScanTaskId != null and paperScanTaskId != ''">
+                     AND paper_scan_task_id = #{paperScanTaskId}
+                 </if>
+             </where>
+             GROUP BY user_id) pl
+                LEFT JOIN
+            sys_user su ON pl.user_id = su.id
+    </select>
 </mapper>

+ 22 - 3
paper-library/src/main/java/com/qmth/paper/library/api/PaperScanTaskController.java

@@ -54,10 +54,12 @@ public class PaperScanTaskController {
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
     public Result findPaperScanTaskPage(@ApiParam(value = "课程名称") @RequestParam(required = false) String courseName,
                                         @ApiParam(value = "任课教师") @RequestParam(required = false) String teacherName,
+                                        @ApiParam(value = "进度阈值(小)", required = true) @RequestParam @Min(0) Integer smallerProgress,
+                                        @ApiParam(value = "进度阈值(大)", required = true) @RequestParam @Min(0) @Max(100) Integer largerProgress,
                                         @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                                         @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
-        return ResultUtil.ok(paperScanTaskService.paperScanTaskPage(courseName, teacherName, pageNumber, pageSize, requestUser));
+        return ResultUtil.ok(paperScanTaskService.paperScanTaskPage(courseName, teacherName, pageNumber, smallerProgress, largerProgress, pageSize, requestUser));
     }
 
     @ApiOperation(value = "扫描任务管理-新增/编辑")
@@ -98,7 +100,6 @@ public class PaperScanTaskController {
     @RequestMapping(value = "/scanner_export", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "{\"success\":true}", response = Result.class)})
     public Result scannerExport() throws Exception {
-
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         paperScanTaskService.exportScanner(requestUser);
         return ResultUtil.ok();
@@ -111,7 +112,7 @@ public class PaperScanTaskController {
                                               @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                                               @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
-        return ResultUtil.ok(paperScanTaskService.findPaperScanTaskDetailPageByTaskId(SystemConstant.convertIdToLong(paperScanTaskId), pageNumber, pageSize, requestUser));
+        return ResultUtil.ok(paperScanTaskService.findPaperScanTaskDetailPageByScanTaskId(SystemConstant.convertIdToLong(paperScanTaskId), pageNumber, pageSize, requestUser));
     }
 
     @ApiOperation(value = "扫描任务管理-清除数据")
@@ -122,4 +123,22 @@ public class PaperScanTaskController {
         paperScanTaskService.clearScanData(SystemConstant.convertIdToLong(paperScanTaskId), sysUser);
         return ResultUtil.ok();
     }
+
+    @ApiOperation(value = "扫描任务管理-绑定进度详情")
+    @RequestMapping(value = "/bind_progress_detail", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "删除成功", response = EditResult.class)})
+    public Result bindProgressDetail(@ApiParam(value = "扫描任务id", required = true) @RequestParam String paperScanTaskId) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        return ResultUtil.ok(paperScanTaskService.findBindDetailByScanTaskId(SystemConstant.convertIdToLong(paperScanTaskId), sysUser));
+    }
+
+    @ApiOperation(value = "扫描任务管理-释放正在绑定的任务")
+    @RequestMapping(value = "/release_binding_task", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "删除成功", response = EditResult.class)})
+    public Result releaseBindingTask(@ApiParam(value = "扫描任务id", required = true) @RequestParam String paperScanTaskId,
+                                     @ApiParam(value = "数据检察员id", required = true) @RequestParam String bindUserId) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        paperScanTaskService.releaseBindingTask(SystemConstant.convertIdToLong(paperScanTaskId), SystemConstant.convertIdToLong(bindUserId), sysUser);
+        return ResultUtil.ok();
+    }
 }