Merge remote-tracking branch 'origin/dev' into psemenkov

# Conflicts:
#	clearing-parent/account-service/src/test/java/ru/spcex/clearing/account/service/BankAccountServiceTest.java
This commit is contained in:
psemenkov 2022-12-07 16:47:03 +03:00
commit f5df0d409e
101 changed files with 3872 additions and 1949 deletions

View file

@ -55,7 +55,6 @@ public class BankAccountService extends QueueConsumer implements InitializingBea
bankAccount.setDestination(req.getDestination());
bankAccount.setTaxpayerIdentificationNumber(req.getTaxpayerIdentificationNumber());
bankAccount.setTaxRegistrationReasonCode(req.getTaxRegistrationReasonCode());
bankAccount.setAccount(req.getAccount());
bankAccountMap.insert(bankAccount);
log.debug("successfully processed, new id {}", bankAccount.getId());
@ -73,7 +72,6 @@ public class BankAccountService extends QueueConsumer implements InitializingBea
bankAccount.setDestination(req.getDestination());
bankAccount.setTaxpayerIdentificationNumber(req.getTaxpayerIdentificationNumber());
bankAccount.setTaxRegistrationReasonCode(req.getTaxRegistrationReasonCode());
bankAccount.setAccount(req.getAccount());
bankAccountMap.update(bankAccount);
log.debug("successfully update, existing bankAccount with id {}", bankAccount.getId());

View file

@ -90,7 +90,7 @@ public class WebConfig implements WebMvcConfigurer {
} else if (sameSite.equalsIgnoreCase(Cookie.SameSite.NONE.attributeValue())) {
return CookieSameSiteSupplier.ofNone();
} else if (sameSite.equalsIgnoreCase(Cookie.SameSite.LAX.attributeValue())) {
return CookieSameSiteSupplier.ofNone();
return CookieSameSiteSupplier.ofLax();
} else if (sameSite.equalsIgnoreCase(Cookie.SameSite.STRICT.attributeValue())) {
return CookieSameSiteSupplier.ofStrict();
} else {

View file

@ -8,25 +8,38 @@ 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.company.Company;
import ru.spcex.clearing.backendapi.controller.queue.AbstractQueueController;
import ru.spcex.clearing.backendapi.controller.request.cud.company.CompanyInfoUpdateAction;
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.meta.GetResponseFactory;
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 ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.ExecutionException;
@Controller
@RequestMapping("/company-infos")
public class EditCompanyInfoController extends AbstractQueueController {
private final IStateLoader stateLoader;
private final Imdg<Company> companyImdg;
private final GetResponseFactory responseFactory;
@Autowired
public EditCompanyInfoController(IOperator operator, IStateLoader stateLoader) {
public EditCompanyInfoController(IOperator operator, IStateLoader stateLoader, ImdgProvider imdgProvider, GetResponseFactory responseFactory) {
super(operator);
this.stateLoader = stateLoader;
this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
this.responseFactory = responseFactory;
}
@ApiOperation(value = "update company info.")
@ -42,15 +55,20 @@ public class EditCompanyInfoController extends AbstractQueueController {
return processRequest(Consts.DESTINATION_COMPANY_INFO_UPDATE, companyInfoUpdateAction);
}
//todo
// @ApiOperation(value = "get all CompanyInfo's.")
// @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CompanyBackendInfoGetAll.class)})
// @RequestMapping(method = RequestMethod.GET)
// @ResponseBody
// public CompanyBackendInfoGetAll getAll() {
// Collection<CompanyInfo> all = stateLoader.getAll(IMDGDistributedNames.Map_Company, CompanyInfo.class);
// CompanyBackendGetAll response = new CompanyBackendGetAll();
// response.fromEntity(all);
// return response;
// }
@ApiOperation(value = "get all CompanyInfo's.")
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CommonGetAllResponse.class)})
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public CommonGetAllResponse getAll() {
Collection<Map<String, Object>> all = new ArrayList<>();
Collection<Company> companies = companyImdg.getAllValues();
for (Company company : companies) {
if (company.getProfile() != null) { // пока возвращает "пустой" CompanyInfo если его нет для Company
all.add(responseFactory.responseFromObject(company.getProfile()));
}
}
CommonGetAllResponse response = new CommonGetAllResponse();
response.fromEntity(all);
return response;
}
}

View file

@ -1,28 +1,38 @@
package ru.spcex.clearing.backendapi.controller.queue.scheduler;
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.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.*;
import ru.clearing.classes.statics.data.scheduler.ClearingCalendar;
import ru.spcex.clearing.backendapi.controller.queue.AbstractQueueController;
import ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction;
import ru.spcex.clearing.backendapi.controller.request.cud.schedule.ClearingCalendarNewAction;
import ru.spcex.clearing.backendapi.controller.request.cud.schedule.ClearingCalendarUpdateAction;
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("/schedule/clearing-calendars")
public class ClearingCalendarController {
public class ClearingCalendarController extends AbstractQueueController {
private final IStateLoader stateLoader;
@Autowired
public ClearingCalendarController(IStateLoader stateLoader) {
public ClearingCalendarController(IStateLoader stateLoader, IOperator operator) {
super(operator);
this.stateLoader = stateLoader;
}
@ -36,4 +46,38 @@ public class ClearingCalendarController {
response.fromEntity(all);
return response;
}
@ApiOperation(value = "new planner clearing calendar.")
@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 ClearingCalendarNewAction clearingCalendarNewAction) throws ExecutionException, InterruptedException {
return processRequest(Consts.DESTINATION_CLEARING_CALENDAR_NEW, clearingCalendarNewAction);
}
@ApiOperation(value = "update clearing calendar.")
@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 ClearingCalendarUpdateAction clearingCalendarUpdateAction) throws ExecutionException, InterruptedException {
clearingCalendarUpdateAction.setId(id);
return processRequest(Consts.DESTINATION_CLEARING_CALENDAR_UPDATE, clearingCalendarUpdateAction);
}
@ApiOperation(value = "delete clearing calendar.")
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CudResponse.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_CLEARING_CALENDAR_DELETE, deleteAction);
}
}

View file

@ -9,7 +9,9 @@ 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.scheduler.PlannerAllToday;
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;
@ -18,11 +20,12 @@ import java.util.Map;
@Controller
@RequestMapping("/schedule/planners-all-today")
public class PlanerAllTodayController {
public class PlannerAllTodayController extends AbstractQueueController {
private final IStateLoader stateLoader;
@Autowired
public PlanerAllTodayController(IStateLoader stateLoader) {
public PlannerAllTodayController(IStateLoader stateLoader, IOperator operator) {
super(operator);
this.stateLoader = stateLoader;
}

View file

@ -1,28 +1,38 @@
package ru.spcex.clearing.backendapi.controller.queue.scheduler;
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.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.*;
import ru.clearing.classes.statics.data.scheduler.Planner;
import ru.spcex.clearing.backendapi.controller.queue.AbstractQueueController;
import ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction;
import ru.spcex.clearing.backendapi.controller.request.cud.schedule.PlannerNewAction;
import ru.spcex.clearing.backendapi.controller.request.cud.schedule.PlannerUpdateAction;
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("/schedule/planners")
public class PlannerController {
public class PlannerController extends AbstractQueueController {
private final IStateLoader stateLoader;
@Autowired
public PlannerController(IStateLoader stateLoader) {
public PlannerController(IOperator operator, IStateLoader stateLoader) {
super(operator);
this.stateLoader = stateLoader;
}
@ -36,4 +46,38 @@ public class PlannerController {
response.fromEntity(all);
return response;
}
@ApiOperation(value = "new planner.")
@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 PlannerNewAction plannerNewAction) throws ExecutionException, InterruptedException {
return processRequest(Consts.DESTINATION_PLANNER_NEW, plannerNewAction);
}
@ApiOperation(value = "update planner.")
@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 PlannerUpdateAction plannerUpdateAction) throws ExecutionException, InterruptedException {
plannerUpdateAction.setId(id);
return processRequest(Consts.DESTINATION_PLANNER_UPDATE, plannerUpdateAction);
}
@ApiOperation(value = "delete planner.")
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CudResponse.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_PLANNER_DELETE, deleteAction);
}
}

View file

@ -1,28 +1,38 @@
package ru.spcex.clearing.backendapi.controller.queue.scheduler;
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.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.*;
import ru.clearing.classes.statics.data.scheduler.PlannerTemplate;
import ru.spcex.clearing.backendapi.controller.queue.AbstractQueueController;
import ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction;
import ru.spcex.clearing.backendapi.controller.request.cud.schedule.PlannerTemplateNewAction;
import ru.spcex.clearing.backendapi.controller.request.cud.schedule.PlannerTemplateUpdateAction;
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("/schedule/planner-templates")
public class PlannerTemplateController {
public class PlannerTemplateController extends AbstractQueueController {
private final IStateLoader stateLoader;
@Autowired
public PlannerTemplateController(IStateLoader stateLoader) {
public PlannerTemplateController(IStateLoader stateLoader, IOperator operator) {
super(operator);
this.stateLoader = stateLoader;
}
@ -36,4 +46,38 @@ public class PlannerTemplateController {
response.fromEntity(all);
return response;
}
@ApiOperation(value = "new planner template.")
@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 PlannerTemplateNewAction plannerTemplateNewAction) throws ExecutionException, InterruptedException {
return processRequest(Consts.DESTINATION_PLANNER_TEMPLATE_NEW, plannerTemplateNewAction);
}
@ApiOperation(value = "update planner template.")
@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 PlannerTemplateUpdateAction plannerTemplateUpdateAction) throws ExecutionException, InterruptedException {
plannerTemplateUpdateAction.setId(id);
return processRequest(Consts.DESTINATION_PLANNER_TEMPLATE_UPDATE, plannerTemplateUpdateAction);
}
@ApiOperation(value = "delete planner template.")
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CudResponse.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_PLANNER_TEMPLATE_DELETE, deleteAction);
}
}

View file

@ -4,26 +4,43 @@ 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.http.MediaType;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import ru.clearing.classes.statics.data.user.User;
import ru.spcex.clearing.backendapi.controller.queue.AbstractQueueController;
import ru.spcex.clearing.backendapi.controller.request.cud.utilities.UserAuthAction;
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.security.KeycloakUtils;
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 ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.ExecutionException;
@Controller
@RequestMapping("/users")
public class UserController {
public class UserController extends AbstractQueueController {
private final IStateLoader stateLoader;
private final Imdg<User> userImdg;
@Autowired
public UserController(IStateLoader stateLoader) {
public UserController(IOperator operator, IStateLoader stateLoader, ImdgProvider imdgProvider) {
super(operator);
this.stateLoader = stateLoader;
this.userImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_User, User.class);
}
@ApiOperation(value = "get all users.")
@ -36,4 +53,22 @@ public class UserController {
response.fromEntity(all);
return response;
}
@ApiOperation(value = "update user")
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CudResponse.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = BasicSpcexResponse.class)})
@RequestMapping(method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public CudResponse update(
@RequestBody UserAuthAction userAuthAction) throws ExecutionException, InterruptedException {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String username = KeycloakUtils.getUserNameFromAuthentication(authentication);
User user = userImdg.getSingleObjectByFieldValues(Map.of("identifier", username));
if (user == null) {
return processRequest(Consts.USER_AUTH_SUCCESS, userAuthAction);
}
throw new IllegalStateException("cannot create user cause it is exists: " + username);
}
}

View file

