Kaynağa Gözat

feat: 导出

xdd 2 hafta önce
ebeveyn
işleme
4903f8e32a

+ 8 - 0
fs-service-system/src/main/java/com/fs/company/mapper/CompanyUserMapper.java

@@ -264,4 +264,12 @@ public interface CompanyUserMapper
     @Select("select user_id,dept_id,user_name from company_user where del_flag=0 and status=0")
     List<CompanyUser> selectAllCompanyUserList();
 
+    /**
+     * 获取对应的销售观看记录数
+     * @param companyUserId
+     * @return
+     */
+    Long queryCompanyUserWatchCount(Long companyUserId);
+
+    Long queryCompanyUserWatchCountCompleted(Long userId);
 }

+ 21 - 8
fs-service-system/src/main/java/com/fs/course/domain/FsCourseQuestionBank.java

@@ -19,15 +19,14 @@ public class FsCourseQuestionBank extends BaseEntity
     private Long id;
 
     /** 问题 */
-    @Excel(name = "题")
+    @Excel(name = "题")
     private String title;
 
-    /** 排序 */
-    @Excel(name = "排序")
-    private Long sort;
+    @Excel(name = "问题类别")
+    private Long questionType;
 
     /** 类别1 单选 2 多选  */
-    @Excel(name = "类别1 单选 2 多选 ")
+    @Excel(name = "题目类型: 单选 多选")
     private Long type;
 
     /** 状态 */
@@ -35,12 +34,26 @@ public class FsCourseQuestionBank extends BaseEntity
     private Long status;
 
     /** 选项 */
-    @Excel(name = "选项")
+
     private String question;
+    /**
+     * 多个用分隔符|
+     */
+    @Excel(name = "选项")
+    private String questionOption;
 
     /** 答案 */
-    @Excel(name = "答案")
     private String answer;
-    private Long questionType;
+
+    /**
+     * 答案: 多个用 | 隔开
+     */
+    @Excel(name = "答案")
+    private String answerOption;
+
     private Long questionSubType;
+
+    /** 排序 */
+    @Excel(name = "序号")
+    private Long sort;
 }

+ 29 - 1
fs-service-system/src/main/java/com/fs/course/service/impl/FsCourseQuestionBankServiceImpl.java

@@ -17,7 +17,9 @@ import com.fs.store.domain.FsUser;
 import com.fs.store.mapper.FsUserMapper;
 import com.fs.store.service.IFsStorePaymentService;
 import com.fs.system.service.ISysConfigService;
+import com.google.gson.JsonParser;
 import com.hc.openapi.tool.fastjson.JSON;
+import jodd.util.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -77,7 +79,33 @@ public class FsCourseQuestionBankServiceImpl implements IFsCourseQuestionBankSer
     @Override
     public List<FsCourseQuestionBank> selectFsCourseQuestionBankList(FsCourseQuestionBank fsCourseQuestionBank)
     {
-        return fsCourseQuestionBankMapper.selectFsCourseQuestionBankList(fsCourseQuestionBank);
+        List<FsCourseQuestionBank> fsCourseQuestionBanks = fsCourseQuestionBankMapper.selectFsCourseQuestionBankList(fsCourseQuestionBank);
+        for (FsCourseQuestionBank courseQuestionBank : fsCourseQuestionBanks) {
+
+            if(StringUtil.isNotBlank(courseQuestionBank.getQuestion())) {
+                // 问题列表多个 以分隔符 | 结尾
+                JSONArray questionArr = com.alibaba.fastjson.JSON.parseArray(courseQuestionBank.getQuestion());
+                List<String> questionOpt = new ArrayList<>();
+                for(int i=0;i<questionArr.size();i++){
+                    JSONObject jsonObject = questionArr.getJSONObject(i);
+                    String name = jsonObject.getString("name");
+                    questionOpt.add(name);
+                }
+                courseQuestionBank.setQuestionOption(String.join("|",questionOpt));
+            }
+
+            if(StringUtil.isNotBlank(courseQuestionBank.getAnswer())) {
+                // 如果是json数组
+                if(JsonParser.parseString(courseQuestionBank.getAnswer()).isJsonArray()) {
+                    String answerOpt = String.join("|", JSONUtil.parseArray(courseQuestionBank.getAnswer()).toList(String.class));
+                    courseQuestionBank.setAnswerOption(answerOpt);
+                } else {
+                    courseQuestionBank.setAnswerOption(courseQuestionBank.getAnswer());
+                }
+            }
+        }
+
+        return fsCourseQuestionBanks;
     }
 
     /**

+ 5 - 0
fs-service-system/src/main/java/com/fs/qw/mapper/QwUserMapper.java

@@ -369,4 +369,9 @@ public interface QwUserMapper extends BaseMapper<QwUser>
      * @return  list
      */
     List<OptionVO> selectQwUserListByMap(@Param("params") Map<String, Object> params);
