| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- <?php
- namespace addons\Area\common\logic\notify;
- use addons\Area\common\models\AreaOrder;
- use addons\Area\common\enums\AreaEnum;
- use addons\Area\common\models\AreaAgent;
- use addons\Area\common\models\AreaApply;
- use common\enums\StatusEnum;
- use common\enums\UserWalletEnum;
- use common\models\common\PaymentTrade;
- use services\common\UserWalletService;
- use common\models\order\Order;
- use common\traits\ErrorTrait;
- use Exception;
- /**
- * Class Notify
- * @Author: hua
- * @DateTime: 2021/10/18 9:39
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @package common\logic\notify
- */
- class Notify
- {
- use ErrorTrait;
- /**
- * @Author: hua
- * @DateTime: 2021/10/18 9:57
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @param $order_info
- * @return bool
- */
- public function notify($order_info)
- {
- try {
- $payment_trade = PaymentTrade::findOne(['id' => $order_info['trade_id']]);
- $order = AreaOrder::findOne(['order_no' => $order_info['order_no']]);
- $configs = \Yii::$app->services->setting->addons->get($order['mall_id'], AreaEnum::ADDONS_NAME, 'basic');
- //维护订单数据
- if ($order->status != StatusEnum::ENABLED) throw new Exception('该订单已被处理');
- if ($order->is_pay == 1) throw new Exception('订单已支付,请不要重复支付');
- $order->is_pay = StatusEnum::ENABLED;
- $order->pay_time = time();
- $order->out_trade_no = $payment_trade['out_trade_no'];
- $order->total_commission = bcmul($order->price * ($configs['add_price_pre']/100) * ($configs['price_commission_pre'] / 100), 1, 2);
- $order->commission = $order->total_commission;
- //获取是否存在已购买过相同区代的订单
- $area_order = AreaOrder::getOne([
- ['mall_id' => $order->mall_id],
- ['level' => $order->level],
- ['area_id' => $order->area_id],
- ['is_pay' => StatusEnum::ENABLED],
- ['status' => StatusEnum::ENABLED]
- ]);
- $insert_wallet = [];
- //如果存在则需要处理佣金
- if (!empty($area_order)) {
- //判断是否修改过每次加价、分红设置配置数据,未修改则需扣除上个订单的佣金,出现修改则不需要扣除
- $total_commission = bcmul($area_order->price * ($configs['add_price_pre']/100) * ($configs['price_commission_pre'] / 100), 1, 2);
- if ($total_commission == $area_order->total_commission) {
- $order->commission = $order->total_commission - $area_order->total_commission;
- } else {
- $area_order->total_commission = $total_commission;
- $area_order->commission = $total_commission;
- $order->commission = $order->total_commission - $area_order->total_commission;
- }
- $area_order->status = StatusEnum::DELETE;
- //退回购买支付金额
- $insert_wallet[] = [
- 'mall_id' => $area_order->mall_id,
- 'user_id' => $area_order->user_id,
- 'is_frozen' => false,
- 'wallet_type' => 'balance',
- 'money' => $area_order->price, //转入金额
- 'desc' => '其他用户加价占用代理身份',
- 'source_table' => 'addons_area_order',
- 'source_table_id' => $area_order->id,//结算周期id
- 'from_type' => UserWalletEnum::REFUND,
- 'capital_type' => UserWalletEnum::AREA_BONUS_REFUND,
- // 'not_add_total' => true,
- ];
- //加价分红
- $insert_wallet[] = [
- 'mall_id' => $area_order->mall_id,
- 'user_id' => $area_order->user_id,
- 'is_frozen' => false,
- 'wallet_type' => 'commission',
- 'money' => $area_order->commission, //转入金额
- 'desc' => '代理身份被其他用户加价占用,获得加价分红',
- 'source_table' => 'addons_area_order',
- 'source_table_id' => $area_order['id'],//
- 'from_type' => UserWalletEnum::FROM_AREA,
- 'capital_type' => UserWalletEnum::AREA_BONUS_REWARD,
- ];
- $area_order->save();
- //维护区代申请数据
- AreaApply::updateAll(['check_status' => 2, 'refund_time' => time(), 'is_refund' => 1, 'refund_remark' => '代理身份被其他用户加价占用,获得加价分红'], ['order_id' => $area_order->id, 'mall_id' => $area_order->mall_id]);
- }
- if (!$order->save()) throw new Exception('修改订单失败:'. $order->getErrorMessage());
- //维护区代身份
- AreaAgent::updateAll(['status' => StatusEnum::DELETE], ['level' => $order->level, 'district_id' => $order->area_id, 'mall_id' => $order->mall_id]);
- if (!empty($insert_wallet)) {
- UserWalletService::batchHandleByQueue($insert_wallet);
- }
- // $res = Order::pay($order,$order_info['pay_type'],$payment_trade['out_trade_no']);
- // if($res === false) throw new Exception(Order::getStaticError());
- return true;
- } catch (Exception $e) {
- \Yii::$app->custom->logs('notify:'.$e->getMessage());
- $this->setStaticError($e->getMessage());
- return false;
- }
- }
- }
|