考勤上线后问题处理

dev-chenwnj
chenwei 1 year ago
parent 81ac13a7b2
commit c808c6d907

@ -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<FillData> 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);
%>

@ -24,6 +24,8 @@ import java.util.*;
public class KQFormatSignData extends BaseBean {
private KQLog kqLog = new KQLog();
BaseBean bb = new BaseBean();
public List<Object> 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<String, Object> 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<String> 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<String, Object> checkInfo = (Map<String, Object> ) 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<String, Object> 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<String> 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<String, Object> 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);
}
}
}
}
}

File diff suppressed because it is too large Load Diff

@ -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"));

@ -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 AbstractCommonCommand<Map<String, Objec
}
String backFields = " a.id,a.lastname,a.subcompanyid1 as subcompanyid,a.departmentid, a.workcode,b.jobtitle,a.dsporder," +
" b.kqdate, b.workdays,b.workMins,b.serialid, b.attendancedays,b.attendanceMins,b.beLate," +
" b.kqdate, b.workdays,b.workMins,b.serialid, b.attendancedays,FLOOR( b.attendanceMins / 30 ) * 30 AS attendanceMins ,b.beLate," +
" b.beLateMins,b.graveBeLate,b.graveBeLateMins,b.leaveEearly,b.leaveEarlyMins,b.graveLeaveEarly," +
" b.graveLeaveEarlyMins,b.absenteeism,b.signdays,b.signmins, "+
" FLOOR( (b.absenteeismMins / 60 ) /0.5 ) * 0.5 * 60 AS absenteeismMins,(b.forgotCheck+"+forgotBeginWorkCheck_field+") forgotCheck ";
" b.absenteeismMins ,(b.forgotCheck+"+forgotBeginWorkCheck_field+") forgotCheck ";
String sqlFrom = " from hrmresource a, kq_format_total b where a.id= b.resourceid and b.kqdate >='"+fromDate+"' and b.kqdate <='"+toDate+"'";
String sqlWhere = rightSql;
if(subCompanyId.length()>0){
@ -234,6 +235,7 @@ public class ExportDailyExcelCmd extends AbstractCommonCommand<Map<String, Objec
Map<String,Object> flowData = kqReportBiz.getDailyFlowData(params,user);
/*考勤二开--驻点餐补start*/
HostarUtil hostarUtil = new HostarUtil();
List<String> 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<Map<String, Objec
/*考勤二开--夜班餐补start*/
String nightshiftsub = Util.null2String(bb.getPropValue("project_hostar", "nightshiftsubcompany"));
List<String> nightshifts = new ArrayList<String>();
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<Map<String, Objec
}catch (Exception e){
}
fieldValue = KQDurationCalculatorUtil.getDurationRound(businessLeave);
} else if (fieldName.equals("statAllowance")) {//考勤二开--驻点餐补
} else if ( "mealAllowance".equals(fieldName)) {//考勤二开--出差餐补
int intValue = Util.getIntValue(Util.null2String(flowData.get("DailyMealAllow|" + resourceId + "|" + kqdate)));
if (intValue < 0) {
intValue = 0;
}
data.add(intValue);
continue;
} else if ("statAllowance".equals(fieldName)) {//考勤二开--驻点餐补
String subcompanyId = Util.null2String(rs.getString("subcompanyid"));
if ( !subComoanyList.contains(subcompanyId)) {
int temp = Util.getIntValue(Util.null2String(flowData.get(id + "|DailyStatAllowance" + "|" + kqdate )));
if (temp <= 0) {
params.put("statUser", id);
params.put("kqdate", kqdate);
bb.writeLog("params: " + params );
long startTime = System.currentTimeMillis();
Map<String, Object> 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<String, Object> 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<Map<String, Objec
} else {
fieldValue = String.valueOf(temp);
}
bb.writeLog("fieldValue: " + fieldValue);
// bb.writeLog("fieldValue: " + fieldValue);
}
data.add( fieldValue);
continue;
} else if (fieldName.equals("otherStatAllowance")) {//考勤二开--鸿仁驻点餐补
} else if ("nightShiftSubsidy".equals(fieldName)) {//考勤二开--夜班补助
params.put("subUserId", id);
bb.writeLog("params: " + params );
Map<String, Object> 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")){

@ -208,12 +208,12 @@ public class ExportExcelCmd extends AbstractCommonCommand<Map<String, Object>> {
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<Map<String, Object>> {
}catch (Exception e){
}
fieldValue = KQDurationCalculatorUtil.getDurationRound(businessLeave);
} else if (fieldName.equals("statAllowance")) {//考勤二开--驻点餐补
bb.writeLog("flowData: " + flowData);
Map<String, Object> tempMap = hostarUtil.parseMapForFilter(flowData, id + "|DailyStatAllowance");
bb.writeLog("tempMap: " + tempMap);
} else if ("mealAllowance".equals(fieldName)) {//考勤二开--出差餐补
// bb.writeLog("mealAllowance");
Map<String, Object> 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<String, Object> temp = kqReportBiz.getStatAllowanceData(params, user);
if (temp == null || temp.size() == 0) {
data.add( "0");
} else {
Map<String, Object> tempMap = hostarUtil.parseMapForFilter(temp, id + "|StatAllowance");
// Map<String, Object> 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<String, Object> 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<String, Object> temp = kqReportBiz.getDailyNightShiftSubsidyData(params, user);
if (temp == null || temp.size() == 0) {
data.add( "0");
} else {
Map<String, Object> 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<String, Object> 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<Map<String, Object>> {
}
fieldValue = String.valueOf(tempValue);
}
// bb.writeLog("fieldValue: " + fieldValue);
data.add(fieldValue);
continue;
} else if(Util.null2String(kqReportFieldComInfo.getCascadekey(fieldid)).length()>0){

@ -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 AbstractCommonCommand<Map<String, Objec
}
String backFields = " a.id,a.lastname,a.subcompanyid1 as subcompanyid,a.departmentid, a.workcode,b.jobtitle,a.dsporder," +
" b.kqdate, b.workdays,b.workMins,b.serialid, b.attendancedays,b.attendanceMins," +
" b.kqdate, b.workdays,b.workMins,b.serialid, b.attendancedays,FLOOR( b.attendanceMins / 30 ) * 30 AS attendanceMins," +
" b.beLate,b.beLateMins,b.graveBeLate,b.graveBeLateMins,b.leaveEearly,b.leaveEarlyMins," +
" b.signdays,b.signmins, "+
" b.graveLeaveEarly,b.graveLeaveEarlyMins,b.absenteeism , FLOOR( (b.absenteeismMins / 60 ) /0.5 ) * 0.5 * 60 AS absenteeismMins ,(b.forgotCheck+"+forgotBeginWorkCheck_field+") forgotCheck ";
" b.graveLeaveEarly,b.graveLeaveEarlyMins,b.absenteeism , b.absenteeismMins ,(b.forgotCheck+"+forgotBeginWorkCheck_field+") forgotCheck ";
String sqlFrom = " from hrmresource a, kq_format_total b where a.id= b.resourceid and b.kqdate >='"+fromDate+"' and b.kqdate <='"+toDate+"'";
String sqlWhere = rightSql;
if(subCompanyId.length()>0){
@ -229,6 +230,7 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
sql = " select " + sql;
}
Map<String,Object> flowData = kqReportBiz.getDailyFlowData(params,user);
bb.writeLog("=-=-flowData: " + flowData);
// #1475814-概述:满足考勤报分部部门显示及导出时显示全路径
String fullPathMainKey = "show_full_path";
@ -236,6 +238,7 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
String isShowFullPath = Util.null2String(kqSettingsComInfo.getMain_val(fullPathMainKey),"0");
/*考勤二开--驻点餐补start*/
HostarUtil hostarUtil = new HostarUtil();
List<String> 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<Map<String, Objec
/*考勤二开--夜班餐补start*/
String nightshiftsub = Util.null2String(bb.getPropValue("project_hostar", "nightshiftsubcompany"));
List<String> nightshifts = new ArrayList<String>();
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<Map<String, Objec
String subcompanyId = Util.null2String(rs.getString("subcompanyid"));
if ( !subComoanyList.contains(subcompanyId)) {
int temp = Util.getIntValue(Util.null2String(flowData.get(id + "|DailyStatAllowance" + "|" + kqdate )));
if (temp <= 0) {
params.put("statUser", id);
params.put("kqdate", kqdate);
bb.writeLog("params: " + params );
// long startTime = System.currentTimeMillis();
Map<String, Object> 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<String, Object> 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<String, Object> 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<Map<String, Objec
String sql = "";
KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo();
try{
// sql = " select kqdate,resourceid,serialid,serialnumber,workbegindate,workbegintime, " +
// " workenddate,workendtime,workmins,signindate,signintime,signoutdate,signouttime, \n" +
// " attendanceMins,belatemins,graveBeLateMins,leaveearlymins,graveLeaveEarlyMins,absenteeismmins,forgotcheckMins,forgotBeginWorkCheckMins," +
// " leaveMins,leaveInfo,evectionMins,outMins,signinid,signoutid \n" +
// " from kq_format_detail b \n" +
// " where resourceid = " + resourceId + " and kqdate ='" + kqDate + "' \n" +
// " order by serialnumber \n";
/*考勤二开--增加打卡地址start*/
sql = " select kqdate,resourceid,serialid,serialnumber,workbegindate,workbegintime, " +
" workenddate,workendtime,workmins,signindate,signintime,signoutdate,signouttime, \n" +
" attendanceMins,belatemins,graveBeLateMins,leaveearlymins,graveLeaveEarlyMins,absenteeismmins,forgotcheckMins,forgotBeginWorkCheckMins," +
" leaveMins,leaveInfo,evectionMins,outMins,signinid,signoutid \n" +
" from kq_format_detail b \n" +
" from kq_format_detail b " +
" left join hrmschedulesign a " +
" where resourceid = " + resourceId + " and kqdate ='" + kqDate + "' \n" +
" order by serialnumber \n";
/*考勤二开--增加打卡地址end*/
rs.execute(sql);
while (rs.next()) {
String resourceid = Util.null2String(rs.getString("resourceid"));
@ -599,8 +655,8 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
String absenteeismMins= Util.null2String(rs.getString("absenteeismMins")).trim();
String forgotCheckMins = Util.null2String(rs.getString("forgotcheckMins")).trim();
String forgotBeginWorkCheckMins = Util.null2String(rs.getString("forgotBeginWorkCheckMins")).trim();
String signinid = Util.null2String(rs.getString("signinid")).trim();
String signoutid = Util.null2String(rs.getString("signoutid")).trim();
String signinid = Util.null2String(rs.getString("signinid")).trim();
String signoutid = Util.null2String(rs.getString("signoutid")).trim();
int leaveMins = rs.getInt("leaveMins");
String leaveInfo = Util.null2String(rs.getString("leaveInfo"));
int evectionMins = rs.getInt("evectionMins");
@ -613,7 +669,7 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
signStatusInfo.put("workdate",workbegindate);
signStatusInfo.put("worktime",workbegintime);
signStatusInfo.put("beLateMins",beLateMins);
signStatusInfo.put("forgotBeginWorkCheckMins",forgotBeginWorkCheckMins);
signStatusInfo.put("forgotBeginWorkCheckMins",forgotBeginWorkCheckMins);
signStatusInfo.put("graveBeLateMins",graveBeLateMins);
signStatusInfo.put("absenteeismMins",absenteeismMins);
signStatusInfo.put("leaveMins",leaveMins);

@ -174,12 +174,12 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
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<Map<String, Object>> {
double hoursToDay = kqOvertimeRulesBiz.getHoursToDay();//当前天跟小时计算关系
params.put("uintType",uintType);
params.put("hoursToDay",hoursToDay);
long startTime = System.currentTimeMillis();
Map<String,Object> flowData = kqReportBiz.getFlowData(params,user);
long endTime = System.currentTimeMillis();
long elapsedTime = endTime - startTime; // 执行时间
bb.writeLog("执行时间:" + elapsedTime + "毫秒" );
/*考勤二开--驻点餐补start*/
HostarUtil hostarUtil = new HostarUtil();
Map<String, Double> 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<String, Double> 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<Map<String, Object>> {
} else{
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id+"|"+fieldName)));
}
} else if (fieldName.equals("statAllowance")) {//考勤二开--驻点餐补
bb.writeLog("flowData: " + flowData);
Map<String, Object> tempMap = hostarUtil.parseMapForFilter(flowData, id + "|DailyStatAllowance");
bb.writeLog("tempMap: " + tempMap);
} else if ("mealAllowance".equals(fieldName)) {//考勤二开--出差餐补
// bb.writeLog("mealAllowance");
Map<String, Object> 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<String, Object> temp = kqReportBiz.getStatAllowanceData(params, user);
if (temp == null || temp.size() == 0) {
data.put(fieldName, "0");
} else {
Map<String, Object> tempMap = hostarUtil.parseMapForFilter(temp, id + "|StatAllowance");
// Map<String, Object> 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<String, Object> 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<String, Object> temp = kqReportBiz.getDailyNightShiftSubsidyData(params, user);
if (temp == null || temp.size() == 0) {
data.put(fieldName, "0");
} else {
Map<String, Object> 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<String, Object> 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));

@ -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<List> addParams = new ArrayList<>();
List<String> lsFormatData = new ArrayList<>();
Map<String, String> signFromMap = new HashMap<String, String>();
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<Object> formatParams = null;
List<List<Object>> lsFormatParams = new ArrayList<>();
Map<String,List<String>> overtimeMap = Maps.newHashMap();
List<String> overtimeList = Lists.newArrayList();
bb.writeLog("开始处理考勤数据生成");
for(int i=0;lsFormatData!=null&&i<lsFormatData.size();i++){
formatParams = new ArrayList<>();
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<String> 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<KQTaskBean> tasks = new ArrayList<>();
for(Map.Entry<String, List<String>> mme: overtimeMap.entrySet()){
String resid = mme.getKey();
List<String> overList = mme.getValue();
for(String date : overList){
SplitActionUtil.pushOverTimeTasks(date,date,resid,tasks);
}
}
if(!tasks.isEmpty()){
KQQueue.writeTasks(tasks);
}
}
}
} catch (Exception e) {

@ -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<String> allDates = hostarUtil.getAllDates(fromDate, toDate);
bb.writeLog("allDates: " + allDates);
for (String date: allDates) {
List<Map<String, Object>> 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<String, Object> 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<String, Object> 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);
}
}
}
Loading…
Cancel
Save