отправить ответный запрос с gateway в клиринг сервис
This commit is contained in:
parent
11fbb281a6
commit
43dde65830
3 changed files with 61 additions and 25 deletions
|
|
@ -21,6 +21,7 @@ import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.balance.ExportToFileRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.balance.ExportToFileRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.AssetOperationListRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.AssetOperationRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.AssetOperationRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.gateway.AssetOperationApprovalRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.gateway.AssetOperationApprovalRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.gateway.SingleAssetResponse;
|
import ru.spcex.clearing.platform.messaging.domain.cud.gateway.SingleAssetResponse;
|
||||||
|
|
@ -80,7 +81,8 @@ public class Sdf06Executor {
|
||||||
@Autowired
|
@Autowired
|
||||||
public Sdf06Executor(ImdgProvider imdgProvider,
|
public Sdf06Executor(ImdgProvider imdgProvider,
|
||||||
IMessageResolver messageResolver,
|
IMessageResolver messageResolver,
|
||||||
@Qualifier("sdf06ValidatorNew") Function<SDf06, IValidator> sDf06Validator, KafkaSender kafkaSender) {
|
@Qualifier("sdf06ValidatorNew") Function<SDf06, IValidator> sDf06Validator,
|
||||||
|
KafkaSender kafkaSender) {
|
||||||
this.imdgProvider = imdgProvider;
|
this.imdgProvider = imdgProvider;
|
||||||
this.statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class);
|
this.statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class);
|
||||||
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||||
|
|
@ -158,7 +160,9 @@ public class Sdf06Executor {
|
||||||
if (requests.size() > 0) {
|
if (requests.size() > 0) {
|
||||||
this.sdf06GroupId = groupId;
|
this.sdf06GroupId = groupId;
|
||||||
this.sdf07GroupId = sdf07GroupId;
|
this.sdf07GroupId = sdf07GroupId;
|
||||||
kafkaSender.sendRequestToQueue(Consts.ASSET_OPERATION, requests);
|
AssetOperationListRequest assetOperationListRequest = new AssetOperationListRequest();
|
||||||
|
assetOperationListRequest.setAssetOperationRequests(requests);
|
||||||
|
kafkaSender.sendRequestToQueue(Consts.ASSET_OPERATION, assetOperationListRequest);
|
||||||
} else if (sdf07WasCreated) {
|
} else if (sdf07WasCreated) {
|
||||||
sendToExporter(groupId);
|
sendToExporter(groupId);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,17 +16,20 @@ import ru.spcex.clearing.gatewayapi.enums.OutboundRequestType;
|
||||||
import ru.spcex.clearing.gatewayapi.service.builders.OutboundRequestBuilder;
|
import ru.spcex.clearing.gatewayapi.service.builders.OutboundRequestBuilder;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.AssetOperationListRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.AssetOperationRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.AssetOperationRequest;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.gateway.AssetOperationApprovalRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.gateway.GatewayTaskRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.gateway.GatewayTaskRequest;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.gateway.SingleAssetResponse;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.utilities.LimExportedRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.utilities.LimExportedRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
|
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
|
||||||
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
|
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
|
||||||
|
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||||
import ru.spcex.clearing.util.security.UserRoleVerification;
|
import ru.spcex.clearing.util.security.UserRoleVerification;
|
||||||
import ru.spcex.platform.enumeration.Section;
|
import ru.spcex.platform.enumeration.Section;
|
||||||
import ru.spcex.platform.enumeration.Task;
|
import ru.spcex.platform.enumeration.Task;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.*;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class GatewayService extends QueueConsumer implements InitializingBean {
|
public class GatewayService extends QueueConsumer implements InitializingBean {
|
||||||
|
|
@ -35,16 +38,19 @@ public class GatewayService extends QueueConsumer implements InitializingBean {
|
||||||
private final UserRoleVerification userRoleVerification;
|
private final UserRoleVerification userRoleVerification;
|
||||||
private final RestTemplate restTemplate;
|
private final RestTemplate restTemplate;
|
||||||
private final InboundServerSettings inboundServerSettings;
|
private final InboundServerSettings inboundServerSettings;
|
||||||
|
private final KafkaSender kafkaSender;
|
||||||
|
|
||||||
public GatewayService(Consumer<String, Object> kafkaQueue,
|
public GatewayService(Consumer<String, Object> kafkaQueue,
|
||||||
Producer<String, Object> kafkaProducer,
|
Producer<String, Object> kafkaProducer,
|
||||||
RestTemplate restTemplate,
|
RestTemplate restTemplate,
|
||||||
UserRoleVerification userRoleVerification,
|
UserRoleVerification userRoleVerification,
|
||||||
GatewayApiSettings gatewayApiSettings) {
|
GatewayApiSettings gatewayApiSettings,
|
||||||
|
KafkaSender kafkaSender) {
|
||||||
super(kafkaQueue, kafkaProducer);
|
super(kafkaQueue, kafkaProducer);
|
||||||
this.restTemplate = restTemplate;
|
this.restTemplate = restTemplate;
|
||||||
this.userRoleVerification = userRoleVerification;
|
this.userRoleVerification = userRoleVerification;
|
||||||
this.inboundServerSettings = gatewayApiSettings.getInboundServer();
|
this.inboundServerSettings = gatewayApiSettings.getInboundServer();
|
||||||
|
this.kafkaSender = kafkaSender;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -58,7 +64,7 @@ public class GatewayService extends QueueConsumer implements InitializingBean {
|
||||||
callback(LimExportedRequest.class)
|
callback(LimExportedRequest.class)
|
||||||
.setConsumer(this::requestOnLimit)
|
.setConsumer(this::requestOnLimit)
|
||||||
.forDestination(Consts.LIM_EXPORTED, callbacks::put);
|
.forDestination(Consts.LIM_EXPORTED, callbacks::put);
|
||||||
callback(AssetOperationRequest.class)
|
callback(AssetOperationListRequest.class)
|
||||||
.setConsumer(this::requestOnAsset)
|
.setConsumer(this::requestOnAsset)
|
||||||
.forDestination(Consts.ASSET_OPERATION, callbacks::put);
|
.forDestination(Consts.ASSET_OPERATION, callbacks::put);
|
||||||
init();
|
init();
|
||||||
|
|
@ -138,33 +144,41 @@ public class GatewayService extends QueueConsumer implements InitializingBean {
|
||||||
log.debug("LOSC task 2/2 complete (MKR section), response: {}", bodyResponse);
|
log.debug("LOSC task 2/2 complete (MKR section), response: {}", bodyResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void requestOnAsset(BaseRequest<AssetOperationRequest> request) {
|
public void requestOnAsset(BaseRequest<AssetOperationListRequest> request) {
|
||||||
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request);
|
Collection<AssetOperationRequest> assetOperations = request.getRequestPayload().getAssetOperationRequests();
|
||||||
if (requestInfoUpdate != null) return;
|
List<SingleAssetResponse> responses = new ArrayList<>();
|
||||||
|
AssetOperationApprovalRequest assetOperationApprovalRequest = new AssetOperationApprovalRequest();
|
||||||
AssetOperationRequest assetOperationRequest = request.getRequestPayload();
|
for (AssetOperationRequest assetOperation : assetOperations) {
|
||||||
Map<String, Object> content = Map.of("direction", assetOperationRequest.getDirection(),
|
Map<String, Object> content = Map.of("direction", assetOperation.getDirection(),
|
||||||
"amount", assetOperationRequest.getAmount(),
|
"amount", assetOperation.getAmount(),
|
||||||
"code", assetOperationRequest.getCode(),
|
"code", assetOperation.getCode(),
|
||||||
"asset", assetOperationRequest.getSecuritySymbol(),
|
"asset", assetOperation.getSecuritySymbol(),
|
||||||
"firm_id", assetOperationRequest.getTradingCode());
|
"firm_id", assetOperation.getTradingCode());
|
||||||
// if (assetOperationRequest.getAmount() != null) {
|
// if (assetOperationRequest.getAmount() != null) {
|
||||||
// content.put("amount", assetOperationRequest.getAmount());
|
// content.put("amount", assetOperationRequest.getAmount());
|
||||||
// } else {
|
// } else {
|
||||||
// content.put("quantity", assetOperationRequest.getQuantity());
|
// content.put("quantity", assetOperationRequest.getQuantity());
|
||||||
// }
|
// }
|
||||||
|
|
||||||
OutboundRequest outboundRequest = OutboundRequestBuilder.builder()
|
OutboundRequest outboundRequest = OutboundRequestBuilder.builder()
|
||||||
.section(Section.MKR.getKey())
|
.section(Section.MKR.getKey())
|
||||||
.type(OutboundRequestType.ASSET_OPERATION)
|
.type(OutboundRequestType.ASSET_OPERATION)
|
||||||
.content(content).build();
|
.content(content).build();
|
||||||
|
|
||||||
String url = formingInboundUrl(inboundServerSettings.getPathLOCM());
|
String url = formingInboundUrl(inboundServerSettings.getPathLOCM());
|
||||||
|
|
||||||
HttpEntity<OutboundRequest> r = makeDefaultRequest(outboundRequest);
|
HttpEntity<OutboundRequest> r = makeDefaultRequest(outboundRequest);
|
||||||
ResponseEntity<Map> response = restTemplate.exchange(url, HttpMethod.POST, r, Map.class);
|
ResponseEntity<Map> response = restTemplate.exchange(url, HttpMethod.POST, r, Map.class);
|
||||||
Map bodyResponse = response.getBody();
|
Map bodyResponse = response.getBody();
|
||||||
log.debug("Response from service: {}", bodyResponse);
|
SingleAssetResponse singleAssetResponse = new SingleAssetResponse();
|
||||||
|
singleAssetResponse.setApproved(Boolean.parseBoolean((String) bodyResponse.get("result")));
|
||||||
|
singleAssetResponse.setStatementId(assetOperation.getStatementId());
|
||||||
|
responses.add(singleAssetResponse);
|
||||||
|
log.debug("Response from service: {}", bodyResponse);
|
||||||
|
}
|
||||||
|
|
||||||
|
assetOperationApprovalRequest.setApprovals(responses);
|
||||||
|
kafkaSender.sendRequestToQueue(Consts.ASSET_OPERATION_APPROVAL, responses);
|
||||||
}
|
}
|
||||||
|
|
||||||
private String formingInboundUrl(String path) {
|
private String formingInboundUrl(String path) {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
package ru.spcex.clearing.platform.messaging.domain.cud.clearing;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
public class AssetOperationListRequest {
|
||||||
|
@JsonProperty
|
||||||
|
private Collection<AssetOperationRequest> assetOperationRequests;
|
||||||
|
|
||||||
|
public Collection<AssetOperationRequest> getAssetOperationRequests() {
|
||||||
|
return assetOperationRequests;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAssetOperationRequests(Collection<AssetOperationRequest> assetOperationRequests) {
|
||||||
|
this.assetOperationRequests = assetOperationRequests;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue