Commit 3b86b71b by 田超

Merge branch 'feature/1004185' into 'master'

feat: [1004185] banner统计

See merge request rays/pcloud-book!1172
parents 0b8ac8f4 83e94922
......@@ -119,4 +119,9 @@ public interface AppletService {
@ApiOperation("停止更新 applet_record.type_code 旧数据")
@GetMapping("stopHandleAppletRecordTypeCode")
void stopHandleAppletRecordTypeCode();
@ApiOperation("定时任务更新banner上下架状态")
@GetMapping("autoChageBannerState")
void autoChageBannerState(@RequestParam("id") Long id,
@RequestParam("showState") Integer showState);
}
......@@ -400,4 +400,9 @@ public class BookConstant {
public static final String wxOfficialAccountUrl = "http://m-qun.umeng100.com/uqun/growth/luopan/client/business/operationData/wxOfficialAccountUrl/list.ajax";
public static final Long visitorWechatUserId = 86045917L;
public static final String JOB_NAME_BANNER_PUT_ON = "BannerAutoPutOn";
public static final String JOB_NAME_BANNER_PUT_OFF = "BannerAutoPutOff";
}
package com.pcloud.book.applet.biz;
import com.pcloud.book.applet.dto.AppletBannerDTO;
import com.pcloud.book.applet.dto.AppletBannerTrendDTO;
import com.pcloud.book.applet.entity.AppletBanner;
import com.pcloud.common.page.PageBeanNew;
import java.text.ParseException;
import java.util.List;
/**
* 小程序banner
*/
......@@ -52,4 +56,23 @@ public interface AppletBannerBiz {
PageBeanNew<AppletBannerDTO> listBanner4Wechat(Integer currentPage, Integer numPerPage, Boolean showState, Long officialAccountsId, Long wechatUserId);
void bannerClickRecord(Long wechatUserId, Long bannerId);
/**
*
* @param
* @param currentPage
* @param numPerPage
* @param agentId
* @param inHour
* @param id
* @return
*/
List<AppletBannerTrendDTO> getBannerRecordTrend(String currentPage, String numPerPage, Long agentId, Boolean inHour, Long id) throws ParseException;
/**
* 定时任务更新banner上下架状态
* @param id
* @param showState
*/
void autoChageBannerState(Long id, Integer showState);
}
......@@ -2,6 +2,7 @@ package com.pcloud.book.applet.biz.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.pcloud.appcenter.app.dto.AppDto;
import com.pcloud.book.applet.biz.AppletBannerBiz;
......@@ -10,6 +11,7 @@ import com.pcloud.book.applet.dao.AppletBannerDao;
import com.pcloud.book.applet.dao.AppletUserBookcaseDao;
import com.pcloud.book.applet.dto.AppletBannerDTO;
import com.pcloud.book.applet.dto.AppletBannerStats;
import com.pcloud.book.applet.dto.AppletBannerTrendDTO;
import com.pcloud.book.applet.dto.AppletNewsDTO;
import com.pcloud.book.applet.dto.ServeItemInfoDTO;
import com.pcloud.book.applet.entity.AppletBanner;
......@@ -23,18 +25,31 @@ import com.pcloud.book.consumer.channel.QrcodeSceneConsr;
import com.pcloud.book.consumer.resource.ProductConsr;
import com.pcloud.book.group.tools.SendWeixinRequestTools;
import com.pcloud.book.rightsSetting.biz.RightsSettingBiz;
import com.pcloud.book.util.common.YesOrNoEnums;
import com.pcloud.channelcenter.wechat.dto.AccountSettingDto;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.page.PageParam;
import com.pcloud.common.utils.DateUtils;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.ParamChecker;
import com.pcloud.common.utils.ServeLinkUtils;
import com.pcloud.facade.quartz.entity.CallBackParam;
import com.pcloud.facade.quartz.entity.ScheduleJob;
import com.pcloud.facade.quartz.service.ScheduleService;
import com.pcloud.resourcecenter.product.dto.ProductDto;
import com.pcloud.wechatgroup.base.exception.WechatGroupBizException;
import lombok.extern.slf4j.Slf4j;
import org.codehaus.jackson.JsonParseException;
import org.quartz.SchedulerException;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
......@@ -44,6 +59,9 @@ import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.stream.Collectors;
import static com.pcloud.book.book.constant.BookConstant.JOB_NAME_BANNER_PUT_OFF;
import static com.pcloud.book.book.constant.BookConstant.JOB_NAME_BANNER_PUT_ON;
/**
* 小程序banner
*/
......@@ -67,6 +85,8 @@ public class AppletBannerBizImpl implements AppletBannerBiz {
private RightsSettingBiz rightsSettingBiz;
@Autowired
private QrcodeSceneConsr qrcodeSceneConsr;
@Autowired
private ScheduleService scheduleService;
@Override
......@@ -81,7 +101,44 @@ public class AppletBannerBizImpl implements AppletBannerBiz {
appletBanner.setSeq(seq+1);
appletBanner.setShowState(false);
appletBannerDao.insert(appletBanner);
return appletBanner.getId();
Long id = appletBanner.getId();
if (null != appletBanner.getStartTime()) {
addSimpleJob4Banner(id, JOB_NAME_BANNER_PUT_ON + id,appletBanner.getStartTime(), YesOrNoEnums.YES.getValue());
}
if (null != appletBanner.getEndTime()) {
addSimpleJob4Banner(id, JOB_NAME_BANNER_PUT_OFF + id,appletBanner.getEndTime(), YesOrNoEnums.NO.getValue());
}
return id;
}
private void addSimpleJob4Banner(Long id, String jobName, Date startTime, Integer showState) {
Long second = (startTime.getTime() - System.currentTimeMillis()) / 1000;
ScheduleJob scheduleJob = new ScheduleJob();
scheduleJob.setJobGroup("book");
scheduleJob.setStartTimeFormat("ss");
scheduleJob.setStartTime(second.intValue());
scheduleJob.setRepeatCount(0);
scheduleJob.setIntervalTime(0);
scheduleJob.setIntervalTimeFormat("dd");
scheduleJob.setJobName(jobName);
CallBackParam callBackParam = new CallBackParam();
Map<String, Object> paramMap = new HashMap<>();
//定时任务调用时用到的参数
paramMap.put("id", id);
paramMap.put("showState", showState);
callBackParam.setParamMap(paramMap);
callBackParam.setMethodName("autoChageBannerState");
callBackParam.setBeanName("appletService");
Map<String, Object> scheduleMap = new HashMap<>();
scheduleMap.put("scheduleJob", scheduleJob);
scheduleMap.put("callBackParam", callBackParam);
try {
scheduleService.addSimpleJob(scheduleMap);
} catch (Exception e) {
log.error("设置定时任务失败" + e.getMessage(), e);
throw new BookBizException(BookBizException.ERROR, "定时任务设置失败");
}
}
@Override
......@@ -93,10 +150,36 @@ public class AppletBannerBizImpl implements AppletBannerBiz {
ParamChecker.checkStringIsEmpty(appletBanner.getBannerPic(), "Banner图缺失!");
}
appletBannerDao.update(appletBanner);
Long id = appletBanner.getId();
if (YesOrNoEnums.YES.getValue().equals(appletBanner.getIsTime())) {
try {
scheduleService.deleteJob(JOB_NAME_BANNER_PUT_ON + id, "book");
scheduleService.deleteJob(JOB_NAME_BANNER_PUT_OFF + id, "book");
} catch (SchedulerException e) {
log.warn("删除banner定时任务:{}失败", appletBanner.getId());
} catch (JsonParseException e) {
log.warn("删除banner定时任务:{}失败", appletBanner.getId());
}
if (null != appletBanner.getStartTime() && DateUtil.compare(new Date(), appletBanner.getStartTime()) < 0) {
addSimpleJob4Banner(id, JOB_NAME_BANNER_PUT_ON + id,appletBanner.getStartTime(), YesOrNoEnums.YES.getValue());
}
if (null != appletBanner.getEndTime() && DateUtil.compare(new Date(), appletBanner.getEndTime()) < 0) {
addSimpleJob4Banner(id, JOB_NAME_BANNER_PUT_OFF + id,appletBanner.getEndTime(), YesOrNoEnums.NO.getValue());
}
}
}
@Override
public void deleteBanner(Long id) {
try {
scheduleService.deleteJob(JOB_NAME_BANNER_PUT_ON + id, "book");
scheduleService.deleteJob(JOB_NAME_BANNER_PUT_OFF + id, "book");
} catch (SchedulerException e) {
log.warn("删除banner定时任务:{}失败", id);
} catch (JsonParseException e) {
log.warn("删除banner定时任务:{}失败", id);
}
appletBannerDao.deleteById(id);
}
......@@ -284,13 +367,88 @@ public class AppletBannerBizImpl implements AppletBannerBiz {
if (Objects.isNull(banner)) {
appletBannerRecordMapper.insert(AppletBannerRecord.builder()
.bannerId(bannerId).createTime(new Date()).wechatUserId(wechatUserId).build());
.bannerId(bannerId).createTime(new Date()).wechatUserId(wechatUserId).createHour(DateUtil.thisHour(Boolean.TRUE)).createDate(DateUtil.today()).build());
} else {
AppletBannerRecord record = AppletBannerRecord.builder()
.createTime(new Date()).wechatUserId(wechatUserId)
.bannerId(bannerId).jumpType(banner.getJumpType())
.serveId(banner.getServeId()).serveType(banner.getServeType()).build();
.serveId(banner.getServeId()).serveType(banner.getServeType()).
createHour(DateUtil.thisHour(Boolean.TRUE)).
createDate(DateUtil.today()).build();
appletBannerRecordMapper.insert(record);
}
}
@Override
public List<AppletBannerTrendDTO> getBannerRecordTrend(String startDate, String endDate, Long agentId, Boolean inHour, Long id) throws ParseException {
List<AppletBannerTrendDTO> trendDTOList = new ArrayList<>();
if (inHour) {
//每小时发送趋势
Integer startHour = DateUtil.hour(new Date(), Boolean.TRUE);
String startTime = DateUtil.yesterday().toStringDefaultTimeZone() + " " + startHour + ":00:00";
String endTime = DateUtil.today() + " " + startHour + ":00:00";
trendDTOList = appletBannerRecordMapper.getBannerRecordTrendByHour(startTime,endTime, id);
List<Integer> hours = trendDTOList.stream().filter(s -> s.getHour() != null).map(AppletBannerTrendDTO::getHour).collect(Collectors.toList());
List<Integer> hourAll = new ArrayList<>();
for (int i = 0; i <= 23; i++) {
hourAll.add(i);
}
for (Integer hour : hourAll) {
if (!hours.contains(hour)) {
AppletBannerTrendDTO appletBannerTrendDTO = new AppletBannerTrendDTO();
appletBannerTrendDTO.setHour(hour);
appletBannerTrendDTO.setPV(0);
appletBannerTrendDTO.setUV(0);
trendDTOList.add(appletBannerTrendDTO);
}
}
trendDTOList.sort(Comparator.comparing(AppletBannerTrendDTO::getHour));
List<AppletBannerTrendDTO> list4YesterDay = trendDTOList.stream().filter(e -> e.getHour() >= startHour).collect(Collectors.toList());
List<AppletBannerTrendDTO> list4toDay = trendDTOList.stream().filter(e -> e.getHour() < startHour).collect(Collectors.toList());
list4YesterDay.addAll(list4toDay);
trendDTOList = list4YesterDay;
} else {
//日发送趋势
trendDTOList = appletBannerRecordMapper.getBannerRecordTrendByDay(startDate, endDate, id);
List<String> dates = trendDTOList.stream().filter(s -> s.getDate() != null).map(AppletBannerTrendDTO::getDate).collect(Collectors.toList());
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
//填充数据为0的日期
long start = formatter.parse(startDate).getTime();
long end = formatter.parse(endDate).getTime();
long days = ((end - start) / (1000 * 3600 * 24));
if (days < 0) {
throw new WechatGroupBizException(WechatGroupBizException.ERROR, "选取时间错误");
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(formatter.parse(startDate));
List<String> daysAll = new ArrayList<>();
for (int i = 0; i <= days; i++) {
daysAll.add(formatter.format(calendar.getTime()));
calendar.add(Calendar.DAY_OF_MONTH, 1);
}
for (String day : daysAll) {
if (!dates.contains(day)) {
AppletBannerTrendDTO appletBannerTrendDTO = new AppletBannerTrendDTO();
appletBannerTrendDTO.setDate(day);
appletBannerTrendDTO.setPV(0);
appletBannerTrendDTO.setUV(0);
trendDTOList.add(appletBannerTrendDTO);
}
}
trendDTOList.sort(Comparator.comparing(AppletBannerTrendDTO::getDate));
}
return trendDTOList;
}
@Override
public void autoChageBannerState(Long id, Integer showState) {
if (null == id || null == showState) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "book定时任务更新banner上下架状态autoChageBannerState:id或showState为空");
}
AppletBanner appletBanner = new AppletBanner();
appletBanner.setId(id);
appletBanner.setShowState(YesOrNoEnums.YES.getValue().equals(showState) ? Boolean.TRUE : Boolean.FALSE);
appletBannerDao.update(appletBanner);
}
}
......@@ -128,38 +128,39 @@ public class AppletRecordBizImpl implements AppletRecordBiz {
@Override
@ParamLog("新增足迹埋点")
@Transactional(rollbackFor = Exception.class)
public Long insert(AppletRecord appletRecord) {
insertCheck(appletRecord);
AppletRecordDTO appletRecordDTO = new AppletRecordDTO();
BeanUtils.copyProperties(appletRecord, appletRecordDTO);
fillTypeCode(Lists.newArrayList(appletRecordDTO));
BeanUtils.copyProperties(appletRecordDTO, appletRecord);
appletRecordDao.insert(appletRecord);
//判断日表是否有数据
AppletRecordDayServe appletRecordDayServe = new AppletRecordDayServe();
BeanUtils.copyProperties(appletRecord, appletRecordDayServe);
AppletRecordServe appletRecordServe = new AppletRecordServe();
BeanUtils.copyProperties(appletRecord, appletRecordServe);
AppletRecordDayServe appletRecordDayServe4Data = appletRecordDayServeDao.getByTypeAndServeId(appletRecord.getWechatUserId(), appletRecord.getRecordType(), appletRecord.getFromId(), DateUtil.today());
if (null != appletRecordDayServe4Data) {
//更新
appletRecordDayServe.setId(appletRecordDayServe4Data.getId());
appletRecordDayServeDao.update(appletRecordDayServe);
}else {
//新增
appletRecordDayServeDao.insert(appletRecordDayServe);
}
//判断总表是否有数据
AppletRecordServe appletRecordServe4Data = appletRecordServeDao.getByTypeAndServeId(appletRecord.getWechatUserId(), appletRecord.getRecordType(), appletRecord.getFromId());
if (null != appletRecordServe4Data) {
//更新
appletRecordServe.setId(appletRecordServe4Data.getId());
appletRecordServeDao.update(appletRecordServe);
}else {
//新增
appletRecordServeDao.insert(appletRecordServe);
}
ThreadPoolUtils.APPLET_RECORD.execute(()-> {
insertCheck(appletRecord);
AppletRecordDTO appletRecordDTO = new AppletRecordDTO();
BeanUtils.copyProperties(appletRecord, appletRecordDTO);
fillTypeCode(Lists.newArrayList(appletRecordDTO));
BeanUtils.copyProperties(appletRecordDTO, appletRecord);
appletRecordDao.insert(appletRecord);
//判断日表是否有数据
AppletRecordDayServe appletRecordDayServe = new AppletRecordDayServe();
BeanUtils.copyProperties(appletRecord, appletRecordDayServe);
AppletRecordServe appletRecordServe = new AppletRecordServe();
BeanUtils.copyProperties(appletRecord, appletRecordServe);
AppletRecordDayServe appletRecordDayServe4Data = appletRecordDayServeDao.getByTypeAndServeId(appletRecord.getWechatUserId(), appletRecord.getRecordType(), appletRecord.getFromId(), DateUtil.today());
if (null != appletRecordDayServe4Data) {
//更新
appletRecordDayServe.setId(appletRecordDayServe4Data.getId());
appletRecordDayServeDao.update(appletRecordDayServe);
} else {
//新增
appletRecordDayServeDao.insert(appletRecordDayServe);
}
//判断总表是否有数据
AppletRecordServe appletRecordServe4Data = appletRecordServeDao.getByTypeAndServeId(appletRecord.getWechatUserId(), appletRecord.getRecordType(), appletRecord.getFromId());
if (null != appletRecordServe4Data) {
//更新
appletRecordServe.setId(appletRecordServe4Data.getId());
appletRecordServeDao.update(appletRecordServe);
} else {
//新增
appletRecordServeDao.insert(appletRecordServe);
}
});
return appletRecord.getId();
}
......
......@@ -226,9 +226,9 @@ public class AppletUserBookcaseBizImpl implements AppletUserBookcaseBiz {
if (ListUtils.isEmpty(pageBeanNew.getRecordList())) {
return new PageBeanNew<>(currentPage, numPerPage, pageBeanNew.getTotalCount(), new ArrayList<>());
}
fillTempletName(pageBeanNew.getRecordList());
//fillTempletName(pageBeanNew.getRecordList());
fillLabelNames(pageBeanNew.getRecordList());
fillRightsSettingAndResourceCount(pageBeanNew.getRecordList());
//fillRightsSettingAndResourceCount(pageBeanNew.getRecordList());
JedisClusterUtils.hset2Json(key, field, pageBeanNew.getRecordList());
JedisClusterUtils.set(countKey, String.valueOf(pageBeanNew.getTotalCount()));
JedisClusterUtils.expire(key, 60);
......
package com.pcloud.book.applet.dao;
import com.pcloud.book.applet.dto.AppletBannerTrendDTO;
import com.pcloud.book.applet.entity.AppletBanner;
import com.pcloud.common.core.dao.BaseDao;
import java.util.List;
public interface AppletBannerDao extends BaseDao<AppletBanner> {
/**
......@@ -10,4 +13,8 @@ public interface AppletBannerDao extends BaseDao<AppletBanner> {
* @return
*/
Integer getMaxSeq(Long agentId);
List<AppletBannerTrendDTO> getBannerRecordTrendByHour(String createDate);
List<AppletBannerTrendDTO> getSendMessageTrendByDay(String startDate, String endDate);
}
package com.pcloud.book.applet.dao.impl;
import com.pcloud.book.applet.dao.AppletBannerDao;
import com.pcloud.book.applet.dto.AppletBannerTrendDTO;
import com.pcloud.book.applet.entity.AppletBanner;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
......@@ -17,4 +19,17 @@ public class AppletBannerDaoImpl extends BaseDaoImpl<AppletBanner> implements Ap
map.put("agentId", agentId);
return getSessionTemplate().selectOne(getStatement("getMaxSeq"), map);
}
@Override
public List<AppletBannerTrendDTO> getBannerRecordTrendByHour(String createDate) {
return getSessionTemplate().selectList(getStatement("getBannerRecordTrendByHour"), createDate);
}
@Override
public List<AppletBannerTrendDTO> getSendMessageTrendByDay(String startDate, String endDate) {
Map<String, String> paramMap = new HashMap<>();
paramMap.put("startDate",startDate);
paramMap.put("endDate",endDate);
return getSessionTemplate().selectList(getStatement("getSendMessageTrendByDay"), paramMap);
}
}
package com.pcloud.book.applet.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.dto.BaseDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
@EqualsAndHashCode(callSuper = true)
@Data
@ApiModel("小程序banner")
......@@ -46,4 +49,18 @@ public class AppletBannerDTO extends BaseDto {
@ApiModelProperty("咨询具体信息")
private ServeItemInfoDTO appItem;
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
@ApiModelProperty("上架时间")
private Date startTime;
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
@ApiModelProperty("下架时间")
private Date endTime;
}
package com.pcloud.book.applet.dto;
import lombok.Data;
@Data
public class AppletBannerTrendDTO {
/**
* 日期
*/
private String date;
/**
* 小时
*/
private Integer hour;
/**
* 消息量
*/
private Integer UV;
/**
* 消息量
*/
private Integer PV;
}
package com.pcloud.book.applet.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.entity.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
@EqualsAndHashCode(callSuper = true)
@Data
@ApiModel("小程序banner")
......@@ -41,4 +44,23 @@ public class AppletBanner extends BaseEntity {
@ApiModelProperty("作品/应用/咨询的类型")
private Integer serveType;
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
@ApiModelProperty("上架时间")
private Date startTime;
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
@ApiModelProperty("下架时间")
private Date endTime;
@ApiModelProperty("更新banner是否涉及定时任务")
private Integer isTime;
}
......@@ -58,4 +58,14 @@ public class AppletBannerRecord implements Serializable {
private Integer jumpType;
private static final long serialVersionUID = 1L;
/**
* 创建小时
*/
private Integer createHour;
/**
* 创建日期
*/
private String createDate;
}
\ No newline at end of file
......@@ -9,6 +9,7 @@ import com.pcloud.book.applet.biz.AppletUserBookcaseBiz;
import com.pcloud.book.applet.dto.AddBookParamDTO;
import com.pcloud.book.applet.dto.AnswerSubscribeDTO;
import com.pcloud.book.applet.dto.AppletBannerDTO;
import com.pcloud.book.applet.dto.AppletBannerTrendDTO;
import com.pcloud.book.applet.dto.AppletBooklistClassifyDTO;
import com.pcloud.book.applet.dto.AppletBooklistDTO;
import com.pcloud.book.applet.dto.AppletNewsClassifyDTO;
......@@ -45,6 +46,7 @@ import com.pcloud.common.utils.SessionUtil;
import com.pcloud.common.utils.cookie.Cookie;
import com.pcloud.common.utils.string.StringUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -61,6 +63,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import java.text.ParseException;
import java.util.List;
import java.util.Map;
......@@ -324,6 +327,19 @@ public class AppletHomeFacade {
}
@ApiOperation("banner列表")
@GetMapping("getBannerRecordTrend")
public ResponseDto<List<AppletBannerTrendDTO>> getBannerRecordTrend(
@RequestHeader("token") String token,
@RequestParam("inHour") Boolean inHour,
@RequestParam(value = "startDate", required = false) String startDate,
@RequestParam(value = "endDate", required = false) String endDate,
@RequestParam(value = "id", required = false) Long id) throws PermissionException, ParseException {
Map<String, Object> map = SessionUtil.getToken4Redis(token);
Long agentId = (Long) map.get(SessionUtil.RAY_AGENT_ID);
return new ResponseDto<>(appletBannerBiz.getBannerRecordTrend(startDate, endDate, agentId, inHour,id));
}
@ApiOperation("banner列表")
@GetMapping("listBanner")
public ResponseDto<PageBeanNew<AppletBannerDTO>> listBanner(
@RequestHeader("token") String token,
......
package com.pcloud.book.applet.mapper;
import com.pcloud.book.applet.dto.AppletBannerStats;
import com.pcloud.book.applet.dto.AppletBannerTrendDTO;
import com.pcloud.book.applet.entity.AppletBannerRecord;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
......@@ -25,4 +26,7 @@ public interface AppletBannerRecordMapper {
List<AppletBannerStats> getBannerPVUV(@Param("bannerIds") List<Long> bannerIds);
List<AppletBannerTrendDTO> getBannerRecordTrendByHour(@Param("startTime") String startTime, @Param("endTime")String endTime, @Param("id") Long id);
List<AppletBannerTrendDTO> getBannerRecordTrendByDay(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("id")Long id);
}
\ No newline at end of file
......@@ -2,6 +2,7 @@ package com.pcloud.book.applet.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.pcloud.book.applet.biz.AnswerSubscribeBiz;
import com.pcloud.book.applet.biz.AppletBannerBiz;
import com.pcloud.book.applet.biz.AppletBooklistBiz;
import com.pcloud.book.applet.biz.AppletBookClassifyBiz;
import com.pcloud.book.applet.biz.AppletNewsBiz;
......@@ -78,6 +79,8 @@ public class AppletServiceImpl implements AppletService {
private AppletRecordBiz appletRecordBiz;
@Autowired
private AppletRecordAggrStatisBiz appletRecordAggrStatisBiz;
@Autowired
private AppletBannerBiz appletBannerBiz;
@Override
......@@ -213,4 +216,12 @@ public class AppletServiceImpl implements AppletService {
public void stopHandleAppletRecordTypeCode(){
appletRecordBiz.stopHandleAppletRecordTypeCode();
}
@Override
@GetMapping("autoChageBannerState")
public void autoChageBannerState(@RequestParam("id") Long id,
@RequestParam("showState") Integer showState) {
appletBannerBiz.autoChageBannerState(id, showState);
}
}
......@@ -64,4 +64,8 @@ public class ThreadPoolUtils {
public static final ExecutorService RMALL_SIGN_IN = new ThreadPoolExecutor(8,8,0L, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(), new ThreadFactoryBuilder().setNameFormat("rmall_sign_in-%d").build(), new ThreadPoolExecutor.CallerRunsPolicy());
public static final ExecutorService APPLET_RECORD = new ThreadPoolExecutor(8,8,0L, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(), new ThreadFactoryBuilder().setNameFormat("applet_record-%d").build(), new ThreadPoolExecutor.CallerRunsPolicy());
}
......@@ -14,11 +14,13 @@
<result column="serve_id" jdbcType="BIGINT" property="serveId"/>
<result column="serve_type" jdbcType="TINYINT" property="serveType"/>
<result column="fill_type" jdbcType="TINYINT" property="fillType"/>
<result column="start_time" jdbcType="TIMESTAMP" property="startTime"/>
<result column="end_time" jdbcType="TIMESTAMP" property="endTime"/>
</resultMap>
<sql id="Base_Column_List">
id, banner_pic, jump_type, jump_url, seq, show_state, create_time, update_time, agent_id,
serve_id, serve_type, fill_type
serve_id, serve_type, fill_type, start_time, end_time
</sql>
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.pcloud.book.applet.entity.AppletBanner"
......@@ -58,6 +60,12 @@
<if test="fillType != null">
fill_type,
</if>
<if test="startTime != null">
start_time,
</if>
<if test="endTime != null">
end_time,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="bannerPic != null">
......@@ -93,6 +101,12 @@
<if test="fillType != null">
#{fillType,jdbcType=BOOLEAN},
</if>
<if test="startTime != null">
#{startTime},
</if>
<if test="endTime != null">
#{endTime},
</if>
</trim>
</insert>
......@@ -130,6 +144,12 @@
<if test="fillType != null">
fill_type = #{fillType,jdbcType=BOOLEAN},
</if>
<if test="startTime != null">
start_time = #{startTime},
</if>
<if test="endTime != null">
end_time = #{endTime},
</if>
</set>
where id = #{id,jdbcType=BIGINT}
</update>
......@@ -177,5 +197,4 @@
SELECT IFNULL(MAX(seq),0) FROM applet_banner
WHERE agent_id = #{agentId}
</select>
</mapper>
\ No newline at end of file
......@@ -28,10 +28,10 @@
useGeneratedKeys="true">
insert into applet_banner_record (banner_id, create_time, update_time,
wechat_user_id, serve_id, serve_type,
jump_type)
jump_type, create_hour, create_date)
values (#{bannerId,jdbcType=BIGINT}, #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP},
#{wechatUserId,jdbcType=BIGINT}, #{serveId,jdbcType=BIGINT}, #{serveType,jdbcType=TINYINT},
#{jumpType,jdbcType=BOOLEAN})
#{jumpType,jdbcType=BOOLEAN}, #{createHour}, #{createDate})
</insert>
<insert id="insertSelective" keyColumn="id" keyProperty="id"
parameterType="com.pcloud.book.applet.entity.AppletBannerRecord" useGeneratedKeys="true">
......@@ -136,4 +136,42 @@
GROUP BY
t.banner_id
</select>
<select id="getBannerRecordTrendByHour" parameterType="string" resultType="com.pcloud.book.applet.dto.AppletBannerTrendDTO">
SELECT
create_hour hour ,
count(1) PV,
COUNT(DISTINCT wechat_user_id) UV
FROM
`applet_banner_record`
WHERE
create_time >= #{startTime}
AND
create_time &lt; #{endTime}
<if test="id != null">
and banner_id = #{id}
</if>
GROUP BY
create_hour
</select>
<select id="getBannerRecordTrendByDay" parameterType="map" resultType="com.pcloud.book.applet.dto.AppletBannerTrendDTO">
SELECT
create_date date ,
count(1) PV,
COUNT(DISTINCT wechat_user_id) UV
FROM
`applet_banner_record`
WHERE
create_time >= #{startDate}
AND create_time &lt;= #{endDate}
<if test="id != null">
and banner_id = #{id}
</if>
GROUP BY
create_date
</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