|
@@ -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();
|