liuliang 9 months ago
commit 318cb5ba39

@ -0,0 +1,16 @@
package com.api.jucailinkq.attendance.workflow;
import com.engine.jucailinkq.attendance.workflow.web.OvertimePlanApi;
import lombok.extern.slf4j.Slf4j;
import javax.ws.rs.Path;
/**
* @Author: sy
* @Description:
* @Date: 2024/7/19
**/
@Path("/attendance/overtimeplan")
@Slf4j
public class OvertimePlanActionApi extends OvertimePlanApi {
}

@ -16,6 +16,8 @@ public interface UtilService {
*/
Map<String, Object> getSchedulingInFormation(Map<String,Object> params);
Map<String, List<Map<String, Object>>> getScheduleInfoWithEmpId(List<String> empIdList, String startDate, String endDate);
/**
*
*

@ -21,6 +21,7 @@ import weaver.general.Util;
import java.time.ZoneOffset;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@ -42,6 +43,31 @@ public class UtilServiceImpl extends Service implements UtilService {
return commandExecutor.execute(new GetScheduleResultListCmd(params));
}
/**
*
* @param empIdList id
* @param startDate
* @param endDate
*/
@Override
public Map<String, List<Map<String, Object>>> getScheduleInfoWithEmpId(List<String> empIdList, String startDate, String endDate) {
Map<String, List<Map<String, Object>>> scheduleInfo = new HashMap<>();
Map<String,Object> params = new HashMap<>();
params.put("tableName", "uf_pbjg");
params.put("startDate", startDate);
params.put("endDate", endDate);
params.put("pblx", "0");
params.put("current", "1");
params.put("pageSize", "9999");
params.put("recurrence", "1");
for (String empId : empIdList) {
params.put("pbdx", empId);
Map<String,Object> schedulingResultsMap = schedulingResultsService.queryDataTableActualUse(params);
scheduleInfo.put(empId, (List<Map<String, Object>>) schedulingResultsMap.get("data"));
}
return scheduleInfo;
}
/**
*

@ -0,0 +1,8 @@
package com.engine.jucailinkq.attendance.workflow.service;
import java.util.Map;
public interface OvertimePlanService {
Map<String, Object> generateOvertimePlanDetails(Map<String, Object> params);
}

@ -214,9 +214,9 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
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<String>> restDayInfo = removeNonWorkDayRange ? getRestDayWithEmpId(leaveEmpIdList, leaveType, startDate, endDate) : new HashMap<>();
//请假人的请假区间内的排班结果
Map<String, List<Map<String, Object>>> scheduleInfoMap = (removeNonWorkDayRange || removeNonWorkTimeRange) ? getScheduleInfoWithEmpId(leaveEmpIdList, startDate, endDate) : null;
Map<String, List<Map<String, Object>>> scheduleInfoMap = (removeNonWorkDayRange || removeNonWorkTimeRange) ? getScheduleInfoWithEmpId(leaveEmpIdList, DateUtil.beforeDay(startDate,1), DateUtil.AfterDay(endDate,1)) : new HashMap<>();
//收集未关联假期余额的请假明细数据
List<Map<String, String>> simpleLeaveDetailList = createSimpleLeaveDetailList(leaveEmpIdList, leaveDateList, removeNonWorkDayRange, scheduleInfoMap,
@ -344,6 +344,8 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
List<Map<String, Object>> scheduleInfoList = scheduleInfoMap.get(leaveEmpId);
Map<String, String> dateToBcxxMap = scheduleInfoList == null ? new HashMap<>()
: scheduleInfoList.stream().collect(Collectors.toMap(e->Util.null2String(e.get("bcrq")),e->Util.null2String(e.get("bcxx"))));
Map<String, String> dateToHxbzMap = scheduleInfoList == null ? new HashMap<>()
: scheduleInfoList.stream().collect(Collectors.toMap(e->Util.null2String(e.get("bcrq")),e->Util.null2String(e.get("hxbz"))));
if (removeNonWorkDayRange) {
//排班结果中休息的日期
@ -373,22 +375,82 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
simpleLeaveDetailItem.put("jsrq", leaveDate);
simpleLeaveDetailItem.put("kssj", startTime);
simpleLeaveDetailItem.put("jssj", endTime);
//获取班次id
String bcId = Util.null2String(dateToBcxxMap.get(leaveDate)).split("-")[0];
//需要自动移除时间区间内的非工作时长,且请假方式为“指定时间区间”时,去除当前明细中开始时间、结束时间之间的非工作时长
if ("".equals(bcId)) {
//组装初步的请假时长
simpleLeaveDetailItem.put("qjsc", String.format("%.2f", DateUtil.getBetWeenMinutes(leaveDate + " " + startTime, leaveDate + " " + endTime) / 60.0));
} else {
//查询班次明细
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);
//获取当天班次id
String currentDayBcId = Util.null2String(dateToBcxxMap.get(leaveDate)).split("-")[0];
boolean currentDayHxbz = !"".equals(Util.null2String(dateToHxbzMap.get(leaveDate)));
//获取前一天班次id
String yesterday = DateUtil.beforeDay(leaveDate,1);
String yesterdayBcId = Util.null2String(dateToBcxxMap.get(DateUtil.beforeDay(leaveDate, 1))).split("-")[0];
//获取次日班次id
String nextDay = DateUtil.AfterDay(leaveDate,1);
String nextDayBcId = Util.null2String(dateToBcxxMap.get(nextDay)).split("-")[0];
boolean nextDayHxbz = !"".equals(Util.null2String(dateToHxbzMap.get(nextDay)));
String sql = "";
List<Map<String, Object>> bcDetailData;
String endDate = leaveDate;
int scMinutes = 0;
//开始时时和结束时间存在跨天情况时,即开始时间大于等于结束时间
if (startTime.compareTo(endTime) >= 0) {
endDate = nextDay;
simpleLeaveDetailItem.put("jsrq", nextDay);
}
String toDealStartTime = startTime;
if (!"".equals(yesterdayBcId)) {
sql = "select id, bdlx, gsrq, kssj as dtkssj, jssj as dtjssj from uf_jcl_kq_bcxx_dt1 where mainid = " + yesterdayBcId + " order by gsrq desc, kssj desc";
bcDetailData = DbTools.getSqlToList(sql);
bcDetailData = bcDetailData.stream().filter(e -> countBdlxList.contains(Util.null2String(e.get("bdlx")))).collect(Collectors.toList());
//获取需要累计的班段时长区间和请假区间存在交集的分钟数
scMinutes = Utils.removeTime(leaveDate + " " + startTime, endDate + " " + endTime, bcDetailData, yesterday);
//更新可匹配请假时长开始时间
String gsrq = Util.null2String(bcDetailData.get(0).get("gsrq"));
toDealStartTime = "2".equals(gsrq) && startTime.compareTo(Util.null2String(bcDetailData.get(0).get("dtjssj"))) < 0
? Util.null2String(bcDetailData.get(0).get("dtjssj")) : startTime;
}
if (!"".equals(currentDayBcId)) {
sql = "select id, bdlx, gsrq, kssj as dtkssj, jssj as dtjssj from uf_jcl_kq_bcxx_dt1 where mainid = " + currentDayBcId + " order by gsrq desc, kssj desc";
bcDetailData = DbTools.getSqlToList(sql);
bcDetailData = bcDetailData.stream().filter(e -> countBdlxList.contains(Util.null2String(e.get("bdlx")))).collect(Collectors.toList());
//获取需要累计的班段时长区间和请假区间存在交集的分钟数
int scMinutes = Utils.removeTime(leaveDate + " " + startTime, leaveDate + " " + endTime, bcDetailData, leaveDate);
//组装初步的请假时长
simpleLeaveDetailItem.put("qjsc", String.format("%.2f", scMinutes / 60.0));
scMinutes = scMinutes + Utils.removeTime(leaveDate + " " + toDealStartTime, endDate + " " + endTime, bcDetailData, leaveDate);
//更新可匹配请假时长开始时间
String gsrq = Util.null2String(bcDetailData.get(0).get("gsrq"));
if ("2".equals(gsrq)) {
leaveDate = nextDay;
toDealStartTime = Util.null2String(bcDetailData.get(0).get("dtjssj"));
} else if ("1".equals(gsrq)) {
toDealStartTime = toDealStartTime.compareTo(Util.null2String(bcDetailData.get(0).get("dtjssj"))) < 0
? Util.null2String(bcDetailData.get(0).get("dtjssj")) : toDealStartTime;
}
} else if (currentDayHxbz) {
scMinutes = scMinutes + DateUtil.getBetWeenMinutes(leaveDate + " " + toDealStartTime, nextDay + " " + "00:00");
}
if (!"".equals(nextDayBcId)) {
sql = "select id, bdlx, gsrq, kssj as dtkssj, jssj as dtjssj from uf_jcl_kq_bcxx_dt1 where mainid = " + nextDayBcId + " order by gsrq desc, kssj desc";
bcDetailData = DbTools.getSqlToList(sql);
bcDetailData = bcDetailData.stream().filter(e -> countBdlxList.contains(Util.null2String(e.get("bdlx")))).collect(Collectors.toList());
//获取需要累计的班段时长区间和请假区间存在交集的分钟数
scMinutes = scMinutes + Utils.removeTime(leaveDate + " " + toDealStartTime, endDate + " " + endTime, bcDetailData, nextDay);
} else if (nextDayHxbz) {
if ("".equals(currentDayBcId)) {
scMinutes = scMinutes + DateUtil.getBetWeenMinutes(nextDay + " " + "00:00", nextDay + " " + endTime);
} else {
int nextDayMinutes = leaveDate.compareTo(nextDay) >= 0 ? DateUtil.getBetWeenMinutes(leaveDate + " " + toDealStartTime, nextDay + " " + endTime)
: DateUtil.getBetWeenMinutes(nextDay + " " + "00:00", nextDay + " " + endTime);
scMinutes = scMinutes + Math.max(nextDayMinutes, 0);
}
}
//增加加班计划中的数据,加班计划明细中的数据作为“加班计划”班段类型数据的补充
if (countBdlxList.contains(ClassSegmentTypeEnum.OVERTIME_PLAN.getKey())) {
sql = "select b.jbry,b.ksrq,b.kssj,b.jblx,b.jsrq,b.jssj,b.jbsc,b.gsrq from uf_jcl_kq_jbjh a left join uf_jcl_kq_jbjh_dt1 b on a.id=b.mainid where b.jbry =? and b.ksrq>=? and b.jsrq<=? and (b.jbcx=0 or b.jbcx is null) and a.jlzt=1";
List<Map<String,Object>> overtimePlanList = DbTools.getSqlToList(sql, leaveEmpId, leaveDate, leaveDate);
int scMinutesInOvertimePlan = Utils.removeTimeWithOvertimePlan(leaveDate + " " + startTime, endDate + " " + endTime, overtimePlanList);
scMinutes = scMinutes + scMinutesInOvertimePlan;
}
//组装初步的请假时长
simpleLeaveDetailItem.put("qjsc", String.format("%.2f", scMinutes / 60.0));
simpleLeaveDetailList.add(simpleLeaveDetailItem);
} else if (leaveMode.equals(AskAndEvctionWayEnum.HOUR.getKey())) {
simpleLeaveDetailItem = new HashMap<>();

@ -0,0 +1,133 @@
package com.engine.jucailinkq.attendance.workflow.service.impl;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.jucailinkq.attendance.attendanceanalysis.service.UtilService;
import com.engine.jucailinkq.attendance.attendanceanalysis.service.impl.UtilServiceImpl;
import com.engine.jucailinkq.attendance.enums.ClassSegmentTypeEnum;
import com.engine.jucailinkq.attendance.workflow.service.OvertimePlanService;
import com.engine.jucailinkq.common.util.CommonUtil;
import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools;
import lombok.extern.slf4j.Slf4j;
import weaver.general.Util;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Author: sy
* @Description:
* @Date: 2024/7/18
**/
@Slf4j
public class OvertimePlanServiceImpl extends Service implements OvertimePlanService {
private UtilService utilService = ServiceUtil.getService(UtilServiceImpl.class);
@Override
public Map<String, Object> generateOvertimePlanDetails(Map<String, Object> params) {
Map<String,Object> resultMap = new HashMap<>();
try {
// 流程表单主表数据
Map<String,String> mainTableData = (Map<String,String>)params.get("mainTableData");
log.info("mainTableData : {}", mainTableData);
//加班人员、开始日期、结束日期、开始时间、结束时间
String jbry = Util.null2String(mainTableData.get("jbry"));
String jblx = Util.null2String(mainTableData.get("jblx"));
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"));
//获取加班人员列表
List<String> empIdList = "".equals(jbry) ? new ArrayList<>() : Arrays.asList(jbry.split(","));
//获取加班日期集合
List<String> dateList = DateUtil.getDatesBetween(startDate, endDate);
//获取人员列表在日期区间的班次数据
Map<String, List<Map<String, Object>>> scheduleInfoMap = utilService.getScheduleInfoWithEmpId(empIdList, startDate, DateUtil.AfterDay(endDate,1));
List<Map<String, String>> overtimePlanDetailList = new ArrayList<>();
List<String> workBdlxList = new ArrayList<>();
workBdlxList.add(ClassSegmentTypeEnum.WORK_TIME.getKey());workBdlxList.add(ClassSegmentTypeEnum.EXTENDED_OVERTIME.getKey());
workBdlxList.add(ClassSegmentTypeEnum.EARLY_OVERTIME.getKey());workBdlxList.add(ClassSegmentTypeEnum.OVERTIME_IN_CLASS.getKey());
Map<String, String> detailItem;
String sql = "";
//获取加班类型信息
sql = "select id,mc from uf_jcl_kq_kqxm where id = " + jblx;
Map<String, Object> jblxData = DbTools.getSqlToMap(sql);
String jblxName = Util.null2String(jblxData.get("mc"));
Map<String, String> empIdToNameInfo = CommonUtil.empIdToNameInfo(empIdList);
List<Map<String, Object>> bcDetailData;
for (String empId : empIdList) {
List<Map<String, Object>> scheduleInfoList = scheduleInfoMap.get(empId);
Map<String, String> dateToBcxxMap = scheduleInfoList == null ? new HashMap<>() : scheduleInfoList.stream().collect(Collectors.toMap(e->Util.null2String(e.get("bcrq")), e->Util.null2String(e.get("bcxx"))));
for (String date : dateList) {
String realEndDate = date;
detailItem = new HashMap<>();
detailItem.put("jbry", empId);
detailItem.put("jbryName", Util.null2String(empIdToNameInfo.get(empId)));
detailItem.put("jblx", jblx);
detailItem.put("jblxName", jblxName);
detailItem.put("ksrq", date);
detailItem.put("kssj", startTime);
detailItem.put("jssj", endTime);
//开始时时和结束时间存在跨天情况时,即开始时间大于等于结束时间
if (startTime.compareTo(endTime) >= 0) {
realEndDate = DateUtil.AfterDay(date,1);
}
detailItem.put("jsrq", realEndDate);
//加班时长
int overtimeMinutes = DateUtil.getBetWeenMinutes(date + " " + startTime, realEndDate + " " + endTime);
detailItem.put("jbsc", String.format("%.2f", overtimeMinutes / 60.0));
//根据班次数据,设置归属日期
//获取当天班次id
String currentDayBcId = Util.null2String(dateToBcxxMap.get(date)).split("-")[0];
//当天比较最晚工作时段/加班时段的结束时间点和加班计划明细的开始时间点的差值
Integer currentDayDiffMinutes = 9999;
if (!"".equals(currentDayBcId)) {
//查询当天班次明细
sql = "select id, bdlx, gsrq, kssj, jssj from uf_jcl_kq_bcxx_dt1 where mainid = " + currentDayBcId + " order by gsrq desc, kssj desc";
bcDetailData = DbTools.getSqlToList(sql);
bcDetailData = bcDetailData.stream().filter(e -> workBdlxList.contains(Util.null2String(e.get("bdlx")))).collect(Collectors.toList());
if (bcDetailData.size() > 0) {
String gsrqValue = Util.null2String(bcDetailData.get(0).get("gsrq"));
String jssj = Util.null2String(bcDetailData.get(0).get("jssj"));
String matchDate = "2".equals(gsrqValue) ? DateUtil.AfterDay(date,1) : ("0".equals(gsrqValue) ? DateUtil.beforeDay(date,1) : date);
currentDayDiffMinutes = (matchDate + jssj).compareTo(date + startTime) > 0 ? DateUtil.getBetWeenMinutes(date + " " + startTime, matchDate + " " + jssj) : DateUtil.getBetWeenMinutes(matchDate + " " + jssj, date + " " + startTime);
}
}
//获取次日班次id
String nextDay = DateUtil.AfterDay(date,1);
String nextDayBcId = Util.null2String(dateToBcxxMap.get(nextDay)).split("-")[0];
//次日比较最早工作时段/加班时段的开始时间点和加班计划明细的结束时间点的差值
Integer nextDayDiffMinutes = 9999;
if (!"".equals(nextDayBcId)) {
//查次日班次明细
sql = "select id, bdlx, gsrq, kssj, jssj from uf_jcl_kq_bcxx_dt1 where mainid = " + nextDayBcId + " order by gsrq, kssj";
bcDetailData = DbTools.getSqlToList(sql);
bcDetailData = bcDetailData.stream().filter(e -> workBdlxList.contains(Util.null2String(e.get("bdlx")))).collect(Collectors.toList());
if (bcDetailData.size() > 0) {
String gsrqValue = Util.null2String(bcDetailData.get(0).get("gsrq"));
String kssj = Util.null2String(bcDetailData.get(0).get("kssj"));
String matchDate = "2".equals(gsrqValue) ? DateUtil.AfterDay(nextDay,1) : ("0".equals(gsrqValue) ? DateUtil.beforeDay(nextDay,1) : nextDay);
nextDayDiffMinutes = (matchDate + kssj).compareTo(realEndDate + endTime) > 0 ? DateUtil.getBetWeenMinutes(realEndDate + " " + endTime, matchDate + " " + kssj) : DateUtil.getBetWeenMinutes(matchDate + " " + kssj, realEndDate + " " + endTime);
}
}
if (currentDayDiffMinutes <= nextDayDiffMinutes) {
detailItem.put("gsrq", date);
} else {
detailItem.put("gsrq", nextDay);
}
overtimePlanDetailList.add(detailItem);
}
}
resultMap.put("status", true);
resultMap.put("data", overtimePlanDetailList);
} catch (Exception e) {
log.info(e.getMessage());
resultMap.put("status", false);
resultMap.put("errorInfo", e.getMessage());
resultMap.put("data", null);
}
return resultMap;
}
}

@ -0,0 +1,58 @@
package com.engine.jucailinkq.attendance.workflow.web;
import com.engine.common.util.ParamUtil;
import com.engine.common.util.ServiceUtil;
import com.engine.jucailinkq.attendance.workflow.service.OvertimePlanService;
import com.engine.jucailinkq.attendance.workflow.service.impl.OvertimePlanServiceImpl;
import com.engine.jucailinkq.common.util.ApiReturnTools;
import com.engine.jucailinkq.common.util.ResponseResult;
import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j;
import weaver.general.Util;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import java.lang.reflect.Type;
import java.util.Map;
/**
* @Author: sy
* @Description:
* @Date: 2024/7/18
**/
@Slf4j
public class OvertimePlanApi {
private OvertimePlanService getOvertimePlanService(User user) {
return ServiceUtil.getService(OvertimePlanServiceImpl.class,user);
}
/**
* -
* @return
*/
@GET
@Path("/generateOvertimePlanDetails")
@Produces({"text/plain"})
public String generateOvertimePlanDetails(@Context HttpServletRequest request, @Context HttpServletResponse response) {
try {
Map<String,Object> param = ParamUtil.request2Map(request);
User user = HrmUserVarify.getUser(request, response);
String mainTableDataStr = Util.null2String(param.get("mainTableData"));
Gson gson = new Gson();
Map<String,Object> mainTableData = gson.fromJson(mainTableDataStr, (Type) Map.class);
param.put("mainTableData",mainTableData);
return new ResponseResult<Map<String, Object>, Map<String, Object>>(user).run(getOvertimePlanService(user) :: generateOvertimePlanDetails,param);
}catch (Exception e){
log.error("generateOvertimePlanDetails status fail,catch error: [{}]",e);
return ApiReturnTools.error("200","查询失败");
}
}
}

@ -727,9 +727,12 @@ public class CommonUtil {
* id
* @return
*/
public static Map<String, String> empIdToNameInfo() {
public static Map<String, String> empIdToNameInfo(List<String> empIds) {
Map<String, String> resultMap = new HashMap<>();
String sql = "select id,lastname from hrmresource";
if (empIds != null && empIds.size() > 0) {
sql = sql + " where id in (" + String.join(",", empIds) + ")";
}
List<Map<String,Object>> list = DbTools.getSqlToList(sql);
for (Map<String, Object> map : list) {
resultMap.put(map.get("id").toString(), Util.null2String(map.get("lastname")));

@ -432,6 +432,41 @@ public class Utils<T> {
return betweenMinutes;
}
/**
*
* @param kssj
* @param jssj
* @param overtimePlanList
* @return
*/
public static int removeTimeWithOvertimePlan(String kssj,String jssj,List<Map<String, Object>> overtimePlanList){
int betweenMinutes = 0;
log.debug("removeTimeWithOvertimePlan overtimePlanList : {}", overtimePlanList);
for (Map<String, Object> overtimePlanItem : overtimePlanList){
String dtkssj = overtimePlanItem.get("ksrq") + " " + overtimePlanItem.get("kssj");
String dtjssj = overtimePlanItem.get("jsrq") + " " + overtimePlanItem.get("jssj");
if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(dtkssj)) <=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dtjssj)) >=0){
betweenMinutes += DateUtil.getBetWeenMinutes(dtkssj,dtjssj);
}else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(dtkssj)) <=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dtjssj)) <=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dtkssj)) >=0){
//休息时间在请假时间 右边
betweenMinutes += DateUtil.getBetWeenMinutes(dtkssj,jssj);
}else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(dtkssj)) >=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dtjssj)) >=0 && DateUtil.getTime(kssj).compareTo(DateUtil.getTime(dtjssj)) <=0){
//休息时间在请假时间 左边
betweenMinutes += DateUtil.getBetWeenMinutes(kssj,dtjssj);
}else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(dtkssj)) >=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dtjssj)) <=0){
//请假时间在休息时间中间
betweenMinutes += DateUtil.getBetWeenMinutes(kssj,jssj);;
}
}
return betweenMinutes;
}
/**
*
* @param kssj

Loading…
Cancel
Save