zm_dev
liuliang 2 years ago
parent 2f11bc7cbb
commit 0290e1f04f

@ -1,7 +1,7 @@
package com.api.attendance.attendancePlan.web;
import com.engine.attendance.attendancePlan.web.AttendancePlanAction;
import com.engine.attendance.attendanceplan.web.AttendancePlanAction;
import lombok.extern.slf4j.Slf4j;
import javax.ws.rs.Path;

@ -1,6 +1,6 @@
package com.api.attendance.persongroup.web;
import com.engine.attendance.persongroup.web.PersonGroupAction;
import com.engine.attendance.component.persongroup.web.PersonGroupAction;
import lombok.extern.slf4j.Slf4j;
import javax.ws.rs.Path;

@ -1,6 +1,6 @@
package com.api.attendance.persongroup.web;
import com.engine.attendance.persongroup.web.SchedulingResultsAction;
import com.engine.attendance.component.persongroup.web.SchedulingResultsAction;
import lombok.extern.slf4j.Slf4j;
import javax.ws.rs.Path;

@ -0,0 +1,11 @@
package com.api.attendance.workflow;
import com.engine.attendance.workflow.web.ProcessSubmitCheckApi;
import lombok.extern.slf4j.Slf4j;
import javax.ws.rs.Path;
@Path("/attendance/processsubmitcheck")
@Slf4j
public class ProcessSubmitCheckActionApi extends ProcessSubmitCheckApi {
}

@ -0,0 +1,4 @@
# attendance.attendanceAnalysis
## 考勤分析模块
## 用于计算分析人员的考勤,算出正常上下班、加班、早退、迟到等一些列考勤项目,并入到出勤结果表

@ -0,0 +1,55 @@
package com.engine.attendance.attendanceanalysis.cmd;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import weaver.general.Util;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
*
*/
public class absenteeismCmd extends AbstractCommonCommand<Map<String,Object>> {
@Override
public BizLogContext getLogContext() {
return null;
}
public absenteeismCmd(Map<String,Object> params){
this.params=params;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
//作用时段
String workfor = Util.null2String(params.get("workfor"));
String time = Util.null2String(params.get("time"));
String userId = Util.null2String(params.get("userId"));
String itemType = Util.null2String(params.get("itemType"));
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)params.get("attendanceItems");
attendanceItems.stream().filter(e -> {
//项目类型
String xmlx = Util.null2String(e.get("xmlx"));
//作用时段
String zysd = Util.null2String(e.get("zysd"));
//最小核算分钟数(不包含)
String zxhsl = Util.null2String(e.get("zxhsl"));
//最大核算分钟数(包含)
String zdhsl = Util.null2String(e.get("zdhsl"));
if( .equals(xmlx) && workfor.equals(zysd)){
}
return false;
}).collect(Collectors.toList());
return null;
}
}

@ -0,0 +1,39 @@
package com.engine.attendance.attendanceanalysis.job;
import com.engine.attendance.attendanceanalysis.wrapper.AttendanceAnalysisWrapper;
import com.engine.attendance.workflow.service.ProcessSubmitCheckService;
import com.engine.attendance.workflow.service.impl.ProcessSubmitCheckServiceImpl;
import com.engine.common.util.DateUtil;
import com.engine.common.util.DbTools;
import com.engine.common.util.ServiceUtil;
import lombok.extern.slf4j.Slf4j;
import weaver.general.Util;
import weaver.hrm.User;
import weaver.interfaces.schedule.BaseCronJob;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
public class AttendanceAnalysisJob extends BaseCronJob {
private AttendanceAnalysisWrapper attendanceAnalysisService = ServiceUtil.getService(AttendanceAnalysisWrapper.class);
@Override
public void execute() {
log.info("********AttendanceAnalysisJob start********");
String beforeThreeDayDate = DateUtil.getCurrentDateMinusDay(3);
String beforeOneDayDate = DateUtil.getCurrentDateMinusDay(1);
String sql = "select userid,signdate,signtime from hrmschedulesign where isincom=1 and signdate >= ? and signdate <= ?";
List<Map<String,Object>> dataList = DbTools.getSqlToList(sql,beforeThreeDayDate,beforeOneDayDate);
Map<String, List<Map<String,Object>>> collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("userid"))));
collect.entrySet().forEach(e -> {
});
log.info("********AttendanceAnalysisJob end********");
}
}

