| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- <?php
- namespace addons\Agent\common\logic\reward;
- use addons\Agent\common\enums\AgentEnum;
- use addons\Agent\common\enums\ComputingEnum;
- use addons\Agent\common\models\Agent;
- use addons\Agent\common\models\AgentDelayLog;
- use common\models\common\CapitalLog;
- use common\models\user\DigitalLog;
- use common\models\user\UserDigital;
- use services\common\UserWalletService;
- /**
- * TODO: 渠道分红延时结算
- * Class DelayUnfrozen
- */
- class DelayUnfrozen
- {
- /**
- * 执行延时结算队列任务
- * @param array $data
- * @return true|void
- */
- public function handle(array $data)
- {
- if (empty($data) || empty($data['source_table_ids'])) return true;
- $capital_types = [
- ComputingEnum::TEAM_PRIZE,
- ComputingEnum::EXTRA_PRIZE,
- ComputingEnum::OVER_PRIZE,
- ComputingEnum::EQUAL_PRIZE,
- ComputingEnum::EXTRA_EQUAL_PRIZE_1,
- ComputingEnum::EXTRA_EQUAL_PRIZE_2,
- ComputingEnum::DRAINAGE_SUBSIDY_PRIZE,
- ComputingEnum::TEAM_SUBSIDY_PRIZE,
- ComputingEnum::AGENT_DISTRIBUTION_REWARD,
- ComputingEnum::MANAGE_PRIZE,
- ComputingEnum::DIFF_PARENT,
- ComputingEnum::DIFF_AREA_COMMISSION,
- ComputingEnum::DIFF_USER,
- ComputingEnum::EQUAL_UPGRADE,
- ];
- $where = [
- ['source_table' => 'order_detail'],
- ['source_table_id' => $data['source_table_ids']],
- ['from_type' => AgentEnum::ADDONS_NAME],
- ['capital_type' => $capital_types]
- ];
- //佣金
- $wallet_type = 'commission';
- CapitalLog::$capitalType = "{$wallet_type}_frozen";
- $commission_list = CapitalLog::lists(['where' => array_merge($where, [['status' => CapitalLog::STATUS_WAIT_SEND]])]);
- if ($commission_list) {
- foreach ($commission_list as $item) {
- UserWalletService::unfrozen($item['id'], $wallet_type);
- try {
- $distribution = Agent::findOne(['user_id' => $item['user_id']]);
- $field = 'total_' . $wallet_type;
- $distribution->$field += -$item['change_num'];
- $distribution->save();
- }catch (\Exception $e){
- \Yii::error('延时结算代理商分红累计佣金增加失败,ID:'. $item['id'] .',USER_ID: '. $item['user_id'].',原因:'. $e->getMessage());
- }
- }
- }
- //积分
- $wallet_type = 'score';
- CapitalLog::$capitalType = "{$wallet_type}_frozen";
- $score_list = CapitalLog::lists(['where' => array_merge($where, [['status' => CapitalLog::STATUS_WAIT_SEND]])]);
- if ($score_list) {
- foreach ($score_list as $item) {
- UserWalletService::unfrozen($item['id'], $wallet_type);
- try {
- $distribution = Agent::findOne(['user_id' => $item['user_id']]);
- $field = 'total_' . $wallet_type;
- $distribution->$field += -$item['change_num'];
- $distribution->save();
- }catch (\Exception $e){
- \Yii::error('延时结算代理商分红累计佣金增加失败,ID:'. $item['id'] .',USER_ID: '. $item['user_id'].',原因:'. $e->getMessage());
- }
- }
- }
- //数字币
- $digital_list = DigitalLog::lists(['where' => array_merge($where, [['status' => CapitalLog::STATUS_SEND], ['send_status' => DigitalLog::SEND_STATUS_FROZEN]])]);
- if ($digital_list) {
- foreach ($digital_list as $item) {
- UserDigital::unfrozen($item['id']);
- }
- }
- // 更新延时结算日志状态
- if (!empty($data['mall_id']) && !empty($data['order_no'])) {
- try {
- AgentDelayLog::updateAll(['status' => CapitalLog::STATUS_SEND, 'agented_at' => time()], ['mall_id' => $data['mall_id'], 'order_no' => $data['order_no'], 'status' => CapitalLog::STATUS_WAIT_SEND]);
- }catch (\Exception $e){
- return false;
- }
- }
- }
- /**
- * 写入延时结算任务
- * @param int $sec
- * @param array $order_detail_ids // 结算订单详情ids
- * @param array $logs_data // 延时结算日志数据
- * @return bool
- */
- public static function task(int $sec = 0, array $queue_data = [], array $logs_data = [])
- {
- if (empty($queue_data['source_table_ids'])) return true;
- try {
- // 写入延时结算日志
- AgentDelayLog::batchSave($logs_data);
- // 加入延时队列执行
- \Yii::$app->services->rabbitMq->delay($sec, $queue_data, self::class, 'handle');
- return true;
- }catch (\Exception $e){
- return true;
- }
- }
- }
|