Commit b9191630 by 裴大威

1000948

parent 9854407b
package com.pcloud.book.consumer.wechatgroup;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.consumer.resource.ProductConsr;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.ResponseHandleUtil;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.wechatgroup.group.dto.GroupMemberStatisDTO;
import com.pcloud.wechatgroup.group.dto.GroupRobotDTO;
import com.pcloud.wechatgroup.group.dto.RobotReplyDTO;
import com.pcloud.wechatgroup.group.service.GroupMemberService;
import com.pcloud.wechatgroup.message.dto.GroupChatCountDTO;
import com.pcloud.wechatgroup.message.service.MessageService;
import com.pcloud.wechatgroup.monitor.service.MonitorService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
......@@ -23,38 +22,80 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Component("wechatGroupConsr")
public class WechatGroupConsr {
/**
* logger
*/
private static final Logger LOGGER = LoggerFactory.getLogger(ProductConsr.class);
@Autowired
private GroupMemberService groupMemberService;
@Autowired
private MessageService messageService;
@Autowired
private MonitorService monitorService;
/**
* 是否黑名单
*/
public Boolean isKickUser(String nickName, String wxGroupId) throws BizException {
log.info("【是否黑名单,<START>.[nickName]={}, wxGroupId:{}" , nickName, wxGroupId);
if (StringUtil.isBlank(nickName) || StringUtil.isBlank(wxGroupId)) {
return null;
}
try {
return ResponseHandleUtil.parseResponse(monitorService.isKickUser(nickName, wxGroupId), Boolean.class);
} catch (BizException e) {
log.warn("是否黑名单失败:" + e.getMessage(), e);
throw new BizException(e.getCode(), e.getMessage());
} catch (Exception e) {
log.error("是否黑名单.[isKickUser]:" + e.getMessage(), e);
throw new BookBizException(BookBizException.INVOKE_RES_ERROR, "服务内部错误,请稍后重试");
} finally {
log.info("【是否黑名单,<END>");
}
}
/**
* 根据群号获取机器人微信号
*/
public String getRobotIdByGroupId(String groupId) throws BizException {
LOGGER.info("【根据群号获取机器人微信号,<START>.[groupId]=" + groupId + "]");
log.info("【根据群号获取机器人微信号,<START>.[groupId]=" + groupId + "]");
if (groupId == null) {
return null;
}
try {
return ResponseHandleUtil.parseResponse(groupMemberService.getRobotIdByGroupId(groupId), String.class);
} catch (BizException e) {
LOGGER.warn("根据群号获取机器人微信号失败:" + e.getMessage(), e);
log.warn("根据群号获取机器人微信号失败:" + e.getMessage(), e);
throw new BizException(e.getCode(), e.getMessage());
} catch (Exception e) {
log.error("根据群号获取机器人微信号.[getRobotIdByGroupId]:" + e.getMessage(), e);
throw new BookBizException(BookBizException.INVOKE_RES_ERROR, "服务内部错误,请稍后重试");
} finally {
log.info("【根据群号获取机器人微信号,<END>");
}
}
/**
* 根据昵称获取微信id
*/
public List<String> getWxUserIdsByNickName(String nickName) throws BizException {
log.info("【根据昵称获取微信id,<START>.[nickName]=" + nickName + "]");
if (StringUtil.isBlank(nickName)) {
return null;
}
try {
return ResponseHandleUtil.parseList(groupMemberService.getWxUserIdsByNickName(nickName), String.class);
} catch (BizException e) {
log.warn("根据昵称获取微信id失败:" + e.getMessage(), e);
throw new BizException(e.getCode(), e.getMessage());
} catch (Exception e) {
LOGGER.error("根据群号获取机器人微信号.[getRobotIdByGroupId]:" + e.getMessage(), e);
log.error("根据昵称获取微信id.[getWxUserIdsByNickName]:" + e.getMessage(), e);
throw new BookBizException(BookBizException.INVOKE_RES_ERROR, "服务内部错误,请稍后重试");
} finally {
LOGGER.info("【根据群号获取机器人微信号,<END>");
log.info("【根据昵称获取微信id,<END>");
}
}
......@@ -66,7 +107,7 @@ public class WechatGroupConsr {
try {
return ResponseHandleUtil.parseMapResponse(groupMemberService.mapGroupMemberStatisInfo(weixinGroupIds), String.class, GroupMemberStatisDTO.class);
} catch (Exception e) {
LOGGER.error("获取累计进群人数与今日进群人数.[listGroupMemberStatisInfo]:" + e.getMessage(), e);
log.error("获取累计进群人数与今日进群人数.[listGroupMemberStatisInfo]:" + e.getMessage(), e);
}
return null;
}
......@@ -79,7 +120,7 @@ public class WechatGroupConsr {
try {
return ResponseHandleUtil.parseMapResponse(messageService.getChatCountByGroup(groupQrcodeIds, bookGroupId), Long.class, GroupChatCountDTO.class);
} catch (Exception e) {
LOGGER.error("获取活跃人数与总发言数.[getChatCountByGroup]:" + e.getMessage(), e);
log.error("获取活跃人数与总发言数.[getChatCountByGroup]:" + e.getMessage(), e);
}
return null;
}
......@@ -92,7 +133,7 @@ public class WechatGroupConsr {
try {
return ResponseHandleUtil.parseMapResponse(groupMemberService.mapOutGroupRate(wxGroupIds), String.class, BigDecimal.class);
} catch (Exception e) {
LOGGER.error("获取退群率失败.[mapOutGroupRate]:" + e.getMessage(), e);
log.error("获取退群率失败.[mapOutGroupRate]:" + e.getMessage(), e);
}
return null;
}
......@@ -102,7 +143,7 @@ public class WechatGroupConsr {
try {
groupMemberService.addGroupManagers(wxGroupId, altId);
} catch (Exception e) {
LOGGER.error("上传群二维码时根据群ID添加群管理员(群主,机器人等)失败.[addGroupManagers]:" + e.getMessage(), e);
log.error("上传群二维码时根据群ID添加群管理员(群主,机器人等)失败.[addGroupManagers]:" + e.getMessage(), e);
}
}
......@@ -112,7 +153,7 @@ public class WechatGroupConsr {
List<String> wxids = ResponseHandleUtil.parseListResponse(groupMemberService.listAllRobotWxId(), String.class);
return wxids;
} catch (Exception e) {
LOGGER.error("获取所有机器人微信号失败.[listAllRobotWxId]:" + e.getMessage(), e);
log.error("获取所有机器人微信号失败.[listAllRobotWxId]:" + e.getMessage(), e);
}
return null;
}
......@@ -122,7 +163,7 @@ public class WechatGroupConsr {
try {
groupMemberService.addFirstRobotReplyRecord(robotReplyDTO);
} catch (Exception e) {
LOGGER.error("设置第一个关键词回复失败.[addFirstRobotReplyRecord]:" + e.getMessage(), e);
log.error("设置第一个关键词回复失败.[addFirstRobotReplyRecord]:" + e.getMessage(), e);
}
}
......@@ -131,7 +172,7 @@ public class WechatGroupConsr {
try {
return ResponseHandleUtil.parseResponse(groupMemberService.getRobotInfoByWxUserId(wxRobotId), GroupRobotDTO.class);
} catch (Exception e) {
LOGGER.error("获取机器人信息失败.[getRobotInfoByWxUserId]:" + e.getMessage(), e);
log.error("获取机器人信息失败.[getRobotInfoByWxUserId]:" + e.getMessage(), e);
}
return null;
}
......@@ -140,7 +181,7 @@ public class WechatGroupConsr {
* 根据群号获取群主微信号
*/
public String getMasterIdByGroupId(String groupId) throws BizException {
LOGGER.info("【根据群号获取群主微信号,<START>.[groupId]=" + groupId + "]");
log.info("【根据群号获取群主微信号,<START>.[groupId]=" + groupId + "]");
String masterId = null;
if (groupId == null) {
return null;
......@@ -149,13 +190,13 @@ public class WechatGroupConsr {
masterId = ResponseHandleUtil.parseResponse(groupMemberService.getMasterIdByGroupId(groupId), String.class);
return masterId;
} catch (BizException e) {
LOGGER.warn("根据群号获取群主微信号失败:" + e.getMessage(), e);
log.warn("根据群号获取群主微信号失败:" + e.getMessage(), e);
throw new BizException(e.getCode(), e.getMessage());
} catch (Exception e) {
LOGGER.error("根据群号获取群主微信号.[getMasterIdByGroupId]:" + e.getMessage(), e);
log.error("根据群号获取群主微信号.[getMasterIdByGroupId]:" + e.getMessage(), e);
throw new BookBizException(BookBizException.INVOKE_RES_ERROR, "服务内部错误,请稍后重试");
} finally {
LOGGER.info("【根据群号获取群主微信号,<END>--masterId=" + masterId);
log.info("【根据群号获取群主微信号,<END>--masterId=" + masterId);
}
}
......@@ -165,7 +206,7 @@ public class WechatGroupConsr {
try {
map = ResponseHandleUtil.parseMapResponse(messageService.get7DayActiveUserCountByClassify(classifyIds), Long.class, Integer.class);
} catch (Exception e) {
LOGGER.error("获取最近7天活跃人数失败.[get7DayActiveUserCountByClassify]:" + e.getMessage(), e);
log.error("获取最近7天活跃人数失败.[get7DayActiveUserCountByClassify]:" + e.getMessage(), e);
}
if (map == null) {
return new HashMap<>();
......@@ -183,7 +224,7 @@ public class WechatGroupConsr {
try {
map = ResponseHandleUtil.parseMapResponse(groupMemberService.getSendDailyRobotByGroupIds(weixinIds), String.class, String.class);
} catch (Exception e) {
LOGGER.error("根据群id集合批量获取发消息的小号.[getRobotIdByWeixinIdBatch]:" + e.getMessage(), e);
log.error("根据群id集合批量获取发消息的小号.[getRobotIdByWeixinIdBatch]:" + e.getMessage(), e);
}
if (map == null) {
return new HashMap<>();
......
......@@ -215,6 +215,8 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz {
PushAddUserMessageDTO pushAddUserMessageDTO = new PushAddUserMessageDTO();
pushAddUserMessageDTO.setWeixinGroupId(weixinGroupId);
pushAddUserMessageDTO.setTime(System.currentTimeMillis());
pushAddUserMessageDTO.setNickName(nickName);
pushAddUserMessageDTO.setMemberCount(memberCount);
bookMQProducer.pushAddUserMessageTopic(pushAddUserMessageDTO);
}
......
......@@ -2,36 +2,20 @@ package com.pcloud.book.group.dto;
import java.io.Serializable;
import lombok.Data;
/**
* @author lily
* @date 2019/5/8 21:48
*/
@Data
public class PushAddUserMessageDTO implements Serializable {
private String weixinGroupId;
private Long time;
public String getWeixinGroupId() {
return weixinGroupId;
}
public void setWeixinGroupId(String weixinGroupId) {
this.weixinGroupId = weixinGroupId;
}
public Long getTime() {
return time;
}
private Integer memberCount;
public void setTime(Long time) {
this.time = time;
}
private String nickName;
@Override
public String toString() {
return "PushAddUserMessageDTO{" +
"weixinGroupId='" + weixinGroupId + '\'' +
", time=" + time +
'}';
}
}
package com.pcloud.book.keywords.biz;
import com.pcloud.book.group.dto.PushAddUserMessageDTO;
import com.pcloud.book.keywords.vo.GuideVO;
import com.pcloud.book.keywords.vo.SetGuideVO;
import com.pcloud.book.keywords.vo.UpdateGuideVO;
......@@ -42,5 +43,5 @@ public interface BookGuideBiz {
* @Desr: 推送欢迎语消息
* @Date:2019/5/5 11:22
*/
void sendGuideMessage(String weixinGroupId);
void sendGuideMessage(PushAddUserMessageDTO pushAddUserMessageDTO);
}
package com.pcloud.book.keywords.biz.impl;
import com.google.common.collect.Maps;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.clock.check.BookClockCheck;
import com.pcloud.book.clock.dao.BookClockKeywordDao;
......@@ -14,6 +16,7 @@ import com.pcloud.book.group.dao.BookGroupDao;
import com.pcloud.book.group.dao.GroupQrcodeDao;
import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.GroupClassifyQrcodeDTO;
import com.pcloud.book.group.dto.PushAddUserMessageDTO;
import com.pcloud.book.group.entity.AppTouchRecord;
import com.pcloud.book.group.entity.GroupQrcode;
import com.pcloud.book.group.enums.TouchTypeEnum;
......@@ -35,21 +38,28 @@ import com.pcloud.book.keywords.vo.UpdateGuideVO;
import com.pcloud.channelcenter.wechat.dto.AccountSettingDto;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.utils.ListUtils;
import com.sdk.wxgroup.GroupInfoVO;
import com.sdk.wxgroup.WxGroupSDK;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import lombok.extern.slf4j.Slf4j;
/**
* @author lily
* @date 2019/4/23 15:47
*/
@Slf4j
@Component("bookGuideBiz")
public class BookGuideBizImpl implements BookGuideBiz {
@Autowired
......@@ -193,7 +203,8 @@ public class BookGuideBizImpl implements BookGuideBiz {
@Override
@ParamLog("推送欢迎语消息")
public void sendGuideMessage(String weixinGroupId) {
public void sendGuideMessage(PushAddUserMessageDTO pushAddUserMessageDTO) {
final String weixinGroupId = pushAddUserMessageDTO.getWeixinGroupId();
//通过群id获取对应基本信息
GroupClassifyQrcodeDTO classifyQrcodeInfo = bookGroupClassifyBiz.getClassifyQrcodeInfo(weixinGroupId);
if(classifyQrcodeInfo == null){
......@@ -206,6 +217,36 @@ public class BookGuideBizImpl implements BookGuideBiz {
//获取推送消息机器人
String robotId = wechatGroupConsr.getRobotIdByGroupId(weixinGroupId);
//String robotId = "wxid_e6zsl8oohcnl22";
// 判断是否需要发送
boolean canSend = false;
// 查看群成员
GroupInfoVO groupInfoVO = WxGroupSDK.getGroupInfo(weixinGroupId, robotId);
if (!CollectionUtils.isEmpty(groupInfoVO.getIdList())) {
// 查看该用户weixinid
final List<String> nickName = wechatGroupConsr.getWxUserIdsByNickName(pushAddUserMessageDTO.getNickName());
if(!CollectionUtils.isEmpty(nickName)) {
final Map<String, Boolean> map = Maps.newHashMap();
for (String s : groupInfoVO.getIdList()) {
map.put(s, true);
}
for (String s : nickName) {
if (map.get(s)) {
// 若在群设置true
canSend = true;
break;
}
}
}
}
// 判断是否黑名单
final Boolean kickUser = wechatGroupConsr.isKickUser(pushAddUserMessageDTO.getNickName(), weixinGroupId);
log.info("[推送欢迎语消息]:pushAddUserMessageDTO:{},kickUser:{}", pushAddUserMessageDTO, kickUser);
// 在群,且非黑名单
canSend = canSend && !kickUser;
if (!canSend) {
log.info("[推送欢迎语消息]:不推送");
return;
}
List<ReplyMessageVO> replyMessages = null;
if (classifyGuide != null) {
replyMessages = bookGuideReplyDao.getReplyMessage(classifyGuide.getId());
......@@ -216,7 +257,7 @@ public class BookGuideBizImpl implements BookGuideBiz {
AccountSettingDto wechatInfo = qrcodeSceneConsr.getWechatInfo(classifyQrcodeInfo.getChannelId());
//获取关键词信息(改成10个了)
List<KeywordDTO> keywords = bookKeywordBiz.listFiveKeyword(classifyQrcodeInfo.getClassifyId(), classifyQrcodeInfo.getBookGroupId());
Boolean isHaveKeywords = ListUtils.isEmpty(keywords) ? false : true;
Boolean isHaveKeywords = !ListUtils.isEmpty(keywords);
if (ListUtils.isEmpty(replyMessages)) {
//获取群名称
GroupQrcodeBaseInfoVO groupInfo = groupQrcodeBiz.getBaseById(classifyQrcodeInfo.getGroupQrcodeId());
......@@ -230,6 +271,7 @@ public class BookGuideBizImpl implements BookGuideBiz {
//新增欢迎语应用触发记录
addGuideAppTouchRecord(replyMessages,weixinGroupId,classifyQrcodeInfo.getBookGroupId(),classifyQrcodeInfo.getClassifyId());
}
//获取关键词信息(改成10个了)
SendWeixinRequestTools.sendKeywordsInfo(keywords, robotId, weixinGroupId);
if (bookGuide != null && bookGuide.getIsRecommend() != null && bookGuide.getIsRecommend() == 1) {
//推送公众号消息
......
package com.pcloud.book.keywords.biz.impl;
import com.pcloud.appcenter.app.dto.AppDto;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.book.biz.BookKeywordWarehouseBiz;
import com.pcloud.book.consumer.app.AppConsr;
import com.pcloud.book.consumer.channel.QrcodeSceneConsr;
import com.pcloud.book.consumer.resource.ProductConsr;
import com.pcloud.book.consumer.wechatgroup.WechatGroupConsr;
......@@ -32,6 +34,7 @@ import com.pcloud.book.keywords.vo.ListKeywordVO;
import com.pcloud.book.keywords.vo.SetKeywordVO;
import com.pcloud.book.keywords.vo.SetRankVO;
import com.pcloud.book.keywords.vo.UpdateKeywordVO;
import com.pcloud.channelcenter.base.constants.ChannelEnum;
import com.pcloud.channelcenter.wechat.dto.AccountSettingDto;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.page.PageBeanNew;
......@@ -40,6 +43,7 @@ import com.pcloud.common.utils.DateUtils;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.cache.redis.JedisClusterUtils;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.resourcecenter.product.dto.ProductDto;
import com.pcloud.wechatgroup.group.dto.RobotReplyDTO;
import org.springframework.beans.BeanUtils;
......@@ -80,6 +84,8 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
@Autowired
private ProductConsr productConsr;
@Autowired
private AppConsr appConsr;
@Autowired
private AppTouchRecordDao appTouchRecordDao;
@Autowired
private GroupQrcodeDao groupQrcodeDao;
......@@ -162,7 +168,25 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "该社群码不存在!");
}
if (null != updateKeywordVO.getAddWarehouse() && 1 == updateKeywordVO.getAddWarehouse()) {
this.bookKeywordDao.updateIsWarehouse(updateKeywordVO.getBookKeywordId());
SetKeywordVO v = new SetKeywordVO();
BeanUtils.copyProperties(updateKeywordVO, v);
if (ChannelEnum.APP.value.equals(updateKeywordVO.getServeType())) {
final AppDto baseById = appConsr.getBaseById(updateKeywordVO.getServeId());
if(null == baseById) {
throw new BookBizException(BookBizException.ID_NOT_EXIST, "应用不存在");
}
v.setTypeCode(baseById.getTypeCode());
}
if (ChannelEnum.PRODUCT.value.equals(updateKeywordVO.getServeType())) {
final ProductDto proBaseById = productConsr.getProBaseById(updateKeywordVO.getServeId());
if(null == proBaseById) {
throw new BookBizException(BookBizException.ID_NOT_EXIST, "作品不存在");
}
v.setTypeCode(proBaseById.getProductTypeCode());
}
v.setUserId(partyId);
final Long warehouseId = this.bookKeywordWarehouseBiz.addBookKeyword(v);
this.bookKeywordDao.updateIsWarehouse(updateKeywordVO.getBookKeywordId(), warehouseId);
}
Keyword keyword = new Keyword();
BeanUtils.copyProperties(updateKeywordVO, keyword);
......@@ -171,7 +195,7 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
keywordDao.update(keyword);
//上架商品
List<Long> productIds = new ArrayList<>();
if (ReplyTypeEnum.APP.value.equals(keyword.getReplyType()) && "PRODUCT".equalsIgnoreCase(keyword.getServeType())) {
if (ReplyTypeEnum.APP.value.equals(keyword.getReplyType()) && ChannelEnum.PRODUCT.value.equalsIgnoreCase(keyword.getServeType())) {
productIds.add(keyword.getServeId());
}
productConsr.productAutoOnShelves(bookGroupDTO.getChannelId(), productIds);
......
......@@ -67,7 +67,7 @@ public interface BookKeywordDao extends BaseDao<BookKeyword> {
* 更新仓库值
* @param bookKeywordId
*/
void updateIsWarehouse(Long bookKeywordId);
void updateIsWarehouse(Long bookKeywordId, Long warehouseId);
/**
* @Author:lili
......
package com.pcloud.book.keywords.dao.impl;
import com.google.common.collect.Maps;
import com.pcloud.book.keywords.dao.BookKeywordDao;
import com.pcloud.book.keywords.dto.KeywordDTO;
import com.pcloud.book.keywords.dto.ReplyKeywordDTO;
......@@ -73,8 +75,11 @@ public class BookKeywordDaoImpl extends BaseDaoImpl<BookKeyword> implements Book
}
@Override
public void updateIsWarehouse(Long bookKeywordId) {
this.getSqlSession().update("updateIsWarehouse", bookKeywordId);
public void updateIsWarehouse(Long bookKeywordId, Long warehouseId) {
final Map<String, Object> map = Maps.newHashMap();
map.put("bookKeywordId", bookKeywordId);
map.put("warehouseId", warehouseId);
this.getSqlSession().update("updateIsWarehouse", map);
}
@Override
......
......@@ -37,7 +37,7 @@ public class PushAddUserMessageListemer {
if (time < 5000) {
Thread.sleep(5000 - time);
}
bookGuideBiz.sendGuideMessage(pushAddUserMessageDTO.getWeixinGroupId());
bookGuideBiz.sendGuideMessage(pushAddUserMessageDTO);
} catch (Exception e) {
LOGGER.error("发送欢迎语消息失败" + e.getMessage(), e);
}
......
......@@ -163,7 +163,7 @@
</select>
<update id="updateIsWarehouse" parameterType="long" >
update book_keyword set is_warehouse =1 where id = #{bookKeywordId}
update book_keyword set is_warehouse = 1, warehouse_id = #{warehouseId} where id = #{bookKeywordId}
</update>
<select id="getByBookKeyword" resultType="KeywordVO" parameterType="Long">
......
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