Commit b9a7a1f0 by 桂前礼

feat: [none] 群二维码素材更新绑定公众账号

parent 82827cc2
......@@ -20,6 +20,11 @@ import java.util.Random;
public class BookConstant {
/**
* 更新群二维码时是否同步更新群二维码素材 - 缓存开关
*/
public static final String BOOK_UPDATE_QRCODE_MATERIAL_SWITCH = CacheConstant.BOOK + "BOOK_UPDATE_QRCODE_MATERIAL_SWITCH:";
/**
* 书名分词群标签缓存
*/
public static final String BOOK_NAME_TAGS_CACHE = CacheConstant.BOOK + "BOOK_NAME_TAGS_CACHE:";
......
package com.pcloud.book.group.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* 群素材迁移DTO
*
* @author guiq
* @version 1.0
* @since 2020年8月2日
*/
@Data
@ApiModel("群素材迁移DTO")
public class MaterialMigrateDTO {
@ApiModelProperty("迁移到的新公众号")
private Long accountId;
@ApiModelProperty("要迁移的群")
private List<String> groups;
}
......@@ -2,6 +2,7 @@ package com.pcloud.book.group.service;
import com.pcloud.book.group.dto.BookWxQrcodeDTO;
import com.pcloud.book.group.dto.GroupQrcodeInfo4Advertising;
import com.pcloud.book.group.dto.MaterialMigrateDTO;
import com.pcloud.book.group.dto.SearchDto;
import com.pcloud.book.group.dto.SyncWeixinGroupIdDTO;
import com.pcloud.book.group.dto.UpdateQrDTO;
......@@ -9,7 +10,8 @@ import com.pcloud.book.group.dto.WeixinQrcodeCountDTO;
import com.pcloud.book.group.dto.WeixinQrcodeDTO;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
......@@ -22,9 +24,6 @@ import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
import java.util.Map;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
/**
* @author lily
* @date 2019/4/19 15:57
......@@ -116,4 +115,21 @@ public interface WeixinQrcodeService {
@ApiOperation("安卓Hook拉取待更新群二维码")
@RequestMapping(value = "/listQrCode4Android",method = RequestMethod.GET)
ResponseEntity<ResponseDto<List<UpdateQrDTO>>> listQrCode4Android(@RequestParam("generation")Integer generation,@RequestParam("num")Integer num);
@ApiOperation(value = "更新微信群素材",httpMethod = "POST")
@RequestMapping(value = "/updateGroupMaterial",method = RequestMethod.POST)
ResponseEntity<ResponseDto<Integer>> updateGroupMaterial(@RequestBody List<String> groups);
@ApiOperation(value = "迁移群素材到新的公众号 - 谨慎使用",httpMethod = "POST")
@RequestMapping(value = "/migrateMaterial",method = RequestMethod.POST)
ResponseEntity<ResponseDto<List<String>>> migrateMaterial(@RequestBody MaterialMigrateDTO migrateDTO);
@ApiOperation(value = "旧数据处理 - 同步现有素材到新表[执行此方法之前,需要先关闭直接入群]")
@RequestMapping(value = "syncGroupMaterial",method = RequestMethod.POST)
void syncGroupMaterial(@RequestBody Map<String,Long> accountMap);
@ApiOperation(value = "新增更新群的公众号", httpMethod = "GET")
@RequestMapping(value = "/addAccount4Material", method = RequestMethod.GET)
void addAccount4Material(@RequestParam("accountId") Long accountId, @RequestParam("useType") Integer useType);
}
......@@ -4,8 +4,8 @@ import com.pcloud.book.book.dto.BookDto;
import com.pcloud.book.book.entity.Book;
import com.pcloud.book.group.dto.AgentStatisticsInfoDTO;
import com.pcloud.book.group.dto.AltAndCountDTO;
import com.pcloud.book.group.dto.BookAppletSceneDTO;
import com.pcloud.book.group.dto.AppStatisticsDTO;
import com.pcloud.book.group.dto.BookAppletSceneDTO;
import com.pcloud.book.group.dto.BookGroupClassifyDTO;
import com.pcloud.book.group.dto.BookGroupCountDTO;
import com.pcloud.book.group.dto.BookGroupDTO;
......@@ -21,6 +21,7 @@ import com.pcloud.book.group.dto.CountAndTimeDTO;
import com.pcloud.book.group.dto.ErpBookGroupDTO;
import com.pcloud.book.group.dto.ErpGroupQrcodeDTO;
import com.pcloud.book.group.dto.GroupCipherDTO;
import com.pcloud.book.group.dto.GroupQrcodeDTO;
import com.pcloud.book.group.dto.GroupStoreMyPayDto;
import com.pcloud.book.group.dto.GroupUseDTO;
import com.pcloud.book.group.dto.JoinGroupCipherDTO;
......@@ -61,7 +62,6 @@ import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageBean;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.page.PageParam;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
......@@ -921,4 +921,6 @@ public interface BookGroupBiz {
String getGroupNewsMaterialById(Long bookGroupQrcodeId, Long classifyId, Integer useType, Long groupActivityId);
String updateMediaId4Activity(String url, PcloudGroupActivity pcloudGroupActivity);
List<GroupQrcodeDTO> getMigrateGroup(List<String> groups);
}
......@@ -15,4 +15,7 @@ public interface GroupMaterialAccountBiz {
*/
GroupMaterialAccount getActiveAccount(Integer value);
GroupMaterialAccount getByAccountId(Long accountId);
void addAccount4Material(Long accountId, Integer useType);
}
......@@ -5,6 +5,7 @@ import com.pcloud.book.group.dto.GroupAndUserNumberDTO;
import com.pcloud.book.group.dto.GroupQrcodeInfo4Advertising;
import com.pcloud.book.group.dto.GroupQrcodeInfoDTO;
import com.pcloud.book.group.dto.GroupQrcodeServerDTO;
import com.pcloud.book.group.dto.MaterialMigrateDTO;
import com.pcloud.book.group.dto.WeixinQrcodeDTO;
import com.pcloud.book.group.entity.GroupQrcode;
import com.pcloud.book.group.vo.BookGroupManagerVO;
......@@ -251,4 +252,10 @@ public interface GroupQrcodeBiz {
* @return
*/
PageBeanNew<AppletGroupManageDTO> getLocalGroup(Long wechatUserId, Integer numPerPage, Integer currentPage);
Integer updateGroupMaterial(List<String> groups);
List<String> migrateMaterial(MaterialMigrateDTO migrateDTO);
void syncGroupMaterial(Map<String, Long> accountMap);
}
......@@ -92,6 +92,7 @@ import com.pcloud.book.group.dto.DayCountDTO;
import com.pcloud.book.group.dto.ErpBookGroupDTO;
import com.pcloud.book.group.dto.ErpGroupQrcodeDTO;
import com.pcloud.book.group.dto.GroupCipherDTO;
import com.pcloud.book.group.dto.GroupQrcodeDTO;
import com.pcloud.book.group.dto.GroupStoreMyPayDto;
import com.pcloud.book.group.dto.GroupUseDTO;
import com.pcloud.book.group.dto.JoinGroupCipherDTO;
......@@ -111,6 +112,7 @@ import com.pcloud.book.group.dto.TopAgentBookGroupDTO;
import com.pcloud.book.group.dto.UserBookBaseInfoDTO;
import com.pcloud.book.group.dto.UserSelectParamDTO;
import com.pcloud.book.group.dto.WechatMessageDTO;
import com.pcloud.book.group.entity.BizMaterial;
import com.pcloud.book.group.entity.BookAppletScene;
import com.pcloud.book.group.entity.BookGroup;
import com.pcloud.book.group.entity.BookGroupAgentRecord;
......@@ -132,7 +134,7 @@ import com.pcloud.book.group.enums.CipherTypeEnum;
import com.pcloud.book.group.enums.JoinGroupTypeEnum;
import com.pcloud.book.group.enums.LargeTempletEnum;
import com.pcloud.book.group.enums.UseTypeEnum;
import com.pcloud.book.group.mapper.GroupMaterialAccountMapper;
import com.pcloud.book.group.mapper.BizMaterialMapper;
import com.pcloud.book.group.set.GroupSet;
import com.pcloud.book.group.tools.BookExcelReader;
import com.pcloud.book.group.tools.SendWeixinRequestTools;
......@@ -424,7 +426,7 @@ public class BookGroupBizImpl implements BookGroupBiz {
@Autowired
private GroupMaterialAccountBiz groupMaterialAccountBiz;
@Autowired
private GroupMaterialAccountMapper groupMaterialAccountMapper;
private BizMaterialMapper bizMaterialMapper;
@Autowired
private PcloudGroupActivityBiz pcloudGroupActivityBiz;
......@@ -5299,12 +5301,26 @@ public class BookGroupBizImpl implements BookGroupBiz {
}
bookGroupQrcodeId = groupQrcodeInfo.getId();
}
if (Objects.isNull(bookGroupQrcodeId)){
throw new BookBizException(BookBizException.PARAM_IS_NULL, "未获取到图文素材链接");
}
// 直接获取 素材地址 如果获取到直接返回
String materialUrl = bizMaterialMapper.selectMaterialUrl4Biz(bookGroupQrcodeId, UseTypeEnum.NORMAL_GROUP.value);
if (StrUtil.isNotBlank(materialUrl)){
return materialUrl;
}
// 获取不到则新增
GroupQrcodeBaseInfoVO groupInfo = groupQrcodeDao.getBaseById(bookGroupQrcodeId);
GroupMaterialAccount activeAccount = groupMaterialAccountBiz.getActiveAccount(UseTypeEnum.NORMAL_GROUP.value);
mediaId = updateMediaId(groupInfo, activeAccount, bookGroupQrcodeId);
if (StrUtil.isBlank(mediaId)) {
materialUrl = uploadBizMaterial4Group(groupInfo,activeAccount);
if (StrUtil.isBlank(materialUrl)) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "未获取到图文素材链接");
}
return materialUrl;
} else if (UseTypeEnum.THIRD_GROUP.value.equals(useType)) {
PcloudGroupActivity pcloudGroupActivity = pcloudGroupActivityBiz.getById(groupActivityId);
if (null == pcloudGroupActivity || null == pcloudGroupActivity.getGroupType() || StringUtil.isEmpty(pcloudGroupActivity.getGroupExtLink())) {
......@@ -5323,6 +5339,36 @@ public class BookGroupBizImpl implements BookGroupBiz {
return ResponseHandleUtil.parseResponse(materialService.getGroupNewsMaterialByMediaId(mediaId), String.class);
}
private String uploadBizMaterial4Group(GroupQrcodeBaseInfoVO groupInfo, GroupMaterialAccount activeAccount) {
if (Objects.nonNull(groupInfo) && Objects.nonNull(activeAccount) && Objects.nonNull(activeAccount.getAccountId())) {
GroupMaterialAccount account = groupMaterialAccountBiz.getByAccountId(activeAccount.getAccountId());
GroupNewsMaterialAddDTO groupNewsMaterialAddDTO = new GroupNewsMaterialAddDTO();
groupNewsMaterialAddDTO.setAccountId(account.getAccountId());
groupNewsMaterialAddDTO.setGroupHeadImg(account.getHeadMediaId());
groupNewsMaterialAddDTO.setCoverMediaId(account.getCoverMediaId());
groupNewsMaterialAddDTO.setGroupName(groupInfo.getGroupName());
groupNewsMaterialAddDTO.setQrcodeUrl(groupInfo.getQrcodeUrl());
try {
String mediaId = ResponseHandleUtil.parseResponse(materialService.getGroupNewsMaterial(groupNewsMaterialAddDTO), String.class);
if (StrUtil.isNotBlank(mediaId)) {
BizMaterial bizMaterial = new BizMaterial();
bizMaterial.setAccountId(Math.toIntExact(account.getAccountId()));
bizMaterial.setBizId(Math.toIntExact(groupInfo.getGroupQrcodeId()));
bizMaterial.setBizType(UseTypeEnum.NORMAL_GROUP.value);
bizMaterial.setCreateTime(new Date());
bizMaterial.setMediaId(mediaId);
String materialUrl = ResponseHandleUtil.parseResponse(materialService.getGroupNewsMaterialByMediaId(mediaId), String.class);
bizMaterial.setMaterialUrl(materialUrl);
bizMaterialMapper.insertOrUpdate(bizMaterial);
return materialUrl;
}
} catch (Exception e) {
LOGGER.error("[BookGroupBizImpl.uploadBizMaterial4Group]] 上传素材失败! groupInfo:{} activeAccount:{}", groupInfo,activeAccount);
}
}
return null;
}
@Override
public String updateMediaId4Activity(String url, PcloudGroupActivity pcloudGroupActivity) {
GroupMaterialAccount account = groupMaterialAccountBiz.getActiveAccount(UseTypeEnum.THIRD_GROUP.value);
......@@ -5345,10 +5391,15 @@ public class BookGroupBizImpl implements BookGroupBiz {
return mediaId;
}
@Override
public List<GroupQrcodeDTO> getMigrateGroup(List<String> groups) {
return groupQrcodeDao.getMigrateGroup(groups);
}
private String updateMediaId(GroupQrcodeBaseInfoVO groupInfo, GroupMaterialAccount account, Long bookGroupQrcodeId) {
if (groupInfo != null && account != null) {
if (groupInfo != null) {
String mediaId = groupQrcodeDao.getMediaId(bookGroupQrcodeId);
if (StrUtil.isBlank(mediaId)) {
if (StrUtil.isBlank(mediaId) && account != null) {
GroupNewsMaterialAddDTO groupNewsMaterialAddDTO = new GroupNewsMaterialAddDTO();
groupNewsMaterialAddDTO.setAccountId(account.getAccountId());
groupNewsMaterialAddDTO.setCoverMediaId(account.getCoverMediaId());
......
package com.pcloud.book.group.biz.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.pcloud.book.group.biz.GroupMaterialAccountBiz;
import com.pcloud.book.group.entity.GroupMaterialAccount;
......@@ -45,12 +44,59 @@ public class GroupMaterialAccountBizImpl implements GroupMaterialAccountBiz {
@Override
public GroupMaterialAccount getActiveAccount(Integer useType) {
// 查询未达到限制或者已达到限制但已经超过24小时的
Date yesterday = DateUtil.offsetDay(new Date(), -1).toJdkDate();
List<GroupMaterialAccount> activeAccount = groupMaterialAccountMapper.getActiveAccount(yesterday, useType);
// 查询未达到限制或者已达到限制但已经到新的一天的
List<GroupMaterialAccount> activeAccount = groupMaterialAccountMapper.getActiveAccount(useType);
return checkLimit(activeAccount);
}
@Override
public GroupMaterialAccount getByAccountId(Long accountId) {
GroupMaterialAccount account = groupMaterialAccountMapper.getByAccountId(accountId);
if (Objects.nonNull(account)) {
// 补充群头像 - 图文消息内的图片
if (StrUtil.isBlank(account.getCoverMediaId()) || StrUtil.isBlank(account.getHeadMediaId())) {
try {
if (StrUtil.isBlank(account.getHeadMediaId())){
String url = ResponseHandleUtil.parseResponse(materialService.uploadImg(account.getAccountId(), GROUP_HEAD_IMAGE), String.class);
account.setHeadMediaId(url);
}
if (StrUtil.isBlank(account.getCoverMediaId())){
String mediaId = ResponseHandleUtil.parseResponse(materialService.addImgMaterial(account.getAccountId(), COVER_IMAGE), String.class);
account.setCoverMediaId(mediaId);
}
} catch (BizException e) {
// 接口调用超过限制,更新状态为达到限制
if (e.getMsg() != null && e.getMsg().contains("接口调用超过限制") && account.getStatus() == 1) {
account.setStatus(0);
account.setUpdateTime(new Date());
groupMaterialAccountMapper.update(account);
}
return null;
}
}
// 更新状态为可用
if (account.getStatus() == 0 || account.getUpdateTime()==null) {
account.setStatus(1);
account.setUpdateTime(new Date());
groupMaterialAccountMapper.update(account);
}
return account;
}
return null;
}
@Override
public void addAccount4Material(Long accountId, Integer useType) {
if (Objects.nonNull(accountId) && Objects.nonNull(useType)) {
GroupMaterialAccount account = new GroupMaterialAccount();
account.setAccountId(accountId);
account.setCreateTime(new Date());
account.setStatus(1);
account.setUseType(useType);
groupMaterialAccountMapper.insert(account);
}
}
/**
* 筛选一个可用的公众号
*/
......
......@@ -15,13 +15,10 @@ import com.pcloud.book.group.dto.SyncWeixinGroupIdRequestDTO;
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.entity.GroupMaterialAccount;
import com.pcloud.book.group.entity.GroupQrcode;
import com.pcloud.book.group.entity.WeixinQrcode;
import com.pcloud.book.group.entity.WeixinQrcodeGeneration;
import com.pcloud.book.group.enums.JoinGroupTypeEnum;
import com.pcloud.book.group.enums.UpdateStatusEnum;
import com.pcloud.book.group.enums.UseTypeEnum;
import com.pcloud.book.group.mapper.GroupMaterialAccountMapper;
import com.pcloud.book.group.tools.Kit;
import com.pcloud.book.group.tools.QrcodeTools;
......@@ -32,13 +29,10 @@ import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.core.biz.MessageBiz;
import com.pcloud.common.core.dto.SendEmailDto;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.QrcodeUtils;
import com.pcloud.common.utils.ResponseHandleUtil;
import com.pcloud.common.utils.cache.redis.JedisClusterUtils;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.facade.wechat.material.dto.GroupNewsMaterialAddDTO;
import com.pcloud.facade.wechat.material.service.MaterialService;
import com.pcloud.wechatgroup.group.dto.GroupRobotDTO;
import com.sdk.wxgroup.AddToGroupVO;
......@@ -56,7 +50,6 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......@@ -211,40 +204,6 @@ public class WeixinQrcodeBizImpl implements WeixinQrcodeBiz {
com.pcloud.promotion.fission.dto.UpdateQrDTO updateQr = new com.pcloud.promotion.fission.dto.UpdateQrDTO();
BeanUtils.copyProperties(updateQrDTO, updateQr);
promotionConsr.updateQrUrl(updateQr);
// 更新群的同时需要更新永久素材
GroupMaterialAccount activeAccount = groupMaterialAccountBiz.getActiveAccount(UseTypeEnum.NORMAL_GROUP.value);
if (Objects.nonNull(activeAccount)) {
updateMediaId(updateQrDTO, activeAccount);
}
}
}
private void updateMediaId(UpdateQrDTO updateQrDTO, GroupMaterialAccount activeAccount) {
WeixinQrcode qrcode = weixinQrcodeDao.getById(updateQrDTO.getId());
// 未使用的群暂时不做处理
GroupQrcode baseById = groupQrcodeDao.getByWxGroupId(qrcode.getWeixinGroupId());
if (baseById != null && baseById.getId() != null) {
String mediaId = groupQrcodeDao.getMediaId(baseById.getId());
GroupNewsMaterialAddDTO groupNewsMaterialAddDTO = new GroupNewsMaterialAddDTO();
groupNewsMaterialAddDTO.setAccountId(activeAccount.getAccountId());
groupNewsMaterialAddDTO.setGroupHeadImg(activeAccount.getHeadMediaId());
groupNewsMaterialAddDTO.setCoverMediaId(activeAccount.getCoverMediaId());
groupNewsMaterialAddDTO.setGroupName(baseById.getGroupName());
groupNewsMaterialAddDTO.setQrcodeUrl(updateQrDTO.getUrl());
groupNewsMaterialAddDTO.setMediaId(mediaId);
try {
mediaId = ResponseHandleUtil.parseResponse(materialService.getGroupNewsMaterial(groupNewsMaterialAddDTO), String.class);
// 增加素材更新时间字段,方便查询更新失败的群信息
groupQrcodeDao.updateMediaId(baseById.getId(), mediaId, new Date());
} catch (BizException e) {
if (e.getMsg()!=null && e.getMsg().contains("接口调用超过限制")&&activeAccount.getStatus() == 1) {
activeAccount.setStatus(0);
activeAccount.setUpdateTime(new Date());
groupMaterialAccountMapper.update(activeAccount);
}
} catch (Exception e) {
LOGGER.error("更新永久图文素材失败!", e);
}
}
}
......
......@@ -5,6 +5,7 @@ import com.pcloud.book.advertising.dto.WeixinClassifyInfoDTO;
import com.pcloud.book.es.entity.ESBookGroupQrcode;
import com.pcloud.book.group.dto.ChangeGroupNameDTO;
import com.pcloud.book.group.dto.GroupAndUserNumberDTO;
import com.pcloud.book.group.dto.GroupMaterialDTO;
import com.pcloud.book.group.dto.GroupQrcodeDTO;
import com.pcloud.book.group.dto.GroupQrcodeFoAdDTO;
import com.pcloud.book.group.dto.GroupQrcodeInfo4Advertising;
......@@ -336,4 +337,10 @@ public interface GroupQrcodeDao extends BaseDao<GroupQrcode> {
String getMediaId(Long id);
void updateMediaId(Long id, String mediaId, Date date);
List<GroupQrcodeDTO> getMigrateGroup(List<String> groups);
List<GroupMaterialDTO> listGroupMaterials();
void removeMediaIdByIds(List<Long> ids);
}
......@@ -9,6 +9,7 @@ import com.pcloud.book.es.entity.ESBookGroupQrcode;
import com.pcloud.book.group.dao.GroupQrcodeDao;
import com.pcloud.book.group.dto.ChangeGroupNameDTO;
import com.pcloud.book.group.dto.GroupAndUserNumberDTO;
import com.pcloud.book.group.dto.GroupMaterialDTO;
import com.pcloud.book.group.dto.GroupQrcodeDTO;
import com.pcloud.book.group.dto.GroupQrcodeFoAdDTO;
import com.pcloud.book.group.dto.GroupQrcodeInfo4Advertising;
......@@ -355,4 +356,23 @@ public class GroupQrcodeDaoImpl extends BaseDaoImpl<GroupQrcode> implements Grou
getSqlSession().update(getStatement("updateMediaId"),map);
}
@Override
public List<GroupQrcodeDTO> getMigrateGroup(List<String> groups) {
HashMap<String, Object> map = CollUtil.newHashMap(1);
map.put("list",groups);
return getSessionTemplate().selectList(getStatement("getMigrateGroup"),map);
}
@Override
public List<GroupMaterialDTO> listGroupMaterials() {
return getSessionTemplate().selectList(getStatement("listGroupMaterials"));
}
@Override
public void removeMediaIdByIds(List<Long> ids) {
HashMap<String, Object> map = CollUtil.newHashMap(1);
map.put("list",ids);
getSessionTemplate().delete(getStatement("removeMediaIdByIds"),map);
}
}
package com.pcloud.book.group.dto;
import lombok.Data;
import java.util.Date;
/**
* 群二维码永久素材DTO
* @author guiq
* @since 2020年8月3日
* @version 1.0
*/
@Data
public class GroupMaterialDTO {
/**
* book_group_qrcode.id
*/
private Long id;
private String groupName;
private String qrcodeUrl;
private String mediaId;
private String wxGroupId;
private Date updateTime;
}
package com.pcloud.book.group.dto;
import lombok.Data;
@Data
public class UpdateGroupMaterialDTO {
/**
* book_group_qrcode id
*/
private Long id;
private Long bookGroupQrcodeId;
private Long wxGroupId;
private String groupName;
private String qrcodeUrl;
private String mediaId;
private Integer accountId;
}
package com.pcloud.book.group.entity;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 业务素材与微信素材对照表(BizMaterial)实体类
*
* @author guiq
* @since 2020-07-31 16:34:30
*/
@Data
public class BizMaterial implements Serializable {
private static final long serialVersionUID = -99446150426970439L;
private Long id;
/**
* 素材media_id
*/
private String mediaId;
/**
* 素材地址
*/
private String materialUrl;
/**
* 公众号ID
*/
private Integer accountId;
/**
* 业务素材类型 0:群二维码永久图文素材 1:三方群永久图文素材
*/
private Integer bizType;
/**
* 业务素材ID
*/
private Integer bizId;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
}
\ No newline at end of file
......@@ -42,5 +42,9 @@ public class GroupMaterialAccount implements Serializable {
* 更新时间
*/
private Date updateTime;
/**
* 0 普通社群 1第三方社群
*/
private Integer useType;
}
\ No newline at end of file
package com.pcloud.book.group.mapper;
import com.pcloud.book.group.dto.UpdateGroupMaterialDTO;
import com.pcloud.book.group.entity.BizMaterial;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 业务素材与微信素材对照表(BizMaterial)表数据库访问层
*
* @author makejava
* @since 2020-07-31 16:34:30
*/
@Mapper
@Component
public interface BizMaterialMapper {
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
BizMaterial queryById(Long id);
/**
* 查询指定行数据
*
* @param offset 查询起始位置
* @param limit 查询条数
* @return 对象列表
*/
List<BizMaterial> queryAllByLimit(@Param("offset") int offset, @Param("limit") int limit);
/**
* 通过实体作为筛选条件查询
*
* @param bizMaterial 实例对象
* @return 对象列表
*/
List<BizMaterial> queryAll(BizMaterial bizMaterial);
/**
* 新增数据
*
* @param bizMaterial 实例对象
* @return 影响行数
*/
int insert(BizMaterial bizMaterial);
/**
* 修改数据
*
* @param bizMaterial 实例对象
* @return 影响行数
*/
int update(BizMaterial bizMaterial);
/**
* 通过主键删除数据
*
* @param id 主键
* @return 影响行数
*/
int deleteById(Long id);
void batchInsert(@Param("list") List<BizMaterial> bizMaterials);
List<UpdateGroupMaterialDTO> listBizMaterialsByGroupId(@Param("list") List<String> groups);
/**
* 插入或者更新
*/
void insertOrUpdate(BizMaterial bizMaterial);
String selectMaterialUrl4Biz(@Param("bizId") Long bizId, @Param("bizType") Integer bizType);
}
\ No newline at end of file
......@@ -5,7 +5,6 @@ import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
/**
......@@ -71,8 +70,9 @@ public interface GroupMaterialAccountMapper {
/**
* 获取一个新增/更新永久图文素材未达限制的公众号
*
* @param date
* @param useType
*/
List<GroupMaterialAccount> getActiveAccount(@Param("date") Date date, @Param("useType") Integer useType);
List<GroupMaterialAccount> getActiveAccount(@Param("useType") Integer useType);
GroupMaterialAccount getByAccountId(@Param("accountId") Long accountId);
}
\ No newline at end of file
package com.pcloud.book.group.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.pcloud.book.book.constant.BookConstant;
import com.pcloud.book.group.biz.GroupMaterialAccountBiz;
import com.pcloud.book.group.biz.GroupQrcodeBiz;
import com.pcloud.book.group.biz.WeixinQrcodeBiz;
import com.pcloud.book.group.dao.WeixinQrcodeDao;
import com.pcloud.book.group.dto.BookWxQrcodeDTO;
import com.pcloud.book.group.dto.GroupQrcodeInfo4Advertising;
import com.pcloud.book.group.dto.MaterialMigrateDTO;
import com.pcloud.book.group.dto.SearchDto;
import com.pcloud.book.group.dto.SyncWeixinGroupIdDTO;
import com.pcloud.book.group.dto.UpdateQrDTO;
......@@ -16,7 +20,8 @@ import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.ResponseHandleUtil;
import com.pcloud.common.utils.cache.redis.JedisClusterUtils;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
......@@ -27,10 +32,10 @@ import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import io.swagger.annotations.ApiOperation;
import java.util.Objects;
/**
* @author lily
......@@ -46,6 +51,8 @@ public class WeixinQrcodeServiceImpl implements WeixinQrcodeService {
private GroupQrcodeBiz groupQrcodeBiz;
@Autowired
private WeixinQrcodeDao weixinQrcodeDao;
@Autowired
private GroupMaterialAccountBiz groupMaterialAccountBiz;
@Override
@GetMapping("tenQuartz")
......@@ -184,4 +191,37 @@ public class WeixinQrcodeServiceImpl implements WeixinQrcodeService {
public ResponseEntity<ResponseDto<List<UpdateQrDTO>>> listQrCode4Android(@RequestParam("generation") Integer generation, @RequestParam("num") Integer num) {
return ResponseHandleUtil.toResponse(weixinQrcodeDao.listQrCode4Android(generation, num));
}
@Override
@RequestMapping(value = "updateGroupMaterial", method = RequestMethod.POST)
public ResponseEntity<ResponseDto<Integer>> updateGroupMaterial(@RequestBody List<String> groups) {
if (CollUtil.isEmpty(groups)) {
return ResponseHandleUtil.toResponse(0);
}
return ResponseHandleUtil.toResponse(groupQrcodeBiz.updateGroupMaterial(groups));
}
@Override
@RequestMapping(value = "/migrateMaterial", method = RequestMethod.POST)
public ResponseEntity<ResponseDto<List<String>>> migrateMaterial(@RequestBody MaterialMigrateDTO migrateDTO) {
if (Objects.isNull(migrateDTO.getAccountId()) || CollUtil.isEmpty(migrateDTO.getGroups())) {
return ResponseHandleUtil.toResponse(new ArrayList<>());
}
return ResponseHandleUtil.toResponse(groupQrcodeBiz.migrateMaterial(migrateDTO));
}
@Override
@RequestMapping(value = "syncGroupMaterial", method = RequestMethod.POST)
public void syncGroupMaterial(@RequestBody Map<String, Long> accountMap) {
if (CollUtil.isEmpty(accountMap)) {
return;
}
groupQrcodeBiz.syncGroupMaterial(accountMap);
}
@Override
@RequestMapping(value = "/addAccount4Material", method = RequestMethod.GET)
public void addAccount4Material(@RequestParam("accountId") Long accountId, @RequestParam("useType") Integer useType) {
groupMaterialAccountBiz.addAccount4Material(accountId, useType);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pcloud.book.group.mapper.BizMaterialMapper">
<resultMap type="com.pcloud.book.group.entity.BizMaterial" id="BizMaterialMap">
<result property="id" column="id" jdbcType="INTEGER"/>
<result property="mediaId" column="media_id" jdbcType="VARCHAR"/>
<result property="materialUrl" column="material_url" jdbcType="VARCHAR"/>
<result property="accountId" column="account_id" jdbcType="INTEGER"/>
<result property="bizType" column="biz_type" jdbcType="INTEGER"/>
<result property="bizId" column="biz_id" jdbcType="INTEGER"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
</resultMap>
<!--查询单个-->
<select id="queryById" resultMap="BizMaterialMap">
select id,
media_id,
material_url,
account_id,
biz_type,
biz_id,
create_time,
update_time
from book.biz_material
where id = #{id}
</select>
<!--查询指定行数据-->
<select id="queryAllByLimit" resultMap="BizMaterialMap">
select id,
media_id,
material_url,
account_id,
biz_type,
biz_id,
create_time,
update_time
from book.biz_material
limit #{offset}, #{limit}
</select>
<!--通过实体作为筛选条件查询-->
<select id="queryAll" resultMap="BizMaterialMap">
select
id, media_id, material_url, account_id, biz_type, biz_id, create_time, update_time
from book.biz_material
<where>
<if test="id != null">
and id = #{id}
</if>
<if test="mediaId != null and mediaId != ''">
and media_id = #{mediaId}
</if>
<if test="materialUrl != null and materialUrl != ''">
and material_url = #{materialUrl}
</if>
<if test="accountId != null">
and account_id = #{accountId}
</if>
<if test="bizType != null">
and biz_type = #{bizType}
</if>
<if test="bizId != null">
and biz_id = #{bizId}
</if>
<if test="createTime != null">
and create_time = #{createTime}
</if>
<if test="updateTime != null">
and update_time = #{updateTime}
</if>
</where>
</select>
<!--新增所有列-->
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
insert into book.biz_material(media_id, material_url, account_id, biz_type, biz_id, create_time, update_time)
values (#{mediaId}, #{materialUrl}, #{accountId}, #{bizType}, #{bizId}, #{createTime}, #{updateTime})
</insert>
<insert id="batchInsert" parameterType="list">
insert into book.biz_material (media_id, material_url, account_id, biz_type, biz_id, create_time, update_time)
values
<foreach collection="list" item="item" separator=",">
(#{item.mediaId}, #{item.materialUrl}, #{item.accountId}, #{item.bizType}, #{item.bizId}, #{item.createTime}, NOW())
</foreach>
on duplicate key update
media_id = values(media_id),
material_url = values(material_url),
account_id = values(account_id),
biz_type = values(biz_type),
biz_id = values(biz_id),
create_time = values(create_time),
update_time = values(update_time)
</insert>
<!--通过主键修改数据-->
<update id="update">
update book.biz_material
<set>
<if test="mediaId != null and mediaId != ''">
media_id = #{mediaId},
</if>
<if test="materialUrl != null and materialUrl != ''">
material_url = #{materialUrl},
</if>
<if test="accountId != null">
account_id = #{accountId},
</if>
<if test="bizType != null">
biz_type = #{bizType},
</if>
<if test="bizId != null">
biz_id = #{bizId},
</if>
<if test="createTime != null">
create_time = #{createTime},
</if>
<if test="updateTime != null">
update_time = #{updateTime},
</if>
</set>
where id = #{id}
</update>
<!--通过主键删除-->
<delete id="deleteById">
delete
from book.biz_material
where id = #{id}
</delete>
<select id="listBizMaterialsByGroupId" resultType="com.pcloud.book.group.dto.UpdateGroupMaterialDTO" parameterType="list">
SELECT
b.id AS id,
a.group_name AS groupName,
a.weixin_group_id AS wxGroupId,
a.id AS bookGroupQrcodeId,
a.qrcode_url AS qrcodeUrl,
b.account_id AS accountId,
b.media_id AS mediaId
FROM
book_group_qrcode a
LEFT JOIN biz_material b ON a.id = b.biz_id
WHERE
a.weixin_group_id IN
<foreach collection="list" open="(" close=")" item="item" separator=",">
#{item}
</foreach>
</select>
<insert id="insertOrUpdate">
insert into book.biz_material (media_id, material_url, account_id, biz_type, biz_id, create_time, update_time)
values
(#{mediaId}, #{materialUrl}, #{accountId}, #{bizType}, #{bizId}, #{createTime}, NOW())
on duplicate key update
media_id = values(media_id),
material_url = values(material_url),
account_id = values(account_id),
biz_type = values(biz_type),
biz_id = values(biz_id),
create_time = values(create_time),
update_time = values(update_time)
</insert>
<select id="selectMaterialUrl4Biz" resultType="java.lang.String">
select material_url from biz_material where biz_id = #{bizId} AND biz_type=#{bizType} limit 1
</select>
</mapper>
\ No newline at end of file
......@@ -68,19 +68,25 @@
</where>
</select>
<select id="getActiveAccount" resultMap="GroupMaterialAccountMap">
select id,
account_id,
cover_media_id,
head_media_id,
status,
create_time,
update_time
from book.group_material_account
where
(status = 1 or (status = 0 and update_time <![CDATA[ < ]]> #{date}))
<if test="useType != null">
and use_type = #{useType}
</if>
SELECT
a.id,
a.account_id,
a.cover_media_id,
a.head_media_id,
a.`status`,
a.create_time,
a.update_time,
count( 0 ) sum
FROM
group_material_account a
LEFT JOIN biz_material b ON a.account_id = b.account_id
WHERE
(a.`status` = 1 or (a.`status` = 0 and a.update_time <![CDATA[ < ]]> DATE(NOW())))
<if test="useType != null">
and a.use_type = #{useType}
</if>
GROUP BY a.account_id
ORDER BY sum
</select>
<!--新增所有列-->
......@@ -123,4 +129,17 @@
where id = #{id}
</delete>
<select id="getByAccountId" resultMap="GroupMaterialAccountMap">
select
id,
account_id,
cover_media_id,
head_media_id,
`status`,
create_time,
update_time
from group_material_account
where account_id = #{accountId}
</select>
</mapper>
\ No newline at end of file
......@@ -987,4 +987,43 @@
UPDATE book_group_qrcode SET media_id = #{mediaId},update_material_time = #{date}
WHERE id = #{id}
</update>
<select id="getMigrateGroup" parameterType="map" resultType="com.pcloud.book.group.dto.GroupQrcodeDTO">
SELECT
id AS id,
classify_id AS classifyId,
group_name AS groupName,
weixin_qrcode_id AS weixinQrcodeId,
weixin_group_id AS weixinGroupId,
qrcode_url AS qrcodeUrl
FROM
book_group_qrcode
WHERE
weixin_group_id IN
<foreach collection="list" open="(" close=")" separator="," item="item">
#{item}
</foreach>
</select>
<select id="listGroupMaterials" resultType="com.pcloud.book.group.dto.GroupMaterialDTO">
SELECT
id,
group_name AS groupName,
qrcode_url AS qrcodeUrl,
media_id AS mediaId,
weixin_group_id AS wxGroupId,
update_material_time AS updateTime
FROM
book_group_qrcode
WHERE
media_id IS NOT NULL
LIMIT 1000
</select>
<delete id="removeMediaIdByIds" parameterType="map">
update book_group_qrcode set media_id = null,update_material_time = null where id in
<foreach collection="list" separator="," item="item" open="(" close=")">
${item}
</foreach>
</delete>
</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