| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- <?php
- namespace app\jobs;
- use app\models\Order;
- use app\models\SaasUser;
- use app\models\SaasUserPriceLog;
- use app\models\SharingReceiver;
- use app\models\User;
- use app\utils\OrderNo;
- use app\utils\yunst\src\OrderYunst;
- use yii\base\BaseObject;
- use yii\queue\JobInterface;
- //通联支付分账失败
- class YunstSharingReceiverHandleFailJob extends BaseObject implements JobInterface
- {
- public string $order_no;
- public function execute($queue)
- {
- try {
- /**
- * 查询待分账的记录
- */
- $init_order_no = $this->order_no;
- $orderNoHead = substr($init_order_no, 0, 2);
- $where = [
- 'pay_type' => Order::PAY_TYPE_YUNST_WECHAT_PAY
- ];
- $model = Order::find();
- $is_scan = 0;
- $is_mall = 0;
- switch ($orderNoHead) {
- case 'ML':
- $is_mall = 1;
- $model = Order::find();
- $where = [
- 'order_no' => $init_order_no,
- 'is_delete' => 0,
- 'trade_status' => Order::ORDER_FLOW_CONFIRM
- ];
- break;
- case 'AL':
- //商盟会员购物订单
- $model = Order::find();
- $where = [
- 'order_no' => $init_order_no,
- 'is_delete' => 0,
- 'trade_status' => Order::ORDER_FLOW_CONFIRM
- ];
- break;
- case 'SC':
- //当面付订单
- $model = \app\plugins\scanCodePay\models\Order::find();
- $where = [
- 'order_no' => $init_order_no,
- 'is_delete' => 0,
- 'is_pay' => 1
- ];
- $is_scan = 1;
- break;
- }
- $order = $model->where($where)->one();
- if ($order) {
- $receivers_share = SharingReceiver::find()->where(['order_no' => $init_order_no])
- ->andWhere(['is_pay'=>SharingReceiver::PAY_FAIL])
- ->asArray()
- ->all();
- foreach($receivers_share as $receivers_share1){
- sleep(1);
- //开始分账
- //这里重新方法调用orderYunst来实现分账
- $res = OrderYunst::share($order, $receivers_share1);
- //通联分账
- if ($res['code'] == 0) {
- $order_id = $res['res']['order_id'];
- SharingReceiver::updateAll(['updated_at' => time(), 'is_pay' => SharingReceiver::PAY_SUCCESS, 'order_id' => $res['res']['order_id']], ['id' => $receivers_share1['id']]);
- // $this->saasUserPriceLog($order, [$receivers_share1]);
- // $this->saasUserPriceLog($order, [$receivers_share1], true);
- //如果是分账成功自动提现
- // $this->autoCash($order_id);//不在分账后再自动分账,变为每天t+1十点半以后在处理提现
- }else{
- $faildDes = $res['msg'];
- $faildDes && $faildDes = addslashes('(失败:' . $faildDes . ')');
- //分到平台
- if($receivers_share1['type'] == 2){
- if ($is_scan) {
- $order_no = OrderNo::getOrderNo(OrderNo::ORDER_SCAN_CODE_PAY);
- $scan_order = \app\plugins\scanCodePay\models\Order::findOne(['id'=>$order->id]);
- } else {
- $order_no_head = OrderNo::ORDER_ALLIANCE;
- if ($is_mall) {
- $order_no_head = OrderNo::ORDER_MALL;
- }
- $order_no = OrderNo::getOrderNo($order_no_head);
- $scan_order = \app\models\Order::findOne(['id' => $order->id]);
- }
- $scan_order->order_no = $order_no;
- $scan_order->save();
- SharingReceiver::updateAll([
- 'updated_at' => time(),
- 'order_no' => $order_no,
- 'yunst_order_no'=>$res['res']['yunst_order_no'],
- 'is_pay' => SharingReceiver::PAY_FAIL,
- 'err_code' => !empty($res['res']['err_code']) ? $res['res']['err_code'] : $res['msg'],
- 'err_code_des' => !empty($res['res']['err_code_des']) ? $res['res']['err_code_des'] : $res['msg']], ['id' => $receivers_share1['id']]);
- $id = \Yii::$app->cache->get('yunst_receiver_fail_id' . $receivers_share1['id']);
- if ($id && !\Yii::$app->queue->isDone($id)) {
- \Yii::$app->queue->remove($id);
- }
- $id = \queue_push(new \app\jobs\YunstSharingReceiverHandleFailJob(['order_no' => $order_no]), 3600);
- \Yii::$app->cache->set('yunst_receiver_fail_id' . $receivers_share1['id'], $id);
- continue;
- }
- }
- }
- }
- } catch(\Exception $e) {
- // \Yii::error($e);
- debug_log('--------auto-yunst-error---- '.$this->order_no.' ----auto-yunst-error--------' . $e->getMessage() . $e->getFile() . $e->getLine(), 'yunst.log');
- }
- }
- private function saasUserPriceLog($order, $SharingReceivers = [], $expend = false, $log = '') {
- try {
- $log_type = SaasUserPriceLog::LOG_TYPE_INCOME;
- $remark = '';
- if($expend){
- $log_type = SaasUserPriceLog::LOG_TYPE_EXPEND;
- $remark = '-分账成功';
- }
- $log && $remark = $log;
- foreach ($SharingReceivers as $item) {
- \Yii::warning(['---- saasUserPriceLog Err11 ----', $item]);
- if(in_array($item['type'], [SharingReceiver::RECEIVE_MERCHANT_ID])){
- continue;
- }
- $desc = $item['remark'] . $remark;
- $saas_id = $item['saas_id'];
- if(!$saas_id){
- if(!$order->is_platform){
- $saas_id = $item['user_id'];
- }else{
- $userInfo = User::findOne($item['user_id']);
- if(!empty($userInfo)){
- $saas = SaasUser::findOne(['mobile' => $userInfo->binding]);
- $saas_id = $saas->id;
- }
- }
- }
- \Yii::warning(['---- saasUserPriceLog Err22 ----', $saas_id, $item['amount'], $item['from'], $log_type, $order->order_no, $desc]);
- SaasUserPriceLog::saveLog($saas_id, $item['amount'], $item['from'], $log_type, $order->order_no, $desc);
- }
- } catch (\Exception $e) {
- \Yii::warning('---- saasUserPriceLog Err ----' . __LINE__);
- }
- }
- }
|