|
|
@@ -0,0 +1,201 @@
|
|
|
+package com.xunmei.system.service.impl;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.xunmei.common.core.utils.StringUtils;
|
|
|
+import com.xunmei.common.core.web.domain.AjaxResult;
|
|
|
+import com.xunmei.common.core.web.page.TableDataInfo;
|
|
|
+import com.xunmei.system.api.RemoteFileService;
|
|
|
+import com.xunmei.system.api.domain.SysFile;
|
|
|
+import com.xunmei.system.api.domain.SysVersion;
|
|
|
+import com.xunmei.system.api.enums.AppType;
|
|
|
+import com.xunmei.system.dto.SysCheckUpdateDto;
|
|
|
+import com.xunmei.system.mapper.SysVersionMapper;
|
|
|
+import com.xunmei.system.service.ISysVersionService;
|
|
|
+import feign.Response;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+import com.github.zafarkhaja.semver.Version;
|
|
|
+import javax.annotation.Resource;
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+import java.io.*;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.Objects;
|
|
|
+
|
|
|
+@Service
|
|
|
+public class SysVersionServiceImpl extends ServiceImpl<SysVersionMapper, SysVersion> implements ISysVersionService {
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private SysVersionMapper versionMapper;
|
|
|
+
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private RemoteFileService fileService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public TableDataInfo<SysVersion> selectPage(SysVersion sysVersion) {
|
|
|
+ Page<SysVersion> page;
|
|
|
+ if (sysVersion.getPageNum() != null && sysVersion.getPageSize() != null) {
|
|
|
+ page = new Page<>(sysVersion.getPageNum(), sysVersion.getPageSize());
|
|
|
+ } else {
|
|
|
+ page = new Page<>();
|
|
|
+ }
|
|
|
+ QueryWrapper<SysVersion> wrapper = new QueryWrapper<>();
|
|
|
+ if (sysVersion.getType() != null ){
|
|
|
+ wrapper.eq("type",sysVersion.getType());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotEmpty(sysVersion.getVersion())){
|
|
|
+ wrapper.like("version",sysVersion.getVersion());
|
|
|
+ }
|
|
|
+ page = versionMapper.selectPage(page, wrapper);
|
|
|
+ return TableDataInfo.build(page);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional
|
|
|
+ @Override
|
|
|
+ public AjaxResult insertVersion(SysVersion sysVersion) {
|
|
|
+ //查询当前类型是否有当前版本
|
|
|
+ String msg = checkSameVersion(sysVersion,false);
|
|
|
+ if (StringUtils.isNotEmpty(msg)){
|
|
|
+ return AjaxResult.error(msg);
|
|
|
+ }
|
|
|
+
|
|
|
+ sysVersion.setCreateTime(new Date());
|
|
|
+ this.save(sysVersion);
|
|
|
+ if (sysVersion.getIsUse()){
|
|
|
+ disabledOthers(sysVersion.getId(),sysVersion.getType());
|
|
|
+ }
|
|
|
+ return AjaxResult.success();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional
|
|
|
+ @Override
|
|
|
+ public AjaxResult updateVersion(SysVersion sysVersion) {
|
|
|
+ //查询当前类型是否有当前版本
|
|
|
+ String msg = checkSameVersion(sysVersion,true);
|
|
|
+ if (StringUtils.isNotEmpty(msg)){
|
|
|
+ return AjaxResult.error(msg);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (sysVersion.getId() != null){
|
|
|
+ sysVersion.setUpdateTime(new Date());
|
|
|
+ this.updateById(sysVersion);
|
|
|
+ if (sysVersion.getIsUse()){
|
|
|
+ disabledOthers(sysVersion.getId(),sysVersion.getType());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return AjaxResult.success();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void disabledOthers(Long id, Integer type) {
|
|
|
+ versionMapper.disabledOthers(id,type);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public SysVersion getDetailById(Long id) {
|
|
|
+ return getById(id);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void downloadFile(HttpServletResponse response, Long id){
|
|
|
+ InputStream inputStream = null;
|
|
|
+ BufferedInputStream bufferedInputStream = null;
|
|
|
+ BufferedOutputStream bufferedOutputStream = null;
|
|
|
+ try {
|
|
|
+ SysVersion version = getById(id);
|
|
|
+ if (null != version){
|
|
|
+ SysFile sysFile = new SysFile();
|
|
|
+ sysFile.setRealName(version.getPackageName());
|
|
|
+ sysFile.setUrl(version.getPath());
|
|
|
+ //Feign远程调用获取文件流
|
|
|
+ Response result = fileService.downloadFileRealName(sysFile);
|
|
|
+ Response.Body body = result.body();
|
|
|
+ inputStream = body.asInputStream();
|
|
|
+ bufferedInputStream = new BufferedInputStream(inputStream);
|
|
|
+ response.setHeader("Content-Type","application/octet-stream");
|
|
|
+ response.setHeader("Content-Disposition", result.headers().get("Content-Disposition").toString().replace("[", "").replace("]", ""));
|
|
|
+ bufferedOutputStream = new BufferedOutputStream(response.getOutputStream());
|
|
|
+ int length = 0;
|
|
|
+ byte[] temp = new byte[1024 * 10];
|
|
|
+ while ((length = bufferedInputStream.read(temp)) != -1) {
|
|
|
+ bufferedOutputStream.write(temp, 0, length);
|
|
|
+ }
|
|
|
+ bufferedOutputStream.flush();
|
|
|
+ bufferedOutputStream.close();
|
|
|
+ bufferedInputStream.close();
|
|
|
+ inputStream.close();
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public SysCheckUpdateDto checkUpdate(SysCheckUpdateDto checkUpdateDto) {
|
|
|
+ SysCheckUpdateDto dto = new SysCheckUpdateDto();
|
|
|
+ dto.setNeedUpdate(false);
|
|
|
+ dto.setCurrentVersion(checkUpdateDto.getCurrentVersion());
|
|
|
+ dto.setTypeDesc(checkUpdateDto.getTypeDesc());
|
|
|
+ int type = -1;
|
|
|
+ switch (checkUpdateDto.getTypeDesc()){
|
|
|
+ case "APP":
|
|
|
+ type = AppType.APP.getIndex();
|
|
|
+ break;
|
|
|
+ case "PC":
|
|
|
+ type = AppType.PC.getIndex();
|
|
|
+ break;
|
|
|
+ case "IOS":
|
|
|
+ type = AppType.IOS.getIndex();
|
|
|
+ break;
|
|
|
+ case "HANG_WALL":
|
|
|
+ type = AppType.HANG_WALL.getIndex();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (type == -1){
|
|
|
+ return dto;
|
|
|
+ }
|
|
|
+ //使用的版本只有一个
|
|
|
+ QueryWrapper<SysVersion> wrapper = new QueryWrapper<>();
|
|
|
+ wrapper.eq("type",type);
|
|
|
+ wrapper.eq("is_use",1);
|
|
|
+ SysVersion version = getOne(wrapper);
|
|
|
+ if (null != version){
|
|
|
+ //判断终端版本是否小于等于使用版本
|
|
|
+ Version currentVersion = Version.valueOf(checkUpdateDto.getCurrentVersion());
|
|
|
+ Version useVersion = Version.valueOf(version.getVersion());
|
|
|
+ if (useVersion.compareTo(currentVersion) > 0){
|
|
|
+ //使用版本大于终端版本,需要升级
|
|
|
+ dto.setNeedUpdate(true);
|
|
|
+ dto.setForce(version.getIsForce());
|
|
|
+ dto.setNewVersion(version.getVersion());
|
|
|
+ dto.setNote(version.getNote());
|
|
|
+ dto.setDownloadUrl("/system/version/download/"+version.getId());
|
|
|
+ return dto;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return dto;
|
|
|
+ }
|
|
|
+
|
|
|
+ private String checkSameVersion(SysVersion sysVersion,boolean isUpdate){
|
|
|
+ //查询当前类型是否有当前版本
|
|
|
+ QueryWrapper<SysVersion> wrapper = new QueryWrapper<>();
|
|
|
+ wrapper.eq("type",sysVersion.getType());
|
|
|
+ wrapper.eq("version",sysVersion.getVersion());
|
|
|
+ //同一类型同一版本只有一条数据
|
|
|
+ SysVersion one = getOne(wrapper);
|
|
|
+ if (isUpdate){
|
|
|
+ if (null != one && !Objects.equals(one.getId(), sysVersion.getId())){
|
|
|
+ AppType appType = AppType.getEnumByIndex(sysVersion.getType());
|
|
|
+ return appType.getText() + " 终端已存在 " + sysVersion.getVersion() + " 版本包,请重新输入!";
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ if (null != one){
|
|
|
+ AppType appType = AppType.getEnumByIndex(sysVersion.getType());
|
|
|
+ return appType.getText() + " 终端已存在 " + sysVersion.getVersion() + " 版本包,请重新输入!";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+}
|