Commit 228b3d96 by 朱亚洁

个人号群发

parent 16096287
...@@ -32,8 +32,8 @@ import org.springframework.stereotype.Component; ...@@ -32,8 +32,8 @@ import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date;
import java.util.ArrayList; import java.util.ArrayList;
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;
...@@ -558,4 +558,40 @@ public class WechatGroupConsr { ...@@ -558,4 +558,40 @@ public class WechatGroupConsr {
return list; return list;
} }
@ParamLog("根据用户id或昵称模糊查询")
public List<String> getByUserQuery(String userQuery) {
List<String> list = new ArrayList<>();
try {
list = ResponseHandleUtil.parseListResponse(groupMemberService.getByUserQuery(userQuery), String.class);
} catch (Exception e) {
log.error("根据用户id或昵称模糊查询.[getByUserQuery]失败" + e.getMessage(), e);
}
return list;
}
@ParamLog("批量获取用户信息")
public Map<String, GroupUserDTO> mapWxUserInfoByWxIdList(List<String> wxUserIds) {
Map<String, GroupUserDTO> map = new HashMap<>();
try {
map = ResponseHandleUtil.parseMapResponse(groupMemberService.mapWxUserInfoByWxIdList(wxUserIds), String.class, GroupUserDTO.class);
} catch (Exception e) {
log.error("批量获取用户信息.[mapWxUserInfoByWxIdList]失败" + e.getMessage(), e);
}
return map;
}
@ParamLog("批量获取小号信息")
public Map<String, GroupUserDTO> mapRobotInfoByIdList(List<String> wxIdList){
Map<String, GroupUserDTO> map = new HashMap<>();
try {
map = ResponseHandleUtil.parseMapResponse(groupMemberService.mapRobotInfoByIdList(wxIdList), String.class, GroupUserDTO.class);
} catch (Exception e) {
log.error("批量获取小号信息.[]失败" + e.getMessage(), e);
}
return map;
}
} }
...@@ -23,6 +23,7 @@ import com.pcloud.book.group.dto.SelfBookGroupStParamDTO; ...@@ -23,6 +23,7 @@ import com.pcloud.book.group.dto.SelfBookGroupStParamDTO;
import com.pcloud.book.group.dto.SelfRobotUserDTO; import com.pcloud.book.group.dto.SelfRobotUserDTO;
import com.pcloud.book.group.dto.SelfRobtParamDTO; import com.pcloud.book.group.dto.SelfRobtParamDTO;
import com.pcloud.book.group.dto.TopAgentBookGroupDTO; import com.pcloud.book.group.dto.TopAgentBookGroupDTO;
import com.pcloud.book.group.dto.UserSelectParamDTO;
import com.pcloud.book.group.entity.BookGroup; import com.pcloud.book.group.entity.BookGroup;
import com.pcloud.book.group.entity.BookGroupServe; import com.pcloud.book.group.entity.BookGroupServe;
import com.pcloud.book.group.dto.AgentStatisticsInfoDTO; import com.pcloud.book.group.dto.AgentStatisticsInfoDTO;
...@@ -37,6 +38,7 @@ import com.pcloud.book.group.vo.ListBookGroup4ChannelParamVO; ...@@ -37,6 +38,7 @@ import com.pcloud.book.group.vo.ListBookGroup4ChannelParamVO;
import com.pcloud.book.group.vo.ResourcesStatisticVO; import com.pcloud.book.group.vo.ResourcesStatisticVO;
import com.pcloud.book.group.vo.StatisticVO; import com.pcloud.book.group.vo.StatisticVO;
import com.pcloud.book.group.vo.TotalRescourceDataVO; import com.pcloud.book.group.vo.TotalRescourceDataVO;
import com.pcloud.book.group.vo.UserBookInfoVO;
import com.pcloud.book.group.vo.WxGroupStatisticVO; import com.pcloud.book.group.vo.WxGroupStatisticVO;
import com.pcloud.common.dto.StoreFlowInfoDto; import com.pcloud.common.dto.StoreFlowInfoDto;
import com.pcloud.common.exceptions.BizException; import com.pcloud.common.exceptions.BizException;
...@@ -616,4 +618,11 @@ public interface BookGroupBiz { ...@@ -616,4 +618,11 @@ public interface BookGroupBiz {
* 出版社关联的个人号以及个人号的社群书数量 * 出版社关联的个人号以及个人号的社群书数量
*/ */
List<AltAndCountDTO> getAltAndCountDTOListByAgentId(Long agentId); List<AltAndCountDTO> getAltAndCountDTOListByAgentId(Long agentId);
/**
* 个人号群发用户查询
* @param userSelectParamDTO
* @return
*/
PageBeanNew<UserBookInfoVO> listUser4SelfPush(UserSelectParamDTO userSelectParamDTO);
} }
...@@ -75,6 +75,7 @@ import com.pcloud.book.group.dto.SelfBookGroupStParamDTO; ...@@ -75,6 +75,7 @@ import com.pcloud.book.group.dto.SelfBookGroupStParamDTO;
import com.pcloud.book.group.dto.SelfRobotUserDTO; import com.pcloud.book.group.dto.SelfRobotUserDTO;
import com.pcloud.book.group.dto.SelfRobtParamDTO; import com.pcloud.book.group.dto.SelfRobtParamDTO;
import com.pcloud.book.group.dto.StatisticsIncomeDto; import com.pcloud.book.group.dto.StatisticsIncomeDto;
import com.pcloud.book.group.dto.UserSelectParamDTO;
import com.pcloud.book.group.dto.TopAgentBookGroupDTO; import com.pcloud.book.group.dto.TopAgentBookGroupDTO;
import com.pcloud.book.group.entity.BookGroup; import com.pcloud.book.group.entity.BookGroup;
import com.pcloud.book.group.entity.BookGroupAgentRecord; import com.pcloud.book.group.entity.BookGroupAgentRecord;
...@@ -105,6 +106,7 @@ import com.pcloud.book.group.vo.ResourceClickVO; ...@@ -105,6 +106,7 @@ import com.pcloud.book.group.vo.ResourceClickVO;
import com.pcloud.book.group.vo.ResourcesStatisticVO; import com.pcloud.book.group.vo.ResourcesStatisticVO;
import com.pcloud.book.group.vo.StatisticVO; import com.pcloud.book.group.vo.StatisticVO;
import com.pcloud.book.group.vo.TotalRescourceDataVO; import com.pcloud.book.group.vo.TotalRescourceDataVO;
import com.pcloud.book.group.vo.UserBookInfoVO;
import com.pcloud.book.group.vo.WxGroupStatisticVO; import com.pcloud.book.group.vo.WxGroupStatisticVO;
import com.pcloud.book.keywords.biz.BookKeywordBiz; import com.pcloud.book.keywords.biz.BookKeywordBiz;
import com.pcloud.book.keywords.dao.BookKeywordDao; import com.pcloud.book.keywords.dao.BookKeywordDao;
...@@ -307,7 +309,6 @@ public class BookGroupBizImpl implements BookGroupBiz { ...@@ -307,7 +309,6 @@ public class BookGroupBizImpl implements BookGroupBiz {
0, TimeUnit.SECONDS, new LinkedBlockingQueue<>(), 0, TimeUnit.SECONDS, new LinkedBlockingQueue<>(),
new BasicThreadFactory.Builder().namingPattern("platform_statistics_export_thread-%d").build()); new BasicThreadFactory.Builder().namingPattern("platform_statistics_export_thread-%d").build());
@Override @Override
public BookGroupDTO getDTOByBookId(Long bookId, Long channelId, Long adviserId) { public BookGroupDTO getDTOByBookId(Long bookId, Long channelId, Long adviserId) {
return bookGroupDao.getDTOByBookId(bookId, channelId, adviserId); return bookGroupDao.getDTOByBookId(bookId, channelId, adviserId);
...@@ -3569,4 +3570,33 @@ public class BookGroupBizImpl implements BookGroupBiz { ...@@ -3569,4 +3570,33 @@ public class BookGroupBizImpl implements BookGroupBiz {
} }
} }
@Override
public PageBeanNew<UserBookInfoVO> listUser4SelfPush(UserSelectParamDTO userSelectParamDTO) {
Integer currentPage = userSelectParamDTO.getCurrentPage();
Integer numPerPage = userSelectParamDTO.getNumPerPage();
Map<String, Object> map = new HashMap<>();
//用户昵称id模糊查询
if (!StringUtil.isEmpty(userSelectParamDTO.getUserQuery())) {
List<String> wxUserIds = wechatGroupConsr.getByUserQuery(userSelectParamDTO.getUserQuery());
if (!ListUtils.isEmpty(wxUserIds)) {
map.put("wxUserIds", wxUserIds);
} else {
return new PageBeanNew<>(currentPage, numPerPage, 0, new ArrayList<>());
}
}
map.put("depLabelId", userSelectParamDTO.getDepLabelId());
map.put("proLabelId", userSelectParamDTO.getProLabelId());
map.put("altId", userSelectParamDTO.getRobotId());
map.put("bookIds", userSelectParamDTO.getBookIds());
List<UserBookInfoVO> countlist = bookGroupCipherUserDao.listUser4SelfPush(map);
if (ListUtils.isEmpty(countlist)) {
return new PageBeanNew<>(currentPage, numPerPage, 0, new ArrayList<>());
}
map.put("pageNum", currentPage * numPerPage);
map.put("numPerPage", numPerPage);
List<UserBookInfoVO> list = bookGroupCipherUserDao.listUser4SelfPush(map);
//填充个人号群发用户信息、扫码书刊信息
groupSet.setUserBookInfo4SelfPush(list);
return new PageBeanNew<>(currentPage, numPerPage, countlist.size(), list);
}
} }
...@@ -8,6 +8,8 @@ import com.pcloud.book.group.dto.DayCountDTO; ...@@ -8,6 +8,8 @@ import com.pcloud.book.group.dto.DayCountDTO;
import com.pcloud.book.group.dto.LabelUserCountDTO; import com.pcloud.book.group.dto.LabelUserCountDTO;
import com.pcloud.book.group.dto.SelfRobotUserDTO; import com.pcloud.book.group.dto.SelfRobotUserDTO;
import com.pcloud.book.group.entity.BookGroupCipherUser; import com.pcloud.book.group.entity.BookGroupCipherUser;
import com.pcloud.book.group.vo.UserBookInfoItemVO;
import com.pcloud.book.group.vo.UserBookInfoVO;
import com.pcloud.common.core.dao.BaseDao; import com.pcloud.common.core.dao.BaseDao;
import java.util.List; import java.util.List;
...@@ -115,4 +117,19 @@ public interface BookGroupCipherUserDao extends BaseDao<BookGroupCipherUser> { ...@@ -115,4 +117,19 @@ public interface BookGroupCipherUserDao extends BaseDao<BookGroupCipherUser> {
* 根据出版社id获取小号id集合 * 根据出版社id获取小号id集合
*/ */
List<String> getAltIdsByAgentId(Long agentId); List<String> getAltIdsByAgentId(Long agentId);
/**
* 用户扫码的社群书信息
* @param wxUserId
* @param altId
* @return
*/
List<UserBookInfoItemVO> getScanBookInfoByUser(String wxUserId, String altId);
/**
* 个人号推送好友查询
* @param map
* @return
*/
public List<UserBookInfoVO> listUser4SelfPush(Map<String,Object> map);
} }
...@@ -9,6 +9,8 @@ import com.pcloud.book.group.dto.DayCountDTO; ...@@ -9,6 +9,8 @@ import com.pcloud.book.group.dto.DayCountDTO;
import com.pcloud.book.group.dto.LabelUserCountDTO; import com.pcloud.book.group.dto.LabelUserCountDTO;
import com.pcloud.book.group.dto.SelfRobotUserDTO; import com.pcloud.book.group.dto.SelfRobotUserDTO;
import com.pcloud.book.group.entity.BookGroupCipherUser; import com.pcloud.book.group.entity.BookGroupCipherUser;
import com.pcloud.book.group.vo.UserBookInfoItemVO;
import com.pcloud.book.group.vo.UserBookInfoVO;
import com.pcloud.common.core.dao.BaseDaoImpl; import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -135,4 +137,17 @@ public class BookGroupCipherUserDaoImpl extends BaseDaoImpl<BookGroupCipherUser> ...@@ -135,4 +137,17 @@ public class BookGroupCipherUserDaoImpl extends BaseDaoImpl<BookGroupCipherUser>
public List<String> getAltIdsByAgentId(Long agentId) { public List<String> getAltIdsByAgentId(Long agentId) {
return getSessionTemplate().selectList(getStatement("getAltIdsByAgentId"), agentId); return getSessionTemplate().selectList(getStatement("getAltIdsByAgentId"), agentId);
} }
@Override
public List<UserBookInfoItemVO> getScanBookInfoByUser(String wxUserId, String altId) {
Map<String, Object> map = new HashMap<>();
map.put("wxUserId", wxUserId);
map.put("altId", altId);
return getSessionTemplate().selectList(getStatement("getScanBookInfoByUser"), map);
}
@Override
public List<UserBookInfoVO> listUser4SelfPush(Map<String, Object> map) {
return getSessionTemplate().selectList(getStatement("listUser4SelfPush"), map);
}
} }
package com.pcloud.book.group.dto;
import java.util.List;
import lombok.Data;
/**
* @描述:用户筛选入参
* @作者:zhuyajie
* @创建时间:14:51 2019/11/26
* @版本:1.0
*/
@Data
public class UserSelectParamDTO {
/**
*当前页
*/
private Integer currentPage;
/**
*每页数量
*/
private Integer numPerPage;
/**
*小号id
*/
private String robotId;
/**
*用户昵称或微信id查询
*/
private String userQuery;
/**
*图书id
*/
private List<Long> bookIds;
/**
* 专业标签id
*/
private Long proLabelId;
/**
* 深度标签id
*/
private Long depLabelId;
}
package com.pcloud.book.group.facade; package com.pcloud.book.group.facade;
import com.pcloud.book.group.dto.SelfBookGroupStParamDTO; import com.pcloud.book.group.dto.SelfBookGroupStParamDTO;
import com.pcloud.book.group.dto.UserSelectParamDTO;
import com.pcloud.book.group.entity.BookGroup; import com.pcloud.book.group.entity.BookGroup;
import com.pcloud.book.group.entity.BookGroupClassify; import com.pcloud.book.group.entity.BookGroupClassify;
import com.pcloud.book.group.entity.BookGroupServe; import com.pcloud.book.group.entity.BookGroupServe;
...@@ -13,6 +14,7 @@ import com.pcloud.book.group.vo.GroupScanTrendVO; ...@@ -13,6 +14,7 @@ import com.pcloud.book.group.vo.GroupScanTrendVO;
import com.pcloud.book.group.vo.ListBookGroup4ChannelParamVO; import com.pcloud.book.group.vo.ListBookGroup4ChannelParamVO;
import com.pcloud.book.group.vo.ResourcesStatisticVO; import com.pcloud.book.group.vo.ResourcesStatisticVO;
import com.pcloud.book.group.vo.UpdateRankTypeVO; import com.pcloud.book.group.vo.UpdateRankTypeVO;
import com.pcloud.book.group.vo.UserBookInfoVO;
import com.pcloud.common.dto.ResponseDto; import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException; import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageBean; import com.pcloud.common.page.PageBean;
...@@ -571,4 +573,8 @@ public interface BookGroupFacade { ...@@ -571,4 +573,8 @@ public interface BookGroupFacade {
@RequestBody SelfBookGroupStParamDTO selfBookGroupStParamDTO @RequestBody SelfBookGroupStParamDTO selfBookGroupStParamDTO
) throws PermissionException; ) throws PermissionException;
@ApiOperation(value = "个人号群发-用户列表查询", httpMethod = "POST")
@PostMapping("listUser4SelfPush")
public ResponseDto<PageBeanNew<UserBookInfoVO>> listUser4SelfPush(
@RequestHeader("token") String token, @RequestBody @ApiParam UserSelectParamDTO userSelectParamDTO) throws PermissionException;
} }
...@@ -5,6 +5,7 @@ import com.pcloud.book.group.biz.BookGroupBiz; ...@@ -5,6 +5,7 @@ import com.pcloud.book.group.biz.BookGroupBiz;
import com.pcloud.book.group.biz.BookGroupClassifyBiz; import com.pcloud.book.group.biz.BookGroupClassifyBiz;
import com.pcloud.book.group.dto.GroupStoreMyPayDto; import com.pcloud.book.group.dto.GroupStoreMyPayDto;
import com.pcloud.book.group.dto.SelfBookGroupStParamDTO; import com.pcloud.book.group.dto.SelfBookGroupStParamDTO;
import com.pcloud.book.group.dto.UserSelectParamDTO;
import com.pcloud.book.group.entity.BookGroup; import com.pcloud.book.group.entity.BookGroup;
import com.pcloud.book.group.entity.BookGroupClassify; import com.pcloud.book.group.entity.BookGroupClassify;
import com.pcloud.book.group.entity.BookGroupServe; import com.pcloud.book.group.entity.BookGroupServe;
...@@ -20,6 +21,7 @@ import com.pcloud.book.group.vo.ListBookGroup4ChannelParamVO; ...@@ -20,6 +21,7 @@ import com.pcloud.book.group.vo.ListBookGroup4ChannelParamVO;
import com.pcloud.book.group.vo.ResourcesStatisticVO; import com.pcloud.book.group.vo.ResourcesStatisticVO;
import com.pcloud.book.group.vo.TotalRescourceDataVO; import com.pcloud.book.group.vo.TotalRescourceDataVO;
import com.pcloud.book.group.vo.UpdateRankTypeVO; import com.pcloud.book.group.vo.UpdateRankTypeVO;
import com.pcloud.book.group.vo.UserBookInfoVO;
import com.pcloud.book.group.vo.WxGroupStatisticVO; import com.pcloud.book.group.vo.WxGroupStatisticVO;
import com.pcloud.common.core.constant.SystemCode; import com.pcloud.common.core.constant.SystemCode;
import com.pcloud.common.dto.ResponseDto; import com.pcloud.common.dto.ResponseDto;
...@@ -31,6 +33,7 @@ import com.pcloud.common.permission.PermissionException; ...@@ -31,6 +33,7 @@ import com.pcloud.common.permission.PermissionException;
import com.pcloud.common.utils.SessionUtil; import com.pcloud.common.utils.SessionUtil;
import com.pcloud.common.utils.cookie.Cookie; import com.pcloud.common.utils.cookie.Cookie;
import com.pcloud.common.utils.string.StringUtil; import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.wechatgroup.base.exception.WechatGroupBizException;
import com.pcloud.wechatgroup.message.enums.IsSystem; import com.pcloud.wechatgroup.message.enums.IsSystem;
import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.JsonParseException;
...@@ -883,4 +886,19 @@ public class BookGroupFacadeImpl implements BookGroupFacade { ...@@ -883,4 +886,19 @@ public class BookGroupFacadeImpl implements BookGroupFacade {
} }
@ApiOperation(value = "个人号群发-用户列表查询", httpMethod = "POST")
@PostMapping("listUser4SelfPush")
@Override
public ResponseDto<PageBeanNew<UserBookInfoVO>> listUser4SelfPush(
@RequestHeader("token") String token, @RequestBody @ApiParam UserSelectParamDTO userSelectParamDTO) throws PermissionException {
SessionUtil.getToken4Redis(token);
if (null == userSelectParamDTO || null == userSelectParamDTO.getCurrentPage() || null == userSelectParamDTO.getNumPerPage()) {
throw new WechatGroupBizException(WechatGroupBizException.PARAM_IS_NULL, "缺少参数");
}
if (StringUtil.isEmpty(userSelectParamDTO.getRobotId())){
throw new WechatGroupBizException(WechatGroupBizException.PARAM_IS_NULL, "请选择个人号");
}
PageBeanNew<UserBookInfoVO> pageBeanNew = bookGroupBiz.listUser4SelfPush(userSelectParamDTO);
return new ResponseDto<>(pageBeanNew);
}
} }
...@@ -5,6 +5,7 @@ import com.pcloud.appcenter.assist.dto.AssistTempletDTO; ...@@ -5,6 +5,7 @@ import com.pcloud.appcenter.assist.dto.AssistTempletDTO;
import com.pcloud.book.consumer.analysisengine.BrowseRecordConsr; import com.pcloud.book.consumer.analysisengine.BrowseRecordConsr;
import com.pcloud.book.consumer.app.AssistTempletConsr; import com.pcloud.book.consumer.app.AssistTempletConsr;
import com.pcloud.book.consumer.common.ExportConsr; import com.pcloud.book.consumer.common.ExportConsr;
import com.pcloud.book.consumer.label.LabelConsr;
import com.pcloud.book.consumer.trade.TradeConsr; import com.pcloud.book.consumer.trade.TradeConsr;
import com.pcloud.book.consumer.user.AdviserConsr; import com.pcloud.book.consumer.user.AdviserConsr;
import com.pcloud.book.consumer.user.AgentConsr; import com.pcloud.book.consumer.user.AgentConsr;
...@@ -18,6 +19,8 @@ import com.pcloud.book.group.dto.BookGroupStatisticDTO; ...@@ -18,6 +19,8 @@ import com.pcloud.book.group.dto.BookGroupStatisticDTO;
import com.pcloud.book.group.dto.CountAndTimeDTO; import com.pcloud.book.group.dto.CountAndTimeDTO;
import com.pcloud.book.group.dto.GroupTopicDTO; import com.pcloud.book.group.dto.GroupTopicDTO;
import com.pcloud.book.group.vo.BookGroupAnalysisVO; import com.pcloud.book.group.vo.BookGroupAnalysisVO;
import com.pcloud.book.group.vo.UserBookInfoItemVO;
import com.pcloud.book.group.vo.UserBookInfoVO;
import com.pcloud.book.keywords.dao.BookKeywordDao; import com.pcloud.book.keywords.dao.BookKeywordDao;
import com.pcloud.book.keywords.dto.KeywordResourceDTO; import com.pcloud.book.keywords.dto.KeywordResourceDTO;
import com.pcloud.common.core.aspect.ParamLog; import com.pcloud.common.core.aspect.ParamLog;
...@@ -28,6 +31,7 @@ import com.pcloud.common.utils.string.StringUtil; ...@@ -28,6 +31,7 @@ import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.facade.tradecenter.dto.ProductSaleDetailDto; import com.pcloud.facade.tradecenter.dto.ProductSaleDetailDto;
import com.pcloud.usercenter.party.adviser.dto.AdviserBaseInfoDto; import com.pcloud.usercenter.party.adviser.dto.AdviserBaseInfoDto;
import com.pcloud.wechatgroup.group.dto.GroupUserCountDTO; import com.pcloud.wechatgroup.group.dto.GroupUserCountDTO;
import com.pcloud.wechatgroup.group.dto.GroupUserDTO;
import org.apache.commons.collections.MapUtils; import org.apache.commons.collections.MapUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -84,6 +88,8 @@ public class GroupSet { ...@@ -84,6 +88,8 @@ public class GroupSet {
private AgentConsr agentConsr; private AgentConsr agentConsr;
@Autowired @Autowired
private BookGroupDao bookGroupDao; private BookGroupDao bookGroupDao;
@Autowired
private LabelConsr labelConsr;
/** /**
* 群分类删除topic * 群分类删除topic
...@@ -401,4 +407,48 @@ public class GroupSet { ...@@ -401,4 +407,48 @@ public class GroupSet {
} }
} }
/**
* 填充个人号群发用户信息、扫码书刊信息
* @param list
*/
public void setUserBookInfo4SelfPush(List<UserBookInfoVO> list) {
List<String> wxUserIds = list.stream().filter(s -> s.getWxUserId() != null).map(UserBookInfoVO::getWxUserId).distinct().collect(Collectors.toList());
Map<String, GroupUserDTO> userDTOMap = wechatGroupConsr.mapWxUserInfoByWxIdList(wxUserIds);
List<Long> labelIds = new ArrayList<>();
for (UserBookInfoVO userBookInfoVO : list) {
//用户信息
if (!MapUtils.isEmpty(userDTOMap) && userDTOMap.containsKey(userBookInfoVO.getWxUserId())) {
GroupUserDTO userDTO = userDTOMap.get(userBookInfoVO.getWxUserId());
userBookInfoVO.setHeadPic(userDTO.getHeadPic());
userBookInfoVO.setNickName(userDTO.getNickName());
userBookInfoVO.setSex(userDTO.getSex());
}
//扫码书刊
List<UserBookInfoItemVO> bookList = bookGroupCipherUserDao.getScanBookInfoByUser(userBookInfoVO.getWxUserId(), userBookInfoVO.getAltId());
userBookInfoVO.setBookInfoItemVOS(bookList);
List<Long> bookProLabelIds = bookList.stream().filter(s -> s.getProLabelId() != null).map(UserBookInfoItemVO::getProLabelId).distinct().collect(Collectors.toList());
List<Long> bookDepLabelIds = bookList.stream().filter(s -> s.getDepLabelId() != null).map(UserBookInfoItemVO::getDepLabelId).distinct().collect(Collectors.toList());
if (!ListUtils.isEmpty(bookProLabelIds)) {
labelIds.addAll(bookProLabelIds);
}
if (!ListUtils.isEmpty(bookDepLabelIds)) {
labelIds.addAll(bookDepLabelIds);
}
}
//标签
Map<Long, String> bookLabelMap = labelConsr.getLabelName(labelIds);
if (!MapUtils.isEmpty(bookLabelMap)) {
list.forEach(userBookInfoVO -> {
for (UserBookInfoItemVO bookInfoItemVO : userBookInfoVO.getBookInfoItemVOS()) {
if (null != bookInfoItemVO.getProLabelId() && bookLabelMap.containsKey(bookInfoItemVO.getProLabelId())) {
bookInfoItemVO.setProLabelName(bookLabelMap.get(bookInfoItemVO.getProLabelId()));
}
if (null != bookInfoItemVO.getDepLabelId() && bookLabelMap.containsKey(bookInfoItemVO.getDepLabelId())) {
bookInfoItemVO.setDepLabelName(bookLabelMap.get(bookInfoItemVO.getDepLabelId()));
}
}
});
}
}
} }
package com.pcloud.book.group.vo;
import com.pcloud.common.dto.BaseDto;
import lombok.Data;
/**
* @描述:书刊信息
* @作者:zhuyajie
* @创建时间:16:51 2019/11/26
* @版本:1.0
*/
@Data
public class UserBookInfoItemVO extends BaseDto{
/**
* 书名
*/
private String bookName;
/**
* 社群书id
*/
private Long bookGroupId;
/**
* 专业标签id
*/
private Long proLabelId;
/**
* 专业标签名
*/
private String proLabelName;
/**
* 深度标签id
*/
private Long depLabelId;
/**
* 深度标签名称
*/
private String depLabelName;
}
package com.pcloud.book.group.vo;
import com.pcloud.common.dto.BaseDto;
import java.util.List;
import lombok.Data;
/**
* @描述:个人号群发好友筛选信息
* @作者:zhuyajie
* @创建时间:15:09 2019/11/26
* @版本:1.0
*/
@Data
public class UserBookInfoVO extends BaseDto {
/**
* 微信用户ID
*/
private String wxUserId;
/**
* 昵称
*/
private String nickName;
/**
* 头像
*/
private String headPic;
/**
* 性别
*/
private Integer sex;
/**
* 小号id
*/
private String altId;
/**
/**
* 扫码书刊信息
*/
private List<UserBookInfoItemVO> bookInfoItemVOS;
}
package com.pcloud.book.push.biz;
import com.pcloud.book.group.vo.UserBookInfoVO;
import com.pcloud.book.push.dto.SelfPushAddParamDTO;
import com.pcloud.book.push.dto.SelfPushRecordDTO;
import com.pcloud.common.page.PageBeanNew;
/**
* @描述:个人号群发
* @作者:zhuyajie
* @创建时间:11:00 2019/11/27
* @版本:1.0
*/
public interface SelfPushBiz {
/**
* 创建群发
* @param partyId
* @param addParamDTO
*/
void createSelfPush(Long partyId, SelfPushAddParamDTO addParamDTO);
/**
* 群发记录用户列表
* @param pushId
* @return
*/
PageBeanNew<UserBookInfoVO> listSelfPushUser(Long pushId, Integer currentPage,Integer numPerPage);
/**
* 个人号群发记录列表
* @param currentPage
* @param numPerPage
* @param startTime
* @param endTime
* @return
*/
PageBeanNew<SelfPushRecordDTO> listSelfPushRecord(Integer currentPage, Integer numPerPage, String startTime, String endTime, Integer status);
}
package com.pcloud.book.push.biz.impl;
import com.pcloud.book.consumer.wechatgroup.WechatGroupConsr;
import com.pcloud.book.group.dao.WeixinQrcodeGenerationDao;
import com.pcloud.book.group.entity.WeixinQrcodeGeneration;
import com.pcloud.book.group.set.GroupSet;
import com.pcloud.book.group.vo.UserBookInfoVO;
import com.pcloud.book.push.biz.SelfPushBiz;
import com.pcloud.book.push.dao.SelfPushDao;
import com.pcloud.book.push.dao.SelfPushItemDao;
import com.pcloud.book.push.dao.SelfPushUserDao;
import com.pcloud.book.push.dto.SelfPushAddParamDTO;
import com.pcloud.book.push.dto.SelfPushRecordDTO;
import com.pcloud.book.push.entity.SelfPush;
import com.pcloud.book.push.entity.SelfPushItem;
import com.pcloud.book.push.entity.SelfPushUser;
import com.pcloud.book.push.enums.ItemTypeEnum;
import com.pcloud.book.push.enums.PushStatusEnum;
import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.page.PageParam;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.wechatgroup.group.dto.GroupRobotDTO;
import com.pcloud.wechatgroup.group.dto.GroupUserDTO;
import com.sdk.wxgroup.SendArticleMessageVO;
import com.sdk.wxgroup.SendMessageTypeEnum;
import com.sdk.wxgroup.SendPicMessageVO;
import com.sdk.wxgroup.SendTextMessageVO;
import com.sdk.wxgroup.WxGroupSDK;
import org.apache.commons.collections.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @描述:个人号群发
* @作者:zhuyajie
* @创建时间:11:00 2019/11/27
* @版本:1.0
*/
@Component("selfPushBiz")
public class SelfPushBizImpl implements SelfPushBiz {
@Autowired
private SelfPushDao selfPushDao;
@Autowired
private SelfPushItemDao selfPushItemDao;
@Autowired
private SelfPushUserDao selfPushUserDao;
@Autowired
private GroupSet groupSet;
@Autowired
private WechatGroupConsr wechatGroupConsr;
@Autowired
private WeixinQrcodeGenerationDao weixinQrcodeGenerationDao;
@Override
public void createSelfPush(Long partyId, SelfPushAddParamDTO addParamDTO) {
//群发
SelfPush selfPush = new SelfPush();
selfPush.setCreateUser(partyId);
selfPush.setUpdateUser(partyId);
selfPush.setAltId(addParamDTO.altId);
selfPushDao.insert(selfPush);
Long pushId = selfPush.getId();
//群发项
List<SelfPushItem> itemList = addParamDTO.getPushItemList();
itemList.forEach(selfPushItem -> {
selfPushItem.setCreateUser(partyId);
selfPushItem.setUpdateUser(partyId);
selfPushItem.setPushId(pushId);
selfPushItem.setPushStatus(PushStatusEnum.PUSHING.value);
});
selfPushItemDao.insert(itemList);
//群发用户
List<SelfPushUser> userList = new ArrayList<>();
for (String userId : addParamDTO.getUserIdList()) {
SelfPushUser user = new SelfPushUser();
user.setWxUserId(userId);
userList.add(user);
}
userList.forEach(selfPushUser -> {
selfPushUser.setCreateUser(partyId);
selfPushUser.setPushId(pushId);
});
selfPushUserDao.insert(userList);
//微信发送
ThreadPoolUtils.SEND_MESSAGE_THREAD_POOL.execute(() -> {
userList.forEach(selfPushUser -> {
for (SelfPushItem pushItem : itemList) {
sendSelfMsg(selfPushUser.getWxUserId(), selfPush.getAltId(), pushItem);
}
});
selfPushItemDao.updatePushStatusByPushId(PushStatusEnum.SUCCESS.value, pushId);
});
}
/**
* 消息群发
* @param userWxId
* @param altId
* @param selfPushItem
*/
public void sendSelfMsg(String userWxId, String altId, SelfPushItem selfPushItem) {
Integer code = SendMessageTypeEnum.SELF.getCode();
Integer itemType = selfPushItem.getItemType();
if (ItemTypeEnum.TEXT.value.equals(itemType)) {
SendTextMessageVO sendTextMessageVO = new SendTextMessageVO();
sendTextMessageVO.setContent(selfPushItem.getTextContent());
sendTextMessageVO.setCode(code);
sendTextMessageVO.setWxId(altId);
sendTextMessageVO.setAltId(altId);
sendTextMessageVO.setWxGroupId(userWxId);
sendTextMessageVO.setIp(getIpByRobot(altId));
WxGroupSDK.sendTextMessage(sendTextMessageVO);
}
if (ItemTypeEnum.LINK.value.equals(itemType)) {
SendArticleMessageVO sendArticleMessageVO = new SendArticleMessageVO();
sendArticleMessageVO.setCode(code);
sendArticleMessageVO.setAltId(altId);
sendArticleMessageVO.setDescription(selfPushItem.getLinkDescription());
sendArticleMessageVO.setWxGroupId(userWxId);
String url = selfPushItem.getLinkUrl();
sendArticleMessageVO.setLinkUrl(url);
sendArticleMessageVO.setPicUrl(selfPushItem.getLinkImageUrl());
sendArticleMessageVO.setTitle(selfPushItem.getLinkTitle());
sendArticleMessageVO.setIp(getIpByRobot(altId));
WxGroupSDK.sendArticleMessage(sendArticleMessageVO);
}
if (ItemTypeEnum.APP.value.equals(itemType)) {
return;//应用类型不参与群发C1002029
}
if (ItemTypeEnum.IMAGE.value.equals(itemType)) {
SendPicMessageVO sendPicMessageVO = new SendPicMessageVO();
sendPicMessageVO.setCode(code);
sendPicMessageVO.setAltId(altId);
sendPicMessageVO.setWxGroupId(userWxId);
sendPicMessageVO.setPicUrl(selfPushItem.getImageUrl());
sendPicMessageVO.setIp(getIpByRobot(altId));
WxGroupSDK.sendPicMessage(sendPicMessageVO);
}
}
/**
* 获取ip
* @param altId
* @return
*/
private String getIpByRobot(String altId) {
String ip = null;
GroupRobotDTO groupRobotDTO = wechatGroupConsr.getGroupRobotByWxId(altId);
if (null != groupRobotDTO) {
WeixinQrcodeGeneration weixinQrcodeGeneration = weixinQrcodeGenerationDao.getByGeneration(groupRobotDTO.getVersion());
if (null != weixinQrcodeGeneration) {
ip = weixinQrcodeGeneration.getWechatGroupIp();
}
}
return ip;
}
@Override
public PageBeanNew<UserBookInfoVO> listSelfPushUser(Long pushId, Integer currentPage, Integer numPerPage) {
Map<String, Object> map = new HashMap<>();
map.put("pushId", pushId);
PageBeanNew<UserBookInfoVO> pageBeanNew = selfPushUserDao.listPageNew(new PageParam(currentPage, numPerPage), map, "listByPushId");
if (null == pageBeanNew || ListUtils.isEmpty(pageBeanNew.getRecordList())) {
return new PageBeanNew<>(currentPage, numPerPage, 0, new ArrayList<>());
}
groupSet.setUserBookInfo4SelfPush(pageBeanNew.getRecordList());
return pageBeanNew;
}
@Override
public PageBeanNew<SelfPushRecordDTO> listSelfPushRecord(Integer currentPage, Integer numPerPage, String startTime, String endTime, Integer status) {
Map<String, Object> map = new HashMap<>();
map.put("startTime", startTime);
map.put("endTime", endTime);
map.put("pushStatus", status);
PageBeanNew<SelfPushRecordDTO> pageBeanNew = selfPushItemDao.listPageNew(new PageParam(currentPage, numPerPage), map, "listSelfPushRecord");
if (null == pageBeanNew || ListUtils.isEmpty(pageBeanNew.getRecordList())) {
return new PageBeanNew<>(currentPage, numPerPage, 0, new ArrayList<>());
}
List<String> wxIds = pageBeanNew.getRecordList().stream().filter(s -> s != null).map(SelfPushRecordDTO::getAltId).distinct().collect(Collectors.toList());
Map<String, GroupUserDTO> robotMap = wechatGroupConsr.mapRobotInfoByIdList(wxIds);
for (SelfPushRecordDTO dto : pageBeanNew.getRecordList()) {
Integer userCount = selfPushUserDao.getCountByPushId(dto.getPushId());
dto.setUserCount(userCount);
if (!MapUtils.isEmpty(robotMap) && robotMap.containsKey(dto.getAltId())) {
GroupUserDTO userDTO = robotMap.get(dto.getAltId());
dto.setRobotName(userDTO.getNickName());
}
}
return pageBeanNew;
}
}
package com.pcloud.book.push.check; package com.pcloud.book.push.check;
import com.pcloud.book.base.exception.BookBizException; import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.push.dto.SelfPushAddParamDTO;
import com.pcloud.book.push.entity.MorningEveningNews; import com.pcloud.book.push.entity.MorningEveningNews;
import com.pcloud.book.push.entity.Push; import com.pcloud.book.push.entity.Push;
import com.pcloud.book.push.entity.PushGroup; import com.pcloud.book.push.entity.PushGroup;
import com.pcloud.book.push.entity.PushItem; import com.pcloud.book.push.entity.PushItem;
import com.pcloud.book.push.entity.SelfPushItem;
import com.pcloud.book.push.enums.ItemTypeEnum; import com.pcloud.book.push.enums.ItemTypeEnum;
import com.pcloud.book.push.enums.PushTypeEnum; import com.pcloud.book.push.enums.PushTypeEnum;
import com.pcloud.common.core.aspect.ParamLog; import com.pcloud.common.core.aspect.ParamLog;
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;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -281,4 +284,49 @@ public class PushCheck { ...@@ -281,4 +284,49 @@ public class PushCheck {
} }
@ParamLog("个人号群发参数校验")
public void selfPushParamCheck(SelfPushAddParamDTO addParamDTO) {
if (null == addParamDTO) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "参数为空");
}
if (StringUtil.isEmpty(addParamDTO.getAltId()) || ListUtils.isEmpty(addParamDTO.getUserIdList())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "个人号或群发好友为空");
}
if (ListUtils.isEmpty(addParamDTO.getPushItemList())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "发送消息为空");
}
if (addParamDTO.getPushItemList().size() > 4) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "发送消息数量不能超过4条");
}
if (addParamDTO.getUserIdList().size() > 100) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "好友数量不能超过100");
}
for (SelfPushItem pushItem : addParamDTO.getPushItemList()) {
if (pushItem == null) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "发送消息项不能为空!");
}
if (pushItem.getItemType() == null) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "发送消息项内容类型不能为空!");
}
if (ItemTypeEnum.TEXT.value.equals(pushItem.getItemType()) && StringUtil.isEmpty(pushItem.getTextContent())) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "发送消息项内容类型为文本时,文本不能为空!");
}
if (ItemTypeEnum.LINK.value.equals(pushItem.getItemType()) && StringUtil.isEmpty(pushItem.getLinkUrl())) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "发送消息项内容类型为链接时,链接不能为空!");
}
if (ItemTypeEnum.APP.value.equals(pushItem.getItemType()) && (pushItem.getAppId() == null && pushItem.getProductId() == null)) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "发送消息项内容类型为应用或作品时,应用id或作品id不能为空!");
}
if (ItemTypeEnum.APP.value.equals(pushItem.getItemType()) && pushItem.getAppId() != null && StringUtil.isEmpty(pushItem.getAppUrl())) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "发送消息项内容类型为应用时,应用链接不能为空!");
}
if (ItemTypeEnum.APP.value.equals(pushItem.getItemType()) && pushItem.getProductId() != null && StringUtil.isEmpty(pushItem.getProductUrl())) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "发送消息项内容类型为作品时,作品链接不能为空!");
}
if (ItemTypeEnum.IMAGE.value.equals(pushItem.getItemType()) && StringUtil.isEmpty(pushItem.getImageUrl())) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "发送消息项内容类型为图片时,图片不能为空!");
}
}
}
} }
package com.pcloud.book.push.dao;
import com.pcloud.book.push.entity.SelfPush;
import com.pcloud.common.core.dao.BaseDao;
/**
* @描述:个人号群发
* @作者:zhuyajie
* @创建时间:18:57 2019/11/26
* @版本:1.0
*/
public interface SelfPushDao extends BaseDao<SelfPush>{
}
package com.pcloud.book.push.dao;
import com.pcloud.book.push.entity.SelfPushItem;
import com.pcloud.common.core.dao.BaseDao;
/**
* @描述:个人号群发项
* @作者:zhuyajie
* @创建时间:18:59 2019/11/26
* @版本:1.0
*/
public interface SelfPushItemDao extends BaseDao<SelfPushItem>{
/**
* 更新群发状态
* @param pushStatus
* @param pushId
*/
public void updatePushStatusByPushId(Integer pushStatus, Long pushId);
}
package com.pcloud.book.push.dao;
import com.pcloud.book.push.entity.SelfPushUser;
import com.pcloud.common.core.dao.BaseDao;
/**
* @描述:
* @作者:zhuyajie
* @创建时间:19:01 2019/11/26
* @版本:1.0
*/
public interface SelfPushUserDao extends BaseDao<SelfPushUser>{
/**
* 群发人数
* @param pushId
* @return
*/
Integer getCountByPushId(Long pushId);
}
package com.pcloud.book.push.dao.impl;
import com.pcloud.book.push.dao.SelfPushDao;
import com.pcloud.book.push.entity.SelfPush;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component;
/**
* @描述:个人号群发
* @作者:zhuyajie
* @创建时间:18:57 2019/11/26
* @版本:1.0
*/
@Component("selfPushDao")
public class SelfPushDaoImpl extends BaseDaoImpl<SelfPush> implements SelfPushDao {
}
package com.pcloud.book.push.dao.impl;
import com.pcloud.book.push.dao.SelfPushItemDao;
import com.pcloud.book.push.entity.SelfPushItem;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
/**
* @描述:个人号群发项
* @作者:zhuyajie
* @创建时间:19:00 2019/11/26
* @版本:1.0
*/
@Component("selfPushItemDao")
public class SelfPushItemDaoImpl extends BaseDaoImpl<SelfPushItem> implements SelfPushItemDao {
@Override
public void updatePushStatusByPushId(Integer pushStatus, Long pushId) {
Map<String, Object> map = new HashMap<>();
map.put("pushStatus", pushStatus);
map.put("pushId", pushId);
getSessionTemplate().update(getStatement("updatePushStatusByPushId"), map);
}
}
package com.pcloud.book.push.dao.impl;
import com.pcloud.book.push.dao.SelfPushUserDao;
import com.pcloud.book.push.entity.SelfPushUser;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component;
/**
* @描述:
* @作者:zhuyajie
* @创建时间:19:01 2019/11/26
* @版本:1.0
*/
@Component("selfPushUserDao")
public class SelfPushUserDaoImpl extends BaseDaoImpl<SelfPushUser>implements SelfPushUserDao {
@Override
public Integer getCountByPushId(Long pushId) {
return getSessionTemplate().selectOne(getStatement("getCountByPushId"), pushId);
}
}
package com.pcloud.book.push.dto;
import com.pcloud.book.push.entity.SelfPushItem;
import java.util.List;
import lombok.Data;
/**
* @描述:个人号群发新增
* @作者:zhuyajie
* @创建时间:9:49 2019/11/27
* @版本:1.0
*/
@Data
public class SelfPushAddParamDTO {
/**
* 推送小号id
*/
public String altId;
/**
* 推送用户id
*/
public List<String> userIdList;
/**
* 推送信息
*/
public List<SelfPushItem> pushItemList;
}
package com.pcloud.book.push.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.dto.BaseDto;
import java.util.Date;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @描述:个人号群发记录
* @作者:zhuyajie
* @创建时间:16:50 2019/11/27
* @版本:1.0
*/
@Data
public class SelfPushRecordDTO extends BaseDto{
@ApiModelProperty("群发小号id")
private String altId;
@ApiModelProperty("小号名称")
private String robotName;
@ApiModelProperty("推送id")
private Long pushId;
@ApiModelProperty("推送项id")
private Long pushItemId;
@ApiModelProperty("推送内容项类型:1文本,2链接,3应用,4图片")
private Integer itemType;
@ApiModelProperty("文本内容")
private String textContent;
@ApiModelProperty("链接地址")
private String linkUrl;
@ApiModelProperty("链接标题")
private String linkTitle;
@ApiModelProperty("链接简介")
private String linkDescription;
@ApiModelProperty("链接图片地址")
private String linkImageUrl;
@ApiModelProperty("图片链接")
private String imageUrl;
@ApiModelProperty("应用id")
private Long appId;
@ApiModelProperty("作品id")
private Long productId;
@ApiModelProperty("应用链接")
private String appUrl;
@ApiModelProperty("作品链接")
private String productUrl;
@ApiModelProperty("发送状态(0发送中1发送成功2发送失败)")
private Integer pushStatus;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@ApiModelProperty("创建时间")
private Date createTime;
@ApiModelProperty("发送好友数量")
private Integer userCount;
}
package com.pcloud.book.push.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.entity.BaseEntity;
import java.util.Date;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel("个人号群发")
@Data
public class SelfPush extends BaseEntity{
@ApiModelProperty("群发小号id")
private String altId;
@ApiModelProperty("创建人")
private Long createUser;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@ApiModelProperty("创建时间")
private Date createTime;
@ApiModelProperty("修改人")
private Long updateUser;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@ApiModelProperty("修改时间")
private Date updateTime;
}
\ No newline at end of file
package com.pcloud.book.push.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.entity.BaseEntity;
import java.util.Date;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel("个人号群发项")
@Data
public class SelfPushItem extends BaseEntity{
@ApiModelProperty("推送id")
private Long pushId;
@ApiModelProperty("推送内容项类型:1文本,2链接,3应用,4图片")
private Integer itemType;
@ApiModelProperty("文本内容")
private String textContent;
@ApiModelProperty("链接地址")
private String linkUrl;
@ApiModelProperty("链接标题")
private String linkTitle;
@ApiModelProperty("链接简介")
private String linkDescription;
@ApiModelProperty("链接图片地址")
private String linkImageUrl;
@ApiModelProperty("图片链接")
private String imageUrl;
@ApiModelProperty("应用id")
private Long appId;
@ApiModelProperty("作品id")
private Long productId;
@ApiModelProperty("应用链接")
private String appUrl;
@ApiModelProperty("作品链接")
private String productUrl;
@ApiModelProperty("发送状态(0发送中1发送成功2发送失败)")
private Integer pushStatus;
@ApiModelProperty("创建人")
private Long createUser;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@ApiModelProperty("创建时间")
private Date createTime;
@ApiModelProperty("修改人")
private Long updateUser;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@ApiModelProperty("修改时间")
private Date updateTime;
}
\ No newline at end of file
package com.pcloud.book.push.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.entity.BaseEntity;
import java.util.Date;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel("个人号群发用户")
@Data
public class SelfPushUser extends BaseEntity{
@ApiModelProperty("群发id")
private Long pushId;
@ApiModelProperty("微信用户id")
private String wxUserId;
@ApiModelProperty("创建人")
private Long createUser;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@ApiModelProperty("创建时间")
private Date createTime;
}
\ No newline at end of file
package com.pcloud.book.push.facade;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.group.vo.UserBookInfoVO;
import com.pcloud.book.push.biz.SelfPushBiz;
import com.pcloud.book.push.check.PushCheck;
import com.pcloud.book.push.dto.SelfPushAddParamDTO;
import com.pcloud.book.push.dto.SelfPushRecordDTO;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.permission.PermissionException;
import com.pcloud.common.utils.SessionUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
/**
* @描述:个人号群发
* @作者:zhuyajie
* @创建时间:9:46 2019/11/27
* @版本:1.0
*/
@Api(description = "个人号群发")
@RestController("selfPush")
@RequestMapping("selfPushFacade")
public class SelfPushFacade {
@Autowired
private PushCheck pushCheck;
@Autowired
private SelfPushBiz selfPushBiz;
@ApiOperation("创建个人号群发")
@PostMapping("createSelfPush")
public ResponseDto<?> createSelfPush(@RequestHeader("token") String token, @RequestBody @ApiParam SelfPushAddParamDTO addParamDTO) throws PermissionException {
pushCheck.selfPushParamCheck(addParamDTO);
Map<String, Object> map = SessionUtil.getToken4Redis(token);
Long partyId = (Long) map.get(SessionUtil.PARTY_ID);
String isSystem = (String) map.get(SessionUtil.IS_SYSTEM);
if ("0".equals(isSystem)) {
partyId = (Long) map.get(SessionUtil.MEMBER_ID);
}
selfPushBiz.createSelfPush(partyId, addParamDTO);
return new ResponseDto<>();
}
@ApiOperation("个人号群发记录用户列表")
@GetMapping("listSelfPushUser")
public ResponseDto<PageBeanNew<UserBookInfoVO>> listSelfPushUser(
@RequestHeader("token") String token, @RequestParam("pushId") @ApiParam("群发id") Long pushId,
@RequestParam("currentPage") @ApiParam("当前页") Integer currentPage, @RequestParam("numPerPage") @ApiParam("每页数量") Integer numPerPage) throws PermissionException {
SessionUtil.getToken4Redis(token);
if (null == pushId) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "缺少群发id");
}
if (null == currentPage || null == numPerPage) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "缺少分页参数");
}
PageBeanNew<UserBookInfoVO> pageBeanNew = selfPushBiz.listSelfPushUser(pushId, currentPage, numPerPage);
return new ResponseDto<>(pageBeanNew);
}
@ApiOperation("个人号群发记录列表")
@GetMapping("listSelfPushRecord")
public ResponseDto<PageBeanNew<SelfPushRecordDTO>> listSelfPushRecord(
@RequestHeader("token") String token,
@RequestParam("currentPage") @ApiParam("当前页") Integer currentPage,
@RequestParam("numPerPage") @ApiParam("每页数量") Integer numPerPage,
@RequestParam(value = "startTime", required = false) @ApiParam("开始时间") String startTime,
@RequestParam(value = "endTime", required = false) @ApiParam("结束时间") String endTime,
@RequestParam(value = "status", required = false) @ApiParam("发送状态(1发送中2发送成功3发送失败)") Integer status) throws PermissionException {
SessionUtil.getToken4Redis(token);
if (null == currentPage || null == numPerPage) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "缺少分页参数");
}
PageBeanNew<SelfPushRecordDTO> pageBeanNew = selfPushBiz.listSelfPushRecord(currentPage, numPerPage, startTime, endTime, status);
return new ResponseDto<>(pageBeanNew);
}
}
...@@ -381,4 +381,61 @@ ...@@ -381,4 +381,61 @@
WHERE WHERE
t1.agent_id = #{agentId} t1.agent_id = #{agentId}
</select> </select>
<select id="listUser4SelfPush" resultType="com.pcloud.book.group.vo.UserBookInfoVO" parameterType="map">
SELECT
u.wx_user_id wxUserId,
u.alt_id altId
FROM
book_group_cipher_user u
LEFT JOIN book_group g ON u.book_group_id = g.id
WHERE
u.alt_id = #{altId}
<if test="proLabelId != null">
AND g.pro_label_id = #{proLabelId}
</if>
<if test="depLabelId != null">
AND g.dep_label_id = #{depLabelId}
</if>
<if test="bookIds != null and bookIds.size>0">
AND g.book_id IN
<foreach collection="bookIds" open="(" close=")" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="wxUserIds != null and wxUserIds.size>0">
AND u.wx_user_id IN
<foreach collection="wxUserIds" open="(" close=")" item="item" separator=",">
#{item}
</foreach>
</if>
GROUP BY
u.wx_user_id
ORDER BY
u.create_time DESC,
u.id DESC
<if test="pageNum>=0 and numPerPage>0">
LIMIT #{pageNum}, #{numPerPage}
</if>
</select>
<select id="getScanBookInfoByUser" parameterType="map" resultType="com.pcloud.book.group.vo.UserBookInfoItemVO">
SELECT
u.book_group_id bookGroupId,
b.BOOK_NAME bookName,
g.pro_label_id proLabelId,
g.dep_label_id depLabelId
FROM
book_group_cipher_user u
LEFT JOIN book_group g ON u.book_group_id = g.id
LEFT JOIN book b ON g.book_id = b.BOOK_ID
WHERE
u.wx_user_id = #{wxUserId}
AND u.alt_id = #{altId}
GROUP BY
u.book_group_id
ORDER BY
g.id DESC
</select>
</mapper> </mapper>
\ 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.push.dao.impl.SelfPushItemDaoImpl" >
<resultMap id="BaseResultMap" type="com.pcloud.book.push.entity.SelfPushItem" >
<id column="id" property="id" jdbcType="BIGINT" />
<result column="push_id" property="pushId" jdbcType="BIGINT" />
<result column="item_type" property="itemType" jdbcType="INTEGER" />
<result column="text_content" property="textContent" jdbcType="VARCHAR" />
<result column="link_url" property="linkUrl" jdbcType="VARCHAR" />
<result column="link_title" property="linkTitle" jdbcType="VARCHAR" />
<result column="link_description" property="linkDescription" jdbcType="VARCHAR" />
<result column="link_image_url" property="linkImageUrl" jdbcType="VARCHAR" />
<result column="image_url" property="imageUrl" jdbcType="VARCHAR" />
<result column="app_id" property="appId" jdbcType="BIGINT" />
<result column="app_url" property="appUrl" jdbcType="VARCHAR" />
<result column="product_id" property="productId" jdbcType="BIGINT" />
<result column="product_url" property="productUrl" jdbcType="VARCHAR" />
<result column="push_status" property="pushStatus" jdbcType="INTEGER" />
<result column="create_user" property="createUser" jdbcType="BIGINT" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="update_user" property="updateUser" jdbcType="BIGINT" />
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP" />
</resultMap>
<sql id="Base_Column_List" >
id, push_id, item_type, text_content, link_url, link_title, link_description,
link_image_url, image_url, app_id, app_url, product_id, product_url, push_status,
create_user, create_time, update_user, update_time
</sql>
<insert id="insert" parameterType="com.pcloud.book.push.entity.SelfPushItem" useGeneratedKeys="true" keyProperty="id">
insert into self_push_item (push_id, item_type,
text_content, link_url, link_title,
link_description, link_image_url, image_url,
app_id, app_url, product_id,
product_url, push_status, create_user,
create_time, update_user, update_time
)
values (#{pushId,jdbcType=BIGINT}, #{itemType,jdbcType=INTEGER},
#{textContent,jdbcType=VARCHAR}, #{linkUrl,jdbcType=VARCHAR}, #{linkTitle,jdbcType=VARCHAR},
#{linkDescription,jdbcType=VARCHAR}, #{linkImageUrl,jdbcType=VARCHAR}, #{imageUrl,jdbcType=VARCHAR},
#{appId,jdbcType=BIGINT}, #{appUrl,jdbcType=VARCHAR}, #{productId,jdbcType=BIGINT},
#{productUrl,jdbcType=VARCHAR}, #{pushStatus,jdbcType=INTEGER}, #{createUser,jdbcType=BIGINT},
now(), #{updateUser,jdbcType=BIGINT}, now()
)
</insert>
<!--批量插入-->
<insert id="batchInsert" parameterType="com.pcloud.book.push.entity.SelfPushItem" useGeneratedKeys="true" keyProperty="id">
insert into self_push_item (
push_id,
item_type,
text_content,
link_url,
link_title,
link_description,
link_image_url,
image_url,
app_id,
app_url,
product_id,
product_url,
push_status,
create_user,
create_time,
update_user,
update_time
) values
<foreach collection="list" item="item" index="index" separator=",">
(
#{item.pushId,jdbcType=BIGINT},
#{item.itemType,jdbcType=INTEGER},
#{item.textContent,jdbcType=VARCHAR},
#{item.linkUrl,jdbcType=VARCHAR},
#{item.linkTitle,jdbcType=VARCHAR},
#{item.linkDescription,jdbcType=VARCHAR},
#{item.linkImageUrl,jdbcType=VARCHAR},
#{item.imageUrl,jdbcType=VARCHAR},
#{item.appId,jdbcType=BIGINT},
#{item.appUrl,jdbcType=VARCHAR},
#{item.productId,jdbcType=BIGINT},
#{item.productUrl,jdbcType=VARCHAR},
#{item.pushStatus,jdbcType=INTEGER},
#{item.createUser,jdbcType=BIGINT},
NOW(),
#{item.updateUser,jdbcType=BIGINT},
NOW()
)
</foreach>
</insert>
<select id="listSelfPushRecord" parameterType="map" resultType="com.pcloud.book.push.dto.SelfPushRecordDTO">
SELECT
p.alt_id altId,
p.id pushId,
i.id pushItemId,
i.item_type itemType,
i.text_content textContent,
i.link_url linkUrl,
i.link_title linkTitle,
i.link_description linkDescription,
i.link_image_url linkImageUrl,
i.image_url imageUrl,
i.app_id appId,
i.app_url appUrl,
i.product_id productId,
i.product_url productUrl,
i.push_status pushStatus,
i.create_time createTime
FROM
self_push_item i
LEFT JOIN self_push p ON i.push_id = p.id
WHERE
1 = 1
<if test="startTime != null and endTime != null">
AND i.create_time BETWEEN #{startTime} AND #{endTime}
</if>
<if test="pushStatus != null">
AND i.push_status = #{pushStatus}
</if>
ORDER BY
i.create_time DESC, i.id DESC
</select>
<update id="updatePushStatusByPushId" parameterType="map">
UPDATE self_push_item
SET push_status = #{pushStatus}
WHERE push_id = #{pushId}
</update>
</mapper>
\ 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.push.dao.impl.SelfPushDaoImpl" >
<resultMap id="BaseResultMap" type="com.pcloud.book.push.entity.SelfPush" >
<id column="id" property="id" jdbcType="BIGINT" />
<result column="alt_id" property="altId" jdbcType="VARCHAR" />
<result column="create_user" property="createUser" jdbcType="BIGINT" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="update_user" property="updateUser" jdbcType="BIGINT" />
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP" />
</resultMap>
<sql id="Base_Column_List" >
id, alt_id, create_user, create_time, update_user, update_time
</sql>
<insert id="insert" parameterType="com.pcloud.book.push.entity.SelfPush" useGeneratedKeys="true" keyProperty="id">
insert into self_push (id, alt_id, create_user,
create_time, update_user, update_time
)
values (#{id,jdbcType=BIGINT}, #{altId,jdbcType=VARCHAR}, #{createUser,jdbcType=BIGINT},
now(), #{updateUser,jdbcType=BIGINT}, now()
)
</insert>
</mapper>
\ 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.push.dao.impl.SelfPushUserDaoImpl" >
<resultMap id="BaseResultMap" type="com.pcloud.book.push.entity.SelfPushUser" >
<id column="id" property="id" jdbcType="BIGINT" />
<result column="push_id" property="pushId" jdbcType="BIGINT" />
<result column="wx_user_id" property="wxUserId" jdbcType="VARCHAR" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="create_user" property="createUser" jdbcType="BIGINT" />
</resultMap>
<sql id="Base_Column_List" >
id, push_id, wx_user_id, create_time, create_user
</sql>
<insert id="insert" parameterType="com.pcloud.book.push.entity.SelfPushUser" useGeneratedKeys="true" keyProperty="id">
insert into self_push_user (push_id, wx_user_id,
create_time, create_user)
values (#{pushId,jdbcType=BIGINT}, #{wxUserId,jdbcType=VARCHAR},
now(), #{createUser,jdbcType=BIGINT})
</insert>
<insert id="batchInsert" parameterType="com.pcloud.book.push.entity.SelfPushUser" useGeneratedKeys="true" keyProperty="id">
insert into self_push_user
(push_id,
wx_user_id,
create_time,
create_user
) values
<foreach collection="list" item="item" index="index" separator=",">
(
#{item.pushId,jdbcType=BIGINT},
#{item.wxUserId,jdbcType=VARCHAR},
now(),
#{item.createUser,jdbcType=BIGINT}
)
</foreach>
</insert>
<select id="listByPushId" parameterType="map" resultType="com.pcloud.book.group.vo.UserBookInfoVO">
SELECT
u.wx_user_id wxUserId,
p.alt_id altId
FROM
self_push_user u
LEFT JOIN self_push p ON u.push_id = p.id
WHERE
u.push_id = #{pushId}
</select>
<select id="getCountByPushId" resultType="integer" parameterType="long">
SELECT
COUNT(1)
FROM
self_push_user
WHERE
push_id = #{pushId}
</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