Explorar el Código

修改自动打标签规则

吴树波 hace 1 día
padre
commit
9171e14099

+ 13 - 0
fs-admin/src/main/java/com/fs/course/controller/qw/QwFsCourseWatchLogController.java

@@ -3,6 +3,7 @@ package com.fs.course.controller.qw;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.domain.R;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
 import com.fs.common.exception.CustomException;
@@ -16,6 +17,7 @@ import com.fs.course.param.PeriodStatisticCountParam;
 import com.fs.course.service.IFsCourseWatchLogService;
 import com.fs.course.vo.FsCourseOverVO;
 import com.fs.course.vo.FsCourseWatchLogListVO;
+import com.fs.course.vo.FsCourseWatchLogStatisticsListByCompanyVO;
 import com.fs.course.vo.FsCourseWatchLogStatisticsListVO;
 import com.fs.qw.param.QwWatchLogStatisticsListParam;
 import com.fs.qw.service.IQwWatchLogService;
@@ -78,6 +80,17 @@ public class QwFsCourseWatchLogController extends BaseController
         List<FsCourseWatchLogStatisticsListVO> list = fsCourseWatchLogService.selectFsCourseWatchLogStatisticsListVO(param);
         return getDataTable(list);
     }
+
+    @GetMapping("/statisticsListByCompany")
+    public R statisticsListByCompany(FsCourseWatchLogStatisticsListParam param)
+    {
+        if (param.getSTime()==null||param.getETime()==null){
+            return R.ok().put("rows", new ArrayList<>());
+        }
+        param.setSendType(2); //企微
+        List<FsCourseWatchLogStatisticsListByCompanyVO> list = fsCourseWatchLogService.selectFsCourseWatchLogStatisticsListByCompanyVO(param);
+        return R.ok().put("rows", list);
+    }
     @GetMapping("/qwWatchLogStatisticsList")
     public TableDataInfo qwWatchLogStatisticsList(QwWatchLogStatisticsListParam param)
     {

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

@@ -528,4 +528,6 @@ public interface FsCourseWatchLogMapper extends BaseMapper<FsCourseWatchLog> {
      * 查询训练营看课人数
      */
     Integer getUserCountByCampId(@Param("trainingCampId") Long trainingCampId);
+
+    List<FsCourseWatchLogStatisticsListByCompanyVO> selectFsCourseWatchLogStatisticsListByCompanyVO(FsCourseWatchLogStatisticsListParam param);
 }

+ 2 - 4
fs-service/src/main/java/com/fs/course/service/IFsCourseWatchLogService.java

@@ -3,10 +3,7 @@ package com.fs.course.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.course.domain.FsCourseWatchLog;
 import com.fs.course.param.*;
-import com.fs.course.vo.FsCourseOverVO;
-import com.fs.course.vo.FsCourseUserStatisticsListVO;
-import com.fs.course.vo.FsCourseWatchLogListVO;
-import com.fs.course.vo.FsCourseWatchLogStatisticsListVO;
+import com.fs.course.vo.*;
 import com.fs.qw.param.QwWatchLogStatisticsListParam;
 import com.fs.qw.vo.QwWatchLogStatisticsListVO;
 
@@ -92,6 +89,7 @@ public interface IFsCourseWatchLogService extends IService<FsCourseWatchLog> {
     void testFinishMsg();
 
     List<FsCourseWatchLogStatisticsListVO> selectFsCourseWatchLogStatisticsListVO(FsCourseWatchLogStatisticsListParam param);
+    List<FsCourseWatchLogStatisticsListByCompanyVO> selectFsCourseWatchLogStatisticsListByCompanyVO(FsCourseWatchLogStatisticsListParam param);
 
     void scheduleBatchUpdateToDatabase();
 

+ 5 - 0
fs-service/src/main/java/com/fs/course/service/impl/FsCourseWatchLogServiceImpl.java

@@ -723,6 +723,11 @@ public class FsCourseWatchLogServiceImpl extends ServiceImpl<FsCourseWatchLogMap
         return fsCourseWatchLogMapper.selectFsCourseWatchLogStatisticsListVO(param);
     }
 
+    @Override
+    public List<FsCourseWatchLogStatisticsListByCompanyVO> selectFsCourseWatchLogStatisticsListByCompanyVO(FsCourseWatchLogStatisticsListParam param) {
+        return fsCourseWatchLogMapper.selectFsCourseWatchLogStatisticsListByCompanyVO(param);
+    }
+
 
     public void sendSocket(String cmd,String message,String appKey){
         MsgBean msgBean=new MsgBean();

+ 42 - 0
fs-service/src/main/java/com/fs/course/vo/FsCourseWatchLogStatisticsListByCompanyVO.java

@@ -0,0 +1,42 @@
+package com.fs.course.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class FsCourseWatchLogStatisticsListByCompanyVO {
+
+
+    @Excel(name = "公司名称")
+    private String companyName;
+    private Integer project;
+    @Excel(name = "项目名称")
+    private String projectName;
+
+    private Long courseId;
+    @Excel(name = "课程名称")
+    private String courseName;
+
+    private Long videoId;
+    @Excel(name = "小节名称")
+    private String videoName;
+
+    @Excel(name = "待看课")
+    private String type1;
+    @Excel(name = "看课中")
+    private String type2;
+    @Excel(name = "已完课")
+    private String type3;
+    @Excel(name = "看课中断")
+    private String type4;
+    @Excel(name = "上线数")
+    private Long onLineNum;
+
+    private Long userId;
+    @Excel(name = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createTime;
+}

+ 3 - 0
fs-service/src/main/java/com/fs/qw/param/QwAutoTagsRulesTags.java

@@ -2,6 +2,7 @@ package com.fs.qw.param;
 
 import lombok.Data;
 
+import java.time.LocalDate;
 import java.util.List;
 
 @Data
@@ -12,4 +13,6 @@ public class QwAutoTagsRulesTags {
     private String endTime;
     private String remarks;
     private Integer isDay;
+    private Integer dayOrWeek;
+    private List<LocalDate> days;
 }

+ 53 - 15
fs-service/src/main/java/com/fs/qw/service/impl/QwExternalContactServiceImpl.java

@@ -67,6 +67,7 @@ import com.fs.system.service.ISysDictTypeService;
 import com.fs.voice.utils.StringUtil;
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.rocketmq.spring.core.RocketMQTemplate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -95,7 +96,7 @@ import java.util.stream.Stream;
  * @date 2024-06-20
  */
 @Service
-
+@Slf4j
 public class QwExternalContactServiceImpl extends ServiceImpl<QwExternalContactMapper, QwExternalContact> implements IQwExternalContactService {
 
     private static final String miniappRealLink = "/pages_course/video.html?course=";
@@ -2567,20 +2568,25 @@ public class QwExternalContactServiceImpl extends ServiceImpl<QwExternalContactM
                         qwAutoTagsLogs.setType(3L);
                         qwAutoTagsLogs.setQwUserid(qwUser.getId());
                         qwAutoTagsLogs.setExternalUserId(externalUserID);
-                            List<QwAutoTagsRulesTags> qwAutoTagsRulesTagsList = JSON.parseArray(qwAutoTags.getRulesTags(), QwAutoTagsRulesTags.class);
-                            // 获取今天的星期数
-                            DayOfWeek today = LocalDate.now().getDayOfWeek();
-                            int todayIndex = today.getValue(); // 1: Monday, 2: Tuesday, ..., 7: Sunday
-                            // 获取当前时间
-                            LocalTime now = LocalTime.now();
-                            // 遍历所有规则
-                            for (QwAutoTagsRulesTags rulesTags : qwAutoTagsRulesTagsList) {
-                                List<String> tagsItem = rulesTags.getTags();
-                                List<Integer> week = rulesTags.getWeek();
-                                String startTime = rulesTags.getStartTime();
-                                String endTime = rulesTags.getEndTime();
-                                String remarks = rulesTags.getRemarks();
-
+                        List<QwAutoTagsRulesTags> qwAutoTagsRulesTagsList = JSON.parseArray(qwAutoTags.getRulesTags(), QwAutoTagsRulesTags.class);
+                        LocalDate dateNow = LocalDate.now();
+                        // 获取今天的星期数
+                        DayOfWeek today = dateNow.getDayOfWeek();
+                        int todayIndex = today.getValue(); // 1: Monday, 2: Tuesday, ..., 7: Sunday
+                        // 获取当前时间
+                        LocalTime now = LocalTime.now();
+                        // 遍历所有规则
+                        for (QwAutoTagsRulesTags rulesTags : qwAutoTagsRulesTagsList) {
+                            List<String> tagsItem = rulesTags.getTags();
+                            List<Integer> week = rulesTags.getWeek();
+                            String startTime = rulesTags.getStartTime();
+                            String endTime = rulesTags.getEndTime();
+                            String remarks = rulesTags.getRemarks();
+                            Integer dayOrWeek = rulesTags.getDayOrWeek();
+                            boolean isWeek = dayOrWeek == null || dayOrWeek == 0;
+                            log.info("自动打标签规则:{}", JSON.toJSONString(rulesTags));
+                            if(isWeek){
+                                log.info("进入按星期打标签");
                                 // 检查今天是否在 week 集合中
                                 boolean isTodayInWeek = week.contains(todayIndex);
                                 // 转换时间字符串为 LocalTime
@@ -2591,6 +2597,37 @@ public class QwExternalContactServiceImpl extends ServiceImpl<QwExternalContactM
                                 // 如果当前时间和日期匹配规则,将 tagsItem 添加到 combinedTagsSet 中
                                 if (isTodayInWeek && isNowInTimeRange) {
 
+                                    combinedTagsSet.addAll(tagsItem);
+                                    combinedTagsItem.addAll(tagsItem);
+                                    isMatch = true;
+                                    if (rulesTags.getIsDay()!=null&&rulesTags.getIsDay()==1){
+                                        String DayDate = LocalDate.now().format(DateTimeFormatter.ofPattern("yyMMdd"));
+                                        tagRemark=DayDate.substring(1);
+                                    }
+                                    //如果备注不为空
+                                    if (rulesTags.getIsDay()!=null&&rulesTags.getIsDay()==1){
+                                        String DayDate = LocalDate.now().format(DateTimeFormatter.ofPattern("yyMMdd"));
+                                        tagRemark=DayDate.substring(1);
+                                    }
+                                    //如果备注不为空
+                                    if (!StringUtil.strIsNullOrEmpty(remarks)){
+                                        tagRemark = (tagRemark==null?"":(tagRemark+ "-") ) +remarks;
+                                    }
+                                }
+                            }else if(rulesTags.getDays() != null && rulesTags.getDays().size() == 2){
+                                log.info("进入按日期打标签");
+                                LocalDate startDate = rulesTags.getDays().get(0);
+                                LocalDate endDate = rulesTags.getDays().get(1);
+                                boolean isInRange = (dateNow.isEqual(startDate) || dateNow.isAfter(startDate))
+                                        && (dateNow.isEqual(endDate) || dateNow.isBefore(endDate));
+                                log.info("是否满足日期start:{},end:{},now:{},boolean:{}", startDate, endDate, dateNow, isInRange);
+                                // 转换时间字符串为 LocalTime
+                                LocalTime start = LocalTime.parse(startTime);
+                                LocalTime end = LocalTime.parse(endTime.equals("24:00") ? "23:59:59" : endTime);
+                                // 检查当前时间是否在 startTime 和 endTime 之间
+                                boolean isNowInTimeRange = !now.isBefore(start) && !now.isAfter(end);
+                                if (isInRange && isNowInTimeRange) {
+
                                     combinedTagsSet.addAll(tagsItem);
                                     combinedTagsItem.addAll(tagsItem);
                                     isMatch = true;
@@ -2609,6 +2646,7 @@ public class QwExternalContactServiceImpl extends ServiceImpl<QwExternalContactM
                                     }
                                 }
                             }
+                        }
                     }
 
                         // 如果有匹配的规则,使用 combinedTagsList

+ 47 - 0
fs-service/src/main/resources/mapper/course/FsCourseWatchLogMapper.xml

@@ -863,4 +863,51 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where ucp.training_camp_id = #{trainingCampId}
     </select>
 
+    <select id="selectFsCourseWatchLogStatisticsListByCompanyVO"
+            resultType="com.fs.course.vo.FsCourseWatchLogStatisticsListByCompanyVO">
+        SELECT
+        o.video_id,
+        o.company_id,
+        comp.company_name,
+        o.qw_user_id,
+        DATE(o.create_time) create_time,
+        v.title videoName,
+        uc.course_name,
+        SUM(CASE WHEN o.log_type = '1' THEN 1 ELSE 0 END) AS type1,
+        SUM(CASE WHEN o.log_type = '2' THEN 1 ELSE 0 END) AS type2,
+        SUM(CASE WHEN o.log_type = '3' THEN 1 ELSE 0 END) AS type3,
+        SUM(CASE WHEN o.log_type = '4' THEN 1 ELSE 0 END) AS type4
+        FROM
+        fs_course_watch_log o
+        LEFT JOIN fs_user_course_video v ON v.video_id = o.video_id
+        LEFT JOIN company comp ON comp.company_id = o.company_id
+        LEFT JOIN qw_user qu ON qu.id = o.qw_user_id
+        LEFT JOIN fs_user_course uc ON uc.course_id = v.course_id
+        <where>
+            <if test="sendType != null">
+                and send_type = #{sendType}
+            </if>
+            <if test="companyId != null">
+                and o.company_id = #{companyId}
+            </if>
+            <if test="sTime != null">
+                AND DATE (o.create_time) &gt;= DATE (#{sTime})
+            </if>
+            <if test="eTime != null">
+                AND DATE (o.create_time) &lt;= DATE (#{eTime})
+            </if>
+            <if test="courseId != null">
+                and o.course_id = #{courseId}
+            </if>
+            <if test="videoId != null">
+                and o.video_id = #{videoId}
+            </if>
+        </where>
+        GROUP BY
+            DATE (o.create_time),
+            o.company_id
+        ORDER BY
+        comp.company_id,
+            DATE (o.create_time)
+    </select>
 </mapper>