17 changed files with 528 additions and 23 deletions
Unified View
Diff Options
-
11dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductStatusEnum.java
-
5dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/productspec/entity/ProductSpec.java
-
15dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/productspec/valueobj/ProductSpecTerm.java
-
46dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/product/user/ProductUserCommandController.java
-
110dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/product/user/request/UserCreateProductDto.java
-
121dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/product/user/request/UserEditProductDto.java
-
28dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/product/user/request/UserOperateProductDto.java
-
27dating-agency-mall-server/src/main/java/com/qniao/dam/api/validator/ProductStatusIs.java
-
47dating-agency-mall-server/src/main/java/com/qniao/dam/api/validator/impl/ProductStatusIsValidator.java
-
34dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/product/ProductApplicationService.java
-
19dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/product/ProductAggregate.java
-
15dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/productspec/ProductSpecAggregate.java
-
28dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/product/CreateProductDomainService.java
-
25dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/product/EditProductDomainService.java
-
2dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/ProductSpecTermDao.java
-
16dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ProductSpecRepositoryImpl.java
-
2dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/impl/ProductQueryServiceImpl.java
@ -0,0 +1,46 @@ |
|||||
|
package com.qniao.dam.api.command.product.user; |
||||
|
|
||||
|
import com.qniao.dam.api.command.product.user.request.UserCreateProductDto; |
||||
|
import com.qniao.dam.api.command.product.user.request.UserEditProductDto; |
||||
|
import com.qniao.dam.api.command.product.user.request.UserOperateProductDto; |
||||
|
import com.qniao.dam.application.service.product.ProductApplicationService; |
||||
|
import com.qniao.dau.infrastructure.constant.RequestHeaderFields; |
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import org.springframework.web.bind.annotation.*; |
||||
|
|
||||
|
import javax.annotation.Resource; |
||||
|
import javax.validation.Valid; |
||||
|
|
||||
|
@RestController |
||||
|
@RequestMapping("user") |
||||
|
@Api(tags = "商品") |
||||
|
public class ProductUserCommandController { |
||||
|
|
||||
|
@Resource |
||||
|
private ProductApplicationService productApplicationService; |
||||
|
|
||||
|
@ApiOperation("用户创建商品") |
||||
|
@PostMapping("create/product") |
||||
|
public String userCreateProduct(@RequestBody @Valid UserCreateProductDto dto, |
||||
|
@RequestParam("userId") Long userId, |
||||
|
@RequestHeader(name = RequestHeaderFields.FIELD_ORGANIZATION_ID) Long orgId) { |
||||
|
return productApplicationService.create(dto.trans2Domain(), dto.trans2ProductSpec()).toString(); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("用户编辑商品") |
||||
|
@PostMapping("edit/product") |
||||
|
public void userCreateProduct(@RequestBody @Valid UserEditProductDto dto, |
||||
|
@RequestParam("userId") Long userId, |
||||
|
@RequestHeader(name = RequestHeaderFields.FIELD_ORGANIZATION_ID) Long orgId) { |
||||
|
productApplicationService.edit(dto.trans2Domain(), dto.trans2ProductSpec()); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("用户操作商品") |
||||
|
@PostMapping("operate/product") |
||||
|
public void userOperateProduct(@RequestBody @Valid UserOperateProductDto dto, |
||||
|
@RequestParam("userId") Long userId, |
||||
|
@RequestHeader(name = RequestHeaderFields.FIELD_ORGANIZATION_ID) Long orgId) { |
||||
|
productApplicationService.operate(dto.trans2Domain()); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,110 @@ |
|||||
|
package com.qniao.dam.api.command.product.user.request; |
||||
|
|
||||
|
import cn.hutool.core.util.NumberUtil; |
||||
|
import cn.hutool.core.util.StrUtil; |
||||
|
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.valueobj.ProductSpecTerm; |
||||
|
import com.qniao.dam.domian.aggregate.product.constant.ProductMainCategoryEnum; |
||||
|
import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; |
||||
|
import com.qniao.dam.domian.aggregate.product.constant.ProductTypeEnum; |
||||
|
import com.qniao.dam.domian.aggregate.productspec.constant.ProductSpecTermNameEnum; |
||||
|
import com.qniao.dam.domian.aggregate.productspec.constant.ProductSpecTermUnitEnum; |
||||
|
import com.qniao.domain.Trans2DomainAssembler; |
||||
|
import com.qniao.framework.exception.BizException; |
||||
|
import com.qniao.framework.utils.TypeConvertUtils; |
||||
|
import io.swagger.annotations.ApiModelProperty; |
||||
|
import lombok.Data; |
||||
|
|
||||
|
import javax.validation.constraints.NotNull; |
||||
|
import java.math.BigDecimal; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.List; |
||||
|
import java.util.Objects; |
||||
|
|
||||
|
@Data |
||||
|
public class UserCreateProductDto implements Trans2DomainAssembler<Product> { |
||||
|
|
||||
|
@ApiModelProperty("产品主分类") |
||||
|
@NotNull(message = "产品主分类不能为空") |
||||
|
private ProductMainCategoryEnum mainCategory; |
||||
|
|
||||
|
@ApiModelProperty("产品次分类") |
||||
|
@NotNull(message = "产品次分类不能为空") |
||||
|
private ProductSubCategoryEnum subCategory; |
||||
|
|
||||
|
@ApiModelProperty("产品标题") |
||||
|
@NotNull(message = "产品标题不能为空") |
||||
|
private String productTitle; |
||||
|
|
||||
|
@ApiModelProperty("产品描述") |
||||
|
@NotNull(message = "产品描述不能为空") |
||||
|
private String productDesc; |
||||
|
|
||||
|
@ApiModelProperty("详情描述") |
||||
|
@NotNull(message = "详情描述不能为空") |
||||
|
private String detailDesc; |
||||
|
|
||||
|
@ApiModelProperty("原价") |
||||
|
@NotNull(message = "原价不能为空") |
||||
|
private BigDecimal unitOriginalPrice; |
||||
|
|
||||
|
@ApiModelProperty("售价") |
||||
|
@NotNull(message = "售价不能为空") |
||||
|
private BigDecimal unitSellingPrice; |
||||
|
|
||||
|
@ApiModelProperty("产品规格(周期、次数)") |
||||
|
@NotNull(message = "产品规格不能为空") |
||||
|
private ProductSpecTermUnitEnum productSpecUnit; |
||||
|
|
||||
|
@ApiModelProperty("有效期天数") |
||||
|
private String validityPeriodValue; |
||||
|
|
||||
|
@ApiModelProperty("购买次数") |
||||
|
private String purchaseTimeValue; |
||||
|
|
||||
|
@ApiModelProperty("单日使用上限") |
||||
|
private String dailyUseLimitValue; |
||||
|
|
||||
|
@Override |
||||
|
public Product trans2Domain() { |
||||
|
Product product = TypeConvertUtils.convert(this, Product.class); |
||||
|
product.setProductType(ProductTypeEnum.VIRTUAL); |
||||
|
return product; |
||||
|
} |
||||
|
|
||||
|
public ProductSpec trans2ProductSpec() { |
||||
|
ProductSpec productSpec = new ProductSpec(); |
||||
|
productSpec.setUnitOriginalPrice(unitOriginalPrice); |
||||
|
productSpec.setUnitSellingPrice(unitSellingPrice); |
||||
|
productSpec.setAvailableStockNumber(-1); |
||||
|
List<ProductSpecTerm> productSpecTermList = new ArrayList<>(); |
||||
|
if (Objects.nonNull(productSpecUnit)) { |
||||
|
productSpecTermList.add(ProductSpecTerm.build(ProductSpecTermNameEnum.SPEC, productSpecUnit, null)); |
||||
|
} |
||||
|
if (StrUtil.isNotBlank(validityPeriodValue)) { |
||||
|
if (!NumberUtil.isNumber(validityPeriodValue)) { |
||||
|
throw new BizException("有效期天数必须是整数"); |
||||
|
} |
||||
|
productSpecTermList.add(ProductSpecTerm.build(ProductSpecTermNameEnum.VALIDITY_PERIOD, ProductSpecTermUnitEnum.VALIDITY_PERIOD_DAYS, validityPeriodValue)); |
||||
|
} |
||||
|
if (StrUtil.isNotBlank(purchaseTimeValue)) { |
||||
|
if (!NumberUtil.isNumber(purchaseTimeValue)) { |
||||
|
throw new BizException("购买次数必须是整数"); |
||||
|
} |
||||
|
} else { |
||||
|
purchaseTimeValue = "-1"; |
||||
|
} |
||||
|
productSpecTermList.add(ProductSpecTerm.build(ProductSpecTermNameEnum.PURCHASE_TIME, null, purchaseTimeValue)); |
||||
|
if (StrUtil.isNotBlank(dailyUseLimitValue)) { |
||||
|
if (!NumberUtil.isNumber(dailyUseLimitValue)) { |
||||
|
throw new BizException("单日使用上限必须是整数"); |
||||
|
} |
||||
|
} else { |
||||
|
dailyUseLimitValue = "-1"; |
||||
|
} |
||||
|
productSpecTermList.add(ProductSpecTerm.build(ProductSpecTermNameEnum.DAILY_USE_LIMIT, null, dailyUseLimitValue)); |
||||
|
productSpec.setProductSpecTermList(productSpecTermList); |
||||
|
return productSpec; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,121 @@ |
|||||
|
package com.qniao.dam.api.command.product.user.request; |
||||
|
|
||||
|
import cn.hutool.core.util.NumberUtil; |
||||
|
import cn.hutool.core.util.StrUtil; |
||||
|
import com.qniao.dam.api.validator.ProductStatusIs; |
||||
|
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.valueobj.ProductSpecTerm; |
||||
|
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.product.constant.ProductTypeEnum; |
||||
|
import com.qniao.dam.domian.aggregate.productspec.constant.ProductSpecTermNameEnum; |
||||
|
import com.qniao.dam.domian.aggregate.productspec.constant.ProductSpecTermUnitEnum; |
||||
|
import com.qniao.domain.Trans2DomainAssembler; |
||||
|
import com.qniao.framework.exception.BizException; |
||||
|
import com.qniao.framework.utils.TypeConvertUtils; |
||||
|
import io.swagger.annotations.ApiModelProperty; |
||||
|
import lombok.Data; |
||||
|
|
||||
|
import javax.validation.constraints.NotNull; |
||||
|
import java.math.BigDecimal; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.List; |
||||
|
import java.util.Objects; |
||||
|
|
||||
|
@Data |
||||
|
public class UserEditProductDto implements Trans2DomainAssembler<Product> { |
||||
|
|
||||
|
@ApiModelProperty("产品标识") |
||||
|
@NotNull(message = "产品标识不能为空") |
||||
|
@ProductStatusIs(status = {ProductStatusEnum.SOLD_OUTED}) |
||||
|
private Long productId; |
||||
|
|
||||
|
@ApiModelProperty("产品规格标识") |
||||
|
@NotNull(message = "产品规格标识不能为空") |
||||
|
private Long productSpecId; |
||||
|
|
||||
|
@ApiModelProperty("产品主分类") |
||||
|
@NotNull(message = "产品主分类不能为空") |
||||
|
private ProductMainCategoryEnum mainCategory; |
||||
|
|
||||
|
@ApiModelProperty("产品次分类") |
||||
|
@NotNull(message = "产品次分类不能为空") |
||||
|
private ProductSubCategoryEnum subCategory; |
||||
|
|
||||
|
@ApiModelProperty("产品标题") |
||||
|
@NotNull(message = "产品标题不能为空") |
||||
|
private String productTitle; |
||||
|
|
||||
|
@ApiModelProperty("产品描述") |
||||
|
@NotNull(message = "产品描述不能为空") |
||||
|
private String productDesc; |
||||
|
|
||||
|
@ApiModelProperty("详情描述") |
||||
|
@NotNull(message = "详情描述不能为空") |
||||
|
private String detailDesc; |
||||
|
|
||||
|
@ApiModelProperty("原价") |
||||
|
@NotNull(message = "原价不能为空") |
||||
|
private BigDecimal unitOriginalPrice; |
||||
|
|
||||
|
@ApiModelProperty("售价") |
||||
|
@NotNull(message = "售价不能为空") |
||||
|
private BigDecimal unitSellingPrice; |
||||
|
|
||||
|
@ApiModelProperty("产品规格(周期、次数)") |
||||
|
@NotNull(message = "产品规格不能为空") |
||||
|
private ProductSpecTermUnitEnum productSpecUnit; |
||||
|
|
||||
|
@ApiModelProperty("有效期天数") |
||||
|
private String validityPeriodValue; |
||||
|
|
||||
|
@ApiModelProperty("购买次数") |
||||
|
private String purchaseTimeValue; |
||||
|
|
||||
|
@ApiModelProperty("单日使用上限") |
||||
|
private String dailyUseLimitValue; |
||||
|
|
||||
|
@Override |
||||
|
public Product trans2Domain() { |
||||
|
Product product = TypeConvertUtils.convert(this, Product.class); |
||||
|
product.setId(productId); |
||||
|
return product; |
||||
|
} |
||||
|
|
||||
|
public ProductSpec trans2ProductSpec() { |
||||
|
ProductSpec productSpec = new ProductSpec(); |
||||
|
productSpec.setId(productSpecId); |
||||
|
productSpec.setUnitOriginalPrice(unitOriginalPrice); |
||||
|
productSpec.setUnitSellingPrice(unitSellingPrice); |
||||
|
List<ProductSpecTerm> productSpecTermList = new ArrayList<>(); |
||||
|
if (Objects.nonNull(productSpecUnit)) { |
||||
|
productSpecTermList.add(ProductSpecTerm.build(ProductSpecTermNameEnum.SPEC, productSpecUnit, null)); |
||||
|
} |
||||
|
if (StrUtil.isNotBlank(validityPeriodValue)) { |
||||
|
if (!NumberUtil.isNumber(validityPeriodValue)) { |
||||
|
throw new BizException("有效期天数必须是整数"); |
||||
|
} |
||||
|
productSpecTermList.add(ProductSpecTerm.build(ProductSpecTermNameEnum.VALIDITY_PERIOD, ProductSpecTermUnitEnum.VALIDITY_PERIOD_DAYS, validityPeriodValue)); |
||||
|
} |
||||
|
if (StrUtil.isNotBlank(purchaseTimeValue)) { |
||||
|
if (!NumberUtil.isNumber(purchaseTimeValue)) { |
||||
|
throw new BizException("购买次数必须是整数"); |
||||
|
} |
||||
|
} else { |
||||
|
purchaseTimeValue = "-1"; |
||||
|
} |
||||
|
productSpecTermList.add(ProductSpecTerm.build(ProductSpecTermNameEnum.PURCHASE_TIME, null, purchaseTimeValue)); |
||||
|
if (StrUtil.isNotBlank(dailyUseLimitValue)) { |
||||
|
if (!NumberUtil.isNumber(dailyUseLimitValue)) { |
||||
|
throw new BizException("单日使用上限必须是整数"); |
||||
|
} |
||||
|
} else { |
||||
|
dailyUseLimitValue = "-1"; |
||||
|
} |
||||
|
productSpecTermList.add(ProductSpecTerm.build(ProductSpecTermNameEnum.DAILY_USE_LIMIT, null, dailyUseLimitValue)); |
||||
|
productSpec.setProductSpecTermList(productSpecTermList); |
||||
|
return productSpec; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,28 @@ |
|||||
|
package com.qniao.dam.api.command.product.user.request; |
||||
|
|
||||
|
import com.qniao.dam.domain.aggregate.product.entity.Product; |
||||
|
import com.qniao.dam.domian.aggregate.product.constant.ProductStatusEnum; |
||||
|
import com.qniao.domain.Trans2DomainAssembler; |
||||
|
import io.swagger.annotations.ApiModelProperty; |
||||
|
import lombok.Data; |
||||
|
|
||||
|
import javax.validation.constraints.NotNull; |
||||
|
|
||||
|
@Data |
||||
|
public class UserOperateProductDto implements Trans2DomainAssembler<Product> { |
||||
|
|
||||
|
@ApiModelProperty("产品标识") |
||||
|
@NotNull(message = "产品标识不能为空") |
||||
|
private Long productId; |
||||
|
|
||||
|
@ApiModelProperty("状态(已上架、已下架)") |
||||
|
private ProductStatusEnum status; |
||||
|
|
||||
|
@Override |
||||
|
public Product trans2Domain() { |
||||
|
Product product = new Product(); |
||||
|
product.setId(productId); |
||||
|
product.setStatus(status); |
||||
|
return product; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,27 @@ |
|||||
|
package com.qniao.dam.api.validator; |
||||
|
|
||||
|
import com.qniao.dam.api.validator.impl.ProductStatusIsValidator; |
||||
|
import com.qniao.dam.domian.aggregate.product.constant.ProductStatusEnum; |
||||
|
|
||||
|
import javax.validation.Constraint; |
||||
|
import javax.validation.Payload; |
||||
|
import java.lang.annotation.Documented; |
||||
|
import java.lang.annotation.Retention; |
||||
|
import java.lang.annotation.RetentionPolicy; |
||||
|
import java.lang.annotation.Target; |
||||
|
|
||||
|
import static java.lang.annotation.ElementType.FIELD; |
||||
|
|
||||
|
@Documented |
||||
|
@Retention(RetentionPolicy.RUNTIME) |
||||
|
@Target({FIELD}) |
||||
|
@Constraint(validatedBy = {ProductStatusIsValidator.class}) |
||||
|
public @interface ProductStatusIs { |
||||
|
ProductStatusEnum[] status(); |
||||
|
|
||||
|
String message() default "商品状态不正确"; |
||||
|
|
||||
|
Class<?>[] groups() default {}; |
||||
|
|
||||
|
Class<? extends Payload>[] payload() default {}; |
||||
|
} |
||||
@ -0,0 +1,47 @@ |
|||||
|
package com.qniao.dam.api.validator.impl; |
||||
|
|
||||
|
import cn.hutool.core.collection.CollUtil; |
||||
|
import cn.hutool.core.util.StrUtil; |
||||
|
import com.qniao.dam.api.validator.ProductStatusIs; |
||||
|
import com.qniao.dam.domain.aggregate.product.entity.Product; |
||||
|
import com.qniao.dam.domian.aggregate.product.constant.ProductStatusEnum; |
||||
|
import com.qniao.dam.infrastructure.persistent.dao.domain.ProductDao; |
||||
|
|
||||
|
import javax.annotation.Resource; |
||||
|
import javax.validation.ConstraintValidator; |
||||
|
import javax.validation.ConstraintValidatorContext; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
public class ProductStatusIsValidator implements ConstraintValidator<ProductStatusIs, Long> { |
||||
|
|
||||
|
@Resource |
||||
|
private ProductDao productDao; |
||||
|
|
||||
|
private ProductStatusEnum[] status; |
||||
|
|
||||
|
@Override |
||||
|
public void initialize(ProductStatusIs annotation) { |
||||
|
this.status = annotation.status(); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public boolean isValid(Long id, ConstraintValidatorContext context) { |
||||
|
|
||||
|
Product product = productDao.selectById(id); |
||||
|
|
||||
|
//订单状态非待上传磅单 |
||||
|
if (CollUtil.toList(this.status).contains(product.getStatus())) { |
||||
|
return true; |
||||
|
} else { |
||||
|
//禁止默认消息返回 |
||||
|
context.disableDefaultConstraintViolation(); |
||||
|
//自定义返回消息 |
||||
|
|
||||
|
context.buildConstraintViolationWithTemplate(StrUtil.format("商品不是{}状态", |
||||
|
CollUtil.join(CollUtil.toList(this.status).stream().map(ProductStatusEnum::getDesc).collect(Collectors.toList()), "或"))) |
||||
|
.addConstraintViolation(); |
||||
|
|
||||
|
return false; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,34 @@ |
|||||
|
package com.qniao.dam.application.service.product; |
||||
|
|
||||
|
import com.qniao.dam.domain.aggregate.product.ProductAggregate; |
||||
|
import com.qniao.dam.domain.aggregate.product.entity.Product; |
||||
|
import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec; |
||||
|
import com.qniao.dam.domain.service.product.CreateProductDomainService; |
||||
|
import com.qniao.dam.domain.service.product.EditProductDomainService; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
import javax.annotation.Resource; |
||||
|
|
||||
|
@Service |
||||
|
public class ProductApplicationService { |
||||
|
|
||||
|
@Resource |
||||
|
private CreateProductDomainService createProductDomainService; |
||||
|
@Resource |
||||
|
private EditProductDomainService editProductDomainService; |
||||
|
@Resource |
||||
|
private ProductAggregate productAggregate; |
||||
|
|
||||
|
public Long create(Product product, ProductSpec productSpec) { |
||||
|
createProductDomainService.handle(product, productSpec); |
||||
|
return product.getId(); |
||||
|
} |
||||
|
|
||||
|
public void edit(Product product, ProductSpec productSpec) { |
||||
|
editProductDomainService.handle(product, productSpec); |
||||
|
} |
||||
|
|
||||
|
public void operate(Product product) { |
||||
|
productAggregate.operate(product); |
||||
|
} |
||||
|
} |
||||
@ -1,7 +1,26 @@ |
|||||
package com.qniao.dam.domain.aggregate.product; |
package com.qniao.dam.domain.aggregate.product; |
||||
|
|
||||
|
import com.qniao.dam.domain.aggregate.product.entity.Product; |
||||
|
import com.qniao.dam.domain.aggregate.product.repository.ProductRepository; |
||||
import org.springframework.stereotype.Service; |
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
import javax.annotation.Resource; |
||||
|
|
||||
@Service |
@Service |
||||
public class ProductAggregate { |
public class ProductAggregate { |
||||
|
|
||||
|
@Resource |
||||
|
private ProductRepository productRepository; |
||||
|
|
||||
|
public void create(Product product) { |
||||
|
productRepository.save(product); |
||||
|
} |
||||
|
|
||||
|
public void edit(Product product) { |
||||
|
productRepository.save(product); |
||||
|
} |
||||
|
|
||||
|
public void operate(Product product) { |
||||
|
productRepository.save(product); |
||||
|
} |
||||
} |
} |
||||
@ -1,7 +1,22 @@ |
|||||
package com.qniao.dam.domain.aggregate.productspec; |
package com.qniao.dam.domain.aggregate.productspec; |
||||
|
|
||||
|
import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec; |
||||
|
import com.qniao.dam.domain.aggregate.productspec.repository.ProductSpecRepository; |
||||
import org.springframework.stereotype.Service; |
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
import javax.annotation.Resource; |
||||
|
|
||||
@Service |
@Service |
||||
public class ProductSpecAggregate { |
public class ProductSpecAggregate { |
||||
|
|
||||
|
@Resource |
||||
|
private ProductSpecRepository productSpecRepository; |
||||
|
|
||||
|
public void create(ProductSpec productSpec) { |
||||
|
productSpecRepository.save(productSpec); |
||||
|
} |
||||
|
|
||||
|
public void edit(ProductSpec productSpec) { |
||||
|
productSpecRepository.save(productSpec); |
||||
|
} |
||||
} |
} |
||||
@ -0,0 +1,28 @@ |
|||||
|
package com.qniao.dam.domain.service.product; |
||||
|
|
||||
|
import com.qniao.dam.domain.aggregate.product.ProductAggregate; |
||||
|
import com.qniao.dam.domain.aggregate.product.entity.Product; |
||||
|
import com.qniao.dam.domain.aggregate.productspec.ProductSpecAggregate; |
||||
|
import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec; |
||||
|
import com.qniao.dam.domian.aggregate.product.constant.ProductStatusEnum; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.transaction.annotation.Transactional; |
||||
|
|
||||
|
import javax.annotation.Resource; |
||||
|
|
||||
|
@Service |
||||
|
public class CreateProductDomainService { |
||||
|
|
||||
|
@Resource |
||||
|
private ProductAggregate productAggregate; |
||||
|
@Resource |
||||
|
private ProductSpecAggregate productSpecAggregate; |
||||
|
|
||||
|
@Transactional(rollbackFor = Exception.class) |
||||
|
public void handle(Product product, ProductSpec productSpec) { |
||||
|
product.setStatus(ProductStatusEnum.SOLD_OUTED); |
||||
|
productAggregate.create(product); |
||||
|
productSpec.setProductId(product.getId()); |
||||
|
productSpecAggregate.create(productSpec); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,25 @@ |
|||||
|
package com.qniao.dam.domain.service.product; |
||||
|
|
||||
|
import com.qniao.dam.domain.aggregate.product.ProductAggregate; |
||||
|
import com.qniao.dam.domain.aggregate.product.entity.Product; |
||||
|
import com.qniao.dam.domain.aggregate.productspec.ProductSpecAggregate; |
||||
|
import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.transaction.annotation.Transactional; |
||||
|
|
||||
|
import javax.annotation.Resource; |
||||
|
|
||||
|
@Service |
||||
|
public class EditProductDomainService { |
||||
|
@Resource |
||||
|
private ProductAggregate productAggregate; |
||||
|
@Resource |
||||
|
private ProductSpecAggregate productSpecAggregate; |
||||
|
|
||||
|
@Transactional(rollbackFor = Exception.class) |
||||
|
public void handle(Product product, ProductSpec productSpec) { |
||||
|
productAggregate.edit(product); |
||||
|
productSpecAggregate.edit(productSpec); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -1,7 +1,7 @@ |
|||||
package com.qniao.dam.infrastructure.persistent.dao.domain; |
package com.qniao.dam.infrastructure.persistent.dao.domain; |
||||
|
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpecTerm; |
|
||||
|
import com.qniao.dam.domain.aggregate.productspec.valueobj.ProductSpecTerm; |
||||
|
|
||||
public interface ProductSpecTermDao extends BaseMapper<ProductSpecTerm> { |
public interface ProductSpecTermDao extends BaseMapper<ProductSpecTerm> { |
||||
} |
} |
||||
Write
Preview
Loading…
Cancel
Save