Browse Source

新增活动模块

release
996472796@qq.com 2 years ago
parent
commit
147e474bdf
30 changed files with 782 additions and 6 deletions
  1. 36
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/activity/constant/ActivityStatusEnum.java
  2. 4
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductMainCategoryEnum.java
  3. 66
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/activity/entity/Activity.java
  4. 72
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/activity/entity/ActivityProduct.java
  5. 4
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/order/entity/Order.java
  6. 29
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/activity/user/ActivityUserCommandController.java
  7. 42
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/activity/user/request/ActivityDto.java
  8. 10
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/OrderUserCommandController.java
  9. 47
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/request/UserBatchSubmitOrderDto.java
  10. 38
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/activity/user/ActivityUserQueryController.java
  11. 7
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/activity/user/request/ActivityQueryDto.java
  12. 18
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/activity/user/response/ActivityDetailsVo.java
  13. 20
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/activity/user/response/ActivityProductListVo.java
  14. 12
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/activity/user/response/ActivityVo.java
  15. 8
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/product/user/ProductUserQueryController.java
  16. 4
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/product/user/request/UserPageProductByOperatorQueryParam.java
  17. 18
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/product/user/response/UserPageProductByCustomerExtendVo.java
  18. 35
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/product/user/response/UserPageProductByCustomerGroupVo.java
  19. 74
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/activity/ActivityApplicationService.java
  20. 12
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java
  21. 18
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/activity/ActivityAggregate.java
  22. 7
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/activity/repository/ActivityRepository.java
  23. 24
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/activity/ActivityDao.java
  24. 12
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/activity/ActivityProductDao.java
  25. 7
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/view/ProductViewDao.java
  26. 53
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ActivityRepositoryImpl.java
  27. 3
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/ProductQueryService.java
  28. 29
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/impl/ProductQueryServiceImpl.java
  29. 15
      dating-agency-mall-server/src/main/resources/mapper/activity/ActivityMapper.xml
  30. 64
      dating-agency-mall-server/src/main/resources/mapper/product/ProductViewMapper.xml

36
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/activity/constant/ActivityStatusEnum.java

@ -0,0 +1,36 @@
package com.qniao.dam.domian.aggregate.activity.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 com.qniao.dam.domian.aggregate.product.constant.ProductMainCategoryEnum;
import lombok.Getter;
@Getter
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum ActivityStatusEnum {
ENABLE(1, "启用"),
DISABLE(0, "停用");
@EnumValue
@JsonValue
private final Integer value;
private final String desc;
ActivityStatusEnum(Integer value, String desc) {
this.value = value;
this.desc = desc;
}
@JsonCreator
public static ActivityStatusEnum get(Object code) {
for (ActivityStatusEnum e : ActivityStatusEnum.values()) {
if (e.getValue().equals(code)) {
return e;
}
}
return null;
}
}

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

@ -16,8 +16,8 @@ public enum ProductMainCategoryEnum {
AUTHENTICATION(1, "认证"),
DATE_EDITING(2, "资料编辑"),
UNLOCKING_INFORMATION(3, "解锁信息"),
OFFLINE_SERVICES(4, "线下服务");
OFFLINE_SERVICES(4, "线下服务"),
VIP(5,"会员");
@EnumValue
@JsonValue
private final Integer value;

66
dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/activity/entity/Activity.java

@ -0,0 +1,66 @@
package com.qniao.dam.domain.aggregate.activity.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.qniao.domain.Entity;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.util.Assert;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
/**
* 活动表
*
* @date 2024/04/07
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("da_activity")
public class Activity extends Entity<Activity> {
private static final long serialVersionUID = 1L;
/**
* 活动标题
*/
@ApiModelProperty("活动标题")
private String activityName;
/**
* 活动描述
*/
@ApiModelProperty("活动描述")
private String explain;
/**
* 活动开始时间
*/
@ApiModelProperty("活动开始时间")
private LocalDateTime startTime;
/**
* 活动结束时间
*/
@ApiModelProperty("活动结束时间")
private LocalDateTime endTime;
/**
* 状态
*/
@ApiModelProperty("状态")
private Integer status;
private transient List<ActivityProduct> activityProductList;
public static void check(Activity entity){
Assert.notNull(entity, "活动表不存在");
}
}

