From 0f2374a3c1b7dd07abe94493042e455ab03ccd81 Mon Sep 17 00:00:00 2001 From: Derran Date: Wed, 20 Mar 2024 17:56:14 +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 --- .../MallServerApplicationService.java | 10 +++++ .../UserAcquireNewMIRightBySdkDto.java | 13 ++++++ .../right/constant/RightAcquireEnum.java | 36 ++++++++++++++++ .../domain/aggregate/right/entity/Right.java | 3 ++ .../right/valueobj/RightAcquireRecord.java | 40 +++++++++++++++++ .../user/RightUserCommandController.java | 10 +++++ .../UserAcquireNewMIRightBySdkDto.java | 18 ++++++++ .../right/RightApplicationService.java | 43 ++++++++++++++++++- .../aggregate/right/RightAggregate.java | 5 +++ .../dao/domain/RightAcquireRecordDao.java | 7 +++ .../repository/impl/RightRepositoryImpl.java | 8 ++++ 11 files changed, 191 insertions(+), 2 deletions(-) create mode 100644 dating-agency-mal-sdk/src/main/java/com/qniao/dam/application/request/UserAcquireNewMIRightBySdkDto.java create mode 100644 dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/right/constant/RightAcquireEnum.java create mode 100644 dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/right/valueobj/RightAcquireRecord.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/request/UserAcquireNewMIRightBySdkDto.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/RightAcquireRecordDao.java diff --git a/dating-agency-mal-sdk/src/main/java/com/qniao/dam/application/MallServerApplicationService.java b/dating-agency-mal-sdk/src/main/java/com/qniao/dam/application/MallServerApplicationService.java index 596d903..f398a0d 100644 --- a/dating-agency-mal-sdk/src/main/java/com/qniao/dam/application/MallServerApplicationService.java +++ b/dating-agency-mal-sdk/src/main/java/com/qniao/dam/application/MallServerApplicationService.java @@ -1,5 +1,6 @@ package com.qniao.dam.application; +import com.qniao.dam.application.request.UserAcquireNewMIRightBySdkDto; import com.qniao.dam.application.request.UserCheckEnableRightBySdkQueryParam; import com.qniao.dam.application.request.UserConsumeRightBySdkDto; import com.qniao.dam.application.request.UserSendBackBightBySdkDto; @@ -10,6 +11,8 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import javax.validation.Valid; + @FeignClient("eureka-client-dating-agency-mall") @RequestMapping("dating-agency-mall") public interface MallServerApplicationService { @@ -33,4 +36,11 @@ public interface MallServerApplicationService { @PostMapping("/user/send-back/right/by/sdk") void userSendBackRightBySdk(@RequestBody UserSendBackBightBySdkDto dto); + + /** + * 新用户获取赠送的权益 + */ + @PostMapping("/user/acquire/new-mi-right/by/sdk") + void userAcquireNewMIRight(@RequestBody @Valid UserAcquireNewMIRightBySdkDto dto); + } diff --git a/dating-agency-mal-sdk/src/main/java/com/qniao/dam/application/request/UserAcquireNewMIRightBySdkDto.java b/dating-agency-mal-sdk/src/main/java/com/qniao/dam/application/request/UserAcquireNewMIRightBySdkDto.java new file mode 100644 index 0000000..31a6a2f --- /dev/null +++ b/dating-agency-mal-sdk/src/main/java/com/qniao/dam/application/request/UserAcquireNewMIRightBySdkDto.java @@ -0,0 +1,13 @@ +package com.qniao.dam.application.request; + +import lombok.Data; + +import javax.validation.constraints.NotNull; + +@Data +public class UserAcquireNewMIRightBySdkDto { + + private Long userId; + + private Long miId; +} diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/right/constant/RightAcquireEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/right/constant/RightAcquireEnum.java new file mode 100644 index 0000000..e770591 --- /dev/null +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/right/constant/RightAcquireEnum.java @@ -0,0 +1,36 @@ +package com.qniao.dam.domian.aggregate.right.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 RightAcquireEnum { + + GIFT(1, "赠送"), + + PURCHASE(2, "购买"); + + @EnumValue + @JsonValue + private final Integer value; + private final String desc; + + RightAcquireEnum(Integer value, String desc) { + this.value = value; + this.desc = desc; + } + + @JsonCreator + public static RightAcquireEnum get(Object code) { + for (RightAcquireEnum e : RightAcquireEnum.values()) { + if (e.getValue().equals(code)) { + return e; + } + } + return null; + } +} \ No newline at end of file diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/right/entity/Right.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/right/entity/Right.java index 68457e9..8a44be6 100644 --- a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/right/entity/Right.java +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/right/entity/Right.java @@ -1,6 +1,7 @@ package com.qniao.dam.domain.aggregate.right.entity; import com.baomidou.mybatisplus.annotation.TableName; +import com.qniao.dam.domain.aggregate.right.valueobj.RightAcquireRecord; import com.qniao.dam.domian.aggregate.right.constant.RightTypeEnum; import com.qniao.domain.Entity; import io.swagger.annotations.ApiModelProperty; @@ -38,4 +39,6 @@ public class Right extends Entity { private transient List insertRightTermList; private transient List updateRightTermList; private transient List deleteRightTermList; + + private transient RightAcquireRecord rightAcquireRecord; } diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/right/valueobj/RightAcquireRecord.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/right/valueobj/RightAcquireRecord.java new file mode 100644 index 0000000..c3920b9 --- /dev/null +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/right/valueobj/RightAcquireRecord.java @@ -0,0 +1,40 @@ +package com.qniao.dam.domain.aggregate.right.valueobj; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.qniao.dam.domain.aggregate.right.entity.Right; +import com.qniao.dam.domian.aggregate.right.constant.RightAcquireEnum; +import com.qniao.dam.domian.aggregate.right.constant.RightTypeEnum; +import com.qniao.domain.ValueObject; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("da_right_term") +public class RightAcquireRecord extends ValueObject { + + @ApiModelProperty("用户标识") + private Long userId; + + @ApiModelProperty("征婚资料标识") + private Long miId; + + @ApiModelProperty("权益标识") + private Long rightId; + + @ApiModelProperty("权益类型") + private RightTypeEnum rightType; + + @ApiModelProperty("获取方式") + private RightAcquireEnum acquireType; + + public static RightAcquireRecord build(Right right, RightAcquireEnum acquireType) { + RightAcquireRecord rightAcquireRecord = new RightAcquireRecord(); + rightAcquireRecord.setUserId(right.getUserId()); + rightAcquireRecord.setMiId(right.getMiId()); + rightAcquireRecord.setRightType(right.getType()); + rightAcquireRecord.setAcquireType(acquireType); + return rightAcquireRecord; + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/RightUserCommandController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/RightUserCommandController.java index f7a78b0..d2318a5 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/RightUserCommandController.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/RightUserCommandController.java @@ -1,5 +1,6 @@ package com.qniao.dam.api.command.right.user; +import com.qniao.dam.api.command.right.user.request.UserAcquireNewMIRightBySdkDto; import com.qniao.dam.api.command.right.user.request.UserConsumeRightBySdkDto; import com.qniao.dam.api.command.right.user.request.UserSendBackBightBySdkDto; import com.qniao.dam.api.command.right.user.respose.UserConsumeRightBySdkVo; @@ -33,4 +34,13 @@ public class RightUserCommandController { public void userSendBackRightBySdk(@RequestBody @Valid UserSendBackBightBySdkDto dto) { rightApplicationService.sendBackRight(dto.getAssociatedId()); } + + /** + * 新用户首次送头像修改权益 + */ + @ApiOperation("新用户获取赠送的权益") + @PostMapping("acquire/new-mi-right/by/sdk") + public void userAcquireNewMIRight(@RequestBody @Valid UserAcquireNewMIRightBySdkDto dto) { + rightApplicationService.acquireNewMIRight(dto.getUserId(), dto.getMiId()); + } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/request/UserAcquireNewMIRightBySdkDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/request/UserAcquireNewMIRightBySdkDto.java new file mode 100644 index 0000000..59eecb4 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/request/UserAcquireNewMIRightBySdkDto.java @@ -0,0 +1,18 @@ +package com.qniao.dam.api.command.right.user.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +@Data +public class UserAcquireNewMIRightBySdkDto { + + @ApiModelProperty("用户标识") + @NotNull(message = "用户标识不能为空") + private Long userId; + + @ApiModelProperty("征婚资料标识") + @NotNull(message = "征婚资料标识不能为空") + private Long miId; +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/right/RightApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/right/RightApplicationService.java index 3cf4a1a..b181752 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/right/RightApplicationService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/right/RightApplicationService.java @@ -3,21 +3,25 @@ package com.qniao.dam.application.service.right; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Tuple; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.api.R; import com.qniao.dam.api.command.right.user.request.UserConsumeRightBySdkDto; import com.qniao.dam.api.command.right.user.respose.UserConsumeRightBySdkVo; import com.qniao.dam.domain.aggregate.order.entity.Order; 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.domain.aggregate.right.RightAggregate; import com.qniao.dam.domain.aggregate.right.entity.Right; import com.qniao.dam.domain.aggregate.right.entity.RightTerm; import com.qniao.dam.domain.aggregate.right.repository.RightRepository; +import com.qniao.dam.domain.aggregate.right.valueobj.RightAcquireRecord; import com.qniao.dam.domain.aggregate.rightconsumerel.entity.RightConsumeRel; import com.qniao.dam.domain.service.right.ConsumeRightDomainService; import com.qniao.dam.domain.service.right.ReturnRightDomainService; import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; import com.qniao.dam.domian.aggregate.productspec.constant.ProductSpecTermNameEnum; import com.qniao.dam.domian.aggregate.productspec.constant.ProductSpecTermUnitEnum; +import com.qniao.dam.domian.aggregate.right.constant.RightAcquireEnum; import com.qniao.dam.domian.aggregate.right.constant.RightNameEnum; import com.qniao.dam.domian.aggregate.right.constant.RightTypeEnum; import com.qniao.dam.domian.aggregate.right.constant.RightUnitEnum; @@ -50,6 +54,8 @@ public class RightApplicationService { private RightConsumeRelQueryService rightConsumeRelQueryService; @Resource private RightRepository rightRepository; + @Resource + private RightAggregate rightAggregate; /** * 权益基本信息组织 @@ -114,6 +120,9 @@ public class RightApplicationService { rightTermList.add(dailyUseLimitRightTerm); } right.setRightTermList(rightTermList); + //权益获得记录 + RightAcquireRecord rightAcquireRecord = RightAcquireRecord.build(right, RightAcquireEnum.PURCHASE); + right.setRightAcquireRecord(rightAcquireRecord); if (Objects.isNull(right.getId())) { //新建 right.setInsertRightTermList(right.getRightTermList()); @@ -208,7 +217,7 @@ public class RightApplicationService { //判断权益是否失效 if (rightQueryService.checkEnable(right)) { right.setEnable(true); - }else{ + } else { right.setEnable(false); } right.setUpdateRightTermList(right.getRightTermList()); @@ -244,11 +253,41 @@ public class RightApplicationService { //判断权益是否失效 if (rightQueryService.checkEnable(right)) { right.setEnable(true); - }else{ + } else { right.setEnable(false); } right.setUpdateRightTermList(right.getRightTermList()); returnRightDomainService.handle(right, rightConsumeRel); } + + /** + * 新用户首次送头像修改权益 todo 配置化 + */ + public void acquireNewMIRight(Long userId, Long miId) { + //赠送头像权益 + Right right = new Right(); + right.setUserId(userId); + right.setMiId(miId); + right.setType(RightTypeEnum.PROFILE_MODIFICATION); + right.setStartTime(LocalDateTime.now()); + right.setEndTime(right.getStartTime().plusMonths(1)); + //组装权益条款 + //权益条款 + List rightTermList = new ArrayList<>(); + //规格 周期、次数 + RightTerm specRightTerm = RightTerm.build(RightNameEnum.SPEC, RightUnitEnum.SPEC_TIME, null); + rightTermList.add(specRightTerm); + //条数 + RightTerm rightLimitRightTerm = RightTerm.build(RightNameEnum.RIGHT_LIMIT, RightUnitEnum.COUNT, "1"); + rightTermList.add(rightLimitRightTerm); + RightTerm rightCountRightTerm = RightTerm.build(RightNameEnum.RIGHT_COUNT, RightUnitEnum.COUNT, "1"); + rightTermList.add(rightCountRightTerm); + right.setRightTermList(rightTermList); + right.setInsertRightTermList(rightTermList); + //权益获得记录 + RightAcquireRecord rightAcquireRecord = RightAcquireRecord.build(right, RightAcquireEnum.GIFT); + right.setRightAcquireRecord(rightAcquireRecord); + rightAggregate.create(right); + } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/right/RightAggregate.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/right/RightAggregate.java index 3e4e58a..17b986e 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/right/RightAggregate.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/right/RightAggregate.java @@ -12,6 +12,10 @@ public class RightAggregate { @Resource private RightRepository rightRepository; + public void create(Right right) { + rightRepository.save(right); + } + public void save(Right right) { rightRepository.save(right); } @@ -23,4 +27,5 @@ public class RightAggregate { public void sendBack(Right right) { rightRepository.save(right); } + } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/RightAcquireRecordDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/RightAcquireRecordDao.java new file mode 100644 index 0000000..4b84c4c --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/RightAcquireRecordDao.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.right.valueobj.RightAcquireRecord; + +public interface RightAcquireRecordDao extends BaseMapper { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/RightRepositoryImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/RightRepositoryImpl.java index 37b6a01..7a2f175 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/RightRepositoryImpl.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/RightRepositoryImpl.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.qniao.dam.domain.aggregate.right.entity.Right; import com.qniao.dam.domain.aggregate.right.entity.RightTerm; import com.qniao.dam.domain.aggregate.right.repository.RightRepository; +import com.qniao.dam.infrastructure.persistent.dao.domain.RightAcquireRecordDao; import com.qniao.dam.infrastructure.persistent.dao.domain.RightDao; import com.qniao.dam.infrastructure.persistent.dao.domain.RightTermDao; import org.springframework.stereotype.Service; @@ -22,6 +23,9 @@ public class RightRepositoryImpl implements RightRepository { @Resource private RightTermDao rightTermDao; + @Resource + private RightAcquireRecordDao rightAcquireRecordDao; + @Override public Right load(Long id) { Right right = rightDao.selectById(id); @@ -55,6 +59,10 @@ public class RightRepositoryImpl implements RightRepository { if (CollUtil.isNotEmpty(entity.getDeleteRightTermList())) { rightTermDao.deleteBatchIds(entity.getDeleteRightTermList().stream().map(RightTerm::getId).collect(Collectors.toList())); } + if (Objects.nonNull(entity.getRightAcquireRecord())) { + entity.getRightAcquireRecord().setRightId(entity.getId()); + rightAcquireRecordDao.insert(entity.getRightAcquireRecord()); + } return entity.getId(); } }