golang 的 rabbitmq 消费项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

113 lines
5.2 KiB

  1. package plan
  2. var Fn = map[string]func(grade map[int]*LvGrade, totalAmt float64, userList *LvUser, pvd string, sysFee float64, opt *PlanOpt) error{
  3. "lv_all": CalcAll,
  4. "lv_self": CalcSelf,
  5. "lv_subsidy": CalcAll,
  6. "lv_price": CalcAll,
  7. "lv_price_other": CalcAll,
  8. }
  9. type PlanOpt struct {
  10. PlanCommissionId int
  11. Pvd string // 供应商
  12. Mode string // 分佣方案
  13. CommissionMode string // 佣金返佣方式
  14. IntegralMode string // 积分返佣方式
  15. BlockIconsMode string // 区块币返佣方式
  16. SysRate float64 // 系统占佣比例
  17. PvdRate float64 // 供应商占佣比例
  18. RegionRate float64 // 区域代理抽成比例
  19. RegionSubRate float64 // 区域代理抽成比例
  20. GlobalRate float64 // 全球分红抽成比例
  21. IntegralBili float64 // 积分兑换比例
  22. BlockIconsBili float64 // 区块币兑换比例
  23. MerchantRate float64 //商家占佣比例
  24. PushHandRate float64 //推手占佣比例
  25. UserRate map[int]*LvGrade // 供应商对应的等级比例
  26. OrderBeforeRate float64
  27. }
  28. //同级奖励
  29. type PeerRateList struct {
  30. BlockIcons string `json:"block_icons"` //区块币
  31. Commission string `json:"commission"` //佣金
  32. Integral string `json:"integral"` //积分
  33. }
  34. // 级差结构
  35. type LvGrade struct {
  36. Lv int `json:"lv"` // 级别
  37. SubsidyMode int `json:"subsidy_mode"` // 补贴计算方式, 0按佣金计算,1按平台利润计算
  38. SubsidyEnable int `json:"subsidy_enable"` // 是否开启补贴计算方式 0关闭, 1开启
  39. SubsidySelfRate float64 `json:"subsidy_self_rate"` // 自购补贴比例
  40. SubsidyShareRate float64 `json:"subsidy_share_rate"` // 分享补贴比例
  41. PayMode int `json:"pay_mode"` // 0团队内部支出, 1平台系统支出
  42. SelfRate float64 `json:"self_rate"` // 自购比例
  43. TeamRate float64 `json:"team_rate"` // 团队分成比例
  44. PeerRate []float64 `json:"peer_rate"` // 同级分成比例
  45. UserLvUpSubsidyEnable int `json:"user_lv_up_subsidy_enable"` //分销补贴开关
  46. UserLvUpSubsidyMode int `json:"user_lv_up_subsidy_mode"` //补贴方式 0比例 1固定金额
  47. UserSubsidyType string `json:"user_subsidy_type"` // 补贴模式 up_lv 推荐会员补贴 buy_goods 购买商品
  48. UserLvUpSubsidyList []interface{} `json:"user_lv_up_subsidy_list"` //会员费分销补贴相应方式的列表
  49. PeerRateList []PeerRateList `json:"-"` //同级比例
  50. ReturnType []string `json:"return_type"` //返利类型
  51. SelfRateList struct { //自购比例
  52. BlockIcons string `json:"block_icons"`
  53. Commission string `json:"commission"`
  54. Integral string `json:"integral"`
  55. } `json:"-"`
  56. TeamRateList struct { //团队最高比例
  57. BlockIcons string `json:"block_icons"`
  58. Commission string `json:"commission"`
  59. Integral string `json:"integral"`
  60. } `json:"-"`
  61. SubsidyBlockIconsMode string `json:"subsidy_block_icons_mode"` //分销 区块币返利类型 bili 比例 money 固定金额
  62. SubsidyCommissionMode string `json:"subsidy_commission_mode"` //分销 佣金返利类型 bili 比例 money 固定金额
  63. SubsidyIntegralMode string `json:"subsidy_integral_mode"` //分销 积分返利类型 bili 比例 money 固定金额
  64. SubsidyReturnType []string `json:"subsidy_return_type"` //分销 返利类型
  65. SubsidyOwnBiliList []map[string]string `json:"subsidy_own_bili_list"`
  66. }
  67. type UserLvUpSubsidyList struct {
  68. Lv int `json:"lv"` // 等级
  69. Bili float64 `json:"bili"` // 比例
  70. IsUse int `json:"is_use"` // 是否共存
  71. BlockIcons float64 `json:"block_icons"` //区块币
  72. Commission float64 `json:"commission"` //佣金
  73. Integral float64 `json:"integral"` //积分
  74. }
  75. type LvUser struct {
  76. Uid int // 用户ID
  77. Lv int // 等级
  78. NewLv int // 升级后等级 针对会员费分佣
  79. LevelWeight int // 权重
  80. Profit float64 // 利润
  81. SubsidyFee float64 // 补贴
  82. OwnbuyReturnType int //0有返利 1没有返利
  83. Diff int // 与当前用户级别差
  84. ParentUser *LvUser // 父用户
  85. ProfitList []*VirtualCoinCommission
  86. SubsidyFeeList []*VirtualCoinCommission
  87. }
  88. // 虚拟币分佣结构体
  89. type VirtualCoinCommission struct {
  90. Cid string `json:"cid"` // 虚拟币id
  91. Val float64 `json:"val"` // 数量
  92. }
  93. // 初始化级差模式
  94. func Init(g map[int]*LvGrade) map[int]*LvGrade {
  95. var MinLv int = -1 // 最低级别
  96. for k, v := range g {
  97. if MinLv == -1 {
  98. MinLv = v.Lv
  99. g[k].TeamRate = v.SelfRate
  100. } else if v.Lv < MinLv {
  101. MinLv = v.Lv
  102. g[k].TeamRate = v.SelfRate
  103. }
  104. }
  105. return g
  106. }