OtherOrderServices.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\services\order;
  12. use app\dao\order\OtherOrderDao;
  13. use app\services\BaseServices;
  14. use app\services\pay\PayServices;
  15. use app\services\statistic\CapitalFlowServices;
  16. use app\services\user\member\MemberShipServices;
  17. use app\services\user\UserBillServices;
  18. use app\services\user\UserBrokerageServices;
  19. use app\services\user\UserServices;
  20. use app\services\user\member\MemberCardServices;
  21. use crmeb\exceptions\ApiException;
  22. use think\App;
  23. use app\jobs\OtherOrderJob;
  24. /**
  25. * Class OtherOrderServices
  26. * @package app\services\order
  27. * @method getDistinctCount(array $where, $field, ?bool $search = true)
  28. * @method getPayUserCount(int $time, string $channel_type)
  29. * @method getTrendData($time, $type, $timeType)
  30. */
  31. class OtherOrderServices extends BaseServices
  32. {
  33. /**
  34. * @var OtherOrderDao
  35. */
  36. protected $dao;
  37. /**
  38. * 初始化,获得dao层句柄
  39. * OtherOrderServices constructor.
  40. * @param OtherOrderDao $dao
  41. */
  42. public function __construct(OtherOrderDao $dao)
  43. {
  44. $this->dao = $dao;
  45. }
  46. /**
  47. * 生成会员购买订单数据
  48. * @param array $data
  49. * @return mixed
  50. */
  51. public function addOtherOrderData(array $data)
  52. {
  53. if (!$data) throw new ApiException('数据不存在');
  54. $add = [
  55. 'uid' => $data['uid'],
  56. 'type' => $data['type'] ?? 1,
  57. 'order_id' => $data['order_id'],
  58. 'channel_type' => $data['channel_type'],
  59. 'pay_type' => $data['pay_type'] ?? 0,
  60. 'member_type' => $data['member_type'] ?? 0,
  61. 'member_price' => $data['member_price'] ?? 0.00,
  62. 'pay_price' => $data['pay_price'] ?? 0.00,
  63. 'code' => $data['member_code'] ?? "",
  64. 'vip_day' => $data['vip_day'] ?? 0,
  65. 'is_permanent' => $data['is_permanent'] ?? 0,
  66. 'is_free' => $data['is_free'] ?? 0,
  67. 'overdue_time' => $data['overdue_time'] ?? 0,
  68. 'status' => 0,
  69. 'paid' => $data['paid'] ?? 0,
  70. 'pay_time' => $data['pay_time'] ?? 0,
  71. 'money' => $data['money'] ?? 0,
  72. 'add_time' => time(),
  73. ];
  74. return $this->dao->save($add);
  75. }
  76. /**
  77. * 能否领取免费
  78. * @param int $uid
  79. * @return array
  80. * @throws \think\db\exception\DataNotFoundException
  81. * @throws \think\db\exception\DbException
  82. * @throws \think\db\exception\ModelNotFoundException
  83. */
  84. public function isCanGetFree(int $uid)
  85. {
  86. /** @var UserServices $userService */
  87. $userService = app()->make(UserServices::class);
  88. /** @var MemberShipServices $memberShipService */
  89. $memberShipService = app()->make(MemberShipServices::class);
  90. /** @var StoreOrderEconomizeServices $economizeService */
  91. $economizeService = app()->make(StoreOrderEconomizeServices::class);
  92. $freeDay = $memberShipService->getVipDay(['type' => "free"]);
  93. $freeConfig = array();
  94. $freeConfig['price'] = 0;
  95. $freeConfig['pre_price'] = 0;
  96. $freeConfig['title'] = "免费会员";
  97. $freeConfig['type'] = "free";
  98. $freeConfig['vip_day'] = $freeDay ?: 0;
  99. $userInfo = $userService->get($uid);
  100. if ($freeConfig) {
  101. $freeConfig['is_record'] = 0;
  102. $record = $this->dao->getOneByWhere(['uid' => $uid, 'is_free' => 1]);
  103. if ($record) {
  104. $freeConfig['is_record'] = 1;
  105. }
  106. }
  107. $registerTime = $this->TimeConvert(['start_time' => date('Y-m-d H:i:s', $userInfo['add_time']), 'end_time' => date('Y-m-d H:i:s', time())]);
  108. $userInfo['register_days'] = $registerTime['days'];
  109. $userInfo['economize_money'] = $economizeService->sumEconomizeMoney($uid);
  110. $userInfo['shop_name'] = sys_config('site_name');
  111. $freeConfig['user_info'] = $userInfo;
  112. return $freeConfig;
  113. }
  114. /**搜索时间转换
  115. * @param $timeKey
  116. * @param bool $isNum
  117. * @throws \Exception
  118. */
  119. public function TimeConvert($timeKey, $isNum = false)
  120. {
  121. switch ($timeKey) {
  122. case "today":
  123. $data['start_time'] = date('Y-m-d 00:00:00', time());
  124. $data['end_time'] = date('Y-m-d 23:59:59', time());
  125. $data['days'] = 1;
  126. break;
  127. case "yestoday":
  128. $data['start_time'] = date('Y-m-d 00:00:00', strtotime('-1 day'));
  129. $data['end_time'] = date('Y-m-d 23:59:59', strtotime('-1 day'));
  130. $data['days'] = 1;
  131. break;
  132. case "last_month":
  133. $data['start_time'] = date('Y-m-01 00:00:00', strtotime('-1 month'));
  134. $data['end_time'] = date('Y-m-t 23:59:59', strtotime('-1 month'));
  135. $data['days'] = 30;
  136. break;
  137. case "month":
  138. $data['start_time'] = $month_start_time = date('Y-m-01 00:00:00', strtotime(date("Y-m-d")));
  139. $data['end_time'] = date('Y-m-d 23:59:59', strtotime("$month_start_time +1 month -1 day"));
  140. $data['days'] = 30;
  141. break;
  142. case "year":
  143. $data['start_time'] = date('Y-01-01 00:00:00', time());
  144. $data['end_time'] = date('Y-12-t 23:59:59', time());
  145. $data['days'] = 365;
  146. break;
  147. case "last_year":
  148. $data['start_time'] = date('Y-01-01 00:00:00', strtotime('-1 year'));
  149. $data['end_time'] = date('Y-12-t 23:59:59', strtotime('-1 year'));
  150. $data['days'] = 365;
  151. break;
  152. case 30:
  153. case 15:
  154. case 7:
  155. if (!$isNum) {
  156. $data['start_time'] = date("Y-m-d 00:00:00", strtotime("-$timeKey day"));
  157. $data['end_time'] = date('Y-m-d 23:59:59', time());
  158. $data['days'] = $timeKey;
  159. } else {
  160. $day = $timeKey * 2;
  161. $data['start_time'] = date("Y-m-d 00:00:00", strtotime("-$day day"));
  162. $data['end_time'] = date("Y-m-d 23:59:59", strtotime("-$timeKey day"));
  163. $data['days'] = $timeKey;
  164. }
  165. break;
  166. default:
  167. $datetime_start = new \DateTime($timeKey['start_time']);
  168. $datetime_end = new \DateTime($timeKey['end_time']);
  169. $days = $datetime_start->diff($datetime_end)->days;
  170. $days = $days > 0 ? $days : 1;
  171. if (!$isNum) {
  172. $data['start_time'] = $timeKey['start_time'];
  173. $data['end_time'] = $timeKey['end_time'];
  174. $data['days'] = $days;
  175. } else {
  176. $data['start_time'] = date("Y-m-d 00:00:00", strtotime("-$days day"));
  177. $data['end_time'] = $timeKey['start_time'];
  178. $data['days'] = $days;
  179. }
  180. }
  181. return $data;
  182. }
  183. /**
  184. * 查询会员卡订单数据
  185. * @param array $where
  186. * @param string $field
  187. * @return array|\think\Model|null
  188. * @throws \think\db\exception\DataNotFoundException
  189. * @throws \think\db\exception\DbException
  190. * @throws \think\db\exception\ModelNotFoundException
  191. */
  192. public function getOne(array $where, string $field = '*')
  193. {
  194. return $this->dao->getOne($where, $field);
  195. }
  196. /**
  197. * @param int $uid
  198. * @param string $channelType 支付渠道
  199. * @param bool $memberType 会员卡类型
  200. * @param string $payPrice 支付金额
  201. * @param string $payType 支付方式
  202. * @param $type 订单类型
  203. * @return mixed
  204. * @throws \Exception
  205. */
  206. public function createOrder(int $uid, string $channelType, $memberType = false, string $payPrice, string $payType, $type, $money, $mcId)
  207. {
  208. /** @var StoreOrderCreateServices $storeOrderCreateService */
  209. $storeOrderCreateService = app()->make(StoreOrderCreateServices::class);
  210. $orderInfo = [
  211. 'uid' => $uid,
  212. 'order_id' => $storeOrderCreateService->getNewOrderId('hy'),
  213. 'pay_price' => $payPrice,
  214. 'pay_type' => $payType,
  215. 'channel_type' => $channelType,
  216. 'member_code' => "",
  217. ];
  218. if ($type != 3) { //区别 0:免费领取会员 1:购买会员 2:卡密领取会员 3:线下付款
  219. if (!$memberType) throw new ApiException('会员类型不存在');
  220. list($memberPrice, $isFree, $isPermanent, $overdueTime, $type, $newMemberRight) = $this->checkPayMemberType($memberType, $payPrice, $type, $uid, $mcId);
  221. $orderInfo['member_price'] = $memberPrice;
  222. $orderInfo['money'] = $memberPrice;
  223. $orderInfo['vip_day'] = $newMemberRight[$mcId]['vip_day'];
  224. $orderInfo['member_type'] = $memberType;
  225. $orderInfo['overdue_time'] = $overdueTime;
  226. $orderInfo['is_permanent'] = $isPermanent;
  227. $orderInfo['is_free'] = $isFree;
  228. $orderInfo['type'] = $type;
  229. $changeType = "create_member_order";
  230. } else {
  231. $orderInfo['type'] = $type;
  232. $orderInfo['member_code'] = "";
  233. $changeType = "create_offline_scan_order";
  234. $orderInfo['money'] = $money ?: $payPrice;
  235. }
  236. $memberOrder = $this->addOtherOrderData($orderInfo);
  237. if (!$memberOrder) {
  238. throw new ApiException('订单生成失败');
  239. }
  240. /** @var OtherOrderStatusServices $statusService */
  241. $statusService = app()->make(OtherOrderStatusServices::class);
  242. $statusService->save([
  243. 'oid' => $memberOrder['id'],
  244. 'change_type' => $changeType,
  245. 'change_message' => '订单生成',
  246. 'change_time' => time(),
  247. 'shop_type' => $type,
  248. ]);
  249. return $memberOrder;
  250. }
  251. /**
  252. * 免费卡领取支付
  253. * @param $orderInfo
  254. * @return bool
  255. */
  256. public function zeroYuanPayment($orderInfo)
  257. {
  258. if ($orderInfo['paid']) {
  259. throw new ApiException('订单已支付');
  260. }
  261. if ($orderInfo['member_type'] != 'free') {
  262. throw new ApiException('支付失败');
  263. }
  264. $res = $this->paySuccess($orderInfo, 'yue'); //余额支付成功
  265. return $res;
  266. }
  267. /**
  268. * 会员卡支付成功
  269. * @param array $orderInfo
  270. * @param string $paytype
  271. * @return bool
  272. */
  273. public function paySuccess(array $orderInfo, string $paytype = PayServices::WEIXIN_PAY, array $other = [])
  274. {
  275. /** @var OtherOrderStatusServices $statusService */
  276. $statusService = app()->make(OtherOrderStatusServices::class);
  277. /** @var UserServices $userServices */
  278. $userServices = app()->make(UserServices::class);
  279. /** @var UserBillServices $userBillServices */
  280. $userBillServices = app()->make(UserBillServices::class);
  281. $type = 'pay_member';
  282. $res1 = true;
  283. switch ($orderInfo['type']) {
  284. case 0:
  285. case 1:
  286. case 2:
  287. $type = "pay_member";
  288. $res1 = $userServices->setMemberOverdueTime($orderInfo['vip_day'], $orderInfo['uid'], 1, $orderInfo['member_type']);
  289. break;
  290. case 3:
  291. $type = "offline_scan";
  292. $res1 = true;
  293. break;
  294. }
  295. if ($paytype == PayServices::ALIAPY_PAY && isset($other['trade_no'])) {
  296. $updata['trade_no'] = $other['trade_no'];
  297. }
  298. $updata['paid'] = 1;
  299. $updata['pay_type'] = $paytype;
  300. $updata['pay_time'] = time();
  301. $orderInfo['pay_time'] = $updata['pay_time'];
  302. $res2 = $this->dao->update($orderInfo['id'], $updata);
  303. $res3 = $statusService->save([
  304. 'oid' => $orderInfo['id'],
  305. 'change_type' => 'pay_success',
  306. 'change_message' => '用户付款成功',
  307. 'shop_type' => $orderInfo['type'],
  308. 'change_time' => time()
  309. ]);
  310. $now_money = $userServices->value(['uid' => $orderInfo['uid']], 'now_money');
  311. $res4 = $userBillServices->income($type, $orderInfo['uid'], $orderInfo['pay_price'], $now_money, $orderInfo['id']);
  312. //支付成功后发送消息
  313. OtherOrderJob::dispatch([$orderInfo]);
  314. $orderInfo['is_channel'] = 2;
  315. $orderInfo['total_num'] = 1;
  316. if ($orderInfo['pay_type'] != 'yue') {
  317. /** @var CapitalFlowServices $capitalFlowServices */
  318. $capitalFlowServices = app()->make(CapitalFlowServices::class);
  319. $userInfo = $userServices->get($orderInfo['uid']);
  320. $orderInfo['nickname'] = $userInfo['nickname'];
  321. $orderInfo['phone'] = $userInfo['phone'];
  322. $capitalFlowServices->setFlow($orderInfo, $type);
  323. }
  324. $res = $res1 && $res2 && $res3 && $res4;
  325. //购买付费会员返佣设置
  326. if (sys_config('member_brokerage', 0) == 1 && sys_config('brokerage_func_status', 0) == 1) {
  327. $spread_one = sys_config('is_self_brokerage') ? $orderInfo['uid'] : $userServices->getSpreadUid($orderInfo['uid']);
  328. $spread_two = sys_config('brokerage_level', 2) == 2 ? $userServices->getSpreadUid($spread_one, [], false) : 0;
  329. $spread_one_price = bcmul((string)$orderInfo['pay_price'], (string)bcdiv((string)sys_config('store_brokerage_ratio', 0), '100', 4), 2);
  330. $spread_two_price = bcmul((string)$orderInfo['pay_price'], (string)bcdiv((string)sys_config('store_brokerage_two', 0), '100', 4), 2);
  331. if ($spread_one && $spread_one_price > 0 && $userServices->checkUserPromoter($spread_one)) $this->memberBrokerage($spread_one, $spread_one_price, sys_config('is_self_brokerage') ? 'get_self_member_brokerage' : 'get_member_brokerage', $orderInfo);
  332. if ($spread_two && $spread_two_price > 0 && $userServices->checkUserPromoter($spread_two)) $this->memberBrokerage($spread_two, $spread_two_price, 'get_two_member_brokerage', $orderInfo);
  333. }
  334. $orderInfo['pay_type'] = $paytype;
  335. // 小程序订单服务
  336. event('OrderShippingListener', [$type == 'pay_member' ? 'member' : 'offline_scan', $orderInfo, 3, '', '']);
  337. return false !== $res;
  338. }
  339. /**
  340. * 购买付费会员返佣
  341. * @param $uid
  342. * @param $price
  343. * @param $type
  344. * @param $orderInfo
  345. */
  346. public function memberBrokerage($uid, $price, $type, $orderInfo)
  347. {
  348. /** @var UserServices $userServices */
  349. $userServices = app()->make(UserServices::class);
  350. $userInfo = $userServices->get($uid);
  351. // 上级推广员返佣之后的金额
  352. $balance = bcadd($userInfo['brokerage_price'], $price, 2);
  353. // 添加用户佣金
  354. $res1 = $userServices->bcInc($uid, 'brokerage_price', $price, 'uid');
  355. if ($res1) {
  356. //冻结时间
  357. $broken_time = intval(sys_config('extract_time'));
  358. $frozen_time = time() + $broken_time * 86400;
  359. // 添加佣金记录
  360. /** @var UserBrokerageServices $userBrokerageServices */
  361. $userBrokerageServices = app()->make(UserBrokerageServices::class);
  362. $userBrokerageServices->income($type, $uid, [
  363. 'nickname' => $userInfo['nickname'],
  364. 'pay_price' => floatval($orderInfo['pay_price']),
  365. 'number' => floatval($price),
  366. 'frozen_time' => $frozen_time
  367. ], $balance, $orderInfo['id']);
  368. }
  369. }
  370. /**
  371. * 修改
  372. * @param $where
  373. * @param array $data
  374. * @return \crmeb\basic\BaseModel
  375. */
  376. public function update($where, array $data)
  377. {
  378. return $this->dao->update($where, $data);
  379. }
  380. /**
  381. * 购买会员卡数据校验
  382. * @param string $memberType
  383. * @param string $payPrice
  384. * @param string $type
  385. * @param $uid
  386. * @param $mcId
  387. * @return array
  388. * @throws \think\db\exception\DataNotFoundException
  389. * @throws \think\db\exception\DbException
  390. * @throws \think\db\exception\ModelNotFoundException
  391. */
  392. public function checkPayMemberType(string $memberType, string $payPrice, string $type, $uid, $mcId)
  393. {
  394. /** @var MemberCardServices $memberCardService */
  395. $memberCardService = app()->make(MemberCardServices::class);
  396. /** @var UserServices $userService */
  397. $userService = app()->make(UserServices::class);
  398. $userInfo = $userService->get($uid);
  399. if ($userInfo['is_money_level'] > 0 && $userInfo['is_ever_level'] > 0) throw new ApiException('您已是永久会员无需再购买');
  400. $newMemberRight = $memberCardService->getMemberTypeValue();
  401. if (!array_key_exists($mcId, $newMemberRight)) throw new ApiException('该会员卡暂时无法购买');
  402. $price = $newMemberRight[$mcId]['pre_price'];
  403. if ($payPrice != $price || ($memberType != 'free' && $payPrice <= 0)) throw new ApiException('参数错误');
  404. if ($memberType == 'free' && $newMemberRight[$mcId]['vip_day'] <= 0) throw new ApiException('参数错误');
  405. switch ($memberType) {
  406. case "free": //免费会员
  407. $isCanGetFree = $this->isCanGetFree($uid);
  408. if ($isCanGetFree['is_record'] == 1) throw new ApiException('您已经领取过免费会员');
  409. $memberPrice = 0.00; //会员卡价格
  410. $isFree = 1; //代表免费
  411. $isPermanent = 0; //代表非永久
  412. $overdueTime = bcadd(bcmul(abs($newMemberRight[$mcId]['vip_day']), "86400", 0), time(), 0);
  413. break;
  414. case "month":
  415. case "year":
  416. case "quarter":
  417. case "owner":
  418. $memberPrice = $price;
  419. $isFree = 0;
  420. $isPermanent = 0;
  421. $overdueTime = bcadd(bcmul(abs($newMemberRight[$mcId]['vip_day']), '86400', 0), time(), 0);
  422. break;
  423. case "ever":
  424. $memberPrice = $price;
  425. $isFree = 0;
  426. $isPermanent = 1;
  427. $overdueTime = 0;
  428. break;
  429. default:
  430. throw new ApiException('此类型会员卡暂未开售');
  431. }
  432. //return compact('member_price', 'is_free', 'is_permanent', 'overdue_time', 'type');
  433. return [$memberPrice, $isFree, $isPermanent, $overdueTime, $type, $newMemberRight];
  434. }
  435. /**
  436. * 根据查询用户购买会员金额
  437. * @param array $where
  438. * @return mixed
  439. */
  440. public function getMemberMoneyByWhere(array $where, string $sumField, string $selectType, string $group = "")
  441. {
  442. switch ($selectType) {
  443. case "sum":
  444. return $this->dao->getWhereSumField($where, $sumField);
  445. case "group":
  446. return $this->dao->getGroupField($where, $sumField, $group);
  447. }
  448. }
  449. /**
  450. * 线下收银列表
  451. * @param array $where
  452. * @return array
  453. * @throws \think\db\exception\DataNotFoundException
  454. * @throws \think\db\exception\DbException
  455. * @throws \think\db\exception\ModelNotFoundException
  456. */
  457. public function getScanOrderList(array $where)
  458. {
  459. $where['type'] = 3;
  460. $where['paid'] = 1;
  461. [$page, $limit] = $this->getPageValue();
  462. if ($where['add_time']) {
  463. [$startTime, $endTime] = explode('-', $where['add_time']);
  464. if ($startTime || $endTime) {
  465. $startTime = strtotime($startTime);
  466. $endTime = strtotime($endTime . ' 23:59:59');
  467. $where['add_time'] = [$startTime, $endTime];
  468. }
  469. }
  470. if ($where['name']) {
  471. /** @var UserServices $userService */
  472. $userService = app()->make(UserServices::class);
  473. $userInfo = $userService->getUserInfoList(['nickname' => $where['name']], "uid");
  474. if ($userInfo) $where['uid'] = array_column($userInfo, 'uid');
  475. }
  476. $list = $this->dao->getScanOrderList($where, $page, $limit);
  477. if ($list) {
  478. /** @var UserServices $userService */
  479. $userService = app()->make(UserServices::class);
  480. $userInfo = $userService->getColumn([['uid', 'in', array_unique(array_column($list, 'uid'))]], 'uid,phone,nickname', 'uid');
  481. foreach ($list as &$v) {
  482. $v['add_time'] = date('Y-m-d H:i:s', $v['add_time']);
  483. $v['pay_time'] = date('Y-m-d H:i:s', $v['pay_time']);
  484. $v['phone'] = $userInfo[$v['uid']]['phone'] ?? '';
  485. $v['nickname'] = $userInfo[$v['uid']]['nickname'] ?? '';
  486. switch ($v['pay_type']) {
  487. case "yue":
  488. $v['pay_type'] = "余额";
  489. break;
  490. case "weixin":
  491. $v['pay_type'] = "微信";
  492. break;
  493. case "alipay":
  494. $v['pay_type'] = "支付宝";
  495. break;
  496. }
  497. $v['true_price'] = bcsub($v['money'], $v['pay_price'], 2);
  498. }
  499. }
  500. $count = $this->dao->count($where);
  501. return compact('list', 'count');
  502. }
  503. /**
  504. * 获取会员记录
  505. * @param array $where
  506. * @return array
  507. * @throws \think\db\exception\DataNotFoundException
  508. * @throws \think\db\exception\DbException
  509. * @throws \think\db\exception\ModelNotFoundException
  510. */
  511. public function getMemberRecord(array $where)
  512. {
  513. $where['type'] = [0, 1, 2];
  514. $where['paid'] = 1;
  515. if ($where['add_time']) {
  516. $searchTime = explode('-', $where['add_time']);
  517. $startTime = strtotime($searchTime[0]);
  518. $endTime = strtotime($searchTime[1]);
  519. if ($startTime == $endTime) {
  520. $endTime += 86400;
  521. }
  522. $where['add_time'] = [$startTime, $endTime];
  523. }
  524. [$page, $limit] = $this->getPageValue();
  525. $list = $this->dao->getMemberRecord($where, $page, $limit);
  526. if ($list) {
  527. /** @var MemberShipServices $memberShipService */
  528. $memberShipService = app()->make(MemberShipServices::class);
  529. $shipInfo = $memberShipService->getApiList([]);
  530. $shipInfo = array_column($shipInfo, 'title', 'type');
  531. $shipInfo['owner'] = '自定义';
  532. foreach ($list as &$v) {
  533. $v['member_type'] = $v['member_type'] ? $shipInfo[$v['member_type']] ?? '其他' : '其他';
  534. $v['pay_time'] = date('Y-m-d H:i:s', $v['pay_time']);
  535. $v['add_time'] = date('Y-m-d H:i:s', $v['add_time']);
  536. $v['overdue_time'] = date('Y-m-d H:i:s', $v['overdue_time']);
  537. switch ($v['pay_type']) {
  538. case "yue":
  539. $v['pay_type'] = "余额";
  540. break;
  541. case "weixin":
  542. $v['pay_type'] = "微信";
  543. break;
  544. case "alipay":
  545. $v['pay_type'] = "支付宝";
  546. break;
  547. case 'allinpay':
  548. $v['pay_type'] = "通联支付";
  549. break;
  550. case "admin":
  551. $v['pay_type'] = "后台赠送";
  552. break;
  553. }
  554. if ($v['type'] == 0) $v['pay_type'] = "免费领取";
  555. if ($v['type'] == 2) {
  556. $v['pay_type'] = "卡密领取";
  557. $v['member_type'] = "卡密激活";
  558. }
  559. if ($v['type'] == 1 && $v['is_free'] == 1) $v['pay_type'] = "免费领取";
  560. $v['user']['overdue_time'] = date('Y-m-d', $v['user']['overdue_time']) == "1970-01-01" ? "" : date('Y-m-d H:i:s', $v['user']['overdue_time']);
  561. }
  562. }
  563. $count = $this->dao->count($where);
  564. return compact('list', 'count');
  565. }
  566. }