imdg-hist example 2
This commit is contained in:
parent
1d36a64dd5
commit
6887b627c7
2 changed files with 119 additions and 7 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue