Commit 4e569483 by 阮思源

Merge branch 'feat-1002027' into 'master'

1002027个人号自动切号

See merge request rays/pcloud-book!244
parents 8a4de81b b324d3f4
...@@ -244,4 +244,8 @@ public interface BookGroupClassifyBiz { ...@@ -244,4 +244,8 @@ public interface BookGroupClassifyBiz {
List<ListClassifyVO> getClassifyIngoreDelete(Long bookGroupId); List<ListClassifyVO> getClassifyIngoreDelete(Long bookGroupId);
/**
* 个人号模式获取一个群
*/
String getSelfGroup(Long classifyId, Integer changeNumber, String wxId);
} }
...@@ -4,6 +4,7 @@ import com.pcloud.book.group.dto.GroupAndUserNumberDTO; ...@@ -4,6 +4,7 @@ import com.pcloud.book.group.dto.GroupAndUserNumberDTO;
import com.pcloud.book.group.dto.GroupQrcodeInfo4Advertising; import com.pcloud.book.group.dto.GroupQrcodeInfo4Advertising;
import com.pcloud.book.group.dto.GroupQrcodeInfoDTO; import com.pcloud.book.group.dto.GroupQrcodeInfoDTO;
import com.pcloud.book.group.dto.GroupQrcodeServerDTO; import com.pcloud.book.group.dto.GroupQrcodeServerDTO;
import com.pcloud.book.group.dto.WeixinQrcodeDTO;
import com.pcloud.book.group.entity.GroupQrcode; import com.pcloud.book.group.entity.GroupQrcode;
import com.pcloud.book.group.vo.ClassifyQrcodeVO; import com.pcloud.book.group.vo.ClassifyQrcodeVO;
import com.pcloud.book.group.vo.GroupQrcodeBaseInfoVO; import com.pcloud.book.group.vo.GroupQrcodeBaseInfoVO;
...@@ -39,11 +40,6 @@ public interface GroupQrcodeBiz { ...@@ -39,11 +40,6 @@ public interface GroupQrcodeBiz {
String getChangeGroupQrCode(Long classifyId); String getChangeGroupQrCode(Long classifyId);
/** /**
* 直接切群
*/
String changeGroupQrCode(Long classifyId);
/**
* 测试替换群二维码,不发生产 * 测试替换群二维码,不发生产
*/ */
void updateGroupQrcode(UpdateGroupQrcodeRequestVO vo); void updateGroupQrcode(UpdateGroupQrcodeRequestVO vo);
...@@ -207,4 +203,9 @@ public interface GroupQrcodeBiz { ...@@ -207,4 +203,9 @@ public interface GroupQrcodeBiz {
* @return * @return
*/ */
PageBeanNew<GroupQrcodeBookVO> listQrcodeByPcloud(Integer currentPage, Integer numPerPage, String name); PageBeanNew<GroupQrcodeBookVO> listQrcodeByPcloud(Integer currentPage, Integer numPerPage, String name);
/**
* 切群之后要做的事
*/
void dealAfterChangeANewGroup(WeixinQrcodeDTO oneQrcode, Long classifyId);
} }
...@@ -22,7 +22,7 @@ public interface WeixinQrcodeBiz { ...@@ -22,7 +22,7 @@ public interface WeixinQrcodeBiz {
* @Desr:从二维码获取一个二维码 * @Desr:从二维码获取一个二维码
* @Date:2019/4/17 16:17 * @Date:2019/4/17 16:17
*/ */
WeixinQrcodeDTO getOneQrcode(Integer generation); WeixinQrcodeDTO getOneQrcode(Integer joinGroupType, String altId);
/** /**
* @Author:lili * @Author:lili
......
...@@ -21,9 +21,11 @@ import com.pcloud.book.group.dao.BookGroupCipherUserDao; ...@@ -21,9 +21,11 @@ import com.pcloud.book.group.dao.BookGroupCipherUserDao;
import com.pcloud.book.group.dao.BookGroupClassifyDao; import com.pcloud.book.group.dao.BookGroupClassifyDao;
import com.pcloud.book.group.dao.BookGroupDao; import com.pcloud.book.group.dao.BookGroupDao;
import com.pcloud.book.group.dao.BookQrcodeUserDao; import com.pcloud.book.group.dao.BookQrcodeUserDao;
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.dao.LearningReportBrowseRecordDao; import com.pcloud.book.group.dao.LearningReportBrowseRecordDao;
import com.pcloud.book.group.dao.LearningReportTouchRecordDao; import com.pcloud.book.group.dao.LearningReportTouchRecordDao;
import com.pcloud.book.group.dao.WeixinQrcodeDao;
import com.pcloud.book.group.dto.BookClassifyDTO; import com.pcloud.book.group.dto.BookClassifyDTO;
import com.pcloud.book.group.dto.BookGroupDTO; import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.BookGroupStatisticDTO; import com.pcloud.book.group.dto.BookGroupStatisticDTO;
...@@ -42,6 +44,8 @@ import com.pcloud.book.group.dto.WeixinQrcodeDTO; ...@@ -42,6 +44,8 @@ import com.pcloud.book.group.dto.WeixinQrcodeDTO;
import com.pcloud.book.group.entity.BookGroupClassify; import com.pcloud.book.group.entity.BookGroupClassify;
import com.pcloud.book.group.entity.BookQrcodeUser; import com.pcloud.book.group.entity.BookQrcodeUser;
import com.pcloud.book.group.entity.GroupQrcode; import com.pcloud.book.group.entity.GroupQrcode;
import com.pcloud.book.group.entity.WeixinQrcode;
import com.pcloud.book.group.enums.JoinGroupTypeEnum;
import com.pcloud.book.group.enums.RankTypeEnum; import com.pcloud.book.group.enums.RankTypeEnum;
import com.pcloud.book.group.set.GroupSet; import com.pcloud.book.group.set.GroupSet;
import com.pcloud.book.group.tools.SendWeixinRequestTools; import com.pcloud.book.group.tools.SendWeixinRequestTools;
...@@ -84,6 +88,7 @@ import com.pcloud.resourcecenter.product.dto.UpdateAppProductParamDTO; ...@@ -84,6 +88,7 @@ import com.pcloud.resourcecenter.product.dto.UpdateAppProductParamDTO;
import com.pcloud.resourcecenter.product.entity.Product; import com.pcloud.resourcecenter.product.entity.Product;
import com.pcloud.resourcecenter.product.entity.Specification; import com.pcloud.resourcecenter.product.entity.Specification;
import com.pcloud.wechatgroup.group.dto.GroupMemberStatisDTO; import com.pcloud.wechatgroup.group.dto.GroupMemberStatisDTO;
import com.pcloud.wechatgroup.group.dto.GroupRobotDTO;
import com.pcloud.wechatgroup.message.dto.GroupChatCountDTO; import com.pcloud.wechatgroup.message.dto.GroupChatCountDTO;
import org.apache.commons.collections.MapUtils; import org.apache.commons.collections.MapUtils;
...@@ -169,6 +174,10 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz { ...@@ -169,6 +174,10 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz {
private BookGroupCipherUserDao bookGroupCipherUserDao; private BookGroupCipherUserDao bookGroupCipherUserDao;
@Autowired @Autowired
private BookGroupDao bookGroupDao; private BookGroupDao bookGroupDao;
@Autowired
private WeixinQrcodeDao weixinQrcodeDao;
@Autowired
private GroupQrcodeDao groupQrcodeDao;
@Override @Override
...@@ -206,36 +215,39 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz { ...@@ -206,36 +215,39 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "群二维码数量不足,您可以明天再创建群。"); throw new BookBizException(BookBizException.PARAM_IS_NULL, "群二维码数量不足,您可以明天再创建群。");
} }
} }
Integer generation = null; //添加分类时如果不是普通群则不分配群
if (new Integer(2).equals(qrcodeNameAndProId.getJoinGroupType())) { if (JoinGroupTypeEnum.GROUP_QRCODE.getCode().equals(qrcodeNameAndProId.getJoinGroupType())) {
generation = 3; WeixinQrcodeDTO oneQrcode = weixinQrcodeBiz.getOneQrcode(null, null);
} if (oneQrcode == null) {
WeixinQrcodeDTO oneQrcode = weixinQrcodeBiz.getOneQrcode(generation); throw new BookBizException(BookBizException.PARAM_IS_NULL, "系统二维码数量不足,请联系客服人员补充二维码数量!");
if (oneQrcode == null) { }
throw new BookBizException(BookBizException.PARAM_IS_NULL, "系统二维码数量不足,请联系客服人员补充二维码数量!"); GroupQrcode groupQrcode = new GroupQrcode();
} groupQrcode.setWeixinGroupId(oneQrcode.getWeixinGroupId());
GroupQrcode groupQrcode = new GroupQrcode(); groupQrcode.setQrcodeUrl(oneQrcode.getQrcodeUrl());
groupQrcode.setWeixinGroupId(oneQrcode.getWeixinGroupId()); groupQrcode.setCreateUser(partyId);
groupQrcode.setQrcodeUrl(oneQrcode.getQrcodeUrl()); groupQrcode.setWeixinQrcodeId(oneQrcode.getId());
groupQrcode.setCreateUser(partyId); groupQrcode.setUserNumber(oneQrcode.getUserNumber());
groupQrcode.setWeixinQrcodeId(oneQrcode.getId()); groupQrcode.setGroupSeq(1);
groupQrcode.setUserNumber(oneQrcode.getUserNumber()); // 群长度超过16部分会被截取,导致群名称重复
groupQrcode.setGroupSeq(1); final String s = "1群";
// 群长度超过16部分会被截取,导致群名称重复 String groupName = qrcodeNameAndProId.getGroupQrcodeName() + addClassifyVO.getClassify() + s;
final String s = "1群";
String groupName = qrcodeNameAndProId.getGroupQrcodeName() + addClassifyVO.getClassify() + s;
if (groupName.length() > 15) {
groupName = addClassifyVO.getClassify() + s;
if (groupName.length() > 15) { if (groupName.length() > 15) {
groupName = addClassifyVO.getClassify().substring(0, 16 - s.length()) + s; groupName = addClassifyVO.getClassify() + s;
if (groupName.length() > 15) {
groupName = addClassifyVO.getClassify().substring(0, 16 - s.length()) + s;
}
} }
groupQrcode.setGroupName(groupName);
groupQrcode.setClassifyId(bookGroupClassify.getId());
groupQrcode.setQrcodeHeadUrl(readerConsr.getNineHeadUrl());
groupQrcodeBiz.insert(groupQrcode);
//获取该社群书下是否有群公告
groupAnnouncementBiz.setAnForGroup(addClassifyVO.getBookGroupId(), null, oneQrcode.getWeixinGroupId());
final String wechatGroupId = oneQrcode.getWeixinGroupId();
Map<String, BookWxQrcodeDTO> groupVersion = weixinQrcodeBiz.getGroupVersion(Collections.singletonList(wechatGroupId));
String ip = Optional.ofNullable(groupVersion.get(wechatGroupId)).orElse(new BookWxQrcodeDTO()).getWechatGroupIp();
SendWeixinRequestTools.changeGroupName(oneQrcode.getRobotWxId(), oneQrcode.getWeixinGroupId(), groupQrcode.getGroupName(), ip);
} }
groupQrcode.setGroupName(groupName);
groupQrcode.setClassifyId(bookGroupClassify.getId());
groupQrcode.setQrcodeHeadUrl(readerConsr.getNineHeadUrl());
groupQrcodeBiz.insert(groupQrcode);
//获取该社群书下是否有群公告
groupAnnouncementBiz.setAnForGroup(addClassifyVO.getBookGroupId(), null, oneQrcode.getWeixinGroupId());
//新增一个规格 //新增一个规格
Long specId = addSpecification(bookGroupClassify.getPrice(), qrcodeNameAndProId.getProductId(), addClassifyVO.getChannelId(), bookGroupClassify.getClassify()); Long specId = addSpecification(bookGroupClassify.getPrice(), qrcodeNameAndProId.getProductId(), addClassifyVO.getChannelId(), bookGroupClassify.getClassify());
bookGroupClassify.setProductSpecId(specId); bookGroupClassify.setProductSpecId(specId);
...@@ -265,10 +277,6 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz { ...@@ -265,10 +277,6 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz {
bookKeywords.add(bookKeyword); bookKeywords.add(bookKeyword);
}); });
bookKeywordDao.insert(bookKeywords); bookKeywordDao.insert(bookKeywords);
final String wechatGroupId = oneQrcode.getWeixinGroupId();
Map<String, BookWxQrcodeDTO> groupVersion = weixinQrcodeBiz.getGroupVersion(Collections.singletonList(wechatGroupId));
String ip = Optional.ofNullable(groupVersion.get(wechatGroupId)).orElse(new BookWxQrcodeDTO()).getWechatGroupIp();
SendWeixinRequestTools.changeGroupName(oneQrcode.getRobotWxId(), oneQrcode.getWeixinGroupId(), groupQrcode.getGroupName(), ip);
} }
@ParamLog("新增商品对应规格") @ParamLog("新增商品对应规格")
...@@ -1124,5 +1132,44 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz { ...@@ -1124,5 +1132,44 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz {
return classifyVOS; return classifyVOS;
} }
@ParamLog("个人号模式获取一个群")
@Override
public String getSelfGroup(Long classifyId, Integer changeNumber, String altId) {
GroupRobotDTO groupRobotDTO = wechatGroupConsr.getGroupRobotByWxId(altId);
if (groupRobotDTO == null) {
return null;
}
ClassifyVO classifyVO = bookGroupClassifyDao.getClassify(classifyId);
if (classifyVO==null){
return null;
}
BookGroupDTO bookGroupDTO = bookGroupDao.getDTOById(classifyVO.getBookGroupId());
if (bookGroupDTO==null){
return null;
}
//先判断有没有已经存在的群
List<GroupQrcode> groupQrcodes = groupQrcodeDao.getUsingGroupQrcodeByClassifyId(classifyId, changeNumber);
log.info("查询到该分类下已经存在的群" + groupQrcodes.toString());
if (!ListUtils.isEmpty(groupQrcodes)) {
for (GroupQrcode groupQrcode:groupQrcodes){
//判断这个群是否跟这个小号对应,如果对应就返回该群,如果不对应证明已经切小号了,重新分配新的群
WeixinQrcode weixinQrcode = weixinQrcodeDao.getByGroupId(groupQrcode.getWeixinGroupId());
if (weixinQrcode != null && groupRobotDTO.getVersion() != null && groupRobotDTO.getVersion().equals(weixinQrcode.getGeneration())) {
log.info("返回已经有的能对应上的群" + groupQrcode.getWeixinGroupId());
return groupQrcode.getWeixinGroupId();
}
}
}
//没有找到合适的群,根据机器人id重新切一个群
WeixinQrcodeDTO weixinQrcodeDTO = weixinQrcodeBiz.getOneQrcode(JoinGroupTypeEnum.ROBOT.getCode(), altId);
if (weixinQrcodeDTO != null) {
log.info("没有找到合适的群,根据机器人id重新切一个群"+weixinQrcodeDTO.toString());
groupQrcodeBiz.dealAfterChangeANewGroup(weixinQrcodeDTO, classifyId);
return weixinQrcodeDTO.getWeixinGroupId();
}
log.info("没有可用的群classifyId="+classifyId+"altId="+altId+"changeNumber="+changeNumber);
return null;
}
} }
...@@ -219,7 +219,7 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz { ...@@ -219,7 +219,7 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz {
List<ClassifyQrcodeVO> qrcodeByClassify = groupQrcodeDao.getQrcodeByClassifyId(classifyId); List<ClassifyQrcodeVO> qrcodeByClassify = groupQrcodeDao.getQrcodeByClassifyId(classifyId);
if (CollectionUtils.isEmpty(qrcodeByClassify)) { if (CollectionUtils.isEmpty(qrcodeByClassify)) {
// 如果没有群则新增一个 // 如果没有群则新增一个
String url = changeGroupQrCode(classifyId); String url = changeGroup(classifyId);
log.info("[前端调用切群接口] getChangeGroupQrCode 分类异常没有群 重新分配群classifyId:{} url:{}", classifyId, url); log.info("[前端调用切群接口] getChangeGroupQrCode 分类异常没有群 重新分配群classifyId:{} url:{}", classifyId, url);
return url; return url;
} }
...@@ -227,7 +227,7 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz { ...@@ -227,7 +227,7 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz {
List<ClassifyQrcodeVO> collect = qrcodeByClassify.stream().filter(p -> QrcodeStatusEnum.ON_USE.value.equals(p.getQrcodeState())).collect(Collectors.toList()); List<ClassifyQrcodeVO> collect = qrcodeByClassify.stream().filter(p -> QrcodeStatusEnum.ON_USE.value.equals(p.getQrcodeState())).collect(Collectors.toList());
if (CollectionUtils.isEmpty(collect)) { if (CollectionUtils.isEmpty(collect)) {
// 如果没有使用中群则新增一个 // 如果没有使用中群则新增一个
String url = changeGroupQrCode(classifyId); String url = changeGroup(classifyId);
log.info("[前端调用切群接口] getChangeGroupQrCode 没有使用中的群 重新分配群classifyId:{} url:{}", classifyId, url); log.info("[前端调用切群接口] getChangeGroupQrCode 没有使用中的群 重新分配群classifyId:{} url:{}", classifyId, url);
return url; return url;
} }
...@@ -243,7 +243,7 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz { ...@@ -243,7 +243,7 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz {
// 更新二维码状态 // 更新二维码状态
groupQrcodeDao.changeQrcodeState(qrcodeVO.getId(), QrcodeStatusEnum.OVER_NUMBER.value); groupQrcodeDao.changeQrcodeState(qrcodeVO.getId(), QrcodeStatusEnum.OVER_NUMBER.value);
// 如果没有群则新增一个 // 如果没有群则新增一个
String url = changeGroupQrCode(classifyId); String url = changeGroup(classifyId);
log.info("[前端调用切群接口] getChangeGroupQrCode 群超出切群人数了,但是没有切群 重新分配群classifyId:{} url:{}", classifyId, url); log.info("[前端调用切群接口] getChangeGroupQrCode 群超出切群人数了,但是没有切群 重新分配群classifyId:{} url:{}", classifyId, url);
return url; return url;
} }
...@@ -271,7 +271,7 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz { ...@@ -271,7 +271,7 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz {
} }
if (Objects.isNull(url)) { if (Objects.isNull(url)) {
// 如果没有群则新增一个 // 如果没有群则新增一个
String qrcodeUrl = changeGroupQrCode(classifyId); String qrcodeUrl = changeGroup(classifyId);
log.info("[前端调用切群接口] getChangeGroupQrCode 没有可用群 重新分配群classifyId:{} url:{}", classifyId, url); log.info("[前端调用切群接口] getChangeGroupQrCode 没有可用群 重新分配群classifyId:{} url:{}", classifyId, url);
return qrcodeUrl; return qrcodeUrl;
} }
...@@ -279,11 +279,6 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz { ...@@ -279,11 +279,6 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz {
} }
@Override
public String changeGroupQrCode(Long classifyId) {
return changeGroup(classifyId);
}
private String changeGroup(Long classifyId) { private String changeGroup(Long classifyId) {
final String key = CacheConstant.BOOK + "changeGroup:" + classifyId; final String key = CacheConstant.BOOK + "changeGroup:" + classifyId;
final String qrcodeKey = CacheConstant.BOOK + "changeGroupQrCode:" + classifyId; final String qrcodeKey = CacheConstant.BOOK + "changeGroupQrCode:" + classifyId;
...@@ -299,7 +294,7 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz { ...@@ -299,7 +294,7 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz {
return qrcode; return qrcode;
} }
// 如果没有群则新增一个 // 如果没有群则新增一个
url = addWechatGroup(classifyId, null); url = addWechatGroup(classifyId, null, null);
log.info("[直接切群] changeGroupQrCode 直接切群classifyId:{} url:{}", classifyId, url); log.info("[直接切群] changeGroupQrCode 直接切群classifyId:{} url:{}", classifyId, url);
// 切群之后将新切群放入缓存5分钟,5分钟内若需要切群则直接从缓存中获取,避免事务未提交,双重判断 // 切群之后将新切群放入缓存5分钟,5分钟内若需要切群则直接从缓存中获取,避免事务未提交,双重判断
JedisClusterUtils.set(qrcodeKey, url, 60 * 5); JedisClusterUtils.set(qrcodeKey, url, 60 * 5);
...@@ -499,7 +494,7 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz { ...@@ -499,7 +494,7 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz {
//如果人数超过限制,重新分配群 //如果人数超过限制,重新分配群
if (memberCount >= groupQrcodeDTO.getChangeNumber() && QrcodeStatusEnum.ON_USE.value.equals(groupQrcodeDTO.getQrcodeState())) { if (memberCount >= groupQrcodeDTO.getChangeNumber() && QrcodeStatusEnum.ON_USE.value.equals(groupQrcodeDTO.getQrcodeState())) {
//修改状态,重新分配一个群 //修改状态,重新分配一个群
addWechatGroup(groupQrcodeDTO.getClassifyId(), groupQrcodeDTO.getId()); addWechatGroup(groupQrcodeDTO.getClassifyId(), groupQrcodeDTO.getId(), robotId);
} }
if (memberCount >= 100 && QrcodeStatusEnum.ON_USE.value.equals(groupQrcodeDTO.getUseState())) { if (memberCount >= 100 && QrcodeStatusEnum.ON_USE.value.equals(groupQrcodeDTO.getUseState())) {
//将二维码修改为已满群状态 //将二维码修改为已满群状态
...@@ -650,16 +645,16 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz { ...@@ -650,16 +645,16 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz {
*/ */
@ParamLog("重新分配一个群") @ParamLog("重新分配一个群")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public String addWechatGroup(Long classifyId, Long groupQrcodeId) { public String addWechatGroup(Long classifyId, Long groupQrcodeId, String altId) {
Integer generation = null; Integer joinGroupType = null;
ClassifyVO classifyVOOne = bookGroupClassifyBiz.getClassify(classifyId); ClassifyVO classifyVOOne = bookGroupClassifyBiz.getClassify(classifyId);
if (classifyVOOne != null && classifyVOOne.getBookGroupId() != null) { if (classifyVOOne != null && classifyVOOne.getBookGroupId() != null) {
QrcodeNameAndProIdDTO qrcodeNameAndProId = bookGroupBiz.getQrcodeNameAndProId(classifyVOOne.getBookGroupId()); QrcodeNameAndProIdDTO qrcodeNameAndProId = bookGroupBiz.getQrcodeNameAndProId(classifyVOOne.getBookGroupId());
if (qrcodeNameAndProId != null && new Integer(2).equals(qrcodeNameAndProId.getJoinGroupType())) { if (qrcodeNameAndProId!=null){
generation = 3; joinGroupType = qrcodeNameAndProId.getJoinGroupType();
} }
} }
WeixinQrcodeDTO oneQrcode = weixinQrcodeBiz.getOneQrcode(generation); WeixinQrcodeDTO oneQrcode = weixinQrcodeBiz.getOneQrcode(joinGroupType, altId);
log.info("[重新分配一个群] : oneQrcode:{}", oneQrcode); log.info("[重新分配一个群] : oneQrcode:{}", oneQrcode);
if (oneQrcode != null) { if (oneQrcode != null) {
//将二维码改为已满群状态 //将二维码改为已满群状态
...@@ -670,49 +665,7 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz { ...@@ -670,49 +665,7 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz {
log.info("[重新分配一个群] : groupQrcodeDao.changeQrcodeState number:{}", number); log.info("[重新分配一个群] : groupQrcodeDao.changeQrcodeState number:{}", number);
// 当该分类不存在群的时候分配一个 // 当该分类不存在群的时候分配一个
if (number > 0 || null == groupQrcodeId){ if (number > 0 || null == groupQrcodeId){
//获取标签对应基本信息 dealAfterChangeANewGroup(oneQrcode, classifyId);
GroupNameAndMaxSeqDTO groupNameAndMaxSeqDTO = bookGroupClassifyBiz.getGroupNameAndMaxSeq(classifyId);
log.info("[重新分配一个群] : groupNameAndMaxSeqDTO:{}", groupNameAndMaxSeqDTO);
if (groupNameAndMaxSeqDTO != null) {
Integer maxSeq = groupNameAndMaxSeqDTO.getMaxSeq() + 1;
String groupName = groupNameAndMaxSeqDTO.getGroupQrcodeName() + groupNameAndMaxSeqDTO.getClassify() + maxSeq + "群";
// 群长度超过16部分会被截取,导致群名称重复
if (groupName.length() > 15) {
final String s = maxSeq + "群";
groupName = groupNameAndMaxSeqDTO.getClassify() + s;
if (groupName.length() > 15) {
groupName = groupNameAndMaxSeqDTO.getClassify().substring(0, 15 - s.length()) + s;
}
}
GroupQrcode groupQrcode = new GroupQrcode();
groupQrcode.setWeixinGroupId(oneQrcode.getWeixinGroupId());
groupQrcode.setQrcodeUrl(oneQrcode.getQrcodeUrl());
groupQrcode.setCreateUser(groupNameAndMaxSeqDTO.getCreateUser());
groupQrcode.setWeixinQrcodeId(oneQrcode.getId());
groupQrcode.setGroupSeq(maxSeq);
groupQrcode.setQrcodeHeadUrl(readerConsr.getNineHeadUrl());
groupQrcode.setUserNumber(oneQrcode.getUserNumber());
groupQrcode.setGroupName(groupName);
groupQrcode.setClassifyId(classifyId);
this.insert(groupQrcode);
ThreadPoolUtils.SEND_MESSAGE_THREAD_POOL.execute(()->{
//获取该社群书下是否有群公告
ClassifyVO classifyVO = bookGroupClassifyBiz.getClassify(classifyId);
groupAnnouncementBiz.setAnForGroup(classifyVO.getBookGroupId(), classifyId, oneQrcode.getWeixinGroupId());
//补充该分类下的群发关联
List<PushGroup> pushGroups = pushGroupDao.getListByClassifyId(classifyId);
if (!ListUtils.isEmpty(pushGroups)){
PushGroup pushGroup = pushGroups.get(0);
pushGroup.setBookGroupQrcodeId(groupQrcode.getId());
pushGroupDao.insert(pushGroup);
}
});
//String robotId = wechatGroupConsr.getRobotIdByGroupId(oneQrcode.getWeixinGroupId());
final String wechatGroupId = oneQrcode.getWeixinGroupId();
Map<String, BookWxQrcodeDTO> groupVersion = weixinQrcodeBiz.getGroupVersion(Collections.singletonList(wechatGroupId));
String ip = Optional.ofNullable(groupVersion.get(wechatGroupId)).orElse(new BookWxQrcodeDTO()).getWechatGroupIp();
SendWeixinRequestTools.changeGroupName(oneQrcode.getRobotWxId(), wechatGroupId, groupName, ip);
}
return oneQrcode.getQrcodeUrl(); return oneQrcode.getQrcodeUrl();
} }
} }
...@@ -844,4 +797,51 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz { ...@@ -844,4 +797,51 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz {
return pageBeanNew; return pageBeanNew;
} }
@ParamLog("切群之后要做的事")
@Override
public void dealAfterChangeANewGroup(WeixinQrcodeDTO oneQrcode, Long classifyId){
//获取标签对应基本信息
GroupNameAndMaxSeqDTO groupNameAndMaxSeqDTO = bookGroupClassifyBiz.getGroupNameAndMaxSeq(classifyId);
log.info("[重新分配一个群] : groupNameAndMaxSeqDTO:{}", groupNameAndMaxSeqDTO);
if (groupNameAndMaxSeqDTO != null) {
Integer maxSeq = groupNameAndMaxSeqDTO.getMaxSeq() + 1;
String groupName = groupNameAndMaxSeqDTO.getGroupQrcodeName() + groupNameAndMaxSeqDTO.getClassify() + maxSeq + "群";
// 群长度超过16部分会被截取,导致群名称重复
if (groupName.length() > 15) {
final String s = maxSeq + "群";
groupName = groupNameAndMaxSeqDTO.getClassify() + s;
if (groupName.length() > 15) {
groupName = groupNameAndMaxSeqDTO.getClassify().substring(0, 15 - s.length()) + s;
}
}
GroupQrcode groupQrcode = new GroupQrcode();
groupQrcode.setWeixinGroupId(oneQrcode.getWeixinGroupId());
groupQrcode.setQrcodeUrl(oneQrcode.getQrcodeUrl());
groupQrcode.setCreateUser(groupNameAndMaxSeqDTO.getCreateUser());
groupQrcode.setWeixinQrcodeId(oneQrcode.getId());
groupQrcode.setGroupSeq(maxSeq);
groupQrcode.setQrcodeHeadUrl(readerConsr.getNineHeadUrl());
groupQrcode.setUserNumber(oneQrcode.getUserNumber());
groupQrcode.setGroupName(groupName);
groupQrcode.setClassifyId(classifyId);
this.insert(groupQrcode);
ThreadPoolUtils.SEND_MESSAGE_THREAD_POOL.execute(()->{
//获取该社群书下是否有群公告
ClassifyVO classifyVO = bookGroupClassifyBiz.getClassify(classifyId);
groupAnnouncementBiz.setAnForGroup(classifyVO.getBookGroupId(), classifyId, oneQrcode.getWeixinGroupId());
//补充该分类下的群发关联
List<PushGroup> pushGroups = pushGroupDao.getListByClassifyId(classifyId);
if (!ListUtils.isEmpty(pushGroups)){
PushGroup pushGroup = pushGroups.get(0);
pushGroup.setBookGroupQrcodeId(groupQrcode.getId());
pushGroupDao.insert(pushGroup);
}
});
final String wechatGroupId = oneQrcode.getWeixinGroupId();
Map<String, BookWxQrcodeDTO> groupVersion = weixinQrcodeBiz.getGroupVersion(Collections.singletonList(wechatGroupId));
String ip = Optional.ofNullable(groupVersion.get(wechatGroupId)).orElse(new BookWxQrcodeDTO()).getWechatGroupIp();
SendWeixinRequestTools.changeGroupName(oneQrcode.getRobotWxId(), wechatGroupId, groupName, ip);
}
}
} }
...@@ -14,6 +14,7 @@ import com.pcloud.book.group.dto.UpdateQrDTO; ...@@ -14,6 +14,7 @@ import com.pcloud.book.group.dto.UpdateQrDTO;
import com.pcloud.book.group.dto.WeixinQrcodeCountDTO; import com.pcloud.book.group.dto.WeixinQrcodeCountDTO;
import com.pcloud.book.group.dto.WeixinQrcodeDTO; import com.pcloud.book.group.dto.WeixinQrcodeDTO;
import com.pcloud.book.group.entity.WeixinQrcode; import com.pcloud.book.group.entity.WeixinQrcode;
import com.pcloud.book.group.enums.JoinGroupTypeEnum;
import com.pcloud.book.group.enums.UpdateStatusEnum; import com.pcloud.book.group.enums.UpdateStatusEnum;
import com.pcloud.book.group.tools.Kit; import com.pcloud.book.group.tools.Kit;
import com.pcloud.book.group.tools.QrcodeTools; import com.pcloud.book.group.tools.QrcodeTools;
...@@ -82,7 +83,15 @@ public class WeixinQrcodeBizImpl implements WeixinQrcodeBiz { ...@@ -82,7 +83,15 @@ public class WeixinQrcodeBizImpl implements WeixinQrcodeBiz {
@Override @Override
@ParamLog("从二维码库获取一个二维码") @ParamLog("从二维码库获取一个二维码")
@Transactional(propagation = Propagation.NOT_SUPPORTED) @Transactional(propagation = Propagation.NOT_SUPPORTED)
public WeixinQrcodeDTO getOneQrcode(Integer generation) { public WeixinQrcodeDTO getOneQrcode(Integer joinGroupType, String altId) {
Integer generation = null;
if (JoinGroupTypeEnum.ROBOT.getCode().equals(joinGroupType) && !StringUtil.isEmpty(altId)) {
//个人号模式获取群,根据小号是第几套获取是第几个套群
GroupRobotDTO groupRobotDTO = wechatGroupConsr.getGroupRobotByWxId(altId);
if (groupRobotDTO != null) {
generation = groupRobotDTO.getVersion();
}
}
WeixinQrcodeDTO qrcodeVO = weixinQrcodeDao.getOneWechatGroup(generation); WeixinQrcodeDTO qrcodeVO = weixinQrcodeDao.getOneWechatGroup(generation);
if (qrcodeVO == null) { if (qrcodeVO == null) {
return null; return null;
......
...@@ -280,4 +280,9 @@ public interface GroupQrcodeDao extends BaseDao<GroupQrcode> { ...@@ -280,4 +280,9 @@ public interface GroupQrcodeDao extends BaseDao<GroupQrcode> {
* @return * @return
*/ */
GroupQrcode getByWxGroupId(String wxGroupId); GroupQrcode getByWxGroupId(String wxGroupId);
/**
* 查询正在使用的群
*/
List<GroupQrcode> getUsingGroupQrcodeByClassifyId(Long classifyId, Integer changeNumber);
} }
...@@ -282,4 +282,12 @@ public class GroupQrcodeDaoImpl extends BaseDaoImpl<GroupQrcode> implements Grou ...@@ -282,4 +282,12 @@ public class GroupQrcodeDaoImpl extends BaseDaoImpl<GroupQrcode> implements Grou
public GroupQrcode getByWxGroupId(String wxGroupId) { public GroupQrcode getByWxGroupId(String wxGroupId) {
return super.getSessionTemplate().selectOne(getStatement("getByWxGroupId"), wxGroupId); return super.getSessionTemplate().selectOne(getStatement("getByWxGroupId"), wxGroupId);
} }
@Override
public List<GroupQrcode> getUsingGroupQrcodeByClassifyId(Long classifyId, Integer changeNumber) {
Map<String, Object> map = new HashMap<>();
map.put("classifyId", classifyId);
map.put("changeNumber", changeNumber);
return this.getSessionTemplate().selectList(getStatement("getUsingGroupQrcodeByClassifyId"), map);
}
} }
...@@ -73,12 +73,6 @@ public class GroupQrcodeFacadeImpl implements GroupQrcodeFacade { ...@@ -73,12 +73,6 @@ public class GroupQrcodeFacadeImpl implements GroupQrcodeFacade {
return new ResponseDto<>(qrCodeUrl); return new ResponseDto<>(qrCodeUrl);
} }
@GetMapping("changeGroupQrCode")
public ResponseDto<String> changeGroupQrCode(@RequestParam("classifyId") Long classifyId) {
String qrCodeUrl = groupQrcodeBiz.changeGroupQrCode(classifyId);
return new ResponseDto<>(qrCodeUrl);
}
@Override @Override
@PostMapping("listQrcodeByClassify") @PostMapping("listQrcodeByClassify")
public ResponseDto<PageBeanNew> listQrcodeByClassify(@RequestHeader("token") String token, @RequestBody ListQrcodeByClassifyParamVO listQrcodeByClassifyParamVO) { public ResponseDto<PageBeanNew> listQrcodeByClassify(@RequestHeader("token") String token, @RequestBody ListQrcodeByClassifyParamVO listQrcodeByClassifyParamVO) {
......
...@@ -97,7 +97,7 @@ public class WeixinQrcodeServiceImpl implements WeixinQrcodeService { ...@@ -97,7 +97,7 @@ public class WeixinQrcodeServiceImpl implements WeixinQrcodeService {
@Override @Override
@GetMapping("getOneQrcode") @GetMapping("getOneQrcode")
public ResponseEntity<ResponseDto<WeixinQrcodeDTO>> getOneQrcode() { public ResponseEntity<ResponseDto<WeixinQrcodeDTO>> getOneQrcode() {
return ResponseHandleUtil.toResponse(weixinQrcodeBiz.getOneQrcode(null)); return ResponseHandleUtil.toResponse(weixinQrcodeBiz.getOneQrcode(null, null));
} }
@Override @Override
......
...@@ -625,12 +625,12 @@ public class BookKeywordBizImpl implements BookKeywordBiz { ...@@ -625,12 +625,12 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
if (classify == null) { if (classify == null) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "分类不存在"); throw new BookBizException(BookBizException.PARAM_IS_NULL, "分类不存在");
} }
//获取 //获取第三套群,先判断这个小号是不是属于这个群的,如果不是,则切下一套
GroupQrcode4ClassifyVO groupQrcode4ClassifyVO = bookGroupClassifyDao.getClassifyQrcode(classifyId, changeNumber); String weixinGroupId = bookGroupClassifyBiz.getSelfGroup(classifyId, changeNumber, sendTextDTO.getWxId());
if (null == groupQrcode4ClassifyVO) { if (StringUtil.isEmpty(weixinGroupId)) {
throw new BookBizException(BookBizException.ID_NOT_EXIST, "群不存在"); throw new BookBizException(BookBizException.ID_NOT_EXIST, "群不存在classifyId=" + classifyId + ",changeNumber=" + changeNumber + ", wxId=" + sendTextDTO.getWxId());
} }
sendAndCheckInviteGroup(sendTextDTO,groupQrcode4ClassifyVO.getWeixinGroupId()); sendAndCheckInviteGroup(sendTextDTO,weixinGroupId);
} }
@ParamLog("判断冒泡和发送冒泡和发入群链接") @ParamLog("判断冒泡和发送冒泡和发入群链接")
...@@ -699,12 +699,12 @@ public class BookKeywordBizImpl implements BookKeywordBiz { ...@@ -699,12 +699,12 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
if (!ListUtils.isEmpty(bookGroupClassifyList)) { if (!ListUtils.isEmpty(bookGroupClassifyList)) {
for (BookGroupClassify bookGroupClassify : bookGroupClassifyList) { for (BookGroupClassify bookGroupClassify : bookGroupClassifyList) {
if (bookGroupClassify.getClassify().equals(sendTextDTO.getTextContent())) { if (bookGroupClassify.getClassify().equals(sendTextDTO.getTextContent())) {
//获取 //获取第三套群,先判断这个小号是不是属于这个群的,如果不是,则切下一套
GroupQrcode4ClassifyVO groupQrcode4ClassifyVO = bookGroupClassifyDao.getClassifyQrcode(bookGroupClassify.getId(), bookGroupClassify.getChangeNumber()); String weixinGroupId = bookGroupClassifyBiz.getSelfGroup(bookGroupClassify.getId(), bookGroupClassify.getChangeNumber(), sendTextDTO.getWxId());
if (null == groupQrcode4ClassifyVO) { if (StringUtil.isEmpty(weixinGroupId)) {
throw new BookBizException(BookBizException.ID_NOT_EXIST, "群不存在"); throw new BookBizException(BookBizException.ID_NOT_EXIST, "群不存在classifyId=" + bookGroupClassify.getId() + ",changeNumber=" + bookGroupClassify.getChangeNumber() + ", wxId=" + sendTextDTO.getWxId());
} }
sendAndCheckInviteGroup(sendTextDTO,groupQrcode4ClassifyVO.getWeixinGroupId()); sendAndCheckInviteGroup(sendTextDTO, weixinGroupId);
} }
} }
} }
......
...@@ -231,10 +231,10 @@ ...@@ -231,10 +231,10 @@
change_number changeNumber, change_number changeNumber,
rank, rank,
count(1) qrcodeNumber, count(1) qrcodeNumber,
SUM(user_number) userNumberTotal, IFNULL(SUM(user_number),0) userNumberTotal,
c.create_time createdTime c.create_time createdTime
from from
book_group_classify c join book_group_qrcode q on c.id = q.classify_id book_group_classify c left join book_group_qrcode q on c.id = q.classify_id
where where
book_group_id = #{_parameter,jdbcType=BIGINT} and c.is_delete = 0 group by c.id order by userNumberTotal desc,c.id book_group_id = #{_parameter,jdbcType=BIGINT} and c.is_delete = 0 group by c.id order by userNumberTotal desc,c.id
</select> </select>
......
...@@ -785,4 +785,16 @@ ...@@ -785,4 +785,16 @@
and is_delete = 0 and is_delete = 0
</select> </select>
<!--查询正在使用的群-->
<select id="getUsingGroupQrcodeByClassifyId" parameterType="map" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM
book_group_qrcode
WHERE user_number &lt; #{changeNumber}
AND classify_id = #{classifyId}
AND use_state = 1
AND is_delete = 0
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
</resultMap> </resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id, weixin_group_id, robot_id, robot_wx_id, qrcode_url, use_state, update_qr_time id, weixin_group_id, robot_id, robot_wx_id, qrcode_url, use_state, update_qr_time, generation
</sql> </sql>
<!--根据Id查询详情--> <!--根据Id查询详情-->
......
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