ソースを参照

1.机器设备测算表生成优化
2.新增通用下载文件接口

GouGengquan 7 ヶ月 前
コミット
c73f379b00

+ 13 - 0
biz-base/src/main/java/com/dayou/controller/FileController.java

@@ -103,4 +103,17 @@ public class FileController {
         }
     }
 
+    /**
+     * 通用下载文件接口
+     * @param request
+     * @param response
+     * @param fileDiskPath 文件在磁盘的路径
+     * @param fileName 文件名
+     */
+    @GetMapping("/download")
+    public void downloadFile(HttpServletRequest request, HttpServletResponse response, String fileDiskPath, String fileName){
+        File file = new File(fileDiskPath);
+        FileNetUtil.writeFile2Response(request,response,file,fileName);
+    }
+
 }

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

@@ -47,4 +47,11 @@ public interface AssetsCalculateMapper extends BaseMapper<AssetsCalculate> {
      * @return List<AssetsCalculateVO>
      */
     List<AssetsCalculateVO> listAllByProjectId(@Param("projectId") Long projectId);
+
+    /**
+     * 获取新增DocumentProduction所需的测算信息
+     * @param calculateId 测算表id
+     * @return AssetsCalculateVO
+     */
+    AssetsCalculateVO getCalculateInfoForDoc(@Param("calculateId") Long calculateId);
 }

+ 25 - 2
dao/src/main/resources/mapper/AssetsCalculateMapper.xml

@@ -29,7 +29,12 @@
         FROM assets_calculate
         WHERE delete_status = 0
         AND progress != 'FINISHED'
-        AND project_id = #{projectId}
+        <if test="projectId != null">
+            AND project_id = #{projectId}
+        </if>
+        <if test="calculateId != null">
+            AND project_id = #{calculateId}
+        </if>
     </select>
 
     <!--通过id更新测算表进度-->
@@ -56,13 +61,31 @@
                valuation_basis_date,
                principal,
                dict_data.name AS projectTypeName,
-               calculate.create_time
+               calculate.create_time,
+               doc.doc_name,
+               doc.doc_url,
+               calculate.progress
         FROM assets_calculate AS calculate
         LEFT JOIN assets_project AS project ON project.id = calculate.project_id AND project.delete_status = 0
         LEFT JOIN sys_dict_data AS dict_data ON dict_data.id = project.project_type_id
+        LEFT JOIN document_production AS doc ON doc.business_id = project.id AND doc.business_sub_id = calculate.id
         WHERE calculate.delete_status = 0
         AND calculate.project_id = #{projectId}
     </select>
 
+    <!--获取新增DocumentProduction所需的测算信息-->
+    <select id="getCalculateInfoForDoc" resultType="com.dayou.vo.AssetsCalculateVO">
+        SELECT calculate.id AS id,
+               project_id,
+               calculate_name,
+               principal,
+               dict_data.name AS projectTypeName
+        FROM assets_calculate AS calculate
+        LEFT JOIN assets_project AS project ON project.id = calculate.project_id AND project.delete_status = 0
+        LEFT JOIN sys_dict_data AS dict_data ON dict_data.id = project.project_type_id
+        WHERE calculate.delete_status = 0
+        AND calculate.id = #{calculateId}
+    </select>
+
 
 </mapper>

+ 2 - 1
dao/src/main/resources/mapper/DocumentProductionMapper.xml

@@ -20,7 +20,8 @@
         FROM
             document_production
         WHERE
-            delete_status = 0 ORDER by update_time DESC
+            business_type != 'ASSETS'
+            AND delete_status = 0 ORDER by update_time DESC
     </select>
 
 </mapper>

+ 9 - 0
domain/src/main/java/com/dayou/entity/DocumentProduction.java

@@ -2,10 +2,14 @@ package com.dayou.entity;
 
 import com.dayou.common.BaseEntity;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
 
 import java.io.Serializable;
 
+@EqualsAndHashCode(callSuper = true)
 @Data
