package com.lf.server.service.data; import com.lf.server.entity.all.RedisCacheKey; import com.lf.server.entity.data.DirEntity; import com.lf.server.helper.PathHelper; import com.lf.server.helper.StringHelper; import com.lf.server.helper.Zip4jHelper; import com.lf.server.mapper.data.DirMapper; import com.lf.server.service.all.RedisService; import net.lingala.zip4j.ZipFile; import net.lingala.zip4j.model.ZipParameters; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.io.File; import java.util.ArrayList; import java.util.List; /** * dir * @author sws * @date 2022-09-24 */ @Service public class DirService implements DirMapper { @Resource PathHelper pathHelper; @Resource DirMapper dirMapper; @Resource RedisService redisService; @Override public Integer insert(DirEntity dirEntity) { clearCache(); return dirMapper.insert(dirEntity); } @Override public Integer inserts(List dirEntity) { clearCache(); return dirMapper.inserts(dirEntity); } @Override public Integer deleteDir(int id) { clearCache(); return dirMapper.deleteDir(id); } @Override public Integer deleteDirs(List ids) { clearCache(); return dirMapper.deleteDirs(ids); } @Override public Integer update(DirEntity dirEntity) { clearCache(); return dirMapper.update(dirEntity); } @Override public Integer updates(List dirEntity) { clearCache(); return dirMapper.updates(dirEntity); } @Override public DirEntity selectDir(int id) { return dirMapper.selectDir(id); } @Override public DirEntity selectByCode(String code) { return dirMapper.selectByCode(code); } @Override public List selectDirAll() { String key = RedisCacheKey.dataDirKey("selectDirAll"); List list = redisService.getListByKey(key); if (null == list) { list = dirMapper.selectDirAll(); redisService.saveListByKey(key, list); } return list; } @Override public List selectDirRoot() { String key = RedisCacheKey.dataDirKey("selectDirRoot"); List list = redisService.getListByKey(key); if (null == list) { list = dirMapper.selectDirRoot(); redisService.saveListByKey(key, list); } return list; } @Override public List selectProject(String name) { name = StringHelper.getLikeUpperStr(name); return dirMapper.selectProject(name); } @Override public List selectRecursiveById(Integer id) { List list = dirMapper.selectRecursiveById(id); return null == list ? new ArrayList<>() : list; } @Override public List selectDirsForPrj() { String key = RedisCacheKey.dataDirKey("selectDirsForPrj"); List list = redisService.getListByKey(key); if (null == list) { list = dirMapper.selectDirsForPrj(); redisService.saveListByKey(key, list); } return list; } @Override public Integer selectMaxOrderNum() { return dirMapper.selectMaxOrderNum(); } @Override public DirEntity selectDirByName(String name, Integer pid) { return dirMapper.selectDirByName(name, pid); } @Override public String selectNameByCode(String code) { return dirMapper.selectNameByCode(code); } /** * 清除缓存 */ public void clearCache() { String key = RedisCacheKey.dataDirKey(""); redisService.clearKeys(key); } /** * 创建数据目录 */ public String createDirs(int id) throws Exception { List list = selectRecursiveById(id); if (null == list || list.isEmpty()) { return null; } String tempPath = pathHelper.getTempPath(); for (DirEntity dir : list) { String path = tempPath + File.separator + dir.getFullName(); File f = new File(path); if (f.exists() && f.isDirectory()) { continue; } f.mkdirs(); } File file = new File(tempPath + File.separator + list.get(0).getName()); if (!file.exists() || !file.isDirectory()) { file.mkdirs(); } String zipFile = tempPath + File.separator + list.get(0).getName() + ".zip"; ZipFile zip = Zip4jHelper.createZipFile(zipFile, null); ZipParameters params = Zip4jHelper.getZipParams(false); zip.addFolder(file, params); return zipFile; } }