From 78d4f5e2ae2252ab0e525f161f42628d4e4b902b Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 11 Mar 2024 10:35:56 +0800 Subject: [PATCH] =?UTF-8?q?=E9=98=85=E5=90=8E=E5=8D=B3=E7=84=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/salaryBillViewingLimitSetting.java | 5 +++++ .../salaryBill/po/SalarySendInfoPO.java | 5 +++++ .../salarybill/SalarySendInfoMapper.xml | 1 + .../service/SalaryBillBaseSetService.java | 6 ++++++ .../impl/SalaryBillBaseSetServiceImpl.java | 14 ++++++++++++-- .../service/impl/SalarySendServiceImpl.java | 19 +++++++++++++++++++ .../sys/constant/SalarySysConstant.java | 5 +++++ .../wrapper/SalaryBillBaseSetWrapper.java | 2 ++ 8 files changed, 55 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/entity/salaryBill/dto/salaryBillViewingLimitSetting.java b/src/com/engine/salary/entity/salaryBill/dto/salaryBillViewingLimitSetting.java index 34bf14572..8bd3a1ceb 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/salaryBillViewingLimitSetting.java +++ b/src/com/engine/salary/entity/salaryBill/dto/salaryBillViewingLimitSetting.java @@ -25,4 +25,9 @@ public class salaryBillViewingLimitSetting { */ private Integer limitMonth; + /** + * 首次查看后多少分钟不能查看工资单 + */ + private Integer burningAfterReadingMin; + } diff --git a/src/com/engine/salary/entity/salaryBill/po/SalarySendInfoPO.java b/src/com/engine/salary/entity/salaryBill/po/SalarySendInfoPO.java index 48f8833b1..8dea3fc47 100644 --- a/src/com/engine/salary/entity/salaryBill/po/SalarySendInfoPO.java +++ b/src/com/engine/salary/entity/salaryBill/po/SalarySendInfoPO.java @@ -116,4 +116,9 @@ public class SalarySendInfoPO { * 租户ID */ private String tenantKey; + + /** + * 首次查看时间 + */ + private Date firstReadingTime; } diff --git a/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml b/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml index 594f6f1e8..477c0addb 100644 --- a/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml +++ b/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml @@ -41,6 +41,7 @@ , t.bill_read_status , t.bill_confirm_status , t.send_employee_id + , t.first_reading_time update hrsa_salary_send_info diff --git a/src/com/engine/salary/service/SalaryBillBaseSetService.java b/src/com/engine/salary/service/SalaryBillBaseSetService.java index f0d41e8dd..700a10770 100644 --- a/src/com/engine/salary/service/SalaryBillBaseSetService.java +++ b/src/com/engine/salary/service/SalaryBillBaseSetService.java @@ -56,5 +56,11 @@ public interface SalaryBillBaseSetService { */ salaryBillViewingLimitSetting getSalaryBillViewingLimitSetting(); + /** + * 获取首次查看后多少分钟不能查看工资单(0代表一旦查看后无法再次查看) + * @return + */ + Integer getBurningAfterReadingMin(); + } diff --git a/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java index 3859bdd95..ea9097e9d 100644 --- a/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java @@ -113,6 +113,7 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB salaryBillViewingLimitSetting salaryBillViewingLimitDTO = saveParam.getSalaryBillViewingLimitSetting(); if (salaryBillViewingLimitDTO != null) { getSalarySysConfService(user).saveSettingByType(Util.null2String(salaryBillViewingLimitDTO.getLimitMonth()), SALARY_BILL_VIEWING_LIMIT_MONTH, "工资单时效性设置", "billSend"); + getSalarySysConfService(user).saveSettingByType(Util.null2String(salaryBillViewingLimitDTO.getBurningAfterReadingMin()), SALARY_BILL_BURNING_AFTER_READING_MIN, "工资单查看后销毁设置", "billSend"); } return StringUtils.EMPTY; } @@ -169,13 +170,22 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB @Override public salaryBillViewingLimitSetting getSalaryBillViewingLimitSetting() { - SalarySysConfPO limitMonthSetting = getSalarySysConfService(user).getOneByCode(SALARY_BILL_VIEWING_LIMIT_MONTH); - int limitMonth = 0; if (limitMonthSetting != null && NumberUtils.isNumber(limitMonthSetting.getConfValue())) { limitMonth = Integer.parseInt(limitMonthSetting.getConfValue()); } return salaryBillViewingLimitSetting.builder().limitMonth(limitMonth).build(); } + + @Override + public Integer getBurningAfterReadingMin() { + SalarySysConfPO ineffectiveMinSetting = getSalarySysConfService(user).getOneByCode(SALARY_BILL_BURNING_AFTER_READING_MIN); + if (ineffectiveMinSetting == null || StringUtils.isBlank(ineffectiveMinSetting.getConfValue()) || !NumberUtils.isNumber(ineffectiveMinSetting.getConfValue())) { + // 代表该设置不生效,即首次读后可以一直查看 + return null; + } else { + return Integer.parseInt(ineffectiveMinSetting.getConfValue()); + } + } } diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 1189589c8..76c2b806b 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -501,6 +501,25 @@ public class SalarySendServiceImpl extends Service implements SalarySendService if (ObjectUtils.isEmpty(salarySendPO)) { throw new SalaryRunTimeException("工资单不存在"); } + // 获取、记录首次查看时间 + Date firstReadingTime = new Date(); + if (salarySendInfo.getFirstReadingTime() == null) { + salarySendInfo.setFirstReadingTime(firstReadingTime); + getSalarySendInfoMapper().updateIgnoreNull(salarySendInfo); + } else { + firstReadingTime = salarySendInfo.getFirstReadingTime(); + } + + // 获取首次查看后多少分钟不能查看工资单(0代表一旦查看后无法再次查看,null代表不限制) + Integer burningAfterReadingMin = getSalaryBillBaseSetService(user).getBurningAfterReadingMin(); + if (burningAfterReadingMin != null) { + LocalDateTime limitTime = SalaryDateUtil.dateToLocalDateTime(firstReadingTime).plusMinutes(burningAfterReadingMin); + LocalDateTime now = SalaryDateUtil.dateToLocalDateTime(new Date()); + if (limitTime.isAfter(now)) { + throw new SalaryRunTimeException("首次查看工资单" + burningAfterReadingMin + "分钟后,无法查看工资单"); + } + } + // 更新查看状态 if (salarySendInfo.getBillReadStatus() == null || NumberUtils.compare(salarySendInfo.getBillReadStatus(), BillReadStatusEnum.UNREAD.getValue()) == 0) { salarySendInfo.setBillReadStatus(BillReadStatusEnum.READED.getValue()); diff --git a/src/com/engine/salary/sys/constant/SalarySysConstant.java b/src/com/engine/salary/sys/constant/SalarySysConstant.java index b65ca4455..ff055b89e 100644 --- a/src/com/engine/salary/sys/constant/SalarySysConstant.java +++ b/src/com/engine/salary/sys/constant/SalarySysConstant.java @@ -111,6 +111,11 @@ public class SalarySysConstant { */ public static final String SALARY_BILL_VIEWING_LIMIT_MONTH = "SALARY_BILL_VIEWING_LIMIT_MONTH"; + /** + * 首次查看后多少分钟不能查看工资单 + */ + public static final String SALARY_BILL_BURNING_AFTER_READING_MIN= "SALARY_BILL_BURNING_AFTER_READING_MIN"; + /** * 核算固定列头数 */ diff --git a/src/com/engine/salary/wrapper/SalaryBillBaseSetWrapper.java b/src/com/engine/salary/wrapper/SalaryBillBaseSetWrapper.java index 0cf2f3495..505c19e0a 100644 --- a/src/com/engine/salary/wrapper/SalaryBillBaseSetWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryBillBaseSetWrapper.java @@ -49,6 +49,8 @@ public class SalaryBillBaseSetWrapper extends Service { SalaryBillWatermarkDTO salaryBillWatermark = getSalaryBillBaseSetService(user).getWatermarkSetting(); SalaryBillAckFeedbackDTO salaryBillAckFeedback = getSalaryBillBaseSetService(user).getDefaultAckFeedbackSetting(); salaryBillViewingLimitSetting salaryBillViewingLimitSetting = getSalaryBillBaseSetService(user).getSalaryBillViewingLimitSetting(); + Integer burningAfterReadingMin = getSalaryBillBaseSetService(user).getBurningAfterReadingMin(); + salaryBillViewingLimitSetting.setBurningAfterReadingMin(burningAfterReadingMin); if (Objects.isNull(salaryBillWatermark)) { dto.setWatermarkStatus(false);