Files
2026-06-16 11:55:14 +08:00

115 lines
4.7 KiB
Python

from rest_framework import serializers
from gvsds.common.Serializer import PascalCaseSerializer, PascalCaseModelSerializer
from gvsds.apps.commission.models import (
CommissionEvent,
CommissionRule,
CommissionRecord,
RateTable,
RateEntry,
PreSettlement,
)
class RateEntrySerializer(PascalCaseModelSerializer):
class Meta:
model = RateEntry
fields = ['RateKey', 'RateLabel', 'RateValue', 'EntryStatus', 'CreateTime']
read_only_fields = ['CreateTime']
class RateTableSerializer(PascalCaseModelSerializer):
Entries = RateEntrySerializer(many=True, read_only=True)
class Meta:
model = RateTable
fields = ['RateTableUUID', 'TableCode', 'TableName', 'TableDescription', 'TableStatus', 'Entries', 'CreateTime']
read_only_fields = ['RateTableUUID', 'CreateTime']
class CommissionRuleSerializer(PascalCaseModelSerializer):
class Meta:
model = CommissionRule
fields = ['RuleUUID', 'EventType', 'RuleName', 'RuleDescription', 'ParticipantRules', 'MaxInviteLevel', 'RulePriority', 'RuleStatus', 'CreateTime']
read_only_fields = ['RuleUUID', 'CreateTime']
class CommissionEventSerializer(PascalCaseModelSerializer):
class Meta:
model = CommissionEvent
fields = ['EventUUID', 'EventType', 'EventKey', 'TotalAmount', 'SourceUserUUID', 'EventPayload', 'Participants', 'EventStatus', 'EventTime', 'CreateTime']
read_only_fields = ['EventUUID', 'CreateTime', 'EventTime']
class CommissionRecordSerializer(PascalCaseModelSerializer):
class Meta:
model = CommissionRecord
fields = ['RecordUUID', 'ParticipantID', 'ParticipantRole', 'SplitType', 'Amount', 'Status', 'TierIndex', 'RuleSnapshot', 'SettleTime', 'CreateTime']
read_only_fields = ['RecordUUID', 'CreateTime', 'SettleTime']
class DispatchRequestSerializer(PascalCaseSerializer):
EventType = serializers.CharField()
EventKey = serializers.CharField()
TotalAmount = serializers.DecimalField(max_digits=18, decimal_places=4)
SourceUserUUID = serializers.CharField(required=False, default='')
Participants = serializers.DictField(required=False, default=dict)
TierIndex = serializers.IntegerField(default=0)
Payload = serializers.DictField(required=False, default=dict)
AutoSettle = serializers.BooleanField(default=True)
class RuleCreateSerializer(PascalCaseSerializer):
EventType = serializers.CharField()
RuleName = serializers.CharField()
ParticipantRules = serializers.ListField()
RuleDescription = serializers.CharField(required=False, default='')
MaxInviteLevel = serializers.IntegerField(default=2)
RateTableUUID = serializers.CharField(required=False, default='')
RulePriority = serializers.IntegerField(default=0)
class RateTableCreateSerializer(PascalCaseSerializer):
TableCode = serializers.CharField()
TableName = serializers.CharField()
Entries = serializers.DictField()
TableDescription = serializers.CharField(required=False, default='')
class PreSettlementSerializer(PascalCaseModelSerializer):
class Meta:
model = PreSettlement
fields = ['SettlementUUID', 'EventKey', 'ExternalPlatform', 'ExternalOrderID', 'ParticipantID', 'ParticipantRole', 'Amount', 'OrderAmount', 'Status', 'ConfirmedBy', 'ConfirmDeadline', 'ConfirmedAt', 'CreateTime']
read_only_fields = ['SettlementUUID', 'CreateTime', 'ConfirmedAt']
class PreSettleRequestSerializer(PascalCaseSerializer):
EventKey = serializers.CharField()
ExternalPlatform = serializers.CharField()
ExternalOrderID = serializers.CharField()
ParticipantID = serializers.CharField()
Amount = serializers.DecimalField(max_digits=18, decimal_places=4)
OrderAmount = serializers.DecimalField(max_digits=18, decimal_places=4, default=0)
ParticipantRole = serializers.CharField(default='worker')
ConfirmDeadline = serializers.DateTimeField(required=False)
class PreSettleConfirmSerializer(PascalCaseSerializer):
EventKey = serializers.CharField()
ParticipantID = serializers.CharField(required=False, default='')
ConfirmedBy = serializers.CharField(required=False, default='')
class FeeCalcSerializer(PascalCaseSerializer):
TotalAmount = serializers.DecimalField(max_digits=18, decimal_places=4)
RateTableCode = serializers.CharField()
RateKey = serializers.CharField()
class InviteChainDispatchSerializer(PascalCaseSerializer):
EventType = serializers.CharField()
EventKey = serializers.CharField()
TotalAmount = serializers.DecimalField(max_digits=18, decimal_places=4)
SourceUserUUID = serializers.CharField()
InviteChain = serializers.ListField()
RuleName = serializers.CharField()
ParticipantRules = serializers.ListField()