Browse Source

1.新增机器设备测算表Excel文件生成接口(开发中)
2.机器设备公式枚举设置

GouGengquan 8 months ago
parent
commit
0f1101541e

+ 6 - 0
biz-base/src/main/java/com/dayou/controller/AssetsCalculateController.java

@@ -5,6 +5,7 @@ import com.dayou.dto.calculate.CalculateBaseInfoDTO;
 import com.dayou.result.Result;
 import com.dayou.result.Status;
 import com.dayou.vo.calculate.AssetsCalculateProgressVO;
+import com.fasterxml.jackson.core.JsonProcessingException;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -108,5 +109,10 @@ public class AssetsCalculateController {
         return Result.build(assetsCalculateService.updateCalculateBaseInfo(calculateBaseInfoDTO.getCalculateId(), calculateBaseInfoDTO.getBaseInfo()));
     }
 
+    @GetMapping("/generateEquipmentCalculate/{calculateId}")
+    public Result<Boolean> generateEquipmentCalculate(@PathVariable Long calculateId) throws IOException {
+        return Result.build(assetsCalculateService.generateEquipmentCalculate(calculateId));
+    }
+
 }
 

+ 29 - 0
biz-base/src/test/java/com/dayou/ExcelSimpleTests.java

@@ -10,8 +10,11 @@ import com.dayou.utils.ExcelConvertToHtmlUtil;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.junit.jupiter.api.Test;
 
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Paths;
@@ -129,4 +132,30 @@ public class ExcelSimpleTests {
         System.out.println(ExcelConvertToHtmlUtil.readExcelToHtmlCode(sourcePath, true, "xlsx","Sheet1"));
     }
 
+    /**
+     * 测试给excel设置公式
+     * @throws IOException
+     */
+    @Test
+    void testSetExcelFormula() throws IOException {
+        Workbook workbook = new XSSFWorkbook();
+        Sheet sheet = workbook.createSheet("Example Sheet");
+        Row row = sheet.createRow(0);
+        Cell cellA = row.createCell(0);
+        cellA.setCellValue(10);
+        Cell cellB = row.createCell(1);
+        cellB.setCellValue(20);
+        Cell cellSum = row.createCell(2);
+        cellSum.setCellFormula("A1+B1"); // 设置公式
+        cellSum.setCellType(CellType.FORMULA);
+
+        try (FileOutputStream outputStream = new FileOutputStream("E:\\test\\excel\\Example.xlsx")) {
+            workbook.write(outputStream);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        } finally {
+            workbook.close();
+        }
+    }
+
 }

+ 3 - 0
common/src/main/java/com/dayou/utils/EasyExcelUtil.java

@@ -77,6 +77,9 @@ public class EasyExcelUtil {
         // 复制数据验证
         copyDataValidations(sourceSheet, targetSheet);
 
+        sourceWorkbook.close();
+        inputStream.close();
+
         return targetWorkbook;
     }
 

+ 9 - 0
dao/src/main/java/com/dayou/mapper/AssetsCalculateEqptDataMapper.java

@@ -4,6 +4,8 @@ import com.dayou.entity.AssetsCalculateEqptData;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * <p>
  * 机器设备测算数据表 Mapper 接口
@@ -21,4 +23,11 @@ public interface AssetsCalculateEqptDataMapper extends BaseMapper<AssetsCalculat
      */
     Integer hasImportedEquipment(@Param("calculateId") Long calculateId);
 
+    /**
+     * 根据测算表id获取所有机器设备导入的数据
+     * @param calculateId 测算表id
+     * @return List<AssetsCalculateEqptData>
+     */
+    List<AssetsCalculateEqptData> getAllByAssetsCalculateId(@Param("calculateId") Long calculateId);
+
 }

+ 0 - 1
dao/src/main/java/com/dayou/mapper/AssetsCalculateMapper.java

@@ -1,6 +1,5 @@
 package com.dayou.mapper;
 
-import com.dayou.dto.calculate.equipment.EquipmentBaseInfoDTO;
 import com.dayou.entity.AssetsCalculate;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dayou.vo.calculate.AssetsCalculateProgressVO;

