From 0dc6f37072bdafa88b16db75fb77d48ee344f54d Mon Sep 17 00:00:00 2001 From: Derran Date: Wed, 13 Mar 2024 17:38:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dating-agency-mall-constant/pom.xml | 15 +++++ .../constant/ProductMainCategoryEnum.java | 40 +++++++++++++ .../product/constant/ProductStatusEnum.java | 35 +++++++++++ .../constant/ProductSubCategoryEnum.java | 44 ++++++++++++++ .../product/constant/ProductTypeEnum.java | 35 +++++++++++ .../constant/ProductSpecTermNameEnum.java | 40 +++++++++++++ .../constant/ProductSpecTermUnitEnum.java | 45 ++++++++++++++ dating-agency-mall-entity/pom.xml | 11 ++++ .../aggregate/product/entity/Product.java | 38 ++++++++++++ .../productspec/entity/ProductSpec.java | 34 +++++++++++ .../productspec/entity/ProductSpecTerm.java | 30 ++++++++++ dating-agency-mall-server/pom.xml | 5 ++ .../aggregate/product/ProductAggregate.java | 7 +++ .../product/repository/ProductRepository.java | 7 +++ .../productspec/ProductSpecAggregate.java | 7 +++ .../repository/ProductSpecRepository.java | 7 +++ .../persistent/dao/domain/ProductDao.java | 7 +++ .../persistent/dao/domain/ProductSpecDao.java | 7 +++ .../dao/domain/ProductSpecTermDao.java | 7 +++ .../impl/ProductRepositoryImpl.java | 31 ++++++++++ .../impl/ProductSpecRepositoryImpl.java | 60 +++++++++++++++++++ .../utils/CompareEntityUtil.java | 40 +++++++++++++ 22 files changed, 552 insertions(+) create mode 100644 dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductMainCategoryEnum.java create mode 100644 dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductStatusEnum.java create mode 100644 dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductSubCategoryEnum.java create mode 100644 dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductTypeEnum.java create mode 100644 dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/productspec/constant/ProductSpecTermNameEnum.java create mode 100644 dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/productspec/constant/ProductSpecTermUnitEnum.java create mode 100644 dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/product/entity/Product.java create mode 100644 dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/productspec/entity/ProductSpec.java create mode 100644 dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/productspec/entity/ProductSpecTerm.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/product/ProductAggregate.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/product/repository/ProductRepository.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/productspec/ProductSpecAggregate.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/productspec/repository/ProductSpecRepository.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/ProductDao.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/ProductSpecDao.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/ProductSpecTermDao.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ProductRepositoryImpl.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ProductSpecRepositoryImpl.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/utils/CompareEntityUtil.java diff --git a/dating-agency-mall-constant/pom.xml b/dating-agency-mall-constant/pom.xml index 33ce483..7b2e8d7 100644 --- a/dating-agency-mall-constant/pom.xml +++ b/dating-agency-mall-constant/pom.xml @@ -17,4 +17,19 @@ UTF-8 + + + org.projectlombok + lombok + + + com.fasterxml.jackson.core + jackson-annotations + compile + + + com.qniao + mybatis-plus-starter + + \ No newline at end of file diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductMainCategoryEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductMainCategoryEnum.java new file mode 100644 index 0000000..6f74014 --- /dev/null +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductMainCategoryEnum.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; + } +} \ No newline at end of file diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductStatusEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductStatusEnum.java new file mode 100644 index 0000000..0ca4c27 --- /dev/null +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductStatusEnum.java @@ -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; + } +} \ No newline at end of file diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductSubCategoryEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductSubCategoryEnum.java new file mode 100644 index 0000000..6b0bef3 --- /dev/null +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductSubCategoryEnum.java @@ -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; + } +} \ No newline at end of file diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductTypeEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductTypeEnum.java new file mode 100644 index 0000000..3c0a57e --- /dev/null +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductTypeEnum.java @@ -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; + } +} \ No newline at end of file diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/productspec/constant/ProductSpecTermNameEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/productspec/constant/ProductSpecTermNameEnum.java new file mode 100644 index 0000000..eda8097 --- /dev/null +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/productspec/constant/ProductSpecTermNameEnum.java @@ -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; + } +} \ No newline at end of file diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/productspec/constant/ProductSpecTermUnitEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/productspec/constant/ProductSpecTermUnitEnum.java new file mode 100644 index 0000000..4335e40 --- /dev/null +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/productspec/constant/ProductSpecTermUnitEnum.java @@ -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; + } +} \ No newline at end of file diff --git a/dating-agency-mall-entity/pom.xml b/dating-agency-mall-entity/pom.xml index 2928c88..3bc4cec 100644 --- a/dating-agency-mall-entity/pom.xml +++ b/dating-agency-mall-entity/pom.xml @@ -17,4 +17,15 @@ UTF-8 + + + io.swagger + swagger-annotations + + + com.qniao + dating-agency-mall-constant + 0.0.1-SNAPSHOT + + \ No newline at end of file diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/product/entity/Product.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/product/entity/Product.java new file mode 100644 index 0000000..7bd4635 --- /dev/null +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/product/entity/Product.java @@ -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 { + + @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; +} diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/productspec/entity/ProductSpec.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/productspec/entity/ProductSpec.java new file mode 100644 index 0000000..039498e --- /dev/null +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/productspec/entity/ProductSpec.java @@ -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 { + + @ApiModelProperty("产品标识") + private Long productId; + + @ApiModelProperty("原价") + private BigDecimal unitOriginalPrice; + + @ApiModelProperty("售价") + private BigDecimal unitSellingPrice; + + @ApiModelProperty("可用库存数量") + private Integer availableStockNumber; + + private transient List productSpecTermList; + + private transient List insertProductSpecTermList; + private transient List updateProductSpecTermList; + private transient List deleteProductSpecTermList; +} diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/productspec/entity/ProductSpecTerm.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/productspec/entity/ProductSpecTerm.java new file mode 100644 index 0000000..702cbc8 --- /dev/null +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/productspec/entity/ProductSpecTerm.java @@ -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 { + + @ApiModelProperty("产品规格标识") + private Long productSpecId; + + @ApiModelProperty("展示名称") + private String displayName; + + @ApiModelProperty("名称") + private ProductSpecTermNameEnum name; + + @ApiModelProperty("单位") + private ProductSpecTermUnitEnum unit; + + @ApiModelProperty("值") + private String value; +} diff --git a/dating-agency-mall-server/pom.xml b/dating-agency-mall-server/pom.xml index 60b7207..5a0b602 100644 --- a/dating-agency-mall-server/pom.xml +++ b/dating-agency-mall-server/pom.xml @@ -56,6 +56,11 @@ com.qniao redis-starter + + com.qniao + dating-agency-mall-entity + 0.0.1-SNAPSHOT + diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/product/ProductAggregate.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/product/ProductAggregate.java new file mode 100644 index 0000000..d6776c1 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/product/ProductAggregate.java @@ -0,0 +1,7 @@ +package com.qniao.dam.domain.aggregate.product; + +import org.springframework.stereotype.Service; + +@Service +public class ProductAggregate { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/product/repository/ProductRepository.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/product/repository/ProductRepository.java new file mode 100644 index 0000000..5e4b698 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/product/repository/ProductRepository.java @@ -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 { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/productspec/ProductSpecAggregate.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/productspec/ProductSpecAggregate.java new file mode 100644 index 0000000..b5c2885 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/productspec/ProductSpecAggregate.java @@ -0,0 +1,7 @@ +package com.qniao.dam.domain.aggregate.productspec; + +import org.springframework.stereotype.Service; + +@Service +public class ProductSpecAggregate { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/productspec/repository/ProductSpecRepository.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/productspec/repository/ProductSpecRepository.java new file mode 100644 index 0000000..d17d438 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/productspec/repository/ProductSpecRepository.java @@ -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 { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/ProductDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/ProductDao.java new file mode 100644 index 0000000..abb8036 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/ProductDao.java @@ -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 { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/ProductSpecDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/ProductSpecDao.java new file mode 100644 index 0000000..d0c3def --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/ProductSpecDao.java @@ -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 { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/ProductSpecTermDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/ProductSpecTermDao.java new file mode 100644 index 0000000..d78b1f9 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/ProductSpecTermDao.java @@ -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 { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ProductRepositoryImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ProductRepositoryImpl.java new file mode 100644 index 0000000..c9c1577 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ProductRepositoryImpl.java @@ -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(); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ProductSpecRepositoryImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ProductSpecRepositoryImpl.java new file mode 100644 index 0000000..d42c529 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ProductSpecRepositoryImpl.java @@ -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() + .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(); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/utils/CompareEntityUtil.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/utils/CompareEntityUtil.java new file mode 100644 index 0000000..975f690 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/utils/CompareEntityUtil.java @@ -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 > Tuple compareEntityList(List newList, List oldList) { + List insertList = new ArrayList<>(); + List updateList = new ArrayList<>(); + List 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); + } + +}