Pārlūkot izejas kodu

答题记录修改

xdd 3 nedēļas atpakaļ
vecāks
revīzija
d4529bb846
18 mainītis faili ar 547 papildinājumiem un 224 dzēšanām
  1. 1 1
      fs-company/src/main/java/com/fs/course/controller/FsCourseAnswerLogsController.java
  2. 3 4
      fs-company/src/main/resources/application-dev.yml
  3. 0 45
      fs-service-system/src/main/java/com/fs/company/mapper/CompanyTcmReportMapper.java
  4. 49 49
      fs-service-system/src/main/java/com/fs/company/mapper/CompanyUserMapper.java
  5. 2 0
      fs-service-system/src/main/java/com/fs/course/mapper/FsCourseAnswerLogsMapper.java
  6. 4 7
      fs-service-system/src/main/java/com/fs/course/mapper/FsCourseWatchLogMapper.java
  7. 35 1
      fs-service-system/src/main/java/com/fs/course/param/FsCourseAnswerLogsParam.java
  8. 1 0
      fs-service-system/src/main/java/com/fs/course/service/IFsCourseAnswerLogsService.java
  9. 7 0
      fs-service-system/src/main/java/com/fs/course/service/cache/IFsUserCourseVideoCacheService.java
  10. 32 0
      fs-service-system/src/main/java/com/fs/course/service/cache/impl/FsUserCourseVideoCacheServiceImpl.java
  11. 70 2
      fs-service-system/src/main/java/com/fs/course/service/impl/FsCourseAnswerLogsServiceImpl.java
  12. 8 0
      fs-service-system/src/main/java/com/fs/course/vo/FsCourseAnswerLogsListVO.java
  13. 13 0
      fs-service-system/src/main/java/com/fs/store/service/cache/IFsUserCacheService.java
  14. 13 0
      fs-service-system/src/main/java/com/fs/store/service/cache/IFsUserCourseCacheService.java
  15. 28 0
      fs-service-system/src/main/java/com/fs/store/service/cache/impl/FsUserCourseCacheServiceImpl.java
  16. 30 0
      fs-service-system/src/main/java/com/fs/store/service/cache/impl/IFsUserCacheServiceImpl.java
  17. 230 115
      fs-service-system/src/main/resources/mapper/company/CompanyTcmReportMapper.xml
  18. 21 0
      fs-service-system/src/main/resources/mapper/course/FsCourseAnswerLogsMapper.xml

+ 1 - 1
fs-company/src/main/java/com/fs/course/controller/FsCourseAnswerLogsController.java

@@ -48,7 +48,7 @@ public class FsCourseAnswerLogsController extends BaseController
         if (param.getPhoneMk() != null && param.getPhoneMk() != "") {
             param.setPhone(param.getPhoneMk());
         }
-        List<FsCourseAnswerLogsListVO> list = fsCourseAnswerLogsService.selectFsCourseAnswerLogsListVO(param);
+        List<FsCourseAnswerLogsListVO> list = fsCourseAnswerLogsService.selectFsCourseAnswerLogsListVONew(param);
         return getDataTable(list);
     }
 

+ 3 - 4
fs-company/src/main/resources/application-dev.yml

@@ -33,10 +33,9 @@ spring:
                 # 从库数据源
                 slave:
                     # 从数据源开关/默认关闭
-                    enabled: false
-                    url:
-                    username:
-                    password:
+                    url: jdbc:mysql://139.186.77.83:3306/ylrz_scrm?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    username: Rtroot
+                    password: Rtroot
                 # 初始连接数
                 initialSize: 5
                 # 最小连接池数量

+ 0 - 45
fs-service-system/src/main/java/com/fs/company/mapper/CompanyTcmReportMapper.java

@@ -145,52 +145,7 @@ public interface CompanyTcmReportMapper
 
 
 
-    @Select({"<script> " +
-            " SELECT r.company_id,c.company_name, r.schedule_id,s.name as schedule_name,ANY_VALUE(cu.cu_count) as cu_count,ANY_VALUE(cu.money) as money,min(r.create_time) as create_time,max(r.update_time) as update_time,count( DISTINCT r.company_user_id) AS connection_num, " +
-            " SUM(total_num) as total_num,SUM(register_num) as register_num,SUM(online_num) as online_num, SUM(finish_num) as finish_num,SUM(total_money) as total_money,SUM(target_money) as target_money,SUM(total_order) as total_order, " +
-            " SUM(round1_money) as round1_money,SUM(round1_order) as round1_order,SUM(round2_money) as round2_money,SUM(round2_order) as round2_order,SUM(round3_money) as round3_money,SUM(round3_order) as round3_order,"+
-            " SUM(round4_money) as round4_money,SUM(round4_order) as round4_order,SUM(round5_money) as round5_money,SUM(round5_order) as round5_order,SUM(round6_money) as round6_money,SUM(round6_order) as round6_order,"+
-            " SUM(round7_money) as round7_money,SUM(round7_order) as round7_order,SUM(round8_money) as round8_money,SUM(round8_order) as round8_order,SUM(round9_money) as round9_money,SUM(round9_order) as round9_order "+
-            " from company_tcm_report r LEFT JOIN company_tcm_schedule s on r.schedule_id=s.id  LEFT JOIN company c on r.company_id=c.company_id   "+
-            " left join company_tcm_consume cu on r.company_id=cu.company_id and r.schedule_id=cu.schedule_id " +
-            " left join company_user comu on r.company_user_id=comu.user_id "+
-            //" left join ( SELECT count(*) as cu_count,company_id from company_user  GROUP BY company_id) cu on r.company_id=cu.company_id "+
-            " where 1=1 "+
-//            "<if test = 'maps.companyId != null  '> " +
-//            " and r.company_id = #{maps.companyId} " +
-//            "</if>" +
-            "<if test = 'maps.companyId != null  and maps.companyId != \"\"    '> " +
-            "and r.company_id IN " +
-            "<foreach collection=\"maps.companyId.split(',')\"  item='item' index='index'  open='(' separator=',' close=')'> #{item} </foreach>"+
-            "</if>" +
-            "<if test = 'maps.companyUserId != null '> " +
-            " and r.company_user_id = #{maps.companyUserId}" +
-            "</if>" +
-
-            "<if test = 'maps.userNickName != null and maps.userNickName != \"\" '> " +
-            "and comu.nick_name like '%${maps.userNickName}%'" +
-            "</if>" +
 
-            "<if test = 'maps.scheduleId != null   and maps.scheduleId != \"\"     '> " +
-            " and r.schedule_id IN " +
-            "<foreach collection=\"maps.scheduleId.split(',')\"  item='item' index='index'  open='(' separator=',' close=')'> #{item} </foreach>"+
-            "</if>" +
-            "<if test = 'maps.beginTime != null and maps.beginTime != \"\" '> " +
-            "and date_format(r.create_time,'%y%m%d') &gt;= date_format(#{maps.beginTime},'%y%m%d') " +
-            "</if>" +
-            "<if test = 'maps.endTime != null and maps.endTime != \"\" '> " +
-            "and date_format(r.create_time,'%y%m%d') &lt;= date_format(#{maps.endTime},'%y%m%d') " +
-            "</if>" +
-            "<if test = 'maps.deptIdStr != null and  maps.deptIdStr !=\"\"    '> " +
-            " AND " +
-            "<foreach collection=\"maps.deptIdStr.split(',')\" item=\"deptId\"   open=\"(\" close=\")\" separator=\"OR\">" +
-            " comu.dept_id = #{deptId} OR comu.dept_id IN ( SELECT t.dept_id FROM company_dept t WHERE find_in_set(#{deptId}, ancestors) )  " +
-            "</foreach> " +
-            "</if>" +
-            "${maps.params.dataScope}"+
-            " GROUP BY r.schedule_id,r.company_id "+
-            " order by r.company_id desc " +
-            "</script>"})
     List<CompanyTcmReportListVO> selectCompanyTcmReportStatisticsVOList(@Param("maps") CompanyTcmReportListQueryParam param);
 
 

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

