package com.engine.kq.cmd.report; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.engine.common.biz.AbstractCommonCommand; import com.engine.common.entity.BizLogContext; import com.engine.core.interceptor.CommandContext; import com.engine.hostar.util.HostarUtil; import com.engine.kq.biz.*; import com.engine.kq.util.KQDurationCalculatorUtil; import com.engine.kq.util.PageUidFactory; import weaver.common.DateUtil; import weaver.conn.RecordSet; import weaver.general.BaseBean; import weaver.general.TimeUtil; import weaver.general.Util; import weaver.hrm.User; 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 java.math.BigDecimal; import java.util.*; public class GetKQReportCmd extends AbstractCommonCommand> { BaseBean bb = new BaseBean(); public GetKQReportCmd(Map params, User user) { this.user = user; this.params = params; } @Override public Map execute(CommandContext commandContext) { Map retmap = new HashMap(); RecordSet rs = new RecordSet(); String sql = ""; try{ bb.writeLog("GetKQReportCmd start."); String pageUid = PageUidFactory.getHrmPageUid("KQReport"); SubCompanyComInfo subCompanyComInfo = new SubCompanyComInfo(); DepartmentComInfo departmentComInfo = new DepartmentComInfo(); ResourceComInfo resourceComInfo = new ResourceComInfo(); JobTitlesComInfo jobTitlesComInfo = new JobTitlesComInfo(); KQLeaveRulesBiz kqLeaveRulesBiz = new KQLeaveRulesBiz(); KQReportBiz kqReportBiz = new KQReportBiz(); 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")); 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; String rightSql = kqReportBiz.getReportRight("1",""+user.getUID(),"a"); if(isFromMyAttendance.equals("1")){ rightSql = ""; } List> leaveRules = kqLeaveRulesBiz.getAllLeaveRules(); List columns = new ArrayList(); Map column = null; List datas = new ArrayList(); Map data = null; Map mapChildColumnInfo = null; List childColumns = null; KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo(); while (kqReportFieldComInfo.next()){ if(Util.null2String(kqReportFieldComInfo.getParentid()).length()>0)continue; if(kqReportFieldComInfo.getFieldname().equals("kqCalendar"))continue; if(KQReportFieldComInfo.cascadekey2fieldname.keySet().contains(kqReportFieldComInfo.getFieldname()))continue; if(!kqReportFieldComInfo.getReportType().equals("all") && !kqReportFieldComInfo.getReportType().equals("month"))continue; if("leave".equalsIgnoreCase(kqReportFieldComInfo.getFieldname())&&leaveRules.size()==0)continue; column = new HashMap(); column.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage())); column.put("unit", KQReportBiz.getUnitType(kqReportFieldComInfo, user)); column.put("dataIndex", kqReportFieldComInfo.getFieldname()); column.put("type", kqReportFieldComInfo.getFieldname()); column.put("key", kqReportFieldComInfo.getFieldname()); column.put("isSystem", kqReportFieldComInfo.getIsSystem()); mapChildColumnInfo = this.getChildColumnsInfo(kqReportFieldComInfo.getFieldname(),user); childColumns = (List)mapChildColumnInfo.get("childColumns"); if(childColumns.size()>0) {//跨列width取子列的width column.put("rowSpan", 1); column.put("width", mapChildColumnInfo.get("sumChildColumnWidth")); column.put("children", childColumns); }else{ column.put("rowSpan", 3); column.put("width", Util.getIntValue(kqReportFieldComInfo.getWidth())); } column.put("showDetial",kqReportFieldComInfo.getShowDetial()); columns.add(column); columns.addAll(this.getCascadeKeyColumnsInfo(kqReportFieldComInfo.getCascadekey(),user)); } boolean isEnd = false; Calendar cal = DateUtil.getCalendar(); String today = DateUtil.getCurrentDate(); // if(DateUtil.compDate(today, toDate)>0){//结束日期不大于今天 // toDate = today; // if(DateUtil.compDate(today, fromDate)>0){//结束日期不大于今天 // fromDate = today; // } // } childColumns = new ArrayList<>(); for(String date=fromDate; !isEnd;) { if(date.equals(toDate)) isEnd = true; column = new HashMap(); column.put("title", DateUtil.geDayOfMonth(date)); column.put("dataIndex", date); column.put("key", date); column.put("type", date); column.put("rowSpan", 1); column.put("width", 90); column.put("isCalendar", 1); childColumns.add(column); cal.setTime(DateUtil.parseToDate(date)); date = DateUtil.getDate(cal.getTime(), 1); } column = new HashMap(); column.put("title", SystemEnv.getHtmlLabelName(386476, user.getLanguage())); column.put("dataIndex", "kqCalendar"); column.put("key", "kqCalendar"); if(childColumns.size()>0) {//跨列width取子列的width column.put("rowSpan", 1); column.put("width", childColumns.size()*90); column.put("children", childColumns); } columns.add(column); String forgotBeginWorkCheck_field = " sum(b.forgotBeginWorkCheck) "; if(rs.getDBType().equalsIgnoreCase("oracle")) { forgotBeginWorkCheck_field = " sum(nvl(b.forgotBeginWorkCheck,0)) "; }else if((rs.getDBType()).equalsIgnoreCase("mysql")){ forgotBeginWorkCheck_field = " sum(ifnull(b.forgotBeginWorkCheck,0)) "; }else { forgotBeginWorkCheck_field = " sum(isnull(b.forgotBeginWorkCheck,0)) "; } Map definedFieldInfo = new KQFormatBiz().getDefinedField(); String definedFieldSum = Util.null2String(definedFieldInfo.get("definedFieldSum")); String backFields = " (select sum(zm.cccb) from uf_cbxxjlb zm where zm.xm = a.id and zm.rq >= '" + fromDate + "' and zm.rq <= '" + toDate + "') as mealAllowance," + " (select sum(zm.zdcb) from uf_cbxxjlb zm where zm.xm = a.id and zm.rq >= '" + fromDate + "' and zm.rq <= '" + toDate + "') as statAllowance," + " (select sum(zm.jmybcb) from uf_cbxxjlb zm where zm.xm = a.id and zm.rq >= '" + fromDate + "' and zm.rq <= '" + toDate + "') as nightAllowance," + " (select sum(zm.hrzdcb) from uf_cbxxjlb zm where zm.xm = a.id and zm.rq >= '" + fromDate + "' and zm.rq <= '" + toDate + "') as otherStatAllowance," + " (select sum(zm.ybbz) from uf_cbxxjlb zm where zm.xm = a.id and zm.rq >= '" + fromDate + "' and zm.rq <= '" + toDate + "') as nightShiftSubsidy," + " a.id,a.lastname,a.workcode,a.dsporder,b.resourceid,a.subcompanyid1 as subcompanyid,a.departmentid,a.jobtitle," + " sum(b.workdays) as workdays,sum(b.workMins) as workMins,sum(b.attendancedays) as attendancedays," + " sum(FLOOR( b.attendanceMins / 30 ) * 30 ) as attendanceMins,sum(b.beLate) as beLate,sum(b.beLateMins) as beLateMins, " + " sum(b.graveBeLate) as graveBeLate, sum(b.graveBeLateMins) as graveBeLateMins,sum(b.leaveEearly) as leaveEearly," + " sum(b.leaveEarlyMins) as leaveEarlyMins, sum(b.graveLeaveEarly) as graveLeaveEarly, " + " sum(b.graveLeaveEarlyMins) as graveLeaveEarlyMins,sum(b.absenteeism) as absenteeism, " + " sum(b.signdays) as signdays,sum(b.signmins) as signmins, "+ " sum(b.absenteeismMins ) as absenteeismMins, sum(b.forgotCheck)+"+forgotBeginWorkCheck_field+" as forgotCheck, sum(b.zeropoint) as zeropoint "+(definedFieldSum.length()>0?","+definedFieldSum+"":""); if(rs.getDBType().equals("oracle")){ backFields = "/*+ index(kq_format_total IDX_KQ_FORMAT_TOTAL_KQDATE) */ "+backFields; } String sqlFrom = " from hrmresource a, kq_format_total b where a.id= b.resourceid and b.kqdate >='"+fromDate+"' and b.kqdate <='"+toDate+"'"; String sqlWhere = rightSql; String groupBy = " group by a.id,a.lastname,a.workcode,a.dsporder,b.resourceid,a.subcompanyid1,a.departmentid,a.jobtitle "; if(subCompanyId.length()>0){ sqlWhere +=" and a.subcompanyid1 in("+subCompanyId+") "; } if(departmentId.length()>0){ sqlWhere +=" and a.departmentid in("+departmentId+") "; } if(resourceId.length()>0){ sqlWhere +=" and a.id in("+resourceId+") "; } if(viewScope.equals("4")){//我的下属 if(allLevel.equals("1")){//所有下属 sqlWhere+=" and a.managerstr like '%,"+user.getUID()+",%'"; }else{ sqlWhere+=" and a.managerid="+user.getUID();//直接下属 } } if (!"1".equals(isNoAccount)) { sqlWhere += " and a.loginid is not null "+(rs.getDBType().equals("oracle")?"":" and a.loginid<>'' "); } if(status.length()>0){ if (!status.equals("8") && !status.equals("9")) { sqlWhere += " and a.status = "+status+ ""; }else if (status.equals("8")) { sqlWhere += " and (a.status = 0 or a.status = 1 or a.status = 2 or a.status = 3) "; } } sql = " select count(*) as c from ( select 1 as c "+sqlFrom+sqlWhere+groupBy+") t"; rs.execute(sql); if (rs.next()){ count = rs.getInt("c"); } if (count <= 0) { pageCount = 0; } pageCount = count / pageSize + ((count % pageSize > 0) ? 1 : 0); isHaveNext = (pageIndex + 1 <= pageCount) ? 1 : 0; isHavePre = (pageIndex - 1 >= 1) ? 1 : 0; String orderBy = " order by t.dsporder asc, t.lastname asc "; String descOrderBy = " order by t.dsporder desc, t.lastname desc "; //默认排序设置 start,有性能问题,先取消,后面再看看有没有好的方式 // String orderBySql = "select * from kq_report_order where userId=? and sort=1 order by orders"; // rs.executeQuery(orderBySql, user.getUID()); // if (rs.getCounts() <= 0) { // orderBySql = "select * from kq_report_order where userId=0 and sort=1 order by orders"; // rs.executeQuery(orderBySql); // } // while (rs.next()) { // String dataIndex = rs.getString("dataIndex"); // String ascOrDesc = rs.getString("ascOrDesc"); // String ascOrDesc1 = (ascOrDesc.equals("")||ascOrDesc.equals("asc"))?"desc":"asc"; // if (dataIndex.equals("organization")) { // orderBy += ",showOrderOfDeptTree " + ascOrDesc + ",dept_id " + ascOrDesc; // descOrderBy += ",showOrderOfDeptTree " + ascOrDesc1 + ",dept_id " + ascOrDesc1; // } // if (dataIndex.equalsIgnoreCase("dspOrder") || dataIndex.equalsIgnoreCase("lastName")) { // orderBy += "," + dataIndex + " " + ascOrDesc + ",id " + ascOrDesc; // descOrderBy += "," + dataIndex + " " + ascOrDesc1 + ",id " + ascOrDesc1; // } else if (dataIndex.equalsIgnoreCase("deptShowOrder") || dataIndex.equalsIgnoreCase("deptName")) { // orderBy += "," + dataIndex + " " + ascOrDesc + ",dept_id " + ascOrDesc; // descOrderBy += "," + dataIndex + " " + ascOrDesc1 + ",dept_id " + ascOrDesc1; // } else if (dataIndex.equalsIgnoreCase("subcomShowOrder") || dataIndex.equalsIgnoreCase("subcomName")) { // orderBy += "," + dataIndex + " " + ascOrDesc + ",subcom_id " + ascOrDesc; // descOrderBy += "," + dataIndex + " " + ascOrDesc1 + ",subcom_id " + ascOrDesc1; // } // } // orderBy = orderBy.startsWith(",") ? orderBy.substring(1) : orderBy; // descOrderBy = descOrderBy.startsWith(",") ? descOrderBy.substring(1) : descOrderBy; // orderBy = orderBy.equals("") ? " t.dspOrder,t.id " : orderBy; // descOrderBy = descOrderBy.equals("") ? " t.dspOrder,t.id " : descOrderBy; // orderBy = "order by "+orderBy; sql = backFields + sqlFrom + sqlWhere + groupBy; if (pageIndex > 0 && pageSize > 0) { if (rs.getDBType().equals("oracle")) { sql = " select * from (select " + sql+") t "+orderBy; sql = "select * from ( select row_.*, rownum rownum_ from ( " + sql + " ) row_ where rownum <= " + (pageIndex * pageSize) + ") where rownum_ > " + ((pageIndex - 1) * pageSize); } else if (rs.getDBType().equals("mysql")) { sql = " select * from (select " + sql+") t "+orderBy; sql = "select t1.* from (" + sql + ") t1 limit " + ((pageIndex - 1) * pageSize) + "," + pageSize; } else if (rs.getDBType().equals("postgresql")) { sql = " select * from (select " + sql+") t "+orderBy; sql = "select t1.* from (" + sql + ") t1 limit " +pageSize + " offset " + ((pageIndex - 1) * pageSize); } else { orderBy = " order by dsporder asc, lastname asc "; descOrderBy = " order by dsporder desc, lastname desc "; if (pageIndex > 1) { int topSize = pageSize; if (pageSize * pageIndex > count) { topSize = count - (pageSize * (pageIndex - 1)); } sql = " select top " + topSize + " * from ( select top " + topSize + " * from ( select top " + (pageIndex * pageSize) + sql + orderBy+ " ) tbltemp1 " + descOrderBy + ") tbltemp2 " + orderBy; } else { sql = " select top " + pageSize + sql+orderBy; } } } else { sql = " select " + sql; } // #1475814-概述:满足考勤报分部部门显示及导出时显示全路径 String fullPathMainKey = "show_full_path"; KQSettingsComInfo kqSettingsComInfo = new KQSettingsComInfo(); String isShowFullPath = Util.null2String(kqSettingsComInfo.getMain_val(fullPathMainKey),"0"); String show_card_source = Util.null2String(kqSettingsComInfo.getMain_val("show_card_source"),"0");//是否显示打卡数据,以及打卡数据来源 params.put("show_card_source",show_card_source); KQOvertimeRulesBiz kqOvertimeRulesBiz = new KQOvertimeRulesBiz(); int uintType = kqOvertimeRulesBiz.getMinimumUnit();//当前加班单位 double hoursToDay = kqOvertimeRulesBiz.getHoursToDay();//当前天跟小时计算关系 params.put("uintType",uintType); params.put("hoursToDay",hoursToDay); long startTime = System.currentTimeMillis(); Map flowData = kqReportBiz.getFlowData(params,user); long endTime = System.currentTimeMillis(); long elapsedTime = endTime - startTime; // 执行时间 bb.writeLog("执行时间:" + elapsedTime + "毫秒" ); // /*考勤二开--驻点餐补start*/ HostarUtil hostarUtil = new HostarUtil(); // Map attendanceMap = new HashMap<>(); // String acqAttendanceSql = "select a.id, b.attendanceMins, b.kqdate from hrmresource a, kq_format_total b where a.id= b.resourceid and b.kqdate >='"+fromDate+"' and b.kqdate <='"+toDate+"' "+sqlWhere; // bb.writeLog("acqAttendanceSql: " + acqAttendanceSql); // rs.executeQuery(acqAttendanceSql); // while (rs.next()) { // double attendanceMins = Util.getDoubleValue(Util.null2String(rs.getString("attendanceMins"))); // String id = Util.null2String(rs.getString("id")); // String kqdate = Util.null2String(rs.getString("kqdate")); // if (attendanceMins >= 0.00) { // attendanceMap.put(id + "|DailyAllowance" +"|" + kqdate, attendanceMins); // } // } // bb.writeLog("attendanceMap: " + attendanceMap); // /*考勤二开--驻点餐补end*/ bb.writeLog("汇总报表--sql: " + sql); rs.execute(sql); while (rs.next()) { data = new HashMap<>(); kqReportFieldComInfo.setTofirstRow(); String id = rs.getString("id"); data.put("resourceId",id); while (kqReportFieldComInfo.next()){ if(!Util.null2String(kqReportFieldComInfo.getIsdataColumn()).equals("1"))continue; if(!kqReportFieldComInfo.getReportType().equals("all") && !kqReportFieldComInfo.getReportType().equals("month"))continue; if("leave".equalsIgnoreCase(kqReportFieldComInfo.getFieldname())&&leaveRules.size()==0){ continue; } String fieldName = kqReportFieldComInfo.getFieldname(); String fieldValue = ""; if(fieldName.equals("subcompany")){ String tmpSubcompanyId = Util.null2String(rs.getString("subcompanyid")); if(tmpSubcompanyId.length()==0){ tmpSubcompanyId = Util.null2String(resourceComInfo.getSubCompanyID(id)); } data.put("subcompanyId",tmpSubcompanyId); fieldValue = "1".equals(isShowFullPath) ? SubCompanyComInfo.getSubcompanyRealPath(tmpSubcompanyId, "/", "0") : subCompanyComInfo.getSubCompanyname(tmpSubcompanyId); // fieldValue = subCompanyComInfo.getSubCompanyname(tmpSubcompanyId); }else if(fieldName.equals("department")){ String tmpDepartmentId = Util.null2String(rs.getString("departmentid")); if(tmpDepartmentId.length()==0){ tmpDepartmentId = Util.null2String(resourceComInfo.getDepartmentID(id)); } data.put("departmentId",tmpDepartmentId); fieldValue = "1".equals(isShowFullPath) ? departmentComInfo.getDepartmentRealPath(tmpDepartmentId, "/", "0") : departmentComInfo.getDepartmentname(tmpDepartmentId); // fieldValue = departmentComInfo.getDepartmentname(tmpDepartmentId); }else if(fieldName.equals("jobtitle")){ String tmpJobtitleId = Util.null2String(rs.getString("jobtitle")); if(tmpJobtitleId.length()==0){ tmpJobtitleId = Util.null2String(resourceComInfo.getJobTitle(id)); } data.put("jobtitleId",tmpJobtitleId); fieldValue = jobTitlesComInfo.getJobTitlesname(tmpJobtitleId); }else if(fieldName.equals("attendanceSerial")){ List serialIds = null; if(attendanceSerial.length()>0){ serialIds = Util.splitString2List(attendanceSerial,","); } for(int i=0;serialIds!=null&&i tempMap = hostarUtil.parseMapForFilter(flowData, "DailyMealAllow|" + resourceId); //// bb.writeLog("tempMap: " + tempMap); // // if ( !tempMap.isEmpty()) { // int tempValue = 0; // for (String key: tempMap.keySet()) { // int intValue = Util.getIntValue(Util.null2String(tempMap.get(key))); // tempValue = tempValue + (Math.max(intValue, 0)); // } // fieldValue = String.valueOf(tempValue); // } //// bb.writeLog("fieldValue: " + fieldValue); // data.put(fieldName, fieldValue); // } else if ("statAllowance".equals(fieldName)) {//考勤二开--驻点餐补 // bb.writeLog("statAllowance"); // // params.put("statUser", id); // bb.writeLog("params: " + params ); // // Map temp = kqReportBiz.getStatAllowanceData(params, user); // if (temp == null || temp.size() == 0) { // data.put(fieldName, "0"); // } else { // Map tempMap = hostarUtil.parseMapForFilter(temp, id + "|StatAllowance"); // //// Map tempMap = hostarUtil.parseMapForFilter(flowData, id + "|DailyStatAllowance"); //// bb.writeLog("tempMap: " + tempMap); // if ( !tempMap.isEmpty()) { // double tempValue = 0.00; // for (String key: tempMap.keySet()) { // double doubleValue = Util.getDoubleValue(Util.null2String(tempMap.get(key))); // tempValue = tempValue + (Math.max(doubleValue, 0.00)); // } // fieldValue = String.valueOf(tempValue); // } //// bb.writeLog("fieldValue: " + fieldValue); // data.put(fieldName, fieldValue); // } // // // } else if ("nightAllowance".equals(fieldName)) {//考勤二开--精密夜班餐补 //// bb.writeLog("nightAllowance"); //// bb.writeLog("flowData: " + flowData); // Map tempMap = hostarUtil.parseMapForFilter(flowData, id + "|DailyNightShiftAllowanceData"); //// bb.writeLog("tempMap: " + tempMap); // if ( !tempMap.isEmpty()) { // double tempValue = 0.00; // for (String key: tempMap.keySet()) { // double doubleValue = Util.getDoubleValue(Util.null2String(tempMap.get(key))); // tempValue = tempValue + (Math.max(doubleValue, 0.00)); // } // fieldValue = String.valueOf(tempValue); // } //// bb.writeLog("fieldValue: " + fieldValue); // data.put(fieldName, fieldValue); // } else if ("nightShiftSubsidy".equals(fieldName)) {//考勤二开--夜班补助 // params.put("subUserId", id); // bb.writeLog("params: " + params ); // // Map temp = kqReportBiz.getDailyNightShiftSubsidyData(params, user); // if (temp == null || temp.size() == 0) { // data.put(fieldName, "0"); // } else { // Map tempMap = hostarUtil.parseMapForFilter(temp, id + "|DailyNightShiftSubsidyData"); // // if ( !tempMap.isEmpty()) { // int tempValue = 0; // for (String key: tempMap.keySet()) { // int intValue = Util.getIntValue(Util.null2String(tempMap.get(key))); // tempValue = tempValue + (Math.max(intValue, 0)); // } // fieldValue = String.valueOf(tempValue); // } // data.put(fieldName, fieldValue); // } // // } else if ("otherStatAllowance".equals(fieldName)) {//考勤二开--鸿仁驻点餐补 //// bb.writeLog("otherStatAllowance"); //// bb.writeLog("flowData: " + flowData); // Map tempMap = hostarUtil.parseMapForFilter(flowData, id + "|DailyOtherStatAllowance"); //// bb.writeLog("tempMap: " + tempMap); // if ( !tempMap.isEmpty()) { // double tempValue = 0.00; // for (String key: tempMap.keySet()) { // double doubleValue = Util.getDoubleValue(Util.null2String(tempMap.get(key))); // tempValue = tempValue + (Math.max(doubleValue, 0.00)); // } // fieldValue = String.valueOf(tempValue); // } //// bb.writeLog("fieldValue: " + fieldValue); // data.put(fieldName, fieldValue); } else { fieldValue = Util.null2String(rs.getString(fieldName)); if(Util.null2String(kqReportFieldComInfo.getUnittype()).length()>0) { if(fieldValue.length() == 0){ fieldValue="0"; }else{ if (kqReportFieldComInfo.getUnittype().equals("2")) { fieldValue = KQDurationCalculatorUtil.getDurationRound(("" + (Util.getDoubleValue(fieldValue) / 60.0))); } } } } data.put(fieldName,fieldValue); } //请假 List> allLeaveRules = kqLeaveRulesBiz.getAllLeaveRules(); Map leaveRule = null; for(int i=0;allLeaveRules!=null&&i)allLeaveRules.get(i); String flowType = Util.null2String("leaveType_"+leaveRule.get("id")); String leaveData = Util.null2String(flowData.get(id+"|"+flowType)); String flowLeaveBackType = Util.null2String("leavebackType_"+leaveRule.get("id")); String leavebackData = Util.null2s(Util.null2String(flowData.get(id+"|"+flowLeaveBackType)),"0.0"); String b_flowLeaveData = ""; String flowLeaveData = ""; try{ //以防止出现精度问题 if(leaveData.length() == 0){ leaveData = "0.0"; } if(leavebackData.length() == 0){ leavebackData = "0.0"; } BigDecimal b_leaveData = new BigDecimal(leaveData); BigDecimal b_leavebackData = new BigDecimal(leavebackData); b_flowLeaveData = b_leaveData.subtract(b_leavebackData).toString(); if(Util.getDoubleValue(b_flowLeaveData, -1) < 0){ b_flowLeaveData = "0.0"; } }catch (Exception e){ writeLog("GetKQReportCmd:leaveData"+leaveData+":leavebackData:"+leavebackData+":"+e); } //考虑下冻结的数据 if(b_flowLeaveData.length() > 0){ flowLeaveData = KQDurationCalculatorUtil.getDurationRound(b_flowLeaveData); }else{ flowLeaveData = KQDurationCalculatorUtil.getDurationRound(Util.null2String(Util.getDoubleValue(leaveData,0.0)-Util.getDoubleValue(leavebackData,0.0))); } data.put(flowType,flowLeaveData); } Map detialDatas = kqReportBiz.getDetialDatas(id,fromDate,toDate,user,flowData,false,uintType,show_card_source); // new KQLog().info("id:"+id+":detialDatas:"+detialDatas); isEnd = false; for(String date=fromDate; !isEnd;) { if(date.equals(toDate)) isEnd = true; if(DateUtil.compDate(today, date)>0){ data.put(date,""); }else{ // new KQLog().info("id:date:"+(id+"|"+date)+":detialDatas.get:"+detialDatas.get(id+"|"+date)); data.put(date,detialDatas.get(id+"|"+date)==null?SystemEnv.getHtmlLabelName(26593, user.getLanguage()):detialDatas.get(id+"|"+date)); } cal.setTime(DateUtil.parseToDate(date)); date = DateUtil.getDate(cal.getTime(), 1); } datas.add(data); } List lsHolidays = KQHolidaySetBiz.getHolidaySetListByScope(""+user.getUID(),fromDate,toDate); retmap.put("holidays", lsHolidays); retmap.put("columns",columns); retmap.put("datas",datas); 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){ writeLog(e); bb.writeLog("GetKQReportCmd Exception: " + e.getMessage()); } return retmap; } private Map getChildColumnsInfo(String parentid, User user){ Map returnMap = new HashMap<>(); List lsChildColumns = new ArrayList<>(); Map column = null; int sumChildColumnWidth = 0; if(parentid.equals("attendanceSerial")){//考勤班次 KQShiftManagementComInfo kqShiftManagementComInfo = new KQShiftManagementComInfo(); JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data"))); List serialIds = null; if(Util.null2String(jsonObj.get("attendanceSerial")).length()>0){ serialIds = Util.splitString2List(Util.null2String(jsonObj.get("attendanceSerial")),","); } for(int i=0;serialIds!=null&&i> leaveRules = kqLeaveRulesBiz.getAllLeaveRules(); for(int i=0;leaveRules!=null&&i leaveRule = leaveRules.get(i); String id = "leaveType_"+Util.null2String(leaveRule.get("id")); String name = Util.null2String(leaveRule.get("name")); String unitType = Util.null2String(leaveRule.get("unitType")); column = new HashMap(); column.put("title", name); column.put("unit", KQUnitBiz.isLeaveHour(unitType) ?SystemEnv.getHtmlLabelName(391, user.getLanguage()):SystemEnv.getHtmlLabelName(1925, user.getLanguage())); column.put("width", 65); column.put("dataIndex", id); column.put("key", id); column.put("rowSpan", 2); column.put("colSpan", 1); column.put("showDetial","1"); sumChildColumnWidth+=65; lsChildColumns.add(column); } }else if(parentid.equals("overtime")){ String[] overtimeChild = {"overtime_nonleave","overtime_4leave","overtimeTotal"}; for(int i=0;i0){ if(unitType.equals("1")){ unitTypeName=SystemEnv.getHtmlLabelName(1925, user.getLanguage()); }else if(unitType.equals("2")){ unitTypeName=SystemEnv.getHtmlLabelName(391, user.getLanguage()); }else if(unitType.equals("3")){ unitTypeName=SystemEnv.getHtmlLabelName(18083, user.getLanguage()); } } column.put("unit", unitTypeName); } column.put("title", SystemEnv.getHtmlLabelNames(fieldlabel, user.getLanguage())); column.put("dataIndex", id); column.put("key", id); column.put("rowSpan", 1); Map mapChildColumnInfo = getChildColumnsInfo(id, user); int childWidth = 65; List childColumns = (List)mapChildColumnInfo.get("childColumns"); if(childColumns.size()>0) {//跨列width取子列的width column.put("children", childColumns); childWidth = Util.getIntValue(Util.null2String(mapChildColumnInfo.get("sumChildColumnWidth")),65); } column.put("width", childWidth+""); sumChildColumnWidth+=childWidth; lsChildColumns.add(column); } }else{ KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo(); while (kqReportFieldComInfo.next()){ if(kqReportFieldComInfo.getParentid().equals(parentid)) { if(!kqReportFieldComInfo.getReportType().equals("month"))continue; column = new HashMap(); column.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage())); column.put("unit", KQReportBiz.getUnitType(kqReportFieldComInfo, user)); column.put("width", Util.getIntValue(kqReportFieldComInfo.getWidth())); column.put("dataIndex", kqReportFieldComInfo.getFieldname()); column.put("key", kqReportFieldComInfo.getFieldname()); column.put("rowSpan", 1); column.put("colSpan", 1); column.put("showDetial",kqReportFieldComInfo.getShowDetial()); sumChildColumnWidth+=Util.getIntValue(kqReportFieldComInfo.getWidth()); lsChildColumns.add(column); } } } returnMap.put("childColumns",lsChildColumns); returnMap.put("sumChildColumnWidth",sumChildColumnWidth); return returnMap; } private List getCascadeKeyColumnsInfo(String cascadeKey, User user){ List lsChildColumns = new ArrayList<>(); if(Util.null2String(cascadeKey).length()==0){ return lsChildColumns; } Map column = null; List lsCascadeKey = Util.splitString2List(cascadeKey,","); KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo(); for(int i=0;i