Browse Source

支持PageOffice在线查看已生成的阶段文档

wucl 8 months ago
parent
commit
5fdb2fae2b

+ 19 - 0
biz-base/src/main/java/com/dayou/controller/HouseGuarantyDocController.java

@@ -3,13 +3,20 @@ package com.dayou.controller;
 
 import com.dayou.dto.HouseGuarantyTableDTO;
 import com.dayou.entity.HouseGuarantyProcess;
+import com.dayou.enums.BusinessEnum;
+import com.dayou.enums.CodeMsgEnumInterface;
 import com.dayou.result.Result;
 import com.dayou.service.HouseGuarantyProcessService;
 import com.dayou.service.HouseGuarantyService;
+import com.dayou.vo.ProcessVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
 
 /**
  * 房地产抵押类报告
@@ -64,4 +71,16 @@ public class HouseGuarantyDocController {
         return Result.build(houseGuarantyProcessService.getHouseGuarantyProcess(id));
     }
 
+    /**
+     * 房地产抵押过程节点
+     * id = parentId
+     * @return
+     */
+    @GetMapping("/process/{id}")
+    public Result<List<ProcessVO>> getHouseGuarantyProcesses(@PathVariable("id") Long id){
+        List<ProcessVO> list = houseGuarantyProcessService.getHouseGuarantyProcesses(id);
+        return Result.build(list);
+    }
+
+
 }

+ 2 - 0
biz-base/src/main/resources/application-local.yaml

@@ -76,3 +76,5 @@ file-net:
   house-guaranty-path: house/guaranty
   house-guaranty-template-path: house/guaranty/temp/
 
+posyspath:  E:\pageoffice
+

+ 2 - 0
biz-base/src/main/resources/application.yaml

@@ -3,4 +3,6 @@ spring:
     active: local
   application:
     name: productivity-platform
+  freemarker:
+    checkTemplateLocation:  false
 

+ 0 - 11
biz-base/src/test/java/com/dayou/FreeMarkTest.java

@@ -3,36 +3,25 @@ package com.dayou;
 
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.TypeReference;
 import com.aspose.cells.*;
 import com.aspose.words.CompositeNode;
 import com.aspose.words.Document;
 import com.aspose.words.DocumentBuilder;
 import com.aspose.words.Paragraph;
 import com.dayou.doc.house.ConsignorLetterDO;
-import com.dayou.dto.Address;
-import com.dayou.enums.MainBusiness;
 import com.dayou.exception.ErrorCode;
 import com.dayou.utils.*;
 import com.dayou.utils.table.WordTableHelper;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.apache.poi.xwpf.usermodel.XWPFDocument;
-import org.apache.poi.xwpf.usermodel.XWPFParagraph;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 
 import java.io.*;
-import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 import static com.dayou.enums.HouseTargetTableColumn.ID;

+ 1 - 1
common/src/main/java/com/dayou/utils/HouseDocumentUtil.java

