task.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package util
  2. import (
  3. "fmt"
  4. "ktogame/dbUtil"
  5. "ktogame/models"
  6. "time"
  7. "github.com/astaxie/beego/toolbox"
  8. "github.com/shopspring/decimal"
  9. )
  10. func init() {
  11. fmt.Println("进来定时")
  12. tk1 := toolbox.NewTask("myTask1", "0 01 0 * * 0-6", func() error {
  13. fenfa()
  14. return nil
  15. })
  16. toolbox.AddTask("myTask1", tk1)
  17. toolbox.StartTask()
  18. }
  19. func fenfa() {
  20. var ci models.CommonInfo
  21. dbUtil.Engine.Get(&ci)
  22. nowFormat := NowTimeDayString()
  23. cs := ci.SupplyTime[:10]
  24. if nowFormat != cs {
  25. return
  26. }
  27. format := time.Now().AddDate(0, 0, -6).Format("2006-01-02 15:04:05")
  28. sql_total := "SELECT IFNULL(SUM(1-amount_lv),0) as total FROM user_addr WHERE amount_lv<1 AND create_time<?"
  29. res, _ := dbUtil.Engine.SQL(sql_total, format).QueryInterface()
  30. totalLv, _ := decimal.NewFromString(string(res[0]["total"].([]uint8)))
  31. st := time.Now().AddDate(0, 0, 2).Format("2006-01-02 15:04:05")
  32. ci.SupplyTime = st
  33. if totalLv.Cmp(decimal.Zero) == 0 {
  34. dbUtil.Engine.ID(ci.Id).Cols("supply_time").Update(&ci)
  35. return
  36. }
  37. var user []models.UserAddr
  38. dbUtil.Engine.Where("amount_lv<1 and create_time<?", format).Find(&user)
  39. div := decimal.NewFromFloat(ci.SupplyAmount).Div(totalLv)
  40. fmt.Println("div=", div)
  41. out := getAmountOut()
  42. fmt.Println("out=", out)
  43. for _, v := range user {
  44. mul := decimal.NewFromFloat(1 - v.AmountLv).Mul(div)
  45. v.Profit4, _ = decimal.NewFromFloat(v.Profit4).Add(mul).Float64()
  46. v.UseAmount, _ = decimal.NewFromFloat(v.UseAmount).Add(mul).Float64()
  47. i := mul.Mul(out).Div(decimal.NewFromFloat(200.0))
  48. v.AmountLv, _ = decimal.NewFromFloat(v.AmountLv).Add(i).Float64()
  49. f, _ := mul.Float64()
  50. sb := models.SuccessBill{IdWork.Generate(), v.Addr, f, 1, 0, "", "-", 5, NowTimeString()}
  51. dbUtil.Engine.ID(v.Addr).Cols("amount_lv,use_amount,profit4").Update(&v)
  52. dbUtil.Engine.Insert(&sb)
  53. dbUtil.Engine.ID(ci.Id).Cols("supply_time").Update(&ci)
  54. }
  55. }