Browse Source

hpbatchimport导入接口优化

wufeng 2 years ago
parent
commit
9ab35c17a5
1 changed files with 85 additions and 43 deletions
  1. 85 43
      app/admin/controller/Payment.php

+ 85 - 43
app/admin/controller/Payment.php

@@ -1688,48 +1688,90 @@ class Payment extends BaseController
 	* @return \think\response\Json|void
 	*/
 
-    public function hpBatchImport(){
-    	$post=$this->request->only(["hpNo"=>[],"relaComNo"=>"","companyNo"=>""],"post");
-    	$valid =Validate::rule([
-    		"hpNo|回票申请编号集合"=>"require|array",
-    		"relaComNo|关联公司"=>"max:255",
-    		"companyNo|公司编号"=>"max:255",
-    		]);
-    	if($valid->check($post)==false)return error_show(1004,$valid->getError());
-		if(empty($post['hpNo'])) return error_show(1004,'回票申请编号集合不能为空');
-		$companyNo = $post["relaComNo"]??$post['companyNo'];
-		if($companyNo =="") return error_show(1004,'业务公司编号不能为空');
-		$payArr=Db::name("pay_invoice")->alias("a")
-		->leftJoin("pay b","a.payNo=b.payNo and b.is_del=0 and b.status=2")->where(["b.hpNo"=>$post['hpNo'],
-		"b.is_del"=>0])->column("a.id,a.payNo,a.hpNo,a.invoiceType,a.inv_fee as invoice_fee,a.status,b.inv_status,b.inv_fee,b.companyNo,b.ainv_fee,b.winv_fee");
-		if(empty($payArr))return error_show(1004,'回票申请数据未找到');
-		Db::startTrans();
-		try{
-			$invIdArr=[];
-			foreach ($payArr as $value){
-				if($value['companyNo']=='') throw new Exception("{$value['hpNo']}对账信息有误");
-				if($value['companyNo']!=$companyNo) throw new Exception("{$value['hpNo']}不属于当前业务公司发票");
-				if($value['status']!='3') throw new Exception("{$value['hpNo']}状态有误");
-				if($value['invoice_fee']>$value['inv_fee']) throw new Exception("{$value['hpNo']}对账单开票中金额不足");
-				$payupdate =[
-	                            "ainv_fee"=>$value['ainv_fee']+$value['invoice_fee'],
-	                            "inv_fee"=>$value['inv_fee']-$value['invoice_fee'],
-	                             "inv_status" => ($value['inv_fee']-$value['invoice_fee'])==0 && $value['winv_fee']==0?3:2,
-	                             "updatetime" => date("Y-m-d H:i:s")
-	                        ];
-				$where=	['payNo'=>$value['payNo'],"inv_status"=>$value['inv_status'],"companyNo"=>$companyNo,"status"=>2,"is_del"=>0];
-				$pay =Db::name("pay")->where($where)->update($payupdate);
-	             if($pay==false) throw new Exception("{$value['hpNo']}回票申请对账单状态更新失败");
-	             $invIdArr[]=$value['id'];
-			}
-			$update = Db::name("pay_invoice")->where(["id"=>$invIdArr,"status"=>3,"is_del"=>0])->update(["status"=>4,"updatetime"=>date("Y-m-d H:i:s")]);
-			if($update==false) throw new Exception("回票申请状态更新更新失败");
-			Db::commit();
-		    return app_show(0,"回票申请认证成功");
-		}catch (\Exception $e){
-			Db::rollback();
-			return error_show(1004,$e->getMessage());
-		}
+    //回票申请批量认证
+    public function hpBatchImport()
+    {
+        $post = $this->request->only(["list" => [], "relaComNo" => "", "companyNo" => ""], "post");
+        $valid = Validate::rule([
+            "list|回票申请编号集合" => "require|array|max:100",
+            "relaComNo|关联公司" => "requireWithout:companyNo|max:255",
+            "companyNo|公司编号" => "requireWithout:relaComNo|max:255",
+        ]);
+        if ($valid->check($post) == false) return error_show(1004, $valid->getError());
+//		if(empty($post['hpNo'])) return error_show(1004,'回票申请编号集合不能为空');
+        $companyNo = $post["relaComNo"] ?? $post['companyNo'];
+//		if($companyNo =="") return error_show(1004,'业务公司编号不能为空');
+        $payArr = Db::name("pay_invoice")
+            ->alias("a")
+            ->leftJoin("pay b", "a.payNo=b.payNo and b.is_del=0 and b.status=2")
+            ->where(['b.is_del' => 0])
+            ->whereIn('b.hpNo', array_column($post['list'], 'hpNo'))
+            ->column("a.id,a.payNo,a.hpNo,a.invoiceType,a.inv_fee as invoice_fee,a.status,b.inv_status,b.inv_fee,b.companyNo,b.ainv_fee,b.winv_fee,b.hpNo");
+
+        $val_hpNo = Validate::rule([
+            'hpNo|回票申请编号' => 'require',
+            'status|审核状态' => 'require|number|in:4,7',
+            'remark|审核备注' => 'requireIf:status:7|max:255'
+        ]);
+
+        foreach ($post['list'] as $item) {
+            if (!$val_hpNo->check($item)) throw new \Exception($val_hpNo->getError());
+        }
+//        if (empty($payArr)) return error_show(1004, '回票申请数据未找到');
+        Db::startTrans();
+        try {
+            $pay_invoice_allow = [];
+
+            $hpNo_item = array_column($post['list'], null, 'hpNo');
+
+            $date = date('Y-m-d H:i:s');
+
+            foreach ($payArr as $value) {
+                if ($value['companyNo'] == '') throw new Exception("{$value['hpNo']}对账信息有误");
+                if ($value['companyNo'] != $companyNo) throw new Exception("{$value['hpNo']}不属于当前业务公司发票");
+                if ($value['status'] != '3') throw new Exception("{$value['hpNo']}状态有误");
+                if ($value['invoice_fee'] > $value['inv_fee']) throw new Exception("{$value['hpNo']}对账单开票中金额不足");
+
+                if ($hpNo_item[$value['hpNo']]['status'] == 4) {
+                    //审核通过
+                    $payupdate = [
+                        "ainv_fee" => $value['ainv_fee'] + $value['invoice_fee'],
+                        "inv_fee" => $value['inv_fee'] - $value['invoice_fee'],
+                        "inv_status" => ($value['inv_fee'] - $value['invoice_fee']) == 0 && $value['winv_fee'] == 0 ? 3 : 2,
+                        "updatetime" => date("Y-m-d H:i:s")
+                    ];
+
+                    $pay_invoice_allow[] = $value['id'];
+
+                } else {
+                    //审核不通过
+                    $payupdate = [
+                        "winv_fee" => $value['winv_fee'] + $value['invoice_fee'],
+                        "inv_fee" => $value['inv_fee'] - $value['invoice_fee'],
+                        "inv_status" => ($value['inv_fee'] - $value['invoice_fee']) == 0 && $value['ainv_fee'] == 0 ? 1 : 2,
+                        "updatetime" => $date
+                    ];
+//                        $pay_invoice_not_allow[]=$value['id'];
+                    Db::name("pay_invoice")
+                        ->where(["id" => $value['id'], "status" => 3, "is_del" => 0])
+                        ->update(["status" => $hpNo_item[$value['hpNo']]['status'], "updatetime" => $date, 'remark' => $hpNo_item[$value['hpNo']]['remark']]);
+                }
+                $where = ['payNo' => $value['payNo'], "inv_status" => $value['inv_status'], "companyNo" => $companyNo, "status" => 2, "is_del" => 0];
+                $pay = Db::name("pay")->where($where)->update($payupdate);
+                if ($pay == false) throw new Exception("{$value['hpNo']}回票申请对账单状态更新失败");
+//                    $invIdArr[] = $value['id'];
+            }
+//            }
 
-	}
+            if ($pay_invoice_allow) Db::name("pay_invoice")->where(["id" => $pay_invoice_allow, "status" => 3, "is_del" => 0])->update(["status" => 4, "updatetime" => $date]);
+
+//            if ($update == false) throw new Exception("回票申请状态更新失败");
+            Db::commit();
+            return app_show(0, "回票申请认证成功");
+        } catch (\Exception $e) {
+            Db::rollback();
+            return error_show(1004, $e->getMessage());
+        }
+
+    }
 }