|
|
|
@ -97,7 +97,7 @@ public class CommercialBankIssuanceApplicationService {
|
|
|
|
command.getDenominations(), auditActor(auditActor).getUserId());
|
|
|
|
command.getDenominations(), auditActor(auditActor).getUserId());
|
|
|
|
repository.save(request, auditActor);
|
|
|
|
repository.save(request, auditActor);
|
|
|
|
return IssuanceRequestView.from(request);
|
|
|
|
return IssuanceRequestView.from(request);
|
|
|
|
} catch (IllegalArgumentException | IllegalStateException | NullPointerException exception) {
|
|
|
|
} catch (IllegalArgumentException | IllegalStateException | ArithmeticException | NullPointerException exception) {
|
|
|
|
throw validationError(exception);
|
|
|
|
throw validationError(exception);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -109,11 +109,11 @@ public class CommercialBankIssuanceApplicationService {
|
|
|
|
@Transactional
|
|
|
|
@Transactional
|
|
|
|
public IssuanceRequestView update(UUID id, UpdateIssuanceRequestCommand command, IssuanceAuditActor auditActor) {
|
|
|
|
public IssuanceRequestView update(UUID id, UpdateIssuanceRequestCommand command, IssuanceAuditActor auditActor) {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
IssuanceRequest request = requireOwnedRequest(id, auditActor);
|
|
|
|
IssuanceRequest request = requireOwnedRequestForUpdate(id, auditActor);
|
|
|
|
request.updateDraft(command.getTotalAmount(), command.getCurrency(), command.getDenominations());
|
|
|
|
request.updateDraft(command.getTotalAmount(), command.getCurrency(), command.getDenominations());
|
|
|
|
repository.save(request, auditActor(auditActor));
|
|
|
|
repository.save(request, auditActor(auditActor));
|
|
|
|
return IssuanceRequestView.from(request);
|
|
|
|
return IssuanceRequestView.from(request);
|
|
|
|
} catch (IllegalArgumentException | IllegalStateException | NullPointerException exception) {
|
|
|
|
} catch (IllegalArgumentException | IllegalStateException | ArithmeticException | NullPointerException exception) {
|
|
|
|
throw validationError(exception);
|
|
|
|
throw validationError(exception);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -125,11 +125,11 @@ public class CommercialBankIssuanceApplicationService {
|
|
|
|
@Transactional
|
|
|
|
@Transactional
|
|
|
|
public IssuanceRequestView captureTimestamp(UUID id, IssuanceAuditActor auditActor) {
|
|
|
|
public IssuanceRequestView captureTimestamp(UUID id, IssuanceAuditActor auditActor) {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
IssuanceRequest request = requireOwnedRequest(id, auditActor);
|
|
|
|
IssuanceRequest request = requireOwnedRequestForUpdate(id, auditActor);
|
|
|
|
request.captureTimestamp(LocalDateTime.now().format(TIMESTAMP_FORMAT));
|
|
|
|
request.captureTimestamp(LocalDateTime.now().format(TIMESTAMP_FORMAT));
|
|
|
|
repository.save(request, auditActor(auditActor));
|
|
|
|
repository.save(request, auditActor(auditActor));
|
|
|
|
return IssuanceRequestView.from(request);
|
|
|
|
return IssuanceRequestView.from(request);
|
|
|
|
} catch (IllegalArgumentException | IllegalStateException | NullPointerException exception) {
|
|
|
|
} catch (IllegalArgumentException | IllegalStateException | ArithmeticException | NullPointerException exception) {
|
|
|
|
throw validationError(exception);
|
|
|
|
throw validationError(exception);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -141,13 +141,13 @@ public class CommercialBankIssuanceApplicationService {
|
|
|
|
@Transactional
|
|
|
|
@Transactional
|
|
|
|
public IssuanceRequestView prepareMessage(UUID id, IssuanceAuditActor auditActor) {
|
|
|
|
public IssuanceRequestView prepareMessage(UUID id, IssuanceAuditActor auditActor) {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
IssuanceRequest request = requireOwnedRequest(id, auditActor);
|
|
|
|
IssuanceRequest request = requireOwnedRequestForUpdate(id, auditActor);
|
|
|
|
String message = messageComposer.compose(request.getBankCode(), request.getOrganizationId(),
|
|
|
|
String message = messageComposer.compose(request.getBankCode(), request.getOrganizationId(),
|
|
|
|
request.getTotalAmount(), request.getDenominations(), request.getCurrency(), request.getRequestTimestamp());
|
|
|
|
request.getTotalAmount(), request.getDenominations(), request.getCurrency(), request.getRequestTimestamp());
|
|
|
|
request.prepareMessage(message);
|
|
|
|
request.prepareMessage(message);
|
|
|
|
repository.save(request, auditActor(auditActor));
|
|
|
|
repository.save(request, auditActor(auditActor));
|
|
|
|
return IssuanceRequestView.from(request);
|
|
|
|
return IssuanceRequestView.from(request);
|
|
|
|
} catch (IllegalArgumentException | IllegalStateException | NullPointerException exception) {
|
|
|
|
} catch (IllegalArgumentException | IllegalStateException | ArithmeticException | NullPointerException exception) {
|
|
|
|
throw validationError(exception);
|
|
|
|
throw validationError(exception);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -159,11 +159,11 @@ public class CommercialBankIssuanceApplicationService {
|
|
|
|
@Transactional
|
|
|
|
@Transactional
|
|
|
|
public IssuanceRequestView digest(UUID id, IssuanceAuditActor auditActor) {
|
|
|
|
public IssuanceRequestView digest(UUID id, IssuanceAuditActor auditActor) {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
IssuanceRequest request = requireOwnedRequest(id, auditActor);
|
|
|
|
IssuanceRequest request = requireOwnedRequestForUpdate(id, auditActor);
|
|
|
|
request.recordDigest(signatureService.digest(request.getMessageText()));
|
|
|
|
request.recordDigest(signatureService.digest(request.getMessageText()));
|
|
|
|
repository.save(request, auditActor(auditActor));
|
|
|
|
repository.save(request, auditActor(auditActor));
|
|
|
|
return IssuanceRequestView.from(request);
|
|
|
|
return IssuanceRequestView.from(request);
|
|
|
|
} catch (IllegalArgumentException | IllegalStateException | NullPointerException exception) {
|
|
|
|
} catch (IllegalArgumentException | IllegalStateException | ArithmeticException | NullPointerException exception) {
|
|
|
|
throw validationError(exception);
|
|
|
|
throw validationError(exception);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -175,7 +175,7 @@ public class CommercialBankIssuanceApplicationService {
|
|
|
|
@Transactional
|
|
|
|
@Transactional
|
|
|
|
public IssuanceRequestView sign(UUID id, IssuanceAuditActor auditActor, InstitutionKeySubject subject) {
|
|
|
|
public IssuanceRequestView sign(UUID id, IssuanceAuditActor auditActor, InstitutionKeySubject subject) {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
IssuanceRequest request = requireOwnedRequest(id, auditActor);
|
|
|
|
IssuanceRequest request = requireOwnedRequestForUpdate(id, auditActor);
|
|
|
|
if (generationGateway == null) {
|
|
|
|
if (generationGateway == null) {
|
|
|
|
throw new BusinessException(ErrorCode.INTERNAL_ERROR, "生成数字货币模块密钥服务未配置");
|
|
|
|
throw new BusinessException(ErrorCode.INTERNAL_ERROR, "生成数字货币模块密钥服务未配置");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -185,7 +185,7 @@ public class CommercialBankIssuanceApplicationService {
|
|
|
|
return IssuanceRequestView.from(request);
|
|
|
|
return IssuanceRequestView.from(request);
|
|
|
|
} catch (BusinessException exception) {
|
|
|
|
} catch (BusinessException exception) {
|
|
|
|
throw exception;
|
|
|
|
throw exception;
|
|
|
|
} catch (IllegalArgumentException | IllegalStateException | NullPointerException exception) {
|
|
|
|
} catch (IllegalArgumentException | IllegalStateException | ArithmeticException | NullPointerException exception) {
|
|
|
|
throw validationError(exception);
|
|
|
|
throw validationError(exception);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -193,11 +193,11 @@ public class CommercialBankIssuanceApplicationService {
|
|
|
|
@Transactional
|
|
|
|
@Transactional
|
|
|
|
public IssuanceRequestView packagePayload(UUID id, IssuanceAuditActor auditActor) {
|
|
|
|
public IssuanceRequestView packagePayload(UUID id, IssuanceAuditActor auditActor) {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
IssuanceRequest request = requireOwnedRequest(id, auditActor);
|
|
|
|
IssuanceRequest request = requireOwnedRequestForUpdate(id, auditActor);
|
|
|
|
request.packagePayload(payloadFor(request));
|
|
|
|
request.packagePayload(payloadFor(request));
|
|
|
|
repository.save(request, auditActor(auditActor));
|
|
|
|
repository.save(request, auditActor(auditActor));
|
|
|
|
return IssuanceRequestView.from(request);
|
|
|
|
return IssuanceRequestView.from(request);
|
|
|
|
} catch (IllegalArgumentException | IllegalStateException | NullPointerException exception) {
|
|
|
|
} catch (IllegalArgumentException | IllegalStateException | ArithmeticException | NullPointerException exception) {
|
|
|
|
throw validationError(exception);
|
|
|
|
throw validationError(exception);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -209,13 +209,13 @@ public class CommercialBankIssuanceApplicationService {
|
|
|
|
@Transactional
|
|
|
|
@Transactional
|
|
|
|
public IssuanceRequestView send(UUID id, IssuanceAuditActor auditActor) {
|
|
|
|
public IssuanceRequestView send(UUID id, IssuanceAuditActor auditActor) {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
IssuanceRequest request = requireOwnedRequest(id, auditActor);
|
|
|
|
IssuanceRequest request = requireOwnedRequestForUpdate(id, auditActor);
|
|
|
|
request.sendToCentralBank(Instant.now());
|
|
|
|
request.sendToCentralBank(Instant.now());
|
|
|
|
receiptRepository.saveIfAbsent(new CentralBankIssuanceReceipt(request.getId().value(), request.getRequestNo(),
|
|
|
|
receiptRepository.saveIfAbsent(new CentralBankIssuanceReceipt(request.getId().value(), request.getRequestNo(),
|
|
|
|
request.getPayloadJson(), request.getCentralBankReceivedAt(), auditActor.getUserId(), auditActor.getUsername()));
|
|
|
|
request.getPayloadJson(), request.getCentralBankReceivedAt(), auditActor.getUserId(), auditActor.getUsername()));
|
|
|
|
repository.save(request, auditActor(auditActor));
|
|
|
|
repository.save(request, auditActor(auditActor));
|
|
|
|
return IssuanceRequestView.from(request);
|
|
|
|
return IssuanceRequestView.from(request);
|
|
|
|
} catch (IllegalArgumentException | IllegalStateException | NullPointerException exception) {
|
|
|
|
} catch (IllegalArgumentException | IllegalStateException | ArithmeticException | NullPointerException exception) {
|
|
|
|
throw validationError(exception);
|
|
|
|
throw validationError(exception);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -301,6 +301,19 @@ public class CommercialBankIssuanceApplicationService {
|
|
|
|
return request;
|
|
|
|
return request;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private IssuanceRequest requireOwnedRequestForUpdate(UUID id, IssuanceAuditActor auditActor) {
|
|
|
|
|
|
|
|
if (id == null) {
|
|
|
|
|
|
|
|
throw new BusinessException(ErrorCode.VALIDATION_ERROR, "发行申请标识不能为空");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
IssuanceRequest request = repository.findByIdForUpdate(new IssuanceApplicationId(id)).orElseThrow(() ->
|
|
|
|
|
|
|
|
new BusinessException(ErrorCode.RESOURCE_NOT_FOUND, "发行申请不存在"));
|
|
|
|
|
|
|
|
IssuanceAuditActor effectiveActor = auditActor(auditActor);
|
|
|
|
|
|
|
|
if (!request.getCreatedByUserId().equals(effectiveActor.getUserId())) {
|
|
|
|
|
|
|
|
throw new BusinessException(ErrorCode.UNAUTHORIZED, "无权操作该发行申请");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return request;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private static IssuanceAuditActor legacyAuditActor(String username) {
|
|
|
|
private static IssuanceAuditActor legacyAuditActor(String username) {
|
|
|
|
return new IssuanceAuditActor("SYSTEM", username);
|
|
|
|
return new IssuanceAuditActor("SYSTEM", username);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|