From 56edda8b97c40b6339cc5f5d167d64efe85d9719 Mon Sep 17 00:00:00 2001 From: "jiazheng.zhao" <2624533894@qq.com> Date: Fri, 7 Aug 2026 17:58:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=8F=91=E8=A1=8C=E8=B4=A7=E5=B8=81?= =?UTF-8?q?=E7=9A=84=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ControlSystemSignatureController.java | 26 +++++++-------- .../CurrencyGenerationRequestController.java | 20 +++++++----- ...rencyGenerationVerificationController.java | 25 ++++++++++----- .../rest/InstitutionIdentifierController.java | 16 ++++++---- .../rest/QuotaControlBitController.java | 32 ++++++++++++------- .../rest/QuotaRequestController.java | 28 +++++++++++----- 6 files changed, 92 insertions(+), 55 deletions(-) diff --git a/src/main/java/com/yau/digitalrmb/institutionidentity/interfaces/rest/ControlSystemSignatureController.java b/src/main/java/com/yau/digitalrmb/institutionidentity/interfaces/rest/ControlSystemSignatureController.java index f30f4ac..1e4947c 100644 --- a/src/main/java/com/yau/digitalrmb/institutionidentity/interfaces/rest/ControlSystemSignatureController.java +++ b/src/main/java/com/yau/digitalrmb/institutionidentity/interfaces/rest/ControlSystemSignatureController.java @@ -4,6 +4,8 @@ import com.yau.digitalrmb.institutionidentity.application.ControlSystemDigestRes import com.yau.digitalrmb.institutionidentity.application.ControlSystemSignatureResult; import com.yau.digitalrmb.institutionidentity.application.ControlSystemSignatureService; import com.yau.digitalrmb.institutionidentity.application.InstitutionKeySubject; +import com.yau.digitalrmb.institutionidentity.application.OperationMessageResult; +import com.yau.digitalrmb.institutionidentity.application.OperationStatusResult; import com.yau.digitalrmb.institutionidentity.application.SignatureResult; import com.yau.digitalrmb.institutionidentity.interfaces.dto.ControlSystemDigestRequest; import com.yau.digitalrmb.institutionidentity.interfaces.dto.ControlSystemSignRequest; @@ -49,25 +51,21 @@ public class ControlSystemSignatureController { } @PostMapping("/steps/package") - @Operation(summary = "打包控制系统签名反馈报文") - public ApiResponse packageResponse() { - return execute((subject, operator) -> service.packageResponse(subject, operator)); + @Operation(summary = "打包控制系统签名反馈报文", description = "成功响应的data仅返回message。") + public ApiResponse packageResponse() { + JwtUser user = AuthContextHolder.get(); + ControlSystemSignatureResult result = service.packageResponse( + InstitutionKeySubject.from(user), user.getUsername()); + return ApiResponse.success(new OperationMessageResult(result.getResponseMessage()), traceId()); } @PostMapping("/steps/send") - @Operation(summary = "中央银行发送控制系统签名反馈") - public ApiResponse send() { - return execute((subject, operator) -> service.send(subject, operator)); - } - - private ApiResponse execute(OperationExecutor executor) { + @Operation(summary = "中央银行发送控制系统签名反馈", description = "成功响应的data仅返回status。") + public ApiResponse send() { JwtUser user = AuthContextHolder.get(); - return ApiResponse.success(executor.execute(InstitutionKeySubject.from(user), user.getUsername()), traceId()); + ControlSystemSignatureResult result = service.send(InstitutionKeySubject.from(user), user.getUsername()); + return ApiResponse.success(new OperationStatusResult(result.getStatus()), traceId()); } private String traceId() { return MDC.get(TraceIdFilter.MDC_KEY); } - - private interface OperationExecutor { - ControlSystemSignatureResult execute(InstitutionKeySubject subject, String operator); - } } diff --git a/src/main/java/com/yau/digitalrmb/institutionidentity/interfaces/rest/CurrencyGenerationRequestController.java b/src/main/java/com/yau/digitalrmb/institutionidentity/interfaces/rest/CurrencyGenerationRequestController.java index bcaec59..cb00f8a 100644 --- a/src/main/java/com/yau/digitalrmb/institutionidentity/interfaces/rest/CurrencyGenerationRequestController.java +++ b/src/main/java/com/yau/digitalrmb/institutionidentity/interfaces/rest/CurrencyGenerationRequestController.java @@ -4,6 +4,8 @@ import com.yau.digitalrmb.institutionidentity.application.CurrencyDigestResult; import com.yau.digitalrmb.institutionidentity.application.CurrencyGenerationRequestService; import com.yau.digitalrmb.institutionidentity.application.CurrencyRequestResult; import com.yau.digitalrmb.institutionidentity.application.InstitutionKeySubject; +import com.yau.digitalrmb.institutionidentity.application.OperationMessageResult; +import com.yau.digitalrmb.institutionidentity.application.OperationStatusResult; import com.yau.digitalrmb.institutionidentity.application.SignatureResult; import com.yau.digitalrmb.institutionidentity.interfaces.dto.CurrencyRequestStepRequest; import com.yau.digitalrmb.institutionidentity.interfaces.dto.GenerateCurrencyDigestRequest; @@ -52,19 +54,21 @@ public class CurrencyGenerationRequestController { } @PostMapping("/steps/package") - @Operation(summary = "打包货币生成请求报文") - public ApiResponse packageRequest() { + @Operation(summary = "打包货币生成请求报文", description = "成功响应的data仅返回message。") + public ApiResponse packageRequest() { JwtUser jwtUser = AuthContextHolder.get(); - return ApiResponse.success(currencyRequestService.packageRequest( - InstitutionKeySubject.from(jwtUser), jwtUser.getUsername()), traceId()); + CurrencyRequestResult result = currencyRequestService.packageRequest( + InstitutionKeySubject.from(jwtUser), jwtUser.getUsername()); + return ApiResponse.success(new OperationMessageResult(result.getRequestMessage()), traceId()); } @PostMapping("/steps/send") - @Operation(summary = "发送请求至央行", description = "只允许发送已经完成打包的货币生成请求报文。") - public ApiResponse send() { + @Operation(summary = "发送请求至央行", description = "成功响应的data仅返回status,不重复返回请求报文和页面完整数据。") + public ApiResponse send() { JwtUser jwtUser = AuthContextHolder.get(); - return ApiResponse.success(currencyRequestService.send( - InstitutionKeySubject.from(jwtUser), jwtUser.getUsername()), traceId()); + CurrencyRequestResult result = currencyRequestService.send( + InstitutionKeySubject.from(jwtUser), jwtUser.getUsername()); + return ApiResponse.success(new OperationStatusResult(result.getStatus()), traceId()); } @GetMapping("/page") diff --git a/src/main/java/com/yau/digitalrmb/institutionidentity/interfaces/rest/CurrencyGenerationVerificationController.java b/src/main/java/com/yau/digitalrmb/institutionidentity/interfaces/rest/CurrencyGenerationVerificationController.java index 665f2d6..1f4909f 100644 --- a/src/main/java/com/yau/digitalrmb/institutionidentity/interfaces/rest/CurrencyGenerationVerificationController.java +++ b/src/main/java/com/yau/digitalrmb/institutionidentity/interfaces/rest/CurrencyGenerationVerificationController.java @@ -7,6 +7,9 @@ import com.yau.digitalrmb.institutionidentity.application.CurrencyGenerationVeri import com.yau.digitalrmb.institutionidentity.application.CurrencyQuotaVerificationResult; import com.yau.digitalrmb.institutionidentity.application.CurrencyGenerationVerificationService; import com.yau.digitalrmb.institutionidentity.application.InstitutionKeySubject; +import com.yau.digitalrmb.institutionidentity.application.OperationBooleanResult; +import com.yau.digitalrmb.institutionidentity.application.OperationMessageResult; +import com.yau.digitalrmb.institutionidentity.application.OperationStatusResult; import com.yau.digitalrmb.institutionidentity.application.SignatureResult; import com.yau.digitalrmb.institutionidentity.interfaces.dto.CalculateCurrencyDigestRequest; import com.yau.digitalrmb.institutionidentity.interfaces.dto.ConfirmCurrencyRequest; @@ -33,20 +36,24 @@ public class CurrencyGenerationVerificationController { @PostMapping("/steps/receive") @Operation(summary = "接收步骤二请求报文", description = "对应页面“接收步骤二请求报文”按钮。步骤二必须达到RECEIVED;重复点击时复用verificationId,并将步骤三恢复到RECEIVED,清空后续按钮产生的数据。") - public ApiResponse receive( + public ApiResponse receive( @Valid @RequestBody ReceiveCurrencyVerificationRequest request) { JwtUser user = AuthContextHolder.get(); - return ok(service.receive(request.getRequestId(), InstitutionKeySubject.from(user), user.getUsername())); + CurrencyGenerationVerificationResult result = service.receive(request.getRequestId(), + InstitutionKeySubject.from(user), user.getUsername()); + return ApiResponse.success(new OperationStatusResult(result.getStatus()), MDC.get(TraceIdFilter.MDC_KEY)); } @PostMapping("/steps/verify-signature") @Operation(summary = "第二公钥SM2验证", description = "对应页面“第二公钥SM2验证”按钮。前端传当前实训主体的商业银行第二公钥完整值,后端校验公钥归属,并使用该第二公钥执行SM2_Verify(摘要值, 签名值)。") - public ApiResponse verifySignature( + public ApiResponse verifySignature( @Valid @RequestBody CurrencyVerificationStepRequest request) { JwtUser user = AuthContextHolder.get(); - return ok(service.verifySignature(request.getVerificationId(), request.getPublicKey(), - InstitutionKeySubject.from(user), user.getUsername())); + CurrencyGenerationVerificationResult result = service.verifySignature(request.getVerificationId(), + request.getPublicKey(), InstitutionKeySubject.from(user), user.getUsername()); + return ApiResponse.success(new OperationBooleanResult(Boolean.TRUE.equals(result.getSignatureValid())), + MDC.get(TraceIdFilter.MDC_KEY)); } @PostMapping("/steps/calculate-digest") @@ -62,11 +69,13 @@ public class CurrencyGenerationVerificationController { @PostMapping("/steps/match-digest") @Operation(summary = "匹配摘要一和摘要二", description = "对应页面“匹配”按钮,比较重算摘要一与请求报文摘要二。") - public ApiResponse matchDigest( + public ApiResponse matchDigest( @Valid @RequestBody CurrencyVerificationStepRequest request) { JwtUser user = AuthContextHolder.get(); - return ok(service.matchDigest(request.getVerificationId(), - InstitutionKeySubject.from(user), user.getUsername())); + CurrencyGenerationVerificationResult result = service.matchDigest(request.getVerificationId(), + InstitutionKeySubject.from(user), user.getUsername()); + return ApiResponse.success(new OperationBooleanResult(Boolean.TRUE.equals(result.getDigestMatches())), + MDC.get(TraceIdFilter.MDC_KEY)); } @PostMapping("/steps/verify-quota") diff --git a/src/main/java/com/yau/digitalrmb/institutionidentity/interfaces/rest/InstitutionIdentifierController.java b/src/main/java/com/yau/digitalrmb/institutionidentity/interfaces/rest/InstitutionIdentifierController.java index 8c2dc11..c838833 100644 --- a/src/main/java/com/yau/digitalrmb/institutionidentity/interfaces/rest/InstitutionIdentifierController.java +++ b/src/main/java/com/yau/digitalrmb/institutionidentity/interfaces/rest/InstitutionIdentifierController.java @@ -11,6 +11,8 @@ import com.yau.digitalrmb.institutionidentity.application.InstitutionKeyPairResu import com.yau.digitalrmb.institutionidentity.application.InstitutionKeyService; import com.yau.digitalrmb.institutionidentity.application.InstitutionKeySubject; import com.yau.digitalrmb.institutionidentity.application.InstitutionSignatureResult; +import com.yau.digitalrmb.institutionidentity.application.OperationMessageResult; +import com.yau.digitalrmb.institutionidentity.application.OperationStatusResult; import com.yau.digitalrmb.institutionidentity.application.SignatureResult; import com.yau.digitalrmb.institutionidentity.application.InstitutionTrainingResetResult; import com.yau.digitalrmb.institutionidentity.application.InstitutionTrainingResetService; @@ -96,19 +98,21 @@ public class InstitutionIdentifierController { @PostMapping("/steps/package") @Operation(summary = "打包机构标识申请", description = "无请求体;仅SIGNED状态可操作。将机构代码、时间戳、SM3摘要和商业银行SM2签名组装成申请报文。") - public ApiResponse packageApplication() { + public ApiResponse packageApplication() { JwtUser jwtUser = AuthContextHolder.get(); - return ApiResponse.success(stepService.packageApplication(InstitutionKeySubject.from(jwtUser), - jwtUser.getUsername()), traceId()); + InstitutionApplicationPackageResult result = stepService.packageApplication( + InstitutionKeySubject.from(jwtUser), jwtUser.getUsername()); + return ApiResponse.success(new OperationMessageResult(result.getApplicationMessage()), traceId()); } @PostMapping("/steps/send") @Operation(summary = "发送机构标识申请", description = "无请求体;仅PACKAGED状态可操作。将已打包报文发送至央行,返回SUBMITTED。") - public ApiResponse sendApplication() { + public ApiResponse sendApplication() { JwtUser jwtUser = AuthContextHolder.get(); - return ApiResponse.success(stepService.sendApplication(InstitutionKeySubject.from(jwtUser), - jwtUser.getUsername()), traceId()); + InstitutionApplicationPackageResult result = stepService.sendApplication( + InstitutionKeySubject.from(jwtUser), jwtUser.getUsername()); + return ApiResponse.success(new OperationStatusResult(result.getStatus()), traceId()); } @GetMapping("/applications/commercial-bank") diff --git a/src/main/java/com/yau/digitalrmb/institutionidentity/interfaces/rest/QuotaControlBitController.java b/src/main/java/com/yau/digitalrmb/institutionidentity/interfaces/rest/QuotaControlBitController.java index 5c4136d..90b7ae1 100644 --- a/src/main/java/com/yau/digitalrmb/institutionidentity/interfaces/rest/QuotaControlBitController.java +++ b/src/main/java/com/yau/digitalrmb/institutionidentity/interfaces/rest/QuotaControlBitController.java @@ -2,6 +2,9 @@ package com.yau.digitalrmb.institutionidentity.interfaces.rest; import com.yau.digitalrmb.institutionidentity.application.CentralBankSignatureSegmentResult; import com.yau.digitalrmb.institutionidentity.application.InstitutionKeySubject; +import com.yau.digitalrmb.institutionidentity.application.OperationMessageResult; +import com.yau.digitalrmb.institutionidentity.application.OperationStatusResult; +import com.yau.digitalrmb.institutionidentity.application.OperationValueResult; import com.yau.digitalrmb.institutionidentity.application.QuotaControlBitResult; import com.yau.digitalrmb.institutionidentity.application.QuotaControlBitService; import com.yau.digitalrmb.institutionidentity.application.QuotaControlDynamicSegmentResult; @@ -70,8 +73,12 @@ public class QuotaControlBitController { } @PostMapping("/steps/assemble") - @Operation(summary = "拼接完整额度控制位") - public ApiResponse assemble() { return execute((s, o) -> service.assemble(s, o)); } + @Operation(summary = "拼接完整额度控制位", description = "成功响应的data仅返回value,值为完整额度控制位。") + public ApiResponse assemble() { + JwtUser user = AuthContextHolder.get(); + QuotaControlBitResult result = service.assemble(InstitutionKeySubject.from(user), user.getUsername()); + return ApiResponse.success(new OperationValueResult(result.getCompleteControlBit()), traceId()); + } @PostMapping("/steps/sign") @Operation(summary = "商业银行第二私钥签名确认", @@ -84,12 +91,20 @@ public class QuotaControlBitController { } @PostMapping("/steps/package") - @Operation(summary = "打包额度控制位数据包报文") - public ApiResponse packageRequest() { return execute((s, o) -> service.packageRequest(s, o)); } + @Operation(summary = "打包额度控制位数据包报文", description = "成功响应的data仅返回message,值为本次打包的额度控制位请求报文。") + public ApiResponse packageRequest() { + JwtUser user = AuthContextHolder.get(); + QuotaControlBitResult result = service.packageRequest(InstitutionKeySubject.from(user), user.getUsername()); + return ApiResponse.success(new OperationMessageResult(result.getRequestMessage()), traceId()); + } @PostMapping("/steps/send") - @Operation(summary = "商业银行发送额度控制位数据包报文") - public ApiResponse send() { return execute((s, o) -> service.send(s, o)); } + @Operation(summary = "商业银行发送额度控制位数据包报文", description = "成功响应的data仅返回status,不重复返回已打包报文和完整业务数据。") + public ApiResponse send() { + JwtUser user = AuthContextHolder.get(); + QuotaControlBitResult result = service.send(InstitutionKeySubject.from(user), user.getUsername()); + return ApiResponse.success(new OperationStatusResult(result.getStatus()), traceId()); + } @GetMapping @Operation(summary = "查询步骤八商业银行端完整数据") @@ -97,10 +112,5 @@ public class QuotaControlBitController { return ApiResponse.success(service.detail(InstitutionKeySubject.from(AuthContextHolder.get())), traceId()); } - private ApiResponse execute(Executor executor) { - JwtUser user = AuthContextHolder.get(); - return ApiResponse.success(executor.execute(InstitutionKeySubject.from(user), user.getUsername()), traceId()); - } private String traceId() { return MDC.get(TraceIdFilter.MDC_KEY); } - private interface Executor { QuotaControlBitResult execute(InstitutionKeySubject subject, String operator); } } diff --git a/src/main/java/com/yau/digitalrmb/institutionidentity/interfaces/rest/QuotaRequestController.java b/src/main/java/com/yau/digitalrmb/institutionidentity/interfaces/rest/QuotaRequestController.java index 323dbed..621b68e 100644 --- a/src/main/java/com/yau/digitalrmb/institutionidentity/interfaces/rest/QuotaRequestController.java +++ b/src/main/java/com/yau/digitalrmb/institutionidentity/interfaces/rest/QuotaRequestController.java @@ -1,6 +1,8 @@ package com.yau.digitalrmb.institutionidentity.interfaces.rest; import com.yau.digitalrmb.institutionidentity.application.InstitutionKeySubject; +import com.yau.digitalrmb.institutionidentity.application.OperationMessageResult; +import com.yau.digitalrmb.institutionidentity.application.OperationStatusResult; import com.yau.digitalrmb.institutionidentity.application.QuotaRequestDigestResult; import com.yau.digitalrmb.institutionidentity.application.QuotaRequestMessageResult; import com.yau.digitalrmb.institutionidentity.application.QuotaRequestSignatureResult; @@ -62,20 +64,21 @@ public class QuotaRequestController { } @PostMapping("/steps/package") - @Operation(summary = "打包额度请求报文") - public ApiResponse packageRequest() { + @Operation(summary = "打包额度请求报文", description = "成功响应的data仅返回message。") + public ApiResponse packageRequest() { JwtUser user = AuthContextHolder.get(); - return ApiResponse.success(service.packageQuotaRequest( - InstitutionKeySubject.from(user), user.getUsername()), traceId()); + QuotaRequestMessageResult result = service.packageQuotaRequest( + InstitutionKeySubject.from(user), user.getUsername()); + return ApiResponse.success(new OperationMessageResult(toMessage(result)), traceId()); } @PostMapping("/steps/send") @Operation(summary = "商业银行发送额度请求报文", - description = "发送成功即视为央行已收到,央行查询状态由1(未发送)变为2(已发送)。") - public ApiResponse send() { + description = "发送成功即视为央行已收到;成功响应的data仅返回status。") + public ApiResponse send() { JwtUser user = AuthContextHolder.get(); - return ApiResponse.success(service.sendQuotaRequest( - InstitutionKeySubject.from(user), user.getUsername()), traceId()); + service.sendQuotaRequest(InstitutionKeySubject.from(user), user.getUsername()); + return ApiResponse.success(new OperationStatusResult("SENT"), traceId()); } @GetMapping @@ -85,6 +88,15 @@ public class QuotaRequestController { InstitutionKeySubject.from(AuthContextHolder.get())), traceId()); } + private String toMessage(QuotaRequestMessageResult result) { + return "{\"quotaRequestId\":\"" + result.getQuotaRequestId() + + "\",\"amount\":" + result.getAmount() + + ",\"orgId\":\"" + result.getOrgId() + + "\",\"txnId\":\"" + result.getTxnId() + + "\",\"digest\":\"" + result.getDigest() + + "\",\"signature\":\"" + result.getSignature() + "\"}"; + } + private String traceId() { return MDC.get(TraceIdFilter.MDC_KEY); }