package com.lf.server.service.data;
|
|
import com.lf.server.entity.all.BaseEntity;
|
import com.lf.server.entity.all.StaticData;
|
import com.lf.server.entity.data.*;
|
import com.lf.server.entity.sys.UserEntity;
|
import com.lf.server.helper.*;
|
import com.lf.server.mapper.all.BasicMapper;
|
import com.lf.server.mapper.data.UploadMapper;
|
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 javax.servlet.http.HttpServletRequest;
|
import java.io.File;
|
import java.sql.Timestamp;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
/**
|
* 数据上传服务类
|
* @author WWW
|
*/
|
@Service
|
public class UploadService extends BaseUploadService implements UploadMapper {
|
@Autowired
|
UploadMapper uploadMapper;
|
|
@Autowired
|
FmeService fmeService;
|
|
@Autowired
|
MetaService metaService;
|
|
@Override
|
public List<CoordEntity> selectCoords(String zoning) {
|
return uploadMapper.selectCoords(zoning);
|
}
|
|
@Override
|
public Integer selectCount4Coord(String epsgCode) {
|
return uploadMapper.selectCount4Coord(epsgCode);
|
}
|
|
@Override
|
public List<DirEntity> selectProject() {
|
return uploadMapper.selectProject();
|
}
|
|
@Override
|
public List<FmeLogEntity> selectFmeLog(String parentid) {
|
return uploadMapper.selectFmeLog(parentid);
|
}
|
|
/**
|
* 插入文件
|
*/
|
public void insertFiles(UserEntity ue, List<MetaFileEntity> list, HttpServletRequest req) {
|
checkMetaFiles(ue, list);
|
dataLoader(list);
|
excelLoader(list, req);
|
}
|
|
/**
|
* 检查元数据文件
|
*/
|
private void checkMetaFiles(UserEntity ue, List<MetaFileEntity> list) {
|
Timestamp createTime = WebHelper.getCurrentTimestamp();
|
String tempPath = pathHelper.getConfig().getTempPath();
|
|
for (MetaFileEntity mf : list) {
|
mf.setCreateUser(ue.getId());
|
mf.setCreatetime(createTime);
|
mf.setDepid(ue.getDepid());
|
mf.setPath(tempPath + File.separator + mf.getPath());
|
|
File f = new File(mf.getPath());
|
if (!f.exists()) {
|
mf.setMsg("文件丢失");
|
mf.setRows(-1);
|
}
|
}
|
}
|
|
/**
|
* 加载数据
|
*/
|
private void dataLoader(List<MetaFileEntity> list) {
|
loadData(list);
|
copyFiles(list);
|
insertMetas(list);
|
}
|
|
/**
|
* 加载数据
|
*/
|
private void loadData(List<MetaFileEntity> list) {
|
for (MetaFileEntity mf : list) {
|
if (StaticData.SHP.equals(mf.getExtName()) || StaticData.GDB.equals(mf.getExtName())) {
|
loadSpatialData(mf);
|
}
|
}
|
}
|
|
/**
|
* 加载空间数据
|
*/
|
private void loadSpatialData(MetaFileEntity mf) {
|
BasicMapper basicMapper = ClassHelper.getBasicMapper(mf.getEntity());
|
if (null == basicMapper) {
|
return;
|
}
|
|
String tabName = BaseQueryService.getTabName(basicMapper);
|
String className = ClassHelper.getClassName(basicMapper);
|
Class clazz = ClassHelper.getEntityClass(className);
|
if (null == clazz || null == tabName) {
|
return;
|
}
|
|
List<?> list = null;
|
if (StaticData.SHP.equals(mf.getExtName())) {
|
list = ShpHelper.readData(clazz, mf.getPath());
|
} else {
|
GdbHelper.readData(clazz, mf.getPath(), mf.getTab());
|
}
|
if (null == list || list.isEmpty()) {
|
return;
|
}
|
setCreateInfo(list, mf);
|
|
int rows = basicMapper.insertBatch(list);
|
if (rows > 0) {
|
mf.setTab(tabName);
|
mf.setRows(rows);
|
}
|
}
|
|
/**
|
* 设置创建信息
|
*/
|
private <T> void setCreateInfo(List<T> list, MetaFileEntity mf) {
|
try {
|
if (!(list.get(0) instanceof BaseEntity)) {
|
return;
|
}
|
|
for (T t : list) {
|
BaseEntity be = (BaseEntity) t;
|
be.setEventid(StringHelper.getGuid());
|
be.setParentid(mf.getEventid());
|
be.setDirid(mf.getDirid());
|
be.setDepid(mf.getDepid());
|
be.setVerid(mf.getVerid());
|
be.setCreateuser(mf.getCreateUser());
|
be.setCreatetime(mf.getCreatetime());
|
}
|
} catch (Exception ex) {
|
log.error(ex.getMessage(), ex);
|
}
|
}
|
|
/**
|
* 复制文件
|
*/
|
private void copyFiles(List<MetaFileEntity> list) {
|
List<String> gdbList = new ArrayList<>();
|
for (MetaFileEntity mf : list) {
|
switch (mf.getExtName()) {
|
case StaticData.MPT:
|
copyMultiFile(mf, StaticData.MPT_EXT);
|
break;
|
case StaticData.IMG:
|
copyMultiFile(mf, StaticData.IMG_EXT);
|
break;
|
case StaticData.TIF:
|
copyMultiFile(mf, StaticData.TIF_EXT);
|
break;
|
case StaticData.TIFF:
|
copyMultiFile(mf, StaticData.TIFF_EXT);
|
break;
|
case StaticData.SHP:
|
copyMultiFile(mf, StaticData.SHP_EXT);
|
break;
|
case StaticData.GDB:
|
if (gdbList.contains(mf.getPath())) {
|
MetaEntity meta = metaService.selectByGuid(mf.getGuid());
|
if (null != meta) {
|
mf.setPath(meta.getPath());
|
}
|
continue;
|
}
|
|
gdbList.add(mf.getPath());
|
copyFolderFile(mf);
|
break;
|
default:
|
copySingleFile(mf);
|
break;
|
}
|
}
|
}
|
|
/**
|
* 复制单个文件
|
*/
|
private int copySingleFile(MetaFileEntity mf) {
|
File file = new File(mf.getPath());
|
if (!file.exists()) {
|
mf.setMsg("文件丢失");
|
return -1;
|
}
|
|
MetaEntity old = metaService.selectByGuid(mf.getGuid());
|
if (null != old) {
|
mf.setMsg("文件已存在");
|
file.delete();
|
return 0;
|
}
|
|
String uploadPath = pathHelper.getUploadFullPath();
|
String targetPath = uploadPath + File.separator + mf.getGuid() + mf.getExtName();
|
|
File newFile = new File(targetPath);
|
if (newFile.exists()) {
|
file.delete();
|
return 0;
|
}
|
|
file.renameTo(newFile);
|
|
String subPath = FileHelper.getRelativePath(targetPath);
|
mf.setPath(subPath);
|
|
return 1;
|
}
|
|
/**
|
* 复制多个文件
|
*/
|
private void copyMultiFile(MetaFileEntity mf, List<String> extList) {
|
String path = mf.getPath();
|
|
int status = copySingleFile(mf);
|
if (status < 1) {
|
for (int i = 0, c = extList.size(); i < c; i++) {
|
String subPath = path.replace(mf.getExtName(), extList.get(i));
|
File file = new File(subPath);
|
if (file.exists()) {
|
file.delete();
|
}
|
}
|
return;
|
}
|
|
String uploadPath = pathHelper.getConfig().getUploadPath();
|
for (int i = 0, c = extList.size(); i < c; i++) {
|
String sourcePath = path.replace(mf.getExtName(), extList.get(i));
|
File file = new File(sourcePath);
|
if (!file.exists()) {
|
continue;
|
}
|
|
String targetPath = uploadPath + File.separator + mf.getPath().replace(mf.getExtName(), extList.get(i));
|
File newFile = new File(targetPath);
|
if (newFile.exists()) {
|
continue;
|
}
|
|
file.renameTo(newFile);
|
}
|
}
|
|
/**
|
* 复制文件夹文件
|
*/
|
private void copyFolderFile(MetaFileEntity mf) {
|
File file = new File(mf.getPath());
|
if (!file.exists()) {
|
mf.setMsg("文件丢失");
|
return;
|
}
|
|
MetaEntity old = metaService.selectByGuid(mf.getGuid());
|
if (null != old) {
|
mf.setMsg("文件已存在");
|
FileHelper.deleteFiles(file);
|
return;
|
}
|
|
String uploadPath = pathHelper.getUploadFullPath();
|
String targetPath = uploadPath + File.separator + mf.getGuid() + mf.getExtName();
|
|
File newFile = new File(targetPath);
|
if (newFile.exists() && newFile.isDirectory()) {
|
FileHelper.deleteFiles(file);
|
return;
|
}
|
|
newFile.mkdirs();
|
File[] files = file.listFiles();
|
if (null == files || files.length == 0) {
|
return;
|
}
|
|
for (File f : files) {
|
String subPath = targetPath + File.separator + FileHelper.getFileName(f.getPath());
|
f.renameTo(new File(subPath));
|
}
|
|
String subPath = FileHelper.getRelativePath(targetPath);
|
mf.setPath(subPath);
|
}
|
|
/**
|
* 插入元数据
|
*/
|
private void insertMetas(List<MetaFileEntity> list) {
|
for (MetaFileEntity mf : list) {
|
//
|
}
|
}
|
|
/**
|
* Excel入库
|
*/
|
private String excelLoader(List<MetaFileEntity> list, HttpServletRequest req) {
|
List<MetaFileEntity> xlsList = getExcelFiles(list);
|
if (xlsList.isEmpty()) {
|
return "";
|
}
|
|
String guid = null;
|
try {
|
MetaFileEntity meta = getExcelMeta(xlsList);
|
guid = fmeService.excelLoader(meta, req);
|
} catch (Exception ex) {
|
log.error(ex.getMessage(), ex);
|
}
|
|
return guid;
|
}
|
|
/**
|
* 获取Excel元数据文件
|
*/
|
private List<MetaFileEntity> getExcelFiles(List<MetaFileEntity> list) {
|
List<MetaFileEntity> xlsList = new ArrayList<>();
|
for (MetaFileEntity mf : list) {
|
boolean isXls = StaticData.XLS.equals(mf.getExtName()) || StaticData.XLSX.equals(mf.getExtName());
|
if (mf.getRows() > -1 && isXls) {
|
xlsList.add(mf);
|
}
|
}
|
|
return xlsList;
|
}
|
|
/**
|
* 获取Excel的元数据
|
*/
|
private MetaFileEntity getExcelMeta(List<MetaFileEntity> xlsList) {
|
List<String> pathList = new ArrayList<>();
|
List<String> dirList = new ArrayList<>();
|
List<String> pidList = new ArrayList<>();
|
|
for (MetaFileEntity mf : xlsList) {
|
pathList.add(mf.getPath());
|
dirList.add(mf.getDirid() + "");
|
pidList.add(mf.getEventid());
|
}
|
|
MetaFileEntity meta = new MetaFileEntity();
|
meta.setPath(StringHelper.join(pathList, ","));
|
meta.setEpsgCode(xlsList.get(0).getEpsgCode());
|
meta.setName(StringHelper.join(dirList, ","));
|
meta.setDepid(xlsList.get(0).getDepid());
|
meta.setVerid(xlsList.get(0).getVerid());
|
meta.setCreateUser(xlsList.get(0).getCreateUser());
|
meta.setEventid(StringHelper.join(pidList, ","));
|
|
return meta;
|
}
|
}
|