diff --git a/.idea/mybatisx/templates.xml b/.idea/mybatisx/templates.xml new file mode 100644 index 0000000000000000000000000000000000000000..5952ae05ac66fe5e49a989f1c2b784e829c2d0bd --- /dev/null +++ b/.idea/mybatisx/templates.xml @@ -0,0 +1,65 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/ediagnosis/cdr/CdrApplication.java b/src/main/java/com/ediagnosis/cdr/CdrApplication.java index 64634eceb51c069749ead77ad0b1f873d30713aa..4ed68fa46c2351ec2ad6b369bf73b71fee4a4e69 100644 --- a/src/main/java/com/ediagnosis/cdr/CdrApplication.java +++ b/src/main/java/com/ediagnosis/cdr/CdrApplication.java @@ -1,9 +1,11 @@ package com.ediagnosis.cdr; +import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication +@MapperScan("com.ediagnosis.cdr.dao.mapper") public class CdrApplication { public static void main(String[] args) { diff --git a/src/main/java/com/ediagnosis/cdr/dao/DimDataSummaryRepository.java b/src/main/java/com/ediagnosis/cdr/dao/DimDataSummaryRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..d0f2152737887fdb4528363cf417b611c5bc3a5a --- /dev/null +++ b/src/main/java/com/ediagnosis/cdr/dao/DimDataSummaryRepository.java @@ -0,0 +1,40 @@ +package com.ediagnosis.cdr.dao; + +import com.ediagnosis.cdr.dao.entity.DimDataSummaryEntity; +import com.ediagnosis.cdr.dao.mapper.DimDataSummaryMapper; +import com.ediagnosis.cdr.domain.DimDataSummary; +import com.ediagnosis.cdr.util.TimeUtil; +import org.springframework.stereotype.Repository; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Optional; + +@Repository +public class DimDataSummaryRepository { + + private final DimDataSummaryMapper dimDataSummaryMapper; + + public DimDataSummaryRepository(DimDataSummaryMapper dimDataSummaryMapper) { + this.dimDataSummaryMapper = dimDataSummaryMapper; + } + + public List getAllDimDataSummary() { + List entityList = dimDataSummaryMapper.selectAll(); + return entityList.stream().map(this::convertToDimDataSummary).toList(); + } + + + private DimDataSummary convertToDimDataSummary(DimDataSummaryEntity entity) { + Optional timeOptional = TimeUtil.toLocalDateTime(entity.getUpdateTime()); + + return new DimDataSummary( + entity.getName(), + entity.getCode(), + entity.getValue(), + timeOptional.orElse(null) + ); + } + + +} diff --git a/src/main/java/com/ediagnosis/cdr/entity/DimDataSummary.java b/src/main/java/com/ediagnosis/cdr/dao/entity/DimDataSummaryEntity.java similarity index 95% rename from src/main/java/com/ediagnosis/cdr/entity/DimDataSummary.java rename to src/main/java/com/ediagnosis/cdr/dao/entity/DimDataSummaryEntity.java index 7a4d74750a0a670822125bb800ab53ef83d83a6b..735f2222c763b3534876761526d9f74ade53b002 100644 --- a/src/main/java/com/ediagnosis/cdr/entity/DimDataSummary.java +++ b/src/main/java/com/ediagnosis/cdr/dao/entity/DimDataSummaryEntity.java @@ -1,4 +1,4 @@ -package com.ediagnosis.cdr.entity; +package com.ediagnosis.cdr.dao.entity; import com.mybatisflex.annotation.Id; @@ -10,7 +10,7 @@ import com.mybatisflex.annotation.Table; * @TableName dim_data_summary */ @Table(value ="dim_data_summary") -public class DimDataSummary { +public class DimDataSummaryEntity { /** * */ diff --git a/src/main/java/com/ediagnosis/cdr/dao/mapper/DimDataSummaryMapper.java b/src/main/java/com/ediagnosis/cdr/dao/mapper/DimDataSummaryMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..4d8fb3d8c4f62026c725e0d2cebdf53c6e149240 --- /dev/null +++ b/src/main/java/com/ediagnosis/cdr/dao/mapper/DimDataSummaryMapper.java @@ -0,0 +1,15 @@ +package com.ediagnosis.cdr.dao.mapper; + +import com.ediagnosis.cdr.dao.entity.DimDataSummaryEntity; +import com.mybatisflex.core.BaseMapper; +import org.mybatis.spring.annotation.MapperScan; + + +@MapperScan +public interface DimDataSummaryMapper extends BaseMapper { + +} + + + + diff --git a/src/main/java/com/ediagnosis/cdr/domain/DimDataSummary.java b/src/main/java/com/ediagnosis/cdr/domain/DimDataSummary.java new file mode 100644 index 0000000000000000000000000000000000000000..36252f03b22328780e37d6f1b7b39a1101988e10 --- /dev/null +++ b/src/main/java/com/ediagnosis/cdr/domain/DimDataSummary.java @@ -0,0 +1,14 @@ +package com.ediagnosis.cdr.domain; + +import java.time.LocalDateTime; + + +public record DimDataSummary( + String name, + String code, + String value, + LocalDateTime updateTime +) { + +} + diff --git a/src/main/java/com/ediagnosis/cdr/mapper/DimDataSummaryMapper.java b/src/main/java/com/ediagnosis/cdr/mapper/DimDataSummaryMapper.java deleted file mode 100644 index 9712b85a9c559ea1a6bc7f728676a319f1f1813f..0000000000000000000000000000000000000000 --- a/src/main/java/com/ediagnosis/cdr/mapper/DimDataSummaryMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.ediagnosis.cdr.mapper; - -import com.ediagnosis.cdr.entity.DimDataSummary; -import com.mybatisflex.core.BaseMapper; - - - -public interface DimDataSummaryMapper extends BaseMapper { - -} - - - - diff --git a/src/main/java/com/ediagnosis/cdr/util/JsonProcessor.java b/src/main/java/com/ediagnosis/cdr/util/JsonProcessor.java index 348775818f5d0c546f64cb480cff0da8573c8ebf..bd065f23e5c003bb74fbafcd503797f3a0d6ebe5 100644 --- a/src/main/java/com/ediagnosis/cdr/util/JsonProcessor.java +++ b/src/main/java/com/ediagnosis/cdr/util/JsonProcessor.java @@ -2,34 +2,38 @@ package com.ediagnosis.cdr.util; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; -@Component -public class JsonProcessor { +import java.util.Optional; - private final ObjectMapper objectMapper; - public JsonProcessor(ObjectMapper objectMapper) { - this.objectMapper = objectMapper; - } +public class JsonProcessor { + private static final ObjectMapper objectMapper = new ObjectMapper(); + private static final Logger log = LoggerFactory.getLogger(JsonProcessor.class); - public T toObject(String json, Class clazz) { + + public static Optional toObject(String json, Class clazz) { + T value = null; try { - return objectMapper.readValue(json, clazz); + value = objectMapper.readValue(json, clazz); } catch (Exception e) { -// todo:打印日志 - throw new RuntimeException(e); + log.error("json to object error", e); } + return Optional.ofNullable(value); } - public String toJson(Object object) { + public static Optional toJson(Object object) { + String value = ""; try { - return objectMapper.writeValueAsString(object); + value = objectMapper.writeValueAsString(object); } catch (JsonProcessingException e) { -// todo:打印日志 - throw new RuntimeException(e); + log.error("object to json error", e); + } + return Optional.ofNullable(value); } } diff --git a/src/main/java/com/ediagnosis/cdr/util/TimeUtil.java b/src/main/java/com/ediagnosis/cdr/util/TimeUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..1bb07f62e8a687487c14d5d790af65ec31f279cd --- /dev/null +++ b/src/main/java/com/ediagnosis/cdr/util/TimeUtil.java @@ -0,0 +1,79 @@ +package com.ediagnosis.cdr.util; + + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.time.DateTimeException; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.time.temporal.Temporal; +import java.util.Optional; + +public class TimeUtil { + + + private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + private static final Logger log = LoggerFactory.getLogger(TimeUtil.class); + + public static Optional toLocalDateTime(String time) { + return parseTime(time, LocalDateTime.class, DATE_TIME_FORMATTER); + } + + public static Optional toString(LocalDateTime time) { + + return formatTime(time,DATE_TIME_FORMATTER); + } + + public static Optional toLocalDate(String time) { + return parseTime(time, LocalDate.class, DATE_FORMATTER); + + } + + public static Optional toString(LocalDate time) { + return formatTime(time,DATE_FORMATTER); + } + + private static Optional parseTime(String time, Class temporalClass, DateTimeFormatter formatter) { + try { + if (temporalClass.equals(LocalDateTime.class)) { + LocalDateTime dateTime = LocalDateTime.parse(time, formatter); + log.debug("time parse success:{}", dateTime); + return Optional.of(dateTime).map(temporalClass::cast); + } else if (temporalClass.equals(LocalDate.class)) { + LocalDate date = LocalDate.parse(time, formatter); + log.debug("time parse success:{}", date); + return Optional.of(date).map(temporalClass::cast); + } else { + log.error("Unsupported temporal class: {}", temporalClass.getName()); + return Optional.empty(); + } + } catch (DateTimeParseException e) { + log.error("time parse error", e); + return Optional.empty(); + } + } + + private static Optional formatTime(Temporal time, DateTimeFormatter formatter) { + try { + if(time instanceof LocalDateTime dateTime){ + String format = dateTime.format(formatter); + log.debug("time format success:{}", format); + return Optional.of(format); + }else if(time instanceof LocalDate date){ + String format = date.format(formatter); + log.debug("time format success:{}", format); + return Optional.of(format); + }else { + log.error("Unsupported temporal class: {}", time.getClass().getName()); + return Optional.empty(); + } + } catch (DateTimeException e){ + log.error("time format error", e); + return Optional.empty(); + } + } +} diff --git a/src/main/resources/generator/mapper/DimDataSummaryMapper.xml b/src/main/resources/generator/mapper/DimDataSummaryMapper.xml index 2a03ed6fd6948f9daae9b94ac42fd8ece1e43bbc..d16ef85ba3f6355c9ee83e0d4abd176497febf5d 100644 --- a/src/main/resources/generator/mapper/DimDataSummaryMapper.xml +++ b/src/main/resources/generator/mapper/DimDataSummaryMapper.xml @@ -2,9 +2,9 @@ - + - + diff --git a/src/test/java/com/ediagnosis/cdr/util/JsonProcessorTest.java b/src/test/java/com/ediagnosis/cdr/util/JsonProcessorTest.java new file mode 100644 index 0000000000000000000000000000000000000000..ce92399579338ccc9de86209770881ee4a284611 --- /dev/null +++ b/src/test/java/com/ediagnosis/cdr/util/JsonProcessorTest.java @@ -0,0 +1,33 @@ +package com.ediagnosis.cdr.util; + + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.util.Assert; + +import java.util.Optional; + + +@SpringBootTest +class JsonProcessorTest { + + + private static final Person person=new Person("张三",18); + + @Test + void toObject() { + String json = "{\"name\":\"张三\",\"age\":18}"; + Optional personOptional = JsonProcessor.toObject(json, Person.class); + Assert.isTrue(personOptional.isPresent(), "转换结果不应为空"); + Person tmpPerson = personOptional.get(); + Assert.isTrue(person.equals(tmpPerson), "转换后的对象与预期不一致"); + } + + @Test + void toJson() { + Optional json = JsonProcessor.toJson(person); + Assert.isTrue(json.isPresent(), "转换结果不应为空"); + Assert.isTrue(json.get().equals("{\"name\":\"张三\",\"age\":18}"), "转换结果与预期不一致"); + + } +} \ No newline at end of file diff --git a/src/test/java/com/ediagnosis/cdr/util/Person.java b/src/test/java/com/ediagnosis/cdr/util/Person.java new file mode 100644 index 0000000000000000000000000000000000000000..f6982e1fc7ed3d3631f348dee2e507de00a2ded6 --- /dev/null +++ b/src/test/java/com/ediagnosis/cdr/util/Person.java @@ -0,0 +1,44 @@ +package com.ediagnosis.cdr.util; + +import java.util.Objects; + +public class Person { + private String name; + private int age; + + public Person() { + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + + @Override + public boolean equals(Object o) { + if (!(o instanceof Person person)) return false; + return age == person.age && Objects.equals(name, person.name); + } + + @Override + public int hashCode() { + return Objects.hash(name, age); + } +} diff --git a/src/test/java/com/ediagnosis/cdr/util/TimeUtilTest.java b/src/test/java/com/ediagnosis/cdr/util/TimeUtilTest.java new file mode 100644 index 0000000000000000000000000000000000000000..aec73abb02964079d62356ef510641b4c6459ddd --- /dev/null +++ b/src/test/java/com/ediagnosis/cdr/util/TimeUtilTest.java @@ -0,0 +1,47 @@ +package com.ediagnosis.cdr.util; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.util.Assert; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Optional; + + +@SpringBootTest +class TimeUtilTest { + + String time = "2021-01-01 00:00:00"; + String date = "2021-01-01"; + LocalDateTime localDateTime = LocalDateTime.of(2021, 1, 1, 0, 0, 0); + LocalDate localDate = LocalDate.of(2021, 1, 1); + + @Test + void toLocalDateTime() { + Optional timeOptional = TimeUtil.toLocalDateTime(time); + Assert.isTrue(timeOptional.isPresent(), "时间不存在"); + Assert.isTrue(localDateTime.equals(timeOptional.get()), "时间不相等"); + } + + @Test + void testToString() { + Optional timeOptional = TimeUtil.toString(localDateTime); + Assert.isTrue(timeOptional.isPresent(), "时间不存在"); + Assert.isTrue(time.equals(timeOptional.get()), "时间字符串不相等"); + } + + @Test + void toLocalDate() { + Optional timeOptional = TimeUtil.toLocalDate(date); + Assert.isTrue(timeOptional.isPresent(), "时间不存在"); + Assert.isTrue(localDate.equals(timeOptional.get()), "时间不相等"); + } + + @Test + void testDateToString() { + Optional timeOptional = TimeUtil.toString(localDate); + Assert.isTrue(timeOptional.isPresent(), "时间不存在"); + Assert.isTrue(date.equals(timeOptional.get()), "时间字符串不相等"); + } +} \ No newline at end of file