houzhongjian
2024-07-23 d9f9ba31913bb9f5053ad78109e8a3c1c00f1e6a
提交 | 用户 | 时间
e7c126 1 package com.iailab.module.infra.dal.dataobject.file;
H 2
3 import cn.hutool.core.util.StrUtil;
4 import com.iailab.framework.common.util.json.JsonUtils;
5 import com.iailab.framework.mybatis.core.dataobject.BaseDO;
6 import com.iailab.module.infra.framework.file.core.client.FileClientConfig;
7 import com.iailab.module.infra.framework.file.core.client.db.DBFileClientConfig;
8 import com.iailab.module.infra.framework.file.core.client.ftp.FtpFileClientConfig;
9 import com.iailab.module.infra.framework.file.core.client.local.LocalFileClientConfig;
10 import com.iailab.module.infra.framework.file.core.client.s3.S3FileClientConfig;
11 import com.iailab.module.infra.framework.file.core.client.sftp.SftpFileClientConfig;
12 import com.iailab.module.infra.framework.file.core.enums.FileStorageEnum;
13 import com.baomidou.mybatisplus.annotation.KeySequence;
14 import com.baomidou.mybatisplus.annotation.TableField;
15 import com.baomidou.mybatisplus.annotation.TableName;
16 import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler;
17 import com.fasterxml.jackson.core.type.TypeReference;
18 import lombok.*;
19
d9f9ba 20 import java.lang.reflect.Field;
H 21
e7c126 22 /**
H 23  * 文件配置表
24  *
25  * @author iailab
26  */
27 @TableName(value = "infra_file_config", autoResultMap = true)
28 @KeySequence("infra_file_config_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
29 @Data
30 @EqualsAndHashCode(callSuper = true)
31 @ToString(callSuper = true)
32 @Builder
33 @NoArgsConstructor
34 @AllArgsConstructor
35 public class FileConfigDO extends BaseDO {
36
37     /**
38      * 配置编号,数据库自增
39      */
40     private Long id;
41     /**
42      * 配置名
43      */
44     private String name;
45     /**
46      * 存储器
47      *
48      * 枚举 {@link FileStorageEnum}
49      */
50     private Integer storage;
51     /**
52      * 备注
53      */
54     private String remark;
55     /**
56      * 是否为主配置
57      *
58      * 由于我们可以配置多个文件配置,默认情况下,使用主配置进行文件的上传
59      */
60     private Boolean master;
61
62     /**
63      * 支付渠道配置
64      */
65     @TableField(typeHandler = FileClientConfigTypeHandler.class)
66     private FileClientConfig config;
67
68     public static class FileClientConfigTypeHandler extends AbstractJsonTypeHandler<Object> {
69
d9f9ba 70         public FileClientConfigTypeHandler(Class<?> type) {
H 71             super(type);
72         }
73
74         public FileClientConfigTypeHandler(Class<?> type, Field field) {
75             super(type, field);
76         }
77
e7c126 78         @Override
d9f9ba 79         public Object parse(String json) {
e7c126 80             FileClientConfig config = JsonUtils.parseObjectQuietly(json, new TypeReference<FileClientConfig>() {});
H 81             if (config != null) {
82                 return config;
83             }
84
85             // 兼容老版本的包路径
86             String className = JsonUtils.parseObject(json, "@class", String.class);
87             className = StrUtil.subAfter(className, ".", true);
88             switch (className) {
89                 case "DBFileClientConfig":
90                     return JsonUtils.parseObject2(json, DBFileClientConfig.class);
91                 case "FtpFileClientConfig":
92                     return JsonUtils.parseObject2(json, FtpFileClientConfig.class);
93                 case "LocalFileClientConfig":
94                     return JsonUtils.parseObject2(json, LocalFileClientConfig.class);
95                 case "SftpFileClientConfig":
96                     return JsonUtils.parseObject2(json, SftpFileClientConfig.class);
97                 case "S3FileClientConfig":
98                     return JsonUtils.parseObject2(json, S3FileClientConfig.class);
99                 default:
100                     throw new IllegalArgumentException("未知的 FileClientConfig 类型:" + json);
101             }
102         }
103
104         @Override
d9f9ba 105         public String toJson(Object obj) {
e7c126 106             return JsonUtils.toJsonString(obj);
H 107         }
108
109     }
110
111 }