operate_credit_balance_logic.go 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package credit_balance
  2. import (
  3. "context"
  4. "github.com/suyuan32/simple-admin-common/msg/errormsg"
  5. "github.com/zeromicro/go-zero/core/errorx"
  6. "wechat-api/ent/creditbalance"
  7. "wechat-api/internal/svc"
  8. "wechat-api/internal/types"
  9. "github.com/zeromicro/go-zero/core/logx"
  10. )
  11. type OperateCreditBalanceLogic struct {
  12. logx.Logger
  13. ctx context.Context
  14. svcCtx *svc.ServiceContext
  15. }
  16. func NewOperateCreditBalanceLogic(ctx context.Context, svcCtx *svc.ServiceContext) *OperateCreditBalanceLogic {
  17. return &OperateCreditBalanceLogic{
  18. Logger: logx.WithContext(ctx),
  19. ctx: ctx,
  20. svcCtx: svcCtx}
  21. }
  22. func (l *OperateCreditBalanceLogic) OperateCreditBalance(req *types.CreditBalanceOperateReq) (*types.BaseMsgResp, error) {
  23. if req.Number == nil || *req.Number == 0 {
  24. return nil, errorx.NewInvalidArgumentError("Number参数非法")
  25. }
  26. creditBalance, err := l.svcCtx.DB.CreditBalance.Query().Where(creditbalance.OrganizationID(*req.OrganizationId)).Only(l.ctx)
  27. if err != nil {
  28. l.Logger.Errorf("query credit_balance error:%v\n", err)
  29. return nil, errorx.NewInvalidArgumentError(err.Error())
  30. }
  31. var ntype int
  32. if *req.Number > 0 {
  33. ntype = 2
  34. } else {
  35. ntype = 1
  36. }
  37. tx, err := l.svcCtx.DB.Tx(context.Background())
  38. _, err = tx.CreditUsage.Create().
  39. SetUserID("").
  40. SetNumber(*req.Number).
  41. SetNtype(ntype).
  42. SetNid(0).
  43. SetTable("").
  44. SetReason(*req.Reason).
  45. SetOrganizationID(*req.OrganizationId).
  46. Save(l.ctx)
  47. if err != nil {
  48. l.Logger.Errorf("create credit_usage error:%v\n", err)
  49. _ = tx.Rollback()
  50. return nil, errorx.NewInvalidArgumentError("创建租户积分明细失败,请重试")
  51. }
  52. if *req.Number > 0 {
  53. if creditBalance == nil {
  54. _, err = l.svcCtx.DB.CreditBalance.Create().
  55. SetOrganizationID(*req.OrganizationId).
  56. SetBalance(*req.Number).
  57. Save(l.ctx)
  58. if err != nil {
  59. l.Logger.Errorf("create credit_balance error:%v\n", err)
  60. _ = tx.Rollback()
  61. return nil, errorx.NewInvalidArgumentError("创建租户积分余额失败,请重试")
  62. }
  63. } else {
  64. _, err = l.svcCtx.DB.CreditBalance.Update().Where(creditbalance.OrganizationID(*req.OrganizationId)).SetBalance(creditBalance.Balance + *req.Number).Save(l.ctx)
  65. if err != nil {
  66. l.Logger.Errorf("update credit_balance error:%v\n", err)
  67. _ = tx.Rollback()
  68. return nil, errorx.NewInvalidArgumentError("修改租户积分余额失败,请重试.")
  69. }
  70. }
  71. } else {
  72. _, err := l.svcCtx.DB.CreditBalance.Update().Where(creditbalance.OrganizationID(*req.OrganizationId)).SetBalance(creditBalance.Balance + *req.Number).Save(l.ctx)
  73. if err != nil {
  74. l.Logger.Errorf("update credit_balance error:%v\n", err)
  75. _ = tx.Rollback()
  76. return nil, errorx.NewInvalidArgumentError("修改租户积分余额失败,请重试...")
  77. }
  78. }
  79. _ = tx.Commit()
  80. return &types.BaseMsgResp{
  81. Code: 0,
  82. Msg: errormsg.Success,
  83. }, nil
  84. }