浏览代码

自定义统计规则模型相关接口提交

wanger 7 月之前
父节点
当前提交
7204730e94
共有 13 个文件被更改,包括 721 次插入10 次删除
  1. 123 2
      onemap-modules/onemap-spotoverlap/src/main/java/com/onemap/spotoverlap/controller/yzt/YztController.java
  2. 34 0
      onemap-modules/onemap-spotoverlap/src/main/java/com/onemap/spotoverlap/domain/yzt/AnalyseDetail.java
  3. 49 0
      onemap-modules/onemap-spotoverlap/src/main/java/com/onemap/spotoverlap/domain/yzt/AnalyseDetailQx.java
  4. 9 0
      onemap-modules/onemap-spotoverlap/src/main/java/com/onemap/spotoverlap/domain/yzt/AnalyseResult.java
  5. 11 0
      onemap-modules/onemap-spotoverlap/src/main/java/com/onemap/spotoverlap/domain/yzt/tModelDetail.java
  6. 52 0
      onemap-modules/onemap-spotoverlap/src/main/java/com/onemap/spotoverlap/domain/yzt/tReport.java
  7. 52 0
      onemap-modules/onemap-spotoverlap/src/main/java/com/onemap/spotoverlap/domain/yzt/tReportSub.java
  8. 15 0
      onemap-modules/onemap-spotoverlap/src/main/java/com/onemap/spotoverlap/mapper/yzt/TReportMapper.java
  9. 14 0
      onemap-modules/onemap-spotoverlap/src/main/java/com/onemap/spotoverlap/mapper/yzt/TReportSubMapper.java
  10. 22 0
      onemap-modules/onemap-spotoverlap/src/main/java/com/onemap/spotoverlap/mapper/yzt/YztMapper.java
  11. 257 7
      onemap-modules/onemap-spotoverlap/src/main/java/com/onemap/spotoverlap/service/impl/yzt/YztServiceImpl.java
  12. 18 1
      onemap-modules/onemap-spotoverlap/src/main/java/com/onemap/spotoverlap/service/yzt/IYztService.java
  13. 65 0
      onemap-modules/onemap-spotoverlap/src/main/resources/mapper/postgresql/yzt/YztMapper.xml

+ 123 - 2
onemap-modules/onemap-spotoverlap/src/main/java/com/onemap/spotoverlap/controller/yzt/YztController.java

@@ -3,6 +3,7 @@ package com.onemap.spotoverlap.controller.yzt;
 import com.onemap.spotoverlap.domain.yzt.tModel;
 import com.onemap.spotoverlap.domain.yzt.tModelDetail;
 import com.onemap.spotoverlap.domain.yzt.tModelSub;
+import com.onemap.spotoverlap.domain.yzt.tReport;
 import com.onemap.spotoverlap.service.yzt.IYztService;
 import com.onemap.common.core.web.controller.BaseController;
 import com.onemap.common.core.web.domain.RequestResult;
