setName('downredinvres') ->setDescription('the downredinvres command'); } protected function execute(Input $input, Output $output) { $GetOrderInfoAndInvoiceInfo= Cache::store("redis")->get("downredinvres"); if($GetOrderInfoAndInvoiceInfo==0) Cache::store("redis")->set("downredinvres",1,180); Db::startTrans(); $date= date("Y-m-d H:i:s"); $row =Db::name("invoice_red")->where(["status"=>1,"is_del"=>0])->where("updatetime","<=",date("Y-m-d H:i:s")) ->lock(true)->findOrEmpty(); if(empty($row)) { Db::rollback();return; } try{ $data=["updatetime"=>date("Y-m-d H:i:s",time()+3600)]; $opendatetime =date("Ymd",strtotime($row['addtime'])); $ebddatetime =date("Ymd",strtotime("+2 days",strtotime($row['addtime']))); $invoice=Config::get("invoice"); $Tax =new \TaxInvoice($invoice['appKey'],$invoice['appSecret'],$invoice['entCode']); $pch= randomkeys(26).date("YmdHis"); $result=$Tax->DownloadRedInvoiceApplicationResult($row['SQBSCQQPCH'],$row['XHFSBH'],$row['FPLXDM'],$opendatetime,$opendatetime); var_dump($result); if(isset($result['ZTDM']) && $result['ZTDM']=='060000'){ if(isset($result['HZSQDXZZXX']) && !empty($result['HZSQDXZZXX'])){ foreach ($result['HZSQDXZZXX'] as $item){ $resultChild=$item['HZSQDXZTXX']; if($resultChild['ZTDM']=='060000'){ $data['status']=2; $data['XXBBH']=$resultChild['XXBBH']; $data['remark']=$resultChild['ZTXX']; }else{ $data['status']=1; $data['XXBBH']=$resultChild['XXBBH']; $data['remark']=$resultChild['ZTXX']; } $where=["YFPDM"=>$resultChild['YFPDM'],"YFPHM"=>$resultChild['YFPHM'],"status"=>1]; $row= Db::name("invoice_red")->where($where)->update($data); if($row && $data['status']==2 ){ $this->AddRed($resultChild['YFPDM'],$resultChild['YFPHM']); } } } } Db::commit(); $output->writeln("[$date] ".$row['invRed'].'发票申请表获取成功'); }catch (\Exception $e){ Db::rollback(); $output->writeln("[$date] ".$row['invRed'].$e->getMessage()); } } public function AddRed($fpdm,$fphm){ $cod=["YFPDM"=>$fpdm,"YFPHM"=>$fphm,"status"=>2,"is_del"=>0]; $red=Db::name("invoice_red")->where($cod)->findOrEmpty(); if(empty($red))throw new \Exception("未找到发票红冲申请信息"); $where=["invNo"=>$red["invNo"],"type"=>0,"status"=>1]; $ticket =Db::name("invoice_ticket")->where($where)->findOrEmpty(); $invinfo = Db::name("invoice_pool")->where(["invNo"=>$red['invNo'],"is_del"=>0,"status"=>4])->findOrEmpty(); if(empty($ticket) || empty($invinfo)){ Db::name("invoice_red")->where($red)->update(["status"=>6,"updatetime"=>date("Y-m-d H:i:s"),"remark"=>"申请成功,原票信息本地未找到"]); Db::name("invoice_return")->where(["returnCode"=>$red['returnCode']])->update(["status"=>4,"updatetime"=>date("Y-m-d H:i:s"),"remark"=>"申请成功,原票信息本地未找到"]); return ; } $data=[ "invNo"=>$red['invRed'], "KPLX"=>"1", "XHFSBH"=>$ticket['seller_id'], "XHFMC"=>$ticket['seller_title'], "XHFDZ"=>$ticket['seller_addr'], "XHFDH"=>$ticket['seller_mobile'], "XHFYH"=>$ticket['seller_bank'], "XHFZH"=>$ticket['seller_bankNo'], "GMFBM"=>"", "GMFSBH"=>$ticket['buyer_id'], "GMFMC"=>$ticket['buyer_title'], "GMFDZ"=>$ticket['buyer_addr'], "GMFDH"=>$ticket['buyer_mobile'], "GMFYH"=>$ticket['buyer_bank'], "GMFZH"=>$ticket['buyer_bankNo'], "GMFLX"=>$invinfo['company_type']??'01', "GMFSJH"=>"", "GMFDZYX"=>'', "KPR"=>$ticket['issuer'], "SKR"=>$ticket['reciver'], "FHR"=>$ticket['reviewer'], "QDBZ"=>"0", "YFPDM"=>$red['YFPDM'], "YFPHM"=>$red['YFPHM'], // "YFPLX"=>$red['FPLXDM'], // "YFPKPRQ"=>date("Y-m-d",strtotime($red['YFPKPRQ'])), // "CHYY"=>$red['red_reason'], "YFPLX"=>$red['FPLXDM'] == '004' ||$red['FPLXDM'] =='028'||$red['red_reason']=='' ?'':$red['FPLXDM'], "YFPKPRQ"=>$red['FPLXDM'] == '004' ||$red['FPLXDM'] =='028'||$red['red_reason']=='' ? '':date("Y-m-d",strtotime($red['YFPKPRQ'])), "CHYY"=>$red['FPLXDM'] == '004' ||$red['FPLXDM'] =='028' ? '':$red['red_reason'], "TSCHBZ"=>"0", "JSHJ"=>"-".$ticket['inv_total'], "HJJE"=>$red['HJJE'], "HJSE"=>$red['HJSE'], "BZ"=> $red['FPLXDM'] == '004' || $red['FPLXDM'] =='028'?"开具红字增值税专用发票信息表编号{$red['XXBBH']}":"对应正数发票代码:{$red['YFPDM']} 号码:{$red['YFPHM']}", "DDMXXX"=>$red['DDMXXX'], "FPLXDM"=>$red['FPLXDM'], "DDQQPCH"=>"", "DDQQLSH"=>randomkeys(26).date("YmdHis"), "status"=>"0", "result"=>"", "addtime"=>date("Y-m-d H:i:s"), "updatetime"=>date("Y-m-d H:i:s") ]; $invoice=Db::name("invoice_interface")->insert($data); if($invoice==false){ throw new \Exception("红冲提交失败"); } Db::name("invoice_red")->where($red)->update(["status"=>3,"updatetime"=>date("Y-m-d H:i:s"),"remark"=>"红冲开票申请已提交待开票"]); } }