LeaveService.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace app\common\service;
  3. use app\common\model\LeaveApprove;
  4. use app\common\model\LeaveInfo;
  5. use think\Db;
  6. use think\Exception;
  7. /**
  8. * 会员请假
  9. * Class LeaveService
  10. */
  11. class LeaveService
  12. {
  13. protected static $ret_val = true;
  14. protected static $msg = '';
  15. /**
  16. * @param $approve_id 审批记录
  17. * @param $status 审批状态
  18. * @param $remark 审批备注
  19. * @return array
  20. */
  21. public static function approveLeave($approve_id,$user_id,$status,$remark)
  22. {
  23. Db::startTrans();
  24. try {
  25. if(!in_array($status,[2,3]))throw new Exception('审批状态错误');
  26. $approve_info = LeaveApprove::where('id',$approve_id)->find()->toArray();
  27. $leave_info = LeaveInfo::where('id',$approve_info['leave_id'])->find()->toArray();
  28. if($approve_info['approve_user'] != $user_id) throw new Exception('没有审核权限');
  29. if($approve_info['status'] == 0) throw new Exception('请等待审核');
  30. if($approve_info['status'] != 1) throw new Exception('改请假记录已审核');
  31. if($leave_info['status'] != 1) throw new Exception('改请假记录已审核或已取消');
  32. $approve_update = [];
  33. $approve_update['status'] = $status;
  34. $approve_update['remark'] = $remark;
  35. $approve_update['approve_time'] = date('Y-m-d H:i:s');
  36. if($approve_info['flow'] == 1){
  37. $approve_time = time() - strtotime($approve_info['create_at']);
  38. }else{
  39. $before_time = LeaveApprove::where(['leave_id'=>$approve_info['leave_id'],'flow'=>$approve_info['flow'] - 1,'approve_type'=>1])->value('approve_time');
  40. $approve_time = time() - strtotime($before_time);
  41. }
  42. $approve_update['time'] = $approve_time;
  43. LeaveApprove::where('id',$approve_id)->update($approve_update);// 更新审批记录
  44. $leave_data = [];
  45. if($approve_info['flow'] < $leave_info['approve_num']){
  46. // 更新下一级审批记录状态
  47. LeaveApprove::where(['leave_id'=>$approve_info['leave_id'],'flow'=>$approve_info['flow'] + 1,'approve_type'=>1])->update(['status'=>1]);
  48. // 审批流程数 + 1
  49. $leave_data['cur_num'] = $leave_info['cur_num'] + 1;
  50. if($status == 3) $leave_data['status'] = 3;
  51. } else if($approve_info['flow'] == $leave_info['approve_num']) {
  52. // 审批流程数 + 1
  53. $leave_data['cur_num'] = $leave_info['cur_num'] + 1;
  54. if($status == 3) $leave_data['status'] = $status;
  55. }
  56. LeaveInfo::where('id',$leave_info['id'])->update($leave_data);// 更新请假状态
  57. Db::commit();
  58. }catch (\Exception $e) {
  59. Db::rollback();
  60. static::$ret_val = false;
  61. static::$msg = $e->getMessage();
  62. }
  63. return ['ret_val'=>static::$ret_val ,'msg'=>static::$msg];
  64. }
  65. }