Commit c3de25e760a66523d17ea3a5cf8ace57f6b821ec
1 parent
a159a983
营销:
1. 调整店铺装修接口
Showing
14 changed files
with
149 additions
and
151 deletions
yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/decorate/DecorateComponentEnum.java
| 1 | package cn.iocoder.yudao.module.promotion.enums.decorate; | 1 | package cn.iocoder.yudao.module.promotion.enums.decorate; |
| 2 | 2 | ||
| 3 | +import lombok.AllArgsConstructor; | ||
| 3 | import lombok.Getter; | 4 | import lombok.Getter; |
| 4 | 5 | ||
| 5 | /** | 6 | /** |
| @@ -8,11 +9,44 @@ import lombok.Getter; | @@ -8,11 +9,44 @@ import lombok.Getter; | ||
| 8 | * @author jason | 9 | * @author jason |
| 9 | */ | 10 | */ |
| 10 | @Getter | 11 | @Getter |
| 12 | +@AllArgsConstructor | ||
| 13 | +@SuppressWarnings("JavadocLinkAsPlainText") | ||
| 11 | public enum DecorateComponentEnum { | 14 | public enum DecorateComponentEnum { |
| 12 | 15 | ||
| 13 | - NAV_MENU("nav-menu", "导航菜单"), | ||
| 14 | - ROLLING_BANNER("rolling-banner", "滚动横幅广告"), | ||
| 15 | - PRODUCT_CATEGORY("product-category", "商品分类"); | 16 | + /** |
| 17 | + * 格式:[{ | ||
| 18 | + * "name": "标题" | ||
| 19 | + * "picUrl": "https://www.iocoder.cn/xxx.png", | ||
| 20 | + * "url": "/pages/users/index" | ||
| 21 | + * }] | ||
| 22 | + * | ||
| 23 | + * 最多 10 个 | ||
| 24 | + */ | ||
| 25 | + MENU("menu", "菜单"), | ||
| 26 | + /** | ||
| 27 | + * 格式:[{ | ||
| 28 | + * "name": "标题" | ||
| 29 | + * "url": "/pages/users/index" | ||
| 30 | + * }] | ||
| 31 | + */ | ||
| 32 | + ROLLING_NEWS("scrolling-news", "滚动新闻"), | ||
| 33 | + /** | ||
| 34 | + * 格式:[{ | ||
| 35 | + * "picUrl": "https://www.iocoder.cn/xxx.png", | ||
| 36 | + * "url": "/pages/users/index" | ||
| 37 | + * }] | ||
| 38 | + */ | ||
| 39 | + SLIDE_SHOW("slide-show", "轮播图"), | ||
| 40 | + /** | ||
| 41 | + * 格式:[{ | ||
| 42 | + * "name": "标题" | ||
| 43 | + * "type": "类型", // best、hot、new、benefit、good | ||
| 44 | + * "tag": "标签" // 例如说:多买多省 | ||
| 45 | + * }] | ||
| 46 | + * | ||
| 47 | + * 最多 4 个 | ||
| 48 | + */ | ||
| 49 | + PRODUCT_RECOMMEND("product-recommend", "商品推荐"); | ||
| 16 | 50 | ||
| 17 | /** | 51 | /** |
| 18 | * 页面组件代码 | 52 | * 页面组件代码 |
| @@ -24,9 +58,4 @@ public enum DecorateComponentEnum { | @@ -24,9 +58,4 @@ public enum DecorateComponentEnum { | ||
| 24 | */ | 58 | */ |
| 25 | private final String desc; | 59 | private final String desc; |
| 26 | 60 | ||
| 27 | - DecorateComponentEnum(String code, String desc) { | ||
| 28 | - this.code = code; | ||
| 29 | - this.desc = desc; | ||
| 30 | - } | ||
| 31 | - | ||
| 32 | } | 61 | } |
yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/decorate/DecoratePageEnum.java
| @@ -17,12 +17,13 @@ public enum DecoratePageEnum implements IntArrayValuable { | @@ -17,12 +17,13 @@ public enum DecoratePageEnum implements IntArrayValuable { | ||
| 17 | 17 | ||
| 18 | INDEX(1, "首页"); | 18 | INDEX(1, "首页"); |
| 19 | 19 | ||
| 20 | - private static final int[] ARRAYS = Arrays.stream(values()).mapToInt(DecoratePageEnum::getId).toArray(); | 20 | + private static final int[] ARRAYS = Arrays.stream(values()).mapToInt(DecoratePageEnum::getPage).toArray(); |
| 21 | 21 | ||
| 22 | /** | 22 | /** |
| 23 | - * 页面 id | 23 | + * 页面编号 |
| 24 | */ | 24 | */ |
| 25 | - private final Integer id; | 25 | + private final Integer page; |
| 26 | + | ||
| 26 | /** | 27 | /** |
| 27 | * 页面名称 | 28 | * 页面名称 |
| 28 | */ | 29 | */ |
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/decorate/DecorateComponentController.http
0 → 100644
| 1 | +### /promotion/decorate/save 保存页面装修组件 | ||
| 2 | +POST {{baseUrl}}/promotion/decorate/save | ||
| 3 | +Content-Type: application/json | ||
| 4 | +Authorization: Bearer {{token}} | ||
| 5 | +tenant-id: {{adminTenentId}} | ||
| 6 | + | ||
| 7 | +{ | ||
| 8 | + "page": 1, | ||
| 9 | + "code": "slide-show", | ||
| 10 | + "status": 0, | ||
| 11 | + "value": "null" | ||
| 12 | +} | ||
| 13 | + | ||
| 14 | +### /promotion/decorate/list 获取指定页面的组件列表 | ||
| 15 | +GET {{baseUrl}}/promotion/decorate/list?page=1 | ||
| 16 | +Content-Type: application/json | ||
| 17 | +Authorization: Bearer {{token}} | ||
| 18 | +tenant-id: {{adminTenentId}} |
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/decorate/DecorateComponentController.java
| @@ -2,45 +2,49 @@ package cn.iocoder.yudao.module.promotion.controller.admin.decorate; | @@ -2,45 +2,49 @@ package cn.iocoder.yudao.module.promotion.controller.admin.decorate; | ||
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 4 | import cn.iocoder.yudao.framework.common.validation.InEnum; | 4 | import cn.iocoder.yudao.framework.common.validation.InEnum; |
| 5 | -import cn.iocoder.yudao.module.promotion.controller.admin.decorate.vo.DecorateComponentSaveReqVO; | ||
| 6 | import cn.iocoder.yudao.module.promotion.controller.admin.decorate.vo.DecorateComponentRespVO; | 5 | import cn.iocoder.yudao.module.promotion.controller.admin.decorate.vo.DecorateComponentRespVO; |
| 6 | +import cn.iocoder.yudao.module.promotion.controller.admin.decorate.vo.DecorateComponentSaveReqVO; | ||
| 7 | +import cn.iocoder.yudao.module.promotion.convert.decorate.DecorateComponentConvert; | ||
| 7 | import cn.iocoder.yudao.module.promotion.enums.decorate.DecoratePageEnum; | 8 | import cn.iocoder.yudao.module.promotion.enums.decorate.DecoratePageEnum; |
| 8 | import cn.iocoder.yudao.module.promotion.service.decorate.DecorateComponentService; | 9 | import cn.iocoder.yudao.module.promotion.service.decorate.DecorateComponentService; |
| 9 | import io.swagger.v3.oas.annotations.Operation; | 10 | import io.swagger.v3.oas.annotations.Operation; |
| 10 | import io.swagger.v3.oas.annotations.Parameter; | 11 | import io.swagger.v3.oas.annotations.Parameter; |
| 11 | import io.swagger.v3.oas.annotations.tags.Tag; | 12 | import io.swagger.v3.oas.annotations.tags.Tag; |
| 13 | +import org.springframework.security.access.prepost.PreAuthorize; | ||
| 12 | import org.springframework.validation.annotation.Validated; | 14 | import org.springframework.validation.annotation.Validated; |
| 13 | import org.springframework.web.bind.annotation.*; | 15 | import org.springframework.web.bind.annotation.*; |
| 14 | 16 | ||
| 15 | import javax.annotation.Resource; | 17 | import javax.annotation.Resource; |
| 16 | import javax.validation.Valid; | 18 | import javax.validation.Valid; |
| 19 | +import java.util.List; | ||
| 17 | 20 | ||
| 18 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | 21 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 19 | -import static cn.iocoder.yudao.module.promotion.convert.decorate.DecorateComponentConvert.INSTANCE; | ||
| 20 | 22 | ||
| 21 | @Tag(name = "管理后台 - 店铺页面装修") | 23 | @Tag(name = "管理后台 - 店铺页面装修") |
| 22 | @RestController | 24 | @RestController |
| 23 | @RequestMapping("/promotion/decorate") | 25 | @RequestMapping("/promotion/decorate") |
| 24 | @Validated | 26 | @Validated |
| 25 | public class DecorateComponentController { | 27 | public class DecorateComponentController { |
| 28 | + | ||
| 26 | @Resource | 29 | @Resource |
| 27 | private DecorateComponentService decorateComponentService; | 30 | private DecorateComponentService decorateComponentService; |
| 28 | 31 | ||
| 29 | - @PostMapping("/page-save") | ||
| 30 | - @Operation(summary = "保存页面装修") | ||
| 31 | - // TODO 加权限 | ||
| 32 | - public CommonResult<Boolean> savePageComponents(@Valid @RequestBody DecorateComponentSaveReqVO reqVO) { | ||
| 33 | - decorateComponentService.savePageComponents(reqVO); | 32 | + @PostMapping("/save") |
| 33 | + @Operation(summary = "保存页面装修组件") | ||
| 34 | + @PreAuthorize("@ss.hasPermission('promotion:decorate:save')") | ||
| 35 | + public CommonResult<Boolean> saveDecorateComponent(@Valid @RequestBody DecorateComponentSaveReqVO reqVO) { | ||
| 36 | + decorateComponentService.saveDecorateComponent(reqVO); | ||
| 34 | return success(true); | 37 | return success(true); |
| 35 | } | 38 | } |
| 36 | 39 | ||
| 37 | - @GetMapping("/get-page-components") | ||
| 38 | - @Operation(summary = "获取装修页面组件") | ||
| 39 | - @Parameter(name = "pageId", description = "页面 id", required = true) | ||
| 40 | - // TODO 加权限 | ||
| 41 | - public CommonResult<DecorateComponentRespVO> getPageComponents( | ||
| 42 | - @RequestParam("pageId") @InEnum(DecoratePageEnum.class) Integer pageId) { | ||
| 43 | - return success(INSTANCE.convert2(pageId, decorateComponentService.getPageComponents(pageId))); | 40 | + @GetMapping("/list") |
| 41 | + @Operation(summary = "获取指定页面的组件列表") | ||
| 42 | + @Parameter(name = "page", description = "页面 id", required = true) | ||
| 43 | + @PreAuthorize("@ss.hasPermission('promotion:decorate:query')") | ||
| 44 | + public CommonResult<List<DecorateComponentRespVO>> getDecorateComponentListByPage( | ||
| 45 | + @RequestParam("page") @InEnum(DecoratePageEnum.class) Integer page) { | ||
| 46 | + return success(DecorateComponentConvert.INSTANCE.convertList02( | ||
| 47 | + decorateComponentService.getDecorateComponentListByPage(page, null))); | ||
| 44 | } | 48 | } |
| 45 | 49 | ||
| 46 | } | 50 | } |
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/decorate/vo/DecorateComponentRespVO.java
| @@ -3,31 +3,17 @@ package cn.iocoder.yudao.module.promotion.controller.admin.decorate.vo; | @@ -3,31 +3,17 @@ package cn.iocoder.yudao.module.promotion.controller.admin.decorate.vo; | ||
| 3 | import io.swagger.v3.oas.annotations.media.Schema; | 3 | import io.swagger.v3.oas.annotations.media.Schema; |
| 4 | import lombok.Data; | 4 | import lombok.Data; |
| 5 | 5 | ||
| 6 | -import java.util.List; | ||
| 7 | - | ||
| 8 | @Schema(description = "管理后台 - 页面装修 Resp VO") | 6 | @Schema(description = "管理后台 - 页面装修 Resp VO") |
| 9 | @Data | 7 | @Data |
| 10 | public class DecorateComponentRespVO { | 8 | public class DecorateComponentRespVO { |
| 11 | 9 | ||
| 12 | - @Schema(description = "页面 id ", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 13 | - private Integer pageId; | ||
| 14 | - | ||
| 15 | - @Schema(description = "页面组件", requiredMode = Schema.RequiredMode.REQUIRED, example = "TODO") | ||
| 16 | - private List<ComponentRespVO> components; | ||
| 17 | - | ||
| 18 | - @Schema(description = "管理后台 - 页面组件 Resp VO") | ||
| 19 | - @Data | ||
| 20 | - public static class ComponentRespVO { | ||
| 21 | - | ||
| 22 | - @Schema(description = "组件编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 23 | - private Long id; | ||
| 24 | - | ||
| 25 | - @Schema(description = "组件编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "nav-menu") | ||
| 26 | - private String code; | 10 | + @Schema(description = "组件编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "nav-menu") |
| 11 | + private String code; | ||
| 27 | 12 | ||
| 28 | - @Schema(description = "组件的内容配置项", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "TODO") | ||
| 29 | - private String value; | 13 | + @Schema(description = "组件的内容配置项", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "TODO") |
| 14 | + private String value; | ||
| 30 | 15 | ||
| 31 | - } | 16 | + @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| 17 | + private Integer status; | ||
| 32 | 18 | ||
| 33 | } | 19 | } |
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/decorate/vo/DecorateComponentSaveReqVO.java
| @@ -5,10 +5,8 @@ import cn.iocoder.yudao.module.promotion.enums.decorate.DecoratePageEnum; | @@ -5,10 +5,8 @@ import cn.iocoder.yudao.module.promotion.enums.decorate.DecoratePageEnum; | ||
| 5 | import io.swagger.v3.oas.annotations.media.Schema; | 5 | import io.swagger.v3.oas.annotations.media.Schema; |
| 6 | import lombok.Data; | 6 | import lombok.Data; |
| 7 | 7 | ||
| 8 | -import javax.validation.Valid; | ||
| 9 | import javax.validation.constraints.NotEmpty; | 8 | import javax.validation.constraints.NotEmpty; |
| 10 | import javax.validation.constraints.NotNull; | 9 | import javax.validation.constraints.NotNull; |
| 11 | -import java.util.List; | ||
| 12 | 10 | ||
| 13 | @Schema(description = "管理后台 - 页面装修的保存 Request VO ") | 11 | @Schema(description = "管理后台 - 页面装修的保存 Request VO ") |
| 14 | @Data | 12 | @Data |
| @@ -17,28 +15,17 @@ public class DecorateComponentSaveReqVO { | @@ -17,28 +15,17 @@ public class DecorateComponentSaveReqVO { | ||
| 17 | @Schema(description = "页面 id ", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | 15 | @Schema(description = "页面 id ", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| 18 | @NotNull(message = "页面 id 不能为空") | 16 | @NotNull(message = "页面 id 不能为空") |
| 19 | @InEnum(DecoratePageEnum.class) | 17 | @InEnum(DecoratePageEnum.class) |
| 20 | - private Integer pageId; | 18 | + private Integer page; |
| 21 | 19 | ||
| 22 | - @Schema(description = "页面组件列表", requiredMode = Schema.RequiredMode.REQUIRED, example = "TODO") | ||
| 23 | - @NotEmpty(message = "页面组件列表不能为空") | ||
| 24 | - @Valid | ||
| 25 | - private List<ComponentReqVO> components; | 20 | + @Schema(description = "组件编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "nav-menu") |
| 21 | + @NotEmpty(message = "组件编码不能为空") | ||
| 22 | + private String code; | ||
| 26 | 23 | ||
| 27 | - @Schema(description = "管理后台 - 页面装修组件 Request VO") | ||
| 28 | - @Data | ||
| 29 | - public static class ComponentReqVO { | 24 | + @Schema(description = "组件对应值, json 字符串, 含内容配置,具体数据", requiredMode = Schema.RequiredMode.REQUIRED) |
| 25 | + @NotEmpty(message = "组件值为空") | ||
| 26 | + private String value; | ||
| 30 | 27 | ||
| 31 | - @Schema(description = "组件编码", example = "1") | ||
| 32 | - private Long id; | ||
| 33 | - | ||
| 34 | - @Schema(description = "组件编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "nav-menu") | ||
| 35 | - @NotEmpty(message = "组件编码不能为空") | ||
| 36 | - private String code; | ||
| 37 | - | ||
| 38 | - @Schema(description = "组件对应值, json 字符串, 含内容配置,具体数据", requiredMode = Schema.RequiredMode.REQUIRED, example = "TODO") | ||
| 39 | - @NotEmpty(message = "组件值为空") | ||
| 40 | - private String value; | ||
| 41 | - | ||
| 42 | - } | 28 | + @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| 29 | + private Integer status; | ||
| 43 | 30 | ||
| 44 | } | 31 | } |
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/decorate/AppDecorateController.java
| 1 | package cn.iocoder.yudao.module.promotion.controller.app.decorate; | 1 | package cn.iocoder.yudao.module.promotion.controller.app.decorate; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | 4 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 4 | import cn.iocoder.yudao.framework.common.validation.InEnum; | 5 | import cn.iocoder.yudao.framework.common.validation.InEnum; |
| 5 | import cn.iocoder.yudao.module.promotion.controller.app.decorate.vo.AppDecorateComponentRespVO; | 6 | import cn.iocoder.yudao.module.promotion.controller.app.decorate.vo.AppDecorateComponentRespVO; |
| 7 | +import cn.iocoder.yudao.module.promotion.convert.decorate.DecorateComponentConvert; | ||
| 6 | import cn.iocoder.yudao.module.promotion.enums.decorate.DecoratePageEnum; | 8 | import cn.iocoder.yudao.module.promotion.enums.decorate.DecoratePageEnum; |
| 7 | import cn.iocoder.yudao.module.promotion.service.decorate.DecorateComponentService; | 9 | import cn.iocoder.yudao.module.promotion.service.decorate.DecorateComponentService; |
| 8 | import io.swagger.v3.oas.annotations.Operation; | 10 | import io.swagger.v3.oas.annotations.Operation; |
| @@ -15,9 +17,9 @@ import org.springframework.web.bind.annotation.RequestParam; | @@ -15,9 +17,9 @@ import org.springframework.web.bind.annotation.RequestParam; | ||
| 15 | import org.springframework.web.bind.annotation.RestController; | 17 | import org.springframework.web.bind.annotation.RestController; |
| 16 | 18 | ||
| 17 | import javax.annotation.Resource; | 19 | import javax.annotation.Resource; |
| 20 | +import java.util.List; | ||
| 18 | 21 | ||
| 19 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | 22 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 20 | -import static cn.iocoder.yudao.module.promotion.convert.decorate.DecorateComponentConvert.INSTANCE; | ||
| 21 | 23 | ||
| 22 | @Tag(name = "用户 APP - 店铺装修") | 24 | @Tag(name = "用户 APP - 店铺装修") |
| 23 | @RestController | 25 | @RestController |
| @@ -28,12 +30,13 @@ public class AppDecorateController { | @@ -28,12 +30,13 @@ public class AppDecorateController { | ||
| 28 | @Resource | 30 | @Resource |
| 29 | private DecorateComponentService decorateComponentService; | 31 | private DecorateComponentService decorateComponentService; |
| 30 | 32 | ||
| 31 | - @GetMapping("/get-page-components") | ||
| 32 | - @Operation(summary = "获取装修页面组件") | ||
| 33 | - @Parameter(name = "pageId", description = "页面 id", required = true) | ||
| 34 | - public CommonResult<AppDecorateComponentRespVO> getPageComponents( | ||
| 35 | - @RequestParam("pageId") @InEnum(DecoratePageEnum.class) Integer pageId) { | ||
| 36 | - return success(INSTANCE.appConvert(pageId, decorateComponentService.getPageComponents(pageId))); | 33 | + @GetMapping("/get-component-list") |
| 34 | + @Operation(summary = "获取指定页面的组件列表") | ||
| 35 | + @Parameter(name = "page", description = "页面编号", required = true) | ||
| 36 | + public CommonResult<List<AppDecorateComponentRespVO>> getDecorateComponentListByPage( | ||
| 37 | + @RequestParam("page") @InEnum(DecoratePageEnum.class) Integer page) { | ||
| 38 | + return success(DecorateComponentConvert.INSTANCE.convertList( | ||
| 39 | + decorateComponentService.getDecorateComponentListByPage(page, CommonStatusEnum.ENABLE.getStatus()))); | ||
| 37 | } | 40 | } |
| 38 | 41 | ||
| 39 | } | 42 | } |
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/decorate/vo/AppDecorateComponentRespVO.java
| @@ -3,28 +3,14 @@ package cn.iocoder.yudao.module.promotion.controller.app.decorate.vo; | @@ -3,28 +3,14 @@ package cn.iocoder.yudao.module.promotion.controller.app.decorate.vo; | ||
| 3 | import io.swagger.v3.oas.annotations.media.Schema; | 3 | import io.swagger.v3.oas.annotations.media.Schema; |
| 4 | import lombok.Data; | 4 | import lombok.Data; |
| 5 | 5 | ||
| 6 | -import java.util.List; | ||
| 7 | - | ||
| 8 | -@Schema(description = "用户 App - 页面装修 Resp VO") | 6 | +@Schema(description = "用户 App - 页面组件 Resp VO") |
| 9 | @Data | 7 | @Data |
| 10 | public class AppDecorateComponentRespVO { | 8 | public class AppDecorateComponentRespVO { |
| 11 | 9 | ||
| 12 | - @Schema(description = "页面 id ", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 13 | - private Integer pageId; | ||
| 14 | - | ||
| 15 | - @Schema(description = "页面组件", requiredMode = Schema.RequiredMode.REQUIRED, example = "TODO") | ||
| 16 | - private List<AppComponentRespVO> components; | ||
| 17 | - | ||
| 18 | - @Schema(description = "用户 App - 页面组件 Resp VO") | ||
| 19 | - @Data | ||
| 20 | - public static class AppComponentRespVO { | ||
| 21 | - | ||
| 22 | - @Schema(description = "组件编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "nav-menu") | ||
| 23 | - private String code; | ||
| 24 | - | ||
| 25 | - @Schema(description = "组件的内容配置项", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "TODO") | ||
| 26 | - private String value; | 10 | + @Schema(description = "组件编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "nav-menu") |
| 11 | + private String code; | ||
| 27 | 12 | ||
| 28 | - } | 13 | + @Schema(description = "组件的内容配置项", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "TODO") |
| 14 | + private String value; | ||
| 29 | 15 | ||
| 30 | } | 16 | } |
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/decorate/DecorateComponentConvert.java
| 1 | package cn.iocoder.yudao.module.promotion.convert.decorate; | 1 | package cn.iocoder.yudao.module.promotion.convert.decorate; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | ||
| 4 | -import cn.iocoder.yudao.module.promotion.controller.admin.decorate.vo.DecorateComponentSaveReqVO; | ||
| 5 | import cn.iocoder.yudao.module.promotion.controller.admin.decorate.vo.DecorateComponentRespVO; | 3 | import cn.iocoder.yudao.module.promotion.controller.admin.decorate.vo.DecorateComponentRespVO; |
| 4 | +import cn.iocoder.yudao.module.promotion.controller.admin.decorate.vo.DecorateComponentSaveReqVO; | ||
| 6 | import cn.iocoder.yudao.module.promotion.controller.app.decorate.vo.AppDecorateComponentRespVO; | 5 | import cn.iocoder.yudao.module.promotion.controller.app.decorate.vo.AppDecorateComponentRespVO; |
| 7 | import cn.iocoder.yudao.module.promotion.dal.dataobject.decorate.DecorateComponentDO; | 6 | import cn.iocoder.yudao.module.promotion.dal.dataobject.decorate.DecorateComponentDO; |
| 8 | import org.mapstruct.Mapper; | 7 | import org.mapstruct.Mapper; |
| @@ -10,33 +9,15 @@ import org.mapstruct.factory.Mappers; | @@ -10,33 +9,15 @@ import org.mapstruct.factory.Mappers; | ||
| 10 | 9 | ||
| 11 | import java.util.List; | 10 | import java.util.List; |
| 12 | 11 | ||
| 13 | -import static cn.iocoder.yudao.module.promotion.controller.admin.decorate.vo.DecorateComponentRespVO.*; | ||
| 14 | -import static cn.iocoder.yudao.module.promotion.controller.app.decorate.vo.AppDecorateComponentRespVO.*; | ||
| 15 | - | ||
| 16 | @Mapper | 12 | @Mapper |
| 17 | public interface DecorateComponentConvert { | 13 | public interface DecorateComponentConvert { |
| 18 | 14 | ||
| 19 | DecorateComponentConvert INSTANCE = Mappers.getMapper(DecorateComponentConvert.class); | 15 | DecorateComponentConvert INSTANCE = Mappers.getMapper(DecorateComponentConvert.class); |
| 20 | 16 | ||
| 21 | - default List<DecorateComponentDO> convertList(Integer pageId, List<DecorateComponentSaveReqVO.ComponentReqVO> components) { | ||
| 22 | - return CollectionUtils.convertList(components, c -> convert(pageId, c)); | ||
| 23 | - } | ||
| 24 | - | ||
| 25 | - default DecorateComponentRespVO convert2(Integer pageId, List<DecorateComponentDO> list) { | ||
| 26 | - List<ComponentRespVO> components = CollectionUtils.convertList(list, this::convert3); | ||
| 27 | - return new DecorateComponentRespVO().setPageId(pageId).setComponents(components); | ||
| 28 | - } | ||
| 29 | - | ||
| 30 | - DecorateComponentDO convert(Integer pageId, DecorateComponentSaveReqVO.ComponentReqVO reqVO); | ||
| 31 | - | ||
| 32 | - ComponentRespVO convert3(DecorateComponentDO componentDO); | 17 | + List<DecorateComponentRespVO> convertList02(List<DecorateComponentDO> list); |
| 33 | 18 | ||
| 34 | - // ========== App convert ========== | ||
| 35 | - default AppDecorateComponentRespVO appConvert(Integer pageId, List<DecorateComponentDO> list) { | ||
| 36 | - List<AppComponentRespVO> components = CollectionUtils.convertList(list, this::appConvert2); | ||
| 37 | - return new AppDecorateComponentRespVO().setPageId(pageId).setComponents(components); | ||
| 38 | - } | 19 | + DecorateComponentDO convert(DecorateComponentSaveReqVO bean); |
| 39 | 20 | ||
| 40 | - AppComponentRespVO appConvert2(DecorateComponentDO bean); | 21 | + List<AppDecorateComponentRespVO> convertList(List<DecorateComponentDO> list); |
| 41 | 22 | ||
| 42 | } | 23 | } |
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/decorate/DecorateComponentDO.java
| @@ -26,13 +26,14 @@ public class DecorateComponentDO extends BaseDO { | @@ -26,13 +26,14 @@ public class DecorateComponentDO extends BaseDO { | ||
| 26 | 26 | ||
| 27 | /** | 27 | /** |
| 28 | * 所属页面 id | 28 | * 所属页面 id |
| 29 | - * 枚举 {@link DecoratePageEnum#getId()} | 29 | + * |
| 30 | + * 枚举 {@link DecoratePageEnum#getPage()} | ||
| 30 | */ | 31 | */ |
| 31 | - private Integer pageId; | 32 | + private Integer page; |
| 32 | 33 | ||
| 33 | /** | 34 | /** |
| 34 | - * 组件编码 | ||
| 35 | - * 枚举 {@link DecorateComponentEnum#getCode()} | 35 | + * 组件编码 |
| 36 | + * 枚举 {@link DecorateComponentEnum#getCode()} | ||
| 36 | */ | 37 | */ |
| 37 | private String code; | 38 | private String code; |
| 38 | 39 | ||
| @@ -47,4 +48,5 @@ public class DecorateComponentDO extends BaseDO { | @@ -47,4 +48,5 @@ public class DecorateComponentDO extends BaseDO { | ||
| 47 | * 枚举 {@link CommonStatusEnum} | 48 | * 枚举 {@link CommonStatusEnum} |
| 48 | */ | 49 | */ |
| 49 | private Integer status; | 50 | private Integer status; |
| 51 | + | ||
| 50 | } | 52 | } |
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/decorate/DecorateComponentMapper.java
| 1 | package cn.iocoder.yudao.module.promotion.dal.mysql.decorate; | 1 | package cn.iocoder.yudao.module.promotion.dal.mysql.decorate; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.yudao.module.promotion.dal.dataobject.decorate.DecorateComponentDO; | ||
| 4 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | 3 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 4 | +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||
| 5 | +import cn.iocoder.yudao.module.promotion.dal.dataobject.decorate.DecorateComponentDO; | ||
| 5 | import org.apache.ibatis.annotations.Mapper; | 6 | import org.apache.ibatis.annotations.Mapper; |
| 6 | 7 | ||
| 7 | import java.util.List; | 8 | import java.util.List; |
| @@ -9,8 +10,15 @@ import java.util.List; | @@ -9,8 +10,15 @@ import java.util.List; | ||
| 9 | @Mapper | 10 | @Mapper |
| 10 | public interface DecorateComponentMapper extends BaseMapperX<DecorateComponentDO> { | 11 | public interface DecorateComponentMapper extends BaseMapperX<DecorateComponentDO> { |
| 11 | 12 | ||
| 12 | - default List<DecorateComponentDO> selectByPage(Integer pageId){ | ||
| 13 | - return selectList(DecorateComponentDO::getPageId, pageId); | 13 | + default List<DecorateComponentDO> selectListByPageAndStatus(Integer page, Integer status) { |
| 14 | + return selectList(new LambdaQueryWrapperX<DecorateComponentDO>() | ||
| 15 | + .eq(DecorateComponentDO::getPage, page) | ||
| 16 | + .eqIfPresent(DecorateComponentDO::getStatus, status)); | ||
| 17 | + } | ||
| 18 | + | ||
| 19 | + default DecorateComponentDO selectByPageAndCode(Integer page, String code) { | ||
| 20 | + return selectOne(DecorateComponentDO::getPage, page, | ||
| 21 | + DecorateComponentDO::getCode, code); | ||
| 14 | } | 22 | } |
| 15 | 23 | ||
| 16 | } | 24 | } |
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/decorate/DecorateComponentService.java
| @@ -14,17 +14,18 @@ import java.util.List; | @@ -14,17 +14,18 @@ import java.util.List; | ||
| 14 | public interface DecorateComponentService { | 14 | public interface DecorateComponentService { |
| 15 | 15 | ||
| 16 | /** | 16 | /** |
| 17 | - * 店铺装修页面保存 | 17 | + * 保存页面的组件信息 |
| 18 | * | 18 | * |
| 19 | * @param reqVO 请求 VO | 19 | * @param reqVO 请求 VO |
| 20 | */ | 20 | */ |
| 21 | - void savePageComponents(DecorateComponentSaveReqVO reqVO); | 21 | + void saveDecorateComponent(DecorateComponentSaveReqVO reqVO); |
| 22 | 22 | ||
| 23 | /** | 23 | /** |
| 24 | - * 根据页面 id。获取页面的组件信息 | 24 | + * 根据页面 id,获取页面的组件信息 |
| 25 | * | 25 | * |
| 26 | - * @param pageId 页面类型 {@link DecoratePageEnum#getId()} | 26 | + * @param page 页面编号 {@link DecoratePageEnum#getPage()} |
| 27 | + * @param status 状态 | ||
| 27 | */ | 28 | */ |
| 28 | - List<DecorateComponentDO> getPageComponents(Integer pageId); | 29 | + List<DecorateComponentDO> getDecorateComponentListByPage(Integer page, Integer status); |
| 29 | 30 | ||
| 30 | } | 31 | } |
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/decorate/DecorateComponentServiceImpl.java
| 1 | package cn.iocoder.yudao.module.promotion.service.decorate; | 1 | package cn.iocoder.yudao.module.promotion.service.decorate; |
| 2 | 2 | ||
| 3 | -import cn.hutool.core.collection.CollUtil; | ||
| 4 | import cn.iocoder.yudao.module.promotion.controller.admin.decorate.vo.DecorateComponentSaveReqVO; | 3 | import cn.iocoder.yudao.module.promotion.controller.admin.decorate.vo.DecorateComponentSaveReqVO; |
| 5 | -import cn.iocoder.yudao.module.promotion.controller.admin.decorate.vo.DecorateComponentSaveReqVO.ComponentReqVO; | 4 | +import cn.iocoder.yudao.module.promotion.convert.decorate.DecorateComponentConvert; |
| 6 | import cn.iocoder.yudao.module.promotion.dal.dataobject.decorate.DecorateComponentDO; | 5 | import cn.iocoder.yudao.module.promotion.dal.dataobject.decorate.DecorateComponentDO; |
| 7 | import cn.iocoder.yudao.module.promotion.dal.mysql.decorate.DecorateComponentMapper; | 6 | import cn.iocoder.yudao.module.promotion.dal.mysql.decorate.DecorateComponentMapper; |
| 8 | import org.springframework.stereotype.Service; | 7 | import org.springframework.stereotype.Service; |
| 9 | 8 | ||
| 10 | import javax.annotation.Resource; | 9 | import javax.annotation.Resource; |
| 11 | import java.util.List; | 10 | import java.util.List; |
| 12 | -import java.util.Objects; | ||
| 13 | -import java.util.Set; | ||
| 14 | - | ||
| 15 | -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; | ||
| 16 | -import static cn.iocoder.yudao.module.promotion.convert.decorate.DecorateComponentConvert.INSTANCE; | ||
| 17 | 11 | ||
| 18 | /** | 12 | /** |
| 19 | * 装修组件 Service 实现 | 13 | * 装修组件 Service 实现 |
| @@ -27,22 +21,20 @@ public class DecorateComponentServiceImpl implements DecorateComponentService { | @@ -27,22 +21,20 @@ public class DecorateComponentServiceImpl implements DecorateComponentService { | ||
| 27 | private DecorateComponentMapper decorateComponentMapper; | 21 | private DecorateComponentMapper decorateComponentMapper; |
| 28 | 22 | ||
| 29 | @Override | 23 | @Override |
| 30 | - public void savePageComponents(DecorateComponentSaveReqVO reqVO) { | ||
| 31 | - // 1.新增或修改页面组件 | ||
| 32 | - List<DecorateComponentDO> oldList = decorateComponentMapper.selectByPage(reqVO.getPageId()); | ||
| 33 | - | ||
| 34 | - decorateComponentMapper.saveOrUpdateBatch(INSTANCE.convertList(reqVO.getPageId(), reqVO.getComponents())); | ||
| 35 | - // 2.删除相关组件 | ||
| 36 | - Set<Long> deleteIds = convertSet(oldList, DecorateComponentDO::getId); | ||
| 37 | - deleteIds.removeAll(convertSet(reqVO.getComponents(), ComponentReqVO::getId, vo->Objects.nonNull(vo.getId()))); | ||
| 38 | - if (CollUtil.isNotEmpty(deleteIds)) { | ||
| 39 | - decorateComponentMapper.deleteBatchIds(deleteIds); | 24 | + public void saveDecorateComponent(DecorateComponentSaveReqVO reqVO) { |
| 25 | + // 1. 如果存在,则进行更新 | ||
| 26 | + DecorateComponentDO dbComponent = decorateComponentMapper.selectByPageAndCode(reqVO.getPage(), reqVO.getCode()); | ||
| 27 | + if (dbComponent != null) { | ||
| 28 | + decorateComponentMapper.updateById(DecorateComponentConvert.INSTANCE.convert(reqVO).setId(dbComponent.getId())); | ||
| 29 | + return; | ||
| 40 | } | 30 | } |
| 31 | + // 2. 不存在,则进行新增 | ||
| 32 | + decorateComponentMapper.insert(DecorateComponentConvert.INSTANCE.convert(reqVO)); | ||
| 41 | } | 33 | } |
| 42 | 34 | ||
| 43 | @Override | 35 | @Override |
| 44 | - public List<DecorateComponentDO> getPageComponents(Integer pageId) { | ||
| 45 | - return decorateComponentMapper.selectByPage(pageId); | 36 | + public List<DecorateComponentDO> getDecorateComponentListByPage(Integer page, Integer status) { |
| 37 | + return decorateComponentMapper.selectListByPageAndStatus(page, status); | ||
| 46 | } | 38 | } |
| 47 | 39 | ||
| 48 | } | 40 | } |
yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/decorate/DecorateComponentServiceImplTest.java
| @@ -12,7 +12,7 @@ import org.mockito.Mockito; | @@ -12,7 +12,7 @@ import org.mockito.Mockito; | ||
| 12 | import java.util.ArrayList; | 12 | import java.util.ArrayList; |
| 13 | import java.util.List; | 13 | import java.util.List; |
| 14 | 14 | ||
| 15 | -import static cn.iocoder.yudao.module.promotion.enums.decorate.DecorateComponentEnum.ROLLING_BANNER; | 15 | +import static cn.iocoder.yudao.module.promotion.enums.decorate.DecorateComponentEnum.ROLLING_NEWS; |
| 16 | import static cn.iocoder.yudao.module.promotion.enums.decorate.DecoratePageEnum.INDEX; | 16 | import static cn.iocoder.yudao.module.promotion.enums.decorate.DecoratePageEnum.INDEX; |
| 17 | import static org.mockito.ArgumentMatchers.eq; | 17 | import static org.mockito.ArgumentMatchers.eq; |
| 18 | 18 | ||
| @@ -37,10 +37,10 @@ public class DecorateComponentServiceImplTest extends BaseMockitoUnitTest { | @@ -37,10 +37,10 @@ public class DecorateComponentServiceImplTest extends BaseMockitoUnitTest { | ||
| 37 | void testResp(){ | 37 | void testResp(){ |
| 38 | List<DecorateComponentDO> list = new ArrayList<>(1); | 38 | List<DecorateComponentDO> list = new ArrayList<>(1); |
| 39 | DecorateComponentDO decorateDO = new DecorateComponentDO() | 39 | DecorateComponentDO decorateDO = new DecorateComponentDO() |
| 40 | - .setPageId(INDEX.getId()).setValue("") | ||
| 41 | - .setCode(ROLLING_BANNER.getCode()).setId(1L); | 40 | + .setPage(INDEX.getPage()).setValue("") |
| 41 | + .setCode(ROLLING_NEWS.getCode()).setId(1L); | ||
| 42 | list.add(decorateDO); | 42 | list.add(decorateDO); |
| 43 | //mock 方法 | 43 | //mock 方法 |
| 44 | - Mockito.when(decorateComponentMapper.selectByPage(eq(1))).thenReturn(list); | 44 | + Mockito.when(decorateComponentMapper.selectListByPageAndStatus(eq(1))).thenReturn(list); |
| 45 | } | 45 | } |
| 46 | } | 46 | } |