dev
chenwei 1 year ago
commit 67faa86e01

@ -0,0 +1,82 @@
package com.api.browser.service.impl;
import com.api.browser.bean.SearchConditionItem;
import com.api.browser.bean.SplitTableBean;
import com.api.browser.bean.SplitTableColBean;
import com.api.browser.service.BrowserService;
import com.api.browser.util.*;
import weaver.general.Util;
import weaver.systeminfo.SystemEnv;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
*
* @author lvyi
*
*/
public class JobActivitiesBrowserService extends BrowserService {
@Override
public Map<String, Object> getBrowserData(Map<String, Object> params) throws Exception {
Map<String, Object> apidatas = new HashMap<String, Object>();
String jobactivitymark = Util.null2String(params.get("jobactivitymark"));
String jobactivityname = Util.null2String(params.get("jobactivityname"));
String sqlwhere = "where 1 = 1 ";
String backfields = "";
String fromSql = "";
String orderby = "";
if(!jobactivitymark.equals("")){
sqlwhere += " and Jobactivitymark like '%";
sqlwhere += Util.fromScreen2(jobactivitymark,user.getLanguage());
sqlwhere += "%'";
}
if(!jobactivityname.equals("")){
sqlwhere += " and jobactivityname like '%";
sqlwhere += Util.fromScreen2(jobactivityname,user.getLanguage());
sqlwhere += "%'";
}
List<SplitTableColBean> cols = new ArrayList<SplitTableColBean>();
backfields = " id, jobactivitymark, jobactivityname, jobgroupname ";
fromSql = " ( SELECT " +
" a.id, " +
" a.jobactivitymark, " +
" a.jobactivityname, " +
" b.jobgroupname " +
"FROM " +
" HrmJobActivities a " +
" LEFT JOIN HrmJobGroups b ON b.id = a.jobgroupid " +
") t ";
orderby = " id ";
cols.add(new SplitTableColBean("true", "id"));
// cols.add(new SplitTableColBean("35%", SystemEnv.getHtmlLabelName(399, user.getLanguage()), "jobactivitymark", "jobactivitymark").setIsInputCol(BoolAttr.TRUE));
cols.add(new SplitTableColBean("50%", SystemEnv.getHtmlLabelName(805, user.getLanguage()), "jobgroupname", "jobgroupname"));//二开
cols.add(new SplitTableColBean("50%", SystemEnv.getHtmlLabelName(15767, user.getLanguage()), "jobactivityname", "jobactivityname").setIsInputCol(BoolAttr.TRUE));
SplitTableBean tableBean = new SplitTableBean(backfields, fromSql, sqlwhere, orderby, "id", cols);
tableBean.setSqlsortway("ASC");
tableBean.setSqlisdistinct("true");
apidatas.putAll(SplitTableUtil.makeListDataResult(tableBean));
return apidatas;
}
@Override
public Map<String, Object> getBrowserConditionInfo(Map<String, Object> params) throws Exception {
Map<String, Object> apidatas = new HashMap<String, Object>();
List<SearchConditionItem> conditions = new ArrayList<SearchConditionItem>();
apidatas.put(BrowserConstant.BROWSER_RESULT_CONDITIONS, conditions);
ConditionFactory conditionFactory = new ConditionFactory(user);
conditions.add(conditionFactory.createCondition(ConditionType.INPUT, 399, "jobactivitymark", true));
conditions.add(conditionFactory.createCondition(ConditionType.INPUT, 15767, "jobactivityname"));
conditions.add(conditionFactory.createCondition(ConditionType.INPUT, 805, "jobgroupname"));
return apidatas;
}
}

@ -0,0 +1,7 @@
package com.api.omron.controller;
import javax.ws.rs.Path;
@Path("/omron/kqreportdev")
public class KqReportController extends com.engine.omron.controller.KqReportController {
}

@ -0,0 +1,7 @@
package com.api.omron.controller;
import javax.ws.rs.Path;
@Path("/omron/OverTimeWorkflow")
public class OverTimeController extends com.engine.omron.controller.OverTimeController {
}

