ComonQrd.php 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. <?php
  2. declare (strict_types = 1);
  3. namespace app\admin\listener;
  4. use app\admin\model\InvoiceInfo;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']=="rinv")$this->returnInv($event);
  17. if($event['type']=="check")$this->checkPay($event);
  18. }
  19. public function payComon($data){
  20. $payinfo = Pay::where("payNo",$data['payNo'])->findOrEmpty();
  21. if($payinfo->isEmpty()) return;
  22. if($payinfo->is_comon!=1)return;
  23. if(!in_array($payinfo->status,[1,2]))return;
  24. $qrdNo = PayInfo::alias("a")->leftJoin("ComonOrder b","a.cgdNo=b.cgdNo")->where(["payNo"=>$data['payNo'],"is_del"=>0,"a.status"=>1])->column("orderCode");
  25. $qrdinfo = QrdInfo::where([["sequenceNo","in",$qrdNo],["wpay_fee",">",0]])->select();
  26. if($qrdinfo->isEmpty())return;
  27. $this->CheckComonOrder($payinfo);
  28. $tag=[];
  29. $qrdSave=[];
  30. foreach ($qrdinfo as $item){
  31. $tag_temp=[
  32. "code"=>$item->sequenceNo,
  33. "tag_id"=>10,
  34. "creater"=>"system",
  35. "createrid"=>0,
  36. "tag_fee"=>0,
  37. "tag_img"=>"",
  38. "status"=>1
  39. ];
  40. $qrd=[
  41. "id"=>$item->id,
  42. "wpay_fee"=>$item->wpay_fee,
  43. "apay_fee"=>$item->apay_fee,
  44. "pay_status"=>$item->pay_status,
  45. "pay_tag_fee"=>0,
  46. "pay_tag" => 1
  47. ];
  48. if($item->wpay_fee>$data['pay_fee']){
  49. $tag_temp['tag_fee'] = $data['pay_fee'];
  50. $qrd['pay_tag_fee'] = $data['pay_fee'];
  51. $qrd['wpay_fee'] = $item->wpay_fee-$data['pay_fee'];
  52. $qrd['apay_fee'] = $item->apay_fee+$data['pay_fee'];
  53. $qrd['pay_status'] = ($qrd['wpay_fee']==0 &&$item->pay_fee==0) ? 3:($qrd['apay_fee']==0?1:2);
  54. $data['pay_fee']=0;
  55. }else{
  56. $data['pay_fee']=$data['pay_fee']-$item->wpay_fee;
  57. $qrd['pay_tag_fee'] = $item->wpay_fee;
  58. $qrd['wpay_fee'] = 0;
  59. $qrd['apay_fee'] = $item->apay_fee+$item->wpay_fee;
  60. $qrd['pay_status'] = ($qrd['wpay_fee']==0 &&$item->pay_fee==0) ? 3:($qrd['apay_fee']==0?1:2);
  61. }
  62. $qrdSave[]=$qrd;
  63. $tag[]=$tag_temp;
  64. if($data['pay_fee']==0) break;
  65. }
  66. (new \app\admin\model\QrdInfo)->saveAll($qrdSave);
  67. (new \app\admin\model\TagLog)->saveAll($tag);
  68. }
  69. protected function invComon($data){
  70. $invinfo =InvoicePool::where(['invNo'=>$data['invNo']])->findOrEmpty();
  71. if($invinfo->isEmpty())return;
  72. if($invinfo->status!=4 ||$invinfo->is_comon!=1 )return;
  73. $invpay =InvoicePay::where(['invNo'=>$data['invNo']])->findOrEmpty();
  74. if($invpay->isEmpty())return;
  75. if($invpay->status!=0 )return;
  76. $payinfo = Pay::where('payNo',$invpay['payNo'])->findOrEmpty();
  77. if($payinfo->isEmpty()) return;
  78. if($payinfo->is_comon!=1)return;
  79. if(!in_array($payinfo->status,[1,2]))return;
  80. $ticket =InvoiceTicket::where(["invNo"=>$data['invNo'],"type"=>0])->json(['item'])->findOrEmpty();
  81. if($ticket->isEmpty())return;
  82. $pay_fee=0;
  83. if($payinfo->winv_fee >=$invinfo->inv_value){
  84. $pay_fee = $invinfo->inv_value;
  85. }else{
  86. $pay_fee = $payinfo->winv_fee;
  87. }
  88. $payinvoice = [
  89. "payNo"=>$invpay['payNo'],
  90. "hpNo"=>makeNo("hp"),
  91. "apply_id"=>0,
  92. "apply_name"=>"system",
  93. "invType"=>$invinfo->open_type==3?1:3,
  94. "invoiceType"=>$invinfo->inv_type,
  95. "inv_fee"=>$pay_fee,
  96. "inv_subtotal_amount"=>$ticket->inv_subtotal,
  97. "inv_amount"=>$ticket->inv_total,
  98. "invStatus"=>1,
  99. "status"=>4,
  100. "check_time"=>date("Y-m-d H:i:s"),
  101. "open_time"=>$ticket->open_date,
  102. "invoiceNumber"=>$ticket->inv_number,
  103. "seller_check"=>1,
  104. "buyer_check"=>1,
  105. "invoiceCode"=>$ticket->inv_code,
  106. "checkNumber"=>$ticket->check_code,
  107. "checkApi"=>$data['checkApi']??0
  108. ];
  109. $payinfo->winv_fee = $payinfo->winv_fee-$pay_fee;
  110. $payinfo->ainv_fee = $payinfo->ainv_fee+$pay_fee;
  111. $payinfo->inv_status = ($payinfo->winv_fee==0 &&$payinfo->inv_fee==0)?3:($payinfo->ainv_fee==0?1:2);
  112. $this->CheckComonOrder($payinfo);
  113. $payinfo->save();
  114. PayInvoice::create($payinvoice);
  115. if(!empty($ticket->item)){
  116. $itemArr=[];
  117. foreach ($ticket->item as $item){
  118. $temp=[];
  119. $temp['name']=$item['XMMC'];
  120. $temp['unit']=$item['DW'];
  121. $temp['quantity']=$item['SPSL'];
  122. $temp['unit_price']=$item['DJ'];
  123. $temp['amount']=$item['JE'];
  124. $temp['tax']=$item['SE'];
  125. $temp['tax_rate']=strval($item['SL']*100)."%";
  126. $itemArr[]=$temp;
  127. }
  128. }
  129. $info=[
  130. 'payNo' =>$invpay['payNo'] ,
  131. 'hpNo' =>$payinvoice['hpNo'] ,
  132. 'type' =>$invinfo['inv_type'] ,
  133. 'number' =>$ticket->inv_number ,
  134. 'code' =>$ticket->inv_code ,
  135. 'check_code' =>$ticket->check_code ,
  136. 'issue_date' =>date('Ymd' ,strtotime($ticket->open_date)) ,
  137. 'buyer_name' =>$ticket->buyer_title ,
  138. 'buyer_id' =>$ticket->buyer_id ,
  139. 'buyer_address' =>$ticket->buyer_addr . $ticket->buyer_mobile ,
  140. 'buyer_bank' =>$ticket->buyer_bank . $ticket->buyer_bankNo ,
  141. 'seller_name' =>$ticket->seller_title ,
  142. 'seller_id' =>$ticket->seller_id ,
  143. 'seller_address' =>$ticket->seller_addr . $ticket->seller_mobile ,
  144. 'seller_bank' =>$ticket->seller_bank . $ticket->seller_bankNo ,
  145. 'subtotal_amount'=>$ticket->inv_subtotal ,
  146. 'subtotal_tax' =>$ticket->tax_fee ,
  147. 'total' =>$ticket->inv_total ,
  148. 'item_list' =>json_encode($itemArr,JSON_UNESCAPED_UNICODE) ,
  149. 'receiver' =>$ticket->reciver ,
  150. 'issuer' =>$ticket->issuer ,
  151. 'reviewer' =>$ticket->reviewer ,
  152. 'change_field' =>'' ,
  153. ];
  154. InvoiceInfo::create($info);
  155. $invpay->hpNo = $payinvoice['hpNo'];
  156. $invpay->status =1;
  157. $invpay->save();
  158. }
  159. protected function checkPay($data){
  160. $payinfo = Pay::where('payNo',$data['payNo'])->findOrEmpty();
  161. if($payinfo->isEmpty()) return;
  162. if($payinfo->is_comon!=1)return;
  163. $this->CheckComonOrder($payinfo);
  164. }
  165. public function CheckComonOrder($payinfo){
  166. if($payinfo->status==3||$payinfo->status==4 ){
  167. PayInfo::alias('a')
  168. ->leftJoin('ComonOrder b','a.cgdNo=b.cgdNo')
  169. ->where(['payNo'=>$payinfo->payNo,'is_del'=>0,'a.status'=>0])
  170. ->update(['b.status'=>0]);
  171. }else{
  172. if($payinfo->inv_status==3 &&$payinfo->pay_status==3){
  173. PayInfo::alias('a')
  174. ->leftJoin('ComonOrder b','a.cgdNo=b.cgdNo')
  175. ->where(['payNo'=>$payinfo->payNo,'is_del'=>0,'a.status'=>1])
  176. ->update(["b.status"=>2]);
  177. }elseif($payinfo->inv_status!=3|| $payinfo->pay_status!=3){
  178. PayInfo::alias('a')
  179. ->leftJoin('ComonOrder b','a.cgdNo=b.cgdNo')
  180. ->where(['payNo'=>$payinfo->payNo,'is_del'=>0,'a.status'=>1])
  181. ->update(['b.status'=>1]);
  182. }
  183. }
  184. }
  185. public function returnInv($data){
  186. $invinfo =InvoicePool::where(['invNo'=>$data['invNo'],"status"=>[5,6,7,8,9]])->findOrEmpty();
  187. if($invinfo->isEmpty())return;
  188. if($invinfo->is_comon!=1 )return;
  189. $invpay =InvoicePay::where(['invNo'=>$data['invNo']])->findOrEmpty();
  190. if($invpay->isEmpty())return;
  191. if($invpay->status!=1 )return;
  192. $payinfo = Pay::where('payNo',$invpay['payNo'])->findOrEmpty();
  193. if($payinfo->isEmpty()) return;
  194. if($payinfo->is_comon!=1)return;
  195. $payinvoice = PayInvoice::where(["hpNo"=>$invpay->hpNo,"status"=>4])->findOrEmpty();
  196. if($payinvoice->isEmpty())return;
  197. $payinvoice->status=10;
  198. $payinvoice->save();
  199. $payinfo->winv_fee = $payinfo->winv_fee+$payinvoice->inv_fee;
  200. $payinfo->ainv_fee = $payinfo->ainv_fee-$payinvoice->inv_fee;
  201. $payinfo->inv_status = ($payinfo->winv_fee==0 &&$payinfo->inv_fee==0)?3:($payinfo->ainv_fee==0?2:1);
  202. $this->CheckComonOrder($payinfo);
  203. $payinfo->save();
  204. $invpay->status =2;
  205. $invpay->save();
  206. }
  207. }