downredinvres.php 5.8 KB

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