1
0
Quellcode durchsuchen

开发返回结果方法

chenendian vor 1 Monat
Ursprung
Commit
91248bb4e6

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

@@ -137,6 +137,12 @@ public class DecisionTaskController extends BaseController {
                     new DecisionDetailsVo(),
                     new DecisionDetailsVo()
             );
+
+
+
+            decisionTaskService.detailsList(taskId);
+
+
             result.put("detailsList", detailsList);
             return R.ok(result);
         } catch (Exception e) {

+ 36 - 0
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/domain/vo/DecisionTaskParamVo.java

@@ -0,0 +1,36 @@
+package com.siwei.apply.domain.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 查询决策任务详情列表的入参
+ *
+ * taskId      : 任务 ID,用于过滤 t_decision_task_details
+ * type        : 数据类型(与 DecisionType.code 对应)
+ * tableName   : 要 JOIN 的业务表名(如 zdjbxx),不含 schema,schema 固定为 vector
+ * joinId      : t_decision_task_details.source_id 与业务表关联的字段名(如 zddm)
+ * extraFields : 需要从业务表动态查询的字段名列表(如 ["zddm", "qlrsjsyrlxm"]),来自 DecisionType.extraFields
+ */
+@Data
+public class DecisionTaskParamVo {
+
+    /** 关联任务ID */
+    private String taskId;
+
+    /** 数据类型(对应 DecisionType.code) */
+    private Integer type;
+
+    /** 业务表名,如 zdjbxx(不含 schema,schema 固定为 vector) */
+    private String tableName;
+
+    /** 业务表与 source_id 关联的字段名,如 zddm */
+    private String joinId;
+
+    /**
+     * 需要从业务表动态查询的字段名列表,来自 DecisionType.extraFields
+     * XML 中通过 foreach 动态拼接为 b.field1, b.field2, ...
+     */
+    private List<String> extraFields;
+}

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

@@ -1,5 +1,8 @@
 package com.siwei.apply.enums;
 
+import java.util.Arrays;
+import java.util.List;
+
 /**
  * 项目类型
  */
@@ -13,8 +16,12 @@ public enum DecisionType {
 //    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");
+    /**
+     * extraFields:查询业务表时需要额外返回的字段名列表(动态拼接到 SELECT 中)
+     * 字段名需与业务表列名完全一致
+     */
+    DECISION_TYPE_4("4", "所有权宗地", "zdjbxx", "zddm", "gmjjhyfldm", "zddm", "qlrsjsyrlxm"),
+    DECISION_TYPE_5("5", "使用权宗地", "zdjbxx", "zddm", "gmjjhyfldm", "zddm", "qlrsjsyrlxm");
 
 
     private final String name;
@@ -22,23 +29,23 @@ public enum DecisionType {
     private final String table;
     private final String sourceId;
     private final String detailsName;
+    /** 查询业务表时需要动态返回的字段列表 */
+    private final List<String> extraFields;
 
-    DecisionType(String code, String name, String table, String sourceId, String detailsName)
-    {
+    DecisionType(String code, String name, String table, String sourceId, String detailsName, String... extraFields) {
         this.code = code;
         this.name = name;
         this.table = table;
         this.sourceId = sourceId;
         this.detailsName = detailsName;
+        this.extraFields = Arrays.asList(extraFields);
     }
 
-    public String getCode()
-    {
+    public String getCode() {
         return code;
     }
 
-    public String getName()
-    {
+    public String getName() {
         return name;
     }
 
@@ -53,4 +60,28 @@ public enum DecisionType {
     public String getDetailsName() {
         return detailsName;
     }
+
+    public List<String> getExtraFields() {
+        return extraFields;
+    }
+
+    /**
+     * 通过 code 获取枚举实例
+     */
+    public static DecisionType getByCode(String code) {
+        for (DecisionType type : DecisionType.values()) {
+            if (type.getCode().equals(code)) {
+                return type;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 通过 code 获取对应的表名
+     */
+    public static String getTableNameByCode(String code) {
+        DecisionType type = getByCode(code);
+        return type != null ? type.getTable() : "";
+    }
 }

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

@@ -3,10 +3,12 @@ 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 com.siwei.apply.domain.vo.DecisionTaskParamVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 @Mapper
 public interface DecisionTaskMapper {
@@ -24,5 +26,7 @@ public interface DecisionTaskMapper {
 
     void insertDecisionIntersection(DecisionIntersectsDetailsVo intersectsParam);
 
+    List<Map<String,Object>> getDetailsList(DecisionTaskParamVo paramVo);
+
 
 }

+ 3 - 0
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/DecisionTaskService.java

@@ -1,6 +1,7 @@
 package com.siwei.apply.service;
 
 import com.siwei.apply.domain.DecisionTask;
+import com.siwei.apply.domain.vo.DecisionDetailsVo;
 import com.siwei.apply.domain.vo.DecisionTaskFilterVo;
 import com.siwei.apply.domain.vo.DecisionTaskVo;
 
@@ -20,5 +21,7 @@ public interface DecisionTaskService {
 
     DecisionTask analyse(String name, String shape, Integer shapeType, String shapeFilePath, List<Integer> dataType);
 
+    List<DecisionDetailsVo>  detailsList(String taskId);
+
 
     }

+ 62 - 4
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/impl/DecisionTaskServiceImpl.java

@@ -1,9 +1,7 @@
 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.domain.vo.*;
 import com.siwei.apply.enums.DecisionType;
 import com.siwei.apply.mapper.DecisionTaskMapper;
 import com.siwei.apply.service.DecisionTaskService;
@@ -87,6 +85,10 @@ public class DecisionTaskServiceImpl implements DecisionTaskService {
             throw new ServiceException("SHP文件路径不能为空");
         }
 
+        if (!shape.contains("SRID=")) { //这里兼容前端没有加SRID的情况,默认4326
+            shape = "SRID=" + "4326" + ";" + shape;
+        }
+
         DecisionTask decisionTask = new DecisionTask();
         decisionTask.generateId();
         decisionTask.setName(name);
@@ -99,6 +101,7 @@ public class DecisionTaskServiceImpl implements DecisionTaskService {
         //return decisionTask;
 
 
+        String finalShape = shape;
         Arrays.stream(DecisionType.values()).forEach(type -> {
             if(dataType.contains(Integer.parseInt(type.getCode()))) {
                 List<String> tableIds = new ArrayList<>();
@@ -108,7 +111,7 @@ public class DecisionTaskServiceImpl implements DecisionTaskService {
                 param.setType(Integer.parseInt(type.getCode()));
                 param.setSourceId(type.getSourceId());
                 param.setDetailsName(type.getDetailsName());
-                param.setEwkt(shape);
+                param.setEwkt(finalShape);
                 param.setTableIds(tableIds);
                 decisionTaskMapper.insertDecisionIntersection(param);
             }
@@ -120,4 +123,59 @@ public class DecisionTaskServiceImpl implements DecisionTaskService {
 
 
 
+    /**
+     *
+     * 根据当前任务id,返回此次任务的所有结果,并且需要根据不同类型动态查询
+     *
+     *
+     *
+     * @param taskId
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public List<DecisionDetailsVo> detailsList(String taskId) {
+        if (StringUtils.isBlank(taskId)) {
+            throw new ServiceException("当前任务id不能为空");
+        }
+        DecisionTask task = decisionTaskMapper.get(taskId);
+        if (task == null) {
+            throw new ServiceException("任务不存在");
+        }
+        if (task.getStatus().equals("0") || task.getStatus().equals("1")) {
+            throw new ServiceException("当前任务未执行完成");
+        }
+
+        List<DecisionDetailsVo> resultList = new ArrayList<>();
+
+        // 遍历所有 DecisionType,逐类型查询并组装结果
+        for (DecisionType decisionType : DecisionType.values()) {
+            DecisionTaskParamVo param = new DecisionTaskParamVo();
+            param.setTaskId(taskId);
+            param.setType(Integer.parseInt(decisionType.getCode()));
+            // 业务表名(不含 schema,xml 中固定拼接 vector.)
+            param.setTableName(decisionType.getTable());
+            // 业务表与 source_id 关联的字段名(如 zddm)
+            param.setJoinId(decisionType.getSourceId());
+            // 业务表动态查询字段列表(来自枚举定义,如 ["zddm", "qlrsjsyrlxm"])
+            param.setExtraFields(decisionType.getExtraFields());
+
+            List<Map<String, Object>> dataList = decisionTaskMapper.getDetailsList(param);
+
+            if (CollectionUtils.isNotEmpty(dataList)) {
+                DecisionDetailsVo vo = new DecisionDetailsVo();
+                vo.setName(decisionType.getName());
+                vo.setType(Integer.parseInt(decisionType.getCode()));
+                vo.setDataList(dataList);
+                resultList.add(vo);
+            }
+        }
+
+        return resultList;
+    }
+
+
+
+
+
 }

+ 29 - 1
siwei-modules/siwei-apply/src/main/resources/mapper/DecisionTaskMapper.xml

@@ -106,7 +106,7 @@
             #{type},
             t.source_id,
             t.details_name,
-            public.ST_Area(t.geom),
+            public.ST_Area(t.geom::public.geography),
             t.geom
          FROM (
             SELECT
@@ -127,5 +127,33 @@
 
 
 
+    <!--
+        根据 taskId + type 查询决策任务详情,JOIN 对应业务表补充扩展字段。
+        t_decision_task_details.source_id  对应业务表的 ${joinId} 字段(如 zdjbxx.zddm)。
+        固定查询字段:
+          - t_decision_task_details : id, type, details_name, shape_area
+        动态查询字段(来自 extraFields,对应业务表列):
+          - 由 DecisionType.extraFields 决定,如 zddm、qlrsjsyrlxm
+    -->
+    <select id="getDetailsList" parameterType="com.siwei.apply.domain.vo.DecisionTaskParamVo" resultType="map">
+        SELECT
+            d.id           AS id,
+            d.type         AS type,
+            d.details_name AS detailsName,
+            d.shape_area   AS shapeArea
+            <if test="extraFields != null and extraFields.size() > 0">
+                <foreach collection="extraFields" item="field" separator="">
+                    , b.${field} AS ${field}
+                </foreach>
+            </if>
+        FROM public.t_decision_task_details d
+        LEFT JOIN vector.${tableName} b
+            ON b.${joinId}::varchar = d.source_id
+        WHERE d.task_id = #{taskId}
+          AND d.type = #{type}
+    </select>
+
+
+
 
 </mapper>