+ 7 - 0
dao/src/main/java/com/dayou/mapper/TmplAssetCalculateMapper.java

@@ -31,4 +31,11 @@ public interface TmplAssetCalculateMapper extends BaseMapper<TmplAssetCalculate>
      */
     TmplAssetCalculateDetailVO getTmplAssetCalculateDetailById(@Param("templateCalculateId") Long templateCalculateId);
 
+    /**
+     * 根据测算表模板code获取模板信息
+     * @param tmplCode 模板code
+     * @return TmplAssetCalculate
+     */
+    TmplAssetCalculate getCalculateTmplByCode(@Param("tmplCode") String tmplCode);
+
 }

+ 7 - 0
dao/src/main/java/com/dayou/mapper/TmplAssetCalculateSectionMapper.java

@@ -21,4 +21,11 @@ public interface TmplAssetCalculateSectionMapper extends BaseMapper<TmplAssetCal
      */
     Boolean updateDeleteStatusByTCId(@Param("TCId") Long TCId);
 
+    /**
+     * 根据测算表段落模板code获取段落模板信息
+     * @param tmplCode 模板code
+     * @return TmplAssetCalculate
+     */
+    TmplAssetCalculateSection getByTmplCode(@Param("tmplCode") String tmplCode);
+
 }

+ 8 - 0
dao/src/main/resources/mapper/AssetsCalculateEqptDataMapper.xml

@@ -42,4 +42,12 @@
         AND delete_status = 0
     </select>
 
+    <!--根据测算表id获取所有机器设备导入的数据-->
+    <select id="getAllByAssetsCalculateId" resultType="com.dayou.entity.AssetsCalculateEqptData">
+        SELECT id, assets_calculate_id, sort_id, equipment_name, manufacturer, model, purchase_date, activation_date, storage_location, quantity, unit_of_measurement, original_value, net_value, equipment_type, equipment_type_detail, remark, create_time, update_time, delete_status
+        FROM assets_calculate_eqpt_data
+        WHERE delete_status = 0
+        AND assets_calculate_id = #{calculateId}
+    </select>
+
 </mapper>

+ 8 - 0
dao/src/main/resources/mapper/TmplAssetCalculateMapper.xml

@@ -42,4 +42,12 @@
         AND id = #{templateCalculateId}
     </select>
 
+    <!--根据测算表模板code获取模板信息-->
+    <select id="getCalculateTmplByCode" resultType="com.dayou.entity.TmplAssetCalculate">
+        SELECT id, calculate_name, file_name, file_url, calculate_type, calculate_sec_type, has_section, create_time, update_time, delete_status, tmpl_code
+        FROM tmpl_asset_calculate
+        WHERE tmpl_code = #{tmplCode}
+        AND delete_status = 0
+    </select>
+
 </mapper>

+ 8 - 0
dao/src/main/resources/mapper/TmplAssetCalculateSectionMapper.xml

@@ -32,4 +32,12 @@
         AND template_calculate_id = #{TCId}
     </update>
 
+    <!--根据测算表段落模板code获取段落模板信息-->
+    <select id="getByTmplCode" resultType="com.dayou.entity.TmplAssetCalculateSection">
+        SELECT id, template_calculate_id, section_name, section_file_name, section_file_url, create_time, update_time, delete_status, tmpl_code
+        FROM tmpl_asset_calculate_section
+        WHERE delete_status = 0
+        AND tmpl_code = #{tmplCode}
+    </select>
+
 </mapper>

+ 63 - 0
domain/src/main/java/com/dayou/common/CalculateFormula.java