72
dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/activity/entity/ActivityProduct.java

@ -0,0 +1,72 @@
package com.qniao.dam.domain.aggregate.activity.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.qniao.domain.Entity;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.util.Assert;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 活动产品表
*
* @date 2024/04/07
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("da_activity_product")
public class ActivityProduct extends Entity<ActivityProduct> {
private static final long serialVersionUID = 1L;
@ApiModelProperty("活动id")
private Long activityId;
/**
* 产品id
*/
@ApiModelProperty("产品id")
private Long productId;
/**
* 产品规格
*/
@ApiModelProperty("产品规格")
private Long productSpecId;
/**
* 是否赠品
*/
@ApiModelProperty("是否赠品")
private Boolean freebie;
@ApiModelProperty("活动原价")
private BigDecimal activityUnitOriginalPrice;
@ApiModelProperty("活动售价")
private BigDecimal activityUnitSellingPrice;
/**
*
*/
@ApiModelProperty("")
private LocalDateTime createTime;
/**
*
*/
@ApiModelProperty("")
private LocalDateTime updateTime;
public static void check(ActivityProduct entity){
Assert.notNull(entity, "活动产品表不存在");
}
}

4
dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/order/entity/Order.java

@ -35,4 +35,8 @@ public class Order extends Entity<Order> {
private OrderStatusEnum status;
private transient List<OrderItem> orderItemList;
private transient Integer groupType;
private transient Long activityId;
}

29
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/activity/user/ActivityUserCommandController.java

@ -0,0 +1,29 @@
package com.qniao.dam.api.command.activity.user;
import com.qniao.dam.api.command.activity.user.request.ActivityDto;
import com.qniao.dam.application.service.activity.ActivityApplicationService;
import com.qniao.dam.domain.aggregate.activity.entity.Activity;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@Api(tags = "活动")
@RestController
@RequestMapping("user")
public class ActivityUserCommandController {
@Resource
private ActivityApplicationService activityApplicationService;
@ApiOperation("保存活动")
@PostMapping("save/activity")
public String saveActivity(@RequestBody ActivityDto activityDto){
Activity activity = activityDto.trans2Domain();
return activityApplicationService.saveActivity(activity);
}
}

42
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/activity/user/request/ActivityDto.java

