考勤-加班计划流程,加班计划明细数据生成接口
parent
fa7122f724
commit
e29da354b1
@ -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 {
|
||||
}
|
@ -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);
|
||||
}
|
@ -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","查询失败");
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue