feat(REQ-2106): 版本更新提示已读记录

This commit is contained in:
chenwenjian 2024-04-12 11:01:32 +08:00
parent f70fb17dd1
commit 254f8e9ecc
6 changed files with 173 additions and 8 deletions

View File

@ -52,7 +52,7 @@ public interface ApplicationVersionApi {
* @return void
*/
@GetMapping("/api/applicationVersion/delete")
ApiResult<Void> deleteById(@RequestParam("id") Long id, @RequestParam("personId") Long personId);
ApiResult<Void> deleteById(@RequestParam("id") Long id, @RequestParam(value = "personId") Long personId);
/**
* 分页查询
@ -71,7 +71,7 @@ public interface ApplicationVersionApi {
* - 对于app根据版本号和操作系统看该版本号是否配置了弹窗提示
* 2. 检查当前用户是否已经提示
* - 若已提示则不再提示直接返回null
* - 若还没有提示则返回该条提示内容记录
* - 若还没有提示则返回该条提示内容记录并记录为已提示
* </p>
*
* @param req {@link GetVersionUpdateRemindContentReq}

View File

@ -0,0 +1,53 @@
package cn.axzo.nanopart.api.request;
import cn.axzo.nanopart.api.enums.OpSystemTypeEnum;
import cn.axzo.nanopart.api.enums.PlatformTypeEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
/**
* @author chenwenjian
* @version 1.0
* @date 2024/4/12 10:15
*/
@Data
@Builder
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class CreateApplicationVersionReadLogReq {
/**
* 阅读人
*/
@NotNull(message = "阅读人不能为空")
private Long personId;
/**
* 版本id
*/
@NotNull(message = "版本记录id不能为空")
private Long versionId;
/**
* 版本号
*/
private String version;
/**
* 平台
* {@link PlatformTypeEnum}
*/
private PlatformTypeEnum platform;
/**
* 操作系统
* {@link OpSystemTypeEnum}
*/
private OpSystemTypeEnum opSystem;
}

View File

@ -1,5 +1,6 @@
package cn.axzo.nanopart.server.domain;
import cn.axzo.nanopart.api.enums.OpSystemTypeEnum;
import cn.axzo.nanopart.api.enums.PlatformTypeEnum;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField;
@ -47,6 +48,13 @@ public class ApplicationVersionReadLog extends BaseEntity<ApplicationVersionRead
@TableField(value = "platform")
private PlatformTypeEnum platform;
/**
* 操作系统
* {@link OpSystemTypeEnum}
*/
@TableField(value = "op_system")
private OpSystemTypeEnum opSystem;
/**
* 创建人
*/

View File

@ -1,9 +1,16 @@
package cn.axzo.nanopart.server.service;
import cn.axzo.nanopart.api.request.CreateApplicationVersionReadLogReq;
import cn.axzo.nanopart.server.domain.ApplicationVersionReadLog;
/**
* @author chenwenjian
* @version 1.0
* @date 2024/4/11 14:15
*/
public interface ApplicationVersionReadLogService {
Long create(CreateApplicationVersionReadLogReq req);
ApplicationVersionReadLog getById(Long id);
}

View File

@ -1,8 +1,10 @@
package cn.axzo.nanopart.server.service.impl;
import cn.axzo.nanopart.api.request.CreateApplicationVersionReadLogReq;
import cn.axzo.nanopart.server.domain.ApplicationVersionReadLog;
import cn.axzo.nanopart.server.mapper.ApplicationVersionReadLogDao;
import cn.axzo.nanopart.server.service.ApplicationVersionReadLogService;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -18,4 +20,18 @@ import org.springframework.stereotype.Service;
@RequiredArgsConstructor
public class ApplicationVersionReadLogServiceImpl extends ServiceImpl<ApplicationVersionReadLogDao, ApplicationVersionReadLog> implements ApplicationVersionReadLogService {
@Override
public Long create(CreateApplicationVersionReadLogReq req) {
ApplicationVersionReadLog versionReadLog = BeanUtil.copyProperties(req, ApplicationVersionReadLog.class);
save(versionReadLog);
return versionReadLog.getId();
}
@Override
public ApplicationVersionReadLog getById(Long id) {
return lambdaQuery()
.eq(ApplicationVersionReadLog::getIsDelete, 0)
.eq(ApplicationVersionReadLog::getId, id)
.one();
}
}

View File

@ -1,23 +1,31 @@
package cn.axzo.nanopart.server.service.impl;
import cn.axzo.framework.domain.ServiceException;
import cn.axzo.nanopart.api.enums.PlatformTypeEnum;
import cn.axzo.nanopart.api.request.CreateApplicationVersionReadLogReq;
import cn.axzo.nanopart.api.request.CreateApplicationVersionReq;
import cn.axzo.nanopart.api.request.GetVersionUpdateRemindContentReq;
import cn.axzo.nanopart.api.request.PageApplicationVersionReq;
import cn.axzo.nanopart.api.request.UpdateApplicationVersionReq;
import cn.axzo.nanopart.api.response.GetVersionUpdateRemindContentResp;
import cn.axzo.nanopart.api.response.PageApplicationVersionResp;
import cn.axzo.nanopart.server.mapper.ApplicationVersionDao;
import cn.axzo.nanopart.server.domain.ApplicationVersion;
import cn.axzo.nanopart.server.domain.ApplicationVersionReadLog;
import cn.axzo.nanopart.server.mapper.ApplicationVersionDao;
import cn.axzo.nanopart.server.service.ApplicationVersionReadLogService;
import cn.axzo.nanopart.server.service.ApplicationVersionService;
import cn.axzo.pokonyan.dao.converter.PageConverter;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Service;
import java.util.Objects;
@ -29,9 +37,18 @@ import java.util.Objects;
*/
@Slf4j
@Service
@RefreshScope
@RequiredArgsConstructor
public class ApplicationVersionServiceImpl extends ServiceImpl<ApplicationVersionDao, ApplicationVersion> implements ApplicationVersionService {
private final ApplicationVersionReadLogService applicationVersionReadLogService;
@Value("${versionRemindImg.app}")
private String appVersionRemindImage;
@Value("${versionRemindImg.cms}")
private String cmsVersionRemindImage;
/**
* 创建版本信息
*
@ -46,20 +63,42 @@ public class ApplicationVersionServiceImpl extends ServiceImpl<ApplicationVersio
return version.getId();
}
/**
* 更新版本信息
*
* @param req {@link UpdateApplicationVersionReq}
*/
@Override
public void update(UpdateApplicationVersionReq req) {
LambdaUpdateWrapper<ApplicationVersion> lambdaUpdateWrapper = buildLambdaUpdateWrapper(req);
update(lambdaUpdateWrapper);
}
/**
* 删除版本信息记录
*
* @param id 版本记录id
* @param personId 操作人personId
*/
@Override
public void deleteById(Long id, Long personId) {
update(buildDeleteLambdaUpdateWrapper(id, personId));
}
/**
* 分页查询版本信息
*
* @param req {@link PageApplicationVersionReq}
* @return 按照版本记录倒排的记录列表
*/
@Override
public Page<PageApplicationVersionResp> page(PageApplicationVersionReq req) {
return null;
LambdaQueryWrapper<ApplicationVersion> lambdaQueryWrapper = buildPageLambdaQueryWrapper(req);
Page<ApplicationVersion> versionPage = page(new Page<>(req.getPageNumber(), req.getPageSize()), lambdaQueryWrapper);
if (Objects.isNull(versionPage) || versionPage.getTotal() == 0) {
return new Page<>();
}
return PageConverter.convert(versionPage, record -> BeanUtil.copyProperties(record, PageApplicationVersionResp.class));
}
/**
@ -84,6 +123,20 @@ public class ApplicationVersionServiceImpl extends ServiceImpl<ApplicationVersio
return null;
}
// 校验该用户是否已经提示
ApplicationVersionReadLog versionReadLog = applicationVersionReadLogService.getById(version.getId());
if (Objects.isNull(versionReadLog)) {
// 该用户未提示
applicationVersionReadLogService.create(CreateApplicationVersionReadLogReq.builder()
.personId(req.getPersonId())
.versionId(version.getId())
.version(version.getVersion())
.platform(version.getPlatform())
.opSystem(version.getOpSystem())
.build());
GetVersionUpdateRemindContentResp versionRemindContent = BeanUtil.copyProperties(version, GetVersionUpdateRemindContentResp.class);
versionRemindContent.setImageUrl(Objects.equals(PlatformTypeEnum.CMS.getName(), version.getPlatform().getName()) ? cmsVersionRemindImage : appVersionRemindImage);
return versionRemindContent;
}
return null;
}
@ -101,7 +154,7 @@ public class ApplicationVersionServiceImpl extends ServiceImpl<ApplicationVersio
.eq(ApplicationVersion::getPlatform, req.getPlatform())
.eq(ApplicationVersion::getOpSystem, req.getOpSystem())
.eq(ApplicationVersion::getIsDelete, 0)
.apply("limit 1")
.orderByDesc(ApplicationVersion::getReleaseTime)
.one();
if (Objects.nonNull(version)) {
throw new ServiceException("版本号重复");
@ -115,8 +168,7 @@ public class ApplicationVersionServiceImpl extends ServiceImpl<ApplicationVersio
* @return {@link LambdaUpdateWrapper}
*/
private LambdaUpdateWrapper<ApplicationVersion> buildLambdaUpdateWrapper(UpdateApplicationVersionReq req) {
LambdaUpdateWrapper<ApplicationVersion> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
return lambdaUpdateWrapper
return new LambdaUpdateWrapper<ApplicationVersion>()
.eq(ApplicationVersion::getIsDelete, 0)
.eq(ApplicationVersion::getId, req.getId())
.set(ApplicationVersion::getVersion, req.getVersion())
@ -125,4 +177,33 @@ public class ApplicationVersionServiceImpl extends ServiceImpl<ApplicationVersio
.set(ApplicationVersion::getJumpUrl, JSONUtil.toJsonStr(req.getJumpUrl()))
.set(ApplicationVersion::getRemind, req.getRemind());
}
/**
* 构建分页查询条件
*
* @param req {@link PageApplicationVersionReq}
* @return {@link LambdaQueryWrapper}
*/
private LambdaQueryWrapper<ApplicationVersion> buildPageLambdaQueryWrapper(PageApplicationVersionReq req) {
return new LambdaQueryWrapper<ApplicationVersion>()
.eq(ApplicationVersion::getIsDelete, 0)
.eq(Objects.nonNull(req.getPlatform()), ApplicationVersion::getPlatform, req.getPlatform())
.eq(Objects.nonNull(req.getOpSystem()), ApplicationVersion::getOpSystem, req.getOpSystem())
.eq(StringUtils.isNotBlank(req.getVersion()), ApplicationVersion::getVersion, req.getVersion())
.orderByDesc(ApplicationVersion::getVersion);
}
/**
* 构建删除版本信息的条件
*
* @param id 版本记录id
* @param personId 操作人personId
* @return 删除条件
*/
private LambdaUpdateWrapper<ApplicationVersion> buildDeleteLambdaUpdateWrapper(Long id, Long personId) {
return new LambdaUpdateWrapper<ApplicationVersion>()
.eq(ApplicationVersion::getId, id)
.set(ApplicationVersion::getCreateBy, personId)
.set(ApplicationVersion::getIsDelete, 1);
}
}