Kaynağa Gözat

生成一般假设和未定事项假设段落逻辑

wucl 8 ay önce
ebeveyn
işleme
06cb294e05
20 değiştirilmiş dosya ile 498 ekleme ve 18 silme
  1. 9 0
      biz-base/src/main/java/com/dayou/controller/HouseGuarantyDocController.java
  2. 20 2
      biz-base/src/main/java/com/dayou/controller/HouseGuarantyTargetController.java
  3. 24 0
      biz-base/src/test/java/com/dayou/ConditionDocumentTest.java
  4. 25 0
      common/src/main/java/com/dayou/constants/HouseGuarantyDoc.java
  5. 9 0
      common/src/main/java/com/dayou/utils/CollectionUtil.java
  6. 94 0
      common/src/main/java/com/dayou/utils/HouseDocumentUtil.java
  7. 5 0
      domain/src/main/java/com/dayou/doc/house/ConditionDO.java
  8. 20 0
      domain/src/main/java/com/dayou/doc/house/ConsignorLetterDO.java
  9. 1 0
      domain/src/main/java/com/dayou/entity/HouseGuarantyProcess.java
  10. 6 0
      domain/src/main/java/com/dayou/entity/HouseGuarantyTarget.java
  11. 5 0
      domain/src/main/java/com/dayou/entity/TmplHouseParagraph.java
  12. 74 4
      domain/src/main/java/com/dayou/enums/BusinessEnum.java
  13. 1 1
      domain/src/main/java/com/dayou/vo/HouseTargetVO.java
  14. 14 0
      service/src/main/java/com/dayou/service/HouseGuarantyService.java
  15. 2 0
      service/src/main/java/com/dayou/service/HouseGuarantyTargetService.java
  16. 12 0
      service/src/main/java/com/dayou/service/TmplHouseParagraphService.java
  17. 79 8
      service/src/main/java/com/dayou/service/impl/HouseGuarantyServiceImpl.java
  18. 7 0
      service/src/main/java/com/dayou/service/impl/HouseGuarantyTargetServiceImpl.java
  19. 80 3
      service/src/main/java/com/dayou/service/impl/TmplHouseParagraphServiceImpl.java
  20. 11 0
      sql/update_sql.sql

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

@@ -89,5 +89,14 @@ public class HouseGuarantyDocController {
         return Result.build(houseGuarantyService.getTargetsById(id));
     }
 
+    /**
+     * 生成《估价的假设和限制条件及使用报告说明》
+     * @param id
+     * @return
+     */
+    @GetMapping("/condition/{id}")
+    public Result<String> genConditionLetter(@PathVariable("id") Long id){
+        return Result.build(houseGuarantyService.genConditionLetter(id));
+    }
 
 }

+ 20 - 2
biz-base/src/main/java/com/dayou/controller/HouseGuarantyTargetController.java

@@ -1,8 +1,11 @@
 package com.dayou.controller;
 
+import com.dayou.entity.HouseGuarantyTarget;
+import com.dayou.result.Result;
+import com.dayou.service.HouseGuarantyTargetService;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * 房地产抵押类估价对象信息
@@ -11,4 +14,19 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("house/guaranty/target")
 @Slf4j
 public class HouseGuarantyTargetController {
+
+    @Autowired
+    private HouseGuarantyTargetService houseGuarantyTargetService;
+
+    @PostMapping()
+    public Result<Boolean> save(@RequestBody HouseGuarantyTarget houseGuarantyTarget) {
+        boolean save = houseGuarantyTargetService.save(houseGuarantyTarget);
+        return Result.build(save);
+    }
+
+    @GetMapping()
+    public Result<HouseGuarantyTarget> getTarget(Long docId, String tId) {
+        HouseGuarantyTarget target = houseGuarantyTargetService.getTarget(docId,tId);
+        return Result.build(target);
+    }
 }

+ 24 - 0
biz-base/src/test/java/com/dayou/ConditionDocumentTest.java

@@ -1,14 +1,19 @@
 package com.dayou;
 
 import com.alibaba.fastjson2.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.dayou.constants.HouseGuarantyParagraphTemp;
 import com.dayou.doc.house.ConditionDO;
 import com.dayou.doc.house.ConsignorLetterDO;
 import com.dayou.dto.HouseGuarantyTableDTO;
+import com.dayou.entity.HouseGuarantyTarget;
+import com.dayou.service.HouseGuarantyTargetService;
+import com.dayou.service.TmplHouseParagraphService;
 import com.dayou.utils.AsposeWordUtil;
 import com.dayou.utils.EasyExcelUtil;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 
 import java.io.File;
@@ -16,8 +21,10 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Paths;
+import java.util.List;
 import java.util.Map;
 
+import static com.dayou.constants.HouseGuarantyDoc.YES;
 import static com.dayou.constants.HouseGuarantyParagraphTemp.*;
 
 @SpringBootTest
@@ -52,4 +59,21 @@ public class ConditionDocumentTest {
         fos.write(resultWordByte);
         fos.close();
     }
