Browse Source

不相一致假设、依据不足假设、限制条件、特殊处理事项生成逻辑

wucl 8 months ago
parent
commit
d7a52579ac

+ 7 - 3
biz-base/src/test/java/com/dayou/ConditionDocumentTest.java

@@ -24,6 +24,7 @@ import java.nio.file.Paths;
 import java.util.List;
 import java.util.Map;
 
+import static com.dayou.constants.HouseGuarantyDoc.IMMOVABLE;
 import static com.dayou.constants.HouseGuarantyDoc.YES;
 import static com.dayou.constants.HouseGuarantyParagraphTemp.*;
 
@@ -71,9 +72,12 @@ public class ConditionDocumentTest {
      */
     @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);
+        List<HouseGuarantyTarget> targets = houseGuarantyTargetService.list(new LambdaQueryWrapper<HouseGuarantyTarget>().eq(HouseGuarantyTarget::getDocId, 15));
+        //String ybjsResult = tmplHouseParagraphService.findYBJSResult(targets, YES, YES);
+        String wdsxjsResult = tmplHouseParagraphService.findWDSXJSResult(targets, IMMOVABLE, "233");
+        //String bxyzjsResult = tmplHouseParagraphService.findBXYZJSResult(targets, IMMOVABLE, "2024年2月23日");
+
+        System.out.println(wdsxjsResult);
 
     }
 }

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

@@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONNull;
 import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson2.JSON;
 import com.dayou.dto.Address;
 import com.dayou.dto.HouseGuarantyTargetDTO;
@@ -429,11 +430,7 @@ public class HouseDocumentUtil {
     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 paragraph.replace("{immovable}",hasImmovable);
         }
         return null;
     }
@@ -494,19 +491,758 @@ public class HouseDocumentUtil {
         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());
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> (x.getHasBuildingYear()!=null && !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}","");
-                }
+                result = paragraph.replace("{tIds}", CollectionUtil.formatDotAndRemoveMiddle(tIds))
+                        .replace("{years}", CollectionUtil.formatDotAndRemoveMiddle(buildingYears));
+                result = result.replace("{immovable}",hasImmovable);
+
             }
         }
         return result;
     }
