enterprise.go 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. package db
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/issue9/conv"
  6. "log"
  7. "strconv"
  8. "time"
  9. "youngee_b_api/model/gorm_model"
  10. "youngee_b_api/model/http_model"
  11. "youngee_b_api/util"
  12. "gorm.io/gorm"
  13. )
  14. func CreateEnterprise(ctx context.Context, newEnterprise gorm_model.Enterprise) (*string, error) {
  15. db := GetReadDB(ctx)
  16. err := db.Create(&newEnterprise).Error
  17. if err != nil {
  18. return nil, err
  19. }
  20. return &newEnterprise.EnterpriseID, nil
  21. }
  22. // GetEnterpriseByUID 用户ID查找
  23. func GetEnterpriseByUID(ctx context.Context, userID int64) (*gorm_model.Enterprise, error) {
  24. db := GetReadDB(ctx)
  25. enterprise := gorm_model.Enterprise{}
  26. err := db.Where("user_id = ?", userID).First(&enterprise).Error
  27. if err != nil {
  28. if err == gorm.ErrRecordNotFound {
  29. return nil, nil
  30. } else {
  31. return nil, err
  32. }
  33. }
  34. return &enterprise, nil
  35. }
  36. // GetEnterpriseByEnterpriseID 企业ID查找
  37. func GetEnterpriseByEnterpriseID(ctx context.Context, EnterpriseID string) (*gorm_model.Enterprise, error) {
  38. db := GetReadDB(ctx)
  39. enterprise := gorm_model.Enterprise{}
  40. err := db.Where("enterprise_id = ?", EnterpriseID).First(&enterprise).Error
  41. if err != nil {
  42. if err == gorm.ErrRecordNotFound {
  43. return nil, nil
  44. } else {
  45. return nil, err
  46. }
  47. }
  48. return &enterprise, nil
  49. }
  50. // GetEnterpriseBalance 获取企业可用余额等信息
  51. func GetEnterpriseBalance(ctx context.Context, EnterpriseID string) (*http_model.EnterpriseBalanceData, error) {
  52. db := GetReadDB(ctx)
  53. enterprise := gorm_model.Enterprise{}
  54. err := db.Where("enterprise_id = ?", EnterpriseID).First(&enterprise).Error
  55. if err != nil {
  56. if err == gorm.ErrRecordNotFound {
  57. return nil, nil
  58. } else {
  59. return nil, err
  60. }
  61. }
  62. var Invoicing float64
  63. var BillableAmount float64
  64. db1 := GetReadDB(ctx)
  65. db1.Model(gorm_model.YounggeeInvoiceRecord{}).Select("sum(invoice_amount) as Invoicing").
  66. Where("enterprise_id = ? AND status = 1", EnterpriseID).Find(&Invoicing)
  67. Invoicing, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", Invoicing), 64)
  68. db2 := GetReadDB(ctx)
  69. db2.Model(gorm_model.YounggeeRechargeRecord{}).Select("sum(recharge_amount) as BillableAmount").
  70. Where("enterprise_id = ? AND status = 2 AND invoice_status = 2", EnterpriseID).Find(&BillableAmount)
  71. BillableAmount, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", BillableAmount), 64)
  72. db3 := GetReadDB(ctx)
  73. var Recharging float64
  74. db3.Model(gorm_model.YounggeeRechargeRecord{}).Select("sum(recharge_amount) as Recharging").
  75. Where("enterprise_id = ? AND status = 1 AND invoice_status = 1", EnterpriseID).Find(&Recharging)
  76. Recharging, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", Recharging), 64)
  77. res := &http_model.EnterpriseBalanceData{
  78. Balance: enterprise.Balance,
  79. FrozenBalance: enterprise.FrozenBalance,
  80. AvailableBalance: enterprise.AvailableBalance,
  81. Recharging: Recharging,
  82. BillableAmount: BillableAmount,
  83. Invoicing: Invoicing,
  84. }
  85. return res, nil
  86. }
  87. // 支付-修改企业账户余额
  88. func UpdateEnterpriseBalance(ctx context.Context, EnterpriseID string, balance float64, availableBalance float64, frozenBalance float64) (*float64, error) {
  89. db := GetReadDB(ctx)
  90. err := db.Model(gorm_model.Enterprise{}).Where("enterprise_id", EnterpriseID).
  91. Updates(map[string]interface{}{"balance": gorm.Expr("balance + ?", balance), "available_balance": gorm.Expr("available_balance + ?", availableBalance), "frozen_balance": gorm.Expr("frozen_balance + ?", frozenBalance)}).Error
  92. if err != nil {
  93. return nil, err
  94. }
  95. enterprise := gorm_model.Enterprise{}
  96. err = db.Model(gorm_model.Enterprise{}).Where("enterprise_id", EnterpriseID).Scan(&enterprise).Error
  97. if err != nil {
  98. return nil, err
  99. }
  100. return &enterprise.Balance, nil
  101. }
  102. func MakeRechargeId(ctx context.Context, EnterpriseID string) string {
  103. db := GetReadDB(ctx)
  104. // 1、年月日
  105. year := time.Now().Year()
  106. month := time.Now().Month()
  107. day := time.Now().Day()
  108. yearData, _ := util.GetDayNum("year", year)
  109. monthData, _ := util.GetDayNum("month", int(month))
  110. dayData, _ := util.GetDayNum("day", day)
  111. sum := 0
  112. sum += dayData + monthData
  113. leap := 0
  114. if (yearData%400 == 0) || ((yearData%4 == 0) && (yearData%100 != 0)) {
  115. leap = 1
  116. }
  117. if (leap == 1) && (monthData > 2) {
  118. sum += 1
  119. }
  120. last := ""
  121. rechargeIdPrefix := "8" + EnterpriseID[len(EnterpriseID)-2:] + conv.MustString(sum)
  122. var rechargeIdLast string
  123. err := db.Model(gorm_model.YounggeeRechargeRecord{}).Select("recharge_id").Where("recharge_id like ?", rechargeIdPrefix+"%").
  124. Last(&rechargeIdLast).Error
  125. if err != nil {
  126. last = "0"
  127. } else {
  128. last = rechargeIdLast[len(rechargeIdLast)-2:]
  129. }
  130. var lastInt int
  131. lastInt = conv.MustInt(last)
  132. if lastInt+1 < 10 {
  133. last = "0" + conv.MustString(conv.MustInt(last)+1)
  134. } else {
  135. last = conv.MustString(conv.MustInt(last) + 1)
  136. }
  137. return rechargeIdPrefix + last
  138. }
  139. func RechargeAmount(ctx context.Context, EnterpriseID string, Amount float64, phone string) error {
  140. db := GetReadDB(ctx)
  141. err := db.Model(gorm_model.Enterprise{}).Where("enterprise_id", EnterpriseID).
  142. Updates(map[string]interface{}{"balance": gorm.Expr("balance + ?", Amount), "available_balance": gorm.Expr("available_balance + ?", Amount)}).Error
  143. if err != nil {
  144. return err
  145. }
  146. //enterprise := gorm_model.Enterprise{}
  147. //err = db.Model(gorm_model.Enterprise{}).Where("enterprise_id", EnterpriseID).Scan(&enterprise).Error
  148. //if err != nil {
  149. // return err
  150. //}
  151. rechargeId := MakeRechargeId(ctx, EnterpriseID)
  152. err = db.Model(gorm_model.YounggeeRechargeRecord{}).Create(&gorm_model.YounggeeRechargeRecord{
  153. RechargeID: rechargeId,
  154. RechargeAmount: Amount,
  155. EnterpriseID: EnterpriseID,
  156. Status: 2,
  157. InvoiceStatus: 2,
  158. CommitAt: time.Now(),
  159. RechargeMethod: 3,
  160. TransferVoucherUrl: "--",
  161. Phone: phone,
  162. ConfirmAt: time.Now(),
  163. }).Error
  164. if err != nil {
  165. return err
  166. }
  167. return nil
  168. }
  169. func TransferToPublic(ctx context.Context, Amount float64, phone string, EnterpriseID string, transferVoucherUrl string) error {
  170. db := GetReadDB(ctx)
  171. rechargeId := MakeRechargeId(ctx, EnterpriseID)
  172. fmt.Println("Amount:", Amount)
  173. err := db.Model(gorm_model.YounggeeRechargeRecord{}).Create(&gorm_model.YounggeeRechargeRecord{
  174. RechargeID: rechargeId,
  175. RechargeAmount: Amount,
  176. EnterpriseID: EnterpriseID,
  177. Status: 1,
  178. InvoiceStatus: 1,
  179. CommitAt: time.Now(),
  180. Phone: phone,
  181. RechargeMethod: 1,
  182. TransferVoucherUrl: transferVoucherUrl,
  183. ConfirmAt: time.Now(),
  184. }).Error
  185. if err != nil {
  186. return err
  187. }
  188. db1 := GetReadDB(ctx)
  189. err = db1.Model(gorm_model.Enterprise{}).Where("enterprise_id = ?", EnterpriseID).Updates(
  190. map[string]interface{}{"recharging": gorm.Expr("recharging + ?", Amount)}).Error
  191. if err != nil {
  192. log.Println("[TransferToPublic] recharging modify failed:", err)
  193. return err
  194. }
  195. return nil
  196. }
  197. func UpdateEnterprise(ctx context.Context, EnterpriseID string, BusinessName string) error {
  198. db := GetReadDB(ctx)
  199. err := db.Model(gorm_model.Enterprise{}).Where("enterprise_id=?", EnterpriseID).Update("business_name", BusinessName).Error
  200. if err != nil {
  201. fmt.Println("Update Enterprise Failed!")
  202. return err
  203. }
  204. return nil
  205. }