huminmin
2 天以前 dd24d8acd180f7643c00758984824a621b56d495
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
package com.ruoyi.staff.service.impl;
 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
import com.ruoyi.staff.dto.StaffLeaveDto;
import com.ruoyi.staff.mapper.PersonalAttendanceRecordsMapper;
import com.ruoyi.staff.mapper.StaffLeaveMapper;
import com.ruoyi.staff.mapper.StaffOnJobMapper;
import com.ruoyi.staff.pojo.PersonalAttendanceRecords;
import com.ruoyi.staff.pojo.StaffOnJob;
import com.ruoyi.staff.service.StaffLeaveService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.staff.pojo.StaffLeave;
import org.springframework.transaction.annotation.Transactional;
 
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.stream.Collectors;
 
import static com.ruoyi.common.enums.StaffLeaveReason.StaffLeaveReasonOther;
 
@AllArgsConstructor
@Service
public class StaffLeaveServiceImpl extends ServiceImpl<StaffLeaveMapper, StaffLeave> implements StaffLeaveService {
    @Autowired
    private StaffLeaveMapper staffLeaveMapper;
 
    @Autowired
    private StaffOnJobMapper staffOnJobMapper;
 
    @Autowired
    private SysUserMapper sysUserMapper;
 
    @Autowired
    private PersonalAttendanceRecordsMapper personalAttendanceRecordsMapper;
 
    //新增离职列表分页查询
    @Override
    public IPage<StaffLeaveDto> staffLeaveListPage(Page page, StaffLeaveDto staffLeaveDto) {
        return staffLeaveMapper.staffLeaveListPage(page,staffLeaveDto);
    }
 
    //新增离职
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int add(StaffLeaveDto staffLeaveDto) {
        // 校验在职员工是否存在
        StaffOnJob staffOnJob = staffOnJobMapper.selectById(staffLeaveDto.getStaffOnJobId());
        if (staffOnJob == null) {
            throw new IllegalArgumentException("员工不存在");
        }
 
        // 校验员工是否离职
        if (staffOnJob.getStaffState() == 0) {
            throw new IllegalArgumentException("员工已离职");
        }
 
        // 新增离职记录
        StaffLeave staffLeave = new StaffLeave();
        staffLeave.setStaffOnJobId(staffLeaveDto.getStaffOnJobId());
        staffLeave.setReason(staffLeaveDto.getReason());
        String reason = staffLeaveDto.getReason();
        if (StaffLeaveReasonOther.getCode().equals(reason)){
            staffLeave.setRemark(staffLeaveDto.getRemark());
        }
        staffLeaveMapper.insert(staffLeave);
 
        // 更新对应用户状态为停用
        // 根据员工编号查询用户
        SysUser sysUser = sysUserMapper.selectUserByUserName(staffOnJob.getStaffNo());
        if (sysUser != null) {
            sysUser.setStatus("1");
            sysUserMapper.updateUser(sysUser);
        }
 
        // 更新离职状态为离职
        staffOnJob.setStaffState(0);
       return staffOnJobMapper.updateById(staffOnJob);
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int update(Long id, StaffLeaveDto staffLeaveDto) {
        // 判断对象是否存在
        StaffLeave leave = staffLeaveMapper.selectById(id);
        if (leave == null){
            throw new BaseException("该离职记录不存在,无法更新!!!");
        }
 
        String reason = staffLeaveDto.getReason();
        leave.setReason(reason);
        leave.setLeaveDate(staffLeaveDto.getLeaveDate());
        // 校验离职原因是否为其他,如果是其他,备注赋值
        if (StaffLeaveReasonOther.getCode().equals(reason)){
            leave.setRemark(staffLeaveDto.getRemark());
        } else {
            leave.setRemark("");
        }
        return staffLeaveMapper.updateById(leave);
    }
 
    //删除离职
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int del(List<Integer> ids) {
        List<StaffLeave> staffLeaves = staffLeaveMapper.selectBatchIds(ids);
        // 查询离职记录,获取对应的staffOnJobId
        List<Long> staffOnJobIds = staffLeaves.stream()
                .map(StaffLeave::getStaffOnJobId)
                .collect(Collectors.toList());
 
        // 删除打卡记录
        if (!staffOnJobIds.isEmpty()) {
            personalAttendanceRecordsMapper.delete(new LambdaQueryWrapper<PersonalAttendanceRecords>()
                    .in(PersonalAttendanceRecords::getStaffOnJobId, staffOnJobIds));
        }
 
        // 删除员工台账
        staffOnJobMapper.deleteBatchIds(staffOnJobIds);
 
        // 删除离职数据
        return staffLeaveMapper.deleteBatchIds(ids);
    }
 
    //导出
    @Override
    public void export(HttpServletResponse response, StaffLeaveDto staffLeaveDto) {
        List<StaffLeaveDto> staffLeaves =staffLeaveMapper.staffLeaveList(staffLeaveDto);
        ExcelUtil<StaffLeaveDto> util = new ExcelUtil<StaffLeaveDto>(StaffLeaveDto.class);
        util.exportExcel(response, staffLeaves, "员工离职导出");
    }
}