Commit 80028367 by 吴博

Merge branch 'feature/1007307' into 'release'

feat: [1007307] 多渠道抖音

See merge request rays/pcloud-book!1607
parents c3a0a668 656a61ee
......@@ -6,6 +6,8 @@ package com.pcloud.book.consumer.user;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.pcloud.channelcenter.base.exceptions.ChannelBizException;
import com.pcloud.channelcenter.channel.dto.DouyinVideoDTO;
import com.pcloud.channelcenter.channel.service.ChannelCenterService;
import com.pcloud.channelcenter.qrcode.dto.AdviserQrcodeSceneDTO;
import com.pcloud.channelcenter.qrcode.dto.Book4CatalogDTO;
import com.pcloud.channelcenter.qrcode.dto.MapResourceCountDTO;
......@@ -14,8 +16,8 @@ import com.pcloud.channelcenter.qrcode.dto.QrcodeSceneDto;
import com.pcloud.channelcenter.qrcode.service.QrcodeLocationAssocService;
import com.pcloud.channelcenter.qrcode.service.QrcodeSceneService;
import com.pcloud.channelcenter.qrcode.vo.BookQrcodeVO;
import com.pcloud.channelcenter.wechat.dto.AccountSettingDto;
import com.pcloud.channelcenter.qrcode.vo.ServeIdTypeVO;
import com.pcloud.channelcenter.wechat.dto.AccountSettingDto;
import com.pcloud.channelcenter.wechat.entity.AccountSetting;
import com.pcloud.channelcenter.wechat.service.AccountSettingService;
import com.pcloud.channelcenter.wechat.service.MessageService;
......@@ -25,7 +27,7 @@ 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.promotion.base.exception.PromotionException;
import com.pcloud.promotion.base.exception.PromotionException;
import com.pcloud.usercenter.party.channel.service.ChannelService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -62,6 +64,8 @@ public class ChannelConsr {
private AccountSettingService accountSettingService;
@Autowired
private QrcodeLocationAssocService qrcodeLocationAssocService;
@Autowired
private ChannelCenterService channelCenterService;
/**
* 获取渠道名称
......@@ -391,4 +395,17 @@ public class ChannelConsr {
}
return sendState;
}
public Map<String, DouyinVideoDTO> getDouyinVideoByItemIds(List<String> itemIds) {
Map<String, DouyinVideoDTO> douyinVideoDTOMap = new HashMap<>();
if (CollUtil.isEmpty(itemIds)) {
return douyinVideoDTOMap;
}
try {
douyinVideoDTOMap = ResponseHandleUtil.parseMap(channelCenterService.getDouyinVideoByItemIds(itemIds), String.class, DouyinVideoDTO.class);
} catch (BizException e) {
LOGGER.warn("channelCenterService.getDouyinVideoByItemIds" + e.getMessage(), e);
}
return douyinVideoDTOMap;
}
}
package com.pcloud.book.group.biz;
import com.pcloud.book.group.dto.MultiChannelContentDTO;
import com.pcloud.book.group.entity.MultiChannelContent;
import com.pcloud.common.page.PageBeanNew;
import java.util.List;
/**
* (MultiChannelContent)表服务接口
*
* @author wubo
* @since 2022-06-06 19:11:46
*/
public interface MultiChannelContentBiz {
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
MultiChannelContent getById(Long id);
/**
* 分页查询
*/
PageBeanNew getList(Integer currentPage, Integer numPerPage);
/**
* 新增数据
*
* @param multiChannelContent 实例对象
* @return 主键
*/
Long insert(MultiChannelContent multiChannelContent);
/**
* 修改数据
*
* @param multiChannelContent 实例对象
*/
void update(MultiChannelContent multiChannelContent);
/**
* 通过主键删除数据
*
* @param id 主键
* @return 是否成功
*/
void deleteById(Long id);
/**
* 通过主键软删除数据
*
* @param id 主键
* @return 是否成功
*/
void softDeleteById(Long id);
/**
* 批量新增
* @param multiChannelContentDTOS
*/
void batchInsert(List<MultiChannelContentDTO> multiChannelContentDTOS);
/**
*
* @param multiChannelContentIds
* @return
*/
List<MultiChannelContentDTO> selectList(List<Long> multiChannelContentIds);
}
package com.pcloud.book.group.biz;
import com.pcloud.book.group.dto.MultiChannelContentItemDTO;
import com.pcloud.book.group.entity.MultiChannelContentItem;
import com.pcloud.common.page.PageBeanNew;
import java.util.List;
/**
* (MultiChannelContentItem)表服务接口
*
* @author wubo
* @since 2022-06-06 19:12:16
*/
public interface MultiChannelContentItemBiz {
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
MultiChannelContentItem getById(Long id);
/**
* 分页查询
*/
PageBeanNew getList(Integer currentPage, Integer numPerPage);
/**
* 新增数据
*
* @param multiChannelContentItem 实例对象
* @return 主键
*/
Long insert(MultiChannelContentItem multiChannelContentItem);
/**
* 修改数据
*
* @param multiChannelContentItem 实例对象
*/
void update(MultiChannelContentItem multiChannelContentItem);
/**
* 通过主键删除数据
*
* @param id 主键
* @return 是否成功
*/
void deleteById(Long id);
/**
* 通过主键软删除数据
*
* @param id 主键
* @return 是否成功
*/
void softDeleteById(Long id);
/**
* 批量新增
* @param multiChannelContentItems
*/
void insert(List<MultiChannelContentItem> multiChannelContentItems);
/**
* 批量获取多渠道内容
* @param multiChannelContentIds
* @return
*/
List<MultiChannelContentItemDTO> getByMultiChannelContentId(List<Long> multiChannelContentIds);
}
package com.pcloud.book.group.biz.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.pcloud.book.consumer.user.ChannelConsr;
import com.pcloud.book.group.biz.MultiChannelContentBiz;
import com.pcloud.book.group.biz.MultiChannelContentItemBiz;
import com.pcloud.book.group.dao.MultiChannelContentDao;
import com.pcloud.book.group.dto.MultiChannelContentDTO;
import com.pcloud.book.group.dto.MultiChannelContentItemDTO;
import com.pcloud.book.group.entity.MultiChannelContent;
import com.pcloud.book.group.entity.MultiChannelContentItem;
import com.pcloud.channelcenter.channel.dto.DouyinVideoDTO;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.page.PageParam;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.NumberUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* (MultiChannelContent)表服务实现类
*
* @author wubo
* @since 2022-06-06 19:11:46
*/
@Service("multiChannelContentBiz")
public class MultiChannelContentBizImpl implements MultiChannelContentBiz {
private static final Logger LOGGER = LoggerFactory.getLogger(MultiChannelContentBizImpl.class);
@Autowired
private MultiChannelContentDao multiChannelContentDao;
@Autowired
private MultiChannelContentItemBiz multiChannelContentItemBiz;
@Autowired
private ChannelConsr channelConsr;
@Override
@ParamLog("通过ID查询单条数据")
public MultiChannelContent getById(Long id) {
return multiChannelContentDao.getById(id);
}
@Override
@ParamLog("查询多条数据")
public PageBeanNew getList(Integer currentPage, Integer numPerPage) {
PageBeanNew pageBeanNew = multiChannelContentDao.listPageNew(new PageParam(currentPage, numPerPage), null, "getList");
List recordList = pageBeanNew.getRecordList();
if (ListUtils.isEmpty(recordList)){
return pageBeanNew;
}
// 加载其它数据
return pageBeanNew;
}
@Override
@ParamLog("新增")
public Long insert(MultiChannelContent multiChannelContent) {
multiChannelContentDao.insert(multiChannelContent);
return multiChannelContent.getId();
}
@Override
@ParamLog("修改")
public void update(MultiChannelContent multiChannelContent) {
if(multiChannelContent == null || !NumberUtil.isNumber(multiChannelContent.getId())){
throw BizException.PARAM_IS_NULL;
}
multiChannelContentDao.update(multiChannelContent);
}
@Override
@ParamLog("删除")
public void deleteById(Long id) {
multiChannelContentDao.deleteById(id);
}
@Override
@ParamLog("软删除")
public void softDeleteById(Long id) {
multiChannelContentDao.softDeleteById(id);
}
@Override
public void batchInsert(List<MultiChannelContentDTO> multiChannelContentDTOS) {
if (CollUtil.isEmpty(multiChannelContentDTOS)) {
return;
}
List<MultiChannelContent> multiChannelContents = new ArrayList<>();
Map<MultiChannelContentDTO, MultiChannelContent> multiChannelContentMap = new HashMap<>();
for (MultiChannelContentDTO multiChannelContentDTO : multiChannelContentDTOS) {
MultiChannelContent multiChannelContent = BeanUtil.copyProperties(multiChannelContentDTO, MultiChannelContent.class);
multiChannelContents.add(multiChannelContent);
multiChannelContentMap.put(multiChannelContentDTO, multiChannelContent);
}
multiChannelContentDao.insert(multiChannelContents);
List<MultiChannelContentItemDTO> multiChannelContentItemDTOS = new ArrayList<>();
multiChannelContents.stream().forEach(e -> {
if (CollUtil.isEmpty(e.getMultiChannelContentItems())) {
return;
}
e.getMultiChannelContentItems().forEach(f -> f.setMultiChannelContentId(e.getId()));
multiChannelContentItemDTOS.addAll(e.getMultiChannelContentItems());
});
if (CollUtil.isEmpty(multiChannelContentItemDTOS)) {
return;
}
List<MultiChannelContentItem> multiChannelContentItems = BeanUtil.copyToList(multiChannelContentItemDTOS, MultiChannelContentItem.class);
multiChannelContentItemBiz.insert(multiChannelContentItems);
//复制id
for (MultiChannelContentDTO e : multiChannelContentDTOS) {
for(Map.Entry<MultiChannelContentDTO, MultiChannelContent> entry : multiChannelContentMap.entrySet()) {
if (entry.getKey().equals(e)) {
e.setId(entry.getValue().getId());
}
}
/* MultiChannelContent multiChannelContent = multiChannelContentMap.get(e);
e.setId(null != multiChannelContent ? multiChannelContent.getId() : null);*/
}
}
@Override
public List<MultiChannelContentDTO> selectList(List<Long> multiChannelContentIds) {
List<MultiChannelContentDTO> multiChannelContentDTOS = new ArrayList<>();
if (CollUtil.isEmpty(multiChannelContentIds)) {
return multiChannelContentDTOS;
}
List<MultiChannelContent> multiChannelContents = multiChannelContentDao.selectList(multiChannelContentIds);
List<MultiChannelContentItemDTO> multiChannelContentItemDTOS = multiChannelContentItemBiz.getByMultiChannelContentId(multiChannelContentIds);
if (CollUtil.isEmpty(multiChannelContents) || CollUtil.isEmpty(multiChannelContentItemDTOS)) {
return multiChannelContentDTOS;
}
multiChannelContentDTOS = BeanUtil.copyToList(multiChannelContents, MultiChannelContentDTO.class);
List<String> itemIds = multiChannelContentItemDTOS.stream().map(e -> e.getItemId()).collect(Collectors.toList());
Map<String, DouyinVideoDTO> douyinVideoDTOMap = channelConsr.getDouyinVideoByItemIds(itemIds);
multiChannelContentItemDTOS.stream().forEach(e -> {
if (CollUtil.isNotEmpty(douyinVideoDTOMap) || null != douyinVideoDTOMap.get(e.getItemId())) {
DouyinVideoDTO douyinVideoDTO = douyinVideoDTOMap.get(e.getItemId());
BeanUtil.copyProperties(douyinVideoDTO, e, "id");
}
});
Map<Long, List<MultiChannelContentItemDTO>> itemDTOMap = multiChannelContentItemDTOS.stream().collect(Collectors.groupingBy(MultiChannelContentItemDTO::getMultiChannelContentId));
multiChannelContentDTOS.stream().forEach(e -> {
e.setMultiChannelContentItems(itemDTOMap.get(e.getId()));
});
return multiChannelContentDTOS;
}
}
package com.pcloud.book.group.biz.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.pcloud.book.group.dto.MultiChannelContentItemDTO;
import com.pcloud.book.group.entity.MultiChannelContentItem;
import com.pcloud.book.group.dao.MultiChannelContentItemDao;
import com.pcloud.book.group.biz.MultiChannelContentItemBiz;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.page.PageParam;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.NumberUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* (MultiChannelContentItem)表服务实现类
*
* @author wubo
* @since 2022-06-06 19:12:16
*/
@Service("multiChannelContentItemBiz")
public class MultiChannelContentItemBizImpl implements MultiChannelContentItemBiz {
private static final Logger LOGGER = LoggerFactory.getLogger(MultiChannelContentItemBizImpl.class);
@Autowired
private MultiChannelContentItemDao multiChannelContentItemDao;
@Override
@ParamLog("通过ID查询单条数据")
public MultiChannelContentItem getById(Long id) {
return multiChannelContentItemDao.getById(id);
}
@Override
@ParamLog("查询多条数据")
public PageBeanNew getList(Integer currentPage, Integer numPerPage) {
PageBeanNew pageBeanNew = multiChannelContentItemDao.listPageNew(new PageParam(currentPage, numPerPage), null, "getList");
List recordList = pageBeanNew.getRecordList();
if (ListUtils.isEmpty(recordList)){
return pageBeanNew;
}
// 加载其它数据
return pageBeanNew;
}
@Override
@ParamLog("新增")
public Long insert(MultiChannelContentItem multiChannelContentItem) {
multiChannelContentItemDao.insert(multiChannelContentItem);
return multiChannelContentItem.getId();
}
@Override
@ParamLog("修改")
public void update(MultiChannelContentItem multiChannelContentItem) {
if(multiChannelContentItem == null || !NumberUtil.isNumber(multiChannelContentItem.getId())){
throw BizException.PARAM_IS_NULL;
}
multiChannelContentItemDao.update(multiChannelContentItem);
}
@Override
@ParamLog("删除")
public void deleteById(Long id) {
multiChannelContentItemDao.deleteById(id);
}
@Override
@ParamLog("软删除")
public void softDeleteById(Long id) {
multiChannelContentItemDao.softDeleteById(id);
}
@Override
public void insert(List<MultiChannelContentItem> multiChannelContentItems) {
multiChannelContentItemDao.insert(multiChannelContentItems);
}
@Override
public List<MultiChannelContentItemDTO> getByMultiChannelContentId(List<Long> multiChannelContentIds) {
List<MultiChannelContentItemDTO> multiChannelContentItemDTOS = new ArrayList<>();
if (CollUtil.isEmpty(multiChannelContentIds)) {
return multiChannelContentItemDTOS;
}
List<MultiChannelContentItem> multiChannelContentItems = multiChannelContentItemDao.getByMultiChannelContentId(multiChannelContentIds);
if (CollUtil.isEmpty(multiChannelContentItems)) {
return multiChannelContentItemDTOS;
}
multiChannelContentItemDTOS = BeanUtil.copyToList(multiChannelContentItems, MultiChannelContentItemDTO.class);
return multiChannelContentItemDTOS;
}
}
......@@ -58,6 +58,7 @@ import com.pcloud.book.consumer.wxwork.WxworkConsr;
import com.pcloud.book.copyright.biz.BookAuthServeBiz;
import com.pcloud.book.es.biz.ESBookAndAdviserBiz;
import com.pcloud.book.group.biz.BookGroupBiz;
import com.pcloud.book.group.biz.MultiChannelContentBiz;
import com.pcloud.book.group.biz.ResourcePageBiz;
import com.pcloud.book.group.biz.ResourcePageBookstoreBiz;
import com.pcloud.book.group.biz.ResourcePageOuterLinkBiz;
......@@ -83,6 +84,7 @@ import com.pcloud.book.group.dto.BookGroupServeDTO;
import com.pcloud.book.group.dto.BookServeDTO;
import com.pcloud.book.group.dto.MemberActivityBookSetDTO;
import com.pcloud.book.group.dto.MessagServeDTO;
import com.pcloud.book.group.dto.MultiChannelContentDTO;
import com.pcloud.book.group.dto.NavigationParamDTO;
import com.pcloud.book.group.dto.OwnQrcodeMessageDTO;
import com.pcloud.book.group.dto.ResourcePageCourseDTO;
......@@ -334,6 +336,8 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
private BookAuthServeBiz bookAuthServeBiz;
@Autowired
private ResourcePageOuterLinkBiz resourcePageOuterLinkBiz;
@Autowired
private MultiChannelContentBiz multiChannelContentBiz;
@Value("${book.share.defaultTitle}")
......@@ -654,6 +658,12 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
addOuterLink.forEach(e -> e.setResourceColumnId(resourcePageColumnId));
resourcePageOuterLinkBiz.batchInsert(addOuterLink);
}
// 新增多渠道
List<MultiChannelContentDTO> multiChannelContentDTOS = updateResourceColumnVO.getItemVOList().stream().filter(this::checkIsMultiChannel)
.map(ResourcePageItemVO::getMultiChannelContent).peek(this::checkMultiChannelParam).collect(Collectors.toList());
if (CollUtil.isNotEmpty(multiChannelContentDTOS)) {
multiChannelContentBiz.batchInsert(multiChannelContentDTOS);
}
//作品id
List<Long> productIds4Shelve = updateResourceColumnVO.getItemVOList().stream().filter(s->s.getServeType().equals(ResourcePageConstants.ServeTypeEnum.PRODUCT.getValue())).map(ResourcePageItemVO::getServeId).distinct().collect(Collectors.toList());
if (!ListUtils.isEmpty(updateResourceColumnVO.getItemVOList())) {
......@@ -686,6 +696,10 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
if (ResourcePageConstants.ColumnTypeEnum.OUTER_LINK.getCode().equals(updateResourceColumnVO.getColumnType())) {
item.setServeId(itemVO.getResourcePageOuterLink().getId());
}
//多渠道
if (ResourcePageConstants.ColumnTypeEnum.MULTI_CHANNEL.getCode().equals(updateResourceColumnVO.getColumnType())) {
item.setServeId(itemVO.getMultiChannelContent().getId());
}
itemList.add(item);
}
resourcePageItemDao.insert(itemList);
......@@ -708,6 +722,20 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
}
}
private void checkMultiChannelParam(MultiChannelContentDTO multiChannelContentDTO) {
if (Objects.isNull(multiChannelContentDTO.getChannelType())) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "请选择多渠道渠道!");
}
if (null == multiChannelContentDTO.getUserId()) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "授权用户id不能为null!");
}
if (CollUtil.isEmpty(multiChannelContentDTO.getMultiChannelContentItems())) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "配置内容不能为null");
}
}
private void checkOutLinkParam(ResourcePageOuterLink resourcePageOuterLink) {
if (Objects.isNull(resourcePageOuterLink.getOriginId())) {
......@@ -729,6 +757,12 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
&& Objects.nonNull(resourcePageItemVO.getResourcePageOuterLink());
}
private boolean checkIsMultiChannel(@Nullable ResourcePageItemVO resourcePageItemVO) {
return Objects.nonNull(resourcePageItemVO) &&
Objects.equals(ServeTypeEnum.MULTI_CHANNEL.getValue(), resourcePageItemVO.getServeType())
&& Objects.nonNull(resourcePageItemVO.getMultiChannelContent());
}
private void checkResourceColumn(UpdateResourceColumnVO updateResourceColumnVO) throws BizException {
if (null != updateResourceColumnVO.getShowMore() && updateResourceColumnVO.getShowMore() && null == updateResourceColumnVO.getShowCount()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "缺少展示更多数量");
......@@ -743,7 +777,8 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "缺少书刊链接来源");
}
if (!(ResourcePageConstants.ServeTypeEnum.OFFICIAL_ACCOUNT.getValue().equals(itemVO.getServeType()) ||
ResourcePageConstants.ServeTypeEnum.OUTER_LINK.getValue().equals(itemVO.getServeType()))
ResourcePageConstants.ServeTypeEnum.OUTER_LINK.getValue().equals(itemVO.getServeType()) ||
ResourcePageConstants.ServeTypeEnum.MULTI_CHANNEL.getValue().equals(itemVO.getServeType()))
&& (null == itemVO.getServeId() || StringUtil.isEmpty(itemVO.getServeType()))) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "缺少资源id或类型");
}
......@@ -4402,6 +4437,8 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
List<ResourceColumnAndServeVO> removeColumns = new ArrayList<>();
// 填充外链
fillOuterLink(itemVOList);
//填充多渠道
fillMultiChannel(itemVOList);
Map<Long, List<ResourcePageItemVO>> columnMap = itemVOList.stream().collect(Collectors.groupingBy(ResourcePageItemVO::getResourcePageColumnId));
for (ResourceColumnAndServeVO columnAndServeVO : serveVOS) {
List<ResourcePageItemVO> itemVOS = columnMap.get(columnAndServeVO.getResourcePageColumnId());
......@@ -4426,6 +4463,23 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
return removeColumns;
}
private void fillMultiChannel(List<ResourcePageItemVO> resourcePageItemVOList) {
if (CollUtil.isEmpty(resourcePageItemVOList)) {
return;
}
List<Long> multiChannelContentIds = resourcePageItemVOList.stream().filter(s -> ServeTypeEnum.MULTI_CHANNEL.getValue().
equals(s.getServeType())).map(e -> e.getServeId()).collect(Collectors.toList());
if (CollUtil.isEmpty(multiChannelContentIds)) {
return;
}
List<MultiChannelContentDTO> multiChannelContentDTOS = multiChannelContentBiz.selectList(multiChannelContentIds);
if (CollUtil.isEmpty(multiChannelContentDTOS)) {
return;
}
Map<Long, MultiChannelContentDTO> multiChannelContentDTOMap = multiChannelContentDTOS.stream().collect(Collectors.toMap(MultiChannelContentDTO::getId, Function.identity(), (K1, K2) -> (K1)));
resourcePageItemVOList.stream().forEach(e -> e.setMultiChannelContent(multiChannelContentDTOMap.get(e.getServeId())));
}
@Override
public Integer saveShareConfig(ResourcePageShareParam param) {
checkShareParam(param);
......
......@@ -34,7 +34,8 @@ public class ResourcePageConstants {
RAYS_TOOL(7,"RAYS工具",new String[]{ServeTypeEnum.APP.getValue()}),
MEMBER_ACTIVITY(8,"平台会员活动", new String[]{ServeTypeEnum.MEMBER_ACTIVITY.getValue()}),
CHANNEL_SHOP(9,"运营商城", new String[]{ServeTypeEnum.SHOP.getValue()}),
OUTER_LINK(10,"外链",new String[]{ServeTypeEnum.OUTER_LINK.getValue()});
OUTER_LINK(10,"外链",new String[]{ServeTypeEnum.OUTER_LINK.getValue()}),
MULTI_CHANNEL(12,"多渠道资源",new String[]{ServeTypeEnum.MULTI_CHANNEL.getValue()});
private Integer code;
private String name;
......@@ -91,7 +92,8 @@ public class ResourcePageConstants {
NO_SERVE("NO_SERVE","无服务"),
SHOP("SHOP","运营商城"),
RESOURCE("RESOURCE","素材"),
OUTER_LINK("OUTER_LINK","外链");
OUTER_LINK("OUTER_LINK","外链"),
MULTI_CHANNEL("MULTI_CHANNEL","多渠道资源");
private String value;
......
package com.pcloud.book.group.dao;
import com.pcloud.book.group.entity.MultiChannelContent;
import com.pcloud.common.core.dao.BaseDao;
import java.util.List;
/**
* (MultiChannelContent)表数据库访问层
*
* @author wubo
* @since 2022-06-06 19:11:46
*/
public interface MultiChannelContentDao extends BaseDao<MultiChannelContent> {
int softDeleteById(Long id);
List<MultiChannelContent> selectList(List<Long> multiChannelContentIds);
}
package com.pcloud.book.group.dao;
import com.pcloud.book.group.entity.MultiChannelContent;
import com.pcloud.book.group.entity.MultiChannelContentItem;
import com.pcloud.common.core.dao.BaseDao;
import java.util.List;
/**
* (MultiChannelContentItem)表数据库访问层
*
* @author wubo
* @since 2022-06-06 19:12:16
*/
public interface MultiChannelContentItemDao extends BaseDao<MultiChannelContentItem> {
int softDeleteById(Long id);
List<MultiChannelContentItem> getByMultiChannelContentId(List<Long> multiChannelContentIds);
}
package com.pcloud.book.group.dao.impl;
import com.pcloud.book.group.entity.MultiChannelContent;
import com.pcloud.book.group.dao.MultiChannelContentDao;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* (MultiChannelContent)表数据库访问层
*
* @author wubo
* @since 2022-06-06 19:11:46
*/
@Repository("multiChannelContentDaoImpl")
public class MultiChannelContentDaoImpl extends BaseDaoImpl<MultiChannelContent> implements MultiChannelContentDao {
public int softDeleteById(Long id) {
return getSessionTemplate().update(getStatement("softDeleteById"), id);
}
@Override
public List<MultiChannelContent> selectList(List<Long> multiChannelContentIds) {
return getSessionTemplate().selectList(getStatement("selectList"), multiChannelContentIds);
}
}
package com.pcloud.book.group.dao.impl;
import com.pcloud.book.group.entity.MultiChannelContentItem;
import com.pcloud.book.group.dao.MultiChannelContentItemDao;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* (MultiChannelContentItem)表数据库访问层
*
* @author wubo
* @since 2022-06-06 19:12:16
*/
@Repository("multiChannelContentItemDaoImpl")
public class MultiChannelContentItemDaoImpl extends BaseDaoImpl<MultiChannelContentItem> implements MultiChannelContentItemDao {
public int softDeleteById(Long id) {
return getSessionTemplate().update(getStatement("softDeleteById"), id);
}
@Override
public List<MultiChannelContentItem> getByMultiChannelContentId(List<Long> multiChannelContentIds) {
return getSessionTemplate().selectList(getStatement("getByMultiChannelContentId"), multiChannelContentIds);
}
}
package com.pcloud.book.group.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* @author 吴博
* @date 2022/06/06 19:12
**/
@Data
public class MultiChannelContentDTO implements Serializable {
private static final long serialVersionUID = -72951487589096388L;
@ApiModelProperty("主键id")
private Long id;
@ApiModelProperty("渠道类型 1 抖音")
private Integer channelType;
@ApiModelProperty("授权用户id")
private Long userId;
private List<MultiChannelContentItemDTO> multiChannelContentItems;
}
\ No newline at end of file
package com.pcloud.book.group.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @author 吴博
* @date 2022/06/06 19:13
**/
@Data
public class MultiChannelContentItemDTO implements Serializable {
private static final long serialVersionUID = -55475516566200414L;
@ApiModelProperty("主键id")
private Long id;
@ApiModelProperty("多渠道内容id")
private Long multiChannelContentId;
@ApiModelProperty("资源唯一id")
private String itemId;
@ApiModelProperty("封面")
private String cover;
@ApiModelProperty("用户id")
private Long userId;
@ApiModelProperty("标题")
private String title;
@ApiModelProperty("媒体类型。2:图集;4:视频")
private Integer mediaType;
@ApiModelProperty("是否置顶")
private String isTop;
@ApiModelProperty("视频创建时间戳")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@ApiModelProperty("表示是否审核结束。审核通过或者失败都会返回true,审核中返回false。")
private Integer isReviewed;
@ApiModelProperty("表示视频状态。1:已发布; 2:不适宜公开; 4:审核中")
private String videoStatus;
@ApiModelProperty("视频播放页面。视频播放页可能会失效,请在观看视频前调用/video/data/获取最新的播放页")
private String shareUrl;
@ApiModelProperty("更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
@ApiModelProperty("是否删除")
private Integer isDelete;
}
\ No newline at end of file
package com.pcloud.book.group.entity;
import java.util.Date;
import java.math.BigDecimal;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.book.group.dto.MultiChannelContentItemDTO;
import com.pcloud.common.entity.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* (MultiChannelContent)实体类
*
* @author wubo
* @since 2022-06-06 19:11:39
*/
@Data
public class MultiChannelContent extends BaseEntity {
private static final long serialVersionUID = -72951424589096388L;
@ApiModelProperty("主键id")
private Long id;
@ApiModelProperty("渠道类型 1 抖音")
private Integer channelType;
@ApiModelProperty("授权用户id")
private Long userId;
@ApiModelProperty("创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@ApiModelProperty("更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private List<MultiChannelContentItemDTO> multiChannelContentItems;
}
package com.pcloud.book.group.entity;
import java.util.Date;
import java.math.BigDecimal;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.entity.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* (MultiChannelContentItem)实体类
*
* @author wubo
* @since 2022-06-06 19:12:16
*/
@Data
public class MultiChannelContentItem extends BaseEntity {
private static final long serialVersionUID = -55475516566200414L;
@ApiModelProperty("主键id")
private Long id;
@ApiModelProperty("多渠道内容id")
private Long multiChannelContentId;
@ApiModelProperty("资源唯一id")
private String itemId;
@ApiModelProperty("封面")
private String cover;
@ApiModelProperty("创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@ApiModelProperty("更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
}
package com.pcloud.book.group.facade;
import com.pcloud.book.group.entity.MultiChannelContent;
import com.pcloud.book.group.biz.MultiChannelContentBiz;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.permission.PermissionException;
import com.pcloud.common.utils.SessionUtil;
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import io.swagger.annotations.ApiOperation;
/**
* (MultiChannelContent)表控制层
*
* @author wubo
* @since 2022-06-06 19:11:46
*/
@RestController("multiChannelContentFacade")
@RequestMapping("multiChannelContent")
public class MultiChannelContentFacade {
@Autowired
private MultiChannelContentBiz multiChannelContentBiz;
@ApiOperation("通过主键查询单条数据")
@GetMapping("getById")
public ResponseDto<?> getById(@RequestHeader("token") String token, @RequestParam Long id) throws BizException, PermissionException {
SessionUtil.getToken4Redis(token);
return new ResponseDto<>(multiChannelContentBiz.getById(id));
}
@ApiOperation("分页查询")
@GetMapping("getList")
public ResponseDto<?> getList(@RequestHeader("token") String token,
@RequestParam(value = "currentPage", defaultValue = "0") Integer currentPage,
@RequestParam(value = "numPerPage", defaultValue = "10") Integer numPerPage)
throws BizException, PermissionException {
SessionUtil.getToken4Redis(token);
return new ResponseDto<>(multiChannelContentBiz.getList(currentPage, numPerPage));
}
@ApiOperation("新增")
@PostMapping("insert")
public ResponseDto<?> insert(@RequestHeader("token") String token, @RequestBody MultiChannelContent multiChannelContent)
throws BizException, PermissionException {
SessionUtil.getToken4Redis(token);
return new ResponseDto<>(multiChannelContentBiz.insert(multiChannelContent));
}
@ApiOperation("更新")
@PostMapping("update")
public ResponseDto<?> update(@RequestHeader("token") String token,@RequestBody MultiChannelContent multiChannelContent) throws BizException, PermissionException {
SessionUtil.getToken4Redis(token);
multiChannelContentBiz.update(multiChannelContent);
return new ResponseDto<>();
}
@ApiOperation("删除")
@GetMapping("deleteById")
public ResponseDto<?> deleteById(@RequestHeader("token") String token, @RequestParam Long id) throws BizException, PermissionException {
SessionUtil.getToken4Redis(token);
if (null == id) {
throw BizException.PARAM_DELETION;
}
multiChannelContentBiz.deleteById(id);
return new ResponseDto<>();
}
@ApiOperation("软删除")
@GetMapping("softDeleteById")
public ResponseDto<?> softDeleteById(@RequestHeader("token") String token, @RequestParam Long id) throws BizException, PermissionException {
SessionUtil.getToken4Redis(token);
if (null == id) {
throw BizException.PARAM_DELETION;
}
multiChannelContentBiz.softDeleteById(id);
return new ResponseDto<>();
}
}
package com.pcloud.book.group.facade;
import com.pcloud.book.group.entity.MultiChannelContentItem;
import com.pcloud.book.group.biz.MultiChannelContentItemBiz;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.permission.PermissionException;
import com.pcloud.common.utils.SessionUtil;
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import io.swagger.annotations.ApiOperation;
/**
* (MultiChannelContentItem)表控制层
*
* @author wubo
* @since 2022-06-06 19:12:16
*/
@RestController("multiChannelContentItemFacade")
@RequestMapping("multiChannelContentItem")
public class MultiChannelContentItemFacade {
@Autowired
private MultiChannelContentItemBiz multiChannelContentItemBiz;
@ApiOperation("通过主键查询单条数据")
@GetMapping("getById")
public ResponseDto<?> getById(@RequestHeader("token") String token, @RequestParam Long id) throws BizException, PermissionException {
SessionUtil.getToken4Redis(token);
return new ResponseDto<>(multiChannelContentItemBiz.getById(id));
}
@ApiOperation("分页查询")
@GetMapping("getList")
public ResponseDto<?> getList(@RequestHeader("token") String token,
@RequestParam(value = "currentPage", defaultValue = "0") Integer currentPage,
@RequestParam(value = "numPerPage", defaultValue = "10") Integer numPerPage)
throws BizException, PermissionException {
SessionUtil.getToken4Redis(token);
return new ResponseDto<>(multiChannelContentItemBiz.getList(currentPage, numPerPage));
}
@ApiOperation("新增")
@PostMapping("insert")
public ResponseDto<?> insert(@RequestHeader("token") String token, @RequestBody MultiChannelContentItem multiChannelContentItem)
throws BizException, PermissionException {
SessionUtil.getToken4Redis(token);
return new ResponseDto<>(multiChannelContentItemBiz.insert(multiChannelContentItem));
}
@ApiOperation("更新")
@PostMapping("update")
public ResponseDto<?> update(@RequestHeader("token") String token,@RequestBody MultiChannelContentItem multiChannelContentItem) throws BizException, PermissionException {
SessionUtil.getToken4Redis(token);
multiChannelContentItemBiz.update(multiChannelContentItem);
return new ResponseDto<>();
}
@ApiOperation("删除")
@GetMapping("deleteById")
public ResponseDto<?> deleteById(@RequestHeader("token") String token, @RequestParam Long id) throws BizException, PermissionException {
SessionUtil.getToken4Redis(token);
if (null == id) {
throw BizException.PARAM_DELETION;
}
multiChannelContentItemBiz.deleteById(id);
return new ResponseDto<>();
}
@ApiOperation("软删除")
@GetMapping("softDeleteById")
public ResponseDto<?> softDeleteById(@RequestHeader("token") String token, @RequestParam Long id) throws BizException, PermissionException {
SessionUtil.getToken4Redis(token);
if (null == id) {
throw BizException.PARAM_DELETION;
}
multiChannelContentItemBiz.softDeleteById(id);
return new ResponseDto<>();
}
}
......@@ -4,6 +4,7 @@ import com.pcloud.book.applet.dto.AppletOuterBooklistDTO;
import com.pcloud.book.applet.dto.GroupActivity4AppletDTO;
import com.pcloud.book.applet.entity.AppletThirdResources;
import com.pcloud.book.book.vo.response.BookQrcodeWxworkResponseVO;
import com.pcloud.book.group.dto.MultiChannelContentDTO;
import com.pcloud.book.group.entity.ResourcePageOuterLink;
import com.pcloud.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
......@@ -95,6 +96,8 @@ public class ResourcePageItemVO extends BaseDto{
private BookQrcodeWxworkResponseVO bookQrcodeWxworkResponseVO;
@ApiModelProperty("外链")
private ResourcePageOuterLink resourcePageOuterLink;
@ApiModelProperty("多渠道资源")
private MultiChannelContentDTO multiChannelContent;
private Long sceneId;
......
<?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.dao.impl.MultiChannelContentDaoImpl">
<resultMap id="BaseResultMap" type="com.pcloud.book.group.entity.MultiChannelContent">
<id column="id" property="id" jdbcType="BIGINT"/>
<result column="channel_type" property="channelType" jdbcType="INTEGER"/>
<result column="user_id" property="userId" jdbcType="BIGINT"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
</resultMap>
<sql id="Base_Column_List">
id, channel_type, user_id, create_time, update_time
</sql>
<select id="getById" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM multi_channel_content
WHERE id = #{id}
</select>
<select id="getList" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM multi_channel_content
</select>
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
INSERT INTO multi_channel_content(
channel_type,
user_id,
create_time,
update_time
) VALUES (
#{channelType, jdbcType=INTEGER},
#{userId, jdbcType=BIGINT},
#{createTime, jdbcType=TIMESTAMP},
#{updateTime, jdbcType=TIMESTAMP}
)
</insert>
<insert id="batchInsert" keyProperty="id" useGeneratedKeys="true">
INSERT INTO multi_channel_content (
channel_type,
user_id,
create_time,
update_time
) VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.channelType, jdbcType=INTEGER},
#{item.userId, jdbcType=BIGINT},
now(),
now()
)
</foreach>
</insert>
<!--通过主键修改数据-->
<update id="update">
UPDATE multi_channel_content
<set>
<if test="channelType != null">
channel_type = #{channelType},
</if>
<if test="userId != null">
user_id = #{userId},
</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 multi_channel_content where id = #{id}
</delete>
<!--通过主键软删除-->
<delete id="softDeleteById">
update multi_channel_content set is_delete = 1, update_time = now() where id = #{id}
</delete>
<select id="selectList" parameterType="list" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
FROM
multi_channel_content
where id in
<foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
#{item}
</foreach>
</select>
</mapper>
<?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.dao.impl.MultiChannelContentItemDaoImpl">
<resultMap id="BaseResultMap" type="com.pcloud.book.group.entity.MultiChannelContentItem">
<id column="id" property="id" jdbcType="BIGINT"/>
<result column="multi_channel_content_id" property="multiChannelContentId" jdbcType="BIGINT"/>
<result column="item_id" property="itemId" jdbcType="VARCHAR"/>
<result column="cover" property="cover" jdbcType="VARCHAR"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
</resultMap>
<sql id="Base_Column_List">
id, multi_channel_content_id, item_id, cover, create_time, update_time
</sql>
<select id="getById" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM multi_channel_content_item
WHERE id = #{id}
</select>
<select id="getList" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM multi_channel_content_item
</select>
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
INSERT INTO multi_channel_content_item(
multi_channel_content_id,
item_id,
cover,
create_time,
update_time
) VALUES (
#{multiChannelContentId, jdbcType=BIGINT},
#{itemId, jdbcType=VARCHAR},
#{cover, jdbcType=VARCHAR},
#{createTime, jdbcType=TIMESTAMP},
#{updateTime, jdbcType=TIMESTAMP}
)
</insert>
<insert id="batchInsert">
INSERT INTO multi_channel_content_item (
multi_channel_content_id,
item_id,
cover,
create_time,
update_time
) VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.multiChannelContentId, jdbcType=BIGINT},
#{item.itemId, jdbcType=VARCHAR},
#{item.cover, jdbcType=VARCHAR},
now(),
now()
)
</foreach>
</insert>
<!--通过主键修改数据-->
<update id="update">
UPDATE multi_channel_content_item
<set>
<if test="multiChannelContentId != null">
multi_channel_content_id = #{multiChannelContentId},
</if>
<if test="itemId != null and itemId != ''">
item_id = #{itemId},
</if>
<if test="cover != null and cover != ''">
cover = #{cover},
</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 multi_channel_content_item where id = #{id}
</delete>
<!--通过主键软删除-->
<delete id="softDeleteById">
update multi_channel_content_item set is_delete = 1, update_time = now() where id = #{id}
</delete>
<select id="getByMultiChannelContentId" parameterType="long" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from
multi_channel_content_item
where
multi_channel_content_id in
<foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
#{item}
</foreach>
</select>
</mapper>
......@@ -28,7 +28,7 @@
<sql id="Base_Column_List">
id, resource_page_id, resource_page_column_id, serve_id, serve_type, link_url, type_code, seq_num, is_show,
guide_content, logo_url, create_time, qrcode_source, qrcode_show_type, account_setting_id,
self_big_pic, self_small_pic, self_serve_name
self_big_pic, self_small_pic, self_serve_name,item_id
</sql>
<!--查询单个-->
......
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