Explorar el Código

Merge branch 'master' of http://47.108.172.52:3000/dayou/productivity-platform

GouGengquan hace 8 meses
padre
commit
ba1187f74e

+ 26 - 13
biz-base/src/test/java/com/dayou/AddressParser.java

@@ -1,10 +1,19 @@
 package com.dayou;
 
+import cn.hutool.json.JSON;
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
 import com.dayou.dto.Address;
 import com.dayou.utils.AddressUtil;
+import com.dayou.utils.CollectionUtil;
 import com.dayou.utils.HouseDocumentUtil;
 
 import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.dayou.enums.HouseTargetTableColumn.LOCATION;
+import static com.dayou.utils.HouseDocumentUtil.mergeAddress;
 
 public class AddressParser {
 
@@ -28,27 +37,31 @@ public class AddressParser {
 //                "武侯区晋阳街道晋阳村领秀别墅1栋1-3楼1号",
 //                "武侯区人民南路四段21号3栋3单元5层03号",
 //                "武侯区人民南路四段21号3栋3单元7层03号",
-//                "成都市武侯区双凤五路412号1层",
-//                "成都市武侯区双凤五路450号1层",
-//                "成都市武侯区双凤五路470号1层",
-//                "成都市武侯区金江路216号1层",
-//                "成都市武侯区武兴路989号2层",
-//                "都江堰市玉堂镇青城水街北段255号",
-//                "都江堰市玉堂镇青城水街北段257号",
-//                "都江堰市玉堂镇青城水街北段259号",
+                "武侯区双凤五路412号1层",
+                "武侯区双凤五路450号1层",
+                "武侯区双凤五路470号1层",
+                "武侯区金江路216号1层",
+                "武侯区武兴路989号2层",
+                "都江堰市玉堂镇青城水街北段255号",
+                "都江堰市玉堂镇青城水街北段257号",
+                "都江堰市玉堂镇青城水街北段259号",
 //                "南充市阆中市缓缓路23号"
-                "武侯区晋阳街道晋阳村领秀别墅1栋1-3楼1号"
+//                "武侯区双凤五路412号1层",
+//                "武侯区双凤五路450号1层",
+//                "武侯区双凤五路470号1层",
+//                "武侯区金江路216号1层",
+//                "武侯区武兴路989号2层"
 
         };
         List<String> list = Arrays.asList(addresses);
         try {
-            List<Address> list1 = new ArrayList<>();
+            List<Address> lists = new ArrayList<>();
             list.stream().forEach(x -> {
                 Address parsedAddress = AddressUtil.parseAddress(x);
-                list1.add(parsedAddress);
+                lists.add(parsedAddress);
             });
-//            String s = HouseDocumentUtil.getProjectName(list1);
-            System.out.println(list1);
+            String s = CollectionUtil.formatSplitAndRemoveMiddle(mergeAddress(lists));
+            System.out.println(s);
         } catch (Exception e) {
             System.err.println(e.getMessage());
         }

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 74 - 10
biz-base/src/test/java/com/dayou/FreeMarkTest.java


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

@@ -1,14 +1,14 @@
 package com.dayou.utils;
 
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import com.dayou.dto.Address;
 import com.dayou.enums.HouseTargetTableColumn;
+import com.dayou.exception.ErrorCode;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.math.BigDecimal;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import static com.dayou.enums.HouseTargetTableColumn.*;
@@ -65,11 +65,157 @@ public class HouseDocumentUtil {
      */
     public static String getOwnShipUser(JSONArray array){
         Set<Object> ownShipUsers = array.stream().map(obj -> ((JSONObject) obj).get(OWE_SHIP_USER.getZhName()))
-                .collect(Collectors.toSet());
+                .filter(x->x!=null).collect(Collectors.toSet());
         return CollectionUtil.formatDotAndRemoveMiddle(ownShipUsers);
     }
 
     /**
+     * 格式化用途
+     * @param array
+     * @return
+     */
+    public static String getUseTo(JSONArray array){
+        Set<Object> useTo = array.stream().map(obj -> ((JSONObject) obj).get(USE_TO.getZhName()))
+                .filter(x->x!=null).collect(Collectors.toSet());
+        return CollectionUtil.formatDotAndRemoveMiddle(useTo);
+    }
+
+    /**
+     * 格式化实勘地址
+     * @param targets
+     * @param actAddress
+     * @return
+     */
+    public static String getActAddress(JSONArray targets,String actAddress){
+        StringBuilder sb = new StringBuilder("【");
+        if (StrUtil.isNotBlank(actAddress)){
+            sb.append("实勘地址").append(actAddress).append("(未见其余门牌号);");
+        }
+
+        List<Object> acreage = JsonUtil.collectByKeyToList(targets, ACREAGE.getZhName());
+        //建筑面积
+        BigDecimal totalAcreage = sumList(acreage);
+
+        Set<Object> landType = JsonUtil.collectByKeyToSet(targets, LAND_TYPE.getZhName());
+
+        List<Object> outerAcreage = JsonUtil.collectByKeyToList(targets, OUTER_ACREAGE.getZhName());
+
+        Set<Object> useTo = JsonUtil.collectByKeyToSet(targets, USE_TO.getZhName());
+
+        String outDesc = outAcreageTemplate(useTo, landType, outerAcreage);
+        sb.append("建筑面积"+(targets.size()>1?"合计:":":")).append(totalAcreage).append("㎡;");
+
+
+        sb.append("房屋所有权证号:");
+        List<Object> certificateNos = JsonUtil.collectByKeyToList(targets, CERTIFICATE_NO.getZhName());
+
+        String certificates = CollectionUtil.formatDotAndRemoveMiddle(certificateNos);
+
+        sb.append(certificates).append(",");
+
+        sb.append(outDesc).append("】");
+
+        return sb.toString();
+    }
+    /**
+     * 格式化估价对象描述
+     * @param targets    估价对象
+     * @param actAddress 实勘地址
+     * @return
+     */
+    public static String getTargetDescription(JSONArray targets,String actAddress){
+        //单个估价对象里面可能有多个子对象
+        String address = getProjectName(targets);
+        //实勘地址
+        //权利人
+        String ownShipUser = getOwnShipUser(targets);
+        //用途
+        String useTo = getUseTo(targets);
+        //编号
+        String id = (String) ((JSONObject) targets.get(0)).get(ID.getZhName());
+        //实勘描述
+        String actDesc = getActAddress(targets, actAddress);
+        //格式化 todo 段落模版从DB中获取
+        String template ;
+        if (StrUtil.isNotBlank(ownShipUser)){
+            template = "估价对象${id}系${ownShipUser}所有的位于${address}${useTo}房地产${actDesc}";
+        }else {
+            template = "估价对象${id}位于${address}${useTo}房地产${actDesc}";
+        }
+        return template.replace("${id}", id).replace("${ownShipUser}", ownShipUser).replace("${address}", address)
+                .replace("${useTo}", useTo).replace("${actDesc}", actDesc);
+    }
+
+    /**
+     * List<Object>求和
+     * @param list
+     * @return
+     */
+    public static BigDecimal sumList(List<Object> list){
+        BigDecimal sum = null;
+        try {
+            sum = (BigDecimal) list.stream().reduce(BigDecimal.ZERO, (a, b) -> {
+                return new BigDecimal(String.valueOf(a)).add(new BigDecimal(String.valueOf(b)));
+            });
+        }catch (NumberFormatException e) {
+            ErrorCode.throwBusinessException(ErrorCode.CUSTOM_ERROR,"数字格式化异常");
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        return sum;
+    }
+
+    /**
+     * 分摊土地描述
+     * @param useTo
+     * @param landType
+     * @param outerAcreage
+     * @return
+     */
+    public static String outAcreageTemplate(Set<Object> useTo,Set<Object> landType,List<Object> outerAcreage){
+        //有地类用途和分摊面积
+        if (cn.hutool.core.collection.CollectionUtil.isNotEmpty(outerAcreage)
+                && cn.hutool.core.collection.CollectionUtil.isNotEmpty(landType)){
+            if (landType.contains("商业用地")){
+                BigDecimal sum = sumList(outerAcreage);
+                return "估价对象分摊出让商业用地使用权面积合计为:"+sum.toString()+"㎡;详见估价结果一览表";
+            }
+            if (landType.contains("批发零售用地")){
+                BigDecimal sum = sumList(outerAcreage);
+                return "估价对象分摊出让批发零售用地使用权面积合计为:"+sum.toString()+"㎡;详见估价结果一览表";
+            }
+        }
+        //有用途和分摊面积
+        if (cn.hutool.core.collection.CollectionUtil.isNotEmpty(outerAcreage)
+                && cn.hutool.core.collection.CollectionUtil.isNotEmpty(useTo)){
+            if (useTo.contains("工厂")){
+                BigDecimal sum = sumList(outerAcreage);
+                return "估价对象分摊出让工业用地使用权面积:"+sum.toString()+"㎡。详见估价结果一览表";
+            }
+            if (useTo.contains("车位")){
+                BigDecimal sum = sumList(outerAcreage);
+                return "估价对象分摊出让住宅(地下车库)用地使用权面积合计:"+sum.toString()+"㎡。详见估价结果一览表";
+            }
+            if (useTo.contains("住宅")){
+                BigDecimal sum = sumList(outerAcreage);
+                return "估价对象分摊出让城镇住宅用地使用权面积:"+sum.toString()+"㎡。详见估价结果一览表";
+            }
+        }
+        //有用途和无分摊面积
+        if (cn.hutool.core.collection.CollectionUtil.isEmpty(outerAcreage)
+                && cn.hutool.core.collection.CollectionUtil.isNotEmpty(useTo)){
+            if (useTo.contains("商业")){
+                return "估价对象占用(分摊)的国有建设用地使用权系商业用地。详见估价结果一览表";
+            }
+            if (useTo.contains("住宅")){
+                return "估价对象分摊的土地使用权系出让城镇住宅用地。详见估价结果一览表";
+            }
+        }
+         return "!分摊面积描述待补充!";
+
+    }
+
+    /**
      * 合并地址
      * @param addressList
      * @return
@@ -207,6 +353,7 @@ public class HouseDocumentUtil {
             }
             result.add(stringBuilder.toString());
         }
+        Collections.reverse(result);
         return result;
     }
 }

+ 30 - 0
common/src/main/java/com/dayou/utils/JsonUtil.java

@@ -1,12 +1,18 @@
 package com.dayou.utils;
 
 import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
 
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import static com.dayou.enums.HouseTargetTableColumn.ACREAGE;
 
 /**
  * JSON工具类
@@ -36,4 +42,28 @@ public class JsonUtil {
         fos.write(jsonArray.toString().getBytes());
         fos.close();
     }
+
+    /**
+     * JSONArray 根据key聚合value
+     * @param array
+     * @param key
+     * @return
+     */
+    public static List<Object> collectByKeyToList(JSONArray array, String key){
+        return array.stream().map(obj -> ((JSONObject) obj).get(key))
+                .filter(x->x!=null && !x.equals("/")).collect(Collectors.toList());
+
+    }
+
+    /**
+     * JSONArray 根据key聚合value
+     * @param array
+     * @param key
+     * @return
+     */
+    public static Set<Object> collectByKeyToSet(JSONArray array, String key){
+        return array.stream().map(obj -> ((JSONObject) obj).get(key))
+                .filter(x->x!=null && !x.equals("/")).collect(Collectors.toSet());
+
+    }
 }

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

@@ -14,6 +14,8 @@ public class ConsignorLetterDO {
 
     private String consignor;
 
+    private String ownship;
+
     private String ownshipUser;
 
     private String appraiser1;
@@ -28,4 +30,8 @@ public class ConsignorLetterDO {
 
     private String docNo;
 
+    private String actDesc;
+
+    private String blank;
+
 }