Explorar o código

每个标本类型对应一个表

hyy hai 1 mes
pai
achega
e4f713fd8d

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

@@ -16,6 +16,7 @@ public class ErrorCodeConstants {
     public static final ErrorCode SPECIMEN_NUMBER_ALREADY_EXISTS_CANNOT_ADDED = new ErrorCode(1-016-000-004, "标本编号已存在,无法新增");
     public static final ErrorCode SPECIMEN_NUMBER_NOT_EXISTS = new ErrorCode(1-016-000-005, "标本编号无效或不存在");
     public static final ErrorCode MUST_UPLOADED_EXCEL_AND_IMAGE = new ErrorCode(1-016-000-006, "必须同时上传Excel文件和图片压缩包文件,或者只上传Excel文件。");
+    public static final ErrorCode INVALID_SPECIMEN_TYPE = new ErrorCode(1-016-000-007, "无效的标本类型");
 
     // ========== 标本出库回库信息 1-016-001-000 ==========
     public static final ErrorCode SPECIMEN_OUTBOUND_NOT_EXISTS = new ErrorCode(1-016-001-000, "标本出库回库信息不存在");

+ 239 - 37
yudao-module-museums/yudao-module-museums-biz/src/main/java/cn/iocoder/yudao/module/museums/controller/admin/specimeninfo/SpecimenInfoController.java

@@ -106,9 +106,59 @@ public class SpecimenInfoController {
                         BeanUtils.toBean(list, SpecimenInfoExportRespVO.class));
     }
 
+//    @GetMapping("/get-specimen-import-template")
+//    @Operation(summary = "获得导入标本信息模板")
+//    public void getSpecimenImportTemplate(HttpServletResponse response) throws IOException {
+//
+//        // 设置响应类型
+//        response.setContentType("application/vnd.ms-excel");
+//        response.setCharacterEncoding("UTF-8");
+//        // URL 编码文件名
+//        String fileName = URLEncoder.encode("标本导入模板.xls", "UTF-8");
+//        response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
+//
+//        // 手动创建导出 demo
+//        List<SpecimenImportExcelVO> list = Arrays.asList(
+//                SpecimenImportExcelVO.builder()
+//                        .specimenNumber("01522")  // 标本编号
+//                        .assetNumber("20129103")  // 资产号
+//                        .chineseName("贵州龙")  // 中文名称
+//                        .englishName("keichousaurus")  // 外文名称
+//                        .specimenType(SpecimenTypeEnum.FOSSIL.getType()) // 使用枚举:标本类型(矿物/矿石/岩石/化石/陨石)
+//                        .storageLocation("临展厅")  // 存放位置
+//                        .preservationType(PreservationTypeEnum.SPECIMEN.getPreservationType()) // 使用枚举:保存类型(标本/原石/光片/薄片/切片/模型及其他)
+//                        .saveStatus(SaveStatusEnum.COMPLETE.getSaveStatus())  // 保存状态(完整/受损/严重受损/无实物)
+//                        .specimenAmount(1)  // 数量(件/套)
+//                        .size("1000cm")  // 规格(cm)
+//                        .weight("1.5g")  // 重量(g)
+//                        .composition("硅酸盐")  // 成分/化学式
+//                        .origin("兴义县顶效镇绿荫村")  // 产地/发现地(市级县级产地)
+//                        .economize("贵州省")  // 省
+//                        .country("中国(China)")  // 国家
+//                        .era("晚三叠世(距今2.1亿年)")  // 形成时代
+//                        .preservedLayer("上三叠统竹竿坡组")  // 地质产状或层位(产出状态,化石指产出层位)
+//                        .meteoriteType("脊索动物门鳍龙目肿肋龙亚目贵州龙科")  // 分类(矿物的类型/岩石的类型/化石的类型/陨石的类型)
+//                        .internationalName("Mineral A")  // 国际命名
+//                        .discoveryTime("2024/01/01")  // 发现时间
+//                        .fallTime("2024/01/02")  // 降落时间
+//                        .source(SourceEnum.PURCHASE.getSource()) // 使用枚举:来源(采购/捐赠/采集)
+//                        .provider("天娇雅石居")  // 标本提供者
+//                        .specimenPrice(new BigDecimal("5900.01"))  // 单价
+//                        .acquisitionTime("2012/12/20")  // 入藏时间
+//                        .mainPurpose(MainPurposeEnum.RESERECH.getMainPurpose())  // 主要用途(工业原料/药用/建材/科学研究/观赏/其它)
+//                        .purpose("科学普及;对比研究")  // 具体用途
+//                        .collectionStatus(CollectionStatusEnum.EXHIBITION.getStatus())  // 馆藏状态(在馆/展陈/借出)
+//                        .imageName("image1.jpg、image2.jpg、image3.jpg")  // 图片资料(图件名称)
+//                        .description("这是一个矿石标本")  // 文献资料
+//                        .notes("备注信息")  // 备注
+//                        .build()
+//        );
+//        ExcelUtils.write(response, "标本导入模板.xls", "标本信息", SpecimenImportExcelVO.class, list);
+//    }
+
     @GetMapping("/get-specimen-import-template")
     @Operation(summary = "获得导入标本信息模板")
