ComonQrd.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?php
  2. declare (strict_types = 1);
  3. namespace app\admin\listener;
  4. use app\admin\model\InvoicePay;use app\admin\model\InvoicePool;use app\admin\model\InvoiceTicket;use app\admin\model\Pay;use app\admin\model\PayInfo;use app\admin\model\PayInvoice;use app\admin\model\QrdInfo;use app\admin\model\TagLog;use think\facade\Config;
  5. class ComonQrd
  6. {
  7. /**
  8. * 事件监听处理
  9. *
  10. * @return mixed
  11. */
  12. public function handle($event)
  13. {
  14. if($event['type']=="pay")$this->payComon($event);
  15. if($event['type']=="inv")$this->invComon($event);
  16. if($event['type']=="check")$this->checkPay($event);
  17. }
  18. public function payComon($data){
  19. $payinfo = Pay::where("payNo",$data['payNo'])->findOrEmpty();
  20. if($payinfo->isEmpty()) return;
  21. if($payinfo->is_comon!=1)return;
  22. $qrdNo = PayInfo::alias("a")->leftJoin("ComonOrder b","a.cgdNo=b.cgdNo")->where(["payNo"=>$data['payNo'],"is_del"=>0,"a.status"=>1])->column("orderCode");
  23. $qrdinfo = QrdInfo::where([["sequenceNo","in",$qrdNo],["wpay_fee",">",0]])->select();
  24. if($qrdinfo->isEmpty())return;
  25. $this->CheckComonOrder($payinfo);
  26. $tag=[];
  27. $qrdSave=[];
  28. foreach ($qrdinfo as $item){
  29. $tag_temp=[
  30. "code"=>$item->sequenceNo,
  31. "tag_id"=>10,
  32. "creater"=>"system",
  33. "createrid"=>0,
  34. "tag_fee"=>0,
  35. "tag_img"=>"",
  36. "status"=>1
  37. ];
  38. $qrd=[
  39. "id"=>$item->id,
  40. "wpay_fee"=>$item->wpay_fee,
  41. "apay_fee"=>$item->apay_fee,
  42. "pay_status"=>$item->pay_status,
  43. "pay_tag_fee"=>0,
  44. "pay_tag" => 1
  45. ];
  46. if($item->wpay_fee>$data['pay_fee']){
  47. $tag_temp['tag_fee'] = $data['pay_fee'];
  48. $qrd['pay_tag_fee'] = $data['pay_fee'];
  49. $qrd['wpay_fee'] = $item->wpay_fee-$data['pay_fee'];
  50. $qrd['apay_fee'] = $item->apay_fee+$data['pay_fee'];
  51. $qrd['pay_status'] = ($qrd['wpay_fee']==0 &&$item->pay_fee==0) ? 3:($qrd['apay_fee']==0?1:2);
  52. $data['pay_fee']=0;
  53. }else{
  54. $data['pay_fee']=$data['pay_fee']-$item->wpay_fee;
  55. $qrd['pay_tag_fee'] = $item->wpay_fee;
  56. $qrd['wpay_fee'] = 0;
  57. $qrd['apay_fee'] = $item->apay_fee+$item->wpay_fee;
  58. $qrd['pay_status'] = ($qrd['wpay_fee']==0 &&$item->pay_fee==0) ? 3:($qrd['apay_fee']==0?1:2);
  59. }
  60. $qrdSave[]=$qrd;
  61. $tag[]=$tag_temp;
  62. if($data['pay_fee']==0) break;
  63. }
  64. (new \app\admin\model\QrdInfo)->saveAll($qrdSave);
  65. (new \app\admin\model\TagLog)->saveAll($tag);
  66. }
  67. protected function invComon($data){
  68. $invinfo =InvoicePool::where(['invNo'=>$data['invNo']])->findOrEmpty();
  69. if($invinfo->isEmpty())return;
  70. if($invinfo->status!=4 ||$invinfo->is_comon!=1 )return;
  71. $invpay =InvoicePay::where(['invNo'=>$data['invNo']])->findOrEmpty();
  72. if($invinfo->isEmpty())return;
  73. if($invinfo->status!=0 )return;
  74. $payinfo = Pay::where('payNo',$invpay['payNo'])->findOrEmpty();
  75. if($payinfo->isEmpty()) return;
  76. if($payinfo->is_comon!=1)return;
  77. $ticket =InvoiceTicket::where(["invNo"=>$data['invNo'],"type"=>0])->findOrEmpty();
  78. if($ticket->isEmpty())return;
  79. $pay_fee=0;
  80. if($payinfo->winv_fee >=$ticket->inv_value){
  81. $pay_fee = $ticket->inv_value;
  82. }else{
  83. $pay_fee = $payinfo->winv_fee;
  84. }
  85. $payinvoice = [
  86. "payNo"=>$invpay['payNo'],
  87. "hpNo"=>makeNo("hp"),
  88. "apply_id"=>0,
  89. "apply_name"=>"system",
  90. "invType"=>$invinfo->open_type==3?1:3,
  91. "invoiceType"=>$invinfo->inv_type,
  92. "inv_fee"=>$pay_fee,
  93. "inv_subtotal_amount"=>$ticket->inv_subtotal,
  94. "inv_amount"=>$ticket->inv_total,
  95. "invStatus"=>1,
  96. "status"=>4,
  97. "check_time"=>date("Y-m-d H:i:s"),
  98. "open_time"=>$ticket->open_date,
  99. "invoiceNumber"=>$ticket->inv_number,
  100. "seller_check"=>1,
  101. "buyer_check"=>1,
  102. "invoiceCode"=>$ticket->inv_code,
  103. "checkNumber"=>$ticket->check_code,
  104. "checkApi"=>$data['checkApi']??0
  105. ];
  106. $payinfo->winv_fee = $payinfo->winv_fee-$pay_fee;
  107. $payinfo->ainv_fee = $payinfo->ainv_fee+$pay_fee;
  108. $payinfo->inv_status = ($payinfo->winv_fee==0 &&$payinfo->inv_fee==0)?3:($payinfo->ainv_fee==0?1:2);
  109. $this->CheckComonOrder($payinfo);
  110. $payinfo->save();
  111. PayInvoice::create($payinvoice);
  112. }
  113. protected function checkPay($data){
  114. $payinfo = Pay::where('payNo',$data['payNo'])->findOrEmpty();
  115. if($payinfo->isEmpty()) return;
  116. if($payinfo->is_comon!=1)return;
  117. $this->CheckComonOrder($payinfo);
  118. }
  119. public function CheckComonOrder($payinfo){
  120. if($payinfo->inv_status==3 &&$payinfo->pay_status==3){
  121. PayInfo::alias('a')->leftJoin('ComonOrder b','a.cgdNo=b.cgdNo')
  122. ->where(['payNo'=>$payinfo->payNo,'is_del'=>0,'a.status'=>1])
  123. ->update(["b.status"=>2]);
  124. }
  125. if($payinfo->inv_status==1 &&$payinfo->pay_status==1){
  126. PayInfo::alias('a')->leftJoin('ComonOrder b','a.cgdNo=b.cgdNo')
  127. ->where(['payNo'=>$payinfo->payNo,'is_del'=>0,'a.status'=>1])
  128. ->update(['b.status'=>0]);
  129. }
  130. }
  131. }