|
|
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())){
|
|
|
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 startDate
|
|
|
* @param endDate
|
|
|
* @return
|
|
|
*/
|
|
|
public static Set<String> getDataIds(String resourceId,String modeId,String startDate,String endDate){
|
|
|
|
|
|
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 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,startDate,endDate);
|
|
|
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 startDate
|
|
|
* @param endDate
|
|
|
* @return
|
|
|
*/
|
|
|
public static Set<String> getAllDataIds(String resourceId,String modeId,String startDate,String endDate){
|
|
|
|
|
|
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 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,startDate,endDate);
|
|
|
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 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"));
|
|
|
|
|
|
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","and");
|
|
|
filters = filters.replace("or","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);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
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 ";
|
|
|
filters = filters.replace("and","and");
|
|
|
filters = filters.replace("or","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);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
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(),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(),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() {
|
|
|
Map<String, String> resultMap = new HashMap<>();
|
|
|
String sql = "select id,lastname from hrmresource";
|
|
|
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);
|
|
|
}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;
|
|
|
}
|
|
|
|
|
|
|
|
|
}
|