he2802 2 år sedan
förälder
incheckning
6d8c641340

+ 45 - 4
zhongzheng-admin-data/src/main/java/com/zhongzheng/controller/common/UserStudyLogController.java

@@ -5,14 +5,14 @@ import java.util.Arrays;
 
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.ToolsUtils;
-import com.zhongzheng.modules.cd.bo.CdUserExamLogQueryBo;
-import com.zhongzheng.modules.cd.bo.CdUserStudyLogAddBo;
-import com.zhongzheng.modules.cd.bo.CdUserStudyLogEditBo;
-import com.zhongzheng.modules.cd.bo.CdUserStudyLogQueryBo;
+import com.zhongzheng.modules.cd.bo.*;
 import com.zhongzheng.modules.cd.service.ICdUserExamLogService;
 import com.zhongzheng.modules.cd.service.ICdUserStudyLogService;
 import com.zhongzheng.modules.cd.vo.CdUserExamLogVo;
+import com.zhongzheng.modules.cd.vo.CdUserExamScoreVo;
+import com.zhongzheng.modules.cd.vo.CdUserStudyCountVo;
 import com.zhongzheng.modules.cd.vo.CdUserStudyLogVo;
+import com.zhongzheng.modules.course.bo.CourseAddBo;
 import lombok.RequiredArgsConstructor;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -49,6 +49,25 @@ public class UserStudyLogController extends BaseController {
 
     private final ICdUserExamLogService iCdUserExamLogService;
 
+    /**
+     * 新增课程
+     */
+    @ApiOperation("新增用户天学习记录")
+    @PreAuthorize("@ss.hasPermi('system:course:add')")
+    @Log(title = "新增用户学习记录", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult add(@RequestBody CdUserStudyLogAddBo bo) {
+        return AjaxResult.success(iCdUserStudyLogService.insertByAddBo(bo)? 1 : 0);
+    }
+
+    @ApiOperation("批量新增用户天学习记录")
+    @PreAuthorize("@ss.hasPermi('system:course:add')")
+    @Log(title = "批量新增用户天学习记录", businessType = BusinessType.INSERT)
+    @PostMapping("/batchAdd")
+    public AjaxResult add(@RequestBody CdUserStudyLogBatchAddBo bo) {
+        return AjaxResult.success(iCdUserStudyLogService.insertBatchByAddBo(bo.getList())? 1 : 0);
+    }
+
     /**
      * 查询用户学习记录列表
      */
@@ -116,4 +135,26 @@ public class UserStudyLogController extends BaseController {
         List<CdUserStudyLogVo> list = iCdUserStudyLogService.getStudyWeekList(bo);
         return getDataTable(list);
     }
+
+    @ApiOperation("查询统计学习数据")
+    @PreAuthorize("@ss.hasPermi('system:log:list')")
+    @GetMapping("/studyCountNum")
+    public AjaxResult<CdUserStudyCountVo> studyCountNum(CdUserStudyLogQueryBo bo) {
+        if (!ToolsUtils.checkSignFromOldSys(bo.getStamp(), bo.getSign())) {
+            throw new CustomException("签名错误");
+        }
+        CdUserStudyCountVo vo = iCdUserStudyLogService.getStudyCountNum(bo);
+        return AjaxResult.success(vo);
+    }
+
+    @ApiOperation("查询统计做题得分人数数据")
+    @PreAuthorize("@ss.hasPermi('system:log:list')")
+    @GetMapping("/examScoreCountNum")
+    public AjaxResult<CdUserExamScoreVo> examScoreCountNum(CdUserStudyLogQueryBo bo) {
+        if (!ToolsUtils.checkSignFromOldSys(bo.getStamp(), bo.getSign())) {
+            throw new CustomException("签名错误");
+        }
+        CdUserExamScoreVo vo = iCdUserStudyLogService.getStudyExamScoreNum(bo);
+        return AjaxResult.success(vo);
+    }
 }

+ 36 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/cd/bo/CdUserStudyLogAddBo.java

@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
+
+import java.math.BigDecimal;
 import java.util.Date;
 
 
@@ -66,4 +68,38 @@ public class CdUserStudyLogAddBo {
     /** 来源平台 1新系统 2旧系统 */
     @ApiModelProperty("来源平台 1新系统 2旧系统")
     private Integer fromPlat;
+    /** 试卷总题数(含主观题) */
+    @ApiModelProperty("试卷总题数(含主观题)")
+    private Long totalQuestionNum;
+    /** 做对总题数 */
+    @ApiModelProperty("做对总题数")
+    private Long rightQuestionNum;
+    /** 做的题目数(含主观题) */
+    @ApiModelProperty("做的题目数(含主观题)")
+    private Long doQuestionNum;
+    /** 做错题目数 */
+    @ApiModelProperty("做错题目数")
+    private Long errorQuestionNum;
+    /** 总分 */
+    @ApiModelProperty("总分")
+    private BigDecimal totalScore;
+    /** 得分 */
+    @ApiModelProperty("得分")
+    private Long performance;
+    @ApiModelProperty("上线时间")
+    private Long onlineTime;
+    @ApiModelProperty("今天学习时长秒数")
+    private Long studyTime;
+    @ApiModelProperty("七大员年份")
+    private String sevenYear;
+    @ApiModelProperty("是否报名考试 0没有 1有")
+    private Integer applyExamStatus;
+    @ApiModelProperty("考试通过状态 0没有 1有")
+    private Integer passExamStatus;
+    @ApiModelProperty("考试补考状态 0没有 1有")
+    private Integer resitExamStatus;
+    @ApiModelProperty("订单商品ID")
+    private Long orderGoodsId;
+    @ApiModelProperty("企业ID")
+    private String tenantId;
 }

+ 25 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/cd/bo/CdUserStudyLogBatchAddBo.java

@@ -0,0 +1,25 @@
+package com.zhongzheng.modules.cd.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+
+/**
+ * 用户学习记录添加对象 cd_user_study_log
+ *
+ * @author ruoyi
+ * @date 2023-09-12
+ */
+@Data
+@ApiModel("用户学习记录添加对象")
+public class CdUserStudyLogBatchAddBo {
+
+    /** 列表 */
+    @ApiModelProperty("列表")
+    private List<CdUserStudyLogAddBo> list;
+
+}

+ 7 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/cd/bo/CdUserStudyLogQueryBo.java

@@ -98,4 +98,11 @@ public class CdUserStudyLogQueryBo extends BaseEntity {
 	@NotBlank(message = "签名不能为空")
 	private String sign;
 
+	@ApiModelProperty("开始分数")
+	@NotBlank(message = "开始分数")
+	private Integer startScore;
+
+	@ApiModelProperty("结束分数")
+	@NotBlank(message = "结束分数")
+	private Integer endScore;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/cd/domain/CdUserStudyLog.java

@@ -1,6 +1,7 @@
 package com.zhongzheng.modules.cd.domain;
 
 import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
@@ -60,4 +61,6 @@ private static final long serialVersionUID=1L;
     private String goodsName;
     /** 来源平台 1新系统 2旧系统 */
     private Integer fromPlat;
+
+    private String tenantId;
 }

+ 8 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/cd/mapper/CdUserStudyLogMapper.java

@@ -3,8 +3,10 @@ package com.zhongzheng.modules.cd.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zhongzheng.modules.cd.bo.CdUserStudyLogQueryBo;
 import com.zhongzheng.modules.cd.domain.CdUserStudyLog;
+import com.zhongzheng.modules.cd.vo.CdUserStudyCountVo;
 import com.zhongzheng.modules.cd.vo.CdUserStudyLogVo;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -20,4 +22,10 @@ public interface CdUserStudyLogMapper extends BaseMapper<CdUserStudyLog> {
     List<CdUserStudyLogVo> getStudyOnLineRanking(CdUserStudyLogQueryBo bo);
 
     List<CdUserStudyLogVo> getStudyWeekList(CdUserStudyLogQueryBo bo);
+
+    CdUserStudyCountVo getStudyCountNum(CdUserStudyLogQueryBo bo);
+
+    Integer getStudyExamScoreNum(CdUserStudyLogQueryBo bo);
+
+    BigDecimal getStudyExamAvgScore(CdUserStudyLogQueryBo bo);
 }

+ 9 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/cd/service/ICdUserStudyLogService.java

@@ -6,10 +6,13 @@ import com.zhongzheng.modules.cd.bo.CdUserStudyLogAddBo;
 import com.zhongzheng.modules.cd.bo.CdUserStudyLogEditBo;
 import com.zhongzheng.modules.cd.bo.CdUserStudyLogQueryBo;
 import com.zhongzheng.modules.cd.domain.CdUserStudyLog;
+import com.zhongzheng.modules.cd.vo.CdUserExamScoreVo;
+import com.zhongzheng.modules.cd.vo.CdUserStudyCountVo;
 import com.zhongzheng.modules.cd.vo.CdUserStudyLogVo;
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 用户学习记录Service接口
@@ -36,6 +39,8 @@ public interface ICdUserStudyLogService extends IService<CdUserStudyLog> {
 	 */
 	Boolean insertByAddBo(CdUserStudyLogAddBo bo);
 
+	Boolean insertBatchByAddBo(List<CdUserStudyLogAddBo> bo);
+
 	/**
 	 * 根据编辑业务对象修改用户学习记录
 	 * @param bo 用户学习记录编辑业务对象
@@ -56,4 +61,8 @@ public interface ICdUserStudyLogService extends IService<CdUserStudyLog> {
 	List<CdUserStudyLogVo> getStudyOnLineRanking(CdUserStudyLogQueryBo bo);
 
 	List<CdUserStudyLogVo> getStudyWeekList(CdUserStudyLogQueryBo bo);
+
+	CdUserStudyCountVo getStudyCountNum(CdUserStudyLogQueryBo bo);
+
+	CdUserExamScoreVo getStudyExamScoreNum(CdUserStudyLogQueryBo bo);
 }

+ 62 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/cd/service/impl/CdUserStudyLogServiceImpl.java

@@ -11,6 +11,8 @@ import com.zhongzheng.modules.cd.bo.CdUserStudyLogQueryBo;
 import com.zhongzheng.modules.cd.domain.CdUserStudyLog;
 import com.zhongzheng.modules.cd.mapper.CdUserStudyLogMapper;
 import com.zhongzheng.modules.cd.service.ICdUserStudyLogService;
+import com.zhongzheng.modules.cd.vo.CdUserExamScoreVo;
+import com.zhongzheng.modules.cd.vo.CdUserStudyCountVo;
 import com.zhongzheng.modules.cd.vo.CdUserStudyLogVo;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -18,11 +20,13 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.pagehelper.Page;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -92,6 +96,15 @@ public class CdUserStudyLogServiceImpl extends ServiceImpl<CdUserStudyLogMapper,
         return this.save(add);
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean insertBatchByAddBo(List<CdUserStudyLogAddBo> bo) {
+        for(CdUserStudyLogAddBo addBos : bo){
+            this.insertByAddBo(addBos);
+        }
+        return true;
+    }
+
     @Override
     public Boolean updateByEditBo(CdUserStudyLogEditBo bo) {
         CdUserStudyLog update = BeanUtil.toBean(bo, CdUserStudyLog.class);
@@ -157,4 +170,53 @@ public class CdUserStudyLogServiceImpl extends ServiceImpl<CdUserStudyLogMapper,
         }
         return list;
     }
+
+    @Override
+    public CdUserStudyCountVo getStudyCountNum(CdUserStudyLogQueryBo bo) {
+        return this.baseMapper.getStudyCountNum(bo);
+    }
+
+    @Override
+    public CdUserExamScoreVo getStudyExamScoreNum(CdUserStudyLogQueryBo bo) {
+        CdUserExamScoreVo vo = new CdUserExamScoreVo();
+        CdUserStudyLogQueryBo queryBo1 =new CdUserStudyLogQueryBo();
+        queryBo1.setStartScore(100);
+        queryBo1.setEndScore(100);
+        Integer num100 = this.baseMapper.getStudyExamScoreNum(queryBo1);
+        vo.setNum100(num100);
+
+        CdUserStudyLogQueryBo queryBo2 =new CdUserStudyLogQueryBo();
+        queryBo2.setStartScore(80);
+        queryBo2.setEndScore(99);
+        Integer num80 = this.baseMapper.getStudyExamScoreNum(queryBo2);
+        vo.setNum80(num80);
+
+        CdUserStudyLogQueryBo queryBo3 =new CdUserStudyLogQueryBo();
+        queryBo3.setStartScore(60);
+        queryBo3.setEndScore(79);
+        Integer num60 = this.baseMapper.getStudyExamScoreNum(queryBo3);
+        vo.setNum60(num60);
+
+        CdUserStudyLogQueryBo queryBo4 =new CdUserStudyLogQueryBo();
+        queryBo4.setStartScore(40);
+        queryBo4.setEndScore(59);
+        Integer num40 = this.baseMapper.getStudyExamScoreNum(queryBo4);
+        vo.setNum40(num40);
+
+        CdUserStudyLogQueryBo queryBo5 =new CdUserStudyLogQueryBo();
+        queryBo5.setStartScore(20);
+        queryBo5.setEndScore(39);
+        Integer num20 = this.baseMapper.getStudyExamScoreNum(queryBo5);
+        vo.setNum20(num20);
+
+        CdUserStudyLogQueryBo queryBo6 =new CdUserStudyLogQueryBo();
+        queryBo6.setStartScore(0);
+        queryBo6.setEndScore(19);
+        Integer num0 = this.baseMapper.getStudyExamScoreNum(queryBo6);
+        vo.setNum0(num0);
+
+        BigDecimal avgScore = this.baseMapper.getStudyExamAvgScore(new CdUserStudyLogQueryBo());
+        vo.setAvgScore(avgScore);
+        return vo;
+    }
 }

+ 36 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/cd/vo/CdUserExamScoreVo.java

@@ -0,0 +1,36 @@
+package com.zhongzheng.modules.cd.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+
+/**
+ * 用户学习记录视图对象 mall_package
+ *
+ * @author ruoyi
+ * @date 2023-09-12
+ */
+@Data
+@ApiModel("用户学习记录视图对象")
+public class CdUserExamScoreVo {
+	private static final long serialVersionUID = 1L;
+
+
+	@ApiModelProperty("100分人数")
+	private Integer Num100;
+	@ApiModelProperty("80到99")
+	private Integer Num80;
+	@ApiModelProperty("60-79")
+	private Integer Num60;
+	@ApiModelProperty("40-59")
+	private Integer Num40;
+	@ApiModelProperty("20-39")
+	private Integer Num20;
+	@ApiModelProperty("0-19")
+	private Integer Num0;
+	@ApiModelProperty("平均分")
+	private BigDecimal avgScore;
+}

+ 33 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/cd/vo/CdUserStudyCountVo.java

@@ -0,0 +1,33 @@
+package com.zhongzheng.modules.cd.vo;
+
+import com.zhongzheng.common.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+
+/**
+ * 用户学习记录视图对象 mall_package
+ *
+ * @author ruoyi
+ * @date 2023-09-12
+ */
+@Data
+@ApiModel("用户学习记录视图对象")
+public class CdUserStudyCountVo {
+	private static final long serialVersionUID = 1L;
+
+
+	@ApiModelProperty("报名人数")
+	private Long applyNum;
+	@ApiModelProperty("报名学习人数")
+	private Long studyNum;
+	@ApiModelProperty("报名考试人数")
+	private Long applyExamNum;
+	@ApiModelProperty("考试通过人数")
+	private Long passExamNum;
+	@ApiModelProperty("考试补考人数")
+	private Long resitExamNum;
+}

+ 2 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/cd/vo/CdUserStudyLogVo.java

@@ -121,9 +121,9 @@ public class CdUserStudyLogVo {
 	@ApiModelProperty("周出勤率")
 	private BigDecimal onlineRate;
 
-	@ApiModelProperty("预估通过率")
+	@ApiModelProperty("预估通过率")
 	private BigDecimal estimationPassRate;
 
-	@ApiModelProperty("实际通过率")
+	@ApiModelProperty("实际通过率")
 	private BigDecimal realPassRate;
 }

+ 84 - 2
zhongzheng-system/src/main/resources/mapper/modules/cd/log/CdUserStudyLogMapper.xml

@@ -65,7 +65,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
 
 
-    <select id="getStudyWeekRanking" parameterType="com.zhongzheng.modules.cd.bo.CdUserStudyLogQueryBo" resultType="com.zhongzheng.modules.cd.vo.CdUserStudyLogVo">
+    <select id="getStudyWeekList" parameterType="com.zhongzheng.modules.cd.bo.CdUserStudyLogQueryBo" resultType="com.zhongzheng.modules.cd.vo.CdUserStudyLogVo">
         SELECT
         any_value ( avatar ) avatar,
         any_value ( realname ) realname,
@@ -91,7 +91,89 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             AND input_order_sn = #{inputOrderSn}
         </if>
         GROUP BY
-        user_id,
+        id_card,
         goods_id
     </select>
+
+    <select id="getStudyWeekList" parameterType="com.zhongzheng.modules.cd.bo.CdUserStudyLogQueryBo" resultType="com.zhongzheng.modules.cd.vo.CdUserStudyLogVo">
+        SELECT
+        any_value ( avatar ) avatar,
+        any_value ( realname ) realname,
+        any_value ( telphone ) telphone,
+        any_value ( goods_name ) goods_name,
+        SUM( study_time ) study_time,
+        MAX( total_class_hour ) total_class_hour,
+        MAX( study_class_hour ) study_class_hour,
+        MAX( do_question_num ) do_question_num,
+        MAX( right_question_num ) right_question_num,
+        MAX( total_question_num ) total_question_num
+        FROM
+        cd_user_study_log
+        WHERE
+        1=1
+        <if test="planId != null and planId != ''">
+            AND plan_id = #{planId}
+        </if>
+        <if test="startTime != null and startTime != ''">
+            AND (date_time BETWEEN #{startTime} and #{endTime})
+        </if>
+        <if test="inputOrderSn != null and inputOrderSn != ''">
+            AND input_order_sn = #{inputOrderSn}
+        </if>
+        GROUP BY
+        id_card
+    </select>
+
+    <select id="getStudyCountNum" parameterType="com.zhongzheng.modules.cd.bo.CdUserStudyLogQueryBo" resultType="com.zhongzheng.modules.cd.vo.CdUserStudyCountVo">
+        SELECT
+            count(*) apply_num,
+            SUM( online_time ) study_num,
+            SUM( apply_exam_status ) apply_exam_num,
+            SUM( pass_exam_status ) pass_exam_num,
+            SUM( resit_exam_status ) resit_exam_num
+        FROM
+            (
+                SELECT
+                    id_card,
+                    IF
+                        ( MAX( online_time ) IS NULL, 0, 1 ) online_time,
+                    MAX( apply_exam_status ) apply_exam_status,
+                    MAX( pass_exam_status ) pass_exam_status,
+                    MAX( resit_exam_status ) resit_exam_status
+                FROM
+                    cd_user_study_log
+                WHERE
+                    1 = 1
+        <if test="planId != null and planId != ''">
+            AND plan_id = #{planId}
+        </if>
+        <if test="startTime != null and startTime != ''">
+            AND (date_time BETWEEN #{startTime} and #{endTime})
+        </if>
+        <if test="inputOrderSn != null and inputOrderSn != ''">
+            AND input_order_sn = #{inputOrderSn}
+        </if>
+                GROUP BY
+                    id_card
+            )u
+    </select>
+
+    <select id="getStudyExamScoreNum" parameterType="com.zhongzheng.modules.cd.bo.CdUserStudyLogQueryBo" resultType="Int">
+        SELECT
+            IFNULL( count( DISTINCT id_card ), 0 ) num
+        FROM
+            cd_user_study_log
+        GROUP BY
+            id_card
+        HAVING
+            MAX( performance ) BETWEEN #{startScore}
+                AND #{endScore}
+    </select>
+
+    <select id="getStudyExamAvgScore" parameterType="com.zhongzheng.modules.cd.bo.CdUserStudyLogQueryBo" resultType="BigDecimal">
+        SELECT
+            AVG( a.performance )
+        FROM
+            ( SELECT IFNULL( MAX( performance ), 0 ) performance FROM cd_user_study_log GROUP BY id_card )a
+    </select>
 </mapper>