downredinvres.php 7.0 KB

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