From ed8c7a5effd0d423ce1118b680ecdca6fe732609 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期三, 02 七月 2025 16:43:13 +0800 Subject: [PATCH] Merge branch 'master' of http://192.168.11.205:9000/r/P2022036_Service --- src/main/java/com/lf/server/service/all/UploadAttachService.java | 326 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 297 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/lf/server/service/all/UploadAttachService.java b/src/main/java/com/lf/server/service/all/UploadAttachService.java index c5bdb3e..062f2c6 100644 --- a/src/main/java/com/lf/server/service/all/UploadAttachService.java +++ b/src/main/java/com/lf/server/service/all/UploadAttachService.java @@ -1,17 +1,22 @@ package com.lf.server.service.all; -import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.lf.server.controller.all.BaseController; -import com.lf.server.entity.all.HttpStatus; -import com.lf.server.entity.all.ResponseMsg; -import com.lf.server.entity.all.SettingData; -import com.lf.server.entity.all.StaticData; +import com.lf.server.entity.all.*; +import com.lf.server.entity.ctrl.KeyValueEntity; +import com.lf.server.entity.data.DownloadEntity; import com.lf.server.entity.data.MetaEntity; import com.lf.server.entity.data.MetaFileEntity; import com.lf.server.entity.sys.AttachEntity; 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.DownloadMapper; import com.lf.server.service.sys.AttachService; +import net.lingala.zip4j.ZipFile; +import net.lingala.zip4j.model.FileHeader; +import net.lingala.zip4j.model.ZipParameters; +import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -20,10 +25,8 @@ import javax.servlet.http.HttpServletResponse; import java.io.File; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.lang.reflect.Field; +import java.util.*; /** * 涓婁紶闄勪欢鏈嶅姟绫� @@ -37,13 +40,14 @@ @Autowired AttachService attachService; + @Autowired + DownloadMapper downloadMapper; + private static String tabs = "''"; - private static Map<String, String> attachTabs = new HashMap<>(); + public final static Map<String, String> ATTACH_TABS = new HashMap<>(); private final static Log log = LogFactory.getLog(UploadAttachService.class); - - private static final String NO_FILE = JSON.toJSONString(new ResponseMsg<String>(HttpStatus.NOT_FOUND, "鏂囦欢鎵句笉鍒�")); /** * 鑾峰彇琛ㄥ悕 @@ -67,11 +71,11 @@ List<String> keys = new ArrayList<>(); for (String str : strs) { - if (attachTabs.containsKey(str)) { + if (ATTACH_TABS.containsKey(str)) { continue; } - attachTabs.put(str, str.contains("bd.") ? "materiname" : "photono"); + ATTACH_TABS.put(str, str.contains("bd.") ? "materiname" : "photono"); keys.add("'" + str + "'"); } tabs = StringHelper.join(keys, ","); @@ -124,7 +128,7 @@ entity.setName(oldName); entity.setTab(tab); entity.setGuid(md5); - String subPath = PathHelper.getUploadPath() + File.separator + md5; + String subPath = PathHelper.getUploadPath() + File.separator + md5 + FileHelper.getExtension(oldName); entity.setPath(subPath); entity.setSizes(sizes); if (ue != null) { @@ -138,27 +142,34 @@ * 涓嬭浇鏂囦欢 */ public void download(String guid, HttpServletResponse res) { + download(guid, false, res); + } + + /** + * 涓嬭浇鏂囦欢 + */ + public void download(String guid, boolean inline, HttpServletResponse res) { try { if (StringHelper.isEmpty(guid)) { - WebHelper.write2Page(res, NO_FILE); + WebHelper.writeStr2Page(res, StaticData.NO_FILE); return; } AttachEntity entity = attachService.selectByGuid(guid); if (entity == null) { - WebHelper.write2Page(res, NO_FILE); + WebHelper.writeStr2Page(res, StaticData.NO_FILE); return; } - String file = pathHelper.getConfig().getUploadPath() + File.separator + entity.getPath(); - WebHelper.download(file, entity.getName(), res); - } catch (Exception ex) { - try { - String msg = JSON.toJSONString(new ResponseMsg<String>(HttpStatus.ERROR, "鏂囦欢涓嬭浇鍑洪敊")); - WebHelper.write2Page(res, msg); - } catch (Exception e) { - log.error(e.getMessage(), e); + String filePath = pathHelper.getConfig().getUploadPath() + File.separator + entity.getPath(); + File file = new File(filePath); + if (!file.exists() || file.isDirectory()) { + WebHelper.writeJson2Page(res, "鏂囦欢涓嶅瓨鍦�"); } + + WebHelper.download(filePath, entity.getName(), inline, res); + } catch (Exception ex) { + WebHelper.writeJson2Page(res, "鏂囦欢涓嬭浇鍑洪敊"); log.error(ex.getMessage(), ex); } } @@ -166,12 +177,19 @@ /** * 涓婁紶Excel闄勪欢 */ - public Map<String, Integer> uploadXlsAnnex(List<MetaEntity> ms, List<MetaFileEntity> list, String path) { - Map<String, Integer> map = new HashMap<>(3); + public List<KeyValueEntity> uploadXlsAnnex(UserEntity ue, List<MetaEntity> ms, List<MetaFileEntity> list, String path) { List<String> files = getAttachFiles(list, path); + if (files.size() == 0) { + return null; + } + List<KeyValueEntity> rs = new ArrayList<>(); + for (MetaEntity meta : ms) { + int rows = uploadXlsAnnex(ue, meta, files); + rs.add(new KeyValueEntity(meta.getName(), String.valueOf(rows))); + } - return map; + return rs; } /** @@ -183,7 +201,7 @@ for (MetaFileEntity mf : list) { if (mf.getName().contains(StaticData.ZIP)) { List<String> subs = getZipFiles(mf, path); - if (null == subs || subs.size() > 0) { + if (null != subs && subs.size() > 0) { files.addAll(subs); } continue; @@ -241,4 +259,254 @@ } } } + + /** + * 涓婁紶Excel闄勪欢 + */ + private int uploadXlsAnnex(UserEntity ue, MetaEntity meta, List<String> files) { + List<?> list = queryXlsData(meta); + if (null == list || list.size() == 0) { + return 0; + } + + Field field = getAnnexField(list.get(0), meta.getTab()); + String folder = meta.getName().split("\\.")[0].trim().toLowerCase() + File.separator; + + int rows = 0; + for (Object obj : list) { + String[] names = getNames(getAnnexName(obj, field)); + if (null == names || names.length == 0) { + continue; + } + + for (String name : names) { + String file = findAnnexFile(name, folder, files); + if (null == file) { + continue; + } + + rows += insertXlsAnnex(ue, meta, (BaseEntity) obj, file); + } + } + + return rows; + } + + /** + * 鑾峰彇鍚嶇О + */ + public static String[] getNames(String str) { + if (StringHelper.isEmpty(str)) { + return null; + } + + return str.replace("锛�", ",").replace("锛�", ",").split(","); + } + + /** + * 鏌ヨExcel鏁版嵁 + */ + private List<?> queryXlsData(MetaEntity meta) { + String entity = meta.getTab().substring(meta.getTab().indexOf(".") + 1).replace("_", "").toLowerCase(); + BasicMapper basicMapper = ClassHelper.getBasicMapper(entity); + if (null == basicMapper) { + return null; + } + + QueryWrapper wrapper = new QueryWrapper(); + wrapper.eq("parentid", meta.getEventid()); + + List<?> list = basicMapper.selectList(wrapper); + if (null == list || list.size() == 0) { + return null; + } + if (!(list.get(0) instanceof BaseEntity)) { + return null; + } + + return list; + } + + /** + * 鑾峰彇闄勪欢瀛楁 + */ + public static Field getAnnexField(Object obj, String tab) { + try { + String str = ATTACH_TABS.get(tab); + + Field field = obj.getClass().getDeclaredField(str); + field.setAccessible(true); + + return field; + } catch (Exception ex) { + return null; + } + } + + /** + * 鑾峰彇闄勪欢鍚嶇О + */ + public static String getAnnexName(Object obj, Field field) { + try { + Object val = field.get(obj); + + return null == val ? null : val.toString().trim(); + } catch (Exception ex) { + return null; + } + } + + /** + * 鏌ユ壘闄勪欢鏂囦欢 + */ + private String findAnnexFile(String name, String folder, List<String> files) { + name = File.separator + name.split("\\.")[0].trim().toLowerCase(); + for (String file : files) { + if (file.toLowerCase().contains(folder) && file.toLowerCase().contains(name)) { + return file; + } + } + for (String file : files) { + if (file.toLowerCase().contains(name)) { + return file; + } + } + + return null; + } + + /** + * 鎻掑叆Excel闄勪欢 + */ + private int insertXlsAnnex(UserEntity ue, MetaEntity meta, BaseEntity be, String file) { + File f = new File(file); + if (!f.exists() || f.isDirectory()) { + return 0; + } + + String md5 = FileHelper.getFileMd5(file); + AttachEntity old = attachService.selectByTabAndGuid(meta.getTab(), be.getEventid(), md5); + if (null != old) { + return 0; + } + + String fileName = FileHelper.getFileName(file); + double sizes = FileHelper.sizeToMb(f.length()); + + AttachEntity ae = getAttachEntity(ue, meta.getTab(), be.getEventid(), fileName, md5, sizes); + String targetPath = pathHelper.getConfig().getUploadPath() + File.separator + ae.getPath(); + + try { + FileUtils.copyFile(f, new File(targetPath)); + } catch (Exception ex) { + log.error(ex.getMessage(), ex); + } + + return attachService.insert(ae); + } + + /** + * 鑾峰彇闄勪欢瀹炰綋绫� + */ + protected AttachEntity getAttachEntity(UserEntity ue, String tabName, String eventid, String fileName, String md5, double sizes) { + AttachEntity entity = new AttachEntity(); + entity.setTab(tabName); + entity.setTabGuid(eventid); + entity.setName(fileName); + entity.setGuid(md5); + String subPath = PathHelper.getUploadPath() + File.separator + md5 + FileHelper.getExtension(fileName); + entity.setPath(subPath); + entity.setSizes(sizes); + if (ue != null) { + entity.setCreateUser(ue.getId()); + } + + return entity; + } + + /** + * 璇锋眰涓嬭浇 + */ + public String downloadReqForGuids(UserEntity ue, List<String> guids) { + List<AttachEntity> list = attachService.selectByGuids(guids); + + return downloadReq(ue, list); + } + + /** + * 璇锋眰涓嬭浇 + */ + public String downloadReqForTabGuids(UserEntity ue, String tab, List<String> guids) { + List<AttachEntity> list = attachService.selectByTabGuids(tab, guids); + + return downloadReq(ue, list); + } + + /** + * 璇锋眰涓嬭浇 + */ + protected String downloadReq(UserEntity ue, List<AttachEntity> list) { + if (null == list || list.isEmpty()) { + return null; + } + + String zipName = StringHelper.YMDHMS2_FORMAT.format(new Date()) + ".zip"; + String zipFile = pathHelper.getDownloadFullPath() + File.separator + zipName; + + ZipFile zip = Zip4jHelper.createZipFile(zipFile, null); + ZipParameters params = Zip4jHelper.getZipParams(false); + addZipFiles(zip, params, list); + + DownloadEntity downloadEntity = getDownloadEntity(ue, zipFile, null); + int rows = downloadMapper.insert(downloadEntity); + + return rows > 0 ? downloadEntity.getGuid() : null; + } + + /** + * 娣诲姞Zip鏂囦欢 + */ + private void addZipFiles(ZipFile zip, ZipParameters params, List<AttachEntity> list) { + int i = 1; + String uploadPath = pathHelper.getConfig().getUploadPath(); + for (AttachEntity ae : list) { + try { + String filePath = uploadPath + File.separator + ae.getPath(); + + File file = new File(filePath); + if (!file.exists() || file.isDirectory()) { + continue; + } + + zip.addFile(file, params); + FileHeader header = zip.getFileHeader(file.getName()); + if (null != header) { + zip.renameFile(header, i + "_" + ae.getName()); + } + } catch (Exception ex) { + log.error(ex.getMessage(), ex); + } + } + } + + /** + * 鑾峰彇涓嬭浇瀹炰綋绫� + */ + private DownloadEntity getDownloadEntity(UserEntity ue, String file, String pwd) { + DownloadEntity de = new DownloadEntity(); + de.setName(FileHelper.getFileName(file)); + // 1-Shp鏂囦欢锛�2-涓撻鍥撅紝3-鍏冩暟鎹紝4-涓氬姟鏁版嵁锛�5-绠¢亾鍒嗘瀽锛�6-缁熻鎶ュ憡锛�7-闄勪欢鏂囦欢锛�8-鐡︾墖鏂囦欢 + de.setType(7); + de.setSizes(FileHelper.sizeToMb(new File(file).length())); + de.setDepid(ue.getDepid()); + de.setDcount(0); + de.setPwd(pwd); + de.setUrl(FileHelper.getRelativePath(file)); + de.setDescr("闄勪欢鏂囦欢"); + de.setGuid(FileHelper.getFileMd5(file)); + de.setCreateUser(ue.getId()); + // de.setGeom(null) + + return de; + } } -- Gitblit v1.9.3