瀏覽代碼

fix:课程统计

ct 1 天之前
父節點
當前提交
74349eaa2d

+ 2 - 0
fs-service/src/main/java/com/fs/his/mapper/FsUserMapper.java

@@ -340,4 +340,6 @@ public interface FsUserMapper
 
     @Select("select * from fs_user where course_ma_open_id=#{openId}")
     FsUser selectFsUserByCourseMaOpenId(String openId);
+
+    Map<String, Long> countUserCourse2(UserStatisticsCommonParam param);
 }

+ 49 - 1
fs-service/src/main/java/com/fs/his/service/impl/FsUserServiceImpl.java

@@ -777,7 +777,8 @@ public class FsUserServiceImpl implements IFsUserService
 
     @Override
     public FsUserStatisticsVO userStatisticsDetails(UserStatisticsCommonParam param) {
-        FsUserStatisticsVO userStatisticsVO = getUserStatistics(param);
+//        FsUserStatisticsVO userStatisticsVO = getUserStatistics(param);
+        FsUserStatisticsVO userStatisticsVO = getUserStatistics2(param);
 
         // 判断是否是管理员
         CompanyUser companyUser = companyUserMapper.selectCompanyUserById(param.getUserId());
@@ -794,6 +795,53 @@ public class FsUserServiceImpl implements IFsUserService
         return userStatisticsVO;
     }
 
+    private FsUserStatisticsVO getUserStatistics2(UserStatisticsCommonParam param) {
+        FsUserStatisticsVO fsUserStatisticsVO = new FsUserStatisticsVO();
+
+        // 判断是否是管理员
+        CompanyUser companyUser = companyUserMapper.selectCompanyUserById(param.getUserId());
+        if (companyUser != null && companyUser.isAdmin()){
+            param.setUserId(0L);
+            param.setCompanyId(companyUser.getCompanyId());
+        }
+        // 获取课程统计
+        Map<String, Long> couserMap = fsUserMapper.countUserCourse2(param);
+        if (couserMap != null) {
+            //看课人数
+            fsUserStatisticsVO.setCourseWatchNum(couserMap.get("courseWatchNum").intValue()).setCourseCompleteNum(couserMap.get("courseCompleteNum").intValue());
+
+            if (couserMap.get("courseCompleteNum") != null && couserMap.get("courseWatchNum") > 0) {
+                int courseCompleteRate = BigDecimal.valueOf(couserMap.get("courseCompleteNum"))
+                        .divide(BigDecimal.valueOf(couserMap.get("courseWatchNum")), 2, RoundingMode.HALF_UP)
+                        .multiply(BigDecimal.valueOf(100))
+                        .intValue();
+                fsUserStatisticsVO.setCourseCompleteRate(courseCompleteRate);
+            }
+        }
+
+        // 获取答题统计
+        Map<String, Long> answerMap = fsUserMapper.countUserAnswer(param);
+        if (answerMap != null) {
+            fsUserStatisticsVO.setAnswerNum(answerMap.get("answerNum").intValue()).setAnswerRightNum(answerMap.get("answerRightNum").intValue());
+
+            if (answerMap.get("answerRightNum") != null && answerMap.get("answerNum") > 0) {
+                int answerCompleteRate = BigDecimal.valueOf(answerMap.get("answerRightNum"))
+                        .divide(BigDecimal.valueOf(answerMap.get("answerNum")), 2, RoundingMode.HALF_UP)
+                        .multiply(BigDecimal.valueOf(100))
+                        .intValue();
+                fsUserStatisticsVO.setAnswerRightRate(answerCompleteRate);
+            }
+        }
+
+        // 获取红包统计
+        Map<String, Object> redPacketMap = fsUserMapper.countUserRedPacket(param);
+        if(redPacketMap != null && redPacketMap.get("redPacketNum") != null && redPacketMap.get("redPacketAmount") != null) {
+            fsUserStatisticsVO.setRedPacketNum(Integer.parseInt(redPacketMap.get("redPacketNum").toString()))
+                    .setRedPacketAmount(new BigDecimal(redPacketMap.get("redPacketAmount").toString()));
+        }
+        return fsUserStatisticsVO;
+    }
+
     @Override
     public List<FsUserRankingVO> userRanking(Long userId, String startTime, String endTime, String periodId, String videoId, String order, Integer type) {
         List<FsUserRankingVO> listVO = Collections.emptyList();

+ 52 - 0
fs-service/src/main/resources/mapper/his/FsUserMapper.xml

@@ -1358,4 +1358,56 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             </if>
         </where>
     </select>
+    <select id="countUserCourse2" resultType="java.util.Map">
+        SELECT
+        (
+        SELECT
+        count(1)
+        FROM
+        fs_course_watch_log l
+        LEFT JOIN company_user ON l.company_user_id = company_user.user_id
+        where
+        l.log_type != 3
+        <if test="userId != null and userId != 0 ">
+            and (l.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
+        </if>
+        <if test="userId != null and userId == 0 ">
+            and l.company_id = #{companyId}
+        </if>
+        <if test="periodId != null and periodId != ''">
+            AND l.period_id = #{periodId}
+        </if>
+        <if test="videoId != null and videoId != ''">
+            AND l.video_id = #{videoId}
+        </if>
+        <if test="companyUserId != null and companyUserId != ''">
+            AND l.user_id = #{companyUserId}
+        </if>
+        ) as courseWatchNum,
+        (
+        SELECT
+        count(1)
+        FROM
+        fs_course_watch_log l
+        LEFT JOIN company_user ON l.company_user_id = company_user.user_id
+        where
+        l.log_type = 2
+        <if test="userId != null and userId != 0 ">
+            and (l.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
+        </if>
+        <if test="userId != null and userId == 0 ">
+            and l.company_id = #{companyId}
+        </if>
+        <if test="periodId != null and periodId != ''">
+            AND l.period_id = #{periodId}
+        </if>
+        <if test="videoId != null and videoId != ''">
+            AND l.video_id = #{videoId}
+        </if>
+        -- 单独通过销售id查询
+        <if test="companyUserId != null and companyUserId != ''">
+            AND l.user_id = #{companyUserId}
+        </if>
+        ) as courseCompleteNum
+    </select>
 </mapper>