Commit db50015f by 阮思源

解决冲突

parents 4959831b 2d7d5307
package com.pcloud.book.group.dto;
import java.util.List;
import lombok.Data;
/**
* 用于根据bookId和adviserId查询BookGroup相关信息
*/
@Data
public class QueryByBookAdviserDTO {
List<Long> bookIds;
List<Long> adviserIds;
}
package com.pcloud.book.group.dto;
import java.io.Serializable;
/**
* @author 戴兴
* @description TODO
* @date 2019/9/20 17:43
*/
public class UpdateGroupNameDTO implements Serializable {
/**
* 二维码标识
*/
private Long id;
/**
* 微信群id
*/
private String groupName;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
@Override
public String toString() {
return "UpdateGroupNameDTO{" +
"id=" + id +
", groupName='" + groupName + '\'' +
'}';
}
}
\ No newline at end of file
......@@ -4,6 +4,7 @@ import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.GroupCipherDTO;
import com.pcloud.book.group.dto.GroupUseDTO;
import com.pcloud.book.group.dto.PersonalQrcodeDTO;
import com.pcloud.book.group.dto.QueryByBookAdviserDTO;
import com.pcloud.book.group.dto.ResourceBrowseParamDto;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.dto.StoreFlowInfoDto;
......@@ -43,6 +44,10 @@ public interface BookGroupService {
@RequestMapping(value = "getBookGroupInfoByIds", method = RequestMethod.POST)
ResponseEntity<ResponseDto<Map<Long, BookGroupDTO>>> getBookGroupInfoByIds(@RequestBody List<Long> bookGroupIds) throws BizException;
@ApiOperation("根据bookId和AdviserId批量获取社群书基本信息")
@PostMapping(value = "getBookGroupInfoByBookIdAndAdviserId")
ResponseEntity<ResponseDto<List<BookGroupDTO>>> getBookGroupInfoByBookIdAndAdviserId(@RequestBody QueryByBookAdviserDTO queryByBookAdviserDTO) throws BizException;
@ApiOperation("为信息流批量获取社群书基本信息")
@RequestMapping(value = "getFlowInfoByBookGroupIds", method = RequestMethod.POST)
ResponseEntity<ResponseDto<Map<Long, StoreFlowInfoDto>>> getFlowInfoByBookGroupIds(@RequestBody List<Long> bookGroupIds) throws BizException;
......
package com.pcloud.book.group.service;
import com.pcloud.book.group.dto.BookWxQrcodeDTO;
import com.pcloud.book.group.dto.SyncWeixinGroupIdDTO;
import com.pcloud.book.group.dto.UpdateQrDTO;
import com.pcloud.book.group.dto.WeixinQrcodeCountDTO;
import com.pcloud.book.group.dto.WeixinQrcodeDTO;
import com.pcloud.book.group.dto.*;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException;
......@@ -87,6 +83,16 @@ public interface WeixinQrcodeService {
@RequestMapping(value = "getWxGroupId", method = RequestMethod.GET)
ResponseEntity<ResponseDto<String>> getWxGroupId(@RequestParam("classifyId") Long classifyId);
@ApiOperation(value = "通过qrcodeId获取微信群信息", httpMethod = "GET")
@RequestMapping(value = "getWxGroupInfoById", method = RequestMethod.GET)
ResponseEntity<ResponseDto<GroupQrcodeInfo4Advertising>> getWxGroupInfoById(@RequestParam("qrcodeId") Long qrcodeId);
@ApiOperation(value = "通过qrcodeIds获取微信群信息", httpMethod = "POST")
@RequestMapping(value = "getWxGroupInfoByIds", method = RequestMethod.POST)
ResponseEntity<ResponseDto<Map<Long, GroupQrcodeInfo4Advertising>>> getWxGroupInfoByIds(@RequestBody List<Long> qrcodeIds);
@ApiOperation(value = "修改模拟器IP地址", httpMethod = "GET")
@RequestMapping(value = "updateGenerationMachineIp", method = RequestMethod.GET)
void updateGenerationMachineIp(@RequestParam("generation") Integer generation, @RequestParam("machineIp") String machineIp);
}
......@@ -105,8 +105,12 @@ public class AdNewsBizImpl implements AdNewsBiz {
adNewsSetDao.insert(adNewsSet);
buildAdNewsGroups(adNewsSet, adNewsSet.getCreateUser());
adNewsGroupDao.batchInsert(adNewsSet.getAdNewsGroups());
buildAdNewsWechats(adNewsSet);
adNewsWechatDao.batchInsert(adNewsSet.getAdNewsWechats());
// 判断是否增加自有过公众号,如果没有则将当前数据入库
if (!ListUtils.isEmpty(adNewsSet.getAdNewsWechats())
&& !adNewsWechatDao.existsAdNewsWechat(adNewsSet.getUpdateUser())) {
buildAdNewsWechats(adNewsSet);
adNewsWechatDao.batchInsert(adNewsSet.getAdNewsWechats());
}
//创建定时任务
buildAdNewsSh(adNewsSet);
return adNewsSet.getId();
......
......@@ -100,7 +100,7 @@ public interface AdvertisingSpaceBiz {
* @param adviserPermission 广告位编辑权限实体
* @throws BizException
*/
void setAdviserPermission(AdvertisingAdviserPermission adviserPermission) throws BizException;
void setAdviserPermission(AdvertisingAdviserPermission adviserPermission, Long adviserId) throws BizException;
/**
* 编辑端获取书刊列表
......
......@@ -832,13 +832,13 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
@Override
@Transactional(rollbackFor = Exception.class)
@ParamLog(value = "设置编辑书刊权限", isAfterReturn = false)
public void setAdviserPermission(AdvertisingAdviserPermission adviserPermission) throws BizException {
public void setAdviserPermission(AdvertisingAdviserPermission adviserPermission, Long adviserId) throws BizException {
if (null == adviserPermission.getAdviserId() || null == adviserPermission.getIsOpen()
|| (!adviserPermission.getIsBatchOperation() && (null == adviserPermission.getBookId() || null == adviserPermission.getChannelId()))) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "参数有误!");
}
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("adviserId", adviserPermission.getAdviserId());
paramMap.put("adviserId", adviserId);
if (!adviserPermission.getIsBatchOperation()) {
paramMap.put("bookId", adviserPermission.getBookId());
paramMap.put("channelId", adviserPermission.getChannelId());
......@@ -860,9 +860,13 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
if (null == permission) {
adviserPermission.setBookId(bookAndChannelDTO.getBookId());
adviserPermission.setChannelId(bookAndChannelDTO.getChannelId());
adviserPermission.setAdviserId(adviserId);
advertisingAdviserPermissionDao.insert(adviserPermission);
} else {
adviserPermission.setId(permission.getId());
adviserPermission.setChannelId(null);
adviserPermission.setBookId(null);
adviserPermission.setAdviserId(null);
advertisingAdviserPermissionDao.update(adviserPermission);
}
}
......
......@@ -37,12 +37,14 @@ import com.pcloud.common.page.PageParam;
import com.pcloud.common.utils.DateUtils;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.QrcodeUtils;
import com.pcloud.common.utils.cache.redis.JedisClusterUtils;
import com.pcloud.common.utils.SessionUtil;
import com.pcloud.common.utils.cache.redis.JedisClusterUtils;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.common.utils.zip.CompressUtils;
import com.pcloud.usercenter.party.adviser.dto.AdviserBaseInfoDto;
import com.pcloud.usercenter.user.entity.UserLogin;
import com.pcloud.wechatgroup.message.dto.BrandParamDTO;
import com.pcloud.wechatgroup.message.dto.GroupStatistics;
import org.apache.commons.collections.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -414,6 +416,7 @@ public class GroupTagBizImpl implements GroupTagBiz {
String fileUrl = "";
try {
setGroupInfo(list);
this.setGroupMessageInfo(list);
fileUrl = exportGroupBrandfile(list, fileName);
} catch (Exception e) {
log.error("生成导出文件失败" + e.getMessage(), e);
......@@ -426,6 +429,36 @@ public class GroupTagBizImpl implements GroupTagBiz {
});
}
/**
* 填充群消息数量
* @param groupTagDTOS
*/
private void setGroupMessageInfo(List<GroupTagDTO> groupTagDTOS) {
List<BrandParamDTO> paramDTOList = new ArrayList<>();
groupTagDTOS.forEach(groupTagDTO -> {
BrandParamDTO paramDTO = new BrandParamDTO();
paramDTO.setWxGroupId(groupTagDTO.getWxGroupId());
Date time = groupTagDTO.getTagTime();
if (null != time) {
paramDTO.setTagTime(DateUtils.formatDate(time, DateUtils.DATE_FORMAT_DATETIME));
}
paramDTOList.add(paramDTO);
});
Map<String, GroupStatistics> groupStatisticsMap = wechatGroupConsr.getGroupMessageStatistics4AdBrand(paramDTOList);
if (MapUtils.isEmpty(groupStatisticsMap)) {
return;
}
groupTagDTOS.forEach(groupTagDTO -> {
GroupStatistics statistics = groupStatisticsMap.get(groupTagDTO.getWxGroupId());
if (null != statistics) {
groupTagDTO.setJoinCount(statistics.getJoinCount());
groupTagDTO.setMsgCount(statistics.getMsgCount());
groupTagDTO.setChatCount(statistics.getChatCount());
groupTagDTO.setChatUserCount(statistics.getChatUserCount());
}
});
}
@Override
public Map<String,Object> exportGroupList4Brand(Map<String, Object> paramMap, Long userId) {
Long brandId = advertisingBrandDao.getBrandIdByUserLoginId(userId);
......@@ -474,8 +507,9 @@ public class GroupTagBizImpl implements GroupTagBiz {
*/
private String exportGroupBrandfile(List<GroupTagDTO> list, String fileName) {
// 字段名
String[] rowsName = {"序号", "群名称", "群分类名称", "社群标签(专业)", "社群标签(深度)", "社群标签(目的)", "社群书", "所属出版社",
"创建编辑", "近7天活跃度", "当前群人数", "广告位数量", "群二维码", "标签", "群创建时间"};
String[] rowsName = {"序号", "群名称", "群分类名称", "社群书", "社群标签(专业)", "社群标签(深度)", "社群标签(目的)", "所属出版社",
"创建编辑", "近7天活跃度", "当前群人数", "广告位数量", "二维码", "品牌方", "分配日期",
"期间进群人数", "群消息数", "发言人数(机器人除外)", "发言次数(机器人除外"};
List<Object[]> dataList = new ArrayList<>();
Object[] objs;
for (int i = 0; i < list.size(); i++) {
......@@ -484,17 +518,19 @@ public class GroupTagBizImpl implements GroupTagBiz {
objs[0] = i + 1;
objs[1] = dto.getGroupName();
objs[2] = dto.getClassify();
objs[3] = dto.getProLabelName();
objs[4] = dto.getDepLabelName();
objs[5] = dto.getPurLabelName();
objs[6] = dto.getBookName();
objs[3] = dto.getBookName();
objs[4] = dto.getProLabelName();
objs[5] = dto.getDepLabelName();
objs[6] = dto.getPurLabelName();
objs[7] = dto.getAgentName();
objs[8] = dto.getAdviserName();
objs[9] = dto.getActiveCount() == null ? 0 : dto.getActiveCount();
objs[10] = dto.getUserNumber();
objs[11] = dto.getAdvertisingSpaceNum() == null ? 0 : dto.getAdvertisingSpaceNum();
String qrcodeUrl = "";
if (!StringUtil.isEmpty(dto.getQrcodeUrl())) {
if (Integer.valueOf(2).equals(dto.getJoinGroupType()) && !StringUtil.isEmpty(dto.getCodeUrl())) {
qrcodeUrl = dto.getCodeUrl().replace("oss.5rs.me", "file.5rs.me");
} else if (!StringUtil.isEmpty(dto.getQrcodeUrl())) {
qrcodeUrl = dto.getQrcodeUrl().replace("oss.5rs.me", "file.5rs.me");
}
objs[12] = qrcodeUrl;
......@@ -510,7 +546,11 @@ public class GroupTagBizImpl implements GroupTagBiz {
}
}
objs[13] = brandName;
objs[14] = DateUtils.formatDate(dto.getCreateTime(), DateUtils.DATE_FORMAT_DATEONLY);
objs[14] = dto.getTagTime() == null ? "" : DateUtils.formatDate(dto.getTagTime(), DateUtils.DATE_FORMAT_DATEONLY);
objs[15] = dto.getJoinCount();
objs[16] = dto.getMsgCount();
objs[17] = dto.getChatUserCount();
objs[18] = dto.getChatCount();
dataList.add(objs);
}
return exportConsr.exportExcel(fileName, rowsName, dataList);
......
......@@ -126,6 +126,24 @@ public class GroupTagDTO extends BaseDto{
private Integer joinGroupType;
private String codeUrl;
/**
* 进群人数
*/
private Integer joinCount;
/**
* 群消息总数
*/
private Integer msgCount;
/**
* 发言人数(非机器人)
*/
private Integer chatUserCount;
/**
* 发言次数(非机器人)
*/
private Integer chatCount;
public String getWxGroupId() {
return wxGroupId;
}
......@@ -334,6 +352,38 @@ public class GroupTagDTO extends BaseDto{
this.codeUrl = codeUrl;
}
public Integer getJoinCount() {
return joinCount;
}
public void setJoinCount(Integer joinCount) {
this.joinCount = joinCount;
}
public Integer getMsgCount() {
return msgCount;
}
public void setMsgCount(Integer msgCount) {
this.msgCount = msgCount;
}
public Integer getChatUserCount() {
return chatUserCount;
}
public void setChatUserCount(Integer chatUserCount) {
this.chatUserCount = chatUserCount;
}
public Integer getChatCount() {
return chatCount;
}
public void setChatCount(Integer chatCount) {
this.chatCount = chatCount;
}
@Override
public String toString() {
return "GroupTagDTO{" +
......@@ -359,6 +409,14 @@ public class GroupTagDTO extends BaseDto{
", brandList=" + brandList +
", tagTime=" + tagTime +
", isbn='" + isbn + '\'' +
", classifyId=" + classifyId +
", bookGroupId=" + bookGroupId +
", joinGroupType=" + joinGroupType +
", codeUrl='" + codeUrl + '\'' +
", joinCount=" + joinCount +
", msgCount=" + msgCount +
", chatUserCount=" + chatUserCount +
", chatCount=" + chatCount +
'}';
}
}
......@@ -216,7 +216,7 @@ public class AdvertisingSpaceFacadeImpl implements AdvertisingSpaceFacade {
if (null == advertisingAdviserPermission.getIsBatchOperation()) {
advertisingAdviserPermission.setIsBatchOperation(false);
}
advertisingSpaceBiz.setAdviserPermission(advertisingAdviserPermission);
advertisingSpaceBiz.setAdviserPermission(advertisingAdviserPermission, adviserId);
return new ResponseDto<>();
}
......
......@@ -1117,10 +1117,12 @@ public class BookBizImpl implements BookBiz {
public PageBean listPage4Agent(PageParam pageParam, Map<String, Object> paramMap, Long agentId) {
LOGGER.info("书刊列表-出版端,<START>.[paramMap]=" + paramMap + ",agentId" + agentId);
List<Long> adviserIds = adviserConsr.getIdsByNameAndAgentId(agentId, (String) paramMap.get("bookName"));
List<Long> agent4AdviserIds = adviserConsr.getIdsByNameAndAgentId(agentId, null);
paramMap.put("adviserIds", adviserIds);
/*if (ListUtils.isEmpty(adviserIds)) {
paramMap.put("agent4AdviserIds", agent4AdviserIds);
if (ListUtils.isEmpty(agent4AdviserIds)) {
return new PageBean(0, 0, new ArrayList<>());
}*/
}
PageBean pageBean = bookDao.listPage(pageParam, paramMap, "listPage4Agent");
if (pageBean == null || ListUtils.isEmpty(pageBean.getRecordList())) {
return new PageBean();
......
......@@ -11,8 +11,10 @@ import com.pcloud.wechatgroup.group.dto.GroupRobotDTO;
import com.pcloud.wechatgroup.group.dto.GroupUserDTO;
import com.pcloud.wechatgroup.group.dto.RobotReplyDTO;
import com.pcloud.wechatgroup.group.service.GroupMemberService;
import com.pcloud.wechatgroup.message.dto.BrandParamDTO;
import com.pcloud.wechatgroup.message.dto.GroupChatCountDTO;
import com.pcloud.wechatgroup.message.dto.UserChatCountDTO;
import com.pcloud.wechatgroup.message.dto.GroupStatistics;
import com.pcloud.wechatgroup.message.service.MessageService;
import com.pcloud.wechatgroup.monitor.service.MonitorService;
import com.pcloud.wechatgroup.selfrobot.dto.SelfRobotDTO;
......@@ -381,4 +383,16 @@ public class WechatGroupConsr {
}
return map;
}
@ParamLog("获取群消息数量")
public Map<String, GroupStatistics> getGroupMessageStatistics4AdBrand(List<BrandParamDTO> paramDTOList) {
Map<String, GroupStatistics> map = new HashMap<>();
try {
map = ResponseHandleUtil.parseMapResponse(messageService.getGroupStatistics4AdBrand(paramDTOList), String.class, GroupStatistics.class);
} catch (Exception e) {
log.error("获取群消息数量.[get7DayActiveCountByQrcode]:" + e.getMessage(), e);
}
return map;
}
}
......@@ -76,6 +76,11 @@ public interface BookGroupBiz {
Map<Long, BookGroupDTO> getBookGroupInfoByIds(List<Long> bookGroupIds) throws BizException;
/**
* 根据bookId和AdviserId批量获取社群书基本信息
*/
List<BookGroupDTO> getBookGroupInfoByBookIdAndAdviserId(List<Long> bookIds, List<Long> adviserIds);
/**
* 获取社群书群二维码信息
* @param bookGroupId 群二维码ID
* @return
......
......@@ -184,4 +184,18 @@ public interface GroupQrcodeBiz {
* @return
*/
PageBeanNew<GroupRiddleDTO> listPageRiddle(Long partyId, Integer currentPage, Integer numPerPage, String name);
/**
* @description 获取微信群信息
* @author 戴兴
* @date 2019/9/20 16:36
*/
GroupQrcodeInfo4Advertising getWechatGroupInfo(Long qrcodeId);
/**
* @description 批量获取微信群信息
* @author 戴兴
* @date 2019/9/21 19:10
*/
Map<Long, GroupQrcodeInfo4Advertising> getWechatGroupInfoMap(List<Long> qrcodeIds);
}
......@@ -134,4 +134,6 @@ public interface WeixinQrcodeBiz {
void inviteNewRobot(String wxUserId);
Map<String, BookWxQrcodeDTO> getGroupVersion(List<String> wxGroupIds);
void updateGenerationMachineIp(Integer generation, String machineIp);
}
......@@ -350,6 +350,15 @@ public class BookGroupBizImpl implements BookGroupBiz {
return list.stream().collect(Collectors.toMap(BookGroupDTO::getId, dto -> dto));
}
@Override
public List<BookGroupDTO> getBookGroupInfoByBookIdAndAdviserId(List<Long> bookIds, List<Long> adviserIds){
if(ListUtils.isEmpty(bookIds) || ListUtils.isEmpty(adviserIds)) {
return null;
}
return bookGroupDao.getDTOByBookIdsAnsAdviserIds(bookIds,adviserIds);
}
/**
* 获取社群书群二维码信息
*/
......
......@@ -19,6 +19,7 @@ import com.pcloud.book.group.biz.WeixinQrcodeBiz;
import com.pcloud.book.group.dao.BookClassifyBuyRecordDao;
import com.pcloud.book.group.dao.BookGroupCipherUserDao;
import com.pcloud.book.group.dao.BookGroupClassifyDao;
import com.pcloud.book.group.dao.BookGroupDao;
import com.pcloud.book.group.dao.BookQrcodeUserDao;
import com.pcloud.book.group.dao.JoinGroupCipherDao;
import com.pcloud.book.group.dao.LearningReportBrowseRecordDao;
......@@ -102,6 +103,7 @@ import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
......@@ -165,6 +167,8 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz {
private BookAuthUserBiz bookAuthUserBiz;
@Autowired
private BookGroupCipherUserDao bookGroupCipherUserDao;
@Autowired
private BookGroupDao bookGroupDao;
@Override
......@@ -186,7 +190,7 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz {
BookGroupClassify bookGroupClassify = new BookGroupClassify();
BeanUtils.copyProperties(addClassifyVO, bookGroupClassify);
QrcodeNameAndProIdDTO qrcodeNameAndProId = bookGroupBiz.getQrcodeNameAndProId(addClassifyVO.getBookGroupId());
if (qrcodeNameAndProId == null) {
if (Objects.isNull(qrcodeNameAndProId) || Objects.isNull(qrcodeNameAndProId.getProductId())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请先填写社群码信息!");
}
bookGroupClassify.setProductId(qrcodeNameAndProId.getProductId());
......@@ -417,6 +421,12 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz {
@ParamLog("获取分类基本信息")
public ClassifyVO getClassify(Long classifyId) {
ClassifyVO classifyVO = bookGroupClassifyDao.getClassify(classifyId);
if (classifyVO != null) {
BookGroupDTO bookGroupDTO = bookGroupDao.getDTOById(classifyVO.getBookGroupId());
if (bookGroupDTO != null) {
classifyVO.setJoinGroupType(bookGroupDTO.getJoinGroupType());
}
}
return classifyVO;
}
......
......@@ -27,6 +27,7 @@ import com.pcloud.book.group.dto.GroupQrcodeInfoDTO;
import com.pcloud.book.group.dto.GroupQrcodeServerDTO;
import com.pcloud.book.group.dto.PushAddUserMessageDTO;
import com.pcloud.book.group.dto.QrcodeNameAndProIdDTO;
import com.pcloud.book.group.dto.UpdateGroupNameDTO;
import com.pcloud.book.group.dto.WeixinQrcodeDTO;
import com.pcloud.book.group.entity.GroupQrcode;
import com.pcloud.book.group.enums.QrcodeStatusEnum;
......@@ -47,6 +48,7 @@ import com.pcloud.book.riddle.dto.GroupRiddleDTO;
import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.common.constant.CacheConstant;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.core.constant.MQTopicProducer;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.page.PageParam;
import com.pcloud.common.utils.ListUtils;
......@@ -58,6 +60,7 @@ import com.sdk.wxgroup.WxGroupSDK;
import org.apache.commons.collections4.MapUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
......@@ -66,6 +69,7 @@ import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......@@ -111,6 +115,8 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz {
private BookGroupBiz bookGroupBiz;
@Autowired
private GroupTagBiz groupTagBiz;
@Autowired
private AmqpTemplate amqpTemplate;
/**
......@@ -242,6 +248,7 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz {
}
}
String url = null;
List<ClassifyQrcodeVO> canUserQrcode = Lists.newArrayList();
for (ClassifyQrcodeVO vo : collect) {
if (vo.getUserNumber() >= classify.getChangeNumber()) {
//将二维码修改为已满群状态
......@@ -253,9 +260,14 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz {
log.info("[前端调用切群接口] getChangeGroupQrCode 处理超出了但是没有更新状态的群 vo:{}", vo);
}
if (vo.getUserNumber() < classify.getChangeNumber()) {
url = vo.getQrcodeUrl();
canUserQrcode.add(vo);
}
}
// 获取群人数最少的可用群二维码返回出去
if (!CollectionUtils.isEmpty(canUserQrcode)) {
ClassifyQrcodeVO vo = canUserQrcode.stream().min(Comparator.comparingInt(ClassifyQrcodeVO::getUserNumber)).orElseGet(ClassifyQrcodeVO::new);
url = StringUtil.isBlank(vo.getQrcodeUrl()) ? null : vo.getQrcodeUrl();
}
if (Objects.isNull(url)) {
// 如果没有群则新增一个
String qrcodeUrl = changeGroupQrCode(classifyId);
......@@ -436,6 +448,10 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz {
String ip = Optional.ofNullable(groupVersion.get(wechatGroupId)).orElse(new BookWxQrcodeDTO()).getWechatGroupIp();
SendWeixinRequestTools.changeGroupName(robotId, changeGroupNameDTO.getWxGroupId(), wechatGroupName, ip);
}
UpdateGroupNameDTO updateGroupNameDTO = new UpdateGroupNameDTO();
updateGroupNameDTO.setId(id);
updateGroupNameDTO.setGroupName(wechatGroupName);
amqpTemplate.convertAndSend(MQTopicProducer.EXCHAGE, MQTopicProducer.MODIFY_WXGROUP_NAME, updateGroupNameDTO);
}
@Override
......@@ -797,4 +813,22 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz {
return pageBeanNew;
}
@Override
public GroupQrcodeInfo4Advertising getWechatGroupInfo(Long qrcodeId) {
GroupQrcode groupQrcode = groupQrcodeDao.getGroupQrcodeByqrcodeId(qrcodeId);
GroupQrcodeInfo4Advertising groupQrcodeInfo4Advertising = new GroupQrcodeInfo4Advertising();
groupQrcodeInfo4Advertising.setAdviserId(groupQrcode.getCreateUser());
groupQrcodeInfo4Advertising.setGroupName(groupQrcode.getGroupName());
groupQrcodeInfo4Advertising.setQrcodeUrl(groupQrcode.getQrcodeUrl());
return groupQrcodeInfo4Advertising;
}
@Override
public Map<Long, GroupQrcodeInfo4Advertising> getWechatGroupInfoMap(List<Long> qrcodeIds) {
if (ListUtils.isEmpty(qrcodeIds)){
return new HashMap<>();
}
return groupQrcodeDao.getWechatGroupInfoMap(qrcodeIds);
}
}
......@@ -47,6 +47,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
......@@ -272,9 +273,14 @@ public class WeixinQrcodeBizImpl implements WeixinQrcodeBiz {
return;
}
newUrl = QrcodeUtils.create(weixinQrcodeVO.getQrcodeUrl());
GroupRobotDTO groupRobotDTO = wechatGroupConsr.getRobotInfoByWxUserId(weixinQrcodeVO.getRobotWxId());
if(groupRobotDTO != null){
weixinQrcode.setRobotId(Long.valueOf(groupRobotDTO.getId()));
if(Objects.isNull(weixinQrcodeVO.getRobotId())) {
LOGGER.info("[新增二维码] robotId is null");
GroupRobotDTO groupRobotDTO = wechatGroupConsr.getRobotInfoByWxUserId(weixinQrcodeVO.getRobotWxId());
if(groupRobotDTO != null){
weixinQrcode.setRobotId(Long.valueOf(groupRobotDTO.getId()));
}
} else {
weixinQrcode.setRobotId(weixinQrcodeVO.getRobotId());
}
weixinQrcode.setUpdateState(0);
}else {
......@@ -419,6 +425,14 @@ public class WeixinQrcodeBizImpl implements WeixinQrcodeBiz {
return weixinQrcodeDao.listByWxGroupIds(wxGroupIds) == null ? new HashMap<>() : weixinQrcodeDao.listByWxGroupIds(wxGroupIds);
}
@Override
public void updateGenerationMachineIp(Integer generation, String machineIp) {
if (null == generation || StringUtil.isEmpty(machineIp)) {
return;
}
weixinQrcodeDao.updateGenerationMachineIp(generation, machineIp);
}
private void updateQrUrlVIP(List<UpdateQrDTO> updateQrs) {
if (ListUtils.isEmpty(updateQrs)) {
return;
......
......@@ -39,6 +39,13 @@ public interface BookGroupDao extends BaseDao<BookGroup> {
BookGroupDTO getDTOByBookId(Long bookId, Long channelId, Long adviserId);
/**
*
* @param bookIds 书刊ID
* @param adviserIds 编辑ID
*/
List<BookGroupDTO> getDTOByBookIdsAnsAdviserIds(List<Long> bookIds, List<Long> adviserIds);
/**
* 根据书刊ID删除
* @param bookId 书刊ID
* @param channelId 运营ID
......
......@@ -147,6 +147,13 @@ public interface GroupQrcodeDao extends BaseDao<GroupQrcode> {
GroupQrcode getGroupQrcodeByGroupId(String wechatGroupId);
/**
* @description 根据qrcodeId获取微信群信息
* @author 戴兴
* @date 2019/9/20 16:40
*/
GroupQrcode getGroupQrcodeByqrcodeId(Long qrcodeId);
/**
* @Author: zhangdongwei
* 根据群分类ids获取群总数
* @param classifyIds
......@@ -257,4 +264,6 @@ public interface GroupQrcodeDao extends BaseDao<GroupQrcode> {
List<ClassifyQrcodeVO> getQrcodeByClassifyId(Long classifyId);
List<GroupQrcode> getListByBookGroupIds(List<Long> bookGroupIds);
Map<Long, GroupQrcodeInfo4Advertising> getWechatGroupInfoMap(List<Long> qrcodeIds);
}
......@@ -168,4 +168,6 @@ public interface WeixinQrcodeDao extends BaseDao<WeixinQrcode> {
* 根据状态获取群数量
*/
Integer countByState(Integer state, List<String> altIds);
void updateGenerationMachineIp(Integer generation, String machineIp);
}
......@@ -48,6 +48,14 @@ public class BookGroupDaoImpl extends BaseDaoImpl<BookGroup> implements BookGrou
return super.getSqlSession().selectOne(getStatement("getDTOByBookId"), paramMap);
}
@Override
public List<BookGroupDTO> getDTOByBookIdsAnsAdviserIds(List<Long> bookIds, List<Long> adviserIds) {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("bookIds",bookIds);
paramMap.put("adviserIds",adviserIds);
return super.getSqlSession().selectList(getStatement("getDTOByBookIdsAnsAdviserIds"),paramMap);
}
/**
* 根据书刊ID删除
*/
......
......@@ -167,6 +167,11 @@ public class GroupQrcodeDaoImpl extends BaseDaoImpl<GroupQrcode> implements Grou
}
@Override
public GroupQrcode getGroupQrcodeByqrcodeId(Long qrcodeId) {
return this.getSqlSession().selectOne(this.getStatement("getGroupQrcodeByqrcodeId"), qrcodeId);
}
@Override
public Integer countByClassifyIds(List<Long> classifyIds) {
return this.getSqlSession().selectOne(this.getStatement("countByClassifyIds"), classifyIds);
}
......@@ -244,6 +249,11 @@ public class GroupQrcodeDaoImpl extends BaseDaoImpl<GroupQrcode> implements Grou
}
@Override
public Map<Long, GroupQrcodeInfo4Advertising> getWechatGroupInfoMap(List<Long> qrcodeIds) {
return this.getSqlSession().selectMap(this.getStatement("getWechatGroupInfoMap"), qrcodeIds,"groupQrcodeId");
}
@Override
public List<Long> getIdsByBookId(Long bookId) {
return getSessionTemplate().selectList(getStatement("getIdsByBookId"), bookId);
}
......
......@@ -174,4 +174,12 @@ public class WeixinQrcodeDaoImpl extends BaseDaoImpl<WeixinQrcode> implements We
paramMap.put("altIds", altIds);
return this.getSessionTemplate().selectOne("countByState", paramMap);
}
@Override
public void updateGenerationMachineIp(Integer generation, String machineIp) {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("generation", generation);
paramMap.put("machineIp", machineIp);
this.getSessionTemplate().update(getStatement("updateGenerationMachineIp"), paramMap);
}
}
......@@ -5,6 +5,8 @@ import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.GroupCipherDTO;
import com.pcloud.book.group.dto.GroupUseDTO;
import com.pcloud.book.group.dto.PersonalQrcodeDTO;
import com.pcloud.book.group.dto.QueryByBookAdviserDTO;
import com.pcloud.book.group.dto.ResourceBrowseParamDto;
import com.pcloud.book.group.service.BookGroupService;
import com.pcloud.common.dto.ResponseDto;
......@@ -58,6 +60,15 @@ public class BookGroupServiceImpl implements BookGroupService {
}
/**
* 根据bookId和AdviserId批量获取社群书基本信息
*/
@Override
@PostMapping(value = "getBookGroupInfoByBookIdAndAdviserId")
public ResponseEntity<ResponseDto<List<BookGroupDTO>>> getBookGroupInfoByBookIdAndAdviserId(@RequestBody QueryByBookAdviserDTO queryByBookAdviserDTO) throws BizException {
return ResponseHandleUtil.toResponse(bookGroupBiz.getBookGroupInfoByBookIdAndAdviserId(queryByBookAdviserDTO.getBookIds(),queryByBookAdviserDTO.getAdviserIds()));
}
/**
* 为信息流批量获取社群书基本信息
*/
@Override
......
......@@ -2,11 +2,7 @@ package com.pcloud.book.group.service.impl;
import com.pcloud.book.group.biz.GroupQrcodeBiz;
import com.pcloud.book.group.biz.WeixinQrcodeBiz;
import com.pcloud.book.group.dto.BookWxQrcodeDTO;
import com.pcloud.book.group.dto.SyncWeixinGroupIdDTO;
import com.pcloud.book.group.dto.UpdateQrDTO;
import com.pcloud.book.group.dto.WeixinQrcodeCountDTO;
import com.pcloud.book.group.dto.WeixinQrcodeDTO;
import com.pcloud.book.group.dto.*;
import com.pcloud.book.group.service.WeixinQrcodeService;
import com.pcloud.book.group.vo.ClassifyQrcodeVO;
import com.pcloud.common.dto.ResponseDto;
......@@ -133,4 +129,24 @@ public class WeixinQrcodeServiceImpl implements WeixinQrcodeService {
return ResponseHandleUtil.toResponse(wxGroupId);
}
@Override
@RequestMapping(value = "getWxGroupInfoById", method = RequestMethod.GET)
public ResponseEntity<ResponseDto<GroupQrcodeInfo4Advertising>> getWxGroupInfoById(@RequestParam("qrcodeId") Long qrcodeId) {
GroupQrcodeInfo4Advertising wechatGroupInfo = groupQrcodeBiz.getWechatGroupInfo(qrcodeId);
return ResponseHandleUtil.toResponse(wechatGroupInfo);
}
@Override
@RequestMapping(value = "getWxGroupInfoByIds", method = RequestMethod.POST)
public ResponseEntity<ResponseDto<Map<Long, GroupQrcodeInfo4Advertising>>> getWxGroupInfoByIds(@RequestBody List<Long> qrcodeIds) {
Map<Long, GroupQrcodeInfo4Advertising> wechatGroupInfoMap = groupQrcodeBiz.getWechatGroupInfoMap(qrcodeIds);
return ResponseHandleUtil.toResponse(wechatGroupInfoMap);
}
@Override
@RequestMapping(value = "updateGenerationMachineIp", method = RequestMethod.GET)
public void updateGenerationMachineIp(@RequestParam("generation") Integer generation, @RequestParam("machineIp") String machineIp) {
weixinQrcodeBiz.updateGenerationMachineIp(generation, machineIp);
}
}
......@@ -54,6 +54,9 @@ public class ClassifyVO implements Serializable {
@ApiModelProperty("创建人")
private Long createUser;
@ApiModelProperty("进群方式:1群二维码,2客服机器人")
private Integer joinGroupType;
public Integer getRank() {
return rank;
}
......@@ -158,6 +161,14 @@ public class ClassifyVO implements Serializable {
this.createUser = createUser;
}
public Integer getJoinGroupType() {
return joinGroupType;
}
public void setJoinGroupType(Integer joinGroupType) {
this.joinGroupType = joinGroupType;
}
@Override
public String toString() {
return "ClassifyVO{" +
......@@ -174,6 +185,7 @@ public class ClassifyVO implements Serializable {
", productSpecId=" + productSpecId +
", rank=" + rank +
", createUser=" + createUser +
", joinGroupType=" + joinGroupType +
'}';
}
}
......@@ -57,40 +57,42 @@ public class WxLiveBroadcastReminderListener {
@ParamLog("直播开播提醒")
@RabbitHandler
public void onMessage(LiveCourseDetailInfoDto liveCourse) throws BizException {
if (Objects.isNull(liveCourse) || CollectionUtils.isEmpty(liveCourse.getTableDetailDtos())) {
return;
}
Map<Long, Long> collect = liveCourse.getTableDetailDtos().stream().collect(Collectors.toMap(TableDetailDto::getOriginId, TableDetailDto::getTableId));
final List<GroupQrcodeServerDTO> wxGroups = groupQrcodeBiz.getWxGroupIdByServerId(Lists.newArrayList(collect.keySet()));
log.info("[直播开播提醒] : liveCourse :{} wxGroups:{}", liveCourse, wxGroups);
if (CollectionUtils.isEmpty(wxGroups)) {
return;
}
final Map<Long, AccountSettingDto> accountMap = Maps.newHashMap();
List<String> wxGroupIds = wxGroups.stream().map(GroupQrcodeServerDTO::getWxGroupId).collect(Collectors.toList());
Map<String, BookWxQrcodeDTO> groupVersion = weixinQrcodeBiz.getGroupVersion(wxGroupIds);
final List<GroupQrcodeServerDTO> wxGroups2 = wxGroups.stream().collect(
Collectors. collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(GroupQrcodeServerDTO::getWxGroupId))), ArrayList::new)
);
for (GroupQrcodeServerDTO dto : wxGroups2) {
// 避免重复挂服务调用性能损耗
AccountSettingDto accountSettingDto = accountMap.get(dto.getChannelId());
if (Objects.isNull(accountSettingDto)) {
accountSettingDto = qrcodeSceneConsr.getWechatInfo(dto.getChannelId());
accountMap.put(dto.getChannelId(), accountSettingDto);
}
String linkUrl = SendWeixinRequestTools.splitUrlNew(accountSettingDto, dto.getLinkUrl(), dto.getBookGroupId(), dto.getClassifyId(), dto.getGroupQrcodeId());
// 定位到具体课程
String liveInfo = linkUrl.replace("liveinfo?", "lesson/" + liveCourse.getLessonId() + "?tableId=" + collect.get(dto.getServeId()) + "&");
String shortUrl4Own = UrlUtils.getShortUrl4Own(liveInfo);
SendTextMessageVO vo = new SendTextMessageVO();
vo.setContent("【" + liveCourse.getTitle() + "】即将开播啦,感兴趣的同学们可以开始进入啦。猛戳直播链接:" + shortUrl4Own);
vo.setWxGroupId(dto.getWxGroupId());
// 负载均衡会根据群获取该群活跃小号,所以传什么都不重要,写死为“我为你笑着”
vo.setAltId(Optional.ofNullable(groupVersion.get(dto.getWxGroupId())).orElse(new BookWxQrcodeDTO()).getRobotWxId());
vo.setIp(Optional.ofNullable(groupVersion.get(dto.getWxGroupId())).orElse(new BookWxQrcodeDTO()).getWechatGroupIp());
WxGroupSDK.sendTextMessage(vo);
}
// 20190929 消息量大,重复消息多,导致小号闪退或者崩溃,暂时屏蔽掉
log.info("[直播开播提醒] liveCourse:{}", liveCourse);
// if (Objects.isNull(liveCourse) || CollectionUtils.isEmpty(liveCourse.getTableDetailDtos())) {
// return;
// }
// Map<Long, Long> collect = liveCourse.getTableDetailDtos().stream().collect(Collectors.toMap(TableDetailDto::getOriginId, TableDetailDto::getTableId));
// final List<GroupQrcodeServerDTO> wxGroups = groupQrcodeBiz.getWxGroupIdByServerId(Lists.newArrayList(collect.keySet()));
// log.info("[直播开播提醒] : liveCourse :{} wxGroups:{}", liveCourse, wxGroups);
// if (CollectionUtils.isEmpty(wxGroups)) {
// return;
// }
// final Map<Long, AccountSettingDto> accountMap = Maps.newHashMap();
// List<String> wxGroupIds = wxGroups.stream().map(GroupQrcodeServerDTO::getWxGroupId).collect(Collectors.toList());
// Map<String, BookWxQrcodeDTO> groupVersion = weixinQrcodeBiz.getGroupVersion(wxGroupIds);
// final List<GroupQrcodeServerDTO> wxGroups2 = wxGroups.stream().collect(
// Collectors. collectingAndThen(
// Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(GroupQrcodeServerDTO::getWxGroupId))), ArrayList::new)
// );
// for (GroupQrcodeServerDTO dto : wxGroups2) {
// // 避免重复挂服务调用性能损耗
// AccountSettingDto accountSettingDto = accountMap.get(dto.getChannelId());
// if (Objects.isNull(accountSettingDto)) {
// accountSettingDto = qrcodeSceneConsr.getWechatInfo(dto.getChannelId());
// accountMap.put(dto.getChannelId(), accountSettingDto);
// }
// String linkUrl = SendWeixinRequestTools.splitUrlNew(accountSettingDto, dto.getLinkUrl(), dto.getBookGroupId(), dto.getClassifyId(), dto.getGroupQrcodeId());
// // 定位到具体课程
// String liveInfo = linkUrl.replace("liveinfo?", "lesson/" + liveCourse.getLessonId() + "?tableId=" + collect.get(dto.getServeId()) + "&");
// String shortUrl4Own = UrlUtils.getShortUrl4Own(liveInfo);
// SendTextMessageVO vo = new SendTextMessageVO();
// vo.setContent("【" + liveCourse.getTitle() + "】即将开播啦,感兴趣的同学们可以开始进入啦。猛戳直播链接:" + shortUrl4Own);
// vo.setWxGroupId(dto.getWxGroupId());
// // 负载均衡会根据群获取该群活跃小号,所以传什么都不重要,写死为“我为你笑着”
// vo.setAltId(Optional.ofNullable(groupVersion.get(dto.getWxGroupId())).orElse(new BookWxQrcodeDTO()).getRobotWxId());
// vo.setIp(Optional.ofNullable(groupVersion.get(dto.getWxGroupId())).orElse(new BookWxQrcodeDTO()).getWechatGroupIp());
// WxGroupSDK.sendTextMessage(vo);
// }
}
}
......@@ -1077,6 +1077,11 @@
BOOK B
ON
A.BOOK_ID = B.BOOK_ID AND A.IS_DELETE = 0 AND B.IS_DELETE = 0
AND
A.ADVISER_ID IN
<foreach collection="agent4AdviserIds" index="i" item="item" open="(" separator="," close=")">
${item}
</foreach>
AND A.IS_MAIN_EDITOR = 1
LEFT JOIN
BOOK_TYPE T
......
......@@ -99,6 +99,21 @@
and create_user = #{adviserId,jdbcType=BIGINT}
ORDER BY create_time ASC limit 1
</select>
<select id="getDTOByBookIdsAnsAdviserIds" resultMap="BookGroupDTO" parameterType="map">
select
<include refid="Base_Column_List"/>
from book_group
where is_delete = 0
and book_id in
<foreach collection="bookIds" open="(" close=")" item="item" separator=",">
${item}
</foreach>
and create_user in
<foreach collection="adviserIds" open="(" close=")" item="item" separator=",">
${item}
</foreach>
</select>
<select id="getBookGroupCount" resultType="Integer" parameterType="Long">
SELECT
......
......@@ -351,6 +351,11 @@
where is_delete=0 and weixin_group_id=#{wechatGroupId} limit 1
</select>
<select id="getGroupQrcodeByqrcodeId" resultMap="BaseResultMap" parameterType="long">
select <include refid="Base_Column_List"/> from book_group_qrcode
where is_delete=0 and id=#{qrcodeId} limit 1
</select>
<select id="countByClassifyIds" parameterType="list" resultType="java.lang.Integer">
select count(1) from book_group_qrcode
where
......@@ -725,4 +730,12 @@
AND t1.is_delete = 0
GROUP BY t.id
</select>
<select id="getWechatGroupInfoMap" parameterType="list" resultType="com.pcloud.book.group.dto.GroupQrcodeInfo4Advertising">
select id groupQrcodeId, group_name groupName, qrcode_url qrcodeUrl from book_group_qrcode where id in
<foreach collection="list" separator="," open="(" close=")" item="id">
#{id}
</foreach>
</select>
</mapper>
\ No newline at end of file
......@@ -302,4 +302,8 @@
</foreach>
and use_state=#{state}
</select>
<update id="updateGenerationMachineIp" parameterType="map">
update weixin_qrcode_generation set virtual_machine_ip = #{machineIp} where generation = #{generation}
</update>
</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