From fbd122c7f2ee406903329c544564f95f1ef39b8e Mon Sep 17 00:00:00 2001 From: zk Date: Fri, 15 May 2026 15:06:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8D=8F=E8=AE=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AgreementController.java | 27 +++++++ .../org/jiayunet/mapper/AgreementMapper.java | 14 ++++ .../java/org/jiayunet/pojo/po/Agreement.java | 56 ++++++++++++++ .../org/jiayunet/pojo/vo/AgreementListVo.java | 20 +++++ .../jiayunet/service/AgreementService.java | 74 +++++++++++++++++++ 5 files changed, 191 insertions(+) create mode 100644 manager/src/main/java/org/jiayunet/controller/AgreementController.java create mode 100644 manager/src/main/java/org/jiayunet/mapper/AgreementMapper.java create mode 100644 manager/src/main/java/org/jiayunet/pojo/po/Agreement.java create mode 100644 manager/src/main/java/org/jiayunet/pojo/vo/AgreementListVo.java create mode 100644 manager/src/main/java/org/jiayunet/service/AgreementService.java diff --git a/manager/src/main/java/org/jiayunet/controller/AgreementController.java b/manager/src/main/java/org/jiayunet/controller/AgreementController.java new file mode 100644 index 0000000..5bfff3e --- /dev/null +++ b/manager/src/main/java/org/jiayunet/controller/AgreementController.java @@ -0,0 +1,27 @@ +package org.jiayunet.controller; + +import lombok.AllArgsConstructor; +import org.jiayunet.pojo.po.Agreement; +import org.jiayunet.service.AgreementService; +import org.springframework.web.bind.annotation.*; + +/** + * 协议接口 + * + * @author zk + */ +@RestController +@RequestMapping("/public/agreement") +@AllArgsConstructor +public class AgreementController { + + private final AgreementService agreementService; + + /** + * 根据协议码查询最新启用版本的协议 + */ + @GetMapping + public Agreement getByCode(@RequestParam String code) { + return agreementService.getByCode(code); + } +} diff --git a/manager/src/main/java/org/jiayunet/mapper/AgreementMapper.java b/manager/src/main/java/org/jiayunet/mapper/AgreementMapper.java new file mode 100644 index 0000000..4c892d7 --- /dev/null +++ b/manager/src/main/java/org/jiayunet/mapper/AgreementMapper.java @@ -0,0 +1,14 @@ +package org.jiayunet.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.jiayunet.pojo.po.Agreement; + +/** + * 协议Mapper + * + * @author zk + */ +@Mapper +public interface AgreementMapper extends CommonMapper { + +} diff --git a/manager/src/main/java/org/jiayunet/pojo/po/Agreement.java b/manager/src/main/java/org/jiayunet/pojo/po/Agreement.java new file mode 100644 index 0000000..9fb42b7 --- /dev/null +++ b/manager/src/main/java/org/jiayunet/pojo/po/Agreement.java @@ -0,0 +1,56 @@ +package org.jiayunet.pojo.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.Instant; + +/** + * 协议表 + * + * @author zk + */ +@Data +@TableName(value = "bg_agreement") +public class Agreement { + + @TableId(type = IdType.ASSIGN_ID) + private Long id; + + /** + * 协议码,唯一标识一类协议,如 user_service / privacy_policy + */ + private String agreementCode; + + /** + * 修改版本,每次修改+1,查询按此字段倒序 + */ + private Integer version; + + /** + * 协议名称 + */ + private String agreementName; + + /** + * 协议内容(富文本) + */ + private String content; + + /** + * 状态 1=启用 0=禁用 + */ + private Integer status; + + /** + * 创建时间 + */ + private Instant createTime; + + /** + * 修改时间 + */ + private Instant updateTime; +} diff --git a/manager/src/main/java/org/jiayunet/pojo/vo/AgreementListVo.java b/manager/src/main/java/org/jiayunet/pojo/vo/AgreementListVo.java new file mode 100644 index 0000000..9303e6c --- /dev/null +++ b/manager/src/main/java/org/jiayunet/pojo/vo/AgreementListVo.java @@ -0,0 +1,20 @@ +package org.jiayunet.pojo.vo; + +import lombok.Data; + +/** + * 协议列表VO + * + * @author zk + */ +@Data +public class AgreementListVo { + /** 主键ID */ + private Long id; + /** 协议码 */ + private String agreementCode; + /** 修改版本 */ + private Integer version; + /** 协议名称 */ + private String agreementName; +} diff --git a/manager/src/main/java/org/jiayunet/service/AgreementService.java b/manager/src/main/java/org/jiayunet/service/AgreementService.java new file mode 100644 index 0000000..6ba3761 --- /dev/null +++ b/manager/src/main/java/org/jiayunet/service/AgreementService.java @@ -0,0 +1,74 @@ +package org.jiayunet.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.jiayunet.mapper.AgreementMapper; +import org.jiayunet.pojo.po.Agreement; +import org.jiayunet.pojo.vo.AgreementListVo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 协议服务 + *

主要功能:协议查询、创建/编辑(版本递增)

+ *

使用表:bg_agreement(协议存储)

+ * + * @author zk + */ +@Slf4j +@Service +public class AgreementService { + + @Autowired + private AgreementMapper agreementMapper; + + /** + * 根据协议码查询最新启用版本 + *

按version倒序取第一条,status=1

+ */ + public Agreement getByCode(String code) { + return agreementMapper.selectOne(new LambdaQueryWrapper().eq(Agreement::getAgreementCode, code).eq(Agreement::getStatus, 1).orderByDesc(Agreement::getVersion).last("LIMIT 1")); + } + + /** + * 协议列表 + *

返回所有协议,按version倒序,仅返回id、code、version、name

+ */ + public List list() { + List agreements = agreementMapper.selectList(new LambdaQueryWrapper().orderByDesc(Agreement::getVersion)); + return agreements.stream().map(a -> { + AgreementListVo vo = new AgreementListVo(); + vo.setId(a.getId()); + vo.setAgreementCode(a.getAgreementCode()); + vo.setVersion(a.getVersion()); + vo.setAgreementName(a.getAgreementName()); + return vo; + }).collect(Collectors.toList()); + } + + /** + * 创建/编辑协议 + *

1. 查询该code下最大版本 2. 不存在则创建(version=1),存在则新增记录(version=max+1)

+ */ + public void saveOrUpdate(String agreementCode, String agreementName, String content) { + Agreement latest = agreementMapper.selectOne(new LambdaQueryWrapper().eq(Agreement::getAgreementCode, agreementCode).orderByDesc(Agreement::getVersion).last("LIMIT 1")); + + Agreement agreement = new Agreement(); + agreement.setAgreementCode(agreementCode); + agreement.setAgreementName(agreementName); + agreement.setContent(content); + agreement.setStatus(1); + + if (latest == null) { + agreement.setVersion(1); + } else { + agreement.setVersion(latest.getVersion() + 1); + } + + agreementMapper.insert(agreement); + log.info("协议保存成功 code:{} version:{}", agreementCode, agreement.getVersion()); + } +}