@ -0,0 +1,84 @@
package com.engine.attendance.attendanceanalysis.wrapper;
import com.engine.attendance.attendanceplan.service.AttendancePlanService;
import com.engine.attendance.attendanceplan.service.impl.AttendancePlanServiceImpl;
import com.engine.common.util.DateUtil;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import weaver.general.Util;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
*
*/
public class AttendanceAnalysisWrapper extends Service {
private AttendancePlanService basicsetService = ServiceUtil.getService(AttendancePlanServiceImpl.class);
public void attendanceAnalysis(String userId, List<Map<String,Object>> dataList){
String beforeThreeDayDate = DateUtil.getCurrentDateMinusDay(3);
String beforeTwoDayDate = DateUtil.getCurrentDateMinusDay(1);
String beforeOneDayDate = DateUtil.getCurrentDateMinusDay(1);
Map<String, List<Map<String,Object>>> collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("signdate"))));
/**获得人员考勤项目*/
Map<String,Object> paramMap = new HashMap<>();
paramMap.put("startDate","");
paramMap.put("endDate","");
paramMap.put("resourceId","85");
paramMap.put("modeId","204");
Map<String,Object> dataMap = basicsetService.getAttendanceItemsByPerson(paramMap);
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)dataMap.get("data");
if (collect.size() == 0){
//没有打卡数据,前一天记为全天旷工
}else if (collect.size() == 1){
//有1天有打卡数据
if (collect.get(beforeOneDayDate) != null){
//打卡数据为前一天
}else {
//否则前一天记为全天旷工
}
}else if (collect.size() == 2){
//有2天有打卡数据
//计算前一天考勤
if (collect.get(beforeOneDayDate) != null){
//打卡数据为前一天
}else {
//否则前一天记为全天旷工
}
//计算第二天数据
if (collect.get(beforeTwoDayDate) != null && collect.get(beforeOneDayDate) != null){
}
}else if (collect.size() == 3){
//连续3天打卡
}
}
}

@ -0,0 +1,4 @@
# attendance.attendanceAnalysis
## 考勤方案模块
##

