考勤-批量请假,明细表1数据生成按钮接口逻辑优化

zm_dev
sy 11 months ago
parent da82ed1d41
commit 10475db6b3

@ -19,6 +19,6 @@ public interface AskForLeaveService {
* -
* @param params
*/
Map<String, Object> generateLeaveInfoList(Map<String, Object> params) throws ParseException;
Map<String, Object> generateLeaveInfoList(Map<String, Object> params);
}

@ -18,7 +18,6 @@ import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import weaver.general.Util;
import java.text.ParseException;
import java.time.ZoneOffset;
import java.util.*;
import java.util.stream.Collectors;
@ -136,35 +135,131 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
/**
* -
* @param params
* @return
*/
@Override
public Map<String, Object> generateLeaveInfoList(Map<String, Object> params) throws ParseException {
Map<String,Object> resultMap = Maps.newHashMap();
List<String> errorMessage = new ArrayList<>();
// 流程表单主表数据
Map<String,String> mainTableData = (Map<String,String>)params.get("mainTableData");
// 流程表单明细表1数据
List<Map<String, String>> detailTableData = (List<Map<String, String>>)params.get("detailTableData");
//需要校验假期额度的假期类型
List<String> checkAmountJqIdList = CommonUtil.getJqInfoWithAmount();
//已编辑内容中的假期额度使用信息
Map<String, Double> editedUseJqed = new HashMap<>();
//已编辑内容中的假期类型使用时长_人员信息
Map<String, Double> editedUseJqlxWithEmp = new HashMap<>();
//假期余额时长已用完的假期余额id
List<String> unableUseJqyeIdList = new ArrayList<>();
//记录已编辑的请假记录,<人员id-请假类型-日期, 请假时长>
Map<String, String> editedLeaveInfo = new HashMap<>();
//处理明细表1数据生成之前编辑内容中已使用的假期额度信息
public Map<String, Object> generateLeaveInfoList(Map<String, Object> params){
Map<String,Object> resultMap = new HashMap<>();
try {
List<String> errorMessage = new ArrayList<>();
// 流程表单主表数据
Map<String,String> mainTableData = (Map<String,String>)params.get("mainTableData");
// 流程表单明细表1数据
List<Map<String, String>> detailTableData = (List<Map<String, String>>)params.get("detailTableData");
//需要校验假期额度的假期类型
List<String> checkAmountJqIdList = CommonUtil.getJqInfoWithAmount();
//开始日期、结束日期、请假方式、开始时间、结束时间、假期类型、请假时长
String startDate = Util.null2String(mainTableData.get("ksrq"));
String endDate = Util.null2String(mainTableData.get("jsrq"));
String startTime = Util.null2String(mainTableData.get("kssj"));
String endTime = Util.null2String(mainTableData.get("jssj"));
String leaveMode = Util.null2String(mainTableData.get("cxjqj"));
String leaveType = Util.null2String(mainTableData.get("jqlx"));
String leaveDuration = Util.null2String(mainTableData.get("qjsc"));
//获取请假日期集合
List<String> leaveDateList = DateUtil.getDatesBetween(startDate, endDate);
//已编辑内容中的假期额度使用信息
Map<String, Double> editedUseJqed = new HashMap<>();
//记录本次触发按钮时,目标日期区间内已编辑内容中的<假期类型_人员,使用时长>信息
Map<String, Double> editedUseJqlxWithEmp = new HashMap<>();
//假期余额时长已用完的假期余额id
List<String> unableUseJqyeIdList = new ArrayList<>();
//记录已编辑的请假记录,<人员id-请假类型-日期, 请假时长>
Map<String, String> editedLeaveInfo = new HashMap<>();
//处理明细表1数据生成触发接口之前编辑内容中已使用的假期额度信息
editedLeaveInfo = dealDetailTableData(detailTableData, leaveDateList, editedUseJqlxWithEmp, editedUseJqed, unableUseJqyeIdList, editedLeaveInfo);
//处理主表数据
String qjr = Util.null2String(mainTableData.get("qjr"));
//请假人姓名映射
Map<String, String> empIdToName = new HashMap<>();
//请假人员列表
List<String> leaveEmpIdList = new ArrayList<>();
if (!"".equals(qjr)) {
leaveEmpIdList = Arrays.asList(qjr.split(","));
String sql = "select id, lastname from hrmresource where id in (" + qjr + ")";
List<Map<String, Object>> data = DbTools.getSqlToList(sql);
empIdToName = data.stream().collect(Collectors.toMap(e->Util.null2String(e.get("id")),e->Util.null2String(e.get("lastname"))));
}
//获取填写的请假类型关联的考勤项目
String sql = "select id,mc,hsdw,hsl,jcbyxsyqjb,yxsydjb,qzsyyxjb,zdycbcndfgzsd,zdycrqqjndxxb from uf_jcl_kq_kqxm where id=?";
Map<String,Object> holidayItem = DbTools.getSqlToMap(sql,leaveType);
//判断是否需要自动移除时间区间内的非工作时长、自动移除日期区间内的休息日
boolean removeNonWorkTimeRange = "1".equals(Util.null2String(holidayItem.get("zdycbcndfgzsd")));
boolean removeNonWorkDayRange = "1".equals(Util.null2String(holidayItem.get("zdycrqqjndxxb")));
//判断考勤项目是否需要强制使用“优先使用项目”
boolean useFirstItemSign = CheckBoxEnum.CHECKED.getKey().equals(holidayItem.get("qzsyyxjb")) && CheckBoxEnum.CHECKED.getKey().equals(holidayItem.get("jcbyxsyqjb"));
Map<String,Object> holidayPriorityItem = useFirstItemSign ? DbTools.getSqlToMap(sql,holidayItem.get("yxsydjb")) : null;
//遍历人员、日期,生成人员+日期+请假时长的请假信息
//请假人的请假区间内每一天的日期类型信息
Map<String, List<String>> restDayInfo = removeNonWorkDayRange ? getRestDayWithEmpId(leaveEmpIdList, leaveType, startDate, endDate) : null;
//请假人的请假区间内的排班结果
Map<String, List<Map<String, Object>>> scheduleInfoMap = (removeNonWorkDayRange || removeNonWorkTimeRange) ? getScheduleInfoWithEmpId(leaveEmpIdList, startDate, endDate) : null;
//收集未关联假期余额的请假明细数据
List<Map<String, String>> simpleLeaveDetailList = createSimpleLeaveDetailList(leaveEmpIdList, leaveDateList, removeNonWorkDayRange, removeNonWorkTimeRange, scheduleInfoMap,
restDayInfo, leaveMode, startTime, endTime, leaveDuration);
//收集已关联假期余额的请假明细数据
List<Map<String, String>> completeLeaveDetailList = new ArrayList<>();
//按照人员id分组处理请假明细信息关联假期余额数据
Map<String, List<Map<String, String>>> leaveDetailGroupByEmp = simpleLeaveDetailList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("qjr"))));
for(Map.Entry<String,List<Map<String,String>>> entry : leaveDetailGroupByEmp.entrySet()) {
//校验该人员的考勤周期是否正常
boolean kqCycleAllow = kqCycleCheck(entry.getKey(), entry.getValue(), errorMessage, empIdToName.get(entry.getKey()));
if (!kqCycleAllow) {
continue;
}
//1-收集使用勾选的关联的可使用的余额才能够生成请假明细可使用的条件为a-满足最小使用时长b-满足使用次数上限c-存在未休时长
List<Map<String, Object>> canUseCheckJqyeInfo = collectUsableHolidayBalance(unableUseJqyeIdList, editedUseJqed, leaveType, startDate, entry.getKey());
List<Map<String,String>> detailListItem;
//判断考勤项目是否需要强制使用“优先使用项目”
if (useFirstItemSign) {
//2-收集优先使用的项目关联的可使用的余额才能够生成请假明细可使用的条件为a-满足最小使用时长b-满足使用次数上限c-存在未休时长
List<Map<String, Object>> canUseFirstJqyeInfo = collectUsableHolidayBalance(unableUseJqyeIdList, editedUseJqed, holidayPriorityItem.get("id").toString(), startDate, entry.getKey());
detailListItem = matchHolidayBalance(editedLeaveInfo, checkAmountJqIdList, errorMessage, entry.getKey(), empIdToName.get(entry.getKey()), canUseCheckJqyeInfo, canUseFirstJqyeInfo, editedUseJqed, editedUseJqlxWithEmp, entry.getValue(), leaveType, holidayPriorityItem.get("id").toString());
} else {
detailListItem = matchHolidayBalance(editedLeaveInfo, checkAmountJqIdList, errorMessage, entry.getKey(), empIdToName.get(entry.getKey()), canUseCheckJqyeInfo, null, editedUseJqed, editedUseJqlxWithEmp, entry.getValue(), leaveType, null);
}
if (detailListItem.size() > 0) {
completeLeaveDetailList.addAll(detailListItem);
}
}
if (errorMessage.size() == 0) {
resultMap.put("status", true);
resultMap.put("data", completeLeaveDetailList);
} else {
resultMap.put("status", false);
resultMap.put("errorInfo", errorMessage);
resultMap.put("data", null);
}
} catch (Exception e) {
log.info(e.getMessage());
resultMap.put("status", false);
resultMap.put("errorInfo", e.getMessage());
resultMap.put("data", null);
}
return resultMap;
}
/**
* @param detailTableData 1
* @param leaveDateList
* @param editedUseJqlxWithEmp <_,使>
* @param editedUseJqed 使
* @param unableUseJqyeIdList id
* @param editedLeaveInfo <id--, >
* @return 1使
*/
private Map<String, String> dealDetailTableData(List<Map<String, String>> detailTableData, List<String> leaveDateList, Map<String, Double> editedUseJqlxWithEmp, Map<String, Double> editedUseJqed, List<String> unableUseJqyeIdList, Map<String, String> editedLeaveInfo) {
if (detailTableData != null && detailTableData.size() > 0){
for (Map<String, String> detailItem : detailTableData) {
double detailSc = "".equals(Util.null2String(detailItem.get("qjsc"))) ? 0 : Double.parseDouble(Util.null2String(detailItem.get("qjsc")));
String leaveType = Util.null2String(detailItem.get("qjlx"));
String empId = Util.null2String(detailItem.get("qjr"));
editedUseJqlxWithEmp.merge(leaveType + "_" + empId, detailSc, Double::sum);
if (leaveDateList.contains(Util.null2String(detailItem.get("ksrq")))) {
double detailSc = "".equals(Util.null2String(detailItem.get("qjsc"))) ? 0 : Double.parseDouble(Util.null2String(detailItem.get("qjsc")));
String qjlx = Util.null2String(detailItem.get("qjlx"));
String empId = Util.null2String(detailItem.get("qjr"));
editedUseJqlxWithEmp.merge(qjlx + "_" + empId, detailSc, Double::sum);
}
String jqye = Util.null2String(detailItem.get("jqye"));
if ("".equals(jqye)) {
continue;
@ -188,55 +283,34 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
double qjsc = Double.parseDouble(jqyeInfo[1]);
editedUseJqed.merge(jqyeId, qjsc, Double::sum);
}
}
editedLeaveInfo = detailTableData.stream()
.collect(Collectors.toMap(e-> Util.null2String(e.get("qjr")) + "_" + Util.null2String(e.get("qjlx")) + "_" + Util.null2String(e.get("ksrq")),
e->Util.null2String(e.get("qjsc"))));
}
//处理主表数据
String qjr = Util.null2String(mainTableData.get("qjr"));
//请假人姓名映射
Map<String, String> empIdToName = new HashMap<>();
//请假人员列表
List<String> leaveEmpIdList = new ArrayList<>();
if (!"".equals(qjr)) {
leaveEmpIdList = Arrays.asList(qjr.split(","));
String sql = "select id, lastname from hrmresource where id in (" + qjr + ")";
List<Map<String, Object>> data = DbTools.getSqlToList(sql);
empIdToName = data.stream().collect(Collectors.toMap(e->Util.null2String(e.get("id")),e->Util.null2String(e.get("lastname"))));
}
//开始日期、结束日期、请假方式、开始时间、结束时间、假期类型、请假时长
String startDate = Util.null2String(mainTableData.get("ksrq"));
String endDate = Util.null2String(mainTableData.get("jsrq"));
String startTime = Util.null2String(mainTableData.get("kssj"));
String endTime = Util.null2String(mainTableData.get("jssj"));
String leaveMode = Util.null2String(mainTableData.get("cxjqj"));
String leaveType = Util.null2String(mainTableData.get("jqlx"));
String leaveDuration = Util.null2String(mainTableData.get("qjsc"));
//获取填写的请假类型关联的考勤项目
String sql = "select id,mc,hsdw,hsl,jcbyxsyqjb,yxsydjb,qzsyyxjb,zdycbcndfgzsd,zdycrqqjndxxb from uf_jcl_kq_kqxm where id=?";
Map<String,Object> holidayItem = DbTools.getSqlToMap(sql,leaveType);
//判断是否需要自动移除时间区间内的非工作时长、自动移除日期区间内的休息日
boolean removeNonWorkTimeRange = "1".equals(Util.null2String(holidayItem.get("zdycbcndfgzsd")));
boolean removeNonWorkDayRange = "1".equals(Util.null2String(holidayItem.get("zdycrqqjndxxb")));
//判断考勤项目是否需要强制使用“优先使用项目”
boolean useFirstItemSign = CheckBoxEnum.CHECKED.getKey().equals(holidayItem.get("qzsyyxjb")) && CheckBoxEnum.CHECKED.getKey().equals(holidayItem.get("jcbyxsyqjb"));
Map<String,Object> holidayPriorityItem = useFirstItemSign ? DbTools.getSqlToMap(sql,holidayItem.get("yxsydjb")) : null;
//遍历人员、日期,生成人员+日期+请假时长的请假信息
//获取请假日期集合
List<String> leaveDateList = DateUtil.getDatesBetween(startDate, endDate);
//请假人的请假区间内每一天的日期类型信息
Map<String, List<String>> restDayInfo = removeNonWorkDayRange ? getRestDayWithEmpId(leaveEmpIdList, leaveType, startDate, endDate) : null;
//请假人的请假区间内的排班结果
Map<String, List<Map<String, Object>>> scheduleInfoMap = (removeNonWorkDayRange || removeNonWorkTimeRange) ? getScheduleInfoWithEmpId(leaveEmpIdList, startDate, endDate) : null;
//实际需要请假的日期集合
List<String> realLeaveDateList;
//收集未关联假期余额的请假明细数据
return editedLeaveInfo;
}
/**
* @param leaveEmpIdList id
* @param leaveDateList
* @param removeNonWorkDayRange
* @param removeNonWorkTimeRange
* @param scheduleInfoMap
* @param restDayInfo
* @param leaveMode
* @param startTime
* @param endTime
* @param leaveDuration
* @return
*/
private List<Map<String, String>> createSimpleLeaveDetailList(List<String> leaveEmpIdList, List<String> leaveDateList, boolean removeNonWorkDayRange, boolean removeNonWorkTimeRange,
Map<String, List<Map<String, Object>>> scheduleInfoMap, Map<String, List<String>> restDayInfo, String leaveMode,
String startTime, String endTime, String leaveDuration) {
List<Map<String, String>> simpleLeaveDetailList = new ArrayList<>();
//收集已关联假期余额的请假明细数据
List<Map<String, String>> completeLeaveDetailList = new ArrayList<>();
Map<String, String> simpleLeaveDetailItem;
//实际需要请假的日期集合
List<String> realLeaveDateList;
for (String leaveEmpId : leaveEmpIdList) {
//需要自动移除日期区间内的休息日时,去除请假日期区间中的休息日
List<Map<String, Object>> scheduleInfoList = new ArrayList<>();
@ -251,7 +325,6 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
.filter(f -> Util.null2String(f.get("sfxx")).equals(CheckBoxEnum.CHECKED.getKey()))
.map(e -> Util.null2String(e.get("bcrq")))
.collect(Collectors.toList());
List<String> allDateListFromSchedule = scheduleInfoList.stream().map(e -> Util.null2String(e.get("bcrq"))).collect(Collectors.toList());
//排班结果中未出现的日期
List<String> nonSetDateListFromSchedule = leaveDateList.stream().filter(f -> !allDateListFromSchedule.contains(f)).collect(Collectors.toList());
@ -279,7 +352,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
//需要自动移除时间区间内的非工作时长,且请假方式为“指定时间区间”时,去除当前明细中开始时间、结束时间之间的非工作时长
if (removeNonWorkTimeRange && !"".equals(bcId)) {
//查询班次明细
sql = "select id, bdlx, gsrq, kssj as dtkssj, jssj as dtjssj from uf_jcl_kq_bcxx_dt1 where mainid = " + bcId;
String sql = "select id, bdlx, gsrq, kssj as dtkssj, jssj as dtjssj from uf_jcl_kq_bcxx_dt1 where mainid = " + bcId;
List<Map<String, Object>> bcDetailData = DbTools.getSqlToList(sql);
//获取移除后的分钟数
int scMinutes = Utils.removeRestTime(leaveDate + " " + startTime, leaveDate + " " + endTime, bcDetailData, leaveDate);
@ -317,48 +390,19 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
}
}
}
//按照人员id分组处理请假明细信息关联假期余额数据
Map<String, List<Map<String, String>>> leaveDetailGroupByEmp = simpleLeaveDetailList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("qjr"))));
for(Map.Entry<String,List<Map<String,String>>> entry : leaveDetailGroupByEmp.entrySet()) {
//校验该人员的考勤周期是否正常
boolean kqCycleAllow = kqCycleCheck(entry.getKey(), entry.getValue(), errorMessage, empIdToName.get(entry.getKey()));
if (!kqCycleAllow) {
continue;
}
//1-收集使用勾选的关联的可使用的余额才能够生成请假明细可使用的条件为a-满足最小使用时长b-满足使用次数上限c-存在未休时长
List<Map<String, Object>> canUseCheckJqyeInfo = collectUsableHolidayBalance(unableUseJqyeIdList, editedUseJqed, leaveType, startDate, entry.getKey());
List<Map<String,String>> detailListItem = new ArrayList<>();
//判断考勤项目是否需要强制使用“优先使用项目”
if (useFirstItemSign) {
//2-收集优先使用的项目关联的可使用的余额才能够生成请假明细可使用的条件为a-满足最小使用时长b-满足使用次数上限c-存在未休时长
List<Map<String, Object>> canUseFirstJqyeInfo = collectUsableHolidayBalance(unableUseJqyeIdList, editedUseJqed, holidayPriorityItem.get("id").toString(), startDate, entry.getKey());
detailListItem = matchHolidayBalance(editedLeaveInfo, checkAmountJqIdList, errorMessage, entry.getKey(), empIdToName.get(entry.getKey()), canUseCheckJqyeInfo, canUseFirstJqyeInfo, editedUseJqed, editedUseJqlxWithEmp, entry.getValue(), leaveType, holidayPriorityItem.get("id").toString());
} else {
detailListItem = matchHolidayBalance(editedLeaveInfo, checkAmountJqIdList, errorMessage, entry.getKey(), empIdToName.get(entry.getKey()), canUseCheckJqyeInfo, null, editedUseJqed, editedUseJqlxWithEmp, entry.getValue(), leaveType, null);
}
if (detailListItem.size() > 0) {
completeLeaveDetailList.addAll(detailListItem);
}
}
if (errorMessage.size() == 0) {
resultMap.put("status", true);
resultMap.put("data", completeLeaveDetailList);
} else {
resultMap.put("status", false);
resultMap.put("errorInfo", errorMessage);
resultMap.put("data", null);
}
return resultMap;
return simpleLeaveDetailList;
}
/**
* @param qjry id
* @param detailTableData
* @param errorMessage
* @param empName
* @return
*/
private boolean kqCycleCheck(String qjry, List<Map<String, String>> detailTableData, List<String> errorMessage, String empName) {
/**
*
*/
Map<String, Object> params = Maps.newHashMap();
Map<String, Object> params = new HashMap<>();
params.put("userId",qjry);
params.put("submitDate",DateUtil.getCurrentDate());
params.put("submitStr","ksrq");
@ -370,7 +414,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
Map<String,Object> dataMap = makeUpClockInService.getKqCycleTimeIntervalCmd(params);
List<Map<String,Object>> closeList = (List<Map<String,Object>>)dataMap.get("closeList");
List<String> nocycleList = (List<String>)dataMap.get("nocycleList");
List<Map<String,Object>> dateList = (List<Map<String,Object>>)dataMap.get("dataList");
// List<Map<String,Object>> dateList = (List<Map<String,Object>>)dataMap.get("dataList");
boolean status = (boolean)dataMap.get("status");
if (!status){
@ -392,6 +436,21 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
return true;
}
/**
* @param editedLeaveInfo
* @param checkAmountJqIdList id
* @param errorMessage
* @param empId id
* @param empName
* @param canUseCheckJqyeInfo 使
* @param canUseFirstJqyeInfo 使使
* @param editedUseJqed 使
* @param editedUseJqlxWithEmp id_id使
* @param leaveDetailList
* @param checkItemId id
* @param firstItemId 使id
* @return id
*/
private List<Map<String, String>> matchHolidayBalance(Map<String, String> editedLeaveInfo, List<String> checkAmountJqIdList, List<String> errorMessage, String empId, String empName,
List<Map<String, Object>> canUseCheckJqyeInfo, List<Map<String, Object>> canUseFirstJqyeInfo, Map<String, Double> editedUseJqed,
Map<String, Double> editedUseJqlxWithEmp,List<Map<String, String>> leaveDetailList, String checkItemId, String firstItemId) {
@ -404,7 +463,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
String qtj = Util.null2String(detailData.get("qtj"));
String btj = Util.null2String(detailData.get("btj"));
//请假时间
double leaveDuration = 0;
double leaveDuration;
if (qtj.equals(CheckBoxEnum.CHECKED.getKey())) {
//全天默认8小时
leaveDuration = 8;
@ -439,7 +498,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
String qtj = Util.null2String(detailData.get("qtj"));
String btj = Util.null2String(detailData.get("btj"));
//请假时间
double leaveDuration = 0;
double leaveDuration;
if (qtj.equals(CheckBoxEnum.CHECKED.getKey())) {
//全天默认8小时
leaveDuration = 8;
@ -456,12 +515,11 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
//勾选的请假项目是否已被编辑
double checkItemEditedDetailSc = editedLeaveInfo.get(empId + "_" + checkItemId + "_" + ksrq) == null ? 0 : Double.parseDouble(editedLeaveInfo.get(empId + "_" + checkItemId + "_" + ksrq));
boolean checkItemEditedDetail = editedLeaveInfo.get(empId + "_" + checkItemId + "_" + ksrq) != null || (firstItemEditedDetail && firstItemEditedDetailSc - leaveDuration >= 0);
if (checkItemEditedDetail) {
leaveDuration = Utils.subtract(leaveDuration, firstItemEditedDetailSc);
leaveDuration = Utils.subtract(leaveDuration, checkItemEditedDetailSc);
if (leaveDuration <= 0) {
continue;
}
leaveDuration = Utils.subtract(leaveDuration, firstItemEditedDetailSc);
leaveDuration = Utils.subtract(leaveDuration, checkItemEditedDetailSc);
if (leaveDuration <= 0) {
continue;
}
//存在优先使用假期类型时,且该假期类型不需要进行额度校验
if (firstItemNonCheck && !firstItemEditedDetail) {
@ -507,6 +565,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
if (checkItemNonCheck && !checkItemEditedDetail) {
detailData.put("qjlx", checkItemId);
detailData.put("qjsc", String.valueOf(leaveDurationMap.get("leaveDuration")));
leaveDurationMap.put("totalLeaveDuration", Utils.subtract(leaveDurationMap.get("totalLeaveDuration"), leaveDurationMap.get("leaveDuration")));
result.add(detailData);
continue;
}
@ -515,11 +574,16 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
dealLeaveDetailWithJqyeInfo(detailData, canUseCheckJqyeInfo, editedUseJqed, leaveDurationMap, ksrq, checkItemId, result);
}
if (leaveDurationMap.get("leaveDuration") > 0) {
//假期余额不足
String message = empName + "假期余额不足!";
String message = empName;
if (checkItemEditedDetail) {
//人员id+日期+假期类型三种条件约束唯一性
message = message + "_" + ksrq + "在明细表1中已存在一笔该请假类型的请假明细";
} else {
//假期余额不足
message = message + "_" + ksrq + "假期余额不足!";
}
errorMessage.add(message);
matchResultSign = false;
break;
}
}
return matchResultSign ? result : new ArrayList<>();
@ -531,7 +595,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
double totalLeaveDuration = leaveDurationMap.get("totalLeaveDuration");
double leaveDuration = leaveDurationMap.get("leaveDuration");
//假期类型相关的假期余额记录
List<Map<String, Object>> holidayBalancefilterList = Lists.newArrayList();
List<Map<String, Object>> holidayBalancefilterList = new ArrayList<>();
for (Map<String, Object> map : canUseJqyeInfo){
if (DateUtil.getTime(map.get("yqsxrq").toString()).compareTo(DateUtil.getTime(ksrq)) >= 0){
holidayBalancefilterList.add(map);
@ -553,7 +617,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
continue;
}
//额定未休时长
double wxsc = Util.null2String(holidayBalance.get("wxsc")).equals("") ? 0 : Double.valueOf(holidayBalance.get("wxsc").toString());
double wxsc = "".equals(Util.null2String(holidayBalance.get("wxsc"))) ? 0 : Double.parseDouble(holidayBalance.get("wxsc").toString());
wxsc = multipleNum * wxsc;
if (leaveDuration > 0 && wxsc > 0) {
detailData.put("qjlx", itemId);
@ -598,9 +662,8 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
* @param unableUseJqyeIdList 使id
* @param editedUseJqed id使
* @param itemId id
* @param startDate
* @param leaveEmpId
* @return
* @param startDate
* @param leaveEmpId id
*/
private List<Map<String, Object>> collectUsableHolidayBalance(List<String> unableUseJqyeIdList, Map<String, Double> editedUseJqed, String itemId, String startDate, String leaveEmpId) {
String sql = "select id,jqid,sxrq,ktsc,yxsc,wxsc,yqsxrq,ztsc from uf_jcl_kq_jqye where ygid=? and jqid=? and sxrq<=? and yqsxrq>=? order by sxrq";
@ -628,7 +691,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
List<Map<String, Object>> leaveList = DbTools.getSqlToList(sql);
Map<String, Integer> jqyeUseNumInfo = new HashMap<>();
List<String> leaveUseList = new ArrayList<>();
Integer useNum = 0;
Integer useNum;
for (Map<String, Object> leaveItem : leaveList) {
String jqyeId = Util.null2String(leaveItem.get("jqye"));
if (!"".equals(jqyeId)) {
@ -671,10 +734,9 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
/**
*
* @param leaveEmpIdList
* @param startDate
* @param endDate
* @return
* @param leaveEmpIdList id
* @param startDate
* @param endDate
*/
private Map<String, List<Map<String, Object>>> getScheduleInfoWithEmpId(List<String> leaveEmpIdList, String startDate, String endDate) {
Map<String, List<Map<String, Object>>> scheduleInfo = new HashMap<>();
@ -696,11 +758,10 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
/**
*
* @param leaveEmpIdList
* @param leaveType
* @param startDate
* @param endDate
* @return
* @param leaveEmpIdList id
* @param leaveType idid
* @param startDate
* @param endDate
*/
private Map<String, List<String>> getRestDayWithEmpId(List<String> leaveEmpIdList, String leaveType, String startDate, String endDate) {
Map<String, List<String>> restDayInfoWithEmpId = new HashMap<>();
@ -714,8 +775,8 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
dateTypeList.add(DateTypeEnum.HOLIDAY.getKey());
dateTypeList.add(DateTypeEnum.PUBLIC_RESTDAY.getKey());
dateTypeList.add(DateTypeEnum.EXCHANGE_LEAVEDAY.getKey());
Map<String, Object> restDayInfo = new HashMap<>();
List<Map<String,Object>> dataList = new ArrayList<>();
Map<String, Object> restDayInfo;
List<Map<String,Object>> dataList;
List<String> restDateList = new ArrayList<>();
for (String empId : leaveEmpIdList) {
restDayParam.put("userId", empId);

@ -115,10 +115,9 @@ public class AskForLeaveAction {
param.put("mainTableData",mainTableData);
param.put("detailTableData",detailTableData);
// return new ResponseResult<Map<String, Object>, Map<String, Object>>(user).run(getAskForLeaveService(user) :: generateLeaveInfoList,param);
return null;
return new ResponseResult<Map<String, Object>, Map<String, Object>>(user).run(getAskForLeaveService(user) :: generateLeaveInfoList,param);
}catch (Exception e){
log.error("sync fund status fail,catch error: [{}]",e);
log.error("generateLeaveInfoList status fail,catch error: [{}]",e);
return ApiReturnTools.error("200","查询失败");
}
}

Loading…
Cancel
Save