PayInvoice.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. namespace app\cxinv\model;
  3. use think\Model;
  4. class PayInvoice extends Base
  5. {
  6. //设置字段信息
  7. protected $schema = [
  8. 'id' =>'int',//
  9. 'payNo' =>'varchar',//对账编码
  10. 'hpNo' =>'varchar',//回票编号
  11. 'apply_id' =>'int',//申请人id
  12. 'apply_name' =>'varchar',//申请人名称
  13. 'invType' =>'tinyint',//发票申请类型 1 手工添加 2 ocr识别 3 金税扫描
  14. 'invoiceType' =>'varchar',//发票类型 special: 增值税专用发票normal: 增值税普通发票electronic: 增值税电子普通发票special_electronic: 增值税电子专用发票toll: 增值税电子普通发票(通行费)roll: 增值税普通发票(卷票),fully_digitalized_special_electronic:全电专用发票, fully_digitalized_normal_electronic:全电专用发票
  15. 'invName' =>'varchar',//
  16. 'inv_img' =>'varchar',//发票图片
  17. 'inv_fee' =>'decimal',//回票金额
  18. 'inv_subtotal_amount' =>'decimal',//票面税前金额
  19. 'inv_amount' =>'decimal',//票面合计金额
  20. 'invStatus' =>'tinyint',//[0=>"待验证","1"=>'正常',"2"=>'已作废',"3"=>'已红冲']
  21. 'status' =>'tinyint',// 1待系统验证 2 买方公司审核 3带买方公司认证 4 认证成功 5验证失败 6买方审核驳回 7 认证失败 8 回票流程终止 9 验证超次数 10 回票已退11 待关联订单 12 订单关联完毕待财务审核 13 订单关联完毕财务驳回
  22. 'remark' =>'varchar',//
  23. 'exam_remark' =>'varchar',//审核备注
  24. 'check_remark' =>'varchar',//发票验证备注
  25. 'tag_id' =>'int',//标签id
  26. 'check_time' =>'varchar',//回票时间
  27. 'open_time' =>'varchar',//开票时间
  28. 'invoiceNumber' =>'varchar',//发票号码
  29. 'seller_check' =>'tinyint',//发票卖方数据验证 0 待验证 1数据一致2数据不一致
  30. 'buyer_check' =>'tinyint',//发票买方数据验证0 待验证 1数据一致2数据不一致
  31. 'invoiceCode' =>'varchar',//发票代码
  32. 'checkNumber' =>'varchar',//效验码
  33. 'checkApi' =>'tinyint',//0 未确认 1 金税接口 2 华为云
  34. 'is_del' =>'tinyint',//是否删除 0 否1是
  35. 'addtime' =>'datetime',//
  36. 'updatetime' =>'datetime',//
  37. ];
  38. protected $createTime='addtime';
  39. protected $updateTime='updatetime';
  40. public function Items(){
  41. return $this->hasMany(InvoiceItem::class,'invoiceCode','hpNo');
  42. }
  43. public static function onAfterInsert(Model $model) : void{
  44. if ($model->invType==4){
  45. $ticket= InvoiceInfo::where("payNo",$model->payNo)->findOrEmpty();
  46. if (!$ticket->isEmpty() && !empty($ticket->item_list)){
  47. (new InvoiceItem)->saveAll(array_map(function ($item)use($model) {
  48. return [
  49. 'invoiceCode'=>$model->hpNo,
  50. 'order_type'=>2,
  51. 'good_name'=>$item['name'],
  52. 'unit'=>$item['unit'],
  53. 'num'=>$item['quantity'],
  54. 'unit_price'=>$item['unit_price'],
  55. 'amount'=>$item['amount'],
  56. 'tax_amount'=>$item['tax'],
  57. 'tax'=>$item['tax_rate'],
  58. 'cat_code'=>$item['license_plate_number'],
  59. 'total_amount'=>bcadd($item['amount'],$item['tax'],2),
  60. 'balance_amount'=>bcadd($item['amount'],$item['tax'],2),
  61. ];
  62. },$ticket->item_list));
  63. $ticket->hpNo= $model->hpNo;
  64. $ticket->save();
  65. }
  66. }
  67. }
  68. public static function onAfterUpdate(Model $model) : void{
  69. if ($model->invType==4){
  70. $change = $model->getChangedData();
  71. if (isset($change['status'])){
  72. $invocie = Invoice::where("InvCode",$model->payNo)->findOrEmpty();
  73. if($change['status']==4){
  74. if (!$invocie->isEmpty()){
  75. $invocie->status=4;
  76. $invocie->save();
  77. }
  78. $itemid= InvoiceItem::where(['invoiceCode'=>$model->hpNo,'status'=>[1,2]])->column('id');
  79. if(!empty($itemid)){
  80. $invo= InvoiceOrder::whereIn('itemId',$itemid)->where(['status'=>[1,2]])->column('code,balance_amount,total_amount');
  81. if(!empty($invo)){
  82. foreach ($invo as $key=>$val){
  83. InvoiceOrder::orderFinish($val['code'],bcsub($val['total_amount'],$val['balance_amount'],2));
  84. }
  85. }
  86. }
  87. }
  88. if($change['status']==9){
  89. InvoiceItem::refund($model->hpNo);
  90. if (!$invocie->isEmpty()){
  91. $invocie->status=2;
  92. $invocie->save();
  93. }
  94. }
  95. if (in_array($change['status'],[5,6,7,8,13])){
  96. InvoiceItem::rmInvoice($model->hpNo);
  97. if (!$invocie->isEmpty()){
  98. $invocie->status=2;
  99. $invocie->save();
  100. }
  101. }
  102. }
  103. }
  104. }
  105. }