From c808c6d907b6b686b7adba669fffe39f09d79f53 Mon Sep 17 00:00:00 2001 From: chenwei <3291673014@qq.com> Date: Thu, 22 Feb 2024 09:11:15 +0800 Subject: [PATCH] =?UTF-8?q?=E8=80=83=E5=8B=A4=E4=B8=8A=E7=BA=BF=E5=90=8E?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jsp/testexcel.jsp | 29 + src/com/engine/kq/biz/KQFormatSignData.java | 174 +++- src/com/engine/kq/biz/KQReportBiz.java | 824 +++++++++++++++--- src/com/engine/kq/biz/KQScheduleSignBiz.java | 8 +- .../kq/cmd/report/ExportDailyExcelCmd.java | 66 +- .../engine/kq/cmd/report/ExportExcelCmd.java | 83 +- .../kq/cmd/report/GetKQDailyReportCmd.java | 94 +- .../engine/kq/cmd/report/GetKQReportCmd.java | 125 ++- .../modeexpand/AddScheduleSign.java | 62 ++ .../hostar/job/AddOvertimeSignJob.java | 168 ++++ 10 files changed, 1420 insertions(+), 213 deletions(-) create mode 100644 jsp/testexcel.jsp create mode 100644 src/weaver/interfaces/hostar/job/AddOvertimeSignJob.java diff --git a/jsp/testexcel.jsp b/jsp/testexcel.jsp new file mode 100644 index 0000000..3b66b77 --- /dev/null +++ b/jsp/testexcel.jsp @@ -0,0 +1,29 @@ +<%@ page import="java.io.File" %> +<%@ page import="java.util.List" %> +<%@ page import="java.util.ArrayList" %> +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + +<% + // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替 + String templateFileName = + "D:" + File.separator + "WEAVER8090" + File.separator + "ecology" + File.separator + "filesystem" + File.separator + "" + + "workflowexport" + File.separator + "stencil" + File.separator + "simple.xlsx"; + + // 方案1 根据对象填充 + String fileName = "D:" + File.separator + "WEAVER8090" + File.separator + "ecology" + File.separator + "filesystem" + File.separator + "" + + "workflowexport" + File.separator + "stencil" + File.separator + System.currentTimeMillis() + ".xlsx"; + // 这里 会填充到第一个sheet, 然后文件流会自动关闭 + List list = new ArrayList<>(); + FillData fillData = new FillData(); + fillData.setName("张三"); + fillData.setAge("99"); + list.add(fillData); + fillData = new FillData(); + fillData.setName("李四"); + fillData.setAge("199"); + list.add(fillData); + EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(list); + + + +%> diff --git a/src/com/engine/kq/biz/KQFormatSignData.java b/src/com/engine/kq/biz/KQFormatSignData.java index d900389..464008c 100644 --- a/src/com/engine/kq/biz/KQFormatSignData.java +++ b/src/com/engine/kq/biz/KQFormatSignData.java @@ -24,6 +24,8 @@ import java.util.*; public class KQFormatSignData extends BaseBean { private KQLog kqLog = new KQLog(); + BaseBean bb = new BaseBean(); + public List getSignInfo(String userId, TimeScopeEntity signTimeScope, TimeScopeEntity workTimeScope, String kqDate, String preDate, String nextDate, KQTimesArrayComInfo kqTimesArrayComInfo) { @@ -56,6 +58,9 @@ public class KQFormatSignData extends BaseBean { String count4NoonStartDateTime = ""; String count4NoonEndDateTime = ""; try{ + + bb.writeLog("getSignInfo start"); + Map checkInfo = null; String base_sql = ""; RecordSet rs = new RecordSet(); @@ -367,14 +372,15 @@ public class KQFormatSignData extends BaseBean { /*考勤二开--出差公出流程获取外勤打卡数据start*/ BaseBean bb = new BaseBean(); - bb.writeLog("--出差公出流程获取外勤打卡数据start"); + bb.writeLog("+-出差公出流程获取外勤打卡数据start"); bb.writeLog("lsCheckInfo: " + lsCheckInfo); + bb.writeLog("lsCheckInfo.size(): " + lsCheckInfo.size()); //获取外勤打卡的前提是已经有归档的出差、公出流程 String evectionTableName = Util.null2String(bb.getPropValue("project_hostar","evectionTableName")); - bb.writeLog("evectionTableName: " + evectionTableName); +// bb.writeLog("evectionTableName: " + evectionTableName); String outTableName = Util.null2String(bb.getPropValue("project_hostar","outTableName")); - bb.writeLog("outTableName: " + outTableName); +// bb.writeLog("outTableName: " + outTableName); if ( StringUtils.isNotBlank(evectionTableName) && StringUtils.isNotBlank(outTableName) ) { RecordSet rs = new RecordSet(); @@ -398,29 +404,137 @@ public class KQFormatSignData extends BaseBean { " AND currentnodetype = 3 " + ") a "; rs.executeQuery(acqEvecAndOutSql); - bb.writeLog("acqEvecAndOutSql: " + acqEvecAndOutSql); +// bb.writeLog("acqEvecAndOutSql: " + acqEvecAndOutSql); while (rs.next()) { number = Util.getIntValue(Util.null2String(rs.getString("number"))); } - bb.writeLog("number: " + number); +// bb.writeLog("number: " + number); - if (lsCheckInfo.size() == 0 && number > 0) { + if (lsCheckInfo.size() < 2 && number > 0) {//只考虑每天一次上下班,原始打卡记录没有取到两次打卡记录则考虑外勤打卡 List legWorkInfos = new ArrayList<>(); //获取允许打卡时间 String signBeginTime = signTimeScope.getBeginTime(); - bb.writeLog("signBeginTime: " + signBeginTime); +// bb.writeLog("signBeginTime: " + signBeginTime); if (StringUtils.isNotBlank(signBeginTime)) { signBeginTime = signBeginTime + ":00"; } - bb.writeLog("signBeginTime: " + signBeginTime); +// bb.writeLog("signBeginTime: " + signBeginTime); //获取上班时间 String workBeginTime = workTimeScope.getBeginTime(); - bb.writeLog("workBeginTime: " + workBeginTime); +// bb.writeLog("workBeginTime: " + workBeginTime); if (StringUtils.isNotBlank(workBeginTime)) { workBeginTime = workBeginTime + ":00"; } - bb.writeLog("workBeginTime: " + workBeginTime); +// bb.writeLog("workBeginTime: " + workBeginTime); + + String acqLegWorkSignSql = "select operate_time from mobile_sign where operater = ? and operate_date = '" + kqDate + "' and operate_time >='" + signBeginTime + "' order by operate_time asc "; +// bb.writeLog("acqLegWorkSignSql: " + acqLegWorkSignSql); +// bb.writeLog("userId: " + userId); + rs.executeQuery(acqLegWorkSignSql, userId); + while ( rs.next()) { + String operateTime = Util.null2String(rs.getString("operate_time")); + if ( StringUtils.isNotBlank(operateTime) ) { + legWorkInfos.add(operateTime); + } + } +// bb.writeLog("legWorkInfos: " + legWorkInfos); + + if (legWorkInfos != null && legWorkInfos.size() > 0 ) { + boolean onFlag = false;//上班卡 + boolean offFlag = false;//下班卡 + + //判断需要获取的打卡 + for(Object obj: lsCheckInfo) { + if (obj != null) { + Map checkInfo = (Map ) obj; + Integer signType = Util.getIntValue(Util.null2String(checkInfo.get("signType"))); + if (signType == 1) { + onFlag = true; + } + if (signType == 2) { + offFlag = true; + } + } + } + + String tempSignIn = ""; + String tempSignOut = ""; + Map checkInfo = new HashMap<>(); + if ( legWorkInfos.size() == 1) {//只有一笔外勤卡直接算上班 + if ( onFlag && !offFlag ) { + checkInfo.put("signType", "2"); + checkInfo.put("signDate", kqDate);//签到签退日期 + checkInfo.put("signTime", legWorkInfos.get(0));//签到签退时间 + checkInfo.put("deduct_signintime", "");//流程抵扣作为打卡时间 + checkInfo.put("signStatus", ButtonStatusEnum.NORMAL.getStatusCode()); + lsCheckInfo.add(checkInfo); + } + if ( !onFlag && offFlag ) { + checkInfo.put("signType", "1"); + checkInfo.put("signDate", kqDate);//签到签退日期 + checkInfo.put("signTime", legWorkInfos.get(0));//签到签退时间 + checkInfo.put("deduct_signintime", "");//流程抵扣作为打卡时间 + checkInfo.put("signStatus", ButtonStatusEnum.NORMAL.getStatusCode()); + lsCheckInfo.add(checkInfo); + } + + } else { + for ( String signTime : legWorkInfos) { + if (signTime.compareTo(workBeginTime) < 0) {//获取上班时间点之前最早的一笔卡 + if (StringUtils.isBlank(tempSignIn)) { + tempSignIn = signTime; + } else { + if ( signTime.compareTo(tempSignIn) < 0 ) { + tempSignIn = signTime; + } + } + } + if ( signTime.compareTo(workBeginTime) > 0) {//下班卡取最晚的一笔 + if (StringUtils.isBlank(tempSignIn)) { + tempSignOut = signTime; + } else { + if ( signTime.compareTo(tempSignOut) > 0 ) { + tempSignOut = signTime; + } + } + } + } + if (offFlag && !onFlag ) { + checkInfo.put("signType", "1"); + checkInfo.put("signDate", kqDate);//签到签退日期 + checkInfo.put("signTime", tempSignIn);//签到签退时间 + checkInfo.put("deduct_signintime", "");//流程抵扣作为打卡时间 + checkInfo.put("signStatus", ButtonStatusEnum.NORMAL.getStatusCode()); + lsCheckInfo.add(checkInfo); + } + if (onFlag && !offFlag ) { + checkInfo = new HashMap<>(); + checkInfo.put("signType", "2"); + checkInfo.put("signDate", kqDate);//签到签退日期 + checkInfo.put("signTime", tempSignOut);//签到签退时间 + checkInfo.put("deduct_signintime", "");//流程抵扣作为打卡时间 + checkInfo.put("signStatus", ButtonStatusEnum.NORMAL.getStatusCode()); + lsCheckInfo.add(checkInfo); + } + } + } + } else if ( lsCheckInfo.size() == 2) { + List legWorkInfos = new ArrayList<>(); + //获取允许打卡时间 + String signBeginTime = signTimeScope.getBeginTime(); +// bb.writeLog("signBeginTime: " + signBeginTime); + if (StringUtils.isNotBlank(signBeginTime)) { + signBeginTime = signBeginTime + ":00"; + } +// bb.writeLog("signBeginTime: " + signBeginTime); + //获取上班时间 + String workBeginTime = workTimeScope.getBeginTime(); +// bb.writeLog("workBeginTime: " + workBeginTime); + if (StringUtils.isNotBlank(workBeginTime)) { + workBeginTime = workBeginTime + ":00"; + } +// bb.writeLog("workBeginTime: " + workBeginTime); String acqLegWorkSignSql = "select operate_time from mobile_sign where operater = ? and operate_date = '" + kqDate + "' and operate_time >='" + signBeginTime + "' order by operate_time asc "; bb.writeLog("acqLegWorkSignSql: " + acqLegWorkSignSql); @@ -435,16 +549,20 @@ public class KQFormatSignData extends BaseBean { bb.writeLog("legWorkInfos: " + legWorkInfos); if (legWorkInfos != null && legWorkInfos.size() > 0 ) { + String tempSignIn = ""; String tempSignOut = ""; Map checkInfo = new HashMap<>(); if ( legWorkInfos.size() == 1) {//只有一笔外勤卡直接算上班 + checkInfo.put("signType", "1"); checkInfo.put("signDate", kqDate);//签到签退日期 checkInfo.put("signTime", legWorkInfos.get(0));//签到签退时间 checkInfo.put("deduct_signintime", "");//流程抵扣作为打卡时间 checkInfo.put("signStatus", ButtonStatusEnum.NORMAL.getStatusCode()); lsCheckInfo.add(checkInfo); + + } else { for ( String signTime : legWorkInfos) { if (signTime.compareTo(workBeginTime) < 0) {//获取上班时间点之前最早的一笔卡 @@ -457,7 +575,7 @@ public class KQFormatSignData extends BaseBean { } } if ( signTime.compareTo(workBeginTime) > 0) {//下班卡取最晚的一笔 - if (StringUtils.isBlank(tempSignIn)) { + if (StringUtils.isBlank(tempSignOut)) { tempSignOut = signTime; } else { if ( signTime.compareTo(tempSignOut) > 0 ) { @@ -466,21 +584,27 @@ public class KQFormatSignData extends BaseBean { } } } - checkInfo.put("signType", "1"); - checkInfo.put("signDate", kqDate);//签到签退日期 - checkInfo.put("signTime", tempSignIn);//签到签退时间 - checkInfo.put("deduct_signintime", "");//流程抵扣作为打卡时间 - checkInfo.put("signStatus", ButtonStatusEnum.NORMAL.getStatusCode()); - lsCheckInfo.add(checkInfo); - checkInfo = new HashMap<>(); - checkInfo.put("signType", "2"); - checkInfo.put("signDate", kqDate);//签到签退日期 - checkInfo.put("signTime", tempSignOut);//签到签退时间 - checkInfo.put("deduct_signintime", "");//流程抵扣作为打卡时间 - checkInfo.put("signStatus", ButtonStatusEnum.NORMAL.getStatusCode()); - lsCheckInfo.add(checkInfo); - } + if(StringUtils.isNotBlank(tempSignIn)) { + checkInfo.put("signType", "1"); + checkInfo.put("signDate", kqDate);//签到签退日期 + checkInfo.put("signTime", tempSignIn);//签到签退时间 + checkInfo.put("deduct_signintime", "");//流程抵扣作为打卡时间 + checkInfo.put("signStatus", ButtonStatusEnum.NORMAL.getStatusCode()); + lsCheckInfo.add(checkInfo); + } + + if(StringUtils.isNotBlank(tempSignIn)) { + checkInfo = new HashMap<>(); + checkInfo.put("signType", "2"); + checkInfo.put("signDate", kqDate);//签到签退日期 + checkInfo.put("signTime", tempSignOut);//签到签退时间 + checkInfo.put("deduct_signintime", "");//流程抵扣作为打卡时间 + checkInfo.put("signStatus", ButtonStatusEnum.NORMAL.getStatusCode()); + lsCheckInfo.add(checkInfo); + } + + } } } } diff --git a/src/com/engine/kq/biz/KQReportBiz.java b/src/com/engine/kq/biz/KQReportBiz.java index 91eaaf2..ca292a3 100644 --- a/src/com/engine/kq/biz/KQReportBiz.java +++ b/src/com/engine/kq/biz/KQReportBiz.java @@ -383,13 +383,13 @@ public class KQReportBiz extends BaseBean { datas.putAll(getDailyMealAllowanceData(params,user)); /*考勤二开--出差公出流程餐补统计end*/ - /*考勤二开--计算驻点餐补start*/ - datas.putAll(getDailyStatAllowanceData(params,user)); - /*考勤二开--计算驻点餐补end*/ +// /*考勤二开--计算驻点餐补start*/ +// datas.putAll(getDailyStatAllowanceData(params,user)); +// /*考勤二开--计算驻点餐补end*/ - /*考勤二开--计算夜班餐补start*/ + /*考勤二开--计算精密夜班餐补start*/ datas.putAll(getDailyNightShiftAllowanceData(params,user)); - /*考勤二开--计算夜班餐补end*/ + /*考勤二开--计算精密夜班餐补end*/ /*考勤二开--计算鸿仁驻点餐补start*/ datas.putAll(getDailyOtherStatAllowanceData(params,user)); @@ -415,10 +415,27 @@ public class KQReportBiz extends BaseBean { datas.putAll(getCardMap(params,user)); datas.putAll(getOverTime(params,user)); + /*考勤二开--出差公出流程餐补统计start*/ + + datas.putAll(getDailyMealAllowanceData(params,user)); + /*考勤二开--出差公出流程餐补统计end*/ + /*考勤二开--计算驻点餐补start*/ - datas.putAll(getDailyStatAllowanceData(params,user)); +// long startTime2 = System.currentTimeMillis(); +// datas.putAll(getDailyStatAllowanceData(params,user)); +// long endTime2 = System.currentTimeMillis(); +// long elapsedTime2 = endTime2 - startTime2; // 执行时间 +// bb.writeLog("计算驻点餐补执行时间:" + elapsedTime2 + "毫秒" ); /*考勤二开--计算驻点餐补end*/ + /*考勤二开--计算精密夜班餐补start*/ + datas.putAll(getDailyNightShiftAllowanceData(params,user)); + /*考勤二开--计算精密夜班餐补end*/ + + /*考勤二开--计算鸿仁驻点餐补start*/ + datas.putAll(getDailyOtherStatAllowanceData(params,user)); + /*考勤二开--计算鸿仁驻点餐补end*/ + }catch (Exception e){ writeLog(e); @@ -1208,6 +1225,7 @@ public class KQReportBiz extends BaseBean { String sql = ""; String sqlWhere = " "; try{ + bb.writeLog("getDailyMealAllowanceData start"); KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo(); JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data"))); String fromDate = Util.null2String(jsonObj.get("fromDate")); @@ -1230,26 +1248,26 @@ public class KQReportBiz extends BaseBean { String isNoAccount = Util.null2String(jsonObj.get("isNoAccount")); String viewScope = Util.null2String(jsonObj.get("viewScope")); if(subCompanyId.length()>0){ - sqlWhere +=" and a.subcompanyid1 in("+subCompanyId+") "; + sqlWhere +=" and b.subcompanyid1 in("+subCompanyId+") "; } if(departmentId.length()>0){ - sqlWhere +=" and a.departmentid in("+departmentId+") "; + sqlWhere +=" and b.departmentid in("+departmentId+") "; } if(resourceId.length()>0){ - sqlWhere +=" and b.resourceid in("+resourceId+") "; + sqlWhere +=" and b.id in("+resourceId+") "; } if(viewScope.equals("4")){//我的下属 if(allLevel.equals("1")){//所有下属 - sqlWhere+=" and a.managerstr like '%,"+user.getUID()+",%'"; + sqlWhere+=" and b.managerstr like '%,"+user.getUID()+",%'"; }else{ - sqlWhere+=" and a.managerid="+user.getUID();//直接下属 + sqlWhere+=" and b.managerid="+user.getUID();//直接下属 } } if (!"1".equals(isNoAccount)) { - sqlWhere += " and a.loginid is not null "+(rs.getDBType().equals("oracle")?"":" and a.loginid<>'' "); + sqlWhere += " and b.loginid is not null "+(rs.getDBType().equals("oracle")?"":" and b.loginid<>'' "); } //首先获取出差公出流程信息 @@ -1261,9 +1279,11 @@ public class KQReportBiz extends BaseBean { " on b.id = a.resourceid " + " left join " + evectionTableName + " c " + " on c.requestid = a.requestid " + - " where a.belongdate >='"+fromDate+"' and belongdate <='"+toDate+"' " + + " where a.belongdate >='"+fromDate+"' and a.belongdate <='"+toDate+"' " + sqlWhere + " ) c " + - " where 1=1 " + sqlWhere ; + " where 1=1 " ; + bb.writeLog("sql: " + sql); + rs.execute(sql); while (rs.next()) { String resourceid = Util.null2String(rs.getString("resourceid")); @@ -1272,6 +1292,7 @@ public class KQReportBiz extends BaseBean { String latitude = Util.null2String(rs.getString("latitude")); evectionMap.put( belongdate + "|" + resourceid, longitude + "|" + latitude ); } + bb.writeLog("evectionMap: " + evectionMap); //获取外勤打卡数据 KQWorkTime kqWorkTime = new KQWorkTime(); @@ -1296,22 +1317,22 @@ public class KQReportBiz extends BaseBean { List> legWorkInfos = new ArrayList<>(); //获取允许打卡时间 String signBeginTime = signTimeScope.getBeginTime(); - bb.writeLog("signBeginTime: " + signBeginTime); +// bb.writeLog("signBeginTime: " + signBeginTime); if (StringUtils.isNotBlank(signBeginTime)) { signBeginTime = signBeginTime + ":00"; } - bb.writeLog("signBeginTime: " + signBeginTime); +// bb.writeLog("signBeginTime: " + signBeginTime); //获取上班时间 String workBeginTime = workTimeScope.getBeginTime(); - bb.writeLog("workBeginTime: " + workBeginTime); +// bb.writeLog("workBeginTime: " + workBeginTime); if (StringUtils.isNotBlank(workBeginTime)) { workBeginTime = workBeginTime + ":00"; } - bb.writeLog("workBeginTime: " + workBeginTime); +// bb.writeLog("workBeginTime: " + workBeginTime); String acqLegWorkSignSql = "select operate_time, longitude, latitude from mobile_sign where operater = ? and operate_date = '" + kqDate + "' and operate_time >='" + signBeginTime + "' order by operate_time asc "; - bb.writeLog("acqLegWorkSignSql: " + acqLegWorkSignSql); - bb.writeLog("userId: " + userId); +// bb.writeLog("acqLegWorkSignSql: " + acqLegWorkSignSql); +// bb.writeLog("userId: " + userId); rs.executeQuery(acqLegWorkSignSql, userId); while ( rs.next()) { String operateTime = Util.null2String(rs.getString("operate_time")); @@ -1397,16 +1418,21 @@ public class KQReportBiz extends BaseBean { //获取经纬度半径 Double radius = 0.00; String acqRadiusSql = "select radius from uf_leWorkRadius where (isDelete is null or isDelete = 0 )"; + bb.writeLog("acqRadiusSql: " + acqRadiusSql); rs.executeQuery(acqRadiusSql); while (rs.next()) { radius = Util.getDoubleValue(Util.null2String(rs.getString("radius"))); } + bb.writeLog("radius: " + radius); + + String MealAlloTableName = Util.null2String(bb.getPropValue("project_hostar", "MealAllowanceTableName")); + bb.writeLog("MealAlloTableName: " + MealAlloTableName); - String MealAlloTableName = Util.null2String(bb.getPropValue("project_hostart", "MealAllowanceTableName")); if (StringUtils.isNotBlank(MealAlloTableName)) { //获取餐补判断时间 List> MealMap = new ArrayList<>(); String acqTimeSql = "select startTime, endTime from " + MealAlloTableName + " where (isDelete is null or isDelete = 0)"; + bb.writeLog("acqTimeSql: " + acqTimeSql); rs.executeQuery(acqTimeSql); while (rs.next()) { String startTime = Util.null2String(rs.getString("startTime")); @@ -1416,11 +1442,17 @@ public class KQReportBiz extends BaseBean { temp.put("endTime",endTime); MealMap.add(temp); } + bb.writeLog("MealMap: " + MealMap); + //根据外勤打卡数据计算餐补数据 for (String key: lsCheckInfo.keySet()) { +// bb.writeLog("key: " + key); String[] split = key.split("\\|"); +// bb.writeLog("split: " + split); String userId = split[0]; +// bb.writeLog("userId: " + userId); String kqDate = split[1]; +// bb.writeLog("kqDate: " + kqDate); Map temp = lsCheckInfo.get(key); String signInTime = Util.null2String(temp.get("signInTime")); String signOutTime = Util.null2String(temp.get("signOutTime")); @@ -1430,21 +1462,30 @@ public class KQReportBiz extends BaseBean { Double signOutLongitude = Util.getDoubleValue(Util.null2String(temp.get("signOutLongitude"))); if (StringUtils.isNotBlank(signInTime) && StringUtils.isNotBlank(signOutTime) ) { - String lonAndLat = Util.null2String(evectionMap.get(kqDate + " |" + userId)); + String lonAndLat = Util.null2String(evectionMap.get(kqDate + "|" + userId)); +// bb.writeLog("lonAndLat: " + lonAndLat); String[] split1 = lonAndLat.split("\\|"); Double longitude = Util.getDoubleValue(Util.null2String(split1[0])); Double latitude = Util.getDoubleValue(Util.null2String(split1[1])); //判断经纬度是否符合标准 Double distanceIn = hostarUtil.calculateDistance(latitude, longitude, signInLatitude, signInLongitude);//上班 +// bb.writeLog("distanceIn: " + distanceIn); Double distanceOut = hostarUtil.calculateDistance(latitude, longitude, signOutLatitude, signOutLongitude);//下班 +// bb.writeLog("distanceOut: " + distanceOut); if ( distanceIn<=radius && distanceOut<=radius) { for (Map me: MealMap) { String startTime = me.get("startTime"); +// bb.writeLog("startTime: " + startTime); + String endTime = me.get("endTime"); +// bb.writeLog("endTime: " + endTime); + if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) { startTime = startTime + ":00"; endTime = endTime + ":00"; } +// bb.writeLog("signInTime: " + signInTime); +// bb.writeLog("signOutTime: " + signOutTime); if ( (signInTime.compareTo(startTime) <= 0) && (signOutTime.compareTo(endTime) >= 0) ) { int t = Util.getIntValue(Util.null2String(datas.get("DailyMealAllow|" + resourceId + "|" + kqDate))); if (t <= 0) { @@ -1464,6 +1505,9 @@ public class KQReportBiz extends BaseBean { }catch (Exception e){ writeLog(e); } + + bb.writeLog("datas: " + datas); + return datas; } @@ -1531,7 +1575,7 @@ public class KQReportBiz extends BaseBean { if (StringUtils.isNotBlank(otherstatsub)) { //查询该分部下的人员 List resIds = new ArrayList<>(); - sqlWhere += " and a.subcompanyid1 not in (" + otherstatsub + ") "; + sqlWhere += " and a.subcompanyid1 in (" + otherstatsub + ") "; String acqResSql = "select a.id from hrmresource a where a.status in (0,1,2,3) " + sqlWhere; bb.writeLog("acqResSql: " + acqResSql); @@ -1652,19 +1696,24 @@ public class KQReportBiz extends BaseBean { List signIdList = new ArrayList<>(); for (int i = 0; i < lsCheckInfo.size(); i++) { Object o = lsCheckInfo.get(i); - if (o != null && o != "") { + if ( o != null && o != "") { Map temp = (Map) o; - signIdList.add(Util.null2String(temp.get("signId"))); + String signId = Util.null2String(temp.get("signId")); + if (StringUtils.isNotBlank(signId)) { + signIdList.add(signId); + } } } Integer signNumber = 0; - String acqShowAddress = "select showaddress from hrmschedulesign where id in (" + String.join(",", signIdList) + ") "; - bb.writeLog("acqShowAddress: " + acqShowAddress); - rs.executeQuery(acqShowAddress); - while (rs.next()) { - String showaddress = Util.null2String(rs.getString("showaddress")); - if ("鸿仕达".equals(showaddress) || "hostar".equalsIgnoreCase(showaddress)) { - signNumber = signNumber + 1; + if (signIdList !=null && signIdList.size() > 0) { + String acqShowAddress = "select showaddress from hrmschedulesign where id in (" + String.join(",", signIdList) + ") "; +// bb.writeLog("acqShowAddress: " + acqShowAddress); + rs.executeQuery(acqShowAddress); + while (rs.next()) { + String showaddress = Util.null2String(rs.getString("showaddress")); + if ("鸿仕达".equals(showaddress) || "hostar".equalsIgnoreCase(showaddress)) { + signNumber = signNumber + 1; + } } } if (signNumber == 0) { @@ -1684,10 +1733,10 @@ public class KQReportBiz extends BaseBean { double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave + workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave; - bb.writeLog("-=-temp:" + temp); +// bb.writeLog("-=-temp:" + temp); Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + date))); - bb.writeLog("-=-attendanceMins:" + attendanceMins); - double v = ((attendanceMins < 0.00) ? 0.00 : attendanceMins) + temp; +// bb.writeLog("-=-attendanceMins:" + attendanceMins); + double v = Math.round (((attendanceMins < 0.00) ? 0.00 : attendanceMins) + temp) / 60.00; String value = "0"; if (v >= 4.00 && v < 9.00) { value = "1"; @@ -1695,7 +1744,7 @@ public class KQReportBiz extends BaseBean { value = "2"; } - bb.writeLog("-=-value:" + value); +// bb.writeLog("-=-value:" + value); datas.put(res + "|" + "DailyOtherStatAllowance" + "|" + date, value); } } @@ -1705,9 +1754,9 @@ public class KQReportBiz extends BaseBean { } }catch (Exception e){ writeLog(e); - bb.writeLog("DailyStatAllowance Exception: " + e); + bb.writeLog("DailyOtherStatAllowance Exception: " + e); } - bb.writeLog("DailyStatAllowance datas: " + datas); + bb.writeLog("DailyOtherStatAllowance datas: " + datas); return datas; } @@ -1772,29 +1821,184 @@ public class KQReportBiz extends BaseBean { Map dailyFlowOverTimeData = getDailyFlowOverTimeDataAllowance(params, user); bb.writeLog("dailyFlowOverTimeData: " + dailyFlowOverTimeData); - String nightshiftsub = Util.null2String(bb.getPropValue("project_hostar", "nightshiftsubcompany")); - if (StringUtils.isNotBlank(nightshiftsub)) { - //查询该分部下的人员 - List resIds = new ArrayList<>(); - sqlWhere += " and a.subcompanyid1 not in ("+nightshiftsub+") "; - String acqResSql = "select a.id from hrmresource a where a.status in (0,1,2,3) " + sqlWhere; - bb.writeLog("acqResSql: " + acqResSql); + //获取夜班班次 + List nightShiftList = new ArrayList<>(); + String acqNightShiftSql = "select shift from uf_nightshiftmanage where isdelete is null or isdelete = 0"; + rs.executeQuery(acqNightShiftSql); + while (rs.next()) { + String shift = Util.null2String(rs.getString("shift")); + if (StringUtils.isNotBlank(shift)) { + nightShiftList.add(shift); + } + } + if (nightShiftList != null & nightShiftList.size() > 0) { + String nightshiftsub = Util.null2String(bb.getPropValue("project_hostar", "nightshiftsubcompany")); + if (StringUtils.isNotBlank(nightshiftsub)) { + //查询该分部下的人员 + List resIds = new ArrayList<>(); + sqlWhere += " and a.subcompanyid1 in ("+nightshiftsub+") "; + String acqResSql = "select a.id from hrmresource a where a.status in (0,1,2,3) " + sqlWhere; + bb.writeLog("acqResSql: " + acqResSql); - rs.executeQuery(acqResSql); - while (rs.next()) { - String id = Util.null2String(rs.getString("id")); - if (StringUtils.isNotBlank(id)) { - resIds.add(id); + rs.executeQuery(acqResSql); + while (rs.next()) { + String id = Util.null2String(rs.getString("id")); + if (StringUtils.isNotBlank(id)) { + resIds.add(id); + } + } + bb.writeLog("resIds: " + resIds); + + if ( resIds != null && resIds.size() > 0) { + HostarUtil houtil = new HostarUtil(); + List allDates = houtil.getAllDates(fromDate, toDate); + //先获取到出勤时长 + Map attendanceMinsMap = new HashMap<>(); + String acqAttenSql = " select resourceid, attendancemins, kqdate from kq_format_total where resourceid in (" + String.join(",",resIds) + ") and kqdate >='" + fromDate + "' and kqdate <='" + toDate + "'"; + rs.executeQuery(acqAttenSql); + while (rs.next()) { + String resourceid = Util.null2String(rs.getString("resourceid")); + Double attendancemins = Util.getDoubleValue(Util.null2String(rs.getString("attendancemins"))); + String kqdate = Util.null2String(rs.getString("kqdate")); + if (attendancemins >= 0.00 ) { + attendanceMinsMap.put(resourceid+"|"+kqdate, attendancemins); + } + } + KQWorkTime kqWorkTime = new KQWorkTime(); + for (String res: resIds) { + for (String date : allDates) { + //获取当天班次 + Map serialInfo = kqWorkTime.getSerialInfo(res, date, false); + if (serialInfo != null && serialInfo.size() > 0) { + int serialid = Util.getIntValue(Util.null2String(serialInfo.get(date)), 0); + if (serialid > 0) { + if ( !nightShiftList.contains(String.valueOf(serialid))) { + continue; + } + } + } + + double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|workingDayOvertime_4leave"))); + workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave; + double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|restDayOvertime_4leave"))); + restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave; + double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|holidayOvertime_4leave"))); + holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave; + + double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|workingDayOvertime_nonleave"))); + workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave; + double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|restDayOvertime_nonleave"))); + restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave; + double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|holidayOvertime_nonleave"))); + holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave; + + double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave + + workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave; +// bb.writeLog("-=-temp:" + temp); + Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + date))); +// bb.writeLog("-=-attendanceMins:" + attendanceMins); + String value = String.valueOf(Math.floor( ((attendanceMins < 0.00 ? 0.00 : attendanceMins) + temp) / 300)); +// bb.writeLog("-=-value:" + value); + datas.put(res + "|" + "DailyNightShiftAllowanceData" + "|" + date, value); + } + } } + + } else { + bb.writeLog("夜班餐补计算失败,没有设置该餐补享受分部"); } - bb.writeLog("resIds: " + resIds); + } else { + bb.writeLog("夜班餐补计算失败,没有设置夜班"); + } + + + + + }catch (Exception e){ + writeLog(e); + bb.writeLog("DailyNightShiftAllowanceData Exception: " + e); + } + bb.writeLog("DailyNightShiftAllowanceData datas: " + datas); + + return datas; + } + + /** + * 获取夜班补助数据 + * @param params + * @param user + * @return + */ + public Map getDailyNightShiftSubsidyData(Map params, User user){ + Map datas = new HashMap<>();; + RecordSet rs = new RecordSet(); + String sql = ""; + String sqlWhere = " "; + try{ + KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo(); + JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data"))); + 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 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 subUserId = Util.null2String(params.get("subUserId")); + + +// 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<>'' "); +// } + + //获取夜班班次 + List nightShiftList = new ArrayList<>(); + String acqNightShiftSql = "select shift from uf_nightshiftmanage where isdelete is null or isdelete = 0"; + rs.executeQuery(acqNightShiftSql); + while (rs.next()) { + String shift = Util.null2String(rs.getString("shift")); + if (StringUtils.isNotBlank(shift)) { + nightShiftList.add(shift); + } + } + if (nightShiftList != null & nightShiftList.size() > 0) { - if ( resIds != null && resIds.size() > 0) { HostarUtil houtil = new HostarUtil(); List allDates = houtil.getAllDates(fromDate, toDate); //先获取到出勤时长 Map attendanceMinsMap = new HashMap<>(); - String acqAttenSql = " select resourceid, attendancemins, kqdate from kq_format_total where resourceid in (" + String.join(",",resIds) + ") and kqdate >='" + fromDate + "' and kqdate <='" + toDate + "'"; + String acqAttenSql = " select resourceid, attendancemins, kqdate from kq_format_total where resourceid in (" + subUserId + ") and kqdate >='" + fromDate + "' and kqdate <='" + toDate + "'"; rs.executeQuery(acqAttenSql); while (rs.next()) { String resourceid = Util.null2String(rs.getString("resourceid")); @@ -1804,8 +2008,336 @@ public class KQReportBiz extends BaseBean { attendanceMinsMap.put(resourceid+"|"+kqdate, attendancemins); } } + KQWorkTime kqWorkTime = new KQWorkTime(); + + for (String date : allDates) { + //获取当天班次 + Map serialInfo = kqWorkTime.getSerialInfo(subUserId, date, false); + if (serialInfo != null && serialInfo.size() > 0) { + int serialid = Util.getIntValue(Util.null2String(serialInfo.get(date)), 0); + if (serialid > 0) { + if ( !nightShiftList.contains(String.valueOf(serialid))) { + continue; + } + } + } + + Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(subUserId + "|" + date))); + String value = (( attendanceMins / 60) >= 8.00 ) ? "1" : "0"; + + datas.put(subUserId + "|" + "DailyNightShiftSubsidyData" + "|" + date, value); + } + + } + + }catch (Exception e){ + writeLog(e); + bb.writeLog("DailyNightShiftSubsidyData Exception: " + e); + } + bb.writeLog("DailyNightShiftSubsidyData datas: " + datas); + + return datas; + } + + /** + * 获取驻点餐补数据 + * @param params + * @param user + * @return + */ + public Map getDailyStatAllowanceData(Map params, User user){ + Map datas = new HashMap<>();; + RecordSet rs = new RecordSet(); + String sql = ""; + String sqlWhere = " "; + try{ + KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo(); + JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data"))); + 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 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 statUser = Util.null2String(Util.null2String(params.get("statUser"))); + String kqDate = Util.null2String(Util.null2String(params.get("kqdate"))); + if(statUser.length()>0){ + sqlWhere +=" and a.id in("+statUser+") "; + } +// if(kqdate.length()>0){ +// sqlWhere +=" and a.id in("+statUser+") "; +// } +// 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<>'' "); +// } + + //获取加班时长 +// long startTime11 = System.currentTimeMillis(); + Map dailyFlowOverTimeData = getDailyFlowOverTimeDataAllowance(params, user); +// long endTime11 = System.currentTimeMillis(); +// long elapsedTime11 = endTime11 - startTime11; // 执行时间 +// bb.writeLog("加班时长执行时间:" + elapsedTime11 + "毫秒" ); +// bb.writeLog("dailyFlowOverTimeData: " + dailyFlowOverTimeData); + + //首先去除指定不享有的分部 +// long startTime12 = System.currentTimeMillis(); + List subComoanyList = new ArrayList<>(); + String acqNoStatAllSql = "select subcompany from uf_NoStatAllSubCom where isdelete = 0 or isdelete is null"; + rs.executeQuery(acqNoStatAllSql); + while (rs.next()) { + String subcompany = Util.null2String(rs.getString("subcompany")); + if (StringUtils.isNotBlank(subcompany)) { + subComoanyList.add(subcompany); + } + } +// long endTime12 = System.currentTimeMillis(); +// long elapsedTime12 = endTime12 - startTime12; // 执行时间 +// bb.writeLog("不享有的分部执行时间:" + elapsedTime12 + "毫秒" ); +// bb.writeLog("subComoanyList: " + subComoanyList); + + String subComoanys = ""; + if ( subComoanyList != null && subComoanyList.size() > 0) { + subComoanys = String.join(",", subComoanyList); + } + if (StringUtils.isNotBlank(subComoanys)) { + sqlWhere += " and a.subcompanyid1 not in ("+subComoanys+") "; + } + + //指定人员不享受 + List noRes = new ArrayList<>(); + String acqNoResSql = "select resourceid from uf_NoStatAllRes where isdelete = 0 or isdelete is null"; + rs.executeQuery(acqNoResSql); + while (rs.next()) { + String resourceid = Util.null2String(rs.getString("resourceid")); + if (StringUtils.isNotBlank(resourceid)) { + noRes.add(resourceid); + } + } + if ( noRes !=null && noRes.size()>0) { + sqlWhere += " and a.id not in ("+String.join(",", noRes)+") "; + } + + + List resIds = new ArrayList<>(); + String acqResSql = "select a.id from hrmresource a where a.status in (0,1,2,3) " + sqlWhere; + bb.writeLog("acqResSql: " + acqResSql); + + rs.executeQuery(acqResSql); + while (rs.next()) { + String id = Util.null2String(rs.getString("id")); + if (StringUtils.isNotBlank(id)) { + resIds.add(id); + } + } + bb.writeLog("resIds: " + resIds); + + if (resIds != null && resIds.size() > 0 && StringUtils.isNotBlank(fromDate) && StringUtils.isNotBlank(toDate)) { + HostarUtil houtil = new HostarUtil(); +// List allDates = houtil.getAllDates(fromDate, toDate); + List allDates = new ArrayList<>(); + allDates.add(kqDate); + bb.writeLog("allDates: " + allDates); + bb.writeLog("allDates.size(): " + allDates.size()); + + KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo(); + + //先获取到出勤时长 +// long startTime13 = System.currentTimeMillis(); + Map attendanceMinsMap = new HashMap<>(); + String acqAttenSql = " select resourceid, attendancemins, kqdate from kq_format_total where resourceid in (" + String.join(",",resIds) + ") and kqdate >='" + fromDate + "' and kqdate <='" + toDate + "'"; + rs.executeQuery(acqAttenSql); + while (rs.next()) { + String resourceid = Util.null2String(rs.getString("resourceid")); + Double attendancemins = Util.getDoubleValue(Util.null2String(rs.getString("attendancemins"))); + String kqdate = Util.null2String(rs.getString("kqdate")); + if (attendancemins >= 0.00 ) { + attendanceMinsMap.put(resourceid+"|"+kqdate, attendancemins); + } + } +// long endTime13 = System.currentTimeMillis(); +// long elapsedTime13 = endTime13 - startTime13; // 执行时间 +// bb.writeLog("出勤时长执行时间:" + elapsedTime13 + "毫秒" ); + + //获取享受的考勤组 + List grouplist = new ArrayList(); + String acqGroupSql = "select kqgroup from uf_StatAlloKqGroup where isdelete is null or isdelete = 0 " ; + rs.executeQuery(acqGroupSql); + while (rs.next()) { + String kqgroup = Util.null2String(rs.getString("kqgroup")); + if (StringUtils.isNotBlank(kqgroup)) { + grouplist.add(kqgroup); + } + } + if ( grouplist != null && grouplist.size() == 0) { + return datas; + } + +// int x = 1; + for (String date : allDates) { +// long startTime14 = System.currentTimeMillis(); for (String res: resIds) { - for (String date : allDates) { +// long startTime15 = System.currentTimeMillis(); + //判断考勤组 + /*获取考勤组的ID,因为考勤组有有效期,所以需要传入日期*/ + String groupId = kqGroupMemberComInfo.getKQGroupId(resourceId, date); + if ( !grouplist.contains(groupId)) { + continue; + } + //获取考勤打卡 + Map otherinfo = new HashMap<>();//存一些用得到的信息 + String uuid = UUID.randomUUID().toString(); + KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo(); + ArrayList hostIps = InitServer.getRealIp();//获取IP + boolean oneSign = false;//一天一段出勤时间段 + List lsSignTime = new ArrayList<>(); + List lsWorkTime = new ArrayList<>(); +// List lsRestTime = new ArrayList<>(); + KQWorkTime kqWorkTime = new KQWorkTime(); + kqWorkTime.setIsFormat(true); + WorkTimeEntity workTime = kqWorkTime.getWorkTime(res, date); + String preDate = DateUtil.addDate(date, -1);//上一天日期 + String nextDate = DateUtil.addDate(date, 1);//下一天日期 + if (workTime != null) { + lsSignTime = workTime.getSignTime();//允许打卡时间 + lsWorkTime = workTime.getWorkTime();//工作时间 +// lsRestTime = workTime.getRestTime();//休息时段时间 + oneSign = lsWorkTime!=null&&lsWorkTime.size()==1; + } + int shiftCount = lsWorkTime == null ? 0 : lsWorkTime.size(); + int shiftI = 0; + List lsCheckInfo = new ArrayList<>(); + for (int i = 0; lsWorkTime != null && i < lsWorkTime.size(); i++) { + shiftI = i; + TimeScopeEntity signTimeScope = lsSignTime.get(i); + TimeScopeEntity workTimeScope = lsWorkTime.get(i); + Map shifRuleMap = Maps.newHashMap(); + + String workBeginTime = Util.null2String(workTimeScope.getBeginTime()); +// String ori_workBeginTime = workBeginTime; + int workBeginIdx = kqTimesArrayComInfo.getArrayindexByTimes(workBeginTime); +// boolean workBenginTimeAcross = workTimeScope.getBeginTimeAcross(); + String workEndTime = Util.null2String(workTimeScope.getEndTime()); +// String ori_workEndTime = workEndTime; + int workEndIdx = kqTimesArrayComInfo.getArrayindexByTimes(workEndTime); + boolean workEndTimeAcross = workTimeScope.getEndTimeAcross(); +// int workMins = workTimeScope.getWorkMins(); +// +// String workBeginDate = workBenginTimeAcross ? nextDate : date; +// String workEndDate = workEndTimeAcross ? nextDate : date; + + if(oneSign){ + //个性化设置只支持一天一次上下班 + ShiftInfoBean shiftInfoBean = new ShiftInfoBean(); + shiftInfoBean.setSplitDate(date); + shiftInfoBean.setShiftRuleMap(workTime.getShiftRuleInfo()); + shiftInfoBean.setSignTime(lsSignTime); + shiftInfoBean.setWorkTime(lsWorkTime); + List logList = Lists.newArrayList(); + KQShiftRuleInfoBiz.getShiftRuleInfo(shiftInfoBean, res, shifRuleMap,logList); + if(!shifRuleMap.isEmpty()){ + if(!logList.isEmpty()){ + otherinfo.put("logList", logList); + } + otherinfo.put("shiftRule", shifRuleMap); + if(shifRuleMap.containsKey("shift_beginworktime")){ + String shift_beginworktime = Util.null2String(shifRuleMap.get("shift_beginworktime")); + if(shift_beginworktime.length() > 0){ + workBeginTime = Util.null2String(shift_beginworktime); + workBeginIdx = kqTimesArrayComInfo.getArrayindexByTimes(workBeginTime); + workTimeScope.setBeginTime(workBeginTime); + workTimeScope.setBeginTimeAcross(workBeginIdx>=1440?true:false); + } + } + if(shifRuleMap.containsKey("shift_endworktime")){ + String shift_endworktime = Util.null2String(shifRuleMap.get("shift_endworktime")); + if(shift_endworktime.length() > 0){ + workEndTime = Util.null2String(shift_endworktime); + workEndIdx = kqTimesArrayComInfo.getArrayindexByTimes(workEndTime); + workTimeScope.setEndTime(workEndTime); + workTimeScope.setEndTimeAcross(workEndIdx>=1440?true:false); + } + } + } + } + + //lsCheckInfo的内容格式 + //[{ + // signTime = 08: 49: 00, + // signStatus = 0, + // signType = 1, + // signDate = 2023 - 12 - 22, + // signId = 6 + //}, { + // signTime = 18: 49: 00, + // signStatus = 0, + // signType = 2, + // signDate = 2023 - 12 - 22, + // signId = 7 + //}] + lsCheckInfo = new KQFormatSignData().getSignInfo(res,signTimeScope,workTimeScope,date,preDate,nextDate,kqTimesArrayComInfo,hostIps,uuid,shiftCount,shiftI); + } +// long endTime15 = System.currentTimeMillis(); +// long elapsedTime15 = endTime15 - startTime15; // 执行时间 +// bb.writeLog("获取打卡数据执行时间:" + elapsedTime15 + "毫秒" ); +// long startTime16 = System.currentTimeMillis(); + List signIdList = new ArrayList<>(); + for (int i = 0; i < lsCheckInfo.size(); i++) { + Object o = lsCheckInfo.get(i); + if ( o != null && o != "") { + Map temp = (Map) o; + String signId = Util.null2String(temp.get("signId")); + if (StringUtils.isNotBlank(signId)) { + signIdList.add(signId); + } + } + } + bb.writeLog("signIdList: " + signIdList); + + Integer signNumber = 0; + if (signIdList !=null && signIdList.size() > 0) { + String acqShowAddress = "select showaddress from hrmschedulesign where id in (" + String.join(",", signIdList) + ") "; + bb.writeLog("acqShowAddress: " + acqShowAddress); + rs.executeQuery(acqShowAddress); + while (rs.next()) { + String showaddress = Util.null2String(rs.getString("showaddress")); + if ("鸿仕达".equals(showaddress) || "hostar".equalsIgnoreCase(showaddress)) { + signNumber = signNumber + 1; + } + } + } + if (signNumber == 0 ) { double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|workingDayOvertime_4leave"))); workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave; double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|restDayOvertime_4leave"))); @@ -1822,26 +2354,28 @@ public class KQReportBiz extends BaseBean { double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave + workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave; - bb.writeLog("-=-temp:" + temp); +// bb.writeLog("-=-temp:" + temp); Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + date))); - bb.writeLog("-=-attendanceMins:" + attendanceMins); - String value = String.valueOf(Math.ceil( (attendanceMins < 0.00 ? 0.00 : attendanceMins) + temp)); - bb.writeLog("-=-value:" + value); - datas.put(res + "|" + "DailyNightShiftAllowanceData" + "|" + date, value); +// bb.writeLog("-=-attendanceMins:" + attendanceMins); + String value = String.valueOf(Math.floor( ((attendanceMins < 0.00 ? 0.00 : attendanceMins) + temp) / 300)); +// bb.writeLog("-=-value:" + value); + datas.put(res + "|" + "DailyStatAllowance" + "|" + date, value); } +// long endTime16 = System.currentTimeMillis(); +// long elapsedTime16 = endTime16 - startTime16; // 执行时间 +// bb.writeLog("计算餐补执行时间:" + elapsedTime16 + "毫秒" ); } +// long endTime14 = System.currentTimeMillis(); +// long elapsedTime14 = endTime14 - startTime14; // 执行时间 +// bb.writeLog("第" + x + "循环执行时间:" + elapsedTime14 + "毫秒" ); +// x++; } - - } else { - bb.writeLog("夜班餐补计算失败,没有设置该餐补享受分部"); } - - }catch (Exception e){ writeLog(e); - bb.writeLog("DailyNightShiftAllowanceData Exception: " + e); + bb.writeLog("DailyStatAllowance Exception: " + e); } - bb.writeLog("DailyNightShiftAllowanceData datas: " + datas); + bb.writeLog("DailyStatAllowance datas: " + datas); return datas; } @@ -1852,7 +2386,7 @@ public class KQReportBiz extends BaseBean { * @param user * @return */ - public Map getDailyStatAllowanceData(Map params, User user){ + public Map getStatAllowanceData(Map params, User user){ Map datas = new HashMap<>();; RecordSet rs = new RecordSet(); String sql = ""; @@ -1879,34 +2413,47 @@ public class KQReportBiz extends BaseBean { String allLevel = Util.null2String(jsonObj.get("allLevel")); String isNoAccount = Util.null2String(jsonObj.get("isNoAccount")); String viewScope = Util.null2String(jsonObj.get("viewScope")); - 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<>'' "); + String statUser = Util.null2String(Util.null2String(params.get("statUser"))); +// String kqdate = Util.null2String(Util.null2String(params.get("kqdate"))); + if(statUser.length()>0){ + sqlWhere +=" and a.id in("+statUser+") "; } +// if(kqdate.length()>0){ +// sqlWhere +=" and a.id in("+statUser+") "; +// } +// 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<>'' "); +// } //获取加班时长 +// long startTime11 = System.currentTimeMillis(); Map dailyFlowOverTimeData = getDailyFlowOverTimeDataAllowance(params, user); - bb.writeLog("dailyFlowOverTimeData: " + dailyFlowOverTimeData); +// long endTime11 = System.currentTimeMillis(); +// long elapsedTime11 = endTime11 - startTime11; // 执行时间 +// bb.writeLog("加班时长执行时间:" + elapsedTime11 + "毫秒" ); +// bb.writeLog("dailyFlowOverTimeData: " + dailyFlowOverTimeData); //首先去除指定不享有的分部 +// long startTime12 = System.currentTimeMillis(); List subComoanyList = new ArrayList<>(); String acqNoStatAllSql = "select subcompany from uf_NoStatAllSubCom where isdelete = 0 or isdelete is null"; rs.executeQuery(acqNoStatAllSql); @@ -1916,7 +2463,10 @@ public class KQReportBiz extends BaseBean { subComoanyList.add(subcompany); } } - bb.writeLog("subComoanyList: " + subComoanyList); +// long endTime12 = System.currentTimeMillis(); +// long elapsedTime12 = endTime12 - startTime12; // 执行时间 +// bb.writeLog("不享有的分部执行时间:" + elapsedTime12 + "毫秒" ); +// bb.writeLog("subComoanyList: " + subComoanyList); String subComoanys = ""; if ( subComoanyList != null && subComoanyList.size() > 0) { @@ -1926,6 +2476,21 @@ public class KQReportBiz extends BaseBean { sqlWhere += " and a.subcompanyid1 not in ("+subComoanys+") "; } + //指定人员不享受 + List noRes = new ArrayList<>(); + String acqNoResSql = "select resourceid from uf_NoStatAllRes where isdelete = 0 or isdelete is null"; + rs.executeQuery(acqNoResSql); + while (rs.next()) { + String resourceid = Util.null2String(rs.getString("resourceid")); + if (StringUtils.isNotBlank(resourceid)) { + noRes.add(resourceid); + } + } + if ( noRes !=null && noRes.size()>0) { + sqlWhere += " and a.id not in ("+String.join(",", noRes)+") "; + } + + List resIds = new ArrayList<>(); String acqResSql = "select a.id from hrmresource a where a.status in (0,1,2,3) " + sqlWhere; bb.writeLog("acqResSql: " + acqResSql); @@ -1943,8 +2508,12 @@ public class KQReportBiz extends BaseBean { HostarUtil houtil = new HostarUtil(); List allDates = houtil.getAllDates(fromDate, toDate); bb.writeLog("allDates: " + allDates); + bb.writeLog("allDates.size(): " + allDates.size()); + + KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo(); //先获取到出勤时长 +// long startTime13 = System.currentTimeMillis(); Map attendanceMinsMap = new HashMap<>(); String acqAttenSql = " select resourceid, attendancemins, kqdate from kq_format_total where resourceid in (" + String.join(",",resIds) + ") and kqdate >='" + fromDate + "' and kqdate <='" + toDate + "'"; rs.executeQuery(acqAttenSql); @@ -1956,9 +2525,35 @@ public class KQReportBiz extends BaseBean { attendanceMinsMap.put(resourceid+"|"+kqdate, attendancemins); } } +// long endTime13 = System.currentTimeMillis(); +// long elapsedTime13 = endTime13 - startTime13; // 执行时间 +// bb.writeLog("出勤时长执行时间:" + elapsedTime13 + "毫秒" ); + //获取享受的考勤组 + List grouplist = new ArrayList(); + String acqGroupSql = "select kqgroup from uf_StatAlloKqGroup where isdelete is null or isdelete = 0 " ; + rs.executeQuery(acqGroupSql); + while (rs.next()) { + String kqgroup = Util.null2String(rs.getString("kqgroup")); + if (StringUtils.isNotBlank(kqgroup)) { + grouplist.add(kqgroup); + } + } + if ( grouplist != null && grouplist.size() == 0) { + return datas; + } + +// int x = 1; for (String date : allDates) { +// long startTime14 = System.currentTimeMillis(); for (String res: resIds) { +// long startTime15 = System.currentTimeMillis(); + //判断考勤组 + /*获取考勤组的ID,因为考勤组有有效期,所以需要传入日期*/ + String groupId = kqGroupMemberComInfo.getKQGroupId(resourceId, date); + if ( !grouplist.contains(groupId)) { + continue; + } //获取考勤打卡 Map otherinfo = new HashMap<>();//存一些用得到的信息 String uuid = UUID.randomUUID().toString(); @@ -2052,22 +2647,33 @@ public class KQReportBiz extends BaseBean { //}] lsCheckInfo = new KQFormatSignData().getSignInfo(res,signTimeScope,workTimeScope,date,preDate,nextDate,kqTimesArrayComInfo,hostIps,uuid,shiftCount,shiftI); } +// long endTime15 = System.currentTimeMillis(); +// long elapsedTime15 = endTime15 - startTime15; // 执行时间 +// bb.writeLog("获取打卡数据执行时间:" + elapsedTime15 + "毫秒" ); +// long startTime16 = System.currentTimeMillis(); List signIdList = new ArrayList<>(); for (int i = 0; i < lsCheckInfo.size(); i++) { Object o = lsCheckInfo.get(i); if ( o != null && o != "") { Map temp = (Map) o; - signIdList.add(Util.null2String(temp.get("signId"))); + String signId = Util.null2String(temp.get("signId")); + if (StringUtils.isNotBlank(signId)) { + signIdList.add(signId); + } } } + bb.writeLog("signIdList: " + signIdList); + Integer signNumber = 0; - String acqShowAddress = "select showaddress from hrmschedulesign where id in (" + String.join(",", signIdList) + ") "; - bb.writeLog("acqShowAddress: " + acqShowAddress); - rs.executeQuery(acqShowAddress); - while (rs.next()) { - String showaddress = Util.null2String(rs.getString("showaddress")); - if ("鸿仕达".equals(showaddress) || "hostar".equalsIgnoreCase(showaddress)) { - signNumber = signNumber + 1; + if (signIdList !=null && signIdList.size() > 0) { + String acqShowAddress = "select showaddress from hrmschedulesign where id in (" + String.join(",", signIdList) + ") "; + bb.writeLog("acqShowAddress: " + acqShowAddress); + rs.executeQuery(acqShowAddress); + while (rs.next()) { + String showaddress = Util.null2String(rs.getString("showaddress")); + if ("鸿仕达".equals(showaddress) || "hostar".equalsIgnoreCase(showaddress)) { + signNumber = signNumber + 1; + } } } if (signNumber == 0 ) { @@ -2087,22 +2693,28 @@ public class KQReportBiz extends BaseBean { double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave + workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave; - bb.writeLog("-=-temp:" + temp); +// bb.writeLog("-=-temp:" + temp); Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + date))); - bb.writeLog("-=-attendanceMins:" + attendanceMins); - String value = String.valueOf(Math.ceil( (attendanceMins < 0.00 ? 0.00 : attendanceMins) + temp)); - bb.writeLog("-=-value:" + value); - datas.put(res + "|" + "DailyStatAllowance" + "|" + date, value); +// bb.writeLog("-=-attendanceMins:" + attendanceMins); + String value = String.valueOf(Math.floor( ((attendanceMins < 0.00 ? 0.00 : attendanceMins) + temp) / 300)); +// bb.writeLog("-=-value:" + value); + datas.put(res + "|" + "StatAllowance" + "|" + date, value); } +// long endTime16 = System.currentTimeMillis(); +// long elapsedTime16 = endTime16 - startTime16; // 执行时间 +// bb.writeLog("计算餐补执行时间:" + elapsedTime16 + "毫秒" ); } - +// long endTime14 = System.currentTimeMillis(); +// long elapsedTime14 = endTime14 - startTime14; // 执行时间 +// bb.writeLog("第" + x + "循环执行时间:" + elapsedTime14 + "毫秒" ); +// x++; } } }catch (Exception e){ writeLog(e); - bb.writeLog("DailyStatAllowance Exception: " + e); + bb.writeLog("StatAllowance Exception: " + e); } - bb.writeLog("DailyStatAllowance datas: " + datas); + bb.writeLog("StatAllowance datas: " + datas); return datas; } diff --git a/src/com/engine/kq/biz/KQScheduleSignBiz.java b/src/com/engine/kq/biz/KQScheduleSignBiz.java index d4cbecb..74d6709 100644 --- a/src/com/engine/kq/biz/KQScheduleSignBiz.java +++ b/src/com/engine/kq/biz/KQScheduleSignBiz.java @@ -4,6 +4,7 @@ import com.engine.kq.bean.KQHrmScheduleSign; import com.engine.kq.log.KQLog; import com.engine.kq.wfset.util.KQSignUtil; import weaver.conn.RecordSet; +import weaver.general.BaseBean; import weaver.general.Util; import java.util.ArrayList; @@ -294,6 +295,7 @@ public class KQScheduleSignBiz { public KQHrmScheduleSign getSignBean(RecordSet rs){ + BaseBean bb = new BaseBean(); KQHrmScheduleSign kqHrmScheduleSign = new KQHrmScheduleSign(); String id=Util.null2String(rs.getString("id")); String userid=Util.null2String(rs.getString("userid")); @@ -305,7 +307,11 @@ public class KQScheduleSignBiz { String signfrom=Util.null2String(rs.getString("signfrom")); String longitude=Util.null2String(rs.getString("longitude")); String latitude=Util.null2String(rs.getString("latitude")); - String addr=Util.null2String(rs.getString("addr")); + /*考勤二开--打卡地址改为办公地点start*/ +// String addr=Util.null2String(rs.getString("addr")); + String addr=Util.null2String(rs.getString("showaddress")); + bb.writeLog("打卡地址: " + addr); + /*考勤二开--打卡地址改为办公地点end*/ String isincom=Util.null2String(rs.getString("isincom")); String isimport=Util.null2String(rs.getString("isimport")); String importsql=Util.null2String(rs.getString("importsql")); diff --git a/src/com/engine/kq/cmd/report/ExportDailyExcelCmd.java b/src/com/engine/kq/cmd/report/ExportDailyExcelCmd.java index 02a9b65..7813c70 100644 --- a/src/com/engine/kq/cmd/report/ExportDailyExcelCmd.java +++ b/src/com/engine/kq/cmd/report/ExportDailyExcelCmd.java @@ -5,6 +5,7 @@ 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.cmd.shiftmanagement.toolkit.ShiftManagementToolKit; import com.engine.kq.util.ExcelUtil; @@ -185,10 +186,10 @@ public class ExportDailyExcelCmd extends AbstractCommonCommand0){ @@ -234,6 +235,7 @@ public class ExportDailyExcelCmd extends AbstractCommonCommand flowData = kqReportBiz.getDailyFlowData(params,user); /*考勤二开--驻点餐补start*/ + HostarUtil hostarUtil = new HostarUtil(); List subComoanyList = new ArrayList<>(); String acqNoStatAllSql = "select subcompany from uf_NoStatAllSubCom where isdelete = 0 or isdelete is null"; rs.executeQuery(acqNoStatAllSql); @@ -248,10 +250,10 @@ public class ExportDailyExcelCmd extends AbstractCommonCommand nightshifts = new ArrayList(); - String acqSerialSql = " select serial from uf_nightshiftmanage where isdelete is null or isdelete = 0"; + String acqSerialSql = " select shift from uf_nightshiftmanage where isdelete is null or isdelete = 0"; rs.executeQuery(acqSerialSql); while (rs.next()) { - String serial = Util.null2String(rs.getString("serial")); + String serial = Util.null2String(rs.getString("shift")); if (StringUtils.isNotBlank(serial)) { nightshifts.add(serial); } @@ -443,20 +445,46 @@ public class ExportDailyExcelCmd extends AbstractCommonCommand dailyStatAllowanceData = kqReportBiz.getDailyStatAllowanceData(params, user); + long endTime = System.currentTimeMillis(); + long elapsedTime = endTime - startTime; // 执行时间 + bb.writeLog("执行时间:" + elapsedTime/1000 + "秒"); + + if (dailyStatAllowanceData == null || dailyStatAllowanceData.size() == 0) { fieldValue = "0"; } else { - fieldValue = String.valueOf(temp); + Map tempMap = hostarUtil.parseMapForFilter(dailyStatAllowanceData, id + "|DailyStatAllowance"); + + int temp = Util.getIntValue(Util.null2String(tempMap.get(id + "|DailyStatAllowance" + "|" + kqdate ))); + if (temp <= 0) { + fieldValue = "0"; + } else { + fieldValue = String.valueOf(temp); + } } - bb.writeLog("fieldValue: " + fieldValue); + +// bb.writeLog("fieldValue: " + fieldValue); } data.add(fieldValue); continue; - } else if (fieldName.equals("nightAllowance")) {//考勤二开--夜班餐补 + } else if ("nightAllowance".equals(fieldName)) {//考勤二开--夜班餐补 String subcompanyId = Util.null2String(rs.getString("subcompanyid")); String serialid = Util.null2String(rs.getString("serialid")); if ( !subComoanyList.contains(subcompanyId) && nightshifts.contains(serialid)) { @@ -466,18 +494,30 @@ public class ExportDailyExcelCmd extends AbstractCommonCommand temp = kqReportBiz.getDailyNightShiftSubsidyData(params, user); + if (temp == null || temp.size() == 0) { + data.add( "0"); + } else { + int intValue = Math.max(Util.getIntValue(Util.null2String(temp.get(id + "|DailyStatAllowance" + kqdate))) , 0); + data.add( intValue); + } + + } else if ("otherStatAllowance".equals(fieldName)) {//考勤二开--鸿仁驻点餐补 int temp = Util.getIntValue(Util.null2String(flowData.get(id + "|DailyOtherStatAllowance" + "|" + kqdate ))); if (temp <= 0) { fieldValue = "0"; } else { fieldValue = String.valueOf(temp); } - bb.writeLog("fieldValue: " + fieldValue); +// bb.writeLog("fieldValue: " + fieldValue); data.add(fieldValue); continue; } else if(fieldName.equals("kqdate")){ diff --git a/src/com/engine/kq/cmd/report/ExportExcelCmd.java b/src/com/engine/kq/cmd/report/ExportExcelCmd.java index f928092..42895fa 100644 --- a/src/com/engine/kq/cmd/report/ExportExcelCmd.java +++ b/src/com/engine/kq/cmd/report/ExportExcelCmd.java @@ -208,12 +208,12 @@ public class ExportExcelCmd extends AbstractCommonCommand> { 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(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(FLOOR( (b.absenteeismMins / 60 ) /0.5 ) * 0.5 * 60 AS absenteeismMins) as absenteeismMins, sum(b.forgotCheck)+"+forgotBeginWorkCheck_field+" as forgotCheck "+(definedFieldSum.length()>0?","+definedFieldSum+"":""); + " 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; } @@ -433,38 +433,88 @@ public class ExportExcelCmd extends AbstractCommonCommand> { }catch (Exception e){ } fieldValue = KQDurationCalculatorUtil.getDurationRound(businessLeave); - } else if (fieldName.equals("statAllowance")) {//考勤二开--驻点餐补 - bb.writeLog("flowData: " + flowData); - Map tempMap = hostarUtil.parseMapForFilter(flowData, id + "|DailyStatAllowance"); - bb.writeLog("tempMap: " + tempMap); + } else if ("mealAllowance".equals(fieldName)) {//考勤二开--出差餐补 +// bb.writeLog("mealAllowance"); + Map tempMap = hostarUtil.parseMapForFilter(flowData, "DailyMealAllow|" + resourceId); +// bb.writeLog("tempMap: " + tempMap); + if ( !tempMap.isEmpty()) { - double tempValue = 0.00; + int tempValue = 0; for (String key: tempMap.keySet()) { - double doubleValue = Util.getDoubleValue(Util.null2String(tempMap.get(key))); - tempValue = tempValue + (doubleValue < 0.00 ? 0.00 : doubleValue); + int intValue = Util.getIntValue(Util.null2String(tempMap.get(key))); + tempValue = tempValue + (Math.max(intValue, 0)); } fieldValue = String.valueOf(tempValue); } +// bb.writeLog("fieldValue: " + fieldValue); data.add(fieldValue); continue; - } else if (fieldName.equals("nightAllowance")) {//考勤二开--夜班餐补 - bb.writeLog("flowData: " + flowData); + } else if ("statAllowance".equals(fieldName)) {//考勤二开--驻点餐补 +// bb.writeLog("statAllowance"); +// bb.writeLog("flowData: " + flowData); + params.put("statUser", id); + bb.writeLog("params: " + params ); + + Map temp = kqReportBiz.getStatAllowanceData(params, user); + if (temp == null || temp.size() == 0) { + data.add( "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.add( fieldValue); + } + continue; + } else if ("nightAllowance".equals(fieldName)) {//考勤二开--精密夜班餐补 +// bb.writeLog("nightAllowance"); Map tempMap = hostarUtil.parseMapForFilter(flowData, id + "|DailyNightShiftAllowanceData"); - bb.writeLog("tempMap: " + tempMap); +// 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 + (doubleValue < 0.00 ? 0.00 : doubleValue); + tempValue = tempValue + (Math.max(doubleValue, 0.00)); } fieldValue = String.valueOf(tempValue); } +// bb.writeLog("fieldValue: " + fieldValue); data.add(fieldValue); continue; - } else if (fieldName.equals("otherStatAllowance")) {//考勤二开--鸿仁驻点餐补 - bb.writeLog("flowData: " + flowData); + } 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.add( "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.add( fieldValue); + } + continue; + } else if ("otherStatAllowance".equals(fieldName)) {//考勤二开--鸿仁驻点餐补 +// bb.writeLog("otherStatAllowance"); Map tempMap = hostarUtil.parseMapForFilter(flowData, id + "|DailyOtherStatAllowance"); - bb.writeLog("tempMap: " + tempMap); +// bb.writeLog("tempMap: " + tempMap); if ( !tempMap.isEmpty()) { double tempValue = 0.00; for (String key: tempMap.keySet()) { @@ -473,6 +523,7 @@ public class ExportExcelCmd extends AbstractCommonCommand> { } fieldValue = String.valueOf(tempValue); } +// bb.writeLog("fieldValue: " + fieldValue); data.add(fieldValue); continue; } else if(Util.null2String(kqReportFieldComInfo.getCascadekey(fieldid)).length()>0){ diff --git a/src/com/engine/kq/cmd/report/GetKQDailyReportCmd.java b/src/com/engine/kq/cmd/report/GetKQDailyReportCmd.java index 1450b80..28d2ce1 100644 --- a/src/com/engine/kq/cmd/report/GetKQDailyReportCmd.java +++ b/src/com/engine/kq/cmd/report/GetKQDailyReportCmd.java @@ -5,6 +5,7 @@ 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.cmd.shiftmanagement.toolkit.ShiftManagementToolKit; import com.engine.kq.entity.WorkTimeEntity; @@ -144,10 +145,10 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand0){ @@ -229,6 +230,7 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand flowData = kqReportBiz.getDailyFlowData(params,user); + bb.writeLog("=-=-flowData: " + flowData); // #1475814-概述:满足考勤报分部部门显示及导出时显示全路径 String fullPathMainKey = "show_full_path"; @@ -236,6 +238,7 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand subComoanyList = new ArrayList<>(); String acqNoStatAllSql = "select subcompany from uf_NoStatAllSubCom where isdelete = 0 or isdelete is null"; rs.executeQuery(acqNoStatAllSql); @@ -250,16 +253,18 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand nightshifts = new ArrayList(); - String acqSerialSql = " select serial from uf_nightshiftmanage where isdelete is null or isdelete = 0"; + String acqSerialSql = " select shift from uf_nightshiftmanage where isdelete is null or isdelete = 0"; rs.executeQuery(acqSerialSql); while (rs.next()) { - String serial = Util.null2String(rs.getString("serial")); + String serial = Util.null2String(rs.getString("shift")); if (StringUtils.isNotBlank(serial)) { nightshifts.add(serial); } } /*考勤二开--夜班餐补end*/ + bb.writeLog("每日报表sql: " + sql); + rs.execute(sql); while (rs.next()) { String id = rs.getString("id"); @@ -357,36 +362,76 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand dailyStatAllowanceData = kqReportBiz.getDailyStatAllowanceData(params, user); +// long endTime = System.currentTimeMillis(); +// long elapsedTime = endTime - startTime; // 执行时间 +// bb.writeLog("执行时间:" + elapsedTime/1000 + "秒"); + + if (dailyStatAllowanceData == null || dailyStatAllowanceData.size() == 0) { fieldValue = "0"; } else { - fieldValue = String.valueOf(temp); + Map tempMap = hostarUtil.parseMapForFilter(dailyStatAllowanceData, id + "|DailyStatAllowance"); + + int temp = Util.getIntValue(Util.null2String(tempMap.get(id + "|DailyStatAllowance" + "|" + kqdate ))); + if (temp <= 0) { + fieldValue = "0"; + } else { + fieldValue = String.valueOf(temp); + } } - bb.writeLog("fieldValue: " + fieldValue); + +// bb.writeLog("fieldValue: " + fieldValue); } data.put(fieldName, fieldValue); - } else if (fieldName.equals("nightAllowance")) {//考勤二开--夜班餐补 + } else if (fieldName.equals("nightAllowance")) {//考勤二开--精密夜班餐补 String subcompanyId = Util.null2String(rs.getString("subcompanyid")); String serialid = Util.null2String(rs.getString("serialid")); if ( subcompanyId.equals(nightshiftsub) && nightshifts.contains(serialid)) { - int temp = Util.getIntValue(Util.null2String(flowData.get(id + "|DailyNightShiftAllowanceData" + "|" + kqdate ))); - if (temp <= 0) { +// String key= id + "|DailyNightShiftAllowanceData" + "|" + kqdate; +// bb.writeLog("nightAllowance key: " + key ); + double temp = Util.getDoubleValue(Util.null2String(flowData.get(id + "|DailyNightShiftAllowanceData" + "|" + kqdate ))); +// bb.writeLog("nightAllowance temp: " + temp ); +// bb.writeLog("nightAllowance kqdate: " + kqdate ); + if (temp <= 0.00) { fieldValue = "0"; } else { fieldValue = String.valueOf(temp); } - bb.writeLog("fieldValue: " + fieldValue); +// 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); +// bb.writeLog("nightShiftSubsidy temp: " + temp ); +// bb.writeLog("nightShiftSubsidy temp.size: " + temp.size() ); +// String key = id + "|DailyNightShiftSubsidyData" + kqdate; +// bb.writeLog("nightShiftSubsidy key: " + key ); + if (temp == null || temp.size() == 0) { + data.put(fieldName, "0"); + } else { + double doubleValue = Math.max(Util.getDoubleValue(Util.null2String(temp.get(id + "|DailyNightShiftSubsidyData|" + kqdate))) , 0.00); +// bb.writeLog("nightShiftSubsidy doubleValue: " + doubleValue ); +// bb.writeLog("nightShiftSubsidy kqdate: " + kqdate ); + data.put(fieldName, doubleValue); + } + } else if (fieldName.equals("otherStatAllowance")) {//考勤二开--鸿仁驻点餐补 - int temp = Util.getIntValue(Util.null2String(flowData.get(id + "|DailyOtherStatAllowance" + "|" + kqdate ))); - if (temp <= 0) { + double temp = Util.getDoubleValue(Util.null2String(flowData.get(id + "|DailyOtherStatAllowance" + "|" + kqdate ))); + if (temp <= 0.00) { fieldValue = "0"; } else { fieldValue = String.valueOf(temp); } - bb.writeLog("fieldValue: " + fieldValue); +// bb.writeLog("fieldValue: " + fieldValue); data.put(fieldName, fieldValue); } else { fieldValue = Util.null2String(rs.getString(fieldName)); @@ -571,13 +616,24 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand> { 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(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(FLOOR( (b.absenteeismMins / 60 ) /0.5 ) * 0.5 * 60 AS absenteeismMins) as absenteeismMins, sum(b.forgotCheck)+"+forgotBeginWorkCheck_field+" as forgotCheck "+(definedFieldSum.length()>0?","+definedFieldSum+"":""); + " 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; @@ -313,25 +313,30 @@ public class GetKQReportCmd extends AbstractCommonCommand> { 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*/ +// /*考勤二开--驻点餐补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<>(); @@ -430,44 +435,98 @@ public class GetKQReportCmd extends AbstractCommonCommand> { } else{ fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id+"|"+fieldName))); } - } else if (fieldName.equals("statAllowance")) {//考勤二开--驻点餐补 - bb.writeLog("flowData: " + flowData); - Map tempMap = hostarUtil.parseMapForFilter(flowData, id + "|DailyStatAllowance"); - bb.writeLog("tempMap: " + tempMap); + } else if ("mealAllowance".equals(fieldName)) {//考勤二开--出差餐补 +// bb.writeLog("mealAllowance"); + Map tempMap = hostarUtil.parseMapForFilter(flowData, "DailyMealAllow|" + resourceId); +// bb.writeLog("tempMap: " + tempMap); + if ( !tempMap.isEmpty()) { - double tempValue = 0.00; + int tempValue = 0; for (String key: tempMap.keySet()) { - double doubleValue = Util.getDoubleValue(Util.null2String(tempMap.get(key))); - tempValue = tempValue + (doubleValue < 0.00 ? 0.00 : doubleValue); + 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 (fieldName.equals("nightAllowance")) {//考勤二开--夜班餐补 - bb.writeLog("flowData: " + flowData); + } 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); +// 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 + (doubleValue < 0.00 ? 0.00 : doubleValue); + tempValue = tempValue + (Math.max(doubleValue, 0.00)); } fieldValue = String.valueOf(tempValue); } +// bb.writeLog("fieldValue: " + fieldValue); data.put(fieldName, fieldValue); - } else if (fieldName.equals("otherStatAllowance")) {//考勤二开--鸿仁驻点餐补 - bb.writeLog("flowData: " + flowData); + } 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); +// 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 + (doubleValue < 0.00 ? 0.00 : doubleValue); + 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)); diff --git a/src/weaver/formmode/customjavacode/modeexpand/AddScheduleSign.java b/src/weaver/formmode/customjavacode/modeexpand/AddScheduleSign.java index f4b1eb1..00eafb9 100644 --- a/src/weaver/formmode/customjavacode/modeexpand/AddScheduleSign.java +++ b/src/weaver/formmode/customjavacode/modeexpand/AddScheduleSign.java @@ -5,6 +5,12 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import com.engine.kq.biz.KQFormatBiz; +import com.engine.kq.timer.KQQueue; +import com.engine.kq.timer.KQTaskBean; +import com.engine.kq.wfset.util.SplitActionUtil; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import org.apache.commons.lang3.StringUtils; import weaver.conn.RecordSet; import weaver.formmode.customjavacode.AbstractModeExpandJavaCodeNew; @@ -45,6 +51,7 @@ public class AddScheduleSign extends AbstractModeExpandJavaCodeNew { RecordSet rs = new RecordSet(); List addParams = new ArrayList<>(); + List lsFormatData = new ArrayList<>(); Map signFromMap = new HashMap(); signFromMap.put( "0","e9pc"); @@ -118,6 +125,11 @@ public class AddScheduleSign extends AbstractModeExpandJavaCodeNew { addPa.add(deviceinfo); addPa.add(showaddress); addParams.add(addPa); + + String formatData = userid + "|" + signdate + "|" + signtime; + if (!lsFormatData.contains(formatData)) { + lsFormatData.add(formatData); + } } bb.writeLog("addParams: " + addParams); @@ -128,6 +140,56 @@ public class AddScheduleSign extends AbstractModeExpandJavaCodeNew { rs.executeBatchSql(addSchSignSql, addParams); + //触发考勤格式化计算和加班 + //刷新报表数据 + List formatParams = null; + List> lsFormatParams = new ArrayList<>(); + Map> overtimeMap = Maps.newHashMap(); + List overtimeList = Lists.newArrayList(); + bb.writeLog("开始处理考勤数据生成"); + for(int i=0;lsFormatData!=null&&i(); + String[] formatData = Util.splitString(lsFormatData.get(i),"|"); + String date_1 = weaver.common.DateUtil.addDate(formatData[1], -1); + formatParams.add(formatData[0]); + formatParams.add(date_1); + lsFormatParams.add(formatParams); + + formatParams = new ArrayList<>(); + formatParams.add(formatData[0]); + formatParams.add(formatData[1]); + lsFormatParams.add(formatParams); + + String resourceId = formatData[0]; + String kqdate = formatData[1]; + if(overtimeMap.containsKey(resourceId)){ + List tmp_overtimeList = overtimeMap.get(resourceId); + if(!tmp_overtimeList.contains(kqdate)){ + tmp_overtimeList.add(kqdate); + } + }else{ + if(!overtimeList.contains(kqdate)){ + overtimeList.add(kqdate); + } + overtimeMap.put(resourceId, overtimeList); + } + } + new KQFormatBiz().format(lsFormatParams); + + bb.writeLog("开始处理加班生成"); + //处理加班生成 + List tasks = new ArrayList<>(); + for(Map.Entry> mme: overtimeMap.entrySet()){ + String resid = mme.getKey(); + List overList = mme.getValue(); + for(String date : overList){ + SplitActionUtil.pushOverTimeTasks(date,date,resid,tasks); + } + } + if(!tasks.isEmpty()){ + KQQueue.writeTasks(tasks); + } + } } } catch (Exception e) { diff --git a/src/weaver/interfaces/hostar/job/AddOvertimeSignJob.java b/src/weaver/interfaces/hostar/job/AddOvertimeSignJob.java new file mode 100644 index 0000000..5ec8734 --- /dev/null +++ b/src/weaver/interfaces/hostar/job/AddOvertimeSignJob.java @@ -0,0 +1,168 @@ +package weaver.interfaces.hostar.job; + +import com.engine.hostar.util.HostarUtil; +import com.engine.kq.biz.KQGroupMemberComInfo; +import com.engine.kq.biz.KQHolidaySetBiz; +import com.engine.kq.biz.KQOvertimeRulesBiz; +import jdk.management.resource.ResourceId; +import org.apache.commons.lang3.StringUtils; +import org.apache.tools.ant.util.DateUtils; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.interfaces.schedule.BaseCronJob; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; +import java.util.*; + +public class AddOvertimeSignJob extends BaseCronJob { + + private String fromDate; + private String toDate; + + public String getFromDate() { + return fromDate; + } + + public String getToDate() { + return toDate; + } + + public void setFromDate(String fromDate) { + this.fromDate = fromDate; + } + + public void setToDate(String toDate) { + this.toDate = toDate; + } + BaseBean bb= new BaseBean(); + + @Override + public void execute() { + bb.writeLog("AddOvertimeSignJob Start"); + try { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + bb.writeLog("fromDate: " + fromDate); + bb.writeLog("toDate: " + toDate); + + if ( StringUtils.isBlank(fromDate) || StringUtils.isBlank(toDate)) { + toDate = DateUtils.format(new Date(), "yyyy-MM-dd"); + + LocalDate specifiedDate = LocalDate.parse(toDate, formatter); + + // 获取三天前的日期 + LocalDate threeDaysAgo = specifiedDate.minusDays(3); + fromDate = threeDaysAgo.format(formatter); + } + bb.writeLog("--fromDate: " + fromDate); + bb.writeLog("--toDate: " + toDate); + + RecordSet rs = new RecordSet(); + + String overtimeWorkflow = Util.null2String(bb.getPropValue("project_hostar", "overtimeWorkflow")); + bb.writeLog("overtimeWorkflow: " + overtimeWorkflow); + + if (StringUtils.isNotBlank(overtimeWorkflow)) { + HostarUtil hostarUtil = new HostarUtil(); + List allDates = hostarUtil.getAllDates(fromDate, toDate); + bb.writeLog("allDates: " + allDates); + + for (String date: allDates) { + List> overtimeInfo = new ArrayList<>(); + //获取加班流程 + String acqOvertimeSql = "select a.resourceId, a.fromDate, a.toDate, a.fromTime, a.toTime from " + overtimeWorkflow + " a " + + " left join workflow_requestbase b" + + " on b.requestid = a.requestid and b.currentnodetype = 3" + + " where a.fromDate = '" + date + "'"; + bb.writeLog("acqOvertimeSql: " + acqOvertimeSql); + rs.executeQuery(acqOvertimeSql); + while (rs.next()) { + String resourceId = Util.null2String(rs.getString("resourceId")); + String fromDate = Util.null2String(rs.getString("fromDate")); + String fromTime = Util.null2String(rs.getString("fromTime")); + String toDate = Util.null2String(rs.getString("toDate")); + String toTime = Util.null2String(rs.getString("toTime")); + if (StringUtils.isNotBlank(fromDate) && StringUtils.isNotBlank(toDate) && StringUtils.isNotBlank(resourceId)) { + if (toDate.compareTo(fromDate) > 0 ) { + KQOvertimeRulesBiz kb = new KQOvertimeRulesBiz(); + int changeType = kb.getChangeType(resourceId, fromDate); + bb.writeLog("changeType: " + changeType); + if (changeType == 2) { + Map temp = new HashMap<>(); + temp.put("resourceId", resourceId); + temp.put("fromDate", fromDate); + temp.put("fromTime", fromTime); + temp.put("toDate", toDate); + temp.put("toTime", toTime); + overtimeInfo.add(temp); + } + } + } + } + + bb.writeLog("overtimeInfo: " + overtimeInfo); + + //根据加班流程信息取打卡信息 + for ( Map info: overtimeInfo) { + String resourceId = Util.null2String(info.get("resourceId")); + String fromDate = Util.null2String(info.get("fromDate")); + String fromTime = Util.null2String(info.get("fromTime")); + String toDate = Util.null2String(info.get("toDate")); + String toTime = Util.null2String(info.get("toTime")); + + bb.writeLog("resourceId: " + resourceId + ", fromDate: " + fromDate + ", fromTime: " + fromTime + ", toDate: " + toDate + ", toTime: " + toTime); + // 将字符串时间转换为LocalDateTime对象 + if (toTime.length() == 5) { + toTime = toTime + ":00"; + } + LocalDateTime dateTime = LocalDateTime.parse(toDate + " " + toTime, formatter2); + + // 获取指定时间前后三小时的时间范围 + LocalDateTime startDateTimeL = dateTime.minus(3, ChronoUnit.HOURS); + LocalDateTime endDateTimeL = dateTime.plus(3, ChronoUnit.HOURS); + + String startDateTime = startDateTimeL.format(formatter2); + bb.writeLog("startDateTime: " + startDateTime); + + String endDateTime = endDateTimeL.format(formatter2); + bb.writeLog("endDateTime: " + endDateTime); + + Integer number = -1; + String acqSignSql = "select count(*) as number from hrmschedulesign " + + " where signdate + ' '+signTime >='"+startDateTime+"' and signdate + ' '+signTime <='"+endDateTime+"' " + + " and userid = ? and signtype = 2 "; + bb.writeLog("--acqSignSql: " + acqSignSql); + rs.executeQuery(acqSignSql, resourceId); + while (rs.next()) { + number = Util.getIntValue(Util.null2String(rs.getString("number"))); + } + bb.writeLog("number: " + number); + + if (number > 0) { + //插入0点打卡 + String addSignSql = "insert into hrmschedulesign (userId,userType,signType,signDate,signTime,isInCom,signfrom,timeZone,belongDate) " + + " values (?,?,?,?,?,?,?,?,?)"; + boolean b = rs.executeUpdate(addSignSql, resourceId, "1", "2", toDate, "00:00:00", "1", "e9pc", "GMT+8", toDate); + bb.writeLog("插入0点打卡: " + b); + } else { + bb.writeLog("没有在指定时间范围内打下班卡,无法插入0点卡"); + } + + } + + } + + } else { + bb.writeLog("没有设置加班流程"); + } + }catch (Exception e) { + bb.writeLog("AddOvertimeSignJob Exception: " + e); + } + } + +}