@@ -0,0 +1,63 @@
+package com.dayou.common;
+
+/**
+ * 测算表公式
+ */
+public class CalculateFormula {
+
+    /**
+     * 机器设备公式,占位符{0}是行号
+     * AT列 1~4 行是固定的
+     */
+    public static final EquipmentMainFormula[] EQUIPMENT_MAIN_FORMULA = EquipmentMainFormula.values();
+
+    public enum EquipmentMainFormula {
+        不含税单价("L{0}/(1+M{0})",14),
+        原值("AQ{0}",16),
+        成新率("Y{0}",17),
+        净值("ROUND(P{0}*Q{0},0)",18),
+        已使用年数("ROUND(($U$2-F{0})/365,2)",20),
+        年限成新率("IF((S{0}-T{0})/S{0}<15%,15%,ROUND((S{0}-T{0})/S{0},2))",21),
+        综合成新率("ROUND(U{0}*V{0}+W{0}*X{0},2)",25),
+        报价("AE{0}*H{0}",32),
+        运杂费("ROUND(AF{0}*AG{0},0)",34),
+        基础费("ROUND(AF{0}*AI{0},0)",36),
+        安装费("AF{0}*AK{0}",38),
+        设备工程费("ROUND(AF{0}+AH{0}+AJ{0}+AL{0},0)",39),
+        前期费("ROUND(AM{0}*AT3,0)",40),
+        资金成本("ROUND((AN{0}*((1+$AT$3)^($AT$1)-1)+AM{0}*((1+$AT$3)^($AT$1/2)-1)),0)",41),
+        可抵扣增值税("ROUND(AF{0}/(1+13%)*13%+(AH{0}+AJ{0}+AL{0})/(1+9%)*9%+AM{0}*($AT$3-$AT$4)/1.06*0.06,0)",42),
+        重置全价("ROUND(AM{0}+AN{0}+AO{0}-AP{0},0)",43);
+
+        /**
+         * 公式
+         */
+        private String formula;
+
+        /**
+         * 列下标
+         */
+        private Integer column;
+
+        EquipmentMainFormula(String formula, Integer column) {
+            this.formula = formula;
+            this.column = column;
+        }
+
+        public String getFormula() {
+            return formula;
+        }
+
+        public Integer getColumn() {
+            return column;
+        }
+
+        @Override
+        public String toString() {
+            return column + ":" + formula;
+        }
+
+
+    }
+
+}

+ 14 - 0
domain/src/main/java/com/dayou/dto/calculate/equipment/EquipmentBaseInfoDTO.java

@@ -1,7 +1,10 @@
 package com.dayou.dto.calculate.equipment;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Data;
 
+import java.time.LocalDate;
+
 /**
  * 机器设备-基础信息
  */
@@ -9,33 +12,44 @@ import lombok.Data;
 public class EquipmentBaseInfoDTO {
 
     /**
+     * 评估基准日
+     */
+    private LocalDate valuationBasisDate;
+
+    /**
      * 工期
      */
+    @ExcelProperty("工期")
     private Double constructionPeriod;
 
     /**
      * 利息
      */
+    @ExcelProperty("利息")
     private Double interest;
 
     /**
      * 前期费用率
      */
+    @ExcelProperty("前期费用率")
     private Double preConstructionCostRatio;
 
     /**
      * 建设单位管理费率
      */
+    @ExcelProperty("建设单位管理费率")
     private Double managementExpenseRatio;
 
     /**
      * 关税
      */
+    @ExcelProperty("关税")
     private Double tariff;
 
     /**
      * 进口增值税
      */
+    @ExcelProperty("进口增值税")
     private Double importVAT;
 
 }

+ 2 - 2
domain/src/main/java/com/dayou/entity/AssetsCalculate.java

