feat: 升级Date

This commit is contained in:
wangyu 2024-06-25 10:49:11 +08:00
parent c662fa1c65
commit 4dfe06ffb2
25 changed files with 139 additions and 66 deletions

View File

@ -5,6 +5,7 @@ import com.flyfish.framework.approval.enums.ApproveAction;
import com.flyfish.framework.domain.base.Vo;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.Optional;
@ -23,7 +24,7 @@ public class ApproveRecordListVo implements Vo<ApproveRecord> {
private String approver;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
private Date approveTime;
private LocalDateTime approveTime;
private String action;

View File

@ -5,6 +5,7 @@ import com.flyfish.framework.approval.domain.record.ApproveRecord;
import com.flyfish.framework.domain.base.Vo;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.Date;
/**
@ -24,7 +25,7 @@ public class ApprovalListVo implements Vo<ApproveRecord> {
private String dataId;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
private Date createTime;
private LocalDateTime createTime;
private String creator;

View File

@ -3,7 +3,7 @@ package com.flyfish.framework.backup.domain;
import com.flyfish.framework.annotations.Property;
import lombok.Data;
import java.util.Date;
import java.time.LocalDateTime;
/**
* 版本号实体
@ -23,5 +23,5 @@ public class Version {
private String script;
@Property("创建时间")
private Date time;
private LocalDateTime time;
}

View File

@ -2,6 +2,7 @@ package com.flyfish.framework.backup.scheduler;
import com.alibaba.fastjson.JSON;
import com.flyfish.framework.backup.domain.Backup;
import com.flyfish.framework.context.DateContext;
import com.flyfish.framework.domain.base.DomainService;
import com.flyfish.framework.query.Query;
import com.flyfish.framework.repository.ReactiveEntityOperations;
@ -28,7 +29,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.Date;
import java.time.LocalDateTime;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicLong;
@ -82,7 +83,7 @@ public class BackupScheduler {
String parent = createIfNotExists(backupPath + "/" + code);
// 开始备份先构造一个指示器
Backup backup = new Backup();
backup.setCreateTime(new Date());
backup.setCreateTime(LocalDateTime.now());
backup.setCreator("系统");
backup.setCode(code);
backup.setStatus(Backup.Status.RUNNING);
@ -116,7 +117,7 @@ public class BackupScheduler {
})
.then(Mono.defer(() -> {
backup.setLog("成功备份");
backup.setPeriod(new Date().getTime() - backup.getCreateTime().getTime());
backup.setPeriod(DateContext.distance(backup.getCreateTime(), LocalDateTime.now()));
backup.setStatus(Backup.Status.SUCCESS);
backup.setSize(DataSize.ofBytes(sizeCounter.get()).toKilobytes() + "KB");
return operations.save(backup);
@ -126,7 +127,7 @@ public class BackupScheduler {
}, e -> {
backup.setStatus(Backup.Status.FAILED);
backup.setLog(e.getMessage());
backup.setPeriod(new Date().getTime() - backup.getCreateTime().getTime());
backup.setPeriod(DateContext.distance(backup.getCreateTime(), LocalDateTime.now()));
operations.save(backup).subscribe();
});

View File

@ -5,6 +5,9 @@ import org.springframework.stereotype.Component;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@ -20,6 +23,7 @@ public class DateContext {
private static DateContext instance;
private ThreadLocal<DateFormat> formatThreadLocal = new ThreadLocal<>();
private ThreadLocal<Map<String, DateFormat>> mapThreadLocal = new ThreadLocal<>();
private static final ZoneId zoneId = ZoneId.of("Asia/Shanghai");
public DateContext() {
instance = this;
@ -29,6 +33,19 @@ public class DateContext {
return instance;
}
public static LocalDateTime ofMillis(long millis) {
Instant instant = Instant.ofEpochMilli(millis);
return LocalDateTime.ofInstant(instant, zoneId);
}
public static long toMillis(LocalDateTime localDateTime) {
return localDateTime.atZone(zoneId).toInstant().toEpochMilli();
}
public static long distance(LocalDateTime start, LocalDateTime end) {
return toMillis(end) - toMillis(start);
}
public static DateFormat simpleFormat() {
DateFormat format = instance.formatThreadLocal.get();
if (format == null) {

View File

@ -1,22 +0,0 @@
package com.flyfish.framework.query.spi;
import com.flyfish.framework.query.QueryChain;
import com.flyfish.framework.utils.Supportable;
/**
* 查询链创建抽象泛型工厂
* 基于spi提供实现类最终返回真正实例化的内容
* 根据引入的jar包自动加载无需手动处理
*
* @author wangyu
*/
public interface QueryChainFactory<C extends QueryChain<C, ?>> extends Supportable<Class<?>> {
/**
* 生产适配器
* 此接口为高度抽象接口目的是兼容更多的查询链类型便于后续扩展
*
* @return 生产结果
*/
C produce();
}

View File

@ -8,7 +8,7 @@ import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import java.util.Date;
import java.time.LocalDateTime;
/**
* 需要审查的domain修改和更新指定人
@ -24,14 +24,14 @@ public abstract class AuditDomain extends Domain {
*/
@CreatedDate
@Property(value = "创建日期", readonly = true)
protected Date createTime;
protected LocalDateTime createTime;
/**
* 修改日期
*/
@LastModifiedDate
@Property(value = "更新日期", readonly = true)
protected Date modifyTime;
protected LocalDateTime modifyTime;
/**
* 创建者

View File

@ -6,7 +6,7 @@ import com.flyfish.framework.domain.po.User;
import com.flyfish.framework.enums.UserStatus;
import com.flyfish.framework.enums.UserType;
import java.util.Date;
import java.time.LocalDateTime;
import java.util.List;
public interface IUser {
@ -51,9 +51,9 @@ public interface IUser {
void setApp(Boolean app);
Date getValidDate();
LocalDateTime getValidDate();
void setValidDate(Date validDate);
void setValidDate(LocalDateTime validDate);
List<Department> getDepartments();

View File

@ -13,6 +13,7 @@ import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
@ -68,7 +69,7 @@ public class User extends AuditDomain implements IUser {
* 有效期
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date validDate;
private LocalDateTime validDate;
/**
* 可操作校区
@ -106,7 +107,7 @@ public class User extends AuditDomain implements IUser {
/**
* 上次登录日期
*/
private Date lastTime;
private LocalDateTime lastTime;
@Override
public User toUser() {

View File

@ -29,5 +29,10 @@
<groupId>com.flyfish.framework</groupId>
<artifactId>flyfish-data-common</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>

View File

@ -5,9 +5,10 @@ import com.flyfish.framework.r2dbc.operations.R2dbcReactiveEntityOperations;
import com.flyfish.framework.r2dbc.repository.factory.DefaultReactiveRepositoryFactoryBean;
import com.flyfish.framework.r2dbc.repository.impl.DefaultReactiveRepositoryImpl;
import com.flyfish.framework.repository.ReactiveEntityOperations;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.data.r2dbc.R2dbcDataAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mapping.callback.EntityCallback;
import org.springframework.data.r2dbc.config.EnableR2dbcAuditing;
import org.springframework.data.r2dbc.core.R2dbcEntityOperations;
@ -23,7 +24,7 @@ import org.springframework.data.r2dbc.repository.config.EnableR2dbcRepositories;
repositoryBaseClass = DefaultReactiveRepositoryImpl.class
)
@EnableR2dbcAuditing
@Configuration
@AutoConfiguration(after = R2dbcDataAutoConfiguration.class)
public class R2dbcDataConfig {
@Bean

View File

@ -3,7 +3,6 @@ package com.flyfish.framework.r2dbc.config.annotations;
import com.flyfish.framework.r2dbc.repository.factory.DefaultReactiveRepositoryFactoryBean;
import com.flyfish.framework.r2dbc.repository.impl.DefaultReactiveRepositoryImpl;
import org.springframework.core.annotation.AliasFor;
import org.springframework.data.r2dbc.config.EnableR2dbcAuditing;
import org.springframework.data.r2dbc.repository.config.EnableR2dbcRepositories;
import java.lang.annotation.*;
@ -17,7 +16,6 @@ import java.lang.annotation.*;
repositoryFactoryBeanClass = DefaultReactiveRepositoryFactoryBean.class,
repositoryBaseClass = DefaultReactiveRepositoryImpl.class
)
@EnableR2dbcAuditing
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented

View File

@ -0,0 +1,33 @@
package com.flyfish.framework.r2dbc;
import com.flyfish.framework.query.Queries;
import com.flyfish.framework.r2dbc.config.R2dbcDataConfig;
import com.flyfish.framework.r2dbc.config.annotations.EnableR2dbcRepo;
import com.flyfish.framework.r2dbc.repository.TestDO;
import com.flyfish.framework.r2dbc.repository.TestQO;
import com.flyfish.framework.r2dbc.repository.TestRepository;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Import;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import javax.annotation.Resource;
import java.util.Arrays;
@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = R2DbcRepositoryTest.class)
@EnableR2dbcRepo(basePackages = "com.flyfish.framework.r2dbc.repository")
@Import(R2dbcDataConfig.class)
public class R2DbcRepositoryTest {
@Resource
private TestRepository testRepository;
@Test
public void test() {
TestQO qo = new TestQO();
qo.setIds(Arrays.asList("1", "2"));
testRepository.findAll(qo).subscribe(System.out::println);
}
}