+
+    @Autowired
+    private TmplHouseParagraphService tmplHouseParagraphService;
+
+    @Autowired
+    private HouseGuarantyTargetService houseGuarantyTargetService;
+
+    /**
+     * 一般假设测试类
+     */
+    @Test
+    public void testYBJS() {
+        List<HouseGuarantyTarget> targets = houseGuarantyTargetService.list(new LambdaQueryWrapper<HouseGuarantyTarget>().eq(HouseGuarantyTarget::getDocId, 12));
+        String ybjsResult = tmplHouseParagraphService.findYBJSResult(targets, YES, YES);
+        System.out.println(ybjsResult);
+
+    }
 }

+ 25 - 0
common/src/main/java/com/dayou/constants/HouseGuarantyDoc.java

@@ -40,5 +40,30 @@ public class HouseGuarantyDoc {
      */
     public static final String TARGETS_DOCX = "targets_table.docx";
 
+    /**
+     * 估价的假设和限制条件及使用报告说明
+     */
+    public static final String CONDITION_LETTER_TEMPLATE = "condition_letter.docx";
+
+    /**
+     * 是
+     */
+    public static final String YES = "是";
+
+    /**
+     * 否
+     */
+    public static final String NO = "否";
+
+    /**
+     * 酒店部分
+     */
+    public static final String HOTEL_PART = "酒店部分";
+
+    /**
+     * 《不动产权证书》
+     */
+    public static final String IMMOVABLE = "《不动产权证书》";
+
 
 }

+ 9 - 0
common/src/main/java/com/dayou/utils/CollectionUtil.java

@@ -75,4 +75,13 @@ public class CollectionUtil {
     public static String formatZHStop(Collection<?> collection){
         return  collection.toString().replaceAll(EN_DOT,ZH_STOP);
     }
+
+    /**
+     * 判断集合是否为空
+     * @param collection
+     * @return
+     */
+    public static Boolean isNotEmpty(Collection<?> collection){
+        return cn.hutool.core.collection.CollectionUtil.isNotEmpty(collection);
+    }
 }

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

@@ -4,8 +4,11 @@ import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONNull;
 import cn.hutool.json.JSONObject;
+import com.alibaba.fastjson2.JSON;
 import com.dayou.dto.Address;
 import com.dayou.dto.HouseGuarantyTargetDTO;
+import com.dayou.entity.HouseGuarantyTarget;
+import com.dayou.entity.TmplHouseParagraph;
 import com.dayou.enums.HouseTargetTableColumn;
 import com.dayou.exception.ErrorCode;
 
@@ -15,6 +18,7 @@ import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
+import static com.dayou.constants.HouseGuarantyDoc.*;
 import static com.dayou.enums.HouseTargetTableColumn.*;
 import static com.dayou.utils.CollectionUtil.sortedByCounting;
 
@@ -415,4 +419,94 @@ public class HouseDocumentUtil {
         Collections.reverse(result);
         return result;
     }