+@Accessors(chain = true)
 public class DocumentProduction extends BaseEntity implements Serializable {
 
     private static final long serialVersionUID=1L;
@@ -65,6 +69,11 @@ public class DocumentProduction extends BaseEntity implements Serializable {
      */
     private String consignor;
 
+    /**
+     * 业务二级id
+     */
+    private Long businessSubId;
+
 
 
 }

+ 3 - 1
domain/src/main/java/com/dayou/enums/DocumentType.java

@@ -14,7 +14,9 @@ public enum DocumentType {
 
     CALCULATE_TABLE("CALCULATE_TABLE","测算表"),
 
-    FOLDER("FOLDER","文件夹")
+    FOLDER("FOLDER","文件夹"),
+
+    EQPT_CALCULATE("EQPT_CALCULATE","机器设备测算表")
     ;
 
     private String name;

+ 15 - 0
domain/src/main/java/com/dayou/vo/AssetsCalculateVO.java

@@ -39,8 +39,23 @@ public class AssetsCalculateVO{
     private String projectTypeName;
 
     /**
+     * 测算表生成进度(BASE、IMPORT、GENERATE、FINISHED)
+     */
+    private String progress;
+
+    /**
      * 创建时间
      */
     private Date createTime;
 
+    /**
+     * 文档名称
+     */
+    private String docName;
+
+    /**
+     * 文档路径
+     */
+    private String docUrl;
+
 }

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

@@ -30,6 +30,11 @@ public interface AssetsCalculateService extends IService<AssetsCalculate> {
 
         AssetsCalculate detail(Long id);
 
+        /**
+         * 新增或修改测算表信息
+         * @param assetsCalculate 测算表信息
+         * @return Boolean
+         */
         Boolean add(AssetsCalculate assetsCalculate);
 
         Boolean update(AssetsCalculate assetsCalculate);

+ 7 - 0
service/src/main/java/com/dayou/service/DocumentProductionService.java

@@ -8,4 +8,11 @@ import com.dayou.entity.DocumentProduction;
 public interface DocumentProductionService extends IService<DocumentProduction> {
 
     Page<DocumentProduction> getPage(DocumentProduction documentProduction, Page page);
+
+    /**
+     * 新增文档信息
+     * @param documentProduction 文档信息
+     * @return Boolean
+     */
+    Boolean addDocumentProduction(DocumentProduction documentProduction);
 }

+ 64 - 26
service/src/main/java/com/dayou/service/impl/AssetsCalculateServiceImpl.java

@@ -9,16 +9,15 @@ 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.entity.*;
+import com.dayou.enums.BusinessEnum;
 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.service.DocumentProductionService;
 import com.dayou.utils.EasyExcelUtil;
 import com.dayou.vo.AssetsCalculateEqptImpDataVO;
 import com.dayou.vo.AssetsCalculateEqptNonsDataVO;
@@ -45,6 +44,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import static com.dayou.common.CalculateFormula.*;
+import static com.dayou.enums.DocumentType.EQPT_CALCULATE;
 import static com.dayou.enums.EquipmentTmplCode.*;
 
 /**
@@ -71,10 +71,14 @@ public class AssetsCalculateServiceImpl extends ServiceImpl<AssetsCalculateMappe
     private TmplAssetCalculateSectionMapper calculateSectionMapper;
 
     @Autowired
+    private DocumentProductionService documentProductionService;
+
+    @Autowired
     private FileNetConfig fileNetConfig;
 
     /**
      * 根据项目id查询所有测算表信息
+     *
      * @param projectId 项目id
      * @return List<AssetsCalculateVO>
      */
@@ -84,29 +88,39 @@ public class AssetsCalculateServiceImpl extends ServiceImpl<AssetsCalculateMappe
     }
 
     @Override
-    public AssetsCalculate detail(Long id){
+    public AssetsCalculate detail(Long id) {
         return this.getById(id);
     }
 
+    /**
+     * 新增或修改测算表信息
+     * @param assetsCalculate 测算表信息
+     * @return Boolean
+     */
     @Override
-    public Boolean add(AssetsCalculate assetsCalculate){
+    public Boolean add(AssetsCalculate assetsCalculate) {
         assetsCalculate.setCreateUserId(StpUtil.getLoginIdAsLong());
-        return  this.save(assetsCalculate);
+        if (ObjectUtil.isNull(assetsCalculate.getId())) {
+            return this.save(assetsCalculate);
+        }else {
+            return this.updateById(assetsCalculate);
+        }
     }
 
     @Override
-    public Boolean update(AssetsCalculate assetsCalculate){
-        return  this.updateById(assetsCalculate);
+    public Boolean update(AssetsCalculate assetsCalculate) {
+        return this.updateById(assetsCalculate);
     }
 
     @Override
-    public Boolean delete(Long id){
+    public Boolean delete(Long id) {
         //逻辑删除
         return this.removeById(id);
     }
 
     /**
      * 根据项目id获取未完成测算表的进度信息
+     *
      * @param projectId 项目id
      * @return AssetsCalculateStepBaseVO
      */
@@ -117,8 +131,9 @@ public class AssetsCalculateServiceImpl extends ServiceImpl<AssetsCalculateMappe
 
     /**
      * 导入保存机器设备基础信息
+     *
      * @param multipartFile Excel文件
-     * @param calculateId 测算表id
+     * @param calculateId   测算表id
      * @return Boolean
      */
     @Override
@@ -134,24 +149,28 @@ public class AssetsCalculateServiceImpl extends ServiceImpl<AssetsCalculateMappe
             // 批量保存
             dataService.saveBatch(dataList);
         }, 1000)).sheet().doRead();
+        // 更新测算表进度
+        assetsCalculateMapper.updateCalculateProgress(calculateId, "GENERATE");
     }
 
     /**
      * 更新测算表基础测算信息
+     *
      * @param calculateId id
-     * @param baseInfo 基础信息json字符串
+     * @param baseInfo    基础信息json字符串
      * @return Boolean
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean updateCalculateBaseInfo(Long calculateId, String baseInfo) {
         // 更新测算表进度
-        assetsCalculateMapper.updateCalculateProgress(calculateId,"GENERATE");
+        assetsCalculateMapper.updateCalculateProgress(calculateId, "IMPORT");
         return assetsCalculateMapper.updateCalculateBaseInfo(calculateId, baseInfo);
     }
 
     /**
      * 生成机器设备测算表excel文件
+     *
      * @param calculateId 测算表id
      * @return Boolean
      */
@@ -204,14 +223,14 @@ public class AssetsCalculateServiceImpl extends ServiceImpl<AssetsCalculateMappe
         for (int i = 4; i <= sheet.getLastRowNum(); i++) {
             Row row = sheet.getRow(i);
             // 循环设置公式
-            for (CalculateFormula.EquipmentMainFormula formula: EQUIPMENT_MAIN_FORMULA) {
+            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)));
+                cell.setCellFormula(MessageFormat.format(formula.getFormula(), (row.getRowNum() + 1)));
             }
         }
 
