wugg 5 months ago
parent
commit
baea7b3421
2 changed files with 31 additions and 23 deletions
  1. 30 22
      app/cxinv/controller/InvoiceItem.php
  2. 1 1
      app/cxinv/model/PayInvoice.php

+ 30 - 22
app/cxinv/controller/InvoiceItem.php

@@ -191,33 +191,41 @@ class InvoiceItem extends Base{
     *         $voice_id  负数id
     */
     public function mergeItem(){
-        $param=$this->request->param(["main_id"=>"","voice_id"=>""],"post","trim");
+        $param=$this->request->post("data",[]);
+        if(empty($param['data'])) return  error('参数错误');
         $valid=Validate::rule([
-            'main_id|正数id' => 'require|number|gt:0',
-            'voice_id|负数id' => 'require|number|gt:0',
-        ]);
-        if(!$valid->check($param)) return  error($valid->getError());
-        $main = $this->model->where(['id'=>$param['main_id']])->findOrEmpty();
-        if($main->isEmpty()) return  error("正数发票明细不存在");
-        if($main->amount<=0) return  error("正数发票明细金额必须大于0");
-        $voice = $this->model->where(['id'=>$param['voice_id']])->findOrEmpty();
-        if($voice->isEmpty()) return  error("负数发票明细不存在");
-        if($voice->amount>=0) return  error("负数发票明细金额必须小于0");
-        if($main['invoiceCode']!=$voice['invoiceCode']) return  error("正负数发票明细回票申请编号不一致");
-        $pinv= PayInvoice::where('hpNo',$main['invoiceCode'])->findOrEmpty();
+                    'main_id|正数id' => 'require|number|gt:0',
+                    'voice_id|负数id' => 'require|number|gt:0',
+          ]);
+        $mainArr = $this->model->where(['id'=>array_column($param['data'],"main_id")])->column("id,amount,invoiceCode,total_amount,balance_amount","id");
+        $voiceArr = $this->model->where(['id'=>array_column($param['data'],"voice_id")])->column("id,invoiceCode,amount,total_amount,balance_amount","id");
+        $inoviceCode = array_unique(array_merge(array_column($voiceArr,"invoiceCode"),array_column($mainArr,'invoiceCode')));
+        if(count($inoviceCode)>1) return  error("正负数发票明细回票申请编号不一致");
+        $temop=[];
+        $remove=[];
+        foreach ($param['data'] as $k=>$v){
+            if(!$valid->check($v)) return  error($valid->getError());
+            if(!isset($mainArr[$v['main_id']])) return  error("正数发票明细不存在");
+            if(!isset($voiceArr[$v['voice_id']])) return  error("负数发票明细不存在");
+            if($mainArr[$v['main_id']]['amount']<0) return  error("正数发票明细金额必须大于0");
+            if($voiceArr[$v['voice_id']]['amount']>=0) return  error("负数发票明细金额必须小于0");
+            if($mainArr[$v['main_id']]['invoiceCode']!=$voiceArr[$v['voice_id']]['invoiceCode']) return  error("正负数发票明细回票申请编号不一致");
+            if(abs($voiceArr[$v['voice_id']]['amount'])> $mainArr[$v['main_id']]['amount']) return  error("负数发票明细金额不能大于正数发票明细金额");
+            $temop[]=[
+                "id"=>$v['main_id'],
+                "amount"=>bcadd($mainArr[$v['main_id']]['amount'],$voiceArr[$v['voice_id']]['amount'],2),
+                "balance_amount"=>bcadd($mainArr[$v['main_id']]['balance_amount'],$voiceArr[$v['voice_id']]['balance_amount'],2),
+                "total_amount"=> bcadd($mainArr[$v['main_id']]['total_amount'],$voiceArr[$v['voice_id']]['total_amount'],2),
+                ];
+            $remove[]=$v['voice_id'];
+        }
+        $pinv= PayInvoice::where('hpNo',$inoviceCode[0])->findOrEmpty();
         if($pinv->isEmpty()) return  error('未找到关联的回票申请');
         if($pinv['status']!=14) return  error('回票申请状态必须为待确认');
-        //负数金额的绝对值 小于正数金额
-        if(abs($voice['amount'])<$main['amount']){
-            $main->amount = bcsub($main['amount'],abs($voice['amount']),2);
-            $main->total_amount = bcsub($main['total_amount'],abs($voice['total_amount']),2);
-            $main->balance_amount = bcsub($main['balance_amount'],abs($voice['balance_amount']),2);
-            $main->tax_amount = bcsub($main['tax_amount'],abs($voice['tax_amount']),2);
-        }else return  error('负数发票金额不能大于正数金额');
         $this->model->startTrans();
         try{
-            $main->save();
-            $voice->delete();
+            $this->model->saveAll($temop);
+            $this->model->whereIn('id',$remove)->delete();
             $this->model->commit();
         }catch (\Exception $e){
             $this->model->rollback();

+ 1 - 1
app/cxinv/model/PayInvoice.php

@@ -48,7 +48,7 @@ class PayInvoice extends Base
             if (!$ticket->isEmpty() && !empty($ticket->item_list)){
                 $bool = true;
                  (new  InvoiceItem)->saveAll(array_map(function ($item)use($model,&$bool) {
-                     if($item['amount']<0) $bool=false;
+                            if($item['amount']<0) $bool=false;
                               return [
                                   'invoiceCode'=>$model->hpNo,
                                   'order_type'=>2,