@ -0,0 +1,42 @@
package com.qniao.dam.api.command.activity.user.request;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.qniao.dam.domain.aggregate.activity.entity.Activity;
import com.qniao.dam.domain.aggregate.activity.entity.ActivityProduct;
import com.qniao.dam.domian.aggregate.activity.constant.ActivityStatusEnum;
import com.qniao.framework.utils.TypeConvertUtils;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class ActivityDto {
@ApiModelProperty("活动id")
private Long id;
@ApiModelProperty("活动标题")
private String activityName;
@ApiModelProperty("活动描述")
private String explain;
@ApiModelProperty("活动开始时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime startTime;
@ApiModelProperty("活动结束时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime endTime;
@ApiModelProperty("活动产品集合")
private List<ActivityProduct> activityProductList;
public Activity trans2Domain(){
Activity activity = TypeConvertUtils.convert(this,Activity.class);
activity.setStatus(ActivityStatusEnum.ENABLE.getValue());
return activity;
}
}

10
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/OrderUserCommandController.java

@ -1,5 +1,6 @@
package com.qniao.dam.api.command.order.user;
import com.qniao.dam.api.command.order.user.request.UserBatchSubmitOrderDto;
import com.qniao.dam.api.command.order.user.request.UserSubmitOrderDto;
import com.qniao.dam.api.command.order.user.response.UserSubmitOrderVo;
import com.qniao.dam.application.service.order.OrderApplicationService;
@ -28,4 +29,13 @@ public class OrderUserCommandController {
return orderApplicationService.submit(order);
}
@ApiOperation("用户批量提交订单")
@PostMapping("batch/submit/order")
public UserSubmitOrderVo userBatchSubmitOrder(@RequestBody @Valid UserBatchSubmitOrderDto dto,
@RequestParam("userId") Long userId) {
Order order = dto.trans2Domain();
order.setUserId(userId);
return orderApplicationService.submit(order);
}
}

47
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/request/UserBatchSubmitOrderDto.java

@ -0,0 +1,47 @@
package com.qniao.dam.api.command.order.user.request;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.qniao.dam.domain.aggregate.order.entity.Order;
import com.qniao.dam.domain.aggregate.order.entity.OrderItem;
import com.qniao.domain.Trans2DomainAssembler;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
@Data
public class UserBatchSubmitOrderDto {
@ApiModelProperty("征婚资料标识")
@NotNull(message = "征婚资料标识不能为空")
private Long miId;
@ApiModelProperty("产品规格标识集合")
@NotNull(message = "产品规格标识集合不能为空")
private List<Long> productSpecIds;
@ApiModelProperty("活动id")
private Long activityId;
@ApiModelProperty("商品组类型 0 商品 1 活动产品")
private Integer groupType;
public Order trans2Domain() {
Order order = new Order();
order.setMiId(miId);
order.setActivityId(activityId);
order.setGroupType(groupType);
List<OrderItem> orderItemList = new ArrayList<>();
productSpecIds.forEach(e->{
OrderItem orderItem = new OrderItem();
orderItem.setProductSpecId(e);
orderItem.setQuantity(1);
orderItemList.add(orderItem);
});
order.setOrderItemList(orderItemList);
return order;
}
}

38
dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/activity/user/ActivityUserQueryController.java

@ -0,0 +1,38 @@
package com.qniao.dam.api.query.activity.user;
import com.qniao.dam.api.query.activity.user.request.ActivityQueryDto;
import com.qniao.dam.api.query.activity.user.response.ActivityDetailsVo;
import com.qniao.dam.api.query.activity.user.response.ActivityVo;
import com.qniao.dam.application.service.activity.ActivityApplicationService;
import com.qniao.dau.infrastructure.constant.RequestHeaderFields;
import com.qniao.domain.QnPage;
import com.qniao.framework.utils.PageUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("user")
@Api(tags = "活动查询")
public class ActivityUserQueryController {
@Resource
private ActivityApplicationService activityApplicationService;
@GetMapping("get/activity/by/operator/page")
@ApiOperation("运营获取活动列表")
public QnPage<ActivityVo> pageActivityOperation(PageUtil pageUtil,
ActivityQueryDto dto,
@RequestParam("userId") Long userId,
@RequestHeader(name = RequestHeaderFields.FIELD_ORGANIZATION_ID) Long orgId){
return activityApplicationService.pageActivityOperation(pageUtil,dto,userId,orgId);
}
@GetMapping("get/activity/by/operator/details")
@ApiOperation("运营获取活动详情")
public ActivityDetailsVo getActivityDetails(Long id){
return activityApplicationService.getActivityDetails(id);
}
}

7
dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/activity/user/request/ActivityQueryDto.java

@ -0,0 +1,7 @@
package com.qniao.dam.api.query.activity.user.request;
import lombok.Data;
@Data
public class ActivityQueryDto {
}

18
dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/activity/user/response/ActivityDetailsVo.java

@ -0,0 +1,18 @@
package com.qniao.dam.api.query.activity.user.response;
import com.qniao.dam.api.query.product.user.response.UserPageProductByOperatorVo;
import com.qniao.dam.domain.aggregate.activity.entity.Activity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class ActivityDetailsVo extends Activity {
@ApiModelProperty("产品集合")
private List<ActivityProductListVo> activityProductListVos;
}

20
dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/activity/user/response/ActivityProductListVo.java

@ -0,0 +1,20 @@
package com.qniao.dam.api.query.activity.user.response;
import com.qniao.dam.api.query.product.user.response.UserPageProductByOperatorVo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ActivityProductListVo extends UserPageProductByOperatorVo {
@ApiModelProperty("是否赠品")
private Boolean freebie;
@ApiModelProperty("活动原价")
private BigDecimal activityUnitOriginalPrice;
@ApiModelProperty("活动售价")
private BigDecimal activityUnitSellingPrice;
}

12
dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/activity/user/response/ActivityVo.java

@ -0,0 +1,12 @@
package com.qniao.dam.api.query.activity.user.response;
import com.qniao.dam.domain.aggregate.activity.entity.Activity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class ActivityVo extends Activity {
@ApiModelProperty("活动状态 0 未开始 1 进行中 2 已结束")
private Integer activeState;
}

8
dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/product/user/ProductUserQueryController.java

@ -3,6 +3,7 @@ package com.qniao.dam.api.query.product.user;
import com.qniao.dam.api.query.product.user.request.UserPageProductByCustomerQueryParam;
import com.qniao.dam.api.query.product.user.request.UserPageProductByOperatorQueryParam;
import com.qniao.dam.api.query.product.user.response.UserGetProductDetailByOperatorVo;
import com.qniao.dam.api.query.product.user.response.UserPageProductByCustomerGroupVo;
import com.qniao.dam.api.query.product.user.response.UserPageProductByCustomerVo;
import com.qniao.dam.api.query.product.user.response.UserPageProductByOperatorVo;
import com.qniao.dam.query.product.ProductQueryService;
@ -15,6 +16,7 @@ import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("user")
@ -55,4 +57,10 @@ public class ProductUserQueryController {
@RequestParam("userId") Long userId) {
return PageUtil.convert(productQueryService.pageProductByCustomer(pageUtil, queryParam), UserPageProductByCustomerVo.class);
}
@GetMapping("get/product/by/customer/list")
@ApiOperation("客户获取商品列表")
public List<UserPageProductByCustomerGroupVo> getPageProductByCustomer(){
return productQueryService.getPageProductByCustomer();
}
}