@@ -89,29 +89,29 @@ public interface CompanyUserMapper
     int resetUserPwdByUserId( @Param("userId")Long userId, @Param("password") String encryptPassword);
 
     List<CompanyUser> selectAllUsersList(CompanyUser user);
-    @Select({"<script> " +
-            "select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,u.open_id,u.id_card, d.dept_name, d.leader from company_user u\n" +
-            "        left join company_dept d on u.dept_id = d.dept_id\n" +
-            "        where u.del_flag = '0' and u.status=0\n" +
-            "        <if test=\"companyId != null  \">\n" +
-            "            AND u.company_id = #{companyId}\n" +
-            "        </if>\n" +
-            "        <if test=\"nickName != null and nickName != ''\">\n" +
-            "            AND u.nick_name like concat(#{nickName}, '%')\n" +
-            "        </if>\n" +
-            "        <if test=\"phonenumber != null and phonenumber != ''\">\n" +
-            "            AND u.phonenumber like concat('%', #{phonenumber}, '%')\n" +
-            "        </if>\n" +
-            "        <if test=\"beginTime != null and beginTime != ''\"><!-- 开始时间检索 -->\n" +
-            "            AND date_format(u.create_time,'%y%m%d') &gt;= date_format(#{beginTime},'%y%m%d')\n" +
-            "        </if>\n" +
-            "        <if test=\"endTime != null and endTime != ''\"><!-- 结束时间检索 -->\n" +
-            "            AND date_format(u.create_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')\n" +
-            "        </if>\n" +
-            "        <if test=\"deptId != null and deptId != 0\">\n" +
-            "            AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM company_dept t WHERE find_in_set(#{deptId}, ancestors) ))\n" +
-            "        </if>"+
-            "</script>"})
+//    @Select({"<script> " +
+//            "select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,u.open_id,u.id_card, d.dept_name, d.leader from company_user u\n" +
+//            "        left join company_dept d on u.dept_id = d.dept_id\n" +
+//            "        where u.del_flag = '0' and u.status=0\n" +
+//            "        <if test=\"companyId != null  \">\n" +
+//            "            AND u.company_id = #{companyId}\n" +
+//            "        </if>\n" +
+//            "        <if test=\"nickName != null and nickName != ''\">\n" +
+//            "            AND u.nick_name like concat(#{nickName}, '%')\n" +
+//            "        </if>\n" +
+//            "        <if test=\"phonenumber != null and phonenumber != ''\">\n" +
+//            "            AND u.phonenumber like concat('%', #{phonenumber}, '%')\n" +
+//            "        </if>\n" +
+//            "        <if test=\"beginTime != null and beginTime != ''\"><!-- 开始时间检索 -->\n" +
+//            "            AND date_format(u.create_time,'%y%m%d') &gt;= date_format(#{beginTime},'%y%m%d')\n" +
+//            "        </if>\n" +
+//            "        <if test=\"endTime != null and endTime != ''\"><!-- 结束时间检索 -->\n" +
+//            "            AND date_format(u.create_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')\n" +
+//            "        </if>\n" +
+//            "        <if test=\"deptId != null and deptId != 0\">\n" +
+//            "            AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM company_dept t WHERE find_in_set(#{deptId}, ancestors) ))\n" +
+//            "        </if>"+
+//            "</script>"})
     List<CompanyUserVO> selectMyUserList(CompanyUser user);
 
     @Select("select u.* from company_user u where u.dept_id in ( SELECT dept_id FROM company_dept WHERE dept_id = #{maps.deptId} or find_in_set( #{maps.deptId} , ancestors ) ) ${maps.params.dataScope}")
@@ -132,32 +132,32 @@ public interface CompanyUserMapper
     @Select("select u.* from company_user u   where u.company_id=#{companyId} and u.nick_name=#{nickName} limit 1 ")
     CompanyUser selectCompanyUserByCompanyIdAndNickName(@Param("companyId")long companyId,@Param("nickName") String nickName);
 
