GetOrderInfoAndInvoiceInfo.php 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  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 think\facade\Cache;
  10. use think\facade\Config;
  11. use think\facade\Db;
  12. class GetOrderInfoAndInvoiceInfo extends Command
  13. {
  14. protected function configure()
  15. {
  16. // 指令配置
  17. $this->setName('getorderinfoandinvoiceinfo')
  18. ->setDescription('the getorderinfoandinvoiceinfo command');
  19. }
  20. protected function execute(Input $input, Output $output)
  21. {
  22. // 指令输出
  23. $GetOrderInfoAndInvoiceInfo= Cache::store("redis")->get("GetOrderInfoAndInvoiceInfo");
  24. if($GetOrderInfoAndInvoiceInfo==0) Cache::store("redis")->set("GetOrderInfoAndInvoiceInfo",1,180);
  25. $data = $this->GetData();
  26. foreach ($data as $value){
  27. if($value['status']==1){
  28. $res=$this->GetOrderInfo($value);
  29. }
  30. if($value['status']==2){
  31. if($value['KPLX']==1){
  32. $red=Db::name("invoice_red")->where(["invRed"=>$value['invNo'],"is_del"=>0])->find();
  33. if($red){
  34. $invNo=$red['invNo'];
  35. Db::name("invoice_return")->where(["returnCode"=>$red['returnCode'],"status"=>1])->update
  36. (["status"=>2,"updatetime"=>date("Y-m-d H:i:s")]);
  37. Db::name("invoice_red")->where(["invRed"=>$value['invNo'],"is_del"=>0])->update(["status"=>4,"updatetime"=>date("Y-m-d H:i:s")]);
  38. Db::name("invoice_pool")->where(["invNo"=>$red['invNo'],"is_del"=>0])->update(["status"=>6,"updatetime"=>date("Y-m-d H:i:s")]);
  39. }
  40. }else{
  41. $invNo=$value['invNo'];
  42. $status=3;
  43. // if($value['FPLXDM']=='026'||$value['FPLXDM']=='028') $status=8; else $status=2;
  44. $rmark=$this->updateQRd($invNo);
  45. if($rmark==''){
  46. Db::name("invoice_pool")->where(["invNo"=>$value['invNo'],"is_del"=>0])->update
  47. (["status"=>$status,"seller_check"=>1,"buyer_check"=>1,"updatetime"=>date("Y-m-d H:i:s")]);
  48. }else{
  49. Db::name("invoice_pool")->where(["invNo"=>$value['invNo'],"is_del"=>0])->update(["status"=>5,"remark"=>$rmark,"updatetime"=>date("Y-m-d H:i:s")]);
  50. }
  51. }
  52. $this->insertTicket($value['result'],$invNo);
  53. Db::name("invoice_interface")->where($value)->update(["is_check"=>1,"updatetime"=>date("Y-m-d H:i:s")]);
  54. }
  55. if($value['status']==3 || $value['status']==4){
  56. if($value['KPLX']==1){
  57. Db::name("invoice_red")->where(["invRed"=>$value['invNo'],"is_del"=>0])->update(["status"=>6,"updatetime"=>date("Y-m-d H:i:s")]);
  58. }else{
  59. Db::name("invoice_pool")->where(["invNo"=>$value['invNo'],"is_del"=>0])->update(["status"=>5,"updatetime"=>date("Y-m-d H:i:s")]);
  60. }
  61. Db::name("invoice_interface")->where($value)->update(["is_check"=>1,"updatetime"=>date("Y-m-d H:i:s")]);
  62. }
  63. }
  64. Cache::store("redis")->set("GetOrderInfoAndInvoiceInfo",0);
  65. $output->writeln('getorderinfoandinvoiceinfo');
  66. }
  67. protected function GetData(){
  68. $list=Db::name("invoice_interface")->where([["status",">=",1],["is_check","=",0],["updatetime","<=",date("Y-m-d
  69. H:i:s")]])->cursor();
  70. foreach ($list as $value){
  71. yield $value;
  72. }
  73. }
  74. protected function GetOrderInfo($order){
  75. $invoice=Config::get("invoice");
  76. $tax =new \TaxInvoice($invoice['appKey'],$invoice['appSecret'],'911101050628285328');
  77. $result=$tax->GetOrderInfoAndInvoiceInfo($order['XHFSBH'],$order['DDQQLSH']);
  78. if($result['ZTDM'] && $result['ZTDM']=='000000'){
  79. foreach ($result['DDFPZXX'] as $value){
  80. $zt=$value['DDFPXX']['DDZT'];
  81. $ztxx=$value['DDFPXX']['DDZTXX'];
  82. if($zt=='030000'){
  83. $data= $value['DDFPXX'];
  84. $data['itemlist'] = $value['DDMXXX'];
  85. if($data['KPLX']==0)$this->updateGood($value['DDMXXX'],$order['invNo']);
  86. $exit= json_encode($data,JSON_UNESCAPED_UNICODE);
  87. Db::name("invoice_interface")->where(["DDQQLSH"=>$value['DDFPXX']['DDQQLSH']])->update(["status"=>2,"result"=>$exit,"remark"=>$ztxx,"updatetime"=>date("Y-m-d H:i:s")]);
  88. }
  89. if($zt=='031999' ||$zt=='032997'||$zt=='032999'||$zt=='032998' ){
  90. Db::name("invoice_interface")->where(["DDQQLSH"=>$value['DDFPXX']['DDQQLSH']])->update
  91. (["status"=>4,"is_check"=>1,"remark"=>$ztxx,"updatetime"=>date("Y-m-d H:i:s")]);
  92. }
  93. if($zt=='031000' ||$zt=='032000'){
  94. Db::name("invoice_interface")->where(["DDQQLSH"=>$value['DDFPXX']['DDQQLSH']])->update(["remark"=>$ztxx,"updatetime"=>date("Y-m-d H:i:s")]);
  95. // Db::name("invoice_red")->where(["DDQQLSH"=>$value['DDFPXX']['DDQQLSH']])->update(["remark"=>$ztxx,"updatetime"=>date("Y-m-d H:i:s")]);
  96. }
  97. }
  98. }
  99. }
  100. protected function insertTicket($data,$invNo=''){
  101. $invinfo =Db::name("invoice_ticket")->where(["invNo"=>$invNo,'is_del'=>0])->findOrEmpty();
  102. $json= json_decode($data,true);
  103. if(is_array($json)&&!empty($json)){
  104. if(empty($invinfo)){
  105. $invinfo["invNo"]=$invNo;
  106. $invinfo["status"]=1;
  107. $invinfo["addtime"]=date("Y-m-d H:i:s");
  108. }
  109. $invinfo["inv_type"]=$json['FPLXDM'];
  110. $invinfo["type"]=$json['KPLX'];
  111. $invinfo["inv_code"]=$json['FPDM'];
  112. $invinfo["inv_number"]=$json['FPHM'];
  113. $invinfo["inv_total"]=$json['JSHJ'];
  114. $invinfo["inv_subtotal"]=$json['HJJE'];
  115. $invinfo["open_date"]=$json['KPRQ'];
  116. $invinfo["seller_id"]=$json['XHFSBH'];
  117. $invinfo["seller_title"]=$json['XHFMC'];
  118. $invinfo["seller_addr"]=$json['XHFDZ'];
  119. $invinfo["seller_mobile"]=$json['XHFDH'];
  120. $invinfo["seller_bank"]=$json['XHFYH'];
  121. $invinfo["seller_bankNo"]=$json['XHFZH'];
  122. $invinfo["buyer_id"]=$json['GMFSBH'];
  123. $invinfo["buyer_title"]=$json['GMFMC'];
  124. $invinfo["buyer_addr"]=$json['GMFDZ'];
  125. $invinfo["buyer_mobile"]=$json['GMFDH'];
  126. $invinfo["buyer_bank"]=$json['GMFYH'];
  127. $invinfo["buyer_bankNo"]=$json['GMFZH'];
  128. $invinfo["tax_fee"]=$json['HJSE'];
  129. $invinfo["remark"]=$json['BZ']??$json['CHBZ'];
  130. $invinfo["issuer"]=$json['KPR'];
  131. $invinfo["reciver"]=$json['SKR'];
  132. $invinfo["reviewer"]=$json['FHR'];
  133. $invinfo["check_code"]=$json['JYM'];
  134. $invinfo["pdfstream"]=$json['PDFZJL']??"";
  135. $invinfo["item"]=json_encode($json['itemlist'],JSON_UNESCAPED_UNICODE);
  136. Db::name("invoice_ticket")->save($invinfo);
  137. }
  138. }
  139. private function updateGood($data,$invNo){
  140. if(empty($data))return;
  141. foreach ($data as $value){
  142. if($value['ZXBM']!=''){
  143. $invinfo =Db::name("invoice_good")->where(["invNo"=>$invNo,"id"=>$value['ZXBM'],'is_del'=>0])->findOrEmpty();
  144. if(empty($invinfo)) continue;
  145. $invinfo['goodPrice'] = $value['DJ'];
  146. $invinfo['totalPrice'] = $value['JE'];
  147. $invinfo['taxPrice'] = $value['SE'];
  148. Db::name("invoice_good")->save($invinfo);
  149. }
  150. }
  151. }
  152. private function updateQRd($invNo){
  153. $qrdArr=Db::name("assoc")->where(["viceCode"=>$invNo,"is_del"=>0])->column("id,orderCode,cancel_fee");
  154. if(!empty($qrdArr)){
  155. foreach ($qrdArr as $value){
  156. $qrdinfo =Db::name("qrd_info")->where(["sequenceNo"=>$value['orderCode']])->find();
  157. if($qrdinfo==false){
  158. return "确认单信息未找到";
  159. }
  160. if($qrdinfo['inv_fee']<$value['cancel_fee']){
  161. return "确认单信息开票金额不足";
  162. }
  163. $update =[
  164. "ainv_fee"=>$qrdinfo['ainv_fee']+$value['cancel_fee'],
  165. "inv_fee"=>$qrdinfo['inv_fee']-$value['cancel_fee'],
  166. "invtime"=>date("Y-m-d H:i:s"),
  167. "inv_status"=>$qrdinfo['winv_fee']==0 &&($qrdinfo['inv_fee']-$value['cancel_fee'])==0 ? 3 : 2,
  168. "updatetime"=>date("Y-m-d H:i:s"),
  169. ];
  170. $qrdup = Db::name("qrd_info")->where($qrdinfo)->update($update);
  171. if($qrdup==false){
  172. return "确认单信息更新失败";
  173. }
  174. $assoc=["status"=>2,"assoc_time"=>date("Y-m-d H:i:s"),"updatetime"=>date("Y-m-d H:i:s")];
  175. $assocup =Db::name("assoc")->where($value)->update($assoc);
  176. if($assocup==false){
  177. return "确认单关联信息更新失败";
  178. }
  179. }
  180. }
  181. return '';
  182. }
  183. }