You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

956 lines
46 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.engine.jucailinkq.common.util;
import com.engine.jucailinkq.attendance.attendanceanalysis.cmd.getclockInpoint.biz.AbstractAdjustClockPointAction;
import com.engine.jucailinkq.attendance.component.persongroup.commonutil.PersongroupCommonUtil;
import com.engine.jucailinkq.attendance.enums.ApplicableOrganizationEnum;
import com.engine.jucailinkq.attendance.enums.CheckBoxEnum;
import com.engine.jucailinkq.attendance.enums.PersonGroupListTypeEnum;
import com.engine.jucailinkq.common.exception.AttendanceRunTimeException;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j;
import weaver.conn.RecordSetTrans;
import weaver.general.Util;
import weaver.hrm.company.DepartmentComInfo;
import weaver.soa.workflow.request.*;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
public class CommonUtil {
/**
* 组装insert的sql语句
* @param tableName 表名
* @param map 列名及对应值
* @return
*/
public static boolean makeInsertSql(String tableName, Map<String,Object> map){
String insertSql = "insert into "+tableName;
String key = "(";
String value = "(";
List<Object> dataList = Lists.newArrayList();
for (Map.Entry<String,Object> e : map.entrySet()){
if (e.getValue() != null && !"".equals(e.getValue())){
key = key + e.getKey() +",";
value = value + "?" +",";
// if (e.getKey().endsWith("date")){
// LocalDateTime localDateTime = DateUtil.getTime(String.valueOf(e.getValue()));
// long datelong = localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli();
// dataList.add(new Date(datelong));
// }else {
dataList.add(e.getValue());
// }
}
}
key = key.substring(0,key.length()-1) + ")";
value = value.substring(0,value.length()-1)+")";
insertSql = insertSql + key +" values "+value;
log.debug("makeInsertSql : [{}]",insertSql);
log.debug("needInsertDate: [{}]",dataList);
return DbTools.update(insertSql,dataList);
}
/**
* 组装update的sql语句
* @param tableName 表名
* @param map 列名及对应值
* @param condition 条件
* @return
*/
public static String makeUpdateSql(String tableName, Map<String,Object> map,Map<String,Object> condition){
String updateSql = "update "+tableName+" set ";
for (Map.Entry<String,Object> e : map.entrySet()){
if (e.getValue() !=null && !"".equals(e.getValue()) && !e.getKey().equals("id")){
updateSql = updateSql + e.getKey()+"='"+e.getValue().toString()+"',";
}
}
updateSql = updateSql.substring(0,updateSql.length()-1) + " where 1=1";
for (Map.Entry<String,Object> e : condition.entrySet()){
updateSql = updateSql + " and "+ e.getKey()+"='"+e.getValue()+"'";
}
log.debug("makeUpdateSql : [{}]",updateSql);
return updateSql;
}
/**
* 批量插入
* @param dataList
* @param tableName
* @return
*/
public static boolean insertBatch(List<Map<String,Object>> dataList, String tableName){
String sql = "insert into "+tableName;
String key = "(";
String value = "(";
for (Map.Entry<String,Object> data : dataList.get(0).entrySet()){
key = key + data.getKey() +",";
value = value + "?,";
}
key = key.substring(0,key.length()-1) + ")";
value = value.substring(0,value.length()-1)+")";
sql = sql + key +" values "+value;
log.debug("insertBatch sql :"+sql);
List<List> insertDataList = Lists.newArrayList();
for (Map<String,Object> dataMap : dataList){
ArrayList<Object> list = new ArrayList<>();
for (Map.Entry<String,Object> entry : dataMap.entrySet()){
list.add(entry.getValue());
}
insertDataList.add(list);
}
log.debug("insertBatch : [{}]",insertDataList);
return DbTools.updateBatch(sql,insertDataList);
}
/**
* 获得包含该人员的适用范围的模块的数据id按照人员-人员分组-部门-分部优先级取到最优先的
* @param resourceId
* @param modeId
* @param date
* @return
*/
public static Set<String> getDataIds(String resourceId,String modeId,String date){
String sql = "select dxlx,dataid,dx from uf_jcl_syzz where modeid=?";
List<Map<String,Object>> organizationList = DbTools.getSqlToList(sql,modeId);
sql = "select id,departmentid,subcompanyid1 from hrmresource where id =?";
Map<String,Object> departMentMap = DbTools.getSqlToMap(sql,resourceId);
Set<String> dataIds = Sets.newHashSet();
Map<String, List<Map<String,Object>>> organizationListGroupBydxlx = organizationList.stream().collect(Collectors.groupingBy(e ->e.get("dxlx").toString()));
//对象类型为人员
List<Map<String,Object>> personOrganizationList = organizationListGroupBydxlx.get("0");
//对象类型为人员组织
List<Map<String,Object>> personGroupOrganizationList = organizationListGroupBydxlx.get("1");
//对象类型为部门
List<Map<String,Object>> departmentOrganizationList = organizationListGroupBydxlx.get("2");
//对象类型为分部
List<Map<String,Object>> subCompanyOrganizationList = organizationListGroupBydxlx.get("3");
if (personOrganizationList != null){
for (Map<String,Object> personOrganization :personOrganizationList){
String dx = Util.null2String(personOrganization.get("dx"));
String ids = dx.split("-")[0];
if (ids.equals(resourceId)){
dataIds.add(Util.null2String(personOrganization.get("dataid")));
}
}
}
if (personGroupOrganizationList != null && dataIds.size() ==0){
Set<String> personGroupIds = personGroupOrganizationList.stream().map(e -> Util.null2String(e.get("dx")).split("-")[0]).collect(Collectors.toSet());
sql = "select mainid,empid,filters,bdate,edate,sqltj from uf_ryqz_dt1 where mainid in ("+String.join(",",personGroupIds)+")";
log.debug("query personGroupData : {}",sql);
List<Map<String,Object>> personGroupData = DbTools.getSqlToList(sql);
Set<String> personnelGroupIds = PersongroupCommonUtil.getPersonnelGroupingByPerson(personGroupData,resourceId,date);
log.debug("personnelGroupIds : {}",personnelGroupIds);
for (Map<String,Object> personGroupOrganization :personGroupOrganizationList){
String personnelGroupId = Util.null2String(personGroupOrganization.get("dx")).split("-")[0];
if (personnelGroupIds.contains(personnelGroupId)){
dataIds.add(Util.null2String(personGroupOrganization.get("dataid")));
}
}
}
try {
if (departmentOrganizationList != null && dataIds.size() ==0){
String deptid = Util.null2String(departMentMap.get("departmentid"));
String pdeptids = "";
pdeptids = new DepartmentComInfo().getAllParentDepartId(Util.null2String(departMentMap.get("departmentid")), pdeptids);
pdeptids = deptid + pdeptids;
log.debug("pdeptids : [{}]",pdeptids);
for (Map<String,Object> departmentOrganization :departmentOrganizationList){
String dx = Util.null2String(departmentOrganization.get("dx"));
String ids = dx.split("-")[0];
for (String pdeptid : pdeptids.split(",")){
if (pdeptid.equals(ids)){
dataIds.add(Util.null2String(departmentOrganization.get("dataid")));
}
}
}
}
}catch (Exception e){
log.error("catch error :{}",e);
}
if (subCompanyOrganizationList != null && dataIds.size() ==0){
String subCompanyId = Util.null2String(departMentMap.get("subcompanyid1"));
for (Map<String,Object> subCompanyOrganization :subCompanyOrganizationList){
String dx = Util.null2String(subCompanyOrganization.get("dx"));
String ids = dx.split("-")[0];
if (ids.equals(subCompanyId)){
dataIds.add(Util.null2String(subCompanyOrganization.get("dataid")));
}
}
}
log.debug("dataIds : {}",dataIds);
return dataIds;
}
/**
* 获得包含该人员的适用范围的模块的所有数据id给班次适用范围用
* @param resourceId
* @param modeId
* @param date
* @return
*/
public static Set<String> getAllDataIds(String resourceId,String modeId,String date){
String sql = "select dxlx,dataid,dx from uf_jcl_syzz where modeid=?";
List<Map<String,Object>> organizationList = DbTools.getSqlToList(sql,modeId);
sql = "select id,departmentid,subcompanyid1 from hrmresource where id =?";
Map<String,Object> departMentMap = DbTools.getSqlToMap(sql,resourceId);
Set<String> dataIds = Sets.newHashSet();
Map<String, List<Map<String,Object>>> organizationListGroupBydxlx = organizationList.stream().collect(Collectors.groupingBy(e ->e.get("dxlx").toString()));
//对象类型为人员
List<Map<String,Object>> personOrganizationList = organizationListGroupBydxlx.get("0");
//对象类型为人员组织
List<Map<String,Object>> personGroupOrganizationList = organizationListGroupBydxlx.get("1");
//对象类型为部门
List<Map<String,Object>> departmentOrganizationList = organizationListGroupBydxlx.get("2");
//对象类型为分部
List<Map<String,Object>> subCompanyOrganizationList = organizationListGroupBydxlx.get("3");
if (personOrganizationList != null){
for (Map<String,Object> personOrganization :personOrganizationList){
String dx = Util.null2String(personOrganization.get("dx"));
String ids = dx.split("-")[0];
if (ids.equals(resourceId)){
dataIds.add(Util.null2String(personOrganization.get("dataid")));
}
}
}
if (personGroupOrganizationList != null){
Set<String> personGroupIds = personGroupOrganizationList.stream().map(e -> Util.null2String(e.get("dx")).split("-")[0]).collect(Collectors.toSet());
sql = "select mainid,empid,filters,bdate,edate,sqltj from uf_ryqz_dt1 where mainid in ("+String.join(",",personGroupIds)+")";
log.debug("query personGroupData : {}",sql);
List<Map<String,Object>> personGroupData = DbTools.getSqlToList(sql);
Set<String> personnelGroupIds = PersongroupCommonUtil.getPersonnelGroupingByPerson(personGroupData,resourceId,date);
log.debug("personnelGroupIds : {}",personnelGroupIds);
for (Map<String,Object> personGroupOrganization :personGroupOrganizationList){
String personnelGroupId = Util.null2String(personGroupOrganization.get("dx")).split("-")[0];
if (personnelGroupIds.contains(personnelGroupId)){
dataIds.add(Util.null2String(personGroupOrganization.get("dataid")));
}
}
}
try {
if (departmentOrganizationList != null){
String deptid = Util.null2String(departMentMap.get("departmentid"));
String pdeptids = "";
pdeptids = new DepartmentComInfo().getAllParentDepartId(Util.null2String(departMentMap.get("departmentid")), pdeptids);
pdeptids = deptid + pdeptids;
log.debug("pdeptids : [{}]",pdeptids);
for (Map<String,Object> departmentOrganization :departmentOrganizationList){
String dx = Util.null2String(departmentOrganization.get("dx"));
String ids = dx.split("-")[0];
for (String pdeptid : pdeptids.split(",")){
if (pdeptid.equals(ids)){
dataIds.add(Util.null2String(departmentOrganization.get("dataid")));
}
}
}
}
}catch (Exception e){
log.error("catch error :{}",e);
}
if (subCompanyOrganizationList != null){
String subCompanyId = Util.null2String(departMentMap.get("subcompanyid1"));
for (Map<String,Object> subCompanyOrganization :subCompanyOrganizationList){
String dx = Util.null2String(subCompanyOrganization.get("dx"));
String ids = dx.split("-")[0];
if (ids.equals(subCompanyId)){
dataIds.add(Util.null2String(subCompanyOrganization.get("dataid")));
}
}
}
log.debug("dataIds : {}",dataIds);
return dataIds;
}
public static boolean ifContainStr(String fatherStr,String sonStr,String mark){
for (String pdeptid : fatherStr.split(mark)){
if (pdeptid.equals(sonStr)){
return true;
}
}
return false;
}
/**
* 根据流程requestInfo消息对象获取流程主表字段的信息的map集合
* @param requestInfo
* @return
*/
public static HashMap<String,String> getMainTableInfo(RequestInfo requestInfo){
HashMap<String,String> mainMap = new HashMap<String,String>();
Property[] properties = requestInfo.getMainTableInfo().getProperty();// 获取表单主字段信息
for (int i = 0; i < properties.length; i++) {
String name = properties[i].getName();// 主字段名称
String value = Util.null2String(properties[i].getValue());// 主字段对应的值
mainMap.put(name, value);
}
mainMap.put("id",String.valueOf(requestInfo.getRequestManager().getBillid()));
return mainMap;
}
/**
* 明细
* @param request
* @return
*/
public static List<Map<String, String>> getDetailTableInfo(RequestInfo request, int index) {
// 获取明细的信息
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
DetailTable[] detailtables = request.getDetailTableInfo().getDetailTable();// 获取明细表数据
if (detailtables.length > index) {
DetailTable dt = detailtables[index];// 获取明细表 0代表明细表1
log.debug("getDetailTableInfo :[{}]",dt.getTableDBName());
Row[] rows = dt.getRow();// 获取明细表中所有行的信息
for (int i = 0; i < rows.length; i++) {
Row row = rows[i];// 获取具体行信息
Cell[] cells = row.getCell();// 获取具体行所有列的信息
Map<String, String> map = new HashMap<String, String>();
for (int j = 0; j < cells.length; j++) {
Cell cell = cells[j];
String name = cell.getName().toLowerCase();// 获取字段名
String value = cell.getValue();// 获取具体的值
map.put(name, value);
}
map.put("id",row.getId());
list.add(map);
}
}
return list;
}
/**
* 获取适用范围对应的人员id列表适用范围由dataId和modeId获得
* @param dataId
* @param modeId
* @return
*/
public static List<String> getEmpIds(String dataId,String modeId) {
List<String> empIdList = new ArrayList<>();
String sql = "select dxlx,aqjb,dx from uf_jcl_syzz where modeid=? and dataid = ?";
//适用组织所有值集合
List<Map<String,Object>> organizationList = DbTools.getSqlToListKeySmallLetter(sql,modeId, dataId);
//分组
List<Map<String, String>> empIdInfos = new ArrayList<>();
List<Map<String, String>> empGroupIdInfos = new ArrayList<>();
List<Map<String, String>> depIdInfos = new ArrayList<>();
List<Map<String, String>> subCompanyIdInfos = new ArrayList<>();
for (Map<String,Object> organization : organizationList){
String id = Util.null2String(organization.get("dx")).split("-")[0];
String securityLevel = Util.null2String(organization.get("aqjb"));
String[] securityLevelArr = securityLevel.split("-");
String minSecurityLevel = securityLevel.substring(0, 1).equals("-") ? "" : securityLevelArr[0];
String maxSecurityLevel = "";
if (securityLevelArr.length == 1 && !securityLevelArr[0].equals(minSecurityLevel)) {
maxSecurityLevel = securityLevelArr[0];
} else if (securityLevelArr.length == 2) {
maxSecurityLevel = securityLevelArr[1];
}
if (ApplicableOrganizationEnum.PERSONNEL.getKey().equals(organization.get("dxlx"))){
Map<String,String> infoItem = new HashMap<>();
infoItem.put("id", id);
infoItem.put("minSecurityLevel", minSecurityLevel);
infoItem.put("maxSecurityLevel", maxSecurityLevel);
empIdInfos.add(infoItem);
}else if (ApplicableOrganizationEnum.PERSONNEL_GROUP.getKey().equals(organization.get("dxlx"))){
Map<String,String> infoItem = new HashMap<>();
infoItem.put("id", id);
infoItem.put("minSecurityLevel", minSecurityLevel);
infoItem.put("maxSecurityLevel", maxSecurityLevel);
empGroupIdInfos.add(infoItem);
}else if (ApplicableOrganizationEnum.DEPARTMENT.getKey().equals(organization.get("dxlx"))){
Map<String,String> infoItem = new HashMap<>();
infoItem.put("id", id);
infoItem.put("minSecurityLevel", minSecurityLevel);
infoItem.put("maxSecurityLevel", maxSecurityLevel);
depIdInfos.add(infoItem);
}else if (ApplicableOrganizationEnum.SUBCOMPANY.getKey().equals(organization.get("dxlx"))){
Map<String,String> infoItem = new HashMap<>();
infoItem.put("id", id);
infoItem.put("minSecurityLevel", minSecurityLevel);
infoItem.put("maxSecurityLevel", maxSecurityLevel);
subCompanyIdInfos.add(infoItem);
}
}
//人员类型
log.debug("empIdInfos : " + empIdInfos);
for (Map<String, String> map : empIdInfos) {
String id = map.get("id");
String minSecurityLevel = map.get("minSecurityLevel");
String maxSecurityLevel = map.get("maxSecurityLevel");
//查询目标人员信息
String querySql = "select * from hrmresource where id = " + id;
if (!minSecurityLevel.equals("")) {
querySql = querySql + " and seclevel >= " +minSecurityLevel;
}
if (!maxSecurityLevel.equals("")) {
querySql = querySql + " and seclevel <= " +maxSecurityLevel;
}
Map<String,Object> data = DbTools.getSqlToMap(querySql);
log.debug("querySql : " + querySql);
if (data.size() > 0) {
empIdList.add(id);
}
}
//人员分组类型
log.debug("empGroupIdInfos : " + empGroupIdInfos);
for (Map<String, String> map : empGroupIdInfos) {
String id = map.get("id");
String minSecurityLevel = map.get("minSecurityLevel");
String maxSecurityLevel = map.get("maxSecurityLevel");
//获取分组包含人员id
Set<String> empIdsByGroup = getEmpGroupUserIds(id);
log.debug("empGroupId : " + id + ", empIdsByGroup : " + empIdsByGroup);
//查询目标人员信息
if (empIdsByGroup.size() > 0) {
String querySql = "select * from hrmresource where id in ("+String.join(",",empIdsByGroup)+")";
if (!minSecurityLevel.equals("")) {
querySql = querySql + " and seclevel >= " +minSecurityLevel;
}
if (!maxSecurityLevel.equals("")) {
querySql = querySql + " and seclevel <= " +maxSecurityLevel;
}
List<Map<String,Object>> datas = DbTools.getSqlToListKeySmallLetter(querySql);
log.debug("querySql : " + querySql);
if (datas.size() > 0) {
log.debug("datas.size : " + datas.size());
datas.forEach(f -> empIdList.add(f.get("id").toString()));
}
}
}
//部门类型
log.debug("depIdInfos : " + depIdInfos);
for (Map<String, String> map : depIdInfos) {
String id = map.get("id");
String minSecurityLevel = map.get("minSecurityLevel");
String maxSecurityLevel = map.get("maxSecurityLevel");
//查询目标人员信息
String querySql = "select * from hrmresource where departmentid = " + id;
if (!minSecurityLevel.equals("")) {
querySql = querySql + " and seclevel >= " +minSecurityLevel;
}
if (!maxSecurityLevel.equals("")) {
querySql = querySql + " and seclevel <= " +maxSecurityLevel;
}
List<Map<String,Object>> datas = DbTools.getSqlToListKeySmallLetter(querySql);
log.debug("querySql : " + querySql);
if (datas.size() > 0) {
log.debug("datas.size : " + datas.size());
datas.forEach(f -> empIdList.add(f.get("id").toString()));
}
}
//分部类型
log.debug("subCompanyIdInfos : " + subCompanyIdInfos);
for (Map<String, String> map : subCompanyIdInfos) {
String id = map.get("id");
String minSecurityLevel = map.get("minSecurityLevel");
String maxSecurityLevel = map.get("maxSecurityLevel");
//查询目标人员信息
String querySql = "select * from hrmresource where subcompanyid1 = " + id;
if (!minSecurityLevel.equals("")) {
querySql = querySql + " and seclevel >= " +minSecurityLevel;
}
if (!maxSecurityLevel.equals("")) {
querySql = querySql + " and seclevel <= " +maxSecurityLevel;
}
List<Map<String,Object>> datas = DbTools.getSqlToListKeySmallLetter(querySql);
log.debug("querySql : " + querySql);
if (datas.size() > 0) {
log.debug("datas.size : " + datas.size());
datas.forEach(f -> empIdList.add(f.get("id").toString()));
}
}
return empIdList;
}
/**
* 获得人员分组下面的人员集合
* @param empGroupId
* @return 人员id集合
*/
public static Set<String> getEmpGroupUserIds(String empGroupId){
String sql = "select b.mainid,b.empid,b.filters,b.bdate,b.edate,a.list_type,b.sqltj 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);
Set<String> empIdList = Sets.newHashSet();
for (Map<String,Object> personGroupData :personGroupDataList){
String id = Util.null2String(personGroupData.get("mainid"));
String empid = Util.null2String(personGroupData.get("empid"));
String filters = Util.null2String(personGroupData.get("filters"));
String list_type = Util.null2String(personGroupData.get("list_type"));
String sqltj = Util.null2String(personGroupData.get("sqltj"));
if ("0".equals(list_type) && !"".equals(empid)){
//人员清单
empIdList.add(empid);
}else if ("1".equals(list_type) && !"".equals(filters)){
//条件清单
sql = "select id,seclevel from hrmresource where 1=1 ";
filters = filters.replace("","and");
filters = filters.replace("","or");
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 "+filters;
}else {
sql = sql+ " and "+filters;
}
log.debug("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"));
empIdList.add(hrmId);
}
}else if ("2".equals(list_type) && !"".equals(sqltj)){
sqltj = Utils.converSQL(sqltj);
log.info("getPersonnelGroupingByPerson sqltj : [{}]",sqltj);
List<Map<String,Object>> dataList = DbTools.getSqlToList(sqltj);
for (Map<String,Object> dataMap :dataList){
String hrmId = Util.null2String(dataMap.get("id"));
empIdList.add(hrmId);
}
}
}
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,b.sqltj 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"));
String sqltj = Util.null2String(personGroupData.get("sqltj"));
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 ";
filters = filters.replace("","and");
filters = filters.replace("","or");
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 "+filters;
}else {
sql = sql+ " and "+filters;
}
log.debug("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);
}
}
}else if ("2".equals(list_type) && !"".equals(sqltj)){
sqltj = Utils.converSQL(sqltj);
log.info("getPersonnelGroupingByPerson sqltj : [{}]",sqltj);
List<Map<String,Object>> dataList = DbTools.getSqlToList(sqltj);
for (Map<String,Object> dataMap :dataList){
String hrmId = Util.null2String(dataMap.get("id"));
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
*/
public static List<String> getJqInfoWithAmount() {
List<String> jqIdList = new ArrayList<>();
//来自假期额度
String sql1 = "select * from uf_jcl_kq_jqed";
List<Map<String,Object>> data1 = DbTools.getSqlToList(sql1);
for (Map<String, Object> map : data1) {
jqIdList.add(Util.null2String(map.get("jb")));
}
//来自加班类型的考勤项目中关联的假期类型
String sql2 = "select * from uf_jcl_kq_kqxm where xmlx = 4 and jbzdzjqye = 1";
List<Map<String,Object>> data2 = DbTools.getSqlToList(sql2);
for (Map<String, Object> map : data2) {
String jqId = Util.null2String(map.get("zrdjb"));
if (!"".equals(jqId)) {
jqIdList.add(jqId);
}
}
jqIdList = jqIdList.stream().distinct().collect(Collectors.toList());
return jqIdList;
}
/**
* 获得人员对应日期所属的日期类型
* @param userId
* @param date
* @return
*/
public static String getRqlx(String userId,String date){
String modeId = Utils.getFormmodeIdMap().get("uf_jcl_kq_rlmc");
Set<String> calendarSetIdsSets = CommonUtil.getDataIds(userId,modeId,DateUtil.getCurrentDate());
log.debug("getRqlx calendarSetIdsSets : [{}]",calendarSetIdsSets);
String rqlx = "";
if (calendarSetIdsSets.size() > 0){
String sql = "select rqlx from uf_jcl_kq_rlxx where rlmc=? and rq=?";
List<Map<String,Object>> dataList = DbTools.getSqlToList(sql,calendarSetIdsSets.toArray()[0],date);
if (dataList.size() > 0){
rqlx = dataList.get(0).get("rqlx").toString();
}else {
sql = "select subcompanyid1 from hrmresource where id =?";
Map<String,Object> departMentMap = DbTools.getSqlToMap(sql,userId);
String subcompanyid1 = departMentMap.get("subcompanyid1").toString();
rqlx = Utils.getDefaultDateType(subcompanyid1,date);
}
}else {
String sql = "select subcompanyid1 from hrmresource where id =?";
Map<String,Object> departMentMap = DbTools.getSqlToMap(sql,userId);
String subcompanyid1 = departMentMap.get("subcompanyid1").toString();
rqlx = Utils.getDefaultDateType(subcompanyid1,date);
}
return rqlx;
}
/**
* 获得人员对应年份所属的日期类型集合
* @param userId
* @param year
* @return
*/
public static List<Map<String,Object>> getYearCalendarList(String userId,String year){
String modeId = Utils.getFormmodeIdMap().get("uf_jcl_kq_rlmc");
Set<String> calendarSetIdsSets = CommonUtil.getDataIds(userId,modeId,DateUtil.getCurrentDate());
log.debug("getRqlx calendarSetIdsSets : [{}]",calendarSetIdsSets);
List<Map<String,Object>> resultList = Lists.newArrayList();
if (calendarSetIdsSets.size() > 0){
String sql = "select rqlx,rq from uf_jcl_kq_rlxx where rlmc=? and nd=?";
resultList = DbTools.getSqlToList(sql,calendarSetIdsSets.toArray()[0],year);
if (resultList.size() == 0){
sql = "select subcompanyid1 from hrmresource where id =?";
Map<String,Object> departMentMap = DbTools.getSqlToMap(sql,userId);
String subcompanyid1 = departMentMap.get("subcompanyid1").toString();
resultList = Utils.getDefaultDateList(subcompanyid1,year);
}
}else {
String sql = "select subcompanyid1 from hrmresource where id =?";
Map<String,Object> departMentMap = DbTools.getSqlToMap(sql,userId);
String subcompanyid1 = departMentMap.get("subcompanyid1").toString();
resultList = Utils.getDefaultDateList(subcompanyid1,year);
}
return resultList;
}
/**
* 获得该班次是否休息
* @param classId
* @return
*/
public static String ifrestByClass(String classId){
String sql = "select id,sfxx from uf_jcl_kq_bcxx where id = ?";
List<Map<String,Object>> list = DbTools.getSqlToList(sql,classId);
if (list.size() > 0){
return Util.null2String(list.get(0).get("sfxx")).equals("") ?CheckBoxEnum.UNCHECKED.getValue() : Util.null2String(list.get(0).get("sfxx"));
}else {
return CheckBoxEnum.UNCHECKED.getKey();
}
}
/**
* 获取人员id和姓名的映射
* @return
*/
public static Map<String, String> empIdToNameInfo(List<String> empIds) {
Map<String, String> resultMap = new HashMap<>();
String sql = "select id,lastname from hrmresource";
if (empIds != null && empIds.size() > 0) {
sql = sql + " where id in (" + String.join(",", empIds) + ")";
}
List<Map<String,Object>> list = DbTools.getSqlToList(sql);
for (Map<String, Object> map : list) {
resultMap.put(map.get("id").toString(), Util.null2String(map.get("lastname")));
}
return resultMap;
}
/**
* 获取分部id和名称的映射
* @return
*/
public static Map<String, String> subCompanyIdToNameInfo() {
Map<String, String> resultMap = new HashMap<>();
String sql = "select id,subcompanyname from hrmsubcompany";
List<Map<String,Object>> list = DbTools.getSqlToList(sql);
for (Map<String, Object> map : list) {
resultMap.put(map.get("id").toString(), Util.null2String(map.get("subcompanyname")));
}
return resultMap;
}
/**
* 获取部门id和名称的映射
* @return
*/
public static Map<String, String> depIdToNameInfo() {
Map<String, String> resultMap = new HashMap<>();
String sql = "select id,departmentname from hrmdepartment";
List<Map<String,Object>> list = DbTools.getSqlToList(sql);
for (Map<String, Object> map : list) {
resultMap.put(map.get("id").toString(), Util.null2String(map.get("departmentname")));
}
return resultMap;
}
/**
* 获取考勤项目id和名称的映射
* @return
*/
public static Map<String, String> kqxmIdToNameInfo() {
Map<String, String> resultMap = new HashMap<>();
String sql = "select id,mc from uf_jcl_kq_kqxm";
List<Map<String,Object>> list = DbTools.getSqlToList(sql);
for (Map<String, Object> map : list) {
resultMap.put(map.get("id").toString(), Util.null2String(map.get("mc")));
}
return resultMap;
}
/**
* 初始化扩展类
*/
public static void initExtensionClassHolder(){
String sql = "select id,jkdzlwj,jkdzsxlx,zt,zhsx,jkdzdybc from uf_jcl_kq_ywdmjc where zt=0";
List<Map<String,Object>> dataList = DbTools.getSqlToList(sql);
sql = "select a.id,b.csmc,b.csz from uf_jcl_kq_ywdmjc a left join uf_jcl_kq_ywdmjc_dt1 b on a.id=b.mainid where a.zt=0";
Map<String,List<Map<String,Object>>> detailDataGroupMap = DbTools.getSqlToList(sql).stream().collect(Collectors.groupingBy(e->e.get("id").toString()));
try {
/**
* 打卡卡点扩展类
*/
List<AbstractAdjustClockPointAction> adjustClockPointAction = Lists.newArrayList();
List<Map<String,Object>> adjustClockPointActionResultList = dataList.stream().filter(e->"0".equals(e.get("jkdzsxlx"))).sorted(Comparator.comparing(e->Integer.valueOf(e.get("zhsx").toString()))).collect(Collectors.toList());
for (Map<String,Object> adjustClockPointActionMap:adjustClockPointActionResultList){
String classPath = adjustClockPointActionMap.get("jkdzlwj").toString();
AbstractAdjustClockPointAction action = (AbstractAdjustClockPointAction)Class.forName(classPath).newInstance();
action.setApplyClasses(Util.null2String(adjustClockPointActionMap.get("jkdzdybc")));
List<Map<String,Object>> detailDataList = detailDataGroupMap.get(adjustClockPointActionMap.get("id"));
if (detailDataList != null && detailDataList.size() > 0){
Map<String,String> paramMap = Maps.newHashMap();
for (Map<String,Object> detailData:detailDataList){
paramMap.put(Util.null2String(detailData.get("csmc")),Util.null2String(detailData.get("csz")));
}
action.setParams(paramMap);
}
adjustClockPointAction.add(action);
}
ExtensionClassHolder.setAdjustClockPointAction(adjustClockPointAction);
/**
* 全局变量设置
*/
sql = "select csm id,csz name from uf_jcl_kq_globalset where zt=0";
Map<String,Object> globalMap = DbTools.getSqlToMapList(sql);
ExtensionClassHolder.setGlobalSetMap(globalMap);
}catch (Exception e){
log.error("initExtensionClassHolder fail");
throw new AttendanceRunTimeException("初始化扩展类失败");
}
}
/**
* 根据班段类型获得对应的子项目
* @param itemMap
* @param bdlx
* @return
*/
public static Map<String,Object> assembleAskForOrEvectionItem(Map<String,Object> itemMap,String bdlx){
List<Map<String,Object>> sonItems = (List<Map<String,Object>>)itemMap.get("sonItems");
String workfor = Utils.getWorkFor(bdlx);
if (sonItems != null && sonItems.size() > 0){
for (Map<String,Object> sonItem:sonItems){
String zysd = Util.null2String(sonItem.get("zysd"));
if (zysd.equals(workfor)){
return sonItem;
}
}
}
return null;
}
/**
* @param empId 人员id
* @param date 日期
* @return 返回人员在指定日期在考勤方案和通用中被设置的考勤项目集合
*/
public static List<Map<String,Object>> getAttendanceItemsByEmpIdDate(String empId, String date) {
String modeId = Utils.getFormmodeIdMap().get("uf_jcl_kq_kqfa");
Map<String,Object> resultMap = Maps.newHashMap();
String sql = "select dxlx,dataid,dx from uf_jcl_syzz where modeid=?";
List<Map<String,Object>> organizationList = DbTools.getSqlToList(sql,modeId);
sql = "select id,departmentid,subcompanyid1 from hrmresource where id =?";
Map<String,Object> departMentMap = DbTools.getSqlToMap(sql, empId);
Set<String> dataIds = Sets.newHashSet();
Map<String, List<Map<String,Object>>> organizationListGroupBydxlx = organizationList.stream().collect(Collectors.groupingBy(e ->e.get("dxlx").toString()));
//对象类型为人员
List<Map<String,Object>> personOrganizationList = organizationListGroupBydxlx.get("0");
//对象类型为人员组织
List<Map<String,Object>> personGroupOrganizationList = organizationListGroupBydxlx.get("1");
//对象类型为部门
List<Map<String,Object>> departmentOrganizationList = organizationListGroupBydxlx.get("2");
//对象类型为分部
List<Map<String,Object>> subCompanyOrganizationList = organizationListGroupBydxlx.get("3");
if (personOrganizationList != null){
for (Map<String,Object> personOrganization :personOrganizationList){
String dx = Util.null2String(personOrganization.get("dx"));
String ids = dx.split("-")[0];
if (ids.equals(empId)){
dataIds.add(Util.null2String(personOrganization.get("dataid")));
}
}
}
try {
if (departmentOrganizationList != null){
String deptid = Util.null2String(departMentMap.get("departmentid"));
String pdeptids = "";
pdeptids = new DepartmentComInfo().getAllParentDepartId(Util.null2String(departMentMap.get("departmentid")), pdeptids);
pdeptids = deptid + pdeptids;
for (Map<String,Object> departmentOrganization :departmentOrganizationList){
String dx = Util.null2String(departmentOrganization.get("dx"));
String ids = dx.split("-")[0];
for (String pdeptid : pdeptids.split(",")){
if (pdeptid.equals(ids)){
dataIds.add(Util.null2String(departmentOrganization.get("dataid")));
}
}
}
}
}catch (Exception e){
log.error("catch error :{}",e);
}
if (subCompanyOrganizationList != null){
String subCompanyId = Util.null2String(departMentMap.get("subcompanyid1"));
for (Map<String,Object> subCompanyOrganization :subCompanyOrganizationList){
String dx = Util.null2String(subCompanyOrganization.get("dx"));
String ids = dx.split("-")[0];
if (ids.equals(subCompanyId)){
dataIds.add(Util.null2String(subCompanyOrganization.get("dataid")));
}
}
}
if (personGroupOrganizationList != null){
Set<String> personGroupIds = personGroupOrganizationList.stream().map(e -> Util.null2String(e.get("dx")).split("-")[0]).collect(Collectors.toSet());
sql = "select mainid,empid,filters,sqltj,bdate,edate from uf_ryqz_dt1 where mainid in ("+String.join(",",personGroupIds)+")";
List<Map<String,Object>> personGroupData = DbTools.getSqlToList(sql);
Set<String> personnelGroupIds = PersongroupCommonUtil.getPersonnelGroupingByPerson(personGroupData, empId,date);
for (Map<String,Object> personGroupOrganization :personGroupOrganizationList){
String personnelGroupId = Util.null2String(personGroupOrganization.get("dx")).split("-")[0];
if (personnelGroupIds.contains(personnelGroupId)){
dataIds.add(Util.null2String(personGroupOrganization.get("dataid")));
}
}
}
//收集通用考勤项目
sql = "select id keyid,mc kqxm,a.* from uf_jcl_kq_kqxm a where tyxm=1 and (xmzt is null or xmzt <> '0')";
List<Map<String,Object>> attendanceItems = DbTools.getSqlToList(sql);
//收集目标人员适用考勤方案中的考勤项目
if (dataIds.size() > 0){
sql = "select b.id keyid,b.mc kqxm,c.mc famc,b.* from uf_jcl_kq_kqfa_dt1 a left join uf_jcl_kq_kqxm b on a.kqxm=b.id left join uf_jcl_kq_kqfa c on a.mainid=c.id " +
"where mainid in ("+String.join(",",dataIds)+") and (b.xmzt is null or b.xmzt <> '0') " +
"and c.zt = 0 and (c.sxrq0 is null or c.sxrq0 >= ?) and (c.sxrq1 is null or c.sxrq1 <= ?)";
attendanceItems.addAll(DbTools.getSqlToList(sql, date, date));
}
return attendanceItems;
}
/**
* 批量更新出勤结果的数据状态
* @param empDateList 人员id和对应日期信息集合
* @param status 要更新到的状态值
* @return
*/
public static String updateAttendanceResultInfoStatus(List<Map<String, String>> empDateList, String status) {
String errorMessage = "";
List<String> empIdList = empDateList.stream().filter(f-> !"".equals(Util.null2String(f.get("empId")))).map(f->f.get("empId")).collect(Collectors.toList());
Map<String, String> empNameInfo = empIdToNameInfo(empIdList);
String empId = "";
String cqDate = "";
String sql = "update uf_jcl_kq_cqjg set sjzt = ? where ygid = ? and rq = ?";
for (Map<String, String> empDateInfo : empDateList) {
empId = Util.null2String(empDateInfo.get("empId"));
cqDate = Util.null2String(empDateInfo.get("cqDate"));
if (!"".equals(empId) && !"".equals(cqDate)) {
if (!DbTools.update(sql, status, empId, cqDate)) {
errorMessage = errorMessage + empNameInfo.getOrDefault(empId, empId) + "," + cqDate + "出勤结果数据状态更新失败;";
}
}
}
return errorMessage;
}
}