+
+    /**
+     * 未定事项假设 房产证登记用途与土地证用途不一致
+     * @param targets
+     * @return
+     */
+    public static String isUseDiff(List<HouseGuarantyTarget> targets,TmplHouseParagraph tmplHouseParagraph) {
+        StringBuilder result = new StringBuilder();
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> StrUtil.isNotBlank(x.getLandUseTo())).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(collect)){
+                for (HouseGuarantyTarget target : collect) {
+                    List<HouseGuarantyTargetDTO> targetDTOS = JSON.parseArray(target.getBaseInfo(), HouseGuarantyTargetDTO.class);
+                    Set<String> houseUseTo = targetDTOS.stream().map(HouseGuarantyTargetDTO::getUseTo).collect(Collectors.toSet());
+                    if (!houseUseTo.contains(target.getLandUseTo())){
+                        result.append(tmplHouseParagraph.getParagraph())
+                                .append("估价对象").append(target.getTId())
+                                .append("所在宗地《国有土地使用证》记载土地用途为")
+                                .append(target.getLandUseTo()).append(",估价对象")
+                                .append(target.getTId()).append("《房屋所有权证》记载规划用途为")
+                                .append(CollectionUtil.formatDotAndRemoveMiddle(houseUseTo))
+                                .append(",本次估价以估价对象合法保持房屋实际用途继续使用为假设前提。\n");
+                    }
+                }
+                result.append("\n");
+            }
+        }
+        return result.toString();
+    }
+
+    /**
+     * 未定事项假设 未提供分户土地证,提供宗地大证
+     * @param targets
+     * @return
+     */
+    public static String isProvideLandBigCertificate(List<HouseGuarantyTarget> targets,TmplHouseParagraph tmplHouseParagraph) {
+        StringBuilder result = new StringBuilder();
+        String paragraph = tmplHouseParagraph.getParagraph();
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> StrUtil.isNotBlank(x.getLandCertificateType())
+                    && x.getLandCertificateType().equals("大证")&& !x.getIsCostingShareMethod()).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(collect)){
+                for (HouseGuarantyTarget target : collect) {
+                    String tId = target.getTId();
+                    String landUseTo = target.getLandUseTo();
+                    String landExpireDate = target.getLandExpireDate();
+                    String content = paragraph.replace("{tId}", tId).replace("{landUseTo}", landUseTo).replace("{landExpireDate}", landExpireDate);
+                    result.append(content).append("\n");
+                }
+            }
+        }
+        return result.toString();
+    }
+
+    /**
+     * 未定事项假设 未提供分户土地证,提供宗地大证需要采用成本法,分摊土地面积处理方式
+     * @param targets
+     * @param tmplHouseParagraph
+     * @return
+     */
+    public static String isProvideLandBigCertificateShare(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplHouseParagraph) {
+        StringBuilder result = new StringBuilder();
+        String paragraph = tmplHouseParagraph.getParagraph();
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> (StrUtil.isNotBlank(x.getLandCertificateType()) &&
+                    x.getLandCertificateType().equals("大证") && x.getIsCostingShareMethod())).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(collect)){
+                for (HouseGuarantyTarget target : collect) {
+                    String tId = target.getTId();
+                    String landExpireDate = target.getLandExpireDate();
+                    String shareAcreage1 = target.getShareAcreage1();
+                    String content = paragraph.replace("{tId}", tId).replace("{landExpireDate}", landExpireDate).replace("{shareAcreage1}", shareAcreage1);
+                    result.append(content).append("\n");
+                }
+            }
+        }
+        return result.toString();
+    }
+
+
+    /**
+     * 未定事项假设 房屋分层面积处理方式1 有图
+     * @param targets
+     * @param tmplHouseParagraph
+     * @param hasImmovableCertificate
+     * @return
+     */
+    public static String isDivideMethod1(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplHouseParagraph, String hasImmovableCertificate,String acreage) {
+        StringBuilder result = new StringBuilder();
+        String paragraph = tmplHouseParagraph.getParagraph();
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> (x.getIsLayer()!=null && x.getIsLayer()
+                    && x.getHasLayerImage()!=null && x.getHasLayerImage())).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(collect)){
+                for (HouseGuarantyTarget target : collect) {
+                    String tId = target.getTId();
+                    StringBuilder floorAcreageDesc = new StringBuilder();
+                    String floor1Acreage = target.getFloor1Acreage();
+                    String floor2Acreage = target.getFloor2Acreage();
+                    String floor3Acreage = target.getFloor3Acreage();
+                    if (StrUtil.isNotBlank(floor1Acreage)){
+                        floorAcreageDesc.append("一层").append(floor1Acreage).append("平方米");
+                    }
+                    if (StrUtil.isNotBlank(floor2Acreage)){
+                        floorAcreageDesc.append("、");
+                        floorAcreageDesc.append("二层").append(floor2Acreage).append("平方米");
+                    }else {
+                        floorAcreageDesc.append(";");
+                    }
+                    if (StrUtil.isNotBlank(floor3Acreage)){
+                        floorAcreageDesc.append("、");
+                        floorAcreageDesc.append("三层").append(floor3Acreage).append("平方米");
+                    }else {
+                        floorAcreageDesc.append(";");
+                    }
+                    paragraph = paragraph.replace("{immovable}", hasImmovableCertificate).replace("{tId}", tId).replace("{acreage}", acreage);
+                    paragraph = paragraph.replace("{floorAcreageDesc}", floorAcreageDesc.toString());
+                    result.append(paragraph).append("\n");
+                }
+            }
+        }
+        return result.toString();
+    }
+
+    /**
+     * 未定事项假设 房屋分层面积处理方式2 无图
+     * @param targets
+     * @param tmplHouseParagraph
+     * @param hasImmovableCertificate
+     * @return
+     */
+    public static String isDivideMethod2(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplHouseParagraph, String hasImmovableCertificate, String acreage) {
+        StringBuilder result = new StringBuilder();
+        String paragraph = tmplHouseParagraph.getParagraph();
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> (x.getIsLayer()!=null && x.getIsLayer()
+                    && x.getHasLayerImage()!=null && !x.getHasLayerImage())).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(collect)){
+                for (HouseGuarantyTarget target : collect) {
+                    String tId = target.getTId();
+                    StringBuilder floorAcreageDesc = new StringBuilder();
+                    String floor1Acreage = target.getFloor1Acreage();
+                    String floor2Acreage = target.getFloor2Acreage();
+                    String floor3Acreage = target.getFloor3Acreage();
+                    if (StrUtil.isNotBlank(floor1Acreage)){
+                        floorAcreageDesc.append("一层").append(floor1Acreage).append("平方米");
+                    }
+                    if (StrUtil.isNotBlank(floor2Acreage)){
+                        floorAcreageDesc.append("、");
+                        floorAcreageDesc.append("二层").append(floor2Acreage).append("平方米");
+                    }else {
+                        floorAcreageDesc.append(";");
+                    }
+                    if (StrUtil.isNotBlank(floor3Acreage)){
+                        floorAcreageDesc.append("、");
+                        floorAcreageDesc.append("三层").append(floor3Acreage).append("平方米").append(";");
+                    }else {
+                        floorAcreageDesc.append(";");
+                    }
+                    paragraph = paragraph.replace("{immovable}", hasImmovableCertificate).replace("{tId}", tId).replace("{acreage}", acreage);
+                    paragraph = paragraph.replace("{floorAcreageDesc}", floorAcreageDesc.toString());
+                    result.append(paragraph).append("\n");
+                }
+            }
+        }
+        return result.toString();
+    }
+
+    /**
+     * 不相一致假设 登记地址与实勘地址不一致 有证明
+     * @param targets
+     * @param hasImmovableCertificate
+     * @param tmplHouseParagraph
+     * @return
+     */
+    public static String isAddressDiffCertificate(List<HouseGuarantyTarget> targets, String hasImmovableCertificate, TmplHouseParagraph tmplHouseParagraph) {
+        StringBuilder result = new StringBuilder();
+        String paragraph = tmplHouseParagraph.getParagraph();
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> x.getIsAddressSame()!=null && !x.getIsAddressSame()
+                    && x.getIsAddressCertificate()!=null && x.getIsAddressCertificate()).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(collect)){
+                for (HouseGuarantyTarget target : collect) {
+                    String tId = target.getTId();
+                    List<HouseGuarantyTargetDTO> targetDTOS = JSON.parseArray(target.getBaseInfo(), HouseGuarantyTargetDTO.class);
+                    String location = targetDTOS.get(0).getLocation();
+                    String actAddress = targetDTOS.get(0).getActAddress();
+                    String replace = paragraph.replace("{tId}", tId).replace("{location}", location).replace("{actAddress}", actAddress).replace("{immovable}", hasImmovableCertificate);
+                    result.append(replace).append("\n");
+                }
+            }
+        }
+        return result.toString();
+    }
+
+    /**
+     * 不相一致假设 登记地址与实勘地址不一致 无证明
+     * @param targets
+     * @param hasImmovableCertificate
+     * @param tmplHouseParagraph
+     * @return
+     */
+    public static String isAddressDiffNoCertificate(List<HouseGuarantyTarget> targets, String hasImmovableCertificate, TmplHouseParagraph tmplHouseParagraph) {
+        StringBuilder result = new StringBuilder();
+        String paragraph = tmplHouseParagraph.getParagraph();
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> x.getIsAddressSame()!=null && !x.getIsAddressSame()
+                    && x.getIsAddressCertificate()!=null && !x.getIsAddressCertificate()).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(collect)){
+                for (HouseGuarantyTarget target : collect) {
+                    String tId = target.getTId();
+                    Boolean noBuildingHouseNos = target.getNoBuildingHouseNos();
+                    String noBuildingHouseNosStr="";
+                    if (noBuildingHouseNos){
+                        noBuildingHouseNosStr = ",未见估价对象栋号,房号。";
+                    }
+                    List<HouseGuarantyTargetDTO> targetDTOS = JSON.parseArray(target.getBaseInfo(), HouseGuarantyTargetDTO.class);
+                    String location = targetDTOS.get(0).getLocation();
+                    String actAddress = targetDTOS.get(0).getActAddress();
+                    String replace = paragraph.replace("{tId}", tId).replace("{location}", location)
+                            .replace("{actAddress}", actAddress).replace("{noBuildingHouseNos}",noBuildingHouseNosStr).replace("{immovable}", hasImmovableCertificate);
+                    result.append(replace).append("\n");
+                }
+            }
+        }
+        return result.toString();
+    }
+
+    /**
+     * 不相一致假设 价值时点与查勘日期不一致
+     * @param targets
+     * @param tmplHouseParagraph
+     * @return
+     */
+    public static String isDateDiff(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplHouseParagraph,String docDate) {
+        StringBuilder result = new StringBuilder();
+        String paragraph = tmplHouseParagraph.getParagraph();
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> x.getIsDateTimeSame()!=null && !x.getIsDateTimeSame()).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(collect)){
+                for (HouseGuarantyTarget target : collect) {
+                    String tId = target.getTId();
+                    String exploreDate = target.getExploreDate();
+                    String replace = paragraph.replace("{tId}", tId).replace("{exploreDate}", exploreDate).replace("{docDate}", docDate);
+                    result.append(replace).append("\n");
+                }
+            }
+        }
+        return result.toString();
+    }
+
+    /**
+     * 依据不足假设 未办理分户土地证和提供所在宗地大证仅限住宅商品房
+     * @param targets
+     * @param tmplParagraph
+     * @return
+     */
+    public static String isBigCertificateOnlyHouse(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplParagraph) {
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> StrUtil.isNotBlank(x.getLandCertificateType()) &&
+                    x.getLandCertificateType().equals("大证")).collect(Collectors.toList());
+            List<String> tIds = new ArrayList<>();
+            if (CollectionUtil.isNotEmpty(collect)){
+                for (HouseGuarantyTarget target : collect) {
+                    List<HouseGuarantyTargetDTO> targetDTOS = JSON.parseArray(target.getBaseInfo(), HouseGuarantyTargetDTO.class);
+                    List<String> userTos = targetDTOS.stream().map(HouseGuarantyTargetDTO::getUseTo).collect(Collectors.toList());
+                    for (String userTo : userTos){
+                        if (userTo.contains("住宅")){
+                            tIds.add(target.getTId());
+                        }
+                    }
+                }
+            }
+            if (CollectionUtil.isNotEmpty(tIds)){
+                String paragraph = tmplParagraph.getParagraph();
+                return paragraph.replace("{tIds}",CollectionUtil.formatDotAndRemoveMiddle(tIds));
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 依据不足假设 必须在“估价对象权利状况说明及承诺书”中说明未提供上述权属证书原件,并承诺提供的权属证书复印件与原件一致
+     * @param targets
+     * @param tmplParagraph
+     * @return
+     */
+    public static String isNotOriginCertificateOnlyHouse(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplParagraph,String hasImmovable) {
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> !x.getHasOriginCertificate()
+                    && x.getIsPromise() && !x.getIsPromiseFile()).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(collect)){
+                List<String> tIds = collect.stream().map(HouseGuarantyTarget::getTId).collect(Collectors.toList());
+                String paragraph = tmplParagraph.getParagraph();
+                return paragraph.replace("{tIds}", CollectionUtil.formatDotAndRemoveMiddle(tIds)).replace("{hasImmovable}", hasImmovable);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 依据不足假设 承诺提供的权属证书及与估价对象相关的法律文件复印件与原件一致(大成都范围内)
+     * @param targets
+     * @param tmplParagraph
+     * @return
+     */
+    public static String isNotOriginFileInChengDu(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplParagraph) {
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> !x.getHasOriginCertificate()
+                    && x.getIsPromise() && x.getIsPromiseFile() && x.getIsInChengDu()).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(collect)){
+                List<String> tIds = collect.stream().map(HouseGuarantyTarget::getTId).collect(Collectors.toList());
+                String paragraph = tmplParagraph.getParagraph();
+                return paragraph.replace("{tIds}", CollectionUtil.formatDotAndRemoveMiddle(tIds));
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 依据不足假设 承诺提供的权属证书及与估价对象相关的法律文件复印件与原件一致(大成都范围外)
+     * @param targets
+     * @param tmplParagraph
+     * @return
+     */
+    public static String isNotOriginFileOutChengDu(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplParagraph) {
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> !x.getHasOriginCertificate()
+                    && x.getIsPromise() && x.getIsPromiseFile() && !x.getIsInChengDu()).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(collect)){
+                List<String> tIds = collect.stream().map(HouseGuarantyTarget::getTId).collect(Collectors.toList());
+                String paragraph = tmplParagraph.getParagraph();
+                return paragraph.replace("{tIds}", CollectionUtil.formatDotAndRemoveMiddle(tIds));
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 依据不足假设 已出租未提供租赁合同且未考虑租约影响
+     * @param targets
+     * @param tmplParagraph
+     * @return
+     */
+    public static String isRentOutNotContractNoAffect(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplParagraph) {
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> tIds = targets.stream().filter(x -> x.getIsRentOut() && !x.getHasRentOutContract() && !x.getIsRentLimit()).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(tIds)){
+                String paragraph = tmplParagraph.getParagraph();
+                return paragraph.replace("{tIds}", CollectionUtil.formatDotAndRemoveMiddle(tIds));
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 依据不足假设 未提供土地出让合同且土地使用年限低于房屋年限且使用收益法评估
+     * @param targets
+     * @param tmplParagraph
+     * @return
+     */
+    public static String isNotContractLandLowerHouseSY(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplParagraph,String methods) {
+        if (methods.contains("收益法")){
+            if (CollectionUtil.isNotEmpty(targets)){
+                List<HouseGuarantyTarget> collect = targets.stream().filter(x -> !x.getHasLandUseRightContract() && x.getLandYearLowerHouseYear()).collect(Collectors.toList());
+                if (CollectionUtil.isNotEmpty(collect)){
+                    List<String> tIds = collect.stream().map(HouseGuarantyTarget::getTId).collect(Collectors.toList());
+                    String paragraph = tmplParagraph.getParagraph();
+                    return paragraph.replace("{tIds}", CollectionUtil.formatDotAndRemoveMiddle(tIds));
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 依据不足假设 未提供土地出让合同且土地使用年限低于房屋年限且使用成本法评估
+     * @param targets
+     * @param tmplParagraph
+     * @return
+     */
+    public static String isNotContractLandLowerHouseCB(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplParagraph,String methods) {
+        if (methods.contains("成本法")){
+            if (CollectionUtil.isNotEmpty(targets)){
+                List<HouseGuarantyTarget> collect = targets.stream().filter(x -> !x.getHasLandUseRightContract() && x.getLandYearLowerHouseYear()).collect(Collectors.toList());
+                if (CollectionUtil.isNotEmpty(collect)){
+                    List<String> tIds = collect.stream().map(HouseGuarantyTarget::getTId).collect(Collectors.toList());
+                    String paragraph = tmplParagraph.getParagraph();
+                    return paragraph.replace("{tIds}", CollectionUtil.formatDotAndRemoveMiddle(tIds));
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 限制条件 估价对象未设立抵押权
+     * @param targets
+     * @param tmplParagraph
+     * @return
+     */
+    public static String isNotPledge(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplParagraph) {
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> x.getHasPledge()).collect(Collectors.toList());
+            if (!CollectionUtil.isNotEmpty(collect)){
+                return tmplParagraph.getParagraph();
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 限制条件 适用于原设立抵押权未注销,向新的抵押权人申请贷款
+     * @param targets
+     * @param tmplParagraph
+     * @return
+     */
+    public static String isOldPledgeToNewPledge(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplParagraph) {
+        StringBuilder result = new StringBuilder();
+        String paragraph = tmplParagraph.getParagraph();
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> (x.getHasPledge() && StrUtil.isNotBlank(x.getPledgeType()) && StrUtil.isNotBlank(x.getPledgeUser()) && StrUtil.isNotBlank(x.getPledgeValue())
+                    && StrUtil.isNotBlank(x.getNewPledgeUser()))).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(collect)){
+                for (int i = 0; i < collect.size(); i++){
+                    String replace = getString(collect.get(i), paragraph);
+                    result.append(replace);
+                    if (i != collect.size()-1){
+                        result.append("\n");
+                    }
+                }
+            }
+            return result.toString();
+        }
+        return null;
+    }
+
+    private static String getString(HouseGuarantyTarget target, String paragraph) {
+        String pledgeType = target.getPledgeType();
+        String pledgeUser = target.getPledgeUser();
+        String pledgeValue = target.getPledgeValue();
+        String newPledgeUser = target.getNewPledgeUser();
+        String tId = target.getTId();
+        return paragraph.replace("{tId}", tId)
+                .replace("{tId}", tId).replace("{pledgeType}", pledgeType).replace("{pledgeType}", pledgeType)
+                .replace("{pledgeUser}", pledgeUser).replace("{pledgeValue}",
+                        pledgeValue).replace("{newPledgeUser}", newPledgeUser);
+    }
+
+    /**
+     * 限制条件 适用于原抵押权未注销,现拟设立最高额抵押权,同一抵押权人
+     * @param targets
+     * @param tmplParagraph
+     * @return
+     */
+    public static String isOldPledgeToOldPledge(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplParagraph) {
+        StringBuilder result = new StringBuilder();
+        String paragraph = tmplParagraph.getParagraph();
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> x.getHasPledge() && StrUtil.isNotBlank(x.getPledgeType()) && x.getSamePledgeHigh()).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(collect)){
+                for (int i = 0; i < collect.size(); i++){
+                    String tId = collect.get(i).getTId();
+                    String pledgeUser = collect.get(i).getPledgeUser();
+                    result.append(paragraph.replace("{tId}", tId).replace("{tId}",tId).replace("{pledgeUser}",pledgeUser));
+                    if (i != collect.size()-1){
+                        result.append("\n");
+                    }
+                }
+            }
+            return result.toString();
+        }
+        return null;
+    }
+
+    /**
+     * 限制条件 土地使用权未划拨但未扣除出让金
+     * @param targets
+     * @param tmplParagraph
+     * @return
+     */
+    public static String isTransferNotDeductSellMoney(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplParagraph,Boolean isDeductSellAmount) {
+        return isDeductSellAmount?null:tmplParagraph.getParagraph();
+    }
+
+    /**
+     * 限制条件 土地使用权未划拨已扣除出让金
+     * @param targets
+     * @param tmplParagraph
+     * @return
+     */
+    public static String isTransferDeductSellMoney(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplParagraph,Boolean isDeductSellAmount) {
+        return isDeductSellAmount?tmplParagraph.getParagraph():null;
+    }
+
+    /**
+     * 限制条件 是否提供技术报告
+     * @param targets
+     * @param tmplParagraph
+     * @return
+     */
+    public static String isProvideTechReport(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplParagraph,Boolean hasTechReport) {
+        String paragraph = tmplParagraph.getParagraph();
+        if (hasTechReport){
+            return paragraph.replace("{hasTechReport}","、“估价技术报告”");
+        }
+        return paragraph.replace("{hasTechReport}","");
+    }
+
+    /**
+     * 限制条件 是否是农商银行
+     * @param targets
+     * @param tmplParagraph
+     * @return
+     */
+    public static String isNSBank(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplParagraph,Boolean isNsBank) {
+        return isNsBank?tmplParagraph.getParagraph():null;
+    }
+
+    /**
+     * 限制条件 其他银行
+     * @param targets
+     * @param tmplParagraph
+     * @return
+     */
+    public static String isNormalBank(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplParagraph,Boolean isNsBank) {
+        return !isNsBank?tmplParagraph.getParagraph():null;
+    }
+
+    /**
+     * 估价中的特殊处理事项 无法定优先受偿款
+     * @param targets
+     * @param tmplParagraph
+     * @return
+     */
+    public static String isNoFirstMoney(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplParagraph) {
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> StrUtil.isBlank(x.getFirstMoney())).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(collect)){
+                List<String> tIds = collect.stream().map(HouseGuarantyTarget::getTId).collect(Collectors.toList());
+                String paragraph = tmplParagraph.getParagraph();
+                return paragraph.replace("{tIds}", CollectionUtil.formatDotAndRemoveMiddle(tIds));
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 估价中的特殊处理事项 适用于同一抵押权人续贷
+     * @param targets
+     * @param tmplParagraph
+     * @return
+     */
+    public static String isSamePledgeUserContinue(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplParagraph) {
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> x.getSamePledgeContinue() && StrUtil.isNotBlank(x.getPledgeType())).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(collect)){
+                List<String> tIds = collect.stream().map(HouseGuarantyTarget::getTId).collect(Collectors.toList());
+                Set<String> pledgeTypes = collect.stream().map(HouseGuarantyTarget::getPledgeType).collect(Collectors.toSet());
+                String paragraph = tmplParagraph.getParagraph();
+                return paragraph.replace("{tIds}", CollectionUtil.formatDotAndRemoveMiddle(tIds))
+                        .replace("{pledgeTypes}",CollectionUtil.formatDotAndRemoveMiddle(pledgeTypes));
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 估价中的特殊处理事项 适用于原设立抵押权未注销,向新的抵押权人申请贷款
+     * @param targets
+     * @param tmplParagraph
+     * @return
+     */
+    public static String isOldPledgeToNewPledgeSpecial(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplParagraph) {
+        StringBuilder result = new StringBuilder();
+        String paragraph = tmplParagraph.getParagraph();
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> StrUtil.isNotBlank(x.getPledgeType()) && StrUtil.isNotBlank(x.getNewPledgeUser())).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(collect)){
+                for (int i = 0; i < collect.size(); i++){
+                    String tId = collect.get(i).getTId();
+                    String pledgeType = collect.get(i).getPledgeType();
+                    String newPledgeUser = collect.get(i).getNewPledgeUser();
+                    result.append(paragraph.replace("{tId}", tId)
+                            .replace("{pledgeType}", pledgeType).replace("{newPledgeUser}",newPledgeUser));
+                    if (i != collect.size()-1){
+                        result.append("\n");
+                    }
+                }
+            }
+            return result.toString();
+        }
+        return null;
+    }
+
+    /**
+     * 估价中的特殊处理事项 适用于原已设立抵押权,现拟设立最高额抵押权,同一抵押权人
+     * @param targets
+     * @param tmplParagraph
+     * @return
+     */
+    public static String isNormalPledgeToHighPledge(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplParagraph) {
+        StringBuilder result = new StringBuilder();
+        String paragraph = tmplParagraph.getParagraph();
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> x.getHasPledge() && StrUtil.isNotBlank(x.getPledgeType()) && x.getSamePledgeHigh()).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(collect)){
+                for (int i = 0; i < collect.size(); i++){
+                    String tId = collect.get(i).getTId();
+                    String pledgeUser = collect.get(i).getPledgeUser();
+                    result.append(paragraph.replace("{tId}", tId).replace("{tId}",tId).replace("{pledgeUser}",pledgeUser));
+                    if (i != collect.size()-1){
+                        result.append("\n");
+                    }
+                }
+            }
+            return result.toString();
+        }
+        return null;
+    }
+
+    /**
+     * 估价中的特殊处理事项 适用于已设立最高额抵押权,抵押未到期
+     * @param targets
+     * @param tmplParagraph
+     * @return
+     */
+    public static String isHighPledgeNotExpire(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplParagraph) {
+        StringBuilder result = new StringBuilder();
+        String paragraph = tmplParagraph.getParagraph();
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> x.getHasPledge() &&  x.getHighPledgeNotExpire()).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(collect)){
+                for (int i = 0; i < collect.size(); i++){
+                    String tId = collect.get(i).getTId();
+                    String pledgeUser = collect.get(i).getPledgeUser();
+                    result.append(paragraph.replace("{tId}", tId).replace("{tId}",tId).replace("{pledgeUser}",pledgeUser));
+                    if (i != collect.size()-1){
+                        result.append("\n");
+                    }
+                }
+            }
+            return result.toString();
+        }
+        return null;
+    }
+
+    /**
+     * 估价中的特殊处理事项 估价对象未出租
+     * @param targets
+     * @param tmplParagraph
+     * @return
+     */
+    public static String isNotRentOut(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplParagraph) {
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> !x.getIsRentOut()).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(collect)){
+                List<String> tIds = collect.stream().map(HouseGuarantyTarget::getTId).collect(Collectors.toList());
+                String paragraph = tmplParagraph.getParagraph();
+                return paragraph.replace("{tIds}", CollectionUtil.formatDotAndRemoveMiddle(tIds));
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 估价中的特殊处理事项 已出租,未考虑租约影响:高于市场租金
+     * @param targets
+     * @param tmplParagraph
+     * @return
+     */
+    public static String isRentOutNotAffectHigh(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplParagraph) {
+        StringBuilder result = new StringBuilder();
+        String paragraph = tmplParagraph.getParagraph();
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> x.getIsRentOut() && !x.getIsRentLimit()
+                    && StrUtil.isNotBlank(x.getNotRentLimitReason()) && StrUtil.equals(x.getRentLimitReason(), "高于市场租金")).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(collect)){
+                for (int i = 0; i < collect.size(); i++){
+                    String tId = collect.get(i).getTId();
+                    result.append(paragraph.replace("{tId}", tId));
+                    if (i != collect.size()-1){
+                        result.append("\n");
+                    }
+                }
+            }
+            return result.toString();
+        }
+        return null;
+    }
+
+    /**
+     * 估价中的特殊处理事项 已出租,未考虑租约影响:与市场租金相当
+     * @param targets
+     * @param tmplParagraph
+     * @return
+     */
+    public static String isRentOutNotAffectNormal(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplParagraph) {
+        StringBuilder result = new StringBuilder();
+        String paragraph = tmplParagraph.getParagraph();
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> x.getIsRentOut() && !x.getIsRentLimit()
+                    && StrUtil.isNotBlank(x.getNotRentLimitReason()) && StrUtil.equals(x.getRentLimitReason(), "与市场租金相当")).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(collect)){
+                for (int i = 0; i < collect.size(); i++){
+                    String tId = collect.get(i).getTId();
+                    result.append(paragraph.replace("{tId}", tId));
+                    if (i != collect.size()-1){
+                        result.append("\n");
+                    }
+                }
+            }
+            return result.toString();
+        }
+        return null;
+    }
+
+    /**
+     * 估价中的特殊处理事项 已出租,考虑租约影响:低于市场租金
+     * @param targets
+     * @param tmplParagraph
+     * @return
+     */
+    public static String isRentOutAffectLow(List<HouseGuarantyTarget> targets, TmplHouseParagraph tmplParagraph) {
+        StringBuilder result = new StringBuilder();
+        String paragraph = tmplParagraph.getParagraph();
+        if (CollectionUtil.isNotEmpty(targets)){
+            List<HouseGuarantyTarget> collect = targets.stream().filter(x -> x.getIsRentOut() && x.getIsRentLimit()
+                    && StrUtil.isNotBlank(x.getNotRentLimitReason()) && StrUtil.equals(x.getRentLimitReason(), "低于市场租金")).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(collect)){
+                for (int i = 0; i < collect.size(); i++){
+                    String tId = collect.get(i).getTId();
+                    result.append(paragraph.replace("{tId}", tId));
+                    if (i != collect.size()-1){
+                        result.append("\n");
+                    }
+                }
+            }
+            return result.toString();
+        }
+        return null;
+    }
 }

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

