downredinvres.php 6.6 KB

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