diff --git a/ruoyi-admin/src/main/java/com/ruoyi/busi/controller/BusiNoticeController.java b/ruoyi-admin/src/main/java/com/ruoyi/busi/controller/BusiNoticeController.java index be9a62b..8d17d68 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/busi/controller/BusiNoticeController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/busi/controller/BusiNoticeController.java @@ -6,7 +6,7 @@ import java.util.List; import javax.servlet.http.HttpServletResponse; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.ruoyi.query.BusiNoticeQuery; +import com.ruoyi.busi.query.BusiNoticeQuery; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -25,7 +25,6 @@ import com.ruoyi.common.enums.BusinessType; import com.ruoyi.busi.domain.BusiNotice; import com.ruoyi.busi.service.IBusiNoticeService; import com.ruoyi.common.utils.poi.ExcelUtil; -import com.ruoyi.common.core.page.TableDataInfo; /** * 通告Controller @@ -112,6 +111,29 @@ public class BusiNoticeController extends BaseController return toAjax(busiNoticeService.removeByIds(list)); } + /** + * 发布或下架通告 + * noticeId 通告主键 + * publishTakeDown 1发布0下架 + */ + @PreAuthorize("@ss.hasPermi('busi:notice:edit')") + @PostMapping("/publishTakeDown") + public AjaxResult publishTakeDown(@RequestParam("noticeId") String noticeId,@RequestParam("publishTakeDown") String publishTakeDown) + { + busiNoticeService.publishTakeDown(noticeId,publishTakeDown); + return success(); + } + /** + * 审核接口 + * BusiNoticeQuery 审核参数 + */ + @PreAuthorize("@ss.hasPermi('busi:notice:edit')") + @PostMapping("/auditInfo") + public AjaxResult auditInfo(@RequestBody BusiNoticeQuery query) + { + busiNoticeService.auditInfo(query); + return success(); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/busi/domain/BusiNotice.java b/ruoyi-admin/src/main/java/com/ruoyi/busi/domain/BusiNotice.java index caa33c5..3ba6663 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/busi/domain/BusiNotice.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/busi/domain/BusiNotice.java @@ -154,5 +154,9 @@ public class BusiNotice extends DlBaseEntity /** 审核备注 */ @Excel(name = "审核备注") private String approvalRemark; + /** + * 对比后相似的通告id 逗号隔开 + */ + private String similarityIds; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/busi/mapper/BusiNoticeMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/busi/mapper/BusiNoticeMapper.java index d50d7d2..89d314b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/busi/mapper/BusiNoticeMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/busi/mapper/BusiNoticeMapper.java @@ -5,6 +5,7 @@ import java.util.List; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.busi.domain.BusiNotice; +import com.ruoyi.busi.query.BusiNoticeQuery; import com.ruoyi.busi.vo.BusiNoticeVo; import com.ruoyi.query.BusiNoticeQuery; import org.apache.ibatis.annotations.Param; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/query/BusiNoticeQuery.java b/ruoyi-admin/src/main/java/com/ruoyi/busi/query/BusiNoticeQuery.java similarity index 89% rename from ruoyi-admin/src/main/java/com/ruoyi/query/BusiNoticeQuery.java rename to ruoyi-admin/src/main/java/com/ruoyi/busi/query/BusiNoticeQuery.java index d6ea620..26088f6 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/query/BusiNoticeQuery.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/busi/query/BusiNoticeQuery.java @@ -1,4 +1,4 @@ -package com.ruoyi.query; +package com.ruoyi.busi.query; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.annotation.TableField; @@ -11,6 +11,7 @@ import java.util.Date; @Data public class BusiNoticeQuery { + private String id; /**发布者名称**/ private String userNickName; /** 标题 */ @@ -31,6 +32,8 @@ public class BusiNoticeQuery { private Integer isUseCoupon; /** 审核状态 */ private String approvalStatus; + //审核备注 + private String approvalRemark; private String bloggerTypes; /** 查询条件 */ private JSONObject params =new JSONObject(); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/busi/service/IBusiNoticeService.java b/ruoyi-admin/src/main/java/com/ruoyi/busi/service/IBusiNoticeService.java index 5b02871..1f32d60 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/busi/service/IBusiNoticeService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/busi/service/IBusiNoticeService.java @@ -1,12 +1,13 @@ package com.ruoyi.busi.service; -import java.util.List; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.busi.domain.BusiNotice; +import com.ruoyi.busi.query.BusiNoticeQuery; import com.ruoyi.busi.vo.BusiNoticeVo; -import com.ruoyi.query.BusiNoticeQuery; + +import java.util.List; /** * 通告Service接口 @@ -35,6 +36,27 @@ public interface IBusiNoticeService extends IService **/ List queryListByUserId(Long userId); + /** + * 列表查询 + * @param query 查询参数 + * @param page 分页参数 + */ IPage queryListPage(BusiNoticeQuery query, Page page); + /** + * 保存 + * @param data 保存参数 + */ void saveVo(BusiNotice data); + /** + * 发布或者下架 + * @param noticeId 通告主键 + * @param publishTakeDown 1发布0下架 + */ + void publishTakeDown(String noticeId, String publishTakeDown); + + /** + * 审核接口 + * @param query 审核参数 + */ + void auditInfo(BusiNoticeQuery query); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiNoticeServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiNoticeServiceImpl.java index b790921..4728e35 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiNoticeServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiNoticeServiceImpl.java @@ -1,16 +1,22 @@ package com.ruoyi.busi.service.impl; +import java.util.Date; import java.util.List; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.ruoyi.busi.vo.BusiNoticeVo; import com.ruoyi.common.core.domain.DlBaseEntity; -import com.ruoyi.common.utils.DateUtils; +import java.util.Optional; + +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ruoyi.busi.utils.JaccardSimilarity; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.utils.SecurityUtils; -import com.ruoyi.query.BusiNoticeQuery; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.busi.query.BusiNoticeQuery; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -35,11 +41,42 @@ public class BusiNoticeServiceImpl extends ServiceImpl queryWrapper =new LambdaQueryWrapper<>(); + queryWrapper.gt(BusiNotice::getEndDate, DateUtil.format(new Date(),"yyyy-MM-dd")).eq(BusiNotice::getApprovalStatus,1); + List list = this.list(queryWrapper); + //无问题数据直接审核通过 + data.setApprovalStatus("1"); + //遍历 list的每条数据与data对比,如果两条数据相似度大于70% 提出预警 + for (BusiNotice busiNotice : list) { + double v1 = JaccardSimilarity.computeJaccardSimilarity(data.getTitle(), busiNotice.getTitle()); + double v2 = JaccardSimilarity.computeJaccardSimilarity(data.getDetail(), busiNotice.getDetail()); + if (v1>=0.7&&v2>=0.7){ + //title 和 detail 相似度大于70% 待审核 + data.setApprovalStatus("0"); + data.setSimilarityIds(Optional.ofNullable(data.getSimilarityIds()).orElse("")+busiNotice.getId()+","); + } + } + if (StringUtils.isNotEmpty(data.getSimilarityIds())){ + //删除结尾的最后一个逗号 + data.setSimilarityIds(data.getSimilarityIds().substring(0, data.getSimilarityIds().length() - 1)); + } + this.save(data); + } + } /** @@ -71,4 +108,49 @@ public class BusiNoticeServiceImpl extends ServiceImpl queryListByUserId(Long userId) { return busiNoticeMapper.queryListByUserId(userId); } + /** + * 发布或者下架 + * @param noticeId 通告主键 + * @param publishTakeDown 1发布0下架 + */ + @Override + public void publishTakeDown(String noticeId, String publishTakeDown) { + BusiNotice data = this.getById(noticeId); + if (publishTakeDown.equals("1")){ + //如果是发布 + //判断 内容重复度 是否大于70% + //先获取 当前系统中截止日期之前的 + LambdaQueryWrapper queryWrapper =new LambdaQueryWrapper<>(); + queryWrapper.gt(BusiNotice::getEndDate, DateUtil.format(new Date(),"yyyy-MM-dd")).eq(BusiNotice::getApprovalStatus,1); + List list = this.list(queryWrapper); + //无问题数据直接审核通过 + data.setApprovalStatus("1"); + //遍历 list的每条数据与data对比,如果两条数据相似度大于70% 提出预警 + for (BusiNotice busiNotice : list) { + double v1 = JaccardSimilarity.computeJaccardSimilarity(data.getTitle(), busiNotice.getTitle()); + double v2 = JaccardSimilarity.computeJaccardSimilarity(data.getDetail(), busiNotice.getDetail()); + if (v1>=0.7&&v2>=0.7){ + //title 和 detail 相似度大于70% 待审核 + data.setApprovalStatus("0"); + data.setSimilarityIds(Optional.ofNullable(data.getSimilarityIds()).orElse("")+busiNotice.getId()+","); + } + } + if (StringUtils.isNotEmpty(data.getSimilarityIds())){ + //删除结尾的最后一个逗号 + data.setSimilarityIds(data.getSimilarityIds().substring(0, data.getSimilarityIds().length() - 1)); + } + + }else { + //如果是下架 回归草稿状态 + data.setApprovalStatus("8"); + } + this.updateById(data); + } + + @Override + public void auditInfo(BusiNoticeQuery query) { + + } + + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/busi/utils/JaccardSimilarity.java b/ruoyi-admin/src/main/java/com/ruoyi/busi/utils/JaccardSimilarity.java new file mode 100644 index 0000000..95bd98a --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/busi/utils/JaccardSimilarity.java @@ -0,0 +1,25 @@ +package com.ruoyi.busi.utils; +import java.util.HashSet; +import java.util.Set; +import java.util.Arrays; +import java.util.stream.Collectors; +/** + * 文本相似度对比 + * @author 朱春云 + * @version 1.0 + */ +public class JaccardSimilarity { + public static double computeJaccardSimilarity(String str1, String str2) { + Set set1 = Arrays.stream(str1.split("\\s+")) // 分词,这里按空格分割,可以根据需要调整正则表达式 + .collect(Collectors.toSet()); + Set set2 = Arrays.stream(str2.split("\\s+")) // 分词,这里按空格分割,可以根据需要调整正则表达式 + .collect(Collectors.toSet()); + + Set intersection = new HashSet<>(set1); + intersection.retainAll(set2); // 取交集 + Set union = new HashSet<>(set1); + union.addAll(set2); // 取并集 + union.removeAll(intersection); // 从并集中移除交集部分(因为我们只计算交集的元素) + return (double) intersection.size() / union.size(); // 返回相似度比例 + } +}