ソースを参照

fix:修改小程序聊天消耗token

jimmyyem 3 週間 前
コミット
1fb36a6002

+ 1 - 1
ent/creditbalance.go

@@ -25,7 +25,7 @@ type CreditBalance struct {
 	DeletedAt time.Time `json:"deleted_at,omitempty"`
 	// user_id | 用户ID
 	UserID string `json:"user_id,omitempty"`
-	// role | 角色设定
+	// balance | 积分余额
 	Balance float32 `json:"balance,omitempty"`
 	// status | 状态 1-正常 2-禁用
 	Status int `json:"status,omitempty"`

+ 40 - 0
ent/creditusage/where.go

@@ -414,6 +414,16 @@ func PayNumberLTE(v float32) predicate.CreditUsage {
 	return predicate.CreditUsage(sql.FieldLTE(FieldPayNumber, v))
 }
 
+// PayNumberIsNil applies the IsNil predicate on the "pay_number" field.
+func PayNumberIsNil() predicate.CreditUsage {
+	return predicate.CreditUsage(sql.FieldIsNull(FieldPayNumber))
+}
+
+// PayNumberNotNil applies the NotNil predicate on the "pay_number" field.
+func PayNumberNotNil() predicate.CreditUsage {
+	return predicate.CreditUsage(sql.FieldNotNull(FieldPayNumber))
+}
+
 // BeforeNumberEQ applies the EQ predicate on the "before_number" field.
 func BeforeNumberEQ(v float32) predicate.CreditUsage {
 	return predicate.CreditUsage(sql.FieldEQ(FieldBeforeNumber, v))
@@ -454,6 +464,16 @@ func BeforeNumberLTE(v float32) predicate.CreditUsage {
 	return predicate.CreditUsage(sql.FieldLTE(FieldBeforeNumber, v))
 }
 
+// BeforeNumberIsNil applies the IsNil predicate on the "before_number" field.
+func BeforeNumberIsNil() predicate.CreditUsage {
+	return predicate.CreditUsage(sql.FieldIsNull(FieldBeforeNumber))
+}
+
+// BeforeNumberNotNil applies the NotNil predicate on the "before_number" field.
+func BeforeNumberNotNil() predicate.CreditUsage {
+	return predicate.CreditUsage(sql.FieldNotNull(FieldBeforeNumber))
+}
+
 // AfterNumberEQ applies the EQ predicate on the "after_number" field.
 func AfterNumberEQ(v float32) predicate.CreditUsage {
 	return predicate.CreditUsage(sql.FieldEQ(FieldAfterNumber, v))
@@ -494,6 +514,16 @@ func AfterNumberLTE(v float32) predicate.CreditUsage {
 	return predicate.CreditUsage(sql.FieldLTE(FieldAfterNumber, v))
 }
 
+// AfterNumberIsNil applies the IsNil predicate on the "after_number" field.
+func AfterNumberIsNil() predicate.CreditUsage {
+	return predicate.CreditUsage(sql.FieldIsNull(FieldAfterNumber))
+}
+
+// AfterNumberNotNil applies the NotNil predicate on the "after_number" field.
+func AfterNumberNotNil() predicate.CreditUsage {
+	return predicate.CreditUsage(sql.FieldNotNull(FieldAfterNumber))
+}
+
 // PayMethodEQ applies the EQ predicate on the "pay_method" field.
 func PayMethodEQ(v string) predicate.CreditUsage {
 	return predicate.CreditUsage(sql.FieldEQ(FieldPayMethod, v))
@@ -549,6 +579,16 @@ func PayMethodHasSuffix(v string) predicate.CreditUsage {
 	return predicate.CreditUsage(sql.FieldHasSuffix(FieldPayMethod, v))
 }
 
+// PayMethodIsNil applies the IsNil predicate on the "pay_method" field.
+func PayMethodIsNil() predicate.CreditUsage {
+	return predicate.CreditUsage(sql.FieldIsNull(FieldPayMethod))
+}
+
+// PayMethodNotNil applies the NotNil predicate on the "pay_method" field.
+func PayMethodNotNil() predicate.CreditUsage {
+	return predicate.CreditUsage(sql.FieldNotNull(FieldPayMethod))
+}
+
 // PayMethodEqualFold applies the EqualFold predicate on the "pay_method" field.
 func PayMethodEqualFold(v string) predicate.CreditUsage {
 	return predicate.CreditUsage(sql.FieldEqualFold(FieldPayMethod, v))

+ 112 - 12
ent/creditusage_create.go

@@ -90,24 +90,56 @@ func (cuc *CreditUsageCreate) SetPayNumber(f float32) *CreditUsageCreate {
 	return cuc
 }
 
+// SetNillablePayNumber sets the "pay_number" field if the given value is not nil.
+func (cuc *CreditUsageCreate) SetNillablePayNumber(f *float32) *CreditUsageCreate {
+	if f != nil {
+		cuc.SetPayNumber(*f)
+	}
+	return cuc
+}
+
 // SetBeforeNumber sets the "before_number" field.
 func (cuc *CreditUsageCreate) SetBeforeNumber(f float32) *CreditUsageCreate {
 	cuc.mutation.SetBeforeNumber(f)
 	return cuc
 }
 
+// SetNillableBeforeNumber sets the "before_number" field if the given value is not nil.
+func (cuc *CreditUsageCreate) SetNillableBeforeNumber(f *float32) *CreditUsageCreate {
+	if f != nil {
+		cuc.SetBeforeNumber(*f)
+	}
+	return cuc
+}
+
 // SetAfterNumber sets the "after_number" field.
 func (cuc *CreditUsageCreate) SetAfterNumber(f float32) *CreditUsageCreate {
 	cuc.mutation.SetAfterNumber(f)
 	return cuc
 }
 
+// SetNillableAfterNumber sets the "after_number" field if the given value is not nil.
+func (cuc *CreditUsageCreate) SetNillableAfterNumber(f *float32) *CreditUsageCreate {
+	if f != nil {
+		cuc.SetAfterNumber(*f)
+	}
+	return cuc
+}
+
 // SetPayMethod sets the "pay_method" field.
 func (cuc *CreditUsageCreate) SetPayMethod(s string) *CreditUsageCreate {
 	cuc.mutation.SetPayMethod(s)
 	return cuc
 }
 
+// SetNillablePayMethod sets the "pay_method" field if the given value is not nil.
+func (cuc *CreditUsageCreate) SetNillablePayMethod(s *string) *CreditUsageCreate {
+	if s != nil {
+		cuc.SetPayMethod(*s)
+	}
+	return cuc
+}
+
 // SetStatus sets the "status" field.
 func (cuc *CreditUsageCreate) SetStatus(i int) *CreditUsageCreate {
 	cuc.mutation.SetStatus(i)
@@ -306,18 +338,6 @@ func (cuc *CreditUsageCreate) check() error {
 	if _, ok := cuc.mutation.Number(); !ok {
 		return &ValidationError{Name: "number", err: errors.New(`ent: missing required field "CreditUsage.number"`)}
 	}
-	if _, ok := cuc.mutation.PayNumber(); !ok {
-		return &ValidationError{Name: "pay_number", err: errors.New(`ent: missing required field "CreditUsage.pay_number"`)}
-	}
-	if _, ok := cuc.mutation.BeforeNumber(); !ok {
-		return &ValidationError{Name: "before_number", err: errors.New(`ent: missing required field "CreditUsage.before_number"`)}
-	}
-	if _, ok := cuc.mutation.AfterNumber(); !ok {
-		return &ValidationError{Name: "after_number", err: errors.New(`ent: missing required field "CreditUsage.after_number"`)}
-	}
-	if _, ok := cuc.mutation.PayMethod(); !ok {
-		return &ValidationError{Name: "pay_method", err: errors.New(`ent: missing required field "CreditUsage.pay_method"`)}
-	}
 	if v, ok := cuc.mutation.Status(); ok {
 		if err := creditusage.StatusValidator(v); err != nil {
 			return &ValidationError{Name: "status", err: fmt.Errorf(`ent: validator failed for field "CreditUsage.status": %w`, err)}
@@ -581,6 +601,12 @@ func (u *CreditUsageUpsert) AddPayNumber(v float32) *CreditUsageUpsert {
 	return u
 }
 
+// ClearPayNumber clears the value of the "pay_number" field.
+func (u *CreditUsageUpsert) ClearPayNumber() *CreditUsageUpsert {
+	u.SetNull(creditusage.FieldPayNumber)
+	return u
+}
+
 // SetBeforeNumber sets the "before_number" field.
 func (u *CreditUsageUpsert) SetBeforeNumber(v float32) *CreditUsageUpsert {
 	u.Set(creditusage.FieldBeforeNumber, v)
@@ -599,6 +625,12 @@ func (u *CreditUsageUpsert) AddBeforeNumber(v float32) *CreditUsageUpsert {
 	return u
 }
 
+// ClearBeforeNumber clears the value of the "before_number" field.
+func (u *CreditUsageUpsert) ClearBeforeNumber() *CreditUsageUpsert {
+	u.SetNull(creditusage.FieldBeforeNumber)
+	return u
+}
+
 // SetAfterNumber sets the "after_number" field.
 func (u *CreditUsageUpsert) SetAfterNumber(v float32) *CreditUsageUpsert {
 	u.Set(creditusage.FieldAfterNumber, v)
@@ -617,6 +649,12 @@ func (u *CreditUsageUpsert) AddAfterNumber(v float32) *CreditUsageUpsert {
 	return u
 }
 
+// ClearAfterNumber clears the value of the "after_number" field.
+func (u *CreditUsageUpsert) ClearAfterNumber() *CreditUsageUpsert {
+	u.SetNull(creditusage.FieldAfterNumber)
+	return u
+}
+
 // SetPayMethod sets the "pay_method" field.
 func (u *CreditUsageUpsert) SetPayMethod(v string) *CreditUsageUpsert {
 	u.Set(creditusage.FieldPayMethod, v)
@@ -629,6 +667,12 @@ func (u *CreditUsageUpsert) UpdatePayMethod() *CreditUsageUpsert {
 	return u
 }
 
+// ClearPayMethod clears the value of the "pay_method" field.
+func (u *CreditUsageUpsert) ClearPayMethod() *CreditUsageUpsert {
+	u.SetNull(creditusage.FieldPayMethod)
+	return u
+}
+
 // SetStatus sets the "status" field.
 func (u *CreditUsageUpsert) SetStatus(v int) *CreditUsageUpsert {
 	u.Set(creditusage.FieldStatus, v)
@@ -898,6 +942,13 @@ func (u *CreditUsageUpsertOne) UpdatePayNumber() *CreditUsageUpsertOne {
 	})
 }
 
+// ClearPayNumber clears the value of the "pay_number" field.
+func (u *CreditUsageUpsertOne) ClearPayNumber() *CreditUsageUpsertOne {
+	return u.Update(func(s *CreditUsageUpsert) {
+		s.ClearPayNumber()
+	})
+}
+
 // SetBeforeNumber sets the "before_number" field.
 func (u *CreditUsageUpsertOne) SetBeforeNumber(v float32) *CreditUsageUpsertOne {
 	return u.Update(func(s *CreditUsageUpsert) {
@@ -919,6 +970,13 @@ func (u *CreditUsageUpsertOne) UpdateBeforeNumber() *CreditUsageUpsertOne {
 	})
 }
 
+// ClearBeforeNumber clears the value of the "before_number" field.
+func (u *CreditUsageUpsertOne) ClearBeforeNumber() *CreditUsageUpsertOne {
+	return u.Update(func(s *CreditUsageUpsert) {
+		s.ClearBeforeNumber()
+	})
+}
+
 // SetAfterNumber sets the "after_number" field.
 func (u *CreditUsageUpsertOne) SetAfterNumber(v float32) *CreditUsageUpsertOne {
 	return u.Update(func(s *CreditUsageUpsert) {
@@ -940,6 +998,13 @@ func (u *CreditUsageUpsertOne) UpdateAfterNumber() *CreditUsageUpsertOne {
 	})
 }
 
+// ClearAfterNumber clears the value of the "after_number" field.
+func (u *CreditUsageUpsertOne) ClearAfterNumber() *CreditUsageUpsertOne {
+	return u.Update(func(s *CreditUsageUpsert) {
+		s.ClearAfterNumber()
+	})
+}
+
 // SetPayMethod sets the "pay_method" field.
 func (u *CreditUsageUpsertOne) SetPayMethod(v string) *CreditUsageUpsertOne {
 	return u.Update(func(s *CreditUsageUpsert) {
@@ -954,6 +1019,13 @@ func (u *CreditUsageUpsertOne) UpdatePayMethod() *CreditUsageUpsertOne {
 	})
 }
 
+// ClearPayMethod clears the value of the "pay_method" field.
+func (u *CreditUsageUpsertOne) ClearPayMethod() *CreditUsageUpsertOne {
+	return u.Update(func(s *CreditUsageUpsert) {
+		s.ClearPayMethod()
+	})
+}
+
 // SetStatus sets the "status" field.
 func (u *CreditUsageUpsertOne) SetStatus(v int) *CreditUsageUpsertOne {
 	return u.Update(func(s *CreditUsageUpsert) {
@@ -1409,6 +1481,13 @@ func (u *CreditUsageUpsertBulk) UpdatePayNumber() *CreditUsageUpsertBulk {
 	})
 }
 
+// ClearPayNumber clears the value of the "pay_number" field.
+func (u *CreditUsageUpsertBulk) ClearPayNumber() *CreditUsageUpsertBulk {
+	return u.Update(func(s *CreditUsageUpsert) {
+		s.ClearPayNumber()
+	})
+}
+
 // SetBeforeNumber sets the "before_number" field.
 func (u *CreditUsageUpsertBulk) SetBeforeNumber(v float32) *CreditUsageUpsertBulk {
 	return u.Update(func(s *CreditUsageUpsert) {
@@ -1430,6 +1509,13 @@ func (u *CreditUsageUpsertBulk) UpdateBeforeNumber() *CreditUsageUpsertBulk {
 	})
 }
 
+// ClearBeforeNumber clears the value of the "before_number" field.
+func (u *CreditUsageUpsertBulk) ClearBeforeNumber() *CreditUsageUpsertBulk {
+	return u.Update(func(s *CreditUsageUpsert) {
+		s.ClearBeforeNumber()
+	})
+}
+
 // SetAfterNumber sets the "after_number" field.
 func (u *CreditUsageUpsertBulk) SetAfterNumber(v float32) *CreditUsageUpsertBulk {
 	return u.Update(func(s *CreditUsageUpsert) {
@@ -1451,6 +1537,13 @@ func (u *CreditUsageUpsertBulk) UpdateAfterNumber() *CreditUsageUpsertBulk {
 	})
 }
 
+// ClearAfterNumber clears the value of the "after_number" field.
+func (u *CreditUsageUpsertBulk) ClearAfterNumber() *CreditUsageUpsertBulk {
+	return u.Update(func(s *CreditUsageUpsert) {
+		s.ClearAfterNumber()
+	})
+}
+
 // SetPayMethod sets the "pay_method" field.
 func (u *CreditUsageUpsertBulk) SetPayMethod(v string) *CreditUsageUpsertBulk {
 	return u.Update(func(s *CreditUsageUpsert) {
@@ -1465,6 +1558,13 @@ func (u *CreditUsageUpsertBulk) UpdatePayMethod() *CreditUsageUpsertBulk {
 	})
 }
 
+// ClearPayMethod clears the value of the "pay_method" field.
+func (u *CreditUsageUpsertBulk) ClearPayMethod() *CreditUsageUpsertBulk {
+	return u.Update(func(s *CreditUsageUpsert) {
+		s.ClearPayMethod()
+	})
+}
+
 // SetStatus sets the "status" field.
 func (u *CreditUsageUpsertBulk) SetStatus(v int) *CreditUsageUpsertBulk {
 	return u.Update(func(s *CreditUsageUpsert) {

+ 72 - 0
ent/creditusage_update.go

@@ -116,6 +116,12 @@ func (cuu *CreditUsageUpdate) AddPayNumber(f float32) *CreditUsageUpdate {
 	return cuu
 }
 
+// ClearPayNumber clears the value of the "pay_number" field.
+func (cuu *CreditUsageUpdate) ClearPayNumber() *CreditUsageUpdate {
+	cuu.mutation.ClearPayNumber()
+	return cuu
+}
+
 // SetBeforeNumber sets the "before_number" field.
 func (cuu *CreditUsageUpdate) SetBeforeNumber(f float32) *CreditUsageUpdate {
 	cuu.mutation.ResetBeforeNumber()
@@ -137,6 +143,12 @@ func (cuu *CreditUsageUpdate) AddBeforeNumber(f float32) *CreditUsageUpdate {
 	return cuu
 }
 
+// ClearBeforeNumber clears the value of the "before_number" field.
+func (cuu *CreditUsageUpdate) ClearBeforeNumber() *CreditUsageUpdate {
+	cuu.mutation.ClearBeforeNumber()
+	return cuu
+}
+
 // SetAfterNumber sets the "after_number" field.
 func (cuu *CreditUsageUpdate) SetAfterNumber(f float32) *CreditUsageUpdate {
 	cuu.mutation.ResetAfterNumber()
@@ -158,6 +170,12 @@ func (cuu *CreditUsageUpdate) AddAfterNumber(f float32) *CreditUsageUpdate {
 	return cuu
 }
 
+// ClearAfterNumber clears the value of the "after_number" field.
+func (cuu *CreditUsageUpdate) ClearAfterNumber() *CreditUsageUpdate {
+	cuu.mutation.ClearAfterNumber()
+	return cuu
+}
+
 // SetPayMethod sets the "pay_method" field.
 func (cuu *CreditUsageUpdate) SetPayMethod(s string) *CreditUsageUpdate {
 	cuu.mutation.SetPayMethod(s)
@@ -172,6 +190,12 @@ func (cuu *CreditUsageUpdate) SetNillablePayMethod(s *string) *CreditUsageUpdate
 	return cuu
 }
 
+// ClearPayMethod clears the value of the "pay_method" field.
+func (cuu *CreditUsageUpdate) ClearPayMethod() *CreditUsageUpdate {
+	cuu.mutation.ClearPayMethod()
+	return cuu
+}
+
 // SetStatus sets the "status" field.
 func (cuu *CreditUsageUpdate) SetStatus(i int) *CreditUsageUpdate {
 	cuu.mutation.ResetStatus()
@@ -421,21 +445,33 @@ func (cuu *CreditUsageUpdate) sqlSave(ctx context.Context) (n int, err error) {
 	if value, ok := cuu.mutation.AddedPayNumber(); ok {
 		_spec.AddField(creditusage.FieldPayNumber, field.TypeFloat32, value)
 	}
+	if cuu.mutation.PayNumberCleared() {
+		_spec.ClearField(creditusage.FieldPayNumber, field.TypeFloat32)
+	}
 	if value, ok := cuu.mutation.BeforeNumber(); ok {
 		_spec.SetField(creditusage.FieldBeforeNumber, field.TypeFloat32, value)
 	}
 	if value, ok := cuu.mutation.AddedBeforeNumber(); ok {
 		_spec.AddField(creditusage.FieldBeforeNumber, field.TypeFloat32, value)
 	}
+	if cuu.mutation.BeforeNumberCleared() {
+		_spec.ClearField(creditusage.FieldBeforeNumber, field.TypeFloat32)
+	}
 	if value, ok := cuu.mutation.AfterNumber(); ok {
 		_spec.SetField(creditusage.FieldAfterNumber, field.TypeFloat32, value)
 	}
 	if value, ok := cuu.mutation.AddedAfterNumber(); ok {
 		_spec.AddField(creditusage.FieldAfterNumber, field.TypeFloat32, value)
 	}
+	if cuu.mutation.AfterNumberCleared() {
+		_spec.ClearField(creditusage.FieldAfterNumber, field.TypeFloat32)
+	}
 	if value, ok := cuu.mutation.PayMethod(); ok {
 		_spec.SetField(creditusage.FieldPayMethod, field.TypeString, value)
 	}
+	if cuu.mutation.PayMethodCleared() {
+		_spec.ClearField(creditusage.FieldPayMethod, field.TypeString)
+	}
 	if value, ok := cuu.mutation.Status(); ok {
 		_spec.SetField(creditusage.FieldStatus, field.TypeInt, value)
 	}
@@ -583,6 +619,12 @@ func (cuuo *CreditUsageUpdateOne) AddPayNumber(f float32) *CreditUsageUpdateOne
 	return cuuo
 }
 
+// ClearPayNumber clears the value of the "pay_number" field.
+func (cuuo *CreditUsageUpdateOne) ClearPayNumber() *CreditUsageUpdateOne {
+	cuuo.mutation.ClearPayNumber()
+	return cuuo
+}
+
 // SetBeforeNumber sets the "before_number" field.
 func (cuuo *CreditUsageUpdateOne) SetBeforeNumber(f float32) *CreditUsageUpdateOne {
 	cuuo.mutation.ResetBeforeNumber()
@@ -604,6 +646,12 @@ func (cuuo *CreditUsageUpdateOne) AddBeforeNumber(f float32) *CreditUsageUpdateO
 	return cuuo
 }
 
+// ClearBeforeNumber clears the value of the "before_number" field.
+func (cuuo *CreditUsageUpdateOne) ClearBeforeNumber() *CreditUsageUpdateOne {
+	cuuo.mutation.ClearBeforeNumber()
+	return cuuo
+}
+
 // SetAfterNumber sets the "after_number" field.
 func (cuuo *CreditUsageUpdateOne) SetAfterNumber(f float32) *CreditUsageUpdateOne {
 	cuuo.mutation.ResetAfterNumber()
@@ -625,6 +673,12 @@ func (cuuo *CreditUsageUpdateOne) AddAfterNumber(f float32) *CreditUsageUpdateOn
 	return cuuo
 }
 
+// ClearAfterNumber clears the value of the "after_number" field.
+func (cuuo *CreditUsageUpdateOne) ClearAfterNumber() *CreditUsageUpdateOne {
+	cuuo.mutation.ClearAfterNumber()
+	return cuuo
+}
+
 // SetPayMethod sets the "pay_method" field.
 func (cuuo *CreditUsageUpdateOne) SetPayMethod(s string) *CreditUsageUpdateOne {
 	cuuo.mutation.SetPayMethod(s)
@@ -639,6 +693,12 @@ func (cuuo *CreditUsageUpdateOne) SetNillablePayMethod(s *string) *CreditUsageUp
 	return cuuo
 }
 
+// ClearPayMethod clears the value of the "pay_method" field.
+func (cuuo *CreditUsageUpdateOne) ClearPayMethod() *CreditUsageUpdateOne {
+	cuuo.mutation.ClearPayMethod()
+	return cuuo
+}
+
 // SetStatus sets the "status" field.
 func (cuuo *CreditUsageUpdateOne) SetStatus(i int) *CreditUsageUpdateOne {
 	cuuo.mutation.ResetStatus()
@@ -918,21 +978,33 @@ func (cuuo *CreditUsageUpdateOne) sqlSave(ctx context.Context) (_node *CreditUsa
 	if value, ok := cuuo.mutation.AddedPayNumber(); ok {
 		_spec.AddField(creditusage.FieldPayNumber, field.TypeFloat32, value)
 	}
+	if cuuo.mutation.PayNumberCleared() {
+		_spec.ClearField(creditusage.FieldPayNumber, field.TypeFloat32)
+	}
 	if value, ok := cuuo.mutation.BeforeNumber(); ok {
 		_spec.SetField(creditusage.FieldBeforeNumber, field.TypeFloat32, value)
 	}
 	if value, ok := cuuo.mutation.AddedBeforeNumber(); ok {
 		_spec.AddField(creditusage.FieldBeforeNumber, field.TypeFloat32, value)
 	}
+	if cuuo.mutation.BeforeNumberCleared() {
+		_spec.ClearField(creditusage.FieldBeforeNumber, field.TypeFloat32)
+	}
 	if value, ok := cuuo.mutation.AfterNumber(); ok {
 		_spec.SetField(creditusage.FieldAfterNumber, field.TypeFloat32, value)
 	}
 	if value, ok := cuuo.mutation.AddedAfterNumber(); ok {
 		_spec.AddField(creditusage.FieldAfterNumber, field.TypeFloat32, value)
 	}
+	if cuuo.mutation.AfterNumberCleared() {
+		_spec.ClearField(creditusage.FieldAfterNumber, field.TypeFloat32)
+	}
 	if value, ok := cuuo.mutation.PayMethod(); ok {
 		_spec.SetField(creditusage.FieldPayMethod, field.TypeString, value)
 	}
+	if cuuo.mutation.PayMethodCleared() {
+		_spec.ClearField(creditusage.FieldPayMethod, field.TypeString)
+	}
 	if value, ok := cuuo.mutation.Status(); ok {
 		_spec.SetField(creditusage.FieldStatus, field.TypeInt, value)
 	}

+ 5 - 5
ent/migrate/schema.go

@@ -342,7 +342,7 @@ var (
 		{Name: "updated_at", Type: field.TypeTime, Comment: "Update Time | 修改日期"},
 		{Name: "deleted_at", Type: field.TypeTime, Nullable: true, Comment: "Delete Time | 删除日期"},
 		{Name: "user_id", Type: field.TypeString, Nullable: true, Comment: "user_id | 用户ID"},
-		{Name: "balance", Type: field.TypeFloat32, Comment: "role | 角色设定"},
+		{Name: "balance", Type: field.TypeFloat32, Comment: "balance | 积分余额"},
 		{Name: "status", Type: field.TypeInt, Nullable: true, Comment: "status | 状态 1-正常 2-禁用", Default: 1},
 		{Name: "organization_id", Type: field.TypeUint64, Nullable: true, Comment: "organization_id | 租户ID"},
 	}
@@ -372,10 +372,10 @@ var (
 		{Name: "deleted_at", Type: field.TypeTime, Nullable: true, Comment: "Delete Time | 删除日期"},
 		{Name: "user_id", Type: field.TypeString, Nullable: true, Size: 255, Comment: "user_id | 用户ID"},
 		{Name: "number", Type: field.TypeFloat32, Comment: "number | 积分改变量"},
-		{Name: "pay_number", Type: field.TypeFloat32, Comment: "pay_number | 充值金额"},
-		{Name: "before_number", Type: field.TypeFloat32, Comment: "before_number | 变动前金额"},
-		{Name: "after_number", Type: field.TypeFloat32, Comment: "after_number | 变动后金额"},
-		{Name: "pay_method", Type: field.TypeString, Comment: "pay_method | 充值方式"},
+		{Name: "pay_number", Type: field.TypeFloat32, Nullable: true, Comment: "pay_number | 充值金额"},
+		{Name: "before_number", Type: field.TypeFloat32, Nullable: true, Comment: "before_number | 变动前金额"},
+		{Name: "after_number", Type: field.TypeFloat32, Nullable: true, Comment: "after_number | 变动后金额"},
+		{Name: "pay_method", Type: field.TypeString, Nullable: true, Comment: "pay_method | 充值方式"},
 		{Name: "status", Type: field.TypeInt, Nullable: true, Comment: "status | 状态 1-正常 2-禁用", Default: 1},
 		{Name: "ntype", Type: field.TypeInt, Comment: "ntype | 积分变化类型:1-消耗 2-增加", Default: 1},
 		{Name: "table", Type: field.TypeString, Comment: "table | 积分变化表名", Default: ""},

+ 79 - 0
ent/mutation.go

@@ -13827,10 +13827,24 @@ func (m *CreditUsageMutation) AddedPayNumber() (r float32, exists bool) {
 	return *v, true
 }
 
+// ClearPayNumber clears the value of the "pay_number" field.
+func (m *CreditUsageMutation) ClearPayNumber() {
+	m.pay_number = nil
+	m.addpay_number = nil
+	m.clearedFields[creditusage.FieldPayNumber] = struct{}{}
+}
+
+// PayNumberCleared returns if the "pay_number" field was cleared in this mutation.
+func (m *CreditUsageMutation) PayNumberCleared() bool {
+	_, ok := m.clearedFields[creditusage.FieldPayNumber]
+	return ok
+}
+
 // ResetPayNumber resets all changes to the "pay_number" field.
 func (m *CreditUsageMutation) ResetPayNumber() {
 	m.pay_number = nil
 	m.addpay_number = nil
+	delete(m.clearedFields, creditusage.FieldPayNumber)
 }
 
 // SetBeforeNumber sets the "before_number" field.
@@ -13883,10 +13897,24 @@ func (m *CreditUsageMutation) AddedBeforeNumber() (r float32, exists bool) {
 	return *v, true
 }
 
+// ClearBeforeNumber clears the value of the "before_number" field.
+func (m *CreditUsageMutation) ClearBeforeNumber() {
+	m.before_number = nil
+	m.addbefore_number = nil
+	m.clearedFields[creditusage.FieldBeforeNumber] = struct{}{}
+}
+
+// BeforeNumberCleared returns if the "before_number" field was cleared in this mutation.
+func (m *CreditUsageMutation) BeforeNumberCleared() bool {
+	_, ok := m.clearedFields[creditusage.FieldBeforeNumber]
+	return ok
+}
+
 // ResetBeforeNumber resets all changes to the "before_number" field.
 func (m *CreditUsageMutation) ResetBeforeNumber() {
 	m.before_number = nil
 	m.addbefore_number = nil
+	delete(m.clearedFields, creditusage.FieldBeforeNumber)
 }
 
 // SetAfterNumber sets the "after_number" field.
@@ -13939,10 +13967,24 @@ func (m *CreditUsageMutation) AddedAfterNumber() (r float32, exists bool) {
 	return *v, true
 }
 
+// ClearAfterNumber clears the value of the "after_number" field.
+func (m *CreditUsageMutation) ClearAfterNumber() {
+	m.after_number = nil
+	m.addafter_number = nil
+	m.clearedFields[creditusage.FieldAfterNumber] = struct{}{}
+}
+
+// AfterNumberCleared returns if the "after_number" field was cleared in this mutation.
+func (m *CreditUsageMutation) AfterNumberCleared() bool {
+	_, ok := m.clearedFields[creditusage.FieldAfterNumber]
+	return ok
+}
+
 // ResetAfterNumber resets all changes to the "after_number" field.
 func (m *CreditUsageMutation) ResetAfterNumber() {
 	m.after_number = nil
 	m.addafter_number = nil
+	delete(m.clearedFields, creditusage.FieldAfterNumber)
 }
 
 // SetPayMethod sets the "pay_method" field.
@@ -13976,9 +14018,22 @@ func (m *CreditUsageMutation) OldPayMethod(ctx context.Context) (v string, err e
 	return oldValue.PayMethod, nil
 }
 
+// ClearPayMethod clears the value of the "pay_method" field.
+func (m *CreditUsageMutation) ClearPayMethod() {
+	m.pay_method = nil
+	m.clearedFields[creditusage.FieldPayMethod] = struct{}{}
+}
+
+// PayMethodCleared returns if the "pay_method" field was cleared in this mutation.
+func (m *CreditUsageMutation) PayMethodCleared() bool {
+	_, ok := m.clearedFields[creditusage.FieldPayMethod]
+	return ok
+}
+
 // ResetPayMethod resets all changes to the "pay_method" field.
 func (m *CreditUsageMutation) ResetPayMethod() {
 	m.pay_method = nil
+	delete(m.clearedFields, creditusage.FieldPayMethod)
 }
 
 // SetStatus sets the "status" field.
@@ -14761,6 +14816,18 @@ func (m *CreditUsageMutation) ClearedFields() []string {
 	if m.FieldCleared(creditusage.FieldUserID) {
 		fields = append(fields, creditusage.FieldUserID)
 	}
+	if m.FieldCleared(creditusage.FieldPayNumber) {
+		fields = append(fields, creditusage.FieldPayNumber)
+	}
+	if m.FieldCleared(creditusage.FieldBeforeNumber) {
+		fields = append(fields, creditusage.FieldBeforeNumber)
+	}
+	if m.FieldCleared(creditusage.FieldAfterNumber) {
+		fields = append(fields, creditusage.FieldAfterNumber)
+	}
+	if m.FieldCleared(creditusage.FieldPayMethod) {
+		fields = append(fields, creditusage.FieldPayMethod)
+	}
 	if m.FieldCleared(creditusage.FieldStatus) {
 		fields = append(fields, creditusage.FieldStatus)
 	}
@@ -14787,6 +14854,18 @@ func (m *CreditUsageMutation) ClearField(name string) error {
 	case creditusage.FieldUserID:
 		m.ClearUserID()
 		return nil
+	case creditusage.FieldPayNumber:
+		m.ClearPayNumber()
+		return nil
+	case creditusage.FieldBeforeNumber:
+		m.ClearBeforeNumber()
+		return nil
+	case creditusage.FieldAfterNumber:
+		m.ClearAfterNumber()
+		return nil
+	case creditusage.FieldPayMethod:
+		m.ClearPayMethod()
+		return nil
 	case creditusage.FieldStatus:
 		m.ClearStatus()
 		return nil

+ 1 - 1
ent/schema/credit_balance.go

@@ -18,7 +18,7 @@ type CreditBalance struct {
 func (CreditBalance) Fields() []ent.Field {
 	return []ent.Field{
 		field.String("user_id").Optional().Comment("user_id | 用户ID"),
-		field.Float32("balance").Comment("role | 角色设定"),
+		field.Float32("balance").Comment("balance | 积分余额"),
 		field.Int("status").Optional().Range(1, 2).Default(1).Comment("status | 状态 1-正常 2-禁用"),
 		field.Uint64("organization_id").Optional().Comment("organization_id | 租户ID"),
 	}

+ 4 - 4
ent/schema/credit_usage.go

@@ -19,10 +19,10 @@ func (CreditUsage) Fields() []ent.Field {
 	return []ent.Field{
 		field.String("user_id").Optional().MaxLen(255).Comment("user_id | 用户ID"),
 		field.Float32("number").Comment("number | 积分改变量"),
-		field.Float32("pay_number").Comment("pay_number | 充值金额"),
-		field.Float32("before_number").Comment("before_number | 变动前金额"),
-		field.Float32("after_number").Comment("after_number | 变动后金额"),
-		field.String("pay_method").Comment("pay_method | 充值方式"),
+		field.Float32("pay_number").Optional().Comment("pay_number | 充值金额"),
+		field.Float32("before_number").Optional().Comment("before_number | 变动前金额"),
+		field.Float32("after_number").Optional().Comment("after_number | 变动后金额"),
+		field.String("pay_method").Optional().Comment("pay_method | 充值方式"),
 		field.Int("status").Optional().Range(1, 2).Default(1).Comment("status | 状态 1-正常 2-禁用"),
 		field.Int("ntype").Default(1).Comment("ntype | 积分变化类型:1-消耗 2-增加"),
 		field.String("table").Default("").Comment("table | 积分变化表名"),

+ 63 - 10
internal/logic/chatrecords/gpts_submit_api_chat_logic.go

@@ -7,6 +7,7 @@ import (
 	"encoding/json"
 	"fmt"
 	"github.com/suyuan32/simple-admin-core/rpc/types/core"
+	"github.com/zeromicro/go-zero/core/logx"
 	"io"
 	"math"
 	"net/http"
@@ -17,14 +18,12 @@ import (
 	"wechat-api/ent/creditbalance"
 	"wechat-api/ent/custom_types"
 	"wechat-api/ent/employee"
+	"wechat-api/ent/usagetotal"
 	"wechat-api/hook/dify"
-	"wechat-api/internal/utils"
-	jwtutils "wechat-api/internal/utils/jwt"
-
 	"wechat-api/internal/svc"
 	"wechat-api/internal/types"
-
-	"github.com/zeromicro/go-zero/core/logx"
+	"wechat-api/internal/utils"
+	jwtutils "wechat-api/internal/utils/jwt"
 )
 
 type GptsSubmitApiChatLogic struct {
@@ -56,6 +55,7 @@ func (l *GptsSubmitApiChatLogic) GptsSubmitApiChat(tokenStr string, req *types.G
 		return
 	}
 
+	//userId, ok := "0190ee30-2b0c-739e-88e2-c59d4d1175c1", true
 	userId, ok := claims["userId"].(string) //用户的uuid
 	if !ok || userId == "" {
 		jsonData := ChatMessage{}
@@ -67,6 +67,7 @@ func (l *GptsSubmitApiChatLogic) GptsSubmitApiChat(tokenStr string, req *types.G
 	}
 	userInfo, _ := l.svcCtx.CoreRpc.GetUserById(l.ctx, &core.UUIDReq{Id: userId})
 	valid := utils.CheckGptLogin(userInfo.RoleIds)
+	//l.Logger.Error(valid)
 	if !valid {
 		jsonData := ChatMessage{}
 		jsonData.NeedLogin = true
@@ -80,7 +81,7 @@ func (l *GptsSubmitApiChatLogic) GptsSubmitApiChat(tokenStr string, req *types.G
 	// 先查用户的积分余额,如果不足 则查租户的积分余额
 	var switcher bool
 	var balance float32
-	//switcher = true	//TODO 打开这里就是开始计费,并且会记录使用积分和token的信息
+	switcher = true //TODO 打开这里就是开始计费,并且会记录使用积分和token的信息
 	creditBalance, err := l.svcCtx.DB.CreditBalance.Query().Where(creditbalance.OrganizationID(*userInfo.DepartmentId)).Only(l.ctx)
 	if switcher {
 		if err != nil {
@@ -95,6 +96,7 @@ func (l *GptsSubmitApiChatLogic) GptsSubmitApiChat(tokenStr string, req *types.G
 			}
 		}
 
+		//l.Logger.Error(balance)
 		if balance <= 0 {
 			jsonData := ChatMessage{}
 			jsonData.NeedPay = true
@@ -209,7 +211,7 @@ func (l *GptsSubmitApiChatLogic) GptsSubmitApiChat(tokenStr string, req *types.G
 						SetType(3).            //1-微信 2-名片 3-智能体
 						SetBotID(agentId).     //智能体ID
 						SetReceiverID(userId). //接收者userID
-						SetApp(8). //8-智能体
+						SetApp(8).             //8-智能体
 						SetSessionID(0).
 						SetRequest(*req.Content).
 						SetResponse(answer).
@@ -224,13 +226,56 @@ func (l *GptsSubmitApiChatLogic) GptsSubmitApiChat(tokenStr string, req *types.G
 						l.Logger.Errorf("save data to usage_detail error:%v\n", err)
 					}
 
+					// 记录Token使用总量
+					usageTotal, err := tx.UsageTotal.Query().Where(usagetotal.OrganizationID(*userInfo.DepartmentId)).First(l.ctx)
+					if err != nil {
+						if ent.IsNotFound(err) {
+							usageTotal, err = tx.UsageTotal.Create().
+								SetOrganizationID(*userInfo.DepartmentId).
+								SetTotalTokens(0).
+								Save(l.ctx)
+						} else {
+							_ = tx.Rollback()
+							l.Logger.Errorf("create usage_total failed:departmentId:%v err:%v\n", *userInfo.DepartmentId, err)
+						}
+					}
+					_, err = tx.UsageTotal.Update().
+						Where(usagetotal.OrganizationID(*userInfo.DepartmentId)).
+						SetTotalTokens(usageTotal.TotalTokens + chatData.Metadata.Usage.TotalTokens).
+						SetEndIndex(usageDetailItem.ID).
+						Save(l.ctx)
+					if err != nil {
+						_ = tx.Rollback()
+						l.Logger.Errorf("update usage_total failed:departmentId:%v err:%v\n", *userInfo.DepartmentId, err)
+					}
+
 					// 积分明细表记录使用量
-					// 根据1:1000 根据Token换算积分使用量
-					change := float64(chatData.Metadata.Usage.TotalTokens) / float64(1000)
-					number := float32(math.Round(change*1000) / 1000)
+					// 根据1积分=10000token 根据Token换算积分使用量
+					var rate float64 = 10000
+					change := float64(chatData.Metadata.Usage.TotalTokens) / rate
+					number := float32(math.Round(change*rate) / rate)
+
+					creditBalanceItem, err := tx.CreditBalance.Query().Where(creditbalance.OrganizationID(*userInfo.DepartmentId)).First(l.ctx)
+					if err != nil {
+						if ent.IsNotFound(err) {
+							creditBalanceItem, err = tx.CreditBalance.Create().SetOrganizationID(*userInfo.DepartmentId).SetBalance(0).Save(l.ctx)
+							if err != nil {
+								_ = tx.Rollback()
+								l.Logger.Errorf("create credit_balance failed. organization:%v error:%v\n", *userInfo.DepartmentId, err)
+							}
+						} else {
+							_ = tx.Rollback()
+							l.Logger.Errorf("query credit_balance failed. organization:%v error:%v\n", *userInfo.DepartmentId, err)
+						}
+					}
+
+					beforeNumber := creditBalanceItem.Balance
+					afterNumber := l.subtraction(beforeNumber, number)
 					_, err = tx.CreditUsage.Create().
 						SetUserID(userId).
 						SetNumber(number).
+						SetBeforeNumber(beforeNumber).
+						SetAfterNumber(afterNumber).
 						SetNtype(1).
 						SetNid(usageDetailItem.ID).
 						SetTable("usage_detail").
@@ -254,3 +299,11 @@ func (l *GptsSubmitApiChatLogic) GptsSubmitApiChat(tokenStr string, req *types.G
 		}
 	}
 }
+
+// subtraction() 保留小数点后4位的精确减法
+func (l *GptsSubmitApiChatLogic) subtraction(number1, number2 float32) float32 {
+	d1 := number1 * 10000
+	d2 := number2 * 10000
+	res := math.Floor(float64(d1-d2)) / 10000
+	return float32(res)
+}