diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/OtherController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/OtherController.java index 52c5ea01..da778601 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/OtherController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/OtherController.java @@ -2,19 +2,22 @@ package com.ruoyi.web.controller.cai.app; import com.ruoyi.cai.dto.app.query.UserReportReq; import com.ruoyi.cai.dto.app.query.push.PushErrorReq; +import com.ruoyi.cai.dto.app.vo.version.VersionSystemInfo; import com.ruoyi.cai.service.ReportService; import com.ruoyi.cai.service.UserErrorLogService; +import com.ruoyi.cai.service.VersionService; +import com.ruoyi.cai.util.VersionUtil; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.helper.LoginHelper; +import com.ruoyi.common.utils.ServletUtils; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; @RestController @RequestMapping("/api/other") @@ -25,6 +28,8 @@ public class OtherController { private ReportService reportService; @Autowired private UserErrorLogService userErrorLogService; + @Autowired + private VersionService versionService; @PostMapping("/report") @Operation(summary = "举报") @@ -44,4 +49,12 @@ public class OtherController { userErrorLogService.pushError(req); return R.ok(); } + + @GetMapping("/system/version") + @Operation(summary = "版本号校验") + @Log(title = "版本号校验", businessType = BusinessType.OTHER, isSaveDb = false) + public R systemVersion(){ + VersionSystemInfo info = versionService.systemInfo(VersionUtil.getAppVersion(), VersionUtil.getVersionPlatform()); + return R.ok(info); + } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/UserPictureAuditController.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/UserPictureAuditController.java index eac80f11..ef18a2c0 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/UserPictureAuditController.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/UserPictureAuditController.java @@ -1,9 +1,7 @@ package com.ruoyi.cai.controller; import cn.dev33.satoken.annotation.SaCheckPermission; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.ruoyi.cai.domain.UserAlbum; import com.ruoyi.cai.domain.UserPictureAudit; import com.ruoyi.cai.dto.admin.vo.user.UserPictureAuditAdminVo; import com.ruoyi.cai.service.UserPictureAuditService; @@ -13,7 +11,6 @@ import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.page.TableDataInfo; -import com.ruoyi.common.core.validate.EditGroup; import com.ruoyi.common.enums.BusinessType; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/VersionController.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/VersionController.java new file mode 100644 index 00000000..3d5e5cfc --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/VersionController.java @@ -0,0 +1,95 @@ +package com.ruoyi.cai.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.cai.domain.Version; +import com.ruoyi.cai.service.VersionService; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.enums.BusinessType; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.Arrays; + +/** + * 版本 + * + * @author 77 + * @date 2024-02-02 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/cai/version") +public class VersionController extends BaseController { + + private final VersionService versionService; + + /** + * 查询版本列表 + */ + @SaCheckPermission("cai:version:list") + @GetMapping("/list") + public TableDataInfo list(Version bo, PageQuery pageQuery) { + Page page = versionService.page(pageQuery.build(), Wrappers.lambdaQuery(bo)); + return TableDataInfo.build(page); + } + + /** + * 获取版本详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("cai:version:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(versionService.getById(id)); + } + + /** + * 新增版本 + */ + @SaCheckPermission("cai:version:add") + @Log(title = "版本", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody Version bo) { + return toAjax(versionService.save(bo)); + } + + /** + * 修改版本 + */ + @SaCheckPermission("cai:version:edit") + @Log(title = "版本", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody Version bo) { + return toAjax(versionService.updateById(bo)); + } + + /** + * 删除版本 + * + * @param ids 主键串 + */ + @SaCheckPermission("cai:version:remove") + @Log(title = "版本", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(versionService.removeBatchByIds(Arrays.asList(ids))); + } +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Version.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Version.java new file mode 100644 index 00000000..105cf75f --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Version.java @@ -0,0 +1,68 @@ +package com.ruoyi.cai.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 版本对象 cai_version + * + * @author 77 + * @date 2024-02-02 + */ +@Data +@TableName("cai_version") +public class Version implements Serializable { + + private static final long serialVersionUID=1L; + + /** + * ID + */ + @TableId(value = "id",type = IdType.AUTO) + private Long id; + /** + * 平台 1.android 2.ios + */ + private Integer platform; + /** + * + */ + private Integer versionCode; + /** + * 旧版本号 + */ + private String oldVersion; + /** + * 新版本号 + */ + private String newVersion; + /** + * 包大小 + */ + private String packageSize; + /** + * 升级内容 + */ + private String content; + /** + * 下载地址 + */ + private String downloadUrl; + /** + * 强制更新 + */ + private Integer enforce; + /** + * 状态 1-启用 0-禁用 + */ + private Integer enableStatus; + + private LocalDateTime createTime; + private LocalDateTime updateTime; + +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/AnchorJoinHomeVo.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/AnchorJoinHomeVo.java index 30060f8c..6a63cd82 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/AnchorJoinHomeVo.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/AnchorJoinHomeVo.java @@ -1,5 +1,6 @@ package com.ruoyi.cai.dto.app.vo; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.io.Serializable; @@ -9,21 +10,33 @@ public class AnchorJoinHomeVo implements Serializable { /** * 资料是否完成 0 未完成 1已完成 */ + @Schema(description = "资料是否完成 0 未完成 1已完成") private Integer finishStatus; /** * 相册上传状态 0 未上传 1 已上传 */ + @Schema(description = "相册上传状态 0 未完成 1已完成") + @Deprecated private Integer photoStatus; + + @Schema(description = "头像上传状态 0-默认头像 1-自定义头像") + private Integer avatarState; /** * 自拍认证 0 未认证 1 已认证 */ + @Schema(description = "自拍认证 0 未完成 1已完成") private Integer cameraStatus; /** * 是否同意服务协议 */ + @Schema(description = "是否同意服务协议 0 未完成 1已完成") private Integer agreeProtocol; + @Schema(description = "主播申请状态 0-未申请 1-审核中 2-审核通过 3-审核失败") private Integer applyStatus; + @Schema(description = "审核备注") + private String auditRemark; + } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/version/VersionSystemInfo.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/version/VersionSystemInfo.java new file mode 100644 index 00000000..1bb74417 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/version/VersionSystemInfo.java @@ -0,0 +1,44 @@ +package com.ruoyi.cai.dto.app.vo.version; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class VersionSystemInfo { + + + @Schema(description = "当前版本是否为最新版") + private Integer isNewVersion; + @Schema(description = "不知道撒玩意, 一直为0") + private Integer versionCode; + /** + * 旧版本号 + */ + @Schema(description = "旧版本号") + private String oldVersion; + /** + * 新版本号 + */ + @Schema(description = "新版本号") + private String version; + /** + * 包大小 + */ + @Schema(description = "包大小") + private String packageSize; + /** + * 升级内容 + */ + @Schema(description = "升级内容") + private String content; + /** + * 下载地址 + */ + @Schema(description = "下载地址") + private String downloadurl; + /** + * 强制更新 + */ + @Schema(description = "是否强制更新") + private Integer enforce = 0; +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/version/VersionPlatformEnum.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/version/VersionPlatformEnum.java new file mode 100644 index 00000000..4f2b9158 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/version/VersionPlatformEnum.java @@ -0,0 +1,19 @@ +package com.ruoyi.cai.enums.version; + +import lombok.Getter; + +// 1.android 2.ios +@Getter +public enum VersionPlatformEnum { + ANDROID(1,"安卓"), + IOS(2,"ios"), + ; + + private final Integer code; + private final String text; + + VersionPlatformEnum(Integer code, String text) { + this.code = code; + this.text = text; + } +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/VersionMapper.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/VersionMapper.java new file mode 100644 index 00000000..5605afb5 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/VersionMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.cai.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.cai.domain.Version; + +/** + * 版本Mapper接口 + * + * @author 77 + * @date 2024-02-02 + */ +public interface VersionMapper extends BaseMapper { + +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/VersionService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/VersionService.java new file mode 100644 index 00000000..8ef740ef --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/VersionService.java @@ -0,0 +1,17 @@ +package com.ruoyi.cai.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.cai.domain.Version; +import com.ruoyi.cai.dto.app.vo.version.VersionSystemInfo; +import com.ruoyi.cai.enums.version.VersionPlatformEnum; + +/** + * 版本Service接口 + * + * @author 77 + * @date 2024-02-02 + */ +public interface VersionService extends IService { + + VersionSystemInfo systemInfo(String version, VersionPlatformEnum versionPlatformEnum); +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/AnchorApplyServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/AnchorApplyServiceImpl.java index c7ad628b..dca7d7e5 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/AnchorApplyServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/AnchorApplyServiceImpl.java @@ -60,11 +60,13 @@ public class AnchorApplyServiceImpl extends ServiceImpl implements VersionService { + + @Override + public VersionSystemInfo systemInfo(String version, VersionPlatformEnum versionPlatformEnum){ + if(!StringUtils.isNotBlank(version)){ + VersionSystemInfo res = new VersionSystemInfo(); + res.setIsNewVersion(1); + res.setVersion("1.0.0"); + return res; + } + List list = this.list(Wrappers.lambdaQuery(Version.class) + .eq(Version::getPlatform, versionPlatformEnum.getCode()) + .eq(Version::getEnableStatus, 1)); + list.sort(Comparator.comparing(Version::getNewVersion, VersionUtil::compareVersion)); + if(list.isEmpty()){ + VersionSystemInfo res = new VersionSystemInfo(); + res.setIsNewVersion(1); + res.setVersion("1.0.0"); + return res; + } + Version newVersion = list.get(0); // 最新版 + if(VersionUtil.compareVersion(version,newVersion.getNewVersion()) >= 0){ // 版本号比最新版还大 + VersionSystemInfo res = new VersionSystemInfo(); + res.setIsNewVersion(1); + res.setVersion(newVersion.getNewVersion()); + return res; + } + Integer enforce = 0; + for (Version v : list) { + if(enforce == 0){ + enforce = v.getEnforce(); + } + int i = VersionUtil.compareVersion(version, v.getNewVersion()); + if(i <= 0){ // 版本号小于改版本 + VersionSystemInfo res = new VersionSystemInfo(); + res.setIsNewVersion(0); + res.setVersionCode(v.getVersionCode()); + res.setOldVersion(v.getOldVersion()); + res.setVersion(v.getNewVersion()); + res.setPackageSize(v.getPackageSize()); + res.setContent(v.getContent()); + res.setDownloadurl(v.getDownloadUrl()); + res.setEnforce(enforce); + return res; + } + } + VersionSystemInfo res = new VersionSystemInfo(); + res.setIsNewVersion(1); + res.setVersion("1.0.0"); + return res; + } + +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/util/VersionUtil.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/util/VersionUtil.java new file mode 100644 index 00000000..067846b0 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/util/VersionUtil.java @@ -0,0 +1,36 @@ +package com.ruoyi.cai.util; + +import com.ruoyi.cai.enums.version.VersionPlatformEnum; +import com.ruoyi.common.utils.ServletUtils; + +import javax.servlet.http.HttpServletRequest; + +public class VersionUtil { + + public static String getAppVersion(){ + HttpServletRequest request = ServletUtils.getRequest(); + return request.getHeader("version"); + } + + public static VersionPlatformEnum getVersionPlatform(){ + HttpServletRequest request = ServletUtils.getRequest(); + String sourceId = request.getHeader("source_id"); + if("2".equals(sourceId)){ + return VersionPlatformEnum.IOS; + } + return VersionPlatformEnum.ANDROID; + } + + public static int compareVersion(String v1, String v2) { + String[] ss1 = v1.split("\\."), ss2 = v2.split("\\."); + int n = ss1.length, m = ss2.length; + int i = 0, j = 0; + while (i < n || j < m) { + int a = 0, b = 0; + if (i < n) a = Integer.parseInt(ss1[i++]); + if (j < m) b = Integer.parseInt(ss2[j++]); + if (a != b) return a > b ? 1 : -1; + } + return 0; + } +} diff --git a/ruoyi-cai/src/main/resources/mapper/cai/VersionMapper.xml b/ruoyi-cai/src/main/resources/mapper/cai/VersionMapper.xml new file mode 100644 index 00000000..29b238a5 --- /dev/null +++ b/ruoyi-cai/src/main/resources/mapper/cai/VersionMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + +