Commit 46ce5d37 by 郑永强

feat: [1004072] 小睿资源广场

parent dbf9ab07
......@@ -99,4 +99,24 @@ public interface AppletService {
ResponseEntity<ResponseDto<Map<Long, AppletAppOrProductDTO>>> getAppOrProductBrowseCount(@RequestParam("recordType") Integer recordType,
@RequestBody List<Long> serveIds);
@ApiOperation("mySql 足迹数据同步到 clickHouse")
@GetMapping("fixAppletRecordDataSync4CH")
void fixAppletRecordDataSync4CH(@RequestParam(value = "createDate", required = false) String createDate);
@ApiOperation("并更新缓存")
@GetMapping("updateAggrStatisCache")
void updateAggrStatisCache();
@ApiOperation("mySql 足迹数据同步到 clickHouse,并更新缓存")
@GetMapping("syncDataAndUpdateCache")
void syncDataAndUpdateCache(@RequestParam(value = "createDate", required = false) String createDate);
@ApiOperation("更新 applet_record.type_code 旧数据")
@GetMapping("handleAppletRecordTypeCode")
ResponseEntity<ResponseDto<Object>> handleAppletRecordTypeCode(@RequestParam(value = "lastAppletRecordId", required = false) Long lastAppletRecordId);
@ApiOperation("停止更新 applet_record.type_code 旧数据")
@GetMapping("stopHandleAppletRecordTypeCode")
void stopHandleAppletRecordTypeCode();
}
......@@ -230,6 +230,13 @@
<version>${wxgroup-sdk.version}</version>
</dependency>
<!-- clickHouse数据库 -->
<dependency>
<groupId>ru.yandex.clickhouse</groupId>
<artifactId>clickhouse-jdbc</artifactId>
<version>0.2.1</version>
</dependency>
<!--ES相关-->
<dependency>
<groupId>org.springframework.data</groupId>
......
......@@ -41,7 +41,7 @@ import java.util.Map;
@PropertySource({"classpath:properties/book.properties", "classpath:public_system.properties"})
@Configuration
@EnableSwagger2
@MapperScan(basePackages = {"com.pcloud.book.*.mapper"})
@MapperScan(basePackages = {"com.pcloud.book.*.mapper"}, sqlSessionFactoryRef = "sqlSessionFactory")
public class BookApplication {
public static void main(String[] args) {
......
package com.pcloud.book.applet.biz;
import com.pcloud.common.page.PageBeanNew;
public interface AppletRecordAggrStatisBiz {
PageBeanNew getAggrStatis(Long wechatUserId,String keyword, Integer sourceType, Integer rankType, Integer currentPage, Integer numPerPage);
/**
* mySql 数据同步到 clickHouse
*/
void fixAppletRecordDataSync4CH(String createDate);
/**
* 更新缓存
*/
void updateAggrStatisCache();
/**
* 同步数据并更新缓存
*/
void syncDataAndUpdateCache(String date);
}
......@@ -74,4 +74,10 @@ public interface AppletRecordBiz {
* @return
*/
Map<Long, AppletAppOrProductDTO> getAppOrProductBrowseCount(Integer recordType, List<Long> serveIds);
void fillAppletRecord(List<AppletRecordDTO> recordList, Integer bookType);
Object handleAppletRecordTypeCode(Long lastAppletRecordId);
void stopHandleAppletRecordTypeCode();
}
......@@ -75,6 +75,11 @@ public class AppletConstants {
public static final String APPLET_RECORD_HISTORY_STATIS_REPORT_LAST_DATE = CacheConstant.BOOK + "APPLET:HISTORY_REPORT_LAST_DATE_";
/**
* 小睿资源广场统计
*/
public static final String APPLET_RESOURCE_AGGR_STATIS = CacheConstant.BOOK +"APPLET:getAggrStatis";
/**
* 未配置答案的书刊
*/
public static final List<Long> NO_ANSWER_BOOK = Arrays.asList(
......
......@@ -7,6 +7,7 @@ import com.pcloud.book.applet.dto.AppletUserBookcaseDTO;
import com.pcloud.book.applet.dto.ReadBookDayStatisDTO;
import com.pcloud.book.applet.entity.AppletRecord;
import com.pcloud.common.core.dao.BaseDao;
import org.apache.ibatis.session.ResultHandler;
import java.util.Date;
import java.util.List;
......@@ -33,4 +34,10 @@ public interface AppletRecordDao extends BaseDao<AppletRecord> {
Long getStatisUserCount(Date prevMonday, Date prevSunday);
Map<Long, AppletAppOrProductDTO> getAppOrProductBrowseCount(Integer recordType, List<Long> serveIds);
void fixAppletRecordDataSync4CH(String createDate, ResultHandler<AppletRecord> appletRecordResultHandler);
List<AppletRecordDTO> getHandleAppletRecordTypeCode(Map<String, Object> paramMap);
void batchUpdateTypeCode(List<AppletRecordDTO> recordList);
}
......@@ -9,6 +9,7 @@ import com.pcloud.book.applet.dto.AppletUserBookcaseDTO;
import com.pcloud.book.applet.dto.ReadBookDayStatisDTO;
import com.pcloud.book.applet.entity.AppletRecord;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.apache.ibatis.session.ResultHandler;
import org.springframework.stereotype.Repository;
import java.util.Date;
......@@ -74,4 +75,20 @@ public class AppletRecordDaoImpl extends BaseDaoImpl<AppletRecord> implements Ap
paramMap.put("serveIds", serveIds);
return this.sqlSessionTemplate.selectMap(getStatement("getAppOrProductBrowseCount"), paramMap, "serveId");
}
@Override
public void fixAppletRecordDataSync4CH(String createDate, ResultHandler<AppletRecord> handler) {
Map<String, Object> params = MapUtil.<String, Object>builder().put("createDate", createDate).build();
getSqlSession().select(getStatement("fixAppletRecordDataSync4CH"), params, handler);
}
@Override
public List<AppletRecordDTO> getHandleAppletRecordTypeCode(Map<String, Object> paramMap) {
return getSqlSession().selectList(getStatement("getHandleAppletRecordTypeCode"), paramMap);
}
@Override
public void batchUpdateTypeCode(List<AppletRecordDTO> recordList) {
getSqlSession().update(getStatement("batchUpdateTypeCode"), recordList);
}
}
package com.pcloud.book.applet.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.book.group.dto.WxWorkTeacherDTO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
......@@ -52,6 +53,9 @@ public class AppletRecordDTO {
@ApiModelProperty("书单推荐")
private AppletOuterBooklistDTO appletOuterBooklistDTO;
@ApiModelProperty("企业微信客服")
private WxWorkTeacherDTO wxWorkTeacherDTO;
@ApiModelProperty("资源是否已经被删除 0 未删除,1 已删除")
private Integer sourceDelete;
......@@ -73,4 +77,15 @@ public class AppletRecordDTO {
@ApiModelProperty("上下架状态")
private Integer showState;
@ApiModelProperty("应用、作品类型")
private String typeCode;
@ApiModelProperty("用户量")
private Integer userCount;
@ApiModelProperty("点击量")
private Integer clickCount;
@ApiModelProperty("是否收藏")
private Integer isCollect;
}
package com.pcloud.book.applet.enums;
public enum AppletRankTypeEnum {
ALL(1), // 总榜
MONTH(2), // 月榜
WEEK(3); // 周榜
public Integer value;
AppletRankTypeEnum(Integer value) {
this.value = value;
}
}
package com.pcloud.book.applet.enums;
public enum AppletSourceTypeEnum {
ONLINE_LESSON(1), // 线上课程
HOT_NEWS(2), // 热点资讯
LEARN_TOOL(3), // 学习工具
RECOMMEND_BOOK(4), // 推荐书单
RESOURCE_TOPIC(5), // 资源专题
LEARN_GROUP(6), // 学习交流群
ANSWER_1V1(7), // 1v1辅导答疑
LEARN_CLOCK(8); // 学习打卡
public Integer value;
AppletSourceTypeEnum(Integer value) {
this.value = value;
}
}
package com.pcloud.book.applet.facade;
import com.pcloud.book.applet.biz.AppletRecordAggrStatisBiz;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.permission.PermissionException;
import com.pcloud.common.utils.cookie.Cookie;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CookieValue;
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;
/**
* (AppletRecordAggrWeekStatis)表控制层
*
* @author makejava
* @since 2020-12-21 10:35:33
*/
@RestController("appletRecordAggrStatisFacade")
@RequestMapping("appletRecordAggrStatis")
public class AppletRecordAggrStatisFacade {
@Autowired
private AppletRecordAggrStatisBiz appletRecordAggrStatisBiz;
@ApiOperation("分页查询")
@GetMapping("getList")
public ResponseDto<?> getAggrStatis(@CookieValue("userInfo") String userInfo,
@RequestParam(value = "keyword", required = false) String keyword,
@RequestParam(value = "sourceType", defaultValue = "1") Integer sourceType,
@RequestParam(value = "rankType", required = false, defaultValue = "1") Integer rankType,
@RequestParam(value = "currentPage", defaultValue = "0") Integer currentPage,
@RequestParam(value = "numPerPage", defaultValue = "10") Integer numPerPage)
throws BizException, PermissionException {
Long wechatUserId = Cookie.getId(userInfo, Cookie._WECHAT_USER_ID);
return new ResponseDto<>(appletRecordAggrStatisBiz.getAggrStatis(wechatUserId, keyword, sourceType, rankType, currentPage, numPerPage));
}
}
......@@ -7,6 +7,7 @@ import com.pcloud.book.applet.biz.AppletBookClassifyBiz;
import com.pcloud.book.applet.biz.AppletNewsBiz;
import com.pcloud.book.applet.biz.AppletRecordBiz;
import com.pcloud.book.applet.biz.AppletRecordStatisBiz;
import com.pcloud.book.applet.biz.AppletRecordAggrStatisBiz;
import com.pcloud.book.applet.biz.AppletThirdResourcesStaticBiz;
import com.pcloud.book.applet.biz.ServeCollectBiz;
import com.pcloud.book.applet.dto.AppletAppOrProductDTO;
......@@ -75,6 +76,8 @@ public class AppletServiceImpl implements AppletService {
private AppletRecordStatisBiz appletRecordStatisBiz;
@Autowired
private AppletRecordBiz appletRecordBiz;
@Autowired
private AppletRecordAggrStatisBiz appletRecordAggrStatisBiz;
@Override
......@@ -180,4 +183,34 @@ public class AppletServiceImpl implements AppletService {
Map<Long, AppletAppOrProductDTO> appletAppOrProductDTOMap = appletRecordBiz.getAppOrProductBrowseCount(recordType, serveIds);
return ResponseHandleUtil.toResponse(appletAppOrProductDTOMap);
}
@Override
@GetMapping("fixAppletRecordDataSync4CH")
public void fixAppletRecordDataSync4CH(@RequestParam(value = "createDate", required = false) String createDate){
appletRecordAggrStatisBiz.fixAppletRecordDataSync4CH(createDate);
}
@Override
@GetMapping("updateAggrStatisCache")
public void updateAggrStatisCache(){
appletRecordAggrStatisBiz.updateAggrStatisCache();
}
@Override
@GetMapping("syncDataAndUpdateCache")
public void syncDataAndUpdateCache(@RequestParam(value = "createDate", required = false) String createDate){
appletRecordAggrStatisBiz.syncDataAndUpdateCache(createDate);
}
@Override
@GetMapping("handleAppletRecordTypeCode")
public ResponseEntity<ResponseDto<Object>> handleAppletRecordTypeCode(@RequestParam(value = "lastAppletRecordId", required = false) Long lastAppletRecordId){
return ResponseHandleUtil.toResponse(appletRecordBiz.handleAppletRecordTypeCode(lastAppletRecordId));
}
@Override
@GetMapping("stopHandleAppletRecordTypeCode")
public void stopHandleAppletRecordTypeCode(){
appletRecordBiz.stopHandleAppletRecordTypeCode();
}
}
package com.pcloud.book.config.datasource;
import com.alibaba.druid.pool.DruidDataSource;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
/**
* clickhouse 数据源配置
*/
@Slf4j
@Configuration
@MapperScan(basePackages = "com.pcloud.book.mapper.clickhouse", sqlSessionFactoryRef = "clickHouseSqlSessionFactory")
public class CHDataSource {
@Bean(name = "clickHouseDataSource")
@ConfigurationProperties(prefix = "spring.datasourceCh")
public DataSource druidDataSource() {
log.info("[初始化clickhouse数据源 - druidDataSource]");
return new DruidDataSource();
}
@Bean("clickHouseSqlSessionFactory")
public SqlSessionFactory clickHouseSqlSessionFactory(@Qualifier("clickHouseDataSource") DataSource datasource)
throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
bean.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath:/clickhouse/**/*Mapper.xml"));
log.info("[初始化clickhouse数据源 - clickHouseSqlSessionFactory]");
return bean.getObject();
}
@Bean("clickHouseSqlSessionTemplate")
public SqlSessionTemplate clickHouseSqlSessionTemplate(
@Qualifier("clickHouseSqlSessionFactory") SqlSessionFactory sessionFactory) {
log.info("[初始化clickhouse数据源 - clickHouseSqlSessionTemplate]");
return new SqlSessionTemplate(sessionFactory);
}
}
package com.pcloud.book.group.biz;
import com.pcloud.book.group.entity.WeworkTeacherFriendRecord;
import com.pcloud.common.page.PageBeanNew;
import java.util.List;
/**
* 点击加老师好友记录表(WeworkTeacherFriendRecord)表服务接口
*
* @author makejava
* @since 2020-12-25 20:01:43
*/
public interface WeworkTeacherFriendRecordBiz {
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
WeworkTeacherFriendRecord getById(Long id);
/**
* 分页查询
*/
PageBeanNew getList(Integer currentPage, Integer numPerPage);
/**
* 新增数据
*
* @param weworkTeacherFriendRecord 实例对象
* @return 主键
*/
Long insert(WeworkTeacherFriendRecord weworkTeacherFriendRecord);
/**
* 修改数据
*
* @param weworkTeacherFriendRecord 实例对象
*/
void update(WeworkTeacherFriendRecord weworkTeacherFriendRecord);
/**
* 通过主键删除数据
*
* @param id 主键
* @return 是否成功
*/
void deleteById(Long id);
}
\ No newline at end of file
package com.pcloud.book.group.biz.impl;
import com.pcloud.book.group.entity.WeworkTeacherFriendRecord;
import com.pcloud.book.group.dao.WeworkTeacherFriendRecordDao;
import com.pcloud.book.group.biz.WeworkTeacherFriendRecordBiz;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.page.PageParam;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.NumberUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 点击加老师好友记录表(WeworkTeacherFriendRecord)表服务实现类
*
* @author makejava
* @since 2020-12-25 20:01:43
*/
@Service("weworkTeacherFriendRecordBiz")
public class WeworkTeacherFriendRecordBizImpl implements WeworkTeacherFriendRecordBiz {
private static final Logger LOGGER = LoggerFactory.getLogger(WeworkTeacherFriendRecordBizImpl.class);
@Autowired
private WeworkTeacherFriendRecordDao weworkTeacherFriendRecordDao;
@Override
@ParamLog("通过ID查询单条数据")
public WeworkTeacherFriendRecord getById(Long id) {
return weworkTeacherFriendRecordDao.getById(id);
}
@Override
@ParamLog("查询多条数据")
public PageBeanNew getList(Integer currentPage, Integer numPerPage) {
PageBeanNew pageBeanNew = weworkTeacherFriendRecordDao.listPageNew(new PageParam(currentPage, numPerPage), null, "getList");
List recordList = pageBeanNew.getRecordList();
if (ListUtils.isEmpty(recordList)){
return pageBeanNew;
}
// 加载其它数据
return pageBeanNew;
}
@Override
@ParamLog("新增")
public Long insert(WeworkTeacherFriendRecord weworkTeacherFriendRecord) {
weworkTeacherFriendRecordDao.insert(weworkTeacherFriendRecord);
return weworkTeacherFriendRecord.getId();
}
@Override
@ParamLog("修改")
public void update(WeworkTeacherFriendRecord weworkTeacherFriendRecord) {
if(weworkTeacherFriendRecord == null || !NumberUtil.isNumber(weworkTeacherFriendRecord.getId())){
throw BizException.PARAM_IS_NULL;
}
weworkTeacherFriendRecordDao.update(weworkTeacherFriendRecord);
}
@Override
@ParamLog("删除")
public void deleteById(Long id) {
weworkTeacherFriendRecordDao.deleteById(id);
}
}
\ No newline at end of file
package com.pcloud.book.group.dao;
import com.pcloud.book.applet.dto.AppletRecordDTO;
import com.pcloud.book.group.entity.WeworkTeacherFriendRecord;
import com.pcloud.common.core.dao.BaseDao;
import java.util.HashMap;
import java.util.List;
/**
* 点击加老师好友记录表(WeworkTeacherFriendRecord)表数据库访问层
*
* @author makejava
* @since 2020-12-25 20:01:43
*/
public interface WeworkTeacherFriendRecordDao extends BaseDao<WeworkTeacherFriendRecord> {
List<AppletRecordDTO> getAggrStatis(HashMap<String, Object> paramMap);
}
package com.pcloud.book.group.dao.impl;
import com.pcloud.book.applet.dto.AppletRecordDTO;
import com.pcloud.book.group.entity.WeworkTeacherFriendRecord;
import com.pcloud.book.group.dao.WeworkTeacherFriendRecordDao;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import org.apache.ibatis.annotations.Param;
import java.util.HashMap;
import java.util.List;
/**
* 点击加老师好友记录表(WeworkTeacherFriendRecord)表数据库访问层
*
* @author makejava
* @since 2020-12-25 20:01:43
*/
@Repository("weworkTeacherFriendRecordDaoImpl")
public class WeworkTeacherFriendRecordDaoImpl extends BaseDaoImpl<WeworkTeacherFriendRecord> implements WeworkTeacherFriendRecordDao {
@Override
public List<AppletRecordDTO> getAggrStatis(HashMap<String, Object> paramMap) {
return this.sqlSessionTemplate.selectList(getStatement("getAggrStatis"), paramMap);
}
}
package com.pcloud.book.group.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
public class WxWorkTeacherDTO {
@ApiModelProperty("id")
private Long id;
/**
* 企业微信二维码
*/
@ApiModelProperty("企业微信二维码")
private String qrcode;
/**
* 真实姓名
*/
@ApiModelProperty("真实姓名")
private String realName;
/**
* 昵称
*/
@ApiModelProperty("昵称")
private String nickname;
/**
* 头像地址
*/
@ApiModelProperty("头像地址")
private String avatar;
/**
* 描述
*/
@ApiModelProperty("描述")
private String desc;
/**
* 图文素材标题名称
*/
@ApiModelProperty("图文素材标题名称")
private String title;
/**
* 客服类型:1:苏老师 2:张哥哥
*/
@ApiModelProperty("客服类型:1:苏老师 2:张哥哥")
private Integer teacherType;
/**
* 开关状态
*/
@ApiModelProperty("开关状态")
private Integer isOpen;
/**
* 图文素材地址
*/
@ApiModelProperty("图文素材地址")
private String materialUrl;
/**
* 图文素材媒体ID
*/
@ApiModelProperty("图文素材媒体ID")
private String mediaId;
/**
* 公众号ID
*/
@ApiModelProperty("公众号ID")
private Long accountId;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@ApiModelProperty("创建时间")
private Date createTime;
/**
* 更新时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@ApiModelProperty("更新时间")
private Date updateTime;
}
package com.pcloud.book.group.entity;
import java.util.Date;
import java.math.BigDecimal;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.entity.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 点击加老师好友记录表(WeworkTeacherFriendRecord)实体类
*
* @author makejava
* @since 2020-12-25 20:01:43
*/
@Data
public class WeworkTeacherFriendRecord extends BaseEntity {
private static final long serialVersionUID = 326531946857412022L;
@ApiModelProperty("点击加老师好友记录表id")
private Long id;
@ApiModelProperty("用户id")
private Long wechatUserId;
@ApiModelProperty("老师id")
private Long weworkTeacherId;
@ApiModelProperty("添加时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@ApiModelProperty("添加日期")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createDate;
}
package com.pcloud.book.group.facade.impl;
import com.pcloud.book.group.entity.WeworkTeacherFriendRecord;
import com.pcloud.book.group.biz.WeworkTeacherFriendRecordBiz;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.permission.PermissionException;
import com.pcloud.common.utils.SessionUtil;
import com.pcloud.common.utils.cookie.Cookie;
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import io.swagger.annotations.ApiOperation;
/**
* 点击加老师好友记录表(WeworkTeacherFriendRecord)表控制层
*
* @author makejava
* @since 2020-12-25 20:01:43
*/
@RestController("weworkTeacherFriendRecordFacade")
@RequestMapping("weworkTeacherFriendRecord")
public class WeworkTeacherFriendRecordFacade {
@Autowired
private WeworkTeacherFriendRecordBiz weworkTeacherFriendRecordBiz;
@ApiOperation("通过主键查询单条数据")
@GetMapping("getById")
public ResponseDto<?> getById(@RequestHeader("token") String token, @RequestParam Long id) throws BizException, PermissionException {
SessionUtil.getToken4Redis(token);
return new ResponseDto<>(weworkTeacherFriendRecordBiz.getById(id));
}
@ApiOperation("分页查询")
@GetMapping("getList")
public ResponseDto<?> getList(@RequestHeader("token") String token,
@RequestParam(value = "currentPage", defaultValue = "0") Integer currentPage,
@RequestParam(value = "numPerPage", defaultValue = "10") Integer numPerPage)
throws BizException, PermissionException {
SessionUtil.getToken4Redis(token);
return new ResponseDto<>(weworkTeacherFriendRecordBiz.getList(currentPage, numPerPage));
}
@ApiOperation("新增")
@PostMapping("insert")
public ResponseDto<?> insert(@CookieValue("userInfo") String userInfo, @RequestBody WeworkTeacherFriendRecord weworkTeacherFriendRecord)
throws BizException, PermissionException {
Long wechatUserId = Cookie.getId(userInfo,Cookie._WECHAT_USER_ID);
weworkTeacherFriendRecord.setWechatUserId(wechatUserId);
return new ResponseDto<>(weworkTeacherFriendRecordBiz.insert(weworkTeacherFriendRecord));
}
@ApiOperation("更新")
@PostMapping("update")
public ResponseDto<?> update(@RequestHeader("token") String token,@RequestBody WeworkTeacherFriendRecord weworkTeacherFriendRecord) throws BizException, PermissionException {
SessionUtil.getToken4Redis(token);
weworkTeacherFriendRecordBiz.update(weworkTeacherFriendRecord);
return new ResponseDto<>();
}
@ApiOperation("删除")
@GetMapping("deleteById")
public ResponseDto<?> deleteById(@RequestHeader("token") String token, @RequestParam Long id) throws BizException, PermissionException {
SessionUtil.getToken4Redis(token);
if (null == id) {
throw BookBizException.PARAM_DELETION;
}
weworkTeacherFriendRecordBiz.deleteById(id);
return new ResponseDto<>();
}
}
package com.pcloud.book.mapper.clickhouse;
import com.pcloud.book.applet.dto.AppletRecordDTO;
import com.pcloud.book.applet.entity.AppletRecord;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
@Mapper
@Component
public interface AppletRecordCHMapper {
void batchInsert(List<AppletRecord> list);
List<AppletRecordDTO> getAggrStatis(Map<String, Object> paramMap);
void optimize();
}
<?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.pcloud.book.mapper.clickhouse.AppletRecordCHMapper">
<insert id="batchInsert">
INSERT INTO applet_record (
id,
wechat_user_id,
record_type,
rights_setting_id,
book_id,
channel_id,
adviser_id,
from_id,
from_name,
type_code,
account_setting_id,
create_time,
create_date,
is_delete,
link_url
) VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.id},
#{item.wechatUserId},
#{item.recordType},
#{item.rightsSettingId},
#{item.bookId},
#{item.channelId},
#{item.adviserId},
#{item.fromId},
#{item.fromName},
#{item.typeCode},
#{item.accountSettingId},
#{item.createTime},
#{item.createDate},
#{item.isDelete},
#{item.linkUrl}
)
</foreach>
</insert>
<select id="getAggrStatis" resultType="com.pcloud.book.applet.dto.AppletRecordDTO">
SELECT record_type recordType, from_id fromId, any(from_name) fromName, any(link_url) linkUrl,
COUNT(id) clickCount, COUNT(DISTINCT wechat_user_id) userCount
FROM applet_record
<where>
<if test="recordTypes != null and recordTypes.size() > 0">
(
</if>
<foreach collection="recordTypes" item="item" separator=" OR " open="(" close=")">
<if test="item.recordType != null">
record_type = #{item.recordType}
</if>
<if test="item.typeCodes != null and item.typeCodes.size() > 0">
AND type_code IN
<foreach collection="item.typeCodes" item="typeCode" separator="," open="(" close=")">
#{typeCode}
</foreach>
</if>
</foreach>
<if test="recordTypes != null and recordTypes.size() > 0">
)
</if>
<if test="beginDate != null">
AND creaete_time BETWEEN #{beginDate} AND #{endDate}
</if>
</where>
GROUP BY record_type, from_id
ORDER BY userCount DESC
LIMIT #{offset},#{limit}
</select>
<update id="optimize">
optimize table applet_record
</update>
</mapper>
......@@ -12,6 +12,7 @@
<result column="adviser_id" property="adviserId" jdbcType="BIGINT"/>
<result column="from_id" property="fromId" jdbcType="BIGINT"/>
<result column="from_name" property="fromName" jdbcType="VARCHAR"/>
<result column="type_code" property="typeCode" jdbcType="VARCHAR"/>
<result column="account_setting_id" property="accountSettingId" jdbcType="BIGINT"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
<result column="create_date" property="createDate" jdbcType="DATE"/>
......@@ -29,6 +30,7 @@
<result column="adviser_id" property="adviserId" jdbcType="BIGINT"/>
<result column="from_id" property="fromId" jdbcType="BIGINT"/>
<result column="from_name" property="fromName" jdbcType="VARCHAR"/>
<result column="type_code" property="typeCode" jdbcType="VARCHAR"/>
<result column="account_setting_id" property="accountSettingId" jdbcType="BIGINT"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
<result column="create_date" property="createDate" jdbcType="DATE"/>
......@@ -37,7 +39,7 @@
</resultMap>
<sql id="Base_Column_List">
id, wechat_user_id, record_type, rights_setting_id, book_id, channel_id, adviser_id, from_id, from_name, account_setting_id,
id, wechat_user_id, record_type, rights_setting_id, book_id, channel_id, adviser_id, from_id, from_name, type_code, account_setting_id,
create_time, create_date, is_delete, link_url
</sql>
......@@ -335,4 +337,41 @@
from_id
</select>
<select id="fixAppletRecordDataSync4CH" parameterType="map" resultMap="BaseResultMap">
SELECT * FROM applet_record WHERE create_date = #{createDate}
</select>
<select id="getHandleAppletRecordTypeCode" resultMap="BaseResultMap4DTO">
SELECT id, record_type, from_id
FROM applet_record
WHERE id > #{lastAppletRecordId}
<if test="recordTypes != null and recordTypes.size() > 0">
AND record_type IN
<foreach collection="recordTypes" item="recordType" open="(" close=")" separator=",">
#{recordType}
</foreach>
</if>
ORDER BY id
LIMIT #{offset},#{limit}
</select>
<update id="batchUpdateTypeCode" parameterType="list">
update
applet_record
<trim prefix="set" suffixOverrides=",">
<trim prefix="type_code =case" suffix="end,">
<foreach collection="list" item="item">
<if test="item.typeCode!=null">
when id=#{item.id} then #{item.typeCode}
</if>
</foreach>
</trim>
</trim>
<where>
<foreach collection="list" separator="or" item="item">
id = #{item.id}
</foreach>
</where>
</update>
</mapper>
<?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.pcloud.book.group.dao.impl.WeworkTeacherFriendRecordDaoImpl">
<resultMap id="BaseResultMap" type="com.pcloud.book.group.entity.WeworkTeacherFriendRecord">
<id column="id" property="id" jdbcType="BIGINT"/>
<result column="wechat_user_id" property="wechatUserId" jdbcType="BIGINT"/>
<result column="wework_teacher_id" property="weworkTeacherId" jdbcType="BIGINT"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
<result column="create_date" property="createDate" jdbcType="DATE"/>
</resultMap>
<sql id="Base_Column_List">
id, wechat_user_id, wework_teacher_id, create_time, create_date
</sql>
<select id="getById" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM wework_teacher_friend_record
WHERE id = #{id}
</select>
<select id="getList" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM wework_teacher_friend_record
</select>
<select id="getAggrStatis" resultType="com.pcloud.book.applet.dto.AppletRecordDTO">
SELECT #{recordType} recordType, wework_teacher_id fromId, COUNT(id) clickCount, COUNT(DISTINCT wechat_user_id) userCount
FROM wework_teacher_friend_record
<where>
<if test="beginDate != null">
create_date BETWEEN #{beginDate} AND #{endDate}
</if>
</where>
GROUP BY wework_teacher_id
ORDER BY clickCount DESC
LIMIT #{offset},#{limit}
</select>
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
INSERT INTO wework_teacher_friend_record(
wechat_user_id,
wework_teacher_id,
create_time,
create_date
) VALUES (
#{wechatUserId, jdbcType=BIGINT},
#{weworkTeacherId, jdbcType=BIGINT},
NOW(),
NOW()
)
</insert>
<insert id="batchInsert">
INSERT INTO wework_teacher_friend_record (
wechat_user_id,
wework_teacher_id,
create_time,
create_date
) VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.wechatUserId, jdbcType=BIGINT},
#{item.weworkTeacherId, jdbcType=BIGINT},
NOW(),
NOW()
)
</foreach>
</insert>
<!--通过主键修改数据-->
<update id="update">
UPDATE wework_teacher_friend_record
<set>
<if test="wechatUserId != null">
wechat_user_id = #{wechatUserId},
</if>
<if test="weworkTeacherId != null">
wework_teacher_id = #{weworkTeacherId},
</if>
<if test="createTime != null">
create_time = #{createTime},
</if>
<if test="createDate != null">
create_date = #{createDate},
</if>
</set>
WHERE id = #{id}
</update>
<!--通过主键删除-->
<delete id="deleteById">
DELETE FROM wework_teacher_friend_record where id = #{id}
</delete>
</mapper>
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