$rule_id, 'state' => PostbackConstants::STATE_SHOW ]; $mPostRule = new PostbackRules(); $data = $mPostRule->where($where)->find(); if ($data) { if ($field == 'money') { $return = Config::get('site.' . $type . '_report_money'); } else { $config = Config::get('site.' . $type . '_report_kl'); if ($config) { $config = json_decode($config, true); $return = $config[$field] ?? '-1'; } } if ($data[$field] != -1) { $return = $data[$field]; } } else { $return = '-1'; } return $this->setData($return)->getReturn(); } /** * 渠道获取规则id * @param $channel_id * @param $type * @return ReturnObject */ public function getKlRuleId($channel_id, $type = PostbackConstants::TYPE_TOUTIAO) { $mPostBackRule = new PostbackRules(); $data = $mPostBackRule->where(function (Query $query) use ($channel_id) { $query->where('find_in_set(' . $channel_id . ', channel_ids)') ->whereOr('channel_ids', '*'); }) ->where('type', $type) ->where('state', PostbackConstants::STATE_SHOW) ->order('weight', 'desc') ->value('id'); return $this->setData($data)->getReturn(); } /** * 获取KL配置 * @param $channel_id * @param string $type * @param string $referral_id * @return ReturnObject */ public function getKlConfig($channel_id, $type = PostbackConstants::TYPE_TOUTIAO, $referral_id = '') { $ruleId = $this->getKlRuleId($channel_id, $type)->data; if ($ruleId) { $config = [ 'type' => $type, 'money' => $this->getValue($ruleId, $type, 'money')->data, 'man_val' => $this->getValue($ruleId, $type, 'man_val')->data, 'kou_val' => $this->getValue($ruleId, $type, 'kou_val')->data, 'is_referral' => 0, ]; if ($referral_id) { $where = [ 'rule_id' => $ruleId, 'type' => $type, 'referral_id' => $referral_id, 'state' => 'show' ]; $mPostReferral = new Postbackklreferral(); $referral = $mPostReferral->where($where)->find(); if ($referral) { if ($referral['money'] != '-1') { $config['money'] = $referral['money']; } if ($referral['man_val'] != '-1') { $config['man_val'] = $referral['man_val']; } if ($referral['kou_val'] != '-1') { $config['kou_val'] = $referral['kou_val']; } $config['is_referral'] = 1; } } } else { $config = [ 'type' => $type, 'money' => '-1', 'man_val' => '-1', 'kou_val' => '-1', 'is_referral' => 0 ]; } return $this->setData($config)->getReturn(); } /** * 检测是否非KL * @param $money * @param $kl * @param $order_money * @return ReturnObject */ public function checkNotKl($channel_id, $klConfig, $referral_id, $order_money) { $money = $klConfig['money']; $man_val = $klConfig['man_val']; $kou_val = $klConfig['kou_val']; if ($money == '-1' || $man_val == '-1' || $kou_val == '-1') { LogService::info('klresult:!k'); return $this->setData(true)->getReturn(); } $isKou = true; if ($order_money >= $money) { //判断订单笔数 if ($klConfig['is_referral']) { LogService::info('klinfo:referral:' . $referral_id . "符合推广链接条件"); } else { LogService::info('klinfo:referral:' . $referral_id . "不符合推广链接条件"); $referral_id = 0; } $isKou = $this->setOrderCount($channel_id, $referral_id, $man_val, $kou_val, $klConfig['type']); if ($isKou) { LogService::info('klresult:k'); } else { LogService::info('klresult:!k'); } } else { LogService::info('klinfo:money:' . $order_money . '<' . $money); LogService::info('klresult:k'); } return $this->setData(!$isKou)->getReturn(); } /** * 订单计数 * @param $channel_id * @param $referral_id * @param $man_val * @param $kou_val * @return bool */ public function setOrderCount($channel_id, $referral_id, $man_val, $kou_val, $type) { $kouState = false; $key = 'REPORTKLIF:' . $channel_id . ':' .$type . ':' . $referral_id; $data = Redis::instance()->hGetAll($key); if ($data) { if ($data['man_val'] >= $man_val) { if ($data['kou_val'] < $kou_val) { $data['kou_val'] = $data['kou_val'] + 1; $kouState = true; LogService::info('klinfo:orders:当前扣到第' . $data['kou_val'] . '笔 配置扣' . $kou_val . "笔 符合订单数条件"); } else { //重置 $data = [ 'man_val' => 1, 'kou_val' => 0, ]; LogService::info('klinfo:orders:当前第' . $data['man_val'] . '笔 配置满' . $man_val . "笔 不符合订单数条件"); } } else { $data['man_val'] = $data['man_val'] + 1; LogService::info('klinfo:orders: 当前第' . $data['man_val'] . '笔 配置满' . $man_val . "笔 不符合订单数条件"); } } else { //计数从1开始 $data = [ 'man_val' => 1, 'kou_val' => 0, ]; LogService::info('klinfo:orders: 当前第' . $data['man_val'] . '笔 配置满' . $man_val . "笔 不符合订单数条件"); } Redis::instance()->hMSet($key, $data); Redis::instance()->expire($key, 86400*7); return $kouState; } }