YunstSharingReceiverHandleFailJob.php 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <?php
  2. namespace app\jobs;
  3. use app\models\Order;
  4. use app\models\SaasUser;
  5. use app\models\SaasUserPriceLog;
  6. use app\models\SharingReceiver;
  7. use app\models\User;
  8. use app\utils\OrderNo;
  9. use app\utils\yunst\src\OrderYunst;
  10. use yii\base\BaseObject;
  11. use yii\queue\JobInterface;
  12. //通联支付分账失败
  13. class YunstSharingReceiverHandleFailJob extends BaseObject implements JobInterface
  14. {
  15. public string $order_no;
  16. public function execute($queue)
  17. {
  18. try {
  19. /**
  20. * 查询待分账的记录
  21. */
  22. $init_order_no = $this->order_no;
  23. $orderNoHead = substr($init_order_no, 0, 2);
  24. $where = [
  25. 'pay_type' => Order::PAY_TYPE_YUNST_WECHAT_PAY
  26. ];
  27. $model = Order::find();
  28. $is_scan = 0;
  29. $is_mall = 0;
  30. switch ($orderNoHead) {
  31. case 'ML':
  32. $is_mall = 1;
  33. $model = Order::find();
  34. $where = [
  35. 'order_no' => $init_order_no,
  36. 'is_delete' => 0,
  37. 'trade_status' => Order::ORDER_FLOW_CONFIRM
  38. ];
  39. break;
  40. case 'AL':
  41. //商盟会员购物订单
  42. $model = Order::find();
  43. $where = [
  44. 'order_no' => $init_order_no,
  45. 'is_delete' => 0,
  46. 'trade_status' => Order::ORDER_FLOW_CONFIRM
  47. ];
  48. break;
  49. case 'SC':
  50. //当面付订单
  51. $model = \app\plugins\scanCodePay\models\Order::find();
  52. $where = [
  53. 'order_no' => $init_order_no,
  54. 'is_delete' => 0,
  55. 'is_pay' => 1
  56. ];
  57. $is_scan = 1;
  58. break;
  59. }
  60. $order = $model->where($where)->one();
  61. if ($order) {
  62. $receivers_share = SharingReceiver::find()->where(['order_no' => $init_order_no])
  63. ->andWhere(['is_pay'=>SharingReceiver::PAY_FAIL])
  64. ->asArray()
  65. ->all();
  66. foreach($receivers_share as $receivers_share1){
  67. sleep(1);
  68. //开始分账
  69. //这里重新方法调用orderYunst来实现分账
  70. $res = OrderYunst::share($order, $receivers_share1);
  71. //通联分账
  72. if ($res['code'] == 0) {
  73. $order_id = $res['res']['order_id'];
  74. SharingReceiver::updateAll(['updated_at' => time(), 'is_pay' => SharingReceiver::PAY_SUCCESS, 'order_id' => $res['res']['order_id']], ['id' => $receivers_share1['id']]);
  75. // $this->saasUserPriceLog($order, [$receivers_share1]);
  76. // $this->saasUserPriceLog($order, [$receivers_share1], true);
  77. //如果是分账成功自动提现
  78. // $this->autoCash($order_id);//不在分账后再自动分账,变为每天t+1十点半以后在处理提现
  79. }else{
  80. $faildDes = $res['msg'];
  81. $faildDes && $faildDes = addslashes('(失败:' . $faildDes . ')');
  82. //分到平台
  83. if($receivers_share1['type'] == 2){
  84. if ($is_scan) {
  85. $order_no = OrderNo::getOrderNo(OrderNo::ORDER_SCAN_CODE_PAY);
  86. $scan_order = \app\plugins\scanCodePay\models\Order::findOne(['id'=>$order->id]);
  87. } else {
  88. $order_no_head = OrderNo::ORDER_ALLIANCE;
  89. if ($is_mall) {
  90. $order_no_head = OrderNo::ORDER_MALL;
  91. }
  92. $order_no = OrderNo::getOrderNo($order_no_head);
  93. $scan_order = \app\models\Order::findOne(['id' => $order->id]);
  94. }
  95. $scan_order->order_no = $order_no;
  96. $scan_order->save();
  97. SharingReceiver::updateAll([
  98. 'updated_at' => time(),
  99. 'order_no' => $order_no,
  100. 'yunst_order_no'=>$res['res']['yunst_order_no'],
  101. 'is_pay' => SharingReceiver::PAY_FAIL,
  102. 'err_code' => !empty($res['res']['err_code']) ? $res['res']['err_code'] : $res['msg'],
  103. 'err_code_des' => !empty($res['res']['err_code_des']) ? $res['res']['err_code_des'] : $res['msg']], ['id' => $receivers_share1['id']]);
  104. $id = \Yii::$app->cache->get('yunst_receiver_fail_id' . $receivers_share1['id']);
  105. if ($id && !\Yii::$app->queue->isDone($id)) {
  106. \Yii::$app->queue->remove($id);
  107. }
  108. $id = \queue_push(new \app\jobs\YunstSharingReceiverHandleFailJob(['order_no' => $order_no]), 3600);
  109. \Yii::$app->cache->set('yunst_receiver_fail_id' . $receivers_share1['id'], $id);
  110. continue;
  111. }
  112. }
  113. }
  114. }
  115. } catch(\Exception $e) {
  116. // \Yii::error($e);
  117. debug_log('--------auto-yunst-error---- '.$this->order_no.' ----auto-yunst-error--------' . $e->getMessage() . $e->getFile() . $e->getLine(), 'yunst.log');
  118. }
  119. }
  120. private function saasUserPriceLog($order, $SharingReceivers = [], $expend = false, $log = '') {
  121. try {
  122. $log_type = SaasUserPriceLog::LOG_TYPE_INCOME;
  123. $remark = '';
  124. if($expend){
  125. $log_type = SaasUserPriceLog::LOG_TYPE_EXPEND;
  126. $remark = '-分账成功';
  127. }
  128. $log && $remark = $log;
  129. foreach ($SharingReceivers as $item) {
  130. \Yii::warning(['---- saasUserPriceLog Err11 ----', $item]);
  131. if(in_array($item['type'], [SharingReceiver::RECEIVE_MERCHANT_ID])){
  132. continue;
  133. }
  134. $desc = $item['remark'] . $remark;
  135. $saas_id = $item['saas_id'];
  136. if(!$saas_id){
  137. if(!$order->is_platform){
  138. $saas_id = $item['user_id'];
  139. }else{
  140. $userInfo = User::findOne($item['user_id']);
  141. if(!empty($userInfo)){
  142. $saas = SaasUser::findOne(['mobile' => $userInfo->binding]);
  143. $saas_id = $saas->id;
  144. }
  145. }
  146. }
  147. \Yii::warning(['---- saasUserPriceLog Err22 ----', $saas_id, $item['amount'], $item['from'], $log_type, $order->order_no, $desc]);
  148. SaasUserPriceLog::saveLog($saas_id, $item['amount'], $item['from'], $log_type, $order->order_no, $desc);
  149. }
  150. } catch (\Exception $e) {
  151. \Yii::warning('---- saasUserPriceLog Err ----' . __LINE__);
  152. }
  153. }
  154. }