PkActivityStatistic.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. <?php
  2. namespace addons\Pk\common\models;
  3. use addons\Pk\common\enums\PkEnum;
  4. use common\enums\StatusEnum;
  5. use common\models\user\User;
  6. use phpDocumentor\Reflection\DocBlock\Tags\Var_;
  7. use Yii;
  8. use yii\base\Exception;
  9. /**
  10. * This is the model class for table "{{%addons_pk_activity_statistic}}".
  11. *
  12. * @property int $id
  13. * @property int|null $activity_id 活动ID
  14. * @property int|null $user_id 用户ID
  15. * @property int $mall_id 商场ID
  16. * @property int $status 状态[1启用 0禁用 -1删除]
  17. * @property int|null $target 目标
  18. * @property int $new_user_num 拉新人数
  19. * @property float|null $order_money_num 现在业绩值
  20. * @property int $share_num 分享次数
  21. * @property int $share_visit 分享访问人数
  22. * @property int $created_at 创建时间
  23. * @property int $updated_at 修改时间
  24. */
  25. class PkActivityStatistic extends \common\models\base\BaseActiveRecord
  26. {
  27. const ENABLE_STATUS = 1; // 启用
  28. CONST DISABLE_STATUS = 0; // 禁用
  29. CONST DELETE_STATUS = -1; // 删除
  30. /**
  31. * {@inheritdoc}
  32. */
  33. public static function tableName()
  34. {
  35. return '{{%addons_pk_activity_statistic}}';
  36. }
  37. /**
  38. * {@inheritdoc}
  39. */
  40. public function rules()
  41. {
  42. return [
  43. [['activity_id', 'user_id', 'mall_id', 'status', 'new_user_num', 'share_num', 'share_visit', 'created_at', 'updated_at'], 'integer'],
  44. [['order_money_num', 'target'], 'number'],
  45. ];
  46. }
  47. /**
  48. * {@inheritdoc}
  49. */
  50. public function attributeLabels()
  51. {
  52. return [
  53. 'id' => 'ID',
  54. 'activity_id' => '活动ID',
  55. 'user_id' => '用户ID',
  56. 'mall_id' => '商场ID',
  57. 'status' => '状态[1启用 0禁用 -1删除]',
  58. 'target' => '目标',
  59. 'new_user_num' => '拉新人数',
  60. 'order_money_num' => '现在业绩值',
  61. 'share_num' => '分享次数',
  62. 'share_visit' => '分享访问人数',
  63. 'created_at' => '创建时间',
  64. 'updated_at' => '修改时间',
  65. ];
  66. }
  67. public function getUser()
  68. {
  69. return $this->hasOne(User::class, ['id' => 'user_id'])->select('id,mobile,nickname,avatar_url,parent_id,username');
  70. }
  71. public function getActivity()
  72. {
  73. return $this->hasOne(PkActivity::ClassName(), ['id' => 'activity_id'])->select('name,id');
  74. }
  75. /**
  76. * 更新统计数据
  77. * @Author: ltm
  78. * @DateTime: 2022/6/8 0015 9:26
  79. * @Copyright: copyright (c) 2021
  80. * @param $mall_id
  81. * @param array $params
  82. * @return Rebate|bool
  83. */
  84. public static function setData(array $params){
  85. try{
  86. //添加活动统计数据
  87. $model = self::findOne(['user_id' => $params['user_id'],'mall_id' => $params['mall_id'],'activity_id'=>$params['activity_id']]);
  88. if($model){
  89. if($params['new_user_num']) $model->new_user_num = $model->new_user_num + $params['new_user_num'];
  90. if($params['order_money_start']) $model->order_money_start = $model->order_money_start + $params['order_money_start'];
  91. if($params['order_money_num']) $model->order_money_num = $model->order_money_num + $params['order_money_num'];
  92. if($params['order_money_end']) $model->order_money_end = $model->order_money_end + $params['order_money_end'];
  93. if($params['share_num']) $model->share_num = $model->share_num + $params['share_num'];
  94. if($params['share_visit']) $model->share_visit = $model->share_visit + $params['share_visit'];
  95. unset($params['new_user_num'], $params['order_money_start'], $params['order_money_num'], $params['order_money_end'], $params['share_num'], $params['share_visit']);
  96. }else{
  97. $model = new self();
  98. $model->loadDefaultValues();
  99. $model->mall_id = $params['mall_id'];
  100. $model->user_id = $params['user_id'];
  101. }
  102. if(!$model->load($params,'') || !$model->save()) throw new Exception($model->getErrorMessage());
  103. return $model;
  104. }catch(\Exception $e){
  105. self::setStaticError($e->getMessage());
  106. return false;
  107. }
  108. }
  109. /**
  110. * 更新拉新统计数据
  111. * @Author: ltm
  112. * @DateTime: 2022/6/8 0015 9:26
  113. * @Copyright: copyright (c) 2021
  114. * @param $mall_id
  115. * @param array $params
  116. * @return Rebate|bool
  117. */
  118. public static function updateNewData(array $user,array $activity){
  119. try{
  120. //添加活动统计数据
  121. $params['mall_id'] = $user['mall_id'];
  122. $model = self::findOne(['user_id' => $user['parent_id'],'mall_id' => $user['mall_id'],'activity_id'=>$activity['id']]);
  123. if($model){
  124. if($activity['new_user_num']) $model->new_user_num = $model->new_user_num + $activity['new_user_num'];
  125. if(!$model->load($params,'') || !$model->save()) throw new Exception($model->getErrorMessage());
  126. //添加活动记录数据
  127. $log['activity_id'] = $activity['id'];
  128. $log['share_user_id'] = $user['parent_id'];
  129. $log['mall_id'] = $user['mall_id'];
  130. $log['invitee_id'] = $user['id'];
  131. $log['year'] = date('Y');
  132. $log['month'] = date('m');
  133. $log['date'] = date('d');
  134. $log['activity_type'] = PkEnum::ACTIVITY_TYPE_PERSON;
  135. $add_log = PkInviteLog::setData($log);
  136. //按天更新统计数据
  137. $date_statistic['mall_id'] = $user['mall_id'];
  138. $date_statistic['new_user_num'] = 1;
  139. $date_statistic['date'] = date("Y-m-d");
  140. $add_static = PkDateStatistic::setData($date_statistic);
  141. //更新商场pk数据
  142. $statistic['mall_id'] = $user['mall_id'];
  143. $statistic['new_user_num'] = 1;
  144. $add_static = PkStatistic::setData($statistic);
  145. $activity = PkActivity::findOne(['id'=>$activity['id']]);
  146. $activity->new_num = $activity->new_num + 1;
  147. if (!$activity->save()) {
  148. throw new Exception($activity->getErrorMessage());
  149. }
  150. }
  151. return $model;
  152. }catch(\Exception $e){
  153. self::setStaticError($e->getMessage());
  154. return false;
  155. }
  156. }
  157. /**
  158. * 更新拉新统计数据
  159. * @Author: ltm
  160. * @DateTime: 2022/6/8 0015 9:26
  161. * @Copyright: copyright (c) 2021
  162. * @param $mall_id
  163. * @param array $params
  164. * @return Rebate|bool
  165. */
  166. public static function updateOrderData(array $user,array $activity,array $order){
  167. try{
  168. //添加活动统计数据
  169. $params['mall_id'] = $user['mall_id'];
  170. $model = self::findOne(['user_id' => $user['parent_id'],'mall_id' => $user['mall_id'],'activity_id'=>$activity['id']]);
  171. if(!empty($model)){
  172. $model->order_money_num = $model->order_money_num + $order['pay_money'];
  173. if(!$model->load($params,'') || !$model->save()) throw new Exception($model->getErrorMessage());
  174. //添加活动记录数据
  175. $log['activity_id'] = $activity['id'];
  176. $log['share_user_id'] = $user['parent_id'];
  177. $log['order_id'] = $order['id'];
  178. $log['buyer_id'] = $user['id'];
  179. $log['order_id'] = $order['id'];
  180. $log['mall_id'] = $user['mall_id'];
  181. $log['money'] = $order['pay_money'];
  182. $log['year'] = date('Y');
  183. $log['month'] = date('m');
  184. $log['date'] = date('d');
  185. $log['activity_type'] = PkEnum::ACTIVITY_TYPE_PERSON;
  186. $add_log = PkPerformanceLog::setData($log);
  187. //按天更新统计数据
  188. $date_statistic['mall_id'] = $user['mall_id'];
  189. $date_statistic['order_money_num'] = $order['pay_money'];
  190. $date_statistic['date'] = date("Y-m-d");
  191. $add_static = PkDateStatistic::setData($date_statistic);
  192. //更新商场pk数据
  193. $statistic['mall_id'] = $user['mall_id'];
  194. $statistic['order_money_num'] = $order['pay_money'];
  195. $add_static = PkStatistic::setData($statistic);
  196. $activity = PkActivity::findOne(['id'=>$activity['id']]);
  197. $activity->order_amount = $activity->order_amount + $order['pay_money'];
  198. if (!$activity->save()) {
  199. throw new Exception('统计业绩失败' . $activity->getErrorMessage());
  200. }
  201. }
  202. return $model;
  203. }catch(\Exception $e){
  204. self::setStaticError($e->getMessage());
  205. return false;
  206. }
  207. }
  208. /**
  209. * (后台)个人PK概况
  210. */
  211. public function personalPkStatistics($mall_id, $start_time, $end_time)
  212. {
  213. // PK活动数量
  214. $activity_number = PkDateStatistic::pkAcitivityNumCount($mall_id, $start_time, $end_time, 'activity_num');
  215. // 拉新获客
  216. //$new_user_number = PkDateStatistic::pkInvitedNewUserNum($mall_id, 1, $start_time, $end_time, false);
  217. $new_user_number = PkDateStatistic::pkAcitivityNumCount($mall_id, $start_time, $end_time, 'new_user_num');
  218. // PK业绩(元)
  219. //$performance_number = PkDateStatistic::pkPerformanceNum($mall_id, 1, $start_time, $end_time, false);
  220. $performance_number = PkDateStatistic::pkAcitivityNumCount($mall_id, $start_time, $end_time, 'order_money_num');
  221. // PK参与人数
  222. $join_user_number = PkDateStatistic::pkAcitivityNumCount($mall_id, $start_time, $end_time, 'join_user_num');
  223. //分享次数
  224. $share_number = PkDateStatistic::pkAcitivityNumCount($mall_id, $start_time, $end_time, 'share_num');
  225. // 分享访问人数
  226. $share_visit_number = PkDateStatistic::pkAcitivityNumCount($mall_id, $start_time, $end_time, 'share_visit');
  227. return compact('activity_number', 'new_user_number', 'performance_number', 'join_user_number', 'share_number', 'share_visit_number');
  228. }
  229. }