coin_config.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package dao
  2. import (
  3. "context"
  4. "fmt"
  5. "strconv"
  6. "strings"
  7. v1pb "go-common/app/service/live/xlottery/api/grpc/v1"
  8. "go-common/app/service/live/xlottery/model"
  9. "go-common/library/database/sql"
  10. "go-common/library/log"
  11. )
  12. const (
  13. _getCoinConfig = "SELECT coin_id, type, area_v2_parent_id, area_v2_id, gift_id FROM capsule_coin_config WHERE coin_id = ? AND status = 1 "
  14. _getCoinConfigMap = "SELECT coin_id, type, area_v2_parent_id, area_v2_id, gift_id FROM capsule_coin_config WHERE coin_id in (%v) AND status = 1"
  15. _updateCoinConfig = "UPDATE capsule_coin_config SET status = ? WHERE coin_id = ?"
  16. _addCoinConfig = "INSERT INTO capsule_coin_config (type,gift_id,area_v2_parent_id,area_v2_id,coin_id,status) VALUES "
  17. )
  18. //GetCoinConfig 获取扭蛋币配置
  19. func (d *Dao) GetCoinConfig(ctx context.Context, coinId int64) (configs []*model.CoinConfig, err error) {
  20. var rows *sql.Rows
  21. if rows, err = d.db.Query(ctx, _getCoinConfig, coinId); err != nil {
  22. log.Error("[dao.coin_config | GetCoinConfig]query(%s) error(%v)", _getCoinConfig, err)
  23. return
  24. }
  25. defer rows.Close()
  26. configs = make([]*model.CoinConfig, 0)
  27. for rows.Next() {
  28. d := &model.CoinConfig{}
  29. if err = rows.Scan(&d.CoinId, &d.Type, &d.AreaV2ParentId, &d.AreaV2Id, &d.GiftId); err != nil {
  30. log.Error("[dao.coin_config | GetCoinConfig] scan error, err %v", err)
  31. return
  32. }
  33. configs = append(configs, d)
  34. }
  35. return
  36. }
  37. //GetCoinConfigMap 批量获取扭蛋币
  38. func (d *Dao) GetCoinConfigMap(ctx context.Context, coinIds []int64) (configMap map[int64][]*model.CoinConfig, err error) {
  39. var rows *sql.Rows
  40. stringCoinIds := make([]string, 0)
  41. for _, coinId := range coinIds {
  42. stringCoinIds = append(stringCoinIds, strconv.FormatInt(coinId, 10))
  43. }
  44. coinString := strings.Join(stringCoinIds, ",")
  45. if rows, err = d.db.Query(ctx, fmt.Sprintf(_getCoinConfigMap, coinString)); err != nil {
  46. log.Error("[dao.coin_config | GetCoinConfigMap]query(%s) error(%v)", _getCoinConfigMap, err)
  47. return
  48. }
  49. defer rows.Close()
  50. configMap = make(map[int64][]*model.CoinConfig)
  51. for rows.Next() {
  52. d := &model.CoinConfig{}
  53. if err = rows.Scan(&d.CoinId, &d.Type, &d.AreaV2ParentId, &d.AreaV2Id, &d.GiftId); err != nil {
  54. log.Error("[dao.coin_config | GetCoinConfigMap] scan error, err %v", err)
  55. return
  56. }
  57. if _, ok := configMap[d.CoinId]; !ok {
  58. configMap[d.CoinId] = make([]*model.CoinConfig, 0)
  59. }
  60. configMap[d.CoinId] = append(configMap[d.CoinId], d)
  61. }
  62. return
  63. }
  64. //UpdateCoinConfig 更新扭蛋币配置
  65. func (d *Dao) UpdateCoinConfig(ctx context.Context, coinId int64, areaIds []*v1pb.UpdateCoinConfigReq_AreaIds, giftIds []int64) (status bool, err error) {
  66. _, err = d.db.Exec(ctx, _updateCoinConfig, 2, coinId)
  67. if err != nil {
  68. log.Error("[dao.coin_config | UpdateCoinConfig] query(%s) error(%v)", _updateCoinConfig, err)
  69. return
  70. }
  71. rowFields := make([][6]interface{}, 0)
  72. for _, giftId := range giftIds {
  73. rowFields = append(rowFields, [6]interface{}{2, giftId, 0, 0, coinId, 1})
  74. }
  75. if len(areaIds) != 0 {
  76. for _, areaId := range areaIds {
  77. if areaId.IsAll == 1 {
  78. rowFields = append(rowFields, [6]interface{}{1, 0, areaId.ParentId, areaId.ParentId, coinId, 1})
  79. } else {
  80. for _, areaV2Id := range areaId.List {
  81. rowFields = append(rowFields, [6]interface{}{1, 0, areaId.ParentId, areaV2Id, coinId, 1})
  82. }
  83. }
  84. }
  85. }
  86. sqlStr := _addCoinConfig + strings.Repeat("(?,?,?,?,?,?),", len(rowFields))
  87. slen := len(sqlStr) - 1
  88. sqlStr = sqlStr[0:slen]
  89. values := make([]interface{}, len(rowFields)*6)
  90. for i, field := range rowFields {
  91. for j, v := range field {
  92. ix := i*6 + j
  93. values[ix] = v
  94. }
  95. }
  96. res, err := d.db.Exec(ctx, sqlStr, values...)
  97. if err != nil {
  98. log.Error("[dao.coin_config | UpdateCoinConfig] insert(%s) error(%v)", sqlStr, err)
  99. return
  100. }
  101. rows, _ := res.RowsAffected()
  102. status = rows > 0
  103. return
  104. }