@ -1,6 +1,6 @@
package com.engine.attendance.attendancePlan.cmd;
package com.engine.attendance.attendanceplan.cmd;
import com.engine.attendance.persongroup.commonutil.CommonUtil;
import com.engine.attendance.component.persongroup.commonutil.PersongroupCommonUtil;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.common.util.DbTools;
@ -94,7 +94,7 @@ public class GetAttendanceItemsByPersonDataCmd extends AbstractCommonCommand<Map
sql = "select mainid,empid,filters,bdate,edate from uf_ryqz_dt1 where mainid in ("+String.join(",",personGroupIds)+")";
log.info("query personGroupData : {}",sql);
List<Map<String,Object>> personGroupData = DbTools.getSqlToList(sql);
Set<String> personnelGroupIds = CommonUtil.getPersonnelGroupingByPerson(personGroupData,resourceId,startDate,endDate);
Set<String> personnelGroupIds = PersongroupCommonUtil.getPersonnelGroupingByPerson(personGroupData,resourceId,startDate,endDate);
log.info("personnelGroupIds : {}",personnelGroupIds);
for (Map<String,Object> personGroupOrganization :personGroupOrganizationList){
String personnelGroupId = Util.null2String(personGroupOrganization.get("dx")).split("-")[0];
@ -108,7 +108,7 @@ public class GetAttendanceItemsByPersonDataCmd extends AbstractCommonCommand<Map
List<Map<String,Object>> attendanceItems = DbTools.getSqlToList(sql);
log.info("dataIds : {}",dataIds);
sql = "select b.id `key`,b.mc kqxm,c.mc famc from uf_jcl_kq_kqfa_dt1 a left join uf_jcl_kq_kqxm b on a.kqxm=b.id left join uf_jcl_kq_kqfa c on a.mainid=c.id where mainid in ("+String.join(",",dataIds)+")";
sql = "select b.id `key`,b.mc kqxm,c.mc,b.* famc from uf_jcl_kq_kqfa_dt1 a left join uf_jcl_kq_kqxm b on a.kqxm=b.id left join uf_jcl_kq_kqfa c on a.mainid=c.id where mainid in ("+String.join(",",dataIds)+")";
if (dataIds.size() > 0){
log.info("query attendanceItems sql : {}",sql);
attendanceItems.addAll(DbTools.getSqlToList(sql));

@ -1,4 +1,4 @@
package com.engine.attendance.attendancePlan.service;
package com.engine.attendance.attendanceplan.service;
import java.util.Map;

@ -1,7 +1,7 @@
package com.engine.attendance.attendancePlan.service.impl;
package com.engine.attendance.attendanceplan.service.impl;
import com.engine.attendance.attendancePlan.cmd.GetAttendanceItemsByPersonDataCmd;
import com.engine.attendance.attendancePlan.service.AttendancePlanService;
import com.engine.attendance.attendanceplan.cmd.GetAttendanceItemsByPersonDataCmd;
import com.engine.attendance.attendanceplan.service.AttendancePlanService;
import com.engine.core.impl.Service;
import java.util.Map;

@ -1,9 +1,7 @@
package com.engine.attendance.attendancePlan.web;
package com.engine.attendance.attendanceplan.web;
import com.engine.attendance.attendancePlan.service.AttendancePlanService;
import com.engine.attendance.attendancePlan.service.impl.AttendancePlanServiceImpl;
import com.engine.attendance.persongroup.service.SchedulingResultsService;
import com.engine.attendance.persongroup.service.impl.SchedulingResultsServiceImpl;
import com.engine.attendance.attendanceplan.service.AttendancePlanService;
import com.engine.attendance.attendanceplan.service.impl.AttendancePlanServiceImpl;
import com.engine.common.util.ApiReturnTools;
import com.engine.common.util.ParamUtil;
import com.engine.common.util.ServiceUtil;

@ -0,0 +1,4 @@
# attendance.attendanceAnalysis
## 考勤组件模块
## person_group 人员分组功能组件

@ -1,4 +1,4 @@
package com.engine.attendance.persongroup.cmd;
package com.engine.attendance.component.persongroup.cmd;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
@ -6,7 +6,6 @@ import com.engine.common.util.DbTools;
import com.engine.core.interceptor.CommandContext;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.icbc.api.internal.apache.http.M;
import lombok.extern.slf4j.Slf4j;
import weaver.conn.RecordSet;
import weaver.general.Util;

@ -1,4 +1,4 @@
package com.engine.attendance.persongroup.cmd;
package com.engine.attendance.component.persongroup.cmd;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
@ -6,7 +6,6 @@ import com.engine.common.util.DbTools;
import com.engine.core.interceptor.CommandContext;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import weaver.conn.RecordSet;
import weaver.general.Util;
import java.util.List;
import java.util.Map;

@ -1,6 +1,6 @@
package com.engine.attendance.persongroup.cmd;
package com.engine.attendance.component.persongroup.cmd;
import com.engine.attendance.persongroup.commonutil.CommonUtil;
import com.engine.attendance.component.persongroup.commonutil.PersongroupCommonUtil;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
@ -10,7 +10,6 @@ import com.engine.core.interceptor.CommandContext;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j;
import weaver.general.Util;
import weaver.hrm.company.DepartmentComInfo;
@ -69,7 +68,7 @@ public class GetDatatableRecurrenceCmd extends AbstractCommonCommand<Map<String,
String currentTime = DateUtil.getCurrentDate();
String queryryfz = "select a.mainid,a.empid,a.filters,a.bdate,a.edate from uf_ryqz_dt1 a,(select pbdxryfz from uf_pbjg where dxlx=1 group by pbdxryfz) b where a.mainid =b.pbdxryfz and a.bdate <= '"+currentTime+"'";
List<Map<String,Object>> personGroupData = DbTools.getSqlToList(queryryfz);
Set<String> personnelGroupIds = CommonUtil.getPersonnelGroupingByPerson(personGroupData,pbdx,null,null);
Set<String> personnelGroupIds = PersongroupCommonUtil.getPersonnelGroupingByPerson(personGroupData,pbdx,null,null);
querySqlbyPbdx = sql +conditions + " and pbdxryfz in (?)";
log.info("递归查询人员-人员分组节点sql:{},personnelGroupIds:{}",querySqlbyPbdx,personnelGroupIds);
if(personnelGroupIds.size() > 0){

@ -1,4 +1,4 @@
package com.engine.attendance.persongroup.commonutil;
package com.engine.attendance.component.persongroup.commonutil;
import com.engine.common.util.DateUtil;
import com.engine.common.util.DbTools;
@ -13,7 +13,7 @@ import java.util.*;
import java.util.stream.Collectors;
@Slf4j
public class CommonUtil {
public class PersongroupCommonUtil {
/**
*
* @param calendarMap key:value

@ -1,6 +1,6 @@
package com.engine.attendance.persongroup.job.scheduling;
package com.engine.attendance.component.persongroup.job.scheduling;
import com.engine.attendance.persongroup.job.scheduling.tactics.RegularScheduling;
import com.engine.attendance.component.persongroup.job.scheduling.tactics.RegularScheduling;
import com.engine.common.util.DbTools;
import com.engine.common.util.Utils;

@ -1,18 +1,15 @@
package com.engine.attendance.persongroup.job.scheduling.tactics;
package com.engine.attendance.component.persongroup.job.scheduling.tactics;
import com.engine.attendance.persongroup.commonutil.CommonUtil;
import com.engine.attendance.component.persongroup.commonutil.PersongroupCommonUtil;
import com.engine.common.util.DateUtil;
import com.engine.common.util.DbTools;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import weaver.conn.RecordSet;
import weaver.general.Util;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
/**
@ -73,7 +70,7 @@ public class DayRegularScheduling implements RegularScheduling{
log.info("detailDataGroupingByYear : {}",detailDataGroupingByYear);
//循环总天数
int circulateDays = Integer.valueOf(detailDataList.get(detailDataList.size()-1).get("jsts").toString());
int betweenDays = CommonUtil.getBetweenDays(data);
int betweenDays = PersongroupCommonUtil.getBetweenDays(data);
log.info("betweenDays : [{}]",betweenDays);
/**按照天数规律循环遍历插入*/
//从第几天开始循环
@ -176,7 +173,7 @@ public class DayRegularScheduling implements RegularScheduling{
}
/**插入排班结果表*/
CommonUtil.insertShiftSchedulingResults(organizationList,insertDataList,formmodeid);
PersongroupCommonUtil.insertShiftSchedulingResults(organizationList,insertDataList,formmodeid);
}
}

@ -1,6 +1,6 @@
package com.engine.attendance.persongroup.job.scheduling.tactics;
package com.engine.attendance.component.persongroup.job.scheduling.tactics;
import com.engine.attendance.persongroup.commonutil.CommonUtil;
import com.engine.attendance.component.persongroup.commonutil.PersongroupCommonUtil;
import com.engine.common.util.DateUtil;
import com.engine.common.util.DbTools;
import com.google.common.collect.Lists;
@ -164,6 +164,6 @@ public class MonthRegularScheduling implements RegularScheduling{
count++;
}
/**插入排班结果表*/
CommonUtil.insertShiftSchedulingResults(organizationList,insertDataList,formmodeid);
PersongroupCommonUtil.insertShiftSchedulingResults(organizationList,insertDataList,formmodeid);
}
}

@ -1,6 +1,5 @@
package com.engine.attendance.persongroup.job.scheduling.tactics;
package com.engine.attendance.component.persongroup.job.scheduling.tactics;
import java.util.List;
import java.util.Map;
public interface RegularScheduling {

@ -1,20 +1,17 @@
package com.engine.attendance.persongroup.job.scheduling.tactics;
package com.engine.attendance.component.persongroup.job.scheduling.tactics;
import com.engine.attendance.persongroup.commonutil.CommonUtil;
import com.engine.attendance.component.persongroup.commonutil.PersongroupCommonUtil;
import com.engine.common.util.DateUtil;
import com.engine.common.util.DbTools;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import weaver.conn.RecordSet;
import weaver.general.Util;
import java.time.DayOfWeek;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
/**
@ -172,7 +169,7 @@ public class WeekRegularScheduling implements RegularScheduling{
}
/**插入排班结果表*/
CommonUtil.insertShiftSchedulingResults(organizationList,insertDataList,formmodeid);
PersongroupCommonUtil.insertShiftSchedulingResults(organizationList,insertDataList,formmodeid);
}
public int getDayOfWeek(DayOfWeek dayOfWeek){

@ -1,6 +1,6 @@
package com.engine.attendance.persongroup.job.scheduling.tactics;
package com.engine.attendance.component.persongroup.job.scheduling.tactics;
import com.engine.attendance.persongroup.commonutil.CommonUtil;
import com.engine.attendance.component.persongroup.commonutil.PersongroupCommonUtil;
import com.engine.common.util.DateUtil;
import com.engine.common.util.DbTools;
import com.google.common.collect.Lists;
@ -174,6 +174,6 @@ public class YearRegularScheduling implements RegularScheduling{
}
/**插入排班结果表*/
CommonUtil.insertShiftSchedulingResults(organizationList,insertDataList,formmodeid);
PersongroupCommonUtil.insertShiftSchedulingResults(organizationList,insertDataList,formmodeid);
}
}

