From fc1992863de1fb042e319e4c4fbc1bfd08d79f44 Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Mon, 24 Oct 2022 15:25:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E7=AB=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../epmet/dto/form/UpdateArticleFormDTO.java | 92 ++++++++++++++ .../com/epmet/constant/ArticleConstant.java | 1 + .../epmet/controller/ArticleController.java | 10 +- .../java/com/epmet/dao/ArticleContentDao.java | 8 +- .../java/com/epmet/dao/ArticleCoverDao.java | 3 +- .../com/epmet/dao/ArticlePublishRangeDao.java | 2 + .../entity/ArticleOperateRecordEntity.java | 1 + .../com/epmet/service/ArticleService.java | 6 + .../service/impl/ArticleServiceImpl.java | 119 +++++++++++++++++- .../resources/mapper/ArticleContentDao.xml | 10 ++ .../main/resources/mapper/ArticleCoverDao.xml | 6 +- .../mapper/ArticlePublishRangeDao.xml | 8 +- 12 files changed, 258 insertions(+), 8 deletions(-) create mode 100644 epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/UpdateArticleFormDTO.java diff --git a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/UpdateArticleFormDTO.java b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/UpdateArticleFormDTO.java new file mode 100644 index 0000000000..b575bf90c6 --- /dev/null +++ b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/UpdateArticleFormDTO.java @@ -0,0 +1,92 @@ +package com.epmet.dto.form; + +import com.epmet.commons.tools.validator.group.CustomerClientShowGroup; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description 修改文章 + * @Author yzm + * @Date 2022/10/24 14:12 + */ +@Data +public class UpdateArticleFormDTO { + public interface AddUserInternalGroup { + } + + public interface AddUserShowGroup extends CustomerClientShowGroup { + } + + /** + * 文章id + */ + @NotBlank(message = "articleId不能为空", groups = {AddUserInternalGroup.class}) + private String articleId; + + @NotBlank(message = "文章标题不能为空", groups = {AddUserShowGroup.class}) + @Length(max = 50, message = "文章标题最长为50个字") + private String title; + + /** + * 发布范围IDs + */ + @NotEmpty(message = "发布范围不能为空", groups = AddUserShowGroup.class) + private List gridIdList; + + /** + * 发布范围Names + */ + @NotBlank(message = "发布范围名称不能为空", groups = AddUserShowGroup.class) + private String publishRangeDesc; + + @NotBlank(message = "发布单位不能为空", groups = AddUserShowGroup.class) + private String publisher; + + @NotBlank(message = "发布单位名称不能为空", groups = AddUserShowGroup.class) + private String publisherName; + + /** + * 发布单位类型 机关:agency;部门:department;网格:grid + */ + @NotBlank(message = "发布单位类型不能为空", groups = AddUserShowGroup.class) + private String publisherType; + + /** + * 封面图地址 + */ + private String imgUrl; + + @NotBlank(message = "发布时间不能为空", groups = AddUserShowGroup.class) + private String publishDate; + + /** + * 文章标签 + */ + private List tagNameList; + + @NotBlank(message = "文章内容不能为空", groups = {AddUserShowGroup.class}) + private String content; + + /** + * 是否置顶 1是;0否; + */ + @NotNull(message = "请选择是否置顶", groups = AddUserShowGroup.class) + private Integer isTop; + + /** + * token中获取 + */ + @NotBlank(message = "userId不能为空", groups = AddUserInternalGroup.class) + private String userId; + /** + * token中获取 + */ + @NotBlank(message = "customerId不能为空", groups = AddUserInternalGroup.class) + private String customerId; +} + diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/constant/ArticleConstant.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/constant/ArticleConstant.java index 29d8bca111..2899d54c7b 100644 --- a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/constant/ArticleConstant.java +++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/constant/ArticleConstant.java @@ -20,6 +20,7 @@ public interface ArticleConstant { */ String PUBLISHED = "published"; String PUBLISH = "publish"; + String UPDATE_ARTICEL="update"; String PUBLISH_CONTENT = "发布文章"; /** * 发布状态-已下线 diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/ArticleController.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/ArticleController.java index 88782d0506..d640fb464d 100644 --- a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/ArticleController.java +++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/ArticleController.java @@ -471,13 +471,19 @@ public class ArticleController { /** * 已发布的文章可以编辑 + * * @param tokenDto * @param formDTO * @return */ @PostMapping("updateArticle") - public Result updateArticleId(@LoginUser TokenDto tokenDto,@RequestBody AddOrSaveDraftFormDTO formDTO){ - // todo + public Result updateArticle(@LoginUser TokenDto tokenDto, @RequestBody UpdateArticleFormDTO formDTO) { + formDTO.setUserId(tokenDto.getUserId()); + formDTO.setCustomerId(tokenDto.getCustomerId()); + ValidatorUtils.validateEntity(formDTO, UpdateArticleFormDTO.AddUserShowGroup.class, UpdateArticleFormDTO.AddUserInternalGroup.class); + articleService.updateArticle(formDTO); return new Result(); } + + } diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/ArticleContentDao.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/ArticleContentDao.java index 44d12946d9..227fa89114 100644 --- a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/ArticleContentDao.java +++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/ArticleContentDao.java @@ -29,5 +29,11 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface ArticleContentDao extends BaseDao { - + /** + * 只支持富文本的文章 + * 如果是最开始一段文字,一个图片那种文章在article_content表会有多条 + * @param articleId + * @return + */ + ArticleContentEntity selectByArticleId(String articleId); } \ No newline at end of file diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/ArticleCoverDao.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/ArticleCoverDao.java index cd087445ae..3f3dc05374 100644 --- a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/ArticleCoverDao.java +++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/ArticleCoverDao.java @@ -29,5 +29,6 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface ArticleCoverDao extends BaseDao { - + + ArticleCoverEntity selectByArticleId(String articleId); } \ No newline at end of file diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/ArticlePublishRangeDao.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/ArticlePublishRangeDao.java index 9fe5fa1614..77bedc971e 100644 --- a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/ArticlePublishRangeDao.java +++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/ArticlePublishRangeDao.java @@ -47,4 +47,6 @@ public interface ArticlePublishRangeDao extends BaseDao selectInitData(@Param("customerIdList") List customerIdList); + + int deleteByArticleId(@Param("articleId") String articleId,@Param("operUserId")String operUserId); } \ No newline at end of file diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/ArticleOperateRecordEntity.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/ArticleOperateRecordEntity.java index ff89979fb8..ee00d068d2 100644 --- a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/ArticleOperateRecordEntity.java +++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/ArticleOperateRecordEntity.java @@ -64,6 +64,7 @@ public class ArticleOperateRecordEntity extends BaseEpmetEntity { /** * 操作类型 发布文章:publish;取消文章置顶:canceltop;设置置顶:settom;下线文章:offline;修改文章发布范围:updatepublishrange + * 修改文章:update */ private String opType; diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/ArticleService.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/ArticleService.java index 8f0914bfe4..5438ed4bd5 100644 --- a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/ArticleService.java +++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/ArticleService.java @@ -257,4 +257,10 @@ public interface ArticleService extends BaseService { PublishedListResultDTO detailV2(ArticleListFormDTO formDTO); void topArticle(String articleId, String type,String imgUrl); + + /** + * 修改文章 + * @param formDTO + */ + void updateArticle(UpdateArticleFormDTO formDTO); } \ No newline at end of file diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/impl/ArticleServiceImpl.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/impl/ArticleServiceImpl.java index 4e94222164..af49ec4ca4 100644 --- a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/impl/ArticleServiceImpl.java +++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/impl/ArticleServiceImpl.java @@ -1435,7 +1435,13 @@ public class ArticleServiceImpl extends BaseServiceImpl queryWrapper=new LambdaQueryWrapper(); + queryWrapper.eq(ArticleTagsEntity::getCustomerId,customerId) + .eq(ArticleTagsEntity::getArticleId,articleId); + articleTagsDao.delete(queryWrapper); + articleTagsService.insertBatch(articleTags); + } } /** @@ -1543,7 +1549,7 @@ public class ArticleServiceImpl extends BaseServiceImpl DraftConstant.PREVIEW_CONTENT_MAX_LENGTH ? getPreviewContent(formDTO.getContent()).substring(NumConstant.ZERO,DraftConstant.PREVIEW_CONTENT_MAX_LENGTH) : getPreviewContent(formDTO.getContent())); + articleEntity.setPublishDate(DateUtils.stringToDate(formDTO.getPublishDate(),DateUtils.DATE_PATTERN)); + articleEntity.setPublisherId(formDTO.getPublisher()); + articleEntity.setTags(CollectionUtils.isEmpty(formDTO.getTagNameList()) ? "" : formDTO.getTagNameList().stream().collect(Collectors.joining("|"))); + articleEntity.setOrgId(staffInfo.getAgencyId()); + articleEntity.setOrgIdPath(StringUtils.isBlank(agencyInfo.getPids()) || agencyInfo.getPids().equals(NumConstant.ZERO_STR) ? agencyInfo.getId() : agencyInfo.getPids().concat(":").concat(agencyInfo.getId())); + articleEntity.setRichTextFlag(NumConstant.ONE_STR); + baseDao.updateById(articleEntity); + // 2.内容 + ArticleContentEntity articleContent = articleContentDao.selectByArticleId(formDTO.getArticleId()); + articleContent.setContent(formDTO.getContent()); + articleContentDao.updateById(articleContent); + // 3.操作记录 + ArticleOperateRecordEntity articleOperateRecord = new ArticleOperateRecordEntity(); + articleOperateRecord.setCustomerId(formDTO.getCustomerId()); + articleOperateRecord.setArticleId(formDTO.getArticleId()); + articleOperateRecord.setGridIds(CollectionUtils.isEmpty(formDTO.getGridIdList()) ? "" : formDTO.getGridIdList().stream().collect(Collectors.joining(":"))); + articleOperateRecord.setOpUser(staffInfo.getAgencyName().concat("-").concat(staffInfo.getRealName())); + articleOperateRecord.setContent(articleOperateRecord.getOpUser() + "发布文章【" +formDTO.getTitle() + "】"); + articleOperateRecord.setOpType(ArticleConstant.UPDATE_ARTICEL); + articleOperateRecord.setOpTime(new Date()); + articleOperateRecordService.insert(articleOperateRecord); + // 4.发布范围 + if (!CollectionUtils.isEmpty(formDTO.getGridIdList())){ + List rangeList = new ArrayList<>(); + formDTO.getGridIdList().forEach(g -> { + GridInfoCache gridInfoCache = CustomerOrgRedis.getGridInfo(g); + if (null == gridInfoCache){ + throw new EpmetException("未查询到网格信息:"+g); + } + ArticlePublishRangeEntity articlePublishRange = ConvertUtils.sourceToTarget(gridInfoCache,ArticlePublishRangeEntity.class); + articlePublishRange.setCustomerId(formDTO.getCustomerId()); + articlePublishRange.setArticleId(formDTO.getArticleId()); + articlePublishRange.setGridId(g); + articlePublishRange.setAgencyGridName(gridInfoCache.getGridNamePath()); + articlePublishRange.setAgencyId(gridInfoCache.getPid()); + AgencyInfoCache agencyInfoCache = CustomerOrgRedis.getAgencyInfo(gridInfoCache.getPid()); + if (null == agencyInfoCache){ + throw new EpmetException("未查询到组织信息:"+gridInfoCache.getPid()); + } + articlePublishRange.setPids(agencyInfoCache.getPids()); + articlePublishRange.setPublishStatus(ArticleConstant.PUBLISHED); + articlePublishRange.setId(null); + rangeList.add(articlePublishRange); + }); + if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(rangeList)){ + //先删除,后插入 + articlePublishRangeDao.deleteByArticleId(formDTO.getArticleId(),formDTO.getUserId()); + articlePublishRangeService.insertBatch(rangeList); + } + } + // 5.文章标签 + UpdateCustomerTagCacheDTO updateCustomerTagCacheDTO = updateCustomerTagV2(formDTO.getUserId(), formDTO.getCustomerId(), StringUtils.isBlank(articleEntity.getTags()) ? "" : articleEntity.getTags()); + if (null != updateCustomerTagCacheDTO){ + addArticleTagsV2(updateCustomerTagCacheDTO,formDTO.getCustomerId(),articleEntity.getId()); + } + // 6.更新网格tag + List updateGridTagCacheDTOS = updateGridTagV2(updateCustomerTagCacheDTO, formDTO.getCustomerId(), formDTO.getGridIdList(), formDTO.getUserId()); + // 7.文章封面 + if (StringUtils.isNotBlank(formDTO.getImgUrl())){ + ArticleCoverEntity articleCoverEntity = articleCoverDao.selectByArticleId(formDTO.getArticleId()); + if (null != articleCoverEntity) { + articleCoverEntity.setImgUrl(formDTO.getImgUrl()); + articleCoverEntity.setAuditStatus("pass"); + articleCoverDao.updateById(articleCoverEntity); + }else{ + ArticleCoverEntity articleCover = new ArticleCoverEntity(); + articleCover.setCustomerId(formDTO.getCustomerId()); + articleCover.setArticleId(formDTO.getArticleId()); + articleCover.setImgUrl(formDTO.getImgUrl()); + articleCover.setAuditStatus("pass"); + articleCoverDao.insert(articleCover); + } + } + // 8.更新redis + try { + this.updateCacheCustomerTag(updateCustomerTagCacheDTO); + this.updateCacheGridTag(updateGridTagCacheDTOS); + } catch (Exception e) { + //我觉着没必要抛出异常吧,日志打印一下吧 + log.warn("scanAllPassPublishArticle update redis exception", e); + // throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg()); + } + + } } diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/ArticleContentDao.xml b/epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/ArticleContentDao.xml index fb55860502..52007cee9e 100644 --- a/epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/ArticleContentDao.xml +++ b/epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/ArticleContentDao.xml @@ -4,4 +4,14 @@ + + \ No newline at end of file diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/ArticleCoverDao.xml b/epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/ArticleCoverDao.xml index 684910ea8d..1bd90e218e 100644 --- a/epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/ArticleCoverDao.xml +++ b/epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/ArticleCoverDao.xml @@ -3,5 +3,9 @@ - + \ No newline at end of file diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/ArticlePublishRangeDao.xml b/epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/ArticlePublishRangeDao.xml index c58c230891..2b2fcb4e3b 100644 --- a/epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/ArticlePublishRangeDao.xml +++ b/epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/ArticlePublishRangeDao.xml @@ -35,5 +35,11 @@ ORDER BY GRID_ID - + + update article_publish_range r + set r.del_flag='1', + r.UPDATED_BY = #{operUserId}, + r.UPDATED_TIME = now() + where r.ARTICLE_ID = #{articleId} + \ No newline at end of file