Commit 1897f8b1 by 朱亚洁

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

parent 276f0c7d
package com.pcloud.book.applet.biz.impl; package com.pcloud.book.applet.biz.impl;
import com.pcloud.book.applet.biz.AnswerSubscribeBiz; 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.dao.AnswerSubscribeDao;
import com.pcloud.book.applet.dto.AnswerSubscribeCountDto;
import com.pcloud.book.applet.dto.AnswerSubscribeDTO; import com.pcloud.book.applet.dto.AnswerSubscribeDTO;
import com.pcloud.book.applet.entity.AnswerSubscribe; 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.applet.enums.AnswerSendStateEnum;
import com.pcloud.book.base.exception.BookBizException; import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.book.biz.BookBiz; import com.pcloud.book.book.biz.BookBiz;
import com.pcloud.book.book.dto.BookDto; 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.message.TemplateConsr;
import com.pcloud.book.consumer.user.AdviserConsr;
import com.pcloud.book.group.biz.BookGroupBiz; import com.pcloud.book.group.biz.BookGroupBiz;
import com.pcloud.book.group.dto.BookServeDTO; import com.pcloud.book.group.dto.BookServeDTO;
import com.pcloud.book.util.properties.BookProps; import com.pcloud.book.util.properties.BookProps;
import com.pcloud.common.core.aspect.ParamLog; 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.core.dto.AppletTemplateMessageDto;
import com.pcloud.common.enums.AppTypeEnum;
import com.pcloud.common.utils.DateUtils; import com.pcloud.common.utils.DateUtils;
import com.pcloud.common.utils.ListUtils; import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.string.StringUtil; import com.pcloud.common.utils.string.StringUtil;
...@@ -25,12 +29,10 @@ import org.springframework.beans.BeanUtils; ...@@ -25,12 +29,10 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -53,6 +55,10 @@ public class AnswerSubscribeBizImpl implements AnswerSubscribeBiz { ...@@ -53,6 +55,10 @@ public class AnswerSubscribeBizImpl implements AnswerSubscribeBiz {
private BookGroupBiz bookGroupBiz; private BookGroupBiz bookGroupBiz;
@Autowired @Autowired
private BookBiz bookBiz; private BookBiz bookBiz;
@Autowired
private AdviserConsr adviserConsr;
@Autowired
private AnswerSubscribeAdviserDao answerSubscribeAdviserDao;
@Override @Override
public void answerSubscribe(AnswerSubscribeDTO answerSubscribeDTO) { public void answerSubscribe(AnswerSubscribeDTO answerSubscribeDTO) {
...@@ -66,6 +72,8 @@ public class AnswerSubscribeBizImpl implements AnswerSubscribeBiz { ...@@ -66,6 +72,8 @@ public class AnswerSubscribeBizImpl implements AnswerSubscribeBiz {
if (!ListUtils.isEmpty(list)) { if (!ListUtils.isEmpty(list)) {
return; return;
} }
List<BookServeDTO> serveIds = bookGroupBiz.getBookAndBookGroupServeIds(answerSubscribeDTO.getAdviserId(), answerSubscribeDTO.getBookId(), answerSubscribeDTO.getChannelId());
answerSubscribe.setResourceCount(serveIds.size());
answerSubscribeDao.insert(answerSubscribe); answerSubscribeDao.insert(answerSubscribe);
} }
...@@ -82,100 +90,133 @@ public class AnswerSubscribeBizImpl implements AnswerSubscribeBiz { ...@@ -82,100 +90,133 @@ public class AnswerSubscribeBizImpl implements AnswerSubscribeBiz {
if (!ListUtils.isEmpty(list)) { if (!ListUtils.isEmpty(list)) {
state = true; state = true;
} }
Boolean hasAnswer = hasAnswer(answerSubscribe.getBookId(), answerSubscribe.getAdviserId(), answerSubscribe.getChannelId());
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("subscribeState", state); map.put("subscribeState", state);
map.put("hasAnswer", hasAnswer);
return map; 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 @Override
@ParamLog("发送答案订阅小程序模板消息") @ParamLog("发送答案订阅小程序模板消息")
public void sendAppletMsg4Answer() { public void sendAppletMsg4Answer() {
//待发送消息的书刊 //待发送消息的书刊
List<AnswerSubscribe> bookList = answerSubscribeDao.getBookBySendState(AnswerSendStateEnum.wait_send.code); List<AnswerSubscribe> bookList = answerSubscribeDao.getBookBySendState(AnswerSendStateEnum.wait_send.code);
if (ListUtils.isEmpty(bookList)) { if (!ListUtils.isEmpty(bookList)) {
return; for (AnswerSubscribe answerSubscribeBook : bookList) {
} Long adviserId = answerSubscribeBook.getAdviserId();
for (AnswerSubscribe answerSubscribeBook : bookList) { Long channelId = answerSubscribeBook.getChannelId();
if ("pro".equals(BookProps.getSystemEnv()) && !AppletConstants.NO_ANSWER_BOOK.contains(answerSubscribeBook.getBookId())) { Long bookId = answerSubscribeBook.getBookId();
continue; AnswerSubscribe subscribe = new AnswerSubscribe();
} subscribe.setSendState(AnswerSendStateEnum.wait_send.code);
AnswerSubscribe subscribe = new AnswerSubscribe(); subscribe.setBookId(bookId);
subscribe.setSendState(AnswerSendStateEnum.wait_send.code); subscribe.setChannelId(channelId);
subscribe.setBookId(answerSubscribeBook.getBookId()); subscribe.setAdviserId(adviserId);
subscribe.setChannelId(answerSubscribeBook.getChannelId()); List<AnswerSubscribe> userList = answerSubscribeDao.getBySendStateAndBook(subscribe);
subscribe.setAdviserId(answerSubscribeBook.getAdviserId()); if (ListUtils.isEmpty(userList)) {
List<AnswerSubscribe> userList = answerSubscribeDao.getBySendStateAndBook(subscribe); continue;
if (ListUtils.isEmpty(userList)) { }
continue; BookDto bookDto = bookBiz.getBaseById(bookId);
} if (null == bookDto) {
BookDto bookDto = bookBiz.getBaseById(answerSubscribeBook.getBookId()); continue;
if (null == bookDto) { }
continue; List<BookServeDTO> serveIds = bookGroupBiz.getBookAndBookGroupServeIds(adviserId, bookId, channelId);
} if (ListUtils.isEmpty(serveIds)){
List<BookServeDTO> bookServeVOS = bookGroupBiz.getBookAndBookGroupServeIds(answerSubscribeBook.getAdviserId(), answerSubscribeBook.getBookId(), answerSubscribeBook.getChannelId()); continue;
bookGroupBiz.fillBookServe(bookServeVOS); }
bookGroupBiz.removeCanNotBuy(bookServeVOS); String bookName = bookDto.getBookName();
if (ListUtils.isEmpty(bookServeVOS)){ for (AnswerSubscribe answerSubscribeUser : userList) {
continue; 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<BookServeDTO> answerList = bookServeVOS.stream(). }
filter(s -> AppTypeEnum.ANSWER.value.equals(s.getFromType()) || s.getServeName().contains("答案")).collect(Collectors.toList()); //待发消息的编辑
if (ListUtils.isEmpty(answerList)) { List<AnswerSubscribeAdviser> adviserList = answerSubscribeAdviserDao.getRecord4Send();
continue; if (!ListUtils.isEmpty(adviserList)){
} for (AnswerSubscribeAdviser answerSubscribeAdviser: adviserList){
for (AnswerSubscribe answerSubscribeUser : userList) { AnswerSubscribe subscribe = new AnswerSubscribe();
sendAppletTemplateMsg(answerSubscribeUser.getWechatUserId(), answerSubscribeUser.getAccountSettingId(), subscribe.setBookId(answerSubscribeAdviser.getBookId());
bookDto.getBookName(), answerList.get(0).getServeName()); subscribe.setChannelId(answerSubscribeAdviser.getChannelId());
//更新发送状态 subscribe.setAdviserId(answerSubscribeAdviser.getAdviserId());
answerSubscribeUser.setSendState(AnswerSendStateEnum.has_send.code); Integer userCount = answerSubscribeDao.getUserCountByBookAdviser(subscribe);
answerSubscribeDao.updateSendState(answerSubscribeUser); 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 @Override
@ParamLog("检测答案是否有提供") @ParamLog("检测服务是否有新增")
public void checkAnswerUpdate() { public void checkAnswerUpdate() {
//已订阅的书 //已订阅的书
List<AnswerSubscribe> list = answerSubscribeDao.getBookBySendState(AnswerSendStateEnum.subscribe.code); List<AnswerSubscribe> list = answerSubscribeDao.getBookBySendState(AnswerSendStateEnum.subscribe.code);
if (ListUtils.isEmpty(list)){ if (!ListUtils.isEmpty(list)) {
return; 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);
}
}
} }
for (AnswerSubscribe answerSubscribe: list){ //检查订阅人数,10人
Boolean hasAnswer = hasAnswer(answerSubscribe.getBookId(), answerSubscribe.getAdviserId(), answerSubscribe.getChannelId()); List<AnswerSubscribeCountDto> countDtos = answerSubscribeDao.getSubscribeCount4Adviser(10);
if (hasAnswer){ if (!ListUtils.isEmpty(countDtos)){
answerSubscribe.setSendState(AnswerSendStateEnum.wait_send.code); for (AnswerSubscribeCountDto dto: countDtos){
answerSubscribeDao.updateSendState(answerSubscribe); 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; bookName = bookName.length() > 13 ? bookName.substring(0, 13) + "..." : bookName;
appName = appName.length() > 13 ? appName.substring(0, 13) + "..." : appName;
AppletTemplateMessageDto appletTemplateMessage; AppletTemplateMessageDto appletTemplateMessage;
Map<String, String> tempMap; Map<String, String> tempMap;
appletTemplateMessage = new AppletTemplateMessageDto(); appletTemplateMessage = new AppletTemplateMessageDto();
...@@ -184,12 +225,32 @@ public class AnswerSubscribeBizImpl implements AnswerSubscribeBiz { ...@@ -184,12 +225,32 @@ public class AnswerSubscribeBizImpl implements AnswerSubscribeBiz {
appletTemplateMessage.setTempalteTypeCode("xiaorui_content_update_remind"); appletTemplateMessage.setTempalteTypeCode("xiaorui_content_update_remind");
appletTemplateMessage.setPage("pages/customize/index"); appletTemplateMessage.setPage("pages/customize/index");
tempMap = new HashMap<>(); tempMap = new HashMap<>();
tempMap.put("thing4", "答案上架提醒"); tempMap.put("thing4", "书刊配套资源服务");
tempMap.put("thing10", StringUtil.addBracket(bookName)); tempMap.put("thing10", StringUtil.addBracket(bookName));
tempMap.put("thing9", appName); tempMap.put("thing9", "本书有新的资源服务上架,是你想要的吗?");
tempMap.put("date5", DateUtils.formatDate(new Date(), DateUtils.DATE_FORMAT_DATETIME)); tempMap.put("date5", DateUtils.formatDate(new Date(), DateUtils.DATE_FORMAT_DATETIME));
appletTemplateMessage.setData(tempMap); appletTemplateMessage.setData(tempMap);
templateConsr.sendAppletMessageQueue(appletTemplateMessage); 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; package com.pcloud.book.applet.dao;
import com.pcloud.book.applet.dto.AnswerSubscribeCountDto;
import com.pcloud.book.applet.entity.AnswerSubscribe; import com.pcloud.book.applet.entity.AnswerSubscribe;
import com.pcloud.common.core.dao.BaseDao; import com.pcloud.common.core.dao.BaseDao;
...@@ -46,4 +47,18 @@ public interface AnswerSubscribeDao extends BaseDao<AnswerSubscribe>{ ...@@ -46,4 +47,18 @@ public interface AnswerSubscribeDao extends BaseDao<AnswerSubscribe>{
* * @param null * * @param null
*/ */
List<AnswerSubscribe> getBookBySendState(Integer sendState); 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; package com.pcloud.book.applet.dao.impl;
import com.pcloud.book.applet.dao.AnswerSubscribeDao; import com.pcloud.book.applet.dao.AnswerSubscribeDao;
import com.pcloud.book.applet.dto.AnswerSubscribeCountDto;
import com.pcloud.book.applet.entity.AnswerSubscribe; import com.pcloud.book.applet.entity.AnswerSubscribe;
import com.pcloud.common.core.dao.BaseDaoImpl; import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @ClassName com.pcloud.book.applet.dao.impl.AnswerSubscribeDaoImpl * @ClassName com.pcloud.book.applet.dao.impl.AnswerSubscribeDaoImpl
...@@ -37,4 +40,16 @@ public class AnswerSubscribeDaoImpl extends BaseDaoImpl<AnswerSubscribe> impleme ...@@ -37,4 +40,16 @@ public class AnswerSubscribeDaoImpl extends BaseDaoImpl<AnswerSubscribe> impleme
public List<AnswerSubscribe> getBookBySendState(Integer sendState) { public List<AnswerSubscribe> getBookBySendState(Integer sendState) {
return getSessionTemplate().selectList(getStatement("getBookBySendState"), 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 { ...@@ -49,5 +49,9 @@ public class AnswerSubscribe extends BaseEntity {
* 公众号id * 公众号id
*/ */
private Long accountSettingId; 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 @@ ...@@ -12,17 +12,18 @@
<result property="accountSettingId" column="account_setting_id" jdbcType="INTEGER"/> <result property="accountSettingId" column="account_setting_id" jdbcType="INTEGER"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/> <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP" /> <result property="updateTime" column="update_time" jdbcType="TIMESTAMP" />
<result property="resourceCount" column="resource_count" jdbcType="INTEGER"/>
</resultMap> </resultMap>
<sql id="Base_Column_List"> <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> </sql>
<!--新增所有列--> <!--新增所有列-->
<insert id="insert" keyProperty="id" useGeneratedKeys="true"> <insert id="insert" keyProperty="id" useGeneratedKeys="true">
insert into book.answer_subscribe(wechat_user_id, book_id, channel_id, adviser_id, send_state, insert into book.answer_subscribe(wechat_user_id, book_id, channel_id, adviser_id, send_state,
account_setting_id, create_time, update_time) account_setting_id, create_time, update_time, resource_count)
values (#{wechatUserId}, #{bookId}, #{channelId}, #{adviserId}, 0, #{accountSettingId}, NOW(), NOW()) values (#{wechatUserId}, #{bookId}, #{channelId}, #{adviserId}, 0, #{accountSettingId}, NOW(), NOW(), #{resourceCount})
</insert> </insert>
...@@ -57,14 +58,36 @@ ...@@ -57,14 +58,36 @@
and adviser_id = #{adviserId} and adviser_id = #{adviserId}
</select> </select>
<select id="getBookBySendState" resultType="com.pcloud.book.applet.entity.AnswerSubscribe" parameterType="integer"> <select id="getBookBySendState" resultMap="AnswerSubscribeMap" parameterType="integer">
SELECT SELECT
book_id bookId, <include refid="Base_Column_List"/>
channel_id channelId,
adviser_id adviserId
FROM book.answer_subscribe FROM book.answer_subscribe
WHERE send_state = #{sendState} WHERE send_state = #{sendState}
group by book_id, channel_id, adviser_id group by book_id, channel_id, adviser_id
</select> </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> </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