@ -39,9 +39,6 @@ public class BankAccountNewAction implements IAction<BankAccountNewRequest> {
@ApiModelProperty(value = "Код причины постановки (КПП)", example = "01")
@JsonProperty
private String taxRegistrationReasonCode;
@ApiModelProperty(value = "Номер счета", example = "11111222223333344444")
@JsonProperty
private String account;
@Override
public Collection<EnumMessage> validate() {
@ -67,9 +64,6 @@ public class BankAccountNewAction implements IAction<BankAccountNewRequest> {
if ("RUB".equalsIgnoreCase(this.currency) && !StringUtils.hasLength(taxRegistrationReasonCode)) {
return List.of(new EnumMessage(BackEndError.ValidationError, "taxRegistrationReasonCode"));
}
if (!StringUtils.hasLength(account)) {
return List.of(new EnumMessage(BackEndError.ValidationError, "account"));
}
return Collections.emptyList();
}
@ -85,7 +79,6 @@ public class BankAccountNewAction implements IAction<BankAccountNewRequest> {
req.setDestination(this.destination);
req.setTaxpayerIdentificationNumber(this.taxpayerIdentificationNumber);
req.setTaxRegistrationReasonCode(this.taxRegistrationReasonCode);
req.setAccount(this.account);
return req;
}
@ -158,12 +151,4 @@ public class BankAccountNewAction implements IAction<BankAccountNewRequest> {
public void setTaxRegistrationReasonCode(String taxRegistrationReasonCode) {
this.taxRegistrationReasonCode = taxRegistrationReasonCode;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
}

View file

@ -38,9 +38,8 @@ public class BankAccountUpdateAction implements IAction<BankAccountUpdateRequest
@ApiModelProperty(value = "Код причины постановки (КПП)", example = "01")
@JsonProperty
private String taxRegistrationReasonCode;
@ApiModelProperty(value = "Номер счета", example = "11111222223333344444")
@JsonProperty
private String account;
@Override
public Collection<EnumMessage> validate() {
@ -59,7 +58,6 @@ public class BankAccountUpdateAction implements IAction<BankAccountUpdateRequest
req.setDestination(this.destination);
req.setTaxpayerIdentificationNumber(this.taxpayerIdentificationNumber);
req.setTaxRegistrationReasonCode(this.taxRegistrationReasonCode);
req.setAccount(this.account);
return req;
}
@ -140,12 +138,4 @@ public class BankAccountUpdateAction implements IAction<BankAccountUpdateRequest
public void setTaxRegistrationReasonCode(String taxRegistrationReasonCode) {
this.taxRegistrationReasonCode = taxRegistrationReasonCode;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
}

View file

@ -0,0 +1,83 @@
package ru.spcex.clearing.backendapi.controller.request.cud.schedule;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModelProperty;
import 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.schedule.ClearingCalendarNewRequest;
import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalDateDeserializer;
import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalDateSerializer;
import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.text.TextUtil;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class ClearingCalendarNewAction implements IAction<ClearingCalendarNewRequest> {
@ApiModelProperty(value = "Дата", example = "2022-12-25")
@JsonSerialize(using = LocalDateSerializer.class)
@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonProperty
public LocalDate clearingDate;
@ApiModelProperty(value = "Компания", example = "1000")
@JsonProperty
public Long companyId;
@ApiModelProperty(value = "Статус", example = "ABCD")
@JsonProperty
public String dayStatus;
@Override
public ClearingCalendarNewRequest toRequest() {
ClearingCalendarNewRequest clearingCalendarNewRequest = new ClearingCalendarNewRequest();
clearingCalendarNewRequest.setClearingDate(clearingDate);
clearingCalendarNewRequest.setCompanyId(companyId);
clearingCalendarNewRequest.setDayStatus(dayStatus);
return clearingCalendarNewRequest;
}
@Override
public ActionType getActionType() {
return ActionType.NEW;
}
@Override
public Collection<EnumMessage> validate() {
List<EnumMessage> errors = new ArrayList<>();
if (clearingDate == null) {
errors.add(new EnumMessage(BackEndError.ValidationError,"clearingDate"));
}
if (TextUtil.isEmpty(dayStatus)) {
errors.add(new EnumMessage(BackEndError.ValidationError,"taskStatus"));
}
return errors;
}
public LocalDate getClearingDate() {
return clearingDate;
}
public void setClearingDate(LocalDate clearingDate) {
this.clearingDate = clearingDate;
}
public Long getCompanyId() {
return companyId;
}
public void setCompanyId(Long companyId) {
this.companyId = companyId;
}
public String getDayStatus() {
return dayStatus;
}
public void setDayStatus(String dayStatus) {
this.dayStatus = dayStatus;
}
}

View file

@ -0,0 +1,101 @@
package ru.spcex.clearing.backendapi.controller.request.cud.schedule;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModelProperty;
import 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.schedule.ClearingCalendarUpdateRequest;
import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalDateDeserializer;
import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalDateSerializer;
import ru.spcex.platform.classes.base.interfaces.WithId;
import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.text.TextUtil;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class ClearingCalendarUpdateAction implements IAction<ClearingCalendarUpdateRequest>, WithId {
@ApiModelProperty(hidden = true)
@JsonProperty
public Long id;
@ApiModelProperty(value = "Дата", example = "2022-12-25")
@JsonSerialize(using = LocalDateSerializer.class)
@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonProperty
public LocalDate clearingDate;
@ApiModelProperty(value = "Компания", example = "1000")
@JsonProperty
public Long companyId;
@ApiModelProperty(value = "Статус", example = "ABCD")
@JsonProperty
public String dayStatus;
@Override
public ClearingCalendarUpdateRequest toRequest() {
ClearingCalendarUpdateRequest clearingCalendarUpdateRequest = new ClearingCalendarUpdateRequest();
clearingCalendarUpdateRequest.setId(id);
clearingCalendarUpdateRequest.setClearingDate(clearingDate);
clearingCalendarUpdateRequest.setCompanyId(companyId);
clearingCalendarUpdateRequest.setDayStatus(dayStatus);
return clearingCalendarUpdateRequest;
}
@Override
public ActionType getActionType() {
return ActionType.UPDATE;
}
@Override
public Collection<EnumMessage> validate() {
List<EnumMessage> errors = new ArrayList<>();
if (id == null) {
errors.add(new EnumMessage(BackEndError.ValidationError,"id"));
}
if (clearingDate == null) {
errors.add(new EnumMessage(BackEndError.ValidationError,"clearingDate"));
}
if (TextUtil.isEmpty(dayStatus)) {
errors.add(new EnumMessage(BackEndError.ValidationError,"taskStatus"));
}
return errors;
}
@Override
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public LocalDate getClearingDate() {
return clearingDate;
}
public void setClearingDate(LocalDate clearingDate) {
this.clearingDate = clearingDate;
}
public Long getCompanyId() {
return companyId;
}
public void setCompanyId(Long companyId) {
this.companyId = companyId;
}
public String getDayStatus() {
return dayStatus;
}
public void setDayStatus(String dayStatus) {
this.dayStatus = dayStatus;
}
}

View file

@ -0,0 +1,135 @@
package ru.spcex.clearing.backendapi.controller.request.cud.schedule;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModelProperty;
import 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.schedule.PlannerNewRequest;
import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalDateDeserializer;
import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalTimeDeserializer;
import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalDateSerializer;
import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalTimeSerializer;
import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.text.TextUtil;
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class PlannerNewAction implements IAction<PlannerNewRequest> {
@ApiModelProperty(value = "Идентификатор задачи", example = "ABCD")
@JsonProperty
private String task;
@ApiModelProperty(value = "Время", example = "16:30:00")
@JsonSerialize(using = LocalTimeSerializer.class)
@JsonDeserialize(using = LocalTimeDeserializer.class)
@JsonProperty
public LocalTime taskTime;
@ApiModelProperty(value = "Дата", example = "2022-12-25")
@JsonSerialize(using = LocalDateSerializer.class)
@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonProperty
public LocalDate clearingDate;
@ApiModelProperty(value = "Секция", example = "ABCD")
@JsonProperty
public String market;
@ApiModelProperty(value = "Статус", example = "ABCD")
@JsonProperty
public String taskStatus;
@ApiModelProperty(value = "Инструмент", example = "1000")
@JsonProperty
public Long securityId;
@Override
public PlannerNewRequest toRequest() {
PlannerNewRequest plannerNewRequest = new PlannerNewRequest();
plannerNewRequest.setTask(task);
plannerNewRequest.setTaskTime(taskTime);
plannerNewRequest.setClearingDate(clearingDate);
plannerNewRequest.setMarket(market);
plannerNewRequest.setTaskStatus(taskStatus);
plannerNewRequest.setSecurityId(securityId);
return plannerNewRequest;
}
@Override
public ActionType getActionType() {
return ActionType.NEW;
}
@Override
public Collection<EnumMessage> validate() {
List<EnumMessage> errors = new ArrayList<>();
if (TextUtil.isEmpty(task)) {
errors.add(new EnumMessage(BackEndError.ValidationError,"task"));
}
if (taskTime == null) {
errors.add(new EnumMessage(BackEndError.ValidationError,"taskTime"));
}
if (clearingDate == null) {
errors.add(new EnumMessage(BackEndError.ValidationError,"clearingDate"));
}
if (TextUtil.isEmpty(taskStatus)) {
errors.add(new EnumMessage(BackEndError.ValidationError,"taskStatus"));
}
return errors;
}
public String getTask() {
return task;
}
public void setTask(String task) {
this.task = task;
}
public LocalTime getTaskTime() {
return taskTime;
}
public void setTaskTime(LocalTime taskTime) {
this.taskTime = taskTime;
}
public LocalDate getClearingDate() {
return clearingDate;
}
public void setClearingDate(LocalDate clearingDate) {
this.clearingDate = clearingDate;
}
public String getMarket() {
return market;
}
public void setMarket(String market) {
this.market = market;
}
public String getTaskStatus() {
return taskStatus;
}
public void setTaskStatus(String taskStatus) {
this.taskStatus = taskStatus;
}
public Long getSecurityId() {
return securityId;
}
public void setSecurityId(Long securityId) {
this.securityId = securityId;
}
}

View file

@ -0,0 +1,82 @@
package ru.spcex.clearing.backendapi.controller.request.cud.schedule;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
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.schedule.PlannerTemplateNewRequest;
import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalTimeDeserializer;
import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalTimeSerializer;
import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.text.TextUtil;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class PlannerTemplateNewAction implements IAction<PlannerTemplateNewRequest> {
@JsonProperty
public String task;
@JsonSerialize(using = LocalTimeSerializer.class)
@JsonDeserialize(using = LocalTimeDeserializer.class)
@JsonProperty
public LocalTime taskTime;
@JsonProperty
public String taskStatus;
@Override
public PlannerTemplateNewRequest toRequest() {
PlannerTemplateNewRequest plannerTemplateNewRequest = new PlannerTemplateNewRequest();
plannerTemplateNewRequest.setTask(task);
plannerTemplateNewRequest.setTaskTime(taskTime);
plannerTemplateNewRequest.setTaskStatus(taskStatus);
return plannerTemplateNewRequest;
}
@Override
public ActionType getActionType() {
return ActionType.NEW;
}
@Override
public Collection<EnumMessage> validate() {
List<EnumMessage> errors = new ArrayList<>();
if (TextUtil.isEmpty(task)) {
errors.add(new EnumMessage(BackEndError.ValidationError,"task"));
}
if (taskTime == null) {
errors.add(new EnumMessage(BackEndError.ValidationError,"taskTime"));
}
if (TextUtil.isEmpty(taskStatus)) {
errors.add(new EnumMessage(BackEndError.ValidationError,"taskStatus"));
}
return errors;
}
public String getTask() {
return task;
}
public void setTask(String task) {
this.task = task;
}
public LocalTime getTaskTime() {
return taskTime;
}
public void setTaskTime(LocalTime taskTime) {
this.taskTime = taskTime;
}
public String getTaskStatus() {
return taskStatus;
}
public void setTaskStatus(String taskStatus) {
this.taskStatus = taskStatus;
}
}

View file

@ -0,0 +1,100 @@
package ru.spcex.clearing.backendapi.controller.request.cud.schedule;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModelProperty;
import 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.schedule.PlannerTemplateUpdateRequest;
import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalTimeDeserializer;
import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalTimeSerializer;
import ru.spcex.platform.classes.base.interfaces.WithId;
import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.text.TextUtil;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class PlannerTemplateUpdateAction implements IAction<PlannerTemplateUpdateRequest>, WithId {
@ApiModelProperty(hidden = true)
@JsonProperty
public Long id;
@JsonProperty
public String task;
@JsonSerialize(using = LocalTimeSerializer.class)
@JsonDeserialize(using = LocalTimeDeserializer.class)
@JsonProperty
public LocalTime taskTime;
@JsonProperty
public String taskStatus;
@Override
public PlannerTemplateUpdateRequest toRequest() {
PlannerTemplateUpdateRequest plannerTemplateUpdateRequest = new PlannerTemplateUpdateRequest();
plannerTemplateUpdateRequest.setId(id);
plannerTemplateUpdateRequest.setTask(task);
plannerTemplateUpdateRequest.setTaskTime(taskTime);
plannerTemplateUpdateRequest.setTaskStatus(taskStatus);
return plannerTemplateUpdateRequest;
}
@Override
public ActionType getActionType() {
return ActionType.UPDATE;
}
@Override
public Collection<EnumMessage> validate() {
List<EnumMessage> errors = new ArrayList<>();
if (id == null) {
errors.add(new EnumMessage(BackEndError.ValidationError,"id"));
}
if (TextUtil.isEmpty(task)) {
errors.add(new EnumMessage(BackEndError.ValidationError,"task"));
}
if (taskTime == null) {
errors.add(new EnumMessage(BackEndError.ValidationError,"taskTime"));
}
if (TextUtil.isEmpty(taskStatus)) {
errors.add(new EnumMessage(BackEndError.ValidationError,"taskStatus"));
}
return errors;
}
@Override
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTask() {
return task;
}
public void setTask(String task) {
this.task = task;
}
public LocalTime getTaskTime() {
return taskTime;
}
public void setTaskTime(LocalTime taskTime) {
this.taskTime = taskTime;
}
public String getTaskStatus() {
return taskStatus;
}
public void setTaskStatus(String taskStatus) {
this.taskStatus = taskStatus;
}
}

View file

@ -0,0 +1,153 @@
package ru.spcex.clearing.backendapi.controller.request.cud.schedule;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModelProperty;
import 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.schedule.PlannerUpdateRequest;
import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalDateDeserializer;
import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalTimeDeserializer;
import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalDateSerializer;
import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalTimeSerializer;
import ru.spcex.platform.classes.base.interfaces.WithId;
import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.text.TextUtil;
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class PlannerUpdateAction implements IAction<PlannerUpdateRequest>, WithId {
@ApiModelProperty(hidden = true)
@JsonProperty
public Long id;
@ApiModelProperty(value = "Идентификатор задачи", example = "ABCD")
@JsonProperty
private String task;
@ApiModelProperty(value = "Время", example = "16:30:00")
@JsonSerialize(using = LocalTimeSerializer.class)
@JsonDeserialize(using = LocalTimeDeserializer.class)
@JsonProperty
public LocalTime taskTime;
@ApiModelProperty(value = "Дата", example = "2022-12-25")
@JsonSerialize(using = LocalDateSerializer.class)
@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonProperty
public LocalDate clearingDate;
@ApiModelProperty(value = "Секция", example = "ABCD")
@JsonProperty
public String market;
@ApiModelProperty(value = "Статус", example = "ABCD")
@JsonProperty
public String taskStatus;
@ApiModelProperty(value = "Инструмент", example = "1000")
@JsonProperty
public Long securityId;
@Override
public PlannerUpdateRequest toRequest() {
PlannerUpdateRequest plannerUpdateRequest = new PlannerUpdateRequest();
plannerUpdateRequest.setId(id);
plannerUpdateRequest.setTask(task);
plannerUpdateRequest.setTaskTime(taskTime);
plannerUpdateRequest.setClearingDate(clearingDate);
plannerUpdateRequest.setMarket(market);
plannerUpdateRequest.setTaskStatus(taskStatus);
plannerUpdateRequest.setSecurityId(securityId);
return plannerUpdateRequest;
}
@Override
public ActionType getActionType() {
return ActionType.UPDATE;
}
@Override
public Collection<EnumMessage> validate() {
List<EnumMessage> errors = new ArrayList<>();
if (id == null) {
errors.add(new EnumMessage(BackEndError.ValidationError,"id"));
}
if (TextUtil.isEmpty(task)) {
errors.add(new EnumMessage(BackEndError.ValidationError,"task"));
}
if (taskTime == null) {
errors.add(new EnumMessage(BackEndError.ValidationError,"taskTime"));
}
if (clearingDate == null) {
errors.add(new EnumMessage(BackEndError.ValidationError,"clearingDate"));
}
if (TextUtil.isEmpty(taskStatus)) {
errors.add(new EnumMessage(BackEndError.ValidationError,"taskStatus"));
}
return errors;
}
@Override
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTask() {
return task;
}
public void setTask(String task) {
this.task = task;
}
public LocalTime getTaskTime() {
return taskTime;
}
public void setTaskTime(LocalTime taskTime) {
this.taskTime = taskTime;
}
public LocalDate getClearingDate() {
return clearingDate;
}
public void setClearingDate(LocalDate clearingDate) {
this.clearingDate = clearingDate;
}
public String getMarket() {
return market;
}
public void setMarket(String market) {
this.market = market;
}
public String getTaskStatus() {
return taskStatus;
}
public void setTaskStatus(String taskStatus) {
this.taskStatus = taskStatus;
}
public Long getSecurityId() {
return securityId;
}
public void setSecurityId(Long securityId) {
this.securityId = securityId;
}
}

View file

@ -32,7 +32,7 @@ public class MoneyMarketSecurityNewAction implements IAction<MoneyMarketSecurity
public Double nominalValue;
@ApiModelProperty(value = "Идентификатор валюты номинала", example = "1000")
@JsonProperty
public Long nominalCurrencyId;
public String nominalCurrency;
@ApiModelProperty(value = "Идентификатор типа инструмента", example = "ABCD")
@JsonProperty
public String instrumentType;
@ -59,7 +59,7 @@ public class MoneyMarketSecurityNewAction implements IAction<MoneyMarketSecurity
req.setStartDate(this.getStartDate());
req.setEndDate(this.getEndDate());
req.setNominalValue(this.getNominalValue());
req.setNominalCurrencyId(this.getNominalCurrencyId());
req.setNominalCurrency(this.getNominalCurrency());
req.setInstrumentType(this.getInstrumentType());
req.setFullName(this.getFullName());
req.setSecuritySymbol(this.getSecuritySymbol());
@ -97,12 +97,12 @@ public class MoneyMarketSecurityNewAction implements IAction<MoneyMarketSecurity
this.nominalValue = nominalValue;
}
public Long getNominalCurrencyId() {
return nominalCurrencyId;
public String getNominalCurrency() {
return nominalCurrency;
}
public void setNominalCurrencyId(Long nominalCurrencyId) {
this.nominalCurrencyId = nominalCurrencyId;
public void setNominalCurrency(String nominalCurrency) {
this.nominalCurrency = nominalCurrency;
}
public String getInstrumentType() {

View file

@ -24,9 +24,9 @@ public class MoneyMarketSecurityUpdateAction implements IAction<MoneyMarketSecur
@ApiModelProperty(value = "Номинал", example = "20.5")
@JsonProperty
public Double nominalValue;
@ApiModelProperty(value = "Идентификатор валюты номинала", example = "1000")
@ApiModelProperty(value = "Валюта номинала", example = "RUB")
@JsonProperty
public Long nominalCurrencyId;
public String nominalCurrency;
@ApiModelProperty(value = "Идентификатор типа инструмента", example = "ABCD")
@JsonProperty
public String instrumentType;
@ -43,7 +43,7 @@ public class MoneyMarketSecurityUpdateAction implements IAction<MoneyMarketSecur
req.setId(this.getId());
req.setEndDate(this.getEndDate());
req.setNominalValue(this.getNominalValue());
req.setNominalCurrencyId(this.getNominalCurrencyId());
req.setNominalCurrency(this.getNominalCurrency());
req.setInstrumentType(this.getInstrumentType());
req.setFullName(this.getFullName());
req.setLotSize(this.getLotSize());
@ -73,12 +73,12 @@ public class MoneyMarketSecurityUpdateAction implements IAction<MoneyMarketSecur
this.nominalValue = nominalValue;
}
public Long getNominalCurrencyId() {
return nominalCurrencyId;
public String getNominalCurrency() {
return nominalCurrency;
}
public void setNominalCurrencyId(Long nominalCurrencyId) {
this.nominalCurrencyId = nominalCurrencyId;
public void setNominalCurrency(String nominalCurrency) {
this.nominalCurrency = nominalCurrency;
}
public String getInstrumentType() {

View file

@ -39,8 +39,8 @@ public class CommonGetAllResponse extends BasicSpcexResponse {
public void fromEntity(Collection<Map<String, Object>> anyObjectFields) {
var payload = this.getPayload();
for (Map<String, Object> moneyMarketSecurity : anyObjectFields) {
payload.getItems().add(moneyMarketSecurity);
for (Map<String, Object> allObjFields : anyObjectFields) {
payload.getItems().add(allObjFields);
}
}
}

View file

@ -20,18 +20,6 @@ public class BankAccountBackendGetAll extends BasicSpcexResponse {
@ApiModelProperty(value = "Полезная нагрузка")
private BankAccountBackendPayload payload = new BankAccountBackendPayload();
private static class BankAccountBackendPayload {
private List<BankAccountBackendGetFields> items = new ArrayList<>();
public List<BankAccountBackendGetFields> getItems() {
return items;
}
public void setItems(List<BankAccountBackendGetFields> items) {
this.items = items;
}
}
public BankAccountBackendPayload getPayload() {
return payload;
}
@ -57,9 +45,20 @@ public class BankAccountBackendGetAll extends BasicSpcexResponse {
singleItem.setSwiftCode(bankAccount.getSwiftCode());
singleItem.setTaxpayerIdentificationNumber(bankAccount.getTaxpayerIdentificationNumber());
singleItem.setTaxRegistrationReasonCode(bankAccount.getTaxRegistrationReasonCode());
singleItem.setAccount(bankAccount.getAccount());
payload.getItems().add(singleItem);
}
}
private static class BankAccountBackendPayload {
private List<BankAccountBackendGetFields> items = new ArrayList<>();
public List<BankAccountBackendGetFields> getItems() {
return items;
}
public void setItems(List<BankAccountBackendGetFields> items) {
this.items = items;
}
}
}

View file

@ -8,6 +8,7 @@ import ru.spcex.clearing.backendapi.controller.response.BasicSpcexResponse;
/**
* Банковские реквизиты для перечисления денежных средств
*
* @ApiModel(description = "Ответ в результате отправки операции в топик Kafka.")
* @ApiModelProperty(value = "Информация о принятом запросе")
**/
@ -42,7 +43,6 @@ public class BankAccountBackendGetById extends BasicSpcexResponse {
payload.setSwiftCode(bankAccount.getSwiftCode());
payload.setTaxpayerIdentificationNumber(bankAccount.getTaxpayerIdentificationNumber());
payload.setTaxRegistrationReasonCode(bankAccount.getTaxRegistrationReasonCode());
payload.setAccount(bankAccount.getAccount());
}
}

View file

@ -43,9 +43,6 @@ public class BankAccountBackendGetFields {
@JsonProperty
@ApiModelProperty(value = "", example = "")
private String taxRegistrationReasonCode;
@JsonProperty
@ApiModelProperty(value = "", example = "")
private String account;
public Long getId() {
return id;
@ -150,12 +147,4 @@ public class BankAccountBackendGetFields {
public void setTaxRegistrationReasonCode(String value) {
this.taxRegistrationReasonCode = value;
}
public String getAccount() {
return account;
}
public void setAccount(String value) {
this.account = value;
}
}

View file

@ -17,18 +17,6 @@ public class ClearingCalendarBackendGetAll extends BasicSpcexResponse {
@ApiModelProperty(value = "Полезная нагрузка")
private ClearingCalendarBackendPayload payload = new ClearingCalendarBackendPayload();
private static class ClearingCalendarBackendPayload {
private List<TradingCalendarBackendGetFields> items = new ArrayList<>();
public List<TradingCalendarBackendGetFields> getItems() {
return items;
}
public void setItems(List<TradingCalendarBackendGetFields> items) {
this.items = items;
}
}
public ClearingCalendarBackendPayload getPayload() {
return payload;
}
@ -44,11 +32,22 @@ public class ClearingCalendarBackendGetAll extends BasicSpcexResponse {
singleItem.setId(tradingCalendar.getId());
singleItem.setClearingDate(tradingCalendar.getClearingDate());
singleItem.setCompanyId(tradingCalendar.getCompanyId());
singleItem.setTradingStatus(tradingCalendar.getTradingStatus());
singleItem.setDayStatus(tradingCalendar.getDayStatus());
singleItem.setCreated(tradingCalendar.getCreated());
singleItem.setUpdated(tradingCalendar.getUpdated());
payload.getItems().add(singleItem);
}
}
private static class ClearingCalendarBackendPayload {
private List<TradingCalendarBackendGetFields> items = new ArrayList<>();
public List<TradingCalendarBackendGetFields> getItems() {
return items;
}
public void setItems(List<TradingCalendarBackendGetFields> items) {
this.items = items;
}
}
}

View file

@ -17,18 +17,6 @@ public class SchedulerAllTodayBackendGetAll extends BasicSpcexResponse {
@ApiModelProperty(value = "Полезная нагрузка")
private SchedulerAllTodayBackendPayload payload = new SchedulerAllTodayBackendPayload();
private static class SchedulerAllTodayBackendPayload {
private List<SchedulerAllTodayBackendGetFields> items = new ArrayList<>();
public List<SchedulerAllTodayBackendGetFields> getItems() {
return items;
}
public void setItems(List<SchedulerAllTodayBackendGetFields> items) {
this.items = items;
}
}
public SchedulerAllTodayBackendPayload getPayload() {
return payload;
}
@ -48,10 +36,22 @@ public class SchedulerAllTodayBackendGetAll extends BasicSpcexResponse {
singleItem.setMarket(schedulerAllToday.getMarket());
singleItem.setTaskStatus(schedulerAllToday.getTaskStatus());
singleItem.setSecurityId(schedulerAllToday.getSecurityId());
singleItem.setSource(schedulerAllToday.getSource());
singleItem.setOrigId(schedulerAllToday.getOrigId());
singleItem.setSource(schedulerAllToday.getParent());
singleItem.setOrigId(schedulerAllToday.getParentId());
payload.getItems().add(singleItem);
}
}
private static class SchedulerAllTodayBackendPayload {
private List<SchedulerAllTodayBackendGetFields> items = new ArrayList<>();
public List<SchedulerAllTodayBackendGetFields> getItems() {
return items;
}
public void setItems(List<SchedulerAllTodayBackendGetFields> items) {
this.items = items;
}
}
}

View file

@ -17,7 +17,7 @@ public class TradingCalendarBackendGetFields {
@JsonProperty
private Long companyId;
@JsonProperty
private String tradingStatus;
private String dayStatus;
@JsonProperty
@JsonSerialize(using = InstantSerializer.class)
private Instant created;
@ -49,12 +49,12 @@ public class TradingCalendarBackendGetFields {
this.companyId = companyId;
}
public String getTradingStatus() {
return tradingStatus;
public String getDayStatus() {
return dayStatus;
}
public void setTradingStatus(String tradingStatus) {
this.tradingStatus = tradingStatus;
public void setDayStatus(String dayStatus) {
this.dayStatus = dayStatus;
}
public Instant getCreated() {

View file

@ -18,18 +18,6 @@ public class MoneyMarketSecurityBackendGetAllOld extends BasicSpcexResponse {
@ApiModelProperty(value = "Полезная нагрузка")
private MoneyMarketSecurityBackendPayload payload = new MoneyMarketSecurityBackendPayload();
private static class MoneyMarketSecurityBackendPayload {
private List<MoneyMarketSecurityBackendGetFields> items = new ArrayList<>();
public List<MoneyMarketSecurityBackendGetFields> getItems() {
return items;
}
public void setItems(List<MoneyMarketSecurityBackendGetFields> items) {
this.items = items;
}
}
public MoneyMarketSecurityBackendPayload getPayload() {
return payload;
}
@ -52,8 +40,21 @@ public class MoneyMarketSecurityBackendGetAllOld extends BasicSpcexResponse {
singleItem.setInstrumentType(moneyMarketSecurity.getInstrumentType());
singleItem.setFullName(moneyMarketSecurity.getFullName());
singleItem.setSecuritySymbol(moneyMarketSecurity.getSecuritySymbol());
singleItem.setTermType(moneyMarketSecurity.getTermType());
payload.getItems().add(singleItem);
}
}
private static class MoneyMarketSecurityBackendPayload {
private List<MoneyMarketSecurityBackendGetFields> items = new ArrayList<>();
public List<MoneyMarketSecurityBackendGetFields> getItems() {
return items;
}
public void setItems(List<MoneyMarketSecurityBackendGetFields> items) {
this.items = items;
}
}
}

View file

@ -23,13 +23,15 @@ public class MoneyMarketSecurityBackendGetFields {
@JsonProperty
private BigDecimal nominalValue;
@JsonProperty
private Long nominalCurrency; // (linked to currencyCode)
private String nominalCurrency; // (linked to currencyCode)
@JsonProperty
private String instrumentType; // (linked to instrumentType)
@JsonProperty
private String fullName;
@JsonProperty
private String securitySymbol;
@JsonProperty
private String termType;
public Long getId() {
return id;
@ -79,11 +81,11 @@ public class MoneyMarketSecurityBackendGetFields {
this.nominalValue = nominalValue;
}
public Long getNominalCurrency() {
public String getNominalCurrency() {
return nominalCurrency;
}
public void setNominalCurrency(Long nominalCurrency) {
public void setNominalCurrency(String nominalCurrency) {
this.nominalCurrency = nominalCurrency;
}
@ -110,4 +112,12 @@ public class MoneyMarketSecurityBackendGetFields {
public void setSecuritySymbol(String securitySymbol) {
this.securitySymbol = securitySymbol;
}
public String getTermType() {
return termType;
}
public void setTermType(String termType) {
this.termType = termType;
}
}

View file

@ -40,7 +40,7 @@ public class AuthAuditSuccessLoginHandler implements AuthenticationSuccessHandle
.getPreferredUsername();
Set<String> roles = details.getRoles();
if (roles.contains(Admin) || roles.contains(Security) || roles.contains(Superviser)) {
if (roles.contains(Admin.getKey()) || roles.contains(Security.getKey()) || roles.contains(Superviser.getKey())) {
String clientIp = request != null ? request.getRemoteAddr() : null;
String serverIp = request != null ? request.getLocalAddr() : null;
userAutoCreation.sendAuthSuccessEvent(username, roles, clientIp, serverIp);

View file

@ -5,20 +5,16 @@ server.ssl.key-store=classpath:keystore/client.p12
server.ssl.key-store-password=Aa123456
server.ssl.enabled=true
spring.main.web-application-type=servlet
backend-api.example-setting=test
backend-api.hazelcast.cluster-members=127.0.0.1:5701
backend-api.hazelcast.login=dev
backend-api.hazelcast.password=dev-pass
backend-api.kafka-producer.bootstrap-servers=localhost:9092
backend-api.kafka-producer.acks=all
backend-api.kafka-producer.retries=0
backend-api.kafka-producer.batch-size=16384
backend-api.kafka-producer.linger-ms=1
backend-api.kafka-producer.buffer-memory=33554432
backend-api.kafka-consumer.bootstrap-servers=localhost:9092
backend-api.kafka-consumer.group-id=dev-group-backend-api
backend-api.kafka-consumer.enable-auto-commit=true
@ -26,10 +22,7 @@ backend-api.kafka-consumer.session-timeout-ms=30000
backend-api.kafka-consumer.auto-offset-reset=latest
backend-api.kafka-consumer.linger-ms=1
backend-api.kafka-consumer.buffer-memory=33554432
backend-api.security.authorization-disabled=false
##keycloak
##keycloak.auth-server-url=http://10.200.200.147:8080/
##keycloak.realm=master

View file

@ -112,7 +112,7 @@ public class Sdf09Executor extends AbstractExecutor<SDf09> {
statement.setSenderId(Sender.Prc.getId());
statement.setCreated(Instant.now());
statement.setClearingDate(LocalDate.now());
statement.setStatementType(StatementType.full.getKey());
statement.setStatementType(StatementType.incr.getKey());
statement.setAccountId(account.getId());
statement.setAccount(sdf09.getAccount());
statement.setInOutDirection(InOutDirection.in.getKey());

View file

@ -3,9 +3,6 @@ package ru.clearing.classes.statics.data.account;
import ru.clearing.classes.ConstSerializable;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import ru.clearing.classes.ConstSerializable;
import ru.spcex.platform.classes.base.SpcexObjectBase;
/**
* Банковские реквизиты для перечисления денежных средств
* <p>
@ -26,7 +23,6 @@ public class BankAccount extends SpcexObjectBase {
private String swiftCode;
private String taxpayerIdentificationNumber;
private String taxRegistrationReasonCode;
private String account;
public Long getAccountId() {
return accountId;
@ -123,13 +119,4 @@ public class BankAccount extends SpcexObjectBase {
public void setTaxRegistrationReasonCode(String value) {
this.taxRegistrationReasonCode = value;
}
public String getAccount() {
return account;
}
public void setAccount(String value) {
this.account = value;
}
}

View file

@ -8,9 +8,9 @@ import java.time.Instant;
import java.time.LocalTime;
/**
* Счета
* Реестр сделок допущенных к клирингу
* <p>
* DB table: ADMITTED_DEAL
* DB table: ADMITTED_DEAL_REGISTER
**/
public class AdmittedDealRegister extends BusinessObject {
private static final long serialVersionUID = ConstSerializable.serialVersionUID;

View file

@ -16,7 +16,8 @@ public class MoneyMarketSecurity extends Security {
private LocalDate startDate;
private LocalDate endDate;
private BigDecimal nominalValue;
private Long nominalCurrency; // (linked to currencyCode)
private String nominalCurrency; // (linked to currencyCode)
private String termType;
public Long getSecurityId() {
return securityId;
@ -58,11 +59,19 @@ public class MoneyMarketSecurity extends Security {
this.nominalValue = nominalValue;
}
public Long getNominalCurrency() {
public String getNominalCurrency() {
return nominalCurrency;
}
public void setNominalCurrency(Long nominalCurrency) {
public void setNominalCurrency(String nominalCurrency) {
this.nominalCurrency = nominalCurrency;
}
public String getTermType() {
return termType;
}
public void setTermType(String termType) {
this.termType = termType;
}
}

View file

@ -8,14 +8,14 @@ import java.time.LocalDate;
/**
* Торговые и неторговые дни
* <p>
* DB table: TRADING_CALENDAR
* DB table: CLEARING_CALENDAR
**/
public class ClearingCalendar extends BusinessObject {
private static final long serialVersionUID = ConstSerializable.serialVersionUID;
private LocalDate clearingDate;
private Long companyId;
private String tradingStatus;
private String dayStatus;
public LocalDate getClearingDate() {
return clearingDate;
@ -33,12 +33,12 @@ public class ClearingCalendar extends BusinessObject {
this.companyId = value;
}
public String getTradingStatus() {
return tradingStatus;
public String getDayStatus() {
return dayStatus;
}
public void setTradingStatus(String value) {
this.tradingStatus = value;
public void setDayStatus(String value) {
this.dayStatus = value;
}
}

View file

@ -6,7 +6,7 @@ import ru.clearing.classes.objects.BusinessObject;
/**
* Запуск задачи
* <p>
* DB table: TASK_RUNNER
* DB table: LAUNCHER
**/
public class Launcher extends BusinessObject {
private static final long serialVersionUID = ConstSerializable.serialVersionUID;

View file

@ -7,9 +7,9 @@ import java.time.LocalDate;
import java.time.LocalTime;
/**
* Расписание планировщика
* Расписание
* <p>
* DB table: SCHEDULER
* DB table: PLANNER
**/
public class Planner extends BusinessObject {
private static final long serialVersionUID = ConstSerializable.serialVersionUID;

View file

@ -20,8 +20,8 @@ public class PlannerAllToday extends SpcexObjectBase {
private String market;
private String taskStatus;
private Long securityId;
private String source;
private Long origId;
private String parent;
private Long parentId;
public String getTask() {
return task;
@ -71,20 +71,20 @@ public class PlannerAllToday extends SpcexObjectBase {
this.securityId = value;
}
public String getSource() {
return source;
public String getParent() {
return parent;
}
public void setSource(String value) {
this.source = value;
public void setParent(String value) {
this.parent = value;
}
public Long getOrigId() {
return origId;
public Long getParentId() {
return parentId;
}
public void setOrigId(Long value) {
this.origId = value;
public void setParentId(Long value) {
this.parentId = value;
}
}

View file

@ -6,118 +6,33 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import ru.clearing.classes.statics.data.payment.PaymentInstruction;
import ru.clearing.classes.statics.data.sdf.SDf03;
import ru.clearing.classes.statics.data.sdf.SDf11;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.Consts;
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.SdfClearingRequest;
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
import ru.spcex.platform.enumeration.TransactionStatus;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgId;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.util.AbstractMap;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
@Service
@EnableScheduling
public class ClearingService {
private final Logger log = LoggerFactory.getLogger(getClass());
private final Imdg<PaymentInstruction> paymentImdgs;
private final ExecutorService executor;
private final ImdgId idGenerator;
private final PaymentInstructionSorter senderGroupSorter;
private final Imdg<SDf03> sdf03Imdg;
private final Imdg<SDf11> sdf11Imdg;
private final KafkaSender kafkaSender;
private final SdfCreatorBySTLDPayment sdfCreator;
private final PaymentUpdateBySdf04 paymentUpdater;
@Autowired
public ClearingService(ImdgProvider imdgProvider, PaymentInstructionSorter senderGroupSorter, KafkaSender kafkaSender) {
this.paymentImdgs = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
this.sdf03Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf03, SDf03.class);
this.sdf11Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf11, SDf11.class);
this.idGenerator = imdgProvider.getImdgIdGenerator();
this.senderGroupSorter = senderGroupSorter;
this.kafkaSender = kafkaSender;
public ClearingService(SdfCreatorBySTLDPayment sdfCreator, PaymentUpdateBySdf04 paymentUpdater) {
this.sdfCreator = sdfCreator;
this.paymentUpdater = paymentUpdater;
this.executor = Executors.newSingleThreadExecutor();
}
@Scheduled(cron = "${clearing-service.scheduler.check-payment-instruction}")
public void run() {
executor.execute(this::createSdfFromPaymentInstructionSTLD);
public void sdfCreate() {
log.info("creating sdf03/11 from STLD payments task added to queue");
executor.execute(sdfCreator::createSdfFromPaymentInstructionSTLD);
}
private void createSdfFromPaymentInstructionSTLD() {
final boolean[] anyError = {false};
//generationId для созадаваемых Sdf03/Sdf11
Long generationId = idGenerator.nextId();
//выгружаем PaymentInstructions с нужным статусом
Map<Long, PaymentBatchInfo> paymentBySender = paymentImdgs.getCollectionObjectsByFieldValues(
Map.of("transactionStatus", TransactionStatus.stld.getKey()))
.stream()
//группируем по компаниям (fixme sorted убрать?)
.sorted(Comparator.comparing(PaymentInstruction::getSenderId))
.collect(Collectors.groupingBy(PaymentInstruction::getSenderId))
.entrySet()
.stream()
//результатом работы senderGroupSorter будет Map<senderId -> PaymentBatchInfo>
//PaymentBatchInfo содержит возможную ошибку, при необходимости отсортированные Payment
//тип ClearingMemberCategory
.map(entry -> {
Long senderId = entry.getKey();
List<PaymentInstruction> pmtInstrcs = entry.getValue();
PaymentBatchInfo senderInfo = senderGroupSorter.sortCompanyPayments(generationId, senderId, pmtInstrcs);
if (senderInfo.getError() != null) {
anyError[0] = true;
}
return new AbstractMap.SimpleEntry<>(senderId, senderInfo);
})
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
//save SDF03/SDF11
for (var entry : paymentBySender.entrySet()) {
PaymentBatchInfo senderPayments = entry.getValue();
saveSdfAnSendToKafka(senderPayments, generationId);
}
//update PaymentInstruction.transactionStatus
for (var entry : paymentBySender.entrySet()) {
PaymentBatchInfo batch = entry.getValue();
//все PaymentInstruction.transactionStatus в batch с error != null
//уже проапдейтились в методе sortCompanyPayments
if (batch.getError() == null) {
TransactionStatus stat = anyError[0] ? TransactionStatus.notSent : TransactionStatus.sent;
batch.getOrderedPaymentInstructions()
.forEach(paymentInstruction -> {
paymentInstruction.setTransactionStatus(stat.getKey());
paymentImdgs.update(paymentInstruction);
});
}
}
}
private void saveSdfAnSendToKafka(PaymentBatchInfo batch, Long generationId) {
SdfClearingRequest kafkaMessage = new SdfClearingRequest();
kafkaMessage.setGroupId(generationId);
switch (batch.getCategoryD()) {
case I -> {
batch.getOrderedPaymentInstructions()
.map(paymentInstruction -> Sdf03Builder.buildSdf03(paymentInstruction, generationId))
.forEach(sdf03Imdg::insert);
kafkaSender.sendRequestToQueue(Consts.SDF03_PROCESS, kafkaMessage);
}
case B -> {
batch.getOrderedPaymentInstructions()
.map(paymentInstruction -> Sdf11Builder.buildSdf11(paymentInstruction, generationId))
.forEach(sdf11Imdg::insert);
kafkaSender.sendRequestToQueue(Consts.SDF11_PROCESS, kafkaMessage);
}
}
public void paymentUpdateBySdf04(Long sdf04GroupId) {
log.info("adding sdf03/11 from STLD payments task to queue");
executor.execute(() -> paymentUpdater.updatePayments(sdf04GroupId));
}
}

View file

@ -0,0 +1,47 @@
package ru.spcex.clearing.service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.payment.PaymentInstruction;
import ru.clearing.classes.statics.data.sdf.SDf04;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.platform.enumeration.TransactionStatus;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.util.Collection;
import java.util.Map;
@Component
public class PaymentUpdateBySdf04 {
private final Logger log = LoggerFactory.getLogger(getClass());
private final Imdg<PaymentInstruction> paymentImdgs;
private final Imdg<SDf04> sdf04Imdg;
public PaymentUpdateBySdf04(ImdgProvider imdgProvider) {
this.paymentImdgs = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
this.sdf04Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf04, SDf04.class);
}
public void updatePayments(Long sdf04GroupId) {
Collection<SDf04> sDf04s = sdf04Imdg.getCollectionObjectsByFieldValues(Map.of("generationId", sdf04GroupId));
for (SDf04 sDf04 : sDf04s) {
String docnm_ref = sDf04.getDocnm_ref();
long paymentId;
try {
paymentId = Long.parseLong(docnm_ref);
} catch (NumberFormatException e) {
log.warn("sdf04.id={} cannot parse docnm_ref={} as payment id", sDf04.getId(), sDf04.getDocnm_ref());
continue;
}
PaymentInstruction payment = paymentImdgs.getSingleObjectByFieldValues(Map.of("id", paymentId));
if ("OK!".equals(sDf04.getImp_result())) {
payment.setTransactionStatus(TransactionStatus.ok.getKey());
} else {
payment.setTransactionStatus(TransactionStatus.fail.getKey());
}
paymentImdgs.update(payment);
}
}
}

View file

@ -0,0 +1,28 @@
package ru.spcex.clearing.service;
import org.apache.kafka.clients.consumer.Consumer;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Service;
import ru.spcex.clearing.platform.messaging.domain.Consts;
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.Sdf04Request;
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
@Service
public class Sdf04Receiver extends QueueConsumer implements InitializingBean {
private final ClearingService clearingService;
public Sdf04Receiver(Consumer<String, Object> kafkaQueue, ClearingService clearingService) {
super(kafkaQueue);
this.clearingService = clearingService;
}
@Override
public void afterPropertiesSet() {
callback(Sdf04Request.class)
.setConsumer(event -> {
Sdf04Request requestPayload = event.getRequestPayload();
clearingService.paymentUpdateBySdf04(requestPayload.getGroupId());
})
.forDestination(Consts.SDF04_PROCESS, callbacks::put);
init();
}
}

View file

@ -0,0 +1,112 @@
package ru.spcex.clearing.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.payment.PaymentInstruction;
import ru.clearing.classes.statics.data.sdf.SDf03;
import ru.clearing.classes.statics.data.sdf.SDf11;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.Consts;
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.SdfClearingRequest;
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
import ru.spcex.clearing.service.order.PaymentBatchInfo;
import ru.spcex.clearing.service.order.PaymentInstructionSorter;
import ru.spcex.clearing.service.order.Sdf03Builder;
import ru.spcex.clearing.service.order.Sdf11Builder;
import ru.spcex.platform.enumeration.TransactionStatus;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgId;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.util.AbstractMap;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Component
public class SdfCreatorBySTLDPayment {
private final Imdg<PaymentInstruction> paymentImdgs;
private final ImdgId idGenerator;
private final PaymentInstructionSorter senderGroupSorter;
private final Imdg<SDf03> sdf03Imdg;
private final Imdg<SDf11> sdf11Imdg;
private final KafkaSender kafkaSender;
@Autowired
public SdfCreatorBySTLDPayment(ImdgProvider imdgProvider, PaymentInstructionSorter senderGroupSorter, KafkaSender kafkaSender) {
this.paymentImdgs = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
this.sdf03Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf03, SDf03.class);
this.sdf11Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf11, SDf11.class);
this.idGenerator = imdgProvider.getImdgIdGenerator();
this.senderGroupSorter = senderGroupSorter;
this.kafkaSender = kafkaSender;
}
public void createSdfFromPaymentInstructionSTLD() {
final boolean[] anyError = {false};
//generationId для созадаваемых Sdf03/Sdf11
Long generationId = idGenerator.nextId();
//выгружаем PaymentInstructions с нужным статусом
Map<Long, PaymentBatchInfo> paymentBySender = paymentImdgs.getCollectionObjectsByFieldValues(
Map.of("transactionStatus", TransactionStatus.stld.getKey()))
.stream()
//группируем по компаниям (fixme sorted убрать?)
.sorted(Comparator.comparing(PaymentInstruction::getSenderId))
.collect(Collectors.groupingBy(PaymentInstruction::getSenderId))
.entrySet()
.stream()
//результатом работы senderGroupSorter будет Map<senderId -> PaymentBatchInfo>
//PaymentBatchInfo содержит возможную ошибку, при необходимости отсортированные Payment
//тип ClearingMemberCategory
.map(entry -> {
Long senderId = entry.getKey();
List<PaymentInstruction> pmtInstrcs = entry.getValue();
PaymentBatchInfo senderInfo = senderGroupSorter.sortCompanyPayments(generationId, senderId, pmtInstrcs);
if (senderInfo.getError() != null) {
anyError[0] = true;
}
return new AbstractMap.SimpleEntry<>(senderId, senderInfo);
})
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
//save SDF03/SDF11
for (var entry : paymentBySender.entrySet()) {
PaymentBatchInfo senderPayments = entry.getValue();
saveSdfAnSendToKafka(senderPayments, generationId);
}
//update PaymentInstruction.transactionStatus
for (var entry : paymentBySender.entrySet()) {
PaymentBatchInfo batch = entry.getValue();
//все PaymentInstruction.transactionStatus в batch с error != null
//уже проапдейтились в методе sortCompanyPayments
if (batch.getError() == null) {
TransactionStatus stat = anyError[0] ? TransactionStatus.notSent : TransactionStatus.sent;
batch.getOrderedPaymentInstructions()
.forEach(paymentInstruction -> {
paymentInstruction.setTransactionStatus(stat.getKey());
paymentImdgs.update(paymentInstruction);
});
}
}
}
private void saveSdfAnSendToKafka(PaymentBatchInfo batch, Long generationId) {
SdfClearingRequest kafkaMessage = new SdfClearingRequest();
kafkaMessage.setGroupId(generationId);
switch (batch.getCategoryD()) {
case I -> {
batch.getOrderedPaymentInstructions()
.map(paymentInstruction -> Sdf03Builder.buildSdf03(paymentInstruction, generationId))
.forEach(sdf03Imdg::insert);
kafkaSender.sendRequestToQueue(Consts.SDF03_PROCESS, kafkaMessage);
}
case B -> {
batch.getOrderedPaymentInstructions()
.map(paymentInstruction -> Sdf11Builder.buildSdf11(paymentInstruction, generationId))
.forEach(sdf11Imdg::insert);
kafkaSender.sendRequestToQueue(Consts.SDF11_PROCESS, kafkaMessage);
}
}
}
}

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.service;
package ru.spcex.clearing.service.order;
import ru.clearing.classes.statics.data.payment.PaymentInstruction;
import ru.spcex.platform.enumeration.ClearingMemberCategoryD;

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.service;
package ru.spcex.clearing.service.order;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -40,7 +40,7 @@ public class PaymentInstructionSorter {
this.messageResolver = messageResolver;
}
PaymentBatchInfo sortCompanyPayments(Long generationId, Long senderId, List<PaymentInstruction> payments) {
public PaymentBatchInfo sortCompanyPayments(Long generationId, Long senderId, List<PaymentInstruction> payments) {
PaymentBatchInfo batchInfo = new PaymentBatchInfo();
log.info("processing PaymentInstruction's generationId={} senderId={} size={}", generationId, senderId, payments.size());
ClearingMemberCategory category = clrngMmbrImdg.getSingleObjectByFieldValues(Map.of("companyId", senderId));

View file

@ -1,7 +1,8 @@
package ru.spcex.clearing.service;
package ru.spcex.clearing.service.order;
import ru.clearing.classes.statics.data.payment.PaymentInstruction;
import ru.clearing.classes.statics.data.sdf.SDf03;
import ru.spcex.clearing.service.SpecifUtil;
import ru.spcex.platform.enumeration.Sender;
import ru.spcex.platform.utils.time.TimeUtil;

View file

@ -1,7 +1,8 @@
package ru.spcex.clearing.service;
package ru.spcex.clearing.service.order;
import ru.clearing.classes.statics.data.payment.PaymentInstruction;
import ru.clearing.classes.statics.data.sdf.SDf11;
import ru.spcex.clearing.service.SpecifUtil;
import ru.spcex.platform.enumeration.Sender;
import ru.spcex.platform.utils.time.TimeUtil;

View file

@ -3,7 +3,7 @@ package ru.clearing.platform.dictionary;
/**
* Справочник торговых статусов
*
* Dictionary DB table: TRADING_STATUS_DICTIONARY
* Dictionary DB table: DAY_STATUS_DICTIONARY
**/
public class DayStatusDictionary extends AbstractDictionary {
private static final long serialVersionUID = ConstDictionarySerializable.serialVersionUID;

View file

@ -3,7 +3,7 @@ package ru.clearing.platform.dictionary;
/**
* Справочник источников
*
* Dictionary DB table: SOURCE_DICTIONARY
* Dictionary DB table: PARENT_DICTIONARY
**/
public class ParentDictionary extends AbstractDictionary {
private static final long serialVersionUID = ConstDictionarySerializable.serialVersionUID;

View file

@ -28,7 +28,7 @@ public class BankAccountHistoryMapStore extends TemplateEventMapStore<BankAccoun
@Override
public String[] getFields() {
return new String[]{"ID", "EVENT_TIME", "EVENT_USER_ID",
"BANK_ACCOUNT_ID", "ACCOUNT_ID", "BANK_IDENTIFICATION_CODE", "BANK_NAME", "CORRESPONDENT_ACCOUNT", "CORRESPONDENT_ACCOUNT_NAME", "CURRENCY", "DESTINATION", "IBAN", "INTERNATIONAL_TRANSFER_SIGN", "SWIFT_CODE", "TAXPAYER_IDENTIFICATION_NUMBER", "TAX_REGISTRATION_REASON_CODE", "ACCOUNT"
"BANK_ACCOUNT_ID", "ACCOUNT_ID", "BANK_IDENTIFICATION_CODE", "BANK_NAME", "CORRESPONDENT_ACCOUNT", "CORRESPONDENT_ACCOUNT_NAME", "CURRENCY", "DESTINATION", "IBAN", "INTERNATIONAL_TRANSFER_SIGN", "SWIFT_CODE", "TAXPAYER_IDENTIFICATION_NUMBER", "TAX_REGISTRATION_REASON_CODE"
};
}
@ -53,7 +53,6 @@ public class BankAccountHistoryMapStore extends TemplateEventMapStore<BankAccoun
object.getSwiftCode(),
object.getTaxpayerIdentificationNumber(),
object.getTaxRegistrationReasonCode(),
object.getAccount()
};
return args;
}

View file

@ -30,7 +30,7 @@ public class ClearingCalendarMapStore extends TemplateMapStore<ClearingCalendar>
@Override
public String[] getFields() {
return new String[]{
"ID", "CREATED_AT", "UPDATED_AT", "CLEARING_DATE", "COMPANY_ID", "TRADING_STATUS"
"ID", "CREATED_AT", "UPDATED_AT", "CLEARING_DATE", "COMPANY_ID", "DAY_STATUS"
};
}
@ -42,7 +42,7 @@ public class ClearingCalendarMapStore extends TemplateMapStore<ClearingCalendar>
object.setUpdated(getInstantFromTimestamp(resultSet, "UPDATED_AT"));
object.setClearingDate(getLocalDateFromSqlDate(resultSet, "CLEARING_DATE"));
object.setCompanyId(resultSet.getObject("COMPANY_ID", Long.class));
object.setTradingStatus(resultSet.getObject("TRADING_STATUS", String.class));
object.setDayStatus(resultSet.getObject("DAY_STATUS", String.class));
return object;
}
@ -54,7 +54,7 @@ public class ClearingCalendarMapStore extends TemplateMapStore<ClearingCalendar>
TimeUtil.toDateFromInstant(object.getUpdated()),
TimeUtil.toDateFromLocalDate(object.getClearingDate()),
object.getCompanyId(),
object.getTradingStatus()
object.getDayStatus()
};
return args;
}

View file

@ -37,7 +37,8 @@ public class CompanyMapStore extends BusinessObjectMapStore<Company> {
return new String[]{
"id", "company_id", "corporation_sole_type", "country_code", "description",
"professional_sign", "legal_kind", "organization_type", "residence",
"short_name_eng", "full_name_eng",
"short_name_eng", "full_name_eng", "short_name", "full_name", "trading_code",
"clearing_code", "registration_code"
};
}
@ -113,6 +114,11 @@ public class CompanyMapStore extends BusinessObjectMapStore<Company> {
companyInfo.setResidence(rs.getString("RESIDENCE"));
companyInfo.setShortNameEng(rs.getString("SHORT_NAME_ENG"));
companyInfo.setFullNameEng(rs.getString("FULL_NAME_ENG"));
companyInfo.setShortName(rs.getString("SHORT_NAME"));
companyInfo.setFullName(rs.getString("FULL_NAME"));
companyInfo.setTradingCode(rs.getString("TRADING_CODE"));
companyInfo.setClearingCode(rs.getString("CLEARING_CODE"));
companyInfo.setRegistrationCode(rs.getString("REGISTRATION_CODE"));
return companyInfo;
}
);
@ -144,7 +150,12 @@ public class CompanyMapStore extends BusinessObjectMapStore<Company> {
companyInfo.getOrganizationType(),
companyInfo.getResidence(),
companyInfo.getShortNameEng(),
companyInfo.getFullNameEng()
companyInfo.getFullNameEng(),
companyInfo.getShortName(),
companyInfo.getFullName(),
companyInfo.getTradingCode(),
companyInfo.getClearingCode(),
companyInfo.getRegistrationCode()
));
return companyInfoArgs;
}

View file

@ -29,7 +29,7 @@ public class BankAccountMapStore extends TemplateMapStore<BankAccount> {
@Override
public String[] getFields() {
return new String[]{
"ID", "ACCOUNT_ID", "BANK_IDENTIFICATION_CODE", "BANK_NAME", "CORRESPONDENT_ACCOUNT", "CORRESPONDENT_ACCOUNT_NAME", "CURRENCY", "DESTINATION", "IBAN", "INTERNATIONAL_TRANSFER_SIGN", "SWIFT_CODE", "TAXPAYER_IDENTIFICATION_NUMBER", "TAX_REGISTRATION_REASON_CODE", "ACCOUNT"
"ID", "ACCOUNT_ID", "BANK_IDENTIFICATION_CODE", "BANK_NAME", "CORRESPONDENT_ACCOUNT", "CORRESPONDENT_ACCOUNT_NAME", "CURRENCY", "DESTINATION", "IBAN", "INTERNATIONAL_TRANSFER_SIGN", "SWIFT_CODE", "TAXPAYER_IDENTIFICATION_NUMBER", "TAX_REGISTRATION_REASON_CODE"
};
}
@ -49,7 +49,6 @@ public class BankAccountMapStore extends TemplateMapStore<BankAccount> {
object.setSwiftCode(resultSet.getObject("SWIFT_CODE", String.class));
object.setTaxpayerIdentificationNumber(resultSet.getObject("TAXPAYER_IDENTIFICATION_NUMBER", String.class));
object.setTaxRegistrationReasonCode(resultSet.getObject("TAX_REGISTRATION_REASON_CODE", String.class));
object.setAccount(resultSet.getObject("ACCOUNT", String.class));
return object;
}
@ -69,7 +68,6 @@ public class BankAccountMapStore extends TemplateMapStore<BankAccount> {
object.getSwiftCode(),
object.getTaxpayerIdentificationNumber(),
object.getTaxRegistrationReasonCode(),
object.getAccount()
};
return args;
}

View file

@ -17,13 +17,13 @@ import java.util.Map;
@Component
public class MoneyMarketSecurityMapStore extends TemplateMapStore<MoneyMarketSecurity> {
private final String insertToSecurityStatement = makeInsertSql("SECURITY",
getFieldsSecurity(), "id");
public MoneyMarketSecurityMapStore(JdbcTemplate jdbcTemplate) {
super(jdbcTemplate);
}
private final String insertToSecurityStatement = makeInsertSql("SECURITY",
getFieldsSecurity(), "id");
@Override
public String getTableName() {
return "MONEY_MARKET_SECURITY";
@ -41,7 +41,7 @@ public class MoneyMarketSecurityMapStore extends TemplateMapStore<MoneyMarketSec
@Override
public String[] getFields() {
return new String[]{"ID", "SECURITY_ID", "DESCRIPTION", "START_DATE", "END_DATE", "NOMINAL_VALUE", "NOMINAL_CURRENCY"};
return new String[]{"ID", "SECURITY_ID", "DESCRIPTION", "START_DATE", "END_DATE", "NOMINAL_VALUE", "NOMINAL_CURRENCY", "TERM_TYPE"};
}
public String[] getFieldsSecurity() {
@ -70,7 +70,8 @@ public class MoneyMarketSecurityMapStore extends TemplateMapStore<MoneyMarketSec
object.setStartDate(getLocalDateFromSqlDate(resultSet, "START_DATE"));
object.setEndDate(getLocalDateFromSqlDate(resultSet, "END_DATE"));
object.setNominalValue(resultSet.getObject("NOMINAL_VALUE", BigDecimal.class));
object.setNominalCurrency(resultSet.getObject("NOMINAL_CURRENCY", Long.class));
object.setNominalCurrency(resultSet.getObject("NOMINAL_CURRENCY", String.class));
object.setTermType(resultSet.getObject("TERM_TYPE", String.class));
fillBySecurity(object, object.getSecurityId());
return object;
}
@ -79,9 +80,16 @@ public class MoneyMarketSecurityMapStore extends TemplateMapStore<MoneyMarketSec
List<MoneyMarketSecurity> resouts = jdbcTemplate.query(
"SELECT * FROM SECURITY WHERE id = ?", new Object[]{securityId},
(rs, rowNum) -> {
object.setCreated(getInstantFromTimestamp(rs, "CREATED_AT"));
object.setUpdated(getInstantFromTimestamp(rs, "UPDATED_AT"));
object.setInstrumentType(rs.getObject("INSTRUMENT_TYPE", String.class));
object.setIssuerId(rs.getObject("issuer_id", Long.class));
object.setShortName(rs.getObject("short_name", String.class));
object.setFullName(rs.getObject("FULL_NAME", String.class));
object.setShortNameEng(rs.getObject("short_name_eng", String.class));
object.setFullNameEng(rs.getObject("full_name_eng", String.class));
object.setSecuritySymbol(rs.getObject("SECURITY_SYMBOL", String.class));
object.setWorkflowStatus(rs.getObject("workflow_status", String.class));
return object;
}
);
@ -100,6 +108,7 @@ public class MoneyMarketSecurityMapStore extends TemplateMapStore<MoneyMarketSec
TimeUtil.toDateFromLocalDate(moneyMarketSecurity.getEndDate()),
moneyMarketSecurity.getNominalValue(),
moneyMarketSecurity.getNominalCurrency(),
moneyMarketSecurity.getTermType()
};
return args;
}

View file

@ -30,7 +30,7 @@ public class PlannerAllTodayMapStore extends TemplateMapStore<PlannerAllToday> {
@Override
public String[] getFields() {
return new String[]{
"ID", "TASK", "TASK_TIME", "CLEARING_DATE", "MARKET", "TASK_STATUS", "SECURITY_ID", "SOURCE", "ORIG_ID"
"ID", "TASK", "TASK_TIME", "CLEARING_DATE", "MARKET", "TASK_STATUS", "SECURITY_ID", "PARENT", "PARENT_ID"
};
}
@ -44,8 +44,8 @@ public class PlannerAllTodayMapStore extends TemplateMapStore<PlannerAllToday> {
object.setMarket(resultSet.getObject("MARKET", String.class));
object.setTaskStatus(resultSet.getObject("TASK_STATUS", String.class));
object.setSecurityId(resultSet.getObject("SECURITY_ID", Long.class));
object.setSource(resultSet.getObject("SOURCE", String.class));
object.setOrigId(resultSet.getObject("ORIG_ID", Long.class));
object.setParent(resultSet.getObject("PARENT", String.class));
object.setParentId(resultSet.getObject("PARENT_ID", Long.class));
return object;
}
@ -59,8 +59,8 @@ public class PlannerAllTodayMapStore extends TemplateMapStore<PlannerAllToday> {
object.getMarket(),
object.getTaskStatus(),
object.getSecurityId(),
object.getSource(),
object.getOrigId()
object.getParent(),
object.getParentId()
};
return args;
}

View file

@ -36,10 +36,11 @@ public class UserRoleSessionMapStore extends TemplateMapStore<UserRoleSession> {
@Override
public UserRoleSession objectReader(ResultSet resultSet) throws SQLException {
UserRoleSession object = new UserRoleSession();
Long companyId = resultSet.getObject("COMPANY_ID", Long.class);
object.setId(resultSet.getObject("ID", Long.class));
object.setUserId(resultSet.getObject("USER_ID", Long.class));
object.setUserRole(resultSet.getObject("USER_ROLE", String.class));
object.setCompanyId(resultSet.getObject("COMPANY_ID", Long.class));
object.setCompanyId(companyId.equals(0L) ? 1 : companyId);
object.setStatus(resultSet.getObject("STATUS", String.class));
return object;
}

View file

@ -4,4 +4,4 @@ imdg.hazelcast.password=dev-pass
imdg.hazelcast.cluster-members[0]=127.0.0.1
imdg.database.login=clearing
imdg.database.password=Aa111111
imdg.database.url=jdbc:postgresql://10.200.200.133:5432/postgres
imdg.database.url=jdbc:postgresql://10.200.200.133:5432/postgres?currentSchema=clearing_prod

View file

@ -7,6 +7,7 @@ import org.apache.commons.lang3.exception.ExceptionUtils;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Assumptions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -16,12 +17,16 @@ import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.SqlTypeValue;
import org.springframework.jdbc.core.StatementCreatorUtils;
import org.springframework.lang.NonNull;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.company.CompanyHistory;
import ru.clearing.classes.statics.data.profile.CompanyInfo;
import ru.clearing.platform.dictionary.AbstractDictionary;
import ru.clearing.platform.dictionary.CompanySymbolDictionary;
import ru.spcex.clearing.imdg.base.*;
import ru.spcex.clearing.imdg.config.DbTestConnectionConfig;
import ru.spcex.clearing.imdg.config.TestConfiguration;
import ru.spcex.clearing.imdg.structure.BusinessObjectAndBusinessEventForCheckMapStore;
import ru.spcex.clearing.imdg.structure.DictionaryObjectForCheckMapStore;
@ -42,11 +47,11 @@ import static ru.spcex.clearing.imdg.structure.RunnableMapNamesForTesting.busine
import static ru.spcex.clearing.imdg.structure.RunnableMapNamesForTesting.dictionaryObjectForCheckMapStores;
import static ru.spcex.clearing.imdg.utils.DbDataUtils.generatingRandomString;
//@ContextConfiguration(classes = {
// TestConfiguration.class,
// DbTestConnectionConfig.class})
//@ExtendWith(SpringExtension.class)
//@TestPropertySource(properties = "spring.config.location=D:/repo/mfd/clearing/clearing-parent/imdg/src/main/resources")
@ContextConfiguration(classes = {
TestConfiguration.class,
DbTestConnectionConfig.class})
@ExtendWith(SpringExtension.class)
@TestPropertySource(properties = "spring.config.location=D:/repo/mfd/clearing/clearing-parent/imdg/src/main/resources")
public class AllMapStoreTest {
private static final Long ID = 1000000L;
private final Logger log = LoggerFactory.getLogger(this.getClass());
@ -106,7 +111,7 @@ public class AllMapStoreTest {
}
}
// @Test
// @Test
public void checkAllMapStoreCreatedTest() throws SQLException {
Assumptions.assumeTrue(false, "todo удалить если будет не нужна, пока не работает из-за не все mapStore готовы");
//Поиск таблиц которым нужно добавить mapStore и вывод результата в консоль
@ -116,8 +121,8 @@ public class AllMapStoreTest {
ResultSet rs = md.getTables(null, "clearing_tester", "%", new String[]{"TABLE"});
while (rs.next()) {
String tableName = rs.getString("TABLE_NAME");
//сущности для company_info и company_info_history включены соответсвенно в company и company_history
if (tableName.equals("company_info") || tableName.equals("company_info_history")) {
//сущности для company_info и company_info_history включены соответственно в company и company_history, security используется с money_market_security для хранения MoneyMarketSecurity
if (tableName.equalsIgnoreCase("company_info") || tableName.equalsIgnoreCase("company_info_history") || tableName.equalsIgnoreCase("security")) {
continue;
}
nameTables.add(tableName);
@ -152,7 +157,7 @@ public class AllMapStoreTest {
Assertions.assertEquals(0, nameTables.size());
}
// @Test
@Test
public void checkSavingForAllMapStoreTest() {
saveBusinessObjectAndBusinessEventToMaps();
saveDictionaryObjectToMaps();

File diff suppressed because it is too large Load diff

View file

@ -1,9 +1,9 @@
package ru.spcex.clearing.reports_service;
package ru.spcex.clearing.reports;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import ru.spcex.clearing.reports_service.services.ReportsService;
import ru.spcex.clearing.reports.services.ReportsService;
@SpringBootApplication
public class ReportsServiceApplication {

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports_service.config;
package ru.spcex.clearing.reports.config;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.ComponentScan;
@ -6,7 +6,7 @@ import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties
@ComponentScan(basePackages = {"ru.spcex.clearing.reports_service"})
@ComponentScan(basePackages = {"ru.spcex.clearing.reports"})
public class ReportsServiceConfig {
}

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports_service.controller;
package ru.spcex.clearing.reports.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports_service.exceptions;
package ru.spcex.clearing.reports.exceptions;
public class ConfigException extends RuntimeException {
public ConfigException(String msg) { super(msg); }

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports_service.properties;
package ru.spcex.clearing.reports.properties;
import org.springframework.stereotype.Component;

View file

@ -0,0 +1,56 @@
package ru.spcex.clearing.reports.reports;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import ru.spcex.clearing.reports.xml_test.FormattedLocalDateConverter;
import java.time.LocalDate;
/**
* Общая шапка (атрибуты) для всех отчетов
*/
public abstract class AbstractReport {
@XStreamAsAttribute
@XStreamAlias("version")
protected String version;
@XStreamAsAttribute
@XStreamAlias("code")
protected String code;
@XStreamAsAttribute
@XStreamAlias("name")
protected String name;
@XStreamAsAttribute
@XStreamAlias("startDate")
@XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"})
protected LocalDate startDate;
@XStreamAsAttribute
@XStreamAlias("endDate")
@XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"})
protected LocalDate endDate;
@XStreamAsAttribute
@XStreamAlias("destination")
protected String destination;
public AbstractReport(String version,
String code,
String name,
LocalDate startDate,
LocalDate endDate,
String destination) {
this.version = version;
this.code = code;
this.name = name;
this.startDate = startDate;
this.endDate = endDate;
this.destination = destination;
}
}

View file

@ -0,0 +1,24 @@
package ru.spcex.clearing.reports.reports;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import java.time.LocalDate;
public abstract class ReportWithClearingStatus extends AbstractReport {
@XStreamAsAttribute
@XStreamAlias("clearingStatus")
protected String clearingStatus;
public ReportWithClearingStatus(String version,
String code,
String name,
LocalDate startDate,
LocalDate endDate,
String destination,
String clearingStatus) {
super(version, code, name, startDate, endDate, destination);
this.clearingStatus = clearingStatus;
}
}

View file

@ -0,0 +1,14 @@
package ru.spcex.clearing.reports.reports;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
public abstract class WithCompanyClearingCode {
@XStreamAsAttribute
@XStreamAlias("company_clearingCode")
protected String companyClearingCode;
public WithCompanyClearingCode(String companyClearingCode) {
this.companyClearingCode = companyClearingCode;
}
}

View file

@ -1,33 +1,41 @@
package ru.spcex.clearing.reports_service.reports.bt_17_1;
package ru.spcex.clearing.reports.reports.bt_17_1;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports_service.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.ReportWithClearingStatus;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
@XStreamAlias("report")
public class ReportBR_0420315_P1 extends AbstractReport {
@XStreamAlias("clearedLiabilities")
public class ReportBR_0420315_P1 extends ReportWithClearingStatus {
@XStreamAsAttribute
@XStreamAlias("clearingMemberCategory")
private String clearingMemberCategory;
@XStreamAlias("rows")
private final List<Info_0420315_P1> rows = new ArrayList<>();
public ReportBR_0420315_P1(LocalDate startDate,
LocalDate endDate) {
LocalDate endDate,
String clearingMemberCategory,
String clearingStatus) {
super("0.0.1",
"0420315",
"Сведения об исполненных обязательствах, допущенных к клирингу, за отчетный период",
"Сведения об исполненных обязательствах, допущенных к клирингу, за отчетный период, часть 1",
startDate,
endDate);
endDate,
"BR",
clearingStatus);
this.clearingMemberCategory = clearingMemberCategory;
}
public List<Info_0420315_P1> getRows() {
return rows;
}
@XStreamAlias("row")
public static class Info_0420315_P1 {
@XStreamAlias("company_id")

View file

@ -1,12 +1,12 @@
package ru.spcex.clearing.reports_service.reports.bt_17_1;
package ru.spcex.clearing.reports.reports.bt_17_1;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports_service.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.AbstractReport;
import java.time.LocalDate;
@XStreamAlias("report")
@XStreamAlias("clearedLiabilitiesTotal")
public class ReportBR_0420315_P2 extends AbstractReport {
@XStreamAlias("total")
@ -15,9 +15,10 @@ public class ReportBR_0420315_P2 extends AbstractReport {
public ReportBR_0420315_P2(LocalDate startDate, LocalDate endDate, String contractQty, String liabilitiesAmount) {
super("0.0.1",
"0420315",
"Сведения об исполненных обязательствах, допущенных к клирингу, за отчетный период",
"Сведения об исполненных обязательствах, допущенных к клирингу, за отчетный период, часть 2",
startDate,
endDate);
endDate,
"BR");
total = new Info_0420315_P2(contractQty, liabilitiesAmount);
}

View file

@ -1,35 +1,35 @@
package ru.spcex.clearing.reports_service.reports.bt_17_2;
package ru.spcex.clearing.reports.reports.bt_17_2;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports_service.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.WithCompanyClearingCode;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
@XStreamAlias("report")
@XStreamAlias("clearingServiceStatus")
public class ReportBR_0420317 extends AbstractReport {
@XStreamAlias("rows")
private final List<Info_0420317> rows = new ArrayList<>();
public ReportBR_0420317(LocalDate startDate, LocalDate endDate) {
public ReportBR_0420317(LocalDate startDate,
LocalDate endDate) {
super("0.0.1",
"0420317",
"Сведения о предоставлении, прекращении, приостановке," +
" возобновлении допуска к клиринговому обслуживанию",
startDate,
endDate);
endDate, "BR");
}
public List<Info_0420317> getRows() {
return rows;
}
@XStreamAlias("row")
public static class Info_0420317 {
public static class Info_0420317 extends WithCompanyClearingCode {
@XStreamAsAttribute
@XStreamAlias("relation_supplierId")
private String relationSupplierId;
@ -62,7 +62,8 @@ public class ReportBR_0420317 extends AbstractReport {
@XStreamAlias("relation_comment")
private String relationComment;
public Info_0420317(String relationSupplierId,
public Info_0420317(String companyClearingCode,
String relationSupplierId,
String relationServiceId,
String relationServiceStatus,
String relationUpdatedAt,
@ -70,6 +71,7 @@ public class ReportBR_0420317 extends AbstractReport {
String companySymbolCode,
String companyInfoCountryCode,
String relationComment) {
super(companyClearingCode);
this.relationSupplierId = relationSupplierId;
this.relationServiceId = relationServiceId;
this.relationServiceStatus = relationServiceStatus;

View file

@ -1,25 +1,27 @@
package ru.spcex.clearing.reports_service.reports.bt_17_3;
package ru.spcex.clearing.reports.reports.bt_17_3;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports_service.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.ReportWithClearingStatus;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
@XStreamAlias("report")
public class ReportBR_0420318 extends AbstractReport {
@XStreamAlias("unfundedLiabilities")
public class ReportBR_0420318 extends ReportWithClearingStatus {
@XStreamAlias("rows")
private final List<Info_0420318> rows = new ArrayList<>();
public ReportBR_0420318(LocalDate startDate, LocalDate endDate) {
super("0.0.3",
public ReportBR_0420318(LocalDate startDate, LocalDate endDate, String clearingStatus) {
super("0.0.1",
"0420318",
"Сведения о неисполненных обязательствах",
startDate,
endDate);
endDate,
"BR",
clearingStatus);
}
public List<Info_0420318> getRows() {

View file

@ -1,25 +1,28 @@
package ru.spcex.clearing.reports_service.reports.bt_17_4;
package ru.spcex.clearing.reports.reports.bt_17_4;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports_service.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.ReportWithClearingStatus;
import ru.spcex.clearing.reports.reports.WithCompanyClearingCode;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
@XStreamAlias("report")
public class ReportBR_0420314_P1 extends AbstractReport {
@XStreamAlias("accountTransactionLiabilities")
public class ReportBR_0420314_P1 extends ReportWithClearingStatus {
@XStreamAlias("rows")
private final List<Info_0420314_P1> rows = new ArrayList<>();
public ReportBR_0420314_P1(LocalDate startDate, LocalDate endDate) {
public ReportBR_0420314_P1(LocalDate startDate, LocalDate endDate, String clearingStatus) {
super("0.0.1",
"0420314",
"Сведения об УК и операциях, проведенных по торговым счетам",
"Сведения об УК и операциях, проведенных по торговым счетам, часть 1",
startDate,
endDate);
endDate,
"BR",
clearingStatus);
}
public List<Info_0420314_P1> getRows() {
@ -28,7 +31,7 @@ public class ReportBR_0420314_P1 extends AbstractReport {
@XStreamAlias("partOne")
public static class Info_0420314_P1 {
public static class Info_0420314_P1 extends WithCompanyClearingCode {
@XStreamAsAttribute
@XStreamAlias("paymentInstruction_senderId")
private String paymentInstructionSenderId;
@ -61,7 +64,8 @@ public class ReportBR_0420314_P1 extends AbstractReport {
@XStreamAlias("liabilitiesClaimsAssets_liabilitiesQuantity")
private String liabilitiesClaimsAssetsLiabilitiesQuantity;
public Info_0420314_P1(String paymentInstructionSenderId,
public Info_0420314_P1(String companyClearingCode,
String paymentInstructionSenderId,
String profileDocumentId,
String companyFullName,
String companySymbolCode,
@ -69,6 +73,7 @@ public class ReportBR_0420314_P1 extends AbstractReport {
String clearingMemberCategoryClearingMemberCategory,
String profileDocumentDocumentTypeAndValidFromDate,
String liabilitiesClaimsAssetsLiabilitiesQuantity) {
super(companyClearingCode);
this.paymentInstructionSenderId = paymentInstructionSenderId;
this.profileDocumentId = profileDocumentId;
this.companyFullName = companyFullName;

View file

@ -1,25 +1,31 @@
package ru.spcex.clearing.reports_service.reports.bt_17_4;
package ru.spcex.clearing.reports.reports.bt_17_4;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports_service.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.WithCompanyClearingCode;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
@XStreamAlias("report")
@XStreamAlias("accountTransactionTurnover")
public class ReportBR_0420314_P2 extends AbstractReport {
@XStreamAsAttribute
@XStreamAlias("transactionStatus")
protected String transactionStatus;
@XStreamAlias("rows")
private final List<Info_0420314_P2> rows = new ArrayList<>();
public ReportBR_0420314_P2(LocalDate startDate, LocalDate endDate) {
public ReportBR_0420314_P2(LocalDate startDate, LocalDate endDate, String transactionStatus) {
super("0.0.1",
"0420314",
"Сведения об УК и операциях, проведенных по торговым счетам",
"Сведения об УК и операциях, проведенных по торговым счетам, часть 2",
startDate,
endDate);
endDate, "BR");
this.transactionStatus = transactionStatus;
}
public List<Info_0420314_P2> getRows() {
@ -28,7 +34,7 @@ public class ReportBR_0420314_P2 extends AbstractReport {
@XStreamAlias("partTwo")
public static class Info_0420314_P2 {
public static class Info_0420314_P2 extends WithCompanyClearingCode {
@XStreamAsAttribute
@XStreamAlias("paymentInstruction_senderId")
private String paymentInstructionSenderId;
@ -53,12 +59,14 @@ public class ReportBR_0420314_P2 extends AbstractReport {
@XStreamAlias("accountBalance_closeBalanceAmount")
private String accountBalanceCloseBalanceAmount;
public Info_0420314_P2(String paymentInstructionSenderId,
public Info_0420314_P2(String companyClearingCode,
String paymentInstructionSenderId,
String profileDocumentId,
String accountBalanceOpenBalanceAmount,
String paymentInstructionCreditLegAmount,
String paymentInstructionDebitLegAmount,
String accountBalanceCloseBalanceAmount) {
super(companyClearingCode);
this.paymentInstructionSenderId = paymentInstructionSenderId;
this.profileDocumentId = profileDocumentId;
this.accountBalanceOpenBalanceAmount = accountBalanceOpenBalanceAmount;

View file

@ -1,31 +1,34 @@
package ru.spcex.clearing.reports_service.reports.bt_17_5;
package ru.spcex.clearing.reports.reports.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports_service.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.WithCompanyClearingCode;
import java.time.LocalDate;
@XStreamAlias("report")
@XStreamAlias("clearingCoverage1")
public class ReportBR_0420312_P1 extends AbstractReport {
@XStreamAlias("partOne")
private final Info_0420312_P1 partOne;
@XStreamAlias("part_1")
private final Info_0420312_P1 part_1;
public ReportBR_0420312_P1(LocalDate startDate,
LocalDate endDate,
String companyClearingCode,
String liabilitiesClaimsAssetsCompanyId,
String liabilitiesClaimsAssetsFullName,
String companySymbolCode,
String companySymbolValue,
String companyInfoCountryCode,
String clearingMemberCategoryClearingMemberCategory) {
super("0.0.5",
super("0.0.1",
"0420312",
"Сведения о клиринговом обеспечении",
"Сведения о клиринговом обеспечении, часть 1",
startDate,
endDate);
partOne = new Info_0420312_P1(liabilitiesClaimsAssetsCompanyId,
endDate, "BR");
part_1 = new Info_0420312_P1(companyClearingCode,
liabilitiesClaimsAssetsCompanyId,
liabilitiesClaimsAssetsFullName,
companySymbolCode,
companySymbolValue,
@ -33,7 +36,7 @@ public class ReportBR_0420312_P1 extends AbstractReport {
clearingMemberCategoryClearingMemberCategory);
}
public static class Info_0420312_P1 {
public static class Info_0420312_P1 extends WithCompanyClearingCode {
@XStreamAsAttribute
@XStreamAlias("liabilitiesClaimsAssets_companyId")
private String liabilitiesClaimsAssetsCompanyId;
@ -59,12 +62,14 @@ public class ReportBR_0420312_P1 extends AbstractReport {
private String clearingMemberCategoryClearingMemberCategory;
public Info_0420312_P1(String liabilitiesClaimsAssetsCompanyId,
public Info_0420312_P1(String companyClearingCode,
String liabilitiesClaimsAssetsCompanyId,
String liabilitiesClaimsAssetsFullName,
String companySymbolCode,
String companySymbolValue,
String companyInfoCountryCode,
String clearingMemberCategoryClearingMemberCategory) {
super(companyClearingCode);
this.liabilitiesClaimsAssetsCompanyId = liabilitiesClaimsAssetsCompanyId;
this.liabilitiesClaimsAssetsFullName = liabilitiesClaimsAssetsFullName;
this.companySymbolCode = companySymbolCode;

View file

@ -0,0 +1,35 @@
package ru.spcex.clearing.reports.reports.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.reports.AbstractReport;
import java.time.LocalDate;
@XStreamAlias("report")
public class ReportBR_0420312_P10 extends AbstractReport {
@XStreamAlias("part_10")
private final Info_0420312_P10 part_10;
public ReportBR_0420312_P10(LocalDate startDate,
LocalDate endDate,
String liabilitiesAmount) {
super("0.0.5",
"0420312",
"Сведения о клиринговом обеспечении, часть 10",
startDate,
endDate, "BR");
part_10 = new Info_0420312_P10(liabilitiesAmount);
}
public static class Info_0420312_P10 {
@XStreamAsAttribute
@XStreamAlias("liabilities_amount")
private String liabilitiesAmount;
public Info_0420312_P10(String liabilitiesAmount) {
this.liabilitiesAmount = liabilitiesAmount;
}
}
}

View file

@ -1,16 +1,16 @@
package ru.spcex.clearing.reports_service.reports.bt_17_5;
package ru.spcex.clearing.reports.reports.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports_service.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.AbstractReport;
import java.time.LocalDate;
@XStreamAlias("report")
public class ReportBR_0420312_P11 extends AbstractReport {
@XStreamAlias("partEleven")
private final Info_0420312_P11 partEleven;
@XStreamAlias("part_11")
private final Info_0420312_P11 part_11;
public ReportBR_0420312_P11(LocalDate startDate,
LocalDate endDate,
@ -19,8 +19,8 @@ public class ReportBR_0420312_P11 extends AbstractReport {
"0420312",
"Сведения о клиринговом обеспечении",
startDate,
endDate);
partEleven = new Info_0420312_P11(liabilitiesAmount);
endDate, "BR");
part_11 = new Info_0420312_P11(liabilitiesAmount);
}
public static class Info_0420312_P11 {

View file

@ -1,27 +1,27 @@
package ru.spcex.clearing.reports_service.reports.bt_17_5;
package ru.spcex.clearing.reports.reports.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports_service.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.AbstractReport;
import java.time.LocalDate;
@XStreamAlias("report")
@XStreamAlias("clearingCoverage2")
public class ReportBR_0420312_P2 extends AbstractReport {
@XStreamAlias("partTwo")
private final Info_0420312_P2 partTwo;
@XStreamAlias("part_2")
private final Info_0420312_P2 part_2;
public ReportBR_0420312_P2(LocalDate startDate,
LocalDate endDate,
String liabilitiesClaimsAssetsCompanyId,
String liabilitiesClaimsAssetsLiabilities) {
super("0.0.5",
super("0.0.1",
"0420312",
"Сведения о клиринговом обеспечении",
"Сведения о клиринговом обеспечении, часть 2",
startDate,
endDate);
partTwo = new Info_0420312_P2(liabilitiesClaimsAssetsCompanyId, liabilitiesClaimsAssetsLiabilities);
endDate, "BR");
part_2 = new Info_0420312_P2(liabilitiesClaimsAssetsCompanyId, liabilitiesClaimsAssetsLiabilities);
}
public static class Info_0420312_P2 {

View file

@ -1,16 +1,16 @@
package ru.spcex.clearing.reports_service.reports.bt_17_5;
package ru.spcex.clearing.reports.reports.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports_service.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.AbstractReport;
import java.time.LocalDate;
@XStreamAlias("report")
@XStreamAlias("clearingCoverage3")
public class ReportBR_0420312_P3 extends AbstractReport {
@XStreamAlias("partThree")
private final Info_0420312_P3 partThree;
@XStreamAlias("part_3")
private final Info_0420312_P3 part_3;
public ReportBR_0420312_P3(LocalDate startDate,
LocalDate endDate,
@ -18,10 +18,10 @@ public class ReportBR_0420312_P3 extends AbstractReport {
String liabilitiesClaimsAssetsLiabilities) {
super("0.0.5",
"0420312",
"Сведения о клиринговом обеспечении",
"Сведения о клиринговом обеспечении, часть 3",
startDate,
endDate);
partThree = new Info_0420312_P3(liabilitiesClaimsAssetsCompanyId, liabilitiesClaimsAssetsLiabilities);
endDate, "BR");
part_3 = new Info_0420312_P3(liabilitiesClaimsAssetsCompanyId, liabilitiesClaimsAssetsLiabilities);
}
public static class Info_0420312_P3 {

View file

@ -1,26 +1,26 @@
package ru.spcex.clearing.reports_service.reports.bt_17_5;
package ru.spcex.clearing.reports.reports.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports_service.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.AbstractReport;
import java.time.LocalDate;
@XStreamAlias("report")
@XStreamAlias("clearingCoverage4")
public class ReportBR_0420312_P4 extends AbstractReport {
@XStreamAlias("partFour")
private final Info_0420312_P4 partFour;
@XStreamAlias("part_4")
private final Info_0420312_P4 part_4;
public ReportBR_0420312_P4(LocalDate startDate,
LocalDate endDate,
String liabilitiesAmount) {
super("0.0.5",
"0420312",
"Сведения о клиринговом обеспечении",
"Сведения о клиринговом обеспечении, часть 4",
startDate,
endDate);
partFour = new Info_0420312_P4(liabilitiesAmount);
endDate, "BR");
part_4 = new Info_0420312_P4(liabilitiesAmount);
}
public static class Info_0420312_P4 {

View file

@ -1,26 +1,26 @@
package ru.spcex.clearing.reports_service.reports.bt_17_5;
package ru.spcex.clearing.reports.reports.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports_service.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.AbstractReport;
import java.time.LocalDate;
@XStreamAlias("report")
@XStreamAlias("clearingCoverage5")
public class ReportBR_0420312_P5 extends AbstractReport {
@XStreamAlias("partFive")
private final Info_0420312_P5 partFive;
@XStreamAlias("part_5")
private final Info_0420312_P5 part_5;
public ReportBR_0420312_P5(LocalDate startDate,
LocalDate endDate,
String liabilitiesAmount) {
super("0.0.5",
"0420312",
"Сведения о клиринговом обеспечении",
"Сведения о клиринговом обеспечении, часть 5",
startDate,
endDate);
partFive = new Info_0420312_P5(liabilitiesAmount);
endDate, "BR");
part_5 = new Info_0420312_P5(liabilitiesAmount);
}
public static class Info_0420312_P5 {

View file

@ -1,26 +1,26 @@
package ru.spcex.clearing.reports_service.reports.bt_17_5;
package ru.spcex.clearing.reports.reports.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports_service.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.AbstractReport;
import java.time.LocalDate;
@XStreamAlias("report")
@XStreamAlias("clearingCoverage6")
public class ReportBR_0420312_P6 extends AbstractReport {
@XStreamAlias("partSix")
private final Info_0420312_P6 partSix;
@XStreamAlias("part_6")
private final Info_0420312_P6 part_6;
public ReportBR_0420312_P6(LocalDate startDate,
LocalDate endDate,
String liabilitiesAmount) {
super("0.0.5",
"0420312",
"Сведения о клиринговом обеспечении",
"Сведения о клиринговом обеспечении, часть 6",
startDate,
endDate);
partSix = new Info_0420312_P6(liabilitiesAmount);
endDate, "BR");
part_6 = new Info_0420312_P6(liabilitiesAmount);
}
public static class Info_0420312_P6 {

View file

@ -1,34 +1,34 @@
package ru.spcex.clearing.reports_service.reports.bt_17_5;
package ru.spcex.clearing.reports.reports.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports_service.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.AbstractReport;
import java.time.LocalDate;
@XStreamAlias("report")
public class ReportBR_0420312_P8 extends AbstractReport {
@XStreamAlias("clearingCoverage7")
public class ReportBR_0420312_P7 extends AbstractReport {
@XStreamAlias("partEight")
private final Info_0420312_P8 partEight;
@XStreamAlias("part_7")
private final Info_0420312_P7 part_7;
public ReportBR_0420312_P8(LocalDate startDate,
public ReportBR_0420312_P7(LocalDate startDate,
LocalDate endDate,
String liabilitiesAmount) {
super("0.0.5",
"0420312",
"Сведения о клиринговом обеспечении",
"Сведения о клиринговом обеспечении, часть 7",
startDate,
endDate);
partEight = new Info_0420312_P8(liabilitiesAmount);
endDate, "BR");
part_7 = new Info_0420312_P7(liabilitiesAmount);
}
public static class Info_0420312_P8 {
public static class Info_0420312_P7 {
@XStreamAsAttribute
@XStreamAlias("liabilities_amount")
private String liabilitiesAmount;
public Info_0420312_P8(String liabilitiesAmount) {
public Info_0420312_P7(String liabilitiesAmount) {
this.liabilitiesAmount = liabilitiesAmount;
}
}

View file

@ -1,18 +1,18 @@
package ru.spcex.clearing.reports_service.reports.bt_17_5;
package ru.spcex.clearing.reports.reports.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports_service.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.AbstractReport;
import java.time.LocalDate;
@XStreamAlias("report")
public class ReportBR_0420312_P9 extends AbstractReport {
@XStreamAlias("clearingCoverage8")
public class ReportBR_0420312_P8 extends AbstractReport {
@XStreamAlias("partNine")
private final Info_0420312_P9 partNine;
@XStreamAlias("part_8")
private final Info_0420312_P8 part_8;
public ReportBR_0420312_P9(LocalDate startDate,
public ReportBR_0420312_P8(LocalDate startDate,
LocalDate endDate,
String currencyId,
String liabilitiesClaimsAssetsCompanyId,
@ -23,10 +23,10 @@ public class ReportBR_0420312_P9 extends AbstractReport {
String clearingMemberCategoryClearingMemberCategory) {
super("0.0.5",
"0420312",
"Сведения о клиринговом обеспечении",
"Сведения о клиринговом обеспечении, часть 8",
startDate,
endDate);
partNine = new Info_0420312_P9(currencyId,
endDate, "BR");
part_8 = new Info_0420312_P8(currencyId,
liabilitiesClaimsAssetsCompanyId,
liabilitiesClaimsAssetsFullName,
companySymbolCode,
@ -35,7 +35,7 @@ public class ReportBR_0420312_P9 extends AbstractReport {
clearingMemberCategoryClearingMemberCategory);
}
public static class Info_0420312_P9 {
public static class Info_0420312_P8 {
@XStreamAsAttribute
@XStreamAlias("currency_id")
private String currencyId;
@ -64,8 +64,7 @@ public class ReportBR_0420312_P9 extends AbstractReport {
@XStreamAlias("clearingMemberCategory_clearingMemberCategory")
private String clearingMemberCategoryClearingMemberCategory;
public Info_0420312_P9(String currencyId,
public Info_0420312_P8(String currencyId,
String liabilitiesClaimsAssetsCompanyId,
String liabilitiesClaimsAssetsFullName,
String companySymbolCode,

View file

@ -1,35 +1,36 @@
package ru.spcex.clearing.reports_service.reports.bt_17_5;
package ru.spcex.clearing.reports.reports.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports_service.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.AbstractReport;
import java.time.LocalDate;
@XStreamAlias("report")
public class ReportBR_0420312_P10 extends AbstractReport {
public class ReportBR_0420312_P9 extends AbstractReport {
@XStreamAlias("partTen")
private final Info_0420312_P10 partTen;
@XStreamAlias("part_9")
private final Info_0420312_P9 part_9;
public ReportBR_0420312_P10(LocalDate startDate,
LocalDate endDate,
String currencyId,
String liabilitiesClaimsAssetsCompanyId,
String liabilitiesClaimsMoneyCurrencyCode,
String liabilitiesClaimsAssetsLiabilities) {
public ReportBR_0420312_P9(LocalDate startDate,
LocalDate endDate,
String currencyId,
String liabilitiesClaimsAssetsCompanyId,
String liabilitiesClaimsMoneyCurrencyCode,
String liabilitiesClaimsAssetsLiabilities) {
super("0.0.5",
"0420312",
"Сведения о клиринговом обеспечении",
"Сведения о клиринговом обеспечении, часть 9",
startDate,
endDate);
partTen = new Info_0420312_P10(currencyId,
endDate,
"BR");
part_9 = new Info_0420312_P9(currencyId,
liabilitiesClaimsAssetsCompanyId,
liabilitiesClaimsMoneyCurrencyCode,
liabilitiesClaimsAssetsLiabilities);
}
public static class Info_0420312_P10 {
public static class Info_0420312_P9 {
@XStreamAsAttribute
@XStreamAlias("currency_id")
private String currencyId;
@ -46,10 +47,10 @@ public class ReportBR_0420312_P10 extends AbstractReport {
@XStreamAlias("liabilitiesClaimsAssets_liabilities")
private String liabilitiesClaimsAssetsLiabilities;
public Info_0420312_P10(String currencyId,
String liabilitiesClaimsAssetsCompanyId,
String liabilitiesClaimsMoneyCurrencyCode,
String liabilitiesClaimsAssetsLiabilities) {
public Info_0420312_P9(String currencyId,
String liabilitiesClaimsAssetsCompanyId,
String liabilitiesClaimsMoneyCurrencyCode,
String liabilitiesClaimsAssetsLiabilities) {
this.currencyId = currencyId;
this.liabilitiesClaimsAssetsCompanyId = liabilitiesClaimsAssetsCompanyId;
this.liabilitiesClaimsMoneyCurrencyCode = liabilitiesClaimsMoneyCurrencyCode;

View file

@ -1,15 +1,15 @@
package ru.spcex.clearing.reports_service.services;
package ru.spcex.clearing.reports.services;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.naming.NoNameCoder;
import com.thoughtworks.xstream.io.xml.XppDriver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.spcex.clearing.reports_service.reports.bt_17_1.ReportBR_0420315_P1;
import ru.spcex.clearing.reports_service.reports.bt_17_1.ReportBR_0420315_P2;
import ru.spcex.clearing.reports_service.reports.bt_17_2.ReportBR_0420317;
import ru.spcex.clearing.reports_service.reports.bt_17_3.ReportBR_0420318;
import ru.spcex.clearing.reports_service.reports.bt_17_4.ReportBR_0420314_P1;
import ru.spcex.clearing.reports.reports.bt_17_1.ReportBR_0420315_P1;
import ru.spcex.clearing.reports.reports.bt_17_1.ReportBR_0420315_P2;
import ru.spcex.clearing.reports.reports.bt_17_2.ReportBR_0420317;
import ru.spcex.clearing.reports.reports.bt_17_3.ReportBR_0420318;
import ru.spcex.clearing.reports.reports.bt_17_4.ReportBR_0420314_P1;
import java.time.LocalDate;
@ -25,7 +25,10 @@ public class ReportsService {
xStream.processAnnotations(ReportBR_0420318.class);
xStream.processAnnotations(ReportBR_0420314_P1.class);
ReportBR_0420315_P1 reportBR_0420315_p1 = new ReportBR_0420315_P1(LocalDate.now(), LocalDate.now());
ReportBR_0420315_P1 reportBR_0420315_p1 = new ReportBR_0420315_P1(LocalDate.now(),
LocalDate.now(),
"clearingMemberCategory",
"clearingStatus");
ReportBR_0420315_P1.Info_0420315_P1 info_0420315_p1 = new ReportBR_0420315_P1.Info_0420315_P1("companyId",
"companyFullName",
"listingMarket",
@ -41,7 +44,8 @@ public class ReportsService {
log.info("ReportBR_0420315_P2:\n{}\n", xStream.toXML(reportBR_0420315_p2));
ReportBR_0420317 reportBR_0420317 = new ReportBR_0420317(LocalDate.now(), LocalDate.now());
ReportBR_0420317.Info_0420317 info_0420317 = new ReportBR_0420317.Info_0420317("relationSupplierId",
ReportBR_0420317.Info_0420317 info_0420317 = new ReportBR_0420317.Info_0420317("companyClearingCode",
"relationSupplierId",
"relationServiceId",
"relationServiceStatus",
"relationUpdatedAt",
@ -52,7 +56,7 @@ public class ReportsService {
reportBR_0420317.getRows().add(info_0420317);
log.info("ReportBR_0420317:\n{}\n", xStream.toXML(reportBR_0420317));
ReportBR_0420318 reportBR_0420318 = new ReportBR_0420318(LocalDate.now(), LocalDate.now());
ReportBR_0420318 reportBR_0420318 = new ReportBR_0420318(LocalDate.now(), LocalDate.now(), "clearingStatus");
ReportBR_0420318.Info_0420318 info_0420318 = new ReportBR_0420318.Info_0420318(
"liabilitiesClaimsAssetsFullName",
"companySymbolsCode",
@ -70,8 +74,8 @@ public class ReportsService {
reportBR_0420318.getRows().add(info_0420318);
log.info("ReportBR_0420318:\n{}\n", xStream.toXML(reportBR_0420318));
ReportBR_0420314_P1 reportBR_0420314P1 = new ReportBR_0420314_P1(LocalDate.now(), LocalDate.now());
ReportBR_0420314_P1.Info_0420314_P1 info_0420314P1 = new ReportBR_0420314_P1.Info_0420314_P1(
ReportBR_0420314_P1 reportBR_0420314P1 = new ReportBR_0420314_P1(LocalDate.now(), LocalDate.now(), "clearingStatus");
ReportBR_0420314_P1.Info_0420314_P1 info_0420314P1 = new ReportBR_0420314_P1.Info_0420314_P1("companyClearingCode",
"paymentInstructionSenderId",
"profileDocumentId",
"companyFullName",

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports_service.xml_test;
package ru.spcex.clearing.reports.xml_test;
import com.thoughtworks.xstream.annotations.XStreamAlias;

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports_service.xml_test;
package ru.spcex.clearing.reports.xml_test;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports_service.xml_test;
package ru.spcex.clearing.reports.xml_test;
import com.thoughtworks.xstream.converters.basic.AbstractSingleValueConverter;

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports_service.xml_test;
package ru.spcex.clearing.reports.xml_test;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamConverter;

View file

@ -1,85 +0,0 @@
package ru.spcex.clearing.reports_service.reports;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import ru.spcex.clearing.reports_service.xml_test.FormattedLocalDateConverter;
import java.time.LocalDate;
/**
* Общая шапка (атрибуты) для всех отчетов
*/
public class AbstractReport {
@XStreamAsAttribute
@XStreamAlias("version")
private String version;
@XStreamAsAttribute
@XStreamAlias("code")
private String code;
@XStreamAsAttribute
@XStreamAlias("name")
private String name;
@XStreamAsAttribute
@XStreamAlias("startDate")
@XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"})
private LocalDate startDate;
@XStreamAsAttribute
@XStreamAlias("endDate")
@XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"})
private LocalDate endDate;
public AbstractReport(String version, String code, String name, LocalDate startDate, LocalDate endDate) {
this.version = version;
this.code = code;
this.name = name;
this.startDate = startDate;
this.endDate = endDate;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public LocalDate getStartDate() {
return startDate;
}
public void setStartDate(LocalDate startDate) {
this.startDate = startDate;
}
public LocalDate getEndDate() {
return endDate;
}
public void setEndDate(LocalDate endDate) {
this.endDate = endDate;
}
}

View file

@ -50,7 +50,7 @@ public class ClearingCalendarService extends QueueConsumer implements Initializi
ClearingCalendar clearingCalendar = new ClearingCalendar();
clearingCalendar.setClearingDate(req.getClearingDate());
clearingCalendar.setCompanyId(req.getCompanyId());
clearingCalendar.setTradingStatus(req.getTradingStatus());
clearingCalendar.setDayStatus(req.getDayStatus());
clearingCalendarMap.insert(clearingCalendar);
log.debug("successfully processed, new id {}", clearingCalendar.getId());
}
@ -61,7 +61,7 @@ public class ClearingCalendarService extends QueueConsumer implements Initializi
ClearingCalendar clearingCalendar = clearingCalendarMap.getSingleObjectByID(req.getId());
clearingCalendar.setClearingDate(req.getClearingDate());
clearingCalendar.setCompanyId(req.getCompanyId());
clearingCalendar.setTradingStatus(req.getTradingStatus());
clearingCalendar.setDayStatus(req.getDayStatus());
clearingCalendarMap.update(clearingCalendar);
log.debug("successfully processed, new id {}", clearingCalendar.getId());
}

View file

@ -82,7 +82,7 @@ public class MoneyMarketSecurityService extends QueueConsumer implements Initial
mms.setStartDate(req.getStartDate());
mms.setEndDate(req.getEndDate());
mms.setNominalValue(req.getNominalValue() != null ? BigDecimal.valueOf(req.getNominalValue()) : null);
mms.setNominalCurrency(req.getNominalCurrencyId());
mms.setNominalCurrency(req.getNominalCurrency());
mms.setInstrumentType(req.getInstrumentType());
mms.setFullName(req.getFullName());
mms.setSecuritySymbol(req.getSecuritySymbol());
@ -114,7 +114,7 @@ public class MoneyMarketSecurityService extends QueueConsumer implements Initial
mms.setUpdated(Instant.now());
mms.setEndDate(req.getEndDate());
mms.setNominalValue(req.getNominalValue() != null ? BigDecimal.valueOf(req.getNominalValue()) : null);
mms.setNominalCurrency(req.getNominalCurrencyId());
mms.setNominalCurrency(req.getNominalCurrency());
mms.setInstrumentType(req.getInstrumentType());
mms.setFullName(req.getFullName());
moneyMarketSecurityMap.update(mms);

View file

@ -10,6 +10,7 @@ import java.time.LocalDate;
class MoneyMarketSecurityFactory {
private String nominalCurrency = "RUB"; // (linked to currencyCode)
private Long id = 0L;
private Long securityId = 0L;// (linked to security)
private String description = "tsetse";
@ -17,12 +18,8 @@ class MoneyMarketSecurityFactory {
private LocalDate startDate = LocalDate.ofEpochDay(0);
private LocalDate endDate = LocalDate.ofEpochDay(0);
private BigDecimal nominalValue = BigDecimal.valueOf(1.0);
private Long nominalCurrency = 1L; // (linked to currencyCode)
private String instrumentType = "sdgaga"; // (linked to instrumentType)
private String fullName = "estat";
private Long nominalCurrencyId = 1L;
private String securitySymbol = "sdfafd";
public MoneyMarketSecurityFactory setLotSize(Double lotSize) {
@ -30,8 +27,7 @@ class MoneyMarketSecurityFactory {
return this;
}
public MoneyMarketSecurityFactory setNominalCurrencyId(Long nominalCurrencyId) {
this.nominalCurrencyId = nominalCurrencyId;
public MoneyMarketSecurityFactory setNominalCurrency(String nominalCurrencyId) {
this.nominalCurrency = nominalCurrencyId;
return this;
}
@ -66,12 +62,6 @@ class MoneyMarketSecurityFactory {
return this;
}
public MoneyMarketSecurityFactory setNominalCurrency(Long nominalCurrency) {
this.nominalCurrency = nominalCurrency;
this.nominalCurrencyId = nominalCurrency;
return this;
}
public MoneyMarketSecurityFactory setInstrumentType(String instrumentType) {
this.instrumentType = instrumentType;
return this;
@ -111,7 +101,7 @@ class MoneyMarketSecurityFactory {
moneyMarketSecurityUpdateRequest.setId(id);
moneyMarketSecurityUpdateRequest.setEndDate(endDate);
moneyMarketSecurityUpdateRequest.setNominalValue(nominalValue.doubleValue());
moneyMarketSecurityUpdateRequest.setNominalCurrencyId(nominalCurrencyId);
moneyMarketSecurityUpdateRequest.setNominalCurrency(nominalCurrency);
moneyMarketSecurityUpdateRequest.setInstrumentType(instrumentType);
moneyMarketSecurityUpdateRequest.setFullName(fullName);
@ -131,7 +121,7 @@ class MoneyMarketSecurityFactory {
keyRequest.setStartDate(startDate);
keyRequest.setEndDate(endDate);
keyRequest.setNominalValue(nominalValue.doubleValue());
keyRequest.setNominalCurrencyId(nominalCurrencyId);
keyRequest.setNominalCurrency(nominalCurrency);
keyRequest.setInstrumentType(instrumentType);
keyRequest.setFullName(fullName);
keyRequest.setSecuritySymbol(securitySymbol);

View file

@ -45,11 +45,11 @@ public class MoneyMarketSecurityServiceDisabled {
private final int TIMEOUT = 1000;
boolean isUsed;
private MockConsumer<String, Object> kafkaMockQueue;
private MockProducer<String, Object> mockProducer = new MockProducer<>();
// @Autowired
private final MockProducer<String, Object> mockProducer = new MockProducer<>();
// @Autowired
// @Qualifier("hazelcastServiceTest")
private HazelcastService hazelcastService;
// @Autowired
// @Autowired
// @Qualifier("hazelcastInstance")
private HazelcastInstance hz;
@ -96,7 +96,7 @@ public class MoneyMarketSecurityServiceDisabled {
* {@link MoneyMarketSecurityNewRequest#startDate} - текущее колличество секунд с 1970-01-01T00:00:00Z.<br>
* {@link MoneyMarketSecurityNewRequest#endDate} - текущее колличество секунд с 1970-01-01T00:00:00Z.<br>
* {@link MoneyMarketSecurityNewRequest#nominalValue} - 1.0<br>
* {@link MoneyMarketSecurityNewRequest#nominalCurrencyId} - 1L<br>
* {@link MoneyMarketSecurityNewRequest#nominalCurrency} - 1L<br>
* {@link MoneyMarketSecurityNewRequest#instrumentType} - "sdgaga"<br>
* {@link MoneyMarketSecurityNewRequest#fullName} - "estat"<br>
*/
@ -236,7 +236,7 @@ public class MoneyMarketSecurityServiceDisabled {
* Входной запрос {@link MoneyMarketSecurityUpdateRequest}:<br>
* {@link MoneyMarketSecurityUpdateRequest#fullName} - sfgsdfg<br>
* {@link MoneyMarketSecurityUpdateRequest#instrumentType} - qwerqwe<br>
* {@link MoneyMarketSecurityUpdateRequest#nominalCurrencyId} - 2L<br>
* {@link MoneyMarketSecurityUpdateRequest#nominalCurrency} - RUB<br>
* {@link MoneyMarketSecurityUpdateRequest#nominalValue} - 2.0<br>
* {@link MoneyMarketSecurityUpdateRequest#endDate} - текущее колличество секунд с 1970-01-01T00:00:00Z + (24 * 3600)<br>
*/
@ -260,7 +260,7 @@ public class MoneyMarketSecurityServiceDisabled {
moneyMarketSecurityFactory
.setFullName("sfgsdfg")
.setInstrumentType("qwerqwe")
.setNominalCurrencyId(2L)
.setNominalCurrency("RUB")
.setNominalValue(BigDecimal.valueOf(2.0))
.setEndDate(LocalDate.ofEpochDay(24 * 3600));

View file

@ -47,7 +47,7 @@ public class KeyRateService extends QueueConsumer implements InitializingBean {
private void newKeyRate(BaseRequest<KeyRateNewRequest> userRequest) {
KeyRateNewRequest req = userRequest.getRequestPayload();
log.debug("MoneyMarketSecurityNewRequest received");
log.debug("KeyRateNewRequest received");
KeyRate keyRate = new KeyRate();
keyRate.setEndDate(req.getEndDate());
keyRate.setDocument(req.getDocument());
@ -60,7 +60,7 @@ public class KeyRateService extends QueueConsumer implements InitializingBean {
private void updateKeyRate(BaseRequest<KeyRateUpdateRequest> userRequest) {
KeyRateUpdateRequest req = userRequest.getRequestPayload();
log.debug("MoneyMarketSecurityUpdateRequest received id = {}", req.getId());
log.debug("KeyRateUpdateRequest received id = {}", req.getId());
KeyRate keyRate = keyRateMap.getSingleObjectByID(req.getId());
keyRate.setEndDate(req.getEndDate());
keyRate.setDocument(req.getDocument());

View file

@ -3,7 +3,7 @@ package ru.spcex.platform.enumeration;
import ru.spcex.platform.utils.enumeration.IEnumKey;
public enum TransactionStatus implements IEnumKey {
stld("STLD"), notSent("NSNT"), cher("CHER"), sent("SENT");
stld("STLD"), notSent("NSNT"), cher("CHER"), sent("SENT"), ok("OK"), fail("FAIL");
private final String key;

View file

@ -16,7 +16,7 @@ public class ClearingCalendarNewRequest {
@JsonProperty
public Long companyId;
@JsonProperty
public String tradingStatus;
public String dayStatus;
public LocalDate getClearingDate() {
return clearingDate;
@ -34,11 +34,11 @@ public class ClearingCalendarNewRequest {
this.companyId = companyId;
}
public String getTradingStatus() {
return tradingStatus;
public String getDayStatus() {
return dayStatus;
}
public void setTradingStatus(String tradingStatus) {
this.tradingStatus = tradingStatus;
public void setDayStatus(String dayStatus) {
this.dayStatus = dayStatus;
}
}

View file

@ -19,7 +19,7 @@ public class ClearingCalendarUpdateRequest {
@JsonProperty
public Long companyId;
@JsonProperty
public String tradingStatus;
public String dayStatus;
public Long getId() {
return id;
@ -45,11 +45,11 @@ public class ClearingCalendarUpdateRequest {
this.companyId = companyId;
}
public String getTradingStatus() {
return tradingStatus;
public String getDayStatus() {
return dayStatus;
}
public void setTradingStatus(String tradingStatus) {
this.tradingStatus = tradingStatus;
public void setDayStatus(String dayStatus) {
this.dayStatus = dayStatus;
}
}

View file

@ -20,7 +20,7 @@ public class MoneyMarketSecurityNewRequest {
@JsonProperty
public Double nominalValue;
@JsonProperty
public Long nominalCurrencyId;
public String nominalCurrency;
@JsonProperty
public String instrumentType;
@JsonProperty
@ -54,12 +54,12 @@ public class MoneyMarketSecurityNewRequest {
this.nominalValue = nominalValue;
}
public Long getNominalCurrencyId() {
return nominalCurrencyId;
public String getNominalCurrency() {
return nominalCurrency;
}
public void setNominalCurrencyId(Long nominalCurrencyId) {
this.nominalCurrencyId = nominalCurrencyId;
public void setNominalCurrency(String nominalCurrency) {
this.nominalCurrency = nominalCurrency;
}
public String getInstrumentType() {

View file

@ -20,7 +20,7 @@ public class MoneyMarketSecurityUpdateRequest {
@JsonProperty
public Double nominalValue;
@JsonProperty
public Long nominalCurrencyId;
public String nominalCurrency;
@JsonProperty
public String instrumentType;
@JsonProperty
@ -52,12 +52,12 @@ public class MoneyMarketSecurityUpdateRequest {
this.nominalValue = nominalValue;
}
public Long getNominalCurrencyId() {
return nominalCurrencyId;
public String getNominalCurrency() {
return nominalCurrency;
}
public void setNominalCurrencyId(Long nominalCurrencyId) {
this.nominalCurrencyId = nominalCurrencyId;
public void setNominalCurrency(String nominalCurrency) {
this.nominalCurrency = nominalCurrency;
}
public String getInstrumentType() {

View file

@ -50,6 +50,12 @@ public class QueueConsumer implements AutoCloseable {
this.supportStartOffsetTimeWindow = false;
}
/**
* используем этот конструктор, если хотим класть
* в кафку "ответ" - информацию о статусе обработки команд
* @param kafkaQueue
* @param kafkaResponseQueue
*/
public QueueConsumer(Consumer<String, Object> kafkaQueue, Producer<String, Object> kafkaResponseQueue) {
this(kafkaQueue);
this.producer = kafkaResponseQueue;

Some files were not shown because too many files have changed in this diff Show more