From f32ae1f28a3b77d0f154e57d9c60e77b222a4cac Mon Sep 17 00:00:00 2001 From: fengxinyhyl Date: Thu, 18 Apr 2024 15:41:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AE=9A=E6=97=B6=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/common/dao/user/DepositRecordDailyDao.php | 36 +++++++ app/common/dao/user/UserGroupDailyDao.php | 22 +++++ app/common/model/user/DepositRecordDaily.php | 28 ++++++ app/common/model/user/UserGroupDaily.php | 30 ++++++ .../user/DepositRecordDailyRepository.php | 93 +++++++++++++++++++ .../user/LotteryRecordRepository.php | 4 +- .../user/UserAssetsLogRepository.php | 4 +- .../user/UserAssetsRepository.php | 16 ++++ .../user/UserGroupDailyRepository.php | 74 +++++++++++++++ .../repositories/user/UserRepository.php | 6 ++ app/controller/api/Auth.php | 24 +---- app/controller/api/user/User.php | 57 ++++++++++++ app/event.php | 1 + crmeb/listens/task/CustomizeTask.php | 44 +++++++++ route/api.php | 3 +- 15 files changed, 415 insertions(+), 27 deletions(-) create mode 100644 app/common/dao/user/DepositRecordDailyDao.php create mode 100644 app/common/dao/user/UserGroupDailyDao.php create mode 100644 app/common/model/user/DepositRecordDaily.php create mode 100644 app/common/model/user/UserGroupDaily.php create mode 100644 app/common/repositories/user/DepositRecordDailyRepository.php create mode 100644 app/common/repositories/user/UserGroupDailyRepository.php create mode 100644 crmeb/listens/task/CustomizeTask.php diff --git a/app/common/dao/user/DepositRecordDailyDao.php b/app/common/dao/user/DepositRecordDailyDao.php new file mode 100644 index 0000000..838d9ae --- /dev/null +++ b/app/common/dao/user/DepositRecordDailyDao.php @@ -0,0 +1,36 @@ + +// +---------------------------------------------------------------------- +namespace app\common\dao\user; + +use app\common\dao\BaseDao; +use app\common\model\user\DepositRecord; +use app\common\model\user\DepositRecordDaily; +use app\common\model\user\UserAssets; +use app\common\model\user\UserRecharge; +use app\common\repositories\store\order\StoreOrderRepository; + +class DepositRecordDailyDao extends BaseDao +{ + protected function getModel(): string + { + return DepositRecordDaily::class; + } + + public function createOrderId($uid) + { + $count = (int)DepositRecord::getDB()->where('uid', $uid)->where('create_time', '>=', date("Y-m-d"))->where('create_time', '<', date("Y-m-d", strtotime('+1 day')))->count(); + return StoreOrderRepository::TYPE_SN_USER_DEPOSIT . date('YmdHis', time()) . ($uid . $count); + } + + public function getSum($uid, $field){ + return DepositRecord::where('uid', $uid)->where('status', 1)->sum($field); + } +} diff --git a/app/common/dao/user/UserGroupDailyDao.php b/app/common/dao/user/UserGroupDailyDao.php new file mode 100644 index 0000000..f3f6ea7 --- /dev/null +++ b/app/common/dao/user/UserGroupDailyDao.php @@ -0,0 +1,22 @@ + +// +---------------------------------------------------------------------- +namespace app\common\dao\user; + +use app\common\dao\BaseDao; +use app\common\model\user\UserGroupDaily; + +class UserGroupDailyDao extends BaseDao +{ + protected function getModel(): string + { + return UserGroupDaily::class; + } +} diff --git a/app/common/model/user/DepositRecordDaily.php b/app/common/model/user/DepositRecordDaily.php new file mode 100644 index 0000000..c48ef37 --- /dev/null +++ b/app/common/model/user/DepositRecordDaily.php @@ -0,0 +1,28 @@ + +// +---------------------------------------------------------------------- +namespace app\common\model\user; + +use app\common\model\BaseModel; + + +class DepositRecordDaily extends BaseModel +{ + + public static function tablePk(): string + { + return 'id'; + } + + public static function tableName(): string + { + return 'deposit_record_daily'; + } +} diff --git a/app/common/model/user/UserGroupDaily.php b/app/common/model/user/UserGroupDaily.php new file mode 100644 index 0000000..2dc6e66 --- /dev/null +++ b/app/common/model/user/UserGroupDaily.php @@ -0,0 +1,30 @@ + +// +---------------------------------------------------------------------- +namespace app\common\model\user; + +use app\common\model\BaseModel; + + +class UserGroupDaily extends BaseModel +{ + + public static function tablePk(): string + { + return 'id'; + } + + public static function tableName(): string + { + return 'user_group_daily'; + } + + +} diff --git a/app/common/repositories/user/DepositRecordDailyRepository.php b/app/common/repositories/user/DepositRecordDailyRepository.php new file mode 100644 index 0000000..3bb9c6d --- /dev/null +++ b/app/common/repositories/user/DepositRecordDailyRepository.php @@ -0,0 +1,93 @@ + +// +---------------------------------------------------------------------- + + +namespace app\common\repositories\user; + +use app\common\dao\user\DepositRecordDailyDao; +use app\common\dao\user\DepositRecordDao; +use app\common\model\user\DepositRecord; +use app\common\model\user\DepositRecordDaily; +use app\common\model\user\User; +use app\common\model\user\UserRecharge; +use app\common\repositories\BaseRepository; +use app\common\repositories\store\DepositRepository; +use crmeb\jobs\SendSmsJob; +use crmeb\services\PayService; +use think\facade\Db; +use think\facade\Queue; + +/** + * Class DepositRecordDailyRepository + * @package app\common\repositories\user + * @author xaboy + * @day 2020/6/2 + * @mixin DepositRecordDaily + */ +class DepositRecordDailyRepository extends BaseRepository +{ + /** + * UserRechargeRepository constructor. + * @param DepositRecordDailyDao $dao + */ + public function __construct(DepositRecordDailyDao $dao) + { + $this->dao = $dao; + } + + /** + * notes 用户等级每日分发钻石 + * @create 2024/4/18 14:08 + * @update 2024/4/18 14:08 + * @author zhangkxiang + * @editor + */ + public function runDaily() + { + $depositList = app(DepositRepository::class)->selectWhere([]); + if($depositList->isEmpty()) return; + $depositList = array_column($depositList->toArray(), null, 'id'); + + $where = array(); + $where[] = array('status', 'in', [1,2]); + $recordList = app(DepositRecordRepository::class)->selectWhere($where); + + $userAssets = app(UserAssetsRepository::class); + + foreach ($recordList as $record) { + $item = $this->getItem($record['uid'], $record['id']); + $currentDeposit = $depositList[$record['deposit_id']]; + + if(time() - strtotime($record['create_time']) > 86400 * $currentDeposit['cycle'] and $record['status'] == 1){ + $record->status = 2; + $record->save(); + } + + if ($item['diamond'] < $currentDeposit['diamond_max']) { + $count = min($currentDeposit['diamond'], $currentDeposit['diamond_max'] - $item['diamond']); + $item->diamond = $item['diamond'] + $count; + $item->save(); + $userAssets->daily($record['uid'], $count, UserAssetsLogRepository::DIAMOND_DEPOSIT); + } + } + } + + public function getItem($uid, $recordId) + { + return $this->dao->findOrCreate([ + 'uid' => $uid, + 'record_id' => $recordId + ]); + } + + +} diff --git a/app/common/repositories/user/LotteryRecordRepository.php b/app/common/repositories/user/LotteryRecordRepository.php index 936c640..430fcba 100644 --- a/app/common/repositories/user/LotteryRecordRepository.php +++ b/app/common/repositories/user/LotteryRecordRepository.php @@ -43,9 +43,7 @@ class LotteryRecordRepository extends BaseRepository */ public function create($data) { - if($data['type'] == 1){ - app(UserAssetsRepository::class)->lottery($data['uid'], $data['count']); - } + return $this->dao->create($data); } diff --git a/app/common/repositories/user/UserAssetsLogRepository.php b/app/common/repositories/user/UserAssetsLogRepository.php index 87cc4f4..ec39f2e 100644 --- a/app/common/repositories/user/UserAssetsLogRepository.php +++ b/app/common/repositories/user/UserAssetsLogRepository.php @@ -55,7 +55,7 @@ class UserAssetsLogRepository extends BaseRepository const DIAMOND_SHARE = 24; //分享奖返佣 const DIAMOND_SERVE = 25; //服务奖返佣 const DIAMOND_DEPOSIT = 26; //预存奖返佣 - const DIAMOND_LOTTERY = 27; //幸运大转盘奖励 + const DIAMOND_LOTTERY = 27; //幸运大转盘 const STOCK = 30; //钻石兑换 @@ -110,7 +110,7 @@ class UserAssetsLogRepository extends BaseRepository self::DIAMOND_SHARE => '分享奖返佣', self::DIAMOND_SERVE => '服务奖返佣', self::DIAMOND_DEPOSIT => '预存奖返佣', - self::DIAMOND_LOTTERY => '幸运大转盘奖励', + self::DIAMOND_LOTTERY => '幸运大转盘', self::STOCK => '钻石兑换', ); } diff --git a/app/common/repositories/user/UserAssetsRepository.php b/app/common/repositories/user/UserAssetsRepository.php index 93fb0cc..fbd69b6 100644 --- a/app/common/repositories/user/UserAssetsRepository.php +++ b/app/common/repositories/user/UserAssetsRepository.php @@ -45,6 +45,7 @@ class UserAssetsRepository extends BaseRepository * diamondToStock 钻石兑本票 * withdrawRate 提现手续费 * transferRate 转让手续费 + * lotteryPayDiamond 抽奖消耗钻石 */ return array_column($config['list'], "value", 'key'); } @@ -114,6 +115,21 @@ class UserAssetsRepository extends BaseRepository 'uid' => $uid, 'asset_type' => UserAssetsLogRepository::ASSET_DIAMOND, 'type' => UserAssetsLogRepository::DIAMOND_LOTTERY, + 'status' => $count >0 ? UserAssetsLogRepository::STATUS_GET : UserAssetsLogRepository::STATUS_USE, + 'count' => $count, + ); + $assets = $this->assets($uid); + app()->make(UserAssetsLogRepository::class)->addLog($logList); + $this->dao->update($uid, array('diamond' => $assets['diamond'] + $count)); + } + + + public function daily($uid, $count, $type = UserAssetsLogRepository::DIAMOND_SERVE){ + $logList = array(); + $logList[] = array( + 'uid' => $uid, + 'asset_type' => UserAssetsLogRepository::ASSET_DIAMOND, + 'type' => $type, 'status' => UserAssetsLogRepository::STATUS_GET, 'count' => $count, ); diff --git a/app/common/repositories/user/UserGroupDailyRepository.php b/app/common/repositories/user/UserGroupDailyRepository.php new file mode 100644 index 0000000..8fb6701 --- /dev/null +++ b/app/common/repositories/user/UserGroupDailyRepository.php @@ -0,0 +1,74 @@ + +// +---------------------------------------------------------------------- + + +namespace app\common\repositories\user; + +use app\common\dao\user\UserGroupDailyDao; +use app\common\model\user\DepositRecordDaily; +use app\common\repositories\BaseRepository; + +/** + * Class UserGroupDailyRepository + * @package app\common\repositories\user + * @author xaboy + * @day 2020/6/2 + * @mixin DepositRecordDaily + */ +class UserGroupDailyRepository extends BaseRepository +{ + /** + * UserGroupDailyRepository constructor. + * @param UserGroupDailyDao $dao + */ + public function __construct(UserGroupDailyDao $dao) + { + $this->dao = $dao; + } + + /** + * notes 用户等级每日分发钻石 + * @create 2024/4/18 14:08 + * @update 2024/4/18 14:08 + * @author zhangkxiang + * @editor + */ + public function runDaily(){ + $userList = app(UserRepository::class)->selectAllGroupUser(); + $groupList = app(UserGroupRepository::class)->getList([], 0, 10); + $groupList = $groupList['list']->toArray(); + $groupList = array_column($groupList, null, 'group_id'); + + $userAssets = app(UserAssetsRepository::class); + + foreach ($userList as $user){ + $item = $this->getItem($user['uid'], $user['group_id']); + $currentGroup = $groupList[$user['group_id']]; + if($item['diamond'] < $currentGroup['diamond_max']){ + $count = min($currentGroup['diamond'], $currentGroup['diamond_max'] - $item['diamond']); + $item->diamond = $item['diamond'] + $count; + $item->save(); + $userAssets->daily($user['uid'], $count); + } + } + } + + public function getItem($uid, $groupId){ + return $this->dao->findOrCreate([ + 'uid' => $uid, + 'group_id' => $groupId + ]); + } + + + +} diff --git a/app/common/repositories/user/UserRepository.php b/app/common/repositories/user/UserRepository.php index 171271d..368e47a 100755 --- a/app/common/repositories/user/UserRepository.php +++ b/app/common/repositories/user/UserRepository.php @@ -201,6 +201,12 @@ class UserRepository extends BaseRepository return compact('count', 'list'); } + public function selectAllGroupUser(){ + $where = array(); + $where[] = array('group_id', '>', 0); + return $this->dao->selectWhere($where, 'uid, group_id'); + } + public function getUserByPhone($phone){ return $this->dao->getWhere(['phone' => $phone]); diff --git a/app/controller/api/Auth.php b/app/controller/api/Auth.php index bf3b35c..3b84127 100755 --- a/app/controller/api/Auth.php +++ b/app/controller/api/Auth.php @@ -15,6 +15,7 @@ namespace app\controller\api; use app\common\repositories\store\DepositRepository; +use app\common\repositories\user\DepositRecordDailyRepository; use app\common\repositories\user\LotteryRecordRepository; use app\common\repositories\store\LotteryRepository; use app\common\repositories\store\order\StoreGroupOrderRepository; @@ -25,6 +26,7 @@ use app\common\repositories\system\notice\SystemNoticeConfigRepository; use app\common\repositories\system\notice\SystemNoticeRepository; use app\common\repositories\user\UserAssetsLogRepository; use app\common\repositories\user\UserAssetsRepository; +use app\common\repositories\user\UserGroupDailyRepository; use app\common\repositories\user\UserGroupRepository; use app\common\repositories\user\UserOrderRepository; use app\common\repositories\user\UserRechargeRepository; @@ -81,7 +83,7 @@ class Auth extends BaseController // } // app(UserAssetsLogRepository::class)->shareAward(1); - event('order.take', array('order' => array('order_id' => 3))); + app(DepositRecordDailyRepository::class)->runDaily(); return app('json')->success(); } @@ -208,26 +210,6 @@ class Auth extends BaseController return app('json')->success(app(LotteryRepository::class)->getList([])); } - public function lotteryTry(){ - $list = app(LotteryRepository::class)->getList([]); - $rand = $try = rand(1,100); - $current = null; - foreach ($list as $item){ - $try = $try - $item['rate']; - if($try <= 0){ - $current = $item; - break; - } - } - app(LotteryRecordRepository::class)->create([ - 'uid' => 10, - 'type' => $current['type'], - 'lottery_id' => $current['id'], - 'count' => $current['value'], - ]); - return app('json')->success(array('try' => $rand, 'item' => $current)); - } - public function depositData(){ $ret = app(DepositRepository::class)->getList(['status' => 1], 1, 10); return app('json')->success($ret['list']); diff --git a/app/controller/api/user/User.php b/app/controller/api/user/User.php index 610bf18..f0ed572 100755 --- a/app/controller/api/user/User.php +++ b/app/controller/api/user/User.php @@ -15,8 +15,10 @@ namespace app\controller\api\user; use app\common\repositories\store\IntegralRepository; +use app\common\repositories\store\LotteryRepository; use app\common\repositories\store\service\StoreServiceRepository; use app\common\repositories\system\CacheRepository; +use app\common\repositories\user\LotteryRecordRepository; use app\common\repositories\user\MemberinterestsRepository; use app\common\repositories\user\UserAssetsLogRepository; use app\common\repositories\user\UserAssetsRepository; @@ -46,6 +48,61 @@ class User extends BaseController $this->user = $this->request->userInfo(); } + public function lotteryTry(){ + $user = $this->request->userInfo(); + $uid = $user->uid; + + /** + * @var LotteryRecordRepository $recordRepository + */ + $recordRepository = app(LotteryRecordRepository::class); + /** + * @var UserAssetsRepository $assetsRepository + */ + $assetsRepository = app(UserAssetsRepository::class); + + $where = array(); + $where[] = array('uid', '=', $uid); + $where[] = array('create_time', '>=', date('Y-m-d 00:00:00')); + $where[] = array('type', 'in', [1, 2]); + $list = $recordRepository->selectWhere($where); + $config = $assetsRepository->getConfig(); + + if($list && count($list) >= 1){ + $assets = $assetsRepository->assets($uid); + if($assets['diamond'] < $config['lotteryPayDiamond']){ + return app('json')->fail('钻石不足'); + } + } + + $list = app(LotteryRepository::class)->getList([]); + $rand = $try = rand(1,100); + $current = null; + foreach ($list as $item){ + $try = $try - $item['rate']; + if($try <= 0){ + $current = $item; + break; + } + } + + if($list && count($list) >= 1 && $current['type'] != 3){ + $assetsRepository->lottery($uid, -$config['lotteryPayDiamond']); + } + + if($current['type'] == 1){ + $assetsRepository->lottery($uid, $current['value']); + } + + $recordRepository->create([ + 'uid' => $uid, + 'type' => $current['type'], + 'lottery_id' => $current['id'], + 'count' => $current['value'], + ]); + return app('json')->success(array('try' => $rand, 'item' => $current)); + } + public function assetsLog(){ $user = $this->request->userInfo(); diff --git a/app/event.php b/app/event.php index df124eb..5d743a4 100755 --- a/app/event.php +++ b/app/event.php @@ -56,6 +56,7 @@ return [ \crmeb\listens\SendSvipCouponListen::class, \crmeb\listens\SyncMerchantMarginStatusListen::class, \crmeb\listens\SyncQueueStatusListen::class, + \crmeb\listens\task\CustomizeTask::class, ] : [], 'pay_success_user_recharge' => [\crmeb\listens\pay\UserRechargeSuccessListen::class], 'pay_success_user_order' => [\crmeb\listens\pay\UserOrderSuccessListen::class], diff --git a/crmeb/listens/task/CustomizeTask.php b/crmeb/listens/task/CustomizeTask.php new file mode 100644 index 0000000..b70bbae --- /dev/null +++ b/crmeb/listens/task/CustomizeTask.php @@ -0,0 +1,44 @@ +tick(1000 * 60, function () { + if(date('i') == 00){ + Log::info('整点任务开始执行'); + } + if (date('H:i') == '00:10') { + /** + * @var UserGroupDailyRepository $groupAssets + */ + $groupAssets = app()->make(UserGroupDailyRepository::class); + $groupAssets->runDaily(); + + /** + * @var DepositRecordDailyRepository $deposit + */ + $deposit = app()->make(DepositRecordDailyRepository::class); + $deposit->runDaily(); + } + }); + + + } +} diff --git a/route/api.php b/route/api.php index 410eb58..8b50bfa 100755 --- a/route/api.php +++ b/route/api.php @@ -29,7 +29,6 @@ Route::group('api/', function () { Route::get('lottery/data', 'api.Auth/lotteryData'); - Route::post('lottery/try', 'api.Auth/lotteryTry'); Route::get('deposit/data', 'api.Auth/depositData'); @@ -119,6 +118,8 @@ Route::group('api/', function () { Route::post('user/cancel', 'api.Auth/cancel'); //用户 Route::group('user', function () { + //用户抽奖 + Route::post('lottery/try', 'User/lotteryTry'); //用户资产明细 Route::get('assetsLog', 'User/assetsLog'); //积分兑换钻石