@@ -101,4 +101,8 @@ public class HouseGuarantyTarget extends BaseEntity implements Serializable {
     private String exploreDate;
 
     private Boolean landYearLowerHouseYear;
+
+    private Boolean isPromiseFile;
+
+    private Boolean isInChengDu;
 }

+ 38 - 1
service/src/main/java/com/dayou/service/TmplHouseParagraphService.java

@@ -19,5 +19,42 @@ public interface TmplHouseParagraphService extends IService<TmplHouseParagraph>
      * 生成未定事项假设最终结果
      * @param targets
      */
-    void findWDSXJSResult(List<HouseGuarantyTarget> targets,String hasImmovableCertificate);
+    String findWDSXJSResult(List<HouseGuarantyTarget> targets,String hasImmovableCertificate,String acreage);
+
+    /**
+     * 生成不相一致假设结果
+     * @param targets
+     * @param hasImmovableCertificate
+     * @param docDate
+     * @return
+     */
+    String findBXYZJSResult(List<HouseGuarantyTarget> targets, String hasImmovableCertificate, String docDate);
+
+    /**
+     * 生成依据不足假设结果
+     * @param targets
+     * @return
+     */
+    String findYJBUJSResult(List<HouseGuarantyTarget> targets,String hasImmovableCertificate,String methods);
+
+    /**
+     * 生成限制条件结果
+     * @param targets
+     * @return
+     */
+    String findLimitConditionResult(List<HouseGuarantyTarget> targets,Boolean isDeductSellAmount,Boolean hasTechReport,Boolean isNsBank);
+
+    /**
+     * 生成使用报告说明
+     * @param targets
+     * @return
+     */
+    String findUseReportExplain(List<HouseGuarantyTarget> targets);
+
+    /**
+     * 生成 估价中的特殊处理事项
+     * @param targets
+     * @return
+     */
+    String findSpecialHandle(List<HouseGuarantyTarget> targets);
 }

