From fede14ba42d17cf49434a7ac8a640d3736188c81 Mon Sep 17 00:00:00 2001 From: sy Date: Wed, 29 May 2024 13:21:18 +0800 Subject: [PATCH] =?UTF-8?q?=E8=80=83=E5=8B=A4=EF=BC=8C=E8=80=83=E5=8B=A4?= =?UTF-8?q?=E6=B1=87=E6=80=BB=E6=8A=A5=E8=A1=A8=E5=AF=BC=E5=87=BA=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D=E3=80=81=E8=80=83?= =?UTF-8?q?=E5=8B=A4=E6=B1=87=E6=80=BB=E6=8A=A5=E8=A1=A8=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=A2=9E=E5=8A=A0=E5=88=86=E6=9D=83=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/AttendanceSummaryServiceImpl.java | 170 +++++++++++++++++- .../cmd/GetCqSummarySearchConditionCmd.java | 4 +- src/com/engine/common/util/CommonUtil.java | 65 +++++++ 3 files changed, 228 insertions(+), 11 deletions(-) diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/AttendanceSummaryServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/AttendanceSummaryServiceImpl.java index 0f97c87..0e2d974 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/impl/AttendanceSummaryServiceImpl.java +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/AttendanceSummaryServiceImpl.java @@ -2,8 +2,11 @@ package com.engine.attendance.attendanceanalysis.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.engine.attendance.enums.PersonGroupListTypeEnum; import com.engine.attendance.workflow.cmd.GetCqSummarySearchConditionCmd; import com.engine.attendance.attendanceanalysis.service.AttendanceSummaryService; +import com.engine.common.exception.AttendanceRunTimeException; +import com.engine.common.util.CommonUtil; import com.engine.common.util.DbTools; import com.engine.core.impl.Service; import com.engine.kq.biz.KQHolidaySetBiz; @@ -24,6 +27,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.time.LocalDate; import java.util.*; +import java.util.stream.Collectors; /** @@ -366,7 +370,11 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS for (Map dataItem : resultList) { data = new ArrayList<>(); for (String columnKey : showColumnKeyList) { - data.add(Util.null2String(dataItem.get(columnKey))); + if (columnKey.equals("subcompany") || columnKey.equals("department")) { + data.add(Util.formatMultiLang(Util.null2String(dataItem.get(columnKey)), String.valueOf(user.getLanguage()))); + } else { + data.add(Util.null2String(dataItem.get(columnKey))); + } } dataList.add(data); } @@ -395,6 +403,7 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS sheet.put("sheetTitle", SystemEnv.getHtmlLabelName(390351, user.getLanguage())); sheet.put("dataList", dataList); sheet.put("titleList", titleList); + sheet.put("createFile", "1"); List lsSheet = new ArrayList<>(); lsSheet.add(sheet); @@ -403,6 +412,8 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS workbook.put("fileName", SystemEnv.getHtmlLabelName(390351, user.getLanguage())); ExcelUtil ExcelUtil = new ExcelUtil(); Map exportMap= ExcelUtil.export(workbook,request,response); + bs.writeLog("考勤汇总报表导出:"); + bs.writeLog(Util.null2String(exportMap.get("url"))); retmap.putAll(exportMap); retmap.put("status", "1"); } catch (Exception e) { @@ -567,6 +578,19 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS } private List> getDtDates(String targetYear, String targetMonth, String status, String subCompanyIds, String depIds, String empIds) { + //20240528需求变更, + // 当前登录人员为人员分组管理员时,取其管理的人员明细(人员id,生效日期,失效日期)来筛选待汇总的数据; + // 当前登录人员非人员分组管理员时,取其下属的人员id来筛选待汇总的数据 + Map userManageInfo = getUserManageInfo(); + List targetEmpIdList = new ArrayList<>(); + if (!"".equals(empIds)) { + targetEmpIdList = getManageEmpIds(userManageInfo, Arrays.asList(empIds.split(",")), targetYear + "-" + targetMonth); + } else { + targetEmpIdList = getManageEmpIds(userManageInfo, new ArrayList<>(), targetYear + "-" + targetMonth); + } + if (targetEmpIdList.size() == 0) { + return new ArrayList<>(); + } String mainListSql = "select * from uf_jcl_kq_cqhz where nd= " + targetYear + " and yf = " + targetMonth; List> mainDates = DbTools.getSqlToList(mainListSql); List mainIds = new ArrayList<>(); @@ -588,8 +612,9 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS if (!depIds.equals("")) { dtListSql = dtListSql + " and a.gzbm in (" + depIds + ")"; } - if (!empIds.equals("")) { - dtListSql = dtListSql + " and a.ry in (" + empIds + ")"; + if (targetEmpIdList.size() > 0) { +// dtListSql = dtListSql + " and a.ry in (" + empIds + ")"; + dtListSql = dtListSql + " and a.ry in (" + String.join(",",targetEmpIdList) + ")"; } if (mainIds.size() > 0) { dtListSql = dtListSql + " and a.mainid in (" + String.join(",", mainIds) + ")"; @@ -602,6 +627,56 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS } + private List getManageEmpIds(Map userManageInfo, List empIdList, String yearMonth) { + List manageEmpIdList = new ArrayList<>(); + manageEmpIdList.add(String.valueOf(user.getUID())); + boolean groupManageSign = (boolean) userManageInfo.get("groupManageSign"); + if (groupManageSign) { + userManageInfo.remove("groupManageSign"); + String listType = (String) userManageInfo.get("listType"); + if (PersonGroupListTypeEnum.PERSON.getKey().equals(listType)) { + userManageInfo.remove("listType"); + userManageInfo.forEach((key, value) -> { + Map forceTimeItem = (Map) value; + String startDate = (String) forceTimeItem.get("startDate"); + String endDate = (String) forceTimeItem.get("endDate"); + if (startDate.substring(0,7).compareTo(yearMonth) <= 0 && ("".equals(endDate) || endDate.substring(0,7).compareTo(yearMonth) >= 0)) { + manageEmpIdList.add(key); + } + + }); + } else if (PersonGroupListTypeEnum.CONDITION.getKey().equals(listType)) { + userManageInfo.remove("listType"); + userManageInfo.forEach((key, value) -> { + List> forceTimeItemList = (List>) value; + boolean forceTimeAllowSign; + for (Map forceTimeItem : forceTimeItemList) { + String startDate = (String) forceTimeItem.get("startDate"); + String endDate = (String) forceTimeItem.get("endDate"); + forceTimeAllowSign = startDate.substring(0,7).compareTo(yearMonth) <= 0 && ("".equals(endDate) || endDate.substring(0,7).compareTo(yearMonth) >= 0); + if (forceTimeAllowSign) { + manageEmpIdList.add(key); + break; + } + } + }); + + } + } else { + List subEmpIdList = (List) userManageInfo.get("subEmpIdList"); + manageEmpIdList.addAll(subEmpIdList); + } + if (empIdList.size() > 0) { + empIdList = empIdList.stream() + .filter(manageEmpIdList::contains) + .distinct() + .collect(Collectors.toList()); + } else { + empIdList = manageEmpIdList.stream().distinct().collect(Collectors.toList()); + } + return empIdList; + } + /** * 获取临时出勤汇总数据 * 基于入参中分部、部门、人员id、人员状态、考勤时间区间等字段, @@ -639,22 +714,26 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS //人员状态,试用-0,正式-1,临时-2,试用延期-3,解聘-4,离职-5,退休-6,无效-7,在职-8,全部-9 String empStatus = Util.null2String(params.get("status"));//人员状态 bs.writeLog("startDate : " + startDate + ", endDate : " + endDate + ", subCompanyIds : " + subCompanyIds + ", departmentIds : " + departmentIds + ", empIds : " + empIds + ", empStatus : " + empStatus); + //20240528需求变更, + // 当前登录人员为人员分组管理员时,取其管理的人员明细(人员id,生效日期,失效日期)来筛选待汇总的数据; + // 当前登录人员非人员分组管理员时,取其下属的人员id来筛选待汇总的数据 + Map userManageInfo = getUserManageInfo(); if (!startDate.equals("") && !endDate.equals("")) { //临时汇总出勤结果表、补打卡表、出勤津贴表数据 //出勤结果表 - List> cqAddList = getTemCqAddList(startDate, endDate, subCompanyIds, departmentIds, empIds, empStatus); + List> cqAddList = getTemCqAddList(startDate, endDate, subCompanyIds, departmentIds, empIds, empStatus, userManageInfo); bs.writeLog("cqAddList_size : " + cqAddList.size()); if (cqAddList.size() > 0) { addList.addAll(cqAddList); } //补打卡表 - List> bdkAddList = getTemBdkAddList(startDate, endDate, subCompanyIds, departmentIds, empIds, empStatus); + List> bdkAddList = getTemBdkAddList(startDate, endDate, subCompanyIds, departmentIds, empIds, empStatus, userManageInfo); bs.writeLog("bdkAddList_size : " + bdkAddList.size()); if (bdkAddList.size() > 0) { addList.addAll(bdkAddList); } //出勤津贴表 - List> cqjtAddList = getTemCqjtAddList(startDate, endDate, subCompanyIds, departmentIds, empIds, empStatus); + List> cqjtAddList = getTemCqjtAddList(startDate, endDate, subCompanyIds, departmentIds, empIds, empStatus, userManageInfo); bs.writeLog("cqjtAddList_size : " + cqjtAddList.size()); if (cqjtAddList.size() > 0) { addList.addAll(cqjtAddList); @@ -664,6 +743,32 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS return addList; } + //获取当前登录者所能管理的人员信息, + // 如果其是分组管理员,则从分组明细中获取被管理人员的人员id和管理时间区间信息; + // 否则只获取将当前登录人员作为直接上级的人员信息 + private Map getUserManageInfo() { + Map userManageInfo = new HashMap<>(); + String sql = "select * from uf_ryqz where fzgly = " + user.getUID() + " and (delete_type=0 or delete_type is null)"; + List> data = DbTools.getSqlToList(sql); + if (data.size() == 1) { + userManageInfo.put("groupManageSign", true); + Map empGroupUserInfo = CommonUtil.getEmpGroupUserInfo(data.get(0).get("id").toString()); + userManageInfo.putAll(empGroupUserInfo); + } else if (data.size() > 1) { + throw new AttendanceRunTimeException("当前登录人:" + user.getLastname() + "不可以同时管理一个以上的人员分组!"); + } else { + userManageInfo.put("groupManageSign", false); + String subEmpSql = "select * from hrmresource where managerid = " + user.getUID(); + List> subEmpData = DbTools.getSqlToList(subEmpSql); + List subEmpIdList = new ArrayList<>(); + for (Map map : subEmpData) { + subEmpIdList.add(map.get("id").toString()); + } + userManageInfo.put("subEmpIdList", subEmpIdList); + } + return userManageInfo; + } + //汇总出勤结果表 public List> getCqAddList(String mainId, String subCompanyListStr, String startDate, String endDate) { String cqSql = "select * from uf_jcl_kq_cqjg where fbid in (" + subCompanyListStr + ") and rq >= '" + startDate +"'" + " and rq <= '" + endDate +"'"; @@ -1048,7 +1153,7 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS } //临时汇总出勤结果表 - private List> getTemCqAddList(String startDate, String endDate, String subCompanyIds, String departmentIds, String empIds, String empStatus) { + private List> getTemCqAddList(String startDate, String endDate, String subCompanyIds, String departmentIds, String empIds, String empStatus, Map userManageInfo) { String cqSql = "select a.* from uf_jcl_kq_cqjg a left join hrmresource b on a.ygid = b.id where a.rq >= '" + startDate +"'" + " and a.rq <= '" + endDate +"'"; if (!subCompanyIds.equals("")) { cqSql = cqSql + " and a.fbid in (" + subCompanyIds + ")"; @@ -1070,6 +1175,10 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS //先根据分部、部门、人员、项目分组 Map>> toDealCqDataWithGroup = new HashMap<>(); for (Map map : cqDates) { + //20240528需求变更,校验当前登录人是否有权限查看相关数据 + if (!checkViewAuth(userManageInfo, map.get("rq").toString(), map.get("ygid").toString())) { + continue; + } //出勤状态 String cqzt = Util.null2String(map.get("cqzt")); if (!cqzt.equals("")) { @@ -1325,8 +1434,43 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS } return cqAddList; } + + private boolean checkViewAuth(Map userManageInfo, String rq, String empId) { + if (empId.equals(String.valueOf(user.getUID()))) { + return true; + } + boolean groupManageSign = (boolean) userManageInfo.get("groupManageSign"); + if (groupManageSign) { + if (userManageInfo.get(empId) == null) { + return false; + } + String listType = (String) userManageInfo.get("listType"); + if (listType.equals(PersonGroupListTypeEnum.PERSON.getKey())) { + Map forceTimeItem = (Map) userManageInfo.get(empId); + String startDate = (String) forceTimeItem.get("startDate"); + String endDate = (String) forceTimeItem.get("endDate"); + return rq.compareTo(startDate) >= 0 && ("".equals(endDate) || rq.compareTo(endDate) <= 0); + } else if (listType.equals(PersonGroupListTypeEnum.CONDITION.getKey())) { + List> forceTimeItemList = (List>) userManageInfo.get(empId); + boolean forceTimeAllowSign; + for (Map forceTimeItem : forceTimeItemList) { + String startDate = (String) forceTimeItem.get("startDate"); + String endDate = (String) forceTimeItem.get("endDate"); + forceTimeAllowSign = rq.compareTo(startDate) >= 0 && ("".equals(endDate) || rq.compareTo(endDate) <= 0); + if (forceTimeAllowSign) { + return true; + } + } + } + } else { + List subEmpIdList = (List) userManageInfo.get("subEmpIdList"); + return subEmpIdList.size() > 0 && subEmpIdList.contains(empId); + } + return false; + } + //临时汇总补打卡表 - private List> getTemBdkAddList(String startDate, String endDate, String subCompanyIds, String departmentIds, String empIds, String empStatus) { + private List> getTemBdkAddList(String startDate, String endDate, String subCompanyIds, String departmentIds, String empIds, String empStatus, Map userManageInfo) { String bdkSql = "select a.*, b.fbid, b.bm from uf_jcl_kq_bdkjl a " + "left join uf_jcl_kq_cqjg b on a.bdkry = b.ygid and a.dkrq = b.rq " + "left join hrmresource c on a.bdkry = c.id " + @@ -1351,6 +1495,10 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS //先根据分部、部门、人员、项目分组 Map>> toDealBdkDataWithGroup = new HashMap<>(); for (Map map : bdkDates) { + //20240528需求变更,校验当前登录人是否有权限查看相关数据 + if (!checkViewAuth(userManageInfo, map.get("dkrq").toString(), map.get("bdkry").toString())) { + continue; + } //补打卡项目 if (!Util.null2String(map.get("bdklx")).equals("")) { String groupKey = map.get("fbid") + "_" + map.get("bm") + "_" + map.get("bdkry") + "_" + map.get("bdklx"); @@ -1389,7 +1537,7 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS return bdkAddList; } //临时汇总出勤津贴表 - private List> getTemCqjtAddList(String startDate, String endDate, String subCompanyIds, String departmentIds, String empIds, String empStatus) { + private List> getTemCqjtAddList(String startDate, String endDate, String subCompanyIds, String departmentIds, String empIds, String empStatus, Map userManageInfo) { String cqjtSql = "select a.*, b.fbid, b.bm from uf_jcl_kq_cqjt a " + "left join uf_jcl_kq_cqjg b on a.yg = b.ygid and a.rq = b.rq " + "left join hrmresource c on a.yg = c.id " + @@ -1414,6 +1562,10 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS //先根据分部、部门、人员、项目分组 Map>> toDealCqjtDataWithGroup = new HashMap<>(); for (Map map : cqjtDates) { + //20240528需求变更,校验当前登录人是否有权限查看相关数据 + if (!checkViewAuth(userManageInfo, map.get("rq").toString(), map.get("yg").toString())) { + continue; + } //津贴类型 if (!Util.null2String(map.get("jtlx")).equals("")) { String groupKey = map.get("fbid") + "_" + map.get("bm") + "_" + map.get("bdkry") + "_" + map.get("bdklx"); diff --git a/src/com/engine/attendance/workflow/cmd/GetCqSummarySearchConditionCmd.java b/src/com/engine/attendance/workflow/cmd/GetCqSummarySearchConditionCmd.java index c86aa30..9125657 100644 --- a/src/com/engine/attendance/workflow/cmd/GetCqSummarySearchConditionCmd.java +++ b/src/com/engine/attendance/workflow/cmd/GetCqSummarySearchConditionCmd.java @@ -55,9 +55,9 @@ public class GetCqSummarySearchConditionCmd extends AbstractCommonCommand getEmpGroupUserInfo(String empGroupId){ + String sql = "select b.mainid,b.empid,b.filters,b.bdate,b.edate,a.list_type from uf_ryqz a left join uf_ryqz_dt1 b on a.id=b.mainid where mainid = " + empGroupId; + List> personGroupDataList = DbTools.getSqlToListKeySmallLetter(sql); + + Map empGroupUserInfo = new HashMap<>(); + Map forceTimeItem = null; + List> forceTimeItemList = null; + for (Map personGroupData :personGroupDataList){ + String id = Util.null2String(personGroupData.get("mainid")); + String empid = Util.null2String(personGroupData.get("empid")); + String bdate = Util.null2String(personGroupData.get("bdate")); + String edate = Util.null2String(personGroupData.get("edate")); + String filters = Util.null2String(personGroupData.get("filters")); + String list_type = Util.null2String(personGroupData.get("list_type")); + + if ("0".equals(list_type) && !"".equals(empid)){ + //人员清单 + empGroupUserInfo.put("listType", PersonGroupListTypeEnum.PERSON.getKey()); + forceTimeItem = new HashMap<>(); + forceTimeItem.put("startDate", bdate); + forceTimeItem.put("endDate", edate); + empGroupUserInfo.put(empid, forceTimeItem); + }else if ("1".equals(list_type) && !"".equals(filters)){ + empGroupUserInfo.put("listType", PersonGroupListTypeEnum.CONDITION.getKey()); + //条件清单 + sql = "select id,seclevel from hrmresource where 1=1 "; + if (filters.contains("field")){ + sql = "select a.id,a.seclevel from hrmresource a left join cus_fielddata b on a.id=b.id where scope='HrmCustomFieldByInfoType' and scopeid=-1 and "+filters; + }else { + filters = filters.replace("and","and"); + filters = filters.replace("or","or"); + sql = sql+ " and "+filters; + } + log.info("getPersonnelGroupingByPerson filter sql : {}",sql); + List> dataList = DbTools.getSqlToListKeySmallLetter(sql); + for (Map dataMap :dataList){ + String hrmId = Util.null2String(dataMap.get("id")); + String seclevel = Util.null2String(dataMap.get("seclevel")); + if (empGroupUserInfo.get(hrmId) == null) { + forceTimeItemList = new ArrayList<>(); + forceTimeItem = new HashMap<>(); + forceTimeItem.put("startDate", bdate); + forceTimeItem.put("endDate", edate); + forceTimeItemList.add(forceTimeItem); + empGroupUserInfo.put(hrmId, forceTimeItemList); + } else { + List> existForceTimeItemList = (List>) empGroupUserInfo.get(hrmId); + forceTimeItem = new HashMap<>(); + forceTimeItem.put("startDate", bdate); + forceTimeItem.put("endDate", edate); + existForceTimeItemList.add(forceTimeItem); + empGroupUserInfo.put(hrmId, existForceTimeItemList); + } + } + } + } + return empGroupUserInfo; + } + /** * 获取附带假期使用额度概念的假期类型列表 * @return