@@ -39,9 +39,9 @@ public class AssetsCalculate extends BaseEntity implements Serializable {
     private LocalDate valuationBasisDate;
 
     /**
-     * 测算所需基础信息(json)
+     * 基础测算信息(json)
      */
-    private String calculateInfo;
+    private String baseInfo;
 
     /**
      * 测算表创建者user_id

+ 3 - 2
domain/src/main/java/com/dayou/entity/AssetsCalculateEqptData.java

@@ -3,6 +3,7 @@ package com.dayou.entity;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.dayou.common.BaseEntity;
 
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 
 import java.io.Serializable;
@@ -57,13 +58,13 @@ public class AssetsCalculateEqptData extends BaseEntity implements Serializable
      * 购买日期
      */
     @ExcelProperty("购买日期")
-    private LocalDateTime purchaseDate;
+    private LocalDate purchaseDate;
 
     /**
      * 启用日期
      */
     @ExcelProperty("启用日期")
-    private LocalDateTime activationDate;
+    private LocalDate activationDate;
 
     /**
      * 存放地点

+ 5 - 7
domain/src/main/java/com/dayou/enums/EquipmentTmplCode.java

@@ -3,13 +3,11 @@ package com.dayou.enums;
 public enum EquipmentTmplCode {
 
     MAIN("MAIN", "机器设备-主模板"),
-    MAIN_DOMESTIC("MAIN_DOMESTIC", "机器设备-主模板-国产设备信息-段落模板"),
-    MAIN_IMPORTED("MAIN_IMPORTED", "机器设备-主模板-进口设备信息-段落模板"),
-    MAIN_NONSTANDARD("MAIN_NONSTANDARD","机器设备-主模板-非标设备信息-段落模板"),
-    IMPORTED_CALCULATE("IMPORTED_CALCULATE", "机器设备-进口设备测算-段落模板"),
-    IMPORTED_CALCULATE_DETAIL("IMPORTED_CALCULATE_DETAIL", "机器设备-进口设备测算-详细信息-段落模板"),
-    NONSTANDARD_CALCULATE("NONSTANDARD_CALCULATE", "机器设备-非标设备测算-段落模板"),
-    NONSTANDARD_CALCULATE_DETAIL("NONSTANDARD_CALCULATE_DETAIL", "机器设备-非标设备测算-详细信息-段落模板");
+    MAIN_DETAIL("MAIN_DETAIL", "机器设备-主模板-设备信息-段落模板"),
+    IMPORTED_CALCULATE("IMPORTED_CALCULATE", "机器设备-进口设备-段落模板"),
+    IMPORTED_CALCULATE_DETAIL("IMPORTED_CALCULATE_DETAIL", "机器设备-进口设备-设备信息-段落模板"),
+    NONSTANDARD_CALCULATE("NONSTANDARD_CALCULATE", "机器设备-非标设备-段落模板"),
+    NONSTANDARD_CALCULATE_DETAIL("NONSTANDARD_CALCULATE_DETAIL", "机器设备-非标设备测算-设备信息-段落模板");
 
     private String code;
 

+ 10 - 0
service/src/main/java/com/dayou/service/AssetsCalculateEqptDataService.java

@@ -3,6 +3,9 @@ import com.dayou.entity.AssetsCalculateEqptData;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import java.util.List;
+
 /**
  * <p>
  * 机器设备测算数据表 服务类
@@ -20,4 +23,11 @@ public interface AssetsCalculateEqptDataService extends IService<AssetsCalculate
      */
     Boolean hasImportedEquipment(Long calculateId);
 
+    /**
+     * 根据测算表id获取所有机器设备导入的数据
+     * @param calculateId 测算表id
+     * @return List<AssetsCalculateEqptData>
+     */
+    List<AssetsCalculateEqptData> getAllByAssetsCalculateId(Long calculateId);
+
 }

+ 15 - 0
service/src/main/java/com/dayou/service/AssetsCalculateService.java

@@ -3,6 +3,7 @@ import com.dayou.entity.AssetsCalculate;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.dayou.vo.calculate.AssetsCalculateProgressVO;
+import com.fasterxml.jackson.core.JsonProcessingException;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
@@ -49,4 +50,18 @@ public interface AssetsCalculateService extends IService<AssetsCalculate> {
          */
         Boolean updateCalculateBaseInfo(Long calculateId, String baseInfo);
 
+        /**
+         * 生成机器设备测算表excel文件
+         * @param calculateId 测算表id
+         * @return Boolean
+         */
+        Boolean generateEquipmentCalculate(Long calculateId) throws IOException;
+
+        /**
+         * 根据测算表id获取基础测算信息
+         * @param calculateId 测算表id
+         * @return String
+         */
+        String getCalculateBaseInfo(Long calculateId);
+
 }

+ 5 - 0
service/src/main/java/com/dayou/service/impl/AssetsCalculateEqptDataServiceImpl.java

