考勤,考勤汇总报表导出功能问题修复、考勤汇总报表查询功能增加分权逻辑

zm_dev
sy 1 year ago
parent 23459242c7
commit fede14ba42

@ -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<String, String> 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<Object> 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<String,Object> 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<Map<String,Object>> getDtDates(String targetYear, String targetMonth, String status, String subCompanyIds, String depIds, String empIds) {
//20240528需求变更,
// 当前登录人员为人员分组管理员时取其管理的人员明细人员id,生效日期,失效日期)来筛选待汇总的数据;
// 当前登录人员非人员分组管理员时取其下属的人员id来筛选待汇总的数据
Map<String, Object> userManageInfo = getUserManageInfo();
List<String> 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<Map<String,Object>> mainDates = DbTools.getSqlToList(mainListSql);
List<String> 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<String> getManageEmpIds(Map<String, Object> userManageInfo, List<String> empIdList, String yearMonth) {
List<String> 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<String, Object> forceTimeItem = (Map<String, Object>) 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<Map<String, Object>> forceTimeItemList = (List<Map<String, Object>>) value;
boolean forceTimeAllowSign;
for (Map<String, Object> 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<String> subEmpIdList = (List<String>) 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<String, Object> userManageInfo = getUserManageInfo();
if (!startDate.equals("") && !endDate.equals("")) {
//临时汇总出勤结果表、补打卡表、出勤津贴表数据
//出勤结果表
List<Map<String, Object>> cqAddList = getTemCqAddList(startDate, endDate, subCompanyIds, departmentIds, empIds, empStatus);
List<Map<String, Object>> cqAddList = getTemCqAddList(startDate, endDate, subCompanyIds, departmentIds, empIds, empStatus, userManageInfo);
bs.writeLog("cqAddList_size : " + cqAddList.size());
if (cqAddList.size() > 0) {
addList.addAll(cqAddList);
}
//补打卡表
List<Map<String, Object>> bdkAddList = getTemBdkAddList(startDate, endDate, subCompanyIds, departmentIds, empIds, empStatus);
List<Map<String, Object>> bdkAddList = getTemBdkAddList(startDate, endDate, subCompanyIds, departmentIds, empIds, empStatus, userManageInfo);
bs.writeLog("bdkAddList_size : " + bdkAddList.size());
if (bdkAddList.size() > 0) {
addList.addAll(bdkAddList);
}
//出勤津贴表
List<Map<String, Object>> cqjtAddList = getTemCqjtAddList(startDate, endDate, subCompanyIds, departmentIds, empIds, empStatus);
List<Map<String, Object>> 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<String, Object> getUserManageInfo() {
Map<String, Object> userManageInfo = new HashMap<>();
String sql = "select * from uf_ryqz where fzgly = " + user.getUID() + " and (delete_type=0 or delete_type is null)";
List<Map<String, Object>> data = DbTools.getSqlToList(sql);
if (data.size() == 1) {
userManageInfo.put("groupManageSign", true);
Map<String, Object> 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<Map<String, Object>> subEmpData = DbTools.getSqlToList(subEmpSql);
List<String> subEmpIdList = new ArrayList<>();
for (Map<String, Object> map : subEmpData) {
subEmpIdList.add(map.get("id").toString());
}
userManageInfo.put("subEmpIdList", subEmpIdList);
}
return userManageInfo;
}
//汇总出勤结果表
public List<Map<String, String>> 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<Map<String, Object>> getTemCqAddList(String startDate, String endDate, String subCompanyIds, String departmentIds, String empIds, String empStatus) {
private List<Map<String, Object>> getTemCqAddList(String startDate, String endDate, String subCompanyIds, String departmentIds, String empIds, String empStatus, Map<String, Object> 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<String, List<Map<String,Object>>> toDealCqDataWithGroup = new HashMap<>();
for (Map<String,Object> 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<String, Object> 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<String, Object> forceTimeItem = (Map<String, Object>) 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<Map<String, Object>> forceTimeItemList = (List<Map<String, Object>>) userManageInfo.get(empId);
boolean forceTimeAllowSign;
for (Map<String, Object> 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<String> subEmpIdList = (List<String>) userManageInfo.get("subEmpIdList");
return subEmpIdList.size() > 0 && subEmpIdList.contains(empId);
}
return false;
}
//临时汇总补打卡表
private List<Map<String, Object>> getTemBdkAddList(String startDate, String endDate, String subCompanyIds, String departmentIds, String empIds, String empStatus) {
private List<Map<String, Object>> getTemBdkAddList(String startDate, String endDate, String subCompanyIds, String departmentIds, String empIds, String empStatus, Map<String, Object> 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<String, List<Map<String,Object>>> toDealBdkDataWithGroup = new HashMap<>();
for (Map<String,Object> 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<Map<String, Object>> getTemCqjtAddList(String startDate, String endDate, String subCompanyIds, String departmentIds, String empIds, String empStatus) {
private List<Map<String, Object>> getTemCqjtAddList(String startDate, String endDate, String subCompanyIds, String departmentIds, String empIds, String empStatus, Map<String, Object> 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<String, List<Map<String,Object>>> toDealCqjtDataWithGroup = new HashMap<>();
for (Map<String,Object> 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");

@ -55,9 +55,9 @@ public class GetCqSummarySearchConditionCmd extends AbstractCommonCommand<Map<St
//展示列、时间范围、数据范围
WeaRadioGroup wrg = null;
if(kq_personal_reportsearch) {
options = new String[]{"1,15537,false","2,15539,false","3,15541,false","7,27347,false","4,21904,false","6,32530,false", "9,18196,true", "10,526968,false"};
options = new String[]{"1,15537,false","2,15539,false","3,15541,false","7,27347,false","4,21904,false","6,32530,false", "9,18196,true", "10,547111,false"};
} else {
options = new String[]{"1,15537,false","2,15539,false","3,15541,false","7,27347,false","4,21904,false","5,15384,false","8,81716,false","6,32530,false", "9,18196,true", "10,526968,false"};
options = new String[]{"1,15537,false","2,15539,false","3,15541,false","7,27347,false","4,21904,false","5,15384,false","8,81716,false","6,32530,false", "9,18196,true", "10,547111,false"};
}
wrg = hrmAdvancedSearchUtil.getAdvanceCondition("typeselect","19482",options,null,user);
wrg.setLabelcol(3);

@ -3,6 +3,7 @@ package com.engine.common.util;
import com.engine.attendance.component.persongroup.commonutil.PersongroupCommonUtil;
import com.engine.attendance.enums.ApplicableOrganizationEnum;
import com.engine.attendance.enums.CheckBoxEnum;
import com.engine.attendance.enums.PersonGroupListTypeEnum;
import com.google.common.collect.Maps;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
@ -520,6 +521,70 @@ public class CommonUtil {
return empIdList;
}
/**
* id-
* @param empGroupId id
* @return
*/
public static Map<String, Object> 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<Map<String,Object>> personGroupDataList = DbTools.getSqlToListKeySmallLetter(sql);
Map<String, Object> empGroupUserInfo = new HashMap<>();
Map<String, Object> forceTimeItem = null;
List<Map<String, Object>> forceTimeItemList = null;
for (Map<String,Object> 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");
filters = filters.replace("","or");
sql = sql+ " and "+filters;
}
log.info("getPersonnelGroupingByPerson filter sql : {}",sql);
List<Map<String,Object>> dataList = DbTools.getSqlToListKeySmallLetter(sql);
for (Map<String,Object> 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<Map<String, Object>> existForceTimeItemList = (List<Map<String, Object>>) empGroupUserInfo.get(hrmId);
forceTimeItem = new HashMap<>();
forceTimeItem.put("startDate", bdate);
forceTimeItem.put("endDate", edate);
existForceTimeItemList.add(forceTimeItem);
empGroupUserInfo.put(hrmId, existForceTimeItemList);
}
}
}
}
return empGroupUserInfo;
}
/**
* 使
* @return

Loading…
Cancel
Save