账单bug修复,以及加入转单号功能

This commit is contained in:
caojia
2026-09-21 17:59:09 +08:00
parent 81bc69c268
commit 6e07d9a98b
18 changed files with 366 additions and 53 deletions
@@ -0,0 +1,49 @@
package com.ruoyi.common.config.serializer;
import java.io.IOException;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.time.format.ResolverStyle;
import java.util.Date;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.exc.InvalidFormatException;
/**
* 严格解析 yyyy-MM-dd 日期,避免 SimpleDateFormat 的宽松解析把非法日期自动滚动成其他日期。
*/
public class StrictDateDeserializer extends JsonDeserializer<Date>
{
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("uuuu-MM-dd")
.withResolverStyle(ResolverStyle.STRICT);
@Override
public Date deserialize(JsonParser parser, DeserializationContext context) throws IOException
{
if (!parser.hasToken(JsonToken.VALUE_STRING))
{
throw InvalidFormatException.from(parser, "日期必须使用 yyyy-MM-dd 格式", parser.getValueAsString(), Date.class);
}
String value = parser.getText();
if (value == null || value.trim().isEmpty())
{
return null;
}
try
{
LocalDate date = LocalDate.parse(value.trim(), FORMATTER);
return Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant());
}
catch (DateTimeParseException ex)
{
throw InvalidFormatException.from(parser, "日期必须是有效的 yyyy-MM-dd 日期", value, Date.class);
}
}
}