@@ -40,4 +40,9 @@ public class AssetsCalculateEqptDataServiceImpl extends ServiceImpl<AssetsCalcul
     public Boolean hasImportedEquipment(Long calculateId) {
         return dataMapper.hasImportedEquipment(calculateId) > 0;
     }
+
+    @Override
+    public List<AssetsCalculateEqptData> getAllByAssetsCalculateId(Long calculateId) {
+        return dataMapper.getAllByAssetsCalculateId(calculateId);
+    }
 }

+ 129 - 0
service/src/main/java/com/dayou/service/impl/AssetsCalculateServiceImpl.java

@@ -3,14 +3,26 @@ package com.dayou.service.impl;
 import cn.dev33.satoken.stp.StpUtil;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.read.listener.PageReadListener;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.dayou.common.BaseEntity;
+import com.dayou.common.CalculateFormula;
+import com.dayou.config.FileNetConfig;
 import com.dayou.dto.calculate.equipment.EquipmentBaseInfoDTO;
 import com.dayou.entity.AssetsCalculate;
 import com.dayou.entity.AssetsCalculateEqptData;
+import com.dayou.entity.TmplAssetCalculate;
+import com.dayou.entity.TmplAssetCalculateSection;
 import com.dayou.mapper.AssetsCalculateMapper;
+import com.dayou.mapper.TmplAssetCalculateMapper;
+import com.dayou.mapper.TmplAssetCalculateSectionMapper;
 import com.dayou.service.AssetsCalculateEqptDataService;
 import com.dayou.service.AssetsCalculateService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dayou.utils.EasyExcelUtil;
 import com.dayou.vo.calculate.AssetsCalculateProgressVO;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.poi.ss.usermodel.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -20,6 +32,13 @@ import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.text.MessageFormat;
+import java.time.LocalDate;
+
+import static com.dayou.common.CalculateFormula.EQUIPMENT_MAIN_FORMULA;
 
 /**
  * <p>
@@ -38,6 +57,15 @@ public class AssetsCalculateServiceImpl extends ServiceImpl<AssetsCalculateMappe
     @Autowired
     private AssetsCalculateEqptDataService assetsCalculateEqptDataService;
 
+    @Autowired
+    private TmplAssetCalculateMapper tmplAssetCalculateMapper;
+
+    @Autowired
+    private TmplAssetCalculateSectionMapper calculateSectionMapper;
+
+    @Autowired
+    private FileNetConfig fileNetConfig;
+
     @Override
     @SuppressWarnings("unchecked")
     public Page<AssetsCalculate> selectPage(Page page,AssetsCalculate assetsCalculate){
@@ -111,4 +139,105 @@ public class AssetsCalculateServiceImpl extends ServiceImpl<AssetsCalculateMappe
         assetsCalculateMapper.updateCalculateProgress(calculateId,"GENERATE");
         return assetsCalculateMapper.updateCalculateBaseInfo(calculateId, baseInfo);
     }
+
+    /**
+     * 生成机器设备测算表excel文件
+     * @param calculateId 测算表id
+     * @return Boolean
+     */
+    @Override
+    public Boolean generateEquipmentCalculate(Long calculateId) throws IOException {
+
+        // 第一步:写入数据到 机器设备-主模板-设备信息-段落模板
+        // 获取模板
+        TmplAssetCalculateSection calculateSection = calculateSectionMapper.getByTmplCode("MAIN_DETAIL");
+        // 生成后文件的位置
+        String mainDetailPath = fileNetConfig.getBaseDir() + fileNetConfig.getAssetOutputCalculatePath() + System.currentTimeMillis() + "_MAIN_DETAIL.xlsx";
+        // 模板文件的位置
+        String mainDetailTMplPath = fileNetConfig.getBaseDir() + calculateSection.getSectionFileUrl() + calculateSection.getSectionFileName();
+        // 写入
+        EasyExcel.write(mainDetailPath)
+                .withTemplate(mainDetailTMplPath)
+                .sheet()
+                .doFill(assetsCalculateEqptDataService.getAllByAssetsCalculateId(calculateId));
+
+        // 第二步:写入数据到 机器设备-主模板
+        // 获取模板
+        TmplAssetCalculate calculate = tmplAssetCalculateMapper.getCalculateTmplByCode("MAIN");
+        // 生成后文件的位置
+        String mainPath = fileNetConfig.getBaseDir() + fileNetConfig.getAssetOutputCalculatePath() + System.currentTimeMillis() + "_MAIN.xlsx";
+        // 模板文件的位置
+        String mainTmplPath = fileNetConfig.getBaseDir() + calculate.getFileUrl() + calculate.getFileName();
+        // 获取基础测算信息
+        ObjectMapper objectMapper = new ObjectMapper();
+        EquipmentBaseInfoDTO baseInfoDTO = objectMapper.readValue(getCalculateBaseInfo(calculateId), EquipmentBaseInfoDTO.class);
+        // 利息、前期费用率、建设单位管理费率采用百分比,需要除100
+        baseInfoDTO.setInterest(baseInfoDTO.getInterest() / 100);
+        baseInfoDTO.setPreConstructionCostRatio(baseInfoDTO.getPreConstructionCostRatio() / 100);
+        baseInfoDTO.setManagementExpenseRatio(baseInfoDTO.getManagementExpenseRatio() / 100);
+        // 获取评估基准日
+        baseInfoDTO.setValuationBasisDate(getValuationBasisDate(calculateId));
+        // 写入
+        EasyExcel.write(mainPath)
+                .withTemplate(mainTmplPath)
+                .sheet()
+                .doFill(baseInfoDTO);
+
+        // 第三步:将 机器设备-主模板-设备信息-段落模板 拼接到 写入数据到 机器设备-主模板
+        // 合并后文件的位置
+        String mainMergePath = fileNetConfig.getBaseDir() + fileNetConfig.getAssetOutputCalculatePath() + System.currentTimeMillis() + "_MAIN_MERGE.xlsx";
+        Workbook workbook = EasyExcelUtil.mergeExcel(mainDetailPath, mainPath, 0, 4, 0);
+
+        // 第四步:主模板设置公式
+        // 遍历所有行,跳过前四行
+        Sheet sheet = workbook.getSheetAt(0);
+        for (int i = 4; i <= sheet.getLastRowNum(); i++) {
+            Row row = sheet.getRow(i);
+            // 循环设置公式
+            for (CalculateFormula.EquipmentMainFormula formula: EQUIPMENT_MAIN_FORMULA) {
+                Cell cell = row.getCell(formula.getColumn() - 1);
+                // 如果该单元格不存在,则创建一个
+                if (cell == null) {
+                    cell = row.createCell(formula.getColumn() - 1);
+                }
+                // 设置公式
+                cell.setCellFormula(MessageFormat.format(formula.getFormula(),(row.getRowNum() + 1)));
+            }
+        }
+        // 强制计算公式
+        workbook.getCreationHelper().createFormulaEvaluator().evaluateAll();
+
+        OutputStream outputStream = Files.newOutputStream(Paths.get(mainMergePath));
+        workbook.write(outputStream);
+        // 关闭流
+        workbook.close();
+        outputStream.close();
+        return null;
+    }
+
+    /**
+     * 根据测算表id获取基础测算信息
+     * @param calculateId 测算表id
+     * @return String
+     */
+    @Override
+    public String getCalculateBaseInfo(Long calculateId) {
+        return assetsCalculateMapper.selectOne(new LambdaQueryWrapper<AssetsCalculate>()
+                .select(AssetsCalculate::getBaseInfo)
+                .eq(BaseEntity::getId, calculateId)
+                .eq(BaseEntity::getDeleteStatus, 0))
+                .getBaseInfo();
+    }
+
+    /**
+     * 根据测算表id获取评估基准日
+     * @param calculateId 测算表id
+     * @return String
+     */
+    public LocalDate getValuationBasisDate(Long calculateId) {
+        return assetsCalculateMapper.selectOne(new LambdaQueryWrapper<AssetsCalculate>()
+                .select(AssetsCalculate::getValuationBasisDate)
+                .eq(BaseEntity::getId, calculateId)
+                .eq(BaseEntity::getDeleteStatus, 0)).getValuationBasisDate();
+    }
 }