17 changed files with 528 additions and 23 deletions
Split 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; |
|||
|
|||
import com.qniao.dam.domain.aggregate.product.entity.Product; |
|||
import com.qniao.dam.domain.aggregate.product.repository.ProductRepository; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import javax.annotation.Resource; |
|||
|
|||
@Service |
|||
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; |
|||
|
|||
import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec; |
|||
import com.qniao.dam.domain.aggregate.productspec.repository.ProductSpecRepository; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import javax.annotation.Resource; |
|||
|
|||
@Service |
|||
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; |
|||
|
|||
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> { |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save