+
+
+    @Select("select qw_user_id from qw_user where company_user_id = ${companyUserId}")
+    List<String> findQwUserIdListByCompanyUserId(@Param("companyUserId") Long companyUserId);
+
 }

+ 4 - 0
fs-service-system/src/main/java/com/fs/sop/mapper/QwSopLogsMapper.java

@@ -287,4 +287,8 @@ public interface QwSopLogsMapper extends BaseMapper<QwSopLogs> {
 
     @DataSource(DataSourceType.SOP)
     void batchUpdateQwSopLogsById(@Param("data") List<QwSopLogs> logs);
+
+    @DataSource(DataSourceType.SOP)
+    Long selectQwSopLogsCountByQwUserId(@Param("data") List<String> qwUserIdList);
+
 }

+ 17 - 13
fs-service-system/src/main/java/com/fs/statis/domain/FsStatisSalerWatch.java

@@ -17,32 +17,36 @@ public class FsStatisSalerWatch {
     /**
      * 主键ID
      */
-    private Integer id;
+    private Long id;
 
     /**
      * 部门
      */
-    private Integer deptId;
+    private Long deptId;
 
     /**
      * 销售id
      */
-    private Integer companyUserId;
+    private Long companyUserId;
 
     /**
      * 训练营人数
      */
-    private Integer trainCampNum;
+    private Long trainCampNum;
 
     /**
      * 未报名人数
      */
-    private Integer notRegisteredNum;
+    private Long notRegisteredNum;
 
     /**
      * 已报名人数
      */
-    private Integer registeredNum;
+    private Long registeredNum;
+    /**
+     * 完课人数
+     */
+    private Long completedNum;
 
     /**
      * 报名率
@@ -57,22 +61,22 @@ public class FsStatisSalerWatch {
     /**
      * 未上线-总数
      */
-    private Integer offlineTotal;
+    private Long offlineTotal;
 
     /**
      * 未上线-未参与
      */
-    private Integer offlineNotPart; // 注意:原SQL中 'offine_not_part' 可能有拼写错误,这里修正为 offlineNotPart
+    private Long offlineNotPart; // 注意:原SQL中 'offine_not_part' 可能有拼写错误,这里修正为 offlineNotPart
 
     /**
      * 未上线-未观看 (原SQL注释为'为观看',推测应为'未观看')
      */
-    private Integer offlineNotWatched;
+    private Long offlineNotWatched;
 
     /**
      * 已上线-总数
      */
-    private Integer onlineTotal;
+    private Long onlineTotal;
 
     /**
      * 已上线-上线率
@@ -87,15 +91,15 @@ public class FsStatisSalerWatch {
     /**
      * 已上线-未完播
      */
-    private Integer onlineIncompletePlayback;
+    private Long onlineIncompletePlayback;
 
     /**
      * 已上线-已完播
      */
-    private Integer onlineCompletePlayback;
+    private Long onlineCompletePlayback;
 
     /**
      * 训练营id
      */
-    private Integer periodId;
+    private Long periodId;
 }

+ 27 - 1
fs-service-system/src/main/java/com/fs/statis/service/impl/FsStatisSalerWatchServiceImpl.java

@@ -2,6 +2,8 @@ package com.fs.statis.service.impl;
 
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.mapper.CompanyUserMapper;
+import com.fs.qw.mapper.QwUserMapper;
+import com.fs.sop.mapper.QwSopLogsMapper;
 import com.fs.statis.domain.FsStatisSalerWatch;
 import com.fs.statis.dto.StatsWatchLogPageListDTO;
 import com.fs.statis.mapper.FsStatisSalerWatchMapper;