View File

@ -0,0 +1,11 @@
package com.flyfish.framework.r2dbc.repository;
import com.flyfish.framework.domain.base.AuditDomain;
import lombok.Data;
import org.springframework.data.relational.core.mapping.Table;
@Table("test")
@Data
public class TestDO extends AuditDomain {
}

View File

@ -0,0 +1,7 @@
package com.flyfish.framework.r2dbc.repository;
import com.flyfish.framework.domain.base.NameLikeQo;
public class TestQO extends NameLikeQo<TestDO> {
}

View File

@ -0,0 +1,9 @@
package com.flyfish.framework.r2dbc.repository;
import com.flyfish.framework.repository.DefaultReactiveRepository;
/**
* 测试仓库
*/
public interface TestRepository extends DefaultReactiveRepository<TestDO> {
}

View File

@ -0,0 +1,5 @@
spring:
r2dbc:
url: r2dbc:mysql://192.168.33.205:3306/test?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true
username: root
password: baiewf9XMq5K9Z2LiCXZ

View File

@ -6,7 +6,7 @@ import lombok.EqualsAndHashCode;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.relational.core.mapping.Table;
import java.util.Date;
import java.time.LocalDateTime;
/**
* 日志集合
@ -45,10 +45,10 @@ public class Log extends Domain {
private Long period;
// 操作时间
private Date startTime;
private LocalDateTime startTime;
// 完成时间
private Date endTime;
private LocalDateTime endTime;
// 操作人
private String operator;

View File

@ -1,6 +1,7 @@
package com.flyfish.framework.logging.service;
import com.alibaba.fastjson.JSON;
import com.flyfish.framework.context.DateContext;
import com.flyfish.framework.logging.config.LoggingTextRegistry;
import com.flyfish.framework.logging.domain.Log;
import com.flyfish.framework.logging.domain.LogType;
@ -10,7 +11,6 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.DisposableBean;
import javax.annotation.Resource;
import java.util.Date;
import java.util.Optional;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@ -52,8 +52,8 @@ public class LogManager implements DisposableBean {
log.setOperator(context.getUser());
log.setSignature(context.getSignature());
log.setPeriod(context.getEndTime() - context.getStartTime());
log.setStartTime(new Date(context.getStartTime()));
log.setEndTime(new Date(context.getEndTime()));
log.setStartTime(DateContext.ofMillis(context.getStartTime()));
log.setEndTime(DateContext.ofMillis(context.getEndTime()));
// 先不拼接
log.setUri(null);
// 写入日志

View File

@ -14,7 +14,7 @@ import org.springframework.stereotype.Service;
import reactor.core.publisher.Mono;
import javax.annotation.Resource;
import java.util.Date;
import java.time.LocalDateTime;
import java.util.Optional;
/**
@ -80,7 +80,7 @@ public class SimpleAuthenticationLogger implements AuthenticationLogger {
log.setResponse(message);
log.setOperator(Optional.ofNullable(raw).map(Domain::getName).orElse("未知"));
log.setPeriod(0L);
log.setStartTime(new Date());
log.setStartTime(LocalDateTime.now());
// 写入日志
return logService.create(log).then();
}
@ -104,7 +104,7 @@ public class SimpleAuthenticationLogger implements AuthenticationLogger {
log.setResponse(message);
log.setOperator(user.getName());
log.setPeriod(0L);
log.setStartTime(new Date());
log.setStartTime(LocalDateTime.now());
// 写入日志
return logService.create(log).then();
}

View File

@ -14,7 +14,7 @@ import org.springframework.security.web.server.WebFilterExchange;
import reactor.core.publisher.Mono;
import javax.annotation.Resource;
import java.util.Date;
import java.time.LocalDateTime;
/**
* 提供对象写入登录登出审计
@ -39,7 +39,7 @@ public class AuthenticationAuditorImpl extends ResultDataTransformer implements
User updating = new User();
updating.setId(details.getId());
updating.setErrorCount(0);
updating.setLastTime(new Date());
updating.setLastTime(LocalDateTime.now());
return userService.updateSelectiveById(updating).then(authenticationLogger.success(user));
}

View File

@ -19,6 +19,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import java.time.LocalDateTime;
import java.util.*;
/**
@ -77,7 +78,7 @@ public class AdminUserDetails implements UserDetails, IUser, AuthorizedUserDetai
* 有效期
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date validDate;
private LocalDateTime validDate;
/**
* 可操作校区
*/
@ -139,7 +140,7 @@ public class AdminUserDetails implements UserDetails, IUser, AuthorizedUserDetai
@Override
@JsonIgnore
public boolean isCredentialsNonExpired() {
return null == validDate || validDate.after(new Date());
return null == validDate || validDate.isBefore(LocalDateTime.now());
}
@JsonIgnore

