package com.engine.hostar.thread; import com.alibaba.fastjson.JSONObject; import com.engine.hostar.util.HostarUtil; import com.engine.kq.biz.KQFormatSignData; import com.engine.kq.biz.KQGroupMemberComInfo; import com.engine.kq.biz.KQLeaveRulesComInfo; import com.engine.kq.biz.KQOvertimeRulesBiz; import com.engine.kq.biz.KQShiftRuleInfoBiz; import com.engine.kq.biz.KQTimesArrayComInfo; import com.engine.kq.biz.KQWorkTime; import com.engine.kq.biz.chain.shiftinfo.ShiftInfoBean; import com.engine.kq.cmd.shiftmanagement.toolkit.ShiftManagementToolKit; import com.engine.kq.entity.TimeScopeEntity; import com.engine.kq.entity.WorkTimeEntity; import com.engine.kq.util.KQDurationCalculatorUtil; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import org.apache.commons.lang3.StringUtils; import org.springframework.util.CollectionUtils; import weaver.conn.RecordSet; import weaver.formmode.setup.ModeRightInfo; import weaver.general.BaseBean; import weaver.general.InitServer; import weaver.general.Util; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.UUID; /** * @version 1.0 * @Title ecology-9 * @Company 泛微软件 * @CreateDate 2024/3/12 * @Description 处理餐补数据 * @Author AdminZm */ public class HandleCBDataThread extends BaseBean implements Runnable{ BaseBean baseBean = new BaseBean(); private String userId; private String kqDate; private Set zrzbcSet; private Set pbzbcSet; private List removeRes; private List nightShiftList; private List noRes; private static DecimalFormat df = new DecimalFormat("0.00"); private DecimalFormatSymbols symbols = new DecimalFormatSymbols(); // public HandleCBDataThread(String userId, String kqDate) { // this.userId = userId; // this.kqDate = kqDate; // } public HandleCBDataThread(String userId, String kqDate, Set zrzbcSet, Set pbzbcSet, List removeRes, List nightShiftList, List noRes) { this.userId = userId; this.kqDate = kqDate; this.zrzbcSet = zrzbcSet; this.pbzbcSet = pbzbcSet; this.removeRes = removeRes; this.nightShiftList = nightShiftList; this.noRes = noRes; } @Override public void run() { baseBean.writeLog("HandleCBDataThread:" + userId + "、" + kqDate); try { RecordSet rs = new RecordSet(); // 判断该条数据是否人工调整,是人工调整则不更新 int cnt = 0; rs.executeQuery("SELECT count(*) as cnt FROM uf_cbxxjlb where xm = ? and rq = ? and sfrgdz = 0", userId, kqDate); if (rs.next()) { cnt = rs.getInt("cnt"); } if (cnt > 0) { return; } // 判断是否关账, 关账则不更新 int userSubCompany1 = 0; int userDepartment = 0; if (userSubCompany1 <= 0 || userDepartment <= 0) { rs.execute("select departmentid, subcompanyid1 from hrmresource where id = " + userId); if (rs.next()) { userSubCompany1 = rs.getInt("subcompanyid1"); userDepartment = rs.getInt("departmentid"); } } String gzSql = "select count(*) as cnt from uf_kqfz where (','+CAST(bm AS varchar(max))+',' like '%,'+CAST("+userDepartment+" AS varchar(10))+',%' " + "or ','+CAST(fb AS varchar(max))+',' like '%,'+CAST("+userSubCompany1+" AS varchar(10))+',%') and fczt = 1 and fzksrq <= '" + kqDate +"' and fzjsrq >= '" + kqDate + "'"; rs.execute(gzSql); int cntTemp = 0; if (rs.next()) { cntTemp = rs.getInt("cnt"); } if (cntTemp > 0) { return; } //获取加班时长 Map dailyFlowOverTimeData = getDailyFlowOverTimeDataAllowance(userId, kqDate); baseBean.writeLog("HandleCBDataThread dailyFlowOverTimeData:" + JSONObject.toJSONString(dailyFlowOverTimeData)); KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo(); //先获取到实际打卡时长 Map signminsMap = new HashMap<>(); Map attendanceMinsMap = new HashMap<>(); String acqAttenSql = " select resourceid, attendancemins, kqdate,signmins from kq_format_total where resourceid in (" + userId + ") and kqdate >='" + kqDate + "' and kqdate <='" + kqDate + "'"; rs.executeQuery(acqAttenSql); while (rs.next()) { String resourceid = Util.null2String(rs.getString("resourceid")); Double attendancemins = Util.getDoubleValue(Util.null2String(rs.getString("attendancemins"))); Double signmins = Util.getDoubleValue(Util.null2String(rs.getString("signmins"))); String kqdate = Util.null2String(rs.getString("kqdate")); if (signmins >= 0.00 ) { signminsMap.put(resourceid+"|"+kqdate, signmins); } if (attendancemins >= 0.00 ) { attendanceMinsMap.put(resourceid+"|"+kqdate, attendancemins); } } String groupId = kqGroupMemberComInfo.getKQGroupId(userId, kqDate); // 获取考勤二开--夜班补助 String nightShiftSubsidy = getNightShiftSubsidy(userId, kqDate, nightShiftList, dailyFlowOverTimeData, signminsMap, attendanceMinsMap, groupId, zrzbcSet, pbzbcSet); baseBean.writeLog("nightShiftSubsidy:" + nightShiftSubsidy); if (StringUtils.isEmpty(nightShiftSubsidy)) { nightShiftSubsidy = "0"; } // 获取考勤二开--鸿仁驻点餐补 String otherStatAllowance = getOtherStatAllowance(userId, kqDate, dailyFlowOverTimeData, signminsMap, attendanceMinsMap, removeRes); baseBean.writeLog("otherStatAllowance:" + otherStatAllowance); if (StringUtils.isEmpty(otherStatAllowance)) { otherStatAllowance = "0"; } // 考勤二开--精密夜班餐补 String nightAllowance = getNightAllowance(userId, kqDate, dailyFlowOverTimeData, signminsMap, attendanceMinsMap, nightShiftList); baseBean.writeLog("nightAllowance:" + nightAllowance); if (StringUtils.isEmpty(nightAllowance)) { nightAllowance = "0"; } // 考勤二开--驻点餐补 String statAllowance = getStatAllowance(userId, kqDate, dailyFlowOverTimeData, signminsMap, attendanceMinsMap, noRes); baseBean.writeLog("statAllowance:" + statAllowance); if (StringUtils.isEmpty(statAllowance)) { statAllowance = "0"; } // 考勤二开--出差餐补 String mealAllowance = getMealAllowance(userId, kqDate); if (!(StringUtils.equals(statAllowance, "0") && StringUtils.equals(otherStatAllowance, "0"))) { mealAllowance = "0"; } baseBean.writeLog("mealAllowance:" + mealAllowance); if (StringUtils.isEmpty(mealAllowance)) { mealAllowance = "0"; } // 考勤二开--零点补助 String zeropoint = getZeroBt(userId, kqDate, nightShiftList); baseBean.writeLog("zeropoint:" + zeropoint); if (StringUtils.isEmpty(zeropoint)) { zeropoint = "0"; } // 考勤二开--夜班餐补_白班 String ybcbbb = getNightShiftSubsidyBb(userId, kqDate, nightShiftList, dailyFlowOverTimeData, signminsMap, attendanceMinsMap, groupId, zrzbcSet, pbzbcSet); baseBean.writeLog("ybcbbb:" + ybcbbb); if (StringUtils.isEmpty(ybcbbb)) { ybcbbb = "0"; } rs.executeQuery("select id from uf_cbxxjlb where xm = ? and rq = ?", userId, kqDate); RecordSet rs1 = new RecordSet(); String cbxxjlModeId = rs1.getPropValue("hostar_zm_prop", "cbxxjl_modeid"); if (rs.next()) { int cbxxjlId = rs.getInt("id"); SimpleDateFormat dtFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 String nowDateTime = dtFormat.format(new Date()); rs1.executeUpdate("update uf_cbxxjlb set hrzdcb = ?, jmybcb = ?, zdcb = ?, ybbz = ?, cccb = ?, ldbz = ?, ybcbbb = ?, modedatamodifydatetime = ? where id = ?", otherStatAllowance, nightAllowance, statAllowance, nightShiftSubsidy, mealAllowance, zeropoint, ybcbbb, nowDateTime, cbxxjlId); //权限重构 ModeRightInfo ModeRightInfo = new ModeRightInfo(); ModeRightInfo.setNewRight(true); ModeRightInfo.editModeDataShare(1, Integer.parseInt(cbxxjlModeId), cbxxjlId); } else { String uuidT = UUID.randomUUID().toString(); SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式 SimpleDateFormat sdfTime = new SimpleDateFormat("HH:mm:ss");//设置日期格式 String nowDate = sdfDate.format(new Date()); String nowTime = sdfTime.format(new Date()); String gh = null; String bm = null; rs1.executeQuery("SELECT workcode, departmentid from hrmresource where id = ?", userId); if (rs1.next()) { gh = rs1.getString("workcode"); bm = rs1.getString("departmentid"); } rs1.executeUpdate("insert into uf_cbxxjlb (xm, rq, gh, bm, hrzdcb, jmybcb, zdcb, ybbz, cccb, ldbz, ybcbbb, formmodeid, MODEUUID, " + "modedatacreater, modedatacreatertype, modedatacreatedate, modedatacreatetime) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ,? ,?, ?, ?)", userId, kqDate, gh, bm, otherStatAllowance, nightAllowance, statAllowance, nightShiftSubsidy, mealAllowance, zeropoint, ybcbbb, cbxxjlModeId, uuidT, "1", "0", nowDate, nowTime); RecordSet qxcgRs = new RecordSet(); qxcgRs.execute("select id from uf_cbxxjlb where MODEUUID = '" + uuidT + "'"); Integer idT = 0; while (qxcgRs.next()) { idT = qxcgRs.getInt("id"); } //权限重构 ModeRightInfo ModeRightInfo = new ModeRightInfo(); ModeRightInfo.setNewRight(true); ModeRightInfo.editModeDataShare(1, Integer.parseInt(cbxxjlModeId), idT); } } catch (Exception e) { baseBean.writeLog("HandleCBDataThread error:" + e.getMessage()); } } public Map getDailyFlowOverTimeDataAllowance(String userId, String kqDate){ BaseBean bb = new BaseBean(); Map datas = new HashMap<>();; RecordSet rs = new RecordSet(); String sql = ""; String sqlWhere = " "; try{ if(userId.length()>0){ sqlWhere +=" and a.id in("+userId+") "; } KQOvertimeRulesBiz kqOvertimeRulesBiz = new KQOvertimeRulesBiz(); int uintType = kqOvertimeRulesBiz.getMinimumUnit();//当前加班单位 sql = " select resourceid,changeType,belongdate,paidLeaveEnable, sum(cast(duration_min as decimal(18,4))) as val "+ " from hrmresource a, kq_flow_overtime b "+ " where a.id = b.resourceid and belongdate >='"+kqDate+"' and belongdate <='"+kqDate+"' " +sqlWhere+ " group by resourceid,changeType,paidLeaveEnable,belongdate "; rs.execute(sql); while (rs.next()) { String resourceid = rs.getString("resourceid"); String belongdate = rs.getString("belongdate"); String paidLeaveEnable = rs.getString("paidLeaveEnable"); int changeType =rs.getInt("changeType");//1-节假日、2-工作日、3-休息日 double value = rs.getDouble("val")<0?0:rs.getDouble("val"); if(uintType==3 || uintType== 5 || uintType== 6){//按小时计算 value = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(value+"")); }else{//按天计算 value = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(value+"")); } String flowType = ""; if(changeType==1){ flowType = "holidayOvertime"; }else if(changeType==2){ flowType = "workingDayOvertime"; }else if(changeType==3){ flowType = "restDayOvertime"; } if("1".equalsIgnoreCase(paidLeaveEnable)){ //1表示关联调休 flowType += "_4leave"; }else{ //0表示不关联调休 flowType += "_nonleave"; } //df.format 默认是不四舍五入的 0.125这样的就会直接变成0.12了 symbols.setDecimalSeparator('.'); df.setMaximumFractionDigits(5); df.setDecimalFormatSymbols(symbols); datas.put(resourceid+"|"+belongdate+"|"+flowType, df.format(value)); } }catch (Exception e){ bb.writeLog("getDailyFlowOverTimeDataAllowance error:" + e.getMessage()); } return datas; } public String getZeroBt(String userId, String kqDate, List nightShiftList) { BaseBean bb = new BaseBean(); RecordSet rs = new RecordSet(); String value = "0"; try { //获取当天班次 KQWorkTime kqWorkTime = new KQWorkTime(); WorkTimeEntity workTime = kqWorkTime.getWorkTime(userId, kqDate); String bc = workTime.getSerialId(); if (StringUtils.isEmpty(bc)) { return value; } int serialid = Integer.parseInt(bc); if (serialid > 0) { if ((!CollectionUtils.isEmpty(nightShiftList)) && nightShiftList.contains(String.valueOf(serialid))) { value = "0"; } else { rs.executeQuery("select zeropoint from kq_format_total where resourceid = ? and kqdate = ?", userId, kqDate); if (rs.next()) { value = rs.getString("zeropoint"); } } } else { value = "0"; } } catch (Exception e) { bb.writeLog("get ZeroBt error:" + e.getMessage()); } return value; } public String getNightShiftSubsidy(String userId, String kqDate, List nightShiftList, Map dailyFlowOverTimeData, Map signminsMap, Map attendanceMinsMap, String groupId, Set zrzbcSet, Set pbzbcSet) { BaseBean bb = new BaseBean(); String value = ""; try { if (nightShiftList != null & nightShiftList.size() > 0) { KQWorkTime kqWorkTime = new KQWorkTime(); WorkTimeEntity workTime = kqWorkTime.getWorkTime(userId, kqDate); String bc = workTime.getSerialId(); if (StringUtils.isEmpty(bc)) { return "0"; } int serialid = Integer.parseInt(bc); bb.writeLog("getNightShiftSubsidy serialid:" + serialid); if (serialid > 0) { if ( !nightShiftList.contains(String.valueOf(serialid))) { return "0"; } } else { return "0"; } bb.writeLog("getNightShiftSubsidy groupId:" + groupId); if ((!CollectionUtils.isEmpty(pbzbcSet)) && pbzbcSet.contains(groupId)) { double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|workingDayOvertime_4leave"))); workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave; double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|restDayOvertime_4leave"))); restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave; double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|holidayOvertime_4leave"))); holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave; double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|workingDayOvertime_nonleave"))); workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave; double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|restDayOvertime_nonleave"))); restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave; double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|holidayOvertime_nonleave"))); holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave; double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave + workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave; Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(userId + "|" + kqDate))); value = (Math.floor(((attendanceMins < 0.00 ? 0.00 : attendanceMins) + temp) / 60) >= 8.00) ? "1" : "0"; } if ((!CollectionUtils.isEmpty(zrzbcSet)) && zrzbcSet.contains(groupId)) { Double signmins = Util.getDoubleValue(Util.null2String(signminsMap.get(userId + "|" + kqDate))); value = (( signmins / 60) >= 9.00 ) ? "1" : "0"; } } } catch (Exception e) { bb.writeLog("get NightShiftSubsidy error:" + e.getMessage()); } return value; } public String getNightShiftSubsidyBb(String userId, String kqDate, List nightShiftList, Map dailyFlowOverTimeData, Map signminsMap, Map attendanceMinsMap, String groupId, Set zrzbcSet, Set pbzbcSet) { BaseBean bb = new BaseBean(); String value = ""; try { KQWorkTime kqWorkTime = new KQWorkTime(); WorkTimeEntity workTime = kqWorkTime.getWorkTime(userId, kqDate); String bc = workTime.getSerialId(); if (StringUtils.isEmpty(bc)) { return "0"; } int serialid = Integer.parseInt(bc); bb.writeLog("getNightShiftSubsidyBb serialid:" + serialid); if (serialid <= 0) { return "0"; } if (CollectionUtils.isEmpty(nightShiftList) || !nightShiftList.contains(String.valueOf(serialid))) { if ((!CollectionUtils.isEmpty(pbzbcSet)) && pbzbcSet.contains(groupId)) { double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|workingDayOvertime_4leave"))); workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave; double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|restDayOvertime_4leave"))); restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave; double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|holidayOvertime_4leave"))); holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave; double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|workingDayOvertime_nonleave"))); workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave; double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|restDayOvertime_nonleave"))); restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave; double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|holidayOvertime_nonleave"))); holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave; double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave + workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave; Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(userId + "|" + kqDate))); RecordSet rs = new RecordSet(); String appointBc = rs.getPropValue("hostar_zm_prop", "night_shift_appoint_bc"); double floor = Math.floor(((attendanceMins < 0.00 ? 0.00 : attendanceMins) + temp) / 60); if (StringUtils.isEmpty(appointBc)) { if (floor >= 19.00) { value = "2"; } if (floor < 19.00 && floor >= 14.00) { value = "1"; } } else { List appointBcList = Arrays.asList(appointBc.split(",")); if (appointBcList.contains(bc)) { if (floor >= 15.00) { value = "2"; } if (floor < 15.00 && floor >= 10.00) { value = "1"; } } else { ShiftManagementToolKit shiftManagementToolKit = new ShiftManagementToolKit(); String shiftOnOffWorkSections = shiftManagementToolKit.getShiftOnOffWorkSections(bc, 7); if (StringUtils.isEmpty(shiftOnOffWorkSections) || !shiftOnOffWorkSections.contains("夜班")) { if (floor >= 19.00) { value = "2"; } if (floor < 19.00 && floor >= 14.00) { value = "1"; } } } } } } } catch (Exception e) { bb.writeLog("get getNightShiftSubsidyBb error:" + e.getMessage()); } return value; } public String getOtherStatAllowance(String userId, String kqDate, Map dailyFlowOverTimeData, Map signminsMap, Map attendanceMinsMap, List removeRes) { BaseBean bb = new BaseBean(); RecordSet rs = new RecordSet(); String value = ""; String sqlWhere = " "; try { if(userId.length()>0){ sqlWhere +=" and a.id in("+userId+") "; } String otherstatsub = Util.null2String(bb.getPropValue("project_hostar", "otherstatsubcompany")); if (StringUtils.isNotBlank(otherstatsub)) { //查询该分部下的人员 List resIds = new ArrayList<>(); sqlWhere += " and a.subcompanyid1 in (" + otherstatsub + ") "; String acqResSql = "select a.id from hrmresource a where 1=1 " + 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); } } KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo(); if (resIds != null && resIds.size() > 0 && StringUtils.isNotBlank(kqDate)) { if ( removeRes != null && removeRes.size() > 0 ) { resIds.removeIf(removeRes::contains); } for (String res : resIds) { //获取考勤打卡 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, kqDate); String preDate = weaver.common.DateUtil.addDate(kqDate, -1);//上一天日期 String nextDate = weaver.common.DateUtil.addDate(kqDate, 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()); int workBeginIdx = kqTimesArrayComInfo.getArrayindexByTimes(workBeginTime); String workEndTime = Util.null2String(workTimeScope.getEndTime()); int workEndIdx = kqTimesArrayComInfo.getArrayindexByTimes(workEndTime); boolean workEndTimeAcross = workTimeScope.getEndTimeAcross(); if (oneSign) { //个性化设置只支持一天一次上下班 ShiftInfoBean shiftInfoBean = new ShiftInfoBean(); shiftInfoBean.setSplitDate(kqDate); 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 = new KQFormatSignData().getSignInfo(res, signTimeScope, workTimeScope, kqDate, preDate, nextDate, kqTimesArrayComInfo, hostIps, uuid, shiftCount, shiftI); } 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); } } } Integer signNumber = 0; if (signIdList !=null && signIdList.size() > 0) { String acqShowAddress = "select showaddress,addr,signfrom 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")); String signfrom = Util.null2String(rs.getString("signfrom")); if (StringUtils.isEmpty(signfrom) || !StringUtils.equals(signfrom, "e9mobile")) { signNumber = signNumber + 1; } String addr = Util.null2String(rs.getString("addr")); if ("鸿仕达".equals(showaddress) || "hostar".equalsIgnoreCase(showaddress) || "鸿仕达".equals(addr) || "hostar".equalsIgnoreCase(addr)) { signNumber = signNumber + 1; } if (StringUtils.isNotEmpty(showaddress) && (showaddress.contains("鸿仕达") || showaddress.toLowerCase().contains("hostar"))) { signNumber = signNumber + 1; } if (StringUtils.isNotEmpty(addr) && (addr.contains("鸿仕达") || addr.toLowerCase().contains("hostar"))) { signNumber = signNumber + 1; } if (StringUtils.isNotEmpty(showaddress) && (showaddress.contains("台湾") || showaddress.contains("越南") || showaddress.toLowerCase().contains("hostar") || showaddress.toLowerCase().contains("vinh") || showaddress.toLowerCase().contains("ha noi"))) { signNumber = signNumber + 1; } if (StringUtils.isNotEmpty(addr) && (addr.contains("台湾") || addr.contains("越南") || addr.toLowerCase().contains("hostar") || addr.toLowerCase().contains("vinh") || addr.toLowerCase().contains("ha noi"))) { signNumber = signNumber + 1; } } } String groupId = kqGroupMemberComInfo.getKQGroupId(res, kqDate); if (signNumber == 0) { double minValue = 0.00; // if ((!CollectionUtils.isEmpty(pbzbcSet)) && pbzbcSet.contains(groupId)) { double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_4leave"))); workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave; double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_4leave"))); restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave; double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_4leave"))); holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave; double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_nonleave"))); workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave; double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_nonleave"))); restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave; double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_nonleave"))); holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave; double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave + workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave; Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + kqDate))); if (attendanceMins < 0.00) { attendanceMins = 0.00; } minValue = attendanceMins + temp; double v = Math.round (Math.max(minValue, 0.00)) / 60.00; value = "0"; if (v >= 4.00 && v < 9.00) { value = "1"; } else if (v >= 9.00) { value = "2"; } } } } } } catch (Exception e) { bb.writeLog("get OtherStatAllowance error:" + e.getMessage()); } return value; } public String getNightAllowance(String userId, String kqDate, Map dailyFlowOverTimeData, Map signminsMap, Map attendanceMinsMap, List nightShiftList){ BaseBean bb = new BaseBean(); String value = ""; RecordSet rs = new RecordSet(); String sql = ""; String sqlWhere = " "; try { if(userId.length()>0){ sqlWhere +=" and a.id in("+userId+") "; } 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 1=1 " + 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); } } if (resIds != null && resIds.size() > 0) { KQWorkTime kqWorkTime = new KQWorkTime(); for (String res : resIds) { //获取当天班次 WorkTimeEntity workTime = kqWorkTime.getWorkTime(userId, kqDate); String bc = workTime.getSerialId(); if (StringUtils.isEmpty(bc)) { continue; } int serialid = Integer.parseInt(bc); if (serialid > 0) { if (!nightShiftList.contains(String.valueOf(serialid))) { continue; } } else { continue; } double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_4leave"))); workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave; double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_4leave"))); restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave; double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_4leave"))); holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave; double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_nonleave"))); workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave; double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_nonleave"))); restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave; double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_nonleave"))); holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave; double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave + workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave; Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + kqDate))); value = String.valueOf(Math.floor(((attendanceMins < 0.00 ? 0.00 : attendanceMins) + temp) / 300)); } } } } } catch (Exception e) { bb.writeLog("get NightAllowance error:" + e.getMessage()); } return value; } public String getStatAllowance(String userId, String kqDate, Map dailyFlowOverTimeData, Map signminsMap, Map attendanceMinsMap, List noRes) { BaseBean bb = new BaseBean(); String value = "0"; RecordSet rs = new RecordSet(); String sql = ""; String sqlWhere = " "; try { if(userId.length()>0){ sqlWhere +=" and a.id in("+userId+") "; } //首先去除指定不享有的分部 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); } } String subComoanys = ""; if ( subComoanyList != null && subComoanyList.size() > 0) { subComoanys = String.join(",", subComoanyList); } if (StringUtils.isNotBlank(subComoanys)) { sqlWhere += " and a.subcompanyid1 not in ("+subComoanys+") "; } 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 1=1 " + 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(kqDate)) { KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo(); // 获取享受的考勤组 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 "0"; } for (String res: resIds) { //判断考勤组 /*获取考勤组的ID,因为考勤组有有效期,所以需要传入日期*/ String groupId = kqGroupMemberComInfo.getKQGroupId(userId, kqDate); 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<>(); KQWorkTime kqWorkTime = new KQWorkTime(); kqWorkTime.setIsFormat(true); WorkTimeEntity workTime = kqWorkTime.getWorkTime(res, kqDate); String preDate = weaver.common.DateUtil.addDate(kqDate, -1);//上一天日期 String nextDate = weaver.common.DateUtil.addDate(kqDate, 1);//下一天日期 if (workTime != null) { lsSignTime = workTime.getSignTime();//允许打卡时间 lsWorkTime = workTime.getWorkTime();//工作时间 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()); int workBeginIdx = kqTimesArrayComInfo.getArrayindexByTimes(workBeginTime); String workEndTime = Util.null2String(workTimeScope.getEndTime()); int workEndIdx = kqTimesArrayComInfo.getArrayindexByTimes(workEndTime); boolean workEndTimeAcross = workTimeScope.getEndTimeAcross(); if(oneSign){ //个性化设置只支持一天一次上下班 ShiftInfoBean shiftInfoBean = new ShiftInfoBean(); shiftInfoBean.setSplitDate(kqDate); 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 = new KQFormatSignData().getSignInfo(res,signTimeScope,workTimeScope,kqDate,preDate,nextDate,kqTimesArrayComInfo,hostIps,uuid,shiftCount,shiftI); } 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,addr,signfrom 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")); String signfrom = Util.null2String(rs.getString("signfrom")); if (StringUtils.isEmpty(signfrom) || !StringUtils.equals(signfrom, "e9mobile")) { signNumber = signNumber + 1; } String addr = Util.null2String(rs.getString("addr")); if ("鸿仕达".equals(showaddress) || "hostar".equalsIgnoreCase(showaddress) || "鸿仕达".equals(addr) || "hostar".equalsIgnoreCase(addr)) { signNumber = signNumber + 1; } if (StringUtils.isNotEmpty(showaddress) && (showaddress.contains("鸿仕达") || showaddress.toLowerCase().contains("hostar"))) { signNumber = signNumber + 1; } if (StringUtils.isNotEmpty(addr) && (addr.contains("鸿仕达") || addr.toLowerCase().contains("hostar"))) { signNumber = signNumber + 1; } if (StringUtils.isNotEmpty(showaddress) && (showaddress.contains("台湾") || showaddress.contains("越南") || showaddress.toLowerCase().contains("hostar") || showaddress.toLowerCase().contains("vinh") || showaddress.toLowerCase().contains("ha noi"))) { signNumber = signNumber + 1; } if (StringUtils.isNotEmpty(addr) && (addr.contains("台湾") || addr.contains("越南") || addr.toLowerCase().contains("hostar") || addr.toLowerCase().contains("vinh") || addr.toLowerCase().contains("ha noi"))) { signNumber = signNumber + 1; } } } if (signNumber == 0 ) { // if ((!CollectionUtils.isEmpty(pbzbcSet)) && pbzbcSet.contains(groupId)) { double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_4leave"))); workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave; double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_4leave"))); restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave; double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_4leave"))); holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave; double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_nonleave"))); workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave; double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_nonleave"))); restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave; double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_nonleave"))); holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave; double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave + workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave; Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + kqDate))); value = String.valueOf(Math.floor(((attendanceMins < 0.00 ? 0.00 : attendanceMins) + temp) / 300)); // } // if ((!CollectionUtils.isEmpty(zrzbcSet)) && zrzbcSet.contains(groupId)) { // Double signmins = Util.getDoubleValue(Util.null2String(signminsMap.get(res + "|" + kqDate))); // value = String.valueOf(Math.floor((signmins < 0.00 ? 0.00 : signmins) / 360)); // } } } } } catch (Exception e) { bb.writeLog("get StatAllowance error:" + e.getMessage()); } return value; } public String getMealAllowance(String id, String kqDateA) { BaseBean bb = new BaseBean(); String value = "0"; RecordSet rs = new RecordSet(); String sql = ""; try { // 首先获取出差公出流程信息 String evectionTableName = Util.null2String(bb.getPropValue("project_hostar","evectionTableName")); sql = " select a.* from (" + "select id, requestid, jd as longitude, wd as latitude from " + evectionTableName + " WHERE (sjccr = '" + id + "' or ','+CAST(nbtxr AS varchar(max))+',' like '%,'+CAST("+id+" AS varchar(10))+',%') " + " and ksrq <='" + kqDateA + "' and (((sjjsrq is null or sjjsrq = '') and yjjsrq >= '" + kqDateA + "') or (sjjsrq is not null and sjjsrq != '' and sjjsrq >= '" + kqDateA + "'))" + ") a, workflow_requestbase b WHERE a.requestId = b.requestId and b.currentnodetype != 0"; bb.writeLog("sql: " + sql); boolean isGoing = false; rs.execute(sql); while (rs.next()) { isGoing = true; } Map< String, Map> lsCheckInfo = new HashMap<>(); List> legWorkInfos = new ArrayList<>(); // 解析日期字符串为LocalDate对象 LocalDate date = LocalDate.parse(kqDateA, DateTimeFormatter.ISO_DATE); // 获取后一天的日期 LocalDate nextDay = date.plusDays(1); // 将后一天的日期转换为字符串 String kqDateB = nextDay.format(DateTimeFormatter.ISO_DATE); String dateParamA = kqDateA + " 05:00:00"; String dateParamB = kqDateB + " 04:59:59"; if (isGoing) { // String acqLegWorkSignSql = "select operate_time, longitude, latitude,address from mobile_sign where operater = ? and operate_date = '" + kqDateA + "' order by operate_time asc "; String acqLegWorkSignSql = "select operate_time, longitude, latitude,address,operate_date,CONCAT(operate_date, ' ', operate_time) as dateTimeNew from mobile_sign " + "where operater = ? and CAST(operate_date + ' ' + operate_time AS datetime) >= CAST('" + dateParamA+ "' AS datetime) " + "and CAST(operate_date + ' ' + operate_time AS datetime) <= CAST('" + dateParamB + "' AS datetime) "; rs.executeQuery(acqLegWorkSignSql, id); while ( rs.next()) { String operateTime = Util.null2String(rs.getString("operate_time")); String longitude = Util.null2String(rs.getString("longitude")); String latitude = Util.null2String(rs.getString("latitude")); String address = Util.null2String(rs.getString("address")); String dateTimeNew = Util.null2String(rs.getString("dateTimeNew")); if ("hostar".equalsIgnoreCase(address) || "鸿仕达".equals(address) || "增善路".equals(address) || "星圃路".equals(address) || "智慧新城".equals(address)) { continue; } if (StringUtils.isNotEmpty(address) && (address.contains("鸿仕达") || address.contains("增善路") || address.contains("星圃路") || address.contains("智慧新城") || address.toLowerCase().contains("hostar"))) { continue; } if (StringUtils.isNotEmpty(address) && (address.contains("台湾") || address.contains("越南") || address.toLowerCase().contains("hostar") || address.toLowerCase().contains("vinh") || address.toLowerCase().contains("ha noi"))) { continue; } // if ( StringUtils.isNotBlank(operateTime) && StringUtils.isNotBlank(longitude) && StringUtils.isNotBlank(latitude) ) { if ( StringUtils.isNotBlank(operateTime)) { Map temp = new HashMap<>(); temp.put("operateTime", operateTime); temp.put("longitude", longitude); temp.put("latitude", latitude); temp.put("dateTimeNew", dateTimeNew); legWorkInfos.add(temp); } } if (legWorkInfos != null && legWorkInfos.size() > 1 ) { String tempSignIn = ""; String tempSignInDateTime = ""; String tempSignOutDateTime = ""; String tempSignInLatitude = ""; String tempSignInLongitude = ""; String tempSignOutLatitude = ""; String tempSignOutLongitude = ""; String tempSignOut = ""; Map checkInfo = new HashMap<>(); for ( Map temp : legWorkInfos) { String operateTime = Util.null2String(temp.get("operateTime")); String longitude = Util.null2String(temp.get("longitude")); String latitude = Util.null2String(temp.get("latitude")); String dateTimeNew = Util.null2String(temp.get("dateTimeNew")); if (StringUtils.isBlank(tempSignIn)) { tempSignIn = operateTime; tempSignInLatitude = latitude; tempSignInLongitude = longitude; tempSignInDateTime = dateTimeNew; } else { if ( dateTimeNew.compareTo(tempSignInDateTime) < 0 ) { tempSignIn = operateTime; tempSignInLatitude = latitude; tempSignInLongitude = longitude; tempSignInDateTime = dateTimeNew; } } if (StringUtils.isBlank(tempSignOut)) { tempSignOut = operateTime; tempSignOutDateTime = dateTimeNew; tempSignOutLatitude = latitude; tempSignOutLongitude = longitude; } else { if ( dateTimeNew.compareTo(tempSignOutDateTime) > 0 ) { tempSignOut = operateTime; tempSignOutDateTime = dateTimeNew; tempSignOutLatitude = latitude; tempSignOutLongitude = longitude; } } } // } checkInfo.put("signDate", kqDateA);//签到签退日期 checkInfo.put("signInTime", tempSignIn);//签到时间 checkInfo.put("signInDateTime", tempSignInDateTime);//签到日期时间 checkInfo.put("signInLatitude", tempSignInLatitude);//签到纬度 checkInfo.put("signInLongitude", tempSignInLongitude);//签到经度 checkInfo.put("signOutTime", tempSignOut);//签退时间 checkInfo.put("signOutDateTime", tempSignOutDateTime);//签退日期时间 checkInfo.put("signOutLatitude", tempSignOutLatitude);//签退纬度 checkInfo.put("signOutLongitude", tempSignOutLongitude);//签退经度 lsCheckInfo.put(id + "|" + kqDateA, checkInfo); } } HostarUtil hostarUtil = new HostarUtil(); String MealAlloTableName = Util.null2String(bb.getPropValue("project_hostar", "MealAllowanceTableName")); // 定义日期格式 DateTimeFormatter formatterRq = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // 定义时间格式 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss"); 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")); String endTime = Util.null2String(rs.getString("endTime")); Map temp = new HashMap<>(); temp.put("startTime",startTime); temp.put("endTime",endTime); MealMap.add(temp); } // bb.writeLog("MealMap: " + MealMap); //根据外勤打卡数据计算餐补数据 for (String key: lsCheckInfo.keySet()) { // String[] split = key.split("\\|"); // String userId = split[0]; // String kqDate = split[1]; Map temp = lsCheckInfo.get(key); String signInTime = Util.null2String(temp.get("signInTime")); String signOutTime = Util.null2String(temp.get("signOutTime")); String signInDateTime = Util.null2String(temp.get("signInDateTime")); String signOutDateTime = Util.null2String(temp.get("signOutDateTime")); String signDate = Util.null2String(temp.get("signDate")); if (StringUtils.isNotBlank(signInTime) && StringUtils.isNotBlank(signOutTime) ) { for (Map me: MealMap) { String startTime = me.get("startTime"); String startDateTime = ""; String endTime = me.get("endTime"); String endDateTime = ""; if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) { startTime = startTime + ":00"; endTime = endTime + ":00"; String signDateNew = signDate; // 判断时间 LocalTime t1 = LocalTime.parse(startTime, formatter); LocalTime t2 = LocalTime.parse(endTime, formatter); if (t2.isBefore(t1)) { LocalDate dateToday = LocalDate.parse(signDateNew, formatterRq); // 加一天 LocalDate nextDayNew = dateToday.plusDays(1); signDateNew = nextDayNew.format(formatterRq); } startDateTime = signDate + " " + startTime; endDateTime = signDateNew + " " + endTime; } if ( (signInDateTime.compareTo(startDateTime) <= 0) && (signOutDateTime.compareTo(endDateTime) >= 0) ) { if (StringUtils.isEmpty(value) || StringUtils.equals(value, "0")) { value = "1"; } else { int valueT = Integer.parseInt(value) + 1; value = String.valueOf(valueT); } } } } } } } catch (Exception e) { bb.writeLog("get MealAllowance error:" + e.getMessage()); } return value; } }