liyong
9 天以前 88e384da863bb2f7324cb1e1474885df3b7cce91
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
package cn.iocoder.yudao.module.hrm.controller.admin.attendance;
 
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.module.hrm.controller.admin.attendance.vo.HrmAttendanceRulePageReqVO;
import cn.iocoder.yudao.module.hrm.controller.admin.attendance.vo.HrmAttendanceRuleRespVO;
import cn.iocoder.yudao.module.hrm.controller.admin.attendance.vo.HrmAttendanceRuleSaveReqVO;
import cn.iocoder.yudao.module.hrm.dal.dataobject.attendance.HrmAttendanceRuleDO;
import cn.iocoder.yudao.module.hrm.service.attendance.HrmAttendanceRuleService;
import cn.iocoder.yudao.module.system.api.dept.DeptApi;
import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
 
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
 
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 
@Tag(name = "管理后台 - HRM 考勤规则配置")
@RestController
@RequestMapping("/hrm/attendance/rule")
@Validated
public class HrmAttendanceRuleController {
 
    @Resource
    private HrmAttendanceRuleService attendanceRuleService;
    @Resource
    private DeptApi deptApi;
 
    @PostMapping("/create")
    @Operation(summary = "新增考勤规则")
    @PreAuthorize("@ss.hasPermission('hrm:attendance:create')")
    public CommonResult<Long> createAttendanceRule(@Valid @RequestBody HrmAttendanceRuleSaveReqVO createReqVO) {
        return success(attendanceRuleService.createAttendanceRule(createReqVO));
    }
 
    @PutMapping("/update")
    @Operation(summary = "更新考勤规则")
    @PreAuthorize("@ss.hasPermission('hrm:attendance:update')")
    public CommonResult<Boolean> updateAttendanceRule(@Valid @RequestBody HrmAttendanceRuleSaveReqVO updateReqVO) {
        attendanceRuleService.updateAttendanceRule(updateReqVO);
        return success(true);
    }
 
    @DeleteMapping("/delete")
    @Operation(summary = "删除考勤规则")
    @Parameter(name = "id", description = "规则ID", required = true)
    @PreAuthorize("@ss.hasPermission('hrm:attendance:delete')")
    public CommonResult<Boolean> deleteAttendanceRule(@RequestParam("id") Long id) {
        attendanceRuleService.deleteAttendanceRule(id);
        return success(true);
    }
 
    @GetMapping("/get")
    @Operation(summary = "获得考勤规则")
    @Parameter(name = "id", description = "规则ID", required = true)
    @PreAuthorize("@ss.hasPermission('hrm:attendance:query')")
    public CommonResult<HrmAttendanceRuleRespVO> getAttendanceRule(@RequestParam("id") Long id) {
        HrmAttendanceRuleDO attendanceRule = attendanceRuleService.getAttendanceRule(id);
        if (attendanceRule == null) {
            return success(null);
        }
        HrmAttendanceRuleRespVO respVO = BeanUtils.toBean(attendanceRule, HrmAttendanceRuleRespVO.class);
        // 填充部门名称
        if (attendanceRule.getDeptId() != null) {
            DeptRespDTO dept = deptApi.getDept(attendanceRule.getDeptId());
            if (dept != null) {
                respVO.setDeptName(dept.getName());
            }
        }
        return success(respVO);
    }
 
    @GetMapping("/page")
    @Operation(summary = "获得考勤规则分页")
    @PreAuthorize("@ss.hasPermission('hrm:attendance:query')")
    public CommonResult<PageResult<HrmAttendanceRuleRespVO>> getAttendanceRulePage(@Valid HrmAttendanceRulePageReqVO pageReqVO) {
        PageResult<HrmAttendanceRuleDO> pageResult = attendanceRuleService.getAttendanceRulePage(pageReqVO);
        List<HrmAttendanceRuleRespVO> list = BeanUtils.toBean(pageResult.getList(), HrmAttendanceRuleRespVO.class);
        // 填充部门名称
        if (CollUtil.isNotEmpty(list)) {
            Set<Long> deptIds = pageResult.getList().stream()
                    .map(HrmAttendanceRuleDO::getDeptId)
                    .filter(Objects::nonNull)
                    .collect(Collectors.toSet());
            Map<Long, DeptRespDTO> deptMap = CollUtil.isEmpty(deptIds) ? Collections.emptyMap() : deptApi.getDeptMap(deptIds);
            for (HrmAttendanceRuleRespVO respVO : list) {
                DeptRespDTO dept = deptMap.get(respVO.getDeptId());
                if (dept != null) {
                    respVO.setDeptName(dept.getName());
                }
            }
        }
        return success(new PageResult<>(list, pageResult.getTotal()));
    }
 
    @GetMapping("/list")
    @Operation(summary = "获得考勤规则列表")
    @PreAuthorize("@ss.hasPermission('hrm:attendance:query')")
    public CommonResult<List<HrmAttendanceRuleRespVO>> getAttendanceRuleList() {
        List<HrmAttendanceRuleDO> list = attendanceRuleService.getAttendanceRuleList();
        return success(BeanUtils.toBean(list, HrmAttendanceRuleRespVO.class));
    }
 
    @GetMapping("/export-excel")
    @Operation(summary = "导出考勤规则 Excel")
    @PreAuthorize("@ss.hasPermission('hrm:attendance:export')")
    @ApiAccessLog(operateType = EXPORT)
    public void exportAttendanceRuleExcel(@Valid HrmAttendanceRulePageReqVO pageReqVO,
                                            HttpServletResponse response) throws IOException {
        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
        PageResult<HrmAttendanceRuleDO> pageResult = attendanceRuleService.getAttendanceRulePage(pageReqVO);
        List<HrmAttendanceRuleRespVO> data = BeanUtils.toBean(pageResult.getList(), HrmAttendanceRuleRespVO.class);
        ExcelUtils.write(response, "考勤规则.xls", "数据", HrmAttendanceRuleRespVO.class, data);
    }
 
}