4
dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/product/user/request/UserPageProductByOperatorQueryParam.java

@ -3,6 +3,8 @@ package com.qniao.dam.api.query.product.user.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class UserPageProductByOperatorQueryParam {
@ -12,4 +14,6 @@ public class UserPageProductByOperatorQueryParam {
@ApiModelProperty("产品次分类")
private Integer subCategory;
private List<Long> productIds;
}

18
dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/product/user/response/UserPageProductByCustomerExtendVo.java

@ -0,0 +1,18 @@
package com.qniao.dam.api.query.product.user.response;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.models.auth.In;
import lombok.Data;
@Data
public class UserPageProductByCustomerExtendVo extends UserPageProductByCustomerVo{
@ApiModelProperty("分组类型 0 商品 1 活动")
private Integer groupType;
@ApiModelProperty("商品名称")
private String productName;
@ApiModelProperty("数据id")
private Long id;
}

35
dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/product/user/response/UserPageProductByCustomerGroupVo.java

@ -0,0 +1,35 @@
package com.qniao.dam.api.query.product.user.response;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class UserPageProductByCustomerGroupVo {
@ApiModelProperty("活动id")
@JsonSerialize(using = ToStringSerializer.class)
private Long activityId;
@ApiModelProperty("商品组类型 0 商品 1 活动产品")
private Integer groupType;
@ApiModelProperty("商品名称")
private String productName;
@ApiModelProperty("原价")
private BigDecimal unitOriginalPrice;
@ApiModelProperty("售价")
private BigDecimal unitSellingPrice;
@ApiModelProperty("有效期")
private String validityPeriodValue;
@ApiModelProperty("商品集合")
private List<UserPageProductByCustomerVo> productList;
}

74
dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/activity/ActivityApplicationService.java

@ -0,0 +1,74 @@
package com.qniao.dam.application.service.activity;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.qniao.dam.api.query.activity.user.request.ActivityQueryDto;
import com.qniao.dam.api.query.activity.user.response.ActivityDetailsVo;
import com.qniao.dam.api.query.activity.user.response.ActivityProductListVo;
import com.qniao.dam.api.query.activity.user.response.ActivityVo;
import com.qniao.dam.api.query.product.user.request.UserPageProductByOperatorQueryParam;
import com.qniao.dam.domain.aggregate.activity.ActivityAggregate;
import com.qniao.dam.domain.aggregate.activity.entity.Activity;
import com.qniao.dam.domain.aggregate.activity.entity.ActivityProduct;
import com.qniao.dam.infrastructure.persistent.dao.activity.ActivityDao;
import com.qniao.dam.infrastructure.persistent.dao.activity.ActivityProductDao;
import com.qniao.dam.infrastructure.persistent.dao.view.ProductViewDao;
import com.qniao.domain.BaseApplicationService;
import com.qniao.domain.QnPage;
import com.qniao.framework.utils.PageUtil;
import com.qniao.framework.utils.TypeConvertUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
@Slf4j
public class ActivityApplicationService extends BaseApplicationService {
@Resource
private ActivityAggregate aggregate;
@Resource
private ActivityDao activityDao;
@Resource
private ProductViewDao productViewDao;
@Resource
private ActivityProductDao activityProductDao;
public String saveActivity(Activity activity){
return aggregate.saveActivity(activity);
}
public QnPage<ActivityVo> pageActivityOperation(PageUtil pageUtil,
ActivityQueryDto dto,
Long userId,
Long orgId){
return PageUtil.convert(activityDao.pageActivityOperation(pageUtil.toPageWithoutOrders(),dto,userId,orgId));
}
public ActivityDetailsVo getActivityDetails(Long id){
ActivityDetailsVo vo = TypeConvertUtils.convert(activityDao.selectById(id),ActivityDetailsVo.class);
List<ActivityProduct> activityProductList = activityProductDao.selectList(Wrappers.lambdaQuery(new ActivityProduct()).eq(ActivityProduct::getActivityId,vo.getId()));
Map<Long,ActivityProduct> map = activityProductList.stream().collect(Collectors.toMap(ActivityProduct::getProductId,ActivityProduct -> ActivityProduct));
UserPageProductByOperatorQueryParam queryParam = new UserPageProductByOperatorQueryParam();
queryParam.setProductIds(new ArrayList<>(map.keySet()));
List<ActivityProductListVo> activityProductListVo = TypeConvertUtils.convert(productViewDao.selectProductByOperator(queryParam),ActivityProductListVo.class);
activityProductListVo.forEach(v->{
ActivityProduct av = map.get(v.getProductId());
v.setFreebie(av.getFreebie());
v.setActivityUnitOriginalPrice(av.getActivityUnitOriginalPrice());
v.setUnitOriginalPrice(av.getActivityUnitOriginalPrice());
});
vo.setActivityProductListVos(activityProductListVo);
return vo;
}
}

12
dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java

@ -1,7 +1,9 @@
package com.qniao.dam.application.service.order;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.qniao.dam.api.command.order.user.response.UserSubmitOrderVo;
import com.qniao.dam.domain.aggregate.activity.entity.ActivityProduct;
import com.qniao.dam.domain.aggregate.order.entity.Order;
import com.qniao.dam.domain.aggregate.order.entity.OrderItem;
import com.qniao.dam.domain.aggregate.paymentorder.entity.PaymentOrder;
@ -11,6 +13,7 @@ import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec;
import com.qniao.dam.domain.aggregate.productspec.repository.ProductSpecRepository;
import com.qniao.dam.domain.service.order.SubmitOrderDomainService;
import com.qniao.dam.domian.aggregate.product.constant.ProductTypeEnum;
import com.qniao.dam.infrastructure.persistent.dao.activity.ActivityProductDao;
import com.qniao.dam.infrastructure.utils.SnowFlakeUtil;
import com.qniao.dam.query.order.OrderQueryService;
import com.qniao.framework.exception.BizException;
@ -32,7 +35,8 @@ public class OrderApplicationService {
private SnowFlakeUtil snowFlakeUtil;
@Resource
private OrderQueryService orderQueryService;
@Resource
private ActivityProductDao activityProductDao;
/**
* todo 库存校验 暂时不用考虑
@ -84,6 +88,12 @@ public class OrderApplicationService {
orderItem.setProductTitle(product.getProductTitle());
orderItem.setProductDesc(product.getProductDesc());
orderItem.setUnitSettlementPrice(productSpec.getUnitSellingPrice());
if(order.getGroupType() != null && order.getGroupType() == 1){
ActivityProduct activityProduct = activityProductDao.selectOne(Wrappers.lambdaQuery(new ActivityProduct())
.eq(ActivityProduct::getActivityId,order.getActivityId())
.eq(ActivityProduct::getProductSpecId,orderItem.getProductSpecId()));
orderItem.setUnitSettlementPrice(activityProduct.getActivityUnitSellingPrice());
}
//1.1. 同类型权益不同规格限制购买和提醒
if (ProductTypeEnum.VIRTUAL.equals(product.getProductType())) {
boolean diffFlag = orderQueryService.checkDiffSpecRight(order, orderItem, productSpec);

18
dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/activity/ActivityAggregate.java

@ -0,0 +1,18 @@
package com.qniao.dam.domain.aggregate.activity;
import com.qniao.dam.domain.aggregate.activity.entity.Activity;
import com.qniao.dam.domain.aggregate.activity.repository.ActivityRepository;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class ActivityAggregate {
@Resource
private ActivityRepository activityRepository;
public String saveActivity(Activity activity){
return activityRepository.save(activity).toString();
}
}

7
dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/activity/repository/ActivityRepository.java

@ -0,0 +1,7 @@
package com.qniao.dam.domain.aggregate.activity.repository;
import com.qniao.dam.domain.aggregate.activity.entity.Activity;
import com.qniao.domain.Repository;
public interface ActivityRepository extends Repository<Activity, Long> {
}

24
dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/activity/ActivityDao.java

@ -0,0 +1,24 @@
package com.qniao.dam.infrastructure.persistent.dao.activity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qniao.dam.api.query.activity.user.request.ActivityQueryDto;
import com.qniao.dam.api.query.activity.user.response.ActivityVo;
import com.qniao.dam.domain.aggregate.activity.entity.Activity;
import com.qniao.domain.QnPage;
import com.qniao.framework.utils.PageUtil;
import org.apache.ibatis.annotations.Param;
/**
* 活动表
*
* @date 2024/04/07
*/
public interface ActivityDao extends BaseMapper<Activity> {
IPage<ActivityVo> pageActivityOperation(Page<Object> pageWithoutOrders,
@Param("dto") ActivityQueryDto dto,
@Param("userId") Long userId,
@Param("orgId") Long orgId);
}

12
dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/activity/ActivityProductDao.java

@ -0,0 +1,12 @@
package com.qniao.dam.infrastructure.persistent.dao.activity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qniao.dam.domain.aggregate.activity.entity.ActivityProduct;
/**
* 活动产品表
*
* @date 2024/04/07
*/
public interface ActivityProductDao extends BaseMapper<ActivityProduct> {
}

7
dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/view/ProductViewDao.java

@ -4,11 +4,14 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qniao.dam.api.query.product.user.request.UserPageProductByCustomerQueryParam;
import com.qniao.dam.api.query.product.user.request.UserPageProductByOperatorQueryParam;
import com.qniao.dam.api.query.product.user.response.UserPageProductByCustomerExtendVo;
import com.qniao.dam.api.query.product.user.response.UserPageProductByCustomerVo;
import com.qniao.dam.api.query.product.user.response.UserPageProductByOperatorVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface ProductViewDao {
@ -18,4 +21,8 @@ public interface ProductViewDao {
IPage<UserPageProductByCustomerVo> pageProductByCustomer(Page<Object> pageWithoutOrders,
@Param("queryParam") UserPageProductByCustomerQueryParam queryParam);
List<UserPageProductByOperatorVo> selectProductByOperator(@Param("queryParam") UserPageProductByOperatorQueryParam queryParam);
List<UserPageProductByCustomerExtendVo> selectProductByCustomerList();
}

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

@ -0,0 +1,53 @@
package com.qniao.dam.infrastructure.persistent.repository.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.qniao.dam.domain.aggregate.activity.entity.Activity;
import com.qniao.dam.domain.aggregate.activity.entity.ActivityProduct;
import com.qniao.dam.domain.aggregate.activity.repository.ActivityRepository;
import com.qniao.dam.infrastructure.persistent.dao.activity.ActivityDao;
import com.qniao.dam.infrastructure.persistent.dao.activity.ActivityProductDao;
import com.qniao.framework.utils.SnowFlake;
import javax.annotation.Resource;
public class ActivityRepositoryImpl implements ActivityRepository {
@Resource
private ActivityDao activityDao;
@Resource
private ActivityProductDao activityProductDao;
@Resource
private SnowFlake snowFlake;
@Override
public Activity load(Long id) {
Activity activity = activityDao.selectById(id);
return activity;
}
@Override
public Long save(Activity entity) {
if(entity.getId() != null){
entity.setId(snowFlake.nextId());
activityDao.insert(entity);
if(entity.getActivityProductList() != null){
entity.getActivityProductList().forEach(e->{
e.setActivityId(entity.getId());
activityProductDao.insert(e);
});
}
}else{
activityDao.updateById(entity);
activityProductDao.delete(Wrappers.lambdaUpdate(new ActivityProduct()).eq(ActivityProduct::getActivityId,entity.getId()));
if(entity.getActivityProductList() != null){
entity.getActivityProductList().forEach(e->{
e.setActivityId(entity.getId());
activityProductDao.insert(e);
});
}
}
return entity.getId();
}
}

3
dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/ProductQueryService.java

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.qniao.dam.api.query.product.user.request.UserPageProductByCustomerQueryParam;
import com.qniao.dam.api.query.product.user.request.UserPageProductByOperatorQueryParam;
import com.qniao.dam.api.query.product.user.response.UserGetProductDetailByOperatorVo;
import com.qniao.dam.api.query.product.user.response.UserPageProductByCustomerGroupVo;
import com.qniao.dam.api.query.product.user.response.UserPageProductByCustomerVo;
import com.qniao.dam.api.query.product.user.response.UserPageProductByOperatorVo;
import com.qniao.dam.domain.aggregate.productspec.valueobj.ProductSpecTerm;
@ -20,4 +21,6 @@ public interface ProductQueryService {
IPage<UserPageProductByCustomerVo> pageProductByCustomer(PageUtil pageUtil, UserPageProductByCustomerQueryParam queryParam);
ProductSpecTerm getTermByName(List<ProductSpecTerm> productSpecTermList, ProductSpecTermNameEnum name);
List<UserPageProductByCustomerGroupVo> getPageProductByCustomer();
}

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

@ -5,9 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.qniao.dam.api.query.product.user.request.UserPageProductByCustomerQueryParam;
import com.qniao.dam.api.query.product.user.request.UserPageProductByOperatorQueryParam;
import com.qniao.dam.api.query.product.user.response.UserGetProductDetailByOperatorVo;
import com.qniao.dam.api.query.product.user.response.UserPageProductByCustomerVo;
import com.qniao.dam.api.query.product.user.response.UserPageProductByOperatorVo;
import com.qniao.dam.api.query.product.user.response.*;
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;
@ -23,8 +21,12 @@ import com.qniao.framework.utils.TypeConvertUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
@Service
public class ProductQueryServiceImpl implements ProductQueryService {
@ -87,6 +89,27 @@ public class ProductQueryServiceImpl implements ProductQueryService {
return productSpecTerm;
}
@Override
public List<UserPageProductByCustomerGroupVo> getPageProductByCustomer() {
List<UserPageProductByCustomerGroupVo> groupVoList = new ArrayList<>();
List<UserPageProductByCustomerExtendVo> extendVos = productViewDao.selectProductByCustomerList();
Map<Long,List<UserPageProductByCustomerExtendVo>> extMap = extendVos.stream().collect(Collectors.groupingBy(UserPageProductByCustomerExtendVo::getId));
extMap.forEach((k,v)->{
UserPageProductByCustomerExtendVo extendVo = v.get(0);
if(extendVo.getGroupType() == 0){
extendVo.setProductName(extendVo.getProductTitle());
}
BigDecimal unitOriginalPrice = v.stream().map(UserPageProductByCustomerExtendVo::getUnitOriginalPrice).reduce(BigDecimal.ZERO,BigDecimal::add);
BigDecimal unitSellingPrice = v.stream().map(UserPageProductByCustomerExtendVo::getUnitSellingPrice).reduce(BigDecimal.ZERO,BigDecimal::add);
UserPageProductByCustomerGroupVo vo = TypeConvertUtils.convert(extendVo,UserPageProductByCustomerGroupVo.class);
vo.setActivityId(extendVo.getId());
vo.setUnitSellingPrice(unitSellingPrice);
vo.setUnitOriginalPrice(unitOriginalPrice);
vo.setProductList(TypeConvertUtils.convert(v,UserPageProductByCustomerVo.class));
});
return groupVoList;
}
/**
* 找出对应name的value
*/

15
dating-agency-mall-server/src/main/resources/mapper/activity/ActivityMapper.xml

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qniao.dam.infrastructure.persistent.dao.activity.ActivityDao">
<select id="pageActivityOperation" resultType="com.qniao.dam.api.query.activity.user.response.ActivityVo">
SELECT *,
CASE
WHEN start_time > NOW() AND end_time > NOW() THEN 0
WHEN start_time &lt;= NOW() AND end_time >= NOW() THEN 1
WHEN start_time &lt; NOW() AND end_time &lt; NOW() THEN 2
ELSE
-1
END activeState
FROM da_activity
</select>
</mapper>

64
dating-agency-mall-server/src/main/resources/mapper/product/ProductViewMapper.xml

@ -29,6 +29,12 @@
<if test="queryParam.subCategory != null">
AND dp.sub_category = #{queryParam.subCategory}
</if>
<if test="queryParam.productIds != null and queryParam.productIds.size > 0">
AND dp.id IN
<foreach collection="queryParam.productIds" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</if>
</select>
<select id="pageProductByCustomer"
@ -58,5 +64,63 @@
AND dp.sub_category = #{queryParam.subCategory}
</if>
</select>
<select id="selectProductByCustomerList" resultType="com.qniao.dam.api.query.product.user.response.UserPageProductByCustomerExtendVo">
SELECT
1 groupType,
a.id,
ap.product_id as productId,
ap.product_spec_id as productSpecId,
a.activity_name productName,
p.main_category,
p.sub_category,
p.product_title,
p.product_desc,
p.detail_desc,
ap.activity_unit_original_price unit_original_price,
ap.activity_unit_selling_price unit_selling_price,
dpst1.unit as productSpecUnit,
dpst2.`value` as validityPeriodValue,
dpst3.`value` as purchaseTimeValue,
dpst4.`value` as dailyUseLimitValue
FROM
da_activity a
LEFT JOIN da_activity_product ap ON a.id = ap.activity_id AND ap.is_delete = 0
LEFT JOIN da_product p ON ap.product_id = p.id AND p.is_delete = 0
LEFT JOIN da_product_spec ps ON ps.id = ap.product_spec_id AND ps.product_id = ap.product_id AND ps.is_delete = 0
LEFT JOIN da_product_spec_term as dpst1 on dpst1.is_delete=0 and dpst1.product_spec_id =ps.id and dpst1.`name`=1
LEFT JOIN da_product_spec_term as dpst2 on dpst2.is_delete=0 and dpst2.product_spec_id =ps.id and dpst2.`name`=3
LEFT JOIN da_product_spec_term as dpst3 on dpst3.is_delete=0 and dpst3.product_spec_id =ps.id and dpst3.`name`=2
LEFT JOIN da_product_spec_term as dpst4 on dpst4.is_delete=0 and dpst4.product_spec_id =ps.id and dpst4.`name`=4
WHERE a.is_delete = 0 AND a.start_time &lt;= NOW() AND a.end_time >= NOW() ORDER BY a.create_time ASC , ap.create_time ASC
UNION
select
0 groupType,
dp.id,
dp.id as productId,
dps.id as productSpecId,
'' productName,
dp.main_category,
dp.sub_category,
dp.product_title,
dp.product_desc,
dp.detail_desc,
dps.unit_original_price,
dps.unit_selling_price,
dpst1.unit as productSpecUnit,
dpst2.`value` as validityPeriodValue,
dpst3.`value` as purchaseTimeValue,
dpst4.`value` as dailyUseLimitValue
from da_product as dp
LEFT JOIN da_product_spec as dps on dps.is_delete=0 and dps.product_id=dp.id
LEFT JOIN da_product_spec_term as dpst1 on dpst1.is_delete=0 and dpst1.product_spec_id =dps.id and dpst1.`name`=1
LEFT JOIN da_product_spec_term as dpst2 on dpst2.is_delete=0 and dpst2.product_spec_id =dps.id and dpst2.`name`=3
LEFT JOIN da_product_spec_term as dpst3 on dpst3.is_delete=0 and dpst3.product_spec_id =dps.id and dpst3.`name`=2
LEFT JOIN da_product_spec_term as dpst4 on dpst4.is_delete=0 and dpst4.product_spec_id =dps.id and dpst4.`name`=4
where dp.is_delete=0 and dp.`status`=1
</select>
</mapper>
Loading…
Cancel
Save