package employeecollection import ( "github.com/break/junhong_cmp_fiber/internal/model" "github.com/break/junhong_cmp_fiber/pkg/constants" ) // OrderBillSubject 是判定后台线下套餐订单是否建账所需的来源事实。 // 四个条件必须同时成立,判定只由 ShouldCreateBillForOrder 一处实现。 type OrderBillSubject struct { // PaymentMethod 表示订单支付方式快照。 PaymentMethod string // OperatorAccountType 表示实际操作账号类型快照。 OperatorAccountType string // ActualPaidAmount 表示订单实际支付金额(分),空表示来源未产生实收金额。 ActualPaidAmount *int64 // HasGiftPackage 表示订单是否包含赠送套餐。 HasGiftPackage bool } // OrderBillSubjectFromOrder 从已冻结的订单事实提取建账判据输入。 // 建账与创建时付款凭证放宽必须使用同一份输入,避免出现两套口径。 func OrderBillSubjectFromOrder(order *model.Order, hasGiftPackage bool) OrderBillSubject { if order == nil { return OrderBillSubject{} } return OrderBillSubject{ PaymentMethod: order.PaymentMethod, OperatorAccountType: order.OperatorAccountType, ActualPaidAmount: order.ActualPaidAmount, HasGiftPackage: hasGiftPackage, } } // ShouldCreateBillForOrder 判定后台线下套餐订单是否触发员工代收款建账。 // 判据:支付方式为线下、实际操作账号为平台账号、订单不含赠送套餐、实收金额大于零。 func ShouldCreateBillForOrder(subject OrderBillSubject) bool { return subject.PaymentMethod == model.PaymentMethodOffline && subject.OperatorAccountType == model.OperatorAccountTypePlatform && !subject.HasGiftPackage && subject.ActualPaidAmount != nil && *subject.ActualPaidAmount > 0 } // RechargeBillSubject 是判定代理线下充值入账是否建账所需的来源事实。 type RechargeBillSubject struct { // PaymentMethod 表示充值记录支付方式。 PaymentMethod string // Amount 表示充值记录金额(分)。 Amount int64 } // ShouldCreateBillForRecharge 判定代理线下充值入账是否触发员工代收款建账。 // 判据:支付方式为线下且入账金额大于零;零金额无法形成正的应收金额。 func ShouldCreateBillForRecharge(subject RechargeBillSubject) bool { return subject.PaymentMethod == constants.RechargeMethodOffline && subject.Amount > 0 }