5 changed files with 162 additions and 0 deletions
Split 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; |
|||
|
|||
import cn.hutool.core.collection.CollUtil; |
|||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|||
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.response.UserGetProductDetailByOperatorVo; |
|||
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.query.product.ProductQueryService; |
|||
import com.qniao.framework.utils.PageUtil; |
|||
import com.qniao.framework.utils.TypeConvertUtils; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import javax.annotation.Resource; |
|||
import java.util.List; |
|||
import java.util.Objects; |
|||
|
|||
@Service |
|||
public class ProductQueryServiceImpl implements ProductQueryService { |
|||
|
|||
@Resource |
|||
private ProductViewDao productViewDao; |
|||
@Resource |
|||
private ProductDao productDao; |
|||
@Resource |
|||
private ProductSpecDao productSpecDao; |
|||
@Resource |
|||
private ProductSpecTermDao productSpecTermDao; |
|||
|
|||
@Override |
|||
public IPage<UserPageProductByOperatorVo> pageProductByOperator(PageUtil pageUtil, |
|||
UserPageProductByOperatorQueryParam 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