commit e2f4e823232bb55f21f24af77b3eb930ced3dd2b
Author: 梁显优 <237809796@qq.com>
Date: Sat Nov 19 16:00:50 2022 +0800
.
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c7919df
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+/out/
+*.iml
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..e69de29
diff --git a/.idea/artifacts/z_im_jar.xml b/.idea/artifacts/z_im_jar.xml
new file mode 100644
index 0000000..074cfd6
--- /dev/null
+++ b/.idea/artifacts/z_im_jar.xml
@@ -0,0 +1,8 @@
+
+
+ $PROJECT_DIR$/out/artifacts/z_im_jar
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..a1757ae
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/lib.xml b/.idea/libraries/lib.xml
new file mode 100644
index 0000000..f0c5707
--- /dev/null
+++ b/.idea/libraries/lib.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..3d3ab27
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..657000d
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 0000000..9787561
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1668815275339
+
+
+ 1668815275339
+
+
+ 1668826741516
+
+
+
+ 1668826741516
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/conf/application.xml b/conf/application.xml
new file mode 100644
index 0000000..6f6c74e
--- /dev/null
+++ b/conf/application.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/conf/config.properties b/conf/config.properties
new file mode 100644
index 0000000..37ce8d3
--- /dev/null
+++ b/conf/config.properties
@@ -0,0 +1,2 @@
+# swear
+# swearbasepath=/opt/swear
diff --git a/conf/logging.properties b/conf/logging.properties
new file mode 100644
index 0000000..a9d6087
--- /dev/null
+++ b/conf/logging.properties
@@ -0,0 +1,16 @@
+handlers=java.util.logging.ConsoleHandler
+############################################################
+.level=FINEST
+java.level=INFO
+javax.level=INFO
+com.sun.level=INFO
+sun.level=INFO
+jdk.level=INFO
+java.util.logging.FileHandler.level=FINE
+#10M
+java.util.logging.FileHandler.limit=10485760
+java.util.logging.FileHandler.count=10000
+java.util.logging.FileHandler.encoding=UTF-8
+java.util.logging.FileHandler.pattern=${APP_HOME}/logs-%m/log-%d.log
+java.util.logging.FileHandler.append=true
+java.util.logging.ConsoleHandler.level=FINEST
diff --git a/conf/persistence.xml b/conf/persistence.xml
new file mode 100644
index 0000000..34f0677
--- /dev/null
+++ b/conf/persistence.xml
@@ -0,0 +1,15 @@
+
+
+
+
+ ALL
+
+
+
+
+
+
+
+
diff --git a/src/com/zchd/base/AppListener.java b/src/com/zchd/base/AppListener.java
new file mode 100644
index 0000000..185f4be
--- /dev/null
+++ b/src/com/zchd/base/AppListener.java
@@ -0,0 +1,32 @@
+package com.zchd.base;
+
+import com.zchd.base.util.QueueTask;
+import org.redkale.boot.Application;
+import org.redkale.boot.ApplicationListener;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.util.logging.Logger;
+
+/**
+ * 服务监听
+ *
+ * @author: liangxy.
+ */
+public class AppListener implements ApplicationListener {
+
+ private Logger logger = Logger.getLogger(this.getClass().getSimpleName());
+
+ @Resource(name = "APP_HOME")
+ protected File APP_HOME;
+
+ @Override
+ public void preStart(Application application) {
+
+ }
+
+ @Override
+ public void preShutdown(Application application) {
+ QueueTask.destroys();
+ }
+}
diff --git a/src/com/zchd/base/BaseBean.java b/src/com/zchd/base/BaseBean.java
new file mode 100644
index 0000000..797125c
--- /dev/null
+++ b/src/com/zchd/base/BaseBean.java
@@ -0,0 +1,24 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.zchd.base;
+
+import org.redkale.convert.json.JsonConvert;
+import org.redkale.service.RetResult;
+
+import java.io.Serializable;
+
+/**
+ * @author zhangjx
+ */
+public abstract class BaseBean implements Serializable {
+
+ public final static RetResult RESULT_SUCCESS = RetResult.success();
+
+ @Override
+ public String toString() {
+ return JsonConvert.root().convertTo(this);
+ }
+}
diff --git a/src/com/zchd/base/BaseService.java b/src/com/zchd/base/BaseService.java
new file mode 100644
index 0000000..5dc2f93
--- /dev/null
+++ b/src/com/zchd/base/BaseService.java
@@ -0,0 +1,52 @@
+package com.zchd.base;
+
+import com.zdemo.cachex.MyRedisCacheSource;
+import com.zdemo.zhub.ZHubClient;
+import org.redkale.convert.json.JsonConvert;
+import org.redkale.service.AbstractService;
+import org.redkale.service.RetResult;
+import org.redkale.source.DataSource;
+import org.redkale.util.Sheet;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.util.List;
+import java.util.logging.Logger;
+
+public class BaseService extends AbstractService {
+
+ protected final Logger logger = Logger.getLogger(this.getClass().getSimpleName());
+ protected final static RetResult RET_SUCCESS = RetResult.success();
+ protected final static RetResult RET_EMPTY_SHEET = RetResult.success(new Sheet<>(0, List.of()));
+ protected final static RetResult RET_EMPTY_LIST = RetResult.success(List.of());
+ protected final JsonConvert convert = JsonConvert.root();
+
+ @Resource(name = "zhub")
+ protected ZHubClient zhub;
+
+ @Resource(name = "int_cache")
+ protected MyRedisCacheSource intCache;
+
+ @Resource(name = "long_cache")
+ protected MyRedisCacheSource longCache;
+
+ @Resource(name = "str_cache")
+ protected MyRedisCacheSource strCache;
+
+ @Resource(name = "z_im")
+ protected DataSource zimSource;
+
+ @Resource(name = "APP_HOME")
+ protected File APP_HOME;
+
+ @Resource(name = "APP_NAME")
+ protected String APP_NAME = "";
+
+ protected RetResult retError(String info) {
+ return new RetResult<>(100, info);
+ }
+
+ protected RetResult retError(int code, String info) {
+ return new RetResult<>(code, info);
+ }
+}
diff --git a/src/com/zchd/base/BaseServlet.java b/src/com/zchd/base/BaseServlet.java
new file mode 100644
index 0000000..3d1ee6b
--- /dev/null
+++ b/src/com/zchd/base/BaseServlet.java
@@ -0,0 +1,49 @@
+package com.zchd.base;
+
+import org.redkale.convert.json.JsonConvert;
+import org.redkale.net.http.HttpRequest;
+import org.redkale.net.http.HttpResponse;
+import org.redkale.net.http.HttpServlet;
+import org.redkale.service.RetResult;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class BaseServlet extends HttpServlet {
+
+ protected final Logger logger = Logger.getLogger(this.getClass().getSimpleName());
+
+ @Resource(name = "APP_NAME")
+ protected String APP_NAME = "";
+
+ @Resource
+ protected JsonConvert convert;
+
+ @Override
+ protected void preExecute(HttpRequest request, HttpResponse response) throws IOException {
+
+ super.preExecute(request, response);
+ }
+
+ @Override
+ protected void authenticate(HttpRequest request, HttpResponse response) throws IOException {
+ response.nextEvent();
+ }
+
+
+ @Override
+ public void execute(HttpRequest request, HttpResponse response) throws IOException {
+ try {
+ super.execute(request, response);
+ } catch (Exception e) {
+ logger.log(Level.WARNING, "", e);
+ RetResult result = RetResult.success();
+ result.setRetcode(100);
+ result.setRetinfo("操作失败");
+ response.finishJson(result);
+ return;
+ }
+ }
+}
diff --git a/src/com/zchd/base/RetCodes.java b/src/com/zchd/base/RetCodes.java
new file mode 100644
index 0000000..48331cf
--- /dev/null
+++ b/src/com/zchd/base/RetCodes.java
@@ -0,0 +1,477 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.zchd.base;
+
+import com.zchd.base.util.Utils;
+import org.redkale.service.RetLabel;
+import org.redkale.service.RetResult;
+
+import java.text.MessageFormat;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+
+/**
+ * @author zhangjx
+ */
+@SuppressWarnings("unchecked")
+public abstract class RetCodes {
+
+ //2000_0001 - 2999_9999 预留给 Redkale的扩展包redkalex使用
+ //3000_0001 - 7999_9999 为平台系统使用
+ //8000_0001 - 9999_9999 为OSS系统使用
+ //------------------------------------- 通用模块 -----------------------------------------
+ @RetLabel("参数无效")
+ public static final int RET_PARAMS_ILLEGAL = 30010001;
+
+ @RetLabel("无上传文件")
+ public static final int RET_UPLOAD_NOFILE = 30010002;
+
+ @RetLabel("上传文件过大")
+ public static final int RET_UPLOAD_FILETOOBIG = 30010003;
+
+ @RetLabel("上传文件不是图片")
+ public static final int RET_UPLOAD_NOTIMAGE = 30010004;
+
+ @RetLabel("文件写入失败")
+ public static final int RET_FILE_WRITE_ERROR = 30010005;
+
+ @RetLabel("系统内部异常")
+ public static final int RET_INNER_ILLEGAL = 30010006;
+
+ @RetLabel("调用远程接口异常")
+ public static final int RET_REMOTE_ILLEGAL = 30010007;
+
+ @RetLabel("调用远程接口超时")
+ public static final int RET_REMOTE_TIMEOUT = 30010008;
+
+ @RetLabel("重复操作")
+ public static final int RET_REPEAT_ILLEGAL = 30010009;
+
+ @RetLabel("操作失败")
+ public static final int RET_UNKNOWN_ERROR = 30010010;
+
+ @RetLabel("操作失败,包含敏感词")
+ public static final int RET_SWEAR_ERROR = 30010011;
+
+ @RetLabel("网络繁忙,请稍后再试")
+ public static final int RET_FREQUENCY_ERROR = 30010012;
+
+ @RetLabel("不在白名单内")
+ public static final int RET_FREQUENCY_NOT_WHITE = 30010013;
+
+ @RetLabel("您操作速度太快,请稍后再试")
+ public static final int RET_FREQUENCY_SPEED_FAST = 30010014;
+
+ @RetLabel("权限不足")
+ public static final int RET_AUTH_ILLEGAL = 30010015;
+
+ @RetLabel("请求参数长度超出限制(2M)")
+ public static final int RET_REQUEST_PARAM_LENGTH_OUT = 30010016;
+
+ @RetLabel("手速太快,请稍后再试")
+ public static final int RET_REQUEST_UNIQUE = 30010017;
+
+ //------------------------------------- 用户模块 -----------------------------------------
+ @RetLabel("未登陆")
+ public static final int RET_USER_UNLOGIN = 30020001;
+
+ @RetLabel("用户登录失败")
+ public static final int RET_USER_LOGIN_FAIL = 30020002;
+
+ @RetLabel("用户被禁用")
+ public static final int RET_USER_FREEZED = 30020005;
+
+ @RetLabel("用户权限不够")
+ public static final int RET_USER_AUTH_ILLEGAL = 30020006;
+
+ @RetLabel("用户不存在")
+ public static final int RET_USER_NOTEXISTS = 30020007;
+
+ @RetLabel("用户状态异常")
+ public static final int RET_USER_STATUS_ILLEGAL = 30020008;
+
+ @RetLabel("用户注册参数无效")
+ public static final int RET_USER_SIGNUP_ILLEGAL = 30020009;
+
+ @RetLabel("用户性别参数无效")
+ public static final int RET_USER_GENDER_ILLEGAL = 30020010;
+
+ @RetLabel("用户名无效")
+ public static final int RET_USER_USERNAME_ILLEGAL = 30020011;
+
+ @RetLabel("用户账号无效")
+ public static final int RET_USER_ACCOUNT_ILLEGAL = 30020012;
+
+ @RetLabel("手机号已存在")
+ public static final int RET_USER_ACCOUNT_EXISTS = 30020013;
+
+ @RetLabel("手机号码无效")
+ public static final int RET_USER_MOBILE_ILLEGAL = 30020014;
+
+ @RetLabel("手机号码已存在")
+ public static final int RET_USER_MOBILE_EXISTS = 30020015;
+
+ @RetLabel("手机验证码发送过于频繁")
+ public static final int RET_USER_MOBILE_SMSFREQUENT = 30020016;
+
+ @RetLabel("邮箱地址无效")
+ public static final int RET_USER_EMAIL_ILLEGAL = 30020017;
+
+ @RetLabel("邮箱地址已存在")
+ public static final int RET_USER_EMAIL_EXISTS = 30020018;
+
+ @RetLabel("微信绑定号无效")
+ public static final int RET_USER_WXID_ILLEGAL = 30020019;
+
+ @RetLabel("微信绑定号已存在")
+ public static final int RET_USER_WXID_EXISTS = 30020020;
+
+ @RetLabel("绑定微信号失败")
+ public static final int RET_USER_WXID_BIND_FAIL = 30020021;
+
+ @RetLabel("QQ绑定号无效")
+ public static final int RET_USER_QQID_ILLEGAL = 30020022;
+
+ @RetLabel("QQ绑定号已存在")
+ public static final int RET_USER_QQID_EXISTS = 30020023;
+
+ @RetLabel("绑定QQ号失败")
+ public static final int RET_USER_QQID_BIND_FAIL = 30020024;
+
+ @RetLabel("获取绑定QQ信息失败")
+ public static final int RET_USER_QQID_INFO_FAIL = 30020025;
+
+ @RetLabel("验证码无效")
+ public static final int RET_USER_RANDCODE_ILLEGAL = 30020026; //邮件或者短信验证码
+
+ @RetLabel("验证码已过期")
+ public static final int RET_USER_RANDCODE_EXPIRED = 30020027; //邮件或者短信验证码
+
+ @RetLabel("验证码错误或失效")
+ public static final int RET_USER_CAPTCHA_ILLEGAL = 30020028; //图片验证码
+
+ @RetLabel("用户类型无效")
+ public static final int RET_USER_TYPE_ILLEGAL = 30020029;
+
+ @RetLabel("账号已在其他设备登录")
+ public static final int RET_USER_LOGIN_ILLEGAL = 30020030;
+
+ @RetLabel("今日已签到")
+ public static final int RET_QUESTS_DUTY_EXISTS = 30020031;
+
+ @RetLabel("父账号不存在")
+ public static final int RET_USER_PARENT_ILLEGAL = 30020032;
+
+ @RetLabel("手机号码所在运营商不存在")
+ public static final int RET_USER_MOBILE_NONET = 30020033;
+
+ @RetLabel("用户等级不够")
+ public static final int RET_USER_LEVEL_ILLEGAL = 30020036;
+
+ @RetLabel("银行密码错误")
+ public static final int RET_USER_BANKPWD_ILLEGAL = 30020037;
+
+ @RetLabel("用户已绑定在其他设备上了")
+ public static final int RET_USER_APPTOKEN_BINDED = 30020039;
+
+ @RetLabel("短信发送失败")
+ public static final int RET_SMS_SEND_ERROR = 30020041;
+
+ @RetLabel("同一设备注册次数达到上限")
+ public static final int RET_USER_REG_APPSAME_LIMIT = 30020042;
+
+ @RetLabel("您的账号已被限制登录")
+ public static final int RET_USER_LOGINORREG_LIMIT = 30020043;
+
+ @RetLabel("城信APP绑定号已存在")
+ public static final int RET_USER_CXID_EXISTS = 30020044;
+
+ @RetLabel("禁止循环代理")
+ public static final int RET_USER_AGENCY_REPEAT = 30020045;
+
+ @RetLabel("没有可提取的奖励")
+ public static final int RET_USER_PROFIT_MONEY_ILLEGAL = 30020046;
+
+ @RetLabel("收款资料不全")
+ public static final int RET_USER_PROFIT_CARD_ILLEGAL = 30020047;
+
+ @RetLabel("用户生日无效")
+ public static final int RET_USER_BIRTHDAY_ILLEGAL = 30020048;
+
+ @RetLabel("举报参数无效")
+ public static final int RET_USER_REPORT_ILLEGAL = 30020049;
+
+ @RetLabel("邀请码无效")
+ public static final int RET_USER_INVITE_ILLEGAL = 30020050;
+
+ @RetLabel("此用户昵称已存在")
+ public static final int RET_USERNAME_EXISTS = 30020051;
+
+ @RetLabel("昵称不可用")
+ public static final int RET_USERNAME_ILLEGAL = 30020052;
+
+ @RetLabel("用户地址无效")
+ public static final int RET_ADDR_ILLEGAL = 30020053;
+
+ @RetLabel("用户头像无效")
+ public static final int RET_FACE_ILLEGAL = 30020054;
+
+ @RetLabel("用户封面无效")
+ public static final int RET_USERCOVER_ILLEGAL = 30020055;
+
+ @RetLabel("第三方用户信息获取失败")
+ public static final int RET_JTOKEN_ILLEGAL = 30020056;
+
+ @RetLabel("用户年龄参数无效")
+ public static final int RET_USER_AGE_ILLEGAL = 30020057;
+
+ @RetLabel("接口调用Token无效")
+ public static final int RET_USERCREATE_TOKEN_ILLEGAL = 30020057;
+
+ @RetLabel("抽奖券不足")
+ public static final int RET_LUCK_DRAW_TICKET_ILLEGAL = 30020058;
+
+ @RetLabel("您的账号已被冻结")
+ public static final int RET_USER_STATUS_FROZEN = 30020059;
+
+ @RetLabel("您已被禁言")
+ public static final int RET_USER_STATUS_FREEZE = 30020060;
+
+ @RetLabel("邀请码已达到使用上限")
+ public static final int RET_USER_INVITE_UPPER = 30020061;
+
+ @RetLabel("用户未激活")
+ public static final int RET_USER_STATUS_PENDING = 30020062;
+
+ @RetLabel("用户未进行身份认证")
+ public static final int RET_USER_IDENTITY_NOT_PROVED = 30020063;
+
+ @RetLabel("解绑后没有其它登录方式,不允许解绑")
+ public static final int RET_USER_NOT_UNBIND = 30020065;
+
+ @RetLabel("已是推广员,请勿重复申请")
+ public static final int RET_USER_ALREADY_PROMOTER = 30020066;
+
+ @RetLabel("请充值会员")
+ public static final int RET_USER_VIP_ERROR = 30020067;
+
+ @RetLabel("已举报过,请勿重复举报")
+ public static final int RET_USER_ALREADY_REPORT = 30020068;
+
+ @RetLabel("Apple Id绑定号已存在")
+ public static final int RET_USER_APPLEID_EXISTS = 30020069;
+
+ @RetLabel("您的登录状态已过期")
+ public static final int RET_USER_LOGIN_EXPIRE = 30020070;
+
+ @RetLabel("手机号已绑定其它第三方账号")
+ public static final int RET_USER_MOBILE_BINDED = 30020071;
+
+ @RetLabel("名片背景图无效")
+ public static final int RET_USER_CARD_IMG_ERROR = 30020072;
+
+ @RetLabel("未查询到用户收货地址")
+ public static final int RET_USER_ADDRESS_NOT_EXISTS = 30020073;
+
+ @RetLabel("7天内只能修改1次,请稍后再试~")
+ public static final int RET_USER_CHANGE_NAME_COUNT = 30020074;
+
+ @RetLabel("开通VIP解锁多张封面特权")
+ public static final int RET_USER_BATCH_COVER_NO_VIP = 30020075;
+
+ @RetLabel("手机号已绑定其它账号")
+ public static final int RET_MOBILE_BIND_OTHER = 30020076;
+
+ @RetLabel("手机号已注册V运动账号,是否确认绑定")
+ public static final int RET_MOBILE_EXISTS_CONFIRM = 30020077;
+
+ @RetLabel("您的账号长时间未登录,为保证账号安全,请重新输入账号密码")
+ public static final int RET_ACCOUNT_LOGIN_EXPIRE = 30020078;
+
+
+ //----------------------------------------头衔认证-------------------------------------------------------------------
+ @RetLabel("已申请或拥有此头衔")
+ public static final int RET_IDENTITY_ALREADY_APPLY = 40100001;
+ @RetLabel("不满足申请条件")
+ public static final int RET_IDENTITY_CANNOT_APPLY = 40100002;
+ @RetLabel("佩戴头衔超出限制")
+ public static final int RET_IDENTITY_WEAR_ERROR = 40100003;
+ @RetLabel("自定义头衔昵称为空")
+ public static final int RET_IDENTITY_CUSTOM_NAME_ERROR = 40100004;
+ @RetLabel("自定义头衔名称不能与提供的名称重复")
+ public static final int RET_IDENTITY_NAME_REPEAT = 40100005;
+ @RetLabel("未获得头衔")
+ public static final int RET_IDENTITY_NOT_HAD = 40100006;
+ @RetLabel("文件大小超过限制(3M)")
+ public static final int RET_IDENTITY_FILE_LENGTH_OUT = 40100007;
+ @RetLabel("文件类型超出限制(jpeg,jpg,png)")
+ public static final int RET_IDENTITY_FILE_SUFFIX_OUT = 40100008;
+ @RetLabel("未获取到身份证图片")
+ public static final int RET_IDENTITY_FILE_NOTEXIST = 40100009;
+ @RetLabel("填写信息与照片不符")
+ public static final int RET_IDENTITY_FILE_NOTOK = 40100010;
+ @RetLabel("上送人脸核身信息失败")
+ public static final int RET_IDENTITY_FILE_UPLOADFACEID = 40100011;
+ @RetLabel("身份证人像面信息读取失败")
+ public static final int RET_IDENTITY_FACEID_FRONT_ERROR = 40100012;
+ @RetLabel("身份证国徽面信息读取失败")
+ public static final int RET_IDENTITY_FACEID_BACK_ERROR = 40100013;
+ @RetLabel("未查询到实名认证申请记录")
+ public static final int RET_IDENTITY_FACEID_INFO_ERROR = 40100014;
+ @RetLabel("人脸核身识别失败")
+ public static final int RET_IDENTITY_FACEID_IERROR = 40100015;
+ @RetLabel("人脸核身返回名称或身份证号码不匹配")
+ public static final int RET_IDENTITY_FACEID_NOTOK = 40100016;
+ @RetLabel("Base64转文件失败")
+ public static final int RET_IDENTITY_FILE_CREATE_ERROR = 40100017;
+ @RetLabel("该身份证已与其他彩虹号绑定,如有疑问,请联系客服")
+ public static final int RET_IDENTITY_REPEAT_ERROR = 40100018;
+ @RetLabel("申请材料无效")
+ public static final int RET_IDENTITY_APPLY_FILE_ERROR = 40100019;
+
+ //----------------------------------------------消息-------------------------------------------------------------
+
+ @RetLabel("消息参数不正确")
+ public static final int RET_MESSAGE_ILLEGAL = 40150001;
+
+ @RetLabel("空白消息")
+ public static final int RET_MESSAGE_EMPTY = 40150002;
+
+ @RetLabel("消息内容超长")
+ public static final int RET_MESSAGE_TOO_LONG = 40150003;
+
+ @RetLabel("还不是好友关系")
+ public static final int RET_MESSAGE_NOT_FRIEND = 40150004;
+
+ @RetLabel("消息含有敏感词")
+ public static final int RET_MESSAGE_HAS_SENSITIVE_WORD = 40150005;
+
+ @RetLabel("图片信息有误")
+ public static final int RET_MESSAGE_PICTURE_ERROR = 40150006;
+
+ @RetLabel("用户已被禁言")
+ public static final int RET_MESSAGE_ACCOUNT_BANNED = 40150007;
+
+ //-----------------------------------------push-----------------------------------------------------
+ @RetLabel("通知未开启")
+ public static final int RET_PUSH_NOT_OPEN = 40160001;
+
+ //-----------------------------------------通用-----------------------------------------------------
+ @RetLabel("访问内容不存在")
+ public static final int RES_NON_EXISTENT = 40180001;
+
+ //-----------------------------------------其他临时-----------------------------------------------------
+ @RetLabel("内容已被锁定")
+ public static final int RET_ARTICLE_LOCKED = 40400001;
+
+ @RetLabel("身份证信息已存在")
+ public static final int RET_IDCARD_EXISTS = 40400002;
+
+ protected static final Map> rets = RetLabel.RetLoader.loadMap(RetCodes.class);
+
+ protected static final Map defret = rets.get("");
+ public static final RetResult RET_SUCCESS = RetResult.success();
+
+ public static RetResult retResult(int retcode) {
+ if (retcode == 0) {
+ return RET_SUCCESS;
+ }
+ return new RetResult(retcode, retInfo(retcode));
+ }
+
+ public static RetResult retResult(String locale, int retcode) {
+ if (retcode == 0) {
+ return RET_SUCCESS;
+ }
+ return new RetResult(retcode, retInfo(locale, retcode));
+ }
+
+ public static RetResult retResult(int retcode, Object... args) {
+ if (retcode == 0) {
+ return RET_SUCCESS;
+ }
+ if (args == null || args.length < 1) {
+ return new RetResult(retcode, retInfo(retcode));
+ }
+ String info = MessageFormat.format(retInfo(retcode), args);
+ return new RetResult(retcode, info);
+ }
+
+ public static RetResult retResult(String locale, int retcode, Object... args) {
+ if (retcode == 0) {
+ return RET_SUCCESS;
+ }
+ if (args == null || args.length < 1) {
+ return new RetResult(retcode, retInfo(locale, retcode));
+ }
+ String info = MessageFormat.format(retInfo(locale, retcode), args);
+ return new RetResult(retcode, info);
+ }
+
+ public static CompletableFuture> retResultFuture(int retcode) {
+ return CompletableFuture.completedFuture(retResult(retcode));
+ }
+
+ public static CompletableFuture> retResultFuture(String locale, int retcode) {
+ return CompletableFuture.completedFuture(retResult(locale, retcode));
+ }
+
+ public static CompletableFuture> retResultFuture(int retcode, Object... args) {
+ return CompletableFuture.completedFuture(retResult(retcode, args));
+ }
+
+ public static CompletableFuture> retResultFuture(String locale, int retcode, Object... args) {
+ return CompletableFuture.completedFuture(retResult(locale, retcode, args));
+ }
+
+ public static RetResult set(RetResult result, int retcode, Object... args) {
+ if (retcode == 0) {
+ return result.retcode(0).retinfo("");
+ }
+ if (args == null || args.length < 1) {
+ return result.retcode(retcode).retinfo(retInfo(retcode));
+ }
+ String info = MessageFormat.format(retInfo(retcode), args);
+ return result.retcode(retcode).retinfo(info);
+ }
+
+ public static RetResult set(RetResult result, String locale, int retcode, Object... args) {
+ if (retcode == 0) {
+ return result.retcode(0).retinfo("");
+ }
+ if (args == null || args.length < 1) {
+ return result.retcode(retcode).retinfo(retInfo(locale, retcode));
+ }
+ String info = MessageFormat.format(retInfo(locale, retcode), args);
+ return result.retcode(retcode).retinfo(info);
+ }
+
+ public static String retInfo(int retcode) {
+ if (retcode == 0) {
+ return "Success";
+ }
+ return defret.getOrDefault(retcode, "Error");
+ }
+
+ public static String retInfo(String locale, int retcode) {
+ if (locale == null || locale.isEmpty()) {
+ return retInfo(retcode);
+ }
+ if (retcode == 0) {
+ return "Success";
+ }
+ String key = locale == null ? "" : locale;
+ Map map = rets.get(key);
+ if (map == null) {
+ return "Error";
+ }
+ return map.getOrDefault(retcode, "Error");
+ }
+
+ public static RetResult retResult(RetResult codeRet) {
+ return Utils.copy(new RetResult<>(), codeRet);
+ }
+}
diff --git a/src/com/zchd/base/info/Swear.java b/src/com/zchd/base/info/Swear.java
new file mode 100644
index 0000000..a00bfe1
--- /dev/null
+++ b/src/com/zchd/base/info/Swear.java
@@ -0,0 +1,16 @@
+package com.zchd.base.info;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * 敏感词配置检查
+ */
+@Target(FIELD)
+@Retention(RUNTIME)
+public @interface Swear {
+ String name() default "";
+}
diff --git a/src/com/zchd/base/info/SwearRpcReq.java b/src/com/zchd/base/info/SwearRpcReq.java
new file mode 100644
index 0000000..21955ba
--- /dev/null
+++ b/src/com/zchd/base/info/SwearRpcReq.java
@@ -0,0 +1,33 @@
+package com.zchd.base.info;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.redkale.util.Comment;
+
+import java.io.Serializable;
+
+/**
+ * @author YLZ FUTURE MADE
+ * @date 2021/10/15 10:42
+ */
+@Getter
+@Setter
+public class SwearRpcReq implements Serializable {
+
+ @Comment("敏感词内容")
+ private String content;
+ @Comment("敏感词检测类型 MinMatchTYpe:最小匹配规则,如:敏感词库[\"中国\",\"中国人\"],语句:\"我是中国人\",匹配结果:我是[中国]人\n" +
+ " * MaxMatchType:最大匹配规则,如:敏感词库[\"中国\",\"中国人\"],语句:\"我是中国人\",匹配结果:我是[中国人]")
+ private int matchType = 1;
+ @Comment("替换的敏感字")
+ private char replaceChar = '*';
+ @Comment("替换的敏感词")
+ private String replace = "";
+
+ public static SwearRpcReq build(String content) {
+ SwearRpcReq bean = new SwearRpcReq();
+ bean.setContent(content);
+ return bean;
+ }
+
+}
\ No newline at end of file
diff --git a/src/com/zchd/base/info/SwearWordService.java b/src/com/zchd/base/info/SwearWordService.java
new file mode 100644
index 0000000..27da72f
--- /dev/null
+++ b/src/com/zchd/base/info/SwearWordService.java
@@ -0,0 +1,168 @@
+package com.zchd.base.info;
+
+import com.zchd.base.BaseService;
+import com.zchd.base.RetCodes;
+import com.zchd.base.util.FileKit;
+import com.zchd.base.util.QueueTasks;
+import com.zchd.base.util.Utils;
+import org.redkale.net.http.RestMapping;
+import org.redkale.net.http.RestService;
+import org.redkale.service.RetResult;
+import org.redkale.util.AnyValue;
+
+import javax.annotation.Resource;
+import java.io.*;
+import java.lang.reflect.Field;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+
+@RestService(name = "swearword", comment = "敏感词服务")
+public class SwearWordService extends BaseService {
+
+ protected final Logger logger = Logger.getLogger(this.getClass().getSimpleName());
+
+ @Resource(name = "APP_HOME")
+ protected File APP_HOME;
+
+ @Resource(name = "property.swearbasepath")
+ private String swearbasepath;
+
+ private Set words = new HashSet<>();
+
+ @Override
+ public void init(AnyValue config) {
+ QueueTasks.add(() -> {
+ reload();
+ zhub.subscribe("sport:swearword-reload", x -> {
+ reload();
+ });
+ });
+ }
+
+ @RestMapping(name = "reload", comment = "加载敏感词")
+ public RetResult reload() {
+ if (Utils.isEmpty(swearbasepath)) {
+ return RET_SUCCESS;
+ }
+ String swearpath = swearbasepath.replace("${APP_HOME}", APP_HOME.getPath());
+ File dir = new File(swearpath);
+ if (!dir.exists()) {
+ return null;
+ }
+ words.clear();
+ for (File file : dir.listFiles()) {
+ if (!file.isFile()) continue;
+ try {
+ FileInputStream in = new FileInputStream(file);
+ LineNumberReader reader = new LineNumberReader(new InputStreamReader(in, "UTF-8"));
+ String line;
+ int n = words.size();
+ while ((line = reader.readLine()) != null) {
+ words.add(Utils.unicodeToCn(line).trim());
+ }
+ words.remove("");
+ words.remove("null");
+ words.remove("9");
+ logger.log(Level.INFO, String.format("loaded swear file :%s, add new words: %d", file.getName(), words.size() - n));
+ reader.close();
+ } catch (FileNotFoundException | UnsupportedEncodingException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ return RET_SUCCESS;
+ }
+
+ @RestMapping(name = "check", auth = false)
+ public RetResult check(String str) {
+ for (String word : words) {
+ if (str.contains(word)) {
+ RetResult