| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- <?php
- namespace addons\DoubleCopy\common\services;
- use addons\DoubleCopy\common\enums\DoubleCopyEnum;
- use addons\DoubleCopy\common\models\DoubleCopyCommission;
- use addons\DoubleCopy\common\models\DoubleCopyFrozenFundClearLog;
- use addons\DoubleCopy\common\models\DoubleCopyUser;
- use common\enums\UserWalletEnum;
- use Exception;
- use RuntimeException;
- use services\common\UserWalletService;
- use Yii;
- class FrozenFundService extends BaseService
- {
- /**
- * 失效冻结基金
- *
- * @param DoubleCopyUser $doubleCopyUser
- *
- * @throws \yii\db\Exception
- */
- public function clearFrozenFundByDoubleCopyUser(DoubleCopyUser $doubleCopyUser)
- {
- $t = Yii::$app->db->beginTransaction();
- try {
- $frozenFund = $doubleCopyUser->frozen_fund;
- $frozenFundScore = $doubleCopyUser->frozen_fund_score;
- $no_settlement_money = DoubleCopyCommission::getNoSettlementForzen($doubleCopyUser->user_id);
- $no_settlement_score = DoubleCopyCommission::getNoSettlementForzen($doubleCopyUser->user_id, 'score');
- $frozenFund += $no_settlement_money;
- $frozenFundScore += $no_settlement_score;
- // 清空数组
- $clearArr = [];
- if ($frozenFund > 0) {
- $clearArr[] = ['reward_currency' => 'commission', 'money' => $frozenFund];
- $doubleCopyUser->frozen_fund = 0;
- }
- if ($frozenFundScore > 0) {
- $clearArr[] = ['reward_currency' => 'score', 'money' => $frozenFundScore];
- $doubleCopyUser->frozen_fund_score = 0;
- }
- if (!empty($clearArr)) {
- $saveRes = $doubleCopyUser->save();
- if (!$saveRes) {
- throw new RuntimeException('更新二二复制user失败');
- }
- }
- foreach ($clearArr as $item) {
- $saveRes = DoubleCopyFrozenFundClearLog::setData([
- 'mall_id' => $this->mall_id,
- 'user_id' => $doubleCopyUser->user_id,
- 'clear_num' => $item['money'],
- 'reward_currency' => $item['reward_currency'],
- 'operation_type' => DoubleCopyEnum::OPERATION_TYPE_FREEZE_FUND_MONTHLY_LIMITED_INVALID,
- ]);
- if (!$saveRes) {
- throw new RuntimeException('写入二二复制frozen_fund_clear_log 失败:' . DoubleCopyFrozenFundClearLog::getStaticError());
- }
- $saveRes = DoubleCopyCommission::setData([
- 'mall_id' => $this->mall_id,
- 'user_id' => $doubleCopyUser->user_id,
- 'settlement_type' => 1,
- 'capital_type' => DoubleCopyEnum::FREEZE_FUND,
- 'is_frozen' => 0,
- 'money' => -$item['money'],
- 'goods_name' => "用户({$doubleCopyUser->user_id})未达到当月业绩要求,冻结基金额度清零",
- 'reward_currency' => $item['reward_currency'],
- 'operation_type' => DoubleCopyEnum::OPERATION_TYPE_FREEZE_FUND_MONTHLY_LIMITED_INVALID,
- ]);
- if (!$saveRes) {
- throw new RuntimeException('写入二二复制commission 失败:' . DoubleCopyCommission::getStaticError());
- }
- }
- DoubleCopyCommission::updateAll(['settlement_type' => -1, 'updated_at' => time(), 'operation_type' => DoubleCopyEnum::OPERATION_TYPE_FREEZE_FUND_MONTHLY_LIMITED_INVALID], ['user_id' => $doubleCopyUser->user_id, 'capital_type' => DoubleCopyEnum::FREEZE_FUND, 'settlement_type' => [0, 2]]);
- $t->commit();
- } catch (Exception $e) {
- $t->rollBack();
- throw $e;
- }
- }
- /**
- * 解冻转给上级
- *
- * @param DoubleCopyUser $user
- * @param DoubleCopyUser $parentDoubleCopyUser
- *
- * @throws Exception
- */
- public function unfreezeHandleToParent(DoubleCopyUser $user, DoubleCopyUser $parentDoubleCopyUser)
- {
- $t = Yii::$app->db->beginTransaction();
- try {
- $unfreeze_money = $user->frozen_fund;
- $unfreeze_score = $user->frozen_fund_score;// 解冻的积分
- $no_settlement_money = DoubleCopyCommission::getNoSettlementForzen($user['user_id']);
- $no_settlement_score = DoubleCopyCommission::getNoSettlementForzen($user['user_id'], 'score');
- $unfreeze_money += $no_settlement_money;
- $unfreeze_score += $no_settlement_score;
- $toParentWalletArr = [];
- if ($unfreeze_money > 0) {
- $parentDoubleCopyUser->commission += $unfreeze_money;
- $toParentWalletArr[] = [
- 'wallet_type' => 'commission',
- 'money' => $unfreeze_money,
- ];
- $user->frozen_fund = 0;
- }
- if ($unfreeze_score > 0) {
- $parentDoubleCopyUser->score += $unfreeze_score;
- $toParentWalletArr[] = [
- 'wallet_type' => 'score',
- 'money' => $unfreeze_score,
- ];
- $user->frozen_fund_score = 0;
- }
- if (!$user->save()) throw new Exception($user->getError());
- if (!$parentDoubleCopyUser->save()) throw new Exception($parentDoubleCopyUser->getError());
- // 冻结资金记录修改状态
- DoubleCopyCommission::updateAll(
- ['settlement_type' => 1, 'updated_at' => time(), 'operation_type' => DoubleCopyEnum::OPERATION_TYPE_FREEZE_FUND_MONTHLY_LIMITED_TO_PARENT, 'operation_id' => $parentDoubleCopyUser['user_id']],
- ['user_id' => $user->user_id, 'capital_type' => DoubleCopyEnum::FREEZE_FUND, 'settlement_type' => [0, 2]]
- );
- foreach ($toParentWalletArr as $item) {
- $insert_wallet[] = [
- 'mall_id' => $this->mall_id,
- 'user_id' => $parentDoubleCopyUser['user_id'],
- 'is_frozen' => false,
- 'wallet_type' => $item['wallet_type'],
- 'money' => $item['money'],
- 'desc' => sprintf('用户(%d)在月份期限内未达标,资金解冻给上级', $user->user_id),
- 'source_table' => $user::tableName(),
- 'source_table_id' => $user->id,
- 'from_type' => DoubleCopyEnum::ADDONS_NAME,
- 'capital_type' => UserWalletEnum::BOSS_BONUS_FREEZE_FUND,
- ];
- DoubleCopyCommission::setData([
- 'mall_id' => $this->mall_id,
- 'user_id' => $user['user_id'],
- 'settlement_type' => 1,
- 'capital_type' => DoubleCopyEnum::FREEZE_FUND,
- 'is_frozen' => 0,
- 'money' => -$item['money'],
- 'reward_currency' => $item['wallet_type'],
- 'operation_type' => DoubleCopyEnum::OPERATION_TYPE_FREEZE_FUND_MONTHLY_LIMITED_TO_PARENT,
- 'operation_id' => $parentDoubleCopyUser['user_id']
- ]);
- DoubleCopyCommission::setData([
- 'mall_id' => $this->mall_id,
- 'user_id' => $parentDoubleCopyUser['user_id'],
- 'settlement_type' => 1,
- 'capital_type' => DoubleCopyEnum::FREEZE_FUND,
- 'is_frozen' => 0,
- 'money' => $item['money'],
- 'reward_currency' => $item['wallet_type'],
- 'operation_type' => DoubleCopyEnum::OPERATION_TYPE_FREEZE_FUND_MONTHLY_LIMITED_FROM_CHILD,
- 'operation_id' => $user->user_id
- ]);
- }
- $t->commit();
- } catch (Exception $e) {
- $t->rollBack();
- throw $e;
- }
- // 插入钱包
- if (!empty($insert_wallet)) {
- UserWalletService::batchHandleByQueue($insert_wallet);
- }
- }
- }
|