UserService.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: hp
  5. * Date: 2017/11/21
  6. * Time: 10:42
  7. */
  8. namespace App\Modules\User\Services;
  9. use App\Modules\User\Models\User;
  10. use DB;
  11. use GuzzleHttp\Client;
  12. use GuzzleHttp\Promise;
  13. use App\Modules\Order\Models\Order;
  14. class UserService
  15. {
  16. /**
  17. * 创建用户
  18. * $params
  19. * 必穿参数 openid、unionid、distribution_channel_id
  20. * 可传 province、city、country、headimgurl、send_order_id、sex、register_ip
  21. */
  22. static function addUser($params)
  23. {
  24. return User::addUser($params);
  25. }
  26. static function getUserList($limit, $offset)
  27. {
  28. return User::getUserList($limit, $offset);
  29. }
  30. static function getUserByNickAndChannelId($distribution_channel_id, $nickname)
  31. {
  32. return User::getUserByNickAndChannelId($distribution_channel_id, $nickname);
  33. }
  34. /**
  35. * 获取用户信息列表
  36. * @param $pageSize 每页显示的条数
  37. */
  38. static function getPaginationList($pageSize = 20)
  39. {
  40. return User::getPaginationList($pageSize);
  41. }
  42. /**
  43. * 获取用户信息列表
  44. * @param $pageSize 每页显示的条数
  45. */
  46. static function getUsers($pageSize = 20, $careStatus)
  47. {
  48. return User::getPaginationList($pageSize, $careStatus);
  49. }
  50. /**
  51. * 根据id获取用户信息
  52. * @return user object
  53. */
  54. static function getById($id)
  55. {
  56. return User::getById($id);
  57. }
  58. /**
  59. * 根据id获取用户信息
  60. * @return user object
  61. */
  62. static function getUserDataById($id)
  63. {
  64. return User::getUserDataById($id);
  65. }
  66. /**
  67. * 根据id获取用户信息
  68. * @return user object
  69. */
  70. static function getUserDataDetailById($id)
  71. {
  72. return User::getUserDataDetailById($id);
  73. }
  74. /**
  75. * 根据id获取用户名称
  76. * @return string [用户昵称]
  77. */
  78. static function getNicknameById($id)
  79. {
  80. return User::getById($id)->nickname;
  81. }
  82. /**
  83. * 更新用户信息
  84. * @param int $id 用户ID
  85. * @param array $params 可传 province、city、country、headimgurl、sex
  86. * @return boolen
  87. */
  88. static function updateInfo($id, $params)
  89. {
  90. \Log::info('~~~~~~~~~~~~~~~~~====update User====~~~~~~~~~~~~~~~~' . "\n");
  91. \Log::info($id);
  92. \Log::info($params);
  93. return User::updateInfo($id, $params);
  94. }
  95. /**
  96. * 根据union和分销id获取用户信息
  97. * @param $union
  98. * @param $channel_id
  99. * @return mixed
  100. */
  101. static function getUserByUnionAndChannelId($openid, $channel_id)
  102. {
  103. return User::where('openid', $openid)->where('distribution_channel_id', $channel_id)->select('id', 'openid', 'unionid')->first();
  104. }
  105. /**
  106. * 用户余额充值
  107. * @param $uid
  108. * @param $fee
  109. * @return mixed
  110. */
  111. static function addBalance($uid, $fee, $charge, $given)
  112. {
  113. return User::addBalance($uid, $fee, $charge, $given);
  114. }
  115. /**
  116. * 查询推广注册用户总数
  117. * @param $send_order_id
  118. * @return mixed
  119. */
  120. static function getPromotionTotal($send_order_id)
  121. {
  122. return User::getPromotionTotal($send_order_id);
  123. }
  124. /**
  125. * 查询渠道某天注册用户总数
  126. * @param $channel_id
  127. * @param $date
  128. * @return mixed
  129. */
  130. static function getChannelDayTotal($channel_id, $date)
  131. {
  132. return User::getChannelDayTotal($channel_id, $date);
  133. }
  134. /**
  135. * 查询渠道注册用户总数
  136. * @param $channel_id
  137. * @return mixed
  138. */
  139. static function getChannelTotal($channel_id)
  140. {
  141. return User::getChannelTotal($channel_id);
  142. }
  143. /**
  144. * 查询渠道某段时间注册用户总数
  145. * @param $channel_id
  146. * @param $startDate
  147. * @param $endDate
  148. * @return mixed
  149. */
  150. static function getChannelDayToDayTotal($channel_id, $startDate = '', $endDate = '')
  151. {
  152. return User::getChannelDayToDayTotal($channel_id, $startDate, $endDate);
  153. }
  154. /**
  155. * 查询渠道某段时间注册用户总数
  156. * @param array $channelIds
  157. * @param $startDate
  158. * @param $endDate
  159. * @return mixed
  160. */
  161. static function getChannelsDayToDayTotal($channelIds, $startDate = '', $endDate = '')
  162. {
  163. return User::getChannelsDayToDayTotal($channelIds, $startDate, $endDate);
  164. }
  165. /**
  166. * 查询注册用户总数
  167. * @param $params
  168. */
  169. static function getTotalCount($params)
  170. {
  171. return User::getTotalCount($params);
  172. }
  173. /**
  174. * 查询渠道是否有登录
  175. * @param $channelId
  176. * @param $start_time
  177. * @param $end_time
  178. * @return int
  179. */
  180. static function judgeUserYesterdayLogin($channelId, $start_time, $end_time)
  181. {
  182. $user_behavior = DB::table('channel_operate_record')
  183. ->where([
  184. ['distribution_channel_id', '=', $channelId],
  185. ['created_at', '>=', $start_time],
  186. ['created_at', '<=', $end_time]
  187. ])
  188. ->first();
  189. if ($user_behavior) return 1;
  190. return 0;
  191. }
  192. /**
  193. * @param $date
  194. * @param $company_id
  195. * @return mixed
  196. */
  197. static function getCompanyDayTotal($date, $company_id)
  198. {
  199. $end_date = date('Y-m-d', strtotime($date) + 86400);
  200. $info = User::leftjoin('distribution_channels', 'distribution_channels.id', '=', 'users.distribution_channel_id')
  201. ->leftjoin('channel_users', 'channel_users.id', '=', 'distribution_channels.channel_user_id')
  202. ->where([
  203. ['users.created_at', '>=', $date],
  204. ['users.created_at', '<', $end_date],
  205. ['channel_users.company_id', '=', $company_id]
  206. ])
  207. ->groupBy('channel_users.company_id')
  208. ->select(DB::raw("count(users.id) as register_sum"))
  209. ->first();
  210. if ($info) return $info->register_sum;
  211. //\Log::info('getCompanyDayTotal error:' . $company_id);
  212. return $info;
  213. }
  214. static function getCompanyTotal($company_id)
  215. {
  216. $info = User::leftjoin('distribution_channels', 'distribution_channels.id', '=', 'users.distribution_channel_id')
  217. ->leftjoin('channel_users', 'channel_users.id', '=', 'distribution_channels.channel_user_id')
  218. ->where('channel_users.company_id', $company_id)
  219. ->groupBy('channel_users.company_id')
  220. ->select(DB::raw("count(users.id) as register_sum"))
  221. ->first();
  222. if ($info) return $info->register_sum;
  223. //\Log::error('getCompanyTotal error:' . $company_id);
  224. return $info;
  225. }
  226. static function transfromBalanceByUser($from_uid, $to_uid)
  227. {
  228. $add_balance_sql = "update users,(select * from users where id =" . $from_uid . ") as u2
  229. set users.balance = users.balance + u2.balance,
  230. users.reward_balance = users.reward_balance +u2.reward_balance,
  231. users.charge_balance = users.charge_balance +u2.charge_balance where users.id =" . $to_uid;
  232. $res = DB::update($add_balance_sql);
  233. return User::updateInfo($from_uid, ['balance' => 0, 'reward_balance' => 0, 'charge_balance' => 0]);
  234. }
  235. public static function rfmLevel($uid,$register_timestamp){
  236. $register_time_diff = time()-$register_timestamp;
  237. if($register_time_diff < 86400) return [];
  238. $order_result = Order::where('uid',$uid)->where('status','PAID')->select('id','price','created_at')->orderBy('id','desc')->get();
  239. if($order_result->count() <= 0){
  240. return ['r'=>0,'f'=>0,'m'=>0];
  241. }
  242. if($register_time_diff < 3*86400){
  243. $after_one_day_charge = [];
  244. $charge_max_amount = 0;
  245. $in_one_day_charge = [];
  246. $in_one_hour_charge = [];
  247. foreach ($order_result as $item){
  248. $charge_max_amount = $item->price > $charge_max_amount? $item->price:$charge_max_amount;
  249. if( ($item->created_at->timestamp - $register_timestamp) >= 86400 ){
  250. $after_one_day_charge[] = $item->price;
  251. }else{
  252. $in_one_day_charge[] = $item->price;
  253. if( ($item->created_at->timestamp - $register_timestamp) <= 3600 ){
  254. $in_one_hour_charge[] = $item->price;
  255. }
  256. }
  257. }
  258. if($after_one_day_charge_count = count($after_one_day_charge) >0){
  259. return ['r'=>2,'f'=>$after_one_day_charge_count>1 ? 2:1,'m'=>$charge_max_amount>30 ?2:1];
  260. }elseif(count($in_one_day_charge) >0){
  261. if($in_one_day_charge_count = count($in_one_day_charge) == count($in_one_hour_charge)){
  262. return ['r'=>1,'f'=>$in_one_day_charge_count >1?2:1,'m'=>$charge_max_amount>30 ?2:1];
  263. }else{
  264. return ['r'=>2,'f'=>$in_one_day_charge_count >1?2:1,'m'=>$charge_max_amount>30 ?2:1];
  265. }
  266. }
  267. }
  268. if($register_time_diff < 18*86400){
  269. $after_three_day_charge = [];
  270. $charge_max_amount = 0;
  271. $in_three_day_charge = [];
  272. $in_one_hour_charge = [];
  273. foreach ($order_result as $item){
  274. $charge_max_amount = $item->price > $charge_max_amount? $item->price:$charge_max_amount;
  275. if( ($item->created_at->timestamp - $register_timestamp) >= 3*86400 ){
  276. $after_three_day_charge[] = $item->price;
  277. }else{
  278. $in_three_day_charge[] = $item->price;
  279. if( ($item->created_at->timestamp - $register_timestamp) <= 3600 ){
  280. $in_one_hour_charge[] = $item->price;
  281. }
  282. }
  283. }
  284. if($after_three_day_charge_count = count($after_three_day_charge) >0){
  285. return ['r'=>2,'f'=>$after_three_day_charge_count>1 ? 2:1,'m'=>$charge_max_amount>30 ?2:1];
  286. }elseif(count($in_three_day_charge) >0){
  287. if($in_three_day_charge_count = count($in_three_day_charge) == count($in_one_hour_charge)){
  288. return ['r'=>1,'f'=>$in_three_day_charge_count >1?2:1,'m'=>$charge_max_amount>30 ?2:1];
  289. }else{
  290. return ['r'=>2,'f'=>$in_three_day_charge_count >1?2:1,'m'=>$charge_max_amount>30 ?2:1];
  291. }
  292. }
  293. }
  294. $latest_18_day_charge_count = $order_result->where('created_at','>=',date('Y-m-d H:i:s',time()-360*3600))->count();
  295. $latest_18_day_charge_max_amount = $order_result->where('created_at','>=',date('Y-m-d H:i:s',time()-360*3600))->max('price');
  296. if(time() - $order_result->first()->created_at->timestamp <= 360*3600){
  297. return ['r'=>2,'f'=>$latest_18_day_charge_count >1?2:1,'m'=>$latest_18_day_charge_max_amount>30 ?2:1];
  298. }
  299. return ['r'=>1,'f'=>$latest_18_day_charge_count >1?2:1,'m'=>$latest_18_day_charge_max_amount>30 ?2:1];
  300. }
  301. }