积分
This commit is contained in:
@@ -1,75 +0,0 @@
|
||||
package com.czg.account.dto.points;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 会员积分变动记录
|
||||
*
|
||||
* @author Tankaikai tankaikai@aliyun.com
|
||||
* @since 1.0 2025-02-25
|
||||
*/
|
||||
@Data
|
||||
public class MemberPointsLogDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
/**
|
||||
* 店铺id
|
||||
*/
|
||||
private Long shopId;
|
||||
/**
|
||||
* 用户id(shopUserId)
|
||||
*/
|
||||
private Long userId;
|
||||
/**
|
||||
* 摘要信息(如:兑换某个商品/消费多少钱/充值多少钱/新会员赠送积分等)
|
||||
*/
|
||||
private String content;
|
||||
/**
|
||||
* 订单编号
|
||||
*/
|
||||
private String orderNo;
|
||||
/**
|
||||
* 浮动类型 add-累加 subtract-扣减
|
||||
*/
|
||||
private String floatType;
|
||||
/**
|
||||
* 浮动积分(非0正负数)
|
||||
*/
|
||||
private Integer floatPoints;
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime createTime;
|
||||
/**
|
||||
* 用户昵称
|
||||
*/
|
||||
private String nickName;
|
||||
/**
|
||||
* 用户头像
|
||||
*/
|
||||
private String headImg;
|
||||
/**
|
||||
* 用户手机号码
|
||||
*/
|
||||
private String phone;
|
||||
/**
|
||||
* 查询开始日期 yyyy-MM-dd
|
||||
*/
|
||||
private String beginDate;
|
||||
/**
|
||||
* 查询结束日期 yyyy-MM-dd
|
||||
*/
|
||||
private String endDate;
|
||||
}
|
||||
@@ -1,71 +0,0 @@
|
||||
package com.czg.account.dto.points;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 获取会员可用积分
|
||||
*
|
||||
* @author tankaikai
|
||||
* @since 2024-10-26 11:40
|
||||
*/
|
||||
@Data
|
||||
public class OrderDeductionPointsDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 本单最多可抵扣多少积分
|
||||
*/
|
||||
private Integer maxUsablePoints;
|
||||
/**
|
||||
* 根据策略计算出的最少可以抵扣的金额
|
||||
*/
|
||||
private BigDecimal minDeductionAmount;
|
||||
/**
|
||||
* 根据策略计算出的最多可以抵扣的金额
|
||||
*/
|
||||
private BigDecimal maxDeductionAmount;
|
||||
/**
|
||||
* 下单实付抵扣门槛(实付金额不低于这个值)
|
||||
*/
|
||||
private BigDecimal minPaymentAmount;
|
||||
/**
|
||||
* 下单积分抵扣门槛(每次使用不低于这个值)
|
||||
*/
|
||||
private Integer minDeductionPoints;
|
||||
/**
|
||||
* 会员账户积分
|
||||
*/
|
||||
private Integer accountPoints;
|
||||
/**
|
||||
* 订单金额 (扣除各类折扣)
|
||||
*/
|
||||
private BigDecimal orderAmount;
|
||||
/**
|
||||
* 使用的积分数量
|
||||
*/
|
||||
private Integer usedPoints;
|
||||
/**
|
||||
* 实际抵扣的金额
|
||||
*/
|
||||
private BigDecimal deductionAmount;
|
||||
/**
|
||||
* 下单抵扣积分比例 1元=?积分
|
||||
*/
|
||||
private Integer equivalentPoints;
|
||||
/**
|
||||
* 不可抵扣原因
|
||||
*/
|
||||
private String unusableReason;
|
||||
/**
|
||||
* 是否可用 1-可用 0-不可用
|
||||
*/
|
||||
private Boolean usable;
|
||||
|
||||
|
||||
}
|
||||
@@ -1,93 +0,0 @@
|
||||
package com.czg.account.dto.points;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import com.czg.validator.group.DefaultGroup;
|
||||
import com.czg.validator.group.InsertGroup;
|
||||
import jakarta.validation.constraints.DecimalMax;
|
||||
import jakarta.validation.constraints.DecimalMin;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 积分基本设置
|
||||
*
|
||||
* @author Tankaikai tankaikai@aliyun.com
|
||||
* @since 1.0 2025-02-25
|
||||
*/
|
||||
@Data
|
||||
public class PointsBasicSettingDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 店铺id
|
||||
*/
|
||||
@NotNull(message = "店铺id不能为空", groups = InsertGroup.class)
|
||||
private Long shopId;
|
||||
/**
|
||||
* 开启消费赠送积分 1-开启 0-关闭
|
||||
*/
|
||||
@NotNull(message = "开启消费赠送积分不能为空", groups = DefaultGroup.class)
|
||||
private Integer enableRewards;
|
||||
/**
|
||||
* 赠积分适用群体 all-全部 vip-仅会员
|
||||
*/
|
||||
@NotNull(message = "赠积分适用群体不能为空", groups = DefaultGroup.class)
|
||||
private String rewardsGroup;
|
||||
/**
|
||||
* 每消费xx元赠送1积分
|
||||
*/
|
||||
@NotNull(message = "每消费xx元赠送1积分不能为空", groups = DefaultGroup.class)
|
||||
private BigDecimal consumeAmount;
|
||||
/**
|
||||
* 开启下单积分抵扣 1-开启 0-关闭
|
||||
*/
|
||||
@NotNull(message = "开启下单积分抵扣不能为空", groups = DefaultGroup.class)
|
||||
private Integer enableDeduction;
|
||||
/**
|
||||
* 抵扣适用群体 all-全部 vip-仅会员
|
||||
*/
|
||||
@NotBlank(message = "抵扣适用群体不能为空", groups = DefaultGroup.class)
|
||||
private String deductionGroup;
|
||||
/**
|
||||
* 下单实付抵扣门槛
|
||||
*/
|
||||
@NotNull(message = "下单实付抵扣门槛不能为空", groups = DefaultGroup.class)
|
||||
@DecimalMin(value = "0", inclusive = false, message = "下单实付抵扣门槛不能小于0")
|
||||
private BigDecimal minPaymentAmount;
|
||||
/**
|
||||
* 下单最高抵扣比例
|
||||
*/
|
||||
@NotNull(message = "下单最高抵扣比例不能为空", groups = DefaultGroup.class)
|
||||
@DecimalMin(value = "0", inclusive = false, message = "下单最高抵扣比例不能小于等于0")
|
||||
@DecimalMax(value = "100", message = "下单最高抵扣比例不能大于100")
|
||||
private BigDecimal maxDeductionRatio;
|
||||
/**
|
||||
* 下单抵扣积分比例 1元=?积分
|
||||
*/
|
||||
@NotNull(message = "下单抵扣积分比例不能为空", groups = DefaultGroup.class)
|
||||
private Integer equivalentPoints;
|
||||
/**
|
||||
* 开启积分商城
|
||||
*/
|
||||
@NotNull(message = "开启积分商城不能为空", groups = DefaultGroup.class)
|
||||
private Integer enablePointsMall;
|
||||
/**
|
||||
* 浏览模式 list-列表 grid-宫格
|
||||
*/
|
||||
@NotBlank(message = "浏览模式不能为空", groups = DefaultGroup.class)
|
||||
private String browseMode;
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
}
|
||||
@@ -1,124 +0,0 @@
|
||||
package com.czg.account.dto.points;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 积分兑换记录
|
||||
*
|
||||
* @author Tankaikai tankaikai@aliyun.com
|
||||
* @since 1.0 2025-02-25
|
||||
*/
|
||||
@Data
|
||||
public class PointsExchangeRecordDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
/**
|
||||
* 订单编号
|
||||
*/
|
||||
private String orderNo;
|
||||
/**
|
||||
* 店铺id
|
||||
*/
|
||||
private Long shopId;
|
||||
/**
|
||||
* 积分商品id
|
||||
*/
|
||||
private Long pointsGoodsId;
|
||||
/**
|
||||
* 积分商品名称
|
||||
*/
|
||||
private String pointsGoodsName;
|
||||
/**
|
||||
* 商品图片URL
|
||||
*/
|
||||
private String goodsImageUrl;
|
||||
/**
|
||||
* 领取方式 self-自取 post-邮寄
|
||||
*/
|
||||
private String pickupMethod;
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
private Long userId;
|
||||
/**
|
||||
* 用户昵称
|
||||
*/
|
||||
private String nickName;
|
||||
/**
|
||||
* 手机号码
|
||||
*/
|
||||
private String mobile;
|
||||
/**
|
||||
* 会员头像
|
||||
*/
|
||||
private String avatarUrl;
|
||||
/**
|
||||
* 消耗积分
|
||||
*/
|
||||
private Integer spendPoints;
|
||||
/**
|
||||
* 额外支付
|
||||
*/
|
||||
private BigDecimal extraPaymentAmount;
|
||||
/**
|
||||
* 兑换券券码
|
||||
*/
|
||||
private String couponCode;
|
||||
/**
|
||||
* 支付平台订单号
|
||||
*/
|
||||
private String payOrderId;
|
||||
/**
|
||||
* 渠道订单号(微信/支付宝订单号)
|
||||
*/
|
||||
private String channelTradeNo;
|
||||
/**
|
||||
* 支付方式 积分支付/积分+微信/积分+支付宝
|
||||
*/
|
||||
private String payMethod;
|
||||
/**
|
||||
* 支付类型 POINTS-积分 WECHAT-微信 ALIPAY-支付宝 UNIONPAY-银联云闪付
|
||||
*/
|
||||
private String payType;
|
||||
/**
|
||||
* 状态 unpaid-待支付 waiting-待自取 done-已完成 cancel-已取消
|
||||
*/
|
||||
private String status;
|
||||
/**
|
||||
* 取消/退款原因
|
||||
*/
|
||||
private String cancelOrRefundReason;
|
||||
/**
|
||||
* 取消/退款时间
|
||||
*/
|
||||
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime cancelOrRefundTime;
|
||||
/**
|
||||
* 实际支付时间
|
||||
*/
|
||||
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime payTime;
|
||||
/**
|
||||
* 创建时间(下单时间)
|
||||
*/
|
||||
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime createTime;
|
||||
/**
|
||||
* 更新时间(核销时间)
|
||||
*/
|
||||
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
||||
@@ -1,74 +0,0 @@
|
||||
package com.czg.account.entity;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.KeyType;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 会员积分
|
||||
*
|
||||
* @author Tankaikai tankaikai@aliyun.com
|
||||
* @since 2.0 2024-10-25
|
||||
*/
|
||||
@Data
|
||||
@Table("tb_shop_user")
|
||||
public class MemberPoints implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 会员id
|
||||
*/
|
||||
@Id(keyType = KeyType.Auto)
|
||||
@Column(value = "id")
|
||||
private Long shopUserId;
|
||||
/**
|
||||
* 店铺id
|
||||
*/
|
||||
private Long sourceShopId;
|
||||
private Long mainShopId;
|
||||
/**
|
||||
* 会员名称
|
||||
*/
|
||||
@Column("nick_name")
|
||||
private String nickName;
|
||||
/**
|
||||
* 会员头像
|
||||
*/
|
||||
@Column("head_img")
|
||||
private String headImg;
|
||||
/**
|
||||
* 手机号码
|
||||
*/
|
||||
@Column("phone")
|
||||
private String phone;
|
||||
/**
|
||||
* 账户积分
|
||||
*/
|
||||
@Column("account_points")
|
||||
private Integer accountPoints;
|
||||
/**
|
||||
* 最近一次积分变动时间
|
||||
*/
|
||||
@Column("last_points_change_time")
|
||||
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime lastPointsChangeTime;
|
||||
/**
|
||||
* 最近一次浮动积分
|
||||
*/
|
||||
@Column("last_float_points")
|
||||
private Integer lastFloatPoints;
|
||||
/**
|
||||
* 是否会员 1-是 0-否
|
||||
*/
|
||||
@Column("is_vip")
|
||||
private Integer vip;
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
package com.czg.account.enums;
|
||||
|
||||
/**
|
||||
* 抵扣适用群体枚举
|
||||
*
|
||||
* @author tankaikai
|
||||
* @since 2025-02-25 17:50
|
||||
*/
|
||||
public enum PointUserGroupEnum {
|
||||
/**
|
||||
* 全部用户
|
||||
*/
|
||||
ALL("all"),
|
||||
|
||||
/**
|
||||
* 仅会员
|
||||
*/
|
||||
VIP("vip");
|
||||
|
||||
private String value;
|
||||
|
||||
PointUserGroupEnum(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String value() {
|
||||
return this.value;
|
||||
}
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
package com.czg.account.enums;
|
||||
|
||||
/**
|
||||
* 积分兑换状态枚举
|
||||
*
|
||||
* @author tankaikai
|
||||
* @since 2025-02-25 15:37
|
||||
*/
|
||||
public enum PointsExchangeStatusEnum {
|
||||
/**
|
||||
* 待支付
|
||||
*/
|
||||
UNPAID("unpaid"),
|
||||
/**
|
||||
* 待自取
|
||||
*/
|
||||
WAITING("waiting"),
|
||||
/**
|
||||
* 已完成
|
||||
*/
|
||||
DONE("done"),
|
||||
/**
|
||||
* 已取消
|
||||
*/
|
||||
CANCEL("cancel");
|
||||
|
||||
private String value;
|
||||
|
||||
PointsExchangeStatusEnum(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String value() {
|
||||
return this.value;
|
||||
}
|
||||
}
|
||||
@@ -1,50 +0,0 @@
|
||||
package com.czg.account.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 积分兑换订单支付类型枚举
|
||||
*
|
||||
* @author tankaikai
|
||||
* @since 2025-02-26 10:29
|
||||
*/
|
||||
@Getter
|
||||
@RequiredArgsConstructor
|
||||
public enum PointsOrderPayTypeEnum {
|
||||
/**
|
||||
* 积分
|
||||
*/
|
||||
POINTS("POINTS", "积分支付"),
|
||||
|
||||
/**
|
||||
* 积分+微信
|
||||
*/
|
||||
WECHAT("WECHAT", "积分+微信"),
|
||||
/**
|
||||
* 积分+支付宝
|
||||
*/
|
||||
ALIPAY("ALIPAY", "积分+支付宝"),
|
||||
|
||||
;
|
||||
|
||||
private final String value;
|
||||
private final String text;
|
||||
|
||||
|
||||
public static List<String> getValues() {
|
||||
return Arrays.stream(values()).map(PointsOrderPayTypeEnum::getValue).toList();
|
||||
}
|
||||
|
||||
public static String getText(String value) {
|
||||
PointsOrderPayTypeEnum item = Arrays.stream(values()).filter(obj -> value.equals(obj.getValue())).findFirst().orElse(null);
|
||||
if (item != null) {
|
||||
return item.getText();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
package com.czg.account.param;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 消费赠送积分入参
|
||||
*
|
||||
* @author tankaikai
|
||||
* @since 2025-02-25 18:20
|
||||
*/
|
||||
@Data
|
||||
public class ConsumeAwardPointsParam implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 用户ID(shopUserId)
|
||||
*/
|
||||
private Long shopUserId;
|
||||
/**
|
||||
* 订单ID
|
||||
*/
|
||||
private Long orderId;
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
package com.czg.account.param;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 会员积分查询入参
|
||||
*
|
||||
* @author tankaikai
|
||||
* @since 2025-02-25 17:18
|
||||
*/
|
||||
@Data
|
||||
public class MemberPointsParam implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 用户昵称
|
||||
*/
|
||||
private String nickName;
|
||||
/**
|
||||
* 手机号
|
||||
*/
|
||||
private String phone;
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
package com.czg.account.param;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 支付完成扣减积分入参
|
||||
*
|
||||
* @author tankaikai
|
||||
* @since 2025-02-25 18:07
|
||||
*/
|
||||
@Data
|
||||
public class PayedDeductPointsParam implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 用户ID(shopUserId)
|
||||
*/
|
||||
private Long shopUserId;
|
||||
/**
|
||||
* 消耗积分
|
||||
*/
|
||||
private Integer points;
|
||||
/**
|
||||
* 摘要信息(如:兑换某个商品/消费多少钱/充值多少钱/新会员赠送积分等)
|
||||
*/
|
||||
private String content;
|
||||
/**
|
||||
* 订单ID(可为空)
|
||||
*/
|
||||
private Long orderId;
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
package com.czg.account.param;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 积分兑换 - 取消/退款入参
|
||||
*
|
||||
* @author tankaikai
|
||||
* @since 2025-02-25 15:29
|
||||
*/
|
||||
@Data
|
||||
public class PointsExchangeCfParam implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
/**
|
||||
* 取消或退款原因
|
||||
*/
|
||||
private String cancelOrRefundReason;
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
package com.czg.account.param;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 兑换记录查询入侵
|
||||
*
|
||||
* @author tankaikai
|
||||
* @since 2025-02-25 14:08
|
||||
*/
|
||||
@Data
|
||||
public class PointsExchangeRecordParam implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 查询关键字
|
||||
*/
|
||||
private String keywords;
|
||||
/**
|
||||
* 查询开始日期 格式 yyyy-MM-dd
|
||||
*/
|
||||
private String beginDate;
|
||||
/**
|
||||
* 查询结束日期 格式 yyyy-MM-dd
|
||||
*/
|
||||
private String endDate;
|
||||
/**
|
||||
* 领取方式 self-自取 post-邮寄
|
||||
*/
|
||||
private String pickupMethod;
|
||||
/**
|
||||
* 状态 unpaid-待支付 waiting-待自取 done-已完成 cancel-已取消
|
||||
*/
|
||||
private String status;
|
||||
/**
|
||||
* 店铺用户id
|
||||
*/
|
||||
private Long shopUserId;
|
||||
}
|
||||
@@ -1,67 +0,0 @@
|
||||
package com.czg.account.param;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import com.czg.validator.group.InsertGroup;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 积分订单创建入参
|
||||
*
|
||||
* @author tankaikai
|
||||
* @since 2025-02-26 10:03
|
||||
*/
|
||||
@Data
|
||||
public class PointsOrderCreateParam implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
/**
|
||||
* 店铺id
|
||||
*/
|
||||
@JSONField(serialize = false)
|
||||
@NotNull(message = "店铺id不能为空", groups = InsertGroup.class)
|
||||
private Long shopId;
|
||||
/**
|
||||
* 积分商品id
|
||||
*/
|
||||
@NotNull(message = "积分商品id不能为空", groups = InsertGroup.class)
|
||||
private Long pointsGoodsId;
|
||||
/**
|
||||
* 领取方式 self-自取 post-邮寄
|
||||
*/
|
||||
@NotBlank(message = "领取方式不能为空", groups = InsertGroup.class)
|
||||
private String pickupMethod;
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
@NotNull(message = "用户id不能为空", groups = InsertGroup.class)
|
||||
private Long userId;
|
||||
/**
|
||||
* 用户昵称
|
||||
*/
|
||||
@NotBlank(message = "用户昵称不能为空", groups = InsertGroup.class)
|
||||
private String nickName;
|
||||
/**
|
||||
* 手机号码
|
||||
*/
|
||||
private String mobile;
|
||||
/**
|
||||
* 会员头像
|
||||
*/
|
||||
private String avatarUrl;
|
||||
/**
|
||||
* 积分商品名称
|
||||
*/
|
||||
@JSONField(serialize = false)
|
||||
private String pointsGoodsName;
|
||||
/**
|
||||
* 商品图片URL
|
||||
*/
|
||||
@JSONField(serialize = false)
|
||||
private String goodsImageUrl;
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
package com.czg.account.param;
|
||||
|
||||
import com.czg.validator.group.DefaultGroup;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 积分订单支付入参
|
||||
*
|
||||
* @author tankaikai
|
||||
* @since 2025-02-26 10:03
|
||||
*/
|
||||
@Data
|
||||
public class PointsOrderPayParam implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
/**
|
||||
* 订单id(积分兑换记录id)
|
||||
*/
|
||||
@NotNull(message = "订单id不能为空", groups = DefaultGroup.class)
|
||||
private Long id;
|
||||
/**
|
||||
* 支付类型 POINTS-积分 WECHAT-微信 ALIPAY-支付宝 UNIONPAY-银联云闪付
|
||||
*/
|
||||
@NotBlank(message = "支付类型不能为空", groups = DefaultGroup.class)
|
||||
private String payType;
|
||||
/**
|
||||
* 微信openId/支付完userId
|
||||
*/
|
||||
@NotBlank(message = "openId不能为空", groups = DefaultGroup.class)
|
||||
private String openId;
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
package com.czg.account.service;
|
||||
|
||||
import com.czg.account.dto.points.MemberPointsLogDTO;
|
||||
import com.czg.account.entity.MemberPointsLog;
|
||||
import com.czg.account.vo.PointsShopListVO;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.service.IService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 会员积分变动记录
|
||||
*
|
||||
* @author Tankaikai tankaikai@aliyun.com
|
||||
* @since 1.0 2025-02-25
|
||||
*/
|
||||
public interface MemberPointsLogService extends IService<MemberPointsLog> {
|
||||
|
||||
Page<MemberPointsLogDTO> getMemberPointsLogPage(MemberPointsLogDTO param);
|
||||
|
||||
List<PointsShopListVO> getList(long userId, String shopName);
|
||||
}
|
||||
@@ -1,100 +0,0 @@
|
||||
package com.czg.account.service;
|
||||
|
||||
import com.czg.account.dto.points.OrderDeductionPointsDTO;
|
||||
import com.czg.account.entity.MemberPoints;
|
||||
import com.czg.account.param.MemberPointsParam;
|
||||
import com.czg.order.entity.OrderInfo;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.service.IService;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 会员积分
|
||||
*
|
||||
* @author Tankaikai tankaikai@aliyun.com
|
||||
* @since 1.0 2025-02-25
|
||||
*/
|
||||
public interface MemberPointsService extends IService<MemberPoints> {
|
||||
|
||||
/**
|
||||
* 会员积分分页
|
||||
*
|
||||
* @param param 查询参数
|
||||
* @return 分页结果
|
||||
*/
|
||||
Page<MemberPoints> getMemberPointsPage(MemberPointsParam param);
|
||||
|
||||
/**
|
||||
* 初始化会员积分
|
||||
*
|
||||
* @param shopUserId 用户id
|
||||
* @return 会员积分等信息
|
||||
*/
|
||||
MemberPoints initMemberPoints(Long shopUserId);
|
||||
|
||||
/**
|
||||
* 获取会员积分等信息
|
||||
*
|
||||
* @param shopUserId 用户id
|
||||
* @return 会员积分等信息
|
||||
*/
|
||||
MemberPoints getMemberPoints(Long shopUserId);
|
||||
|
||||
/**
|
||||
* 根据用户id及订单金额计算可抵扣积分及可抵扣金额
|
||||
*
|
||||
* @param shopUserId 用户id
|
||||
* @param orderAmount 订单金额
|
||||
* @return 积分及金额
|
||||
*/
|
||||
OrderDeductionPointsDTO getMemberUsablePoints(Long shopUserId, BigDecimal orderAmount);
|
||||
|
||||
/**
|
||||
* 根据抵扣金额计算抵扣积分
|
||||
*
|
||||
* @param shopUserId 用户id
|
||||
* @param orderAmount 订单金额
|
||||
* @param deductionAmount 抵扣金额
|
||||
*/
|
||||
int calcUsedPoints(Long shopUserId, BigDecimal orderAmount, BigDecimal deductionAmount);
|
||||
|
||||
/**
|
||||
* 根据抵扣积分计算抵扣金额
|
||||
*
|
||||
* @param shopUserId 用户id
|
||||
* @param orderAmount 订单金额
|
||||
* @param points 抵扣积分
|
||||
*/
|
||||
BigDecimal calcDeductionAmount(Long shopUserId, BigDecimal orderAmount, int points);
|
||||
|
||||
/**
|
||||
* 扣除积分
|
||||
*
|
||||
* @param shopUserId 用户id
|
||||
* @param points 积分
|
||||
* @param content 摘要信息(如:兑换积分商品/积分抵扣账单/消费赠送积分/新会员送积分/储值赠送积分)
|
||||
* @param orderInfo 订单信息,可以为空
|
||||
*/
|
||||
boolean deductPoints(Long shopUserId, int points, String content, OrderInfo orderInfo);
|
||||
|
||||
/**
|
||||
* 追加积分
|
||||
*
|
||||
* @param shopUserId 用户id
|
||||
* @param points 积分
|
||||
* @param content 摘要信息(如:兑换积分商品/积分抵扣账单/消费赠送积分/新会员送积分/储值赠送积分)
|
||||
* @param orderInfo 订单信息,可以为空
|
||||
* @return 成功/失败
|
||||
*/
|
||||
boolean addPoints(Long shopUserId, int points, String content, OrderInfo orderInfo);
|
||||
|
||||
/**
|
||||
* 消费赠送积分
|
||||
*
|
||||
* @param shopUserId 用户id
|
||||
* @param orderInfo 订单信息,可以为空
|
||||
*/
|
||||
void consumeAwardPoints(Long shopUserId, OrderInfo orderInfo);
|
||||
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
package com.czg.account.service;
|
||||
|
||||
import com.mybatisflex.core.service.IService;
|
||||
import com.czg.account.entity.PointsBasicSetting;
|
||||
|
||||
/**
|
||||
* 积分基本设置 服务层。
|
||||
*
|
||||
* @author ww
|
||||
* @since 2025-02-20
|
||||
*/
|
||||
public interface PointsBasicSettingService extends IService<PointsBasicSetting> {
|
||||
|
||||
/**
|
||||
* 初始化∫配置信息
|
||||
* @param id 店铺id
|
||||
*/
|
||||
void initInfo(Long id);
|
||||
}
|
||||
@@ -1,87 +0,0 @@
|
||||
package com.czg.account.service;
|
||||
|
||||
import com.czg.account.dto.points.PointsExchangeRecordDTO;
|
||||
import com.czg.account.entity.PointsExchangeRecord;
|
||||
import com.czg.account.param.PointsExchangeCfParam;
|
||||
import com.czg.account.param.PointsExchangeRecordParam;
|
||||
import com.czg.account.param.PointsOrderCreateParam;
|
||||
import com.czg.account.param.PointsOrderPayParam;
|
||||
import com.czg.account.vo.PointsExchangeSummaryVo;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.service.IService;
|
||||
|
||||
/**
|
||||
* 积分兑换记录
|
||||
*
|
||||
* @author Tankaikai tankaikai@aliyun.com
|
||||
* @since 1.0 2025-02-25
|
||||
*/
|
||||
public interface PointsExchangeRecordService extends IService<PointsExchangeRecord> {
|
||||
|
||||
/**
|
||||
* 获取积分兑换记录分页
|
||||
*
|
||||
* @param param 查询参数
|
||||
* @return 分页数据
|
||||
*/
|
||||
Page<PointsExchangeRecordDTO> getPointsExchangeRecordPage(PointsExchangeRecordParam param);
|
||||
|
||||
/**
|
||||
* 获取积分兑换记录详情
|
||||
*
|
||||
* @param id 兑换记录id
|
||||
* @return 兑换记录详情
|
||||
*/
|
||||
PointsExchangeRecordDTO getPointsExchangeRecordById(Long id);
|
||||
|
||||
/**
|
||||
* 核销券码
|
||||
*
|
||||
* @param couponCode 券码
|
||||
*/
|
||||
void checkout(String couponCode);
|
||||
|
||||
/**
|
||||
* 创建兑换订单
|
||||
*
|
||||
* @param param 兑换入参
|
||||
* @return 兑换详情
|
||||
*/
|
||||
PointsExchangeRecordDTO create(PointsOrderCreateParam param);
|
||||
|
||||
/**
|
||||
* 支付兑换订单
|
||||
*
|
||||
* @param param 支付入参
|
||||
* @return 支付结果
|
||||
*/
|
||||
PointsExchangeRecordDTO pay(PointsOrderPayParam param);
|
||||
|
||||
/**
|
||||
* 取消
|
||||
*
|
||||
* @param param 兑换记录
|
||||
*/
|
||||
void cancel(PointsExchangeCfParam param);
|
||||
|
||||
/**
|
||||
* 退款
|
||||
*
|
||||
* @param param 兑换记录
|
||||
*/
|
||||
void refund(PointsExchangeCfParam param);
|
||||
|
||||
/**
|
||||
* 统计兑换记录
|
||||
*
|
||||
* @param param 查询参数
|
||||
* @return 统计结果
|
||||
*/
|
||||
PointsExchangeSummaryVo total(PointsExchangeRecordParam param);
|
||||
|
||||
/**
|
||||
* 自动取消
|
||||
*/
|
||||
void authCancel();
|
||||
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
package com.czg.account.service;
|
||||
|
||||
import com.czg.account.dto.points.PointsGoodsSettingDTO;
|
||||
import com.czg.account.entity.PointsGoodsSetting;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.service.IService;
|
||||
|
||||
/**
|
||||
* 积分商品设置
|
||||
*
|
||||
* @author Tankaikai tankaikai@aliyun.com
|
||||
* @since 1.0 2025-02-25
|
||||
*/
|
||||
public interface PointsGoodsSettingService extends IService<PointsGoodsSetting> {
|
||||
/**
|
||||
* 获取积分商品设置分页
|
||||
*
|
||||
* @param param 查询参数
|
||||
* @return 分页结果
|
||||
*/
|
||||
Page<PointsGoodsSettingDTO> getPointsGoodsSettingPage(PointsGoodsSettingDTO param);
|
||||
}
|
||||
@@ -8,6 +8,7 @@ import lombok.experimental.Accessors;
|
||||
public class PointsShopListVO {
|
||||
private String shopName;
|
||||
private String logo;
|
||||
private String coverImg;
|
||||
private Long shopId;
|
||||
private Integer accountPoints;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
|
||||
package com.czg.market.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import jakarta.validation.constraints.DecimalMin;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.experimental.Accessors;
|
||||
import java.io.Serial;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 积分基本设置 实体类。
|
||||
*
|
||||
* @author ww
|
||||
* @since 2025-12-08
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Accessors(chain = true)
|
||||
public class MkPointsConfigDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 店铺id
|
||||
*/
|
||||
private Long shopId;
|
||||
|
||||
/**
|
||||
* 开启消费赠送积分 1-开启 0-关闭 开启后,所有用户可通过消费获得积分及可用积分抵扣支付
|
||||
*/
|
||||
@NotNull(message = "开启消费开关参数错误")
|
||||
private Integer enableRewards;
|
||||
|
||||
/**
|
||||
* 每消费xx元赠送1积分
|
||||
*/
|
||||
@NotNull(message = "消费送积分参数错误")
|
||||
@DecimalMin(value = "0", inclusive = false, message = "消费送积分金额必须大于0")
|
||||
private BigDecimal consumeAmount;
|
||||
|
||||
/**
|
||||
* 下单实付抵扣门槛
|
||||
*/
|
||||
@NotNull(message = "抵扣门槛参数错误")
|
||||
private BigDecimal minPaymentAmount;
|
||||
|
||||
/**
|
||||
* 下单最高抵扣比例
|
||||
*/
|
||||
@NotNull(message = "抵扣比例参数错误")
|
||||
@DecimalMin(value = "0", inclusive = false, message = "抵扣比例必须大于0")
|
||||
private BigDecimal maxDeductionRatio;
|
||||
|
||||
/**
|
||||
* 下单抵扣积分比例 1元=?积分
|
||||
*/
|
||||
@NotNull(message = "积分比例错误")
|
||||
@DecimalMin(value = "0", inclusive = false, message = "积分比例必须大于0")
|
||||
private Integer equivalentPoints;
|
||||
|
||||
/**
|
||||
* 开启积分商城
|
||||
*/
|
||||
@NotNull(message = "积分商城开关参数错误")
|
||||
private Integer enablePointsMall;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
}
|
||||
@@ -1,27 +1,34 @@
|
||||
package com.czg.account.dto.points;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import com.czg.validator.group.DefaultGroup;
|
||||
import com.czg.validator.group.InsertGroup;
|
||||
import com.czg.validator.group.UpdateGroup;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Null;
|
||||
import lombok.Data;
|
||||
package com.czg.market.dto;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.NonNull;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 积分商品设置
|
||||
* 积分商品设置 实体类。
|
||||
*
|
||||
* @author Tankaikai tankaikai@aliyun.com
|
||||
* @since 1.0 2025-02-25
|
||||
* @author ww
|
||||
* @since 2025-12-08
|
||||
*/
|
||||
@Data
|
||||
public class PointsGoodsSettingDTO implements Serializable {
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Accessors(chain = true)
|
||||
public class MkPointsGoodsDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
@@ -29,74 +36,100 @@ public class PointsGoodsSettingDTO implements Serializable {
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@Null(message = "ID必须为空", groups = InsertGroup.class)
|
||||
@NotNull(message = "ID不能为空", groups = UpdateGroup.class)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 店铺id
|
||||
*/
|
||||
@NotNull(message = "店铺id不能为空", groups = DefaultGroup.class)
|
||||
private Long shopId;
|
||||
|
||||
/**
|
||||
* 商品类型 physical-实物 coupon-优惠劵
|
||||
* 商品类型 优惠劵 其它商品
|
||||
*/
|
||||
@NotBlank(message = "商品类型不能为空", groups = DefaultGroup.class)
|
||||
@NotBlank(message = "商品类型不能为空")
|
||||
private String goodsCategory;
|
||||
|
||||
/**
|
||||
* 商品名称
|
||||
* 优惠券id
|
||||
*/
|
||||
@NotBlank(message = "商品名称不能为空", groups = DefaultGroup.class)
|
||||
private Long couponId;
|
||||
|
||||
/**
|
||||
* 商品名称/优惠券名称
|
||||
*/
|
||||
@NotBlank(message = "名称不能为空")
|
||||
private String goodsName;
|
||||
|
||||
/**
|
||||
* 商品图片URL
|
||||
*/
|
||||
private String goodsImageUrl;
|
||||
|
||||
/**
|
||||
* 所需积分
|
||||
*/
|
||||
@NotNull(message = "所需积分不能为空", groups = DefaultGroup.class)
|
||||
@NotNull(message = "所需积分不能为空")
|
||||
@Min(value = 1, message = "所需积分不能小于1")
|
||||
private Integer requiredPoints;
|
||||
|
||||
/**
|
||||
* 额外价格
|
||||
*/
|
||||
@NotNull(message = "额外价格不能为空", groups = DefaultGroup.class)
|
||||
private BigDecimal extraPrice;
|
||||
/**
|
||||
* 排序(权重),数字越高,显示约靠前
|
||||
*/
|
||||
@NotNull(message = "排序(权重)不能为空", groups = DefaultGroup.class)
|
||||
private Integer sort;
|
||||
|
||||
/**
|
||||
* 数量
|
||||
*/
|
||||
@NotNull(message = "数量不能为空", groups = DefaultGroup.class)
|
||||
@NotNull(message = "数量不能为空")
|
||||
@Min(value = 1, message = "数量不能小于1")
|
||||
private Integer quantity;
|
||||
|
||||
/**
|
||||
* 排序(权重),数字越高,显示约靠前
|
||||
*/
|
||||
private Integer sort;
|
||||
|
||||
/**
|
||||
* 是否上架 1-是 0-否
|
||||
*/
|
||||
@NotNull(message = "上架状态不能为空")
|
||||
private Integer status;
|
||||
|
||||
/**
|
||||
* 领取方式 店内自取、系统发放
|
||||
*/
|
||||
private String receiveType;
|
||||
|
||||
/**
|
||||
* 限购数量
|
||||
*/
|
||||
private Integer limitQuota;
|
||||
|
||||
/**
|
||||
* 商品详情
|
||||
*/
|
||||
private String goodsDescription;
|
||||
|
||||
/**
|
||||
* 累计兑换数量
|
||||
*/
|
||||
private Integer totalExchangeCount;
|
||||
/**
|
||||
* 是否上架 1-是 0-否
|
||||
*/
|
||||
@NotNull(message = "是否上架不能为空", groups = DefaultGroup.class)
|
||||
private Integer status;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
/**
|
||||
* 逻辑删除标志 1-是 0-否
|
||||
*/
|
||||
private Integer delFlag;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
|
||||
package com.czg.market.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import com.czg.BaseQueryParam;
|
||||
import com.czg.market.entity.MkPointsGoodsRecord;
|
||||
import lombok.experimental.Accessors;
|
||||
import java.io.Serial;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 积分兑换记录 实体类。
|
||||
*
|
||||
* @author ww
|
||||
* @since 2025-12-08
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Accessors(chain = true)
|
||||
public class MkPointsGoodsRecordDTO extends MkPointsGoodsRecord implements Serializable {
|
||||
|
||||
private String headImg;
|
||||
private String nickName;
|
||||
private String phone;
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
|
||||
package com.czg.market.dto;
|
||||
|
||||
import com.czg.TimeQueryParam;
|
||||
import com.czg.utils.CzgStrUtils;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 积分兑换记录 实体类。
|
||||
*
|
||||
* @author ww
|
||||
* @since 2025-12-08
|
||||
*/
|
||||
@Data
|
||||
public class MkPointsGoodsRecordQueryDTO extends TimeQueryParam implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 店铺id
|
||||
*/
|
||||
private Long shopId;
|
||||
|
||||
/**
|
||||
* 对应 关键词 只查 积分商品名称
|
||||
*/
|
||||
private String pointsGoodsName;
|
||||
|
||||
/**
|
||||
* 商品类型 优惠劵 其它商品
|
||||
*/
|
||||
private String goodsCategory;
|
||||
|
||||
/**
|
||||
* 领取方式 店内自取、系统发放
|
||||
*/
|
||||
private String receiveType;
|
||||
|
||||
/**
|
||||
* 会员id
|
||||
*/
|
||||
private Long shopUserId;
|
||||
|
||||
/**
|
||||
* 状态 待支付 待核销 已完成 退款中 已退款
|
||||
*/
|
||||
private String status;
|
||||
|
||||
public String getPointsGoodsName() {
|
||||
return CzgStrUtils.getStrOrNull(pointsGoodsName);
|
||||
}
|
||||
|
||||
public String getGoodsCategory() {
|
||||
return CzgStrUtils.getStrOrNull(goodsCategory);
|
||||
}
|
||||
|
||||
public String getReceiveType() {
|
||||
return CzgStrUtils.getStrOrNull(receiveType);
|
||||
}
|
||||
|
||||
public String getStatus() {
|
||||
return CzgStrUtils.getStrOrNull(status);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
|
||||
package com.czg.market.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import lombok.experimental.Accessors;
|
||||
import java.io.Serial;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 会员积分账户 实体类。
|
||||
*
|
||||
* @author ww
|
||||
* @since 2025-12-08
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Accessors(chain = true)
|
||||
public class MkPointsUserDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 用户Id
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 店铺id
|
||||
*/
|
||||
private Long shopId;
|
||||
|
||||
/**
|
||||
* 店铺用户id
|
||||
*/
|
||||
private Long shopUserId;
|
||||
/**
|
||||
* 头像
|
||||
*/
|
||||
private String headImg;
|
||||
/**
|
||||
* 昵称
|
||||
*/
|
||||
private String nickName;
|
||||
/**
|
||||
* 手机号
|
||||
*/
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 积分余额
|
||||
*/
|
||||
private Long pointBalance;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
||||
@@ -1,30 +1,31 @@
|
||||
package com.czg.account.entity;
|
||||
package com.czg.market.entity;
|
||||
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.KeyType;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 积分基本设置 实体类。
|
||||
*
|
||||
* @author ww
|
||||
* @since 2025-02-20
|
||||
* @since 2025-12-08
|
||||
*/
|
||||
@Data
|
||||
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Table("tb_points_basic_setting")
|
||||
public class PointsBasicSetting implements Serializable {
|
||||
@Table("mk_points_config")
|
||||
public class MkPointsConfig implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
@@ -32,34 +33,19 @@ public class PointsBasicSetting implements Serializable {
|
||||
/**
|
||||
* 店铺id
|
||||
*/
|
||||
@Id(keyType = KeyType.None)
|
||||
@Id
|
||||
private Long shopId;
|
||||
|
||||
/**
|
||||
* 开启消费赠送积分 1-开启 0-关闭
|
||||
* 开启消费赠送积分 1-开启 0-关闭 开启后,所有用户可通过消费获得积分及可用积分抵扣支付
|
||||
*/
|
||||
private Integer enableRewards;
|
||||
|
||||
/**
|
||||
* 赠积分适用群体 all-全部 vip-仅会员
|
||||
*/
|
||||
private String rewardsGroup;
|
||||
|
||||
/**
|
||||
* 每消费xx元赠送1积分
|
||||
*/
|
||||
private BigDecimal consumeAmount;
|
||||
|
||||
/**
|
||||
* 开启下单积分抵扣 1-开启 0-关闭
|
||||
*/
|
||||
private Integer enableDeduction;
|
||||
|
||||
/**
|
||||
* 抵扣适用群体 all-全部 vip-仅会员
|
||||
*/
|
||||
private String deductionGroup;
|
||||
|
||||
/**
|
||||
* 下单实付抵扣门槛
|
||||
*/
|
||||
@@ -80,15 +66,10 @@ public class PointsBasicSetting implements Serializable {
|
||||
*/
|
||||
private Integer enablePointsMall;
|
||||
|
||||
/**
|
||||
* 浏览模式 list-列表 grid-宫格
|
||||
*/
|
||||
private String browseMode;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@Column(onInsertValue = "now()", onUpdateValue = "now()")
|
||||
@Column(onInsertValue = "now()")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
}
|
||||
@@ -1,26 +1,32 @@
|
||||
package com.czg.account.entity;
|
||||
package com.czg.market.entity;
|
||||
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.KeyType;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import com.mybatisflex.core.keygen.KeyGenerators;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 积分商品设置
|
||||
* 积分商品设置 实体类。
|
||||
*
|
||||
* @author Tankaikai tankaikai@aliyun.com
|
||||
* @since 1.0 2025-02-25
|
||||
* @author ww
|
||||
* @since 2025-12-08
|
||||
*/
|
||||
@Data
|
||||
@Table("tb_points_goods_setting")
|
||||
public class PointsGoodsSetting implements Serializable {
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Table("mk_points_goods")
|
||||
public class MkPointsGoods implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
@@ -28,65 +34,97 @@ public class PointsGoodsSetting implements Serializable {
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@Id(keyType = KeyType.Generator, value = KeyGenerators.snowFlakeId)
|
||||
@Id(keyType = KeyType.Auto)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 店铺id
|
||||
*/
|
||||
private Long shopId;
|
||||
/**
|
||||
* 商品类型 physical-实物 coupon-优惠劵
|
||||
* 商品类型 优惠劵 其它商品
|
||||
*/
|
||||
private String goodsCategory;
|
||||
|
||||
/**
|
||||
* 优惠券id
|
||||
*/
|
||||
private Long couponId;
|
||||
/**
|
||||
* 商品名称
|
||||
*/
|
||||
private String goodsName;
|
||||
|
||||
/**
|
||||
* 商品图片URL
|
||||
*/
|
||||
private String goodsImageUrl;
|
||||
|
||||
/**
|
||||
* 所需积分
|
||||
*/
|
||||
private Integer requiredPoints;
|
||||
|
||||
/**
|
||||
* 额外价格
|
||||
*/
|
||||
private BigDecimal extraPrice;
|
||||
/**
|
||||
* 排序(权重),数字越高,显示约靠前
|
||||
*/
|
||||
private Integer sort;
|
||||
|
||||
/**
|
||||
* 数量
|
||||
*/
|
||||
private Integer quantity;
|
||||
|
||||
/**
|
||||
* 商品详情
|
||||
* 排序(权重),数字越高,显示约靠前
|
||||
*/
|
||||
private String goodsDescription;
|
||||
/**
|
||||
* 累计兑换数量
|
||||
*/
|
||||
private Integer totalExchangeCount;
|
||||
private Integer sort;
|
||||
|
||||
/**
|
||||
* 是否上架 1-是 0-否
|
||||
*/
|
||||
private Integer status;
|
||||
|
||||
/**
|
||||
* 领取方式 店内自取、系统发放
|
||||
*/
|
||||
private String receiveType;
|
||||
|
||||
/**
|
||||
* 限购数量
|
||||
*/
|
||||
private Integer limitQuota;
|
||||
/**
|
||||
* 已购数量
|
||||
*/
|
||||
@Column(ignore = true)
|
||||
private Integer boughtCount;
|
||||
|
||||
/**
|
||||
* 商品详情
|
||||
*/
|
||||
private String goodsDescription;
|
||||
|
||||
/**
|
||||
* 累计兑换数量
|
||||
*/
|
||||
private Integer totalExchangeCount;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@Column(onInsertValue = "now()")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@Column(onInsertValue = "now()", onUpdateValue = "now()")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
/**
|
||||
* 逻辑删除标志 1-是 0-否
|
||||
*/
|
||||
@Column(onInsertValue = "0")
|
||||
private Integer delFlag;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,26 +1,32 @@
|
||||
package com.czg.account.entity;
|
||||
package com.czg.market.entity;
|
||||
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.KeyType;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import com.mybatisflex.core.keygen.KeyGenerators;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 积分兑换记录
|
||||
* 积分兑换记录 实体类。
|
||||
*
|
||||
* @author Tankaikai tankaikai@aliyun.com
|
||||
* @since 1.0 2025-02-25
|
||||
* @author ww
|
||||
* @since 2025-12-08
|
||||
*/
|
||||
@Data
|
||||
@Table("tb_points_exchange_record")
|
||||
public class PointsExchangeRecord implements Serializable {
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Table("mk_points_goods_record")
|
||||
public class MkPointsGoodsRecord implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
@@ -28,110 +34,115 @@ public class PointsExchangeRecord implements Serializable {
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@Id(keyType = KeyType.Generator, value = KeyGenerators.snowFlakeId)
|
||||
@Id(keyType = KeyType.Auto)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 订单编号
|
||||
*/
|
||||
private String orderNo;
|
||||
|
||||
/**
|
||||
* 店铺id
|
||||
*/
|
||||
private Long shopId;
|
||||
|
||||
/**
|
||||
* 积分商品id
|
||||
*/
|
||||
private Long pointsGoodsId;
|
||||
|
||||
/**
|
||||
* 积分商品名称
|
||||
*/
|
||||
private String pointsGoodsName;
|
||||
|
||||
/**
|
||||
* 商品图片URL
|
||||
*/
|
||||
private String goodsImageUrl;
|
||||
|
||||
/**
|
||||
* 领取方式 self-自取 post-邮寄
|
||||
* 商品类型 优惠劵 其它商品
|
||||
*/
|
||||
private String pickupMethod;
|
||||
private String goodsCategory;
|
||||
|
||||
/**
|
||||
* 店铺用户id
|
||||
* 领取方式 店内自取、系统发放
|
||||
*/
|
||||
private String receiveType;
|
||||
|
||||
/**
|
||||
* 会员id
|
||||
*/
|
||||
private Long shopUserId;
|
||||
/**
|
||||
* 用户昵称
|
||||
* 用户id
|
||||
*/
|
||||
private String nickName;
|
||||
private Long userId;
|
||||
/**
|
||||
* 手机号码
|
||||
* 数量
|
||||
*/
|
||||
private String mobile;
|
||||
/**
|
||||
* 会员头像
|
||||
*/
|
||||
private String avatarUrl;
|
||||
private int number;
|
||||
|
||||
/**
|
||||
* 消耗积分
|
||||
*/
|
||||
private Integer spendPoints;
|
||||
|
||||
/**
|
||||
* 额外支付
|
||||
*/
|
||||
private BigDecimal extraPaymentAmount;
|
||||
|
||||
/**
|
||||
* 兑换券券码
|
||||
*/
|
||||
private String couponCode;
|
||||
|
||||
/**
|
||||
* 支付平台订单号
|
||||
*/
|
||||
private String payOrderId;
|
||||
private Long payOrderId;
|
||||
|
||||
/**
|
||||
* 渠道订单号(微信/支付宝订单号)
|
||||
*/
|
||||
private String channelTradeNo;
|
||||
/**
|
||||
* 支付方式 积分支付/积分+微信/积分+支付宝
|
||||
*/
|
||||
private String payMethod;
|
||||
/**
|
||||
* 支付类型 POINTS-积分 WECHAT-微信 ALIPAY-支付宝 UNIONPAY-银联云闪付
|
||||
*/
|
||||
private String payType;
|
||||
/**
|
||||
* 状态 unpaid-待支付 waiting-待自取 done-已完成 cancel-已取消
|
||||
* 状态 待支付 待核销 已完成 退款中 已退款
|
||||
*/
|
||||
private String status;
|
||||
|
||||
/**
|
||||
* 取消/退款原因
|
||||
*/
|
||||
private String cancelOrRefundReason;
|
||||
|
||||
/**
|
||||
* 取消/退款时间
|
||||
*/
|
||||
private LocalDateTime cancelOrRefundTime;
|
||||
|
||||
/**
|
||||
* 实际支付时间
|
||||
*/
|
||||
private LocalDateTime payTime;
|
||||
|
||||
/**
|
||||
* 创建时间(下单时间)
|
||||
*/
|
||||
@Column(onInsertValue = "now()")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
* 更新时间(核销时间)
|
||||
* 更新时间
|
||||
*/
|
||||
@Column(onInsertValue = "now()", onUpdateValue = "now()")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
/**
|
||||
* 次数
|
||||
* 核销时间
|
||||
*/
|
||||
@Column(ignore = true)
|
||||
private Long count;
|
||||
private LocalDateTime checkoutTime;
|
||||
/**
|
||||
* 总额
|
||||
* 是否删除 0否 1是
|
||||
*/
|
||||
@Column(ignore = true)
|
||||
private BigDecimal totalAmount;
|
||||
}
|
||||
private Integer isDel;
|
||||
}
|
||||
@@ -1,24 +1,31 @@
|
||||
package com.czg.account.entity;
|
||||
package com.czg.market.entity;
|
||||
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.KeyType;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 会员积分变动记录
|
||||
* 会员积分账户 实体类。
|
||||
*
|
||||
* @author Tankaikai tankaikai@aliyun.com
|
||||
* @since 1.0 2025-02-25
|
||||
* @author ww
|
||||
* @since 2025-12-08
|
||||
*/
|
||||
@Data
|
||||
@Table("tb_member_points_log")
|
||||
public class MemberPointsLog implements Serializable {
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Table("mk_points_user")
|
||||
public class MkPointsUser implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
@@ -28,33 +35,37 @@ public class MemberPointsLog implements Serializable {
|
||||
*/
|
||||
@Id(keyType = KeyType.Auto)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 用户Id
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 店铺id
|
||||
*/
|
||||
private Long shopId;
|
||||
|
||||
/**
|
||||
* 店铺用户id
|
||||
*/
|
||||
private Long shopUserId;
|
||||
|
||||
/**
|
||||
* 摘要信息(如:兑换某个商品/消费多少钱/充值多少钱/新会员赠送积分等)
|
||||
* 积分余额
|
||||
*/
|
||||
private String content;
|
||||
/**
|
||||
* 订单编号
|
||||
*/
|
||||
private String orderNo;
|
||||
/**
|
||||
* 浮动类型 add-累加 subtract-扣减
|
||||
*/
|
||||
private String floatType;
|
||||
/**
|
||||
* 浮动积分(非0正负数)
|
||||
*/
|
||||
private Integer floatPoints;
|
||||
private Long pointBalance;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@Column(onInsertValue = "now()")
|
||||
private LocalDateTime createTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@Column(onInsertValue = "now()", onUpdateValue = "now()")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
||||
@@ -1,24 +1,31 @@
|
||||
package com.czg.account.vo;
|
||||
package com.czg.market.entity;
|
||||
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.KeyType;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 会员积分变动记录
|
||||
* 会员积分变动记录 实体类。
|
||||
*
|
||||
* @author Tankaikai tankaikai@aliyun.com
|
||||
* @since 1.0 2025-02-25
|
||||
* @author ww
|
||||
* @since 2025-12-08
|
||||
*/
|
||||
@Data
|
||||
@Table("tb_member_points_log")
|
||||
public class MemberPointsLogVO implements Serializable {
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Table("mk_points_user_record")
|
||||
public class MkPointsUserRecord implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
@@ -28,34 +35,36 @@ public class MemberPointsLogVO implements Serializable {
|
||||
*/
|
||||
@Id(keyType = KeyType.Auto)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 店铺id
|
||||
* 积分用户Id
|
||||
*/
|
||||
private Long shopId;
|
||||
/**
|
||||
* 店铺用户id
|
||||
*/
|
||||
private Long shopUserId;
|
||||
private Long mkPointsUserId;
|
||||
|
||||
/**
|
||||
* 摘要信息(如:兑换某个商品/消费多少钱/充值多少钱/新会员赠送积分等)
|
||||
*/
|
||||
private String content;
|
||||
|
||||
/**
|
||||
* 订单编号
|
||||
*/
|
||||
private String orderNo;
|
||||
private String sourceId;
|
||||
|
||||
/**
|
||||
* 浮动类型 add-累加 subtract-扣减
|
||||
*/
|
||||
private String floatType;
|
||||
|
||||
/**
|
||||
* 浮动积分(非0正负数)
|
||||
*/
|
||||
private Integer floatPoints;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@Column(onInsertValue = "now()")
|
||||
private LocalDateTime createTime;
|
||||
private String shopName;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.czg.market.enums;
|
||||
|
||||
/**
|
||||
* 积分 枚举类
|
||||
*/
|
||||
public enum PointsConstant {
|
||||
|
||||
ADD("add", "增加"),
|
||||
SUB("subtract", "扣减");
|
||||
|
||||
private final String value;
|
||||
private final String desc;
|
||||
|
||||
PointsConstant(String value, String desc) {
|
||||
this.value = value;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
public String getValue() { return value; }
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.czg.market.service;
|
||||
|
||||
import com.czg.order.entity.OrderInfo;
|
||||
import com.mybatisflex.core.service.IService;
|
||||
import com.czg.market.entity.MkPointsConfig;
|
||||
|
||||
/**
|
||||
* 积分基本设置 服务层。
|
||||
*
|
||||
* @author ww
|
||||
* @since 2025-12-08
|
||||
*/
|
||||
public interface MkPointsConfigService extends IService<MkPointsConfig> {
|
||||
/**
|
||||
* 订单支付成功,通过计算 给用户赠送积分
|
||||
*
|
||||
*/
|
||||
void consumeAwardPoints(Long shopUserId, OrderInfo orderInfo);
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.czg.market.service;
|
||||
|
||||
import com.czg.account.vo.PointsExchangeSummaryVo;
|
||||
import com.czg.market.dto.MkPointsGoodsRecordDTO;
|
||||
import com.czg.market.dto.MkPointsGoodsRecordQueryDTO;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.service.IService;
|
||||
import com.czg.market.entity.MkPointsGoodsRecord;
|
||||
|
||||
/**
|
||||
* 积分兑换记录 服务层。
|
||||
*
|
||||
* @author ww
|
||||
* @since 2025-12-08
|
||||
*/
|
||||
public interface MkPointsGoodsRecordService extends IService<MkPointsGoodsRecord> {
|
||||
|
||||
Page<MkPointsGoodsRecordDTO> getGoodsRecordPage(MkPointsGoodsRecordQueryDTO param);
|
||||
|
||||
PointsExchangeSummaryVo total(MkPointsGoodsRecordQueryDTO param);
|
||||
|
||||
boolean checkout(String couponCode,Long shopId);
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.czg.market.service;
|
||||
|
||||
import com.czg.BaseQueryParam;
|
||||
import com.czg.market.entity.MkPointsGoodsRecord;
|
||||
import com.czg.order.dto.PointGoodsRefundDTO;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.service.IService;
|
||||
import com.czg.market.entity.MkPointsGoods;
|
||||
|
||||
/**
|
||||
* 积分商品设置 服务层。
|
||||
*
|
||||
* @author ww
|
||||
* @since 2025-12-08
|
||||
*/
|
||||
public interface MkPointsGoodsService extends IService<MkPointsGoods> {
|
||||
|
||||
Page<MkPointsGoods> getPointsGoodsPage(BaseQueryParam param, Long shopId);
|
||||
|
||||
Page<MkPointsGoods> getPointsGoodsPageByUser(Integer page, Integer size, Long shopId, Long userId);
|
||||
|
||||
Page<MkPointsGoodsRecord> getGoodsRecordPage(Integer page, Integer size, Long shopId, Long userId);
|
||||
|
||||
//用户申请退款
|
||||
boolean applyRefund(PointGoodsRefundDTO param, Long userId);
|
||||
|
||||
boolean cancelRefund(PointGoodsRefundDTO param, Long userId);
|
||||
|
||||
/**
|
||||
* 更新商品数量
|
||||
*
|
||||
* @param id 商品id
|
||||
* @param quantity 库存数量 最终值
|
||||
* @param totalExchangeCount 累计兑换数量 最终值
|
||||
*/
|
||||
boolean upNumberById(Long id, Integer quantity, Integer totalExchangeCount);
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.czg.market.service;
|
||||
|
||||
import com.czg.account.vo.PointsShopListVO;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.service.IService;
|
||||
import com.czg.market.entity.MkPointsUserRecord;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 会员积分变动记录 服务层。
|
||||
*
|
||||
* @author ww
|
||||
* @since 2025-12-08
|
||||
*/
|
||||
public interface MkPointsUserRecordService extends IService<MkPointsUserRecord> {
|
||||
|
||||
Page<MkPointsUserRecord> pageByPointsUserId(Integer page, Integer size, Long mkPointsUserId);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package com.czg.market.service;
|
||||
|
||||
import com.czg.account.vo.PointsShopListVO;
|
||||
import com.czg.market.dto.MkPointsUserDTO;
|
||||
import com.czg.market.enums.PointsConstant;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.service.IService;
|
||||
import com.czg.market.entity.MkPointsUser;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 用户积分 服务层。
|
||||
*
|
||||
* @author ww
|
||||
* @since 2025-12-08
|
||||
*/
|
||||
public interface MkPointsUserService extends IService<MkPointsUser> {
|
||||
|
||||
|
||||
Page<MkPointsUserDTO> getPointsUserPage(String phone, Integer page, Integer size);
|
||||
|
||||
|
||||
List<PointsShopListVO> pointsShopList(Long userId, String shopName);
|
||||
|
||||
/**
|
||||
* 获取用户积分信息
|
||||
* 返回的数据ID可能为空 不影响修改用户积分 统一接口的处理
|
||||
*
|
||||
* @param shopId 店铺Id
|
||||
* @param shopUserId 店铺用户Id
|
||||
* @param userId 会员Id
|
||||
*/
|
||||
MkPointsUser getPointsUser(Long shopId, Long shopUserId, Long userId);
|
||||
|
||||
/**
|
||||
* 修改用户积分 统一接口 userId和shopUserId不能同时为空
|
||||
*
|
||||
* @param shopId 店铺Id 注意不要直接使用shopUser的ID
|
||||
* @param floatType {@link com.czg.market.enums.PointsConstant}
|
||||
* @param points 积分数 正数
|
||||
* @param reason 事件
|
||||
* 会员消费送积分
|
||||
* 消费¥多少 送多少积分
|
||||
* 积分抵扣账单
|
||||
*/
|
||||
Long alterPoints(Long userId, Long shopUserId, @NotNull Long shopId, @NotNull PointsConstant floatType,
|
||||
@NotNull Integer points, String sourceId, @NotBlank String reason);
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.czg.order.dto;
|
||||
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 积分商品兑换信息
|
||||
*
|
||||
* @author ww
|
||||
*/
|
||||
@Data
|
||||
public class PointGoodsExchangeDTO {
|
||||
/**
|
||||
* 积分商品id
|
||||
*/
|
||||
@NotNull(message = "积分商品不能为空")
|
||||
private Long pointsGoodsId;
|
||||
/**
|
||||
* 店铺Id
|
||||
*/
|
||||
@NotNull(message = "未指定店铺")
|
||||
private Long shopId;
|
||||
/**
|
||||
* 兑换数量
|
||||
*/
|
||||
@NotNull(message = "兑换数量不能为空")
|
||||
private int number;
|
||||
/**
|
||||
* 兑换价格
|
||||
*/
|
||||
private BigDecimal price;
|
||||
|
||||
/**
|
||||
* 支付方式 支付方式,aliPay 支付宝,wechatPay 微信
|
||||
*/
|
||||
private String payType;
|
||||
/**
|
||||
* 用户openId
|
||||
*/
|
||||
private String openId;
|
||||
private Long userId;
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.czg.order.dto;
|
||||
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 积分商品退款
|
||||
*
|
||||
* @author ww
|
||||
*/
|
||||
@Data
|
||||
public class PointGoodsRefundDTO {
|
||||
|
||||
/**
|
||||
* 积分商品id
|
||||
*/
|
||||
@NotNull(message = "记录不能为空")
|
||||
private Long recordId;
|
||||
/**
|
||||
* 订单编号
|
||||
*/
|
||||
@NotNull(message = "订单编号不能为空")
|
||||
private String orderNo;
|
||||
|
||||
private String reason;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.czg.order.service;
|
||||
|
||||
import com.czg.order.dto.PointGoodsExchangeDTO;
|
||||
import com.czg.order.dto.PointGoodsRefundDTO;
|
||||
import com.czg.resp.CzgResult;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 积分商品兑换服务
|
||||
*
|
||||
* @author ww
|
||||
*/
|
||||
public interface PointsGoodPayService {
|
||||
|
||||
//积分商品兑换
|
||||
CzgResult<Map<String, Object>> exchange(String ip, PointGoodsExchangeDTO param);
|
||||
|
||||
//同意退款
|
||||
boolean applyRefund(PointGoodsRefundDTO param, Long shopId);
|
||||
|
||||
//支付回调 进行兑换内容发放
|
||||
void payCallBack(Long recordId);
|
||||
}
|
||||
Reference in New Issue
Block a user