From 53ac73294f980b85481a3a27699b5eb9958a09e3 Mon Sep 17 00:00:00 2001 From: wuKong Date: Mon, 29 Dec 2025 16:42:21 +0800 Subject: [PATCH] =?UTF-8?q?feat(promotion):=20=E6=B7=BB=E5=8A=A0DIY?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E7=B1=BB=E5=9E=8B=E5=8A=9F=E8=83=BD=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在DiyTemplateBaseVO中新增模板类型字段并添加非空验证 - 在DiyTemplatePageReqVO中新增模板类型查询参数 - 修改AppDiyTemplateController的getUsedDiyTemplate接口支持类型参数 - 在DiyTemplateDO实体中新增type字段存储模板类型 - 更新DiyTemplateMapper的数据查询逻辑支持按类型筛选 - 实现模板类型相关的数据库查询方法,包括默认类型和指定类型的模板查询 - 修改getUsedDiyTemplate服务方法支持类型参数传入 - 优化模板使用逻辑,支持按类型切换模板功能 --- .../enums/diy/DiyTemplateTypeEnum.java | 54 +++++++++++++++++++ .../diy/vo/template/DiyTemplateBaseVO.java | 4 ++ .../diy/vo/template/DiyTemplatePageReqVO.java | 3 ++ .../app/diy/AppDiyTemplateController.java | 5 +- .../dal/dataobject/diy/DiyTemplateDO.java | 5 ++ .../dal/mysql/diy/DiyTemplateMapper.java | 23 ++++++++ .../service/diy/DiyTemplateService.java | 2 +- .../service/diy/DiyTemplateServiceImpl.java | 10 ++-- 8 files changed, 98 insertions(+), 8 deletions(-) create mode 100644 yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/diy/DiyTemplateTypeEnum.java diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/diy/DiyTemplateTypeEnum.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/diy/DiyTemplateTypeEnum.java new file mode 100644 index 000000000..d6ff0dc3e --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/diy/DiyTemplateTypeEnum.java @@ -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; + +/** + * 模板类型枚举 + * uniPlatform + * @author wuKong + */ +@AllArgsConstructor +@Getter +public enum DiyTemplateTypeEnum implements ArrayValuable { + 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; + } +} diff --git a/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/diy/vo/template/DiyTemplateBaseVO.java b/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/diy/vo/template/DiyTemplateBaseVO.java index 63d1d08ae..3f43f6c7a 100644 --- a/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/diy/vo/template/DiyTemplateBaseVO.java +++ b/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/diy/vo/template/DiyTemplateBaseVO.java @@ -23,4 +23,8 @@ public class DiyTemplateBaseVO { @Schema(description = "预览图", example = "[https://www.iocoder.cn/1.jpg]") private List previewPicUrls; + @Schema(description = "模板类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "默认") + @NotEmpty(message = "模板类型不能为空") + private String type; + } diff --git a/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/diy/vo/template/DiyTemplatePageReqVO.java b/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/diy/vo/template/DiyTemplatePageReqVO.java index 1099226f9..c25b5fcb2 100644 --- a/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/diy/vo/template/DiyTemplatePageReqVO.java +++ b/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/diy/vo/template/DiyTemplatePageReqVO.java @@ -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; diff --git a/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/diy/AppDiyTemplateController.java b/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/diy/AppDiyTemplateController.java index 2146024e8..026202e37 100644 --- a/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/diy/AppDiyTemplateController.java +++ b/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/diy/AppDiyTemplateController.java @@ -38,9 +38,10 @@ public class AppDiyTemplateController { // TODO @疯狂:要不要把 used 和 get 接口合并哈;不传递 id,直接拿默认; @GetMapping("/used") @Operation(summary = "使用中的装修模板") + @Parameter(name = "type", description = "装修模板类型", example = "1024") @PermitAll - public CommonResult getUsedDiyTemplate() { - DiyTemplateDO diyTemplate = diyTemplateService.getUsedDiyTemplate(); + public CommonResult getUsedDiyTemplate(@RequestParam(value = "type", required = false) String type) { + DiyTemplateDO diyTemplate = diyTemplateService.getUsedDiyTemplate(type); return success(buildVo(diyTemplate)); } diff --git a/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/diy/DiyTemplateDO.java b/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/diy/DiyTemplateDO.java index 1b7e1d592..0b2676484 100644 --- a/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/diy/DiyTemplateDO.java +++ b/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/diy/DiyTemplateDO.java @@ -38,6 +38,11 @@ public class DiyTemplateDO extends BaseDO { * 模板名称 */ private String name; + /** + * 模板类型 + * {@link DiyTemplateTypeEnum} + */ + private String type; /** * 是否使用 */ diff --git a/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/diy/DiyTemplateMapper.java b/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/diy/DiyTemplateMapper.java index ca3c6284e..e547a6976 100644 --- a/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/diy/DiyTemplateMapper.java +++ b/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/diy/DiyTemplateMapper.java @@ -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 { return selectPage(reqVO, new LambdaQueryWrapperX() .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 { 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() + .eq(DiyTemplateDO::getUsed, used) + .orderByDesc(DiyTemplateDO::getUpdateTime) + .last("LIMIT 1")); + } default DiyTemplateDO selectByName(String name) { return selectOne(DiyTemplateDO::getName, name); diff --git a/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/service/diy/DiyTemplateService.java b/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/service/diy/DiyTemplateService.java index 566e4a75e..e9b475447 100644 --- a/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/service/diy/DiyTemplateService.java +++ b/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/service/diy/DiyTemplateService.java @@ -72,6 +72,6 @@ public interface DiyTemplateService { * * @return 装修模板 */ - DiyTemplateDO getUsedDiyTemplate(); + DiyTemplateDO getUsedDiyTemplate(String type); } diff --git a/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/service/diy/DiyTemplateServiceImpl.java b/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/service/diy/DiyTemplateServiceImpl.java index 6959e827d..d198b4599 100644 --- a/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/service/diy/DiyTemplateServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/service/diy/DiyTemplateServiceImpl.java @@ -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); } }