Merge remote-tracking branch 'origin/dev' into CLS-268

# Conflicts:
#	clearing-parent/backend-api/src/main/resources/meta/data.xml
#	clearing-parent/backend-api/src/main/resources/meta/meta.xml
#	clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/AbstractControllerTest.java
#	clearing-parent/backend-api/src/test/resources/meta.json
#	clearing-parent/db-scripts/src/main/resources/db/DATA.sql
#	clearing-parent/db-scripts/src/main/resources/db/DDL.sql
This commit is contained in:
psemenkov 2023-04-26 11:42:16 +03:00
commit d45878e1a2
32 changed files with 2435 additions and 354 deletions

View file

@ -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<Map<String, Object>> all = stateLoader.getAllMetaTransform(IMDGDistributedNames.Map_ClientCode, ClientCode.class);
CommonGetAllResponse response = new CommonGetAllResponse();
response.fromEntity(all);
return response;
}
}

View file

@ -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<Map<String, Object>> all = stateLoader.getAllMetaTransform(
IMDGDistributedNames.Map_ExecutionFond,
ExecutionFond.class);
CommonGetAllResponse response = new CommonGetAllResponse();
response.fromEntity(all);
return response;
}
}

View file

@ -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> 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<Map<String, Object>> all = stateLoader.getAllMetaTransform(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
CommonGetAllResponse response = new CommonGetAllResponse();
response.fromEntity(all);
return response;
}
}

View file

@ -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<ClientCodeNewRequest> {
@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<EnumMessage> validate() {
List<EnumMessage> 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;
}
}

View file

@ -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<ClientCodeUpdateRequest> {
@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<EnumMessage> validate() {
List<EnumMessage> 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;
}
}

View file

@ -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<TradingClearingRegistryNewRequest> {
@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<EnumMessage> validate() {
List<EnumMessage> 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;
}
}

View file

@ -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<TradingClearingRegistryUpdateRequest> {
@ApiModelProperty(hidden = true)
@JsonProperty
public Long id;
@JsonProperty
private String status;
@Override
public Collection<EnumMessage> validate() {
List<EnumMessage> 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;
}
}

View file

@ -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());
}
}

View file

