From dffce9e679762ca7898b1c3e9dd7e49a0c4956d8 Mon Sep 17 00:00:00 2001 From: hdka <823267011@qq.com> Date: Tue, 18 Mar 2025 11:52:24 +0800 Subject: [PATCH] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application-prod.yml | 2 - .../controller/EmployeeFilesController.java | 3 +- .../oa/controller/OaSalaryController.java | 8 --- .../com/ruoyi/oa/domain/vo/OaSalaryVo.java | 2 + .../com/ruoyi/oa/mapper/OaSalaryMapper.java | 4 +- .../ruoyi/oa/mapper/SysOaHolidayMapper.java | 4 ++ .../ruoyi/oa/service/IOaSalaryService.java | 2 +- .../oa/service/ISysOaHolidayService.java | 8 +++ .../impl/EmployeeFilesServiceImpl.java | 3 +- .../impl/EmployeeOnboardingServiceImpl.java | 2 + .../oa/service/impl/OaSalaryServiceImpl.java | 54 ++++++++++++--- .../service/impl/SysOaHolidayServiceImpl.java | 10 +++ .../mapper/oa/EmployeeOnboardingMapper.xml | 2 + .../resources/mapper/oa/OaSalaryMapper.xml | 66 ++++++++++--------- .../mapper/oa/SysOaHolidayMapper.xml | 10 +++ 15 files changed, 125 insertions(+), 55 deletions(-) diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml index d2521c4..b7c8f15 100644 --- a/ruoyi-admin/src/main/resources/application-prod.yml +++ b/ruoyi-admin/src/main/resources/application-prod.yml @@ -1,5 +1,3 @@ ---- # 临时文件存储位置 避免临时文件被系统清理报错 -spring.servlet.multipart.location: /javaroot/ruoyi/server/temp --- # 监控中心配置 spring.boot.admin.client: diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/EmployeeFilesController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/EmployeeFilesController.java index 8ee169a..648a979 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/EmployeeFilesController.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/EmployeeFilesController.java @@ -55,7 +55,8 @@ public class EmployeeFilesController extends BaseController { @GetMapping("/{userId}") public R getInfo(@NotNull(message = "主键不能为空") @PathVariable("userId") Long userId) { - return R.ok(iEmployeeFilesService.queryUserFilesVoByUserId(userId)); + return R.ok(iEmployeeFilesService. + queryUserFilesVoByUserId(userId)); } /** diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaSalaryController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaSalaryController.java index 1c51ed4..16be2b3 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaSalaryController.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaSalaryController.java @@ -55,14 +55,6 @@ public class OaSalaryController extends BaseController { return iOaSalaryService.listWorker(bo, pageQuery); } - /** - * 批量写入user到salary中 - */ - @GetMapping("/import") - public R importSalaryUser() { - return iOaSalaryService.importSalaryUser(); - } - /** * 导出薪资管理列表 */ diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaSalaryVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaSalaryVo.java index 88c0bed..2e9eeca 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaSalaryVo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaSalaryVo.java @@ -71,5 +71,7 @@ public class OaSalaryVo extends OaSalary { private List itemList; + private Double punishSalary; + private Double laborCost; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaSalaryMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaSalaryMapper.java index f048d29..7734cfa 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaSalaryMapper.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaSalaryMapper.java @@ -1,7 +1,6 @@ package com.ruoyi.oa.mapper; import com.baomidou.mybatisplus.core.conditions.Wrapper; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.oa.domain.OaSalary; @@ -22,11 +21,12 @@ public interface OaSalaryMapper extends BaseMapperPlus selectStaffVoPage(Page build,@Param(Constants.WRAPPER) Wrapper lqw,@Param("payTime") Date payTime); - OaSalary selectVoByUserId(Long userId); + OaSalary selectVoByUserId(@Param("userId") Long userId,@Param("yearMonth") Date yearMonth); OaSalaryVo selectVoAndItemVoById(@Param("salaryId")Long salaryId,@Param("payTime")Date payTime); void delByPayTime(Date date); + void delItemByPayYearMonth(Date yearMonth); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaHolidayMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaHolidayMapper.java index eb09dcc..96af545 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaHolidayMapper.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaHolidayMapper.java @@ -6,6 +6,7 @@ import com.ruoyi.oa.domain.vo.SysHolidayVo; import com.ruoyi.oa.domain.vo.SysOaHolidayVo; import com.ruoyi.common.core.mapper.BaseMapperPlus; +import java.util.Date; import java.util.List; /** @@ -17,4 +18,7 @@ import java.util.List; public interface SysOaHolidayMapper extends BaseMapperPlus { List queryVoList(SysOaHolidayBo bo); + + Long queryWorkDayNumByMonth(Date payTime); + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaSalaryService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaSalaryService.java index 057b966..b287310 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaSalaryService.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaSalaryService.java @@ -62,7 +62,7 @@ public interface IOaSalaryService { * 导入当月所有人的记录 * @return */ - R importSalaryUser(); + R importSalaryUser(Date payTime); TableDataInfo listWorker(OaSalaryBo bo, PageQuery pageQuery); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaHolidayService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaHolidayService.java index 327251f..c2bb6fb 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaHolidayService.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaHolidayService.java @@ -6,6 +6,7 @@ import com.ruoyi.oa.domain.vo.SysOaHolidayVo; import com.ruoyi.oa.domain.bo.SysOaHolidayBo; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.domain.PageQuery; +import org.apache.ibatis.annotations.Param; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; @@ -73,4 +74,11 @@ public interface ISysOaHolidayService { List queryVoList(SysOaHolidayBo bo); + + /** + * 查询当月的工作日 + * @param payTime + * @return + */ + Long queryWorkDayNumByMonth(Date payTime); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/EmployeeFilesServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/EmployeeFilesServiceImpl.java index 2254411..8a73292 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/EmployeeFilesServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/EmployeeFilesServiceImpl.java @@ -84,10 +84,11 @@ public class EmployeeFilesServiceImpl implements IEmployeeFilesService { @Override public Boolean insertByBo(UserFilesVo userFilesVo) { // 删除该用户所有的文件,重新填入 - baseMapper.deleteByUserId(userFilesVo.getUserId()); + // baseMapper.deleteByUserId(userFilesVo.getUserId()); 似乎不用删 List fileList = userFilesVo.getFileList(); fileList.forEach(file -> { EmployeeFiles employeeFiles = BeanUtil.toBean(file, EmployeeFiles.class); + employeeFiles.setFilePath(file.getFilePath()); employeeFiles.setUserId(userFilesVo.getUserId()); baseMapper.insert(employeeFiles); }); diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/EmployeeOnboardingServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/EmployeeOnboardingServiceImpl.java index c35a545..bd57d34 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/EmployeeOnboardingServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/EmployeeOnboardingServiceImpl.java @@ -80,7 +80,9 @@ public class EmployeeOnboardingServiceImpl implements IEmployeeOnboardingService QueryWrapper lqw =new QueryWrapper(); lqw.eq(bo.getUserId() != null, "eo.user_id", bo.getUserId()); lqw.eq(bo.getJoiningDate() != null, "eo.joining_date", bo.getJoiningDate()); + lqw.eq("eo.del_flag", 0L); lqw.like(bo.getNickName()!=null,"su.nick_name",bo.getNickName()); + return lqw; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryServiceImpl.java index 3cfe310..0c090dc 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryServiceImpl.java @@ -86,6 +86,9 @@ public class OaSalaryServiceImpl implements IOaSalaryService { @Autowired private ISysOaAttendanceService sysOaAttendanceService; + @Autowired + private ISysOaHolidayService sysOaHolidayService; + /** * 查询薪资管理 */ @@ -96,9 +99,11 @@ public class OaSalaryServiceImpl implements IOaSalaryService { /** * 查询薪资管理列表 + * 职工为一个月的固定工资 所以不需要计算日薪乘以工作日数量 所以区别于车间工人 */ @Override public TableDataInfo queryPageList(OaSalaryBo bo, PageQuery pageQuery) { + List userIds = sysUserRoleMapper.selectUserIdsByNotRoleId(1852970465740505090L); QueryWrapper lqw = new QueryWrapper<>(); lqw.in("os.user_id",userIds); @@ -107,40 +112,53 @@ public class OaSalaryServiceImpl implements IOaSalaryService { Page result = baseMapper.selectStaffVoPage(pageQuery.build(), lqw,payTime); if (result.getRecords().isEmpty()){ // 判断是否有当前月的记录 没有则进行创造新的记录 - this.importSalaryUser(); + this.importSalaryUser(payTime); result = baseMapper.selectStaffVoPage(pageQuery.build(), lqw,payTime); } + + // 写入真实薪资 为日薪乘以工作日-罚金 + for (OaSalaryVo record : result.getRecords()) { + record.setRealSalary(record.getBaseSalary()+record.getPunishSalary()); + } return TableDataInfo.build(result); } @Override public TableDataInfo listWorker(OaSalaryBo bo, PageQuery pageQuery) { + // 还得计算一下这个月的工作日 + Date payTime = bo.getPayTime()!=null?bo.getPayTime():new Date(); + Long dayNum = sysOaHolidayService.queryWorkDayNumByMonth(payTime); List userIds = sysUserRoleMapper.selectUserIdsByRoleId(1852970465740505090L); QueryWrapper lqw = new QueryWrapper<>(); lqw.in("os.user_id",userIds); - Date payTime = bo.getPayTime()!=null?bo.getPayTime():new Date(); Page result = baseMapper.selectStaffVoPage(pageQuery.build(), lqw,payTime); if (result.getRecords().isEmpty()){ // 判断是否有当前月的记录 没有则进行创造新的记录 - this.importSalaryUser(); + this.importSalaryUser(payTime); result = baseMapper.selectStaffVoPage(pageQuery.build(), lqw,payTime); } + + // 写入真实薪资 为日薪乘以工作日-罚金 + for (OaSalaryVo record : result.getRecords()) { + record.setRealSalary(record.getBaseSalary()*dayNum+record.getPunishSalary()); + } return TableDataInfo.build(result); } @Override - public R importSalaryUser() { + public R importSalaryUser(Date payTime) { List sysUsers = userService.selectUserList2(); - baseMapper.delByPayTime(new Date()); + baseMapper.delByPayTime(payTime); for (SysUser user : sysUsers) { if(Objects.nonNull(user)){ OaSalary oaSalary = new OaSalary(); oaSalary.setUserId(user.getUserId()); oaSalary.setBaseSalary(Double.valueOf(user.getLaborCost())); - oaSalary.setPayTime(new Date()); + oaSalary.setPayTime(payTime); baseMapper.insert(oaSalary); } + } return R.ok(); } @@ -217,12 +235,13 @@ public class OaSalaryServiceImpl implements IOaSalaryService { // 2拿到所有的用户 Date yearMonth = StringToDate(combineYearMonth(bo.getMonthStr())); // 添加去重思想 即拿到月份如果之前计算过,则将原来的全部删掉然后新增新的 - baseMapper.delByPayTime(yearMonth); + // baseMapper.delByPayTime(yearMonth); + baseMapper.delItemByPayYearMonth(yearMonth); List sysUsers = userService.selectUserList2(); // 3遍历user列表 拿出所有的nickName分别拿到他们的json 进行第二步分析 for (SysUser user : sysUsers) { - OaSalary salary = baseMapper.selectVoByUserId(user.getUserId()); + OaSalary salary = baseMapper.selectVoByUserId(user.getUserId(),yearMonth); if (salary == null) { return jsonPath; } @@ -379,10 +398,10 @@ public class OaSalaryServiceImpl implements IOaSalaryService { List days = new ArrayList<>(); for (String absentDate : res) { String dateString = combineYearMonthAndDay(bo.getMonthStr(), absentDate); - Date date = StringToDate(dateString); + Date date = StringToDate2(dateString); SysOaAttendanceBo sysOaAttendanceBo = new SysOaAttendanceBo(); sysOaAttendanceBo.setCreateTime(date); - SysOaAttendanceVo sysOaAttendanceVo = sysOaAttendanceService.queryList(sysOaAttendanceBo).get(0); + SysOaAttendanceVo sysOaAttendanceVo = !sysOaAttendanceService.queryList(sysOaAttendanceBo).isEmpty() ?sysOaAttendanceService.queryList(sysOaAttendanceBo).get(0):null; if (sysOaAttendanceVo != null && sysOaAttendanceVo.getProjectId()!=0) { days.add(absentDate); } @@ -517,6 +536,21 @@ public class OaSalaryServiceImpl implements IOaSalaryService { return Date.from(instant); } + private Date StringToDate2(String dateStr) { + System.out.println(dateStr); + // 1. 解析字符串到 YearMonth(只包含年和月) + YearMonth yearMonth = YearMonth.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + + // 2. 在 YearMonth 基础上指定“日”为 1 + LocalDate localDate = yearMonth.atDay(1); + + // 3. 转成 Instant + Instant instant = localDate.atStartOfDay(ZoneId.systemDefault()).toInstant(); + + // 4. 转成旧版本 Date + return Date.from(instant); + } + private String DateToString(Date date) { // 2. 构造解析器,指定格式。例如 "yyyy-MM-dd" SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaHolidayServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaHolidayServiceImpl.java index 64881f7..d8cb1f3 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaHolidayServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaHolidayServiceImpl.java @@ -234,5 +234,15 @@ public class SysOaHolidayServiceImpl implements ISysOaHolidayService { return list; } + /** + * 查询这个月的工作日数量 + * @param payTime + * @return + */ + @Override + public Long queryWorkDayNumByMonth(Date payTime) { + return baseMapper.queryWorkDayNumByMonth(payTime); + } + } diff --git a/ruoyi-oa/src/main/resources/mapper/oa/EmployeeOnboardingMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/EmployeeOnboardingMapper.xml index 4d29795..8541cef 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/EmployeeOnboardingMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/EmployeeOnboardingMapper.xml @@ -73,6 +73,8 @@ LEFT JOIN sys_user su ON su.user_id = eo.user_id ${ew.getCustomSqlSegment} + + diff --git a/ruoyi-oa/src/main/resources/mapper/oa/OaSalaryMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/OaSalaryMapper.xml index a89666e..d7e04cb 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/OaSalaryMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/OaSalaryMapper.xml @@ -17,6 +17,7 @@ + @@ -25,51 +26,56 @@ WHERE YEAR(pay_time) = YEAR(#{payTime}) AND MONTH(pay_time) = MONTH(#{payTime}) + + DELETE FROM oa_salary_item + WHERE YEAR(sign_time) = YEAR(#{payTime}) + AND MONTH(sign_time) = MONTH(#{payTime}) + + + +