imdg-hist example 2

This commit is contained in:
ialbert 2023-10-13 19:29:55 +03:00
parent 1d36a64dd5
commit 6887b627c7
2 changed files with 119 additions and 7 deletions

View file

@ -0,0 +1,51 @@
package ru.spcex.clearing.backendapi.controller.request.cud.history;
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.platform.messaging.domain.json.deserialize.LocalDateDeserializer;
import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalDateSerializer;
import java.time.LocalDate;
public class HistoryConditionRequest {
@ApiModelProperty(value = "Таблица для поиска", example = "1200")
@JsonProperty
private String table;
@ApiModelProperty(value = "Начальный точка поиска по дате", example = "2022-12-25")
@JsonProperty
@JsonSerialize(using = LocalDateSerializer.class)
@JsonDeserialize(using = LocalDateDeserializer.class)
private LocalDate from;
@ApiModelProperty(value = "Конечная точка поиска по дате ", example = "2022-12-25")
@JsonProperty
@JsonSerialize(using = LocalDateSerializer.class)
@JsonDeserialize(using = LocalDateDeserializer.class)
private LocalDate to;
public String getTable() {
return table;
}
public void setTable(String table) {
this.table = table;
}
public LocalDate getFrom() {
return from;
}
public void setFrom(LocalDate from) {
this.from = from;
}
public LocalDate getTo() {
return to;
}
public void setTo(LocalDate to) {
this.to = to;
}
}

View file

@ -1,22 +1,27 @@
package ru.spcex.clearing.backendapi.controller.test;
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.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
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.register.MoneyBalanceRegister;
import ru.spcex.clearing.backendapi.controller.request.cud.history.HistoryConditionRequest;
import ru.spcex.clearing.backendapi.controller.response.entity.CommonGetAllResponse;
import ru.spcex.clearing.backendapi.meta.GetResponseFactory;
import ru.spcex.clearing.backendapi.service.IStateLoader;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.utils.time.TimeUtil;
@ -26,6 +31,7 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
@Controller
@RequestMapping("/history")
@ -33,20 +39,37 @@ public class HistController implements InitializingBean {
private final ImdgProvider imdgProviderHist;
private final ImdgProvider imdgProvider;
private final GetResponseFactory responseFactory;
private final IStateLoader stateLoader;
private final ImdgPredicateBuilder pb;
@Autowired
public HistController(@Qualifier("imdgProviderHist") ImdgProvider imdgProviderHist,
@Qualifier("imdgProvider") ImdgProvider imdgProvider, GetResponseFactory responseFactory) {
@Qualifier("imdgProvider") ImdgProvider imdgProvider,
GetResponseFactory responseFactory,
IStateLoader stateLoader) {
this.imdgProviderHist = imdgProviderHist;
this.imdgProvider = imdgProvider;
this.responseFactory = responseFactory;
this.stateLoader = stateLoader;
this.pb = imdgProviderHist
.getImdg(IMDGDistributedNames.Map_SearchMoneyBalanceRegister, SpcexObjectBase.class)
.predicateBuilder();
}
@Override
public void afterPropertiesSet() throws Exception {
//will stuck of not provided
imdgProviderHist.waitAvailable();
imdgProvider.waitAvailable();
}
@ApiOperation(value = "get all accounts.")
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CommonGetAllResponse.class)})
@RequestMapping(path = "/money-balance-register", method = RequestMethod.GET)
@RequestMapping(path = "/money-balance-register", method = RequestMethod.POST)
@ResponseBody
public CommonGetAllResponse getAll() {
public CommonGetAllResponse search(
@ApiParam(value = "Параметры команды в JSON формате.", required = true)
@RequestBody HistoryConditionRequest searchCondition) {
Imdg<SpcexObjectBase> searchMap = imdgProviderHist.getImdg(IMDGDistributedNames.Map_SearchMoneyBalanceRegister, SpcexObjectBase.class);
ImdgPredicateBuilder prdct = searchMap.predicateBuilder();
LocalDate time = LocalDate.of(2023, Month.JUNE, 8);//2023-06-08
@ -62,10 +85,48 @@ public class HistController implements InitializingBean {
return response;
}
@ApiOperation(value = "get all money balance registers.")
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CommonGetAllResponse.class)})
@RequestMapping(path = "/money-balance-register2", method = RequestMethod.POST)
@ResponseBody
public CommonGetAllResponse search2(
@ApiParam(value = "Параметры команды в JSON формате.", required = true)
@RequestBody HistoryConditionRequest searchCondition) {
//todo conditions by destination and filled fields
ImdgPredicate prdct = pb.and(
pb.greatEqual("created", TimeUtil.localDateToInstant(searchCondition.getFrom())),
pb.lessEqual("created", TimeUtil.localDateToInstant(searchCondition.getTo()))
);
Collection<Map<String, Object>> searchRes = getAllMetaTransform(
IMDGDistributedNames.Map_SearchMoneyBalanceRegister,
IMDGDistributedNames.Map_MoneyBalanceRegister,
MoneyBalanceRegister.class,
prdct
);
CommonGetAllResponse response = new CommonGetAllResponse();
response.fromEntity(searchRes);
return response;
}
@Override
public void afterPropertiesSet() throws Exception {
imdgProviderHist.waitAvailable();
imdgProvider.waitAvailable();
//mb move to IStateLoader getHistoryMetaTransofrm
<T extends SpcexObjectBase> Collection<Map<String, Object>> getAllMetaTransform(
String searchMapName,
String mapName,
Class<T> clazz,
ImdgPredicate conditions) {
Imdg<T> imdgSearch = getImdg(searchMapName, clazz);
Imdg<T> imdgHistory = getImdg(mapName, clazz);
Collection<Long> ids = imdgSearch.getCollectionIdsByPredicate(conditions);
return ids.stream()
.map(imdgHistory::getSingleObjectByID)
.filter(Objects::nonNull)
.map(o -> responseFactory.responseFromObject(o, clazz))
.toList();
}
private final Map<String, Imdg<?>> allImdgMaps = new ConcurrentHashMap<>();
@SuppressWarnings("unchecked")
private <T extends SpcexObjectBase> Imdg<T> getImdg(String mapName, Class<T> clazz) {
return (Imdg<T>) allImdgMaps.computeIfAbsent(mapName, (mapName1) -> imdgProviderHist.getImdg(mapName, clazz));
}
}