@ -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;
}
}

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<meta version="3.5.0.3">
<meta version="3.5.0.4">
<enums>
<allowed id="1" code="ALWD" name="Разрешено"/>
<allowed id="2" code="DEND" name="Запрещено"/>
@ -106,9 +106,9 @@
<bondType id="6" code="I" name="Облигации с индексированным номиналом"/>
<bondType id="7" code="M" name="Облигации с амортизацией долга"/>
<tradingClearingRegistryType id="1" code="А" name="Владелец"/>
<tradingClearingRegistryType id="1" code="A" name="Владелец"/>
<tradingClearingRegistryType id="2" code="B" name="Клиентский"/>
<tradingClearingRegistryType id="3" code="С" name="Попечитель"/>
<tradingClearingRegistryType id="3" code="C" name="Попечитель"/>
<tradingClearingRegistryType id="4" code="D" name="Доверительный управляющий"/>
<tradingClearingRegistryType id="5" code="E" name="Эмитент"/>
<tradingClearingRegistryType id="6" code="Z" name="К размещению/выкупу"/>
@ -162,10 +162,12 @@
<registryCode id="10" code="LMPT" name="Обязательства по деньгам - свои"/>
<registryCode id="11" code="CSPT" name="Требования по инструментам - свои"/>
<registryStatus id="1" code="OK" name="Успешно"/>
<registryStatus id="2" code="FAIL" name="Не успешно"/>
<registryStatus id="3" code="MNG" name="Не учитывать"/>
<registryStatus id="4" code="PROC" name="К клирингу"/>
<registryStatus id="5" code="LIQU" name="Ликвидационный неттинг"/>
<registryStatus id="2" code="UNCV" name="Не исполнено"/>
<registryStatus id="3" code="FAIL" name="Не исполнено контрагентом"/>
<registryStatus id="4" code="MNG" name="Не учитывать"/>
<registryStatus id="5" code="PROC" name="К клирингу"/>
<registryStatus id="6" code="LIQU" name="Ликвидационный неттинг"/>
<registryStatus id="7" code="POOL" name="В клиринге"/>
<balanceDimension id="1" code="PICS" name="Штуки"/>
<balanceDimension id="2" code="LOTS" name="Лоты"/>
<balanceDimension id="3" code="MONY" name="Деньги"/>
@ -218,6 +220,7 @@
<task id="46" code="RCHK" name="Запрос на сверку активов"/>
<task id="47" code="GRYT" name="Сформировать регистр на текущий день"/>
<task id="48" code="GRRT" name="Сформировать реестр на текущий день"/>
<task id="49" code="GORD" name="Формирование реестра распоряжений, направленных расчетному депозитарию"/>
<taskStatus id="1" code="ACTV" name="Активна"/>
<taskStatus id="2" code="BLKD" name="Не активна"/>
<taskStatus id="3" code="CNCL" name="Отмена расписания"/>
@ -240,6 +243,9 @@
<sessionType id="8" code="IPO0" name="Первичные торги B0"/>
<moneyFlowSide id="1" code="BUY" name="Разместить"/>
<moneyFlowSide id="2" code="SELL" name="Привлечь"/>
<side id="1" code="BUY" name="Покупка"/>
<side id="2" code="SELL" name="Продажа"/>
<marketCode id="1" code="BMIC" name="СПВБ: ОФЗ-ИН - Аукцион БР"/>
<courierType id="1" code="STHS" name="ЭДО с Расчетной Организацией"/>
<transactionStatus id="1" code="STLD" name="Рассчитан"/>
@ -338,6 +344,11 @@
<errorCode id="3019" code="CMPN" name="Компания с %s = %s уже создана."/>
<errorCode id="3020" code="CMPN" name="Тип реквизита компании %s не может быть изменен."/>
<errorCode id="3021" code="CMPN" name="Тип контакта компании %s не может быть изменен."/>
<errorCode id="3022" code="CMPN" name="ТКР с кодом %s не найден."/>
<errorCode id="3023" code="CMPN" name="Счет %s не найден."/>
<errorCode id="3024" code="CMPN" name="Договорные отношения %s в секции МКР уже созданы."/>
<errorCode id="3025" code="CMPN" name="Договорные отношения %s на фондовой секции уже созданы."/>
<errorCode id="3026" code="CMPN" name="Запись о договорных отношениях не найдена."/>
<!-- error code for report-serivce -->
<errorCode id="4000" code="RPRT" name="Общая ошибка модуля report-serivce."/>
@ -354,9 +365,12 @@
<errorCode id="5010" code="ACNT" name="Счет %s уже существует."/>
<errorCode id="5011" code="ACNT" name="Счет %s не найден."/>
<errorCode id="5012" code="ACNT" name="Счет %s неактивен."/>
<errorCode id="5013" code="ACNT" name="Компания не найдена."/>
<errorCode id="5014" code="ACNT" name="Компания неактивна."/>
<errorCode id="5015" code="ACNT" name="Для Компании %s уже создан информационный счет %s."/>
<errorCode id="5013" code="ACNT" name="Компания %s не найдена."/>
<errorCode id="5014" code="ACNT" name="Компания %s неактивна."/>
<errorCode id="5015" code="ACNT" name="Для компании %s уже создан информационный счет %s."/>
<errorCode id="5016" code="ACNT" name="Для Компании %s уже создан ТКР %s."/>
<errorCode id="5017" code="ACNT" name="Для Компании %s отсутствует счет ДЕПО."/>
<errorCode id="5018" code="ACNT" name="Для Компании %s отсутствует денежный счет."/>
<!-- error code for balance-service -->
<errorCode id="5200" code="BLNC" name="Общая ошибка модуля balance-service."/>
<errorCode id="5210" code="BLNC" name="Клиринговая сессия неактивна."/>
@ -365,7 +379,7 @@
<errorCode id="5213" code="BLNC" name="Валюта %s не найдена."/>
<errorCode id="5214" code="BLNC" name="Загрузка остатков возможна только на текущую дату."/>
<errorCode id="5215" code="BLNC" name="Загрузка остатков возможна только по рынку МКР."/>
<errorCode id="5216" code="BLNC" name="Загрузка остатков возможна только по собственным счетам."/>
<errorCode id="5216" code="BLNC" name="Загрузка остатков возможна только по собственным или клиентским счетам."/>
<errorCode id="5217" code="BLNC" name="Счет %s не найден."/>
<errorCode id="5218" code="BLNC" name="Счет %s неактивен."/>
<errorCode id="5219" code="BLNC" name="Дозачисления/списания возможны только по рынку МКР."/>
@ -390,7 +404,7 @@
<errorCode id="5415" code="CLRN" name="Счет %s неактивен."/>
<errorCode id="5416" code="CLRN" name="Инструмент %s не найден."/>
<errorCode id="5417" code="CLRN" name="Инструмент %s неактивен."/>
<errorCode id="5418" code="CLRN" name="Торгово-клиринговый регистр %s не найден."/>
<errorCode id="5418" code="CLRN" name="Торгово-клиринговый регистр %s не найден для компании %s."/>
<errorCode id="5419" code="CLRN" name="Торгово-клиринговый регистр %s неактивен."/>
<!-- error code for dbf-importer -->
<errorCode id="5600" code="DBFI" name="Общая ошибка модуля dbf-importer."/>
@ -430,9 +444,11 @@
</enums>
<objects>
<company id="1" fullName="АО Санкт-Петербургская Валютная Биржа" shortName="СПВБ" tradingCode="1" clearingCode="1" workflowStatus="ACTV"/>
<company id="2" fullName="НКО ЗАО «Петербургский Расчетный Центр»" shortName="НКО АО ПРЦ" tradingCode="2" clearingCode="2" workflowStatus="ACTV"/>
<company id="3" fullName="Торговая организация" shortName="ТС" tradingCode="3" clearingCode="3" workflowStatus="ACTV"/>
<company id="1" fullName="АО Санкт-Петербургская Валютная Биржа" shortName="СПВБ" tradingCode="" clearingCode="" workflowStatus="ACTV"/>
<company id="2" fullName="ЗАО «Петербургский Расчетный Центр»" shortName="ПРЦ" tradingCode="" clearingCode="" workflowStatus="ACTV"/>
<company id="3" fullName="Торговая организация" shortName="ТС" tradingCode="" clearingCode="" workflowStatus="ACTV"/>
<company id="4" fullName="ЗАО «Санкт-Петербургский Расчетно-Депозитарный Центр»" shortName="РДЦ" tradingCode="" clearingCode="" workflowStatus="ACTV"/>
<company id="5" fullName="Центральный Банк Российской Федерации" shortName="ЦБ РФ" tradingCode="" clearingCode="" workflowStatus="ACTV"/>
<companySymbols id="1" companyId="1" companySymbol="BIC" companySymbolValue="044030920"/>
<companySymbols id="2" companyId="2" companySymbol="BIC" companySymbolValue="044030505"/>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--?xml-stylesheet type="text/xsl" href="\..\corp-reports\src\data\meta\meta.server.xslt"?-->
<meta version="3.5.0.19">
<meta version="3.5.0.20">
<!-- _xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" _xsi:noNamespaceSchemaLocation="file:///E:/d/projects/meta/from/meta.xsd" -->
<!--Здесь словари-->
<enums>
@ -217,11 +217,21 @@
<code name="Код" shortname="Код" type="12"/>
<name name="Наименование" shortname="Наименование" type="2" length="50"/>
</sessionType>
<moneyFlowSide name="Справочник направлений" class="ru.clearing.platform.dictionary.MoneyFlowSideDictionary" table="money_flow_side_dictionary">
<moneyFlowSide name="Справочник направлений денежного рынка" class="ru.clearing.platform.dictionary.MoneyFlowSideDictionary" table="money_flow_side_dictionary">
<id name="Идентификатор" shortname="ID" type="1"/>
<code name="Код" shortname="Код" type="12"/>
<name name="Значение" shortname="Значение" type="2" length="255"/>
</moneyFlowSide>
<side name="Справочник направлений" class="ru.clearing.platform.dictionary.SideDictionary" table="side_dictionary">
<id name="Идентификатор" shortname="ID" type="1"/>
<code name="Код" shortname="Код" type="12"/>
<name name="Значение" shortname="Значение" type="2" length="255"/>
</side>
<marketCode name="Справочник кодов рынков" class="ru.clearing.platform.dictionary.MarketCodeDictionary" table="market_code_dictionary">
<id name="Идентификатор" shortname="ID" type="1"/>
<code name="Код" shortname="Код" type="12"/>
<name name="Значение" shortname="Значение" type="2" length="255"/>
</marketCode>
<chargeDirection name="Направление начисления комиссии" class="ru.clearing.platform.dictionary.ChargeDirectionDictionary" table="charge_direction_dictionary">
<id name="Идентификатор" shortname="ID" type="1"/>
@ -749,7 +759,7 @@
<description type="2" length="255" name="Описание" shortname="Описание" searchable="true" sortable="true"/>
<exchangeId type="1" dbname="Идентификатор площадки" name="Наименование площадки" shortname="Площадка" searchable="true" sortable="true" link="company"/>
<name type="2" length="255" name="Наименование рынка" shortname="Рынок" searchable="true" sortable="true"/>
<code type="12" name="Код рынка" shortname="Код" searchable="true" sortable="true"/>
<code type="12" name="Код рынка" shortname="Код" searchable="true" sortable="true" link="marketCode"/>
<settlementCurrency type="12" dbname="Код валюты расчета" name="Наименование валюты расчета" shortname="Валюта" searchable="true" sortable="true" visible="true" link="currencyCode" linkCode="code"/>
<section type="12" dbname="Код секции" name="Наименование секции" shortname="Секция" searchable="true" sortable="true" visible="true" link="section"/>
<id type="1" name="Идентификатор записи" shortname="ID" searchable="true" sortable="true"/>
@ -1187,6 +1197,8 @@
</post>
<post destination="GRRT" group="Клиринг" name="Сформировать реестр на текущий день">
</post>
<post destination="GORD" group="Клиринг" name="Формирование реестра распоряжений, направленных расчетному депозитарию">
</post>
</actions>
</launcher>
@ -1281,7 +1293,7 @@
<updatedAt field="updated" type="4" webtype="5" dbname="Дата-время изменения записи" name="Время изменения записи" shortname="Изменено" visible="false" searchable="true" sortable="true"/>
<clearingDate type="6" name="Дата клиринга" shortname="Дата клиринга" visible="false" searchable="true" sortable="true"/>
</executionDeposit>
<executionFond name="Сделки на Фондовой секции" destination="execution-fonds" class="" logUpdates="true" table="execution_fond">
<executionFond name="Сделки на Фондовой секции" destination="execution-fonds" class="ru.clearing.classes.statics.data.execution.ExecutionFond" logUpdates="true" table="execution_fond">
<id type="1" name="Идентификатор записи" shortname="ID" visible="false" searchable="true" sortable="true"/>
<createdAt field="created" type="4" webtype="5" dbname="Дата-время создания записи" name="Время создания записи" shortname="Создано" visible="false" searchable="true" sortable="true"/>
<updatedAt field="updated" type="4" webtype="5" dbname="Дата-время изменения записи" name="Время изменения записи" shortname="Изменено" visible="false" searchable="true" sortable="true"/>

