Browse Source

考勤员工设置

zhaopeiqing 1 year ago
parent
commit
124e146e8f
9 changed files with 178 additions and 1 deletions
  1. 16 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/employeesetting/AttendanceEmployeeSettingController.java
  2. 24 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/employeesetting/vo/AttendanceEmployeeSettingBatchSaveReqVO.java
  3. 3 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/employeesetting/vo/AttendanceEmployeeSettingPageReqVO.java
  4. 4 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/employeesetting/vo/AttendanceEmployeeSettingRespVO.java
  5. 2 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/mysql/employeesetting/AttendanceEmployeeSettingMapper.java
  6. 16 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/service/employeesetting/AttendanceEmployeeSettingService.java
  7. 76 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/service/employeesetting/AttendanceEmployeeSettingServiceImpl.java
  8. 36 0
      yudao-module-personnel/yudao-module-attendance-biz/src/main/resources/mapper/employeesetting/AttendanceEmployeeSettingMapper.xml
  9. 1 1
      yudao-module-personnel/yudao-module-attendance-biz/src/main/resources/mapper/info/AttendanceInfoMapper.xml

+ 16 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/employeesetting/AttendanceEmployeeSettingController.java

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.attendance.controller.admin.employeesetting;
 
+import cn.iocoder.yudao.module.attendance.controller.admin.employeesetting.vo.AttendanceEmployeeSettingBatchSaveReqVO;
 import cn.iocoder.yudao.module.attendance.controller.admin.employeesetting.vo.AttendanceEmployeeSettingPageReqVO;
 import cn.iocoder.yudao.module.attendance.controller.admin.employeesetting.vo.AttendanceEmployeeSettingRespVO;
 import cn.iocoder.yudao.module.attendance.controller.admin.employeesetting.vo.AttendanceEmployeeSettingSaveReqVO;
@@ -82,6 +83,13 @@ public class AttendanceEmployeeSettingController {
         return success(BeanUtils.toBean(pageResult, AttendanceEmployeeSettingRespVO.class));
     }
 
+    @GetMapping("/info-page")
+    @Operation(summary = "获得考勤员工设置分页")
+//    @PreAuthorize("@ss.hasPermission('attendance:employee-setting:query')")
+    public CommonResult<PageResult<AttendanceEmployeeSettingRespVO>> getEmployeeInfoSettingPage(@Valid AttendanceEmployeeSettingPageReqVO pageReqVO) {
+        return success(employeeSettingService.getEmployeeInfoSettingPage(pageReqVO));
+    }
+
     @GetMapping("/export-excel")
     @Operation(summary = "导出考勤员工设置 Excel")
     @PreAuthorize("@ss.hasPermission('attendance:employee-setting:export')")
@@ -95,4 +103,12 @@ public class AttendanceEmployeeSettingController {
                         BeanUtils.toBean(list, AttendanceEmployeeSettingRespVO.class));
     }
 
+    @PutMapping("/batch-update")
+    @Operation(summary = "更新考勤员工设置")
+    @PreAuthorize("@ss.hasPermission('attendance:employee-setting:update')")
+    public CommonResult<Boolean> batchUpdateEmployeeSetting(@Valid @RequestBody AttendanceEmployeeSettingBatchSaveReqVO updateReqVO) {
+        employeeSettingService.batchUpdateEmployeeSetting(updateReqVO);
+        return success(true);
+    }
+
 }

+ 24 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/employeesetting/vo/AttendanceEmployeeSettingBatchSaveReqVO.java

