downredinvres.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <?php
  2. declare (strict_types = 1);
  3. namespace app\admin\command;
  4. use think\console\Command;
  5. use think\console\Input;
  6. use think\facade\Config;
  7. use think\console\input\Argument;
  8. use think\console\input\Option;
  9. use think\console\Output;
  10. use think\facade\Cache;
  11. use think\facade\Db;
  12. class downredinvres extends Command
  13. {
  14. protected function configure()
  15. {
  16. // 指令配置
  17. $this->setName('downredinvres')
  18. ->setDescription('the downredinvres command');
  19. }
  20. protected function execute(Input $input, Output $output)
  21. {
  22. $GetOrderInfoAndInvoiceInfo= Cache::store("redis")->get("downredinvres");
  23. if($GetOrderInfoAndInvoiceInfo==0) Cache::store("redis")->set("downredinvres",1,180);
  24. Db::startTrans();
  25. $date= date("Y-m-d H:i:s");
  26. $row =Db::name("invoice_red")->where(["status"=>1,"is_del"=>0])->where("updatetime","<=",date("Y-m-d H:i:s"))
  27. ->lock(true)->findOrEmpty();
  28. if(empty($row)) {
  29. Db::rollback();return;
  30. }
  31. try{
  32. $data=["updatetime"=>date("Y-m-d H:i:s",time()+3600)];
  33. $opendatetime =date("Ymd",strtotime($row['addtime']));
  34. $ebddatetime =date("Ymd",strtotime("+2 days",strtotime($row['addtime'])));
  35. $invoice=Config::get("invoice");
  36. $Tax =new \TaxInvoice($invoice['appKey'],$invoice['appSecret'],$invoice['entCode']);
  37. $pch= randomkeys(26).date("YmdHis");
  38. $result=$Tax->DownloadRedInvoiceApplicationResult($row['SQBSCQQPCH'],$row['XHFSBH'],$row['FPLXDM'],$opendatetime,$opendatetime);
  39. var_dump($result);
  40. if(isset($result['ZTDM']) && $result['ZTDM']=='060000'){
  41. if(isset($result['HZSQDXZZXX']) && !empty($result['HZSQDXZZXX'])){
  42. foreach ($result['HZSQDXZZXX'] as $item){
  43. $resultChild=$item['HZSQDXZTXX'];
  44. if($resultChild['ZTDM']=='060000'){
  45. $data['status']=2;
  46. $data['XXBBH']=$resultChild['XXBBH'];
  47. $data['remark']=$resultChild['ZTXX'];
  48. }else{
  49. $data['status']=1;
  50. $data['XXBBH']=$resultChild['XXBBH'];
  51. $data['remark']=$resultChild['ZTXX'];
  52. }
  53. $where=["YFPDM"=>$resultChild['YFPDM'],"YFPHM"=>$resultChild['YFPHM'],"status"=>1];
  54. $row= Db::name("invoice_red")->where($where)->update($data);
  55. if($row && $data['status']==2 ){
  56. $this->AddRed($resultChild['YFPDM'],$resultChild['YFPHM']);
  57. }
  58. }
  59. }
  60. }
  61. Db::commit();
  62. $output->writeln("[$date] ".$row['invRed'].'发票申请表获取成功');
  63. }catch (\Exception $e){
  64. Db::rollback();
  65. $output->writeln("[$date] ".$row['invRed'].$e->getMessage());
  66. }
  67. }
  68. public function AddRed($fpdm,$fphm){
  69. $cod=["YFPDM"=>$fpdm,"YFPHM"=>$fphm,"status"=>2,"is_del"=>0];
  70. $red=Db::name("invoice_red")->where($cod)->findOrEmpty();
  71. if(empty($red))throw new \Exception("未找到发票红冲申请信息");
  72. $where=["invNo"=>$red["invNo"],"type"=>0,"status"=>1];
  73. $ticket =Db::name("invoice_ticket")->where($where)->findOrEmpty();
  74. $invinfo = Db::name("invoice_pool")->where(["invNo"=>$red['invNo'],"is_del"=>0,"status"=>4])->findOrEmpty();
  75. if(empty($ticket) || empty($invinfo)){
  76. Db::name("invoice_red")->where($red)->update(["status"=>6,"updatetime"=>date("Y-m-d H:i:s"),"remark"=>"申请成功,原票信息本地未找到"]);
  77. Db::name("invoice_return")->where(["returnCode"=>$red['returnCode']])->update(["status"=>4,"updatetime"=>date("Y-m-d H:i:s"),"remark"=>"申请成功,原票信息本地未找到"]);
  78. return ;
  79. }
  80. $data=[ "invNo"=>$red['invRed'],
  81. "KPLX"=>"1",
  82. "XHFSBH"=>$ticket['seller_id'],
  83. "XHFMC"=>$ticket['seller_title'],
  84. "XHFDZ"=>$ticket['seller_addr'],
  85. "XHFDH"=>$ticket['seller_mobile'],
  86. "XHFYH"=>$ticket['seller_bank'],
  87. "XHFZH"=>$ticket['seller_bankNo'],
  88. "GMFBM"=>"",
  89. "GMFSBH"=>$ticket['buyer_id'],
  90. "GMFMC"=>$ticket['buyer_title'],
  91. "GMFDZ"=>$ticket['buyer_addr'],
  92. "GMFDH"=>$ticket['buyer_mobile'],
  93. "GMFYH"=>$ticket['buyer_bank'],
  94. "GMFZH"=>$ticket['buyer_bankNo'],
  95. "GMFLX"=>$invinfo['company_type']??'01',
  96. "GMFSJH"=>"",
  97. "GMFDZYX"=>'',
  98. "KPR"=>$ticket['issuer'],
  99. "SKR"=>$ticket['reciver'],
  100. "FHR"=>$ticket['reviewer'],
  101. "QDBZ"=>"0",
  102. "YFPDM"=>$red['YFPDM'],
  103. "YFPHM"=>$red['YFPHM'],
  104. // "YFPLX"=>$red['FPLXDM'],
  105. // "YFPKPRQ"=>date("Y-m-d",strtotime($red['YFPKPRQ'])),
  106. // "CHYY"=>$red['red_reason'],
  107. "YFPLX"=>$red['FPLXDM'] == '004' ||$red['FPLXDM'] =='028'||$red['red_reason']=='' ?'':$red['FPLXDM'],
  108. "YFPKPRQ"=>$red['FPLXDM'] == '004' ||$red['FPLXDM'] =='028'||$red['red_reason']=='' ? '':date("Y-m-d",strtotime($red['YFPKPRQ'])),
  109. "CHYY"=>$red['FPLXDM'] == '004' ||$red['FPLXDM'] =='028' ? '':$red['red_reason'],
  110. "TSCHBZ"=>"0",
  111. "JSHJ"=>"-".$ticket['inv_total'],
  112. "HJJE"=>$red['HJJE'],
  113. "HJSE"=>$red['HJSE'],
  114. "BZ"=> $red['FPLXDM'] == '004' || $red['FPLXDM'] =='028'?"开具红字增值税专用发票信息表编号{$red['XXBBH']}":"对应正数发票代码:{$red['YFPDM']} 号码:{$red['YFPHM']}",
  115. "DDMXXX"=>$red['DDMXXX'],
  116. "FPLXDM"=>$red['FPLXDM'],
  117. "DDQQPCH"=>"",
  118. "DDQQLSH"=>randomkeys(26).date("YmdHis"),
  119. "status"=>"0",
  120. "result"=>"",
  121. "addtime"=>date("Y-m-d H:i:s"),
  122. "updatetime"=>date("Y-m-d H:i:s")
  123. ];
  124. $invoice=Db::name("invoice_interface")->insert($data);
  125. if($invoice==false){
  126. throw new \Exception("红冲提交失败");
  127. }
  128. Db::name("invoice_red")->where($red)->update(["status"=>3,"updatetime"=>date("Y-m-d H:i:s"),"remark"=>"红冲开票申请已提交待开票"]);
  129. }
  130. }