@ -0,0 +1,977 @@
package com.engine.kq.biz;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.engine.kq.biz.chain.shiftinfo.ShiftInfoBean;
import com.engine.kq.entity.KQShiftRuleEntity;
import com.engine.kq.entity.TimeScopeEntity;
import com.engine.kq.entity.WorkTimeEntity;
import com.engine.kq.enums.FlowReportTypeEnum;
import com.engine.kq.log.KQLog;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.googlecode.aviator.AviatorEvaluator;
import com.googlecode.aviator.Expression;
import org.apache.commons.lang3.StringUtils;
import weaver.common.DateUtil;
import weaver.conn.BatchRecordSet;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.InitServer;
import weaver.general.Util;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*
*/
public class KQFormatData extends BaseBean {
private String today = DateUtil.getCurrentDate();
private KQLog kqLog = new KQLog();
private boolean writeLog = false;
private LinkedHashMap<String,Object> logInfo = new LinkedHashMap<>();
/***
*
* @param userId
* @param kqDate
* @return
*/
public Map<String, Object> formatKqDate(String userId, String kqDate) {
List<List<Object>> lsParam = new ArrayList<>();
//非工作日处理
List<Object> nonlsParam = null;
Map<String, Object> resultMap = new HashMap<>();
BatchRecordSet bRs = new BatchRecordSet();
KQGroupComInfo kqGroupComInfo = new KQGroupComInfo();
RecordSet rs = new RecordSet();
String sql = "";
try {
kqLog.info("formatKqDate in userId=" + userId + "kqDate==" + kqDate);
if (DateUtil.timeInterval(kqDate, today) < 0) {//今天之后的无需处理
kqLog.info("今天之后的无需处理的数据resourceid=="+userId+"kqdate=="+kqDate+"today=="+today);
return resultMap;
}
String uuid = UUID.randomUUID().toString();
KQFormatFreeData kqFormatFreeData = new KQFormatFreeData();
KQWorkTime kqWorkTime = new KQWorkTime();
kqWorkTime.setIsFormat(true);
String kqDateNext = DateUtil.addDate(kqDate, 1);
KQFlowDataBiz kqFlowDataBiz = new KQFlowDataBiz.FlowDataParamBuilder().resourceidParam(userId).fromDateParam(kqDate).toDateParam(kqDateNext).build();
Map<String, Object> workFlowInfo = new HashMap<>();//userid|date--工作流程
kqFlowDataBiz.getAllFlowData(workFlowInfo,false);
WorkTimeEntity workTime = kqWorkTime.getWorkTime(userId, kqDate);
kqLog.info("userId:"+userId+":kqDate:"+kqDate+":formatKqDate workTime=" + JSONObject.toJSONString(workTime)+"::uuid::"+uuid);
kqLog.info("userId:"+userId+":kqDate:"+kqDate+":formatKqDate workFlowInfo=" + JSONObject.toJSONString(workFlowInfo)+"::uuid::"+uuid);
if(this.writeLog) {
logInfo.put("userId",userId);
logInfo.put("kqDate",kqDate);
logInfo.put(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(16253,weaver.general.ThreadVarLanguage.getLang())+"",workTime);
logInfo.put(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(126871,weaver.general.ThreadVarLanguage.getLang())+"",workFlowInfo);
}
new KQFormatBiz().delFormatData(userId, kqDate);
String excludecount = Util.null2String(kqGroupComInfo.getExcludecount(workTime.getGroupId()));//是否参与考勤报表统计
if (workTime.getIsExclude()) {//无需考勤人员没有异常状态
if(!excludecount.equals("1")){
kqLog.info("无需考勤人员没有异常状态 workTime.getIsExclude()="+workTime.getIsExclude()+"excludecount=="+excludecount);
return resultMap;
}
}
if( Util.null2String(workTime.getGroupId()).length()==0){
//没有考勤组不需格式化
return resultMap;
}
if (workTime == null || workTime.getWorkMins() == 0) {
kqLog.info("workTime == null || workTime.getWorkMins() == 0 插入空记录");
nonlsParam = new ArrayList<>();
formatNonWork(userId, kqDate,nonlsParam,workTime, workFlowInfo);
if(!nonlsParam.isEmpty()){
sql = " insert into kq_format_detail(resourceid,kqdate,groupid,serialnumber,signindate,signintime,signinid,signoutdate,signouttime,signoutid,leaveMins,leaveinfo,evectionMins,outMins)values(?,?,?,?,?,?,?,?,?,?,?,?,?,?) ";
rs.executeUpdate(sql, nonlsParam);
sql = " insert into kq_format_total(resourceid,kqdate,subcompanyid,departmentid,jobtitle,groupid,serialid,workdays," +
" workmins,attendancedays,attendancemins,signdays,signmins,belate,belatemins,gravebelate,gravebelatemins,leaveeearly,leaveearlymins," +
" graveleaveearly,graveleaveearlymins,absenteeism,absenteeismmins,forgotcheck, forgotcheckMins,leaveMins,evectionMins,outMins)" +
" select a.resourceid,kqdate,b.subcompanyid1,b.departmentid,b.jobtitle,groupid,serialid," +
" case when sum(workmins)>0 then 1 end as workdays, sum(workmins) as workmins," +
" 0 as attendancedays, sum(attendanceMins) as attendanceMins," +
" 0 as signdays, sum(signmins) as signmins," +
" sum(case when belatemins> 0 then 1 else 0 end) as belate,sum(belatemins) as belatemins," +
" sum(case when graveBeLateMins> 0 then 1 else 0 end) as graveBeLate,sum(graveBeLateMins) as graveBeLateMins," +
" sum(case when leaveearlymins> 0 then 1 else 0 end) as leaveearly,sum(leaveearlymins) as leaveearlymins," +
" sum(case when graveLeaveEarlyMins> 0 then 1 else 0 end) as graveLeaveEarly,sum(graveLeaveEarlyMins) as graveLeaveEarlyMins," +
" sum(case when absenteeismmins> 0 then 1 else 0 end) as absenteeism,sum(absenteeismmins) as absenteeismmins," +
" sum(case when forgotcheckmins> 0 then 1 else 0 end) as forgotcheck,sum(forgotcheckmins) as forgotcheckmins, " +
" sum(leaveMins) as leaveMins, sum(evectionMins) as evectionMins, sum(outMins) as outMins" +
" from kq_format_detail a, hrmresource b" +
" where a.resourceid = b.id and resourceid =? and kqdate=?" +
" group by resourceid,kqdate,b.subcompanyid1,b.departmentid,b.jobtitle,groupid,serialid,workmins";
rs.executeUpdate(sql, userId, kqDate);
}
}else{
Map<String,Object> definedFieldInfo = new KQFormatBiz().getDefinedField();
String definedField = "";
String definedParam = "";
String definedParamSum = "";
if (workTime.getKQType().equals("3")) {//自由工时
lsParam.addAll(kqFormatFreeData.format(userId, kqDate, workFlowInfo));
} else {
definedField = Util.null2String(definedFieldInfo.get("definedField"));
definedParam = Util.null2String(definedFieldInfo.get("definedParam"));
definedParamSum = Util.null2String(definedFieldInfo.get("definedParamSum"));
lsParam.addAll(format(userId, kqDate, workTime, workFlowInfo,uuid));
}
if (lsParam.size() > 0) {
sql = " insert into kq_format_detail( " +
" resourceid,kqdate,groupid,serialid,serialnumber,workbegindate,workbegintime,workenddate,workendtime,workmins," +
" signindate,signintime,signinid,signoutdate,signouttime,signoutid,signMins," +
" attendanceMins,belatemins,graveBeLateMins,leaveearlymins,graveLeaveEarlyMins,absenteeismmins,forgotcheckMins," +
" leaveMins,leaveinfo,evectionMins,outMins,forgotbeginworkcheckmins,otherinfo"+(definedField.length()>0?","+definedField+"":"")+") " +
" values(?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?"+(definedField.length()>0?","+definedParam+"":"")+")";
for (int i = 0; i < lsParam.size(); i++) {
List<Object> param = lsParam.get(i);
boolean isok = rs.executeUpdate(sql, param);
kqLog.info("插入记录:userId:"+userId+":kqDate:"+kqDate+":param:"+JSON.toJSONString(param)+":isok:"+isok+"::uuid::"+uuid);
}
sql = " insert into kq_format_total(resourceid,kqdate,subcompanyid,departmentid,jobtitle,groupid,serialid,workdays,workmins," +
" attendancedays,attendancemins,signdays,signmins,belate,belatemins,gravebelate,gravebelatemins,leaveeearly,leaveearlymins,graveleaveearly," +
" graveleaveearlymins,absenteeism,absenteeismmins,forgotcheck,forgotcheckmins," +
" leaveMins,evectionMins,outMins,forgotbeginworkcheck,forgotbeginworkcheckmins"+(definedField.length()>0?","+definedField+"":"")+") " +
" select a.resourceid,kqdate,b.subcompanyid1,b.departmentid,b.jobtitle,groupid,serialid," +
" case when sum(workmins)>0 then 1 end as workdays, sum(workmins) as workmins," +
" cast(sum(attendanceMins)AS decimal(10, 2))/sum(workmins) as attendancedays, sum(attendanceMins) as attendanceMins," +
" cast(sum(signmins)AS decimal(10, 2))/sum(workmins) as signdays, sum(signmins) as signmins," +
" sum(case when belatemins> 0 then 1 else 0 end) as belate,sum(belatemins) as belatemins," +
" sum(case when graveBeLateMins> 0 then 1 else 0 end) as graveBeLate,sum(graveBeLateMins) as graveBeLateMins," +
" sum(case when leaveearlymins> 0 then 1 else 0 end) as leaveearly,sum(leaveearlymins) as leaveearlymins," +
" sum(case when graveLeaveEarlyMins> 0 then 1 else 0 end) as graveLeaveEarly,sum(graveLeaveEarlyMins) as graveLeaveEarlyMins, " +
" sum(case when absenteeismmins> 0 then 1 else 0 end) as absenteeism,sum(absenteeismmins) as absenteeismmins," +
" sum(case when forgotcheckmins> 0 then 1 else 0 end) as forgotcheck,sum(forgotcheckmins) as forgotcheckmins,sum(leaveMins) as leaveMins," +
" sum(evectionMins) as evectionMins,sum(outMins) as outMins, " +
" sum(case when forgotbeginworkcheckmins> 0 then 1 else 0 end) as forgotbeginworkcheck,sum(forgotbeginworkcheckmins) as forgotbeginworkcheckmins " +
(definedField.length()>0?","+definedParamSum+"":"")+
" from kq_format_detail a, hrmresource b" +
" where a.resourceid = b.id and resourceid = ? and kqdate=?" +
" group by resourceid,kqdate,b.subcompanyid1,b.departmentid,b.jobtitle,groupid,serialid";
rs.executeUpdate(sql, userId, kqDate);
}
}
}catch (Exception e) {
writeLog(e);
kqLog.info(e);
}
return resultMap;
}
public List<List<Object>> format(String userId, String kqDate, WorkTimeEntity workTime,
Map<String, Object> workFlowInfo, String uuid) {
List<List<Object>> lsParam = new ArrayList<>();
List<Object> params = null;
try {
KQSettingsComInfo kqSettingsComInfo = new KQSettingsComInfo();
String nosign_is_absent = Util.null2String(kqSettingsComInfo.getMain_val("nosign_is_absent"),"1");
KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo();
KQFormatShiftRule kqFormatShiftRule = new KQFormatShiftRule();
String preDate = DateUtil.addDate(kqDate, -1);//上一天日期
String nextDate = DateUtil.addDate(kqDate, 1);//下一天日期
String dateKey = userId + "|" + kqDate;
String nextDateKey = userId + "|" + nextDate;
ArrayList<String> hostIps = InitServer.getRealIp();
kqLog.info("format in >>>>>userId" + userId + "kqDate==" + kqDate+":hostIps:"+hostIps+":uuid::"+uuid);
boolean oneSign = false;
List<TimeScopeEntity> lsSignTime = new ArrayList<>();
List<TimeScopeEntity> lsWorkTime = new ArrayList<>();
List<TimeScopeEntity> lsRestTime = new ArrayList<>();
List<Object> workFlow = null;
if (workTime != null) {
lsSignTime = workTime.getSignTime();//允许打卡时间
lsWorkTime = workTime.getWorkTime();//工作时间
lsRestTime = workTime.getRestTime();//休息时段时间
oneSign = lsWorkTime!=null&&lsWorkTime.size()==1;
}
int[] dayMins = new int[2880];//一天所有分钟数
Arrays.fill(dayMins, -1);
for (int i = 0; lsWorkTime != null && i < lsWorkTime.size(); i++) {
params = new ArrayList<>();
TimeScopeEntity signTimeScope = lsSignTime.get(i);
TimeScopeEntity workTimeScope = lsWorkTime.get(i);
// TimeScopeEntity restTimeScope = lsRestTime.isEmpty()?null:lsRestTime.get(i);
String workBeginTime = Util.null2String(workTimeScope.getBeginTime());
String ori_workBeginTime = workBeginTime;
int workBeginIdx = kqTimesArrayComInfo.getArrayindexByTimes(workBeginTime);
boolean workBenginTimeAcross = workTimeScope.getBeginTimeAcross();
String workEndTime = Util.null2String(workTimeScope.getEndTime());
String ori_workEndTime = workEndTime;
int workEndIdx = kqTimesArrayComInfo.getArrayindexByTimes(workEndTime);
boolean workEndTimeAcross = workTimeScope.getEndTimeAcross();
int workMins = workTimeScope.getWorkMins();
String workBeginDate = workBenginTimeAcross ? nextDate : kqDate;
String workEndDate = workEndTimeAcross ? nextDate : kqDate;
Arrays.fill(dayMins, workBeginIdx, workEndIdx, 1);//工作时段标识 1
int beginIdx = 0;
int endIdx = 0;
int checkIn = 0;
int checkOut = 0;
String signInId = "";
String signInDate = "";
String signInTime = "";
String signOutId = "";
String signOutDate = "";
String signOutTime = "";
int earlyInMins = 0;//早到分钟数
int lateOutMins = 0;//晚走分钟数
int signMins = 0;//签到签退时长
int tmpAttendanceMins = 0;//出勤分钟数(流程抵扣来的)
int attendanceMins = 0;
int beLateMins = 0;
int graveBeLateMins = 0;
int leaveEarlyMins = 0;
int graveLeaveEarlyMins = 0;
int absenteeismMins = 0;
int leaveMins = 0;//请假时长
Map<String,Object> leaveInfo = new HashMap<>();//请假信息
Map<String,Object> otherinfo = new HashMap<>();//存一些用得到的信息
int evectionMins = 0;//出差时长
int outMins = 0;//公出时长
int otherMins = 0;//异常流程时长
int forgotCheckMins = 0;
int forgotBeginWorkCheckMins = 0;//上班漏签
int signInTimeIndx = -1;
int flowSignInTimeIndx = -1;
int signInTimeOutdx = -1;
//用来计算实际打卡时长用的
int signInTimeIndx4Sign = -1;
int signInTimeOutdx4Sign = -1;
String signBeginDateTime = signTimeScope.getBeginTimeAcross() ? nextDate : kqDate;
if(signTimeScope.isBeginTimePreAcross()){
signBeginDateTime = preDate;
}
signBeginDateTime+=" "+kqTimesArrayComInfo.turn48to24Time(signTimeScope.getBeginTime())+":00";
String signEndDateTime = signTimeScope.getEndTimeAcross() ? nextDate : kqDate;
signEndDateTime+=" "+kqTimesArrayComInfo.turn48to24Time(signTimeScope.getEndTime())+":59";
String workBeginDateTime = workTimeScope.getBeginTimeAcross() ? nextDate : kqDate;
workBeginDateTime+=" "+kqTimesArrayComInfo.turn48to24Time(workTimeScope.getBeginTime())+":00";
String workEndDateTime = workTimeScope.getEndTimeAcross() ? nextDate : kqDate;
workEndDateTime+=" "+kqTimesArrayComInfo.turn48to24Time(workTimeScope.getEndTime())+":00";
kqLog.info("signBeginDateTime" + signBeginDateTime+"::userId" + userId + "kqDate==" + kqDate+":hostIps:"+hostIps+":uuid::"+uuid);
kqLog.info("signEndDateTime" + signEndDateTime+"::userId" + userId + "kqDate==" + kqDate+":hostIps:"+hostIps+":uuid::"+uuid);
kqLog.info("workBeginDateTime" + workBeginDateTime+"::userId" + userId + "kqDate==" + kqDate+":hostIps:"+hostIps+":uuid::"+uuid);
kqLog.info("workEndDateTime" + workEndDateTime+"::userId" + userId + "kqDate==" + kqDate+":hostIps:"+hostIps+":uuid::"+uuid);
Map<String, String> shifRuleMap = Maps.newHashMap();
if(oneSign){
//个性化设置只支持一天一次上下班
ShiftInfoBean shiftInfoBean = new ShiftInfoBean();
shiftInfoBean.setSplitDate(kqDate);
shiftInfoBean.setShiftRuleMap(workTime.getShiftRuleInfo());
shiftInfoBean.setSignTime(lsSignTime);
shiftInfoBean.setWorkTime(lsWorkTime);
List<String> logList = Lists.newArrayList();
KQShiftRuleInfoBiz.getShiftRuleInfo(shiftInfoBean, userId, 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);
}
}
}
kqLog.info("个性化之后 signBeginDateTime" + signBeginDateTime);
kqLog.info("个性化之后 signEndDateTime" + signEndDateTime);
kqLog.info("个性化之后 workBeginDateTime" + workBeginDateTime);
kqLog.info("个性化之后 workEndDateTime" + workEndDateTime);
}
List<Object> lsCheckInfo = new KQFormatSignData().getSignInfo(userId,signTimeScope,workTimeScope,kqDate,preDate,nextDate,kqTimesArrayComInfo,hostIps,uuid);
kqLog.info("lsCheckInfo" + JSONObject.toJSONString(lsCheckInfo)+"::userId" + userId + "kqDate==" + kqDate+":hostIps:"+hostIps+":uuid::"+uuid);
if(this.writeLog) {
logInfo.put(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10005297,weaver.general.ThreadVarLanguage.getLang())+"",signBeginDateTime);
logInfo.put(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10005298,weaver.general.ThreadVarLanguage.getLang())+"",signEndDateTime);
logInfo.put(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(1940,weaver.general.ThreadVarLanguage.getLang())+"",workBeginDateTime);
logInfo.put(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10005299,weaver.general.ThreadVarLanguage.getLang())+"",workEndDateTime);
logInfo.put(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10005300,weaver.general.ThreadVarLanguage.getLang())+"",lsCheckInfo);
}
for (int j = 0; lsCheckInfo != null && j < lsCheckInfo.size(); j++) {
Map<String, Object> checkInfo = (Map<String, Object>) lsCheckInfo.get(j);
String signStatus = Util.null2String(checkInfo.get("signStatus"));
String signId = Util.null2String(checkInfo.get("signId"));
String signDate = Util.null2String(checkInfo.get("signDate"));
String signTime = Util.null2String(checkInfo.get("signTime"));
String deduct_signintime = Util.null2String(checkInfo.get("deduct_signintime"));
String deduct_signofftime = Util.null2String(checkInfo.get("deduct_signofftime"));
String flow_signInTime = "";
String flow_signOutTime = "";
if(kqDate.compareTo(signDate) < 0)endIdx+=1440;
if (signTime.length() > 8) {
signTime = signTime.substring(0, 8);
}
if (checkInfo.get("signType").equals("1")) {//签到
checkIn++;
//如果流程抵扣存在,打卡时长也存在,那么相互比较得到出勤时长和打卡时长 暂不这样处理,还是按照漏签的逻辑来处理
if(signTime.length() > 0){
signInTimeIndx4Sign = kqTimesArrayComInfo.getArrayindexByTimes(signTime);
}
signInId = signId;
signInDate = signDate;
signInTime = signTime;
signInTimeIndx = kqTimesArrayComInfo.getArrayindexByTimes(signInTime);
if(deduct_signintime.length() > 0){
if(signTime.length() > 0){
if(deduct_signintime.compareTo(signTime) < 0){
flow_signInTime = deduct_signintime;
}
}else{
flow_signInTime = deduct_signintime;
}
}
if(flow_signInTime.length() > 0){
flowSignInTimeIndx = kqTimesArrayComInfo.getArrayindexByTimes(flow_signInTime);
}
if(kqDate.compareTo(signDate) < 0) {
signInTimeIndx += 1440;
flowSignInTimeIndx += 1440;
}else if(kqDate.compareTo(signDate) > 0){
signInTimeIndx -= 1440;
signInTimeIndx = signInTimeIndx < 0 ? 0 : signInTimeIndx;
flowSignInTimeIndx -= 1440;
flowSignInTimeIndx = flowSignInTimeIndx < 0 ? 0 : flowSignInTimeIndx;
}
if(oneSign){
if(workBeginIdx>signInTimeIndx) {
earlyInMins = workBeginIdx-signInTimeIndx;
}
}
} else if (checkInfo.get("signType").equals("2")) {//签退
checkOut++;
//如果流程抵扣存在,打卡时长也存在,那么相互比较得到出勤时长和打卡时长 暂不这样处理,还是按照漏签的逻辑来处理
if(signTime.length() > 0){
signInTimeOutdx4Sign = kqTimesArrayComInfo.getArrayindexByTimes(signTime);
}
signOutId = signId;
signOutDate = signDate;
signOutTime = signTime;
signInTimeOutdx = kqTimesArrayComInfo.getArrayindexByTimes(signOutTime);
if(deduct_signofftime.length() > 0){
if(signTime.length() > 0){
if(deduct_signofftime.compareTo(signTime) > 0){
flow_signOutTime = deduct_signofftime;
}
}else{
flow_signOutTime = deduct_signofftime;
}
}
if(flow_signOutTime.length() > 0){
signInTimeOutdx = kqTimesArrayComInfo.getArrayindexByTimes(flow_signOutTime);
}
if(kqDate.compareTo(signDate) < 0){
signInTimeOutdx+=1440;
}else if(kqDate.compareTo(signDate) > 0){
signInTimeOutdx -= 1440;
signInTimeOutdx = signInTimeOutdx < 0 ? 0 : signInTimeOutdx;
}
if(oneSign){
if(signInTimeOutdx>workEndIdx) {
lateOutMins = signInTimeOutdx-workEndIdx;
}
}
}
if (checkInfo.get("signType").equals("1")) {//签到
if(signTime.length() > 0){
String signMinTime = signTime.substring(0,5)+":00";
endIdx = kqTimesArrayComInfo.getArrayindexByTimes(signTime);
if(signTime.compareTo(signMinTime) > 0){
//如果签到时间是带秒的且是迟到,那么签到时间多一秒和多一分钟是一样的
endIdx += 1;
signInTimeIndx = signInTimeIndx + 1;//如果是带秒的打卡数据不应该影响流程抵扣的数据的下标
}
if(kqDate.compareTo(signDate) < 0){
endIdx+=1440;
}else if(kqDate.compareTo(signDate) > 0){
endIdx -= 1440;
endIdx = endIdx < 0 ? 0 : endIdx;
}
if (endIdx > workBeginIdx) {
if(flow_signInTime.length() > 0){
if(flowSignInTimeIndx > workBeginIdx){
//增加一个判断,流程抵扣打卡如果开启了并且有抵扣上班打卡,那么也就不是迟到了
Arrays.fill(dayMins, workBeginIdx, endIdx, 2);//迟到时段标识 2
}
}else{
Arrays.fill(dayMins, workBeginIdx, endIdx, 2);//迟到时段标识 2
}
}
}
} else if (checkInfo.get("signType").equals("2")) {//签退
if(signTime.length() > 0){
beginIdx = kqTimesArrayComInfo.getArrayindexByTimes(signTime);
if(StringUtils.isNotBlank(signDate) && signDate.compareTo(kqDate) > 0){
beginIdx+=1440;
}else if(kqDate.compareTo(signDate) > 0){
beginIdx -= 1440;
beginIdx = beginIdx < 0 ? 0 : beginIdx;
}
if (workEndIdx > beginIdx) {
if(flow_signOutTime.length() > 0){
if (workEndIdx > signInTimeOutdx) {
//增加一个判断,流程抵扣打卡如果开启了并且有抵扣下班打卡,那么也就不是早退了
Arrays.fill(dayMins, beginIdx, workEndIdx, 3);//早退时段标识 3
}
}else{
Arrays.fill(dayMins, beginIdx, workEndIdx, 3);//早退时段标识 3
}
}
}
}
}
//打卡时长=签退时间-签到时间(有签到签退才计算)
if(checkIn==1&&checkOut==1){
if(signInTimeIndx4Sign > -1 && signInTimeOutdx4Sign > -1){
if(DateUtil.dayDiff(signInDate,signOutDate)==0){//同一天签到和签退
signMins=signInTimeOutdx4Sign - signInTimeIndx4Sign;
}else if(DateUtil.dayDiff(signInDate,signOutDate)==1) {//第一天签到,第二天签退
if(signInTimeOutdx4Sign<signInTimeIndx4Sign){
signMins = 1440 + signInTimeOutdx4Sign - signInTimeIndx4Sign;
}else{
signMins = signInTimeOutdx4Sign - signInTimeIndx4Sign;
}
}
}else{
signMins=0;
}
if(signMins<0){
signMins=0;
}
}
if (checkIn == 0 && checkOut == 0) {//旷工(无签到无签退)
if (workEndIdx > workBeginIdx) {
Arrays.fill(dayMins, workBeginIdx, workEndIdx, 4);//旷工时段标识 4
}
}
if (checkOut == 0 && checkIn > 0) {//漏签(有签到无签退)
if(signInTimeIndx > -1){
if (workEndIdx > signInTimeIndx) {
//漏签就是从本次时段内的打卡到下班点
//上班漏签应该是从签到到签到结束时间,不过这里可以不用管,只是一个次数
Arrays.fill(dayMins, signInTimeIndx, workEndIdx, 6);//上班漏签时段标识 6
} else {
//签到晚于本次时段结束时间,也算漏签
forgotCheckMins++;
}
}else if(flowSignInTimeIndx > -1){
if (workEndIdx > flowSignInTimeIndx) {
//漏签就是从本次时段内的打卡到下班点
//上班漏签应该是从签到到签到结束时间,不过这里可以不用管,只是一个次数
Arrays.fill(dayMins, flowSignInTimeIndx, workEndIdx, 6);//上班漏签时段标识 6
} else {
//签到晚于本次时段结束时间,也算漏签
forgotCheckMins++;
}
}
}
if (checkIn == 0 && checkOut > 0) {//漏签(有签退无签到)
if(signInTimeOutdx > 0){
if(workBeginIdx < signInTimeOutdx) {
//下班漏签应该是从签退到签退开始时间,不过这里可以不用管,只是一个次数
Arrays.fill(dayMins, workBeginIdx, signInTimeOutdx, 66);//下班漏签时段标识 6666呼应前面的漏签的6
}else{
//这种数据理论上不会存在,也记下吧
forgotBeginWorkCheckMins++;
}
}
}
if (workFlowInfo.get(dateKey) != null) {
workFlow = (List<Object>) workFlowInfo.get(dateKey);
}
for (int j = 0; workFlow != null && j < workFlow.size(); j++) {
Map<String, Object> data = (Map<String, Object>) workFlow.get(j);
String flowType = Util.null2String(data.get("flowtype"));
String newLeaveType = Util.null2String(data.get("newleavetype"));
String signtype = Util.null2String(data.get("signtype"));
String serial = Util.null2String(data.get("serial"));
String requestId = Util.null2String(data.get("requestId"));
beginIdx = kqTimesArrayComInfo.getArrayindexByTimes(Util.null2String(data.get("begintime")));
endIdx = kqTimesArrayComInfo.getArrayindexByTimes(Util.null2String(data.get("endtime")));
if (beginIdx >= endIdx) {
continue;
}
if(flowType.equals(FlowReportTypeEnum.EVECTION.getFlowType())){
Arrays.fill(dayMins, beginIdx, endIdx, 7);//出差抵扣时段标识 7
}else if(flowType.equals(FlowReportTypeEnum.OUT.getFlowType())){
Arrays.fill(dayMins, beginIdx, endIdx, 8);//公出抵扣时段标识 8
}else if(flowType.equalsIgnoreCase(FlowReportTypeEnum.LEAVE.getFlowType())){
if (endIdx > beginIdx) {
Arrays.fill(dayMins, beginIdx, endIdx, 5);//流程抵扣时段标识 5
int tmpBeginIdx = beginIdx;
int tmpEndIdx = endIdx;
Integer val = 0;
if(leaveInfo.get(newLeaveType)==null){
leaveInfo.put(newLeaveType,val);
}else{
val = (Integer) leaveInfo.get(newLeaveType);
}
if(beginIdx<workBeginIdx)tmpBeginIdx=workBeginIdx;
if(endIdx>workEndIdx)tmpEndIdx=endIdx;
if(tmpEndIdx>tmpBeginIdx){
leaveInfo.put(newLeaveType,val+(tmpEndIdx-tmpBeginIdx));
}
}
}else{
if (endIdx > beginIdx) {
Arrays.fill(dayMins, beginIdx, endIdx, 99);//异常流程抵扣时段标识99
}
}
}
if (workEndTimeAcross && false) {//跨天需要加入一天的流程
workFlow = null;
if (workFlowInfo.get(nextDateKey) != null) {
workFlow = (List<Object>) workFlowInfo.get(nextDateKey);
}
for (int j = 0; workFlow != null && j < workFlow.size(); j++) {
Map<String, Object> data = (Map<String, Object>) workFlow.get(j);
String flowType = Util.null2String(data.get("flowtype"));
beginIdx = kqTimesArrayComInfo.getArrayindexByTimes(Util.null2String(data.get("begintime")))+1440;
endIdx = kqTimesArrayComInfo.getArrayindexByTimes(Util.null2String(data.get("endtime")))+1440;
if(endIdx>=2880){
endIdx = 2880;
}
if(flowType.equals(FlowReportTypeEnum.EVECTION.getFlowType())){
Arrays.fill(dayMins, beginIdx, endIdx, 7);//出差抵扣时段标识 7
}else if(flowType.equals(FlowReportTypeEnum.OUT.getFlowType())){
Arrays.fill(dayMins, beginIdx, endIdx, 8);//公出抵扣时段标识 8
}else if(flowType.equalsIgnoreCase(FlowReportTypeEnum.LEAVE.getFlowType())){
if (endIdx > beginIdx) {
Arrays.fill(dayMins, beginIdx, endIdx, 5);//流程抵扣时段标识 5
}
}else{
if (endIdx > beginIdx) {
Arrays.fill(dayMins, beginIdx, endIdx, 99);//异常流程抵扣时段标识99
}
}
}
}
if(lsRestTime != null && !lsRestTime.isEmpty()){
for(int k = 0 ; k < lsRestTime.size(); k++){
TimeScopeEntity restTimeScope = lsRestTime.get(k);
if (restTimeScope!=null) {
String restBeginTime = Util.null2String(restTimeScope.getBeginTime());
String restEndTime = Util.null2String(restTimeScope.getEndTime());
beginIdx = kqTimesArrayComInfo.getArrayindexByTimes(restBeginTime);
endIdx = kqTimesArrayComInfo.getArrayindexByTimes(restEndTime);
if (endIdx > beginIdx) {
Arrays.fill(dayMins, beginIdx, endIdx, -11);//休息时间
}
}
}
int all_rest_cnt = kqTimesArrayComInfo.getCnt(dayMins, workBeginIdx, workEndIdx, -11);
if(all_rest_cnt >= 0){
workMins = workMins-(all_rest_cnt);
}
}
for (int j = workBeginIdx; j < workEndIdx; j++) {
switch (dayMins[j]) {
case 1:
tmpAttendanceMins++;
break;
case 2:
beLateMins++;
break;
case 3:
leaveEarlyMins++;
break;
case 4:
absenteeismMins++;
break;
case 5:
leaveMins++;
break;
case 6:
forgotCheckMins++;
break;
case 7:
evectionMins++;
break;
case 8:
outMins++;
break;
case 66:
forgotBeginWorkCheckMins++;
break;
case 99:
otherMins++;
break;
default:
break;
}
}
if(forgotCheckMins == 1 && beLateMins==0 && tmpAttendanceMins==0){//forgotCheckMins==1表示下班后漏签不是迟到流程已完全抵扣异常
forgotCheckMins = 0;
}
KQShiftRuleEntity kqShiftRuleEntity = new KQShiftRuleEntity();
kqShiftRuleEntity.setUserId(userId);
kqShiftRuleEntity.setKqDate(kqDate);
kqShiftRuleEntity.setBelatemins(beLateMins);
kqShiftRuleEntity.setLeaveearlymins(leaveEarlyMins);
kqShiftRuleEntity.setAbsenteeismmins(absenteeismMins);
kqShiftRuleEntity.setForgotcheckmins(forgotCheckMins);
kqShiftRuleEntity.setForgotBeginWorkCheckMins(forgotBeginWorkCheckMins);
kqShiftRuleEntity.setEarlyInMins(earlyInMins);
kqShiftRuleEntity.setLateOutMins(lateOutMins);
kqLog.info("人性化规则处理前数据" + JSONObject.toJSONString(kqShiftRuleEntity));
if(this.writeLog) {
logInfo.put(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10005301,weaver.general.ThreadVarLanguage.getLang())+"",kqShiftRuleEntity);
}
//人性化规则
kqShiftRuleEntity = kqFormatShiftRule.doShiftRule(workTime,kqShiftRuleEntity);
kqLog.info("人性化规则处理后数据" + JSONObject.toJSONString(kqShiftRuleEntity));
if(this.writeLog) {
logInfo.put(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10005302,weaver.general.ThreadVarLanguage.getLang())+"",kqShiftRuleEntity);
}
beLateMins = kqShiftRuleEntity.getBelatemins();
graveBeLateMins = kqShiftRuleEntity.getGravebelatemins();
leaveEarlyMins = kqShiftRuleEntity.getLeaveearlymins();
graveLeaveEarlyMins = kqShiftRuleEntity.getGraveleaveearlymins();
absenteeismMins = kqShiftRuleEntity.getAbsenteeismmins();
forgotCheckMins = kqShiftRuleEntity.getForgotcheckmins();
forgotBeginWorkCheckMins = kqShiftRuleEntity.getForgotBeginWorkCheckMins();
boolean beforeBegin = !new KQFormatBiz().needCal(workBeginDate,workBeginTime);
if(beforeBegin) {//还未到上班时间,不用计算任何状态
kqLog.writeLog("还未到上班时间,不用计算任何状态");
beLateMins = 0;
graveBeLateMins = 0;
leaveEarlyMins = 0;
graveLeaveEarlyMins = 0;
absenteeismMins = 0;
forgotCheckMins = 0;
forgotBeginWorkCheckMins = 0;
}else if(!new KQFormatBiz().needCal(workEndDate,workEndTime)) {//还未到下班时间
kqLog.writeLog("还未到上班时间");
leaveEarlyMins = 0;
graveLeaveEarlyMins = 0;
forgotCheckMins = 0;
}
if (workTime.getIsExclude()) {//无需考勤人员没有异常状态
beLateMins = 0;
graveBeLateMins = 0;
leaveEarlyMins = 0;
graveLeaveEarlyMins = 0;
absenteeismMins = 0;
forgotCheckMins = 0;
forgotBeginWorkCheckMins = 0;
}
//计算实际出勤时间(出差公出算出勤)=应出勤-旷工-请假-迟到-早退
attendanceMins = workMins - absenteeismMins-leaveMins-beLateMins-graveBeLateMins-leaveEarlyMins-graveLeaveEarlyMins;
// 如果没有开启"漏签是否算实际出勤"开关,则漏签不算实际出勤时长
if("0".equals(nosign_is_absent)) {
attendanceMins = attendanceMins-forgotCheckMins-forgotBeginWorkCheckMins;
}
if(beforeBegin || attendanceMins < 0) {//还未到上班时间,不用计算任何状体
attendanceMins = 0;
}
kqLog.info("实际出勤计算公式" + "实际出勤=应出勤- 旷工-请假-迟到-早退 userId" + userId + "kqDate==" + kqDate+":hostIps:"+hostIps+":uuid::"+uuid);
kqLog.info("实际出勤计算结果" + attendanceMins + "=" + workMins + "- " + absenteeismMins + "-" + leaveMins + "-" + (beLateMins + graveBeLateMins) + "-" + (leaveEarlyMins - graveLeaveEarlyMins)+" userId" + userId + "kqDate==" + kqDate+":hostIps:"+hostIps+":uuid::"+uuid);
if(this.writeLog) {
logInfo.put(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10005303,weaver.general.ThreadVarLanguage.getLang())+"",""+weaver.systeminfo.SystemEnv.getHtmlLabelName(130566,weaver.general.ThreadVarLanguage.getLang())+"="+weaver.systeminfo.SystemEnv.getHtmlLabelName(132056,weaver.general.ThreadVarLanguage.getLang())+"- "+weaver.systeminfo.SystemEnv.getHtmlLabelName(20085,weaver.general.ThreadVarLanguage.getLang())+"-"+weaver.systeminfo.SystemEnv.getHtmlLabelName(670,weaver.general.ThreadVarLanguage.getLang())+"-"+weaver.systeminfo.SystemEnv.getHtmlLabelName(20081,weaver.general.ThreadVarLanguage.getLang())+"-"+weaver.systeminfo.SystemEnv.getHtmlLabelName(20082,weaver.general.ThreadVarLanguage.getLang())+"");
logInfo.put(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10005304,weaver.general.ThreadVarLanguage.getLang())+"",attendanceMins+"="+workMins+"- "+absenteeismMins+"-"+leaveMins+"-"+(beLateMins+graveBeLateMins)+"-"+(leaveEarlyMins-graveLeaveEarlyMins));
}
//判断当天考勤状态
// if (beLateMins > 0) {
// status = ButtonStatusEnum.BELATE.getStatusCode();
// } else if (leaveEarlyMins > 0) {
// status = ButtonStatusEnum.LEAVEERALY.getStatusCode();
// } else if (absenteeismMins > 0) {
// status = ButtonStatusEnum.ABSENT.getStatusCode();
// } else if (forgotCheckMins > 0) {
// status = ButtonStatusEnum.NOSIGN.getStatusCode();
// } else {
// status = ButtonStatusEnum.NORMAL.getStatusCode();
// }
String groupid = Util.null2String(workTime.getGroupId());
String serialid = Util.null2String(workTime.getSerialId());
params.add(userId);
params.add(kqDate);
params.add(groupid.length() == 0 ? null : groupid);
params.add(serialid.length() == 0 ? null : serialid);
params.add(i);
params.add(workBeginDate);
params.add(kqTimesArrayComInfo.turn48to24Time(ori_workBeginTime));
params.add(workEndDate);
params.add(kqTimesArrayComInfo.turn48to24Time(ori_workEndTime));
params.add(workMins);
params.add(signInDate);
params.add(signInTime);
params.add(signInId.length() == 0 ? null : signInId);
params.add(signOutDate);
params.add(signOutTime);
params.add(signOutId.length() == 0 ? null : signOutId);
kqLog.info("format in >>>>>userId" + userId + "kqDate==" + kqDate+":hostIps:"+hostIps+":uuid::"+uuid
+":signInDate:"+signInDate+":signInTime::"+signInTime+":signOutDate:"+signOutDate+":signOutTime::"+signOutTime);
params.add(signMins);
params.add(attendanceMins);
params.add(beLateMins);
params.add(graveBeLateMins);
params.add(leaveEarlyMins);
params.add(graveLeaveEarlyMins);
params.add(absenteeismMins);
params.add(forgotCheckMins);
params.add(leaveMins);
params.add(JSONObject.toJSONString(leaveInfo));
params.add(evectionMins);
params.add(outMins);
params.add(forgotBeginWorkCheckMins);
params.add(JSONObject.toJSONString(otherinfo));
Map<String,Object> definedFieldInfo = new KQFormatBiz().getDefinedField();
String[] definedFields = Util.splitString(Util.null2String(definedFieldInfo.get("definedField")),",");
KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo();
for (int tmpIdx = 0; tmpIdx<definedFields.length; tmpIdx++) {
String fieldname = definedFields[tmpIdx];
// System.out.println("fieldname=="+fieldname);
String fieldid = KQReportFieldComInfo.field2Id.get(fieldname);
String formula = kqReportFieldComInfo.getFormula(fieldid);
if(formula.length()==0)continue;
String expression = formula;
Pattern pattern = Pattern.compile("\\$\\{[^}]+\\}");
Matcher matcher = pattern.matcher(expression);
Map<String, Object> env = new HashMap<>();
String keyname = "";
while (matcher.find()) {
String key = matcher.group(0);
keyname = key.substring(2, key.length() - 1).trim();
expression = matcher.replaceAll(keyname);
env.put(keyname, keyname.equals("beLateMins")?beLateMins:leaveEarlyMins);
}
Expression compiledExp = AviatorEvaluator.compile(expression,true);
String value = Util.null2String(compiledExp.execute(env));
params.add(value);
if(value.equals("1")) {
params.add(keyname.equals("beLateMins") ? beLateMins : leaveEarlyMins);
}else{
params.add("0");
}
}
kqLog.info("format in >>>>>userId" + userId + "kqDate==" + kqDate+":hostIps:"+hostIps+":uuid::"+uuid
+":params:"+JSON.toJSONString(params));
lsParam.add(params);
}
} catch (Exception e) {
writeLog(e);
kqLog.info(e);
}
return lsParam;
}
public void setWriteLog(boolean writeLog) {
this.writeLog = writeLog;
}
public Map<String,Object> getLogInfo() {
return logInfo;
}
public void formatDateByKQDate(String kqdate) {
KQFormatBiz kqFormatBiz = new KQFormatBiz();
kqFormatBiz.formatDateByKQDate(kqdate);
}
public void formatDateByGroupId(String groupid, String kqdate) {
KQFormatBiz kqFormatBiz = new KQFormatBiz();
kqFormatBiz.formatDateByGroupId(groupid, kqdate);
}
public void formatDate(String resourceid, String kqdate) {
KQFormatBiz kqFormatBiz = new KQFormatBiz();
kqFormatBiz.formatDate(resourceid, kqdate);
}
public void delFormatData(String resourceid, String kqdate) {
KQFormatBiz kqFormatBiz = new KQFormatBiz();
kqFormatBiz.delFormatData(resourceid, kqdate);
}
/**
*
* @param userId
* @param kqDate
* @param nonlsParam
* @param workTime
* @param workFlowInfo
*/
public void formatNonWork(String userId, String kqDate, List<Object> nonlsParam, WorkTimeEntity workTime, Map<String, Object> workFlowInfo) {
String signInId = "";
String signInDate = "";
String signInTime = "";
String signOutId = "";
String signOutDate = "";
String signOutTime = "";
int beginIdx = 0;
int endIdx = 0;
int leaveMins = 0;//请假时长
Map<String,Object> leaveInfo = new HashMap<>();//请假信息
int evectionMins = 0;//出差时长
int outMins = 0;//公出时长
int otherMins = 0;//异常流程时长
int[] dayMins = new int[2880];//一天所有分钟数
List<Object> workFlow = null;
String dateKey = userId + "|" + kqDate;
KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo();
String preDate = DateUtil.addDate(kqDate, -1);//上一天日期
String nextDate = DateUtil.addDate(kqDate, 1);//下一天日期
WorkTimeEntity pre_workTime = new KQWorkTime().getWorkTime(userId, preDate);
List<TimeScopeEntity> pre_lsSignTime = new ArrayList<>();
if (pre_workTime != null) {
pre_lsSignTime = pre_workTime.getSignTime();//允许打卡时间
pre_lsSignTime = pre_lsSignTime != null ? pre_lsSignTime : new ArrayList<>();
}
WorkTimeEntity next_workTime = new KQWorkTime().getWorkTime(userId, nextDate);
List<TimeScopeEntity> next_lsSignTime = new ArrayList<>();
if (next_workTime != null) {
next_lsSignTime = next_workTime.getSignTime();//允许打卡时间
next_lsSignTime = next_lsSignTime != null ? next_lsSignTime : new ArrayList<>();
}
List<Object> lsCheckInfo = new KQFormatSignData().getNonWorkSignInfo(userId,preDate,kqDate,pre_lsSignTime,next_lsSignTime);
for (int j = 0; lsCheckInfo != null && j < lsCheckInfo.size(); j++) {
Map<String, Object> checkInfo = (Map<String, Object>) lsCheckInfo.get(j);
String signStatus = Util.null2String(checkInfo.get("signStatus"));
String signId = Util.null2String(checkInfo.get("signId"));
String signDate = Util.null2String(checkInfo.get("signDate"));
String signTime = Util.null2String(checkInfo.get("signTime"));
if (checkInfo.get("signType").equals("1")) {//签到
signInId = signId;
signInDate = signDate;
signInTime = signTime;
} else if (checkInfo.get("signType").equals("2")) {//签退
signOutId = signId;
signOutDate = signDate;
signOutTime = signTime;
}
}
if (workFlowInfo.get(dateKey) != null) {
workFlow = (List<Object>) workFlowInfo.get(dateKey);
}
for (int j = 0; workFlow != null && j < workFlow.size(); j++) {
Map<String, Object> data = (Map<String, Object>) workFlow.get(j);
String flowType = Util.null2String(data.get("flowtype"));
String newLeaveType = Util.null2String(data.get("newleavetype"));
beginIdx = kqTimesArrayComInfo.getArrayindexByTimes(Util.null2String(data.get("begintime")));
endIdx = kqTimesArrayComInfo.getArrayindexByTimes(Util.null2String(data.get("endtime")));
if(flowType.equals(FlowReportTypeEnum.EVECTION.getFlowType())){
Arrays.fill(dayMins, beginIdx, endIdx, 7);//出差抵扣时段标识 7
}else if(flowType.equals(FlowReportTypeEnum.OUT.getFlowType())){
Arrays.fill(dayMins, beginIdx, endIdx, 8);//公出抵扣时段标识 8
}else if(flowType.equalsIgnoreCase(FlowReportTypeEnum.LEAVE.getFlowType())){
if (endIdx > beginIdx) {
Arrays.fill(dayMins, beginIdx, endIdx, 5);//流程抵扣时段标识 5
int tmpBeginIdx = beginIdx;
int tmpEndIdx = endIdx;
Integer val = 0;
if(leaveInfo.get(newLeaveType)==null){
leaveInfo.put(newLeaveType,val);
}else{
val = (Integer) leaveInfo.get(newLeaveType);
}
if(tmpEndIdx>tmpBeginIdx){
leaveInfo.put(newLeaveType,val+(tmpEndIdx-tmpBeginIdx));
}
}
}else{
if (endIdx > beginIdx) {
Arrays.fill(dayMins, beginIdx, endIdx, 99);//异常流程抵扣时段标识99
}
}
}
for (int j = 0; j < 2880; j++) {
switch (dayMins[j]) {
case 5:
leaveMins++;
break;
case 7:
evectionMins++;
break;
case 8:
outMins++;
break;
case 99:
otherMins++;
break;
default:
break;
}
}
nonlsParam.add(userId);
nonlsParam.add(kqDate);
nonlsParam.add(workTime.getGroupId());
nonlsParam.add(0);
nonlsParam.add(signInDate);
nonlsParam.add(signInTime);
nonlsParam.add(signInId.length() == 0 ? null : signInId);
nonlsParam.add(signOutDate);
nonlsParam.add(signOutTime);
nonlsParam.add(signOutId.length() == 0 ? null : signOutId);
nonlsParam.add(leaveMins);
nonlsParam.add(JSONObject.toJSONString(leaveInfo));
nonlsParam.add(evectionMins);
nonlsParam.add(outMins);
}
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,921 @@
package com.engine.kq.biz;
import com.engine.kq.entity.KQOvertimeRulesDetailEntity;
import com.engine.kq.log.KQLog;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import weaver.conn.RecordSet;
import weaver.general.Util;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import weaver.wechat.util.DateUtil;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
/**
*
*/
public class KQOvertimeRulesBiz {
private static KQLog logger = new KQLog();//用于记录日志信息
private static KQOvertimeRulesDetailEntity kqOvertimeRulesDetail = new KQOvertimeRulesDetailEntity();//加班规则实体类
/**
* ID
*
* @param resourceId ID
* IDID
* @param date
* ()
* @return 1-2-3--1-
*/
public static int getChangeType(String resourceId, String date) {
int changeType = -1;
/*获取考勤组的ID因为考勤组有有效期所以需要传入日期*/
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
String groupId = kqGroupMemberComInfo.getKQGroupId(resourceId, date);
/*该人员不存在于任意一个考勤组中,请为其设置考勤组*/
if(groupId.equals("")){
logger.writeLog("该人员不存在于任意一个考勤组中请为其设置考勤组。resourceId=" + resourceId + ",date=" + date);
}
changeType = KQHolidaySetBiz.getChangeType(groupId, date);
if (changeType != 1 && changeType != 2 && changeType != 3) {
KQWorkTime kqWorkTime = new KQWorkTime();
changeType = kqWorkTime.isWorkDay(resourceId, date) ? 2 : 3;
}
return changeType;
}
/**
*
*
* @param resourceId
* IDIDID
* @param date
*
* @return 0-1-
*/
public static int getOvertimeEnable(String resourceId, String date) {
int overtimeEnable = 0;
kqOvertimeRulesDetail = getOvertimeRulesDetail(resourceId, date);
overtimeEnable = kqOvertimeRulesDetail.getOvertimeEnable();
return overtimeEnable;
}
/**
*
* 1-
* 2-
* 3-
*
* @param resourceId
* IDIDID
* @param date
*
* @return -1
*/
public static int getComputingMode(String resourceId, String date) {
int computingMode = -1;
kqOvertimeRulesDetail = getOvertimeRulesDetail(resourceId, date);
computingMode = kqOvertimeRulesDetail.getComputingMode();
return computingMode;
}
/**
*
*
* @param resourceId
* IDIDID
* @param date
*
* @return -1
*/
public static int getStartTime(String resourceId, String date) {
int startTime = -1;
kqOvertimeRulesDetail = getOvertimeRulesDetail(resourceId, date);
startTime = kqOvertimeRulesDetail.getStartTime();
return startTime;
}
/**
*
*
* @param resourceId
* IDIDID
* @param date
*
* @return -1
*/
public static int getMinimumLen(String resourceId, String date) {
int minimumUnit = -1;
kqOvertimeRulesDetail = getOvertimeRulesDetail(resourceId, date);
minimumUnit = kqOvertimeRulesDetail.getMinimumLen();
return minimumUnit;
}
/**
*
* 0-1-
*
* @param resourceId
* IDIDID
* @param date
*
* @return
*/
public static int getPaidLeaveEnable(String resourceId, String date) {
int paidLeaveEnable = 0;
kqOvertimeRulesDetail = getOvertimeRulesDetail(resourceId, date);
paidLeaveEnable = kqOvertimeRulesDetail.getPaidLeaveEnable();
return paidLeaveEnable;
}
/**
*
*
* @param resourceId
* IDIDID
* @param date
*
* @return -1
*/
public static double getLenOfOvertime(String resourceId, String date) {
double lenOfOvertime = -1;
kqOvertimeRulesDetail = getOvertimeRulesDetail(resourceId, date);
lenOfOvertime = kqOvertimeRulesDetail.getLenOfOvertime();
BigDecimal bigDecimal = new BigDecimal(lenOfOvertime);
lenOfOvertime = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
return lenOfOvertime;
}
/**
*
*
* @param resourceId
* IDIDID
* @param date
*
* @return -1
*/
public static double getLenOfLeave(String resourceId, String date) {
double lenOfLeave = -1;
kqOvertimeRulesDetail = getOvertimeRulesDetail(resourceId, date);
lenOfLeave = kqOvertimeRulesDetail.getLenOfLeave();
BigDecimal bigDecimal = new BigDecimal(lenOfLeave);
lenOfLeave = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
return lenOfLeave;
}
/**
*
*
* @param resourceId
* IDIDID
* @param date
*
* @return 0-1-
*/
public static int getHasRestTime(String resourceId, String date) {
int hasRestTime = 0;
kqOvertimeRulesDetail = getOvertimeRulesDetail(resourceId, date);
hasRestTime = kqOvertimeRulesDetail.getHasRestTime();
return hasRestTime;
}
/**
*
* startType0-1-
* startTime
* endType0-1-
* endTime
*
* @param resourceId
* IDIDID
* @param date
*
* @return
*/
public static List<String[]> getRestTimeList(String resourceId, String date) {
List<String[]> restTimeList = new ArrayList<String[]>();
/**
*
*/
String lastDay = DateUtil.addDay(date, -1, "yyyy-MM-dd");
kqOvertimeRulesDetail = getOvertimeRulesDetail(resourceId, lastDay);
int overtimeEnable = kqOvertimeRulesDetail.getOvertimeEnable();
int hasRestTime = kqOvertimeRulesDetail.getHasRestTime();
if (overtimeEnable == 1 && hasRestTime == 1) {
int dayType = kqOvertimeRulesDetail.getDayType();
int ruleId = kqOvertimeRulesDetail.getRuleId();
String sql = "select * from kq_OvertimeRestTime where ruleId=" + ruleId + " and dayType=" + dayType;
RecordSet recordSet = new RecordSet();
recordSet.executeQuery(sql);
while (recordSet.next()) {
String startType = recordSet.getString("startType");
String startTime = recordSet.getString("startTime");
String endType = recordSet.getString("endType");
String endTime = recordSet.getString("endTime");
if (startType.equals("0") && endType.equals("1")) {
String[] str = new String[]{"00:00", endTime};
restTimeList.add(str);
} else if (startType.equals("1") && endType.equals("1")) {
String[] str = new String[]{startTime, endTime};
restTimeList.add(str);
}
}
}
kqOvertimeRulesDetail = getOvertimeRulesDetail(resourceId, date);
overtimeEnable = kqOvertimeRulesDetail.getOvertimeEnable();
hasRestTime = kqOvertimeRulesDetail.getHasRestTime();
if (overtimeEnable == 1 && hasRestTime == 1) {
int dayType = kqOvertimeRulesDetail.getDayType();
int ruleId = kqOvertimeRulesDetail.getRuleId();
String sql = "select * from kq_OvertimeRestTime where ruleId=" + ruleId + " and dayType=" + dayType;
RecordSet recordSet = new RecordSet();
recordSet.executeQuery(sql);
while (recordSet.next()) {
String startType = recordSet.getString("startType");
String startTime = recordSet.getString("startTime");
String endType = recordSet.getString("endType");
String endTime = recordSet.getString("endTime");
if (startType.equals("0") && endType.equals("0")) {
String[] str = new String[]{startTime, endTime};
restTimeList.add(str);
} else if (startType.equals("0") && endType.equals("1")) {
String[] str = new String[]{startTime, "24:00"};
restTimeList.add(str);
}
}
}
return restTimeList;
}
/**
*
*
* @param resourceId
* IDIDID
* @param changeType 1-2-3-
* @return
*/
private static KQOvertimeRulesDetailEntity getOvertimeRulesDetail(String resourceId, String date) {
KQOvertimeRulesDetailEntity kqOvertimeRulesDetail = new KQOvertimeRulesDetailEntity();
try {
/*获取考勤组的ID因为考勤组有有效期所以需要传入日期*/
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
String groupIds = kqGroupMemberComInfo.getKQGroupId(resourceId, date);
if (groupIds.equals("")) {
/*该人员不存在于任意一个考勤组中,请为其设置考勤组*/
logger.writeLog("该人员不存在于任意一个考勤组中请为其设置考勤组。resourceId=" + resourceId + ",date=" + date);
}
int changeType = getChangeType(resourceId, date);
/*获取当前日期的日期类型错误*/
if (changeType != 1 && changeType != 2 && changeType != 3) {
logger.writeLog("获取当前日期的日期类型错误。resourceId=" + resourceId + ",date=" + date + ",changeType=" + changeType);
}
int overtimeRuleId = 0;//加班规则的ID
RecordSet recordSet = new RecordSet();
String sql = "select id from kq_OvertimeRules where (isDelete is null or isDelete !=1) ";
if (recordSet.getDBType().equalsIgnoreCase("sqlserver")) {
sql += " and ','+groupIds+',' like '%," + groupIds + ",%'";
} else if (recordSet.getDBType().equalsIgnoreCase("mysql")) {
sql += " and concat(',',groupIds,',') like '%," + groupIds + ",%'";
} else {
sql += " and ','||groupIds||',' like '%," + groupIds + ",%'";
}
recordSet.executeQuery(sql);
if (recordSet.next()) {
overtimeRuleId = recordSet.getInt("id");
sql = "select * from kq_OvertimeRulesDetail where ruleId=" + overtimeRuleId + " and dayType=" + changeType;
recordSet.executeQuery(sql);
if (recordSet.next()) {
int ruleId = recordSet.getInt("ruleId");
int dayType = recordSet.getInt("dayType");
int overtimeEnable = recordSet.getInt("overtimeEnable");
int computingMode = recordSet.getInt("computingMode");
int startTime = recordSet.getInt("startTime");
int minimumLen = recordSet.getInt("minimumLen");
int paidLeaveEnable = recordSet.getInt("paidLeaveEnable");
double lenOfOvertime = Util.getDoubleValue(recordSet.getString("lenOfOvertime"), 1.00);
double lenOfLeave = Util.getDoubleValue(recordSet.getString("lenOfLeave"), 1.00);
int hasRestTime = Util.getIntValue(recordSet.getString("hasRestTime"));
kqOvertimeRulesDetail.setRuleId(ruleId);
kqOvertimeRulesDetail.setDayType(dayType);
kqOvertimeRulesDetail.setOvertimeEnable(overtimeEnable);
kqOvertimeRulesDetail.setComputingMode(computingMode);
kqOvertimeRulesDetail.setStartTime(startTime);
kqOvertimeRulesDetail.setMinimumLen(minimumLen);
kqOvertimeRulesDetail.setPaidLeaveEnable(paidLeaveEnable);
kqOvertimeRulesDetail.setLenOfOvertime(lenOfOvertime);
kqOvertimeRulesDetail.setLenOfLeave(lenOfLeave);
kqOvertimeRulesDetail.setHasRestTime(hasRestTime);
}
} else {
logger.writeLog("该人员所属的考勤组没有设置过任何加班规则请为其设置加班规则。resourceId=" + resourceId + ",date="+date+",changeType=" + changeType);
}
} catch (Exception e) {
logger.writeLog("根据人员ID获取加班规则的规则内容出错。resourceId=" + resourceId + ",date=" + date);
e.printStackTrace();
}
return kqOvertimeRulesDetail;
}
/**
*
*
* @param params
* @return
*/
public static int addOvertimeRules(Map<String, Object> params, User user) {
/*是否保存成功*/
boolean flag = false;
/*新插入的加班规则的ID*/
int ruleId = -1;
try {
boolean canAdd = HrmUserVarify.checkUserRight("KQOvertimeRulesAdd:Add", user);//是否具有新建权限
if (!canAdd) {
logger.info(user.getLastname() + "暂时没有权限!");
return -1;
}
/*加班规则名称*/
String name = Util.null2String(params.get("name"));
/*考勤组的ID*/
String groupIds = Util.null2String(params.get("groupIds"));
/*工作日是否允许加班0-不允许、1-允许*/
int overtimeEnable2 = Util.getIntValue((String) params.get("overtimeEnable2"), 1);
/*工作日的加班方式1-需审批以审批单为准、2-需审批以打卡为准但是不能超过审批时长、3-无需审批,根据打卡时间计算加班时长*/
int computingMode2 = Util.getIntValue((String) params.get("computingMode2"), 1);
/*工作日下班多少分钟后开始计算加班*/
int startTime2 = Util.getIntValue((String) params.get("startTime2"), 30);
/*工作日最小加班时长*/
int minimumLen2 = Util.getIntValue((String) params.get("minimumLen2"), 30);
/*工作日是否允许加班转调休*/
int paidLeaveEnable2 = Util.getIntValue((String) params.get("paidLeaveEnable2"), 0);
/*工作日加班转调休比例中的加班时长*/
int lenOfOvertime2 = Util.getIntValue((String) params.get("lenOfOvertime2"), 1);
/*工作日加班转调休比例中的调休时长*/
int lenOfLeave2 = Util.getIntValue((String) params.get("lenOfLeave2"), 1);
/*休息日是否允许加班0-不允许、1-允许*/
int overtimeEnable3 = Util.getIntValue((String) params.get("overtimeEnable3"), 1);
/*休息日的加班方式1-需审批以审批单为准、2-需审批以打卡为准但是不能超过审批时长、3-无需审批,根据打卡时间计算加班时长*/
int computingMode3 = Util.getIntValue((String) params.get("computingMode3"), 1);
/*休息日的最小加班时长*/
int minimumLen3 = Util.getIntValue((String) params.get("minimumLen3"), 30);
/*休息日是否允许加班转调休*/
int paidLeaveEnable3 = Util.getIntValue((String) params.get("paidLeaveEnable3"), 0);
/*休息日加班转调休比例中的加班时长*/
int lenOfOvertime3 = Util.getIntValue((String) params.get("lenOfOvertime3"), 1);
/*休息日加班转调休比例中的调休时长*/
int lenOfLeave3 = Util.getIntValue((String) params.get("lenOfLeave3"), 1);
/*休息日是否有休息时间*/
int hasRestTime3 = Util.getIntValue((String) params.get("hasRestTime3"), 0);
/*节假日是否允许加班0-不允许、1-允许*/
int overtimeEnable1 = Util.getIntValue((String) params.get("overtimeEnable1"), 1);
/*节假日的加班方式1-需审批以审批单为准、2-需审批以打卡为准但是不能超过审批时长、3-无需审批,根据打卡时间计算加班时长*/
int computingMode1 = Util.getIntValue((String) params.get("computingMode1"), 1);
/*节假日的最小加班时长*/
int minimumLen1 = Util.getIntValue((String) params.get("minimumLen1"), 30);
/*节假日是否允许加班转调休*/
int paidLeaveEnable1 = Util.getIntValue((String) params.get("paidLeaveEnable1"), 0);
/*节假日加班转调休比例中的加班时长*/
int lenOfOvertime1 = Util.getIntValue((String) params.get("lenOfOvertime1"), 1);
/*节假日加班转调休比例中的调休时长*/
int lenOfLeave1 = Util.getIntValue((String) params.get("lenOfLeave1"), 1);
/*节假日是否有休息时间*/
int hasRestTime1 = Util.getIntValue((String) params.get("hasRestTime1"), 0);
int paidLeaveEnableType2 = Util.getIntValue((String) params.get("paidLeaveEnableType2"), 2);
int paidLeaveEnableType3 = Util.getIntValue((String) params.get("paidLeaveEnableType3"), 2);
int paidLeaveEnableType1 = Util.getIntValue((String) params.get("paidLeaveEnableType1"), 2);
int paidLeaveEnableFlowType2 = Util.getIntValue((String) params.get("paidLeaveEnableFlowType2"), 1);
int paidLeaveEnableFlowType3 = Util.getIntValue((String) params.get("paidLeaveEnableFlowType3"), 1);
int paidLeaveEnableFlowType1 = Util.getIntValue((String) params.get("paidLeaveEnableFlowType1"), 1);
/*获取今天的日期*/
Calendar today = Calendar.getInstance();
String currentDate = Util.add0(today.get(Calendar.YEAR), 4) + "-"
+ Util.add0(today.get(Calendar.MONTH) + 1, 2) + "-"
+ Util.add0(today.get(Calendar.DAY_OF_MONTH), 2);
String tomorrowDate = weaver.common.DateUtil.addDate(currentDate, 1);
/*校验休息日排除休息时间的设置是否正确*/
if (hasRestTime3 == 1) {
int restTimeLen3 = Util.getIntValue((String) params.get("restTimeLen3"), 0);
List<String> fromList = new ArrayList<String>();
List<String> toList = new ArrayList<String>();
for (int i = 0; i < restTimeLen3; i++) {
String startType = "0";
String startTime = Util.getIntValues((String) params.get("startTime3_" + i));
String endType = "0";
String endTime = Util.getIntValues((String) params.get("endTime3_" + i));
String fromDateTime = (startType.equals("0") ? currentDate : tomorrowDate) + " " + startTime + ":00";
String toDateTime = (endType.equals("0") ? currentDate : tomorrowDate) + " " + endTime + ":00";
if (fromDateTime.compareTo(toDateTime) > 0) {
logger.info("结束时间必须大于开始时间fromDateTime=" + fromDateTime + "toDateTime=" + toDateTime);
return -1;
}
fromList.add(fromDateTime);
toList.add(toDateTime);
}
/*利用冒泡法对日期时间进行排序*/
for (int i = 0; i < fromList.size(); i++) {
for (int j = 0; j < fromList.size() - i - 1; j++) {
if (fromList.get(j).compareTo(fromList.get(j + 1)) > 0) {
String str = fromList.get(j);
fromList.set(j, fromList.get(j + 1));
fromList.set(j + 1, str);
str = toList.get(j);
toList.set(j, toList.get(j + 1));
toList.set(j + 1, str);
}
}
}
/*根据排序后的数据判断是否时间段有重叠*/
for (int i = 0; i < fromList.size() - 1; i++) {
if (fromList.get(i + 1).compareTo(toList.get(i)) < 0) {
logger.info("休息时段不能交叉");
return -1;
}
}
}
/*校验休息日排除休息时间的设置是否正确*/
if (hasRestTime1 == 1) {
int restTimeLen1 = Util.getIntValue((String) params.get("restTimeLen1"), 0);
List<String> fromList = new ArrayList<String>();
List<String> toList = new ArrayList<String>();
for (int i = 0; i < restTimeLen1; i++) {
String startType = "0";
String startTime = Util.getIntValues((String) params.get("startTime1_" + i));
String endType = "0";
String endTime = Util.getIntValues((String) params.get("endTime1_" + i));
String fromDateTime = (startType.equals("0") ? currentDate : tomorrowDate) + " " + startTime + ":00";
String toDateTime = (endType.equals("0") ? currentDate : tomorrowDate) + " " + endTime + ":00";
if (fromDateTime.compareTo(toDateTime) > 0) {
logger.info("结束时间必须大于开始时间fromDateTime=" + fromDateTime + "toDateTime=" + toDateTime);
return -1;
}
fromList.add(fromDateTime);
toList.add(toDateTime);
}
/*利用冒泡法对日期时间进行排序*/
for (int i = 0; i < fromList.size(); i++) {
for (int j = 0; j < fromList.size() - i - 1; j++) {
if (fromList.get(j).compareTo(fromList.get(j + 1)) > 0) {
String str = fromList.get(j);
fromList.set(j, fromList.get(j + 1));
fromList.set(j + 1, str);
str = toList.get(j);
toList.set(j, toList.get(j + 1));
toList.set(j + 1, str);
}
}
}
/*根据排序后的数据判断是否时间段有重叠*/
for (int i = 0; i < fromList.size() - 1; i++) {
if (fromList.get(i + 1).compareTo(toList.get(i)) < 0) {
logger.info("休息时段不能交叉");
return -1;
}
}
}
String sql = "insert into kq_OvertimeRules(name,groupIds,isDelete) values(?,?,0)";
RecordSet recordSet = new RecordSet();
flag = recordSet.executeUpdate(sql, name, groupIds);
if (!flag) {
logger.info("加班规则保存失败");//保存失败
return -1;
}
sql = "select max(id) maxId from kq_OvertimeRules";
recordSet.executeQuery(sql);
if (recordSet.next()) {
ruleId = recordSet.getInt("maxId");
}
if (ruleId != 0) {
sql = "insert into kq_OvertimeRulesDetail(ruleId,dayType,overtimeEnable,computingMode,startTime,minimumLen,paidLeaveEnable,lenOfOvertime,lenOfLeave,hasRestTime,paidleaveenabletype,paidleaveenableflowtype) " +
"values(?,?,?,?,?,?,?,?,?,?,?,?)";
/**
*
*/
flag = recordSet.executeUpdate(sql, ruleId, 2, overtimeEnable2, computingMode2, startTime2, minimumLen2, paidLeaveEnable2, lenOfOvertime2, lenOfLeave2, 0,paidLeaveEnableType2,paidLeaveEnableFlowType2);
if (!flag) {
logger.info("工作日加班规则保存失败");//保存失败
return -1;
}
/**
*
*/
flag = recordSet.executeUpdate(sql, ruleId, 3, overtimeEnable3, computingMode3, 0, minimumLen3, paidLeaveEnable3, lenOfOvertime3, lenOfLeave3, hasRestTime3,paidLeaveEnableType3,paidLeaveEnableFlowType3);
if (!flag) {
logger.info("休息日加班规则保存失败");//保存失败
return -1;
}
if (hasRestTime3 == 1) {
int restTimeLen3 = Util.getIntValue((String) params.get("restTimeLen3"), 0);
for (int i = 0; i < restTimeLen3; i++) {
String startType = "0";
String startTime = Util.getIntValues((String) params.get("startTime3_" + i));
String endType = "0";
String endTime = Util.getIntValues((String) params.get("endTime3_" + i));
String restTimeSql = "insert into kq_OvertimeRestTime(ruleId,dayType,startType,startTime,endType,endTime) values(?,?,?,?,?,?)";
flag = recordSet.executeUpdate(restTimeSql, ruleId, 3, startType, startTime, endType, endTime);
if (!flag) {
logger.info("休息日加班规则休息时段保存失败");//保存失败
return -1;
}
}
}
/**
*
*/
flag = recordSet.executeUpdate(sql, ruleId, 1, overtimeEnable1, computingMode1, 0, minimumLen1, paidLeaveEnable1, lenOfOvertime1, lenOfLeave1, hasRestTime1,paidLeaveEnableType1,paidLeaveEnableFlowType1);
if (!flag) {
logger.info("节假日加班规则保存失败");
return -1;
}
if (hasRestTime1 == 1) {
int restTimeLen1 = Util.getIntValue((String) params.get("restTimeLen1"), 0);
for (int i = 0; i < restTimeLen1; i++) {
String startType = "0";
String startTime = Util.getIntValues((String) params.get("startTime1_" + i));
String endType = "0";
String endTime = Util.getIntValues((String) params.get("endTime1_" + i));
String restTimeSql = "insert into kq_OvertimeRestTime(ruleId,dayType,startType,startTime,endType,endTime) values(?,?,?,?,?,?)";
flag = recordSet.executeUpdate(restTimeSql, ruleId, 1, startType, startTime, endType, endTime);
if (!flag) {
logger.info("节假日加班规则休息时段保存失败");
return -1;
}
}
}
}
} catch (Exception e) {
ruleId = -1;
}
return ruleId;
}
/************************************************加班单位的相关接口************************************************/
/**
*
* 1-
* 2-
* 3-
* 4-
* 5-
* 6-
* @return -1
*/
public static int getMinimumUnit() {
int minimumUnit = -1;
String sql = "select * from kq_OvertimeUnit where (isDelete is null or isDelete !=1) and id=1";
RecordSet recordSet = new RecordSet();
recordSet.executeQuery(sql);
if (recordSet.next()) {
minimumUnit = recordSet.getInt("minimumUnit");
}
return minimumUnit;
}
/**
*
* 1-
* 2-
* 3-
* 4-
* 5-
* 6-
* @return -1
*/
public static Map<String,String> getMinimumUnitAndConversion() {
Map<String,String> map = Maps.newHashMap();
int minimumUnit = -1;
int overtimeConversion = -1;
String sql = "select * from kq_OvertimeUnit where (isDelete is null or isDelete !=1) and id=1";
RecordSet recordSet = new RecordSet();
recordSet.executeQuery(sql);
if (recordSet.next()) {
minimumUnit = recordSet.getInt("minimumUnit");
overtimeConversion = recordSet.getInt("overtimeConversion");
map.put("minimumUnit", ""+minimumUnit);
map.put("overtimeConversion", ""+overtimeConversion);
}
return map;
}
/**
*
*
* @return -1
*/
public static double getHoursToDay() {
double hoursToDay = -1.00;
String sql = "select * from kq_OvertimeUnit where (isDelete is null or isDelete !=1) and id=1";
RecordSet recordSet = new RecordSet();
recordSet.executeQuery(sql);
if (recordSet.next()) {
hoursToDay = recordSet.getDouble("hoursToDay");
}
BigDecimal bigDecimal = new BigDecimal(hoursToDay);
return bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
*
* 1- 2-
* @return
*/
public static String getTimeselection() {
int timeselection = 1;
String sql = "select * from kq_OvertimeUnit where (isDelete is null or isDelete !=1) and id=1";
RecordSet recordSet = new RecordSet();
recordSet.executeQuery(sql);
if (recordSet.next()) {
timeselection = recordSet.getInt("timeselection");
}
if(timeselection == 1 || timeselection == 2){
return ""+timeselection;
}else{
return "1";
}
}
/**
*
* @param resourceId
* @param date
* @param changeTypeMap
* @return
*/
public static void getOverTimeData(String resourceId, String date,
Map<String,Integer> changeTypeMap,Map<String,KQOvertimeRulesDetailEntity> overRulesDetailMap,Map<String,List<String[]>> restTimeMap,Map<String,Integer> computingModeMap) {
int changeType = -1;
/*获取考勤组的ID因为考勤组有有效期所以需要传入日期*/
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
String groupId = Util.null2s(kqGroupMemberComInfo.getKQGroupId(resourceId, date),"");
/*该人员不存在于任意一个考勤组中,请为其设置考勤组*/
if(groupId.length() == 0){
logger.writeLog("该人员不存在于任意一个考勤组中请为其设置考勤组。resourceId=" + resourceId + ",date=" + date);
return ;
}
changeType = KQHolidaySetBiz.getChangeType(groupId, date);
if (changeType != 1 && changeType != 2 && changeType != 3) {
KQWorkTime kqWorkTime = new KQWorkTime();
changeType = kqWorkTime.isWorkDay(resourceId, date) ? 2 : 3;
}
String change_key = date+"_"+resourceId;
changeTypeMap.put(change_key, changeType);
List<String[]> restTimeList = new ArrayList<String[]>();
int overtimeRuleId = 0;//加班规则的ID
RecordSet recordSet = new RecordSet();
String sql = "select id from kq_OvertimeRules where (isDelete is null or isDelete !=1) ";
if (recordSet.getDBType().equalsIgnoreCase("sqlserver")) {
sql += " and ','+groupIds+',' like '%," + groupId + ",%'";
} else if (recordSet.getDBType().equalsIgnoreCase("mysql")) {
sql += " and concat(',',groupIds,',') like '%," + groupId + ",%'";
} else {
sql += " and ','||groupIds||',' like '%," + groupId + ",%'";
}
recordSet.executeQuery(sql);
if (recordSet.next()) {
overtimeRuleId = recordSet.getInt("id");
sql = "select * from kq_OvertimeRulesDetail where ruleId=" + overtimeRuleId + " and dayType=" + changeType;
recordSet.executeQuery(sql);
if (recordSet.next()) {
int id = recordSet.getInt("id");
int ruleId = recordSet.getInt("ruleId");
int dayType = recordSet.getInt("dayType");
int overtimeEnable = recordSet.getInt("overtimeEnable");
int computingMode = recordSet.getInt("computingMode");
int startTime = recordSet.getInt("startTime");
int minimumLen = recordSet.getInt("minimumLen");
int paidLeaveEnable = recordSet.getInt("paidLeaveEnable");
double lenOfOvertime = Util.getDoubleValue(recordSet.getString("lenOfOvertime"), 1.00);
double lenOfLeave = Util.getDoubleValue(recordSet.getString("lenOfLeave"), 1.00);
int hasRestTime = Util.getIntValue(recordSet.getString("hasRestTime"));
int before_startTime = recordSet.getInt("before_startTime");
int paidLeaveEnableType = recordSet.getInt("paidLeaveEnableType");
int paidLeaveEnableDefaultType = recordSet.getInt("paidLeaveEnableDefaultType");
int paidLeaveEnableFlowType = recordSet.getInt("paidLeaveEnableFlowType");
int restTimeType = recordSet.getInt("restTimeType");
int has_cut_point = Util.getIntValue(Util.null2s(recordSet.getString("has_cut_point"),"0"),0);
if(paidLeaveEnableType <= 0){
paidLeaveEnableType = 1;
}
if(paidLeaveEnableDefaultType <= 0){
paidLeaveEnableDefaultType = 1;
}
if(paidLeaveEnableFlowType <= 0){
paidLeaveEnableFlowType = 1;
}
if(paidLeaveEnableType == 1 && paidLeaveEnable == 0){
//如果就没有开启关联调休,那么默认的加班转调休方式就是第一种
paidLeaveEnableDefaultType = 1;
}
if(restTimeType <= 0){
restTimeType = 1;
}
String cut_point = Util.null2s(recordSet.getString("cut_point"),"");
String key = date+"_"+changeType;
KQOvertimeRulesDetailEntity kqOvertimeRulesDetail = new KQOvertimeRulesDetailEntity();
kqOvertimeRulesDetail.setRuleId(ruleId);
kqOvertimeRulesDetail.setDayType(dayType);
kqOvertimeRulesDetail.setOvertimeEnable(overtimeEnable);
kqOvertimeRulesDetail.setComputingMode(computingMode);
kqOvertimeRulesDetail.setStartTime(startTime);
kqOvertimeRulesDetail.setMinimumLen(minimumLen);
kqOvertimeRulesDetail.setPaidLeaveEnable(paidLeaveEnable);
kqOvertimeRulesDetail.setLenOfOvertime(lenOfOvertime);
kqOvertimeRulesDetail.setLenOfLeave(lenOfLeave);
kqOvertimeRulesDetail.setHasRestTime(hasRestTime);
kqOvertimeRulesDetail.setBefore_startTime(before_startTime);
kqOvertimeRulesDetail.setCut_point(cut_point);
kqOvertimeRulesDetail.setHas_cut_point(has_cut_point);
kqOvertimeRulesDetail.setId(id);
kqOvertimeRulesDetail.setPaidLeaveEnableType(paidLeaveEnableType);
kqOvertimeRulesDetail.setPaidLeaveEnableDefaultType(paidLeaveEnableDefaultType);
kqOvertimeRulesDetail.setPaidLeaveEnableFlowType(paidLeaveEnableFlowType);
kqOvertimeRulesDetail.setRestTimeType(restTimeType);
overRulesDetailMap.put(key, kqOvertimeRulesDetail);
computingModeMap.put(key, computingMode);
/**
*
*/
String lastDay = DateUtil.addDay(date, -1, "yyyy-MM-dd");
KQOvertimeRulesDetailEntity pre_kqOvertimeRulesDetail = getOvertimeRulesDetail(resourceId, lastDay);
int pre_overtimeEnable = pre_kqOvertimeRulesDetail.getOvertimeEnable();
int pre_hasRestTime = pre_kqOvertimeRulesDetail.getHasRestTime();
if (pre_overtimeEnable == 1 && pre_hasRestTime == 1) {
int pre_dayType = pre_kqOvertimeRulesDetail.getDayType();
int pre_ruleId = pre_kqOvertimeRulesDetail.getRuleId();
sql = "select * from kq_OvertimeRestTime where ruleId=" + pre_ruleId + " and dayType=" + pre_dayType;
RecordSet recordSet1 = new RecordSet();
recordSet1.executeQuery(sql);
while (recordSet1.next()) {
String startType = recordSet1.getString("startType");
String startTime1 = recordSet1.getString("startTime");
String endType = recordSet1.getString("endType");
String endTime = recordSet1.getString("endTime");
if (startType.equals("0") && endType.equals("1")) {
String[] str = new String[]{"00:00", endTime};
restTimeList.add(str);
} else if (startType.equals("1") && endType.equals("1")) {
String[] str = new String[]{startTime1, endTime};
restTimeList.add(str);
}
}
}
overtimeEnable = kqOvertimeRulesDetail.getOvertimeEnable();
hasRestTime = kqOvertimeRulesDetail.getHasRestTime();
restTimeType = kqOvertimeRulesDetail.getRestTimeType();
if (overtimeEnable == 1 && hasRestTime == 1) {
if(restTimeType == 1){
sql = "select * from kq_OvertimeRestTime where ruleId=" + ruleId + " and dayType=" + dayType;
RecordSet recordSet1 = new RecordSet();
recordSet1.executeQuery(sql);
while (recordSet1.next()) {
String startType = recordSet1.getString("startType");
String startTime1 = recordSet1.getString("startTime");
String endType = recordSet1.getString("endType");
String endTime = recordSet1.getString("endTime");
if (startType.equals("0") && endType.equals("0")) {
String[] str = new String[]{startTime1, endTime};
restTimeList.add(str);
} else if (startType.equals("0") && endType.equals("1")) {
String[] str = new String[]{startTime1, "24:00"};
restTimeList.add(str);
}
}
}else{
sql = "select * from kq_OvertimeRestlength where ruleId=" + ruleId + " and dayType=" + dayType+" order by dsporder ";
RecordSet recordSet1 = new RecordSet();
recordSet1.executeQuery(sql);
while (recordSet1.next()) {
String overlength = Util.null2String(recordSet1.getString("overlength"));
String cutlength = Util.null2String(recordSet1.getString("cutlength"));
if(overlength.length() > 0 && cutlength.length() > 0){
String[] str = new String[]{overlength, cutlength};
restTimeList.add(str);
}
}
}
}
restTimeMap.put(key, restTimeList);
}
} else {
logger.writeLog("该人员所属的考勤组没有设置过任何加班规则请为其设置加班规则。resourceId=" + resourceId + ",date="+date+",changeType=" + changeType);
}
return ;
}
/**
*
*
*/
public Map<String,List<String>> getBalanceLengthDetailMap(int ruleDetailid){
Map<String,List<String>> balanceLengthDetailMap = Maps.newHashMap();
RecordSet recordSet = new RecordSet();
List<String> overtimelengthList = Lists.newArrayList();
List<String> balancelengthList = Lists.newArrayList();
String sql = "select * from kq_OvertimeBalanceLengthDetail where rulesdetailid= ? order by overtimelength desc ";
recordSet.executeQuery(sql, ruleDetailid);
while (recordSet.next()){
String overtimelength = recordSet.getString("overtimelength");
String balancelength = recordSet.getString("balancelength");
overtimelengthList.add(overtimelength);
balancelengthList.add(balancelength);
}
if(!overtimelengthList.isEmpty() && !balancelengthList.isEmpty()){
balanceLengthDetailMap.put("overtimelengthList", overtimelengthList);
balanceLengthDetailMap.put("balancelengthList", balancelengthList);
return balanceLengthDetailMap;
}
return balanceLengthDetailMap;
}
/**
*
*/
public Map<String,List<String>> getBalanceTimeDetailMap(int ruleDetailid){
Map<String,List<String>> balanceTimethDetailMap = Maps.newHashMap();
RecordSet recordSet = new RecordSet();
List<String> idList = Lists.newArrayList();
List<String> timepointList = Lists.newArrayList();
List<String> lenOfOvertimeList = Lists.newArrayList();
List<String> lenOfLeaveList = Lists.newArrayList();
String sql = "select * from kq_OvertimeBalanceTimeDetail where rulesdetailid= ? order by dsporder ";
recordSet.executeQuery(sql, ruleDetailid);
while (recordSet.next()){
String id = recordSet.getString("id");
String timepoint = recordSet.getString("timepoint");
String lenOfOvertime = recordSet.getString("lenOfOvertime");
String lenOfLeave = recordSet.getString("lenOfLeave");
idList.add(id);
timepointList.add(timepoint);
lenOfOvertimeList.add(lenOfOvertime);
lenOfLeaveList.add(lenOfLeave);
}
if(!timepointList.isEmpty() && !lenOfOvertimeList.isEmpty() && !lenOfLeaveList.isEmpty()){
balanceTimethDetailMap.put("idList", idList);
balanceTimethDetailMap.put("timepointList", timepointList);
balanceTimethDetailMap.put("lenOfOvertimeList", lenOfOvertimeList);
balanceTimethDetailMap.put("lenOfLeaveList", lenOfLeaveList);
return balanceTimethDetailMap;
}
return balanceTimethDetailMap;
}
}

@ -0,0 +1,854 @@
package com.engine.kq.cmd.report;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import com.engine.kq.biz.*;
import com.engine.kq.util.ExcelUtil;
import com.engine.kq.util.KQDurationCalculatorUtil;
import com.engine.kq.util.UtilKQ;
import com.google.gson.Gson;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.TimeUtil;
import weaver.general.Util;
import weaver.hrm.User;
import weaver.hrm.company.DepartmentComInfo;
import weaver.hrm.company.SubCompanyComInfo;
import weaver.hrm.job.JobTitlesComInfo;
import weaver.hrm.resource.ResourceComInfo;
import weaver.systeminfo.SystemEnv;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.*;
public class ExportExcelCmd extends AbstractCommonCommand<Map<String, Object>> {
private HttpServletRequest request;
private HttpServletResponse response;
private List<String> lsFieldDataKey;
public ExportExcelCmd(Map<String, Object> params, HttpServletRequest request, HttpServletResponse response, User user) {
this.user = user;
this.params = params;
this.request = request;
this.response = response;
this.lsFieldDataKey = new ArrayList<>();
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
Map<String, Object> retmap = new HashMap<String, Object>();
RecordSet rs = new RecordSet();
String sql = "";
BaseBean basebean = new BaseBean();
try {
SubCompanyComInfo subCompanyComInfo = new SubCompanyComInfo();
DepartmentComInfo departmentComInfo = new DepartmentComInfo();
ResourceComInfo resourceComInfo = new ResourceComInfo();
JobTitlesComInfo jobTitlesComInfo = new JobTitlesComInfo();
KQLeaveRulesBiz kqLeaveRulesBiz = new KQLeaveRulesBiz();
KQReportBiz kqReportBiz = new KQReportBiz();
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
String attendanceSerial = Util.null2String(jsonObj.get("attendanceSerial"));
String fromDate = Util.null2String(jsonObj.get("fromDate"));
String toDate = Util.null2String(jsonObj.get("toDate"));
String typeselect = Util.null2String(jsonObj.get("typeselect"));
if (typeselect.length() == 0) typeselect = "3";
if (!typeselect.equals("") && !typeselect.equals("0") && !typeselect.equals("6")) {
if (typeselect.equals("1")) {
fromDate = TimeUtil.getCurrentDateString();
toDate = TimeUtil.getCurrentDateString();
} else {
fromDate = TimeUtil.getDateByOption(typeselect, "0");
toDate = TimeUtil.getDateByOption(typeselect, "1");
}
}
//人员状态
String status = Util.null2String(jsonObj.get("status"));
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
String departmentId = Util.null2String(jsonObj.get("departmentId"));
String resourceId = Util.null2String(jsonObj.get("resourceId"));
String allLevel = Util.null2String(jsonObj.get("allLevel"));
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
String viewScope = Util.null2String(jsonObj.get("viewScope"));
List<String> showColumns = Util.splitString2List(Util.null2String(jsonObj.get("showColumns")), ",");
showColumns.add("lastname");
showColumns.removeIf(showColumn->showColumn.trim().equals(""));
List<String> tmpShowColumns = new ArrayList<>();
for(String showColumn:showColumns){
tmpShowColumns.add(showColumn);
String cascadekey = "";
if(showColumn.equals("beLate")){
cascadekey = "beLateMins";
}else if(showColumn.equals("leaveEearly")){
cascadekey = "leaveEarlyMins";
}else if(showColumn.equals("graveBeLate")){
cascadekey = "graveBeLateMins";
}else if(showColumn.equals("graveLeaveEarly")){
cascadekey = "graveLeaveEarlyMins";
}else if(showColumn.equals("absenteeism")){
cascadekey = "absenteeismMins";
}else if(showColumn.equals("overtime")){
tmpShowColumns.add("overtime_4leave");
tmpShowColumns.add("overtime_nonleave");
tmpShowColumns.add("workingDayOvertime_nonleave");
tmpShowColumns.add("workingDayOvertime_4leave");
tmpShowColumns.add("restDayOvertime_nonleave");
tmpShowColumns.add("restDayOvertime_4leave");
tmpShowColumns.add("holidayOvertime_4leave");
tmpShowColumns.add("holidayOvertime_nonleave");
}
if(cascadekey.length()>0){
tmpShowColumns.add(cascadekey);
}
}
showColumns = tmpShowColumns;
String rightSql = new KQReportBiz().getReportRight("1", "" + user.getUID(), "a");
LinkedHashMap<String, Object> workbook = new LinkedHashMap<>();
List<Object> lsSheet = new ArrayList<>();
Map<String, Object> sheet = null;
List<Object> titleList = new ArrayList<>();
Map<String, Object> title = null;
List<List<Object>> dataList = new ArrayList<>();
List<Object> data = null;
List<Map<String, Object>> constraintList = null;
sheet = new HashMap<>();
sheet.put("sheetName", SystemEnv.getHtmlLabelName(390351, user.getLanguage()));
sheet.put("sheetTitle", SystemEnv.getHtmlLabelName(390351, user.getLanguage()));
boolean isEnd = false;
Calendar cal = DateUtil.getCalendar();
List<Map<String, Object>> leaveRules = kqLeaveRulesBiz.getAllLeaveRules();
Map<String, Object> mapChildColumnInfo = null;
List<Object> childColumns = null;
KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo();
while (kqReportFieldComInfo.next()) {
if (Util.null2String(kqReportFieldComInfo.getParentid()).length() > 0) continue;
if(kqReportFieldComInfo.getFieldname().equals("kqCalendar"))continue;
if(KQReportFieldComInfo.cascadekey2fieldname.keySet().contains(kqReportFieldComInfo.getFieldname()))continue;
if (!kqReportFieldComInfo.getReportType().equals("all") && !kqReportFieldComInfo.getReportType().equals("month"))
continue;
if (!showColumns.contains(kqReportFieldComInfo.getFieldname())&&!showColumns.contains(kqReportFieldComInfo.getParentid())) continue;
if("leave".equalsIgnoreCase(kqReportFieldComInfo.getFieldname())&&leaveRules.size()==0){
continue;
}
title = new HashMap<>();
String unitType = KQReportBiz.getUnitType(kqReportFieldComInfo, user);
if(unitType.length()>0){
title.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage())+ "(" + unitType + ")");
}else{
title.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage()));
}
title.put("width", 30 * 256);
this.lsFieldDataKey.add(kqReportFieldComInfo.getFieldname());
mapChildColumnInfo = this.getChildColumnsInfo(kqReportFieldComInfo.getFieldname(), user);
childColumns = (List<Object>) mapChildColumnInfo.get("childColumns");
if (childColumns.size() > 0) {//跨列width取子列的width
title.put("children", childColumns);
title.put("colSpan", childColumns.size());
} else {
title.put("rowSpan", 3);
}
titleList.add(title);
titleList.addAll(this.getCascadeKeyColumnsInfo(kqReportFieldComInfo.getCascadekey(),user));
}
String today = DateUtil.getCurrentDate();
// if (DateUtil.compDate(today, toDate) > 0) {//结束如期不大于今天
// toDate = today;
// }
//白夜中晚
if(showColumns.contains("subcompany_bai")) {
title = new HashMap<>();
title.put("rowSpan", 3);
title.put("width", 30 * 256);
title.put("title","白班");
titleList.add(title);
}
if(showColumns.contains("subcompany_ye")) {
title = new HashMap<>();
title.put("rowSpan", 3);
title.put("width", 30 * 256);
title.put("title","夜班");
titleList.add(title);
}
if(showColumns.contains("subcompany_zhong")) {
title = new HashMap<>();
title.put("rowSpan", 3);
title.put("width", 30 * 256);
title.put("title","中班");
titleList.add(title);
}
if(showColumns.contains("subcompany_wan")) {
title = new HashMap<>();
title.put("rowSpan", 3);
title.put("width", 30 * 256);
title.put("title","晚班");
titleList.add(title);
}
if(showColumns.contains("kqCalendar")) {
childColumns = new ArrayList<>();
for (String date = fromDate; !isEnd; ) {
if (date.equals(toDate)) isEnd = true;
title = new HashMap<>();
title.put("title", UtilKQ.getWeekDayShort(DateUtil.getWeek(date)-1,user.getLanguage()) +"\r\n"+ DateUtil.geDayOfMonth(date));
title.put("width", 30 * 256);
childColumns.add(title);
cal.setTime(DateUtil.parseToDate(date));
date = DateUtil.getDate(cal.getTime(), 1);
}
title = new HashMap();
title.put("title", SystemEnv.getHtmlLabelName(386476, user.getLanguage()));
if (childColumns.size() > 0) {//跨列width取子列的width
title.put("children", childColumns);
title.put("colSpan", childColumns.size());
}
titleList.add(title);
}
//考勤二开--增加说明行
List<Object> newTitleList = new ArrayList<>();
Map<String, Object> titlesMap = new HashMap<>();
if (titleList.size() > 0) {
String desc = "说明:";
String acqDescSql = " select smnr from uf_kqhzbsmbd order by id desc";
basebean.writeLog("acqDescSql: " + acqDescSql);
rs.executeQuery(acqDescSql);
while (rs.next()) {
String temp = Util.null2String(rs.getString("smnr"));
desc = desc + temp;
}
basebean.writeLog("desc: " + desc);
titlesMap.put("flag","KqReport");
titlesMap.put("title",desc);
titlesMap.put("width",7680);
titlesMap.put("colSpan",75);
titlesMap.put("children",titleList);
newTitleList.add(titlesMap);
}
sheet.put("titleList", newTitleList);
// sheet.put("titleList", titleList);
String forgotBeginWorkCheck_field = " sum(b.forgotBeginWorkCheck) ";
if(rs.getDBType().equalsIgnoreCase("oracle")) {
forgotBeginWorkCheck_field = " sum(nvl(b.forgotBeginWorkCheck,0)) ";
}else if((rs.getDBType()).equalsIgnoreCase("mysql")){
forgotBeginWorkCheck_field = " sum(ifnull(b.forgotBeginWorkCheck,0)) ";
}else {
forgotBeginWorkCheck_field = " sum(isnull(b.forgotBeginWorkCheck,0)) ";
}
Map<String,Object> definedFieldInfo = new KQFormatBiz().getDefinedField();
String definedFieldSum = Util.null2String(definedFieldInfo.get("definedFieldSum"));
String backFields = " a.id,a.lastname,a.workcode,a.dsporder,b.resourceid,a.subcompanyid1 as subcompanyid,a.departmentid,a.jobtitle," +
" sum(b.workdays) as workdays,sum(b.workMins) as workMins,sum(b.attendancedays) as attendancedays," +
" sum(b.attendanceMins) as attendanceMins,sum(b.beLate) as beLate,sum(b.beLateMins) as beLateMins, " +
" sum(b.graveBeLate) as graveBeLate, sum(b.graveBeLateMins) as graveBeLateMins,sum(b.leaveEearly) as leaveEearly," +
" sum(b.leaveEarlyMins) as leaveEarlyMins, sum(b.graveLeaveEarly) as graveLeaveEarly, " +
" sum(b.graveLeaveEarlyMins) as graveLeaveEarlyMins,sum(b.absenteeism) as absenteeism, " +
" sum(b.signdays) as signdays,sum(b.signmins) as signmins, "+
" sum(b.absenteeismMins) as absenteeismMins, sum(b.forgotCheck)+"+forgotBeginWorkCheck_field+" as forgotCheck "+(definedFieldSum.length()>0?","+definedFieldSum+"":"");
if(rs.getDBType().equals("oracle")){
backFields = "/*+ index(kq_format_total IDX_KQ_FORMAT_TOTAL_KQDATE) */ "+backFields;
}
String sqlFrom = " from hrmresource a, kq_format_total b where a.id= b.resourceid and b.kqdate >='" + fromDate + "' and b.kqdate <='" + toDate + "'";
String sqlWhere = rightSql;
String groupBy = " group by a.id,a.lastname,a.workcode,a.dsporder,b.resourceid,a.subcompanyid1,a.departmentid,a.jobtitle ";
if (subCompanyId.length() > 0) {
sqlWhere += " and a.subcompanyid1 in(" + subCompanyId + ") ";
}
if (departmentId.length() > 0) {
sqlWhere += " and a.departmentid in(" + departmentId + ") ";
}
if (resourceId.length() > 0) {
sqlWhere += " and b.resourceid in(" + resourceId + ") ";
}
if (viewScope.equals("4")) {//我的下属
if (allLevel.equals("1")) {//所有下属
sqlWhere += " and a.managerstr like '%," + user.getUID() + ",%'";
} else {
sqlWhere += " and a.managerid=" + user.getUID();//直接下属
}
}
if (!"1".equals(isNoAccount)) {
sqlWhere += " and a.loginid is not null " + (rs.getDBType().equals("oracle") ? "" : " and a.loginid<>'' ");
}
if(status.length()>0){
if (!status.equals("8") && !status.equals("9")) {
sqlWhere += " and a.status = "+status+ "";
}else if (status.equals("8")) {
sqlWhere += " and (a.status = 0 or a.status = 1 or a.status = 2 or a.status = 3) ";
}
}
String orderBy = " order by a.dsporder asc, a.lastname asc ";
String descOrderBy = " order by a.dsporder desc, a.lastname desc ";
sql = "select " + backFields + sqlFrom + sqlWhere + groupBy + orderBy;
//System.out.println("start" + DateUtil.getFullDate());
Map<String, Object> flowData = new KQReportBiz().getFlowData(params, user);
//System.out.println("end" + DateUtil.getFullDate());
rs.execute(sql);
basebean.writeLog("sql: " + sql );
//考勤二开--获取低于、高于标准时间的假期类型
String lowType = basebean.getPropValue("omlKq_main", "dybzgzsjid");
String upType = basebean.getPropValue("omlKq_main", "gybzgzsjid");
while (rs.next()) {
data = new ArrayList<>();
String id = rs.getString("id");
basebean.writeLog("lsFieldDataKey: " + new Gson().toJson(lsFieldDataKey));
for (int fieldDataKeyIdx =0;fieldDataKeyIdx<lsFieldDataKey.size();fieldDataKeyIdx++) {
basebean.writeLog("---fieldName: " + lsFieldDataKey.get(fieldDataKeyIdx));
String fieldName = lsFieldDataKey.get(fieldDataKeyIdx);
String fieldid = KQReportFieldComInfo.field2Id.get(fieldName);
String fieldValue = "";
if (fieldName.equals("subcompany")) {
String tmpSubcompanyId = Util.null2String(rs.getString("subcompanyid"));
if (tmpSubcompanyId.length() == 0) {
tmpSubcompanyId = Util.null2String(resourceComInfo.getSubCompanyID(id));
}
fieldValue = subCompanyComInfo.getSubCompanyname(tmpSubcompanyId);
} else if (fieldName.equals("department")) {
String tmpDepartmentId = Util.null2String(rs.getString("departmentid"));
if (tmpDepartmentId.length() == 0) {
tmpDepartmentId = Util.null2String(resourceComInfo.getDepartmentID(id));
}
fieldValue = departmentComInfo.getDepartmentname(tmpDepartmentId);
} else if (fieldName.equals("jobtitle")) {
String tmpJobtitleId = Util.null2String(rs.getString("jobtitle"));
if (tmpJobtitleId.length() == 0) {
tmpJobtitleId = Util.null2String(resourceComInfo.getJobTitle(id));
}
fieldValue = jobTitlesComInfo.getJobTitlesname(tmpJobtitleId);
} else if (fieldName.equals("attendanceSerial")) {
List<String> serialIds = null;
if (Util.null2String(jsonObj.get("attendanceSerial")).length() > 0) {
serialIds = Util.splitString2List(Util.null2String(jsonObj.get("attendanceSerial")), ",");
for(int i=0;serialIds!=null&&i<serialIds.size();i++){
data.add(kqReportBiz.getSerialCount(id,fromDate,toDate,serialIds.get(i)));
}
}else{
data.add("");
}
continue;
} else if (fieldName.equals("leave")) {//请假
List<Map<String, Object>> allLeaveRules = kqLeaveRulesBiz.getAllLeaveRules();
basebean.writeLog("allLeaveRules: " + allLeaveRules.size());
Map<String, Object> leaveRule = null;
for (int i = 0; allLeaveRules != null && i < allLeaveRules.size(); i++) {
leaveRule = allLeaveRules.get(i);
//考勤二开--低于、高于两个类型的假期不在请假中显示
if (leaveRule.get("id").equals(lowType) || leaveRule.get("id").equals(upType)) {
basebean.writeLog("请假: " + leaveRule.get("id"));
continue;
}
//end
String flowType = Util.null2String("leaveType_" + leaveRule.get("id"));
basebean.writeLog("----------------flowType: " + flowType);
basebean.writeLog("----------------name: " + leaveRule.get("name"));
String leaveData = Util.null2String(flowData.get(id + "|" + flowType));
String flowLeaveBackType = Util.null2String("leavebackType_" + leaveRule.get("id"));
String leavebackData = Util.null2s(Util.null2String(flowData.get(id + "|" + flowLeaveBackType)), "0.0");
String b_flowLeaveData = "";
String flowLeaveData = "";
try {
//以防止出现精度问题
if (leaveData.length() == 0) {
leaveData = "0.0";
}
if (leavebackData.length() == 0) {
leavebackData = "0.0";
}
BigDecimal b_leaveData = new BigDecimal(leaveData);
BigDecimal b_leavebackData = new BigDecimal(leavebackData);
b_flowLeaveData = b_leaveData.subtract(b_leavebackData).toString();
if(Util.getDoubleValue(b_flowLeaveData, -1) < 0){
b_flowLeaveData = "0.0";
}
} catch (Exception e) {
writeLog("GetKQReportCmd:leaveData" + leaveData + ":leavebackData:" + leavebackData + ":" + e);
}
if (b_flowLeaveData.length() > 0) {
flowLeaveData = KQDurationCalculatorUtil.getDurationRound(b_flowLeaveData);
} else {
flowLeaveData = KQDurationCalculatorUtil.getDurationRound(Util.null2String(Util.getDoubleValue(leaveData, 0.0) - Util.getDoubleValue(leavebackData, 0.0)));
}
basebean.writeLog("----------------flowLeaveData: " + flowLeaveData);
data.add(flowLeaveData);
}
continue;
}else if(fieldName.equals("overtime")){
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|workingDayOvertime_nonleave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("workingDayOvertime_nonleave"))));
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|restDayOvertime_nonleave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("restDayOvertime_nonleave"))));
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|holidayOvertime_nonleave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("holidayOvertime_nonleave"))));
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|workingDayOvertime_4leave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("workingDayOvertime_4leave"))));
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|restDayOvertime_4leave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("restDayOvertime_4leave"))));
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|holidayOvertime_4leave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("holidayOvertime_4leave"))));
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|workingDayOvertime_4leave")));
workingDayOvertime_4leave = workingDayOvertime_4leave<0?0:workingDayOvertime_4leave;
double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|restDayOvertime_4leave")));
restDayOvertime_4leave = restDayOvertime_4leave<0?0:restDayOvertime_4leave;
double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|holidayOvertime_4leave")));
holidayOvertime_4leave = holidayOvertime_4leave<0?0:holidayOvertime_4leave;
double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|workingDayOvertime_nonleave")));
workingDayOvertime_nonleave = workingDayOvertime_nonleave<0?0:workingDayOvertime_nonleave;
double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|restDayOvertime_nonleave")));
restDayOvertime_nonleave = restDayOvertime_nonleave<0?0:restDayOvertime_nonleave;
double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|holidayOvertime_nonleave")));
holidayOvertime_nonleave = holidayOvertime_nonleave<0?0:holidayOvertime_nonleave;
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(workingDayOvertime_4leave+restDayOvertime_4leave+holidayOvertime_4leave+
workingDayOvertime_nonleave+restDayOvertime_nonleave+holidayOvertime_nonleave));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("overtimeTotal"))));
continue;
}else if(fieldName.equals("businessLeave") || fieldName.equals("officialBusiness")){
String businessLeaveData = Util.null2s(Util.null2String(flowData.get(id+"|"+fieldName)),"0.0");
String backType = fieldName+"_back";
String businessLeavebackData = Util.null2s(Util.null2String(flowData.get(id+"|"+backType)),"0.0");
String businessLeave = "";
try{
//以防止出现精度问题
if(businessLeaveData.length() == 0){
businessLeaveData = "0.0";
}
if(businessLeavebackData.length() == 0){
businessLeavebackData = "0.0";
}
BigDecimal b_businessLeaveData = new BigDecimal(businessLeaveData);
BigDecimal b_businessLeavebackData = new BigDecimal(businessLeavebackData);
businessLeave = b_businessLeaveData.subtract(b_businessLeavebackData).toString();
if(Util.getDoubleValue(businessLeave, -1) < 0){
businessLeave = "0.0";
}
}catch (Exception e){
}
fieldValue = KQDurationCalculatorUtil.getDurationRound(businessLeave);
} else if(Util.null2String(kqReportFieldComInfo.getCascadekey(fieldid)).length()>0){
fieldValue = Util.formatMultiLang(Util.null2String(rs.getString(fieldName)),""+user.getLanguage());
data.add(fieldValue);
List<String> lsCascadekey = Util.splitString2List(kqReportFieldComInfo.getCascadekey(fieldid),",");
for(int i=0;i<lsCascadekey.size();i++){
if(Util.null2String(rs.getString(lsCascadekey.get(i))).length()>0){
fieldid = KQReportFieldComInfo.field2Id.get(lsCascadekey.get(i));
fieldValue = getFieldValueByUnitType(rs.getString(lsCascadekey.get(i)),kqReportFieldComInfo.getUnittype(fieldid));
}else{
fieldValue = "0";
}
data.add(fieldValue);
}
continue;
} else if ( fieldName.equals("leaveType_" + lowType) || fieldName.equals("leaveType_" + upType)) {
basebean.writeLog("fieldName: " + fieldName );
List<Map<String, Object>> allLeaveRules = kqLeaveRulesBiz.getAllLeaveRules();
Map<String, Object> leaveRule = null;
for (int i = 0; allLeaveRules != null && i < allLeaveRules.size(); i++) {
leaveRule = allLeaveRules.get(i);
//考勤二开--低于、高于两个类型的假期不在请假中显示
String[] temp = fieldName.split("_");
basebean.writeLog("temp[1]: " + temp[1] );
if (leaveRule.get("id").equals(temp[1])) {
basebean.writeLog("leaveRule: " + leaveRule );
String flowType = Util.null2String("leaveType_" + leaveRule.get("id"));
String leaveData = Util.null2String(flowData.get(id + "|" + flowType));
String flowLeaveBackType = Util.null2String("leavebackType_" + leaveRule.get("id"));
String leavebackData = Util.null2s(Util.null2String(flowData.get(id + "|" + flowLeaveBackType)), "0.0");
String b_flowLeaveData = "";
String flowLeaveData = "";
try {
//以防止出现精度问题
if (leaveData.length() == 0) {
leaveData = "0.0";
}
if (leavebackData.length() == 0) {
leavebackData = "0.0";
}
BigDecimal b_leaveData = new BigDecimal(leaveData);
BigDecimal b_leavebackData = new BigDecimal(leavebackData);
b_flowLeaveData = b_leaveData.subtract(b_leavebackData).toString();
if(Util.getDoubleValue(b_flowLeaveData, -1) < 0){
b_flowLeaveData = "0.0";
}
} catch (Exception e) {
writeLog("GetKQReportCmd:leaveData" + leaveData + ":leavebackData:" + leavebackData + ":" + e);
}
if (b_flowLeaveData.length() > 0) {
flowLeaveData = KQDurationCalculatorUtil.getDurationRound(b_flowLeaveData);
} else {
flowLeaveData = KQDurationCalculatorUtil.getDurationRound(Util.null2String(Util.getDoubleValue(leaveData, 0.0) - Util.getDoubleValue(leavebackData, 0.0)));
}
basebean.writeLog("flowLeaveData: " + flowLeaveData );
data.add(flowLeaveData);
}
//end
}
continue;
}else {
fieldValue = Util.formatMultiLang(Util.null2String(rs.getString(fieldName)),""+user.getLanguage());
fieldValue = getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(fieldid));
}
fieldValue = Util.formatMultiLang(fieldValue,""+user.getLanguage());
data.add(fieldValue);
}
if(showColumns.contains("subcompany")){
RecordSet rs2 = new RecordSet();
//人员id
String sql2 = "select b.serialtype,b.Statisticstype,a.* from kq_format_detail a\n" +
"left join\n" +
"kq_ShiftManagement b \n" +
"on a.serialid = b.id\n" +
"where kqdate >= ?\n" +
"and kqdate <= ? and resourceid = ?";
rs2.executeQuery(sql2,fromDate,toDate,id);
BigDecimal subcompany_bai=new BigDecimal("0");
BigDecimal subcompany_ye=new BigDecimal("0");
BigDecimal subcompany_zhong=new BigDecimal("0");
BigDecimal subcompany_wan=new BigDecimal("0");
while (rs2.next()){
//班次类型
String serialtype = Util.null2String(rs2.getString("serialtype"));
//统计方式
String statisticstype = Util.null2String(rs2.getString("statisticstype"));
//为空跳过
if("".equals(serialtype)||"".equals(statisticstype)){
continue;
}
BigDecimal count=new BigDecimal("0");
//应该出勤时间
String workmins = Util.null2String(rs2.getString("workmins"));
//计算实际出勤时间(出差公出算出勤)=应出勤-旷工-请假-迟到-早退
String absenteeismmins = Util.null2String(rs2.getString("absenteeismmins"));
String leavemins = Util.null2String(rs2.getString("leavemins"));
String belatemins = Util.null2String(rs2.getString("belatemins"));
String gravebelatemins = Util.null2String(rs2.getString("gravebelatemins"));
String leaveearlymins = Util.null2String(rs2.getString("leaveearlymins"));
String graveleaveearlymins = Util.null2String(rs2.getString("graveleaveearlymins"));
absenteeismmins = zro(absenteeismmins);
leavemins = zro(leavemins);
belatemins = zro(belatemins);
gravebelatemins = zro(gravebelatemins);
leaveearlymins = zro(leaveearlymins);
graveleaveearlymins = zro(graveleaveearlymins);
BigDecimal num0 = new BigDecimal(workmins);
BigDecimal num1 = new BigDecimal(absenteeismmins);
BigDecimal num2 = new BigDecimal(leavemins);
BigDecimal num3 = new BigDecimal(belatemins);
BigDecimal num4 = new BigDecimal(gravebelatemins);
BigDecimal num5 = new BigDecimal(leaveearlymins);
BigDecimal num6 = new BigDecimal(graveleaveearlymins);
//实际出勤时间
BigDecimal result1 = num0.subtract(num1).subtract(num2).subtract(num3).subtract(num4).subtract(num5).subtract(num6);
//统计类型 0时数/1比例
if("0".equals(statisticstype)){
count = result1.doubleValue()>0?new BigDecimal(1):new BigDecimal(0);
}else{ //实际时间/应时间
count = result1.divide(num0, 2, BigDecimal.ROUND_HALF_UP);
}
if("0".equals(serialtype)){
subcompany_bai = subcompany_bai.add(count);
}else if("1".equals(serialtype)){
subcompany_ye = subcompany_ye.add(count);
}else if("2".equals(serialtype)){
subcompany_zhong = subcompany_zhong.add(count);
}else if("3".equals(serialtype)){
subcompany_wan = subcompany_wan.add(count);
}
}
if(showColumns.contains("subcompany_bai")){
data.add(subcompany_bai.doubleValue());
}
if(showColumns.contains("subcompany_ye")){
data.add(subcompany_ye.doubleValue());
}
if(showColumns.contains("subcompany_zhong")){
data.add(subcompany_zhong.doubleValue());
}
if(showColumns.contains("subcompany_wan")){
data.add(subcompany_wan.doubleValue());
}
}
if(showColumns.contains("kqCalendar")) {
Map<String, Object> detialDatas = kqReportBiz.getDetialDatas(id, fromDate, toDate, user);
isEnd = false;
for (String date = fromDate; !isEnd; ) {
if (date.equals(toDate)) isEnd = true;
if (DateUtil.compDate(today, date) > 0) {
data.add("");
} else {
if (detialDatas.get(id + "|" + date) != null) {
data.add(((Map<String, Object>) detialDatas.get(id + "|" + date)).get("text"));
} else {
data.add(SystemEnv.getHtmlLabelName(26593, user.getLanguage()));
}
}
cal.setTime(DateUtil.parseToDate(date));
date = DateUtil.getDate(cal.getTime(), 1);
}
}
dataList.add(data);
}
sheet.put("dataList", dataList);
sheet.put("constraintList", constraintList);
sheet.put("createFile", "1");
lsSheet.add(sheet);
workbook.put("sheet", lsSheet);
String fileName = SystemEnv.getHtmlLabelName(390351, user.getLanguage())+" "+fromDate+" "+toDate;
workbook.put("fileName", fileName);
ExcelUtil ExcelUtil = new ExcelUtil();
Map<String, Object> exportMap = ExcelUtil.export(workbook, request, response);
retmap.putAll(exportMap);
retmap.put("status", "1");
} catch (Exception e) {
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(382661, user.getLanguage()));
writeLog(e);
}
return retmap;
}
private Map<String, Object> getChildColumnsInfo(String parentid, User user) {
BaseBean bb = new BaseBean();
Map<String, Object> returnMap = new HashMap<>();
List<Object> titleList = new ArrayList<>();
Map<String, Object> title = null;
//考勤二开--获取低于、高于标准时间的假期类型
String lowType = bb.getPropValue("omlKq_main", "dybzgzsjid");
String upType = bb.getPropValue("omlKq_main", "gybzgzsjid");
if (parentid.equals("attendanceSerial")) {//考勤班次
KQShiftManagementComInfo kqShiftManagementComInfo = new KQShiftManagementComInfo();
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
List<String> serialIds = null;
if (Util.null2String(jsonObj.get("attendanceSerial")).length() > 0) {
serialIds = Util.splitString2List(Util.null2String(jsonObj.get("attendanceSerial")), ",");
}
for (int i = 0; serialIds != null && i < serialIds.size(); i++) {
title = new HashMap<>();
title.put("title", Util.formatMultiLang(kqShiftManagementComInfo.getSerial(serialIds.get(i)),""+user.getLanguage()));
title.put("width", 30 * 256);
titleList.add(title);
}
} else if (parentid.equals("leave")) {
KQLeaveRulesBiz kqLeaveRulesBiz = new KQLeaveRulesBiz();
List<Map<String, Object>> leaveRules = kqLeaveRulesBiz.getAllLeaveRules();
List<Object> lsChildYsColumns = new ArrayList<>();
List<Object> lsChildNoYsColumns = new ArrayList<>();
int sumChildYsColumnWidth = 0;
int sumChildNoYsColumnWidth = 0;
for (int i = 0; leaveRules != null && i < leaveRules.size(); i++) {
Map<String, Object> leaveRule = leaveRules.get(i);
//考勤二开--低于、高于两个类型的假期不在请假中显示
if (leaveRule.get("id").equals(lowType) || leaveRule.get("id").equals(upType)) {
bb.writeLog("getChildColumnsInfo leaveRuleid: " + leaveRule);
continue;
}
//end
bb.writeLog("getChildColumnsInfo to do ");
String name = Util.formatMultiLang(Util.null2String(leaveRule.get("name")),""+user.getLanguage());
String unitType = Util.null2String(leaveRule.get("unitType"));
String unitName = (KQUnitBiz.isLeaveHour(unitType)) ? SystemEnv.getHtmlLabelName(391, user.getLanguage()) : SystemEnv.getHtmlLabelName(1925, user.getLanguage());
title = new HashMap<>();
title.put("title", name + "(" + unitName + ")");
title.put("width", 30 * 256);
// titleList.add(title);
String ifyxjs = getIfyxj(Util.null2String(leaveRule.get("id")));
writeLog("ifyxjs:"+ifyxjs);
if("0".equals(ifyxjs)){
lsChildNoYsColumns.add(title);
sumChildNoYsColumnWidth+=65;
}else{
lsChildYsColumns.add(title);
sumChildYsColumnWidth+=65;
}
}
Map columnYs = new HashMap();
columnYs.put("title","有薪假");
columnYs.put("rowSpan",2);
columnYs.put("width",sumChildYsColumnWidth+"");
columnYs.put("children",lsChildYsColumns);
titleList.add(columnYs);
Map columnYsNo = new HashMap();
columnYsNo.put("title","扣薪假");
columnYsNo.put("rowSpan",2);
columnYsNo.put("width",sumChildNoYsColumnWidth+"");
columnYsNo.put("children",lsChildNoYsColumns);
titleList.add(columnYsNo);
writeLog("titleList:"+titleList.toString());
writeLog("sumChildYsColumnWidth:"+sumChildYsColumnWidth+"sumChildNoYsColumnWidth:"+sumChildNoYsColumnWidth);
}else if(parentid.equals("overtime")){
String[] overtimeChild = {"overtime_nonleave","overtime_4leave","overtimeTotal"};
for(int i=0;i<overtimeChild.length;i++){
String id = overtimeChild[i];
title = new HashMap();
String fieldlabel = "";
if("overtime_nonleave".equalsIgnoreCase(id)){
fieldlabel = "125805";
title.put("title", SystemEnv.getHtmlLabelNames(fieldlabel, user.getLanguage()));
title.put("rowSpan","2");
}else if("overtime_4leave".equalsIgnoreCase(id)){
fieldlabel = "125804";
title.put("title", SystemEnv.getHtmlLabelNames(fieldlabel, user.getLanguage()));
title.put("rowSpan","2");
}else{
fieldlabel = "523";
title.put("showDetial","1");
String unitType = (KQOvertimeRulesBiz.getMinimumUnit()==3 || KQOvertimeRulesBiz.getMinimumUnit()==5 ||KQOvertimeRulesBiz.getMinimumUnit()==6)?"2":"1";
String unitTypeName = "";
if(Util.null2String(unitType).length()>0){
if(unitType.equals("1")){
unitTypeName=SystemEnv.getHtmlLabelName(1925, user.getLanguage());
}else if(unitType.equals("2")){
unitTypeName=SystemEnv.getHtmlLabelName(391, user.getLanguage());
}else if(unitType.equals("3")){
unitTypeName=SystemEnv.getHtmlLabelName(18083, user.getLanguage());
}
}
title.put("title", SystemEnv.getHtmlLabelNames(fieldlabel, user.getLanguage())+ "(" + unitTypeName + ")");
}
Map<String,Object> mapChildColumnInfo = getChildColumnsInfo(id, user);
int childWidth = 65;
List<Object> childColumns = (List<Object>)mapChildColumnInfo.get("childColumns");
if(childColumns.size()>0) {//跨列width取子列的width
title.put("children", childColumns);
childWidth = Util.getIntValue(Util.null2String(mapChildColumnInfo.get("sumChildColumnWidth")),65);
}
title.put("width", childWidth+"");
titleList.add(title);
}
} else {
KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo();
while (kqReportFieldComInfo.next()) {
if (kqReportFieldComInfo.getParentid().equals(parentid)) {
if(!kqReportFieldComInfo.getReportType().equals("month"))continue;
title = new HashMap<>();
title.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage()) + "(" + KQReportBiz.getUnitType(kqReportFieldComInfo, user) + ")");
title.put("width", 30 * 256);
titleList.add(title);
}
}
}
returnMap.put("childColumns", titleList);
return returnMap;
}
private List<Object> getCascadeKeyColumnsInfo(String cascadeKey, User user){
List<Object> titleList = new ArrayList<>();
Map<String, Object> title = null;
if(Util.null2String(cascadeKey).length()==0){
return titleList;
}
List<String> lsCascadeKey = Util.splitString2List(cascadeKey,",");
KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo();
for(int i=0;i<lsCascadeKey.size();i++){
kqReportFieldComInfo.setTofirstRow();
while (kqReportFieldComInfo.next()) {
if(!kqReportFieldComInfo.getReportType().equals("month"))continue;
if (kqReportFieldComInfo.getFieldname().equals(lsCascadeKey.get(i))){
title = new HashMap<>();
title.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage()) + "(" + KQReportBiz.getUnitType(kqReportFieldComInfo, user) + ")");
title.put("width", 30 * 256);
titleList.add(title);
}
}
}
return titleList;
}
private String getFieldValueByUnitType(String fieldValue,String unittype){
if (Util.null2String(unittype).length() > 0) {
if (fieldValue.length() == 0) {
fieldValue = "0";
} else {
if (unittype.equals("2")) {
fieldValue = KQDurationCalculatorUtil.getDurationRound(("" + (Util.getDoubleValue(fieldValue) / 60.0)));
}
}
}
return fieldValue;
}
@Override
public BizLogContext getLogContext() {
return null;
}
public String zro(String V1)
{
if("".equals(V1)){
return "0";
}else {
return V1;
}
}
/**
*
* @param id
* @return
*/
private String getIfyxj(String id){
RecordSet rs = new RecordSet();
String ifyxj = "";
String sql ="select ifyxj from kq_LeaveRules where id = "+id;
rs.execute(sql);
if (rs.next()){
ifyxj = Util.null2String(rs.getString("ifyxj"));
}
return ifyxj;
}
}

