From 99ef95714f6b3ea5040901a3d1b26ab5e92101a1 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期日, 20 十一月 2022 15:30:53 +0800 Subject: [PATCH] 1 --- src/main/java/com/lf/server/service/data/DataLoaderService.java | 303 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 302 insertions(+), 1 deletions(-) diff --git a/src/main/java/com/lf/server/service/data/DataLoaderService.java b/src/main/java/com/lf/server/service/data/DataLoaderService.java index e1960c6..50ad4f8 100644 --- a/src/main/java/com/lf/server/service/data/DataLoaderService.java +++ b/src/main/java/com/lf/server/service/data/DataLoaderService.java @@ -1,7 +1,24 @@ package com.lf.server.service.data; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.lf.server.entity.all.BaseEntity; +import com.lf.server.entity.ctrl.TabMapperEntity; +import com.lf.server.entity.data.MetaEntity; +import com.lf.server.entity.data.MetaFileEntity; +import com.lf.server.helper.ClassHelper; +import com.lf.server.helper.ExcelHelper; +import com.lf.server.helper.FileHelper; +import com.lf.server.mapper.all.GeomBaseMapper; +import com.lf.server.service.all.BaseQueryService; import com.lf.server.service.all.BaseUploadService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; + +import java.io.File; +import java.lang.reflect.Field; +import java.sql.Timestamp; +import java.util.List; /** * 鏁版嵁鍏ュ簱 @@ -9,5 +26,289 @@ */ @Service public class DataLoaderService extends BaseUploadService { - // + @Autowired + MetaService metaService; + + @Autowired + MetaFileService metaFileService; + + private final static String XLS = ".xls"; + + private final static String MDB = ".mdb"; + + private final static String SHP = ".shp"; + + private final static String GDB = ".gdb"; + + /** + * 鎻掑叆鏂囦欢 + */ + public int insertFiles(MetaEntity entity, List<MetaFileEntity> list, List<TabMapperEntity> tabs) { + int count = 0; + try { + String temp = pathHelper.getConfig().getTempPath(); + String root = pathHelper.getUploadFullPath(); + + for (MetaFileEntity mf : list) { + String filePath = getFilePath(temp, root, mf); + if (null == filePath) { + continue; + } + + // 鍏冩暟鎹� + MetaEntity me = createMetaEntity(entity, mf); + if (metaService.insert(me) < 1) { + continue; + } + + // 鍏冩暟鎹枃浠� + MetaFileEntity mfe = createMetaFileEntity(me, mf, filePath); + if (metaFileService.insert(mfe) < 1) { + continue; + } + + // 鍏ュ簱 + if (null != me.getType() && insertDb(me, mfe, tabs) > 0) { + count++; + } + } + } catch (Exception ex) { + log.error(ex.getMessage(), ex); + } + + return count; + } + + /** + * 鑾峰彇鏂囦欢璺緞 + */ + private String getFilePath(String temp, String root, MetaFileEntity mf) { + // 绉诲姩鏂囦欢 + File file = new File(temp + File.separator + mf.getPath()); + File newFile = new File(root + File.separator + mf.getGuid()); + + // 鏂囦欢绫诲瀷 + String metaType = getType(mf.getName().toLowerCase()); + if (null == metaType) { + file.delete(); + return null; + } + + MetaFileEntity old = metaFileService.selectByGuid(mf.getGuid()); + + String filePath = null; + if (null == old) { + filePath = newFile.getPath(); + file.renameTo(newFile); + } else { + filePath = old.getPath(); + file.delete(); + } + + return filePath; + } + + /** + * 鍒涘缓鍏冩暟鎹疄浣� + */ + private MetaEntity createMetaEntity(MetaEntity entity, MetaFileEntity mf) { + MetaEntity me = new MetaEntity(); + me.setDepid(entity.getDepid()); + me.setDirid(entity.getDirid()); + me.setVerid(entity.getVerid()); + me.setType(getType(mf.getName().toLowerCase())); + me.setGather(entity.getGather()); + me.setBatch(entity.getBatch()); + me.setDescr(entity.getDescr()); + me.setName(mf.getName()); + me.setSizes(mf.getSizes()); + me.setCreateTime(entity.getCreateTime()); + me.setCreateUser(entity.getCreateUser()); + + return me; + } + + /** + * 鍒涘缓鍏冩暟鎹枃浠跺疄浣� + */ + private MetaFileEntity createMetaFileEntity(MetaEntity me, MetaFileEntity entity, String filePath) { + MetaFileEntity mfe = new MetaFileEntity(); + mfe.setName(entity.getName()); + mfe.setMetaid(me.getId()); + mfe.setGuid(entity.getGuid()); + mfe.setSizes(entity.getSizes()); + mfe.setPath(FileHelper.getRelativePath(filePath)); + mfe.setCreateUser(me.getCreateUser()); + mfe.setCreateTime(me.getCreateTime()); + + return mfe; + } + + /** + * 鑾峰彇鏂囦欢绫诲瀷 + */ + private String getType(String name) { + if (name.contains(XLS)) { + return "xls"; + } + if (name.contains(MDB)) { + return "mdb"; + } + if (name.contains(SHP)) { + return "shp"; + } + if (name.contains(GDB)) { + return "gdb"; + } + + return null; + } + + /** + * 鎻掑叆鏁版嵁搴� + */ + private Integer insertDb(MetaEntity me, MetaFileEntity mfe, List<TabMapperEntity> tabs) { + String root = pathHelper.getConfig().getUploadPath(); + switch (me.getType()) { + case "xls": + return insertXls(root, mfe, tabs); + case "mdb": + return insertMdb(root, mfe, tabs); + case "shp": + return insertShp(root, mfe, tabs); + case "gdb": + return insertGdb(root, mfe, tabs); + default: + return 0; + } + } + + /** + * 鎻掑叆Excel + */ + private Integer insertXls(String root, MetaFileEntity mfe, List<TabMapperEntity> tabs) { + TabMapperEntity tab = getTabEntity(mfe, tabs); + if (null == tab) { + return 0; + } + + BaseMapper baseMapper = ClassHelper.getBasicMapper(tab.getEntity()); + if (null == baseMapper) { + return 0; + } + + String className = ClassHelper.getClassName(baseMapper); + Class clazz = ClassHelper.getEntityClass(className); + if (null == clazz) { + return 0; + } + + List<?> list = ExcelHelper.readExcel(clazz, root + File.separator + mfe.getPath()); + if (null == list || list.isEmpty()) { + return 0; + } + + setCreateInfo(list, mfe); + + int rows = 0; + for (int i = 0, c = list.size(); i < c; i++) { + rows += baseMapper.insert(list.get(i)); + } + + if (baseMapper instanceof GeomBaseMapper) { + GeomBaseMapper geomBaseMapper = (GeomBaseMapper) baseMapper; + updateGeom(geomBaseMapper, list); + } + + return rows; + } + + /** + * 璁剧疆鍒涘缓淇℃伅 + */ + @SuppressWarnings("AlibabaRemoveCommentedCode") + private <T> void setCreateInfo(List<T> list, MetaFileEntity mfe) { + try { + for (T t : list) { + /*Field cuField = t.getClass().getDeclaredField("createUser"); + cuField.setAccessible(true); + cuField.set(t, mfe.getCreateUser()); + + Field ctField = t.getClass().getDeclaredField("createTime"); + ctField.setAccessible(true); + ctField.set(t, mfe.getCreateTime());*/ + + if (t instanceof BaseEntity) { + BaseEntity be = (BaseEntity) t; + be.setCreateUser(mfe.getCreateUser()); + be.setCreateTime(mfe.getCreateTime()); + } + } + } catch (Exception ex) { + log.error(ex.getMessage(), ex); + } + } + + /** + * 璁剧疆绌洪棿淇℃伅 + */ + private <T> void updateGeom(GeomBaseMapper geomBaseMapper, List<T> list) { + try { + String tabName = BaseQueryService.getTabName(geomBaseMapper); + for (T t : list) { + Field xField = t.getClass().getDeclaredField("x"); + xField.setAccessible(true); + double x = (double) xField.get(t); + + Field yField = t.getClass().getDeclaredField("y"); + yField.setAccessible(true); + double y = (double) yField.get(t); + + BaseEntity baseEntity = (BaseEntity) t; + Integer gid = baseEntity.getGid(); + + String wkt = String.format("POINT(%f %f)", x, y); + geomBaseMapper.updateGeom(tabName, gid, wkt); + } + } catch (Exception ex) { + log.error(ex.getMessage(), ex); + } + } + + /** + * 鎻掑叆MDB + */ + private Integer insertMdb(String root, MetaFileEntity mfe, List<TabMapperEntity> tabs) { + + return 0; + } + + /** + * 鎻掑叆SHP + */ + private Integer insertShp(String root, MetaFileEntity mfe, List<TabMapperEntity> tabs) { + + return 0; + } + + /** + * 鎻掑叆GDB + */ + private Integer insertGdb(String root, MetaFileEntity mfe, List<TabMapperEntity> tabs) { + + return 0; + } + + /** + * 鑾峰彇琛ㄦ槧灏勫疄浣撶被 + */ + private TabMapperEntity getTabEntity(MetaFileEntity mfe, List<TabMapperEntity> tabs) { + for (TabMapperEntity tab : tabs) { + if (tab.getFileName().equals(mfe.getName())) { + return tab; + } + } + + return null; + } } -- Gitblit v1.9.3