hyy hai 1 mes
pai
achega
4ad7116793

+ 1 - 1
yudao-module-museums/yudao-module-museums-api/src/main/java/cn/iocoder/yudao/module/museums/enums/ErrorCodeConstants.java

@@ -41,7 +41,7 @@ public class ErrorCodeConstants {
     public static final ErrorCode PHOTO_GROUP_UPLOAD_FAILED = new ErrorCode(1-016-002-001, "照片组上传失败,请检查上传文件");
     public static final ErrorCode PHOTO_GROUP_PACKAGE_FAILED_DECOMPRESS = new ErrorCode(1-016-002-002, "照片组上传失败");
     public static final ErrorCode PHOTO_GROUP_MUST_BE_COMPRESSED_PACKAGE = new ErrorCode(1-016-002-003, "请上传已压缩的图片文件包");
-    public static final ErrorCode PHOTO_GROUP_FORMAT_IS_INCORRECT = new ErrorCode(1-016-002-003, "照片组格式错误");
+    public static final ErrorCode PHOTO_GROUP_FORMAT_IS_INCORRECT = new ErrorCode(1-016-002-003, "照片组时间格式错误");
 
     // ========== 博物馆文件管理 1-016-003-000 ==========
     public static final ErrorCode DOCUMENT_NOT_EXISTS = new ErrorCode(1-016-003-000, "指定的博物馆文件记录不存在");

+ 1 - 1
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/photogroup/PhotoGroupController.java

@@ -110,7 +110,7 @@ public class PhotoGroupController {
             @RequestParam("file") MultipartFile file) {
 
         LocalDateTime groupDate = null;
-        if (groupDate != null) {
+        if (groupDateStr != null) {
             try {
                 long timestamp = Long.parseLong(groupDateStr);
                 Instant instant = Instant.ofEpochMilli(timestamp);

+ 1 - 0
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/photogroup/vo/PhotoGroupSaveReqVO.java

@@ -19,6 +19,7 @@ public class PhotoGroupSaveReqVO {
     private String groupName;
 
     @Schema(description = "照片组时间", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @DateTimeFormat
     private LocalDateTime groupDate;
 
     @Schema(description = "照片组简介", example = "你说的对", requiredMode = Schema.RequiredMode.NOT_REQUIRED)

+ 1 - 2
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/service/photogroup/PhotoGroupServiceImpl.java

@@ -134,7 +134,7 @@ public class PhotoGroupServiceImpl implements PhotoGroupService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Integer importPhotoGroup(String groupName, String groupDescription, LocalDateTime groupDate, MultipartFile file) throws Exception {
+    public Integer importPhotoGroup(String groupName, String groupDescription, LocalDateTime groupDate, MultipartFile file) {
         if (!file.getOriginalFilename().endsWith(".zip")) {
             throw exception(PHOTO_GROUP_MUST_BE_COMPRESSED_PACKAGE);
         }
@@ -197,6 +197,5 @@ public class PhotoGroupServiceImpl implements PhotoGroupService {
         return fileName.endsWith(".jpg") || fileName.endsWith(".png") || fileName.endsWith(".gif") ||
                 fileName.endsWith(".bmp") || fileName.endsWith(".tiff") || fileName.endsWith(".jpeg") ||
                 fileName.endsWith(".psd") || fileName.endsWith(".raw") || fileName.endsWith(".svg");
-
     }
 }

+ 0 - 4
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/service/photos/PhotosService.java

@@ -63,8 +63,4 @@ public interface PhotosService {
      */
     List<Integer> uploadPhotos(Integer groupId, List<MultipartFile> files) throws Exception;
 
-
-
-
-
 }

+ 49 - 12
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/service/specimeninfo/SpecimenInfoServiceImpl.java

@@ -18,6 +18,7 @@ import org.springframework.validation.annotation.Validated;
 import java.io.*;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.Month;
 import java.time.format.DateTimeFormatter;
@@ -492,14 +493,52 @@ public class SpecimenInfoServiceImpl implements SpecimenInfoService {
         return files != null && files.length > 0 ? files[0] : null;
     }
 
-    private static LocalDateTime parseToLocalDateTime(String dateString) {
+//    private static LocalDateTime parseToLocalDateTime(String dateString) {
+//        if (dateString == null || dateString.isEmpty()) {
+//            return LocalDateTime.of(1, Month.JANUARY, 1, 0, 0);  // 处理 null 或空字符串的情况
+//        }
+//
+//        // 预处理日期字符串,确保日期部分符合格式要求
+//        dateString = preprocessDateString(dateString);
+//
+//        // 允许的日期格式列表
+//        List<String> dateFormats = Arrays.asList(
+//                "yyyy-MM-dd HH:mm:ss",
+//                "yyyy/MM/dd HH:mm:ss",
+//                "yyyy-MM-dd",
+//                "yyyy/MM/dd",  // 支持没有时间部分的日期
+//                "yyyy/MM/d",   // 支持没有前导零的日期
+//                "yyyy-MM-dd'T'HH:mm:ss"
+//        );
+//
+//        // 尝试每种日期格式
+//        for (String format : dateFormats) {
+//            try {
+//                DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
+//                if (format.contains("HH")) {
+//                    return LocalDateTime.parse(dateString, formatter);
+//                } else {
+//                    // 如果格式不包含时间部分,补充默认时间 "00:00:00"
+//                    return LocalDateTime.parse(dateString + " 00:00:00", formatter);
+//                }
+//            } catch (DateTimeParseException e) {
+//                System.err.println("解析失败: " + dateString + " 使用格式: " + format);
+//                // 如果解析失败,继续尝试下一个格式
+//            }
+//        }
+//
+//        // 如果没有任何格式能够解析,则返回一个默认的时间值
+//        return LocalDateTime.of(1, Month.JANUARY, 1, 0, 0);
+//    }
+
+    public static LocalDateTime parseToLocalDateTime(String dateString) {
         if (dateString == null || dateString.isEmpty()) {
-            return LocalDateTime.of(1, Month.JANUARY, 1, 0, 0);  // 处理 null 或空字符串的情况
+            // 如果输入为空,返回默认的 LocalDateTime(例如 0001-01-01 00:00:00)
+            return LocalDateTime.of(1, 1, 1, 0, 0, 0, 0);
         }
 
         // 预处理日期字符串,确保日期部分符合格式要求
         dateString = preprocessDateString(dateString);
-
         // 允许的日期格式列表
         List<String> dateFormats = Arrays.asList(
                 "yyyy-MM-dd HH:mm:ss",
@@ -514,23 +553,24 @@ public class SpecimenInfoServiceImpl implements SpecimenInfoService {
         for (String format : dateFormats) {
             try {
                 DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
+                // 如果包含时间部分,则解析为 LocalDateTime
                 if (format.contains("HH")) {
                     return LocalDateTime.parse(dateString, formatter);
                 } else {
-                    // 如果格式不包含时间部分,补充默认时间 "00:00:00"
-                    return LocalDateTime.parse(dateString + " 00:00:00", formatter);
+                    // 如果没有时间部分,假设时间为 00:00:00
+                    LocalDate date = LocalDate.parse(dateString, formatter);
+                    return date.atStartOfDay(); // 默认时间为 00:00:00
                 }
             } catch (DateTimeParseException e) {
-                System.err.println("解析失败: " + dateString + " 使用格式: " + format);
                 // 如果解析失败,继续尝试下一个格式
+                System.err.println("解析失败: " + dateString + " 使用格式: " + format);
             }
         }
 
-        // 如果没有任何格式能够解析,则返回一个默认的时间值
-        return LocalDateTime.of(1, Month.JANUARY, 1, 0, 0);
+        // 如果没有任何格式能够解析,则返回默认的 LocalDateTime
+        return LocalDateTime.of(1, 1, 1, 0, 0, 0, 0);  // 返回默认的 LocalDateTime
     }
 
-
     // 预处理日期字符串,确保日期部分符合格式要求(补充单数字日期为双位数)
     private static String preprocessDateString(String dateString) {
         // 如果日期格式是 "yyyy/MM/d"(例如 "2012/5/5"),则补充单数字日期为双位数
@@ -543,9 +583,6 @@ public class SpecimenInfoServiceImpl implements SpecimenInfoService {
         }
         return dateString;  // 如果不符合该格式则直接返回原字符串
     }
-
-
-
     //工作台
     //根据入库的登记情况统计本年标本入库信息
     @Override