123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- <?php
- /**
- * Created by: PhpStorm
- * User: lytian
- * Date: 2020/3/17
- * Time: 10:38
- */
- namespace app\main\service;
- use app\admin\model\Postbackklreferral;
- use app\common\library\Redis;
- use app\common\model\Postbackrules;
- use app\main\constants\PostbackConstants;
- use app\main\model\object\ReturnObject;
- use think\Config;
- use think\db\Query;
- class ReportKlService extends BaseService
- {
- /**
- * 定义属性
- *
- * @var ReportKlService
- */
- protected static $self = null;
- /**
- * 返回实例
- *
- * @return ReportKlService
- */
- public static function instance()
- {
- if (self::$self == null) {
- self::$self = new self();
- }
- return self::$self;
- }
- /**
- * 获取配置
- * @param $rule_id
- * @param $type
- * @param $field
- * @return ReturnObject
- */
- public function getValue($rule_id, $type, $field = 'money')
- {
- $where = [
- 'id' => $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;
- }
- }
|