@ -1,4 +1,4 @@
package com.engine.attendance.persongroup.service;
package com.engine.attendance.component.persongroup.service;
import weaver.hrm.User;

@ -1,4 +1,4 @@
package com.engine.attendance.persongroup.service;
package com.engine.attendance.component.persongroup.service;
import java.util.Map;

@ -1,7 +1,7 @@
package com.engine.attendance.persongroup.service.impl;
package com.engine.attendance.component.persongroup.service.impl;
import com.engine.attendance.persongroup.service.PersonGroupService;
import com.engine.attendance.component.persongroup.service.PersonGroupService;
import com.engine.common.util.DbTools;
import com.engine.common.util.Utils;
import com.engine.core.impl.Service;

@ -1,10 +1,10 @@
package com.engine.attendance.persongroup.service.impl;
package com.engine.attendance.component.persongroup.service.impl;
import com.engine.attendance.persongroup.cmd.GetDatatableCmd;
import com.engine.attendance.persongroup.cmd.GetDatatableCountCmd;
import com.engine.attendance.persongroup.cmd.GetDatatableRecurrenceCmd;
import com.engine.attendance.persongroup.commonutil.CommonUtil;
import com.engine.attendance.persongroup.service.SchedulingResultsService;
import com.engine.attendance.component.persongroup.cmd.GetDatatableCmd;
import com.engine.attendance.component.persongroup.cmd.GetDatatableCountCmd;
import com.engine.attendance.component.persongroup.cmd.GetDatatableRecurrenceCmd;
import com.engine.attendance.component.persongroup.commonutil.PersongroupCommonUtil;
import com.engine.attendance.component.persongroup.service.SchedulingResultsService;
import com.engine.core.impl.Service;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
@ -16,11 +16,11 @@ import java.util.Map;
@Slf4j
public class SchedulingResultsServiceImpl extends Service implements SchedulingResultsService {
private Map<String,Object> personGroupMap = CommonUtil.getPersonGroup();
private Map<String,Object> departMentMap = CommonUtil.getDepartMent();
private Map<String,Object> subCompanyMap = CommonUtil.getSubCompany();
private Map<String,Object> classesInformationMap = CommonUtil.getClassesInformation();
private Map<String,Object> candidateTeamMap = CommonUtil.getCandidateTeam();
private Map<String,Object> personGroupMap = PersongroupCommonUtil.getPersonGroup();
private Map<String,Object> departMentMap = PersongroupCommonUtil.getDepartMent();
private Map<String,Object> subCompanyMap = PersongroupCommonUtil.getSubCompany();
private Map<String,Object> classesInformationMap = PersongroupCommonUtil.getClassesInformation();
private Map<String,Object> candidateTeamMap = PersongroupCommonUtil.getCandidateTeam();
@Override
public Map<String, Object> queryDataTable(Map<String, Object> params) {

@ -1,14 +1,11 @@
package com.engine.attendance.persongroup.web;
package com.engine.attendance.component.persongroup.web;
import com.alibaba.fastjson.JSONObject;
import com.cloudstore.dev.api.bean.SplitPageBean;
import com.engine.attendance.persongroup.service.PersonGroupService;
import com.engine.attendance.persongroup.service.impl.PersonGroupServiceImpl;
import com.engine.attendance.component.persongroup.service.PersonGroupService;
import com.engine.attendance.component.persongroup.service.impl.PersonGroupServiceImpl;
import com.engine.common.util.ApiReturnTools;
import com.engine.common.util.ParamUtil;
import com.engine.common.util.ServiceUtil;
import lombok.extern.slf4j.Slf4j;
import weaver.general.Util;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
@ -19,9 +16,6 @@ import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@ -66,5 +60,4 @@ public class PersonGroupAction {
}
}
}

