Commit 63794e12 by 阳浪

埋点

parent 369d15b9
package com.yizhi.site.application.feign.api;
import com.yizhi.site.application.vo.site.DayNumVo;
import com.yizhi.site.application.vo.site.EventTrackDayNumVo;
import com.yizhi.site.application.vo.site.EventTrackDeptNumVo;
import com.yizhi.site.application.vo.site.EventTrackTypeNumVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
* com.yizhi.site.application.feign.api
*
* @author yanglang
* @create 2025-01-14 11:00:10
*/
@FeignClient(name = "portal", contextId = "EventTrackApiClients")
public interface EventTrackApiClients {
@GetMapping("/api/eventTrack/addEvent")
void addEvent(@RequestParam("type") String type, @RequestParam("businessId") Long businessId);
@GetMapping("/api/eventTrack/getTodayNum")
EventTrackDayNumVo getTodayNum(@RequestParam(value = "date",required = false) String date);
@GetMapping("/api/eventTrack/getNumByType")
DayNumVo getNumByType(@RequestParam(value = "date",required = false) String date, @RequestParam("types")List<Integer> types);
@GetMapping("/api/eventTrack/queryNumByType")
List<EventTrackTypeNumVo> queryNumByType(@RequestParam(value = "date",required = false) String date, @RequestParam("types")List<Integer> types);
@GetMapping("/api/eventTrack/queryDeptByType")
List<EventTrackDeptNumVo> queryDeptByType(@RequestParam(value = "date",required = false) String date, @RequestParam("types")List<Integer> types);
}
package com.yizhi.site.application.vo.domain;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* com.yizhi.site.application.vo.domain
*
* @author yanglang
* @create 2025-01-14 10:17:00
*/
@Data
public class EventTrackVo {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "埋点表ID")
private Long id;
@ApiModelProperty(value = "备用字段1")
private String remark1;
@ApiModelProperty(value = "备用字段2")
private String remark2;
@ApiModelProperty(value = "备用字段3")
private String remark3;
@ApiModelProperty(value = "子类型")
private String subType;
@ApiModelProperty(value = "类型:1 登录,2 阅读文章,3 点赞收藏,4 投稿,5 问卷")
private Integer type;
@ApiModelProperty(value = "部门ID")
private Long deptId;
@ApiModelProperty(value = "部门名称")
private String deptName;
@ApiModelProperty(value = "业务ID")
private Long businessId;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "创建人")
private Long createById;
@ApiModelProperty(value = "创建姓名")
private String createByName;
@ApiModelProperty(value = "更新时间")
private Date updateTime;
@ApiModelProperty(value = "更新人")
private Long updateById;
@ApiModelProperty(value = "更新姓名")
private String updateByName;
@ApiModelProperty(value = "删除标记1删除 0 正常")
private Integer deleted;
}
package com.yizhi.site.application.vo.site;
import lombok.Data;
/**
* com.yizhi.site.application.vo.site
*
* @author yanglang
* @create 2025-01-14 15:30:07
*/
@Data
public class DayNumVo {
private Integer num;
private Integer preNum;
}
package com.yizhi.site.application.vo.site;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* com.yizhi.site.application.vo.site
*
* @author yanglang
* @create 2025-01-14 14:15:12
*/
@Data
public class EventTrackDayNumVo {
@ApiModelProperty("今日登录数")
private Integer loginNum;
@ApiModelProperty("上一日登录数")
private Integer loginPreNum;
@ApiModelProperty("今日板块浏览量")
private Integer readNum;
@ApiModelProperty("上一日板块浏览量")
private Integer readPreNum;
@ApiModelProperty("今日点赞览量")
private Integer admireNum;
@ApiModelProperty("上一日点赞览量")
private Integer admirePreNum;
}
package com.yizhi.site.application.vo.site;
import lombok.Data;
import java.util.List;
/**
* com.yizhi.site.application.vo.site
*
* @author yanglang
* @create 2025-01-14 15:09:20
*/
@Data
public class EventTrackDeptNumVo {
private Integer num;
private Long deptId;
private String deptName;
private List<EventTrackTypeNumVo> eventTrackTypeNumVoList;
}
package com.yizhi.site.application.vo.site;
import lombok.Data;
/**
* com.yizhi.site.application.vo.site
*
* @author yanglang
* @create 2025-01-14 14:43:02
*/
@Data
public class EventTrackTypeNumVo {
private Integer type;
private String subType;
private Integer num;
}
...@@ -99,8 +99,14 @@ ...@@ -99,8 +99,14 @@
<artifactId>cloud-util</artifactId> <artifactId>cloud-util</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-training-project-api</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<!-- <dependency>--> <!-- <dependency>-->
<!-- <groupId>org.jacoco</groupId>--> <!-- <groupId>org.jacoco</groupId>-->
<!-- <artifactId>jacoco-maven-plugin</artifactId>--> <!-- <artifactId>jacoco-maven-plugin</artifactId>-->
<!-- <version>0.7.8</version>--> <!-- <version>0.7.8</version>-->
......
package com.yizhi.site.application.controller.api;
import com.yizhi.site.application.service.EventTrackService;
import com.yizhi.site.application.vo.site.DayNumVo;
import com.yizhi.site.application.vo.site.EventTrackDayNumVo;
import com.yizhi.site.application.vo.site.EventTrackDeptNumVo;
import com.yizhi.site.application.vo.site.EventTrackTypeNumVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* com.yizhi.site.application.controller.api
*
* @author yanglang
* @create 2025-01-14 10:57:55
*/
@RestController
@RequestMapping("/api/eventTrack")
public class EventTrackController {
@Autowired
private EventTrackService eventTrackService;
@GetMapping("/addEvent")
public void addEvent(@RequestParam("type") String type, @RequestParam("businessId") Long businessId){
eventTrackService.addEvent(type,businessId);
}
@GetMapping("/getTodayNum")
public EventTrackDayNumVo getTodayNum(@RequestParam(value = "date",required = false) String date){
return eventTrackService.getTodayNum(date);
}
@GetMapping("/api/eventTrack/getNumByType")
public DayNumVo getNumByType(@RequestParam(value = "date",required = false) String date, @RequestParam("types") List<Integer> types){
return eventTrackService.getNumByType(date,types);
}
@GetMapping("/api/eventTrack/queryNumByType")
public List<EventTrackTypeNumVo> queryNumByType(@RequestParam(value = "date",required = false) String date, @RequestParam("types")List<Integer> types){
return eventTrackService.queryNumByType(date,types);
}
@GetMapping("/api/eventTrack/queryDeptByType")
public List<EventTrackDeptNumVo> queryDeptByType(@RequestParam(value = "date",required = false) String date, @RequestParam("types")List<Integer> types){
return eventTrackService.queryDeptByType(date,types);
}
}
...@@ -3,9 +3,12 @@ package com.yizhi.site.application.controller.api; ...@@ -3,9 +3,12 @@ package com.yizhi.site.application.controller.api;
import com.baomidou.mybatisplus.plugins.Page; import com.baomidou.mybatisplus.plugins.Page;
import com.yizhi.comment.application.feign.PdfPagesClient; import com.yizhi.comment.application.feign.PdfPagesClient;
import com.yizhi.comment.application.vo.domain.PdfPagesVo; import com.yizhi.comment.application.vo.domain.PdfPagesVo;
import com.yizhi.core.application.context.ContextHolder;
import com.yizhi.core.application.context.RequestContext;
import com.yizhi.point.application.feign.PointListenerClients; import com.yizhi.point.application.feign.PointListenerClients;
import com.yizhi.site.application.constant.SiteConstant; import com.yizhi.site.application.constant.SiteConstant;
import com.yizhi.site.application.domain.Information; import com.yizhi.site.application.domain.Information;
import com.yizhi.site.application.feign.api.EventTrackApiClients;
import com.yizhi.site.application.service.ITrInformationReadNumberService; import com.yizhi.site.application.service.ITrInformationReadNumberService;
import com.yizhi.site.application.service.InformationService; import com.yizhi.site.application.service.InformationService;
import com.yizhi.site.application.service.PortalBannerService; import com.yizhi.site.application.service.PortalBannerService;
...@@ -22,6 +25,7 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -22,6 +25,7 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
/** /**
* @author mei * @author mei
...@@ -43,6 +47,9 @@ public class InfoStudentController { ...@@ -43,6 +47,9 @@ public class InfoStudentController {
@Autowired @Autowired
private PointListenerClients pointListenerClients; private PointListenerClients pointListenerClients;
@Autowired
private EventTrackApiClients eventTrackApiClients;
/** /**
* 获取新闻资讯列表 * 获取新闻资讯列表
*/ */
...@@ -69,6 +76,11 @@ public class InfoStudentController { ...@@ -69,6 +76,11 @@ public class InfoStudentController {
*/ */
@PostMapping("/page/pcList") @PostMapping("/page/pcList")
public InformationListPcVo informationPcPageList(@RequestBody InfoVO infoVO) { public InformationListPcVo informationPcPageList(@RequestBody InfoVO infoVO) {
RequestContext context = ContextHolder.get();
// 添加阅读文章埋点
if(Objects.equals(context.getSiteType(),2)){
eventTrackApiClients.addEvent(String.valueOf(infoVO.getRelationId()),context.getAccountId());
}
return informationService.informationPcPageListV2(infoVO); return informationService.informationPcPageListV2(infoVO);
} }
......
package com.yizhi.site.application.domain;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableLogic;
import com.baomidou.mybatisplus.annotations.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* com.yizhi.site.application.domain
*
* @author yanglang
* @create 2025-01-14 10:06:55
*/
@ApiModel(value = "EventTrack", description = "埋点表")
@Data
@TableName("event_track")
public class EventTrack extends Model<EventTrack> {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "埋点表ID")
private Long id;
@ApiModelProperty(value = "备用字段1")
@TableField("remark1")
private String remark1;
@ApiModelProperty(value = "备用字段2")
@TableField("remark2")
private String remark2;
@ApiModelProperty(value = "备用字段3")
@TableField("remark3")
private String remark3;
@ApiModelProperty(value = "子类型")
@TableField("sub_type")
private String subType;
@ApiModelProperty(value = "类型:1 登录,2 阅读文章,3 点赞收藏,4 投稿,5 问卷")
@TableField("type")
private Integer type;
@ApiModelProperty(value = "部门ID")
@TableField("dept_id")
private Long deptId;
@ApiModelProperty(value = "部门名称")
@TableField("dept_name")
private String deptName;
@ApiModelProperty(value = "业务ID")
@TableField("business_id")
private Long businessId;
@ApiModelProperty(value = "创建时间")
@TableField("create_time")
private Date createTime;
@ApiModelProperty(value = "创建人")
@TableField("create_by_id")
private Long createById;
@ApiModelProperty(value = "创建姓名")
@TableField("create_by_name")
private String createByName;
@ApiModelProperty(value = "更新时间")
@TableField("update_time")
private Date updateTime;
@ApiModelProperty(value = "更新人")
@TableField("update_by_id")
private Long updateById;
@ApiModelProperty(value = "更新姓名")
@TableField("update_by_name")
private String updateByName;
@ApiModelProperty(value = "删除标记1删除 0 正常")
@TableLogic
@TableField("deleted")
private Integer deleted;
@Override
protected Serializable pkVal() {
return this.id;
}
}
package com.yizhi.site.application.mapper;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.yizhi.site.application.domain.EventTrack;
import com.yizhi.site.application.vo.site.DayNumVo;
import com.yizhi.site.application.vo.site.EventTrackDayNumVo;
import com.yizhi.site.application.vo.site.EventTrackDeptNumVo;
import com.yizhi.site.application.vo.site.EventTrackTypeNumVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* com.yizhi.site.application.mapper
*
* @author yanglang
* @create 2025-01-14 10:14:28
*/
public interface EventTrackMapper extends BaseMapper<EventTrack> {
EventTrackDayNumVo getTodayNum(@Param("date") String date);
DayNumVo getNumByType(@Param("date") String date,@Param("types")List<Integer> types);
List<EventTrackTypeNumVo> queryNumByType(@Param("deptId") Long deptId,@Param("date") String date,@Param("types")List<Integer> types);
List<EventTrackDeptNumVo> queryDeptByType(@Param("date") String date, @Param("types")List<Integer> types);
}
package com.yizhi.site.application.service;
import com.baomidou.mybatisplus.service.IService;
import com.yizhi.site.application.domain.EventTrack;
import com.yizhi.site.application.vo.site.DayNumVo;
import com.yizhi.site.application.vo.site.EventTrackDayNumVo;
import com.yizhi.site.application.vo.site.EventTrackDeptNumVo;
import com.yizhi.site.application.vo.site.EventTrackTypeNumVo;
import java.util.List;
/**
* com.yizhi.site.application.service
*
* @author yanglang
* @create 2025-01-14 10:15:30
*/
public interface EventTrackService extends IService<EventTrack> {
void addEvent(String type,Long businessId);
EventTrackDayNumVo getTodayNum(String date);
DayNumVo getNumByType(String date,List<Integer> types);
List<EventTrackTypeNumVo> queryNumByType(String date,List<Integer> types);
List<EventTrackDeptNumVo> queryDeptByType(String date, List<Integer> types);
}
package com.yizhi.site.application.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.yizhi.application.orm.id.IdGenerator;
import com.yizhi.core.application.context.ContextHolder;
import com.yizhi.core.application.context.RequestContext;
import com.yizhi.site.application.domain.EventTrack;
import com.yizhi.site.application.mapper.EventTrackMapper;
import com.yizhi.site.application.service.EventTrackService;
import com.yizhi.site.application.vo.site.DayNumVo;
import com.yizhi.site.application.vo.site.EventTrackDayNumVo;
import com.yizhi.site.application.vo.site.EventTrackDeptNumVo;
import com.yizhi.site.application.vo.site.EventTrackTypeNumVo;
import com.yizhi.system.application.feign.DictionaryFeignClients;
import com.yizhi.system.application.vo.domain.Dictionary;
import com.yizhi.training.application.feign.LeaveWordClient;
import com.yizhi.training.application.vo.domain.AuthzUserGroupVo;
import com.yizhi.util.application.date.DateUtil;
import com.yizhi.util.application.domain.Response;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
/**
* com.yizhi.site.application.service.impl
*
* @author yanglang
* @create 2025-01-14 10:15:57
*/
@Service
public class EventTrackServiceImpl extends ServiceImpl<EventTrackMapper, EventTrack> implements EventTrackService {
@Autowired
private DictionaryFeignClients dictionaryFeignClients;
@Autowired
private LeaveWordClient leaveWordClient;
@Autowired
IdGenerator idGenerator;
@Override
public void addEvent(String type,Long businessId){
RequestContext context = ContextHolder.get();
EventTrack eventTrack = new EventTrack();
Date toDay = new Date();
eventTrack.setBusinessId(businessId);
eventTrack.setCreateById(context.getAccountId());
eventTrack.setCreateByName(context.getAccountName());
eventTrack.setCreateTime(toDay);
eventTrack.setUpdateById(context.getAccountId());
eventTrack.setUpdateByName(context.getAccountName());
eventTrack.setUpdateTime(toDay);
AuthzUserGroupVo authzUserGroupVo = leaveWordClient.getAuthzUserGroup();
if(authzUserGroupVo!=null){
eventTrack.setDeptId(authzUserGroupVo.getId());
eventTrack.setDeptName(authzUserGroupVo.getName());
}
String key = "event_track_type";
Response<List<Dictionary>> response = dictionaryFeignClients.listChildDictionary(key,false,1);
if(response!=null&&response.getData()!=null){
List<Dictionary> dictionaryList = (List<Dictionary>)response.getData();
if(CollUtil.isNotEmpty(dictionaryList)){
Optional<Dictionary> optional = dictionaryList.stream().filter(d-> Objects.equals(d.getCode(),key+"_"+type)).findFirst();
if(optional!=null&&optional.isPresent()){
Dictionary dictionary = optional.get();
eventTrack.setSubType(dictionary.getCnName());
eventTrack.setType(Integer.valueOf(dictionary.getDescription()));
}
}
}
eventTrack.setId(idGenerator.generate());
this.insert(eventTrack);
}
@Override
public EventTrackDayNumVo getTodayNum(String date) {
if(ObjectUtils.isEmpty(date)){
date = DateUtil.toDay(new Date());
}
return this.baseMapper.getTodayNum(date);
}
@Override
public DayNumVo getNumByType(String date,List<Integer> types) {
if(ObjectUtils.isEmpty(date)){
date = DateUtil.toDay(new Date());
}
return this.baseMapper.getNumByType(date,types);
}
@Override
public List<EventTrackTypeNumVo> queryNumByType(String date,List<Integer> types) {
if(ObjectUtils.isEmpty(date)){
date = DateUtil.toDay(new Date());
}
return this.baseMapper.queryNumByType(null,date,types);
}
@Override
public List<EventTrackDeptNumVo> queryDeptByType(String date, List<Integer> types) {
if(ObjectUtils.isEmpty(date)){
date = DateUtil.toDay(new Date());
}
List<EventTrackDeptNumVo> eventTrackDeptNumVoList = this.baseMapper.queryDeptByType(date,types);
if(CollUtil.isNotEmpty(eventTrackDeptNumVoList)){
String finalDate = date;
eventTrackDeptNumVoList.stream().forEach(eventTrackDeptNumVo -> {
eventTrackDeptNumVo.setEventTrackTypeNumVoList(this.baseMapper.queryNumByType(eventTrackDeptNumVo.getDeptId(),finalDate,types));
});
}
return eventTrackDeptNumVoList;
}
}
<?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">
<mapper namespace="com.yizhi.site.application.mapper.EventTrackMapper">
<select id="getTodayNum" resultType="com.yizhi.site.application.vo.site.EventTrackDayNumVo">
select ifnull(sum(loginNum),0) as loginNum,ifnull(sum(loginPreNum),0) as loginPreNum,ifnull(sum(readNum),0) as readNum,
ifnull(sum(readPreNum),0) as readPreNum,ifnull(sum(admireNum),0) as admireNum,ifnull(sum(admirePreNum),0) as admirePreNum
from(
select
case when e.type = 1 and e.create_time = DATE_FORMAT(#{date}, '%Y-%m-%d') then 1 else 0 end as loginNum,
case when e.type = 1 and e.create_time = DATE_SUB(DATE_FORMAT(#{date}, '%Y-%m-%d'), INTERVAL 1 DAY) then 1 else 0 end as loginPreNum,
case when e.type not in(1,3,4,5,11,12,13) and e.create_time = DATE_FORMAT(#{date}, '%Y-%m-%d') then 1 else 0 end as readNum,
case when e.type not in(1,3,4,5,11,12,13) and e.create_time = DATE_SUB(DATE_FORMAT(#{date}, '%Y-%m-%d'), INTERVAL 1 DAY) then 1 else 0 end as readPreNum,
case when e.type = 11 and e.type = 12 and e.create_time = DATE_FORMAT(#{date}, '%Y-%m-%d') then 1 else 0 end as admireNum,
case when e.type = 11 and e.type = 12 and e.create_time = DATE_SUB(DATE_FORMAT(#{date}, '%Y-%m-%d'), INTERVAL 1 DAY) then 1 else 0 end as admirePreNum
from event_track e where e.deleted =0) a
</select>
<select id="queryNumByType" resultType="com.yizhi.site.application.vo.site.EventTrackTypeNumVo">
select
e.type,e.sub_type as subType,count(1) as num from event_track e
where e.deleted =0 and e.create_time = DATE_FORMAT(#{date}, '%Y-%m-%d')
<if test="types!=null and types.size()>0">
AND e.type IN
<foreach collection="types" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="deptId!=null">
and e.dept_id = #{deptId}
</if>
group by e.type,e.sub_type
order by e.type
</select>
<select id="queryDeptByType" resultType="com.yizhi.site.application.vo.site.EventTrackDeptNumVo">
select
e.dept_id as deptId,e.dept_name as deptName,count(1) as num from event_track e
where e.deleted =0 and e.create_time >= DATE_FORMAT(#{date}, '%Y-%m-%d')
<if test="types!=null and types.size()>0">
AND e.type IN
<foreach collection="types" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
group by e.dept_name
</select>
<select id="getNumByType" resultType="com.yizhi.site.application.vo.site.DayNumVo">
select ifnull(sum(num),0) as num,ifnull(sum(preNum),0) as preNum
from(
select
case when e.type = 1 and e.create_time = DATE_FORMAT(#{date}, '%Y-%m-%d') then 1 else 0 end as num,
case when e.type = 1 and e.create_time = DATE_SUB(DATE_FORMAT(#{date}, '%Y-%m-%d'), INTERVAL 1 DAY) then 1 else
0 end as preNum,
where e.deleted =0
<if test="types!=null and types.size()>0">
AND e.type IN
<foreach collection="types" item="item" open="(" separator="," close=")"></foreach>
</if>
#{item}
) a
</select>
</mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment