浏览代码

分析接口入库逻辑1

chenendian 1 月之前
父节点
当前提交
1742c5f6e9

+ 1 - 0
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/controller/DecisionTaskController.java

@@ -49,6 +49,7 @@ public class DecisionTaskController extends BaseController {
             DecisionTask decisionTask = decisionTaskService.analyse(name, shape, shapeType, shapeFilePath, dataType);
             return R.ok(decisionTask);
         } catch (Exception e) {
+            e.printStackTrace();
             return R.fail(e.getMessage());
         }
     }

+ 2 - 1
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/domain/DecisionTask.java

@@ -8,6 +8,7 @@ import java.util.Date;
 
 @Data
 public class DecisionTask extends BaseId {
+
     private String name;
 
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -23,7 +24,7 @@ public class DecisionTask extends BaseId {
 
     private BigDecimal shapeArea;
 
-    private byte[] geom;
+    private String geom;
 
     private String reportPath;
 

+ 20 - 0
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/domain/vo/DecisionIntersectsDetailsVo.java

@@ -0,0 +1,20 @@
+package com.siwei.apply.domain.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 计算交集入参
+ *
+ */
+@Data
+public class DecisionIntersectsDetailsVo {
+    private String taskId;
+    private Integer type;
+    private String sourceId;
+    private String detailsName;
+    private String ewkt;
+    private String tableName;
+    List<String> tableIds;
+}

+ 30 - 8
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/enums/DecisionType.java

@@ -5,21 +5,31 @@ package com.siwei.apply.enums;
  */
 public enum DecisionType {
 
-    DECISION_TYPE_1("1", "现状数据"),
-    DECISION_TYPE_2("2", "三区三线"),
-    DECISION_TYPE_3("3", "控规数据"),
-    DECISION_TYPE_4("4", "所有权宗地"),
-    DECISION_TYPE_5("5", "使用权宗地"),
-    DECISION_TYPE_6("6", "供地数据"),
-    DECISION_TYPE_7("7", "报批数据");
+//    DECISION_TYPE_1("1", "现状数据", "gj_xzqh_shp", "id", "name"),
+//    DECISION_TYPE_2("2", "三区三线", "sqsx", "id", "name"),
+//    DECISION_TYPE_3("3", "控规数据", "kg", "id", "name"),
+//    DECISION_TYPE_4("4", "所有权宗地", "syqzd", "id", "zl"),
+//    DECISION_TYPE_5("5", "使用权宗地", "jsydsyq", "id", "zl"),
+//    DECISION_TYPE_6("6", "供地数据", "tdgy", "id", "jswz"),
+//    DECISION_TYPE_7("7", "报批数据", "ydbp", "id", "pfwh");
+
+    DECISION_TYPE_4("4", "所有权宗地", "zdjbxx", "zddm", "gmjjhyfldm"),
+    DECISION_TYPE_5("5", "使用权宗地", "zdjbxx", "zddm", "gmjjhyfldm");
+
 
     private final String name;
     private final String code;
+    private final String table;
+    private final String sourceId;
+    private final String detailsName;
 
-    DecisionType(String code, String name)
+    DecisionType(String code, String name, String table, String sourceId, String detailsName)
     {
         this.code = code;
         this.name = name;
+        this.table = table;
+        this.sourceId = sourceId;
+        this.detailsName = detailsName;
     }
 
     public String getCode()
@@ -31,4 +41,16 @@ public enum DecisionType {
     {
         return name;
     }
+
+    public String getTable() {
+        return table;
+    }
+
+    public String getSourceId() {
+        return sourceId;
+    }
+
+    public String getDetailsName() {
+        return detailsName;
+    }
 }

+ 5 - 0
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/mapper/DecisionTaskMapper.java

@@ -1,6 +1,7 @@
 package com.siwei.apply.mapper;
 
 import com.siwei.apply.domain.DecisionTask;
+import com.siwei.apply.domain.vo.DecisionIntersectsDetailsVo;
 import com.siwei.apply.domain.vo.DecisionTaskFilterVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -20,4 +21,8 @@ public interface DecisionTaskMapper {
     void update(DecisionTask decisionTask);
 
     void batchDelete(@Param("ids") List<String> ids);
+
+    void insertDecisionIntersection(DecisionIntersectsDetailsVo intersectsParam);
+
+
 }

+ 55 - 12
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/impl/DecisionTaskServiceImpl.java

@@ -1,16 +1,24 @@
 package com.siwei.apply.service.impl;
 
 import com.siwei.apply.domain.DecisionTask;
+import com.siwei.apply.domain.vo.DecisionIntersectsDetailsVo;
 import com.siwei.apply.domain.vo.DecisionTaskFilterVo;
 import com.siwei.apply.domain.vo.DecisionTaskVo;
+import com.siwei.apply.enums.DecisionType;
 import com.siwei.apply.mapper.DecisionTaskMapper;
 import com.siwei.apply.service.DecisionTaskService;
+import com.siwei.common.core.exception.ServiceException;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.*;
 
+@Slf4j
 @Service
 public class DecisionTaskServiceImpl implements DecisionTaskService {
     @Autowired
@@ -55,21 +63,56 @@ public class DecisionTaskServiceImpl implements DecisionTaskService {
     }
 
 
-    //todo 这里的分析逻辑比较复杂,后续再完善,目前先占位
-    //1.先把分析结果保存到数据库,状态为处理中
-    //2.分析完成后更新数据库状态为已完成,并保存分析结果的文件路径
-    //3.分析过程中可以通过查询接口查询分析状态和结果
-    //4.异步方法进行返回,并且可以返回数据id
+
     @Override
     public DecisionTask analyse(String name, String shape, Integer shapeType, String shapeFilePath, List<Integer> dataType) {
+        if (StringUtils.isBlank(name)) {
+            throw new ServiceException("任务名称不能为空");
+        }
+        // shape(EWKT) 为必填项
+        if (StringUtils.isBlank(shape)) {
+            throw new ServiceException("几何形状(EWKT)不能为空");
+        }
+
+        if (shapeType == null) {
+            throw new ServiceException("分析方式不能为空");
+        }
+        if (CollectionUtils.isEmpty(dataType)) {
+            throw new ServiceException("分析数据类型不能为空");
+        }
+
+        // shapeType 如果为2时候,shapeFilePath 为必填项
+        if (shapeType == 2 && StringUtils.isBlank(shapeFilePath)) {
+            throw new ServiceException("SHP文件路径不能为空");
+        }
 
-//        String name = Objects.nonNull(paramData.get("name")) ? String.valueOf(paramData.get("name")):"";
-//        String shape = Objects.nonNull(paramData.get("shape")) ? String.valueOf(paramData.get("shape")):"";//ewkt
-//        Integer shapeType = Objects.nonNull(paramData.get("shapeType")) ? (Integer) paramData.get("shapeType") : -1;
-//        String shapeFilePath =  Objects.nonNull(paramData.get("shapeFilePath")) ? String.valueOf(paramData.get("shapeFilePath")):"";
-//        List<Integer> dataType =  Objects.nonNull(paramData.get("dataType")) ? (List<Integer>) paramData.get("dataType"):new ArrayList<>();
-
-        return null;
+        DecisionTask decisionTask = new DecisionTask();
+        decisionTask.generateId();
+        decisionTask.setName(name);
+        decisionTask.setStatus("1"); // 任务状态 0 创建 1 执行中 2 成功 3 失败
+        decisionTask.setCreateTime(new Date());
+        decisionTask.setGeom(shape);
+        decisionTask.setShapeArea(BigDecimal.valueOf(0.0)); // 这里进行占位符
+        decisionTask.setFilePath(shapeFilePath);
+        decisionTaskMapper.add(decisionTask);
+        //return decisionTask;
+
+
+        Arrays.stream(DecisionType.values()).forEach(type -> {
+            if(dataType.contains(Integer.parseInt(type.getCode()))) {
+                List<String> tableIds = new ArrayList<>();
+                DecisionIntersectsDetailsVo param = new DecisionIntersectsDetailsVo();
+                param.setTaskId(decisionTask.getId());
+                param.setTableName(type.getTable());
+                param.setType(Integer.parseInt(type.getCode()));
+                param.setSourceId(type.getSourceId());
+                param.setDetailsName(type.getDetailsName());
+                param.setEwkt(shape);
+                param.setTableIds(tableIds);
+                decisionTaskMapper.insertDecisionIntersection(param);
+            }
+        });
+        return decisionTask;
     }
 
 

+ 43 - 4
siwei-modules/siwei-apply/src/main/resources/mapper/DecisionTaskMapper.xml

@@ -18,17 +18,17 @@
 
     <insert id="add" parameterType="com.siwei.apply.domain.DecisionTask">
         INSERT INTO t_decision_task (task_id, name, start_time, end_time, create_time, status, shape_area, geom, report_path, file_path)
-        VALUES (#{id}, #{name}, #{startTime}, #{endTime}, #{createTime}, #{status}, #{shapeArea}, #{geom}, #{reportPath}, #{filePath})
+        VALUES (#{id}, #{name}, #{startTime}, #{endTime}, #{createTime}, #{status}, #{shapeArea}, ST_GeomFromEWKT(#{geom}), #{reportPath}, #{filePath})
     </insert>
 
     <select id="get" resultMap="decisionTaskMap">
-        SELECT *
+        SELECT task_id, name, start_time, end_time, create_time, status, shape_area, ST_AsEWKT(geom) as geom, report_path, file_path
         FROM t_decision_task
         WHERE task_id = #{id}
     </select>
 
     <select id="getList" parameterType="com.siwei.apply.domain.vo.DecisionTaskFilterVo" resultMap="decisionTaskMap">
-        SELECT *
+        SELECT task_id, name, start_time, end_time, create_time, status, shape_area, ST_AsEWKT(geom) as geom, report_path, file_path
         FROM t_decision_task
         <where>
             <if test="name != null and name != ''">
@@ -75,7 +75,7 @@
             <if test="endTime != null">end_time = #{endTime},</if>
             <if test="status != null">status = #{status},</if>
             <if test="shapeArea != null">shape_area = #{shapeArea},</if>
-            <if test="geom != null">geom = #{geom},</if>
+            <if test="geom != null">geom = ST_GeomFromEWKT(#{geom}),</if>
             <if test="reportPath != null">report_path = #{reportPath},</if>
             <if test="filePath != null">file_path = #{filePath},</if>
         </set>
@@ -89,4 +89,43 @@
             #{id}
         </foreach>
     </delete>
+
+    <insert id="insertDecisionIntersection">
+        INSERT INTO t_decision_task_details (
+            id,
+            task_id,
+            type,
+            source_id,
+            details_name,
+            shape_area,
+            geom
+        )
+        SELECT
+            REPLACE(uuid_generate_v1()::text, '-', '') AS id
+            #{taskId},
+            #{type},
+            t.source_id,
+            t.details_name,
+            public.ST_Area(t.geom),
+            t.geom
+         FROM (
+            SELECT
+            inTbale.${sourceId} as source_id,
+            inTbale.${detailsName} as details_name,
+            public.ST_Intersection(inTbale.geom,public.ST_GeomFromEWKT(#{ewkt})) AS geom
+            FROM vector.${tableName} inTbale
+            WHERE public.ST_Intersects( inTbale.geom,public.ST_GeomFromEWKT(#{ewkt}))
+
+              <if test="tableIds != null and tableIds.size() > 0">
+                AND inTbale.${sourceId}::varchar IN
+                <foreach collection="tableIds" item="tableId" open="(" close=")" separator=",">
+                    #{tableId}
+                </foreach>
+            </if>
+        ) t
+    </insert>
+
+
+
+
 </mapper>