| @@ -3,18 +3,23 @@ | |||
| <component name="Encoding" native2AsciiForPropertiesFiles="true" defaultCharsetForPropertiesFiles="UTF-8"> | |||
| <file url="file://$PROJECT_DIR$" charset="UTF-8" /> | |||
| <file url="file://$PROJECT_DIR$/1067-yuexiu-task-model-mybatis" charset="UTF-8" /> | |||
| <file url="file://$PROJECT_DIR$/1067-yuexiu-task-model-mybatis/src/main/java" charset="UTF-8" /> | |||
| <file url="file://$PROJECT_DIR$/1068-yexiu-read-model-mybatis" charset="UTF-8" /> | |||
| <file url="file://$PROJECT_DIR$/1068-yexiu-read-model-mybatis/src/main/java" charset="UTF-8" /> | |||
| <file url="file://$PROJECT_DIR$/1069-yuexiu-registration-model-mybatis" charset="UTF-8" /> | |||
| <file url="file://$PROJECT_DIR$/1069-yuexiu-registration-model-mybatis/src/main/java" charset="UTF-8" /> | |||
| <file url="file://$PROJECT_DIR$/2067-yuexiu-task-api" charset="UTF-8" /> | |||
| <file url="file://$PROJECT_DIR$/2067-yuexiu-task-api/src/main/java" charset="UTF-8" /> | |||
| <file url="file://$PROJECT_DIR$/2067-yuexiu-task-application" charset="UTF-8" /> | |||
| <file url="file://$PROJECT_DIR$/2067-yuexiu-task-application/src/main/java" charset="UTF-8" /> | |||
| <file url="file://$PROJECT_DIR$/2068-yexiu-read-api" charset="UTF-8" /> | |||
| <file url="file://$PROJECT_DIR$/2068-yexiu-read-api/src/main/java" charset="UTF-8" /> | |||
| <file url="file://$PROJECT_DIR$/2068-yexiu-read-application" charset="UTF-8" /> | |||
| <file url="file://$PROJECT_DIR$/2068-yexiu-read-application/src/main/java" charset="UTF-8" /> | |||
| <file url="file://$PROJECT_DIR$/2069-yuexiu-registration-api" charset="UTF-8" /> | |||
| <file url="file://$PROJECT_DIR$/2069-yuexiu-registration-api/src/main/java" charset="UTF-8" /> | |||
| <file url="file://$PROJECT_DIR$/2069-yuexiu-registration-application" charset="UTF-8" /> | |||
| <file url="file://$PROJECT_DIR$/2069-yuexiu-registration-application/src/main/java" charset="UTF-8" /> | |||
| <file url="PROJECT" charset="UTF-8" /> | |||
| </component> | |||
| </project> | |||
| </project> | |||
| @@ -9,6 +9,7 @@ | |||
| <factory-entry name="1068-yexiu-read-model-mybatis" /> | |||
| <factory-entry name="Entities" /> | |||
| </datasource-mapping> | |||
| <naming-strategy-map /> | |||
| </configuration> | |||
| </facet> | |||
| <facet type="Spring" name="Spring"> | |||
| @@ -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"; | |||
| } | |||
| @@ -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<String> strlist = Lists.newArrayList(); | |||
| for (String str : name) { | |||
| if (StringUtils.isNotBlank(str)) { | |||
| strlist.add(str); | |||
| } | |||
| } | |||
| return Joiner.on("_").join(strlist); | |||
| } | |||
| } | |||
| @@ -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<ArticleEntity> { | |||
| @Select("select count(1) from yxh_article where promotion_status = 1 and task_status = 1") | |||
| int findRecommend(); | |||
| } | |||
| @@ -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<ArticleGatherEntity> { | |||
| } | |||
| @@ -1,13 +1,14 @@ | |||
| package com.yuexiu.secp.read.model.dao; | |||
| import com.sie.iot.common.model.dao.BaseCommonDAO_HI; | |||
| import com.yuexiu.secp.read.model.entities.ArticlePreviewEntity; | |||
| import org.apache.ibatis.annotations.Select; | |||
| import com.sie.iot.common.model.dao.BaseCommonDAO_HI; | |||
| import org.springframework.stereotype.Component; | |||
| /** | |||
| * 文章信息预览Dao | |||
| */ | |||
| @Component("ArticlePreviewDao") | |||
| public interface ArticlePreviewDao extends BaseCommonDAO_HI<ArticlePreviewEntity> { | |||
| @Select("select * from sie_article_preview where promotion_status = 1 and task_status = 1") | |||
| int findRecommend(); | |||
| } | |||
| @@ -0,0 +1,396 @@ | |||
| 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; | |||
| @Data | |||
| @TableName("yxh_article") | |||
| @GeneratedKeyValue | |||
| @ApiModel(value = "文章信息表") | |||
| 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; | |||
| } | |||
| } | |||
| @@ -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<ArticleGatherEntity> { | |||
| @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; | |||
| } | |||
| } | |||
| @@ -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") | |||
| @@ -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; | |||
| } | |||
| @@ -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; | |||
| } | |||
| @@ -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; | |||
| } | |||
| @@ -0,0 +1,56 @@ | |||
| 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("/ArticleController") | |||
| public class ArticleController { | |||
| @Autowired | |||
| private IArticleServer iArticleServer; | |||
| /** | |||
| * 最新推查询 | |||
| * @param articleQueryDto | |||
| * @return | |||
| */ | |||
| @ApiOperation(value = "查询最新推荐", notes = "根据城市与项目查询最新推荐数据") | |||
| @PostMapping(value = "/findNewest") | |||
| @CheckToken | |||
| public ResponseData<List<ArticleEntity>> findNewest(@RequestBody ArticleQueryDto articleQueryDto) { | |||
| List<ArticleEntity> recommendedAndPast = iArticleServer.findNewest(articleQueryDto); | |||
| return ResponseData.data(recommendedAndPast); | |||
| } | |||
| /** | |||
| * 查询往期推荐 | |||
| */ | |||
| @ApiOperation(value = "查询往期推荐", notes = "根据城市与项目查询往期推荐数据") | |||
| @PostMapping(value = "/findPrevious") | |||
| @CheckToken | |||
| public ResponseData<List<ArticleEntity>> findPrevious(@RequestBody ArticleQueryDto articleQueryDto) { | |||
| List<ArticleEntity> recommendedAndPast = iArticleServer.findPrevious(articleQueryDto); | |||
| return ResponseData.data(recommendedAndPast); | |||
| } | |||
| } | |||
| @@ -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); | |||
| } | |||
| } | |||
| @@ -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") | |||
| @@ -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); | |||
| } | |||
| @@ -3,14 +3,12 @@ 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; | |||
| public interface IArticlePreview extends IBaseCommon<CostUnitEntity> { | |||
| String findRecommendedAndPast(RecommendDto articlePreviewDto); | |||
| ArticlePreviewEntity saveArticlePreview(ArticlePreviewDto dto); | |||
| @@ -0,0 +1,18 @@ | |||
| package com.yuexiu.secp.read.model.service; | |||
| import com.yuexiu.secp.read.dto.ArticleQueryDto; | |||
| import com.yuexiu.secp.read.model.entities.ArticleEntity; | |||
| import java.util.List; | |||
| public interface IArticleServer { | |||
| List<ArticleEntity> findNewest(ArticleQueryDto articleQueryDto); | |||
| List<ArticleEntity> findPrevious(ArticleQueryDto articleQueryDto); | |||
| } | |||
| @@ -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<ArticleGatherEntity> 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()); | |||
| } | |||
| } | |||
| } | |||
| @@ -36,70 +36,6 @@ public class ArticlePreviewServer extends BaseCommonServer<CostUnitEntity> imple | |||
| private ArticlePreviewDao articlePreviewDao; | |||
| @Override | |||
| public String findRecommendedAndPast(RecommendDto articlePreviewDto) { | |||
| //项目的集合信息 | |||
| List<ArticlePreviewEntity> projectList = new ArrayList<>(); | |||
| //城市的集合信息 | |||
| List<ArticlePreviewEntity> articlePreviewList = new ArrayList<>(); | |||
| List<ArticlePreviewEntity> dataList = new ArrayList<>(); | |||
| //查询是否有最新推荐 | |||
| int count = articlePreviewDao.findRecommend(); | |||
| if (count < 1) { | |||
| return "为空"; | |||
| } | |||
| //获取当前登录用户 | |||
| //获取我已推荐的文章 | |||
| Set<String> recommendIdList = redisTemplate.opsForSet().members("sie:recommend:1"); | |||
| //获取所有文章的信息 | |||
| Map<Object, Object> entries = redisTemplate.opsForHash().entries("sie:read:article"); | |||
| ObjectMapper objectMapper = new ObjectMapper(); | |||
| //剔除我已推荐文章 | |||
| for (String recommendId : recommendIdList) { | |||
| entries.remove(recommendId); | |||
| } | |||
| Collection<Object> 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) { | |||
| @@ -0,0 +1,124 @@ | |||
| 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.ArticleDao; | |||
| 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 ArticleDao articleDao; | |||
| /** | |||
| * 最新推荐 | |||
| * @param articleQueryDto | |||
| * @return | |||
| */ | |||
| @Override | |||
| public List<ArticleEntity> findNewest(ArticleQueryDto articleQueryDto) { | |||
| //项目的集合信息 | |||
| List<ArticleEntity> projectList = new ArrayList<>(); | |||
| //城市的集合信息 | |||
| List<ArticleEntity> articlePreviewList = new ArrayList<>(); | |||
| List<ArticleEntity> dataList = new ArrayList<>(); | |||
| //查询是否有最新推荐 | |||
| int count = articleDao.findRecommend(); | |||
| if (count < 1) { | |||
| return null; | |||
| } | |||
| //获取当前登录用户 | |||
| //获取我已推荐的文章 | |||
| Set<String> recommendIdList = redisTemplate.opsForSet().members(RedisUtils.getRedisKey(ArticleConstant.SIE , ArticleConstant.RECOMMEND ,String.valueOf(articleQueryDto.getUserId()))); | |||
| //获取所有文章的信息 | |||
| Map<Object, Object> entries = redisTemplate.opsForHash().entries(RedisUtils.getRedisKey(ArticleConstant.SIE , ArticleConstant.READ ,ArticleConstant.ARTICLE)); | |||
| ObjectMapper objectMapper = new ObjectMapper(); | |||
| //剔除我已推荐文章 | |||
| for (String recommendId : recommendIdList) { | |||
| entries.remove(recommendId); | |||
| } | |||
| Collection<Object> 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<ArticleEntity> findPrevious(ArticleQueryDto articleQueryDto) { | |||
| return null; | |||
| } | |||
| } | |||