From 20b3b1a91bb9d7daf7bbf242b8f6aeae2be6b491 Mon Sep 17 00:00:00 2001
From: luodangjia <luodangjia>
Date: 星期四, 21 十一月 2024 14:38:19 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-api/ruoyi-api-other/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports |   11 -
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/weChat/WeChatUtil.java                                       |  203 ++++++++++++++++++
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/weChat/WxPKCS7Encoder.java                                   |   63 +++++
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/IAgreementService.java                                        |   11 +
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/AgreementServiceImpl.java                                |   15 
 ruoyi-service/ruoyi-other/src/main/resources/mapper/other/AgreementMapper.xml                                                 |    5 
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/model/Agreement.java                                              |   38 +++
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/weChat/AES.java                                              |   72 ++++++
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/AppletLogin.java                                               |   20 +
 ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml                                                                    |  104 ++++----
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/AgreementController.java                                   |   41 ++
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/AgreementMapper.java                                           |   11 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/weChat/WXCore.java                                           |   48 ++++
 13 files changed, 551 insertions(+), 91 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/model/Agreement.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/model/Agreement.java
new file mode 100644
index 0000000..84c98da
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/model/Agreement.java
@@ -0,0 +1,38 @@
+package com.ruoyi.other.api.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/** 协议
+ * @author zhibing.pu
+ * @Date 2024/11/21 10:44
+ */
+@Data
+@TableName("t_agreement")
+public class Agreement {
+	/**
+	 * 主键
+	 */
+	@TableId(value = "id", type = IdType.AUTO)
+	private Integer id;
+	/**
+	 * 类型(1=用户协议,2=隐私协议,3=技师上门免责声明,4=注销协议,5门店提现免责声明)
+	 */
+	@TableField("type")
+	private Integer type;
+	/**
+	 * 协议内容
+	 */
+	@TableField("content")
+	private String content;
+	/**
+	 * 添加时间
+	 */
+	@TableField("create_time")
+	private LocalDateTime createTime;
+}
diff --git a/ruoyi-api/ruoyi-api-other/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-api/ruoyi-api-other/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 1d2b67a..e69de29 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/ruoyi-api/ruoyi-api-other/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1,11 +0,0 @@
-com.ruoyi.other.api.factory.OtherFallbackFactory
-com.ruoyi.other.api.factory.UserSiteFallbackFactory
-com.ruoyi.other.api.factory.RoleSiteFallbackFactory
-com.ruoyi.other.api.factory.TEvaluationTagFallbackFactory
-com.ruoyi.other.api.factory.VipFallbackFactory
-com.ruoyi.other.api.factory.IntegralRuleFallbackFactory
-com.ruoyi.other.api.factory.GoodsFallbackFactory
-com.ruoyi.other.api.factory.CouponFallbackFactory
-com.ruoyi.other.api.factory.InvoiceTypeFallbackFactory
-com.ruoyi.other.api.factory.WebSocketFallbackFactory
-com.ruoyi.other.api.factory.UserTagFallbackFactory
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/weChat/AES.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/weChat/AES.java
new file mode 100644
index 0000000..ecfd2f0
--- /dev/null
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/weChat/AES.java
@@ -0,0 +1,72 @@
+package com.ruoyi.account.util.weChat;
+
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+
+import javax.crypto.BadPaddingException;
+import javax.crypto.Cipher;
+import javax.crypto.IllegalBlockSizeException;
+import javax.crypto.NoSuchPaddingException;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.security.*;
+
+/**
+* AES加密
+* @author pzb
+* @Date 2021/12/3 15:43
+*/
+public class AES {
+
+    public static boolean initialized = false;
+
+    /**
+     * AES解密
+     *
+     * @param content
+     *            密文
+     * @return
+     * @throws InvalidAlgorithmParameterException
+     * @throws NoSuchProviderException
+     */
+    public byte[] decrypt(byte[] content, byte[] keyByte, byte[] ivByte) throws InvalidAlgorithmParameterException {
+        initialize();
+        try {
+            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
+            Key sKeySpec = new SecretKeySpec(keyByte, "AES");
+            cipher.init(Cipher.DECRYPT_MODE, sKeySpec, generateIV(ivByte));// 初始化
+            byte[] result = cipher.doFinal(content);
+            return result;
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+        } catch (NoSuchPaddingException e) {
+            e.printStackTrace();
+        } catch (InvalidKeyException e) {
+            e.printStackTrace();
+        } catch (IllegalBlockSizeException e) {
+            e.printStackTrace();
+        } catch (BadPaddingException e) {
+            e.printStackTrace();
+        } catch (NoSuchProviderException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public static void initialize() {
+        if (initialized)
+            return;
+        Security.addProvider(new BouncyCastleProvider());
+        initialized = true;
+    }
+
+    // 生成iv
+    public static AlgorithmParameters generateIV(byte[] iv) throws Exception {
+        AlgorithmParameters params = AlgorithmParameters.getInstance("AES");
+        params.init(new IvParameterSpec(iv));
+        return params;
+    }
+}
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/weChat/WXCore.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/weChat/WXCore.java
new file mode 100644
index 0000000..3b1dc3c
--- /dev/null
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/weChat/WXCore.java
@@ -0,0 +1,48 @@
+package com.ruoyi.account.util.weChat;
+
+import org.apache.commons.codec.binary.Base64;
+import org.springframework.beans.factory.annotation.Value;
+
+public class WXCore {
+
+    private static final String WATERMARK = "watermark";
+
+    @Value("${wx.appletsAppid}")
+    private static String appid ;
+
+
+
+    /**
+     * 解密数据
+     * @return
+     * @throws Exception
+     */
+    public static String decrypt(String encryptedData, String sessionKey, String iv){
+        String result = "";
+        try {
+            AES aes = new AES();
+            byte[] resultByte = aes.decrypt(Base64.decodeBase64(encryptedData), Base64.decodeBase64(sessionKey), Base64.decodeBase64(iv));
+            if(null != resultByte && resultByte.length > 0){
+                result = new String(WxPKCS7Encoder.decode(resultByte), "UTF-8");
+//                JSONObject jsonObject = JSON.parseObject(result);
+//                String decryptAppid = jsonObject.getJSONObject(WATERMARK).getString("appid");
+//                if(!appid.equals(decryptAppid)){
+//                    result = "";
+//                }
+            }
+        } catch (Exception e) {
+            result = "";
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+
+    public static void main(String[] args) throws Exception{
+        String appId = "wx4f4bc4dec97d474b";
+        String encryptedData = "CiyLU1Aw2KjvrjMdj8YKliAjtP4gsMZMQmRzooG2xrDcvSnxIMXFufNstNGTyaGS9uT5geRa0W4oTOb1WT7fJlAC+oNPdbB+3hVbJSRgv+4lGOETKUQz6OYStslQ142dNCuabNPGBzlooOmB231qMM85d2/fV6ChevvXvQP8Hkue1poOFtnEtpyxVLW1zAo6/1Xx1COxFvrc2d7UL/lmHInNlxuacJXwu0fjpXfz/YqYzBIBzD6WUfTIF9GRHpOn/Hz7saL8xz+W//FRAUid1OksQaQx4CMs8LOddcQhULW4ucetDf96JcR3g0gfRK4PC7E/r7Z6xNrXd2UIeorGj5Ef7b1pJAYB6Y5anaHqZ9J6nKEBvB4DnNLIVWSgARns/8wR2SiRS7MNACwTyrGvt9ts8p12PKFdlqYTopNHR1Vf7XjfhQlVsAJdNiKdYmYVoKlaRv85IfVunYzO0IKXsyl7JCUjCpoG20f0a04COwfneQAGGwd5oa+T8yO5hzuyDb/XcxxmK01EpqOyuxINew==";
+        String sessionKey = "tiihtNczf5v6AKRyjwEUhQ==";
+        String iv = "r7BXXKkLb8qrSNn05n0qiA==";
+        System.out.println(decrypt(encryptedData, sessionKey, iv));
+    }
+}
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/weChat/WeChatUtil.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/weChat/WeChatUtil.java
new file mode 100644
index 0000000..7322624
--- /dev/null
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/weChat/WeChatUtil.java
@@ -0,0 +1,203 @@
+package com.ruoyi.account.util.weChat;
+
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 微信工具类
+ */
+@Slf4j
+@Component
+public class WeChatUtil {
+
+    @Value("${wx.appletsAppid}")
+    private String wxAppletsAppid;
+
+    @Value("${wx.appletsAppSecret}")
+    private String wxAppletsAppSecret;
+
+    @Value("{wx.officialAccountAppSecret}")
+    private String officialAccountAppSecret;
+
+    @Value("${wx.appid}")
+    private String webAppId;
+
+    @Value("${wx.appSecret}")
+    private String webAppSecret;
+
+
+    /**
+     * 小程序使用jscode获取openid
+     * @param jscode
+     * @return
+     */
+    public Map<String, Object> code2Session(String jscode) throws Exception{
+        String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + wxAppletsAppid + "&secret=" + wxAppletsAppSecret
+                + "&js_code=" + jscode + "&grant_type=authorization_code";
+        HttpRequest get = HttpUtil.createGet(url);
+        HttpResponse response = get.execute();
+        int status = response.getStatus();
+        if(200 != status){
+            throw new RuntimeException(response.body());
+        }
+        JSONObject jsonObject = JSON.parseObject(response.body());
+        int errcode = jsonObject.getIntValue("errcode");
+        Map<String, Object> map = new HashMap<>();
+        map.put("errcode", errcode);
+        if(errcode == 0){//成功
+            map.put("openid", jsonObject.getString("openid"));
+            map.put("sessionKey", jsonObject.getString("session_key"));
+            map.put("unionid", jsonObject.getString("unionid"));
+            return map;
+        }
+        if(errcode == -1){//系统繁忙,此时请开发者稍候再试
+            map.put("msg", jsonObject.getString("errmsg"));
+            return map;
+        }
+        if(errcode == 40029){//code 无效
+            map.put("msg", jsonObject.getString("errmsg"));
+            return map;
+        }
+        if(errcode == 45011){//频率限制,每个用户每分钟100次
+            map.put("msg", jsonObject.getString("errmsg"));
+            return map;
+        }
+        return null;
+    }
+
+
+    /**
+     * 获取微信小程序token
+     * @return
+     */
+    public String getWxAppletsAccessToken() throws Exception{
+        String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + wxAppletsAppid + "&secret=" + wxAppletsAppSecret;
+        HttpRequest get = HttpUtil.createGet(url);
+        HttpResponse response = get.execute();
+        if(response.getStatus() != 200){
+            return "";
+        }
+        JSONObject jsonObject = JSON.parseObject(response.body());
+        return jsonObject.getString("access_token");
+    }
+
+
+    /**
+     * 网站应用登录
+     * @param code
+     * @return
+     */
+    public Map<String, String> webAccessToken(String code) throws Exception{
+        String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + webAppId + "&secret=" + webAppSecret + "&code=" + code + "&grant_type=authorization_code";
+        HttpRequest get = HttpUtil.createGet(url);
+        HttpResponse response = get.execute();
+        if(response.getStatus() != 200){
+            return null;
+        }
+        JSONObject jsonObject = JSON.parseObject(response.body());
+        int errcode = jsonObject.getIntValue("errcode");
+        Map<String, String> map = new HashMap<>();
+        if(errcode == 0){//成功
+            map.put("access_token", jsonObject.getString("access_token"));
+            map.put("openid", jsonObject.getString("openid"));
+            map.put("refresh_token", jsonObject.getString("refresh_token"));
+            map.put("unionid", jsonObject.getString("unionid"));
+            return map;
+        }
+        if(errcode == -1){//系统繁忙,此时请开发者稍候再试
+            map.put("msg", jsonObject.getString("errmsg"));
+            return map;
+        }
+        if(errcode == 40029){//code 无效
+            map.put("msg", jsonObject.getString("errmsg"));
+            return map;
+        }
+        if(errcode == 45011){//频率限制,每个用户每分钟100次
+            map.put("msg", jsonObject.getString("errmsg"));
+            return map;
+        }
+        return map;
+    }
+
+
+    /**
+     * 获取微信个人信息
+     * @param access_token
+     * @param openid
+     * @return
+     */
+    public Map<String, Object> getUserInfo(String access_token, String openid) throws Exception{
+        String url = "https://api.weixin.qq.com/sns/userinfo?access_token=" + access_token + "&openid=" + openid;
+        HttpRequest get = HttpUtil.createGet(url);
+        HttpResponse response = get.execute();
+        if(response.getStatus() != 200){
+            return null;
+        }
+        JSONObject jsonObject = JSON.parseObject(response.body());
+        int errcode = jsonObject.getIntValue("errcode");
+        Map<String, Object> map = new HashMap<>();
+        if(errcode == 0){//成功
+            map.put("nickname", jsonObject.getString("nickname"));
+            map.put("openid", jsonObject.getString("openid"));
+            map.put("sex", jsonObject.getString("sex"));
+            map.put("headimgurl", jsonObject.getString("headimgurl"));
+            return map;
+        }
+        if(errcode == -1){//系统繁忙,此时请开发者稍候再试
+            map.put("msg", jsonObject.getString("errmsg"));
+            return map;
+        }
+        if(errcode == 40029){//code 无效
+            map.put("msg", jsonObject.getString("errmsg"));
+            return map;
+        }
+        if(errcode == 45011){//频率限制,每个用户每分钟100次
+            map.put("msg", jsonObject.getString("errmsg"));
+            return map;
+        }
+        return map;
+    }
+
+    
+
+
+//    /**
+//     * 获取小程序二维码
+//     * @param page      跳转页 例如 pages/index/index
+//     * @param scene     参数 a=1&b=2
+//     */
+//    public InputStream getwxacodeunlimit(String page, String scene){
+//        try {
+//            String token = getWxAppletsAccessToken();
+//            if(StringUtils.isEmpty(token)){
+//                System.err.println("获取接口调用凭证失败");
+//            }
+//            String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + token;
+//            Map<String, Object> param = new HashMap<>();
+//            param.put("scene", scene);
+//            param.put("page", page);
+//            HttpHeaders httpHeaders = new HttpHeaders();
+//            MediaType type=MediaType.parseMediaType("application/json;charset=UTF-8");
+//            httpHeaders.setContentType(type);
+//            HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(param, httpHeaders);
+//            ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class, new Object[0]);
+//            String body1 = exchange.getBody();
+////            System.err.println(body1);
+//            ResponseEntity<byte[]> entity  = restTemplate.exchange(url, HttpMethod.POST, requestEntity, byte[].class, new Object[0]);
+//            byte[] body = entity.getBody();
+////            System.err.println(Base64.encodeBase64String(body));
+//            return new ByteArrayInputStream(body);
+//        }catch (Exception e){
+//            e.printStackTrace();
+//        }
+//        return null;
+//    }
+}
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/weChat/WxPKCS7Encoder.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/weChat/WxPKCS7Encoder.java
new file mode 100644
index 0000000..3788ff8
--- /dev/null
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/weChat/WxPKCS7Encoder.java
@@ -0,0 +1,63 @@
+package com.ruoyi.account.util.weChat;
+
+import java.nio.charset.Charset;
+import java.util.Arrays;
+
+/**
+* 微信小程序加解密
+* @author pzb
+* @Date 2021/12/3 15:43
+*/
+public class WxPKCS7Encoder {
+    private static final Charset CHARSET = Charset.forName("utf-8");
+    private static final int BLOCK_SIZE = 32;
+
+    /**
+     * 获得对明文进行补位填充的字节.
+     *
+     * @param count
+     *            需要进行填充补位操作的明文字节个数
+     * @return 补齐用的字节数组
+     */
+    public static byte[] encode(int count) {
+        // 计算需要填充的位数
+        int amountToPad = BLOCK_SIZE - (count % BLOCK_SIZE);
+        if (amountToPad == 0) {
+            amountToPad = BLOCK_SIZE;
+        }
+        // 获得补位所用的字符
+        char padChr = chr(amountToPad);
+        String tmp = new String();
+        for (int index = 0; index < amountToPad; index++) {
+            tmp += padChr;
+        }
+        return tmp.getBytes(CHARSET);
+    }
+
+    /**
+     * 删除解密后明文的补位字符
+     *
+     * @param decrypted
+     *            解密后的明文
+     * @return 删除补位字符后的明文
+     */
+    public static byte[] decode(byte[] decrypted) {
+        int pad = decrypted[decrypted.length - 1];
+        if (pad < 1 || pad > 32) {
+            pad = 0;
+        }
+        return Arrays.copyOfRange(decrypted, 0, decrypted.length - pad);
+    }
+
+    /**
+     * 将数字转化成ASCII码对应的字符,用于对明文进行补码
+     *
+     * @param a
+     *            需要转化的数字
+     * @return 转化得到的字符
+     */
+    public static char chr(int a) {
+        byte target = (byte) (a & 0xFF);
+        return (char) target;
+    }
+}
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/AppletLogin.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/AppletLogin.java
new file mode 100644
index 0000000..0c53922
--- /dev/null
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/AppletLogin.java
@@ -0,0 +1,20 @@
+package com.ruoyi.account.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/11/21 11:40
+ */
+@Data
+@ApiModel
+public class AppletLogin {
+	@ApiModelProperty(value = "微信jscode", required = true)
+	private String jscode;
+	@ApiModelProperty(value = "手机号加密数据", required = true)
+	private String encryptedData_phone;
+	@ApiModelProperty(value = "加密算法的初始向量", required = true)
+	private String iv_phone;
+}
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/AgreementController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/AgreementController.java
index 66cca28..d6d43c6 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/AgreementController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/AgreementController.java
@@ -1,20 +1,41 @@
 package com.ruoyi.other.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.other.api.model.Agreement;
+import com.ruoyi.other.service.IAgreementService;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
 
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import javax.annotation.Resource;
 
 /**
- * <p>
- *  前端控制器
- * </p>
- *
- * @author luodangjia
- * @since 2024-11-20
+ * @author zhibing.pu
+ * @Date 2024/11/21 10:48
  */
 @RestController
 @RequestMapping("/agreement")
 public class AgreementController {
-
+	
+	@Resource
+	private IAgreementService agreementService;
+	
+	
+	/**
+	 * 获取协议详情
+	 * @param type
+	 * @return
+	 */
+	@ResponseBody
+	@GetMapping("/getAgreement/{type}")
+	@ApiOperation(value = "获取协议", tags = {"小程序-登录注册"})
+	@ApiImplicitParams({
+			@ApiImplicitParam(value = "类型(1=用户协议,2=隐私协议,3=技师上门免责声明,4=注销协议,5门店提现免责声明)", name = "type", required = true, dataType = "int"),
+	})
+	public AjaxResult<String> getAgreement(@PathVariable("type") Integer type){
+		Agreement one = agreementService.getOne(new LambdaQueryWrapper<Agreement>().eq(Agreement::getType, type));
+		return AjaxResult.success(null == one ? "" : one.getContent());
+	}
 }
-
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/AgreementMapper.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/AgreementMapper.java
index 6bc26da..862d725 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/AgreementMapper.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/AgreementMapper.java
@@ -1,16 +1,11 @@
 package com.ruoyi.other.mapper;
 
-import com.ruoyi.other.api.domain.Agreement;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.other.api.model.Agreement;
 
 /**
- * <p>
- *  Mapper 接口
- * </p>
- *
- * @author luodangjia
- * @since 2024-11-20
+ * @author zhibing.pu
+ * @Date 2024/11/21 10:46
  */
 public interface AgreementMapper extends BaseMapper<Agreement> {
-
 }
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/IAgreementService.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/IAgreementService.java
new file mode 100644
index 0000000..efbe659
--- /dev/null
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/IAgreementService.java
@@ -0,0 +1,11 @@
+package com.ruoyi.other.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.other.api.model.Agreement;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/11/21 10:46
+ */
+public interface IAgreementService extends IService<Agreement> {
+}
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/AgreementServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/AgreementServiceImpl.java
index b3a3887..75ad805 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/AgreementServiceImpl.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/AgreementServiceImpl.java
@@ -1,20 +1,15 @@
 package com.ruoyi.other.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.other.api.model.Agreement;
 import com.ruoyi.other.mapper.AgreementMapper;
-import com.ruoyi.other.api.domain.Agreement;
-import com.ruoyi.other.service.AgreementService;
+import com.ruoyi.other.service.IAgreementService;
 import org.springframework.stereotype.Service;
 
 /**
- * <p>
- *  服务实现类
- * </p>
- *
- * @author luodangjia
- * @since 2024-11-20
+ * @author zhibing.pu
+ * @Date 2024/11/21 10:48
  */
 @Service
-public class AgreementServiceImpl extends ServiceImpl<AgreementMapper, Agreement> implements AgreementService {
-
+public class AgreementServiceImpl extends ServiceImpl<AgreementMapper, Agreement> implements IAgreementService {
 }
diff --git a/ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml
index 708311f..4a30605 100644
--- a/ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml
+++ b/ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml
@@ -43,69 +43,69 @@
         shared-configs:
           - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
 ---
-seata:
-  enabled: true
-  application-id: ${spring.application.name}
-  tx-service-group: seata_tx_group    #此处配置自定义的seata事务分组名称
-  enable-auto-data-source-proxy: false    #关闭数据库代理
-  service:
-    vgroup-mapping:
-      seata_tx_group: default
-  data-source-proxy-mode: AT
-  config:
-    type: nacos
-    nacos:
-      # 开发环境
-      server-addr: 127.0.0.1:8848
-      namespace: cdf47c5f-2bf9-4dec-a616-a8dc653aceb9
-      group: DEFAULT_GROUP
-      data-id: seata-server.properties
-      username: nacos
-      password: nacos
-      # 生产环境
-#      server-addr: 192.168.0.137:8848,192.168.0.123:8848
-#      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+#seata:
+#  enabled: true
+#  application-id: ${spring.application.name}
+#  tx-service-group: seata_tx_group    #此处配置自定义的seata事务分组名称
+#  enable-auto-data-source-proxy: false    #关闭数据库代理
+#  service:
+#    vgroup-mapping:
+#      seata_tx_group: default
+#  data-source-proxy-mode: AT
+#  config:
+#    type: nacos
+#    nacos:
+#      # 开发环境
+#      server-addr: 127.0.0.1:8848
+#      namespace: cdf47c5f-2bf9-4dec-a616-a8dc653aceb9
 #      group: DEFAULT_GROUP
 #      data-id: seata-server.properties
 #      username: nacos
 #      password: nacos
-  registry:
-    type: nacos
-    nacos:
-      application: seata-server
-      # 开发环境
-      server-addr: 127.0.0.1:8848
-      namespace: cdf47c5f-2bf9-4dec-a616-a8dc653aceb9
-      group: DEFAULT_GROUP
-      username: nacos
-      password: nacos
-      # 生产环境
-#      server-addr: 192.168.0.137:8848,192.168.0.123:8848
-#      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+#      # 生产环境
+##      server-addr: 192.168.0.137:8848,192.168.0.123:8848
+##      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+##      group: DEFAULT_GROUP
+##      data-id: seata-server.properties
+##      username: nacos
+##      password: nacos
+#  registry:
+#    type: nacos
+#    nacos:
+#      application: seata-server
+#      # 开发环境
+#      server-addr: 127.0.0.1:8848
+#      namespace: cdf47c5f-2bf9-4dec-a616-a8dc653aceb9
 #      group: DEFAULT_GROUP
 #      username: nacos
 #      password: nacos
-  cloud:
-    nacos:
-      discovery:
-        # 开发环境
-        server-addr: 127.0.0.1:8848 # nacos注册中心地址
-        namespace: cdf47c5f-2bf9-4dec-a616-a8dc653aceb9 # 命名空间
-        group: DEFAULT_GROUP
-        application: seata-server #Nacos 中 Seata 名称
-        username: nacos
-        password: nacos
-        # 生产环境
-#        server-addr: 192.168.0.137:8848,192.168.0.123:8848
-#        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+#      # 生产环境
+##      server-addr: 192.168.0.137:8848,192.168.0.123:8848
+##      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+##      group: DEFAULT_GROUP
+##      username: nacos
+##      password: nacos
+#  cloud:
+#    nacos:
+#      discovery:
+#        # 开发环境
+#        server-addr: 127.0.0.1:8848 # nacos注册中心地址
+#        namespace: cdf47c5f-2bf9-4dec-a616-a8dc653aceb9 # 命名空间
 #        group: DEFAULT_GROUP
 #        application: seata-server #Nacos 中 Seata 名称
 #        username: nacos
 #        password: nacos
-    sentinel:
-      transport:
-        dashboard: 127.0.0.1:8080  #  Sentinel控制台地址
-      eager: true
+#        # 生产环境
+##        server-addr: 192.168.0.137:8848,192.168.0.123:8848
+##        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+##        group: DEFAULT_GROUP
+##        application: seata-server #Nacos 中 Seata 名称
+##        username: nacos
+##        password: nacos
+#    sentinel:
+#      transport:
+#        dashboard: 127.0.0.1:8080  #  Sentinel控制台地址
+#      eager: true
 ---
 spring:
   config:
diff --git a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/AgreementMapper.xml b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/AgreementMapper.xml
new file mode 100644
index 0000000..9da20bc
--- /dev/null
+++ b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/AgreementMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.other.mapper.AgreementMapper">
+
+</mapper>
\ No newline at end of file

--
Gitblit v1.7.1