This commit is contained in:
2023-11-15 22:47:55 +08:00
parent eef7457cee
commit 3bbcccff16
3 changed files with 78 additions and 65 deletions

View File

@@ -2,6 +2,7 @@ package cn.lihongjie.coal.base.dto;
import cn.lihongjie.coal.exception.BizException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Splitter;
import io.vavr.Function4;
@@ -12,13 +13,11 @@ import jakarta.persistence.criteria.*;
import jakarta.persistence.metamodel.Attribute;
import jakarta.persistence.metamodel.EntityType;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.With;
import lombok.*;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.query.sqm.internal.SqmCriteriaNodeBuilder;
import org.springframework.core.convert.ConversionFailedException;
import org.springframework.core.convert.ConversionService;
import org.springframework.data.domain.Sort;
@@ -503,21 +502,17 @@ public class CommonQuery {
map.put(
Tuple.of("in", String.class),
(Root root, CriteriaBuilder criteriaBuilder, QueryItem x, ConversionService c) -> {
return criteriaBuilder
.in(parseKey(root, x.key))
.in(
Arrays.stream(x.value.split(","))
.map(i -> c.convert(i, String.class))
.toList());
return ((SqmCriteriaNodeBuilder)criteriaBuilder)
.in(parseKey(root, x.key),
Arrays.stream(getArray(x)).map(i -> c.convert(i, String.class)).toList());
});
map.put(
Tuple.of("in", Integer.class),
(Root root, CriteriaBuilder criteriaBuilder, QueryItem x, ConversionService c) -> {
return criteriaBuilder
.in(parseKey(root, x.key))
.in(
Arrays.stream(x.value.split(","))
return ((SqmCriteriaNodeBuilder)criteriaBuilder)
.in(parseKey(root, x.key),
Arrays.stream(getArray(x))
.map(i -> c.convert(i, Integer.class))
.toList());
});
@@ -525,10 +520,9 @@ public class CommonQuery {
map.put(
Tuple.of("in", Long.class),
(Root root, CriteriaBuilder criteriaBuilder, QueryItem x, ConversionService c) -> {
return criteriaBuilder
.in(parseKey(root, x.key))
.in(
Arrays.stream(x.value.split(","))
return ((SqmCriteriaNodeBuilder)criteriaBuilder)
.in(parseKey(root, x.key),
Arrays.stream(getArray(x))
.map(i -> c.convert(i, Long.class))
.toList());
});
@@ -536,20 +530,18 @@ public class CommonQuery {
map.put(
Tuple.of("in", Double.class),
(Root root, CriteriaBuilder criteriaBuilder, QueryItem x, ConversionService c) -> {
return criteriaBuilder
.in(parseKey(root, x.key))
.in(
Arrays.stream(x.value.split(","))
return ((SqmCriteriaNodeBuilder)criteriaBuilder)
.in(parseKey(root, x.key),
Arrays.stream(getArray(x))
.map(i -> c.convert(i, Double.class))
.toList());
});
map.put(
Tuple.of("in", BigDecimal.class),
(Root root, CriteriaBuilder criteriaBuilder, QueryItem x, ConversionService c) -> {
return criteriaBuilder
.in(parseKey(root, x.key))
.in(
Arrays.stream(x.value.split(","))
return ((SqmCriteriaNodeBuilder)criteriaBuilder)
.in(parseKey(root, x.key),
Arrays.stream(getArray(x))
.map(i -> c.convert(i, BigDecimal.class))
.toList());
});
@@ -557,20 +549,18 @@ public class CommonQuery {
map.put(
Tuple.of("in", LocalDate.class),
(Root root, CriteriaBuilder criteriaBuilder, QueryItem x, ConversionService c) -> {
return criteriaBuilder
.in(parseKey(root, x.key))
.in(
Arrays.stream(x.value.split(","))
return ((SqmCriteriaNodeBuilder)criteriaBuilder)
.in(parseKey(root, x.key),
Arrays.stream(getArray(x))
.map(i -> c.convert(i, LocalDate.class))
.toList());
});
map.put(
Tuple.of("in", LocalDateTime.class),
(Root root, CriteriaBuilder criteriaBuilder, QueryItem x, ConversionService c) -> {
return criteriaBuilder
.in(parseKey(root, x.key))
.in(
Arrays.stream(x.value.split(","))
return ((SqmCriteriaNodeBuilder)criteriaBuilder)
.in(parseKey(root, x.key),
Arrays.stream(getArray(x))
.map(i -> c.convert(i, LocalDateTime.class))
.toList());
});
@@ -578,10 +568,9 @@ public class CommonQuery {
map.put(
Tuple.of("nin", String.class),
(Root root, CriteriaBuilder criteriaBuilder, QueryItem x, ConversionService c) -> {
return criteriaBuilder
.in(parseKey(root, x.key))
.in(
Arrays.stream(x.value.split(","))
return ((SqmCriteriaNodeBuilder)criteriaBuilder)
.in(parseKey(root, x.key),
Arrays.stream(getArray(x))
.map(i -> c.convert(i, String.class))
.toList())
.not();
@@ -590,10 +579,9 @@ public class CommonQuery {
map.put(
Tuple.of("nin", Integer.class),
(Root root, CriteriaBuilder criteriaBuilder, QueryItem x, ConversionService c) -> {
return criteriaBuilder
.in(parseKey(root, x.key))
.in(
Arrays.stream(x.value.split(","))
return ((SqmCriteriaNodeBuilder)criteriaBuilder)
.in(parseKey(root, x.key),
Arrays.stream(getArray(x))
.map(i -> c.convert(i, Integer.class))
.toList())
.not();
@@ -602,10 +590,9 @@ public class CommonQuery {
map.put(
Tuple.of("nin", Long.class),
(Root root, CriteriaBuilder criteriaBuilder, QueryItem x, ConversionService c) -> {
return criteriaBuilder
.in(parseKey(root, x.key))
.in(
Arrays.stream(x.value.split(","))
return ((SqmCriteriaNodeBuilder)criteriaBuilder)
.in(parseKey(root, x.key),
Arrays.stream(getArray(x))
.map(i -> c.convert(i, Long.class))
.toList())
.not();
@@ -614,10 +601,9 @@ public class CommonQuery {
map.put(
Tuple.of("nin", Double.class),
(Root root, CriteriaBuilder criteriaBuilder, QueryItem x, ConversionService c) -> {
return criteriaBuilder
.in(parseKey(root, x.key))
.in(
Arrays.stream(x.value.split(","))
return ((SqmCriteriaNodeBuilder)criteriaBuilder)
.in(parseKey(root, x.key),
Arrays.stream(getArray(x))
.map(i -> c.convert(i, Double.class))
.toList())
.not();
@@ -625,10 +611,9 @@ public class CommonQuery {
map.put(
Tuple.of("nin", BigDecimal.class),
(Root root, CriteriaBuilder criteriaBuilder, QueryItem x, ConversionService c) -> {
return criteriaBuilder
.in(parseKey(root, x.key))
.in(
Arrays.stream(x.value.split(","))
return ((SqmCriteriaNodeBuilder)criteriaBuilder)
.in(parseKey(root, x.key),
Arrays.stream(getArray(x))
.map(i -> c.convert(i, BigDecimal.class))
.toList())
.not();
@@ -637,10 +622,9 @@ public class CommonQuery {
map.put(
Tuple.of("nin", LocalDate.class),
(Root root, CriteriaBuilder criteriaBuilder, QueryItem x, ConversionService c) -> {
return criteriaBuilder
.in(parseKey(root, x.key))
.in(
Arrays.stream(x.value.split(","))
return ((SqmCriteriaNodeBuilder)criteriaBuilder)
.in(parseKey(root, x.key),
Arrays.stream(getArray(x))
.map(i -> c.convert(i, LocalDate.class))
.toList())
.not();
@@ -648,16 +632,27 @@ public class CommonQuery {
map.put(
Tuple.of("nin", LocalDateTime.class),
(Root root, CriteriaBuilder criteriaBuilder, QueryItem x, ConversionService c) -> {
return criteriaBuilder
.in(parseKey(root, x.key))
.in(
Arrays.stream(x.value.split(","))
return ((SqmCriteriaNodeBuilder)criteriaBuilder)
.in(parseKey(root, x.key),
Arrays.stream(getArray(x))
.map(i -> c.convert(i, LocalDateTime.class))
.toList())
.not();
});
}
@SneakyThrows
public static String[] getArray(QueryItem x) {
if (!StringUtils.isEmpty(x.value)) {
if (x.value.startsWith("[")){
return new ObjectMapper().readValue(x.value, String[].class);
}
return x.value.split(",");
}
return new String[0];
}
private List<QueryItem> items;
private Integer pageNo = 0;
private Integer pageSize = Integer.MAX_VALUE;

View File

@@ -24,6 +24,8 @@ import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
@Service
@Slf4j
public class MeterMonthLogService
@@ -73,6 +75,7 @@ public class MeterMonthLogService
return page.map(this.mapper::toDto);
}
public void syncMeter(String meterId) {
MeterEntity meter = new MeterEntity();
@@ -83,11 +86,11 @@ public class MeterMonthLogService
entityManager.createNativeQuery(
"""
select DATE_TRUNC('month', time)::date as time,
select cast(DATE_TRUNC('month', time) as date) as time,
meter_id,
sum(usage) as value
from t_meter_log
where meter_id = :meterId group by DATE_TRUNC('month', time)::date, meter_id
where meter_id = :meterId group by cast(DATE_TRUNC('month', time) as date), meter_id
""");
nativeQuery.setParameter("meterId", meterId);
@@ -99,7 +102,7 @@ public class MeterMonthLogService
Object[] result = (Object[]) o;
MeterMonthLogEntity entity = new MeterMonthLogEntity();
entity.setMeter(meter);
entity.setTime((java.time.LocalDate) result[0]);
entity.setTime(conversionService.convert(result[0], LocalDate.class));
entity.setValue((Double) result[2]);
repository.save(entity);
});

View File

@@ -0,0 +1,15 @@
package scripts.dict
import cn.lihongjie.coal.base.dto.CommonQuery
import cn.lihongjie.coal.meter.controller.MeterController
import org.springframework.context.ApplicationContext
ApplicationContext ioc = ioc
def controller = ioc.getBean(MeterController.class)
return controller.list(new CommonQuery())