GenerrateInvoice.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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\console\input\Argument;
  7. use think\console\input\Option;
  8. use think\console\Output;
  9. use TaxInvoice;
  10. use think\facade\Cache;
  11. use think\facade\Config;use think\facade\Db;
  12. class GenerrateInvoice extends Command
  13. {
  14. protected function configure()
  15. {
  16. // 指令配置
  17. $this->setName('generrateinvoice')
  18. ->setDescription('the generrateinvoice command');
  19. }
  20. protected function execute(Input $input, Output $output)
  21. {
  22. // 指令输出
  23. try {
  24. $generrateinvoice= Cache::store("redis")->get("generrateinvoice");
  25. if($generrateinvoice==0) Cache::store("redis")->set("generrateinvoiceo",1,180);
  26. $data =$this->GetAll();
  27. if(empty($data)){
  28. return '暂无数据处理';
  29. }
  30. $seller_code =$this->isTicket();
  31. $fail=[];
  32. $interface =[];
  33. foreach ($data as $value){
  34. if(!in_array($value['XHFSBH'],$seller_code)){
  35. Db::name("invoice_interface")->where(['invNo'=>$value['invNo']])->update(["status"=>3,"remark"=>"不支持金税","updatetime"=>date("Y-m-d H:i:s")]);
  36. $fail[]=$value['invNo'];
  37. }
  38. $fplxdm= $value['FPLXDM'];
  39. if (!key_exists($value['XHFSBH']."-".$value['FPLXDM'],$interface)){
  40. $pch =randomkeys(26).date("YmdHis");
  41. $interface[$value['XHFSBH']."-".$value['FPLXDM']]['DDZXX']=[];
  42. $interface[$value['XHFSBH']."-".$value['FPLXDM']]['DDPCXX']=['DDQQPCH'=>$pch,'KPFS'=>"0",'NSRSBH'=>$value['XHFSBH'],"FPLXDM"=>$value['FPLXDM']];
  43. }else{
  44. $pch =$interface[$value['XHFSBH']."-".$value['FPLXDM']]['DDPCXX']['DDQQPCH'];
  45. }
  46. Db::name("invoice_interface")->where(['invNo'=>$value['invNo']])->update(['DDQQPCH'=>$pch,'DDQQLSH'=>$value['DDQQLSH'],"updatetime"=>date("Y-m-d H:i:s")]);
  47. $temp=[];
  48. unset($value['invNo']);
  49. unset($value['KPFS']);
  50. unset($value['FPLXDM']);
  51. unset($value['DDQQPCH']);
  52. // unset($value['YFPDM']);
  53. // unset($value['YFPHM']);
  54. // unset($value['YFPLX']);
  55. // unset($value['YFPKPRQ']);
  56. // unset($value['CHYY']);
  57. // unset($value['TSCHBZ']);
  58. // unset($value['BZ']);
  59. // unset($value['GMFSJH']);
  60. // unset($value['GMFBM']);
  61. $temp["DDMXXX"]=$value['DDMXXX'];
  62. unset($value['DDMXXX']);
  63. $temp["DDTXX"]=$value;
  64. $interface[$value['XHFSBH']."-".$fplxdm]['DDZXX'][]=$temp;
  65. }
  66. $this->CheckInvoice($interface);
  67. }catch (\Exception $e){
  68. Cache::store("redis")->set("generrateinvoice",0);
  69. return $e->getMessage();
  70. }
  71. Cache::store("redis")->set("generrateinvoice",0);
  72. $output->writeln('generrateinvoice');
  73. }
  74. protected function GetAll(){
  75. $list =Db::name("invoice_interface")->json(["DDMXXX"])->withoutField("id,status,is_check,result,remark,addtime,updatetime")->limit(1)->where(["status"=>0])->select();
  76. return $list;
  77. }
  78. protected function isTicket(){
  79. $company =Db::name("company_info")->where(["out_ticket"=>1,'is_del'=>0])->column("company_license");
  80. return $company;
  81. }
  82. protected function CheckInvoice($data){
  83. if(empty($data)){
  84. return '';
  85. }
  86. $invoice=Config::get("invoice");
  87. $tax =new TaxInvoice($invoice['appKey'],$invoice['appSecret'],$invoice['entCode']);
  88. foreach ($data AS $value){
  89. $result = $tax->GenerateInvoice($OrderBatchArr=$value['DDPCXX'],$OrderInvList=$value['DDZXX']);
  90. if(isset($result['ZTDM'])&&$result['ZTDM']=='010000'){
  91. Db::name("invoice_interface")->where(['DDQQPCH'=>$result['DDQQPCH']])->update(['status'=>1,
  92. "remark"=>$result['ZTXX'],"updatetime"=>date("Y-m-d H:i:s")]);
  93. Cache::push("DDQQPCH",$result['DDQQPCH']);
  94. }else{
  95. Db::name("invoice_interface")->where(['DDQQPCH'=>$value['DDPCXX']['DDQQPCH']])->update(['status'=>4,"remark"=>$result['ZTXX']??$result['message'],"updatetime"=>date("Y-m-d H:i:s")]);
  96. }
  97. }
  98. }
  99. }