WelfareService.php 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780
  1. <?php
  2. namespace app\service;
  3. use app\common\library\MakeReportGo;
  4. use think\Db;
  5. use think\Env;
  6. use think\Exception;
  7. class WelfareService
  8. {
  9. private $grant_type_id = [
  10. 1 => '进游发放',
  11. 2 => '每日打卡',
  12. 3 => '单笔福利',
  13. 4 => '累充福利',
  14. 5 => '单日累充福利',
  15. 6 => '开服七日累充福利',
  16. 7 => '首充福利',
  17. 8 => '月卡福利',
  18. 9 => '周卡福利'
  19. ];
  20. public function wefare($grant_type_id, $game_id, $sub_channelIds, $channelList, $page = 1, $pageSize = 10, $data = [], $apply = false, $backstage = false)
  21. {
  22. $serverid = 0;
  23. $welfare = model('Welfare')->whereRaw(sprintf('FIND_IN_SET(%s,game_id)', $game_id))
  24. ->where(['grant_type_id' => $grant_type_id])
  25. ->where(function ($query) use ($data) {
  26. if (isset($data['welfare_id']) && $data['welfare_id']) {
  27. $query->where('id', $data['welfare_id']);
  28. }
  29. })
  30. ->order('id desc')->find();
  31. if (!$welfare) {
  32. return ['code' => 20013, 'msg' => '福利信息不存在'];
  33. }
  34. $welfareGiftType = model('welfareGiftType')->where(['id' => $welfare['welfare_gift_type_id']])->find();
  35. if (!$welfareGiftType) {
  36. return ['code' => 20013, 'msg' => '福利类型不存在'];
  37. }
  38. if (isset($data['server_id'])) {
  39. $gameServer = model('GameServer')->where(['game_id' => $game_id, 'id' => $data['server_id']])->find();
  40. $serverid = $gameServer['serverid'];
  41. }
  42. $game_id = ['in', explode(',', $welfare['game_id'])];
  43. if ($data['channel_id']) {
  44. foreach ($data['channel_id'] as $k => $v) {
  45. if (!in_array($v, $sub_channelIds)) {
  46. return ['code' => 20013, 'msg' => '推广信息不存在'];
  47. }
  48. }
  49. $channel_id = ['in', $data['channel_id']];
  50. } else {
  51. $channel_id = ['in', $sub_channelIds];
  52. }
  53. $start_time = strtotime(date('Y-m-d'));
  54. $end_time = strtotime(date('Y-m-d 23:59:59'));
  55. if (in_array($grant_type_id, [1, 2])) {
  56. if ($data['login_end_time'] && $data['login_start_time']) {
  57. $start_time = strtotime($data['login_start_time']);
  58. $end_time = strtotime($data['login_end_time'] . ' 23:59:59');
  59. } else {
  60. $start_time = '';
  61. $end_time = '';
  62. }
  63. } else if (in_array($grant_type_id, [3, 4, 8, 9])) {
  64. if ($welfareGiftType['type_id'] == 1) {
  65. if(isset($data['ext_time']) && $data['ext_time']){
  66. $start_time = strtotime($data['ext_time']);
  67. $end_time = strtotime($data['ext_time']) + 86399;
  68. }else{
  69. list($start_time,$end_time) = $this->getTime($welfareGiftType,$data,$welfare);
  70. }
  71. } else {
  72. return ['code' => 20013, 'msg' => '福利类型不存在'];
  73. }
  74. } else if (in_array($grant_type_id, [5])) {
  75. $start_time = strtotime($data['login_time']);
  76. $end_time = strtotime($data['login_time'] . ' 23:59:59');
  77. } elseif (in_array($grant_type_id, [6])) {
  78. // $gameServer = model('GameServer')->where(['game_id' => $game_id, 'id' => $data['server_id']])->find();
  79. if (!$gameServer) {
  80. return ['code' => 20013, 'msg' => '请选择区服'];
  81. }
  82. // $serverid = $gameServer['serverid'];
  83. $start_time = strtotime(date('Y-m-d H:00:00', $gameServer['create_time']));
  84. $end_time = strtotime(date('Y-m-d H:59:59', $gameServer['create_time'] + 86400 * 7));
  85. } elseif (in_array($grant_type_id, [7])) {
  86. $start_time = '';
  87. $end_time = '';
  88. }
  89. $amount = $welfareGiftType['recharge_amount'];
  90. $role_level = $welfareGiftType['role_level'];
  91. $welfare['welfareGiftType'] = $welfareGiftType;
  92. $members = $this->getUserlistByGrantTypeGameChannelId($grant_type_id, $welfare, $game_id, $channel_id, $serverid, $start_time, $end_time, $amount, $role_level, $page, $pageSize, $data, $data['ids'], $backstage);
  93. if ($apply) {
  94. if ($this->saveWelfareGrant($members['data'], $welfare, $grant_type_id)) {
  95. return ['code' => 20000, 'data' => ''];
  96. } else {
  97. return ['code' => 20013, 'msg' => '申请失败'];
  98. }
  99. } else {
  100. if (!$backstage) {
  101. $channelListArr = [];
  102. foreach ($channelList as $k => $v) {
  103. $channelListArr[$v['id']] = $v['value'];
  104. }
  105. $games = model('common/Game')->whereIn('id', $welfare['game_id'])->column('name', 'id');
  106. foreach ($members['data'] as $k => $v) {
  107. $members['data'][$k]['channel_name'] = isset($channelListArr[$v['channel_id']]) ? $channelListArr[$v['channel_id']] : '';
  108. // $members['data'][$k]['username'] = stringObfuscation($v['username']);
  109. $members['data'][$k]['game_name'] = $games[$v['game_id']];
  110. // $members['data'][$k]['create_time'] = date('Y-m-d H:i:s', $v['create_time']);
  111. }
  112. return ['code' => 20000, 'data' => $members];
  113. } else {
  114. return $members;
  115. }
  116. }
  117. }
  118. public function getTime($welfareGiftType,$data,$welfare){
  119. switch ($welfareGiftType['time_type']) {
  120. case 1: // 全部
  121. $start_time = '';
  122. $end_time = '';
  123. break;
  124. case 2: //当日
  125. if ($data['cycle_id'] == 1) { //今日
  126. if($welfare['month_type'] == 1){ //1当天2隔天
  127. $start_time = strtotime(date('Y-m-d'));
  128. $end_time = strtotime(date('Y-m-d 23:59:59'));
  129. }else{
  130. $start_time = strtotime(date("Y-m-d")) - 86400;
  131. $end_time = strtotime(date('Y-m-d')) - 1;
  132. }
  133. } else { //昨日
  134. if($welfare['month_type'] == 1){ //1当天2隔天
  135. $start_time = strtotime(date("Y-m-d")) - 86400;
  136. $end_time = strtotime(date('Y-m-d')) - 1;
  137. }else{
  138. $start_time = strtotime(date("Y-m-d")) - 86400*2;
  139. $end_time = strtotime(date('Y-m-d')) - 86401;
  140. }
  141. }
  142. break;
  143. case 3: //周
  144. if ($data['cycle_id'] == 1) { //本周
  145. if($welfare['month_type'] == 1) { //1当天2隔天
  146. $start_time = mktime(0, 0, 0, date("m"), date("d") - date("w") + 1, date("Y"));
  147. $end_time = mktime(23, 59, 59, date("m"), date("d") - date("w") + 7, date("Y"));
  148. }else{
  149. $start_time = mktime(0, 0, 0, date("m"), date("d") - date("w") + 1-7, date("Y"));
  150. $end_time = mktime(23, 59, 59, date("m"), date("d") - date("w") + 7-7, date("Y"));
  151. }
  152. } else { //上周
  153. if($welfare['month_type'] == 1) { //1当天2隔天
  154. $start_time = mktime(0, 0, 0, date("m"), date("d") - date("w") + 1 - 7, date("Y"));
  155. $end_time = mktime(23, 59, 59, date("m"), date("d") - date("w") + 7 - 7, date("Y"));
  156. }else{
  157. $start_time = mktime(0, 0, 0, date("m"), date("d") - date("w") + 1 - 7*2, date("Y"));
  158. $end_time = mktime(23, 59, 59, date("m"), date("d") - date("w") + 7 - 7*2, date("Y"));
  159. }
  160. }
  161. break;
  162. case 4: //月
  163. if ($data['cycle_id'] == 1) { //本月
  164. if($welfare['month_type'] == 1) { //1当天2隔天
  165. $start_time = mktime(0, 0, 0, date("m"), 1, date("Y"));
  166. $end_time = mktime(23, 59, 59, date("m"), date("t"), date("Y"));
  167. }else{
  168. $start_time = mktime(0, 0, 0, date("m") - 1, 1, date("Y"));
  169. $end_time = mktime(23, 59, 59, date("m"), 0, date("Y"));
  170. }
  171. } else { //上月
  172. if($welfare['month_type'] == 1) { //1当天2隔天
  173. $start_time = mktime(0, 0, 0, date("m") - 1, 1, date("Y"));
  174. $end_time = mktime(23, 59, 59, date("m"), 0, date("Y"));
  175. }else{
  176. $start_time = mktime(0, 0, 0, date("m") - 2, 1, date("Y"));
  177. $end_time = mktime(23, 59, 59, date("m")-1, 0, date("Y"));
  178. }
  179. }
  180. break;
  181. case 5: //季度
  182. if ($data['cycle_id'] == 1) { //本季度
  183. if($welfare['month_type'] == 1) { //1当天2隔天
  184. $season = ceil((date('n')) / 3);
  185. $start_time = mktime(0, 0, 0, $season * 3 - 3 + 1, 1, date('Y'));
  186. $end_time = mktime(23, 59, 59, $season * 3, date('t', mktime(0, 0, 0, $season * 3, 1, date("Y"))), date('Y'));
  187. }else{
  188. $season = ceil((date('n')) / 3) - 1;
  189. $start_time = mktime(0, 0, 0, $season * 3 - 3 + 1, 1, date('Y'));
  190. $end_time = mktime(23, 59, 59, $season * 3, date('t', mktime(0, 0, 0, $season * 3, 1, date("Y"))), date('Y'));
  191. }
  192. } else { //上季度
  193. if($welfare['month_type'] == 1) { //1当天2隔天
  194. $season = ceil((date('n')) / 3) - 1;
  195. $start_time = mktime(0, 0, 0, $season * 3 - 3 + 1, 1, date('Y'));
  196. $end_time = mktime(23, 59, 59, $season * 3, date('t', mktime(0, 0, 0, $season * 3, 1, date("Y"))), date('Y'));
  197. }else{
  198. $season = ceil((date('n')) / 3) - 2;
  199. $start_time = mktime(0, 0, 0, $season * 3 - 3 + 1, 1, date('Y'));
  200. $end_time = mktime(23, 59, 59, $season * 3, date('t', mktime(0, 0, 0, $season * 3, 1, date("Y"))), date('Y'));
  201. }
  202. }
  203. break;
  204. case 6: //年
  205. if ($data['cycle_id'] == 1) { //今年
  206. if($welfare['month_type'] == 1) { //1当天2隔天
  207. $start_time = strtotime(date('Y-01-01 00:00:00', time()));
  208. $end_time = strtotime(date('Y-12-31 23:59:59', time()));
  209. }else{
  210. $start_time = strtotime(date('Y-01-01 00:00:00', strtotime('-1 year')));
  211. $end_time = strtotime(date('Y-12-31 23:59:59', strtotime('-1 year')));
  212. }
  213. } else { // 去年
  214. if($welfare['month_type'] == 1) { //1当天2隔天
  215. $start_time = strtotime(date('Y-01-01 00:00:00', strtotime('-1 year')));
  216. $end_time = strtotime(date('Y-12-31 23:59:59', strtotime('-1 year')));
  217. }else{
  218. $start_time = strtotime(date('Y-01-01 00:00:00', strtotime('-2 year')));
  219. $end_time = strtotime(date('Y-12-31 23:59:59', strtotime('-2 year')));
  220. }
  221. }
  222. break;
  223. case 7: //自定义
  224. $start_time = strtotime(date('Y-m-d', $welfareGiftType['start_time']));
  225. $end_time = strtotime(date('Y-m-d 23:59:59', $welfareGiftType['end_time']));
  226. break;
  227. }
  228. return [$start_time,$end_time];
  229. }
  230. /**
  231. * @param $grant_type_id 发放类型 1进游发放2每日打卡3单笔福利4累充福利5单日累充福利6开服七日累充福利7首充福利8月卡福利9周卡福利
  232. * @param $welfare 玩家福利
  233. * @param $game_id
  234. * @param $channel_id
  235. * @param $start_time 开始时间 (1进游发放2每日打卡 时间应为当日时间)
  236. * @param $end_time 结算时间 (1进游发放2每日打卡 时间应为当日时间)
  237. * @param int $start_amount
  238. * @param int $end_amount
  239. */
  240. public function getUserlistByGrantTypeGameChannelId($grant_type_id, $welfare, $game_id, $channel_id, $serverid = '', $start_time = '', $end_time = '', $amount = 0, $role_level = 0, $page, $pageSize, $data, $ids = [], $backstage = false)
  241. {
  242. $welfareWhere = [
  243. 'game_id' => $game_id,
  244. 'channel_id' => $channel_id,
  245. ];
  246. $where = [
  247. 'a.game_id' => $game_id,
  248. 'a.channel_id' => $channel_id,
  249. ];
  250. $payWhere = [
  251. 'a.gameid' => $game_id,
  252. 'a.channel_id' => $channel_id,
  253. 'a.status' => 1,
  254. ];
  255. if (isset($data['username']) && trim($data['username'])) {
  256. $where['b.username'] = trim($data['username']);
  257. $payWhere['a.username'] = trim($data['username']);
  258. }
  259. if (isset($data['roleid']) && trim($data['roleid'])) {
  260. $where['a.roleid'] = trim($data['roleid']);
  261. $payWhere['a.roleid'] = trim($data['roleid']);
  262. $welfareWhere['role_id'] = trim($data['roleid']);
  263. }
  264. if (isset($data['rolename']) && trim($data['rolename'])) {
  265. $where['a.rolename'] = trim($data['rolename']);
  266. $payWhere['a.rolename'] = trim($data['rolename']);
  267. $welfareWhere['role_name'] = trim($data['rolename']);
  268. }
  269. if (isset($data['orderid']) && trim($data['orderid'])) {
  270. $payWhere['a.orderid'] = trim($data['orderid']);
  271. }
  272. // 条件判断
  273. if (in_array($grant_type_id, [1])) {//进游发放
  274. if ($ids) {
  275. $where['a.mgs_id'] = ['in', $ids];
  276. }
  277. if ($serverid) {
  278. $welfareWhere['server_id'] = $serverid;
  279. $where['a.serverid'] = $serverid;
  280. }
  281. if ($role_level > 0) {
  282. $where['a.rolelevel'] = ['>=', $role_level];
  283. }
  284. $welfareWhere['welfare_id'] = $welfare['id'];
  285. } else if (in_array($grant_type_id, [2])) {//2每日打卡
  286. if ($start_time && $end_time) {
  287. $where['c.create_time'] = ['between', [$start_time, $end_time]];
  288. }
  289. if ($ids) {
  290. $where['c.id'] = ['in', $ids];
  291. }
  292. if ($serverid) {
  293. $welfareWhere['server_id'] = $serverid;
  294. $where['c.serverid'] = $serverid;
  295. }
  296. } else if (in_array($grant_type_id, [3])) { //3单笔福利
  297. if ($ids) {
  298. $payWhere['a.id'] = ['in', $ids];
  299. }
  300. if ($amount > 0) {
  301. $payWhere['a.amount'] = $amount;
  302. } else {
  303. return false;
  304. }
  305. if ($start_time && $end_time) {
  306. $welfareWhere['apply_time'] = ['between', [$start_time, $end_time]];
  307. $payWhere['a.pay_time'] = ['between', [$start_time, $end_time]];
  308. }
  309. $welfareWhere['welfare_id'] = $welfare['id'];
  310. if ($serverid) {
  311. $welfareWhere['server_id'] = $serverid;
  312. $payWhere['a.serverid'] = $serverid;
  313. }
  314. } else if (in_array($grant_type_id, [4, 5, 6])) { //4累充福利5单日累充福利6开服七日累充福利
  315. if ($ids) {
  316. $payWhere['a.id'] = ['in', $ids];
  317. }
  318. if ($amount <= 0) {
  319. return false;
  320. }
  321. if ($start_time && $end_time) {
  322. if ($grant_type_id == 5) {
  323. $welfareWhere['apply_date'] = ['between', [date('Y-m-d', $start_time), date('Y-m-d', $end_time)]];
  324. } else if ($grant_type_id != 6) {
  325. $welfareWhere['apply_time'] = ['between', [$start_time, $end_time]];
  326. }
  327. $payWhere['a.pay_time'] = ['between', [$start_time, $end_time]];
  328. }
  329. $welfareWhere['welfare_id'] = $welfare['id'];
  330. if ($serverid) {
  331. $welfareWhere['server_id'] = $serverid;
  332. $payWhere['a.serverid'] = $serverid;
  333. }
  334. } else if (in_array($grant_type_id, [7])) {//7首充福利
  335. if ($ids) {
  336. $payWhere['a.id'] = ['in', $ids];
  337. }
  338. if ($start_time && $end_time) {
  339. $welfareWhere['apply_time'] = ['between', [$start_time, $end_time]];
  340. $payWhere['a.pay_time'] = ['between', [$start_time, $end_time]];
  341. }
  342. if ($amount > 0) {
  343. if($welfare['first_type'] == 2){
  344. $payWhere['a.amount'] = ['>=', $amount];
  345. }else{
  346. $payWhere['a.amount'] = $amount;
  347. }
  348. } else {
  349. return false;
  350. }
  351. if ($serverid) {
  352. $welfareWhere['server_id'] = $serverid;
  353. $payWhere['a.serverid'] = $serverid;
  354. }
  355. } else if (in_array($grant_type_id, [8, 9])) {//8月卡福利9周卡福利
  356. if ($ids) {
  357. $payWhere['id'] = ['in', $ids];
  358. }
  359. if ($amount <= 0) {
  360. return false;
  361. }
  362. if($welfare['welfareGiftType']['recharge_type'] == 2){
  363. if ($amount >= $welfare['welfareGiftType']['max_recharge_amount'] || $welfare['welfareGiftType']['max_recharge_amount']<=0) {
  364. return false;
  365. }
  366. }
  367. if (!($start_time && $end_time)) {
  368. return false;
  369. }
  370. $welfareWhere['apply_date'] = ['between', [date('Y-m-d', $start_time), date('Y-m-d', $end_time)]];
  371. $payWhere['a.pay_time'] = ['between', [$start_time, $end_time]];
  372. $welfareWhere['welfare_id'] = $welfare['id'];
  373. if ($serverid) {
  374. $welfareWhere['server_id'] = $serverid;
  375. $payWhere['a.serverid'] = $serverid;
  376. }
  377. }
  378. $welfareWhere['examine'] = ['in', [1, 2]];
  379. $welfareWhere['grant_type_id'] = $grant_type_id;
  380. //获取已发放用户
  381. $welfareGrantList = model('common/WelfareGrant')->where($welfareWhere)->field('member_id,server_id,orderid,apply_date')->select();
  382. // $members = [];
  383. //1今日进游发放
  384. if ($grant_type_id == 1) {
  385. if ($start_time && $end_time) {
  386. $where['a.create_time'] = ['between', [$start_time, $end_time]]; //该时间应为当日时间
  387. }
  388. //获取有效用户
  389. $sql = model('common/MemberGameServer')
  390. ->alias('a')
  391. ->join('cy_members b', 'a.member_id=b.id')
  392. ->where($where)
  393. ->where(function ($query) use ($welfareGrantList) {
  394. foreach ($welfareGrantList as $k => $v) {
  395. $query->whereRaw(sprintf('not (a.member_id = %d and a.serverid = %s )', $v['member_id'], Db::quote($v['server_id'])));
  396. }
  397. })
  398. ->group('a.member_id,a.serverid')
  399. ->field('a.mgs_id,"" as orderid,a.member_id,a.channel_id,a.game_id,a.serverid,a.servername,a.roleid,a.rolename,a.rolelevel,FROM_UNIXTIME(a.create_time, "%Y-%m-%d %H:%i:%s") as create_time,0 as amount,0 as cumulative_amount,b.username')
  400. ->buildSql();
  401. if ($backstage) {
  402. $members = Db::table($sql . ' a')->order('a.create_time desc')->paginate(10, false, ['query' => input()]);
  403. } else {
  404. $members = Db::table($sql . ' a')->order('a.create_time desc')->paginate(['list_rows' => $pageSize, 'page' => $page])->toArray();
  405. }
  406. } else if ($grant_type_id == 2) {//2每日打卡
  407. // $where['a.update_time'] = ['between', [$start_time, $end_time]]; //该时间应为当日时间
  408. //获取有效用户
  409. $sql = model('common/GameServerIp')
  410. ->alias('c')
  411. ->join('cy_members b', 'c.member_id=b.id')
  412. ->join('nw_member_game_server a', 'a.member_id=c.member_id and a.game_id=c.game_id and a.serverid=c.serverid')
  413. ->where($where)
  414. ->where(function ($query) use ($welfareGrantList) {
  415. foreach ($welfareGrantList as $k => $v) {
  416. $query->whereRaw(sprintf('not (c.member_id = %d and c.serverid = %s and %s)', $v['member_id'], Db::quote($v['server_id']), 'FROM_UNIXTIME(c.create_time, "%Y-%m-%d" ) = ' . Db::quote($v['apply_date'])));
  417. }
  418. })->group('c.member_id,c.serverid,FROM_UNIXTIME(c.create_time, "%Y-%m-%d" )')
  419. ->field('c.id as mgs_id,"" as orderid,a.member_id,a.channel_id,a.game_id,a.serverid,a.servername,a.roleid,a.rolename,a.rolelevel,FROM_UNIXTIME(c.create_time, "%Y-%m-%d %H:%i:%s" ) as create_time,0 as amount,0 as cumulative_amount,b.username')
  420. ->buildSql();
  421. if ($backstage) {
  422. $members = Db::table($sql . ' a')->order('a.create_time desc')->paginate(10, false, ['query' => input()]);
  423. } else {
  424. $members = Db::table($sql . ' a')->order('a.create_time desc')->paginate(['list_rows' => $pageSize, 'page' => $page])->toArray();
  425. }
  426. } else if ($grant_type_id == 3) {//3单笔福利
  427. //获取有效用户
  428. $query = model('common/Pay')->where($payWhere)
  429. ->alias('a')
  430. ->where(function ($query) use ($welfareGrantList, $welfare) {
  431. foreach ($welfareGrantList as $k => $v) {
  432. if ($welfare['frequency'] == 1) { //发放次数 1一次 2多次
  433. $query->whereRaw(sprintf('not (a.userid = %d and a.serverid = %s )', $v['member_id'], Db::quote($v['server_id'])));
  434. } else {
  435. $query->whereRaw(sprintf('not (a.userid = %d and a.orderid = %s )', $v['member_id'], Db::quote($v['orderid'])));
  436. }
  437. }
  438. })->field('a.id as mgs_id,a.orderid,a.userid as member_id,a.channel_id,a.gameid as game_id,a.serverid,a.servername,a.roleid,a.rolename,a.rolelevel,FROM_UNIXTIME(a.pay_time, "%Y-%m-%d %H:%i:%s" ) as create_time,a.amount,0 as cumulative_amount,a.username');
  439. if ($welfare['frequency'] == 1) {//发放次数 1一次 2多次
  440. $sql = $query->group('a.userid,a.serverid')->buildSql();
  441. } else {
  442. $sql = $query->buildSql();
  443. }
  444. if ($backstage) {
  445. $members = Db::table($sql . ' a')->order('a.create_time desc')->paginate(10, false, ['query' => input()]);
  446. } else {
  447. $members = Db::table($sql . ' a')->order('a.create_time desc')->paginate(['list_rows' => $pageSize, 'page' => $page])->toArray();
  448. }
  449. } else if (in_array($grant_type_id, [4, 5, 6])) { //4累充福利 5单日累充福利 6开服七日累充福利
  450. //获取有效用户
  451. $sql = model('common/Pay')->where($payWhere)
  452. ->alias('a')
  453. ->where(function ($query) use ($welfareGrantList, $welfare, $amount) {
  454. foreach ($welfareGrantList as $k => $v) {
  455. $query->whereRaw(sprintf('not (a.userid = %d and a.serverid = %s )', $v['member_id'], Db::quote($v['server_id'])));
  456. }
  457. })->field('group_concat(a.id) as mgs_id,"" as orderid,a.userid as member_id,a.channel_id,a.gameid as game_id,a.serverid,a.servername,a.roleid,a.rolename,a.rolelevel,FROM_UNIXTIME(a.pay_time, "%Y-%m-%d %H:%i:%s" ) as create_time,0 as amount,sum(a.amount) as cumulative_amount,a.username')
  458. ->group('a.userid,a.serverid')->having('sum(a.amount)>=' . $amount)->buildSql();
  459. if ($backstage) {
  460. $members = Db::table($sql . ' a')->paginate(10, false, ['query' => input()]);
  461. } else {
  462. $members = Db::table($sql . ' a')->paginate(['list_rows' => $pageSize, 'page' => $page])->toArray();
  463. }
  464. } else if (in_array($grant_type_id, [7])) { // 7首充福利
  465. //获取有效用户
  466. $sql = model('common/Pay')->where($payWhere)
  467. ->alias('a')
  468. ->where(function ($query) use ($welfareGrantList, $welfare) {
  469. foreach ($welfareGrantList as $k => $v) {
  470. $query->whereRaw(sprintf('not (a.userid = %d and a.serverid = %s )', $v['member_id'], Db::quote($v['server_id'])));
  471. }
  472. })->field('a.id as mgs_id,a.orderid,a.userid as member_id,a.channel_id,a.gameid as game_id,a.serverid,a.servername,a.roleid,a.rolename,a.rolelevel,FROM_UNIXTIME(a.pay_time, "%Y-%m-%d %H:%i:%s" ) as create_time,a.amount,0 as cumulative_amount,a.username')
  473. ->group('a.userid,a.serverid')->buildSql();
  474. if ($backstage) {
  475. $members = Db::table($sql . ' a')->paginate(10, false, ['query' => input()]);
  476. } else {
  477. $members = Db::table($sql . ' a')->paginate(['list_rows' => $pageSize, 'page' => $page])->toArray();
  478. }
  479. } else if (in_array($grant_type_id, [8, 9])) {// 8月卡福利9周卡福利
  480. //获取有效用户
  481. $sql = model('common/Pay')->where($payWhere)
  482. ->alias('a')
  483. ->where(function ($query) use ($welfareGrantList, $welfare) {
  484. foreach ($welfareGrantList as $k => $v) {
  485. $query->whereRaw(sprintf('not (a.userid = %d and a.serverid = %s )', $v['member_id'], Db::quote($v['server_id'])));
  486. }
  487. })->field('group_concat(a.id) as mgs_id,"" as orderid,a.userid as member_id,a.channel_id,a.gameid as game_id,a.serverid,a.servername,a.roleid,a.rolename,a.rolelevel,FROM_UNIXTIME(a.pay_time, "%Y-%m-%d %H:%i:%s" ) as create_time,0 as amount,sum(a.amount) as cumulative_amount,a.username')
  488. ->group('a.userid,a.serverid');
  489. //金额类型1单金额2区间金额
  490. if($welfare['welfareGiftType']['recharge_type'] == 1){
  491. $sql = $sql->having('sum(a.amount)>=' . $amount)->buildSql();
  492. }else{
  493. $sql = $sql->having('sum(a.amount)>=' . $amount.' and sum(a.amount)<='.$welfare['welfareGiftType']['max_recharge_amount'])->buildSql();
  494. }
  495. if ($backstage) {
  496. $members = Db::table($sql . ' a')->paginate(10, false, ['query' => input()]);
  497. } else {
  498. $members = Db::table($sql . ' a')->paginate(['list_rows' => $pageSize, 'page' => $page])->toArray();
  499. }
  500. }
  501. return $members;
  502. }
  503. public function saveWelfareGrant($members, $welfare, $grant_type_id)
  504. {
  505. $time = time();
  506. $ids = [];
  507. $apply = false;
  508. try {
  509. model('common/WelfareGrant')->startTrans();
  510. $resources_data = json_decode($welfare['resources_data'], true);
  511. foreach ($members as $k => $v) {
  512. $welfareGrant = [
  513. 'game_id' => $v['game_id'],
  514. 'server_id' => $v['serverid'],
  515. 'role_id' => $v['roleid'],
  516. 'member_id' => $v['member_id'],
  517. 'username' => $v['username'],
  518. 'channel_id' => $v['channel_id'],
  519. 'grant_type_id' => $grant_type_id,
  520. 'welfare_id' => $welfare['id'],
  521. 'level' => $v['rolelevel'],
  522. 'role_name' => $v['rolename'],
  523. 'apply_time' => $time,
  524. 'orderid' => $v['orderid'],
  525. 'amount' => $v['amount'],
  526. 'cumulative_amount' => $v['cumulative_amount'],
  527. 'welfare_gift_type_id' => $welfare['welfare_gift_type_id'],
  528. ];
  529. //是否需要审核1不需要2需要
  530. if ($welfare['is_examine'] == 1) {
  531. $welfareGrant['examine'] = 2;
  532. } else {
  533. $apply = true;
  534. $welfareGrant['examine'] = 1;
  535. }
  536. if (in_array($grant_type_id, [2, 4, 5, 8, 9])) {
  537. $welfareGrant['apply_date'] = date('Y-m-d', strtotime($v['create_time']));
  538. } else {
  539. $welfareGrant['apply_date'] = date('Y-m-d');
  540. }
  541. if (!$id = model('common/WelfareGrant')->insertGetId($welfareGrant)) {
  542. model('common/WelfareGrant')->rollback();
  543. return false;
  544. }
  545. $ids[] = $id;
  546. $tmp = [];
  547. if (in_array($grant_type_id, [8, 9])) { // 月卡周卡特殊处理
  548. $grant_date = model('common/WelfareGrant')->alias('a')->where([
  549. 'game_id' => $v['game_id'],
  550. 'server_id' => $v['serverid'],
  551. 'member_id' => $v['member_id'],
  552. 'grant_type_id' => $grant_type_id,
  553. 'welfare_id' => $welfare['id'],
  554. ])->join('cy_welfare_grant_data b', 'a.id=b.welfare_grant_id')->max('grant_date', false);
  555. if ($grant_date) {
  556. $grant_date_time = strtotime($grant_date) + 86400;
  557. } else {
  558. $grant_date_time = time();
  559. }
  560. $i = 0;
  561. if ($grant_type_id == 8) { //月卡 30天
  562. $len = 30;
  563. } else {
  564. $len = 7;
  565. }
  566. for ($i = 0; $i < $len; $i++) {
  567. foreach ($resources_data as $kk => $vv) {
  568. $tmp[] = [
  569. 'welfare_grant_id' => $id,
  570. 'welfare_resources_id' => $vv['welfare_resources_id'],
  571. 'number' => $vv['number'],
  572. 'grant_date' => date('Y-m-d', $grant_date_time + $i * 86400),
  573. 'unique_id' => makeUniqueid('FL')
  574. ];
  575. }
  576. }
  577. } else {
  578. foreach ($resources_data as $kk => $vv) {
  579. $tmp[] = [
  580. 'welfare_grant_id' => $id,
  581. 'welfare_resources_id' => $vv['welfare_resources_id'],
  582. 'number' => $vv['number'],
  583. 'grant_date' => date('Y-m-d'),
  584. 'unique_id' => makeUniqueid('FL')
  585. ];
  586. }
  587. }
  588. if ($tmp) {
  589. model('common/welfareGrantData')->insertAll($tmp);
  590. } else {
  591. model('common/WelfareGrant')->rollback();
  592. return false;
  593. }
  594. }
  595. } catch (Exception $e) {
  596. model('common/WelfareGrant')->rollback();
  597. return false;
  598. }
  599. model('common/WelfareGrant')->commit();
  600. if(!$apply){
  601. foreach ($ids as $k => $v) {
  602. $makeReportGo = new MakeReportGo();
  603. $makeReportGo->welfareTask('welfareList', $v);
  604. }
  605. }
  606. if($apply){
  607. curlDD('【福利审核】有新的福利申请待审核',Env::get('notice_weelfar_url'));
  608. }
  609. return true;
  610. }
  611. public function welfareGrantList($data, $sub_channelIds, $channelList)
  612. {
  613. $where = [];
  614. if ($data['channel_id']) {
  615. foreach ($data['channel_id'] as $k => $v) {
  616. if (!in_array($v, $sub_channelIds)) {
  617. return ['code' => 20013, 'msg' => '推广信息不存在'];
  618. }
  619. }
  620. $where['a.channel_id'] = ['in', $data['channel_id']];
  621. } else {
  622. $where['a.channel_id'] = ['in', $sub_channelIds];
  623. }
  624. if ($data['game_id']) {
  625. $where['a.game_id'] = $data['game_id'];
  626. }
  627. if ($data['grant_type_id']) {
  628. $where['a.grant_type_id'] = $data['grant_type_id'];
  629. }
  630. if ($data['welfare_id']) {
  631. $where['a.welfare_id'] = $data['welfare_id'];
  632. }
  633. if ($data['server_id']) {
  634. $gameServer = model('GameServer')->where(['game_id' => $data['game_id'], 'id' => $data['server_id']])->find();
  635. $where['a.server_id'] = ['in', $gameServer['serverid']];
  636. }
  637. if ($data['examine']) {
  638. $where['a.examine'] = $data['examine'];
  639. }
  640. if ($data['grant_result']) {
  641. $where['a.grant_result'] = $data['grant_result'];
  642. }
  643. if ($data['username']) {
  644. $where['a.username'] = $data['username'];
  645. }
  646. if ($data['roleid']) {
  647. $where['a.roleid'] = $data['roleid'];
  648. }
  649. if ($data['rolename']) {
  650. $where['a.rolename'] = $data['rolename'];
  651. }
  652. if ($data['start_time'] && $data['end_time']) {
  653. $start_time = strtotime($data['start_time']);
  654. $end_time = strtotime($data['end_time'] . ' 23:59:59');
  655. $where['a.apply_time'] = ['between', [$start_time, $end_time]];
  656. }
  657. $data = model('common/WelfareGrant')
  658. ->alias('a')
  659. ->join('cy_welfare b', 'a.welfare_id=b.id')
  660. ->where($where)
  661. ->order('a.id desc')
  662. ->field('a.*,b.name')
  663. ->paginate(['list_rows' => $data['pageSize'], 'page' => $data['page']])
  664. ->toArray();
  665. if ($data['data']) {
  666. $channelListArr = [];
  667. foreach ($channelList as $k => $v) {
  668. $channelListArr[$v['id']] = $v['value'];
  669. }
  670. $games = model('common/Game')->cache('welfare:welfareservice:game', 300)->column('name', 'id');
  671. $servers = model('common/GameServer')->cache('welfare:welfareservice:server', 300)->field('servername,game_id,serverid')->select();
  672. $serversArr = [];
  673. foreach ($servers as $k => $v) {
  674. $serversArr[$v['game_id'] . '_' . $v['serverid']] = $v['servername'];
  675. }
  676. foreach ($data['data'] as $k => $v) {
  677. $data['data'][$k]['channel_name'] = isset($channelListArr[$v['channel_id']]) ? $channelListArr[$v['channel_id']] : '';
  678. $data['data'][$k]['server_name'] = isset($serversArr[$v['game_id'] . '_' . $v['server_id']]) ? $serversArr[$v['game_id'] . '_' . $v['server_id']] : '';
  679. $data['data'][$k]['game_name'] = $games[$v['game_id']];
  680. $data['data'][$k]['grant_type_game'] = $this->grant_type_id[$v['grant_type_id']];
  681. $data['data'][$k]['examine'] = $v['examine'] == 1 ? '未审核' : ($v['examine'] == 2 ? '审核通过' : '拒绝');
  682. $data['data'][$k]['grant_result'] = $v['grant_result'] == 1 ? '未发放' : ($v['grant_result'] == 2 ? '发放中' : ($v['grant_result'] == 3 ? '发放完成' : '发放失败'));
  683. }
  684. }
  685. return ['code' => 20000, 'data' => $data];
  686. }
  687. }