Selaa lähdekoodia

新增需求-新增APP版本升级信息查询功能

tea.yu 2 viikkoa sitten
vanhempi
sitoutus
f3c676f69c
12 muutettua tiedostoa jossa 450 lisäystä ja 0 poistoa
  1. 35 0
      sikey-tools-business/sikey-tools-business-biz/src/main/java/cn/sikey/tools/controller/app/version/AppVersionController.java
  2. 34 0
      sikey-tools-business/sikey-tools-business-biz/src/main/java/cn/sikey/tools/controller/app/version/vo/AppUpgradeRespVO.java
  3. 20 0
      sikey-tools-business/sikey-tools-business-biz/src/main/java/cn/sikey/tools/controller/app/version/vo/QueryAppUpgradeReqVO.java
  4. 15 0
      sikey-tools-business/sikey-tools-business-biz/src/main/java/cn/sikey/tools/convert/AppVersionConvert.java
  5. 41 0
      sikey-tools-business/sikey-tools-business-biz/src/main/java/cn/sikey/tools/dal/dataobject/AppVersionUpgradeDO.java
  6. 25 0
      sikey-tools-business/sikey-tools-business-biz/src/main/java/cn/sikey/tools/dal/mysql/AppVersionMapper.java
  7. 40 0
      sikey-tools-business/sikey-tools-business-biz/src/main/java/cn/sikey/tools/enums/BusinessException.java
  8. 129 0
      sikey-tools-business/sikey-tools-business-biz/src/main/java/cn/sikey/tools/enums/CommonResult.java
  9. 25 0
      sikey-tools-business/sikey-tools-business-biz/src/main/java/cn/sikey/tools/enums/ErrorCode.java
  10. 32 0
      sikey-tools-business/sikey-tools-business-biz/src/main/java/cn/sikey/tools/enums/GlobalErrorCodeConstants.java
  11. 13 0
      sikey-tools-business/sikey-tools-business-biz/src/main/java/cn/sikey/tools/service/appversion/AppVersionService.java
  12. 41 0
      sikey-tools-business/sikey-tools-business-biz/src/main/java/cn/sikey/tools/service/appversion/AppVersionServiceImpl.java

+ 35 - 0
sikey-tools-business/sikey-tools-business-biz/src/main/java/cn/sikey/tools/controller/app/version/AppVersionController.java

@@ -0,0 +1,35 @@
+package cn.sikey.tools.controller.app.version;
+
+import cn.sikey.tools.controller.app.version.vo.AppUpgradeRespVO;
+import cn.sikey.tools.controller.app.version.vo.QueryAppUpgradeReqVO;
+import cn.sikey.tools.enums.CommonResult;
+import cn.sikey.tools.service.appversion.AppVersionService;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * APP版本升级
+ */
+@RestController
+@RequestMapping("/tools/app")
+@Slf4j
+public class AppVersionController {
+
+    @Resource
+    private AppVersionService appVersionService;
+
+    /**
+     * APP版本升级
+     *
+     * @param req   请求参数
+     * @return      CommonResult<AppUpgradeRespVO>
+     */
+    @GetMapping("/queryAppUpgrade")
+    public CommonResult<AppUpgradeRespVO> queryAppUpgrade(@Validated QueryAppUpgradeReqVO req) {
+        return appVersionService.queryAppUpgrade(req);
+    }
+}

+ 34 - 0
sikey-tools-business/sikey-tools-business-biz/src/main/java/cn/sikey/tools/controller/app/version/vo/AppUpgradeRespVO.java

@@ -0,0 +1,34 @@
+package cn.sikey.tools.controller.app.version.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * APP版本升级
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class AppUpgradeRespVO {
+    /**
+     * 包名
+     */
+    private String packageName;
+    /**
+     * 版本号
+     */
+    private String versionCode;
+    /**
+     * 显示版本号
+     */
+    private String versionName;
+    /**
+     * 版本下载地址
+     */
+    private String downloadUrl;
+    /**
+     * md5
+     */
+    private String md5;
+}

