task.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package util
  2. import (
  3. "fmt"
  4. "github.com/astaxie/beego/toolbox"
  5. "github.com/shopspring/decimal"
  6. "server_fhl/dbUtil"
  7. "server_fhl/models"
  8. "time"
  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. }