diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/ReviewSheet.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/ReviewSheet.java index 1e23166d..84bb604b 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/ReviewSheet.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/ReviewSheet.java @@ -412,4 +412,9 @@ public class ReviewSheet extends BaseEntity { */ @Schema(description = "是否已经保存-[1]:是;[0]否;") private Integer hasSaved; + /** + * 提请审批时间 + */ + @Schema(description = "提请审批时间") + private LocalDateTime toReviewDate; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/request/ReviewSheetRedoScrapSearch.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/request/ReviewSheetRedoScrapSearch.java index 889bc7aa..0c0d4428 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/request/ReviewSheetRedoScrapSearch.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/request/ReviewSheetRedoScrapSearch.java @@ -1,10 +1,18 @@ package org.springblade.desk.quality.pojo.request; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; import org.springblade.desk.quality.pojo.entity.ReviewSheet; +import org.springblade.desk.util.json.deserializer.DateBeginOfDayDeserializer; +import org.springblade.desk.util.json.deserializer.DateEndOfDayDeserializer; +import org.springblade.desk.util.json.deserializer.LocalDateTimeBeginOfDayDeserializer; +import org.springblade.desk.util.json.deserializer.LocalDateTimeEndOfDayDeserializer; + +import java.time.LocalDateTime; +import java.util.Date; /** * 返工审理 报废审理 搜索 @@ -14,10 +22,24 @@ import org.springblade.desk.quality.pojo.entity.ReviewSheet; @ToString(callSuper = true) public class ReviewSheetRedoScrapSearch extends ReviewSheet { + /** + * 使用 toReviewDate 字段 + */ @Schema(description = "创建提请时间-开始") - private String createTimeStart; + @JsonDeserialize(using = LocalDateTimeBeginOfDayDeserializer.class) + private LocalDateTime createTimeStart; + /** + * 使用 toReviewDate 字段 + */ @Schema(description = "创建提请时间-结束") - private String createTimeEnd; + @JsonDeserialize(using = LocalDateTimeEndOfDayDeserializer.class) + private LocalDateTime createTimeEnd; + @Schema(description = "创建时间-开始") + @JsonDeserialize(using = DateBeginOfDayDeserializer.class) + private Date baseCreateTimeStart; + @Schema(description = "创建时间-结束") + @JsonDeserialize(using = DateEndOfDayDeserializer.class) + private Date baseCreateTimeEnd; @Schema(description = "提请人员[用户]真名") private String createUserRealName; @Schema(description = "审理[用户]真名") @@ -27,7 +49,9 @@ public class ReviewSheetRedoScrapSearch extends ReviewSheet { @Schema(description = "供应商名称") private String oemName; @Schema(description = "审理时间-开始") - private String reviewTimeStart; + @JsonDeserialize(using = LocalDateTimeBeginOfDayDeserializer.class) + private LocalDateTime reviewTimeStart; @Schema(description = "审理时间-结束") - private String reviewTimeEnd; + @JsonDeserialize(using = LocalDateTimeEndOfDayDeserializer.class) + private LocalDateTime reviewTimeEnd; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/json/constant/JsonPattern.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/json/constant/JsonPattern.java new file mode 100644 index 00000000..63236b46 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/json/constant/JsonPattern.java @@ -0,0 +1,9 @@ +package org.springblade.desk.util.json.constant; + +public interface JsonPattern { + + /** + * 固定日期格式 + */ + String DATE_PATTERN = "yyyy-MM-dd"; +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/json/deserializer/DateBeginOfDayDeserializer.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/json/deserializer/DateBeginOfDayDeserializer.java index 8e9632d3..2601d0ae 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/json/deserializer/DateBeginOfDayDeserializer.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/json/deserializer/DateBeginOfDayDeserializer.java @@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUtil; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import org.springblade.desk.util.json.constant.JsonPattern; import java.io.IOException; import java.util.Date; @@ -14,37 +15,48 @@ import java.util.Date; */ public class DateBeginOfDayDeserializer extends StdDeserializer { - // 固定日期格式 - private static final String DATE_PATTERN = "yyyy-MM-dd"; - // 无参构造(Jackson要求) + /** + * 无参构造(Jackson要求) + */ public DateBeginOfDayDeserializer() { this(null); } - // 带类型构造 + /** + * 带类型构造 + * + * @param vc + */ public DateBeginOfDayDeserializer(Class vc) { super(vc); } + /** + * + * @param jsonParser Parser used for reading JSON content + * @param ctx Context that can be used to access information about + * this deserialization activity. + * @return + * @throws IOException + */ @Override public Date deserialize(JsonParser jsonParser, DeserializationContext ctx) throws IOException { - // 1. 获取JSON中的字符串值(如:2026-01-01) + // 获取JSON中的字符串值(如:2026-01-01) String dateStr = jsonParser.getText().trim(); - - // 2. 空值处理(避免空指针) + // 空值处理(避免空指针) if (dateStr.isEmpty() || dateStr.equals("null")) { return null; } try { - // 3. Hutool解析字符串为DateTime - DateTime dateTime = DateUtil.parse(dateStr, DATE_PATTERN); - // 4. 转为当天开始时间(00:00:00) + // hutool解析字符串为DateTime + DateTime dateTime = DateUtil.parse(dateStr, JsonPattern.DATE_PATTERN); + // 转为当天开始时间(00:00:00) DateTime beginOfDay = DateUtil.beginOfDay(dateTime); - // 5. 转换为java.util.Date(适配Oracle DATE 7) + // 转换为java.util.Date return beginOfDay.toJdkDate(); } catch (Exception e) { - // 6. 解析失败时抛出友好异常 + // 解析失败时抛出友好异常 throw new IOException("日期格式错误,仅支持yyyy-MM-dd格式(如:2026-01-01)", e); } } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/json/deserializer/DateEndOfDayDeserializer.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/json/deserializer/DateEndOfDayDeserializer.java index 48c4a712..09aa971e 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/json/deserializer/DateEndOfDayDeserializer.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/json/deserializer/DateEndOfDayDeserializer.java @@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUtil; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import org.springblade.desk.util.json.constant.JsonPattern; import java.io.IOException; import java.util.Date; @@ -14,38 +15,47 @@ import java.util.Date; */ public class DateEndOfDayDeserializer extends StdDeserializer { - // 固定日期格式 - private static final String DATE_PATTERN = "yyyy-MM-dd"; - - // 无参构造(Jackson要求) + /** + * 无参构造(Jackson要求) + */ public DateEndOfDayDeserializer() { this(null); } - // 带类型构造 + /** + * 带类型构造 + * + * @param vc + */ public DateEndOfDayDeserializer(Class vc) { super(vc); } + /** + * + * @param jsonParser Parser used for reading JSON content + * @param ctx Context that can be used to access information about + * this deserialization activity. + * @return + * @throws IOException + */ @Override public Date deserialize(JsonParser jsonParser, DeserializationContext ctx) throws IOException { - // 1. 获取JSON中的字符串值(如:2026-01-01) + // 获取JSON中的字符串值(如:2026-01-01) String dateStr = jsonParser.getText().trim(); - - // 2. 空值处理(避免空指针) + // 空值处理(避免空指针) if (dateStr.isEmpty() || dateStr.equals("null")) { return null; } - try { - // 3. Hutool解析字符串为DateTime - DateTime dateTime = DateUtil.parse(dateStr, DATE_PATTERN); - // 4. 转为当天结束时间(23:59:59.999,不影响Oracle查询) + // hutool解析字符串为DateTime + DateTime dateTime = DateUtil.parse(dateStr, JsonPattern.DATE_PATTERN); + // 转为当天结束时间(23:59:59.999,不影响Oracle查询) DateTime endOfDay = DateUtil.endOfDay(dateTime); - // 5. 转换为java.util.Date(适配Oracle DATE 7) + // 转换为java.util.Date return endOfDay.toJdkDate(); } catch (Exception e) { - // 6. 解析失败时抛出友好异常 + // 解析失败时抛出友好异常 throw new IOException("日期格式错误,仅支持yyyy-MM-dd格式(如:2026-01-01)", e); } } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/json/deserializer/LocalDateTimeBeginOfDayDeserializer.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/json/deserializer/LocalDateTimeBeginOfDayDeserializer.java new file mode 100644 index 00000000..9ccbb1fc --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/json/deserializer/LocalDateTimeBeginOfDayDeserializer.java @@ -0,0 +1,64 @@ +package org.springblade.desk.util.json.deserializer; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import org.springblade.desk.util.json.constant.JsonPattern; + +import java.io.IOException; +import java.time.LocalDateTime; +import java.util.Date; + +/** + * 自定义LocalDateTime反序列化器:将yyyy-MM-dd字符串转为当天开始时间(00:00:00)的Date对象 + */ +public class LocalDateTimeBeginOfDayDeserializer extends StdDeserializer { + + + /** + * 无参构造(Jackson要求) + */ + public LocalDateTimeBeginOfDayDeserializer() { + this(null); + } + + /** + * 带类型构造 + * + * @param vc + */ + public LocalDateTimeBeginOfDayDeserializer(Class vc) { + super(vc); + } + + /** + * + * @param jsonParser Parser used for reading JSON content + * @param ctx Context that can be used to access information about + * this deserialization activity. + * @return + * @throws IOException + */ + @Override + public LocalDateTime deserialize(JsonParser jsonParser, DeserializationContext ctx) throws IOException { + // 获取JSON中的字符串值(如:2026-01-01) + String dateStr = jsonParser.getText().trim(); + // 空值处理(避免空指针) + if (dateStr.isEmpty() || dateStr.equals("null")) { + return null; + } + try { + // hutool解析字符串为DateTime + DateTime dateTime = DateUtil.parse(dateStr, JsonPattern.DATE_PATTERN); + // 转为当天开始时间(00:00:00) + DateTime beginOfDay = DateUtil.beginOfDay(dateTime); + // 转换为java.time.LocalDateTime + return beginOfDay.toLocalDateTime(); + } catch (Exception e) { + // 解析失败时抛出友好异常 + throw new IOException("日期格式错误,仅支持yyyy-MM-dd格式(如:2026-01-01)", e); + } + } +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/json/deserializer/LocalDateTimeEndOfDayDeserializer.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/json/deserializer/LocalDateTimeEndOfDayDeserializer.java new file mode 100644 index 00000000..3311ab76 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/json/deserializer/LocalDateTimeEndOfDayDeserializer.java @@ -0,0 +1,63 @@ +package org.springblade.desk.util.json.deserializer; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import org.springblade.desk.util.json.constant.JsonPattern; + +import java.io.IOException; +import java.time.LocalDateTime; + +/** + * 自定义LocalDateTime反序列化器:将yyyy-MM-dd字符串转为当天结束时间(23:59:59)的Date对象 + */ +public class LocalDateTimeEndOfDayDeserializer extends StdDeserializer { + + + /** + * 无参构造(Jackson要求) + */ + public LocalDateTimeEndOfDayDeserializer() { + this(null); + } + + /** + * 带类型构造 + * + * @param vc + */ + public LocalDateTimeEndOfDayDeserializer(Class vc) { + super(vc); + } + + /** + * + * @param jsonParser Parser used for reading JSON content + * @param ctx Context that can be used to access information about + * this deserialization activity. + * @return + * @throws IOException + */ + @Override + public LocalDateTime deserialize(JsonParser jsonParser, DeserializationContext ctx) throws IOException { + // 获取JSON中的字符串值(如:2026-01-01) + String dateStr = jsonParser.getText().trim(); + // 空值处理(避免空指针) + if (dateStr.isEmpty() || dateStr.equals("null")) { + return null; + } + try { + // hutool解析字符串为DateTime + DateTime dateTime = DateUtil.parse(dateStr, JsonPattern.DATE_PATTERN); + // 转为当天结束时间(23:59:59.999,不影响Oracle查询) + DateTime beginOfDay = DateUtil.endOfDay(dateTime); + // 转换为java.time.LocalDateTime + return beginOfDay.toLocalDateTime(); + } catch (Exception e) { + // 解析失败时抛出友好异常 + throw new IOException("日期格式错误,仅支持yyyy-MM-dd格式(如:2026-01-01)", e); + } + } +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/config/RoleConfig.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/config/RoleConfig.java index 84ca5e7b..e88a7a6c 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/config/RoleConfig.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/config/RoleConfig.java @@ -4,6 +4,9 @@ import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; +/** + * 角色配置对象。 + */ @Component @ConfigurationProperties(prefix = "role-config") @Data diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/util/StatusCountMap.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/util/StatusCountMap.java index 88424719..fb8b5081 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/util/StatusCountMap.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/util/StatusCountMap.java @@ -16,15 +16,27 @@ public class StatusCountMap { private static final Integer COUNT_DEFAULT = 0; /** - * 状态加一 + * status +1 * * @param status * @return */ public int add1(Integer status) { - int newCount = map.getOrDefault(status, 0); - newCount = newCount + 1; - map.put(status, newCount); + add(status, 1); + return map.get(status); + } + + /** + * status +add + * + * @param status + * @param add + * @return + */ + public int add(Integer status, Integer add) { + int count = map.getOrDefault(status, 0); + count = count + add; + map.put(status, count); return map.get(status); } @@ -32,6 +44,10 @@ public class StatusCountMap { map.put(status, 0); } + public void clearAll() { + map = new HashMap<>(); + } + public int get(Integer status) { return map.getOrDefault(status, 0); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/listener/in/CycleTestListener.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/listener/in/CycleTestListener.java index 146cae4b..d3879c28 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/listener/in/CycleTestListener.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/listener/in/CycleTestListener.java @@ -92,6 +92,7 @@ public class CycleTestListener extends AnalysisEventListener 0) { // String msg = MessageFormat.format("第{0}行数据, 最小试验数量 无效!", currentRowNum); // throw new RuntimeException(msg); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/ReviewSheetMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/ReviewSheetMapper.xml index d377fa3f..4d47f7f9 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/ReviewSheetMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/ReviewSheetMapper.xml @@ -50,6 +50,7 @@ +