This commit is contained in:
AKurakin 2023-05-15 10:58:15 +03:00
parent 6c23cbca36
commit 0dd8b6840c
6 changed files with 309 additions and 0 deletions

View file

@ -0,0 +1,60 @@
package ru.spcex.clearing.backendapi.controller.queue.register;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.spcex.clearing.backendapi.controller.queue.AbstractQueueController;
import ru.spcex.clearing.backendapi.controller.request.cud.registry.RSplitDepositActionNew;
import ru.spcex.clearing.backendapi.controller.response.BasicSpcexResponse;
import ru.spcex.clearing.backendapi.controller.response.cud.CudResponse;
import ru.spcex.clearing.backendapi.controller.response.entity.CommonGetAllResponse;
import ru.spcex.clearing.backendapi.service.IOperator;
import ru.spcex.clearing.backendapi.service.IStateLoader;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.Consts;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.ExecutionException;
@Controller
@RequestMapping("/registries")
public class RegistryController extends AbstractQueueController {
private final IStateLoader stateLoader;
@Autowired
public RegistryController(IOperator operator, IStateLoader stateLoader) {
super(operator);
this.stateLoader = stateLoader;
}
@ApiOperation(value = "get all registries.")
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CommonGetAllResponse.class)})
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public CommonGetAllResponse getAll() {
Collection<Map<String, Object>> all = stateLoader.getAllMetaTransform(IMDGDistributedNames.Map_Registry, Registry.class);
CommonGetAllResponse response = new CommonGetAllResponse();
response.fromEntity(all);
return response;
}
@ApiOperation(value = "Досрочное изъятие части денежных средств по договору")
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CudResponse.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = BasicSpcexResponse.class)})
@RequestMapping(value = "/splitDeposit", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public CudResponse splitDepositAction(
@ApiParam(value = "Параметры команды в JSON формате.", required = true)
@RequestBody RSplitDepositActionNew rSplitDepositActionNew) throws ExecutionException, InterruptedException {
return processRequest(Consts.REGISTRY_SPLIT_DEPOSIT_ACTION, rSplitDepositActionNew);
}
}

View file