+ 26 - 2
service/src/main/java/com/dayou/service/impl/HouseGuarantyServiceImpl.java

@@ -227,15 +227,39 @@ public class HouseGuarantyServiceImpl implements HouseGuarantyService {
             //获取估价对象补充信息
             List<HouseGuarantyTarget> targets = houseGuarantyTargetService.list(new LambdaQueryWrapper<HouseGuarantyTarget>().eq(HouseGuarantyTarget::getDocId, id).eq(BaseEntity::getDeleteStatus, Boolean.FALSE));
 
+            String hasImmovableCertificate = valueMap.get("hasImmovableCertificate");
 
+            if (HouseDocumentUtil.checkBoolean(hasImmovableCertificate)){
+                hasImmovableCertificate = IMMOVABLE;
+            }else {
+                hasImmovableCertificate = "";
+            }
 
             //组合一般假设内容
-            String ybjsResult = tmplHouseParagraphService.findYBJSResult(targets,valueMap.get("isCheckOriginCertificate"), valueMap.get("hasImmovableCertificate"));
+
+            String ybjsResult = tmplHouseParagraphService.findYBJSResult(targets,valueMap.get("isCheckOriginCertificate"), hasImmovableCertificate);
             conditionDO.setYBJS(ybjsResult);
 
             //组合未定事项假设内容
-            tmplHouseParagraphService.findWDSXJSResult(targets,valueMap.get("hasImmovableCertificate"));
+            String wdsxjsResult = tmplHouseParagraphService.findWDSXJSResult(targets, hasImmovableCertificate,valueMap.get("acreage"));
+
+            //组合不相一致假设内容
+            String bxyzjsResult = tmplHouseParagraphService.findBXYZJSResult(targets,hasImmovableCertificate,valueMap.get("docDate"));
+
+            //组合依据不足假设内容
+            String yjbujsResult = tmplHouseParagraphService.findYJBUJSResult(targets,hasImmovableCertificate,valueMap.get("methods"));
+
+            //组合限制条件内容
+            String limitCondition = tmplHouseParagraphService.findLimitConditionResult(targets
+                        ,HouseDocumentUtil.checkBoolean(valueMap.get("isDeductSellAmount"))
+                    ,HouseDocumentUtil.checkBoolean(valueMap.get("hasTechReport"))
+                    ,HouseDocumentUtil.checkBoolean(valueMap.get("isNsBank")));
+
+            //组合使用报告说明内容
+            String useReportExplain = tmplHouseParagraphService.findUseReportExplain(targets);
 
+            //组合估价中的特殊处理事项内容
+            String specialHandles = tmplHouseParagraphService.findSpecialHandle(targets);
 
             byte[] tmplWordByte = Files.readAllBytes(Paths.get(baseDir
                     + fileNetConfig.getHouseGuarantyTemplatePath() + CONDITION_LETTER_TEMPLATE));

+ 326 - 4
service/src/main/java/com/dayou/service/impl/TmplHouseParagraphServiceImpl.java

@@ -3,7 +3,6 @@ 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;
@@ -16,8 +15,7 @@ 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.HouseGuarantyChapter.*;
 import static com.dayou.enums.BusinessEnum.HouseGuarantyRules.*;
 import static com.dayou.enums.BusinessEnum.HouseSubBusiness.GUARANTY;
 
@@ -83,7 +81,8 @@ public class TmplHouseParagraphServiceImpl extends ServiceImpl<TmplHouseParagrap
     }
 
     @Override
