From 4ea6a1b8a3b586932ac9821bb29ba839dee29c40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Tue, 12 Aug 2025 13:14:25 +0800 Subject: [PATCH] =?UTF-8?q?refactor(datetime):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E7=B1=BB=E5=9E=8B=E4=B8=8D=E5=8C=B9=E9=85=8D?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 DateUtil.date() 替换为 LocalDateTime.now() - 更新时间设置和比较的相关代码 - 修复了多个文件中的时间类型不匹配问题- 添加了最终时间类型兼容性验证脚本 --- final_datetime_verification.sh | 99 +++++++++++++++++++ .../bszx/controller/BszxPayController.java | 2 +- .../hjm/service/GpsMessageProcessor.java | 7 +- .../hjm/service/impl/HjmCarServiceImpl.java | 3 +- .../impl/HouseViewsLogServiceImpl.java | 2 +- .../controller/ProjectRenewController.java | 4 +- .../service/impl/ProjectServiceImpl.java | 6 +- 7 files changed, 113 insertions(+), 10 deletions(-) create mode 100755 final_datetime_verification.sh diff --git a/final_datetime_verification.sh b/final_datetime_verification.sh new file mode 100755 index 0000000..6b818ab --- /dev/null +++ b/final_datetime_verification.sh @@ -0,0 +1,99 @@ +#!/bin/bash + +echo "=== 最终时间类型兼容性验证 ===" +echo + +echo "1. 检查所有可能的类型不匹配问题..." + +echo " ❌ 查找 Date 变量接收 LocalDateTime 的问题:" +find src/main/java -name "*.java" -exec grep -Hn "Date.*=.*get.*Time()" {} \; | grep -v "new Date" | grep -v "//" + +echo " ❌ 查找 setXxxTime(DateUtil.xxx) 问题:" +find src/main/java -name "*.java" -exec grep -Hn "\.set.*Time(DateUtil\." {} \; | grep -v "//" + +echo " ❌ 查找 LocalDateTime.compareTo(DateUtil.date()) 问题:" +find src/main/java -name "*.java" -exec grep -Hn "\.compareTo(DateUtil\.date())" {} \; | grep -v "//" + +echo " ❌ 查找 DateUtil.offsetXxx(...).compareTo(DateUtil.date()) 问题:" +find src/main/java -name "*.java" -exec grep -Hn "DateUtil\.offset.*\.compareTo(DateUtil\.date())" {} \; | grep -v "//" + +echo +echo "2. 验证已修复的关键文件..." + +files=( + "src/main/java/com/gxwebsoft/oa/service/impl/OaAssetsSslServiceImpl.java:LocalDateTime now" + "src/main/java/com/gxwebsoft/shop/service/impl/ShopOrderServiceImpl.java:setPayTime(LocalDateTime.now())" + "src/main/java/com/gxwebsoft/project/service/impl/ProjectServiceImpl.java:final LocalDateTime expirationTime" + "src/main/java/com/gxwebsoft/project/controller/ProjectRenewController.java:final LocalDateTime expirationTime" + "src/main/java/com/gxwebsoft/cms/service/impl/CmsWebsiteServiceImpl.java:setExpirationTime(LocalDateTime.now().plusMonths(1))" + "src/main/java/com/gxwebsoft/shop/controller/ShopOrderController.java:setPayTime(LocalDateTime.now())" + "src/main/java/com/gxwebsoft/common/system/controller/CompanyController.java:LocalDateTime now" + "src/main/java/com/gxwebsoft/cms/controller/CmsWebsiteController.java:LocalDateTime now" + "src/main/java/com/gxwebsoft/bszx/controller/BszxPayController.java:setExpirationTime(LocalDateTime.now().plusYears(10))" +) + +for item in "${files[@]}"; do + file=$(echo "$item" | cut -d':' -f1) + pattern=$(echo "$item" | cut -d':' -f2) + + echo " 检查 $file" + if grep -q "$pattern" "$file"; then + echo " ✅ 已正确修复" + else + echo " ❌ 需要检查: $pattern" + fi +done + +echo +echo "3. 统计修复情况..." + +total_java_files=$(find src/main/java -name "*.java" | wc -l) +localdatetime_files=$(find src/main/java -name "*.java" -exec grep -l "LocalDateTime" {} \; | wc -l) +entity_files=$(find src/main/java -path "*/entity/*" -name "*.java" | wc -l) +entity_localdatetime_files=$(find src/main/java -path "*/entity/*" -name "*.java" -exec grep -l "LocalDateTime" {} \; | wc -l) + +echo " 总Java文件数: $total_java_files" +echo " 使用LocalDateTime的文件数: $localdatetime_files" +echo " 实体类文件数: $entity_files" +echo " 使用LocalDateTime的实体类数: $entity_localdatetime_files" + +if [ "$entity_localdatetime_files" -gt 0 ]; then + percentage=$((entity_localdatetime_files * 100 / entity_files)) + echo " 实体类LocalDateTime使用率: ${percentage}%" +fi + +echo +echo "4. 检查证书服务修复状态..." + +if grep -q "convertToLocalDateTime" src/main/java/com/gxwebsoft/common/core/service/CertificateService.java; then + echo " ✅ CertificateService.java - 类型转换方法已添加" +else + echo " ❌ CertificateService.java - 需要检查" +fi + +echo +echo "=== 验证结果 ===" + +# 统计可能的问题 +type_mismatch_count=$(find src/main/java -name "*.java" -exec grep -c "Date.*=.*get.*Time()" {} \; | awk '{sum += $1} END {print sum+0}') +dateutil_setter_count=$(find src/main/java -name "*.java" -exec grep -c "\.set.*Time(DateUtil\." {} \; | awk '{sum += $1} END {print sum+0}') +compare_issues_count=$(find src/main/java -name "*.java" -exec grep -c "\.compareTo(DateUtil\.date())" {} \; | awk '{sum += $1} END {print sum+0}') + +total_issues=$((type_mismatch_count + dateutil_setter_count + compare_issues_count)) + +if [ "$total_issues" -eq 0 ]; then + echo "🎉 所有时间类型兼容性问题已修复!" + echo "✅ 项目已成功统一使用LocalDateTime" + echo "✅ 可以安全地进行编译和测试" +else + echo "⚠️ 还有 $total_issues 个潜在问题需要检查" + echo " - 类型不匹配: $type_mismatch_count" + echo " - DateUtil setter调用: $dateutil_setter_count" + echo " - 比较问题: $compare_issues_count" +fi + +echo +echo "建议:" +echo "1. 运行项目编译检查是否有编译错误" +echo "2. 运行单元测试确保功能正常" +echo "3. 特别测试时间相关的功能(过期检查、时间设置等)" diff --git a/src/main/java/com/gxwebsoft/bszx/controller/BszxPayController.java b/src/main/java/com/gxwebsoft/bszx/controller/BszxPayController.java index 15c824e..c170096 100644 --- a/src/main/java/com/gxwebsoft/bszx/controller/BszxPayController.java +++ b/src/main/java/com/gxwebsoft/bszx/controller/BszxPayController.java @@ -289,7 +289,7 @@ public class BszxPayController extends BaseController { // 2. 未支付则处理更新订单状态 if (order.getPayStatus().equals(false)) { // 5. TODO 处理订单状态 - order.setPayTime(DateUtil.date()); + order.setPayTime(LocalDateTime.now()); order.setPayStatus(true); order.setTransactionId(transactionId); order.setPayPrice(new BigDecimal(NumberUtil.decimalFormat("0.00", total * 0.01))); diff --git a/src/main/java/com/gxwebsoft/hjm/service/GpsMessageProcessor.java b/src/main/java/com/gxwebsoft/hjm/service/GpsMessageProcessor.java index 8c7c6b8..5bc1fd8 100644 --- a/src/main/java/com/gxwebsoft/hjm/service/GpsMessageProcessor.java +++ b/src/main/java/com/gxwebsoft/hjm/service/GpsMessageProcessor.java @@ -16,6 +16,9 @@ import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.concurrent.TimeUnit; /** @@ -119,7 +122,7 @@ public class GpsMessageProcessor { car.setLongitude(gps.getLng()); car.setLatitude(gps.getLat()); car.setSpeed(gps.getSpeed()); - car.setUpdateTime(DateUtil.date(gps.getTime() * 1000)); + car.setUpdateTime(LocalDateTime.ofInstant(Instant.ofEpochMilli(gps.getTime() * 1000), ZoneId.systemDefault())); car.setGpsNo(gps.getImei()); if (hjmCarService.updateByGpsNo(car)) { @@ -240,7 +243,7 @@ public class GpsMessageProcessor { // 更新围栏状态 car.setInFence(isInFence); - car.setUpdateTime(DateUtil.date()); + car.setUpdateTime(LocalDateTime.now()); hjmCarService.updateById(car); logger.info("车辆围栏检查完成: 车辆={}, 围栏={}, 是否在围栏内={}", diff --git a/src/main/java/com/gxwebsoft/hjm/service/impl/HjmCarServiceImpl.java b/src/main/java/com/gxwebsoft/hjm/service/impl/HjmCarServiceImpl.java index b444b68..50cd5a3 100644 --- a/src/main/java/com/gxwebsoft/hjm/service/impl/HjmCarServiceImpl.java +++ b/src/main/java/com/gxwebsoft/hjm/service/impl/HjmCarServiceImpl.java @@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @@ -112,7 +113,7 @@ public class HjmCarServiceImpl extends ServiceImpl impleme // 将围栏判断结果保存到车辆对象中 byCode.setInFence(isInFence); System.out.println("车辆 " + code + " 是否在围栏内: " + isInFence); - byCode.setUpdateTime(DateUtil.date()); + byCode.setUpdateTime(LocalDateTime.now()); hjmCarService.updateById(byCode); return byCode; diff --git a/src/main/java/com/gxwebsoft/house/service/impl/HouseViewsLogServiceImpl.java b/src/main/java/com/gxwebsoft/house/service/impl/HouseViewsLogServiceImpl.java index 1855f4c..39cf232 100644 --- a/src/main/java/com/gxwebsoft/house/service/impl/HouseViewsLogServiceImpl.java +++ b/src/main/java/com/gxwebsoft/house/service/impl/HouseViewsLogServiceImpl.java @@ -60,7 +60,7 @@ public class HouseViewsLogServiceImpl extends MPJBaseServiceImpl impl project.setRenewCount(project.getRenewCount() + 1); // 保存到期时间所在的年月日 - final Date expirationTime = project.getExpirationTime(); - LocalDate localDate = expirationTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + final LocalDateTime expirationTime = project.getExpirationTime(); + LocalDate localDate = expirationTime.toLocalDate(); int year = localDate.getYear(); int month = localDate.getMonthValue(); // 获取月份,范围是1到12 int day = localDate.getDayOfMonth(); // 获取日,范围是1到31 @@ -257,7 +257,7 @@ public class ProjectServiceImpl extends ServiceImpl impl // 是否过期 -1已过期 大于0 未过期 d.setExpired(d.getExpirationTime().compareTo(now)); // 剩余天数 - d.setExpiredDays((int) java.time.temporal.ChronoUnit.DAYS.between(now, d.getExpirationTime())); + d.setExpiredDays(java.time.temporal.ChronoUnit.DAYS.between(now, d.getExpirationTime())); // 续费次数 d.setRenewCount((long) projectRenewService.count(new LambdaQueryWrapper().eq(ProjectRenew::getAppId, d.getAppId()).eq(ProjectRenew::getDeleted, 0))); });