优化部份逻辑

This commit is contained in:
yizhaorong
2020-06-11 07:20:53 +08:00
parent bf57976fc6
commit c94ba2d7c3
7 changed files with 37 additions and 172 deletions
@@ -27,8 +27,6 @@ public class AppController {
@Resource
private AppService appService;
@Resource
private PathManager pathManager;
@RequiresAuthentication
@GetMapping("/apps")
@@ -34,6 +34,7 @@ import org.yzr.vo.PackageViewModel;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
@@ -47,8 +48,6 @@ public class PackageController {
@Resource
private PackageService packageService;
@Resource
private PathManager pathManager;
@Resource
private UserService userService;
@Resource
private StorageUtil storageUtil;
@@ -231,7 +230,8 @@ public class PackageController {
PackageViewModel viewModel = this.packageService.findById(id, request);
if (viewModel != null) {
response.setContentType("image/png");
QRCodeUtil.encode(viewModel.getPreviewURL()).withSize(250, 250).writeTo(response.getOutputStream());
InputStream inputStream = storageUtil.loadAsResource(viewModel.getIconKey()).getInputStream();
QRCodeUtil.encode(viewModel.getPreviewURL()).withSize(250, 250).withIcon(inputStream).writeTo(response.getOutputStream());
}
} catch (Exception e) {
e.printStackTrace();
+7 -19
View File
@@ -2,13 +2,11 @@ package org.yzr.service;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.yzr.dao.AppDao;
import org.yzr.dao.PackageDao;
import org.yzr.dao.StorageDao;
import org.yzr.dao.UserDao;
import org.yzr.model.App;
import org.yzr.model.Package;
@@ -27,7 +25,10 @@ import javax.transaction.Transactional;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@Service
public class AppService {
@@ -38,11 +39,9 @@ public class AppService {
@Resource
private PackageDao packageDao;
@Resource
private PathManager pathManager;
@Resource
private StorageDao storageDao;
@Resource
private StorageUtil storageUtil;
@Resource
private PackageService packageService;
@Transactional
public App save(App app, User user) {
@@ -125,20 +124,9 @@ public class AppService {
App app = this.appDao.findById(id).get();
if (app != null) {
app.getPackageList().forEach(aPackage -> {
Storage iconFile = aPackage.getIconFile();
this.storageUtil.delete(iconFile.getKey());
this.storageDao.deleteById(iconFile.getId());
Storage sourceFile = aPackage.getSourceFile();
this.storageUtil.delete(sourceFile.getKey());
this.storageDao.deleteById(sourceFile.getId());
this.packageDao.deleteById(aPackage.getId());
this.packageService.deletePackage(aPackage);
});
this.appDao.deleteById(id);
// 消除整个 APP 目录
String path = PathManager.getAppPath(app);
PathManager.deleteDirectory(path);
}
}
@@ -1,33 +1,23 @@
package org.yzr.service;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.yzr.dao.AppDao;
import org.yzr.dao.PackageDao;
import org.yzr.dao.StorageDao;
import org.yzr.dao.UserDao;
import org.yzr.model.App;
import org.yzr.model.Package;
import org.yzr.model.Storage;
import org.yzr.model.User;
import org.yzr.storage.StorageUtil;
import org.yzr.utils.CharUtil;
import org.yzr.utils.file.FileType;
import org.yzr.utils.file.PathManager;
import org.yzr.utils.image.ImageUtils;
import org.yzr.utils.parser.ParserClient;
import org.yzr.vo.PackageViewModel;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.transaction.Transactional;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Map;
import java.util.UUID;
@Service
public class PackageService {
@@ -35,13 +25,9 @@ public class PackageService {
@Resource
private PackageDao packageDao;
@Resource
private PathManager pathManager;
@Resource
private UserDao userDao;
@Resource
private AppDao appDao;
@Resource
private StorageUtil storageUtil;
@Resource
private StorageDao storageDao;
@Transactional
public Package save(Package aPackage) {
@@ -67,13 +53,22 @@ public class PackageService {
@Transactional
public void deleteById(String id) {
Package aPackage = this.packageDao.findById(id).get();
if (aPackage != null) {
this.packageDao.deleteById(id);
String path = PathManager.getFullPath(aPackage);
PathManager.deleteDirectory(path);
}
deletePackage(aPackage);
}
@Transactional
public void deletePackage(Package aPackage) {
if (aPackage != null) {
Storage iconFile = aPackage.getIconFile();
this.storageUtil.delete(iconFile.getKey());
this.storageDao.deleteById(iconFile.getId());
Storage sourceFile = aPackage.getSourceFile();
this.storageUtil.delete(sourceFile.getKey());
this.storageDao.deleteById(sourceFile.getId());
this.packageDao.deleteById(aPackage.getId());
}
}
@Transactional
public Package save(String filePath, Map<String, String> extra, User user) throws Exception {
Package aPackage = ParserClient.parse(filePath);
@@ -1,25 +1,12 @@
package org.yzr.utils.file;
import org.apache.commons.io.FileUtils;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import org.springframework.util.ResourceUtils;
import org.yzr.model.App;
import org.yzr.model.Package;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.net.InetAddress;
import java.util.UUID;
@Component
public class PathManager {
@Resource
private Environment environment;
private String httpsBaseURL;
private String httpBaseURL;
private String host;
private String scheme = "http";
@@ -38,24 +25,6 @@ public class PathManager {
return this.scheme + "://" + this.host;
}
/**
* 获取图标的临时路径
*
* @param aPackage
* @return
*/
public static String getTempIconPath(Package aPackage) {
if (aPackage == null) return null;
StringBuilder path = new StringBuilder();
path.append(FileUtils.getTempDirectoryPath()).append(File.separator).append(aPackage.getPlatform());
path.append(File.separator).append(aPackage.getBundleID());
// 如果目录不存在创建目录
File dir = new File(path.toString());
if (!dir.exists()) dir.mkdirs();
path.append(File.separator).append(aPackage.getCreateTime()).append(".png");
return path.toString();
}
/**
* 获取临时文件路径
* @param ext 扩展名
@@ -72,95 +41,6 @@ public class PathManager {
return path.toString();
}
/**
* 获取上传路径
*
* @return
*/
public static String getUploadPath() {
try {
//获取跟目录
File path = new File(ResourceUtils.getURL("classpath:").getPath());
if (!path.exists()) path = new File("");
//如果上传目录为/static/upload/则可以如下获取
File upload = new File(path.getAbsolutePath(), "static/upload/");
if (!upload.exists()) upload.mkdirs();
return upload.getPath();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获取 APP 路径
*
* @param app
* @return
*/
public static String getAppPath(App app) {
return getUploadPath() + File.separator + app.getPlatform() + File.separator + app.getBundleID() + File.separator;
}
/**
* 获取包的完整路径
*
* @param aPackage
* @return
*/
public static String getFullPath(Package aPackage) {
return getUploadPath() + File.separator + getRelativePath(aPackage);
}
/**
* 获取包的相对路径
*
* @param aPackage
* @return
*/
public static String getRelativePath(Package aPackage) {
if (aPackage == null) return null;
StringBuilder path = new StringBuilder();
path.append(aPackage.getPlatform()).append(File.separator);
path.append(aPackage.getApp().getOwner().getId()).append(File.separator);
path.append(aPackage.getBundleID()).append(File.separator);
path.append(aPackage.getCreateTime()).append(File.separator);
return path.toString();
}
/**
* 清除目录
*
* @param path
*/
public static void deleteDirectory(String path) {
File dir = new File(path);
if (dir.exists()) {
try {
FileUtils.deleteDirectory(dir);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 获取包所在路径
*
* @param aPackage
* @param isHttps
* @return
*/
public String getPackageResourceURL(Package aPackage, boolean isHttps) {
// getBaseURL() + "/fetch/" + aPackage.getSourceFile().getKey();
// String baseURL = getBaseURL(isHttps);
// String resourceURL = baseURL + aPackage.getPlatform() + "/" + aPackage.getBundleID()
// + "/" + aPackage.getCreateTime() + "/";
// return resourceURL;
return null;
}
/**
* 获取证书路径
*
@@ -39,14 +39,12 @@ public class APKParser implements PackageParser {
aPackage.setCreateTime(System.currentTimeMillis());
int iconCount = apkFile.getAllIcons().size();
if (iconCount > 0) {
IconFace icon = apkFile.getAllIcons().get(iconCount - 1);
String iconPath = PathManager.getTempIconPath(aPackage);
String iconPath = PathManager.getTempFilePath("png");
File iconFile = new File(iconPath);
IconFace icon = apkFile.getAllIcons().get(iconCount - 1);
FileUtils.writeByteArrayToFile(iconFile, icon.getData());
String sourceIconPath = PathManager.getTempFilePath("png");
PNGConverter.convert(iconPath, sourceIconPath);
Storage iconStorage = new Storage();
iconStorage.setUrl(sourceIconPath);
iconStorage.setUrl(iconPath);
aPackage.setIconFile(iconStorage);
}
apkFile.close();
@@ -36,6 +36,7 @@ public class PackageViewModel {
private List<String> devices;
private int deviceCount;
private String message;
private String iconKey;
public PackageViewModel(Package aPackage, HttpServletRequest request) {
String httpURL = PathManager.request(request).getBaseURL();
@@ -48,6 +49,7 @@ public class PackageViewModel {
this.name = aPackage.getName();
this.createTime = aPackage.getCreateTime();
this.buildVersion = aPackage.getBuildVersion();
this.iconKey = aPackage.getIconFile().getKey();
this.displaySize = String.format("%.2f MB", aPackage.getSize() / (1.0F * FileUtils.ONE_MB));
Date updateTime = new Date(this.createTime);
String displayTime = (new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(updateTime);
@@ -174,4 +176,8 @@ public class PackageViewModel {
public String getMessage() {
return message;
}
public String getIconKey() {
return iconKey;
}
}