Преглед изворни кода

修复费用报销的权限漏洞
修正可调休工时准确性

seyason пре 1 година
родитељ
комит
ab70c3b80d

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ReportMapper.java

@@ -135,7 +135,7 @@ public interface ReportMapper extends BaseMapper<Report> {
 
     List<Map> getSameDayPassReport(Integer companyId, @Param("dateReportList") List<Report> dateReportList);
 
-    double getMyOvertime(String userId);
+    double getMyOvertime(String userId, String startDate);
 
     List<Map<String, Object>> getProWaitingApproveCnt(Integer companyId);
 

+ 13 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ExpenseSheetServiceImpl.java

@@ -415,6 +415,7 @@ public class ExpenseSheetServiceImpl extends ServiceImpl<ExpenseSheetMapper, Exp
     @Override
     public HttpRespMsg queryList(ExpenseSheet sheet, String startDate, String endDate, Integer pageIndex, Integer pageSize) {
         QueryWrapper<ExpenseSheet> queryWrapper = new QueryWrapper<ExpenseSheet>();
+        //当前用户
         String token = request.getHeader("TOKEN");
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         queryWrapper.eq("company_id", sheet.getCompanyId()).orderByDesc("id");
@@ -432,8 +433,18 @@ public class ExpenseSheetServiceImpl extends ServiceImpl<ExpenseSheetMapper, Exp
         }
 
         if (expenseAuditSetting == null || expenseAuditSetting.getAuditType() == 0) {
-            if (!StringUtils.isEmpty(sheet.getOwnerId())) {
-                queryWrapper.eq("owner_id", sheet.getOwnerId());
+            if (sheet.getStatus() != null &&  sheet.getStatus() == 1) {
+                //待审核列表,检查是否有权限
+                User user = userMapper.selectById(token);
+                List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "费用审核");
+                if (functionList.size() == 0) {
+                    //无权查看待审核
+                    queryWrapper.eq("id", -1);
+                }
+            } else {
+                if (!StringUtils.isEmpty(sheet.getOwnerId())) {
+                    queryWrapper.eq("owner_id", sheet.getOwnerId());
+                }
             }
         } else if(expenseAuditSetting.getAuditType() == 1){
             //增加按项目经理审核模式下,项目经理可以查看相关费用报销单的条件

+ 43 - 11
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/LeaveSheetServiceImpl.java

@@ -473,18 +473,50 @@ public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSh
 
     @Override
     public HttpRespMsg getOTAvaiDays(String userId) {
-        //非驳回和撤回状态的都要统计进去
-        List<LeaveSheet> list = leaveSheetMapper.selectList(new QueryWrapper<LeaveSheet>().eq("owner_id", userId).eq("leave_type", exLeaveDay).ne("status", 2).ne("status", 3));
-        double alreadyHours = list.stream().mapToDouble(LeaveSheet::getTimeHours).sum();
-        double overtime = reportMapper.getMyOvertime(userId);
-        double leftHours = overtime - alreadyHours;
-        if (leftHours < 0) {
-            leftHours = 0;
-        }
-        float allDayHours = timeTypeMapper.selectById(userMapper.selectById(userId).getCompanyId()).getAllday();
-        double d = leftHours/allDayHours;
         HttpRespMsg msg = new HttpRespMsg();
-        msg.data = d;
+        String startDate = null;
+        User user = userMapper.selectById(userId);
+
+        if (user.getCompanyId() == 7) {
+            //火石闪信,从2023年8月1日开始计算加班工时
+            startDate = "2023-08-01";
+            //获取startDate之前的,2023年的全部非工作日加班
+            String firstDay = "2023-01-01";
+            String endDate = startDate;
+            List<String> allHolidays = WorkDayCalculateUtils.getAllHolidays(firstDay, endDate);
+            double beforeHours = 0;
+            if (allHolidays.size() > 0) {
+                List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>().select("IFNULL(sum(overtime_hours),0) as working_time").in("create_date", allHolidays).eq("creator_id", userId));
+                double sum = reportList.stream().mapToDouble(Report::getWorkingTime).sum();
+                beforeHours = sum;
+            }
+
+            //只统计2023年1月1日之后的调休假
+            List<LeaveSheet> list = leaveSheetMapper.selectList(new QueryWrapper<LeaveSheet>()
+                    .eq("owner_id", userId).eq("leave_type", exLeaveDay).ne("status", 2).ne("status", 3).ge("start_date", firstDay));
+            double alreadyHours = list.stream().mapToDouble(LeaveSheet::getTimeHours).sum();
+            double overtime = reportMapper.getMyOvertime(userId, startDate);
+            double leftHours = beforeHours + overtime - alreadyHours;
+            if (leftHours < 0) {
+                leftHours = 0;
+            }
+            float allDayHours = timeTypeMapper.selectById(userMapper.selectById(userId).getCompanyId()).getAllday();
+            double d = leftHours/allDayHours;
+            msg.data = d;
+        } else {
+            //非驳回和撤回状态的都要统计进去
+            List<LeaveSheet> list = leaveSheetMapper.selectList(new QueryWrapper<LeaveSheet>().eq("owner_id", userId).eq("leave_type", exLeaveDay).ne("status", 2).ne("status", 3));
+            double alreadyHours = list.stream().mapToDouble(LeaveSheet::getTimeHours).sum();
+            double overtime = reportMapper.getMyOvertime(userId, startDate);
+            double leftHours = overtime - alreadyHours;
+            if (leftHours < 0) {
+                leftHours = 0;
+            }
+            float allDayHours = timeTypeMapper.selectById(userMapper.selectById(userId).getCompanyId()).getAllday();
+            double d = leftHours/allDayHours;
+            msg.data = d;
+        }
+
         return msg;
     }
 

+ 17 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/WorkDayCalculateUtils.java

@@ -321,4 +321,21 @@ public class WorkDayCalculateUtils {
 //        System.out.println(sameWeek(date1, date2));
 //        System.out.println(sameMonth(date1, date2));
     }
+
+    public static List<String> getAllHolidays(String firstDay, String endDate) {
+        List<String> dateList = new ArrayList<>();
+        LocalDate localStartDate = LocalDate.parse(firstDay, dateTimeFormatter);
+        LocalDate localEndDate = LocalDate.parse(endDate, dateTimeFormatter);
+        while(true) {
+            localStartDate = localStartDate.plusDays(1);
+            if (!isWorkDay(localStartDate)) {
+                dateList.add(localStartDate.format(dateTimeFormatter));
+            }
+            //到达结束日期,结束计算
+            if (localStartDate.isEqual(localEndDate)) {
+                break;
+            }
+        }
+        return dateList;
+    }
 }

+ 3 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml

@@ -869,6 +869,9 @@
     </select>
     <select id="getMyOvertime"  resultType="java.lang.Double">
         select IFNULL(sum(overtime_hours),0) from report where creator_id=#{userId}
+        <if test="startDate != null">
+        and create_date &gt;= #{startDate}
+        </if>
     </select>
     <select id="getProWaitingApproveCnt" resultType="java.util.HashMap">
         select count(1) as num, user.dingding_userid as auditorDDId ,user.corpwx_userid as corpwxUserid from report