Matchcollect.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Elton
  5. * Date: 2019/11/1
  6. * Time: 15:08
  7. */
  8. namespace app\admin\controller\campaign;
  9. use app\admin\service\LogService;
  10. use app\common\controller\Backend;
  11. use app\common\service\CampaignService;
  12. use think\Controller;
  13. use think\Db;
  14. use think\Request;
  15. class Matchcollect extends Backend
  16. {
  17. protected $campaign_match_model;
  18. public function _initialize()
  19. {
  20. parent::_initialize();
  21. $this->campaign_match_model = model('CampaignMatch');
  22. if (Config('site.theme') != 'ds') {
  23. Db::query('set SESSION sql_mode =\'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER \';');
  24. }
  25. }
  26. public function index()
  27. {
  28. //设置过滤方法
  29. $this->request->filter(['strip_tags']);
  30. $campaign_id = $this->request->param('campaign_id') ?? '';
  31. if ($this->request->isAjax())
  32. {
  33. //如果发送的来源是Selectpage,则转发到Selectpage
  34. if ($this->request->request('pkey_name'))
  35. {
  36. return $this->selectpage();
  37. }
  38. list($where, $sort, $order, $offset, $limit) = $this->buildparams();
  39. $campaign_id = $this->request->param('campaign_id') ?? '';
  40. $campaign_where = " 1=1 ";
  41. if ($campaign_id) {
  42. $campaign_where .= " AND campaign_id = {$campaign_id}";
  43. }
  44. $campaign_data = CampaignService::instance()->getCampaignById($campaign_id);
  45. $sql_group = "SELECT campaign_id,match_date,period,createtime FROM campaign_match WHERE $campaign_where GROUP BY campaign_id,match_date ";
  46. $sql_group_total = "SELECT COUNT(*) as num FROM ({$sql_group}) as t";
  47. $sql_list = $sql_group." Limit $offset, $limit";
  48. $total_rst = Db::query($sql_group_total);
  49. $total = isset($total_rst[0]['num']) ? $total_rst[0]['num'] : 0;
  50. $list = [];
  51. $group_rst = Db::query($sql_list);
  52. if ($group_rst) {
  53. foreach ($group_rst as $k => $item) {
  54. $sql = "SELECT * FROM campaign_match WHERE campaign_id={$item['campaign_id']} AND match_date = '{$item['match_date']}'";
  55. $data = Db::query($sql);
  56. foreach ($data as $sub_key => $sub_item) {
  57. if ($sub_item['level'] == 2) {
  58. $item['advanced_participator_num'] = $sub_item['participator_num'] + $campaign_data['advanced_num'];
  59. $item['advanced_puncher_num'] = $sub_item['puncher_num']+ $campaign_data['advanced_num'];
  60. $item['advanced_success_num'] = $sub_item['success_num']+ $campaign_data['advanced_num'];
  61. $item['advanced_bonus'] = $sub_item['award'];
  62. $item['advanced_kandian'] = $sub_item['kandian'];
  63. } elseif ($sub_item['level'] == 1) {
  64. $item['intermediate_participator_num'] = $sub_item['participator_num'] + $campaign_data['intermediate_num'];
  65. $item['intermediate_puncher_num'] = $sub_item['puncher_num'] + $campaign_data['intermediate_num'];
  66. $item['intermediate_success_num'] = $sub_item['success_num'] + $campaign_data['intermediate_num'];
  67. $item['intermediate_bonus'] = $sub_item['award'];
  68. $item['intermediate_kandian'] = $sub_item['kandian'];
  69. } else {
  70. $item['elementary_participator_num'] = $sub_item['participator_num'] + $campaign_data['elementary_num'];
  71. $item['elementary_puncher_num'] = $sub_item['puncher_num'] + $campaign_data['elementary_num'];
  72. $item['elementary_success_num'] = $sub_item['success_num'] + $campaign_data['elementary_num'];
  73. $item['elementary_kandian'] = $sub_item['kandian'];
  74. $item['elementary_bonus'] = $sub_item['award'];
  75. $item['subsidy_need'] = $sub_item['subsidy_need'];
  76. }
  77. $item['status'] = $this->calStatus($item);
  78. }
  79. $need = $item['subsidy_need'] ?? 0;
  80. $a_total = ($item['elementary_participator_num'] ?? 0) * ($item['elementary_kandian'] ?? 0);
  81. $b_total = ($item['intermediate_participator_num'] ?? 0) * ($item['intermediate_kandian'] ?? 0);
  82. $c_total = ($item['advanced_participator_num'] ?? 0) * ($item['advanced_kandian'] ?? 0);
  83. //奖池总金额
  84. $item['prize_pool'] = $need + $a_total + $b_total + $c_total;
  85. $item['elementary_bonus'] = $item['elementary_bonus']??0;
  86. $item['intermediate_bonus'] = $item['intermediate_bonus']??0;
  87. $item['advanced_bonus'] = $item['advanced_bonus']??0;
  88. $list[] = $item;
  89. }
  90. }
  91. $result = array("total" => $total, "rows" => $list);
  92. return json($result);
  93. }
  94. $this->assignconfig('campaign_id', $campaign_id);
  95. return $this->view->fetch();
  96. }
  97. /**
  98. * 计算活动状态
  99. * @param $match
  100. * @return string
  101. */
  102. public function calStatus($match)
  103. {
  104. if (strtotime($match['match_date']) > time()) {
  105. return '-';
  106. } elseif ($match['match_date'] == date('Ymd', time())) {
  107. return '报名期';
  108. } elseif ((strtotime($match['match_date']) + ($match['period'] + 1) * 86400) < time()) {
  109. return '结算期';
  110. } else {
  111. return '签到期';
  112. }
  113. }
  114. }