@ -0,0 +1,585 @@
package com.engine.kq.cmd.report;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import com.engine.kq.biz.*;
import com.engine.kq.cmd.shiftmanagement.toolkit.ShiftManagementToolKit;
import com.engine.kq.entity.WorkTimeEntity;
import com.engine.kq.log.KQLog;
import com.engine.kq.util.KQDurationCalculatorUtil;
import com.engine.kq.util.PageUidFactory;
import weaver.conn.RecordSet;
import weaver.general.TimeUtil;
import weaver.general.Util;
import weaver.hrm.User;
import weaver.hrm.company.DepartmentComInfo;
import weaver.hrm.company.SubCompanyComInfo;
import weaver.hrm.job.JobTitlesComInfo;
import weaver.hrm.resource.ResourceComInfo;
import weaver.systeminfo.SystemEnv;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Object>> {
private KQLog kqLog = new KQLog();
public GetKQDailyReportCmd(Map<String, Object> params, User user) {
this.user = user;
this.params = params;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
Map<String,Object> retmap = new HashMap<String,Object>();
RecordSet rs = new RecordSet();
String sql = "";
try{
String pageUid = PageUidFactory.getHrmPageUid("KQDailyReport");
SubCompanyComInfo subCompanyComInfo = new SubCompanyComInfo();
DepartmentComInfo departmentComInfo = new DepartmentComInfo();
ResourceComInfo resourceComInfo = new ResourceComInfo();
JobTitlesComInfo jobTitlesComInfo = new JobTitlesComInfo();
KQWorkTime kqWorkTime = new KQWorkTime();
ShiftManagementToolKit shiftManagementToolKit = new ShiftManagementToolKit();
KQReportBiz kqReportBiz = new KQReportBiz();
KQLeaveRulesBiz kqLeaveRulesBiz = new KQLeaveRulesBiz();
String rightSql = new KQReportBiz().getReportRight("2",""+user.getUID(),"a");
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
String fromDate = Util.null2String(jsonObj.get("fromDate"));
String toDate = Util.null2String(jsonObj.get("toDate"));
String typeselect =Util.null2String(jsonObj.get("typeselect"));
if(typeselect.length()==0)typeselect = "3";
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
if(typeselect.equals("1")){
fromDate = TimeUtil.getCurrentDateString();
toDate = TimeUtil.getCurrentDateString();
}else{
fromDate = TimeUtil.getDateByOption(typeselect,"0");
toDate = TimeUtil.getDateByOption(typeselect,"1");
}
}
//人员状态
String status = Util.null2String(jsonObj.get("status"));
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
String departmentId = Util.null2String(jsonObj.get("departmentId"));
String resourceId = Util.null2String(jsonObj.get("resourceId"));
String allLevel = Util.null2String(jsonObj.get("allLevel"));
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
String viewScope = Util.null2String(jsonObj.get("viewScope"));
if(typeselect.length()==0)typeselect = "3";
int pageIndex = Util.getIntValue(Util.null2String(jsonObj.get("pageIndex")), 1);
int pageSize = KQReportBiz.getPageSize(Util.null2String(jsonObj.get("pageSize")),pageUid,user.getUID());
int count = 0;
int pageCount = 0;
int isHavePre = 0;
int isHaveNext = 0;
List<Map<String, Object>> leaveRules = kqLeaveRulesBiz.getAllLeaveRules();
List<Object> columns = new ArrayList();
Map<String,Object> column = null;
List<Object> datas = new ArrayList();
Map<String,Object> data = null;
Map<String,Object> mapChildColumnInfo = null;
List<Object> childColumns = null;
KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo();
while (kqReportFieldComInfo.next()){
if(Util.null2String(kqReportFieldComInfo.getParentid()).length()>0)continue;
boolean isDaily = kqReportFieldComInfo.getReportType().equals("daily");
if(!kqReportFieldComInfo.getReportType().equals("all") && !isDaily)continue;
if("leave".equalsIgnoreCase(kqReportFieldComInfo.getFieldname())&&leaveRules.size()==0){
continue;
}
column = new HashMap();
column.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage()));
column.put("unit", KQReportBiz.getUnitType(kqReportFieldComInfo, user));
column.put("dataIndex", kqReportFieldComInfo.getFieldname());
column.put("key", kqReportFieldComInfo.getFieldname());
mapChildColumnInfo = this.getChildColumnsInfo(kqReportFieldComInfo.getFieldname(),user);
childColumns = (List<Object>)mapChildColumnInfo.get("childColumns");
if(childColumns.size()>0) {//跨列width取子列的width
column.put("rowSpan", 1);
column.put("width", mapChildColumnInfo.get("sumChildColumnWidth"));
column.put("children", childColumns);
}else{
column.put("rowSpan", 3);
column.put("width", Util.getIntValue(kqReportFieldComInfo.getWidth()));
}
if(kqReportFieldComInfo.getReportType1().equals("daily")){
column.put("isdaily", "1");
}
column.put("showDetial",kqReportFieldComInfo.getShowDetial());
columns.add(column);
}
// String today = DateUtil.getCurrentDate();
// if(DateUtil.compDate(today, toDate)>0){//结束如期不大于今天
// toDate = today;
// if(DateUtil.compDate(today, fromDate)>0){
// fromDate = today;
// }
// }
String forgotBeginWorkCheck_field = " b.forgotbeginworkcheck ";
if(rs.getDBType().equalsIgnoreCase("oracle")&&!Util.null2String(rs.getOrgindbtype()).equals("dm")&&!Util.null2String(rs.getOrgindbtype()).equals("st")&&!Util.null2String(rs.getOrgindbtype()).equals("jc")) {
forgotBeginWorkCheck_field = " nvl(b.forgotBeginWorkCheck,0) ";
}else if((rs.getDBType()).equalsIgnoreCase("mysql")){
forgotBeginWorkCheck_field = " ifnull(b.forgotBeginWorkCheck,0) ";
}else {
forgotBeginWorkCheck_field = " isnull(b.forgotBeginWorkCheck,0) ";
}
String backFields = " a.id,a.lastname,b.subcompanyid, b.departmentid, a.workcode,b.jobtitle,a.dsporder," +
" b.kqdate, b.workdays,b.workMins,b.serialid, b.attendancedays,b.attendanceMins," +
" b.beLate,b.beLateMins,b.graveBeLate,b.graveBeLateMins,b.leaveEearly,b.leaveEarlyMins," +
" b.signdays,b.signmins, "+
" 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){
sqlWhere +=" and a.subcompanyid1 in("+subCompanyId+") ";
}
if(departmentId.length()>0){
sqlWhere +=" and a.departmentid in("+departmentId+") ";
}
if(resourceId.length()>0){
sqlWhere +=" and b.resourceid in("+resourceId+") ";
}
if(viewScope.equals("4")){//我的下属
if(allLevel.equals("1")){//所有下属
sqlWhere+=" and a.managerstr like '%,"+user.getUID()+",%'";
}else{
sqlWhere+=" and a.managerid="+user.getUID();//直接下属
}
}
if (!"1".equals(isNoAccount)) {
sqlWhere += " and a.loginid is not null "+(rs.getDBType().equals("oracle")?"":" and a.loginid<>'' ");
}
if(status.length()>0){
if (!status.equals("8") && !status.equals("9")) {
sqlWhere += " and a.status = "+status+ "";
}else if (status.equals("8")) {
sqlWhere += " and (a.status = 0 or a.status = 1 or a.status = 2 or a.status = 3) ";
}
}
sql = " select count(*) as c from ( select 1 as c "+sqlFrom+sqlWhere+") t";
rs.execute(sql);
if (rs.next()){
count = rs.getInt("c");
}
if (count <= 0) {
pageCount = 0;
}
pageCount = count / pageSize + ((count % pageSize > 0) ? 1 : 0);
isHaveNext = (pageIndex + 1 <= pageCount) ? 1 : 0;
isHavePre = (pageIndex - 1 >= 1) ? 1 : 0;
String orderBy = " order by a.dsporder asc, a.lastname asc, b.kqdate asc ";
String descOrderBy = " order by a.dsporder desc, a.lastname desc, b.kqdate desc ";
sql = backFields + sqlFrom + sqlWhere + orderBy;
if (pageIndex > 0 && pageSize > 0) {
if (rs.getDBType().equals("oracle")) {
sql = " select " + sql;
sql = "select * from ( select row_.*, rownum rownum_ from ( " + sql + " ) row_ where rownum <= "
+ (pageIndex * pageSize) + ") where rownum_ > " + ((pageIndex - 1) * pageSize);
} else if (rs.getDBType().equals("mysql")) {
sql = " select " + sql;
sql = "select t1.* from (" + sql + ") t1 limit " + ((pageIndex - 1) * pageSize) + "," + pageSize;
}
else if (rs.getDBType().equals("postgresql")) {
sql = " select " + sql;
sql = "select t1.* from (" + sql + ") t1 limit " + pageSize+ " offset " + ((pageIndex - 1) * pageSize);
}
else {
orderBy = " order by dsporder asc, lastname asc, kqdate asc ";
descOrderBy = " order by dsporder desc, lastname desc, kqdate desc ";
if (pageIndex > 1) {
int topSize = pageSize;
if (pageSize * pageIndex > count) {
topSize = count - (pageSize * (pageIndex - 1));
}
sql = " select top " + topSize + " * from ( select top " + topSize + " * from ( select top "
+ (pageIndex * pageSize) + sql+" ) tbltemp1 " + descOrderBy + ") tbltemp2 " + orderBy;
} else {
sql = " select top " + pageSize + sql;
}
}
} else {
sql = " select " + sql;
}
Map<String,Object> flowData = kqReportBiz.getDailyFlowData(params,user);
rs.execute(sql);
while (rs.next()) {
String id = rs.getString("id");
String kqdate = rs.getString("kqdate");
WorkTimeEntity workTime = kqWorkTime.getWorkTime(id, kqdate);
data = new HashMap<>();
kqReportFieldComInfo.setTofirstRow();
while (kqReportFieldComInfo.next()) {
if (!Util.null2String(kqReportFieldComInfo.getIsdataColumn()).equals("1")) continue;
if (!kqReportFieldComInfo.getReportType().equals("all") && !kqReportFieldComInfo.getReportType().equals("daily"))
continue;
String fieldName = kqReportFieldComInfo.getFieldname();
String fieldValue = "";
if (fieldName.equals("subcompany")) {
String fieldValueID = rs.getString("subcompanyid");
fieldValue = subCompanyComInfo.getSubCompanyname(fieldValueID);
if (fieldValue.length() == 0) {
fieldValueID = resourceComInfo.getSubCompanyID(id);
fieldValue = subCompanyComInfo.getSubCompanyname(fieldValueID);
}
data.put(fieldName + "Id", fieldValueID);
data.put(fieldName, fieldValue);
} else if (fieldName.equals("department")) {
String fieldValueID = rs.getString("departmentid");
fieldValue = departmentComInfo.getDepartmentname(fieldValueID);
if (fieldValue.length() == 0) {
fieldValueID = resourceComInfo.getDepartmentID(id);
fieldValue = departmentComInfo.getDepartmentname(fieldValueID);
}
data.put(fieldName + "Id", fieldValueID);
data.put(fieldName, fieldValue);
} else if (fieldName.equals("jobtitle")) {
String fieldValueID = rs.getString("jobtitle");
fieldValue = jobTitlesComInfo.getJobTitlesname(rs.getString("jobtitle"));
if (fieldValue.length() == 0) {
fieldValueID = resourceComInfo.getJobTitle(id);
fieldValue = jobTitlesComInfo.getJobTitlesname(fieldValueID);
}
data.put(fieldName + "Id", fieldValueID);
data.put(fieldName, fieldValue);
} else if (kqReportFieldComInfo.getParentid().equals("overtime") || kqReportFieldComInfo.getParentid().equals("overtime_nonleave")
|| kqReportFieldComInfo.getParentid().equals("overtime_4leave") || fieldName.equals("businessLeave") || fieldName.equals("officialBusiness")) {
if (fieldName.equals("overtimeTotal")) {
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|workingDayOvertime_4leave")));
workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|restDayOvertime_4leave")));
restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave;
double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|holidayOvertime_4leave")));
holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave;
double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|workingDayOvertime_nonleave")));
workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|restDayOvertime_nonleave")));
restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave;
double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|holidayOvertime_nonleave")));
holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave +
workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave));
} else {
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|" + kqdate + "|" + fieldName)));
}
data.put(fieldName, fieldValue);
} else if (fieldName.equals("serialid")) {
fieldValue = Util.null2String(rs.getString(fieldName));
if (fieldValue.length()>0) {//弹性工作制没有班次
data.put("serialid", shiftManagementToolKit.getShiftOnOffWorkSections(fieldValue, user.getLanguage()));
}
}else {
fieldValue = Util.null2String(rs.getString(fieldName));
if (kqReportFieldComInfo.getUnittype().equals("2") && fieldValue.length() > 0) {
fieldValue = KQDurationCalculatorUtil.getDurationRound(("" + (Util.getDoubleValue(fieldValue) / 60.0)));
}
data.put(fieldName, fieldValue);
}
}
data.putAll(this.getSignDetailInfo(id, kqdate));
//请假
List<Map<String, Object>> allLeaveRules = KQLeaveRulesBiz.getAllLeaveRules();
Map<String, Object> leaveRule = null;
for (int i = 0; allLeaveRules != null && i < allLeaveRules.size(); i++) {
leaveRule = (Map<String, Object>) allLeaveRules.get(i);
String flowType = Util.null2String("leaveType_" + leaveRule.get("id"));
String leaveData = Util.null2String(flowData.get(id + "|" + kqdate + "|" + flowType));
String flowLeaveBackType = Util.null2String("leavebackType_" + leaveRule.get("id"));
String leavebackData = Util.null2s(Util.null2String(flowData.get(id + "|" + kqdate + "|" + flowLeaveBackType)), "0.0");
String b_flowLeaveData = "";
String flowLeaveData = "";
try {
//以防止出现精度问题
if (leaveData.length() == 0) {
leaveData = "0.0";
}
if (leavebackData.length() == 0) {
leavebackData = "0.0";
}
BigDecimal b_leaveData = new BigDecimal(leaveData);
BigDecimal b_leavebackData = new BigDecimal(leavebackData);
b_flowLeaveData = b_leaveData.subtract(b_leavebackData).toString();
if(Util.getDoubleValue(b_flowLeaveData, -1) < 0){
b_flowLeaveData = "0.0";
}
} catch (Exception e) {
kqLog.info("GetKQReportCmd:leaveData" + leaveData + ":leavebackData:" + leavebackData + ":" + e);
}
//考虑下冻结的数据
if (b_flowLeaveData.length() > 0) {
flowLeaveData = KQDurationCalculatorUtil.getDurationRound(b_flowLeaveData);
} else {
flowLeaveData = KQDurationCalculatorUtil.getDurationRound(Util.null2String(Util.getDoubleValue(leaveData, 0.0) - Util.getDoubleValue(leavebackData, 0.0)));
}
data.put(flowType, flowLeaveData);
}
data.put("resourceId", id);
data.put("kqdate", kqdate);
datas.add(data);
}
List<Object> lsHolidays = KQHolidaySetBiz.getHolidaySetListByScope(""+user.getUID(),fromDate,toDate);
retmap.put("holidays", lsHolidays);
retmap.put("columns",columns);
retmap.put("datas",datas);
retmap.put("pagesize", pageSize);
retmap.put("pageindex", pageIndex);
retmap.put("count", count);
retmap.put("pagecount", pageCount);
retmap.put("ishavepre", isHavePre);
retmap.put("ishavenext", isHaveNext);
}catch (Exception e){
writeLog(e);
}
return retmap;
}
private String getUnitType(String unitType, User user){
String unitTypeName = "";
if(Util.null2String(unitType).length()>0){
if(unitType.equals("1")){
unitTypeName=SystemEnv.getHtmlLabelName(1925, user.getLanguage());
}else if(unitType.equals("2")){
unitTypeName=SystemEnv.getHtmlLabelName(391, user.getLanguage());
}else if(unitType.equals("3")){
unitTypeName=SystemEnv.getHtmlLabelName(18083, user.getLanguage());
}
}
return unitTypeName;
}
private Map<String,Object> getChildColumnsInfo(String parentid, User user){
Map<String,Object> returnMap = new HashMap<>();
List<Object> lsChildColumns = new ArrayList<>();
Map column = null;
int sumChildColumnWidth = 0;
if(parentid.equals("leave")){
KQLeaveRulesBiz kqLeaveRulesBiz = new KQLeaveRulesBiz();
List<Map<String, Object>> leaveRules = kqLeaveRulesBiz.getAllLeaveRules();
for(int i=0;leaveRules!=null&&i<leaveRules.size();i++){
Map<String, Object> leaveRule = leaveRules.get(i);
String id = "leaveType_"+Util.null2String(leaveRule.get("id"));
String name = Util.null2String(leaveRule.get("name"));
String unitType = Util.null2String(leaveRule.get("unitType"));
column = new HashMap();
column.put("title", name);
column.put("unit", KQUnitBiz.isLeaveHour(unitType) ?SystemEnv.getHtmlLabelName(391, user.getLanguage()):SystemEnv.getHtmlLabelName(1925, user.getLanguage()));
column.put("width", 65);
column.put("dataIndex", id);
column.put("key", id);
column.put("rowSpan", 2);
column.put("colSpan", 1);
column.put("showDetial","1");
sumChildColumnWidth+=65;
lsChildColumns.add(column);
}
}else if(parentid.equals("overtime")){
String[] overtimeChild = {"overtime_nonleave","overtime_4leave","overtimeTotal"};
for(int i=0;i<overtimeChild.length;i++){
String id = overtimeChild[i];
column = new HashMap();
String fieldlabel = "";
column.put("unit", "");
if("overtime_nonleave".equalsIgnoreCase(id)){
fieldlabel = "125805";
}else if("overtime_4leave".equalsIgnoreCase(id)){
fieldlabel = "125804";
}else{
fieldlabel = "523";
column.put("showDetial","1");
String unitType = (KQOvertimeRulesBiz.getMinimumUnit()==3 || KQOvertimeRulesBiz.getMinimumUnit()==5 ||KQOvertimeRulesBiz.getMinimumUnit()==6)?"2":"1";
String unitTypeName = "";
if(Util.null2String(unitType).length()>0){
if(unitType.equals("1")){
unitTypeName=SystemEnv.getHtmlLabelName(1925, user.getLanguage());
}else if(unitType.equals("2")){
unitTypeName=SystemEnv.getHtmlLabelName(391, user.getLanguage());
}else if(unitType.equals("3")){
unitTypeName=SystemEnv.getHtmlLabelName(18083, user.getLanguage());
}
}
column.put("unit", unitTypeName);
}
column.put("title", SystemEnv.getHtmlLabelNames(fieldlabel, user.getLanguage()));
column.put("dataIndex", id);
column.put("key", id);
column.put("rowSpan", 1);
Map<String,Object> mapChildColumnInfo = getChildColumnsInfo(id, user);
int childWidth = 65;
List<Object> childColumns = (List<Object>)mapChildColumnInfo.get("childColumns");
if(childColumns.size()>0) {//跨列width取子列的width
column.put("children", childColumns);
childWidth = Util.getIntValue(Util.null2String(mapChildColumnInfo.get("sumChildColumnWidth")),65);
}
column.put("width", childWidth+"");
sumChildColumnWidth+=childWidth;
lsChildColumns.add(column);
}
}else{
KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo();
while (kqReportFieldComInfo.next()){
if(kqReportFieldComInfo.getParentid().equals(parentid)) {
if(!kqReportFieldComInfo.getReportType().equals("daily"))continue;
column = new HashMap();
column.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage()));
column.put("unit", KQReportBiz.getUnitType(kqReportFieldComInfo, user));
column.put("width", Util.getIntValue(kqReportFieldComInfo.getWidth()));
column.put("dataIndex", kqReportFieldComInfo.getFieldname());
column.put("key", kqReportFieldComInfo.getFieldname());
column.put("rowSpan", 2);
column.put("colSpan", 1);
column.put("isdaily", kqReportFieldComInfo.getReportType1().equals("daily")?"1":"0");
sumChildColumnWidth+=Util.getIntValue(kqReportFieldComInfo.getWidth());
lsChildColumns.add(column);
}
}
}
returnMap.put("childColumns",lsChildColumns);
returnMap.put("sumChildColumnWidth",sumChildColumnWidth);
return returnMap;
}
public Map<String, Object> getSignDetailInfo(String resourceId, String kqDate){
Map<String, Object> data = new HashMap<>();
Map<String,Object> signStatusInfo = null;
RecordSet rs = new RecordSet();
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";
rs.execute(sql);
while (rs.next()) {
String resourceid = Util.null2String(rs.getString("resourceid"));
String kqdate = Util.null2String(rs.getString("kqdate"));
String serialid = Util.null2String(rs.getString("serialid"));
int serialnumber = rs.getInt("serialnumber")+1;
String workbegindate = Util.null2String(rs.getString("workbegindate")).trim();
String workbegintime = Util.null2String(rs.getString("workbegintime")).trim();
String workenddate = Util.null2String(rs.getString("workenddate")).trim();
String workendtime = Util.null2String(rs.getString("workendtime")).trim();
int workMins = rs.getInt("workMins");
String signintime = Util.null2String(rs.getString("signintime")).trim();
String signouttime = Util.null2String(rs.getString("signouttime")).trim();
int attendanceMins = rs.getInt("attendanceMins");
String beLateMins = Util.null2String(rs.getString("beLateMins")).trim();
String graveBeLateMins = Util.null2String(rs.getString("graveBeLateMins")).trim();
String leaveEarlyMins= Util.null2String(rs.getString("leaveEarlyMins")).trim();
String graveLeaveEarlyMins= Util.null2String(rs.getString("graveLeaveEarlyMins")).trim();
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();
int leaveMins = rs.getInt("leaveMins");
String leaveInfo = Util.null2String(rs.getString("leaveInfo"));
int evectionMins = rs.getInt("evectionMins");
int outMins = rs.getInt("outMins");
if(serialid.length()>0){
if (workbegintime.length() > 0) {
signStatusInfo = new HashMap();
signStatusInfo.put("workdate",workbegindate);
signStatusInfo.put("worktime",workbegintime);
signStatusInfo.put("beLateMins",beLateMins);
signStatusInfo.put("forgotBeginWorkCheckMins",forgotBeginWorkCheckMins);
signStatusInfo.put("graveBeLateMins",graveBeLateMins);
signStatusInfo.put("absenteeismMins",absenteeismMins);
signStatusInfo.put("leaveMins",leaveMins);
signStatusInfo.put("leaveInfo",leaveInfo);
signStatusInfo.put("evectionMins",evectionMins);
signStatusInfo.put("outMins",outMins);
data.put("signintime"+serialnumber, signintime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signintime);
data.put("signinstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"on"));
}
if (workendtime.length() > 0) {
signStatusInfo = new HashMap();
signStatusInfo.put("workdate",workenddate);
signStatusInfo.put("worktime",kqTimesArrayComInfo.turn48to24Time(workendtime));
signStatusInfo.put("leaveEarlyMins",leaveEarlyMins);
signStatusInfo.put("graveLeaveEarlyMins",graveLeaveEarlyMins);
signStatusInfo.put("forgotCheckMins",forgotCheckMins);
signStatusInfo.put("forgotBeginWorkCheckMins",forgotBeginWorkCheckMins);
signStatusInfo.put("absenteeismMins",absenteeismMins);
signStatusInfo.put("leaveMins",leaveMins);
signStatusInfo.put("leaveInfo",leaveInfo);
signStatusInfo.put("evectionMins",evectionMins);
signStatusInfo.put("outMins",outMins);
data.put("signouttime"+serialnumber, signouttime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signouttime);
data.put("signoutstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"off"));
}
}else{
if(workMins>0){
//弹性工时打卡时间取自签到签退数据
}
signStatusInfo = new HashMap();
signStatusInfo.put("leaveMins",leaveMins);
signStatusInfo.put("leaveInfo",leaveInfo);
signStatusInfo.put("evectionMins",evectionMins);
signStatusInfo.put("outMins",outMins);
if(signinid.length() > 0){
data.put("signintime"+serialnumber, signintime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signintime);
data.put("signinstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"on"));
if(signoutid.length() > 0){
data.put("signouttime"+serialnumber, signouttime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signouttime);
data.put("signoutstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"off"));
}
}else{
data.put("signinstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"on"));
}
}
}
}catch (Exception e){
writeLog(e);
}
return data;
}
@Override
public BizLogContext getLogContext() {
return null;
}
}

@ -0,0 +1,682 @@
package com.engine.kq.cmd.report;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import com.engine.kq.biz.*;
import com.engine.kq.util.KQDurationCalculatorUtil;
import com.engine.kq.util.PageUidFactory;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.TimeUtil;
import weaver.general.Util;
import weaver.hrm.User;
import weaver.hrm.company.DepartmentComInfo;
import weaver.hrm.company.SubCompanyComInfo;
import weaver.hrm.job.JobTitlesComInfo;
import weaver.hrm.resource.ResourceComInfo;
import weaver.systeminfo.SystemEnv;
import java.math.BigDecimal;
import java.util.*;
public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
BaseBean basebean = new BaseBean();
public GetKQReportCmd(Map<String, Object> params, User user) {
this.user = user;
this.params = params;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
Map<String,Object> retmap = new HashMap<String,Object>();
RecordSet rs = new RecordSet();
String sql = "";
try{
String pageUid = PageUidFactory.getHrmPageUid("KQReport");
SubCompanyComInfo subCompanyComInfo = new SubCompanyComInfo();
DepartmentComInfo departmentComInfo = new DepartmentComInfo();
ResourceComInfo resourceComInfo = new ResourceComInfo();
JobTitlesComInfo jobTitlesComInfo = new JobTitlesComInfo();
KQLeaveRulesBiz kqLeaveRulesBiz = new KQLeaveRulesBiz();
KQReportBiz kqReportBiz = new KQReportBiz();
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
String attendanceSerial = Util.null2String(jsonObj.get("attendanceSerial"));
String fromDate = Util.null2String(jsonObj.get("fromDate"));
String toDate = Util.null2String(jsonObj.get("toDate"));
String typeselect =Util.null2String(jsonObj.get("typeselect"));
if(typeselect.length()==0)typeselect = "3";
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
if(typeselect.equals("1")){
fromDate = TimeUtil.getCurrentDateString();
toDate = TimeUtil.getCurrentDateString();
}else{
fromDate = TimeUtil.getDateByOption(typeselect,"0");
toDate = TimeUtil.getDateByOption(typeselect,"1");
}
}
//人员状态
String status = Util.null2String(jsonObj.get("status"));
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
String departmentId = Util.null2String(jsonObj.get("departmentId"));
String resourceId = Util.null2String(jsonObj.get("resourceId"));
String allLevel = Util.null2String(jsonObj.get("allLevel"));
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
String viewScope = Util.null2String(jsonObj.get("viewScope"));
String isFromMyAttendance = Util.null2String(jsonObj.get("isFromMyAttendance"));//是否是来自我的考勤的请求,如果是,不加载考勤报表权限共享的限制,不然我的考勤会提示无权限
int pageIndex = Util.getIntValue(Util.null2String(jsonObj.get("pageIndex")), 1);
int pageSize = KQReportBiz.getPageSize(Util.null2String(jsonObj.get("pageSize")),pageUid,user.getUID());
int count = 0;
int pageCount = 0;
int isHavePre = 0;
int isHaveNext = 0;
String rightSql = kqReportBiz.getReportRight("1",""+user.getUID(),"a");
if(isFromMyAttendance.equals("1")){
rightSql = "";
}
List<Map<String, Object>> leaveRules = kqLeaveRulesBiz.getAllLeaveRules();
List<Object> columns = new ArrayList();
Map<String,Object> column = null;
List<Object> datas = new ArrayList();
Map<String,Object> data = null;
Map<String,Object> mapChildColumnInfo = null;
List<Object> childColumns = null;
KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo();
while (kqReportFieldComInfo.next()){
if(Util.null2String(kqReportFieldComInfo.getParentid()).length()>0)continue;
if(kqReportFieldComInfo.getFieldname().equals("kqCalendar"))continue;
if(KQReportFieldComInfo.cascadekey2fieldname.keySet().contains(kqReportFieldComInfo.getFieldname()))continue;
if(!kqReportFieldComInfo.getReportType().equals("all") && !kqReportFieldComInfo.getReportType().equals("month"))continue;
if("leave".equalsIgnoreCase(kqReportFieldComInfo.getFieldname())&&leaveRules.size()==0)continue;
column = new HashMap();
column.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage()));
column.put("unit", KQReportBiz.getUnitType(kqReportFieldComInfo, user));
column.put("dataIndex", kqReportFieldComInfo.getFieldname());
column.put("type", kqReportFieldComInfo.getFieldname());
column.put("key", kqReportFieldComInfo.getFieldname());
column.put("isSystem", kqReportFieldComInfo.getIsSystem());
mapChildColumnInfo = this.getChildColumnsInfo(kqReportFieldComInfo.getFieldname(),user);
childColumns = (List<Object>)mapChildColumnInfo.get("childColumns");
if(childColumns.size()>0) {//跨列width取子列的width
column.put("rowSpan", 1);
column.put("width", mapChildColumnInfo.get("sumChildColumnWidth"));
column.put("children", childColumns);
}else{
column.put("rowSpan", 3);
column.put("width", Util.getIntValue(kqReportFieldComInfo.getWidth()));
}
column.put("showDetial",kqReportFieldComInfo.getShowDetial());
columns.add(column);
columns.addAll(this.getCascadeKeyColumnsInfo(kqReportFieldComInfo.getCascadekey(),user));
}
boolean isEnd = false;
Calendar cal = DateUtil.getCalendar();
String today = DateUtil.getCurrentDate();
// if(DateUtil.compDate(today, toDate)>0){//结束日期不大于今天
// toDate = today;
// if(DateUtil.compDate(today, fromDate)>0){//结束日期不大于今天
// fromDate = today;
// }
// }
childColumns = new ArrayList<>();
for(String date=fromDate; !isEnd;) {
if(date.equals(toDate)) isEnd = true;
column = new HashMap();
column.put("title", DateUtil.geDayOfMonth(date));
column.put("dataIndex", date);
column.put("key", date);
column.put("type", date);
column.put("rowSpan", 1);
column.put("width", 65);
column.put("isCalendar", 1);
childColumns.add(column);
cal.setTime(DateUtil.parseToDate(date));
date = DateUtil.getDate(cal.getTime(), 1);
}
column = new HashMap();
column.put("title", SystemEnv.getHtmlLabelName(386476, user.getLanguage()));
column.put("dataIndex", "kqCalendar");
column.put("key", "kqCalendar");
if(childColumns.size()>0) {//跨列width取子列的width
column.put("rowSpan", 1);
column.put("width", childColumns.size()*65);
column.put("children", childColumns);
}
columns.add(column);
String forgotBeginWorkCheck_field = " sum(b.forgotBeginWorkCheck) ";
if(rs.getDBType().equalsIgnoreCase("oracle")) {
forgotBeginWorkCheck_field = " sum(nvl(b.forgotBeginWorkCheck,0)) ";
}else if((rs.getDBType()).equalsIgnoreCase("mysql")){
forgotBeginWorkCheck_field = " sum(ifnull(b.forgotBeginWorkCheck,0)) ";
}else {
forgotBeginWorkCheck_field = " sum(isnull(b.forgotBeginWorkCheck,0)) ";
}
Map<String,Object> definedFieldInfo = new KQFormatBiz().getDefinedField();
String definedFieldSum = Util.null2String(definedFieldInfo.get("definedFieldSum"));
String backFields = " a.id,a.lastname,a.workcode,a.dsporder,b.resourceid,a.subcompanyid1 as subcompanyid,a.departmentid,a.jobtitle," +
" sum(b.workdays) as workdays,sum(b.workMins) as workMins,sum(b.attendancedays) as attendancedays," +
" sum(b.attendanceMins) as attendanceMins,sum(b.beLate) as beLate,sum(b.beLateMins) as beLateMins, " +
" sum(b.graveBeLate) as graveBeLate, sum(b.graveBeLateMins) as graveBeLateMins,sum(b.leaveEearly) as leaveEearly," +
" sum(b.leaveEarlyMins) as leaveEarlyMins, sum(b.graveLeaveEarly) as graveLeaveEarly, " +
" sum(b.graveLeaveEarlyMins) as graveLeaveEarlyMins,sum(b.absenteeism) as absenteeism, " +
" sum(b.signdays) as signdays,sum(b.signmins) as signmins, "+
" sum(b.absenteeismMins) as absenteeismMins, sum(b.forgotCheck)+"+forgotBeginWorkCheck_field+" as forgotCheck "+(definedFieldSum.length()>0?","+definedFieldSum+"":"");
if(rs.getDBType().equals("oracle")){
backFields = "/*+ index(kq_format_total IDX_KQ_FORMAT_TOTAL_KQDATE) */ "+backFields;
}
String sqlFrom = " from hrmresource a, kq_format_total b where a.id= b.resourceid and b.kqdate >='"+fromDate+"' and b.kqdate <='"+toDate+"'";
String sqlWhere = rightSql;
String groupBy = " group by a.id,a.lastname,a.workcode,a.dsporder,b.resourceid,a.subcompanyid1,a.departmentid,a.jobtitle ";
if(subCompanyId.length()>0){
sqlWhere +=" and a.subcompanyid1 in("+subCompanyId+") ";
}
if(departmentId.length()>0){
sqlWhere +=" and a.departmentid in("+departmentId+") ";
}
if(resourceId.length()>0){
sqlWhere +=" and b.resourceid in("+resourceId+") ";
}
if(viewScope.equals("4")){//我的下属
if(allLevel.equals("1")){//所有下属
sqlWhere+=" and a.managerstr like '%,"+user.getUID()+",%'";
}else{
sqlWhere+=" and a.managerid="+user.getUID();//直接下属
}
}
if (!"1".equals(isNoAccount)) {
sqlWhere += " and a.loginid is not null "+(rs.getDBType().equals("oracle")?"":" and a.loginid<>'' ");
}
if(status.length()>0){
if (!status.equals("8") && !status.equals("9")) {
sqlWhere += " and a.status = "+status+ "";
}else if (status.equals("8")) {
sqlWhere += " and (a.status = 0 or a.status = 1 or a.status = 2 or a.status = 3) ";
}
}
sql = " select count(*) as c from ( select 1 as c "+sqlFrom+sqlWhere+groupBy+") t";
rs.execute(sql);
if (rs.next()){
count = rs.getInt("c");
}
if (count <= 0) {
pageCount = 0;
}
pageCount = count / pageSize + ((count % pageSize > 0) ? 1 : 0);
isHaveNext = (pageIndex + 1 <= pageCount) ? 1 : 0;
isHavePre = (pageIndex - 1 >= 1) ? 1 : 0;
String orderBy = " order by t.dsporder asc, t.lastname asc ";
String descOrderBy = " order by t.dsporder desc, t.lastname desc ";
//默认排序设置 start有性能问题先取消后面再看看有没有好的方式
// String orderBySql = "select * from kq_report_order where userId=? and sort=1 order by orders";
// rs.executeQuery(orderBySql, user.getUID());
// if (rs.getCounts() <= 0) {
// orderBySql = "select * from kq_report_order where userId=0 and sort=1 order by orders";
// rs.executeQuery(orderBySql);
// }
// while (rs.next()) {
// String dataIndex = rs.getString("dataIndex");
// String ascOrDesc = rs.getString("ascOrDesc");
// String ascOrDesc1 = (ascOrDesc.equals("")||ascOrDesc.equals("asc"))?"desc":"asc";
// if (dataIndex.equals("organization")) {
// orderBy += ",showOrderOfDeptTree " + ascOrDesc + ",dept_id " + ascOrDesc;
// descOrderBy += ",showOrderOfDeptTree " + ascOrDesc1 + ",dept_id " + ascOrDesc1;
// }
// if (dataIndex.equalsIgnoreCase("dspOrder") || dataIndex.equalsIgnoreCase("lastName")) {
// orderBy += "," + dataIndex + " " + ascOrDesc + ",id " + ascOrDesc;
// descOrderBy += "," + dataIndex + " " + ascOrDesc1 + ",id " + ascOrDesc1;
// } else if (dataIndex.equalsIgnoreCase("deptShowOrder") || dataIndex.equalsIgnoreCase("deptName")) {
// orderBy += "," + dataIndex + " " + ascOrDesc + ",dept_id " + ascOrDesc;
// descOrderBy += "," + dataIndex + " " + ascOrDesc1 + ",dept_id " + ascOrDesc1;
// } else if (dataIndex.equalsIgnoreCase("subcomShowOrder") || dataIndex.equalsIgnoreCase("subcomName")) {
// orderBy += "," + dataIndex + " " + ascOrDesc + ",subcom_id " + ascOrDesc;
// descOrderBy += "," + dataIndex + " " + ascOrDesc1 + ",subcom_id " + ascOrDesc1;
// }
// }
// orderBy = orderBy.startsWith(",") ? orderBy.substring(1) : orderBy;
// descOrderBy = descOrderBy.startsWith(",") ? descOrderBy.substring(1) : descOrderBy;
// orderBy = orderBy.equals("") ? " t.dspOrder,t.id " : orderBy;
// descOrderBy = descOrderBy.equals("") ? " t.dspOrder,t.id " : descOrderBy;
// orderBy = "order by "+orderBy;
sql = backFields + sqlFrom + sqlWhere + groupBy;
if (pageIndex > 0 && pageSize > 0) {
if (rs.getDBType().equals("oracle")) {
sql = " select * from (select " + sql+") t "+orderBy;
sql = "select * from ( select row_.*, rownum rownum_ from ( " + sql + " ) row_ where rownum <= "
+ (pageIndex * pageSize) + ") where rownum_ > " + ((pageIndex - 1) * pageSize);
} else if (rs.getDBType().equals("mysql")) {
sql = " select * from (select " + sql+") t "+orderBy;
sql = "select t1.* from (" + sql + ") t1 limit " + ((pageIndex - 1) * pageSize) + "," + pageSize;
}
else if (rs.getDBType().equals("postgresql")) {
sql = " select * from (select " + sql+") t "+orderBy;
sql = "select t1.* from (" + sql + ") t1 limit " +pageSize + " offset " + ((pageIndex - 1) * pageSize);
}
else {
orderBy = " order by dsporder asc, lastname asc ";
descOrderBy = " order by dsporder desc, lastname desc ";
if (pageIndex > 1) {
int topSize = pageSize;
if (pageSize * pageIndex > count) {
topSize = count - (pageSize * (pageIndex - 1));
}
sql = " select top " + topSize + " * from ( select top " + topSize + " * from ( select top "
+ (pageIndex * pageSize) + sql + orderBy+ " ) tbltemp1 " + descOrderBy + ") tbltemp2 " + orderBy;
} else {
sql = " select top " + pageSize + sql+orderBy;
}
}
} else {
sql = " select " + sql;
}
Map<String,Object> flowData = kqReportBiz.getFlowData(params,user);
rs.execute(sql);
basebean.writeLog("这是改过的考勤汇总报表的SQL" + sql);
while (rs.next()) {
data = new HashMap<>();
kqReportFieldComInfo.setTofirstRow();
String id = rs.getString("id");
data.put("resourceId",id);
while (kqReportFieldComInfo.next()){
if(!Util.null2String(kqReportFieldComInfo.getIsdataColumn()).equals("1"))continue;
if(!kqReportFieldComInfo.getReportType().equals("all") && !kqReportFieldComInfo.getReportType().equals("month"))continue;
if("leave".equalsIgnoreCase(kqReportFieldComInfo.getFieldname())&&leaveRules.size()==0){
continue;
}
String fieldName = kqReportFieldComInfo.getFieldname();
String fieldValue = "";
if(fieldName.equals("subcompany")){
String tmpSubcompanyId = Util.null2String(rs.getString("subcompanyid"));
if(tmpSubcompanyId.length()==0){
tmpSubcompanyId = Util.null2String(resourceComInfo.getSubCompanyID(id));
}
data.put("subcompanyId",tmpSubcompanyId);
fieldValue = subCompanyComInfo.getSubCompanyname(tmpSubcompanyId);
}else if(fieldName.equals("department")){
String tmpDepartmentId = Util.null2String(rs.getString("departmentid"));
if(tmpDepartmentId.length()==0){
tmpDepartmentId = Util.null2String(resourceComInfo.getDepartmentID(id));
}
data.put("departmentId",tmpDepartmentId);
fieldValue = departmentComInfo.getDepartmentname(tmpDepartmentId);
}else if(fieldName.equals("jobtitle")){
String tmpJobtitleId = Util.null2String(rs.getString("jobtitle"));
if(tmpJobtitleId.length()==0){
tmpJobtitleId = Util.null2String(resourceComInfo.getJobTitle(id));
}
data.put("jobtitleId",tmpJobtitleId);
fieldValue = jobTitlesComInfo.getJobTitlesname(tmpJobtitleId);
}else if(fieldName.equals("attendanceSerial")){
List<String> serialIds = null;
if(attendanceSerial.length()>0){
serialIds = Util.splitString2List(attendanceSerial,",");
}
for(int i=0;serialIds!=null&&i<serialIds.size();i++){
data.put(serialIds.get(i), kqReportBiz.getSerialCount(id,fromDate,toDate,serialIds.get(i)));
}
}else if(kqReportFieldComInfo.getParentid().equals("overtime")||kqReportFieldComInfo.getParentid().equals("overtime_nonleave")
||kqReportFieldComInfo.getParentid().equals("overtime_4leave")||fieldName.equals("businessLeave") || fieldName.equals("officialBusiness")){
if(fieldName.equals("overtimeTotal")){
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|workingDayOvertime_4leave")));
workingDayOvertime_4leave = workingDayOvertime_4leave<0?0:workingDayOvertime_4leave;
double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|restDayOvertime_4leave")));
restDayOvertime_4leave = restDayOvertime_4leave<0?0:restDayOvertime_4leave;
double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|holidayOvertime_4leave")));
holidayOvertime_4leave = holidayOvertime_4leave<0?0:holidayOvertime_4leave;
double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|workingDayOvertime_nonleave")));
workingDayOvertime_nonleave = workingDayOvertime_nonleave<0?0:workingDayOvertime_nonleave;
double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|restDayOvertime_nonleave")));
restDayOvertime_nonleave = restDayOvertime_nonleave<0?0:restDayOvertime_nonleave;
double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|holidayOvertime_nonleave")));
holidayOvertime_nonleave = holidayOvertime_nonleave<0?0:holidayOvertime_nonleave;
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(workingDayOvertime_4leave+restDayOvertime_4leave+holidayOvertime_4leave+
workingDayOvertime_nonleave+restDayOvertime_nonleave+holidayOvertime_nonleave));
}else if(fieldName.equals("businessLeave") || fieldName.equals("officialBusiness")){
String businessLeaveData = Util.null2s(Util.null2String(flowData.get(id+"|"+fieldName)),"0.0");
String backType = fieldName+"_back";
String businessLeavebackData = Util.null2s(Util.null2String(flowData.get(id+"|"+backType)),"0.0");
String businessLeave = "";
try{
//以防止出现精度问题
if(businessLeaveData.length() == 0){
businessLeaveData = "0.0";
}
if(businessLeavebackData.length() == 0){
businessLeavebackData = "0.0";
}
BigDecimal b_businessLeaveData = new BigDecimal(businessLeaveData);
BigDecimal b_businessLeavebackData = new BigDecimal(businessLeavebackData);
businessLeave = b_businessLeaveData.subtract(b_businessLeavebackData).toString();
if(Util.getDoubleValue(businessLeave, -1) < 0){
businessLeave = "0.0";
}
}catch (Exception e){
}
fieldValue = KQDurationCalculatorUtil.getDurationRound(businessLeave);
}else{
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id+"|"+fieldName)));
}
} else {
fieldValue = Util.null2String(rs.getString(fieldName));
if(Util.null2String(kqReportFieldComInfo.getUnittype()).length()>0) {
if(fieldValue.length() == 0){
fieldValue="0";
}else{
if (kqReportFieldComInfo.getUnittype().equals("2")) {
fieldValue = KQDurationCalculatorUtil.getDurationRound(("" + (Util.getDoubleValue(fieldValue) / 60.0)));
}
}
}
}
data.put(fieldName,fieldValue);
}
//请假
List<Map<String, Object>> allLeaveRules = kqLeaveRulesBiz.getAllLeaveRules();
Map<String, Object> leaveRule = null;
for(int i=0;allLeaveRules!=null&&i<allLeaveRules.size();i++){
leaveRule = (Map<String, Object>)allLeaveRules.get(i);
String flowType = Util.null2String("leaveType_"+leaveRule.get("id"));
String leaveData = Util.null2String(flowData.get(id+"|"+flowType));
String flowLeaveBackType = Util.null2String("leavebackType_"+leaveRule.get("id"));
String leavebackData = Util.null2s(Util.null2String(flowData.get(id+"|"+flowLeaveBackType)),"0.0");
String b_flowLeaveData = "";
String flowLeaveData = "";
try{
//以防止出现精度问题
if(leaveData.length() == 0){
leaveData = "0.0";
}
if(leavebackData.length() == 0){
leavebackData = "0.0";
}
BigDecimal b_leaveData = new BigDecimal(leaveData);
BigDecimal b_leavebackData = new BigDecimal(leavebackData);
b_flowLeaveData = b_leaveData.subtract(b_leavebackData).toString();
if(Util.getDoubleValue(b_flowLeaveData, -1) < 0){
b_flowLeaveData = "0.0";
}
}catch (Exception e){
writeLog("GetKQReportCmd:leaveData"+leaveData+":leavebackData:"+leavebackData+":"+e);
}
//考虑下冻结的数据
if(b_flowLeaveData.length() > 0){
flowLeaveData = KQDurationCalculatorUtil.getDurationRound(b_flowLeaveData);
}else{
flowLeaveData = KQDurationCalculatorUtil.getDurationRound(Util.null2String(Util.getDoubleValue(leaveData,0.0)-Util.getDoubleValue(leavebackData,0.0)));
}
data.put(flowType,flowLeaveData);
}
Map<String,Object> detialDatas = kqReportBiz.getDetialDatas(id,fromDate,toDate,user);
// new KQLog().info("id:"+id+":detialDatas:"+detialDatas);
isEnd = false;
for(String date=fromDate; !isEnd;) {
if(date.equals(toDate)) isEnd = true;
if(DateUtil.compDate(today, date)>0){
data.put(date,"");
}else{
// new KQLog().info("id:date:"+(id+"|"+date)+":detialDatas.get:"+detialDatas.get(id+"|"+date));
data.put(date,detialDatas.get(id+"|"+date)==null?SystemEnv.getHtmlLabelName(26593, user.getLanguage()):detialDatas.get(id+"|"+date));
}
cal.setTime(DateUtil.parseToDate(date));
date = DateUtil.getDate(cal.getTime(), 1);
}
datas.add(data);
}
List<Object> lsHolidays = KQHolidaySetBiz.getHolidaySetListByScope(""+user.getUID(),fromDate,toDate);
retmap.put("holidays", lsHolidays);
retmap.put("columns",columns);
retmap.put("datas",datas);
retmap.put("pagesize", pageSize);
retmap.put("pageindex", pageIndex);
retmap.put("count", count);
retmap.put("pagecount", pageCount);
retmap.put("ishavepre", isHavePre);
retmap.put("ishavenext", isHaveNext);
}catch (Exception e){
writeLog(e);
}
return retmap;
}
private Map<String,Object> getChildColumnsInfo(String parentid, User user){
Map<String,Object> returnMap = new HashMap<>();
BaseBean bb = new BaseBean();
List<Object> lsChildColumns = new ArrayList<>();
Map column = null;
int sumChildColumnWidth = 0;
//考勤二开--获取低于、高于标准时间的假期类型
String lowType = basebean.getPropValue("omlKq_main", "dybzgzsjid");
String upType = basebean.getPropValue("omlKq_main", "gybzgzsjid");
if(parentid.equals("attendanceSerial")){//考勤班次
KQShiftManagementComInfo kqShiftManagementComInfo = new KQShiftManagementComInfo();
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
List<String> serialIds = null;
if(Util.null2String(jsonObj.get("attendanceSerial")).length()>0){
serialIds = Util.splitString2List(Util.null2String(jsonObj.get("attendanceSerial")),",");
}
for(int i=0;serialIds!=null&&i<serialIds.size();i++){
column = new HashMap();
column.put("title", kqShiftManagementComInfo.getSerial(serialIds.get(i)));
column.put("unit", "");
column.put("width", 65);
column.put("dataIndex", serialIds.get(i));
column.put("key", serialIds.get(i));
column.put("rowSpan", 2);
column.put("colSpan", 1);
sumChildColumnWidth+=65;
lsChildColumns.add(column);
}
}else if(parentid.equals("leave")){
KQLeaveRulesBiz kqLeaveRulesBiz = new KQLeaveRulesBiz();
List<Map<String, Object>> leaveRules = kqLeaveRulesBiz.getAllLeaveRules();
List<Object> lsChildYsColumns = new ArrayList<>();
List<Object> lsChildNoYsColumns = new ArrayList<>();
int sumChildYsColumnWidth = 0;
int sumChildNoYsColumnWidth = 0;
for(int i=0;leaveRules!=null&&i<leaveRules.size();i++){
Map<String, Object> leaveRule = leaveRules.get(i);
//考勤二开--低于、高于两个类型的假期不在请假中显示
if (leaveRule.get("id").equals(lowType) || leaveRule.get("id").equals(upType)) {
bb.writeLog("getChildColumnsInfo leaveRuleid: " + leaveRule);
continue;
}
//end
String id = "leaveType_"+Util.null2String(leaveRule.get("id"));
String name = Util.null2String(leaveRule.get("name"));
String unitType = Util.null2String(leaveRule.get("unitType"));
column = new HashMap();
column.put("title", name);
column.put("unit", KQUnitBiz.isLeaveHour(unitType) ?SystemEnv.getHtmlLabelName(391, user.getLanguage()):SystemEnv.getHtmlLabelName(1925, user.getLanguage()));
column.put("width", 65);
column.put("dataIndex", id);
column.put("key", id);
column.put("rowSpan", 2);
column.put("colSpan", 1);
column.put("showDetial","1");
String ifyxjs = getIfyxj(Util.null2String(leaveRule.get("id")));
bb.writeLog("ifyxjs:"+ifyxjs);
if("0".equals(ifyxjs)){
lsChildNoYsColumns.add(column);
sumChildNoYsColumnWidth+=65;
}else{
lsChildYsColumns.add(column);
sumChildYsColumnWidth+=65;
}
sumChildColumnWidth+=65;
}
Map columnYs = new HashMap();
columnYs.put("unit","");
columnYs.put("title","有薪假");
columnYs.put("dataIndex","yxj");
columnYs.put("key","yxj");
columnYs.put("rowSpan",1);
columnYs.put("width",sumChildYsColumnWidth+"");
columnYs.put("children",lsChildYsColumns);
lsChildColumns.add(columnYs);
Map columnYsNo = new HashMap();
columnYsNo.put("unit","");
columnYsNo.put("title","扣薪假");
columnYsNo.put("dataIndex","kxj");
columnYsNo.put("key","kxj");
columnYsNo.put("rowSpan",1);
columnYsNo.put("width",sumChildNoYsColumnWidth+"");
columnYsNo.put("children",lsChildNoYsColumns);
lsChildColumns.add(columnYsNo);
bb.writeLog("lsChildColumns:"+lsChildColumns.toString());
bb.writeLog("sumChildYsColumnWidth:"+sumChildYsColumnWidth+"sumChildNoYsColumnWidth:"+sumChildNoYsColumnWidth);
}else if(parentid.equals("overtime")){
String[] overtimeChild = {"overtime_nonleave","overtime_4leave","overtimeTotal"};
for(int i=0;i<overtimeChild.length;i++){
String id = overtimeChild[i];
column = new HashMap();
String fieldlabel = "";
column.put("unit", "");
if("overtime_nonleave".equalsIgnoreCase(id)){
fieldlabel = "125805";
}else if("overtime_4leave".equalsIgnoreCase(id)){
fieldlabel = "125804";
}else{
fieldlabel = "523";
column.put("showDetial","1");
String unitType = (KQOvertimeRulesBiz.getMinimumUnit()==3 || KQOvertimeRulesBiz.getMinimumUnit()==5 ||KQOvertimeRulesBiz.getMinimumUnit()==6)?"2":"1";
String unitTypeName = "";
if(Util.null2String(unitType).length()>0){
if(unitType.equals("1")){
unitTypeName=SystemEnv.getHtmlLabelName(1925, user.getLanguage());
}else if(unitType.equals("2")){
unitTypeName=SystemEnv.getHtmlLabelName(391, user.getLanguage());
}else if(unitType.equals("3")){
unitTypeName=SystemEnv.getHtmlLabelName(18083, user.getLanguage());
}
}
column.put("unit", unitTypeName);
}
column.put("title", SystemEnv.getHtmlLabelNames(fieldlabel, user.getLanguage()));
column.put("dataIndex", id);
column.put("key", id);
column.put("rowSpan", 1);
Map<String,Object> mapChildColumnInfo = getChildColumnsInfo(id, user);
int childWidth = 65;
List<Object> childColumns = (List<Object>)mapChildColumnInfo.get("childColumns");
if(childColumns.size()>0) {//跨列width取子列的width
column.put("children", childColumns);
childWidth = Util.getIntValue(Util.null2String(mapChildColumnInfo.get("sumChildColumnWidth")),65);
}
column.put("width", childWidth+"");
sumChildColumnWidth+=childWidth;
lsChildColumns.add(column);
}
}else{
KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo();
while (kqReportFieldComInfo.next()){
if(kqReportFieldComInfo.getParentid().equals(parentid)) {
if(!kqReportFieldComInfo.getReportType().equals("month"))continue;
column = new HashMap();
column.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage()));
column.put("unit", KQReportBiz.getUnitType(kqReportFieldComInfo, user));
column.put("width", Util.getIntValue(kqReportFieldComInfo.getWidth()));
column.put("dataIndex", kqReportFieldComInfo.getFieldname());
column.put("key", kqReportFieldComInfo.getFieldname());
column.put("rowSpan", 1);
column.put("colSpan", 1);
column.put("showDetial",kqReportFieldComInfo.getShowDetial());
sumChildColumnWidth+=Util.getIntValue(kqReportFieldComInfo.getWidth());
lsChildColumns.add(column);
}
}
}
returnMap.put("childColumns",lsChildColumns);
returnMap.put("sumChildColumnWidth",sumChildColumnWidth);
return returnMap;
}
private List<Object> getCascadeKeyColumnsInfo(String cascadeKey, User user){
List<Object> lsChildColumns = new ArrayList<>();
if(Util.null2String(cascadeKey).length()==0){
return lsChildColumns;
}
Map<String,Object> column = null;
List<String> lsCascadeKey = Util.splitString2List(cascadeKey,",");
KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo();
for(int i=0;i<lsCascadeKey.size();i++){
kqReportFieldComInfo.setTofirstRow();
while (kqReportFieldComInfo.next()) {
if(!kqReportFieldComInfo.getReportType().equals("month"))continue;
if (kqReportFieldComInfo.getFieldname().equals(lsCascadeKey.get(i))){
column = new HashMap();
column.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage()));
column.put("unit", KQReportBiz.getUnitType(kqReportFieldComInfo, user));
column.put("width", Util.getIntValue(kqReportFieldComInfo.getWidth()));
column.put("dataIndex", kqReportFieldComInfo.getFieldname());
column.put("key", kqReportFieldComInfo.getFieldname());
column.put("rowSpan", 1);
column.put("colSpan", 1);
column.put("showDetial",kqReportFieldComInfo.getShowDetial());
column.put("isSystem", kqReportFieldComInfo.getIsSystem());
lsChildColumns.add(column);
}
}
}
return lsChildColumns;
}
@Override
public BizLogContext getLogContext() {
return null;
}
/**
*
* @param id
* @return
*/
private String getIfyxj(String id){
RecordSet rs = new RecordSet();
String ifyxj = "";
String sql ="select ifyxj from kq_LeaveRules where id = "+id;
rs.execute(sql);
if (rs.next()){
ifyxj = Util.null2String(rs.getString("ifyxj"));
}
return ifyxj;
}
}

