文件
xionggeshop/addons/shopro/library/regional_agent/Reward.php

108 行
3.2 KiB
PHP

<?php
namespace addons\shopro\library\regional_agent;
use addons\shopro\model\User as UserModel;
use addons\shopro\model\regional_agent\Agent as AgentModel;
use addons\shopro\model\regional_agent\Order as RegionalOrderModel;
use addons\shopro\model\regional_agent\Reward as RewardModel;
/**
* 区域代理佣金结算
*/
class Reward
{
const STATUS_WAITING = 0;
const STATUS_ACCOUNTED = 1;
const STATUS_BACK = -1;
public function settleByRegionalOrder($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->settleReward($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;
}
$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;
}
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;
}
}