+ 20 - 0
sikey-tools-business/sikey-tools-business-biz/src/main/java/cn/sikey/tools/controller/app/version/vo/QueryAppUpgradeReqVO.java

@@ -0,0 +1,20 @@
+package cn.sikey.tools.controller.app.version.vo;
+
+import jakarta.validation.constraints.NotBlank;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * APP版本升级
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class QueryAppUpgradeReqVO {
+    /**
+     * 包名
+     */
+    @NotBlank(message = "包名不能为空")
+    private String packageName;
+}

+ 15 - 0
sikey-tools-business/sikey-tools-business-biz/src/main/java/cn/sikey/tools/convert/AppVersionConvert.java

@@ -0,0 +1,15 @@
+package cn.sikey.tools.convert;
+
+import cn.sikey.tools.controller.app.version.vo.AppUpgradeRespVO;
+import cn.sikey.tools.dal.dataobject.AppVersionUpgradeDO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+@Mapper
+public interface AppVersionConvert {
+
+    AppVersionConvert INSTANCE = Mappers.getMapper(AppVersionConvert.class);
+
+    AppUpgradeRespVO convertAppUpgradeRespVO(AppVersionUpgradeDO appVersionUpgradeDO);
+
+}

+ 41 - 0
sikey-tools-business/sikey-tools-business-biz/src/main/java/cn/sikey/tools/dal/dataobject/AppVersionUpgradeDO.java

@@ -0,0 +1,41 @@
+package cn.sikey.tools.dal.dataobject;
+
+import cn.sikey.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * APP版本升级
+ */
+@TableName("st_app_upgrade")
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class AppVersionUpgradeDO extends BaseDO {
+    /**
+     * 主键id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 包名
+     */
+    private String packageName;
+    /**
+     * 版本号
+     */
+    private String versionCode;
+    /**
+     * 显示版本号
+     */
+    private String versionName;
+    /**
+     * 版本下载地址
+     */
+    private String downloadUrl;
+    /**
+     * md5
+     */
+    private String md5;
+}

+ 25 - 0
sikey-tools-business/sikey-tools-business-biz/src/main/java/cn/sikey/tools/dal/mysql/AppVersionMapper.java

@@ -0,0 +1,25 @@
+package cn.sikey.tools.dal.mysql;
+
+import cn.sikey.tools.controller.app.version.vo.QueryAppUpgradeReqVO;
+import cn.sikey.tools.dal.dataobject.AppVersionUpgradeDO;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * APP版本升级
+ */
+@Mapper
+public interface AppVersionMapper extends BaseMapper<AppVersionUpgradeDO> {
+
+    default AppVersionUpgradeDO queryAppUpgrade(QueryAppUpgradeReqVO reqVO) {
+        QueryWrapper<AppVersionUpgradeDO> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("package_name", reqVO.getPackageName());
+        return selectOne(queryWrapper);
+    }
+
+}
+
+

+ 40 - 0
sikey-tools-business/sikey-tools-business-biz/src/main/java/cn/sikey/tools/enums/BusinessException.java

@@ -0,0 +1,40 @@
+package cn.sikey.tools.enums;
+
+import lombok.Data;
+
+import java.util.Objects;
+
+/**
+ * 业务异常
+ *
+ * @author qin
+ */
+@Data
+public class BusinessException extends RuntimeException {
+    private final Integer code;
+    private final String message;
+
+    public BusinessException(Integer code, String message) {
+        super(message);
+        this.code = code;
+        this.message = message;
+    }
+    
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        BusinessException that = (BusinessException) o;
+        return Objects.equals(code, that.code) && Objects.equals(message, that.message);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(code, message);
+    }
+
+    @Override
+    public String toString() {
+        return "BusinessException{" + "code=" + code + ", message='" + message + '}';
+    }
+}

+ 129 - 0
sikey-tools-business/sikey-tools-business-biz/src/main/java/cn/sikey/tools/enums/CommonResult.java

