22 changed files with 552 additions and 0 deletions
Split View
Diff Options
-
15dating-agency-mall-constant/pom.xml
-
40dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductMainCategoryEnum.java
-
35dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductStatusEnum.java
-
44dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductSubCategoryEnum.java
-
35dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductTypeEnum.java
-
40dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/productspec/constant/ProductSpecTermNameEnum.java
-
45dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/productspec/constant/ProductSpecTermUnitEnum.java
-
11dating-agency-mall-entity/pom.xml
-
38dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/product/entity/Product.java
-
34dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/productspec/entity/ProductSpec.java
-
30dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/productspec/entity/ProductSpecTerm.java
-
5dating-agency-mall-server/pom.xml
-
7dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/product/ProductAggregate.java
-
7dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/product/repository/ProductRepository.java
-
7dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/productspec/ProductSpecAggregate.java
-
7dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/productspec/repository/ProductSpecRepository.java
-
7dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/ProductDao.java
-
7dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/ProductSpecDao.java
-
7dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/ProductSpecTermDao.java
-
31dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ProductRepositoryImpl.java
-
60dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ProductSpecRepositoryImpl.java
-
40dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/utils/CompareEntityUtil.java
@ -0,0 +1,40 @@ |
|||
package com.qniao.dam.domian.aggregate.product.constant; |
|||
|
|||
import com.baomidou.mybatisplus.annotation.EnumValue; |
|||
import com.fasterxml.jackson.annotation.JsonCreator; |
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import com.fasterxml.jackson.annotation.JsonValue; |
|||
import lombok.Getter; |
|||
|
|||
@Getter |
|||
@JsonFormat(shape = JsonFormat.Shape.OBJECT) |
|||
public enum ProductMainCategoryEnum { |
|||
/** |
|||
* 认证、资料编辑、解锁信息、线下服务 |
|||
*/ |
|||
|
|||
AUTHENTICATION(1, "认证"), |
|||
DATE_EDITING(2, "资料编辑"), |
|||
UNLOCKING_INFORMATION(3, "解锁信息"), |
|||
OFFLINE_SERVICES(4, "线下服务"); |
|||
|
|||
@EnumValue |
|||
@JsonValue |
|||
private final Integer value; |
|||
private final String desc; |
|||
|
|||
ProductMainCategoryEnum(Integer value, String desc) { |
|||
this.value = value; |
|||
this.desc = desc; |
|||
} |
|||
|
|||
@JsonCreator |
|||
public static ProductMainCategoryEnum get(Object code) { |
|||
for (ProductMainCategoryEnum e : ProductMainCategoryEnum.values()) { |
|||
if (e.getValue().equals(code)) { |
|||
return e; |
|||
} |
|||
} |
|||
return null; |
|||
} |
|||
} |
|||
@ -0,0 +1,35 @@ |
|||
package com.qniao.dam.domian.aggregate.product.constant; |
|||
|
|||
import com.baomidou.mybatisplus.annotation.EnumValue; |
|||
import com.fasterxml.jackson.annotation.JsonCreator; |
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import com.fasterxml.jackson.annotation.JsonValue; |
|||
import lombok.Getter; |
|||
|
|||
@Getter |
|||
@JsonFormat(shape = JsonFormat.Shape.OBJECT) |
|||
public enum ProductStatusEnum { |
|||
|
|||
PHYSICAL(1, "实物"), |
|||
VIRTUAL(2, "虚拟物品"); |
|||
|
|||
@EnumValue |
|||
@JsonValue |
|||
private final Integer value; |
|||
private final String desc; |
|||
|
|||
ProductStatusEnum(Integer value, String desc) { |
|||
this.value = value; |
|||
this.desc = desc; |
|||
} |
|||
|
|||
@JsonCreator |
|||
public static ProductStatusEnum get(Object code) { |
|||
for (ProductStatusEnum e : ProductStatusEnum.values()) { |
|||
if (e.getValue().equals(code)) { |
|||
return e; |
|||
} |
|||
} |
|||
return null; |
|||
} |
|||
} |
|||
@ -0,0 +1,44 @@ |
|||
package com.qniao.dam.domian.aggregate.product.constant; |
|||
|
|||
import com.baomidou.mybatisplus.annotation.EnumValue; |
|||
import com.fasterxml.jackson.annotation.JsonCreator; |
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import com.fasterxml.jackson.annotation.JsonValue; |
|||
import lombok.Getter; |
|||
|
|||
@Getter |
|||
@JsonFormat(shape = JsonFormat.Shape.OBJECT) |
|||
public enum ProductSubCategoryEnum { |
|||
/** |
|||
* 学历认证、解锁更多人数、头像修改、高级搜索、线下约见面 |
|||
*/ |
|||
EDUCATION_CERTIFICATION(101, "学历认证"), |
|||
|
|||
PROFILE_MODIFICATION(201, "头像修改"), |
|||
|
|||
UNLOCK_MORE_PEOPLE(301, "解锁更多人数"), |
|||
|
|||
ADVANCED_SEARCH(302, "高级搜索"), |
|||
|
|||
OFFLINE_MEET(401, "线下约见面"); |
|||
|
|||
@EnumValue |
|||
@JsonValue |
|||
private final Integer value; |
|||
private final String desc; |
|||
|
|||
ProductSubCategoryEnum(Integer value, String desc) { |
|||
this.value = value; |
|||
this.desc = desc; |
|||
} |
|||
|
|||
@JsonCreator |
|||
public static ProductSubCategoryEnum get(Object code) { |
|||
for (ProductSubCategoryEnum e : ProductSubCategoryEnum.values()) { |
|||
if (e.getValue().equals(code)) { |
|||
return e; |
|||
} |
|||
} |
|||
return null; |
|||
} |
|||
} |
|||
@ -0,0 +1,35 @@ |
|||
package com.qniao.dam.domian.aggregate.product.constant; |
|||
|
|||
import com.baomidou.mybatisplus.annotation.EnumValue; |
|||
import com.fasterxml.jackson.annotation.JsonCreator; |
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import com.fasterxml.jackson.annotation.JsonValue; |
|||
import lombok.Getter; |
|||
|
|||
@Getter |
|||
@JsonFormat(shape = JsonFormat.Shape.OBJECT) |
|||
public enum ProductTypeEnum { |
|||
|
|||
PHYSICAL(1, "实物"), |
|||
VIRTUAL(2, "虚拟物品"); |
|||
|
|||
@EnumValue |
|||
@JsonValue |
|||
private final Integer value; |
|||
private final String desc; |
|||
|
|||
ProductTypeEnum(Integer value, String desc) { |
|||
this.value = value; |
|||
this.desc = desc; |
|||
} |
|||
|
|||
@JsonCreator |
|||
public static ProductTypeEnum get(Object code) { |
|||
for (ProductTypeEnum e : ProductTypeEnum.values()) { |
|||
if (e.getValue().equals(code)) { |
|||
return e; |
|||
} |
|||
} |
|||
return null; |
|||
} |
|||
} |
|||
@ -0,0 +1,40 @@ |
|||
package com.qniao.dam.domian.aggregate.productspec.constant; |
|||
|
|||
import com.baomidou.mybatisplus.annotation.EnumValue; |
|||
import com.fasterxml.jackson.annotation.JsonCreator; |
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import com.fasterxml.jackson.annotation.JsonValue; |
|||
import lombok.Getter; |
|||
|
|||
@Getter |
|||
@JsonFormat(shape = JsonFormat.Shape.OBJECT) |
|||
public enum ProductSpecTermNameEnum { |
|||
|
|||
SPEC(1, "规格"), |
|||
|
|||
PURCHASE_TIME(2,"购买次数"), |
|||
|
|||
VALIDITY_PERIOD(3,"有效期"), |
|||
|
|||
DAILY_USE_LIMIT(4,"单日使用上限"); |
|||
|
|||
@EnumValue |
|||
@JsonValue |
|||
private final Integer value; |
|||
private final String desc; |
|||
|
|||
ProductSpecTermNameEnum(Integer value, String desc) { |
|||
this.value = value; |
|||
this.desc = desc; |
|||
} |
|||
|
|||
@JsonCreator |
|||
public static ProductSpecTermNameEnum get(Object code) { |
|||
for (ProductSpecTermNameEnum e : ProductSpecTermNameEnum.values()) { |
|||
if (e.getValue().equals(code)) { |
|||
return e; |
|||
} |
|||
} |
|||
return null; |
|||
} |
|||
} |
|||
@ -0,0 +1,45 @@ |
|||
package com.qniao.dam.domian.aggregate.productspec.constant; |
|||
|
|||
import com.baomidou.mybatisplus.annotation.EnumValue; |
|||
import com.fasterxml.jackson.annotation.JsonCreator; |
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import com.fasterxml.jackson.annotation.JsonValue; |
|||
import lombok.Getter; |
|||
|
|||
@Getter |
|||
@JsonFormat(shape = JsonFormat.Shape.OBJECT) |
|||
public enum ProductSpecTermUnitEnum { |
|||
|
|||
/** |
|||
* 1 规格 |
|||
*/ |
|||
SPEC_PERIOD(101, "周期"), |
|||
SPEC_TIME(102, "次数"), |
|||
|
|||
/** |
|||
* 3 有效期 |
|||
*/ |
|||
VALIDITY_PERIOD_DAYS(301, "有效期天数"); |
|||
|
|||
|
|||
|
|||
@EnumValue |
|||
@JsonValue |
|||
private final Integer value; |
|||
private final String desc; |
|||
|
|||
ProductSpecTermUnitEnum(Integer value, String desc) { |
|||
this.value = value; |
|||
this.desc = desc; |
|||
} |
|||
|
|||
@JsonCreator |
|||
public static ProductSpecTermUnitEnum get(Object code) { |
|||
for (ProductSpecTermUnitEnum e : ProductSpecTermUnitEnum.values()) { |
|||
if (e.getValue().equals(code)) { |
|||
return e; |
|||
} |
|||
} |
|||
return null; |
|||
} |
|||
} |
|||
@ -0,0 +1,38 @@ |
|||
package com.qniao.dam.domain.aggregate.product.entity; |
|||
|
|||
import com.baomidou.mybatisplus.annotation.TableName; |
|||
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.domain.Entity; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
|
|||
@Data |
|||
@EqualsAndHashCode(callSuper = true) |
|||
@TableName("da_product") |
|||
public class Product extends Entity<Product> { |
|||
|
|||
@ApiModelProperty("产品类型(实物、虚拟物品)") |
|||
private ProductTypeEnum productType; |
|||
|
|||
@ApiModelProperty("产品主分类") |
|||
private ProductMainCategoryEnum mainCategory; |
|||
|
|||
@ApiModelProperty("产品次分类") |
|||
private ProductSubCategoryEnum subCategory; |
|||
|
|||
@ApiModelProperty("产品标题") |
|||
private String productTitle; |
|||
|
|||
@ApiModelProperty("产品描述") |
|||
private String productDesc; |
|||
|
|||
@ApiModelProperty("详情描述") |
|||
private String detailDesc; |
|||
|
|||
@ApiModelProperty("状态(已上架、已下架)") |
|||
private ProductStatusEnum status; |
|||
} |
|||
@ -0,0 +1,34 @@ |
|||
package com.qniao.dam.domain.aggregate.productspec.entity; |
|||
|
|||
import com.baomidou.mybatisplus.annotation.TableName; |
|||
import com.qniao.domain.Entity; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
|
|||
import java.math.BigDecimal; |
|||
import java.util.List; |
|||
|
|||
@Data |
|||
@EqualsAndHashCode(callSuper = true) |
|||
@TableName("da_product_spec") |
|||
public class ProductSpec extends Entity<ProductSpec> { |
|||
|
|||
@ApiModelProperty("产品标识") |
|||
private Long productId; |
|||
|
|||
@ApiModelProperty("原价") |
|||
private BigDecimal unitOriginalPrice; |
|||
|
|||
@ApiModelProperty("售价") |
|||
private BigDecimal unitSellingPrice; |
|||
|
|||
@ApiModelProperty("可用库存数量") |
|||
private Integer availableStockNumber; |
|||
|
|||
private transient List<ProductSpecTerm> productSpecTermList; |
|||
|
|||
private transient List<ProductSpecTerm> insertProductSpecTermList; |
|||
private transient List<ProductSpecTerm> updateProductSpecTermList; |
|||
private transient List<ProductSpecTerm> deleteProductSpecTermList; |
|||
} |
|||
@ -0,0 +1,30 @@ |
|||
package com.qniao.dam.domain.aggregate.productspec.entity; |
|||
|
|||
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 io.swagger.annotations.ApiModelProperty; |
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
|
|||
@Data |
|||
@EqualsAndHashCode(callSuper = true) |
|||
@TableName("da_product_spec_term") |
|||
public class ProductSpecTerm extends Entity<ProductSpecTerm> { |
|||
|
|||
@ApiModelProperty("产品规格标识") |
|||
private Long productSpecId; |
|||
|
|||
@ApiModelProperty("展示名称") |
|||
private String displayName; |
|||
|
|||
@ApiModelProperty("名称") |
|||
private ProductSpecTermNameEnum name; |
|||
|
|||
@ApiModelProperty("单位") |
|||
private ProductSpecTermUnitEnum unit; |
|||
|
|||
@ApiModelProperty("值") |
|||
private String value; |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
package com.qniao.dam.domain.aggregate.product; |
|||
|
|||
import org.springframework.stereotype.Service; |
|||
|
|||
@Service |
|||
public class ProductAggregate { |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
package com.qniao.dam.domain.aggregate.product.repository; |
|||
|
|||
import com.qniao.dam.domain.aggregate.product.entity.Product; |
|||
import com.qniao.domain.Repository; |
|||
|
|||
public interface ProductRepository extends Repository<Product,Long> { |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
package com.qniao.dam.domain.aggregate.productspec; |
|||
|
|||
import org.springframework.stereotype.Service; |
|||
|
|||
@Service |
|||
public class ProductSpecAggregate { |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
package com.qniao.dam.domain.aggregate.productspec.repository; |
|||
|
|||
import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec; |
|||
import com.qniao.domain.Repository; |
|||
|
|||
public interface ProductSpecRepository extends Repository<ProductSpec,Long> { |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
package com.qniao.dam.infrastructure.persistent.dao.domain; |
|||
|
|||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
|||
import com.qniao.dam.domain.aggregate.product.entity.Product; |
|||
|
|||
public interface ProductDao extends BaseMapper<Product> { |
|||
} |
|||
@ -0,0 +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.ProductSpec; |
|||
|
|||
public interface ProductSpecDao extends BaseMapper<ProductSpec> { |
|||
} |
|||
@ -0,0 +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; |
|||
|
|||
public interface ProductSpecTermDao extends BaseMapper<ProductSpecTerm> { |
|||
} |
|||
@ -0,0 +1,31 @@ |
|||
package com.qniao.dam.infrastructure.persistent.repository.impl; |
|||
|
|||
import com.qniao.dam.domain.aggregate.product.entity.Product; |
|||
import com.qniao.dam.domain.aggregate.product.repository.ProductRepository; |
|||
import com.qniao.dam.infrastructure.persistent.dao.domain.ProductDao; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import javax.annotation.Resource; |
|||
import java.util.Objects; |
|||
|
|||
@Service |
|||
public class ProductRepositoryImpl implements ProductRepository { |
|||
|
|||
@Resource |
|||
private ProductDao productDao; |
|||
|
|||
@Override |
|||
public Product load(Long id) { |
|||
return productDao.selectById(id); |
|||
} |
|||
|
|||
@Override |
|||
public Long save(Product entity) { |
|||
if (Objects.isNull(entity) || Objects.isNull(productDao.selectById(entity.getId()))) { |
|||
productDao.insert(entity); |
|||
} else { |
|||
productDao.updateById(entity); |
|||
} |
|||
return entity.getId(); |
|||
} |
|||
} |
|||
@ -0,0 +1,60 @@ |
|||
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.repository.ProductSpecRepository; |
|||
import com.qniao.dam.infrastructure.persistent.dao.domain.ProductSpecDao; |
|||
import com.qniao.dam.infrastructure.persistent.dao.domain.ProductSpecTermDao; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.transaction.annotation.Transactional; |
|||
|
|||
import javax.annotation.Resource; |
|||
import java.util.Objects; |
|||
import java.util.stream.Collectors; |
|||
|
|||
@Service |
|||
public class ProductSpecRepositoryImpl implements ProductSpecRepository { |
|||
|
|||
@Resource |
|||
private ProductSpecDao productSpecDao; |
|||
@Resource |
|||
private ProductSpecTermDao productSpecTermDao; |
|||
|
|||
@Override |
|||
public ProductSpec load(Long id) { |
|||
ProductSpec productSpec = productSpecDao.selectById(id); |
|||
if (Objects.nonNull(productSpec)) { |
|||
productSpec.setProductSpecTermList(productSpecTermDao.selectList(new LambdaQueryWrapper<ProductSpecTerm>() |
|||
.eq(ProductSpecTerm::getProductSpecId, productSpec.getId()))); |
|||
} |
|||
return productSpec; |
|||
} |
|||
|
|||
@Transactional(rollbackFor = Exception.class) |
|||
@Override |
|||
public Long save(ProductSpec entity) { |
|||
if (Objects.isNull(entity) || Objects.isNull(productSpecDao.selectById(entity.getId()))) { |
|||
productSpecDao.insert(entity); |
|||
} else { |
|||
productSpecDao.updateById(entity); |
|||
} |
|||
if (CollUtil.isNotEmpty(entity.getInsertProductSpecTermList())) { |
|||
entity.getInsertProductSpecTermList().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(); |
|||
} |
|||
} |
|||
@ -0,0 +1,40 @@ |
|||
package com.qniao.dam.infrastructure.utils; |
|||
|
|||
import cn.hutool.core.lang.Tuple; |
|||
import com.qniao.domain.Entity; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
import java.util.Objects; |
|||
|
|||
/** |
|||
* @author Derran |
|||
* @date 2023/7/19 15:57 |
|||
**/ |
|||
public class CompareEntityUtil { |
|||
|
|||
public static <T extends Entity<T>> Tuple compareEntityList(List<T> newList, List<T> oldList) { |
|||
List<T> insertList = new ArrayList<>(); |
|||
List<T> updateList = new ArrayList<>(); |
|||
List<T> deleteList; |
|||
for (T newT : newList) { |
|||
if (Objects.isNull(newT.getId())) { |
|||
insertList.add(newT); |
|||
} else { |
|||
T updateT = null; |
|||
for (T oldT : oldList) { |
|||
if (oldT.getId().equals(newT.getId())) { |
|||
updateT = oldT; |
|||
updateList.add(newT); |
|||
} |
|||
} |
|||
if (Objects.nonNull(updateT)) { |
|||
oldList.remove(updateT); |
|||
} |
|||
} |
|||
} |
|||
deleteList = oldList; |
|||
return new Tuple(insertList, updateList, deleteList); |
|||
} |
|||
|
|||
} |
|||
Write
Preview
Loading…
Cancel
Save