diff --git a/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/constant/app/AppPlatformEnum.java b/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/constant/app/AppPlatformEnum.java new file mode 100644 index 000000000..000de55dd --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/constant/app/AppPlatformEnum.java @@ -0,0 +1,33 @@ +package com.bsd.pjcloud.integrated.constant.app; + +import cn.hutool.core.util.ObjectUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * App平台 + */ +@Getter +@AllArgsConstructor +public enum AppPlatformEnum { + + ANDROID("1", "android"), + IOS("2", "ios"), + ; + private final String code; + private final String desc; + + public static AppPlatformEnum valueOfByType(String code) { + return Arrays.stream(AppPlatformEnum.values()) + .filter(v -> ObjectUtil.equal(v.getCode(), code)) + .findFirst().orElse(null); + } + + public static AppPlatformEnum descOf(String description) { + return Arrays.stream(AppPlatformEnum.values()) + .filter(v -> ObjectUtil.equal(v.getDesc(), description)) + .findFirst().orElse(null); + } +} diff --git a/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/constant/app/AppVersionStatusEnum.java b/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/constant/app/AppVersionStatusEnum.java new file mode 100644 index 000000000..144a1c688 --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/constant/app/AppVersionStatusEnum.java @@ -0,0 +1,33 @@ +package com.bsd.pjcloud.integrated.constant.app; + +import cn.hutool.core.util.ObjectUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * App版本状态 + */ +@Getter +@AllArgsConstructor +public enum AppVersionStatusEnum { + PUBLISHED("1", "已发布"), + UNPUBLISHED("2", "未发布"), + OFF_SHELF("3", "已下架"), + ; + private final String code; + private final String desc; + + public static AppVersionStatusEnum valueOfByType(String code) { + return Arrays.stream(AppVersionStatusEnum.values()) + .filter(v -> ObjectUtil.equal(v.getCode(), code)) + .findFirst().orElse(null); + } + + public static AppVersionStatusEnum descOf(String description) { + return Arrays.stream(AppVersionStatusEnum.values()) + .filter(v -> ObjectUtil.equal(v.getDesc(), description)) + .findFirst().orElse(null); + } +} diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/app/AppVersionController.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/app/AppVersionController.java new file mode 100644 index 000000000..c2552d170 --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/app/AppVersionController.java @@ -0,0 +1,100 @@ +package com.bsd.pjcloud.integrated.controller.app; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.common.log.annotation.SysLog; +import com.bsd.pjcloud.integrated.dto.app.AppVersionDto; +import com.bsd.pjcloud.integrated.entity.app.AppVersionEntity; +import com.bsd.pjcloud.integrated.service.AppVersionService; +import com.bsd.pjcloud.integrated.vo.app.AppVersionVo; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import org.springdoc.core.annotations.ParameterObject; +import org.springframework.http.HttpHeaders; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Operation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +/** + * app版本控制表 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/app-version") +@Tag(description = "app-version", name = "app版本控制表管理") +@SecurityRequirement(name = HttpHeaders.AUTHORIZATION) +public class AppVersionController { + + private final AppVersionService appVersionService; + + /* ************************************* start 设备端 start ************************************* */ + @Operation(summary = "分页查询", description = "分页查询") + @GetMapping("/ad/page") + public R> hardPage(@ParameterObject Page page, @ParameterObject AppVersionDto dto) { + return R.ok(appVersionService.pageList(page, dto)); + } + /* ************************************* end 设备端 end ************************************* */ + + /* ************************************* start app start ************************************* */ + @Operation(summary = "获取最新版本", description = "获取最新版本") + @GetMapping("/app/last-version") + public R lastVersion(@ParameterObject AppVersionDto dto) { + return R.ok(appVersionService.lastVersion(dto)); + } + /* ************************************* end app end ************************************* */ + + /** + * 分页查询 + */ + @Operation(summary = "分页查询", description = "分页查询") + @GetMapping("/page") + @PreAuthorize("@pms.hasPermission('integrated_appVersion_view')") + public R> getAppVersionPage(@ParameterObject Page page, @ParameterObject AppVersionDto dto) { + return R.ok(appVersionService.pageList(page, dto)); + } + + /** + * 通过id查询app版本控制表 + */ + @Operation(summary = "通过id查询", description = "通过id查询") + @GetMapping("/{id}") + @PreAuthorize("@pms.hasPermission('integrated_appVersion_view')") + public R getById(@PathVariable("id") Long id) { + return R.ok(appVersionService.getById(id)); + } + + /** + * 新增app版本控制表 + */ + @Operation(summary = "新增app版本控制表", description = "新增app版本控制表") + @SysLog("新增app版本控制表") + @PostMapping + @PreAuthorize("@pms.hasPermission('integrated_appVersion_add')") + public R save(@RequestBody AppVersionEntity appVersion) { + return R.ok(appVersionService.save(appVersion)); + } + + /** + * 修改app版本控制表 + */ + @Operation(summary = "修改app版本控制表", description = "修改app版本控制表") + @SysLog("修改app版本控制表") + @PutMapping + @PreAuthorize("@pms.hasPermission('integrated_appVersion_edit')") + public R updateById(@RequestBody AppVersionEntity appVersion) { + return R.ok(appVersionService.updateById(appVersion)); + } + + /** + * 通过id删除app版本控制表 + */ + @Operation(summary = "通过id删除app版本控制表", description = "通过id删除app版本控制表") + @SysLog("通过id删除app版本控制表") + @DeleteMapping + @PreAuthorize("@pms.hasPermission('integrated_appVersion_del')") + public R removeById(@RequestBody Long[] ids) { + return R.ok(appVersionService.removeBatchByIds(CollUtil.toList(ids))); + } +} \ No newline at end of file diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/dto/app/AppVersionDto.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/dto/app/AppVersionDto.java new file mode 100644 index 000000000..4e482ba37 --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/dto/app/AppVersionDto.java @@ -0,0 +1,8 @@ +package com.bsd.pjcloud.integrated.dto.app; + +import com.bsd.pjcloud.integrated.entity.app.AppVersionEntity; +import lombok.Data; + +@Data +public class AppVersionDto extends AppVersionEntity { +} diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/app/AppVersionEntity.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/app/AppVersionEntity.java new file mode 100755 index 000000000..6df397e7a --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/app/AppVersionEntity.java @@ -0,0 +1,124 @@ +package com.bsd.pjcloud.integrated.entity.app; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.bsd.pjcloud.common.core.util.TenantTable; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * app版本控制表 + */ +@Data +@TenantTable +@TableName("app_version") +@EqualsAndHashCode(callSuper = true) +@Schema(description = "app版本控制表") +public class AppVersionEntity extends Model { + + /** + * 主键ID + */ + @TableId(type = IdType.ASSIGN_ID) + @Schema(description = "主键ID") + private Long id; + + /** + * app唯一编码 + */ + @Schema(description = "app唯一编码") + private String appUniqueCode; + + /** + * 平台类型(android、ios) + */ + @Schema(description = "平台类型(android、ios)") + private String platform; + + /** + * 内部版本号(用于比较大小) + */ + @Schema(description = "内部版本号(用于比较大小)") + private Integer versionCode; + + /** + * 展示版本号(字符串) + */ + @Schema(description = "展示版本号(字符串)") + private String versionName; + + /** + * 更新内容/更新日志 + */ + @Schema(description = "更新内容/更新日志") + private String updateContent; + + /** + * 安装包下载地址(wgt、apk) + */ + @Schema(description = "安装包下载地址(wgt、apk)") + private String downloadUrl; + + /** + * 是否强制更新 + */ + @Schema(description = "是否强制更新") + private String isForce; + + /** + * 是否静默更新(WGT用) + */ + @Schema(description = "是否静默更新(WGT用)") + private String isSilent; + + /** + * 状态(已发布、未发布、已下架) + */ + @Schema(description = "状态(已发布、未发布、已下架)") + private String status; + + /** + * 创建者 + */ + @TableField(fill = FieldFill.INSERT) + @Schema(description = "创建者") + private String createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + @Schema(description = "创建时间") + private LocalDateTime createTime; + + /** + * 更新者 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + @Schema(description = "更新者") + private String updateBy; + + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + @Schema(description = "更新时间") + private LocalDateTime updateTime; + + /** + * 是否删除(0=正常 1=删除) + */ + @TableLogic + @TableField(fill = FieldFill.INSERT) + @Schema(description = "是否删除(0=正常 1=删除)") + private String delFlag; + + /** + * 租户编号 + */ + @Schema(description = "租户编号") + private Long tenantId; +} \ No newline at end of file diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/mapper/app/AppVersionMapper.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/mapper/app/AppVersionMapper.java new file mode 100755 index 000000000..9b8c0e12a --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/mapper/app/AppVersionMapper.java @@ -0,0 +1,16 @@ +package com.bsd.pjcloud.integrated.mapper.app; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper; +import com.bsd.pjcloud.integrated.dto.app.AppVersionDto; +import com.bsd.pjcloud.integrated.entity.app.AppVersionEntity; +import com.bsd.pjcloud.integrated.vo.app.AppVersionVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +@Mapper +public interface AppVersionMapper extends PjcloudBaseMapper { + + Page pagList(Page page, @Param("dto") AppVersionDto dto); + +} \ No newline at end of file diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/AppVersionService.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/AppVersionService.java new file mode 100755 index 000000000..c473dfeeb --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/AppVersionService.java @@ -0,0 +1,20 @@ +package com.bsd.pjcloud.integrated.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.bsd.pjcloud.integrated.dto.app.AppVersionDto; +import com.bsd.pjcloud.integrated.entity.app.AppVersionEntity; +import com.bsd.pjcloud.integrated.vo.app.AppVersionVo; + +public interface AppVersionService extends IService { + + /** + * 分页查询 + */ + Page pageList(Page page, AppVersionDto dto); + + /** + * 获取最新版本 + */ + AppVersionEntity lastVersion(AppVersionDto dto); +} \ No newline at end of file diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/impl/app/AppVersionServiceImpl.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/impl/app/AppVersionServiceImpl.java new file mode 100755 index 000000000..ec2665a65 --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/impl/app/AppVersionServiceImpl.java @@ -0,0 +1,42 @@ +package com.bsd.pjcloud.integrated.service.impl.app; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bsd.pjcloud.integrated.constant.app.AppVersionStatusEnum; +import com.bsd.pjcloud.integrated.dto.app.AppVersionDto; +import com.bsd.pjcloud.integrated.entity.app.AppVersionEntity; +import com.bsd.pjcloud.integrated.mapper.app.AppVersionMapper; +import com.bsd.pjcloud.integrated.service.AppVersionService; +import com.bsd.pjcloud.integrated.vo.app.AppVersionVo; +import org.springframework.stereotype.Service; + +/** + * app版本控制表 + */ +@Service +public class AppVersionServiceImpl extends ServiceImpl implements AppVersionService { + + /** + * 分页查询 + */ + @Override + public Page pageList(Page page, AppVersionDto dto) { + return baseMapper.pagList(page, dto); + } + + /** + * 获取最新版本 + */ + @Override + public AppVersionEntity lastVersion(AppVersionDto dto) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .gt(ObjectUtil.isNotEmpty(dto.getVersionCode()), AppVersionEntity::getVersionCode, dto.getVersionCode()) + .eq(AppVersionEntity::getStatus, AppVersionStatusEnum.PUBLISHED.getCode()) + .like(ObjectUtil.isNotEmpty(dto.getPlatform()), AppVersionEntity::getPlatform, dto.getPlatform()) + .orderByDesc(AppVersionEntity::getVersionCode) + .last("limit 1"); + return baseMapper.selectOne(queryWrapper); + } +} \ No newline at end of file diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/vo/app/AppVersionVo.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/vo/app/AppVersionVo.java new file mode 100644 index 000000000..d66d6e850 --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/vo/app/AppVersionVo.java @@ -0,0 +1,8 @@ +package com.bsd.pjcloud.integrated.vo.app; + +import com.bsd.pjcloud.integrated.entity.app.AppVersionEntity; +import lombok.Data; + +@Data +public class AppVersionVo extends AppVersionEntity { +} diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/app/AppVersionMapper.xml b/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/app/AppVersionMapper.xml new file mode 100644 index 000000000..345955b47 --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/app/AppVersionMapper.xml @@ -0,0 +1,45 @@ + + + + + + select a.id, + a.app_unique_code, + a.platform, + a.version_code, + a.version_name, + a.update_content, + a.download_url, + a.is_force, + a.is_silent, + a.status, + a.create_by, + a.create_time, + a.update_by, + a.update_time, + a.del_flag, + a.tenant_id + + + + a.del_flag = '0' + + and a.app_unique_code LIKE CONCAT('%',#{dto.appUniqueCode},'%') + + + and a.status = #{dto.status} + + + and a.platform = #{dto.platform} + + + + + + \ No newline at end of file diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/xfj/XfjTransactionVo.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/xfj/XfjTransactionVo.java index f0d76c03f..d1d26efe9 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/xfj/XfjTransactionVo.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/xfj/XfjTransactionVo.java @@ -42,7 +42,7 @@ public class XfjTransactionVo extends XfjBaseVo { /** * 消费类型(消费 充值 退款,因错退还) */ - private String Class; + private String ClassAlias; /** * 消费订单号 diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/logs/pjcloud-thirdparty-biz/2026-02/debug.2026-02-10.0.log.gz b/pjcloud-thirdparty/pjcloud-thirdparty-biz/logs/pjcloud-thirdparty-biz/2026-02/debug.2026-02-10.0.log.gz new file mode 100644 index 000000000..22294640b Binary files /dev/null and b/pjcloud-thirdparty/pjcloud-thirdparty-biz/logs/pjcloud-thirdparty-biz/2026-02/debug.2026-02-10.0.log.gz differ