@@ -237,14 +256,14 @@ public class AssetsCalculateServiceImpl extends ServiceImpl<AssetsCalculateMappe
             for (int i = 2; i <= importedSheet.getLastRowNum(); i++) { // 跳过前两行
                 Row row = importedSheet.getRow(i);
                 // 循环设置公式
-                for (CalculateFormula.EquipmentImportedFormula formula: EQUIPMENT_IMPORTED_FORMULA) {
+                for (CalculateFormula.EquipmentImportedFormula formula : EQUIPMENT_IMPORTED_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)));
+                    cell.setCellFormula(MessageFormat.format(formula.getFormula(), (row.getRowNum() + 1)));
                 }
             }
 
@@ -260,7 +279,7 @@ public class AssetsCalculateServiceImpl extends ServiceImpl<AssetsCalculateMappe
                         // 判断主表的序号和进口设备的序号是否相等
                         if (importedCell != null && row.getCell(0).getNumericCellValue() == importedCell.getNumericCellValue()) {
                             importedRowNum = importedCell.getRowIndex() + 1; // +1是因为代码中下标从0开始,但是excel是从1开始
-                            priceCell.setCellFormula(MessageFormat.format("进口设备!Y{0}",importedRowNum));
+                            priceCell.setCellFormula(MessageFormat.format("进口设备!Y{0}", importedRowNum));
                             break;
                         }
                     }
@@ -268,7 +287,7 @@ public class AssetsCalculateServiceImpl extends ServiceImpl<AssetsCalculateMappe
             }
         }
 
