SinglePushService.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <?php
  2. /**
  3. * Created by: PhpStorm
  4. * User: lytian
  5. * Date: 2020/3/25
  6. * Time: 16:47
  7. */
  8. namespace app\main\service;
  9. use app\common\library\Redis;
  10. use app\common\model\PrivateBookPage;
  11. use app\main\constants\BookConstants;
  12. use app\main\constants\CacheConstants;
  13. class SinglePushService extends BaseService
  14. {
  15. /**
  16. * 定义属性
  17. *
  18. * @var SinglePushService
  19. */
  20. protected static $self = null;
  21. /**
  22. * 返回实例
  23. *
  24. * @return SinglePushService
  25. */
  26. public static function instance()
  27. {
  28. if (self::$self == null) {
  29. self::$self = new self();
  30. }
  31. return self::$self;
  32. }
  33. public function completeOrders($orderInfo)
  34. {
  35. $key = CacheConstants::getSinglePushOrderCache($orderInfo['out_trade_no']);
  36. $bookId = Redis::instance()->get($key);
  37. if ($bookId !== false) {
  38. LogService::info("SinglePushOrders callback out_trade_no: {$orderInfo['out_trade_no']}");
  39. //完成购买
  40. $book = BookService::instance()->getBookModel()->getBooksInfo([$bookId]);
  41. if (!$book) {
  42. LogService::error('书籍不存在');
  43. return $this->setData(true)->getReturn();
  44. }
  45. $exists = FinancialService::instance()->getConsumeModel()->setConnect($orderInfo['user_id'])
  46. ->where('user_id', $orderInfo['user_id'])
  47. ->where('book_id', $bookId)
  48. ->where('type', BookConstants::BOOK_BILLING_MODEL_BOOK)
  49. ->find();
  50. $recharge = FinancialService::instance()->getRechargeModel()->setConnect($orderInfo['user_id'])
  51. ->where('user_id', $orderInfo['user_id'])
  52. ->where('orders_id', $orderInfo['id'])
  53. ->find();
  54. if ($recharge) {
  55. $kandian = $recharge['remain_kandian'];
  56. if (!$exists) {
  57. //更新剩余书币为0
  58. FinancialService::instance()->getRechargeModel()->setConnect($orderInfo['user_id'])->update(['remain_kandian' => 0], ['id' => $recharge['id']]);
  59. $cache = CacheConstants::getKandianUserRechargeListCacheKey($orderInfo['user_id']);
  60. Redis::instance()->del($cache);
  61. $consume = [
  62. 'user_id' => $orderInfo['user_id'],
  63. 'book_id' => $bookId,
  64. 'book_name' => $book[$bookId]['name'],
  65. 'type' => BookConstants::BOOK_BILLING_MODEL_BOOK,
  66. 'chapter_id' => '',
  67. 'chapter_name' => '',
  68. 'kandian' => intval($kandian),
  69. 'dd_kandian' => $recharge['dd'] == 1 ? intval($kandian) : 0,
  70. 'createtime' => time(),
  71. 'updatetime' => time(),
  72. 'extend1' => $bookId,
  73. 'extend2' => '',
  74. ];
  75. $info = [
  76. 'id' => $recharge['id'],
  77. 'kandian' => $recharge['kandian'],
  78. 'free_kandian' => 0,
  79. 'dd_kandian' => $recharge['dd'] == 1 ? $recharge['kandian'] : 0,
  80. 'dd_free_kandian' => 0,
  81. 'remark'=>'内推页直接购买书籍'
  82. ];
  83. $consume['consume_info'] = json_encode($info,JSON_UNESCAPED_UNICODE);
  84. FinancialService::instance()->getConsumeModel()->setConnect($orderInfo['user_id'])->insertGetId($consume);
  85. model("PrivateBookPageResource")->where('book_id',$bookId)->setInc('read_num');
  86. } else {
  87. LogService::info('书籍已经存在');
  88. }
  89. BookService::instance()->setBookShelf($bookId, $orderInfo['user_id']);
  90. //删除缓存
  91. $redisKey = CacheConstants::getSinglePushBuyBookCache($orderInfo['user_id']);
  92. Redis::instance()->del($redisKey);
  93. } else {
  94. LogService::error('充值记录不存在');
  95. }
  96. }
  97. return $this->setData(true)->getReturn();
  98. }
  99. /**
  100. * @param $bookIds
  101. * @param $userInfo
  102. * @return array
  103. */
  104. public function isPayBook($bookIds,$userInfo)
  105. {
  106. if ($bookIds == false ){
  107. return [];
  108. }
  109. $redisKey = CacheConstants::getSinglePushBuyBookCache($userInfo->id);
  110. $redisIds = Redis::instance()->get($redisKey);
  111. if (empty($redisIds)){
  112. $consumeBook = FinancialService::instance()->getConsumeModel()->setConnect($userInfo->id)
  113. ->field('book_id')
  114. ->where('user_id', $userInfo->id)
  115. ->where('type', BookConstants::BOOK_BILLING_MODEL_BOOK)
  116. ->select();
  117. $redisIds = !empty($consumeBook) ? implode(',',array_column($consumeBook,'book_id')) : "1,";
  118. Redis::instance()->set($redisKey,$redisIds,3600*24);
  119. }
  120. $redisIdsArr = explode(',',$redisIds);
  121. $res = array_intersect($redisIdsArr,$bookIds);
  122. return $res;
  123. }
  124. }