Commit ba9495c1 authored by yutao's avatar yutao

init

parent 79ba2708
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="TemplatesSettings">
<option name="templateConfigs">
<TemplateContext>
<option name="generateConfig">
<GenerateConfig>
<option name="annotationType" value="MYBATIS_PLUS3" />
<option name="basePackage" value="generator" />
<option name="basePath" value="src/main/java" />
<option name="classNameStrategy" value="camel" />
<option name="encoding" value="UTF-8" />
<option name="extraClassSuffix" value="" />
<option name="ignoreFieldPrefix" value="" />
<option name="ignoreFieldSuffix" value="" />
<option name="ignoreTablePrefix" value="" />
<option name="ignoreTableSuffix" value="" />
<option name="moduleName" value="md-cdr-v1" />
<option name="modulePath" value="$PROJECT_DIR$" />
<option name="moduleUIInfoList">
<list>
<ModuleInfoGo>
<option name="basePath" value="${domain.basePath}" />
<option name="configFileName" value="mapperInterface.ftl" />
<option name="configName" value="mapperInterface" />
<option name="encoding" value="${domain.encoding}" />
<option name="fileName" value="${domain.fileName}Mapper" />
<option name="fileNameWithSuffix" value="${domain.fileName}Mapper.java" />
<option name="modulePath" value="$PROJECT_DIR$" />
<option name="packageName" value="${domain.basePackage}.mapper" />
</ModuleInfoGo>
<ModuleInfoGo>
<option name="basePath" value="src/main/resources" />
<option name="configFileName" value="mapperXml.ftl" />
<option name="configName" value="mapperXml" />
<option name="encoding" value="${domain.encoding}" />
<option name="fileName" value="${domain.fileName}Mapper" />
<option name="fileNameWithSuffix" value="${domain.fileName}Mapper.xml" />
<option name="modulePath" value="$PROJECT_DIR$" />
<option name="packageName" value="${domain.basePackage}.mapper" />
</ModuleInfoGo>
</list>
</option>
<option name="needsComment" value="true" />
<option name="needsModel" value="true" />
<option name="relativePackage" value="domain" />
<option name="superClass" value="" />
<option name="tableUIInfoList">
<list>
<TableUIInfo>
<option name="className" value="DimDataSummary" />
<option name="tableName" value="dim_data_summary" />
</TableUIInfo>
</list>
</option>
<option name="templatesName" value="mybatis-plus3" />
</GenerateConfig>
</option>
<option name="moduleName" value="md-cdr-v1" />
<option name="projectPath" value="$PROJECT_DIR$" />
<option name="templateName" value="mybatis-plus3" />
</TemplateContext>
</option>
</component>
</project>
\ No newline at end of file
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) {
......
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<DimDataSummary> getAllDimDataSummary() {
List<DimDataSummaryEntity> entityList = dimDataSummaryMapper.selectAll();
return entityList.stream().map(this::convertToDimDataSummary).toList();
}
private DimDataSummary convertToDimDataSummary(DimDataSummaryEntity entity) {
Optional<LocalDateTime> timeOptional = TimeUtil.toLocalDateTime(entity.getUpdateTime());
return new DimDataSummary(
entity.getName(),
entity.getCode(),
entity.getValue(),
timeOptional.orElse(null)
);
}
}
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 {
/**
*
*/
......
package com.ediagnosis.cdr.mapper;
package com.ediagnosis.cdr.dao.mapper;
import com.ediagnosis.cdr.entity.DimDataSummary;
import com.ediagnosis.cdr.dao.entity.DimDataSummaryEntity;
import com.mybatisflex.core.BaseMapper;
import org.mybatis.spring.annotation.MapperScan;
public interface DimDataSummaryMapper extends BaseMapper<DimDataSummary> {
@MapperScan
public interface DimDataSummaryMapper extends BaseMapper<DimDataSummaryEntity> {
}
......
package com.ediagnosis.cdr.domain;
import java.time.LocalDateTime;
public record DimDataSummary(
String name,
String code,
String value,
LocalDateTime updateTime
) {
}
......@@ -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>T toObject(String json, Class<T> clazz) {
public static <T> Optional<T> toObject(String json, Class<T> 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<String> 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);
}
}
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<LocalDateTime> toLocalDateTime(String time) {
return parseTime(time, LocalDateTime.class, DATE_TIME_FORMATTER);
}
public static Optional<String> toString(LocalDateTime time) {
return formatTime(time,DATE_TIME_FORMATTER);
}
public static Optional<LocalDate> toLocalDate(String time) {
return parseTime(time, LocalDate.class, DATE_FORMATTER);
}
public static Optional<String> toString(LocalDate time) {
return formatTime(time,DATE_FORMATTER);
}
private static <T extends Temporal> Optional<T> parseTime(String time, Class<T> 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<String> 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();
}
}
}
......@@ -2,9 +2,9 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ediagnosis.cdr.mapper.DimDataSummaryMapper">
<mapper namespace="com.ediagnosis.cdr.dao.mapper.DimDataSummaryMapper">
<resultMap id="BaseResultMap" type="com.ediagnosis.cdr.entity.DimDataSummary">
<resultMap id="BaseResultMap" type="com.ediagnosis.cdr.dao.entity.DimDataSummaryEntity">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="code" column="code" />
......
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<Person> personOptional = JsonProcessor.toObject(json, Person.class);
Assert.isTrue(personOptional.isPresent(), "转换结果不应为空");
Person tmpPerson = personOptional.get();
Assert.isTrue(person.equals(tmpPerson), "转换后的对象与预期不一致");
}
@Test
void toJson() {
Optional<String> json = JsonProcessor.toJson(person);
Assert.isTrue(json.isPresent(), "转换结果不应为空");
Assert.isTrue(json.get().equals("{\"name\":\"张三\",\"age\":18}"), "转换结果与预期不一致");
}
}
\ No newline at end of file
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);
}
}
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<LocalDateTime> timeOptional = TimeUtil.toLocalDateTime(time);
Assert.isTrue(timeOptional.isPresent(), "时间不存在");
Assert.isTrue(localDateTime.equals(timeOptional.get()), "时间不相等");
}
@Test
void testToString() {
Optional<String> timeOptional = TimeUtil.toString(localDateTime);
Assert.isTrue(timeOptional.isPresent(), "时间不存在");
Assert.isTrue(time.equals(timeOptional.get()), "时间字符串不相等");
}
@Test
void toLocalDate() {
Optional<LocalDate> timeOptional = TimeUtil.toLocalDate(date);
Assert.isTrue(timeOptional.isPresent(), "时间不存在");
Assert.isTrue(localDate.equals(timeOptional.get()), "时间不相等");
}
@Test
void testDateToString() {
Optional<String> timeOptional = TimeUtil.toString(localDate);
Assert.isTrue(timeOptional.isPresent(), "时间不存在");
Assert.isTrue(date.equals(timeOptional.get()), "时间字符串不相等");
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment