|
|
package com.engine.kq.biz;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.engine.hostar.util.HostarUtil;
|
|
|
import com.engine.kq.biz.chain.shiftinfo.ShiftInfoBean;
|
|
|
import com.engine.kq.cmd.attendanceButton.ButtonStatusEnum;
|
|
|
import com.engine.kq.entity.TimeScopeEntity;
|
|
|
import com.engine.kq.entity.WorkTimeEntity;
|
|
|
import com.engine.kq.enums.KqSplitFlowTypeEnum;
|
|
|
import com.engine.kq.log.KQLog;
|
|
|
import com.engine.kq.util.KQDurationCalculatorUtil;
|
|
|
|
|
|
import java.text.DecimalFormatSymbols;
|
|
|
import java.util.Map.Entry;
|
|
|
|
|
|
import com.engine.kq.util.KQTransMethod;
|
|
|
import com.google.common.collect.Lists;
|
|
|
import com.google.common.collect.Maps;
|
|
|
import com.weaver.integration.ldap.sync.formart.OaFormart;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import weaver.common.DateUtil;
|
|
|
import weaver.conn.RecordSet;
|
|
|
import weaver.file.Prop;
|
|
|
import weaver.general.BaseBean;
|
|
|
import weaver.general.InitServer;
|
|
|
import weaver.general.TimeUtil;
|
|
|
import weaver.general.Util;
|
|
|
import weaver.hrm.User;
|
|
|
import weaver.systeminfo.SystemEnv;
|
|
|
|
|
|
import javax.ejb.Remove;
|
|
|
import java.text.DecimalFormat;
|
|
|
import java.util.*;
|
|
|
|
|
|
public class KQReportBiz extends BaseBean {
|
|
|
|
|
|
private static DecimalFormat df = new DecimalFormat("0.00");
|
|
|
|
|
|
private DecimalFormatSymbols symbols = new DecimalFormatSymbols();
|
|
|
|
|
|
|
|
|
public String format(double value) {
|
|
|
// DecimalFormatSymbols symbols = new DecimalFormatSymbols();
|
|
|
symbols.setDecimalSeparator('.');
|
|
|
df.setMaximumFractionDigits(5);
|
|
|
df.setDecimalFormatSymbols(symbols);
|
|
|
return df.format(value);
|
|
|
}
|
|
|
|
|
|
|
|
|
private KQLog kqLog = new KQLog();
|
|
|
|
|
|
BaseBean bb = new BaseBean();
|
|
|
/**
|
|
|
* 初始化当天考勤数据
|
|
|
*/
|
|
|
public void initKQReportData(){
|
|
|
String date = DateUtil.getCurrentDate();
|
|
|
RecordSet rs = new RecordSet();
|
|
|
String sql = "";
|
|
|
try{
|
|
|
boolean hasInit = false;
|
|
|
sql = "select 1 from kq_report_check where check_date = ? ";
|
|
|
rs.executeQuery(sql,date);
|
|
|
if(rs.next()) {
|
|
|
hasInit = true;
|
|
|
}
|
|
|
|
|
|
String beforeyesterday = DateUtil.addDate(date,-2);
|
|
|
String yesterday = DateUtil.addDate(date,-1);
|
|
|
if(!hasInit){
|
|
|
//这里做过功能是每天都刷下考勤缓存 因为这个缓存也是异步的,一点都不稳定
|
|
|
kqLog.info("begin do KQOneStopUp refreshCominfo invoke ...");
|
|
|
new KQOneStopUp().refreshCominfo();
|
|
|
kqLog.info("end do KQOneStopUp refreshCominfo invoke ...");
|
|
|
|
|
|
KQFormatBiz kqFormatBiz = new KQFormatBiz();
|
|
|
kqFormatBiz.clearFormatPool();
|
|
|
//格式化上上天数据
|
|
|
kqFormatBiz.formatDateByKQDate(beforeyesterday);
|
|
|
//格式化上一天数据
|
|
|
kqFormatBiz.formatDateByKQDate(yesterday);
|
|
|
//初始化今天数据
|
|
|
kqFormatBiz.formatDateByKQDate(date);
|
|
|
|
|
|
sql = " insert into kq_report_check(check_date) values (?)";
|
|
|
rs.executeUpdate(sql,date);
|
|
|
|
|
|
writeLog(date+"执行考勤报表数据格式化成功!");
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public Map<String, String> getModel_ShiftRule(String i,String serialId) {
|
|
|
RecordSet rs = new RecordSet();
|
|
|
HashMap<String,String> sectionMap = new HashMap<>();
|
|
|
String getStartWorkSections = "select * from kq_ShiftOnOffWorkSections where SERIALID=? and record=? ";
|
|
|
rs.executeQuery(getStartWorkSections,serialId,i);
|
|
|
while (rs.next()) {
|
|
|
String onoffworktype = Util.null2String(rs.getString("onoffworktype"));
|
|
|
String clockinnot = Util.null2s(Util.null2String(rs.getString("clockinnot")), "0");
|
|
|
sectionMap.put(onoffworktype, clockinnot);
|
|
|
}
|
|
|
return sectionMap;
|
|
|
}
|
|
|
|
|
|
/***
|
|
|
* 获取考勤状态
|
|
|
* @param resourceId
|
|
|
* @param fromdate
|
|
|
* @param todate
|
|
|
* @param isAll
|
|
|
* @return
|
|
|
*/
|
|
|
public List<Object> getKqDateInfo(String resourceId, String fromdate, String todate, boolean isAll) {
|
|
|
List<Object> kqdates = new ArrayList<>();
|
|
|
RecordSet rs = new RecordSet();
|
|
|
String sql = "";
|
|
|
try {
|
|
|
Map<String, Object> kqdate = null;
|
|
|
List<Object> datas = null;
|
|
|
Map<String,Object> data = null;
|
|
|
sql = " select kqdate,serialid, workbegindate, workbegintime,workenddate, workendtime," +
|
|
|
" signintime,signouttime,beLateMins,graveBeLateMins,leaveEarlyMins,graveLeaveEarlyMins," +
|
|
|
" absenteeismMins, forgotCheckMins,forgotBeginWorkCheckMins,otherinfo,serialnumber "+
|
|
|
" from kq_format_detail " +
|
|
|
" where resourceid=? and kqdate>=? and kqdate<=? ";
|
|
|
if(!isAll){
|
|
|
if(rs.getDBType().equalsIgnoreCase("oracle") || Util.null2String(rs.getOrgindbtype()).equals("dm") || Util.null2String(rs.getOrgindbtype()).equals("st")) {
|
|
|
sql += " and nvl(beLateMins,0)+nvl(graveBeLateMins,0)+nvl(leaveEarlyMins,0)+nvl(graveLeaveEarlyMins,0)+nvl(absenteeismMins,0)+nvl(forgotCheckMins,0)+nvl(forgotBeginWorkCheckMins,0)>0 ";
|
|
|
}else if((rs.getDBType()).equalsIgnoreCase("mysql")){
|
|
|
sql += " and ifnull(beLateMins,0)+ifnull(graveBeLateMins,0)+ifnull(leaveEarlyMins,0)+ifnull(graveLeaveEarlyMins,0)+ifnull(absenteeismMins,0)+ifnull(forgotCheckMins,0)+ifnull(forgotBeginWorkCheckMins,0)>0 ";
|
|
|
}else {
|
|
|
sql += " and isnull(beLateMins,0)+isnull(graveBeLateMins,0)+isnull(leaveEarlyMins,0)+isnull(graveLeaveEarlyMins,0)+isnull(absenteeismMins,0)+isnull(forgotCheckMins,0)+isnull(forgotBeginWorkCheckMins,0)>0 ";
|
|
|
}
|
|
|
}
|
|
|
sql += " order by kqdate ";
|
|
|
|
|
|
rs.executeQuery(sql,resourceId,fromdate, todate);
|
|
|
while(rs.next()){
|
|
|
String serialnumber = Util.null2String(rs.getString("serialnumber"));
|
|
|
String serialid = Util.null2String(rs.getString("serialid"));
|
|
|
String workbegindate = Util.null2String(rs.getString("workbegindate"));
|
|
|
String workbegintime = Util.null2String(rs.getString("workbegintime"));
|
|
|
String workenddate = Util.null2String(rs.getString("workenddate"));
|
|
|
String workendtime = Util.null2String(rs.getString("workendtime"));
|
|
|
String signintime = Util.null2String(rs.getString("signintime"));
|
|
|
String signouttime = Util.null2String(rs.getString("signouttime"));
|
|
|
int beLateMins = rs.getInt("beLateMins");
|
|
|
int graveBeLateMins = rs.getInt("graveBeLateMins");
|
|
|
int leaveEarlyMins = rs.getInt("leaveEarlyMins");
|
|
|
int graveLeaveEarlyMins = rs.getInt("graveLeaveEarlyMins");
|
|
|
int absenteeismMins = rs.getInt("absenteeismMins");
|
|
|
int forgotCheckMins = rs.getInt("forgotCheckMins");
|
|
|
int forgotBeginWorkCheckMins = rs.getInt("forgotBeginWorkCheckMins");
|
|
|
String otherinfo = Util.null2String(rs.getString("otherinfo"));
|
|
|
|
|
|
String shift_begindate = "";
|
|
|
String shift_beginworktime = "";
|
|
|
String shift_enddate = "";
|
|
|
String shift_endworktime = "";
|
|
|
if(otherinfo.length() > 0){
|
|
|
JSONObject otherinfo_object = JSONObject.parseObject(otherinfo);
|
|
|
if(otherinfo_object != null && !otherinfo_object.isEmpty()){
|
|
|
JSONObject shiftRule = (JSONObject) otherinfo_object.get("shiftRule");
|
|
|
if(shiftRule != null && !shiftRule.isEmpty()){
|
|
|
shift_begindate = Util.null2String(shiftRule.get("shift_begindate"));
|
|
|
shift_beginworktime = Util.null2String(shiftRule.get("shift_beginworktime"));
|
|
|
shift_enddate = Util.null2String(shiftRule.get("shift_enddate"));
|
|
|
shift_endworktime = Util.null2String(shiftRule.get("shift_endworktime"));
|
|
|
if(shift_begindate.length() > 0){
|
|
|
workbegindate = shift_begindate;
|
|
|
}
|
|
|
if(shift_beginworktime.length() > 0){
|
|
|
workbegintime = shift_beginworktime;
|
|
|
}
|
|
|
if(shift_enddate.length() > 0){
|
|
|
workenddate = shift_enddate;
|
|
|
}
|
|
|
if(shift_endworktime.length() > 0){
|
|
|
workendtime = shift_endworktime;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
kqdate = new HashMap<>();
|
|
|
datas = new ArrayList<>();
|
|
|
kqdate.put("kqdate",Util.null2String(rs.getString("kqdate")));
|
|
|
if(workbegindate.length()>0){
|
|
|
data = new HashMap<>();
|
|
|
data.put("workbegindate",workbegindate);
|
|
|
data.put("workbegintime",workbegintime);
|
|
|
data.put("signintime",signintime);
|
|
|
|
|
|
data.put("workenddate",workenddate);
|
|
|
data.put("workendtime",workendtime);
|
|
|
data.put("signouttime",signouttime);
|
|
|
String status = "";
|
|
|
if(beLateMins>0||graveBeLateMins>0){
|
|
|
status = ButtonStatusEnum.BELATE.getStatusCode();
|
|
|
}
|
|
|
if(forgotBeginWorkCheckMins>0){
|
|
|
if(status.length()>0)status+=",";
|
|
|
status += ButtonStatusEnum.NOSIGN_ON.getStatusCode();
|
|
|
}
|
|
|
if(leaveEarlyMins>0||graveLeaveEarlyMins>0){
|
|
|
if(status.length()>0)status+=",";
|
|
|
status += ButtonStatusEnum.LEAVEERALY.getStatusCode();
|
|
|
}
|
|
|
if(absenteeismMins>0){
|
|
|
int isondutyfreecheck =0;
|
|
|
int isoffdutyfreecheck =0;
|
|
|
Map<String, String> model_ShiftRule = getModel_ShiftRule(serialnumber, serialid);
|
|
|
Iterator iter = model_ShiftRule.entrySet().iterator();
|
|
|
while (iter.hasNext()) {
|
|
|
Entry entry = (Entry) iter.next();
|
|
|
String key = Util.null2String(entry.getKey());
|
|
|
String value = Util.null2String(entry.getValue());
|
|
|
if(key.equals("start")&&value.equals("1")){
|
|
|
isondutyfreecheck = 1;
|
|
|
}
|
|
|
if(key.equals("end")&&value.equals("1")){
|
|
|
isoffdutyfreecheck = 1;
|
|
|
}
|
|
|
}
|
|
|
data.put("start",isondutyfreecheck);
|
|
|
data.put("end",isoffdutyfreecheck);
|
|
|
if(status.length()>0)status+=",";
|
|
|
status += ButtonStatusEnum.ABSENT.getStatusCode();
|
|
|
}
|
|
|
if(forgotCheckMins>0){
|
|
|
if(status.length()>0)status+=",";
|
|
|
status += ButtonStatusEnum.NOSIGN.getStatusCode();
|
|
|
}
|
|
|
data.put("status",status);
|
|
|
datas.add(data);
|
|
|
}
|
|
|
|
|
|
kqdate.put("checkInfo",datas);
|
|
|
kqdates.add(kqdate);
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
writeLog(e);
|
|
|
}
|
|
|
return kqdates;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取报表权限
|
|
|
* @param reportType 报表类型
|
|
|
* @param userId 用户id
|
|
|
* @param tableExt 别名
|
|
|
* @return
|
|
|
*/
|
|
|
public String getReportRight(String reportType, String userId, String tableExt){
|
|
|
String rightSql = "";
|
|
|
String sql = "";
|
|
|
RecordSet rs = new RecordSet();
|
|
|
try{
|
|
|
List<String> userAllUserIds = new ArrayList<>();
|
|
|
List<String> userAllDeptIds = new ArrayList<>();
|
|
|
List<String> userAllSubCompanyIds = new ArrayList<>();
|
|
|
List<String> userAllJobtitleIds = new ArrayList<>();
|
|
|
boolean forAllUser = false;
|
|
|
sql = " select sharelevel,subcomid, deptid,userid,jobtitleid,foralluser from kq_reportshare where resourceid=? ";
|
|
|
if(reportType.length()>0 ){
|
|
|
sql += " and (reportname =0 or reportname =" + reportType+")";
|
|
|
}
|
|
|
rs.executeQuery(sql,userId);
|
|
|
while(rs.next()){
|
|
|
int sharelevel = rs.getInt("sharelevel");
|
|
|
if(sharelevel==0){//分部
|
|
|
if(Util.null2String(rs.getString("subcomid")).length()>0){
|
|
|
userAllSubCompanyIds.add(rs.getString("subcomid"));
|
|
|
}
|
|
|
}else if(sharelevel==1){//部门
|
|
|
if(Util.null2String(rs.getString("deptid")).length()>0) {
|
|
|
userAllDeptIds.add(rs.getString("deptid"));
|
|
|
}
|
|
|
}else if(sharelevel==2){//人员
|
|
|
if(Util.null2String(rs.getString("userid")).length()>0) {
|
|
|
userAllUserIds.add(rs.getString("userid"));
|
|
|
}
|
|
|
}else if(sharelevel==3){//岗位
|
|
|
if(Util.null2String(rs.getString("jobtitleid")).length()>0) {
|
|
|
userAllJobtitleIds.add(rs.getString("jobtitleid"));
|
|
|
}
|
|
|
}else if(sharelevel==4){//所有人
|
|
|
forAllUser = true;
|
|
|
userAllUserIds.clear();
|
|
|
userAllDeptIds.clear();
|
|
|
userAllSubCompanyIds.clear();
|
|
|
userAllJobtitleIds.clear();
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if(!forAllUser) {
|
|
|
for (int sharelevel = 0; sharelevel < 4; sharelevel++) {
|
|
|
if (sharelevel == 0) {//分部
|
|
|
if (userAllSubCompanyIds.size() > 0) {
|
|
|
if(rightSql.length()>0)rightSql+= " or ";
|
|
|
rightSql += tableExt+".subcompanyid1 in(" + String.join(",", userAllSubCompanyIds) + ")";
|
|
|
}
|
|
|
} else if (sharelevel == 1) {//部门
|
|
|
if (userAllDeptIds.size() > 0) {
|
|
|
if(rightSql.length()>0)rightSql+= " or ";
|
|
|
rightSql += tableExt+".departmentid in(" + String.join(",", userAllDeptIds) + ")";
|
|
|
}
|
|
|
} else if (sharelevel == 2) {//人员
|
|
|
if (userAllUserIds.size() > 0) {
|
|
|
if(rightSql.length()>0)rightSql+= " or ";
|
|
|
rightSql += tableExt+".id in(" + String.join(",", userAllUserIds) + ")";
|
|
|
}
|
|
|
} else if (sharelevel == 3) {//岗位
|
|
|
if (userAllJobtitleIds.size() > 0) {
|
|
|
if(rightSql.length()>0)rightSql+= " or ";
|
|
|
rightSql += tableExt+".jobtitle in(" + String.join(",", userAllJobtitleIds) + ")";
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//可以看自己和下属的考勤
|
|
|
String selfSql = " ("+tableExt+".id = "+userId+" or "+tableExt+".managerstr like '%,"+userId+",%')";
|
|
|
if(rightSql.length()>0){
|
|
|
rightSql = " and ((" +rightSql+") or "+selfSql+" ) ";
|
|
|
}else{
|
|
|
rightSql = " and "+selfSql;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
}
|
|
|
return rightSql;
|
|
|
}
|
|
|
|
|
|
public static String getUnitType(KQReportFieldComInfo kqReportFieldComInfo, User user){
|
|
|
String unitTypeName = "";
|
|
|
String unitType = Util.null2String(kqReportFieldComInfo.getUnittype());
|
|
|
String parentid = Util.null2String( kqReportFieldComInfo.getParentid());
|
|
|
String fieldName = Util.null2String(kqReportFieldComInfo.getFieldname());
|
|
|
if(kqReportFieldComInfo.getIsLeaveType().equals("1")){
|
|
|
if(fieldName.equals("businessLeave")){
|
|
|
unitType = KQTravelRulesBiz.getMinimumUnit().equals("3")?"2":"1";//单位类型
|
|
|
}else if(fieldName.equals("officialBusiness")){
|
|
|
unitType = KQExitRulesBiz.getMinimumUnit().equals("3")?"2":"1";//单位类型
|
|
|
}else if(parentid.equals("overtime") || parentid.equals("overtime_nonleave") || parentid.equals("overtime_4leave")){
|
|
|
unitType = (KQOvertimeRulesBiz.getMinimumUnit()==3 || KQOvertimeRulesBiz.getMinimumUnit()==5 ||KQOvertimeRulesBiz.getMinimumUnit()==6)?"2":"1";//单位类型
|
|
|
}
|
|
|
}
|
|
|
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;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 为每日统计报表做流程数据查询
|
|
|
* @param params
|
|
|
* @param user
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Object> getDailyFlowData(Map<String,Object> params, User user){
|
|
|
Map<String,Object> datas = new HashMap<>();;
|
|
|
try{
|
|
|
datas.putAll(getDailyFlowLeaveData(params,user));
|
|
|
datas.putAll(getDailyFlowEvectionOutData(params,user));
|
|
|
datas.putAll(getDailyFlowOverTimeData(params,user));
|
|
|
datas.putAll(getDailyFlowLeaveBackData(params,user));
|
|
|
|
|
|
/*考勤二开--出差公出流程餐补统计start*/
|
|
|
datas.putAll(getDailyMealAllowanceData(params,user));
|
|
|
/*考勤二开--出差公出流程餐补统计end*/
|
|
|
|
|
|
// /*考勤二开--计算驻点餐补start*/
|
|
|
// datas.putAll(getDailyStatAllowanceData(params,user));
|
|
|
// /*考勤二开--计算驻点餐补end*/
|
|
|
|
|
|
/*考勤二开--计算精密夜班餐补start*/
|
|
|
datas.putAll(getDailyNightShiftAllowanceData(params,user));
|
|
|
/*考勤二开--计算精密夜班餐补end*/
|
|
|
|
|
|
/*考勤二开--计算鸿仁驻点餐补start*/
|
|
|
datas.putAll(getDailyOtherStatAllowanceData(params,user));
|
|
|
/*考勤二开--计算鸿仁驻点餐补end*/
|
|
|
|
|
|
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
}
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
public Map<String,Object> getFlowData(Map<String,Object> params, User user){
|
|
|
Map<String,Object> datas = new HashMap<>();;
|
|
|
try{
|
|
|
datas.putAll(getFlowLeaveData(params,user));
|
|
|
datas.putAll(getFlowEvectionOutData(params,user));
|
|
|
datas.putAll(getFlowOverTimeDataNew(params,user));
|
|
|
datas.putAll(getFlowOtherData(params,user));
|
|
|
datas.putAll(getFlowLeaveBackData(params,user));
|
|
|
datas.putAll(getFlowProcessChangeData(params,user));
|
|
|
|
|
|
datas.putAll(getCardMap(params,user));
|
|
|
datas.putAll(getOverTime(params,user));
|
|
|
|
|
|
/*考勤二开--出差公出流程餐补统计start*/
|
|
|
|
|
|
datas.putAll(getDailyMealAllowanceData(params,user));
|
|
|
/*考勤二开--出差公出流程餐补统计end*/
|
|
|
|
|
|
/*考勤二开--计算驻点餐补start*/
|
|
|
// long startTime2 = System.currentTimeMillis();
|
|
|
// datas.putAll(getDailyStatAllowanceData(params,user));
|
|
|
// long endTime2 = System.currentTimeMillis();
|
|
|
// long elapsedTime2 = endTime2 - startTime2; // 执行时间
|
|
|
// bb.writeLog("计算驻点餐补执行时间:" + elapsedTime2 + "毫秒" );
|
|
|
/*考勤二开--计算驻点餐补end*/
|
|
|
|
|
|
/*考勤二开--计算精密夜班餐补start*/
|
|
|
datas.putAll(getDailyNightShiftAllowanceData(params,user));
|
|
|
/*考勤二开--计算精密夜班餐补end*/
|
|
|
|
|
|
/*考勤二开--计算鸿仁驻点餐补start*/
|
|
|
datas.putAll(getDailyOtherStatAllowanceData(params,user));
|
|
|
/*考勤二开--计算鸿仁驻点餐补end*/
|
|
|
|
|
|
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
}
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取出差和公出数据
|
|
|
* @param params
|
|
|
* @param user
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Object> getFlowEvectionOutData(Map<String,Object> params, User user){
|
|
|
Map<String,Object> datas = new HashMap<>();;
|
|
|
RecordSet rs = new RecordSet();
|
|
|
String sql = "";
|
|
|
String sqlWhere = " ";
|
|
|
try{
|
|
|
String[] tables = new String[]{KqSplitFlowTypeEnum.EVECTION.getTablename(),//出差
|
|
|
KqSplitFlowTypeEnum.OUT.getTablename()};//公出
|
|
|
|
|
|
String minimumUnit = "";//单位类型
|
|
|
double proportion = 0.00;//换算关系
|
|
|
|
|
|
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
|
|
|
String fromDate = Util.null2String(jsonObj.get("fromDate"));
|
|
|
String toDate = Util.null2String(jsonObj.get("toDate"));
|
|
|
String typeselect =Util.null2String(jsonObj.get("typeselect"));
|
|
|
if(typeselect.length()==0)typeselect = "3";
|
|
|
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
|
|
|
if(typeselect.equals("1")){
|
|
|
fromDate = TimeUtil.getCurrentDateString();
|
|
|
toDate = TimeUtil.getCurrentDateString();
|
|
|
}else{
|
|
|
fromDate = TimeUtil.getDateByOption(typeselect,"0");
|
|
|
toDate = TimeUtil.getDateByOption(typeselect,"1");
|
|
|
}
|
|
|
}
|
|
|
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
|
|
|
String departmentId = Util.null2String(jsonObj.get("departmentId"));
|
|
|
String resourceId = Util.null2String(jsonObj.get("resourceId"));
|
|
|
String allLevel = Util.null2String(jsonObj.get("allLevel"));
|
|
|
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
|
|
|
String viewScope = Util.null2String(jsonObj.get("viewScope"));
|
|
|
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<>'' ");
|
|
|
}
|
|
|
|
|
|
for(String table : tables){
|
|
|
sql = " select resourceid, durationrule, sum(duration) as val from hrmresource a, "+table+" b "+
|
|
|
" where a.id = b.resourceid and (b.status is null or b.status<>1) and belongdate >='"+fromDate+"' and belongdate <='"+toDate+"' "+sqlWhere+
|
|
|
" group by resourceid, durationrule ";
|
|
|
rs.execute(sql);
|
|
|
while (rs.next()) {
|
|
|
String resourceid = rs.getString("resourceid");
|
|
|
double value = rs.getDouble("val");
|
|
|
String durationrule = rs.getString("durationrule");
|
|
|
|
|
|
String flowType = "";
|
|
|
if(KqSplitFlowTypeEnum.EVECTION.getTablename().equals(table)){
|
|
|
flowType = "businessLeave";
|
|
|
minimumUnit = KQTravelRulesBiz.getMinimumUnit();//单位类型
|
|
|
proportion = Util.getDoubleValue(KQTravelRulesBiz.getHoursToDay());//换算关系
|
|
|
|
|
|
}else if(KqSplitFlowTypeEnum.OUT.getTablename().equals(table)){
|
|
|
flowType = "officialBusiness";
|
|
|
minimumUnit = KQExitRulesBiz.getMinimumUnit();//单位类型
|
|
|
proportion = Util.getDoubleValue(KQExitRulesBiz.getHoursToDay());//换算关系
|
|
|
}
|
|
|
|
|
|
if(KQUnitBiz.isLeaveHour(minimumUnit)){//按小时
|
|
|
if(!KQUnitBiz.isLeaveHour(durationrule)){
|
|
|
if(proportion>0) value = value*proportion;
|
|
|
}
|
|
|
}else{//按天
|
|
|
if(KQUnitBiz.isLeaveHour(durationrule)){
|
|
|
if(proportion>0) value = value/proportion;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
String key = resourceid+"|"+flowType;
|
|
|
if(datas.containsKey(key)){
|
|
|
value += Util.getDoubleValue(Util.null2String(datas.get(key)));
|
|
|
}
|
|
|
//df.format 默认是不四舍五入的 0.125这样的就会直接变成0.12了
|
|
|
df.setMaximumFractionDigits(5);
|
|
|
datas.put(key, format(value));
|
|
|
}
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
}
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取每日的出差和公出数据
|
|
|
* @param params
|
|
|
* @param user
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Object> getDailyFlowEvectionOutData(Map<String,Object> params, User user){
|
|
|
Map<String,Object> datas = new HashMap<>();;
|
|
|
RecordSet rs = new RecordSet();
|
|
|
String sql = "";
|
|
|
String sqlWhere = " ";
|
|
|
try{
|
|
|
String[] tables = new String[]{KqSplitFlowTypeEnum.EVECTION.getTablename(),//出差
|
|
|
KqSplitFlowTypeEnum.OUT.getTablename()};//公出
|
|
|
|
|
|
String minimumUnit = "";//单位类型
|
|
|
double proportion = 0.00;//换算关系
|
|
|
|
|
|
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
|
|
|
String fromDate = Util.null2String(jsonObj.get("fromDate"));
|
|
|
String toDate = Util.null2String(jsonObj.get("toDate"));
|
|
|
String typeselect =Util.null2String(jsonObj.get("typeselect"));
|
|
|
if(typeselect.length()==0)typeselect = "3";
|
|
|
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
|
|
|
if(typeselect.equals("1")){
|
|
|
fromDate = TimeUtil.getCurrentDateString();
|
|
|
toDate = TimeUtil.getCurrentDateString();
|
|
|
}else{
|
|
|
fromDate = TimeUtil.getDateByOption(typeselect,"0");
|
|
|
toDate = TimeUtil.getDateByOption(typeselect,"1");
|
|
|
}
|
|
|
}
|
|
|
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
|
|
|
String departmentId = Util.null2String(jsonObj.get("departmentId"));
|
|
|
String resourceId = Util.null2String(jsonObj.get("resourceId"));
|
|
|
String allLevel = Util.null2String(jsonObj.get("allLevel"));
|
|
|
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
|
|
|
String viewScope = Util.null2String(jsonObj.get("viewScope"));
|
|
|
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<>'' ");
|
|
|
}
|
|
|
|
|
|
for(String table : tables){
|
|
|
sql = " select resourceid, durationrule, sum(duration) as val,belongdate from hrmresource a, "+table+" b "+
|
|
|
" where a.id = b.resourceid and (b.status is null or b.status<>1) and belongdate >='"+fromDate+"' and belongdate <='"+toDate+"' "+sqlWhere+
|
|
|
" group by resourceid, durationrule,belongdate ";
|
|
|
rs.execute(sql);
|
|
|
while (rs.next()) {
|
|
|
String resourceid = rs.getString("resourceid");
|
|
|
String belongdate = rs.getString("belongdate");
|
|
|
double value = rs.getDouble("val");
|
|
|
String durationrule = rs.getString("durationrule");
|
|
|
|
|
|
String flowType = "";
|
|
|
if(KqSplitFlowTypeEnum.EVECTION.getTablename().equals(table)){
|
|
|
flowType = "businessLeave";
|
|
|
minimumUnit = KQTravelRulesBiz.getMinimumUnit();//单位类型
|
|
|
proportion = Util.getDoubleValue(KQTravelRulesBiz.getHoursToDay());//换算关系
|
|
|
}else if(KqSplitFlowTypeEnum.OUT.getTablename().equals(table)){
|
|
|
flowType = "officialBusiness";
|
|
|
minimumUnit = KQExitRulesBiz.getMinimumUnit();//单位类型
|
|
|
proportion = Util.getDoubleValue(KQExitRulesBiz.getHoursToDay());//换算关系
|
|
|
}
|
|
|
|
|
|
if(KQUnitBiz.isLeaveHour(minimumUnit)){//按小时
|
|
|
if(!KQUnitBiz.isLeaveHour(durationrule)){
|
|
|
if(proportion>0) value = value*proportion;
|
|
|
}
|
|
|
}else{//按天
|
|
|
if(KQUnitBiz.isLeaveHour(durationrule)){
|
|
|
if(proportion>0) value = value/proportion;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
String key = resourceid+"|"+belongdate+"|"+flowType;
|
|
|
if(datas.containsKey(key)){
|
|
|
value += Util.getDoubleValue(Util.null2String(datas.get(key)));
|
|
|
}
|
|
|
//df.format 默认是不四舍五入的 0.125这样的就会直接变成0.12了
|
|
|
df.setMaximumFractionDigits(5);
|
|
|
datas.put(key, format(value));
|
|
|
}
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
}
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取请假数据
|
|
|
* @param params
|
|
|
* @param user
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Object> getFlowLeaveData(Map<String,Object> params, User user){
|
|
|
Map<String,Object> datas = new HashMap<>();;
|
|
|
RecordSet rs = new RecordSet();
|
|
|
String sql = "";
|
|
|
String sqlWhere = " ";
|
|
|
try{
|
|
|
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
|
|
|
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
|
|
|
String fromDate = Util.null2String(jsonObj.get("fromDate"));
|
|
|
String toDate = Util.null2String(jsonObj.get("toDate"));
|
|
|
String typeselect =Util.null2String(jsonObj.get("typeselect"));
|
|
|
if(typeselect.length()==0)typeselect = "3";
|
|
|
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
|
|
|
if(typeselect.equals("1")){
|
|
|
fromDate = TimeUtil.getCurrentDateString();
|
|
|
toDate = TimeUtil.getCurrentDateString();
|
|
|
}else{
|
|
|
fromDate = TimeUtil.getDateByOption(typeselect,"0");
|
|
|
toDate = TimeUtil.getDateByOption(typeselect,"1");
|
|
|
}
|
|
|
}
|
|
|
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
|
|
|
String departmentId = Util.null2String(jsonObj.get("departmentId"));
|
|
|
String resourceId = Util.null2String(jsonObj.get("resourceId"));
|
|
|
String allLevel = Util.null2String(jsonObj.get("allLevel"));
|
|
|
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
|
|
|
String viewScope = Util.null2String(jsonObj.get("viewScope"));
|
|
|
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<>'' ");
|
|
|
}
|
|
|
|
|
|
sql = " select resourceid, newleavetype, durationrule, sum(duration) as val from hrmresource a, "+KqSplitFlowTypeEnum.LEAVE.getTablename()+" b "+
|
|
|
" where a.id = b.resourceid and belongdate >='"+fromDate+"' and belongdate <='"+toDate+"' " +sqlWhere +
|
|
|
" group by resourceid, newleavetype, durationrule ";
|
|
|
rs.execute(sql);
|
|
|
while (rs.next()) {
|
|
|
String resourceid = rs.getString("resourceid");
|
|
|
String newleavetype = rs.getString("newleavetype");
|
|
|
String durationrule = rs.getString("durationrule");
|
|
|
double value = rs.getDouble("val")<0?0:rs.getDouble("val");
|
|
|
|
|
|
double proportion = Util.getDoubleValue(kqLeaveRulesComInfo.getProportion(newleavetype));
|
|
|
if(KQUnitBiz.isLeaveHour(newleavetype, kqLeaveRulesComInfo)){//按小时
|
|
|
if(!KQUnitBiz.isLeaveHour(durationrule)){
|
|
|
if(proportion>0) value = value*proportion;
|
|
|
}
|
|
|
}else{//按天
|
|
|
if(KQUnitBiz.isLeaveHour(durationrule)){
|
|
|
if(proportion>0) value = value/proportion;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
String key = resourceid+"|leaveType_"+newleavetype;
|
|
|
if(datas.containsKey(key)){
|
|
|
value += Util.getDoubleValue(Util.null2String(datas.get(key)));
|
|
|
}
|
|
|
//df.format 默认是不四舍五入的 0.125这样的就会直接变成0.12了
|
|
|
df.setMaximumFractionDigits(5);
|
|
|
datas.put(key,format(value));
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
}
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
|
|
|
//获取打卡数据用于判断外勤,补卡等信息===============================
|
|
|
public Map<String,Object> getCardMap(Map<String,Object> params, User user){
|
|
|
Map<String,Object> datas = new HashMap<>();;
|
|
|
RecordSet rs = new RecordSet();
|
|
|
String sql = "";
|
|
|
String sqlWhere = " ";
|
|
|
//rs.writeLog("getCardMap="+ JSONObject.toJSONString(params));
|
|
|
try{
|
|
|
String show_card_source = Util.null2String(params.get("show_card_source"));
|
|
|
if(!"1".equals(show_card_source)){//下面的日历都是实时拼接,这里还是控制下数据库的交互次数,虽然用起来没啥用-.-
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
|
|
|
KQTransMethod kqTransMethod = new KQTransMethod();
|
|
|
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
|
|
|
rs.writeLog("jsonObj="+ jsonObj.toJSONString());
|
|
|
String fromDate = Util.null2String(jsonObj.get("fromDate"));
|
|
|
String toDate = Util.null2String(jsonObj.get("toDate"));
|
|
|
String typeselect =Util.null2String(jsonObj.get("typeselect"));
|
|
|
if(typeselect.length()==0)typeselect = "3";
|
|
|
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
|
|
|
if(typeselect.equals("1")){
|
|
|
fromDate = TimeUtil.getCurrentDateString();
|
|
|
toDate = TimeUtil.getCurrentDateString();
|
|
|
}else{
|
|
|
fromDate = TimeUtil.getDateByOption(typeselect,"0");
|
|
|
toDate = TimeUtil.getDateByOption(typeselect,"1");
|
|
|
}
|
|
|
}
|
|
|
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
|
|
|
String departmentId = Util.null2String(jsonObj.get("departmentId"));
|
|
|
String resourceId = Util.null2String(jsonObj.get("resourceId"));
|
|
|
String allLevel = Util.null2String(jsonObj.get("allLevel"));
|
|
|
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
|
|
|
String viewScope = Util.null2String(jsonObj.get("viewScope"));
|
|
|
if(subCompanyId.length()>0){
|
|
|
sqlWhere +=" and a.subcompanyid1 in("+subCompanyId+") ";
|
|
|
}
|
|
|
|
|
|
if(departmentId.length()>0){
|
|
|
sqlWhere +=" and a.departmentid in("+departmentId+") ";
|
|
|
}
|
|
|
|
|
|
if(resourceId.length()>0){
|
|
|
sqlWhere +=" and a.id in("+resourceId+") ";
|
|
|
}
|
|
|
|
|
|
if(viewScope.equals("4")){//我的下属
|
|
|
if(allLevel.equals("1")){//所有下属
|
|
|
sqlWhere+=" and a.managerstr like '%,"+user.getUID()+",%'";
|
|
|
}else{
|
|
|
sqlWhere+=" and a.managerid="+user.getUID();//直接下属
|
|
|
}
|
|
|
}
|
|
|
if (!"1".equals(isNoAccount)) {
|
|
|
sqlWhere += " and a.loginid is not null "+(rs.getDBType().equals("oracle")?"":" and a.loginid<>'' ");
|
|
|
}
|
|
|
//em7外勤、云桥外勤数据同步、钉钉外勤打卡、微信外勤转考勤(补卡先留一个口子,以防客户要)
|
|
|
// sqlWhere += " and (signfrom like 'card%' or signfrom='e9_mobile_out' or signfrom='EMSyn_out' or signfrom='DingTalk_out' or signfrom='Wechat_out') ";
|
|
|
|
|
|
sql = " select a.id,b.signdate,b.id as signid,b.signfrom from hrmresource a, hrmschedulesign b "+
|
|
|
" where a.id = b.userid and b.signdate >='"+fromDate+"' and b.signdate <='"+toDate+"' " +sqlWhere +
|
|
|
" order by a.id,b.signdate ";
|
|
|
rs.execute(sql);
|
|
|
// kqLog.info("card.sql="+sql);
|
|
|
while (rs.next()) {
|
|
|
String resourceid = Util.null2String(rs.getString("id"));
|
|
|
String signdate = Util.null2String(rs.getString("signdate"));
|
|
|
String signid = Util.null2String(rs.getString("signid"));
|
|
|
String signfrom = Util.null2String(rs.getString("signfrom"));
|
|
|
String signFromShow = kqTransMethod.getSignFromShow(signfrom, ""+user.getLanguage());
|
|
|
String key = resourceid+"|"+signdate;
|
|
|
|
|
|
datas.put(signid,signFromShow);
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
}
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
//获取打卡数据用于判断外勤,补卡等信息===============================
|
|
|
|
|
|
/**
|
|
|
* 获取销假数据
|
|
|
* @param params
|
|
|
* @param user
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Object> getFlowLeaveBackData(Map<String,Object> params, User user){
|
|
|
Map<String,Object> datas = new HashMap<>();;
|
|
|
RecordSet rs = new RecordSet();
|
|
|
String sql = "";
|
|
|
String sqlWhere = " ";
|
|
|
try{
|
|
|
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
|
|
|
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
|
|
|
String fromDate = Util.null2String(jsonObj.get("fromDate"));
|
|
|
String toDate = Util.null2String(jsonObj.get("toDate"));
|
|
|
String typeselect =Util.null2String(jsonObj.get("typeselect"));
|
|
|
if(typeselect.length()==0)typeselect = "3";
|
|
|
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
|
|
|
if(typeselect.equals("1")){
|
|
|
fromDate = TimeUtil.getCurrentDateString();
|
|
|
toDate = TimeUtil.getCurrentDateString();
|
|
|
}else{
|
|
|
fromDate = TimeUtil.getDateByOption(typeselect,"0");
|
|
|
toDate = TimeUtil.getDateByOption(typeselect,"1");
|
|
|
}
|
|
|
}
|
|
|
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
|
|
|
String departmentId = Util.null2String(jsonObj.get("departmentId"));
|
|
|
String resourceId = Util.null2String(jsonObj.get("resourceId"));
|
|
|
String allLevel = Util.null2String(jsonObj.get("allLevel"));
|
|
|
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
|
|
|
String viewScope = Util.null2String(jsonObj.get("viewScope"));
|
|
|
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<>'' ");
|
|
|
}
|
|
|
|
|
|
sql = " select resourceid, newleavetype, durationrule, sum(duration) as val from hrmresource a, "+KqSplitFlowTypeEnum.LEAVEBACK.getTablename()+" b "+
|
|
|
" where a.id = b.resourceid and belongdate >='"+fromDate+"' and belongdate <='"+toDate+"' " +sqlWhere +
|
|
|
" group by resourceid, newleavetype, durationrule ";
|
|
|
rs.execute(sql);
|
|
|
while (rs.next()) {
|
|
|
String resourceid = rs.getString("resourceid");
|
|
|
String newleavetype = rs.getString("newleavetype");
|
|
|
String durationrule = rs.getString("durationrule");
|
|
|
double value = rs.getDouble("val")<0?0:rs.getDouble("val");
|
|
|
|
|
|
double proportion = Util.getDoubleValue(kqLeaveRulesComInfo.getProportion(newleavetype));
|
|
|
if(KQUnitBiz.isLeaveHour(newleavetype,kqLeaveRulesComInfo)){//按小时
|
|
|
if(!KQUnitBiz.isLeaveHour(durationrule)){
|
|
|
if(proportion>0) value = value*proportion;
|
|
|
}
|
|
|
}else{//按天
|
|
|
if(KQUnitBiz.isLeaveHour(durationrule)){
|
|
|
if(proportion>0) value = value/proportion;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
String key = resourceid+"|leavebackType_"+newleavetype;
|
|
|
if(datas.containsKey(key)){
|
|
|
value += Util.getDoubleValue(Util.null2String(datas.get(key)));
|
|
|
}
|
|
|
//df.format 默认是不四舍五入的 0.125这样的就会直接变成0.12了
|
|
|
df.setMaximumFractionDigits(5);
|
|
|
datas.put(key,format(value));
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
}
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取考勤变更流程数据
|
|
|
* @param params
|
|
|
* @param user
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Object> getFlowProcessChangeData(Map<String,Object> params, User user){
|
|
|
Map<String,Object> datas = new HashMap<>();;
|
|
|
RecordSet rs = new RecordSet();
|
|
|
String sql = "";
|
|
|
String sqlWhere = " ";
|
|
|
try{
|
|
|
String minimumUnit = "";//单位类型
|
|
|
double proportion = 0.00;//换算关系
|
|
|
|
|
|
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
|
|
|
String fromDate = Util.null2String(jsonObj.get("fromDate"));
|
|
|
String toDate = Util.null2String(jsonObj.get("toDate"));
|
|
|
String typeselect =Util.null2String(jsonObj.get("typeselect"));
|
|
|
if(typeselect.length()==0)typeselect = "3";
|
|
|
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
|
|
|
if(typeselect.equals("1")){
|
|
|
fromDate = TimeUtil.getCurrentDateString();
|
|
|
toDate = TimeUtil.getCurrentDateString();
|
|
|
}else{
|
|
|
fromDate = TimeUtil.getDateByOption(typeselect,"0");
|
|
|
toDate = TimeUtil.getDateByOption(typeselect,"1");
|
|
|
}
|
|
|
}
|
|
|
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
|
|
|
String departmentId = Util.null2String(jsonObj.get("departmentId"));
|
|
|
String resourceId = Util.null2String(jsonObj.get("resourceId"));
|
|
|
String allLevel = Util.null2String(jsonObj.get("allLevel"));
|
|
|
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
|
|
|
String viewScope = Util.null2String(jsonObj.get("viewScope"));
|
|
|
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<>'' ");
|
|
|
}
|
|
|
|
|
|
sql = " select resourceid, durationrule, changetype,sum(duration) as val from hrmresource a, "+KqSplitFlowTypeEnum.PROCESSCHANGE.getTablename()+" b "+
|
|
|
" where a.id = b.resourceid and belongdate >='"+fromDate+"' and belongdate <='"+toDate+"' "+sqlWhere+
|
|
|
" group by resourceid, durationrule,changetype ";
|
|
|
rs.execute(sql);
|
|
|
while (rs.next()) {
|
|
|
String resourceid = rs.getString("resourceid");
|
|
|
int changetype = Util.getIntValue(rs.getString("changetype"));
|
|
|
|
|
|
String flowType = "";
|
|
|
if(KqSplitFlowTypeEnum.EVECTION.getFlowtype() == changetype){
|
|
|
flowType = "businessLeave_back";
|
|
|
proportion = Util.getDoubleValue(KQTravelRulesBiz.getHoursToDay());//换算关系
|
|
|
minimumUnit = KQTravelRulesBiz.getMinimumUnit();
|
|
|
}else if(KqSplitFlowTypeEnum.OUT.getFlowtype() == changetype){
|
|
|
flowType = "officialBusiness_back";
|
|
|
minimumUnit = KQExitRulesBiz.getMinimumUnit();
|
|
|
proportion = Util.getDoubleValue(KQExitRulesBiz.getHoursToDay());//换算关系
|
|
|
}
|
|
|
double value = rs.getDouble("val")<0?0:rs.getDouble("val");
|
|
|
String durationrule = rs.getString("durationrule");
|
|
|
|
|
|
if(KQUnitBiz.isLeaveHour(minimumUnit)){//按小时
|
|
|
if(!KQUnitBiz.isLeaveHour(durationrule)){
|
|
|
if(proportion>0) value = value*proportion;
|
|
|
}
|
|
|
}else{//按天
|
|
|
if(KQUnitBiz.isLeaveHour(durationrule)){
|
|
|
if(proportion>0) value = value/proportion;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
String key = resourceid+"|"+flowType;
|
|
|
if(datas.containsKey(key)){
|
|
|
value += Util.getDoubleValue(Util.null2String(datas.get(key)));
|
|
|
}
|
|
|
//df.format 默认是不四舍五入的 0.125这样的就会直接变成0.12了
|
|
|
df.setMaximumFractionDigits(5);
|
|
|
datas.put(key, format(value));
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
}
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取每日请假数据
|
|
|
* @param params
|
|
|
* @param user
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Object> getDailyFlowLeaveData(Map<String,Object> params, User user){
|
|
|
Map<String,Object> datas = new HashMap<>();;
|
|
|
RecordSet rs = new RecordSet();
|
|
|
String sql = "";
|
|
|
String sqlWhere = " ";
|
|
|
try{
|
|
|
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
|
|
|
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
|
|
|
String fromDate = Util.null2String(jsonObj.get("fromDate"));
|
|
|
String toDate = Util.null2String(jsonObj.get("toDate"));
|
|
|
String typeselect =Util.null2String(jsonObj.get("typeselect"));
|
|
|
if(typeselect.length()==0)typeselect = "3";
|
|
|
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
|
|
|
if(typeselect.equals("1")){
|
|
|
fromDate = TimeUtil.getCurrentDateString();
|
|
|
toDate = TimeUtil.getCurrentDateString();
|
|
|
}else{
|
|
|
fromDate = TimeUtil.getDateByOption(typeselect,"0");
|
|
|
toDate = TimeUtil.getDateByOption(typeselect,"1");
|
|
|
}
|
|
|
}
|
|
|
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
|
|
|
String departmentId = Util.null2String(jsonObj.get("departmentId"));
|
|
|
String resourceId = Util.null2String(jsonObj.get("resourceId"));
|
|
|
String allLevel = Util.null2String(jsonObj.get("allLevel"));
|
|
|
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
|
|
|
String viewScope = Util.null2String(jsonObj.get("viewScope"));
|
|
|
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<>'' ");
|
|
|
}
|
|
|
|
|
|
sql = " select resourceid, newleavetype, durationrule, sum(duration) as val,belongdate from hrmresource a, "+KqSplitFlowTypeEnum.LEAVE.getTablename()+" b "+
|
|
|
" where a.id = b.resourceid and belongdate >='"+fromDate+"' and belongdate <='"+toDate+"' " +sqlWhere +
|
|
|
" group by resourceid, newleavetype, durationrule,belongdate ";
|
|
|
rs.execute(sql);
|
|
|
while (rs.next()) {
|
|
|
String resourceid = rs.getString("resourceid");
|
|
|
String belongdate = rs.getString("belongdate");
|
|
|
String newleavetype = rs.getString("newleavetype");
|
|
|
String durationrule = rs.getString("durationrule");
|
|
|
double value = rs.getDouble("val")<0?0:rs.getDouble("val");
|
|
|
|
|
|
double proportion = Util.getDoubleValue(kqLeaveRulesComInfo.getProportion(newleavetype));
|
|
|
if(KQUnitBiz.isLeaveHour(newleavetype,kqLeaveRulesComInfo)){//按小时
|
|
|
if(!KQUnitBiz.isLeaveHour(durationrule)){
|
|
|
if(proportion>0) value = value*proportion;
|
|
|
}
|
|
|
}else{//按天
|
|
|
if(KQUnitBiz.isLeaveHour(durationrule)){
|
|
|
if(proportion>0) value = value/proportion;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
String key = resourceid+"|"+belongdate+"|leaveType_"+newleavetype;
|
|
|
if(datas.containsKey(key)){
|
|
|
value += Util.getDoubleValue(Util.null2String(datas.get(key)));
|
|
|
}
|
|
|
//df.format 默认是不四舍五入的 0.125这样的就会直接变成0.12了
|
|
|
df.setMaximumFractionDigits(5);
|
|
|
datas.put(key,format(value));
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
}
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取每日销假数据
|
|
|
* @param params
|
|
|
* @param user
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Object> getDailyFlowLeaveBackData(Map<String,Object> params, User user){
|
|
|
Map<String,Object> datas = new HashMap<>();;
|
|
|
RecordSet rs = new RecordSet();
|
|
|
String sql = "";
|
|
|
String sqlWhere = " ";
|
|
|
try{
|
|
|
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
|
|
|
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
|
|
|
String fromDate = Util.null2String(jsonObj.get("fromDate"));
|
|
|
String toDate = Util.null2String(jsonObj.get("toDate"));
|
|
|
String typeselect =Util.null2String(jsonObj.get("typeselect"));
|
|
|
if(typeselect.length()==0)typeselect = "3";
|
|
|
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
|
|
|
if(typeselect.equals("1")){
|
|
|
fromDate = TimeUtil.getCurrentDateString();
|
|
|
toDate = TimeUtil.getCurrentDateString();
|
|
|
}else{
|
|
|
fromDate = TimeUtil.getDateByOption(typeselect,"0");
|
|
|
toDate = TimeUtil.getDateByOption(typeselect,"1");
|
|
|
}
|
|
|
}
|
|
|
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
|
|
|
String departmentId = Util.null2String(jsonObj.get("departmentId"));
|
|
|
String resourceId = Util.null2String(jsonObj.get("resourceId"));
|
|
|
String allLevel = Util.null2String(jsonObj.get("allLevel"));
|
|
|
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
|
|
|
String viewScope = Util.null2String(jsonObj.get("viewScope"));
|
|
|
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<>'' ");
|
|
|
}
|
|
|
|
|
|
sql = " select resourceid, newleavetype, durationrule, sum(duration) as val,belongdate from hrmresource a, "+KqSplitFlowTypeEnum.LEAVEBACK.getTablename()+" b "+
|
|
|
" where a.id = b.resourceid and belongdate >='"+fromDate+"' and belongdate <='"+toDate+"' " +sqlWhere +
|
|
|
" group by resourceid, newleavetype, durationrule,belongdate ";
|
|
|
rs.execute(sql);
|
|
|
while (rs.next()) {
|
|
|
String resourceid = rs.getString("resourceid");
|
|
|
String belongdate = rs.getString("belongdate");
|
|
|
String newleavetype = rs.getString("newleavetype");
|
|
|
String durationrule = rs.getString("durationrule");
|
|
|
double value = rs.getDouble("val")<0?0:rs.getDouble("val");
|
|
|
|
|
|
double proportion = Util.getDoubleValue(kqLeaveRulesComInfo.getProportion(newleavetype));
|
|
|
if(KQUnitBiz.isLeaveHour(newleavetype,kqLeaveRulesComInfo)){//按小时
|
|
|
if(!KQUnitBiz.isLeaveHour(durationrule)){
|
|
|
if(proportion>0) value = value*proportion;
|
|
|
}
|
|
|
}else{//按天
|
|
|
if(KQUnitBiz.isLeaveHour(durationrule)){
|
|
|
if(proportion>0) value = value/proportion;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
String key = resourceid+"|"+belongdate+"|leavebackType_"+newleavetype;
|
|
|
if(datas.containsKey(key)){
|
|
|
value += Util.getDoubleValue(Util.null2String(datas.get(key)));
|
|
|
}
|
|
|
//df.format 默认是不四舍五入的 0.125这样的就会直接变成0.12了
|
|
|
df.setMaximumFractionDigits(5);
|
|
|
datas.put(key,format(value));
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
}
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取餐补数据
|
|
|
* @param params
|
|
|
* @param user
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Object> getDailyMealAllowanceData(Map<String,Object> params, User user){
|
|
|
Map<String,Object> datas = new HashMap<>();;
|
|
|
RecordSet rs = new RecordSet();
|
|
|
String sql = "";
|
|
|
String sqlWhere = " ";
|
|
|
try{
|
|
|
bb.writeLog("getDailyMealAllowanceData start");
|
|
|
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
|
|
|
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
|
|
|
String fromDate = Util.null2String(jsonObj.get("fromDate"));
|
|
|
String toDate = Util.null2String(jsonObj.get("toDate"));
|
|
|
String typeselect =Util.null2String(jsonObj.get("typeselect"));
|
|
|
if(typeselect.length()==0)typeselect = "3";
|
|
|
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
|
|
|
if(typeselect.equals("1")){
|
|
|
fromDate = TimeUtil.getCurrentDateString();
|
|
|
toDate = TimeUtil.getCurrentDateString();
|
|
|
}else{
|
|
|
fromDate = TimeUtil.getDateByOption(typeselect,"0");
|
|
|
toDate = TimeUtil.getDateByOption(typeselect,"1");
|
|
|
}
|
|
|
}
|
|
|
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
|
|
|
String departmentId = Util.null2String(jsonObj.get("departmentId"));
|
|
|
String resourceId = Util.null2String(jsonObj.get("resourceId"));
|
|
|
String allLevel = Util.null2String(jsonObj.get("allLevel"));
|
|
|
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
|
|
|
String viewScope = Util.null2String(jsonObj.get("viewScope"));
|
|
|
if(subCompanyId.length()>0){
|
|
|
sqlWhere +=" and b.subcompanyid1 in("+subCompanyId+") ";
|
|
|
}
|
|
|
|
|
|
if(departmentId.length()>0){
|
|
|
sqlWhere +=" and b.departmentid in("+departmentId+") ";
|
|
|
}
|
|
|
|
|
|
if(resourceId.length()>0){
|
|
|
sqlWhere +=" and b.id in("+resourceId+") ";
|
|
|
}
|
|
|
|
|
|
if(viewScope.equals("4")){//我的下属
|
|
|
if(allLevel.equals("1")){//所有下属
|
|
|
sqlWhere+=" and b.managerstr like '%,"+user.getUID()+",%'";
|
|
|
}else{
|
|
|
sqlWhere+=" and b.managerid="+user.getUID();//直接下属
|
|
|
}
|
|
|
}
|
|
|
if (!"1".equals(isNoAccount)) {
|
|
|
sqlWhere += " and b.loginid is not null "+(rs.getDBType().equals("oracle")?"":" and b.loginid<>'' ");
|
|
|
}
|
|
|
|
|
|
//首先获取出差公出流程信息
|
|
|
Map<String, Object> evectionMap = new HashMap<>();
|
|
|
String evectionTableName = Util.null2String(bb.getPropValue("project_hostar","evectionTableName"));
|
|
|
sql = " select c.resourceid, c.belongdate, c.longitude, c.latitude from ( " +
|
|
|
" select a.belongdate, b.id as resourceid, b.subcompanyid1, b.departmentid, b.managerstr, b.managerid, b.loginid, c.jd as longitude, c.wd as latitude from kq_flow_split_evection a " +
|
|
|
" left join hrmresource b " +
|
|
|
" on b.id = a.resourceid " +
|
|
|
" left join " + evectionTableName + " c " +
|
|
|
" on c.requestid = a.requestid " +
|
|
|
" where a.belongdate >='"+fromDate+"' and a.belongdate <='"+toDate+"' " + sqlWhere +
|
|
|
" ) c " +
|
|
|
" where 1=1 " ;
|
|
|
bb.writeLog("sql: " + sql);
|
|
|
|
|
|
rs.execute(sql);
|
|
|
while (rs.next()) {
|
|
|
String resourceid = Util.null2String(rs.getString("resourceid"));
|
|
|
String belongdate = Util.null2String(rs.getString("belongdate"));
|
|
|
String longitude = Util.null2String(rs.getString("longitude"));
|
|
|
String latitude = Util.null2String(rs.getString("latitude"));
|
|
|
evectionMap.put( belongdate + "|" + resourceid, longitude + "|" + latitude );
|
|
|
}
|
|
|
bb.writeLog("evectionMap: " + evectionMap);
|
|
|
|
|
|
//获取外勤打卡数据
|
|
|
KQWorkTime kqWorkTime = new KQWorkTime();
|
|
|
kqWorkTime.setIsFormat(true);
|
|
|
Map< String, Map<String, Object>> lsCheckInfo = new HashMap<>();
|
|
|
for ( String key: evectionMap.keySet()) {
|
|
|
String[] split = key.split("\\|");
|
|
|
String kqDate = split[0];
|
|
|
String userId = split[1];
|
|
|
WorkTimeEntity workTime = kqWorkTime.getWorkTime(userId, kqDate);
|
|
|
List<TimeScopeEntity> lsSignTime = new ArrayList<>();
|
|
|
List<TimeScopeEntity> lsWorkTime = new ArrayList<>();
|
|
|
if (workTime != null) {
|
|
|
lsSignTime = workTime.getSignTime();//允许打卡时间
|
|
|
lsWorkTime = workTime.getWorkTime();//工作时间
|
|
|
}
|
|
|
|
|
|
//只支持一天一次上下班
|
|
|
if (lsWorkTime != null && lsWorkTime.size()==1 ) {
|
|
|
TimeScopeEntity signTimeScope = lsSignTime.get(0);
|
|
|
TimeScopeEntity workTimeScope = lsWorkTime.get(0);
|
|
|
List<Map<String, Object>> legWorkInfos = new ArrayList<>();
|
|
|
//获取允许打卡时间
|
|
|
String signBeginTime = signTimeScope.getBeginTime();
|
|
|
// bb.writeLog("signBeginTime: " + signBeginTime);
|
|
|
if (StringUtils.isNotBlank(signBeginTime)) {
|
|
|
signBeginTime = signBeginTime + ":00";
|
|
|
}
|
|
|
// bb.writeLog("signBeginTime: " + signBeginTime);
|
|
|
//获取上班时间
|
|
|
String workBeginTime = workTimeScope.getBeginTime();
|
|
|
// bb.writeLog("workBeginTime: " + workBeginTime);
|
|
|
if (StringUtils.isNotBlank(workBeginTime)) {
|
|
|
workBeginTime = workBeginTime + ":00";
|
|
|
}
|
|
|
// bb.writeLog("workBeginTime: " + workBeginTime);
|
|
|
|
|
|
String acqLegWorkSignSql = "select operate_time, longitude, latitude from mobile_sign where operater = ? and operate_date = '" + kqDate + "' and operate_time >='" + signBeginTime + "' order by operate_time asc ";
|
|
|
// bb.writeLog("acqLegWorkSignSql: " + acqLegWorkSignSql);
|
|
|
// bb.writeLog("userId: " + userId);
|
|
|
rs.executeQuery(acqLegWorkSignSql, userId);
|
|
|
while ( rs.next()) {
|
|
|
String operateTime = Util.null2String(rs.getString("operate_time"));
|
|
|
String longitude = Util.null2String(rs.getString("longitude"));
|
|
|
String latitude = Util.null2String(rs.getString("latitude"));
|
|
|
if ( StringUtils.isNotBlank(operateTime) && StringUtils.isNotBlank(longitude) && StringUtils.isNotBlank(latitude) ) {
|
|
|
Map<String, Object> temp = new HashMap<>();
|
|
|
temp.put("operateTime", operateTime);
|
|
|
temp.put("longitude", longitude);
|
|
|
temp.put("latitude", latitude);
|
|
|
legWorkInfos.add(temp);
|
|
|
}
|
|
|
}
|
|
|
bb.writeLog("legWorkInfos: " + legWorkInfos);
|
|
|
|
|
|
if (legWorkInfos != null && legWorkInfos.size() > 0 ) {
|
|
|
String tempSignIn = "";
|
|
|
String tempSignInLatitude = "";
|
|
|
String tempSignInLongitude = "";
|
|
|
String tempSignOutLatitude = "";
|
|
|
String tempSignOutLongitude = "";
|
|
|
String tempSignOut = "";
|
|
|
Map<String, Object> checkInfo = new HashMap<>();
|
|
|
if ( legWorkInfos.size() == 1) {//只有一笔外勤卡直接算上班
|
|
|
Map<String, Object> temp = legWorkInfos.get(0);
|
|
|
String operateTime = Util.null2String(temp.get("operateTime"));
|
|
|
String longitude = Util.null2String(temp.get("longitude"));
|
|
|
String latitude = Util.null2String(temp.get("latitude"));
|
|
|
checkInfo.put("signDate", kqDate);//签到签退日期
|
|
|
checkInfo.put("signInTime", operateTime);//签到时间
|
|
|
checkInfo.put("signInLatitude", latitude);//签到纬度
|
|
|
checkInfo.put("signInLongitude", longitude);//签到经度
|
|
|
lsCheckInfo.put(userId + "|" + kqDate, checkInfo);
|
|
|
|
|
|
} else {
|
|
|
for ( Map<String, Object> temp : legWorkInfos) {
|
|
|
String operateTime = Util.null2String(temp.get("operateTime"));
|
|
|
String longitude = Util.null2String(temp.get("longitude"));
|
|
|
String latitude = Util.null2String(temp.get("latitude"));
|
|
|
if (operateTime.compareTo(workBeginTime) < 0) {//获取上班时间点之前最早的一笔卡
|
|
|
if (StringUtils.isBlank(tempSignIn)) {
|
|
|
tempSignIn = operateTime;
|
|
|
tempSignInLatitude = latitude;
|
|
|
tempSignInLongitude = longitude;
|
|
|
} else {
|
|
|
if ( operateTime.compareTo(tempSignIn) < 0 ) {
|
|
|
tempSignIn = operateTime;
|
|
|
tempSignInLatitude = latitude;
|
|
|
tempSignInLongitude = longitude;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if ( operateTime.compareTo(workBeginTime) > 0) {//下班卡取最晚的一笔
|
|
|
if (StringUtils.isBlank(tempSignIn)) {
|
|
|
tempSignOut = operateTime;
|
|
|
tempSignOutLatitude = latitude;
|
|
|
tempSignOutLongitude = longitude;
|
|
|
} else {
|
|
|
if ( operateTime.compareTo(tempSignOut) > 0 ) {
|
|
|
tempSignOut = operateTime;
|
|
|
tempSignOutLatitude = latitude;
|
|
|
tempSignOutLongitude = longitude;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
checkInfo.put("signDate", kqDate);//签到签退日期
|
|
|
checkInfo.put("signInTime", tempSignIn);//签到时间
|
|
|
checkInfo.put("signInLatitude", tempSignInLatitude);//签到纬度
|
|
|
checkInfo.put("signInLongitude", tempSignInLongitude);//签到经度
|
|
|
checkInfo.put("signOutTime", tempSignOut);//签退时间
|
|
|
checkInfo.put("signOutLatitude", tempSignOutLatitude);//签退纬度
|
|
|
checkInfo.put("signOutLongitude", tempSignOutLongitude);//签退经度
|
|
|
lsCheckInfo.put(userId + "|" + kqDate, checkInfo);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
HostarUtil hostarUtil = new HostarUtil();
|
|
|
//获取经纬度半径
|
|
|
Double radius = 0.00;
|
|
|
String acqRadiusSql = "select radius from uf_leWorkRadius where (isDelete is null or isDelete = 0 )";
|
|
|
bb.writeLog("acqRadiusSql: " + acqRadiusSql);
|
|
|
rs.executeQuery(acqRadiusSql);
|
|
|
while (rs.next()) {
|
|
|
radius = Util.getDoubleValue(Util.null2String(rs.getString("radius")));
|
|
|
}
|
|
|
bb.writeLog("radius: " + radius);
|
|
|
|
|
|
String MealAlloTableName = Util.null2String(bb.getPropValue("project_hostar", "MealAllowanceTableName"));
|
|
|
bb.writeLog("MealAlloTableName: " + MealAlloTableName);
|
|
|
|
|
|
if (StringUtils.isNotBlank(MealAlloTableName)) {
|
|
|
//获取餐补判断时间
|
|
|
List<Map<String, String>> MealMap = new ArrayList<>();
|
|
|
String acqTimeSql = "select startTime, endTime from " + MealAlloTableName + " where (isDelete is null or isDelete = 0)";
|
|
|
bb.writeLog("acqTimeSql: " + acqTimeSql);
|
|
|
rs.executeQuery(acqTimeSql);
|
|
|
while (rs.next()) {
|
|
|
String startTime = Util.null2String(rs.getString("startTime"));
|
|
|
String endTime = Util.null2String(rs.getString("endTime"));
|
|
|
Map<String, String> temp = new HashMap<>();
|
|
|
temp.put("startTime",startTime);
|
|
|
temp.put("endTime",endTime);
|
|
|
MealMap.add(temp);
|
|
|
}
|
|
|
bb.writeLog("MealMap: " + MealMap);
|
|
|
|
|
|
//根据外勤打卡数据计算餐补数据
|
|
|
for (String key: lsCheckInfo.keySet()) {
|
|
|
// bb.writeLog("key: " + key);
|
|
|
String[] split = key.split("\\|");
|
|
|
// bb.writeLog("split: " + split);
|
|
|
String userId = split[0];
|
|
|
// bb.writeLog("userId: " + userId);
|
|
|
String kqDate = split[1];
|
|
|
// bb.writeLog("kqDate: " + kqDate);
|
|
|
Map<String, Object> temp = lsCheckInfo.get(key);
|
|
|
String signInTime = Util.null2String(temp.get("signInTime"));
|
|
|
String signOutTime = Util.null2String(temp.get("signOutTime"));
|
|
|
Double signInLatitude = Util.getDoubleValue(Util.null2String(temp.get("signInLatitude")));
|
|
|
Double signInLongitude = Util.getDoubleValue(Util.null2String(temp.get("signInLongitude")));
|
|
|
Double signOutLatitude = Util.getDoubleValue(Util.null2String(temp.get("signOutLatitude")));
|
|
|
Double signOutLongitude = Util.getDoubleValue(Util.null2String(temp.get("signOutLongitude")));
|
|
|
|
|
|
if (StringUtils.isNotBlank(signInTime) && StringUtils.isNotBlank(signOutTime) ) {
|
|
|
String lonAndLat = Util.null2String(evectionMap.get(kqDate + "|" + userId));
|
|
|
// bb.writeLog("lonAndLat: " + lonAndLat);
|
|
|
String[] split1 = lonAndLat.split("\\|");
|
|
|
Double longitude = Util.getDoubleValue(Util.null2String(split1[0]));
|
|
|
Double latitude = Util.getDoubleValue(Util.null2String(split1[1]));
|
|
|
//判断经纬度是否符合标准
|
|
|
Double distanceIn = hostarUtil.calculateDistance(latitude, longitude, signInLatitude, signInLongitude);//上班
|
|
|
// bb.writeLog("distanceIn: " + distanceIn);
|
|
|
Double distanceOut = hostarUtil.calculateDistance(latitude, longitude, signOutLatitude, signOutLongitude);//下班
|
|
|
// bb.writeLog("distanceOut: " + distanceOut);
|
|
|
if ( distanceIn<=radius && distanceOut<=radius) {
|
|
|
for (Map<String, String> me: MealMap) {
|
|
|
String startTime = me.get("startTime");
|
|
|
// bb.writeLog("startTime: " + startTime);
|
|
|
|
|
|
String endTime = me.get("endTime");
|
|
|
// bb.writeLog("endTime: " + endTime);
|
|
|
|
|
|
if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) {
|
|
|
startTime = startTime + ":00";
|
|
|
endTime = endTime + ":00";
|
|
|
}
|
|
|
// bb.writeLog("signInTime: " + signInTime);
|
|
|
// bb.writeLog("signOutTime: " + signOutTime);
|
|
|
if ( (signInTime.compareTo(startTime) <= 0) && (signOutTime.compareTo(endTime) >= 0) ) {
|
|
|
int t = Util.getIntValue(Util.null2String(datas.get("DailyMealAllow|" + resourceId + "|" + kqDate)));
|
|
|
if (t <= 0) {
|
|
|
datas.put("DailyMealAllow|" + resourceId + "|" + kqDate, 1);
|
|
|
} else {
|
|
|
t = t + 1;
|
|
|
datas.put("DailyMealAllow|" + resourceId + "|" + kqDate, t);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
}
|
|
|
|
|
|
bb.writeLog("datas: " + datas);
|
|
|
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取鸿仁驻点餐补数据
|
|
|
* @param params
|
|
|
* @param user
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Object> getDailyOtherStatAllowanceData(Map<String,Object> params, User user){
|
|
|
Map<String,Object> datas = new HashMap<>();;
|
|
|
RecordSet rs = new RecordSet();
|
|
|
String sql = "";
|
|
|
String sqlWhere = " ";
|
|
|
try{
|
|
|
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
|
|
|
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
|
|
|
String fromDate = Util.null2String(jsonObj.get("fromDate"));
|
|
|
String toDate = Util.null2String(jsonObj.get("toDate"));
|
|
|
String typeselect =Util.null2String(jsonObj.get("typeselect"));
|
|
|
if(typeselect.length()==0)typeselect = "3";
|
|
|
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
|
|
|
if(typeselect.equals("1")){
|
|
|
fromDate = TimeUtil.getCurrentDateString();
|
|
|
toDate = TimeUtil.getCurrentDateString();
|
|
|
}else{
|
|
|
fromDate = TimeUtil.getDateByOption(typeselect,"0");
|
|
|
toDate = TimeUtil.getDateByOption(typeselect,"1");
|
|
|
}
|
|
|
}
|
|
|
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
|
|
|
String departmentId = Util.null2String(jsonObj.get("departmentId"));
|
|
|
String resourceId = Util.null2String(jsonObj.get("resourceId"));
|
|
|
String allLevel = Util.null2String(jsonObj.get("allLevel"));
|
|
|
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
|
|
|
String viewScope = Util.null2String(jsonObj.get("viewScope"));
|
|
|
if(subCompanyId.length()>0){
|
|
|
sqlWhere +=" and a.subcompanyid1 in("+subCompanyId+") ";
|
|
|
}
|
|
|
|
|
|
if(departmentId.length()>0){
|
|
|
sqlWhere +=" and a.departmentid in("+departmentId+") ";
|
|
|
}
|
|
|
|
|
|
if(resourceId.length()>0){
|
|
|
sqlWhere +=" and a.id in("+resourceId+") ";
|
|
|
}
|
|
|
|
|
|
if(viewScope.equals("4")){//我的下属
|
|
|
if(allLevel.equals("1")){//所有下属
|
|
|
sqlWhere+=" and a.managerstr like '%,"+user.getUID()+",%'";
|
|
|
}else{
|
|
|
sqlWhere+=" and a.managerid="+user.getUID();//直接下属
|
|
|
}
|
|
|
}
|
|
|
if (!"1".equals(isNoAccount)) {
|
|
|
sqlWhere += " and a.loginid is not null "+(rs.getDBType().equals("oracle")?"":" and a.loginid<>'' ");
|
|
|
}
|
|
|
|
|
|
//获取加班时长
|
|
|
Map<String, Object> dailyFlowOverTimeData = getDailyFlowOverTimeDataAllowance(params, user);
|
|
|
bb.writeLog("dailyFlowOverTimeData: " + dailyFlowOverTimeData);
|
|
|
|
|
|
String otherstatsub = Util.null2String(bb.getPropValue("project_hostar", "otherstatsubcompany"));
|
|
|
if (StringUtils.isNotBlank(otherstatsub)) {
|
|
|
//查询该分部下的人员
|
|
|
List<String> resIds = new ArrayList<>();
|
|
|
sqlWhere += " and a.subcompanyid1 in (" + otherstatsub + ") ";
|
|
|
String acqResSql = "select a.id from hrmresource a where a.status in (0,1,2,3) " + sqlWhere;
|
|
|
bb.writeLog("acqResSql: " + acqResSql);
|
|
|
|
|
|
rs.executeQuery(acqResSql);
|
|
|
while (rs.next()) {
|
|
|
String id = Util.null2String(rs.getString("id"));
|
|
|
if (StringUtils.isNotBlank(id)) {
|
|
|
resIds.add(id);
|
|
|
}
|
|
|
}
|
|
|
bb.writeLog("resIds: " + resIds);
|
|
|
|
|
|
if (resIds != null && resIds.size() > 0 && StringUtils.isNotBlank(fromDate) && StringUtils.isNotBlank(toDate)) {
|
|
|
HostarUtil houtil = new HostarUtil();
|
|
|
List<String> allDates = houtil.getAllDates(fromDate, toDate);
|
|
|
bb.writeLog("allDates: " + allDates);
|
|
|
|
|
|
//先获取到出勤时长
|
|
|
Map<String, Double> attendanceMinsMap = new HashMap<>();
|
|
|
String acqAttenSql = " select resourceid, attendancemins, kqdate from kq_format_total where resourceid in (" + String.join(",", resIds) + ") and kqdate >='" + fromDate + "' and kqdate <='" + toDate + "'";
|
|
|
rs.executeQuery(acqAttenSql);
|
|
|
while (rs.next()) {
|
|
|
String resourceid = Util.null2String(rs.getString("resourceid"));
|
|
|
Double attendancemins = Util.getDoubleValue(Util.null2String(rs.getString("attendancemins")));
|
|
|
String kqdate = Util.null2String(rs.getString("kqdate"));
|
|
|
if (attendancemins >= 0.00) {
|
|
|
attendanceMinsMap.put(resourceid + "|" + kqdate, attendancemins);
|
|
|
}
|
|
|
}
|
|
|
List<String> removeRes = new ArrayList<>();
|
|
|
String acqNoOtherStatAllResSql = "select resourceid from uf_NoOtherStatAllRe where isdelete is null or isdelete = 0 ";
|
|
|
rs.executeQuery(acqNoOtherStatAllResSql);
|
|
|
while (rs.next()){
|
|
|
String resourceid = Util.null2String(rs.getString("resourceid"));
|
|
|
if (StringUtils.isNotBlank(resourceid) ) {
|
|
|
removeRes.add(resourceid);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if ( removeRes != null && removeRes.size() > 0 ) {
|
|
|
resIds.removeIf(removeRes::contains);
|
|
|
}
|
|
|
|
|
|
for (String date : allDates) {
|
|
|
for (String res : resIds) {
|
|
|
//获取考勤打卡
|
|
|
Map<String, Object> otherinfo = new HashMap<>();//存一些用得到的信息
|
|
|
String uuid = UUID.randomUUID().toString();
|
|
|
KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo();
|
|
|
ArrayList<String> hostIps = InitServer.getRealIp();//获取IP
|
|
|
boolean oneSign = false;//一天一段出勤时间段
|
|
|
List<TimeScopeEntity> lsSignTime = new ArrayList<>();
|
|
|
List<TimeScopeEntity> lsWorkTime = new ArrayList<>();
|
|
|
// List<TimeScopeEntity> lsRestTime = new ArrayList<>();
|
|
|
KQWorkTime kqWorkTime = new KQWorkTime();
|
|
|
kqWorkTime.setIsFormat(true);
|
|
|
WorkTimeEntity workTime = kqWorkTime.getWorkTime(res, date);
|
|
|
String preDate = DateUtil.addDate(date, -1);//上一天日期
|
|
|
String nextDate = DateUtil.addDate(date, 1);//下一天日期
|
|
|
if (workTime != null) {
|
|
|
lsSignTime = workTime.getSignTime();//允许打卡时间
|
|
|
lsWorkTime = workTime.getWorkTime();//工作时间
|
|
|
// lsRestTime = workTime.getRestTime();//休息时段时间
|
|
|
oneSign = lsWorkTime != null && lsWorkTime.size() == 1;
|
|
|
}
|
|
|
int shiftCount = lsWorkTime == null ? 0 : lsWorkTime.size();
|
|
|
int shiftI = 0;
|
|
|
List<Object> lsCheckInfo = new ArrayList<>();
|
|
|
for (int i = 0; lsWorkTime != null && i < lsWorkTime.size(); i++) {
|
|
|
shiftI = i;
|
|
|
TimeScopeEntity signTimeScope = lsSignTime.get(i);
|
|
|
TimeScopeEntity workTimeScope = lsWorkTime.get(i);
|
|
|
Map<String, String> shifRuleMap = Maps.newHashMap();
|
|
|
|
|
|
String workBeginTime = Util.null2String(workTimeScope.getBeginTime());
|
|
|
int workBeginIdx = kqTimesArrayComInfo.getArrayindexByTimes(workBeginTime);
|
|
|
String workEndTime = Util.null2String(workTimeScope.getEndTime());
|
|
|
int workEndIdx = kqTimesArrayComInfo.getArrayindexByTimes(workEndTime);
|
|
|
boolean workEndTimeAcross = workTimeScope.getEndTimeAcross();
|
|
|
|
|
|
if (oneSign) {
|
|
|
//个性化设置只支持一天一次上下班
|
|
|
ShiftInfoBean shiftInfoBean = new ShiftInfoBean();
|
|
|
shiftInfoBean.setSplitDate(date);
|
|
|
shiftInfoBean.setShiftRuleMap(workTime.getShiftRuleInfo());
|
|
|
shiftInfoBean.setSignTime(lsSignTime);
|
|
|
shiftInfoBean.setWorkTime(lsWorkTime);
|
|
|
List<String> logList = Lists.newArrayList();
|
|
|
KQShiftRuleInfoBiz.getShiftRuleInfo(shiftInfoBean, res, shifRuleMap, logList);
|
|
|
if (!shifRuleMap.isEmpty()) {
|
|
|
if (!logList.isEmpty()) {
|
|
|
otherinfo.put("logList", logList);
|
|
|
}
|
|
|
otherinfo.put("shiftRule", shifRuleMap);
|
|
|
if (shifRuleMap.containsKey("shift_beginworktime")) {
|
|
|
String shift_beginworktime = Util.null2String(shifRuleMap.get("shift_beginworktime"));
|
|
|
if (shift_beginworktime.length() > 0) {
|
|
|
workBeginTime = Util.null2String(shift_beginworktime);
|
|
|
workBeginIdx = kqTimesArrayComInfo.getArrayindexByTimes(workBeginTime);
|
|
|
workTimeScope.setBeginTime(workBeginTime);
|
|
|
workTimeScope.setBeginTimeAcross(workBeginIdx >= 1440 ? true : false);
|
|
|
}
|
|
|
}
|
|
|
if (shifRuleMap.containsKey("shift_endworktime")) {
|
|
|
String shift_endworktime = Util.null2String(shifRuleMap.get("shift_endworktime"));
|
|
|
if (shift_endworktime.length() > 0) {
|
|
|
workEndTime = Util.null2String(shift_endworktime);
|
|
|
workEndIdx = kqTimesArrayComInfo.getArrayindexByTimes(workEndTime);
|
|
|
workTimeScope.setEndTime(workEndTime);
|
|
|
workTimeScope.setEndTimeAcross(workEndIdx >= 1440 ? true : false);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
lsCheckInfo = new KQFormatSignData().getSignInfo(res, signTimeScope, workTimeScope, date, preDate, nextDate, kqTimesArrayComInfo, hostIps, uuid, shiftCount, shiftI);
|
|
|
}
|
|
|
List<String> signIdList = new ArrayList<>();
|
|
|
for (int i = 0; i < lsCheckInfo.size(); i++) {
|
|
|
Object o = lsCheckInfo.get(i);
|
|
|
if ( o != null && o != "") {
|
|
|
Map<String, Object> temp = (Map<String, Object>) o;
|
|
|
String signId = Util.null2String(temp.get("signId"));
|
|
|
if (StringUtils.isNotBlank(signId)) {
|
|
|
signIdList.add(signId);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
Integer signNumber = 0;
|
|
|
if (signIdList !=null && signIdList.size() > 0) {
|
|
|
String acqShowAddress = "select showaddress from hrmschedulesign where id in (" + String.join(",", signIdList) + ") ";
|
|
|
// bb.writeLog("acqShowAddress: " + acqShowAddress);
|
|
|
rs.executeQuery(acqShowAddress);
|
|
|
while (rs.next()) {
|
|
|
String showaddress = Util.null2String(rs.getString("showaddress"));
|
|
|
if ("鸿仕达".equals(showaddress) || "hostar".equalsIgnoreCase(showaddress)) {
|
|
|
signNumber = signNumber + 1;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (signNumber == 0) {
|
|
|
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|workingDayOvertime_4leave")));
|
|
|
workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
|
|
|
double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|restDayOvertime_4leave")));
|
|
|
restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave;
|
|
|
double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|holidayOvertime_4leave")));
|
|
|
holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave;
|
|
|
|
|
|
double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|workingDayOvertime_nonleave")));
|
|
|
workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
|
|
|
double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|restDayOvertime_nonleave")));
|
|
|
restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave;
|
|
|
double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|holidayOvertime_nonleave")));
|
|
|
holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
|
|
|
|
|
|
double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave +
|
|
|
workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave;
|
|
|
// bb.writeLog("-=-temp:" + temp);
|
|
|
Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + date)));
|
|
|
// bb.writeLog("-=-attendanceMins:" + attendanceMins);
|
|
|
double v = Math.round (((attendanceMins < 0.00) ? 0.00 : attendanceMins) + temp) / 60.00;
|
|
|
String value = "0";
|
|
|
if (v >= 4.00 && v < 9.00) {
|
|
|
value = "1";
|
|
|
} else if (v >= 9.00) {
|
|
|
value = "2";
|
|
|
}
|
|
|
|
|
|
// bb.writeLog("-=-value:" + value);
|
|
|
datas.put(res + "|" + "DailyOtherStatAllowance" + "|" + date, value);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
bb.writeLog("DailyOtherStatAllowance Exception: " + e);
|
|
|
}
|
|
|
bb.writeLog("DailyOtherStatAllowance datas: " + datas);
|
|
|
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取夜班餐补数据
|
|
|
* @param params
|
|
|
* @param user
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Object> getDailyNightShiftAllowanceData(Map<String,Object> params, User user){
|
|
|
Map<String,Object> datas = new HashMap<>();;
|
|
|
RecordSet rs = new RecordSet();
|
|
|
String sql = "";
|
|
|
String sqlWhere = " ";
|
|
|
try{
|
|
|
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
|
|
|
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
|
|
|
String fromDate = Util.null2String(jsonObj.get("fromDate"));
|
|
|
String toDate = Util.null2String(jsonObj.get("toDate"));
|
|
|
String typeselect =Util.null2String(jsonObj.get("typeselect"));
|
|
|
if(typeselect.length()==0)typeselect = "3";
|
|
|
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
|
|
|
if(typeselect.equals("1")){
|
|
|
fromDate = TimeUtil.getCurrentDateString();
|
|
|
toDate = TimeUtil.getCurrentDateString();
|
|
|
}else{
|
|
|
fromDate = TimeUtil.getDateByOption(typeselect,"0");
|
|
|
toDate = TimeUtil.getDateByOption(typeselect,"1");
|
|
|
}
|
|
|
}
|
|
|
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
|
|
|
String departmentId = Util.null2String(jsonObj.get("departmentId"));
|
|
|
String resourceId = Util.null2String(jsonObj.get("resourceId"));
|
|
|
String allLevel = Util.null2String(jsonObj.get("allLevel"));
|
|
|
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
|
|
|
String viewScope = Util.null2String(jsonObj.get("viewScope"));
|
|
|
if(subCompanyId.length()>0){
|
|
|
sqlWhere +=" and a.subcompanyid1 in("+subCompanyId+") ";
|
|
|
}
|
|
|
|
|
|
if(departmentId.length()>0){
|
|
|
sqlWhere +=" and a.departmentid in("+departmentId+") ";
|
|
|
}
|
|
|
|
|
|
if(resourceId.length()>0){
|
|
|
sqlWhere +=" and a.id in("+resourceId+") ";
|
|
|
}
|
|
|
|
|
|
if(viewScope.equals("4")){//我的下属
|
|
|
if(allLevel.equals("1")){//所有下属
|
|
|
sqlWhere+=" and a.managerstr like '%,"+user.getUID()+",%'";
|
|
|
}else{
|
|
|
sqlWhere+=" and a.managerid="+user.getUID();//直接下属
|
|
|
}
|
|
|
}
|
|
|
if (!"1".equals(isNoAccount)) {
|
|
|
sqlWhere += " and a.loginid is not null "+(rs.getDBType().equals("oracle")?"":" and a.loginid<>'' ");
|
|
|
}
|
|
|
|
|
|
//获取加班时长
|
|
|
Map<String, Object> dailyFlowOverTimeData = getDailyFlowOverTimeDataAllowance(params, user);
|
|
|
bb.writeLog("dailyFlowOverTimeData: " + dailyFlowOverTimeData);
|
|
|
|
|
|
//获取夜班班次
|
|
|
List<String> nightShiftList = new ArrayList<>();
|
|
|
String acqNightShiftSql = "select shift from uf_nightshiftmanage where isdelete is null or isdelete = 0";
|
|
|
rs.executeQuery(acqNightShiftSql);
|
|
|
while (rs.next()) {
|
|
|
String shift = Util.null2String(rs.getString("shift"));
|
|
|
if (StringUtils.isNotBlank(shift)) {
|
|
|
nightShiftList.add(shift);
|
|
|
}
|
|
|
}
|
|
|
if (nightShiftList != null & nightShiftList.size() > 0) {
|
|
|
String nightshiftsub = Util.null2String(bb.getPropValue("project_hostar", "nightshiftsubcompany"));
|
|
|
if (StringUtils.isNotBlank(nightshiftsub)) {
|
|
|
//查询该分部下的人员
|
|
|
List<String> resIds = new ArrayList<>();
|
|
|
sqlWhere += " and a.subcompanyid1 in ("+nightshiftsub+") ";
|
|
|
String acqResSql = "select a.id from hrmresource a where a.status in (0,1,2,3) " + sqlWhere;
|
|
|
bb.writeLog("acqResSql: " + acqResSql);
|
|
|
|
|
|
rs.executeQuery(acqResSql);
|
|
|
while (rs.next()) {
|
|
|
String id = Util.null2String(rs.getString("id"));
|
|
|
if (StringUtils.isNotBlank(id)) {
|
|
|
resIds.add(id);
|
|
|
}
|
|
|
}
|
|
|
bb.writeLog("resIds: " + resIds);
|
|
|
|
|
|
if ( resIds != null && resIds.size() > 0) {
|
|
|
HostarUtil houtil = new HostarUtil();
|
|
|
List<String> allDates = houtil.getAllDates(fromDate, toDate);
|
|
|
//先获取到出勤时长
|
|
|
Map<String, Double> attendanceMinsMap = new HashMap<>();
|
|
|
String acqAttenSql = " select resourceid, attendancemins, kqdate from kq_format_total where resourceid in (" + String.join(",",resIds) + ") and kqdate >='" + fromDate + "' and kqdate <='" + toDate + "'";
|
|
|
rs.executeQuery(acqAttenSql);
|
|
|
while (rs.next()) {
|
|
|
String resourceid = Util.null2String(rs.getString("resourceid"));
|
|
|
Double attendancemins = Util.getDoubleValue(Util.null2String(rs.getString("attendancemins")));
|
|
|
String kqdate = Util.null2String(rs.getString("kqdate"));
|
|
|
if (attendancemins >= 0.00 ) {
|
|
|
attendanceMinsMap.put(resourceid+"|"+kqdate, attendancemins);
|
|
|
}
|
|
|
}
|
|
|
KQWorkTime kqWorkTime = new KQWorkTime();
|
|
|
for (String res: resIds) {
|
|
|
for (String date : allDates) {
|
|
|
//获取当天班次
|
|
|
Map<String, Object> serialInfo = kqWorkTime.getSerialInfo(res, date, false);
|
|
|
if (serialInfo != null && serialInfo.size() > 0) {
|
|
|
int serialid = Util.getIntValue(Util.null2String(serialInfo.get(date)), 0);
|
|
|
if (serialid > 0) {
|
|
|
if ( !nightShiftList.contains(String.valueOf(serialid))) {
|
|
|
continue;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|workingDayOvertime_4leave")));
|
|
|
workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
|
|
|
double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|restDayOvertime_4leave")));
|
|
|
restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave;
|
|
|
double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|holidayOvertime_4leave")));
|
|
|
holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave;
|
|
|
|
|
|
double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|workingDayOvertime_nonleave")));
|
|
|
workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
|
|
|
double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|restDayOvertime_nonleave")));
|
|
|
restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave;
|
|
|
double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|holidayOvertime_nonleave")));
|
|
|
holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
|
|
|
|
|
|
double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave +
|
|
|
workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave;
|
|
|
// bb.writeLog("-=-temp:" + temp);
|
|
|
Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + date)));
|
|
|
// bb.writeLog("-=-attendanceMins:" + attendanceMins);
|
|
|
String value = String.valueOf(Math.floor( ((attendanceMins < 0.00 ? 0.00 : attendanceMins) + temp) / 300));
|
|
|
// bb.writeLog("-=-value:" + value);
|
|
|
datas.put(res + "|" + "DailyNightShiftAllowanceData" + "|" + date, value);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
bb.writeLog("夜班餐补计算失败,没有设置该餐补享受分部");
|
|
|
}
|
|
|
} else {
|
|
|
bb.writeLog("夜班餐补计算失败,没有设置夜班");
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
bb.writeLog("DailyNightShiftAllowanceData Exception: " + e);
|
|
|
}
|
|
|
bb.writeLog("DailyNightShiftAllowanceData datas: " + datas);
|
|
|
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取夜班补助数据
|
|
|
* @param params
|
|
|
* @param user
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Object> getDailyNightShiftSubsidyData(Map<String,Object> params, User user){
|
|
|
Map<String,Object> datas = new HashMap<>();;
|
|
|
RecordSet rs = new RecordSet();
|
|
|
String sql = "";
|
|
|
String sqlWhere = " ";
|
|
|
try{
|
|
|
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
|
|
|
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
|
|
|
String fromDate = Util.null2String(jsonObj.get("fromDate"));
|
|
|
String toDate = Util.null2String(jsonObj.get("toDate"));
|
|
|
String typeselect =Util.null2String(jsonObj.get("typeselect"));
|
|
|
if(typeselect.length()==0)typeselect = "3";
|
|
|
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
|
|
|
if(typeselect.equals("1")){
|
|
|
fromDate = TimeUtil.getCurrentDateString();
|
|
|
toDate = TimeUtil.getCurrentDateString();
|
|
|
}else{
|
|
|
fromDate = TimeUtil.getDateByOption(typeselect,"0");
|
|
|
toDate = TimeUtil.getDateByOption(typeselect,"1");
|
|
|
}
|
|
|
}
|
|
|
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
|
|
|
String departmentId = Util.null2String(jsonObj.get("departmentId"));
|
|
|
String resourceId = Util.null2String(jsonObj.get("resourceId"));
|
|
|
String allLevel = Util.null2String(jsonObj.get("allLevel"));
|
|
|
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
|
|
|
String viewScope = Util.null2String(jsonObj.get("viewScope"));
|
|
|
String subUserId = Util.null2String(params.get("subUserId"));
|
|
|
|
|
|
|
|
|
// if(subCompanyId.length()>0){
|
|
|
// sqlWhere +=" and a.subcompanyid1 in("+subCompanyId+") ";
|
|
|
// }
|
|
|
//
|
|
|
// if(departmentId.length()>0){
|
|
|
// sqlWhere +=" and a.departmentid in("+departmentId+") ";
|
|
|
// }
|
|
|
//
|
|
|
// if(resourceId.length()>0){
|
|
|
// sqlWhere +=" and a.id in("+resourceId+") ";
|
|
|
// }
|
|
|
//
|
|
|
// if(viewScope.equals("4")){//我的下属
|
|
|
// if(allLevel.equals("1")){//所有下属
|
|
|
// sqlWhere+=" and a.managerstr like '%,"+user.getUID()+",%'";
|
|
|
// }else{
|
|
|
// sqlWhere+=" and a.managerid="+user.getUID();//直接下属
|
|
|
// }
|
|
|
// }
|
|
|
// if (!"1".equals(isNoAccount)) {
|
|
|
// sqlWhere += " and a.loginid is not null "+(rs.getDBType().equals("oracle")?"":" and a.loginid<>'' ");
|
|
|
// }
|
|
|
|
|
|
//获取夜班班次
|
|
|
List<String> nightShiftList = new ArrayList<>();
|
|
|
String acqNightShiftSql = "select shift from uf_nightshiftmanage where isdelete is null or isdelete = 0";
|
|
|
rs.executeQuery(acqNightShiftSql);
|
|
|
while (rs.next()) {
|
|
|
String shift = Util.null2String(rs.getString("shift"));
|
|
|
if (StringUtils.isNotBlank(shift)) {
|
|
|
nightShiftList.add(shift);
|
|
|
}
|
|
|
}
|
|
|
if (nightShiftList != null & nightShiftList.size() > 0) {
|
|
|
|
|
|
HostarUtil houtil = new HostarUtil();
|
|
|
List<String> allDates = houtil.getAllDates(fromDate, toDate);
|
|
|
//先获取到出勤时长
|
|
|
Map<String, Double> attendanceMinsMap = new HashMap<>();
|
|
|
String acqAttenSql = " select resourceid, attendancemins, kqdate from kq_format_total where resourceid in (" + subUserId + ") and kqdate >='" + fromDate + "' and kqdate <='" + toDate + "'";
|
|
|
rs.executeQuery(acqAttenSql);
|
|
|
while (rs.next()) {
|
|
|
String resourceid = Util.null2String(rs.getString("resourceid"));
|
|
|
Double attendancemins = Util.getDoubleValue(Util.null2String(rs.getString("attendancemins")));
|
|
|
String kqdate = Util.null2String(rs.getString("kqdate"));
|
|
|
if (attendancemins >= 0.00 ) {
|
|
|
attendanceMinsMap.put(resourceid+"|"+kqdate, attendancemins);
|
|
|
}
|
|
|
}
|
|
|
KQWorkTime kqWorkTime = new KQWorkTime();
|
|
|
|
|
|
for (String date : allDates) {
|
|
|
//获取当天班次
|
|
|
Map<String, Object> serialInfo = kqWorkTime.getSerialInfo(subUserId, date, false);
|
|
|
if (serialInfo != null && serialInfo.size() > 0) {
|
|
|
int serialid = Util.getIntValue(Util.null2String(serialInfo.get(date)), 0);
|
|
|
if (serialid > 0) {
|
|
|
if ( !nightShiftList.contains(String.valueOf(serialid))) {
|
|
|
continue;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(subUserId + "|" + date)));
|
|
|
String value = (( attendanceMins / 60) >= 8.00 ) ? "1" : "0";
|
|
|
|
|
|
datas.put(subUserId + "|" + "DailyNightShiftSubsidyData" + "|" + date, value);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
bb.writeLog("DailyNightShiftSubsidyData Exception: " + e);
|
|
|
}
|
|
|
bb.writeLog("DailyNightShiftSubsidyData datas: " + datas);
|
|
|
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取驻点餐补数据
|
|
|
* @param params
|
|
|
* @param user
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Object> getDailyStatAllowanceData(Map<String,Object> params, User user){
|
|
|
Map<String,Object> datas = new HashMap<>();;
|
|
|
RecordSet rs = new RecordSet();
|
|
|
String sql = "";
|
|
|
String sqlWhere = " ";
|
|
|
try{
|
|
|
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
|
|
|
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
|
|
|
String fromDate = Util.null2String(jsonObj.get("fromDate"));
|
|
|
String toDate = Util.null2String(jsonObj.get("toDate"));
|
|
|
String typeselect =Util.null2String(jsonObj.get("typeselect"));
|
|
|
if(typeselect.length()==0)typeselect = "3";
|
|
|
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
|
|
|
if(typeselect.equals("1")){
|
|
|
fromDate = TimeUtil.getCurrentDateString();
|
|
|
toDate = TimeUtil.getCurrentDateString();
|
|
|
}else{
|
|
|
fromDate = TimeUtil.getDateByOption(typeselect,"0");
|
|
|
toDate = TimeUtil.getDateByOption(typeselect,"1");
|
|
|
}
|
|
|
}
|
|
|
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
|
|
|
String departmentId = Util.null2String(jsonObj.get("departmentId"));
|
|
|
String resourceId = Util.null2String(jsonObj.get("resourceId"));
|
|
|
String allLevel = Util.null2String(jsonObj.get("allLevel"));
|
|
|
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
|
|
|
String viewScope = Util.null2String(jsonObj.get("viewScope"));
|
|
|
String statUser = Util.null2String(Util.null2String(params.get("statUser")));
|
|
|
String kqDate = Util.null2String(Util.null2String(params.get("kqdate")));
|
|
|
if(statUser.length()>0){
|
|
|
sqlWhere +=" and a.id in("+statUser+") ";
|
|
|
}
|
|
|
// if(kqdate.length()>0){
|
|
|
// sqlWhere +=" and a.id in("+statUser+") ";
|
|
|
// }
|
|
|
// if(subCompanyId.length()>0){
|
|
|
// sqlWhere +=" and a.subcompanyid1 in("+subCompanyId+") ";
|
|
|
// }
|
|
|
//
|
|
|
// if(departmentId.length()>0){
|
|
|
// sqlWhere +=" and a.departmentid in("+departmentId+") ";
|
|
|
// }
|
|
|
//
|
|
|
// if(resourceId.length()>0){
|
|
|
// sqlWhere +=" and a.id in("+resourceId+") ";
|
|
|
// }
|
|
|
//
|
|
|
// if(viewScope.equals("4")){//我的下属
|
|
|
// if(allLevel.equals("1")){//所有下属
|
|
|
// sqlWhere+=" and a.managerstr like '%,"+user.getUID()+",%'";
|
|
|
// }else{
|
|
|
// sqlWhere+=" and a.managerid="+user.getUID();//直接下属
|
|
|
// }
|
|
|
// }
|
|
|
// if (!"1".equals(isNoAccount)) {
|
|
|
// sqlWhere += " and a.loginid is not null "+(rs.getDBType().equals("oracle")?"":" and a.loginid<>'' ");
|
|
|
// }
|
|
|
|
|
|
//获取加班时长
|
|
|
// long startTime11 = System.currentTimeMillis();
|
|
|
Map<String, Object> dailyFlowOverTimeData = getDailyFlowOverTimeDataAllowance(params, user);
|
|
|
// long endTime11 = System.currentTimeMillis();
|
|
|
// long elapsedTime11 = endTime11 - startTime11; // 执行时间
|
|
|
// bb.writeLog("加班时长执行时间:" + elapsedTime11 + "毫秒" );
|
|
|
// bb.writeLog("dailyFlowOverTimeData: " + dailyFlowOverTimeData);
|
|
|
|
|
|
//首先去除指定不享有的分部
|
|
|
// long startTime12 = System.currentTimeMillis();
|
|
|
List<String> subComoanyList = new ArrayList<>();
|
|
|
String acqNoStatAllSql = "select subcompany from uf_NoStatAllSubCom where isdelete = 0 or isdelete is null";
|
|
|
rs.executeQuery(acqNoStatAllSql);
|
|
|
while (rs.next()) {
|
|
|
String subcompany = Util.null2String(rs.getString("subcompany"));
|
|
|
if (StringUtils.isNotBlank(subcompany)) {
|
|
|
subComoanyList.add(subcompany);
|
|
|
}
|
|
|
}
|
|
|
// long endTime12 = System.currentTimeMillis();
|
|
|
// long elapsedTime12 = endTime12 - startTime12; // 执行时间
|
|
|
// bb.writeLog("不享有的分部执行时间:" + elapsedTime12 + "毫秒" );
|
|
|
// bb.writeLog("subComoanyList: " + subComoanyList);
|
|
|
|
|
|
String subComoanys = "";
|
|
|
if ( subComoanyList != null && subComoanyList.size() > 0) {
|
|
|
subComoanys = String.join(",", subComoanyList);
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(subComoanys)) {
|
|
|
sqlWhere += " and a.subcompanyid1 not in ("+subComoanys+") ";
|
|
|
}
|
|
|
|
|
|
//指定人员不享受
|
|
|
List<String> noRes = new ArrayList<>();
|
|
|
String acqNoResSql = "select resourceid from uf_NoStatAllRes where isdelete = 0 or isdelete is null";
|
|
|
rs.executeQuery(acqNoResSql);
|
|
|
while (rs.next()) {
|
|
|
String resourceid = Util.null2String(rs.getString("resourceid"));
|
|
|
if (StringUtils.isNotBlank(resourceid)) {
|
|
|
noRes.add(resourceid);
|
|
|
}
|
|
|
}
|
|
|
if ( noRes !=null && noRes.size()>0) {
|
|
|
sqlWhere += " and a.id not in ("+String.join(",", noRes)+") ";
|
|
|
}
|
|
|
|
|
|
|
|
|
List<String> resIds = new ArrayList<>();
|
|
|
String acqResSql = "select a.id from hrmresource a where a.status in (0,1,2,3) " + sqlWhere;
|
|
|
bb.writeLog("acqResSql: " + acqResSql);
|
|
|
|
|
|
rs.executeQuery(acqResSql);
|
|
|
while (rs.next()) {
|
|
|
String id = Util.null2String(rs.getString("id"));
|
|
|
if (StringUtils.isNotBlank(id)) {
|
|
|
resIds.add(id);
|
|
|
}
|
|
|
}
|
|
|
bb.writeLog("resIds: " + resIds);
|
|
|
|
|
|
if (resIds != null && resIds.size() > 0 && StringUtils.isNotBlank(fromDate) && StringUtils.isNotBlank(toDate)) {
|
|
|
HostarUtil houtil = new HostarUtil();
|
|
|
// List<String> allDates = houtil.getAllDates(fromDate, toDate);
|
|
|
List<String> allDates = new ArrayList<>();
|
|
|
allDates.add(kqDate);
|
|
|
bb.writeLog("allDates: " + allDates);
|
|
|
bb.writeLog("allDates.size(): " + allDates.size());
|
|
|
|
|
|
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
|
|
|
|
|
|
//先获取到出勤时长
|
|
|
// long startTime13 = System.currentTimeMillis();
|
|
|
Map<String, Double> attendanceMinsMap = new HashMap<>();
|
|
|
String acqAttenSql = " select resourceid, attendancemins, kqdate from kq_format_total where resourceid in (" + String.join(",",resIds) + ") and kqdate >='" + fromDate + "' and kqdate <='" + toDate + "'";
|
|
|
rs.executeQuery(acqAttenSql);
|
|
|
while (rs.next()) {
|
|
|
String resourceid = Util.null2String(rs.getString("resourceid"));
|
|
|
Double attendancemins = Util.getDoubleValue(Util.null2String(rs.getString("attendancemins")));
|
|
|
String kqdate = Util.null2String(rs.getString("kqdate"));
|
|
|
if (attendancemins >= 0.00 ) {
|
|
|
attendanceMinsMap.put(resourceid+"|"+kqdate, attendancemins);
|
|
|
}
|
|
|
}
|
|
|
// long endTime13 = System.currentTimeMillis();
|
|
|
// long elapsedTime13 = endTime13 - startTime13; // 执行时间
|
|
|
// bb.writeLog("出勤时长执行时间:" + elapsedTime13 + "毫秒" );
|
|
|
|
|
|
//获取享受的考勤组
|
|
|
List<String> grouplist = new ArrayList<String>();
|
|
|
String acqGroupSql = "select kqgroup from uf_StatAlloKqGroup where isdelete is null or isdelete = 0 " ;
|
|
|
rs.executeQuery(acqGroupSql);
|
|
|
while (rs.next()) {
|
|
|
String kqgroup = Util.null2String(rs.getString("kqgroup"));
|
|
|
if (StringUtils.isNotBlank(kqgroup)) {
|
|
|
grouplist.add(kqgroup);
|
|
|
}
|
|
|
}
|
|
|
if ( grouplist != null && grouplist.size() == 0) {
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
// int x = 1;
|
|
|
for (String date : allDates) {
|
|
|
// long startTime14 = System.currentTimeMillis();
|
|
|
for (String res: resIds) {
|
|
|
// long startTime15 = System.currentTimeMillis();
|
|
|
//判断考勤组
|
|
|
/*获取考勤组的ID,因为考勤组有有效期,所以需要传入日期*/
|
|
|
String groupId = kqGroupMemberComInfo.getKQGroupId(resourceId, date);
|
|
|
if ( !grouplist.contains(groupId)) {
|
|
|
continue;
|
|
|
}
|
|
|
//获取考勤打卡
|
|
|
Map<String,Object> otherinfo = new HashMap<>();//存一些用得到的信息
|
|
|
String uuid = UUID.randomUUID().toString();
|
|
|
KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo();
|
|
|
ArrayList<String> hostIps = InitServer.getRealIp();//获取IP
|
|
|
boolean oneSign = false;//一天一段出勤时间段
|
|
|
List<TimeScopeEntity> lsSignTime = new ArrayList<>();
|
|
|
List<TimeScopeEntity> lsWorkTime = new ArrayList<>();
|
|
|
// List<TimeScopeEntity> lsRestTime = new ArrayList<>();
|
|
|
KQWorkTime kqWorkTime = new KQWorkTime();
|
|
|
kqWorkTime.setIsFormat(true);
|
|
|
WorkTimeEntity workTime = kqWorkTime.getWorkTime(res, date);
|
|
|
String preDate = DateUtil.addDate(date, -1);//上一天日期
|
|
|
String nextDate = DateUtil.addDate(date, 1);//下一天日期
|
|
|
if (workTime != null) {
|
|
|
lsSignTime = workTime.getSignTime();//允许打卡时间
|
|
|
lsWorkTime = workTime.getWorkTime();//工作时间
|
|
|
// lsRestTime = workTime.getRestTime();//休息时段时间
|
|
|
oneSign = lsWorkTime!=null&&lsWorkTime.size()==1;
|
|
|
}
|
|
|
int shiftCount = lsWorkTime == null ? 0 : lsWorkTime.size();
|
|
|
int shiftI = 0;
|
|
|
List<Object> lsCheckInfo = new ArrayList<>();
|
|
|
for (int i = 0; lsWorkTime != null && i < lsWorkTime.size(); i++) {
|
|
|
shiftI = i;
|
|
|
TimeScopeEntity signTimeScope = lsSignTime.get(i);
|
|
|
TimeScopeEntity workTimeScope = lsWorkTime.get(i);
|
|
|
Map<String, String> shifRuleMap = Maps.newHashMap();
|
|
|
|
|
|
String workBeginTime = Util.null2String(workTimeScope.getBeginTime());
|
|
|
// String ori_workBeginTime = workBeginTime;
|
|
|
int workBeginIdx = kqTimesArrayComInfo.getArrayindexByTimes(workBeginTime);
|
|
|
// boolean workBenginTimeAcross = workTimeScope.getBeginTimeAcross();
|
|
|
String workEndTime = Util.null2String(workTimeScope.getEndTime());
|
|
|
// String ori_workEndTime = workEndTime;
|
|
|
int workEndIdx = kqTimesArrayComInfo.getArrayindexByTimes(workEndTime);
|
|
|
boolean workEndTimeAcross = workTimeScope.getEndTimeAcross();
|
|
|
// int workMins = workTimeScope.getWorkMins();
|
|
|
//
|
|
|
// String workBeginDate = workBenginTimeAcross ? nextDate : date;
|
|
|
// String workEndDate = workEndTimeAcross ? nextDate : date;
|
|
|
|
|
|
if(oneSign){
|
|
|
//个性化设置只支持一天一次上下班
|
|
|
ShiftInfoBean shiftInfoBean = new ShiftInfoBean();
|
|
|
shiftInfoBean.setSplitDate(date);
|
|
|
shiftInfoBean.setShiftRuleMap(workTime.getShiftRuleInfo());
|
|
|
shiftInfoBean.setSignTime(lsSignTime);
|
|
|
shiftInfoBean.setWorkTime(lsWorkTime);
|
|
|
List<String> logList = Lists.newArrayList();
|
|
|
KQShiftRuleInfoBiz.getShiftRuleInfo(shiftInfoBean, res, shifRuleMap,logList);
|
|
|
if(!shifRuleMap.isEmpty()){
|
|
|
if(!logList.isEmpty()){
|
|
|
otherinfo.put("logList", logList);
|
|
|
}
|
|
|
otherinfo.put("shiftRule", shifRuleMap);
|
|
|
if(shifRuleMap.containsKey("shift_beginworktime")){
|
|
|
String shift_beginworktime = Util.null2String(shifRuleMap.get("shift_beginworktime"));
|
|
|
if(shift_beginworktime.length() > 0){
|
|
|
workBeginTime = Util.null2String(shift_beginworktime);
|
|
|
workBeginIdx = kqTimesArrayComInfo.getArrayindexByTimes(workBeginTime);
|
|
|
workTimeScope.setBeginTime(workBeginTime);
|
|
|
workTimeScope.setBeginTimeAcross(workBeginIdx>=1440?true:false);
|
|
|
}
|
|
|
}
|
|
|
if(shifRuleMap.containsKey("shift_endworktime")){
|
|
|
String shift_endworktime = Util.null2String(shifRuleMap.get("shift_endworktime"));
|
|
|
if(shift_endworktime.length() > 0){
|
|
|
workEndTime = Util.null2String(shift_endworktime);
|
|
|
workEndIdx = kqTimesArrayComInfo.getArrayindexByTimes(workEndTime);
|
|
|
workTimeScope.setEndTime(workEndTime);
|
|
|
workTimeScope.setEndTimeAcross(workEndIdx>=1440?true:false);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//lsCheckInfo的内容格式
|
|
|
//[{
|
|
|
// signTime = 08: 49: 00,
|
|
|
// signStatus = 0,
|
|
|
// signType = 1,
|
|
|
// signDate = 2023 - 12 - 22,
|
|
|
// signId = 6
|
|
|
//}, {
|
|
|
// signTime = 18: 49: 00,
|
|
|
// signStatus = 0,
|
|
|
// signType = 2,
|
|
|
// signDate = 2023 - 12 - 22,
|
|
|
// signId = 7
|
|
|
//}]
|
|
|
lsCheckInfo = new KQFormatSignData().getSignInfo(res,signTimeScope,workTimeScope,date,preDate,nextDate,kqTimesArrayComInfo,hostIps,uuid,shiftCount,shiftI);
|
|
|
}
|
|
|
// long endTime15 = System.currentTimeMillis();
|
|
|
// long elapsedTime15 = endTime15 - startTime15; // 执行时间
|
|
|
// bb.writeLog("获取打卡数据执行时间:" + elapsedTime15 + "毫秒" );
|
|
|
// long startTime16 = System.currentTimeMillis();
|
|
|
List<String> signIdList = new ArrayList<>();
|
|
|
for (int i = 0; i < lsCheckInfo.size(); i++) {
|
|
|
Object o = lsCheckInfo.get(i);
|
|
|
if ( o != null && o != "") {
|
|
|
Map<String, Object> temp = (Map<String, Object>) o;
|
|
|
String signId = Util.null2String(temp.get("signId"));
|
|
|
if (StringUtils.isNotBlank(signId)) {
|
|
|
signIdList.add(signId);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
bb.writeLog("signIdList: " + signIdList);
|
|
|
|
|
|
Integer signNumber = 0;
|
|
|
if (signIdList !=null && signIdList.size() > 0) {
|
|
|
String acqShowAddress = "select showaddress from hrmschedulesign where id in (" + String.join(",", signIdList) + ") ";
|
|
|
bb.writeLog("acqShowAddress: " + acqShowAddress);
|
|
|
rs.executeQuery(acqShowAddress);
|
|
|
while (rs.next()) {
|
|
|
String showaddress = Util.null2String(rs.getString("showaddress"));
|
|
|
if ("鸿仕达".equals(showaddress) || "hostar".equalsIgnoreCase(showaddress)) {
|
|
|
signNumber = signNumber + 1;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (signNumber == 0 ) {
|
|
|
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|workingDayOvertime_4leave")));
|
|
|
workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
|
|
|
double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|restDayOvertime_4leave")));
|
|
|
restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave;
|
|
|
double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|holidayOvertime_4leave")));
|
|
|
holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave;
|
|
|
|
|
|
double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|workingDayOvertime_nonleave")));
|
|
|
workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
|
|
|
double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|restDayOvertime_nonleave")));
|
|
|
restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave;
|
|
|
double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|holidayOvertime_nonleave")));
|
|
|
holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
|
|
|
|
|
|
double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave +
|
|
|
workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave;
|
|
|
// bb.writeLog("-=-temp:" + temp);
|
|
|
Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + date)));
|
|
|
// bb.writeLog("-=-attendanceMins:" + attendanceMins);
|
|
|
String value = String.valueOf(Math.floor( ((attendanceMins < 0.00 ? 0.00 : attendanceMins) + temp) / 300));
|
|
|
// bb.writeLog("-=-value:" + value);
|
|
|
datas.put(res + "|" + "DailyStatAllowance" + "|" + date, value);
|
|
|
}
|
|
|
// long endTime16 = System.currentTimeMillis();
|
|
|
// long elapsedTime16 = endTime16 - startTime16; // 执行时间
|
|
|
// bb.writeLog("计算餐补执行时间:" + elapsedTime16 + "毫秒" );
|
|
|
}
|
|
|
// long endTime14 = System.currentTimeMillis();
|
|
|
// long elapsedTime14 = endTime14 - startTime14; // 执行时间
|
|
|
// bb.writeLog("第" + x + "循环执行时间:" + elapsedTime14 + "毫秒" );
|
|
|
// x++;
|
|
|
}
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
bb.writeLog("DailyStatAllowance Exception: " + e);
|
|
|
}
|
|
|
bb.writeLog("DailyStatAllowance datas: " + datas);
|
|
|
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取驻点餐补数据
|
|
|
* @param params
|
|
|
* @param user
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Object> getStatAllowanceData(Map<String,Object> params, User user){
|
|
|
Map<String,Object> datas = new HashMap<>();;
|
|
|
RecordSet rs = new RecordSet();
|
|
|
String sql = "";
|
|
|
String sqlWhere = " ";
|
|
|
try{
|
|
|
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
|
|
|
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
|
|
|
String fromDate = Util.null2String(jsonObj.get("fromDate"));
|
|
|
String toDate = Util.null2String(jsonObj.get("toDate"));
|
|
|
String typeselect =Util.null2String(jsonObj.get("typeselect"));
|
|
|
if(typeselect.length()==0)typeselect = "3";
|
|
|
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
|
|
|
if(typeselect.equals("1")){
|
|
|
fromDate = TimeUtil.getCurrentDateString();
|
|
|
toDate = TimeUtil.getCurrentDateString();
|
|
|
}else{
|
|
|
fromDate = TimeUtil.getDateByOption(typeselect,"0");
|
|
|
toDate = TimeUtil.getDateByOption(typeselect,"1");
|
|
|
}
|
|
|
}
|
|
|
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
|
|
|
String departmentId = Util.null2String(jsonObj.get("departmentId"));
|
|
|
String resourceId = Util.null2String(jsonObj.get("resourceId"));
|
|
|
String allLevel = Util.null2String(jsonObj.get("allLevel"));
|
|
|
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
|
|
|
String viewScope = Util.null2String(jsonObj.get("viewScope"));
|
|
|
String statUser = Util.null2String(Util.null2String(params.get("statUser")));
|
|
|
// String kqdate = Util.null2String(Util.null2String(params.get("kqdate")));
|
|
|
if(statUser.length()>0){
|
|
|
sqlWhere +=" and a.id in("+statUser+") ";
|
|
|
}
|
|
|
// if(kqdate.length()>0){
|
|
|
// sqlWhere +=" and a.id in("+statUser+") ";
|
|
|
// }
|
|
|
// if(subCompanyId.length()>0){
|
|
|
// sqlWhere +=" and a.subcompanyid1 in("+subCompanyId+") ";
|
|
|
// }
|
|
|
//
|
|
|
// if(departmentId.length()>0){
|
|
|
// sqlWhere +=" and a.departmentid in("+departmentId+") ";
|
|
|
// }
|
|
|
//
|
|
|
// if(resourceId.length()>0){
|
|
|
// sqlWhere +=" and a.id in("+resourceId+") ";
|
|
|
// }
|
|
|
//
|
|
|
// if(viewScope.equals("4")){//我的下属
|
|
|
// if(allLevel.equals("1")){//所有下属
|
|
|
// sqlWhere+=" and a.managerstr like '%,"+user.getUID()+",%'";
|
|
|
// }else{
|
|
|
// sqlWhere+=" and a.managerid="+user.getUID();//直接下属
|
|
|
// }
|
|
|
// }
|
|
|
// if (!"1".equals(isNoAccount)) {
|
|
|
// sqlWhere += " and a.loginid is not null "+(rs.getDBType().equals("oracle")?"":" and a.loginid<>'' ");
|
|
|
// }
|
|
|
|
|
|
//获取加班时长
|
|
|
// long startTime11 = System.currentTimeMillis();
|
|
|
Map<String, Object> dailyFlowOverTimeData = getDailyFlowOverTimeDataAllowance(params, user);
|
|
|
// long endTime11 = System.currentTimeMillis();
|
|
|
// long elapsedTime11 = endTime11 - startTime11; // 执行时间
|
|
|
// bb.writeLog("加班时长执行时间:" + elapsedTime11 + "毫秒" );
|
|
|
// bb.writeLog("dailyFlowOverTimeData: " + dailyFlowOverTimeData);
|
|
|
|
|
|
//首先去除指定不享有的分部
|
|
|
// long startTime12 = System.currentTimeMillis();
|
|
|
List<String> subComoanyList = new ArrayList<>();
|
|
|
String acqNoStatAllSql = "select subcompany from uf_NoStatAllSubCom where isdelete = 0 or isdelete is null";
|
|
|
rs.executeQuery(acqNoStatAllSql);
|
|
|
while (rs.next()) {
|
|
|
String subcompany = Util.null2String(rs.getString("subcompany"));
|
|
|
if (StringUtils.isNotBlank(subcompany)) {
|
|
|
subComoanyList.add(subcompany);
|
|
|
}
|
|
|
}
|
|
|
// long endTime12 = System.currentTimeMillis();
|
|
|
// long elapsedTime12 = endTime12 - startTime12; // 执行时间
|
|
|
// bb.writeLog("不享有的分部执行时间:" + elapsedTime12 + "毫秒" );
|
|
|
// bb.writeLog("subComoanyList: " + subComoanyList);
|
|
|
|
|
|
String subComoanys = "";
|
|
|
if ( subComoanyList != null && subComoanyList.size() > 0) {
|
|
|
subComoanys = String.join(",", subComoanyList);
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(subComoanys)) {
|
|
|
sqlWhere += " and a.subcompanyid1 not in ("+subComoanys+") ";
|
|
|
}
|
|
|
|
|
|
//指定人员不享受
|
|
|
List<String> noRes = new ArrayList<>();
|
|
|
String acqNoResSql = "select resourceid from uf_NoStatAllRes where isdelete = 0 or isdelete is null";
|
|
|
rs.executeQuery(acqNoResSql);
|
|
|
while (rs.next()) {
|
|
|
String resourceid = Util.null2String(rs.getString("resourceid"));
|
|
|
if (StringUtils.isNotBlank(resourceid)) {
|
|
|
noRes.add(resourceid);
|
|
|
}
|
|
|
}
|
|
|
if ( noRes !=null && noRes.size()>0) {
|
|
|
sqlWhere += " and a.id not in ("+String.join(",", noRes)+") ";
|
|
|
}
|
|
|
|
|
|
|
|
|
List<String> resIds = new ArrayList<>();
|
|
|
String acqResSql = "select a.id from hrmresource a where a.status in (0,1,2,3) " + sqlWhere;
|
|
|
bb.writeLog("acqResSql: " + acqResSql);
|
|
|
|
|
|
rs.executeQuery(acqResSql);
|
|
|
while (rs.next()) {
|
|
|
String id = Util.null2String(rs.getString("id"));
|
|
|
if (StringUtils.isNotBlank(id)) {
|
|
|
resIds.add(id);
|
|
|
}
|
|
|
}
|
|
|
bb.writeLog("resIds: " + resIds);
|
|
|
|
|
|
if (resIds != null && resIds.size() > 0 && StringUtils.isNotBlank(fromDate) && StringUtils.isNotBlank(toDate)) {
|
|
|
HostarUtil houtil = new HostarUtil();
|
|
|
List<String> allDates = houtil.getAllDates(fromDate, toDate);
|
|
|
bb.writeLog("allDates: " + allDates);
|
|
|
bb.writeLog("allDates.size(): " + allDates.size());
|
|
|
|
|
|
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
|
|
|
|
|
|
//先获取到出勤时长
|
|
|
// long startTime13 = System.currentTimeMillis();
|
|
|
Map<String, Double> attendanceMinsMap = new HashMap<>();
|
|
|
String acqAttenSql = " select resourceid, attendancemins, kqdate from kq_format_total where resourceid in (" + String.join(",",resIds) + ") and kqdate >='" + fromDate + "' and kqdate <='" + toDate + "'";
|
|
|
rs.executeQuery(acqAttenSql);
|
|
|
while (rs.next()) {
|
|
|
String resourceid = Util.null2String(rs.getString("resourceid"));
|
|
|
Double attendancemins = Util.getDoubleValue(Util.null2String(rs.getString("attendancemins")));
|
|
|
String kqdate = Util.null2String(rs.getString("kqdate"));
|
|
|
if (attendancemins >= 0.00 ) {
|
|
|
attendanceMinsMap.put(resourceid+"|"+kqdate, attendancemins);
|
|
|
}
|
|
|
}
|
|
|
// long endTime13 = System.currentTimeMillis();
|
|
|
// long elapsedTime13 = endTime13 - startTime13; // 执行时间
|
|
|
// bb.writeLog("出勤时长执行时间:" + elapsedTime13 + "毫秒" );
|
|
|
|
|
|
//获取享受的考勤组
|
|
|
List<String> grouplist = new ArrayList<String>();
|
|
|
String acqGroupSql = "select kqgroup from uf_StatAlloKqGroup where isdelete is null or isdelete = 0 " ;
|
|
|
rs.executeQuery(acqGroupSql);
|
|
|
while (rs.next()) {
|
|
|
String kqgroup = Util.null2String(rs.getString("kqgroup"));
|
|
|
if (StringUtils.isNotBlank(kqgroup)) {
|
|
|
grouplist.add(kqgroup);
|
|
|
}
|
|
|
}
|
|
|
if ( grouplist != null && grouplist.size() == 0) {
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
// int x = 1;
|
|
|
for (String date : allDates) {
|
|
|
// long startTime14 = System.currentTimeMillis();
|
|
|
for (String res: resIds) {
|
|
|
// long startTime15 = System.currentTimeMillis();
|
|
|
//判断考勤组
|
|
|
/*获取考勤组的ID,因为考勤组有有效期,所以需要传入日期*/
|
|
|
String groupId = kqGroupMemberComInfo.getKQGroupId(resourceId, date);
|
|
|
if ( !grouplist.contains(groupId)) {
|
|
|
continue;
|
|
|
}
|
|
|
//获取考勤打卡
|
|
|
Map<String,Object> otherinfo = new HashMap<>();//存一些用得到的信息
|
|
|
String uuid = UUID.randomUUID().toString();
|
|
|
KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo();
|
|
|
ArrayList<String> hostIps = InitServer.getRealIp();//获取IP
|
|
|
boolean oneSign = false;//一天一段出勤时间段
|
|
|
List<TimeScopeEntity> lsSignTime = new ArrayList<>();
|
|
|
List<TimeScopeEntity> lsWorkTime = new ArrayList<>();
|
|
|
// List<TimeScopeEntity> lsRestTime = new ArrayList<>();
|
|
|
KQWorkTime kqWorkTime = new KQWorkTime();
|
|
|
kqWorkTime.setIsFormat(true);
|
|
|
WorkTimeEntity workTime = kqWorkTime.getWorkTime(res, date);
|
|
|
String preDate = DateUtil.addDate(date, -1);//上一天日期
|
|
|
String nextDate = DateUtil.addDate(date, 1);//下一天日期
|
|
|
if (workTime != null) {
|
|
|
lsSignTime = workTime.getSignTime();//允许打卡时间
|
|
|
lsWorkTime = workTime.getWorkTime();//工作时间
|
|
|
// lsRestTime = workTime.getRestTime();//休息时段时间
|
|
|
oneSign = lsWorkTime!=null&&lsWorkTime.size()==1;
|
|
|
}
|
|
|
int shiftCount = lsWorkTime == null ? 0 : lsWorkTime.size();
|
|
|
int shiftI = 0;
|
|
|
List<Object> lsCheckInfo = new ArrayList<>();
|
|
|
for (int i = 0; lsWorkTime != null && i < lsWorkTime.size(); i++) {
|
|
|
shiftI = i;
|
|
|
TimeScopeEntity signTimeScope = lsSignTime.get(i);
|
|
|
TimeScopeEntity workTimeScope = lsWorkTime.get(i);
|
|
|
Map<String, String> shifRuleMap = Maps.newHashMap();
|
|
|
|
|
|
String workBeginTime = Util.null2String(workTimeScope.getBeginTime());
|
|
|
// String ori_workBeginTime = workBeginTime;
|
|
|
int workBeginIdx = kqTimesArrayComInfo.getArrayindexByTimes(workBeginTime);
|
|
|
// boolean workBenginTimeAcross = workTimeScope.getBeginTimeAcross();
|
|
|
String workEndTime = Util.null2String(workTimeScope.getEndTime());
|
|
|
// String ori_workEndTime = workEndTime;
|
|
|
int workEndIdx = kqTimesArrayComInfo.getArrayindexByTimes(workEndTime);
|
|
|
boolean workEndTimeAcross = workTimeScope.getEndTimeAcross();
|
|
|
// int workMins = workTimeScope.getWorkMins();
|
|
|
//
|
|
|
// String workBeginDate = workBenginTimeAcross ? nextDate : date;
|
|
|
// String workEndDate = workEndTimeAcross ? nextDate : date;
|
|
|
|
|
|
if(oneSign){
|
|
|
//个性化设置只支持一天一次上下班
|
|
|
ShiftInfoBean shiftInfoBean = new ShiftInfoBean();
|
|
|
shiftInfoBean.setSplitDate(date);
|
|
|
shiftInfoBean.setShiftRuleMap(workTime.getShiftRuleInfo());
|
|
|
shiftInfoBean.setSignTime(lsSignTime);
|
|
|
shiftInfoBean.setWorkTime(lsWorkTime);
|
|
|
List<String> logList = Lists.newArrayList();
|
|
|
KQShiftRuleInfoBiz.getShiftRuleInfo(shiftInfoBean, res, shifRuleMap,logList);
|
|
|
if(!shifRuleMap.isEmpty()){
|
|
|
if(!logList.isEmpty()){
|
|
|
otherinfo.put("logList", logList);
|
|
|
}
|
|
|
otherinfo.put("shiftRule", shifRuleMap);
|
|
|
if(shifRuleMap.containsKey("shift_beginworktime")){
|
|
|
String shift_beginworktime = Util.null2String(shifRuleMap.get("shift_beginworktime"));
|
|
|
if(shift_beginworktime.length() > 0){
|
|
|
workBeginTime = Util.null2String(shift_beginworktime);
|
|
|
workBeginIdx = kqTimesArrayComInfo.getArrayindexByTimes(workBeginTime);
|
|
|
workTimeScope.setBeginTime(workBeginTime);
|
|
|
workTimeScope.setBeginTimeAcross(workBeginIdx>=1440?true:false);
|
|
|
}
|
|
|
}
|
|
|
if(shifRuleMap.containsKey("shift_endworktime")){
|
|
|
String shift_endworktime = Util.null2String(shifRuleMap.get("shift_endworktime"));
|
|
|
if(shift_endworktime.length() > 0){
|
|
|
workEndTime = Util.null2String(shift_endworktime);
|
|
|
workEndIdx = kqTimesArrayComInfo.getArrayindexByTimes(workEndTime);
|
|
|
workTimeScope.setEndTime(workEndTime);
|
|
|
workTimeScope.setEndTimeAcross(workEndIdx>=1440?true:false);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//lsCheckInfo的内容格式
|
|
|
//[{
|
|
|
// signTime = 08: 49: 00,
|
|
|
// signStatus = 0,
|
|
|
// signType = 1,
|
|
|
// signDate = 2023 - 12 - 22,
|
|
|
// signId = 6
|
|
|
//}, {
|
|
|
// signTime = 18: 49: 00,
|
|
|
// signStatus = 0,
|
|
|
// signType = 2,
|
|
|
// signDate = 2023 - 12 - 22,
|
|
|
// signId = 7
|
|
|
//}]
|
|
|
lsCheckInfo = new KQFormatSignData().getSignInfo(res,signTimeScope,workTimeScope,date,preDate,nextDate,kqTimesArrayComInfo,hostIps,uuid,shiftCount,shiftI);
|
|
|
}
|
|
|
// long endTime15 = System.currentTimeMillis();
|
|
|
// long elapsedTime15 = endTime15 - startTime15; // 执行时间
|
|
|
// bb.writeLog("获取打卡数据执行时间:" + elapsedTime15 + "毫秒" );
|
|
|
// long startTime16 = System.currentTimeMillis();
|
|
|
List<String> signIdList = new ArrayList<>();
|
|
|
for (int i = 0; i < lsCheckInfo.size(); i++) {
|
|
|
Object o = lsCheckInfo.get(i);
|
|
|
if ( o != null && o != "") {
|
|
|
Map<String, Object> temp = (Map<String, Object>) o;
|
|
|
String signId = Util.null2String(temp.get("signId"));
|
|
|
if (StringUtils.isNotBlank(signId)) {
|
|
|
signIdList.add(signId);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
bb.writeLog("signIdList: " + signIdList);
|
|
|
|
|
|
Integer signNumber = 0;
|
|
|
if (signIdList !=null && signIdList.size() > 0) {
|
|
|
String acqShowAddress = "select showaddress from hrmschedulesign where id in (" + String.join(",", signIdList) + ") ";
|
|
|
bb.writeLog("acqShowAddress: " + acqShowAddress);
|
|
|
rs.executeQuery(acqShowAddress);
|
|
|
while (rs.next()) {
|
|
|
String showaddress = Util.null2String(rs.getString("showaddress"));
|
|
|
if ("鸿仕达".equals(showaddress) || "hostar".equalsIgnoreCase(showaddress)) {
|
|
|
signNumber = signNumber + 1;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (signNumber == 0 ) {
|
|
|
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|workingDayOvertime_4leave")));
|
|
|
workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
|
|
|
double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|restDayOvertime_4leave")));
|
|
|
restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave;
|
|
|
double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|holidayOvertime_4leave")));
|
|
|
holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave;
|
|
|
|
|
|
double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|workingDayOvertime_nonleave")));
|
|
|
workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
|
|
|
double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|restDayOvertime_nonleave")));
|
|
|
restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave;
|
|
|
double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + date + "|holidayOvertime_nonleave")));
|
|
|
holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
|
|
|
|
|
|
double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave +
|
|
|
workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave;
|
|
|
// bb.writeLog("-=-temp:" + temp);
|
|
|
Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + date)));
|
|
|
// bb.writeLog("-=-attendanceMins:" + attendanceMins);
|
|
|
String value = String.valueOf(Math.floor( ((attendanceMins < 0.00 ? 0.00 : attendanceMins) + temp) / 300));
|
|
|
// bb.writeLog("-=-value:" + value);
|
|
|
datas.put(res + "|" + "StatAllowance" + "|" + date, value);
|
|
|
}
|
|
|
// long endTime16 = System.currentTimeMillis();
|
|
|
// long elapsedTime16 = endTime16 - startTime16; // 执行时间
|
|
|
// bb.writeLog("计算餐补执行时间:" + elapsedTime16 + "毫秒" );
|
|
|
}
|
|
|
// long endTime14 = System.currentTimeMillis();
|
|
|
// long elapsedTime14 = endTime14 - startTime14; // 执行时间
|
|
|
// bb.writeLog("第" + x + "循环执行时间:" + elapsedTime14 + "毫秒" );
|
|
|
// x++;
|
|
|
}
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
bb.writeLog("StatAllowance Exception: " + e);
|
|
|
}
|
|
|
bb.writeLog("StatAllowance datas: " + datas);
|
|
|
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 获取实际加班数据,包括流程,打卡生成的
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Object> getFlowOverTimeDataNew(Map<String,Object> params, User user){
|
|
|
Map<String,Object> datas = new HashMap<>();;
|
|
|
RecordSet rs = new RecordSet();
|
|
|
String sql = "";
|
|
|
String sqlWhere = " ";
|
|
|
try{
|
|
|
KQOvertimeRulesBiz kqOvertimeRulesBiz = new KQOvertimeRulesBiz();
|
|
|
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
|
|
|
String fromDate = Util.null2String(jsonObj.get("fromDate"));
|
|
|
String toDate = Util.null2String(jsonObj.get("toDate"));
|
|
|
String typeselect =Util.null2String(jsonObj.get("typeselect"));
|
|
|
if(typeselect.length()==0)typeselect = "3";
|
|
|
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
|
|
|
if(typeselect.equals("1")){
|
|
|
fromDate = TimeUtil.getCurrentDateString();
|
|
|
toDate = TimeUtil.getCurrentDateString();
|
|
|
}else{
|
|
|
fromDate = TimeUtil.getDateByOption(typeselect,"0");
|
|
|
toDate = TimeUtil.getDateByOption(typeselect,"1");
|
|
|
}
|
|
|
}
|
|
|
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
|
|
|
String departmentId = Util.null2String(jsonObj.get("departmentId"));
|
|
|
String resourceId = Util.null2String(jsonObj.get("resourceId"));
|
|
|
String allLevel = Util.null2String(jsonObj.get("allLevel"));
|
|
|
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
|
|
|
String viewScope = Util.null2String(jsonObj.get("viewScope"));
|
|
|
if(subCompanyId.length()>0){
|
|
|
sqlWhere +=" and a.subcompanyid1 in("+subCompanyId+") ";
|
|
|
}
|
|
|
|
|
|
if(departmentId.length()>0){
|
|
|
sqlWhere +=" and a.departmentid in("+departmentId+") ";
|
|
|
}
|
|
|
|
|
|
if(resourceId.length()>0){
|
|
|
sqlWhere +=" and a.id in("+resourceId+") ";
|
|
|
}
|
|
|
|
|
|
if(viewScope.equals("4")){//我的下属
|
|
|
if(allLevel.equals("1")){//所有下属
|
|
|
sqlWhere+=" and a.managerstr like '%,"+user.getUID()+",%'";
|
|
|
}else{
|
|
|
sqlWhere+=" and a.managerid="+user.getUID();//直接下属
|
|
|
}
|
|
|
}
|
|
|
if (!"1".equals(isNoAccount)) {
|
|
|
sqlWhere += " and a.loginid is not null "+(rs.getDBType().equals("oracle")?"":" and a.loginid<>'' ");
|
|
|
}
|
|
|
|
|
|
int uintType = kqOvertimeRulesBiz.getMinimumUnit();//当前加班单位
|
|
|
double hoursToDay = kqOvertimeRulesBiz.getHoursToDay();//当前天跟小时计算关系
|
|
|
|
|
|
String valueField = "";
|
|
|
|
|
|
sql = " select resourceid,changeType, sum(cast(duration_min as decimal(18,4))) as val,paidLeaveEnable "+
|
|
|
" from hrmresource a, kq_flow_overtime b "+
|
|
|
" where a.id = b.resourceid and belongdate >='"+fromDate+"' and belongdate <='"+toDate+"' " +sqlWhere+
|
|
|
" group by resourceid,changeType,paidLeaveEnable ";
|
|
|
rs.execute(sql);
|
|
|
kqLog.info("getFlowOverTimeDataNew:sql:"+sql);
|
|
|
while (rs.next()) {
|
|
|
String resourceid = rs.getString("resourceid");
|
|
|
String paidLeaveEnable = rs.getString("paidLeaveEnable");
|
|
|
int changeType =rs.getInt("changeType");//1-节假日、2-工作日、3-休息日
|
|
|
double value = rs.getDouble("val")<0?0:rs.getDouble("val");
|
|
|
if(uintType==3 || uintType== 5 || uintType== 6){//按小时计算
|
|
|
value = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(value/(60.0)+""));
|
|
|
}else{//按天计算
|
|
|
value = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(value/(60.0*hoursToDay)+""));
|
|
|
}
|
|
|
String flowType = "";
|
|
|
if(changeType==1){
|
|
|
flowType = "holidayOvertime";
|
|
|
}else if(changeType==2){
|
|
|
flowType = "workingDayOvertime";
|
|
|
}else if(changeType==3){
|
|
|
flowType = "restDayOvertime";
|
|
|
}
|
|
|
if("1".equalsIgnoreCase(paidLeaveEnable)){
|
|
|
//1表示关联调休
|
|
|
flowType += "_4leave";
|
|
|
}else{
|
|
|
//0表示不关联调休
|
|
|
flowType += "_nonleave";
|
|
|
}
|
|
|
String key = resourceid+"|"+flowType;
|
|
|
//df.format 默认是不四舍五入的 0.125这样的就会直接变成0.12了
|
|
|
df.setMaximumFractionDigits(5);
|
|
|
if(datas.containsKey(key)){
|
|
|
double tmpVal = Util.getDoubleValue(Util.null2String(datas.get(key)),0.0);
|
|
|
tmpVal += value;
|
|
|
datas.put(key,format(tmpVal));
|
|
|
}else{
|
|
|
datas.put(key,format(value));
|
|
|
}
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
}
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 获取加班数据
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Object> getFlowOverTimeData(Map<String,Object> params, User user){
|
|
|
Map<String,Object> datas = new HashMap<>();;
|
|
|
RecordSet rs = new RecordSet();
|
|
|
String sql = "";
|
|
|
String sqlWhere = " ";
|
|
|
try{
|
|
|
KQOvertimeRulesBiz kqOvertimeRulesBiz = new KQOvertimeRulesBiz();
|
|
|
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
|
|
|
String fromDate = Util.null2String(jsonObj.get("fromDate"));
|
|
|
String toDate = Util.null2String(jsonObj.get("toDate"));
|
|
|
String typeselect =Util.null2String(jsonObj.get("typeselect"));
|
|
|
if(typeselect.length()==0)typeselect = "3";
|
|
|
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
|
|
|
if(typeselect.equals("1")){
|
|
|
fromDate = TimeUtil.getCurrentDateString();
|
|
|
toDate = TimeUtil.getCurrentDateString();
|
|
|
}else{
|
|
|
fromDate = TimeUtil.getDateByOption(typeselect,"0");
|
|
|
toDate = TimeUtil.getDateByOption(typeselect,"1");
|
|
|
}
|
|
|
}
|
|
|
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
|
|
|
String departmentId = Util.null2String(jsonObj.get("departmentId"));
|
|
|
String resourceId = Util.null2String(jsonObj.get("resourceId"));
|
|
|
String allLevel = Util.null2String(jsonObj.get("allLevel"));
|
|
|
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
|
|
|
String viewScope = Util.null2String(jsonObj.get("viewScope"));
|
|
|
if(subCompanyId.length()>0){
|
|
|
sqlWhere +=" and b.subcompanyid in("+subCompanyId+") ";
|
|
|
}
|
|
|
|
|
|
if(departmentId.length()>0){
|
|
|
sqlWhere +=" and b.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<>'' ");
|
|
|
}
|
|
|
|
|
|
int uintType = kqOvertimeRulesBiz.getMinimumUnit();//当前加班单位
|
|
|
double hoursToDay = kqOvertimeRulesBiz.getHoursToDay();//当前天跟小时计算关系
|
|
|
|
|
|
String valueField = "";
|
|
|
if(uintType==3 || uintType== 5 || uintType== 6){//按小时计算
|
|
|
valueField = "sum( case when durationrule='3' then duration else duration*"+hoursToDay+" end) as val";
|
|
|
}else{//按天计算
|
|
|
valueField = "sum( case when durationrule='3' then duration/"+hoursToDay+" else duration end) as val";
|
|
|
}
|
|
|
|
|
|
sql = " select resourceid,changeType, " +valueField+
|
|
|
" from hrmresource a, "+KqSplitFlowTypeEnum.OVERTIME.getTablename()+" b "+
|
|
|
" where a.id = b.resourceid and belongdate >='"+fromDate+"' and belongdate <='"+toDate+"' " +sqlWhere+
|
|
|
" group by resourceid,changeType,durationrule ";
|
|
|
rs.execute(sql);
|
|
|
while (rs.next()) {
|
|
|
String resourceid = rs.getString("resourceid");
|
|
|
int changeType =rs.getInt("changeType");//1-节假日、2-工作日、3-休息日
|
|
|
double value = rs.getDouble("val")<0?0:rs.getDouble("val");
|
|
|
String flowType = "";
|
|
|
if(changeType==1){
|
|
|
flowType = "holidayOvertime";
|
|
|
}else if(changeType==2){
|
|
|
flowType = "workingDayOvertime";
|
|
|
}else if(changeType==3){
|
|
|
flowType = "restDayOvertime";
|
|
|
}
|
|
|
String key = resourceid+"|"+flowType;
|
|
|
//df.format 默认是不四舍五入的 0.125这样的就会直接变成0.12了
|
|
|
df.setMaximumFractionDigits(5);
|
|
|
if(datas.containsKey(key)){
|
|
|
double tmpVal = Util.getDoubleValue(Util.null2String(datas.get(key)),0.0);
|
|
|
tmpVal += value;
|
|
|
datas.put(key,format(tmpVal));
|
|
|
}else{
|
|
|
datas.put(key,format(value));
|
|
|
}
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
}
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取每日加班数据
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Object> getDailyFlowOverTimeData(Map<String,Object> params, User user){
|
|
|
Map<String,Object> datas = new HashMap<>();;
|
|
|
RecordSet rs = new RecordSet();
|
|
|
String sql = "";
|
|
|
String sqlWhere = " ";
|
|
|
try{
|
|
|
KQOvertimeRulesBiz kqOvertimeRulesBiz = new KQOvertimeRulesBiz();
|
|
|
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
|
|
|
String fromDate = Util.null2String(jsonObj.get("fromDate"));
|
|
|
String toDate = Util.null2String(jsonObj.get("toDate"));
|
|
|
String typeselect =Util.null2String(jsonObj.get("typeselect"));
|
|
|
if(typeselect.length()==0)typeselect = "3";
|
|
|
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
|
|
|
if(typeselect.equals("1")){
|
|
|
fromDate = TimeUtil.getCurrentDateString();
|
|
|
toDate = TimeUtil.getCurrentDateString();
|
|
|
}else{
|
|
|
fromDate = TimeUtil.getDateByOption(typeselect,"0");
|
|
|
toDate = TimeUtil.getDateByOption(typeselect,"1");
|
|
|
}
|
|
|
}
|
|
|
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
|
|
|
String departmentId = Util.null2String(jsonObj.get("departmentId"));
|
|
|
String resourceId = Util.null2String(jsonObj.get("resourceId"));
|
|
|
String allLevel = Util.null2String(jsonObj.get("allLevel"));
|
|
|
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
|
|
|
String viewScope = Util.null2String(jsonObj.get("viewScope"));
|
|
|
if(subCompanyId.length()>0){
|
|
|
sqlWhere +=" and a.subcompanyid1 in("+subCompanyId+") ";
|
|
|
}
|
|
|
|
|
|
if(departmentId.length()>0){
|
|
|
sqlWhere +=" and a.departmentid in("+departmentId+") ";
|
|
|
}
|
|
|
|
|
|
if(resourceId.length()>0){
|
|
|
sqlWhere +=" and a.id in("+resourceId+") ";
|
|
|
}
|
|
|
|
|
|
if(viewScope.equals("4")){//我的下属
|
|
|
if(allLevel.equals("1")){//所有下属
|
|
|
sqlWhere+=" and a.managerstr like '%,"+user.getUID()+",%'";
|
|
|
}else{
|
|
|
sqlWhere+=" and a.managerid="+user.getUID();//直接下属
|
|
|
}
|
|
|
}
|
|
|
if (!"1".equals(isNoAccount)) {
|
|
|
sqlWhere += " and a.loginid is not null "+(rs.getDBType().equals("oracle")?"":" and a.loginid<>'' ");
|
|
|
}
|
|
|
|
|
|
int uintType = kqOvertimeRulesBiz.getMinimumUnit();//当前加班单位
|
|
|
double hoursToDay = kqOvertimeRulesBiz.getHoursToDay();//当前天跟小时计算关系
|
|
|
|
|
|
String valueField = "";
|
|
|
if(uintType==3 || uintType== 5 || uintType== 6){//按小时计算
|
|
|
valueField = "sum( case when durationrule='3' then duration else duration*"+hoursToDay+" end) as val";
|
|
|
}else{//按天计算
|
|
|
valueField = "sum( case when durationrule='3' then duration/"+hoursToDay+" else duration end) as val";
|
|
|
}
|
|
|
|
|
|
sql = " select resourceid,changeType,belongdate,paidLeaveEnable, sum(cast(duration_min as decimal(18,4))) as val "+
|
|
|
" from hrmresource a, kq_flow_overtime b "+
|
|
|
" where a.id = b.resourceid and belongdate >='"+fromDate+"' and belongdate <='"+toDate+"' " +sqlWhere+
|
|
|
" group by resourceid,changeType,paidLeaveEnable,belongdate ";
|
|
|
rs.execute(sql);
|
|
|
while (rs.next()) {
|
|
|
String resourceid = rs.getString("resourceid");
|
|
|
String belongdate = rs.getString("belongdate");
|
|
|
String paidLeaveEnable = rs.getString("paidLeaveEnable");
|
|
|
int changeType =rs.getInt("changeType");//1-节假日、2-工作日、3-休息日
|
|
|
double value = rs.getDouble("val")<0?0:rs.getDouble("val");
|
|
|
if(uintType==3 || uintType== 5 || uintType== 6){//按小时计算
|
|
|
value = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(value/(60.0)+""));
|
|
|
}else{//按天计算
|
|
|
value = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(value/(60.0*hoursToDay)+""));
|
|
|
}
|
|
|
String flowType = "";
|
|
|
if(changeType==1){
|
|
|
flowType = "holidayOvertime";
|
|
|
}else if(changeType==2){
|
|
|
flowType = "workingDayOvertime";
|
|
|
}else if(changeType==3){
|
|
|
flowType = "restDayOvertime";
|
|
|
}
|
|
|
if("1".equalsIgnoreCase(paidLeaveEnable)){
|
|
|
//1表示关联调休
|
|
|
flowType += "_4leave";
|
|
|
}else{
|
|
|
//0表示不关联调休
|
|
|
flowType += "_nonleave";
|
|
|
}
|
|
|
//df.format 默认是不四舍五入的 0.125这样的就会直接变成0.12了
|
|
|
df.setMaximumFractionDigits(5);
|
|
|
datas.put(resourceid+"|"+belongdate+"|"+flowType,format(value));
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
}
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取每日加班数据(餐补使用)
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Object> getDailyFlowOverTimeDataAllowance(Map<String,Object> params, User user){
|
|
|
Map<String,Object> datas = new HashMap<>();;
|
|
|
RecordSet rs = new RecordSet();
|
|
|
String sql = "";
|
|
|
String sqlWhere = " ";
|
|
|
try{
|
|
|
KQOvertimeRulesBiz kqOvertimeRulesBiz = new KQOvertimeRulesBiz();
|
|
|
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
|
|
|
String fromDate = Util.null2String(jsonObj.get("fromDate"));
|
|
|
String toDate = Util.null2String(jsonObj.get("toDate"));
|
|
|
String typeselect =Util.null2String(jsonObj.get("typeselect"));
|
|
|
if(typeselect.length()==0)typeselect = "3";
|
|
|
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
|
|
|
if(typeselect.equals("1")){
|
|
|
fromDate = TimeUtil.getCurrentDateString();
|
|
|
toDate = TimeUtil.getCurrentDateString();
|
|
|
}else{
|
|
|
fromDate = TimeUtil.getDateByOption(typeselect,"0");
|
|
|
toDate = TimeUtil.getDateByOption(typeselect,"1");
|
|
|
}
|
|
|
}
|
|
|
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
|
|
|
String departmentId = Util.null2String(jsonObj.get("departmentId"));
|
|
|
String resourceId = Util.null2String(jsonObj.get("resourceId"));
|
|
|
String allLevel = Util.null2String(jsonObj.get("allLevel"));
|
|
|
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
|
|
|
String viewScope = Util.null2String(jsonObj.get("viewScope"));
|
|
|
if(subCompanyId.length()>0){
|
|
|
sqlWhere +=" and a.subcompanyid1 in("+subCompanyId+") ";
|
|
|
}
|
|
|
|
|
|
if(departmentId.length()>0){
|
|
|
sqlWhere +=" and a.departmentid in("+departmentId+") ";
|
|
|
}
|
|
|
|
|
|
if(resourceId.length()>0){
|
|
|
sqlWhere +=" and a.id in("+resourceId+") ";
|
|
|
}
|
|
|
|
|
|
if(viewScope.equals("4")){//我的下属
|
|
|
if(allLevel.equals("1")){//所有下属
|
|
|
sqlWhere+=" and a.managerstr like '%,"+user.getUID()+",%'";
|
|
|
}else{
|
|
|
sqlWhere+=" and a.managerid="+user.getUID();//直接下属
|
|
|
}
|
|
|
}
|
|
|
if (!"1".equals(isNoAccount)) {
|
|
|
sqlWhere += " and a.loginid is not null "+(rs.getDBType().equals("oracle")?"":" and a.loginid<>'' ");
|
|
|
}
|
|
|
|
|
|
int uintType = kqOvertimeRulesBiz.getMinimumUnit();//当前加班单位
|
|
|
double hoursToDay = kqOvertimeRulesBiz.getHoursToDay();//当前天跟小时计算关系
|
|
|
|
|
|
String valueField = "";
|
|
|
if(uintType==3 || uintType== 5 || uintType== 6){//按小时计算
|
|
|
valueField = "sum( case when durationrule='3' then duration else duration*"+hoursToDay+" end) as val";
|
|
|
}else{//按天计算
|
|
|
valueField = "sum( case when durationrule='3' then duration/"+hoursToDay+" else duration end) as val";
|
|
|
}
|
|
|
|
|
|
sql = " select resourceid,changeType,belongdate,paidLeaveEnable, sum(cast(duration_min as decimal(18,4))) as val "+
|
|
|
" from hrmresource a, kq_flow_overtime b "+
|
|
|
" where a.id = b.resourceid and belongdate >='"+fromDate+"' and belongdate <='"+toDate+"' " +sqlWhere+
|
|
|
" group by resourceid,changeType,paidLeaveEnable,belongdate ";
|
|
|
rs.execute(sql);
|
|
|
while (rs.next()) {
|
|
|
String resourceid = rs.getString("resourceid");
|
|
|
String belongdate = rs.getString("belongdate");
|
|
|
String paidLeaveEnable = rs.getString("paidLeaveEnable");
|
|
|
int changeType =rs.getInt("changeType");//1-节假日、2-工作日、3-休息日
|
|
|
double value = rs.getDouble("val")<0?0:rs.getDouble("val");
|
|
|
if(uintType==3 || uintType== 5 || uintType== 6){//按小时计算
|
|
|
value = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(value+""));
|
|
|
}else{//按天计算
|
|
|
value = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(value+""));
|
|
|
}
|
|
|
String flowType = "";
|
|
|
if(changeType==1){
|
|
|
flowType = "holidayOvertime";
|
|
|
}else if(changeType==2){
|
|
|
flowType = "workingDayOvertime";
|
|
|
}else if(changeType==3){
|
|
|
flowType = "restDayOvertime";
|
|
|
}
|
|
|
if("1".equalsIgnoreCase(paidLeaveEnable)){
|
|
|
//1表示关联调休
|
|
|
flowType += "_4leave";
|
|
|
}else{
|
|
|
//0表示不关联调休
|
|
|
flowType += "_nonleave";
|
|
|
}
|
|
|
//df.format 默认是不四舍五入的 0.125这样的就会直接变成0.12了
|
|
|
df.setMaximumFractionDigits(5);
|
|
|
datas.put(resourceid+"|"+belongdate+"|"+flowType,format(value));
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
}
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 异常冲抵
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Object> getFlowOtherData(Map<String,Object> params, User user){
|
|
|
Map<String,Object> datas = new HashMap<>();;
|
|
|
RecordSet rs = new RecordSet();
|
|
|
String sql = "";
|
|
|
String sqlWhere = " ";
|
|
|
try{
|
|
|
String minimumUnit = "";//单位类型
|
|
|
double proportion = 0.00;//换算关系
|
|
|
|
|
|
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
|
|
|
String fromDate = Util.null2String(jsonObj.get("fromDate"));
|
|
|
String toDate = Util.null2String(jsonObj.get("toDate"));
|
|
|
String typeselect =Util.null2String(jsonObj.get("typeselect"));
|
|
|
if(typeselect.length()==0)typeselect = "3";
|
|
|
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
|
|
|
if(typeselect.equals("1")){
|
|
|
fromDate = TimeUtil.getCurrentDateString();
|
|
|
toDate = TimeUtil.getCurrentDateString();
|
|
|
}else{
|
|
|
fromDate = TimeUtil.getDateByOption(typeselect,"0");
|
|
|
toDate = TimeUtil.getDateByOption(typeselect,"1");
|
|
|
}
|
|
|
}
|
|
|
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
|
|
|
String departmentId = Util.null2String(jsonObj.get("departmentId"));
|
|
|
String resourceId = Util.null2String(jsonObj.get("resourceId"));
|
|
|
String allLevel = Util.null2String(jsonObj.get("allLevel"));
|
|
|
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
|
|
|
String viewScope = Util.null2String(jsonObj.get("viewScope"));
|
|
|
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<>'' ");
|
|
|
}
|
|
|
|
|
|
sql = " select resourceid, durationrule, sum(duration) as val from hrmresource a, "+KqSplitFlowTypeEnum.OTHER.getTablename()+" b "+
|
|
|
" where a.id = b.resourceid and belongdate >='"+fromDate+"' and belongdate <='"+toDate+"' "+sqlWhere+
|
|
|
" group by resourceid, durationrule ";
|
|
|
rs.execute(sql);
|
|
|
while (rs.next()) {
|
|
|
String resourceid = rs.getString("resourceid");
|
|
|
double value = rs.getDouble("val")<0?0:rs.getDouble("val");
|
|
|
String durationrule = rs.getString("durationrule");
|
|
|
|
|
|
if(KQUnitBiz.isLeaveHour(minimumUnit)){//按小时
|
|
|
if(!KQUnitBiz.isLeaveHour(durationrule)){
|
|
|
if(proportion>0) value = value*proportion;
|
|
|
}
|
|
|
}else{//按天
|
|
|
if(KQUnitBiz.isLeaveHour(durationrule)){
|
|
|
if(proportion>0) value = value/proportion;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
String key = resourceid+"|leaveDeduction";
|
|
|
if(datas.containsKey(key)){
|
|
|
value += Util.getDoubleValue(Util.null2String(datas.get(key)));
|
|
|
}
|
|
|
//df.format 默认是不四舍五入的 0.125这样的就会直接变成0.12了
|
|
|
df.setMaximumFractionDigits(5);
|
|
|
datas.put(key, format(value));
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
}
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
*日报表数据
|
|
|
* @param resourceId
|
|
|
* @param fromDate
|
|
|
* @param toDate
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Object> getDetialDatas(String resourceId,String fromDate, String toDate, User user){
|
|
|
return getDetialDatas(resourceId,fromDate,toDate,user,new HashMap<String,Object>(),false,0,"0");
|
|
|
}
|
|
|
public Map<String,Object> getDetialDatas(String resourceId,String fromDate, String toDate, User user,
|
|
|
Map<String,Object> flowData,boolean isWrap,int uintType,String show_card_source){
|
|
|
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
|
|
|
Map<String,Object> datas = new HashMap<>();
|
|
|
Map<String,Object> data = null;
|
|
|
Map<String,Object> tmpdatas = new HashMap<>();
|
|
|
Map<String,Object> tmpdata = null;
|
|
|
Map<String,Object> tmpmap = null;
|
|
|
|
|
|
Map<String,String> tmpstatusdata = new HashMap<>();
|
|
|
Map<String,String> tmpstatus = null;
|
|
|
RecordSet rs = new RecordSet();
|
|
|
String sql = "";
|
|
|
|
|
|
//add
|
|
|
String unit = "小时";
|
|
|
if(uintType==1 || uintType== 2 || uintType== 4){//按天计算
|
|
|
unit = "天";
|
|
|
}
|
|
|
//kqLog.info("detail.flowdata="+JSONObject.toJSONString(flowData));
|
|
|
|
|
|
try {
|
|
|
sql = " select resourceid, kqdate, workMins,attendanceMins,signindate,signintime,signoutdate,signouttime,signinid,signoutid, belatemins, graveBeLateMins, leaveearlymins, graveLeaveEarlyMins, absenteeismmins, forgotcheckMins, forgotBeginWorkCheckMins, "+
|
|
|
" leaveMins,leaveInfo,evectionMins,outMins " +
|
|
|
" from kq_format_detail " +
|
|
|
" where resourceid = ? and kqdate>=? and kqdate<=? "+
|
|
|
" order by resourceid, kqdate, serialnumber ";
|
|
|
rs.executeQuery(sql,resourceId, fromDate,toDate);
|
|
|
while (rs.next()) {
|
|
|
String key = rs.getString("resourceid") + "|" + rs.getString("kqdate");
|
|
|
int workMins = rs.getInt("workMins");
|
|
|
|
|
|
String attendanceMins = rs.getString("attendanceMins");
|
|
|
// String chuqin = "出勤:"+KQDurationCalculatorUtil.getDurationRound(("" + (Util.getDoubleValue(attendanceMins) / 60.0)))+"小时";
|
|
|
String overtimekey = key+"|overtime";
|
|
|
String overtime = Util.null2String(flowData.get(overtimekey));
|
|
|
boolean hasovertime = Util.getDoubleValue(overtime)>0;
|
|
|
overtime = hasovertime?(SystemEnv.getHtmlLabelName(6151, user.getLanguage())+":"+overtime+unit):"";//显示加班
|
|
|
|
|
|
String signinid = "";
|
|
|
String signoutid = "";
|
|
|
String signintime = "";
|
|
|
String signouttime = "";
|
|
|
if("1".equals(show_card_source)){
|
|
|
String nosign = SystemEnv.getHtmlLabelName(25994, user.getLanguage());//未打卡
|
|
|
signinid = Util.null2String(rs.getString("signinid")).trim();
|
|
|
signintime = Util.null2String(rs.getString("signintime")).trim();
|
|
|
String tmpin = SystemEnv.getHtmlLabelName(21974, user.getLanguage())+":";
|
|
|
if(signinid.length()>0){
|
|
|
String signinfrom = Util.null2String(flowData.get(signinid));
|
|
|
signintime = tmpin+signintime+" "+signinfrom;
|
|
|
}else{
|
|
|
signintime = tmpin+nosign;
|
|
|
}
|
|
|
// signintime = isWrap?"\r\n"+signintime:"<br/>"+signintime;
|
|
|
|
|
|
signoutid = Util.null2String(rs.getString("signoutid")).trim();
|
|
|
signouttime = Util.null2String(rs.getString("signouttime")).trim();
|
|
|
String tmpout = SystemEnv.getHtmlLabelName(21975, user.getLanguage())+":";
|
|
|
if(signoutid.length()>0){
|
|
|
String signoutfrom = Util.null2String(flowData.get(signoutid));
|
|
|
signouttime = tmpout+signouttime+" "+signoutfrom;
|
|
|
}else{
|
|
|
signouttime = tmpout+nosign;
|
|
|
}
|
|
|
signouttime = isWrap?"\r\n"+signouttime:"<br/>"+signouttime;
|
|
|
}
|
|
|
|
|
|
int beLateMins = rs.getInt("beLateMins");
|
|
|
int leaveEarlyMins = rs.getInt("leaveEarlyMins");
|
|
|
int graveBeLateMins = rs.getInt("graveBeLateMins");
|
|
|
int absenteeismMins = rs.getInt("absenteeismMins");
|
|
|
int graveLeaveEarlyMins = rs.getInt("graveLeaveEarlyMins");
|
|
|
int forgotCheckMins = rs.getInt("forgotCheckMins");
|
|
|
int forgotBeginWorkCheckMins = rs.getInt("forgotBeginWorkCheckMins");
|
|
|
int leaveMins = rs.getInt("leaveMins");
|
|
|
String leaveInfo = rs.getString("leaveInfo");
|
|
|
int evectionMins = rs.getInt("evectionMins");
|
|
|
int outMins = rs.getInt("outMins");
|
|
|
String text = "";
|
|
|
String tmptext ="";
|
|
|
String flag ="true";
|
|
|
if(datas.get(key)==null){
|
|
|
data = new HashMap<>();
|
|
|
}else{
|
|
|
data = (Map<String,Object>)datas.get(key);
|
|
|
tmptext = Util.null2String(data.get("text"));
|
|
|
}
|
|
|
tmpdata = new HashMap<>();
|
|
|
if(tmpdatas.get(key)!=null){
|
|
|
tmpmap = (Map<String,Object>)tmpdatas.get(key);
|
|
|
flag = Util.null2String(tmpmap.get("text"));
|
|
|
}
|
|
|
|
|
|
String yichang ="";
|
|
|
if(tmpstatusdata.get(key)!=null){
|
|
|
yichang = Util.null2String(tmpstatusdata.get(key));
|
|
|
}
|
|
|
String sign ="";
|
|
|
String signkey = key+"|text";
|
|
|
if(tmpstatusdata.get(signkey)!=null){
|
|
|
sign = Util.null2String(tmpstatusdata.get(signkey));
|
|
|
}
|
|
|
|
|
|
if (workMins<=0) {
|
|
|
if(text.length()>0) text +=" ";
|
|
|
text += SystemEnv.getHtmlLabelName(26593, user.getLanguage());
|
|
|
//休息日处理
|
|
|
if(signinid.length()>0){
|
|
|
text += (isWrap?"\r\n":"<br/>")+signintime;
|
|
|
}
|
|
|
if(signoutid.length()>0){
|
|
|
text += signouttime;
|
|
|
}
|
|
|
if(sign.length()>0) sign += isWrap?"\r\n":"<br/>";
|
|
|
sign += text;
|
|
|
} else {
|
|
|
//处理打卡数据==================
|
|
|
if(text.length()>0) text+= isWrap?"\r\n":"<br/>";
|
|
|
text += signintime;
|
|
|
text += signouttime;
|
|
|
if(sign.length()>0) sign+= isWrap?"\r\n":"<br/>";
|
|
|
sign += text;
|
|
|
//处理打卡数据==================
|
|
|
|
|
|
if (absenteeismMins > 0) {//旷工
|
|
|
if(text.length()>0) text+=" ";
|
|
|
text += SystemEnv.getHtmlLabelName(20085, user.getLanguage());
|
|
|
// text += ":"+KQDurationCalculatorUtil.getDurationRound(("" + (Util.getDoubleValue(""+absenteeismMins) / 60.0)))+"小时";
|
|
|
if(yichang.indexOf(SystemEnv.getHtmlLabelName(20085, user.getLanguage()))==-1){
|
|
|
if(yichang.length()>0) yichang+= isWrap?"\r\n":"<br/>";
|
|
|
yichang += SystemEnv.getHtmlLabelName(20085, user.getLanguage());
|
|
|
}
|
|
|
}else {
|
|
|
if (beLateMins > 0) {//迟到
|
|
|
if (text.length() > 0) text += " ";
|
|
|
text += SystemEnv.getHtmlLabelName(20081, user.getLanguage());
|
|
|
// text += ":"+KQDurationCalculatorUtil.getDurationRound(("" + (Util.getDoubleValue(""+beLateMins) / 60.0)))+"小时";
|
|
|
if(yichang.indexOf(SystemEnv.getHtmlLabelName(20081, user.getLanguage()))==-1) {
|
|
|
if (yichang.length() > 0) yichang += isWrap?"\r\n":"<br/>";
|
|
|
yichang += SystemEnv.getHtmlLabelName(20081, user.getLanguage());
|
|
|
}
|
|
|
}
|
|
|
if (graveBeLateMins > 0) {//严重迟到
|
|
|
if (text.length() > 0) text += " ";
|
|
|
text += SystemEnv.getHtmlLabelName(500546, user.getLanguage());
|
|
|
// text += ":"+KQDurationCalculatorUtil.getDurationRound(("" + (Util.getDoubleValue(""+graveBeLateMins) / 60.0)))+"小时";
|
|
|
if(yichang.indexOf(SystemEnv.getHtmlLabelName(500546, user.getLanguage()))==-1) {
|
|
|
if (yichang.length() > 0) yichang += isWrap?"\r\n":"<br/>";
|
|
|
yichang += SystemEnv.getHtmlLabelName(500546, user.getLanguage());
|
|
|
}
|
|
|
}
|
|
|
if (leaveEarlyMins > 0) {//早退
|
|
|
if (text.length() > 0) text += " ";
|
|
|
text += SystemEnv.getHtmlLabelName(20082, user.getLanguage());
|
|
|
// text += ":"+KQDurationCalculatorUtil.getDurationRound(("" + (Util.getDoubleValue(""+leaveEarlyMins) / 60.0)))+"小时";
|
|
|
if(yichang.indexOf(SystemEnv.getHtmlLabelName(20082, user.getLanguage()))==-1) {
|
|
|
if (yichang.length() > 0) yichang += isWrap?"\r\n":"<br/>";
|
|
|
yichang += SystemEnv.getHtmlLabelName(20082, user.getLanguage());
|
|
|
}
|
|
|
}
|
|
|
if (graveLeaveEarlyMins > 0) {//严重早退
|
|
|
if (text.length() > 0) text += " ";
|
|
|
text += SystemEnv.getHtmlLabelName(500547, user.getLanguage());
|
|
|
// text += ":"+KQDurationCalculatorUtil.getDurationRound(("" + (Util.getDoubleValue(""+graveLeaveEarlyMins) / 60.0)))+"小时";
|
|
|
if(yichang.indexOf(SystemEnv.getHtmlLabelName(500547, user.getLanguage()))==-1) {
|
|
|
if (yichang.length() > 0) yichang += isWrap?"\r\n":"<br/>";
|
|
|
yichang += SystemEnv.getHtmlLabelName(500547, user.getLanguage());
|
|
|
}
|
|
|
}
|
|
|
if (forgotCheckMins > 0) {//漏签
|
|
|
if (text.length() > 0) text += " ";
|
|
|
text += SystemEnv.getHtmlLabelName(20086, user.getLanguage());
|
|
|
if(yichang.indexOf(SystemEnv.getHtmlLabelName(20086, user.getLanguage()))==-1) {
|
|
|
if (yichang.length() > 0) yichang += isWrap?"\r\n":"<br/>";
|
|
|
yichang += SystemEnv.getHtmlLabelName(20086, user.getLanguage());
|
|
|
}
|
|
|
}
|
|
|
if (forgotBeginWorkCheckMins > 0) {//漏签
|
|
|
if (text.length() > 0) text += " ";
|
|
|
text += SystemEnv.getHtmlLabelName(20086, user.getLanguage());
|
|
|
if(yichang.indexOf(SystemEnv.getHtmlLabelName(20086, user.getLanguage()))==-1) {
|
|
|
if (yichang.length() > 0) yichang += isWrap?"\r\n":"<br/>";
|
|
|
yichang += SystemEnv.getHtmlLabelName(20086, user.getLanguage());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (leaveMins > 0) {//请假
|
|
|
Map<String,Object> jsonObject = null;
|
|
|
if(leaveInfo.length()>0){
|
|
|
jsonObject = JSON.parseObject(leaveInfo);
|
|
|
for (Entry<String,Object> entry : jsonObject.entrySet()) {
|
|
|
String newLeaveType = entry.getKey();
|
|
|
String tmpLeaveMins = Util.null2String(entry.getValue());
|
|
|
if(text.indexOf(kqLeaveRulesComInfo.getLeaveName(newLeaveType))==-1){
|
|
|
if (text.length() > 0) text += " ";
|
|
|
//text += kqLeaveRulesComInfo.getLeaveName(newLeaveType)+tmpLeaveMins+SystemEnv.getHtmlLabelName(15049, user.getLanguage());
|
|
|
text += Util.formatMultiLang( kqLeaveRulesComInfo.getLeaveName(newLeaveType),""+user.getLanguage());
|
|
|
// text += ":"+KQDurationCalculatorUtil.getDurationRound(("" + (Util.getDoubleValue(""+leaveMins) / 60.0)))+"小时";
|
|
|
if(yichang.length()>0) yichang+= isWrap?"\r\n":"<br/>";
|
|
|
yichang += Util.formatMultiLang( kqLeaveRulesComInfo.getLeaveName(newLeaveType),""+user.getLanguage());
|
|
|
}
|
|
|
}
|
|
|
}else{
|
|
|
if(text.indexOf(SystemEnv.getHtmlLabelName(670, user.getLanguage()))==-1) {
|
|
|
if (text.length() > 0) text += " ";
|
|
|
text += SystemEnv.getHtmlLabelName(670, user.getLanguage());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (evectionMins > 0) {//出差
|
|
|
if(text.indexOf(SystemEnv.getHtmlLabelName(20084, user.getLanguage()))==-1) {
|
|
|
if (text.length() > 0) text += " ";
|
|
|
text += SystemEnv.getHtmlLabelName(20084, user.getLanguage());
|
|
|
// text += ":"+KQDurationCalculatorUtil.getDurationRound(("" + (Util.getDoubleValue(""+evectionMins) / 60.0)))+"小时";
|
|
|
if(yichang.length()>0) yichang+= isWrap?"\r\n":"<br/>";
|
|
|
yichang += SystemEnv.getHtmlLabelName(20084, user.getLanguage());
|
|
|
}
|
|
|
}
|
|
|
if (outMins > 0) {//公出
|
|
|
if(text.indexOf(SystemEnv.getHtmlLabelName(24058, user.getLanguage()))==-1) {
|
|
|
if (text.length() > 0) text += " ";
|
|
|
text += SystemEnv.getHtmlLabelName(24058, user.getLanguage());
|
|
|
// text += ":"+KQDurationCalculatorUtil.getDurationRound(("" + (Util.getDoubleValue(""+outMins) / 60.0)))+"小时";
|
|
|
if(yichang.length()>0) yichang+= isWrap?"\r\n":"<br/>";
|
|
|
yichang += SystemEnv.getHtmlLabelName(24058, user.getLanguage());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if(text.length()==0) {
|
|
|
text = "√";
|
|
|
}else{
|
|
|
flag = "false";//有其他的异常状态,则表示为false,不需要处理直接全部显示即可
|
|
|
}
|
|
|
text += overtime;
|
|
|
|
|
|
|
|
|
//需要处理下打卡时间和异常状态显示的顺序--start
|
|
|
tmpstatusdata.put(key, yichang);
|
|
|
tmpstatusdata.put(signkey, sign);
|
|
|
boolean hasyichang = tmpstatusdata.get(key).length()>0;
|
|
|
if(tmptext.length()>0){
|
|
|
// text = tmpstatusdata.get(signkey)+(isWrap?"\r\n":"<br/>")+tmpstatusdata.get(key)+(isWrap?"\r\n":"<br/>"+overtime);
|
|
|
text = tmpstatusdata.get(signkey);
|
|
|
if(hasyichang){
|
|
|
text += (isWrap?"\r\n":"<br/>")+tmpstatusdata.get(key);
|
|
|
}
|
|
|
if(hasovertime){
|
|
|
text += (isWrap?"\r\n":"<br/>")+overtime;
|
|
|
}
|
|
|
}else{
|
|
|
text = tmpstatusdata.get(signkey);
|
|
|
if(hasyichang){
|
|
|
text += (isWrap?"\r\n":"<br/>")+tmpstatusdata.get(key);
|
|
|
}
|
|
|
if(hasovertime){
|
|
|
text += (isWrap?"\r\n":"<br/>")+overtime;
|
|
|
}
|
|
|
}
|
|
|
//需要处理下打卡时间和异常状态显示的顺序--end
|
|
|
|
|
|
// text = tmptext.length()>0?tmptext+" "+text:text;//显示所有的状态
|
|
|
data.put("text", text);
|
|
|
datas.put(key, data);
|
|
|
|
|
|
//add
|
|
|
tmpdata.put("text", flag);
|
|
|
tmpdatas.put(key, tmpdata);
|
|
|
//end
|
|
|
}
|
|
|
//全部搞一遍
|
|
|
if(tmpdatas != null){
|
|
|
// writeLog(n+">>>tmpdatas="+JSONObject.toJSONString(tmpdatas));
|
|
|
Map<String,Object> data1 = null;
|
|
|
for(Entry<String,Object> entry : tmpdatas.entrySet()){
|
|
|
String mapKey = Util.null2String(entry.getKey());
|
|
|
Map<String,Object> mapValue = (Map<String,Object>)entry.getValue();
|
|
|
String flag = Util.null2String(mapValue.get("text"));
|
|
|
if("true".equals(flag)){//需要加工的数据
|
|
|
data1 = new HashMap<>();
|
|
|
data1.put("text", "√");
|
|
|
datas.put(mapKey, data1);
|
|
|
}
|
|
|
}
|
|
|
// writeLog("datas="+JSONObject.toJSONString(datas));
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
}
|
|
|
// 最后针对数据再处理一遍,不然出现2023-01-02: "休息" 形式的错误,导致页面记载报错,应该是2023-01-01: {text: "休息"}格式
|
|
|
boolean isEnd = false;
|
|
|
for(String currentDate = fromDate; !isEnd;) {
|
|
|
if (currentDate.equals(toDate)) isEnd = true;
|
|
|
String dailyValue = Util.null2String(datas.get(currentDate));
|
|
|
if(!"".equals(dailyValue) && !dailyValue.contains("text")) {
|
|
|
Map<String,Object> innerMap2 = new HashMap<>();
|
|
|
innerMap2.put("text", dailyValue);
|
|
|
datas.put(currentDate, innerMap2);
|
|
|
}
|
|
|
currentDate = DateUtil.addDate(currentDate, 1);
|
|
|
}
|
|
|
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
// public String getSignStatus(Map<String,Object> data, User user){
|
|
|
// String result = "";
|
|
|
// String signtype = Util.null2String(data.get("signtype"));//上班 下班
|
|
|
// String worktime = Util.null2String(data.get("worktime"));//工作时间
|
|
|
// String signtime = Util.null2String(data.get("signtime"));//签到时间
|
|
|
// String abnormalMins = Util.null2String(data.get("abnormalMins"));//异常分钟数
|
|
|
// String forgotCheck = Util.null2String(data.get("forgotCheck"));//漏签
|
|
|
// if(worktime.length()>0){
|
|
|
// if(signtime.length()>0){
|
|
|
// if(Util.getDoubleValue(abnormalMins)>0){
|
|
|
// result =SystemEnv.getHtmlLabelName(signtype.equals("1")?20081:20082, user.getLanguage())+abnormalMins+SystemEnv.getHtmlLabelName(15049, user.getLanguage());//迟到 早退
|
|
|
// }else{
|
|
|
// result =SystemEnv.getHtmlLabelName(225, user.getLanguage());//正常
|
|
|
// }
|
|
|
// }else if(forgotCheck.equals("1")){
|
|
|
// result =SystemEnv.getHtmlLabelName(20086, user.getLanguage());//漏签
|
|
|
// }
|
|
|
// }else{
|
|
|
// result = "";
|
|
|
// }
|
|
|
//
|
|
|
// return result;
|
|
|
// }
|
|
|
|
|
|
public int getSerialCount(String resourceId, String fromDate, String toDate, String serialId){
|
|
|
RecordSet rs = new RecordSet();
|
|
|
String sql = "";
|
|
|
int serialCount = 0;
|
|
|
try{
|
|
|
sql = "select count(1) from hrmresource a, kq_format_total b where a.id= b.resourceid and b.resourceid = ? and b.kqdate >=? and b.kqdate <=? and b.serialId = ? ";
|
|
|
rs.executeQuery(sql,resourceId,fromDate,toDate, serialId);
|
|
|
if(rs.next()){
|
|
|
serialCount = rs.getInt(1);
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
}
|
|
|
return serialCount;
|
|
|
}
|
|
|
|
|
|
public static String getSignStatus(Map<String,Object> signInfo, User user){
|
|
|
return getSignStatus(signInfo,user,"");
|
|
|
}
|
|
|
|
|
|
public static String getSignStatus(Map<String,Object> signInfo, User user,String onOrOff){
|
|
|
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
|
|
|
String text = "";
|
|
|
String workdate = Util.null2String(signInfo.get("workdate"));
|
|
|
String worktime = Util.null2String(signInfo.get("worktime"));
|
|
|
if(!new KQFormatBiz().needCal(workdate,worktime)) {//还未到时间无需计算
|
|
|
return text;
|
|
|
}
|
|
|
int absenteeismMins = Util.getIntValue(Util.null2String(signInfo.get("absenteeismMins")));
|
|
|
int beLateMins = Util.getIntValue(Util.null2String(signInfo.get("beLateMins")));
|
|
|
int graveBeLateMins = Util.getIntValue(Util.null2String(signInfo.get("graveBeLateMins")));
|
|
|
int leaveEarlyMins = Util.getIntValue(Util.null2String(signInfo.get("leaveEarlyMins")));
|
|
|
int graveLeaveEarlyMins = Util.getIntValue(Util.null2String(signInfo.get("graveLeaveEarlyMins")));
|
|
|
int forgotCheckMins = Util.getIntValue(Util.null2String(signInfo.get("forgotCheckMins")));
|
|
|
int forgotBeginWorkCheckMins = Util.getIntValue(Util.null2String(signInfo.get("forgotBeginWorkCheckMins")));
|
|
|
int leaveMins = Util.getIntValue(Util.null2String(signInfo.get("leaveMins")));
|
|
|
String leaveInfo = Util.null2String(signInfo.get("leaveInfo"));
|
|
|
int evectionMins = Util.getIntValue(Util.null2String(signInfo.get("evectionMins")));
|
|
|
int outMins = Util.getIntValue(Util.null2String(signInfo.get("outMins")));
|
|
|
|
|
|
if(worktime.length()>0){
|
|
|
if (absenteeismMins > 0) {//旷工
|
|
|
text = SystemEnv.getHtmlLabelName(20085, user.getLanguage())+absenteeismMins+SystemEnv.getHtmlLabelName(15049, user.getLanguage());
|
|
|
}else {
|
|
|
if (beLateMins > 0) {//迟到
|
|
|
text = SystemEnv.getHtmlLabelName(20081, user.getLanguage())+beLateMins+SystemEnv.getHtmlLabelName(15049, user.getLanguage());
|
|
|
}
|
|
|
if (graveBeLateMins > 0) {//严重迟到
|
|
|
text = SystemEnv.getHtmlLabelName(500546, user.getLanguage())+graveBeLateMins+SystemEnv.getHtmlLabelName(15049, user.getLanguage());
|
|
|
}
|
|
|
if (leaveEarlyMins > 0) {//早退
|
|
|
text = SystemEnv.getHtmlLabelName(20082, user.getLanguage())+leaveEarlyMins+SystemEnv.getHtmlLabelName(15049, user.getLanguage());
|
|
|
}
|
|
|
if (graveLeaveEarlyMins > 0) {//严重早退
|
|
|
text = SystemEnv.getHtmlLabelName(500547, user.getLanguage())+graveLeaveEarlyMins+SystemEnv.getHtmlLabelName(15049, user.getLanguage());
|
|
|
}
|
|
|
if (forgotCheckMins > 0) {//漏签
|
|
|
text = SystemEnv.getHtmlLabelName(20086, user.getLanguage());
|
|
|
}
|
|
|
if(onOrOff.length() > 0 && "on".equalsIgnoreCase(onOrOff)){
|
|
|
if (forgotBeginWorkCheckMins > 0) {//漏签
|
|
|
text = SystemEnv.getHtmlLabelName(20086, user.getLanguage());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (leaveMins > 0) {//请假
|
|
|
Map<String,Object> jsonObject = null;
|
|
|
if(leaveInfo.length()>0){
|
|
|
jsonObject = JSON.parseObject(leaveInfo);
|
|
|
for (Entry<String,Object> entry : jsonObject.entrySet()) {
|
|
|
String newLeaveType = entry.getKey();
|
|
|
String tmpLeaveMins = Util.null2String(entry.getValue());
|
|
|
if(text.indexOf(kqLeaveRulesComInfo.getLeaveName(newLeaveType))==-1){
|
|
|
if (text.length() > 0) text += " ";
|
|
|
//text += kqLeaveRulesComInfo.getLeaveName(newLeaveType)+tmpLeaveMins+SystemEnv.getHtmlLabelName(15049, user.getLanguage());
|
|
|
text += Util.formatMultiLang(kqLeaveRulesComInfo.getLeaveName(newLeaveType),""+user.getLanguage());
|
|
|
}
|
|
|
}
|
|
|
}else{
|
|
|
if(text.indexOf(SystemEnv.getHtmlLabelName(670, user.getLanguage()))==-1) {
|
|
|
if (text.length() > 0) text += " ";
|
|
|
text += SystemEnv.getHtmlLabelName(670, user.getLanguage());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (evectionMins > 0) {//出差
|
|
|
if(text.indexOf(SystemEnv.getHtmlLabelName(20084, user.getLanguage()))==-1) {
|
|
|
if (text.length() > 0) text += " ";
|
|
|
text += SystemEnv.getHtmlLabelName(20084, user.getLanguage());
|
|
|
}
|
|
|
}
|
|
|
if (outMins > 0) {//公出
|
|
|
if(text.indexOf(SystemEnv.getHtmlLabelName(24058, user.getLanguage()))==-1) {
|
|
|
if (text.length() > 0) text += " ";
|
|
|
text += SystemEnv.getHtmlLabelName(24058, user.getLanguage());
|
|
|
}
|
|
|
}
|
|
|
if(text.equals("")){
|
|
|
boolean needCal = new KQFormatBiz().needCal(workdate,worktime);
|
|
|
text = needCal?SystemEnv.getHtmlLabelName(225, user.getLanguage()):"";
|
|
|
}
|
|
|
}else{
|
|
|
if (leaveMins > 0) {//请假
|
|
|
Map<String,Object> jsonObject = null;
|
|
|
if(leaveInfo.length()>0){
|
|
|
jsonObject = JSON.parseObject(leaveInfo);
|
|
|
for (Entry<String,Object> entry : jsonObject.entrySet()) {
|
|
|
String newLeaveType = entry.getKey();
|
|
|
String tmpLeaveMins = Util.null2String(entry.getValue());
|
|
|
if(text.indexOf(kqLeaveRulesComInfo.getLeaveName(newLeaveType))==-1){
|
|
|
if (text.length() > 0) text += " ";
|
|
|
//text += kqLeaveRulesComInfo.getLeaveName(newLeaveType)+tmpLeaveMins+SystemEnv.getHtmlLabelName(15049, user.getLanguage());
|
|
|
text += Util.formatMultiLang(kqLeaveRulesComInfo.getLeaveName(newLeaveType));
|
|
|
}
|
|
|
}
|
|
|
}else{
|
|
|
if(text.indexOf(SystemEnv.getHtmlLabelName(670, user.getLanguage()))==-1) {
|
|
|
if (text.length() > 0) text += " ";
|
|
|
text += SystemEnv.getHtmlLabelName(670, user.getLanguage());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (evectionMins > 0) {//出差
|
|
|
if(text.indexOf(SystemEnv.getHtmlLabelName(20084, user.getLanguage()))==-1) {
|
|
|
if (text.length() > 0) text += " ";
|
|
|
text += SystemEnv.getHtmlLabelName(20084, user.getLanguage());
|
|
|
}
|
|
|
}
|
|
|
if (outMins > 0) {//公出
|
|
|
if(text.indexOf(SystemEnv.getHtmlLabelName(24058, user.getLanguage()))==-1) {
|
|
|
if (text.length() > 0) text += " ";
|
|
|
text += SystemEnv.getHtmlLabelName(24058, user.getLanguage());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return text;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取打卡状态(不包含具体分钟数)
|
|
|
* @param signInfo
|
|
|
* @param user
|
|
|
* @param onOrOff
|
|
|
* @return
|
|
|
*/
|
|
|
public static String getSignStatus2(Map<String, Object> signInfo, User user, String onOrOff) {
|
|
|
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
|
|
|
String text = "";
|
|
|
String worktime = Util.null2String(signInfo.get("worktime"));
|
|
|
int absenteeismMins = Util.getIntValue(Util.null2String(signInfo.get("absenteeismMins")));
|
|
|
int beLateMins = Util.getIntValue(Util.null2String(signInfo.get("beLateMins")));
|
|
|
int graveBeLateMins = Util.getIntValue(Util.null2String(signInfo.get("graveBeLateMins")));
|
|
|
int leaveEarlyMins = Util.getIntValue(Util.null2String(signInfo.get("leaveEarlyMins")));
|
|
|
int graveLeaveEarlyMins = Util.getIntValue(Util.null2String(signInfo.get("graveLeaveEarlyMins")));
|
|
|
int forgotCheckMins = Util.getIntValue(Util.null2String(signInfo.get("forgotCheckMins")));
|
|
|
int forgotBeginWorkCheckMins = Util.getIntValue(Util.null2String(signInfo.get("forgotBeginWorkCheckMins")));
|
|
|
int leaveMins = Util.getIntValue(Util.null2String(signInfo.get("leaveMins")));
|
|
|
String leaveInfo = Util.null2String(signInfo.get("leaveInfo"));
|
|
|
int evectionMins = Util.getIntValue(Util.null2String(signInfo.get("evectionMins")));
|
|
|
int outMins = Util.getIntValue(Util.null2String(signInfo.get("outMins")));
|
|
|
|
|
|
if (worktime.length() > 0) {
|
|
|
if (absenteeismMins > 0) {//旷工
|
|
|
text = SystemEnv.getHtmlLabelName(20085, user.getLanguage());
|
|
|
} else {
|
|
|
if (beLateMins > 0) {//迟到
|
|
|
text = SystemEnv.getHtmlLabelName(20081, user.getLanguage());
|
|
|
}
|
|
|
if (graveBeLateMins > 0) {//严重迟到
|
|
|
text = SystemEnv.getHtmlLabelName(500546, user.getLanguage());
|
|
|
}
|
|
|
if (leaveEarlyMins > 0) {//早退
|
|
|
text = SystemEnv.getHtmlLabelName(20082, user.getLanguage());
|
|
|
}
|
|
|
if (graveLeaveEarlyMins > 0) {//严重早退
|
|
|
text = SystemEnv.getHtmlLabelName(500547, user.getLanguage());
|
|
|
}
|
|
|
if (forgotCheckMins > 0) {//漏签
|
|
|
text = SystemEnv.getHtmlLabelName(20086, user.getLanguage());
|
|
|
}
|
|
|
if (onOrOff.length() > 0 && "on".equalsIgnoreCase(onOrOff)) {
|
|
|
if (forgotBeginWorkCheckMins > 0) {//漏签
|
|
|
text = SystemEnv.getHtmlLabelName(20086, user.getLanguage());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (text.equals("") && leaveMins <= 0 && evectionMins <= 0 && outMins <= 0) {
|
|
|
text = SystemEnv.getHtmlLabelName(225, user.getLanguage());
|
|
|
}
|
|
|
}
|
|
|
return text;
|
|
|
}
|
|
|
|
|
|
public static boolean getShowFlowText(String leaveInfo,String onOrOff){
|
|
|
Map<String,Object> jsonObject = null;
|
|
|
jsonObject = JSON.parseObject(leaveInfo);
|
|
|
String flow_signtype = "";
|
|
|
for (Entry<String,Object> entry : jsonObject.entrySet()) {
|
|
|
String tmpSignType = Util.null2String(entry.getValue());
|
|
|
flow_signtype += ","+tmpSignType;
|
|
|
}
|
|
|
if(flow_signtype.length() == 0){
|
|
|
return true;
|
|
|
}
|
|
|
return isShowFlowText(flow_signtype,onOrOff);
|
|
|
}
|
|
|
|
|
|
public static boolean isShowFlowText(String flow_signtype,String onOrOff){
|
|
|
boolean showFlowText = true;
|
|
|
|
|
|
if(flow_signtype.length() > 0){
|
|
|
flow_signtype = flow_signtype.substring(1);
|
|
|
if("on".equalsIgnoreCase(onOrOff)){
|
|
|
if((","+flow_signtype+",").indexOf(",1,") > -1){
|
|
|
//抵扣了上班卡
|
|
|
}else{
|
|
|
//上班状态,但是没有上班抵扣流程
|
|
|
showFlowText = false;
|
|
|
}
|
|
|
}
|
|
|
if("off".equalsIgnoreCase(onOrOff)){
|
|
|
if((","+flow_signtype+",").indexOf(",2,") > -1){
|
|
|
//抵扣了下班卡
|
|
|
}else{
|
|
|
//下班状态,但是没有下班抵扣流程
|
|
|
showFlowText = false;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return showFlowText;
|
|
|
}
|
|
|
|
|
|
public static int getPageSize(String pageSize, String pageUid, int userid){
|
|
|
String sql = "";
|
|
|
RecordSet rs = new RecordSet();
|
|
|
int iPageSize= Util.getIntValue(pageSize,10);
|
|
|
if(iPageSize<10)iPageSize=10;
|
|
|
try{
|
|
|
if(pageSize.length()>0){
|
|
|
boolean flag = false;
|
|
|
sql = "select count(1) from ecology_pagesize where pageid = '"+pageUid+"' and userid ="+userid;
|
|
|
rs.executeQuery(sql);
|
|
|
if(rs.next()){
|
|
|
if(rs.getInt(1)>0){
|
|
|
flag = true;
|
|
|
}
|
|
|
}
|
|
|
if(flag){
|
|
|
sql = "update ecology_pagesize set pagesize ="+pageSize+" where pageid = '"+pageUid+"' and userid ="+userid;
|
|
|
rs.executeUpdate(sql);
|
|
|
}else{
|
|
|
sql = "insert into ecology_pagesize (pageid,pagesize,userid) values ('"+pageUid+"',"+pageSize+","+userid+")";
|
|
|
rs.executeUpdate(sql);
|
|
|
}
|
|
|
}else{
|
|
|
sql = "select pageSize from ecology_pagesize where pageid = '"+pageUid+"' and userid ="+userid;
|
|
|
rs.executeQuery(sql);
|
|
|
if(rs.next()){
|
|
|
iPageSize = rs.getInt("pageSize");
|
|
|
}
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
new BaseBean().writeLog("KQReportBiz.getPageSize"+e);
|
|
|
}
|
|
|
|
|
|
return iPageSize;
|
|
|
}
|
|
|
|
|
|
//经常遇到申请变更流程或销假流程提示未归档,不胜其烦,所以搞一下
|
|
|
public void reflow(String requestid){
|
|
|
try {
|
|
|
requestid = Util.null2String(requestid);
|
|
|
String workflowid = "";
|
|
|
String currentnodetype = "";
|
|
|
if(requestid.length() == 0){
|
|
|
return;
|
|
|
}
|
|
|
RecordSet rs2 = new RecordSet();
|
|
|
String sql = "select requestid,workflowid,currentnodetype from workflow_requestbase where requestid = '"+requestid+"'";
|
|
|
rs2.executeQuery(sql);
|
|
|
if(rs2.next()){
|
|
|
workflowid = Util.null2String(rs2.getString("workflowid"));
|
|
|
currentnodetype = Util.null2String(rs2.getString("currentnodetype"));
|
|
|
}
|
|
|
|
|
|
boolean isForce1 = false;
|
|
|
boolean isUpgrade1 = false;
|
|
|
if(requestid.length() == 0){
|
|
|
return ;
|
|
|
}
|
|
|
if(workflowid.length() == 0){
|
|
|
return ;
|
|
|
}
|
|
|
if(!"3".equals(currentnodetype)){
|
|
|
return ;
|
|
|
}
|
|
|
long start = System.currentTimeMillis();
|
|
|
|
|
|
KQFlowActiontBiz kqFlowActiontBiz = new KQFlowActiontBiz();
|
|
|
RecordSet rs = new RecordSet();
|
|
|
RecordSet rs1 = new RecordSet();
|
|
|
String proc_set_sql = "select * from kq_att_proc_set where field001 = ? ";
|
|
|
rs.executeQuery(proc_set_sql, workflowid);
|
|
|
if(rs.next()){
|
|
|
String proc_set_id = rs.getString("id");
|
|
|
//得到这个考勤流程设置是否使用明细
|
|
|
String usedetails = rs.getString("usedetail");
|
|
|
|
|
|
int kqtype = Util.getIntValue(rs.getString("field006"));
|
|
|
|
|
|
Map<String, String> map = new HashMap<String, String>();
|
|
|
if(Util.getIntValue(requestid) > 0){
|
|
|
map.put("requestId", "and t.requestId = " + requestid);
|
|
|
}
|
|
|
String tablename = "";
|
|
|
if(kqtype == KqSplitFlowTypeEnum.LEAVE.getFlowtype()){
|
|
|
tablename = KqSplitFlowTypeEnum.LEAVE.getTablename();
|
|
|
}else if(kqtype == KqSplitFlowTypeEnum.EVECTION.getFlowtype()){
|
|
|
tablename = KqSplitFlowTypeEnum.EVECTION.getTablename();
|
|
|
}else if(kqtype == KqSplitFlowTypeEnum.OUT.getFlowtype()){
|
|
|
tablename = KqSplitFlowTypeEnum.OUT.getTablename();;
|
|
|
}else if(kqtype == KqSplitFlowTypeEnum.OVERTIME.getFlowtype()){
|
|
|
tablename = KqSplitFlowTypeEnum.OVERTIME.getTablename();;
|
|
|
}else if(kqtype == KqSplitFlowTypeEnum.SHIFT.getFlowtype()){
|
|
|
tablename = KqSplitFlowTypeEnum.SHIFT.getTablename();;
|
|
|
}else if(kqtype == KqSplitFlowTypeEnum.OTHER.getFlowtype()){
|
|
|
tablename = KqSplitFlowTypeEnum.OTHER.getTablename();;
|
|
|
}else if(kqtype == KqSplitFlowTypeEnum.CARD.getFlowtype()){
|
|
|
tablename = KqSplitFlowTypeEnum.CARD.getTablename();;
|
|
|
return;
|
|
|
}else if(kqtype == KqSplitFlowTypeEnum.LEAVEBACK.getFlowtype()){
|
|
|
tablename = KqSplitFlowTypeEnum.LEAVEBACK.getTablename();;
|
|
|
}else{
|
|
|
return;
|
|
|
}
|
|
|
if(null != tablename && tablename.length() > 0){
|
|
|
String tmpsql = "select * from "+tablename+" where requestId="+requestid;
|
|
|
rs1.executeQuery(tmpsql);
|
|
|
if(rs1.next()){
|
|
|
return;//表示已经产生了拆分数据
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//先根据requestid删除中间表里的数据,再做啥插入操作
|
|
|
String delSql = "delete from "+tablename+" where requestid = "+requestid;
|
|
|
rs1.executeUpdate(delSql);
|
|
|
if(kqtype == KqSplitFlowTypeEnum.OVERTIME.getFlowtype()) {
|
|
|
delSql = "delete from kq_flow_overtime where requestid = "+requestid;
|
|
|
rs1.executeUpdate(delSql);
|
|
|
}
|
|
|
|
|
|
Map<String,String> result = kqFlowActiontBiz.handleKQFlowAction(proc_set_id, usedetails, Util.getIntValue(requestid), kqtype, Util.getIntValue(workflowid), isForce1,isUpgrade1,map);
|
|
|
|
|
|
if(!result.isEmpty()){
|
|
|
|
|
|
}
|
|
|
}
|
|
|
long end = System.currentTimeMillis();
|
|
|
}catch (Exception e){
|
|
|
e.printStackTrace();;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
//add
|
|
|
public Map<String,Object> getOverTime(Map<String,Object> params, User user){
|
|
|
Map<String,Object> datas = new HashMap<>();;
|
|
|
RecordSet rs = new RecordSet();
|
|
|
String sql = "";
|
|
|
String sqlWhere = " ";
|
|
|
try{
|
|
|
KQOvertimeRulesBiz kqOvertimeRulesBiz = new KQOvertimeRulesBiz();
|
|
|
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
|
|
|
String fromDate = Util.null2String(jsonObj.get("fromDate"));
|
|
|
String toDate = Util.null2String(jsonObj.get("toDate"));
|
|
|
String typeselect =Util.null2String(jsonObj.get("typeselect"));
|
|
|
if(typeselect.length()==0)typeselect = "3";
|
|
|
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
|
|
|
if(typeselect.equals("1")){
|
|
|
fromDate = TimeUtil.getCurrentDateString();
|
|
|
toDate = TimeUtil.getCurrentDateString();
|
|
|
}else{
|
|
|
fromDate = TimeUtil.getDateByOption(typeselect,"0");
|
|
|
toDate = TimeUtil.getDateByOption(typeselect,"1");
|
|
|
}
|
|
|
}
|
|
|
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
|
|
|
String departmentId = Util.null2String(jsonObj.get("departmentId"));
|
|
|
String resourceId = Util.null2String(jsonObj.get("resourceId"));
|
|
|
String allLevel = Util.null2String(jsonObj.get("allLevel"));
|
|
|
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
|
|
|
String viewScope = Util.null2String(jsonObj.get("viewScope"));
|
|
|
if(subCompanyId.length()>0){
|
|
|
sqlWhere +=" and a.subcompanyid1 in("+subCompanyId+") ";
|
|
|
}
|
|
|
|
|
|
if(departmentId.length()>0){
|
|
|
sqlWhere +=" and a.departmentid in("+departmentId+") ";
|
|
|
}
|
|
|
|
|
|
if(resourceId.length()>0){
|
|
|
sqlWhere +=" and a.id in("+resourceId+") ";
|
|
|
}
|
|
|
|
|
|
if(viewScope.equals("4")){//我的下属
|
|
|
if(allLevel.equals("1")){//所有下属
|
|
|
sqlWhere+=" and a.managerstr like '%,"+user.getUID()+",%'";
|
|
|
}else{
|
|
|
sqlWhere+=" and a.managerid="+user.getUID();//直接下属
|
|
|
}
|
|
|
}
|
|
|
if (!"1".equals(isNoAccount)) {
|
|
|
sqlWhere += " and a.loginid is not null "+(rs.getDBType().equals("oracle")?"":" and a.loginid<>'' ");
|
|
|
}
|
|
|
|
|
|
int uintType = Util.getIntValue(Util.null2String(params.get("uintType")));//当前加班单位
|
|
|
double hoursToDay = Util.getDoubleValue(Util.null2String(params.get("hoursToDay")));//当前天跟小时计算关系
|
|
|
|
|
|
String valueField = "";
|
|
|
|
|
|
sql = " select resourceid,belongdate,paidLeaveEnable,duration_min "+
|
|
|
" from hrmresource a, kq_flow_overtime b "+
|
|
|
" where a.id = b.resourceid and belongdate >='"+fromDate+"' and belongdate <='"+toDate+"' " +sqlWhere+
|
|
|
" order by resourceid,belongdate ";
|
|
|
rs.execute(sql);
|
|
|
// kqLog.info("getOverTime:sql:"+sql);
|
|
|
while (rs.next()) {
|
|
|
String resourceid = rs.getString("resourceid");
|
|
|
String belongdate = rs.getString("belongdate");
|
|
|
String paidLeaveEnable = rs.getString("paidLeaveEnable");
|
|
|
// int changeType =rs.getInt("changeType");//1-节假日、2-工作日、3-休息日
|
|
|
double value = rs.getDouble("duration_min")<0?0:rs.getDouble("duration_min");
|
|
|
if(uintType==3 || uintType== 5 || uintType== 6){//按小时计算
|
|
|
value = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(value/(60.0)+""));
|
|
|
}else{//按天计算
|
|
|
value = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(value/(60.0*hoursToDay)+""));
|
|
|
}
|
|
|
String key = resourceid+"|"+belongdate+"|overtime";
|
|
|
if(value>0){
|
|
|
df.setMaximumFractionDigits(5);
|
|
|
if(datas.containsKey(key)){
|
|
|
double tmpVal = Util.getDoubleValue(Util.null2String(datas.get(key)),0.0);
|
|
|
tmpVal += value;
|
|
|
datas.put(key,format(tmpVal));
|
|
|
}else{
|
|
|
datas.put(key,format(value));
|
|
|
}
|
|
|
|
|
|
// if(datas.containsKey(key)){
|
|
|
// datas.put(key,"加班");
|
|
|
//// datas.put(key,SystemEnv.getHtmlLabelName(6151, user.getLanguage()));
|
|
|
// }else{
|
|
|
// datas.put(key,"加班");
|
|
|
// }
|
|
|
}
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
writeLog(e);
|
|
|
}
|
|
|
return datas;
|
|
|
}
|
|
|
}
|