View file

@ -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,

View file

@ -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)}<br>
* Тест проверяет получение сущности {@link ClientCodeNewAction} по REST API и отправку в Apache Kafka.<br>
* Входной запрос {@link ClientCodeNewRequest}:<br>
* {@link ClientCodeNewRequest#} - 044525776<br>
* ...
*/
@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)}<br>
* Тест проверяет работу валидации сущности {@link ClientCodeNewAction} принятой по REST API для отправку в Apache Kafka.<br>
* Входной запрос {@link ClientCodeNewAction}:<br>
* {@link ClientCodeNewAction#id} - (generated)<br>
* {@link ClientCodeNewAction#code} - "044525776" или null или ""<br>
* {@link ClientCodeNewAction#status} - "ACTV"<br>
* {@link ClientCodeNewAction#companyId} - 1000L или null<br>
* {@link ClientCodeNewAction#depoAccountId} - 1010L<br>
* {@link ClientCodeNewAction#moneyAccountId} - 1020L<br>
* {@link ClientCodeNewAction#tradingClearingRegistryId} - 1030L<br>
*/
@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)}<br>
* Тест проверяет получение сущности {@link ClientCodeUpdateAction} по REST API и отправку в Apache Kafka.<br>
* Входной запрос {@link ClientCodeUpdateAction}:<br>
* {@link ClientCodeUpdateAction#id} - (generated)<br>
* {@link ClientCodeUpdateAction#code} - "044525776"<br>
* {@link ClientCodeUpdateAction#status} - "ACTV"<br>
* {@link ClientCodeUpdateAction#companyId} - 1000L<br>
* {@link ClientCodeUpdateAction#depoAccountId} - 1010L<br>
* {@link ClientCodeUpdateAction#moneyAccountId} - 1020L<br>
* {@link ClientCodeUpdateAction#tradingClearingRegistryId} - 1030L<br>
*/
@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)} <br>
* Тест проверяет получение id сущности {@link Long} по REST API и отправку в Apache Kafka.<br>
* Входной запрос /accounting/client-codes/{@link Long}: - 0L<br>
*/
@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()} <br>
* Тест проверяет получение запроса по REST API и отправку всех записей из таблицы hazelcast Map_ClientCode.<br>
* Входной запрос /accounting/client-codes/ <br>
* Ответ CommonGetAllResponse <br>
*/
@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;
}
}

View file

@ -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()} <br>
* Тест проверяет получение запроса по REST API.<br>
* Входной запрос /execution-fonds/ <br>
* Ответ CommonGetAllResponse <br>
*/
@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);
}
}

View file

@ -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)}<br>
* Тест проверяет получение сущности {@link TradingClearingRegistryNewAction} по REST API и отправку в Apache Kafka.<br>
* Входной запрос {@link TradingClearingRegistryNewRequest}:<br>
* {@link TradingClearingRegistryNewRequest#companyId} - 1234567890<br>
* {@link TradingClearingRegistryNewRequest#moneyAccountId} - 18415056336414057<br>
* {@link TradingClearingRegistryNewRequest#depoAccountId} - 21239757374450030<br>
* {@link TradingClearingRegistryNewRequest#status} - ACTV<br>
*/
@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)}<br>
* Тест проверяет работу валидации сущности {@link TradingClearingRegistryNewAction} принятой по REST API для отправку в Apache Kafka.<br>
* Входной запрос {@link TradingClearingRegistryNewRequest}:<br>
* {@link TradingClearingRegistryNewRequest#companyId} - 1234567890 / null<br>
* {@link TradingClearingRegistryNewRequest#moneyAccountId} - 18415056336414057 / null<br>
* {@link TradingClearingRegistryNewRequest#depoAccountId} - 21239757374450030<br>
* {@link TradingClearingRegistryNewRequest#status} - ACTV<br>
*/
@Test
void addWithException() {
assertThrowsForNew(getTradingClearingRegistryNewAction(0, null, 18415056336414057L, 21239757374450030L, "ACTV"));
assertThrowsForNew(getTradingClearingRegistryNewAction(0, 1234567890L, null, 21239757374450030L, "ACTV"));
}
/**
* {@link TradingClearingRegistryController#update(Long, TradingClearingRegistryUpdateAction)}<br>
* Тест проверяет получение сущности {@link TradingClearingRegistryUpdateAction} по REST API и отправку в Apache Kafka.<br>
* Входной запрос {@link TradingClearingRegistryUpdateAction}:<br>
* {@link TradingClearingRegistryUpdateAction#id} - generated<br>
* {@link TradingClearingRegistryUpdateAction#code} - ACTV<br>
*/
@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)} <br>
* Тест проверяет получение id сущности {@link Long} по REST API и отправку в Apache Kafka.<br>
* Входной запрос /registry/trading-clearing-registry/{@link Long}: - 0L<br>
*/
@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)} <br>
* Тест проверяет получение запроса по REST API и отправку всех записей из таблицы hazelcast Map_TradingClearingRegistry.<br>
* Входной запрос /registry/trading-clearing-registry/{@link Long}: - 0L <br>
* Ответ BankAccountBackendGetById <br>
*/
@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<TradingClearingRegistry> 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()} <br>
* Тест проверяет получение запроса по REST API и отправку всех записей из таблицы hazelcast Map_BankAccount.<br>
* Входной запрос /registry/trading-clearing-registry/ <br>
* Ответ CommonGetAllResponse <br>
*/
@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;
}
}

File diff suppressed because it is too large Load diff

View file

@ -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;

View file

@ -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)';

View file

@ -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;
}

View file

@ -1,7 +1,7 @@
package ru.clearing.platform.dictionary;
/**
* Направление заявки
* Справочник направлений денежного рынка
*
* Dictionary DB table: MONEY_FLOW_SIDE_DICTIONARY
**/

View file

@ -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;
}

View file

@ -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<MarketCodeDictionary> {
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();
}
}

View file

@ -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<SideDictionary> {
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();
}
}

View file

@ -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));

View file

@ -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;

View file

@ -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;
}
}

View file

@ -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";

View file

@ -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";

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -0,0 +1,56 @@
package ru.spcex.clearing.platform.messaging.domain.cud.registry;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import ru.spcex.clearing.platform.messaging.domain.json.deserialize.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;
}
}

View file

@ -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;
}
}