优化获取ptach

This commit is contained in:
2025-04-15 10:27:55 +08:00
parent a6b910ee31
commit 884f80d3c0
5 changed files with 27 additions and 12 deletions

View File

@@ -18,8 +18,12 @@ public class CheckPatchController {
DiffPathService diffPathService; DiffPathService diffPathService;
@GetMapping("/android/check_patch") @GetMapping("/android/check_patch")
public Result checkPatch(@RequestParam("pkg") String pkg, @RequestParam(value = "version_code") Long versionCode) { public Result checkPatch(@RequestParam("pkg") String pkg, @RequestParam(value = "version_code") Long versionCode, @RequestParam(value = "md5") String oldMd5) {
PatchFileInfo patchFileInfo = diffPathService.getPatchInfo(pkg, versionCode); PatchFileInfo patchFileInfo = diffPathService.getPatchInfo(pkg, versionCode, oldMd5);
return Result.success(patchFileInfo); if (patchFileInfo == null) {
return Result.notFound();
} else {
return Result.success(patchFileInfo);
}
} }
} }

View File

@@ -3,9 +3,11 @@ package com.mir4updater.backend.controller.apk;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.mir4updater.backend.config.FilePath; import com.mir4updater.backend.config.FilePath;
import com.mir4updater.backend.entity.ApkInfo; import com.mir4updater.backend.entity.ApkInfo;
import com.mir4updater.backend.entity.PatchFileInfo;
import com.mir4updater.backend.entity.XapkManifest; import com.mir4updater.backend.entity.XapkManifest;
import com.mir4updater.backend.result.Result; import com.mir4updater.backend.result.Result;
import com.mir4updater.backend.service.ApkInfoService; import com.mir4updater.backend.service.ApkInfoService;
import com.mir4updater.backend.service.DiffPathService;
import com.mir4updater.backend.utils.ApkUtils; import com.mir4updater.backend.utils.ApkUtils;
import com.mir4updater.backend.utils.HashUtils; import com.mir4updater.backend.utils.HashUtils;
import com.mir4updater.backend.utils.PatchUtils; import com.mir4updater.backend.utils.PatchUtils;
@@ -36,6 +38,9 @@ public class CreateDiffPatchFileController {
@Autowired @Autowired
private ApkInfoService apkInfoService; private ApkInfoService apkInfoService;
@Autowired
DiffPathService diffPathService;
@PostMapping("/android/create_patch") @PostMapping("/android/create_patch")
public Result uploadApk(@RequestParam("old_id") int oldId, @RequestParam("new_id") int newId) throws Exception { public Result uploadApk(@RequestParam("old_id") int oldId, @RequestParam("new_id") int newId) throws Exception {
String projectPath = System.getProperty("user.dir"); String projectPath = System.getProperty("user.dir");
@@ -112,6 +117,7 @@ public class CreateDiffPatchFileController {
String sha256 = HashUtils.calculateSHA256(tempFile); String sha256 = HashUtils.calculateSHA256(tempFile);
logger.info("tempFile sha256 = " + sha256); logger.info("tempFile sha256 = " + sha256);
if (ApkUtils.isAPK(tempFile)) { if (ApkUtils.isAPK(tempFile)) {
logger.info("tempFile type is apk"); logger.info("tempFile type is apk");
@@ -129,6 +135,10 @@ public class CreateDiffPatchFileController {
String packageName = apkMeta.getPackageName(); String packageName = apkMeta.getPackageName();
long versionCode = apkMeta.getVersionCode(); long versionCode = apkMeta.getVersionCode();
PatchFileInfo patchFileInfo = diffPathService.getPatchInfo(packageName, versionCode, md5);
if (patchFileInfo != null) {
return Result.error("patch文件存在请直接下载");
}
List<ApkInfo> apkInfoList = apkInfoService.getApkInfo(packageName); List<ApkInfo> apkInfoList = apkInfoService.getApkInfo(packageName);
Optional<ApkInfo> apkInfoOptional = apkInfoList.stream().max(new Comparator<ApkInfo>() { Optional<ApkInfo> apkInfoOptional = apkInfoList.stream().max(new Comparator<ApkInfo>() {
@@ -173,6 +183,7 @@ public class CreateDiffPatchFileController {
return Result.error().setMessage(packageName + " 没有上传其他版本"); return Result.error().setMessage(packageName + " 没有上传其他版本");
} }
} else if (ApkUtils.isXAPK(tempFile)) { } else if (ApkUtils.isXAPK(tempFile)) {
//一般不会出现这种情况
logger.info("tempFile type is xapk"); logger.info("tempFile type is xapk");
try (ZipFile zipFile = new ZipFile(tempFile)) { try (ZipFile zipFile = new ZipFile(tempFile)) {
// 遍历ZIP文件中的所有条目 // 遍历ZIP文件中的所有条目

View File

@@ -23,25 +23,25 @@ public class PatchFileInfo implements Serializable {
long oldVersion; long oldVersion;
@Column(name = "old_md5", nullable = false) @Column(name = "old_md5", nullable = false)
String old_md5; String oldMd5;
@Column(name = "old_sha1", nullable = false) @Column(name = "old_sha1", nullable = false)
String old_sha1; String oldSha1;
@Column(name = "old_sha256", nullable = false) @Column(name = "old_sha256", nullable = false)
String old_sha256; String oldSha256;
@Column(name = "new_version", nullable = false) @Column(name = "new_version", nullable = false)
long newVersion; long newVersion;
@Column(name = "new_md5", nullable = false) @Column(name = "new_md5", nullable = false)
String new_md5; String newMd5;
@Column(name = "new_sha1", nullable = false) @Column(name = "new_sha1", nullable = false)
String new_sha1; String newSha1;
@Column(name = "new_sha256", nullable = false) @Column(name = "new_sha256", nullable = false)
String new_sha256; String newSha256;
@Column(name = "patch_file_path", nullable = false) @Column(name = "patch_file_path", nullable = false)
String patch_file_path; String patch_file_path;

View File

@@ -4,6 +4,6 @@ import com.mir4updater.backend.entity.PatchFileInfo;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
public interface PatchInfoRepository extends JpaRepository<PatchFileInfo, Long> { public interface PatchInfoRepository extends JpaRepository<PatchFileInfo, Long> {
public PatchFileInfo findPatchFileInfoByPackageNameAndOldVersion(String packageName, Long version); public PatchFileInfo findPatchFileInfoByPackageNameAndOldVersionAndOldMd5(String packageName, Long oldVersion, String oldMd5);
} }

View File

@@ -10,8 +10,8 @@ public class DiffPathService {
@Autowired @Autowired
PatchInfoRepository patchInfoRepository; PatchInfoRepository patchInfoRepository;
public PatchFileInfo getPatchInfo(String packageName, Long oldVersion) { public PatchFileInfo getPatchInfo(String packageName, Long oldVersion, String oldMd5) {
return patchInfoRepository.findPatchFileInfoByPackageNameAndOldVersion(packageName, oldVersion); return patchInfoRepository.findPatchFileInfoByPackageNameAndOldVersionAndOldMd5(packageName, oldVersion, oldMd5);
} }
} }