fix: 修改文章元信息也会计为每日编辑文章数的问题

This commit is contained in:
xiaozzzi 2024-04-10 23:19:09 +08:00
parent a9b864efcb
commit 20361dceb6
7 changed files with 51 additions and 10 deletions

View File

@ -50,6 +50,16 @@ public interface ArticleMapper extends BaseMapper<ArticleEntity> {
*/ */
void updContentById(ArticleEntity entity); void updContentById(ArticleEntity entity);
/**
* 查询某段时间内编辑过内容的文章数
*
* @param beginUpdTime 开始修改日期
* @param endUpdTime 结束修改日期
*/
ArticleStatRes statUpdArticleCount(@Param("beginUpdTime") String beginUpdTime,
@Param("endUpdTime") String endUpdTime,
@Param("userId") Long userId);
/** /**
* 修改某段日期内修改的文章数据 * 修改某段日期内修改的文章数据
* *

View File

@ -19,6 +19,7 @@ import com.blossom.backend.server.doc.pojo.DocTreeRes;
import com.blossom.backend.server.utils.ArticleUtil; import com.blossom.backend.server.utils.ArticleUtil;
import com.blossom.backend.server.utils.DocUtil; import com.blossom.backend.server.utils.DocUtil;
import com.blossom.common.base.exception.XzException404; import com.blossom.common.base.exception.XzException404;
import com.blossom.common.base.util.DateUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
@ -188,6 +189,7 @@ public class ArticleService extends ServiceImpl<ArticleMapper, ArticleEntity> {
if (req.getHtml() != null) { if (req.getHtml() != null) {
req.setHtml(req.getHtml().replaceAll("<p><br></p>", "")); req.setHtml(req.getHtml().replaceAll("<p><br></p>", ""));
} }
req.setUpdMarkdownTime(DateUtils.date());
baseMapper.updContentById(req); baseMapper.updContentById(req);
referenceService.bind(req.getUserId(), req.getId(), req.getName(), req.getReferences()); referenceService.bind(req.getUserId(), req.getId(), req.getName(), req.getReferences());
logService.insert(req.getId(), 0, req.getMarkdown()); logService.insert(req.getId(), 0, req.getMarkdown());

View File

@ -118,6 +118,10 @@ public class ArticleEntity extends AbstractPOJO implements Serializable {
* 用户ID * 用户ID
*/ */
private Long userId; private Long userId;
/**
* 文章内容的修改时间
*/
private Date updMarkdownTime;
//region ============================== 非数据库字段 ============================== //region ============================== 非数据库字段 ==============================
/** /**

View File

@ -42,12 +42,12 @@ public class ArticleStatJob {
} }
for (UserEntity user : users) { for (UserEntity user : users) {
ArticleStatRes statCount = statService.statCount(toDayBegin, toDayEnd, user.getId()); ArticleStatRes statCount = statService.statUpdArticleCount(toDayBegin, toDayEnd, user.getId());
statService.updByDate(1, toDay, statCount.getArticleCount(), user.getId()); statService.updByDate(ArticleStatTypeEnum.ARTICLE_HEATMAP, toDay, statCount.getArticleCount(), user.getId());
String toMouth = DateUtils.format(DateUtils.beginOfMonth(DateUtils.date()), DateUtils.PATTERN_YYYYMMDD); String toMouth = DateUtils.format(DateUtils.beginOfMonth(DateUtils.date()), DateUtils.PATTERN_YYYYMMDD);
ArticleStatRes statWord = statService.statCount(null, null, user.getId()); ArticleStatRes statWord = statService.statCount(null, null, user.getId());
statService.updByDate(2, toMouth, statWord.getArticleWords(), user.getId()); statService.updByDate(ArticleStatTypeEnum.ARTICLE_WORDS, toMouth, statWord.getArticleWords(), user.getId());
} }
} }
} }

View File

@ -140,6 +140,16 @@ public class ArticleStatService extends ServiceImpl<ArticleStatMapper, ArticleSt
return res; return res;
} }
/**
* 文章统计, 文章数, 总字数
*
* @param beginUpdTime 修改日期的开始范围
* @param endUpdTime 修改日期的结束范围
*/
public ArticleStatRes statUpdArticleCount(String beginUpdTime, String endUpdTime, Long userId) {
return articleMapper.statUpdArticleCount(beginUpdTime, endUpdTime, userId);
}
/** /**
* 文章统计, 文章数, 总字数 * 文章统计, 文章数, 总字数
* *
@ -161,7 +171,7 @@ public class ArticleStatService extends ServiceImpl<ArticleStatMapper, ArticleSt
return; return;
} }
for (ArticleWordsRes words : req.getWordsList()) { for (ArticleWordsRes words : req.getWordsList()) {
this.updByDate(ArticleStatTypeEnum.ARTICLE_WORDS.getType(), words.getDate() + "-01", words.getValue(), userId); this.updByDate(ArticleStatTypeEnum.ARTICLE_WORDS, words.getDate() + "-01", words.getValue(), userId);
} }
} }
@ -174,26 +184,26 @@ public class ArticleStatService extends ServiceImpl<ArticleStatMapper, ArticleSt
* @param userId 用户ID * @param userId 用户ID
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void updByDate(Integer type, String date, Integer value, Long userId) { public void updByDate(ArticleStatTypeEnum type, String date, Integer value, Long userId) {
if (value == null) { if (value == null) {
value = 0; value = 0;
} }
LambdaQueryWrapper<ArticleStatEntity> existWhere = new LambdaQueryWrapper<>(); LambdaQueryWrapper<ArticleStatEntity> existWhere = new LambdaQueryWrapper<>();
existWhere existWhere
.eq(ArticleStatEntity::getUserId, userId) .eq(ArticleStatEntity::getUserId, userId)
.eq(ArticleStatEntity::getType, type) .eq(ArticleStatEntity::getType, type.getType())
.eq(ArticleStatEntity::getStatDate, date); .eq(ArticleStatEntity::getStatDate, date);
if (baseMapper.exists(existWhere)) { if (baseMapper.exists(existWhere)) {
LambdaQueryWrapper<ArticleStatEntity> updWhere = new LambdaQueryWrapper<>(); LambdaQueryWrapper<ArticleStatEntity> updWhere = new LambdaQueryWrapper<>();
updWhere.eq(ArticleStatEntity::getUserId, userId) updWhere.eq(ArticleStatEntity::getUserId, userId)
.eq(ArticleStatEntity::getType, type) .eq(ArticleStatEntity::getType, type.getType())
.eq(ArticleStatEntity::getStatDate, date); .eq(ArticleStatEntity::getStatDate, date);
ArticleStatEntity upd = new ArticleStatEntity(); ArticleStatEntity upd = new ArticleStatEntity();
upd.setStatValue(value); upd.setStatValue(value);
baseMapper.update(upd, updWhere); baseMapper.update(upd, updWhere);
} else { } else {
ArticleStatEntity ist = new ArticleStatEntity(); ArticleStatEntity ist = new ArticleStatEntity();
ist.setType(type); ist.setType(type.getType());
ist.setStatDate(DateUtils.parse(date, DateUtils.PATTERN_YYYYMMDD)); ist.setStatDate(DateUtils.parse(date, DateUtils.PATTERN_YYYYMMDD));
ist.setStatValue(value); ist.setStatValue(value);
ist.setUserId(userId); ist.setUserId(userId);

View File

@ -92,12 +92,24 @@
html = #{html}, html = #{html},
words = #{words}, words = #{words},
toc = #{toc}, toc = #{toc},
version = version + 1 version = version + 1,
upd_markdown_time = #{updMarkdownTime}
where id = #{id} where id = #{id}
and user_id = #{userId} and user_id = #{userId}
</update> </update>
<!-- ======================================== 统计 ======================================== --> <!-- ======================================== 统计 ======================================== -->
<select id="statUpdArticleCount" resultType="com.blossom.backend.server.article.draft.pojo.ArticleStatRes">
select count(*) as articleCount
from blossom_article
where user_id = #{userId}
<if test="beginUpdTime != null and beginUpdTime != ''">
and upd_markdown_time >= #{beginUpdTime}
</if>
<if test="endUpdTime != null and endUpdTime != ''">
and #{endUpdTime} >= upd_markdown_time
</if>
</select>
<select id="statCount" resultType="com.blossom.backend.server.article.draft.pojo.ArticleStatRes"> <select id="statCount" resultType="com.blossom.backend.server.article.draft.pojo.ArticleStatRes">
select count(*) as articleCount, sum(words) as articleWords select count(*) as articleCount, sum(words) as articleWords

View File

@ -641,4 +641,7 @@ CREATE TABLE IF NOT EXISTS `base_user_param`
COLLATE = utf8mb4_bin; COLLATE = utf8mb4_bin;
-- Code that might be wrong goes last -- Code that might be wrong goes last
alter table blossom_folder add column star_status tinyint(1) NOT NULL DEFAULT 0 COMMENT '收藏 0:否,1:是'; -- since 1.14.0
alter table blossom_folder add column star_status tinyint(1) NOT NULL DEFAULT 0 COMMENT '收藏 0:否,1:是';
-- since 1.15.0
alter table blossom_article add column upd_markdown_time datetime COMMENT '文章内容的修改时间';