| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- <?php
- namespace console\controllers;
- use common\enums\RedisKeyEnum;
- use common\enums\StatusEnum;
- use common\helpers\LockHelper;
- use common\models\common\CommissionIncrementLog;
- use common\models\mall\Mall;
- use common\models\user\UserWallet;
- use services\common\UserWalletService;
- use yii\console\Controller;
- use yii\console\ExitCode;
- class CommissionIncrController extends Controller
- {
- /**
- * 收益增值服务
- * @desc 每天0点执行一次
- * @return int
- */
- public function actionIndex()
- {
- try{
- echo '增值服务,start:';
- \Yii::$app->db->close();
- $lock_key = RedisKeyEnum::suffix('lock_commission_incr_');
- $identification = uniqid();
- if (!LockHelper::lock($lock_key, $identification, 300, 10)) throw new \Exception('收益增值服务进入处理阶段,当前访问过多');
- $mall_list = Mall::getEnableMallList(true);
- $mall_ids = array_column($mall_list, 'id');
- if (empty($mall_ids)) {
- echo '没有可用商城,不做处理 ... ' . PHP_EOL;
- return ExitCode::UNSPECIFIED_ERROR;
- }
- $today_start_time = strtotime(date('Y-m-d'));
- foreach ($mall_ids as $mall_id) {
- $exist = CommissionIncrementLog::find()->where(['mall_id' => $mall_id, 'wallet_type' => 'commission','status' => StatusEnum::ENABLED])->andWhere(['>', 'created_at', $today_start_time])->one();
- if($exist) continue;
- //查询商城设置
- $setting = \Yii::$app->services->setting->mall->get($mall_id, 'withdraw_income');
- $is_enable_income_increment = $setting['is_enable_income_increment'] ?? 0;
- $income_increment = $setting['income_increment'] ?? 0;
- //添加记录
- $incr_log = CommissionIncrementLog::setData([
- 'mall_id' => $mall_id,
- 'wallet_type' => 'commission',
- 'enable' => $is_enable_income_increment,
- 'radio' => $income_increment,
- ]);
- if(!$is_enable_income_increment || !$income_increment){
- continue;
- }
- //执行增值服务
- $incr_log_id = $incr_log->id;
- $this->increment($mall_id,$income_increment, $incr_log_id);
- }
- LockHelper::uLock($lock_key,$identification);
- return ExitCode::OK;
- }catch (\Exception $e){
- return ExitCode::UNSPECIFIED_ERROR;
- }
- }
- private function increment($mall_id,$radio, $incr_log_id)
- {
- //查询所有用户
- $query = UserWallet::find()->where(['mall_id' => $mall_id, 'status' => StatusEnum::ENABLED])->andWhere(['>', 'commission', 0]);;
- $total = $total_user_num = 0;
- foreach ($query->batch(200) as $list) {
- $insert_wallet = [];
- foreach ($list as $item) {
- $user_commission = $item['commission'] ?? 0;
- $incr = bcmul($user_commission, $radio / 100, 2);
- //除以365
- $incr = bcdiv($incr, 365, 2);
- if ($incr < 0.01) continue;
- $insert_wallet[] = [
- 'is_frozen' => false,
- 'user_id' => $item['user_id'],
- 'mall_id' => $mall_id,
- 'order_id' => 0,
- 'wallet_type' => 'commission',
- 'money' => $incr,
- 'source_table' => CommissionIncrementLog::tableName(),
- 'source_table_id' => $incr_log_id,
- 'from_type' => 'PromotionCenter',
- 'capital_type' => 'day_increment',
- 'order_no' => '',
- 'desc' => '用户当前持有的收益增值',
- ];
- $total = bcadd($total, $incr, 2);
- $total_user_num++;
- }
- if($insert_wallet){
- $res = UserWalletService::batchHandle($insert_wallet);
- if (empty($res)) throw new \Exception(UserWalletService::getStaticError());
- }
- }
- CommissionIncrementLog::updateAll(['send_num' => $total, 'send_user_num' => $total_user_num], ['id' => $incr_log_id]);
- }
- }
|