65 lines
2.8 KiB
Go
65 lines
2.8 KiB
Go
package order
|
|
|
|
import (
|
|
"context"
|
|
|
|
"hfb_sys/backend/internal/model"
|
|
"hfb_sys/backend/internal/processlog"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
const processBusinessOrder = "order"
|
|
|
|
func orderState(order model.RentalOrder) map[string]any {
|
|
return map[string]any{
|
|
"order_status": order.Status, "handoff_status": order.HandoffStatus,
|
|
"settlement_status": order.SettlementStatus,
|
|
"offline_settlement_status": effectiveOfflineSettlementStatus(order),
|
|
}
|
|
}
|
|
|
|
func checkoutEventPayload(checkout model.OrderCheckout) map[string]any {
|
|
return map[string]any{
|
|
"checkout_id": checkout.ID, "round": checkout.RoundCount, "turn": normalizeCheckoutTurn(&checkout),
|
|
"proposed_by": checkout.ProposedBy, "rent_amount_cent": checkout.RentAmountCent,
|
|
"owner_rent_amount_cent": checkout.OwnerRentAmountCent, "platform_fee_cent": checkout.PlatformFeeCent,
|
|
"deposit_amount_cent": checkout.DepositAmountCent, "consumable_amount_cent": checkout.ConsumableAmountCent,
|
|
"coin_consumed_m": checkout.CoinConsumedM, "deposit_deduct_amount_cent": checkout.DepositDeductAmountCent,
|
|
"renter_refund_amount_cent": checkout.RenterRefundAmountCent, "owner_income_amount_cent": checkout.OwnerIncomeAmountCent,
|
|
"shortfall_cent": checkout.ShortfallCent, "overshoot_amount_cent": checkout.OvershootAmountCent,
|
|
}
|
|
}
|
|
|
|
func appendOrderEvent(tx *gorm.DB, order model.RentalOrder, stage, action, actorType string, actorID uint64, targetType string, targetID *uint64, content, reason string, payload, before map[string]any, attachments []string) error {
|
|
return processlog.Append(tx, processlog.Entry{
|
|
BusinessType: processBusinessOrder, BusinessID: order.ID, Stage: stage, Action: action,
|
|
ActorType: actorType, ActorID: actorID, TargetType: targetType, TargetID: targetID,
|
|
Content: content, Reason: reason, Payload: payload, Attachments: attachments,
|
|
StateBefore: before, StateAfter: orderState(order),
|
|
})
|
|
}
|
|
|
|
func (r *Repository) ProcessEventsAdmin(ctx context.Context, orderID uint64) ([]ProcessEventDTO, error) {
|
|
var order model.RentalOrder
|
|
if err := r.db.WithContext(ctx).First(&order, orderID).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
rows, err := processlog.List(r.db.WithContext(ctx), processBusinessOrder, orderID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
items := make([]ProcessEventDTO, 0, len(rows))
|
|
for _, row := range rows {
|
|
items = append(items, ProcessEventDTO{
|
|
ID: row.ID, BusinessType: row.BusinessType, BusinessID: row.BusinessID, Stage: row.Stage,
|
|
Action: row.Action, ActorType: row.ActorType, ActorID: row.ActorID, ActorName: row.ActorName,
|
|
TargetType: row.TargetType, TargetID: row.TargetID, TargetName: row.TargetName,
|
|
Content: row.Content, Reason: row.Reason, Payload: row.Payload,
|
|
AttachmentURLs: decodeStringList(row.AttachmentURLs), StateBefore: row.StateBefore,
|
|
StateAfter: row.StateAfter, CreatedAt: row.CreatedAt,
|
|
})
|
|
}
|
|
return items, nil
|
|
}
|