Commit c3de25e760a66523d17ea3a5cf8ace57f6b821ec

Authored by YunaiV
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 }