src/main/java/com/ruoyi/aftersalesservice/dto/AfterSalesServiceNewDto.java
@@ -18,4 +18,7 @@ private SalesLedgerDto salesLedgerDto; private String salesContractNo; private String orderNo; private String afterSalesServiceNo; } src/main/java/com/ruoyi/staff/controller/PersonalAttendanceLocationConfigController.java
@@ -34,6 +34,12 @@ @ApiOperation("新增/修改人员打卡规则配置") @PostMapping("/add") public R add(@RequestBody PersonalAttendanceLocationConfig personalAttendanceLocationConfig){ // 班次需要不能够重复 if (personalAttendanceLocationConfigService.lambdaQuery().eq(PersonalAttendanceLocationConfig::getShift, personalAttendanceLocationConfig.getShift()).one() != null) { return R.fail("班次不能重复"); } return R.ok(personalAttendanceLocationConfigService.saveOrUpdate(personalAttendanceLocationConfig)); } src/main/java/com/ruoyi/staff/pojo/StaffLeave.java
@@ -8,6 +8,7 @@ import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Date; @@ -27,12 +28,17 @@ @ApiModelProperty(value = "离职备注") private String remark; @ApiModelProperty(value = "离职日期") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8",shape = JsonFormat.Shape.STRING) private LocalDate leaveDate; @ApiModelProperty(value = "租户ID") @TableField(fill = FieldFill.INSERT) private Long tenantId; @ApiModelProperty(value = "创建时间") @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8",shape = JsonFormat.Shape.STRING) private LocalDateTime createTime; @ApiModelProperty(value = "更新时间") src/main/java/com/ruoyi/staff/service/impl/PersonalShiftServiceImpl.java
@@ -1,6 +1,8 @@ package com.ruoyi.staff.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateTime; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -119,19 +121,25 @@ IPage<PerformanceShiftMapDto> mapIPage = baseMapper.performanceShiftPage(page, time, userName, sysDeptId); //查询所有班次(打卡规则) List<PersonalAttendanceLocationConfig> personalAttendanceLocationConfigs = personalAttendanceLocationConfigMapper.selectList(null); mapIPage.getRecords().forEach(i -> { String[] shiftTimes = i.getShiftTime().split(";"); for (PerformanceShiftMapDto i : mapIPage.getRecords()) { List<String> shiftTimes = StrUtil.split(i.getShiftTime(), ";"); if(CollUtil.isEmpty(shiftTimes)){ continue; } double totalAttendance = 0;//总出勤天数 List<Map<String, Object>> map = new ArrayList<>(); // 分割日期 for (String shiftTime : shiftTimes) { i.setShiftTime(null); Map<String, Object> hashMap = new HashMap<>(); String[] shiftTimeAndShift = shiftTime.split(":"); List<String> shiftTimeAndShift = StrUtil.split(shiftTime, ":"); if(CollUtil.isEmpty(shiftTimeAndShift) || shiftTimeAndShift.size() != 3){ continue; } //排班详细数据 hashMap.put("id", shiftTimeAndShift[2]); hashMap.put("shift", shiftTimeAndShift[1]); hashMap.put("time", shiftTimeAndShift[0]); hashMap.put("id", shiftTimeAndShift.get(2)); hashMap.put("shift", shiftTimeAndShift.get(1)); hashMap.put("time", shiftTimeAndShift.get(0)); map.add(hashMap); i.setList(map); //汇总的各班次统计数据 @@ -139,20 +147,20 @@ if (!i.getMonthlyAttendance().containsKey(personalAttendanceLocationConfig.getShift())){ i.getMonthlyAttendance().put(personalAttendanceLocationConfig.getShift(), 0); } if (personalAttendanceLocationConfig.getShift().equals(shiftTimeAndShift[1])) { if (personalAttendanceLocationConfig.getShift().equals(shiftTimeAndShift.get(1))) { BigDecimal bigDecimal = new BigDecimal(i.getMonthlyAttendance().get(personalAttendanceLocationConfig.getShift()).toString()); i.getMonthlyAttendance().put(personalAttendanceLocationConfig.getShift(), bigDecimal.add(new BigDecimal("1"))); } } //统计总出勤天数(早/中/晚/夜)都算出勤,其余都是休息 if (shiftTimeAndShift[1].contains("早") || shiftTimeAndShift[1].contains("中") || shiftTimeAndShift[1].contains("晚") || shiftTimeAndShift[1].contains("夜")) { if (shiftTimeAndShift.get(1).contains("早") || shiftTimeAndShift.get(1).contains("中") || shiftTimeAndShift.get(1).contains("晚") || shiftTimeAndShift.get(1).contains("夜")) { i.getMonthlyAttendance().put("totalAttendance", totalAttendance += 1); } } }); } // 获取header时间 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); src/main/java/com/ruoyi/staff/service/impl/StaffLeaveServiceImpl.java
@@ -1,5 +1,6 @@ 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; @@ -8,8 +9,10 @@ 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; @@ -20,6 +23,7 @@ import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.stream.Collectors; import static com.ruoyi.common.enums.StaffLeaveReason.StaffLeaveReasonOther; @@ -34,6 +38,9 @@ @Autowired private SysUserMapper sysUserMapper; @Autowired private PersonalAttendanceRecordsMapper personalAttendanceRecordsMapper; //新增离职列表分页查询 @Override @@ -71,6 +78,7 @@ SysUser sysUser = sysUserMapper.selectUserByUserName(staffOnJob.getStaffNo()); if (sysUser != null) { sysUser.setStatus("1"); sysUser.setDelFlag("2"); sysUserMapper.updateUser(sysUser); } @@ -90,6 +98,7 @@ String reason = staffLeaveDto.getReason(); leave.setReason(reason); leave.setLeaveDate(staffLeaveDto.getLeaveDate()); // 校验离职原因是否为其他,如果是其他,备注赋值 if (StaffLeaveReasonOther.getCode().equals(reason)){ leave.setRemark(staffLeaveDto.getRemark()); @@ -103,6 +112,21 @@ @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); } src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
@@ -55,6 +55,9 @@ private StaffLeaveMapper staffLeaveMapper; @Autowired private PersonalAttendanceRecordsMapper personalAttendanceRecordsMapper; @Autowired private SysUserServiceImpl sysUserService; @Autowired @@ -215,6 +218,8 @@ staffOnJobMapper.deleteBatchIds(ids); // 删除离职数据 staffLeaveMapper.delete(Wrappers.<StaffLeave>lambdaQuery().in(StaffLeave::getStaffOnJobId, ids)); // 删除打卡记录 personalAttendanceRecordsMapper.delete(Wrappers.<PersonalAttendanceRecords>lambdaQuery().in(PersonalAttendanceRecords::getStaffOnJobId, ids)); // 删除用户数据 List<SysUser> sysUsers = sysUserMapper.selectList(Wrappers.<SysUser>lambdaQuery() .in(SysUser::getUserName, staffOnJobs.stream().map(StaffOnJob::getStaffNo).collect(Collectors.toList()))); src/main/java/com/ruoyi/staff/service/impl/StaffSalaryMainServiceImpl.java
@@ -12,12 +12,10 @@ import com.ruoyi.project.system.mapper.SysUserDeptMapper; import com.ruoyi.project.system.mapper.SysUserMapper; import com.ruoyi.staff.dto.CalculateSalaryDto; import com.ruoyi.staff.mapper.StaffLeaveMapper; import com.ruoyi.staff.mapper.StaffOnJobMapper; import com.ruoyi.staff.mapper.StaffSalaryDetailMapper; import com.ruoyi.staff.pojo.SchemeApplicableStaff; import com.ruoyi.staff.pojo.StaffOnJob; import com.ruoyi.staff.pojo.StaffSalaryDetail; import com.ruoyi.staff.pojo.StaffSalaryMain; import com.ruoyi.staff.pojo.*; import com.ruoyi.staff.mapper.StaffSalaryMainMapper; import com.ruoyi.staff.service.StaffSalaryDetailService; import com.ruoyi.staff.service.StaffSalaryMainService; @@ -61,6 +59,9 @@ @Autowired private StaffOnJobMapper staffOnJobMapper; @Autowired private StaffLeaveMapper staffLeaveMapper; @Autowired private AccountExpenseMapper accountExpenseMapper; @@ -155,10 +156,21 @@ if(CollectionUtils.isEmpty(longs)){ return AjaxResult.error("无员工"); } List<Map<String, Object>> mapList = new ArrayList<>(); for (Map<String, Object> id : longs) { // 判断员工是否为当月离职 if((Integer) id.get("staffState") == 0){ StaffLeave id1 = staffLeaveMapper.selectOne(new LambdaQueryWrapper<StaffLeave>() .eq(StaffLeave::getStaffOnJobId, id.get("id")) .like(StaffLeave::getLeaveDate, calculateSalaryDto.getDate())); if(id1 == null){ continue; } } schemeApplicableStaffService.calculateByEmployeeId((Integer) id.get("id"),id,calculateSalaryDto.getDate()); mapList.add(id); } return AjaxResult.success(longs); return AjaxResult.success(mapList); } public List<Map<String, Object>> setSchemeApplicableStaffUserInfo(List<Long> ids) { src/main/resources/mapper/aftersalesservice/AfterSalesServiceMapper.xml
@@ -11,6 +11,12 @@ <if test="req.feedbackDate != null"> AND feedback_date BETWEEN #{req.feedbackDate} AND #{req.feedbackDate} </if> <if test="req.afterSalesServiceNo != null and req.afterSalesServiceNo != ''"> AND ass.after_sales_service_no like CONCAT('%', #{req.afterSalesServiceNo}, '%') </if> <if test="req.orderNo != null and req.orderNo != '' "> AND sl.sales_contract_no like CONCAT('%', #{req.orderNo}, '%') </if> <if test="req.disDate != null"> AND dis_date BETWEEN #{req.disDate} AND #{req.disDate} </if> src/main/resources/mapper/system/SysUserDeptMapper.xml
@@ -9,7 +9,8 @@ T1.staff_no as staffNo, T1.staff_name as staffName, T2.dept_id as deptId, T2.dept_name as deptName T2.dept_name as deptName, T1.staff_state as staffState FROM staff_on_job T1 LEFT JOIN sys_dept T2 ON T1.sys_dept_id = T2.dept_id