@ -1,10 +1,11 @@
package com.engine.attendance.persongroup.web;
package com.engine.attendance.component.persongroup.web;
import com.engine.attendance.persongroup.service.SchedulingResultsService;
import com.engine.attendance.persongroup.service.impl.SchedulingResultsServiceImpl;
import com.engine.attendance.component.persongroup.service.SchedulingResultsService;
import com.engine.attendance.component.persongroup.service.impl.SchedulingResultsServiceImpl;
import com.engine.common.util.ApiReturnTools;
import com.engine.common.util.ParamUtil;
import com.engine.common.util.ServiceUtil;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@ -13,7 +14,7 @@ import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import java.util.Map;
@Slf4j
public class SchedulingResultsAction {
private SchedulingResultsService basicsetService = ServiceUtil.getService(SchedulingResultsServiceImpl.class);
@ -25,8 +26,13 @@ public class SchedulingResultsAction {
@Path("/getSchedulingData")
@Produces({"text/plain"})
public String getSchedulingData(@Context HttpServletRequest request, @Context HttpServletResponse response) {
try {
Map<String,Object> paramMap = ParamUtil.request2Map(request);
Map<String,Object> dataMap = basicsetService.queryDataTable(paramMap);
return ApiReturnTools.success(dataMap);
}catch (Exception e){
log.error("execute fail,catch error: [{}]",e);
return ApiReturnTools.error("500","saveApplicableOrganization error");
}
}
}

@ -0,0 +1,28 @@
package com.engine.attendance.enums;
import com.finance.toolkit.BaseEnum;
public enum AttendanceItemType implements BaseEnum {
LATE("0","迟到"),
LEAVE_EARLY("1","早退"),
ABSENTEESIM("2","旷工"),;
private String key;
private String value;
AttendanceItemType(String key,String value){
this.key=key;
this.value=value;
}
@Override
public String getKey() {
return this.key;
}
@Override
public String getValue() {
return this.value;
}
}

@ -0,0 +1,4 @@
# attendance.attendanceAnalysis
## 考勤流程模块
##

@ -1,4 +1,7 @@
package com.engine.attendance.workflow.service;
import java.util.Map;
public interface ProcessSubmitCheckService {
Map<String,Object> processSubmitCheck(Map<String,Object> params);
}

@ -1,4 +1,88 @@
package com.engine.attendance.workflow.service.impl;
public interface ProcessSubmitCheckServiceImpl {
import com.engine.attendance.workflow.service.ProcessSubmitCheckService;
import com.engine.common.util.CommonUtil;
import com.engine.common.util.DateUtil;
import com.engine.common.util.DbTools;
import com.engine.core.impl.Service;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import weaver.general.Util;
import weaver.hrm.company.DepartmentComInfo;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Set;
@Slf4j
public class ProcessSubmitCheckServiceImpl extends Service implements ProcessSubmitCheckService {
@Override
public Map<String, Object> processSubmitCheck(Map<String, Object> params) {
String userId = Util.null2String(params.get("userId"));
String submitDate = Util.null2String(params.get("submitDate"));
String modeId = Util.null2String(params.get("modeId"));
Map<String,Object> resultMap = Maps.newHashMap();
resultMap.put("result","0");
Set<String> attendanceSetIdsSets = CommonUtil.getDataIds(userId,modeId,null,null);
log.info("attendanceSetIdsSets : {}",attendanceSetIdsSets);
LocalDateTime localDateTime = DateUtil.getTime(submitDate);
int year = localDateTime.getYear();
int month = localDateTime.getMonth().getValue();
String sql = "select id,departmentid,subcompanyid1 from hrmresource where id =?";
Map<String,Object> departMentMap = DbTools.getSqlToMap(sql,userId);
String deptid = Util.null2String(departMentMap.get("departmentid"));
String pdeptids = "";
try {
pdeptids = new DepartmentComInfo().getAllParentDepartId(Util.null2String(departMentMap.get("departmentid")), pdeptids);
pdeptids = deptid + pdeptids;
log.info("pdeptids : [{}]",pdeptids);
sql = "select a.zt,a.gzrq,a.gzsj,b.zt dtzt,b.tsbm,b.gzrq dtgzrq,b.gzsj dtgzsj from uf_jcl_kq_kqzq a left join uf_jcl_kq_kqzq_dt1 b on a.id=b.mainid where a.nd=? and a.mc=? and a.yf=?";
if (attendanceSetIdsSets.toArray().length > 0){
List<Map<String,Object>> list = DbTools.getSqlToList(sql,year,attendanceSetIdsSets.toArray()[0],month);
for (Map<String,Object> dataMap : list){
//先看人员是否在此笔考勤周期的明细中如果在看明细记录上的开关账状态如果状态为关账直接返回false否则看明细记录上的关账日期时间是否小于当前日期时间如果小于返回false;
String tsbm = Util.null2String(dataMap.get("tsbm"));
String dtzt = Util.null2String(dataMap.get("dtzt"));
if (!"".equals(tsbm) && CommonUtil.ifContainStr(pdeptids,tsbm,",")){
//明细表有值
if (dtzt.equals("1")){
//关账
resultMap.put("result","1");
}else {
String gzrq = Util.null2String(dataMap.get("dtgzrq")) +" "+Util.null2String(dataMap.get("dtgzsj")) +":00";
if (DateUtil.getBetWeenMinutes(gzrq,submitDate,DateUtil.yyyyMMddHHmm) >0){
resultMap.put("result","1");
}
}
}
}
if ("0".equals(resultMap.get("result"))){
for (Map<String,Object> dataMap : list){
//先看人员是否在此笔考勤周期的明细中如果在看明细记录上的开关账状态如果状态为关账直接返回false否则看明细记录上的关账日期时间是否小于当前日期时间如果小于返回false;
String zt = Util.null2String(dataMap.get("zt"));
String gzrq = Util.null2String(dataMap.get("gzrq")) +" "+Util.null2String(dataMap.get("gzsj")) +":00";
if (zt.equals("1")){
//关账
resultMap.put("result","1");
}else {
if (DateUtil.getBetWeenMinutes(gzrq,submitDate,DateUtil.yyyyMMddHHmm) >0){
resultMap.put("result","1");
}
}
}
}
}
}catch (Exception e){
log.error("catch error :{}",e);
}
return resultMap;
}
}

@ -1,4 +0,0 @@
package com.engine.attendance.workflow.web;
public class ProcessSubmitCheck {
}

@ -0,0 +1,40 @@
package com.engine.attendance.workflow.web;
import com.engine.attendance.workflow.service.ProcessSubmitCheckService;
import com.engine.attendance.workflow.service.impl.ProcessSubmitCheckServiceImpl;
import com.engine.common.util.ApiReturnTools;
import com.engine.common.util.ParamUtil;
import com.engine.common.util.ServiceUtil;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import java.util.Map;
@Slf4j
public class ProcessSubmitCheckApi {
private ProcessSubmitCheckService basicsetService = ServiceUtil.getService(ProcessSubmitCheckServiceImpl.class);
/**
*
* @return
*/
@POST
@Path("/processSubmitCheck")
@Produces({"text/plain"})
public String processSubmitCheck(@Context HttpServletRequest request, @Context HttpServletResponse response) {
try {
Map<String,Object> paramMap = ParamUtil.request2Map(request);
Map<String,Object> dataMap = basicsetService.processSubmitCheck(paramMap);
return ApiReturnTools.success(dataMap);
}catch (Exception e){
log.error("execute fail,catch error: [{}]",e);
return ApiReturnTools.error("500","processSubmitCheck error");
}
}
}

@ -0,0 +1,17 @@
package com.engine.common.exception;
public class ExceptionUtil {
public static String getRealMessage(Throwable e) {
while (e != null) {
Throwable cause = e.getCause();
if (cause == null) {
return e.getMessage();
}
e = cause;
}
return "";
}
}

@ -0,0 +1,15 @@
package com.engine.common.exception;
public class SalaryRunTimeException extends RuntimeException {
public SalaryRunTimeException(String message) {
super(message);
}
public SalaryRunTimeException(Throwable cause) {
super(cause);
}
public SalaryRunTimeException(String message, Throwable cause) {
super(message, cause);
}
}

@ -1,8 +1,15 @@
package com.engine.common.util;
import com.engine.attendance.component.persongroup.commonutil.PersongroupCommonUtil;
import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j;
import weaver.general.Util;
import weaver.hrm.company.DepartmentComInfo;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
@Slf4j
public class CommonUtil {
@ -50,4 +57,88 @@ public class CommonUtil {
return updateSql;
}
public static Set<String> getDataIds(String resourceId,String modeId,String startDate,String endDate){
String sql = "select dxlx,dataid,dx from uf_syzz where modeid=?";
List<Map<String,Object>> organizationList = DbTools.getSqlToList(sql,modeId);
sql = "select id,departmentid,subcompanyid1 from hrmresource where id =?";
Map<String,Object> departMentMap = DbTools.getSqlToMap(sql,resourceId);
Set<String> dataIds = Sets.newHashSet();
Map<String, List<Map<String,Object>>> organizationListGroupBydxlx = organizationList.stream().collect(Collectors.groupingBy(e ->e.get("dxlx").toString()));
//对象类型为人员
List<Map<String,Object>> personOrganizationList = organizationListGroupBydxlx.get("0");
//对象类型为人员组织
List<Map<String,Object>> personGroupOrganizationList = organizationListGroupBydxlx.get("1");
//对象类型为部门
List<Map<String,Object>> departmentOrganizationList = organizationListGroupBydxlx.get("2");
//对象类型为分部
List<Map<String,Object>> subCompanyOrganizationList = organizationListGroupBydxlx.get("3");
if (personOrganizationList != null){
for (Map<String,Object> personOrganization :personOrganizationList){
String dx = Util.null2String(personOrganization.get("dx"));
String ids = dx.split("-")[0];
if (ids.equals(resourceId)){
dataIds.add(Util.null2String(personOrganization.get("dataid")));
}
}
}
try {
if (departmentOrganizationList != null){
String deptid = Util.null2String(departMentMap.get("departmentid"));
String pdeptids = "";
pdeptids = new DepartmentComInfo().getAllParentDepartId(Util.null2String(departMentMap.get("departmentid")), pdeptids);
pdeptids = deptid + pdeptids;
log.info("pdeptids : [{}]",pdeptids);
for (Map<String,Object> departmentOrganization :departmentOrganizationList){
String dx = Util.null2String(departmentOrganization.get("dx"));
String ids = dx.split("-")[0];
for (String pdeptid : pdeptids.split(",")){
if (pdeptid.equals(ids)){
dataIds.add(Util.null2String(departmentOrganization.get("dataid")));
}
}
}
}
}catch (Exception e){
log.error("catch error :{}",e);
}
if (subCompanyOrganizationList != null){
String subCompanyId = Util.null2String(departMentMap.get("subcompanyid1"));
for (Map<String,Object> subCompanyOrganization :subCompanyOrganizationList){
String dx = Util.null2String(subCompanyOrganization.get("dx"));
String ids = dx.split("-")[0];
if (ids.equals(subCompanyId)){
dataIds.add(Util.null2String(subCompanyOrganization.get("dataid")));
}
}
}
if (personGroupOrganizationList != null){
Set<String> personGroupIds = personGroupOrganizationList.stream().map(e -> Util.null2String(e.get("dx")).split("-")[0]).collect(Collectors.toSet());
sql = "select mainid,empid,filters,bdate,edate from uf_ryqz_dt1 where mainid in ("+String.join(",",personGroupIds)+")";
log.info("query personGroupData : {}",sql);
List<Map<String,Object>> personGroupData = DbTools.getSqlToList(sql);
Set<String> personnelGroupIds = PersongroupCommonUtil.getPersonnelGroupingByPerson(personGroupData,resourceId,startDate,endDate);
log.info("personnelGroupIds : {}",personnelGroupIds);
for (Map<String,Object> personGroupOrganization :personGroupOrganizationList){
String personnelGroupId = Util.null2String(personGroupOrganization.get("dx")).split("-")[0];
if (personnelGroupIds.contains(personnelGroupId)){
dataIds.add(Util.null2String(personGroupOrganization.get("dataid")));
}
}
}
log.info("dataIds : {}",dataIds);
return dataIds;
}
public static boolean ifContainStr(String fatherStr,String sonStr,String mark){
for (String pdeptid : fatherStr.split(mark)){
if (pdeptid.equals(mark)){
return true;
}
}
return false;
}
}

@ -38,9 +38,14 @@ public class DateUtil {
return LocalDateTime.now().format(formatter);
}
//获得往后日期
public static String getCurrentDatePlusDay(int day){
return LocalDateTime.now().plusDays(day).format(yyyyMMdd);
}
//获得往前日期
public static String getCurrentDateMinusDay(int day){
return LocalDateTime.now().minusDays(day).format(yyyyMMdd);
}
public static LocalDateTime getTime(String time){
@ -114,6 +119,18 @@ public class DateUtil {
long daysBetween = ChronoUnit.DAYS.between(startDate, endDate);
return Math.toIntExact(daysBetween);
}
/**
*
* @param startTime yyyy-MM-dd
* @return
*/
public static int getBetWeenMinutes(String startTime,String endTime,DateTimeFormatter formatter){
LocalDateTime startDate = LocalDateTime.parse(startTime,formatter);
LocalDateTime endDate = LocalDateTime.parse(endTime,formatter);
long daysBetween = ChronoUnit.MINUTES.between(startDate, endDate);
return Math.toIntExact(daysBetween);
}
/**
*

@ -0,0 +1,177 @@
package com.engine.common.util;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.engine.common.exception.ExceptionUtil;
import com.engine.common.exception.SalaryRunTimeException;
import com.engine.common.service.HrmCommonService;
import com.engine.common.service.impl.HrmCommonServiceImpl;
import com.engine.core.exception.ECException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import weaver.general.BaseBean;
import weaver.hrm.User;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
/**
*
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: </p>
*
* @author qiantao
* @version 1.0
**/
@Slf4j
public class ResponseResult<T, R> {
private static final long serialVersionUID = 1L;
private final User user;
private final HrmCommonService hrmCommonService = new HrmCommonServiceImpl();
private final BaseBean baseBean = new BaseBean();
private final Boolean isLog = "true".equals(baseBean.getPropValue("hrmSalary", "log"));
public ResponseResult(User user) {
this.user = user;
}
/**
*
*/
public String run(Function<T, R> f, T t) {
try {
if (isLog) {
log.info("run salary api , param {}", t);
}
return Ok(f.apply(t));
} catch (SalaryRunTimeException e) {
log.error("salary api run fail , param {}", t, e);
return Error(e.getMessage());
} catch (ECException e) {
log.error("salary api run fail , param {}", t, e);
Throwable cause = e.getCause();
String message = "";
while (cause != null) {
Throwable causeTmp = cause.getCause();
if (causeTmp == null) {
message = cause.getMessage();
}
cause = causeTmp;
}
return Error(message);
} catch (Exception e) {
log.error("salary api run fail , param {}", t, e);
return Error("系统异常!");
}
}
/**
*
*/
public String run(Consumer<T> f, T t) {
try {
if (isLog) {
log.info("run salary api , param {}", t);
}
f.accept(t);
return Ok();
} catch (SalaryRunTimeException e) {
log.error("salary api run fail , param {}", t, e);
return Error(e.getMessage());
} catch (ECException e) {
log.error("salary api run fail , param {}", t, e);
return Error(ExceptionUtil.getRealMessage(e));
} catch (Exception e) {
log.error("salary api run fail , param {}", t, e);
return Error("系统异常!", e);
}
}
/**
*
*/
public String run(Supplier<R> f) {
try {
if (isLog) {
log.info("run salary api");
}
return Ok(f.get());
} catch (SalaryRunTimeException e) {
log.error("salary api run fail", e);
return Error(e.getMessage());
} catch (ECException e) {
log.error("salary api run fail", e);
Throwable cause = e.getCause();
return Error(cause.getMessage());
} catch (Exception e) {
log.error("salary api run fail", e);
return Error("系统异常!", e);
}
}
private static String getJsonString(Object apidatas) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(apidatas);
}
/**
*
*/
private String Ok() {
Map<String, Object> apidatas = new HashMap<>();
apidatas.put("status", true);
return JSONObject.toJSONString(apidatas, SerializerFeature.DisableCircularReferenceDetect);
}
/**
*
*/
private String Ok(R r) throws JsonProcessingException {
Map<String, Object> apidatas = new HashMap<>();
apidatas.put("status", true);
apidatas.put("data", r);
String success = getJsonString(apidatas);
if (isLog) {
log.info("run salary api success return {}", success);
}
return success;
}
/**
*
*/
private static String Error(String message) {
Map<String, Object> apidatas = new HashMap<>();
apidatas.put("status", false);
apidatas.put("errormsg", message);
return JSONObject.toJSONString(apidatas, SerializerFeature.DisableCircularReferenceDetect);
}
/**
*
*/
private static String Error(String message, Exception e) {
Map<String, Object> apidatas = new HashMap<>();
apidatas.put("status", false);
apidatas.put("errormsg", message);
apidatas.put("error", e.getMessage());
return JSONObject.toJSONString(apidatas, SerializerFeature.DisableCircularReferenceDetect);
}
}

@ -0,0 +1,4 @@
# attendance.attendanceAnalysis
## 考勤方案模块
##

@ -0,0 +1,4 @@
# attendance.attendanceAnalysis
## 考勤分析模块
## 用于计算分析人员的考勤,算出正常上下班、加班、早退、迟到等一些列考勤项目,并入到出勤结果表

@ -0,0 +1,4 @@
# attendance.attendanceAnalysis
## 考勤组件模块
## person_group 人员分组功能组件

@ -0,0 +1,4 @@
# attendance.attendanceAnalysis
## 考勤流程模块
##

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -1,20 +1,25 @@
import com.google.common.collect.Lists;
import weaver.general.Util;
import com.engine.common.util.CommonUtil;
import com.engine.common.util.DateUtil;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
public class Test {
public static void main(String[] args) {
List<Map<String,Object>> personGroupOrganizationList = Lists.newArrayList();
personGroupOrganizationList.add(new HashMap(){{put("dx","4-夜班人员");}});
personGroupOrganizationList.add(new HashMap(){{put("dx","8-测试条件录入");}});
Set<String> personGroupIds = personGroupOrganizationList.stream().map(e -> Util.null2String(e.get("dx")).split("-")[0]).collect(Collectors.toSet());
System.out.println(String.join(",",personGroupIds));
System.out.println(DateUtil.getCurrentDateMinusDay(1));
// List<Map<String,Object>> personGroupOrganizationList = Lists.newArrayList();
// personGroupOrganizationList.add(new HashMap(){{put("dx","4-夜班人员");}});
// personGroupOrganizationList.add(new HashMap(){{put("dx","8-测试条件录入");}});
// Set<String> personGroupIds = personGroupOrganizationList.stream().map(e -> Util.null2String(e.get("dx")).split("-")[0]).collect(Collectors.toSet());
// System.out.println(String.join(",",personGroupIds));
}
public static int getDaysBetween(String date1, String date2) {

Loading…
Cancel
Save