-    public void findWDSXJSResult(List<HouseGuarantyTarget> targets,String hasImmovableCertificate) {
+    public String findWDSXJSResult(List<HouseGuarantyTarget> targets,String hasImmovableCertificate,String acreage) {
+
         List<TmplHouseParagraph> paragraphTemps = this.list(new LambdaQueryWrapper<TmplHouseParagraph>()
                 .eq(TmplHouseParagraph::getDocMold, GUARANTY).eq(TmplHouseParagraph::getChapter, UNDEFINED_ASSUMPTION).orderByAsc(TmplHouseParagraph::getSort));
         StringBuilder result = new StringBuilder();
@@ -98,8 +97,331 @@ public class TmplHouseParagraphServiceImpl extends ServiceImpl<TmplHouseParagrap
                         i++;
                     }
                 }
+                if (IS_USE_DIFFERENT.getCode().equals(rule)){
+                    String useDiff = HouseDocumentUtil.isUseDiff(targets,paragraph);
+                    if (StrUtil.isNotBlank(useDiff)){
+                        result.append(i).append(". ").append(useDiff);
+                        i++;
+                    }
+                }
+                if (IS_PROVIDE_LAND_BIG_CERTIFICATE.getCode().equals(rule)){
+                    String provideLandBigCertificate = HouseDocumentUtil.isProvideLandBigCertificate(targets,paragraph);
+                    if (StrUtil.isNotBlank(provideLandBigCertificate)){
+                        result.append(i).append(". ").append(provideLandBigCertificate);
+                        i++;
+                    }
+                }
+                if (IS_PROVIDE_LAND_BIG_CERTIFICATE_SHARE.getCode().equals(rule)){
+                    String provideLandBigCertificateShare = HouseDocumentUtil.isProvideLandBigCertificateShare(targets,paragraph);
+                    if (StrUtil.isNotBlank(provideLandBigCertificateShare)){
+                        result.append(i).append(". ").append(provideLandBigCertificateShare);
+                        i++;
+                    }
+                }
+                if (IS_DIVIDE_METHOD1.getCode().equals(rule)){
+                    String divideMethod1 = HouseDocumentUtil.isDivideMethod1(targets,paragraph,hasImmovableCertificate,acreage);
+                    if (StrUtil.isNotBlank(divideMethod1)){
+                        result.append(i).append(". ").append(divideMethod1);
+                        i++;
+                    }
+                }
+                if (IS_DIVIDE_METHOD2.getCode().equals(rule)){
+                    String divideMethod2 = HouseDocumentUtil.isDivideMethod2(targets,paragraph,hasImmovableCertificate,acreage);
+                    if (StrUtil.isNotBlank(divideMethod2)){
+                        result.append(i).append(". ").append(divideMethod2);
+                        i++;
+                    }
+                }
+            }
+            else{
+                result.append(i).append(". ");
+                result.append(paragraph.getParagraph());
+                i++;
+            }
+        }
+        return result.toString();
+    }
+
+    @Override
+    public String findBXYZJSResult(List<HouseGuarantyTarget> targets, String hasImmovableCertificate, String docDate) {
+        List<TmplHouseParagraph> paragraphTemps = this.list(new LambdaQueryWrapper<TmplHouseParagraph>()
+                .eq(TmplHouseParagraph::getDocMold, GUARANTY).eq(TmplHouseParagraph::getChapter, UNCONFORMITY_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_ADDRESS_DIFF_CERTIFICATE.getCode().equals(rule)){
+                    String addressDiffCertificate = HouseDocumentUtil.isAddressDiffCertificate(targets, hasImmovableCertificate, paragraph);
+                    if (StrUtil.isNotBlank(addressDiffCertificate)){
+                        result.append(i).append(". ").append(addressDiffCertificate);
+                        i++;
+                    }
+                }
+                if (IS_ADDRESS_DIFF_NO_CERTIFICATE.getCode().equals(rule)){
+                    String addressDiffNoCertificate = HouseDocumentUtil.isAddressDiffNoCertificate(targets, hasImmovableCertificate, paragraph);
+                    if (StrUtil.isNotBlank(addressDiffNoCertificate)){
+                        result.append(i).append(". ").append(addressDiffNoCertificate);
+                        i++;
+                    }
+                }
+                if (IS_DATE_DIFF.getCode().equals(rule)){
+                    String dateDiff = HouseDocumentUtil.isDateDiff(targets, paragraph, docDate);
+                    if (StrUtil.isNotBlank(dateDiff)){
+                        result.append(i).append(". ").append(dateDiff);
+                        i++;
+                    }
+                }
+            }
+            else{
+                result.append(i).append(". ");
+                result.append(paragraph.getParagraph());
+                i++;
+            }
+        }
+        return "";
+    }
+
+    @Override
+    public String findYJBUJSResult(List<HouseGuarantyTarget> targets,String hasImmovableCertificate,String methods) {
+        List<TmplHouseParagraph> paragraphTemps = this.list(new LambdaQueryWrapper<TmplHouseParagraph>()
+                .eq(TmplHouseParagraph::getDocMold, GUARANTY).eq(TmplHouseParagraph::getChapter, DEFICIENCY_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_BIG_CERTIFICATE_ONLY_HOUSE.getCode().equals(rule)){
+                    String bigCertificateOnlyHouse = HouseDocumentUtil.isBigCertificateOnlyHouse(targets,paragraph);
+                    if (StrUtil.isNotBlank(bigCertificateOnlyHouse)){
+                        result.append(i).append(". ").append(bigCertificateOnlyHouse);
+                        i++;
+                    }
+                }
+                if (IS_NOT_ORIGIN_CERTIFICATE_AND_PROMISE_SAME.getCode().equals(rule)){
+                    String notOriginCertificateOnlyHouse = HouseDocumentUtil.isNotOriginCertificateOnlyHouse(targets,paragraph,hasImmovableCertificate);
+                    if (StrUtil.isNotBlank(notOriginCertificateOnlyHouse)){
+                        result.append(i).append(". ").append(notOriginCertificateOnlyHouse);
+                        i++;
+                    }
+                }
+                if (IS_NOT_ORIGIN_FILES_IN_CHENGDU.getCode().equals(rule)){
+                    String bigCertificateOnlyHouse = HouseDocumentUtil.isNotOriginFileInChengDu(targets,paragraph);
+                    if (StrUtil.isNotBlank(bigCertificateOnlyHouse)){
+                        result.append(i).append(". ").append(bigCertificateOnlyHouse);
+                        i++;
+                    }
+                }
+                if (IS_NOT_ORIGIN_FILES_OUT_CHENGDU.getCode().equals(rule)){
+                    String notOriginFileOutChengDu = HouseDocumentUtil.isNotOriginFileOutChengDu(targets,paragraph);
+                    if (StrUtil.isNotBlank(notOriginFileOutChengDu)){
+                        result.append(i).append(". ").append(notOriginFileOutChengDu);
+                        i++;
+                    }
+                }
+                if (IS_RENT_OUT_NOT_CONTRACT_NO_AFFECT.getCode().equals(rule)){
+                    String rentOutNotContractNoAffect = HouseDocumentUtil.isRentOutNotContractNoAffect(targets,paragraph);
+                    if (StrUtil.isNotBlank(rentOutNotContractNoAffect)){
+                        result.append(i).append(". ").append(rentOutNotContractNoAffect);
+                        i++;
+                    }
+                }
+                if (IS_NOT_CONTRACT_LAND_LOWER_HOUSE_SY.getCode().equals(rule)){
+                    String notContractLandLowerHouseSY = HouseDocumentUtil.isNotContractLandLowerHouseSY(targets,paragraph,methods);
+                    if (StrUtil.isNotBlank(notContractLandLowerHouseSY)){
+                        result.append(i).append(". ").append(notContractLandLowerHouseSY);
+                        i++;
+                    }
+                }
+                if (IS_NOT_CONTRACT_LAND_LOWER_HOUSE_CB.getCode().equals(rule)){
+                    String notContractLandLowerHouseCB = HouseDocumentUtil.isNotContractLandLowerHouseCB(targets,paragraph,methods);
+                    if (StrUtil.isNotBlank(notContractLandLowerHouseCB)){
+                        result.append(i).append(". ").append(notContractLandLowerHouseCB);
+                        i++;
+                    }
+                }
+            }
+            else{
+                result.append(i).append(". ");
+                result.append(paragraph.getParagraph());
+                i++;
+            }
+        }
+        return "";
+    }
+
+    @Override
+    public String findLimitConditionResult(List<HouseGuarantyTarget> targets,Boolean isDeductSellAmount,Boolean hasTechReport,Boolean isNsBank) {
+        List<TmplHouseParagraph> paragraphTemps = this.list(new LambdaQueryWrapper<TmplHouseParagraph>()
+                .eq(TmplHouseParagraph::getDocMold, GUARANTY).eq(TmplHouseParagraph::getChapter, LIMIT_CONDITION).orderByAsc(TmplHouseParagraph::getSort));
+        StringBuilder result = new StringBuilder();
+        int i = 1;
+        for (TmplHouseParagraph paragraph : paragraphTemps){
+            String rule = paragraph.getRule();
+            if (StrUtil.isNotBlank(rule)){
+                if (IS_NOT_PLEDGE.getCode().equals(rule)){
+                    String notPledge = HouseDocumentUtil.isNotPledge(targets,paragraph);
+                    if (StrUtil.isNotBlank(notPledge)){
+                        result.append(i).append(". ").append(notPledge);
+                        i++;
+                    }
+                }
+                if (IS_OLD_PLEDGE_TO_NEW_PLEDGE.getCode().equals(rule)){
+                    String oldPledgeToNewPledge = HouseDocumentUtil.isOldPledgeToNewPledge(targets,paragraph);
+                    if (StrUtil.isNotBlank(oldPledgeToNewPledge)){
+                        result.append(i).append(". ").append(oldPledgeToNewPledge);
+                        i++;
+                    }
+                }
+                if (IS_OLD_PLEDGE_TO_OLD_PLEDGE.getCode().equals(rule)){
+                    String oldPledgeToOldPledge = HouseDocumentUtil.isOldPledgeToOldPledge(targets,paragraph);
+                    if (StrUtil.isNotBlank(oldPledgeToOldPledge)){
+                        result.append(i).append(". ").append(oldPledgeToOldPledge);
+                        i++;
+                    }
+                }
+                if (IS_TRANSFER_NOT_DEDUCT_SELL_MONEY.getCode().equals(rule)){
+                    String transferOutDeductSellMoney = HouseDocumentUtil.isTransferNotDeductSellMoney(targets,paragraph,isDeductSellAmount);
+                    if (StrUtil.isNotBlank(transferOutDeductSellMoney)){
+                        result.append(i).append(". ").append(transferOutDeductSellMoney);
+                        i++;
+                    }
+                }
+                if (IS_TRANSFER_DEDUCT_SELL_MONEY.getCode().equals(rule)){
+                    String transferDeductSellMoney = HouseDocumentUtil.isTransferDeductSellMoney(targets,paragraph,isDeductSellAmount);
+                    if (StrUtil.isNotBlank(transferDeductSellMoney)){
+                        result.append(i).append(". ").append(transferDeductSellMoney);
+                        i++;
+                    }
+                }
+                if (IS_PROVIDE_TECH_REPORT.getCode().equals(rule)){
+                    String provideTechReport = HouseDocumentUtil.isProvideTechReport(targets,paragraph,hasTechReport);
+                    if (StrUtil.isNotBlank(provideTechReport)){
+                        result.append(i).append(". ").append(provideTechReport);
+                        i++;
+                    }
+                }
+                if (IS_NS_BANK.getCode().equals(rule)){
+                    String nsBank = HouseDocumentUtil.isNSBank(targets,paragraph,isNsBank);
+                    if (StrUtil.isNotBlank(nsBank)){
+                        result.append(i).append(". ").append(nsBank);
+                        i++;
+                    }
+                }
+                if (IS_NORMAL_BANK.getCode().equals(rule)){
+                    String normalBank = HouseDocumentUtil.isNormalBank(targets,paragraph,isNsBank);
+                    if (StrUtil.isNotBlank(normalBank)){
+                        result.append(i).append(". ").append(normalBank);
+                        i++;
+                    }
+                }
+            }else{
+                result.append(i).append(". ");
+                result.append(paragraph.getParagraph());
+                i++;
+            }
+        }
+        return "";
+    }
+
+    @Override
+    public String findUseReportExplain(List<HouseGuarantyTarget> targets) {
+        List<TmplHouseParagraph> paragraphTemps = this.list(new LambdaQueryWrapper<TmplHouseParagraph>()
+                .eq(TmplHouseParagraph::getDocMold, GUARANTY).eq(TmplHouseParagraph::getChapter, USE_REPORT_EXPLAIN).orderByAsc(TmplHouseParagraph::getSort));
+        StringBuilder result = new StringBuilder();
+        int i = 1;
+        for (TmplHouseParagraph paragraph : paragraphTemps){
+            String rule = paragraph.getRule();
+            if (StrUtil.isNotBlank(rule)){
+                //未定义
+            }else {
+                result.append(i).append(". ");
+                result.append(paragraph.getParagraph());
+                i++;
+            }
+        }
+        return "";
+    }
+
+    @Override
+    public String findSpecialHandle(List<HouseGuarantyTarget> targets) {
+        List<TmplHouseParagraph> paragraphTemps = this.list(new LambdaQueryWrapper<TmplHouseParagraph>()
+                .eq(TmplHouseParagraph::getDocMold, GUARANTY).eq(TmplHouseParagraph::getChapter, SPECIAL_HANDLE).orderByAsc(TmplHouseParagraph::getSort));
+        StringBuilder result = new StringBuilder();
+        int i = 1;
+        for (TmplHouseParagraph paragraph : paragraphTemps){
+            String rule = paragraph.getRule();
+            if (StrUtil.isNotBlank(rule)){
+                if (IS_NO_FIRST_MONEY.getCode().equals(rule)){
+                    String noFirstMoney = HouseDocumentUtil.isNoFirstMoney(targets,paragraph);
+                    if (StrUtil.isNotBlank(noFirstMoney)){
+                        result.append(i).append(". ").append(noFirstMoney);
+                        i++;
+                    }
+                }
+                if (IS_SAME_PLEDGE_USER_CONTINUE.getCode().equals(rule)){
+                    String samePledgeUserContinue = HouseDocumentUtil.isSamePledgeUserContinue(targets,paragraph);
+                    if (StrUtil.isNotBlank(samePledgeUserContinue)){
+                        result.append(i).append(". ").append(samePledgeUserContinue);
+                        i++;
+                    }
+                }
+                if (IS_OLD_PLEDGE_TO_NEW_PLEDGE_SPECIAL.getCode().equals(rule)){
+                    String oldPledgeToNewPledgeSpecial = HouseDocumentUtil.isOldPledgeToNewPledgeSpecial(targets,paragraph);
+                    if (StrUtil.isNotBlank(oldPledgeToNewPledgeSpecial)){
+                        result.append(i).append(". ").append(oldPledgeToNewPledgeSpecial);
+                        i++;
+                    }
+                }
+                if (IS_NORMAL_PLEDGE_TO_HIGH_PLEDGE.getCode().equals(rule)){
+                    String normalPledgeToHighPledge = HouseDocumentUtil.isNormalPledgeToHighPledge(targets,paragraph);
+                    if (StrUtil.isNotBlank(normalPledgeToHighPledge)){
+                        result.append(i).append(". ").append(normalPledgeToHighPledge);
+                        i++;
+                    }
+                }
+                if (IS_HIGH_PLEDGE_NOT_EXPIRE.getCode().equals(rule)){
+                    String highPledgeNotExpire = HouseDocumentUtil.isHighPledgeNotExpire(targets,paragraph);
+                    if (StrUtil.isNotBlank(highPledgeNotExpire)){
+                        result.append(i).append(". ").append(highPledgeNotExpire);
+                        i++;
+                    }
+                }
+                if (IS_NOT_RENT_OUT.getCode().equals(rule)){
+                    String notRentOut = HouseDocumentUtil.isNotRentOut(targets,paragraph);
+                    if (StrUtil.isNotBlank(notRentOut)){
+                        result.append(i).append(". ").append(notRentOut);
+                        i++;
+                    }
+                }
+                if (IS_RENT_OUT_NOT_AFFECT_HIGH.getCode().equals(rule)){
+                    String rentOutNotAffectHigh = HouseDocumentUtil.isRentOutNotAffectHigh(targets,paragraph);
+                    if (StrUtil.isNotBlank(rentOutNotAffectHigh)){
+                        result.append(i).append(". ").append(rentOutNotAffectHigh);
+                        i++;
+                    }
+                }
+                if (IS_RENT_OUT_NOT_AFFECT_NORMAL.getCode().equals(rule)){
+                    String rentOutNotAffectNormal = HouseDocumentUtil.isRentOutNotAffectNormal(targets,paragraph);
+                    if (StrUtil.isNotBlank(rentOutNotAffectNormal)){
+                        result.append(i).append(". ").append(rentOutNotAffectNormal);
+                        i++;
+                    }
+                }
+                if (IS_RENT_OUT_AFFECT_LOW.getCode().equals(rule)){
+                    String rentOutAffectLow = HouseDocumentUtil.isRentOutAffectLow(targets,paragraph);
+                    if (StrUtil.isNotBlank(rentOutAffectLow)){
+                        result.append(i).append(". ").append(rentOutAffectLow);
+                        i++;
+                    }
+                }
+            }else {
+                result.append(i).append(". ");
+                result.append(paragraph.getParagraph());
+                i++;
             }
         }
+        return "";
     }
 }
 

+ 4 - 0
sql/update_sql.sql

@@ -488,3 +488,7 @@ ALTER TABLE house_guaranty_target ADD COLUMN is_costing_share_method bit(1) NULL
 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 '土地剩余使用年限短于建筑物剩余经济寿命';
+ALTER TABLE house_guaranty_target ADD COLUMN is_promise_file bit(1) NULL COMMENT '《承诺书》承诺相关的法律文件复印件与原件一致';
+ALTER TABLE house_guaranty_target ADD COLUMN is_in_cheng_du bit(1) NULL COMMENT '估价对象是否属于大成都范围内';
+
+