-        // 第五步:设置进口设备的测算表
+        // 第六步:设置非标设备的测算表
         List<AssetsCalculateEqptNonsDataVO> nonsEqptData = dataService.getNonSDataList(calculateId);
         if (ObjectUtil.isNotNull(nonsEqptData)) {
             // 获取模板
@@ -290,14 +309,14 @@ public class AssetsCalculateServiceImpl extends ServiceImpl<AssetsCalculateMappe
             for (int i = 2; i <= nonstandardSheet.getLastRowNum(); i++) { // 跳过前两行
                 Row row = nonstandardSheet.getRow(i);
                 // 循环设置公式
-                for (CalculateFormula.EquipmentNonStandardFormula formula: EQUIPMENT_NONSTANDARD_FORMULA) {
+                for (CalculateFormula.EquipmentNonStandardFormula formula : EQUIPMENT_NONSTANDARD_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)));
+                    cell.setCellFormula(MessageFormat.format(formula.getFormula(), (row.getRowNum() + 1)));
                 }
             }
 
@@ -313,7 +332,7 @@ public class AssetsCalculateServiceImpl extends ServiceImpl<AssetsCalculateMappe
                         // 判断主表的序号和进口设备的序号是否相等
                         if (importedCell != null && row.getCell(0).getNumericCellValue() == importedCell.getNumericCellValue()) {
                             importedRowNum = importedCell.getRowIndex() + 1; // +1是因为代码中下标从0开始,但是excel是从1开始
-                            priceCell.setCellFormula(MessageFormat.format("非标设备!W{0}",importedRowNum));
+                            priceCell.setCellFormula(MessageFormat.format("非标设备!W{0}", importedRowNum));
                             break;
                         }
                     }
@@ -329,25 +348,44 @@ public class AssetsCalculateServiceImpl extends ServiceImpl<AssetsCalculateMappe
         // 关闭流
         workbook.close();
         outputStream.close();
-        return null;
+
+        // 更新测算表进度
+        assetsCalculateMapper.updateCalculateProgress(calculateId, "FINISHED");
+
+        // 保存文档信息到数据库
+        AssetsCalculateVO assetsCalculateVO = assetsCalculateMapper.getCalculateInfoForDoc(calculateId);
+        DocumentProduction documentProduction = new DocumentProduction()
+                .setBusinessType("ASSETS")
+                .setBusinessId(assetsCalculateVO.getProjectId())
+                .setDocType(EQPT_CALCULATE.getName())
+                .setDocName(assetsCalculateVO.getCalculateName() + ".xlsx")
+                .setConsignor(assetsCalculateVO.getPrincipal())
+                .setDocUrl(mainMergePath)
+                .setCreateUserId(StpUtil.getLoginIdAsLong())
+                .setBusinessCate(assetsCalculateVO.getProjectTypeName())
+                .setDocNo("")
+                .setBusinessSubId(calculateId);
+        return documentProductionService.addDocumentProduction(documentProduction);
     }
 
     /**
      * 根据测算表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))
+                        .select(AssetsCalculate::getBaseInfo)
+                        .eq(BaseEntity::getId, calculateId)
+                        .eq(BaseEntity::getDeleteStatus, 0))
                 .getBaseInfo();
     }
 
     /**
      * 根据测算表id获取评估基准日
+     *
      * @param calculateId 测算表id
      * @return String
      */

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

@@ -19,4 +19,14 @@ public class DocumentProductionServiceImpl extends ServiceImpl<DocumentProductio
     public Page<DocumentProduction> getPage(DocumentProduction documentProduction, Page page) {
         return  documentProductionMapper.getPage(page,documentProduction);
     }
+
+    /**
+     * 新增文档信息
+     * @param documentProduction 文档信息
+     * @return Boolean
+     */
+    @Override
+    public Boolean addDocumentProduction(DocumentProduction documentProduction) {
+        return this.save(documentProduction);
+    }
 }

+ 8 - 1
sql/update_sql.sql

@@ -559,5 +559,12 @@ CREATE TABLE `eqpt_life_ifr_refs` (
 ) ENGINE=InnoDB AUTO_INCREMENT=1155 DEFAULT CHARSET=utf8mb4 COMMENT='设备年限、安装费率参考信息表';
 
 # 修改表assets_calculate_eqpt_imp_data
-ALTER TABLE assets_calculate_eqpt_imp_data MODIFY COLUMN id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '进口设备测算数据id'
+ALTER TABLE assets_calculate_eqpt_imp_data MODIFY COLUMN id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '进口设备测算数据id';
+
+/**
+  日期:2024-12-03
+  修改人:苟耕铨
+  未更新到test-env
+ */
+ALTER TABLE document_production ADD COLUMN business_sub_id bigint(20) NULL COMMENT '业务二级id';