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.kq.biz.KQReportBiz; import com.engine.kq.util.ExcelUtil; import com.engine.kq.util.KQDurationCalculatorUtil; import com.engine.kq.util.UtilKQ; 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 javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.util.*; public class ExportExcelCmd extends AbstractCommonCommand> { private HttpServletRequest request; private HttpServletResponse response; private List lsFieldDataKey; BaseBean bb = new BaseBean(); public ExportExcelCmd(Map params, HttpServletRequest request, HttpServletResponse response, User user) { this.user = user; this.params = params; this.request = request; this.response = response; this.lsFieldDataKey = new ArrayList<>(); } @Override public Map execute(CommandContext commandContext) { Map retmap = new HashMap(); RecordSet rs = new RecordSet(); String sql = ""; try { 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")); List showColumns = Util.splitString2List(Util.null2String(jsonObj.get("showColumns")), ","); showColumns.add("lastname"); showColumns.removeIf(showColumn->showColumn.trim().equals("")); List tmpShowColumns = new ArrayList<>(); for(String showColumn:showColumns){ tmpShowColumns.add(showColumn); String cascadekey = ""; if(showColumn.equals("beLate")){ cascadekey = "beLateMins"; }else if(showColumn.equals("leaveEearly")){ cascadekey = "leaveEarlyMins"; }else if(showColumn.equals("graveBeLate")){ cascadekey = "graveBeLateMins"; }else if(showColumn.equals("graveLeaveEarly")){ cascadekey = "graveLeaveEarlyMins"; }else if(showColumn.equals("absenteeism")){ cascadekey = "absenteeismMins"; }else if(showColumn.equals("overtime")){ tmpShowColumns.add("overtime_4leave"); tmpShowColumns.add("overtime_nonleave"); tmpShowColumns.add("workingDayOvertime_nonleave"); tmpShowColumns.add("workingDayOvertime_4leave"); tmpShowColumns.add("restDayOvertime_nonleave"); tmpShowColumns.add("restDayOvertime_4leave"); tmpShowColumns.add("holidayOvertime_4leave"); tmpShowColumns.add("holidayOvertime_nonleave"); } if(cascadekey.length()>0){ tmpShowColumns.add(cascadekey); } } showColumns = tmpShowColumns; String rightSql = new KQReportBiz().getReportRight("1", "" + user.getUID(), "a"); LinkedHashMap workbook = new LinkedHashMap<>(); List lsSheet = new ArrayList<>(); Map sheet = null; List titleList = new ArrayList<>(); Map title = null; List> dataList = new ArrayList<>(); List data = null; List> constraintList = null; sheet = new HashMap<>(); sheet.put("sheetName", SystemEnv.getHtmlLabelName(390351, user.getLanguage())); sheet.put("sheetTitle", SystemEnv.getHtmlLabelName(390351, user.getLanguage())); boolean isEnd = false; Calendar cal = DateUtil.getCalendar(); List> leaveRules = kqLeaveRulesBiz.getAllLeaveRules(); 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 (!showColumns.contains(kqReportFieldComInfo.getFieldname())&&!showColumns.contains(kqReportFieldComInfo.getParentid())) continue; if("leave".equalsIgnoreCase(kqReportFieldComInfo.getFieldname())&&leaveRules.size()==0){ continue; } if("nightdaysd".equals(kqReportFieldComInfo.getFieldname()) || "nightdaysx".equals(kqReportFieldComInfo.getFieldname())) { continue; } title = new HashMap<>(); String unitType = KQReportBiz.getUnitType(kqReportFieldComInfo, user); if(unitType.length()>0){ title.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage())+ "(" + unitType + ")"); }else{ title.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage())); } title.put("width", 30 * 256); this.lsFieldDataKey.add(kqReportFieldComInfo.getFieldname()); mapChildColumnInfo = this.getChildColumnsInfo(kqReportFieldComInfo.getFieldname(), user); childColumns = (List) mapChildColumnInfo.get("childColumns"); if (childColumns.size() > 0) {//跨列width取子列的width title.put("children", childColumns); title.put("colSpan", childColumns.size()); } else { title.put("rowSpan", 3); } titleList.add(title); titleList.addAll(this.getCascadeKeyColumnsInfo(kqReportFieldComInfo.getCascadekey(),user)); } String today = DateUtil.getCurrentDate(); // if (DateUtil.compDate(today, toDate) > 0) {//结束如期不大于今天 // toDate = today; // } Map map99 = new HashMap<>(); if(showColumns.contains("kqCalendar")) { childColumns = new ArrayList<>(); for (String date = fromDate; !isEnd; ) { if (date.equals(toDate)) isEnd = true; title = new HashMap<>(); map99.put(date,"22222"); title.put("title", UtilKQ.getWeekDayShort(DateUtil.getWeek(date)-1,user.getLanguage()) +"\r\n"+ DateUtil.geDayOfMonth(date)); title.put("width", 30 * 256); childColumns.add(title); cal.setTime(DateUtil.parseToDate(date)); date = DateUtil.getDate(cal.getTime(), 1); } title = new HashMap(); title.put("title", SystemEnv.getHtmlLabelName(386476, user.getLanguage())); if (childColumns.size() > 0) {//跨列width取子列的width title.put("children", childColumns); title.put("colSpan", childColumns.size()); } titleList.add(title); } if(showColumns.contains("nightdaysd")) { //刘浩 新增一列[大夜班天数] title = new HashMap(); title.put("title","大夜班天数"); title.put("width", 30 * 256); title.put("rowSpan",3); titleList.add(title); } if(showColumns.contains("nightdaysx")) { //刘浩 新增一列[小夜班天数] title = new HashMap(); title.put("title","小夜班天数"); title.put("width", 30 * 256); title.put("rowSpan",3); titleList.add(title); } sheet.put("titleList", titleList); 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 = " 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(b.attendanceMins) 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 "+(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) "; } } String orderBy = " order by a.dsporder asc, a.lastname asc "; String descOrderBy = " order by a.dsporder desc, a.lastname desc "; sql = "select " + backFields + sqlFrom + sqlWhere + groupBy + orderBy; //System.out.println("start" + DateUtil.getFullDate()); KQSettingsComInfo kqSettingsComInfo = new KQSettingsComInfo(); 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); Map flowData = new KQReportBiz().getFlowData(params, user); //System.out.println("end" + DateUtil.getFullDate()); // #1475814-概述:满足考勤报分部部门显示及导出时显示全路径 String fullPathMainKey = "show_full_path"; String isShowFullPath = Util.null2String(kqSettingsComInfo.getMain_val(fullPathMainKey),"0"); /*考勤二开--转事假start*/ String calLeaveId = bb.getPropValue("project_sskj", "calLeaveId"); /*考勤二开--转事假end*/ rs.execute(sql); while (rs.next()) { data = new ArrayList<>(); String id = rs.getString("id"); for (int fieldDataKeyIdx =0;fieldDataKeyIdx 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> allLeaveRules = kqLeaveRulesBiz.getAllLeaveRules(); Map leaveRule = null; for (int i = 0; allLeaveRules != null && i < allLeaveRules.size(); i++) { leaveRule = 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))); } /*考勤二开--转事假start*/ if ( flowType.equals( ("leaveType_" + calLeaveId) ) ) { bb.writeLog("ExportExcelCmd flowLeaveData start "); bb.writeLog("flowLeaveData: " + flowLeaveData); double temp = Util.getDoubleValue(Util.null2String(flowData.get("ToComLeaveData|" + resourceId))); bb.writeLog("temp: " + temp); if (temp >= 0.00) { flowLeaveData = flowLeaveData + temp; } bb.writeLog("flowLeaveData: " + flowLeaveData); } /*考勤二开--转事假end*/ data.add(flowLeaveData); } continue; }else if(fieldName.equals("overtime")){ fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|workingDayOvertime_nonleave"))); data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("workingDayOvertime_nonleave")))); fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|restDayOvertime_nonleave"))); data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("restDayOvertime_nonleave")))); fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|holidayOvertime_nonleave"))); data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("holidayOvertime_nonleave")))); fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|workingDayOvertime_4leave"))); data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("workingDayOvertime_4leave")))); fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|restDayOvertime_4leave"))); data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("restDayOvertime_4leave")))); fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|holidayOvertime_4leave"))); data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("holidayOvertime_4leave")))); double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|workingDayOvertime_4leave"))); workingDayOvertime_4leave = workingDayOvertime_4leave<0?0:workingDayOvertime_4leave; double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|restDayOvertime_4leave"))); restDayOvertime_4leave = restDayOvertime_4leave<0?0:restDayOvertime_4leave; double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|holidayOvertime_4leave"))); holidayOvertime_4leave = holidayOvertime_4leave<0?0:holidayOvertime_4leave; double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|workingDayOvertime_nonleave"))); workingDayOvertime_nonleave = workingDayOvertime_nonleave<0?0:workingDayOvertime_nonleave; double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|restDayOvertime_nonleave"))); restDayOvertime_nonleave = restDayOvertime_nonleave<0?0:restDayOvertime_nonleave; double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|holidayOvertime_nonleave"))); holidayOvertime_nonleave = holidayOvertime_nonleave<0?0:holidayOvertime_nonleave; fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(workingDayOvertime_4leave+restDayOvertime_4leave+holidayOvertime_4leave+ workingDayOvertime_nonleave+restDayOvertime_nonleave+holidayOvertime_nonleave)); data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("overtimeTotal")))); continue; }else if(fieldName.equals("businessLeave") || fieldName.equals("officialBusiness")){ String businessLeaveData = Util.null2s(Util.null2String(flowData.get(id+"|"+fieldName)),"0.0"); String backType = fieldName+"_back"; String businessLeavebackData = Util.null2s(Util.null2String(flowData.get(id+"|"+backType)),"0.0"); String businessLeave = ""; try{ //以防止出现精度问题 if(businessLeaveData.length() == 0){ businessLeaveData = "0.0"; } if(businessLeavebackData.length() == 0){ businessLeavebackData = "0.0"; } BigDecimal b_businessLeaveData = new BigDecimal(businessLeaveData); BigDecimal b_businessLeavebackData = new BigDecimal(businessLeavebackData); businessLeave = b_businessLeaveData.subtract(b_businessLeavebackData).toString(); if(Util.getDoubleValue(businessLeave, -1) < 0){ businessLeave = "0.0"; } }catch (Exception e){ } fieldValue = KQDurationCalculatorUtil.getDurationRound(businessLeave); } else if(Util.null2String(kqReportFieldComInfo.getCascadekey(fieldid)).length()>0){ fieldValue = Util.formatMultiLang(Util.null2String(rs.getString(fieldName)),""+user.getLanguage()); data.add(fieldValue); List lsCascadekey = Util.splitString2List(kqReportFieldComInfo.getCascadekey(fieldid),","); for(int i=0;i0){ fieldid = KQReportFieldComInfo.field2Id.get(lsCascadekey.get(i)); fieldValue = getFieldValueByUnitType(rs.getString(lsCascadekey.get(i)),kqReportFieldComInfo.getUnittype(fieldid)); }else{ fieldValue = "0"; } data.add(fieldValue); } continue; }else { fieldValue = Util.formatMultiLang(Util.null2String(rs.getString(fieldName)),""+user.getLanguage()); fieldValue = getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(fieldid)); } fieldValue = Util.formatMultiLang(fieldValue,""+user.getLanguage()); data.add(fieldValue); } if(showColumns.contains("kqCalendar")) { // Map detialDatas = kqReportBiz.getDetialDatas(id, fromDate, toDate, user,flowData,true); Map detialDatas = kqReportBiz.getDetialDatas(id, fromDate, toDate, user,flowData,true,uintType,show_card_source); isEnd = false; for (String date = fromDate; !isEnd; ) { if (date.equals(toDate)) isEnd = true; if (DateUtil.compDate(today, date) > 0) { data.add(""); } else { if (detialDatas.get(id + "|" + date) != null) { data.add(((Map) detialDatas.get(id + "|" + date)).get("text")); } else { data.add(SystemEnv.getHtmlLabelName(26593, user.getLanguage())); } } cal.setTime(DateUtil.parseToDate(date)); date = DateUtil.getDate(cal.getTime(), 1); } } //刘浩 新增夜班天数 String resourceid = id; if(map99!=null && map99.keySet().size()>0) { String s1 = ""; for(String s99 :map99.keySet()) { s1 = s1+"'"+s99+"',"; } s1 = s1.substring(0,s1.length()-1); //刘浩--大夜班天数统计 String sql88 = "select b.resourceid,b.signintime,b.signouttime,b.serialid from kq_format_detail b inner join kq_ShiftManagement c on c.id = b.serialid where b.resourceid = "+resourceid+" and b.signintime is not null and b.signouttime is not null " + " and b.signintime !='' and b.signouttime !='' " + " and b.kqdate in("+s1+") and c.serial like '%值夜班%'"; String sql99 = "select count(b.resourceid) as sums from kq_format_detail b inner join kq_ShiftManagement c on c.id = b.serialid where b.resourceid = "+resourceid+" and b.signintime is not null and b.signouttime is not null " + " and b.signintime !='' and b.signouttime !='' " + " and b.kqdate in("+s1+") and c.serial like '%值夜班%'"; writeLog("howec:::::sql2:"+sql88); RecordSet rs99 = new RecordSet(); rs99.execute(sql99); String counts99 = "0"; if (rs99.next()){ counts99 = String.valueOf(rs99.getInt("sums")); } if(showColumns.contains("nightdaysd")) { data.add(counts99); } //刘浩--小夜班天数统计 sql88 = "select b.resourceid,b.signintime,b.signouttime,b.serialid from kq_format_detail b inner join kq_ShiftManagement c on c.id = b.serialid where b.resourceid = "+resourceid+" and b.signintime is not null and b.signouttime is not null " + " and b.signintime !='' and b.signouttime !='' " + " and b.kqdate in("+s1+") and c.serial like '%两班夜班%'"; sql99 = "select count(b.resourceid) as sums from kq_format_detail b inner join kq_ShiftManagement c on c.id = b.serialid where b.resourceid = "+resourceid+" and b.signintime is not null and b.signouttime is not null " + " and b.signintime !='' and b.signouttime !='' " + " and b.kqdate in("+s1+") and c.serial like '%两班夜班%'"; writeLog("howec:::::sql2-1:"+sql88); rs99 = new RecordSet(); rs99.execute(sql99); counts99 = "0"; if (rs99.next()){ counts99 = String.valueOf(rs99.getInt("sums")); } if(showColumns.contains("nightdaysx")) { data.add(counts99); } }else { if(showColumns.contains("nightdaysd")) { data.add("0"); } if(showColumns.contains("nightdaysx")) { data.add("0"); } } dataList.add(data); } sheet.put("dataList", dataList); sheet.put("constraintList", constraintList); sheet.put("createFile", "1"); lsSheet.add(sheet); workbook.put("sheet", lsSheet); String fileName = SystemEnv.getHtmlLabelName(390351, user.getLanguage())+" "+fromDate+" "+toDate; workbook.put("fileName", fileName); ExcelUtil ExcelUtil = new ExcelUtil(); Map exportMap = ExcelUtil.export(workbook, request, response,true); retmap.putAll(exportMap); retmap.put("status", "1"); } catch (Exception e) { retmap.put("status", "-1"); retmap.put("message", SystemEnv.getHtmlLabelName(382661, user.getLanguage())); writeLog(e); } return retmap; } private Map getChildColumnsInfo(String parentid, User user) { Map returnMap = new HashMap<>(); List titleList = new ArrayList<>(); Map title = null; 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 < serialIds.size(); i++) { title = new HashMap<>(); title.put("title", Util.formatMultiLang(kqShiftManagementComInfo.getSerial(serialIds.get(i)),""+user.getLanguage())); title.put("width", 30 * 256); titleList.add(title); } } else if (parentid.equals("leave")) { KQLeaveRulesBiz kqLeaveRulesBiz = new KQLeaveRulesBiz(); List> leaveRules = kqLeaveRulesBiz.getAllLeaveRules(); for (int i = 0; leaveRules != null && i < leaveRules.size(); i++) { Map leaveRule = leaveRules.get(i); String name = Util.formatMultiLang(Util.null2String(leaveRule.get("name")),""+user.getLanguage()); String unitType = Util.null2String(leaveRule.get("unitType")); String unitName = (KQUnitBiz.isLeaveHour(unitType)) ? SystemEnv.getHtmlLabelName(391, user.getLanguage()) : SystemEnv.getHtmlLabelName(1925, user.getLanguage()); title = new HashMap<>(); title.put("title", name + "(" + unitName + ")"); title.put("width", 30 * 256); titleList.add(title); } }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()); } } title.put("title", SystemEnv.getHtmlLabelNames(fieldlabel, user.getLanguage())+ "(" + unitTypeName + ")"); } Map mapChildColumnInfo = getChildColumnsInfo(id, user); int childWidth = 65; List childColumns = (List)mapChildColumnInfo.get("childColumns"); if(childColumns.size()>0) {//跨列width取子列的width title.put("children", childColumns); childWidth = Util.getIntValue(Util.null2String(mapChildColumnInfo.get("sumChildColumnWidth")),65); } title.put("width", childWidth+""); titleList.add(title); } } else { KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo(); while (kqReportFieldComInfo.next()) { if (kqReportFieldComInfo.getParentid().equals(parentid)) { if(!kqReportFieldComInfo.getReportType().equals("month"))continue; title = new HashMap<>(); title.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage()) + "(" + KQReportBiz.getUnitType(kqReportFieldComInfo, user) + ")"); title.put("width", 30 * 256); titleList.add(title); } } } returnMap.put("childColumns", titleList); return returnMap; } private List getCascadeKeyColumnsInfo(String cascadeKey, User user){ List titleList = new ArrayList<>(); Map title = null; if(Util.null2String(cascadeKey).length()==0){ return titleList; } List lsCascadeKey = Util.splitString2List(cascadeKey,","); KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo(); for(int i=0;i(); title.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage()) + "(" + KQReportBiz.getUnitType(kqReportFieldComInfo, user) + ")"); title.put("width", 30 * 256); titleList.add(title); } } } return titleList; } private String getFieldValueByUnitType(String fieldValue,String unittype){ if (Util.null2String(unittype).length() > 0) { if (fieldValue.length() == 0) { fieldValue = "0"; } else { if (unittype.equals("2")) { fieldValue = KQDurationCalculatorUtil.getDurationRound(("" + (Util.getDoubleValue(fieldValue) / 60.0))); } } } return fieldValue; } @Override public BizLogContext getLogContext() { return null; } }