diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/product/user/ProductUserQueryController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/product/user/ProductUserQueryController.java index 39e44b3..cda680b 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/product/user/ProductUserQueryController.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/product/user/ProductUserQueryController.java @@ -1,6 +1,7 @@ package com.qniao.dam.api.query.product.user; 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.query.product.ProductQueryService; import com.qniao.dau.infrastructure.constant.RequestHeaderFields; @@ -8,6 +9,7 @@ import com.qniao.domain.QnPage; import com.qniao.framework.utils.PageUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -29,4 +31,13 @@ public class ProductUserQueryController { return PageUtil.convert(productQueryService.pageProductByOperator(pageUtil, queryParam), UserPageProductByOperatorVo.class); } + @GetMapping("get/product-detail/by/operator/{id}") + @ApiOperation("运营获取商品详情") + public UserGetProductDetailByOperatorVo userGetProductDetailByOperator(@ApiParam("商品标识") @PathVariable Long id, + @RequestParam("userId") Long userId, + @RequestHeader(name = RequestHeaderFields.FIELD_ORGANIZATION_ID) Long orgId) { + return productQueryService.getProductDetailByOperator(id); + } + + } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/product/user/response/UserGetProductDetailByOperatorVo.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/product/user/response/UserGetProductDetailByOperatorVo.java new file mode 100644 index 0000000..c64a418 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/product/user/response/UserGetProductDetailByOperatorVo.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; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/view/ProductViewDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/view/ProductViewDao.java index 81dfbc3..a7da551 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/view/ProductViewDao.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/view/ProductViewDao.java @@ -3,6 +3,7 @@ package com.qniao.dam.infrastructure.persistent.dao.view; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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 org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/ProductQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/ProductQueryService.java index 95d828e..ef69d3b 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/ProductQueryService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/ProductQueryService.java @@ -2,9 +2,12 @@ package com.qniao.dam.query.product; 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.framework.utils.PageUtil; public interface ProductQueryService { IPage pageProductByOperator(PageUtil pageUtil, UserPageProductByOperatorQueryParam queryParam); + + UserGetProductDetailByOperatorVo getProductDetailByOperator(Long productId); } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/impl/ProductQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/impl/ProductQueryServiceImpl.java index 0e7c3b3..fb61352 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/impl/ProductQueryServiceImpl.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/impl/ProductQueryServiceImpl.java @@ -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 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 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 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() + .eq(ProductSpec::getProductId, productId) + .last("limit 1")); + if (Objects.nonNull(productSpec)) { + productSpec.setProductSpecTermList(productSpecTermDao.selectList(new LambdaQueryWrapper() + .eq(ProductSpecTerm::getProductSpecId, productSpec.getId()))); + } + return productSpec; + } }