5 changed files with 162 additions and 0 deletions
Unified View
Diff Options
-
11dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/product/user/ProductUserQueryController.java
-
61dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/product/user/response/UserGetProductDetailByOperatorVo.java
-
1dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/view/ProductViewDao.java
-
3dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/ProductQueryService.java
-
86dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/impl/ProductQueryServiceImpl.java
@ -0,0 +1,61 @@ |
|||||
|
package com.qniao.dam.api.query.product.user.response; |
||||
|
|
||||
|
import com.fasterxml.jackson.databind.annotation.JsonSerialize; |
||||
|
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; |
||||
|
import com.qniao.dam.domian.aggregate.product.constant.ProductMainCategoryEnum; |
||||
|
import com.qniao.dam.domian.aggregate.product.constant.ProductStatusEnum; |
||||
|
import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; |
||||
|
import com.qniao.dam.domian.aggregate.productspec.constant.ProductSpecTermUnitEnum; |
||||
|
import io.swagger.annotations.ApiModelProperty; |
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.math.BigDecimal; |
||||
|
|
||||
|
@Data |
||||
|
public class UserGetProductDetailByOperatorVo { |
||||
|
|
||||
|
@ApiModelProperty("商品标识") |
||||
|
@JsonSerialize(using = ToStringSerializer.class) |
||||
|
private Long productId; |
||||
|
|
||||
|
@ApiModelProperty("商品规格标识") |
||||
|
@JsonSerialize(using = ToStringSerializer.class) |
||||
|
private Long productSpecId; |
||||
|
|
||||
|
@ApiModelProperty("产品主分类") |
||||
|
private ProductMainCategoryEnum mainCategory; |
||||
|
|
||||
|
@ApiModelProperty("产品次分类") |
||||
|
private ProductSubCategoryEnum subCategory; |
||||
|
|
||||
|
@ApiModelProperty("产品标题") |
||||
|
private String productTitle; |
||||
|
|
||||
|
@ApiModelProperty("产品描述") |
||||
|
private String productDesc; |
||||
|
|
||||
|
@ApiModelProperty("详情描述") |
||||
|
private String detailDesc; |
||||
|
|
||||
|
@ApiModelProperty("状态(已上架、已下架)") |
||||
|
private ProductStatusEnum status; |
||||
|
|
||||
|
@ApiModelProperty("原价") |
||||
|
private BigDecimal unitOriginalPrice; |
||||
|
|
||||
|
@ApiModelProperty("售价") |
||||
|
private BigDecimal unitSellingPrice; |
||||
|
|
||||
|
@ApiModelProperty("产品规格(周期、次数)") |
||||
|
private ProductSpecTermUnitEnum productSpecUnit; |
||||
|
|
||||
|
@ApiModelProperty("有效期") |
||||
|
private String validityPeriodValue; |
||||
|
|
||||
|
@ApiModelProperty("购买次数") |
||||
|
private String purchaseTimeValue; |
||||
|
|
||||
|
@ApiModelProperty("单日使用上限") |
||||
|
private String dailyUseLimitValue; |
||||
|
|
||||
|
} |
||||
@ -1,24 +1,110 @@ |
|||||
package com.qniao.dam.query.product.impl; |
package com.qniao.dam.query.product.impl; |
||||
|
|
||||
|
import cn.hutool.core.collection.CollUtil; |
||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import com.qniao.dam.api.query.product.user.request.UserPageProductByOperatorQueryParam; |
import com.qniao.dam.api.query.product.user.request.UserPageProductByOperatorQueryParam; |
||||
|
import com.qniao.dam.api.query.product.user.response.UserGetProductDetailByOperatorVo; |
||||
import com.qniao.dam.api.query.product.user.response.UserPageProductByOperatorVo; |
import com.qniao.dam.api.query.product.user.response.UserPageProductByOperatorVo; |
||||
|
import com.qniao.dam.domain.aggregate.product.entity.Product; |
||||
|
import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec; |
||||
|
import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpecTerm; |
||||
|
import com.qniao.dam.domian.aggregate.productspec.constant.ProductSpecTermNameEnum; |
||||
|
import com.qniao.dam.domian.aggregate.productspec.constant.ProductSpecTermUnitEnum; |
||||
|
import com.qniao.dam.infrastructure.persistent.dao.domain.ProductDao; |
||||
|
import com.qniao.dam.infrastructure.persistent.dao.domain.ProductSpecDao; |
||||
|
import com.qniao.dam.infrastructure.persistent.dao.domain.ProductSpecTermDao; |
||||
import com.qniao.dam.infrastructure.persistent.dao.view.ProductViewDao; |
import com.qniao.dam.infrastructure.persistent.dao.view.ProductViewDao; |
||||
import com.qniao.dam.query.product.ProductQueryService; |
import com.qniao.dam.query.product.ProductQueryService; |
||||
import com.qniao.framework.utils.PageUtil; |
import com.qniao.framework.utils.PageUtil; |
||||
|
import com.qniao.framework.utils.TypeConvertUtils; |
||||
import org.springframework.stereotype.Service; |
import org.springframework.stereotype.Service; |
||||
|
|
||||
import javax.annotation.Resource; |
import javax.annotation.Resource; |
||||
|
import java.util.List; |
||||
|
import java.util.Objects; |
||||
|
|
||||
@Service |
@Service |
||||
public class ProductQueryServiceImpl implements ProductQueryService { |
public class ProductQueryServiceImpl implements ProductQueryService { |
||||
|
|
||||
@Resource |
@Resource |
||||
private ProductViewDao productViewDao; |
private ProductViewDao productViewDao; |
||||
|
@Resource |
||||
|
private ProductDao productDao; |
||||
|
@Resource |
||||
|
private ProductSpecDao productSpecDao; |
||||
|
@Resource |
||||
|
private ProductSpecTermDao productSpecTermDao; |
||||
|
|
||||
@Override |
@Override |
||||
public IPage<UserPageProductByOperatorVo> pageProductByOperator(PageUtil pageUtil, |
public IPage<UserPageProductByOperatorVo> pageProductByOperator(PageUtil pageUtil, |
||||
UserPageProductByOperatorQueryParam queryParam) { |
UserPageProductByOperatorQueryParam queryParam) { |
||||
return productViewDao.pageProductByOperator(pageUtil.toPageWithoutOrders(), queryParam); |
return productViewDao.pageProductByOperator(pageUtil.toPageWithoutOrders(), queryParam); |
||||
} |
} |
||||
|
|
||||
|
@Override |
||||
|
public UserGetProductDetailByOperatorVo getProductDetailByOperator(Long productId) { |
||||
|
UserGetProductDetailByOperatorVo detailVo = null; |
||||
|
Product product = productDao.selectById(productId); |
||||
|
if (Objects.nonNull(product)) { |
||||
|
detailVo = TypeConvertUtils.convert(product, UserGetProductDetailByOperatorVo.class); |
||||
|
ProductSpec productSpec = queryProductSpecByProductId(productId); |
||||
|
if (Objects.nonNull(productSpec)) { |
||||
|
detailVo.setUnitOriginalPrice(productSpec.getUnitOriginalPrice()); |
||||
|
detailVo.setUnitSellingPrice(productSpec.getUnitSellingPrice()); |
||||
|
if (CollUtil.isNotEmpty(productSpec.getProductSpecTermList())) { |
||||
|
detailVo.setProductSpecUnit(getProductSpecUnit(productSpec.getProductSpecTermList(), ProductSpecTermNameEnum.SPEC)); |
||||
|
detailVo.setValidityPeriodValue(getProductSpecValue(productSpec.getProductSpecTermList(), ProductSpecTermNameEnum.VALIDITY_PERIOD)); |
||||
|
detailVo.setPurchaseTimeValue(getProductSpecValue(productSpec.getProductSpecTermList(), ProductSpecTermNameEnum.PURCHASE_TIME)); |
||||
|
detailVo.setDailyUseLimitValue(getProductSpecValue(productSpec.getProductSpecTermList(), ProductSpecTermNameEnum.DAILY_USE_LIMIT)); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
return detailVo; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 找出对应name的value |
||||
|
*/ |
||||
|
private String getProductSpecValue(List<ProductSpecTerm> productSpecTermList, |
||||
|
ProductSpecTermNameEnum name) { |
||||
|
String value = null; |
||||
|
if (CollUtil.isNotEmpty(productSpecTermList)) { |
||||
|
for (ProductSpecTerm term : productSpecTermList) { |
||||
|
if (name.equals(term.getName())) { |
||||
|
value = term.getValue(); |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
return value; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 找出对应name的unit |
||||
|
*/ |
||||
|
private ProductSpecTermUnitEnum getProductSpecUnit(List<ProductSpecTerm> productSpecTermList, |
||||
|
ProductSpecTermNameEnum name) { |
||||
|
ProductSpecTermUnitEnum unitEnum = null; |
||||
|
if (CollUtil.isNotEmpty(productSpecTermList)) { |
||||
|
for (ProductSpecTerm term : productSpecTermList) { |
||||
|
if (name.equals(term.getName())) { |
||||
|
unitEnum = term.getUnit(); |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
return unitEnum; |
||||
|
} |
||||
|
|
||||
|
private ProductSpec queryProductSpecByProductId(Long productId) { |
||||
|
ProductSpec productSpec = productSpecDao.selectOne(new LambdaQueryWrapper<ProductSpec>() |
||||
|
.eq(ProductSpec::getProductId, productId) |
||||
|
.last("limit 1")); |
||||
|
if (Objects.nonNull(productSpec)) { |
||||
|
productSpec.setProductSpecTermList(productSpecTermDao.selectList(new LambdaQueryWrapper<ProductSpecTerm>() |
||||
|
.eq(ProductSpecTerm::getProductSpecId, productSpec.getId()))); |
||||
|
} |
||||
|
return productSpec; |
||||
|
} |
||||
} |
} |
||||
Write
Preview
Loading…
Cancel
Save