Order.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. <?php
  2. namespace App\Models;
  3. use App\Facade\TableName;
  4. use App\Http\helper\NumConfig;
  5. use Illuminate\Database\Eloquent\Model;
  6. use Illuminate\Support\Facades\Cache;
  7. use Illuminate\Support\Facades\DB;
  8. use Illuminate\Support\Carbon;
  9. class Order extends Model
  10. {
  11. const TABLE = 'order';
  12. protected $table = self::TABLE;
  13. protected $fillable = ['id', 'user_id', 'order_title', 'amount', 'pay_at', 'order_sn', 'order_sn', 'finished_at', 'payment_sn'];
  14. public $timestamps = false;
  15. //今日充值总额和人数
  16. public static function today_pay()
  17. {
  18. $today_pay =
  19. DB::connection('read')->table('agent.dbo.order')->selectRaw('cast(sum(amount) as int) as today_pay_sum,count(DISTINCT user_id) as today_pay_count')
  20. // ->whereRaw('DATEDIFF(DAY, pay_at, GETDATE())=0')
  21. ->whereRaw('pay_at>CONVERT(varchar(10),GETDATE(),120)')
  22. ->lock('with(nolock)')
  23. ->first();
  24. return $today_pay;
  25. }
  26. //今日充值总额和人数
  27. public static function today_pay_byChannel()
  28. {
  29. $today_pay =[];
  30. $result=DB::connection('read')->table('agent.dbo.order')
  31. ->selectRaw('cast(sum(amount) as int) as today_pay_sum,count(DISTINCT user_id) as today_pay_count,Channel')
  32. ->whereRaw('pay_at>CONVERT(varchar(10),GETDATE(),120)')
  33. ->lock('with(nolock)')
  34. ->groupBy('Channel')->get();
  35. // var_dump($result);die;
  36. foreach ($result as $p){
  37. $today_pay[$p->Channel]=$p;
  38. }
  39. return $today_pay;
  40. }
  41. //昨日充值总额和人数
  42. public static function yesterday_pay()
  43. {
  44. $result = Cache::remember('yesterday_pay', Carbon::tomorrow(), function () {
  45. return $yesterday_pay =
  46. DB::connection('read')->table('agent.dbo.order')
  47. ->selectRaw('cast(sum(amount) as int) as yesterday_pay_sum,count(DISTINCT user_id) as yesterday_pay_count,Channel')
  48. ->whereRaw('DATEDIFF(DAY, pay_at, GETDATE())=1')
  49. ->lock('with(nolock)')
  50. ->groupBy('Channel')->get();
  51. // ->first();
  52. });
  53. $yesterday_pay=[];
  54. foreach ($result as $p){
  55. $yesterday_pay[$p->Channel]=$p;
  56. }
  57. return $yesterday_pay;
  58. }
  59. public static function yesterday_pay_now()
  60. {
  61. $result = Cache::remember('yesterday_pay_now', 5, function () {
  62. return $yesterday_pay =
  63. DB::connection('read')->table('agent.dbo.order')
  64. ->selectRaw('cast(sum(amount) as int) as yesterday_pay_sum,count(DISTINCT user_id) as yesterday_pay_count,Channel')
  65. ->whereRaw('DATEDIFF(DAY, pay_at, GETDATE())=1 and pay_at<CONVERT(varchar(20),DATEADD(DAY,-1,GETDATE()),120)')
  66. ->lock('with(nolock)')
  67. ->groupBy('Channel')->get();
  68. });
  69. $yesterday_pay=[];
  70. foreach ($result as $p){
  71. $yesterday_pay[$p->Channel]=$p;
  72. }
  73. return $yesterday_pay;
  74. }
  75. //总充值金额
  76. public static function pay_sum()
  77. {
  78. return DB::table(TableName::QPRecordDB() . 'RecordUserTotalStatistics')
  79. ->where('Recharge', '>', 0)
  80. ->selectRaw('sum(Recharge) Recharge,count(UserID) payCount')
  81. ->first();
  82. }
  83. //总充值人数
  84. public static function pay_user_count()
  85. {
  86. return $pay_user_count =
  87. DB::connection('read')->table('QPAccountsDB.dbo.YN_VIPAccount')
  88. ->selectRaw('count(UserID) pay_user_count')
  89. ->first()->pay_user_count;
  90. }
  91. //d0新增付费人数
  92. public static function d0_day_pay()
  93. {
  94. $pay = DB::connection('read')->table('agent.dbo.order as a')
  95. ->selectRaw('
  96. cast(sum(a.amount)/100 as int) as d0_pay_num ,
  97. count(DISTINCT a.user_id) as day_pay_count,
  98. a.Channel')
  99. ->leftJoin("QPAccountsDB.dbo.AccountsInfo as ai","ai.UserID","=","a.user_id")
  100. ->whereRaw('RegisterDate>=CONVERT(varchar(10),GETDATE(),120) and a.pay_at>CONVERT(varchar(10),GETDATE(),120)')
  101. ->lock('with(nolock)')
  102. ->groupBy('a.Channel')->get()->toArray();
  103. $withdraw = DB::connection('read')->table('QPAccountsDB.dbo.OrderWithDraw as ow')
  104. ->selectRaw('
  105. sum(cast(ow.WithDraw as int))/100 payout,
  106. sum(cast(ow.ServiceFee as int))/100 fee,
  107. count(ow.RecordID) payout_count,
  108. count(distinct (ow.UserID)) payout_user_count,
  109. ai.Channel')
  110. ->leftJoin("QPAccountsDB.dbo.AccountsInfo as ai","ai.UserID","=","ow.UserID")
  111. ->whereRaw('RegisterDate>=CONVERT(varchar(10),GETDATE(),120) ')
  112. ->lock('with(nolock)')
  113. ->groupBy('ai.Channel')->get()->toArray();
  114. $result=[];
  115. foreach ($pay as $value){
  116. $value=(array)$value;
  117. $result[$value['Channel']]=$value;
  118. }
  119. foreach ($withdraw as $value){
  120. $value=(array)$value;
  121. if(isset($result[$value['Channel']])){
  122. $result[$value['Channel']]=array_merge($result[$value['Channel']],$value);
  123. }else{
  124. $result[$value['Channel']]=$value;
  125. }
  126. }
  127. foreach ($result as &$item){
  128. $item['payout']=$item['payout']??0;
  129. $item['fee']=$item['fee']??0;
  130. $item['payout_count']=$item['payout_count']??0;
  131. $item['payout_user_count']=$item['payout_user_count']??0;
  132. $item['d0_pay_num']=$item['d0_pay_num']??0;
  133. $item['day_pay_count']=$item['day_pay_count']??0;
  134. $item['ltv_now']=$item['d0_pay_num']-$item['payout'];
  135. }
  136. return $result;
  137. }
  138. public static function d0_day_pay_num()
  139. {
  140. return $day_pay_count = DB::connection('read')->table('agent.dbo.order as a')
  141. ->selectRaw('count(DISTINCT a.user_id) as day_pay_count,a.Channel')
  142. ->leftJoin("QPAccountsDB.dbo.AccountsInfo as ai","ai.UserID","=","a.user_id")
  143. ->whereRaw('RegisterDate>=CONVERT(varchar(10),GETDATE(),120) and a.pay_at>CONVERT(varchar(10),GETDATE(),120)')
  144. ->lock('with(nolock)')
  145. ->groupBy('a.Channel')
  146. ->pluck('day_pay_count','Channel')->toArray();
  147. }
  148. //d0新增付费人数
  149. public static function d0_yday_pay_count()
  150. {
  151. return Cache::remember('d0_yday_pay_count1', Carbon::tomorrow(), function () {
  152. return $day_pay_count = DB::connection('read')->table('agent.dbo.order as a')
  153. ->selectRaw('count(DISTINCT a.user_id) as day_pay_count,a.Channel')
  154. ->leftJoin("QPAccountsDB.dbo.AccountsInfo as ai","ai.UserID","=","a.user_id")
  155. ->whereRaw('RegisterDate>=CONVERT(varchar(10),DATEADD(DAY,-1,GETDATE()),120)')
  156. ->whereRaw('RegisterDate<CONVERT(varchar(10),GETDATE(),120)')
  157. ->whereRaw('a.pay_at<CONVERT(varchar(10),GETDATE(),120)')
  158. ->lock('with(nolock)')
  159. ->groupBy('a.Channel')
  160. ->pluck('day_pay_count','Channel')->toArray();
  161. // ->first()->day_pay_count;
  162. });
  163. }
  164. //d0新增付费人数
  165. public static function d0_yday_pay_count_now()
  166. {
  167. return DB::connection('read')->table('agent.dbo.order as a')
  168. ->selectRaw('count(DISTINCT a.user_id) as day_pay_count,a.Channel')
  169. ->leftJoin("QPAccountsDB.dbo.AccountsInfo as ai","ai.UserID","=","a.user_id")
  170. ->whereRaw('RegisterDate>=CONVERT(varchar(10),DATEADD(DAY,-1,GETDATE()),120)')
  171. ->whereRaw('a.pay_at<CONVERT(varchar(20),DATEADD(DAY,-1,GETDATE()),120)')
  172. ->lock('with(nolock)')
  173. ->groupBy('a.Channel')
  174. ->pluck('day_pay_count','Channel')->toArray();
  175. // ->first()->day_pay_count;
  176. }
  177. //今日新增付费人数
  178. public static function day_pay_count()
  179. {
  180. return $day_pay_count = DB::connection('read')->table('agent.dbo.order as a')
  181. ->selectRaw('count(DISTINCT a.user_id) as day_pay_count,Channel')
  182. ->whereNotIn('a.user_id', function ($query) {
  183. $query->select('b.user_id')
  184. ->from('agent.dbo.order as b')
  185. // ->whereRaw('DATEDIFF(DAY, b.pay_at, GETDATE())>0')
  186. ->whereRaw('b.pay_at<CONVERT(varchar(10),GETDATE(),120)')
  187. ->lock('with(nolock)')
  188. ->groupBy('b.user_id');
  189. })
  190. // ->whereRaw('DATEDIFF(DAY, a.pay_at, GETDATE())=0')
  191. ->whereRaw('a.pay_at>CONVERT(varchar(10),GETDATE(),120)')
  192. ->groupBy('Channel')
  193. ->lock('with(nolock)')
  194. ->pluck('day_pay_count','Channel')->toArray();
  195. // ->first()->day_pay_count;
  196. }
  197. //昨日新增付费人数
  198. public static function yday_pay_count()
  199. {
  200. $yday_pay_count = Cache::remember('yday_pay_count', Carbon::tomorrow(), function () {
  201. return $yday_pay_count = DB::connection('read')->table('agent.dbo.order as a')
  202. ->selectRaw('count(DISTINCT a.user_id) as yday_pay_count,Channel')
  203. ->whereNotIn('a.user_id', function ($query) {
  204. $query->select('b.user_id')
  205. ->from('agent.dbo.order as b')
  206. ->whereRaw('DATEDIFF(DAY, b.pay_at, GETDATE())>1')
  207. ->lock('with(nolock)')
  208. ->groupBy('b.user_id');
  209. })
  210. ->whereRaw('DATEDIFF(DAY, a.pay_at, GETDATE())=1')
  211. ->groupBy('Channel')
  212. ->lock('with(nolock)')
  213. ->pluck('yday_pay_count','Channel')->toArray();
  214. // ->first()->yday_pay_count;
  215. });
  216. return $yday_pay_count;
  217. }
  218. public static function yday_pay_count_now()
  219. {
  220. $yday_pay_count = Cache::remember('yday_pay_count_now', 5, function () {
  221. return $yday_pay_count = DB::connection('read')->table('agent.dbo.order as a')
  222. ->selectRaw('count(DISTINCT a.user_id) as yday_pay_count,Channel')
  223. ->whereNotIn('a.user_id', function ($query) {
  224. $query->select('b.user_id')
  225. ->from('agent.dbo.order as b')
  226. ->whereRaw('DATEDIFF(DAY, b.pay_at, GETDATE())>1')
  227. ->lock('with(nolock)')
  228. ->groupBy('b.user_id');
  229. })
  230. ->whereRaw('DATEDIFF(DAY, a.pay_at, GETDATE())=1')
  231. ->whereRaw('a.pay_at<CONVERT(varchar(20),DATEADD(DAY,-1,GETDATE()),120)')
  232. ->groupBy('Channel')
  233. ->lock('with(nolock)')
  234. ->pluck('yday_pay_count','Channel')->toArray();
  235. // ->first()->yday_pay_count;
  236. });
  237. return $yday_pay_count;
  238. }
  239. // 返回礼包名称
  240. public static function GiftsName($GiftsID)
  241. {
  242. switch ($GiftsID) {
  243. case 301:
  244. $GiftsName = '首充';
  245. break;
  246. case 302:
  247. $GiftsName = '破产礼包';
  248. break;
  249. case 401:
  250. $GiftsName = '大转盘';
  251. break;
  252. case 402:
  253. $GiftsName = '圣诞礼包';
  254. break;
  255. default:
  256. $GiftsName = '商城(充值)';
  257. break;
  258. }
  259. return $GiftsName;
  260. }
  261. public static function getUserUnPayOrder($uid){
  262. $date = date('Y-m-d H:i:s',time()-3600*2);
  263. $sql = "SELECT payment_code,count(1) as tt FROM [order] WHERE user_id=$uid and created_at>'$date' group by payment_code";
  264. $data = DB::select($sql);
  265. return $data?json_decode(json_encode($data),true):[];
  266. }
  267. public static function getUserPayOrder($uid){
  268. $sql = "SELECT payment_code,count(1) as tt FROM [order] WHERE user_id=$uid and pay_status=1 group by payment_code ";
  269. $data = DB::select($sql);
  270. return $data?json_decode(json_encode($data),true):[];
  271. }
  272. }