0988b67d by xu

Merge branch 'develop-v1.0.6' into feature-tds-v1.0.0

# Conflicts:
#	src/main/java/com/csbr/qingcloud/portal/service/EnterpriseService.java
2 parents 21fc2263 2be08149
Showing 25 changed files with 902 additions and 104 deletions
1 package com.csbr.qingcloud.portal.controller;
2
3 import com.csbr.cloud.common.response.CommonRes;
4 import csbr.cloud.entity.annotation.SystemLog;
5 import csbr.cloud.entity.domain.base.vo.PageListVO;
6 import com.csbr.qingcloud.portal.domain.vo.EnterpriseAttachmentQueryVO;
7 import com.csbr.qingcloud.portal.domain.vo.EnterpriseAttachmentRQVO;
8 import com.csbr.qingcloud.portal.domain.vo.EnterpriseAttachmentRSVO;
9 import com.csbr.qingcloud.portal.service.EnterpriseAttachmentService;
10 import io.swagger.v3.oas.annotations.Operation;
11 import io.swagger.v3.oas.annotations.Parameter;
12 import io.swagger.v3.oas.annotations.tags.Tag;
13 import jakarta.annotation.Resource;
14 import jakarta.validation.Valid;
15 import org.springframework.web.bind.annotation.*;
16
17 import java.util.List;
18
19 /**
20 * @program:
21 * @description: 开发主体附件信息-控制器
22 * @author: makejava
23 * @create: 2025-09-05 13:50
24 **/
25 @RestController
26 @RequestMapping("/enterprise-attachment")
27 @Tag(name = "开发主体附件信息-控制器")
28 public class EnterpriseAttachmentController {
29
30 @Resource
31 private EnterpriseAttachmentService enterpriseAttachmentService;
32
33 //region 基本操作
34
35 @PostMapping("/save")
36 @SystemLog(value = "开发主体附件信息-新增")
37 @Operation(summary = "开发主体附件信息-新增")
38 public CommonRes<Boolean> saveEnterpriseAttachment(@RequestBody @Valid EnterpriseAttachmentRQVO vo) {
39 enterpriseAttachmentService.saveEnterpriseAttachment(vo);
40 return CommonRes.success(true);
41 }
42
43 @PutMapping("/update")
44 @SystemLog(value = "开发主体附件信息-修改")
45 @Operation(summary = "开发主体附件信息-修改")
46 public CommonRes<Boolean> updateEnterpriseAttachment(@RequestBody @Valid EnterpriseAttachmentRQVO vo) {
47 enterpriseAttachmentService.updateEnterpriseAttachment(vo);
48 return CommonRes.success(true);
49 }
50
51 @DeleteMapping("/delete")
52 @SystemLog(value = "开发主体附件信息-批量删除")
53 @Operation(summary = "开发主体附件信息-批量删除")
54 public CommonRes<Boolean> removeByGuids(@RequestBody List<String> guids) {
55 enterpriseAttachmentService.removeByGuids(guids);
56 return CommonRes.success(true);
57 }
58
59 @PostMapping("/page-list")
60 @SystemLog(value = "开发主体附件信息-分页")
61 @Operation(summary = "开发主体附件信息-分页")
62 public CommonRes<PageListVO<EnterpriseAttachmentRSVO>> pageList(@RequestBody @Valid EnterpriseAttachmentQueryVO queryVO) {
63 PageListVO<EnterpriseAttachmentRSVO> pageVO = enterpriseAttachmentService.pageList(queryVO);
64 return CommonRes.success(pageVO);
65 }
66
67 @GetMapping("/detail")
68 @SystemLog(value = "开发主体附件信息-详情")
69 @Operation(
70 summary = "开发主体附件信息-详情",
71 parameters = {
72 @Parameter(name = "guid", description = "开发主体附件信息唯一标识", required = true)}
73 )
74 public CommonRes<EnterpriseAttachmentRSVO> getEnterpriseAttachmentDetail(@RequestParam String guid) {
75 EnterpriseAttachmentRSVO vo = enterpriseAttachmentService.getEnterpriseAttachmentDetail(guid);
76 return CommonRes.success(vo);
77 }
78
79 @GetMapping("/get-fileUrl")
80 @SystemLog(value = "开发主体附件信息-查询文件Url地址")
81 @Operation(
82 summary = "开发主体附件信息-查询文件Url地址",
83 parameters = {
84 @Parameter(name = "fileId", description = "文件Id", required = true)},
85 hidden = true
86 )
87 public CommonRes<String> getFileUrl(@RequestParam String fileId) {
88 String fileUrl = enterpriseAttachmentService.getEnterpriseAttachmentUrl(fileId);
89 return CommonRes.success(fileUrl);
90 }
91
92 //endregion
93
94 }
...@@ -130,6 +130,19 @@ public class EnterpriseController { ...@@ -130,6 +130,19 @@ public class EnterpriseController {
130 return CommonRes.success(true); 130 return CommonRes.success(true);
131 } 131 }
132 132
133 @PostMapping("/list-by-tenant-guids")
134 @SystemLog(value = "企业信息-根据会员guids查询企业信息")
135 public CommonRes<List<EnterpriseRSVO>> listByTenantGuids(@RequestBody List<String> guids) {
136 List<EnterpriseRSVO> vo = enterpriseService.listByTenantGuids(guids);
137 return CommonRes.success(vo);
138 }
139
140 @GetMapping("/update-identity-state")
141 @SystemLog(value = "企业信息-修改身份状态")
142 public CommonRes<Boolean> updateIdentityState(@RequestParam String logonUser, @RequestParam String identityState) {
143 return CommonRes.success(enterpriseService.updateIdentityState(logonUser, identityState));
144 }
145
133 //endregion 146 //endregion
134 147
135 //region 变更申请 148 //region 变更申请
......
1 package com.csbr.qingcloud.portal.domain.vo;
2
3
4 import io.swagger.v3.oas.annotations.media.Schema;
5 import lombok.Data;
6
7 /**
8 * @program: ms-zcgl-system-manager-service
9 * @description: TODO
10 * @author: lixiang
11 * @create: 2023-10-19 16:28
12 **/
13 @Data
14 public class DataDictDetailVO {
15
16 /** 系统唯一标识 */
17 @Schema(title="系统唯一标识")
18 private String guid;
19
20 /** 参数名称 */
21 @Schema(title="参数名称")
22 private String paramName;
23
24 /** 参数编码 */
25 @Schema(title="参数编码")
26 private String paramCode;
27
28 /** 参数类型(用途归类) */
29 @Schema(title="参数类型(用途归类)")
30 private String paramType;
31
32 /** 参数值 */
33 @Schema(title="参数值")
34 private String paramValue;
35
36 /** 排序 */
37 @Schema(title="排序")
38 private Integer orderNum;
39
40 }
1 package com.csbr.qingcloud.portal.domain.vo;
2
3 import com.fasterxml.jackson.annotation.JsonFormat;
4 import io.swagger.v3.oas.annotations.media.Schema;
5 import lombok.Data;
6
7 import java.util.List;
8
9 /**
10 * @program: @program:
11 * @description: 数据字典返回对象
12 * @author: csbrAuthor
13 * @create: 2023-08-25
14 **/
15 @Data
16 @Schema(title="数据字典返回对象")
17 public class DataDictVO {
18
19 /** 系统唯一标识 */
20 @Schema(title="系统唯一标识")
21 private String guid;
22
23 /** 参数类型(用途归类) */
24 @Schema(title="参数类型(用途归类)")
25 private String paramType;
26
27 /** 参数编码 */
28 @Schema(title="参数编码")
29 private String paramCode;
30
31 /** 参数名称 */
32 @Schema(title="参数名称")
33 private String paramName;
34
35 /** 描述 */
36 @Schema(title="描述")
37 private String remarks;
38
39 /** 参数值 */
40 @Schema(title="参数值")
41 private String paramValue;
42
43 /** 排序 */
44 @Schema(title="排序")
45 private Integer orderNum;
46
47 /** 修改姓名 */
48 @Schema(title="修改姓名")
49 private String updateUserName;
50
51 /** 修改时间 */
52 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
53 @Schema(title="修改时间")
54 private String updateTime;
55
56 @Schema(title="系统参数子明细")
57 List<DataDictDetailVO> detailVOList;
58
59
60 }
...\ No newline at end of file ...\ No newline at end of file
1 package com.csbr.qingcloud.portal.domain.vo; 1 package com.csbr.qingcloud.portal.domain.vo;
2 2
3 import io.swagger.v3.oas.annotations.media.Schema; 3 import io.swagger.v3.oas.annotations.media.Schema;
4 import com.fasterxml.jackson.annotation.JsonFormat; 4 import jakarta.validation.constraints.NotBlank;
5 import jakarta.validation.constraints.Size; 5 import jakarta.validation.constraints.Size;
6 import lombok.Data; 6 import lombok.Data;
7
7 import java.math.BigDecimal; 8 import java.math.BigDecimal;
8 import java.util.Date;
9 9
10 /** 10 /**
11 * @program: 11 * @program:
...@@ -39,10 +39,17 @@ public class EnterpriseAttachmentRQVO { ...@@ -39,10 +39,17 @@ public class EnterpriseAttachmentRQVO {
39 private String enterpriseGuid; 39 private String enterpriseGuid;
40 40
41 /** 41 /**
42 * 文件唯一标识
43 */
44 @Schema(description = "文件唯一标识")
45 private String fileId;
46
47 /**
42 * 文件名称 48 * 文件名称
43 */ 49 */
44 @Schema(description = "文件名称") 50 @Schema(description = "文件名称")
45 @Size(max = 50, message = "文件名称长度超过50") 51 @Size(max = 50, message = "文件名称长度超过50")
52 @NotBlank(message = "文件名称为空.")
46 private String fileName; 53 private String fileName;
47 54
48 /** 55 /**
...@@ -50,6 +57,7 @@ public class EnterpriseAttachmentRQVO { ...@@ -50,6 +57,7 @@ public class EnterpriseAttachmentRQVO {
50 */ 57 */
51 @Schema(description = "文件类型【详情 开发主体附件类型数据字典】") 58 @Schema(description = "文件类型【详情 开发主体附件类型数据字典】")
52 @Size(max = 10, message = "文件类型【详情 开发主体附件类型数据字典】长度超过10") 59 @Size(max = 10, message = "文件类型【详情 开发主体附件类型数据字典】长度超过10")
60 @NotBlank(message = "文件类型为空.")
53 private String fileType; 61 private String fileType;
54 62
55 /** 63 /**
...@@ -63,6 +71,7 @@ public class EnterpriseAttachmentRQVO { ...@@ -63,6 +71,7 @@ public class EnterpriseAttachmentRQVO {
63 */ 71 */
64 @Schema(description = "文件地址") 72 @Schema(description = "文件地址")
65 @Size(max = 500, message = "文件地址长度超过500") 73 @Size(max = 500, message = "文件地址长度超过500")
74 @NotBlank(message = "文件地址为空.")
66 private String fileUrl; 75 private String fileUrl;
67 76
68 /******** 库表存储属性 需处理 *****/ 77 /******** 库表存储属性 需处理 *****/
......
1 package com.csbr.qingcloud.portal.domain.vo; 1 package com.csbr.qingcloud.portal.domain.vo;
2 2
3 import com.csbr.cloud.common.annotations.SystemParamsDict;
3 import io.swagger.v3.oas.annotations.media.Schema; 4 import io.swagger.v3.oas.annotations.media.Schema;
4 import com.fasterxml.jackson.annotation.JsonFormat;
5 import lombok.Data; 5 import lombok.Data;
6
6 import java.math.BigDecimal; 7 import java.math.BigDecimal;
7 import java.util.Date;
8 8
9 /** 9 /**
10 * @program: 10 * @program:
...@@ -47,6 +47,13 @@ public class EnterpriseAttachmentRSVO { ...@@ -47,6 +47,13 @@ public class EnterpriseAttachmentRSVO {
47 private String fileType; 47 private String fileType;
48 48
49 /** 49 /**
50 * 文件类型名称
51 */
52 @Schema(description = "文件类型名称")
53 @SystemParamsDict(dictTypeName = "开发主体附件类型", codeFieldName = "fileType")
54 private String fileTypeName;
55
56 /**
50 * 文件大小 57 * 文件大小
51 */ 58 */
52 @Schema(description = "文件大小") 59 @Schema(description = "文件大小")
......
1 package com.csbr.qingcloud.portal.domain.vo;
2
3 import csbr.cloud.entity.domain.base.dto.BasePageDTO;
4 import io.swagger.v3.oas.annotations.media.Schema;
5 import lombok.EqualsAndHashCode;
6 import lombok.Data;
7 import java.util.Date;
8
9 /**
10 * @program:
11 * @description: 开发主体领域信息查询参数
12 * @author: makejava
13 * @create: 2025-09-12 11:02
14 **/
15 @EqualsAndHashCode(callSuper = true)
16 @Data
17 @Schema(title = "开发主体领域信息查询参数")
18 public class EnterpriseDomainQueryVO extends BasePageDTO {
19
20 }
1 package com.csbr.qingcloud.portal.domain.vo;
2
3 import com.fasterxml.jackson.annotation.JsonFormat;
4 import io.swagger.v3.oas.annotations.media.Schema;
5 import jakarta.validation.constraints.NotBlank;
6 import jakarta.validation.constraints.NotNull;
7 import jakarta.validation.constraints.Pattern;
8 import jakarta.validation.constraints.Size;
9 import lombok.Data;
10
11 import java.util.Date;
12
13 /**
14 * @program:
15 * @description: 开发主体领域信息新增、修改参数
16 * @author: makejava
17 * @create: 2025-09-12 11:02
18 **/
19 @Data
20 @Schema(title = "开发主体领域信息新增、修改参数")
21 public class EnterpriseDomainRQVO {
22
23 /**
24 * 系统唯一标识
25 */
26 @Schema(description = "系统唯一标识")
27 @Size(max = 32, message = "系统唯一标识长度超过32")
28 private String guid;
29
30 /**
31 * 企业认证唯一标识
32 */
33 @Schema(description = "企业认证唯一标识")
34 @Size(max = 32, message = "企业认证唯一标识长度超过32")
35 private String enterpriseGuid;
36
37 /**
38 * 领域代码
39 */
40 @Schema(description = "领域代码")
41 @Size(max = 10, message = "领域代码长度超过10")
42 @NotBlank(message = "领域代码为空.")
43 private String domainId;
44
45 /**
46 * 授权协议号
47 */
48 @Schema(description = "授权协议号")
49 @Size(max = 50, message = "授权协议号长度超过50")
50 @NotBlank(message = "授权协议号为空.")
51 private String authId;
52
53 /**
54 * 协议开始日期
55 */
56 @Schema(description = "协议开始日期")
57 @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
58 @NotNull(message = "协议开始日期为空.")
59 private Date domainStartTime;
60
61 /**
62 * 协议结束日期
63 */
64 @Schema(description = "协议结束日期")
65 @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
66 @NotNull(message = "协议结束日期为空.")
67 private Date domainEndTime;
68
69 /**
70 * 协议签订日期
71 */
72 @Schema(description = "协议签订日期")
73 @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
74 @NotNull(message = "协议签订日期为空.")
75 private Date domainSignTime;
76
77 /**
78 * 协议签订人
79 */
80 @Schema(description = "协议签订人")
81 @Size(max = 20, message = "协议签订人长度超过20")
82 @NotBlank(message = "协议签订人为空.")
83 private String signee;
84
85 /**
86 * 协议状态,如10【10-生效中;20-已终止】
87 */
88 @Schema(description = "协议状态,如10【10-生效中;20-已终止】")
89 @Size(max = 10, message = "协议状态,如10【10-生效中;20-已终止】长度超过10")
90 @NotBlank(message = "协议状态为空.")
91 @Pattern(regexp = "^10|20$", message = "领域代码应该为10、20中的值。")
92 private String domainStatus;
93
94 /******** 库表存储属性 需处理 *****/
95
96 /******** 自定义扩展 *****/
97
98 /******** 子对象 *****/
99
100 }
1 package com.csbr.qingcloud.portal.domain.vo;
2
3 import com.csbr.cloud.common.annotations.SystemParamsDict;
4 import com.fasterxml.jackson.annotation.JsonFormat;
5 import io.swagger.v3.oas.annotations.media.Schema;
6 import lombok.Data;
7
8 import java.util.Date;
9
10 /**
11 * @program:
12 * @description: 开发主体领域信息返回参数
13 * @author: makejava
14 * @create: 2025-09-12 11:02
15 **/
16 @Data
17 @Schema(title = "开发主体领域信息返回参数")
18 public class EnterpriseDomainRSVO {
19
20 /**
21 * 系统唯一标识
22 */
23 @Schema(description = "系统唯一标识")
24 private String guid;
25
26 /**
27 * 企业唯一标识
28 */
29 @Schema(description = "企业唯一标识")
30 private String tenantGuid;
31
32 /**
33 * 企业认证唯一标识
34 */
35 @Schema(description = "企业认证唯一标识")
36 private String enterpriseGuid;
37
38 /**
39 * 领域代码
40 */
41 @Schema(description = "领域代码")
42 private String domainId;
43
44 @Schema(title = "领域名称")
45 @SystemParamsDict(dictTypeName = "领域", codeFieldName = "domainId")
46 private String domainIdName;
47
48 /**
49 * 授权协议号
50 */
51 @Schema(description = "授权协议号")
52 private String authId;
53
54 /**
55 * 协议开始日期
56 */
57 @Schema(description = "协议开始日期")
58 @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
59 private Date domainStartTime;
60
61 /**
62 * 协议结束日期
63 */
64 @Schema(description = "协议结束日期")
65 @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
66 private Date domainEndTime;
67
68 /**
69 * 协议签订日期
70 */
71 @Schema(description = "协议签订日期")
72 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
73 private Date domainSignTime;
74
75 /**
76 * 协议签订人
77 */
78 @Schema(description = "协议签订人")
79 private String signee;
80
81 /**
82 * 协议状态,如10【10-生效中;20-已终止】
83 */
84 @Schema(description = "协议状态,如10【10-生效中;20-已终止】")
85 private String domainStatus;
86
87 @Schema(title = "协议状态名称")
88 @SystemParamsDict(dictTypeName = "协议状态", codeFieldName = "domainStatus")
89 private String domainStatusName;
90
91 /******** 库表存储属性 需处理 *****/
92
93 /******** 自定义扩展 *****/
94
95 /******** 子对象 *****/
96
97 }
1 package com.csbr.qingcloud.portal.domain.vo; 1 package com.csbr.qingcloud.portal.domain.vo;
2 2
3 import com.csbr.cloud.workflow.domain.vo.appove.FlowRQBaseVO; 3 import com.csbr.cloud.workflow.domain.vo.appove.FlowRQBaseVO;
4 import io.swagger.v3.oas.annotations.media.Schema;
5 import com.fasterxml.jackson.annotation.JsonFormat; 4 import com.fasterxml.jackson.annotation.JsonFormat;
5 import io.swagger.v3.oas.annotations.media.Schema;
6 import lombok.Data; 6 import lombok.Data;
7
7 import java.math.BigDecimal; 8 import java.math.BigDecimal;
8 import java.util.Date; 9 import java.util.Date;
10 import java.util.List;
9 11
10 /** 12 /**
11 * @program: D:/git/ms-data-circulation-portal-service 13 * @program: D:/git/ms-data-circulation-portal-service
...@@ -175,10 +177,37 @@ public class EnterpriseRQVO extends FlowRQBaseVO { ...@@ -175,10 +177,37 @@ public class EnterpriseRQVO extends FlowRQBaseVO {
175 @Schema(description = "业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃;B 变更中; 默认 N】") 177 @Schema(description = "业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃;B 变更中; 默认 N】")
176 private String bizApproveState; 178 private String bizApproveState;
177 179
180 @Schema(description = "组织机构性质")
181 private String institutionType;
182
183 @Schema(description = "详细地址")
184 private String detailedAddress;
185
186 @Schema(description = "行业分类")
187 private String industry;
188
189 @Schema(description = "行业小类")
190 private String industrySmallcode;
191
192 @Schema(description = "授权方式")
193 private String authorizationMethod = "2";
194
195 @Schema(description = "身份状态")
196 private String identityState = "N";
197
198 @Schema(description = "经办人证件类型")
199 private String handlePersonIdType;
200
178 /******** 库表存储属性 需处理 *****/ 201 /******** 库表存储属性 需处理 *****/
179 202
180 /******** 自定义扩展 *****/ 203 /******** 自定义扩展 *****/
181 204
182 /******** 子对象 *****/ 205 /******** 子对象 *****/
183 206
207 @Schema(description = "开发主体附件信息")
208 private List<EnterpriseAttachmentRQVO> attachmentRQVOS;
209
210 @Schema(description = "开发主体领域信息")
211 private List<EnterpriseDomainRQVO> domainRQVOS;
212
184 } 213 }
......
1 package com.csbr.qingcloud.portal.domain.vo; 1 package com.csbr.qingcloud.portal.domain.vo;
2 2
3 import io.swagger.v3.oas.annotations.media.Schema; 3 import com.csbr.cloud.common.annotations.SystemParamsDict;
4 import com.csbr.cloud.workflow.domain.vo.appove.BizApproveVO;
4 import com.fasterxml.jackson.annotation.JsonFormat; 5 import com.fasterxml.jackson.annotation.JsonFormat;
6 import io.swagger.v3.oas.annotations.media.Schema;
5 import lombok.Data; 7 import lombok.Data;
6 import com.csbr.cloud.workflow.domain.vo.appove.BizApproveVO; 8
7 import java.math.BigDecimal; 9 import java.math.BigDecimal;
8 import java.util.Date; 10 import java.util.Date;
9 import java.util.List; 11 import java.util.List;
...@@ -198,6 +200,56 @@ public class EnterpriseRSVO { ...@@ -198,6 +200,56 @@ public class EnterpriseRSVO {
198 @Schema(title = "跨平台审批状态(N 初始 A 审批中 Y 已通过 R 驳回 C 已撤销)") 200 @Schema(title = "跨平台审批状态(N 初始 A 审批中 Y 已通过 R 驳回 C 已撤销)")
199 private String crossPlatformApproveState; 201 private String crossPlatformApproveState;
200 202
203 @Schema(description = "组织机构性质")
204 private String institutionType;
205
206 @Schema(description = "组织机构性质名称")
207 @SystemParamsDict(dictTypeName = "组织机构性质", codeFieldName = "institutionType")
208 private String institutionTypeName;
209
210 @Schema(description = "详细地址")
211 private String detailedAddress;
212
213 @Schema(description = "行业分类")
214 private String industry;
215
216 @Schema(description = "行业分类名称")
217 @SystemParamsDict(dictTypeName = "行业分类", codeFieldName = "industry")
218 private String industryName;
219
220 @Schema(description = "行业小类")
221 private String industrySmallcode;
222
223 @Schema(description = "行业小类名称")
224 @SystemParamsDict(dictTypeName = "行业分类", codeFieldName = "industrySmallcode")
225 private String industrySmallcodeName;
226
227 @Schema(description = "认证方式")
228 private String authenticationMethod;
229
230 @Schema(description = "认证状态")
231 private String authenticationState;
232
233 @Schema(description = "认证时间")
234 @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
235 private Date authenticationTime;
236
237 @Schema(description = "认证等级")
238 private String authenticationLevel;
239
240 @Schema(description = "身份状态")
241 private String identityState;
242
243 @Schema(description = "授权方式")
244 private String authorizationMethod;
245
246 @Schema(description = "经办人证件类型")
247 private String handlePersonIdType;
248
249 @Schema(description = "经办人证件类型名称")
250 @SystemParamsDict(dictTypeName = "证件类型", codeFieldName = "handlePersonIdType")
251 private String handlePersonIdTypeName;
252
201 /******** 库表存储属性 需处理 *****/ 253 /******** 库表存储属性 需处理 *****/
202 254
203 /******** 自定义扩展 *****/ 255 /******** 自定义扩展 *****/
...@@ -216,4 +268,10 @@ public class EnterpriseRSVO { ...@@ -216,4 +268,10 @@ public class EnterpriseRSVO {
216 268
217 /******** 子对象 *****/ 269 /******** 子对象 *****/
218 270
271 @Schema(description = "开发主体附件信息返回参数")
272 private List<EnterpriseAttachmentRSVO> attachmentRSVOS;
273
274 @Schema(description = "开发主体领域信息返回参数")
275 private List<EnterpriseDomainRSVO> domainRSVOS;
276
219 } 277 }
......
1 package com.csbr.qingcloud.portal.feign;
2
3 import com.csbr.cloud.common.config.FastCallFeignConfiguration;
4 import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
5 import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
6 import org.springframework.cloud.openfeign.FeignClient;
7 import org.springframework.core.io.ByteArrayResource;
8 import org.springframework.http.MediaType;
9 import org.springframework.http.ResponseEntity;
10 import org.springframework.web.bind.annotation.RequestMapping;
11 import org.springframework.web.bind.annotation.RequestMethod;
12 import org.springframework.web.bind.annotation.RequestParam;
13
14 /**
15 * @program:
16 * @description: 公共服务调用
17 * @author: lixiang
18 * @create: 2023-11-07 17:55
19 **/
20 @FeignClient(value = "ms-daop-common-service", configuration = FastCallFeignConfiguration.class)
21 public interface DaopCommonFeign {
22 /**
23 * 下载文件流
24 * @param filePath
25 * @return
26 */
27 @HystrixCommand(fallbackMethod = "CommonUtil.sleepFallback", commandProperties =
28 {
29 @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "9000")
30 })
31 @RequestMapping(value = "/obs/download-file-stream",method = RequestMethod.GET, produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
32 ResponseEntity<ByteArrayResource> downloadFile(@RequestParam(value = "filePath", required = true) String filePath);
33
34 }
...@@ -187,4 +187,36 @@ public class MfEnterprise extends BaseDO { ...@@ -187,4 +187,36 @@ public class MfEnterprise extends BaseDO {
187 @Name("业务审批状态") 187 @Name("业务审批状态")
188 private String bizApproveState; 188 private String bizApproveState;
189 189
190 @Name("组织机构性质")
191 private String institutionType;
192
193 @Name("详细地址")
194 private String detailedAddress;
195
196 @Name("行业分类")
197 private String industry;
198
199 @Name("行业小类")
200 private String industrySmallcode;
201
202 @Name("认证方式")
203 private String authenticationMethod;
204
205 @Name("认证状态")
206 private String authenticationState;
207
208 @Name("认证时间")
209 private Date authenticationTime;
210
211 @Name("认证等级")
212 private String authenticationLevel;
213
214 @Name("身份状态")
215 private String identityState;
216
217 @Name("授权方式")
218 private String authorizationMethod;
219
220 @Name("经办人证件类型")
221 private String handlePersonIdType;
190 } 222 }
......
...@@ -205,4 +205,37 @@ public class MfEnterpriseChangeApprove extends BaseDO { ...@@ -205,4 +205,37 @@ public class MfEnterpriseChangeApprove extends BaseDO {
205 @Name("数据类型") 205 @Name("数据类型")
206 private String dataType; 206 private String dataType;
207 207
208 @Name("组织机构性质")
209 private String institutionType;
210
211 @Name("详细地址")
212 private String detailedAddress;
213
214 @Name("行业分类")
215 private String industry;
216
217 @Name("行业小类")
218 private String industrySmallcode;
219
220 @Name("认证方式")
221 private String authenticationMethod;
222
223 @Name("认证状态")
224 private String authenticationState;
225
226 @Name("认证时间")
227 private Date authenticationTime;
228
229 @Name("认证等级")
230 private String authenticationLevel;
231
232 @Name("身份状态")
233 private String identityState;
234
235 @Name("授权方式")
236 private String authorizationMethod;
237
238 @Name("经办人证件类型")
239 private String handlePersonIdType;
240
208 } 241 }
......
1 package com.csbr.qingcloud.portal.mybatis.entity;
2
3 import com.baomidou.mybatisplus.annotation.FieldStrategy;
4 import com.baomidou.mybatisplus.annotation.TableField;
5 import csbr.cloud.entity.domain.base.dao.BaseDO;
6 import jdk.jfr.Name;
7 import lombok.Data;
8 import lombok.EqualsAndHashCode;
9 import lombok.experimental.Accessors;
10 import java.util.Date;
11
12 /**
13 * @program:
14 * @description: 开发主体领域信息实体
15 * @author: makejava
16 * @create: 2025-09-12 11:02
17 **/
18 @Data
19 @EqualsAndHashCode(callSuper = true)
20 @Accessors(chain = true)
21 @Name("开发主体领域信息")
22 public class MfEnterpriseDomain extends BaseDO {
23
24 /**
25 * 企业唯一标识
26 */
27 @Name("企业唯一标识")
28 private String tenantGuid;
29
30 /**
31 * 企业认证唯一标识
32 */
33 @Name("企业认证唯一标识")
34 private String enterpriseGuid;
35
36 /**
37 * 领域代码
38 */
39 @Name("领域代码")
40 private String domainId;
41
42 /**
43 * 授权协议号
44 */
45 @Name("授权协议号")
46 private String authId;
47
48 /**
49 * 协议开始日期
50 */
51 @Name("协议开始日期")
52 private Date domainStartTime;
53
54 /**
55 * 协议结束日期
56 */
57 @Name("协议结束日期")
58 private Date domainEndTime;
59
60 /**
61 *
62 */
63 @Name("协议签订日期")
64 private Date domainSignTime;
65
66 /**
67 * 协议签订人
68 */
69 @Name("协议签订人")
70 private String signee;
71
72 /**
73 * 协议状态,如10【10-生效中;20-已终止】
74 */
75 @Name("协议状态,如10【10-生效中;20-已终止】")
76 private String domainStatus;
77
78 }
1 package com.csbr.qingcloud.portal.mybatis.mapper;
2
3 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4 import org.apache.ibatis.annotations.Mapper;
5 import com.csbr.qingcloud.portal.mybatis.entity.MfEnterpriseDomain;
6
7 /**
8 * @program:
9 * @description: 开发主体领域信息 Mapper 接口
10 * @author: makejava
11 * @create: 2025-09-12 11:02
12 **/
13 @Mapper
14 public interface MfEnterpriseDomainMapper extends BaseMapper<MfEnterpriseDomain> {
15
16 }
1 package com.csbr.qingcloud.portal.mybatis.service;
2
3 import com.csbr.cloud.base.service.CsbrService;
4 import com.csbr.qingcloud.portal.mybatis.entity.MfEnterpriseDomain;
5
6 /**
7 * @program:
8 * @description: 开发主体领域信息逻辑层接口
9 * @author: makejava
10 * @create: 2025-09-12 11:02
11 **/
12 public interface MfEnterpriseDomainService extends CsbrService<MfEnterpriseDomain> {
13
14 }
1 package com.csbr.qingcloud.portal.mybatis.service.impl;
2
3 import com.csbr.cloud.mybatis.service.impl.CsbrServiceImpl;
4 import com.csbr.qingcloud.portal.mybatis.mapper.MfEnterpriseDomainMapper;
5 import com.csbr.qingcloud.portal.mybatis.entity.MfEnterpriseDomain;
6 import com.csbr.qingcloud.portal.mybatis.service.MfEnterpriseDomainService;
7 import jakarta.annotation.Resource;
8 import org.springframework.stereotype.Service;
9
10 /**
11 * @program:
12 * @description: 开发主体领域信息逻辑层接口实现
13 * @author: makejava
14 * @create: 2025-09-12 11:02
15 **/
16 @Service
17 public class MfEnterpriseDomainServiceImpl extends CsbrServiceImpl<MfEnterpriseDomainMapper, MfEnterpriseDomain> implements MfEnterpriseDomainService {
18
19 @Resource
20 private MfEnterpriseDomainMapper mfEnterpriseDomainMapper;
21
22 }
1 package com.csbr.qingcloud.portal.service; 1 package com.csbr.qingcloud.portal.service;
2 2
3 import com.csbr.qingcloud.portal.domain.vo.dataExchange.*; 3 import com.csbr.qingcloud.portal.domain.vo.dataExchange.*;
4 import com.csbr.qingcloud.portal.mybatis.entity.MfEnterprise;
4 import csbr.cloud.entity.domain.base.vo.PageListVO; 5 import csbr.cloud.entity.domain.base.vo.PageListVO;
5 import com.csbr.qingcloud.portal.domain.vo.EnterpriseAttachmentQueryVO; 6 import com.csbr.qingcloud.portal.domain.vo.EnterpriseAttachmentQueryVO;
6 import com.csbr.qingcloud.portal.domain.vo.EnterpriseAttachmentRQVO; 7 import com.csbr.qingcloud.portal.domain.vo.EnterpriseAttachmentRQVO;
7 import com.csbr.qingcloud.portal.domain.vo.EnterpriseAttachmentRSVO; 8 import com.csbr.qingcloud.portal.domain.vo.EnterpriseAttachmentRSVO;
8 9
9 import java.util.List; 10 import java.util.List;
11 import java.util.Map;
10 12
11 /** 13 /**
12 * @program: 14 * @program:
...@@ -83,4 +85,36 @@ public interface EnterpriseAttachmentService { ...@@ -83,4 +85,36 @@ public interface EnterpriseAttachmentService {
83 * @return 85 * @return
84 */ 86 */
85 String getEnterpriseAttachmentUrl(String fileId); 87 String getEnterpriseAttachmentUrl(String fileId);
88
89 /**
90 * 批量新增开发主体附件信息
91 * @param attachmentRQVOS
92 * @param guid
93 * @param tenantGuid
94 * @param isRequired
95 */
96 void batchSave(List<EnterpriseAttachmentRQVO> attachmentRQVOS, String guid, String tenantGuid, Boolean isRequired);
97
98 /**
99 * 删除开发主体附件信息
100 * @param enterpriseGuids
101 */
102 void removeByEnterpriseGuids(List<String> enterpriseGuids);
103
104 /**
105 * 批量修改开发主体附件信息
106 * @param attachmentRQVOS
107 * @param guid
108 * @param tenantGuid
109 * @param isRequired
110 */
111 void batchUpdate(List<EnterpriseAttachmentRQVO> attachmentRQVOS, String guid, String tenantGuid, Boolean isRequired);
112
113 /**
114 * 根据企业认证guid查询附件信息
115 * @param enterpriseGuids
116 * @return
117 */
118 Map<String, List<EnterpriseAttachmentRSVO>> getMapByEnterpriseGuids(List<String> enterpriseGuids);
119
86 } 120 }
......
1 package com.csbr.qingcloud.portal.service;
2
3 import com.csbr.qingcloud.portal.domain.vo.EnterpriseDomainQueryVO;
4 import com.csbr.qingcloud.portal.domain.vo.EnterpriseDomainRQVO;
5 import com.csbr.qingcloud.portal.domain.vo.EnterpriseDomainRSVO;
6 import csbr.cloud.entity.domain.base.vo.PageListVO;
7
8 import java.util.List;
9 import java.util.Map;
10
11 /**
12 * @program:
13 * @description: 开发主体领域信息业务逻辑接口
14 * @author: makejava
15 * @create: 2025-09-12 11:02
16 **/
17 public interface EnterpriseDomainService {
18
19 /**
20 * 开发主体领域信息分页查询
21 * @author makejava
22 * @date 2025-09-12 11:02
23 * @param queryVO
24 * @return com.csbr.cloud.mybatis.entity.PageListVO<com.csbr.qingcloud.portal.domain.vo.EnterpriseDomainRSVO>
25 */
26 PageListVO<EnterpriseDomainRSVO> pageList(EnterpriseDomainQueryVO queryVO);
27
28 /**
29 * 开发主体领域信息获取详情数据
30 * @author makejava
31 * @date 2025-09-12 11:02
32 * @param guid
33 * @return com.csbr.qingcloud.portal.domain.vo.EnterpriseDomainRSVO
34 */
35 EnterpriseDomainRSVO getEnterpriseDomainDetail(String guid);
36
37 /**
38 * 开发主体领域信息数据新增
39 * @author makejava
40 * @date 2025-09-12 11:02
41 * @param rqVO
42 * @return boolean
43 */
44 void saveEnterpriseDomain(EnterpriseDomainRQVO rqVO);
45
46 /**
47 * 开发主体领域信息数据修改
48 * @author makejava
49 * @date 2025-09-12 11:02
50 * @param rqVO
51 * @return boolean
52 */
53 void updateEnterpriseDomain(EnterpriseDomainRQVO rqVO);
54
55 /**
56 * 开发主体领域信息数据删除
57 * @author makejava
58 * @date 2025-09-12 11:02
59 * @param guids
60 * @return void
61 */
62 void removeByGuids(List<String> guids);
63
64 /**
65 * 开发主体领域信息数据删除、并有相关的处理操作
66 * @author makejava
67 * @date 2025-09-12 11:02
68 * @param guids
69 * @return void
70 */
71 void removeHandleByGuids(List<String> guids);
72
73 /**
74 * 批量新增开发主体领域信息
75 * @param domainRQVOS
76 * @param guid
77 */
78 void batchSave(List<EnterpriseDomainRQVO> domainRQVOS, String guid);
79
80 /**
81 * 删除开发主体领域信息
82 * @param enterpriseGuids
83 */
84 void removeByEnterpriseGuids(List<String> enterpriseGuids);
85
86 /**
87 * 批量新增开发主体领域信息
88 * @param domainRQVOS
89 * @param guid
90 */
91 void batchUpdate(List<EnterpriseDomainRQVO> domainRQVOS, String guid);
92
93 /**
94 * 根据企业认证guid查询企业领域信息
95 * @param enterpriseGuids
96 * @return
97 */
98 Map<String, List<EnterpriseDomainRSVO>> getMapByEnterpriseGuids(List<String> enterpriseGuids);
99 }
...@@ -115,6 +115,21 @@ public interface EnterpriseService { ...@@ -115,6 +115,21 @@ public interface EnterpriseService {
115 JSExchageCommonRes<JSExchagePageListVO<JSEnterpriseRSVO>> enterpriseData(JSBaseRQVO<JSEnterpriseQueryVO> queryVO); 115 JSExchageCommonRes<JSExchagePageListVO<JSEnterpriseRSVO>> enterpriseData(JSBaseRQVO<JSEnterpriseQueryVO> queryVO);
116 116
117 /** 117 /**
118 * 根据会员guids查询企业信息
119 * @param guids
120 * @return
121 */
122 List<EnterpriseRSVO> listByTenantGuids(List<String> guids);
123
124 /**
125 * 企业信息-修改身份状态
126 * @param logonUser
127 * @param identityState
128 * @return
129 */
130 Boolean updateIdentityState(String logonUser, String identityState);
131
132 /**
118 * 按名称或者统一社会信用代码查企业信息详情 133 * 按名称或者统一社会信用代码查企业信息详情
119 * @param tenantName 134 * @param tenantName
120 * @param uscc 135 * @param uscc
......
1 package com.csbr.qingcloud.portal.service.impl; 1 package com.csbr.qingcloud.portal.service.impl;
2 2
3 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 3 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
4 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
4 import com.baomidou.mybatisplus.core.toolkit.Wrappers; 5 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
5 import com.csbr.cloud.common.enums.SystemError; 6 import com.csbr.cloud.common.enums.SystemError;
6 import com.csbr.cloud.common.exception.CsbrSystemException; 7 import com.csbr.cloud.common.exception.CsbrSystemException;
...@@ -8,6 +9,7 @@ import com.csbr.cloud.common.util.CommonUtil; ...@@ -8,6 +9,7 @@ import com.csbr.cloud.common.util.CommonUtil;
8 import com.csbr.cloud.common.util.CsbrBeanUtil; 9 import com.csbr.cloud.common.util.CsbrBeanUtil;
9 import com.csbr.cloud.common.util.MessageSourceUtil; 10 import com.csbr.cloud.common.util.MessageSourceUtil;
10 import com.csbr.qingcloud.portal.domain.vo.dataExchange.*; 11 import com.csbr.qingcloud.portal.domain.vo.dataExchange.*;
12 import com.csbr.qingcloud.portal.feign.DaopCommonFeign;
11 import com.csbr.qingcloud.portal.mybatis.entity.MfEnterprise; 13 import com.csbr.qingcloud.portal.mybatis.entity.MfEnterprise;
12 import com.csbr.qingcloud.portal.mybatis.service.MfEnterpriseService; 14 import com.csbr.qingcloud.portal.mybatis.service.MfEnterpriseService;
13 import csbr.cloud.entity.domain.base.vo.PageListVO; 15 import csbr.cloud.entity.domain.base.vo.PageListVO;
...@@ -17,18 +19,25 @@ import com.csbr.qingcloud.portal.domain.vo.EnterpriseAttachmentRSVO; ...@@ -17,18 +19,25 @@ import com.csbr.qingcloud.portal.domain.vo.EnterpriseAttachmentRSVO;
17 import com.csbr.qingcloud.portal.mybatis.entity.MfEnterpriseAttachment; 19 import com.csbr.qingcloud.portal.mybatis.entity.MfEnterpriseAttachment;
18 import com.csbr.qingcloud.portal.mybatis.service.MfEnterpriseAttachmentService; 20 import com.csbr.qingcloud.portal.mybatis.service.MfEnterpriseAttachmentService;
19 import com.csbr.qingcloud.portal.service.EnterpriseAttachmentService; 21 import com.csbr.qingcloud.portal.service.EnterpriseAttachmentService;
22 import csbr.cloud.entity.domain.easyexcel.MockMultipartFile;
20 import csbr.cloud.entity.enums.ApprovalStateEnum; 23 import csbr.cloud.entity.enums.ApprovalStateEnum;
21 import jakarta.annotation.Resource; 24 import jakarta.annotation.Resource;
22 import lombok.extern.slf4j.Slf4j; 25 import lombok.extern.slf4j.Slf4j;
23 import org.apache.commons.collections.CollectionUtils; 26 import org.apache.commons.collections.CollectionUtils;
24 import org.apache.commons.lang3.ObjectUtils; 27 import org.apache.commons.lang3.ObjectUtils;
25 import org.apache.commons.lang3.StringUtils; 28 import org.apache.commons.lang3.StringUtils;
29 import org.springframework.core.io.ByteArrayResource;
30 import org.springframework.http.HttpStatus;
31 import org.springframework.http.ResponseEntity;
26 import org.springframework.stereotype.Service; 32 import org.springframework.stereotype.Service;
27 import org.springframework.transaction.annotation.Transactional; 33 import org.springframework.transaction.annotation.Transactional;
34 import org.springframework.web.multipart.MultipartFile;
28 35
29 import java.util.ArrayList; 36 import java.math.BigDecimal;
30 import java.util.Collections; 37 import java.net.URLDecoder;
31 import java.util.List; 38 import java.nio.charset.StandardCharsets;
39 import java.util.*;
40 import java.util.stream.Collectors;
32 41
33 /** 42 /**
34 * @program: 43 * @program:
...@@ -57,6 +66,9 @@ public class EnterpriseAttachmentServiceImpl implements EnterpriseAttachmentServ ...@@ -57,6 +66,9 @@ public class EnterpriseAttachmentServiceImpl implements EnterpriseAttachmentServ
57 @Resource 66 @Resource
58 private MfEnterpriseService mfEnterpriseService; 67 private MfEnterpriseService mfEnterpriseService;
59 68
69 @Resource
70 private DaopCommonFeign daopCommonFeign;
71
60 /** 72 /**
61 * 开发主体附件信息分页查询 73 * 开发主体附件信息分页查询
62 * @author makejava 74 * @author makejava
...@@ -266,6 +278,76 @@ public class EnterpriseAttachmentServiceImpl implements EnterpriseAttachmentServ ...@@ -266,6 +278,76 @@ public class EnterpriseAttachmentServiceImpl implements EnterpriseAttachmentServ
266 return null; 278 return null;
267 } 279 }
268 280
281 @Override
282 @Transactional
283 public void batchSave(List<EnterpriseAttachmentRQVO> attachmentRQVOS, String guid, String tenantGuid, Boolean isRequired) {
284 if (ObjectUtils.isNotEmpty(attachmentRQVOS)) {
285 List<MfEnterpriseAttachment> attachmentList = new ArrayList<>();
286 for (EnterpriseAttachmentRQVO attachmentRQVO : attachmentRQVOS) {
287 attachmentRQVO.setGuid(null);
288 attachmentRQVO.setEnterpriseGuid(guid);
289 attachmentRQVO.setTenantGuid(tenantGuid);
290 // 获取文件大小
291 // 下载文件流
292 String fileUrl = attachmentRQVO.getFileUrl();
293 String url = URLDecoder.decode(fileUrl.split("\\?AccessKeyId")[0], StandardCharsets.UTF_8);
294 String fileName = attachmentRQVO.getFileName().split("\\.")[0];
295 MultipartFile multipartFile = null;
296 ResponseEntity<ByteArrayResource> responseEntity = daopCommonFeign.downloadFile(url);
297 if (HttpStatus.OK.equals(responseEntity.getStatusCode()) && ObjectUtils.isNotEmpty(responseEntity.getBody())) {
298 multipartFile = new MockMultipartFile(fileName, fileName, "application/octet-stream", responseEntity.getBody().getByteArray());
299 }
300 if (multipartFile == null || multipartFile.isEmpty()) {
301 attachmentRQVO.setFileSize(BigDecimal.ZERO);
302 } else {
303 attachmentRQVO.setFileSize(BigDecimal.valueOf(multipartFile.getSize() / 1024.0));
304 }
305 attachmentRQVO.setFileId("enterprise_" + CommonUtil.newGuid().toUpperCase(Locale.ROOT));
306
307 MfEnterpriseAttachment mfEnterpriseAttachment = convertToEntity(attachmentRQVO);
308 mfEnterpriseAttachmentService.csbrAddEntity(mfEnterpriseAttachment);
309 attachmentList.add(mfEnterpriseAttachment);
310 }
311 mfEnterpriseAttachmentService.saveBatch(attachmentList);
312 }
313 }
314
315 @Transactional
316 @Override
317 public void removeByEnterpriseGuids(List<String> enterpriseGuids) {
318 if (CollectionUtils.isEmpty(enterpriseGuids)) {
319 return;
320 }
321 LambdaUpdateWrapper<MfEnterpriseAttachment> updateWrapper = Wrappers.lambdaUpdate(MfEnterpriseAttachment.class);
322 updateWrapper.in(MfEnterpriseAttachment::getEnterpriseGuid, enterpriseGuids);
323 mfEnterpriseAttachmentService.remove(updateWrapper);
324 }
325
326 @Override
327 @Transactional
328 public void batchUpdate(List<EnterpriseAttachmentRQVO> attachmentRQVOS, String guid, String tenantGuid, Boolean isRequired) {
329 // 删除开发主体附件信息
330 removeByEnterpriseGuids(Collections.singletonList(guid));
331
332 // 批量新增开发主体附件信息
333 batchSave(attachmentRQVOS, guid, tenantGuid, isRequired);
334 }
335
336 @Override
337 public Map<String, List<EnterpriseAttachmentRSVO>> getMapByEnterpriseGuids(List<String> enterpriseGuids) {
338 if (ObjectUtils.isEmpty(enterpriseGuids)) {
339 return null;
340 }
341 LambdaQueryWrapper<MfEnterpriseAttachment> queryWrapper = Wrappers.lambdaQuery(MfEnterpriseAttachment.class);
342 queryWrapper.in(MfEnterpriseAttachment::getEnterpriseGuid, enterpriseGuids);
343 queryWrapper.orderByAsc(MfEnterpriseAttachment::getCreateTime);
344 List<MfEnterpriseAttachment> enterpriseAttachments = mfEnterpriseAttachmentService.list(queryWrapper);
345 if (ObjectUtils.isEmpty(enterpriseAttachments)) {
346 return null;
347 }
348 return convertToVO(enterpriseAttachments).stream().collect(Collectors.groupingBy(EnterpriseAttachmentRSVO::getEnterpriseGuid));
349 }
350
269 /** 351 /**
270 * 开发主体附件信息新新增前置处理 352 * 开发主体附件信息新新增前置处理
271 * @author makejava 353 * @author makejava
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!