feat(promotion): 添加DIY模板类型功能支持
- 在DiyTemplateBaseVO中新增模板类型字段并添加非空验证 - 在DiyTemplatePageReqVO中新增模板类型查询参数 - 修改AppDiyTemplateController的getUsedDiyTemplate接口支持类型参数 - 在DiyTemplateDO实体中新增type字段存储模板类型 - 更新DiyTemplateMapper的数据查询逻辑支持按类型筛选 - 实现模板类型相关的数据库查询方法,包括默认类型和指定类型的模板查询 - 修改getUsedDiyTemplate服务方法支持类型参数传入 - 优化模板使用逻辑,支持按类型切换模板功能pull/227/head
parent
716e2a63c1
commit
53ac73294f
|
|
@ -0,0 +1,54 @@
|
|||
package cn.iocoder.yudao.module.promotion.enums.diy;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.core.ArrayValuable;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* 模板类型枚举
|
||||
* <a href="https://uniapp.dcloud.net.cn/api/system/info.html#uniplatform">uniPlatform</a>
|
||||
* @author wuKong
|
||||
*/
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public enum DiyTemplateTypeEnum implements ArrayValuable<String> {
|
||||
DEFAULT("default","默认"),
|
||||
APP("app", "App"),
|
||||
WEB("web", "Web"),
|
||||
MP_WEIXIN("mp-weixin", "微信小程序"),
|
||||
MP_ALIPAY("mp-alipay", "支付宝小程序"),
|
||||
MP_BAIDU("mp-baidu", "百度小程序"),
|
||||
MP_TOUTIAO("mp-toutiao", "抖音小程序"),
|
||||
MP_LARK("mp-lark", "飞书小程序"),
|
||||
MP_QQ("mp-qq", "QQ小程序"),
|
||||
MP_KUAISHOU("mp-kuaishou", "快手小程序"),
|
||||
MP_JD("mp-jd", "京东小程序"),
|
||||
MP_360("mp-360", "360小程序"),
|
||||
MP_HARMONY("mp-harmony", "鸿蒙元服务"),
|
||||
QUICKAPP_WEBVIEW("quickapp-webview", "快应用通用(包含联盟、华为)"),
|
||||
QUICKAPP_WEBVIEW_UNION("quickapp-webview-union", "快应用联盟"),
|
||||
QUICKAPP_WEBVIEW_HUAWEI("quickapp-webview-huawei", "快应用华为"),
|
||||
//OTHER_VUSINESS_SCEN("other-business-scen", "其他自定义业务场景"),
|
||||
;
|
||||
|
||||
private static final String[] ARRAYS =
|
||||
Arrays.stream(values()).map(DiyTemplateTypeEnum::getType).toArray(String[]::new);
|
||||
/**
|
||||
* type String比较灵活
|
||||
* 可以是uniPlatform传值
|
||||
* 也增加是自定义的业务场景
|
||||
*/
|
||||
private final String type;
|
||||
|
||||
/**
|
||||
* name
|
||||
*/
|
||||
private final String name;
|
||||
|
||||
@Override
|
||||
public String[] array() {
|
||||
return ARRAYS;
|
||||
}
|
||||
}
|
||||
|
|
@ -23,4 +23,8 @@ public class DiyTemplateBaseVO {
|
|||
@Schema(description = "预览图", example = "[https://www.iocoder.cn/1.jpg]")
|
||||
private List<String> previewPicUrls;
|
||||
|
||||
@Schema(description = "模板类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "默认")
|
||||
@NotEmpty(message = "模板类型不能为空")
|
||||
private String type;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,9 @@ public class DiyTemplatePageReqVO extends PageParam {
|
|||
@Schema(description = "模板名称", example = "默认主题")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "模板类型", example = "默认")
|
||||
private String type;
|
||||
|
||||
@Schema(description = "是否使用", example = "true")
|
||||
private Boolean used;
|
||||
|
||||
|
|
|
|||
|
|
@ -38,9 +38,10 @@ public class AppDiyTemplateController {
|
|||
// TODO @疯狂:要不要把 used 和 get 接口合并哈;不传递 id,直接拿默认;
|
||||
@GetMapping("/used")
|
||||
@Operation(summary = "使用中的装修模板")
|
||||
@Parameter(name = "type", description = "装修模板类型", example = "1024")
|
||||
@PermitAll
|
||||
public CommonResult<AppDiyTemplatePropertyRespVO> getUsedDiyTemplate() {
|
||||
DiyTemplateDO diyTemplate = diyTemplateService.getUsedDiyTemplate();
|
||||
public CommonResult<AppDiyTemplatePropertyRespVO> getUsedDiyTemplate(@RequestParam(value = "type", required = false) String type) {
|
||||
DiyTemplateDO diyTemplate = diyTemplateService.getUsedDiyTemplate(type);
|
||||
return success(buildVo(diyTemplate));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -38,6 +38,11 @@ public class DiyTemplateDO extends BaseDO {
|
|||
* 模板名称
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* 模板类型
|
||||
* {@link DiyTemplateTypeEnum}
|
||||
*/
|
||||
private String type;
|
||||
/**
|
||||
* 是否使用
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package cn.iocoder.yudao.module.promotion.dal.mysql.diy;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
|
|
@ -19,6 +20,7 @@ public interface DiyTemplateMapper extends BaseMapperX<DiyTemplateDO> {
|
|||
return selectPage(reqVO, new LambdaQueryWrapperX<DiyTemplateDO>()
|
||||
.likeIfPresent(DiyTemplateDO::getName, reqVO.getName())
|
||||
.eqIfPresent(DiyTemplateDO::getUsed, reqVO.getUsed())
|
||||
.eqIfPresent(DiyTemplateDO::getType, reqVO.getType())
|
||||
.betweenIfPresent(DiyTemplateDO::getUsedTime, reqVO.getUsedTime())
|
||||
.betweenIfPresent(DiyTemplateDO::getCreateTime, reqVO.getCreateTime())
|
||||
.orderByDesc(DiyTemplateDO::getUsed) // 排序规则1:已使用的排到最前面
|
||||
|
|
@ -28,6 +30,27 @@ public interface DiyTemplateMapper extends BaseMapperX<DiyTemplateDO> {
|
|||
default DiyTemplateDO selectByUsed(boolean used) {
|
||||
return selectOne(DiyTemplateDO::getUsed, used);
|
||||
}
|
||||
default DiyTemplateDO selectByUsed(boolean used, String type) {
|
||||
return selectOne(DiyTemplateDO::getUsed, used, DiyTemplateDO::getType, type);
|
||||
}
|
||||
|
||||
default DiyTemplateDO selectAppByUsed(boolean used, String type) {
|
||||
// 1. 没传类型查默认类型,默认类型找不到,取最近一次使用的模板
|
||||
if (ObjectUtil.isEmpty(type)) {
|
||||
DiyTemplateDO defaultTemplate = selectByUsed(used, "default");
|
||||
return ObjectUtil.isNotEmpty(defaultTemplate) ? defaultTemplate : lastUsedTemplate(true);
|
||||
}
|
||||
// 2. 传了类型根据类型查询,没找到,取默认类型
|
||||
DiyTemplateDO typedTemplate = selectByUsed(used, type);
|
||||
return ObjectUtil.isNotEmpty(typedTemplate) ? typedTemplate : selectByUsed(true, "default");
|
||||
}
|
||||
|
||||
default DiyTemplateDO lastUsedTemplate(boolean used) {
|
||||
return selectOne(new LambdaQueryWrapperX<DiyTemplateDO>()
|
||||
.eq(DiyTemplateDO::getUsed, used)
|
||||
.orderByDesc(DiyTemplateDO::getUpdateTime)
|
||||
.last("LIMIT 1"));
|
||||
}
|
||||
|
||||
default DiyTemplateDO selectByName(String name) {
|
||||
return selectOne(DiyTemplateDO::getName, name);
|
||||
|
|
|
|||
|
|
@ -72,6 +72,6 @@ public interface DiyTemplateService {
|
|||
*
|
||||
* @return 装修模板
|
||||
*/
|
||||
DiyTemplateDO getUsedDiyTemplate();
|
||||
DiyTemplateDO getUsedDiyTemplate(String type);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -125,10 +125,10 @@ public class DiyTemplateServiceImpl implements DiyTemplateService {
|
|||
@Override
|
||||
public void useDiyTemplate(Long id) {
|
||||
// 校验存在
|
||||
validateDiyTemplateExists(id);
|
||||
DiyTemplateDO diyTemplateDO = validateDiyTemplateExists(id);
|
||||
// TODO @疯狂:要不已使用的情况,抛个业务异常?
|
||||
// 已使用的更新为未使用
|
||||
DiyTemplateDO used = diyTemplateMapper.selectByUsed(true);
|
||||
// 已使用的更新为未使用,加入模板类型判断
|
||||
DiyTemplateDO used = diyTemplateMapper.selectByUsed(true, diyTemplateDO.getType());
|
||||
if (used != null) {
|
||||
// 如果 id 相同,说明未发生变化
|
||||
if (used.getId().equals(id)) {
|
||||
|
|
@ -164,8 +164,8 @@ public class DiyTemplateServiceImpl implements DiyTemplateService {
|
|||
}
|
||||
|
||||
@Override
|
||||
public DiyTemplateDO getUsedDiyTemplate() {
|
||||
return diyTemplateMapper.selectByUsed(true);
|
||||
public DiyTemplateDO getUsedDiyTemplate(String type) {
|
||||
return diyTemplateMapper.selectAppByUsed(true, type);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue