|
@@ -3,7 +3,14 @@ package com.qmth.distributed.print.business.service.impl;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.qmth.boot.tools.io.ZipReader;
|
|
|
+import com.qmth.boot.tools.io.ZipWriter;
|
|
|
import com.qmth.distributed.print.business.bean.upgrade.Mainfest;
|
|
|
+import com.qmth.distributed.print.business.bean.upgrade.MainfestApp;
|
|
|
+import com.qmth.distributed.print.business.bean.upgrade.MainfestScript;
|
|
|
+import com.qmth.distributed.print.business.bean.upgrade.result.ClientInstallResult;
|
|
|
+import com.qmth.distributed.print.business.bean.upgrade.result.ClientResult;
|
|
|
+import com.qmth.distributed.print.business.bean.upgrade.result.ClientUpgradeResult;
|
|
|
import com.qmth.distributed.print.business.entity.ClientUpgrade;
|
|
|
import com.qmth.distributed.print.business.mapper.ClientUpgradeMapper;
|
|
|
import com.qmth.distributed.print.business.service.ClientUpgradeService;
|
|
@@ -13,9 +20,9 @@ import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
|
|
|
import com.qmth.teachcloud.common.enums.UploadFileEnum;
|
|
|
import com.qmth.teachcloud.common.enums.clientpackage.ClientPackageEnum;
|
|
|
import com.qmth.teachcloud.common.service.FileUploadService;
|
|
|
+import com.qmth.teachcloud.common.util.FileUtil;
|
|
|
import com.qmth.teachcloud.common.util.Zip4jUtil;
|
|
|
import org.apache.commons.codec.digest.DigestUtils;
|
|
|
-import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
|
|
|
import org.apache.commons.io.FilenameUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
@@ -49,13 +56,14 @@ public class ClientUpgradeServiceImpl extends ServiceImpl<ClientUpgradeMapper, C
|
|
|
|
|
|
@Override
|
|
|
public void upload(MultipartFile file, String md5, ClientPackageEnum type) {
|
|
|
+ File parentDirVar = null;
|
|
|
try {
|
|
|
- String fileName = FilenameUtils.getBaseName(file.getOriginalFilename());
|
|
|
+ String fileName = FilenameUtils.getName(file.getOriginalFilename());
|
|
|
|
|
|
- if (ClientPackageEnum.INSTALL.equals(type) && fileName.endsWith(".exe")) {
|
|
|
+ if (ClientPackageEnum.INSTALL.equals(type) && !fileName.endsWith(".exe")) {
|
|
|
throw ExceptionResultEnum.ERROR.exception("安装包只能上传后缀为[.exe]的文件");
|
|
|
}
|
|
|
- if (ClientPackageEnum.UPGRADE.equals(type) && fileName.endsWith(".zip")) {
|
|
|
+ if (ClientPackageEnum.UPGRADE.equals(type) && !fileName.endsWith(".zip")) {
|
|
|
throw ExceptionResultEnum.ERROR.exception("升级包只能上传后缀为[.zip]的文件");
|
|
|
}
|
|
|
|
|
@@ -68,8 +76,8 @@ public class ClientUpgradeServiceImpl extends ServiceImpl<ClientUpgradeMapper, C
|
|
|
//安装包
|
|
|
if (ClientPackageEnum.INSTALL.equals(type)) {
|
|
|
// 上传
|
|
|
- String filePathName = buildPath(true, UploadFileEnum.UPGRADE.getTitle(), "release", platform) + file.getName();
|
|
|
- FilePathVo filePathVo = fileUploadService.uploadFile(file.getInputStream(), filePathName, UploadFileEnum.UPGRADE);
|
|
|
+ String filePathName = buildPath(true, UploadFileEnum.UPGRADE.getTitle(), "release", platform) + fileName;
|
|
|
+ FilePathVo filePathVo = fileUploadService.uploadFile(file, UploadFileEnum.UPGRADE, filePathName, fileMd5);
|
|
|
clientUpgrade.setInstallPath(JSON.toJSONString(filePathVo));
|
|
|
} else if (ClientPackageEnum.UPGRADE.equals(type)) {
|
|
|
// 读取指定文件内容mainfest.josn
|
|
@@ -77,7 +85,7 @@ public class ClientUpgradeServiceImpl extends ServiceImpl<ClientUpgradeMapper, C
|
|
|
if (StringUtils.isBlank(mainfestContent)) {
|
|
|
throw ExceptionResultEnum.ERROR.exception("读取mainfest.json文件内容失败");
|
|
|
}
|
|
|
- // 解析mainfest.josn内容
|
|
|
+ // 解析mainfest.json内容
|
|
|
Mainfest mainfest = JSON.parseObject(mainfestContent, Mainfest.class);
|
|
|
String version = mainfest.getVersion();
|
|
|
if (StringUtils.isBlank(version)) {
|
|
@@ -92,26 +100,66 @@ public class ClientUpgradeServiceImpl extends ServiceImpl<ClientUpgradeMapper, C
|
|
|
throw ExceptionResultEnum.ERROR.exception("supportMin值必填");
|
|
|
}
|
|
|
// 上传
|
|
|
- String filePathName = buildPath(true, UploadFileEnum.UPGRADE.getTitle(), "update", platform, version, String.valueOf(build)) + file.getName();
|
|
|
- FilePathVo filePathVo = fileUploadService.uploadFile(file.getInputStream(), filePathName, UploadFileEnum.UPGRADE);
|
|
|
+ String filePathName = buildPath(true, UploadFileEnum.UPGRADE.getTitle(), "update", platform, version, String.valueOf(build)) + fileName;
|
|
|
+ FilePathVo filePathVo = fileUploadService.uploadFile(file, UploadFileEnum.UPGRADE, filePathName, fileMd5);
|
|
|
clientUpgrade.setVersion(version);
|
|
|
clientUpgrade.setBuild(build);
|
|
|
clientUpgrade.setSupportMin(supportMin);
|
|
|
clientUpgrade.setUpgradePath(JSON.toJSONString(filePathVo));
|
|
|
|
|
|
// 升级包文件上传
|
|
|
- File parentDirVar = SystemConstant.getFileTempParentDirVar(SystemConstant.ZIP_PREFIX);
|
|
|
- Zip4jUtil.unzip(filePathName, parentDirVar.getPath());
|
|
|
+ parentDirVar = SystemConstant.getFileTempDirVar(SystemConstant.ZIP_PREFIX);
|
|
|
+ file.transferTo(parentDirVar);
|
|
|
+ ZipReader zipReader = new ZipReader(parentDirVar);
|
|
|
+ // 上传mainfest.json文件
|
|
|
+ String mainfestJson = "mainfest.json";
|
|
|
+ String mainfestPathName = buildPath(true, UploadFileEnum.UPGRADE.getTitle(), "update", platform, version, String.valueOf(build)) + mainfestJson;
|
|
|
+ FilePathVo mainfestPathVo = fileUploadService.uploadFile(zipReader.read(mainfestJson), UploadFileEnum.UPGRADE, mainfestPathName, DigestUtils.md5Hex(zipReader.read(mainfestJson)));
|
|
|
+ clientUpgrade.setMainfestPath(JSON.toJSONString(mainfestPathVo));
|
|
|
+ // 上传app目录下文件
|
|
|
+ String app = "app";
|
|
|
+ for (MainfestApp mainfestApp : mainfest.getApp()) {
|
|
|
+ // 上传
|
|
|
+ uploadUpgradeZipFiles(version, build, zipReader, app, mainfestApp.getName());
|
|
|
+ }
|
|
|
+ // 上传script目录下文件
|
|
|
+ String script = "script";
|
|
|
+ MainfestScript mainfestScript = mainfest.getScript();
|
|
|
+ uploadUpgradeZipFiles(version, build, zipReader, script, mainfestScript.getBefore());
|
|
|
+ uploadUpgradeZipFiles(version, build, zipReader, script, mainfestScript.getAfter());
|
|
|
+ for (String includeFileName : mainfestScript.getIncludes()) {
|
|
|
+ uploadUpgradeZipFiles(version, build, zipReader, script, includeFileName);
|
|
|
+ }
|
|
|
+ // 上传data目录下文件
|
|
|
+ String data = "data";
|
|
|
+ for (String dataFileName : mainfest.getData()) {
|
|
|
+ uploadUpgradeZipFiles(version, build, zipReader, data, dataFileName);
|
|
|
+ }
|
|
|
} else {
|
|
|
throw ExceptionResultEnum.ERROR.exception("请选择正确的包类型");
|
|
|
}
|
|
|
// 保存或更新
|
|
|
this.saveOrUpdate(clientUpgrade);
|
|
|
-
|
|
|
-
|
|
|
} catch (IOException e) {
|
|
|
throw new RuntimeException(e);
|
|
|
} finally {
|
|
|
+ if (parentDirVar != null) {
|
|
|
+ FileUtil.deleteFile(parentDirVar);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void uploadUpgradeZipFiles(String version, int build, ZipReader zipReader, String pathType, String fileName) {
|
|
|
+ if (StringUtils.isBlank(fileName)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 上传
|
|
|
+ String filePath = pathType + File.separator + fileName;
|
|
|
+ String dataPathName = buildPath(true, UploadFileEnum.UPGRADE.getTitle(), "update", platform, version, String.valueOf(build), pathType) + fileName;
|
|
|
+ try {
|
|
|
+ fileUploadService.uploadFile(zipReader.read(filePath), UploadFileEnum.UPGRADE, dataPathName, DigestUtils.md5Hex(zipReader.read(filePath)));
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception(pathType + "目录下文件[" + fileName + "]上传失败");
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -131,6 +179,34 @@ public class ClientUpgradeServiceImpl extends ServiceImpl<ClientUpgradeMapper, C
|
|
|
return clientUpgrade;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public ClientResult getExternalByPlatform(String platform) {
|
|
|
+ ClientUpgrade clientUpgrade = this.getByPlatform(platform);
|
|
|
+ ClientResult clientResult = new ClientResult();
|
|
|
+ ClientInstallResult clientInstallResult = new ClientInstallResult();
|
|
|
+ ClientUpgradeResult clientUpgradeResult = new ClientUpgradeResult();
|
|
|
+ String prefix = null;
|
|
|
+ if (StringUtils.isNotBlank(clientUpgrade.getInstallPath())) {
|
|
|
+ prefix = fileUploadService.filePreviewPrefix(clientUpgrade.getInstallPath());
|
|
|
+ String installUrl = JSON.parseObject(clientUpgrade.getInstallPath(), FilePathVo.class).getPath();
|
|
|
+ clientInstallResult.setUrl(installUrl);
|
|
|
+ }
|
|
|
+ clientResult.setInstall(clientInstallResult);
|
|
|
+ if (StringUtils.isNotBlank(clientUpgrade.getMainfestPath())) {
|
|
|
+ if (StringUtils.isBlank(prefix)) {
|
|
|
+ prefix = fileUploadService.filePreviewPrefix(clientUpgrade.getMainfestPath());
|
|
|
+ }
|
|
|
+ clientUpgradeResult.setVersion(clientUpgrade.getVersion());
|
|
|
+ clientUpgradeResult.setBuild(clientUpgrade.getBuild());
|
|
|
+ clientUpgradeResult.setSupportMin(clientUpgrade.getSupportMin());
|
|
|
+ String indexUrl = JSON.parseObject(clientUpgrade.getMainfestPath(), FilePathVo.class).getPath();
|
|
|
+ clientUpgradeResult.setIndex(indexUrl);
|
|
|
+ }
|
|
|
+ clientResult.setUpgrade(clientUpgradeResult);
|
|
|
+ clientResult.setPrefix(prefix);
|
|
|
+ return clientResult;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 读取mainfest.json文件
|
|
|
*
|