You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
weaver-hostar/src/com/engine/hostar/thread/HandleCBDataThread.java

1163 lines
68 KiB
Java

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