Browse Source

基础配置

master
张彭杰 2 years ago
parent
commit
780768c55d
17 changed files with 528 additions and 23 deletions
  1. 11
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductStatusEnum.java
  2. 5
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/productspec/entity/ProductSpec.java
  3. 15
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/productspec/valueobj/ProductSpecTerm.java
  4. 46
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/product/user/ProductUserCommandController.java
  5. 110
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/product/user/request/UserCreateProductDto.java
  6. 121
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/product/user/request/UserEditProductDto.java
  7. 28
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/product/user/request/UserOperateProductDto.java
  8. 27
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/validator/ProductStatusIs.java
  9. 47
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/validator/impl/ProductStatusIsValidator.java
  10. 34
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/product/ProductApplicationService.java
  11. 19
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/product/ProductAggregate.java
  12. 15
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/productspec/ProductSpecAggregate.java
  13. 28
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/product/CreateProductDomainService.java
  14. 25
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/product/EditProductDomainService.java
  15. 2
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/ProductSpecTermDao.java
  16. 16
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ProductSpecRepositoryImpl.java
  17. 2
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/impl/ProductQueryServiceImpl.java

11
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductStatusEnum.java

@ -10,8 +10,15 @@ import lombok.Getter;
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum ProductStatusEnum {
PHYSICAL(1, "实物"),
VIRTUAL(2, "虚拟物品");
/**
* 1-已上架
*/
SHELVED(1, "已上架"),
/**
* 2-已下架
*/
SOLD_OUTED(2, "已下架");
@EnumValue
@JsonValue

5
dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/productspec/entity/ProductSpec.java

@ -1,6 +1,7 @@
package com.qniao.dam.domain.aggregate.productspec.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.qniao.dam.domain.aggregate.productspec.valueobj.ProductSpecTerm;
import com.qniao.domain.Entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -27,8 +28,4 @@ public class ProductSpec extends Entity<ProductSpec> {
private Integer availableStockNumber;
private transient List<ProductSpecTerm> productSpecTermList;
private transient List<ProductSpecTerm> insertProductSpecTermList;
private transient List<ProductSpecTerm> updateProductSpecTermList;
private transient List<ProductSpecTerm> deleteProductSpecTermList;
}

dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/productspec/entity/ProductSpecTerm.java → dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/productspec/valueobj/ProductSpecTerm.java

@ -1,9 +1,9 @@
package com.qniao.dam.domain.aggregate.productspec.entity;
package com.qniao.dam.domain.aggregate.productspec.valueobj;
import com.baomidou.mybatisplus.annotation.TableName;
import com.qniao.dam.domian.aggregate.productspec.constant.ProductSpecTermNameEnum;
import com.qniao.dam.domian.aggregate.productspec.constant.ProductSpecTermUnitEnum;
import com.qniao.domain.Entity;
import com.qniao.domain.ValueObject;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -11,7 +11,7 @@ import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("da_product_spec_term")
public class ProductSpecTerm extends Entity<ProductSpecTerm> {
public class ProductSpecTerm extends ValueObject<ProductSpecTerm> {
@ApiModelProperty("产品规格标识")
private Long productSpecId;
@ -27,4 +27,13 @@ public class ProductSpecTerm extends Entity<ProductSpecTerm> {
@ApiModelProperty("值")
private String value;
public static ProductSpecTerm build(ProductSpecTermNameEnum name, ProductSpecTermUnitEnum unit, String value) {
ProductSpecTerm productSpecTerm = new ProductSpecTerm();
productSpecTerm.setName(name);
productSpecTerm.setDisplayName(name.getDesc());
productSpecTerm.setUnit(unit);
productSpecTerm.setValue(value);
return productSpecTerm;
}
}

46
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/product/user/ProductUserCommandController.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());
}
}

110
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/product/user/request/UserCreateProductDto.java

@ -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;
}
}

121
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/product/user/request/UserEditProductDto.java

@ -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;
}
}

28
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/product/user/request/UserOperateProductDto.java

@ -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;
}
}

27
dating-agency-mall-server/src/main/java/com/qniao/dam/api/validator/ProductStatusIs.java

@ -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 {};
}

47
dating-agency-mall-server/src/main/java/com/qniao/dam/api/validator/impl/ProductStatusIsValidator.java

@ -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;
}
}
}

34
dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/product/ProductApplicationService.java

@ -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);
}
}

19
dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/product/ProductAggregate.java

@ -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);
}
}

15
dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/productspec/ProductSpecAggregate.java

@ -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);
}
}

28
dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/product/CreateProductDomainService.java

@ -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);
}
}

25
dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/product/EditProductDomainService.java

@ -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);
}
}

2
dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/ProductSpecTermDao.java

@ -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> {
}

16
dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ProductSpecRepositoryImpl.java

@ -3,7 +3,7 @@ package com.qniao.dam.infrastructure.persistent.repository.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec;
import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpecTerm;
import com.qniao.dam.domain.aggregate.productspec.valueobj.ProductSpecTerm;
import com.qniao.dam.domain.aggregate.productspec.repository.ProductSpecRepository;
import com.qniao.dam.infrastructure.persistent.dao.domain.ProductSpecDao;
import com.qniao.dam.infrastructure.persistent.dao.domain.ProductSpecTermDao;
@ -40,21 +40,13 @@ public class ProductSpecRepositoryImpl implements ProductSpecRepository {
} else {
productSpecDao.updateById(entity);
}
if (CollUtil.isNotEmpty(entity.getInsertProductSpecTermList())) {
entity.getInsertProductSpecTermList().forEach(term -> {
if (CollUtil.isNotEmpty(entity.getProductSpecTermList())) {
productSpecTermDao.delete(new LambdaQueryWrapper<ProductSpecTerm>().eq(ProductSpecTerm::getProductSpecId, entity.getId()));
entity.getProductSpecTermList().forEach(term -> {
term.setProductSpecId(entity.getId());
productSpecTermDao.insert(term);
});
}
if (CollUtil.isNotEmpty(entity.getUpdateProductSpecTermList())) {
entity.getUpdateProductSpecTermList().forEach(term -> {
term.setProductSpecId(entity.getId());
productSpecTermDao.updateById(term);
});
}
if (CollUtil.isNotEmpty(entity.getDeleteProductSpecTermList())) {
productSpecTermDao.deleteBatchIds(entity.getDeleteProductSpecTermList().stream().map(ProductSpecTerm::getId).collect(Collectors.toList()));
}
return entity.getId();
}
}

2
dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/impl/ProductQueryServiceImpl.java

@ -8,7 +8,7 @@ import com.qniao.dam.api.query.product.user.response.UserGetProductDetailByOpera
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.domain.aggregate.productspec.valueobj.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;

Loading…
Cancel
Save