package svc import ( "applet/app/db" "applet/app/db/model" "applet/app/utils" "applet/app/utils/cache" "fmt" "time" ) func PlayletOrderSettle() { day := time.Now().Day() if day < 20 { return } month := utils.GetTimeRange("current_month") fmt.Println(month) arg := map[string]string{ "status": "订单结算", "sort": "id desc", "is_to_settle": "1", "is_commission": "1", "to_settle_time": time.Unix(month["start"], 0).Format("2006-01-02 15:04:05"), "p": "1", "size": "100", } playletSaleOrderDb := db.PlayletSaleOrderDb{} playletSaleOrderDb.Set() order := playletSaleOrderDb.GetPlayletVideoOrderList(arg) if len(order) == 0 { return } fmt.Println(utils.SerializeStr(order)) for _, v := range order { fmt.Println("=================00") // 加锁 防止并发提取 mutexKey := fmt.Sprintf("playlet_order_settle3:%d", v.Id) withdrawAvailable, err := cache.Do("SET", mutexKey, 1, "EX", 1800, "NX") if err != nil { fmt.Println("=================0") fmt.Println(err) continue } if withdrawAvailable != "OK" { fmt.Println("=================1") continue } if v.SettleTime > 0 { fmt.Println("=================2") continue } //加到上月结算 if v.Uid == "" || v.Uid == "0" { fmt.Println("=================3") continue } masterDb := db.MasterDb{} masterDb.Set() master := masterDb.GetMaster(v.Uid) if master == nil { fmt.Println("=================4") continue } masterAmountDb := db.MasterAmountDb{} masterAmountDb.Set() amount := masterAmountDb.GetMasterAmountByExtendUid(utils.IntToStr(master.Id), v.ExtendUid, "playlet") if amount == nil { fmt.Println("=================5") continue } if utils.StrToFloat64(v.Commission) <= 0 { v.SettleTime = int(time.Now().Unix()) playletSaleOrderDb.PlayletVideoOrderUpdate(v.Id, &v) fmt.Println("=================6") continue } oldAmount := amount.LastMonthAmount amount.LastMonthAmount = utils.Float64ToStr(utils.StrToFloat64(amount.LastMonthAmount) + utils.StrToFloat64(v.Commission)) update := masterAmountDb.MasterAmountUpdate(amount.Id, amount) if update == false { fmt.Println("=================7") continue } var tmp = model.MasterLastMonthAmountFlow{ Uid: utils.IntToStr(master.Id), Time: time.Now(), BeforeAmount: oldAmount, Amount: v.Commission, AfterAmount: amount.LastMonthAmount, Platform: "playlet", Oid: v.Oid, Title: "短剧订单结算", FlowType: "playlet_settle", ExtendUid: v.ExtendUid, } masterLastMonthAmountFlowDb := db.MasterLastMonthAmountFlowDb{} masterLastMonthAmountFlowDb.Set() masterLastMonthAmountFlowDb.MasterLastMonthAmountFlowInsert(&tmp) v.SettleTime = int(time.Now().Unix()) playletSaleOrderDb.PlayletVideoOrderUpdate(v.Id, &v) } return }