diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/prc/constant/PointRewardConfigAttributeEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/prc/constant/PointRewardConfigAttributeEnum.java new file mode 100644 index 0000000..15cc5f3 --- /dev/null +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/prc/constant/PointRewardConfigAttributeEnum.java @@ -0,0 +1,37 @@ +package com.qniao.dam.domian.aggregate.prc.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 PointRewardConfigAttributeEnum { + + NUM(1, "数值"), + + PERCENT(2, "百分比"); + + @EnumValue + @JsonValue + private final Integer value; + private final String desc; + + PointRewardConfigAttributeEnum(Integer value, String desc) { + this.value = value; + this.desc = desc; + } + + @JsonCreator + public static PointRewardConfigAttributeEnum get(Object code) { + for (PointRewardConfigAttributeEnum e : PointRewardConfigAttributeEnum.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/prc/constant/PointRewardConfigTypeEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/prc/constant/PointRewardConfigTypeEnum.java new file mode 100644 index 0000000..094d0af --- /dev/null +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/prc/constant/PointRewardConfigTypeEnum.java @@ -0,0 +1,49 @@ +package com.qniao.dam.domian.aggregate.prc.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 PointRewardConfigTypeEnum { + + INVITE_MATCHMAKER(1, "邀请红娘加盟"), + + INVITE_REGISTER(2, "邀请嘉宾注册"), + + INVITE_UPLOAD_PROFILE_PHOTO(3, "邀请嘉宾上传头像"), + + INVITE_AUTHENTICATION(4, "邀请嘉宾实名认证"), + + INVITE_BOUNTY(5, "邀请嘉宾发布悬赏"), + + COMPLETE_BOUNTY_AUTHENTICATION(6,"完成榜单悬赏注册"), + + COMPLETE_BOUNTY_PUBLISH(7,"完成榜单悬赏发布"), + + COMPLETE_BOUNTY_MATCH(8,"完成榜单悬赏匹配"); + + @EnumValue + @JsonValue + private final Integer value; + private final String desc; + + PointRewardConfigTypeEnum(Integer value, String desc) { + this.value = value; + this.desc = desc; + } + + @JsonCreator + public static PointRewardConfigTypeEnum get(Object code) { + for (PointRewardConfigTypeEnum e : PointRewardConfigTypeEnum.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 index e63ee3d..dc6f3f0 100644 --- 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 @@ -44,8 +44,9 @@ public enum ProductSubCategoryEnum { MATCHMAKER_FRANCHISE_FEE(88801, "红娘合伙人加盟费"), - MATCHMAKER_ONLINE_FEE(88802, "线上红娘加盟费"); + MATCHMAKER_ONLINE_FEE(88802, "线上红娘加盟费"), + MATCHMAKER_TRAINEE_FEE(88803, "实习红娘加盟费"); @EnumValue @JsonValue diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java index 6ee9de1..905eaa8 100644 --- a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java @@ -38,6 +38,17 @@ public enum RewardTypeEnum { MATCHMAKER_JOIN_RECOMMEND_BY_ONLINE(114, "红娘入驻推荐红娘奖励"), + /** + * 实习红娘 + */ + GUEST_CERTIFICATION_BY_TRAINEE(115, "嘉宾实名认证"), + + PUBLISH_MARRIAGE_BOUNTY_BY_TRAINEE(116, "发布悬赏招亲"), + + MATCH_MARRIAGE_BOUNTY_BY_TRAINEE(117, "匹配悬赏招亲"), + + MATCHMAKER_JOIN_RECOMMEND_BY_TRAINEE(118, "红娘入驻推荐红娘奖励"), + /** * 红娘入驻推荐奖励 */ diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/pointaccount/entity/PointAccount.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/pointaccount/entity/PointAccount.java new file mode 100644 index 0000000..8d061c6 --- /dev/null +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/pointaccount/entity/PointAccount.java @@ -0,0 +1,51 @@ +package com.qniao.dam.domain.aggregate.pointaccount.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.qniao.domain.Entity; + +import java.util.List; + +/** + * 积分账号 + * + * @date 2024/12/23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("da_point_account") +public class PointAccount extends Entity { + + @ApiModelProperty("用户唯一标识") + private Long userId; + + @ApiModelProperty("组织唯一标识") + private Long orgId; + + @ApiModelProperty("身份类型(个人、组织)") + private IdentityTypeEnum identityType; + + @ApiModelProperty("积分") + private Integer points; + + private transient List recordList; + + public static PointAccount initUser(Long userId) { + PointAccount pointAccount = new PointAccount(); + pointAccount.setUserId(userId); + pointAccount.setIdentityType(IdentityTypeEnum.INDIVIDUAL); + pointAccount.setPoints(0); + return pointAccount; + } + + public static PointAccount initOrg(Long orgId) { + PointAccount pointAccount = new PointAccount(); + pointAccount.setOrgId(orgId); + pointAccount.setIdentityType(IdentityTypeEnum.ORGANIZATION); + pointAccount.setPoints(0); + return pointAccount; + } +} diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/pointaccount/entity/PointAccountRecord.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/pointaccount/entity/PointAccountRecord.java new file mode 100644 index 0000000..7af6867 --- /dev/null +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/pointaccount/entity/PointAccountRecord.java @@ -0,0 +1,48 @@ +package com.qniao.dam.domain.aggregate.pointaccount.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.qniao.dam.domian.aggregate.prc.constant.PointRewardConfigTypeEnum; +import com.qniao.domain.Entity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 积分账户记录 + * + * @date 2024/12/23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("da_point_account_record") +public class PointAccountRecord extends Entity { + + @ApiModelProperty("积分账号标识") + private Long pointAccountId; + + @ApiModelProperty("积分类型") + private PointRewardConfigTypeEnum pointType; + + @ApiModelProperty("内容") + private String content; + + @ApiModelProperty("积分") + private Integer points; + + @ApiModelProperty("是否收入") + private Boolean isIncome; + + @ApiModelProperty("原始积分") + private Integer originalPoints; + + @ApiModelProperty("当前积分") + private Integer currentPoints; + + @ApiModelProperty("关联ID") + private Long associateId; + + @ApiModelProperty("是否已读") + private Boolean isRead; + + +} diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/prc/entity/PointRewardConfig.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/prc/entity/PointRewardConfig.java new file mode 100644 index 0000000..9d70e87 --- /dev/null +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/prc/entity/PointRewardConfig.java @@ -0,0 +1,48 @@ +package com.qniao.dam.domain.aggregate.prc.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.qniao.dam.domian.aggregate.prc.constant.PointRewardConfigAttributeEnum; +import com.qniao.dam.domian.aggregate.prc.constant.PointRewardConfigTypeEnum; +import com.qniao.dam.domian.aggregate.rewardconfig.constant.RewardAmountUnitEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.qniao.domain.Entity; + +import java.math.BigDecimal; +import java.math.RoundingMode; + +/** + * 积分奖励配置 + * + * @date 2024/12/23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("da_point_reward_config") +public class PointRewardConfig extends Entity { + + @ApiModelProperty("类型") + private PointRewardConfigTypeEnum type; + + @ApiModelProperty("属性") + private PointRewardConfigAttributeEnum attribute; + + @ApiModelProperty("数量") + private String num; + + @ApiModelProperty("启用状态") + private Boolean enable; + + @ApiModelProperty("备注") + private String remark; + + + public Integer calculateReward(BigDecimal amount) { + if (PointRewardConfigAttributeEnum.NUM.equals(attribute)) { + return Integer.valueOf(num); + } else { + return amount.multiply(new BigDecimal(num)).divide(BigDecimal.valueOf(100), 0, RoundingMode.HALF_UP).intValue(); + } + } +} diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/rewardconfig/entity/RewardConfig.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/rewardconfig/entity/RewardConfig.java index 7b58d9f..4d6c1d1 100644 --- a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/rewardconfig/entity/RewardConfig.java +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/rewardconfig/entity/RewardConfig.java @@ -32,6 +32,8 @@ public class RewardConfig extends Entity { return RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND; } else if (ProductSubCategoryEnum.MATCHMAKER_ONLINE_FEE.equals(type)) { return RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND_BY_ONLINE; + } else if (ProductSubCategoryEnum.MATCHMAKER_TRAINEE_FEE.equals(type)) { + return RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND_BY_TRAINEE; } return null; } diff --git a/dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/pointaccount/event/PointRewardCreatedMQ.java b/dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/pointaccount/event/PointRewardCreatedMQ.java new file mode 100644 index 0000000..e59ed16 --- /dev/null +++ b/dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/pointaccount/event/PointRewardCreatedMQ.java @@ -0,0 +1,34 @@ +package com.qniao.dam.domian.aggregate.pointaccount.event; + +import com.qniao.dam.domian.aggregate.prc.constant.PointRewardConfigTypeEnum; +import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +public class PointRewardCreatedMQ implements Serializable { + + @ApiModelProperty("用户唯一标识") + private Long ownId; + + @ApiModelProperty("身份类型(个人、组织)") + private IdentityTypeEnum identityType; + + @ApiModelProperty("积分类型") + private PointRewardConfigTypeEnum pointType; + + @ApiModelProperty("内容") + private String content; + + @ApiModelProperty("是否收入") + private Boolean isIncome; + + @ApiModelProperty("关联ID") + private Long associateId; + + @ApiModelProperty("金额") + private BigDecimal amount; +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/prc/user/PointRewardConfigUserCommandController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/prc/user/PointRewardConfigUserCommandController.java new file mode 100644 index 0000000..62fb37c --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/prc/user/PointRewardConfigUserCommandController.java @@ -0,0 +1,47 @@ +package com.qniao.dam.api.command.prc.user; + +import com.qniao.dam.api.command.prc.user.request.*; +import com.qniao.dam.application.service.prc.PointRewardConfigApplicationService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; + +@Api(tags = "积分奖励配置") +@RestController +@RequestMapping("user") +public class PointRewardConfigUserCommandController { + + @Resource + private PointRewardConfigApplicationService pointRewardConfigApplicationService; + + @ApiOperation("用户创建积分奖励配置") + @PostMapping("create/point-reward-config") + public void userCreatePointRewardConfig(@RequestBody @Valid UserCreatePointRewardConfigDto dto, + @RequestParam("userId") Long userId) { + pointRewardConfigApplicationService.create(dto.trans2Domain()); + } + + @ApiOperation("用户编辑积分奖励配置") + @PostMapping("edit/point-reward-config") + public void userEditPointRewardConfig(@RequestBody @Valid UserEditPointRewardConfigDto dto, + @RequestParam("userId") Long userId) { + pointRewardConfigApplicationService.edit(dto.trans2Domain()); + } + + @ApiOperation("用户删除积分奖励配置") + @PostMapping("delete/point-reward-config") + public void userDeletePointRewardConfig(@RequestBody @Valid UserDeletePointRewardConfigDto dto, + @RequestParam("userId") Long userId) { + pointRewardConfigApplicationService.delete(dto.getId()); + } + + @ApiOperation("用户启停积分奖励配置") + @PostMapping("enable/point-reward-config") + public void userEnablePointRewardConfig(@RequestBody @Valid UserEnablePointRewardConfigDto dto, + @RequestParam("userId") Long userId) { + pointRewardConfigApplicationService.enable(dto.getId()); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/prc/user/request/UserCreatePointRewardConfigDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/prc/user/request/UserCreatePointRewardConfigDto.java new file mode 100644 index 0000000..9ee3b7b --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/prc/user/request/UserCreatePointRewardConfigDto.java @@ -0,0 +1,30 @@ +package com.qniao.dam.api.command.prc.user.request; + +import com.qniao.dam.domain.aggregate.prc.entity.PointRewardConfig; +import com.qniao.dam.domian.aggregate.prc.constant.PointRewardConfigAttributeEnum; +import com.qniao.dam.domian.aggregate.prc.constant.PointRewardConfigTypeEnum; +import com.qniao.domain.Trans2DomainAssembler; +import io.swagger.annotations.ApiModelProperty; +import com.qniao.framework.utils.TypeConvertUtils; +import lombok.Data; + +@Data +public class UserCreatePointRewardConfigDto implements Trans2DomainAssembler { + + @ApiModelProperty("类型") + private PointRewardConfigTypeEnum type; + + @ApiModelProperty("属性") + private PointRewardConfigAttributeEnum attribute; + + @ApiModelProperty("数量") + private String num; + + @ApiModelProperty("备注") + private String remark; + + @Override + public PointRewardConfig trans2Domain() { + return TypeConvertUtils.convert(this, PointRewardConfig.class); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/prc/user/request/UserDeletePointRewardConfigDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/prc/user/request/UserDeletePointRewardConfigDto.java new file mode 100644 index 0000000..58a6396 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/prc/user/request/UserDeletePointRewardConfigDto.java @@ -0,0 +1,12 @@ +package com.qniao.dam.api.command.prc.user.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class UserDeletePointRewardConfigDto { + + @ApiModelProperty("唯一标识") + private Long id; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/prc/user/request/UserEditPointRewardConfigDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/prc/user/request/UserEditPointRewardConfigDto.java new file mode 100644 index 0000000..61e5cf3 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/prc/user/request/UserEditPointRewardConfigDto.java @@ -0,0 +1,33 @@ +package com.qniao.dam.api.command.prc.user.request; + +import com.qniao.dam.domain.aggregate.prc.entity.PointRewardConfig; +import com.qniao.dam.domian.aggregate.prc.constant.PointRewardConfigAttributeEnum; +import com.qniao.dam.domian.aggregate.prc.constant.PointRewardConfigTypeEnum; +import com.qniao.domain.Trans2DomainAssembler; +import io.swagger.annotations.ApiModelProperty; +import com.qniao.framework.utils.TypeConvertUtils; +import lombok.Data; + +@Data +public class UserEditPointRewardConfigDto implements Trans2DomainAssembler { + + @ApiModelProperty("唯一标识") + private Long id; + + @ApiModelProperty("类型") + private PointRewardConfigTypeEnum type; + + @ApiModelProperty("属性") + private PointRewardConfigAttributeEnum attribute; + + @ApiModelProperty("数量") + private String num; + + @ApiModelProperty("备注") + private String remark; + + @Override + public PointRewardConfig trans2Domain() { + return TypeConvertUtils.convert(this, PointRewardConfig.class); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/prc/user/request/UserEnablePointRewardConfigDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/prc/user/request/UserEnablePointRewardConfigDto.java new file mode 100644 index 0000000..34a3464 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/prc/user/request/UserEnablePointRewardConfigDto.java @@ -0,0 +1,11 @@ +package com.qniao.dam.api.command.prc.user.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class UserEnablePointRewardConfigDto { + + @ApiModelProperty("唯一标识") + private Long id; +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/pointaccount/user/PointAccountUserQueryController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/pointaccount/user/PointAccountUserQueryController.java new file mode 100644 index 0000000..90394f2 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/pointaccount/user/PointAccountUserQueryController.java @@ -0,0 +1,54 @@ +package com.qniao.dam.api.query.pointaccount.user; + +import com.qniao.dam.api.query.pointaccount.user.request.PagePointAccountRecordQueryParams; +import com.qniao.dam.api.query.pointaccount.user.response.GetUnreadPointAccountRecordVo; +import com.qniao.dam.api.query.pointaccount.user.response.PagePointAccountRecordVo; +import com.qniao.dam.api.query.pointaccount.user.response.PointAccountVo; +import com.qniao.dam.domain.aggregate.pointaccount.entity.PointAccount; +import com.qniao.dam.query.pointaccount.PointAccountQueryService; +import com.qniao.domain.QnPage; +import com.qniao.framework.utils.PageUtil; +import com.qniao.framework.utils.TypeConvertUtils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.Objects; + +@Api(tags = "积分账号") +@RestController +@RequestMapping("user") +public class PointAccountUserQueryController { + + @Resource + private PointAccountQueryService pointAccountQueryService; + + @GetMapping("get/point-account") + @ApiOperation("用户获取积分账号") + public PointAccountVo userGetPointAccount(@RequestParam("userId") Long userId) { + PointAccount pointAccount = pointAccountQueryService.queryByUserId(userId); + return TypeConvertUtils.convert(pointAccount, PointAccountVo.class); + } + + @GetMapping("page/point-account-record") + @ApiOperation("用户获取积分账号记录分页") + public QnPage userPagePointAccountRecord(PageUtil pageUtil, + @Validated PagePointAccountRecordQueryParams queryParams, + @RequestParam("userId") Long userId) { + if (Objects.isNull(queryParams.getQueryUserId())) { + queryParams.setQueryUserId(userId); + } + return PageUtil.convert(pointAccountQueryService.pagePointAccountRecord(queryParams, pageUtil), PagePointAccountRecordVo.class); + } + + @GetMapping("get/unread-point-account-record") + @ApiOperation("用户获取未读积分账号记录") + public GetUnreadPointAccountRecordVo userGetUnreadPointAccountRecord(@RequestParam("userId") Long userId) { + return pointAccountQueryService.getUnreadPointAccountRecord(userId); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/pointaccount/user/request/PagePointAccountRecordQueryParams.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/pointaccount/user/request/PagePointAccountRecordQueryParams.java new file mode 100644 index 0000000..14abb76 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/pointaccount/user/request/PagePointAccountRecordQueryParams.java @@ -0,0 +1,12 @@ +package com.qniao.dam.api.query.pointaccount.user.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class PagePointAccountRecordQueryParams { + + @ApiModelProperty("制定查询的用户id") + private Long queryUserId; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/pointaccount/user/response/GetUnreadPointAccountRecordVo.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/pointaccount/user/response/GetUnreadPointAccountRecordVo.java new file mode 100644 index 0000000..aec834e --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/pointaccount/user/response/GetUnreadPointAccountRecordVo.java @@ -0,0 +1,32 @@ +package com.qniao.dam.api.query.pointaccount.user.response; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.qniao.dam.domian.aggregate.prc.constant.PointRewardConfigTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class GetUnreadPointAccountRecordVo { + + @ApiModelProperty("积分类型") + private PointRewardConfigTypeEnum pointType; + + @ApiModelProperty("内容") + private String content; + + @ApiModelProperty("积分") + private Integer points; + + @ApiModelProperty("是否收入") + private Boolean isIncome; + + @ApiModelProperty("当前积分") + private Integer currentPoints; + + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/pointaccount/user/response/PagePointAccountRecordVo.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/pointaccount/user/response/PagePointAccountRecordVo.java new file mode 100644 index 0000000..25929ed --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/pointaccount/user/response/PagePointAccountRecordVo.java @@ -0,0 +1,31 @@ +package com.qniao.dam.api.query.pointaccount.user.response; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.qniao.dam.domian.aggregate.prc.constant.PointRewardConfigTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class PagePointAccountRecordVo { + + @ApiModelProperty("积分类型") + private PointRewardConfigTypeEnum pointType; + + @ApiModelProperty("内容") + private String content; + + @ApiModelProperty("积分") + private Integer points; + + @ApiModelProperty("是否收入") + private Boolean isIncome; + + @ApiModelProperty("当前积分") + private Integer currentPoints; + + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/pointaccount/user/response/PointAccountVo.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/pointaccount/user/response/PointAccountVo.java new file mode 100644 index 0000000..756c5d6 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/pointaccount/user/response/PointAccountVo.java @@ -0,0 +1,24 @@ +package com.qniao.dam.api.query.pointaccount.user.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class PointAccountVo { + + private Long id; + + @ApiModelProperty("用户唯一标识") + private Long userId; + + @ApiModelProperty("组织唯一标识") + private Long orgId; + + @ApiModelProperty("身份类型(个人、组织)") + private Integer identityType; + + @ApiModelProperty("积分") + private Integer points; +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/prc/user/PointRewardConfigUserQueryController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/prc/user/PointRewardConfigUserQueryController.java new file mode 100644 index 0000000..cbd7a5d --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/prc/user/PointRewardConfigUserQueryController.java @@ -0,0 +1,36 @@ +package com.qniao.dam.api.query.prc.user; + +import com.qniao.dam.api.query.prc.user.request.UserPagePointRewardConfigQueryParams; +import com.qniao.dam.api.query.prc.user.response.UserPagePointRewardConfigVo; +import com.qniao.dam.query.prc.PointRewardConfigQueryService; +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; + +@Api(tags = "积分奖励配置") +@RestController +@RequestMapping("user") +public class PointRewardConfigUserQueryController { + + @Resource + private PointRewardConfigQueryService pointRewardConfigQueryService; + + @GetMapping("page/point-reward-config/by/operator") + @ApiOperation("运营获取积分奖励配置分页列表") + public QnPage userPagePointRewardConfigByOperator(PageUtil pageUtil, + UserPagePointRewardConfigQueryParams queryParams) { + return PageUtil.convert(pointRewardConfigQueryService.page(pageUtil, queryParams), UserPagePointRewardConfigVo.class); + } + + @GetMapping("page/point-reward-config/by/customer") + @ApiOperation("客户获取积分奖励配置分页列表") + public QnPage userPagePointRewardConfigByCustomer(PageUtil pageUtil, + UserPagePointRewardConfigQueryParams queryParams) { + queryParams.setEnable(true); + return PageUtil.convert(pointRewardConfigQueryService.page(pageUtil, queryParams), UserPagePointRewardConfigVo.class); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/prc/user/request/UserPagePointRewardConfigQueryParams.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/prc/user/request/UserPagePointRewardConfigQueryParams.java new file mode 100644 index 0000000..9b681c6 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/prc/user/request/UserPagePointRewardConfigQueryParams.java @@ -0,0 +1,10 @@ +package com.qniao.dam.api.query.prc.user.request; + +import lombok.Data; + +@Data +public class UserPagePointRewardConfigQueryParams { + + private Boolean enable; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/prc/user/response/UserPagePointRewardConfigVo.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/prc/user/response/UserPagePointRewardConfigVo.java new file mode 100644 index 0000000..e748048 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/prc/user/response/UserPagePointRewardConfigVo.java @@ -0,0 +1,31 @@ +package com.qniao.dam.api.query.prc.user.response; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.qniao.dam.domian.aggregate.prc.constant.PointRewardConfigAttributeEnum; +import com.qniao.dam.domian.aggregate.prc.constant.PointRewardConfigTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class UserPagePointRewardConfigVo { + + @ApiModelProperty("唯一标识") + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + @ApiModelProperty("类型") + private PointRewardConfigTypeEnum type; + + @ApiModelProperty("属性") + private PointRewardConfigAttributeEnum attribute; + + @ApiModelProperty("数量") + private String num; + + @ApiModelProperty("启用状态") + private Boolean enable; + + @ApiModelProperty("备注") + private String remark; +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/marriagebounty/MarriageBountyOrderEventHandle.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/marriagebounty/MarriageBountyOrderEventHandle.java index 23da7f2..760fddc 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/marriagebounty/MarriageBountyOrderEventHandle.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/marriagebounty/MarriageBountyOrderEventHandle.java @@ -15,11 +15,20 @@ import com.qniao.dam.domian.aggregate.marriagebounty.event.MarriageBountyOrderCo import com.qniao.dam.domian.aggregate.marriagebounty.event.MarriageBountyOrderConfirmedMeetingEvent; import com.qniao.dam.domian.aggregate.marriagebounty.event.MarriageBountyOrderCreatedEvent; import com.qniao.dam.domian.aggregate.marriagebounty.event.MarriageBountyOrderCreatedMQ; +import com.qniao.dam.domian.aggregate.paymentorderrefund.constant.PaymentOrderRefundStatusEnum; +import com.qniao.dam.domian.aggregate.pointaccount.event.PointRewardCreatedMQ; +import com.qniao.dam.domian.aggregate.prc.constant.PointRewardConfigTypeEnum; +import com.qniao.dam.domian.aggregate.rewardconfig.constant.RewardTypeEnum; +import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; import com.qniao.dam.infrastructure.constant.MqExchange; import com.qniao.dam.infrastructure.constant.MqQueue; import com.qniao.dam.infrastructure.persistent.dao.domain.MarriageBountyOrderDao; +import com.qniao.dam.infrastructure.persistent.dao.domain.MarriageInformationDao; +import com.qniao.dam.infrastructure.persistent.dao.domain.MatchmakerDao; import com.qniao.dam.query.marriagebounty.MarriageBountyOrderQueryService; +import com.qniao.das.domian.aggregate.marriageinformation.MarriageInformation; import com.qniao.das.domian.aggregate.marriageseekingreward.event.MatchSuccessfullyEvent; +import com.qniao.dau.domain.aggregate.matchmaker.entity.Matchmaker; import com.qniao.domain.BaseApplicationService; import com.qniao.framework.utils.TypeConvertUtils; import lombok.extern.slf4j.Slf4j; @@ -51,6 +60,10 @@ public class MarriageBountyOrderEventHandle extends BaseApplicationService { private MarriageBountyOrderDao marriageBountyOrderDao; @Resource private MarriageBountyOrderAggregate marriageBountyOrderAggregate; + @Resource + private MatchmakerDao matchmakerDao; + @Resource + private MarriageInformationDao marriageInformationDao; @Subscribe public void handle(MarriageBountyOrderCreatedEvent event) { @@ -64,6 +77,27 @@ public class MarriageBountyOrderEventHandle extends BaseApplicationService { } } + @Subscribe + public void handle2(MarriageBountyOrderCreatedEvent event) { + try { + MarriageInformation marriageInformation = marriageInformationDao.selectById(event.getMiId()); + MarriageBountyOrder marriageBountyOrder = marriageBountyOrderDao.selectById(event.getId()); + PointRewardCreatedMQ mq = new PointRewardCreatedMQ(); + Matchmaker matchmaker = matchmakerDao.selectById(event.getMatchmakerId()); + mq.setOwnId(matchmaker.getUserId()); + mq.setIdentityType(IdentityTypeEnum.INDIVIDUAL); + mq.setPointType(PointRewardConfigTypeEnum.INVITE_BOUNTY); + mq.setContent("邀请发榜:" + marriageInformation.getNickName() + "榜单"); + mq.setIsIncome(true); + mq.setAssociateId(event.getId()); + mq.setAmount(marriageBountyOrder.getPaidAmount()); + // 发送mq事件 + amqpTemplate.convertAndSend(MqExchange.POINT_REWARD_CREATED, null, mq); + } catch (Exception e) { + log.error("悬赏招亲订单已创建事件处理异常", e); + } + } + @Subscribe public void handle(MarriageBountyOrderConfirmedMeetingEvent event) { try { @@ -114,6 +148,35 @@ public class MarriageBountyOrderEventHandle extends BaseApplicationService { } } + @Subscribe + public void handle2(MarriageBountyOrderConfirmedMatchEvent event) { + try { + //红娘获取奖励 + if (Objects.nonNull(event.getMarriageBountyOrderRewardId()) && CollUtil.isNotEmpty(event.getRewardReceiveRecordList())) { + MarriageBountyOrder marriageBountyOrder = marriageBountyOrderDao.selectById(event.getId()); + for (MarriageBountyOrderConfirmedMatchEvent.MarriageBountyOrderRewardReceiveRecordEvent rewardReceiveRecordEvent : event.getRewardReceiveRecordList()) { + if (Objects.nonNull(rewardReceiveRecordEvent.getReceivedAmount()) && rewardReceiveRecordEvent.getReceivedAmount().compareTo(BigDecimal.ZERO) > 0) { + //处理积分奖励 + //积分奖励 + MarriageInformation marriageInformation = marriageInformationDao.selectById(marriageBountyOrder.getMiId()); + PointRewardCreatedMQ mq = new PointRewardCreatedMQ(); + mq.setOwnId(rewardReceiveRecordEvent.getReceiver()); + mq.setIdentityType(IdentityTypeEnum.INDIVIDUAL); + mq.setPointType(transformPointRewardConfigType(rewardReceiveRecordEvent.getRewardType())); + mq.setContent("完成榜单:" + marriageInformation.getNickName() + "榜单"); + mq.setIsIncome(true); + mq.setAssociateId(event.getId()); + mq.setAmount(rewardReceiveRecordEvent.getReceivedAmount()); + // 发送mq事件 + amqpTemplate.convertAndSend(MqExchange.POINT_REWARD_CREATED, null, mq); + } + } + + } + } catch (Exception e) { + log.error("悬赏招亲订单确认匹配事件处理异常", e); + } + } @RabbitListener(bindings = @QueueBinding(value = @Queue(MqQueue.REWARD_SELECTED_GUEST), exchange = @Exchange(value = MqExchange.REWARD_SELECTED_GUEST, @@ -142,4 +205,27 @@ public class MarriageBountyOrderEventHandle extends BaseApplicationService { log.error("悬赏招亲匹配成功处理异常", e); } } + + public PointRewardConfigTypeEnum transformPointRewardConfigType(RewardTypeEnum rewardType) { + PointRewardConfigTypeEnum pointRewardConfigType = null; + switch (rewardType) { + case GUEST_CERTIFICATION: + case GUEST_CERTIFICATION_BY_ONLINE: + case GUEST_CERTIFICATION_BY_TRAINEE: + pointRewardConfigType = PointRewardConfigTypeEnum.COMPLETE_BOUNTY_AUTHENTICATION; + break; + case PUBLISH_MARRIAGE_BOUNTY: + case PUBLISH_MARRIAGE_BOUNTY_BY_ONLINE: + case PUBLISH_MARRIAGE_BOUNTY_BY_TRAINEE: + pointRewardConfigType = PointRewardConfigTypeEnum.COMPLETE_BOUNTY_PUBLISH; + break; + case MATCH_MARRIAGE_BOUNTY: + case MATCH_MARRIAGE_BOUNTY_BY_ONLINE: + case MATCH_MARRIAGE_BOUNTY_BY_TRAINEE: + pointRewardConfigType = PointRewardConfigTypeEnum.COMPLETE_BOUNTY_MATCH; + break; + default: + } + return pointRewardConfigType; + } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/pointaccount/PointAccountEventHandler.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/pointaccount/PointAccountEventHandler.java new file mode 100644 index 0000000..608f7b8 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/pointaccount/PointAccountEventHandler.java @@ -0,0 +1,60 @@ +package com.qniao.dam.application.handler.pointaccount; + +import com.qniao.dam.domain.aggregate.pointaccount.PointAccountAggregate; +import com.qniao.dam.domain.aggregate.pointaccount.entity.PointAccount; +import com.qniao.dam.domain.aggregate.pointaccount.entity.PointAccountRecord; +import com.qniao.dam.domain.aggregate.prc.entity.PointRewardConfig; +import com.qniao.dam.domian.aggregate.pointaccount.event.PointRewardCreatedMQ; +import com.qniao.dam.infrastructure.constant.MqExchange; +import com.qniao.dam.infrastructure.constant.MqQueue; +import com.qniao.dam.query.pointaccount.PointAccountQueryService; +import com.qniao.dam.query.prc.PointRewardConfigQueryService; +import com.qniao.domain.BaseApplicationService; +import com.qniao.framework.utils.TypeConvertUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.ExchangeTypes; +import org.springframework.amqp.rabbit.annotation.Exchange; +import org.springframework.amqp.rabbit.annotation.Queue; +import org.springframework.amqp.rabbit.annotation.QueueBinding; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.Collections; +import java.util.Objects; + +@Component +@Slf4j +public class PointAccountEventHandler extends BaseApplicationService { + + @Resource + private PointAccountQueryService pointAccountQueryService; + @Resource + private PointRewardConfigQueryService pointRewardConfigQueryService; + @Resource + private PointAccountAggregate pointAccountAggregate; + + @RabbitListener(bindings = @QueueBinding(value = @Queue(MqQueue.POINT_REWARD_CREATED), + exchange = @Exchange(value = MqExchange.POINT_REWARD_CREATED, + type = ExchangeTypes.FANOUT))) + public void handle(PointRewardCreatedMQ mq) { + try { + PointAccount pointAccount = pointAccountQueryService.queryByType(mq.getOwnId(), mq.getIdentityType()); + //积分计算 + PointRewardConfig pointRewardConfig = pointRewardConfigQueryService.queryEnableByType(mq.getPointType()); + if (Objects.nonNull(pointRewardConfig)) { + Integer points = pointRewardConfig.calculateReward(mq.getAmount()); + PointAccountRecord pointAccountRecord = TypeConvertUtils.convert(mq, PointAccountRecord.class); + pointAccountRecord.setPoints(points); + pointAccountRecord.setOriginalPoints(pointAccount.getPoints()); + pointAccount.setPoints(pointAccount.getPoints() + points); + pointAccountRecord.setCurrentPoints(pointAccount.getPoints()); + pointAccount.setRecordList(Collections.singletonList(pointAccountRecord)); + pointAccountAggregate.edit(pointAccount); + } + } catch (Exception e) { + log.error("积分奖励创建事件处理异常", e); + } + } + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java index 4f0e959..6d78dd0 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java @@ -525,7 +525,7 @@ public class OrderApplicationService extends BaseApplicationService { RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_UPGRADE_PROTECTION_PERIOD); if (Objects.nonNull(rewardConfig)) { //仍在保护期内则红娘升级补充差价 - if (LocalDateTime.now().isBefore(rewardConfig.getPeriodTime(matchmaker.getCreateTime()))) { + if (LocalDateTime.now().isBefore(rewardConfig.getPeriodTime(matchmaker.getEffectiveTime()))) { discountAmount = matchmaker.getFranchiseFee(); } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/pointaccount/PointAccountApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/pointaccount/PointAccountApplicationService.java new file mode 100644 index 0000000..bf1cffc --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/pointaccount/PointAccountApplicationService.java @@ -0,0 +1,26 @@ +package com.qniao.dam.application.service.pointaccount; + +import com.qniao.dam.domain.aggregate.pointaccount.PointAccountAggregate; +import com.qniao.dam.domain.aggregate.pointaccount.entity.PointAccount; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +public class PointAccountApplicationService { + + @Resource + private PointAccountAggregate pointAccountAggregate; + + public void create(PointAccount pointAccount) { + pointAccountAggregate.create(pointAccount); + } + + public void edit(PointAccount pointAccount) { + pointAccountAggregate.edit(pointAccount); + } + + public void delete(Long id) { + pointAccountAggregate.delete(id); + } +} \ No newline at end of file diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/prc/PointRewardConfigApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/prc/PointRewardConfigApplicationService.java new file mode 100644 index 0000000..62d6bfb --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/prc/PointRewardConfigApplicationService.java @@ -0,0 +1,38 @@ +package com.qniao.dam.application.service.prc; + +import com.qniao.dam.domain.aggregate.prc.PointRewardConfigAggregate; +import com.qniao.dam.domain.aggregate.prc.entity.PointRewardConfig; +import com.qniao.dam.infrastructure.persistent.dao.prc.PointRewardConfigDao; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Objects; + +@Service +public class PointRewardConfigApplicationService { + + @Resource + private PointRewardConfigAggregate pointRewardConfigAggregate; + @Resource + private PointRewardConfigDao pointRewardConfigDao; + + public void create(PointRewardConfig pointRewardConfig) { + pointRewardConfigAggregate.create(pointRewardConfig); + } + + public void edit(PointRewardConfig pointRewardConfig) { + pointRewardConfigAggregate.edit(pointRewardConfig); + } + + public void delete(Long id) { + pointRewardConfigAggregate.delete(id); + } + + public void enable(Long id) { + PointRewardConfig pointRewardConfig = pointRewardConfigDao.selectById(id); + if (Objects.nonNull(pointRewardConfig)){ + pointRewardConfig.setEnable(!pointRewardConfig.getEnable()); + pointRewardConfigAggregate.edit(pointRewardConfig); + } + } +} \ No newline at end of file diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/reward/RewardApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/reward/RewardApplicationService.java index e558baf..f093c8d 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/reward/RewardApplicationService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/reward/RewardApplicationService.java @@ -5,12 +5,16 @@ import cn.hutool.core.util.StrUtil; import com.qniao.dam.api.command.reward.user.request.AcquireMatchmakerConfirmMatchRewardDto; import com.qniao.dam.api.command.reward.user.request.AcquireMatchmakerConfirmMeetingRewardDto; import com.qniao.dam.api.command.reward.user.request.UserAcquireMatchmakerJoinRecommendRewardDto; +import com.qniao.dam.domain.aggregate.marriagebounty.entity.MarriageBountyOrder; import com.qniao.dam.domain.aggregate.revenuereward.entity.RevenueReward; import com.qniao.dam.domain.aggregate.revenuereward.valueobj.RevenueRewardAssociateOrderRecord; import com.qniao.dam.domain.aggregate.revenuereward.valueobj.RevenueRewardRecord; import com.qniao.dam.domain.service.revenuereward.AcquireRevenueRewardDomainService; +import com.qniao.dam.domian.aggregate.pointaccount.event.PointRewardCreatedMQ; +import com.qniao.dam.domian.aggregate.prc.constant.PointRewardConfigTypeEnum; import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; +import com.qniao.dam.infrastructure.constant.MqExchange; import com.qniao.dam.infrastructure.persistent.dao.domain.MarriageInformationDao; import com.qniao.dam.infrastructure.persistent.dao.domain.OrderDao; import com.qniao.dam.query.matchmaker.MatchmakerQueryService; @@ -29,6 +33,7 @@ import com.qniao.dam.query.rewardconfig.RewardConfigQueryService; import com.qniao.das.domian.aggregate.marriageinformation.MarriageInformation; import com.qniao.dau.domain.aggregate.matchmaker.entity.Matchmaker; import com.qniao.dau.domain.aggregate.store.entity.Store; +import org.springframework.amqp.core.AmqpTemplate; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -58,6 +63,8 @@ public class RewardApplicationService { private MatchmakerQueryService matchmakerQueryService; @Resource private StoreQueryService storeQueryService; + @Resource + private AmqpTemplate amqpTemplate; /** * 获得红娘推荐奖励 @@ -96,6 +103,18 @@ public class RewardApplicationService { WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, revenue, true, originalBalance, walletAccount.getTotalBalance()); walletAccount.setRecordList(Collections.singletonList(record)); acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); + + //积分奖励 + PointRewardCreatedMQ mq = new PointRewardCreatedMQ(); + mq.setOwnId(dto.getInitiatorUserId()); + mq.setIdentityType(IdentityTypeEnum.INDIVIDUAL); + mq.setPointType(PointRewardConfigTypeEnum.INVITE_MATCHMAKER); + mq.setContent("邀请红娘:" + dto.getReceiveUserName()); + mq.setIsIncome(true); + mq.setAssociateId(dto.getAssociateOrderId()); + mq.setAmount(rewardAmount); + // 发送mq事件 + amqpTemplate.convertAndSend(MqExchange.POINT_REWARD_CREATED, null, mq); } } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/pointaccount/PointAccountAggregate.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/pointaccount/PointAccountAggregate.java new file mode 100644 index 0000000..48b6377 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/pointaccount/PointAccountAggregate.java @@ -0,0 +1,31 @@ +package com.qniao.dam.domain.aggregate.pointaccount; + +import com.qniao.dam.domain.aggregate.pointaccount.entity.PointAccount; +import com.qniao.dam.domain.aggregate.pointaccount.repository.PointAccountRepository; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +/** + * 积分账号 + * + * @date 2024/12/23 + */ +@Service +public class PointAccountAggregate { + + @Resource + private PointAccountRepository repository; + + public void create(PointAccount entity) { + repository.save(entity); + } + + public void edit(PointAccount entity) { + repository.save(entity); + } + + public void delete(Long id) { + repository.delete(id); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/pointaccount/repository/PointAccountRepository.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/pointaccount/repository/PointAccountRepository.java new file mode 100644 index 0000000..00213cb --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/pointaccount/repository/PointAccountRepository.java @@ -0,0 +1,12 @@ +package com.qniao.dam.domain.aggregate.pointaccount.repository; + +import com.qniao.dam.domain.aggregate.pointaccount.entity.PointAccount; +import com.qniao.domain.Repository; + +/** + * 积分账号 + * + * @date 2024/12/23 + */ +public interface PointAccountRepository extends Repository { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/prc/PointRewardConfigAggregate.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/prc/PointRewardConfigAggregate.java new file mode 100644 index 0000000..d99d703 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/prc/PointRewardConfigAggregate.java @@ -0,0 +1,32 @@ +package com.qniao.dam.domain.aggregate.prc; + +import com.qniao.dam.domain.aggregate.prc.entity.PointRewardConfig; +import com.qniao.dam.domain.aggregate.prc.repository.PointRewardConfigRepository; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +/** + * 积分奖励配置 + * + * @date 2024/12/23 + */ +@Service +public class PointRewardConfigAggregate { + + @Resource + private PointRewardConfigRepository repository; + + public void create(PointRewardConfig entity) { + entity.setEnable(true); + repository.save(entity); + } + + public void edit(PointRewardConfig entity) { + repository.save(entity); + } + + public void delete(Long id) { + repository.delete(id); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/prc/repository/PointRewardConfigRepository.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/prc/repository/PointRewardConfigRepository.java new file mode 100644 index 0000000..dc4a7e8 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/prc/repository/PointRewardConfigRepository.java @@ -0,0 +1,12 @@ +package com.qniao.dam.domain.aggregate.prc.repository; + +import com.qniao.dam.domain.aggregate.prc.entity.PointRewardConfig; +import com.qniao.domain.Repository; + +/** + * 积分奖励配置 + * + * @date 2024/12/23 + */ +public interface PointRewardConfigRepository extends Repository { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java index 9d16900..f5d09fd 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java @@ -16,4 +16,5 @@ public interface MqExchange { String CANCEL_SITE_ACTIVITY = "fanout.cancelSiteActivity"; + String POINT_REWARD_CREATED = "fanout.pointRewardCreated"; } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqQueue.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqQueue.java index 8ba2dc5..d43663a 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqQueue.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqQueue.java @@ -16,4 +16,5 @@ public interface MqQueue { String CANCEL_SITE_ACTIVITY = MqExchange.CANCEL_SITE_ACTIVITY + serviceName; + String POINT_REWARD_CREATED = MqExchange.POINT_REWARD_CREATED + serviceName; } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/par/PointAccountRecordDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/par/PointAccountRecordDao.java new file mode 100644 index 0000000..050caaf --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/par/PointAccountRecordDao.java @@ -0,0 +1,14 @@ +package com.qniao.dam.infrastructure.persistent.dao.par; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qniao.dam.domain.aggregate.pointaccount.entity.PointAccountRecord; +import org.apache.ibatis.annotations.Param; + +/** + * 积分账户记录 + * + * @date 2024/12/23 + */ +public interface PointAccountRecordDao extends BaseMapper { + void updateIsRead(@Param("pointAccountId") Long pointAccountId); +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/pointaccount/PointAccountDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/pointaccount/PointAccountDao.java new file mode 100644 index 0000000..20d0667 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/pointaccount/PointAccountDao.java @@ -0,0 +1,19 @@ +package com.qniao.dam.infrastructure.persistent.dao.pointaccount; + +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.pointaccount.user.request.PagePointAccountRecordQueryParams; +import com.qniao.dam.api.query.pointaccount.user.response.PagePointAccountRecordVo; +import com.qniao.dam.domain.aggregate.pointaccount.entity.PointAccount; +import org.apache.ibatis.annotations.Param; + +/** + * 积分账号 + * + * @date 2024/12/23 + */ +public interface PointAccountDao extends BaseMapper { + IPage pagePointAccountRecord(Page pageWithoutOrders, + @Param("queryParams") PagePointAccountRecordQueryParams queryParams); +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/prc/PointRewardConfigDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/prc/PointRewardConfigDao.java new file mode 100644 index 0000000..0c2a82c --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/prc/PointRewardConfigDao.java @@ -0,0 +1,19 @@ +package com.qniao.dam.infrastructure.persistent.dao.prc; + +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.prc.user.request.UserPagePointRewardConfigQueryParams; +import com.qniao.dam.api.query.prc.user.response.UserPagePointRewardConfigVo; +import com.qniao.dam.domain.aggregate.prc.entity.PointRewardConfig; +import org.apache.ibatis.annotations.Param; + +/** + * 积分奖励配置 + * + * @date 2024/12/23 + */ +public interface PointRewardConfigDao extends BaseMapper { + IPage page(Page pageWithoutOrders, + @Param("queryParams") UserPagePointRewardConfigQueryParams queryParams); +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/PointAccountRepositoryImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/PointAccountRepositoryImpl.java new file mode 100644 index 0000000..e467044 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/PointAccountRepositoryImpl.java @@ -0,0 +1,51 @@ +package com.qniao.dam.infrastructure.persistent.repository.impl; + +import cn.hutool.core.collection.CollUtil; +import com.qniao.dam.domain.aggregate.pointaccount.entity.PointAccount; +import com.qniao.dam.domain.aggregate.pointaccount.repository.PointAccountRepository; +import com.qniao.dam.infrastructure.persistent.dao.par.PointAccountRecordDao; +import com.qniao.dam.infrastructure.persistent.dao.pointaccount.PointAccountDao; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Objects; + +/** + * 积分账号 + * + * @date 2024/12/23 + */ +@Service +public class PointAccountRepositoryImpl implements PointAccountRepository { + + @Resource + private PointAccountDao dao; + @Resource + private PointAccountRecordDao pointAccountRecordDao; + + @Override + public PointAccount load(Long id) { + return dao.selectById(id); + } + + @Override + public Long save(PointAccount entity) { + if (Objects.isNull(entity) || Objects.isNull(dao.selectById(entity.getId()))) { + dao.insert(entity); + } else { + dao.updateById(entity); + } + if (CollUtil.isNotEmpty(entity.getRecordList())) { + entity.getRecordList().forEach(record -> { + record.setPointAccountId(entity.getId()); + pointAccountRecordDao.insert(record); + }); + } + return entity.getId(); + } + + @Override + public void delete(Long id) { + dao.deleteById(id); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/PointRewardConfigRepositoryImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/PointRewardConfigRepositoryImpl.java new file mode 100644 index 0000000..9399660 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/PointRewardConfigRepositoryImpl.java @@ -0,0 +1,41 @@ +package com.qniao.dam.infrastructure.persistent.repository.impl; + +import com.qniao.dam.domain.aggregate.prc.entity.PointRewardConfig; +import com.qniao.dam.domain.aggregate.prc.repository.PointRewardConfigRepository; +import com.qniao.dam.infrastructure.persistent.dao.prc.PointRewardConfigDao; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Objects; + +/** + * 积分奖励配置 + * + * @date 2024/12/23 + */ +@Service +public class PointRewardConfigRepositoryImpl implements PointRewardConfigRepository { + + @Resource + private PointRewardConfigDao dao; + + @Override + public PointRewardConfig load(Long id) { + return dao.selectById(id); + } + + @Override + public Long save(PointRewardConfig entity) { + if (Objects.isNull(entity) || Objects.isNull(dao.selectById(entity.getId()))) { + dao.insert(entity); + } else { + dao.updateById(entity); + } + return entity.getId(); + } + + @Override + public void delete(Long id) { + dao.deleteById(id); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/par/PointAccountRecordQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/par/PointAccountRecordQueryService.java new file mode 100644 index 0000000..5dd125a --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/par/PointAccountRecordQueryService.java @@ -0,0 +1,5 @@ +package com.qniao.dam.query.par; + +public interface PointAccountRecordQueryService { + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/par/impl/PointAccountRecordQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/par/impl/PointAccountRecordQueryServiceImpl.java new file mode 100644 index 0000000..0fae01b --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/par/impl/PointAccountRecordQueryServiceImpl.java @@ -0,0 +1,9 @@ +package com.qniao.dam.query.par.impl; + +import com.qniao.dam.query.par.PointAccountRecordQueryService; +import org.springframework.stereotype.Service; + +@Service +public class PointAccountRecordQueryServiceImpl implements PointAccountRecordQueryService { + +} \ No newline at end of file diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/pointaccount/PointAccountQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/pointaccount/PointAccountQueryService.java new file mode 100644 index 0000000..de1d82c --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/pointaccount/PointAccountQueryService.java @@ -0,0 +1,20 @@ +package com.qniao.dam.query.pointaccount; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.qniao.dam.api.query.pointaccount.user.request.PagePointAccountRecordQueryParams; +import com.qniao.dam.api.query.pointaccount.user.response.GetUnreadPointAccountRecordVo; +import com.qniao.dam.api.query.pointaccount.user.response.PagePointAccountRecordVo; +import com.qniao.dam.domain.aggregate.pointaccount.entity.PointAccount; +import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; +import com.qniao.framework.utils.PageUtil; + +public interface PointAccountQueryService { + + PointAccount queryByUserId(Long userId); + + PointAccount queryByType(Long ownId, IdentityTypeEnum identityType); + + IPage pagePointAccountRecord(PagePointAccountRecordQueryParams queryParams, PageUtil pageUtil); + + GetUnreadPointAccountRecordVo getUnreadPointAccountRecord(Long userId); +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/pointaccount/impl/PointAccountQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/pointaccount/impl/PointAccountQueryServiceImpl.java new file mode 100644 index 0000000..2ad45e0 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/pointaccount/impl/PointAccountQueryServiceImpl.java @@ -0,0 +1,86 @@ +package com.qniao.dam.query.pointaccount.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.qniao.dam.api.query.pointaccount.user.request.PagePointAccountRecordQueryParams; +import com.qniao.dam.api.query.pointaccount.user.response.GetUnreadPointAccountRecordVo; +import com.qniao.dam.api.query.pointaccount.user.response.PagePointAccountRecordVo; +import com.qniao.dam.domain.aggregate.pointaccount.entity.PointAccount; +import com.qniao.dam.domain.aggregate.pointaccount.entity.PointAccountRecord; +import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; +import com.qniao.dam.infrastructure.persistent.dao.par.PointAccountRecordDao; +import com.qniao.dam.infrastructure.persistent.dao.pointaccount.PointAccountDao; +import com.qniao.dam.query.pointaccount.PointAccountQueryService; +import com.qniao.framework.utils.PageUtil; +import com.qniao.framework.utils.TypeConvertUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Objects; + +@Service +public class PointAccountQueryServiceImpl implements PointAccountQueryService { + + @Resource + private PointAccountDao pointAccountDao; + @Resource + private PointAccountRecordDao pointAccountRecordDao; + + @Override + public PointAccount queryByUserId(Long userId) { + PointAccount pointAccount = pointAccountDao.selectOne(new LambdaQueryWrapper() + .eq(PointAccount::getIdentityType, IdentityTypeEnum.INDIVIDUAL) + .eq(PointAccount::getUserId, userId) + .last("limit 1")); + if (Objects.isNull(pointAccount)) { + pointAccount = PointAccount.initUser(userId); + } + return pointAccount; + } + + private PointAccount queryByOrg(Long orgId) { + PointAccount pointAccount = pointAccountDao.selectOne(new LambdaQueryWrapper() + .eq(PointAccount::getIdentityType, IdentityTypeEnum.INDIVIDUAL) + .eq(PointAccount::getOrgId, orgId) + .last("limit 1")); + if (Objects.isNull(pointAccount)) { + pointAccount = PointAccount.initOrg(orgId); + } + return pointAccount; + } + + @Override + public PointAccount queryByType(Long ownId, IdentityTypeEnum identityType) { + if (IdentityTypeEnum.INDIVIDUAL.equals(identityType)) { + return queryByUserId(ownId); + } else if (IdentityTypeEnum.ORGANIZATION.equals(identityType)) { + return queryByOrg(ownId); + } + return null; + } + + @Override + public IPage pagePointAccountRecord(PagePointAccountRecordQueryParams queryParams, PageUtil pageUtil) { + return pointAccountDao.pagePointAccountRecord(pageUtil.toPageWithoutOrders(), queryParams); + } + + @Override + public GetUnreadPointAccountRecordVo getUnreadPointAccountRecord(Long userId) { + GetUnreadPointAccountRecordVo recordVo = null; + PointAccount pointAccount = queryByUserId(userId); + if (Objects.nonNull(pointAccount.getId())) { + PointAccountRecord pointAccountRecord = pointAccountRecordDao.selectOne(new LambdaQueryWrapper() + .eq(PointAccountRecord::getPointAccountId, pointAccount.getId()) + .eq(PointAccountRecord::getIsRead, false) + .orderByDesc(PointAccountRecord::getCreateTime) + .last("limit 1")); + if (Objects.nonNull(pointAccountRecord)) { + recordVo = TypeConvertUtils.convert(pointAccountRecord, GetUnreadPointAccountRecordVo.class); + pointAccountRecordDao.updateIsRead(pointAccount.getId()); + } + } + return recordVo; + } + +} \ No newline at end of file diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/prc/PointRewardConfigQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/prc/PointRewardConfigQueryService.java new file mode 100644 index 0000000..aa7e169 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/prc/PointRewardConfigQueryService.java @@ -0,0 +1,15 @@ +package com.qniao.dam.query.prc; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.qniao.dam.api.query.prc.user.request.UserPagePointRewardConfigQueryParams; +import com.qniao.dam.api.query.prc.user.response.UserPagePointRewardConfigVo; +import com.qniao.dam.domain.aggregate.prc.entity.PointRewardConfig; +import com.qniao.dam.domian.aggregate.prc.constant.PointRewardConfigTypeEnum; +import com.qniao.framework.utils.PageUtil; + +public interface PointRewardConfigQueryService { + + IPage page(PageUtil pageUtil, UserPagePointRewardConfigQueryParams queryParams); + + PointRewardConfig queryEnableByType(PointRewardConfigTypeEnum type); +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/prc/impl/PointRewardConfigQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/prc/impl/PointRewardConfigQueryServiceImpl.java new file mode 100644 index 0000000..3b0f9c3 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/prc/impl/PointRewardConfigQueryServiceImpl.java @@ -0,0 +1,35 @@ +package com.qniao.dam.query.prc.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.qniao.dam.api.query.prc.user.request.UserPagePointRewardConfigQueryParams; +import com.qniao.dam.api.query.prc.user.response.UserPagePointRewardConfigVo; +import com.qniao.dam.domain.aggregate.prc.entity.PointRewardConfig; +import com.qniao.dam.domian.aggregate.prc.constant.PointRewardConfigTypeEnum; +import com.qniao.dam.infrastructure.persistent.dao.prc.PointRewardConfigDao; +import com.qniao.dam.query.prc.PointRewardConfigQueryService; +import com.qniao.framework.utils.PageUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +public class PointRewardConfigQueryServiceImpl implements PointRewardConfigQueryService { + + @Resource + private PointRewardConfigDao pointRewardConfigDao; + + @Override + public IPage page(PageUtil pageUtil, + UserPagePointRewardConfigQueryParams queryParams) { + return pointRewardConfigDao.page(pageUtil.toPageWithoutOrders(), queryParams); + } + + @Override + public PointRewardConfig queryEnableByType(PointRewardConfigTypeEnum type) { + return pointRewardConfigDao.selectOne(new LambdaQueryWrapper() + .eq(PointRewardConfig::getType, type) + .eq(PointRewardConfig::getEnable, true) + .last("limit 1")); + } +} \ No newline at end of file diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/rewardconfig/impl/RewardConfigQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/rewardconfig/impl/RewardConfigQueryServiceImpl.java index 3b65494..049a663 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/rewardconfig/impl/RewardConfigQueryServiceImpl.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/rewardconfig/impl/RewardConfigQueryServiceImpl.java @@ -58,6 +58,11 @@ public class RewardConfigQueryServiceImpl implements RewardConfigQueryService { .in(RewardConfig::getRewardType, Arrays.asList(RewardTypeEnum.GUEST_CERTIFICATION_BY_ONLINE, RewardTypeEnum.PUBLISH_MARRIAGE_BOUNTY_BY_ONLINE, RewardTypeEnum.MATCH_MARRIAGE_BOUNTY_BY_ONLINE, RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND_BY_ONLINE))); voList = TypeConvertUtils.convert(list, RewardConfigVo.class); + } else if (ProductSubCategoryEnum.MATCHMAKER_TRAINEE_FEE.getValue().equals(type)) { + List list = rewardConfigDao.selectList(new LambdaQueryWrapper() + .in(RewardConfig::getRewardType, Arrays.asList(RewardTypeEnum.GUEST_CERTIFICATION_BY_TRAINEE, RewardTypeEnum.PUBLISH_MARRIAGE_BOUNTY_BY_TRAINEE, + RewardTypeEnum.MATCH_MARRIAGE_BOUNTY_BY_TRAINEE, RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND_BY_TRAINEE))); + voList = TypeConvertUtils.convert(list, RewardConfigVo.class); } return voList; } @@ -65,7 +70,10 @@ public class RewardConfigQueryServiceImpl implements RewardConfigQueryService { @Override public RewardConfig queryGuestCertificationReward(Matchmaker matchmaker) { if (Objects.nonNull(matchmaker)) { - if (ProductSubCategoryEnum.MATCHMAKER_ONLINE_FEE.equals(matchmaker.getType())) { + if (ProductSubCategoryEnum.MATCHMAKER_TRAINEE_FEE.equals(matchmaker.getType())) { + //实习红娘 + return queryByRewardType(RewardTypeEnum.GUEST_CERTIFICATION_BY_TRAINEE); + } else if (ProductSubCategoryEnum.MATCHMAKER_ONLINE_FEE.equals(matchmaker.getType())) { //线上红娘 return queryByRewardType(RewardTypeEnum.GUEST_CERTIFICATION_BY_ONLINE); } else { @@ -79,7 +87,10 @@ public class RewardConfigQueryServiceImpl implements RewardConfigQueryService { @Override public RewardConfig queryPublishMarriageBountyReward(Matchmaker matchmaker) { if (Objects.nonNull(matchmaker)) { - if (ProductSubCategoryEnum.MATCHMAKER_ONLINE_FEE.equals(matchmaker.getType())) { + if (ProductSubCategoryEnum.MATCHMAKER_TRAINEE_FEE.equals(matchmaker.getType())) { + //实习红娘 + return queryByRewardType(RewardTypeEnum.PUBLISH_MARRIAGE_BOUNTY_BY_TRAINEE); + } else if (ProductSubCategoryEnum.MATCHMAKER_ONLINE_FEE.equals(matchmaker.getType())) { //线上红娘 return queryByRewardType(RewardTypeEnum.PUBLISH_MARRIAGE_BOUNTY_BY_ONLINE); } else { @@ -93,7 +104,10 @@ public class RewardConfigQueryServiceImpl implements RewardConfigQueryService { @Override public RewardConfig queryMatchMarriageBountyReward(Matchmaker matchmaker) { if (Objects.nonNull(matchmaker)) { - if (ProductSubCategoryEnum.MATCHMAKER_ONLINE_FEE.equals(matchmaker.getType())) { + if (ProductSubCategoryEnum.MATCHMAKER_TRAINEE_FEE.equals(matchmaker.getType())) { + //实习红娘 + return queryByRewardType(RewardTypeEnum.MATCH_MARRIAGE_BOUNTY_BY_TRAINEE); + } else if (ProductSubCategoryEnum.MATCHMAKER_ONLINE_FEE.equals(matchmaker.getType())) { //线上红娘 return queryByRewardType(RewardTypeEnum.MATCH_MARRIAGE_BOUNTY_BY_ONLINE); } else { @@ -109,7 +123,7 @@ public class RewardConfigQueryServiceImpl implements RewardConfigQueryService { MatchmakerLevelEnum receiveLevel) { BigDecimal pct = BigDecimal.ZERO; if (Objects.nonNull(initiatorLevel) && Objects.nonNull(receiveLevel)) { - int diffValue = initiatorLevel.getLevel() - receiveLevel.getValue(); + int diffValue = initiatorLevel.getLevel() - receiveLevel.getLevel(); RewardConfig equalLevelConfig = queryByRewardType(RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND_EQUAL_LEVEL); if (Objects.nonNull(equalLevelConfig)) { //平级推荐 @@ -126,8 +140,8 @@ public class RewardConfigQueryServiceImpl implements RewardConfigQueryService { pct = pct.compareTo(downMaxPct) < 0 ? pct : downMaxPct; } } - //向上推荐 - if (diffValue < 0) { + //向上推荐 只能一级 + if (diffValue == -1) { RewardConfig upLevelConfig = queryByRewardType(RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND_UP_LEVEL); RewardConfig upMinConfig = queryByRewardType(RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND_UP_MIN); if (Objects.nonNull(upLevelConfig) && Objects.nonNull(upMinConfig)) { diff --git a/dating-agency-mall-server/src/main/resources/mapper/par/PointAccountRecordMapper.xml b/dating-agency-mall-server/src/main/resources/mapper/par/PointAccountRecordMapper.xml new file mode 100644 index 0000000..cfc9692 --- /dev/null +++ b/dating-agency-mall-server/src/main/resources/mapper/par/PointAccountRecordMapper.xml @@ -0,0 +1,13 @@ + + + + + + UPDATE da_point_account_record + set is_read=1 + where is_delete = 0 + and is_read = 0 + and point_account_id = #{pointAccountId} + + + \ No newline at end of file diff --git a/dating-agency-mall-server/src/main/resources/mapper/pointaccount/PointAccountMapper.xml b/dating-agency-mall-server/src/main/resources/mapper/pointaccount/PointAccountMapper.xml new file mode 100644 index 0000000..21948ff --- /dev/null +++ b/dating-agency-mall-server/src/main/resources/mapper/pointaccount/PointAccountMapper.xml @@ -0,0 +1,23 @@ + + + + + + \ No newline at end of file diff --git a/dating-agency-mall-server/src/main/resources/mapper/prc/PointRewardConfigMapper.xml b/dating-agency-mall-server/src/main/resources/mapper/prc/PointRewardConfigMapper.xml new file mode 100644 index 0000000..460245a --- /dev/null +++ b/dating-agency-mall-server/src/main/resources/mapper/prc/PointRewardConfigMapper.xml @@ -0,0 +1,24 @@ + + + + + + +