returnMoneyTask.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package task
  2. import (
  3. qu "app.yhyue.com/moapp/jybase/common"
  4. "app.yhyue.com/moapp/jybase/redis"
  5. "fmt"
  6. "github.com/robfig/cron"
  7. "log"
  8. "math"
  9. "qmx_admin/src/config"
  10. "qmx_admin/src/order"
  11. "time"
  12. )
  13. // TimeTask1 自动回款定时任务
  14. func AutoReturnMoneyTask() {
  15. StartTask1()
  16. c := cron.New()
  17. taskTime := config.SysConfigs.Tasktime
  18. log.Println(taskTime)
  19. cronStr := "0 */" + fmt.Sprint(taskTime) + " * * * ?"
  20. // cronstr := "0 0 */" + fmt.Sprint(taskTime) + " * * ?" //每TaskTime小时执行一次
  21. err := c.AddFunc(cronStr, func() {
  22. StartTask1()
  23. })
  24. if err != nil {
  25. fmt.Println("定时任务启动失败:", err)
  26. return
  27. }
  28. c.Start()
  29. }
  30. // StartTask1 自动回款任务
  31. func StartTask1() {
  32. log.Println("自动回款匹配。。。开始")
  33. query := "select * from transaction where ISRELATION = 0"
  34. log.Println("query: ", query)
  35. data := config.CbsDB.SelectBySql(query)
  36. if data != nil && *data != nil && len(*data) > 0 {
  37. orderData := config.JysqlDB.Find("dataexport_order", map[string]interface{}{"return_status": 0, "audit_status": 3}, "order_code,pay_money,company_name,commission,procedures_money,filter", "", -1, -1)
  38. for _, v := range *data {
  39. returnMoney := int(math.Floor(float64(float64(qu.Float64All(v["TRSBAL"]))*100) + 0.5))
  40. companyName := qu.ObjToString(v["OTHNAM"])
  41. remark := qu.ObjToString(v["TXTDSM"])
  42. remarks := qu.ObjToString(v["NUSAGE"])
  43. id := qu.IntAll(v["id"])
  44. returnTime := qu.ObjToString(v["BNKTIM"])
  45. BNKFLW := qu.ObjToString(v["BNKFLW"])
  46. BNKNAM := qu.ObjToString(v["BNKNAM"])
  47. if orderData != nil && len(*orderData) > 0 {
  48. for _, o := range *orderData {
  49. money := qu.IntAll(o["pay_money"]) - qu.IntAll(o["commission"]) - qu.IntAll(o["procedures_money"])
  50. companyNames := qu.ObjToString(o["company_name"])
  51. orderCode := qu.ObjToString(o["order_code"])
  52. if money == returnMoney && (companyNames == companyName || remark == orderCode || remarks == orderCode) {
  53. isExists, err := redis.Exists("qmx_filter", "qmx_auto_return_"+fmt.Sprint(id))
  54. if !isExists || err != nil {
  55. log.Println("自动回款匹配成功", id, orderCode)
  56. updateData := map[string]interface{}{"return_status": 1, "order_status": 1}
  57. contract := config.JysqlDB.FindOne("contract", map[string]interface{}{"order_code": orderCode}, "", "")
  58. count := config.JysqlDB.Count("return_money_record", map[string]interface{}{"order_code": orderCode})
  59. if count < 1 && contract != nil && qu.IntAll((*contract)["contract_archive_status"]) != 1 {
  60. updateData["sale_time"] = returnTime
  61. }
  62. returnId := config.JysqlDB.Insert("return_money_record", map[string]interface{}{
  63. "order_code": orderCode,
  64. "return_time": returnTime,
  65. "return_money": money,
  66. "return_type": 3,
  67. "return_invoice_status": 0,
  68. "operate_time": time.Now().Format("2006-01-02 15:04:05"),
  69. "flow_money": money,
  70. "bank_name": BNKNAM,
  71. "bank_flow": BNKFLW,
  72. "operate_type": 2,
  73. "state": 1,
  74. "pay_account_name": companyName,
  75. })
  76. redis.Put("qmx_filter", "qmx_auto_return_"+fmt.Sprint(id), 1, 3600)
  77. if returnId > 0 {
  78. log.Println("自动回款创建回款记录成功", id, orderCode)
  79. config.JysqlDB.Update("dataexport_order", map[string]interface{}{"order_code": orderCode}, updateData)
  80. config.CbsDB.Update("transaction", map[string]interface{}{"id": id}, map[string]interface{}{"ISRELATION": 1, "return_id": fmt.Sprint(returnId)})
  81. filterMap := qu.ObjToMap(o["filter"])
  82. paybackOpenServer := false
  83. if v, ok := ((*filterMap)["paybackOpenServer"]).(bool); ok {
  84. paybackOpenServer = v
  85. }
  86. if qu.IntAll(o["return_status"]) == 1 && paybackOpenServer {
  87. err := order.OpenUserService(nil, orderCode, o)
  88. if err != nil {
  89. log.Println("自动回款开通权益失败", id, orderCode)
  90. }
  91. }
  92. } else {
  93. log.Println("自动回款创建回款记录失败", id, orderCode)
  94. }
  95. } else {
  96. log.Println("自动回款重复匹配过滤", id, orderCode)
  97. }
  98. }
  99. }
  100. }
  101. }
  102. } else {
  103. log.Println("回款信息查询为空")
  104. }
  105. log.Println("自动回款匹配。。。结束")
  106. }