From 5c98efcbc5168f70a5d1a1b060a97e6eb0b74af2 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Thu, 29 Jan 2026 16:03:00 +0800 Subject: [PATCH] =?UTF-8?q?feat:app=E7=89=88=E6=9C=AC=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/1002pjcloudx_integrated.sql | 31 ++--- .../constant/appmodule/AppPlatformEnum.java | 33 +++++ .../appmodule/AppVersionStatusEnum.java | 33 +++++ .../appmodule/AppVersionController.java | 94 +++++++++++++ .../dto/appmodule/AppVersionDto.java | 8 ++ .../entity/app/AppVersionEntity.java | 124 ++++++++++++++++++ .../mapper/appmodule/AppVersionMapper.java | 16 +++ .../integrated/service/AppVersionService.java | 15 +++ .../impl/appmodule/AppVersionServiceImpl.java | 26 ++++ .../integrated/vo/appmodule/AppVersionVo.java | 8 ++ .../mapper/appmodule/AppVersionMapper.xml | 45 +++++++ .../api/constant/act/ActCancelStatusEnum.java | 4 +- 12 files changed, 420 insertions(+), 17 deletions(-) create mode 100644 pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/constant/appmodule/AppPlatformEnum.java create mode 100644 pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/constant/appmodule/AppVersionStatusEnum.java create mode 100755 pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/appmodule/AppVersionController.java create mode 100644 pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/dto/appmodule/AppVersionDto.java create mode 100755 pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/app/AppVersionEntity.java create mode 100755 pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/mapper/appmodule/AppVersionMapper.java create mode 100755 pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/AppVersionService.java create mode 100755 pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/impl/appmodule/AppVersionServiceImpl.java create mode 100644 pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/vo/appmodule/AppVersionVo.java create mode 100755 pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/appmodule/AppVersionMapper.xml diff --git a/db/1002pjcloudx_integrated.sql b/db/1002pjcloudx_integrated.sql index 4cef6fdc2..941f36003 100644 --- a/db/1002pjcloudx_integrated.sql +++ b/db/1002pjcloudx_integrated.sql @@ -17,21 +17,22 @@ CREATE TABLE `hard_panel_setting` -- app版本控制表 CREATE TABLE `app_version` ( - `id` bigint NOT NULL COMMENT '主键ID', - `platform` varchar(32) NOT NULL COMMENT '平台类型(android、ios)', - `version_code` int NOT NULL COMMENT '内部版本号(用于比较大小)', - `version_name` varchar(32) NOT NULL COMMENT '展示版本号(字符串)', - `update_content` text COMMENT '更新内容/更新日志', - `download_url` varchar(512) NOT NULL COMMENT '安装包下载地址(wgt、apk)', - `is_force` varchar(32) NOT NULL COMMENT '是否强制更新', - `is_silent` varchar(32) NOT NULL COMMENT '是否静默更新(WGT用)', - `status` varchar(32) NOT NULL COMMENT '状态(已发布、未发布、已下架)', - `create_by` varchar(50) DEFAULT NULL COMMENT '创建者', - `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_by` varchar(50) DEFAULT NULL COMMENT '更新者', - `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `del_flag` char(1) DEFAULT '0' COMMENT '是否删除(0=正常 1=删除)', - `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户编号', + `id` bigint NOT NULL COMMENT '主键ID', + `app_unique_code` varchar(32) DEFAULT NULL COMMENT 'app唯一编码', + `platform` varchar(32) NOT NULL COMMENT '平台类型(android、ios)', + `version_code` int NOT NULL COMMENT '内部版本号(用于比较大小)', + `version_name` varchar(32) NOT NULL COMMENT '展示版本号(字符串)', + `update_content` text COMMENT '更新内容/更新日志', + `download_url` varchar(512) NOT NULL COMMENT '安装包下载地址(wgt、apk)', + `is_force` varchar(32) NOT NULL COMMENT '是否强制更新', + `is_silent` varchar(32) NOT NULL COMMENT '是否静默更新(WGT用)', + `status` varchar(32) NOT NULL COMMENT '状态(已发布、未发布、已下架)', + `create_by` varchar(50) DEFAULT NULL COMMENT '创建者', + `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(50) DEFAULT NULL COMMENT '更新者', + `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `del_flag` char(1) DEFAULT '0' COMMENT '是否删除(0=正常 1=删除)', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户编号', PRIMARY KEY (`id`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='app版本控制表'; \ No newline at end of file diff --git a/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/constant/appmodule/AppPlatformEnum.java b/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/constant/appmodule/AppPlatformEnum.java new file mode 100644 index 000000000..30b6fa81c --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/constant/appmodule/AppPlatformEnum.java @@ -0,0 +1,33 @@ +package com.bsd.pjcloud.integrated.constant.appmodule; + +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/appmodule/AppVersionStatusEnum.java b/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/constant/appmodule/AppVersionStatusEnum.java new file mode 100644 index 000000000..2ccb67db8 --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/constant/appmodule/AppVersionStatusEnum.java @@ -0,0 +1,33 @@ +package com.bsd.pjcloud.integrated.constant.appmodule; + +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/appmodule/AppVersionController.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/appmodule/AppVersionController.java new file mode 100755 index 000000000..2c88b93d2 --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/appmodule/AppVersionController.java @@ -0,0 +1,94 @@ +package com.bsd.pjcloud.integrated.controller.appmodule; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +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.appmodule.AppVersionDto; +import com.bsd.pjcloud.integrated.entity.app.AppVersionEntity; +import com.bsd.pjcloud.integrated.service.AppVersionService; +import com.bsd.pjcloud.integrated.vo.appmodule.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 ************************************* */ + + /** + * 分页查询 + */ + @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/appmodule/AppVersionDto.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/dto/appmodule/AppVersionDto.java new file mode 100644 index 000000000..97ecbaf6c --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/dto/appmodule/AppVersionDto.java @@ -0,0 +1,8 @@ +package com.bsd.pjcloud.integrated.dto.appmodule; + +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..2c7a6bd15 --- /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 io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.bsd.pjcloud.common.core.util.TenantTable; + +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/appmodule/AppVersionMapper.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/mapper/appmodule/AppVersionMapper.java new file mode 100755 index 000000000..d1fc5e67a --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/mapper/appmodule/AppVersionMapper.java @@ -0,0 +1,16 @@ +package com.bsd.pjcloud.integrated.mapper.appmodule; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper; +import com.bsd.pjcloud.integrated.dto.appmodule.AppVersionDto; +import com.bsd.pjcloud.integrated.entity.app.AppVersionEntity; +import com.bsd.pjcloud.integrated.vo.appmodule.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..7956df570 --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/AppVersionService.java @@ -0,0 +1,15 @@ +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.appmodule.AppVersionDto; +import com.bsd.pjcloud.integrated.entity.app.AppVersionEntity; +import com.bsd.pjcloud.integrated.vo.appmodule.AppVersionVo; + +public interface AppVersionService extends IService { + + /** + * 分页查询 + */ + Page pageList(Page page, 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/appmodule/AppVersionServiceImpl.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/impl/appmodule/AppVersionServiceImpl.java new file mode 100755 index 000000000..2ef290ee8 --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/impl/appmodule/AppVersionServiceImpl.java @@ -0,0 +1,26 @@ +package com.bsd.pjcloud.integrated.service.impl.appmodule; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bsd.pjcloud.integrated.dto.appmodule.AppVersionDto; +import com.bsd.pjcloud.integrated.entity.app.AppVersionEntity; +import com.bsd.pjcloud.integrated.mapper.appmodule.AppVersionMapper; +import com.bsd.pjcloud.integrated.service.AppVersionService; +import com.bsd.pjcloud.integrated.vo.appmodule.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); + } + +} \ No newline at end of file diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/vo/appmodule/AppVersionVo.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/vo/appmodule/AppVersionVo.java new file mode 100644 index 000000000..96c0213cb --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/vo/appmodule/AppVersionVo.java @@ -0,0 +1,8 @@ +package com.bsd.pjcloud.integrated.vo.appmodule; + +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/appmodule/AppVersionMapper.xml b/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/appmodule/AppVersionMapper.xml new file mode 100755 index 000000000..1444d1f11 --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/appmodule/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-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/act/ActCancelStatusEnum.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/act/ActCancelStatusEnum.java index a9cd679d3..68992a817 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/act/ActCancelStatusEnum.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/act/ActCancelStatusEnum.java @@ -23,13 +23,13 @@ public enum ActCancelStatusEnum { public static ActCancelStatusEnum valueOfByType(String code) { return Arrays.stream(ActCancelStatusEnum.values()) .filter(v -> ObjectUtil.equal(v.getCode(), code)) - .findFirst().get(); + .findFirst().orElse(null); } public static ActCancelStatusEnum descOf(String description) { return Arrays.stream(ActCancelStatusEnum.values()) .filter(v -> ObjectUtil.equal(v.getDesc(), description)) - .findFirst().get(); + .findFirst().orElse(null); } }