月球大数据地理空间分析展示平台-【后端】-月球后台服务
1
13693261870
2024-11-17 796b44ea813a1133beae4f3a67f1c0263510c0c7
src/main/java/com/moon/server/service/data/UploadService.java
@@ -1,31 +1,29 @@
package com.moon.server.service.data;
import com.google.common.collect.Lists;
import com.moon.server.entity.all.BaseEntity;
import com.moon.server.entity.all.StaticData;
import com.moon.server.entity.data.*;
import com.moon.server.entity.sys.UserEntity;
import com.moon.server.helper.*;
import com.moon.server.mapper.all.BasicMapper;
import com.moon.server.mapper.data.UploadMapper;
import com.moon.server.service.all.BaseQueryService;
import com.moon.server.service.all.BaseUploadService;
import com.moon.server.service.sys.DepService;
import com.moon.server.entity.data.*;
import com.moon.server.helper.*;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
/**
 * 数据上传服务类
 *
 * @author WWW
 */
@Service
@SuppressWarnings("ALL")
public class UploadService extends BaseUploadService implements UploadMapper {
    @Autowired
    UploadMapper uploadMapper;
@@ -41,6 +39,9 @@
    @Autowired
    DirService dirService;
    @Resource
    ReadRasterService readRasterService;
    @Override
    public List<CoordEntity> selectCoords(String zoning) {
@@ -62,23 +63,14 @@
        return uploadMapper.selectFmeLog(parentid);
    }
    /**
     * 插入文件
     */
    public void insertFiles(UserEntity ue, List<MetaFileEntity> list, HttpServletRequest req) {
        checkMetaFiles(ue, list);
        List<MetaFileEntity> xlsList = getExcelFiles(list);
        readRasterInfo(list);
        loadData(list);
        copyFiles(list);
        insertMetas(list);
        if (xlsList.size() > 0) {
            String guid = excelLoader(xlsList, req);
        }
    }
    /**
     * 检查元数据文件
     */
    private void checkMetaFiles(UserEntity ue, List<MetaFileEntity> list) {
        Timestamp createTime = WebHelper.getCurrentTimestamp();
        String tempPath = pathHelper.getConfig().getTempPath();
@@ -94,6 +86,9 @@
            if (!f.exists()) {
                mf.setMsg("文件丢失");
            }
            if (f.exists() && StringHelper.isNull(mf.getGuid())) {
                mf.setGuid(FileHelper.getFileMd5(f.getPath()));
            }
            MetaEntity old = metaService.selectByGuid(mf.getGuid(), getDirCode(mf), null);
            if (null != old) {
@@ -102,9 +97,18 @@
        }
    }
    /**
     * 获取目录编码
     */
    private void readRasterInfo(List<MetaFileEntity> list) {
        for (MetaFileEntity mf : list) {
            if (null != mf.getMsg()) {
                continue;
            }
            if (StaticData.RASTER_EXT.contains("." + mf.getType())) {
                readRasterService.readRasterInfo(mf, mf.getPath());
            }
        }
    }
    private String getDirCode(MetaFileEntity mf) {
        if (StringHelper.isEmpty(mf.getDircode())) {
            return null;
@@ -113,9 +117,6 @@
        return StringHelper.getRightLike(mf.getDircode().substring(0, 2));
    }
    /**
     * 获取Excel元数据文件
     */
    private List<MetaFileEntity> getExcelFiles(List<MetaFileEntity> list) {
        List<MetaFileEntity> xlsList = new ArrayList<>();
        for (MetaFileEntity mf : list) {
@@ -137,16 +138,10 @@
        return xlsList;
    }
    /**
     * 是/否为Excel
     */
    private boolean isExcel(MetaFileEntity mf) {
        return StaticData.XLS.equals(mf.getExtName()) || StaticData.XLSX.equals(mf.getExtName());
    }
    /**
     * 获取Xls目录
     */
    private String getXlsPath(String filePath) {
        String tempPath = pathHelper.getConfig().getTempPath() + File.separator;
        String subPath = filePath.substring(tempPath.length());
@@ -160,9 +155,6 @@
        return subPath;
    }
    /**
     * 复制Xls文件
     */
    private String copyXlsFile(String xlsBasePath, int i, MetaFileEntity mf) {
        try {
            String xlsPath = xlsBasePath + File.separator + i;
@@ -183,9 +175,6 @@
        }
    }
    /**
     * 加载数据
     */
    private void loadData(List<MetaFileEntity> list) {
        for (MetaFileEntity mf : list) {
            if (null != mf.getMsg() || StringHelper.isEmpty(mf.getEntity())) {
@@ -197,9 +186,6 @@
        }
    }
    /**
     * 加载空间数据
     */
    public void loadSpatialData(MetaFileEntity mf) {
        BasicMapper basicMapper = ClassHelper.getBasicMapper(mf.getEntity());
        if (null == basicMapper) {
@@ -227,16 +213,17 @@
        List<?> list;
        if (StaticData.SHP.equals(mf.getExtName())) {
            list = ShpHelper.readData(clazz, mf.getPath());
            list = ShpHelper.readData(clazz, mf.getPath(), true);
        } else {
            list = GdbHelper.readData(clazz, mf.getPath(), mf.getTab());
            list = GdbHelper.readData(clazz, mf.getPath(), mf.getTab(), true);
        }
        if (null == list || list.isEmpty()) {
            return;
        }
        mf.setRecords(list.size());
        setCreateInfo(list, mf);
        int rows = basicMapper.insertBatch(list);
        int rows = batchInserts(basicMapper, list);
        if (rows > 0) {
            mf.setEntity(mf.getTab());
            mf.setTab(tabName);
@@ -244,9 +231,21 @@
        }
    }
    /**
     * 设置创建信息
     */
    private <T> int batchInserts(BasicMapper basicMapper, List<T> list) {
        int rows = 0;
        //int count = (int) Math.ceil(list.size() / StaticData.D100)
        List<List<T>> subLists = Lists.partition(list, StaticData.I50);
        for (List<T> sub : subLists) {
            try {
                rows += basicMapper.insertBatch(sub);
            } catch (Exception ex) {
                log.error(ex);
            }
        }
        return rows;
    }
    private <T> void setCreateInfo(List<T> list, MetaFileEntity mf) {
        try {
            if (!(list.get(0) instanceof BaseEntity)) {
@@ -268,9 +267,6 @@
        }
    }
    /**
     * 复制文件
     */
    private void copyFiles(List<MetaFileEntity> list) {
        List<String> gdbList = new ArrayList<>();
        for (MetaFileEntity mf : list) {
@@ -285,6 +281,9 @@
                case StaticData.JPG:
                    copyMultiFile(mf, StaticData.JPG_EXT);
                    break;
                case StaticData.JP2:
                    copyMultiFile(mf, StaticData.JP2_EXT);
                    break;
                case StaticData.IMG:
                    copyMultiFile(mf, StaticData.IMG_EXT);
                    break;
@@ -296,6 +295,9 @@
                    break;
                case StaticData.SHP:
                    copyMultiFile(mf, StaticData.SHP_EXT);
                    break;
                case StaticData.OSGB:
                    copyFolderFile(mf);
                    break;
                case StaticData.GDB:
                    if (gdbList.contains(mf.getPath())) {
@@ -316,9 +318,6 @@
        }
    }
    /**
     * 复制单个文件
     */
    private int copySingleFile(MetaFileEntity mf) {
        File file = new File(mf.getPath());
        if (!file.exists()) {
@@ -351,9 +350,6 @@
        return 1;
    }
    /**
     * 设置旧元数据信息
     */
    private void setOldMeta(MetaFileEntity mf, MetaEntity old) {
        mf.setPath(old.getPath());
        mf.setTab(old.getTab());
@@ -361,9 +357,6 @@
        mf.setEntity(old.getEventid());
    }
    /**
     * 复制多个文件
     */
    private void copyMultiFile(MetaFileEntity mf, List<String> extList) {
        String path = mf.getPath();
        int status = copySingleFile(mf);
@@ -396,9 +389,6 @@
        }
    }
    /**
     * 复制文件夹文件
     */
    private void copyFolderFile(MetaFileEntity mf) {
        File file = new File(mf.getPath());
        if (!file.exists()) {
@@ -425,22 +415,15 @@
            return;
        }
        newFile.mkdirs();
        File[] files = file.listFiles();
        if (null == files || files.length == 0) {
            return;
        }
        for (File f : files) {
            String subFile = targetPath + File.separator + FileHelper.getFileName(f.getPath());
            f.renameTo(new File(subFile));
        try {
            // newFile.mkdirs()
            FileUtils.moveDirectory(file, newFile);
        } catch (Exception ex) {
            log.error(ex);
        }
        mf.setPath(subPath);
    }
    /**
     * 根据GUID查找路径
     */
    private String findPathByGuid(List<MetaFileEntity> list, MetaFileEntity mf) {
        for (MetaFileEntity meta : list) {
            if (meta.getGuid().equals(mf.getGuid()) && !meta.getPath().equals(mf.getPath())) {
@@ -451,34 +434,35 @@
        return null;
    }
    /**
     * 创建文件链接
     */
    private void createFileLink(String source, String target) {
        String cmd = String.format("cmd /c mklink \"%s\" \"%s\"", target, source);
        WebHelper.exec(cmd);
    }
    /**
     * 插入元数据
     */
    private void insertMetas(List<MetaFileEntity> list) {
        int metaId = insertParentMeta(list);
        List<String> guids = new ArrayList<>();
        for (MetaFileEntity mf : list) {
            if (null != mf.getMsg()) {
                continue;
            }
            MetaEntity me = createMeta(mf, metaId);
            metaService.insert(me);
            if (StaticData.NGDB.equals(me.getType())) {
                if (guids.contains(me.getGuid())) {
                    me.setIsmeta((short) -1);
                } else {
                    guids.add(me.getGuid());
                }
            }
            mf.setMsg(me.getId() > 0 ? "成功" : "失败");
            metaService.insert(me);
            String err = mf.getRows() < mf.getRecords() ? "(" + (mf.getRecords() - mf.getRows()) + " 条失败)" : "";
            mf.setMsg(me.getId() > 0 ? String.format("成功%s", err) : "失败");
        }
    }
    /**
     * 创建元数据
     */
    private MetaEntity createMeta(MetaFileEntity mf, int metaId) {
        MetaEntity me = new MetaEntity();
        me.setMetaid(metaId);
@@ -500,13 +484,23 @@
        me.setRows(mf.getRows());
        me.setCreateUser(mf.getCreateUser());
        me.setCreateTime(mf.getCreateTime());
        // 栅格信息
        me.setGeom(StringHelper.isEmpty(mf.getGeom()) ? "null" : mf.getGeom());
        me.setSensortype(mf.getSensortype());
        me.setAcqTime(mf.getAcqTime());
        me.setResolution(mf.getResolution());
        me.setGridsize(mf.getGridsize());
        me.setCoorSys(mf.getCoorSys());
        me.setEpsg(mf.getEpsg());
        me.sethDatum(mf.gethDatum());
        me.setMataType(mf.getMataType());
        me.setBands(mf.getBands());
        me.setBandType(mf.getBandType());
        me.setCt(mf.getCt());
        return me;
    }
    /**
     * 插入父元数据
     */
    private int insertParentMeta(List<MetaFileEntity> list) {
        for (MetaFileEntity mf : list) {
            if (null != mf.getMsg() || !mf.getIsMeta()) {
@@ -524,9 +518,6 @@
        return 0;
    }
    /**
     * Excel入库
     */
    private String excelLoader(List<MetaFileEntity> xlsList, HttpServletRequest req) {
        try {
            MetaFileEntity xlsMeta = getExcelMeta(xlsList);
@@ -540,9 +531,6 @@
        return null;
    }
    /**
     * 获取Excel的元数据
     */
    private MetaFileEntity getExcelMeta(List<MetaFileEntity> xlsList) {
        if (null == xlsList || xlsList.isEmpty()) {
            return null;