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.

1792 lines
92 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.attendance.attendanceanalysis.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.engine.jucailinkq.attendance.enums.AccountingUnitEnum;
import com.engine.jucailinkq.attendance.enums.PersonGroupListTypeEnum;
import com.engine.jucailinkq.attendance.workflow.cmd.GetCqSummarySearchConditionCmd;
import com.engine.jucailinkq.attendance.attendanceanalysis.service.AttendanceSummaryService;
import com.engine.jucailinkq.common.exception.AttendanceRunTimeException;
import com.engine.jucailinkq.common.util.CommonUtil;
import com.engine.jucailinkq.common.util.DbTools;
import com.engine.core.impl.Service;
import com.engine.kq.biz.KQHolidaySetBiz;
import com.engine.kq.biz.KQReportBiz;
import com.engine.kq.util.ExcelUtil;
import com.engine.kq.util.PageUidFactory;
import com.google.common.collect.Sets;
import org.apache.xpath.operations.Bool;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.TimeUtil;
import weaver.general.Util;
import weaver.hrm.company.DepartmentComInfo;
import weaver.hrm.company.SubCompanyComInfo;
import weaver.hrm.job.JobTitlesComInfo;
import weaver.hrm.resource.ResourceComInfo;
import weaver.systeminfo.SystemEnv;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Author: sy
* @Description: 出勤汇总实现类
* @Date: 2024/3/19
**/
public class AttendanceSummaryServiceImpl extends Service implements AttendanceSummaryService {
BaseBean bs = new BaseBean();
/**
* 新增出勤汇总
* 基于入参中的出勤汇总主表id,获取主表信息,根据主表中的分部、考勤时间区间等字段,
* 对出勤结果表、补打卡表、出勤津贴表中数据根据分布和时间区间筛选后,
* 根据分部、部门、人员id、考勤项目进行分组统计
* @param params
* @return
*/
@Override
public Map<String, Object> addAttendanceSummary(Map<String, Object> params) {
bs.writeLog("params : " + params);
String mainIds = Util.null2String(params.get("mainIds"));
bs.writeLog("mainIds : " + mainIds);
Thread thread1 = new Thread(() -> {
List<String> mainIdList = new ArrayList<>();
if (!mainIds.equals("")) {
mainIdList = Arrays.asList(mainIds.split(","));
}
//更新汇总主表的汇总状态字段为汇总中
String startUpdateSql = "update uf_jcl_kq_cqhz set hzzt = 1 where id in (" + mainIds + ")";
DbTools.update(startUpdateSql);
try {
//考勤项目
String kqxmSql = "select * from uf_jcl_kq_kqxm";
List<Map<String,Object>> kqxmDates = DbTools.getSqlToList(kqxmSql);
//收集考勤项目id-核算单位映射
Map<String, String> kqxmUnitInfo = kqxmDates.stream().collect(Collectors.toMap(e->Util.null2String(e.get("id")),e->Util.null2String(e.get("hsdw"))));
for (String mainId : mainIdList) {
List<Map<String, String>> addList = new ArrayList<>();
//查询出勤汇总主表信息
String sql = "select * from uf_jcl_kq_cqhz where id="+mainId;
Map<String,Object> data = DbTools.getSqlToMap(sql);
String subCompany = Util.null2String(data.get("fb"));
String startDate = Util.null2String(data.get("ksrq"));
String endDate = Util.null2String(data.get("jsrq"));
bs.writeLog("subCompany : " + subCompany + ", startDate : " + startDate + ", endDate : " + endDate);
if (!subCompany.equals("") && !startDate.equals("") && !endDate.equals("")) {
String subCompanyListStr = SubCompanyComInfo.getAllChildSubcompanyId(subCompany, subCompany);
//汇总出勤结果表、补打卡表、出勤津贴表数据
//出勤结果表
List<Map<String, String>> cqAddList = getCqAddList(mainId, subCompanyListStr, startDate, endDate, kqxmUnitInfo);
bs.writeLog("cqAddList_size : " + cqAddList.size());
if (cqAddList.size() > 0) {
addList.addAll(cqAddList);
}
//补打卡表
List<Map<String, String>> bdkAddList = getBdkAddList(mainId, subCompanyListStr, startDate, endDate);
bs.writeLog("bdkAddList_size : " + bdkAddList.size());
if (bdkAddList.size() > 0) {
addList.addAll(bdkAddList);
}
//出勤津贴表
List<Map<String, String>> cqjtAddList = getCqjtAddList(mainId, subCompanyListStr, startDate, endDate);
bs.writeLog("cqjtAddList_size : " + cqjtAddList.size());
if (cqjtAddList.size() > 0) {
addList.addAll(cqjtAddList);
}
bs.writeLog("addList_size : " + addList.size());
//删除已有汇总数据
String delSql = "delete from uf_jcl_kq_cqhz_dt1 where mainid = " + mainId;
boolean delSign = DbTools.update(delSql);
bs.writeLog("delSign : " + delSign + ", delSql : " + delSql);
//插入汇总数据
List<List> dataList = new ArrayList<>();
String insertSql = " insert into uf_jcl_kq_cqhz_dt1(mainid,ry,kqxm," +
"lc,lf,ls,lt," +
"gzfb,gzbm) values(?,?,?,?,?,?,?,?,?)";
for (Map<String, String> map : addList) {
List<String> list = new ArrayList<>();
list.add(mainId);
list.add(map.get("ry"));
list.add(map.get("kqxm"));
list.add(map.get("lc"));
list.add(map.get("lf"));
list.add(map.get("ls"));
list.add(map.get("lt"));
list.add("".equals(map.get("gzfb")) ? null : map.get("gzfb"));
list.add("".equals(map.get("gzbm")) ? null : map.get("gzbm"));
dataList.add(list);
}
bs.writeLog("dataList_size : " + dataList.size());
if(dataList.size() > 0){
bs.writeLog("入库开始---");
boolean insertSign =DbTools.updateBatch(insertSql,dataList);
bs.writeLog("insertSign : " + insertSign);
System.out.println(insertSign);
}
}
}
//更新汇总主表的汇总状态字段为汇总中
String endUpdateSql = "update uf_jcl_kq_cqhz set hzzt = 2 where id in (" + mainIds + ")";
DbTools.update(endUpdateSql);
} catch (Exception e) {
e.printStackTrace();
//更新汇总主表的汇总状态字段为未汇总
String endUpdateSql = "update uf_jcl_kq_cqhz set hzzt = 0 where id in (" + mainIds + ")";
DbTools.update(endUpdateSql);
}
});
thread1.start();
return new HashMap<>();
}
@Override
public Map<String, Object> getCqSummaryReport(Map<String, Object> params) {
Map<String,Object> retmap = new HashMap<String,Object>();
try{
String pageUid = PageUidFactory.getHrmPageUid("CqSummaryReport");
SubCompanyComInfo subCompanyComInfo = new SubCompanyComInfo();
DepartmentComInfo departmentComInfo = new DepartmentComInfo();
ResourceComInfo resourceComInfo = new ResourceComInfo();
JobTitlesComInfo jobTitlesComInfo = new JobTitlesComInfo();
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
String attendanceSerial = Util.null2String(jsonObj.get("attendanceSerial"));
String fromDate = Util.null2String(jsonObj.get("fromDate"));
String toDate = Util.null2String(jsonObj.get("toDate"));
String typeSelect =Util.null2String(jsonObj.get("typeselect"));
if(typeSelect.length()==0) {typeSelect = "3";}
if(!typeSelect.equals("") && !typeSelect.equals("0")&& !typeSelect.equals("6")){
if(typeSelect.equals("1")){
fromDate = TimeUtil.getCurrentDateString();
toDate = TimeUtil.getCurrentDateString();
}else{
fromDate = TimeUtil.getDateByOption(typeSelect,"0");
toDate = TimeUtil.getDateByOption(typeSelect,"1");
}
}
//人员状态
String status = Util.null2String(jsonObj.get("status"));
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
String departmentId = Util.null2String(jsonObj.get("departmentId"));
String resourceId = Util.null2String(jsonObj.get("resourceId"));
bs.writeLog("status : " + status + ", subCompanyId : " + subCompanyId + ", departmentId : " + departmentId + ", resourceId : " + resourceId);
String allLevel = Util.null2String(jsonObj.get("allLevel"));
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
String viewScope = Util.null2String(jsonObj.get("viewScope"));
String isFromMyAttendance = Util.null2String(jsonObj.get("isFromMyAttendance"));//是否是来自我的考勤的请求,如果是,不加载考勤报表权限共享的限制,不然我的考勤会提示无权限
int pageIndex = Util.getIntValue(Util.null2String(jsonObj.get("pageIndex")), 1);
int pageSize = KQReportBiz.getPageSize(Util.null2String(jsonObj.get("pageSize")),pageUid,user.getUID());
int count = 0;
int pageCount = 0;
int isHavePre = 0;
int isHaveNext = 0;
//设置列头
List<Object> columns = new ArrayList();
Map<String,Object> column = null;
//人员相关信息
column = new HashMap<>();
column.put("title", SystemEnv.getHtmlLabelName(413, user.getLanguage())); //姓名
column.put("unit", "");
column.put("dataIndex", "lastname");
column.put("type", "lastname");
column.put("key", "lastname");
column.put("rowSpan", 3);
column.put("width", 105);
column.put("showDetial", "1");
columns.add(column);
column = new HashMap<>();
column.put("title", SystemEnv.getHtmlLabelName(528842, user.getLanguage())); //分部
column.put("unit", "");
column.put("dataIndex", "subcompany");
column.put("type", "subcompany");
column.put("key", "subcompany");
column.put("rowSpan", 3);
column.put("width", 105);
column.put("showDetial", "1");
columns.add(column);
column = new HashMap<>();
column.put("title", SystemEnv.getHtmlLabelName(528843, user.getLanguage())); //部门
column.put("unit", "");
column.put("dataIndex", "department");
column.put("type", "department");
column.put("key", "department");
column.put("rowSpan", 3);
column.put("width", 105);
column.put("showDetial", "1");
columns.add(column);
//获取要查询的考勤项目id
String queryKqxmIds = Util.null2String(jsonObj.get("columns"));
queryKqxmIds = queryKqxmIds.replace("kqxm_", "");
List<String> kqxmIdList = Arrays.asList(queryKqxmIds.split(","));
if (queryKqxmIds.equals("") || kqxmIdList.size() == 0) {
retmap.put("columns",columns);
retmap.put("datas", new ArrayList<>());
retmap.put("pagesize", pageSize);
retmap.put("pageindex", pageIndex);
retmap.put("count", 0);
retmap.put("pagecount", 0);
retmap.put("ishavepre", 1);
retmap.put("ishavenext", 0);
return retmap;
}
//考勤项目
String kqxmSql = "select * from uf_jcl_kq_kqxm where id in (" + String.join(",", kqxmIdList) + ")";
List<Map<String,Object>> kqxmDates = DbTools.getSqlToList(kqxmSql);
for(Map<String,Object> kqxm : kqxmDates) {
String unit = getKqxmUnit(Util.null2String(kqxm.get("hsdw")));
column = new HashMap<>();
column.put("title", kqxm.get("mc"));
column.put("unit", unit);
column.put("dataIndex", "kqxm" + "_" + kqxm.get("id"));
column.put("type", "kqxm" + "_" + kqxm.get("id"));
column.put("key", "kqxm" + "_" + kqxm.get("id"));
column.put("rowSpan", 3);
column.put("width", 105);
column.put("showDetial", "1");
columns.add(column);
}
bs.writeLog("columns : " + columns);
//收集考勤项目id-核算单位映射
Map<String, String> kqxmUnitInfo = kqxmDates.stream().collect(Collectors.toMap(e->Util.null2String(e.get("id")),e->Util.null2String(e.get("hsdw"))));
//收集考勤项目id-考勤项目名称映射, 20241031需求变更字段“助记码”代替“名称”
Map<String, String> kqxmMcInfo = kqxmDates.stream().collect(Collectors.toMap(e->Util.null2String(e.get("id")),e->Util.null2String(e.get("zjm"))));
//获取列表结果typeSelect为9、10时查询出勤汇总明细表数据其他则生成临时汇总数据
List<Map<String,Object>> dtDates = null;
LocalDate targetDate = LocalDate.now(); // 获取当前日期
bs.writeLog("currentDate : " + targetDate);
if (typeSelect.equals("9")) {
String targetYear = String.valueOf(targetDate.getYear());
String targetMonth = String.valueOf(targetDate.getMonthValue());
bs.writeLog("targetYear : " + targetYear + ", targetMonth : " + targetMonth);
dtDates = getDtDates(targetYear, targetMonth, status, subCompanyId, departmentId, resourceId, kqxmIdList);
} else if (typeSelect.equals("10")) {
targetDate = targetDate.minusMonths(1);
String targetYear = String.valueOf(targetDate.getYear());
String targetMonth = String.valueOf(targetDate.getMonthValue());
bs.writeLog("targetYear : " + targetYear + ", targetMonth : " + targetMonth);
dtDates = getDtDates(targetYear, targetMonth, status, subCompanyId, departmentId, resourceId, kqxmIdList);
} else {
//调用临时汇总数据方法,生成数据
jsonObj.put("fromDate", fromDate);
jsonObj.put("toDate", toDate);
dtDates = getTemAttendanceSummary(jsonObj, kqxmUnitInfo, kqxmMcInfo, kqxmIdList);
}
bs.writeLog("dtDates_size : " + (dtDates==null ? "null" : dtDates.size()));
//处理明细表数据,分组生成列表数据
Map<String, Map<String, String>> groupData = new HashMap<>();
for (Map<String, Object> map : dtDates) {
String groupKey = map.get("ry") + "_" + map.get("gzfb") + "_" + map.get("gzbm");
Map<String, String> itemMap = new HashMap<>();
if (groupData.get(groupKey) == null) {
//尚未存在则新建,加入
itemMap.put("resourceId", Util.null2String(map.get("ry")));
itemMap.put("lastname", resourceComInfo.getLastname(Util.null2String(map.get("ry"))));
itemMap.put("subcompanyId", Util.null2String(map.get("gzfb")));
itemMap.put("subcompany", subCompanyComInfo.getSubcompanyname(Util.null2String(map.get("gzfb"))));
itemMap.put("departmentId", Util.null2String(map.get("gzbm")));
itemMap.put("department", departmentComInfo.getDepartmentName(Util.null2String(map.get("gzbm"))));
//设置考勤项目累计数值,累天、累时、累分最多有一个有值,都没有则取累次
String cumulativeValue = Util.null2String(map.get("lt")) + Util.null2String(map.get("ls")) + Util.null2String(map.get("lf"));
if (!cumulativeValue.equals("")) {
itemMap.put("kqxm" + "_" + map.get("kqxm").toString(), cumulativeValue);
} else {
itemMap.put("kqxm" + "_" + map.get("kqxm").toString(), map.get("lc").toString());
}
groupData.put(groupKey, itemMap);
} else {
//已存在则新增元素
itemMap = groupData.get(groupKey);
//设置考勤项目累计数值,累天、累时、累分最多有一个有值,都没有则取累次
String cumulativeValue = Util.null2String(map.get("lt")) + Util.null2String(map.get("ls")) + Util.null2String(map.get("lf"));
if (!cumulativeValue.equals("")) {
itemMap.put("kqxm" + "_" + map.get("kqxm").toString(), cumulativeValue);
} else {
itemMap.put("kqxm" + "_" + map.get("kqxm").toString(), map.get("lc").toString());
}
groupData.put(groupKey, itemMap);
}
}
//获取最终的list根据人员id排序
List<Map<String, String>> dataList = new ArrayList<>(groupData.values());
Collections.sort(dataList, new Comparator<Map<String, String>>() {
@Override
public int compare(Map<String, String> o1, Map<String, String> o2) {
String str1 = o1.get("resourceId").toString();
String str2 = o2.get("resourceId").toString();
//str1在前str2在后默认升序
return Integer.valueOf(str1)-Integer.valueOf(str2);
}
});
String exportSign = Util.null2String(params.get("exportSign"));
if (exportSign.equals("1")) {
//导出时,不做分页处理
retmap.put("columns",columns);
retmap.put("datas",dataList);
} else {
//分页处理
int start = (pageIndex - 1) * pageSize;
int end = Math.min(pageIndex * pageSize, dataList.size());
List<Map<String, String>> resultList = new ArrayList<>();
if (start <= dataList.size()) {
resultList = dataList.subList(start, end);
}
count = dataList.size();
if (count <= 0) {
pageCount = 0;
} else {
pageCount = count / pageSize + ((count % pageSize > 0) ? 1 : 0);
}
isHaveNext = (pageIndex <= pageCount) ? 1 : 0;
isHavePre = (pageIndex >= 1) ? 1 : 0;
List<Object> lsHolidays = KQHolidaySetBiz.getHolidaySetListByScope(""+user.getUID(),fromDate,toDate);
retmap.put("holidays", lsHolidays);
retmap.put("columns",columns);
retmap.put("datas",resultList);
retmap.put("pagesize", pageSize);
retmap.put("pageindex", pageIndex);
retmap.put("count", count);
retmap.put("pagecount", pageCount);
retmap.put("ishavepre", isHavePre);
retmap.put("ishavenext", isHaveNext);
}
}catch (Exception e){
bs.writeLog(e);
retmap.put("errorMessage", e.getMessage());
return retmap;
}
return retmap;
}
@Override
public Map<String, Object> getCqSummarySearchCondition(Map<String, Object> params) {
return this.commandExecutor.execute(new GetCqSummarySearchConditionCmd(params, user));
}
@Override
public Map<String, Object> exportCqSummaryReport(Map<String, Object> params, HttpServletRequest request, HttpServletResponse response) {
Map<String, Object> retmap = null;
try {
retmap = new HashMap<String, Object>();
params.put("exportSign", "1");
Map<String, Object> cqSummaryReportResult = getCqSummaryReport(params);
List<Map<String, String>> resultList = (List<Map<String, String>>) cqSummaryReportResult.get("datas");
List<Map<String, Object>> columns = (List<Map<String, Object>>) cqSummaryReportResult.get("columns");
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
String showColumns = Util.null2String(jsonObj.get("showColumns"));
List<String> showColumnKeyList = new ArrayList<>();
showColumnKeyList.add("lastname");
if (!showColumns.equals("")) {
showColumnKeyList.addAll(Arrays.asList(showColumns.split(",")));
}
//组装导出数据
List<List<Object>> dataList = new ArrayList<>();
List<Object> data = null;
for (Map<String, String> dataItem : resultList) {
data = new ArrayList<>();
for (String columnKey : showColumnKeyList) {
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);
}
//获取列头key和value映射
Map<String, String> columnValueMap = new HashMap<>();
for(Map<String, Object> columnItem : columns) {
String title = Util.null2String(columnItem.get("title"));
String unit = Util.null2String(columnItem.get("unit"));
if (!"".equals(title) && !"".equals(unit)) {
title = title + "(" + unit + ")";
}
columnValueMap.put(columnItem.get("key").toString(), title);
}
//组装导出列头
List<Object> titleList = new ArrayList<>();
Map<String,Object> title = null;
for (String columnKey : showColumnKeyList) {
title = new HashMap<>();
title.put("title", columnValueMap.get(columnKey));
title.put("width", 30*256);
titleList.add(title);
}
//组装页标签
Map<String, Object> sheet = new HashMap<>();
sheet.put("sheetName", SystemEnv.getHtmlLabelName(390351, user.getLanguage()));
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);
LinkedHashMap<String, Object> workbook = new LinkedHashMap<>();
workbook.put("sheet", lsSheet);
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) {
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(382661, user.getLanguage()));
bs.writeLog(e.getMessage());
}
return retmap;
}
@Override
public Map<String, Object> refreshViewAttendanceDaily() {
Map<String, Object> retmap = new HashMap<>();
String sql = "";
String viewName = "v_attdaily";
String viewNameCapital = "V_ATTDAILY";
//判断视图v_attdaily是否存在
RecordSet rs = new RecordSet();
String dbType = rs.getDBType();
if ("mysql".equals(dbType) || "postgresql".equals(dbType) || "sqlserver".equals(dbType) || "dm".equals(dbType) || "st".equals(dbType)) {
sql = "SELECT * FROM information_schema.views WHERE table_name = '" + viewName + "'";
} else if ("oracle".equals(dbType)) {
sql = "SELECT * FROM ALL_VIEWS WHERE VIEW_NAME = '" + viewNameCapital + "'";
} else if ("jc".equals(dbType)) {
sql = "SELECT * FROM sys.views WHERE viewname = '" + viewName + "'";
} else {
retmap.put("status", "-1");
retmap.put("message", "不支持的数据库类型,无法查询试图是否存在!");
return retmap;
}
Map<String, Object> viewInfo = DbTools.getSqlToMap(sql);
//存在则删除
if (viewInfo.size() > 0) {
sql = "DROP VIEW " + viewName;
boolean dropSign = DbTools.update(sql);
bs.writeLog("删除视图结果:" + dropSign);
}
//收集考勤项目
String kqxmSql = "select * from uf_jcl_kq_kqxm";
List<Map<String, Object>> kqxmList = DbTools.getSqlToList(kqxmSql);
//收集视图列头
StringBuilder viewColumn = new StringBuilder("id,ygid,rq,fbid,bm,zw,bc,rqlx");
//拼接视图内容sql
StringBuilder viewResourceSql = new StringBuilder("SELECT id, ygid, rq, fbid, bm, zw, bc, rqlx");
//考勤项目核算单位、id、名称
//20241031需求变更字段“助记码”代替“名称”
String hsdw = "";
String kqxmId = "";
// String mc = "";
String zjm = "";
for (Map<String, Object> kqxmInfo : kqxmList) {
hsdw = Util.null2String(kqxmInfo.get("hsdw"));
kqxmId = Util.null2String(kqxmInfo.get("id"));
zjm = Util.null2String(kqxmInfo.get("zjm"));
int lengthCompareValue = "字".getBytes().length * 9;
int zjmLength = zjm.getBytes().length;
if ("oracle".equals(dbType) && zjmLength > lengthCompareValue) {
zjm = zjm.substring(0,9);
}
if ("0".equals(hsdw)) {
viewResourceSql.append(", SUM(CASE WHEN xm = ").append(kqxmId).append(" THEN sc ELSE 0 END) AS \"").append(zjm).append("_t\"");
viewResourceSql.append(", SUM(CASE WHEN xm = ").append(kqxmId).append(" THEN 1 ELSE 0 END) AS \"").append(zjm).append("_c\"");
viewColumn.append(",").append(zjm).append("_t").append(",").append(zjm).append("_c");
} else if ("1".equals(hsdw)) {
if ("1".equals(kqxmId)) {
viewResourceSql.append(", SUM(CASE WHEN xm = 1 OR xm = 5").append(" THEN sc ELSE 0 END) AS \"").append(zjm).append("_s\"");
} else {
viewResourceSql.append(", SUM(CASE WHEN xm = ").append(kqxmId).append(" THEN sc ELSE 0 END) AS \"").append(zjm).append("_s\"");
}
viewResourceSql.append(", SUM(CASE WHEN xm = ").append(kqxmId).append(" THEN 1 ELSE 0 END) AS \"").append(zjm).append("_c\"");
viewColumn.append(",").append(zjm).append("_s").append(",").append(zjm).append("_c");
} else if ("2".equals(hsdw)) {
viewResourceSql.append(", SUM(CASE WHEN xm = ").append(kqxmId).append(" THEN sc ELSE 0 END) AS \"").append(zjm).append("_f\"");
viewResourceSql.append(", SUM(CASE WHEN xm = ").append(kqxmId).append(" THEN 1 ELSE 0 END) AS \"").append(zjm).append("_c\"");
viewColumn.append(",").append(zjm).append("_f").append(",").append(zjm).append("_c");
} else {
viewResourceSql.append(", SUM(CASE WHEN xm = ").append(kqxmId).append(" THEN 1 ELSE 0 END) AS \"").append(zjm).append("_c\"");
viewColumn.append(",").append(zjm).append("_c");
}
}
//ifnull函数的适配
String ifNullFunction = "";
if("mysql".equals(dbType) || "dm".equals(dbType) || "jc".equals(dbType) || "st".equals(dbType)) {
ifNullFunction = "IFNULL";
} else if ("oracle".equals(dbType)) {
ifNullFunction = "NVL";
} else if ("sqlserver".equals(dbType)) {
ifNullFunction = "ISNULL";
} else if ("postgresql".equals(dbType)) {
ifNullFunction = "COALESCE";
}
//创建新的视图
String createViewSql = "CREATE VIEW " + viewName;
createViewSql = createViewSql + " AS " + viewResourceSql.toString();
createViewSql = createViewSql + " FROM (" +
"SELECT id, fbid, bm, zw, ygid,rqlx, rq, bc, xm1 AS xm," + ifNullFunction + "(sc1,0) AS sc FROM uf_jcl_kq_cqjg WHERE (xm1 IS NOT NULL) UNION ALL "
+
"SELECT id, fbid, bm, zw, ygid,rqlx, rq, bc, xm2," + ifNullFunction + "(sc2,0) FROM uf_jcl_kq_cqjg WHERE (xm2 IS NOT NULL) UNION ALL "
+
"SELECT id, fbid, bm, zw, ygid,rqlx, rq, bc, xm3," + ifNullFunction + "(sc3,0) FROM uf_jcl_kq_cqjg WHERE (xm3 IS NOT NULL) UNION ALL "
+
"SELECT id, fbid, bm, zw, ygid,rqlx, rq, bc, xm4," + ifNullFunction + "(sc4,0) FROM uf_jcl_kq_cqjg WHERE (xm4 IS NOT NULL) UNION ALL "
+
"SELECT id, fbid, bm, zw, ygid,rqlx, rq, bc, xm5," + ifNullFunction + "(sc5,0) FROM uf_jcl_kq_cqjg WHERE (xm5 IS NOT NULL) UNION ALL "
+
"SELECT id, fbid, bm, zw, ygid,rqlx, rq, bc, xm6," + ifNullFunction + "(sc6,0) FROM uf_jcl_kq_cqjg WHERE (xm6 IS NOT NULL) UNION ALL "
+
"SELECT id, fbid, bm, zw, ygid,rqlx, rq, bc, xm7," + ifNullFunction + "(sc7,0) FROM uf_jcl_kq_cqjg WHERE (xm7 IS NOT NULL) UNION ALL "
+
"SELECT id, fbid, bm, zw, ygid,rqlx, rq, bc, xm8," + ifNullFunction + "(sc8,0) FROM uf_jcl_kq_cqjg WHERE (xm8 IS NOT NULL) UNION ALL "
+
"SELECT id, fbid, bm, zw, ygid,rqlx, rq, bc, CASE WHEN cqzt = 0 THEN '1' ELSE '5' END, cqsc FROM uf_jcl_kq_cqjg UNION ALL "
+
"SELECT id, fbid, bm, zw, ygid,rqlx, rq, bc, CASE WHEN rqlx = 0 OR rqlx = 4 THEN '2' WHEN rqlx = 2 OR rqlx = 3 THEN '3' WHEN rqlx = 1 THEN '4' ELSE '0' END ,cqsc FROM uf_jcl_kq_cqjg UNION ALL "
+
"SELECT T2.id, T2.fbid, T2.bm, T2.zw, T2.ygid,rqlx, T2.rq, T2.bc, T1.jtlx, " + ifNullFunction + "(T1.sc,0) FROM uf_jcl_kq_cqjt T1 LEFT JOIN uf_jcl_kq_cqjg T2 ON T1.yg = T2.ygid AND T1.rq = T2.rq WHERE T1.zt = 1 UNION ALL "
+
"SELECT T2.id, T2.fbid, T2.bm, T2.zw, T2.ygid,rqlx, T2.rq, T2.bc, T1.bdklx, 1 FROM uf_jcl_kq_bdkjl T1 LEFT JOIN uf_jcl_kq_cqjg T2 ON T1.bdkry = T2.ygid AND T1.dkrq = T2.rq WHERE T1.jlzt = 1 AND T2.id IS NOT NULL "
+
") ta GROUP BY id, ygid,rqlx, rq, fbid, bm, zw, bc";
boolean createSign = DbTools.update(createViewSql);
bs.writeLog("创建视图结果:" + createSign);
if (createSign) {
retmap.put("status", "1");
retmap.put("message", "考勤日报相关视图刷新成功!");
} else {
retmap.put("status", "-1");
retmap.put("message", "考勤日报相关视图刷新失败!");
bs.writeLog("创建视图sql[===" + createViewSql + "===]");
}
return retmap;
}
private String getKqxmUnit(String hsdw) {
if (hsdw.equals("0")) {
return SystemEnv.getHtmlLabelName(518514, user.getLanguage()); //天
} else if (hsdw.equals("1")) {
return SystemEnv.getHtmlLabelName(518515, user.getLanguage()); //小时
} else if (hsdw.equals("2")) {
return SystemEnv.getHtmlLabelName(518516, user.getLanguage()); //分钟
} else if (hsdw.equals("3")) {
return SystemEnv.getHtmlLabelName(18083, user.getLanguage()); //次
} else {
return "";
}
}
private List<Map<String,Object>> getDtDates(String targetYear, String targetMonth, String status, String subCompanyIds, String depIds, String empIds, List<String> kqxmIdList) {
//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<>();
for (Map<String, Object> map : mainDates) {
mainIds.add(map.get("id").toString());
}
bs.writeLog("mainIds : " + mainIds);
String dtListSql = "select * from uf_jcl_kq_cqhz_dt1 a left join hrmresource b on a.ry = b.id where 1=1";
if(status.length()>0){
if (!status.equals("8") && !status.equals("9")) {
dtListSql += " and b.status = "+status+ "";
}else if (status.equals("8")) {
dtListSql += " and (b.status = 0 or b.status = 1 or b.status = 2 or b.status = 3) ";
}
}
if (!subCompanyIds.equals("")) {
dtListSql = dtListSql + " and a.gzfb in (" + subCompanyIds + ")";
}
if (!depIds.equals("")) {
dtListSql = dtListSql + " and a.gzbm in (" + depIds + ")";
}
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) + ") and a.kqxm in (" + String.join(",", kqxmIdList) + ")";
List<Map<String,Object>> dtDates = DbTools.getSqlToList(dtListSql);
bs.writeLog("dtDates_size : " + dtDates.size() + ", dtListSql : " + dtListSql);
return dtDates;
} else {
return new ArrayList<>();
}
}
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、人员状态、考勤时间区间等字段
* 对出勤结果表、补打卡表、出勤津贴表中数据根据分布和时间区间筛选后,
* 根据分部、部门、人员id、考勤项目进行分组统计
* @param params
* @return
*/
public List<Map<String, Object>> getTemAttendanceSummary(Map<String, Object> params, Map<String, String> kqxmUnitInfo, Map<String, String> kqxmMcInfo, List<String> kqxmIdList) {
bs.writeLog("params : " + params);
List<Map<String, Object>> addList = new ArrayList<>();
//处理筛选条件
//时间范围,今天-1本周-2本月-3本季-4本年-5指定日期范围-6上个月-7上一年-8
String dateRange = Util.null2String(params.get("typeselect"));//时间范围
String startDate = Util.null2String(params.get("fromDate"));
String endDate = Util.null2String(params.get("toDate"));
if (dateRange.length() == 0) {
dateRange = "3";
}
if (!dateRange.equals("") && !dateRange.equals("0") && !dateRange.equals("6")) {
if (dateRange.equals("1")) {
startDate = TimeUtil.getCurrentDateString();
endDate = TimeUtil.getCurrentDateString();
} else {
startDate = TimeUtil.getDateByOption(dateRange, "0");
endDate = TimeUtil.getDateByOption(dateRange, "1");
}
}
//查看范围,总部-0分部-1部门-2人员-3
String viewRange = Util.null2String(params.get("viewScope"));//查看范围
String subCompanyIds = Util.null2String(params.get("subCompanyId"));//可以多个分部id以,分隔
String departmentIds = Util.null2String(params.get("departmentId"));//可以多个部门id以,分隔
String empIds = Util.null2String(params.get("resourceId"));//可以多个人员id以,分隔
//人员状态,试用-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, userManageInfo, kqxmUnitInfo);
// 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, 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, userManageInfo);
// bs.writeLog("cqjtAddList_size : " + cqjtAddList.size());
// if (cqjtAddList.size() > 0) {
// addList.addAll(cqjtAddList);
// }
//考勤日报视图
List<Map<String, Object>> dailyKqAddList = getTemDailyKqAddList(startDate, endDate, subCompanyIds, departmentIds, empIds, empStatus, userManageInfo,
kqxmUnitInfo, kqxmMcInfo, kqxmIdList);
bs.writeLog("dailyKqAddList_size : " + dailyKqAddList.size());
if (dailyKqAddList.size() > 0) {
addList.addAll(dailyKqAddList);
}
}
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, Map<String, String> kqxmUnitInfo) {
String cqSql = "select * from uf_jcl_kq_cqjg where fbid in (" + subCompanyListStr + ") and rq >= '" + startDate +"'" + " and rq <= '" + endDate +"'";
List<Map<String,Object>> cqDates = DbTools.getSqlToList(cqSql);
//先根据分部、部门、人员、项目分组
Map<String, List<Map<String,Object>>> toDealCqDataWithGroup = new HashMap<>();
for (Map<String,Object> map : cqDates) {
//出勤状态
String cqzt = Util.null2String(map.get("cqzt"));
if (!"".equals(cqzt)) {
//匹配出勤状态对应的考勤项目id
String kqxmId = "0".equals(cqzt) ? "1" : "5";
String groupKey = map.get("fbid") + "_" + map.get("bm") + "_" + map.get("ygid") + "_" + kqxmId;
Map<String,Object> itemMap = new HashMap<>();
if ("1".equals(kqxmId) && Util.null2String(kqxmUnitInfo.get("1")).equals(AccountingUnitEnum.HOUR.getKey())) {
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("ygid", map.get("ygid"));
itemMap.put("xm", kqxmId);
itemMap.put("sc", Util.null2String(map.get("cqsc")));
} else {
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("ygid", map.get("ygid"));
itemMap.put("xm", kqxmId);
itemMap.put("sc", "1");
}
if (toDealCqDataWithGroup.get(groupKey) != null) {
toDealCqDataWithGroup.get(groupKey).add(itemMap);
} else {
List<Map<String,Object>> list = new ArrayList<>();
list.add(itemMap);
toDealCqDataWithGroup.put(groupKey, list);
}
}
//日期类型
String rqlx = Util.null2String(map.get("rqlx"));
if (!rqlx.equals("")) {
//匹配日期类型对应的考勤项目id
String kqxmId = null;
if (rqlx.equals("0") || rqlx.equals("4")) {
kqxmId = "2";
} else if (rqlx.equals("2") || rqlx.equals("3")) {
kqxmId = "3";
} else if (rqlx.equals("1")) {
kqxmId = "4";
}
String groupKey = map.get("fbid") + "_" + map.get("bm") + "_" + map.get("ygid") + "_" + kqxmId;
Map<String,Object> itemMap = new HashMap<>();
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("ygid", map.get("ygid"));
itemMap.put("xm", kqxmId);
itemMap.put("sc", "1");
if (toDealCqDataWithGroup.get(groupKey) != null) {
toDealCqDataWithGroup.get(groupKey).add(itemMap);
} else {
List<Map<String,Object>> list = new ArrayList<>();
list.add(itemMap);
toDealCqDataWithGroup.put(groupKey, list);
}
}
//项目1
if (!Util.null2String(map.get("xm1")).equals("")) {
String groupKey = map.get("fbid") + "_" + map.get("bm") + "_" + map.get("ygid") + "_" + map.get("xm1");
Map<String,Object> itemMap = new HashMap<>();
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("ygid", map.get("ygid"));
itemMap.put("xm", map.get("xm1"));
itemMap.put("sc", map.get("sc1"));
if (toDealCqDataWithGroup.get(groupKey) != null) {
toDealCqDataWithGroup.get(groupKey).add(itemMap);
} else {
List<Map<String,Object>> list = new ArrayList<>();
list.add(itemMap);
toDealCqDataWithGroup.put(groupKey, list);
}
} else {
continue;
}
//项目2
if (!Util.null2String(map.get("xm2")).equals("")) {
String groupKey = map.get("fbid") + "_" + map.get("bm") + "_" + map.get("ygid") + "_" + map.get("xm2");
Map<String,Object> itemMap = new HashMap<>();
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("ygid", map.get("ygid"));
itemMap.put("xm", map.get("xm2"));
itemMap.put("sc", map.get("sc2"));
if (toDealCqDataWithGroup.get(groupKey) != null) {
toDealCqDataWithGroup.get(groupKey).add(itemMap);
} else {
List<Map<String,Object>> list = new ArrayList<>();
list.add(itemMap);
toDealCqDataWithGroup.put(groupKey, list);
}
} else {
continue;
}
//项目3
if (!Util.null2String(map.get("xm3")).equals("")) {
String groupKey = map.get("fbid") + "_" + map.get("bm") + "_" + map.get("ygid") + "_" + map.get("xm3");
Map<String,Object> itemMap = new HashMap<>();
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("ygid", map.get("ygid"));
itemMap.put("xm", map.get("xm3"));
itemMap.put("sc", map.get("sc3"));
if (toDealCqDataWithGroup.get(groupKey) != null) {
toDealCqDataWithGroup.get(groupKey).add(itemMap);
} else {
List<Map<String,Object>> list = new ArrayList<>();
list.add(itemMap);
toDealCqDataWithGroup.put(groupKey, list);
}
} else {
continue;
}
//项目4
if (!Util.null2String(map.get("xm4")).equals("")) {
String groupKey = map.get("fbid") + "_" + map.get("bm") + "_" + map.get("ygid") + "_" + map.get("xm4");
Map<String,Object> itemMap = new HashMap<>();
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("ygid", map.get("ygid"));
itemMap.put("xm", map.get("xm4"));
itemMap.put("sc", map.get("sc4"));
if (toDealCqDataWithGroup.get(groupKey) != null) {
toDealCqDataWithGroup.get(groupKey).add(itemMap);
} else {
List<Map<String,Object>> list = new ArrayList<>();
list.add(itemMap);
toDealCqDataWithGroup.put(groupKey, list);
}
} else {
continue;
}
//项目5
if (!Util.null2String(map.get("xm5")).equals("")) {
String groupKey = map.get("fbid") + "_" + map.get("bm") + "_" + map.get("ygid") + "_" + map.get("xm5");
Map<String,Object> itemMap = new HashMap<>();
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("ygid", map.get("ygid"));
itemMap.put("xm", map.get("xm5"));
itemMap.put("sc", map.get("sc5"));
if (toDealCqDataWithGroup.get(groupKey) != null) {
toDealCqDataWithGroup.get(groupKey).add(itemMap);
} else {
List<Map<String,Object>> list = new ArrayList<>();
list.add(itemMap);
toDealCqDataWithGroup.put(groupKey, list);
}
} else {
continue;
}
//项目6
if (!Util.null2String(map.get("xm6")).equals("")) {
String groupKey = map.get("fbid") + "_" + map.get("bm") + "_" + map.get("ygid") + "_" + map.get("xm6");
Map<String,Object> itemMap = new HashMap<>();
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("ygid", map.get("ygid"));
itemMap.put("xm", map.get("xm6"));
itemMap.put("sc", map.get("sc6"));
if (toDealCqDataWithGroup.get(groupKey) != null) {
toDealCqDataWithGroup.get(groupKey).add(itemMap);
} else {
List<Map<String,Object>> list = new ArrayList<>();
list.add(itemMap);
toDealCqDataWithGroup.put(groupKey, list);
}
} else {
continue;
}
//项目7
if (!Util.null2String(map.get("xm7")).equals("")) {
String groupKey = map.get("fbid") + "_" + map.get("bm") + "_" + map.get("ygid") + "_" + map.get("xm7");
Map<String,Object> itemMap = new HashMap<>();
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("ygid", map.get("ygid"));
itemMap.put("xm", map.get("xm7"));
itemMap.put("sc", map.get("sc7"));
if (toDealCqDataWithGroup.get(groupKey) != null) {
toDealCqDataWithGroup.get(groupKey).add(itemMap);
} else {
List<Map<String,Object>> list = new ArrayList<>();
list.add(itemMap);
toDealCqDataWithGroup.put(groupKey, list);
}
} else {
continue;
}
//项目8
if (!Util.null2String(map.get("xm8")).equals("")) {
String groupKey = map.get("fbid") + "_" + map.get("bm") + "_" + map.get("ygid") + "_" + map.get("xm8");
Map<String,Object> itemMap = new HashMap<>();
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("ygid", map.get("ygid"));
itemMap.put("xm", map.get("xm8"));
itemMap.put("sc", map.get("sc8"));
if (toDealCqDataWithGroup.get(groupKey) != null) {
toDealCqDataWithGroup.get(groupKey).add(itemMap);
} else {
List<Map<String,Object>> list = new ArrayList<>();
list.add(itemMap);
toDealCqDataWithGroup.put(groupKey, list);
}
}
}
//获取考勤项目和核算单位的映射
Map<String, String> hsdwInfoMap = new HashMap<>();
String kqxmSql = "select * from uf_jcl_kq_kqxm";
List<Map<String,Object>> kqxmData = DbTools.getSqlToList(kqxmSql);
for(Map<String,Object> kqxmMap : kqxmData) {
hsdwInfoMap.put(kqxmMap.get("id").toString(), Util.null2String(kqxmMap.get("hsdw")));
}
//处理分组好的数据
List<Map<String, String>> cqAddList = new ArrayList<>();
for(List<Map<String,Object>> list : toDealCqDataWithGroup.values()) {
String ry = list.get(0).get("ygid").toString();
String kqxm = list.get(0).get("xm").toString();
String gsfb = list.get(0).get("fbid").toString();
String gsbm = list.get(0).get("bm").toString();
int num = 0;
double time = 0;
//查询考勤项目核算单位:天,小时,分钟,次,即0123
// String kqxmSql = "select * from uf_jcl_kq_kqxm where id = " + kqxm;
// Map<String,Object> kqxmData = DbTools.getSqlToMap(kqxmSql);
String accountUnit = Util.null2String(hsdwInfoMap.get(kqxm));
//汇总区间数据
for (Map<String, Object> map : list) {
if (!accountUnit.equals("3")) {
num++;
double sc = Util.null2String(map.get("sc")).equals("") ? 0 : Double.parseDouble(map.get("sc").toString());
time += sc;
} else {
num ++;
}
}
//设置出勤汇总子表数据
Map<String, String> itemMap = new HashMap<>();
itemMap.put("mainid", mainId);
itemMap.put("ry", ry);
itemMap.put("kqxm", kqxm);
itemMap.put("gzfb", gsfb);
itemMap.put("gzbm", gsbm);
itemMap.put("lc", String.valueOf(num));
if (accountUnit.equals("0")) {
itemMap.put("lt", String.format("%.2f", time));
}
if (accountUnit.equals("1")) {
itemMap.put("ls", String.format("%.2f", time));
}
if (accountUnit.equals("2")) {
itemMap.put("lf", String.format("%.0f", time));
}
cqAddList.add(itemMap);
}
return cqAddList;
}
//汇总补打卡表
public List<Map<String, String>> getBdkAddList(String mainId, String subCompanyListStr, String startDate, String endDate) {
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 where b.fbid in (" + subCompanyListStr + ") and a.dkrq >= '" + startDate +"'" + " and a.dkrq <= '" + endDate +"'";
List<Map<String,Object>> bdkDates = DbTools.getSqlToList(bdkSql);
//先根据分部、部门、人员、项目分组
Map<String, List<Map<String,Object>>> toDealBdkDataWithGroup = new HashMap<>();
for (Map<String,Object> map : bdkDates) {
//补打卡项目
if (!Util.null2String(map.get("bdklx")).equals("")) {
String groupKey = map.get("fbid") + "_" + map.get("bm") + "_" + map.get("bdkry") + "_" + map.get("bdklx");
Map<String,Object> itemMap = new HashMap<>();
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("bdkry", map.get("bdkry"));
itemMap.put("xm", map.get("bdklx"));
if (toDealBdkDataWithGroup.get(groupKey) != null) {
toDealBdkDataWithGroup.get(groupKey).add(itemMap);
} else {
List<Map<String,Object>> list = new ArrayList<>();
list.add(itemMap);
toDealBdkDataWithGroup.put(groupKey, list);
}
}
}
//处理分组好的数据
List<Map<String, String>> bdkAddList = new ArrayList<>();
for(List<Map<String,Object>> list : toDealBdkDataWithGroup.values()) {
String ry = list.get(0).get("bdkry").toString();
String kqxm = list.get(0).get("xm").toString();
String gsfb = list.get(0).get("fbid").toString();
String gsbm = list.get(0).get("bm").toString();
int num = list.size();
//设置出勤汇总子表数据
Map<String, String> itemMap = new HashMap<>();
itemMap.put("mainid", mainId);
itemMap.put("ry", ry);
itemMap.put("kqxm", kqxm);
itemMap.put("gzfb", gsfb);
itemMap.put("gzbm", gsbm);
itemMap.put("lc", String.valueOf(num));
bdkAddList.add(itemMap);
}
return bdkAddList;
}
//汇总出勤津贴表
public List<Map<String, String>> getCqjtAddList(String mainId, String subCompanyListStr, String startDate, String endDate) {
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 where b.fbid in (" + subCompanyListStr + ") and a.rq >= '" + startDate +"'" + " and a.rq <= '" + endDate+"'";
List<Map<String,Object>> cqjtDates = DbTools.getSqlToList(cqjtSql);
//先根据分部、部门、人员、项目分组
Map<String, List<Map<String,Object>>> toDealCqjtDataWithGroup = new HashMap<>();
for (Map<String,Object> map : cqjtDates) {
//津贴类型
if (!Util.null2String(map.get("jtlx")).equals("")) {
String groupKey = map.get("fbid") + "_" + map.get("bm") + "_" + map.get("bdkry") + "_" + map.get("bdklx");
Map<String,Object> itemMap = new HashMap<>();
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("yg", map.get("yg"));
itemMap.put("xm", map.get("jtlx"));
if (toDealCqjtDataWithGroup.get(groupKey) != null) {
toDealCqjtDataWithGroup.get(groupKey).add(itemMap);
} else {
List<Map<String,Object>> list = new ArrayList<>();
list.add(itemMap);
toDealCqjtDataWithGroup.put(groupKey, list);
}
}
}
//处理分组好的数据
List<Map<String, String>> cqjtAddList = new ArrayList<>();
for(List<Map<String,Object>> list : toDealCqjtDataWithGroup.values()) {
String ry = list.get(0).get("yg").toString();
String kqxm = list.get(0).get("xm").toString();
String gsfb = list.get(0).get("fbid").toString();
String gsbm = list.get(0).get("bm").toString();
int num = list.size();
double time = 0;
//查询考勤项目核算单位:天,小时,分钟,次,即0123
String kqxmSql = "select * from uf_jcl_kq_kqxm where id = " + kqxm;
Map<String,Object> kqxmData = DbTools.getSqlToMap(kqxmSql);
String accountUnit = Util.null2String(kqxmData.get("hsdw"));
//汇总区间数据
for (Map<String, Object> map : list) {
if (!accountUnit.equals("3")) {
double sc = Util.null2String(map.get("sc")).equals("") ? 0 : Double.parseDouble(map.get("sc").toString());
time += sc;
}
}
//设置出勤汇总子表数据
Map<String, String> itemMap = new HashMap<>();
itemMap.put("mainid", mainId);
itemMap.put("ry", ry);
itemMap.put("kqxm", kqxm);
itemMap.put("gzfb", gsfb);
itemMap.put("gzbm", gsbm);
itemMap.put("lc", String.valueOf(num));
if (accountUnit.equals("0")) {
itemMap.put("lt", String.format("%.2f", time));
}
if (accountUnit.equals("1")) {
itemMap.put("ls", String.format("%.2f", time));
}
if (accountUnit.equals("2")) {
itemMap.put("lf", String.format("%.0f", time));
}
cqjtAddList.add(itemMap);
}
return cqjtAddList;
}
//临时汇总出勤结果表
private List<Map<String, Object>> getTemCqAddList(String startDate, String endDate, String subCompanyIds, String departmentIds, String empIds, String empStatus,
Map<String, Object> userManageInfo, Map<String, String> kqxmUnitInfo) {
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 + ")";
}
if (!departmentIds.equals("")) {
cqSql = cqSql + " and a.bm in (" + departmentIds + ")";
}
if (!empIds.equals("")) {
cqSql = cqSql + " and a.ygid in (" + empIds + ")";
}
if(empStatus.length()>0){
if (!empStatus.equals("8") && !empStatus.equals("9")) {
cqSql += " and b.status = "+empStatus+ "";
}else if (empStatus.equals("8")) {
cqSql += " and (b.status = 0 or b.status = 1 or b.status = 2 or b.status = 3) ";
}
}
List<Map<String,Object>> cqDates = DbTools.getSqlToList(cqSql);
//先根据分部、部门、人员、项目分组
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("")) {
//匹配出勤状态对应的考勤项目id
String kqxmId = cqzt.equals("0") ? "1" : "5";
String groupKey = map.get("fbid") + "_" + map.get("bm") + "_" + map.get("ygid") + "_" + kqxmId;
Map<String,Object> itemMap = new HashMap<>();
if ("1".equals(kqxmId) && Util.null2String(kqxmUnitInfo.get("1")).equals(AccountingUnitEnum.HOUR.getKey())) {
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("ygid", map.get("ygid"));
itemMap.put("xm", kqxmId);
itemMap.put("sc", Util.null2String(map.get("cqsc")));
} else {
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("ygid", map.get("ygid"));
itemMap.put("xm", kqxmId);
itemMap.put("sc", "1");
}
if (toDealCqDataWithGroup.get(groupKey) != null) {
toDealCqDataWithGroup.get(groupKey).add(itemMap);
} else {
List<Map<String,Object>> list = new ArrayList<>();
list.add(itemMap);
toDealCqDataWithGroup.put(groupKey, list);
}
}
//日期类型
String rqlx = Util.null2String(map.get("rqlx"));
if (!rqlx.equals("")) {
//匹配日期类型对应的考勤项目id
String kqxmId = null;
if (rqlx.equals("0") || rqlx.equals("4")) {
kqxmId = "2";
} else if (rqlx.equals("2") || rqlx.equals("3")) {
kqxmId = "3";
} else if (rqlx.equals("1")) {
kqxmId = "4";
}
String groupKey = map.get("fbid") + "_" + map.get("bm") + "_" + map.get("ygid") + "_" + kqxmId;
Map<String,Object> itemMap = new HashMap<>();
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("ygid", map.get("ygid"));
itemMap.put("xm", kqxmId);
itemMap.put("sc", "1");
if (toDealCqDataWithGroup.get(groupKey) != null) {
toDealCqDataWithGroup.get(groupKey).add(itemMap);
} else {
List<Map<String,Object>> list = new ArrayList<>();
list.add(itemMap);
toDealCqDataWithGroup.put(groupKey, list);
}
}
//项目1
if (!Util.null2String(map.get("xm1")).equals("")) {
String groupKey = map.get("fbid") + "_" + map.get("bm") + "_" + map.get("ygid") + "_" + map.get("xm1");
Map<String,Object> itemMap = new HashMap<>();
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("ygid", map.get("ygid"));
itemMap.put("xm", map.get("xm1"));
itemMap.put("sc", map.get("sc1"));
if (toDealCqDataWithGroup.get(groupKey) != null) {
toDealCqDataWithGroup.get(groupKey).add(itemMap);
} else {
List<Map<String,Object>> list = new ArrayList<>();
list.add(itemMap);
toDealCqDataWithGroup.put(groupKey, list);
}
} else {
continue;
}
//项目2
if (!Util.null2String(map.get("xm2")).equals("")) {
String groupKey = map.get("fbid") + "_" + map.get("bm") + "_" + map.get("ygid") + "_" + map.get("xm2");
Map<String,Object> itemMap = new HashMap<>();
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("ygid", map.get("ygid"));
itemMap.put("xm", map.get("xm2"));
itemMap.put("sc", map.get("sc2"));
if (toDealCqDataWithGroup.get(groupKey) != null) {
toDealCqDataWithGroup.get(groupKey).add(itemMap);
} else {
List<Map<String,Object>> list = new ArrayList<>();
list.add(itemMap);
toDealCqDataWithGroup.put(groupKey, list);
}
} else {
continue;
}
//项目3
if (!Util.null2String(map.get("xm3")).equals("")) {
String groupKey = map.get("fbid") + "_" + map.get("bm") + "_" + map.get("ygid") + "_" + map.get("xm3");
Map<String,Object> itemMap = new HashMap<>();
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("ygid", map.get("ygid"));
itemMap.put("xm", map.get("xm3"));
itemMap.put("sc", map.get("sc3"));
if (toDealCqDataWithGroup.get(groupKey) != null) {
toDealCqDataWithGroup.get(groupKey).add(itemMap);
} else {
List<Map<String,Object>> list = new ArrayList<>();
list.add(itemMap);
toDealCqDataWithGroup.put(groupKey, list);
}
} else {
continue;
}
//项目4
if (!Util.null2String(map.get("xm4")).equals("")) {
String groupKey = map.get("fbid") + "_" + map.get("bm") + "_" + map.get("ygid") + "_" + map.get("xm4");
Map<String,Object> itemMap = new HashMap<>();
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("ygid", map.get("ygid"));
itemMap.put("xm", map.get("xm4"));
itemMap.put("sc", map.get("sc4"));
if (toDealCqDataWithGroup.get(groupKey) != null) {
toDealCqDataWithGroup.get(groupKey).add(itemMap);
} else {
List<Map<String,Object>> list = new ArrayList<>();
list.add(itemMap);
toDealCqDataWithGroup.put(groupKey, list);
}
} else {
continue;
}
//项目5
if (!Util.null2String(map.get("xm5")).equals("")) {
String groupKey = map.get("fbid") + "_" + map.get("bm") + "_" + map.get("ygid") + "_" + map.get("xm5");
Map<String,Object> itemMap = new HashMap<>();
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("ygid", map.get("ygid"));
itemMap.put("xm", map.get("xm5"));
itemMap.put("sc", map.get("sc5"));
if (toDealCqDataWithGroup.get(groupKey) != null) {
toDealCqDataWithGroup.get(groupKey).add(itemMap);
} else {
List<Map<String,Object>> list = new ArrayList<>();
list.add(itemMap);
toDealCqDataWithGroup.put(groupKey, list);
}
} else {
continue;
}
//项目6
if (!Util.null2String(map.get("xm6")).equals("")) {
String groupKey = map.get("fbid") + "_" + map.get("bm") + "_" + map.get("ygid") + "_" + map.get("xm6");
Map<String,Object> itemMap = new HashMap<>();
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("ygid", map.get("ygid"));
itemMap.put("xm", map.get("xm6"));
itemMap.put("sc", map.get("sc6"));
if (toDealCqDataWithGroup.get(groupKey) != null) {
toDealCqDataWithGroup.get(groupKey).add(itemMap);
} else {
List<Map<String,Object>> list = new ArrayList<>();
list.add(itemMap);
toDealCqDataWithGroup.put(groupKey, list);
}
} else {
continue;
}
//项目7
if (!Util.null2String(map.get("xm7")).equals("")) {
String groupKey = map.get("fbid") + "_" + map.get("bm") + "_" + map.get("ygid") + "_" + map.get("xm7");
Map<String,Object> itemMap = new HashMap<>();
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("ygid", map.get("ygid"));
itemMap.put("xm", map.get("xm7"));
itemMap.put("sc", map.get("sc7"));
if (toDealCqDataWithGroup.get(groupKey) != null) {
toDealCqDataWithGroup.get(groupKey).add(itemMap);
} else {
List<Map<String,Object>> list = new ArrayList<>();
list.add(itemMap);
toDealCqDataWithGroup.put(groupKey, list);
}
} else {
continue;
}
//项目8
if (!Util.null2String(map.get("xm8")).equals("")) {
String groupKey = map.get("fbid") + "_" + map.get("bm") + "_" + map.get("ygid") + "_" + map.get("xm8");
Map<String,Object> itemMap = new HashMap<>();
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("ygid", map.get("ygid"));
itemMap.put("xm", map.get("xm8"));
itemMap.put("sc", map.get("sc8"));
if (toDealCqDataWithGroup.get(groupKey) != null) {
toDealCqDataWithGroup.get(groupKey).add(itemMap);
} else {
List<Map<String,Object>> list = new ArrayList<>();
list.add(itemMap);
toDealCqDataWithGroup.put(groupKey, list);
}
}
}
//处理分组好的数据
List<Map<String, Object>> cqAddList = new ArrayList<>();
for(List<Map<String,Object>> list : toDealCqDataWithGroup.values()) {
String ry = list.get(0).get("ygid").toString();
String kqxm = list.get(0).get("xm").toString();
String gsfb = list.get(0).get("fbid").toString();
String gsbm = list.get(0).get("bm").toString();
int num = 0;
double time = 0;
//查询考勤项目核算单位:天,小时,分钟,次,即0123
String kqxmSql = "select * from uf_jcl_kq_kqxm where id = " + kqxm;
Map<String,Object> kqxmData = DbTools.getSqlToMap(kqxmSql);
String accountUnit = Util.null2String(kqxmData.get("hsdw"));
//汇总区间数据
for (Map<String, Object> map : list) {
if (!accountUnit.equals("3")) {
num++;
double sc = Util.null2String(map.get("sc")).equals("") ? 0 : Double.parseDouble(map.get("sc").toString());
time += sc;
} else {
num ++;
}
}
//设置出勤汇总子表数据
Map<String, Object> itemMap = new HashMap<>();
itemMap.put("ry", ry);
itemMap.put("kqxm", kqxm);
itemMap.put("gzfb", gsfb);
itemMap.put("gzbm", gsbm);
itemMap.put("lc", String.valueOf(num));
if (accountUnit.equals("0")) {
itemMap.put("lt", String.format("%.2f", time));
}
if (accountUnit.equals("1")) {
itemMap.put("ls", String.format("%.2f", time));
}
if (accountUnit.equals("2")) {
itemMap.put("lf", String.format("%.2f", time));
}
cqAddList.add(itemMap);
}
return cqAddList;
}
//临时汇总考勤日报表
private List<Map<String, Object>> getTemDailyKqAddList(String startDate, String endDate, String subCompanyIds, String departmentIds, String empIds, String empStatus,
Map<String, Object> userManageInfo, Map<String, String> kqxmUnitInfo, Map<String, String> kqxmMcInfo, List<String> kqxmIdList) {
String cqSql = "select a.* from v_attdaily 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 + ")";
}
if (!departmentIds.equals("")) {
cqSql = cqSql + " and a.bm in (" + departmentIds + ")";
}
if (!empIds.equals("")) {
cqSql = cqSql + " and a.ygid in (" + empIds + ")";
}
if(empStatus.length()>0){
if (!empStatus.equals("8") && !empStatus.equals("9")) {
cqSql += " and b.status = "+empStatus+ "";
}else if (empStatus.equals("8")) {
cqSql += " and (b.status = 0 or b.status = 1 or b.status = 2 or b.status = 3) ";
}
}
List<Map<String,Object>> cqDates = DbTools.getSqlToListKeyOriginal(cqSql);
//先根据分部、部门、人员、项目分组
Map<String, List<Map<String,Object>>> toDealCqDataWithGroup = new HashMap<>();
//判断单一人员所有查询的考勤项目是否存在都为0的情况存在则不输出查询结果不存在则记录人员的groupKey在下面对象
Map<String, Boolean> finalRecordEmpInfo = new HashMap<>();
//将考勤项目id转为“名称”+“_c/t/s/f”
Map<String, String> kqxmMcUnitInfo = kqxmIdToMcUnit(kqxmIdList, kqxmUnitInfo, kqxmMcInfo);
String groupKey;
Map<String,Object> itemMap;
for (Map<String,Object> map : cqDates) {
//20240528需求变更校验当前登录人是否有权限查看相关数据
if (!checkViewAuth(userManageInfo, map.get("rq").toString(), map.get("ygid").toString())) {
continue;
}
//遍历需要查询的考勤项目名称信息
String scValue = "";
for (Map.Entry<String, String> entry : kqxmMcUnitInfo.entrySet()) {
scValue = Util.null2String(map.get(entry.getValue()));
if ("".equals(scValue) || "0".equals(scValue) || "0.00".equals(scValue)) {
continue;
}
groupKey = map.get("fbid") + "_" + map.get("bm") + "_" + map.get("ygid") + "_" + entry.getKey();
finalRecordEmpInfo.put(groupKey, true);
itemMap = new HashMap<>();
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("ygid", map.get("ygid"));
itemMap.put("xm", entry.getKey());
itemMap.put("sc", scValue);
if (toDealCqDataWithGroup.get(groupKey) != null) {
toDealCqDataWithGroup.get(groupKey).add(itemMap);
} else {
List<Map<String,Object>> list = new ArrayList<>();
list.add(itemMap);
toDealCqDataWithGroup.put(groupKey, list);
}
}
}
//处理分组好的数据
List<Map<String, Object>> dailyKqAddList = new ArrayList<>();
for(List<Map<String,Object>> list : toDealCqDataWithGroup.values()) {
String ry = list.get(0).get("ygid").toString();
String kqxm = list.get(0).get("xm").toString();
String gsfb = list.get(0).get("fbid").toString();
String gsbm = list.get(0).get("bm").toString();
int num = 0;
double time = 0;
String accountUnit = kqxmUnitInfo.get(kqxm);
//汇总区间数据
for (Map<String, Object> map : list) {
if (!accountUnit.equals(AccountingUnitEnum.ONCE.getKey())) {
num++;
double sc = Util.null2String(map.get("sc")).equals("") ? 0 : Double.parseDouble(map.get("sc").toString());
time += sc;
} else {
num ++;
}
}
//设置出勤汇总子表数据
itemMap = new HashMap<>();
itemMap.put("ry", ry);
itemMap.put("kqxm", kqxm);
itemMap.put("gzfb", gsfb);
itemMap.put("gzbm", gsbm);
itemMap.put("lc", String.valueOf(num));
if (accountUnit.equals(AccountingUnitEnum.DAY.getKey())) {
itemMap.put("lt", String.format("%.2f", time));
}
if (accountUnit.equals(AccountingUnitEnum.HOUR.getKey())) {
itemMap.put("ls", String.format("%.2f", time));
}
if (accountUnit.equals(AccountingUnitEnum.MINUTES.getKey())) {
itemMap.put("lf", String.format("%.0f", time));
}
dailyKqAddList.add(itemMap);
}
return dailyKqAddList;
}
private Map<String, String> kqxmIdToMcUnit(List<String> kqxmIdList, Map<String, String> kqxmUnitInfo, Map<String, String> kqxmMcInfo) {
Map<String, String>result = new HashMap<>();
String unit = "";
String mc = "";
for (String kqxmId : kqxmIdList) {
unit = Util.null2String(kqxmUnitInfo.get(kqxmId));
mc = Util.null2String(kqxmMcInfo.get(kqxmId));
if ("".equals(unit) || "".equals(mc)) {
continue;
}
if (unit.equals(AccountingUnitEnum.DAY.getKey())) {
result.put(kqxmId, mc + "_t");
} else if (unit.equals(AccountingUnitEnum.HOUR.getKey())) {
result.put(kqxmId, mc + "_s");
} else if (unit.equals(AccountingUnitEnum.MINUTES.getKey())) {
result.put(kqxmId, mc + "_f");
} else if (unit.equals(AccountingUnitEnum.ONCE.getKey())) {
result.put(kqxmId, mc + "_c");
}
}
return result;
}
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 = Util.null2String(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()) || listType.equals(PersonGroupListTypeEnum.SQLCONDITION.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, 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 " +
"where a.dkrq >= '" + startDate +"'" + " and a.dkrq <= '" + endDate +"'";
if (!subCompanyIds.equals("")) {
bdkSql = bdkSql + " and b.fbid in (" + subCompanyIds + ")";
}
if (!departmentIds.equals("")) {
bdkSql = bdkSql + " and b.bm in (" + departmentIds + ")";
}
if (!empIds.equals("")) {
bdkSql = bdkSql + " and a.bdkry in (" + empIds + ")";
}
if(empStatus.length()>0){
if (!empStatus.equals("8") && !empStatus.equals("9")) {
bdkSql += " and c.status = "+empStatus+ "";
}else if (empStatus.equals("8")) {
bdkSql += " and (c.status = 0 or c.status = 1 or c.status = 2 or c.status = 3) ";
}
}
List<Map<String,Object>> bdkDates = DbTools.getSqlToList(bdkSql);
//先根据分部、部门、人员、项目分组
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");
Map<String,Object> itemMap = new HashMap<>();
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("bdkry", map.get("bdkry"));
itemMap.put("xm", map.get("bdklx"));
if (toDealBdkDataWithGroup.get(groupKey) != null) {
toDealBdkDataWithGroup.get(groupKey).add(itemMap);
} else {
List<Map<String,Object>> list = new ArrayList<>();
list.add(itemMap);
toDealBdkDataWithGroup.put(groupKey, list);
}
}
}
//处理分组好的数据
List<Map<String, Object>> bdkAddList = new ArrayList<>();
for(List<Map<String,Object>> list : toDealBdkDataWithGroup.values()) {
String ry = list.get(0).get("bdkry").toString();
String kqxm = list.get(0).get("xm").toString();
String gsfb = list.get(0).get("fbid").toString();
String gsbm = list.get(0).get("bm").toString();
int num = list.size();
//设置出勤汇总子表数据
Map<String, Object> itemMap = new HashMap<>();
itemMap.put("ry", ry);
itemMap.put("kqxm", kqxm);
itemMap.put("gzfb", gsfb);
itemMap.put("gzbm", gsbm);
itemMap.put("lc", String.valueOf(num));
bdkAddList.add(itemMap);
}
return bdkAddList;
}
//临时汇总出勤津贴表
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 " +
"where a.rq >= '" + startDate +"'" + " and a.rq <= '" + endDate +"'";
if (!subCompanyIds.equals("")) {
cqjtSql = cqjtSql + " and b.fbid in (" + subCompanyIds + ")";
}
if (!departmentIds.equals("")) {
cqjtSql = cqjtSql + " and b.bm in (" + departmentIds + ")";
}
if (!empIds.equals("")) {
cqjtSql = cqjtSql + " and a.yg in (" + empIds + ")";
}
if(empStatus.length()>0){
if (!empStatus.equals("8") && !empStatus.equals("9")) {
cqjtSql += " and c.status = "+empStatus+ "";
}else if (empStatus.equals("8")) {
cqjtSql += " and (c.status = 0 or c.status = 1 or c.status = 2 or c.status = 3) ";
}
}
List<Map<String,Object>> cqjtDates = DbTools.getSqlToList(cqjtSql);
//先根据分部、部门、人员、项目分组
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");
Map<String,Object> itemMap = new HashMap<>();
itemMap.put("fbid", map.get("fbid"));
itemMap.put("bm", map.get("bm"));
itemMap.put("yg", map.get("yg"));
itemMap.put("xm", map.get("jtlx"));
if (toDealCqjtDataWithGroup.get(groupKey) != null) {
toDealCqjtDataWithGroup.get(groupKey).add(itemMap);
} else {
List<Map<String,Object>> list = new ArrayList<>();
list.add(itemMap);
toDealCqjtDataWithGroup.put(groupKey, list);
}
}
}
//处理分组好的数据
List<Map<String, Object>> cqjtAddList = new ArrayList<>();
for(List<Map<String,Object>> list : toDealCqjtDataWithGroup.values()) {
String ry = list.get(0).get("yg").toString();
String kqxm = list.get(0).get("xm").toString();
String gsfb = list.get(0).get("fbid").toString();
String gsbm = list.get(0).get("bm").toString();
int num = list.size();
double time = 0;
//查询考勤项目核算单位:天,小时,分钟,次,即0123
String kqxmSql = "select * from uf_jcl_kq_kqxm where id = " + kqxm;
Map<String,Object> kqxmData = DbTools.getSqlToMap(kqxmSql);
String accountUnit = Util.null2String(kqxmData.get("hsdw"));
//汇总区间数据
for (Map<String, Object> map : list) {
if (!accountUnit.equals("3")) {
double sc = Util.null2String(map.get("sc")).equals("") ? 0 : Double.parseDouble(map.get("sc").toString());
time += sc;
}
}
//设置出勤汇总子表数据
Map<String, Object> itemMap = new HashMap<>();
itemMap.put("ry", ry);
itemMap.put("kqxm", kqxm);
itemMap.put("gzfb", gsfb);
itemMap.put("gzbm", gsbm);
itemMap.put("lc", String.valueOf(num));
if (accountUnit.equals("0")) {
itemMap.put("lt", String.format("%.2f", time));
}
if (accountUnit.equals("1")) {
itemMap.put("ls", String.format("%.2f", time));
}
if (accountUnit.equals("2")) {
itemMap.put("lf", String.format("%.2f", time));
}
cqjtAddList.add(itemMap);
}
return cqjtAddList;
}
}