View File

@ -21,7 +21,7 @@ import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import javax.annotation.Resource;
import java.security.Key;
import javax.crypto.SecretKey;
import java.time.Duration;
import java.util.Arrays;
import java.util.Collection;
@ -49,7 +49,7 @@ public class TokenProvider implements InitializingBean {
@Resource
private JwtProperties jwtProperties;
private Key key;
private SecretKey key;
public TokenProvider(JwtProperties jwtProperties) {
this.remember = jwtProperties.isRemember();
@ -134,11 +134,11 @@ public class TokenProvider implements InitializingBean {
Date validity = new Date(now + duration);
return Jwts.builder()
.setSubject(authentication.getName())
.setId(UUIDUtils.generateShortUuid())
.subject(authentication.getName())
.id(UUIDUtils.generateShortUuid())
.claim(AUTHORITIES_KEY, authorities)
.signWith(key, SignatureAlgorithm.HS512)
.setExpiration(validity)
.signWith(key)
.expiration(validity)
.compact();
}
@ -167,11 +167,11 @@ public class TokenProvider implements InitializingBean {
* @return 结果
*/
public Claims parseToken(String token) {
return Jwts.parserBuilder()
.setSigningKey(key)
return Jwts.parser()
.decryptWith(key)
.build()
.parseClaimsJws(token)
.getBody();
.parseEncryptedClaims(token)
.getPayload();
}
private String getCacheKey(String jti) {

4
lombok.config Normal file
View File

@ -0,0 +1,4 @@
config.stopBubbling = true
lombok.tostring.callsuper=CALL
lombok.equalsandhashcode.callsuper=CALL
lombok.accessors.chain=false

View File

@ -25,7 +25,7 @@
<java.version>1.8</java.version>
<jasypt.version>3.0.3</jasypt.version>
<spring-cloud.version>Finchley.SR1</spring-cloud.version>
<jjwt.version>0.11.0</jjwt.version>
<jjwt.version>0.12.6</jjwt.version>
<reflection.version>0.10.2</reflection.version>
<r2dbc-mysql.version>1.1.3</r2dbc-mysql.version>
<flatten-maven-plugin.version>1.5.0</flatten-maven-plugin.version>