修复请求日期问题。

develop-QA
Tom Li 3 months ago
parent 1dac2aff03
commit d19876cb46
  1. 5
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/ReviewSheet.java
  2. 32
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/request/ReviewSheetRedoScrapSearch.java
  3. 9
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/json/constant/JsonPattern.java
  4. 36
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/json/deserializer/DateBeginOfDayDeserializer.java
  5. 38
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/json/deserializer/DateEndOfDayDeserializer.java
  6. 64
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/json/deserializer/LocalDateTimeBeginOfDayDeserializer.java
  7. 63
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/json/deserializer/LocalDateTimeEndOfDayDeserializer.java
  8. 3
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/config/RoleConfig.java
  9. 24
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/util/StatusCountMap.java
  10. 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/listener/in/CycleTestListener.java
  11. 11
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/ReviewSheetMapper.xml

@ -412,4 +412,9 @@ public class ReviewSheet extends BaseEntity {
*/
@Schema(description = "是否已经保存-[1]:是;[0]否;")
private Integer hasSaved;
/**
* 提请审批时间
*/
@Schema(description = "提请审批时间")
private LocalDateTime toReviewDate;
}

@ -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;
}

@ -0,0 +1,9 @@
package org.springblade.desk.util.json.constant;
public interface JsonPattern {
/**
* 固定日期格式
*/
String DATE_PATTERN = "yyyy-MM-dd";
}

@ -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<Date> {
// 固定日期格式
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);
}
}

@ -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<Date> {
// 固定日期格式
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);
}
}

@ -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<LocalDateTime> {
/**
* 无参构造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);
}
}
}

@ -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<LocalDateTime> {
/**
* 无参构造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);
}
}
}

@ -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

@ -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);
}

@ -92,6 +92,7 @@ public class CycleTestListener extends AnalysisEventListener<CycleTestExcelImpor
String msg = MessageFormat.format("导入失败!第{0}行数据, 试验件材料 为空!", currentRowNum);
throw new RuntimeException(msg);
}
// todo: check
// if (data.getMinDoTestCount() > 0) {
// String msg = MessageFormat.format("第{0}行数据, 最小试验数量 无效!", currentRowNum);
// throw new RuntimeException(msg);

@ -50,6 +50,7 @@
<result column="POOR_DESC" property="poorDesc"/>
<result column="REF_WO_ID" property="refWoId"/>
<result column="HAS_SAVED" property="hasSaved"/>
<result column="TO_REVIEW_DATE" property="toReviewDate"/>
</resultMap>
<select id="selectReviewSheetPage" resultMap="reviewSheetResultMap">
@ -165,11 +166,17 @@
<if test="q.status != null">
AND rs.STATUS = #{q.status}
</if>
<if test="q.baseCreateTimeStart != null">
AND rs.CREATE_TIME &gt;= #{q.baseCreateTimeStart}
</if>
<if test="q.baseCreateTimeEnd != null">
AND rs.CREATE_TIME &lt;= #{q.baseCreateTimeEnd}
</if>
<if test="q.createTimeStart != null">
AND rs.CREATE_TIME &gt;= #{q.createTimeStart}
AND rs.TO_REVIEW_DATE &gt;= #{q.createTimeStart}
</if>
<if test="q.createTimeEnd != null">
AND rs.CREATE_TIME &lt;= #{q.createTimeEnd}
AND rs.TO_REVIEW_DATE &lt;= #{q.createTimeEnd}
</if>
<if test="q.reviewTimeStart != null">
AND rs.REVIEW_DATE &gt;= #{q.reviewTimeStart}

Loading…
Cancel
Save