@@ -0,0 +1,129 @@
+package cn.sikey.tools.enums;
+
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+
+/**
+ * 通用返回
+ *
+ * @param <T> 数据泛型
+ */
+@Data
+@JsonInclude(JsonInclude.Include.ALWAYS) // 总是包含所有字段
+public class CommonResult<T> implements Serializable {
+
+    /**
+     * 错误码
+     */
+
+    private Integer code;
+
+    /**
+     * 返回数据
+     */
+
+    private T data;
+
+    /**
+     * 错误提示,用户可阅读
+     */
+
+    private String message;
+
+    public CommonResult() {
+        this.code = GlobalErrorCodeConstants.SUCCESS.getCode();
+        this.message = "成功";
+    }
+
+    /**
+     * 将传入的 result 对象,转换成另外一个泛型结果的对象
+     * <p>
+     * 因为 A 方法返回的 CommonResult 对象,不满足调用其的 B 方法的返回,所以需要进行转换。
+     *
+     * @param result 传入的 result 对象
+     * @param <T>    返回的泛型
+     * @return 新的 CommonResult 对象
+     */
+
+    public static <T> CommonResult<T> error(CommonResult<?> result) {
+        return error(result.getCode(), result.getMessage());
+    }
+
+    public static <T> CommonResult<T> error(Integer code, String message) {
+        CommonResult<T> result = new CommonResult<>();
+        result.code = code;
+        result.data = (T) new Object(); // 错误响应也设置空对象
+        result.message = message;
+        return result;
+    }
+
+    public static <T> CommonResult<T> error(ErrorCode errorCode) {
+        return error(errorCode.getCode(), errorCode.getMsg());
+    }
+
+    public static <T> CommonResult<T> success(T data) {
+        CommonResult<T> result = new CommonResult<>();
+        result.code = GlobalErrorCodeConstants.SUCCESS.getCode();
+        result.data = data;
+        result.message = "成功";
+        return result;
+    }
+
+    public static <T> CommonResult<T> success() {
+        CommonResult<T> result = new CommonResult<>();
+        result.code = GlobalErrorCodeConstants.SUCCESS.getCode();
+        result.data = (T) new Object(); // 设置为空对象而不是null
+        result.message = "成功";
+        return result;
+    }
+
+    public static boolean isSuccess(Integer code) {
+        return Objects.equals(code, GlobalErrorCodeConstants.SUCCESS.getCode());
+    }
+
+    public static <T> CommonResult<T> error(BusinessException serviceException) {
+        return error(serviceException.getCode(), serviceException.getMessage());
+    }
+
+    @JsonIgnore // 避免 jackson 序列化
+    public boolean isSuccess() {
+        return isSuccess(code);
+    }
+
+    // ========= 和 Exception 异常体系集成 =========
+
+    @JsonIgnore // 避免 jackson 序列化
+    public boolean isError() {
+        return !isSuccess();
+    }
+
+    /**
+     * 判断是否有异常。如果有,则抛出异常
+     */
+
+    public void checkError() throws BusinessException {
+        if (isSuccess()) {
+            return;
+        }
+        // 业务异常
+        throw new BusinessException(code, message);
+    }
+
+    /**
+     * 判断是否有异常。如果有,则抛出异常
+     * 如果没有,则返回数据
+     */
+
+    @JsonIgnore // 避免 jackson 序列化
+    public T getCheckedData() {
+        checkError();
+        return data;
+    }
+
+}

+ 25 - 0
sikey-tools-business/sikey-tools-business-biz/src/main/java/cn/sikey/tools/enums/ErrorCode.java

@@ -0,0 +1,25 @@
+package cn.sikey.tools.enums;
+
+import lombok.Data;
+
+/**
+ * 错误码对象
+ */
+@Data
+public class ErrorCode {
+
+    /**
+     * 错误码
+     */
+    private final Integer code;
+    /**
+     * 错误提示
+     */
+    private final String msg;
+
+    public ErrorCode(Integer code, String message) {
+        this.code = code;
+        this.msg = message;
+    }
+
+}

+ 32 - 0
sikey-tools-business/sikey-tools-business-biz/src/main/java/cn/sikey/tools/enums/GlobalErrorCodeConstants.java