@@ -38,7 +38,7 @@ public class HouseDocumentUtil {
                     && item.get(CERTIFICATE_NO.getZhName())!=null){
                     for (String key : columns){
                         if ((item.isNull(key) || item.get(key)==null || item.get(key)=="")
-                                && !key.equals(ACT_ADDRESS.getZhName())){
+                                && !key.equals(ACT_ADDRESS.getZhName()) && i!=0){
                             JSONObject lastItem  = (JSONObject) jsonArray.get(i-1);
                             item.set(key, lastItem.get(key));
                         }

+ 26 - 0
domain/src/main/java/com/dayou/entity/HouseGuarantyProcess.java

@@ -23,4 +23,30 @@ public class HouseGuarantyProcess extends BaseEntity implements Serializable {
      */
     private String targetsHtml;
 
+    /**
+     * 过程节点
+     */
+    private String processName;
+
+    /**
+     * 过程文档路径
+     */
+    private String docUrl;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 }

+ 32 - 5
domain/src/main/java/com/dayou/enums/MainBusiness.java

@@ -1,19 +1,19 @@
 package com.dayou.enums;
 
-import lombok.Data;
 
+public enum BusinessEnum implements CodeMsgEnumInterface<String,String>{
 
-public enum MainBusiness implements CodeMsgEnumInterface<String,String>{
-
-    HOUSE("HOUSE","房地产", HouseSubBusiness.values());
+    HOUSE_BUSINESS("HOUSE_BUSINESS","房地产", HouseSubBusiness.values()),
+    HOUSE_GUARANTY_PROCESS("HOUSE_GUARANTY_PROCESS","房地产抵押节点",HouseGuarantyProcess.values()),
 
+    ;
     private String code;
 
     private String msg;
 
     private CodeMsgEnumInterface[] subBusiness;
 
-    MainBusiness(String code, String msg, CodeMsgEnumInterface[] subBusiness) {
+    BusinessEnum(String code, String msg, CodeMsgEnumInterface[] subBusiness) {
         this.code = code;
         this.msg = msg;
         this.subBusiness = subBusiness;
@@ -60,4 +60,31 @@ public enum MainBusiness implements CodeMsgEnumInterface<String,String>{
     }
 
 
+    public enum HouseGuarantyProcess implements CodeMsgEnumInterface<String,String>{
+
+        CONSIGNOR_LETTER("CONSIGNOR_LETTER","致委托人函"),
+
+        STATEMENT_CONDITIONS_EXPLAIN("STATEMENT_CONDITIONS_EXPLAIN","假设限制条件及使用说明")
+
+        ;
+
+        private String code;
+
+        private String msg;
+
+        HouseGuarantyProcess(String code, String msg){
+            this.code = code;
+            this.msg = msg;
+        }
+
+        @Override
+        public String getCode() {
+            return code;
+        }
+
+        @Override
+        public String getMsg() {
+            return msg;
+        }
+    }
 }

+ 28 - 0
domain/src/main/java/com/dayou/vo/ProcessVO.java

@@ -0,0 +1,28 @@
+package com.dayou.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 类说明:
+ *
+ * @author: wucl
+ * @since: 2024/11/15
+ * created with IntelliJ IDEA.
+ */
+@Data
+public class ProcessVO {
+
+    private Long id;
+
+    private String name;
+
+    private Boolean state;
+
+    private Date updateDate;
+
+    private String creator;
+
+    private String docUrl;
+}

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

@@ -2,6 +2,9 @@ package com.dayou.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.dayou.entity.HouseGuarantyProcess;
+import com.dayou.vo.ProcessVO;
+
+import java.util.List;
 
 /**
  * <p>
@@ -14,4 +17,6 @@ import com.dayou.entity.HouseGuarantyProcess;
 public interface HouseGuarantyProcessService extends IService<HouseGuarantyProcess> {
 
     HouseGuarantyProcess getHouseGuarantyProcess(Long id);
+
+    List<ProcessVO> getHouseGuarantyProcesses(Long id);
 }

+ 34 - 0
service/src/main/java/com/dayou/service/impl/HouseGuarantyProcessServiceImpl.java

@@ -1,17 +1,25 @@
 package com.dayou.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dayou.common.BaseEntity;
 import com.dayou.entity.DocumentProduction;
 import com.dayou.entity.HouseGuarantyProcess;
+import com.dayou.enums.BusinessEnum;
 import com.dayou.mapper.HouseGuarantyProcessMapper;
 import com.dayou.service.DocumentProductionService;
 import com.dayou.service.HouseGuarantyProcessService;
 import com.dayou.service.HouseGuarantyService;
+import com.dayou.vo.ProcessVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 @Service
 public class HouseGuarantyProcessServiceImpl extends ServiceImpl<HouseGuarantyProcessMapper, HouseGuarantyProcess> implements HouseGuarantyProcessService {
 
@@ -24,4 +32,30 @@ public class HouseGuarantyProcessServiceImpl extends ServiceImpl<HouseGuarantyPr
                 .select(DocumentProduction::getBusinessId).eq(BaseEntity::getId, id));
         return this.getById(dp.getBusinessId());
     }
+
+    @Override
+    public List<ProcessVO> getHouseGuarantyProcesses(Long id) {
+        List<String> aProcesses = Arrays.stream(BusinessEnum.HouseGuarantyProcess.values()).map(BusinessEnum.HouseGuarantyProcess::getMsg).collect(Collectors.toList());
+        HouseGuarantyProcess parent = this.getOne(new LambdaQueryWrapper<HouseGuarantyProcess>().eq(BaseEntity::getId, id).select(HouseGuarantyProcess::getHome));
+        Map<String, List<HouseGuarantyProcess>> collect = this.list(new LambdaQueryWrapper<HouseGuarantyProcess>().select(BaseEntity::getId, HouseGuarantyProcess::getHome,
+                        BaseEntity::getUpdateTime, HouseGuarantyProcess::getProcessName,HouseGuarantyProcess::getDocUrl)
+                .eq(HouseGuarantyProcess::getHome, parent.getHome())).stream().collect(Collectors.groupingBy(HouseGuarantyProcess::getProcessName));
+
+        List<ProcessVO> list = aProcesses.stream().map(x -> {
+            ProcessVO processVO = new ProcessVO();
+            processVO.setName(x);
+            List<HouseGuarantyProcess> houseGuarantyProcesses = collect.get(x);
+            if (CollectionUtil.isNotEmpty(houseGuarantyProcesses)){
+                HouseGuarantyProcess process = houseGuarantyProcesses.get(0);
+                if (process != null) {
+                    processVO.setId(process.getId());
+                    processVO.setUpdateDate(process.getUpdateTime());
+                    processVO.setState(Boolean.TRUE);
+                    processVO.setDocUrl(process.getDocUrl());
+                }
+            }
+            return processVO;
+        }).collect(Collectors.toList());
+        return list;
+    }
 }

+ 18 - 12
service/src/main/java/com/dayou/service/impl/HouseGuarantyServiceImpl.java

@@ -6,13 +6,15 @@ import com.alibaba.fastjson2.JSON;
 import com.aspose.cells.SaveFormat;
 import com.aspose.cells.Workbook;
 import com.aspose.words.*;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.dayou.common.BaseEntity;
 import com.dayou.config.FileNetConfig;
 import com.dayou.doc.house.ConsignorLetterDO;
 import com.dayou.dto.HouseGuarantyTableDTO;
 import com.dayou.entity.DocumentProduction;
 import com.dayou.entity.HouseGuarantyProcess;
 import com.dayou.enums.DocumentType;
-import com.dayou.enums.MainBusiness;
+import com.dayou.enums.BusinessEnum;
 import com.dayou.exception.ErrorCode;
 import com.dayou.service.DocumentProductionService;
 import com.dayou.service.HouseGuarantyProcessService;
@@ -67,6 +69,7 @@ public class HouseGuarantyServiceImpl implements HouseGuarantyService {
         HouseGuarantyProcess hgp = new HouseGuarantyProcess();
         hgp.setHome(homePath);
         hgp.setTargetsHtml(html);
+        hgp.setProcessName(BusinessEnum.HouseGuarantyProcess.CONSIGNOR_LETTER.getMsg());
         houseGuarantyProcessService.save(hgp);
         wordTableHelper.createTableWord(xHtml, fileNetConfig.getBaseDir() + homePath);
         return hgp.getId();
@@ -104,7 +107,9 @@ public class HouseGuarantyServiceImpl implements HouseGuarantyService {
             throw new RuntimeException(e);
         }
         HouseGuarantyProcess process = houseGuarantyProcessService.getById(id);
-        String home = fileNetConfig.getBaseDir() + process.getHome();
+        String baseDir = fileNetConfig.getBaseDir();
+        String home = baseDir + process.getHome();
+
         try {
             // 读取估价对象地址
             JSONArray array = JsonUtil.file2JsonArray(home + TARGETS_JSON);
@@ -144,17 +149,19 @@ public class HouseGuarantyServiceImpl implements HouseGuarantyService {
                 clDO.setOwnshipUser(ownShipUser);
                 removeBlank = false;
             }
-            byte[] tmplWordByte = Files.readAllBytes(Paths.get(fileNetConfig.getBaseDir()
+            byte[] tmplWordByte = Files.readAllBytes(Paths.get(baseDir
                     + fileNetConfig.getHouseGuarantyTemplatePath() + CONSIGNOR_LETTER_TEMPLATE));
             byte[] resultWordByte = AsposeWordUtil.fillWordDataByDomain(tmplWordByte, clDO);
-            String consignorLetterName = home + System.currentTimeMillis() + ".docx";
-            File resultFile = new File(consignorLetterName);
+            String consignorLetterName = process.getHome() + System.currentTimeMillis() + ".docx";
+            File resultFile = new File(baseDir + consignorLetterName);
             FileOutputStream fos = new FileOutputStream(resultFile);
             fos.write(resultWordByte);
             fos.close();
-            insetTargetTableWord(consignorLetterName,home + TARGETS_DOCX,removeBlank);
-
-            documentProductionService.save(buildDocumentProduction(id,projectName,docNo,consignorLetterName,consignor));
+            insetTargetTableWord(baseDir + consignorLetterName,home + TARGETS_DOCX,removeBlank);
+            //更新过程文档url
+            houseGuarantyProcessService.update(new LambdaUpdateWrapper<HouseGuarantyProcess>().set(HouseGuarantyProcess::getDocUrl, consignorLetterName)
+                    .eq(BaseEntity::getId,id));
+            documentProductionService.save(buildDocumentProduction(id,projectName,docNo,consignor));
             return consignorLetterName;
         } catch (Exception e) {
             throw new RuntimeException(e);
@@ -207,14 +214,13 @@ public class HouseGuarantyServiceImpl implements HouseGuarantyService {
         }
     }
 
-    private DocumentProduction buildDocumentProduction(Long id,String docName,String docNo,String docUrl,String consignor){
+    private DocumentProduction buildDocumentProduction(Long id,String docName,String docNo,String consignor){
         DocumentProduction dp = new DocumentProduction();
-        dp.setBusinessType(MainBusiness.HOUSE.getMsg());
-        dp.setBusinessCate(MainBusiness.HouseSubBusiness.GUARANTY.getMsg());
+        dp.setBusinessType(BusinessEnum.HOUSE_BUSINESS.getMsg());
+        dp.setBusinessCate(BusinessEnum.HouseSubBusiness.GUARANTY.getMsg());
         dp.setBusinessId(id);
         dp.setDocName(docName);
         dp.setDocType(DocumentType.REPORT.getName());
-        dp.setDocUrl(docUrl);
         dp.setDocNo(docNo);
         dp.setConsignor(consignor);
         return dp;

+ 45 - 2
sql/update_sql.sql

@@ -191,7 +191,7 @@ ALTER TABLE tmpl_asset_calculate ADD COLUMN tmpl_code VARCHAR(50) NOT NULL COMME
     修改人:吴长林
  */
 DROP TABLE IF EXISTS `house_guaranty_process`;
-CREATE TABLE `house_guaranty_process-platform`  (
+CREATE TABLE `house_guaranty_process`  (
                                                    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id',
                                                    `home` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'docHome',
                                                    `targets_html` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '估价结果一览表代码',
@@ -243,4 +243,47 @@ ALTER TABLE assets_calculate MODIFY COLUMN create_user_id bigint(20) DEFAULT NUL
   未更新到test-env
  */
 ALTER TABLE assets_project ADD COLUMN completion_status BIT(1) DEFAULT b'0' NOT NULL COMMENT '项目完成状态';
-ALTER TABLE assets_calculate CHANGE COLUMN assets_id project_id BIGINT(20) NOT NULL COMMENT '资产项目id';
+ALTER TABLE assets_calculate CHANGE COLUMN assets_id project_id BIGINT(20) NOT NULL COMMENT '资产项目id';
+ALTER TABLE assets_calculate MODIFY COLUMN create_user_id bigint(20) DEFAULT NULL COMMENT '测算表创建者user_id'
+
+
+
+/**
+  日期:2024-11-15
+  修改人:wucl
+  未更新到test-env
+ */
+DROP TABLE IF EXISTS `house_guaranty_process`;
+CREATE TABLE `house_guaranty_process` (
+                                          `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
+                                          `parent_id` bigint(20) DEFAULT NULL COMMENT '父级id',
+                                          `home` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'docHome',
+                                          `targets_html` text COLLATE utf8mb4_unicode_ci COMMENT '估价结果一览表代码',
+                                          `process_name` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '过程节点',
+                                          `doc_url` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '过程文档路径',
+                                          `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+                                          `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+                                          `delete_status` bit(1) NOT NULL DEFAULT b'0' COMMENT '删除状态',
+                                          PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='房地产抵押过程表';
+
+DROP TABLE IF EXISTS `document_production`;
+CREATE TABLE `document_production` (
+                                       `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
+                                       `business_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '业务类型(ASSETS、HOUSE、LAND)',
+                                       `business_id` bigint(20) NOT NULL COMMENT '业务id',
+                                       `doc_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文档类型(各类报告、复评函、意见书、各类测算表)',
+                                       `doc_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文档编号',
+                                       `doc_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文档名称',
+                                       `consignor` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '委托人',
+                                       `doc_url` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文档路径',
+                                       `doc_version` int(11) NOT NULL DEFAULT '1' COMMENT '文档版本',
+                                       `is_active` bit(1) NOT NULL DEFAULT b'1' COMMENT '当前使用',
+                                       `create_user_id` bigint(20) DEFAULT NULL COMMENT '文档生成人id',
+                                       `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '文档生成时间',
+                                       `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+                                       `delete_status` bit(1) NOT NULL DEFAULT b'0' COMMENT '删除状态',
+                                       `business_cate` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '业务子类',
+                                       PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文档产品';
+