暂无描述

UserActionsReportService.php 2.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <?php
  2. namespace App\Services;
  3. use App\Models\JxAdPlacementLog;
  4. use App\Support\Log;
  5. use App\Support\RedisModel;
  6. class UserActionsReportService
  7. {
  8. const ACCOUNT_REPORT_RULES_CONF = 'accountReportRulesConf';
  9. const ACCOUNT_REPORT_MISS_INCR_NUM = 'accountReportMissIncrNum';
  10. const ACCOUNT_ACTION_REPORT_LIST = 'accountActionReportList';
  11. # 获取投放账户回传规则配置信息,并判断是否开启
  12. public static function accountReportRule($accountId, $transformType, $advertiserSpaceId) {
  13. $response['enable'] = 0;// 回传状态 1开启 0关闭
  14. $response['miss_status'] = 0;//漏单状态 1开启 0关闭
  15. $response['miss_setvale'] = 1;// 传几
  16. $response['miss_value'] = 1;// 漏几
  17. switch ($transformType) {
  18. case 64:
  19. $response['enable'] = 1;// 仅对64类型的做回传
  20. // if(54284957 == $accountId) {// 对账户54284957进行传1漏1配置
  21. // $response['miss_status'] = 1;
  22. // $response['miss_setvale'] = 1;
  23. // $response['miss_value'] = 1;
  24. // }
  25. if('1941326' == $advertiserSpaceId) {// 对广告位1941326进行传9漏1配置
  26. $response['miss_status'] = 1;
  27. $response['miss_setvale'] = 9;
  28. $response['miss_value'] = 1;
  29. }
  30. break;
  31. }
  32. return $response;
  33. }
  34. public static function shouldMiss($currentValue, $missSetValue, $missValue) {
  35. for($i=0; $i<$missValue; $i++) {
  36. $remainder = ($missSetValue + $missValue - $i) % ($missSetValue + $missValue);
  37. if( $currentValue >1 && ($currentValue % ($missSetValue + $missValue)) == $remainder) {
  38. return true;
  39. }
  40. }
  41. return false;
  42. }
  43. # 获取投放账户漏单记录值,以此来判断是否符合漏单条件
  44. public static function accountMissValue($accountId, $advertiserSpaceId, $missConfig) {
  45. if(0 == $missConfig['miss_status']) {
  46. return false;// 漏单规则关闭,全部回传
  47. }
  48. $hashKey = $accountId;
  49. if(!empty($advertiserSpaceId)) {
  50. $hashKey = $hashKey.'-'.$advertiserSpaceId;
  51. }
  52. $num = RedisModel::hIncrby(self::ACCOUNT_REPORT_MISS_INCR_NUM, $hashKey, 1);
  53. if (self::shouldMiss($num, $missConfig['miss_setvale'], $missConfig['miss_value'])) {
  54. return true;// 漏单
  55. } else {
  56. return false;// 回传
  57. }
  58. }
  59. }