$orgId, 'user_id' => $userId, 'apply_id' => $id, 'create_time' => date('Y-m-d H:i:s'), 'status' => 0, 'ispay' => 1 ]; $attachment = 0; //0=无附件 1=有附件 foreach ($formJson as $k=>$v){ if($v['componentName'] == 'ddpaycontractfield'){ foreach ($v['components'] as $key=>$val){ switch ($val['idx']){ case '0': $data['pay_apply_id'] = $val['values2'][0]['id']; break; case '1': $data['money'] = $val['values']; break; // case '2': // $data['agent'] = $val['values']; // break; case '3': $data['last'] = $val['values'] == '是'?1:0; break; case '5': $attachment = empty($val['values'])?0:1; break; case '6': $data['completion'] = isset($val['values'])?$val['values']:0;; break; } } break; } } $payinfo = Db::name('contract')->where('apply_id',$data['pay_apply_id'])->find(); $data['company_id'] = $payinfo['company_id']; $paymoney = $payinfo['pay_money'] + $data['money']; if($data['last'] == 1 && $paymoney != $payinfo['money'] && $attachment != 1){ // 是尾款 $this->error = '结算价与合同价不同,必须上传附件说明'; return false; } $ret = Db::name('contract_pay')->insert($data); if(!$ret){ $this->error = '数据保存失败'; return false; } return true; } public function advancedEndContractPay($id,$orgId,$userId,$formJson){ $data = [ 'update_time' => date('Y-m-d H:i:s'), 'status' => 1 ]; $info = Db::name('contract_pay')->where('apply_id',$id)->find(); $payinfo = Db::name('contract')->where('apply_id',$info['pay_apply_id'])->find(); if($info['completion'] > 0){ if($payinfo['type'] == 0){ //普通合同 $res = Db::name('contract')->where('id',$payinfo['id'])->update([ 'completion' => round($info['completion'],2), 'update_time' => date('Y-m-d H:i:s') ]); }else{ //追加合同 $parent_apply_id = Db::name('contract')->where('id',$payinfo['id'])->value('parent_apply_id'); $pinfo = Db::name('contract') ->where('apply_id',$parent_apply_id) ->where('status',1) ->find(); $res = Db::name('contract')->where('id',$pinfo['id'])->update([ 'completion' => round($info['completion'],2), 'update_time' => date('Y-m-d H:i:s') ]); } if(!$res){ return false; } } $paymoney = $payinfo['pay_money'] + $info['money']; $data['pay_money'] = $paymoney; $res = Db::name('contract_pay')->where('id',$info['id'])->update($data); if(!$res){ $this->error = '数据修改失败'; return false; } $ret = Db::name('contract')->where('id',$payinfo['id'])->update([ 'finish' => $info['last'], 'pay_money' => $paymoney, 'update_time' => date('Y-m-d H:i:s') ]); if(!$ret){ $this->error = '数据修改失败'; return false; } return true; } public function advancedDisagreeContractPay($id){ $data = [ 'update_time' => date('Y-m-d H:i:s'), 'status' => 2 ]; $ret = Db::name('contract_pay')->where('apply_id',$id)->update($data); return $ret?true:false; } public function advancedDelContractPay($id){ $info = Db::name('contract_pay')->where('apply_id',$id)->find(); $payinfo = Db::name('contract')->where('apply_id',$info['pay_apply_id'])->find(); $data = [ 'update_time' => date('Y-m-d H:i:s'), 'status' => 2 ]; $ret = Db::name('contract_pay')->where('apply_id',$id)->update($data); if($ret && $info['status'] == 1){ $paymoney = $payinfo['pay_money'] - $info['money']; $res = Db::name('contract')->where('id',$payinfo['id'])->update([ 'finish' => $info['last'] == 1?0:$payinfo['finish'], 'pay_money' => $paymoney, 'update_time' => date('Y-m-d H:i:s') ]); if(!$res){ return false; } if($info['completion'] > 0){ if($payinfo['type'] == 0){ //普通合同 $res = Db::name('contract')->where('id',$payinfo['id'])->update([ 'completion' => $info['completion'] != $payinfo['completion']?$payinfo['completion']:0, 'update_time' => date('Y-m-d H:i:s') ]); }else{ //追加合同 $parent_apply_id = Db::name('contract')->where('id',$payinfo['id'])->value('parent_apply_id'); $pinfo = Db::name('contract') ->where('apply_id',$parent_apply_id) ->where('status',1) ->find(); $res = Db::name('contract')->where('id',$pinfo['id'])->update([ 'completion' => $info['completion'] != $pinfo['completion']?$pinfo['completion']:0, 'update_time' => date('Y-m-d H:i:s') ]); } if(!$res){ return false; } } } return $ret?true:false; } public function advancedStartContractGet($id,$orgId,$userId,$formJson){ $formJson = json_decode($formJson,true); $data = [ 'org_id' => $orgId, 'user_id' => $userId, 'apply_id' => $id, 'create_time' => date('Y-m-d H:i:s'), 'status' => 0, 'ispay' => 2 ]; // $attachment = 0; //0=无附件 1=有附件 foreach ($formJson as $k=>$v){ if($v['componentName'] == 'ddgetcontractfield'){ foreach ($v['components'] as $key=>$val){ $val['values2'] = isset($val['values2'])?$val['values2']:[]; $val['values'] = isset($val['values'])?$val['values']:''; switch ($val['idx']){ case '0': $data['pay_apply_id'] = $val['values2'][0]['id']; break; case '1': $data['money'] = $val['values']; break; // case '2': // $data['agent'] = $val['values']; // break; case '3': $data['last'] = $val['values'] == '是'?1:0; break; // case '5': // $attachment = empty($val['values'])?0:1; // break; } } break; } } $payinfo = Db::name('contract')->where('apply_id',$data['pay_apply_id'])->find(); $data['company_id'] = $payinfo['company_id']; // $paymoney = $payinfo['pay_money'] + $data['money']; // if($data['last'] == 1 && $paymoney != $payinfo['money'] && $attachment != 1){ // 是尾款 // $this->error = '结算价与合同价不同,必须上传附件说明'; // return false; // } $ret = Db::name('contract_pay')->insert($data); if(!$ret){ $this->error = '数据保存失败'; return false; } return true; } public function advancedEndContractGet($id,$orgId,$userId,$formJson){ $data = [ 'update_time' => date('Y-m-d H:i:s'), 'status' => 1 ]; $info = Db::name('contract_pay')->where('apply_id',$id)->find(); $payinfo = Db::name('contract')->where('apply_id',$info['pay_apply_id'])->find(); $paymoney = $payinfo['pay_money'] + $info['money']; $data['pay_money'] = $paymoney; $res = Db::name('contract_pay')->where('id',$info['id'])->update($data); if(!$res){ $this->error = '数据修改失败'; return false; } $ret = Db::name('contract')->where('id',$payinfo['id'])->update([ 'finish' => $info['last'], 'pay_money' => $paymoney, 'update_time' => date('Y-m-d H:i:s') ]); if(!$ret){ $this->error = '数据修改失败'; return false; } return true; } public function advancedDisagreeContractGet($id){ $data = [ 'update_time' => date('Y-m-d H:i:s'), 'status' => 2 ]; $ret = Db::name('contract_pay')->where('apply_id',$id)->update($data); return $ret?true:false; } public function advancedDelContractGet($id){ $info = Db::name('contract_pay')->where('apply_id',$id)->find(); $payinfo = Db::name('contract')->where('apply_id',$info['pay_apply_id'])->find(); $data = [ 'update_time' => date('Y-m-d H:i:s'), 'status' => 2 ]; $ret = Db::name('contract_pay')->where('apply_id',$id)->update($data); if($ret && $info['status'] == 1){ $d = [ 'pay_money' => $payinfo['pay_money'] - $info['money'], 'update_time' => date('Y-m-d H:i:s') ]; if($info['last'] == 1){ $d['finish'] = 0; } $res = Db::name('contract')->where('id',$payinfo['id'])->update($d); if(!$res){ return false; } } return $ret?true:false; } public function payLists($applyId){ $map[] = ['status','=',1]; // 先获取追加合同的id $applyids = Db::name('contract') ->where('status',1) ->where('type',1) ->where('parent_apply_id',$applyId) ->column('apply_id'); $applyids = $applyids?$applyids:[]; $applyids[] = $applyId; $map[] = ['pay_apply_id','in',$applyids]; $lists = $this ->where($map) ->order('id asc') ->select(); $lists = $lists?$lists->toArray():[]; foreach ($lists as $k=>$v){ $lists[$k]['company'] = Db::name('company')->where('id',$v['company_id'])->value('title'); $info = Db::name('contract')->where('apply_id',$v['pay_apply_id'])->find(); $lists[$k]['contract_sn'] = $info['contract_sn']; $lists[$k]['title'] = $info['title']; $lists[$k]['agent'] = Db::name('user_info')->where('user_id',$v['user_id'])->value('name'); } return $lists; } public function payLists2($page,$size,$title,$contractSn,$qrStatus){ $map[] = ['cp.status','=',1]; if($qrStatus >= 0){ $map[] = ['cp.qr_status','=',$qrStatus]; } if($title){ $map[] = ['c.title','like','%'.$title.'%']; } if($contractSn){ $map[] = ['c.contract_sn','like','%'.$contractSn.'%']; } $lists = Db::name('contract_pay') ->alias('cp') ->join('contract c','c.apply_id = cp.pay_apply_id') ->join('apply a','a.id = cp.apply_id') ->where($map) ->page($page,$size) ->field('cp.*,c.title,c.contract_sn,c.type,a.approval_id') ->order('cp.id desc') ->select(); $lists = $lists?$lists:[]; foreach ($lists as $k=>$v){ $lists[$k]['userName'] = Db::name('user_info')->where('user_id',$v['user_id'])->value('name'); // 是否可打印请款单 $lists[$k]['print'] = 0; if($v['ispay'] == 1 && $v['approval_id'] == 88){ $lists[$k]['print'] = 1; } $lists[$k]['cw_user_name'] = ''; $lists[$k]['dep_user_name'] = ''; $lists[$k]['leaders_name'] = ''; if($v['cw_user_id'] > 0){ $lists[$k]['cw_user_name'] = Db::name('user_info')->where('user_id',$v['cw_user_id'])->value('name'); } if($v['dep_user_id'] > 0){ $lists[$k]['dep_user_name'] = Db::name('user_info')->where('user_id',$v['dep_user_id'])->value('name'); } if($v['leaders']){ $ids = explode(',',$v['leaders']); $names = []; foreach ($ids as $val){ $names[] = Db::name('user_info')->where('user_id',$val)->value('name'); } $lists[$k]['leaders_name'] = implode(',',$names); } } $total = Db::name('contract_pay') ->alias('cp') ->join('contract c','c.apply_id = cp.pay_apply_id') ->join('apply a','a.id = cp.apply_id') ->where($map)->count(); $data = [ 'total' => $total, 'list' => $lists ]; return $data; } public function payPrint($applyId){ $this->formatContractPay($applyId); $info = Db::name('contract_pay')->where('apply_id',$applyId)->where('status',1)->find(); if(!$info){ HelpHander::error('记录不存在'); } $info['day'] = date('Y年m月d日'); $info['company_name'] = Db::name('company')->where('id',$info['company_id'])->value('title'); $info['contract_company'] = Db::name('contract')->where('apply_id',$info['pay_apply_id'])->value('company2'); $apply = Db::name('apply')->where('id',$info['apply_id'])->find(); $info['dep_name'] = Db::name('dep')->where('id',$apply['dep_id'])->value('name'); $info['content'] = ''; $formJson = json_decode($apply['form_json'],true); $info['pay'] = ''; foreach ($formJson as $k=>$v){ if($v['componentName'] == 'ddpaycontractfield'){ foreach ($v['components'] as $key=>$val){ $val['values'] = isset($val['values'])?$val['values']:''; switch ($val['idx']){ case '4': $info['content'] = $val['values']; break; case '2': $info['pay'] = $val['values']; break; } } break; } } $info['user_name'] = Db::name('user_info')->where('user_id',$info['user_id'])->value('name'); $info['cw_user_name'] = ''; $info['dep_user_name'] = ''; $info['leaders_name'] = ''; if($info['cw_user_id'] > 0){ $info['cw_user_name'] = Db::name('user_info')->where('user_id',$info['cw_user_id'])->value('name'); $cwrecord = Db::name('apply_record') ->where('apply_id',$info['apply_id']) ->where('user_id',$info['cw_user_id']) ->where('status',1) ->where('del',0) ->where('type','in',[2,8]) ->order('id desc') ->find(); $info['cw_record'] = $cwrecord; } if($info['dep_user_id'] > 0){ $info['dep_user_name'] = Db::name('user_info')->where('user_id',$info['dep_user_id'])->value('name'); $deprecord = Db::name('apply_record') ->where('apply_id',$info['apply_id']) ->where('user_id',$info['dep_user_id']) ->where('status',1) ->where('del',0) ->where('type','in',[2,8]) ->order('id desc') ->find(); $info['dep_record'] = $deprecord; } if($info['leaders']){ $ids = explode(',',$info['leaders']); $names = []; foreach ($ids as $val){ $names[] = Db::name('user_info')->where('user_id',$val)->value('name'); } $info['leaders_name'] = implode(',',$names); $deprecord = Db::name('apply_record') ->where('apply_id',$info['apply_id']) ->where('user_id','in',$ids) ->where('status',1) ->where('del',0) ->where('type','in',[2,8]) ->order('id desc') ->select(); foreach ($deprecord as $k=>$v){ $deprecord[$k]['user_name'] = Db::name('user_info')->where('user_id',$v['user_id'])->value('name'); } $info['leaders_record'] = $deprecord; } $info['zr_user_name'] = ''; $info['zr_content'] = ''; $info['zr_time'] = ''; if($applyId == 5573){ //特殊单子 $info['zr_user_name'] = '冯磊'; $info['zr_content'] = '同意'; $info['zr_time'] = '2022-01-05 14:23:37'; } return $info; } // 格式化合同支付会签的各个负责人 public function formatContractPay($applyId){ $info = Db::name('contract_pay')->where('apply_id',$applyId)->where('status',1)->find(); if($info && !$info['dep_user_id']){ $apply = Db::name('apply')->where('id',$info['apply_id'])->find(); if($apply['approval_id'] != 88){ return false; } $flow = json_decode($apply['flow_json'],true); $dnodeId = ''; foreach ($flow as $k=>$v){ if($v['type'] == 2 && $v['name'] == '处室负责人'){ $dnodeId = $v['id']; } } $data = [ 'cw_user_id' => 0, 'dep_user_id' => 0, 'leaders' => '', ]; if($dnodeId){ $depId = Db::name('apply_record')->where('apply_id',$info['apply_id'])->where('nodeid',$dnodeId)->where('status',1)->where('del',0)->value('user_id'); $data['dep_user_id'] = $depId?$depId:0; }else{ $data['dep_user_id'] = $apply['user_id']; } $ldep = 226; // 中心领导部门 $ljobs = [282,161]; // 161=党委书记,主任 282=中心副主任 $cdep = 205; // 财务处 $users = Db::name('apply_record') ->alias('ar') ->join('user_job uj','uj.user_id = ar.user_id') ->join('job j','j.id = uj.job_id') ->where('ar.apply_id',$info['apply_id']) ->where('ar.status',1) ->where('ar.del',0) ->where('ar.type','in',[2,8]) ->field('ar.user_id,j.dep_id,uj.job_id') ->select(); $users = $users?$users:[]; $lids = []; foreach ($users as $k=>$v){ if($v['dep_id'] == $cdep){ // 财务处 $data['cw_user_id'] = $v['user_id']; }else if($v['dep_id'] == $ldep && !in_array($v['job_id'],$ljobs)){ //中心分管领导 $lids[] = $v['user_id']; } } $data['leaders'] = $lids?implode(',',$lids):''; Db::name('contract_pay')->where('id',$info['id'])->update($data); } } // 上传支付收款凭证 public function payupdates($id,$sdFile){ $data = [ 'file' => $sdFile, 'file_time' => date('Y-m-d H:i:s'), 'file_status' => 1 ]; if($id <= 0){ HelpHander::error('参数错误'); } if(!$data['file']){ HelpHander::error('未上传支付/收款凭证'); } $info = Db::name('contract_pay')->where('id',$id)->find(); if(!$info || $info['status'] != 1){ HelpHander::error('记录不存在'); } if($info['file_status'] == 1){ HelpHander::error('已上传过凭证'); } $ret = Db::name('contract_pay')->where('id',$id)->update($data); if(!$ret){ HelpHander::error('操作失败'); } return true; } // 确认 public function payConfirm($id,$userId){ $data = [ 'qr_user_id' => $userId, 'qr_time' => date('Y-m-d H:i:s'), 'qr_status' => 1 ]; if($id <= 0){ HelpHander::error('参数错误'); } $info = Db::name('contract_pay')->where('id',$id)->find(); if(!$info || $info['status'] != 1){ HelpHander::error('记录不存在'); } if($info['qr_status'] == 1){ HelpHander::error('已确认过'); } $ret = Db::name('contract_pay')->where('id',$id)->update($data); if(!$ret){ HelpHander::error('操作失败'); } return true; } }