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);
}
......@@ -128,8 +128,8 @@ public class AppletRecordBizImpl implements AppletRecordBiz {
@Override
@ParamLog("新增足迹埋点")
@Transactional(rollbackFor = Exception.class)
public Long insert(AppletRecord appletRecord) {
ThreadPoolUtils.APPLET_RECORD.execute(()-> {
insertCheck(appletRecord);
AppletRecordDTO appletRecordDTO = new AppletRecordDTO();
BeanUtils.copyProperties(appletRecord, appletRecordDTO);
......@@ -146,7 +146,7 @@ public class AppletRecordBizImpl implements AppletRecordBiz {
//更新
appletRecordDayServe.setId(appletRecordDayServe4Data.getId());
appletRecordDayServeDao.update(appletRecordDayServe);
}else {
} else {
//新增
appletRecordDayServeDao.insert(appletRecordDayServe);
}
......@@ -156,10 +156,11 @@ public class AppletRecordBizImpl implements AppletRecordBiz {
//更新
appletRecordServe.setId(appletRecordServe4Data.getId());
appletRecordServeDao.update(appletRecordServe);
}else {
} 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