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;
|
package ru.spcex.clearing.backendapi.controller.test;
|
||||||
|
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import io.swagger.annotations.ApiParam;
|
||||||
import io.swagger.annotations.ApiResponse;
|
import io.swagger.annotations.ApiResponse;
|
||||||
import io.swagger.annotations.ApiResponses;
|
import io.swagger.annotations.ApiResponses;
|
||||||
import org.springframework.beans.factory.InitializingBean;
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
import org.springframework.stereotype.Controller;
|
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.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestMethod;
|
import org.springframework.web.bind.annotation.RequestMethod;
|
||||||
import org.springframework.web.bind.annotation.ResponseBody;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
import ru.clearing.classes.statics.data.register.MoneyBalanceRegister;
|
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.controller.response.entity.CommonGetAllResponse;
|
||||||
import ru.spcex.clearing.backendapi.meta.GetResponseFactory;
|
import ru.spcex.clearing.backendapi.meta.GetResponseFactory;
|
||||||
|
import ru.spcex.clearing.backendapi.service.IStateLoader;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
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.imdg.api.predicate.ImdgPredicateBuilder;
|
||||||
import ru.spcex.platform.utils.time.TimeUtil;
|
import ru.spcex.platform.utils.time.TimeUtil;
|
||||||
|
|
||||||
|
|
@ -26,6 +31,7 @@ import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
@Controller
|
@Controller
|
||||||
@RequestMapping("/history")
|
@RequestMapping("/history")
|
||||||
|
|
@ -33,20 +39,37 @@ public class HistController implements InitializingBean {
|
||||||
private final ImdgProvider imdgProviderHist;
|
private final ImdgProvider imdgProviderHist;
|
||||||
private final ImdgProvider imdgProvider;
|
private final ImdgProvider imdgProvider;
|
||||||
private final GetResponseFactory responseFactory;
|
private final GetResponseFactory responseFactory;
|
||||||
|
private final IStateLoader stateLoader;
|
||||||
|
private final ImdgPredicateBuilder pb;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public HistController(@Qualifier("imdgProviderHist") ImdgProvider imdgProviderHist,
|
public HistController(@Qualifier("imdgProviderHist") ImdgProvider imdgProviderHist,
|
||||||
@Qualifier("imdgProvider") ImdgProvider imdgProvider, GetResponseFactory responseFactory) {
|
@Qualifier("imdgProvider") ImdgProvider imdgProvider,
|
||||||
|
GetResponseFactory responseFactory,
|
||||||
|
IStateLoader stateLoader) {
|
||||||
this.imdgProviderHist = imdgProviderHist;
|
this.imdgProviderHist = imdgProviderHist;
|
||||||
this.imdgProvider = imdgProvider;
|
this.imdgProvider = imdgProvider;
|
||||||
this.responseFactory = responseFactory;
|
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.")
|
@ApiOperation(value = "get all accounts.")
|
||||||
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CommonGetAllResponse.class)})
|
@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
|
@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);
|
Imdg<SpcexObjectBase> searchMap = imdgProviderHist.getImdg(IMDGDistributedNames.Map_SearchMoneyBalanceRegister, SpcexObjectBase.class);
|
||||||
ImdgPredicateBuilder prdct = searchMap.predicateBuilder();
|
ImdgPredicateBuilder prdct = searchMap.predicateBuilder();
|
||||||
LocalDate time = LocalDate.of(2023, Month.JUNE, 8);//2023-06-08
|
LocalDate time = LocalDate.of(2023, Month.JUNE, 8);//2023-06-08
|
||||||
|
|
@ -62,10 +85,48 @@ public class HistController implements InitializingBean {
|
||||||
return response;
|
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
|
//mb move to IStateLoader getHistoryMetaTransofrm
|
||||||
public void afterPropertiesSet() throws Exception {
|
<T extends SpcexObjectBase> Collection<Map<String, Object>> getAllMetaTransform(
|
||||||
imdgProviderHist.waitAvailable();
|
String searchMapName,
|
||||||
imdgProvider.waitAvailable();
|
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