Order.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  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(DB::raw('agent.dbo.[order] as a WITH (NOLOCK)'))
  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(DB::raw('QPAccountsDB.dbo.AccountsInfo as ai WITH (NOLOCK)'), 'ai.UserID', '=', 'a.user_id')
  100. ->whereRaw('RegisterDate>=CONVERT(varchar(10),GETDATE(),120) and a.pay_at>CONVERT(varchar(10),GETDATE(),120)')
  101. ->groupBy('a.Channel')->get()->toArray();
  102. $withdraw = DB::connection('read')->table(DB::raw('QPAccountsDB.dbo.OrderWithDraw as ow WITH (NOLOCK)'))
  103. ->selectRaw('
  104. sum(cast(ow.WithDraw as int))/100 payout,
  105. sum(cast(ow.ServiceFee as int))/100 fee,
  106. count(ow.RecordID) payout_count,
  107. count(distinct (ow.UserID)) payout_user_count,
  108. ai.Channel')
  109. ->leftJoin(DB::raw('QPAccountsDB.dbo.AccountsInfo as ai WITH (NOLOCK)'), 'ai.UserID', '=', 'ow.UserID')
  110. ->whereRaw('RegisterDate>=CONVERT(varchar(10),GETDATE(),120) ')
  111. ->groupBy('ai.Channel')->get()->toArray();
  112. $result=[];
  113. foreach ($pay as $value){
  114. $value=(array)$value;
  115. $result[$value['Channel']]=$value;
  116. }
  117. foreach ($withdraw as $value){
  118. $value=(array)$value;
  119. if(isset($result[$value['Channel']])){
  120. $result[$value['Channel']]=array_merge($result[$value['Channel']],$value);
  121. }else{
  122. $result[$value['Channel']]=$value;
  123. }
  124. }
  125. foreach ($result as &$item){
  126. $item['payout']=$item['payout']??0;
  127. $item['fee']=$item['fee']??0;
  128. $item['payout_count']=$item['payout_count']??0;
  129. $item['payout_user_count']=$item['payout_user_count']??0;
  130. $item['d0_pay_num']=$item['d0_pay_num']??0;
  131. $item['day_pay_count']=$item['day_pay_count']??0;
  132. $item['ltv_now']=$item['d0_pay_num']-$item['payout'];
  133. }
  134. return $result;
  135. }
  136. public static function d0_day_pay_num()
  137. {
  138. return $day_pay_count = DB::connection('read')->table('agent.dbo.order as a')
  139. ->selectRaw('count(DISTINCT a.user_id) as day_pay_count,a.Channel')
  140. ->leftJoin("QPAccountsDB.dbo.AccountsInfo as ai","ai.UserID","=","a.user_id")
  141. ->whereRaw('RegisterDate>=CONVERT(varchar(10),GETDATE(),120) and a.pay_at>CONVERT(varchar(10),GETDATE(),120)')
  142. ->lock('with(nolock)')
  143. ->groupBy('a.Channel')
  144. ->pluck('day_pay_count','Channel')->toArray();
  145. }
  146. //d0新增付费人数
  147. public static function d0_yday_pay_count()
  148. {
  149. return Cache::remember('d0_yday_pay_count1', Carbon::tomorrow(), function () {
  150. return $day_pay_count = DB::connection('read')->table('agent.dbo.order as a')
  151. ->selectRaw('count(DISTINCT a.user_id) as day_pay_count,a.Channel')
  152. ->leftJoin("QPAccountsDB.dbo.AccountsInfo as ai","ai.UserID","=","a.user_id")
  153. ->whereRaw('RegisterDate>=CONVERT(varchar(10),DATEADD(DAY,-1,GETDATE()),120)')
  154. ->whereRaw('RegisterDate<CONVERT(varchar(10),GETDATE(),120)')
  155. ->whereRaw('a.pay_at<CONVERT(varchar(10),GETDATE(),120)')
  156. ->lock('with(nolock)')
  157. ->groupBy('a.Channel')
  158. ->pluck('day_pay_count','Channel')->toArray();
  159. // ->first()->day_pay_count;
  160. });
  161. }
  162. //d0新增付费人数
  163. public static function d0_yday_pay_count_now()
  164. {
  165. return DB::connection('read')->table('agent.dbo.order as a')
  166. ->selectRaw('count(DISTINCT a.user_id) as day_pay_count,a.Channel')
  167. ->leftJoin("QPAccountsDB.dbo.AccountsInfo as ai","ai.UserID","=","a.user_id")
  168. ->whereRaw('RegisterDate>=CONVERT(varchar(10),DATEADD(DAY,-1,GETDATE()),120)')
  169. ->whereRaw('a.pay_at<CONVERT(varchar(20),DATEADD(DAY,-1,GETDATE()),120)')
  170. ->lock('with(nolock)')
  171. ->groupBy('a.Channel')
  172. ->pluck('day_pay_count','Channel')->toArray();
  173. // ->first()->day_pay_count;
  174. }
  175. //今日新增付费人数
  176. public static function day_pay_count()
  177. {
  178. return $day_pay_count = DB::connection('read')->table('agent.dbo.order as a')
  179. ->selectRaw('count(DISTINCT a.user_id) as day_pay_count,Channel')
  180. ->whereNotIn('a.user_id', function ($query) {
  181. $query->select('b.user_id')
  182. ->from('agent.dbo.order as b')
  183. // ->whereRaw('DATEDIFF(DAY, b.pay_at, GETDATE())>0')
  184. ->whereRaw('b.pay_at<CONVERT(varchar(10),GETDATE(),120)')
  185. ->lock('with(nolock)')
  186. ->groupBy('b.user_id');
  187. })
  188. // ->whereRaw('DATEDIFF(DAY, a.pay_at, GETDATE())=0')
  189. ->whereRaw('a.pay_at>CONVERT(varchar(10),GETDATE(),120)')
  190. ->groupBy('Channel')
  191. ->lock('with(nolock)')
  192. ->pluck('day_pay_count','Channel')->toArray();
  193. // ->first()->day_pay_count;
  194. }
  195. //昨日新增付费人数
  196. public static function yday_pay_count()
  197. {
  198. $yday_pay_count = Cache::remember('yday_pay_count', Carbon::tomorrow(), function () {
  199. return $yday_pay_count = DB::connection('read')->table('agent.dbo.order as a')
  200. ->selectRaw('count(DISTINCT a.user_id) as yday_pay_count,Channel')
  201. ->whereNotIn('a.user_id', function ($query) {
  202. $query->select('b.user_id')
  203. ->from('agent.dbo.order as b')
  204. ->whereRaw('DATEDIFF(DAY, b.pay_at, GETDATE())>1')
  205. ->lock('with(nolock)')
  206. ->groupBy('b.user_id');
  207. })
  208. ->whereRaw('DATEDIFF(DAY, a.pay_at, GETDATE())=1')
  209. ->groupBy('Channel')
  210. ->lock('with(nolock)')
  211. ->pluck('yday_pay_count','Channel')->toArray();
  212. // ->first()->yday_pay_count;
  213. });
  214. return $yday_pay_count;
  215. }
  216. public static function yday_pay_count_now()
  217. {
  218. $yday_pay_count = Cache::remember('yday_pay_count_now', 5, function () {
  219. return $yday_pay_count = DB::connection('read')->table('agent.dbo.order as a')
  220. ->selectRaw('count(DISTINCT a.user_id) as yday_pay_count,Channel')
  221. ->whereNotIn('a.user_id', function ($query) {
  222. $query->select('b.user_id')
  223. ->from('agent.dbo.order as b')
  224. ->whereRaw('DATEDIFF(DAY, b.pay_at, GETDATE())>1')
  225. ->lock('with(nolock)')
  226. ->groupBy('b.user_id');
  227. })
  228. ->whereRaw('DATEDIFF(DAY, a.pay_at, GETDATE())=1')
  229. ->whereRaw('a.pay_at<CONVERT(varchar(20),DATEADD(DAY,-1,GETDATE()),120)')
  230. ->groupBy('Channel')
  231. ->lock('with(nolock)')
  232. ->pluck('yday_pay_count','Channel')->toArray();
  233. // ->first()->yday_pay_count;
  234. });
  235. return $yday_pay_count;
  236. }
  237. // 返回礼包名称
  238. public static function GiftsName($GiftsID)
  239. {
  240. switch ($GiftsID) {
  241. case 301:
  242. $GiftsName = '首充';
  243. break;
  244. case 302:
  245. $GiftsName = '破产礼包';
  246. break;
  247. case 303:
  248. $GiftsName = '每日首充礼包';
  249. break;
  250. case 304:
  251. $GiftsName = '每日礼包';
  252. break;
  253. case 305:
  254. $GiftsName = '召回礼包';
  255. break;
  256. case 306:
  257. $GiftsName = 'freebonus礼包';
  258. break;
  259. case 401:
  260. $GiftsName = '大转盘';
  261. break;
  262. case 402:
  263. $GiftsName = '圣诞礼包';
  264. break;
  265. default:
  266. $GiftsName = '商城(充值)';
  267. break;
  268. }
  269. return $GiftsName;
  270. }
  271. public static function getUserUnPayOrder($uid){
  272. $date = date('Y-m-d H:i:s',time()-3600*2);
  273. $sql = "SELECT payment_code,count(1) as tt FROM [order] WHERE user_id=$uid and created_at>'$date' group by payment_code";
  274. $data = DB::select($sql);
  275. return $data?json_decode(json_encode($data),true):[];
  276. }
  277. public static function getUserPayOrder($uid){
  278. $sql = "SELECT payment_code,count(1) as tt FROM [order] WHERE user_id=$uid and pay_status=1 group by payment_code ";
  279. $data = DB::select($sql);
  280. return $data?json_decode(json_encode($data),true):[];
  281. }
  282. }