Commit 688d5b89 by 田超

Merge branch 'feature/1003917' into 'master'

feat: [1003917] 增加本书服务订阅更新机制

See merge request rays/pcloud-book!1086
parents 276f0c7d 1897f8b1
package com.pcloud.book.applet.biz.impl;
import com.pcloud.book.applet.biz.AnswerSubscribeBiz;
import com.pcloud.book.applet.contants.AppletConstants;
import com.pcloud.book.applet.dao.AnswerSubscribeAdviserDao;
import com.pcloud.book.applet.dao.AnswerSubscribeDao;
import com.pcloud.book.applet.dto.AnswerSubscribeCountDto;
import com.pcloud.book.applet.dto.AnswerSubscribeDTO;
import com.pcloud.book.applet.entity.AnswerSubscribe;
import com.pcloud.book.applet.entity.AnswerSubscribeAdviser;
import com.pcloud.book.applet.enums.AnswerSendStateEnum;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.book.biz.BookBiz;
import com.pcloud.book.book.dto.BookDto;
import com.pcloud.book.consumer.app.AppConsr;
import com.pcloud.book.consumer.message.TemplateConsr;
import com.pcloud.book.consumer.user.AdviserConsr;
import com.pcloud.book.group.biz.BookGroupBiz;
import com.pcloud.book.group.dto.BookServeDTO;
import com.pcloud.book.util.properties.BookProps;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.core.constant.SceneCode;
import com.pcloud.common.core.constant.SendType;
import com.pcloud.common.core.constant.SystemCode;
import com.pcloud.common.core.dto.AppletTemplateMessageDto;
import com.pcloud.common.enums.AppTypeEnum;
import com.pcloud.common.utils.DateUtils;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.string.StringUtil;
......@@ -25,12 +29,10 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
......@@ -53,6 +55,10 @@ public class AnswerSubscribeBizImpl implements AnswerSubscribeBiz {
private BookGroupBiz bookGroupBiz;
@Autowired
private BookBiz bookBiz;
@Autowired
private AdviserConsr adviserConsr;
@Autowired
private AnswerSubscribeAdviserDao answerSubscribeAdviserDao;
@Override
public void answerSubscribe(AnswerSubscribeDTO answerSubscribeDTO) {
......@@ -66,6 +72,8 @@ public class AnswerSubscribeBizImpl implements AnswerSubscribeBiz {
if (!ListUtils.isEmpty(list)) {
return;
}
List<BookServeDTO> serveIds = bookGroupBiz.getBookAndBookGroupServeIds(answerSubscribeDTO.getAdviserId(), answerSubscribeDTO.getBookId(), answerSubscribeDTO.getChannelId());
answerSubscribe.setResourceCount(serveIds.size());
answerSubscribeDao.insert(answerSubscribe);
}
......@@ -82,100 +90,133 @@ public class AnswerSubscribeBizImpl implements AnswerSubscribeBiz {
if (!ListUtils.isEmpty(list)) {
state = true;
}
Boolean hasAnswer = hasAnswer(answerSubscribe.getBookId(), answerSubscribe.getAdviserId(), answerSubscribe.getChannelId());
Map<String, Object> map = new HashMap<>();
map.put("subscribeState", state);
map.put("hasAnswer", hasAnswer);
return map;
}
private Boolean hasAnswer(Long bookId, Long adviserId, Long channelId){
//默认有答案
Boolean hasAnswer = true;
List<BookServeDTO> bookServeVOS = bookGroupBiz.getBookAndBookGroupServeIds(adviserId, bookId, channelId);
bookGroupBiz.fillBookServe(bookServeVOS);
bookGroupBiz.removeCanNotBuy(bookServeVOS);
List<BookServeDTO> answerList = new ArrayList<>();
if (!ListUtils.isEmpty(bookServeVOS)){
answerList = bookServeVOS.stream().
filter(s -> AppTypeEnum.ANSWER.value.equals(s.getFromType()) || s.getServeName().contains("答案")).collect(Collectors.toList());
}
if (ListUtils.isEmpty(answerList)) {
if ("pro".equals(BookProps.getSystemEnv()) && AppletConstants.NO_ANSWER_BOOK.contains(bookId)) {
hasAnswer = false;
} else if (!"pro".equals(BookProps.getSystemEnv())){
hasAnswer = false;
}
}
return hasAnswer;
}
@Override
@ParamLog("发送答案订阅小程序模板消息")
public void sendAppletMsg4Answer() {
//待发送消息的书刊
List<AnswerSubscribe> bookList = answerSubscribeDao.getBookBySendState(AnswerSendStateEnum.wait_send.code);
if (ListUtils.isEmpty(bookList)) {
return;
}
if (!ListUtils.isEmpty(bookList)) {
for (AnswerSubscribe answerSubscribeBook : bookList) {
if ("pro".equals(BookProps.getSystemEnv()) && !AppletConstants.NO_ANSWER_BOOK.contains(answerSubscribeBook.getBookId())) {
continue;
}
Long adviserId = answerSubscribeBook.getAdviserId();
Long channelId = answerSubscribeBook.getChannelId();
Long bookId = answerSubscribeBook.getBookId();
AnswerSubscribe subscribe = new AnswerSubscribe();
subscribe.setSendState(AnswerSendStateEnum.wait_send.code);
subscribe.setBookId(answerSubscribeBook.getBookId());
subscribe.setChannelId(answerSubscribeBook.getChannelId());
subscribe.setAdviserId(answerSubscribeBook.getAdviserId());
subscribe.setBookId(bookId);
subscribe.setChannelId(channelId);
subscribe.setAdviserId(adviserId);
List<AnswerSubscribe> userList = answerSubscribeDao.getBySendStateAndBook(subscribe);
if (ListUtils.isEmpty(userList)) {
continue;
}
BookDto bookDto = bookBiz.getBaseById(answerSubscribeBook.getBookId());
BookDto bookDto = bookBiz.getBaseById(bookId);
if (null == bookDto) {
continue;
}
List<BookServeDTO> bookServeVOS = bookGroupBiz.getBookAndBookGroupServeIds(answerSubscribeBook.getAdviserId(), answerSubscribeBook.getBookId(), answerSubscribeBook.getChannelId());
bookGroupBiz.fillBookServe(bookServeVOS);
bookGroupBiz.removeCanNotBuy(bookServeVOS);
if (ListUtils.isEmpty(bookServeVOS)){
continue;
}
List<BookServeDTO> answerList = bookServeVOS.stream().
filter(s -> AppTypeEnum.ANSWER.value.equals(s.getFromType()) || s.getServeName().contains("答案")).collect(Collectors.toList());
if (ListUtils.isEmpty(answerList)) {
List<BookServeDTO> serveIds = bookGroupBiz.getBookAndBookGroupServeIds(adviserId, bookId, channelId);
if (ListUtils.isEmpty(serveIds)){
continue;
}
String bookName = bookDto.getBookName();
for (AnswerSubscribe answerSubscribeUser : userList) {
sendAppletTemplateMsg(answerSubscribeUser.getWechatUserId(), answerSubscribeUser.getAccountSettingId(),
bookDto.getBookName(), answerList.get(0).getServeName());
//更新发送状态
Long wechatUserId = answerSubscribeUser.getWechatUserId();
if (serveIds.size() <= answerSubscribeUser.getResourceCount()) {
//资源无新增,改为订阅未发送状态
answerSubscribeUser.setSendState(AnswerSendStateEnum.subscribe.code);
} else {
//资源有新增,发送消息
Long accountSettingId=answerSubscribeUser.getAccountSettingId();
if (BookProps.getMiniOfficialAccountsId().equals(accountSettingId)){
//小程序消息
this.sendAppletTemplateMsg(wechatUserId, accountSettingId,bookName);
} else {
//公众号消息
this.sendTemplate4Customer(channelId,wechatUserId,bookName);
}
answerSubscribeUser.setSendState(AnswerSendStateEnum.has_send.code);
}
answerSubscribeDao.updateSendState(answerSubscribeUser);
}
}
}
//待发消息的编辑
List<AnswerSubscribeAdviser> adviserList = answerSubscribeAdviserDao.getRecord4Send();
if (!ListUtils.isEmpty(adviserList)){
for (AnswerSubscribeAdviser answerSubscribeAdviser: adviserList){
AnswerSubscribe subscribe = new AnswerSubscribe();
subscribe.setBookId(answerSubscribeAdviser.getBookId());
subscribe.setChannelId(answerSubscribeAdviser.getChannelId());
subscribe.setAdviserId(answerSubscribeAdviser.getAdviserId());
Integer userCount = answerSubscribeDao.getUserCountByBookAdviser(subscribe);
BookDto bookDto = bookBiz.getBaseById(answerSubscribeAdviser.getBookId());
if (null == bookDto) {
continue;
}
this.sendTemplateToAdviser(answerSubscribeAdviser.getAdviserId(), userCount, bookDto.getBookName(), answerSubscribeAdviser.getSendType());
answerSubscribeAdviser.setSendState(1);
answerSubscribeAdviserDao.update(answerSubscribeAdviser);
}
}
}
@Override
@ParamLog("检测答案是否有提供")
@ParamLog("检测服务是否有新增")
public void checkAnswerUpdate() {
//已订阅的书
List<AnswerSubscribe> list = answerSubscribeDao.getBookBySendState(AnswerSendStateEnum.subscribe.code);
if (ListUtils.isEmpty(list)){
return;
}
for (AnswerSubscribe answerSubscribe: list){
Boolean hasAnswer = hasAnswer(answerSubscribe.getBookId(), answerSubscribe.getAdviserId(), answerSubscribe.getChannelId());
if (hasAnswer){
if (!ListUtils.isEmpty(list)) {
for (AnswerSubscribe answerSubscribe : list) {
List<BookServeDTO> serveIds = bookGroupBiz.getBookAndBookGroupServeIds(answerSubscribe.getAdviserId(), answerSubscribe.getBookId(), answerSubscribe.getChannelId());
if (serveIds.size() > answerSubscribe.getResourceCount()) {
answerSubscribe.setSendState(AnswerSendStateEnum.wait_send.code);
answerSubscribeDao.updateSendState(answerSubscribe);
}
}
}
//检查订阅人数,10人
List<AnswerSubscribeCountDto> countDtos = answerSubscribeDao.getSubscribeCount4Adviser(10);
if (!ListUtils.isEmpty(countDtos)){
for (AnswerSubscribeCountDto dto: countDtos){
AnswerSubscribeAdviser query = new AnswerSubscribeAdviser();
BeanUtils.copyProperties(dto,query);
AnswerSubscribeAdviser subscribeAdviser = answerSubscribeAdviserDao.queryAll(query);
if (null == subscribeAdviser){
query.setSendState(0);
query.setSendType(10);
answerSubscribeAdviserDao.insert(query);
}
}
}
//50人
List<AnswerSubscribeCountDto> subscribeCountDtos = answerSubscribeDao.getSubscribeCount4Adviser(50);
if (!ListUtils.isEmpty(subscribeCountDtos)) {
for (AnswerSubscribeCountDto dto : subscribeCountDtos) {
AnswerSubscribeAdviser query = new AnswerSubscribeAdviser();
BeanUtils.copyProperties(dto, query);
AnswerSubscribeAdviser subscribeAdviser = answerSubscribeAdviserDao.queryAll(query);
if (null == subscribeAdviser) {
query.setSendState(0);
query.setSendType(50);
answerSubscribeAdviserDao.insert(query);
continue;
}
if (subscribeAdviser.getSendState() == 1 && subscribeAdviser.getSendType() == 50) {
continue;
}
subscribeAdviser.setSendState(0);
subscribeAdviser.setSendType(50);
answerSubscribeAdviserDao.update(subscribeAdviser);
}
}
}
private void sendAppletTemplateMsg(Long wechatUserId, Long accountSettingId, String bookName, String appName) {
private void sendAppletTemplateMsg(Long wechatUserId, Long accountSettingId, String bookName) {
bookName = bookName.length() > 13 ? bookName.substring(0, 13) + "..." : bookName;
appName = appName.length() > 13 ? appName.substring(0, 13) + "..." : appName;
AppletTemplateMessageDto appletTemplateMessage;
Map<String, String> tempMap;
appletTemplateMessage = new AppletTemplateMessageDto();
......@@ -184,12 +225,32 @@ public class AnswerSubscribeBizImpl implements AnswerSubscribeBiz {
appletTemplateMessage.setTempalteTypeCode("xiaorui_content_update_remind");
appletTemplateMessage.setPage("pages/customize/index");
tempMap = new HashMap<>();
tempMap.put("thing4", "答案上架提醒");
tempMap.put("thing4", "书刊配套资源服务");
tempMap.put("thing10", StringUtil.addBracket(bookName));
tempMap.put("thing9", appName);
tempMap.put("thing9", "本书有新的资源服务上架,是你想要的吗?");
tempMap.put("date5", DateUtils.formatDate(new Date(), DateUtils.DATE_FORMAT_DATETIME));
appletTemplateMessage.setData(tempMap);
templateConsr.sendAppletMessageQueue(appletTemplateMessage);
}
private void sendTemplateToAdviser(Long adviserId, Integer userCount, String bookName, Integer sendType) {
bookName = bookName.length() > 13 ? bookName.substring(0, 13) + "..." : bookName;
Long agentId = adviserConsr.getAgentIdByAdviser(adviserId);
String content = String.format("已有"+sendType+"人订阅了本书服务更新,很多人关注本书,建议尽快上架新服务!");
Map<String, String> temParam = new HashMap<>();
temParam.put("first", content);
temParam.put("keyword1", "订阅" + StringUtil.addBracket(bookName));
temParam.put("keyword2", "累计" + userCount + "人订阅了本书服务更新");
temParam.put("remark", "如果有资源服务还没有上传,请尽快上传方便读者使用哦");
templateConsr.sendManage(SceneCode.PROJECT_TASK_SCENE.value, agentId, adviserId, SystemCode.adviser.code, null, temParam, SendType.SEND_BY_PARTY_ID.value, false);
}
private void sendTemplate4Customer(Long channelId, Long wechatUserId, String bookName) {
Map<String, String> paramMap = new HashMap<>();
paramMap.put("first", "本书有新的资源服务上架,看看是不是你想要的?");
paramMap.put("keyword1", StringUtil.addBracket(bookName));
paramMap.put("keyword2", "书刊配套资源服务");
paramMap.put("remark", "再次扫描书上二维码,即可查看更新内容");
templateConsr.sendOperate(SceneCode.PROJECT_TASK_SCENE.value, channelId, wechatUserId, null, paramMap, SendType.SEND_BY_WECHAT_USER_ID.value, false);
}
}
package com.pcloud.book.applet.dao;
import com.pcloud.book.applet.entity.AnswerSubscribeAdviser;
import com.pcloud.common.core.dao.BaseDao;
import java.util.List;
/**
* 答案订阅-编辑发送记录(AnswerSubscribeAdviser)表数据库访问层
*
* @author makejava
* @since 2020-12-01 19:15:10
*/
public interface AnswerSubscribeAdviserDao extends BaseDao<AnswerSubscribeAdviser> {
/**
* 查询
* @author:zhuyajie
* @date:2020/12/1 19:34
* * @param null
*/
AnswerSubscribeAdviser queryAll(AnswerSubscribeAdviser answerSubscribeAdviser);
/**
* 查询待发送记录
* @author:zhuyajie
* @date:2020/12/1 19:48
* * @param null
*/
List<AnswerSubscribeAdviser> getRecord4Send();
}
\ No newline at end of file
package com.pcloud.book.applet.dao;
import com.pcloud.book.applet.dto.AnswerSubscribeCountDto;
import com.pcloud.book.applet.entity.AnswerSubscribe;
import com.pcloud.common.core.dao.BaseDao;
......@@ -46,4 +47,18 @@ public interface AnswerSubscribeDao extends BaseDao<AnswerSubscribe>{
* * @param null
*/
List<AnswerSubscribe> getBookBySendState(Integer sendState);
/**
* 查编辑订阅人数
* @author:zhuyajie
* @date:2020/12/1 19:21
* * @param null
*/
List<AnswerSubscribeCountDto> getSubscribeCount4Adviser(Integer limit);
/**
* 查订阅人数
* @author:zhuyajie
* @date:2020/12/1 19:54
* * @param null
*/
Integer getUserCountByBookAdviser(AnswerSubscribe answerSubscribe);
}
\ No newline at end of file
package com.pcloud.book.applet.dao.impl;
import com.pcloud.book.applet.dao.AnswerSubscribeAdviserDao;
import com.pcloud.book.applet.entity.AnswerSubscribeAdviser;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @ClassName com.pcloud.book.applet.dao.impl.AnswerSubscribeAdviserDaoImpl
* @Author zhuyajie
* @Description
* @Date 2020/12/1 19:17
* @Version 1.0
**/
@Component
public class AnswerSubscribeAdviserDaoImpl extends BaseDaoImpl<AnswerSubscribeAdviser> implements AnswerSubscribeAdviserDao {
@Override
public AnswerSubscribeAdviser queryAll(AnswerSubscribeAdviser answerSubscribeAdviser) {
return getSessionTemplate().selectOne(getStatement("queryAll"), answerSubscribeAdviser);
}
@Override
public List<AnswerSubscribeAdviser> getRecord4Send() {
return getSessionTemplate().selectList(getStatement("getRecord4Send"));
}
}
package com.pcloud.book.applet.dao.impl;
import com.pcloud.book.applet.dao.AnswerSubscribeDao;
import com.pcloud.book.applet.dto.AnswerSubscribeCountDto;
import com.pcloud.book.applet.entity.AnswerSubscribe;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @ClassName com.pcloud.book.applet.dao.impl.AnswerSubscribeDaoImpl
......@@ -37,4 +40,16 @@ public class AnswerSubscribeDaoImpl extends BaseDaoImpl<AnswerSubscribe> impleme
public List<AnswerSubscribe> getBookBySendState(Integer sendState) {
return getSessionTemplate().selectList(getStatement("getBookBySendState"), sendState);
}
@Override
public List<AnswerSubscribeCountDto> getSubscribeCount4Adviser(Integer limit) {
Map<String,Object> map = new HashMap<>();
map.put("limit", limit);
return getSessionTemplate().selectList(getStatement("getSubscribeCount4Adviser"), map);
}
@Override
public Integer getUserCountByBookAdviser(AnswerSubscribe answerSubscribe) {
return getSessionTemplate().selectOne(getStatement("getUserCountByBookAdviser"), answerSubscribe);
}
}
package com.pcloud.book.applet.dto;
import com.pcloud.common.dto.BaseDto;
import lombok.Data;
/**
* @ClassName com.pcloud.book.applet.dto.AnswerSubscribeCountDto
* @Author zhuyajie
* @Description 订阅服务
* @Date 2020/12/1 19:18
* @Version 1.0
**/
@Data
public class AnswerSubscribeCountDto extends BaseDto {
private Integer userCount;
/**
* 书刊id
*/
private Long bookId;
/**
* 渠道id
*/
private Long channelId;
/**
* 编辑id
*/
private Long adviserId;
}
......@@ -49,5 +49,9 @@ public class AnswerSubscribe extends BaseEntity {
* 公众号id
*/
private Long accountSettingId;
/**
* 当前资源数量
*/
private Integer resourceCount;
}
\ No newline at end of file
package com.pcloud.book.applet.entity;
import com.pcloud.common.entity.BaseEntity;
import java.util.Date;
import java.io.Serializable;
import lombok.Data;
/**
* 答案订阅-编辑发送记录(AnswerSubscribeAdviser)实体类
*
* @author makejava
* @since 2020-12-01 19:15:10
*/
@Data
public class AnswerSubscribeAdviser extends BaseEntity {
private static final long serialVersionUID = 441706888820089566L;
/**
* 主键
*/
private Long id;
/**
* 发送状态(0/1)
*/
private Integer sendState;
/**
* 发送类型(10人发/50人发)
*/
private Integer sendType;
/**
* 书刊id
*/
private Long bookId;
/**
* 渠道id
*/
private Long channelId;
/**
* 编辑id
*/
private Long adviserId;
}
\ No newline at end of file
<?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.applet.dao.impl.AnswerSubscribeAdviserDaoImpl">
<resultMap type="com.pcloud.book.applet.entity.AnswerSubscribeAdviser" id="AnswerSubscribeAdviserMap">
<result property="id" column="id" jdbcType="INTEGER"/>
<result property="adviserId" column="adviser_id" jdbcType="INTEGER"/>
<result property="sendState" column="send_state" jdbcType="INTEGER"/>
<result property="sendType" column="send_type" jdbcType="INTEGER"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
<result property="bookId" column="book_id" jdbcType="INTEGER"/>
<result property="channelId" column="channel_id" jdbcType="INTEGER"/>
</resultMap>
<!--查询单个-->
<select id="getById" resultMap="AnswerSubscribeAdviserMap">
select
id, adviser_id, send_state, send_type, create_time, update_time, book_id, channel_id
from book.answer_subscribe_adviser
where id = #{id}
</select>
<!--通过实体作为筛选条件查询-->
<select id="queryAll" resultMap="AnswerSubscribeAdviserMap">
select
id, adviser_id, send_state, send_type, create_time, update_time, book_id, channel_id
from book.answer_subscribe_adviser
<where>
<if test="adviserId != null">
and adviser_id = #{adviserId}
</if>
<if test="bookId != null">
and book_id = #{bookId}
</if>
<if test="channelId != null">
and channel_id = #{channelId}
</if>
<if test="sendState != null">
and send_state = #{sendState}
</if>
<if test="sendType != null">
and send_type = #{sendType}
</if>
</where>
limit 1
</select>
<!--新增所有列-->
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
insert into book.answer_subscribe_adviser(adviser_id, send_state, send_type, create_time, update_time,book_id, channel_id)
values (#{adviserId}, #{sendState}, #{sendType}, now(), now(), #{bookId}, #{channelId})
</insert>
<!--通过主键修改数据-->
<update id="update">
update book.answer_subscribe_adviser
<set>
<if test="sendState != null">
send_state = #{sendState},
</if>
<if test="sendType != null">
send_type = #{sendType},
</if>
update_time = now(),
</set>
where id = #{id}
</update>
<!--通过主键删除-->
<delete id="deleteById">
delete from book.answer_subscribe_adviser where id = #{id}
</delete>
<select id="getRecord4Send" resultMap="AnswerSubscribeAdviserMap">
select
id, adviser_id, send_state, send_type, create_time, update_time, book_id, channel_id
from book.answer_subscribe_adviser
WHERE send_state = 0
GROUP BY
book_id, channel_id, adviser_id
</select>
</mapper>
\ No newline at end of file
......@@ -12,17 +12,18 @@
<result property="accountSettingId" column="account_setting_id" jdbcType="INTEGER"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP" />
<result property="resourceCount" column="resource_count" jdbcType="INTEGER"/>
</resultMap>
<sql id="Base_Column_List">
id, wechat_user_id, book_id, channel_id, adviser_id, send_state, account_setting_id, create_time, update_time
id, wechat_user_id, book_id, channel_id, adviser_id, send_state, account_setting_id, create_time, update_time, resource_count
</sql>
<!--新增所有列-->
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
insert into book.answer_subscribe(wechat_user_id, book_id, channel_id, adviser_id, send_state,
account_setting_id, create_time, update_time)
values (#{wechatUserId}, #{bookId}, #{channelId}, #{adviserId}, 0, #{accountSettingId}, NOW(), NOW())
account_setting_id, create_time, update_time, resource_count)
values (#{wechatUserId}, #{bookId}, #{channelId}, #{adviserId}, 0, #{accountSettingId}, NOW(), NOW(), #{resourceCount})
</insert>
......@@ -57,14 +58,36 @@
and adviser_id = #{adviserId}
</select>
<select id="getBookBySendState" resultType="com.pcloud.book.applet.entity.AnswerSubscribe" parameterType="integer">
<select id="getBookBySendState" resultMap="AnswerSubscribeMap" parameterType="integer">
SELECT
book_id bookId,
channel_id channelId,
adviser_id adviserId
<include refid="Base_Column_List"/>
FROM book.answer_subscribe
WHERE send_state = #{sendState}
group by book_id, channel_id, adviser_id
</select>
<select id="getSubscribeCount4Adviser" parameterType="map" resultType="com.pcloud.book.applet.dto.AnswerSubscribeCountDto">
SELECT
adviser_id adviserId,
COUNT(DISTINCT wechat_user_id) userCount,
book_id bookId,
channel_id channelId
FROM
answer_subscribe
WHERE
1=1
GROUP BY
book_id, channel_id, adviser_id
HAVING
COUNT(DISTINCT wechat_user_id) >= #{limit}
</select>
<select id="getUserCountByBookAdviser" resultType="integer" parameterType="com.pcloud.book.applet.entity.AnswerSubscribe">
SELECT COUNT(DISTINCT wechat_user_id)
FROM book.answer_subscribe
WHERE book_id = #{bookId}
and channel_id = #{channelId}
and adviser_id = #{adviserId}
</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