From 9ae8ba7175321f6f8fb2c0c11a71377030577cb0 Mon Sep 17 00:00:00 2001 From: LiuFei Date: Tue, 10 May 2022 15:38:13 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=96=87=E7=AB=A0?= =?UTF-8?q?=E5=AE=9E=E4=BD=93=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../1068-yexiu-read-model-mybatis.iml | 1 + .../secp/read/infra/util/RedisUtils.java | 39 ++ .../read/model/dao/ArticlePreviewDao.java | 6 +- .../read/model/entities/ArticleEntity.java | 392 ++++++++++++++++++ .../yuexiu/secp/read/dto/ArticleQueryDto.java | 32 ++ .../read/controller/ArticleController.java | 54 +++ .../controller/ArticlePreviewController.java | 11 +- .../ArticleStatisticsController.java | 33 ++ .../read/model/service/IArticlePreview.java | 1 - .../read/model/service/IArticleServer.java | 21 + .../service/impl/ArticlePreviewServer.java | 64 --- .../model/service/impl/ArticleServer.java | 127 ++++++ 12 files changed, 703 insertions(+), 78 deletions(-) create mode 100644 1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/infra/util/RedisUtils.java create mode 100644 1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/ArticleEntity.java create mode 100644 2068-yexiu-read-api/src/main/java/com/yuexiu/secp/read/dto/ArticleQueryDto.java create mode 100644 2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/ArticleController.java create mode 100644 2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/ArticleStatisticsController.java create mode 100644 2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/IArticleServer.java create mode 100644 2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/impl/ArticleServer.java diff --git a/1068-yexiu-read-model-mybatis/1068-yexiu-read-model-mybatis.iml b/1068-yexiu-read-model-mybatis/1068-yexiu-read-model-mybatis.iml index 84be0df..30b0184 100644 --- a/1068-yexiu-read-model-mybatis/1068-yexiu-read-model-mybatis.iml +++ b/1068-yexiu-read-model-mybatis/1068-yexiu-read-model-mybatis.iml @@ -9,6 +9,7 @@ + diff --git a/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/infra/util/RedisUtils.java b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/infra/util/RedisUtils.java new file mode 100644 index 0000000..48d36e0 --- /dev/null +++ b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/infra/util/RedisUtils.java @@ -0,0 +1,39 @@ +package com.yuexiu.secp.read.infra.util; + +import com.google.common.base.Joiner; +import com.google.common.collect.Lists; +import org.apache.commons.lang.StringUtils; + +import java.util.ArrayList; + +/** + * 生成key的工具类 + */ +public class RedisUtils { + //分隔符 + public final static String split = ":"; + public static String getRedisKey(String... name) { + StringBuffer sb = new StringBuffer(); + for (String str : name) { + if (StringUtils.isNotBlank(str)) { + sb.append(str); + sb.append(split); + } + } + sb = sb.deleteCharAt(sb.lastIndexOf(split)); + + return sb.toString(); + } + + public static String getRedisKeyJoin(String... name){ + ArrayList strlist = Lists.newArrayList(); + for (String str : name) { + if (StringUtils.isNotBlank(str)) { + strlist.add(str); + } + } + return Joiner.on("_").join(strlist); + } + + +} diff --git a/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/dao/ArticlePreviewDao.java b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/dao/ArticlePreviewDao.java index 3277bfb..e310320 100644 --- a/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/dao/ArticlePreviewDao.java +++ b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/dao/ArticlePreviewDao.java @@ -1,13 +1,13 @@ package com.yuexiu.secp.read.model.dao; +import com.yuexiu.secp.read.model.entities.readonly.ArticlePreview; import com.sie.iot.common.model.dao.BaseCommonDAO_HI; -import com.yuexiu.secp.read.model.entities.ArticlePreviewEntity; import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Component; @Component("ArticlePreviewDao") -public interface ArticlePreviewDao extends BaseCommonDAO_HI { +public interface ArticlePreviewDao extends BaseCommonDAO_HI { - @Select("select * from sie_article_preview where promotion_status = 1 and task_status = 1") + @Select("select count(1) from yxh_article where promotion_status = 1 and task_status = 1") int findRecommend(); } diff --git a/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/ArticleEntity.java b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/ArticleEntity.java new file mode 100644 index 0000000..c9c146d --- /dev/null +++ b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/ArticleEntity.java @@ -0,0 +1,392 @@ +package com.yuexiu.secp.read.model.entities; + +import java.util.Date; +import com.alibaba.fastjson.annotation.JSONField; + +/** + * YxhArticleEntity_MY Entity Object + * Tue May 10 15:09:48 CST 2022 Auto Generate + */ + +public class ArticleEntity { + private Long articleId; + private String publishUnit; + private String articleTitle; + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date spreadBeginTime; + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date spreadEndTime; + private Integer shareType; + private String copywrite1; + private String copywrite2; + private String copywrite3; + private String copywrite4; + private String copywrite5; + private String shareTitle; + private String shareImg; + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date releaseTime; + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date releaseTaskTime; + private Integer releaseTaskUser; + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date endTaskTime; + private Integer endTaskUser; + private Integer taskStatus; + private Integer promotionStatus; + private Integer approvalStatus; + private Integer approvalUser; + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date approvalTime; + private Integer articleType; + private String articleTypeAlias; + private String authorName; + private String authorLogo; + private String articleUrl; + private String codeImg; + private Long tenantId; + private Long createdBy; + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date creationDate; + private Long lastUpdatedBy; + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date lastUpdateDate; + private Long lastUpdateLogin; + private Integer deleteFlag; + private Integer versionNum; + + public void setArticleId(Long articleId) { + this.articleId = articleId; + } + + + + public Long getArticleId() { + return articleId; + } + + public void setPublishUnit(String publishUnit) { + this.publishUnit = publishUnit; + } + + + public String getPublishUnit() { + return publishUnit; + } + + public void setArticleTitle(String articleTitle) { + this.articleTitle = articleTitle; + } + + + public String getArticleTitle() { + return articleTitle; + } + + public void setSpreadBeginTime(Date spreadBeginTime) { + this.spreadBeginTime = spreadBeginTime; + } + + + public Date getSpreadBeginTime() { + return spreadBeginTime; + } + + public void setSpreadEndTime(Date spreadEndTime) { + this.spreadEndTime = spreadEndTime; + } + + + public Date getSpreadEndTime() { + return spreadEndTime; + } + + public void setShareType(Integer shareType) { + this.shareType = shareType; + } + + + public Integer getShareType() { + return shareType; + } + + public void setCopywrite1(String copywrite1) { + this.copywrite1 = copywrite1; + } + + + public String getCopywrite1() { + return copywrite1; + } + + public void setCopywrite2(String copywrite2) { + this.copywrite2 = copywrite2; + } + + + public String getCopywrite2() { + return copywrite2; + } + + public void setCopywrite3(String copywrite3) { + this.copywrite3 = copywrite3; + } + + + public String getCopywrite3() { + return copywrite3; + } + + public void setCopywrite4(String copywrite4) { + this.copywrite4 = copywrite4; + } + + + public String getCopywrite4() { + return copywrite4; + } + + public void setCopywrite5(String copywrite5) { + this.copywrite5 = copywrite5; + } + + + public String getCopywrite5() { + return copywrite5; + } + + public void setShareTitle(String shareTitle) { + this.shareTitle = shareTitle; + } + + + public String getShareTitle() { + return shareTitle; + } + + public void setShareImg(String shareImg) { + this.shareImg = shareImg; + } + + + public String getShareImg() { + return shareImg; + } + + public void setReleaseTime(Date releaseTime) { + this.releaseTime = releaseTime; + } + + + public Date getReleaseTime() { + return releaseTime; + } + + public void setReleaseTaskTime(Date releaseTaskTime) { + this.releaseTaskTime = releaseTaskTime; + } + + + public Date getReleaseTaskTime() { + return releaseTaskTime; + } + + public void setReleaseTaskUser(Integer releaseTaskUser) { + this.releaseTaskUser = releaseTaskUser; + } + + + public Integer getReleaseTaskUser() { + return releaseTaskUser; + } + + public void setEndTaskTime(Date endTaskTime) { + this.endTaskTime = endTaskTime; + } + + + public Date getEndTaskTime() { + return endTaskTime; + } + + public void setEndTaskUser(Integer endTaskUser) { + this.endTaskUser = endTaskUser; + } + + + public Integer getEndTaskUser() { + return endTaskUser; + } + + public void setTaskStatus(Integer taskStatus) { + this.taskStatus = taskStatus; + } + + + public Integer getTaskStatus() { + return taskStatus; + } + + public void setPromotionStatus(Integer promotionStatus) { + this.promotionStatus = promotionStatus; + } + + + public Integer getPromotionStatus() { + return promotionStatus; + } + + public void setApprovalStatus(Integer approvalStatus) { + this.approvalStatus = approvalStatus; + } + + + public Integer getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalUser(Integer approvalUser) { + this.approvalUser = approvalUser; + } + + + public Integer getApprovalUser() { + return approvalUser; + } + + public void setApprovalTime(Date approvalTime) { + this.approvalTime = approvalTime; + } + + + public Date getApprovalTime() { + return approvalTime; + } + + public void setArticleType(Integer articleType) { + this.articleType = articleType; + } + + + public Integer getArticleType() { + return articleType; + } + + public void setArticleTypeAlias(String articleTypeAlias) { + this.articleTypeAlias = articleTypeAlias; + } + + + public String getArticleTypeAlias() { + return articleTypeAlias; + } + + public void setAuthorName(String authorName) { + this.authorName = authorName; + } + + + public String getAuthorName() { + return authorName; + } + + public void setAuthorLogo(String authorLogo) { + this.authorLogo = authorLogo; + } + + + public String getAuthorLogo() { + return authorLogo; + } + + public void setArticleUrl(String articleUrl) { + this.articleUrl = articleUrl; + } + + + public String getArticleUrl() { + return articleUrl; + } + + public void setCodeImg(String codeImg) { + this.codeImg = codeImg; + } + + + public String getCodeImg() { + return codeImg; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + + + public Long getTenantId() { + return tenantId; + } + + public void setCreatedBy(Long createdBy) { + this.createdBy = createdBy; + } + + + public Long getCreatedBy() { + return createdBy; + } + + public void setCreationDate(Date creationDate) { + this.creationDate = creationDate; + } + + + public Date getCreationDate() { + return creationDate; + } + + public void setLastUpdatedBy(Long lastUpdatedBy) { + this.lastUpdatedBy = lastUpdatedBy; + } + + + public Long getLastUpdatedBy() { + return lastUpdatedBy; + } + + public void setLastUpdateDate(Date lastUpdateDate) { + this.lastUpdateDate = lastUpdateDate; + } + + + public Date getLastUpdateDate() { + return lastUpdateDate; + } + + public void setLastUpdateLogin(Long lastUpdateLogin) { + this.lastUpdateLogin = lastUpdateLogin; + } + + + public Long getLastUpdateLogin() { + return lastUpdateLogin; + } + + public void setDeleteFlag(Integer deleteFlag) { + this.deleteFlag = deleteFlag; + } + + + public Integer getDeleteFlag() { + return deleteFlag; + } + + public void setVersionNum(Integer versionNum) { + this.versionNum = versionNum; + } + + + public Integer getVersionNum() { + return versionNum; + } +} + diff --git a/2068-yexiu-read-api/src/main/java/com/yuexiu/secp/read/dto/ArticleQueryDto.java b/2068-yexiu-read-api/src/main/java/com/yuexiu/secp/read/dto/ArticleQueryDto.java new file mode 100644 index 0000000..a9ef622 --- /dev/null +++ b/2068-yexiu-read-api/src/main/java/com/yuexiu/secp/read/dto/ArticleQueryDto.java @@ -0,0 +1,32 @@ +package com.yuexiu.secp.read.dto; +/** + * 查询最新推荐和我已推荐的Dto + */ + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.NoArgsConstructor; + + +@Data +@NoArgsConstructor +@ApiModel(value = "查询最新推荐和我已推荐的Dto") +public class ArticleQueryDto { + + @ApiModelProperty(value = "推广状态") + private int promotionStatus; + + @ApiModelProperty(value = "任务状态") + private int taskStatus; + + @ApiModelProperty(value = "项目id") + private int projectId; + + @ApiModelProperty(value = "城市id") + private int cityId; + + @ApiModelProperty(value = "用户id") + private int userId; + +} diff --git a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/ArticleController.java b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/ArticleController.java new file mode 100644 index 0000000..3d77c73 --- /dev/null +++ b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/ArticleController.java @@ -0,0 +1,54 @@ +package com.yuexiu.secp.read.controller; + +import com.sie.iot.common.bean.ResponseData; +import com.sie.iot.common.secure.annotation.CheckToken; +import com.yuexiu.secp.read.dto.ArticleQueryDto; +import com.yuexiu.secp.read.model.entities.ArticleEntity; +import com.yuexiu.secp.read.model.service.IArticleServer; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + + +@Validated +@Api(value = "阅读有礼-文章", tags = "阅读有礼-文章") +@RestController +@RequestMapping("/read/article") +public class ArticleController { + + + @Autowired + private IArticleServer iArticleServer; + + /** + * 最新推查询 + * @param articleQueryDto + * @return + */ + @ApiOperation(value = "查询最新推荐", notes = "根据城市与项目查询最新推荐数据") + @PostMapping(value = "/findNewest") + @CheckToken + public ResponseData> findNewest(@RequestBody ArticleQueryDto articleQueryDto) { + List recommendedAndPast = iArticleServer.findNewest(articleQueryDto); + return ResponseData.data(recommendedAndPast); + } + + /** + * 查询往期推荐 + */ + @ApiOperation(value = "查询往期推荐", notes = "根据城市与项目查询往期推荐数据") + @PostMapping(value = "/findPrevious") + @CheckToken + public ResponseData> findPrevious(@RequestBody ArticleQueryDto articleQueryDto) { + List recommendedAndPast = iArticleServer.findPrevious(articleQueryDto); + return ResponseData.data(recommendedAndPast); + } + + + + +} diff --git a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/ArticlePreviewController.java b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/ArticlePreviewController.java index 8665ebb..d655564 100644 --- a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/ArticlePreviewController.java +++ b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/ArticlePreviewController.java @@ -1,16 +1,12 @@ package com.yuexiu.secp.read.controller; -import com.alibaba.fastjson.JSONObject; import com.sie.iot.common.bean.RequestData; import com.sie.iot.common.bean.ResponseData; import com.sie.iot.common.model.inter.IBaseCommon; import com.sie.iot.common.secure.annotation.CheckToken; import com.sie.iot.common.services.CommonAbstractService; import com.yuexiu.secp.read.dto.ArticlePreviewDto; -import com.yuexiu.secp.read.dto.CostUnitDto; -import com.yuexiu.secp.read.dto.RecommendDto; import com.yuexiu.secp.read.model.entities.ArticlePreviewEntity; -import com.yuexiu.secp.read.model.entities.CostUnitEntity; import com.yuexiu.secp.read.model.service.IArticlePreview; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -26,14 +22,9 @@ public class ArticlePreviewController extends CommonAbstractService { @Override public IBaseCommon getBaseCommonServer() { - return this.iReadService;; + return this.iReadService; } - @GetMapping(value = "/findRecommendedAndPast") - public String findRecommendedAndPast(RecommendDto articlePreviewDto) { - - return iReadService.findRecommendedAndPast(articlePreviewDto); - } @ApiOperation(value = "保存成本单位", notes = "保存成本单位") @PostMapping(value = "/save") diff --git a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/ArticleStatisticsController.java b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/ArticleStatisticsController.java new file mode 100644 index 0000000..0738a68 --- /dev/null +++ b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/ArticleStatisticsController.java @@ -0,0 +1,33 @@ +package com.yuexiu.secp.read.controller; + +import com.sie.iot.common.bean.ResponseData; +import com.sie.iot.common.secure.annotation.CheckToken; +import com.yuexiu.secp.read.model.service.IArticleServer; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Validated +@Api(value = "阅读有礼文章统计数", tags = "阅读有礼文章统计数") +@RestController +@RequestMapping("/read/") +public class ArticleStatisticsController { + + + @Autowired + private IArticleServer iArticleServer; + + @ApiOperation(value = "根据文章id获取统计数", notes = "根据文章id获取统计数") + @GetMapping(value = "/find/{articleId}/count") + @CheckToken + public ResponseData findByArticleIdCount(@PathVariable Long articleId) { + iArticleServer.findByArticleIdCount(articleId); + return null; + } + +} diff --git a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/IArticlePreview.java b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/IArticlePreview.java index 59f8a3d..38d75f0 100644 --- a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/IArticlePreview.java +++ b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/IArticlePreview.java @@ -10,7 +10,6 @@ import com.yuexiu.secp.read.model.entities.CostUnitEntity; public interface IArticlePreview extends IBaseCommon { - String findRecommendedAndPast(RecommendDto articlePreviewDto); ArticlePreviewEntity saveArticlePreview(ArticlePreviewDto dto); diff --git a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/IArticleServer.java b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/IArticleServer.java new file mode 100644 index 0000000..0bdc80e --- /dev/null +++ b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/IArticleServer.java @@ -0,0 +1,21 @@ +package com.yuexiu.secp.read.model.service; + + + +import com.yuexiu.secp.read.dto.ArticleQueryDto; +import com.yuexiu.secp.read.dto.RecommendDto; +import com.yuexiu.secp.read.model.entities.ArticleEntity; + + +import java.util.List; + +public interface IArticleServer { + + List findNewest(ArticleQueryDto articleQueryDto); + + + List findPrevious(ArticleQueryDto articleQueryDto); + + + void findByArticleIdCount(Long articleId); +} diff --git a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/impl/ArticlePreviewServer.java b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/impl/ArticlePreviewServer.java index 800fa05..ab4ad68 100644 --- a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/impl/ArticlePreviewServer.java +++ b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/impl/ArticlePreviewServer.java @@ -36,70 +36,6 @@ public class ArticlePreviewServer extends BaseCommonServer imple private ArticlePreviewDao articlePreviewDao; - @Override - public String findRecommendedAndPast(RecommendDto articlePreviewDto) { - //项目的集合信息 - List projectList = new ArrayList<>(); - - //城市的集合信息 - List articlePreviewList = new ArrayList<>(); - - List dataList = new ArrayList<>(); - - //查询是否有最新推荐 - int count = articlePreviewDao.findRecommend(); - if (count < 1) { - return "为空"; - } - //获取当前登录用户 - - //获取我已推荐的文章 - Set recommendIdList = redisTemplate.opsForSet().members("sie:recommend:1"); - //获取所有文章的信息 - Map entries = redisTemplate.opsForHash().entries("sie:read:article"); - - ObjectMapper objectMapper = new ObjectMapper(); - //剔除我已推荐文章 - for (String recommendId : recommendIdList) { - entries.remove(recommendId); - } - Collection values = entries.values(); - - //判断是否有房产 - if (true) { - for (Object value : values) { - //匹配项目,任务状态为已发布 , 推广状态为有效 - ArticlePreviewEntity articlePreview = objectMapper.convertValue(value,ArticlePreviewEntity.class); - if(articlePreview.getPromotionStatus() == articlePreviewDto.getPromotionStatus() && - articlePreview.getTaskStatus() == articlePreviewDto.getTaskStatus()){ - //往城市里的集合塞数据 - projectList.add(articlePreview); - } - System.out.println(value); - } - } - - - for (Object value : values) { - //匹配城市,任务状态为已发布 , 推广状态为有效 - ArticlePreviewEntity articlePreview = objectMapper.convertValue(value,ArticlePreviewEntity.class); - if(articlePreview.getPromotionStatus() == articlePreviewDto.getPromotionStatus() && - articlePreview.getTaskStatus() == articlePreviewDto.getTaskStatus()){ - //往城市里的集合塞数据 - articlePreviewList.add(articlePreview); - } - System.out.println(value); - } - - //如果项目类型不为空,合并项目和城市 - if(!CollectionUtils.isEmpty(projectList)){ - Iterables.addAll(dataList, projectList); - Iterables.addAll(dataList, articlePreviewList); - } - - - return "不为空"; - } @Override public ArticlePreviewEntity saveArticlePreview(ArticlePreviewDto dto) { diff --git a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/impl/ArticleServer.java b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/impl/ArticleServer.java new file mode 100644 index 0000000..a56db33 --- /dev/null +++ b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/impl/ArticleServer.java @@ -0,0 +1,127 @@ +package com.yuexiu.secp.read.model.service.impl; + + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Iterables; +import com.yuexiu.secp.read.dto.ArticleQueryDto; +import com.yuexiu.secp.read.infra.util.RedisUtils; +import com.yuexiu.secp.read.model.dao.ArticlePreviewDao; +import com.yuexiu.secp.read.model.entities.ArticleEntity; + +import com.yuexiu.secp.read.model.service.IArticleServer; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.*; + +/** + * @author YuChengLong + * @date 2022/5/10 + */ + +@Service +public class ArticleServer implements IArticleServer{ + + + /** + * redis + */ + @Autowired + private StringRedisTemplate redisTemplate; + + /** + * 文章DAO + */ + @Autowired + private ArticlePreviewDao articlePreviewDao; + + + /** + * 最新推荐 + * @param articleQueryDto + * @return + */ + @Override + public List findNewest(ArticleQueryDto articleQueryDto) { + //项目的集合信息 + List projectList = new ArrayList<>(); + + //城市的集合信息 + List articlePreviewList = new ArrayList<>(); + + List dataList = new ArrayList<>(); + + //查询是否有最新推荐 + int count = articlePreviewDao.findRecommend(); + if (count < 1) { + return null; + } + //获取当前登录用户 + + //获取我已推荐的文章 + Set recommendIdList = redisTemplate.opsForSet().members(RedisUtils.getRedisKey("SIE" , "RECOMMEND" ,String.valueOf(articleQueryDto.getUserId()))); + //获取所有文章的信息 + Map entries = redisTemplate.opsForHash().entries(RedisUtils.getRedisKey("SIE" , "READ" ,"ARTICLE")); + ObjectMapper objectMapper = new ObjectMapper(); + //剔除我已推荐文章 + for (String recommendId : recommendIdList) { + entries.remove(recommendId); + } + Collection values = entries.values(); + + //判断是否有房产 + //todo 调用第三方接口cdp,查询是否有房产 + if (true) { + for (Object value : values) { + //匹配项目,任务状态为已发布 , 推广状态为有效 + ArticleEntity articlePreview = objectMapper.convertValue(value,ArticleEntity.class); + if(articlePreview.getPromotionStatus() == articleQueryDto.getPromotionStatus() && + articlePreview.getTaskStatus() == articleQueryDto.getTaskStatus()){ + //往城市里的集合塞数据 + projectList.add(articlePreview); + } + System.out.println(value); + } + } + + + for (Object value : values) { + //匹配城市,任务状态为已发布 , 推广状态为有效 + ArticleEntity articlePreview = objectMapper.convertValue(value,ArticleEntity.class); + if(articlePreview.getPromotionStatus() == articleQueryDto.getPromotionStatus() && + articlePreview.getTaskStatus() == articleQueryDto.getTaskStatus()){ + //往城市里的集合塞数据 + articlePreviewList.add(articlePreview); + } + System.out.println(value); + } + + //如果项目类型不为空,合并项目和城市 + if(!CollectionUtils.isEmpty(projectList)){ + Iterables.addAll(dataList, projectList); + Iterables.addAll(dataList, articlePreviewList); + } + + return dataList; + } + + /** + * 往期推荐 + * @param articleQueryDto + * @return + */ + @Override + public List findPrevious(ArticleQueryDto articleQueryDto) { + return null; + } + + @Override + public void findByArticleIdCount(Long articleId) { + + } + + +} From 1df75072521e7f5e5ee93e7ab5127c66d4371c43 Mon Sep 17 00:00:00 2001 From: LiuFei Date: Wed, 11 May 2022 10:25:00 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=E6=95=B0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/encodings.xml | 7 +- .../read/infra/constant/ArticleConstant.java | 21 +++ .../secp/read/model/dao/ArticleDao.java | 17 ++ .../secp/read/model/dao/ArticleGatherDao.java | 11 ++ .../read/model/dao/ArticlePreviewDao.java | 11 +- .../read/model/entities/ArticleEntity.java | 12 +- .../model/entities/ArticleGatherEntity.java | 158 ++++++++++++++++++ .../entities/ArticlePreviewContentEntity.java | 2 - .../secp/read/dto/ArticleAddCountDto.java | 23 +++ .../yuexiu/secp/read/vo/StatisticsRespVo.java | 23 +++ .../read/controller/ArticleController.java | 4 +- .../controller/ArticleGatherController.java | 45 +++++ .../ArticleStatisticsController.java | 33 ---- .../model/service/IArticleGatherServer.java | 29 ++++ .../read/model/service/IArticlePreview.java | 1 - .../read/model/service/IArticleServer.java | 3 - .../service/impl/ArticleGatherServer.java | 96 +++++++++++ .../model/service/impl/ArticleServer.java | 15 +- 18 files changed, 452 insertions(+), 59 deletions(-) create mode 100644 1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/infra/constant/ArticleConstant.java create mode 100644 1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/dao/ArticleDao.java create mode 100644 1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/dao/ArticleGatherDao.java create mode 100644 1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/ArticleGatherEntity.java create mode 100644 2068-yexiu-read-api/src/main/java/com/yuexiu/secp/read/dto/ArticleAddCountDto.java create mode 100644 2068-yexiu-read-api/src/main/java/com/yuexiu/secp/read/vo/StatisticsRespVo.java create mode 100644 2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/ArticleGatherController.java delete mode 100644 2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/ArticleStatisticsController.java create mode 100644 2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/IArticleGatherServer.java create mode 100644 2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/impl/ArticleGatherServer.java diff --git a/.idea/encodings.xml b/.idea/encodings.xml index f6720fb..326bdc2 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -3,18 +3,23 @@ + + + + + - \ No newline at end of file + diff --git a/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/infra/constant/ArticleConstant.java b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/infra/constant/ArticleConstant.java new file mode 100644 index 0000000..5325a01 --- /dev/null +++ b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/infra/constant/ArticleConstant.java @@ -0,0 +1,21 @@ +package com.yuexiu.secp.read.infra.constant; + +public class ArticleConstant { + + //前缀 + public final static String SIE = "SIE"; + + //阅读标记 + public final static String READ = "READ"; + + //分享标记 + public final static String SHARE = "SHARE"; + + //所有的文章信息标记 + public final static String ARTICLE = "ARTICLE"; + + //我已推荐的文章标记 + public final static String RECOMMEND = "RECOMMEND"; + + +} diff --git a/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/dao/ArticleDao.java b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/dao/ArticleDao.java new file mode 100644 index 0000000..c200ac8 --- /dev/null +++ b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/dao/ArticleDao.java @@ -0,0 +1,17 @@ +package com.yuexiu.secp.read.model.dao; + +import com.sie.iot.common.model.dao.BaseCommonDAO_HI; +import com.yuexiu.secp.read.model.entities.ArticleEntity; +import com.yuexiu.secp.read.model.entities.ArticlePreviewEntity; +import org.apache.ibatis.annotations.Select; +import org.springframework.stereotype.Component; + +/** + * 文章信息Dao + */ +@Component("ArticleDao") +public interface ArticleDao extends BaseCommonDAO_HI { + + @Select("select count(1) from yxh_article where promotion_status = 1 and task_status = 1") + int findRecommend(); +} diff --git a/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/dao/ArticleGatherDao.java b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/dao/ArticleGatherDao.java new file mode 100644 index 0000000..7d157c6 --- /dev/null +++ b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/dao/ArticleGatherDao.java @@ -0,0 +1,11 @@ +package com.yuexiu.secp.read.model.dao; + +import com.sie.iot.common.model.dao.BaseCommonDAO_HI; +import com.yuexiu.secp.read.model.entities.ArticleGatherEntity; +import org.springframework.stereotype.Component; + +@Component("ArticleGatherDao") +public interface ArticleGatherDao extends BaseCommonDAO_HI { + + +} diff --git a/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/dao/ArticlePreviewDao.java b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/dao/ArticlePreviewDao.java index e310320..324feed 100644 --- a/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/dao/ArticlePreviewDao.java +++ b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/dao/ArticlePreviewDao.java @@ -1,13 +1,14 @@ package com.yuexiu.secp.read.model.dao; -import com.yuexiu.secp.read.model.entities.readonly.ArticlePreview; +import com.yuexiu.secp.read.model.entities.ArticlePreviewEntity; import com.sie.iot.common.model.dao.BaseCommonDAO_HI; -import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Component; +/** + * 文章信息预览Dao + */ @Component("ArticlePreviewDao") -public interface ArticlePreviewDao extends BaseCommonDAO_HI { +public interface ArticlePreviewDao extends BaseCommonDAO_HI { + - @Select("select count(1) from yxh_article where promotion_status = 1 and task_status = 1") - int findRecommend(); } diff --git a/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/ArticleEntity.java b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/ArticleEntity.java index c9c146d..b6be44d 100644 --- a/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/ArticleEntity.java +++ b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/ArticleEntity.java @@ -2,12 +2,16 @@ package com.yuexiu.secp.read.model.entities; import java.util.Date; import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.sie.iot.common.idgenerate.GeneratedKeyValue; +import io.swagger.annotations.ApiModel; +import lombok.Data; -/** - * YxhArticleEntity_MY Entity Object - * Tue May 10 15:09:48 CST 2022 Auto Generate - */ +@Data +@TableName("yxh_article") +@GeneratedKeyValue +@ApiModel(value = "文章信息表") public class ArticleEntity { private Long articleId; private String publishUnit; diff --git a/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/ArticleGatherEntity.java b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/ArticleGatherEntity.java new file mode 100644 index 0000000..e145a38 --- /dev/null +++ b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/ArticleGatherEntity.java @@ -0,0 +1,158 @@ +package com.yuexiu.secp.read.model.entities; + +import java.util.Date; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.sie.iot.common.idgenerate.GeneratedKeyValue; +import com.sie.iot.common.model.entity.BaseEntity; +import io.swagger.annotations.ApiModel; +import lombok.Data; + +/** + * 文章推广汇总表 + */ +@Data +@TableName("yxh_article_gather") +@GeneratedKeyValue +@ApiModel(value = "文章推广汇总表") +public class ArticleGatherEntity extends BaseEntity { + @TableId(value = "article_gather_id", type = IdType.ASSIGN_ID) + private Long articleGatherId; + private Long articleId; + private Integer readCount; + private Integer totalPoint; + private Integer shareCount; + private Integer thumbsCount; + private Long tenantId; + private Long createdBy; + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date creationDate; + private Long lastUpdatedBy; + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date lastUpdateDate; + private Long lastUpdateLogin; + private Integer deleteFlag; + + public void setArticleGatherId(Long articleGatherId) { + this.articleGatherId = articleGatherId; + } + + + + public Long getArticleGatherId() { + return articleGatherId; + } + + public void setArticleId(Long articleId) { + this.articleId = articleId; + } + + + public Long getArticleId() { + return articleId; + } + + public void setReadCount(Integer readCount) { + this.readCount = readCount; + } + + + public Integer getReadCount() { + return readCount; + } + + public void setTotalPoint(Integer totalPoint) { + this.totalPoint = totalPoint; + } + + + public Integer getTotalPoint() { + return totalPoint; + } + + public void setShareCount(Integer shareCount) { + this.shareCount = shareCount; + } + + + public Integer getShareCount() { + return shareCount; + } + + public void setThumbsCount(Integer thumbsCount) { + this.thumbsCount = thumbsCount; + } + + + public Integer getThumbsCount() { + return thumbsCount; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + + + public Long getTenantId() { + return tenantId; + } + + public void setCreatedBy(Long createdBy) { + this.createdBy = createdBy; + } + + + public Long getCreatedBy() { + return createdBy; + } + + public void setCreationDate(Date creationDate) { + this.creationDate = creationDate; + } + + + public Date getCreationDate() { + return creationDate; + } + + public void setLastUpdatedBy(Long lastUpdatedBy) { + this.lastUpdatedBy = lastUpdatedBy; + } + + + public Long getLastUpdatedBy() { + return lastUpdatedBy; + } + + public void setLastUpdateDate(Date lastUpdateDate) { + this.lastUpdateDate = lastUpdateDate; + } + + + public Date getLastUpdateDate() { + return lastUpdateDate; + } + + public void setLastUpdateLogin(Long lastUpdateLogin) { + this.lastUpdateLogin = lastUpdateLogin; + } + + + public Long getLastUpdateLogin() { + return lastUpdateLogin; + } + + public void setDeleteFlag(Integer deleteFlag) { + this.deleteFlag = deleteFlag; + } + + + public Integer getDeleteFlag() { + return deleteFlag; + } + + +} + diff --git a/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/ArticlePreviewContentEntity.java b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/ArticlePreviewContentEntity.java index 4353df5..64e680a 100644 --- a/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/ArticlePreviewContentEntity.java +++ b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/ArticlePreviewContentEntity.java @@ -1,6 +1,5 @@ package com.yuexiu.secp.read.model.entities; -import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -11,7 +10,6 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; -import java.util.Date; @Data @TableName("yx_article_preview_content") diff --git a/2068-yexiu-read-api/src/main/java/com/yuexiu/secp/read/dto/ArticleAddCountDto.java b/2068-yexiu-read-api/src/main/java/com/yuexiu/secp/read/dto/ArticleAddCountDto.java new file mode 100644 index 0000000..9afb772 --- /dev/null +++ b/2068-yexiu-read-api/src/main/java/com/yuexiu/secp/read/dto/ArticleAddCountDto.java @@ -0,0 +1,23 @@ +package com.yuexiu.secp.read.dto; +/** + * 用于增加文章统计数 + 1 + */ + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.NoArgsConstructor; + + +@Data +@NoArgsConstructor +@ApiModel(value = "增加文章统计数Dto") +public class ArticleAddCountDto { + + @ApiModelProperty(value = "文章id") + private String articleId; + + @ApiModelProperty(value = "类型 - 1:阅读数 2:分享数") + private Integer type; + +} diff --git a/2068-yexiu-read-api/src/main/java/com/yuexiu/secp/read/vo/StatisticsRespVo.java b/2068-yexiu-read-api/src/main/java/com/yuexiu/secp/read/vo/StatisticsRespVo.java new file mode 100644 index 0000000..3fac1e0 --- /dev/null +++ b/2068-yexiu-read-api/src/main/java/com/yuexiu/secp/read/vo/StatisticsRespVo.java @@ -0,0 +1,23 @@ +package com.yuexiu.secp.read.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 封装统计数返回对象 + */ +@Data +@NoArgsConstructor +public class StatisticsRespVo { + + @ApiModelProperty(value = "文章id") + private String articleId; + + @ApiModelProperty(value = "阅读数") + private String read; + + @ApiModelProperty(value = "分享数") + private String share; + +} diff --git a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/ArticleController.java b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/ArticleController.java index 3d77c73..9315d1d 100644 --- a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/ArticleController.java +++ b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/ArticleController.java @@ -17,7 +17,7 @@ import java.util.List; @Validated @Api(value = "阅读有礼-文章", tags = "阅读有礼-文章") @RestController -@RequestMapping("/read/article") +@RequestMapping("/ArticleController") public class ArticleController { @@ -51,4 +51,6 @@ public class ArticleController { + + } diff --git a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/ArticleGatherController.java b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/ArticleGatherController.java new file mode 100644 index 0000000..1d72931 --- /dev/null +++ b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/ArticleGatherController.java @@ -0,0 +1,45 @@ +package com.yuexiu.secp.read.controller; + + +import com.sie.iot.common.secure.annotation.CheckToken; +import com.yuexiu.secp.read.dto.ArticleAddCountDto; +import com.yuexiu.secp.read.model.service.IArticleGatherServer; +import com.yuexiu.secp.read.vo.StatisticsRespVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + + +@Validated +@Api(value = "阅读有礼-文章推广汇总", tags = "阅读有礼-文章推广汇总") +@RestController +@RequestMapping("/ArticleGatherController") +public class ArticleGatherController { + + + @Autowired + private IArticleGatherServer iArticleGatherServer; + + @ApiOperation(value = "根据文章id阅读数和分享数", notes = "根据文章id阅读数和分享数") + @GetMapping(value = "/find/{articleId}/count") + @CheckToken + public StatisticsRespVo findByArticleIdCount(@PathVariable Long articleId) { + return iArticleGatherServer.findByArticleIdCount(articleId); + } + + + /** + * 根据文章id增加相关的文章阅读数和分享数 + */ + @ApiOperation(value = "根据文章id增加相关的文章阅读数和分享数", notes = "根据文章id增加相关的文章阅读数和分享数") + @PostMapping(value = "/add/ArticleCount") + @CheckToken + public void addArticleCount(@RequestBody ArticleAddCountDto articlePreviewDto) { + iArticleGatherServer.addArticleCount(articlePreviewDto); + + } + + +} diff --git a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/ArticleStatisticsController.java b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/ArticleStatisticsController.java deleted file mode 100644 index 0738a68..0000000 --- a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/ArticleStatisticsController.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.yuexiu.secp.read.controller; - -import com.sie.iot.common.bean.ResponseData; -import com.sie.iot.common.secure.annotation.CheckToken; -import com.yuexiu.secp.read.model.service.IArticleServer; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@Validated -@Api(value = "阅读有礼文章统计数", tags = "阅读有礼文章统计数") -@RestController -@RequestMapping("/read/") -public class ArticleStatisticsController { - - - @Autowired - private IArticleServer iArticleServer; - - @ApiOperation(value = "根据文章id获取统计数", notes = "根据文章id获取统计数") - @GetMapping(value = "/find/{articleId}/count") - @CheckToken - public ResponseData findByArticleIdCount(@PathVariable Long articleId) { - iArticleServer.findByArticleIdCount(articleId); - return null; - } - -} diff --git a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/IArticleGatherServer.java b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/IArticleGatherServer.java new file mode 100644 index 0000000..87f54a8 --- /dev/null +++ b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/IArticleGatherServer.java @@ -0,0 +1,29 @@ +package com.yuexiu.secp.read.model.service; + +import com.yuexiu.secp.read.dto.ArticleAddCountDto; +import com.yuexiu.secp.read.model.entities.ArticleGatherEntity; +import com.yuexiu.secp.read.vo.StatisticsRespVo; + +public interface IArticleGatherServer { + + /** + * 根据类型和文章id,获取统计数 + * @param articleId + */ + String findByArticleIdAndTypeCount(Long articleId , int type); + + /** + * 根据文章id获取相关统计数 + * @param articleId + */ + StatisticsRespVo findByArticleIdCount(Long articleId); + + + /** + * 根据文章和类型,增加相关的统计数 + * @param articlePreviewDto + */ + void addArticleCount(ArticleAddCountDto articlePreviewDto); + + +} diff --git a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/IArticlePreview.java b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/IArticlePreview.java index 38d75f0..8e0512b 100644 --- a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/IArticlePreview.java +++ b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/IArticlePreview.java @@ -3,7 +3,6 @@ package com.yuexiu.secp.read.model.service; import com.sie.iot.common.model.inter.IBaseCommon; import com.yuexiu.secp.read.dto.ArticlePreviewDto; -import com.yuexiu.secp.read.dto.RecommendDto; import com.yuexiu.secp.read.model.entities.ArticlePreviewEntity; import com.yuexiu.secp.read.model.entities.CostUnitEntity; diff --git a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/IArticleServer.java b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/IArticleServer.java index 0bdc80e..f7421e6 100644 --- a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/IArticleServer.java +++ b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/IArticleServer.java @@ -3,7 +3,6 @@ package com.yuexiu.secp.read.model.service; import com.yuexiu.secp.read.dto.ArticleQueryDto; -import com.yuexiu.secp.read.dto.RecommendDto; import com.yuexiu.secp.read.model.entities.ArticleEntity; @@ -16,6 +15,4 @@ public interface IArticleServer { List findPrevious(ArticleQueryDto articleQueryDto); - - void findByArticleIdCount(Long articleId); } diff --git a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/impl/ArticleGatherServer.java b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/impl/ArticleGatherServer.java new file mode 100644 index 0000000..9bedfeb --- /dev/null +++ b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/impl/ArticleGatherServer.java @@ -0,0 +1,96 @@ +package com.yuexiu.secp.read.model.service.impl; + +import com.itextpdf.text.log.Logger; +import com.itextpdf.text.log.LoggerFactory; +import com.sie.iot.common.model.inter.server.BaseCommonServer; +import com.yuexiu.secp.read.dto.ArticleAddCountDto; +import com.yuexiu.secp.read.infra.constant.ArticleConstant; +import com.yuexiu.secp.read.infra.util.RedisUtils; +import com.yuexiu.secp.read.model.entities.ArticleGatherEntity; +import com.yuexiu.secp.read.model.service.IArticleGatherServer; +import com.yuexiu.secp.read.vo.StatisticsRespVo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +@Service +public class ArticleGatherServer extends BaseCommonServer implements IArticleGatherServer { + + private static final Logger LOGGER = LoggerFactory.getLogger(ArticleGatherServer.class); + + //阅读标记 + public final static Integer READ_TYPE = 1; + + //阅读标记 + public final static Integer SHARE_TYPE = 2; + + + /** + * redis + */ + @Autowired + private StringRedisTemplate redisTemplate; + + + /** + * 获取文章统计数 + * type: + * 1:阅读数 + * 2:转发数 + * + * @param articleId + */ + public String findByArticleIdAndTypeCount(Long articleId, int type) { + LOGGER.info("articleId : {}" + articleId + "type --> {}" + type); + String count = ""; + if (type == READ_TYPE) { + count = redisTemplate.opsForValue().get(RedisUtils.getRedisKey(ArticleConstant.SIE, ArticleConstant.READ, String.valueOf(articleId))); + } else if (type == SHARE_TYPE) { + count = redisTemplate.opsForValue().get(RedisUtils.getRedisKey(ArticleConstant.SIE, ArticleConstant.SHARE, String.valueOf(articleId))); + } + return count; + } + + /** + * 根据文章id获取相关统计数 + * + * @param articleId + */ + @Override + public StatisticsRespVo findByArticleIdCount(Long articleId) { + LOGGER.info("articleId : {}" + articleId); + + StatisticsRespVo statisticsRespVo = new StatisticsRespVo(); + //获取阅读数 + String read = this.findByArticleIdAndTypeCount(articleId, READ_TYPE); + String share = this.findByArticleIdAndTypeCount(articleId, SHARE_TYPE); + LOGGER.info("该文章id:" + articleId + "获取到的阅读数:" + read + "和分享数:" + share); + //组装数据 + statisticsRespVo.setRead(!StringUtils.isEmpty(read) ? read : "0"); + statisticsRespVo.setShare(!StringUtils.isEmpty(share) ? read : "0"); + + return statisticsRespVo; + + } + + + /** + * 根据文章和类型,增加相关的统计数 + * + * @param articlePreviewDto + */ + @Override + public void addArticleCount(ArticleAddCountDto articlePreviewDto) { + LOGGER.info("articlePreviewDto : {}" + articlePreviewDto); + if (articlePreviewDto.getType() == READ_TYPE) { + redisTemplate.opsForValue().increment(RedisUtils.getRedisKey(ArticleConstant.SIE, ArticleConstant.READ, articlePreviewDto.getArticleId()), 1L); + } else if (articlePreviewDto.getType() == SHARE_TYPE) { + redisTemplate.opsForValue().increment(RedisUtils.getRedisKey(ArticleConstant.SIE, ArticleConstant.SHARE, articlePreviewDto.getArticleId()), 1L); + } else { + LOGGER.error("传参有误,没有定义该类型:" + articlePreviewDto.getType()); + } + } + + +} diff --git a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/impl/ArticleServer.java b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/impl/ArticleServer.java index a56db33..fc8790a 100644 --- a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/impl/ArticleServer.java +++ b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/impl/ArticleServer.java @@ -4,8 +4,9 @@ package com.yuexiu.secp.read.model.service.impl; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.Iterables; import com.yuexiu.secp.read.dto.ArticleQueryDto; +import com.yuexiu.secp.read.infra.constant.ArticleConstant; import com.yuexiu.secp.read.infra.util.RedisUtils; -import com.yuexiu.secp.read.model.dao.ArticlePreviewDao; +import com.yuexiu.secp.read.model.dao.ArticleDao; import com.yuexiu.secp.read.model.entities.ArticleEntity; import com.yuexiu.secp.read.model.service.IArticleServer; @@ -36,7 +37,7 @@ public class ArticleServer implements IArticleServer{ * 文章DAO */ @Autowired - private ArticlePreviewDao articlePreviewDao; + private ArticleDao articleDao; /** @@ -55,16 +56,16 @@ public class ArticleServer implements IArticleServer{ List dataList = new ArrayList<>(); //查询是否有最新推荐 - int count = articlePreviewDao.findRecommend(); + int count = articleDao.findRecommend(); if (count < 1) { return null; } //获取当前登录用户 //获取我已推荐的文章 - Set recommendIdList = redisTemplate.opsForSet().members(RedisUtils.getRedisKey("SIE" , "RECOMMEND" ,String.valueOf(articleQueryDto.getUserId()))); + Set recommendIdList = redisTemplate.opsForSet().members(RedisUtils.getRedisKey(ArticleConstant.SIE , ArticleConstant.RECOMMEND ,String.valueOf(articleQueryDto.getUserId()))); //获取所有文章的信息 - Map entries = redisTemplate.opsForHash().entries(RedisUtils.getRedisKey("SIE" , "READ" ,"ARTICLE")); + Map entries = redisTemplate.opsForHash().entries(RedisUtils.getRedisKey(ArticleConstant.SIE , ArticleConstant.READ ,ArticleConstant.ARTICLE)); ObjectMapper objectMapper = new ObjectMapper(); //剔除我已推荐文章 for (String recommendId : recommendIdList) { @@ -118,10 +119,6 @@ public class ArticleServer implements IArticleServer{ return null; } - @Override - public void findByArticleIdCount(Long articleId) { - - } }