@@ -0,0 +1,24 @@
+package cn.iocoder.yudao.module.attendance.controller.admin.employeesetting.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Schema(description = "管理后台 - 考勤员工设置新增/修改 Request VO")
+@Data
+public class AttendanceEmployeeSettingBatchSaveReqVO {
+
+    @Schema(description = "员工IDS", requiredMode = Schema.RequiredMode.REQUIRED, example = "employeeIds: [12,13,14]")
+    @NotNull(message = "员工IDS不能为空")
+    private List<Long> employeeIds;
+
+    @Schema(description = "排班ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "23897")
+    private Long schedulingId;
+
+    @Schema(description = "租户编号", example = "1")
+    private Long tenantId;
+
+}

+ 3 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/employeesetting/vo/AttendanceEmployeeSettingPageReqVO.java

@@ -27,6 +27,9 @@ public class AttendanceEmployeeSettingPageReqVO extends PageParam {
     @Schema(description = "排班ID", example = "23897")
     private Long schedulingId;
 
+    @Schema(description = "班次名称,如早班、中班、晚班等")
+    private String shiftName;
+
     @Schema(description = "考勤地点")
     private String attendanceLocation;
 

+ 4 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/controller/admin/employeesetting/vo/AttendanceEmployeeSettingRespVO.java

@@ -47,6 +47,10 @@ public class AttendanceEmployeeSettingRespVO {
     @ExcelProperty("电子邮箱")
     private String email;
 
+    @Schema(description = "班次名称,如早班、中班、晚班等")
+    @ExcelProperty("班次名称,如早班、中班、晚班等")
+    private String shiftName;
+
     @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
     @ExcelProperty("状态")
     private Integer status;

+ 2 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/dal/mysql/employeesetting/AttendanceEmployeeSettingMapper.java

@@ -37,4 +37,6 @@ public interface AttendanceEmployeeSettingMapper extends BaseMapperX<AttendanceE
 
     AttendanceEmployeeSettingRespVO getByEmployeeId(@Param("employeeId") Long employeeId);
 
+    List<AttendanceEmployeeSettingRespVO> getEmployeeInfoSettingPage(@Param("reqVO") AttendanceEmployeeSettingPageReqVO reqVO);
+
 }

+ 16 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/service/employeesetting/AttendanceEmployeeSettingService.java

@@ -1,6 +1,7 @@
 package cn.iocoder.yudao.module.attendance.service.employeesetting;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.attendance.controller.admin.employeesetting.vo.AttendanceEmployeeSettingBatchSaveReqVO;
 import cn.iocoder.yudao.module.attendance.controller.admin.employeesetting.vo.AttendanceEmployeeSettingPageReqVO;
 import cn.iocoder.yudao.module.attendance.controller.admin.employeesetting.vo.AttendanceEmployeeSettingRespVO;
 import cn.iocoder.yudao.module.attendance.controller.admin.employeesetting.vo.AttendanceEmployeeSettingSaveReqVO;
@@ -54,6 +55,13 @@ public interface AttendanceEmployeeSettingService {
      */
     PageResult<AttendanceEmployeeSettingDO> getEmployeeSettingPage(AttendanceEmployeeSettingPageReqVO pageReqVO);
 
+    /**
+     * 获得考勤员工设置分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 考勤员工设置分页
+     */
+    PageResult<AttendanceEmployeeSettingRespVO> getEmployeeInfoSettingPage(AttendanceEmployeeSettingPageReqVO pageReqVO);
     /**
      * 通过员工ID获得考勤员工设置
      *
@@ -62,4 +70,12 @@ public interface AttendanceEmployeeSettingService {
      */
     AttendanceEmployeeSettingRespVO getByEmployeeId(Long employeeId);
 
+    /**
+     * 更新考勤员工设置
+     *
+     * @param updateReqVO 更新信息
+     */
+    void batchUpdateEmployeeSetting(@Valid AttendanceEmployeeSettingBatchSaveReqVO updateReqVO);
+
+
 }

+ 76 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/java/cn/iocoder/yudao/module/attendance/service/employeesetting/AttendanceEmployeeSettingServiceImpl.java

@@ -1,13 +1,18 @@
 package cn.iocoder.yudao.module.attendance.service.employeesetting;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.security.core.LoginUser;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
 import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
+import cn.iocoder.yudao.module.attendance.controller.admin.employeesetting.vo.AttendanceEmployeeSettingBatchSaveReqVO;
 import cn.iocoder.yudao.module.attendance.controller.admin.employeesetting.vo.AttendanceEmployeeSettingPageReqVO;
 import cn.iocoder.yudao.module.attendance.controller.admin.employeesetting.vo.AttendanceEmployeeSettingRespVO;
 import cn.iocoder.yudao.module.attendance.controller.admin.employeesetting.vo.AttendanceEmployeeSettingSaveReqVO;
 import cn.iocoder.yudao.module.attendance.controller.admin.info.vo.AttendanceDailyInfoRespVO;
 import cn.iocoder.yudao.module.attendance.dal.dataobject.employeesetting.AttendanceEmployeeSettingDO;
 import cn.iocoder.yudao.module.attendance.dal.mysql.employeesetting.AttendanceEmployeeSettingMapper;
+import cn.iocoder.yudao.module.employee.dal.dataobject.info.EmployeeInfoDO;
+import cn.iocoder.yudao.module.employee.service.info.EmployeeInfoService;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.transaction.annotation.Transactional;
@@ -19,6 +24,8 @@ import javax.annotation.Resource;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.module.attendance.enums.ErrorCodeConstants.ATTENDANCE_EMPLOYEE_SETTING_NOT_EXISTS;
+import static cn.iocoder.yudao.module.attendance.enums.ErrorCodeConstants.ATTENDANCE_SCHEDULING_MANAGE_NOT_EXISTS;
+import static cn.iocoder.yudao.module.employee.enums.ErrorCodeConstants.EMPLOYEE_INFO_NOT_EXISTS;
 
 /**
  * 考勤员工设置 Service 实现类
@@ -31,6 +38,8 @@ public class AttendanceEmployeeSettingServiceImpl implements AttendanceEmployeeS
 
     @Resource
     private AttendanceEmployeeSettingMapper employeeSettingMapper;
+    @Resource
+    private EmployeeInfoService employeeInfoService;
 
     @Override
     @TenantIgnore
@@ -80,10 +89,77 @@ public class AttendanceEmployeeSettingServiceImpl implements AttendanceEmployeeS
         return employeeSettingMapper.selectPage(pageReqVO);
     }
 
+    @Override
+    @TenantIgnore
+    public PageResult<AttendanceEmployeeSettingRespVO> getEmployeeInfoSettingPage(AttendanceEmployeeSettingPageReqVO pageReqVO) {
+        // 获取用户信息和租户ID
+        LoginUser user = SecurityFrameworkUtils.getLoginUser();
+        Long tenantId = user != null && user.getTenantId() != null ? user.getTenantId() : 0L;
+        pageReqVO.setTenantId(tenantId);
+        List<AttendanceEmployeeSettingRespVO> list = employeeSettingMapper.getEmployeeInfoSettingPage(pageReqVO);
+        return new PageResult<>(list, (long) list.size());
+    }
+
     @Override
     @TenantIgnore
     public AttendanceEmployeeSettingRespVO getByEmployeeId(Long employeeId) {
         return employeeSettingMapper.getByEmployeeId(employeeId);
     }
 
+    @Override
+    @TenantIgnore
+    public void batchUpdateEmployeeSetting(AttendanceEmployeeSettingBatchSaveReqVO updateReqVO) {
+        List<Long> employeeIds = updateReqVO.getEmployeeIds();
+        Long schedulingId = updateReqVO.getSchedulingId();
+        if (schedulingId == null) {
+            throw exception(ATTENDANCE_SCHEDULING_MANAGE_NOT_EXISTS);
+        }
+        for (Long employeeId : employeeIds) {
+            // 校验存在
+            boolean exists = validateEmployeeSettingExistsByEmployeeId(employeeId);
+            if (exists) {
+                // 更新
+                AttendanceEmployeeSettingDO updateObj = new AttendanceEmployeeSettingDO();
+                updateObj.setSchedulingId(schedulingId);
+                employeeSettingMapper.updateById(updateObj);
+            } else {
+                // 先查询员工信息
+                EmployeeInfoDO employeeInfoDO = employeeInfoService.getInfo(employeeId);
+                if (employeeInfoDO == null) {
+                    throw exception(EMPLOYEE_INFO_NOT_EXISTS);
+                }
+                // 新增
+                AttendanceEmployeeSettingDO employeeSetting = new AttendanceEmployeeSettingDO();
+                // 设置非空字段
+                if (employeeInfoDO.getName() != null) {
+                    employeeSetting.setName(employeeInfoDO.getName());
+                }
+                if (employeeInfoDO.getDeptId() != null) {
+                    employeeSetting.setDeptId(employeeInfoDO.getDeptId());
+                }
+                employeeSetting.setSchedulingId(schedulingId);
+                employeeSetting.setEmployeeId(employeeId);
+
+                if (employeeInfoDO.getEmail() != null) {
+                    employeeSetting.setEmail(employeeInfoDO.getEmail());
+                }
+                if (employeeInfoDO.getPhone() != null) {
+                    employeeSetting.setPhoneNumber(employeeInfoDO.getPhone());
+                }
+
+                if (employeeInfoDO.getTenantId() != null) {
+                    employeeSetting.setTenantId(employeeInfoDO.getTenantId());
+                }
+
+                employeeSettingMapper.insert(employeeSetting);
+            }
+        }
+    }
+
+    @TenantIgnore
+    private boolean validateEmployeeSettingExistsByEmployeeId(Long employeeId) {
+        return employeeSettingMapper.getByEmployeeId(employeeId) != null;
+    }
+
+
 }

+ 36 - 0
yudao-module-personnel/yudao-module-attendance-biz/src/main/resources/mapper/employeesetting/AttendanceEmployeeSettingMapper.xml

@@ -26,4 +26,40 @@
         LIMIT 1
     </select>
 
+    <!-- 获得考勤员工设置分页 -->
+    <select id="getEmployeeInfoSettingPage" resultType="cn.iocoder.yudao.module.attendance.controller.admin.employeesetting.vo.AttendanceEmployeeSettingRespVO">
+        SELECT
+            aes.id as 'id',
+            ei.id as 'employeeId',
+            ei.name,
+            ei.phone as 'employeePhone',
+            ei.employee_number,
+            asm.shift_name,
+            asm.start_time,
+            asm.end_time,
+            ei.tenant_id
+        FROM
+            employee_info ei
+            LEFT JOIN attendance_employee_setting aes on aes.employee_id = ei.id AND aes.deleted = 0 AND aes.status = 0
+            LEFT JOIN attendance_scheduling_manage asm ON asm.id = aes.scheduling_id AND asm.deleted = 0 AND asm.status = 0
+        WHERE
+            ei.deleted = 0
+        <if test="reqVO.tenantId != null">
+            AND ei.tenant_id = #{reqVO.tenantId}
+        </if>
+        <if test="reqVO.name != null and reqVO.name != ''">
+            AND ei.name LIKE CONCAT('%', #{reqVO.name}, '%')
+        </if>
+        <if test="reqVO.shiftName != null and reqVO.shiftName != ''">
+            AND asm.shift_name LIKE CONCAT('%', #{reqVO.shiftName}, '%')
+        </if>
+        <if test="reqVO.phoneNumber != null and reqVO.phoneNumber != ''">
+            AND ei.phone LIKE CONCAT('%', #{reqVO.phoneNumber}, '%')
+        </if>
+        ORDER BY ei.id
+        <if test="reqVO.pageSize != null and reqVO.pageNo != null">
+            LIMIT #{reqVO.pageNo}, #{reqVO.pageSize}
+        </if>
+    </select>
+
 </mapper>

+ 1 - 1
yudao-module-personnel/yudao-module-attendance-biz/src/main/resources/mapper/info/AttendanceInfoMapper.xml

@@ -29,7 +29,7 @@
         ORDER BY
             ai.attendance_date,ai.dept_name
         <if test="reqVO.pageSize != null and reqVO.pageNo != null">
-            LIMIT #{reqVO.pageSize} OFFSET #{reqVO.pageNo * reqVO.pageSize - reqVO.pageSize}
+            LIMIT #{reqVO.pageNo}, #{reqVO.pageSize}
         </if>
     </select>