diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/account/ClientCodeController.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/account/ClientCodeController.java new file mode 100644 index 000000000..06cb48671 --- /dev/null +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/account/ClientCodeController.java @@ -0,0 +1,84 @@ +package ru.spcex.clearing.backendapi.controller.queue.account; + +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.*; +import ru.clearing.classes.statics.data.account.ClientCode; +import ru.spcex.clearing.backendapi.controller.queue.AbstractQueueController; +import ru.spcex.clearing.backendapi.controller.request.cud.account.ClientCodeNewAction; +import ru.spcex.clearing.backendapi.controller.request.cud.account.ClientCodeUpdateAction; +import ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction; +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("/accounting/client-codes") +public class ClientCodeController extends AbstractQueueController { + private final IStateLoader stateLoader; + + @Autowired + public ClientCodeController(IOperator operator, IStateLoader stateLoader) { + super(operator); + this.stateLoader = stateLoader; + } + + @ApiOperation(value = "create client code.") + @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CudResponse.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = BasicSpcexResponse.class)}) + @RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public CudResponse add( + @ApiParam(value = "Параметры команды в JSON формате.", required = true) + @RequestBody ClientCodeNewAction clientCodeNewAction) throws ExecutionException, InterruptedException { + return processRequest(Consts.DESTINATION_CLIENT_CODE_NEW, clientCodeNewAction); + } + + @ApiOperation(value = "update client-code.") + @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CudResponse.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = BasicSpcexResponse.class)}) + @RequestMapping(value = "/{id}", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public CudResponse update( + @ApiParam(value = "Идентификатор изменяемого объекта.", required = true, example = "1234") + @PathVariable("id") Long id, + @ApiParam(value = "Новые значения полей объекта.", required = true) + @RequestBody ClientCodeUpdateAction clientCodeUpdateAction) throws ExecutionException, InterruptedException { + clientCodeUpdateAction.setId(id); + return processRequest(Consts.DESTINATION_CLIENT_CODE_UPDATE, clientCodeUpdateAction); + } + + @ApiOperation(value = "delete client code.") + @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CudResponse.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = BasicSpcexResponse.class)}) + @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) + @ResponseBody + public CudResponse delete(@ApiParam(value = "Идентификатор удаляемого объекта", required = true, example = "1234") + @PathVariable("id") Long id) throws ExecutionException, InterruptedException { + CommonDeleteAction deleteAction = new CommonDeleteAction(); + deleteAction.setId(id); + return processRequest(Consts.DESTINATION_CLIENT_CODE_DELETE, deleteAction); + } + + + @ApiOperation(value = "get all client codes.") + @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CommonGetAllResponse.class)}) + @RequestMapping(method = RequestMethod.GET) + @ResponseBody + public CommonGetAllResponse getAll() { + Collection> all = stateLoader.getAllMetaTransform(IMDGDistributedNames.Map_ClientCode, ClientCode.class); + CommonGetAllResponse response = new CommonGetAllResponse(); + response.fromEntity(all); + return response; + } +} diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/execution/ExecutionFondController.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/execution/ExecutionFondController.java new file mode 100644 index 000000000..afce0778a --- /dev/null +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/execution/ExecutionFondController.java @@ -0,0 +1,44 @@ +package ru.spcex.clearing.backendapi.controller.queue.execution; + +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +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.execution.ExecutionFond; +import ru.spcex.clearing.backendapi.controller.queue.AbstractQueueController; +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 java.util.Collection; +import java.util.Map; + +@Controller +@RequestMapping("/execution-fonds") +public class ExecutionFondController extends AbstractQueueController { + private final IStateLoader stateLoader; + + @Autowired + public ExecutionFondController(IOperator operator, IStateLoader stateLoader) { + super(operator); + this.stateLoader = stateLoader; + } + + @ApiOperation(value = "get all ExecutionFond.") + @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CommonGetAllResponse.class)}) + @RequestMapping(method = RequestMethod.GET) + @ResponseBody + public CommonGetAllResponse getAll() { + Collection> all = stateLoader.getAllMetaTransform( + IMDGDistributedNames.Map_ExecutionFond, + ExecutionFond.class); + CommonGetAllResponse response = new CommonGetAllResponse(); + response.fromEntity(all); + return response; + } +} diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/registry/TradingClearingRegistryController.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/registry/TradingClearingRegistryController.java new file mode 100644 index 000000000..a609c42ba --- /dev/null +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/registry/TradingClearingRegistryController.java @@ -0,0 +1,97 @@ +package ru.spcex.clearing.backendapi.controller.queue.registry; + +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.*; +import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; +import ru.spcex.clearing.backendapi.controller.queue.AbstractQueueController; +import ru.spcex.clearing.backendapi.controller.request.cud.registry.TradingClearingRegistryNewAction; +import ru.spcex.clearing.backendapi.controller.request.cud.registry.TradingClearingRegistryUpdateAction; +import ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction; +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.controller.response.entity.registry.TradingClearingRegistryBackendGetById; +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.Optional; +import java.util.concurrent.ExecutionException; + +@Controller +@RequestMapping("/registry/trading-clearing-registry") +public class TradingClearingRegistryController extends AbstractQueueController { + private final IStateLoader stateLoader; + + @Autowired + public TradingClearingRegistryController(IOperator operator, IStateLoader stateLoader) { + super(operator); + this.stateLoader = stateLoader; + } + + @ApiOperation(value = "create TradingClearingRegistry.") + @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CudResponse.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = BasicSpcexResponse.class)}) + @RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public CudResponse add( + @ApiParam(value = "Параметры команды в JSON формате.", required = true) + @RequestBody TradingClearingRegistryNewAction bankAccountNewAction) throws ExecutionException, InterruptedException { + return processRequest(Consts.DESTINATION_TRADING_CLEARING_REGISTRY_NEW, bankAccountNewAction); + } + + @ApiOperation(value = "update TradingClearingRegistry.") + @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CudResponse.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = BasicSpcexResponse.class)}) + @RequestMapping(value = "/{id}", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public CudResponse update( + @ApiParam(value = "Идентификатор изменяемого объекта.", required = true, example = "1234") + @PathVariable("id") Long id, + @ApiParam(value = "Новые значения полей объекта.", required = true) + @RequestBody TradingClearingRegistryUpdateAction tradingClearingRegistryUpdateAction) throws ExecutionException, InterruptedException { + tradingClearingRegistryUpdateAction.setId(id); + return processRequest(Consts.DESTINATION_TRADING_CLEARING_REGISTRY_UPDATE, tradingClearingRegistryUpdateAction); + } + + @ApiOperation(value = "delete TradingClearingRegistry.") + @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CudResponse.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = BasicSpcexResponse.class)}) + @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) + @ResponseBody + public CudResponse delete(@ApiParam(value = "Идентификатор удаляемого объекта", required = true, example = "1234") + @PathVariable("id") Long id) throws ExecutionException, InterruptedException { + CommonDeleteAction deleteAction = new CommonDeleteAction(); + deleteAction.setId(id); + return processRequest(Consts.DESTINATION_TRADING_CLEARING_REGISTRY_DELETE, deleteAction); + } + + @ApiOperation(value = "get TradingClearingRegistry by id.") + @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = TradingClearingRegistryBackendGetById.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = BasicSpcexResponse.class)}) + @RequestMapping(value = "/{id}", method = RequestMethod.GET) + @ResponseBody + public TradingClearingRegistryBackendGetById getById(@ApiParam(value = "Идентификатор объекта", required = true, example = "1234") + @PathVariable("id") Long id) { + Optional tradingClearingRegistry = stateLoader.getById(id, IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class); + TradingClearingRegistryBackendGetById response = new TradingClearingRegistryBackendGetById(); + tradingClearingRegistry.ifPresentOrElse(response::fromEntity, () -> response.setCode(404)); + return response; + } + + @ApiOperation(value = "get all TradingClearingRegistry's.") + @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CommonGetAllResponse.class)}) + @RequestMapping(method = RequestMethod.GET) + @ResponseBody + public CommonGetAllResponse getAll() { + Collection> all = stateLoader.getAllMetaTransform(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class); + CommonGetAllResponse response = new CommonGetAllResponse(); + response.fromEntity(all); + return response; + } +} diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/account/ClientCodeNewAction.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/account/ClientCodeNewAction.java new file mode 100644 index 000000000..ef0a6b1b1 --- /dev/null +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/account/ClientCodeNewAction.java @@ -0,0 +1,113 @@ +package ru.spcex.clearing.backendapi.controller.request.cud.account; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModelProperty; +import org.springframework.util.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.account.ClientCodeNewRequest; +import ru.spcex.platform.utils.enumeration.EnumMessage; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +public class ClientCodeNewAction implements IAction { + + @ApiModelProperty(value = "Наименование компании", example = "1200") + @JsonProperty + private Long companyId; + @ApiModelProperty(value = "Код клиента", example = "A301011111") + @JsonProperty + private String code; + @ApiModelProperty(value = "Торгово-клиринговый регистр", example = "1234") + @JsonProperty + private Long tradingClearingRegistryId; + @ApiModelProperty(value = "Номер денежного счета", example = "1234") + @JsonProperty + private Long moneyAccountId; + @ApiModelProperty(value = "Номер депозитарного счета", example = "1234") + @JsonProperty + private Long depoAccountId; + @ApiModelProperty(value = "Наименование статуса", example = "ACTV") + @JsonProperty + private String status; + + @Override + public Collection validate() { + List errors = new ArrayList<>(); + if (this.companyId == null) + errors.add(new EnumMessage(BackEndError.ValidationError, "companyId")); + if (!StringUtils.hasLength(this.code)) + errors.add(new EnumMessage(BackEndError.ValidationError, "code")); + return errors.isEmpty() ? Collections.emptyList() : errors; + } + + @Override + public ClientCodeNewRequest toRequest() { + var req = new ClientCodeNewRequest(); + req.setCompanyId(this.companyId); + req.setCode(this.code); + req.setTradingClearingRegistryId(this.tradingClearingRegistryId); + req.setMoneyAccountId(this.moneyAccountId); + req.setDepoAccountId(this.depoAccountId); + req.setStatus(this.status); + return req; + } + + @ApiModelProperty(hidden = true) + @Override + public ActionType getActionType() { + return ActionType.NEW; + } + + public Long getCompanyId() { + return companyId; + } + + public void setCompanyId(Long companyId) { + this.companyId = companyId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public Long getTradingClearingRegistryId() { + return tradingClearingRegistryId; + } + + public void setTradingClearingRegistryId(Long tradingClearingRegistryId) { + this.tradingClearingRegistryId = tradingClearingRegistryId; + } + + public Long getMoneyAccountId() { + return moneyAccountId; + } + + public void setMoneyAccountId(Long moneyAccountId) { + this.moneyAccountId = moneyAccountId; + } + + public Long getDepoAccountId() { + return depoAccountId; + } + + public void setDepoAccountId(Long depoAccountId) { + this.depoAccountId = depoAccountId; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/account/ClientCodeUpdateAction.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/account/ClientCodeUpdateAction.java new file mode 100644 index 000000000..97f92a06e --- /dev/null +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/account/ClientCodeUpdateAction.java @@ -0,0 +1,121 @@ +package ru.spcex.clearing.backendapi.controller.request.cud.account; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModelProperty; +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.account.ClientCodeUpdateRequest; +import ru.spcex.platform.utils.enumeration.EnumMessage; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +public class ClientCodeUpdateAction implements IAction { + @ApiModelProperty(hidden = true) + @JsonProperty + public Long id; + @ApiModelProperty(value = "Наименование компании", example = "1200") + @JsonProperty + private Long companyId; + @ApiModelProperty(value = "Код клиента", example = "A301011111") + @JsonProperty + private String code; + @ApiModelProperty(value = "Торгово-клиринговый регистр", example = "1234") + @JsonProperty + private Long tradingClearingRegistryId; + @ApiModelProperty(value = "Номер денежного счета", example = "1234") + @JsonProperty + private Long moneyAccountId; + @ApiModelProperty(value = "Номер депозитарного счета", example = "1234") + @JsonProperty + private Long depoAccountId; + @ApiModelProperty(value = "Наименование статуса", example = "ACTV") + @JsonProperty + private String status; + + @Override + public Collection validate() { + List errors = new ArrayList<>(); + if (this.id == null) + errors.add(new EnumMessage(BackEndError.ValidationError, "id")); + return errors.isEmpty() ? Collections.emptyList() : errors; + } + + @Override + public ClientCodeUpdateRequest toRequest() { + var req = new ClientCodeUpdateRequest(); + req.setId(this.id); + req.setCompanyId(this.companyId); + req.setCode(this.code); + req.setTradingClearingRegistryId(this.tradingClearingRegistryId); + req.setMoneyAccountId(this.moneyAccountId); + req.setDepoAccountId(this.depoAccountId); + req.setStatus(this.status); + return req; + } + + @ApiModelProperty(hidden = true) + @Override + public ActionType getActionType() { + return ActionType.UPDATE; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getCompanyId() { + return companyId; + } + + public void setCompanyId(Long companyId) { + this.companyId = companyId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public Long getTradingClearingRegistryId() { + return tradingClearingRegistryId; + } + + public void setTradingClearingRegistryId(Long tradingClearingRegistryId) { + this.tradingClearingRegistryId = tradingClearingRegistryId; + } + + public Long getMoneyAccountId() { + return moneyAccountId; + } + + public void setMoneyAccountId(Long moneyAccountId) { + this.moneyAccountId = moneyAccountId; + } + + public Long getDepoAccountId() { + return depoAccountId; + } + + public void setDepoAccountId(Long depoAccountId) { + this.depoAccountId = depoAccountId; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/registry/TradingClearingRegistryNewAction.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/registry/TradingClearingRegistryNewAction.java new file mode 100644 index 000000000..dacbfd3ce --- /dev/null +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/registry/TradingClearingRegistryNewAction.java @@ -0,0 +1,87 @@ +package ru.spcex.clearing.backendapi.controller.request.cud.registry; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModelProperty; +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.TradingClearingRegistryNewRequest; +import ru.spcex.platform.utils.enumeration.EnumMessage; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +public class TradingClearingRegistryNewAction implements IAction { + @ApiModelProperty(value = "Наименование компании", example = "1200") + @JsonProperty + private Long companyId; + @ApiModelProperty(value = "Номер денежного счета", example = "1500") + @JsonProperty + private Long moneyAccountId; + @ApiModelProperty(value = "Номер депозитарного счета", example = "1600") + @JsonProperty + private Long depoAccountId; + @ApiModelProperty(value = "Наименование статуса", example = "ACTV") + @JsonProperty + private String status; + + @Override + public Collection validate() { + List errors = new ArrayList<>(); + if (this.companyId == null) + errors.add(new EnumMessage(BackEndError.ValidationError, "companyId")); + if (this.moneyAccountId == null) + errors.add(new EnumMessage(BackEndError.ValidationError, "moneyAccountId")); + return errors.isEmpty() ? Collections.emptyList() : errors; + } + + @Override + public TradingClearingRegistryNewRequest toRequest() { + var req = new TradingClearingRegistryNewRequest(); + req.setCompanyId(this.companyId); + req.setMoneyAccountId(this.moneyAccountId); + req.setDepoAccountId(this.depoAccountId); + req.setStatus(this.status); + return req; + } + + @ApiModelProperty(hidden = true) + @Override + public ActionType getActionType() { + return ActionType.NEW; + } + + public Long getCompanyId() { + return companyId; + } + + public void setCompanyId(Long companyId) { + this.companyId = companyId; + } + + public Long getMoneyAccountId() { + return moneyAccountId; + } + + public void setMoneyAccountId(Long moneyAccountId) { + this.moneyAccountId = moneyAccountId; + } + + public Long getDepoAccountId() { + return depoAccountId; + } + + public void setDepoAccountId(Long depoAccountId) { + this.depoAccountId = depoAccountId; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/registry/TradingClearingRegistryUpdateAction.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/registry/TradingClearingRegistryUpdateAction.java new file mode 100644 index 000000000..d7ca8dd71 --- /dev/null +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/registry/TradingClearingRegistryUpdateAction.java @@ -0,0 +1,62 @@ +package ru.spcex.clearing.backendapi.controller.request.cud.registry; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModelProperty; +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.TradingClearingRegistryUpdateRequest; +import ru.spcex.platform.utils.enumeration.EnumMessage; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +public class TradingClearingRegistryUpdateAction implements IAction { + + @ApiModelProperty(hidden = true) + @JsonProperty + public Long id; + + @JsonProperty + private String status; + + @Override + public Collection validate() { + List errors = new ArrayList<>(); + if (this.id == null) + errors.add(new EnumMessage(BackEndError.ValidationError, "id")); + return errors.isEmpty() ? Collections.emptyList() : errors; + } + + @Override + public TradingClearingRegistryUpdateRequest toRequest() { + var req = new TradingClearingRegistryUpdateRequest(); + req.setId(this.id); + req.setStatus(this.status); + return req; + } + + @ApiModelProperty(hidden = true) + @Override + public ActionType getActionType() { + return ActionType.UPDATE; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/registry/TradingClearingRegistryBackendGetById.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/registry/TradingClearingRegistryBackendGetById.java new file mode 100644 index 000000000..27feabab4 --- /dev/null +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/registry/TradingClearingRegistryBackendGetById.java @@ -0,0 +1,46 @@ +package ru.spcex.clearing.backendapi.controller.response.entity.registry; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; +import ru.spcex.clearing.backendapi.controller.response.BasicSpcexResponse; + +/** + * Банковские реквизиты для перечисления денежных средств + * + * @ApiModel(description = "Ответ в результате отправки операции в топик Kafka.") + * @ApiModelProperty(value = "Информация о принятом запросе") + **/ +@ApiModel(description = "Ответ при получении объекта TradingClearingRegistry.") +public class TradingClearingRegistryBackendGetById extends BasicSpcexResponse { + + @JsonProperty + @ApiModelProperty(value = "Поля объекта") + private TradingClearingRegistryBackendGetFields payload; + + public TradingClearingRegistryBackendGetFields getPayload() { + return payload; + } + + public void setPayload(TradingClearingRegistryBackendGetFields payload) { + this.payload = payload; + } + + public void fromEntity(TradingClearingRegistry tcr) { + var payload = new TradingClearingRegistryBackendGetFields(); + this.setPayload(payload); + payload.setId(tcr.getId()); + payload.setCompanyId(tcr.getCompanyId()); + payload.setCode(tcr.getCode()); + payload.setMoneyAccountId(tcr.getMoneyAccountId()); + payload.setDepoAaccountId(tcr.getDepoAaccountId()); + payload.setTradingClearingRegistryType(tcr.getTradingClearingRegistryType()); + payload.setTradingClearingRegistryLevel(tcr.getTradingClearingRegistryLevel()); + payload.setTradingClearingRegistryPurpose(tcr.getTradingClearingRegistryPurpose()); + payload.setStatus(tcr.getStatus()); + payload.setCreatedAt(tcr.getCreated()); + payload.setUpdatedAt(tcr.getUpdated()); + } + +} \ No newline at end of file diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/registry/TradingClearingRegistryBackendGetFields.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/registry/TradingClearingRegistryBackendGetFields.java new file mode 100644 index 000000000..60495a336 --- /dev/null +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/registry/TradingClearingRegistryBackendGetFields.java @@ -0,0 +1,133 @@ +package ru.spcex.clearing.backendapi.controller.response.entity.registry; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import io.swagger.annotations.ApiModelProperty; +import ru.spcex.clearing.platform.messaging.domain.json.serialize.InstantSerializer; + +import java.time.Instant; + +public class TradingClearingRegistryBackendGetFields { + @JsonProperty + @ApiModelProperty(value = "Идентификатор", example = "1234") + private Long id; + @JsonProperty + @ApiModelProperty(value = "Идентификатор компании", example = "1234") + private Long companyId; + @JsonProperty + @ApiModelProperty(value = "од торгово-клирингового регистра", example = "ABCD") + private String code; + @JsonProperty + @ApiModelProperty(value = "Идентификатор денежного счета", example = "") + private Long moneyAccountId; + @JsonProperty + @ApiModelProperty(value = "Идентификатор депозитарного счета", example = "") + private Long depoAaccountId; + @JsonProperty + @ApiModelProperty(value = "Код торгово-клирингового регистра", example = "") + private String tradingClearingRegistryType; + @JsonProperty + @ApiModelProperty(value = "Код торгово-клирингового регистра", example = "") + private String tradingClearingRegistryLevel; + @JsonProperty + @ApiModelProperty(value = "Код области применения", example = "") + private String tradingClearingRegistryPurpose; + @JsonProperty + @ApiModelProperty(value = "Наименование статуса", example = "ACTV") + private String status; + + @JsonProperty("Дата-время создания записи") + @JsonSerialize(using = InstantSerializer.class) + private Instant createdAt; + @JsonProperty("Дата-время изменения записи") + @JsonSerialize(using = InstantSerializer.class) + private Instant updatedAt; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getCompanyId() { + return companyId; + } + + public void setCompanyId(Long companyId) { + this.companyId = companyId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public Long getMoneyAccountId() { + return moneyAccountId; + } + + public void setMoneyAccountId(Long moneyAccountId) { + this.moneyAccountId = moneyAccountId; + } + + public Long getDepoAaccountId() { + return depoAaccountId; + } + + public void setDepoAaccountId(Long depoAaccountId) { + this.depoAaccountId = depoAaccountId; + } + + public String getTradingClearingRegistryType() { + return tradingClearingRegistryType; + } + + public void setTradingClearingRegistryType(String tradingClearingRegistryType) { + this.tradingClearingRegistryType = tradingClearingRegistryType; + } + + public String getTradingClearingRegistryLevel() { + return tradingClearingRegistryLevel; + } + + public void setTradingClearingRegistryLevel(String tradingClearingRegistryLevel) { + this.tradingClearingRegistryLevel = tradingClearingRegistryLevel; + } + + public String getTradingClearingRegistryPurpose() { + return tradingClearingRegistryPurpose; + } + + public void setTradingClearingRegistryPurpose(String tradingClearingRegistryPurpose) { + this.tradingClearingRegistryPurpose = tradingClearingRegistryPurpose; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } + + public Instant getUpdatedAt() { + return updatedAt; + } + + public void setUpdatedAt(Instant updatedAt) { + this.updatedAt = updatedAt; + } +} diff --git a/clearing-parent/backend-api/src/main/resources/meta/data.xml b/clearing-parent/backend-api/src/main/resources/meta/data.xml index 4caf52f1c..26636a991 100644 --- a/clearing-parent/backend-api/src/main/resources/meta/data.xml +++ b/clearing-parent/backend-api/src/main/resources/meta/data.xml @@ -1,5 +1,5 @@ - + @@ -106,9 +106,9 @@ - + - + @@ -162,10 +162,12 @@ - - - - + + + + + + @@ -218,6 +220,7 @@ + @@ -240,6 +243,9 @@ + + + @@ -338,6 +344,11 @@ + + + + + @@ -354,9 +365,12 @@ - - - + + + + + + @@ -365,7 +379,7 @@ - + @@ -390,7 +404,7 @@ - + @@ -430,9 +444,11 @@ - - - + + + + + diff --git a/clearing-parent/backend-api/src/main/resources/meta/meta.xml b/clearing-parent/backend-api/src/main/resources/meta/meta.xml index 1c4e806ee..5b67a2662 100644 --- a/clearing-parent/backend-api/src/main/resources/meta/meta.xml +++ b/clearing-parent/backend-api/src/main/resources/meta/meta.xml @@ -1,6 +1,6 @@ - + @@ -217,11 +217,21 @@ - + + + + + + + + + + + @@ -749,7 +759,7 @@ - +
@@ -1187,6 +1197,8 @@ + + @@ -1281,7 +1293,7 @@ - + diff --git a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/AbstractControllerTest.java b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/AbstractControllerTest.java index 0f1c3d1d9..4f345a0a4 100644 --- a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/AbstractControllerTest.java +++ b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/AbstractControllerTest.java @@ -31,6 +31,7 @@ import ru.spcex.clearing.backendapi.controller.config.*; import ru.spcex.clearing.backendapi.controller.queue.account.*; import ru.spcex.clearing.backendapi.controller.queue.company.*; import ru.spcex.clearing.backendapi.controller.queue.execution.ExecutionDepositController; +import ru.spcex.clearing.backendapi.controller.queue.execution.ExecutionFondController; import ru.spcex.clearing.backendapi.controller.queue.journal.InDocumentJournalController; import ru.spcex.clearing.backendapi.controller.queue.journal.ManagementJournalController; import ru.spcex.clearing.backendapi.controller.queue.journal.OutDocumentJournalController; @@ -39,6 +40,7 @@ import ru.spcex.clearing.backendapi.controller.queue.liabilities.LiabilitiesClai import ru.spcex.clearing.backendapi.controller.queue.misc.*; import ru.spcex.clearing.backendapi.controller.queue.payment.PaymentInstructionController; import ru.spcex.clearing.backendapi.controller.queue.register.*; +import ru.spcex.clearing.backendapi.controller.queue.registry.TradingClearingRegistryController; import ru.spcex.clearing.backendapi.controller.queue.scheduler.*; import ru.spcex.clearing.backendapi.controller.queue.securities.*; import ru.spcex.clearing.backendapi.controller.queue.user.UserController; @@ -88,6 +90,8 @@ import static ru.spcex.clearing.test.json.MatcherFactoryWithJson.usingIgnoringFi BankAccountController.class, ClearingAccountController.class, DepoAccountController.class, + //account misc + ClientCodeController.class, //company CompanyRoleSetController.class, CompanyController.class, @@ -99,6 +103,7 @@ import static ru.spcex.clearing.test.json.MatcherFactoryWithJson.usingIgnoringFi RelationController.class, //execution ExecutionDepositController.class, + ExecutionFondController.class, //journal InDocumentJournalController.class, ManagementJournalController.class, @@ -125,6 +130,8 @@ import static ru.spcex.clearing.test.json.MatcherFactoryWithJson.usingIgnoringFi OrderRegisterController.class, ReportRegisterController.class, UncoveredDealRegisterController.class, + //registry + TradingClearingRegistryController.class, //scheduler ClearingCalendarController.class, LauncherController.class, diff --git a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/account/ClientCodeControllerTest.java b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/account/ClientCodeControllerTest.java new file mode 100644 index 000000000..32a66547e --- /dev/null +++ b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/account/ClientCodeControllerTest.java @@ -0,0 +1,174 @@ +package ru.spcex.clearing.backendapi.controller.queue.account; + +import org.junit.jupiter.api.Test; +import org.springframework.core.NestedExceptionUtils; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import ru.clearing.classes.statics.data.account.ClientCode; +import ru.spcex.clearing.backendapi.controller.queue.AbstractControllerTest; +import ru.spcex.clearing.backendapi.controller.request.cud.account.ClientCodeNewAction; +import ru.spcex.clearing.backendapi.controller.request.cud.account.ClientCodeUpdateAction; +import ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction; +import ru.spcex.clearing.backendapi.domain.actions.IAction; +import ru.spcex.clearing.backendapi.errors.ActionValidationException; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.Consts; + +import java.time.Instant; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static ru.spcex.clearing.test.json.JsonUtil.writeValue; + +class ClientCodeControllerTest extends AbstractControllerTest { + private static final String REST_URL = "/accounting/client-codes/"; + + /** + * {@link ClientCodeController#add(ClientCodeNewAction)}
+ * Тест проверяет получение сущности {@link ClientCodeNewAction} по REST API и отправку в Apache Kafka.
+ * Входной запрос {@link ClientCodeNewRequest}:
+ * {@link ClientCodeNewRequest#} - 044525776
+ * ... + */ + @Test + void add() throws Exception { + //ARRANGE + ClientCodeNewAction clientCodeNewAction = getClientCodeNewAction( + 0, + "044525776", + "ACTV", + 1000L, + 1010L, + 1020L, + 1030L); + + //ACT and ASSERT + checkAddingByRestApi(REST_URL, clientCodeNewAction); + checkSendedMessegeFromKafka(Consts.DESTINATION_CLIENT_CODE_NEW, clientCodeNewAction); + } + + /** + * {@link ClientCodeController#add(ClientCodeNewAction)}
+ * Тест проверяет работу валидации сущности {@link ClientCodeNewAction} принятой по REST API для отправку в Apache Kafka.
+ * Входной запрос {@link ClientCodeNewAction}:
+ * {@link ClientCodeNewAction#id} - (generated)
+ * {@link ClientCodeNewAction#code} - "044525776" или null или ""
+ * {@link ClientCodeNewAction#status} - "ACTV"
+ * {@link ClientCodeNewAction#companyId} - 1000L или null
+ * {@link ClientCodeNewAction#depoAccountId} - 1010L
+ * {@link ClientCodeNewAction#moneyAccountId} - 1020L
+ * {@link ClientCodeNewAction#tradingClearingRegistryId} - 1030L
+ */ + @Test + void addWithException() { + assertThrowsFor(getClientCodeNewAction(0, "", "ACTV", 1000L, 1010L, 1020L, 1030L)); + assertThrowsFor(getClientCodeNewAction(0, null, "ACTV", 1000L, 1010L, 1020L, 1030L)); + assertThrowsFor(getClientCodeNewAction(0, "044525776", "ACTV", null, 1010L, 1020L, 1030L)); + } + + /** + * {@link ClientCodeController#update(Long, ClientCodeUpdateAction)}
+ * Тест проверяет получение сущности {@link ClientCodeUpdateAction} по REST API и отправку в Apache Kafka.
+ * Входной запрос {@link ClientCodeUpdateAction}:
+ * {@link ClientCodeUpdateAction#id} - (generated)
+ * {@link ClientCodeUpdateAction#code} - "044525776"
+ * {@link ClientCodeUpdateAction#status} - "ACTV"
+ * {@link ClientCodeUpdateAction#companyId} - 1000L
+ * {@link ClientCodeUpdateAction#depoAccountId} - 1010L
+ * {@link ClientCodeUpdateAction#moneyAccountId} - 1020L
+ * {@link ClientCodeUpdateAction#tradingClearingRegistryId} - 1030L
+ */ + @Test + void update() throws Exception { + //ARRANGE + long id = 0; + ClientCodeUpdateAction clientCodeUpdateAction = getClientCodeUpdateAction( + id, + "044525776", + "ACTV", + 1000L, + 1010L, + 1020L, + 1030L); + + //ACT and ASSERT + checkUpdatingByRestApi(REST_URL, clientCodeUpdateAction, id); + checkSendedMessegeFromKafka(Consts.DESTINATION_CLIENT_CODE_UPDATE, clientCodeUpdateAction); + } + + /** + * {@link ClientCodeController#delete(Long)}
+ * Тест проверяет получение id сущности {@link Long} по REST API и отправку в Apache Kafka.
+ * Входной запрос /accounting/client-codes/{@link Long}: - 0L
+ */ + @Test + void delete() throws Exception { + //ARRANGE + long id = currentId.getAndIncrement(); + CommonDeleteAction deleteAction = new CommonDeleteAction(); + deleteAction.setId(id); + //ACT and ASSERT + checkDeletingByRestApi(REST_URL, id); + checkSendedMessegeFromKafka(Consts.DESTINATION_CLIENT_CODE_DELETE, deleteAction); + } + + /** + * {@link ClientCodeController#getAll()}
+ * Тест проверяет получение запроса по REST API и отправку всех записей из таблицы hazelcast Map_ClientCode.
+ * Входной запрос /accounting/client-codes/
+ * Ответ CommonGetAllResponse
+ */ + @Test + void getAll() throws Exception { + //ARRANGE + ClientCode existClientCode = new ClientCode(); + existClientCode.setCode("ooo tinkoff"); + existClientCode.setCompanyId(1000L); + existClientCode.setDepoAccountId(1010L); + existClientCode.setStatus("ACTV"); + existClientCode.setMoneyAccountId(1020L); + existClientCode.setTradingClearingRegistryId(1030L); + existClientCode.setCreated(Instant.now()); + existClientCode.setUpdated(Instant.now()); + existClientCode.setId(currentId.get()); + + //ACT and ASSERT + checkGettingAllFromRestApi(IMDGDistributedNames.Map_ClientCode, existClientCode, REST_URL); + } + + private void assertThrowsFor(IAction iAction) { + assertThrows(ActionValidationException.class, () -> { + try { + perform(MockMvcRequestBuilders.post(REST_URL).contentType(MediaType.APPLICATION_JSON).content(writeValue(iAction))); + } catch (Exception e) { + Throwable rootCause = NestedExceptionUtils.getRootCause(e); + throw rootCause != null ? rootCause : e; + } + }); + } + + private ClientCodeNewAction getClientCodeNewAction(long id, + String code, String status, Long companyId, Long depoAccountId, + Long moneyAccountId, Long tradingClearingRegistryId ) { + ClientCodeNewAction clientCodeNewAction = new ClientCodeNewAction(); + clientCodeNewAction.setCode(code); + clientCodeNewAction.setCompanyId(companyId); + clientCodeNewAction.setDepoAccountId(depoAccountId); + clientCodeNewAction.setStatus(status); + clientCodeNewAction.setMoneyAccountId(moneyAccountId); + clientCodeNewAction.setTradingClearingRegistryId(tradingClearingRegistryId); + return clientCodeNewAction; + } + + private ClientCodeUpdateAction getClientCodeUpdateAction(long id, String code, String status, Long companyId, Long depoAccountId, + Long moneyAccountId, Long tradingClearingRegistryId) { + ClientCodeUpdateAction clientCodeUpdateAction = new ClientCodeUpdateAction(); + clientCodeUpdateAction.setId(id); + clientCodeUpdateAction.setCode(code); + clientCodeUpdateAction.setCompanyId(companyId); + clientCodeUpdateAction.setDepoAccountId(depoAccountId); + clientCodeUpdateAction.setStatus(status); + clientCodeUpdateAction.setMoneyAccountId(moneyAccountId); + clientCodeUpdateAction.setTradingClearingRegistryId(tradingClearingRegistryId); + return clientCodeUpdateAction; + } +} \ No newline at end of file diff --git a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/execution/ExecutionFondControllerTest.java b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/execution/ExecutionFondControllerTest.java new file mode 100644 index 000000000..9bb6803ad --- /dev/null +++ b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/execution/ExecutionFondControllerTest.java @@ -0,0 +1,57 @@ +package ru.spcex.clearing.backendapi.controller.queue.execution; + +import org.junit.jupiter.api.Test; +import ru.clearing.classes.statics.data.execution.ExecutionFond; +import ru.spcex.clearing.backendapi.controller.queue.AbstractControllerTest; +import ru.spcex.clearing.imdg.IMDGDistributedNames; + +import java.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDate; + +class ExecutionFondControllerTest extends AbstractControllerTest { + private static final String REST_URL = "/execution-fonds/"; + + /** + * {@link ExecutionFondController#getAll()}
+ * Тест проверяет получение запроса по REST API.
+ * Входной запрос /execution-fonds/
+ * Ответ CommonGetAllResponse
+ */ + @Test + void getAll() throws Exception { + //ARRANGE + ExecutionFond executionFond = new ExecutionFond(); + executionFond.setId(currentId.get()); + executionFond.setExchangeExecutionId(currentId.get()); + executionFond.setExchangeExecutionTime(Instant.now()); + executionFond.setTradingDate(LocalDate.now()); + executionFond.setTradingClearingRegistryId(currentId.get()); + executionFond.setMarket("mark"); + executionFond.setPrice(new BigDecimal(0)); + executionFond.setLots(new BigDecimal(0)); + executionFond.setQuantity(new BigDecimal(0)); + executionFond.setInterestAmount(new BigDecimal(0)); + executionFond.setSide("sid"); + executionFond.setSettlementCurrency("set"); + executionFond.setCompanyId(currentId.get()); + executionFond.setDuration(currentId.get()); + executionFond.setSecurityFullName("sec"); + executionFond.setSecuritySymbol("sec"); + executionFond.setSecurityId(currentId.get()); + executionFond.setCounterPartyId(currentId.get()); + executionFond.setCoverageStatus("cov"); + executionFond.setSessionId(currentId.get()); + executionFond.setClearingDate(LocalDate.now()); + executionFond.setExchangeOrderId(123L); + executionFond.setSettlementAmount(new BigDecimal(10)); + executionFond.setComment("comment - hello world fond"); + executionFond.setClientCodeId(444L); + executionFond.setSettlementCode("settl1"); + executionFond.setSettlementDate(LocalDate.now()); + executionFond.setExchangeExecutionMicroseconds(Instant.now()); + + //ACT and ASSERT + checkGettingAllFromRestApi(IMDGDistributedNames.Map_ExecutionFond, executionFond, REST_URL); + } +} \ No newline at end of file diff --git a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/registry/TradingClearingRegistryControllerTest.java b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/registry/TradingClearingRegistryControllerTest.java new file mode 100644 index 000000000..d09377db7 --- /dev/null +++ b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/registry/TradingClearingRegistryControllerTest.java @@ -0,0 +1,202 @@ +package ru.spcex.clearing.backendapi.controller.queue.registry; + +import org.junit.jupiter.api.Test; +import org.springframework.core.NestedExceptionUtils; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; +import ru.spcex.clearing.backendapi.controller.queue.AbstractControllerTest; +import ru.spcex.clearing.backendapi.controller.request.cud.registry.TradingClearingRegistryNewAction; +import ru.spcex.clearing.backendapi.controller.request.cud.registry.TradingClearingRegistryUpdateAction; +import ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction; +import ru.spcex.clearing.backendapi.controller.response.entity.registry.TradingClearingRegistryBackendGetById; +import ru.spcex.clearing.backendapi.controller.response.entity.registry.TradingClearingRegistryBackendGetFields; +import ru.spcex.clearing.backendapi.domain.actions.IAction; +import ru.spcex.clearing.backendapi.errors.ActionValidationException; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.registry.TradingClearingRegistryNewRequest; +import ru.spcex.platform.imdg.api.Imdg; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static ru.spcex.clearing.test.json.JsonUtil.writeValue; + +class TradingClearingRegistryControllerTest extends AbstractControllerTest { + private static final String REST_URL = "/registry/trading-clearing-registry/"; + + /** + * {@link TradingClearingRegistryController#add(TradingClearingRegistryNewAction)}
+ * Тест проверяет получение сущности {@link TradingClearingRegistryNewAction} по REST API и отправку в Apache Kafka.
+ * Входной запрос {@link TradingClearingRegistryNewRequest}:
+ * {@link TradingClearingRegistryNewRequest#companyId} - 1234567890
+ * {@link TradingClearingRegistryNewRequest#moneyAccountId} - 18415056336414057
+ * {@link TradingClearingRegistryNewRequest#depoAccountId} - 21239757374450030
+ * {@link TradingClearingRegistryNewRequest#status} - ACTV
+ */ + @Test + void add() throws Exception { + //ARRANGE + TradingClearingRegistryNewAction tradingClearingRegistryNewAction = getTradingClearingRegistryNewAction( + 0, + 1234567890L, 18415056336414057L, 21239757374450030L, "ACTV" + ); + + //ACT and ASSERT + checkAddingByRestApi(REST_URL, tradingClearingRegistryNewAction); + checkSendedMessegeFromKafka(Consts.DESTINATION_TRADING_CLEARING_REGISTRY_NEW, tradingClearingRegistryNewAction); + } + + /** + * {@link TradingClearingRegistryController#add(TradingClearingRegistryNewAction)}
+ * Тест проверяет работу валидации сущности {@link TradingClearingRegistryNewAction} принятой по REST API для отправку в Apache Kafka.
+ * Входной запрос {@link TradingClearingRegistryNewRequest}:
+ * {@link TradingClearingRegistryNewRequest#companyId} - 1234567890 / null
+ * {@link TradingClearingRegistryNewRequest#moneyAccountId} - 18415056336414057 / null
+ * {@link TradingClearingRegistryNewRequest#depoAccountId} - 21239757374450030
+ * {@link TradingClearingRegistryNewRequest#status} - ACTV
+ */ + @Test + void addWithException() { + assertThrowsForNew(getTradingClearingRegistryNewAction(0, null, 18415056336414057L, 21239757374450030L, "ACTV")); + assertThrowsForNew(getTradingClearingRegistryNewAction(0, 1234567890L, null, 21239757374450030L, "ACTV")); + } + + /** + * {@link TradingClearingRegistryController#update(Long, TradingClearingRegistryUpdateAction)}
+ * Тест проверяет получение сущности {@link TradingClearingRegistryUpdateAction} по REST API и отправку в Apache Kafka.
+ * Входной запрос {@link TradingClearingRegistryUpdateAction}:
+ * {@link TradingClearingRegistryUpdateAction#id} - generated
+ * {@link TradingClearingRegistryUpdateAction#code} - ACTV
+ */ + @Test + void update() throws Exception { + //ARRANGE + long id = 0; + TradingClearingRegistryUpdateAction tradingClearingRegistryUpdateAction = getTradingClearingRegistryUpdateAction( + id, "ACTV" + ); + + //ACT and ASSERT + checkUpdatingByRestApi(REST_URL, tradingClearingRegistryUpdateAction, id); + checkSendedMessegeFromKafka(Consts.DESTINATION_TRADING_CLEARING_REGISTRY_UPDATE, tradingClearingRegistryUpdateAction); + } + + /** + * {@link TradingClearingRegistryController#delete(Long)}
+ * Тест проверяет получение id сущности {@link Long} по REST API и отправку в Apache Kafka.
+ * Входной запрос /registry/trading-clearing-registry/{@link Long}: - 0L
+ */ + @Test + void delete() throws Exception { + //ARRANGE + long id = currentId.getAndIncrement(); + CommonDeleteAction deleteAction = new CommonDeleteAction(); + deleteAction.setId(id); + //ACT and ASSERT + checkDeletingByRestApi(REST_URL, id); + checkSendedMessegeFromKafka(Consts.DESTINATION_TRADING_CLEARING_REGISTRY_DELETE, deleteAction); + } + + /** + * {@link TradingClearingRegistryController#getById(Long)}
+ * Тест проверяет получение запроса по REST API и отправку всех записей из таблицы hazelcast Map_TradingClearingRegistry.
+ * Входной запрос /registry/trading-clearing-registry/{@link Long}: - 0L
+ * Ответ BankAccountBackendGetById
+ */ + @Test + void getById() throws Exception { + //ARRANGE + TradingClearingRegistry existTradingClearingRegistry = new TradingClearingRegistry(); + existTradingClearingRegistry.setCompanyId(365L); + existTradingClearingRegistry.setCode("99999"); + existTradingClearingRegistry.setMoneyAccountId(404L); + existTradingClearingRegistry.setDepoAaccountId(512L); + existTradingClearingRegistry.setTradingClearingRegistryType("RUB"); + existTradingClearingRegistry.setTradingClearingRegistryLevel("OOO ROGA I KOPITA"); + existTradingClearingRegistry.setTradingClearingRegistryPurpose("848484848484"); + existTradingClearingRegistry.setStatus("ACTV"); + existTradingClearingRegistry.setId(currentId.get()); + + Imdg inDocumentJournalImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class); + inDocumentJournalImdg.insert(existTradingClearingRegistry); + + TradingClearingRegistryBackendGetById expected = new TradingClearingRegistryBackendGetById(); + TradingClearingRegistryBackendGetFields payload = new TradingClearingRegistryBackendGetFields(); + payload.setId(existTradingClearingRegistry.getId()); + payload.setCompanyId(existTradingClearingRegistry.getCompanyId()); + payload.setCode(existTradingClearingRegistry.getCode()); + payload.setMoneyAccountId(existTradingClearingRegistry.getMoneyAccountId()); + payload.setDepoAaccountId(existTradingClearingRegistry.getDepoAaccountId()); + payload.setTradingClearingRegistryType(existTradingClearingRegistry.getTradingClearingRegistryType()); + payload.setTradingClearingRegistryLevel(existTradingClearingRegistry.getTradingClearingRegistryLevel()); + payload.setTradingClearingRegistryPurpose(existTradingClearingRegistry.getTradingClearingRegistryPurpose()); + payload.setStatus(existTradingClearingRegistry.getStatus()); + payload.setCreatedAt(existTradingClearingRegistry.getCreated()); + payload.setUpdatedAt(existTradingClearingRegistry.getUpdated()); + expected.setPayload(payload); + //ACT + perform(MockMvcRequestBuilders.get(REST_URL + existTradingClearingRegistry.getId()) + .contentType(MediaType.APPLICATION_JSON)) + .andDo(print())//output to the log request and response +// ASSERT + .andExpect(status().isOk()) + .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) + .andExpect(content().json(writeValue(expected))); + } + + /** + * {@link TradingClearingRegistryController#getAll()}
+ * Тест проверяет получение запроса по REST API и отправку всех записей из таблицы hazelcast Map_BankAccount.
+ * Входной запрос /registry/trading-clearing-registry/
+ * Ответ CommonGetAllResponse
+ */ + @Test + void getAll() throws Exception { + //ARRANGE + TradingClearingRegistry existTradingClearingRegistry = new TradingClearingRegistry(); + existTradingClearingRegistry.setCompanyId(365L); + existTradingClearingRegistry.setCode("99999"); + existTradingClearingRegistry.setMoneyAccountId(404L); + existTradingClearingRegistry.setDepoAaccountId(512L); + existTradingClearingRegistry.setTradingClearingRegistryType("RUB"); + existTradingClearingRegistry.setTradingClearingRegistryLevel("OOO ROGA I KOPITA"); + existTradingClearingRegistry.setTradingClearingRegistryPurpose("848484848484"); + existTradingClearingRegistry.setStatus("ACTV"); + existTradingClearingRegistry.setId(currentId.get()); + + //ACT and ASSERT + checkGettingAllFromRestApi(IMDGDistributedNames.Map_TradingClearingRegistry, existTradingClearingRegistry, REST_URL); + } + + private void assertThrowsForNew(IAction iAction) { + assertThrows(ActionValidationException.class, () -> { + try { + perform(MockMvcRequestBuilders.post(REST_URL).contentType(MediaType.APPLICATION_JSON).content(writeValue(iAction))); + } catch (Exception e) { + Throwable rootCause = NestedExceptionUtils.getRootCause(e); + throw rootCause != null ? rootCause : e; + } + }); + } + + private TradingClearingRegistryNewAction getTradingClearingRegistryNewAction(long id, + Long companyId, Long moneyAccountId, Long depoAccountId, String status + ) { + TradingClearingRegistryNewAction tradingClearingRegistryNewAction = new TradingClearingRegistryNewAction(); + tradingClearingRegistryNewAction.setCompanyId(companyId); + tradingClearingRegistryNewAction.setMoneyAccountId(moneyAccountId); + tradingClearingRegistryNewAction.setDepoAccountId(21239757374450030L); + tradingClearingRegistryNewAction.setStatus(status); + return tradingClearingRegistryNewAction; + } + + private TradingClearingRegistryUpdateAction getTradingClearingRegistryUpdateAction(Long id, String status) { + TradingClearingRegistryUpdateAction tradingClearingRegistryUpdateAction = new TradingClearingRegistryUpdateAction(); + tradingClearingRegistryUpdateAction.setId(id); + tradingClearingRegistryUpdateAction.setStatus(status); + return tradingClearingRegistryUpdateAction; + } +} \ No newline at end of file diff --git a/clearing-parent/backend-api/src/test/resources/meta.json b/clearing-parent/backend-api/src/test/resources/meta.json index ae0b87f27..fc28c822d 100644 --- a/clearing-parent/backend-api/src/test/resources/meta.json +++ b/clearing-parent/backend-api/src/test/resources/meta.json @@ -1,6 +1,6 @@ { - "version": "3.5.0.18", + "version": "3.5.0.19", "enums": { @@ -612,7 +612,7 @@ "name": "Справочник символов регистров - назначения", - "class": "com.spicex.dictionary.RegistryDesignationDictionary", + "class": "ru.clearing.platform.dictionary.RegistryDesignationDictionary", "table": "registry_designation_dictionary", @@ -635,7 +635,7 @@ "name": "Справочник символов регистров - инструменты", - "class": "com.spicex.dictionary.RegistryInstrumentTypeDictionary", + "class": "ru.clearing.platform.dictionary.RegistryInstrumentTypeDictionary", "table": "registry_instrument_type_dictionary", @@ -658,7 +658,7 @@ "name": "Справочник символов регистров - источники средств", - "class": "com.spicex.dictionary.RegistryCapacityDictionary", + "class": "ru.clearing.platform.dictionary.RegistryCapacityDictionary", "table": "registry_capacity_dictionary", @@ -681,7 +681,7 @@ "name": "Справочник символов регистров - части регистров", - "class": "com.spicex.dictionary.RegistryUnitDictionary", + "class": "ru.clearing.platform.dictionary.RegistryUnitDictionary", "table": "registry_unit_dictionary", @@ -704,7 +704,7 @@ "name": "Справочник кодов регистров", - "class": "com.spicex.dictionary.RegistryCodeDictionary", + "class": "ru.clearing.platform.dictionary.RegistryCodeDictionary", "table": "registry_code_dictionary", @@ -727,7 +727,7 @@ "name": "Справочник статусов регистров", - "class": "com.spicex.dictionary.RegistryStatusDictionary", + "class": "ru.clearing.platform.dictionary.RegistryStatusDictionary", "table": "registry_status_dictionary", @@ -929,6 +929,75 @@ } ] } + , + "sessionStatus": { + + "name": "Справочник статусов клиринговых сессий", + + "class": "ru.clearing.platform.dictionary.SessionStatusDictionary", + + "table": "session_status_dictionary", + + "fields": [ + {"code": "id", + "name": "Идентификатор","shortname": "ID","type": 1 + } + , + {"code": "code", + "name": "Код","shortname": "Код","type": 12 + } + , + {"code": "name", + "name": "Наименование","shortname": "Наименование","type": 2,"length": 50 + } + ] + } + , + "sessionType": { + + "name": "Справочник типов клиринговых сессий", + + "class": "ru.clearing.platform.dictionary.SessionTypeDictionary", + + "table": "session_type_dictionary", + + "fields": [ + {"code": "id", + "name": "Идентификатор","shortname": "ID","type": 1 + } + , + {"code": "code", + "name": "Код","shortname": "Код","type": 12 + } + , + {"code": "name", + "name": "Наименование","shortname": "Наименование","type": 2,"length": 50 + } + ] + } + , + "moneyFlowSide": { + + "name": "Справочник направлений", + + "class": "ru.clearing.platform.dictionary.MoneyFlowSideDictionary", + + "table": "money_flow_side_dictionary", + + "fields": [ + {"code": "id", + "name": "Идентификатор","shortname": "ID","type": 1 + } + , + {"code": "code", + "name": "Код","shortname": "Код","type": 12 + } + , + {"code": "name", + "name": "Значение","shortname": "Значение","type": 2,"length": 255 + } + ] + } , "chargeDirection": { @@ -1044,29 +1113,6 @@ } ] } - , - "moneyFlowSide": { - - "name": "Направление заявки", - - "class": "ru.clearing.platform.dictionary.MoneyFlowSideDictionary", - - "table": "money_flow_side_dictionary", - - "fields": [ - {"code": "id", - "name": "Идентификатор","shortname": "ID","type": 1 - } - , - {"code": "code", - "name": "Код","shortname": "Код","type": 12 - } - , - {"code": "name", - "name": "Значение","shortname": "Значение","type": 2,"length": 255 - } - ] - } , "inOutDirection": { @@ -1297,29 +1343,6 @@ } ] } - , - "sessionStatus": { - - "name": "Справочник статусов клиринговой сессии", - - "class": "ru.clearing.platform.dictionary.SessionStatusDictionary", - - "table": "session_status_dictionary", - - "fields": [ - {"code": "id", - "name": "Идентификатор","shortname": "ID","type": 1 - } - , - {"code": "code", - "name": "Код","shortname": "Код","type": 12 - } - , - {"code": "name", - "name": "Наименование","shortname": "Наименование","type": 2,"length": 50 - } - ] - } , "objectType": { @@ -3392,6 +3415,8 @@ "name": "Блокировка кода клиента", + "confirmation": "companyId,code", + "fields": [ {"code": "id", "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "clientCode","linkCode": "id","required": true @@ -3458,7 +3483,62 @@ "field": "updated","type": 4,"webtype": "5","dbname": "Дата-время изменения записи","name": "Время изменения записи","shortname": "Изменено","searchable": true,"sortable": true,"ignore": true } ] - + ,"actions":[ + {"method":"post", + + "name": "Добавление ТКР", + + "confirmation": "companyId,moneyAccountId,depoAccountId,status", + + "fields": [ + {"code": "companyId", + "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName","required": true + } + , + {"code": "moneyAccountId", + "type": 1,"name": "Номер денежного счета","shortname": "Денежный счет","link": "account","linkCode": "account","required": true + } + , + {"code": "depoAccountId", + "type": 1,"name": "Номер депозитарного счета","shortname": "Депозитарный счет","link": "account","linkCode": "account" + } + , + {"code": "status", + "type": 12,"name": "Наименование статуса","shortname": "Статус","link": "workflowStatus" + } + ] + } + , + {"method":"put", + + "name": "Изменение ТКР", + + "confirmation": "companyId,moneyAccountId,depoAccountId,status", + + "fields": [ + {"code": "id", + "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "clientCode","linkCode": "id","required": true + } + , + {"code": "status", + "type": 12,"name": "Наименование статуса","shortname": "Статус","link": "workflowStatus" + } + ] + } + , + {"method":"delete", + + "name": "Блокировка ТКР", + + "confirmation": "companyId,code", + + "fields": [ + {"code": "id", + "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "clientCode","linkCode": "id","required": true + } + ] + } + ] } , "registry": { @@ -3710,7 +3790,74 @@ "field": "updated","type": 4,"webtype": "5","dbname": "Дата-время изменения записи","name": "Время изменения записи","shortname": "Изменено","searchable": true,"sortable": true } ] - + ,"actions":[ + {"method":"post", + + "name": "Добавление корреспондентского счета", + + "confirmation": "companyId,account,status", + + "fields": [ + {"code": "companyId", + "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName","required": true + } + , + {"code": "account", + "type": 2,"length": 50,"name": "Номер счета","shortname": "Счет","required": true + } + , + {"code": "status", + "type": 12,"name": "Наименование статуса","shortname": "Статус","link": "serviceStatus" + } + , + {"code": "accountType", + "type": 12,"name": "Наименование типа счета","shortname": "Тип","link": "accountType","required": true,"visible": false + } + ] + } + , + {"method":"put", + + "name": "Изменение корреспондентского счета", + + "confirmation": "companyId,account,status", + + "fields": [ + {"code": "id", + "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "account","linkCode": "id","required": true + } + , + {"code": "companyId", + "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName" + } + , + {"code": "account", + "type": 2,"length": 50,"name": "Номер счета","shortname": "Счет" + } + , + {"code": "status", + "type": 12,"name": "Наименование статуса","shortname": "Статус","link": "serviceStatus" + } + , + {"code": "accountType", + "type": 12,"name": "Наименование типа счета","shortname": "Тип","link": "accountType","required": true,"visible": false + } + ] + } + , + {"method":"delete", + + "name": "Блокировка корреспондентского счета", + + "confirmation": "companyId,account", + + "fields": [ + {"code": "id", + "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "account","linkCode": "id","required": true + } + ] + } + ] } , "relation": { @@ -4981,6 +5128,526 @@ "fields": [] } ] + } + , + "session": { + + "name": "Клиринговая сессия", + + "destination": "sessions", + + "class": "ru.clearing.classes.statics.data.misc.Session", + + "logUpdates": "true", + + "table": "session", + + "fields": [ + {"code": "id", + "type": 1,"name": "Идентификатор записи","shortname": "ID","searchable": true,"sortable": true + } + , + {"code": "createdAt", + "field": "created","type": 4,"webtype": "5","dbname": "Дата-время создания записи","name": "Время создания записи","shortname": "Создано","searchable": true,"sortable": true,"ignore": true + } + , + {"code": "updatedAt", + "field": "updated","type": 4,"webtype": "5","dbname": "Дата-время изменения записи","name": "Время изменения записи","shortname": "Изменено","searchable": true,"sortable": true,"ignore": true + } + , + {"code": "clearingDate", + "type": 6,"name": "Дата","shortname": "Дата","searchable": true,"sortable": true,"visible": true + } + , + {"code": "sessionStatus", + "type": 12,"dbname": "Код статуса клиринговой сессии","name": "Статус клиринговой сессии","shortname": "Статус","searchable": true,"sortable": true,"visible": true,"link": "sessionStatus" + } + , + {"code": "companyId", + "type": 1,"dbname": "Идентификатор инициатора торгов","name": "Наименование инициатора торгов","shortname": "Инициатор","visible": false,"searchable": true,"sortable": true,"link": "company","linkCode": "shortName" + } + , + {"code": "securityId", + "type": 1,"dbname": "Идентификатор инструмента","name": "Наименование инструмента","shortname": "Инструмент","searchable": false,"sortable": true,"visible": true,"link": "security","linkCode": "shortName" + } + , + {"code": "userId", + "type": 1,"dbname": "Идентификатор пользователя","name": "Наименование пользователя","shortname": "Пользователь","searchable": true,"sortable": true,"visible": true,"link": "userCls" + } + , + {"code": "section", + "type": 12,"dbname": "Код наименования секции","name": "Наименование секции","shortname": "Секция","searchable": true,"sortable": true,"visible": true,"link": "section" + } + , + {"code": "sessionType", + "type": 12,"dbname": "Код типа клиринговой сессии","name": "Тип клиринговой сессии","shortname": "Тип","searchable": true,"sortable": true,"visible": true,"link": "sessionType" + } + ] + + } + , + "sTrades": { + + "name": "Сделки из Торговой системы", + + "class": "ru.clearing.classes.statics.data.misc.STrades", + + "table": "s_trades", + + "fields": [ + {"code": "id", + "type": 1,"name": "Идентификатор записи","shortname": "ID","searchable": true,"sortable": true + } + , + {"code": "tradeNum", + "type": 1,"name": "Номер сделки","shortname": "Номер сделки","searchable": true,"sortable": true + } + , + {"code": "operation", + "type": 2,"length": 40,"name": "Направленность сделки (BUY или SELL)","shortname": "Направленность сделки","searchable": true,"sortable": true + } + , + {"code": "classCode", + "type": 2,"length": 255,"name": "Код класса инструментов","shortname": "Код класса инструментов","searchable": true,"sortable": true + } + , + {"code": "tradeDate", + "type": 6,"name": "Дата торговой сессии","shortname": "Дата торговой сессии","searchable": true,"sortable": true + } + , + {"code": "secCode", + "type": 2,"length": 255,"name": "Код инструмента","shortname": "Код инструмента","searchable": true,"sortable": true + } + , + {"code": "accruedint", + "type": 10,"name": "Накопленный купонный доход","shortname": "НКД","searchable": true,"sortable": true + } + , + {"code": "accruedint2", + "type": 10,"name": "Доход(%) на дату выкупа","shortname": "Доход(%) на дату выкупа","searchable": true,"sortable": true + } + , + {"code": "lowerDiscount", + "type": 10,"name": "Нижний дисконт(%)","shortname": "Нижний дисконт(%)","searchable": true,"sortable": true + } + , + {"code": "orderNum", + "type": 1,"name": "Номер заявки","shortname": "Номер заявки","searchable": true,"sortable": true + } + , + {"code": "price", + "type": 10,"name": "Цена сделки","shortname": "Цена сделки","searchable": true,"sortable": true + } + , + {"code": "price2", + "type": 10,"name": "Цена выкупа второй части РЕПО","shortname": "Цена выкупа второй части РЕПО","searchable": true,"sortable": true + } + , + {"code": "repoRate", + "type": 10,"name": "Ставка РЕПО (%)","shortname": "Ставка РЕПО (%)","searchable": true,"sortable": true + } + , + {"code": "repoValue", + "type": 10,"name": "Сумма РЕПО","shortname": "Сумма РЕПО","searchable": true,"sortable": true + } + , + {"code": "repo2Value", + "type": 10,"name": "Объем сделки выкупа РЕПО, рублей","shortname": "Объем сделки выкупа РЕПО, рублей","searchable": true,"sortable": true + } + , + {"code": "startDiscount", + "type": 10,"name": "Начальный дисконт(%)","shortname": "Начальный дисконт(%)","searchable": true,"sortable": true + } + , + {"code": "tsCommission", + "type": 10,"name": "Комиссия торговой системы","shortname": "Комиссия торговой системы","searchable": true,"sortable": true + } + , + {"code": "upperDiscount", + "type": 10,"name": "Верхний дисконт(%)","shortname": "Верхний дисконт(%)","searchable": true,"sortable": true + } + , + {"code": "value", + "type": 10,"name": "Объем сделки без учета комиссионного сбора биржи и % дохода","shortname": "Объем сделки без сбора","searchable": true,"sortable": true + } + , + {"code": "yield", + "type": 10,"name": "Доходность","shortname": "Доходность","searchable": true,"sortable": true + } + , + {"code": "qty", + "type": 10,"name": "Количество бумаг в лотах","shortname": "Количество в лотах","searchable": true,"sortable": true + } + , + {"code": "qtyPcs", + "type": 10,"name": "Количество бумаг в штуках","shortname": "Количество в штуках","searchable": true,"sortable": true + } + , + {"code": "tradeDateTime", + "type": 4,"name": "Дата и время сделки","shortname": "Дата и время сделки","searchable": true,"sortable": true + } + , + {"code": "repoTerm", + "type": 3,"name": "Срок РЕПО","shortname": "Срок РЕПО","searchable": true,"sortable": true + } + , + {"code": "clearingCommission", + "type": 10,"name": "Клиринговая комиссия. Параметр сделок на МБ","shortname": "Клиринговая комиссия","searchable": true,"sortable": true + } + , + {"code": "exchangeCommission", + "type": 10,"name": "Комиссия Фондовой биржи. Параметр сделок на МБ","shortname": "Комиссия Фондовой биржи","searchable": true,"sortable": true + } + , + {"code": "techCenterCommission", + "type": 10,"name": "Комиссия Технического центра. Параметр сделок на МБ","shortname": "Комиссия Технического центра","searchable": true,"sortable": true + } + , + {"code": "account", + "type": 2,"length": 50,"name": "Торговый счет","shortname": "Торговый счет","searchable": true,"sortable": true + } + , + {"code": "brokerRef", + "type": 2,"length": 34,"name": "Комментарий, обычно: код клиента>/номер поручения>","shortname": "Комментарий","searchable": true,"sortable": true + } + , + {"code": "clientCode", + "type": 2,"length": 255,"name": "Код участника торгов = Код участника клиринга = Код участника расчетов","shortname": "Код клиента","searchable": true,"sortable": true + } + , + {"code": "settleCode", + "type": 2,"length": 50,"name": "Код расчетов по сделке","shortname": "Код расчетов","searchable": true,"sortable": true + } + , + {"code": "userId", + "type": 2,"length": 32,"name": "Идентификатор трейдера","shortname": "Идентификатор трейдера","searchable": true,"sortable": true + } + , + {"code": "exchangeCode", + "type": 2,"length": 64,"name": "Идентификатор биржи","shortname": "Идентификатор биржи","searchable": true,"sortable": true + } + , + {"code": "firmId", + "type": 2,"length": 255,"name": "Трейдер","shortname": "Трейдер","searchable": true,"sortable": true + } + , + {"code": "firmName", + "type": 2,"length": 255,"name": "Организация трейдера","shortname": "Организация трейдера","searchable": true,"sortable": true + } + , + {"code": "cpFirmId", + "type": 2,"length": 255,"name": "Партнер","shortname": "Партнер","searchable": true,"sortable": true + } + , + {"code": "cpFirmName", + "type": 2,"length": 255,"name": "Организация партнера","shortname": "Организация партнера","searchable": true,"sortable": true + } + , + {"code": "className", + "type": 2,"length": 255,"name": "Класс инструмента","shortname": "Класс инструмента","searchable": true,"sortable": true + } + , + {"code": "secName", + "type": 2,"length": 255,"name": "Полное наименование инструмента","shortname": "Полное наименование инструмента","searchable": true,"sortable": true + } + , + {"code": "settleDate", + "type": 6,"name": "Дата расчетов","shortname": "Дата расчетов","searchable": true,"sortable": true + } + , + {"code": "settleCurrency", + "type": 2,"length": 4,"name": "Валюта расчетов","shortname": "Валюта расчетов","searchable": true,"sortable": true + } + , + {"code": "tradeCurrency", + "type": 2,"length": 4,"name": "Валюта сделки","shortname": "Валюта сделки","searchable": true,"sortable": true + } + , + {"code": "tradeTimeMs", + "type": 3,"name": "Микросекунды времени сделки","shortname": "Микросекунды времени сделки","searchable": true,"sortable": true + } + , + {"code": "bankAccId", + "type": 2,"length": 12,"name": "Идентификатор расчетного счета/кода в клиринговой организации","shortname": "Код позиции","searchable": true,"sortable": true + } + , + {"code": "section", + "type": 12,"dbname": "Код наименования секции","name": "Наименование секции","shortname": "Секция","searchable": true,"sortable": true,"visible": true,"link": "section" + } + ] + + } + , + "executionDeposit": { + + "name": "Сделки", + + "destination": "execution-deposits", + + "class": "ru.clearing.classes.statics.data.execution.ExecutionDeposit", + + "logUpdates": "true", + + "table": "execution_deposit", + + "fields": [ + {"code": "exchangeExecutionId", + "type": 1,"name": "Идентификационный номер сделки в Торговой системе","shortname": "Номер сделки","visible": true,"searchable": true,"sortable": true + } + , + {"code": "exchangeExecutionTime", + "type": 4,"name": "Время заключения сделки в Торговой системе","shortname": "Время заключения сделки","visible": true,"searchable": true,"sortable": true + } + , + {"code": "tradingDate", + "type": 6,"name": "Дата заключения сделки","shortname": "Дата заключения сделки","visible": true,"searchable": true,"sortable": true + } + , + {"code": "tradingClearingRegistryId", + "type": 1,"dbname": "Идентификатор торгово-клирингового регистра","name": "Торгово-клиринговый регистр","shortname": "ТКР","visible": true,"searchable": true,"sortable": true,"link": "tradingClearingRegistry" + } + , + {"code": "market", + "type": 12,"dbname": "Код секции финансового инструмента","name": "Секция финансового инструмента","shortname": "Секция","visible": true,"searchable": true,"sortable": true,"link": "market","linkCode": "name" + } + , + {"code": "price", + "type": 10,"name": "Ставка по депозиту","shortname": "Ставка, %","visible": true,"searchable": true,"sortable": true + } + , + {"code": "lots", + "type": 11,"name": "Количество лотов","shortname": "Лоты","visible": true,"searchable": true,"sortable": true + } + , + {"code": "quantity", + "type": 11,"name": "Количество штук","shortname": "Штуки","visible": false,"searchable": true,"sortable": true + } + , + {"code": "firstLegAmount", + "type": 11,"name": "Объем сделки","shortname": "Объем","visible": true,"searchable": true,"sortable": true + } + , + {"code": "secondLegAmount", + "type": 11,"name": "Объем возврата","shortname": "Объем возврата","visible": false,"searchable": true,"sortable": true + } + , + {"code": "interestAmount", + "type": 11,"name": "Объем процентов","shortname": "Проценты","visible": false,"searchable": true,"sortable": true + } + , + {"code": "side", + "type": 12,"dbname": "Код направления сделки","name": "Направление сделки","shortname": "Направление","visible": true,"searchable": true,"sortable": true,"link": "moneyFlowSide" + } + , + {"code": "settlementCurrency", + "type": 12,"dbname": "Код валюты расчетов по инструменту","name": "Валюта расчетов по инструменту","shortname": "Валюта","visible": true,"searchable": true,"sortable": true,"link": "currencyCode","linkCode": "code" + } + , + {"code": "companyId", + "type": 1,"dbname": "Идентификатор компании","name": "Наименование компании","shortname": "Компания","visible": true,"searchable": true,"sortable": true,"link": "company","linkCode": "shortName" + } + , + {"code": "duration", + "type": 1,"name": "Срок, дней","shortname": "Срок","visible": true,"searchable": true,"sortable": true + } + , + {"code": "firstLegSettlementDate", + "type": 6,"name": "Дата размещения","shortname": "Дата размещения","visible": true,"searchable": true,"sortable": true + } + , + {"code": "secondLegSettlementDate", + "type": 6,"name": "Дата возврата","shortname": "Дата возврата","visible": true,"searchable": true,"sortable": true + } + , + {"code": "firstLegSettlementCode", + "type": 2,"length": 12,"name": "Код расчетов при размещении","shortname": "Код расчетов при размещении","visible": false,"searchable": true,"sortable": true,"ignore": true + } + , + {"code": "secondLegSettlementCode", + "type": 2,"length": 12,"name": "Код расчетов при возврате","shortname": "Код расчетов","visible": false,"searchable": true,"sortable": true,"ignore": true + } + , + {"code": "securityFullName", + "type": 2,"length": 255,"name": "Наименование инструмента","shortname": "Инструмент","visible": true,"searchable": true,"sortable": true + } + , + {"code": "securitySymbol", + "type": 2,"length": 255,"name": "Код инструмента в Торговой Системе","shortname": "Код инструмента","visible": true,"searchable": true,"sortable": true + } + , + {"code": "securityId", + "type": 1,"dbname": "Идентификатор финансового инструмента","name": "Финансовый инструмент","shortname": "Код биржевого инструмента / товара","searchable": true,"sortable": true,"link": "moneyMarketSecurity","linkCode": "securitySymbol","ignore": true + } + , + {"code": "contract", + "type": 2,"name": "Продукт","shortname": "Продукт","searchable": true,"sortable": true,"length": 255,"visible": true + } + , + {"code": "counterPartyId", + "type": 1,"dbname": "Идентификатор компании-партнера, с которой заключена сделка","name": "Наименование компании-партнера, с которой заключена сделка","shortname": "Партнер","visible": false,"searchable": true,"sortable": true,"link": "company" + } + , + {"code": "coverageStatus", + "type": 12,"dbname": "Код статуса достаточности обеспечения","name": "Cтатус достаточности обеспечения","shortname": "Обеспеченность","searchable": true,"sortable": true,"link": "allowed" + } + , + {"code": "sessionId", + "type": 1,"name": "Сессия","shortname": "Сессия","visible": true,"searchable": true,"sortable": true,"link": "session" + } + , + {"code": "id", + "type": 1,"name": "Идентификатор записи","shortname": "ID","visible": false,"searchable": true,"sortable": true + } + , + {"code": "createdAt", + "field": "created","type": 4,"webtype": "5","dbname": "Дата-время создания записи","name": "Время создания записи","shortname": "Создано","visible": false,"searchable": true,"sortable": true + } + , + {"code": "updatedAt", + "field": "updated","type": 4,"webtype": "5","dbname": "Дата-время изменения записи","name": "Время изменения записи","shortname": "Изменено","visible": false,"searchable": true,"sortable": true + } + , + {"code": "clearingDate", + "type": 6,"name": "Дата клиринга","shortname": "Дата клиринга","visible": false,"searchable": true,"sortable": true + } + ] + + } + , + "executionFond": { + + "name": "Сделки на Фондовой секции", + + "destination": "execution-fonds", + + "class": "ru.clearing.classes.statics.data.execution.ExecutionFond", + + "logUpdates": "true", + + "table": "execution_fond", + + "fields": [ + {"code": "id", + "type": 1,"name": "Идентификатор записи","shortname": "ID","visible": false,"searchable": true,"sortable": true + } + , + {"code": "createdAt", + "field": "created","type": 4,"webtype": "5","dbname": "Дата-время создания записи","name": "Время создания записи","shortname": "Создано","visible": false,"searchable": true,"sortable": true + } + , + {"code": "updatedAt", + "field": "updated","type": 4,"webtype": "5","dbname": "Дата-время изменения записи","name": "Время изменения записи","shortname": "Изменено","visible": false,"searchable": true,"sortable": true + } + , + {"code": "clearingDate", + "type": 6,"name": "Дата клиринга","shortname": "Дата клиринга","visible": false,"searchable": true,"sortable": true + } + , + {"code": "exchangeExecutionId", + "type": 1,"name": "Идентификационный номер сделки в Торговой системе","shortname": "Номер сделки","visible": true,"searchable": true,"sortable": true + } + , + {"code": "side", + "type": 12,"dbname": "Код направления сделки","name": "Направление сделки","shortname": "Направление","visible": true,"searchable": true,"sortable": true,"link": "moneyFlowSide" + } + , + {"code": "market", + "type": 12,"dbname": "Код секции финансового инструмента","name": "Секция финансового инструмента","shortname": "Секция","visible": true,"searchable": true,"sortable": true,"link": "market","linkCode": "name" + } + , + {"code": "tradingDate", + "type": 6,"name": "Дата заключения сделки","shortname": "Дата заключения сделки","visible": true,"searchable": true,"sortable": true + } + , + {"code": "securitySymbol", + "type": 2,"length": 255,"name": "Код инструмента в Торговой Системе","shortname": "Код инструмента","visible": true,"searchable": true,"sortable": true + } + , + {"code": "securityId", + "type": 1,"dbname": "Идентификатор финансового инструмента","name": "Финансовый инструмент","shortname": "Код биржевого инструмента / товара","searchable": true,"sortable": true,"link": "security","linkCode": "securitySymbol","ignore": true + } + , + {"code": "interestAmount", + "type": 11,"name": "Объем процентов","shortname": "Проценты","visible": false,"searchable": true,"sortable": true + } + , + {"code": "exchangeOrderId", + "type": 1,"name": "Идентификационный номер заявки в Торговой системе","shortname": "Номер заявки","visible": true,"searchable": true,"sortable": true + } + , + {"code": "price", + "type": 10,"name": "Ставка по депозиту","shortname": "Ставка, %","visible": true,"searchable": true,"sortable": true + } + , + {"code": "settlementAmount", + "type": 11,"name": "Объем сделки","shortname": "Объем","visible": true,"searchable": true,"sortable": true + } + , + {"code": "lots", + "type": 11,"name": "Количество лотов","shortname": "Лоты","visible": true,"searchable": true,"sortable": true + } + , + {"code": "quantity", + "type": 11,"name": "Количество штук","shortname": "Штуки","visible": false,"searchable": true,"sortable": true + } + , + {"code": "exchangeExecutionTime", + "type": 4,"name": "Время заключения сделки в Торговой системе","shortname": "Время заключения сделки","visible": true,"searchable": true,"sortable": true + } + , + {"code": "duration", + "type": 1,"name": "Срок, дней","shortname": "Срок","visible": true,"searchable": true,"sortable": true + } + , + {"code": "tradingClearingRegistryId", + "type": 1,"dbname": "Идентификатор торгово-клирингового регистра","name": "Торгово-клиринговый регистр","shortname": "ТКР","visible": true,"searchable": true,"sortable": true,"link": "tradingClearingRegistry" + } + , + {"code": "comment", + "type": 2,"name": "Комментарий","shortname": "Комментарий","searchable": true,"sortable": true,"length": 255 + } + , + {"code": "clientCodeId", + "type": 1,"dbname": "Идентификатор кода клиента","name": "Код клиента","shortname": "Клиент","searchable": true,"sortable": true,"visible": true + } + , + {"code": "settlementCode", + "type": 2,"length": 12,"name": "Код расчетов при размещении","shortname": "Код расчетов при размещении","visible": false,"searchable": true,"sortable": true,"ignore": true + } + , + {"code": "companyId", + "type": 1,"dbname": "Идентификатор компании","name": "Наименование компании","shortname": "Компания","visible": true,"searchable": true,"sortable": true,"link": "company","linkCode": "shortName" + } + , + {"code": "counterPartyId", + "type": 1,"dbname": "Идентификатор компании-партнера, с которой заключена сделка","name": "Наименование компании-партнера, с которой заключена сделка","shortname": "Партнер","visible": false,"searchable": true,"sortable": true,"link": "company" + } + , + {"code": "securityFullName", + "type": 2,"length": 255,"name": "Наименование инструмента","shortname": "Инструмент","visible": true,"searchable": true,"sortable": true + } + , + {"code": "settlementDate", + "type": 6,"name": "Дата расчетов","shortname": "Дата расчетов","visible": true,"searchable": true,"sortable": true + } + , + {"code": "settlementCurrency", + "type": 12,"dbname": "Код валюты расчетов по инструменту","name": "Валюта расчетов по инструменту","shortname": "Валюта","visible": true,"searchable": true,"sortable": true,"link": "currencyCode","linkCode": "code" + } + , + {"code": "exchangeExecutionMicroseconds", + "type": 4,"name": "Микросекунды заключения сделки в Торговой системе","shortname": "Микросекунды заключения сделки","visible": true,"searchable": true,"sortable": true + } + , + {"code": "coverageStatus", + "type": 12,"dbname": "Код статуса достаточности обеспечения","name": "Cтатус достаточности обеспечения","shortname": "Обеспеченность","searchable": true,"sortable": true,"link": "allowed" + } + , + {"code": "sessionId", + "type": 1,"dbname": "Идентификатор сессии","name": "Сессия","shortname": "Сессия","visible": true,"searchable": true,"sortable": true,"link": "session" + } + ] + } , "clearmemberRegister": { @@ -5520,136 +6187,6 @@ } ] - } - , - "executionDeposit": { - - "name": "Сделки", - - "destination": "execution-deposits", - - "class": "ru.clearing.classes.statics.data.execution.ExecutionDeposit", - - "table": "execution_deposit", - - "fields": [ - {"code": "exchangeExecutionId", - "type": 1,"name": "Идентификационный номер сделки в Торговой системе","shortname": "Номер сделки","visible": true,"searchable": true,"sortable": true - } - , - {"code": "exchangeExecutionTime", - "type": 4,"name": "Время заключения сделки в Торговой системе","shortname": "Время заключения сделки","visible": true,"searchable": true,"sortable": true - } - , - {"code": "tradingDate", - "type": 6,"name": "Дата заключения сделки","shortname": "Дата заключения сделки","visible": true,"searchable": true,"sortable": true - } - , - {"code": "accountId", - "type": 1,"name": "Торговый счет","shortname": "Счет","visible": true,"searchable": true,"sortable": true,"link": "account","linkCode": "account" - } - , - {"code": "market", - "type": 12,"name": "Секция финансового инструмента","shortname": "Секция","visible": true,"searchable": true,"sortable": true,"link": "market","linkCode": "name" - } - , - {"code": "price", - "type": 10,"name": "Ставка по депозиту","shortname": "Ставка, %","visible": true,"searchable": true,"sortable": true - } - , - {"code": "lots", - "type": 11,"name": "Количество лотов","shortname": "Лоты","visible": true,"searchable": true,"sortable": true - } - , - {"code": "quantity", - "type": 11,"name": "Количество штук","shortname": "Штуки","visible": false,"searchable": true,"sortable": true - } - , - {"code": "firstLegAmount", - "type": 11,"name": "Объем сделки","shortname": "Объем","visible": true,"searchable": true,"sortable": true - } - , - {"code": "secondLegAmount", - "type": 11,"name": "Объем возврата","shortname": "Объем возврата","visible": false,"searchable": true,"sortable": true - } - , - {"code": "interestAmount", - "type": 11,"name": "Объем процентов","shortname": "Проценты","visible": false,"searchable": true,"sortable": true - } - , - {"code": "side", - "type": 12,"name": "Направление сделки","shortname": "Направление","visible": true,"searchable": true,"sortable": true,"link": "moneyFlowSide" - } - , - {"code": "settlementCurrency", - "type": 12,"name": "Валюта расчетов по инструменту","shortname": "Валюта","visible": true,"searchable": true,"sortable": true,"link": "currencyCode","linkCode": "code" - } - , - {"code": "companyId", - "type": 1,"name": "Название компании","shortname": "Компания","visible": true,"searchable": true,"sortable": true,"link": "company","linkCode": "shortName" - } - , - {"code": "duration", - "type": 1,"name": "Срок, дней","shortname": "Срок","visible": true,"searchable": true,"sortable": true - } - , - {"code": "firstLegSettlementDate", - "type": 6,"name": "Дата размещения","shortname": "Дата размещения","visible": true,"searchable": true,"sortable": true - } - , - {"code": "secondLegSettlementDate", - "type": 6,"name": "Дата возврата","shortname": "Дата возврата","visible": true,"searchable": true,"sortable": true - } - , - {"code": "firstLegSettlementCode", - "type": 6,"name": "Код расчетов при размещении","shortname": "Код расчетов при размещении","visible": false,"searchable": true,"sortable": true,"ignore": true - } - , - {"code": "secondLegSettlementCode", - "type": 6,"name": "Код расчетов при возврате","shortname": "Код расчетов","visible": false,"searchable": true,"sortable": true,"ignore": true - } - , - {"code": "securityFullName", - "type": 2,"length": 255,"name": "Наименование инструмента","shortname": "Инструмент","visible": true,"searchable": true,"sortable": true - } - , - {"code": "securitySymbol", - "type": 2,"length": 255,"name": "Код инструмента в Торговой Системе","shortname": "Код инструмента","visible": true,"searchable": true,"sortable": true - } - , - {"code": "securityId", - "type": 1,"name": "Финансовый инструмент","shortname": "Код биржевого инструмента / товара","searchable": true,"sortable": true,"link": "moneyMarketSecurity","linkCode": "securitySymbol","ignore": true - } - , - {"code": "counterPartyId", - "type": 1,"name": "Имя компании-партнера, с которым заключена сделка","shortname": "Партнер","visible": false,"searchable": true,"sortable": true,"link": "company" - } - , - {"code": "coverageStatus", - "type": 12,"name": "Cтатус достаточности обеспечения","shortname": "Обеспеченность","searchable": true,"sortable": true,"link": "allowed" - } - , - {"code": "sessionId", - "type": 1,"name": "Наименование сессии","shortname": "Сессия","visible": true,"searchable": true,"sortable": true,"link": "moneyMarketSession" - } - , - {"code": "id", - "type": 1,"name": "Идентификатор записи","shortname": "ID","visible": false,"searchable": true,"sortable": true - } - , - {"code": "createdAt", - "field": "created","type": 5,"name": "Время регистрации сделки","shortname": "Время сделки","visible": false,"searchable": true,"sortable": true - } - , - {"code": "updatedAt", - "field": "updated","type": 5,"name": "Время изменения сделки","shortname": "Время изменения","visible": false,"searchable": true,"sortable": true - } - , - {"code": "clearingDate", - "type": 6,"name": "Дата клиринга","shortname": "Дата клиринга","visible": false,"searchable": true,"sortable": true - } - ] - } , "dealRegister": { @@ -8364,98 +8901,6 @@ } ] - } - , - "s_trade": { - - "name": "Сделки из Торговой системы", - - "class": "ru.clearing.classes.statics.data.misc.STrade", - - "table": "s_trade", - - "fields": [ - {"code": "id", - "type": 1,"name": "Идентификатор записи","shortname": "ID","searchable": true,"sortable": true - } - , - {"code": "trade_num", - "type": 1,"name": "Номер сделки","shortname": "Номер сделки","searchable": true,"sortable": true - } - , - {"code": "sec_code", - "type": 2,"length": 255,"name": "Код ценной бумаги","shortname": "Код ценной бумаги","searchable": true,"sortable": true - } - , - {"code": "trade_date_time", - "type": 4,"name": "Дата-время сделки","shortname": "Дата-время сделки","searchable": true,"sortable": true - } - , - {"code": "settle_date", - "type": 6,"name": "Плановая дата исполнения сделки","shortname": "Плановая дата исполнения сделки","searchable": true,"sortable": true - } - , - {"code": "price", - "type": 10,"name": "Цена сделки","shortname": "Цена сделки","searchable": true,"sortable": true - } - , - {"code": "value", - "type": 11,"name": "Сумма сделки","shortname": "Сумма сделки","searchable": true,"sortable": true - } - , - {"code": "qty", - "type": 11,"name": "Количество лотов по сделке","shortname": "Количество лотов по сделке","searchable": true,"sortable": true - } - , - {"code": "accruedint", - "type": 10,"name": "НКД за 1 ценную бумагу","shortname": "НКД за 1 ценную бумагу","searchable": true,"sortable": true - } - , - {"code": "firm_id", - "type": 2,"length": 255,"name": "ID клиента в КС","shortname": "ID клиента в КС","searchable": true,"sortable": true - } - , - {"code": "client_code", - "type": 2,"length": 255,"name": "Код участника торгов = Код участника клиринга = Код участника расчетов","shortname": "Участник","searchable": true,"sortable": true - } - , - {"code": "exchange_commission", - "type": 11,"name": "Комиссия по сделке","shortname": "Комиссия","searchable": true,"sortable": true - } - , - {"code": "class_code", - "type": 2,"length": 255,"name": "Код класса сделки из новой ТС","shortname": "Код класса сделки","searchable": true,"sortable": true - } - , - {"code": "operation", - "type": 2,"length": 255,"name": "Тип плеча (Купля/Продажа)","shortname": "Тип плеча","searchable": true,"sortable": true - } - , - {"code": "issue_account", - "type": 2,"length": 50,"name": "Счет для учета ценной бумаги","shortname": "Счет для учета ценной бумаги","searchable": true,"sortable": true - } - , - {"code": "money_account", - "type": 2,"length": 50,"name": "Счет для учета денежных средств","shortname": "Счет для учета денежных средств","searchable": true,"sortable": true - } - , - {"code": "trade_type", - "type": 2,"length": 50,"name": "Первичное размещение/торги","shortname": "Первичное размещение/торги","searchable": true,"sortable": true - } - , - {"code": "days_to_mat_date", - "type": 1,"name": "Количество дней до погашения","shortname": "Количество дней до погашения","searchable": true,"sortable": true - } - , - {"code": "collateral", - "type": 2,"length": 50,"name": "Признак залога (не используется)","shortname": "Признак залога (не используется)","searchable": true,"sortable": true - } - , - {"code": "settle_code", - "type": 2,"length": 50,"name": "Код периода сделки из новой ТС","shortname": "Код периода сделки из новой ТС","searchable": true,"sortable": true - } - ] - } , "notification": { @@ -8585,40 +9030,6 @@ } ] - } - , - "session": { - - "name": "Клиринговая сессия", - - "class": "ru.clearing.classes.statics.data.misc.Session", - - "logUpdates": "true", - - "table": "session", - - "fields": [ - {"code": "id", - "type": 1,"name": "Идентификатор записи","shortname": "ID","searchable": true,"sortable": true - } - , - {"code": "createdAt", - "field": "created","type": 4,"name": "Дата и время создания записи","shortname": "Создано","searchable": true,"sortable": true,"ignore": true - } - , - {"code": "updatedAt", - "field": "updated","type": 4,"name": "Дата и время изменения записи","shortname": "Изменено","searchable": true,"sortable": true,"ignore": true - } - , - {"code": "clearingDate", - "type": 6,"name": "Дата","shortname": "Дата","searchable": true,"sortable": true,"visible": true - } - , - {"code": "sessionStatus", - "type": 12,"name": "Статус клиринговой сессии","shortname": "Статус","searchable": true,"sortable": true,"visible": true,"link": "sessionStatus" - } - ] - } , "moneyMarketSession": { diff --git a/clearing-parent/db-scripts/src/main/resources/db/DATA.sql b/clearing-parent/db-scripts/src/main/resources/db/DATA.sql index 9123792cb..8303e3f10 100644 --- a/clearing-parent/db-scripts/src/main/resources/db/DATA.sql +++ b/clearing-parent/db-scripts/src/main/resources/db/DATA.sql @@ -1,5 +1,5 @@ --- DB version: 3.5.0.19 --- DATA version: 3.5.0.3 +-- DB version: 3.5.0.20 +-- DATA version: 3.5.0.4 /* Dictionaries */ INSERT INTO ALLOWED_DICTIONARY(ID, CODE, NAME) values (1, 'ALWD', 'Разрешено') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; @@ -210,11 +210,11 @@ INSERT INTO BOND_TYPE_DICTIONARY(ID, CODE, NAME) values (6, 'I', 'Облигац INSERT INTO BOND_TYPE_DICTIONARY(ID, CODE, NAME) values (7, 'M', 'Облигации с амортизацией долга') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO TRADING_CLEARING_REGISTRY_TYPE_DICTIONARY(ID, CODE, NAME) values (1, 'А', 'Владелец') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO TRADING_CLEARING_REGISTRY_TYPE_DICTIONARY(ID, CODE, NAME) values (1, 'A', 'Владелец') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; INSERT INTO TRADING_CLEARING_REGISTRY_TYPE_DICTIONARY(ID, CODE, NAME) values (2, 'B', 'Клиентский') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO TRADING_CLEARING_REGISTRY_TYPE_DICTIONARY(ID, CODE, NAME) values (3, 'С', 'Попечитель') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO TRADING_CLEARING_REGISTRY_TYPE_DICTIONARY(ID, CODE, NAME) values (3, 'C', 'Попечитель') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; INSERT INTO TRADING_CLEARING_REGISTRY_TYPE_DICTIONARY(ID, CODE, NAME) values (4, 'D', 'Доверительный управляющий') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; @@ -322,13 +322,17 @@ INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (11, 'CSPT', 'Тре INSERT INTO REGISTRY_STATUS_DICTIONARY(ID, CODE, NAME) values (1, 'OK', 'Успешно') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO REGISTRY_STATUS_DICTIONARY(ID, CODE, NAME) values (2, 'FAIL', 'Не успешно') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO REGISTRY_STATUS_DICTIONARY(ID, CODE, NAME) values (2, 'UNCV', 'Не исполнено') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO REGISTRY_STATUS_DICTIONARY(ID, CODE, NAME) values (3, 'MNG', 'Не учитывать') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO REGISTRY_STATUS_DICTIONARY(ID, CODE, NAME) values (3, 'FAIL', 'Не исполнено контрагентом') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO REGISTRY_STATUS_DICTIONARY(ID, CODE, NAME) values (4, 'PROC', 'К клирингу') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO REGISTRY_STATUS_DICTIONARY(ID, CODE, NAME) values (4, 'MNG', 'Не учитывать') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO REGISTRY_STATUS_DICTIONARY(ID, CODE, NAME) values (5, 'LIQU', 'Ликвидационный неттинг') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO REGISTRY_STATUS_DICTIONARY(ID, CODE, NAME) values (5, 'PROC', 'К клирингу') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + +INSERT INTO REGISTRY_STATUS_DICTIONARY(ID, CODE, NAME) values (6, 'LIQU', 'Ликвидационный неттинг') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + +INSERT INTO REGISTRY_STATUS_DICTIONARY(ID, CODE, NAME) values (7, 'POOL', 'В клиринге') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; INSERT INTO BALANCE_DIMENSION_DICTIONARY(ID, CODE, NAME) values (1, 'PICS', 'Штуки') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; @@ -434,6 +438,8 @@ INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (47, 'GRYT', 'Сформир INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (48, 'GRRT', 'Сформировать реестр на текущий день') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (49, 'GORD', 'Формирование реестра распоряжений, направленных расчетному депозитарию') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + INSERT INTO TASK_STATUS_DICTIONARY(ID, CODE, NAME) values (1, 'ACTV', 'Активна') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; INSERT INTO TASK_STATUS_DICTIONARY(ID, CODE, NAME) values (2, 'BLKD', 'Не активна') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; @@ -476,6 +482,12 @@ INSERT INTO MONEY_FLOW_SIDE_DICTIONARY(ID, CODE, NAME) values (1, 'BUY', 'Раз INSERT INTO MONEY_FLOW_SIDE_DICTIONARY(ID, CODE, NAME) values (2, 'SELL', 'Привлечь') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO SIDE_DICTIONARY(ID, CODE, NAME) values (1, 'BUY', 'Покупка') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + +INSERT INTO SIDE_DICTIONARY(ID, CODE, NAME) values (2, 'SELL', 'Продажа') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + +INSERT INTO MARKET_CODE_DICTIONARY(ID, CODE, NAME) values (1, 'BMIC', 'СПВБ: ОФЗ-ИН - Аукцион БР') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + INSERT INTO COURIER_TYPE_DICTIONARY(ID, CODE, NAME) values (1, 'STHS', 'ЭДО с Расчетной Организацией') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; INSERT INTO TRANSACTION_STATUS_DICTIONARY(ID, CODE, NAME) values (1, 'STLD', 'Рассчитан') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; @@ -658,6 +670,16 @@ INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3020, 'CMPN', 'Тип INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3021, 'CMPN', 'Тип контакта компании %s не может быть изменен.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3022, 'CMPN', 'ТКР с кодом %s не найден.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3023, 'CMPN', 'Счет %s не найден.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3024, 'CMPN', 'Договорные отношения %s в секции МКР уже созданы.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3025, 'CMPN', 'Договорные отношения %s на фондовой секции уже созданы.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3026, 'CMPN', 'Запись о договорных отношениях не найдена.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (4000, 'RPRT', 'Общая ошибка модуля report-serivce.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5000, 'ACNT', 'Общая ошибка модуля account-service.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; @@ -680,11 +702,17 @@ INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5011, 'ACNT', 'Сче INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5012, 'ACNT', 'Счет %s неактивен.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5013, 'ACNT', 'Компания не найдена.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5013, 'ACNT', 'Компания %s не найдена.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5014, 'ACNT', 'Компания неактивна.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5014, 'ACNT', 'Компания %s неактивна.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5015, 'ACNT', 'Для Компании %s уже создан информационный счет %s.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5015, 'ACNT', 'Для компании %s уже создан информационный счет %s.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5016, 'ACNT', 'Для Компании %s уже создан ТКР %s.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5017, 'ACNT', 'Для Компании %s отсутствует счет ДЕПО.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5018, 'ACNT', 'Для Компании %s отсутствует денежный счет.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5200, 'BLNC', 'Общая ошибка модуля balance-service.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; @@ -700,7 +728,7 @@ INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5214, 'BLNC', 'Заг INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5215, 'BLNC', 'Загрузка остатков возможна только по рынку МКР.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5216, 'BLNC', 'Загрузка остатков возможна только по собственным счетам.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5216, 'BLNC', 'Загрузка остатков возможна только по собственным или клиентским счетам.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5217, 'BLNC', 'Счет %s не найден.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; @@ -748,7 +776,7 @@ INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5416, 'CLRN', 'Инс INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5417, 'CLRN', 'Инструмент %s неактивен.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5418, 'CLRN', 'Торгово-клиринговый регистр %s не найден.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5418, 'CLRN', 'Торгово-клиринговый регистр %s не найден для компании %s.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5419, 'CLRN', 'Торгово-клиринговый регистр %s неактивен.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; @@ -804,11 +832,15 @@ INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (9005, 'BAPI', 'Не н /* Business objects */ -INSERT INTO COMPANY(ID, FULL_NAME, SHORT_NAME, TRADING_CODE, CLEARING_CODE, WORKFLOW_STATUS) values (1, 'АО Санкт-Петербургская Валютная Биржа', 'СПВБ', '1', '1', 'ACTV') ON CONFLICT (ID) DO UPDATE SET FULL_NAME = EXCLUDED.FULL_NAME, SHORT_NAME = EXCLUDED.SHORT_NAME, TRADING_CODE = EXCLUDED.TRADING_CODE, CLEARING_CODE = EXCLUDED.CLEARING_CODE, WORKFLOW_STATUS = EXCLUDED.WORKFLOW_STATUS; +INSERT INTO COMPANY(ID, FULL_NAME, SHORT_NAME, TRADING_CODE, CLEARING_CODE, WORKFLOW_STATUS) values (1, 'АО Санкт-Петербургская Валютная Биржа', 'СПВБ', '', '', 'ACTV') ON CONFLICT (ID) DO UPDATE SET FULL_NAME = EXCLUDED.FULL_NAME, SHORT_NAME = EXCLUDED.SHORT_NAME, TRADING_CODE = EXCLUDED.TRADING_CODE, CLEARING_CODE = EXCLUDED.CLEARING_CODE, WORKFLOW_STATUS = EXCLUDED.WORKFLOW_STATUS; -INSERT INTO COMPANY(ID, FULL_NAME, SHORT_NAME, TRADING_CODE, CLEARING_CODE, WORKFLOW_STATUS) values (2, 'НКО ЗАО «Петербургский Расчетный Центр»', 'НКО АО ПРЦ', '2', '2', 'ACTV') ON CONFLICT (ID) DO UPDATE SET FULL_NAME = EXCLUDED.FULL_NAME, SHORT_NAME = EXCLUDED.SHORT_NAME, TRADING_CODE = EXCLUDED.TRADING_CODE, CLEARING_CODE = EXCLUDED.CLEARING_CODE, WORKFLOW_STATUS = EXCLUDED.WORKFLOW_STATUS; +INSERT INTO COMPANY(ID, FULL_NAME, SHORT_NAME, TRADING_CODE, CLEARING_CODE, WORKFLOW_STATUS) values (2, 'ЗАО «Петербургский Расчетный Центр»', 'ПРЦ', '', '', 'ACTV') ON CONFLICT (ID) DO UPDATE SET FULL_NAME = EXCLUDED.FULL_NAME, SHORT_NAME = EXCLUDED.SHORT_NAME, TRADING_CODE = EXCLUDED.TRADING_CODE, CLEARING_CODE = EXCLUDED.CLEARING_CODE, WORKFLOW_STATUS = EXCLUDED.WORKFLOW_STATUS; -INSERT INTO COMPANY(ID, FULL_NAME, SHORT_NAME, TRADING_CODE, CLEARING_CODE, WORKFLOW_STATUS) values (3, 'Торговая организация', 'ТС', '3', '3', 'ACTV') ON CONFLICT (ID) DO UPDATE SET FULL_NAME = EXCLUDED.FULL_NAME, SHORT_NAME = EXCLUDED.SHORT_NAME, TRADING_CODE = EXCLUDED.TRADING_CODE, CLEARING_CODE = EXCLUDED.CLEARING_CODE, WORKFLOW_STATUS = EXCLUDED.WORKFLOW_STATUS; +INSERT INTO COMPANY(ID, FULL_NAME, SHORT_NAME, TRADING_CODE, CLEARING_CODE, WORKFLOW_STATUS) values (3, 'Торговая организация', 'ТС', '', '', 'ACTV') ON CONFLICT (ID) DO UPDATE SET FULL_NAME = EXCLUDED.FULL_NAME, SHORT_NAME = EXCLUDED.SHORT_NAME, TRADING_CODE = EXCLUDED.TRADING_CODE, CLEARING_CODE = EXCLUDED.CLEARING_CODE, WORKFLOW_STATUS = EXCLUDED.WORKFLOW_STATUS; + +INSERT INTO COMPANY(ID, FULL_NAME, SHORT_NAME, TRADING_CODE, CLEARING_CODE, WORKFLOW_STATUS) values (4, 'ЗАО «Санкт-Петербургский Расчетно-Депозитарный Центр»', 'РДЦ', '', '', 'ACTV') ON CONFLICT (ID) DO UPDATE SET FULL_NAME = EXCLUDED.FULL_NAME, SHORT_NAME = EXCLUDED.SHORT_NAME, TRADING_CODE = EXCLUDED.TRADING_CODE, CLEARING_CODE = EXCLUDED.CLEARING_CODE, WORKFLOW_STATUS = EXCLUDED.WORKFLOW_STATUS; + +INSERT INTO COMPANY(ID, FULL_NAME, SHORT_NAME, TRADING_CODE, CLEARING_CODE, WORKFLOW_STATUS) values (5, 'Центральный Банк Российской Федерации', 'ЦБ РФ', '', '', 'ACTV') ON CONFLICT (ID) DO UPDATE SET FULL_NAME = EXCLUDED.FULL_NAME, SHORT_NAME = EXCLUDED.SHORT_NAME, TRADING_CODE = EXCLUDED.TRADING_CODE, CLEARING_CODE = EXCLUDED.CLEARING_CODE, WORKFLOW_STATUS = EXCLUDED.WORKFLOW_STATUS; INSERT INTO COMPANY_SYMBOLS(ID, COMPANY_ID, COMPANY_SYMBOL, COMPANY_SYMBOL_VALUE) values (1, 1, 'BIC', '044030920') ON CONFLICT (ID) DO UPDATE SET COMPANY_ID = EXCLUDED.COMPANY_ID, COMPANY_SYMBOL = EXCLUDED.COMPANY_SYMBOL, COMPANY_SYMBOL_VALUE = EXCLUDED.COMPANY_SYMBOL_VALUE; diff --git a/clearing-parent/db-scripts/src/main/resources/db/DDL.sql b/clearing-parent/db-scripts/src/main/resources/db/DDL.sql index 91d9d0733..5cd0196ff 100644 --- a/clearing-parent/db-scripts/src/main/resources/db/DDL.sql +++ b/clearing-parent/db-scripts/src/main/resources/db/DDL.sql @@ -1,4 +1,4 @@ --- DB version: 3.5.0.19 +-- DB version: 3.5.0.20 /* Dictionaries */ -- allowed - Справочник признаков допустимости использования объектов @@ -465,10 +465,10 @@ COMMENT ON COLUMN SESSION_TYPE_DICTIONARY.CODE IS 'Код'; COMMENT ON COLUMN SESSION_TYPE_DICTIONARY.NAME IS 'Наименование'; --- moneyFlowSide - Справочник направлений +-- moneyFlowSide - Справочник направлений денежного рынка DROP TABLE IF EXISTS MONEY_FLOW_SIDE_DICTIONARY; CREATE TABLE MONEY_FLOW_SIDE_DICTIONARY(ID bigint PRIMARY KEY, CODE varchar(4), NAME varchar(255)); -COMMENT ON TABLE MONEY_FLOW_SIDE_DICTIONARY IS 'Справочник направлений'; +COMMENT ON TABLE MONEY_FLOW_SIDE_DICTIONARY IS 'Справочник направлений денежного рынка'; COMMENT ON COLUMN MONEY_FLOW_SIDE_DICTIONARY.ID IS 'Идентификатор'; @@ -476,6 +476,28 @@ COMMENT ON COLUMN MONEY_FLOW_SIDE_DICTIONARY.CODE IS 'Код'; COMMENT ON COLUMN MONEY_FLOW_SIDE_DICTIONARY.NAME IS 'Значение'; +-- side - Справочник направлений +DROP TABLE IF EXISTS SIDE_DICTIONARY; +CREATE TABLE SIDE_DICTIONARY(ID bigint PRIMARY KEY, CODE varchar(4), NAME varchar(255)); +COMMENT ON TABLE SIDE_DICTIONARY IS 'Справочник направлений'; + +COMMENT ON COLUMN SIDE_DICTIONARY.ID IS 'Идентификатор'; + +COMMENT ON COLUMN SIDE_DICTIONARY.CODE IS 'Код'; + +COMMENT ON COLUMN SIDE_DICTIONARY.NAME IS 'Значение'; + +-- marketCode - Справочник кодов рынков +DROP TABLE IF EXISTS MARKET_CODE_DICTIONARY; +CREATE TABLE MARKET_CODE_DICTIONARY(ID bigint PRIMARY KEY, CODE varchar(4), NAME varchar(255)); +COMMENT ON TABLE MARKET_CODE_DICTIONARY IS 'Справочник кодов рынков'; + +COMMENT ON COLUMN MARKET_CODE_DICTIONARY.ID IS 'Идентификатор'; + +COMMENT ON COLUMN MARKET_CODE_DICTIONARY.CODE IS 'Код'; + +COMMENT ON COLUMN MARKET_CODE_DICTIONARY.NAME IS 'Значение'; + -- chargeDirection - Направление начисления комиссии DROP TABLE IF EXISTS CHARGE_DIRECTION_DICTIONARY; CREATE TABLE CHARGE_DIRECTION_DICTIONARY(ID bigint PRIMARY KEY, CODE varchar(4), NAME varchar(50)); @@ -1438,7 +1460,7 @@ COMMENT ON COLUMN MARKET.EXCHANGE_ID IS 'Идентификатор площад COMMENT ON COLUMN MARKET.NAME IS 'Наименование рынка'; -COMMENT ON COLUMN MARKET.CODE IS 'Код рынка'; +COMMENT ON COLUMN MARKET.CODE IS 'Код рынка (linked to marketCode)'; COMMENT ON COLUMN MARKET.SETTLEMENT_CURRENCY IS 'Код валюты расчета (linked to currencyCode)'; @@ -1466,7 +1488,7 @@ COMMENT ON COLUMN MARKET_HISTORY.EXCHANGE_ID IS 'Идентификатор пл COMMENT ON COLUMN MARKET_HISTORY.NAME IS 'Наименование рынка'; -COMMENT ON COLUMN MARKET_HISTORY.CODE IS 'Код рынка'; +COMMENT ON COLUMN MARKET_HISTORY.CODE IS 'Код рынка (linked to marketCode)'; COMMENT ON COLUMN MARKET_HISTORY.SETTLEMENT_CURRENCY IS 'Код валюты расчета (linked to currencyCode)'; diff --git a/clearing-parent/dictionary/src/main/java/ru/clearing/platform/dictionary/MarketCodeDictionary.java b/clearing-parent/dictionary/src/main/java/ru/clearing/platform/dictionary/MarketCodeDictionary.java new file mode 100644 index 000000000..914007aab --- /dev/null +++ b/clearing-parent/dictionary/src/main/java/ru/clearing/platform/dictionary/MarketCodeDictionary.java @@ -0,0 +1,11 @@ +package ru.clearing.platform.dictionary; + +/** + * Справочник кодов рынков + * + * Dictionary DB table: MARKET_CODE_DICTIONARY + **/ +public class MarketCodeDictionary extends AbstractDictionary { + private static final long serialVersionUID = ConstDictionarySerializable.serialVersionUID; + +} \ No newline at end of file diff --git a/clearing-parent/dictionary/src/main/java/ru/clearing/platform/dictionary/MoneyFlowSideDictionary.java b/clearing-parent/dictionary/src/main/java/ru/clearing/platform/dictionary/MoneyFlowSideDictionary.java index 074f8ff38..6c253d4d5 100644 --- a/clearing-parent/dictionary/src/main/java/ru/clearing/platform/dictionary/MoneyFlowSideDictionary.java +++ b/clearing-parent/dictionary/src/main/java/ru/clearing/platform/dictionary/MoneyFlowSideDictionary.java @@ -1,7 +1,7 @@ package ru.clearing.platform.dictionary; /** - * Направление заявки + * Справочник направлений денежного рынка * * Dictionary DB table: MONEY_FLOW_SIDE_DICTIONARY **/ diff --git a/clearing-parent/dictionary/src/main/java/ru/clearing/platform/dictionary/SideDictionary.java b/clearing-parent/dictionary/src/main/java/ru/clearing/platform/dictionary/SideDictionary.java new file mode 100644 index 000000000..7dbf76d64 --- /dev/null +++ b/clearing-parent/dictionary/src/main/java/ru/clearing/platform/dictionary/SideDictionary.java @@ -0,0 +1,11 @@ +package ru.clearing.platform.dictionary; + +/** + * Справочник направлений + * + * Dictionary DB table: SIDE_DICTIONARY + **/ +public class SideDictionary extends AbstractDictionary { + private static final long serialVersionUID = ConstDictionarySerializable.serialVersionUID; + +} \ No newline at end of file diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/dictionary/MarketCodeDictionaryMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/dictionary/MarketCodeDictionaryMapStore.java new file mode 100644 index 000000000..d2e301c08 --- /dev/null +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/dictionary/MarketCodeDictionaryMapStore.java @@ -0,0 +1,30 @@ +package ru.spcex.clearing.imdg.dictionary; + +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Component; +import ru.clearing.platform.dictionary.MarketCodeDictionary; +import ru.spcex.clearing.imdg.base.DictionaryTMapStore; +import ru.spcex.clearing.imdg.IMDGDistributedNames; + +@Component +public class MarketCodeDictionaryMapStore extends DictionaryTMapStore { + + public MarketCodeDictionaryMapStore(JdbcTemplate jdbcTemplate) { + super(jdbcTemplate); + } + + @Override + public String getMapName() { + return IMDGDistributedNames.Map_MarketCodeDictionary; + } + + @Override + public String getTableName() { + return "MARKET_CODE_DICTIONARY"; + } + + @Override + public MarketCodeDictionary getDictionaryObject() { + return new MarketCodeDictionary(); + } +} \ No newline at end of file diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/dictionary/SideDictionaryMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/dictionary/SideDictionaryMapStore.java new file mode 100644 index 000000000..7a3eaeeae --- /dev/null +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/dictionary/SideDictionaryMapStore.java @@ -0,0 +1,31 @@ +package ru.spcex.clearing.imdg.dictionary; + +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Component; +import ru.clearing.platform.dictionary.SideDictionary; +import ru.spcex.clearing.imdg.base.DictionaryTMapStore; +import ru.spcex.clearing.imdg.IMDGDistributedNames; + +@Component +public class SideDictionaryMapStore extends DictionaryTMapStore { + + public SideDictionaryMapStore(JdbcTemplate jdbcTemplate) { + super(jdbcTemplate); + } + + @Override + public String getMapName() { + return IMDGDistributedNames.Map_SideDictionary; + } + + @Override + public String getTableName() { + return "SIDE_DICTIONARY"; + } + + @Override + public SideDictionary getDictionaryObject() { + return new SideDictionary(); + } + +} diff --git a/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/structure/RunnableMapNamesForTesting.java b/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/structure/RunnableMapNamesForTesting.java index 8e5742d50..48446bb52 100644 --- a/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/structure/RunnableMapNamesForTesting.java +++ b/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/structure/RunnableMapNamesForTesting.java @@ -213,6 +213,7 @@ public class RunnableMapNamesForTesting { dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_ManagementJournalStatusDictionary, ManagementJournalStatusDictionary.class)); dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_ManagementJournalTypeDictionary, ManagementJournalTypeDictionary.class)); dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_MoneyFlowSideDictionary, MoneyFlowSideDictionary.class)); + dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_MarketCodeDictionary, MarketCodeDictionary.class)); dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_OperationStatusDictionary, OperationStatusDictionary.class)); dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_OperationTypeDictionary, OperationTypeDictionary.class)); dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_OrganizationTypeDictionary, OrganizationTypeDictionary.class)); @@ -224,6 +225,7 @@ public class RunnableMapNamesForTesting { dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_ServiceProductDictionary, ServiceProductDictionary.class)); dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_ServiceStatusDictionary, ServiceStatusDictionary.class)); dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_StatementTypeDictionary, StatementTypeDictionary.class)); + dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_SideDictionary, SideDictionary.class)); dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_TaskDictionary, TaskDictionary.class)); dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_TaskStatusDictionary, TaskStatusDictionary.class)); dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_TermTypeDictionary, TermTypeDictionary.class)); diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Task.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Task.java index eb74613d8..678b0acf5 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Task.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Task.java @@ -8,14 +8,28 @@ public enum Task implements IEnumKey { additionOrDeleteOfBalance("ADBL"),//Дозачисление/списание остатков getOfTrades("GTRD"),//Получение сделок из Торговой системы getVerification("GVER"),// Запуск сверки - getBalance("GBLD"),// Поступление средств + @Deprecated /* todo GBLD удаляется по CLS-267, CLS-275 */ getBalance("GBLD"),// Поступление средств startOfClearing("SCLR"),// Запуск клиринговой сессии startOfPreClearing("SPRC"),// Запуск преклиринга startPostClearing("SPOC"),// Запуск постклиринга createOrder("CORD"), createOrderConfirm("CORC"), getAllBalance("GALB"), - createReport_GREP("GREP");// Создание отчёта (report-service) RPRT нескольких видов, этот GREP + createReport_GREP("GREP"), // Создание отчёта (report-service) RPRT нескольких видов, этот GREP + unloadingSession_LIMM("LIMM"),//Выгрузка в торговую систему остатков секции МКР + unloadingSession_LIMF("LIMF"),//Выгрузка в торговую систему остатков Фондовой секции + liquidationSession_LIQU("LIQU"),//Ликвидационная сессия по обязательтсвам участника + startSession_STRM("STRM"),//Начало торговой сессии секции МКР + terminationSession_ETRM("ETRM"),//Завершение торговой сессии секции МКР + startSession_SIPO("SIPO"),//Начало торговой сессии по первичным торгам + terminationSession_EIPO("EIPO"),//Завершение торговой сессии по первичным торгам + startSession_STRF("STRF"),//Начало торговой сессии по вторичным торгам + terminationSession_ETRF("ETRF"),//Завершение торговой сессии по вторичным торгам + reconciliationRequest_RCHK("RCHK"),//Запрос на сверку активов + createRegistry_GRYT("GRYT"),//Сформировать регистр на текущий день + createRegistry_GRRT("GRRT"),//Сформировать реестр на текущий день + createRegistry_GORD("GORD"), // Формирование реестра распоряжений, направленных расчетному депозитарию + ; private final String key; diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/TradingClearingRegistryType.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/TradingClearingRegistryType.java new file mode 100644 index 000000000..cd3e2e4e3 --- /dev/null +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/TradingClearingRegistryType.java @@ -0,0 +1,28 @@ +package ru.spcex.platform.enumeration; + +import ru.spcex.platform.utils.enumeration.IEnumKey; + +public enum TradingClearingRegistryType implements IEnumKey { + Owner_A("A"), // Владелец + Client_B("B"), // Клиентский + Trustee_C("C"), // Попечитель + TrusteeManager_D("D"), // Доверительный управляющий + Issuer_E("E"), // Эмитент + ToThePlacementOrRedeem_Z("Z"), // К размещению/выкупу + DepoBond_H("H"), // Депо по учету облигаций + DepoOfShares_T("T"), // Депо по учету акций + DepoOfTrustedBond_N("N"), // Депо по учету облигаций с попечителем + DepoOfTrustedShares_S("S"), // Депо по учету акций с попечителем + ; + + private final String key; + + TradingClearingRegistryType(String key) { + this.key = key; + } + + @Override + public String getKey() { + return key; + } +} diff --git a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java index a989d29b9..3ec5f5b9f 100644 --- a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java +++ b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java @@ -153,6 +153,8 @@ public final class IMDGDistributedNames { public static final String Map_BalanceDimensionDictionary = "Map_BalanceDimensionDictionary"; public static final String Map_DepoAccountTypeDictionary = "Map_DepoAccountTypeDictionary"; public static final String Map_ClearingAccountTypeDictionary = "Map_ClearingAccountTypeDictionary"; + public static final String Map_SideDictionary = "Map_SideDictionary"; + public static final String Map_MarketCodeDictionary = "Map_MarketCodeDictionary"; public static final String Map_ClientCode = "Map_ClientCode"; public static final String Map_ClientCodeHistory = "Map_ClientCodeHistory"; public static final String Map_TradingClearingRegistry = "Map_TradingClearingRegistry"; diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java index e81d7e852..f07a3033e 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java @@ -65,6 +65,14 @@ public interface Consts { String DESTINATION_PROFILE_DOCUMENT_UPDATE = "profile-document-update"; String DESTINATION_PROFILE_DOCUMENT_DELETE = "profile-document-delete"; + String DESTINATION_CLIENT_CODE_NEW = "client-code-new"; + String DESTINATION_CLIENT_CODE_UPDATE = "client-code-update"; + String DESTINATION_CLIENT_CODE_DELETE = "client-code-delete"; + + String DESTINATION_TRADING_CLEARING_REGISTRY_NEW = "trading-clearing-registry-new"; + String DESTINATION_TRADING_CLEARING_REGISTRY_UPDATE = "trading-clearing-registry-update"; + String DESTINATION_TRADING_CLEARING_REGISTRY_DELETE = "trading-clearing-registry-delete"; + String DESTINATION_SDF08_NEW = "s-df-08-new"; String DESTINATION_SDF02_NEW = "s-df-02-new"; diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/account/ClientCodeNewRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/account/ClientCodeNewRequest.java new file mode 100644 index 000000000..2884c916c --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/account/ClientCodeNewRequest.java @@ -0,0 +1,66 @@ +package ru.spcex.clearing.platform.messaging.domain.cud.account; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class ClientCodeNewRequest { + @JsonProperty + private Long companyId; + @JsonProperty + private String code; + @JsonProperty + private Long tradingClearingRegistryId; + @JsonProperty + private Long moneyAccountId; + @JsonProperty + private Long depoAccountId; + @JsonProperty + private String status; + + public Long getCompanyId() { + return companyId; + } + + public void setCompanyId(Long companyId) { + this.companyId = companyId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public Long getTradingClearingRegistryId() { + return tradingClearingRegistryId; + } + + public void setTradingClearingRegistryId(Long tradingClearingRegistryId) { + this.tradingClearingRegistryId = tradingClearingRegistryId; + } + + public Long getMoneyAccountId() { + return moneyAccountId; + } + + public void setMoneyAccountId(Long moneyAccountId) { + this.moneyAccountId = moneyAccountId; + } + + public Long getDepoAccountId() { + return depoAccountId; + } + + public void setDepoAccountId(Long depoAccountId) { + this.depoAccountId = depoAccountId; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/account/ClientCodeUpdateRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/account/ClientCodeUpdateRequest.java new file mode 100644 index 000000000..e4bf6f8eb --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/account/ClientCodeUpdateRequest.java @@ -0,0 +1,76 @@ +package ru.spcex.clearing.platform.messaging.domain.cud.account; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class ClientCodeUpdateRequest { + @JsonProperty + public Long id; //Идентификатор записи + @JsonProperty + private Long companyId; + @JsonProperty + private String code; + @JsonProperty + private Long tradingClearingRegistryId; + @JsonProperty + private Long moneyAccountId; + @JsonProperty + private Long depoAccountId; + @JsonProperty + private String status; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getCompanyId() { + return companyId; + } + + public void setCompanyId(Long companyId) { + this.companyId = companyId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public Long getTradingClearingRegistryId() { + return tradingClearingRegistryId; + } + + public void setTradingClearingRegistryId(Long tradingClearingRegistryId) { + this.tradingClearingRegistryId = tradingClearingRegistryId; + } + + public Long getMoneyAccountId() { + return moneyAccountId; + } + + public void setMoneyAccountId(Long moneyAccountId) { + this.moneyAccountId = moneyAccountId; + } + + public Long getDepoAccountId() { + return depoAccountId; + } + + public void setDepoAccountId(Long depoAccountId) { + this.depoAccountId = depoAccountId; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/registry/TradingClearingRegistryNewRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/registry/TradingClearingRegistryNewRequest.java new file mode 100644 index 000000000..75041b81e --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/registry/TradingClearingRegistryNewRequest.java @@ -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.InstantDateTimeDeserializer; +import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalDateDeserializer; +import ru.spcex.clearing.platform.messaging.domain.json.serialize.InstantDateTimeSerializer; +import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalDateSerializer; + +import java.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDate; + +public class TradingClearingRegistryNewRequest { + @JsonProperty + private Long companyId; + @JsonProperty + private Long moneyAccountId; + @JsonProperty + private Long depoAccountId; + @JsonProperty + private String status; + + public Long getCompanyId() { + return companyId; + } + + public void setCompanyId(Long companyId) { + this.companyId = companyId; + } + + public Long getMoneyAccountId() { + return moneyAccountId; + } + + public void setMoneyAccountId(Long moneyAccountId) { + this.moneyAccountId = moneyAccountId; + } + + public Long getDepoAccountId() { + return depoAccountId; + } + + public void setDepoAccountId(Long depoAccountId) { + this.depoAccountId = depoAccountId; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/registry/TradingClearingRegistryUpdateRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/registry/TradingClearingRegistryUpdateRequest.java new file mode 100644 index 000000000..4db96de10 --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/registry/TradingClearingRegistryUpdateRequest.java @@ -0,0 +1,26 @@ +package ru.spcex.clearing.platform.messaging.domain.cud.registry; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class TradingClearingRegistryUpdateRequest { + @JsonProperty + private Long id; + @JsonProperty + private String status; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +}