feat: 上传新版本后对每个旧版本制作补丁包

dev
huangfeng 2 days ago
parent d26658c840
commit f76d121f0c

@ -3,7 +3,9 @@ package com.shxy.xymanager_admin.controller;
import com.shxy.xymanager_common.base.BaseController; import com.shxy.xymanager_common.base.BaseController;
import com.shxy.xymanager_common.base.ResponseReult; import com.shxy.xymanager_common.base.ResponseReult;
import com.shxy.xymanager_common.entity.MntnUpgrades; import com.shxy.xymanager_common.entity.MntnUpgrades;
import com.shxy.xymanager_common.entity.MntnUpgradesPatch;
import com.shxy.xymanager_common.exception.ApiException; import com.shxy.xymanager_common.exception.ApiException;
import com.shxy.xymanager_service.service.UpgradePatchService;
import com.shxy.xymanager_service.service.UpgradeService; import com.shxy.xymanager_service.service.UpgradeService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@ -16,6 +18,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.util.List; import java.util.List;
import java.util.regex.Pattern;
@RestController @RestController
@Api(tags = {"升级相关接口"}) @Api(tags = {"升级相关接口"})
@ -25,6 +28,8 @@ public class UpgradeController extends BaseController {
@Resource @Resource
UpgradeService service; UpgradeService service;
@Resource
UpgradePatchService patchService;
@GetMapping("listAll") @GetMapping("listAll")
@ApiOperation("查询全部列表") @ApiOperation("查询全部列表")
@ -33,11 +38,21 @@ public class UpgradeController extends BaseController {
return ResponseReult.success(result); return ResponseReult.success(result);
} }
@GetMapping("listPatch")
@ApiOperation("查询补丁列表")
public ResponseReult<List<MntnUpgradesPatch>> listAll(@RequestParam(value = "app", required = true) String app,
@RequestParam(value = "version", required = false) String version) {
List<MntnUpgradesPatch> result = patchService.list(app, version);
return ResponseReult.success(result);
}
@PostMapping("upload") @PostMapping("upload")
@ApiOperation("上传") @ApiOperation("上传")
public ResponseReult<String> upload(@RequestParam("file") MultipartFile file, public ResponseReult<String> upload(@RequestParam("file") MultipartFile file,
@RequestParam(value = "title", required = false) String title, @RequestParam(value = "title", required = false) String title,
@RequestParam(value = "type", required = true) Integer type) throws Exception { @RequestParam(value = "type", required = true) Integer type,
@RequestParam(value = "app", required = false) String app,
@RequestParam(value = "version", required = false) String version) throws Exception {
if (file == null) { if (file == null) {
throw new ApiException("缺少上传的文件"); throw new ApiException("缺少上传的文件");
} }
@ -47,10 +62,26 @@ public class UpgradeController extends BaseController {
MntnUpgrades record = new MntnUpgrades(); MntnUpgrades record = new MntnUpgrades();
record.setTitle(title); record.setTitle(title);
record.setType(type); record.setType(type);
if (StringUtils.isNotBlank(app)) {
record.setApp(app);
if (StringUtils.isBlank(version)) {
throw new ApiException("app有值时version不能为空");
}
if (!this.isValidFormat(version)) {
throw new ApiException("version格式不匹配");
}
record.setVersion(version);
}
service.upload(record, file); service.upload(record, file);
return ResponseReult.success("OK"); return ResponseReult.success("OK");
} }
private boolean isValidFormat(String input) {
// 正则表达式:匹配三段数字,由两个点分隔
String regex = "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$";
return Pattern.matches(regex, input);
}
@PostMapping("updateTitle") @PostMapping("updateTitle")
@ApiOperation("修改") @ApiOperation("修改")
public ResponseReult<String> updateTitle(@Validated @RequestBody MntnUpgrades item) throws Exception { public ResponseReult<String> updateTitle(@Validated @RequestBody MntnUpgrades item) throws Exception {

@ -100,6 +100,7 @@ swagger2:
maintain: maintain:
termlog: /home/xymp/termLogs/ termlog: /home/xymp/termLogs/
apk: /home/xymp/apk/ apk: /home/xymp/apk/
patch: /home/xymp/patch/
uri: http://61.169.135.146:40085/ uri: http://61.169.135.146:40085/
check: false check: false

@ -0,0 +1,98 @@
package com.shxy.xymanager_service.impl;
import com.shxy.xymanager_common.entity.MntnUpgrades;
import com.shxy.xymanager_common.entity.MntnUpgradesExample;
import com.shxy.xymanager_common.entity.MntnUpgradesPatch;
import com.shxy.xymanager_common.entity.MntnUpgradesPatchExample;
import com.shxy.xymanager_dao.dao.MntnUpgradesMapper;
import com.shxy.xymanager_dao.dao.MntnUpgradesPatchMapper;
import com.shxy.xymanager_service.service.UpgradePatchService;
import io.sigpipe.jbsdiff.Diff;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.io.File;
import java.io.FileOutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
@Service
@Slf4j
public class UpgradePatchServiceImpl implements UpgradePatchService {
@Value("${maintain.apk}")
private String apkpath;
@Value("${maintain.patch}")
private String patchpath;
@Value("${maintain.uri}")
private String uri;
@Resource
MntnUpgradesMapper upgradesMapper;
@Resource
MntnUpgradesPatchMapper patchMapper;
@Override
@Async
public void processPatch(MntnUpgrades upg) throws Exception {
if (StringUtils.isBlank(upg.getApp()) || StringUtils.isBlank(upg.getVersion())) {
return;
}
String app = upg.getApp();
String ver = upg.getVersion();
MntnUpgradesExample example = new MntnUpgradesExample();
MntnUpgradesExample.Criteria criteria = example.createCriteria();
criteria.andAppEqualTo(app);
criteria.andVersionNotEqualTo(ver);
example.setOrderByClause("id asc");
List<MntnUpgrades> list = upgradesMapper.selectByExample(example);
if (CollectionUtils.isEmpty(list)) {
return;
}
byte[] newIn = Files.readAllBytes(Paths.get(apkpath + upg.getPath()));
for (MntnUpgrades item : list) {
if (StringUtils.isNotBlank(item.getVersion())) {
String oldpath = apkpath + item.getPath();
try {
byte[] oldIn = Files.readAllBytes(Paths.get(oldpath));
String filename = app + "_" + item.getVersion() + "_" + ver + ".patch";
FileOutputStream fos = new FileOutputStream(new File(patchpath + filename));
Diff.diff(oldIn, newIn, fos);
log.info("生成" + filename);
long fileSize = Files.size(Paths.get(patchpath + filename));
MntnUpgradesPatch record = new MntnUpgradesPatch();
record.setApp(app);
record.setOldVer(item.getVersion());
record.setNewVer(ver);
record.setPath(filename);
record.setFileSize((int) fileSize);
patchMapper.insert(record);
} catch (Exception ignore) {
}
}
}
}
@Override
public List<MntnUpgradesPatch> list(String app, String oldver) {
MntnUpgradesPatchExample example = new MntnUpgradesPatchExample();
MntnUpgradesPatchExample.Criteria criteria = example.createCriteria();
criteria.andAppEqualTo(app);
if (StringUtils.isNotBlank(oldver)) {
criteria.andOldVerEqualTo(oldver);
}
List<MntnUpgradesPatch> list = patchMapper.selectByExample(example);
for (MntnUpgradesPatch item : list) {
item.setPath(uri + "patch/" + item.getPath());
}
return list;
}
}

@ -7,6 +7,7 @@ import com.shxy.xymanager_common.exception.ApiException;
import com.shxy.xymanager_common.util.DateUtil; import com.shxy.xymanager_common.util.DateUtil;
import com.shxy.xymanager_common.util.DigestUtils; import com.shxy.xymanager_common.util.DigestUtils;
import com.shxy.xymanager_dao.dao.MntnUpgradesMapper; import com.shxy.xymanager_dao.dao.MntnUpgradesMapper;
import com.shxy.xymanager_service.service.UpgradePatchService;
import com.shxy.xymanager_service.service.UpgradeService; import com.shxy.xymanager_service.service.UpgradeService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
@ -34,6 +35,8 @@ public class UpgradeServiceImpl implements UpgradeService {
@Resource @Resource
MntnUpgradesMapper mapper; MntnUpgradesMapper mapper;
@Resource
UpgradePatchService patchService;
@Override @Override
public List<MntnUpgrades> listAll(Integer type) { public List<MntnUpgrades> listAll(Integer type) {
@ -69,7 +72,8 @@ public class UpgradeServiceImpl implements UpgradeService {
file.transferTo(dest); file.transferTo(dest);
String md5 = DigestUtils.md5(file.getBytes()); String md5 = DigestUtils.md5(file.getBytes());
item.setMd5(md5); item.setMd5(md5);
mapper.insert(item); mapper.insertSelective(item);
patchService.processPatch(item);
return true; return true;
} }

@ -0,0 +1,14 @@
package com.shxy.xymanager_service.service;
import com.shxy.xymanager_common.entity.MntnUpgrades;
import com.shxy.xymanager_common.entity.MntnUpgradesPatch;
import java.util.List;
public interface UpgradePatchService {
void processPatch(MntnUpgrades upg) throws Exception;
List<MntnUpgradesPatch> list(String app, String oldver);
}
Loading…
Cancel
Save