From bc2ce25f2a11183e273bdc50db3b6b282c6518ee Mon Sep 17 00:00:00 2001 From: hdka <823267011@qq.com> Date: Thu, 13 Mar 2025 15:32:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=B7=A5=E8=B5=84=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oa/controller/OaSalaryController.java | 3 ++ .../oa/controller/OaSalaryItemController.java | 9 ++++ .../ruoyi/oa/domain/bo/OaSalaryItemBo.java | 4 -- .../com/ruoyi/oa/domain/vo/OaSalaryVo.java | 2 + .../com/ruoyi/oa/mapper/OaSalaryMapper.java | 2 + .../oa/service/IOaSalaryItemService.java | 3 ++ .../service/impl/OaSalaryItemServiceImpl.java | 8 ++++ .../oa/service/impl/OaSalaryServiceImpl.java | 48 +++++++++++++++++-- .../impl/SysOaAttendanceServiceImpl.java | 3 +- .../resources/mapper/oa/OaSalaryMapper.xml | 4 +- 10 files changed, 74 insertions(+), 12 deletions(-) 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 78f3a3a..1c51ed4 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 @@ -24,6 +24,7 @@ import com.ruoyi.oa.domain.vo.OaSalaryVo; import com.ruoyi.oa.domain.bo.OaSalaryBo; import com.ruoyi.oa.service.IOaSalaryService; import com.ruoyi.common.core.page.TableDataInfo; +import org.springframework.web.multipart.MultipartFile; /** * 薪资管理 @@ -118,4 +119,6 @@ public class OaSalaryController extends BaseController { public R calc(@RequestBody OaSalaryBo bo) { return R.ok(iOaSalaryService.calcSalary(bo)); } + + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaSalaryItemController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaSalaryItemController.java index e675d63..850f32b 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaSalaryItemController.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaSalaryItemController.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Arrays; import java.util.concurrent.TimeUnit; +import com.ruoyi.oa.domain.bo.OaSalaryBo; import lombok.RequiredArgsConstructor; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.*; @@ -47,6 +48,12 @@ public class OaSalaryItemController extends BaseController { return iOaSalaryItemService.queryPageList(bo, pageQuery); } + + @GetMapping("/check-file") + public R checkFile(OaSalaryItemBo bo, PageQuery pageQuery) { + return R.ok(iOaSalaryItemService.checkFile(bo)); + } + /** * 导出薪水详情列表 */ @@ -100,4 +107,6 @@ public class OaSalaryItemController extends BaseController { @PathVariable Long[] salaryItemIds) { return toAjax(iOaSalaryItemService.deleteWithValidByIds(Arrays.asList(salaryItemIds), true)); } + + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaSalaryItemBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaSalaryItemBo.java index 487b3bd..c019b77 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaSalaryItemBo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaSalaryItemBo.java @@ -27,13 +27,11 @@ public class OaSalaryItemBo extends BaseEntity { /** * 主键id */ - @NotNull(message = "主键id不能为空", groups = { EditGroup.class }) private Long salaryItemId; /** * 奖惩类型 */ - @NotNull(message = "奖惩类型不能为空", groups = { AddGroup.class, EditGroup.class }) private Long type; /** @@ -44,13 +42,11 @@ public class OaSalaryItemBo extends BaseEntity { /** * 涉及金额 */ - @NotNull(message = "涉及金额不能为空", groups = { AddGroup.class, EditGroup.class }) private Double price; /** * 奖罚记号1奖0罚 */ - @NotNull(message = "奖罚记号不能为空", groups = { AddGroup.class, EditGroup.class }) private Long flag; /** 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 14a05a2..88c0bed 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 @@ -70,4 +70,6 @@ public class OaSalaryVo extends OaSalary { private String remark; private List itemList; + + 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 545f223..f048d29 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 @@ -27,4 +27,6 @@ public interface OaSalaryMapper extends BaseMapperPlus ids, Boolean isValid); + + + Boolean checkFile(OaSalaryItemBo bo); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryItemServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryItemServiceImpl.java index 53da809..851f5a0 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryItemServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryItemServiceImpl.java @@ -111,4 +111,12 @@ public class OaSalaryItemServiceImpl implements IOaSalaryItemService { } return baseMapper.deleteBatchIds(ids) > 0; } + + @Override + public Boolean checkFile(OaSalaryItemBo bo) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.like(OaSalaryItem::getSignTime,bo.getSignTime()); + lambdaQueryWrapper.eq(OaSalaryItem::getType,3L); + return baseMapper.selectList(lambdaQueryWrapper).isEmpty(); + } } 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 8f14208..3cfe310 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 @@ -10,9 +10,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.oa.domain.OaSalaryItem; +import com.ruoyi.oa.domain.bo.SysOaAttendanceBo; import com.ruoyi.oa.domain.vo.CalcResultVo; +import com.ruoyi.oa.domain.vo.SysOaAttendanceVo; import com.ruoyi.oa.domain.vo.SysOaHolidayVo; import com.ruoyi.oa.mapper.OaSalaryItemMapper; +import com.ruoyi.oa.service.ISysOaAttendanceService; import com.ruoyi.oa.service.ISysOaHolidayService; import com.ruoyi.oa.utils.OwnHttpUtils; import com.ruoyi.system.mapper.SysUserRoleMapper; @@ -36,7 +39,6 @@ import com.ruoyi.oa.mapper.OaSalaryMapper; import com.ruoyi.oa.service.IOaSalaryService; import javax.annotation.Resource; -import javax.validation.constraints.NotBlank; import java.text.SimpleDateFormat; import java.time.*; import java.time.format.DateTimeFormatter; @@ -81,6 +83,9 @@ public class OaSalaryServiceImpl implements IOaSalaryService { @Autowired private SysUserRoleMapper sysUserRoleMapper; + @Autowired + private ISysOaAttendanceService sysOaAttendanceService; + /** * 查询薪资管理 */ @@ -94,11 +99,17 @@ 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); - Page result = baseMapper.selectStaffVoPage(pageQuery.build(), lqw,bo.getPayTime()); + // 判断一下是否传参 如果没传参则默认查询当月记录,如果当月记录为空则创造当月的记录然后返回回去 + Date payTime = bo.getPayTime()!=null?bo.getPayTime():new Date(); + Page result = baseMapper.selectStaffVoPage(pageQuery.build(), lqw,payTime); + if (result.getRecords().isEmpty()){ + // 判断是否有当前月的记录 没有则进行创造新的记录 + this.importSalaryUser(); + result = baseMapper.selectStaffVoPage(pageQuery.build(), lqw,payTime); + } return TableDataInfo.build(result); } @@ -108,7 +119,13 @@ public class OaSalaryServiceImpl implements IOaSalaryService { List userIds = sysUserRoleMapper.selectUserIdsByRoleId(1852970465740505090L); QueryWrapper lqw = new QueryWrapper<>(); lqw.in("os.user_id",userIds); - Page result = baseMapper.selectStaffVoPage(pageQuery.build(), lqw,bo.getPayTime()); + Date payTime = bo.getPayTime()!=null?bo.getPayTime():new Date(); + Page result = baseMapper.selectStaffVoPage(pageQuery.build(), lqw,payTime); + if (result.getRecords().isEmpty()){ + // 判断是否有当前月的记录 没有则进行创造新的记录 + this.importSalaryUser(); + result = baseMapper.selectStaffVoPage(pageQuery.build(), lqw,payTime); + } return TableDataInfo.build(result); } @@ -199,6 +216,9 @@ public class OaSalaryServiceImpl implements IOaSalaryService { String jsonPath = OwnHttpUtils.getJsonName(bo.getMonthStr(), bo.getFilePath()); // 2拿到所有的用户 Date yearMonth = StringToDate(combineYearMonth(bo.getMonthStr())); + // 添加去重思想 即拿到月份如果之前计算过,则将原来的全部删掉然后新增新的 + baseMapper.delByPayTime(yearMonth); + List sysUsers = userService.selectUserList2(); // 3遍历user列表 拿出所有的nickName分别拿到他们的json 进行第二步分析 for (SysUser user : sysUsers) { @@ -277,6 +297,11 @@ public class OaSalaryServiceImpl implements IOaSalaryService { }); } } + List days = getDays(bo, res.getAbsentDates()); + res.setAbsentDates(days); + List days05 = getDays(bo, res.getAbsent05Dates()); + res.setAbsentDates(days); + res.setAbsent05Dates(days05); buildItemAbsent(res.getAbsentDates(), salary,1.0,yearMonth); buildItemAbsent(res.getAbsent05Dates(), salary,0.5,yearMonth); @@ -350,6 +375,20 @@ public class OaSalaryServiceImpl implements IOaSalaryService { return "计算成功"; } + private List getDays(OaSalaryBo bo, List res) { + List days = new ArrayList<>(); + for (String absentDate : res) { + String dateString = combineYearMonthAndDay(bo.getMonthStr(), absentDate); + Date date = StringToDate(dateString); + SysOaAttendanceBo sysOaAttendanceBo = new SysOaAttendanceBo(); + sysOaAttendanceBo.setCreateTime(date); + SysOaAttendanceVo sysOaAttendanceVo = sysOaAttendanceService.queryList(sysOaAttendanceBo).get(0); + if (sysOaAttendanceVo != null && sysOaAttendanceVo.getProjectId()!=0) { + days.add(absentDate); + } + } + return days; + } private void buildItemAbsent(List realDate2, OaSalary salary,Double flag,Date yearMonth) { @@ -378,6 +417,7 @@ public class OaSalaryServiceImpl implements IOaSalaryService { salaryItemMapper.insert(oaSalaryItem); } + /** * 获取从 startTime 到 endTime(含首尾)的所有日期列表 * diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaAttendanceServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaAttendanceServiceImpl.java index 23eafb0..e9b5908 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaAttendanceServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaAttendanceServiceImpl.java @@ -84,6 +84,7 @@ public class SysOaAttendanceServiceImpl implements ISysOaAttendanceService { lqw.eq(bo.getProjectId() != null, SysOaAttendance::getProjectId, bo.getProjectId()); lqw.eq(bo.getDayLength() != null, SysOaAttendance::getDayLength, bo.getDayLength()); lqw.eq(bo.getHour() != null, SysOaAttendance::getHour, bo.getHour()); + lqw.like(bo.getCreateTime()!=null, SysOaAttendance::getCreateTime, bo.getCreateTime()); return lqw; } @@ -123,8 +124,6 @@ public class SysOaAttendanceServiceImpl implements ISysOaAttendanceService { sysOaAttendanceVo.setDelFlag(0L); sysOaAttendanceVo.setDayLength(bo.getDayLength()!=null?bo.getDayLength():0); sysOaAttendanceVo.setHour(bo.getHour()!=null?bo.getHour():0); - - return baseMapper.updateDelAttendance(BeanUtil.toBean(sysOaAttendanceVo, SysOaAttendance.class)) > 0; } diff --git a/ruoyi-oa/src/main/resources/mapper/oa/OaSalaryMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/OaSalaryMapper.xml index 29a1f87..a89666e 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/OaSalaryMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/OaSalaryMapper.xml @@ -32,7 +32,6 @@ os.salary_id, os.user_id, os.pay_time, - os.base_salary, ( COALESCE(SUM( CASE @@ -44,7 +43,8 @@ ) AS real_salary, osi.salary_item_id, osi.sign_time, - su.nick_name + su.nick_name, + labor_cost as base_salary FROM oa_salary os LEFT JOIN oa_salary_item osi ON osi.salary_id = os.salary_id