-    public void getSpecimenImportTemplate(HttpServletResponse response) throws IOException {
+    public void getSpecimenImportTemplate(@RequestParam("specimenType") Integer specimenType, HttpServletResponse response) throws IOException {
 
         // 设置响应类型
         response.setContentType("application/vnd.ms-excel");
@@ -117,45 +167,197 @@ public class SpecimenInfoController {
         String fileName = URLEncoder.encode("标本导入模板.xls", "UTF-8");
         response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
 
-        // 手动创建导出 demo
-        List<SpecimenImportExcelVO> list = Arrays.asList(
-                SpecimenImportExcelVO.builder()
-                        .specimenNumber("01522")  // 标本编号
-                        .assetNumber("20129103")  // 资产号
-                        .chineseName("贵州龙")  // 中文名称
-                        .englishName("keichousaurus")  // 外文名称
-                        .specimenType(SpecimenTypeEnum.FOSSIL.getType()) // 使用枚举:标本类型(矿物/矿石/岩石/化石/陨石)
-                        .storageLocation("临展厅")  // 存放位置
-                        .preservationType(PreservationTypeEnum.SPECIMEN.getPreservationType()) // 使用枚举:保存类型(标本/原石/光片/薄片/切片/模型及其他)
-                        .saveStatus(SaveStatusEnum.COMPLETE.getSaveStatus())  // 保存状态(完整/受损/严重受损/无实物)
-                        .specimenAmount(1)  // 数量(件/套)
-                        .size("1000cm")  // 规格(cm)
-                        .weight("1.5g")  // 重量(g)
-                        .composition("硅酸盐")  // 成分/化学式
-                        .origin("兴义县顶效镇绿荫村")  // 产地/发现地(市级县级产地)
-                        .economize("贵州省")  // 省
-                        .country("中国(China)")  // 国家
-                        .era("晚三叠世(距今2.1亿年)")  // 形成时代
-                        .preservedLayer("上三叠统竹竿坡组")  // 地质产状或层位(产出状态,化石指产出层位)
-                        .meteoriteType("脊索动物门鳍龙目肿肋龙亚目贵州龙科")  // 分类(矿物的类型/岩石的类型/化石的类型/陨石的类型)
-                        .internationalName("Mineral A")  // 国际命名
-                        .discoveryTime("2024/01/01")  // 发现时间
-                        .fallTime("2024/01/02")  // 降落时间
-                        .source(SourceEnum.PURCHASE.getSource()) // 使用枚举:来源(采购/捐赠/采集)
-                        .provider("天娇雅石居")  // 标本提供者
-                        .specimenPrice(new BigDecimal("5900.01"))  // 单价
-                        .acquisitionTime("2012/12/20")  // 入藏时间
-                        .mainPurpose(MainPurposeEnum.RESERECH.getMainPurpose())  // 主要用途(工业原料/药用/建材/科学研究/观赏/其它)
-                        .purpose("科学普及;对比研究")  // 具体用途
-                        .collectionStatus(CollectionStatusEnum.EXHIBITION.getStatus())  // 馆藏状态(在馆/展陈/借出)
-                        .imageName("image1.jpg、image2.jpg、image3.jpg")  // 图片资料(图件名称)
-                        .description("这是一个矿石标本")  // 文献资料
-                        .notes("备注信息")  // 备注
-                        .build()
-        );
+        // 根据 specimen_type 参数选择模板
+        List<SpecimenImportExcelVO> list;
+
+        // 根据标本类型生成不同的模板
+        switch (specimenType) {
+            case 0: // 矿物
+                list = Arrays.asList(
+                        SpecimenImportExcelVO.builder()
+                                .specimenNumber("00716")  // 标本编号
+                                .assetNumber("20121324")  // 资产号
+                                .chineseName("文石晶簇")  // 中文名称
+                                .englishName("Aragonite")  // 外文名称
+                                .specimenType(SpecimenTypeEnum.MINERAL.getType())  // 标本类型:矿物
+                                .storageLocation("奇妙的矿物世界")  // 存放位置
+                                .preservationType(PreservationTypeEnum.SPECIMEN.getPreservationType())  // 保存类型:标本
+                                .saveStatus(SaveStatusEnum.COMPLETE.getSaveStatus())  // 保存状态:完整
+                                .specimenAmount(1)  // 数量:1件
+                                .size("11000")  // 规格:无
+                                .weight("11220.22")  // 重量:无
+                                .composition("CaCO3")  // 成分/化学式:碳酸钙
+                                .origin("湖北")  // 产地
+                                .economize("湖北省")  // 省
+                                .country("中国(China)")  // 国家
+                                .era("N/A")  // 形成时代:无
+                                .preservedLayer("N/A")  // 地质产状或层位:无
+                                .meteoriteType("碳酸盐")  // 分类:矿物类型
+                                .internationalName("N/A")  // 国际命名:无
+                                .discoveryTime("N/A")  // 发现时间:无
+                                .fallTime("N/A")  // 降落时间:无
+                                .source(SourceEnum.PURCHASE.getSource())  // 来源:采购
+                                .provider("无")  // 标本提供者:无
+                                .specimenPrice(new BigDecimal("56000"))  // 单价:56000元
+                                .acquisitionTime("2012/5/5")  // 入藏时间:2012年5月5日
+                                .mainPurpose(MainPurposeEnum.APPRECIATE.getMainPurpose())  // 主要用途:观赏
+                                .purpose("观赏,品质较佳者,经加工打磨后呈现美丽的同心圆花纹")  // 具体用途
+                                .collectionStatus(CollectionStatusEnum.EXHIBITION.getStatus())  // 馆藏状态:展陈
+                                .imageName("P1110890.JPG")  // 图片资料:图件名称
+                                .description("这是一个矿石标本")  // 文献资料
+                                .notes("无")  // 备注
+                                .build()
+                );
+                break;
+            case 1: // 岩石-辉石橄榄岩
+                list = Arrays.asList(
+                        SpecimenImportExcelVO.builder()
+                                .specimenNumber("00881")  // 标本编号
+                                .assetNumber("")  // 资产号(没有提供)
+                                .chineseName("辉石橄榄岩")  // 中文名称
+                                .englishName("Pyroxene peridotite")  // 外文名称
+                                .specimenType(SpecimenTypeEnum.ROCK.getType())  // 标本类型:岩石
+                                .storageLocation("岩石王国")  // 存放位置
+                                .preservationType(PreservationTypeEnum.SPECIMEN.getPreservationType())  // 保存类型:标本
+                                .saveStatus(SaveStatusEnum.COMPLETE.getSaveStatus())  // 保存状态:完整
+                                .specimenAmount(1)  // 数量:1件
+                                .size("N/A")  // 规格:未提供
+                                .weight("N/A")  // 重量:未提供
+                                .composition("N/A")  // 成分/化学式:未提供
+                                .origin("张家口万全县")  // 产地/发现地:张家口万全县
+                                .economize("河北")  // 省:河北
+                                .country("中国(China)")  // 国家:中国
+                                .preservedLayer("N/A")  // 地质产状或层位:未提供
+                                .meteoriteType("N/A")  // 分类:未提供
+                                .internationalName("N/A")  // 国际命名:未提供
+                                .discoveryTime("N/A")  // 发现时间:未提供
+                                .fallTime("N/A")  // 降落时间:未提供
+                                .source(SourceEnum.DONATION.getSource())  // 来源:捐赠
+                                .provider("化探63级校友")  // 标本提供者:化探63级校友
+                                .specimenPrice(new BigDecimal("0.00"))  // 单价:未提供
+                                .acquisitionTime("2016/11/2")  // 入藏时间:2016年11月2日
+                                .mainPurpose(MainPurposeEnum.RESERECH.getMainPurpose())  // 主要用途:科学研究
+                                .purpose("可作耐火材料原料")  // 具体用途:可作耐火材料原料
+                                .collectionStatus(CollectionStatusEnum.EXHIBITION.getStatus())  // 馆藏状态:展陈
+                                .imageName("DSC00183.JPG")  // 图片资料:图件名称
+                                .description("N/A")  // 文献资料:未提供
+                                .notes("N/A")  // 备注:未提供
+                                .build()
+                );
+                break;
+            case 2: // 总表
+                list = Arrays.asList(
+                        SpecimenImportExcelVO.builder()
+                                .specimenNumber("01522")  // 标本编号
+                                .assetNumber("20129103")  // 资产号
+                                .chineseName("贵州龙")  // 中文名称
+                                .englishName("keichousaurus")  // 外文名称
+                                .specimenType(SpecimenTypeEnum.FOSSIL.getType()) // 使用枚举:标本类型(矿物/矿石/岩石/化石/陨石)
+                                .storageLocation("临展厅")  // 存放位置
+                                .preservationType(PreservationTypeEnum.SPECIMEN.getPreservationType()) // 使用枚举:保存类型(标本/原石/光片/薄片/切片/模型及其他)
+                                .saveStatus(SaveStatusEnum.COMPLETE.getSaveStatus())  // 保存状态(完整/受损/严重受损/无实物)
+                                .specimenAmount(1)  // 数量(件/套)
+                                .size("1000cm")  // 规格(cm)
+                                .weight("1.5g")  // 重量(g)
+                                .composition("硅酸盐")  // 成分/化学式
+                                .origin("兴义县顶效镇绿荫村")  // 产地/发现地(市级县级产地)
+                                .economize("贵州省")  // 省
+                                .country("中国(China)")  // 国家
+                                .era("晚三叠世(距今2.1亿年)")  // 形成时代
+                                .preservedLayer("上三叠统竹竿坡组")  // 地质产状或层位(产出状态,化石指产出层位)
+                                .meteoriteType("脊索动物门鳍龙目肿肋龙亚目贵州龙科")  // 分类(矿物的类型/岩石的类型/化石的类型/陨石的类型)
+                                .internationalName("Mineral A")  // 国际命名
+                                .discoveryTime("2024/01/01")  // 发现时间
+                                .fallTime("2024/01/02")  // 降落时间
+                                .source(SourceEnum.PURCHASE.getSource()) // 使用枚举:来源(采购/捐赠/采集)
+                                .provider("天娇雅石居")  // 标本提供者
+                                .specimenPrice(new BigDecimal("5900.01"))  // 单价
+                                .acquisitionTime("2012/12/20")  // 入藏时间
+                                .mainPurpose(MainPurposeEnum.RESERECH.getMainPurpose())  // 主要用途(工业原料/药用/建材/科学研究/观赏/其它)
+                                .purpose("科学普及;对比研究")  // 具体用途
+                                .collectionStatus(CollectionStatusEnum.EXHIBITION.getStatus())  // 馆藏状态(在馆/展陈/借出)
+                                .imageName("image1.jpg、image2.jpg、image3.jpg")  // 图片资料(图件名称)
+                                .description("这是一个矿石标本")  // 文献资料
+                                .notes("备注信息")  // 备注
+                                .build()
+                );
+                break;
+            case 3: // 化石
+                list = Arrays.asList(
+                        SpecimenImportExcelVO.builder()
+                                .specimenNumber("01522")  // 标本编号
+                                .assetNumber("20129103")  // 资产号
+                                .chineseName("贵州龙")  // 中文名称
+                                .englishName("keichousaurus")  // 外文名称
+                                .specimenType(SpecimenTypeEnum.FOSSIL.getType())  // 标本类型:化石
+                                .storageLocation("临展厅")  // 存放位置
+                                .preservationType(PreservationTypeEnum.SPECIMEN.getPreservationType())  // 保存类型:标本
+                                .saveStatus(SaveStatusEnum.COMPLETE.getSaveStatus())  // 保存状态:完整
+                                .specimenAmount(1)  // 数量(件/套)
+                                .size("")  // 规格(cm) - 未提供,留空
+                                .origin("兴义县顶效镇绿荫村")  // 产地/发现地(市级县级产地)
+                                .economize("贵州省")  // 省
+                                .country("中国(China)")  // 国家
+                                .era("晚三叠世(距今2.1亿年)")  // 形成时代
+                                .preservedLayer("上三叠统竹竿坡组")  // 地质产状或层位
+                                .meteoriteType("脊索动物门鳍龙目肿肋龙亚目贵州龙科")  // 分类(化石的类型)
+                                .source(SourceEnum.PURCHASE.getSource())  // 来源:采购
+                                .provider("天娇雅石居")  // 标本提供者
+                                .specimenPrice(new BigDecimal("5900"))  // 单价(元)
+                                .acquisitionTime("2012/12/20")  // 入藏时间
+                                .mainPurpose(MainPurposeEnum.RESERECH.getMainPurpose())  // 主要用途:科学研究
+                                .purpose("科学普及;对比研究")  // 具体用途
+                                .collectionStatus(CollectionStatusEnum.EXHIBITION.getStatus())  // 馆藏状态:展陈
+                                .imageName("1730775369277.JPG")  // 图片资料(图件名称)
+                                .description("贵州龙化石")  // 文献资料
+                                .notes("")  // 备注 - 未提供,留空
+                                .build()
+                );
+                break;
+            case 4: // 陨石
+                list = Arrays.asList(
+                        SpecimenImportExcelVO.builder()
+                                .specimenNumber("00691")  // 标本编号
+                                .assetNumber("")  // 资产号
+                                .chineseName("南丹铁陨石")  // 中文名称
+                                .englishName("Iron meteorite")  // 外文名称
+                                .specimenType(SpecimenTypeEnum.METEORITE.getType())  // 标本类型:陨石
+                                .storageLocation("序厅")  // 存放位置
+                                .preservationType(PreservationTypeEnum.ROUGH_STONE.getPreservationType())  // 保存类型:原石
+                                .saveStatus(SaveStatusEnum.COMPLETE.getSaveStatus())  // 保存状态:完整
+                                .specimenAmount(1)  // 数量(件/套)
+                                .size("150*120*90")  // 规格(cm)
+                                .weight("3500000")  // 重量(g)
+                                .composition("铁镍金属")  // 成分/化学式
+                                .origin("南丹")  // 产地/发现地(市级县级产地)
+                                .economize("广西")  // 省
+                                .country("中国(China)")  // 国家
+                                .meteoriteType("Iron, IAB-MG")  // 陨石的类型
+                                .internationalName("Nantan")  // 国际命名
+                                .discoveryTime("1958")  // 发现时间
+                                .fallTime("")  // 降落时间
+                                .source(SourceEnum.DONATION.getSource())  // 来源:捐赠
+                                .provider("化探63级校友")  // 标本提供者
+                                .specimenPrice(new BigDecimal("0"))  // 单价(元)
+                                .acquisitionTime("2016/11/2")  // 入藏时间
+                                .mainPurpose(MainPurposeEnum.RESERECH.getMainPurpose())  // 主要用途:科学研究
+                                .purpose("科学研究")  // 具体用途
+                                .collectionStatus(CollectionStatusEnum.EXHIBITION.getStatus())  // 馆藏状态:展陈
+                                .imageName("DSC03583.JPG, DSC01271.JPG")  // 图片资料(图件名称)
+                                .description("南丹铁陨石样本")  // 文献资料
+                                .notes("")  // 备注
+                                .build()
+                );
+                break;
+            default:
+                throw exception(INVALID_SPECIMEN_TYPE);
+        }
+
+        // 使用 ExcelUtils 写入 Excel 文件
         ExcelUtils.write(response, "标本导入模板.xls", "标本信息", SpecimenImportExcelVO.class, list);
     }
 
+
     @PostMapping("/import-specimen-with-images")
     @Operation(summary = "导入标本及其图片")
     @Parameters({