input('id/d',0), 'bdid' => input('bdid/d',0), 'money' => input('money/f',0), 'dep_id' => input('depId/d',0), 'org_id' => input('orgId/d',0), 'intro' => input('intro','','trim'), 'user_id' => input('userId/d',0), 'company' => input('company','','trim'), 'pay' => input('pay/d',1), 'payee' => input('payee','','trim'), 'type' => 1 ]; $ret = $this->savePay($data); if(!$ret){ HelpHander::error($this->error); } return true; } public function savePay($data){ if($data['type'] == 1){ $result = validate('BudgetPay')->check($data,[],'type'.$data['type']); if(true !== $result){ $this->error = validate('BudgetPay')->getError(); return false; } //获取累计金额 $moneys = Db::name('budget_pay') ->where('dep_id',$data['dep_id']) ->where('bdid',$data['bdid']) ->where('status',1) ->where('del',0) ->where('type',1) // 预算内 ->sum('money'); $data['lj_money'] = $moneys + $data['money']; $budget = Db::name('budget_dep')->where('id',$data['bdid'])->find(); $data['ys_money'] = $budget['confirm_money']; $data['jy_money'] = $budget['real_money'] - $data['money']; $data['jy_money'] = $data['jy_money']>0?$data['jy_money']:0; } $id = $data['id']; unset($data['id']); if($id > 0){ unset($data['user_id']); $data['update_time'] = date('Y-m-d H:i:s'); $ret = $this->allowField(true)->save($data,['id'=>$id]); }else{ $data['create_time'] = date('Y-m-d H:i:s'); $ret = $this->allowField(true)->save($data); } if(!$ret){ $this->error = '操作失败'; return false; } return true; } // 财务确认 public function confirm($orgId,$userId){ $id = input('id/d',0); if($id <= 0){ HelpHander::error('参数错误'); } $info = Db::name('budget_pay')->where('id',$id)->find(); if(!$info){ HelpHander::error('记录不存在'); } if($info['status'] != 0){ HelpHander::error('已确认'); } Db::startTrans(); try{ $ret = Db::name('budget_pay')->where('id',$id)->update([ 'status' => 1, 'confirm_time' => date('Y-m-d H:i:s') ]); if(!$ret){ \exception('操作失败'); } $budget = Db::name('budget_dep')->where('id',$info['bdid'])->find(); $real_money = $budget['real_money'] - $info['money']; $real_money = $real_money>0?$real_money:0; $ret = Db::name('budget_dep')->where('id',$info['bdid'])->update([ 'real_money' => $real_money, 'update_time' => date('Y-m-d H:i:s') ]); if(!$ret){ \exception('操作失败'); } // 预算变化记录 $d = [ 'org_id' => $orgId, 'user_id' => $userId, 'type' => 1, 'dep_id' => $info['dep_id'], 'money' => $info['money'], 'bus_id' => $id, 'content' => '预算花费' ]; $ret = model('BudgetDepLog')->add($d); if(!$ret){ \exception('操作失败'); } Db::commit(); }catch (Exception $e){ Db::rollback(); HelpHander::error($e->getMessage()); } return true; } public function info($id){ $info = $this->where('id',$id)->find(); if(!$info){ HelpHander::error('数据不存在'); } return $info->toArray(); } // $dep 0=全部 1=我的部门 public function lists($page,$size,$dep,$depName,$userName,$itemName,$type,$start,$end,$userId,$orgId){ $map[] = ['bp.del','=',0]; $map[] = ['bp.org_id','=',$orgId]; if($depName){ $map[] = ['d.name','like','%'.$depName.'%']; } if($userName){ $map[] = ['ui.name','like','%'.$userName.'%']; } if($itemName){ $map[] = ['bi.title','like','%'.$itemName.'%']; } if($type > 0){ $map[] = ['bp.type','=',$type]; } if($start && $end){ $map[] = ['bp.create_time','>=',$start.' 00:00:00']; $map[] = ['bp.create_time','<=',$end.' 23:59:59']; } if($dep == 1){ // 本部门 $deps = model('Dep')->getUserDep($userId,$orgId,1); $depids = []; if($deps) { foreach ($deps as $k => $v) { $depids[] = $v['id']; } $map[] = ['bp.dep_id','in',$depids]; }else{ $map[] = ['bp.dep_id','=',0]; } } $map[] = ['bp.apply_status','=',1]; // 审核通过的 // $map[] = ['bp.type','=',1]; // 预算内 $lists = Db::name('budget_pay') ->alias('bp') ->join('dep d','d.id = bp.dep_id') ->join('user_info ui','ui.user_id = bp.user_id') ->join('budget_dep bd','bd.id = bp.bdid','left') ->join('budget_items bi','bi.id = bd.items_id','left') ->where($map) ->field('bp.*,d.name as depName,ui.name as userName,bi.title as itemsName,bd.company_id') ->page($page,$size) ->order('bp.id desc') ->select(); $lists = $lists?$lists:[]; foreach ($lists as $k=>$v){ $lists[$k]['companyName'] = Db::name('company')->where('id',$v['company_id'])->value('title'); } $total = Db::name('budget_pay') ->alias('bp') ->join('dep d','d.id = bp.dep_id') ->join('user_info ui','ui.user_id = bp.user_id') ->join('budget_dep bd','bd.id = bp.bdid','left') ->join('budget_items bi','bi.id = bd.items_id','left') ->where($map) ->count(); $totalMoney = Db::name('budget_pay') ->alias('bp') ->join('dep d','d.id = bp.dep_id') ->join('user_info ui','ui.user_id = bp.user_id') ->join('budget_dep bd','bd.id = bp.bdid','left') ->join('budget_items bi','bi.id = bd.items_id','left') ->where($map) ->sum('bp.money'); $data = [ 'total' => $total, 'totalMoney' => $totalMoney, 'list' => $lists ]; return $data; } public function advancedStartBudgetPay($id,$orgId,$userId,$formJson,$extra){ $formJson = json_decode($formJson,true); $data = [ 'id' => 0, 'bdid' => 0, 'money' => 0, 'dep_id' => $extra['depId'], 'org_id' => $orgId, 'intro' => '', //请款用途 'user_id' => $userId, 'company' => '', //收款单位全称 'pay' => 1, // 类型 'payee' => '', //现金领款人 'apply_id' => $id, 'type' => 0, 'apply_status' => 0 ]; foreach ($formJson as $k=>$v){ if($v['componentName'] == 'ddoverheadfield'){ foreach ($v['components'] as $key=>$val){ switch ($val['idx']){ case '0': $data['money'] = isset($val['values'])?$val['values']:0; break; case '1': $type = isset($val['values'])?$val['values']:'预算内'; //1=预算内 2=预算外1=现金 2=支票 3=汇款 if($type == '预算外'){ $data['type'] = 2; }else{ $data['type'] = 1; } break; case '2': $val['values'] = isset($val['values'])?$val['values']:''; if($val['values']){ $d = json_decode($val['values'],true); $data['bdid'] = $d['id']; }else{ $data['bdid'] = 0; } break; case '3': $data['intro'] = isset($val['values'])?$val['values']:''; break; case '4': $data['company'] = isset($val['values'])?$val['values']:''; break; case '5': $data['payee'] = isset($val['values'])?$val['values']:''; break; case '6': $pay = isset($val['values'])?$val['values']:'现金'; //1=现金 2=支票 3=汇款 if($pay == '现金'){ $data['pay'] = 2; }else if($pay == '支票'){ $data['pay'] = 3; }else{ $data['pay'] = 1; } break; } } break; } } $ret = $this->savePay($data); return $ret?true:false; } public function advancedEndBudgetPay($id,$orgId,$userId,$formJson){ $info = Db::name('budget_pay')->where('apply_id',$id)->find(); Db::startTrans(); try{ $ret = Db::name('budget_pay')->where('id',$info['id'])->update([ 'status' => 1, 'apply_status' => 1, 'confirm_time' => date('Y-m-d H:i:s'), 'update_time' => date('Y-m-d H:i:s'), ]); if(!$ret){ \exception('操作失败'); } if($info['type'] == 1){ //预算内 $budget = Db::name('budget_dep')->where('id',$info['bdid'])->find(); $real_money = $budget['real_money'] - $info['money']; $real_money = $real_money>0?$real_money:0; $ret = Db::name('budget_dep')->where('id',$info['bdid'])->update([ 'real_money' => $real_money, 'update_time' => date('Y-m-d H:i:s') ]); if(!$ret){ \exception('操作失败'); } // 预算变化记录 $d = [ 'org_id' => $orgId, 'user_id' => $userId, 'type' => 1, 'dep_id' => $info['dep_id'], 'money' => $info['money'], 'bus_id' => $id, 'content' => '预算花费' ]; $ret = model('BudgetDepLog')->add($d); if(!$ret){ \exception('操作失败'); } } Db::commit(); }catch (Exception $e){ Db::rollback(); $this->error = $e->getMessage(); return false; } return true; } public function advancedDisagreeBudgetPay($id){ $data = [ 'update_time' => date('Y-m-d H:i:s'), 'apply_status' => 2 ]; $ret = Db::name('budget_pay')->where('apply_id',$id)->update($data); return $ret?true:false; } public function advancedDelBudgetPay($id){ $info = Db::name('budget_pay')->where('apply_id',$id)->find(); $data = [ 'update_time' => date('Y-m-d H:i:s'), 'apply_status' => 2, 'del' => 1 ]; $ret = Db::name('budget_pay')->where('apply_id',$id)->update($data); if($ret && $info['apply_status'] == 1){ // 检查同一分类下有没有更加新的数据 $ti = Db::name('budget_pay') ->where('bdid',$info['bdid']) ->where('org_id',$info['org_id']) ->where('id','>',$info['id']) ->where('del',0) ->find(); if($ti){ return false; } $pdinfo = Db::name('budget_dep')->where('id',$info['bdid'])->find(); // 删除数据,恢复预算 $res = Db::name('budget_dep')->where('id',$info['bdid'])->update([ 'real_money' => $pdinfo['real_money'] + $info['money'] ]); if(!$res){ return false; } } return $ret?true:false; } // 删除记录 public function del($id,$userId){ if($userId != 100003){ HelpHander::error('无权限操作'); } $info = Db::name('budget_pay')->where('id',$id)->find(); if(!$info){ HelpHander::error('记录不存在'); } // 检查同一分类下有没有更加新的数据 $ti = Db::name('budget_pay') ->where('bdid',$info['bdid']) ->where('org_id',$info['org_id']) ->where('id','>',$info['id']) ->where('del',0) ->find(); if($ti){ HelpHander::error('该记录无权限删除'); } $data = [ 'update_time' => date('Y-m-d H:i:s'), 'del' => 1 ]; if($info['apply_id'] > 0){ $data['apply_status'] = 2; } Db::startTrans(); try{ $ret = Db::name('budget_pay')->where('id',$id)->update($data); if(!$ret){ \exception('操作失败'); } if($info['status'] == 1){ $pdinfo = Db::name('budget_dep')->where('id',$info['bdid'])->find(); // 删除数据,恢复预算 $res = Db::name('budget_dep')->where('id',$info['bdid'])->update([ 'real_money' => $pdinfo['real_money'] + $info['money'] ]); if(!$res){ \exception('操作失败'); } } // 删除日志 $uname = Db::name('user_info')->where('user_id',$info['user_id'])->value('name'); $itemTitle = Db::name('budget_dep') ->alias('a') ->join('budget_items b','b.id = a.items_id') ->where('a.id',$info['bdid']) ->value('b.title'); $ret = Db::name('del_log')->insert([ 'user_id' => $userId, 'type' => 2, 'from_id' => $id, 'create_time' => date('Y-m-d H:i:s'), 'content' => '删除了'.$uname.'提交的'.$itemTitle.'的请款单。', ]); if(!$ret){ \exception('操作失败'); } Db::commit(); }catch (Exception $e){ trace($e->getMessage()); Db::rollback(); HelpHander::error($e->getMessage()); } return true; } }