@@ -21,10 +23,16 @@ public class FsStatisSalerWatchServiceImpl implements FsStatisSalerWatchService
 
     private final CompanyUserMapper companyUserMapper;
 
+    private final QwUserMapper qwUserMapper;
+
+    private final QwSopLogsMapper qwSopLogsMapper;
+
     @Autowired
-    public FsStatisSalerWatchServiceImpl(FsStatisSalerWatchMapper fsStatisSalerWatchMapper, CompanyUserMapper companyUserMapper) {
+    public FsStatisSalerWatchServiceImpl(FsStatisSalerWatchMapper fsStatisSalerWatchMapper, CompanyUserMapper companyUserMapper, QwUserMapper qwUserMapper, QwSopLogsMapper qwSopLogsMapper) {
         this.fsStatisSalerWatchMapper = fsStatisSalerWatchMapper;
         this.companyUserMapper = companyUserMapper;
+        this.qwUserMapper = qwUserMapper;
+        this.qwSopLogsMapper = qwSopLogsMapper;
     }
 
     /**
@@ -98,6 +106,24 @@ public class FsStatisSalerWatchServiceImpl implements FsStatisSalerWatchService
         List<CompanyUser> companyUserList = this.companyUserMapper.selectAllCompanyUserList();
 
         for (CompanyUser companyUser : companyUserList) {
+            // 找到销售关联的企微账号
+            List<String> qwUserIdList = qwUserMapper.findQwUserIdListByCompanyUserId(companyUser.getUserId());
+            // 去sop记录表找对应的SOP发送记录,记录数作为营期人数
+            Long periodCount = qwSopLogsMapper.selectQwSopLogsCountByQwUserId(qwUserIdList);
+            // 再去course_watch_log找对应的销售观看记录作为已报名数
+            Long registerCount = companyUserMapper.queryCompanyUserWatchCount(companyUser.getUserId());
+            Long completedCount = companyUserMapper.queryCompanyUserWatchCountCompleted(companyUser.getUserId());
+
+
+            FsStatisSalerWatch fsStatisSalerWatch = new FsStatisSalerWatch();
+            fsStatisSalerWatch.setDeptId(companyUser.getDeptId());
+            fsStatisSalerWatch.setCompanyUserId(companyUser.getUserId());
+            fsStatisSalerWatch.setTrainCampNum(periodCount);
+            fsStatisSalerWatch.setNotRegisteredNum(periodCount - registerCount);
+            fsStatisSalerWatch.setRegisteredNum(registerCount);
+            fsStatisSalerWatch.setCompletedNum(completedCount);
+            fsStatisSalerWatch.setFinishedRate((float) (completedCount / registerCount));
+            fsStatisSalerWatch.setRegRate((float) (registerCount / periodCount));
 
         }
     }

+ 6 - 0
fs-service-system/src/main/resources/mapper/company/CompanyUserMapper.xml

@@ -500,6 +500,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <!-- 数据范围过滤 -->
         ${params.dataScope}
     </select>
+    <select id="queryCompanyUserWatchCount" resultType="java.lang.Long">
+        select count(1) from fs_course_watch_log where company_user_id = #{companyUserId}
+    </select>
+    <select id="queryCompanyUserWatchCountCompleted" resultType="java.lang.Long">
+
+    </select>
 
     <update id="setIsRegisterMember" parameterType="Long">
         update company_user

+ 11 - 0
fs-service-system/src/main/resources/mapper/sop/QwSopLogsMapper.xml

@@ -552,6 +552,17 @@
         </where>
         ORDER BY send_time desc
     </select>
+    <select id="selectQwSopLogsCountByQwUserId" resultType="java.lang.Long">
+        select count(1) from qw_sop_logs where
+            type = '0'
+            AND send_status = '1'
+            AND create_time >= CURDATE()
+            AND create_time &lt; DATE_ADD(CURDATE(), INTERVAL 1 DAY)
+            AND qw_userid in
+            <foreach collection="data" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+    </select>
 
 
     <!-- 批量更新 QwSopLogs -->