diff --git a/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/annotation/JsonFieldFormat.java b/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/annotation/JsonFieldFormat.java new file mode 100644 index 000000000..63f29dc61 --- /dev/null +++ b/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/annotation/JsonFieldFormat.java @@ -0,0 +1,55 @@ +/* + * Copyright [2020-2030] [https://www.stylefeng.cn] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: + * + * 1.请不要删除和修改根目录下的LICENSE文件。 + * 2.请不要删除和修改Guns源码头部的版权声明。 + * 3.请保留源码和相关描述文件的项目出处,作者声明等。 + * 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns + * 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns + * 6.若您的项目无法满足以上几点,可申请商业授权 + */ +package cn.stylefeng.roses.kernel.rule.annotation; + +import cn.stylefeng.roses.kernel.rule.base.JsonFieldFormatProcess; +import cn.stylefeng.roses.kernel.rule.enums.FormatTypeEnum; + +import java.lang.annotation.*; + +/** + * json字段的格式化,可以将多种情景的id,code,枚举等,转化为具体的具有可读性的名称 + * + * @author fengshuonan + * @date 2022/9/6 11:34 + */ +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +public @interface JsonFieldFormat { + + /** + * 字段格式化的类型 详情见:{@link FormatTypeEnum} + *

+ * 默认采用包装型,不改变原有的字段 + */ + FormatTypeEnum formatType() default FormatTypeEnum.WRAPPER; + + /** + * 具体处理值转化的过程 + */ + Class process(); + +} diff --git a/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/base/JsonFieldFormatProcess.java b/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/base/JsonFieldFormatProcess.java new file mode 100644 index 000000000..25a723724 --- /dev/null +++ b/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/base/JsonFieldFormatProcess.java @@ -0,0 +1,31 @@ +package cn.stylefeng.roses.kernel.rule.base; + +/** + * json字段格式化的过程接口规范 + * + * @author fengshuonan + * @date 2022/9/6 11:54 + */ +public interface JsonFieldFormatProcess { + + /** + * 是否可以进行格式化转化 + * + * @param originValue 原来的值,格式化之前的值 + * @return 返回true,代表可以进行转化 + * @author fengshuonan + * @date 2022/9/6 13:16 + */ + boolean canFormat(Object originValue); + + /** + * 执行格式转化 + * + * @param originValue 格式转化之前的值 + * @return 格式转化之后的值 + * @author fengshuonan + * @date 2022/9/6 13:28 + */ + Object formatProcess(Object originValue); + +} diff --git a/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/base/ReadableEnum.java b/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/base/ReadableEnum.java new file mode 100644 index 000000000..d49f79b6e --- /dev/null +++ b/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/base/ReadableEnum.java @@ -0,0 +1,58 @@ +/* + * Copyright [2020-2030] [https://www.stylefeng.cn] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: + * + * 1.请不要删除和修改根目录下的LICENSE文件。 + * 2.请不要删除和修改Guns源码头部的版权声明。 + * 3.请保留源码和相关描述文件的项目出处,作者声明等。 + * 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns + * 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns + * 6.若您的项目无法满足以上几点,可申请商业授权 + */ +package cn.stylefeng.roses.kernel.rule.base; + +/** + * 可读性枚举的规范,必须包含一个key和一个value + *

+ * key一般是编码,id,具有标识性的类型 + * value一般是String类型,是一串文字 + * + * @author fengshuonan + * @date 2022/9/6 11:27 + */ +public interface ReadableEnum { + + /** + * 获取枚举中具有标识性的key + *

+ * 例如:状态枚举中的装填值,1 或 2 + * + * @author fengshuonan + * @date 2022/9/6 11:29 + */ + Object getKey(); + + /** + * 获取枚举中具有可读性的value值 + *

+ * 例如:状态枚举中的状态名称,"启用" 或 "禁用" + * + * @author fengshuonan + * @date 2022/9/6 11:30 + */ + Object getValue(); + +} diff --git a/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/enums/FormatTypeEnum.java b/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/enums/FormatTypeEnum.java new file mode 100644 index 000000000..e33b255c9 --- /dev/null +++ b/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/enums/FormatTypeEnum.java @@ -0,0 +1,25 @@ +package cn.stylefeng.roses.kernel.rule.enums; + +/** + * 字段格式化的类型 + * + * @author fengshuonan + * @date 2022/9/6 11:48 + */ +public enum FormatTypeEnum { + + /** + * 替换型,将原有字段替换成新的值 + *

+ * 例如:接口返回userId=1001,采用本种方式则返回userId=张三 + */ + REPLACE, + + /** + * 包装型,不改变原来字段值,在同级别字段中,增加一个 “源字段名+Wrapper" 字段 + *

+ * 例如:接口返回userId=1001,采用本种方式则返回userIdWrapper=张三 + */ + WRAPPER + +}