diff --git a/yami-shop-bean/src/main/java/com/yami/shop/bean/app/dto/CouponOrderDto.java b/yami-shop-bean/src/main/java/com/yami/shop/bean/app/dto/CouponOrderDto.java new file mode 100644 index 0000000..4ecee59 --- /dev/null +++ b/yami-shop-bean/src/main/java/com/yami/shop/bean/app/dto/CouponOrderDto.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. + * + * https://www.mall4j.com/ + * + * 未经允许,不可做商业用途! + * + * 版权所有,侵权必究! + */ + +package com.yami.shop.bean.app.dto; + +import lombok.Data; +import java.io.Serializable; + +/** + * `CouponOrderDto`类是一个数据传输对象(DTO),用于在电商系统应用层的不同组件或模块之间传递与优惠券和订单相关的信息。 + * 其主要目的是将涉及优惠券在订单场景下的相关数据进行整合封装,方便在诸如订单创建、订单金额计算(包含优惠券优惠计算)、 + * 订单详情展示等业务操作中进行数据传递,使得数据交互更加清晰、规范,避免直接传递复杂或分散的底层数据结构, + * 提高不同业务层之间协作的效率以及代码的整体可读性。 + + * @author lanhai + */ +@Data +public class CouponOrderDto implements Serializable { + + /** + * 优惠券的唯一标识符,用于在系统中精准定位某一张具体的优惠券。 + * 通过这个 `couponId`,可以关联到优惠券的详细信息,例如优惠券的名称、类型(满减券、折扣券等)、 + * 优惠金额或折扣比例、使用条件(如满多少金额可用、适用的商品范围等)以及有效期等关键属性, + * 在订单处理过程中,判断该优惠券是否可用于当前订单以及计算具体优惠金额时,都需要依赖这个唯一标识来获取相应信息。 + */ + private Long couponId; + + /** + * 关联的订单的唯一标识符,即 `orderId`,用于明确该优惠券是应用于哪一个具体的订单上。 + * 在电商系统中,一个优惠券可能可以在多个订单中使用(前提是满足使用条件),同样,一个订单也可能会使用多张优惠券, + * 通过这个 `orderId` 能够清晰地建立起优惠券与订单之间的对应关系,便于后续业务逻辑围绕该订单进行优惠券相关的处理, + * 比如统计该订单使用了哪些优惠券、计算因优惠券使用而减免的总金额等操作。 + */ + private Long orderId; + + /** + * 该优惠券在当前订单中实际减免的金额数值,用 `discountAmount` 表示。 + * 在订单处理流程中,当确定某张优惠券可应用于当前订单后,需要根据优惠券的规则(如满减券的满减金额设定等) + * 来计算出它在这个订单里具体能减免多少钱,这个属性就用于记录该实际减免的金额, + * 是计算订单最终应付金额、展示订单优惠明细等操作中重要的数据依据,能直观体现优惠券给订单带来的优惠效果。 + */ + private Double discountAmount; + + /** + * 表示优惠券在当前订单中的使用状态的标识,例如可以用布尔类型的 `isUsed` 属性来表示(`true` 表示已使用,`false` 表示未使用)。 + * 在整个订单生命周期内,优惠券的使用状态可能会发生变化,例如用户最初选择使用某张优惠券,但后续又取消了选择, + * 或者由于某些条件不满足导致优惠券无法使用等情况,通过这个属性可以清晰地反映出优惠券当前是否已在该订单中被实际应用, + * 方便在业务逻辑中进行相应的判断和处理,确保订单与优惠券之间的关联状态准确无误。 + */ + private boolean isUsed; + + /** + * 优惠券的剩余可用次数(如果优惠券有使用次数限制的话),用 `remainingUseTimes` 表示,通常为整数类型。 + * 对于一些有限次使用的优惠券,每次在订单中成功使用后,剩余可用次数会相应减少, + * 这个属性用于记录当前优惠券针对后续订单还能被使用的次数,在判断优惠券是否还能继续在其他订单中使用等业务逻辑中起着关键作用, + * 有助于合理控制优惠券的使用频率,遵循其预先设定的使用规则。 + */ + private Integer remainingUseTimes; +} \ No newline at end of file diff --git a/yami-shop-bean/src/main/java/com/yami/shop/bean/event/ConfirmOrderEvent.java b/yami-shop-bean/src/main/java/com/yami/shop/bean/event/ConfirmOrderEvent.java new file mode 100644 index 0000000..6d17771 --- /dev/null +++ b/yami-shop-bean/src/main/java/com/yami/shop/bean/event/ConfirmOrderEvent.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. + * + * https://www.mall4j.com/ + * + * 未经允许,不可做商业用途! + * + * 版权所有,侵权必究! + */ + +package com.yami.shop.bean.event; + +import com.yami.shop.bean.app.dto.ShopCartDto; +import com.yami.shop.bean.app.dto.ShopCartItemDto; +import com.yami.shop.bean.app.dto.ShopCartOrderDto; +import com.yami.shop.bean.app.dto.ShopCartOrderMergerDto; +import com.yami.shop.bean.app.param.OrderParam; +import lombok.AllArgsConstructor; +import lombok.Data; +import java.util.List; + +/** + * `ConfirmOrderEvent`类是一个用于封装确认订单相关业务信息的事件类,它遵循领域驱动设计(DDD)中领域事件的概念, + * 在电商系统等涉及订单处理的业务场景中发挥着重要作用。当用户进行确认订单操作时,会触发该事件, + * 该类的实例对象会承载确认订单这一时刻所涉及的关键数据信息,并在不同的业务组件或模块之间传递, + * 使得其他关注确认订单事件的部分能够基于这些数据进行相应的业务逻辑处理,比如订单金额计算、库存扣减、 + * 订单记录保存等后续操作,确保整个订单确认流程的准确与完整。 + + * @author LGH + */ +@Data +@AllArgsConstructor +public class ConfirmOrderEvent { + + /** + * `shopCartOrderDto`属性用于存放购物车已经组装好的店铺订单信息。 + * 在电商购物流程中,用户将商品加入购物车后,当准备确认订单时,系统会根据购物车中的商品、店铺等信息, + * 按照一定规则(例如按照不同店铺进行订单拆分、合并等)组装出每个店铺对应的订单信息, + * 这个 `ShopCartOrderDto` 对象就包含了诸如店铺的基本信息(店铺名称、店铺ID等)、 + * 该店铺下所有商品的汇总信息(商品总价、商品总数量等)以及其他与店铺订单相关的必要数据, + * 方便后续在确认订单阶段基于店铺维度进行进一步的业务处理,比如计算店铺优惠、生成店铺订单详情等操作。 + */ + private ShopCartOrderDto shopCartOrderDto; + + /** + * `orderParam`属性承载了下单请求的各项参数信息。 + * 这些参数通常是由用户在前端界面填写或者系统根据默认规则生成的,例如用户的收货地址、联系人姓名、 + * 联系电话、选择的支付方式等关键信息,它们对于生成完整准确的订单记录至关重要, + * 后续的订单创建、保存以及与第三方支付平台交互(如果涉及)等业务逻辑都会依赖这些参数进行相应操作, + * 确保订单能够按照用户期望的方式被处理和执行。 + */ + private OrderParam orderParam; + + /** + * `shopCartItems`属性是一个列表,用于存储店铺中的所有商品项信息,每个元素是 `ShopCartItemDto` 类型。 + * 在确认订单阶段,需要详细了解购物车中每个具体商品的详细情况,包括商品的具体规格(通过对应的SKU信息体现)、 + * 商品单价、购买数量以及商品在购物车中的唯一标识等信息,这个列表就完整地记录了这些商品项的详细数据, + * 方便在后续业务逻辑中,例如计算每个商品的实际金额、更新商品库存、生成订单商品明细等操作时使用, + * 确保订单中商品相关信息的准确性和完整性。 + */ + private List shopCartItems; +} \ No newline at end of file diff --git a/yami-shop-bean/src/main/java/com/yami/shop/bean/order/ConfirmOrderOrder.java b/yami-shop-bean/src/main/java/com/yami/shop/bean/order/ConfirmOrderOrder.java new file mode 100644 index 0000000..cbae2f9 --- /dev/null +++ b/yami-shop-bean/src/main/java/com/yami/shop/bean/order/ConfirmOrderOrder.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. + * + * https://www.mall4j.com/ + * + * 未经允许,不可做商业用途! + * + * 版权所有,侵权必究! + */ + +package com.yami.shop.bean.order; + +/** + * `ConfirmOrderOrder`接口用于定义提交订单事件先后顺序相关的常量,在电商系统的订单处理业务流程中, + * 特别是涉及多种优惠活动、业务规则应用于订单的场景下,起到明确各环节执行顺序的重要作用。 + * 通过定义这些顺序常量,系统可以清晰地知晓在提交订单时,不同优惠、业务逻辑处理的先后顺序, + * 确保订单金额计算、优惠叠加等操作按照合理且符合业务要求的顺序进行,避免出现逻辑混乱或计算错误的情况。 + + * @author LGH + */ +public interface ConfirmOrderOrder { + + /** + * `DEFAULT`常量表示在没有任何活动参与时的默认顺序,其值为0。 + * 当订单不存在如满减、优惠券、分销等特殊优惠活动或业务逻辑时, + * 系统按照这个默认顺序来处理订单相关的基础操作,例如计算商品原价总和、 + * 确定基本的运费(如果有)等,它作为一个基准顺序,其他涉及活动的顺序都基于此进行相对排序。 + */ + int DEFAULT = 0; + + /** + * `DISCOUNT`常量代表满减活动在整个订单处理顺序中的位置,其值为100,排在 `DEFAULT` 后面。 + * 在电商系统中,满减活动是常见的优惠方式之一,当订单满足满减活动的条件(如购物车商品总价达到一定金额可减免部分金额)时, + * 系统会按照这个顺序来处理满减优惠的计算和应用,确保在完成基础的订单金额计算(即 `DEFAULT` 顺序对应的操作)之后, + * 再进行满减金额的扣除等相关操作,保证优惠计算的准确性和顺序性。 + */ + int DISCOUNT = 100; + + /** + * `COUPON`常量用于表示优惠券相关业务在订单处理顺序中的位置,其值为200,排在 `DISCOUNT` 后面。 + * 当用户在下单过程中使用了优惠券来进一步降低订单金额时,系统会依据这个顺序, + * 在完成满减优惠计算(按照 `DISCOUNT` 顺序操作)之后,再进行优惠券优惠金额的扣除等处理, + * 以此来合理叠加不同的优惠方式,使得最终订单金额的计算符合业务设定的先后逻辑顺序。 + */ + int COUPON = 200; + + /** + * `DISTRIBUTION`常量定义了分销相关业务在订单处理顺序中的位置,其值为300,排在 `COUPON` 后面。 + * 在电商的分销模式下,涉及到根据订单情况计算分销收益、记录分销相关信息等业务操作, + * 系统按照这个顺序,在完成优惠券优惠应用(按照 `COUPON` 顺序)之后,再处理分销相关的逻辑, + * 确保整个订单处理流程中各业务环节有序进行,避免优惠计算和业务逻辑执行出现冲突或错误。 + */ + int DISTRIBUTION = 300; +} \ No newline at end of file