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); } } }