+
+    /**
+     * 一般假设、格式化“是否核对权属原件”
+     * @param hasImmovable 是否有不动产权利证
+     * @param tmplHouseParagraph 段落模版
+     * @return
+     */
+    public static String getCheckOriginCertificate(String isCheckOriginCertificate,String hasImmovable, TmplHouseParagraph tmplHouseParagraph){
+        if (checkBoolean(isCheckOriginCertificate)){
+            String paragraph = tmplHouseParagraph.getParagraph();
+            if (checkBoolean(hasImmovable)){
+                return paragraph.replace("{immovable}",IMMOVABLE);
+            }else{
+                return paragraph.replace("{immovable}","");
+            }
+        }
+        return null;
+    }
+
+    public static Boolean checkBoolean(String bool){
+        return YES.equals(bool);
+    }
+
+    /**
+     * 一般假设、格式化“是否是建筑物的一部分”
+     * @param targets
+     * @param tmplHouseParagraph
+     * @return
+     */
+    public static String getIsBuildingPart(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplHouseParagraph) {
+        String paragraph = tmplHouseParagraph.getParagraph();
+        if (CollectionUtil.isNotEmpty(targets)){
+            Set<String> tIds = targets.stream().filter(x -> (StrUtil.isNotBlank(x.getIsPart()) && x.getIsPart().equals(YES))).map(HouseGuarantyTarget::getTId).collect(Collectors.toSet());
+            if (CollectionUtil.isNotEmpty(tIds)){
+                if (tIds.size() == targets.size()){
+                    return paragraph.replace("{tIds}", "");
+                }else {
+                    String tIdStr = CollectionUtil.formatSplitAndRemoveMiddle(tIds);
+                    return paragraph.replace("{tIds}", tIdStr);
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 一般假设、格式化“是否是酒店的一部分”
+     * @param targets
+     * @param tmplHouseParagraph
+     * @return
+     */
+    public static String getIsHotelPart(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplHouseParagraph) {
+        String paragraph = tmplHouseParagraph.getParagraph();
+        if (CollectionUtil.isNotEmpty(targets)){
+            Set<String> tIds = targets.stream().filter(x -> (StrUtil.isNotBlank(x.getIsPart()) && x.getIsPart().equals(HOTEL_PART))).map(HouseGuarantyTarget::getTId).collect(Collectors.toSet());
+            if (CollectionUtil.isNotEmpty(tIds)){
+                if (tIds.size() == targets.size()){
+                    return paragraph.replace("{tIds}", "");
+                }else {
+                    String tIdStr = CollectionUtil.formatSplitAndRemoveMiddle(tIds);
+                    return paragraph.replace("{tIds}", tIdStr);
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 未定事项假设、格式化“建成年代”
+     * @return
+     */
+    public static String buildingYear(List<HouseGuarantyTarget> targets,String hasImmovable,TmplHouseParagraph tmplHouseParagraph){
+        String paragraph = tmplHouseParagraph.getParagraph();
+        String result = null;
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> (!x.getHasBuildingYear() && StrUtil.isNotBlank(x.getBuildingYear()))).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(collect)){
+                List<String> tIds = collect.stream().map(HouseGuarantyTarget::getTId).collect(Collectors.toList());
+                List<String> buildingYears = collect.stream().map(HouseGuarantyTarget::getBuildingYear).collect(Collectors.toList());
+                result = paragraph.replace("{tIds}", CollectionUtil.formatSplitAndRemoveMiddle(tIds))
+                        .replace("{years}", CollectionUtil.formatSplitAndRemoveMiddle(buildingYears));
+                if (checkBoolean(hasImmovable)){
+                    result.replace("{immovable}",IMMOVABLE);
+                }else {
+                    result.replace("{immovable}","");
+                }
+            }
+        }
+        return result;
+    }
 }

+ 5 - 0
domain/src/main/java/com/dayou/doc/house/ConditionDO.java

@@ -21,4 +21,9 @@ public class ConditionDO {
      * 一般假设
      */
     private String YBJS;
+
+    /**
+     * 未定事项假设
+     */
+    private String WDSXJS;
  }

+ 20 - 0
domain/src/main/java/com/dayou/doc/house/ConsignorLetterDO.java

@@ -48,4 +48,24 @@ public class ConsignorLetterDO {
      */
     private String isNsBank;
 
+    /**
+     * 是否审核权属原件
+     */
+    private String isCheckOriginCertificate;
+
+    /**
+     * 是否提供不动产权利证
+     */
+    private String hasImmovableCertificate;
+
+    /**
+     * 土地使用权类型
+     */
+    private String landUseRightType;
+
+    /**
+     * 划拨用地是否扣除出让金
+     */
+    private String isDeductSellAmount;
+
 }

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

@@ -12,6 +12,7 @@ public class HouseGuarantyProcess extends BaseEntity implements Serializable {
 
     private static final long serialVersionUID=1L;
 
+    private Long parentId;
 
     /**
      * docHome

+ 6 - 0
domain/src/main/java/com/dayou/entity/HouseGuarantyTarget.java

@@ -94,5 +94,11 @@ public class HouseGuarantyTarget extends BaseEntity implements Serializable {
 
     private Boolean isTakeOutFirstMoney;
 
+    private Boolean isCostingShareMethod;
 
+    private Boolean noBuildingHouseNos;
+
+    private String exploreDate;
+
+    private Boolean landYearLowerHouseYear;
 }

+ 5 - 0
domain/src/main/java/com/dayou/entity/TmplHouseParagraph.java

@@ -38,4 +38,9 @@ public class TmplHouseParagraph extends BaseEntity {
      * 同组标识
      */
     private String soltMark;
+
+    /**
+     * 选用规则
+     */
+    private String rule;
 }

+ 74 - 4
domain/src/main/java/com/dayou/enums/BusinessEnum.java

@@ -5,7 +5,7 @@ public enum BusinessEnum implements CodeMsgEnumInterface<String,String>{
 
     HOUSE_BUSINESS("HOUSE_BUSINESS","房地产", HouseSubBusiness.values()),
     HOUSE_GUARANTY_PROCESS("HOUSE_GUARANTY_PROCESS","房地产抵押节点",HouseGuarantyProcess.values()),
-
+    HOUSE_GUARANTY_RULES("HOUSE_GUARANTY_RULES","房地产抵押文档规则",HouseGuarantyRules.values())
     ;
     private String code;
 
@@ -108,7 +108,13 @@ public enum BusinessEnum implements CodeMsgEnumInterface<String,String>{
 
         UNCONFORMITY_ASSUMPTION("UNCONFORMITY_ASSUMPTION","不相一致假设"),
 
-        DEFICIENCY_ASSUMPTION("DEFICIENCY_ASSUMPTION","依据不足假设")
+        DEFICIENCY_ASSUMPTION("DEFICIENCY_ASSUMPTION","依据不足假设"),
+
+        LIMIT_CONDITION("LIMIT_CONDITION","限制条件"),
+
+        USE_REPORT_EXPLAIN("USE_REPORT_EXPLAIN","使用报告说明"),
+
+        SPECIAL_HANDLE("SPECIAL_HANDLE","估价中的特殊处理事项")
         ;
 
         HouseGuarantyChapter(String code, String msg) {
@@ -122,12 +128,76 @@ public enum BusinessEnum implements CodeMsgEnumInterface<String,String>{
 
         @Override
         public String getCode() {
-            return "";
+            return code;
         }
 
         @Override
         public String getMsg() {
-            return "";
+            return msg;
+        }
+    }
+
+    public enum HouseGuarantyRules implements CodeMsgEnumInterface<String,String>{
+
+        IS_CHECK_ORIGIN_CERTIFICATE("IS_CHECK_ORIGIN_CERTIFICATE","是否核验权属资料原件"),
+        IS_BUILDING_PART("IS_BUILDING_PART","估价对象为整个房地产中的一部分"),
+        IS_HOTEL_PART("IS_HOTEL_PART","估价对象为整个酒店房地产中的一部分"),
+        IS_REGISTER_BUILDING_YEAR("IS_REGISTER_BUILDING_YEAR","是否登记建成年代"),
+        IS_USE_DIFFERENT("IS_USE_DIFFERENT","权属证书用途不一致"),
+        IS_PROVIDE_LAND_BIG_CERTIFICATE("IS_PROVIDE_LAND_BIG_CERTIFICATE","未提供分户土地证,提供宗地大证"),
+        IS_PROVIDE_LAND_BIG_CERTIFICATE_SHARE("IS_PROVIDE_LAND_BIG_CERTIFICATE_SHARE","未提供分户土地证,提供宗地大证需要采用成本法,分摊土地面积处理方式"),
+        IS_DIVIDE_METHOD1("IS_DIVIDE_METHOD1","房屋分层面积处理方式一"),
+        IS_DIVIDE_METHOD2("IS_DIVIDE_METHOD2","房屋分层面积处理方式二"),
+        IS_ADDRESS_DIFF_CERTIFICATE("IS_ADDRESS_DIFF","登记地址与实勘地址不一致(有证明)"),
+        IS_ADDRESS_DIFF_NO_CERTIFICATE("IS_ADDRESS_DIFF_NO_CERTIFICATE","登记地址与实勘地址不一致(无证明)"),
+        IS_DATE_DIFF("IS_DATE_DIFF","价值时点与查勘日期不一致"),
+        IS_BIG_CERTIFICATE_ONLY_HOUSE("IS_BIG_CERTIFICATE_ONLY_HOUSE","未办理分户土地证和提供所在宗地大证仅限住宅商品房"),
+        IS_NOT_ORIGIN_CERTIFICATE_AND_PROMISE_SAME("IS_NOT_ORIGIN_CERTIFICATE_AND_PROMISE_SAME","必须在“估价对象权利状况说明及承诺书”中说明未提供上述权属证书原件,并承诺提供的权属证书复印件与原件一致"),
+        IS_NOT_ORIGIN_FILES_IN_CHENGDU("IS_NOT_ORIGIN_FILES_IN_CHENGDU","承诺提供的权属证书及与估价对象相关的法律文件复印件与原件一致(大成都范围内)"),
+        IS_NOT_ORIGIN_FILES_OUT_CHENGDU("IS_NOT_ORIGIN_FILES_OUT_CHENGDU","承诺提供的权属证书及与估价对象相关的法律文件复印件与原件一致(大成都范围外)"),
+        IS_RENT_OUT_NOT_CONTRACT_NO_AFFECT("IS_RENT_OUT_NOT_CONTRACT_NO_AFFECT","已出租未提供租赁合同且未考虑租约影响"),
+        IS_NOT_CONTRACT_LAND_LOWER_HOUSE_SY("IS_NOT_CONTRACT_LAND_LOWER_HOUSE_SY","未提供土地出让合同且土地使用年限低于房屋年限且使用收益法评估"),
+        IS_NOT_CONTRACT_LAND_LOWER_HOUSE_CB("IS_NOT_CONTRACT_LAND_LOWER_HOUSE_CB","未提供土地出让合同且土地使用年限低于房屋年限且使用成本法评估"),
+        IS_NOT_PLEDGE("IS_NOT_PLEDGE","估价对象未设立抵押权"),
+        IS_OLD_PLEDGE_TO_NEW_PLEDGE("IS_OLD_PLEDGE_TO_NEW_PLEDGE","适用于原设立抵押权未注销,向新的抵押权人申请贷款"),
+        IS_OLD_PLEDGE_TO_OLD_PLEDGE("IS_OLD_PLEDGE_TO_OLD_PLEDGE","适用于原抵押权未注销,现拟设立最高额抵押权,同一抵押权人"),
+        IS_TRANSFER_NOT_DEDUCT_SELL_MONEY("IS_TRANSFER_NOT_DEDUCT_SELL_MONEY","土地使用权未划拨但未扣除出让金"),
+        IS_TRANSFER_DEDUCT_SELL_MONEY("IS_TRANSFER_DEDUCT_SELL_MONEY","土地使用权未划拨已扣除出让金"),
+        IS_PROVIDE_TECH_REPORT("IS_PROVIDE_TECH_REPORT","是否提供技术报告"),
+        IS_NS_BANK("IS_NS_BANK","是否是农商银行"),
+        IS_NORMAL_BANK("IS_NORMAL_BANK","其他银行"),
+        IS_NO_FIRST_MONEY("IS_NO_FIRST_MONEY","无法定优先受偿款"),
+        IS_SAME_PLEDGE_USER_CONTINUE("IS_SAME_PLEDGE_USER_CONTINUE","适用于同一抵押权人续贷"),
+        IS_OLD_PLEDGE_TO_NEW_PLEDGE_SPECIAL("IS_OLD_PLEDGE_TO_NEW_PLEDGE_SPECIAL","适用于原设立抵押权未注销,向新的抵押权人申请贷款"),
+        IS_NORMAL_PLEDGE_TO_HIGH_PLEDGE("IS_NORMAL_PLEDGE_TO_HIGH_PLEDGE","适用于原已设立抵押权,现拟设立最高额抵押权,同一抵押权人"),
+        IS_HIGH_PLEDGE_NOT_EXPIRE("IS_HIGH_PLEDGE_NOT_EXPIRE","适用于已设立最高额抵押权,抵押未到期"),
+        IS_NOT_RENT_OUT("IS_NOT_RENT_OUT","估价对象未出租"),
+        IS_RENT_OUT_NOT_AFFECT_HIGH("IS_RENT_OUT_NOT_AFFECT_HIGH","已出租,未考虑租约影响:高于市场租金"),
+        IS_RENT_OUT_NOT_AFFECT_NORMAL("IS_RENT_OUT_NOT_AFFECT_NORMAL","已出租,未考虑租约影响:与市场租金相当"),
+        IS_RENT_OUT_AFFECT_LOW("IS_RENT_OUT_AFFECT_LOW","已出租,考虑租约影响:低于市场租金")
+
+
+
+
+        ;
+
+        HouseGuarantyRules(String code, String msg) {
+            this.code = code;
+            this.msg = msg;
+        }
+
+        private String code;
+
+        private String msg;
+
+        @Override
+        public String getCode() {
+            return code;
+        }
+
+        @Override
+        public String getMsg() {
+            return msg;
         }
     }
 }

+ 1 - 1
domain/src/main/java/com/dayou/vo/HouseTargetVO.java

@@ -8,7 +8,7 @@ import java.util.List;
 @Data
 public class HouseTargetVO {
 
-    private String id;
+    private String tId;
 
     private List<HouseGuarantyTargetDTO> list;
 }

+ 14 - 0
service/src/main/java/com/dayou/service/HouseGuarantyService.java

@@ -5,6 +5,7 @@ import com.dayou.dto.HouseGuarantyTableDTO;
 import com.dayou.dto.HouseGuarantyTargetDTO;
 import com.dayou.vo.HouseTargetVO;
 
+import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 
@@ -38,4 +39,17 @@ public interface HouseGuarantyService {
      * @return
      */
     List<HouseTargetVO> getTargetsById(Long id);
+
+    /**
+     * 生成《估价的假设和限制条件及使用报告说明》
+     * @param id
+     * @return
+     */
+    String genConditionLetter(Long id);
+
+    /**
+     * 从文件(表单1)中获取基本信息
+     * @return
+     */
+    Map<String, String> getBaseInfoFromFile(Long id) throws IOException;
 }

+ 2 - 0
service/src/main/java/com/dayou/service/HouseGuarantyTargetService.java

@@ -4,4 +4,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.dayou.entity.HouseGuarantyTarget;
 
 public interface HouseGuarantyTargetService extends IService<HouseGuarantyTarget>  {
+
+    HouseGuarantyTarget getTarget(Long docId, String tId);
 }

+ 12 - 0
service/src/main/java/com/dayou/service/TmplHouseParagraphService.java

@@ -1,6 +1,7 @@
 package com.dayou.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.dayou.entity.HouseGuarantyTarget;
 import com.dayou.entity.TmplHouseParagraph;
 
 import java.util.List;
@@ -8,4 +9,15 @@ import java.util.List;
 public interface TmplHouseParagraphService extends IService<TmplHouseParagraph> {
 
     List<TmplHouseParagraph> findByMoldAndChapter(TmplHouseParagraph tmplHouseParagraph);
+
+    /**
+     * 生成一般假设最终结果
+     */
+    String findYBJSResult(List<HouseGuarantyTarget> targets,String isCheckOriginCertificate, String hasImmovableCertificate);
+
+    /**
+     * 生成未定事项假设最终结果
+     * @param targets
+     */
+    void findWDSXJSResult(List<HouseGuarantyTarget> targets,String hasImmovableCertificate);
 }

+ 79 - 8
service/src/main/java/com/dayou/service/impl/HouseGuarantyServiceImpl.java

@@ -1,5 +1,6 @@
 package com.dayou.service.impl;
 
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
@@ -11,17 +12,18 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.dayou.common.BaseEntity;
 import com.dayou.config.FileNetConfig;
+import com.dayou.doc.house.ConditionDO;
 import com.dayou.doc.house.ConsignorLetterDO;
 import com.dayou.dto.HouseGuarantyTableDTO;
 import com.dayou.dto.HouseGuarantyTargetDTO;
 import com.dayou.entity.DocumentProduction;
 import com.dayou.entity.HouseGuarantyProcess;
+import com.dayou.entity.HouseGuarantyTarget;
+import com.dayou.entity.TmplHouseParagraph;
 import com.dayou.enums.DocumentType;
 import com.dayou.enums.BusinessEnum;
 import com.dayou.exception.ErrorCode;
-import com.dayou.service.DocumentProductionService;
-import com.dayou.service.HouseGuarantyProcessService;
-import com.dayou.service.HouseGuarantyService;
+import com.dayou.service.*;
 import com.dayou.utils.AsposeWordUtil;
 import com.dayou.utils.EasyExcelUtil;
 import com.dayou.utils.HouseDocumentUtil;
@@ -34,6 +36,7 @@ import org.springframework.stereotype.Service;
 
 import java.io.File;
 import java.io.FileOutputStream;
+import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.ArrayList;
@@ -43,6 +46,8 @@ import java.util.Map;
 import java.util.stream.Collectors;
 
 import static com.dayou.constants.HouseGuarantyDoc.*;
+import static com.dayou.enums.BusinessEnum.HouseGuarantyChapter.ORDINARY_ASSUMPTION;
+import static com.dayou.enums.BusinessEnum.HouseSubBusiness.GUARANTY;
 import static com.dayou.enums.HouseTargetTableColumn.ID;
 import static java.lang.Thread.sleep;
 
@@ -62,6 +67,12 @@ public class HouseGuarantyServiceImpl implements HouseGuarantyService {
     @Autowired
     private DocumentProductionService documentProductionService;
 
+    @Autowired
+    private HouseGuarantyTargetService houseGuarantyTargetService;
+
+    @Autowired
+    private TmplHouseParagraphService tmplHouseParagraphService;
+
     @Override
     public Long createTableWord(HouseGuarantyTableDTO houseGuarantyTableDTO) {
         try {
@@ -124,8 +135,8 @@ public class HouseGuarantyServiceImpl implements HouseGuarantyService {
             XSSFWorkbook workbook = new XSSFWorkbook(home + COLLECT1_XLSX);
             Map<String, String> valueMap = EasyExcelUtil.getExcelCellValue(workbook, BASE_INFO_ZH);
             String projectName = HouseDocumentUtil.getProjectName(array);
-            String docNo = valueMap.get("docNo");
-            String consignor = valueMap.get("consignor");
+            String docNo =  valueMap.get("docNo");
+            String consignor =  valueMap.get("consignor");
 
             ConsignorLetterDO clDO = JSON.parseObject(JSON.toJSONString(valueMap), ConsignorLetterDO.class);
 
@@ -158,7 +169,7 @@ public class HouseGuarantyServiceImpl implements HouseGuarantyService {
             byte[] tmplWordByte = Files.readAllBytes(Paths.get(baseDir
                     + fileNetConfig.getHouseGuarantyTemplatePath() + CONSIGNOR_LETTER_TEMPLATE));
             byte[] resultWordByte = AsposeWordUtil.fillWordDataByDomain(tmplWordByte, clDO);
-            String consignorLetterName = process.getHome() + System.currentTimeMillis() + ".docx";
+            String consignorLetterName = process.getHome() +"CONSIGNOR_LETTER_TEMPLATE"+ System.currentTimeMillis() + ".docx";
             File resultFile = new File(baseDir + consignorLetterName);
             FileOutputStream fos = new FileOutputStream(resultFile);
             fos.write(resultWordByte);
@@ -188,7 +199,7 @@ public class HouseGuarantyServiceImpl implements HouseGuarantyService {
             Map<String, List<HouseGuarantyTargetDTO>> collect = houseGuarantyTargetDTOS.stream().collect(Collectors.groupingBy(HouseGuarantyTargetDTO::getId));
             for (Map.Entry<String, List<HouseGuarantyTargetDTO>> entry : collect.entrySet()) {
                 HouseTargetVO houseTargetVO = new HouseTargetVO();
-                houseTargetVO.setId(entry.getKey());
+                houseTargetVO.setTId(entry.getKey());
                 houseTargetVO.setList(entry.getValue());
                 houseTargetVOList.add(houseTargetVO);
             }
@@ -199,6 +210,66 @@ public class HouseGuarantyServiceImpl implements HouseGuarantyService {
         return Collections.emptyList();
     }
 
+    @Override
+    public String genConditionLetter(Long id) {
+
+        DocumentProduction dp = documentProductionService.getById(id);
+        HouseGuarantyProcess process = houseGuarantyProcessService.getById(dp.getBusinessId());
+        String baseDir = fileNetConfig.getBaseDir();
+        String home = baseDir + process.getHome();
+
+        try {
+            //获取文件数据
+            XSSFWorkbook workbook = new XSSFWorkbook(home + COLLECT1_XLSX);
+            Map<String, String> valueMap = EasyExcelUtil.getExcelCellValue(workbook, BASE_INFO_ZH);
+            ConditionDO conditionDO = JSON.parseObject(JSON.toJSONString(valueMap), ConditionDO.class);
+
+            //获取估价对象补充信息
+            List<HouseGuarantyTarget> targets = houseGuarantyTargetService.list(new LambdaQueryWrapper<HouseGuarantyTarget>().eq(HouseGuarantyTarget::getDocId, id).eq(BaseEntity::getDeleteStatus, Boolean.FALSE));
+
+
+
+            //组合一般假设内容
+            String ybjsResult = tmplHouseParagraphService.findYBJSResult(targets,valueMap.get("isCheckOriginCertificate"), valueMap.get("hasImmovableCertificate"));
+            conditionDO.setYBJS(ybjsResult);
+
+            //组合未定事项假设内容
+            tmplHouseParagraphService.findWDSXJSResult(targets,valueMap.get("hasImmovableCertificate"));
+
+
+            byte[] tmplWordByte = Files.readAllBytes(Paths.get(baseDir
+                    + fileNetConfig.getHouseGuarantyTemplatePath() + CONDITION_LETTER_TEMPLATE));
+
+            byte[] resultWordByte = AsposeWordUtil.fillWordDataByDomain(tmplWordByte, conditionDO);
+
+            String conditionLetterName = process.getHome() +"CONDITION_LETTER_TEMPLATE"+System.currentTimeMillis() + ".docx";
+            File resultFile = new File(baseDir + conditionLetterName);
+            FileOutputStream fos = new FileOutputStream(resultFile);
+            fos.write(resultWordByte);
+            fos.close();
+            //更新过程文档url
+            HouseGuarantyProcess houseGuarantyProcess = new HouseGuarantyProcess();
+            houseGuarantyProcess.setProcessName("《估价的假设和限制条件及使用报告说明》");
+            houseGuarantyProcess.setDocUrl(conditionLetterName);
+            houseGuarantyProcess.setHome(process.getHome());
+            houseGuarantyProcess.setParentId(process.getId());
+            houseGuarantyProcessService.save(houseGuarantyProcess);
+            return conditionLetterName;
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public Map<String, String> getBaseInfoFromFile(Long id) throws IOException {
+        HouseGuarantyProcess process = houseGuarantyProcessService.getById(id);
+        String baseDir = fileNetConfig.getBaseDir();
+        String home = baseDir + process.getHome();
+        //读取基本信息
+        XSSFWorkbook workbook = new XSSFWorkbook(home + COLLECT1_XLSX);
+        return EasyExcelUtil.getExcelCellValue(workbook, BASE_INFO_ZH);
+    }
+
     /**
      * 插入估价结果一览表word文件
      * @param mainWordPath
@@ -248,7 +319,7 @@ public class HouseGuarantyServiceImpl implements HouseGuarantyService {
     private DocumentProduction buildDocumentProduction(Long id,String docName,String docNo,String consignor){
         DocumentProduction dp = new DocumentProduction();
         dp.setBusinessType(BusinessEnum.HOUSE_BUSINESS.getMsg());
-        dp.setBusinessCate(BusinessEnum.HouseSubBusiness.GUARANTY.getMsg());
+        dp.setBusinessCate(GUARANTY.getMsg());
         dp.setBusinessId(id);
         dp.setDocName(docName);
         dp.setDocType(DocumentType.REPORT.getName());

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

@@ -1,5 +1,6 @@
 package com.dayou.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dayou.entity.HouseGuarantyTarget;
 import com.dayou.mapper.HouseGuarantyTargetMapper;
@@ -8,4 +9,10 @@ import org.springframework.stereotype.Service;
 
 @Service
 public class HouseGuarantyTargetServiceImpl extends ServiceImpl<HouseGuarantyTargetMapper, HouseGuarantyTarget> implements HouseGuarantyTargetService {
+
+    @Override
+    public HouseGuarantyTarget getTarget(Long docId, String tId) {
+        return this.getOne(new LambdaQueryWrapper<HouseGuarantyTarget>().eq(HouseGuarantyTarget::getDocId, docId)
+                .eq(HouseGuarantyTarget::getTId, tId));
+    }
 }

+ 80 - 3
service/src/main/java/com/dayou/service/impl/TmplHouseParagraphServiceImpl.java

@@ -1,15 +1,25 @@
 package com.dayou.service.impl;
 
+import cn.hutool.core.util.StrUtil;
 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.HouseGuarantyTarget;
 import com.dayou.entity.TmplHouseParagraph;
 import com.dayou.mapper.TmplHouseParagraphMapper;
 import com.dayou.service.TmplHouseParagraphService;
+import com.dayou.utils.HouseDocumentUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static com.dayou.enums.BusinessEnum.HouseGuarantyChapter.ORDINARY_ASSUMPTION;
+import static com.dayou.enums.BusinessEnum.HouseGuarantyChapter.UNDEFINED_ASSUMPTION;
+import static com.dayou.enums.BusinessEnum.HouseGuarantyRules.*;
+import static com.dayou.enums.BusinessEnum.HouseSubBusiness.GUARANTY;
 
 @Service
 public class TmplHouseParagraphServiceImpl extends ServiceImpl<TmplHouseParagraphMapper, TmplHouseParagraph> implements TmplHouseParagraphService {
@@ -19,11 +29,78 @@ public class TmplHouseParagraphServiceImpl extends ServiceImpl<TmplHouseParagrap
 
     @Override
     public List<TmplHouseParagraph> findByMoldAndChapter(TmplHouseParagraph tmplHouseParagraph) {
-//        return this.list(new LambdaQueryWrapper<TmplHouseParagraph>().select(TmplHouseParagraph::getParagraph,TmplHouseParagraph::getSoltMark
-//                        , TmplHouseParagraph::getChapter, TmplHouseParagraph::getDocMold).eq(BaseEntity::getDeleteStatus, Boolean.FALSE)
-//                .orderByAsc(TmplHouseParagraph::getSort));
         return tmplHouseParagraphMapper.findByMoldAndChapter(tmplHouseParagraph);
     }
+
+    @Override
+    public String findYBJSResult(List<HouseGuarantyTarget> targets, String isCheckOriginCertificate, String hasImmovableCertificate) {
+        List<TmplHouseParagraph> paragraphTemps = this.list(new LambdaQueryWrapper<TmplHouseParagraph>()
+                .eq(TmplHouseParagraph::getDocMold, GUARANTY).eq(TmplHouseParagraph::getChapter, ORDINARY_ASSUMPTION).orderByAsc(TmplHouseParagraph::getSort));
+        Map<Integer, List<TmplHouseParagraph>> collect = paragraphTemps.stream().collect(Collectors.groupingBy(TmplHouseParagraph::getSort));
+        StringBuilder normalCondition = new StringBuilder();
+        int i = 1;
+        for(Map.Entry<Integer, List<TmplHouseParagraph>> entry : collect.entrySet()) {
+            List<TmplHouseParagraph> paragraphs = entry.getValue();
+            for (TmplHouseParagraph  paragraph : paragraphs){
+                String rule = paragraph.getRule();
+                if (StrUtil.isNotBlank(rule)){
+                    if (IS_CHECK_ORIGIN_CERTIFICATE.getCode().equals(rule)){
+                        String checkOriginCertificate = HouseDocumentUtil.getCheckOriginCertificate(isCheckOriginCertificate,
+                                hasImmovableCertificate, paragraph);
+
+                        if (StrUtil.isNotBlank(checkOriginCertificate)){
+                            normalCondition.append(i).append(". ");
+                            normalCondition.append(checkOriginCertificate);
+                            i++;
+                        }
+                    }
+                    if (IS_BUILDING_PART.getCode().equals(rule)){
+                        String isBuildingPart = HouseDocumentUtil.getIsBuildingPart(targets,paragraph);
+                        if (StrUtil.isNotBlank(isBuildingPart)){
+                            normalCondition.append(i).append(". ");
+                            normalCondition.append(isBuildingPart);
+                            i++;
+                        }
+                    }
+                    if (IS_HOTEL_PART.getCode().equals(rule)){
+                        String isHotelPart = HouseDocumentUtil.getIsHotelPart(targets,paragraph);
+                        if (StrUtil.isNotBlank(isHotelPart)){
+                            normalCondition.append(i).append(". ");
+                            normalCondition.append(isHotelPart);
+                            i++;
+                        }
+                    }
+                }else{
+                    normalCondition.append(i).append(". ");
+                    normalCondition.append(paragraph.getParagraph());
+                    i++;
+                }
+            }
+
+
+        }
+        return normalCondition.toString();
+    }
+
+    @Override
+    public void findWDSXJSResult(List<HouseGuarantyTarget> targets,String hasImmovableCertificate) {
+        List<TmplHouseParagraph> paragraphTemps = this.list(new LambdaQueryWrapper<TmplHouseParagraph>()
+                .eq(TmplHouseParagraph::getDocMold, GUARANTY).eq(TmplHouseParagraph::getChapter, UNDEFINED_ASSUMPTION).orderByAsc(TmplHouseParagraph::getSort));
+        StringBuilder result = new StringBuilder();
+        int i = 1;
+        for (TmplHouseParagraph paragraph : paragraphTemps){
+            String rule = paragraph.getRule();
+            if (StrUtil.isNotBlank(rule)){
+                if (IS_REGISTER_BUILDING_YEAR.getCode().equals(rule)){
+                    String buildingYear = HouseDocumentUtil.buildingYear(targets, hasImmovableCertificate, paragraph);
+                    if (StrUtil.isNotBlank(buildingYear)){
+                        result.append(i).append(". ").append(buildingYear);
+                        i++;
+                    }
+                }
+            }
+        }
+    }
 }
 
 

+ 11 - 0
sql/update_sql.sql

@@ -477,3 +477,14 @@ CREATE TABLE `assets_calculate_eqpt_imp_data` (
                                                   PRIMARY KEY (`id`),
                                                   KEY `eqpt_data_id` (`eqpt_data_id`) USING BTREE
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='机器设备-进口设备测算数据表';
+
+/**
+  日期:2024-11-28
+  修改人:wucl
+  未更新到test-env
+ */
+ALTER TABLE tmpl_house_paragraph ADD COLUMN rule varchar(255) NULL COMMENT '选用规则';
+ALTER TABLE house_guaranty_target ADD COLUMN is_costing_share_method bit(1) NULL COMMENT '采用成本法且分摊土地面积处理';
+ALTER TABLE house_guaranty_target ADD COLUMN no_building_house_nos bit(1) NULL COMMENT '未见栋号房号';
+ALTER TABLE house_guaranty_target ADD COLUMN explore_date varchar(64) NULL COMMENT '查勘日期';
+ALTER TABLE house_guaranty_target ADD COLUMN land_year_lower_house_year bit(1) NULL COMMENT '土地剩余使用年限短于建筑物剩余经济寿命';