@ -0,0 +1,278 @@
package com.engine.kq.cmd.reportdetial;
import com.cloudstore.dev.api.util.Util_TableMap;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import com.engine.kq.biz.KQReportBiz;
import com.engine.kq.util.PageUidFactory;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.TimeUtil;
import weaver.general.Util;
import weaver.hrm.User;
import weaver.systeminfo.SystemEnv;
import java.util.HashMap;
import java.util.Map;
/***
*
*/
public class GetSignInfoCmd extends AbstractCommonCommand<Map<String, Object>> {
public GetSignInfoCmd(Map<String, Object> params, User user) {
this.user = user;
this.params = params;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
Map<String, Object> retmap = new HashMap<String, Object>();
RecordSet rs = new RecordSet();
String sql = "";
try{
String dialogTitle = SystemEnv.getHtmlLabelName(391409,user.getLanguage());
String resourceId = Util.null2String(params.get("resourceId"));
String keyWord = Util.null2String(params.get("keyWord"));
String fromDate = Util.null2String(params.get("fromDate"));
String toDate = Util.null2String(params.get("toDate"));
String typeselect =Util.null2String(params.get("typeselect"));
if(typeselect.length()==0)typeselect = "3";
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
if(typeselect.equals("1")){
fromDate = TimeUtil.getCurrentDateString();
toDate = TimeUtil.getCurrentDateString();
}else{
fromDate = TimeUtil.getDateByOption(typeselect,"0");
toDate = TimeUtil.getDateByOption(typeselect,"1");
}
}
String viewScope = Util.null2String(params.get("viewScope"));
String subCompanyId = Util.null2String(params.get("subCompanyId"));
String departmentId = Util.null2String(params.get("departmentId"));
String allLevel = Util.null2String(params.get("allLevel"));
String isNoAccount = Util.null2String(params.get("isNoAccount"));
String type = Util.null2String(params.get("type"));
// String backFields = " a.id, b.resourceid,a.departmentid, a.lastname, a.workcode, a.status, a.dsporder, kqdate, serialid,serialid as serialid1, serialid as serialid2," +
// " workbegintime,workendtime,signintime,signouttime, attendanceMins, signMins ";
// String sqlFrom = "from hrmresource a, kq_format_detail b ";
// String sqlWhere = " where a.id = b.resourceid and (attendanceMins>0 or signMins>0)";
// String orderby = " kqdate asc, workbegintime asc " ;
// String tableString = "";
//
// String rightSql = new KQReportBiz().getReportRight("1",""+user.getUID(),"a");
// if(rightSql.length()>0){
// sqlWhere += rightSql;
// }
//
// if (keyWord.length() > 0){
// sqlWhere += " and lastname = "+keyWord;
// }
//
// if (fromDate.length() > 0){
// sqlWhere += " and kqdate >= '"+fromDate+"'";
// }
//
// if (toDate.length() > 0){
// sqlWhere += " and kqdate <= '"+toDate+"'";
// }
//
// if(subCompanyId.length()>0){
// sqlWhere +=" and a.subcompanyid1 in("+subCompanyId+") ";
// }
//
// if(departmentId.length()>0){
// sqlWhere +=" and a.departmentid in("+departmentId+") ";
// }
//
// if (resourceId.length() > 0){
// sqlWhere += " and b.resourceid in ( "+resourceId+")";
// }
//
// if(viewScope.equals("4")){//我的下属
// if(allLevel.equals("1")){//所有下属
// sqlWhere+=" and a.managerstr like '%,"+user.getUID()+",%'";
// }else{
// sqlWhere+=" and a.managerid="+user.getUID();//直接下属
// }
// }
// if (!"1".equals(isNoAccount)) {
// sqlWhere += " and a.loginid is not null "+(rs.getDBType().equals("oracle")?"":" and a.loginid<>'' ");
// }
//
// if (type.equals("signdays")||type.equals("signmins")) {
// sqlWhere += " and signmins >0 ";
// }
//综合制考勤组人员去除双休日加班
//加班明细放入出勤明细 start
String backFields = " u.id, u.resourceid,u.departmentid, u.lastname, u.workcode, u.status, u.dsporder, u.kqdate, u.serialid,u.serialid as serialid1, u.serialid as serialid2," +
" u.workbegintime, u.workendtime, u.signintime, u.signouttime, u.attendanceMins ";
String sqlFrom = "FROM " +
" ( " +
" ( " +
" SELECT " +
" a.subcompanyid1, " +
" a.managerstr, " +
" a.managerid, " +
" a.loginid, " +
" a.id, " +
" b.resourceid, " +
" a.departmentid, " +
" a.lastname, " +
" a.workcode, " +
" a.status, " +
" a.dsporder, " +
" kqdate, " +
" serialid, " +
" serialid AS serialid1, " +
" serialid AS serialid2, " +
" workbegintime, " +
" workendtime, " +
" signintime, " +
" signouttime, " +
" attendanceMins, " +
" signMins " +
" FROM " +
" hrmresource a, " +
" kq_format_detail b " +
" WHERE " +
" a.id = b.resourceid " +
" AND ( attendanceMins > 0 OR signMins > 0 ) " +
" ) UNION ALL " +
" ( " +
" SELECT " +
" a.subcompanyid1, " +
" a.managerstr, " +
" a.managerid, " +
" a.loginid, " +
" a.id, " +
" cast(b.resourceid as int) as resourceid, " +
" a.departmentid, " +
" a.lastname, " +
" a.workcode, " +
" a.status, " +
" a.dsporder, " +
" b.belongdate AS kqdate, " +
" null AS serialid, " +
" null AS serialid1, " +
" null AS serialid2, " +
" b.fromtime AS workbegintime, " +
" b.totime AS workendtime, " +
" b.fromtime AS signintime, " +
" b.totime AS signouttime, " +
" cast ( cast (duration_min as float ) as int ) AS attendanceMins, " +
" cast ( cast (duration_min as float ) as int ) AS signMins " +
" FROM " +
" hrmresource a, " +
" kq_flow_overtime b " +
" WHERE " +
" a.id = b.resourceid " +
" and b.changetype in (1,3) " +
" and cast ( cast ( duration_min as float ) as int ) > 0 " +
" ) " +
" ) u";
String sqlWhere = " where 1=1 ";
String orderby = " u.kqdate asc, u.workbegintime asc " ;
String tableString = "";
String rightSql = new KQReportBiz().getReportRight("1",""+user.getUID(),"u");
if(rightSql.length()>0){
sqlWhere += rightSql;
}
if (keyWord.length() > 0){
sqlWhere += " and u.lastname = "+keyWord;
}
if (fromDate.length() > 0){
sqlWhere += " and u.kqdate >= '"+fromDate+"'";
}
if (toDate.length() > 0){
sqlWhere += " and u.kqdate <= '"+toDate+"'";
}
if(subCompanyId.length()>0){
sqlWhere +=" and u.subcompanyid1 in("+subCompanyId+") ";
}
if(departmentId.length()>0){
sqlWhere +=" and u.departmentid in("+departmentId+") ";
}
if (resourceId.length() > 0){
sqlWhere += " and u.resourceid in ( "+resourceId+")";
}
if(viewScope.equals("4")){//我的下属
if(allLevel.equals("1")){//所有下属
sqlWhere+=" and u.managerstr like '%,"+user.getUID()+",%'";
}else{
sqlWhere+=" and u.managerid="+user.getUID();//直接下属
}
}
if (!"1".equals(isNoAccount)) {
sqlWhere += " and u.loginid is not null "+(rs.getDBType().equals("oracle")?"":" and u.loginid<>'' ");
}
if (type.equals("signdays")||type.equals("signmins")) {
sqlWhere += " and u.signmins >0 ";
}
BaseBean basebean = new BaseBean();
basebean.writeLog("----begin----");
basebean.writeLog("backFields: "+backFields);
basebean.writeLog("sqlFrom: "+sqlFrom);
basebean.writeLog("orderby: "+orderby);
basebean.writeLog("sqlWhere: "+sqlWhere);
basebean.writeLog("----end----");
//end
String pageUid = PageUidFactory.getHrmPageUid("KQReportDetialList");
tableString=""+
"<table pageUid=\""+pageUid+"\" pagesize=\"10\" tabletype=\"none\">"+
"<sql backfields=\""+backFields+"\" sqlform=\""+Util.toHtmlForSplitPage(sqlFrom)+"\" sqlprimarykey=\"u.id\" sqlorderby=\""+orderby+"\" sqlsortway=\"asc\" sqldistinct=\"true\" sqlwhere=\""+Util.toHtmlForSplitPage(sqlWhere)+"\"/>"+
"<head>"+
" <col width=\"8%\" text=\""+SystemEnv.getHtmlLabelName(413,user.getLanguage())+"\" column=\"lastname\" orderkey=\"lastname\"/>"+
" <col width=\"8%\" text=\""+SystemEnv.getHtmlLabelName(714,user.getLanguage())+"\" column=\"workcode\" orderkey=\"workcode\"/>"+
" <col width=\"15%\" text=\""+SystemEnv.getHtmlLabelName(124,user.getLanguage())+"\" column=\"departmentid\" orderkey=\"departmentid\" transmethod=\"weaver.hrm.company.DepartmentComInfo.getDepartmentname\"/>"+
" <col width=\"9%\" text=\""+SystemEnv.getHtmlLabelName(602,user.getLanguage())+"\" column=\"status\" orderkey=\"status\" transmethod=\"weaver.hrm.resource.ResourceComInfo.getStatusName\" otherpara=\""+user.getLanguage()+"\"/>"+
" <col width=\"10%\" text=\""+SystemEnv.getHtmlLabelName(97,user.getLanguage())+"\" column=\"kqdate\" orderkey=\"kqdate\"/>"+
" <col width=\"15%\" text=\""+SystemEnv.getHtmlLabelName(390054,user.getLanguage())+"\" column=\"serialid\" orderkey=\"serialid\" transmethod=\"com.engine.kq.util.TransMethod.getSerailName\" otherpara=\"column:workbegintime+column:workendtime\"/>"+
" <col width=\"15%\" text=\""+SystemEnv.getHtmlLabelName(390495,user.getLanguage())+"\" column=\"serialid1\" orderkey=\"signintime\" transmethod=\"com.engine.kq.util.TransMethod.getReportDetialSignInTime\" otherpara=\"column:signintime+column:kqdate+column:resourceid+"+user.getLanguage()+"\"/>"+
" <col width=\"15%\" text=\""+SystemEnv.getHtmlLabelName(390496,user.getLanguage())+"\" column=\"serialid2\" orderkey=\"signouttime\" transmethod=\"com.engine.kq.util.TransMethod.getReportDetialSignOutTime\" otherpara=\"column:signouttime+column:kqdate+column:resourceid+"+user.getLanguage()+"\"/>"+
" <col width=\"9%\" text=\""+SystemEnv.getHtmlLabelName(391040,user.getLanguage())+"\" column=\"attendanceMins\" orderkey=\"attendanceMins\" transmethod=\"com.engine.kq.util.TransMethod.getReportDetialMinToHour\" />"+
// " <col width=\"9%\" text=\""+SystemEnv.getHtmlLabelName(504433,user.getLanguage())+"\" column=\"signMins\" orderkey=\"signMins\" transmethod=\"com.engine.kq.util.TransMethod.getReportDetialMinToHour\" />"+//二开
"</head>"+
"</table>";
//主要用于 显示定制列以及 表格 每页展示记录数选择
String sessionkey = pageUid + "_" + Util.getEncrypt(Util.getRandom());
Util_TableMap.setVal(sessionkey, tableString);
retmap.put("dialogTitle",dialogTitle);
retmap.put("sessionkey", sessionkey);
retmap.put("status", "1");
}catch (Exception e) {
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(382661,user.getLanguage()));
writeLog(e);
}
return retmap;
}
@Override
public BizLogContext getLogContext() {
return null;
}
}