-    @Select({"<script> " +
-            "select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,u.open_id,u.id_card, d.dept_name, d.leader ,\n" +
-            "        (select count(1) from crm_customer cc where u.user_id= cc.receive_user_id and date_format(cc.receive_time,'%y%m%d') = date_format(now(),'%y%m%d')  ) as now_day_customer_count\n" +
-            "        from company_user u\n" +
-            "        left join company_dept d on u.dept_id = d.dept_id\n" +
-            "\n" +
-            "        where u.del_flag = '0' and u.status=0\n" +
-            "        <if test=\"companyId != null  \">\n" +
-            "            AND u.company_id = #{companyId}\n" +
-            "        </if>\n" +
-            "        <if test=\"nickName != null and nickName != ''\">\n" +
-            "            AND u.nick_name like concat( #{nickName}, '%')\n" +
-            "        </if>\n" +
-            "        <if test=\"phonenumber != null and phonenumber != ''\">\n" +
-            "            AND u.phonenumber like concat('%', #{phonenumber}, '%')\n" +
-            "        </if>\n" +
-            "        <if test=\"beginTime != null and beginTime != ''\"><!-- 开始时间检索 -->\n" +
-            "            AND date_format(u.create_time,'%y%m%d') &gt;= date_format(#{beginTime},'%y%m%d')\n" +
-            "        </if>\n" +
-            "        <if test=\"endTime != null and endTime != ''\"><!-- 结束时间检索 -->\n" +
-            "            AND date_format(u.create_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')\n" +
-            "        </if>\n" +
-            "        <if test=\"deptId != null and deptId != 0\">\n" +
-            "            AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM company_dept t WHERE find_in_set(#{deptId}, ancestors) ))\n" +
-            "        </if>"+
-            "</script>"})
+//    @Select({"<script> " +
+//            "select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,u.open_id,u.id_card, d.dept_name, d.leader ,\n" +
+//            "        (select count(1) from crm_customer cc where u.user_id= cc.receive_user_id and date_format(cc.receive_time,'%y%m%d') = date_format(now(),'%y%m%d')  ) as now_day_customer_count\n" +
+//            "        from company_user u\n" +
+//            "        left join company_dept d on u.dept_id = d.dept_id\n" +
+//            "\n" +
+//            "        where u.del_flag = '0' and u.status=0\n" +
+//            "        <if test=\"companyId != null  \">\n" +
+//            "            AND u.company_id = #{companyId}\n" +
+//            "        </if>\n" +
+//            "        <if test=\"nickName != null and nickName != ''\">\n" +
+//            "            AND u.nick_name like concat( #{nickName}, '%')\n" +
+//            "        </if>\n" +
+//            "        <if test=\"phonenumber != null and phonenumber != ''\">\n" +
+//            "            AND u.phonenumber like concat('%', #{phonenumber}, '%')\n" +
+//            "        </if>\n" +
+//            "        <if test=\"beginTime != null and beginTime != ''\"><!-- 开始时间检索 -->\n" +
+//            "            AND date_format(u.create_time,'%y%m%d') &gt;= date_format(#{beginTime},'%y%m%d')\n" +
+//            "        </if>\n" +
+//            "        <if test=\"endTime != null and endTime != ''\"><!-- 结束时间检索 -->\n" +
+//            "            AND date_format(u.create_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')\n" +
+//            "        </if>\n" +
+//            "        <if test=\"deptId != null and deptId != 0\">\n" +
+//            "            AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM company_dept t WHERE find_in_set(#{deptId}, ancestors) ))\n" +
+//            "        </if>"+
+//            "</script>"})
     List<CompanyUserVO> selecCompanyAllUsersList(CompanyUser map);
 
     @Select("select user_id from company_user where company_id=#{companyId} and user_type = '00'")

+ 2 - 0
fs-service-system/src/main/java/com/fs/course/mapper/FsCourseAnswerLogsMapper.java

@@ -119,4 +119,6 @@ public interface FsCourseAnswerLogsMapper
             "</if>" +
             "</script>"})
     int selectErrorCountByCourseVideo(@Param("videoId") Long videoId,@Param("userId") Long userId,@Param("qwUserId") String qwUserId);
+
+    List<FsCourseAnswerLogsListVO> selectFsCourseAnswerLogsListVONew(FsCourseAnswerLogsParam param);
 }

+ 4 - 7
fs-service-system/src/main/java/com/fs/course/mapper/FsCourseWatchLogMapper.java

