package svc import ( "applet/app/comm/md" "applet/app/comm/utils" "applet/app/comm/utils/logx" "applet/app/lib/plan" "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/db" model2 "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/db/model" "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/lib/comm_plan" zhios_order_relate_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/utils" zhios_order_relate_logx "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/utils/logx" "encoding/json" "fmt" "github.com/jinzhu/copier" "strings" "xorm.io/xorm" ) var pvdCfgList = map[string]struct { AK string SK string Sid string }{ md.PVD_TB: {"third_taobao_svc_ak", "third_taobao_svc_sk", "third_taobao_web_sid"}, md.PVD_KL: {md.KEY_CFG_KL_AK, md.KEY_CFG_KL_SK, ""}, md.PVD_SN: {md.KEY_CFG_SN_AK, md.KEY_CFG_SN_SK, ""}, md.PVD_JD: {md.KEY_CFG_ZM_AK, md.KEY_CFG_ZM_SK, md.KEY_CFG_ZM_WEB_ID}, md.PVD_PDD: {md.KEY_CFG_ZM_AK, md.KEY_CFG_ZM_SK, md.KEY_CFG_ZM_WEB_ID}, md.PVD_VIP: {md.KEY_CFG_ZM_AK, md.KEY_CFG_ZM_SK, md.KEY_CFG_ZM_WEB_ID}, } func GetPlanCfg(eg *xorm.Engine, pvd, masterId string) (*plan.PlanOpt, error) { opt := &plan.PlanOpt{} //cacheKey := fmt.Sprintf(md.PlanRewardCfgCacheKey, masterId, pvd) //fmt.Println("分佣缓存key:", cacheKey) //err := cache.GetJson(cacheKey, &opt) //fmt.Println("分佣") //if err != nil || opt == nil { // 根据供应商 rewardOpt, err := db.DbsPlanRewardByPvd(eg, pvd) if err != nil { return nil, err } if rewardOpt == nil { return nil, logx.Warn("找不到方案记录") } if rewardOpt.State == 0 { return nil, logx.Warn("抽成方案未开启") } if rewardOpt.PlanCommissionId == 0 { return nil, logx.Warn("抽成方案未设置佣金方案id") } fmt.Println("抽成设置:", utils.SerializeStr(rewardOpt)) fmt.Println("commission id:", rewardOpt.PlanCommissionId) commissionOpt, err := db.DbsPlanCommissionById(eg, rewardOpt.PlanCommissionId) if err != nil || commissionOpt == nil || commissionOpt.Id == 0 { return nil, err } if _, ok := comm_plan.Fn[commissionOpt.Mode]; !ok && zhios_order_relate_utils.InArr(commissionOpt.Mode, []string{"public_platoon", "extend_price", "lv_integral_release"}) == false { return nil, logx.Warn("分佣模式不存在") } opt.Pvd = pvd opt.Mode = commissionOpt.Mode opt.IntegralOpen = rewardOpt.IntegralOpen opt.SysRate = float64(int64(rewardOpt.SysRate*1e4)) / 1e4 opt.PvdRate = float64(int64(rewardOpt.PvdRate*1e4)) / 1e4 opt.RegionRate = float64(int64(rewardOpt.RegionRate*1e4)) / 1e4 opt.GlobalRate = float64(int64(rewardOpt.GlobalRate*1e4)) / 1e4 opt.PushHandRate = float64(int64(rewardOpt.PushHandRate*1e4)) / 1e4 opt.MerchantRate = float64(int64(rewardOpt.MerchantRate*1e4)) / 1e4 opt.PlanCommissionId = rewardOpt.PlanCommissionId if commissionOpt.Mode == "public_platoon" { //公排 var subsidyTmp1 map[int]*plan.PublicReward var subsidyTmp map[int]*plan.LvGrade if err := json.Unmarshal([]byte(commissionOpt.Data), &subsidyTmp1); err != nil { if masterId == "68823769" { fmt.Println("===========================分佣方案数据设置错误", commissionOpt) fmt.Println("===========================分佣方案数据设置错误", err) } fmt.Println(err) return nil, zhios_order_relate_logx.Warn(fmt.Sprintf("%s:分佣方案数据设置错误", masterId)) } copier.Copy(&subsidyTmp, &subsidyTmp1) var subsidyTmp2 = make(map[int]*plan.LvGrade) for _, v := range subsidyTmp { if subsidyTmp2[v.Lv] == nil { subsidyTmp2[v.Lv] = &plan.LvGrade{} } subsidyTmp2[v.Lv] = v } opt.UserRate = subsidyTmp2 return opt, nil } // 兑换现金比例 virtualCoinMoneyRate, err := GetVirtualCoinMoneyRateList(eg, masterId) if err != nil || virtualCoinMoneyRate == nil { opt.VirtualCoinMoneyRatioList = nil } else { opt.VirtualCoinMoneyRatioList = virtualCoinMoneyRate } if opt.SysRate >= 1 || opt.PvdRate >= 1 || opt.RegionRate >= 1 || opt.GlobalRate >= 1 || opt.PvdRate+opt.SysRate+opt.RegionRate+opt.GlobalRate >= 1 { return nil, logx.Warn("分佣方案数据设置总额不能大于1") } var subsidyTmp map[int]*plan.LvGrade var subsidyTmpDs map[int]*comm_plan.LvGradeDs var subsidyTmpPricePublic map[int]*comm_plan.LvGradePricePublic var subsidyTmpWineryAdv map[int]*comm_plan.LvGradeWineryAdv commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"bili\":0", "\"bili\":\"0\"") commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"buy_deliver_list\":[]", "\"buy_deliver_list\":{}") commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"new_team_list\":[]", "\"new_team_list\":{}") commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"new_extend_list\":[]", "\"new_extend_list\":{}") commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"second_extend_list\":[]", "\"second_extend_list\":{}") commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"to_extend_list\":[]", "\"to_extend_list\":{}") commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"to_team_list\":[]", "\"to_team_list\":{}") commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"same_extend\":[[]]", "\"same_extend\":[]") commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"common_wealth_system\":[]", "\"common_wealth_system\":{}") commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"common_wealth_system\":[\"0\"]", "\"common_wealth_system\":{}") if strings.Contains(commissionOpt.Data, "\"subsidy_mode_list\":[") { //兼容旧的方案 tmp := strings.Split(commissionOpt.Data, "\"subsidy_mode_list\":[") if len(tmp) > 0 { tmp1 := strings.Split(tmp[1], "]") if len(tmp1) > 0 { str := "\"subsidy_mode_list\":[" + tmp1[0] + "]" ex := strings.Split(tmp1[0], ",") bili := "bili" if len(ex) > 0 { bili = strings.ReplaceAll(ex[0], "\"", "") } commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, str, "\"subsidy_mode_list\":{\"0\":\""+bili+"\"}") } } } if strings.Contains(commissionOpt.Data, "\"buy_deliver_list\":[") { // tmp := strings.Split(commissionOpt.Data, "\"buy_deliver_list\":[") if len(tmp) > 0 { tmp1 := strings.Split(tmp[1], "]") if len(tmp1) > 0 { str := "\"buy_deliver_list\":[" + tmp1[0] + "]" str1 := "\"buy_deliver_list\":{" + tmp1[0] + "}" commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, str, str1) } } } if zhios_order_relate_utils.InArr(commissionOpt.Mode, []string{"lv_ds_check"}) { if err := json.Unmarshal([]byte(commissionOpt.Data), &subsidyTmpDs); err != nil { if masterId == "68823769" { fmt.Println("===========================分佣方案数据设置错误", commissionOpt) fmt.Println("===========================分佣方案数据设置错误", err) } fmt.Println(err) return nil, zhios_order_relate_logx.Warn(fmt.Sprintf("%s:分佣方案数据设置错误", masterId)) } copier.Copy(&subsidyTmp, &subsidyTmpDs) opt.UserRate = subsidyTmp return opt, nil } if zhios_order_relate_utils.InArr(commissionOpt.Mode, []string{"lv_winery_adv"}) { if err := json.Unmarshal([]byte(commissionOpt.Data), &subsidyTmpWineryAdv); err != nil { if masterId == "68823769" { fmt.Println("===========================分佣方案数据设置错误", commissionOpt) fmt.Println("===========================分佣方案数据设置错误", err) } return nil, zhios_order_relate_logx.Warn(fmt.Sprintf("%s:分佣方案数据设置错误", masterId)) } copier.Copy(&subsidyTmp, &subsidyTmpWineryAdv) opt.UserRate = subsidyTmp return opt, nil } if zhios_order_relate_utils.InArr(commissionOpt.Mode, []string{"lv_price_public_platoon"}) { if err := json.Unmarshal([]byte(commissionOpt.Data), &subsidyTmpPricePublic); err != nil { return nil, zhios_order_relate_logx.Warn(fmt.Sprintf("%s:分佣方案数据设置错误", masterId)) } copier.Copy(&subsidyTmp, &subsidyTmpPricePublic) opt.UserRate = subsidyTmp return opt, nil } if err := json.Unmarshal([]byte(commissionOpt.Data), &subsidyTmp); err != nil { if masterId == "68823769" { fmt.Println("===========================分佣方案数据设置错误", commissionOpt) fmt.Println("===========================分佣方案数据设置错误", err) } return nil, zhios_order_relate_logx.Warn(fmt.Sprintf("%s:分佣方案数据设置错误", masterId)) } opt.UserRate = subsidyTmp return opt, nil } func GetPlanCfgService(eg *xorm.Engine, pvd, masterId string) (*plan.PlanOpt, error) { opt := &plan.PlanOpt{} //cacheKey := fmt.Sprintf(md.PlanRewardCfgCacheKey, masterId, pvd) //fmt.Println("分佣缓存key:", cacheKey) //err := cache.GetJson(cacheKey, &opt) //fmt.Println("分佣") //if err != nil || opt == nil { // 根据供应商 rewardOpt, err := db.DbsPlanRewardByPvd(eg, pvd) if err != nil { return nil, err } if rewardOpt == nil { return nil, logx.Warn("找不到方案记录") } if rewardOpt.State == 0 { return nil, logx.Warn("抽成方案未开启") } if rewardOpt.SecondPlanCommissionId == 0 { return nil, logx.Warn("抽成方案未设置佣金方案id") } fmt.Println("抽成设置:", utils.SerializeStr(rewardOpt)) fmt.Println("commission id:", rewardOpt.SecondPlanCommissionId) commissionOpt, err := db.DbsPlanCommissionById(eg, rewardOpt.SecondPlanCommissionId) if err != nil || commissionOpt == nil || commissionOpt.Id == 0 { return nil, err } if _, ok := comm_plan.Fn[commissionOpt.Mode]; !ok && zhios_order_relate_utils.InArr(commissionOpt.Mode, []string{"public_platoon", "extend_price", "lv_integral_release"}) == false { return nil, logx.Warn("分佣模式不存在") } opt.Pvd = pvd opt.Mode = commissionOpt.Mode opt.IntegralOpen = rewardOpt.IntegralOpen opt.SysRate = float64(int64(rewardOpt.SysRate*1e4)) / 1e4 opt.PvdRate = float64(int64(rewardOpt.PvdRate*1e4)) / 1e4 opt.RegionRate = float64(int64(rewardOpt.RegionRate*1e4)) / 1e4 opt.GlobalRate = float64(int64(rewardOpt.GlobalRate*1e4)) / 1e4 opt.PushHandRate = float64(int64(rewardOpt.PushHandRate*1e4)) / 1e4 opt.MerchantRate = float64(int64(rewardOpt.MerchantRate*1e4)) / 1e4 opt.PlanCommissionId = rewardOpt.SecondPlanCommissionId if commissionOpt.Mode == "public_platoon" { //公排 var subsidyTmp1 map[int]*plan.PublicReward var subsidyTmp map[int]*plan.LvGrade if err := json.Unmarshal([]byte(commissionOpt.Data), &subsidyTmp1); err != nil { if masterId == "68823769" { fmt.Println("===========================分佣方案数据设置错误", commissionOpt) fmt.Println("===========================分佣方案数据设置错误", err) } fmt.Println(err) return nil, zhios_order_relate_logx.Warn(fmt.Sprintf("%s:分佣方案数据设置错误", masterId)) } copier.Copy(&subsidyTmp, &subsidyTmp1) var subsidyTmp2 = make(map[int]*plan.LvGrade) for _, v := range subsidyTmp { if subsidyTmp2[v.Lv] == nil { subsidyTmp2[v.Lv] = &plan.LvGrade{} } subsidyTmp2[v.Lv] = v } opt.UserRate = subsidyTmp2 return opt, nil } // 兑换现金比例 virtualCoinMoneyRate, err := GetVirtualCoinMoneyRateList(eg, masterId) if err != nil || virtualCoinMoneyRate == nil { opt.VirtualCoinMoneyRatioList = nil } else { opt.VirtualCoinMoneyRatioList = virtualCoinMoneyRate } if opt.SysRate >= 1 || opt.PvdRate >= 1 || opt.RegionRate >= 1 || opt.GlobalRate >= 1 || opt.PvdRate+opt.SysRate+opt.RegionRate+opt.GlobalRate >= 1 { return nil, logx.Warn("分佣方案数据设置总额不能大于1") } var subsidyTmp map[int]*plan.LvGrade var subsidyTmpDs map[int]*comm_plan.LvGradeDs var subsidyTmpPricePublic map[int]*comm_plan.LvGradePricePublic var subsidyTmpWineryAdv map[int]*comm_plan.LvGradeWineryAdv commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"bili\":0", "\"bili\":\"0\"") commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"buy_deliver_list\":[]", "\"buy_deliver_list\":{}") commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"new_team_list\":[]", "\"new_team_list\":{}") commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"new_extend_list\":[]", "\"new_extend_list\":{}") commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"second_extend_list\":[]", "\"second_extend_list\":{}") commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"to_extend_list\":[]", "\"to_extend_list\":{}") commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"to_team_list\":[]", "\"to_team_list\":{}") commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"same_extend\":[[]]", "\"same_extend\":[]") commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"common_wealth_system\":[]", "\"common_wealth_system\":{}") commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"common_wealth_system\":[\"0\"]", "\"common_wealth_system\":{}") if strings.Contains(commissionOpt.Data, "\"subsidy_mode_list\":[") { //兼容旧的方案 tmp := strings.Split(commissionOpt.Data, "\"subsidy_mode_list\":[") if len(tmp) > 0 { tmp1 := strings.Split(tmp[1], "]") if len(tmp1) > 0 { str := "\"subsidy_mode_list\":[" + tmp1[0] + "]" ex := strings.Split(tmp1[0], ",") bili := "bili" if len(ex) > 0 { bili = strings.ReplaceAll(ex[0], "\"", "") } commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, str, "\"subsidy_mode_list\":{\"0\":\""+bili+"\"}") } } } if strings.Contains(commissionOpt.Data, "\"buy_deliver_list\":[") { // tmp := strings.Split(commissionOpt.Data, "\"buy_deliver_list\":[") if len(tmp) > 0 { tmp1 := strings.Split(tmp[1], "]") if len(tmp1) > 0 { str := "\"buy_deliver_list\":[" + tmp1[0] + "]" str1 := "\"buy_deliver_list\":{" + tmp1[0] + "}" commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, str, str1) } } } if zhios_order_relate_utils.InArr(commissionOpt.Mode, []string{"lv_ds_check"}) { if err := json.Unmarshal([]byte(commissionOpt.Data), &subsidyTmpDs); err != nil { if masterId == "68823769" { fmt.Println("===========================分佣方案数据设置错误", commissionOpt) fmt.Println("===========================分佣方案数据设置错误", err) } fmt.Println(err) return nil, zhios_order_relate_logx.Warn(fmt.Sprintf("%s:分佣方案数据设置错误", masterId)) } copier.Copy(&subsidyTmp, &subsidyTmpDs) opt.UserRate = subsidyTmp return opt, nil } if zhios_order_relate_utils.InArr(commissionOpt.Mode, []string{"lv_winery_adv"}) { if err := json.Unmarshal([]byte(commissionOpt.Data), &subsidyTmpWineryAdv); err != nil { if masterId == "68823769" { fmt.Println("===========================分佣方案数据设置错误", commissionOpt) fmt.Println("===========================分佣方案数据设置错误", err) } return nil, zhios_order_relate_logx.Warn(fmt.Sprintf("%s:分佣方案数据设置错误", masterId)) } copier.Copy(&subsidyTmp, &subsidyTmpWineryAdv) opt.UserRate = subsidyTmp return opt, nil } if zhios_order_relate_utils.InArr(commissionOpt.Mode, []string{"lv_price_public_platoon"}) { if err := json.Unmarshal([]byte(commissionOpt.Data), &subsidyTmpPricePublic); err != nil { return nil, zhios_order_relate_logx.Warn(fmt.Sprintf("%s:分佣方案数据设置错误", masterId)) } copier.Copy(&subsidyTmp, &subsidyTmpPricePublic) opt.UserRate = subsidyTmp return opt, nil } if err := json.Unmarshal([]byte(commissionOpt.Data), &subsidyTmp); err != nil { if masterId == "68823769" { fmt.Println("===========================分佣方案数据设置错误", commissionOpt) fmt.Println("===========================分佣方案数据设置错误", err) } return nil, zhios_order_relate_logx.Warn(fmt.Sprintf("%s:分佣方案数据设置错误", masterId)) } opt.UserRate = subsidyTmp return opt, nil } // 获取所有供应商对应的分佣方案, 包括免单,一元购 func PlanOpts(eg *xorm.Engine) map[string]*plan.PlanOpt { // 获取所有佣金方案 allCommissionPlan := db.DbsPlanCommissionByIds(eg) if allCommissionPlan == nil { return nil } commissionPlans := map[int]*model2.PlanCommission{} for _, v := range allCommissionPlan { v.Data = strings.ReplaceAll(v.Data, "\"bili\":0", "\"bili\":\"0\"") commissionPlans[v.Id] = v } // 获取所有抽成方案的计划 allRewardPlan, err := db.DbsPlanRewardByPvds(eg) if err != nil || allRewardPlan == nil { return nil } opts := map[string]*plan.PlanOpt{} for _, v := range allRewardPlan { if _, ok := commissionPlans[v.PlanCommissionId]; ok && v.State == 1 && v.PlanCommissionId > 0 { var subsidyTmp map[int]*plan.LvGrade if err := json.Unmarshal([]byte(commissionPlans[v.PlanCommissionId].Data), &subsidyTmp); err != nil { logx.Warn("分佣方案数据设置错误 :", commissionPlans[v.PlanCommissionId]) continue } opts[v.Pvd] = &plan.PlanOpt{ Pvd: v.Pvd, PlanCommissionId: v.PlanCommissionId, Mode: commissionPlans[v.PlanCommissionId].Mode, CommissionMode: commissionPlans[v.PlanCommissionId].CommissionMode, SysRate: float64(v.SysRate), PvdRate: float64(v.PvdRate), RegionRate: float64(v.RegionRate), GlobalRate: float64(v.GlobalRate), UserRate: subsidyTmp, } } } fmt.Println(opts) if len(opts) == 0 { return nil } return opts } func PlanOpts1(eg *xorm.Engine) map[string]*plan.PlanOpt { // 获取所有佣金方案 allCommissionPlan := db.DbsPlanCommissionByIds(eg) if allCommissionPlan == nil { return nil } commissionPlans := map[int]*model2.PlanCommission{} for _, v := range allCommissionPlan { v.Data = strings.ReplaceAll(v.Data, "\"bili\":0", "\"bili\":\"0\"") commissionPlans[v.Id] = v } // 获取所有抽成方案的计划 allRewardPlan, err := db.DbsPlanRewardByPvds(eg) if err != nil || allRewardPlan == nil { return nil } opts := map[string]*plan.PlanOpt{} for _, v := range allRewardPlan { if _, ok := commissionPlans[v.PlanCommissionId]; ok && v.State == 1 && v.PlanCommissionId > 0 { opts[v.Pvd] = &plan.PlanOpt{ Pvd: v.Pvd, PlanCommissionId: v.PlanCommissionId, Mode: commissionPlans[v.PlanCommissionId].Mode, CommissionMode: commissionPlans[v.PlanCommissionId].CommissionMode, SysRate: float64(v.SysRate), PvdRate: float64(v.PvdRate), RegionRate: float64(v.RegionRate), GlobalRate: float64(v.GlobalRate), } } } fmt.Println(opts) if len(opts) == 0 { return nil } return opts } func GetCreditCardRate(user *md.User, opts map[string]*plan.PlanOpt) string { opt, ok := opts[md.PVD_CREDIT_CARD] if opts == nil || !ok { // 方案为空写定45 return "45" } userRate, ok1 := opt.UserRate[user.Info.Level] if !ok1 { return "35" } return utils.AnyToString(((1 - opt.SysRate - opt.PvdRate) * userRate.SelfRate) * 100) } func GetVirtualCoinMoneyRateList(eg *xorm.Engine, masterId string) (map[int]string, error) { m, err := db.VirtualCoinListInUse(eg, masterId) if err != nil { _ = logx.Error(err) return nil, err } if len(m) == 0 { return nil, nil } result := make(map[int]string, 0) result[0] = "1" // 把现金也添加进去 比例1:1 for _, coin := range m { result[coin.Id] = coin.ExchangeRatio } return result, nil } func ConvertList2Map(a []*comm_plan.VirtualCoinCommission) (b map[string]float64) { b = make(map[string]float64) for _, i := range a { b[i.Cid] = i.Val } return b }