Browse Source

地籍图可进行入参制图

chenendian 1 month ago
parent
commit
8d257b44e8

+ 13 - 0
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/controller/ThematicController.java

@@ -74,6 +74,19 @@ public class ThematicController extends BaseController {
         }
         }
     }
     }
 
 
+
+
+    @PostMapping("/launchStandard")
+    public R<Object> launch(String name, String rwlx, String ztfw, String ztry, String ztdw,String fwlx,String blc,String bh) {
+        try {
+            R<Object> res = thematicService.launchStandard(name, rwlx, ztfw, ztry, ztdw,fwlx,blc,bh);
+            return res;
+        } catch (Exception e) {
+            return R.fail(e.getMessage());
+        }
+    }
+
+
     /**
     /**
      * 查询专题图产品列表
      * 查询专题图产品列表
      *
      *

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

@@ -103,4 +103,9 @@ public interface CadastreFileMapper {
     List<Map<String,Object>> intersectsTableWkt(@Param("tableName") String tableName, @Param("validFlag") String validFlag, @Param("ewkt") String ewkt);
     List<Map<String,Object>> intersectsTableWkt(@Param("tableName") String tableName, @Param("validFlag") String validFlag, @Param("ewkt") String ewkt);
 
 
 
 
+    Map<String,Object> selectTableDataByBsm(@Param("tableName") String tableName,@Param("bsm") String bsm);
+
+
+
+
 }
 }

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

@@ -33,5 +33,8 @@ public interface ThematicService {
     R<Object> launch(String name, String rwlx, String ztfw, String ztry, String ztdw);
     R<Object> launch(String name, String rwlx, String ztfw, String ztry, String ztdw);
 
 
     R<Object> drop(String id, String type);
     R<Object> drop(String id, String type);
+
+    R<Object> launchStandard(String name, String rwlx, String ztfw, String ztry, String ztdw,String fwlx,String blc,String bh);
+
 }
 }
 
 

+ 125 - 5
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/impl/ThematicImpl.java

@@ -7,8 +7,11 @@ import com.siwei.apply.service.cadastre.impl.FzssFxrwrzHandleService;
 import com.siwei.apply.utils.DownloadUtils;
 import com.siwei.apply.utils.DownloadUtils;
 import com.siwei.apply.utils.FixedThreadUtil;
 import com.siwei.apply.utils.FixedThreadUtil;
 import com.siwei.common.core.domain.R;
 import com.siwei.common.core.domain.R;
+import com.siwei.common.core.exception.ServiceException;
 import com.siwei.common.core.utils.StringUtils;
 import com.siwei.common.core.utils.StringUtils;
 import com.siwei.common.core.utils.file.FileUtils;
 import com.siwei.common.core.utils.file.FileUtils;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
@@ -19,10 +22,8 @@ import java.io.BufferedReader;
 import java.io.File;
 import java.io.File;
 import java.io.IOException;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * 专题制图
  * 专题制图
@@ -48,6 +49,12 @@ public class ThematicImpl implements ThematicService {
     private FzssFxrwrzHandleService fzssFxrwrzHandleService;
     private FzssFxrwrzHandleService fzssFxrwrzHandleService;
 
 
 
 
+
+    @Autowired
+    private CadastreFileMapper cadastreFileMapper;
+
+
+
     @Override
     @Override
     public R<Object> list(String name, String rwlx, Integer page, Integer limit) {
     public R<Object> list(String name, String rwlx, Integer page, Integer limit) {
         try {
         try {
@@ -119,7 +126,116 @@ public class ThematicImpl implements ThematicService {
                 // 更新状态为运行中
                 // 更新状态为运行中
                 thematicMapper.updateRwzt(uuid, "1");
                 thematicMapper.updateRwzt(uuid, "1");
                 //TODO command ProcessBuilder
                 //TODO command ProcessBuilder
-                ProcessBuilder pb = new ProcessBuilder(pythonHome, finalPyPath);
+                ProcessBuilder pb = new ProcessBuilder(pythonHome, finalPyPath,"","","","","");
+                pb.redirectErrorStream(true);
+                Process process = null;
+                process = pb.start();
+                fzssFxrwrzHandleService.insertFxrwrz(uuid, "地籍制图", "制图任务启动。。。", "info");
+                BufferedReader reader = new BufferedReader(
+                        new InputStreamReader(process.getInputStream()));
+                String line;
+                ArrayList<String> datas = new ArrayList<>();
+                while ((line = reader.readLine()) != null) {
+                    if (StringUtils.isNotEmpty(line)) {
+                        if (line.contains("||")) {
+                            datas.add(line.split("ERROR")[0]);
+                        }
+                    }
+                }
+                if (datas.size() > 0) {
+                    // 更新状态为成功
+                    thematicMapper.updateRwzt2(uuid, "2");
+                    for (String cur : datas) {
+                        String[] args = cur.split("\\|\\|");
+                        String id = StringUtils.getUUID();
+                        // 处理文件路径
+                        args[1] = StringUtils.replaceEach(args[1], new String[]{"D:","\\"},new String[]{"","/"});
+                        // 插入制图产品表
+                        thematicMapper.addDetails(id, uuid, args[0], args[1], args[2]);
+                    }
+                    fzssFxrwrzHandleService.insertFxrwrz(uuid, "地籍制图", "制图成功", "info");
+                } else {
+                    // 更新状态为失败
+                    thematicMapper.updateRwzt2(uuid, "3");
+                    fzssFxrwrzHandleService.insertFxrwrz(uuid, "地籍制图", "制图失败", "info");
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        });
+        return R.ok("制图任务创建成功!id:"+uuid);
+    }
+
+
+    @Override
+    public R<Object> launchStandard(String name, String rwlx, String ztfw, String ztry, String ztdw,String fwlx,String blc,String bm) {
+        String uuid = StringUtils.getUUID();
+        // 插入制图任务表
+        thematicMapper.addRw(uuid, name, rwlx, ztfw, ztry, ztdw);
+        fzssFxrwrzHandleService.insertFxrwrz(uuid, "地籍制图", "任务创建成功", "info");
+        //这里根据类型,获取比例尺相关表的图幅号:
+        String tfhInfo = ""; //图幅号信息
+        String ewkt = "";
+
+        if(fwlx.equals("1")){ //1行政区;2地籍区;3地籍子区;4自定义范围
+            tfhInfo = "11,22,33,44,55";
+        }else if(fwlx.equals("2")){
+            // 根据地籍区的编号获取
+            Map<String,Object> map = cadastreFileMapper.selectTableDataByBsm("djq",bm);
+            if(MapUtils.isNotEmpty(map)){
+                ewkt = (String) map.get("geom2");
+            }
+        } else if (fwlx.equals("3")) {
+            // 根据地籍区的编号获取
+            Map<String,Object> map = cadastreFileMapper.selectTableDataByBsm("djzq",bm);
+            if(MapUtils.isNotEmpty(map)){
+                ewkt = (String) map.get("geom2");
+            }
+        } else if (fwlx.equals("4")) {
+            ewkt = ztfw;
+        }
+
+        if(StringUtils.isNotBlank(blc) && StringUtils.isNotBlank(ewkt)){
+            String tableName = "";
+            if("500".equals(blc)){
+                tableName = "tf_500";
+            }else if("1000".equals(blc)){
+                tableName = "tf_1000";
+            }else if("2000".equals(blc)){
+                tableName = "tf_2000";
+            }
+            List<Map<String,Object>> intersectsResult =   cadastreFileMapper.intersectsTableWkt(tableName,"",ewkt);
+            if(CollectionUtils.isEmpty(intersectsResult)){
+                throw new ServiceException("该区域不在可制图范围内");
+            }
+            tfhInfo = intersectsResult.stream()
+                    .map(s -> (String) s.get("tfh"))  // 直接转为String
+                    .filter(Objects::nonNull)
+                    .collect(Collectors.joining(","));
+        }
+        if(StringUtils.isBlank(tfhInfo)){
+            throw new ServiceException("查询不到图幅号");
+        }
+
+        // 判断需要执行的python脚本
+        String pyPath = "";
+        String tempPath = temppath+"专题图制作/";
+        String tfh = tfhInfo; //图幅号
+
+        if ("1".equals(rwlx)) {
+            pyPath = cadastralmapPy;
+        } else if ("3".equals(rwlx)) {
+            pyPath = parcelmapPy;
+        }
+        String finalPyPath = pyPath;
+        // 异步线程执行分析
+        FixedThreadUtil.FIXED_THREAD_POOL.execute(() -> {
+            try {
+                fzssFxrwrzHandleService.insertFxrwrz(uuid, "地籍制图", "开始制图任务。。。", "info");
+                // 更新状态为运行中
+                thematicMapper.updateRwzt(uuid, "1");
+                //TODO command ProcessBuilder
+                ProcessBuilder pb = new ProcessBuilder(pythonHome, finalPyPath,blc,tempPath,tfh);
                 pb.redirectErrorStream(true);
                 pb.redirectErrorStream(true);
                 Process process = null;
                 Process process = null;
                 process = pb.start();
                 process = pb.start();
@@ -135,6 +251,7 @@ public class ThematicImpl implements ThematicService {
                         }
                         }
                     }
                     }
                 }
                 }
+
                 if (datas.size() > 0) {
                 if (datas.size() > 0) {
                     // 更新状态为成功
                     // 更新状态为成功
                     thematicMapper.updateRwzt2(uuid, "2");
                     thematicMapper.updateRwzt2(uuid, "2");
@@ -159,6 +276,9 @@ public class ThematicImpl implements ThematicService {
         return R.ok("制图任务创建成功!id:"+uuid);
         return R.ok("制图任务创建成功!id:"+uuid);
     }
     }
 
 
+
+
+
     @Override
     @Override
     public R<Object> productlist(String name, String taskid, Integer page, Integer limit) {
     public R<Object> productlist(String name, String taskid, Integer page, Integer limit) {
         try {
         try {

+ 4 - 0
siwei-modules/siwei-apply/src/main/resources/mapper/ThematicMapper.xml

@@ -94,4 +94,8 @@
         (#{id}, #{uuid}, #{name} ,#{cjsj} , #{filepath} )
         (#{id}, #{uuid}, #{name} ,#{cjsj} , #{filepath} )
     </insert>
     </insert>
 
 
+
+
+
+
 </mapper>
 </mapper>

+ 8 - 1
siwei-modules/siwei-apply/src/main/resources/mapper/cadastre/CadastreFileMapper.xml

@@ -333,13 +333,20 @@
 
 
     <select id="intersectsTableWkt" resultType="Map">
     <select id="intersectsTableWkt" resultType="Map">
         SELECT *
         SELECT *
-        FROM "${tableName}" inTbale
+        FROM  vector.${tableName} inTbale
         where public.st_intersects(inTbale.geom,public.st_geomfromewkt(#{ewkt}))
         where public.st_intersects(inTbale.geom,public.st_geomfromewkt(#{ewkt}))
           <if test="validFlag != null and validFlag != ''">
           <if test="validFlag != null and validFlag != ''">
             and valid_flag = ${validFlag}
             and valid_flag = ${validFlag}
         </if>
         </if>
     </select>
     </select>
 
 
+    <select id="selectTableDataByBsm"   resultType="Map">
+        SELECT * ,public.st_asewkt(geom) geom2  FROM vector.${tableName}
+        WHERE valid_flag = 0
+        <if test="bsm != null and bsm != ''">
+            and bsm= ${bsm}
+        </if>
+    </select>
 
 
 
 
 </mapper>
 </mapper>