@@ -0,0 +1,32 @@
+package cn.sikey.tools.enums;
+
+/**
+ * 全局错误码枚举
+ *
+ */
+public interface GlobalErrorCodeConstants {
+
+    ErrorCode SUCCESS = new ErrorCode(200, "成功");
+
+    // ========== 客户端错误段 ==========
+
+    ErrorCode BAD_REQUEST = new ErrorCode(400, "请求参数不正确");
+    ErrorCode UNAUTHORIZED = new ErrorCode(401, "账号未登录");
+    ErrorCode FORBIDDEN = new ErrorCode(403, "没有该操作权限");
+    ErrorCode NOT_FOUND = new ErrorCode(404, "请求未找到");
+    ErrorCode METHOD_NOT_ALLOWED = new ErrorCode(405, "请求方法不正确");
+    ErrorCode LOCKED = new ErrorCode(423, "请求失败,请稍后重试"); // 并发请求,不允许
+    ErrorCode TOO_MANY_REQUESTS = new ErrorCode(429, "请求过于频繁,请稍后重试");
+
+    // ========== 服务端错误段 ==========
+
+    ErrorCode INTERNAL_SERVER_ERROR = new ErrorCode(500, "系统异常");
+    ErrorCode NOT_IMPLEMENTED = new ErrorCode(501, "功能未实现/未开启");
+    ErrorCode ERROR_CONFIGURATION = new ErrorCode(502, "错误的配置项");
+
+    // ========== 自定义错误段 ==========
+
+    ErrorCode APP_VERSION_NOT_EXIST_ERROR = new ErrorCode(600, "APP版本不存在"); // 重复请求
+
+
+}

+ 13 - 0
sikey-tools-business/sikey-tools-business-biz/src/main/java/cn/sikey/tools/service/appversion/AppVersionService.java

@@ -0,0 +1,13 @@
+package cn.sikey.tools.service.appversion;
+
+import cn.sikey.tools.controller.app.version.vo.AppUpgradeRespVO;
+import cn.sikey.tools.controller.app.version.vo.QueryAppUpgradeReqVO;
+import cn.sikey.tools.enums.CommonResult;
+
+/**
+ * APP版本升级
+ */
+public interface AppVersionService {
+
+    CommonResult<AppUpgradeRespVO> queryAppUpgrade(QueryAppUpgradeReqVO reqVO);
+}

+ 41 - 0
sikey-tools-business/sikey-tools-business-biz/src/main/java/cn/sikey/tools/service/appversion/AppVersionServiceImpl.java

@@ -0,0 +1,41 @@
+package cn.sikey.tools.service.appversion;
+
+import cn.sikey.tools.controller.app.version.vo.AppUpgradeRespVO;
+import cn.sikey.tools.controller.app.version.vo.QueryAppUpgradeReqVO;
+import cn.sikey.tools.convert.AppVersionConvert;
+import cn.sikey.tools.dal.dataobject.AppVersionUpgradeDO;
+import cn.sikey.tools.dal.mysql.AppVersionMapper;
+import cn.sikey.tools.enums.CommonResult;
+import cn.sikey.tools.enums.GlobalErrorCodeConstants;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.Objects;
+
+/**
+ * APP版本升级
+ */
+@Service
+@Slf4j
+public class AppVersionServiceImpl implements AppVersionService {
+
+    @Resource
+    private AppVersionMapper appVersionMapper;
+
+    /**
+     * APP升级
+     *
+     * @param req   请求参数
+     * @return      AppUpgradeRespVO
+     */
+    @Override
+    public CommonResult<AppUpgradeRespVO> queryAppUpgrade(QueryAppUpgradeReqVO req) {
+        log.info("[获取APP版本信息]请求参数:{}", req);
+        AppVersionUpgradeDO appVersionUpgradeDO = appVersionMapper.queryAppUpgrade(req);
+        if (Objects.isNull(appVersionUpgradeDO)) {
+            return CommonResult.error(GlobalErrorCodeConstants.APP_VERSION_NOT_EXIST_ERROR);
+        }
+        return CommonResult.success(AppVersionConvert.INSTANCE.convertAppUpgradeRespVO(appVersionUpgradeDO));
+    }
+}