@@ -190,14 +190,14 @@ public interface FsCourseWatchLogMapper extends BaseMapper<FsCourseWatchLog> {
     List<FsCourseWatchLog> selectFsCourseWatchLogFinish();
 
     @Select({"<script> " +
-            "SELECT \n" +
-            "o.video_id,o.company_id,o.qw_user_id,DATE(o.create_time) create_time,qu.qw_user_name,v.title videoName,uc.course_name,\n" +
+            "SELECT " +
+            "o.video_id,o.company_id,o.user_id,DATE(o.create_time) create_time,concat(u.user_id,'_',u.nickname).qw_user_name,v.title videoName,uc.course_name,\n" +
             "SUM(CASE WHEN o.log_type = '1' THEN 1 ELSE 0 END) AS type1,\n" +
             "SUM(CASE WHEN o.log_type = '2' THEN 1 ELSE 0 END) AS type2,\n" +
             "SUM(CASE WHEN o.log_type = '3' THEN 1 ELSE 0 END) AS type3,\n" +
             "SUM(CASE WHEN o.log_type = '4' THEN 1 ELSE 0 END) AS type4\n" +
             "FROM fs_course_watch_log o\n" +
-            "LEFT JOIN qw_user qu on qu.id=o.qw_user_id\n" +
+            "LEFT JOIN fs_user u on u.user_id=o.user_id\n" +
             "LEFT JOIN fs_user_course_video v on v.video_id=o.video_id \n" +
             "LEFT JOIN fs_user_course uc on uc.course_id=v.course_id\n" +
             "where o.company_id=#{companyId}  " +
@@ -207,16 +207,13 @@ public interface FsCourseWatchLogMapper extends BaseMapper<FsCourseWatchLog> {
             "<if test='eTime != null '> " +
             "      and DATE(o.create_time) &lt;= DATE(#{eTime})\n" +
             "</if>" +
-            "<if test ='nickName !=null and nickName!=\"\"'>\n" +
-            "   and qu.qw_user_name like concat( #{nickName}, '%')\n" +
-            "</if>" +
             "<if test ='courseId !=null'> " +
             "     and o.course_id = #{courseId} " +
             "</if>" +
             "<if test ='videoId !=null'> " +
             "     and o.video_id = #{videoId} " +
             "</if>" +
-            "GROUP BY o.video_id,o.qw_user_id,DATE(o.create_time)\n" +
+            "GROUP BY o.video_id,o.user_id,DATE(o.create_time)\n" +
             "ORDER BY o.video_id ,DATE(o.create_time) \n"+
             "</script>"})
     List<FsCourseWatchLogStatisticsListVO> selectFsCourseWatchLogStatisticsListVO(FsCourseWatchLogStatisticsListParam param);

+ 35 - 1
fs-service-system/src/main/java/com/fs/course/param/FsCourseAnswerLogsParam.java

@@ -3,23 +3,57 @@ package com.fs.course.param;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fs.common.core.domain.BaseEntity;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 import java.util.Date;
 
+@EqualsAndHashCode(callSuper = true)
 @Data
 public class FsCourseAnswerLogsParam  extends BaseEntity  {
     private String phone;
     private String phoneMk;
-    private String courseId;
+
+    /**
+     * 课程id
+     */
+    private Long courseId;
+
+    /**
+     * 视频id
+     */
     private String videoId;
+
+    /**
+     * 课程名称
+     */
+    private String courseName;
+    /**
+     * 销售名称
+     */
     private String companyUserName;
+
+    /**
+     * 销售id
+     */
+    private Long companyUserId;
+
+    /**
+     * 公司
+     */
     private Long companyId;
+    /**
+     * 是否全部正确
+     */
     private Long isRight;
+
     private Long watchLogId;
 
     private Long qwUserId;
     private Long userId;
     private String nickName;
+
+    private String project;
+
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date eTime;
 

+ 1 - 0
fs-service-system/src/main/java/com/fs/course/service/IFsCourseAnswerLogsService.java

@@ -30,6 +30,7 @@ public interface IFsCourseAnswerLogsService
      */
     public List<FsCourseAnswerLogs> selectFsCourseAnswerLogsList(FsCourseAnswerLogs fsCourseAnswerLogs);
     public List<FsCourseAnswerLogsListVO> selectFsCourseAnswerLogsListVO(FsCourseAnswerLogsParam param);
+    public List<FsCourseAnswerLogsListVO> selectFsCourseAnswerLogsListVONew(FsCourseAnswerLogsParam param);
 
     /**
      * 新增答题日志

+ 7 - 0
fs-service-system/src/main/java/com/fs/course/service/cache/IFsUserCourseVideoCacheService.java

@@ -0,0 +1,7 @@
+package com.fs.course.service.cache;
+
+import com.fs.course.domain.FsUserCourseVideo;
+
+public interface IFsUserCourseVideoCacheService {
+    public FsUserCourseVideo selectFsUserCourseVideoByVideoId(Long videoId);
+}

+ 32 - 0
fs-service-system/src/main/java/com/fs/course/service/cache/impl/FsUserCourseVideoCacheServiceImpl.java

@@ -0,0 +1,32 @@
+package com.fs.course.service.cache.impl;
+
+import com.fs.company.domain.CompanyUser;
+import com.fs.course.domain.FsUserCourseVideo;
+import com.fs.course.service.IFsCourseAnswerLogsService;
+import com.fs.course.service.IFsUserCourseVideoService;
+import com.fs.course.service.cache.IFsUserCourseVideoCacheService;
+import com.github.benmanes.caffeine.cache.Cache;
+import com.github.benmanes.caffeine.cache.Caffeine;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.concurrent.TimeUnit;
+
+@AllArgsConstructor
+@Service
+@Slf4j
+public class FsUserCourseVideoCacheServiceImpl implements IFsUserCourseVideoCacheService {
+
+    private final IFsUserCourseVideoService fsUserCourseVideoService;
+    private static final Cache<Long, FsUserCourseVideo> VIDEO_CACHE = Caffeine.newBuilder()
+            .maximumSize(1000)
+            .expireAfterWrite(10, TimeUnit.MINUTES)
+            .build();
+
+    @Override
+    public FsUserCourseVideo selectFsUserCourseVideoByVideoId(Long videoId) {
+        return VIDEO_CACHE.get(videoId,e-> fsUserCourseVideoService.selectFsUserCourseVideoByVideoId(videoId));
+    }
+}

+ 70 - 2
fs-service-system/src/main/java/com/fs/course/service/impl/FsCourseAnswerLogsServiceImpl.java

@@ -1,14 +1,31 @@
 package com.fs.course.service.impl;
 
 import com.fs.common.utils.DateUtils;
+import com.fs.common.utils.DictUtils;
+import com.fs.company.cache.ICompanyCacheService;
+import com.fs.company.cache.ICompanyUserCacheService;
+import com.fs.company.domain.Company;
+import com.fs.company.domain.CompanyUser;
 import com.fs.course.domain.FsCourseAnswerLogs;
+import com.fs.course.domain.FsUserCourse;
+import com.fs.course.domain.FsUserCourseVideo;
 import com.fs.course.mapper.FsCourseAnswerLogsMapper;
 import com.fs.course.param.FsCourseAnswerLogsParam;
 import com.fs.course.service.IFsCourseAnswerLogsService;
+import com.fs.course.service.IFsUserCourseService;
+import com.fs.course.service.IFsUserCourseVideoService;
+import com.fs.course.service.cache.IFsUserCourseVideoCacheService;
 import com.fs.course.vo.FsCourseAnswerLogsListVO;
+import com.fs.store.domain.FsUser;
+import com.fs.store.service.IFsUserService;
+import com.fs.store.service.cache.IFsUserCacheService;
+import com.fs.store.service.cache.IFsUserCourseCacheService;
+import com.hc.openapi.tool.util.StringUtils;
+import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -18,11 +35,20 @@ import java.util.List;
  * @date 2024-10-26
  */
 @Service
+@RequiredArgsConstructor
 public class FsCourseAnswerLogsServiceImpl implements IFsCourseAnswerLogsService
 {
-    @Autowired
-    private FsCourseAnswerLogsMapper fsCourseAnswerLogsMapper;
+    private final FsCourseAnswerLogsMapper fsCourseAnswerLogsMapper;
 
+    private final IFsUserCourseVideoCacheService fsUserCourseVideoCacheService;
+
+    private final IFsUserCacheService  fsUserCacheService;
+
+    private final IFsUserCourseCacheService fsUserCourseCacheService;
+
+    private final ICompanyCacheService companyCacheService;
+
+    private final ICompanyUserCacheService companyUserCacheService;
     /**
      * 查询答题日志
      *
@@ -52,6 +78,48 @@ public class FsCourseAnswerLogsServiceImpl implements IFsCourseAnswerLogsService
         return fsCourseAnswerLogsMapper.selectFsCourseAnswerLogsListVO(param);
     }
 
+    @Override
+    public List<FsCourseAnswerLogsListVO> selectFsCourseAnswerLogsListVONew(FsCourseAnswerLogsParam param) {
+        List<FsCourseAnswerLogsListVO> data = fsCourseAnswerLogsMapper.selectFsCourseAnswerLogsListVONew(param);
+        for (FsCourseAnswerLogsListVO datum : data) {
+            FsUserCourseVideo fsUserCourseVideo = fsUserCourseVideoCacheService.selectFsUserCourseVideoByVideoId(datum.getVideoId());
+            if (fsUserCourseVideo != null) {
+                datum.setVideoName(fsUserCourseVideo.getTitle());
+                datum.setCourseId(fsUserCourseVideo.getCourseId());
+            }
+            // 用户
+            FsUser fsUser = fsUserCacheService.selectFsUserById(datum.getUserId());
+            if(fsUser != null) {
+                datum.setUserName(String.format("%s_%d",fsUser.getNickname(),fsUser.getUserId()));
+                datum.setFsAvatar(fsUser.getAvatar());
+            }
+
+            // 公司名称
+            if(datum.getCompanyId() != null) {
+                Company company = companyCacheService.selectCompanyById(datum.getCompanyId());
+                if(company != null) {
+                    datum.setCompanyName(String.format("%s_%d", company.getCompanyName(), company.getCompanyId()));
+                }
+            }
+            // 销售
+            if(datum.getCompanyUserId() != null) {
+                CompanyUser companyUser = companyUserCacheService.selectCompanyUserById(datum.getCompanyUserId());
+                if(companyUser != null) {
+                    datum.setCompanyUserName(String.format("%s_%d",companyUser.getUserName(),companyUser.getUserId()));
+                }
+            }
+            // 项目名
+            if(datum.getProject() != null) {
+                String sysCourseProject = DictUtils.getDictLabel("sys_course_project", datum.getProject());
+                if(StringUtils.isNotBlank(sysCourseProject)){
+                    datum.setProjectName(sysCourseProject);
+                }
+            }
+        }
+
+        return data;
+    }
+
     /**
      * 新增答题日志
      *

+ 8 - 0
fs-service-system/src/main/java/com/fs/course/vo/FsCourseAnswerLogsListVO.java

@@ -77,4 +77,12 @@ public class FsCourseAnswerLogsListVO {
     private String answer;
     private String questionTitle;
     private String questionJson;
+    /**
+     * 项目
+     */
+    private String project;
+    /**
+     * 项目名称
+     */
+    private String projectName;
 }

+ 13 - 0
fs-service-system/src/main/java/com/fs/store/service/cache/IFsUserCacheService.java

@@ -0,0 +1,13 @@
+package com.fs.store.service.cache;
+
+import com.fs.store.domain.FsUser;
+
+public interface IFsUserCacheService {
+    /**
+     * 查询用户
+     *
+     * @param userId 用户ID
+     * @return 用户
+     */
+    public FsUser selectFsUserById(Long userId);
+}

+ 13 - 0
fs-service-system/src/main/java/com/fs/store/service/cache/IFsUserCourseCacheService.java

@@ -0,0 +1,13 @@
+package com.fs.store.service.cache;
+
+import com.fs.course.domain.FsUserCourse;
+
+public interface IFsUserCourseCacheService {
+    /**
+     * 查询课程
+     *
+     * @param courseId 课程主键
+     * @return 课程
+     */
+    public FsUserCourse selectFsUserCourseByCourseId(Long courseId);
+}

+ 28 - 0
fs-service-system/src/main/java/com/fs/store/service/cache/impl/FsUserCourseCacheServiceImpl.java

@@ -0,0 +1,28 @@
+package com.fs.store.service.cache.impl;
+
+import com.fs.course.domain.FsUserCourse;
+import com.fs.course.service.IFsUserCourseService;
+import com.fs.store.domain.FsUser;
+import com.fs.store.service.cache.IFsUserCourseCacheService;
+import com.github.benmanes.caffeine.cache.Cache;
+import com.github.benmanes.caffeine.cache.Caffeine;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.concurrent.TimeUnit;
+
+@Service
+@RequiredArgsConstructor
+@Slf4j
+public class FsUserCourseCacheServiceImpl implements IFsUserCourseCacheService {
+    private final IFsUserCourseService fsUserCourseService;
+    private static final Cache<Long, FsUserCourse> FS_USER_COURSE_CACHE = Caffeine.newBuilder()
+            .maximumSize(1000)
+            .expireAfterWrite(3, TimeUnit.MINUTES)
+            .build();
+    @Override
+    public FsUserCourse selectFsUserCourseByCourseId(Long courseId) {
+        return FS_USER_COURSE_CACHE.get(courseId,e-> fsUserCourseService.selectFsUserCourseByCourseId(courseId));
+    }
+}

+ 30 - 0
fs-service-system/src/main/java/com/fs/store/service/cache/impl/IFsUserCacheServiceImpl.java

@@ -0,0 +1,30 @@
+package com.fs.store.service.cache.impl;
+
+import com.fs.course.domain.FsUserCourseVideo;
+import com.fs.store.domain.FsUser;
+import com.fs.store.service.IFsUserService;
+import com.fs.store.service.cache.IFsUserCacheService;
+import com.github.benmanes.caffeine.cache.Cache;
+import com.github.benmanes.caffeine.cache.Caffeine;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.concurrent.TimeUnit;
+
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class IFsUserCacheServiceImpl implements IFsUserCacheService {
+    private final IFsUserService fsUserService;
+
+    private static final Cache<Long, FsUser> FS_USER_CACHE = Caffeine.newBuilder()
+            .maximumSize(1000)
+            .expireAfterWrite(3, TimeUnit.MINUTES)
+            .build();
+
+    @Override
+    public FsUser selectFsUserById(Long userId) {
+        return FS_USER_CACHE.get(userId,e-> fsUserService.selectFsUserById(userId));
+    }
+}

+ 230 - 115
fs-service-system/src/main/resources/mapper/company/CompanyTcmReportMapper.xml

@@ -1,129 +1,184 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fs.company.mapper.CompanyTcmReportMapper">
 
     <resultMap type="CompanyTcmReport" id="CompanyTcmReportResult">
-        <result property="id"    column="id"    />
-        <result property="scheduleId"    column="schedule_id"    />
-        <result property="companyUserId"    column="company_user_id"    />
-        <result property="companyId"    column="company_id"    />
-        <result property="totalNum"    column="total_num"    />
-        <result property="registerNum"    column="register_num"    />
-        <result property="onlineNum"    column="online_num"    />
-        <result property="finishNum"    column="finish_num"    />
-        <result property="registerRate"    column="register_rate"    />
-        <result property="onlineRate"    column="online_rate"    />
-        <result property="finishRate"    column="finish_rate"    />
-        <result property="totalMoney"    column="total_money"    />
-        <result property="totalOrder"    column="total_order"    />
-        <result property="targetMoney"    column="target_money"    />
-        <result property="targetRate"    column="target_rate"    />
-        <result property="round1Money"    column="round1_money"    />
-        <result property="round1Order"    column="round1_order"    />
-        <result property="round1Rate"    column="round1_rate"    />
-        <result property="round1Unit"    column="round1_unit"    />
-        <result property="round2Money"    column="round2_money"    />
-        <result property="round2Order"    column="round2_order"    />
-        <result property="round2Rate"    column="round2_rate"    />
-        <result property="round2Unit"    column="round2_unit"    />
-        <result property="round3Money"    column="round3_money"    />
-        <result property="round3Order"    column="round3_order"    />
-        <result property="round3Rate"    column="round3_rate"    />
-        <result property="round3Unit"    column="round3_unit"    />
-        <result property="round4Money"    column="round4_money"    />
-        <result property="round4Order"    column="round4_order"    />
-        <result property="round4Rate"    column="round4_rate"    />
-        <result property="round4Unit"    column="round4_unit"    />
-        <result property="round5Money"    column="round5_money"    />
-        <result property="round5Order"    column="round5_order"    />
-        <result property="round5Rate"    column="round5_rate"    />
-        <result property="round5Unit"    column="round5_unit"    />
-        <result property="round6Money"    column="round6_money"    />
-        <result property="round6Order"    column="round6_order"    />
-        <result property="round6Rate"    column="round6_rate"    />
-        <result property="round6Unit"    column="round6_unit"    />
-        <result property="round7Money"    column="round7_money"    />
-        <result property="round7Order"    column="round7_order"    />
-        <result property="round7Rate"    column="round7_rate"    />
-        <result property="round7Unit"    column="round7_unit"    />
-        <result property="round8Money"    column="round8_money"    />
-        <result property="round8Order"    column="round8_order"    />
-        <result property="round8Rate"    column="round8_rate"    />
-        <result property="round8Unit"    column="round8_unit"    />
-        <result property="round9Money"    column="round9_money"    />
-        <result property="round9Order"    column="round9_order"    />
-        <result property="round9Rate"    column="round9_rate"    />
-        <result property="round9Unit"    column="round9_unit"    />
+        <result property="id" column="id"/>
+        <result property="scheduleId" column="schedule_id"/>
+        <result property="companyUserId" column="company_user_id"/>
+        <result property="companyId" column="company_id"/>
+        <result property="totalNum" column="total_num"/>
+        <result property="registerNum" column="register_num"/>
+        <result property="onlineNum" column="online_num"/>
+        <result property="finishNum" column="finish_num"/>
+        <result property="registerRate" column="register_rate"/>
+        <result property="onlineRate" column="online_rate"/>
+        <result property="finishRate" column="finish_rate"/>
+        <result property="totalMoney" column="total_money"/>
+        <result property="totalOrder" column="total_order"/>
+        <result property="targetMoney" column="target_money"/>
+        <result property="targetRate" column="target_rate"/>
+        <result property="round1Money" column="round1_money"/>
+        <result property="round1Order" column="round1_order"/>
+        <result property="round1Rate" column="round1_rate"/>
+        <result property="round1Unit" column="round1_unit"/>
+        <result property="round2Money" column="round2_money"/>
+        <result property="round2Order" column="round2_order"/>
+        <result property="round2Rate" column="round2_rate"/>
+        <result property="round2Unit" column="round2_unit"/>
+        <result property="round3Money" column="round3_money"/>
+        <result property="round3Order" column="round3_order"/>
+        <result property="round3Rate" column="round3_rate"/>
+        <result property="round3Unit" column="round3_unit"/>
+        <result property="round4Money" column="round4_money"/>
+        <result property="round4Order" column="round4_order"/>
+        <result property="round4Rate" column="round4_rate"/>
+        <result property="round4Unit" column="round4_unit"/>
+        <result property="round5Money" column="round5_money"/>
+        <result property="round5Order" column="round5_order"/>
+        <result property="round5Rate" column="round5_rate"/>
+        <result property="round5Unit" column="round5_unit"/>
+        <result property="round6Money" column="round6_money"/>
+        <result property="round6Order" column="round6_order"/>
+        <result property="round6Rate" column="round6_rate"/>
+        <result property="round6Unit" column="round6_unit"/>
+        <result property="round7Money" column="round7_money"/>
+        <result property="round7Order" column="round7_order"/>
+        <result property="round7Rate" column="round7_rate"/>
+        <result property="round7Unit" column="round7_unit"/>
+        <result property="round8Money" column="round8_money"/>
+        <result property="round8Order" column="round8_order"/>
+        <result property="round8Rate" column="round8_rate"/>
+        <result property="round8Unit" column="round8_unit"/>
+        <result property="round9Money" column="round9_money"/>
+        <result property="round9Order" column="round9_order"/>
+        <result property="round9Rate" column="round9_rate"/>
+        <result property="round9Unit" column="round9_unit"/>
 
-        <result property="createTime"    column="create_time"    />
-        <result property="createUserId"    column="create_user_id"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="updateUserId"    column="update_user_id"    />
+        <result property="createTime" column="create_time"/>
+        <result property="createUserId" column="create_user_id"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="updateUserId" column="update_user_id"/>
     </resultMap>
 
     <sql id="selectCompanyTcmReportVo">
-        select id, schedule_id, company_user_id, company_id, total_num, register_num, online_num, finish_num, register_rate, online_rate, finish_rate, total_money, total_order, target_money, target_rate, round1_money, round1_order, round1_rate, round1_unit, round2_money, round2_order, round2_rate, round2_unit, round3_money, round3_order, round3_rate, round3_unit, round4_money, round4_order, round4_rate, round4_unit, round5_money, round5_order, round5_rate, round5_unit, round6_money, round6_order, round6_rate, round6_unit, round7_money, round7_order, round7_rate, round7_unit, round8_money, round8_order, round8_rate, round8_unit, round9_money, round9_order, round9_rate, round9_unit,create_time,create_user_id,update_time,update_user_id from company_tcm_report
+        select id,
+               schedule_id,
+               company_user_id,
+               company_id,
+               total_num,
+               register_num,
+               online_num,
+               finish_num,
+               register_rate,
+               online_rate,
+               finish_rate,
+               total_money,
+               total_order,
+               target_money,
+               target_rate,
+               round1_money,
+               round1_order,
+               round1_rate,
+               round1_unit,
+               round2_money,
+               round2_order,
+               round2_rate,
+               round2_unit,
+               round3_money,
+               round3_order,
+               round3_rate,
+               round3_unit,
+               round4_money,
+               round4_order,
+               round4_rate,
+               round4_unit,
+               round5_money,
+               round5_order,
+               round5_rate,
+               round5_unit,
+               round6_money,
+               round6_order,
+               round6_rate,
+               round6_unit,
+               round7_money,
+               round7_order,
+               round7_rate,
+               round7_unit,
+               round8_money,
+               round8_order,
+               round8_rate,
+               round8_unit,
+               round9_money,
+               round9_order,
+               round9_rate,
+               round9_unit,
+               create_time,
+               create_user_id,
+               update_time,
+               update_user_id
+        from company_tcm_report
     </sql>
 
     <select id="selectCompanyTcmReportList" parameterType="CompanyTcmReport" resultMap="CompanyTcmReportResult">
         <include refid="selectCompanyTcmReportVo"/>
         <where>
-            <if test="scheduleId != null "> and schedule_id = #{scheduleId}</if>
-            <if test="companyUserId != null "> and company_user_id = #{companyUserId}</if>
-            <if test="companyId != null "> and company_id = #{companyId}</if>
-            <if test="totalNum != null "> and total_num = #{totalNum}</if>
-            <if test="registerNum != null "> and register_num = #{registerNum}</if>
-            <if test="onlineNum != null "> and online_num = #{onlineNum}</if>
-            <if test="finishNum != null "> and finish_num = #{finishNum}</if>
-            <if test="registerRate != null "> and register_rate = #{registerRate}</if>
-            <if test="onlineRate != null "> and online_rate = #{onlineRate}</if>
-            <if test="finishRate != null "> and finish_rate = #{finishRate}</if>
-            <if test="totalMoney != null "> and total_money = #{totalMoney}</if>
-            <if test="totalOrder != null "> and total_order = #{totalOrder}</if>
-            <if test="targetMoney != null "> and target_money = #{targetMoney}</if>
-            <if test="targetRate != null "> and target_rate = #{targetRate}</if>
-            <if test="round1Money != null "> and round1_money = #{round1Money}</if>
-            <if test="round1Order != null "> and round1_order = #{round1Order}</if>
-            <if test="round1Rate != null "> and round1_rate = #{round1Rate}</if>
-            <if test="round1Unit != null "> and round1_unit = #{round1Unit}</if>
-            <if test="round2Money != null "> and round2_money = #{round2Money}</if>
-            <if test="round2Order != null "> and round2_order = #{round2Order}</if>
-            <if test="round2Rate != null "> and round2_rate = #{round2Rate}</if>
-            <if test="round2Unit != null "> and round2_unit = #{round2Unit}</if>
-            <if test="round3Money != null "> and round3_money = #{round3Money}</if>
-            <if test="round3Order != null "> and round3_order = #{round3Order}</if>
-            <if test="round3Rate != null "> and round3_rate = #{round3Rate}</if>
-            <if test="round3Unit != null "> and round3_unit = #{round3Unit}</if>
-            <if test="round4Money != null "> and round4_money = #{round4Money}</if>
-            <if test="round4Order != null "> and round4_order = #{round4Order}</if>
-            <if test="round4Rate != null "> and round4_rate = #{round4Rate}</if>
-            <if test="round4Unit != null "> and round4_unit = #{round4Unit}</if>
-            <if test="round5Money != null "> and round5_money = #{round5Money}</if>
-            <if test="round5Order != null "> and round5_order = #{round5Order}</if>
-            <if test="round5Rate != null "> and round5_rate = #{round5Rate}</if>
-            <if test="round5Unit != null "> and round5_unit = #{round5Unit}</if>
-            <if test="round6Money != null "> and round6_money = #{round6Money}</if>
-            <if test="round6Order != null "> and round6_order = #{round6Order}</if>
-            <if test="round6Rate != null "> and round6_rate = #{round6Rate}</if>
-            <if test="round6Unit != null "> and round6_unit = #{round6Unit}</if>
-            <if test="round7Money != null "> and round7_money = #{round7Money}</if>
-            <if test="round7Order != null "> and round7_order = #{round7Order}</if>
-            <if test="round7Rate != null "> and round7_rate = #{round7Rate}</if>
-            <if test="round7Unit != null "> and round7_unit = #{round7Unit}</if>
-            <if test="round8Money != null "> and round8_money = #{round8Money}</if>
-            <if test="round8Order != null "> and round8_order = #{round8Order}</if>
-            <if test="round8Rate != null "> and round8_rate = #{round8Rate}</if>
-            <if test="round8Unit != null "> and round8_unit = #{round8Unit}</if>
-            <if test="round9Money != null "> and round9_money = #{round9Money}</if>
-            <if test="round9Order != null "> and round9_order = #{round9Order}</if>
-            <if test="round9Rate != null "> and round9_rate = #{round9Rate}</if>
-            <if test="round9Unit != null "> and round9_unit = #{round9Unit}</if>
-            <if test="createTime != null "> and create_time = #{createTime}</if>
-            <if test="createUserId != null "> and create_user_id = #{createUserId}</if>
-            <if test="updateTime != null "> and update_time = #{updateTime}</if>
-            <if test="updateUserId != null "> and update_user_id = #{updateUserId}</if>
+            <if test="scheduleId != null ">and schedule_id = #{scheduleId}</if>
+            <if test="companyUserId != null ">and company_user_id = #{companyUserId}</if>
+            <if test="companyId != null ">and company_id = #{companyId}</if>
+            <if test="totalNum != null ">and total_num = #{totalNum}</if>
+            <if test="registerNum != null ">and register_num = #{registerNum}</if>
+            <if test="onlineNum != null ">and online_num = #{onlineNum}</if>
+            <if test="finishNum != null ">and finish_num = #{finishNum}</if>
+            <if test="registerRate != null ">and register_rate = #{registerRate}</if>
+            <if test="onlineRate != null ">and online_rate = #{onlineRate}</if>
+            <if test="finishRate != null ">and finish_rate = #{finishRate}</if>
+            <if test="totalMoney != null ">and total_money = #{totalMoney}</if>
+            <if test="totalOrder != null ">and total_order = #{totalOrder}</if>
+            <if test="targetMoney != null ">and target_money = #{targetMoney}</if>
+            <if test="targetRate != null ">and target_rate = #{targetRate}</if>
+            <if test="round1Money != null ">and round1_money = #{round1Money}</if>
+            <if test="round1Order != null ">and round1_order = #{round1Order}</if>
+            <if test="round1Rate != null ">and round1_rate = #{round1Rate}</if>
+            <if test="round1Unit != null ">and round1_unit = #{round1Unit}</if>
+            <if test="round2Money != null ">and round2_money = #{round2Money}</if>
+            <if test="round2Order != null ">and round2_order = #{round2Order}</if>
+            <if test="round2Rate != null ">and round2_rate = #{round2Rate}</if>
+            <if test="round2Unit != null ">and round2_unit = #{round2Unit}</if>
+            <if test="round3Money != null ">and round3_money = #{round3Money}</if>
+            <if test="round3Order != null ">and round3_order = #{round3Order}</if>
+            <if test="round3Rate != null ">and round3_rate = #{round3Rate}</if>
+            <if test="round3Unit != null ">and round3_unit = #{round3Unit}</if>
+            <if test="round4Money != null ">and round4_money = #{round4Money}</if>
+            <if test="round4Order != null ">and round4_order = #{round4Order}</if>
+            <if test="round4Rate != null ">and round4_rate = #{round4Rate}</if>
+            <if test="round4Unit != null ">and round4_unit = #{round4Unit}</if>
+            <if test="round5Money != null ">and round5_money = #{round5Money}</if>
+            <if test="round5Order != null ">and round5_order = #{round5Order}</if>
+            <if test="round5Rate != null ">and round5_rate = #{round5Rate}</if>
+            <if test="round5Unit != null ">and round5_unit = #{round5Unit}</if>
+            <if test="round6Money != null ">and round6_money = #{round6Money}</if>
+            <if test="round6Order != null ">and round6_order = #{round6Order}</if>
+            <if test="round6Rate != null ">and round6_rate = #{round6Rate}</if>
+            <if test="round6Unit != null ">and round6_unit = #{round6Unit}</if>
+            <if test="round7Money != null ">and round7_money = #{round7Money}</if>
+            <if test="round7Order != null ">and round7_order = #{round7Order}</if>
+            <if test="round7Rate != null ">and round7_rate = #{round7Rate}</if>
+            <if test="round7Unit != null ">and round7_unit = #{round7Unit}</if>
+            <if test="round8Money != null ">and round8_money = #{round8Money}</if>
+            <if test="round8Order != null ">and round8_order = #{round8Order}</if>
+            <if test="round8Rate != null ">and round8_rate = #{round8Rate}</if>
+            <if test="round8Unit != null ">and round8_unit = #{round8Unit}</if>
+            <if test="round9Money != null ">and round9_money = #{round9Money}</if>
+            <if test="round9Order != null ">and round9_order = #{round9Order}</if>
+            <if test="round9Rate != null ">and round9_rate = #{round9Rate}</if>
+            <if test="round9Unit != null ">and round9_unit = #{round9Unit}</if>
+            <if test="createTime != null ">and create_time = #{createTime}</if>
+            <if test="createUserId != null ">and create_user_id = #{createUserId}</if>
+            <if test="updateTime != null ">and update_time = #{updateTime}</if>
+            <if test="updateUserId != null ">and update_user_id = #{updateUserId}</if>
         </where>
     </select>
 
@@ -131,6 +186,64 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectCompanyTcmReportVo"/>
         where id = #{id}
     </select>
+    <select id="selectCompanyTcmReportStatisticsVOList" resultType="com.fs.company.vo.CompanyTcmReportListVO">
+        SELECT r.company_id,c.company_name, r.schedule_id,s.name as schedule_name,ANY_VALUE(cu.cu_count) as
+        cu_count,ANY_VALUE(cu.money) as money,min(r.create_time) as create_time,max(r.update_time) as update_time,count(
+        DISTINCT r.company_user_id) AS connection_num,
+        SUM(total_num) as total_num,SUM(register_num) as register_num,SUM(online_num) as online_num, SUM(finish_num) as
+        finish_num,SUM(total_money) as total_money,SUM(target_money) as target_money,SUM(total_order) as total_order,
+        SUM(round1_money) as round1_money,SUM(round1_order) as round1_order,SUM(round2_money) as
+        round2_money,SUM(round2_order) as round2_order,SUM(round3_money) as round3_money,SUM(round3_order) as
+        round3_order,
+        SUM(round4_money) as round4_money,SUM(round4_order) as round4_order,SUM(round5_money) as
+        round5_money,SUM(round5_order) as round5_order,SUM(round6_money) as round6_money,SUM(round6_order) as
+        round6_order,
+        SUM(round7_money) as round7_money,SUM(round7_order) as round7_order,SUM(round8_money) as
+        round8_money,SUM(round8_order) as round8_order,SUM(round9_money) as round9_money,SUM(round9_order) as
+        round9_order
+        from company_tcm_report r LEFT JOIN company_tcm_schedule s on r.schedule_id=s.id LEFT JOIN company c on
+        r.company_id=c.company_id
+        left join company_tcm_consume cu on r.company_id=cu.company_id and r.schedule_id=cu.schedule_id
+        left join company_user comu on r.company_user_id=comu.user_id
+        r.company_id=cu.company_id
+        where 1=1
+        <if test='maps.companyId != null  and maps.companyId != ""'>
+            and r.company_id IN
+            <foreach collection="maps.companyId.split(',')" item='item' index='index' open='(' separator=',' close=')'>
+                #{item}
+            </foreach>
+        </if>
+        <if test='maps.companyUserId != null '>
+            and r.company_user_id = #{maps.companyUserId}
+        </if>
+
+        <if test='maps.userNickName != null and maps.userNickName != "" '>
+            and comu.nick_name like '%${maps.userNickName}%'
+        </if>
+
+        <if test='maps.scheduleId != null   and maps.scheduleId != ""     '>
+            and r.schedule_id IN
+            <foreach collection="maps.scheduleId.split(',')" item='item' index='index' open='(' separator=',' close=')'>#{item}
+            </foreach>
+        </if>
+        <if test='maps.beginTime != null and maps.beginTime != "" '>
+            and date_format(r.create_time,'%y%m%d') &gt;= date_format(#{maps.beginTime},'%y%m%d')
+        </if>
+        <if test='maps.endTime != null and maps.endTime != "" '>
+            and date_format(r.create_time,'%y%m%d') &lt;= date_format(#{maps.endTime},'%y%m%d')
+        </if>
+        <if test='maps.deptIdStr != null and  maps.deptIdStr !=""    '>
+            AND
+            <foreach collection="maps.deptIdStr.split(',')" item="deptId" open="(" close=")" separator="OR">
+                comu.dept_id = #{deptId} OR comu.dept_id IN ( SELECT t.dept_id FROM company_dept t WHERE
+                find_in_set(#{deptId}, ancestors) )
+            </foreach>
+        </if>
+        ${maps.params.dataScope}
+        GROUP BY r.schedule_id,r.company_id
+        order by r.company_id desc
+
+    </select>
 
     <insert id="insertCompanyTcmReport" parameterType="CompanyTcmReport" useGeneratedKeys="true" keyProperty="id">
         insert into company_tcm_report
@@ -189,7 +302,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createUserId != null">create_user_id,</if>
             <if test="updateTime != null">update_time,</if>
             <if test="updateUserId != null">update_user_id,</if>
-         </trim>
+        </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="scheduleId != null">#{scheduleId},</if>
             <if test="companyUserId != null">#{companyUserId},</if>
@@ -245,7 +358,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createUserId != null">#{createUserId},</if>
             <if test="updateTime != null">#{updateTime},</if>
             <if test="updateUserId != null">#{updateUserId},</if>
-         </trim>
+        </trim>
     </insert>
 
     <update id="updateCompanyTcmReport" parameterType="CompanyTcmReport">
@@ -310,7 +423,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </update>
 
     <delete id="deleteCompanyTcmReportById" parameterType="Long">
-        delete from company_tcm_report where id = #{id}
+        delete
+        from company_tcm_report
+        where id = #{id}
     </delete>
 
     <delete id="deleteCompanyTcmReportByIds" parameterType="String">

+ 21 - 0
fs-service-system/src/main/resources/mapper/course/FsCourseAnswerLogsMapper.xml

@@ -40,6 +40,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectFsCourseAnswerLogsVo"/>
         where log_id = #{logId}
     </select>
+    <select id="selectFsCourseAnswerLogsListVONew" resultType="com.fs.course.vo.FsCourseAnswerLogsListVO">
+        select cal.*,uc.course_name as course_name,uc.project as project from fs_course_answer_logs cal
+        left join fs_user_course uc on cal.course_id=uc.course_id
+        <where>
+            <if test="courseId != null">
+                cal.course_id = #{courseId}
+            </if>
+            <if test="companyUserId != null">
+                AND cal.company_user_id = #{companyUserId}
+            </if>
+            <if test="companyId != null">
+                AND company_id = #{companyId}
+            </if>
+            <if test="isRight != null">
+                AND is_right = #{isRight}
+            </if>
+            <if test="project != null">
+                AND uc.project = #{project}
+            </if>
+        </where>
+    </select>
 
     <insert id="insertFsCourseAnswerLogs" parameterType="FsCourseAnswerLogs" useGeneratedKeys="true" keyProperty="logId">
         insert into fs_course_answer_logs