|
|
@@ -0,0 +1,1032 @@
|
|
|
+package com.onemap.spotoverlap.service.impl.yzt;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.onemap.common.core.utils.StringUtils;
|
|
|
+import com.onemap.common.core.utils.UnPackageUtils;
|
|
|
+import com.onemap.spotoverlap.domain.yzt.*;
|
|
|
+import com.onemap.spotoverlap.mapper.yzt.*;
|
|
|
+import com.onemap.spotoverlap.mapper.yzt.YztMapper;
|
|
|
+import com.onemap.spotoverlap.service.yzt.IYztService;
|
|
|
+import com.onemap.common.core.web.domain.RequestResult;
|
|
|
+import com.onemap.common.security.utils.SecurityUtils;
|
|
|
+import com.onemap.spotoverlap.utils.*;
|
|
|
+import org.json.simple.JSONArray;
|
|
|
+import org.json.simple.JSONObject;
|
|
|
+import org.json.simple.parser.JSONParser;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.core.io.InputStreamResource;
|
|
|
+import org.springframework.http.HttpHeaders;
|
|
|
+import org.springframework.http.HttpStatus;
|
|
|
+import org.springframework.http.ResponseEntity;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
+
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+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.zip.ZipEntry;
|
|
|
+import java.util.zip.ZipOutputStream;
|
|
|
+
|
|
|
+@Service
|
|
|
+public class YztServiceImpl implements IYztService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private TAnalyseVectorMapper tAnalyseVectorMapper;
|
|
|
+ @Autowired
|
|
|
+ private TBasemapMapper tBasemapMapper;
|
|
|
+ @Autowired
|
|
|
+ private TBaseVectorMapper tBaseVectorMapper;
|
|
|
+ @Autowired
|
|
|
+ private TGeoServerMapper tGeoServerMapper;
|
|
|
+ @Autowired
|
|
|
+ private TMapConfigMapper tMapConfigMapper;
|
|
|
+ @Autowired
|
|
|
+ private TModelMapper tModelMapper;
|
|
|
+ @Autowired
|
|
|
+ private YztMapper yztMapper;
|
|
|
+
|
|
|
+ @Value("${decimalPlaces}")
|
|
|
+ private String decimalPlaces;
|
|
|
+ @Value("${dbschema}")
|
|
|
+ private String dbschema;
|
|
|
+ @Value("${file.temp}")
|
|
|
+ String localFilePath;
|
|
|
+ @Value("${file.proxy}")
|
|
|
+ String localFileProxy;
|
|
|
+ @Value("${server.port}")
|
|
|
+ String serverport;
|
|
|
+ @Value("${server.host}")
|
|
|
+ String serverhost;
|
|
|
+ @Value("${file.wkid}")
|
|
|
+ Integer shpWkid;
|
|
|
+ @Value("${file.prefix}")
|
|
|
+ String prefix;
|
|
|
+ @Value("${image.qsx}")
|
|
|
+ String qsx;
|
|
|
+ @Value("${image.hsx}")
|
|
|
+ String hsx;
|
|
|
+ @Value("${qgis}")
|
|
|
+ String qgis;
|
|
|
+ @Value("${swid}")
|
|
|
+ String swid;
|
|
|
+ @Value("${swarea}")
|
|
|
+ String swarea;
|
|
|
+ @Value("${exportFields}")
|
|
|
+ String exportFields;
|
|
|
+ @Value("${mapExport.fixed}")
|
|
|
+ String mapExportFixed;
|
|
|
+ @Value("${mapExport.size}")
|
|
|
+ Integer mapExportSize;
|
|
|
+ @Value("${checkedstyle}")
|
|
|
+ String checkedstyle;
|
|
|
+ @Value("${spotstyle}")
|
|
|
+ String spotstyle;
|
|
|
+ @Value("${charset}")
|
|
|
+ String charset;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RequestResult upload(MultipartFile file) {
|
|
|
+ if (file == null) {
|
|
|
+ return RequestResult.error("未上传文件!");
|
|
|
+ }
|
|
|
+ String currentTime = CustomUtils.getCurrentTime();
|
|
|
+ String currentPath = localFilePath + "/" + currentTime + "/";
|
|
|
+ String username = SecurityUtils.getUsername();
|
|
|
+ if (StringUtils.isEmpty(username)) {
|
|
|
+ username = "admin";
|
|
|
+ }
|
|
|
+ String shpPath = "";
|
|
|
+ String fileName = file.getOriginalFilename();
|
|
|
+ String filetype = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
|
|
|
+ String filename = fileName.replace(filetype, "").replace(".", "");
|
|
|
+ if (!filetype.equals("zip") && !filetype.equals("rar")) {
|
|
|
+ return RequestResult.error("请上传zip/rar压缩包文件", null);
|
|
|
+ }
|
|
|
+ String filepath = currentPath + "" + fileName;
|
|
|
+ File dest = new File(filepath);
|
|
|
+ File dir = dest.getParentFile();
|
|
|
+ if (!dir.exists()) {
|
|
|
+ dir.mkdirs();
|
|
|
+ }
|
|
|
+ String unzippath = currentPath;
|
|
|
+ try {
|
|
|
+ file.transferTo(dest);
|
|
|
+ if (filetype.equals("zip")) {
|
|
|
+ new UnPackageUtils().unPackZip(dest, unzippath);
|
|
|
+ } else {
|
|
|
+ new UnPackageUtils().unPackRar(dest, unzippath);
|
|
|
+ }
|
|
|
+ File[] files = new File(unzippath).listFiles();
|
|
|
+ for (File file1 : files) {
|
|
|
+ if (file1.getAbsolutePath().substring(file1.getAbsolutePath().lastIndexOf(".") + 1).equals("shp")) {
|
|
|
+ shpPath = file1.getAbsolutePath();
|
|
|
+ shpPath = shpPath.replaceAll("\\\\", "/");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!"".equals(shpPath)) {
|
|
|
+
|
|
|
+ } else {
|
|
|
+ return RequestResult.error("未检索到shp文件");
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ return RequestResult.error(e.getMessage());
|
|
|
+ }
|
|
|
+ return RequestResult.success("上传成功", shpPath);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RequestResult importIn(MultipartFile file, String path, String type, String name, String ufield, String style) {
|
|
|
+ if (StringUtils.isEmpty(style)) {
|
|
|
+ style = spotstyle;
|
|
|
+ }
|
|
|
+ if (file == null && path == null) {
|
|
|
+ return RequestResult.error("参数未传递", null);
|
|
|
+ }
|
|
|
+ String currentTime = CustomUtils.getCurrentTime();
|
|
|
+ String currentPath = localFilePath + "/" + currentTime + "/";
|
|
|
+ String username = SecurityUtils.getUsername();
|
|
|
+ if (StringUtils.isEmpty(username)) {
|
|
|
+ username = "admin";
|
|
|
+ }
|
|
|
+ String shpPath = path;
|
|
|
+ if (StringUtils.isEmpty(shpPath)) {
|
|
|
+ String fileName = file.getOriginalFilename();
|
|
|
+ String filetype = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
|
|
|
+ String filename = fileName.replace(filetype, "").replace(".", "");
|
|
|
+ if (!filetype.equals("zip") && !filetype.equals("rar")) {
|
|
|
+ return RequestResult.error("请上传zip/rar压缩包文件", null);
|
|
|
+ }
|
|
|
+ String filepath = currentPath + "" + fileName;
|
|
|
+ File dest = new File(filepath);
|
|
|
+ File dir = dest.getParentFile();
|
|
|
+ if (!dir.exists()) {
|
|
|
+ dir.mkdirs();
|
|
|
+ }
|
|
|
+ String unzippath = currentPath;
|
|
|
+ try {
|
|
|
+ file.transferTo(dest);
|
|
|
+ if (filetype.equals("zip")) {
|
|
|
+ new UnPackageUtils().unPackZip(dest, unzippath);
|
|
|
+ } else {
|
|
|
+ new UnPackageUtils().unPackRar(dest, unzippath);
|
|
|
+ }
|
|
|
+ File[] files = new File(unzippath).listFiles();
|
|
|
+ for (File file1 : files) {
|
|
|
+ if (file1.getAbsolutePath().substring(file1.getAbsolutePath().lastIndexOf(".") + 1).equals("shp")) {
|
|
|
+ shpPath = file1.getAbsolutePath();
|
|
|
+ shpPath = shpPath.replaceAll("\\\\", "/");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!"".equals(shpPath)) {
|
|
|
+
|
|
|
+ } else {
|
|
|
+ return RequestResult.error("未检索到shp文件");
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ return RequestResult.error(e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ String tablename = "";
|
|
|
+ String folderpath = "";
|
|
|
+ if (StringUtils.isEmpty(shpPath)) {
|
|
|
+ return RequestResult.error("未检索到shp文件!");
|
|
|
+ } else {
|
|
|
+ File currentfile = new File(shpPath);
|
|
|
+ String fileName = currentfile.getName();
|
|
|
+ folderpath = currentfile.getParentFile().getAbsolutePath();
|
|
|
+ String filetype = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
|
|
|
+ String filename = fileName.replace(filetype, "").replace(".", "");
|
|
|
+ tablename = prefix + filename + "_" + currentTime;
|
|
|
+ try {
|
|
|
+ //TODO wanger 第一步:指定坐标系将本地shp文件导入到postgis
|
|
|
+ ShpToPostGISWithReproject.importShpToPostGISWithReproject(shpPath, tablename, "EPSG:" + shpWkid, false);
|
|
|
+ //TODO wanger 第二步:指定的空间数据库表的geom字段
|
|
|
+ Integer count = yztMapper.getTheGeomCount(dbschema, tablename);
|
|
|
+ if (count > 0) {
|
|
|
+ yztMapper.updateGeomField(tablename);
|
|
|
+ }
|
|
|
+ //TODO wanger 第三步:创建空间索引
|
|
|
+ yztMapper.createTableGeomIndex(tablename, String.format("idx_%s_geom", tablename));
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ return RequestResult.error("shp数据入库失败!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ //TODO wanger 增加swid字段
|
|
|
+ String swidSql = "ALTER TABLE " + tablename + " ADD COLUMN " + swid + " TEXT";
|
|
|
+ yztMapper.executeSQL(swidSql);
|
|
|
+ swidSql = "UPDATE " + tablename + " set " + swid + " = \"" + ufield + "\"";
|
|
|
+ yztMapper.executeSQL(swidSql);
|
|
|
+ //TODO wanger 增加swarea字段
|
|
|
+ String swareaSql = "ALTER TABLE " + tablename + " ADD COLUMN " + swarea + " TEXT";
|
|
|
+ yztMapper.executeSQL(swareaSql);
|
|
|
+ swareaSql = "UPDATE " + tablename + " set " + swarea + " = round(cast(st_area(geom) as numeric), " + decimalPlaces + ")";
|
|
|
+ yztMapper.executeSQL(swareaSql);
|
|
|
+ //TODO wanger 发布到geoserver
|
|
|
+ File shp = new File(shpPath);
|
|
|
+ String fileName = shp.getName();
|
|
|
+ int dotIndex = fileName.lastIndexOf('.');
|
|
|
+ String datasource = dotIndex != -1 ? fileName.substring(0, dotIndex) : fileName;
|
|
|
+ tGeoserver geoserverconfig = tGeoServerMapper.selectOne(null);
|
|
|
+ String geoserverurl = geoserverconfig.getUri();
|
|
|
+ String geoserverusername = geoserverconfig.getUsername();
|
|
|
+ String geoserverpassword = geoserverconfig.getPassword();
|
|
|
+ String geoserverworkspace = geoserverconfig.getWorkspace();
|
|
|
+ GeoServer.publishShp(geoserverurl, geoserverusername, geoserverpassword, geoserverworkspace, shpPath, style, datasource, charset);
|
|
|
+ String layerurl = geoserverurl + "/" + geoserverworkspace + "/wms";
|
|
|
+ String layername = geoserverworkspace + ":" + datasource;
|
|
|
+ String epsg = GeoServer.getShpEPSG(shpPath);
|
|
|
+ String uuid = StringUtils.getUUID();
|
|
|
+ if ("base".equals(type)) {//管控数据
|
|
|
+ tBaseVector baseVector = new tBaseVector();
|
|
|
+ baseVector.setId(uuid);
|
|
|
+ baseVector.setInserttime(new Date());
|
|
|
+ baseVector.setLayername(name);
|
|
|
+ baseVector.setTablename(tablename);
|
|
|
+ baseVector.setServiceuri(layerurl);
|
|
|
+ baseVector.setServicetype("WMS");
|
|
|
+ baseVector.setServicename(layername);
|
|
|
+ baseVector.setServiceproj(epsg);
|
|
|
+ tBaseVectorMapper.insert(baseVector);
|
|
|
+ } else if ("analyse".equals(type)) {//分析图斑
|
|
|
+ tAnalyseVector analyseVector = new tAnalyseVector();
|
|
|
+ analyseVector.setId(uuid);
|
|
|
+ analyseVector.setLayername(name);
|
|
|
+ analyseVector.setInserttime(new Date());
|
|
|
+ analyseVector.setTablename(tablename);
|
|
|
+ analyseVector.setPath(folderpath);
|
|
|
+ analyseVector.setServiceuri(layerurl);
|
|
|
+ analyseVector.setServicetype("WMS");
|
|
|
+ analyseVector.setServicename(layername);
|
|
|
+ analyseVector.setServiceproj(epsg);
|
|
|
+ analyseVector.setUfield(ufield);
|
|
|
+ tAnalyseVectorMapper.insert(analyseVector);
|
|
|
+ }
|
|
|
+ } catch (Exception w) {
|
|
|
+ w.printStackTrace();
|
|
|
+ return RequestResult.error("数据库表处理异常!");
|
|
|
+ }
|
|
|
+ Map<String, Object> result = new HashMap<>();
|
|
|
+ result.put("tablename", tablename);
|
|
|
+ result.put("path", shpPath);
|
|
|
+ return RequestResult.success("上传成功", result);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RequestResult modellist() {
|
|
|
+ try {
|
|
|
+ QueryWrapper<tModel> wrapper = new QueryWrapper();
|
|
|
+ wrapper.select("distinct modelname");
|
|
|
+ List<tModel> models = tModelMapper.selectList(wrapper);
|
|
|
+ List<String> res = new ArrayList<String>();
|
|
|
+ for (tModel model : models) {
|
|
|
+ res.add(model.getModelname());
|
|
|
+ }
|
|
|
+ return RequestResult.success("查询成功!", res);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return RequestResult.error("查询失败!", null);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询模型详情
|
|
|
+ *
|
|
|
+ * @param modelname
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public RequestResult modeldetails(String modelname) {
|
|
|
+ try {
|
|
|
+ QueryWrapper<tModel> wrapper = new QueryWrapper();
|
|
|
+ wrapper.eq("modelname", modelname);
|
|
|
+ List<tModel> models = tModelMapper.selectList(wrapper);
|
|
|
+ return RequestResult.success("查询成功!", models);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return RequestResult.error("查询失败!", null);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询模型详情
|
|
|
+ *
|
|
|
+ * @param modelname
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public RequestResult modeldelete(String modelname) {
|
|
|
+ try {
|
|
|
+ QueryWrapper<tModel> wrapper = new QueryWrapper();
|
|
|
+ wrapper.eq("modelname", modelname);
|
|
|
+ tModelMapper.delete(wrapper);
|
|
|
+ return RequestResult.success("删除成功!", 1);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return RequestResult.error("删除失败!", null);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RequestResult modelupdate(HttpServletRequest request) {
|
|
|
+ try {
|
|
|
+ JSONObject parameters = (JSONObject) new JSONParser().parse(request.getReader());
|
|
|
+ String modelname = (String) parameters.get("modelname");
|
|
|
+ JSONArray details = (JSONArray) parameters.get("details");
|
|
|
+ QueryWrapper<tModel> wrapper = new QueryWrapper();
|
|
|
+ wrapper.eq("modelname", modelname);
|
|
|
+ tModelMapper.delete(wrapper);
|
|
|
+ for (int i = 0; i < details.size(); i++) {
|
|
|
+ JSONObject curObj = (JSONObject) details.get(i);
|
|
|
+ String layername = (String) curObj.get("layername");
|
|
|
+ String isvalid = (String) curObj.get("isvalid");
|
|
|
+ String type = (String) curObj.get("type");
|
|
|
+ tModel model = new tModel();
|
|
|
+ model.setId(StringUtils.getUUID());
|
|
|
+ model.setLayername(layername);
|
|
|
+ model.setType(type);
|
|
|
+ model.setIndex(String.valueOf(i));
|
|
|
+ model.setIsvalid(isvalid);
|
|
|
+ model.setModelname(modelname);
|
|
|
+ tModelMapper.insert(model);
|
|
|
+ }
|
|
|
+ return RequestResult.success("修改成功!", 1);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return RequestResult.error("失败!", null);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RequestResult basevectordelete(String tablename) {
|
|
|
+ try {
|
|
|
+ //TODO wanger 删除主表
|
|
|
+ String deleteSQL = "delete from t_base_vector where tablename = '" + tablename + "'";
|
|
|
+ yztMapper.executeSQL(deleteSQL);
|
|
|
+ //TODO wanger 删除模型分析因子项
|
|
|
+ deleteSQL = "delete from t_model where layername = (select layername from t_base_vector where tablename = '" + tablename + "')";
|
|
|
+ yztMapper.executeSQL(deleteSQL);
|
|
|
+ //TODO wanger 删除矢量表
|
|
|
+ deleteSQL = "drop table " + tablename + "";
|
|
|
+ yztMapper.executeSQL(deleteSQL);
|
|
|
+ return RequestResult.success("删除成功!", 1);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return RequestResult.error("失败!", null);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RequestResult analysevectordelete(String tablename) {
|
|
|
+ try {
|
|
|
+ //TODO wanger 删除主表
|
|
|
+ String deleteSQL = "delete from t_analyse_vector where tablename = '" + tablename + "'";
|
|
|
+ yztMapper.executeSQL(deleteSQL);
|
|
|
+ //TODO wanger 删除矢量表
|
|
|
+ deleteSQL = "drop table " + tablename + "";
|
|
|
+ yztMapper.executeSQL(deleteSQL);
|
|
|
+ return RequestResult.success("删除成功!", 1);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return RequestResult.error("失败!", null);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RequestResult getShpFields(String path) {
|
|
|
+ List<String> fields = ShpToSpatiaLite.getShpFields(path, charset);
|
|
|
+ return RequestResult.success("查询成功", fields);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ResponseEntity<InputStreamResource> getTiff(String tiftype, String tableid, String uuid, String filetype) {
|
|
|
+ Connection connection = null;
|
|
|
+ String folderpath = "";
|
|
|
+ try {
|
|
|
+ QueryWrapper<tAnalyseVector> wrapper = new QueryWrapper();
|
|
|
+ wrapper.eq("id", tableid);
|
|
|
+ tAnalyseVector analyseVector = tAnalyseVectorMapper.selectOne(wrapper);
|
|
|
+ folderpath = analyseVector.getPath();
|
|
|
+ connection.close();
|
|
|
+ if (StringUtils.isEmpty(folderpath)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ String filepath = folderpath + "\\" + tiftype + "\\" + uuid + tiftype + "." + filetype;
|
|
|
+ File file = new File(filepath); // 文件路径
|
|
|
+ InputStream tiffInputStream = null;
|
|
|
+ try {
|
|
|
+ tiffInputStream = new FileInputStream(file);
|
|
|
+ } catch (FileNotFoundException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ HttpHeaders headers = new HttpHeaders();
|
|
|
+ if ("tif".equals(filetype)) {
|
|
|
+ headers.add(HttpHeaders.CONTENT_TYPE, "image/tiff");
|
|
|
+ } else if ("png".equals(filetype)) {
|
|
|
+ headers.add(HttpHeaders.CONTENT_TYPE, "image/png");
|
|
|
+ }
|
|
|
+ headers.add(HttpHeaders.CONTENT_LENGTH, String.valueOf(file.length()));
|
|
|
+ headers.add(HttpHeaders.CONTENT_DISPOSITION, "inline; filename=image.tif");
|
|
|
+ return ResponseEntity.status(HttpStatus.PARTIAL_CONTENT)
|
|
|
+ .headers(headers)
|
|
|
+ .body(new InputStreamResource(tiffInputStream));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RequestResult getImageUrls(String tableid, String uuid) {
|
|
|
+ String qsxfilepath = localFilePath + "\\" + tableid + "\\" + uuid + qsx + ".tif";
|
|
|
+ File file = new File(qsxfilepath);
|
|
|
+ if (!file.exists()) {
|
|
|
+ try {
|
|
|
+ String directoryPath = localFilePath + "\\" + tableid;
|
|
|
+ File directory = new File(directoryPath);
|
|
|
+ if (!directory.exists()) {
|
|
|
+ boolean result = directory.mkdirs();
|
|
|
+ if (result) {
|
|
|
+ System.out.println("目录创建成功:" + directoryPath);
|
|
|
+ } else {
|
|
|
+ System.out.println("目录创建失败:" + directoryPath);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ System.out.println("目录已存在:" + directoryPath);
|
|
|
+ }
|
|
|
+ String folderpath = "";
|
|
|
+ QueryWrapper<tAnalyseVector> wrapper = new QueryWrapper();
|
|
|
+ wrapper.eq("id", tableid);
|
|
|
+ tAnalyseVector analyseVector = tAnalyseVectorMapper.selectOne(wrapper);
|
|
|
+ folderpath = analyseVector.getPath();
|
|
|
+ if (StringUtils.isEmpty(folderpath)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ //TODO wanger 前时相
|
|
|
+ Path qsxpath = Paths.get(folderpath + "\\" + qsx + "\\" + uuid + qsx + ".tif");
|
|
|
+ Path qsxtarget = Paths.get(qsxfilepath);
|
|
|
+ Files.copy(qsxpath, qsxtarget, StandardCopyOption.REPLACE_EXISTING);
|
|
|
+ //TODO wanger 后时相
|
|
|
+ Path hsxpath = Paths.get(folderpath + "\\" + hsx + "\\" + uuid + hsx + ".tif");
|
|
|
+ Path hsxtarget = Paths.get(localFilePath + "\\" + tableid + "\\" + uuid + hsx + ".tif");
|
|
|
+ Files.copy(hsxpath, hsxtarget, StandardCopyOption.REPLACE_EXISTING);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Map res = new HashMap();
|
|
|
+ res.put("qsx", serverhost + ":" + serverport + "/" + localFileProxy + "/" + tableid + "/" + uuid + qsx + ".tif");
|
|
|
+ res.put("hsx", serverhost + ":" + serverport + "/" + localFileProxy + "/" + tableid + "/" + uuid + hsx + ".tif");
|
|
|
+ return RequestResult.success("查询成功!", res);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RequestResult getTableGeoms(String tablename, String swid) {
|
|
|
+ try {
|
|
|
+ List<featureGeom> featureGeoms = yztMapper.selectFeatureGeom(tablename, swid);
|
|
|
+ QueryWrapper<tAnalyseVector> wrapper = new QueryWrapper();
|
|
|
+ wrapper.eq("tablename", tablename);
|
|
|
+ tAnalyseVector dto = tAnalyseVectorMapper.selectOne(wrapper);
|
|
|
+ Map<String, Object> result = new HashMap<>();
|
|
|
+ result.put("geom", featureGeoms);
|
|
|
+ result.put("proj", dto.getServiceproj());
|
|
|
+ return RequestResult.success("查询成功!", result);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return RequestResult.error("查询失败!", null);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RequestResult getFeatureBySwid(String tablename, String swid) {
|
|
|
+ try {
|
|
|
+ String querySQL = "select * from " + tablename + " where swid = '" + swid + "'";
|
|
|
+ List<Map<String, Object>> results = yztMapper.executeSQL(querySQL);
|
|
|
+ List<Map> res = new ArrayList<Map>();
|
|
|
+ for (Map<String, Object> thisdata : results) {
|
|
|
+ Map cur = new HashMap();
|
|
|
+ for (Map.Entry<String, Object> entry : thisdata.entrySet()) {
|
|
|
+ String key = entry.getKey();
|
|
|
+ if (!"geom".equals(key)) {
|
|
|
+ cur.put(key, entry.getValue());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ res.add(cur);
|
|
|
+ }
|
|
|
+ return RequestResult.success("查询成功!", res);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return RequestResult.error("查询失败!", null);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RequestResult getTableRecord(String tablename, Integer page, Integer limit, String swid, String hfxpd) {
|
|
|
+ try {
|
|
|
+ String wheresql = "";
|
|
|
+ if (StringUtils.isNotEmpty(swid)) {
|
|
|
+ wheresql += " and swid like '%" + swid + "%'";
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotEmpty(hfxpd)) {
|
|
|
+ wheresql += " and 合法性判断 = '" + hfxpd + "'";
|
|
|
+ }
|
|
|
+ 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<>();
|
|
|
+ Map<String, Object> firstMap = results.get(0);
|
|
|
+ for (Map.Entry<String, Object> entry : firstMap.entrySet()) {
|
|
|
+ String key = entry.getKey();
|
|
|
+ if (!"geom".equals(key)) {
|
|
|
+ fields.add(key);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (Map<String, Object> thisdata : results) {
|
|
|
+ Map cur = new HashMap();
|
|
|
+ for (Map.Entry<String, Object> entry : thisdata.entrySet()) {
|
|
|
+ String key = entry.getKey();
|
|
|
+ if (!"geom".equals(key)) {
|
|
|
+ cur.put(key, entry.getValue());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ res.add(cur);
|
|
|
+ }
|
|
|
+ String countSQL = "select count(1) as count from " + tablename + " where 1 = 1 " + wheresql;
|
|
|
+ List<Map<String, Object>> countresults = yztMapper.executeSQL(countSQL);
|
|
|
+ Integer count = Integer.valueOf(String.valueOf(countresults.get(0).get("count")));
|
|
|
+ Map<String, Object> result = new HashMap<>();
|
|
|
+ result.put("count", count);
|
|
|
+ result.put("record", res);
|
|
|
+ result.put("fields", fields);
|
|
|
+ return RequestResult.success("查询成功!", result);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return RequestResult.error("查询失败!", null);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RequestResult basevector() {
|
|
|
+ try {
|
|
|
+ QueryWrapper<tBaseVector> wrapper = new QueryWrapper();
|
|
|
+ wrapper.orderByDesc("inserttime");
|
|
|
+ List<tBaseVector> tBaseVectorList = tBaseVectorMapper.selectList(null);
|
|
|
+ return RequestResult.success("查询成功!", tBaseVectorList);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return RequestResult.error("查询失败!", null);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RequestResult analysevector(String name) {
|
|
|
+ try {
|
|
|
+ if (StringUtils.isEmpty(name)) {
|
|
|
+ name = "";
|
|
|
+ }
|
|
|
+ QueryWrapper<tAnalyseVector> wrapper = new QueryWrapper();
|
|
|
+ if (StringUtils.isNotEmpty(name)) {
|
|
|
+ wrapper.eq("layername", name);
|
|
|
+ }
|
|
|
+ wrapper.orderByDesc("inserttime");
|
|
|
+ return RequestResult.success("查询成功!", tAnalyseVectorMapper.selectList(wrapper));
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return RequestResult.error("查询失败!", null);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RequestResult getMapConfig(String key) {
|
|
|
+ try {
|
|
|
+ QueryWrapper<tMapConfig> wrapper = new QueryWrapper();
|
|
|
+ if (StringUtils.isNotEmpty(key)) {
|
|
|
+ wrapper.eq("name", key);
|
|
|
+ }
|
|
|
+ List<tMapConfig> list = tMapConfigMapper.selectList(wrapper);
|
|
|
+ Map res = new HashMap();
|
|
|
+ for (tMapConfig cur : list) {
|
|
|
+ res.put(cur.getName(), cur.getValue());
|
|
|
+ }
|
|
|
+ return RequestResult.success("查询成功!", res);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return RequestResult.error("查询失败!", null);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RequestResult getServerConfig(String key) {
|
|
|
+ try {
|
|
|
+ QueryWrapper<tGeoserver> wrapper = new QueryWrapper();
|
|
|
+ if (StringUtils.isNotEmpty(key)) {
|
|
|
+ wrapper.eq("id", key);
|
|
|
+ }
|
|
|
+ List<tGeoserver> list = tGeoServerMapper.selectList(wrapper);
|
|
|
+ return RequestResult.success("查询成功!", list.get(0));
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return RequestResult.error("查询失败!", null);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RequestResult getGeoServerStyles() {
|
|
|
+ try {
|
|
|
+ QueryWrapper<tGeoserver> wrapper = new QueryWrapper();
|
|
|
+ List<tGeoserver> list = tGeoServerMapper.selectList(wrapper);
|
|
|
+ tGeoserver res = list.get(0);
|
|
|
+ List<String> styles = GeoServer.getStyles(res.getUri(), res.getUsername(),
|
|
|
+ res.getPassword(), res.getWorkspace());
|
|
|
+ return RequestResult.success("查询成功!", styles);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return RequestResult.error("查询失败!", null);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RequestResult updateMapConfig(HttpServletRequest request) {
|
|
|
+ try {
|
|
|
+ JSONObject parameters = (JSONObject) new JSONParser().parse(request.getReader());
|
|
|
+ for (Object name : parameters.keySet()) {
|
|
|
+ String cname = String.valueOf(name);
|
|
|
+ String cvalue = String.valueOf(parameters.get(name));
|
|
|
+ String updateSQL = "update t_map_config set value = '" + cvalue + "' where name = '" + cname + "'";
|
|
|
+ yztMapper.executeSQL(updateSQL);
|
|
|
+ }
|
|
|
+ return RequestResult.success("修改成功!", 1);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return RequestResult.error("失败!", null);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RequestResult updateServerConfig(HttpServletRequest request) {
|
|
|
+ try {
|
|
|
+ JSONObject parameters = (JSONObject) new JSONParser().parse(request.getReader());
|
|
|
+ for (Object name : parameters.keySet()) {
|
|
|
+ Object value = parameters.get(name);
|
|
|
+ String updateSQL = "update t_geoserver set " + name + " = '" + (String) value + "'";
|
|
|
+ yztMapper.executeSQL(updateSQL);
|
|
|
+ }
|
|
|
+ return RequestResult.success("修改成功!", 1);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return RequestResult.error("失败!", null);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RequestResult overlapAnalysis(String modelname, String tablename) {
|
|
|
+ try {
|
|
|
+ //TODO wanger 修改数据的分析状态和开始时间
|
|
|
+ String updateSql = "update t_analyse_vector set fxzt = '1' , fxkssj = CURRENT_TIMESTAMP, fxmodel= '" + modelname + "' where tablename = '" + tablename + "'";
|
|
|
+ yztMapper.executeSQL(updateSql);
|
|
|
+ try {
|
|
|
+ //TODO wanger 对分析数据新增研判结果字段
|
|
|
+ yztMapper.executeSQL("ALTER TABLE " + tablename + " ADD COLUMN 合法性判断 TEXT");
|
|
|
+ yztMapper.executeSQL("ALTER TABLE " + tablename + " ADD COLUMN 合法性说明 TEXT");
|
|
|
+ yztMapper.executeSQL("ALTER TABLE " + tablename + " ADD COLUMN 面积 TEXT");
|
|
|
+ yztMapper.executeSQL("ALTER TABLE " + tablename + " ADD COLUMN 面积集合 TEXT");
|
|
|
+ yztMapper.executeSQL("ALTER TABLE " + tablename + " ADD COLUMN 编号集合 TEXT");
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.out.println("分析图斑数据已存在附加字段,请忽略!");
|
|
|
+ }
|
|
|
+ //TODO wanger 重置附加字段为空字符串
|
|
|
+ String resetSql = "update " + tablename + " set 合法性判断 = '' , 合法性说明 = '' , 面积 = '' , 编号集合 = '', 面积集合 = ''";
|
|
|
+ yztMapper.executeSQL(resetSql);
|
|
|
+ // 查询分析模型因子
|
|
|
+ List<analyseModel> analyseModels = yztMapper.getAnalyseModel(tablename);
|
|
|
+ List<String> sqlOverlap = new ArrayList<>();
|
|
|
+ for (analyseModel curModel : analyseModels) {
|
|
|
+ String layerName = curModel.getLayername();
|
|
|
+ String tableName = curModel.getTablename();
|
|
|
+ String type = curModel.getType();
|
|
|
+ //TODO wanger 执行分析模型因子叠加分析
|
|
|
+ if (type.equals("外部")) {
|
|
|
+ yztMapper.executeAnalyse(tablename, tableName, layerName, decimalPlaces, null);
|
|
|
+ } else if (type.equals("内部")) {
|
|
|
+ String updateInside = String.format("update " + tablename + " as c set " +
|
|
|
+ "合法性说明 = case when c.合法性说明 is null then '' else c.合法性说明 || ';' end || '符合%s用地'," +
|
|
|
+ "面积 = case when 面积 is null then '' else 面积 end || round(cast( ST_Area(ST_Intersection(c.geom,d.geom)) as numeric), 2) || ';' " +
|
|
|
+ "from %s d where ST_Covers ( c.geom, d.geom )", layerName, tableName);
|
|
|
+ sqlOverlap.add(updateInside);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ String updateInlegal = "update " + tablename + " set 合法性判断 = '疑似违法' where 合法性说明 like '%疑似%'";
|
|
|
+ yztMapper.executeSQL(updateInlegal);
|
|
|
+ String updateLegal = "update " + tablename + " set 合法性判断 = '合法用地' where 合法性判断 is null or 合法性判断 = ''";
|
|
|
+ yztMapper.executeSQL(updateLegal);
|
|
|
+ //TODO wanger 修改数据的分析状态和结束时间
|
|
|
+ updateSql = "update t_analyse_vector set fxzt = '2' , fxjssj = CURRENT_TIMESTAMP, fxrz = '分析正常结束' where tablename = '" + tablename + "'";
|
|
|
+ yztMapper.executeSQL(updateSql);
|
|
|
+ return RequestResult.success("分析完成!", 1);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ try {
|
|
|
+ String updateSql = "update t_analyse_vector set fxzt = '3' , fxjssj = CURRENT_TIMESTAMP, fxrz = '" + e.toString() + "' where tablename = '" + tablename + "'";
|
|
|
+ yztMapper.executeSQL(updateSql);
|
|
|
+ } catch (Exception exception) {
|
|
|
+ exception.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return RequestResult.error("分析失败!", 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void exportReport(String modelname, String tablename, String layername, HttpServletRequest request, HttpServletResponse response) {
|
|
|
+ String folderPath = localFilePath + "" + layername + "\\" + "report";
|
|
|
+ File folder = new File(folderPath);
|
|
|
+ String zippath = localFilePath + "" + layername + "\\report.zip";
|
|
|
+ if (folder.exists()) {
|
|
|
+ // TODO 如果已存在则打开系统文件夹
|
|
|
+ try {
|
|
|
+ FileToZipDownload.downloadLocalZipBuffered(response, zippath);
|
|
|
+// Runtime.getRuntime().exec("explorer.exe " + folderPath);
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+// return RequestResult.success("导出成功", 1);
|
|
|
+ } else {
|
|
|
+ folder.mkdirs();
|
|
|
+ String excelpath = folderPath + "/" + layername + "report.xlsx";
|
|
|
+ String wordpath = folderPath + "/" + layername + "report.docx";
|
|
|
+ String shppath = folderPath + "/" + layername + ".shp";
|
|
|
+ try {
|
|
|
+ String[] exportField = exportFields.split(",");
|
|
|
+ //TODO 第一步:查询数据库表结构 除过包含geom和shape的字段
|
|
|
+ List<String> fields = yztMapper.getTableField(dbschema, tablename);
|
|
|
+ //TODO 第二步:查询数据库表详情 附带geomstr
|
|
|
+ List<Map<String, Object>> tableDetail = yztMapper.getTableYswfDetailJoinGeomstr(String.join(",", fields), tablename);
|
|
|
+ //TODO 第三步:导出shape
|
|
|
+ List<hfxjg> Hfxpd = yztMapper.getHfxpd(tablename);
|
|
|
+ //TODO 第一步:查询数据的分析模型数据源列表 仅查询状态为可用的管控数据列表
|
|
|
+ List<analyseModel> analyseModels = yztMapper.getAnalyseModel(tablename);
|
|
|
+ ExcelExport.export(fields, excelpath, tableDetail, modelname, exportField);
|
|
|
+ WordExport.export(fields, wordpath, tableDetail, modelname, exportField, layername, Hfxpd, analyseModels);
|
|
|
+ SpatiaLiteToShapefile.execute(fields, shppath, shpWkid, tableDetail);
|
|
|
+ //TODO 压缩包数据流下载
|
|
|
+ zipDirectory(folderPath, zippath);
|
|
|
+ FileToZipDownload.downloadLocalZipBuffered(response, zippath);
|
|
|
+// String[] filelist = {excelpath, wordpath};
|
|
|
+// FileToZipDownload.download(filelist, request, response);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+// return RequestResult.error("导出失败", e.toString());
|
|
|
+ }
|
|
|
+ // TODO 系统打开文件夹
|
|
|
+// try {
|
|
|
+// Runtime.getRuntime().exec("explorer.exe " + folderPath);
|
|
|
+// } catch (IOException e) {
|
|
|
+// e.printStackTrace();
|
|
|
+// }
|
|
|
+ }
|
|
|
+// return RequestResult.success("导出成功", 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void exportAchievementPackage(String tablename, String layername, HttpServletRequest request, HttpServletResponse response) {
|
|
|
+ String folderPath = localFilePath + "" + layername + "\\" + "package";
|
|
|
+ String zippath = localFilePath + "" + layername + "\\package.zip";
|
|
|
+ File folder = new File(folderPath);
|
|
|
+ if (!folder.exists()) {
|
|
|
+ folder.mkdirs();
|
|
|
+ }
|
|
|
+ if (Files.exists(Paths.get(zippath))) {
|
|
|
+ // TODO 系统打开文件夹
|
|
|
+ try {
|
|
|
+ FileToZipDownload.downloadLocalZipBuffered(response, zippath);
|
|
|
+// Runtime.getRuntime().exec("explorer.exe " + folderPath);
|
|
|
+// return null;
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+// return RequestResult.success("导出成功", 1);
|
|
|
+ } else {
|
|
|
+ String excelpath = folderPath + "/" + layername + ".xlsx";
|
|
|
+ String shppath = folderPath + "/" + layername + ".shp";
|
|
|
+ try {
|
|
|
+ tGeoserver geoserver = tGeoServerMapper.selectOne(null);
|
|
|
+ String geoserverurl = geoserver.getUri() + "/" + geoserver.getWorkspace() + "/wms";
|
|
|
+ QueryWrapper<tAnalyseVector> wrapper = new QueryWrapper();
|
|
|
+ wrapper.eq("tablename", tablename);
|
|
|
+ tAnalyseVector analyseVector = tAnalyseVectorMapper.selectOne(wrapper);
|
|
|
+ String analysefolder = analyseVector.getPath();
|
|
|
+ copyDirectory(Paths.get(analysefolder + "/" + qsx), Paths.get(folderPath + "/" + qsx));
|
|
|
+ copyDirectory(Paths.get(analysefolder + "/" + hsx), Paths.get(folderPath + "/" + hsx));
|
|
|
+ //TODO wanger 第一:导出shape数据文件
|
|
|
+ //第一步:查询数据库表结构 除过包含geom和shape的字段
|
|
|
+ List<String> fields = yztMapper.getTableField(dbschema, tablename);
|
|
|
+ //第二步:查询数据库表详情 附带geomstr
|
|
|
+ List<Map<String, Object>> tableDetail = yztMapper.getTableDetailJoinGeomstr(String.join(",", fields), tablename);
|
|
|
+ //第二步:导出shape
|
|
|
+ SpatiaLiteToShapefile.execute(fields, shppath, shpWkid, tableDetail);
|
|
|
+ //TODO wanger 第二:导出excel和矢量数据压覆图
|
|
|
+ AchievementPackage.exportAttributes(tablename, excelpath, "EPSG:" + shpWkid, mapExportFixed, mapExportSize, geoserverurl);
|
|
|
+ zipDirectory(folderPath, zippath);
|
|
|
+ FileToZipDownload.downloadLocalZipBuffered(response, zippath);
|
|
|
+ // TODO 系统打开文件夹
|
|
|
+// Runtime.getRuntime().exec("explorer.exe " + folderPath);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+// return RequestResult.error("导出失败", e.toString());
|
|
|
+ }
|
|
|
+// return RequestResult.success("导出成功", 1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RequestResult getAnalyseResult(String tablename) {
|
|
|
+ try {
|
|
|
+ List<hfxjg> Hfxpd = yztMapper.getHfxpd(tablename);
|
|
|
+ List<hfxjg> Hfxsm = yztMapper.getHfxsm(tablename);
|
|
|
+ Map hfxpd = new HashMap();
|
|
|
+ for (hfxjg cur : Hfxpd) {
|
|
|
+ hfxpd.put(cur.getType(), cur.getCount());
|
|
|
+ }
|
|
|
+ Map hfxsm = new HashMap();
|
|
|
+ for (hfxjg cur : Hfxsm) {
|
|
|
+ hfxsm.put(cur.getType(), cur.getCount());
|
|
|
+ }
|
|
|
+ Map res = new HashMap();
|
|
|
+ res.put("hfxpd", hfxpd);
|
|
|
+ res.put("hfxsm", hfxsm);
|
|
|
+ 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 = "";
|
|
|
+ if (file != null) {
|
|
|
+ String filename = file.getOriginalFilename();
|
|
|
+ String currentPath = localFilePath + "/" + filename;
|
|
|
+ try {
|
|
|
+ file.transferTo(new File(currentPath));
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ imageuri = serverhost + ":" + serverport + "/" + localFileProxy + "/" + filename;
|
|
|
+ } else if (StringUtils.isNotEmpty(image)) {
|
|
|
+ imageuri = image;
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ QueryWrapper<tBasemap> wrapper = new QueryWrapper();
|
|
|
+ if (StringUtils.isNotEmpty(id)) {
|
|
|
+ wrapper.eq("id", id);
|
|
|
+ }
|
|
|
+ tBasemapMapper.delete(wrapper);
|
|
|
+ tBasemap basemap = new tBasemap();
|
|
|
+ basemap.setId(id);
|
|
|
+ basemap.setImage(imageuri);
|
|
|
+ basemap.setIndexnum(indexnum);
|
|
|
+ basemap.setInvalid(invalid);
|
|
|
+ basemap.setName(name);
|
|
|
+ basemap.setServiceuri(serviceuri);
|
|
|
+ tBasemapMapper.insert(basemap);
|
|
|
+ return RequestResult.success("保存成功!", 1);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return RequestResult.error("保存失败!", 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RequestResult getbasemap(String name, String invalid) {
|
|
|
+ try {
|
|
|
+ QueryWrapper<tBasemap> wrapper = new QueryWrapper();
|
|
|
+ if (StringUtils.isNotEmpty(name)) {
|
|
|
+ wrapper.like("name", name);
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotEmpty(invalid)) {
|
|
|
+ wrapper.eq("invalid", invalid);
|
|
|
+ }
|
|
|
+ wrapper.orderByAsc("indexnum");
|
|
|
+ return RequestResult.success("查询成功!", tBasemapMapper.selectList(wrapper));
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return RequestResult.error("查询失败!", 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RequestResult deletebasemap(String id) {
|
|
|
+ try {
|
|
|
+ QueryWrapper<tBasemap> wrapper = new QueryWrapper();
|
|
|
+ if (StringUtils.isNotEmpty(id)) {
|
|
|
+ wrapper.eq("id", id);
|
|
|
+ }
|
|
|
+ tBasemapMapper.delete(wrapper);
|
|
|
+ return RequestResult.success("删除成功!", 1);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return RequestResult.error("删除失败!", 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 运行cmd
|
|
|
+ public String ExecuteCMD(String command) {
|
|
|
+ String res = "";
|
|
|
+ try {
|
|
|
+ // 执行命令
|
|
|
+ Process process = Runtime.getRuntime().exec(command);
|
|
|
+ // 获取命令输出
|
|
|
+ BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
|
|
|
+ String line;
|
|
|
+ while ((line = reader.readLine()) != null) {
|
|
|
+ System.out.println(line); // 输出命令结果
|
|
|
+ res = line;
|
|
|
+ }
|
|
|
+ // 等待命令执行结束
|
|
|
+ process.waitFor();
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void zipDirectory(String sourceDir, String zipFilePath) throws IOException {
|
|
|
+ Path sourcePath = Paths.get(sourceDir);
|
|
|
+ try (FileOutputStream fos = new FileOutputStream(zipFilePath);
|
|
|
+ ZipOutputStream zos = new ZipOutputStream(fos)) {
|
|
|
+
|
|
|
+ // 递归遍历目录
|
|
|
+ Files.walk(sourcePath).forEach(path -> {
|
|
|
+ // 计算文件或目录的相对路径
|
|
|
+ Path relativePath = sourcePath.relativize(path);
|
|
|
+ // 确保目录也被加入到ZIP文件中
|
|
|
+ if (Files.isDirectory(path)) {
|
|
|
+ try {
|
|
|
+ // 如果是目录,直接创建一个目录条目
|
|
|
+ zos.putNextEntry(new ZipEntry(relativePath.toString().replace("\\", "/") + "/"));
|
|
|
+ zos.closeEntry(); // 必须调用closeEntry(),即使只是目录
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ try (InputStream is = Files.newInputStream(path)) {
|
|
|
+ // 如果是文件,则创建文件条目
|
|
|
+ ZipEntry zipEntry = new ZipEntry(relativePath.toString().replace("\\", "/"));
|
|
|
+ zos.putNextEntry(zipEntry);
|
|
|
+
|
|
|
+ // 写入文件内容
|
|
|
+ byte[] buffer = new byte[1024];
|
|
|
+ int length;
|
|
|
+ while ((length = is.read(buffer)) > 0) {
|
|
|
+ zos.write(buffer, 0, length);
|
|
|
+ }
|
|
|
+ zos.closeEntry();
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 递归拷贝文件夹及其内容
|
|
|
+ public void copyDirectory(Path sourceDir, Path targetDir) throws IOException {
|
|
|
+ // 如果目标目录不存在,创建目标目录
|
|
|
+ if (Files.notExists(targetDir)) {
|
|
|
+ Files.createDirectories(targetDir);
|
|
|
+ }
|
|
|
+ // 遍历源目录的内容,并拷贝到目标目录
|
|
|
+ Files.walkFileTree(sourceDir, new SimpleFileVisitor<Path>() {
|
|
|
+ @Override
|
|
|
+ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
|
|
|
+ // 计算目标文件路径
|
|
|
+ Path targetFile = targetDir.resolve(sourceDir.relativize(file));
|
|
|
+ // 拷贝文件到目标目录,覆盖已存在的文件
|
|
|
+ Files.copy(file, targetFile, StandardCopyOption.REPLACE_EXISTING);
|
|
|
+ return FileVisitResult.CONTINUE;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
|
|
|
+ // 拷贝完目录内容后,拷贝该目录
|
|
|
+ Path targetDirForCurrentDir = targetDir.resolve(sourceDir.relativize(dir));
|
|
|
+ Files.createDirectories(targetDirForCurrentDir);
|
|
|
+ return FileVisitResult.CONTINUE;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+}
|