request->get(['start_time','end_time','status','page_no','page_size']); $page_no = !empty($params['page_no']) ? $params['page_no'] : 1; $page_size = !empty($params['page_size']) ? $params['page_size'] : 15; $where = []; if(!empty($params['start_time']) && !empty($params['end_time'])){ if(strtotime($params['end_time']) <= strtotime($params['start_time'])){ return $this->fail('结束时间不等小于开始时间'); } $where[] = ['create_time','between',[strtotime($params['start_time']),strtotime($params['end_time'])]]; } if(!empty($params['status'])){ $where[] = match ($params['status']){ '1'=> ['is_cash','=',0], //未到账 '2'=> ['is_cash','=',1], //部分到账 '3'=> [['is_cash','=',2]], //全部到账 }; }else{ $where[] = ['is_cash','in','0,1,2']; } $lists = Db::name('oa_invoice')->field('id,is_cash,enter_amount,enter_time,type,invoice_title,amount,invoice_type,admin_id,create_time,code,open_time,check_admin_ids,open_admin_id')->where('check_status',5)->where($where) ->page($page_no, $page_size)->order('id desc')->select()->each(function($data){ $admin = Admin::field('name,dept_id')->where('id',$data['admin_id'])->findOrEmpty(); $dept = Dept::where('id',$admin['dept_id'])->value('name'); $check_admin_users = Admin::where('id','in',$data['check_admin_ids'])->column('name'); $data['user_name'] = $admin['name']; $data['dept_name'] = $dept ?? ''; $data['check_admin_users'] = !empty($check_admin_users) ? implode(',',$check_admin_users) : ''; $data['create_time'] = date('Y-m-d H:i:s',$data['create_time']); $data['type_text'] = match ($data['type']){ 1=>'企业',2=>'个人' }; $data['invoice_type_text'] = match ($data['invoice_type']){ 1=>'增值税专用发票',2=>'普通发票',3=>'专用发票' }; $data['is_cash_text'] = match ($data['is_cash']){ 0=>'未到账',1=>'部分到账',2=>'全部到账' }; $data['open_time'] = !empty($data['open_time']) ? date('Y-m-d',$data['open_time']) : ''; $data['enter_time'] = !empty($data['enter_time']) ? date('Y-m-d H:i:s',$data['enter_time']) : ''; $data['open_admin_name'] = Admin::where('id',$data['open_admin_id'])?->value('name'); return $data; })->toArray(); $count = Db::name('oa_invoice')->where($where)->where('check_status',5)->count(); return $this->success('成功', compact('count', 'lists', 'page_no', 'page_size')); } public function add(){ $params = $this->request->post(['invoice_id','detail']); if(empty($params['invoice_id']) || empty($params['detail'])){ return $this->fail('参数错误'); } $invoice = Db::name('oa_invoice')->where('id',$params['invoice_id'])->find(); if(empty($invoice)){ return $this->fail('开票信息不存在'); } if(!is_array($params['detail'])){ return $this->fail('到账记录数据格式错误'); } $income_amount = 0; $save_data = []; foreach($params['detail'] as $k=>$v){ if(empty($v['enter_time']) || !strtotime($v['enter_time'])){ return $this->fail('到账记录第'.($k+1).'行到账日期为空'); } if(empty($v['amount'])){ return $this->fail('到账记录第'.($k+1).'行到帐金额为空'); } $income_amount += $v['amount']; $save_data[] = [ 'inid' => $params['invoice_id'], 'amount' => $v['amount'], 'admin_id' => $this->adminId, 'enter_time' => strtotime($v['enter_time']), 'remarks' => $v['remarks'] ?? '', 'create_time' => time(), 'status' => 1 ]; } if($income_amount > $invoice['amount']){ return $this->fail('到账金额大于发票金额,不允许保存'); } Db::startTrans(); try { Db::name('oa_invoice_income')->where('inid',$params['invoice_id'])->delete(); Db::name('oa_invoice_income')->insertAll($save_data); Db::name('oa_invoice')->where('id',$params['invoice_id'])->update([ 'enter_amount' => $income_amount, 'enter_time' => time(), 'is_cash' => $income_amount < $invoice['amount'] ? 1 : 2 ]); Db::commit(); return $this->success('ok'); } catch (\Exception $e) { Db::rollback(); return $this->fail(); } } public function lists(){ $params = $this->request->get(['invoice_id']); if(empty($params['invoice_id'])){ return $this->fail('参数错误'); } $data = Db::name('oa_invoice_income')->where('inid',$params['invoice_id'])->order('create_time desc')->select()->each(function($data){ $data['enter_time'] = date('Y-m-d',$data['enter_time']); $data['admin_name'] = Admin::where('id',$data['admin_id'])?->value('name'); return $data; })->toArray(); return $this->data($data); } public function fdz(){ $params = $this->request->post(['invoice_id']); if(empty($params['invoice_id'])){ return $this->fail('参数错误'); } $invoice = Db::name('oa_invoice')->where('id',$params['invoice_id'])->find(); if(empty($invoice)){ return $this->fail('开票信息不存在'); } Db::startTrans(); try { Db::name('oa_invoice_income')->where('inid',$params['invoice_id'])->delete(); Db::name('oa_invoice')->where('id',$params['invoice_id'])->update([ 'enter_amount' => 0, 'enter_time' => 0, 'is_cash' => 0 ]); Db::commit(); return $this->success('ok'); } catch (\Exception $e) { Db::rollback(); return $this->fail(); } } }