enterprise.go 7.8 KB

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