Commit 0fe9c219 by lijinqi

计算资源分类接口+分类对应商品接口完成

parent 1899c420
......@@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.annotation.security.PermitAll;
import java.util.Arrays;
import java.util.List;
......@@ -29,6 +30,7 @@ public class AppBannerInfoController {
private BannerInfoService bannerInfoService;
// 只包含客户端需要的只读方法
@PermitAll
@GetMapping("/get")
@Operation(summary = "获得banner页管理")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
......@@ -38,6 +40,7 @@ public class AppBannerInfoController {
return success( BeanUtils.toBean(bannerInfo, BannerInfoRespVO.class));
}
@PermitAll
@GetMapping("/bannerList")
public CommonResult<List<BannerInfoRespVO>> getBannerList() {
List<BannerInfoDO> list = bannerInfoService.getAllBanners(); // 新增Service方法
......
......@@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.annotation.security.PermitAll;
import java.util.Arrays;
import java.util.List;
......@@ -26,6 +27,7 @@ public class AppComputilityinformationController {
@Resource
private ComputilityInformationService computilityInformationService;
@PermitAll
@GetMapping("/get")
@Operation(summary = "获得计算资源首页管理")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
......@@ -35,6 +37,7 @@ public class AppComputilityinformationController {
return success(BeanUtils.toBean(computilityInformation, ComputilityInformationRespVO.class));
}
@PermitAll
@GetMapping("/computilityList")
public CommonResult<List<ComputilityInformationRespVO>> getList() {
List<ComputilityInformationDO> list = computilityInformationService.getAllComputilityInformations(); // 新增Service方法
......
package com.luhu.computility.module.biz.controller.app.dict;
import com.luhu.computility.framework.common.biz.system.dict.DictDataCommonApi;
import com.luhu.computility.framework.common.biz.system.dict.dto.DictDataRespDTO;
import com.luhu.computility.framework.common.pojo.CommonResult;
import com.luhu.computility.framework.common.util.object.BeanUtils;
import com.luhu.computility.module.biz.controller.admin.computilityinformation.vo.ComputilityInformationRespVO;
import com.luhu.computility.module.biz.dal.dataobject.computilityinformation.ComputilityInformationDO;
import com.luhu.computility.module.biz.service.computilityinformation.ComputilityInformationService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.annotation.security.PermitAll;
import java.util.Arrays;
import java.util.List;
import static com.luhu.computility.framework.common.pojo.CommonResult.success;
@Tag(name = "用户 APP - 获得指定字典类型的字典数据列表 ")
@RestController
@RequestMapping("/biz/dict")
public class AppDictController {
@Resource
private DictDataCommonApi dictDataCommonApi;
@PermitAll
@GetMapping("/getByType")
@Operation(summary = "获得指定字典类型的字典数据列表")
@Parameter(name = "dictType", description = "字典类型", required = true, example = "")
public CommonResult<List<DictDataRespDTO>> getDictDataList(@RequestParam("dictType") String dictType) {
return success(dictDataCommonApi.getDictDataList(dictType));
}
}
\ No newline at end of file
......@@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.annotation.security.PermitAll;
import java.util.Arrays;
import java.util.List;
......@@ -24,6 +25,7 @@ public class AppIndustryApplicationController {
@Resource
private IndustryApplicationService industryApplicationService;
@PermitAll
@GetMapping("/assemblyList")
public CommonResult<List<IndustryApplicationRespVO>> getIndustryApplicationList() {
List<IndustryApplicationDO> list = industryApplicationService.getAllIndustryApplication(); // 新增Service方法
......
......@@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.annotation.security.PermitAll;
import java.util.Arrays;
import java.util.List;
......@@ -28,6 +29,7 @@ public class AppInformationController {
@Resource
private InformationService informationService;
@PermitAll
@GetMapping("/informationList")
public CommonResult<List<InformationRespVO>> getInformationList() {
List<InformationDO> list = informationService.getAllInformation(); // 新增Service方法
......
package com.luhu.computility.module.product.controller.admin.spu.vo;
import com.luhu.computility.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static com.luhu.computility.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 商品 SKU 分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ProductSkuPageReqVO extends PageParam {
@Schema(description = "商品名称", example = "清凉小短袖")
private String name;
@Schema(description = "商品分类编号", example = "1")
private Long categoryId;
@Schema(description = "创建时间", example = "[2022-07-01 00:00:00, 2022-07-01 23:59:59]")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}
......@@ -24,27 +24,9 @@ public class ProductSkuRespVO {
@Schema(description = "成本价", example = "19")
private Integer costPrice;
@Schema(description = "条形码", example = "15156165456")
private String barCode;
@Schema(description = "图片地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/xx.png")
private String picUrl;
@Schema(description = "库存", requiredMode = Schema.RequiredMode.REQUIRED, example = "200")
private Integer stock;
@Schema(description = "商品重量,单位:kg 千克", example = "1.2")
private Double weight;
@Schema(description = "商品体积,单位:m^3 平米", example = "2.5")
private Double volume;
@Schema(description = "一级分销的佣金,单位:分", example = "199")
private Integer firstBrokeragePrice;
@Schema(description = "二级分销的佣金,单位:分", example = "19")
private Integer secondBrokeragePrice;
@Schema(description = "属性数组")
private List<ProductSkuSaveReqVO.Property> properties;
......
package com.luhu.computility.module.product.controller.app.category;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.luhu.computility.framework.common.pojo.CommonResult;
import com.luhu.computility.framework.common.util.object.BeanUtils;
import com.luhu.computility.module.infra.api.config.ConfigApi;
import com.luhu.computility.module.product.controller.app.category.vo.AppCategoryRespVO;
import com.luhu.computility.module.product.dal.dataobject.category.ProductCategoryDO;
import com.luhu.computility.module.product.service.category.ProductCategoryService;
......@@ -32,6 +34,12 @@ public class AppCategoryController {
@Resource
private ProductCategoryService categoryService;
@Resource
private ConfigApi configApi;
static final String COMPUTILITY_CATEGORY = "computility_category";
@GetMapping("/list")
@Operation(summary = "获得商品分类列表")
@PermitAll
......@@ -41,6 +49,25 @@ public class AppCategoryController {
return success(BeanUtils.toBean(list, AppCategoryRespVO.class));
}
@GetMapping("/list-by-parentid")
@Operation(summary = "获取某一级分类下商品分类列表")
@PermitAll
public CommonResult<List<AppCategoryRespVO>> getProductCategoryListByParentId(@RequestParam("id") Long id) {
List<ProductCategoryDO> list = categoryService.getProductCategoryListByParentId(id);
list.sort(Comparator.comparing(ProductCategoryDO::getSort));
return success(BeanUtils.toBean(list, AppCategoryRespVO.class));
}
@GetMapping("/list-computility")
@Operation(summary = "获取计算资源分类列表")
public CommonResult<List<AppCategoryRespVO>> getComputilityCategoryList() {
Long parentId = Long.parseLong(configApi.getConfigValueByKey(COMPUTILITY_CATEGORY));
List<ProductCategoryDO> list = categoryService.getProductCategoryListByParentId(parentId);
list.sort(Comparator.comparing(ProductCategoryDO::getSort));
return success(BeanUtils.toBean(list, AppCategoryRespVO.class));
}
@GetMapping("/list-by-ids")
@Operation(summary = "获得商品分类列表,指定编号")
@Parameter(name = "ids", description = "商品分类编号数组", required = true)
......
......@@ -12,17 +12,17 @@ public class AppCategoryRespVO {
@Schema(description = "分类编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
private Long id;
/*
@Schema(description = "父分类编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "父分类编号不能为空")
private Long parentId;
private Long parentId;*/
@Schema(description = "分类名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "办公文具")
@NotBlank(message = "分类名称不能为空")
private String name;
/*
@Schema(description = "分类图片", requiredMode = Schema.RequiredMode.REQUIRED)
@NotBlank(message = "分类图片不能为空")
private String picUrl;
private String picUrl;*/
}
package com.luhu.computility.module.product.controller.app.sku;
import cn.hutool.core.collection.CollUtil;
import com.luhu.computility.framework.common.pojo.CommonResult;
import com.luhu.computility.framework.common.pojo.PageResult;
import com.luhu.computility.framework.common.util.object.BeanUtils;
import com.luhu.computility.module.product.controller.admin.spu.vo.ProductSkuPageReqVO;
import com.luhu.computility.module.product.controller.admin.spu.vo.ProductSkuRespVO;
import com.luhu.computility.module.product.controller.app.sku.vo.AppProductSkuRespVO;
import com.luhu.computility.module.product.dal.dataobject.sku.ProductSkuDO;
import com.luhu.computility.module.product.service.history.ProductBrowseHistoryService;
import com.luhu.computility.module.product.service.sku.ProductSkuService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.annotation.security.PermitAll;
import javax.validation.Valid;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import static com.luhu.computility.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.luhu.computility.framework.common.pojo.CommonResult.success;
import static com.luhu.computility.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
import static com.luhu.computility.module.product.enums.ErrorCodeConstants.SKU_NOT_EXISTS;
@Tag(name = "用户 APP - 商品 SKU")
@RestController
@RequestMapping("/product/sku")
@Validated
public class AppProductSkuController {
@Resource
private ProductSkuService productSkuService;
@GetMapping("/page")
@Operation(summary = "获得商品 SKU 分页")
public CommonResult<PageResult<ProductSkuRespVO>> getSkuPage(@Valid ProductSkuPageReqVO pageVO) {
PageResult<ProductSkuRespVO> skuList = productSkuService.getSkuList(pageVO);
return success(skuList);
}
@GetMapping("/get-detail")
@Operation(summary = "获得商品 SKU 明细")
@Parameter(name = "id", description = "编号", required = true)
@PermitAll
public CommonResult<ProductSkuRespVO> getSKUDetail(@RequestParam("id") Long id) {
// 获得商品 SKU
return success(productSkuService.getDetail(id));
}
}
package com.luhu.computility.module.product.controller.app.sku.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@Schema(description = "用户 App - 商品 SKU Response VO")
@Data
public class AppProductSkuRespVO {
@Schema(description = "商品 SKU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Long id;
@Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "服务器")
private String name;
@Schema(description = "商品简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "清凉小短袖简介")
private String properties;
@Schema(description = "分类编号", requiredMode = Schema.RequiredMode.REQUIRED)
private Long categoryId;
@Schema(description = "商品封面图", requiredMode = Schema.RequiredMode.REQUIRED)
private String picUrl;
@Schema(description = "商品价格,单位使用:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Integer price;
@Schema(description = "市场价,单位使用:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Integer marketPrice;
@Schema(description = "库存", requiredMode = Schema.RequiredMode.REQUIRED, example = "666")
private Integer stock;
// ========== 统计相关字段 =========
@Schema(description = "商品销量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Integer salesCount;
}
package com.luhu.computility.module.product.dal.mysql.category;
import com.luhu.computility.framework.common.enums.CommonStatusEnum;
import com.luhu.computility.framework.mybatis.core.mapper.BaseMapperX;
import com.luhu.computility.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.luhu.computility.module.product.controller.admin.category.vo.ProductCategoryListReqVO;
......@@ -26,6 +27,14 @@ public interface ProductCategoryMapper extends BaseMapperX<ProductCategoryDO> {
.orderByDesc(ProductCategoryDO::getId));
}
default List<ProductCategoryDO> selectListByParentId(Long parentId) {
return selectList(new LambdaQueryWrapperX<ProductCategoryDO>()
.eqIfPresent(ProductCategoryDO::getParentId, parentId)
.eqIfPresent(ProductCategoryDO::getStatus, CommonStatusEnum.ENABLE.getStatus())
.orderByDesc(ProductCategoryDO::getId));
}
default Long selectCountByParentId(Long parentId) {
return selectCount(ProductCategoryDO::getParentId, parentId);
}
......
package com.luhu.computility.module.product.dal.mysql.sku;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.luhu.computility.framework.common.pojo.PageResult;
import com.luhu.computility.framework.mybatis.core.mapper.BaseMapperX;
import com.luhu.computility.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.luhu.computility.framework.mybatis.core.query.MPJLambdaWrapperX;
import com.luhu.computility.module.product.controller.admin.category.vo.ProductCategoryListReqVO;
import com.luhu.computility.module.product.controller.admin.spu.vo.ProductSkuPageReqVO;
import com.luhu.computility.module.product.controller.admin.spu.vo.ProductSkuRespVO;
import com.luhu.computility.module.product.controller.admin.spu.vo.ProductSpuPageReqVO;
import com.luhu.computility.module.product.dal.dataobject.category.ProductCategoryDO;
import com.luhu.computility.module.product.dal.dataobject.sku.ProductSkuDO;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.luhu.computility.module.product.dal.dataobject.spu.ProductSpuDO;
import com.luhu.computility.module.system.dal.dataobject.permission.RoleDO;
import com.luhu.computility.module.system.dal.dataobject.permission.UserRoleDO;
import com.luhu.computility.module.system.dal.dataobject.user.AdminUserDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
......@@ -63,4 +77,28 @@ public interface ProductSkuMapper extends BaseMapperX<ProductSkuDO> {
return update(null, updateWrapper);
}
/**
* 获取商品 SKU 分页列表数据
*
* @param queryVO 分页请求参数
* @return 商品 SKU 分页列表数据
*/
default PageResult<ProductSkuRespVO> selectPage(ProductSkuPageReqVO queryVO) {
return selectJoinPage(queryVO, ProductSkuRespVO.class, new MPJLambdaWrapperX<ProductSkuDO>()
.selectAll(ProductSkuDO.class)
.select(ProductSpuDO::getName)
.leftJoin(ProductSpuDO.class, ProductSpuDO::getId, ProductSkuDO::getSpuId)
.eq(!ObjectUtil.isEmpty(queryVO.getCategoryId()), ProductSpuDO::getCategoryId, queryVO.getCategoryId() )
.orderByDesc(ProductSkuDO::getCreator));
}
default ProductSkuRespVO getDetail(Long id) {
return selectJoinOne(ProductSkuRespVO.class, new MPJLambdaWrapperX<ProductSkuDO>()
.selectAll(ProductSkuDO.class)
.select(ProductSpuDO::getName)
.leftJoin(ProductSpuDO.class, ProductSpuDO::getId, ProductSkuDO::getSpuId)
.eq(!ObjectUtil.isEmpty(id), ProductSkuDO::getId , id)
.orderByDesc(ProductSkuDO::getCreator));
}
}
......@@ -93,4 +93,7 @@ public interface ProductCategoryService {
*/
void validateCategoryList(Collection<Long> ids);
List<ProductCategoryDO> getProductCategoryListByParentId(Long id);
}
......@@ -176,6 +176,12 @@ public class ProductCategoryServiceImpl implements ProductCategoryService {
return productCategoryMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus());
}
@Override
public List<ProductCategoryDO> getProductCategoryListByParentId(Long id) {
return productCategoryMapper.selectListByParentId(id);
}
@Override
public List<ProductCategoryDO> getEnableCategoryList(List<Long> ids) {
return productCategoryMapper.selectListByIdAndStatus(ids, CommonStatusEnum.ENABLE.getStatus());
......
package com.luhu.computility.module.product.service.sku;
import com.luhu.computility.framework.common.pojo.PageResult;
import com.luhu.computility.module.product.api.sku.dto.ProductSkuUpdateStockReqDTO;
import com.luhu.computility.module.product.controller.admin.spu.vo.ProductSkuPageReqVO;
import com.luhu.computility.module.product.controller.admin.spu.vo.ProductSkuRespVO;
import com.luhu.computility.module.product.controller.admin.spu.vo.ProductSkuSaveReqVO;
import com.luhu.computility.module.product.dal.dataobject.sku.ProductSkuDO;
......@@ -29,6 +32,8 @@ public interface ProductSkuService {
*/
ProductSkuDO getSku(Long id);
/**
* 获得商品 SKU 信息
*
......@@ -47,6 +52,17 @@ public interface ProductSkuService {
List<ProductSkuDO> getSkuList(Collection<Long> ids);
/**
* 根据商品分类获得商品 SKU 列表
*
* @param queryVO 编号
* @return 商品sku列表
*/
PageResult<ProductSkuRespVO> getSkuList(ProductSkuPageReqVO queryVO);
ProductSkuRespVO getDetail(Long id);
/**
* 对 sku 的组合的属性等进行合法性校验
*
* @param list sku组合的集合
......
......@@ -3,8 +3,11 @@ package com.luhu.computility.module.product.service.sku;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.ObjectUtil;
import com.luhu.computility.framework.common.pojo.PageResult;
import com.luhu.computility.framework.common.util.object.BeanUtils;
import com.luhu.computility.module.product.api.sku.dto.ProductSkuUpdateStockReqDTO;
import com.luhu.computility.module.product.controller.admin.spu.vo.ProductSkuPageReqVO;
import com.luhu.computility.module.product.controller.admin.spu.vo.ProductSkuRespVO;
import com.luhu.computility.module.product.controller.admin.spu.vo.ProductSkuSaveReqVO;
import com.luhu.computility.module.product.convert.sku.ProductSkuConvert;
import com.luhu.computility.module.product.dal.dataobject.property.ProductPropertyDO;
......@@ -85,6 +88,18 @@ public class ProductSkuServiceImpl implements ProductSkuService {
}
@Override
public PageResult<ProductSkuRespVO> getSkuList(ProductSkuPageReqVO queryVO) {
return productSkuMapper.selectPage(queryVO);
}
@Override
public ProductSkuRespVO getDetail(Long id) {
return productSkuMapper.getDetail(id);
}
@Override
public void validateSkuList(List<ProductSkuSaveReqVO> skus, Boolean specType) {
// 0、校验skus是否为空
if (CollUtil.isEmpty(skus)) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment