123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- <?php
- /**
- * Created by: PhpStorm
- * User: lytian
- * Date: 2020/3/25
- * Time: 16:47
- */
- namespace app\main\service;
- use app\common\library\Redis;
- use app\common\model\PrivateBookPage;
- use app\main\constants\BookConstants;
- use app\main\constants\CacheConstants;
- class SinglePushService extends BaseService
- {
- /**
- * 定义属性
- *
- * @var SinglePushService
- */
- protected static $self = null;
- /**
- * 返回实例
- *
- * @return SinglePushService
- */
- public static function instance()
- {
- if (self::$self == null) {
- self::$self = new self();
- }
- return self::$self;
- }
- public function completeOrders($orderInfo)
- {
- $key = CacheConstants::getSinglePushOrderCache($orderInfo['out_trade_no']);
- $bookId = Redis::instance()->get($key);
- if ($bookId !== false) {
- LogService::info("SinglePushOrders callback out_trade_no: {$orderInfo['out_trade_no']}");
- //完成购买
- $book = BookService::instance()->getBookModel()->getBooksInfo([$bookId]);
- if (!$book) {
- LogService::error('书籍不存在');
- return $this->setData(true)->getReturn();
- }
- $exists = FinancialService::instance()->getConsumeModel()->setConnect($orderInfo['user_id'])
- ->where('user_id', $orderInfo['user_id'])
- ->where('book_id', $bookId)
- ->where('type', BookConstants::BOOK_BILLING_MODEL_BOOK)
- ->find();
- $recharge = FinancialService::instance()->getRechargeModel()->setConnect($orderInfo['user_id'])
- ->where('user_id', $orderInfo['user_id'])
- ->where('orders_id', $orderInfo['id'])
- ->find();
- if ($recharge) {
- $kandian = $recharge['remain_kandian'];
- if (!$exists) {
- //更新剩余书币为0
- FinancialService::instance()->getRechargeModel()->setConnect($orderInfo['user_id'])->update(['remain_kandian' => 0], ['id' => $recharge['id']]);
- $cache = CacheConstants::getKandianUserRechargeListCacheKey($orderInfo['user_id']);
- Redis::instance()->del($cache);
- $consume = [
- 'user_id' => $orderInfo['user_id'],
- 'book_id' => $bookId,
- 'book_name' => $book[$bookId]['name'],
- 'type' => BookConstants::BOOK_BILLING_MODEL_BOOK,
- 'chapter_id' => '',
- 'chapter_name' => '',
- 'kandian' => intval($kandian),
- 'dd_kandian' => $recharge['dd'] == 1 ? intval($kandian) : 0,
- 'createtime' => time(),
- 'updatetime' => time(),
- 'extend1' => $bookId,
- 'extend2' => '',
- ];
- $info = [
- 'id' => $recharge['id'],
- 'kandian' => $recharge['kandian'],
- 'free_kandian' => 0,
- 'dd_kandian' => $recharge['dd'] == 1 ? $recharge['kandian'] : 0,
- 'dd_free_kandian' => 0,
- 'remark'=>'内推页直接购买书籍'
- ];
- $consume['consume_info'] = json_encode($info,JSON_UNESCAPED_UNICODE);
- FinancialService::instance()->getConsumeModel()->setConnect($orderInfo['user_id'])->insertGetId($consume);
- model("PrivateBookPageResource")->where('book_id',$bookId)->setInc('read_num');
- } else {
- LogService::info('书籍已经存在');
- }
- BookService::instance()->setBookShelf($bookId, $orderInfo['user_id']);
- //删除缓存
- $redisKey = CacheConstants::getSinglePushBuyBookCache($orderInfo['user_id']);
- Redis::instance()->del($redisKey);
- } else {
- LogService::error('充值记录不存在');
- }
- }
- return $this->setData(true)->getReturn();
- }
- /**
- * @param $bookIds
- * @param $userInfo
- * @return array
- */
- public function isPayBook($bookIds,$userInfo)
- {
- if ($bookIds == false ){
- return [];
- }
- $redisKey = CacheConstants::getSinglePushBuyBookCache($userInfo->id);
- $redisIds = Redis::instance()->get($redisKey);
- if (empty($redisIds)){
- $consumeBook = FinancialService::instance()->getConsumeModel()->setConnect($userInfo->id)
- ->field('book_id')
- ->where('user_id', $userInfo->id)
- ->where('type', BookConstants::BOOK_BILLING_MODEL_BOOK)
- ->select();
- $redisIds = !empty($consumeBook) ? implode(',',array_column($consumeBook,'book_id')) : "1,";
- Redis::instance()->set($redisKey,$redisIds,3600*24);
- }
- $redisIdsArr = explode(',',$redisIds);
- $res = array_intersect($redisIdsArr,$bookIds);
- return $res;
- }
- }
|