Commit 9f817115 by 吴博

feat: [1003350] 小程序首页栏目资讯自更新

parent 78033bc4
......@@ -373,6 +373,7 @@ public class BookConstant {
public static final String NO_RESOURCE_REMIND = "no_resource_remind";
public static final String DEFAULT_NEWS_PIC="https://oss.5rs.me/oss/uploadfe/jpg/c469a21a758b79e00783fe3a70a605c5.jpg";
/**
* 群二维码永久图文素材,html 源代码
*/
......
......@@ -258,4 +258,10 @@ public interface AppletNewsBiz {
* * @param null
*/
List<Long> getNewsIdListByCustomTagId(Long customTagId);
/**
* 批量插入资讯
* @param appletNewsList
*/
void batchInsert(List<AppletNews> appletNewsList);
}
package com.pcloud.book.applet.biz;
import com.pcloud.book.applet.dto.AppletNewsPoolDTO;
import com.pcloud.book.applet.entity.AppletNewsPool;
import com.pcloud.common.page.PageBeanNew;
import java.util.List;
public interface AppletNewsPoolBiz {
/**
* 根据id获取咨询详情
* @param id
* @return
*/
AppletNewsPool getById(Long id);
/**
* 根据id更新资讯
* @param appletNewsPool
*/
void update(AppletNewsPool appletNewsPool);
/**
* 批量删除
* @param ids
*/
void batchDelete(List<Long> ids);
/**
* 资讯池分页
* @param currentPage
* @param numPerPage
* @param newsName
* @param source
* @return
*/
PageBeanNew<AppletNewsPool> listNewsPage(Integer currentPage, Integer numPerPage, String newsName, String source);
/**
* 获取来源列表
* @return
*/
List<String> listSource();
/**
* 批量导入到资讯
* @param appletNewsPoolDTO
*/
void batchImport(AppletNewsPoolDTO appletNewsPoolDTO);
}
......@@ -60,6 +60,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......@@ -150,6 +151,9 @@ public class AppletNewsBizImpl implements AppletNewsBiz {
Long businessId = appletBusinessCardDao.insert(appletBusinessCard);
appletNews.setBusinessCardId(businessId);
}
if (null == appletNews.getNewsClassifyId()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL,"新增时栏目不能为空");
}
appletNews.setShowState(false);
rightsSettingBiz.setClassifyAndLabel(appletNews);
appletNewsDao.insert(appletNews);
......@@ -218,6 +222,9 @@ public class AppletNewsBizImpl implements AppletNewsBiz {
Long businessId = appletBusinessCardDao.update(appletBusinessCard);
}
}
if (null == appletNews.getNewsClassifyId()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL,"更新时栏目不能为空");
}
AppletNews beforeNews = appletNewsDao.getById(appletNews.getId());
rightsSettingBiz.setClassifyAndLabel(appletNews);
appletNewsDao.update(appletNews);
......@@ -369,52 +376,87 @@ public class AppletNewsBizImpl implements AppletNewsBiz {
@Override
public PageBeanNew<AppletNewsDTO> listAppletNews4Wechat(Integer currentPage, Integer numPerPage, Long newsClassifyId, Long wechatUserId) {
PageBeanNew<AppletNewsDTO> pageBeanNew = new PageBeanNew<>(currentPage, numPerPage, 0, new ArrayList<>());
Map<String, Object> paramMap = new HashMap<>();
if (null == newsClassifyId || newsClassifyId == 1) {
// 推荐栏目下的3条资讯更改为取自首页当前书刊的周权益下(资讯推送)权益分类
// 1.当周权益下未配置,直接根据当前书刊所属分类获取最新资讯,优先呈现本书有周权益配置了的资讯,其次获取本书所属分类下最新更新的。
// 2.当碰到部分无分类属性的书刊,沿用现有线上的推荐栏配置逻辑
AppletUserBookcase userReadBook = appletUserBookcaseDao.getUserReadBook(wechatUserId);
if (Objects.nonNull(userReadBook)) {
// 获取周权益资讯
pageBeanNew = rightsSettingBiz.getWeekRightsSettingNewsByBookId(userReadBook,currentPage,numPerPage);
if (CollUtil.isNotEmpty(pageBeanNew.getRecordList())) {
return pageBeanNew;
String subKey = wechatUserId + "_" + numPerPage + "_" + (null == newsClassifyId ? 1 : newsClassifyId);
//判断是否第一页
if (currentPage == 0) {
//第一页
if (null == newsClassifyId || newsClassifyId == 1){
// 推荐栏目下的3条资讯更改为取自首页当前书刊的周权益下(资讯推送)权益分类
// 1.当周权益下未配置,直接根据当前书刊所属分类获取最新资讯,优先呈现本书有周权益配置了的资讯,其次获取本书所属分类下最新更新的。
// 2.当碰到部分无分类属性的书刊,沿用现有线上的推荐栏配置逻辑
AppletUserBookcase userReadBook = appletUserBookcaseDao.getUserReadBook(wechatUserId);
if (Objects.nonNull(userReadBook)) {
// 获取周权益资讯 如果周权益不为空 则直接返回
pageBeanNew = rightsSettingBiz.getWeekRightsSettingNewsByBookId(userReadBook, currentPage, numPerPage);
if (CollUtil.isNotEmpty(pageBeanNew.getRecordList())) {
return pageBeanNew;
}
}
}
// WARN: 分类为 null 或者 1 时,表示首页推荐,此时,若上面方法没有查到数据,固定分页参数为[0,3]
List<Long> classifyIds = appletNewsClassifyDao.getClassifyIdsByUserId(wechatUserId);
if (ListUtils.isEmpty(classifyIds)) {//没有栏目id取第一个
List<AppletNewsClassifyDTO> classifyDTOS = getAllNewsClassify(true);
if (ListUtils.isEmpty(classifyDTOS)) {
return new PageBeanNew<>(currentPage, numPerPage, new ArrayList<>());
// WARN: 分类为 null 或者 1 时,表示首页推荐,此时,若上面方法没有查到数据,固定分页参数为[0,3]
List<Long> classifyIds = appletNewsClassifyDao.getClassifyIdsByUserId(wechatUserId);
if (ListUtils.isEmpty(classifyIds)) {//没有栏目id取第一个
List<AppletNewsClassifyDTO> classifyDTOS = getAllNewsClassify(true);
if (ListUtils.isEmpty(classifyDTOS)) {
return new PageBeanNew<>(currentPage, numPerPage, new ArrayList<>());
}
newsClassifyId = classifyDTOS.get(0).getId();
classifyIds.add(newsClassifyId);
}
newsClassifyId = classifyDTOS.get(0).getId();
classifyIds.add(newsClassifyId);
}
paramMap.put("newsClassifyIdList", classifyIds);
paramMap.put("order", 1);
//首页3条缓存5小时
List<AppletNewsDTO> homeList = JedisClusterUtils.getJsonList(AppletConstants.HOME_NEWS_LIST, AppletNewsDTO.class);
if (!ListUtils.isEmpty(homeList)) {
pageBeanNew = new PageBeanNew<>(0, 3, 3, homeList);
paramMap.put("newsClassifyIdList", classifyIds);
} else {
pageBeanNew = appletNewsDao.listPageNew(new PageParam(0, 3), paramMap, "listAppletNews4Wechat");
// 避免前端推荐分类分页参数生效
pageBeanNew = new PageBeanNew<>(0,3,3,pageBeanNew.getRecordList());
JedisClusterUtils.setJsonList(AppletConstants.HOME_NEWS_LIST, pageBeanNew.getRecordList(), 5 * 3600);
//首页的其他栏目
paramMap.put("newsClassifyId", newsClassifyId);
}
} else {//栏目下的资讯
paramMap.put("newsClassifyId", newsClassifyId);
paramMap.put("order", 1);
pageBeanNew = getAppletNewsDTOPageBeanNew(numPerPage, paramMap, subKey);
} else {
//非第一页 获取第一页的数据 并排除
pageBeanNew = getAppletNewsDTOPageBeanNew(currentPage, numPerPage, newsClassifyId, paramMap, subKey);
}
return pageBeanNew;
}
private PageBeanNew<AppletNewsDTO> getAppletNewsDTOPageBeanNew(Integer currentPage, Integer numPerPage, Long newsClassifyId, Map<String, Object> paramMap, String subKey) {
PageBeanNew<AppletNewsDTO> pageBeanNew;
List<AppletNewsDTO> homeList = JedisClusterUtils.getJsonList(AppletConstants.HOME_NEWS_LIST + subKey, AppletNewsDTO.class);
List<Long> firstPageIds = null;
if (!ListUtils.isEmpty(homeList)) {
firstPageIds = homeList.stream().map(e -> e.getId()).collect(Collectors.toList());
}
if (ListUtils.isEmpty(pageBeanNew.getRecordList())) {
pageBeanNew = appletNewsDao.listPageNew(new PageParam(currentPage, numPerPage), paramMap, "listAppletNews4Wechat");
paramMap.put("newsClassifyId", newsClassifyId);
paramMap.put("firstPageIds", firstPageIds);
pageBeanNew = appletNewsDao.listPageNew(new PageParam(currentPage - 1, numPerPage), paramMap, "listAppletNews4Wechat");
if (null != pageBeanNew && !ListUtils.isEmpty(pageBeanNew.getRecordList())) {
pageBeanNew = new PageBeanNew<>(currentPage, numPerPage, pageBeanNew.getTotalCount() + numPerPage, pageBeanNew.getRecordList());
} else if (null == pageBeanNew || ListUtils.isEmpty(pageBeanNew.getRecordList())) {
paramMap.remove("firstPageIds");
Integer count = appletNewsDao.listAppletNews4WechatCount(paramMap);
pageBeanNew = new PageBeanNew<>(currentPage, numPerPage, count, new ArrayList<>());
}
if (null == pageBeanNew || ListUtils.isEmpty(pageBeanNew.getRecordList())) {
return new PageBeanNew<>(currentPage, numPerPage, 0, new ArrayList<>());
return pageBeanNew;
}
private PageBeanNew<AppletNewsDTO> getAppletNewsDTOPageBeanNew(Integer numPerPage, Map<String, Object> paramMap, String subKey) {
PageBeanNew<AppletNewsDTO> pageBeanNew;//第一页缓存5小时
List<AppletNewsDTO> homeList = JedisClusterUtils.getJsonList(AppletConstants.HOME_NEWS_LIST + subKey, AppletNewsDTO.class);
if (!ListUtils.isEmpty(homeList)) {
Integer count = appletNewsDao.listAppletNews4WechatCount(paramMap);
pageBeanNew = new PageBeanNew<>(0, numPerPage, count, homeList);
} else {
pageBeanNew = appletNewsDao.listPageNew(new PageParam(0, numPerPage), paramMap, "listAppletNews4Wechat");
}
fillStatistic(pageBeanNew.getRecordList(), null, null);
//按点击量进行排序
if (!ListUtils.isEmpty(pageBeanNew.getRecordList())) {
pageBeanNew.getRecordList().sort(new Comparator<AppletNewsDTO>() {
@Override
public int compare(AppletNewsDTO o1, AppletNewsDTO o2) {
return o2.getClickCount().compareTo(o1.getClickCount());
}
});
}
JedisClusterUtils.setJsonList(AppletConstants.HOME_NEWS_LIST + subKey, pageBeanNew.getRecordList(), 5 * 3600);
return pageBeanNew;
}
......@@ -723,8 +765,10 @@ public class AppletNewsBizImpl implements AppletNewsBiz {
if (!MapUtils.isEmpty(clickMap) && clickMap.containsKey(newsId)) {
PvuvDTO pvuvDTO = clickMap.get(newsId);
appletNewsDTO.setClickPVUV(pvuvDTO.getPv() + "/" + pvuvDTO.getUv());
appletNewsDTO.setClickCount(pvuvDTO.getPv());
} else {
appletNewsDTO.setClickPVUV("0/0");
appletNewsDTO.setClickCount(0);
}
if (!MapUtils.isEmpty(browseMap) && browseMap.containsKey(newsId)) {
PvuvDTO pvuvDTO = browseMap.get(newsId);
......@@ -869,4 +913,12 @@ public class AppletNewsBizImpl implements AppletNewsBiz {
return appletNewsDao.getNewsIdListByCustomTagId(customTagId);
}
@Override
public void batchInsert(List<AppletNews> appletNewsList) {
if (ListUtils.isEmpty(appletNewsList)) {
return;
}
appletNewsDao.insert(appletNewsList);
}
}
package com.pcloud.book.applet.biz.impl;
import cn.hutool.core.util.PageUtil;
import com.alibaba.druid.sql.PagerUtils;
import com.pcloud.book.applet.biz.AppletNewsBiz;
import com.pcloud.book.applet.biz.AppletNewsPoolBiz;
import com.pcloud.book.applet.dao.AppletNewsPoolDAO;
import com.pcloud.book.applet.dto.AppletNewsPoolDTO;
import com.pcloud.book.applet.entity.AppletNews;
import com.pcloud.book.applet.entity.AppletNewsPool;
import com.pcloud.book.applet.enums.AppletNewsServeTypeEnum;
import com.pcloud.book.applet.enums.NewsJumpTypeEnum;
import com.pcloud.book.applet.enums.NewsTypeEnum;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.book.constant.BookConstant;
import com.pcloud.book.personalstage.enums.JumpTypeEnum;
import com.pcloud.book.rightsSetting.biz.RightsSettingBiz;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.page.PageParam;
import com.pcloud.common.utils.BeanUtils;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.readercenter.common.enums.YesOrNoNumEnum;
import org.apache.commons.collections.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import sun.security.krb5.internal.PAData;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class AppletNewsPoolBizImpl implements AppletNewsPoolBiz {
@Autowired
private AppletNewsPoolDAO appletNewsPoolDAO;
@Autowired
private AppletNewsBiz appletNewsBiz;
@Autowired
private RightsSettingBiz rightsSettingBiz;
@Override
@ParamLog("根据id获取详情")
public AppletNewsPool getById(Long id) {
return appletNewsPoolDAO.getById(id);
}
@Override
@ParamLog("根据id更新资讯")
public void update(AppletNewsPool appletNewsPool) {
updateCheck(appletNewsPool);
appletNewsPoolDAO.updateSelective(appletNewsPool);
}
@Override
@ParamLog("资讯池批量删除")
public void batchDelete(List<Long> ids) {
if (ListUtils.isEmpty(ids)) {
return;
}
appletNewsPoolDAO.batchDelete(ids);
}
@Override
@ParamLog(value = "资讯池分页", isAfterReturn = false)
public PageBeanNew<AppletNewsPool> listNewsPage(Integer currentPage, Integer numPerPage, String newsName, String source) {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("newsName", newsName);
paramMap.put("source", source);
PageBeanNew<AppletNewsPool> poolPageBeanNew = appletNewsPoolDAO.listPageNew(new PageParam(currentPage, numPerPage), paramMap, "listNewsPage");
return poolPageBeanNew;
}
@Override
@ParamLog("资讯来源列表")
public List<String> listSource() {
return appletNewsPoolDAO.listSource();
}
@Override
@ParamLog("批量从资讯池中导入资讯")
public void batchImport(AppletNewsPoolDTO appletNewsPoolDTO) {
importCheck(appletNewsPoolDTO);
List<Long> appletNewsPoolIds = appletNewsPoolDTO.getAppletNewsPoolIds();
List<AppletNews> appletNewsList = new ArrayList<>();
Map<Long, AppletNewsPool> appletNewsPoolMap = appletNewsPoolDAO.getMapByIds(appletNewsPoolIds);
if (MapUtils.isEmpty(appletNewsPoolMap)) {
return;
}
appletNewsPoolIds.stream().forEach(id -> {
AppletNews appletNews = new AppletNews();
BeanUtils.copyProperties(appletNewsPoolDTO, appletNews);
rightsSettingBiz.setClassifyAndLabel(appletNews);
AppletNewsPool appletNewsPool = appletNewsPoolMap.get(id);
if (null == appletNewsPool) {
return;
}
appletNews.setNewsName(appletNewsPool.getNewsName());
appletNews.setSource(appletNewsPool.getSource());
appletNews.setContent(appletNewsPool.getContent());
appletNews.setType(null == appletNewsPoolDTO.getNewsType() ? NewsTypeEnum.ONLY_PIC.code : appletNewsPoolDTO.getNewsType());
appletNews.setPic1(null == appletNewsPoolDTO.getPic1() ? BookConstant.DEFAULT_NEWS_PIC : appletNewsPoolDTO.getPic1());
appletNews.setJumpType(NewsJumpTypeEnum.NEWS_EDIT.code);
appletNews.setShowSource(null == appletNewsPoolDTO.getShowSource() ? YesOrNoNumEnum.YES.getValue() : appletNewsPoolDTO.getShowSource());
appletNewsList.add(appletNews);
});
if (!ListUtils.isEmpty(appletNewsList)) {
appletNewsBiz.batchInsert(appletNewsList);
}
}
private void importCheck(AppletNewsPoolDTO appletNewsPoolDTO) {
if (null == appletNewsPoolDTO) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "导入资讯不能为空");
}
if (ListUtils.isEmpty(appletNewsPoolDTO.getAppletNewsPoolIds())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "素材池id不能为空");
}
}
private void updateCheck(AppletNewsPool appletNewsPool) {
if (null == appletNewsPool) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "更新资讯不能为空");
}
if (null == appletNewsPool.getId() || StringUtil.isEmpty(appletNewsPool.getNewsName()) ||
StringUtil.isEmpty(appletNewsPool.getSource()) || StringUtil.isEmpty(appletNewsPool.getContent())){
throw new BookBizException(BookBizException.PARAM_IS_NULL, "更新资讯内容不能为空");
}
}
}
......@@ -144,4 +144,11 @@ public interface AppletNewsDao extends BaseDao<AppletNews> {
* * @param null
*/
List<Long> getNewsIdListByCustomTagId(Long customTagId);
/**
* 获取资讯数量
* @param paramMap
* @return
*/
Integer listAppletNews4WechatCount(Map<String, Object> paramMap);
}
package com.pcloud.book.applet.dao;
import com.pcloud.book.applet.entity.AppletNewsPool;
import com.pcloud.common.core.dao.BaseDao;
import java.util.List;
import java.util.Map;
public interface AppletNewsPoolDAO extends BaseDao<AppletNewsPool> {
/**
* 有选择性的更新资讯
* @param appletNewsPool
*/
void updateSelective(AppletNewsPool appletNewsPool);
/**
* 资讯池批量删除
* @param ids
*/
void batchDelete(List<Long> ids);
/**
* 资讯来源列表
* @return
*/
List<String> listSource();
/**
* 根据id列表获取map
* @param appletNewsPoolIds
* @return
*/
Map<Long, AppletNewsPool> getMapByIds(List<Long> appletNewsPoolIds);
}
......@@ -174,4 +174,9 @@ public class AppletNewsDaoImpl extends BaseDaoImpl<AppletNews> implements Applet
return getSessionTemplate().selectList(getStatement("getNewsIdListByCustomTagId"), customTagId);
}
@Override
public Integer listAppletNews4WechatCount(Map<String, Object> paramMap) {
return getSessionTemplate().selectOne(getStatement("listAppletNews4WechatCount"), paramMap);
}
}
package com.pcloud.book.applet.dao.impl;
import com.pcloud.book.applet.dao.AppletNewsPoolDAO;
import com.pcloud.book.applet.entity.AppletNewsPool;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
@Repository
public class AppletNewsPoolDAOImpl extends BaseDaoImpl<AppletNewsPool> implements AppletNewsPoolDAO {
@Override
public void updateSelective(AppletNewsPool appletNewsPool) {
getSessionTemplate().update(getStatement("updateSelective"), appletNewsPool);
}
@Override
public void batchDelete(List<Long> ids) {
getSessionTemplate().delete(getStatement("batchDelete"), ids);
}
@Override
public List<String> listSource() {
return getSessionTemplate().selectList(getStatement("listSource"));
}
@Override
public Map<Long, AppletNewsPool> getMapByIds(List<Long> appletNewsPoolIds) {
return getSessionTemplate().selectMap(getStatement("getMapByIds"), appletNewsPoolIds, "id");
}
}
......@@ -120,4 +120,7 @@ public class AppletNewsDTO extends BaseDto {
private String businessCardWechatNum;
@ApiModelProperty("名片电话")
private String businessPhone;
@ApiModelProperty("点击量pv")
private Integer clickCount;
}
package com.pcloud.book.applet.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
public class AppletNewsPoolDTO extends BaseDto {
@ApiModelProperty("id")
private Long id;
@ApiModelProperty("资讯")
private String newsName;
@ApiModelProperty("来源")
private String source;
@ApiModelProperty("栏目id")
private Long newsClassifyId;
@ApiModelProperty("专业标签ID")
private Long proLabelId;
@ApiModelProperty("深度标签ID")
private Long depLabelId;
@ApiModelProperty("目的标签ID")
private Long purLabelId;
@ApiModelProperty("专业标签")
private String proLabelName;
@ApiModelProperty("深度标签")
private String depLabelName;
@ApiModelProperty("目的标签")
private String purLabelName;
@ApiModelProperty("文章版式(1多图文2单图文3纯图片4纯文本)")
private Integer type;
@ApiModelProperty("内容摘要")
private String digest;
@ApiModelProperty("预览图片1")
private String pic1;
@ApiModelProperty("预览图片2")
private String pic2;
@ApiModelProperty("预览图片3")
private String pic3;
@ApiModelProperty("文章内容")
private String content;
@ApiModelProperty("是否展示")
private Boolean showState;
@ApiModelProperty("分类名称")
private String newsClassify;
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
protected Date createTime;
@ApiModelProperty("第一级类型标识")
private Long firstClassify;
@ApiModelProperty("第二级类型标识")
private Long secondClassify;
@ApiModelProperty("年级标签id")
private Long gradeLabelId;
@ApiModelProperty("科目标签id")
private Long subjectLabelId;
@ApiModelProperty("权益分类id")
private Long rightsClassifyId;
private String firstClassifyContent;
private String secondClassifyContent;
private String gradeLabelIdContent;
private String subjectLabelIdContent;
@ApiModelProperty("权益分类")
private String rightsClassifyContent;
@ApiModelProperty("跳转类型(1原文编辑2直接跳转)")
private Integer jumpType;
@ApiModelProperty("跳转地址")
private String jumpUrl;
@ApiModelProperty("跳转外链编号")
private String urlNumber;
@ApiModelProperty("点击量pv/uv")
private String clickPVUV;
@ApiModelProperty("浏览量pv/uv")
private String browsePVUV;
@ApiModelProperty("自定义标识")
private String customTag;
@ApiModelProperty("自定义标识id")
private Long customTagId;
@ApiModelProperty("展示来源")
private Integer showSource;
@ApiModelProperty("展示第三方资源")
private Integer showLink;
@ApiModelProperty("浏览量pv")
private Integer browseCount;
@ApiModelProperty("选取的服务")
List<AppletNewsServeDTO> appletNewsServeList;
@ApiModelProperty("文章版式(1多图文2单图文3纯图片4纯文本)")
private Integer newsType;
@ApiModelProperty("素材池id)")
private List<Long> appletNewsPoolIds;
}
package com.pcloud.book.applet.entity;
import com.pcloud.common.entity.BaseEntity;
import lombok.Data;
@Data
public class AppletNewsPool extends BaseEntity {
//资讯名称
private String newsName;
//资讯来源
private String source;
//资讯内容
private String content;
//是否删除
private Integer isDelete;
}
package com.pcloud.book.applet.enums;
/**
* banner跳转类型
*/
public enum NewsJumpTypeEnum {
/**
* 原文编辑
*/
NEWS_EDIT(1),
/**
* 直接跳转
*/
LINK_JUMP(2);
public Integer code;
NewsJumpTypeEnum(Integer code) {
this.code = code;
}
}
package com.pcloud.book.applet.enums;
import io.swagger.annotations.ApiModelProperty;
/**
* banner跳转类型
*/
public enum NewsTypeEnum {
/**
* 1多图文
*/
MORE_PIC(1),
/**
* 2单图文
*/
SINGLE_PIC(2),
//3纯图片
ONLY_PIC(3),
//4纯文本
ONLY_TEXT(4);
public Integer code;
NewsTypeEnum(Integer code) {
this.code = code;
}
}
......@@ -338,10 +338,12 @@ public class AppletHomeFacade {
@ApiOperation("客户端根据id获取书单")
@GetMapping("getBooklistById4Wechat")
public ResponseDto<AppletBooklistDTO> getBooklistById4Wechat(
@CookieValue("userInfo") String userInfo,
@RequestParam("booklistId") @ApiParam("书单id")Long booklistId){
if (null==booklistId){
throw new BookBizException(BookBizException.PARAM_IS_NULL,"缺少参数");
}
Long wechatUserId = Cookie.getId(userInfo,Cookie._WECHAT_USER_ID);
return new ResponseDto<>(appletBooklistBiz.getBooklistById4Wechat(booklistId));
}
......@@ -698,10 +700,11 @@ public class AppletHomeFacade {
@ApiOperation("资讯和券的资源外链访问埋点")
@PostMapping("addClickRecord")
public ResponseDto<?> addClickRecord(@RequestBody @Validated AppletLinkClick appletLinkClick){
public ResponseDto<?> addClickRecord(@CookieValue("userInfo") String userInfo, @RequestBody @Validated AppletLinkClick appletLinkClick){
if (null==appletLinkClick){
throw new BookBizException(BookBizException.PARAM_IS_NULL,"缺少参数");
}
Long wechatUserId = Cookie.getId(userInfo, Cookie._WECHAT_USER_ID);
appletNewsBiz.addClickRecord(appletLinkClick);
return new ResponseDto<>();
}
......
package com.pcloud.book.applet.facade;
import com.pcloud.book.applet.biz.AppletNewsPoolBiz;
import com.pcloud.book.applet.dto.AppletNewsPoolDTO;
import com.pcloud.book.applet.entity.AppletNewsPool;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.SessionUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.xml.ws.soap.Addressing;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping("appletNewsPool")
public class AppletNewsPoolController {
@Autowired
private AppletNewsPoolBiz appletNewsPoolBiz;
@GetMapping("getById")
public ResponseDto<AppletNewsPool> getById(@RequestHeader("token") String token,
@RequestParam("id") Long id){
SessionUtil.getInfoToken4Redis(token);
AppletNewsPool appletNewsPool = appletNewsPoolBiz.getById(id);
return new ResponseDto<>(appletNewsPool);
}
@PostMapping("update")
public ResponseDto<AppletNewsPool> update(@RequestHeader("token") String token,
@RequestBody AppletNewsPool appletNewsPool){
SessionUtil.getInfoToken4Redis(token);
appletNewsPoolBiz.update(appletNewsPool);
return new ResponseDto<>();
}
@PostMapping("batchDelete")
public ResponseDto<AppletNewsPool> batchDelete(@RequestHeader("token") String token,
@RequestBody List<Long> ids){
SessionUtil.getInfoToken4Redis(token);
appletNewsPoolBiz.batchDelete(ids);
return new ResponseDto<>();
}
@GetMapping("listNewsPage")
public ResponseDto<PageBeanNew<AppletNewsPool>> listNewsPage(@RequestHeader("token") String token,
@RequestParam(value = "currentPage", defaultValue = "0") Integer currentPage,
@RequestParam(value = "numPerPage", defaultValue = "10") Integer numPerPage,
@RequestParam(value = "newsName", required = false) String newsName,
@RequestParam(value = "source", required = false) String source){
SessionUtil.getInfoToken4Redis(token);
PageBeanNew<AppletNewsPool> appletNewsPoolPageBeanNew = appletNewsPoolBiz.listNewsPage(currentPage, numPerPage, newsName, source);
return new ResponseDto<>(appletNewsPoolPageBeanNew);
}
@GetMapping("listSource")
public ResponseDto<List<String>> listSource(@RequestHeader("token") String token){
SessionUtil.getInfoToken4Redis(token);
List<String> sources = appletNewsPoolBiz.listSource();
return new ResponseDto<>(ListUtils.isEmpty(sources) ? new ArrayList<>() : sources);
}
@PostMapping("batchImport")
public ResponseDto<Void> batchImport(@RequestHeader("token") String token,
@RequestBody AppletNewsPoolDTO appletNewsPoolDTO) {
SessionUtil.getInfoToken4Redis(token);
appletNewsPoolBiz.batchImport(appletNewsPoolDTO);
return new ResponseDto<>();
}
}
......@@ -496,6 +496,12 @@
${item}
</foreach>
</if>
<if test="firstPageIds != null and firstPageIds.size() > 0">
and n.id not in
<foreach collection="firstPageIds" item="item" open="(" separator="," close=")">
${item}
</foreach>
</if>
<choose>
<when test="order>0 and order == 1">
ORDER BY RAND()
......@@ -672,4 +678,41 @@
ORDER BY n.create_time DESC
</select>
<insert id="batchInsert" parameterType="com.pcloud.book.applet.entity.AppletNews" useGeneratedKeys="true"
keyProperty="id">
insert into applet_news(
news_name, source, news_classify_id, pro_label_id, dep_label_id, pur_label_id, type, digest,
pic1, pic2, pic3, content, show_state, create_time, update_time , first_classify, second_classify, grade_label_id,
subject_label_id, rights_classify_id,
jump_type, jump_url,url_number, custom_tag_id, show_source, show_link
)
values
<foreach collection="list" item="item" index="index" separator=",">
(
#{item.newsName}, #{item.source}, #{item.newsClassifyId}, #{item.proLabelId}, #{item.depLabelId}, #{item.purLabelId}, #{item.type}, #{item.digest},
#{item.pic1}, #{item.pic2}, #{item.pic3}, #{item.content}, #{item.showState}, NOW(), NOW(), #{item.firstClassify,jdbcType=BIGINT},
#{item.secondClassify,jdbcType=BIGINT},
#{item.gradeLabelId,jdbcType=BIGINT}, #{item.subjectLabelId,jdbcType=BIGINT}, #{item.rightsClassifyId,jdbcType=BIGINT},
#{item.jumpType}, #{item.jumpUrl}, #{item.urlNumber}, #{item.customTagId}, #{item.showSource}, #{item.showLink}
)
</foreach>
</insert>
<select id="listAppletNews4WechatCount" parameterType="map" resultType="integer">
select
count(1)
FROM applet_news n
LEFT JOIN applet_news_classify c ON n.news_classify_id=c.id
WHERE n.show_state = 1
<if test="newsClassifyId >0">
AND n.news_classify_id = #{newsClassifyId}
</if>
<if test="newsClassifyIdList != null">
AND n.news_classify_id in
<foreach collection="newsClassifyIdList" item="item" open="(" separator="," close=")">
${item}
</foreach>
</if>
</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.applet.dao.impl.AppletNewsPoolDAOImpl" >
<resultMap id="BaseResultMap" type="com.pcloud.book.applet.entity.AppletNewsPool" >
<id column="id" property="id" jdbcType="BIGINT" />
<result column="news_name" property="newsName" jdbcType="VARCHAR" />
<result column="source" property="source" jdbcType="VARCHAR" />
<result column="content" property="content" jdbcType="VARCHAR" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP" />
<result column="is_delete" property="isDelete" jdbcType="TINYINT" />
</resultMap>
<sql id="Base_Column_List" >
id, news_name, source, content, create_time, update_time, is_delete
</sql>
<select id="getById" parameterType="long" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from
applet_news_pool
where
id = #{id}
</select>
<update id="updateSelective" parameterType="com.pcloud.book.applet.entity.AppletNewsPool">
update
applet_news_pool
<set>
<if test="newsName != null">
news_name = #{newsName},
</if>
<if test="source != null">
source = #{source},
</if>
<if test="content != null">
content = #{content},
</if>
update_time = now()
</set>
where
id = #{id}
</update>
<delete id="batchDelete" parameterType="list">
update
applet_news_pool
set
is_delete = 1,
update_time = now()
where
id in
<foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
#{item}
</foreach>
</delete>
<select id="listNewsPage" parameterType="map" resultMap="BaseResultMap">
select
id,
news_name,
source,
ifnull(update_time, create_time) update_time
from
applet_news_pool
where
is_delete = 0
<if test="newsName != null">
and news_name like concat("%", #{newsName}, "%")
</if>
<if test="source != null">
and source = #{source}
</if>
</select>
<select id="listSource" resultType="string">
select
source
from
applet_news_pool
where
is_delete = 0
group by source
</select>
<select id="getMapByIds" parameterType="list" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from
applet_news_pool
where
id in
<foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
#{item}
</foreach>
and
is_delete = 0
</select>
</mapper>
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