operate.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. package db
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/caixw/lib.go/conv"
  6. "github.com/sirupsen/logrus"
  7. "reflect"
  8. "time"
  9. "youngee_m_api/model/common_model"
  10. "youngee_m_api/model/gorm_model"
  11. "youngee_m_api/model/http_model"
  12. "youngee_m_api/util"
  13. )
  14. func CreatePricingStrategy(ctx context.Context, req *http_model.AddPricingRequest) (string, string, error) {
  15. db := GetReadDB(ctx)
  16. project_type, fee_form, platform, fans_low, fans_up, service_charge, base_offer := req.ProjectType, req.ManuscriptForm, req.Platform, req.FansLow, req.FansHigh, req.PlatformFee, req.BaseOffer
  17. var IsExclusive gorm_model.InfoPricingStrategy
  18. err := db.Debug().Where(" fee_form = ? && platform = ? && fans_low <= ? && fans_up >= ?", fee_form, platform, fans_low, fans_up).First(&IsExclusive).Error
  19. if err == nil {
  20. return "该策略与已经运行的策略互斥,请修改相关字段后重新创建", "", nil
  21. }
  22. var newStrategy gorm_model.InfoPricingStrategy
  23. var strategyInfo gorm_model.InfoPricingStrategy
  24. getMonth := time.Now().Format("01") //获取月
  25. getDay := time.Now().Day() //获取日
  26. dayString := ""
  27. if getDay < 10 {
  28. dayString = conv.MustString(getDay, "")
  29. dayString = "0" + dayString
  30. } else {
  31. dayString = conv.MustString(getDay, "")
  32. }
  33. monthAndDay := conv.MustString(getMonth, "") + dayString
  34. err = db.Debug().Where(fmt.Sprintf(" strategyId like '%s%%'", monthAndDay)).Last(&strategyInfo).Error
  35. num := 1
  36. if strategyInfo.StrategyId != "" {
  37. num = conv.MustInt(strategyInfo.StrategyId[4:6], 0)
  38. num = num + 1 //获取日
  39. } else {
  40. num = 1
  41. }
  42. numString := ""
  43. if num < 10 {
  44. numString = conv.MustString(num, "")
  45. numString = "0" + numString
  46. } else {
  47. numString = conv.MustString(num, "")
  48. }
  49. newStrategy.StrategyId = monthAndDay + numString
  50. newStrategy.Status = 0
  51. newStrategy.FansLow = fans_low
  52. newStrategy.FansUp = fans_up
  53. newStrategy.ProjectType = conv.MustInt64(project_type, 0)
  54. newStrategy.BaseOffer = conv.MustInt64(base_offer, 0)
  55. newStrategy.Platform = conv.MustInt64(platform, 0)
  56. newStrategy.FeeForm = conv.MustInt64(fee_form, 0)
  57. newStrategy.ServiceCharge = conv.MustInt64(service_charge, 0)
  58. newStrategy.CreateAt = time.Now()
  59. newStrategy.UpdateAt = time.Now()
  60. err = db.Create(&newStrategy).Error
  61. if err != nil {
  62. return "创建失败", "", err
  63. }
  64. return "创建成功", monthAndDay + numString, nil
  65. }
  66. func SearchPricing(ctx context.Context, pageSize, pageNum int32, conditions *common_model.PricingConditions) ([]*gorm_model.InfoPricingStrategy, int64, error) {
  67. db := GetReadDB(ctx)
  68. db = db.Debug().Model(gorm_model.InfoPricingStrategy{})
  69. // 根据 查询条件过滤
  70. conditionType := reflect.TypeOf(conditions).Elem()
  71. conditionValue := reflect.ValueOf(conditions).Elem()
  72. for i := 0; i < conditionType.NumField(); i++ {
  73. field := conditionType.Field(i)
  74. tag := field.Tag.Get("condition")
  75. value := conditionValue.FieldByName(field.Name)
  76. if !util.IsBlank(value) && tag != "update_at" {
  77. db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
  78. } else if tag == "created_at" && value.Interface() != nil {
  79. db = db.Where(fmt.Sprintf("update_at like '%s%%'", value.Interface()))
  80. }
  81. }
  82. // 查询总数
  83. var total int64
  84. var PricingDatas []*gorm_model.InfoPricingStrategy
  85. if err := db.Count(&total).Error; err != nil {
  86. logrus.WithContext(ctx).Errorf("[SearchPricing] error query mysql total, err:%+v", err)
  87. return nil, 0, err
  88. }
  89. // 查询该页数据
  90. limit := pageSize
  91. offset := pageSize * pageNum // assert pageNum start with 0
  92. err := db.Order("update_at desc").Limit(int(limit)).Offset(int(offset)).Find(&PricingDatas).Error
  93. if err != nil {
  94. logrus.WithContext(ctx).Errorf("[SearchPricing] error query mysql find, err:%+v", err)
  95. return nil, 0, err
  96. }
  97. return PricingDatas, total, nil
  98. }
  99. func ModifyPricing(ctx context.Context, req *http_model.ModifyPricingRequest) (string, error) {
  100. db := GetReadDB(ctx)
  101. strategyId := req.StrategyId
  102. db = db.Debug().Model(gorm_model.InfoPricingStrategy{}).Where("strategyId = ?", strategyId)
  103. project_type, fee_form, platform, fans_low, fans_up, service_charge, base_offer := req.ProjectType, req.FeeForm, req.Platform, req.FansLow, req.FansHigh, req.PlatformFee, req.BaseOffer
  104. var IsExclusive gorm_model.InfoPricingStrategy
  105. err := db.Debug().Where(" fee_form = ? && platform = ? && fans_low <= ? && fans_up >= ?", fee_form, platform, fans_low, fans_up).First(&IsExclusive).Error
  106. if err == nil {
  107. return "要修改策略与已经运行的策略互斥,请修改相关字段", nil
  108. }
  109. err = db.Updates(map[string]interface{}{
  110. "project_type": project_type, "base_offer": base_offer, "fee_form": fee_form,
  111. "platform": platform, "fans_low": fans_low, "fans_up": fans_up, "service_charge": service_charge,
  112. }).Error
  113. if err != nil {
  114. return "", err
  115. }
  116. return "修改成功", nil
  117. }