commission_reward_status = self::STATUS_ACCOUNTED; $regionalOrder->commission_time = time(); $regionalOrder->save(); $rewards = RewardModel::where('regional_order_id', $regionalOrderId) ->where('status', self::STATUS_WAITING) ->select(); foreach ($rewards as $reward) { $this->settleReward($reward, $event); } return true; } public function settleByRegionalOrderWithoutWallet($regionalOrderId, $event) { $regionalOrder = RegionalOrderModel::get($regionalOrderId); if (!$regionalOrder || $regionalOrder['commission_reward_status'] !== self::STATUS_WAITING) { return false; } $regionalOrder->commission_reward_status = self::STATUS_ACCOUNTED; $regionalOrder->commission_time = time(); $regionalOrder->save(); $rewards = RewardModel::where('regional_order_id', $regionalOrderId) ->where('status', self::STATUS_WAITING) ->select(); foreach ($rewards as $reward) { $this->settleRewardWithoutWallet($reward, $event); } return true; } public function settleReward($reward, $event) { if ($reward['status'] !== self::STATUS_WAITING) { return false; } $agent = AgentModel::get($reward['agent_id']); if (!$agent || $agent['status'] !== AgentModel::STATUS_NORMAL) { return false; } $agentUser = UserModel::get($reward['agent_user_id']); if (!$agentUser) { \think\Log::error("[regional_agent] settleReward fail: agent_user_id={$reward['agent_user_id']} not found in fa_user"); return false; } try { $agent->setInc('total_income', $reward['commission']); UserModel::money($reward['commission'], $reward['agent_user_id'], 'regional_agent_income', $reward['id'], '区域公司差价', $reward); $reward->status = self::STATUS_ACCOUNTED; $reward->save(); return true; } catch (\Throwable $e) { \think\Log::error("[regional_agent] settleReward money error: " . $e->getMessage()); return false; } } public function settleRewardWithoutWallet($reward, $event) { if ($reward['status'] !== self::STATUS_WAITING) { return false; } $agent = AgentModel::get($reward['agent_id']); if (!$agent || $agent['status'] !== AgentModel::STATUS_NORMAL) { return false; } $agentUser = UserModel::get($reward['agent_user_id']); if (!$agentUser) { return false; } $agent->setInc('total_income', $reward['commission']); $reward->status = self::STATUS_ACCOUNTED; $reward->save(); return true; } public function backByRegionalOrder($regionalOrderId, $event) { $regionalOrder = RegionalOrderModel::get($regionalOrderId); if (!$regionalOrder) { return false; } if ($regionalOrder['commission_reward_status'] === self::STATUS_ACCOUNTED) { $regionalOrder->commission_reward_status = self::STATUS_BACK; $regionalOrder->save(); } $rewards = RewardModel::where('regional_order_id', $regionalOrderId) ->where('status', self::STATUS_ACCOUNTED) ->select(); foreach ($rewards as $reward) { $this->backReward($reward); } $agent = AgentModel::get($regionalOrder['agent_id']); if ($agent) { $agent->setDec('order_money', $regionalOrder['amount']); $agent->setDec('order_count', 1); } return true; } public function backReward($reward) { if ($reward['status'] !== self::STATUS_ACCOUNTED) { return false; } $agent = AgentModel::get($reward['agent_id']); if ($agent) { $agent->setDec('total_income', $reward['commission']); } UserModel::money(-$reward['commission'], $reward['agent_user_id'], 'regional_agent_back', $reward['id'], '区域公司差价退回', $reward); $reward->status = self::STATUS_BACK; $reward->save(); return true; } }