@@ -338,9 +339,9 @@ public class YztController extends BaseController {
      * @return
      */
     @RequestMapping("/getTableRecord")
-    public RequestResult getTableRecord(String tablename, Integer page, Integer limit, String swid, String hfxpd) {
+    public RequestResult getTableRecord(String tablename, Integer page, Integer limit, String swid, String hfxpd, String hfxsm) {
         try {
-            return yztService.getTableRecord(tablename, page, limit, swid, hfxpd);
+            return yztService.getTableRecord(tablename, page, limit, swid, hfxpd, hfxsm);
         } catch (Exception e) {
             e.printStackTrace();
             return RequestResult.error("失败", null);
@@ -643,4 +644,124 @@ public class YztController extends BaseController {
             return RequestResult.error("失败", null);
         }
     }
+
+    /**
+     * 查询单个图斑的分析结果
+     *
+     * @return
+     */
+    @RequestMapping("/getAnalyseResultBySwid")
+    public RequestResult getAnalyseResultBySwid(String tablename, String swid) {
+        try {
+            return yztService.getAnalyseResultBySwid(tablename, swid);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return RequestResult.error("失败", null);
+        }
+    }
+
+    /**
+     * 查询批次监测图斑数据统计
+     *
+     * @return
+     */
+    @RequestMapping("/getJctbtj")
+    public RequestResult getJctbtj(String tablename, String xzqdm) {
+        try {
+            return yztService.getJctbtj(tablename, xzqdm);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return RequestResult.error("失败", null);
+        }
+    }
+
+    /**
+     * 查询统计报表相关指标项
+     *
+     * @return
+     */
+    @RequestMapping("/getReportSub")
+    public RequestResult getReportSub(String type, String name) {
+        try {
+            return yztService.getReportSub(type, name);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return RequestResult.error("失败", null);
+        }
+    }
+
+    /**
+     * 新增或修改统计报表模型
+     *
+     * @return
+     */
+    @RequestMapping("/updateReport")
+    public RequestResult updateReport(tReport report) {
+        try {
+            return yztService.updateReport(report);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return RequestResult.error("失败", null);
+        }
+    }
+
+    /**
+     * 查询统计报表模型列表
+     *
+     * @return
+     */
+    @RequestMapping("/getReportList")
+    public RequestResult getReportList(String name) {
+        try {
+            return yztService.getReportList(name);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return RequestResult.error("失败", null);
+        }
+    }
+
+    /**
+     * 删除统计报表模型
+     *
+     * @return
+     */
+    @RequestMapping("/deleteReport")
+    public RequestResult deleteReport(String id) {
+        try {
+            return yztService.deleteReport(id);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return RequestResult.error("失败", null);
+        }
+    }
+
+    /**
+     * 根据数据表生成数据报表
+     *
+     * @return
+     */
+    @RequestMapping("/makeReport")
+    public RequestResult makeReport(String tablename, String reportid) {
+        try {
+            return yztService.makeReport(tablename, reportid);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return RequestResult.error("失败", null);
+        }
+    }
+
+    /**
+     * 查询分析模型中涉及的管控数据集合
+     *
+     * @return
+     */
+    @RequestMapping("/getLayerNameByModelId")
+    public RequestResult getLayerNameByModelId(String modelid) {
+        try {
+            return yztService.getLayerNameByModelId(modelid);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return RequestResult.error("失败", null);
+        }
+    }
 }

+ 34 - 0
onemap-modules/onemap-spotoverlap/src/main/java/com/onemap/spotoverlap/domain/yzt/AnalyseDetail.java

@@ -0,0 +1,34 @@
+package com.onemap.spotoverlap.domain.yzt;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class AnalyseDetail {
+    private String fxjl;
+    private String fxqx ;
+    private List<AnalyseDetailQx> detail = new ArrayList<>();
+
+    public String getFxjl() {
+        return fxjl;
+    }
+
+    public void setFxjl(String fxjl) {
+        this.fxjl = fxjl;
+    }
+
+    public String getFxqx() {
+        return fxqx;
+    }
+
+    public void setFxqx(String fxqx) {
+        this.fxqx = fxqx;
+    }
+
+    public List<AnalyseDetailQx> getDetail() {
+        return detail;
+    }
+
+    public void setDetail(List<AnalyseDetailQx> detail) {
+        this.detail = detail;
+    }
+}

+ 49 - 0
onemap-modules/onemap-spotoverlap/src/main/java/com/onemap/spotoverlap/domain/yzt/AnalyseDetailQx.java

@@ -0,0 +1,49 @@
+package com.onemap.spotoverlap.domain.yzt;
+
+public class AnalyseDetailQx {
+    private String layername;
+    private String overlaparea;
+    private String overlapzb;
+    private String fxjg;
+    private String fxyj;
+
+    public String getLayername() {
+        return layername;
+    }
+
+    public void setLayername(String layername) {
+        this.layername = layername;
+    }
+
+    public String getOverlaparea() {
+        return overlaparea;
+    }
+
+    public void setOverlaparea(String overlaparea) {
+        this.overlaparea = overlaparea;
+    }
+
+    public String getOverlapzb() {
+        return overlapzb;
+    }
+
+    public void setOverlapzb(String overlapzb) {
+        this.overlapzb = overlapzb;
+    }
+
+    public String getFxjg() {
+        return fxjg;
+    }
+
+    public void setFxjg(String fxjg) {
+        this.fxjg = fxjg;
+    }
+
+    public String getFxyj() {
+        return fxyj;
+    }
+
+    public void setFxyj(String fxyj) {
+        this.fxyj = fxyj;
+    }
+}

+ 9 - 0
onemap-modules/onemap-spotoverlap/src/main/java/com/onemap/spotoverlap/domain/yzt/AnalyseResult.java

@@ -4,6 +4,15 @@ public class AnalyseResult {
     private String type;
     private Integer count;
     private Double area;
+    private String xzqmc;
+
+    public String getXzqmc() {
+        return xzqmc;
+    }
+
+    public void setXzqmc(String xzqmc) {
+        this.xzqmc = xzqmc;
+    }
 
     public String getType() {
         return type;

+ 11 - 0
onemap-modules/onemap-spotoverlap/src/main/java/com/onemap/spotoverlap/domain/yzt/tModelDetail.java

@@ -30,6 +30,17 @@ public class tModelDetail {
     private String decimalPlaces;
     @TableField(exist = false)
     private String selfwhere;
+    @TableField(exist = false)
+    //sub分类表的条件
+    private String subwhere;
+
+    public String getSubwhere() {
+        return subwhere;
+    }
+
+    public void setSubwhere(String subwhere) {
+        this.subwhere = subwhere;
+    }
 
     public String getSelfwhere() {
         return selfwhere;

+ 52 - 0
onemap-modules/onemap-spotoverlap/src/main/java/com/onemap/spotoverlap/domain/yzt/tReport.java

@@ -0,0 +1,52 @@
+package com.onemap.spotoverlap.domain.yzt;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+
+@TableName("t_report")
+public class tReport {
+    private String id;
+    private String name;
+    private String groupsub;
+    private String calctotal;
+    private String rowsub;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getGroupsub() {
+        return groupsub;
+    }
+
+    public void setGroupsub(String groupsub) {
+        this.groupsub = groupsub;
+    }
+
+    public String getCalctotal() {
+        return calctotal;
+    }
+
+    public void setCalctotal(String calctotal) {
+        this.calctotal = calctotal;
+    }
+
+    public String getRowsub() {
+        return rowsub;
+    }
+
+    public void setRowsub(String rowsub) {
+        this.rowsub = rowsub;
+    }
+}

+ 52 - 0
onemap-modules/onemap-spotoverlap/src/main/java/com/onemap/spotoverlap/domain/yzt/tReportSub.java

@@ -0,0 +1,52 @@
+package com.onemap.spotoverlap.domain.yzt;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+
+@TableName("t_report_sub")
+public class tReportSub {
+    private String id;
+    private String name;
+    private String type;
+    private String isvalid;
+    private String sqlwhere;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getIsvalid() {
+        return isvalid;
+    }
+
+    public void setIsvalid(String isvalid) {
+        this.isvalid = isvalid;
+    }
+
+    public String getSqlwhere() {
+        return sqlwhere;
+    }
+
+    public void setSqlwhere(String sqlwhere) {
+        this.sqlwhere = sqlwhere;
+    }
+}

+ 15 - 0
onemap-modules/onemap-spotoverlap/src/main/java/com/onemap/spotoverlap/mapper/yzt/TReportMapper.java

@@ -0,0 +1,15 @@
+package com.onemap.spotoverlap.mapper.yzt;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.onemap.spotoverlap.domain.yzt.tAnalyseType;
+import com.onemap.spotoverlap.domain.yzt.tReport;
+
+/**
+ * 数据层
+ *
+ * @author onemap
+ */
+public interface TReportMapper extends BaseMapper<tReport> {
+
+
+}

+ 14 - 0
onemap-modules/onemap-spotoverlap/src/main/java/com/onemap/spotoverlap/mapper/yzt/TReportSubMapper.java

@@ -0,0 +1,14 @@
+package com.onemap.spotoverlap.mapper.yzt;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.onemap.spotoverlap.domain.yzt.tReportSub;
+
+/**
+ * 数据层
+ *
+ * @author onemap
+ */
+public interface TReportSubMapper extends BaseMapper<tReportSub> {
+
+
+}

+ 22 - 0
onemap-modules/onemap-spotoverlap/src/main/java/com/onemap/spotoverlap/mapper/yzt/YztMapper.java

@@ -92,4 +92,26 @@ public interface YztMapper {
     void updateHfxpd(String tablename);
 
     List<analyseModel> getAnalyseModel2(@Param("tablename") String tablename, @Param("modelid") String modelid);
+
+    String getSubwhereBySubid(String subid);
+
+    AnalyseDetail getAnalyseDetail(@Param("tablename") String tablename, @Param("swid") String swid);
+
+    List<AnalyseDetailQx> getAnalyseDetailQx(@Param("tablename") String tablename, @Param("swid") String swid);
+
+    List<AnalyseResult> getJctbtjXzq(
+            @Param("tablename") String tablename,
+            @Param("xzqdm") String xzqdm,
+            @Param("decimalPlaces") String decimalPlaces,
+            @Param("subxzq") String subxzq);
+
+    List<AnalyseResult> getJctbtjBhlx(
+            @Param("tablename") String tablename,
+            @Param("xzqdm") String xzqdm,
+            @Param("decimalPlaces") String decimalPlaces,
+            @Param("subxzq") String subxzq);
+
+    List<Map> getTableReport(@Param("tablename") String tablename, @Param("sqlwhere") String sqlwhere, @Param("groupwhere") String groupwhere);
+
+    List<String> getLayerNameByModelId(String modelid);
 }

+ 257 - 7
onemap-modules/onemap-spotoverlap/src/main/java/com/onemap/spotoverlap/service/impl/yzt/YztServiceImpl.java

@@ -11,7 +11,7 @@ import com.onemap.common.core.web.domain.RequestResult;
 import com.onemap.common.security.utils.SecurityUtils;
 import com.onemap.spotoverlap.utils.*;
 import org.apache.ibatis.annotations.Param;
-import org.json.simple.JSONArray;
+import org.bouncycastle.cert.ocsp.Req;
 import org.json.simple.JSONObject;
 import org.json.simple.parser.JSONParser;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -29,10 +29,8 @@ import java.io.*;
 import java.nio.file.*;
 import java.nio.file.attribute.BasicFileAttributes;
 import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.ResultSetMetaData;
-import java.sql.Statement;
 import java.util.*;
+import java.util.function.DoubleConsumer;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
@@ -63,9 +61,15 @@ public class YztServiceImpl implements IYztService {
     private TModelMapper tModelMapper;
     @Autowired
     private YztMapper yztMapper;
+    @Autowired
+    private TReportSubMapper tReportSubMapper;
+    @Autowired
+    private TReportMapper tReportMapper;
 
     @Value("${decimalPlaces}")
     private String decimalPlaces;
+    @Value("${xzqdm}")
+    private String defaultxzqdm;
     @Value("${dbschema}")
     private String dbschema;
     @Value("${file.temp}")
@@ -94,6 +98,8 @@ public class YztServiceImpl implements IYztService {
     private String swtype;
     @Value("${exportFields}")
     private String exportFields;
+    @Value("${notQueryFields}")
+    private String notQueryFields;
     @Value("${mapExport.fixed}")
     private String mapExportFixed;
     @Value("${mapExport.size}")
@@ -436,6 +442,15 @@ public class YztServiceImpl implements IYztService {
     @Override
     public RequestResult modelsubupdate(tModelSub modelsub) {
         try {
+            String where = modelsub.getQuerywhere();
+            String[] wherelist = where.split(",");
+            String newWhere = "eee.swtype in (";
+            for (String cur : wherelist) {
+                newWhere += "'" + cur + "',";
+            }
+            newWhere = newWhere.substring(0, newWhere.length() - 1);
+            newWhere += ")";
+            modelsub.setQuerywhere(newWhere);
             if (StringUtils.isNotEmpty(modelsub.getId())) {
                 QueryWrapper<tModelSub> wrapper = new QueryWrapper();
                 wrapper.eq("id", modelsub.getId());
@@ -459,6 +474,9 @@ public class YztServiceImpl implements IYztService {
             wrapper.eq("modelid", modelid);
             wrapper.orderByAsc("cjsj");
             List<tModelSub> res = tModelSubMapper.selectList(wrapper);
+            for (tModelSub cur : res) {
+                cur.setQuerywhere(calcSubWhere(cur.getQuerywhere()));
+            }
             return RequestResult.success("查询成功!", res);
         } catch (Exception e) {
             e.printStackTrace();
@@ -466,6 +484,10 @@ public class YztServiceImpl implements IYztService {
         return RequestResult.error("失败!", null);
     }
 
+    public String calcSubWhere(String querywhere) {
+        return querywhere.replace("eee.swtype in (", "").replaceAll("\\)", "").replaceAll("','", ",").replaceAll("'", "");
+    }
+
     @Override
     public RequestResult modelsubdetails(String subid, String type) {
         try {
@@ -734,8 +756,9 @@ public class YztServiceImpl implements IYztService {
     }
 
     @Override
-    public RequestResult getTableRecord(String tablename, Integer page, Integer limit, String swid, String hfxpd) {
+    public RequestResult getTableRecord(String tablename, Integer page, Integer limit, String swid, String hfxpd, String hfxsm) {
         try {
+            List<String> notQueryFieldsList = Arrays.asList(notQueryFields.split(","));
             String wheresql = "";
             if (StringUtils.isNotEmpty(swid)) {
                 wheresql += " and swid like '%" + swid + "%'";
@@ -743,15 +766,21 @@ public class YztServiceImpl implements IYztService {
             if (StringUtils.isNotEmpty(hfxpd)) {
                 wheresql += " and 合法性判断 = '" + hfxpd + "'";
             }
+            if (StringUtils.isNotEmpty(hfxsm)) {
+                wheresql += " and 合法性说明 like '%" + hfxsm + "%'";
+            }
             String querySQL = "select * from  " + tablename + " where 1 = 1 " + wheresql;
             querySQL += "order by swid limit " + limit + " OFFSET " + ((page - 1) * limit);
             List<Map<String, Object>> results = yztMapper.executeSQL(querySQL);
             List<Map> res = new ArrayList<Map>();
             List<String> fields = new ArrayList<>();
+            if (results == null || results.size() == 0) {
+                return RequestResult.success("查询成功!", new HashMap<>());
+            }
             Map<String, Object> firstMap = results.get(0);
             for (Map.Entry<String, Object> entry : firstMap.entrySet()) {
                 String key = entry.getKey();
-                if (!"geom".equals(key)) {
+                if (!notQueryFieldsList.contains(key)) {
                     fields.add(key);
                 }
             }
@@ -759,7 +788,7 @@ public class YztServiceImpl implements IYztService {
                 Map cur = new HashMap();
                 for (Map.Entry<String, Object> entry : thisdata.entrySet()) {
                     String key = entry.getKey();
-                    if (!"geom".equals(key)) {
+                    if (!notQueryFieldsList.contains(key)) {
                         cur.put(key, entry.getValue());
                     }
                 }
@@ -901,6 +930,24 @@ public class YztServiceImpl implements IYztService {
         return RequestResult.error("失败!", null);
     }
 
+    @Override
+    public RequestResult getReportSub(String type, String name) {
+        try {
+            QueryWrapper<tReportSub> wrapper = new QueryWrapper();
+            wrapper.eq("isvalid", "1");
+            if (StringUtils.isNotEmpty(type)) {
+                wrapper.eq("type", type);
+            }
+            if (StringUtils.isNotEmpty(name)) {
+                wrapper.like("name", name);
+            }
+            return RequestResult.success("查询成功!", tReportSubMapper.selectList(wrapper));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return RequestResult.error("失败!", null);
+    }
+
     @Override
     public RequestResult overlapAnalysis(String modelid, String tablename) {
         try {
@@ -935,10 +982,12 @@ public class YztServiceImpl implements IYztService {
                     continue;
                 }
                 String selfwhere = yztMapper.getSelfwhereBySituationid(curDetail.getSituationid());
+                String subwhere = yztMapper.getSubwhereBySubid(curDetail.getSubid());
                 //TODO 执行管控数据的分析条件
                 curDetail.setDecimalPlaces(decimalPlaces);
                 curDetail.setTablename(tablename);
                 curDetail.setSelfwhere(selfwhere);
+                curDetail.setSelfwhere(subwhere);
                 //TODO wanger 执行分析sql语句
                 yztMapper.executeAnalyseByEntity(curDetail);
                 //TODO wanger 插入分析结果   挨个图斑   挨个分析情形  挨个结果
@@ -1067,6 +1116,148 @@ public class YztServiceImpl implements IYztService {
         return RequestResult.error("查询失败!", null);
     }
 
+    @Override
+    public RequestResult getAnalyseResultBySwid(String tablename, String swid) {
+        try {
+            QueryWrapper<tAnalyseVector> wrapper = new QueryWrapper();
+            wrapper.eq("tablename", tablename);
+            tAnalyseVector analyseVector = tAnalyseVectorMapper.selectOne(wrapper);
+            if (!"2".equals(analyseVector.getFxzt())) {
+                return RequestResult.error("当前数据未分析或分析状态异常!", null);
+            }
+            AnalyseDetail analyseResult = yztMapper.getAnalyseDetail(tablename, swid);
+            List<AnalyseDetailQx> details = yztMapper.getAnalyseDetailQx(tablename, swid);
+            analyseResult.setDetail(details);
+            return RequestResult.success("查询成功!", analyseResult);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return RequestResult.error("查询失败!", null);
+    }
+
+    @Override
+    public RequestResult updateReport(tReport report) {
+        try {
+            if (StringUtils.isNotEmpty(report.getId())) {
+                QueryWrapper<tReport> wrapper = new QueryWrapper();
+                wrapper.eq("id", report.getId());
+                tReportMapper.update(report, wrapper);
+            } else {
+                report.setId(StringUtils.getUUID());
+                tReportMapper.insert(report);
+            }
+            return RequestResult.success("操作成功!", 1);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return RequestResult.error("操作失败!", null);
+    }
+
+    @Override
+    public RequestResult getReportList(String name) {
+        try {
+            QueryWrapper<tReport> wrapper = new QueryWrapper();
+            if (StringUtils.isNotEmpty(name)) {
+                wrapper.like("name", name);
+            }
+            return RequestResult.success("查询成功!", tReportMapper.selectList(wrapper));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return RequestResult.error("查询失败!", null);
+    }
+
+    @Override
+    public RequestResult makeReport(String tablename, String reportid) {
+        try {
+            if (StringUtils.isEmpty(tablename) || StringUtils.isEmpty(reportid)) {
+                return RequestResult.error("参数未传递!");
+            }
+            QueryWrapper<tReport> wrapper = new QueryWrapper();
+            wrapper.like("id", reportid);
+            tReport report = tReportMapper.selectOne(wrapper);
+            if (report == null) {
+                return RequestResult.error("获取模型为空!");
+            }
+            //返回所有字段  有顺序
+            List<String> fields = new ArrayList<>();
+            //查询sql
+            String sqlwhere = "";
+            //排序和统计sql
+            String groupwhere = "";
+            String[] groupsub = report.getGroupsub().split(",");
+            for (String sub : groupsub) {
+                if (StringUtils.isNotEmpty(sqlwhere)) {
+                    sqlwhere += ",";
+                    groupwhere += ",";
+                }
+                QueryWrapper<tReportSub> subwrapper = new QueryWrapper();
+                subwrapper.eq("id", sub);
+                tReportSub reportSub = tReportSubMapper.selectOne(subwrapper);
+                fields.add(reportSub.getName());
+                sqlwhere += reportSub.getSqlwhere() + " as \"" + reportSub.getName() + "\"";
+                groupwhere += reportSub.getSqlwhere() + "";
+            }
+            String[] rowsub = report.getRowsub().split(",");
+            for (String sub : rowsub) {
+                if (StringUtils.isNotEmpty(sqlwhere)) {
+                    sqlwhere += ",";
+                    groupwhere += ",";
+                }
+                QueryWrapper<tReportSub> subwrapper = new QueryWrapper();
+                subwrapper.eq("id", sub);
+                tReportSub reportSub = tReportSubMapper.selectOne(subwrapper);
+                fields.add(reportSub.getName());
+                sqlwhere += reportSub.getSqlwhere() + " as \"" + reportSub.getName() + "\"";
+                groupwhere += reportSub.getSqlwhere() + "";
+            }
+            String[] calcsub = report.getCalctotal().split(",");
+            for (String sub : calcsub) {
+                if (StringUtils.isNotEmpty(sqlwhere)) {
+                    sqlwhere += ",";
+                }
+                QueryWrapper<tReportSub> subwrapper = new QueryWrapper();
+                subwrapper.eq("id", sub);
+                tReportSub reportSub = tReportSubMapper.selectOne(subwrapper);
+                fields.add(reportSub.getName());
+                sqlwhere += reportSub.getSqlwhere() + " as \"" + reportSub.getName() + "\"";
+            }
+            List<Map> res = yztMapper.getTableReport(tablename, sqlwhere, groupwhere);
+            Map<String, Object> data = new HashMap<>();
+            data.put("data", res);
+            data.put("fields", fields);
+            return RequestResult.success("查询成功!", data);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return RequestResult.error("查询失败!", null);
+    }
+
+    @Override
+    public RequestResult deleteReport(String id) {
+        try {
+            QueryWrapper<tReport> wrapper = new QueryWrapper();
+            if (StringUtils.isNotEmpty(id)) {
+                wrapper.eq("id", id);
+            }
+            return RequestResult.success("删除成功!", tReportMapper.delete(wrapper));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return RequestResult.error("删除失败!", null);
+    }
+
+    @Override
+    public RequestResult getLayerNameByModelId(String modelid) {
+        try {
+            List<String> res = yztMapper.getLayerNameByModelId(modelid);
+            return RequestResult.success("查询成功!", res);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return RequestResult.error("查询失败!", null);
+    }
+
     @Override
     public RequestResult basemap(MultipartFile file, String name, String invalid, String serviceuri, String id, String image, String indexnum) {
         String imageuri = "";
@@ -1132,6 +1323,48 @@ public class YztServiceImpl implements IYztService {
         return RequestResult.error("查询失败!", 0);
     }
 
+    @Override
+    public RequestResult getJctbtj(String tablename, String xzqdm) {
+        try {
+            String subxzq = "3";
+            if (StringUtils.isEmpty(xzqdm)) {
+                xzqdm = defaultxzqdm;
+            }
+            if (xzqdm.length() > 9) {
+                return RequestResult.error("当前行政区不支持下钻查询了!", null);
+            }
+            switch (xzqdm.length()) {
+                case 2:
+                    subxzq = "5";
+                    break;
+                case 4:
+                    subxzq = "7";
+                    break;
+                case 6:
+                    subxzq = "10";
+                    break;
+                case 9:
+                    subxzq = "13";
+                    break;
+                case 12:
+                    subxzq = "16";
+                    break;
+                default:
+                    subxzq = "5";
+                    break;
+            }
+            Map<String, Object> res = new HashMap<>();
+            List<AnalyseResult> xzqdetail = yztMapper.getJctbtjXzq(tablename, xzqdm, decimalPlaces, subxzq);
+            List<AnalyseResult> typedetail = yztMapper.getJctbtjBhlx(tablename, xzqdm, decimalPlaces, subxzq);
+            res.put("xzq", getTotalTj(xzqdetail));
+            res.put("bhlx", getTotalTj(typedetail));
+            return RequestResult.success("查询成功!", res);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return RequestResult.error("查询失败!", 0);
+    }
+
     @Override
     public RequestResult getAssessment(String type) {
         try {
@@ -1319,4 +1552,21 @@ public class YztServiceImpl implements IYztService {
         return config;
     }
 
+    public List<AnalyseResult> getTotalTj(List<AnalyseResult> xzqdetail) {
+        List<AnalyseResult> cur = new ArrayList<>();
+        AnalyseResult s = new AnalyseResult();
+        s.setType("合计");
+        Double area = 0.0;
+        Integer count = 0;
+        for (AnalyseResult c : xzqdetail) {
+            area += c.getArea();
+            count += c.getCount();
+        }
+        s.setArea(Math.round(area * 100) / 100.0);
+        s.setCount(count);
+        cur.add(s);
+        cur.addAll(xzqdetail);
+        return cur;
+    }
+
 }

+ 18 - 1
onemap-modules/onemap-spotoverlap/src/main/java/com/onemap/spotoverlap/service/yzt/IYztService.java

@@ -4,6 +4,7 @@ import com.onemap.common.core.web.domain.RequestResult;
 import com.onemap.spotoverlap.domain.yzt.tModel;
 import com.onemap.spotoverlap.domain.yzt.tModelDetail;
 import com.onemap.spotoverlap.domain.yzt.tModelSub;
+import com.onemap.spotoverlap.domain.yzt.tReport;
 import org.springframework.core.io.InputStreamResource;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.multipart.MultipartFile;
@@ -39,7 +40,7 @@ public interface IYztService {
 
     RequestResult getFeatureBySwid(String tablename, String swid);
 
-    RequestResult getTableRecord(String tablename, Integer page, Integer limit, String swid, String hfxpd);
+    RequestResult getTableRecord(String tablename, Integer page, Integer limit, String swid, String hfxpd, String hfxsm);
 
     RequestResult getMapConfig(String key);
 
@@ -94,4 +95,20 @@ public interface IYztService {
     RequestResult modeldetailupdate(tModelDetail modeldetail);
 
     RequestResult modeldetaildelete(String id);
+
+    RequestResult getAnalyseResultBySwid(String tablename, String swid);
+
+    RequestResult getJctbtj(String tablename, String xzqdm);
+
+    RequestResult getReportSub(String type, String name);
+
+    RequestResult updateReport(tReport report);
+
+    RequestResult getReportList(String name);
+
+    RequestResult deleteReport(String id);
+
+    RequestResult makeReport(String tablename, String reportid);
+
+    RequestResult getLayerNameByModelId(String modelid);
 }

+ 65 - 0
onemap-modules/onemap-spotoverlap/src/main/resources/mapper/postgresql/yzt/YztMapper.xml

@@ -119,6 +119,16 @@ WHERE
         where a.合法性判断 = '疑似违法'
     </select>
 
+    <select id="getTableReport" parameterType="java.lang.String" resultType="java.util.Map">
+        select ${sqlwhere} from ${tablename} t
+        group by ${groupwhere}
+        order by ${groupwhere}
+    </select>
+
+    <select id="getLayerNameByModelId" parameterType="java.lang.String" resultType="java.lang.String">
+        select sourcename "layername" from t_model_detail d where subid in (select id from t_model_sub s where modelid = #{modelid}) and sourcelayer != 'self'
+    </select>
+
     <select id="getLayerNameByTableName" parameterType="java.lang.String" resultType="java.lang.String">
         select layername from t_analyse_vector t where t.tablename = #{tablename}
     </select>
@@ -225,6 +235,9 @@ WHERE
         <if test="selfwhere != null and selfwhere != ''">
             and ${selfwhere}
         </if>
+        <if test="subwhere != null and subwhere != ''">
+            and ${subwhere}
+        </if>
         ) THEN #{situationtype}||'' ELSE '' END ),
         面积 = eee.totalarea ,
         编号集合 = eee.targetid,
@@ -268,6 +281,11 @@ WHERE
          where situationid = #{situationid} and sourcelayer = 'self'
     </select>
 
+    <select id="getSubwhereBySubid" resultType="java.lang.String" parameterType="java.lang.String">
+        select querywhere from t_model_sub
+         where id = #{subid}
+    </select>
+
     <update id="updateHfxsm" parameterType="java.lang.String">
         update ${tablename} C set "合法性说明" = str from (
         SELECT
@@ -317,4 +335,51 @@ WHERE
         where aaa.swid = C.swid
     </update>
 
+    <select id="getAnalyseDetail" resultType="com.onemap.spotoverlap.domain.yzt.AnalyseDetail"
+            parameterType="java.lang.String">
+        select 合法性判断 "fxjl", 合法性说明 "fxqx" from ${tablename} where swid = #{swid}
+    </select>
+
+    <select id="getAnalyseDetailQx" resultType="com.onemap.spotoverlap.domain.yzt.AnalyseDetailQx"
+            parameterType="java.lang.String">
+        SELECT
+            T.overlaparea ,T.overlapzb||'%' "overlapzb", replace(T."result",'#','') "fxjg",
+            d.sourcename "layername",
+            (select "value" from t_analyse_type p where p.name = d.relationship)||relationshipkey||relationshipvalue||'%' "fxyj"
+        FROM
+            t_analyse_result T
+            left join t_model_detail d on d.id = T.detailid
+        WHERE
+            T.tablename = #{tablename}
+            AND T.swid = #{swid}
+    </select>
+
+    <select id="getJctbtjXzq" resultType="com.onemap.spotoverlap.domain.yzt.AnalyseResult"
+            parameterType="java.lang.String">
+       select * from (SELECT COUNT
+	( 1 ) "count",
+	round( SUM ( CAST ( swarea AS NUMERIC ) / 667 ), cast(#{decimalPlaces} as int) ) "area",
+	uuuid "type",
+	(select xzqmc from t_xzqh where xzqdm = T.uuuid limit 1) xzqmc
+FROM
+	( select c.*, SUBSTRING ( c.swid, 0, cast(#{subxzq} as int) ) "uuuid" from ${tablename} c
+	where c.swid like #{xzqdm}||'%'
+	) T
+GROUP BY
+	uuuid
+	) ss order by type
+    </select>
+
+    <select id="getJctbtjBhlx" resultType="com.onemap.spotoverlap.domain.yzt.AnalyseResult"
+            parameterType="java.lang.String">
+       select * from (SELECT COUNT
+	( 1 ) "count",
+	round( SUM ( CAST ( swarea AS NUMERIC ) / 667 ), cast(#{decimalPlaces} as int) ) "area",
+	T.swtype "type"
+FROM
+	${tablename} T
+	where swid like #{xzqdm}||'%'
+GROUP BY
+	T.swtype ) ss order by count desc
+    </select>
 </mapper>