wugg 6 mesi fa
parent
commit
7bba8405f2

+ 48 - 166
app/cxinv/controller/Invoice.php

@@ -42,7 +42,7 @@ class Invoice extends Base{
         if (!is_array($param['list'])) return error("请传入正确参数");
         $valid = Validate::rule([
             "invoice_code|发票代码"=>"require|max:255",
-            "invoice_number|发票号码"=>"require|max:255",
+            "invoice_number|发票号码"=>"require|max:255|unique:app\cxinv\model\Invoice,invoice_number",
             "invoice_type|发票类型"=>"require|in:".implode(",",array_keys(\app\cxinv\model\Invoice::$invoiceType)),
             "invoice_total|发票税前金额"=>"float",
             "open_date|开票日期"=>"require|date|dateFormat:Y-m-d",
@@ -51,13 +51,9 @@ class Invoice extends Base{
             ]);
         $number= array_column($param['list'],'invoice_number');
         if (count($number)!=count(array_unique($number))) return error("发票号码重复");
-        $invoice = $this->model
-        ->whereIn("invoice_number", $number)
-        ->whereIn("status",[0,1,2,3,4])->column("invoice_number");
         foreach ($param['list'] as $k=>$v){
             if(!$valid->check($v)) return error($valid->getError());
             validate_invoice_info($v,$return);
-            if(!empty( $invoice) && in_array($v['invoice_number'],$invoice)) return error($v['invoice_number'].":发票已存在");
             if($return['code']!=0) return error($v['invoice_number'].":".$return['message']);
             $param['list'][$k]['InvCode']=makeNo("FP",str_pad($k,4,"0",STR_PAD_RIGHT));
             $param['list'][$k]['apply_id']=$this->uid;
@@ -66,6 +62,7 @@ class Invoice extends Base{
         $this->model->saveAll($param['list']);
         return success("添加成功");
     }
+    //0待验证 1待确认公司信息 2 待关联数据 3 关联中 4 关联完成;
     public function save(){
         $param= $this->request->param([
             "id"=>"",
@@ -80,9 +77,9 @@ class Invoice extends Base{
             "status"=>0,
             "supplierNo"=>""],"post","trim");
         $valide=Validate::rule([
-            "id|票编号id"=>"require|max:255",
+            "id|票编号id"=>"require|max:255",
             "invoice_code|发票代码"=>"requireIf:status,0|max:255",
-            "invoice_number|发票号码"=>"requireIf:status,0|max:255",
+            "invoice_number|发票号码"=>"requireIf:status,0|max:255|unique:app\cxinv\model\Invoice,invoice_number",
             "invoice_type|发票类型"=>"requireIf:status,0|in:".implode(",",array_keys(\app\cxinv\model\Invoice::$invoiceType)),
             "invoice_total|发票税前金额"=>"float",
             "open_date|开票日期"=>"requireIf:status,0|date|dateFormat:Y-m-d",
@@ -92,10 +89,10 @@ class Invoice extends Base{
             "supplierNo|供应商公司"=>"requireIf:status,1|max:255"
         ]);
         $invoice=$this->model->where("InvCode",$param['InvCode'])->findOrEmpty();
-        if($invoice->isEmpty()) return error("票编号不存在");
+        if($invoice->isEmpty()) return error("票编号不存在");
         $param['status'] = $invoice->status;
         if(!$valide->check($param)) return error($valide->getError());
-        if ($invoice->status>1) return error("回票已关联订单,无法修改");
+        if ($invoice->status>1) return error("发票当前状态无法修改");
         if ($param['status']==0){
             $invoice->invoice_code=$param['invoice_code'];
             $invoice->invoice_number=$param['invoice_number'];
@@ -104,67 +101,62 @@ class Invoice extends Base{
             $invoice->open_date=$param['open_date'];
             $invoice->invoice_subtotal=$param['invoice_subtotal'];
             $invoice->check_code=$param['check_code'];
-            $bool = $this->model
-            ->whereIn('invoice_number', $param['invoice_number'])
-            ->whereIn('status',[0,1,2,3,4])
-            ->where('id', '<>', $invoice->id)
-            ->findOrEmpty();
-            if(!$bool->isEmpty()) return error("发票号码与{$bool->InvCode}重复");
         }
         if($param['status']==1){
             $invoice->companyNo=$param['companyNo'];
             $invoice->companyName=Business::where("companyNo",$param['companyNo'])->value("company","");
             $invoice->supplierNo=$param['supplierNo'];
             $invoice->supplierName=Headquarters::where("code",$param['supplierNo'])->value("name","");
+            $invoice->status=2;
         }
         $invoice->save();
         return success("保存成功");
     }
-    //0待验证1待关联订单2待买方公司审核3待买方公司认证4 认证完成 5 发票取消 6 买方审核驳回 7 认证失败 8 验票失败 9 退票成功
-    public function status(){
-        $param= $this->request->param(["InvCode"=>"","status"=>"","remark"=>"",'ItemRemark'=>[]],"post","trim");
-        $valide=Validate::rule([
-            "InvCode|回票编号"=>"require|max:255",
-            "status|状态"=>"require|in:3,4,5,6,7,8"
-        ]);
-        if(!$valide->check($param)) return error($valide->getError());
-        $info=$this->model->where("InvCode",$param['InvCode'])->findOrEmpty();
-        if($info->isEmpty()) return error("回票编号不存在");
-        if($param['status']==3) $info->check_time=date('Y-m-d H:i:s');
-        if(in_array($info['invoice_type'],['normal','electronic','toll','roll']) && $param['status']==3){
-          $param['status']=4; //普票无需认证
-        }
-        $info->status=$param['status'];
-        $info->remark=$param['remark'];
-        $this->model->startTrans();
-        try{
-            $save=$info->save();
-            if(!$save) throw new \Exception("修改失败");
-            if($param['status']==3){
-                if (!empty($param['ItemRemark'])){
-                     (new InvoiceOrder)->saveAll($param['ItemRemark']);
-                    };
-            }
-             if(in_array($param['status'],[5,6,7])){
-                    InvoiceItem::rmInvoice($param['hpNo']);
-              }
-            $this->model->commit();
-        }catch (\Exception $e){
-            $this->model->rollback();
-            return error($e->getMessage());
-        }
-        return success("修改成功");
-    }
+    //0待验证 1待关联订单 2订单部分关联 3订单完全关联
+//    public function status(){
+//        $param= $this->request->param(["InvCode"=>"","status"=>"","remark"=>"",'ItemRemark'=>[]],"post","trim");
+//        $valide=Validate::rule([
+//            "InvCode|回票编号"=>"require|max:255",
+//            "status|状态"=>"require|in:3,4,5,6,7,8"
+//        ]);
+//        if(!$valide->check($param)) return error($valide->getError());
+//        $info=$this->model->where("InvCode",$param['InvCode'])->findOrEmpty();
+//        if($info->isEmpty()) return error("回票编号不存在");
+//        if($param['status']==3) $info->check_time=date('Y-m-d H:i:s');
+//        if(in_array($info['invoice_type'],['normal','electronic','toll','roll']) && $param['status']==3){
+//          $param['status']=4; //普票无需认证
+//        }
+//        $info->status=$param['status'];
+//        $info->remark=$param['remark'];
+//        $this->model->startTrans();
+//        try{
+//            $save=$info->save();
+//            if(!$save) throw new \Exception("修改失败");
+//            if($param['status']==3){
+//                if (!empty($param['ItemRemark'])){
+//                     (new InvoiceOrder)->saveAll($param['ItemRemark']);
+//                    };
+//            }
+//             if(in_array($param['status'],[5,6,7])){
+//                    InvoiceItem::rmInvoice($param['hpNo']);
+//              }
+//            $this->model->commit();
+//        }catch (\Exception $e){
+//            $this->model->rollback();
+//            return error($e->getMessage());
+//        }
+//        return success("修改成功");
+//    }
 
     public function delete(){
         $param= $this->request->param(["InvCode"=>""],"post","trim");
         $valide=Validate::rule([
-            "InvCode|票编号"=>"require|max:255"
+            "InvCode|票编号"=>"require|max:255"
         ]);
         if(!$valide->check($param)) return error($valide->getError());
         $info=$this->model->where("InvCode",$param['InvCode'])->findOrEmpty();
-        if($info->isEmpty()) return error("票编号不存在");
-        if($info->status!=3) return error("回票状态不允许删除");
+        if($info->isEmpty()) return error("票编号不存在");
+        if(!in_array($info->status,[2,3,4])) return error("发票状态不允许删除");
         $info->delete();
        return success("删除成功");
     }
@@ -172,122 +164,12 @@ class Invoice extends Base{
     public function info(){
         $param= $this->request->param(["InvCode"=>""],"post","trim");
         $valide=Validate::rule([
-            "InvCode|票编号"=>"require|max:255"
+            "InvCode|票编号"=>"require|max:255"
         ]);
         if(!$valide->check($param)) return error($valide->getError());
-        $info=$this->model->with(["items"])->where("InvCode",$param['InvCode'])->findOrEmpty();
-        if($info->isEmpty()) return error("票编号不存在");
+        $info=$this->model->where("InvCode",$param['InvCode'])->findOrEmpty();
+        if($info->isEmpty()) return error("票编号不存在");
         $info['ticket'] = InvoiceInfo::where("hpNo",$param['InvCode'])->findOrEmpty();
         return success("获取成功",$info);
     }
-
-    public function Back(){
-         $param= $this->request->param(["InvCode"=>"","reason"=>""],"post","trim");
-         $valide=Validate::rule([
-             "InvCode|回票编号"=>"require|max:255",
-             "reason|备注"=>"require|max:255"
-         ]);
-         if(!$valide->check($param)) return error($valide->getError());
-         $info=$this->model->where("InvCode",$param['InvCode'])->findOrEmpty();
-         if($info->isEmpty()) return error("回票编号不存在");
-        if ($this->level == 2) {
-		    //判断是否开通供应商账号
-		    $rebool= AccountCompany::SupplierHasAcount($info->supplierNo);
-		    if ($rebool) return error( '该供应商已经开通账号,不允许当前账号操作');
-	    }
-        if ($info->status!=4) return error("回票信息流程未完成");
-        $isr = PayReturn::where(['orderCode'=>$param['InvCode'],'status'=>[1,2],'is_del'=>0])->findOrEmpty();
-        if (!$isr->isEmpty()) return error("该订单已申请退票,不允许重复申请");
-        $returnCode =makeNo('RP');
-		$data = [
-			'returnCode'=>$returnCode,
-			'returnType'=>3,
-			'payNo'=>$param['InvCode'],
-			'orderCode'=>$param['hpNo'],
-			'reason'=>$param['reason'],
-			'returnImg'=>'',
-			'remark'=>'',
-			'status'=>1,
-			'apply_id'=>$this->uid,
-			'apply_name'=>$this->uname,
-			'is_del'=>0,
-			'addtime'=>date('Y-m-d H:i:s'),
-			'updatetime'=>date('Y-m-d H:i:s'),
-		];
-		$ce= PayReturn::create($data);
-		if (!$ce) return error("申请退票创建失败");
-		return success("申请退票创建成功");
-    }
-    public function BackList(){
-      	$param =$this->request->only(['relaComNo'=>'','companyNo'=>'','supplierNo'=>'','start'=>'','end'=>'','returnCode'=>'',
-		'status'=>'','InvCode'=>'','page'=>1,'size'=>15],'post','trim');
-      	$condition=[['a.is_del','=',0],['a.returnType','=',3]];
-      	$check = RoleAction::checkRole($this->roleid,[132,130]);
-      	if($check) $condition[]=['a.apply_id','=',$this->uid];
-      	if($param['relaComNo']!='') $condition[]=['b.companyNo|b.supplierNo','=',$param['relaComNo']];
-		if($param['companyNo']!='') $condition[]=['b.companyNo','=',$param['companyNo']];
-		if($param['supplierNo']!='') $condition[]=['b.supplierNo','=',$param['supplierNo']];
-		if($param['start']!='') $condition[]=['a.addtime','>=',date('Y-m-d H:i:s',strtotime($param['start']))];
-		if($param['end']!='') $condition[]=['a.addtime','<=',date('Y-m-d 23:59:59',strtotime($param['end']))];
-		if($param['status']!='') $condition[]=['a.status','=',$param['status']];
-		if($param['InvCode']!='') $condition[]=['b.InvCode','=',$param['InvCode']];
-		if($param['returnCode']!='') $condition[]=['a.returnCode','=',$param['returnCode']];
-		$list= PayReturn::alias('a')
-		->join('invoice b','a.orderCode=b.InvCode','left')
-		->where($condition)
-		->field('a.*,b.InvCode,b.supplierNo,b.supplierName,b.companyNo,b.companyName,b.invoice_total,b.invoice_subtotal,b.open_date,b.invoice_code,b.invoice_number')
-		->order('a.id desc')
-		->paginate(["list_row"=>$param['size'],"page"=>$param['page']]);
-		foreach ($list as $k=>&$v){
-            $v['has_account'] = AccountCompany::SupplierHasAcount($v['supplierNo']);
-		}
-        return success("获取成功",["list"=>$list->items(),"count"=>$list->total()]);
-    }
-
-    public function BackInfo(){
-        $param =$this->request->only(['returnCode'=>''],'post','trim');
-        $valide=Validate::rule([
-				'returnCode|退票申请编号'=>'require|max:255',
-			]);
-        if(!$valide->check($param))return error($valide->getError());
-        $info= PayReturn::where(['returnCode'=>$param['returnCode'],"returnType"=>3,'is_del'=>0])->findOrEmpty();
-        if($info->isEmpty()) return error("退票申请编号不存在");
-        $info['invoice'] = $this->model->with(["items"])->where(["InvCode"=>$info->orderCode])->findOrEmpty();
-        return success("获取成功",$info);
-    }
-
-    public function BackStatus(){
-      $param =$this->request->only(['returnCode'=>'','status'=>'','remark'=>'','returnImg'=>''],'post','trim');
-      $valide=Validate::rule([
-				'returnCode|退票申请编号'=>'require|max:255',
-				'status|状态'=>'require|number|in:1,2,3',
-			]);
-      if(!$valide->check($param))return error($valide->getError());
-      $info= PayReturn::where(['returnCode'=>$param['returnCode'],"returnType"=>3,'is_del'=>0])->findOrEmpty();
-      if($info->isEmpty()) return error("退票申请编号不存在");
-      $invoice = $this->model->where(['InvCode'=>$info['orderCode'],'is_del'=>0])->findOrEmpty();
-      if($invoice->isEmpty()) return error("发票信息不存在");
-      if($invoice->status!=4) return error("发票申请状态不允许退票");
-      $info->status=2;
-      $info->remark=$param['remark'];
-      $info->returnImg=$param['returnImg'];
-      $info->updatetime=date('Y-m-d H:i:s');
-      $this->model->startTrans();
-      try{
-          $up=$info->save();
-          if(!$up) throw new \Exception("审批失败");
-          if($param['status']==2){
-              $invoice->status=9;
-              $invoice->updatetime=date('Y-m-d H:i:s');
-              $up2=$invoice->save();
-              if(!$up2) throw new \Exception("审批失败");
-          }
-          $this->model->commit();
-      }catch (\Exception $e){
-          $this->model->rollback();
-          return error("审批失败");
-      }
-       return success('审批成功');
-    }
-
 }

+ 3 - 6
app/cxinv/controller/InvoiceItem.php

@@ -16,9 +16,9 @@ class InvoiceItem extends Base{
     }
     //查询
     public function cgdListByPayNo(){
-        $param = $this->request->param(["payNo"=>"","merge_code"=>"","inv_good_name"=>"",'good_name'=>''],"post","trim");
+        $param = $this->request->param(["payNo"=>[],"merge_code"=>"","inv_good_name"=>"",'good_name'=>''],"post","trim");
         $where=[["a.status","=",1],["a.is_del","=",0]];
-        if($param["payNo"]!=="") $where[]=["a.payNo","=",$param["payNo"]];
+        if($param["payNo"]!=="") $where[]=["a.payNo","in",$param["payNo"]];
         if($param["merge_code"]!=="") $where[]=["c.merge_code","like","%{$param['merge_code']}%"];
         if($param["inv_good_name"]!=="") $where[]=["c.inv_good_name","like","%{$param["inv_good_name"]}%"];
         if($param["good_name"]!=="") $where[]=["b.goodName","like","%{$param["good_name"]}%"];
@@ -27,11 +27,8 @@ class InvoiceItem extends Base{
                 ->join('order_category c','b.sequenceNo=c.code and b.goodNo=c.spuCode and c.order_type=2',"left")
                 ->where($where)
                 ->field("b.sequenceNo,b.goodNo,b.goodName,(b.goodNum-thNum) as goodNum,b.goodPrice,b.totalPrice,
-                c.merge_code,c.cat_code,c.cat_name,c.short_name,c.tax,c.inv_good_name")
+                    b.ainv_fee,b.winv_fee,b.apay_fee,b.wpay_fee,c.merge_code,c.cat_code,c.cat_name,c.short_name,c.tax,c.inv_good_name")
                 ->select();
-        $list->each(function (&$item){
-            $item['balance_amount']= bcsub($item['totalPrice'],InvoiceOrder::getInvoiceOrderTotalFee($item['sequenceNo']),2);
-        });
          return  success('获取成功',$list);
     }
     //查询

+ 272 - 0
app/cxinv/controller/Payinv.php

@@ -0,0 +1,272 @@
+<?php
+
+
+namespace app\cxinv\controller;
+
+
+use app\cxinv\model\PayInvoice;
+use app\cxinv\model\PayReturn;use app\cxinv\model\RoleAction;use app\user\model\AccountCompany;use think\App;use think\facade\Validate;
+class Payinv extends Base{
+    public function __construct(App $app) {
+        parent::__construct($app);
+        $this->model =new PayInvoice();
+    }
+
+    public function create(){
+        $params = $this->request->param(["InvCode"=>""],"post","trim");
+        $valid= Validate::rule([
+            'InvCode' => 'require|max:255'
+        ]);
+        if (!$valid->check($params))return error($valid->getError());
+        $isT = $this->model->where(["payNo"=>$params['InvCode'],"status"=>[1,2,3,4]])->findOrEmpty();
+        if (!$isT->isEmpty())return error("该发票单号已存在");
+        $invoice = \app\cxinv\model\Invoice::where("InvCode'",$params['InvCode'])->findOrEmpty();
+        if ($invoice->isEmpty())return error("该发票单号不存在");
+        if ($invoice->status!=2)return error("该发票单号状态不正确");
+         $hpNo=makeNo('hp');
+         $data=[
+                'payNo'=>$params['InvCode'],
+                'hpNo'=>$hpNo,
+                'apply_id'=>$this->uid,
+                'apply_name'=>$this->uname,
+                'inv_fee'=> $invoice->invoice_amount, //核算金额
+                'inv_subtotal_amount'=> $invoice->invoice_subamount,//票面金额
+                'inv_amount'=> $invoice->invoice_amount, //票面金额
+                'invType'=>4,//发票申请类型 1 手工添加 2 ocr识别 3 金税扫描 4 发票池
+                'invoiceType'=>$invoice->invoice_type,
+                'inv_img'=>'',
+                'invName'=>'',
+                'invStatus'=>1,
+                'invoiceNumber'=>$invoice->invoice_number,
+                'invoiceCode'=>$invoice->invoice_code,
+                'status'=>11,//待关联订单
+                'checkNumber'=>$invoice->check_code,
+                'open_time'=>$invoice->open_date,
+                'addtime'=>date('Y-m-d H:i:s'),
+                'updatetime'=>date('Y-m-d H:i:s')
+            ];
+            $this->model->startTrans();
+            try{
+                $res=$this->model->save($data);
+                if(!$res) throw new \Exception("添加失败");
+                $invoice->status=3;
+                $up=$invoice->save();
+                if(!$up) throw new \Exception("更新发票状态失败");
+                $this->model->commit();
+            } catch (\Exception $e){
+                $this->model->rollback();
+                return error($e->getMessage());
+            }
+            return success("添加成功");
+    }
+
+    public function list(){
+        $params = $this->request->param(["page"=>1,"size"=>20,"status"=>"","payNo"=>"","apply_id"=>"","companyNo"=>"","supplierNo"=>"","invoiceType"=>"",
+        "open_time"=>"", "invoiceNumber"=>"","start"=>"","end"=>"","hpNo"=>""]);
+        $where=[["a.is_del","=",0],["invType","=",4]];
+         $check =RoleAction::checkRole($this->roleid,[82,120]);
+        if($check){
+            $where[]=['a.apply_id','=',$this->uid];
+        }
+        if ($params['status']!='')$where[]=['a.status','=',$params['status']];
+        if ($params['payNo']!='')$where[]=['a.payNo','like','%'.$params['payNo'].'%'];
+        if ($params['apply_id']!='')$where[]=['a.apply_id','=',$params['apply_id']];
+        if ($params['companyNo']!='')$where[]=['b.companyNo','=',$params['companyNo']];
+        if ($params['supplierNo']!='')$where[]=['b.supplierNo','=',$params['supplierNo']];
+        if ($params['invoiceType']!='')$where[]=['a.invoiceType','=',$params['invoiceType']];
+        if ($params['open_time']!='')$where[]=['a.open_time','=',$params['open_time']];
+        if ($params['invoiceNumber']!='')$where[]=['a.invoiceNumber','like','%'.$params['invoiceNumber'].'%'];
+        if ($params['start']!='' && $params['end']!=''){
+            $where[]=['a.addtime','between',[startTime($params['start']),endTime($params['end'])]];
+        }
+        if ($params['hpNo']!='')$where[]=['a.hpNo','like','%'.$params['hpNo'].'%'];
+        $list = $this->model->alias('a')
+            ->join('invoice b','a.payNo=b.InvCode')
+            ->field('a.*,b.supplierNo,b.supplierName,b.companyName,b.is_comon,b.companyNo')
+            ->where($where)
+            ->order('a.id desc')
+            ->paginate(["list_rows"=>$params['size'],"page"=>$params['page']]);
+
+        foreach ($list->items() as $k=>&$v){
+              $v['has_account'] = AccountCompany::SupplierHasAcount($v['supplierNo']);
+              $v['invoiceType_cn'] = \app\cxinv\model\Invoice::$invoiceType[$v['invoiceType']]??"";
+              $v['invStatus_cn'] =\app\cxinv\model\Invoice::$invStatus[$v['invStatus']]??'';
+        }
+
+        return success("获取成功",["list"=>$list->items(),"count"=>$list->total()]);
+    }
+
+    public function info(){
+        $params = $this->request->param(["hpNo"=>""]);
+        $valid= Validate::rule([
+            'hpNo' => 'require|integer'
+        ]);
+        if (!$valid->check($params))return error($valid->getError());
+        $info = $this->model->alias('a')
+                    ->join('invoice b','a.payNo=b.InvCode')
+                    ->field('a.*,b.supplierNo,b.supplierName,b.companyName,b.is_comon,b.companyNo')
+                    ->where(["a.hpNo"=>$params['hpNo']])->findOrEmpty();
+        if ($info->isEmpty())return error("该数据不存在");
+        $info['invoiceType_cn'] = \app\cxinv\model\Invoice::$invoiceType[$info['invoiceType']]??"";
+        $info['invStatus_cn'] =\app\cxinv\model\Invoice::$invStatus[$info['invStatus']]??'';
+        return success("获取成功",$info);
+    }
+    	 /* // 1待系统验证 2 买方公司审核 3带买方公司认证 4 认证成功 5验证失败 6买方审核驳回 7 认证失败 8 回票流程终止 9 验证超次数 10 回票已退
+   / * 11 待关联订单 12 订单关联完毕待财务审核 13 订单关联完毕财务驳回
+    	 **/
+    public function status(){
+        $params = $this->request->param(["hpNo"=>"","status"=>"","remark"=>""]);
+        $valid= Validate::rule([
+            'hpNo' => 'require|max:255',
+            "status"=>"require|number|in:1,2,3,4,6,7,8,13",
+            "remark"=>"max:255"
+        ]);
+        if (!$valid->check($params))return error($valid->getError());
+        $info = $this->model->where(["id"=>$params['id']])->findOrEmpty();
+        if ($info->isEmpty())return error("该数据不存在");
+        if($info->invType!=4) return error("该数据不是发票池数据");
+        $invoice = \app\cxinv\model\Invoice::where(["InvCode"=>$info['payNo']])->findOrEmpty();
+        if ($invoice->isEmpty())return error("该发票池数据不存在");
+        if($invoice->status!=3) return error("该发票池数据状态不正确");
+        if($params['status']==3) $info->check_time= date('Y-m-d H:i:s');
+        if(in_array($info['invoiceType'],['normal','electronic','toll','roll']) && $params['status']==3){
+                    $params['status']=4; //普票无需认证
+        }
+        $info->status=$params['status'];
+        $info->remark=$params['remark'];
+        $this->model->startTrans();
+        try{
+            $save= $info->save();
+            if ($save===false) throw new \Exception("修改失败");
+            if ($params['status']==4){
+                $invoice->check_time=date('Y-m-d H:i:s');
+                $invoice->status=4;
+                $res = $invoice->save();
+                if ($res===false) throw new \Exception("发票状态修改失败");
+            }
+            if(in_array($params['status'],[5,6,7,8,13])){
+                $invoice->status=2;
+                $res = $invoice->save();
+                if ($res===false) throw new \Exception('发票状态修改失败');
+                \app\cxinv\model\InvoiceItem::rmInvoice($param['hpNo']);
+            }
+            $this->model->commit();
+        }catch (\Exception $e){
+            $this->model->rollback();
+            return error($e->getMessage());
+        }
+        return success("修改成功");
+    }
+
+   public function Back(){
+         $param= $this->request->param(['hpNo'=>'','reason'=>''],'post','trim');
+         $valide=Validate::rule([
+             'hpNo|回票编号'=>'require|max:255',
+             'reason|备注'=>'require|max:255'
+         ]);
+         if(!$valide->check($param)) return error($valide->getError());
+         $info=$this->model->where('hpNo',$param['hpNo'])->findOrEmpty();
+         if($info->isEmpty()) return error('回票编号不存在');
+         if ($info->invType!=4) return error('该数据不是发票池数据');
+         $invoice = \app\cxinv\model\Invoice::where(['InvCode'=>$info['payNo']])->findOrEmpty();
+        if ($this->level == 2) {
+		    //判断是否开通供应商账号
+		    $rebool= AccountCompany::SupplierHasAcount($invoice->supplierNo);
+		    if ($rebool) return error( '该供应商已经开通账号,不允许当前账号操作');
+	    }
+        if ($info->status!=4) return error('回票信息流程未完成');
+        $isr = PayReturn::where(['orderCode'=>$param['hpNo'],'status'=>[1,2],'is_del'=>0])->findOrEmpty();
+        if (!$isr->isEmpty()) return error('该订单已申请退票,不允许重复申请');
+        $returnCode =makeNo('RP');
+		$data = [
+			'returnCode'=>$returnCode,
+			'returnType'=>3,
+			'payNo'=>$param['InvCode'],
+			'orderCode'=>$param['hpNo'],
+			'reason'=>$param['reason'],
+			'returnImg'=>'',
+			'remark'=>'',
+			'status'=>1,
+			'apply_id'=>$this->uid,
+			'apply_name'=>$this->uname,
+			'is_del'=>0,
+			'addtime'=>date('Y-m-d H:i:s'),
+			'updatetime'=>date('Y-m-d H:i:s'),
+		];
+		$ce= PayReturn::create($data);
+		if (!$ce) return error('申请退票创建失败');
+		return success('申请退票创建成功');
+    }
+    public function BackList(){
+      	$param =$this->request->only(['relaComNo'=>'','companyNo'=>'','supplierNo'=>'','start'=>'','end'=>'','returnCode'=>'',
+		'status'=>'','InvCode'=>'','hpNo'=>'','page'=>1,'size'=>15],'post','trim');
+      	$condition=[['a.is_del','=',0],['a.returnType','=',3]];
+      	$check = RoleAction::checkRole($this->roleid,[132,130]);
+      	if($check) $condition[]=['a.apply_id','=',$this->uid];
+      	if($param['relaComNo']!='') $condition[]=['c.companyNo|b.supplierNo','=',$param['relaComNo']];
+		if($param['companyNo']!='') $condition[]=['c.companyNo','=',$param['companyNo']];
+		if($param['supplierNo']!='') $condition[]=['c.supplierNo','=',$param['supplierNo']];
+		if($param['start']!='') $condition[]=['a.addtime','>=',date('Y-m-d H:i:s',strtotime($param['start']))];
+		if($param['end']!='') $condition[]=['a.addtime','<=',date('Y-m-d 23:59:59',strtotime($param['end']))];
+		if($param['status']!='') $condition[]=['a.status','=',$param['status']];
+		if($param['hpNo']!='') $condition[]=['a.orderCode','=',$param['hpNo']];
+		if($param['InvCode']!='') $condition[]=['c.InvCode','=',$param['InvCode']];
+		if($param['returnCode']!='') $condition[]=['a.returnCode','=',$param['returnCode']];
+		$list= PayReturn::alias('a')
+		->join('pay_invoice b','a.orderCode=b.hpNo','left')
+		->join('invoice c','b.payNo=c.InvCode','left')
+		->where($condition)
+		->field('a.*,c.InvCode,c.supplierNo,c.supplierName,c.companyNo,c.companyName,c.invoice_total,c.invoice_subtotal,c.open_date,c.invoice_code,c.invoice_number')
+		->order('a.id desc')
+		->paginate(['list_row'=>$param['size'],'page'=>$param['page']]);
+		foreach ($list as $k=>&$v){
+            $v['has_account'] = AccountCompany::SupplierHasAcount($v['supplierNo']);
+		}
+        return success('获取成功',['list'=>$list->items(),'count'=>$list->total()]);
+    }
+    public function BackInfo(){
+        $param =$this->request->only(['returnCode'=>''],'post','trim');
+        $valide=Validate::rule([
+				'returnCode|退票申请编号'=>'require|max:255',
+			]);
+        if(!$valide->check($param))return error($valide->getError());
+        $info= PayReturn::where(['returnCode'=>$param['returnCode'],'returnType'=>3,'is_del'=>0])->findOrEmpty();
+        if($info->isEmpty()) return error('退票申请编号不存在');
+        $info['invoice'] = $this->model->with(['items'])->where(['hpNo'=>$info->orderCode])->findOrEmpty();
+        return success('获取成功',$info);
+    }
+    public function BackStatus(){
+      $param =$this->request->only(['returnCode'=>'','status'=>'','remark'=>'','returnImg'=>''],'post','trim');
+      $valide=Validate::rule([
+				'returnCode|退票申请编号'=>'require|max:255',
+				'status|状态'=>'require|number|in:1,2,3',
+			]);
+      if(!$valide->check($param))return error($valide->getError());
+      $info= PayReturn::where(['returnCode'=>$param['returnCode'],'returnType'=>3,'is_del'=>0])->findOrEmpty();
+      if($info->isEmpty()) return error('退票申请编号不存在');
+      $invoice = $this->model->where(['hpNo'=>$info['orderCode'],'is_del'=>0])->findOrEmpty();
+      if($invoice->isEmpty()) return error('发票信息不存在');
+      if($invoice->status!=4) return error('发票申请状态不允许退票');
+      $info->status=2;
+      $info->remark=$param['remark'];
+      $info->returnImg=$param['returnImg'];
+      $info->updatetime=date('Y-m-d H:i:s');
+      $this->model->startTrans();
+      try{
+          $up=$info->save();
+          if(!$up) throw new \Exception('审批失败');
+          if($param['status']==2){
+              $invoice->status=9;
+              $invoice->updatetime=date('Y-m-d H:i:s');
+              $up2=$invoice->save();
+              if(!$up2) throw new \Exception('审批失败');
+          }
+          $this->model->commit();
+      }catch (\Exception $e){
+          $this->model->rollback();
+          return error('审批失败');
+      }
+       return success('审批成功');
+    }
+
+}

+ 1 - 1
app/cxinv/controller/Stage.php

@@ -228,7 +228,7 @@ class Stage extends Base{
             $boolen= AccountCompany::SupplierHasAcount($pay->supplierNo);
             if($boolen) return error("该供应商已经开通账号,不允许当前账号操作");
         }
-        $isR=PayReturn::where(['orderCode'=>$param['dzNo'],'status'=>[1,2],'is_del'=>0])->findOrEmpty();
+        $isR=PayReturn::where(['orderCode'=>$params['dzNo'],'status'=>[1,2],'is_del'=>0])->findOrEmpty();
 		if(!$isR->isEmpty())return error_show(1004,'付款信息退款流程已存在');
         $reCode= makeNo("RP");
         $data = [

+ 37 - 35
app/cxinv/model/Invoice.php

@@ -22,43 +22,45 @@ class Invoice extends Base{
 		             "fully_digitalized_special_electronic"=>"全电专用发票",
 		             "fully_digitalized_normal_electronic"=>"全电普通发票",
                     ];
-    //0待验证1待关联订单2待买方公司审核3待买方公司认证4 认证完成 5 发票取消 6 买方审核驳回 7 认证失败 8 验票失败 9 退票成功
+      public static $invStatus=[0=>'待验证','1'=>'正常','2'=>'已作废','3'=>'已红冲'];
+    //0待验证 1待关联订单 2订单部分关联 3订单完全关联
     public function Items(){
         return $this->hasMany(InvoiceItem::class,'invoiceCode','InvCode');
     }
-    public static function onAfterWrite(Model $model) : void{
-         $change = $model->getChangedData();
-         if (isset($change['status'])){
-             if($change['status']==4){
-                $itemid= InvoiceItem::where(['invoiceCode'=>$model->InvCode,'status'=>[1,2]])->column("id");
-                 if(!empty($itemid)){
-                    $invo= InvoiceOrder::whereIn('itemId',$itemid)->where(['status'=>[1,2]])->column("code,balance_amount,total_amount");
-                    if(!empty($invo)){
-                        foreach ($invo as $key=>$val){
-                            $cgdinfo = CgdInfo::where(['sequenceNo'=>$val['code']])->findOrEmpty();
-                             if(!$cgdinfo->isEmpty()){
-                                 $cgdinfo->ainv_fee = bcadd($cgdinfo->winv_fee,bcsub($val['total_amount'],$val['balance_amount'],2),2);
-                                 $cgdinfo->inv_status = $cgdinfo->winv_fee==0 && $cgdinfo->ainv_fee==$cgdinfo->totalPrice ?3:2;
-                                 $cgdinfo->save();
-                             }
-                             $payinfo = PayInfo::where(['cgdNo'=>$val['code'],'status'=>1,'is_del'=>0])->findOrEmpty();
-                             if(!$payinfo->isEmpty()){
-                               $pay= Pay::where(['payNo'=>$payinfo->payNo,'status'=>2])->findOrEmpty();
-                               if(!$pay->isEmpty()){
-                                   $pay->inv_fee=bcsub($pay->winv_fee,bcsub($val['total_amount'],$val['balance_amount'],2),2);
-                                   $pay->ainv_fee = bcadd($pay->inv_fee,bcsub($val['total_amount'],$val['balance_amount'],2),2);
-                                   $pay->inv_status = $pay->winv_fee==0 && $pay->inv_fee==0?3:2;
-                                   $pay->save();
-                               }
-                             }
-                        }
-                    }
-                 }
-             }
 
-             if($change['status']==9){
-                  InvoiceItem::refund($model->InvCode);
-             }
-         }
-    }
+//    public static function onAfterWrite(Model $model) : void{
+//         $change = $model->getChangedData();
+//         if (isset($change['status'])){
+//             if($change['status']==4){
+//                $itemid= InvoiceItem::where(['invoiceCode'=>$model->InvCode,'status'=>[1,2]])->column("id");
+//                 if(!empty($itemid)){
+//                    $invo= InvoiceOrder::whereIn('itemId',$itemid)->where(['status'=>[1,2]])->column("code,balance_amount,total_amount");
+//                    if(!empty($invo)){
+//                        foreach ($invo as $key=>$val){
+//                            $cgdinfo = CgdInfo::where(['sequenceNo'=>$val['code']])->findOrEmpty();
+//                             if(!$cgdinfo->isEmpty()){
+//                                 $cgdinfo->ainv_fee = bcadd($cgdinfo->winv_fee,bcsub($val['total_amount'],$val['balance_amount'],2),2);
+//                                 $cgdinfo->inv_status = $cgdinfo->winv_fee==0 && $cgdinfo->ainv_fee==$cgdinfo->totalPrice ?3:2;
+//                                 $cgdinfo->save();
+//                             }
+//                             $payinfo = PayInfo::where(['cgdNo'=>$val['code'],'status'=>1,'is_del'=>0])->findOrEmpty();
+//                             if(!$payinfo->isEmpty()){
+//                               $pay= Pay::where(['payNo'=>$payinfo->payNo,'status'=>2])->findOrEmpty();
+//                               if(!$pay->isEmpty()){
+//                                   $pay->inv_fee=bcsub($pay->winv_fee,bcsub($val['total_amount'],$val['balance_amount'],2),2);
+//                                   $pay->ainv_fee = bcadd($pay->inv_fee,bcsub($val['total_amount'],$val['balance_amount'],2),2);
+//                                   $pay->inv_status = $pay->winv_fee==0 && $pay->inv_fee==0?3:2;
+//                                   $pay->save();
+//                               }
+//                             }
+//                        }
+//                    }
+//                 }
+//             }
+//
+//             if($change['status']==9){
+//                  InvoiceItem::refund($model->InvCode);
+//             }
+//         }
+//    }
 }