Commit c63ce39d by 裴大威

fix 处理多个分类加一个机器人时关键词回复和暗号消息识别

parent ae1652f2
...@@ -271,5 +271,5 @@ public interface BookGroupBiz { ...@@ -271,5 +271,5 @@ public interface BookGroupBiz {
/** /**
* 根据微信id和机器人id获取分类集合 * 根据微信id和机器人id获取分类集合
*/ */
List<Long> getClassifyIdsByWxIdAndAltId(String wxId,String altId); List<JoinGroupCipherDTO> getClassifyIdsByWxIdAndAltId(String wxId,String altId);
} }
...@@ -106,6 +106,11 @@ public interface BookGroupClassifyBiz { ...@@ -106,6 +106,11 @@ public interface BookGroupClassifyBiz {
List<ListClassify4WechatVO> listClassify4Wechat(Long bookGroupId, Long wechatUserId); List<ListClassify4WechatVO> listClassify4Wechat(Long bookGroupId, Long wechatUserId);
/** /**
* 批量获取分类信息
*/
List<GroupClassifyQrcodeDTO> listClassifyQrcodeInfo(List<Long> classifyIds);
/**
* @Author:lili * @Author:lili
* @Desr:客户端根据群分类获取二维码 * @Desr:客户端根据群分类获取二维码
* @Date:2019/4/29 17:21 * @Date:2019/4/29 17:21
......
package com.pcloud.book.group.biz.impl; package com.pcloud.book.group.biz.impl;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.pcloud.appcenter.app.dto.AppDto; import com.pcloud.appcenter.app.dto.AppDto;
import com.pcloud.appcenter.base.dto.AppPriceCacheDTO; import com.pcloud.appcenter.base.dto.AppPriceCacheDTO;
...@@ -75,6 +77,7 @@ import org.springframework.beans.factory.annotation.Value; ...@@ -75,6 +77,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -1177,15 +1180,12 @@ public class BookGroupBizImpl implements BookGroupBiz { ...@@ -1177,15 +1180,12 @@ public class BookGroupBizImpl implements BookGroupBiz {
@ParamLog("根据微信id和机器人id获取分类集合") @ParamLog("根据微信id和机器人id获取分类集合")
@Override @Override
public List<Long> getClassifyIdsByWxIdAndAltId(String wxId, String altId) { public List<JoinGroupCipherDTO> getClassifyIdsByWxIdAndAltId(String wxId, String altId) {
if (StringUtil.isEmpty(wxId) || StringUtil.isEmpty(altId)) { if (StringUtil.isEmpty(wxId) || StringUtil.isEmpty(altId)) {
return new ArrayList<>(); return new ArrayList<>();
} }
List<Long> list = joinGroupCipherDao.getClassifyIdsByWxIdAndAltId(wxId, altId); List<JoinGroupCipherDTO> list = joinGroupCipherDao.getClassifyIdsByWxIdAndAltId(wxId, altId);
if (list == null) { return CollectionUtils.isEmpty(list) ? Lists.newArrayList() : list;
return new ArrayList<>();
}
return list;
} }
} }
...@@ -430,6 +430,12 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz { ...@@ -430,6 +430,12 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz {
} }
@Override @Override
@ParamLog("获取分类二维码相关标识")
public List<GroupClassifyQrcodeDTO> listClassifyQrcodeInfo(List<Long> classifyIds) {
return bookGroupClassifyDao.listClassifyQrcodeInfo(classifyIds);
}
@Override
@ParamLog("客户端获取分类信息") @ParamLog("客户端获取分类信息")
public List<ListClassify4WechatVO> listClassify4Wechat(Long bookGroupId, Long wechatUserId) { public List<ListClassify4WechatVO> listClassify4Wechat(Long bookGroupId, Long wechatUserId) {
//获取排序方式 //获取排序方式
......
...@@ -132,6 +132,11 @@ public interface BookGroupClassifyDao extends BaseDao<BookGroupClassify> { ...@@ -132,6 +132,11 @@ public interface BookGroupClassifyDao extends BaseDao<BookGroupClassify> {
GroupClassifyQrcodeDTO getClassifyQrcodeInfo(String weixinGroupId); GroupClassifyQrcodeDTO getClassifyQrcodeInfo(String weixinGroupId);
/** /**
* 批量获取分类信息
*/
List<GroupClassifyQrcodeDTO> listClassifyQrcodeInfo(List<Long> classifyIds);
/**
* @Author:lili * @Author:lili
* @Desr:获取所有的分类 * @Desr:获取所有的分类
* @Date:2019/4/29 11:23 * @Date:2019/4/29 11:23
......
package com.pcloud.book.group.dao; package com.pcloud.book.group.dao;
import com.pcloud.book.group.dto.JoinGroupCiperDTO; import com.pcloud.book.group.dto.JoinGroupCipherDTO;
import com.pcloud.book.group.entity.JoinGroupCipher; import com.pcloud.book.group.entity.JoinGroupCipher;
import com.pcloud.common.core.dao.BaseDao; import com.pcloud.common.core.dao.BaseDao;
...@@ -11,9 +11,9 @@ public interface JoinGroupCipherDao extends BaseDao<JoinGroupCipher> { ...@@ -11,9 +11,9 @@ public interface JoinGroupCipherDao extends BaseDao<JoinGroupCipher> {
JoinGroupCipher getByCipher(String cipher); JoinGroupCipher getByCipher(String cipher);
JoinGroupCiperDTO getDTOByCipher(String cipher); JoinGroupCipherDTO getDTOByCipher(String cipher);
void updateCipherStateToUsed(String cipher, String wxId); void updateCipherStateToUsed(String cipher, String wxId);
List<Long> getClassifyIdsByWxIdAndAltId(String wxId, String altId); List<JoinGroupCipherDTO> getClassifyIdsByWxIdAndAltId(String wxId, String altId);
} }
...@@ -110,6 +110,11 @@ public class BookGroupClassifyDaoImpl extends BaseDaoImpl<BookGroupClassify> imp ...@@ -110,6 +110,11 @@ public class BookGroupClassifyDaoImpl extends BaseDaoImpl<BookGroupClassify> imp
} }
@Override @Override
public List<GroupClassifyQrcodeDTO> listClassifyQrcodeInfo(List<Long> classifyIds) {
return this.getSqlSession().selectList(this.getStatement("listClassifyQrcodeInfo"), classifyIds);
}
@Override
public List<ListClassify4WechatVO> listClassify4Wechat(Long bookGroupId, Integer rankType) { public List<ListClassify4WechatVO> listClassify4Wechat(Long bookGroupId, Integer rankType) {
Map<String, Object> paramMap = new HashMap(); Map<String, Object> paramMap = new HashMap();
paramMap.put("bookGroupId", bookGroupId); paramMap.put("bookGroupId", bookGroupId);
......
package com.pcloud.book.group.dao.impl; package com.pcloud.book.group.dao.impl;
import com.pcloud.book.group.dao.JoinGroupCipherDao; import com.pcloud.book.group.dao.JoinGroupCipherDao;
import com.pcloud.book.group.dto.JoinGroupCiperDTO; import com.pcloud.book.group.dto.JoinGroupCipherDTO;
import com.pcloud.book.group.entity.JoinGroupCipher; import com.pcloud.book.group.entity.JoinGroupCipher;
import com.pcloud.common.core.dao.BaseDaoImpl; import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -31,7 +31,7 @@ public class JoinGroupCipherDaoImpl extends BaseDaoImpl<JoinGroupCipher> impleme ...@@ -31,7 +31,7 @@ public class JoinGroupCipherDaoImpl extends BaseDaoImpl<JoinGroupCipher> impleme
} }
@Override @Override
public JoinGroupCiperDTO getDTOByCipher(String cipher) { public JoinGroupCipherDTO getDTOByCipher(String cipher) {
return this.getSqlSession().selectOne(this.getStatement("getDTOByCipher"), cipher); return this.getSqlSession().selectOne(this.getStatement("getDTOByCipher"), cipher);
} }
...@@ -44,7 +44,7 @@ public class JoinGroupCipherDaoImpl extends BaseDaoImpl<JoinGroupCipher> impleme ...@@ -44,7 +44,7 @@ public class JoinGroupCipherDaoImpl extends BaseDaoImpl<JoinGroupCipher> impleme
} }
@Override @Override
public List<Long> getClassifyIdsByWxIdAndAltId(String wxId, String altId) { public List<JoinGroupCipherDTO> getClassifyIdsByWxIdAndAltId(String wxId, String altId) {
Map<String,Object> map=new HashMap<>(); Map<String,Object> map=new HashMap<>();
map.put("wxId",wxId); map.put("wxId",wxId);
map.put("altId",altId); map.put("altId",altId);
......
...@@ -3,7 +3,7 @@ package com.pcloud.book.group.dto; ...@@ -3,7 +3,7 @@ package com.pcloud.book.group.dto;
import lombok.Data; import lombok.Data;
@Data @Data
public class JoinGroupCiperDTO { public class JoinGroupCipherDTO {
private String cipher; private String cipher;
......
...@@ -202,10 +202,11 @@ public class SendWeixinRequestTools { ...@@ -202,10 +202,11 @@ public class SendWeixinRequestTools {
if (StringUtil.isEmpty(url)) { if (StringUtil.isEmpty(url)) {
return url; return url;
} }
final String s = "qrcode_id=" + groupQrcodeId + "&classify_id=" + classifyId + (null == bookGroupId ? "" : "&book_group_id=" + bookGroupId);
if (url.contains("?")) { if (url.contains("?")) {
url = url + "&qrcode_id=" + groupQrcodeId + "&classify_id=" + classifyId + "&book_group_id=" + bookGroupId; url = url + "&" + s;
} else { } else {
url = url + "?qrcode_id=" + groupQrcodeId + "&classify_id=" + classifyId + "&book_group_id=" + bookGroupId; url = url + "?" + s;
} }
return url; return url;
} }
......
...@@ -16,13 +16,12 @@ import com.pcloud.book.group.dao.GroupQrcodeDao; ...@@ -16,13 +16,12 @@ import com.pcloud.book.group.dao.GroupQrcodeDao;
import com.pcloud.book.group.dao.JoinGroupCipherDao; import com.pcloud.book.group.dao.JoinGroupCipherDao;
import com.pcloud.book.group.dto.BookGroupDTO; import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.GroupClassifyQrcodeDTO; import com.pcloud.book.group.dto.GroupClassifyQrcodeDTO;
import com.pcloud.book.group.dto.JoinGroupCiperDTO; import com.pcloud.book.group.dto.JoinGroupCipherDTO;
import com.pcloud.book.group.dto.PushAddUserMessageDTO; import com.pcloud.book.group.dto.PushAddUserMessageDTO;
import com.pcloud.book.group.entity.AppTouchRecord; import com.pcloud.book.group.entity.AppTouchRecord;
import com.pcloud.book.group.entity.GroupQrcode; import com.pcloud.book.group.entity.GroupQrcode;
import com.pcloud.book.group.enums.TouchTypeEnum; import com.pcloud.book.group.enums.TouchTypeEnum;
import com.pcloud.book.group.tools.SendWeixinRequestTools; import com.pcloud.book.group.tools.SendWeixinRequestTools;
import com.pcloud.book.group.vo.GroupQrcode4ClassifyVO;
import com.pcloud.book.group.vo.GroupQrcodeBaseInfoVO; import com.pcloud.book.group.vo.GroupQrcodeBaseInfoVO;
import com.pcloud.book.keywords.biz.BookGuideBiz; import com.pcloud.book.keywords.biz.BookGuideBiz;
import com.pcloud.book.keywords.biz.BookKeywordBiz; import com.pcloud.book.keywords.biz.BookKeywordBiz;
...@@ -40,8 +39,6 @@ import com.pcloud.book.keywords.vo.UpdateGuideVO; ...@@ -40,8 +39,6 @@ import com.pcloud.book.keywords.vo.UpdateGuideVO;
import com.pcloud.channelcenter.wechat.dto.AccountSettingDto; import com.pcloud.channelcenter.wechat.dto.AccountSettingDto;
import com.pcloud.common.core.aspect.ParamLog; import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.utils.ListUtils; import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.UUIDUitl;
import com.pcloud.common.utils.rsa.AESCodec;
import com.pcloud.common.utils.string.StringUtil; import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.wechatgroup.message.dto.AgreeAddUserDTO; import com.pcloud.wechatgroup.message.dto.AgreeAddUserDTO;
import com.sdk.wxgroup.AddToGroupVO; import com.sdk.wxgroup.AddToGroupVO;
...@@ -122,13 +119,13 @@ public class BookGuideBizImpl implements BookGuideBiz { ...@@ -122,13 +119,13 @@ public class BookGuideBizImpl implements BookGuideBiz {
log.info("[同意加好友发送欢迎语] : {}", vo); log.info("[同意加好友发送欢迎语] : {}", vo);
WxGroupSDK.sendTextMessage(vo); WxGroupSDK.sendTextMessage(vo);
// 根据暗号获取分类id和bookGroupId推送关键词欢迎语 // 根据暗号获取分类id和bookGroupId推送关键词欢迎语
final JoinGroupCiperDTO dto = joinGroupCipherDao.getDTOByCipher(cipher); final JoinGroupCipherDTO dto = joinGroupCipherDao.getDTOByCipher(cipher);
List<KeywordDTO> keywords = bookKeywordBiz.listFiveKeyword(dto.getClassifyId(), dto.getBookGroupId()); List<KeywordDTO> keywords = bookKeywordBiz.listFiveKeyword(dto.getClassifyId(), dto.getBookGroupId());
SendWeixinRequestTools.sendKeywordsInfo(keywords, agreeAddUserDTO.getRobotWxId(), agreeAddUserDTO.getUserWxId(), agreeAddUserDTO.getIp()); SendWeixinRequestTools.sendKeywordsInfo(keywords, agreeAddUserDTO.getRobotWxId(), agreeAddUserDTO.getUserWxId(), agreeAddUserDTO.getIp());
// 拉群 // 拉群
final String wxGroupId = bookGroupClassifyBiz.getWxGroupIdByClassifyIdAndWechatId(dto.getClassifyId(), dto.getWechatUserId()); final String wxGroupId = bookGroupClassifyBiz.getWxGroupIdByClassifyIdAndWechatId(dto.getClassifyId(), dto.getWechatUserId());
if (StringUtil.isBlank(wxGroupId)) { if (StringUtil.isBlank(wxGroupId)) {
log.info("[同意加好友发送欢迎语] 拉群 没有找到群 bookGroupClassifyBiz.getGroupQrcode4ClassifyWechat JoinGroupCiperDTO :{}", dto); log.info("[同意加好友发送欢迎语] 拉群 没有找到群 bookGroupClassifyBiz.getGroupQrcode4ClassifyWechat JoinGroupCipherDTO :{}", dto);
return; return;
} }
AddToGroupVO vo1 = new AddToGroupVO(); AddToGroupVO vo1 = new AddToGroupVO();
...@@ -280,7 +277,7 @@ public class BookGuideBizImpl implements BookGuideBiz { ...@@ -280,7 +277,7 @@ public class BookGuideBizImpl implements BookGuideBiz {
log.info("[推送欢迎语消息]:pushAddUserMessageDTO:{},kickUser:{}", pushAddUserMessageDTO, kickUser); log.info("[推送欢迎语消息]:pushAddUserMessageDTO:{},kickUser:{}", pushAddUserMessageDTO, kickUser);
// 在群,且非黑名单 // 在群,且非黑名单
// canSend = canSend && !kickUser; // canSend = canSend && !kickUser;
if (kickUser) { if (null != kickUser && kickUser) {
log.info("[推送欢迎语消息]:不推送"); log.info("[推送欢迎语消息]:不推送");
return; return;
} }
......
...@@ -2,6 +2,7 @@ package com.pcloud.book.keywords.biz.impl; ...@@ -2,6 +2,7 @@ package com.pcloud.book.keywords.biz.impl;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.pcloud.appcenter.app.dto.AppDto; import com.pcloud.appcenter.app.dto.AppDto;
import com.pcloud.book.base.exception.BookBizException; import com.pcloud.book.base.exception.BookBizException;
...@@ -10,6 +11,7 @@ import com.pcloud.book.consumer.app.AppConsr; ...@@ -10,6 +11,7 @@ import com.pcloud.book.consumer.app.AppConsr;
import com.pcloud.book.consumer.channel.QrcodeSceneConsr; import com.pcloud.book.consumer.channel.QrcodeSceneConsr;
import com.pcloud.book.consumer.resource.ProductConsr; import com.pcloud.book.consumer.resource.ProductConsr;
import com.pcloud.book.consumer.wechatgroup.WechatGroupConsr; import com.pcloud.book.consumer.wechatgroup.WechatGroupConsr;
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.dao.AppTouchRecordDao; import com.pcloud.book.group.dao.AppTouchRecordDao;
import com.pcloud.book.group.dao.BookGroupClassifyDao; import com.pcloud.book.group.dao.BookGroupClassifyDao;
...@@ -17,6 +19,7 @@ import com.pcloud.book.group.dao.BookGroupDao; ...@@ -17,6 +19,7 @@ import com.pcloud.book.group.dao.BookGroupDao;
import com.pcloud.book.group.dao.GroupQrcodeDao; import com.pcloud.book.group.dao.GroupQrcodeDao;
import com.pcloud.book.group.dto.BookGroupDTO; import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.GroupClassifyQrcodeDTO; import com.pcloud.book.group.dto.GroupClassifyQrcodeDTO;
import com.pcloud.book.group.dto.JoinGroupCipherDTO;
import com.pcloud.book.group.entity.AppTouchRecord; import com.pcloud.book.group.entity.AppTouchRecord;
import com.pcloud.book.group.entity.GroupQrcode; import com.pcloud.book.group.entity.GroupQrcode;
import com.pcloud.book.group.enums.TouchTypeEnum; import com.pcloud.book.group.enums.TouchTypeEnum;
...@@ -67,8 +70,10 @@ import java.util.ArrayList; ...@@ -67,8 +70,10 @@ import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.TreeSet; import java.util.TreeSet;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -111,6 +116,8 @@ public class BookKeywordBizImpl implements BookKeywordBiz { ...@@ -111,6 +116,8 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
private BookGroupClassifyDao bookGroupClassifyDao; private BookGroupClassifyDao bookGroupClassifyDao;
@Autowired @Autowired
private QrcodeSceneService qrcodeSceneService; private QrcodeSceneService qrcodeSceneService;
@Autowired
private BookGroupBiz bookGroupBiz;
@Override @Override
@ParamLog("新增关键词") @ParamLog("新增关键词")
...@@ -422,35 +429,48 @@ public class BookKeywordBizImpl implements BookKeywordBiz { ...@@ -422,35 +429,48 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
if (StringUtil.isEmpty(content) || content.length() > 20) { if (StringUtil.isEmpty(content) || content.length() > 20) {
return; return;
} }
//通过群id获取对应基本信息 // TODO 根据小号和用户id获取所有相关的分类id,若该关键词存在多本书,则组装成文本加链接一次发送
GroupClassifyQrcodeDTO classifyQrcodeInfo = bookGroupClassifyBiz.getClassifyQrcodeInfo(weixinGroupId); final List<JoinGroupCipherDTO> dtos = bookGroupBiz.getClassifyIdsByWxIdAndAltId(weixinGroupId, robotId);
if (classifyQrcodeInfo == null) { if (CollectionUtils.isEmpty(dtos)) {
log.info("[关键词消息回复] classifyQrcodeInfo is null"); log.info("[关键词消息回复] classifyIds is null");
return; return;
} }
ReplyKeywordDTO replyKeywordDTO ; final Set<Long> cIds = Sets.newHashSet();
//获取匹配关键词 final Set<Long> bIds = Sets.newHashSet();
replyKeywordDTO = bookKeywordDao.getKeywordId(classifyQrcodeInfo.getClassifyId(), classifyQrcodeInfo.getBookGroupId(), content); for (JoinGroupCipherDTO dto : dtos) {
if (replyKeywordDTO == null) { cIds.add(dto.getClassifyId());
log.info("[关键词消息回复] replyKeywordDTO is null"); bIds.add(dto.getBookGroupId());
}
final List<Long> classifyIds = Lists.newArrayList(cIds);
final List<ReplyKeywordDTO> replyKeywordDTOs = bookKeywordDao.getKeywordIds(classifyIds, Lists.newArrayList(bIds), content);
final List<GroupClassifyQrcodeDTO> qrcodeDTOS = bookGroupClassifyBiz.listClassifyQrcodeInfo(classifyIds);
if (CollectionUtils.isEmpty(replyKeywordDTOs)) {
log.info("[关键词消息回复] keywordIds is null");
return; return;
} }
if (CollectionUtils.isEmpty(qrcodeDTOS)) {
log.info("[关键词消息回复] qrcodeDTOS is null");
return;
}
final Map<Long, GroupClassifyQrcodeDTO> classifyMap = qrcodeDTOS.stream().collect(Collectors.toMap(GroupClassifyQrcodeDTO::getClassifyId, p -> p, (v1, v2) -> v2));
// 记录循环插入,消息一条发送
for (ReplyKeywordDTO replyKeywordDTO : replyKeywordDTOs) {
log.info("[关键词回复原始数据] : sendKeywordMessage replyKeywordDTO :{}, robotId:{}, weixinGroupId:{}", replyKeywordDTO, robotId, weixinGroupId); log.info("[关键词回复原始数据] : sendKeywordMessage replyKeywordDTO :{}, robotId:{}, weixinGroupId:{}", replyKeywordDTO, robotId, weixinGroupId);
// 处理链接地址 // 处理链接地址
final GroupClassifyQrcodeDTO dto = classifyMap.get(replyKeywordDTO.getClassifyId());
if (ReplyTypeEnum.APP.value.equals(replyKeywordDTO.getReplyType()) || ReplyTypeEnum.LINK.value.equals(replyKeywordDTO.getReplyType())) { if (ReplyTypeEnum.APP.value.equals(replyKeywordDTO.getReplyType()) || ReplyTypeEnum.LINK.value.equals(replyKeywordDTO.getReplyType())) {
AccountSettingDto accountSettingDto = qrcodeSceneConsr.getWechatInfo(classifyQrcodeInfo.getChannelId()); if(null == dto) {
String linkUrl = SendWeixinRequestTools.splitUrlNew(accountSettingDto, replyKeywordDTO.getLinkUrl(), classifyQrcodeInfo.getBookGroupId(), classifyQrcodeInfo.getClassifyId(), classifyQrcodeInfo.getGroupQrcodeId()); log.info("[关键词消息回复] 分类信息为空 replyKeywordDTO:{}; classifyMap:{}", replyKeywordDTO, classifyMap);
continue;
}
AccountSettingDto accountSettingDto = qrcodeSceneConsr.getWechatInfo(dto.getChannelId());
String linkUrl = SendWeixinRequestTools.splitUrlNew(accountSettingDto, replyKeywordDTO.getLinkUrl(), replyKeywordDTO.getBookGroupId(), replyKeywordDTO.getClassifyId(), null);
replyKeywordDTO.setLinkUrl(linkUrl); replyKeywordDTO.setLinkUrl(linkUrl);
} }
String redisContent = JedisClusterUtils.getJson("BOOK:KEYWORD:" + weixinGroupId + "-" + replyKeywordDTO.getKeywordId(), String.class); String redisContent = JedisClusterUtils.getJson("BOOK:KEYWORD:" + weixinGroupId + "-" + replyKeywordDTO.getKeywordId(), String.class);
// 同一群10秒内不回复同一关键词 // 同一群10秒内不回复同一关键词
if (redisContent != null) { if (insertBookKeywordRecord(weixinGroupId, userWxId, replyKeywordDTO, dto, redisContent)) {
insertBookKeywordRecord(classifyQrcodeInfo, replyKeywordDTO.getKeywordId(), userWxId, weixinGroupId, false);
log.info("[关键词消息回复] redisContent:{} insertBookKeywordRecord return", redisContent);
return; return;
} else {
JedisClusterUtils.setJson("BOOK:KEYWORD:" + weixinGroupId + "-" + replyKeywordDTO.getKeywordId(), replyKeywordDTO.getKeywordId(), 10);
insertBookKeywordRecord(classifyQrcodeInfo, replyKeywordDTO.getKeywordId(), userWxId, weixinGroupId, true);
} }
//获取推送消息机器人 //获取推送消息机器人
// 20190704改为收发一体 // 20190704改为收发一体
...@@ -459,9 +479,35 @@ public class BookKeywordBizImpl implements BookKeywordBiz { ...@@ -459,9 +479,35 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
robotId = wechatGroupConsr.getRobotIdByGroupId(weixinGroupId); robotId = wechatGroupConsr.getRobotIdByGroupId(weixinGroupId);
} }
log.info("[关键词回复发送数据] : sendKeywordMessage replyKeywordDTO :{}, robotId:{}, weixinGroupId:{}", replyKeywordDTO, robotId, weixinGroupId); log.info("[关键词回复发送数据] : sendKeywordMessage replyKeywordDTO :{}, robotId:{}, weixinGroupId:{}", replyKeywordDTO, robotId, weixinGroupId);
SendWeixinRequestTools.sendKeywordMessage(replyKeywordDTO, robotId, weixinGroupId, ip, code);
//新增关键词触发记录 //新增关键词触发记录
addKeywordAppTouchRecord(replyKeywordDTO, weixinGroupId, classifyQrcodeInfo.getClassifyId(), classifyQrcodeInfo.getBookGroupId()); addKeywordAppTouchRecord(replyKeywordDTO, weixinGroupId, dto.getClassifyId(), dto.getBookGroupId());
}
// 单条还是按原来的发送
if (replyKeywordDTOs.size() <= 1) {
SendWeixinRequestTools.sendKeywordMessage(replyKeywordDTOs.get(0), robotId, weixinGroupId, ip, code);
} else {
// 多条时组装成一条发送
ReplyKeywordDTO d = new ReplyKeywordDTO();
final StringBuilder sb = new StringBuilder();
for (ReplyKeywordDTO dto : replyKeywordDTOs) {
sb.append(dto.getContent()).append(":").append(dto.getShortLinkUrl()).append("\n");
}
d.setContent(sb.toString());
d.setReplyType(1);
SendWeixinRequestTools.sendKeywordMessage(d, robotId, weixinGroupId, ip, code);
}
}
private boolean insertBookKeywordRecord(String weixinGroupId, String userWxId, ReplyKeywordDTO replyKeywordDTO, GroupClassifyQrcodeDTO dto, String redisContent) {
if (redisContent != null) {
insertBookKeywordRecord(dto, replyKeywordDTO.getKeywordId(), userWxId, weixinGroupId, false);
log.info("[关键词消息回复] redisContent:{} insertBookKeywordRecord return", redisContent);
return true;
} else {
JedisClusterUtils.setJson("BOOK:KEYWORD:" + weixinGroupId + "-" + replyKeywordDTO.getKeywordId(), replyKeywordDTO.getKeywordId(), 10);
insertBookKeywordRecord(dto, replyKeywordDTO.getKeywordId(), userWxId, weixinGroupId, true);
}
return false;
} }
/** /**
...@@ -506,13 +552,8 @@ public class BookKeywordBizImpl implements BookKeywordBiz { ...@@ -506,13 +552,8 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
} }
String redisContent = JedisClusterUtils.getJson("BOOK:KEYWORD:" + weixinGroupId + "-" + replyKeywordDTO.getKeywordId(), String.class); String redisContent = JedisClusterUtils.getJson("BOOK:KEYWORD:" + weixinGroupId + "-" + replyKeywordDTO.getKeywordId(), String.class);
// 同一群10秒内不回复同一关键词 // 同一群10秒内不回复同一关键词
if (redisContent != null) { if (insertBookKeywordRecord(weixinGroupId, userWxId, replyKeywordDTO, classifyQrcodeInfo, redisContent)) {
insertBookKeywordRecord(classifyQrcodeInfo, replyKeywordDTO.getKeywordId(), userWxId, weixinGroupId, false);
log.info("[关键词消息回复] redisContent:{} insertBookKeywordRecord return", redisContent);
return; return;
} else {
JedisClusterUtils.setJson("BOOK:KEYWORD:" + weixinGroupId + "-" + replyKeywordDTO.getKeywordId(), replyKeywordDTO.getKeywordId(), 10);
insertBookKeywordRecord(classifyQrcodeInfo, replyKeywordDTO.getKeywordId(), userWxId, weixinGroupId, true);
} }
//获取推送消息机器人 //获取推送消息机器人
// 20190704改为收发一体 // 20190704改为收发一体
......
...@@ -52,6 +52,11 @@ public interface BookKeywordDao extends BaseDao<BookKeyword> { ...@@ -52,6 +52,11 @@ public interface BookKeywordDao extends BaseDao<BookKeyword> {
ReplyKeywordDTO getKeywordId(Long classifyId, Long bookGroupId, String content); ReplyKeywordDTO getKeywordId(Long classifyId, Long bookGroupId, String content);
/** /**
* 根据分类ids和群ids批量获取关键词
*/
List<ReplyKeywordDTO> getKeywordIds(List<Long> classifyIds, List<Long> bookGroupIds, String content);
/**
* @Author:lili * @Author:lili
* @Desr:校验关键词 * @Desr:校验关键词
* @Date:2019/5/6 14:47 * @Date:2019/5/6 14:47
......
package com.pcloud.book.keywords.dao.impl; package com.pcloud.book.keywords.dao.impl;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.pcloud.book.group.vo.SyncKeyworsVO; import com.pcloud.book.group.vo.SyncKeyworsVO;
...@@ -12,10 +13,14 @@ import com.pcloud.book.keywords.vo.ListKeywordVO; ...@@ -12,10 +13,14 @@ import com.pcloud.book.keywords.vo.ListKeywordVO;
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 org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
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.Collector;
import java.util.stream.Collectors;
/** /**
* @author lily * @author lily
...@@ -62,6 +67,18 @@ public class BookKeywordDaoImpl extends BaseDaoImpl<BookKeyword> implements Book ...@@ -62,6 +67,18 @@ public class BookKeywordDaoImpl extends BaseDaoImpl<BookKeyword> implements Book
} }
@Override @Override
public List<ReplyKeywordDTO> getKeywordIds(List<Long> classifyIds, List<Long> bookGroupIds, String content) {
if (CollectionUtils.isEmpty(classifyIds) || CollectionUtils.isEmpty(bookGroupIds) || StringUtils.isEmpty(content)) {
return Lists.newArrayList();
}
Map<String, Object> paramMap = Maps.newHashMap();
paramMap.put("classifyId", classifyIds.stream().map(Object::toString).collect(Collectors.joining(",")));
paramMap.put("bookGroupId", bookGroupIds.stream().map(Object::toString).collect(Collectors.joining(",")));
paramMap.put("content", content);
return this.getSqlSession().selectList(this.getStatement("getKeywordIds"), paramMap);
}
@Override
public Boolean checkKeyword(String keywords, Long classifyId, Long bookGroupId, Long keywordId) { public Boolean checkKeyword(String keywords, Long classifyId, Long bookGroupId, Long keywordId) {
Map<String, Object> paramMap = new HashMap<>(); Map<String, Object> paramMap = new HashMap<>();
paramMap.put("classifyId", classifyId); paramMap.put("classifyId", classifyId);
......
...@@ -27,6 +27,12 @@ public class ReplyKeywordDTO implements Serializable { ...@@ -27,6 +27,12 @@ public class ReplyKeywordDTO implements Serializable {
@ApiModelProperty("仓库关键词id") @ApiModelProperty("仓库关键词id")
private Long warehouseId; private Long warehouseId;
@ApiModelProperty("分类id")
private Long classifyId;
@ApiModelProperty("群id")
private Long bookGroupId;
@ApiModelProperty("内容") @ApiModelProperty("内容")
private String content; private String content;
......
...@@ -58,7 +58,7 @@ public class WxGroupSendTextListener { ...@@ -58,7 +58,7 @@ public class WxGroupSendTextListener {
List<String> allRobotWxIds = wechatGroupConsr.listAllRobotWxId(); List<String> allRobotWxIds = wechatGroupConsr.listAllRobotWxId();
if (!ListUtils.isEmpty(allRobotWxIds) && !allRobotWxIds.contains(wechatUserId) && !StringUtil.isEmpty(sendTextDTO.getTextContent())) { if (!ListUtils.isEmpty(allRobotWxIds) && !allRobotWxIds.contains(wechatUserId) && !StringUtil.isEmpty(sendTextDTO.getTextContent())) {
BookClockInfoDTO bookClockInfoDTO = bookClockCheck.checkKeywordIsClock(sendTextDTO.getTextContent().trim(), sendTextDTO.getWechatGroupId()); BookClockInfoDTO bookClockInfoDTO = bookClockCheck.checkKeywordIsClock(sendTextDTO.getTextContent().trim(), sendTextDTO.getWechatGroupId());
if(null != bookClockInfoDTO){ if(null != bookClockInfoDTO && SendMessageTypeEnum.GROUP.getCode().equals(sendTextDTO.getCode())){
bookClockKeywordBiz.sendKeywordMessage(bookClockInfoDTO, wechatUserId,sendTextDTO.getWechatGroupId(),sendTextDTO.getWxId(),sendTextDTO.getIp()); bookClockKeywordBiz.sendKeywordMessage(bookClockInfoDTO, wechatUserId,sendTextDTO.getWechatGroupId(),sendTextDTO.getWxId(),sendTextDTO.getIp());
} else{ } else{
final long l = System.currentTimeMillis(); final long l = System.currentTimeMillis();
......
...@@ -316,6 +316,24 @@ ...@@ -316,6 +316,24 @@
and q.weixin_group_id = #{_parameter} limit 1 and q.weixin_group_id = #{_parameter} limit 1
</select> </select>
<select id="listClassifyQrcodeInfo" resultType="GroupClassifyQrcodeDTO" parameterType="list">
select
c.id classifyId,
c.create_user adviserId,
c.book_id bookId,
c.channel_id channelId,
c.book_group_id bookGroupId,
c.price price,
c.has_open_learning_report hasOpenLearningReport
from
book_group_classify c
and c.id in
<foreach collection="classifyIds" open="(" separator="," close=")" item="item">
#{item}
</foreach>
limit 1
</select>
<select id="listClassify4Wechat" resultType="ListClassify4WechatVO" parameterType="map"> <select id="listClassify4Wechat" resultType="ListClassify4WechatVO" parameterType="map">
SELECT SELECT
......
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
</select> </select>
<!--根据暗号获取包含bookGroupId--> <!--根据暗号获取包含bookGroupId-->
<select id="getDTOByCipher" parameterType="String" resultType="com.pcloud.book.group.dto.JoinGroupCiperDTO"> <select id="getDTOByCipher" parameterType="String" resultType="com.pcloud.book.group.dto.JoinGroupCipherDTO">
select select
a.id, cipher, a.classify_id as classifyId, a.wechat_user_id as wechatUserId, a.wx_id as wxId, a.id, cipher, a.classify_id as classifyId, a.wechat_user_id as wechatUserId, a.wx_id as wxId,
a.has_used as hasUsed, b.book_group_id as bookGroupId a.has_used as hasUsed, b.book_group_id as bookGroupId
...@@ -70,10 +70,11 @@ ...@@ -70,10 +70,11 @@
</update> </update>
<!--根据微信id和机器人id获取分类集合--> <!--根据微信id和机器人id获取分类集合-->
<select id="getClassifyIdsByWxIdAndAltId" parameterType="map" resultType="long"> <select id="getClassifyIdsByWxIdAndAltId" parameterType="map" resultType="com.pcloud.book.group.dto.JoinGroupCipherDTO">
select classify_id from join_group_cipher where select a.classify_id as classifyId, b.book_group_id as bookGroupId from join_group_cipher a
has_used=1 left join book_group_classify b on a.classify_id = b.id where
and alt_id=#{altId} a.has_used=1
and wx_id=#{wxId} and a.alt_id=#{altId}
and a.wx_id=#{wxId}
</select> </select>
</mapper> </mapper>
\ No newline at end of file
...@@ -177,6 +177,33 @@ ...@@ -177,6 +177,33 @@
order by set_type desc, matching_rule desc, bk.id desc limit 1 order by set_type desc, matching_rule desc, bk.id desc limit 1
</select> </select>
<select id="getKeywordIds" resultType="ReplyKeywordDTO" parameterType="map">
SELECT
k.id keywordId,
k.keywords,
k.reply_type replyType,
k.content,
k.description,
k.link_url linkUrl,
k.pic_url picUrl,
bk.is_warehouse as isWarehouse,
bk.warehouse_id as warehouseId,
bk.classify_id as classifyId,
bk.book_group_id as bookGroupId,
k.reply_type replyType
FROM
book_keyword bk
JOIN
keyword k ON bk.keyword_id = k.id
WHERE
bk.is_delete = 0 AND k.is_delete = 0
AND classify_id in (0, ${classifyId})
AND book_group_id in (${bookGroupId})
AND ((k.keywords = #{content} and matching_rule = 1 ) or (k.keywords like
concat('%',#{content},'%') and matching_rule = 0))
order by set_type desc, matching_rule desc, bk.id desc
</select>
<select id="checkKeyword" resultType="Boolean" parameterType="map"> <select id="checkKeyword" resultType="Boolean" parameterType="map">
SELECT SELECT
count(1) count(1)
......
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