package task import ( qu "app.yhyue.com/moapp/jybase/common" "app.yhyue.com/moapp/jybase/redis" "fmt" "github.com/robfig/cron" "log" "math" "qmx_admin/src/config" "qmx_admin/src/order" "time" ) // TimeTask1 自动回款定时任务 func AutoReturnMoneyTask() { StartTask1() c := cron.New() taskTime := config.SysConfigs.Tasktime log.Println(taskTime) cronStr := "0 */" + fmt.Sprint(taskTime) + " * * * ?" // cronstr := "0 0 */" + fmt.Sprint(taskTime) + " * * ?" //每TaskTime小时执行一次 err := c.AddFunc(cronStr, func() { StartTask1() }) if err != nil { fmt.Println("定时任务启动失败:", err) return } c.Start() } // StartTask1 自动回款任务 func StartTask1() { log.Println("自动回款匹配。。。开始") query := "select * from transaction where ISRELATION = 0" log.Println("query: ", query) data := config.CbsDB.SelectBySql(query) if data != nil && *data != nil && len(*data) > 0 { 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) for _, v := range *data { returnMoney := int(math.Floor(float64(float64(qu.Float64All(v["TRSBAL"]))*100) + 0.5)) companyName := qu.ObjToString(v["OTHNAM"]) remark := qu.ObjToString(v["TXTDSM"]) remarks := qu.ObjToString(v["NUSAGE"]) id := qu.IntAll(v["id"]) returnTime := qu.ObjToString(v["BNKTIM"]) BNKFLW := qu.ObjToString(v["BNKFLW"]) BNKNAM := qu.ObjToString(v["BNKNAM"]) if orderData != nil && len(*orderData) > 0 { for _, o := range *orderData { money := qu.IntAll(o["pay_money"]) - qu.IntAll(o["commission"]) - qu.IntAll(o["procedures_money"]) companyNames := qu.ObjToString(o["company_name"]) orderCode := qu.ObjToString(o["order_code"]) if money == returnMoney && (companyNames == companyName || remark == orderCode || remarks == orderCode) { isExists, err := redis.Exists("qmx_filter", "qmx_auto_return_"+fmt.Sprint(id)) if !isExists || err != nil { log.Println("自动回款匹配成功", id, orderCode) updateData := map[string]interface{}{"return_status": 1, "order_status": 1} contract := config.JysqlDB.FindOne("contract", map[string]interface{}{"order_code": orderCode}, "", "") count := config.JysqlDB.Count("return_money_record", map[string]interface{}{"order_code": orderCode}) if count < 1 && contract != nil && qu.IntAll((*contract)["contract_archive_status"]) != 1 { updateData["sale_time"] = returnTime } returnId := config.JysqlDB.Insert("return_money_record", map[string]interface{}{ "order_code": orderCode, "return_time": returnTime, "return_money": money, "return_type": 3, "return_invoice_status": 0, "operate_time": time.Now().Format("2006-01-02 15:04:05"), "flow_money": money, "bank_name": BNKNAM, "bank_flow": BNKFLW, "operate_type": 2, "state": 1, "pay_account_name": companyName, }) redis.Put("qmx_filter", "qmx_auto_return_"+fmt.Sprint(id), 1, 3600) if returnId > 0 { log.Println("自动回款创建回款记录成功", id, orderCode) config.JysqlDB.Update("dataexport_order", map[string]interface{}{"order_code": orderCode}, updateData) config.CbsDB.Update("transaction", map[string]interface{}{"id": id}, map[string]interface{}{"ISRELATION": 1, "return_id": fmt.Sprint(returnId)}) filterMap := qu.ObjToMap(o["filter"]) paybackOpenServer := false if v, ok := ((*filterMap)["paybackOpenServer"]).(bool); ok { paybackOpenServer = v } if qu.IntAll(o["return_status"]) == 1 && paybackOpenServer { err := order.OpenUserService(nil, orderCode, o) if err != nil { log.Println("自动回款开通权益失败", id, orderCode) } } } else { log.Println("自动回款创建回款记录失败", id, orderCode) } } else { log.Println("自动回款重复匹配过滤", id, orderCode) } } } } } } else { log.Println("回款信息查询为空") } log.Println("自动回款匹配。。。结束") }