PayInvoice.php 4.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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 static function onAfterInsert(Model $model) : void{
  41. if ($model->invType==4){
  42. $ticket= InvoiceInfo::where("payNo",$model->payNo)->findOrEmpty();
  43. if (!$ticket->isEmpty() && !empty($ticket->item_list)){
  44. (new InvoiceItem)->saveAll(array_map(function ($item)use($model) {
  45. return [
  46. 'invoiceCode'=>$model->hpNo,
  47. 'order_type'=>2,
  48. 'good_name'=>$item['name'],
  49. 'unit'=>$item['unit'],
  50. 'num'=>$item['quantity'],
  51. 'unit_price'=>$item['unit_price'],
  52. 'amount'=>$item['amount'],
  53. 'tax_amount'=>$item['tax'],
  54. 'tax'=>$item['tax_rate'],
  55. 'cat_code'=>$item['license_plate_number'],
  56. 'total_amount'=>bcadd($item['amount'],$item['tax'],2),
  57. 'balance_amount'=>bcadd($item['amount'],$item['tax'],2),
  58. ];
  59. },$ticket->item_list));
  60. $ticket->hpNo= $model->hpNo;
  61. $ticket->save();
  62. }
  63. }
  64. }
  65. public static function onAfterUpdate(Model $model) : void{
  66. if ($model->invType==4){
  67. $change = $model->getChangedData();
  68. if (isset($change['status'])){
  69. if($change['status']==4){
  70. $itemid= InvoiceItem::where(['invoiceCode'=>$model->hpNo,'status'=>[1,2]])->column('id');
  71. if(!empty($itemid)){
  72. $invo= InvoiceOrder::whereIn('itemId',$itemid)->where(['status'=>[1,2]])->column('code,balance_amount,total_amount');
  73. if(!empty($invo)){
  74. foreach ($invo as $key=>$val){
  75. InvoiceOrder::orderFinish($val['code'],bcsub($val['total_amount'],$val['balance_amount'],2));
  76. }
  77. }
  78. }
  79. }
  80. if($change['status']==9){
  81. InvoiceItem::refund($model->hpNo);
  82. }
  83. }
  84. }
  85. }
  86. }