@ -0,0 +1,99 @@
package ru.spcex.clearing.backendapi.controller.request.cud.registry;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.StringUtils;
import ru.spcex.clearing.backendapi.domain.actions.IAction;
import ru.spcex.clearing.backendapi.errors.BackEndError;
import ru.spcex.clearing.platform.messaging.domain.ActionType;
import ru.spcex.clearing.platform.messaging.domain.cud.registry.RegistrySplitDepositActionRequest;
import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalDateDeserializer;
import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalDateSerializer;
import ru.spcex.platform.utils.enumeration.EnumMessage;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class RSplitDepositActionNew implements IAction<RegistrySplitDepositActionRequest> {
@ApiModelProperty(value = "Основание", example = "Основание ...")
@JsonProperty
public String comment;
@ApiModelProperty(value = "Сумма для вывода", example = "1600.20")
@JsonProperty
public BigDecimal outboundAmount;
@ApiModelProperty(value = "Дата возврата", example = "2022-12-25")
@JsonSerialize(using = LocalDateSerializer.class)
@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonProperty
public LocalDate refundDate;
@ApiModelProperty(value = "Договор для разделения", example = "ABCD")
@JsonProperty
public String contract;
@Override
public Collection<EnumMessage> validate() {
List<EnumMessage> errors = new ArrayList<>();
if (StringUtils.isEmpty(this.contract))
errors.add(new EnumMessage(BackEndError.ValidationError, "contract"));
if (this.refundDate == null)
errors.add(new EnumMessage(BackEndError.ValidationError, "refundDate"));
if (this.outboundAmount == null)
errors.add(new EnumMessage(BackEndError.ValidationError, "outboundAmount"));
return errors.isEmpty() ? Collections.emptyList() : errors;
}
@Override
public RegistrySplitDepositActionRequest toRequest() {
var req = new RegistrySplitDepositActionRequest();
req.setComment(this.comment);
req.setOutboundAmount(this.outboundAmount);
req.setRefundDate(this.refundDate);
req.setContract(this.contract);
return req;
}
@ApiModelProperty(hidden = true)
@Override
public ActionType getActionType() {
return ActionType.NEW;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
public BigDecimal getOutboundAmount() {
return outboundAmount;
}
public void setOutboundAmount(BigDecimal outboundAmount) {
this.outboundAmount = outboundAmount;
}
public LocalDate getRefundDate() {
return refundDate;
}
public void setRefundDate(LocalDate refundDate) {
this.refundDate = refundDate;
}
public String getContract() {
return contract;
}
public void setContract(String contract) {
this.contract = contract;
}
}

View file

@ -120,6 +120,7 @@ import static ru.spcex.clearing.test.json.MatcherFactoryWithJson.usingIgnoringFi
ContractRegisterController.class,
ReportRegisterController.class,
//registry
RegistryController.class,
TradingClearingRegistryController.class,
//scheduler
ClearingCalendarController.class,

View file

@ -0,0 +1,92 @@
package ru.spcex.clearing.backendapi.controller.queue.register;
import org.junit.jupiter.api.Test;
import ru.clearing.classes.statics.data.register.ContractRegister;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.spcex.clearing.backendapi.controller.queue.AbstractControllerTest;
import ru.spcex.clearing.backendapi.controller.request.cud.registry.RSplitDepositActionNew;
import ru.spcex.clearing.backendapi.controller.request.cud.registry.TradingClearingRegistryNewAction;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.Consts;
import java.math.BigDecimal;
import java.time.LocalDate;
import static org.junit.jupiter.api.Assertions.*;
class RegistryControllerTest extends AbstractControllerTest {
private static final String REST_URL = "/registries/";
/**
* {@link RegistryController#getAll()} <br>
* Тест проверяет получение запроса по REST API.<br>
* Входной запрос /registries/ <br>
* Ответ CommonGetAllResponse <br>
*/
@Test
void getAll() throws Exception {
//ARRANGE
Registry registry = new Registry();
registry.setId(currentId.get());
registry.setCompanyId(currentId.get());
registry.setTradingCode("TCDE");
registry.setClearingCode("CCDE");
registry.setShortName("S name");
registry.setFullName("Fullly names");
registry.setAccountId(currentId.get());
registry.setAccountType("TCR");
registry.setAccount("ACCT-111222");
registry.setRegistryDesignation("DST");
registry.setRegistryInstrumentType("BOND");
registry.setRegistryCapacity("capasity");
registry.setRegistryUnit("unit");
registry.setRegistryCode("code");
registry.setTradingClearingRegistryId(currentId.get());
registry.setTradingClearingRegistry("String");
registry.setRegistryStatus("String");
registry.setSecurityId(currentId.get());
registry.setSecuritySymbol("CYMBL");
registry.setBalance(BigDecimal.valueOf(111));
registry.setOpenBalance(BigDecimal.valueOf(222));
registry.setCloseBalance(BigDecimal.valueOf(333));
registry.setCredit(BigDecimal.valueOf(444));
registry.setDebit(BigDecimal.valueOf(123));
registry.setSettledCredit(BigDecimal.valueOf(234));
registry.setSettledDebit(BigDecimal.valueOf(3456));
registry.setCheckBalance(BigDecimal.valueOf(789));
registry.setDiffBalance(BigDecimal.valueOf(10.11));
registry.setPlanBalance(BigDecimal.valueOf(12.1516));
registry.setBalanceDimension("dimm");
registry.setSettlementDate(LocalDate.now());
registry.setSettlementCode("SETTL");
registry.setTradingDate(LocalDate.now());
registry.setClearingDate(LocalDate.now());
registry.setRefundDate(LocalDate.now());
registry.setValueDate(LocalDate.now());
registry.setPrice(BigDecimal.valueOf(111222));
registry.setContract("CONTRACT-1");
registry.setCounterPartyId(currentId.get());
registry.setComment("String test");
registry.setParentId(currentId.get());
registry.setGroupId(currentId.get());
registry.setSessionId(currentId.get());
registry.setSessionType("CLR1");
//ACT and ASSERT
checkGettingAllFromRestApi(IMDGDistributedNames.Map_Registry, registry, REST_URL);
}
@Test
void splitDepositAction() throws Exception {
//ARRANGE
RSplitDepositActionNew rSplitDepositActionNew=new RSplitDepositActionNew();
rSplitDepositActionNew.setComment("comment");
rSplitDepositActionNew.setContract("CONTRACT-1");
rSplitDepositActionNew.setRefundDate(LocalDate.now());
rSplitDepositActionNew.setOutboundAmount(BigDecimal.ONE);
//ACT and ASSERT
checkAddingByRestApi("/registries/splitDeposit/", rSplitDepositActionNew);
checkSendedMessegeFromKafka(Consts.REGISTRY_SPLIT_DEPOSIT_ACTION, rSplitDepositActionNew);
}
}

View file

@ -118,6 +118,7 @@ public interface Consts {
String REQUEST_INFO_UPDATE = "request-info-update";
String REGISTRY_SPLIT_DEPOSIT_ACTION = "registry-split-deposit-action";
String REGISTRY_COVERED_DEAL_REGISTER_NEW = "registry-covered-deal-register-new";
String REGISTRY_ADMITTED_DEAL_REGISTER_NEW = "registry-admitted-deal-register-new";
String REGISTRY_DEAL_REGISTER_NEW = "registry-deal-register-new";

View file

@ -0,0 +1,56 @@
package ru.spcex.clearing.platform.messaging.domain.cud.registry;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalDateDeserializer;
import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalDateSerializer;
import java.math.BigDecimal;
import java.time.LocalDate;
public class RegistrySplitDepositActionRequest {
@JsonProperty
private String comment;
@JsonProperty
private BigDecimal outboundAmount;
@JsonSerialize(using = LocalDateSerializer.class)
@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonProperty
private LocalDate refundDate;
@JsonProperty
private String contract;
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
public BigDecimal getOutboundAmount() {
return outboundAmount;
}
public void setOutboundAmount(BigDecimal outboundAmount) {
this.outboundAmount = outboundAmount;
}
public LocalDate getRefundDate() {
return refundDate;
}
public void setRefundDate(LocalDate refundDate) {
this.refundDate = refundDate;
}
public String getContract() {
return contract;
}
public void setContract(String contract) {
this.contract = contract;
}
}