mall + promotion:review 页面装修

This commit is contained in:
YunaiV 2023-06-24 12:54:59 +08:00
parent ad1f656dfa
commit b582206003
17 changed files with 57 additions and 61 deletions

View File

@ -132,9 +132,10 @@ public interface BaseMapperX<T> extends MPJBaseMapper<T> {
/** /**
* 批量修改插入, 会根据实体的主键是否为空更新还是修改默认为 1000 * 批量修改插入, 会根据实体的主键是否为空更新还是修改默认为 1000
*
* @param entities 实体们 * @param entities 实体们
*/ */
default void saveOrUpdateBatch(Collection<T> entities){ default void saveOrUpdateBatch(Collection<T> entities){
Db.saveOrUpdateBatch(entities); Db.saveOrUpdateBatch(entities);
} }

View File

@ -1,39 +0,0 @@
package cn.iocoder.yudao.module.product.controller.app.spu.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
@Schema(description = "用户 App - 商品 SPU 分页项 Response VO")
@Data
public class AppProductSpuPageItemRespVO {
@Schema(description = "商品 SPU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Long id;
@Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道")
@NotEmpty(message = "商品名称不能为空")
private String name;
@Schema(description = "分类编号", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "分类编号不能为空")
private Long categoryId;
@Schema(description = "商品图片的数组", requiredMode = Schema.RequiredMode.REQUIRED)
private List<String> picUrls;
@Schema(description = " 最小价格,单位使用:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Integer minPrice;
@Schema(description = "最大价格,单位使用:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Integer maxPrice;
// ========== 统计相关字段 =========
@Schema(description = "商品销量", example = "1024")
private Integer salesCount;
}

View File

@ -20,6 +20,9 @@ public class AppProductSpuPageReqVO extends PageParam {
public static final String SORT_FIELD_SALES_COUNT = "salesCount"; public static final String SORT_FIELD_SALES_COUNT = "salesCount";
public static final String RECOMMEND_TYPE_HOT = "hot"; public static final String RECOMMEND_TYPE_HOT = "hot";
public static final String RECOMMEND_TYPE_BENEFIT = "benefit";
public static final String RECOMMEND_TYPE_BEST = "best";
public static final String RECOMMEND_TYPE_NEW = "new";
public static final String RECOMMEND_TYPE_GOOD = "good"; public static final String RECOMMEND_TYPE_GOOD = "good";
@Schema(description = "分类编号", example = "1") @Schema(description = "分类编号", example = "1")

View File

@ -32,6 +32,9 @@ public class AppProductSpuPageRespVO {
@Schema(description = "商品价格,单位使用:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") @Schema(description = "商品价格,单位使用:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Integer price; private Integer price;
@Schema(description = "市场价,单位使用:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Integer marketPrice;
@Schema(description = "库存", requiredMode = Schema.RequiredMode.REQUIRED, example = "666") @Schema(description = "库存", requiredMode = Schema.RequiredMode.REQUIRED, example = "666")
private Integer stock; private Integer stock;

View File

@ -67,6 +67,12 @@ public interface ProductSpuMapper extends BaseMapperX<ProductSpuDO> {
// 推荐类型的过滤条件 // 推荐类型的过滤条件
if (ObjUtil.equal(pageReqVO.getRecommendType(), AppProductSpuPageReqVO.RECOMMEND_TYPE_HOT)) { if (ObjUtil.equal(pageReqVO.getRecommendType(), AppProductSpuPageReqVO.RECOMMEND_TYPE_HOT)) {
query.eq(ProductSpuDO::getRecommendHot, true); query.eq(ProductSpuDO::getRecommendHot, true);
} else if (ObjUtil.equal(pageReqVO.getRecommendType(), AppProductSpuPageReqVO.RECOMMEND_TYPE_BENEFIT)) {
query.eq(ProductSpuDO::getRecommendBenefit, true);
} else if (ObjUtil.equal(pageReqVO.getRecommendType(), AppProductSpuPageReqVO.RECOMMEND_TYPE_BEST)) {
query.eq(ProductSpuDO::getRecommendBest, true);
} else if (ObjUtil.equal(pageReqVO.getRecommendType(), AppProductSpuPageReqVO.RECOMMEND_TYPE_NEW)) {
query.eq(ProductSpuDO::getRecommendNew, true);
} else if (ObjUtil.equal(pageReqVO.getRecommendType(), AppProductSpuPageReqVO.RECOMMEND_TYPE_GOOD)) { } else if (ObjUtil.equal(pageReqVO.getRecommendType(), AppProductSpuPageReqVO.RECOMMEND_TYPE_GOOD)) {
query.eq(ProductSpuDO::getRecommendGood, true); query.eq(ProductSpuDO::getRecommendGood, true);
} }

View File

@ -9,6 +9,7 @@ import lombok.Getter;
*/ */
@Getter @Getter
public enum DecorateComponentEnum { public enum DecorateComponentEnum {
NAV_MENU("nav-menu", "导航菜单"), NAV_MENU("nav-menu", "导航菜单"),
ROLLING_BANNER("rolling-banner", "滚动横幅广告"), ROLLING_BANNER("rolling-banner", "滚动横幅广告"),
PRODUCT_CATEGORY("product-category", "商品分类"); PRODUCT_CATEGORY("product-category", "商品分类");
@ -27,4 +28,5 @@ public enum DecorateComponentEnum {
this.code = code; this.code = code;
this.desc = desc; this.desc = desc;
} }
} }

View File

@ -14,6 +14,7 @@ import java.util.Arrays;
@AllArgsConstructor @AllArgsConstructor
@Getter @Getter
public enum DecoratePageTypeEnum implements IntArrayValuable { public enum DecoratePageTypeEnum implements IntArrayValuable {
INDEX(1, "首页"); INDEX(1, "首页");
private static final int[] ARRAYS = Arrays.stream(values()).mapToInt(DecoratePageTypeEnum::getType).toArray(); private static final int[] ARRAYS = Arrays.stream(values()).mapToInt(DecoratePageTypeEnum::getType).toArray();
@ -31,4 +32,5 @@ public enum DecoratePageTypeEnum implements IntArrayValuable {
public int[] array() { public int[] array() {
return ARRAYS; return ARRAYS;
} }
} }

View File

@ -38,8 +38,9 @@ public class DecorateComponentController {
@Operation(summary = "获取装修页面组件") @Operation(summary = "获取装修页面组件")
@Parameter(name = "type", description = "页面类型", required = true) @Parameter(name = "type", description = "页面类型", required = true)
// TODO 加权限 // TODO 加权限
public CommonResult<DecorateComponentRespVO> getPageComponents(@RequestParam("type") public CommonResult<DecorateComponentRespVO> getPageComponents(
@InEnum(DecoratePageTypeEnum.class) Integer type) { @RequestParam("type") @InEnum(DecoratePageTypeEnum.class) Integer type) {
return success(INSTANCE.convert2(type, decorateComponentService.getPageComponents(type))); return success(INSTANCE.convert2(type, decorateComponentService.getPageComponents(type)));
} }
} }

View File

@ -10,9 +10,6 @@ import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.util.List; import java.util.List;
/**
* @author jason
*/
@Schema(description = "管理后台 - 页面装修 Request VO ") @Schema(description = "管理后台 - 页面装修 Request VO ")
@Data @Data
public class DecorateComponentReqVO { public class DecorateComponentReqVO {
@ -20,6 +17,7 @@ public class DecorateComponentReqVO {
@NotNull(message = "页面类型不能为空") @NotNull(message = "页面类型不能为空")
@InEnum(DecoratePageTypeEnum.class) @InEnum(DecoratePageTypeEnum.class)
private Integer type; private Integer type;
@Schema(description = "页面组件列表", requiredMode = Schema.RequiredMode.REQUIRED, example = "TODO") @Schema(description = "页面组件列表", requiredMode = Schema.RequiredMode.REQUIRED, example = "TODO")
@NotEmpty(message = "页面组件列表不能为空") @NotEmpty(message = "页面组件列表不能为空")
@Valid @Valid

View File

@ -5,26 +5,29 @@ import lombok.Data;
import java.util.List; import java.util.List;
/**
* @author jason
*/
@Schema(description = "管理后台 - 页面装修 Resp VO") @Schema(description = "管理后台 - 页面装修 Resp VO")
@Data @Data
public class DecorateComponentRespVO { public class DecorateComponentRespVO {
@Schema(description = "页面类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @Schema(description = "页面类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer type; private Integer type;
@Schema(description = "页面组件", requiredMode = Schema.RequiredMode.REQUIRED, example = "TODO") @Schema(description = "页面组件", requiredMode = Schema.RequiredMode.REQUIRED, example = "TODO")
private List<ComponentRespVO> components; private List<ComponentRespVO> components;
@Schema(description = "管理后台 - 页面组件 Resp VO") @Schema(description = "管理后台 - 页面组件 Resp VO")
@Data @Data
public static class ComponentRespVO { public static class ComponentRespVO {
@Schema(description = "组件编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @Schema(description = "组件编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Long id; private Long id;
@Schema(description = "组件编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "nav-menu") @Schema(description = "组件编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "nav-menu")
private String componentCode; private String componentCode;
@Schema(description = "组件的内容配置项", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "TODO") @Schema(description = "组件的内容配置项", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "TODO")
private String componentValue; private String componentValue;
} }
} }

View File

@ -31,8 +31,9 @@ public class AppDecorateController {
@GetMapping("/get-page-components") @GetMapping("/get-page-components")
@Operation(summary = "获取装修页面组件") @Operation(summary = "获取装修页面组件")
@Parameter(name = "type", description = "页面类型", required = true) @Parameter(name = "type", description = "页面类型", required = true)
public CommonResult<AppDecorateComponentRespVO> getPageComponents(@RequestParam("type") public CommonResult<AppDecorateComponentRespVO> getPageComponents(
@InEnum(DecoratePageTypeEnum.class) Integer type) { @RequestParam("type") @InEnum(DecoratePageTypeEnum.class) Integer type) {
return success(INSTANCE.appConvert(type, decorateComponentService.getPageComponents(type))); return success(INSTANCE.appConvert(type, decorateComponentService.getPageComponents(type)));
} }
} }

View File

@ -5,26 +5,29 @@ import lombok.Data;
import java.util.List; import java.util.List;
/**
* @author jason
*/
@Schema(description = "用户 App - 页面装修 Resp VO") @Schema(description = "用户 App - 页面装修 Resp VO")
@Data @Data
public class AppDecorateComponentRespVO { public class AppDecorateComponentRespVO {
@Schema(description = "页面类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @Schema(description = "页面类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer type; private Integer type;
@Schema(description = "页面组件", requiredMode = Schema.RequiredMode.REQUIRED, example = "TODO") @Schema(description = "页面组件", requiredMode = Schema.RequiredMode.REQUIRED, example = "TODO")
private List<AppComponentRespVO> components; private List<AppComponentRespVO> components;
@Schema(description = "用户 App - 页面组件 Resp VO") @Schema(description = "用户 App - 页面组件 Resp VO")
@Data @Data
public static class AppComponentRespVO { public static class AppComponentRespVO {
@Schema(description = "组件编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @Schema(description = "组件编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Long id; private Long id;
@Schema(description = "组件编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "nav-menu") @Schema(description = "组件编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "nav-menu")
private String componentCode; private String componentCode;
@Schema(description = "组件的内容配置项", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "TODO") @Schema(description = "组件的内容配置项", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "TODO")
private String componentValue; private String componentValue;
} }
} }

View File

@ -22,8 +22,8 @@ public interface DecorateComponentConvert {
return CollectionUtils.convertList(components, c -> convert(type, c)); return CollectionUtils.convertList(components, c -> convert(type, c));
} }
default DecorateComponentRespVO convert2(Integer type, List<DecorateComponentDO> doList) { default DecorateComponentRespVO convert2(Integer type, List<DecorateComponentDO> list) {
List<ComponentRespVO> components = CollectionUtils.convertList(doList, this::convert3); List<ComponentRespVO> components = CollectionUtils.convertList(list, this::convert3);
return new DecorateComponentRespVO().setType(type).setComponents(components); return new DecorateComponentRespVO().setType(type).setComponents(components);
} }
@ -32,10 +32,11 @@ public interface DecorateComponentConvert {
ComponentRespVO convert3(DecorateComponentDO componentDO); ComponentRespVO convert3(DecorateComponentDO componentDO);
// ========== App convert ========== // ========== App convert ==========
default AppDecorateComponentRespVO appConvert(Integer type, List<DecorateComponentDO> doList) { default AppDecorateComponentRespVO appConvert(Integer type, List<DecorateComponentDO> list) {
List<AppComponentRespVO> components = CollectionUtils.convertList(doList, this::appConvert2); List<AppComponentRespVO> components = CollectionUtils.convertList(list, this::appConvert2);
return new AppDecorateComponentRespVO().setType(type).setComponents(components); return new AppDecorateComponentRespVO().setType(type).setComponents(components);
} }
AppComponentRespVO appConvert2(DecorateComponentDO componentDO); AppComponentRespVO appConvert2(DecorateComponentDO bean);
} }

View File

@ -17,24 +17,26 @@ import lombok.Data;
@KeySequence("promotion_decorate_component_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写 @KeySequence("promotion_decorate_component_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data @Data
public class DecorateComponentDO extends BaseDO { public class DecorateComponentDO extends BaseDO {
/** /**
* 编号 * 编号
*/ */
@TableId @TableId
private Long id; private Long id;
// TODO @jason要不改成 page貌似更合理
/** /**
* 页面类型 * 页面类型
* 枚举 {@link DecoratePageTypeEnum#getType()} * 枚举 {@link DecoratePageTypeEnum#getType()}
*/ */
private Integer type; private Integer type;
// TODO @jasoncodevalue因为在 component
/** /**
* 组件编码 * 组件编码
* 枚举 {@link DecorateComponentEnum#getCode()} * 枚举 {@link DecorateComponentEnum#getCode()}
*/ */
private String componentCode; private String componentCode;
/** /**
* 组件值json 格式包含配置和数据 * 组件值json 格式包含配置和数据
*/ */
@ -42,6 +44,7 @@ public class DecorateComponentDO extends BaseDO {
/** /**
* 状态 * 状态
*
* 枚举 {@link CommonStatusEnum} * 枚举 {@link CommonStatusEnum}
*/ */
private Integer status; private Integer status;

View File

@ -8,9 +8,11 @@ import java.util.List;
@Mapper @Mapper
public interface DecorateComponentMapper extends BaseMapperX<DecorateComponentDO> { public interface DecorateComponentMapper extends BaseMapperX<DecorateComponentDO> {
default List<DecorateComponentDO> selectByPageType(Integer type){ default List<DecorateComponentDO> selectByPageType(Integer type){
return selectList(DecorateComponentDO::getType, type); return selectList(DecorateComponentDO::getType, type);
} }
} }

View File

@ -15,13 +15,16 @@ public interface DecorateComponentService {
/** /**
* 店铺装修页面保存 * 店铺装修页面保存
*
* @param reqVO 请求 VO * @param reqVO 请求 VO
*/ */
void pageSave(DecorateComponentReqVO reqVO); void pageSave(DecorateComponentReqVO reqVO);
/** /**
* 根据页面类型获取页面的组件信息 * 根据页面类型获取页面的组件信息
*
* @param type 页面类型 {@link DecoratePageTypeEnum#getType()} * @param type 页面类型 {@link DecoratePageTypeEnum#getType()}
*/ */
List<DecorateComponentDO> getPageComponents(Integer type); List<DecorateComponentDO> getPageComponents(Integer type);
} }

View File

@ -16,11 +16,13 @@ import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.
import static cn.iocoder.yudao.module.promotion.convert.decorate.DecorateComponentConvert.INSTANCE; import static cn.iocoder.yudao.module.promotion.convert.decorate.DecorateComponentConvert.INSTANCE;
/** /**
* 装修组件 Service 接口实现 * 装修组件 Service 实现
*
* @author jason * @author jason
*/ */
@Service @Service
public class DecorateComponentServiceImpl implements DecorateComponentService { public class DecorateComponentServiceImpl implements DecorateComponentService {
@Resource @Resource
private DecorateComponentMapper decorateComponentMapper; private DecorateComponentMapper decorateComponentMapper;
@ -42,4 +44,5 @@ public class DecorateComponentServiceImpl implements DecorateComponentService {
public List<DecorateComponentDO> getPageComponents(Integer type) { public List<DecorateComponentDO> getPageComponents(Integer type) {
return decorateComponentMapper.selectByPageType(type); return decorateComponentMapper.selectByPageType(type);
} }
} }