@ -0,0 +1,741 @@
package com.engine.kq.util;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.ss.util.RegionUtil;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.GCONST;
import weaver.general.Util;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.*;
public class ExcelUtil extends BaseBean {
/*
*
* */
public Map export(Map<String, Object> workBook, HttpServletRequest request, HttpServletResponse response) throws Exception {
Map<String, Object> returnMap = new HashMap<>();
String createFile = "";
try {
SXSSFWorkbook workbook = new SXSSFWorkbook(); // 创建工作簿对象
List<Object> lsSheet = (List<Object>) workBook.get("sheet");
String fileName = Util.null2String(workBook.get("fileName"));
if (fileName.length() == 0||true) fileName = "" + UUID.randomUUID();//解决lunix下中文文件无法生成问题
for (int sheetNum = 0; sheetNum < lsSheet.size(); sheetNum++) {
Map<String, Object> mySheet = (Map<String, Object>) lsSheet.get(sheetNum);
String mySheetName = Util.null2String(mySheet.get("sheetName"));
String sheetTitle = Util.null2String(mySheet.get("sheetTitle"));
List<Object> sheetMemo = (List<Object>) mySheet.get("sheetMemo");
List<Object> titleList = (List<Object>) mySheet.get("titleList");
List<Object> dataList = (List<Object>) mySheet.get("dataList");
List<Map<String, Object>> constraintList = (List<Map<String, Object>>) mySheet.get("constraintList");
createFile = Util.null2String(mySheet.get("createFile"));
Sheet sheet = workbook.createSheet(mySheetName); // 创建工作表
int rowIdx = 0;
// 产生表格标题行
Row rowm = sheet.createRow(rowIdx);
Cell cellTiltle = rowm.createCell(0);
CellStyle titleStyle = this.getTitleStyle(workbook);//获取列头样式对象
CellStyle memoStyle = this.getMemoStyle(workbook);//获取备注样式对象
CellStyle columnTopStyle = this.getColumnTopStyle(workbook);//获取列头样式对象
CellStyle cellStyle = this.getCellStyle(workbook); //单元格样式对象
int mergedRegion = titleList.size() - 1;
if (mergedRegion > 15) mergedRegion = 15;
mergedRegion = getColLength(titleList);
CellRangeAddress region = new CellRangeAddress(rowIdx, ++rowIdx, 0, mergedRegion);
RegionUtil.setBorderBottom(BorderStyle.THIN, region, sheet);
RegionUtil.setBorderLeft(BorderStyle.THIN, region, sheet);
RegionUtil.setBorderRight(BorderStyle.THIN, region, sheet);
RegionUtil.setBorderTop(BorderStyle.THIN, region, sheet);
sheet.addMergedRegion(region);
cellTiltle.setCellStyle(titleStyle);
cellTiltle.setCellValue(sheetTitle);
for (int i = 0; sheetMemo != null && i < sheetMemo.size(); i++) {
rowm = sheet.createRow(++rowIdx);
Cell cellMemo = rowm.createCell(0);
region = new CellRangeAddress(rowIdx, ++rowIdx, 0, mergedRegion);
RegionUtil.setBorderBottom(BorderStyle.THIN, region, sheet);
RegionUtil.setBorderLeft(BorderStyle.THIN, region, sheet);
RegionUtil.setBorderRight(BorderStyle.THIN, region, sheet);
RegionUtil.setBorderTop(BorderStyle.THIN, region, sheet);
sheet.addMergedRegion(region);
cellMemo.setCellStyle(memoStyle);
cellMemo.setCellValue(Util.null2String(sheetMemo.get(i)));
}
// // 定义所需列数
// int columnNum = titleList.size();
// HSSFRow rowRowName = sheet.createRow(++rowIdx); // 在索引2的位置创建行(最顶端的行开始的第二行)
//
// // 将列头设置到sheet的单元格中
// for (int n = 0; n < columnNum; n++) {
// Map title = (Map) titleList.get(n);
//
// HSSFCell cellRowName = rowRowName.createCell(n); //创建列头对应个数的单元格
// cellRowName.setCellType(HSSFCell.CELL_TYPE_STRING); //设置列头单元格的数据类型
// HSSFRichTextString text = new HSSFRichTextString(Util.null2String(title.get("title")));
// cellRowName.setCellValue(text); //设置列头单元格的值
// cellRowName.setCellStyle(columnTopStyle); //设置列头单元格样式
// if (n == 0) {
// sheet.setColumnWidth(n, Util.getIntValue(Util.null2String(title.get("width"))));
// } else {
// sheet.setColumnWidth(n, Util.getIntValue(Util.null2String(title.get("width"))));
// }
// }
rowIdx = this.initDynamicTitle(sheet, titleList, columnTopStyle, rowIdx, workbook);
//将查询出的数据设置到sheet对应的单元格中
for (int i = 0; dataList != null && i < dataList.size(); i++) {
List<Object> obj = (List<Object>) dataList.get(i);//遍历每个对象
Row row = sheet.createRow(i + rowIdx + 1);//创建所需的行数
for (int j = 0; j < obj.size(); j++) {
Cell cell = null; //设置单元格的数据类型
cell = row.createCell(j, CellType.STRING);
cell.setCellValue(Util.null2String(obj.get(j))); //设置单元格的值
cell.setCellStyle(cellStyle); //设置单元格样式
}
}
// int columnNum = this.getColumnLength(titleList);
// //让列宽随着导出的列长自动适应
// for (int colNum = 0; colNum < columnNum; colNum++) {
// int columnWidth = sheet.getColumnWidth(colNum) / 256;
// for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {
// HSSFRow currentRow;
// //当前行未被使用过
// if (sheet.getRow(rowNum) == null) {
// currentRow = sheet.createRow(rowNum);
// } else {
// currentRow = sheet.getRow(rowNum);
// }
// if (currentRow.getCell(colNum) != null) {
// //取得当前的单元格
// HSSFCell currentCell = currentRow.getCell(colNum);
// //如果当前单元格类型为字符串
// if (currentCell.getCellTypeEnum() == CellType.STRING) {
// int length = currentCell.getStringCellValue().getBytes().length;
// if (columnWidth < length) {
// //将单元格里面值大小作为列宽度
// columnWidth = length;
// }
// }
// }
// }
// //再根据不同列单独做下处理
// if (colNum == 0) {
// sheet.setColumnWidth(colNum, (columnWidth - 2) * 256);
// } else {
// sheet.setColumnWidth(colNum, (columnWidth + 4) * 256);
// }
// }
for (int i = 0; constraintList != null && i < constraintList.size(); i++) {
Map<String, Object> constraint = constraintList.get(i);
int firstRow = Util.getIntValue(Util.null2String(constraint.get("firstRow")), 0);
int endRow = Util.getIntValue(Util.null2String(constraint.get("endRow")), 0);
int firstCol = Util.getIntValue(Util.null2String(constraint.get("firstCol")), 0);
int endCol = Util.getIntValue(Util.null2String(constraint.get("endCol")), 0);
//设置下拉框数据
String[] datas = (String[]) constraint.get("constraintDatas");
String hiddenSheetName = "constraintDataSheet"+i;
Sheet hiddenSheet = workbook.createSheet(hiddenSheetName);
workbook.setSheetHidden(workbook.getSheetIndex(hiddenSheet), true);
for (int j = 0; j< datas.length; j++) {
hiddenSheet.createRow(j).createCell(0).setCellValue(datas[j]);
}
DataValidationHelper helper = sheet.getDataValidationHelper();
String formulaId = hiddenSheetName + "!$A$1:$A$" + datas.length;
DataValidationConstraint dataValidationConstraint = helper.createFormulaListConstraint(formulaId);
CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
DataValidation dataValidation = helper.createValidation(dataValidationConstraint, cellRangeAddressList);
//处理Excel兼容性问题
if (dataValidation instanceof DataValidation) {
dataValidation.setSuppressDropDownArrow(true);
dataValidation.setShowErrorBox(true);
} else {
dataValidation.setSuppressDropDownArrow(false);
}
sheet.addValidationData(dataValidation);
}
// for (int i = 0; constraintList != null && i < constraintList.size(); i++) {
// Map<String, Object> constraint = constraintList.get(i);
// int firstRow = Util.getIntValue(Util.null2String(constraint.get("firstRow")), 0);
// int endRow = Util.getIntValue(Util.null2String(constraint.get("endRow")), 0);
// int firstCol = Util.getIntValue(Util.null2String(constraint.get("firstCol")), 0);
// int endCol = Util.getIntValue(Util.null2String(constraint.get("endCol")), 0);
//
// //设置下拉框数据
// String[] datas = (String[]) constraint.get("constraintDatas");
// DataValidationHelper helper = sheet.getDataValidationHelper();
// DataValidationConstraint dataValidationConstraint = helper.createExplicitListConstraint(datas);
// CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
// DataValidation dataValidation = helper.createValidation(dataValidationConstraint, cellRangeAddressList);
// //处理Excel兼容性问题
// if (dataValidation instanceof DataValidation) {
// dataValidation.setSuppressDropDownArrow(true);
// dataValidation.setShowErrorBox(true);
// } else {
// dataValidation.setSuppressDropDownArrow(false);
// }
// sheet.addValidationData(dataValidation);
// }
}
if (workbook != null) {
if (createFile.equals("1")) {
String filePath = GCONST.getRootPath() + "/hrm/kq/tmpFile/";
File file = new File(filePath);
if (!file.exists()) {
file.mkdirs();
}
fileName = fileName +"("+DateUtil.getNowDateTimeStr()+")";
String url = filePath + fileName + ".xlsx";
String realUrl = "/hrm/kq/tmpFile/" + fileName + ".xlsx";
FileOutputStream fOut = new FileOutputStream(url);
workbook.write(fOut);
fOut.flush();
fOut.close();
returnMap.put("url", realUrl);
} else {
response.reset();
response.setContentType("application/vnd.ms-excel;charset=utf-8");
//response.setCharacterEncoding("utf-8");
String header = request.getHeader("User-Agent").toUpperCase();
if (header.contains("MSIE") || header.contains("TRIDENT") || header.contains("EDGE")) {
fileName = URLEncoder.encode(fileName, "utf-8");
fileName = fileName.replace("+", "%20"); //IE下载文件名空格变+号问题
} else {
fileName = new String(fileName.getBytes("utf-8"), "ISO_8859_1");
}
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
response.setContentType("application/msexcel");
response.setContentType("application/x-msdownload");
OutputStream responseOutput = response.getOutputStream();
workbook.write(responseOutput);
responseOutput.flush();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return returnMap;
}
/*
*
*/
private CellStyle getMemoStyle(SXSSFWorkbook workbook) {
// 设置字体
Font font = workbook.createFont();
//设置字体大小
font.setFontHeightInPoints((short) 10);
//字体加粗
font.setBold(true);
//设置字体名字
font.setFontName("宋体");
//设置样式;
CellStyle style = workbook.createCellStyle();
//设置底边框;
style.setBorderBottom(BorderStyle.THIN);
//设置底边框颜色;
style.setBottomBorderColor(IndexedColors.BLACK.index);
//设置左边框;
style.setBorderLeft(BorderStyle.THIN);
//设置左边框颜色;
style.setLeftBorderColor(IndexedColors.BLACK.index);
//设置右边框;
style.setBorderRight(BorderStyle.THIN);
//设置右边框颜色;
style.setRightBorderColor(IndexedColors.BLACK.index);
//设置顶边框;
style.setBorderTop(BorderStyle.THIN);
//设置顶边框颜色;
style.setTopBorderColor(IndexedColors.BLACK.index);
//在样式用应用设置的字体;
style.setFont(font);
//设置自动换行;
style.setWrapText(false);
//设置水平对齐的样式为居中对齐;
style.setAlignment(HorizontalAlignment.LEFT);
//设置垂直对齐的样式为居中对齐;
style.setVerticalAlignment(VerticalAlignment.CENTER);
return style;
}
/*
*
*/
private CellStyle getTitleStyle(SXSSFWorkbook workbook) {
// 设置字体
Font font = workbook.createFont();
//设置字体大小
font.setFontHeightInPoints((short) 14);
//字体加粗
font.setBold(true);
//设置字体名字
font.setFontName("宋体");
//设置样式;
CellStyle style = workbook.createCellStyle();
//设置底边框;
style.setBorderBottom(BorderStyle.THIN);
//设置底边框颜色;
style.setBottomBorderColor(IndexedColors.BLACK.index);
//设置左边框;
style.setBorderLeft(BorderStyle.THIN);
//设置左边框颜色;
style.setLeftBorderColor(IndexedColors.BLACK.index);
//设置右边框;
style.setBorderRight(BorderStyle.THIN);
//设置右边框颜色;
style.setRightBorderColor(IndexedColors.BLACK.index);
//设置顶边框;
style.setBorderTop(BorderStyle.THIN);
//设置顶边框颜色;
style.setTopBorderColor(IndexedColors.BLACK.index);
//在样式用应用设置的字体;
style.setFont(font);
//设置自动换行;
style.setWrapText(false);
//设置水平对齐的样式为居中对齐;
style.setAlignment(HorizontalAlignment.CENTER);
//设置垂直对齐的样式为居中对齐;
style.setVerticalAlignment(VerticalAlignment.CENTER);
return style;
}
/*
*
*/
private CellStyle getNewColumnTopStyle(SXSSFWorkbook workbook) {
// 设置字体
Font font = workbook.createFont();
//设置字体大小
font.setFontHeightInPoints((short) 11);
//字体加粗
font.setBold(true);
//设置字体名字
font.setFontName("宋体");
//设置样式;
CellStyle style = workbook.createCellStyle();
//设置底边框;
style.setBorderBottom(BorderStyle.THIN);
//设置底边框颜色;
style.setBottomBorderColor(IndexedColors.BLACK.index);
//设置左边框;
style.setBorderLeft(BorderStyle.THIN);
//设置左边框颜色;
style.setLeftBorderColor(IndexedColors.BLACK.index);
//设置右边框;
style.setBorderRight(BorderStyle.THIN);
//设置右边框颜色;
style.setRightBorderColor(IndexedColors.BLACK.index);
//设置顶边框;
style.setBorderTop(BorderStyle.THIN);
//设置顶边框颜色;
style.setTopBorderColor(IndexedColors.BLACK.index);
//在样式用应用设置的字体;
style.setFont(font);
//设置自动换行;
style.setWrapText(true);
//设置水平对齐的样式为左对齐;
style.setAlignment(HorizontalAlignment.LEFT);
//设置垂直对齐的样式为居中对齐;
style.setVerticalAlignment(VerticalAlignment.CENTER);
return style;
}
/*
*
*/
private CellStyle getColumnTopStyle(SXSSFWorkbook workbook) {
// 设置字体
Font font = workbook.createFont();
//设置字体大小
font.setFontHeightInPoints((short) 11);
//字体加粗
font.setBold(true);
//设置字体名字
font.setFontName("宋体");
//设置样式;
CellStyle style = workbook.createCellStyle();
//设置底边框;
style.setBorderBottom(BorderStyle.THIN);
//设置底边框颜色;
style.setBottomBorderColor(IndexedColors.BLACK.index);
//设置左边框;
style.setBorderLeft(BorderStyle.THIN);
//设置左边框颜色;
style.setLeftBorderColor(IndexedColors.BLACK.index);
//设置右边框;
style.setBorderRight(BorderStyle.THIN);
//设置右边框颜色;
style.setRightBorderColor(IndexedColors.BLACK.index);
//设置顶边框;
style.setBorderTop(BorderStyle.THIN);
//设置顶边框颜色;
style.setTopBorderColor(IndexedColors.BLACK.index);
//在样式用应用设置的字体;
style.setFont(font);
//设置自动换行;
style.setWrapText(true);
//设置水平对齐的样式为居中对齐;
style.setAlignment(HorizontalAlignment.CENTER);
//设置垂直对齐的样式为居中对齐;
style.setVerticalAlignment(VerticalAlignment.CENTER);
return style;
}
/*
*
*/
private CellStyle getCellStyle(SXSSFWorkbook workbook) {
// 设置字体
Font font = workbook.createFont();
//设置字体大小
//font.setFontHeightInPoints((short)10);
//字体加粗
//font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
//设置字体名字
font.setFontName("宋体");
//设置样式;
CellStyle style = workbook.createCellStyle();
//设置底边框;
style.setBorderBottom(BorderStyle.THIN);
//设置底边框颜色;
style.setBottomBorderColor(IndexedColors.BLACK.index);
//设置左边框;
style.setBorderLeft(BorderStyle.THIN);
//设置左边框颜色;
style.setLeftBorderColor(IndexedColors.BLACK.index);
//设置右边框;
style.setBorderRight(BorderStyle.THIN);
//设置右边框颜色;
style.setRightBorderColor(IndexedColors.BLACK.index);
//设置顶边框;
style.setBorderTop(BorderStyle.THIN);
//设置顶边框颜色;
style.setTopBorderColor(IndexedColors.BLACK.index);
//在样式用应用设置的字体;
style.setFont(font);
//设置自动换行;
style.setWrapText(false);
//设置水平对齐的样式为居中对齐;
style.setAlignment(HorizontalAlignment.LEFT);
//设置垂直对齐的样式为居中对齐;
style.setVerticalAlignment(VerticalAlignment.CENTER);
return style;
}
public static void main(String[] args) {
String groupid = "1";
String filename = "c://33e2a90d-3347-490c-afff-21de0ef3e3af.xlsx";
int startRow = 3;
RecordSet rs = new RecordSet();
String sql = "";
try {
//必要的权限判断
List<List> lsParams = null;
List params = null;
Workbook workbook = WorkbookFactory.create(new FileInputStream(filename));
for (int idx = 0; idx < workbook.getNumberOfSheets(); idx++) {
Sheet sheet = workbook.getSheetAt(idx);
Row row = null;
Cell cell = null;
lsParams = new ArrayList();
for (int i = startRow; startRow <= sheet.getLastRowNum() && i <= sheet.getLastRowNum(); i++) {
row = sheet.getRow(i);
if (row == null) {
continue;
}
params = new ArrayList();
for (int cellIndex = 0; cellIndex < row.getLastCellNum(); cellIndex++) {
cell = row.getCell((short) cellIndex);
if (cell == null) continue;
params.add(getCellValue(cell).trim());
}
params.add(groupid);
if (Util.null2String(params.get(0)).length() > 0) {
lsParams.add(params);
}
}
if (idx == 0) {
sql = "insert into kq_loaction (loactionname,longitude,latitude,address,groupid) values (?,?,?,?,?) ";
} else {
sql = "insert into kq_wifi (wifiname,mac,groupid) values (?,?,?) ";
}
rs.executeBatchSql(sql, lsParams);
}
} catch (Exception e) {
new BaseBean().writeLog(e);
}
}
public int initDynamicTitle(Sheet sheet, List<Object> columns, CellStyle columnTopStyle, int rowIdx, SXSSFWorkbook workbook) {
int cur_rowIndx = rowIdx+1;
//title 总行数
int title_rows = cur_rowIndx+getRowNums(columns)-1;
createHeaderRow(sheet, cur_rowIndx, 0,columns,columnTopStyle,title_rows, workbook);
return title_rows;
}
/**
*
*/
private int createHeaderRow(Sheet sheet, int index, int cellIndex,
List<Object> columnName, CellStyle columnTopStyle, int title_rows, SXSSFWorkbook workbook) {
Row row = sheet.getRow(index) == null ? sheet.createRow(index) : sheet.getRow(index);
int rows = getRowNums(columnName);
for (int i = 0, exportFieldTitleSize = columnName.size(); i < exportFieldTitleSize; i++) {
Map<String,Object> column = (Map<String, Object>) columnName.get(i);
String title = Util.null2String(column.get("title"));
String flag = Util.null2String(column.get("flag"));//考勤二开
if (flag.equals("KqReport")) {
columnTopStyle = getNewColumnTopStyle(workbook);
} else {
columnTopStyle = getColumnTopStyle(workbook);
}//end
createStringCell(row, cellIndex, title, columnTopStyle);
if (column.get("children") != null) {
List<Object> childchildColumns = (List<Object>) column.get("children");
// 保持原来的
int tempCellIndex = cellIndex;
cellIndex = createHeaderRow(sheet, rows == 1 ? index : index + 1, cellIndex, childchildColumns,columnTopStyle,
title_rows, workbook);//考勤二开
if (childchildColumns.size() > 1) {
addMergedRegion(sheet, index, index, tempCellIndex, cellIndex - 1);
}
cellIndex--;
}else{
addMergedRegion(sheet, index, title_rows, cellIndex, cellIndex);
}
cellIndex++;
}
return cellIndex;
}
/**
*
* @param sheet
* @param firstRow
* @param lastRow
* @param firstCol
* @param lastCol
*/
public void addMergedRegion(Sheet sheet, int firstRow, int lastRow, int firstCol, int lastCol) {
try {
if(firstRow == lastRow && firstCol == lastCol){
return ;
}
CellRangeAddress region = new CellRangeAddress(firstRow, lastRow, firstCol, lastCol);
RegionUtil.setBorderBottom(BorderStyle.THIN, region, sheet);
RegionUtil.setBorderLeft(BorderStyle.THIN, region, sheet);
RegionUtil.setBorderRight(BorderStyle.THIN, region, sheet);
RegionUtil.setBorderTop(BorderStyle.THIN, region, sheet);
sheet.addMergedRegion(region);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Cell
*/
public void createStringCell(Row row, int cellIndex, String title, CellStyle columnTopStyle) {
Cell cellRowName = row.createCell(cellIndex); //创建列头对应个数的单元格
cellRowName.setCellType(CellType.STRING); //设置列头单元格的数据类型
cellRowName.setCellValue(title); //设置列头单元格的值
cellRowName.setCellStyle(columnTopStyle); //设置列头单元格样式
}
public int initTitle(Sheet sheet, List<Object> columns, CellStyle columnTopStyle, int rowIdx) {
List<Object> lsMergedRegion = new ArrayList<>();
Map<String, Object> mergedRegion = null;
int firstTitleRow = rowIdx + 1;
int lastTitleRow = rowIdx + 2;
Row rowRowName = sheet.createRow(++rowIdx); // 在索引2的位置创建行(最顶端的行开始的第二行)
Row childRowRowName = null;
// 定义所需列数
Map<String, Object> column = null;
List<Object> childColumn = null;
int colIdx = 0;
for (int i = 0; i < columns.size(); i++) {
column = (Map<String, Object>) columns.get(i);
childColumn = (List<Object>) column.get("children");
Cell cellRowName = rowRowName.createCell(colIdx++); //创建列头对应个数的单元格
cellRowName.setCellType(CellType.STRING); //设置列头单元格的数据类型
cellRowName.setCellValue(Util.null2String(column.get("title"))); //设置列头单元格的值
cellRowName.setCellStyle(columnTopStyle); //设置列头单元格样式
if (Util.getIntValue(Util.null2String(column.get("rowSpan"))) == 2) {
if (childRowRowName == null) {
childRowRowName = sheet.createRow(++rowIdx);
}
mergedRegion = new HashMap<String, Object>();
mergedRegion.put("startRow", firstTitleRow);
mergedRegion.put("overRow", lastTitleRow);
mergedRegion.put("startCol", colIdx - 1);
mergedRegion.put("overCol", colIdx - 1);
lsMergedRegion.add(mergedRegion);
}
if (childColumn != null) {
colIdx--;
mergedRegion = new HashMap<String, Object>();
mergedRegion.put("startRow", firstTitleRow);
mergedRegion.put("overRow", firstTitleRow);
mergedRegion.put("startCol", colIdx);
for (int j = 0; j < childColumn.size(); j++) {
column = (Map<String, Object>) childColumn.get(j);
cellRowName = childRowRowName.createCell(colIdx++); //创建列头对应个数的单元格
cellRowName.setCellType(CellType.STRING); //设置列头单元格的数据类型
cellRowName.setCellValue(Util.null2String(column.get("title"))); //设置列头单元格的值
cellRowName.setCellStyle(columnTopStyle);
}
mergedRegion.put("overCol", colIdx - 1);
if (childColumn.size() > 1) {
lsMergedRegion.add(mergedRegion);
}
}
}
for (int i = 0; i < lsMergedRegion.size(); i++) {
mergedRegion = (Map<String, Object>) lsMergedRegion.get(i);
Integer startrow = Util.getIntValue(Util.null2String(mergedRegion.get("startRow")));
Integer overrow = Util.getIntValue(Util.null2String(mergedRegion.get("overRow")));
Integer startcol = Util.getIntValue(Util.null2String(mergedRegion.get("startCol")));
Integer overcol = Util.getIntValue(Util.null2String(mergedRegion.get("overCol")));
CellRangeAddress region = new CellRangeAddress(startrow, overrow, startcol, overcol);
RegionUtil.setBorderBottom(BorderStyle.THIN, region, sheet);
RegionUtil.setBorderLeft(BorderStyle.THIN, region, sheet);
RegionUtil.setBorderRight(BorderStyle.THIN, region, sheet);
RegionUtil.setBorderTop(BorderStyle.THIN, region, sheet);
sheet.addMergedRegion(region);
}
return rowIdx;
}
/**
*
* @param columns
* @return
*/
private int getColLength(List<Object> columns) {
int length = -1;// 从0开始计算单元格的
for(int i =0 ; i < columns.size() ; i++){
Map<String,Object> column = (Map<String, Object>) columns.get(i);
if (column.get("children") != null) {
List<Object> childchildColumns = (List<Object>) column.get("children");
length += getColLength(childchildColumns) + 1;
} else {
length++;
}
}
return length;
}
/**
*
*/
public int getRowNums(List<Object> columns) {
int cnt = 1;
for (int i = 0; i < columns.size(); i++) {
Map<String,Object> column = (Map<String, Object>) columns.get(i);
if (column.get("children") != null) {
List<Object> childchildColumns = (List<Object>) column.get("children");
int tmpcnt = 1+getRowNums(childchildColumns);
if(tmpcnt > cnt){
cnt = tmpcnt;
}
}
}
if(cnt > 1){
return cnt;
}else{
return 1;
}
}
public int getColumnLength(List<Object> columns) {
int columnLength = 0;
Map<String, Object> column = null;
for (int i = 0; i < columns.size(); i++) {
column = (Map<String, Object>) columns.get(i);
if (column.get("colSpan") != null) {
columnLength += Util.getIntValue(Util.null2String(column.get("colSpan")));
} else {
columnLength++;
}
}
return columnLength;
}
/**
* /**
* excel
*
* @param cell
* @return
*/
public static String getCellValue(Cell cell) {
String cellValue = "";
if (cell == null)
return "";
switch (cell.getCellType()) {
case BOOLEAN: // 得到Boolean对象的方法
cellValue = String.valueOf(cell.getBooleanCellValue());
break;
case NUMERIC:
if (org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted(cell)) {// 先看是否是日期格式
SimpleDateFormat sft = new SimpleDateFormat("yyyy-MM-dd");
cellValue = String.valueOf(sft.format(cell.getDateCellValue())); // 读取日期格式
} else {
cellValue = String.valueOf(new Double(cell.getNumericCellValue())); // 读取数字
if (cellValue.endsWith(".0"))
cellValue = cellValue.substring(0, cellValue.indexOf("."));
}
break;
case FORMULA: // 读取公式
cellValue = cell.getCellFormula();
break;
case STRING: // 读取String
cellValue = cell.getStringCellValue();
break;
}
return cellValue;
}
}

@ -0,0 +1,36 @@
package com.engine.omron.controller;
import com.engine.common.util.ParamUtil;
import com.engine.common.util.ServiceUtil;
import com.engine.omron.service.KqReportService;
import com.engine.omron.service.impl.KqReportServiceImpl;
import com.google.gson.Gson;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import java.util.Map;
public class KqReportController {
public KqReportService getKqReportService(User user) {
return ServiceUtil.getService(KqReportServiceImpl.class,user);
}
@Path("/getKqReportDesc")
@POST
@Produces(MediaType.APPLICATION_JSON)
public String getKqReportDesc(@Context HttpServletRequest request, @Context HttpServletResponse response){
User user = HrmUserVarify.getUser(request,response);
Map<String, Object> params = ParamUtil.request2Map(request);
Map<String, Object> apiDatas = getKqReportService(user).getKqReportDesc(params);
return new Gson().toJson(apiDatas);
}
}

@ -0,0 +1,36 @@
package com.engine.omron.controller;
import com.engine.common.util.ParamUtil;
import com.engine.common.util.ServiceUtil;
import com.engine.omron.service.OverTimeService;
import com.engine.omron.service.impl.OverTimeServiceImpl;
import com.google.gson.Gson;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import java.util.Map;
public class OverTimeController {
public OverTimeService getOverTimeService(User user) {
return ServiceUtil.getService(OverTimeServiceImpl.class,user);
}
@Path("/checkOverTimeWorkflow")
@POST
@Produces(MediaType.APPLICATION_JSON)
public String checkOverTimeWorkflow(@Context HttpServletRequest request, @Context HttpServletResponse response){
User user = HrmUserVarify.getUser(request,response);
Map<String, Object> params = ParamUtil.request2Map(request);
Map<String, Object> apiDatas = getOverTimeService(user).checkOverTimeWorkflow(params);
return new Gson().toJson(apiDatas);
}
}

@ -0,0 +1,12 @@
package com.engine.omron.service;
import java.util.Map;
public interface KqReportService {
/**
*
* @param params
* @return
*/
Map<String, Object> getKqReportDesc(Map<String, Object> params);
}

@ -0,0 +1,12 @@
package com.engine.omron.service;
import java.util.Map;
public interface OverTimeService {
/**
*
* @param params
* @return
*/
Map<String, Object> checkOverTimeWorkflow(Map<String, Object> params);
}

@ -0,0 +1,35 @@
package com.engine.omron.service.impl;
import com.engine.core.impl.Service;
import com.engine.omron.service.KqReportService;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.Util;
import java.util.HashMap;
import java.util.Map;
public class KqReportServiceImpl extends Service implements KqReportService {
BaseBean basebean = new BaseBean();
@Override
public Map<String, Object> getKqReportDesc(Map<String, Object> params) {
Map<String, Object> result = new HashMap<>();
RecordSet rs = new RecordSet();
String desc = "";
String acqDescSql = " select smnr from uf_kqhzbsmbd order by id desc";
basebean.writeLog("getKqReportDesc: " + acqDescSql);
rs.executeQuery(acqDescSql);
while (rs.next()) {
String temp = Util.null2String(rs.getString("smnr"));
desc = desc + temp;
}
basebean.writeLog("desc: " + desc);
result.put("code", 200);
result.put("data", desc);
return result;
}
}

@ -0,0 +1,109 @@
package com.engine.omron.service.impl;
import com.engine.core.impl.Service;
import com.engine.omron.service.OverTimeService;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.StringUtil;
import weaver.general.Util;
import java.util.HashMap;
import java.util.Map;
public class OverTimeServiceImpl extends Service implements OverTimeService {
BaseBean basebean = new BaseBean();
@Override
public Map<String, Object> checkOverTimeWorkflow(Map<String, Object> params) {
basebean.writeLog("----------OverTimeServiceImpl checkOverTimeWorkflow Start----------");
Map<String, Object> result = new HashMap<String, Object>();
RecordSet rs = new RecordSet();
try {
//申请人
Integer applicant = Util.getIntValue(Util.null2String(params.get("applicant")));
basebean.writeLog("applicant: " + applicant );
//申请月份
String appMonth = Util.null2String(params.get("applicationMonth"));
basebean.writeLog("appMonth: " + appMonth );
Integer requestId = Util.getIntValue(Util.null2String(params.get("requestId")));
basebean.writeLog("requestId: " + requestId );
if ( applicant == -1 || applicant == 0 ) {
result.put("code",500);
result.put("msg","申请人不正确,请更换申请人!");
return result;
}
if ( applicant == 1 ) {
result.put("code",500);
result.put("msg","申请人为系统管理员,请确认是否需要更换申请人!");
return result;
}
if ( StringUtil.isEmpty(appMonth)) {
result.put("code",500);
result.put("msg","申请月份未填写,请先填写申请月份!");
return result;
}
String overtimeTableName = basebean.getPropValue("omlKq_main","overtimeTableName");
basebean.writeLog("overtimeTableName: " + overtimeTableName );
if ( StringUtil.isEmpty( overtimeTableName)) {
result.put("code",500);
result.put("msg","请先配置加班申请表名至配置文件!");
return result;
}
Integer number = -1;
String checkOverTimeSql = "select count(*) as num from " + overtimeTableName + " where jbry = ? and sqyf = ? ";
basebean.writeLog("checkOverTimeSql: " + checkOverTimeSql);
rs.executeQuery(checkOverTimeSql, applicant, appMonth);
while ( rs.next()) {
number = Util.getIntValue( Util.null2String( rs.getString("num")));
}
basebean.writeLog("number: " + number );
if ( number == 1 ) {//验证当前流程与已有流程是否为同一条
if ( requestId > -1) {
Integer checkReq = -1;
String checkRequestIdSql = "select requestid from " + overtimeTableName + " where jbry = ? and sqyf = ? ";
rs.executeQuery(checkRequestIdSql, applicant, appMonth);
while (rs.next()) {
checkReq = Util.getIntValue(Util.null2String(rs.getString("requestid")));
}
if ( checkReq > -1 && checkReq.equals(requestId) ) {//当前提交流程和流程表中的保存状态流程为同一条
result.put("code",200);
result.put("msg","可以提交该月份的加班申请。");
return result;
}
} else {//流程为新建
result.put("code",500);
result.put("msg","该人员已经创建或者提交过该月份的加班申请,不可再提交!");
return result;
}
} else if ( number > 1 ) {
result.put("code",500);
result.put("msg","该人员已经提交过该月份的加班申请,不可再提交!");
return result;
}
result.put("code",200);
result.put("msg","可以提交该月份的加班申请。");
return result;
}catch(Exception e){
basebean.writeLog("OverTimeServiceImpl checkOverTimeWorkflow Exception: " + e);
result.put("code",500);
result.put("msg","检查异常");
return result;
}
}
}

@ -0,0 +1,337 @@
package weaver.interfaces.oml.action;
import com.engine.kq.biz.KQGroupMemberComInfo;
import org.apache.commons.lang3.StringUtils;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.Util;
import weaver.interfaces.workflow.action.Action;
import weaver.soa.workflow.request.Property;
import weaver.soa.workflow.request.RequestInfo;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* Action
*/
public class CheckNeewTimeAction implements Action {
public CheckNeewTimeAction() {
}
@Override
public String execute(RequestInfo info) {
new BaseBean();
BaseBean bb = new BaseBean();
bb.writeLog("系统验证数据是否超过可申请时长Action");
RecordSet rs = new RecordSet();
int userid = info.getRequestManager().getUser().getUID();
try {
//获取主表数据
Map mainInfo = getMainInfo(info);
//申请月份
String sqyf = Util.null2String(mainInfo.get("sqyf"));
String sqyfNew = sqyf +"-01";
String sqyfEnd = sqyf + "-31";
String jbzsc = Util.null2String(mainInfo.get("jbzsc"));
String jbry = Util.null2String(mainInfo.get("jbry"));
bb.writeLog("jbry"+jbry);
userid = Integer.valueOf(jbry);
bb.writeLog("userid"+userid);
/*获取考勤组的ID因为考勤组有有效期所以需要传入日期*/
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
String groupId = kqGroupMemberComInfo.getKQGroupId(String.valueOf(userid), sqyfNew);
bb.writeLog("groupId:"+groupId);
if (StringUtils.isBlank(groupId)){
info.getRequestManager().setMessageid("2000");
info.getRequestManager().setMessagecontent("请为该人员添加考勤组");
return Action.FAILURE_AND_CONTINUE;
}
// String fromDate = TimeUtil.getDateByOption("3","0");
// String toDate = TimeUtil.getDateByOption("3","1");
String fromDate = sqyfNew;
String toDate = sqyfEnd;
String sql = "select sum(attendancemins) as workmins,sum(leaveMins) as leaveMins from kq_format_detail where kqdate >= '"+fromDate+"' and kqdate <= '"+toDate+"' and resourceid = "+userid;
rs.execute(sql);
bb.writeLog("sql:"+sql);
String attendancemins = "";
String workmins = "";
Integer workdays = 0;
String leaveMins = "";
if (rs.next()){
workmins = Util.null2String(rs.getString("workmins"));
// workdays = Util.null2String(rs.getString("workdays"));
leaveMins = Util.null2String(rs.getString("leaveMins"));
}
workmins = StringUtils.isBlank(workmins)?"0":workmins;
leaveMins = StringUtils.isBlank(leaveMins)?"0":leaveMins;
bb.writeLog("workmins:"+workmins+"leaveMins:"+leaveMins);
//当月加班时长
String jbTime = getOverTime(fromDate,toDate,userid);
bb.writeLog("jbTime:"+jbTime);
//当月事假时长
String sjMonthTime = getSjTime(fromDate,toDate,userid,"2");
//当月探亲事假时长
String tqsj = bb.getPropValue("omlKq_main","tqsj");
bb.writeLog("tqsj:"+tqsj);
String tqsjMonthTime = getSjTime(fromDate,toDate,userid,tqsj);
//当月实际工作时长
Integer sjTime = Integer.valueOf(workmins)+Integer.valueOf(leaveMins)-(Integer.valueOf(sjMonthTime))-(Integer.valueOf(tqsjMonthTime)) + Integer.valueOf(jbTime);
bb.writeLog("jbTime:"+jbTime+"sjTime:"+sjTime+"sjMonthTime:"+sjMonthTime+"tqsjMonthTime:"+tqsjMonthTime);
String type = "";
//非B C类员工
//当月应出勤时长
Integer ycqTime = 0;
//标准行事历休息天数
String bzxsl = bb.getPropValue("omlKq_main","bzxsl");
bb.writeLog("bzxsl:"+bzxsl);
String xxDay = getXxDay(fromDate,toDate,Integer.valueOf(bzxsl));
//员工所在行事历休息天数
// String ygszDay = getXxDay(fromDate,toDate,Integer.valueOf(groupId));
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
//当月总天数
Integer thisMonthDay = getDaysOfMonth(df.parse(sqyfNew));
workdays = thisMonthDay - Integer.valueOf(xxDay);
type = getField9(userid);
if ("1".equals(type)){
ycqTime = workdays*8;
}else if ("2".equals(type)){
ycqTime = workdays*8;
}else{
ycqTime = workdays*8;
}
Integer ycqTimeGy = workdays*8;
bb.writeLog("ycqTime:"+ycqTime+"sjTime:"+sjTime);
Integer needTime = 0;
if ("1".equals(type)){
needTime = sjTime - (ycqTimeGy*60) - (20*60);
}else if ("2".equals(type)){
needTime = sjTime - (ycqTimeGy*60) -(36*60);
}else{
needTime = sjTime - (ycqTime*60);
}
String jbzscNew = multiply(jbzsc,"60");
Double needTimeHour = divide(String.valueOf(needTime),"60");
bb.writeLog("jbzscNew:"+jbzscNew+"needTime:"+needTime+" needTimeHour:"+needTimeHour);
if (needTime<0){
info.getRequestManager().setMessageid("2000");
info.getRequestManager().setMessagecontent("无加班时长可申请");
return Action.FAILURE_AND_CONTINUE;
}else{
// if (Double.valueOf(jbzscNew)>needTime){
// info.getRequestManager().setMessageid("2000");
// info.getRequestManager().setMessagecontent("超过可申请时长");
// return Action.FAILURE_AND_CONTINUE;
// }
if ( Double.valueOf(jbzsc) > needTimeHour ){
info.getRequestManager().setMessageid("2000");
info.getRequestManager().setMessagecontent("超过可申请时长");
return Action.FAILURE_AND_CONTINUE;
}
}
bb.writeLog("attendancemins:"+attendancemins+"workmins:"+workmins);
} catch (Exception e) {
e.printStackTrace();
bb.writeLog(e);
bb.writeLog("系统验证数据是否超过可申请时长error"+e.getMessage());
info.getRequestManager().setMessageid("2000");
info.getRequestManager().setMessagecontent("系统验证数据是否超过可申请时长error");
return Action.FAILURE_AND_CONTINUE;
}
return Action.SUCCESS;
}
/**
*
* @param v1
* @param v2
* @return
*/
public static Double divide(String v1, String v2) {
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.divide(b2,2,BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
*
* @param date
* @return
*/
public static int getDaysOfMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
}
/**
*
*
* @param requestInfo
* @return
*/
private static Map getMainInfo(RequestInfo requestInfo) {
Map map = new HashMap();
Property[] property = requestInfo.getMainTableInfo().getProperty();
for (int i = 0; i < property.length; i++) {
map.put(property[i].getName().toLowerCase(), Util.null2String(property[i].getValue()));
}
return map;
}
/**
*
* @param startTime
* @param endTime
* @return
*/
private static String getOverTime(String startTime,String endTime,Integer resourceid){
RecordSet rs = new RecordSet();
String sql = "select sum(duration_min) as duration_min from KQ_FLOW_OVERTIME where belongdate >= '"+startTime+"' and belongdate <= '"+endTime+"' and changetype = 3 and resourceid = "+resourceid;
rs.executeQuery(sql);
BaseBean basebean = new BaseBean();
basebean.writeLog("getOverTime sql:" + sql);
String duration_min = "";
if (rs.next()){
duration_min = Util.null2String(rs.getString("duration_min"));
}
if (StringUtils.isBlank(duration_min)){
duration_min = "0";
}
return duration_min;
}
/**
*
* @param startTime
* @param endTime
* @return
*/
private static String getSjTime(String startTime,String endTime,Integer resourceid,String type){
RecordSet rs = new RecordSet();
String sql = "select sum(d_mins) as leaveMins from kq_flow_split_leave where newleavetype = '"+type+"' and belongdate >= '"+startTime+"' and belongdate <= '"+endTime+"' and leavebackrequestid is null and resourceid = "+resourceid;
rs.executeQuery(sql);
String leaveMins = "";
if (rs.next()){
leaveMins = Util.null2String(rs.getString("leaveMins"));
}
if (StringUtils.isBlank(leaveMins)){
leaveMins = "0";
}
return leaveMins;
}
/**
*
* @param startTime
* @param endTime
* @return
*/
private static String getXxDay(String startTime,String endTime,Integer groupId){
BaseBean bb = new BaseBean();
RecordSet rs = new RecordSet();
String sql = "select holidayDate from KQ_HolidaySet where holidayDate >= '"+startTime+"' and holidayDate <= '"+endTime+"' and changeType in (1,3) and groupId = "+groupId;
rs.executeQuery(sql);
List<Object> holidayList1 = new ArrayList<Object>();
while (rs.next()){
String holidayDate = Util.null2String(rs.getString("holidayDate"));
holidayList1.add(holidayDate);
}
String sql2 = "select holidayDate from KQ_HolidaySet where holidayDate >= '"+startTime+"' and holidayDate <= '"+endTime+"' and changeType in (2) and groupId = "+groupId;
rs.executeQuery(sql2);
List<Object> holidayList2 = new ArrayList<Object>();
while (rs.next()){
String holidayDate = Util.null2String(rs.getString("holidayDate"));
holidayList2.add(holidayDate);
}
//新增逻辑
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Calendar today = Calendar.getInstance();
try {
today.clear();
today.setTime(df.parse(startTime));
} catch (ParseException e) {
e.printStackTrace();
}
String currentYear = "" + today.get(Calendar.YEAR);
String currentMonth = "" + today.get(Calendar.MONTH);
Calendar dateTemp = Calendar.getInstance();
Integer all = 0;
for (int j = 1; j <= 31; j++) {
dateTemp.clear();
dateTemp.set(Integer.valueOf(currentYear),Integer.valueOf(currentMonth),j);
if (dateTemp.get(Calendar.MONTH) != Integer.valueOf(currentMonth)) {//防止出现2月30号等错误日期参数
continue;
}
String dateStr = Util.add0(dateTemp.get(Calendar.YEAR), 4) + "-" +
Util.add0(dateTemp.get(Calendar.MONTH) + 1, 2) + "-" +
Util.add0(dateTemp.get(Calendar.DAY_OF_MONTH), 2);
if (holidayList1.contains(dateStr)) {
all++;
}else if(dateTemp.getTime().getDay() == 6 || dateTemp.getTime().getDay() == 0){
if(!holidayList2.contains(dateStr)){
all++;
}
}
}
bb.writeLog("总休息天数:"+all);
return String.valueOf(all);
}
/**
*
* @param userid
* @return
*/
private static String getField9(Integer userid){
RecordSet rs = new RecordSet();
BaseBean bb = new BaseBean();
String yglx = bb.getPropValue("omlKq_main","yglx");
bb.writeLog("yglx:"+yglx);
String sql = "select "+yglx+" from cus_fielddata where id = "+userid+" and scope = 'HrmCustomFieldByInfoType' and scopeid = -1";
rs.executeQuery(sql);
String field9 = "";
if (rs.next()){
field9 = Util.null2String(rs.getString(yglx));
}
return field9;
}
/**
*
* @param v1
* @param v2
* @return
*/
public static String multiply(String v1, String v2) {
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.multiply(b2).toString();
}
public static void main(String[] args) {
HashSet<String> persons = new HashSet<>();
persons.add("123");
persons.add("321");
persons.add("123");
if (persons.contains("123")){
System.out.println("kkk");
}
System.out.println(StringUtils.join(persons,","));
}
}

@ -0,0 +1,628 @@
package weaver.interfaces.oml.action;
import com.engine.kq.biz.KQGroupMemberComInfo;
import com.engine.kq.biz.KQWorkTime;
import com.engine.kq.entity.WorkTimeEntity;
import org.apache.commons.lang3.StringUtils;
import weaver.conn.RecordSet;
import weaver.formmode.setup.ModeRightInfo;
import weaver.general.BaseBean;
import weaver.general.TimeUtil;
import weaver.general.Util;
import weaver.interfaces.schedule.BaseCronJob;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* Created with IntelliJ IDEA.
* ()
* @Auther: chenxu
* @Date: 2023/02/27/14:03
* @Description:
*/
public class KqResetZhLastMonthEveryDay extends BaseCronJob {
@Override
public void execute() {
new BaseBean();
BaseBean bb = new BaseBean();
bb.writeLog("综合工时制员工月度加班工时更新上个月!!!");
RecordSet rs = new RecordSet();
RecordSet rs1 = new RecordSet();
RecordSet rsUpdate1 = new RecordSet();
String fromDate = TimeUtil.getLastMonthBeginDay();
String toDate = TimeUtil.getLastMonthEndDay();
bb.writeLog("fromDate:"+fromDate+"toDate:"+toDate);
String dateMonthSub = fromDate.substring(0,7);
bb.writeLog("dateMonthSub:"+dateMonthSub);
try {
String sql = "select id,departmentid,subcompanyid1 from hrmresource where status<>5 ";
rs.executeQuery(sql);
while (rs.next()){
String id = Util.null2String(rs.getString("id"));
String departmentid = Util.null2String(rs.getString("departmentid"));
String subcompanyid1 = Util.null2String(rs.getString("subcompanyid1"));
/*获取考勤组的ID因为考勤组有有效期所以需要传入日期*/
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
String groupId = kqGroupMemberComInfo.getKQGroupId(id, fromDate);
bb.writeLog("groupId:"+groupId);
String groupidZh = bb.getPropValue("omlKq_main","groupidZh");
bb.writeLog("groupidZh:"+groupidZh);
//该员工为综合工时制考勤组
if (Arrays.asList(groupidZh.split(",")).contains(groupId)){
try {
//标准行事历休息天数
String bzxsl = bb.getPropValue("omlKq_main","bzxsl");
String xxDay = getXxDay(fromDate,toDate,Integer.valueOf(bzxsl));
bb.writeLog("departmentid:"+departmentid+"subcompanyid1:"+subcompanyid1);
// //员工所在行事历休息天数
// String ygszDay = getXxDay(fromDate,toDate,Integer.valueOf(groupId));
//实际出勤天数
// String workdaySj = getSjWorkDay(fromDate,toDate,Integer.valueOf(id));
//当月应出勤时长
Integer ycqTime = 0;
Integer workdays = 0;
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
//当月总天数
Integer thisMonthDay = getDaysOfMonth(df.parse(fromDate));
workdays = thisMonthDay - Integer.valueOf(xxDay);
//月实出勤时数,月应出勤时数更新逻辑
String sqlMonth = "select sum(attendancemins) as workmins,sum(leaveMins) as leaveMins from kq_format_detail where kqdate >= '"+fromDate+"' and kqdate <= '"+toDate+"' and resourceid = "+id;
rs1.execute(sqlMonth);
String workmins = "";
String leaveMins = "";
if (rs1.next()){
workmins = Util.null2String(rs1.getString("workmins"));
leaveMins = Util.null2String(rs1.getString("leaveMins"));
}
workmins = StringUtils.isBlank(workmins)?"0":workmins;
leaveMins = StringUtils.isBlank(leaveMins)?"0":leaveMins;
bb.writeLog("workmins:"+workmins+"leaveMins:"+leaveMins);
//当月加班时长
String jbTime = getOverTime(fromDate,toDate,Integer.valueOf(id));
//当月事假时长
String sjMonthTime = getSjTime(fromDate,toDate,Integer.valueOf(id),"2");
//当月探亲事假时长
String tqsj = bb.getPropValue("omlKq_main","tqsj");
bb.writeLog("tqsj:"+tqsj);
String tqsjMonthTime = getSjTime(fromDate,toDate,Integer.valueOf(id),tqsj);
//当月实际工作时长
Integer sjTime = Integer.valueOf(workmins)+Integer.valueOf(leaveMins)-Integer.valueOf(tqsjMonthTime);
bb.writeLog("jbTime:"+jbTime+"sjTime:"+sjTime+"sjMonthTime:"+sjMonthTime);
ycqTime = workdays*8;
bb.writeLog("ycqTime:"+ycqTime+"sjTime:"+sjTime);
//事假时间
Integer sjTimeNew = (ycqTime*60) - sjTime;
bb.writeLog("sjTimeNew:"+sjTimeNew);
String dybzgzsjid = bb.getPropValue("omlKq_main","dybzgzsjid");
//高于标准工作时间
String gybzgzsjid = bb.getPropValue("omlKq_main","gybzgzsjid");
//为负数,计入低于标准工作时间
if (sjTimeNew > 0){
String sqlCqSj = "update kq_flow_split_leave set duration = 0 where belongdate >= '"+fromDate+"' and belongdate <= '"+toDate+"' and newleavetype in ("+dybzgzsjid+","+gybzgzsjid+") and resourceid = "+Integer.valueOf(id);
bb.writeLog("sqlCqSj:"+sqlCqSj);
rsUpdate1.executeUpdate(sqlCqSj);
bb.writeLog("插入标准时间");
Double sjTimeHours = divide(String.valueOf(sjTimeNew),"60");
bb.writeLog("sjTimeHours:"+sjTimeHours);
insertLeave("",Integer.valueOf(id),fromDate,sjTimeHours,"3",dybzgzsjid,subcompanyid1,departmentid);
}else{
String sqlCqSj = "update kq_flow_split_leave set duration = 0 where belongdate >= '"+fromDate+"' and belongdate <= '"+toDate+"' and newleavetype in ("+dybzgzsjid+","+gybzgzsjid+") and resourceid = "+Integer.valueOf(id);
bb.writeLog("sqlCqSj:"+sqlCqSj);
rsUpdate1.executeUpdate(sqlCqSj);
Integer gyTimes = sjTime - (ycqTime*60);
Double gyTimeHours = divide(String.valueOf(gyTimes),"60");
bb.writeLog("插入高于标准工作时间gyTimes:"+gyTimeHours);
insertLeave("",Integer.valueOf(id),fromDate,gyTimeHours,"3",gybzgzsjid,subcompanyid1,departmentid);
}
bb.writeLog("workdays:"+workdays);
Integer xxdayByYg = getShiftSchedule(groupId,id,fromDate,toDate);
bb.writeLog("xxdayByYg:"+xxdayByYg);
// Integer needTime = (int) Math.floor(Double.valueOf(workdaySj)) - Integer.valueOf(workdays);
Integer needTime = Integer.valueOf(xxDay) - xxdayByYg;
bb.writeLog("xxDay:"+xxDay+"needTime:"+needTime);
//当月加班时间
String jbzsc = getOverTime(fromDate,toDate,Integer.valueOf(id));
bb.writeLog("jbzsc:"+jbzsc);
Integer jbTimes = sjTime - ycqTime*60;
bb.writeLog("jbTimes:"+jbTimes);
if (jbTimes>0){
Integer sjTimeN = sjTime;
bb.writeLog("sjTimeN:"+sjTimeN);
jbTimes = sjTimeN - ycqTime*60;
// Integer newsjTimes = ycqTime*60 - Integer.valueOf(leaveMins);
if (needTime>0){
//最多双休小时数
Integer MaxHours = 0;
Integer xsMax = needTime*8*60;
if (jbTimes>xsMax){
MaxHours = xsMax;
}else{
MaxHours = jbTimes;
}
//平时加班小时数
Integer PsHours = 0;
if (jbTimes>xsMax){
PsHours = jbTimes - MaxHours;
}else{
PsHours = 0;
}
bb.writeLog("MaxHours:"+MaxHours+"PsHours:"+PsHours);
if(MaxHours>=0 && PsHours>=0){
//原加班时间清零
// RecordSet rsUpdateJb = new RecordSet();
// String sqlUpdate = "update KQ_FLOW_OVERTIME set duration_min=0 where belongdate >= '"+fromDate+"' and changetype <> 1 and belongdate <= '"+toDate+"' and resourceid = "+id;
// bb.writeLog("updateSql:"+sqlUpdate);
// rsUpdateJb.executeUpdate(sqlUpdate);
// insertOverTime("",id,fromDate,MaxHours,"3");
// insertOverTime("",id,fromDate,PsHours,"2");
if(checkUfKq(id,dateMonthSub)){
//更新
RecordSet rsUpdateSub = new RecordSet();
String sqlSub = "update uf_ydjbtz set psjb = "+PsHours+",sxjb ="+MaxHours+" where kqny = '"+dateMonthSub+"' and xm = "+Integer.valueOf(id);
bb.writeLog("sqlSub:"+sqlSub);
rsUpdateSub.executeUpdate(sqlSub);
}else{
//插入
insertKqUf(id,dateMonthSub,PsHours,MaxHours,0,0);
}
}
}else{
Integer PsHours = jbTimes;
if(PsHours>=0){
//原加班时间清零
// RecordSet rsUpdateJb = new RecordSet();
// String sqlUpdate = "update KQ_FLOW_OVERTIME set duration_min=0 where belongdate >= '"+fromDate+"' and changetype <> 1 and belongdate <= '"+toDate+"' and resourceid = "+id;
// bb.writeLog("updateSql:"+sqlUpdate);
// rsUpdateJb.executeUpdate(sqlUpdate);
// insertOverTime("",id,fromDate,PsHours,"2");
if(checkUfKq(id,dateMonthSub)){
//更新
RecordSet rsUpdateSub = new RecordSet();
String sqlSub = "update uf_ydjbtz set psjb = "+PsHours+",sxjb = 0 where kqny = '"+dateMonthSub+"' and xm = "+Integer.valueOf(id);
bb.writeLog("sqlSub:"+sqlSub);
rsUpdateSub.executeUpdate(sqlSub);
}else{
//插入
insertKqUf(id,dateMonthSub,PsHours,0,0,0);
}
}
}
//原应出勤和实际出勤时数清零
bb.writeLog("原应出勤和实际出勤时数清零1");
RecordSet rsUpdate = new RecordSet();
String sqlCq = "update kq_format_total set workmins = 0,attendancemins =0,workdays=0 where kqdate >= '"+fromDate+"' and kqdate <= '"+toDate+"' and resourceid = "+Integer.valueOf(id);
bb.writeLog("sqlCq:"+sqlCq);
rsUpdate.executeUpdate(sqlCq);
if (checkNew(id,fromDate)){
bb.writeLog("原应出勤和实际出勤时数更新");
RecordSet rsUpdateNew = new RecordSet();
Integer ycqTimes = ycqTime*60;
String sqlCqNew = "update kq_format_total set workmins = "+ycqTimes+",attendancemins ="+sjTime+",workdays="+workdays+" where kqdate = '"+fromDate+"' and resourceid = "+Integer.valueOf(id);
bb.writeLog("sqlCqNew:"+sqlCqNew);
rsUpdateNew.executeUpdate(sqlCqNew);
}else{
bb.writeLog("原应出勤和实际出勤时数插入");
insertKqTotal(Integer.valueOf(id),fromDate,ycqTime*60,groupId,sjTime,workdays);
}
}else{
//原应出勤和实际出勤时数清零
bb.writeLog("原应出勤和实际出勤时数清零2");
RecordSet rsUpdate = new RecordSet();
String sqlCq = "update kq_format_total set workmins = 0,attendancemins =0,workdays=0 where kqdate >= '"+fromDate+"' and kqdate <= '"+toDate+"' and resourceid = "+Integer.valueOf(id);
bb.writeLog("sqlCq:"+sqlCq);
rsUpdate.executeUpdate(sqlCq);
if (checkNew(id,fromDate)){
bb.writeLog("原应出勤和实际出勤时数更新");
RecordSet rsUpdateNew = new RecordSet();
Integer ycqTimes = ycqTime*60;
String sqlCqNew = "update kq_format_total set workmins = "+ycqTimes+",attendancemins ="+sjTime+",workdays="+workdays+" where kqdate = '"+fromDate+"' and resourceid = "+Integer.valueOf(id);
bb.writeLog("sqlCqNew:"+sqlCqNew);
rsUpdateNew.executeUpdate(sqlCqNew);
}else{
bb.writeLog("原应出勤和实际出勤时数插入");
insertKqTotal(Integer.valueOf(id),fromDate,ycqTime*60,groupId,sjTime,workdays);
}
//增加清除平时加班,双休加班的处理
if(checkUfKq(id,dateMonthSub)){
//更新
RecordSet rsUpdateSub = new RecordSet();
String sqlSub = "update uf_ydjbtz set psjb = 0,sxjb = 0 where kqny = '"+dateMonthSub+"' and xm = "+Integer.valueOf(id);
bb.writeLog("sqlSub:"+sqlSub);
rsUpdateSub.executeUpdate(sqlSub);
}else{
//插入
insertKqUf(id,dateMonthSub,0,0,0,0);
}
}
} catch (NumberFormatException e) {
bb.writeLog("numberError:"+e.getMessage());
e.printStackTrace();
} catch (ParseException e) {
bb.writeLog("error:"+e.getMessage());
e.printStackTrace();
}
}
}
} catch (Exception e) {
e.printStackTrace();
bb.writeLog(e);
bb.writeLog("综合工时制员工月度加班工时更新--error"+e.getMessage());
}
}
/**
*
* @param resourceid
* @param date
* @return
*/
private static Boolean checkUfKq(String resourceid,String date){
RecordSet rs = new RecordSet();
String sql = "select * from uf_ydjbtz where xm = "+resourceid+" and kqny = '"+date+"'";
rs.execute(sql);
Boolean check = false;
if (rs.getCounts()>0){
check = true;
}
return check;
}
/**
*
* @param xm
* @param kqny
* @param psjb
* @param sxjb
* @param jjrjb
* @param jbzdx
*/
private static void insertKqUf(String xm,String kqny,Integer psjb,Integer sxjb,Integer jjrjb,Integer jbzdx){
BaseBean bb = new BaseBean();
//插入加班时间
RecordSet rsInsert = new RecordSet();
int modeid = getFormModeIdByCubeName("uf_ydjbtz");
SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdfTime = new SimpleDateFormat("HH:mm:ss");
String modedatacreatedate = sdfDate.format(new Date());
String modedatacreatetime = sdfTime.format(new Date());
String sql = "insert into uf_ydjbtz (xm,kqny,psjb,sxjb,jjrjb,jbzdx,FORMMODEID,MODEDATACREATER,MODEDATACREATERTYPE,MODEDATACREATEDATE,MODEDATACREATETIME) "
+ " values(?,?,?,?,?,?,?,?,?,?,?) ";
rsInsert.executeUpdate(sql, xm,kqny,psjb,sxjb,jjrjb,jbzdx,modeid,xm,"0",modedatacreatedate,modedatacreatetime);
bb.writeLog("insertSql:"+sql);
RecordSet findNew = new RecordSet();
String sqlFindnew ="select Id from uf_ydjbtz where xm = '"+xm+"' and kqny = '"+kqny+"' order by" +
" modedatacreatedate desc,modedatacreatetime desc";
findNew.execute(sqlFindnew);
bb.writeLog("findSqlNew:"+sqlFindnew);
String idNew = "1";
if (findNew.next()){
idNew = Util.null2String(findNew.getString("id"));
}
bb.writeLog("idNew:"+idNew);
// 权限重构
int dataId = Integer.valueOf(idNew);
ModeRightInfo modeRightInfo = new ModeRightInfo();
modeRightInfo.editModeDataShare(Integer.valueOf(xm), modeid, dataId);
}
/**
* formModeId
*
* @param cubeName
* @return int formModeId
*/
private static int getFormModeIdByCubeName(String cubeName) {
RecordSet rs = new RecordSet();
rs.executeQuery("select t1.id from modeinfo t1\n" +
" left join workflow_bill t2\n" +
" on t1.formid=t2.id\n" +
" where t2.tablename='" + cubeName + "'");
rs.next();
return rs.getInt("id");
}
/**
*
* @param groupid
* @param resourceid
* @param monthBeginDate
* @param monthEndDate
* @return
*/
private Integer getShiftSchedule(String groupid, String resourceid, String monthBeginDate,String monthEndDate){
Integer xxr = 0;
String sql = "";
RecordSet rs = new RecordSet();
BaseBean bb = new BaseBean();
sql = " select count(*) as xxr from kq_shiftschedule where groupid= '"+groupid+"' and resourceid="+resourceid+" " +
" and kqdate>='"+monthBeginDate+"' and kqdate<='"+monthEndDate+"' and (isdelete is null or isdelete <> '1') and serialid = -1";
bb.writeLog("sql getShiftSchedule:"+sql);
rs.executeQuery(sql);
if(rs.next()){
xxr = rs.getInt("xxr");
}
return xxr;
}
/**
*
* @param v1
* @param v2
* @return
*/
public static Double divide(String v1, String v2) {
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.divide(b2,2,BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
*
* @param fromDate
* @param toDate
* @param id
* @return
*/
private static Integer getSjTimesNew(String fromDate,String toDate,Integer id){
RecordSet rs1 = new RecordSet();
BaseBean bb = new BaseBean();
//月实出勤时数,月应出勤时数更新逻辑
String sqlMonth = "select sum(attendancemins) as workmins,sum(leaveMins) as leaveMins from kq_format_total where kqdate >= '"+fromDate+"' and kqdate <= '"+toDate+"' and resourceid = "+id;
rs1.execute(sqlMonth);
String workmins = "";
String leaveMins = "";
if (rs1.next()){
workmins = Util.null2String(rs1.getString("workmins"));
leaveMins = Util.null2String(rs1.getString("leaveMins"));
}
workmins = StringUtils.isBlank(workmins)?"0":workmins;
leaveMins = StringUtils.isBlank(leaveMins)?"0":leaveMins;
bb.writeLog("workmins:"+workmins+"leaveMins:"+leaveMins);
//当月加班时长
String jbTime = getOverTime(fromDate,toDate,id);
//当月探亲事假时长
String tqsj = bb.getPropValue("omlKq_main","tqsj");
bb.writeLog("tqsj:"+tqsj);
String tqsjMonthTime = getSjTime(fromDate,toDate,Integer.valueOf(id),tqsj);
//当月实际工作时长
Integer sjTime = Integer.valueOf(workmins)+Integer.valueOf(leaveMins)-(Integer.valueOf(tqsjMonthTime));
bb.writeLog("jbTime:"+jbTime+"sjTime:"+sjTime);
return sjTime;
}
/**
*
* @param fromDate
* @param sjTime
* @param id
*/
private static void updateBackTimes(String fromDate,Integer sjTime,Integer id){
BaseBean bb = new BaseBean();
bb.writeLog("实际出勤时数更新");
RecordSet rsUpdateNew = new RecordSet();
String sqlCqNew = "update kq_format_total set attendancemins ="+sjTime+" where kqdate = '"+fromDate+"' and resourceid = "+id;
bb.writeLog("sqlCqNew:"+sqlCqNew);
rsUpdateNew.executeUpdate(sqlCqNew);
}
/**
*
* @param startTime
* @param endTime
* @return
*/
private static String getSjWorkDay(String startTime,String endTime,Integer resourceid){
RecordSet rs = new RecordSet();
String sql = "select sum(attendancedays) as attendancedays from kq_format_total where kqdate >= '"+startTime+"' and kqdate <= '"+endTime+"' and resourceid = "+resourceid;
rs.executeQuery(sql);
String attendancedays = "";
if (rs.next()){
attendancedays = Util.null2String(rs.getString("attendancedays"));
}
if (StringUtils.isBlank(attendancedays)){
attendancedays = "0";
}
return attendancedays;
}
/**
*
* @param requestid
* @param userid
* @param fromDate
* @param MaxHours
*/
private static void insertLeave(String requestid,Integer userid,String fromDate,Double MaxHours,String durationrule,String newleavetype,String subcompany,String department){
BaseBean bb = new BaseBean();
//插入加班时间
RecordSet rsInsert = new RecordSet();
String sql = "insert into kq_flow_split_leave (requestid,resourceid,fromdate,fromtime,todate,totime,duration,durationrule,belongdate,newleavetype,subcompanyid,departmentid) "
+ " values(?,?,?,?,?,?,?,?,?,?,?,?) ";
rsInsert.executeUpdate(sql, requestid,userid,fromDate,"07:30",fromDate,"18:00",MaxHours,durationrule,fromDate,newleavetype,subcompany,department);
bb.writeLog("insertSql:"+sql);
}
/**
* 1
* @param resourceid
* @param date
* @return
*/
private static Boolean checkNew(String resourceid,String date){
RecordSet rs = new RecordSet();
String sql = "select * from kq_format_total where resourceid = "+resourceid+" and kqdate = '"+date+"'";
rs.execute(sql);
Boolean check = false;
if (rs.getCounts()>0){
check = true;
}
return check;
}
/**
*
* @param userid
* @param fromDate
* @param yHours
* @param groupid
* @param sjHours
*/
private static void insertKqTotal(Integer userid,String fromDate,Integer yHours,String groupid,Integer sjHours,Integer workdays){
BaseBean bb = new BaseBean();
KQWorkTime kqWorkTime = new KQWorkTime();
WorkTimeEntity tmpworkTime = kqWorkTime.getWorkTime(String.valueOf(userid), fromDate);
//班组id
String serialid = tmpworkTime.getSerialId();
RecordSet rs = new RecordSet();
String sqlSe = "select subcompanyid1,departmentid,jobtitle from hrmresource where id = "+userid;
rs.executeQuery(sqlSe);
String subcompanyid = "";
String departmentid = "";
String jobtitle = "";
if (rs.next()){
subcompanyid = Util.null2String(rs.getString("subcompanyid1"));
departmentid = Util.null2String(rs.getString("departmentid"));
jobtitle = Util.null2String(rs.getString("jobtitle"));
}
bb.writeLog("subcompanyid:"+subcompanyid+"departmentid:"+departmentid+"jobtitle:"+jobtitle);
RecordSet rsInsert = new RecordSet();
String sql = "insert into kq_format_total (resourceid,kqdate,subcompanyid,departmentid,jobtitle,groupid,serialid,workdays,"
+ "workmins,attendancedays,attendancemins,signdays,signmins,belate,belatemins,gravebelate,gravebelatemins,leaveeearly," +
"leaveearlymins,graveleaveearly,graveleaveearlymins,absenteeism,absenteeismmins,forgotcheck, forgotcheckMins,leaveMins,evectionMins,outMins)"+
" values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ";
rsInsert.executeUpdate(sql, userid,fromDate,subcompanyid,departmentid,jobtitle,groupid,serialid,workdays,
yHours,0,sjHours,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
bb.writeLog("insertSql:"+sql);
}
/**
*
* @param date
* @return
*/
private static int getDaysOfMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
}
/**
*
* @param startTime
* @param endTime
* @return
*/
private static String getSjTime(String startTime,String endTime,Integer resourceid,String type){
RecordSet rs = new RecordSet();
String sql = "select sum(d_mins) as leaveMins from kq_flow_split_leave where newleavetype = '"+type+"' and belongdate >= '"+startTime+"' and belongdate <= '"+endTime+"' and leavebackrequestid is null and resourceid = "+resourceid;
rs.executeQuery(sql);
String leaveMins = "";
if (rs.next()){
leaveMins = Util.null2String(rs.getString("leaveMins"));
}
if (StringUtils.isBlank(leaveMins)){
leaveMins = "0";
}
return leaveMins;
}
private static void insertOverTime(String requestid,String userid,String fromDate,Integer MaxHours,String changeType){
BaseBean bb = new BaseBean();
//插入加班时间
RecordSet rsInsert = new RecordSet();
String uuid = UUID.randomUUID().toString();
String sql = "insert into kq_flow_overtime (requestid,resourceid,fromdate,fromtime,todate,totime,duration_min,expiringdate,belongdate,"
+ "workMins,durationrule,changetype,paidLeaveEnable,computingMode,tiaoxiuId,uuid,fromdatedb,fromtimedb,todatedb,totimedb,flow_mins,card_mins,ori_belongdate,flow_dataid)"+
" values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ";
rsInsert.executeUpdate(sql, requestid,userid,fromDate,"07:30",fromDate,"18:00",MaxHours,"",fromDate,
"","1",changeType,"0","3","-1",uuid,"","","","","0","0",fromDate,"");
bb.writeLog("insertSql:"+sql);
}
/**
*
* @param startTime
* @param endTime
* @return
*/
private static String getOverTime(String startTime,String endTime,Integer resourceid){
RecordSet rs = new RecordSet();
BaseBean bb = new BaseBean();
String sql = "select sum(duration_min) as duration_min from KQ_FLOW_OVERTIME where belongdate >= '"+startTime+"' and belongdate <= '"+endTime+"' and changetype <> 1 and resourceid = "+resourceid;
rs.executeQuery(sql);
bb.writeLog("sqlGetOverTime:"+sql);
String duration_min = "";
if (rs.next()){
duration_min = Util.null2String(rs.getString("duration_min"));
}
if (StringUtils.isBlank(duration_min)){
duration_min = "0";
}
return duration_min;
}
/**
*
* @param startTime
* @param endTime
* @return
*/
private static String getXxDay(String startTime,String endTime,Integer groupId){
BaseBean bb = new BaseBean();
RecordSet rs = new RecordSet();
String sql = "select holidayDate from KQ_HolidaySet where holidayDate >= '"+startTime+"' and holidayDate <= '"+endTime+"' and changeType in (1,3) and groupId = "+groupId;
rs.executeQuery(sql);
List<Object> holidayList1 = new ArrayList<Object>();
while (rs.next()){
String holidayDate = Util.null2String(rs.getString("holidayDate"));
holidayList1.add(holidayDate);
}
String sql2 = "select holidayDate from KQ_HolidaySet where holidayDate >= '"+startTime+"' and holidayDate <= '"+endTime+"' and changeType in (2) and groupId = "+groupId;
rs.executeQuery(sql2);
List<Object> holidayList2 = new ArrayList<Object>();
while (rs.next()){
String holidayDate = Util.null2String(rs.getString("holidayDate"));
holidayList2.add(holidayDate);
}
Calendar today = Calendar.getInstance();
today.add(Calendar.MONTH, -1);
String currentYear = "" + today.get(Calendar.YEAR);
String currentMonth = "" + today.get(Calendar.MONTH);
Calendar dateTemp = Calendar.getInstance();
Integer all = 0;
for (int j = 1; j <= 31; j++) {
dateTemp.clear();
dateTemp.set(Integer.valueOf(currentYear),Integer.valueOf(currentMonth),j);
if (dateTemp.get(Calendar.MONTH) != Integer.valueOf(currentMonth)) {//防止出现2月30号等错误日期参数
continue;
}
String dateStr = Util.add0(dateTemp.get(Calendar.YEAR), 4) + "-" +
Util.add0(dateTemp.get(Calendar.MONTH) + 1, 2) + "-" +
Util.add0(dateTemp.get(Calendar.DAY_OF_MONTH), 2);
if (holidayList1.contains(dateStr)) {
all++;
}else if(dateTemp.getTime().getDay() == 6 || dateTemp.getTime().getDay() == 0){
if(!holidayList2.contains(dateStr)){
all++;
}
}
}
bb.writeLog("总休息天数:"+all);
return String.valueOf(all);
}
}

@ -0,0 +1,306 @@
package weaver.interfaces.oml.action;
import com.engine.kq.biz.KQGroupMemberComInfo;
import org.apache.commons.lang3.StringUtils;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.TimeUtil;
import weaver.general.Util;
import weaver.interfaces.workflow.action.Action;
import weaver.soa.workflow.request.Property;
import weaver.soa.workflow.request.RequestInfo;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* Action
*/
public class OldCheckNeewTimeAction implements Action {
public OldCheckNeewTimeAction() {
}
@Override
public String execute(RequestInfo info) {
new BaseBean();
BaseBean bb = new BaseBean();
bb.writeLog("系统验证数据是否超过可申请时长Action");
RecordSet rs = new RecordSet();
int userid = info.getRequestManager().getUser().getUID();
try {
//获取主表数据
Map mainInfo = getMainInfo(info);
//申请月份
String sqyf = Util.null2String(mainInfo.get("sqyf"));
String sqyfNew = sqyf +"-01";
String jbzsc = Util.null2String(mainInfo.get("jbzsc"));
bb.writeLog("sqyfNew:"+sqyfNew);
bb.writeLog("userid:"+userid);
/*获取考勤组的ID因为考勤组有有效期所以需要传入日期*/
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
String groupId = kqGroupMemberComInfo.getKQGroupId(String.valueOf(userid), sqyfNew);
bb.writeLog("groupId:"+groupId);
if (StringUtils.isBlank(groupId)){
info.getRequestManager().setMessageid("2000");
info.getRequestManager().setMessagecontent("请为该人员添加考勤组");
return Action.FAILURE_AND_CONTINUE;
}
// String fromDate = TimeUtil.getDateByOption("3","0");
// String toDate = TimeUtil.getDateByOption("3","1");
String fromDate =TimeUtil.getMonthBeginDay(sqyfNew);
String toDate = TimeUtil.getMonthEndDay(sqyfNew);
String sql = "select sum(attendancemins) as workmins,sum(leaveMins) as leaveMins from kq_format_detail where kqdate >= '"+fromDate+"' and kqdate <= '"+toDate+"' and resourceid = "+userid;
rs.execute(sql);
bb.writeLog("sql:"+sql);
String attendancemins = "";
String workmins = "";
Integer workdays = 0;
String leaveMins = "";
if (rs.next()){
workmins = Util.null2String(rs.getString("workmins"));
// workdays = Util.null2String(rs.getString("workdays"));
leaveMins = Util.null2String(rs.getString("leaveMins"));
}
workmins = StringUtils.isBlank(workmins)?"0":workmins;
leaveMins = StringUtils.isBlank(leaveMins)?"0":leaveMins;
bb.writeLog("workmins:"+workmins+"leaveMins:"+leaveMins);
//当月加班时长
String jbTime = getOverTime(fromDate,toDate,userid);
bb.writeLog("jbTime:"+jbTime);
//当月事假时长
String sjMonthTime = getSjTime(fromDate,toDate,userid);
bb.writeLog("sjMonthTime:"+sjMonthTime);
//当月实际工作时长
Integer sjTime = Integer.valueOf(workmins)+Integer.valueOf(leaveMins)-Integer.valueOf(sjMonthTime);
bb.writeLog("sjTime:"+sjTime);
String type = "";
//非B C类员工
//当月应出勤时长
Integer ycqTime = 0;
//标准行事历休息天数
String bzxsl = bb.getPropValue("omlKq_main","bzxsl");
String xxDay = getXxDay(fromDate,toDate,Integer.valueOf(bzxsl));
//员工所在行事历休息天数
// String ygszDay = getXxDay(fromDate,toDate,Integer.valueOf(groupId));
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
//当月总天数
Integer thisMonthDay = getDaysOfMonth(df.parse(sqyfNew));
workdays = thisMonthDay - Integer.valueOf(xxDay);
type = getField9(userid);
if ("0".equals(type)){
ycqTime = workdays*7 + 20;
}else if ("1".equals(type)){
ycqTime = workdays*7 + 36;
}else{
ycqTime = workdays*8;
}
bb.writeLog("ycqTime:"+ycqTime+"sjTime:"+sjTime);
Integer needTime = sjTime - (ycqTime*60);
String jbzscNew = multiply(jbzsc,"60");
Double needTimeHour = divide(String.valueOf(needTime),"60");
bb.writeLog("jbzscNew:"+jbzscNew+"needTime:"+needTime+" needTimeHour:"+needTimeHour);
if (needTime<0){
info.getRequestManager().setMessageid("2000");
info.getRequestManager().setMessagecontent("无加班时长可申请");
return Action.FAILURE_AND_CONTINUE;
}else{
// if (Double.valueOf(jbzscNew)>needTime){
// info.getRequestManager().setMessageid("2000");
// info.getRequestManager().setMessagecontent("超过可申请时长");
// return Action.FAILURE_AND_CONTINUE;
// }
if ( Double.valueOf(jbzsc) > needTimeHour ){
info.getRequestManager().setMessageid("2000");
info.getRequestManager().setMessagecontent("超过可申请时长");
return Action.FAILURE_AND_CONTINUE;
}
}
bb.writeLog("attendancemins:"+attendancemins+"workmins:"+workmins);
} catch (Exception e) {
e.printStackTrace();
bb.writeLog(e);
bb.writeLog("系统验证数据是否超过可申请时长error"+e.getMessage());
info.getRequestManager().setMessageid("2000");
info.getRequestManager().setMessagecontent("系统验证数据是否超过可申请时长error");
return Action.FAILURE_AND_CONTINUE;
}
return Action.SUCCESS;
}
/**
*
* @param v1
* @param v2
* @return
*/
public static Double divide(String v1, String v2) {
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.divide(b2,2,BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
*
* @param date
* @return
*/
public static int getDaysOfMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
}
/**
*
*
* @param requestInfo
* @return
*/
private static Map getMainInfo(RequestInfo requestInfo) {
Map map = new HashMap();
Property[] property = requestInfo.getMainTableInfo().getProperty();
for (int i = 0; i < property.length; i++) {
map.put(property[i].getName().toLowerCase(), Util.null2String(property[i].getValue()));
}
return map;
}
/**
*
* @param startTime
* @param endTime
* @return
*/
private static String getOverTime(String startTime,String endTime,Integer resourceid){
RecordSet rs = new RecordSet();
String sql = "select sum(duration_min) as duration_min from KQ_FLOW_OVERTIME where belongdate >= '"+startTime+"' and belongdate <= '"+endTime+"' and changetype <> 1 and resourceid = "+resourceid;
rs.executeQuery(sql);
String duration_min = "";
if (rs.next()){
duration_min = Util.null2String(rs.getString("duration_min"));
}
if (StringUtils.isBlank(duration_min)){
duration_min = "0";
}
return duration_min;
}
/**
*
* @param startTime
* @param endTime
* @return
*/
private static String getSjTime(String startTime,String endTime,Integer resourceid){
RecordSet rs = new RecordSet();
String sql = "select sum(leaveMins) as leaveMins from kq_format_detail where leaveInfo like '{\"2\":%' and kqdate >= '"+startTime+"' and kqdate <= '"+endTime+"' and resourceid = "+resourceid;
rs.executeQuery(sql);
String leaveMins = "";
if (rs.next()){
leaveMins = Util.null2String(rs.getString("leaveMins"));
}
if (StringUtils.isBlank(leaveMins)){
leaveMins = "0";
}
return leaveMins;
}
/**
*
* @param startTime
* @param endTime
* @return
*/
private static String getXxDay(String startTime,String endTime,Integer groupId){
BaseBean bb = new BaseBean();
RecordSet rs = new RecordSet();
String sql = "select holidayDate from KQ_HolidaySet where holidayDate >= '"+startTime+"' and holidayDate <= '"+endTime+"' and changeType in (1,3) and groupId = "+groupId;
rs.executeQuery(sql);
List<Object> holidayList1 = new ArrayList<Object>();
while (rs.next()){
String holidayDate = Util.null2String(rs.getString("holidayDate"));
holidayList1.add(holidayDate);
}
String sql2 = "select holidayDate from KQ_HolidaySet where holidayDate >= '"+startTime+"' and holidayDate <= '"+endTime+"' and changeType in (2) and groupId = "+groupId;
rs.executeQuery(sql2);
List<Object> holidayList2 = new ArrayList<Object>();
while (rs.next()){
String holidayDate = Util.null2String(rs.getString("holidayDate"));
holidayList2.add(holidayDate);
}
Calendar today = Calendar.getInstance();
String currentYear = "" + today.get(Calendar.YEAR);
String currentMonth = "" + today.get(Calendar.MONTH);
Calendar dateTemp = Calendar.getInstance();
Integer all = 0;
for (int j = 1; j <= 31; j++) {
dateTemp.clear();
dateTemp.set(Integer.valueOf(currentYear),Integer.valueOf(currentMonth),j);
if (dateTemp.get(Calendar.MONTH) != Integer.valueOf(currentMonth)) {//防止出现2月30号等错误日期参数
continue;
}
String dateStr = Util.add0(dateTemp.get(Calendar.YEAR), 4) + "-" +
Util.add0(dateTemp.get(Calendar.MONTH) + 1, 2) + "-" +
Util.add0(dateTemp.get(Calendar.DAY_OF_MONTH), 2);
if (holidayList1.contains(dateStr)) {
all++;
}else if(dateTemp.getTime().getDay() == 6 || dateTemp.getTime().getDay() == 0){
if(!holidayList2.contains(dateStr)){
all++;
}
}
}
bb.writeLog("总休息天数:"+all);
return String.valueOf(all);
}
/**
*
* @param userid
* @return
*/
private static String getField9(Integer userid){
RecordSet rs = new RecordSet();
String sql = "select field9 from cus_fielddata where id = "+userid+" and scope = 'HrmCustomFieldByInfoType' and scopeid>0";
rs.executeQuery(sql);
String field9 = "";
if (rs.next()){
field9 = Util.null2String(rs.getString("field9"));
}
return field9;
}
/**
*
* @param v1
* @param v2
* @return
*/
public static String multiply(String v1, String v2) {
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.multiply(b2).toString();
}
public static void main(String[] args) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
System.out.println(getDaysOfMonth(df.parse("2023-02-01")));
} catch (ParseException e) {
e.printStackTrace();
}
}
}

@ -0,0 +1,80 @@
package weaver.interfaces.omron.job;
import com.engine.kq.biz.KQOverTimeRuleCalBiz;
import com.wbi.util.StringUtil;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.Util;
import weaver.interfaces.schedule.BaseCronJob;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
*
*/
public class NewOverTimeJob extends BaseCronJob {
BaseBean basebean = new BaseBean();
@Override
public void execute() {
try{
basebean.writeLog("======================NewOverTimeJob Start======================");
RecordSet rs = new RecordSet();
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH, 1);
Date firstDayOfMonthDate = calendar.getTime();
//当前月的第一天
String fromDate = cn.hutool.core.date.DateUtil.format(firstDayOfMonthDate,"yyyy-MM-dd");
basebean.writeLog("fromDate: "+fromDate);
//当前日期
String toDate = cn.hutool.core.date.DateUtil.format(new Date(),"yyyy-MM-dd");
basebean.writeLog("toDate: "+toDate);
String eventtype = "历史考勤数据变更班次后重新计算加班时长";
//获取考勤人员
List<String> resourceIds = new ArrayList<>();
String getResSql = "select id from hrmresource where status in (0,1,2,3)";
basebean.writeLog("getResSql: "+getResSql);
rs.executeQuery(getResSql);
while (rs.next()) {
String id = Util.null2String(rs.getString("id"));
if (StringUtil.isNotBlank(id) ) {
resourceIds.add(id);
}
}
basebean.writeLog("resourceIds: "+resourceIds);
//根据人员循环执行
for (String resourceid: resourceIds) {
basebean.writeLog("===========人员重新计算加班start===========");
basebean.writeLog("resourceid: "+resourceid);
KQOverTimeRuleCalBiz kqOverTimeRuleCalBiz = new KQOverTimeRuleCalBiz();
kqOverTimeRuleCalBiz.buildOvertime(resourceid, fromDate, toDate, eventtype);
}
}catch (Exception e){
basebean.writeLog("NewOverTimeJob Exception: " + e);
basebean.writeLog("加班生成数据报错:KQOverTimeRuleCalBiz:");
StringWriter errorsWriter = new StringWriter();
e.printStackTrace(new PrintWriter(errorsWriter));
basebean.writeLog(errorsWriter.toString());
}
basebean.writeLog("======================NewOverTimeJob End======================");
}
}

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save