123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- <?php
- declare (strict_types = 1);
- namespace app\admin\listener;
- 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;
- class ComonQrd
- {
- /**
- * 事件监听处理
- *
- * @return mixed
- */
- public function handle($event)
- {
- if($event['type']=="pay")$this->payComon($event);
- if($event['type']=="inv")$this->invComon($event);
- if($event['type']=="check")$this->checkPay($event);
- }
-
- public function payComon($data){
- $payinfo = Pay::where("payNo",$data['payNo'])->findOrEmpty();
- if($payinfo->isEmpty()) return;
- if($payinfo->is_comon!=1)return;
- $qrdNo = PayInfo::alias("a")->leftJoin("ComonOrder b","a.cgdNo=b.cgdNo")->where(["payNo"=>$data['payNo'],"is_del"=>0,"a.status"=>1])->column("orderCode");
- $qrdinfo = QrdInfo::where([["sequenceNo","in",$qrdNo],["wpay_fee",">",0]])->select();
- if($qrdinfo->isEmpty())return;
- $this->CheckComonOrder($payinfo);
- $tag=[];
- $qrdSave=[];
- foreach ($qrdinfo as $item){
- $tag_temp=[
- "code"=>$item->sequenceNo,
- "tag_id"=>10,
- "creater"=>"system",
- "createrid"=>0,
- "tag_fee"=>0,
- "tag_img"=>"",
- "status"=>1
- ];
- $qrd=[
- "id"=>$item->id,
- "wpay_fee"=>$item->wpay_fee,
- "apay_fee"=>$item->apay_fee,
- "pay_status"=>$item->pay_status,
- "pay_tag_fee"=>0,
- "pay_tag" => 1
- ];
- if($item->wpay_fee>$data['pay_fee']){
- $tag_temp['tag_fee'] = $data['pay_fee'];
- $qrd['pay_tag_fee'] = $data['pay_fee'];
- $qrd['wpay_fee'] = $item->wpay_fee-$data['pay_fee'];
- $qrd['apay_fee'] = $item->apay_fee+$data['pay_fee'];
- $qrd['pay_status'] = ($qrd['wpay_fee']==0 &&$item->pay_fee==0) ? 3:($qrd['apay_fee']==0?1:2);
- $data['pay_fee']=0;
- }else{
- $data['pay_fee']=$data['pay_fee']-$item->wpay_fee;
- $qrd['pay_tag_fee'] = $item->wpay_fee;
- $qrd['wpay_fee'] = 0;
- $qrd['apay_fee'] = $item->apay_fee+$item->wpay_fee;
- $qrd['pay_status'] = ($qrd['wpay_fee']==0 &&$item->pay_fee==0) ? 3:($qrd['apay_fee']==0?1:2);
-
- }
- $qrdSave[]=$qrd;
- $tag[]=$tag_temp;
- if($data['pay_fee']==0) break;
- }
- (new \app\admin\model\QrdInfo)->saveAll($qrdSave);
- (new \app\admin\model\TagLog)->saveAll($tag);
- }
-
- protected function invComon($data){
- $invinfo =InvoicePool::where(['invNo'=>$data['invNo']])->findOrEmpty();
-
- if($invinfo->isEmpty())return;
- if($invinfo->status!=4 ||$invinfo->is_comon!=1 )return;
- $invpay =InvoicePay::where(['invNo'=>$data['invNo']])->findOrEmpty();
- if($invpay->isEmpty())return;
- if($invpay->status!=0 )return;
- $payinfo = Pay::where('payNo',$invpay['payNo'])->findOrEmpty();
- if($payinfo->isEmpty()) return;
- if($payinfo->is_comon!=1)return;
- $ticket =InvoiceTicket::where(["invNo"=>$data['invNo'],"type"=>0])->findOrEmpty();
- if($ticket->isEmpty())return;
- $pay_fee=0;
- if($payinfo->winv_fee >=$invinfo->inv_value){
- $pay_fee = $invinfo->inv_value;
- }else{
- $pay_fee = $payinfo->winv_fee;
- }
- $payinvoice = [
- "payNo"=>$invpay['payNo'],
- "hpNo"=>makeNo("hp"),
- "apply_id"=>0,
- "apply_name"=>"system",
- "invType"=>$invinfo->open_type==3?1:3,
- "invoiceType"=>$invinfo->inv_type,
- "inv_fee"=>$pay_fee,
- "inv_subtotal_amount"=>$ticket->inv_subtotal,
- "inv_amount"=>$ticket->inv_total,
- "invStatus"=>1,
- "status"=>4,
- "check_time"=>date("Y-m-d H:i:s"),
- "open_time"=>$ticket->open_date,
- "invoiceNumber"=>$ticket->inv_number,
- "seller_check"=>1,
- "buyer_check"=>1,
- "invoiceCode"=>$ticket->inv_code,
- "checkNumber"=>$ticket->check_code,
- "checkApi"=>$data['checkApi']??0
- ];
- $payinfo->winv_fee = $payinfo->winv_fee-$pay_fee;
- $payinfo->ainv_fee = $payinfo->ainv_fee+$pay_fee;
- $payinfo->inv_status = ($payinfo->winv_fee==0 &&$payinfo->inv_fee==0)?3:($payinfo->ainv_fee==0?1:2);
- $this->CheckComonOrder($payinfo);
- $payinfo->save();
- PayInvoice::create($payinvoice);
- PayInvoice::create($payinvoice);
- if(!empty($ticket->item)){
- $itemArr=[];
- foreach ($ticket->item as $item){
- $temp=[];
- $temp['name']=$item['XMMC'];
- $temp['unit']=$item['DW'];
- $temp['quantity']=$item['SPSL'];
- $temp['unit_price']=$item['DJ'];
- $temp['amount']=$item['JE'];
- $temp['tax']=$item['SE'];
- $temp['tax_rate']=strval($item['SL']*100)."%";
- $itemArr[]=$temp;
- }
- }
- $info=[
- 'payNo' =>$invpay['payNo'] ,
- 'hpNo' =>$payinvoice['hpNo'] ,
- 'type' =>$invinfo['inv_type'] ,
- 'number' =>$ticket->inv_number ,
- 'code' =>$ticket->inv_code ,
- 'check_code' =>$ticket->check_code ,
- 'issue_date' =>date('Ymd' ,strtotime($ticket->open_date)) ,
- 'buyer_name' =>$ticket->buyer_title ,
- 'buyer_id' =>$ticket->buyer_id ,
- 'buyer_address' =>$ticket->buyer_addr . $ticket->buyer_mobile ,
- 'buyer_bank' =>$ticket->buyer_bank . $ticket->buyer_bankNo ,
- 'seller_name' =>$ticket->seller_title ,
- 'seller_id' =>$ticket->seller_id ,
- 'seller_address' =>$ticket->seller_addr . $ticket->seller_mobile ,
- 'seller_bank' =>$ticket->seller_bank . $ticket->seller_bankNo ,
- 'subtotal_amount'=>$ticket->inv_subtotal ,
- 'subtotal_tax' =>$ticket->tax_fee ,
- 'total' =>$ticket->inv_total ,
- 'item_list' =>json_encode($itemArr,JSON_UNESCAPED_UNICODE) ,
- 'receiver' =>$ticket->reciver ,
- 'issuer' =>$ticket->issuer ,
- 'reviewer' =>$ticket->reviewer ,
- 'change_field' =>'' ,
- ];
- InvoiceInfo::create($info);
- }
- protected function checkPay($data){
- $payinfo = Pay::where('payNo',$data['payNo'])->findOrEmpty();
- if($payinfo->isEmpty()) return;
- if($payinfo->is_comon!=1)return;
- $this->CheckComonOrder($payinfo);
-
- }
- public function CheckComonOrder($payinfo){
- if($payinfo->status==3||$payinfo->status==4 ){
- PayInfo::alias('a')
- ->leftJoin('ComonOrder b','a.cgdNo=b.cgdNo')
- ->where(['payNo'=>$payinfo->payNo,'is_del'=>0,'a.status'=>0])
- ->update(['b.status'=>0]);
- }else{
- if($payinfo->inv_status==3 &&$payinfo->pay_status==3){
- PayInfo::alias('a')
- ->leftJoin('ComonOrder b','a.cgdNo=b.cgdNo')
- ->where(['payNo'=>$payinfo->payNo,'is_del'=>0,'a.status'=>1])
- ->update(["b.status"=>2]);
- }elseif($payinfo->inv_status!=3|| $payinfo->pay_status!=3){
- PayInfo::alias('a')
- ->leftJoin('ComonOrder b','a.cgdNo=b.cgdNo')
- ->where(['payNo'=>$payinfo->payNo,'is_del'=>0,'a.status'=>1])
- ->update(['b.status'=>1]);
- }
- }
- }
- }
|