recharge_record_dao.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package dao
  2. import (
  3. "time"
  4. "youngee_b_api/app/entity"
  5. "youngee_b_api/app/vo"
  6. )
  7. type RechargeRecordDao struct{}
  8. func (d RechargeRecordDao) Insert(rechargeRecord *entity.RechargeRecord) error {
  9. err := Db.Debug().Model(entity.RechargeRecord{}).Omit("confirm_at", "refuse_at").Create(rechargeRecord).Error
  10. if err != nil {
  11. return err
  12. }
  13. return nil
  14. }
  15. // 获取指定企业id的累计充值金额、充值确认中金额
  16. func (d RechargeRecordDao) GetRechargeAmount(enterpriseId string, status int64) (float64, error) {
  17. var totalAmount float64
  18. query := Db.Debug().Model(&entity.RechargeRecord{})
  19. err := query.Where("enterprise_id = ? AND status = ?", enterpriseId, status).Select("SUM(recharge_amount)").Scan(&totalAmount).Error
  20. if err != nil {
  21. return 0, err
  22. }
  23. return totalAmount, nil
  24. }
  25. // 获取指定企业id的充值记录
  26. func (d RechargeRecordDao) RechargeInfoList(param *vo.RechargeParam) ([]entity.RechargeRecord, int64, error) {
  27. rechargeRecords := []entity.RechargeRecord{}
  28. var total int64
  29. query := Db.Debug().Model(&entity.RechargeRecord{}).Where("enterprise_id = ? AND status = ?", param.EnterpriseId, param.RechargeState)
  30. query.Count(&total)
  31. query = query.Select("recharge_id, recharge_amount, transfer_voucher_url, recharge_method, commit_at, confirm_at, refuse_at, fail_reason, enterprise_id, sub_account_id")
  32. offset := (param.Page - 1) * param.PageSize
  33. var err error
  34. if param.RechargeState == 1 {
  35. err = query.Order("commit_at desc").Offset(offset).Limit(param.PageSize).Find(&rechargeRecords).Error
  36. } else if param.RechargeState == 2 {
  37. err = query.Order("confirm_at desc").Offset(offset).Limit(param.PageSize).Find(&rechargeRecords).Error
  38. } else if param.RechargeState == 3 {
  39. err = query.Order("refuse_at desc").Offset(offset).Limit(param.PageSize).Find(&rechargeRecords).Error
  40. }
  41. if err != nil {
  42. return nil, 0, err
  43. }
  44. return rechargeRecords, total, nil
  45. }
  46. // 更新充值状态
  47. func (d RechargeRecordDao) UpdateRechargeStatus(rechargeId string, status int64, t time.Time) error {
  48. rechargeRecord := entity.RechargeRecord{
  49. Status: status,
  50. }
  51. if status == 2 {
  52. rechargeRecord.InvoiceStatus = 1
  53. rechargeRecord.ConfirmAt = t
  54. }
  55. if status == 3 {
  56. rechargeRecord.FailReason = "微信支付失败"
  57. rechargeRecord.RefuseAt = t
  58. }
  59. err = Db.Debug().Model(&entity.RechargeRecord{}).Where("recharge_id = ?", rechargeId).Updates(rechargeRecord).Error
  60. if err != nil {
  61. return err
  62. }
  63. return nil
  64. }
  65. // 查找微信充值中超时且状态为充值未确认的记录
  66. func (d RechargeRecordDao) GetWXRechargeByStatusList(status int64) ([]*entity.RechargeRecord, error) {
  67. now := time.Now()
  68. var rechargeRecords []*entity.RechargeRecord
  69. err := Db.Debug().Model(&entity.RechargeRecord{}).Where("recharge_method = ? AND status = ? AND refuse_at < ?", 2, status, now).Find(&rechargeRecords).Error
  70. if err != nil {
  71. return nil, err
  72. }
  73. return rechargeRecords, nil
  74. }
  75. // 批量更新指定id的充值记录状态
  76. func (d RechargeRecordDao) UpdateRechargeFailedList(noPayIds []int64) error {
  77. err := Db.Debug().Model(&entity.RechargeRecord{}).Where("id IN ?", noPayIds).Updates(entity.RechargeRecord{Status: 3, FailReason: "微信支付失败"}).Error
  78. if err != nil {
  79. return err
  80. }
  81. return nil
  82. }
  83. //// 更新所有充值记录中微信支付超时的记录
  84. //func (d RechargeRecordDao) UpdateRechargeFailedList() error {
  85. // now := time.Now()
  86. // err := Db.Debug().Model(&entity.RechargeRecord{}).Where("recharge_method = ? AND status = ? AND refuse_at < ?", 2, 1, now).
  87. // Updates(map[string]interface{}{"status": 3, "fail_reason": "微信支付失败"}).Error
  88. // if err != nil {
  89. // return err
  90. // }
  91. // return nil
  92. //}