Merge remote-tracking branch 'origin/main'

# Conflicts:
#	src/com/engine/jucailinkq/attendance/workflow/action/askforleave/BatchAskForLeaveWorkFlowSubmitAction.java
main
sy 5 months ago
commit 489bacad72

@ -40,8 +40,12 @@ public class GetAskForLeaveCmd extends AbstractCommonCommand<Map<String,Object>>
String userId = Util.null2String(params.get("userId"));
String analysisDate = Util.null2String(params.get("analysisDate"));
List<Map<String, Object>> scheduleResult = (List<Map<String, Object>>)params.get("scheduleResult");
String sql = "select b.qjry,b.jqlx,b.ksrq,b.kssj,b.jsrq,b.jssj,b.qjsc,b.qtj,b.btj from uf_jcl_kq_qjjl a left join uf_jcl_kq_qjjl_dt1 b on a.id = b.mainid where b.qjry=? and b.ksrq<=? and b.jsrq>=? and (b.cxqj=0 or b.cxqj is null) and a.jlzt=1";
List<Map<String,Object>> askForLeaveList = DbTools.getSqlToList(sql,userId,DateUtil.AfterDay(analysisDate,1), DateUtil.beforeDay(analysisDate,1));
List<Map<String, Object>> attendanceItems = (List<Map<String, Object>>)params.get("attendanceItems");
List<Map<String, Object>> askforList = (List<Map<String, Object>>)params.get("askforList");
//String sql = "select b.qjry,b.jqlx,b.ksrq,b.kssj,b.jsrq,b.jssj,b.qjsc,b.qtj,b.btj from uf_jcl_kq_qjjl a left join uf_jcl_kq_qjjl_dt1 b on a.id = b.mainid where b.qjry=? and b.ksrq<=? and b.jsrq>=? and (b.cxqj=0 or b.cxqj is null) and a.jlzt=1";
// List<Map<String,Object>> askForLeaveList = DbTools.getSqlToList(sql,userId,DateUtil.AfterDay(analysisDate,1), DateUtil.beforeDay(analysisDate,1));
List<Map<String,Object>> askForLeaveList = askforList.stream().filter(e->DateUtil.getTime(e.get("ksrq").toString()).compareTo(DateUtil.getTime(DateUtil.AfterDay(analysisDate,1))) <=0 &&
DateUtil.getTime(e.get("jsrq").toString()).compareTo(DateUtil.getTime(DateUtil.beforeDay(analysisDate,1))) >=0).collect(Collectors.toList());
Map<String,Map<String,Object>> askForLeaveItems = Maps.newHashMap();
@ -53,7 +57,7 @@ public class GetAskForLeaveCmd extends AbstractCommonCommand<Map<String,Object>>
List<Map<String,Object>> haveAskForLeaveList = askForLeaveList.stream().filter(e->{
String kssj = e.get("ksrq")+" "+e.get("kssj");
String jssj = e.get("jsrq")+" "+e.get("jssj");
if (e.get("ksrq").equals(analysisDate) && "".equals(Util.null2String(e.get("kssj")))){
if ((DateUtil.getTime(Util.null2String(e.get("ksrq"))).compareTo(DateUtil.getTime(analysisDate)) <= 0) && (DateUtil.getTime(Util.null2String(e.get("jsrq"))).compareTo(DateUtil.getTime(analysisDate)) >= 0) && "".equals(Util.null2String(e.get("kssj")))){
jplxSet.add(e.get("jqlx").toString());
return true;
}else if (!"".equals(Util.null2String(e.get("kssj"))) && DateUtil.getTime(kssj).compareTo(DateUtil.getTime(lastjssj)) <0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(firstKssj)) >0 ){
@ -76,20 +80,7 @@ public class GetAskForLeaveCmd extends AbstractCommonCommand<Map<String,Object>>
return resultMap;
}
sql = "select * from uf_jcl_kq_kqxm where id in ("+String.join(",",jplxSet)+")";
List<Map<String,Object>> askForLeaveItemList = DbTools.getSqlToList(sql);
List<String> fatherItems = askForLeaveItemList.stream().filter(e->Util.null2String(e.get("sffzcx")).equals(CheckBoxEnum.CHECKED.getKey())).map(e->e.get("id").toString()).collect(Collectors.toList());
if (fatherItems.size() > 0){
sql = "select id keyid,mc kqxm,a.* from uf_jcl_kq_kqxm a where (xmzt is null or xmzt <> '0') and a.sjxm in ("+String.join(",",fatherItems)+")";
List<Map<String,Object>> sonItemList = DbTools.getSqlToList(sql);
Map<String,List<Map<String,Object>>> sonGroupMap = sonItemList.stream().collect(Collectors.groupingBy(e->e.get("sjxm").toString()));
for (Map<String,Object> attendanceItem :askForLeaveItemList){
if (CheckBoxEnum.CHECKED.getKey().equals(attendanceItem.get("sffzcx"))){
attendanceItem.put("sonItems",sonGroupMap.get(attendanceItem.get("id")));
}
}
}
List<Map<String,Object>> askForLeaveItemList = attendanceItems.stream().filter(e->jplxSet.contains(e.get("keyid").toString())).collect(Collectors.toList());
Map<String,List<Map<String,Object>>> collect = askForLeaveItemList.stream().collect(Collectors.groupingBy(e->e.get("id").toString()));

@ -41,7 +41,8 @@ public class GetAttendanceCycleCmd extends AbstractCommonCommand<Map<String,Obje
String modeId = Utils.getFormmodeIdMap().get("uf_jcl_kq_kqzqmc");
params.put("modeId",modeId);
Map<String,Object> userToDateMap = Maps.newHashMap();
Map<String,Object> person = new GetPersonBySuitOrganzationCmd(params).execute(commandContext);
Map<String,Object> resultMap = new GetPersonBySuitOrganzationCmd(params).execute(commandContext);
Map<String,Object> person = (Map<String,Object>)resultMap.get("personMap");
Set<String> attendanceCycleSet = Sets.newHashSet();
Set<String> subcompanyids = userList.stream().map(e->e.get("subcompanyid1").toString()).collect(Collectors.toSet());
Map<String,String> subcompanyToAttendanceCycleMap = Maps.newHashMap();

@ -5,7 +5,6 @@ import com.engine.jucailinkq.attendance.enums.ClassSegmentTypeEnum;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools;
import com.engine.jucailinkq.common.util.ExtensionClassHolder;
import com.engine.jucailinkq.common.util.Utils;
import com.engine.core.interceptor.CommandContext;
@ -125,16 +124,16 @@ public class GetClockInTimeListCmd extends AbstractCommonCommand<Map<String,Obje
//当最早打卡时间点在前一天时,获取前一天的出勤结果打卡数据
String earliestDate = DateUtil.beforeDay(needGetDate,1);
Map<String,Object> clockIntime = clockInTimeMap.get(earliestDate);
if (clockIntime == null || clockIntime.size()==0){
String sql = "select rq,j1,c1,j2,c2,j3,c3,j4,c4,j5,c5,j6,c6,j7,c7,j8,c8 from uf_jcl_kq_cqjg where ygid=? and rq>=? and rq<=?";
List<Map<String,Object>> attendanceResult = DbTools.getSqlToList(sql,userId,DateUtil.beforeDay(earliestDate,1),earliestDate);
Map<String, List<Map<String,Object>>> attendanceCollect = attendanceResult.stream().collect(Collectors.groupingBy(e->e.get("rq").toString()));
clockIntime = attendanceCollect.get(earliestDate) == null?null:attendanceCollect.get(earliestDate).get(0);
if (clockIntime == null || clockIntime.size()==0){
//取不到当天的就再往前取一天
clockIntime = attendanceCollect.get(DateUtil.beforeDay(earliestDate,1)) == null?null:attendanceCollect.get(DateUtil.beforeDay(earliestDate,1)).get(0);
}
}
// if (clockIntime == null || clockIntime.size()==0){
// String sql = "select rq,j1,c1,j2,c2,j3,c3,j4,c4,j5,c5,j6,c6,j7,c7,j8,c8 from uf_jcl_kq_cqjg where ygid=? and rq>=? and rq<=?";
// List<Map<String,Object>> attendanceResult = DbTools.getSqlToList(sql,userId,DateUtil.beforeDay(earliestDate,1),earliestDate);
// Map<String, List<Map<String,Object>>> attendanceCollect = attendanceResult.stream().collect(Collectors.groupingBy(e->e.get("rq").toString()));
// clockIntime = attendanceCollect.get(earliestDate) == null?null:attendanceCollect.get(earliestDate).get(0);
// if (clockIntime == null || clockIntime.size()==0){
// //取不到当天的就再往前取一天
// clockIntime = attendanceCollect.get(DateUtil.beforeDay(earliestDate,1)) == null?null:attendanceCollect.get(DateUtil.beforeDay(earliestDate,1)).get(0);
// }
// }
if (clockIntime !=null && clockIntime.size()>0){
for (int i=8;i>0;i--){
String in = Util.null2String(clockIntime.get("j"+i));
@ -201,15 +200,19 @@ public class GetClockInTimeListCmd extends AbstractCommonCommand<Map<String,Obje
String userId = Util.null2String(params.get("userId"));
String earliestTime = date+" 00:00:00";
Map<String,Object> clockIntime = clockInTimeMap.get(date);
if (clockIntime == null || clockIntime.size() == 0){
String sql = "select rq,j1,c1,j2,c2,j3,c3,j4,c4,j5,c5,j6,c6,j7,c7,j8,c8 from uf_jcl_kq_cqjg where ygid=? and rq>=? and rq<=?";
List<Map<String,Object>> attendanceResult = DbTools.getSqlToList(sql,userId,DateUtil.beforeDay(beforeOneDay,1),beforeOneDay);
Map<String, List<Map<String,Object>>> attendanceCollect = attendanceResult.stream().collect(Collectors.groupingBy(e->e.get("rq").toString()));
clockIntime = attendanceCollect.get(beforeOneDay) == null?null:attendanceCollect.get(beforeOneDay).get(0);
// if (clockIntime == null || clockIntime.size() == 0){
// String sql = "select rq,j1,c1,j2,c2,j3,c3,j4,c4,j5,c5,j6,c6,j7,c7,j8,c8 from uf_jcl_kq_cqjg where ygid=? and rq>=? and rq<=?";
// List<Map<String,Object>> attendanceResult = DbTools.getSqlToList(sql,userId,DateUtil.beforeDay(beforeOneDay,1),beforeOneDay);
// Map<String, List<Map<String,Object>>> attendanceCollect = attendanceResult.stream().collect(Collectors.groupingBy(e->e.get("rq").toString()));
// clockIntime = attendanceCollect.get(beforeOneDay) == null?null:attendanceCollect.get(beforeOneDay).get(0);
// if (clockIntime == null || clockIntime.size() == 0){
// //取不到当天的就再往前取一天
// clockIntime = attendanceCollect.get(DateUtil.beforeDay(beforeOneDay,1)) == null?null:attendanceCollect.get(DateUtil.beforeDay(beforeOneDay,1)).get(0);
// }
// }
if (clockIntime == null || clockIntime.size() == 0){
//取不到当天的就再往前取一天
clockIntime = attendanceCollect.get(DateUtil.beforeDay(beforeOneDay,1)) == null?null:attendanceCollect.get(DateUtil.beforeDay(beforeOneDay,1)).get(0);
}
clockIntime = clockInTimeMap.get(DateUtil.beforeDay(beforeOneDay,1));
}
if (clockIntime !=null && clockIntime.size()>0){
for (int i=8;i>0;i--){

@ -40,9 +40,14 @@ public class GetEvectionCmd extends AbstractCommonCommand<Map<String,Object>> {
String userId = Util.null2String(params.get("userId"));
String analysisDate = Util.null2String(params.get("analysisDate"));
List<Map<String, Object>> scheduleResult = (List<Map<String, Object>>)params.get("scheduleResult");
//String sql = "select b.ccr,a.cclx,a.ccsd,b.ksrq,b.jsrq,b.kssj,b.jssj,b.ccsc,b.qtcc,b.btcc,b.cxcc from uf_jcl_kq_ccjl a left join uf_jcl_kq_ccjl_dt1 b on a.id = b.mainid where b.ccr=? and b.ksrq>=? and b.ksrq<=? and (b.cxcc=0 or b.cxcc is null)";
String sql = "select b.ccr,b.cclx,b.ksrq,b.jsrq,b.kssj,b.jssj,b.ccsc,b.qtcc,b.btcc,b.cxcc from uf_jcl_kq_ccjl a left join uf_jcl_kq_ccjl_dt1 b on a.id = b.mainid where b.ccr=? and b.ksrq<=? and b.jsrq>=? and (b.cxcc=0 or b.cxcc is null) and a.jlzt=1";
List<Map<String,Object>> evectionList = DbTools.getSqlToList(sql,userId, DateUtil.AfterDay(analysisDate,1), DateUtil.beforeDay(analysisDate,1));
List<Map<String, Object>> attendanceItems = (List<Map<String, Object>>)params.get("attendanceItems");
List<Map<String, Object>> evectionList = (List<Map<String, Object>>)params.get("evectionList");
// String sql = "select b.ccr,b.cclx,b.ksrq,b.jsrq,b.kssj,b.jssj,b.ccsc,b.qtcc,b.btcc,b.cxcc from uf_jcl_kq_ccjl a left join uf_jcl_kq_ccjl_dt1 b on a.id = b.mainid where b.ccr=? and b.ksrq<=? and b.jsrq>=? and (b.cxcc=0 or b.cxcc is null) and a.jlzt=1";
//List<Map<String,Object>> evectionList = DbTools.getSqlToList(sql,userId, DateUtil.AfterDay(analysisDate,1), DateUtil.beforeDay(analysisDate,1));
evectionList = evectionList.stream().filter(e->DateUtil.getTime(e.get("ksrq").toString()).compareTo(DateUtil.getTime(DateUtil.AfterDay(analysisDate,1))) <=0 &&
DateUtil.getTime(e.get("jsrq").toString()).compareTo(DateUtil.getTime(DateUtil.beforeDay(analysisDate,1))) >=0).collect(Collectors.toList());
Map<String,Map<String,Object>> evectionItems = Maps.newHashMap();
@ -54,7 +59,7 @@ public class GetEvectionCmd extends AbstractCommonCommand<Map<String,Object>> {
List<Map<String,Object>> haveEvectionList = evectionList.stream().filter(e->{
String kssj = e.get("ksrq")+" "+e.get("kssj");
String jssj = e.get("jsrq")+" "+e.get("jssj");
if (e.get("ksrq").equals(analysisDate) && "".equals(Util.null2String(e.get("kssj")))){
if ((DateUtil.getTime(Util.null2String(e.get("ksrq"))).compareTo(DateUtil.getTime(analysisDate)) <= 0) && (DateUtil.getTime(Util.null2String(e.get("jsrq"))).compareTo(DateUtil.getTime(analysisDate)) >= 0) && "".equals(Util.null2String(e.get("kssj")))){
cclxSet.add(e.get("cclx").toString());
return true;
}else if (!"".equals(Util.null2String(e.get("kssj"))) && DateUtil.getTime(kssj).compareTo(DateUtil.getTime(lastjssj)) <0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(firstKssj)) >0){
@ -74,20 +79,9 @@ public class GetEvectionCmd extends AbstractCommonCommand<Map<String,Object>> {
if (cclxSet.size() == 0){
return resultMap;
}
sql = "select * from uf_jcl_kq_kqxm where id in ("+String.join(",",cclxSet)+")";
List<Map<String,Object>> evectionItemList = DbTools.getSqlToList(sql);
List<String> fatherItems = evectionItemList.stream().filter(e->Util.null2String(e.get("sffzcx")).equals(CheckBoxEnum.CHECKED.getKey())).map(e->e.get("id").toString()).collect(Collectors.toList());
if (fatherItems.size() > 0){
sql = "select id keyid,mc kqxm,a.* from uf_jcl_kq_kqxm a where (xmzt is null or xmzt <> '0') and a.sjxm in ("+String.join(",",fatherItems)+")";
List<Map<String,Object>> sonItemList = DbTools.getSqlToList(sql);
Map<String,List<Map<String,Object>>> sonGroupMap = sonItemList.stream().collect(Collectors.groupingBy(e->e.get("sjxm").toString()));
for (Map<String,Object> evectionItem :evectionItemList){
if (CheckBoxEnum.CHECKED.getKey().equals(evectionItem.get("sffzcx"))){
evectionItem.put("sonItems",sonGroupMap.get(evectionItem.get("id")));
}
}
// sql = "select * from uf_jcl_kq_kqxm where id in ("+String.join(",",cclxSet)+")";
List<Map<String,Object>> evectionItemList = attendanceItems.stream().filter(e->cclxSet.contains(e.get("keyid").toString())).collect(Collectors.toList());
}
Map<String,List<Map<String,Object>>> collect = evectionItemList.stream().collect(Collectors.groupingBy(e->e.get("id").toString()));

@ -46,8 +46,12 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand<Map<String,O
@Override
public Map<String, Object> execute(CommandContext commandContext) {
/** 班次信息*/
//考勤项目
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)params.get("attendanceItems");
//班次
List<Map<String,Object>> allClassInfoList = (List<Map<String,Object>>)params.get("allClassInfoList");
//加班计划
List<Map<String,Object>> allOverPlanList = (List<Map<String,Object>>)params.get("allOverPlanList");
Map<String,Object> schedulingResultsMap = (Map<String,Object>)params.get("schedulingResultsMap");
List<Map<String,Object>> schedulingResultsList = (List<Map<String,Object>>)schedulingResultsMap.get("data");
@ -67,18 +71,17 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand<Map<String,O
schedulMap.put("schedulingMapBydate",schedulingMapBydate);
Map<String,List<Map<String,Object>>> resultMap = Maps.newHashMap();
String sql = "select a.xxbdkzdjb,a.sfxx,a.id bcxx,a.edsc,a.zgzsc,a.bcsdxx,a.sfdx,a.sfkt,b.bdlx,a.btgz,a.fgsjd,a.zddxfz,a.dxhs,b.kssj dtkssj,b.jssj dtjssj,b.ksdk,b.jsdk,b.tqdkfzs,b.thdkfzs,b.edxss,b.edfzs,b.edts,b.sfdx dtsfdx,b.zddxfz dtzddxfz,b.dxhs dtdxhs,b.gsrq from uf_jcl_kq_bcxx a left join uf_jcl_kq_bcxx_dt1 b on a.id=b.mainid where a.id in (";
String bcxxIds = "";
//String sql = "select a.xxbdkzdjb,a.sfxx,a.id bcxx,a.edsc,a.zgzsc,a.bcsdxx,a.sfdx,a.sfkt,b.bdlx,a.btgz,a.fgsjd,a.zddxfz,a.dxhs,b.kssj dtkssj,b.jssj dtjssj,b.ksdk,b.jsdk,b.tqdkfzs,b.thdkfzs,b.edxss,b.edfzs,b.edts,b.sfdx dtsfdx,b.zddxfz dtzddxfz,b.dxhs dtdxhs,b.gsrq from uf_jcl_kq_bcxx a left join uf_jcl_kq_bcxx_dt1 b on a.id=b.mainid where a.id in (";
List<String> bcxxIdList = Lists.newArrayList();
for (Map.Entry<String,List<Map<String,Object>>> entry :schedulingMap.entrySet()){
if (!entry.getKey().equals("")){
bcxxIds +=entry.getKey() +",";
bcxxIdList.add(entry.getKey());
}
}
List<Map<String,Object>> dataList = Lists.newArrayList();
if (!"".equals(bcxxIds)){
bcxxIds = bcxxIds.substring(0,bcxxIds.length()-1);
sql = sql +bcxxIds+") order by b.gsrq,b.kssj";
dataList = DbTools.getSqlToList(sql);
if (bcxxIdList.size()>0){
dataList = allClassInfoList.stream().filter(e->bcxxIdList.contains(e.get("bcxx"))).collect(Collectors.toList());
Map<String,List<Map<String,Object>>> dataMap = dataList.stream().collect(Collectors.groupingBy(e->Util.null2String(e.get("bcxx"))));
List<Map<String, Object>> finalAttendanceItems = attendanceItems;
@ -109,7 +112,7 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand<Map<String,O
*/
Map<String,Object> clockInTimeDataMap = Maps.newHashMap();
for (Map<String,Object> candidateSchedulingResult:candidateSchedulingResultsList){
Map<String, Object> shiftResult = basicsetService.punchMatchShift(params.get("pbdx").toString(),candidateSchedulingResult,(List<Map<String,Object>>)params.get("clockInData"),(Map<String,Map<String,Object>>)params.get("clockInTimeMap"));
Map<String, Object> shiftResult = basicsetService.punchMatchShift(params,candidateSchedulingResult);
List<Map<String,Object>> bcData = (List<Map<String,Object>>)shiftResult.get("bcData");
for(Map<String,Object> data:bcData){
adjustWorkOverTimeClass(data, attendanceItems,commandContext);
@ -119,8 +122,8 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand<Map<String,O
}
/** 加班计划*/
sql = "select a.id,b.jbry,b.ksrq,b.kssj,b.jblx,b.jsrq,b.jssj,b.jbsc,b.gsrq,b.d_jxgz,b.jxsc from uf_jcl_kq_jbjh a left join uf_jcl_kq_jbjh_dt1 b on a.id=b.mainid where b.jbry =? and b.gsrq>=? and b.gsrq<=? and (b.jbcx=0 or b.jbcx is null) and a.jlzt=1";
Map<String,List<Map<String,Object>>> overtimePlanMap = DbTools.getSqlToList(sql,params.get("pbdx"),params.get("startDate"),params.get("endDate")).stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("gsrq"))));
Map<String,List<Map<String,Object>>> overtimePlanMap = allOverPlanList.stream().filter(e->DateUtil.getTime(e.get("gsrq").toString()).compareTo(DateUtil.getTime(params.get("startDate").toString())) >=0 &&
DateUtil.getTime(e.get("gsrq").toString()).compareTo(DateUtil.getTime(params.get("endDate").toString())) <=0).collect(Collectors.groupingBy(e -> Util.null2String(e.get("gsrq"))));
//考勤项目
for (Map.Entry<String,List<Map<String,Object>>> e: overtimePlanMap.entrySet()){
@ -137,9 +140,7 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand<Map<String,O
}else {
map.put("sfkt","0");
}
//查找对应的考勤项目
String querySql = "select a.id keyid,a.* from uf_jcl_kq_kqxm a where id=?";
List<Map<String,Object>> overPlanattendanceItems = DbTools.getSqlToList(querySql,overtimePlan.get("jblx"));
List<Map<String,Object>> overPlanattendanceItems = attendanceItems.stream().filter(f->f.get("keyid").equals(overtimePlan.get("jblx"))).collect(Collectors.toList());
map.put("bcxx",resultList == null || resultList.size()==0 || resultList.get(0) ==null ? "" :resultList.get(0).get("bcxx"));
@ -220,22 +221,22 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand<Map<String,O
return schedulMap;
}
public List<Map<String,Object>> getDate(Map<String,Object> param){
String userId = params.get("pbdx").toString();
String nd = Util.null2String(param.get("nd"));
String glpb = Util.null2String(param.get("glpb"));
String sql = "select nd,rq,nlrq,rqlx,xq,rlmc from uf_jcl_kq_rlxx a left join uf_jcl_kq_glpb b on a.rlmc=b.qyrl where b.id=? and a.nd=? ";
List<Map<String,Object>> dataList=null;
if ("".equals(glpb)){
sql = "select subcompanyid1 from hrmresource where id =?";
Map<String,Object> departMentMap = DbTools.getSqlToMap(sql,userId);
String subcompanyid1 = departMentMap.get("subcompanyid1").toString();
dataList = Utils.getDefaultDateList(subcompanyid1,nd);
}else {
dataList = DbTools.getSqlToList(sql,glpb,nd);
}
return dataList;
}
// public List<Map<String,Object>> getDate(Map<String,Object> param){
// String userId = params.get("pbdx").toString();
// String nd = Util.null2String(param.get("nd"));
// String glpb = Util.null2String(param.get("glpb"));
// String sql = "select nd,rq,nlrq,rqlx,xq,rlmc from uf_jcl_kq_rlxx a left join uf_jcl_kq_glpb b on a.rlmc=b.qyrl where b.id=? and a.nd=? ";
// List<Map<String,Object>> dataList=null;
// if ("".equals(glpb)){
// sql = "select subcompanyid1 from hrmresource where id =?";
// Map<String,Object> departMentMap = DbTools.getSqlToMap(sql,userId);
// String subcompanyid1 = departMentMap.get("subcompanyid1").toString();
// dataList = Utils.getDefaultDateList(subcompanyid1,nd);
// }else {
// dataList = DbTools.getSqlToList(sql,glpb,nd);
// }
// return dataList;
// }
/**
* 1

@ -175,8 +175,9 @@ public class RecordDataCmd extends AbstractCommonCommand<Map<String,Object>> {
DbTools.update(sql,insertDatas.toArray());
}
if (overTimeHolidayList.size() > 0 || overTimeResultList.size() >0){
updateWorkOverTimeDate(userId,analysisDate,overTimeHolidayList,overTimeResultList);
}
return null;
}
@ -194,23 +195,25 @@ public class RecordDataCmd extends AbstractCommonCommand<Map<String,Object>> {
String id = Util.null2String(dataList.get(0).get("id"));
//处理加班结果
try {
if (overTimeResultList.size() > 0){
sql = "select id,jblx,lyid from uf_jcl_kq_jbjg where lyid=? and jbjgly=4";
List<Map<String,Object>> oldOverTimeList = DbTools.getSqlToList(sql,id);
for (Map<String,Object> overTimeResult : overTimeResultList){
overTimeResult.put("lyid",id);
}
try {
updateOverTimeResult(oldOverTimeList,overTimeResultList);
}
//处理假期余额
if (overTimeHolidayList.size() > 0){
sql = "select id,jqid,ktsc,yxsc,wxsc,ztsc,zfsc,jxsc,dzkxsc,lyid,lyjblx from uf_jcl_kq_jqye where lyid=? and lylx=4";
List<Map<String,Object>> oldOverTimeHolidayList = DbTools.getSqlToList(sql,id);
for (Map<String,Object> overTimeHoliday : overTimeHolidayList){
overTimeHoliday.put("lyid",id);
}
updateOverTimeHoliday(oldOverTimeHolidayList,overTimeHolidayList);
}
}catch (Exception e){
log.error("updateWorkOverTimeDate error : [{}]",e);
}
@ -319,7 +322,7 @@ public class RecordDataCmd extends AbstractCommonCommand<Map<String,Object>> {
}else{
double totalKtsc = newDataList.stream().mapToDouble(e->Double.valueOf(e.get("ktsc").toString())).sum();
double totalJxsc = newDataList.stream().mapToDouble(e->Double.valueOf(e.get("jxsc").toString())).sum();
if (totalKtsc == 0){
if (totalKtsc == 0 && totalJxsc==0){
//可休时长为0
deleteList.add(oldData.get("id").toString());
if (oldyxsc > 0){
@ -327,6 +330,9 @@ public class RecordDataCmd extends AbstractCommonCommand<Map<String,Object>> {
revokeHoliday.add(oldData.get("id").toString());
}
}else {
if (totalKtsc == 0 && oldyxsc > 0){
revokeHoliday.add(oldData.get("id").toString());
}
Map<String,Object> newData = newDataList.get(0);
newData.put("ktsc",String.format ("%.2f",totalKtsc));
newData.put("jxsc",String.format ("%.2f",totalJxsc));

@ -605,6 +605,12 @@ public class GetClockInPointCmd extends AbstractCommonCommand<Map<String, Object
beforeScheduleMap.get("jsdk").equals(CheckBoxEnum.CHECKED.getKey())){
scheduleMap.put("ksdk",CheckBoxEnum.UNCHECKED.getKey());
}
if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(beforejssj)) == 0 && ifWorkClassSegment(beforeScheduleMap.get("bdlx").toString()) &&
scheduleMap.get("jsdk").equals(CheckBoxEnum.UNCHECKED.getKey()) && scheduleMap.get("ksdk").equals(CheckBoxEnum.UNCHECKED.getKey()) &&
beforeScheduleMap.get("jsdk").equals(CheckBoxEnum.CHECKED.getKey())){
int thdkfzs = DateUtil.getBetWeenMinutes(Utils.getjssjTime(beforeScheduleMap,analysisDate),Utils.getjssjTime(scheduleMap,analysisDate))+Integer.valueOf(beforeScheduleMap.get("thdkfzs").toString());
beforeScheduleMap.put("thdkfzs",thdkfzs);
}
}
if (afterScheduleMap != null){
@ -620,6 +626,13 @@ public class GetClockInPointCmd extends AbstractCommonCommand<Map<String, Object
afterScheduleMap.get("ksdk").equals(CheckBoxEnum.CHECKED.getKey())){
scheduleMap.put("jsdk",CheckBoxEnum.UNCHECKED.getKey());
}
if (DateUtil.getTime(jssj).compareTo(DateUtil.getTime(afterkssj)) == 0 && ifWorkClassSegment(afterScheduleMap.get("bdlx").toString()) &&
scheduleMap.get("ksdk").equals(CheckBoxEnum.UNCHECKED.getKey()) &&scheduleMap.get("jsdk").equals(CheckBoxEnum.UNCHECKED.getKey()) &&
afterScheduleMap.get("ksdk").equals(CheckBoxEnum.CHECKED.getKey())){
int tqdkfzs = DateUtil.getBetWeenMinutes(Utils.getkssjTime(scheduleMap,analysisDate),Utils.getkssjTime(afterScheduleMap,analysisDate))+Integer.valueOf(afterScheduleMap.get("tqdkfzs").toString());
afterScheduleMap.put("tqdkfzs",tqdkfzs);
}
}
}
}

@ -0,0 +1,100 @@
package com.engine.jucailinkq.attendance.attendanceanalysis.cmd.item;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.ExtensionClassHolder;
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;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
@Slf4j
public class GerPersonAttendanceItemsCmd extends AbstractCommonCommand<Map<String,Object>> {
public GerPersonAttendanceItemsCmd(Map<String, Object> params){
this.params=params;
}
@Override
public BizLogContext getLogContext() {
return null;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
String userId = Util.null2String(params.get("userId"));
String departmentId = Util.null2String(params.get("departmentId"));
String subCompanyId = Util.null2String(params.get("subCompanyId"));
String anysisyDate = Util.null2String(params.get("anysisyDate"));
String seclevel = Util.null2String(params.get("seclevel"));
Map<String, List<Map<String, String>>> personData = (Map<String, List<Map<String, String>>>)params.get("personData");
Map<String, List<Map<String, String>>> personOrganzationMap = (Map<String, List<Map<String, String>>>)params.get("personOrganzationMap");
Map<String, List<Map<String, String>>> departMentMap = (Map<String, List<Map<String, String>>>)params.get("departMentMap");
Map<String, List<Map<String, String>>> subCompanyMap = (Map<String, List<Map<String, String>>>)params.get("subCompanyMap");
Set<String> attendanceItems = Sets.newHashSet();
//人力资源
if (personData.get(userId) != null){
for (Map<String, String> personMap :personData.get(userId)){
attendanceItems.add(personMap.get("dataid"));
}
}
//人员分组
Map<String,List<Map<String,Object>>> personBelongGroup = ExtensionClassHolder.getPersonBelongGroupThreadLocal();
List<Map<String,Object>> personnelGroups = personBelongGroup.get(userId) == null? Lists.newArrayList():personBelongGroup.get(userId);
personnelGroups = personnelGroups.stream().filter(e->(Util.null2String(e.get("bdate")).equals("") || DateUtil.getTime(e.get("bdate").toString()).compareTo(DateUtil.getTime(anysisyDate))<=0) &&
(Util.null2String(e.get("edate")).equals("") || DateUtil.getTime(e.get("edate").toString()).compareTo(DateUtil.getTime(anysisyDate))>=0)).collect(Collectors.toList());
Set<String> personnelGroupIds = personnelGroups.stream().map(e->e.get("mainid").toString()).collect(Collectors.toSet());
for (Map.Entry<String, List<Map<String, String>>> entry: personOrganzationMap.entrySet()){
String personnelGroupId = entry.getKey();
if (personnelGroupIds.contains(personnelGroupId)){
for (Map<String, String> personGroupMap :entry.getValue()){
attendanceItems.add(personGroupMap.get("dataid"));
}
}
}
//部门
try {
Map<String,String> petDepart = ExtensionClassHolder.getPetDepartMentThreadLocal();
String pdeptids = "";
if (petDepart != null){
pdeptids = petDepart.get(departmentId);
}
if (pdeptids == null || pdeptids.equals("")){
pdeptids = new DepartmentComInfo().getAllParentDepartId(Util.null2String(params.get("departmentId")), pdeptids);
pdeptids = departmentId + pdeptids;
}
for (Map.Entry<String, List<Map<String, String>>> entry: departMentMap.entrySet()){
String id = entry.getKey();
for (String pdeptid : pdeptids.split(",")){
if (pdeptid.equals(id)){
for (Map<String, String> map :entry.getValue()){
attendanceItems.add(map.get("dataid"));
}
}
}
}
}catch (Exception e){
log.error("catch error :{}",e);
}
//分部
if (subCompanyMap.get(subCompanyId) != null){
for (Map<String, String> map :subCompanyMap.get(subCompanyId)){
attendanceItems.add(map.get("dataid"));
}
}
Map<String,Object> resultMap = Maps.newHashMap();
resultMap.put("attendanceItems",attendanceItems);
return resultMap;
}
}

@ -122,7 +122,7 @@ public class GetOvertimeDurationCmd extends AbstractCommonCommand<Map<String, Ob
/**
*
*/
if (CheckBoxEnum.CHECKED.getKey().equals(ksjbbxydk)) {
if (startClockPointDTO.size()>0) {
Map<String, Object> clcokInTimeData = clcokInTimeMap.get(kssj);
if (clcokInTimeData == null) {
log.debug("加班开始时间漏卡: {},clcokInTimeData:{}", kssj, clcokInTimeMap);
@ -138,7 +138,7 @@ public class GetOvertimeDurationCmd extends AbstractCommonCommand<Map<String, Ob
} else {
realityStartTime = kssj;
}
if (CheckBoxEnum.CHECKED.getKey().equals(jsjbbxydk)) {
if (endClockPointDTO.size()>0) {
Map<String, Object> clcokInTimeData = clcokInTimeMap.get(jssj);
if (clcokInTimeData == null) {
log.debug("加班结束时间漏卡: {},clcokInTimeData:{}", jssj, clcokInTimeData);
@ -154,6 +154,9 @@ public class GetOvertimeDurationCmd extends AbstractCommonCommand<Map<String, Ob
} else {
realityEndime = jssj;
}
if (DateUtil.getTime(realityEndime).compareTo(DateUtil.getTime(realityStartTime)) < 0){
realityEndime=realityStartTime;
}
jbsc = jbsc * 60;
if (CheckBoxEnum.CHECKED.getKey().equals(tqdkjrjb) && CheckBoxEnum.CHECKED.getKey().equals(ksjbbxydk)) {
//提前打卡开始的时长计入加班
@ -206,6 +209,7 @@ public class GetOvertimeDurationCmd extends AbstractCommonCommand<Map<String, Ob
//当存在迟到异常被抵消的情况
if (collect1.size() > 0) {
beLateTime = 0;
realityStartTime = kssjTime;
}
}
@ -249,6 +253,7 @@ public class GetOvertimeDurationCmd extends AbstractCommonCommand<Map<String, Ob
//当存在早退异常被抵消的情况
if (collect2.size() > 0) {
leaveElaryTime = 0;
realityEndime=jssjTime;
}
}

@ -9,10 +9,14 @@ import com.engine.jucailinkq.attendance.attendanceplan.service.impl.AttendancePl
import com.engine.jucailinkq.attendance.workflow.service.AllowanceService;
import com.engine.jucailinkq.attendance.workflow.service.impl.AllowanceServiceImpl;
import com.engine.common.util.*;
import com.engine.jucailinkq.common.cmd.GetPersonBySuitOrganzationCmd;
import com.engine.jucailinkq.common.service.CommonService;
import com.engine.jucailinkq.common.service.impl.CommonServiceImpl;
import com.engine.jucailinkq.common.util.*;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.icbc.api.internal.apache.http.impl.cookie.S;
import lombok.extern.slf4j.Slf4j;
import weaver.general.Util;
import weaver.interfaces.schedule.BaseCronJob;
@ -33,6 +37,7 @@ public class AttendanceAnalysisJob extends BaseCronJob {
private AllowanceService allowanceService = ServiceUtil.getService(AllowanceServiceImpl.class);
private UtilService utilService = ServiceUtil.getService(UtilServiceImpl.class);
private CommonService commonService = ServiceUtil.getService(CommonServiceImpl.class);
private String executeDate;
@Override
@ -45,7 +50,7 @@ public class AttendanceAnalysisJob extends BaseCronJob {
// }
log.info("********AttendanceAnalysisJob executeDate :[{}]********",useDate);
log.info("********AttendanceAnalysisJob prepare start******");
//初始化扩展类
CommonUtil.initExtensionClassHolder();
//入职离职当天是否需要进行考勤分析。0入职离职当天均分析、1入职离职当天不分析
@ -53,9 +58,10 @@ public class AttendanceAnalysisJob extends BaseCronJob {
//查询所有在职人员
String queryUserSql = "select id,departmentid,subcompanyid1,companystartdate from hrmresource where status <> '5' and status <> '4' and status <> '7'";
String queryUserSql = "select id,departmentid,subcompanyid1,companystartdate,seclevel from hrmresource where status <> '5' and status <> '4' and status <> '7'";
List<Map<String,Object>> userList = DbTools.getSqlToList(queryUserSql);
if ("0".equals(leaveAndEntry) || leaveAndEntry.equals("")){
String queryDepartEmployeeSql = "select resourceid ,changedate from HRMSTATUSHISTORY where type_n = 5 and changedate='"+DateUtil.beforeDay(useDate,1)+"'";
List<String> departEmployeeList = Lists.newArrayList(DbTools.getSqlToList(queryDepartEmployeeSql).stream().map(e->e.get("resourceid").toString()).collect(Collectors.toSet()));
@ -76,7 +82,7 @@ public class AttendanceAnalysisJob extends BaseCronJob {
for (Map.Entry<String, Object> entry : attendanceCycle.entrySet()){
Set<String> sets = (Set<String>)entry.getValue();
for (String date :sets){
if (DateUtil.getTime(date).compareTo(DateUtil.getTime(DateUtil.beforeDay(useDate,1))) != 0){
if (DateUtil.getTime(date).compareTo(DateUtil.getTime(useDate)) < 0){
allDates.add(date);
allDates.add(DateUtil.beforeDay(date,1));
allDates.add(DateUtil.AfterDay(date,1));
@ -90,7 +96,7 @@ public class AttendanceAnalysisJob extends BaseCronJob {
allDateList = allDateList.stream().sorted(Comparator.comparing(e -> DateUtil.getTime(e).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList());
allDateList = allDateList.stream().map(e->"'"+e+"'").collect(Collectors.toList());
log.info("all need excute date : [{}]",allDateList);
List<List<String>> needAnalysisDateList = Lists.partition(allDateList,200);
List<Map<String,Object>> dataList = Lists.newArrayList();
List<Map<String,Object>> attendaceResult = Lists.newArrayList();
@ -109,7 +115,7 @@ public class AttendanceAnalysisJob extends BaseCronJob {
dataList.addAll(makeUpList);
}
sql = "select sjzt,sgsj,ygid,rq from uf_jcl_kq_cqjg where rq in ("+dateStrs+")";
sql = "select sjzt,sgsj,bc,fbid,bm,ygid,rq,j1,c1,j2,c2,j3,c3,j4,c4,j5,c5,j6,c6,j7,c7,j8,c8 from uf_jcl_kq_cqjg where rq in ("+dateStrs+")";
List<Map<String,Object>> resultList = DbTools.getSqlToList(sql);
if (resultList.size() > 0){
attendaceResult.addAll(resultList);
@ -122,10 +128,67 @@ public class AttendanceAnalysisJob extends BaseCronJob {
Map<String,List<Map<String,Object>>> attendaceGroupById = attendaceResult.stream().collect(Collectors.groupingBy(e->e.get("ygid").toString()));
/**考勤项目*/
Map<String,Object> params = Maps.newHashMap();
String modeId = Utils.getFormmodeIdMap().get("uf_jcl_kq_kqfa");
params.put("modeId",modeId);
Map<String,Object> attendancePlanMap = commonService.GetAllPersonBySuitOrganzationCmd(params);
Map<String,Object> attendacnePlanItems = basicsetService.getAttendanceItemsGroupByAttendancePlanDataCmd();
//通用考勤项目
List<Map<String,Object>> generalAttendanceItems = (List<Map<String,Object>>)attendacnePlanItems.get("generalAttendanceItems");
//考勤方案对应所属的考勤项目
Map<String,List<Map<String,Object>>> attendanceItemGroupByPlan = (Map<String,List<Map<String,Object>>>)attendacnePlanItems.get("attendanceItemGroupByPlan");
/**综合工时*/
modeId = Utils.getFormmodeIdMap().get("uf_jcl_kq_zhgs");
params.put("modeId",modeId);
Map<String,Object> workingHourResultMap = commonService.getPersonBySuitOrganzation(params);
//人员所拥有的所有综合工时
Map<String,List<Map<String,String>>> personComprehensiveWorkingHours = (Map<String,List<Map<String,String>>>)workingHourResultMap.get("personAllData");
String sql = "select * from uf_jcl_kq_zhgs";
List<Map<String,Object>> resultList = DbTools.getSqlToList(sql);
//所有综合工时
Map<String,List<Map<String,Object>>> workingHourGroupBy = resultList.stream().collect(Collectors.groupingBy(e->e.get("id").toString()));
/**排班结果*/
List<Map<String,Object>> allScheduleList = Lists.newArrayList();
/**加班计划*/
List<Map<String,Object>> allOverPlanList = Lists.newArrayList();
for (List<String> list:needAnalysisDateList) {
String dateStrs = String.join(",", list);
sql = "select a.id as keyid,a.* from uf_pbjg a where bcrq in ("+dateStrs+") order by bcrq";
List<Map<String,Object>> list1 = DbTools.getSqlToList(sql);
if (list1.size() > 0){
allScheduleList.addAll(list1);
}
sql = "select a.id,b.jbry,b.ksrq,b.kssj,b.jblx,b.jsrq,b.jssj,b.jbsc,b.gsrq,b.d_jxgz,b.jxsc from uf_jcl_kq_jbjh a left join uf_jcl_kq_jbjh_dt1 b on a.id=b.mainid where b.gsrq in ("+dateStrs+") and (b.jbcx=0 or b.jbcx is null) and a.jlzt=1";
List<Map<String,Object>> list2 = DbTools.getSqlToList(sql);
if (list2.size() > 0){
allOverPlanList.addAll(list2);
}
}
Map<String,List<Map<String,Object>>> allOverPlanGroup = allOverPlanList.stream().collect(Collectors.groupingBy(e->e.get("jbry").toString()));
/**班次信息*/
sql = "select a.xxbdkzdjb,a.sfxx,a.id bcxx,a.edsc,a.zgzsc,a.bcsdxx,a.sfdx,a.sfkt,b.bdlx,a.btgz,a.fgsjd,a.zddxfz,a.dxhs,b.kssj dtkssj,b.jssj dtjssj,b.ksdk,b.jsdk,b.tqdkfzs,b.thdkfzs,b.edxss,b.edfzs,b.edts,b.sfdx dtsfdx,b.zddxfz dtzddxfz,b.dxhs dtdxhs,b.gsrq from uf_jcl_kq_bcxx a left join uf_jcl_kq_bcxx_dt1 b on a.id=b.mainid";
List<Map<String,Object>> allClassInfoList = DbTools.getSqlToList(sql);
/**出差信息*/
String querEvectionsql = "select b.ccr,b.cclx,b.ksrq,b.jsrq,b.kssj,b.jssj,b.ccsc,b.qtcc,b.btcc,b.cxcc from uf_jcl_kq_ccjl a left join uf_jcl_kq_ccjl_dt1 b on a.id = b.mainid where b.ksrq<="+allDateList.get(allDateList.size()-1)+" and b.jsrq>="+allDateList.get(0)+" and (b.cxcc=0 or b.cxcc is null) and a.jlzt=1";
Map<String,List<Map<String,Object>>> evectionGroup = DbTools.getSqlToList(querEvectionsql).stream().collect(Collectors.groupingBy(e->e.get("ccr").toString()));
/**请假信息*/
String queryAskForsql = "select b.qjry,b.jqlx,b.ksrq,b.kssj,b.jsrq,b.jssj,b.qjsc,b.qtj,b.btj from uf_jcl_kq_qjjl a left join uf_jcl_kq_qjjl_dt1 b on a.id = b.mainid where b.ksrq<="+allDateList.get(allDateList.size()-1)+" and b.jsrq>="+allDateList.get(0)+" and (b.cxqj=0 or b.cxqj is null) and a.jlzt=1";
Map<String,List<Map<String,Object>>> askforGroup = DbTools.getSqlToList(queryAskForsql).stream().collect(Collectors.groupingBy(e->e.get("qjry").toString()));
/**候选班组*/
String queryHxbz = "select * from uf_jcl_kq_hxbz_dt1";
List<Map<String,Object>> hxbzList = DbTools.getSqlToList(queryHxbz);
log.info("********AttendanceAnalysisJob prepare end******");
for (Map<String,Object> userMap:userList){
Map<String,Object> analysisParam = Maps.newHashMap();
String userId = Util.null2String(userMap.get("id"));
//入职日期
String companystartDate = Util.null2String(userMap.get("companystartdate"));
@ -134,25 +197,48 @@ public class AttendanceAnalysisJob extends BaseCronJob {
analysisDateList = analysisDateList.stream().filter(e->"".equals(companystartDate) || DateUtil.getTime(e).compareTo(DateUtil.getTime(companystartDate)) >=0).sorted(Comparator.comparing(e -> DateUtil.getTime(e).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList());
//日期对应的打卡数据
Map<String,Map<String,Object>> clockInTimeMap = Maps.newHashMap();
/**获得人员考勤项目*/
Map<String,Object> paramMap = Maps.newHashMap();
paramMap.put("startDate",DateUtil.beforeDay(useDate,1));
paramMap.put("endDate",DateUtil.beforeDay(useDate,1));
paramMap.put("resourceId",userId);
Map<String,Object> dataMap = basicsetService.getAttendanceItemsByPerson(paramMap);
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)dataMap.get("data");
/**
*
*/
Map<String,Object> workHourdataMap = basicsetService.getWorkHoursItemByPerson(paramMap);
List<Map<String,Object>> workHourItems = (List<Map<String,Object>>)workHourdataMap.get("data");
analysisParam.put("generalAttendanceItems",generalAttendanceItems);
analysisParam.put("attendancePlanMap",attendancePlanMap);
analysisParam.put("attendanceItemGroupByPlan",attendanceItemGroupByPlan);
analysisParam.put("comprehensiveWorkingHourList",personComprehensiveWorkingHours.get(userId)==null?Lists.newArrayList():personComprehensiveWorkingHours.get(userId));
analysisParam.put("workingHourGroupBy",workingHourGroupBy);
analysisParam.put("allScheduleList",allScheduleList);
analysisParam.put("allClassInfoList",allClassInfoList);
analysisParam.put("allOverPlanList",allOverPlanGroup.get(userId)==null?Lists.newArrayList():allOverPlanGroup.get(userId));
List<Map<String,Object>> evectionList = evectionGroup.get(userId) == null?Lists.newArrayList():evectionGroup.get(userId);
String minAnalysisDate = analysisDateList.get(0);
String maxAnalysisDate = analysisDateList.get(analysisDateList.size()-1);
evectionList = evectionList.stream().filter(e->DateUtil.getTime(e.get("ksrq").toString()).compareTo(DateUtil.getTime(maxAnalysisDate)) <=0 &&
DateUtil.getTime(e.get("jsrq").toString()).compareTo(DateUtil.getTime(minAnalysisDate)) >=0).collect(Collectors.toList());
List<Map<String,Object>> askforList = askforGroup.get(userId) == null?Lists.newArrayList():askforGroup.get(userId);
askforList = askforList.stream().filter(e->DateUtil.getTime(e.get("ksrq").toString()).compareTo(DateUtil.getTime(maxAnalysisDate)) <=0 &&
DateUtil.getTime(e.get("jsrq").toString()).compareTo(DateUtil.getTime(minAnalysisDate)) >=0).collect(Collectors.toList());
analysisParam.put("evectionList",evectionList);
analysisParam.put("askforList",askforList);
analysisParam.put("hxbzList",hxbzList);
analysisParam.put("seclevel",Util.null2String(userMap.get("seclevel")));
analysisParam.put("departmentId",Util.null2String(userMap.get("departmentid")));
analysisParam.put("subCompanyId",Util.null2String(userMap.get("subcompanyid1")));
Map<String, List<Map<String, Object>>> attendaceResultMap = Maps.newHashMap();
List<Map<String, Object>> attendaceResultByUser = attendaceGroupById.get(userId);
if (attendaceResultByUser != null && attendaceResultByUser.size() > 0) {
attendaceResultMap = attendaceResultByUser.stream().collect(Collectors.groupingBy(e -> e.get("rq").toString()));
for (Map<String, Object> map: attendaceResultByUser){
clockInTimeMap.put(map.get("rq").toString(),map);
}
attendanceAnalysisService.attendanceAnalysis(userId,analysisDateList,collect.get(userMap.get("id")),attendanceItems,workHourItems,clockInTimeMap,attendaceResultMap);
}
attendanceAnalysisService.attendanceAnalysis(userId,analysisDateList,collect.get(userMap.get("id")),analysisParam,clockInTimeMap,attendaceResultMap);
}catch (Exception e){
log.error("AttendanceAnalysisJob userId:[{}],analysisDateList: [{}]",userId,analysisDateList);
log.error("AttendanceAnalysisJob error : [{}]",e);
@ -161,6 +247,8 @@ public class AttendanceAnalysisJob extends BaseCronJob {
Map<String,Object> param = Maps.newHashMap();
param.put("startDate",DateUtil.beforeDay(useDate,3));
param.put("endDate",useDate);
log.info("********AttendanceAnalysisJob analysis end********");
log.info("********AttendanceAnalysisJob allowance start********");
allowanceService.addAllowanceRecords(param);
log.info("********AttendanceAnalysisJob end********");
}

@ -7,10 +7,9 @@ public interface ShiftService {
/**
*
* @param empId
* @param params
* @param pbData
* @param clockInData
* @return
*/
Map<String, Object> punchMatchShift(String empId, Map<String,Object> pbData, List<Map<String, Object>> clockInData,Map<String,Map<String,Object>> clockInTimeMap);
Map<String, Object> punchMatchShift(Map<String,Object> params, Map<String,Object> pbData);
}

@ -16,6 +16,7 @@ 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);
String getRqlxInScheduleInfo(String empId,String date);
@ -56,4 +57,9 @@ public interface UtilService {
* @return
*/
Map<String, Object> getAttendanceCycle(Map<String,Object> params);
/**
*
*/
Map<String, Object> getAttendanceItems(Map<String,Object> params);
}

@ -41,14 +41,15 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
String bdlx = Util.null2String(abnormalClockInList.get(i).get("bdlx"));
String classStartTime = Util.null2String(abnormalClockInList.get(i).get("classStartTime"));
String classEndTime = Util.null2String(abnormalClockInList.get(i).get("classEndTime"));
String betweenMinutes = Util.null2String(abnormalClockInList.get(i).get("betweenMinutes"));
if ((zysd.contains(Utils.getWorkFor(bdlx)) || zysd.contains(WorkForTimeEnum.ALL_TIME.getKey())) &&
!"".equals(classStartTime) && !"".equals(classEndTime)){
Map<String,Object> leaveMap = Maps.newHashMap();
leaveMap.put("kssj",kssj);
leaveMap.put("jssj",jssj);
int betweenTime = Utils.removeRestTime(classStartTime,classEndTime,scheduleResult,analysisDate);
int betweenTime = Integer.valueOf(betweenMinutes);
int intersectionTime = Utils.getIntersectionTime(classStartTime,classEndTime,leaveMap,scheduleResult,analysisDate);
if (betweenTime == intersectionTime){
if (betweenTime <= intersectionTime){
offsetAskForLeaveAnomaly.add(abnormalClockInList.get(i));
}else {
String hsdw = Util.null2String(abnormalClockInList.get(i).get("hsdw"));
@ -56,6 +57,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
double itemduration = Utils.getItemduration(hsl,hsdw,betweenTime-intersectionTime, AccountingUnitEnum.MINUTES,Double.valueOf(scheduleResult.get(0).get("edsc").toString()));
abnormalClockInList.get(i).put("itemduration",itemduration);
abnormalClockInList.get(i).put("betweenMinutes",betweenTime-intersectionTime);
}
}
}

@ -37,15 +37,16 @@ public class EvectionServiceImpl extends Service implements EvectionService {
String bdlx = Util.null2String(abnormalClockInList.get(i).get("bdlx"));
String classStartTime = Util.null2String(abnormalClockInList.get(i).get("classStartTime"));
String classEndTime = Util.null2String(abnormalClockInList.get(i).get("classEndTime"));
String betweenMinutes = Util.null2String(abnormalClockInList.get(i).get("betweenMinutes"));
if ((zysd.contains(Utils.getWorkFor(bdlx)) || zysd.contains(WorkForTimeEnum.ALL_TIME.getKey())) &&
!"".equals(classStartTime) && !"".equals(classEndTime)) {
Map<String,Object> leaveMap = Maps.newHashMap();
leaveMap.put("kssj",kssj);
leaveMap.put("jssj",jssj);
int betweenTime = Utils.removeRestTime(classStartTime,classEndTime,scheduleResult,analysisDate);
int betweenTime = Integer.valueOf(betweenMinutes);
int intersectionTime = Utils.getIntersectionTime(classStartTime,classEndTime,leaveMap,scheduleResult,analysisDate);
if (betweenTime == intersectionTime){
if (betweenTime <= intersectionTime){
offsetEvectionAnomaly.add(abnormalClockInList.get(i));
}else {
String hsdw = Util.null2String(abnormalClockInList.get(i).get("hsdw"));

@ -4,14 +4,11 @@ import com.engine.jucailinkq.attendance.attendanceanalysis.dto.clockpoint.ClockP
import com.engine.jucailinkq.attendance.attendanceanalysis.service.ShiftService;
import com.engine.jucailinkq.attendance.attendanceanalysis.service.UtilService;
import com.engine.jucailinkq.attendance.attendanceanalysis.wrapper.UpdateAttendanceResultWrapper;
import com.engine.jucailinkq.attendance.attendanceplan.service.AttendancePlanService;
import com.engine.jucailinkq.attendance.attendanceplan.service.impl.AttendancePlanServiceImpl;
import com.engine.jucailinkq.attendance.enums.CheckBoxEnum;
import com.engine.jucailinkq.attendance.enums.ClassBelongToEnum;
import com.engine.jucailinkq.attendance.enums.ClassSegmentTypeEnum;
import com.engine.jucailinkq.attendance.enums.ClockPointEnum;
import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools;
import com.engine.common.util.ServiceUtil;
import com.engine.jucailinkq.common.util.ExtensionClassHolder;
import com.engine.jucailinkq.common.util.Utils;
@ -20,10 +17,6 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import weaver.general.Util;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.time.ZoneOffset;
import java.util.*;
import java.util.stream.Collectors;
@ -35,36 +28,41 @@ import java.util.stream.Collectors;
**/
@Slf4j
public class ShiftServiceImpl extends Service implements ShiftService {
private AttendancePlanService basicsetService = ServiceUtil.getService(AttendancePlanServiceImpl.class);
private UtilService utilService = ServiceUtil.getService(UtilServiceImpl.class);
private UpdateAttendanceResultWrapper updateAttendanceResultWrapper = ServiceUtil.getService(UpdateAttendanceResultWrapper.class);
/**
* id
* @param empId id
* @param pbData
* @param clockInData 23
* @param params
* @return
*/
@Override
public Map<String, Object> punchMatchShift(String empId, Map<String,Object> pbData, List<Map<String, Object>> clockInData,Map<String,Map<String,Object>> clockInTimeMap) {
public Map<String, Object> punchMatchShift(Map<String,Object> params, Map<String,Object> pbData) {
//查询排班结果
// String pbSql = "select * from uf_pbjg where id = " + schedulingResultId;
// Map<String, Object> pbData = DbTools.getSqlToMap(pbSql);
String empId = params.get("pbdx").toString();
String shiftTeamId = Util.null2String(pbData.get("hxbz")).split("-")[0];
String punchDate = Util.null2String(pbData.get("bcrq"));
List<Map<String,Object>> hxbzList = (List<Map<String,Object>>)params.get("hxbzList");
Map<String, List<Map<String, Object>>> attendaceResultMap = (Map<String, List<Map<String, Object>>>)params.get("attendaceResultMap");
Map<String, Object> result = null;
Map<String, Object> maxPriorityResult = null;
if (!shiftTeamId.equals("")) {
//候选班次
String bcSql = "select * from uf_jcl_kq_hxbz_dt1 where mainid = " + shiftTeamId;
List<Map<String, Object>> bcData = DbTools.getSqlToList(bcSql);
// String bcSql = "select * from uf_jcl_kq_hxbz_dt1 where mainid = " + shiftTeamId;
List<Map<String, Object>> bcData = hxbzList.stream().filter(e->shiftTeamId.equals(e.get("mainid"))).collect(Collectors.toList());
if (bcData.size() > 0) {
List<Map<String, Object>> waitCompareResultList = new ArrayList<>();
//循环匹配,输出匹配结果
for (Map<String, Object> bcMap : bcData) {
//获取班次要求打卡数据和请假、出差、加班数据处理后的卡点数据
Map<String, Object> waitCompareMap = dealClockInData(empId, pbData, clockInData, bcMap.get("bcxx").toString(), clockInTimeMap);
Map<String, Object> waitCompareMap = dealClockInData(empId, pbData,bcMap.get("bcxx").toString(),params);
waitCompareMap.put("priorityValue", Util.null2String(bcMap.get("yxj")));
waitCompareResultList.add(waitCompareMap);
}
@ -119,8 +117,8 @@ public class ShiftServiceImpl extends Service implements ShiftService {
//全天没有打卡时,看上一个工作日的班次为优先,如果前一个工作日也没有班次,按优先级
if (result == null) {
//获取上一个工作日的班次
String lastWorkDayInfoSql = "select * from uf_jcl_kq_cqjg where rqlx = 0 and ygid = " + empId + " and rq < '" + punchDate + "' order by rq desc limit 1;";
Map<String, Object> lastWorkDayInfo = DbTools.getSqlToMap(lastWorkDayInfoSql);
// String lastWorkDayInfoSql = "select * from uf_jcl_kq_cqjg where rqlx = 0 and ygid = " + empId + " and rq < '" + punchDate + "' order by rq desc limit 1;";
Map<String, Object> lastWorkDayInfo = attendaceResultMap.get(DateUtil.beforeDay(punchDate,1)).get(0);
String bcId = Util.null2String(lastWorkDayInfo.get("bc"));
List<Map<String, Object>> bcInfo = waitCompareResultList.stream().filter(f ->f.get("bcId").toString().equals(bcId)).collect(Collectors.toList());
if (!bcId.equals("") && bcInfo.size() > 0) {
@ -131,6 +129,7 @@ public class ShiftServiceImpl extends Service implements ShiftService {
result = maxPriorityResult;
}
}
}
}
@ -225,30 +224,28 @@ public class ShiftServiceImpl extends Service implements ShiftService {
/**
*
* @param empId
* @param clockInData 23
* @return
*/
private Map<String, Object> dealClockInData(String empId, Map<String, Object> pbData, List<Map<String, Object>> clockInData, String shiftId,Map<String,Map<String,Object>> clockInTimeMap) {
private Map<String, Object> dealClockInData(String empId, Map<String, Object> pbData, String shiftId,Map<String, Object> params) {
Map<String, Object> clockInDataMatchInfo = new HashMap<>();
List<Map<String, Object>> clockInData = (List<Map<String,Object>>)params.get("clockInData");
Map<String,Map<String,Object>> clockInTimeMap = (Map<String,Map<String,Object>>)params.get("clockInTimeMap");
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)params.get("attendanceItems");
String punchDate = Util.null2String(pbData.get("bcrq"));
String startBeforeDate = DateUtil.beforeDay(punchDate,2);
String endAfterDate = DateUtil.AfterDay(punchDate,2);
//获取考勤项目
Map<String,Object> param = Maps.newHashMap();
param.put("startDate",startBeforeDate);
param.put("endDate",endAfterDate);
param.put("resourceId",empId);
Map<String,Object> dataMap = basicsetService.getAttendanceItemsByPerson(param);
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)dataMap.get("data");
//1-组装班次数据
Map<String,List<Map<String,Object>>> schedulingResultsMap = getShiftData(empId, pbData, shiftId);
Map<String,List<Map<String,Object>>> schedulingResultsMap = getShiftData(empId, pbData, shiftId,params);
List<Map<String,Object>> shiftData = schedulingResultsMap.get(punchDate);
//2-拿到当天打卡数据
Map<String, List<Map<String,Object>>> collect = Maps.newHashMap();
if (clockInData != null && clockInData.size() >0){
collect = clockInData.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("signdate"))));
}
// Map<String,Map<String,Object>> clockInTimeMap = Maps.newHashMap(); //
Map<String,Object> getClockTimeParam = Maps.newHashMap();
getClockTimeParam.put("date",punchDate);
@ -267,6 +264,8 @@ public class ShiftServiceImpl extends Service implements ShiftService {
workingHourparam.put("userId",empId);
workingHourparam.put("attendanceItems",attendanceItems);
workingHourparam.put("scheduleResult",shiftData);
workingHourparam.put("evectionList",params.get("evectionList"));
workingHourparam.put("askforList",params.get("askforList"));
Map<String,Object> evectionDataMap = updateAttendanceResultWrapper.getEvection(workingHourparam);
Map<String,Object> askForLeaveDataMap = updateAttendanceResultWrapper.getAskForLeave(workingHourparam);
//4-调用考勤分析中的卡点数据处理方法
@ -299,7 +298,7 @@ public class ShiftServiceImpl extends Service implements ShiftService {
* @param empId
* @return
*/
private Map<String,List<Map<String,Object>>> getShiftData(String empId, Map<String, Object> pbData, String shiftId) {
private Map<String,List<Map<String,Object>>> getShiftData(String empId, Map<String, Object> pbData, String shiftId,Map<String, Object> params) {
String punchDate = Util.null2String(pbData.get("bcrq"));
String schedulingRule = Util.null2String(pbData.get("pbgl"));
@ -312,8 +311,8 @@ public class ShiftServiceImpl extends Service implements ShiftService {
/** 获取人员班次*/
Map<String,Object> classesParamMap = Maps.newHashMap();
classesParamMap.put("tableName","uf_pbjg");
classesParamMap.put("startDate",startBeforeDate);
classesParamMap.put("endDate",endAfterDate);
classesParamMap.put("startDate",punchDate);
classesParamMap.put("endDate",punchDate);
classesParamMap.put("pblx","0");
classesParamMap.put("pbdx",empId);
classesParamMap.put("current","1");
@ -325,25 +324,31 @@ public class ShiftServiceImpl extends Service implements ShiftService {
classesParamMap.put("dateType",dateType);
classesParamMap.put("restSign",restSign);
classesParamMap.put("shiftId",shiftId);
Map<String,List<Map<String,Object>>> schedulMap = getSchedulingInFormation(classesParamMap);
Map<String,List<Map<String,Object>>> schedulMap = getSchedulingInFormation(classesParamMap,params);
return schedulMap;
}
private Map<String,List<Map<String,Object>>> getSchedulingInFormation(Map<String,Object> params) {
private Map<String,List<Map<String,Object>>> getSchedulingInFormation(Map<String,Object> classesParamMap,Map<String,Object> params) {
String punchDate = Util.null2String(params.get("punchDate"));
String schedulingRule = Util.null2String(params.get("schedulingRule"));
String dateType = Util.null2String(params.get("dateType"));
String restSign = Util.null2String(params.get("restSign"));
String shiftId = Util.null2String(params.get("shiftId"));
//考勤项目
List<Map<String,Object>> haveattendanceItems = (List<Map<String,Object>>)params.get("attendanceItems");
//班次
List<Map<String,Object>> allClassInfoList = (List<Map<String,Object>>)params.get("allClassInfoList");
//加班计划
List<Map<String,Object>> allOverPlanList = (List<Map<String,Object>>)params.get("allOverPlanList");
String punchDate = Util.null2String(classesParamMap.get("punchDate"));
String schedulingRule = Util.null2String(classesParamMap.get("schedulingRule"));
String dateType = Util.null2String(classesParamMap.get("dateType"));
String restSign = Util.null2String(classesParamMap.get("restSign"));
String shiftId = Util.null2String(classesParamMap.get("shiftId"));
String bcSql = "select * from uf_jcl_kq_bcxx where id = " + shiftId;
Map<String, Object> bcData = DbTools.getSqlToMap(bcSql);
String bcsdxx = Util.null2String(bcData.get("bcsdxx"));
String sql = "select a.xxbdkzdjb,a.sfxx,a.id bcxx,a.edsc,a.zgzsc,a.bcsdxx,a.sfdx,a.sfkt,b.bdlx,a.btgz,a.fgsjd,a.zddxfz,a.dxhs,b.kssj dtkssj,b.jssj dtjssj,b.ksdk,b.jsdk,b.tqdkfzs,b.thdkfzs,b.edxss,b.edfzs,b.edts,b.sfdx dtsfdx,b.zddxfz dtzddxfz,b.dxhs dtdxhs,b.gsrq from uf_jcl_kq_bcxx a left join uf_jcl_kq_bcxx_dt1 b on a.id=b.mainid where a.id =" + shiftId;
List<Map<String,Object>> dataList = DbTools.getSqlToList(sql);
//String sql = "select a.xxbdkzdjb,a.sfxx,a.id bcxx,a.edsc,a.zgzsc,a.bcsdxx,a.sfdx,a.sfkt,b.bdlx,a.btgz,a.fgsjd,a.zddxfz,a.dxhs,b.kssj dtkssj,b.jssj dtjssj,b.ksdk,b.jsdk,b.tqdkfzs,b.thdkfzs,b.edxss,b.edfzs,b.edts,b.sfdx dtsfdx,b.zddxfz dtzddxfz,b.dxhs dtdxhs,b.gsrq from uf_jcl_kq_bcxx a left join uf_jcl_kq_bcxx_dt1 b on a.id=b.mainid where a.id =" + shiftId;
List<Map<String,Object>> dataList = allClassInfoList.stream().filter(e->shiftId.equals(e.get("bcxx"))).collect(Collectors.toList());
Map<String,List<Map<String,Object>>> resultMap = Maps.newHashMap();
List<Map<String,Object>> classs = Lists.newArrayList();
for (Map<String,Object> map:dataList){
@ -358,11 +363,13 @@ public class ShiftServiceImpl extends Service implements ShiftService {
resultMap.put(punchDate,classs);
/** 加班计划*/
sql = "select a.id,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.gsrq>=? and b.gsrq<=? and (b.jbcx=0 or b.jbcx is null) and a.jlzt=1";
Map<String,List<Map<String,Object>>> overtimePlanMap = DbTools.getSqlToList(sql,params.get("pbdx"),punchDate,punchDate).stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("gsrq"))));
//sql = "select a.id,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.gsrq>=? and b.gsrq<=? and (b.jbcx=0 or b.jbcx is null) and a.jlzt=1";
// Map<String,List<Map<String,Object>>> overtimePlanMap = DbTools.getSqlToList(sql,classesParamMap.get("pbdx"),punchDate,punchDate).stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("gsrq"))));
Map<String,List<Map<String,Object>>> overtimePlanMap = allOverPlanList.stream().filter(e->DateUtil.getTime(e.get("gsrq").toString()).compareTo(DateUtil.getTime(punchDate)) ==0).collect(Collectors.groupingBy(e -> Util.null2String(e.get("gsrq"))));
//考勤项目
List<Map<String,Object>> attendanceItems = new ArrayList<>();
//日期集合
// Map<String,Object> dateParam = Maps.newHashMap();
// dateParam.put("nd",Util.null2String(params.get("startDate")).split("-")[0]);
@ -387,10 +394,10 @@ public class ShiftServiceImpl extends Service implements ShiftService {
map.put("sfkt","0");
}
//查找对应的考勤项目
String querySql = "select a.id keyid,a.* from uf_jcl_kq_kqxm a where id=?";
attendanceItems = DbTools.getSqlToList(querySql,overtimePlan.get("jblx"));
List<Map<String,Object>> attendanceItems = haveattendanceItems.stream().filter(f->f.get("keyid").equals(overtimePlan.get("jblx"))).collect(Collectors.toList());
String bcsdxx = resultList == null || resultList.size()==0 || resultList.get(0) ==null ? "":Util.null2String(resultList.get(0).get(""));
map.put("bcxx", punchDate.compareTo(e.getKey()) != 0 ? "0" : shiftId);
map.put("bcsdxx", punchDate.compareTo(e.getKey()) != 0 ? "": bcsdxx);
if (resultList.size()>0){

@ -3,6 +3,7 @@ package com.engine.jucailinkq.attendance.attendanceanalysis.service.impl;
import com.engine.jucailinkq.attendance.attendanceanalysis.cmd.*;
import com.engine.jucailinkq.attendance.attendanceanalysis.cmd.getclockInpoint.biz.AbstractAdjustClockPointAction;
import com.engine.jucailinkq.attendance.attendanceanalysis.cmd.getclockInpoint.GetClockInPointCmd;
import com.engine.jucailinkq.attendance.attendanceanalysis.cmd.item.GerPersonAttendanceItemsCmd;
import com.engine.jucailinkq.attendance.attendanceanalysis.dto.clockpoint.ClockPointDTO;
import com.engine.jucailinkq.attendance.attendanceanalysis.dto.clockpoint.ClockPointInfo;
import com.engine.jucailinkq.attendance.attendanceanalysis.service.UtilService;
@ -37,7 +38,7 @@ public class UtilServiceImpl extends Service implements UtilService {
@Override
public Map<String, Object> getSchedulingInFormation(Map<String, Object> params) {
/** 班次信息*/
Map<String,Object> schedulingResultsMap = schedulingResultsService.queryDataTableActualUse(params);
Map<String,Object> schedulingResultsMap = schedulingResultsService.getUseSchedule(params);
params.put("schedulingResultsMap",schedulingResultsMap);
return commandExecutor.execute(new GetScheduleResultListCmd(params));
}
@ -248,4 +249,9 @@ public class UtilServiceImpl extends Service implements UtilService {
public Map<String, Object> getAttendanceCycle(Map<String, Object> params) {
return commandExecutor.execute(new GetAttendanceCycleCmd(params));
}
@Override
public Map<String,Object> getAttendanceItems(Map<String, Object> params) {
return commandExecutor.execute(new GerPersonAttendanceItemsCmd(params));
}
}

@ -8,6 +8,8 @@ import com.engine.jucailinkq.attendance.attendanceplan.service.impl.AttendancePl
import com.engine.jucailinkq.attendance.workflow.service.AllowanceService;
import com.engine.jucailinkq.attendance.workflow.service.impl.AllowanceServiceImpl;
import com.engine.common.util.*;
import com.engine.jucailinkq.common.service.CommonService;
import com.engine.jucailinkq.common.service.impl.CommonServiceImpl;
import com.engine.jucailinkq.common.util.*;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@ -33,7 +35,7 @@ public class AttendanceanalysisAction {
private UtilService utilService = ServiceUtil.getService(UtilServiceImpl.class);
private AttendanceAnalysisWrapper attendanceAnalysisService = ServiceUtil.getService(AttendanceAnalysisWrapper.class);
private AllowanceService allowanceService = ServiceUtil.getService(AllowanceServiceImpl.class);
private CommonService commonService = ServiceUtil.getService(CommonServiceImpl.class);
/**
*
* @return
@ -46,9 +48,9 @@ public class AttendanceanalysisAction {
log.info("********AttendanceanalysisAction start********");
Map<String,Object> paramMap = ParamUtil.request2Map(request);
// Map<String,Object> paramMap = Maps.newHashMap();
// paramMap.put("startDate","2024-09-16");
// paramMap.put("endDate","2024-09-16");
// paramMap.put("userIds","23");
// paramMap.put("startDate","2024-11-05");
// paramMap.put("endDate","2024-11-05");
// paramMap.put("userIds","82");
String startDate = Util.null2String(paramMap.get("startDate"));
String startBeforeDate = DateUtil.beforeDay(startDate,2);
@ -56,18 +58,65 @@ public class AttendanceanalysisAction {
String endAfterDate = DateUtil.AfterDay(endDate,2);
String userIds = Util.null2String(paramMap.get("userIds"));
int betweenDays = DateUtil.getBetWeenDays(startDate,endDate);
String queryDepartEmployeeSql = "select resourceid ,changedate,type_n from HRMSTATUSHISTORY where type_n = 5 or type_n = 7";
//获取离职日期
List<Map<String,Object>> departEmployeeList = DbTools.getSqlToList(queryDepartEmployeeSql);
Map<String,Object> departEmployeeMap = CommonUtil.getDepartEmployeeMap(departEmployeeList);
//初始化扩展类
CommonUtil.initExtensionClassHolder();
//入职离职当天是否需要进行考勤分析。0入职离职当天均分析、1入职离职当天不分析
String leaveAndEntry = Util.null2String(ExtensionClassHolder.getGlobalSetMap().get("leaveAndEntry"));
/**考勤项目*/
Map<String,Object> params = Maps.newHashMap();
String modeId = Utils.getFormmodeIdMap().get("uf_jcl_kq_kqfa");
params.put("modeId",modeId);
Map<String,Object> attendancePlanMap = commonService.GetAllPersonBySuitOrganzationCmd(params);
Map<String,Object> attendacnePlanItems = basicsetService.getAttendanceItemsGroupByAttendancePlanDataCmd();
//人员所拥有的所有考勤方案
//通用考勤项目
List<Map<String,Object>> generalAttendanceItems = (List<Map<String,Object>>)attendacnePlanItems.get("generalAttendanceItems");
//考勤方案对应所属的考勤项目
Map<String,List<Map<String,Object>>> attendanceItemGroupByPlan = (Map<String,List<Map<String,Object>>>)attendacnePlanItems.get("attendanceItemGroupByPlan");
/**综合工时*/
modeId = Utils.getFormmodeIdMap().get("uf_jcl_kq_zhgs");
params.put("modeId",modeId);
Map<String,Object> workingHourResultMap = commonService.getPersonBySuitOrganzation(params);
//人员所拥有的所有综合工时
Map<String,List<Map<String,String>>> personComprehensiveWorkingHours = (Map<String,List<Map<String,String>>>)workingHourResultMap.get("personAllData");
String queysql = "select * from uf_jcl_kq_zhgs";
List<Map<String,Object>> resultList = DbTools.getSqlToList(queysql);
//所有综合工时
Map<String,List<Map<String,Object>>> workingHourGroupBy = resultList.stream().collect(Collectors.groupingBy(e->e.get("id").toString()));
if ("".equals(userIds)){
String queryUserSql = "select id,companystartdate from hrmresource where status <> '5' and status <> '4' and status <> '7'";
String queryDepartEmployeeSql = "select resourceid ,changedate,type_n from HRMSTATUSHISTORY where (type_n = 5 or type_n = 7) and changedate <> '' and changedate is not null";
//获取离职日期
List<Map<String,Object>> departEmployeeList = DbTools.getSqlToList(queryDepartEmployeeSql);
Map<String,Object> departEmployeeMap = CommonUtil.getDepartEmployeeMap(departEmployeeList);
/**排班结果*/
String querySchedulesql = "select a.id as keyid,a.* from uf_pbjg a where bcrq >=? and bcrq<=? order by bcrq";
List<Map<String,Object>> allScheduleList = DbTools.getSqlToList(querySchedulesql,startDate,endDate);
/**加班计划*/
String queryOverplansql = "select a.id,b.jbry,b.ksrq,b.kssj,b.jblx,b.jsrq,b.jssj,b.jbsc,b.gsrq,b.d_jxgz,b.jxsc from uf_jcl_kq_jbjh a left join uf_jcl_kq_jbjh_dt1 b on a.id=b.mainid where b.gsrq >=? and b.gsrq<=? and (b.jbcx=0 or b.jbcx is null) and a.jlzt=1";
List<Map<String,Object>> allOverPlanList = DbTools.getSqlToList(queryOverplansql,startDate,endDate);
Map<String,List<Map<String,Object>>> allOverPlanGroup = allOverPlanList.stream().collect(Collectors.groupingBy(e->e.get("jbry").toString()));
/**班次信息*/
String querClasssql = "select a.xxbdkzdjb,a.sfxx,a.id bcxx,a.edsc,a.zgzsc,a.bcsdxx,a.sfdx,a.sfkt,b.bdlx,a.btgz,a.fgsjd,a.zddxfz,a.dxhs,b.kssj dtkssj,b.jssj dtjssj,b.ksdk,b.jsdk,b.tqdkfzs,b.thdkfzs,b.edxss,b.edfzs,b.edts,b.sfdx dtsfdx,b.zddxfz dtzddxfz,b.dxhs dtdxhs,b.gsrq from uf_jcl_kq_bcxx a left join uf_jcl_kq_bcxx_dt1 b on a.id=b.mainid";
List<Map<String,Object>> allClassInfoList = DbTools.getSqlToList(querClasssql);
/**出差信息*/
String querEvectionsql = "select b.ccr,b.cclx,b.ksrq,b.jsrq,b.kssj,b.jssj,b.ccsc,b.qtcc,b.btcc,b.cxcc from uf_jcl_kq_ccjl a left join uf_jcl_kq_ccjl_dt1 b on a.id = b.mainid where b.ksrq<=? and b.jsrq>=? and (b.cxcc=0 or b.cxcc is null) and a.jlzt=1";
Map<String,List<Map<String,Object>>> evectionGroup = DbTools.getSqlToList(querEvectionsql,endDate,startDate).stream().collect(Collectors.groupingBy(e->e.get("ccr").toString()));
/**请假信息*/
String queryAskForsql = "select b.qjry,b.jqlx,b.ksrq,b.kssj,b.jsrq,b.jssj,b.qjsc,b.qtj,b.btj from uf_jcl_kq_qjjl a left join uf_jcl_kq_qjjl_dt1 b on a.id = b.mainid where b.ksrq<=? and b.jsrq>=? and (b.cxqj=0 or b.cxqj is null) and a.jlzt=1";
Map<String,List<Map<String,Object>>> askforGroup = DbTools.getSqlToList(queryAskForsql,endDate,startDate).stream().collect(Collectors.groupingBy(e->e.get("qjry").toString()));
/**候选班组*/
String queryHxbz = "select * from uf_jcl_kq_hxbz_dt1";
List<Map<String,Object>> hxbzList = DbTools.getSqlToList(queryHxbz);
String queryUserSql = "select id,companystartdate,seclevel,departmentid,subcompanyid1 from hrmresource where status <> '5' and status <> '4' and status <> '7'";
List<Map<String,Object>> userList = DbTools.getSqlToList(queryUserSql);
String sql = "select id,userid,signdate,signtime from hrmschedulesign where isincom=1 and signdate >= ? and signdate <= ? order by signdate,signtime";
List<Map<String,Object>> dataList = DbTools.getSqlToList(sql,startBeforeDate,endAfterDate);
@ -80,8 +129,8 @@ public class AttendanceanalysisAction {
dataList = dataList.stream().sorted(Comparator.comparing(e->DateUtil.getTime(e.get("signdate")+" "+e.get("signtime")).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList());
Map<String, List<Map<String,Object>>> collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("userid"))));
sql = "select sjzt,sgsj,ygid,rq from uf_jcl_kq_cqjg where rq>=? and rq<=?";
List<Map<String,Object>> attendaceResult = DbTools.getSqlToList(sql,startDate,endDate);
sql = "select sjzt,sgsj,ygid,bc,fbid,bm,rq,j1,c1,j2,c2,j3,c3,j4,c4,j5,c5,j6,c6,j7,c7,j8,c8 from uf_jcl_kq_cqjg where rq>=? and rq<=?";
List<Map<String,Object>> attendaceResult = DbTools.getSqlToList(sql,startBeforeDate,endAfterDate);
Map<String,List<Map<String,Object>>> attendaceGroupById = attendaceResult.stream().collect(Collectors.groupingBy(e->e.get("ygid").toString()));
@ -96,62 +145,81 @@ public class AttendanceanalysisAction {
log.info("***********analysis userId:{} start***********", userId);
//出勤结果,进出时间
Map<String,Map<String,Object>> clockInTimeMap = Maps.newHashMap();
/**获得人员考勤项目*/
Map<String,Object> param = Maps.newHashMap();
param.put("startDate",startBeforeDate);
param.put("endDate",endAfterDate);
param.put("resourceId",userId);
Map<String,Object> dataMap = basicsetService.getAttendanceItemsByPerson(param);
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)dataMap.get("data");
/**
*
*/
Map<String,Object> workHourdataMap = basicsetService.getWorkHoursItemByPerson(param);
List<Map<String,Object>> workHourItems = (List<Map<String,Object>>)workHourdataMap.get("data");
/** 获取人员班次*/
Map<String,Object> classesParamMap = Maps.newHashMap();
classesParamMap.put("tableName","uf_pbjg");
classesParamMap.put("startDate",startBeforeDate);
classesParamMap.put("endDate",endAfterDate);
classesParamMap.put("pblx","0");
classesParamMap.put("pbdx",userId);
classesParamMap.put("current","1");
classesParamMap.put("pageSize",9999);
classesParamMap.put("recurrence",1);
classesParamMap.put("clockInTimeMap",clockInTimeMap);
classesParamMap.put("clockInData",collect.get(userId));
classesParamMap.put("attendanceItems",attendanceItems);
Map<String,Object> schedulMap = utilService.getSchedulingInFormation(classesParamMap);
Map<String, List<Map<String, Object>>> attendaceResultMap = Maps.newHashMap();
if (attendaceGroupById.get(userId) != null && attendaceGroupById.get(userId).size() > 0) {
attendaceResultMap = attendaceGroupById.get(userId).stream().collect(Collectors.groupingBy(e -> e.get("rq").toString()));
for (Map<String, Object> map: attendaceGroupById.get(userId)){
clockInTimeMap.put(map.get("rq").toString(),map);
}
}
Map<String,Object> analysisParam = Maps.newHashMap();
analysisParam.put("generalAttendanceItems",generalAttendanceItems);
analysisParam.put("attendancePlanMap",attendancePlanMap);
analysisParam.put("attendanceItemGroupByPlan",attendanceItemGroupByPlan);
analysisParam.put("comprehensiveWorkingHourList",personComprehensiveWorkingHours.get(userId)==null?Lists.newArrayList():personComprehensiveWorkingHours.get(userId));
analysisParam.put("workingHourGroupBy",workingHourGroupBy);
analysisParam.put("allScheduleList",allScheduleList);
analysisParam.put("allClassInfoList",allClassInfoList);
analysisParam.put("allOverPlanList",allOverPlanGroup.get(userId)==null?Lists.newArrayList():allOverPlanGroup.get(userId));
analysisParam.put("evectionList",evectionGroup.get(userId)==null?Lists.newArrayList():evectionGroup.get(userId));
analysisParam.put("askforList",askforGroup.get(userId)==null?Lists.newArrayList():askforGroup.get(userId));
analysisParam.put("hxbzList",hxbzList);
analysisParam.put("seclevel",Util.null2String(userMap.get("seclevel")));
analysisParam.put("departmentId",Util.null2String(userMap.get("departmentid")));
analysisParam.put("subCompanyId",Util.null2String(userMap.get("subcompanyid1")));
for (int i=0; i<=betweenDays;i++){
String date = DateUtil.AfterDay(startDate,i);
if (leaveAndEntry.equals("1")){
if (("".equals(companystartDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(companystartDate))>0)
&& ("".equals(terminationDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(terminationDate)) <0)){
attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),attendanceItems,schedulMap,workHourItems,clockInTimeMap,attendaceResultMap.get(date));
attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),analysisParam,clockInTimeMap,attendaceResultMap);
}
}else {
if (("".equals(companystartDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(companystartDate))>=0)
&& ("".equals(terminationDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(terminationDate)) <=0)){
attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),attendanceItems,schedulMap,workHourItems,clockInTimeMap,attendaceResultMap.get(date));
attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),analysisParam,clockInTimeMap,attendaceResultMap);
}
}
}
allowanceService.addAllowanceRecords(paramMap);
}
}else {
String queryDepartEmployeeSql = "select resourceid ,changedate,type_n from HRMSTATUSHISTORY where (type_n = 5 or type_n = 7) and changedate <> '' and changedate is not null and resourceid in ("+userIds+")";
//获取离职日期
List<Map<String,Object>> departEmployeeList = DbTools.getSqlToList(queryDepartEmployeeSql);
Map<String,Object> departEmployeeMap = CommonUtil.getDepartEmployeeMap(departEmployeeList);
/**排班结果*/
String querySchedulesql = "select a.id as keyid,a.* from uf_pbjg a where bcrq >=? and bcrq<=? order by bcrq";
List<Map<String,Object>> allScheduleList = DbTools.getSqlToList(querySchedulesql,startBeforeDate,endAfterDate);
/**加班计划*/
String queryOverplansql = "select a.id,b.jbry,b.ksrq,b.kssj,b.jblx,b.jsrq,b.jssj,b.jbsc,b.gsrq,b.d_jxgz,b.jxsc from uf_jcl_kq_jbjh a left join uf_jcl_kq_jbjh_dt1 b on a.id=b.mainid where b.jbry in ("+userIds+") and b.gsrq >=? and b.gsrq<=? and (b.jbcx=0 or b.jbcx is null) and a.jlzt=1";
List<Map<String,Object>> allOverPlanList = DbTools.getSqlToList(queryOverplansql,startDate,endDate);
Map<String,List<Map<String,Object>>> allOverPlanGroup = allOverPlanList.stream().collect(Collectors.groupingBy(e->e.get("jbry").toString()));
/**班次信息*/
String querClasssql = "select a.xxbdkzdjb,a.sfxx,a.id bcxx,a.edsc,a.zgzsc,a.bcsdxx,a.sfdx,a.sfkt,b.bdlx,a.btgz,a.fgsjd,a.zddxfz,a.dxhs,b.kssj dtkssj,b.jssj dtjssj,b.ksdk,b.jsdk,b.tqdkfzs,b.thdkfzs,b.edxss,b.edfzs,b.edts,b.sfdx dtsfdx,b.zddxfz dtzddxfz,b.dxhs dtdxhs,b.gsrq from uf_jcl_kq_bcxx a left join uf_jcl_kq_bcxx_dt1 b on a.id=b.mainid";
List<Map<String,Object>> allClassInfoList = DbTools.getSqlToList(querClasssql);
/**出差信息*/
String querEvectionsql = "select b.ccr,b.cclx,b.ksrq,b.jsrq,b.kssj,b.jssj,b.ccsc,b.qtcc,b.btcc,b.cxcc from uf_jcl_kq_ccjl a left join uf_jcl_kq_ccjl_dt1 b on a.id = b.mainid where b.ccr in ("+userIds+") and b.ksrq<=? and b.jsrq>=? and (b.cxcc=0 or b.cxcc is null) and a.jlzt=1";
Map<String,List<Map<String,Object>>> evectionGroup = DbTools.getSqlToList(querEvectionsql,endDate,startDate).stream().collect(Collectors.groupingBy(e->e.get("ccr").toString()));
/**请假信息*/
String queryAskForsql = "select b.qjry,b.jqlx,b.ksrq,b.kssj,b.jsrq,b.jssj,b.qjsc,b.qtj,b.btj from uf_jcl_kq_qjjl a left join uf_jcl_kq_qjjl_dt1 b on a.id = b.mainid where b.qjry in ("+userIds+") and b.ksrq<=? and b.jsrq>=? and (b.cxqj=0 or b.cxqj is null) and a.jlzt=1";
Map<String,List<Map<String,Object>>> askforGroup = DbTools.getSqlToList(queryAskForsql,endDate,startDate).stream().collect(Collectors.groupingBy(e->e.get("qjry").toString()));
/**候选班组*/
String queryHxbz = "select * from uf_jcl_kq_hxbz_dt1";
List<Map<String,Object>> hxbzList = DbTools.getSqlToList(queryHxbz);
String sql = "select id,userid,signdate,signtime from hrmschedulesign where isincom=1 and userid in ("+userIds+") and signdate >= ? and signdate <= ? order by signdate,signtime";
List<Map<String,Object>> dataList = DbTools.getSqlToList(sql,startBeforeDate,endAfterDate);
String queryUserSql = "select id,companystartdate from hrmresource where id in ("+userIds+")";
String queryUserSql = "select id,companystartdate,seclevel,departmentid,subcompanyid1 from hrmresource where id in ("+userIds+")";
List<Map<String,Object>> userList = DbTools.getSqlToList(queryUserSql);
Map<String,List<Map<String,Object>>> userGroupMap = userList.stream().collect(Collectors.groupingBy(e->e.get("id").toString()));
@ -166,14 +234,12 @@ public class AttendanceanalysisAction {
Map<String, List<Map<String,Object>>> collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("userid"))));
sql = "select sjzt,sgsj,ygid,rq from uf_jcl_kq_cqjg where rq>=? and rq<=? and ygid in ("+userIds+")";
List<Map<String,Object>> attendaceResult = DbTools.getSqlToList(sql,startDate,endDate);
sql = "select sjzt,sgsj,ygid,bc,fbid,bm,rq,j1,c1,j2,c2,j3,c3,j4,c4,j5,c5,j6,c6,j7,c7,j8,c8 from uf_jcl_kq_cqjg where rq>=? and rq<=? and ygid in ("+userIds+")";
List<Map<String,Object>> attendaceResult = DbTools.getSqlToList(sql,startBeforeDate,endAfterDate);
Map<String,List<Map<String,Object>>> attendaceGroupById = attendaceResult.stream().collect(Collectors.groupingBy(e->e.get("ygid").toString()));
for (String userId : userIds.split(",")){
/**获得人员考勤项目*/
Map<String,Object> param = Maps.newHashMap();
//入职日期
String companystartDate = Util.null2String(userGroupMap.get(userId).get(0).get("companystartdate"));
//离职日期
@ -181,38 +247,30 @@ public class AttendanceanalysisAction {
//出勤结果,进出时间
Map<String,Map<String,Object>> clockInTimeMap = Maps.newHashMap();
param.put("startDate",startBeforeDate);
param.put("endDate",endAfterDate);
param.put("resourceId",userId);
Map<String,Object> dataMap = basicsetService.getAttendanceItemsByPerson(param);
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)dataMap.get("data");
/**
*
*/
Map<String,Object> workHourdataMap = basicsetService.getWorkHoursItemByPerson(param);
List<Map<String,Object>> workHourItems = (List<Map<String,Object>>)workHourdataMap.get("data");
/** 获取人员班次*/
Map<String,Object> classesParamMap = Maps.newHashMap();
classesParamMap.put("tableName","uf_pbjg");
classesParamMap.put("startDate",startBeforeDate);
classesParamMap.put("endDate",endAfterDate);
classesParamMap.put("pblx","0");
classesParamMap.put("pbdx",userId);
classesParamMap.put("current","1");
classesParamMap.put("pageSize",9999);
classesParamMap.put("recurrence",1);
classesParamMap.put("clockInTimeMap",clockInTimeMap);
classesParamMap.put("clockInData",collect.get(userId));
classesParamMap.put("attendanceItems",attendanceItems);
Map<String,Object> schedulMap = utilService.getSchedulingInFormation(classesParamMap);
Map<String,Object> analysisParam = Maps.newHashMap();
analysisParam.put("generalAttendanceItems",generalAttendanceItems);
analysisParam.put("attendancePlanMap",attendancePlanMap);
analysisParam.put("attendanceItemGroupByPlan",attendanceItemGroupByPlan);
analysisParam.put("comprehensiveWorkingHourList",personComprehensiveWorkingHours.get(userId)==null?Lists.newArrayList():personComprehensiveWorkingHours.get(userId));
analysisParam.put("workingHourGroupBy",workingHourGroupBy);
analysisParam.put("allScheduleList",allScheduleList);
analysisParam.put("allClassInfoList",allClassInfoList);
analysisParam.put("allOverPlanList",allOverPlanGroup.get(userId)==null?Lists.newArrayList():allOverPlanGroup.get(userId));
analysisParam.put("evectionList",evectionGroup.get(userId)==null?Lists.newArrayList():evectionGroup.get(userId));
analysisParam.put("askforList",askforGroup.get(userId)==null?Lists.newArrayList():askforGroup.get(userId));
analysisParam.put("hxbzList",hxbzList);
analysisParam.put("seclevel",userGroupMap.get(userId).get(0).get("seclevel"));
analysisParam.put("departmentId",userGroupMap.get(userId).get(0).get("departmentid"));
analysisParam.put("subCompanyId",userGroupMap.get(userId).get(0).get("subcompanyid1"));
Map<String, List<Map<String, Object>>> attendaceResultMap = Maps.newHashMap();
if (attendaceGroupById.get(userId) != null && attendaceGroupById.get(userId).size() > 0) {
attendaceResultMap = attendaceGroupById.get(userId).stream().collect(Collectors.groupingBy(e -> e.get("rq").toString()));
for (Map<String, Object> map: attendaceGroupById.get(userId)){
clockInTimeMap.put(map.get("rq").toString(),map);
}
}
for (int i=0; i<=betweenDays;i++){
@ -221,15 +279,14 @@ public class AttendanceanalysisAction {
if (("".equals(companystartDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(companystartDate))>0)
&& ("".equals(terminationDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(terminationDate)) <0)){
log.info("***********analysis userId:{},analysisDate:{} start***********", userId, date);
attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),attendanceItems,schedulMap,workHourItems,clockInTimeMap,attendaceResultMap.get(date));
attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),analysisParam,clockInTimeMap,attendaceResultMap);
}
}else {
if (("".equals(companystartDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(companystartDate))>=0)
&& ("".equals(terminationDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(terminationDate)) <=0)){
log.info("***********analysis userId:{},analysisDate:{} start***********", userId, date);
attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),attendanceItems,schedulMap,workHourItems,clockInTimeMap,attendaceResultMap.get(date));
attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),analysisParam,clockInTimeMap,attendaceResultMap);
}
}
}

@ -10,10 +10,12 @@ import com.engine.jucailinkq.attendance.enums.ClassSegmentTypeEnum;
import com.engine.jucailinkq.common.util.CommonUtil;
import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.common.util.ServiceUtil;
import com.engine.jucailinkq.common.util.ExtensionClassHolder;
import com.engine.jucailinkq.common.util.Utils;
import com.engine.core.impl.Service;
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;
@ -21,6 +23,7 @@ import java.time.ZoneOffset;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
@ -38,34 +41,125 @@ public class AttendanceAnalysisWrapper extends Service {
*
* @param userId id
* @param dataList
* @param attendanceItems
*/
public void attendanceAnalysis(String userId, List<String> analysisDateList, List<Map<String, Object>> dataList, List<Map<String, Object>> attendanceItems, List<Map<String, Object>> workHourItems, Map<String, Map<String, Object>> clockInTimeMap, Map<String, List<Map<String, Object>>> attendaceResultMap) {
public void attendanceAnalysis(String userId, List<String> analysisDateList, List<Map<String, Object>> dataList, Map<String,Object> analysisParam, Map<String, Map<String, Object>> clockInTimeMap, Map<String, List<Map<String, Object>>> attendaceResultMap) {
log.debug("***********analysis userId:{} analysisDate:{} start***********", userId,analysisDateList);
log.debug("clockInTimeDate : [{}]", dataList);
String beforeTwoDayDateDate = DateUtil.beforeDay(analysisDateList.get(0), 2);
/** 打卡数据 */
Map<String, List<Map<String, Object>>> collect = Maps.newHashMap();
if (dataList != null && dataList.size() > 0) {
collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("signdate"))));
}
String departmentid = Util.null2String(analysisParam.get("departmentId"));
String subcompanyid1 = Util.null2String(analysisParam.get("subCompanyId"));
Map<String,String> attendancePlanMap = (Map<String,String>)analysisParam.get("attendancePlanMap");
List<Map<String,Object>> generalAttendanceItems = (List<Map<String,Object>>)analysisParam.get("generalAttendanceItems");
Map<String,List<Map<String,Object>>> attendanceItemGroupByPlan = (Map<String,List<Map<String,Object>>>)analysisParam.get("attendanceItemGroupByPlan");
/**获得综合工时*/
List<Map<String,String>> comprehensiveWorkingHourList = (List<Map<String,String>>)analysisParam.get("comprehensiveWorkingHourList");
Map<String,List<Map<String,Object>>> workingHourGroupBy = (Map<String,List<Map<String,Object>>>)analysisParam.get("workingHourGroupBy");
for (String analysisDate :analysisDateList){
/**获得人员考勤项目*/
Map<String,Object> getAttendacneParamMap = Maps.newHashMap();
getAttendacneParamMap.put("userId",userId);
getAttendacneParamMap.put("departmentId",departmentid);
getAttendacneParamMap.put("subCompanyId",subcompanyid1);
getAttendacneParamMap.put("anysisyDate",analysisDate);
getAttendacneParamMap.put("seclevel",analysisParam.get("seclevel"));
getAttendacneParamMap.putAll(attendancePlanMap);
/**
*
*/
List<Map<String, Object>> workHourItems = Lists.newArrayList();
List<Map<String,String>> analysisDateWorkingHourList = comprehensiveWorkingHourList.stream().filter(e->{
if ((!"".equals(Util.null2String(e.get("bdate"))) && DateUtil.getTime(analysisDate).compareTo(DateUtil.getTime(e.get("bdate"))) <0) ||
(!"".equals(Util.null2String(e.get("edate"))) && DateUtil.getTime(analysisDate).compareTo(DateUtil.getTime(e.get("edate"))) > 0)){
return false;
}else {
return true;
}
}).collect(Collectors.toList());
if (analysisDateWorkingHourList.size() > 0){
analysisDateWorkingHourList = analysisDateWorkingHourList.stream().sorted(Comparator.comparing(e->Integer.valueOf(e.get("priority")))).collect(Collectors.toList());
if (workingHourGroupBy.get(analysisDateWorkingHourList.get(0).get("dataid")) != null &&
workingHourGroupBy.get(analysisDateWorkingHourList.get(0).get("dataid")).size()>0){
workHourItems.addAll(workingHourGroupBy.get(analysisDateWorkingHourList.get(0).get("dataid")));
}
}
/** 获取人员班次*/
Map<String, Object> classesParamMap = Maps.newHashMap();
classesParamMap.put("tableName", "uf_pbjg");
classesParamMap.put("startDate", beforeTwoDayDateDate);
classesParamMap.put("endDate", DateUtil.AfterDay(analysisDateList.get(analysisDateList.size()-1),1));
classesParamMap.put("pblx", "0");
classesParamMap.put("startDate", analysisDate);
classesParamMap.put("endDate", analysisDate);
classesParamMap.put("pbdx", userId);
classesParamMap.put("current", "1");
classesParamMap.put("pageSize", 9999);
classesParamMap.put("recurrence", 1);
classesParamMap.put("clockInTimeMap", clockInTimeMap);
classesParamMap.put("attendanceItems", attendanceItems);
classesParamMap.put("clockInData", dataList);
Map<String, Object> schedulMap = utilService.getSchedulingInFormation(classesParamMap);
classesParamMap.put("allScheduleList",analysisParam.get("allScheduleList"));
classesParamMap.put("allClassInfoList",analysisParam.get("allClassInfoList"));
classesParamMap.put("allOverPlanList",analysisParam.get("allOverPlanList"));
classesParamMap.put("attendaceResultMap",attendaceResultMap);
classesParamMap.put("evectionList",analysisParam.get("evectionList"));
classesParamMap.put("askforList",analysisParam.get("askforList"));
classesParamMap.put("hxbzList",analysisParam.get("hxbzList"));
List<Map<String, Object>> analysisDateAttendaceResult = attendaceResultMap.get(analysisDate);
List<Map<String, Object>> analysisDateAttendanceItems =Lists.newArrayList();
Map<String, Object> schedulMap = null;
if (analysisDateAttendaceResult == null || analysisDateAttendaceResult.size() == 0 || (!CheckBoxEnum.CHECKED.getKey().equals(analysisDateAttendaceResult.get(0).get("sgsj")) &&
!"3".equals(analysisDateAttendaceResult.get(0).get("sjzt")))) {
/**人员换了部门,需班次、分部、部门继续走老的*/
if (analysisDateAttendaceResult!=null && analysisDateAttendaceResult.size() >0 && (!analysisDateAttendaceResult.get(0).get("fbid").equals(subcompanyid1) || !analysisDateAttendaceResult.get(0).get("bm").equals(departmentid))){
String olddepartmentid = analysisDateAttendaceResult.get(0).get("bm").toString();
String oldsubCompanyid = analysisDateAttendaceResult.get(0).get("fbid").toString();
//旧的考勤项目
getAttendacneParamMap.put("departmentId",olddepartmentid);
getAttendacneParamMap.put("subCompanyId",oldsubCompanyid);
Map<String, Object> attendanceItemresultMap = utilService.getAttendanceItems(getAttendacneParamMap);
Set<String> attendanceItems = (Set<String>)attendanceItemresultMap.get("attendanceItems");
for (String attendanceItemId:attendanceItems){
if (attendanceItemGroupByPlan.get(attendanceItemId) != null &&
attendanceItemGroupByPlan.get(attendanceItemId).size()>0){
analysisDateAttendanceItems.addAll(attendanceItemGroupByPlan.get(attendanceItemId));
}
}
analysisDateAttendanceItems.addAll(generalAttendanceItems);
//旧的综合工时
Map<String,Object> workhourpersonOrganzationMap = (Map<String,Object>)analysisParam.get("workhourpersonOrganzationMap");
Map<String,Object> workhourdepartMentMap = (Map<String,Object>)analysisParam.get("workhourdepartMentMap");
Map<String,Object> workhoursubCompanyMap = (Map<String,Object>)analysisParam.get("workhoursubCompanyMap");
//旧的班次
classesParamMap.put("olddepartmentid",olddepartmentid);
classesParamMap.put("oldsubCompanyid",oldsubCompanyid);
classesParamMap.put("attendanceItems", analysisDateAttendanceItems);
schedulMap = utilService.getSchedulingInFormation(classesParamMap);
}else {
Map<String, Object> attendanceItemresultMap = utilService.getAttendanceItems(getAttendacneParamMap);
Set<String> attendanceItems = (Set<String>)attendanceItemresultMap.get("attendanceItems");
for (String attendanceItemId:attendanceItems){
if (attendanceItemGroupByPlan.get(attendanceItemId) != null &&
attendanceItemGroupByPlan.get(attendanceItemId).size()>0){
analysisDateAttendanceItems.addAll(attendanceItemGroupByPlan.get(attendanceItemId));
}
}
analysisDateAttendanceItems.addAll(generalAttendanceItems);
classesParamMap.put("attendanceItems", analysisDateAttendanceItems);
schedulMap = utilService.getSchedulingInFormation(classesParamMap);
}
Map<String, List<Map<String, Object>>> schedulingResultsMap = (Map<String, List<Map<String, Object>>>) schedulMap.get("schedulingResultsMap");
for (String analysisDate :analysisDateList){
Map<String, Object> getClockTimeParam = Maps.newHashMap();
getClockTimeParam.put("date", analysisDate);
getClockTimeParam.put("clockInTimeList", dataList);
@ -74,14 +168,11 @@ public class AttendanceAnalysisWrapper extends Service {
getClockTimeParam.put("clockInTimeMap", clockInTimeMap);
getClockTimeParam.put("userId", userId);
List<Map<String, Object>> analysisDateAttendaceResult = attendaceResultMap.get(analysisDate);
if (analysisDateAttendaceResult == null || analysisDateAttendaceResult.size() == 0 || (!CheckBoxEnum.CHECKED.getKey().equals(analysisDateAttendaceResult.get(0).get("sgsj")) &&
!"3".equals(analysisDateAttendaceResult.get(0).get("sjzt")))) {
//打卡数据
List<Map<String, Object>> analysisDateClockInTimeList = utilService.getClockInTime(getClockTimeParam);
//分析考勤
Map<String, Object> recordDataTime1 = analysis(userId, analysisDate, analysisDateClockInTimeList, schedulingResultsMap.get(analysisDate), attendanceItems, workHourItems,(Map<String,Object>)schedulMap.get("clockInTimeDataMap"));
Map<String, Object> recordDataTime1 = analysis(userId, analysisDate, analysisDateClockInTimeList, schedulingResultsMap.get(analysisDate), analysisDateAttendanceItems, workHourItems,(Map<String,Object>)schedulMap.get("clockInTimeDataMap"),
(List<Map<String,Object>>)analysisParam.get("evectionList"),(List<Map<String,Object>>)analysisParam.get("askforList"));
clockInTimeMap.put(analysisDate, recordDataTime1);
}
}
@ -93,20 +184,126 @@ public class AttendanceAnalysisWrapper extends Service {
* @param userId id
* @param analysisDate
* @param dataList 23
* @param attendanceItems
*/
public void attendanceAnalysisForApi(String userId, String analysisDate, List<Map<String, Object>> dataList, List<Map<String, Object>> attendanceItems, Map<String, Object> schedulMap, List<Map<String, Object>> workHourItems, Map<String, Map<String, Object>> clockInTimeMap,List<Map<String,Object>> attendaceResult) {
public void attendanceAnalysisForApi(String userId, String analysisDate, List<Map<String, Object>> dataList,Map<String,Object> analysisParam , Map<String, Map<String, Object>> clockInTimeMap,Map<String, List<Map<String, Object>>> attendaceResultMap) {
log.debug("***********analysis userId:{},analysisDate:{} start***********", userId, analysisDate);
log.debug("clockInTimeDate : [{}]", dataList);
List<Map<String, Object>> attendaceResult = attendaceResultMap.get(analysisDate);
log.debug("attendaceResult : [{}]",attendaceResult);
if (attendaceResult!=null && attendaceResult.size()>0 && (CheckBoxEnum.CHECKED.getKey().equals(attendaceResult.get(0).get("sgsj")) ||
"3".equals(attendaceResult.get(0).get("sjzt")))) {
return;
}
Map<String, List<Map<String, Object>>> collect = Maps.newHashMap();
if (dataList != null && dataList.size() > 0) {
collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("signdate"))));
}
List<Map<String,Object>> generalAttendanceItems = (List<Map<String,Object>>)analysisParam.get("generalAttendanceItems");
Map<String,String> attendancePlanMap = (Map<String,String>)analysisParam.get("attendancePlanMap");
Map<String,List<Map<String,Object>>> attendanceItemGroupByPlan = (Map<String,List<Map<String,Object>>>)analysisParam.get("attendanceItemGroupByPlan");
List<Map<String,String>> comprehensiveWorkingHourList = (List<Map<String,String>>)analysisParam.get("comprehensiveWorkingHourList");
Map<String,List<Map<String,Object>>> workingHourGroupBy = (Map<String,List<Map<String,Object>>>)analysisParam.get("workingHourGroupBy");
String departmentid = Util.null2String(analysisParam.get("departmentId"));
String subcompanyid1 = Util.null2String(analysisParam.get("subCompanyId"));
/**获得人员考勤项目*/
Map<String,Object> getAttendacneParamMap = Maps.newHashMap();
getAttendacneParamMap.put("userId",userId);
getAttendacneParamMap.put("departmentId",departmentid);
getAttendacneParamMap.put("subCompanyId",subcompanyid1);
getAttendacneParamMap.put("anysisyDate",analysisDate);
getAttendacneParamMap.put("seclevel",analysisParam.get("seclevel"));
getAttendacneParamMap.putAll(attendancePlanMap);
/**
*
*/
List<Map<String, Object>> workHourItems = Lists.newArrayList();
List<Map<String,String>> analysisDateWorkingHourList = comprehensiveWorkingHourList.stream().filter(e->{
if ((!"".equals(Util.null2String(e.get("bdate"))) && DateUtil.getTime(analysisDate).compareTo(DateUtil.getTime(e.get("bdate"))) <0) ||
(!"".equals(Util.null2String(e.get("edate"))) && DateUtil.getTime(analysisDate).compareTo(DateUtil.getTime(e.get("edate"))) > 0)){
return false;
}else {
return true;
}
}).collect(Collectors.toList());
if (analysisDateWorkingHourList.size() > 0){
analysisDateWorkingHourList = analysisDateWorkingHourList.stream().sorted(Comparator.comparing(e->Integer.valueOf(e.get("priority")))).collect(Collectors.toList());
if (workingHourGroupBy.get(analysisDateWorkingHourList.get(0).get("dataid")) != null &&
workingHourGroupBy.get(analysisDateWorkingHourList.get(0).get("dataid")).size()>0){
workHourItems.addAll(workingHourGroupBy.get(analysisDateWorkingHourList.get(0).get("dataid")));
}
}
/** 获取人员班次*/
Map<String, Object> classesParamMap = Maps.newHashMap();
classesParamMap.put("startDate", analysisDate);
classesParamMap.put("endDate", analysisDate);
classesParamMap.put("pbdx", userId);
classesParamMap.put("clockInTimeMap", clockInTimeMap);
classesParamMap.put("clockInData", dataList);
classesParamMap.put("allScheduleList",analysisParam.get("allScheduleList"));
classesParamMap.put("allClassInfoList",analysisParam.get("allClassInfoList"));
classesParamMap.put("allOverPlanList",analysisParam.get("allOverPlanList"));
classesParamMap.put("attendaceResultMap",attendaceResultMap);
classesParamMap.put("evectionList",analysisParam.get("evectionList"));
classesParamMap.put("askforList",analysisParam.get("askforList"));
classesParamMap.put("hxbzList",analysisParam.get("hxbzList"));
Map<String, Object> schedulMap = null;
List<Map<String, Object>> analysisDateAttendanceItems =Lists.newArrayList();
/**人员换了部门,需班次、分部、部门继续走老的*/
if (attendaceResult!=null && attendaceResult.size() >0 && (!attendaceResult.get(0).get("fbid").equals(subcompanyid1) || !attendaceResult.get(0).get("bm").equals(departmentid))){
String olddepartmentid = attendaceResult.get(0).get("bm").toString();
String oldsubCompanyid = attendaceResult.get(0).get("fbid").toString();
//旧的考勤项目
getAttendacneParamMap.put("departmentId",olddepartmentid);
getAttendacneParamMap.put("subCompanyId",oldsubCompanyid);
Map<String, Object> attendanceItemresultMap = utilService.getAttendanceItems(getAttendacneParamMap);
Set<String> attendanceItems = (Set<String>)attendanceItemresultMap.get("attendanceItems");
for (String attendanceItemId:attendanceItems){
if (attendanceItemGroupByPlan.get(attendanceItemId) != null &&
attendanceItemGroupByPlan.get(attendanceItemId).size()>0){
analysisDateAttendanceItems.addAll(attendanceItemGroupByPlan.get(attendanceItemId));
}
}
analysisDateAttendanceItems.addAll(generalAttendanceItems);
//旧的综合工时
Map<String,Object> workhourpersonOrganzationMap = (Map<String,Object>)analysisParam.get("workhourpersonOrganzationMap");
Map<String,Object> workhourdepartMentMap = (Map<String,Object>)analysisParam.get("workhourdepartMentMap");
Map<String,Object> workhoursubCompanyMap = (Map<String,Object>)analysisParam.get("workhoursubCompanyMap");
//旧的班次
classesParamMap.put("olddepartmentid",olddepartmentid);
classesParamMap.put("oldsubCompanyid",oldsubCompanyid);
classesParamMap.put("attendanceItems", analysisDateAttendanceItems);
schedulMap = utilService.getSchedulingInFormation(classesParamMap);
}else {
classesParamMap.put("attendanceItems", analysisDateAttendanceItems);
Map<String, Object> attendanceItemresultMap = utilService.getAttendanceItems(getAttendacneParamMap);
Set<String> attendanceItems = (Set<String>)attendanceItemresultMap.get("attendanceItems");
for (String attendanceItemId:attendanceItems){
if (attendanceItemGroupByPlan.get(attendanceItemId) != null &&
attendanceItemGroupByPlan.get(attendanceItemId).size()>0){
analysisDateAttendanceItems.addAll(attendanceItemGroupByPlan.get(attendanceItemId));
}
}
analysisDateAttendanceItems.addAll(generalAttendanceItems);
classesParamMap.put("attendanceItems", analysisDateAttendanceItems);
schedulMap = utilService.getSchedulingInFormation(classesParamMap);
}
Map<String, List<Map<String, Object>>> schedulingResultsMap = (Map<String, List<Map<String, Object>>>) schedulMap.get("schedulingResultsMap");
Map<String, Object> getClockTimeParam = Maps.newHashMap();
@ -117,10 +314,12 @@ public class AttendanceAnalysisWrapper extends Service {
getClockTimeParam.put("clockInTimeCollect", collect);
getClockTimeParam.put("userId", userId);
getClockTimeParam.put("workHourItems",workHourItems);
//打卡数据
List<Map<String, Object>> clockInTimeList = utilService.getClockInTime(getClockTimeParam);
Map<String, Object> recordDataTime = analysis(userId, analysisDate, clockInTimeList, schedulingResultsMap.get(analysisDate), attendanceItems, workHourItems,(Map<String,Object>)schedulMap.get("clockInTimeDataMap"));
clockInTimeMap.put(analysisDate, recordDataTime);
List<Map<String, Object>> analysisDateClockInTimeList = utilService.getClockInTime(getClockTimeParam);
Map<String, Object> recordDataTime1 = analysis(userId, analysisDate, analysisDateClockInTimeList, schedulingResultsMap.get(analysisDate), analysisDateAttendanceItems, workHourItems,(Map<String,Object>)schedulMap.get("clockInTimeDataMap"),
(List<Map<String,Object>>)analysisParam.get("evectionList"),(List<Map<String,Object>>)analysisParam.get("askforList"));
clockInTimeMap.put(analysisDate, recordDataTime1);
}
/**
@ -133,7 +332,7 @@ public class AttendanceAnalysisWrapper extends Service {
* @param attendanceItems
*/
public Map<String, Object> analysis(String userId, String analysisDate, List<Map<String, Object>> clockInTimeList, List<Map<String, Object>> scheduleResult, List<Map<String, Object>> attendanceItems, List<Map<String, Object>> workHourItems
,Map<String,Object> clockInTimeDataMap) {
,Map<String,Object> clockInTimeDataMap,List<Map<String, Object>> evectionList,List<Map<String, Object>> askforList) {
Map<String, Object> recordParam = Maps.newHashMap();
Map<String, String> formModeIdMap = Utils.getFormmodeIdMap();
recordParam.put("userId", userId);
@ -150,6 +349,8 @@ public class AttendanceAnalysisWrapper extends Service {
workingHourparam.put("userId", userId);
workingHourparam.put("attendanceItems", attendanceItems);
workingHourparam.put("scheduleResult", scheduleResult);
workingHourparam.put("evectionList",evectionList);
workingHourparam.put("askforList",askforList);
/**
*

@ -38,7 +38,7 @@ public class GetAttendanceItemsByPersonDataCmd extends AbstractCommonCommand<Map
String resourceId = Util.null2String(params.get("resourceId"));
String startDate = Util.null2String(params.get("startDate")).equals("")?DateUtil.getCurrentDate():Util.null2String(params.get("startDate"));
String endDate = Util.null2String(params.get("endDate"));
String modeId = Utils.getFormmodeIdMap().get("uf_jcl_kq_kqfa");
Map<String,Object> resultMap = Maps.newHashMap();

@ -0,0 +1,59 @@
package com.engine.jucailinkq.attendance.attendanceplan.cmd;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import com.engine.jucailinkq.attendance.enums.CheckBoxEnum;
import com.engine.jucailinkq.common.util.DbTools;
import com.google.common.collect.Maps;
import weaver.general.Util;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class GetAttendanceItemsGroupByAttendancePlanDataCmd extends AbstractCommonCommand<Map<String,Object>> {
@Override
public BizLogContext getLogContext() {
return null;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
Map<String,Object> resultMap = Maps.newHashMap();
String sql = "select c.id planid,b.id keyid,b.mc kqxm,c.mc famc,b.* 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";
List<Map<String,Object>> attendanceItems = DbTools.getSqlToList(sql);
List<String> fatherItems = attendanceItems.stream().filter(e-> Util.null2String(e.get("sffzcx")).equals(CheckBoxEnum.CHECKED.getKey())).map(e->e.get("keyid").toString()).collect(Collectors.toList());
if (fatherItems.size() > 0){
sql = "select id keyid,mc kqxm,a.* from uf_jcl_kq_kqxm a where (xmzt is null or xmzt <> '0') and a.sjxm in ("+String.join(",",fatherItems)+")";
List<Map<String,Object>> sonItemList = DbTools.getSqlToList(sql);
Map<String,List<Map<String,Object>>> sonGroupMap = sonItemList.stream().collect(Collectors.groupingBy(e->e.get("sjxm").toString()));
for (Map<String,Object> attendanceItem :attendanceItems){
if (CheckBoxEnum.CHECKED.getKey().equals(attendanceItem.get("sffzcx"))){
attendanceItem.put("sonItems",sonGroupMap.get(attendanceItem.get("keyid")));
}
}
}
sql = "select id keyid,mc kqxm,a.* from uf_jcl_kq_kqxm a where tyxm=1 and (xmzt is null or xmzt <> '0')";
List<Map<String,Object>> generalAttendanceItems = DbTools.getSqlToList(sql);
fatherItems = generalAttendanceItems.stream().filter(e-> Util.null2String(e.get("sffzcx")).equals(CheckBoxEnum.CHECKED.getKey())).map(e->e.get("keyid").toString()).collect(Collectors.toList());
if (fatherItems.size() > 0){
sql = "select id keyid,mc kqxm,a.* from uf_jcl_kq_kqxm a where (xmzt is null or xmzt <> '0') and a.sjxm in ("+String.join(",",fatherItems)+")";
List<Map<String,Object>> sonItemList = DbTools.getSqlToList(sql);
Map<String,List<Map<String,Object>>> sonGroupMap = sonItemList.stream().collect(Collectors.groupingBy(e->e.get("sjxm").toString()));
for (Map<String,Object> attendanceItem :generalAttendanceItems){
if (CheckBoxEnum.CHECKED.getKey().equals(attendanceItem.get("sffzcx"))){
attendanceItem.put("sonItems",sonGroupMap.get(attendanceItem.get("keyid")));
}
}
}
Map<String,List<Map<String,Object>>> attendanceItemGroupByPlan = attendanceItems.stream().collect(Collectors.groupingBy(e->e.get("planid").toString()));
resultMap.put("generalAttendanceItems",generalAttendanceItems);
resultMap.put("attendanceItemGroupByPlan",attendanceItemGroupByPlan);
return resultMap;
}
}

@ -16,4 +16,11 @@ public interface AttendancePlanService {
* @return
*/
Map<String,Object> getWorkHoursItemByPerson(Map<String,Object> params);
/**
*
* @return
*/
Map<String,Object> getAttendanceItemsGroupByAttendancePlanDataCmd();
}

@ -1,6 +1,7 @@
package com.engine.jucailinkq.attendance.attendanceplan.service.impl;
import com.engine.jucailinkq.attendance.attendanceplan.cmd.GetAttendanceItemsByPersonDataCmd;
import com.engine.jucailinkq.attendance.attendanceplan.cmd.GetAttendanceItemsGroupByAttendancePlanDataCmd;
import com.engine.jucailinkq.attendance.attendanceplan.cmd.GetWorkHoursItemByPersonCmd;
import com.engine.jucailinkq.attendance.attendanceplan.service.AttendancePlanService;
import com.engine.core.impl.Service;
@ -18,4 +19,9 @@ public class AttendancePlanServiceImpl extends Service implements AttendancePlan
public Map<String, Object> getWorkHoursItemByPerson(Map<String, Object> params) {
return commandExecutor.execute(new GetWorkHoursItemByPersonCmd(params));
}
@Override
public Map<String, Object> getAttendanceItemsGroupByAttendancePlanDataCmd() {
return commandExecutor.execute(new GetAttendanceItemsGroupByAttendancePlanDataCmd());
}
}

@ -483,6 +483,9 @@ public class WorkRulesServiceImpl extends Service implements WorkRulesService {
}
/**插入排班结果表*/
if (organizationList.size() == 0){
throw new AttendanceRunTimeException("没有需要更新的排班,请检查管理人员生效日期或联系管理员");
}
resultMap.put("result",PersongroupCommonUtil.insertSchedulingResults(organizationList,formmodeid));
if (!(boolean)resultMap.get("result")){
throw new AttendanceRunTimeException("插入数据失败,请检查修改班次人员是否有对应的企业日历");

@ -0,0 +1,179 @@
package com.engine.jucailinkq.attendance.component.persongroup.cmd;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import com.engine.jucailinkq.attendance.component.persongroup.commonutil.PersongroupCommonUtil;
import com.engine.jucailinkq.attendance.enums.CheckBoxEnum;
import com.engine.jucailinkq.attendance.enums.SchedulingApproachEnum;
import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools;
import com.engine.jucailinkq.common.util.ExtensionClassHolder;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import weaver.general.Util;
import weaver.hrm.company.DepartmentComInfo;
import java.time.ZoneOffset;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
*
*/
@Slf4j
public class GetScheduleFoAnalysisCmd extends AbstractCommonCommand<Map<String, Object>> {
@Override
public BizLogContext getLogContext() {
return null;
}
public GetScheduleFoAnalysisCmd(Map<String, Object> params) {
this.params = params;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
String startDate = Util.null2String(params.get("startDate"));
String endDate = Util.null2String(params.get("endDate"));
String pbdx = Util.null2String(params.get("pbdx"));
String olddepartmentid = Util.null2String(params.get("olddepartmentid"));
String oldsubCompanyid = Util.null2String(params.get("oldsubCompanyid"));
List<Map<String,Object>> allScheduleList = (List<Map<String,Object>>)params.get("allScheduleList");
Map<String, Object> resultMap = Maps.newHashMap();
List<Map<String, Object>> dataTableList = Lists.newArrayList();
try {
//人员递归查人员、人员分组、部门、分部
List<Map<String, Object>> dataList = allScheduleList.stream().filter(e->pbdx.equals(e.get("pbdxry")) &&
DateUtil.getTime(e.get("bcrq").toString()).compareTo(DateUtil.getTime(startDate))>=0 &&
DateUtil.getTime(e.get("bcrq").toString()).compareTo(DateUtil.getTime(endDate))<=0).collect(Collectors.toList());
//人员数据
//人员分组数据
List<Map<String, Object>> personGroupList = Lists.newArrayList();
Map<String, List<Map<String, Object>>> personBelongGroup = ExtensionClassHolder.getPersonBelongGroupThreadLocal();
//查人员分组
List<Map<String, Object>> personnelGroups = personBelongGroup.get(pbdx) == null ? Lists.newArrayList() : personBelongGroup.get(pbdx);
Map<String, List<Map<String, Object>>> personnelGroupsCollect = personnelGroups.stream().collect(Collectors.groupingBy(e -> e.get("mainid").toString()));
Set<String> personnelGroupIds = personnelGroups.stream().map(e -> e.get("mainid").toString()).collect(Collectors.toSet());
if (personnelGroupIds.size() > 0) {
personGroupList = allScheduleList.stream().filter(e->personnelGroupIds.contains(e.get("pbdxryfz")) &&
DateUtil.getTime(e.get("bcrq").toString()).compareTo(DateUtil.getTime(startDate))>=0 &&
DateUtil.getTime(e.get("bcrq").toString()).compareTo(DateUtil.getTime(endDate))<=0).collect(Collectors.toList());
}
personGroupList = personGroupList.stream().filter(e -> {
String bcrq = e.get("bcrq").toString();
String pbdxryfz = e.get("pbdxryfz").toString();
Map<String, Object> personnelGroup = personnelGroupsCollect.get(pbdxryfz).get(personnelGroupsCollect.get(pbdxryfz).size() - 1);
String edate = Util.null2String(personnelGroup.get("edate"));
String bdate = Util.null2String(personnelGroup.get("bdate"));
e.put("bdate", bdate);
if ((!"".equals(bdate) && DateUtil.getTime(bcrq).compareTo(DateUtil.getTime(bdate)) < 0) ||
(!"".equals(edate) && DateUtil.getTime(bcrq).compareTo(DateUtil.getTime(edate)) > 0)) {
return false;
} else {
return true;
}
}).collect(Collectors.toList());
//部门数据
List<Map<String, Object>> departmentList = Lists.newArrayList();
//查询部门数据
Map<String, Map<String, Object>> personInformationThreadLocal = ExtensionClassHolder.getPersonInformationThreadLocal();
Map<String, Object> personInformationMap = personInformationThreadLocal.get(pbdx);
String pdeptids = Util.null2String(personInformationMap.get("pdeptids"));
String subcompanyid1 = Util.null2String(personInformationMap.get("subcompanyid1"));
if (!olddepartmentid.equals("")){
Map<String,String> petDepart = ExtensionClassHolder.getPetDepartMentThreadLocal();
pdeptids = petDepart.get(olddepartmentid);
if (pdeptids == null || pdeptids.equals("")){
pdeptids="";
pdeptids = new DepartmentComInfo().getAllParentDepartId(Util.null2String(params.get("olddepartmentid")), pdeptids);
pdeptids = olddepartmentid + pdeptids;
}
}
if (!oldsubCompanyid.equals("")){
subcompanyid1=oldsubCompanyid;
}
List<String> pdeptidList = Lists.newArrayList(pdeptids.split(","));
List<String> subcompanyList = Lists.newArrayList(subcompanyid1.split(","));
departmentList = allScheduleList.stream().filter(e->pdeptidList.contains(e.get("pbdxbm")) &&
DateUtil.getTime(e.get("bcrq").toString()).compareTo(DateUtil.getTime(startDate))>=0 &&
DateUtil.getTime(e.get("bcrq").toString()).compareTo(DateUtil.getTime(endDate))<=0).collect(Collectors.toList());
//分部数据
List<Map<String, Object>> subCompanyList = Lists.newArrayList();
//查询人员分部
subCompanyList = allScheduleList.stream().filter(e->subcompanyList.contains(e.get("pbdxfb")) &&
DateUtil.getTime(e.get("bcrq").toString()).compareTo(DateUtil.getTime(startDate))>=0 &&
DateUtil.getTime(e.get("bcrq").toString()).compareTo(DateUtil.getTime(endDate))<=0).collect(Collectors.toList());
//排班途径枚举集合
dataList.addAll(personGroupList);
dataList.addAll(departmentList);
dataList.addAll(subCompanyList);
Map<String, List<Map<String, Object>>> dataCollect = dataList.stream().collect(Collectors.groupingBy(e -> e.get("pbtj").toString()));
for (SchedulingApproachEnum schedulingApproachEnum : SchedulingApproachEnum.values()) {
List<Map<String, Object>> resulstList = dataCollect.get(schedulingApproachEnum.getKey());
if (resulstList == null || resulstList.size() == 0) {
continue;
}
Map<String, List<Map<String, Object>>> resulstCollect = resulstList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("bcrq"))));
for (Map.Entry<String, List<Map<String, Object>>> entry : resulstCollect.entrySet()) {
String bcrq = entry.getKey();
List<Map<String, Object>> scheduleList = entry.getValue();
if (scheduleList.size() > 1) {
//优先级。人员 》人员分组》部门》分部
List<Map<String, Object>> psersonList = scheduleList.stream().filter(e -> !Util.null2String(e.get("pbdxry")).equals("")).collect(Collectors.toList());
if (psersonList.size() == 0) {
psersonList = scheduleList.stream().filter(e -> !Util.null2String(e.get("pbdxryfz")).equals("")).collect(Collectors.toList());
if (psersonList.size() > 1) {
psersonList = psersonList.stream().sorted(Comparator.comparing(e -> DateUtil.getTime(e.get("bdate").toString()).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList());
psersonList = Lists.newArrayList(psersonList.get(psersonList.size() - 1));
}
}
if (psersonList.size() == 0) {
psersonList = scheduleList.stream().filter(e -> !Util.null2String(e.get("pbdxbm")).equals("")).collect(Collectors.toList());
}
if (psersonList.size() == 0) {
psersonList = scheduleList.stream().filter(e -> !Util.null2String(e.get("pbdxfb")).equals("")).collect(Collectors.toList());
}
if (psersonList.size() > 0) {
if (schedulingApproachEnum == SchedulingApproachEnum.RULE) {
psersonList = psersonList.stream().sorted(Comparator.comparing(e -> Long.valueOf(e.get("pbgl").toString()))).collect(Collectors.toList());
} else {
psersonList = psersonList.stream().sorted(Comparator.comparing(e -> Long.valueOf(e.get("keyid").toString()))).collect(Collectors.toList());
}
dataTableList.add(psersonList.get(psersonList.size() - 1));
}
} else {
dataTableList.add(scheduleList.get(0));
}
}
}
} catch (Exception e) {
log.error("catch error : {}", e);
}
resultMap.put("dataTableList", dataTableList);
log.debug("dataTableList total size : {}", dataTableList.size());
return resultMap;
}
}

@ -470,6 +470,63 @@ public class PersongroupCommonUtil {
return userIds;
}
/**
* id
* @param personnelGroupingList
* @return userIDs
*/
public static Map<String,Map<String,String>> getUserIdsByPersonnelGrouping(List<Map<String,Object>> personnelGroupingList){
log.debug("getUserIdsByPersonnelGrouping personnelGroupingList :[{}]",personnelGroupingList);
Map<String,Map<String,String>> userMap = Maps.newHashMap();
for (Map<String,Object> data:personnelGroupingList){
//生效日期
String bdate = Util.null2String(data.get("bdate"));
//失效日期
String edate = Util.null2String(data.get("edate"));
Map<String,String> map = Maps.newHashMap();
map.put("bdate",bdate);
map.put("edate",edate);
String empid = Util.null2String(data.get("empid"));
String filters = Util.null2String(data.get("filters"));
String list_type = Util.null2String(data.get("list_type"));
String sqltj = Util.null2String(data.get("sqltj"));
if (PersonGroupListTypeEnum.PERSON.getKey().equals(list_type) && !"".equals(empid)){
//人员清单
userMap.put(empid,map);
}else if (PersonGroupListTypeEnum.CONDITION.getKey().equals(list_type) && !"".equals(filters)){
filters = filters.replace("","and");
filters = filters.replace("","or");
//条件清单
String sql = "select id,seclevel from hrmresource where 1=1 ";
if (filters.contains("field")){
sql = "select a.id,a.seclevel from hrmresource a left join cus_fielddata b on a.id=b.id where scope='HrmCustomFieldByInfoType' and "+filters;
}else {
sql = sql+ " and "+filters;
}
log.debug("getPersonnelGroupingByPerson filter sql : {}",sql);
List<Map<String,Object>> dataList = DbTools.getSqlToList(sql);
for (Map<String,Object> dataMap :dataList){
String hrmId = Util.null2String(dataMap.get("id"));
userMap.put(hrmId,map);
}
}else if (PersonGroupListTypeEnum.SQLCONDITION.getKey().equals(list_type) && !"".equals(sqltj)){
sqltj = Utils.converSQL(sqltj);
log.info("getPersonnelGroupingByPerson sqltj : [{}]",sqltj);
List<Map<String,Object>> dataList = DbTools.getSqlToList(sqltj);
for (Map<String,Object> dataMap :dataList){
String hrmId = Util.null2String(dataMap.get("id"));
userMap.put(hrmId,map);
}
}
}
log.debug("userIds size :[{}]",userMap.size());
return userMap;
}
/**
*
* @return

@ -24,19 +24,23 @@ public interface SchedulingResultsService {
* @return
*/
Map<String,Object> saveScheduleResult(Map<String,Object> params);
/**
*
* @param params
* @return
*/
Map<String,Object> generateSchedule(Map<String,Object> params);
/**
*
* @param params
* @return
*/
Map<String,Object> deleteBatchSchedule(Map<String,Object> params);
/**
* 使
* @param params
* @return
*/
Map<String,Object> getUseSchedule(Map<String,Object> params);
}

@ -117,4 +117,13 @@ public class SchedulingResultsServiceImpl extends Service implements SchedulingR
return commandExecutor.execute(new DeleteBatchScheduleCmd(params));
}
@Override
public Map<String, Object> getUseSchedule(Map<String, Object> params) {
Map<String, Object> result = commandExecutor.execute(new GetScheduleFoAnalysisCmd(params));
Map<String, Object> resultMap = Maps.newHashMap();
List<Map<String, Object>> dataTableList = (List<Map<String, Object>>)result.get("dataTableList");
resultMap.put("data",Utils.getSchedulingList(dataTableList));
return resultMap;
}
}

@ -44,6 +44,7 @@ public class VocationCmd extends AbstractCommonCommand<Map<String,Object>> {
String ljcrglyfslwz = Util.null2String(vocation.get("ljcrglyfslwz"));
String lsgldw = Util.null2String(vocation.get("lsgldw"));
String jzrqzd = Util.null2String(vocation.get("jzrqzd"));
String jgsc = Util.null2String(vocation.get("jgsc"));
String qsrqValue = Util.null2String(userMap.get(qsrq));
String yjzdValue = Util.null2String(userMap.get(yjzd));
String ljcrglyfslwzValue = Util.null2String(userMap.get(ljcrglyfslwz));
@ -85,11 +86,16 @@ public class VocationCmd extends AbstractCommonCommand<Map<String,Object>> {
vocation.put("qsrqValue",qsrqValue);
vocation.put("yjzdValue",yjzdValue);
vocation.put("ljcrglyfslwzValue",ljcrglyfslwzValue);
if (!"".equals(lsgldw) && !"".equals(ljcrglyfslwzValue) && "0".equals(lsgldw)){
if (!"".equals(lsgldw) && !"".equals(ljcrglyfslwzValue) && "0".equals(lsgldw) && !"0".equals(jgsc)){
//当累计单位为年时
vocation.put("ljcrglyfslwzValue",Math.round(Double.valueOf(ljcrglyfslwzValue)*12));
}
vocation.put("zyzValue",getUserIds(vocation));
if ("0".equals(jgsc)){
//起算日期与当前日期间隔不取
vocation.put("ljcrglyfslwzValue","0");
}
// vocation.put("zyzValue",getUserIds(vocation));
}
log.debug("VocationCmd params: [{}]",params);
String edfffs = Util.null2String(vocationList.get(0).get("edfffs"));
@ -107,8 +113,7 @@ public class VocationCmd extends AbstractCommonCommand<Map<String,Object>> {
String edyj = Util.null2String(vocation.get("edyj"));
if (edyj.equals("3") || edyj.equals("4")){
String zyz = Util.null2String(vocation.get("zyz"));
zyz = zyz.replace("","and");
zyz = zyz.replace("","or");
zyz = Utils.converSQL(zyz);
List<Map<String,Object>> dataList = DbTools.getSqlToList(zyz);
userIds = dataList.stream().map(e->Util.null2String(e.get("id"))).collect(Collectors.toList());
}

@ -64,6 +64,8 @@ public class ByIntervalPayMentWay implements HolidayGenerationWay{
String wscl = Util.null2String(vocationList.get(0).get("wscl"));
//首次获得额度控制生效日期
String schdedkzsxrq = Util.null2String(vocationList.get(0).get("schdedkzsxrq"));
//间隔时长算法
String jgscsf = Util.null2String(vocationList.get(0).get("jgsc"));
if ("".equals(qsrq)){
return Maps.newHashMap();
@ -143,6 +145,11 @@ public class ByIntervalPayMentWay implements HolidayGenerationWay{
int betweenYear = DateUtil.getBetWeenYears(qsrq,releaseDate.split(" ")[0]);
allMonths = Double.valueOf(ljcrglyfslwz).intValue();
int intervalYear = allMonths / 12+betweenYear;
if (jgscsf.equals("2")){
//直接取工龄
intervalYear = allMonths / 12;
}
Map<String, Object> vocationMap = VocationCommonUtil.getVocationMap(vocationList, intervalYear, yjzd,userId);
double edktsc = vocationMap.size()>0?Double.valueOf(vocationMap.get("edktsc").toString()):0;
int days = 0;
@ -168,6 +175,9 @@ public class ByIntervalPayMentWay implements HolidayGenerationWay{
betweenMonth = DateUtil.getBetWeenMonths(qsrq,sxrq);
allMonths = betweenMonth+Double.valueOf(ljcrglyfslwz).intValue();
if (jgscsf.equals("2")){
allMonths = Double.valueOf(ljcrglyfslwz).intValue();
}
Map<String, Object> vocationMap = VocationCommonUtil.getVocationMap(vocationList, allMonths, yjzd,userId);
int days = DateUtil.getBetWeenDays(sxrq,releaseDate.split(" ")[0])+1;
if (days <0){
@ -188,6 +198,9 @@ public class ByIntervalPayMentWay implements HolidayGenerationWay{
betweenMonth = DateUtil.getBetWeenMonths(qsrq,sxrq);
allMonths = betweenMonth+Double.valueOf(ljcrglyfslwz).intValue();
if (jgscsf.equals("2")){
allMonths = Double.valueOf(ljcrglyfslwz).intValue();
}
Map<String, Object> vocationMap = VocationCommonUtil.getVocationMap(vocationList, allMonths, yjzd,userId);
double edktsc = vocationMap.size()>0?Double.valueOf(vocationMap.get("edktsc").toString()):0;
@ -199,7 +212,7 @@ public class ByIntervalPayMentWay implements HolidayGenerationWay{
restTime = VocationCommonUtil.computeRestDays(days, monthDays, edktsc, wscl);
} else if (edyxq.equals(StartingUnitEnum.NATURAL_WEEK.getKey())){
//自然周
//自然周
int dayOfWeek = TimeUtil.getDayOfWeek(releaseDate);
if (dayOfWeek == 0){
dayOfWeek = 7;
@ -216,6 +229,9 @@ public class ByIntervalPayMentWay implements HolidayGenerationWay{
betweenDays = 0;
}
allWorkDays = Double.valueOf(ljcrglyfslwz).intValue()*30+betweenDays;
if (jgscsf.equals("2")){
allWorkDays = Double.valueOf(ljcrglyfslwz).intValue()*30;
}
Map<String, Object> vocationMap = VocationCommonUtil.getVocationMap(vocationList, allWorkDays/7, yjzd,userId);
double edktsc = vocationMap.size()>0?Double.valueOf(vocationMap.get("edktsc").toString()):0;
@ -243,6 +259,9 @@ public class ByIntervalPayMentWay implements HolidayGenerationWay{
betweenDays=0;
}
allWorkDays = Double.valueOf(ljcrglyfslwz).intValue()*30+betweenDays;
if (jgscsf.equals("2")){
allWorkDays = Double.valueOf(ljcrglyfslwz).intValue()*30;
}
Map<String, Object> vocationMap = VocationCommonUtil.getVocationMap(vocationList, allWorkDays/7, yjzd,userId);
int days = DateUtil.getBetWeenDays(sxrq,releaseDate.split(" ")[0])+1;
if (days <0){
@ -256,6 +275,9 @@ public class ByIntervalPayMentWay implements HolidayGenerationWay{
//自然天
betweenDays = DateUtil.getBetWeenDays(qsrq,sxrq)+1;
allWorkDays = Double.valueOf(ljcrglyfslwz).intValue()*30+betweenDays;
if (jgscsf.equals("2")){
allWorkDays = Double.valueOf(ljcrglyfslwz).intValue()*30;
}
Map<String, Object> vocationMap = VocationCommonUtil.getVocationMap(vocationList, allWorkDays, yjzd,userId);
restTime = vocationMap.size()>0?Double.valueOf(vocationMap.get("edktsc").toString()):0;
}
@ -292,6 +314,8 @@ public class ByIntervalPayMentWay implements HolidayGenerationWay{
int dqtqffts = Integer.valueOf(Util.null2String(vocationList.get(0).get("dqtqffts")));
//执行发放的时间点
String ffdtffsj = Util.null2String(vocationList.get(0).get("ffdtffsj"));
//间隔时长算法
String jgscsf = Util.null2String(vocationList.get(0).get("jgsc"));
int seniority = "".equals(ljcrglyfslwz)?0:Double.valueOf(ljcrglyfslwz).intValue();
@ -319,14 +343,29 @@ public class ByIntervalPayMentWay implements HolidayGenerationWay{
endYearMonth = endYearMonth+seniority;
int beginYear = beginYearMonth/12;
int endYear = endYearMonth/12;
Map<String,Object> beginYearmap = VocationCommonUtil.getVocationMap(vocationList, beginYear, yjzd,userId);
Map<String,Object> endYearmap = VocationCommonUtil.getVocationMap(vocationList, endYear, yjzd,userId);
double beginEdktsc = Double.valueOf(beginYearmap.get("edktsc") == null? "0" :Util.null2String(beginYearmap.get("edktsc")));
double endEdktsc = Double.valueOf(endYearmap.get("edktsc") == null? "0" :Util.null2String(endYearmap.get("edktsc")));
//残年分割日期
String divideTime = DateUtil.beforeMonth(qsrq,seniority);
divideTime = sxrq.split("-")[0]+"-"+divideTime.split("-")[1]+"-"+divideTime.split("-")[2];
if (jgscsf.equals("2")){
//直接取工龄字段
beginYear = seniority/12;
endYear = beginYear+1;
//分割日期
int month = DateUtil.getBetWeenMonths(qsrq,sxrq);
if (month < 0){
month = 0;
}
int historySeniority = seniority-month;
divideTime = DateUtil.beforeMonth(qsrq,historySeniority);
divideTime = sxrq.split("-")[0]+"-"+divideTime.split("-")[1]+"-"+divideTime.split("-")[2];
}
Map<String,Object> beginYearmap = VocationCommonUtil.getVocationMap(vocationList, beginYear, yjzd,userId);
Map<String,Object> endYearmap = VocationCommonUtil.getVocationMap(vocationList, endYear, yjzd,userId);
double beginEdktsc = Double.valueOf(beginYearmap.get("edktsc") == null? "0" :Util.null2String(beginYearmap.get("edktsc")));
double endEdktsc = Double.valueOf(endYearmap.get("edktsc") == null? "0" :Util.null2String(endYearmap.get("edktsc")));
//当前后额定可休时长一样时,代表没有残年情况
if (beginEdktsc == endEdktsc){
@ -381,6 +420,10 @@ public class ByIntervalPayMentWay implements HolidayGenerationWay{
}
beginYearMonth = beginYearMonth+seniority;
int beginYear = beginYearMonth/12;
if (jgscsf.equals("2")){
//直接取工龄字段
beginYear = seniority/12;
}
Map<String,Object> beginYearmap = VocationCommonUtil.getVocationMap(vocationList, beginYear, yjzd,userId);
double beginEdktsc = Double.valueOf(beginYearmap.get("edktsc") == null? "0" :Util.null2String(beginYearmap.get("edktsc")));
int days = 0;

@ -65,6 +65,8 @@ public class BySchedulePaymentWay implements HolidayGenerationWay{
String wscl = Util.null2String(vocationList.get(0).get("wscl"));
//首次获得额度控制生效日期
String schdedkzsxrq = Util.null2String(vocationList.get(0).get("schdedkzsxrq"));
//间隔时长算法
String jgscsf = Util.null2String(vocationList.get(0).get("jgsc"));
if ("".equals(qsrq)){
return Maps.newHashMap();
@ -159,6 +161,9 @@ public class BySchedulePaymentWay implements HolidayGenerationWay{
}
}else if (edyxq.equals(StartingUnitEnum.STARTING_YEAR.getKey())){
int betweenYear = DateUtil.getBetWeenYears(qsrq,releaseDate.split(" ")[0]);
if (jgscsf.equals("2")){
betweenYear = Double.valueOf(ljcrglyfslwz).intValue() / 12;
}
Map<String,Object> vocationMap = VocationCommonUtil.getVocationMap(vocationList,betweenYear,yjzd,userId);
int occurMonths = DateUtil.getTime(releaseDate).getMonthValue();
int StartMonths = DateUtil.getTime(qsrq).getMonthValue();
@ -210,6 +215,8 @@ public class BySchedulePaymentWay implements HolidayGenerationWay{
int dqtqffts = Integer.valueOf(Util.null2String(vocationList.get(0).get("dqtqffts")));
//执行发放的时间点
String ffdtffsj = Util.null2String(vocationList.get(0).get("ffdtffsj"));
//间隔时长算法
String jgscsf = Util.null2String(vocationList.get(0).get("jgsc"));
int seniority = "".equals(ljcrglyfslwz)?0:Double.valueOf(ljcrglyfslwz).intValue();
@ -234,16 +241,32 @@ public class BySchedulePaymentWay implements HolidayGenerationWay{
endYearMonth = endYearMonth+seniority;
int beginYear = beginYearMonth/12;
int endYear = endYearMonth/12;
int endYearRemainder = endYearMonth%12;
Map<String,Object> beginYearmap = VocationCommonUtil.getVocationMap(vocationList, beginYear, yjzd,userId);
Map<String,Object> endYearmap = VocationCommonUtil.getVocationMap(vocationList, endYear, yjzd,userId);
double beginEdktsc = Double.valueOf(beginYearmap.get("edktsc") == null? "0" :Util.null2String(beginYearmap.get("edktsc")));
double endEdktsc = Double.valueOf(endYearmap.get("edktsc") == null? "0" :Util.null2String(endYearmap.get("edktsc")));
//残年分割日期
String divideTime = DateUtil.beforeMonth(qsrq,seniority);
divideTime = sxrq.split("-")[0]+"-"+divideTime.split("-")[1]+"-"+divideTime.split("-")[2];
divideTime = DateUtil.nextMonth(divideTime,1,DateUtil.yyyyMM)+"-01";
if (jgscsf.equals("2")){
//直接取工龄字段
beginYear = seniority/12;
endYear = beginYear+1;
//分割日期
int month = DateUtil.getBetWeenMonths(qsrq,sxrq);
if (month < 0){
month = 0;
}
int historySeniority = seniority-month;
divideTime = DateUtil.beforeMonth(qsrq,historySeniority);
divideTime = sxrq.split("-")[0]+"-"+divideTime.split("-")[1]+"-"+divideTime.split("-")[2];
}
Map<String,Object> beginYearmap = VocationCommonUtil.getVocationMap(vocationList, beginYear, yjzd,userId);
Map<String,Object> endYearmap = VocationCommonUtil.getVocationMap(vocationList, endYear, yjzd,userId);
double beginEdktsc = Double.valueOf(beginYearmap.get("edktsc") == null? "0" :Util.null2String(beginYearmap.get("edktsc")));
double endEdktsc = Double.valueOf(endYearmap.get("edktsc") == null? "0" :Util.null2String(endYearmap.get("edktsc")));
int divideTimeMonths = DateUtil.getTime(divideTime).getMonthValue();
if (beginEdktsc == endEdktsc){
@ -292,6 +315,10 @@ public class BySchedulePaymentWay implements HolidayGenerationWay{
}
beginYearMonth = beginYearMonth+seniority;
int beginYear = beginYearMonth/12;
if (jgscsf.equals("2")){
//直接取工龄字段
beginYear = seniority/12;
}
Map<String,Object> beginYearmap = VocationCommonUtil.getVocationMap(vocationList, beginYear, yjzd,userId);
restTime = getRestTime(releaseDateMonths,beginYearmap);
}

@ -54,10 +54,6 @@ public class SinglePaymentInFullWay implements HolidayGenerationWay {
String dzqsrq = Util.null2String(vocationList.get(0).get("dzqsrq"));
//分割日期
String fgrq = Util.null2String(vocationList.get(0).get("fgrq"));
//提前执行发放操作的天数
String dqtqffts = Util.null2String(vocationList.get(0).get("dqtqffts"));
//执行发放的时间点
String ffdtffsj = Util.null2String(vocationList.get(0).get("ffdtffsj"));
//入职当期额度按比例折算
String rzdqedablzs = Util.null2String(vocationList.get(0).get("rzdqedablzs"));
//首次获得额度按比例折算
@ -70,6 +66,8 @@ public class SinglePaymentInFullWay implements HolidayGenerationWay {
String wscl = Util.null2String(vocationList.get(0).get("wscl"));
//首次获得额度控制生效日期
String schdedkzsxrq = Util.null2String(vocationList.get(0).get("schdedkzsxrq"));
//间隔时长算法
String jgscsf = Util.null2String(vocationList.get(0).get("jgsc"));
if ("".equals(qsrq)){
return Maps.newHashMap();
@ -128,11 +126,6 @@ public class SinglePaymentInFullWay implements HolidayGenerationWay {
}
insertHoliDayParam.put("sxrq", divideTime);
// dataList = VocationCommonUtil.ifexist("uf_jcl_kq_jqye", insertHoliDayParam);
// //已存在数据且不覆盖
// if (dataList.size()>0 && !"1".equals(cover)) {
// return insertHoliDayParam;
// }
}
insertHoliDayParam.put("ktsc", restTime);
} else if (allMonths >= 12 && edyxq.equals(StartingUnitEnum.NATURAL_YEAR.getKey())) {
@ -156,6 +149,9 @@ public class SinglePaymentInFullWay implements HolidayGenerationWay {
//起算年
allMonths = Double.valueOf(ljcrglyfslwz).intValue();
int intervalYear = allMonths / 12+betweenYear;
if (jgscsf.equals("2")){
intervalYear = allMonths / 12;
}
Map<String, Object> vocationMap = VocationCommonUtil.getVocationMap(vocationList, intervalYear, yjzd,userId);
restTime = vocationMap.size()>0?Double.valueOf(vocationMap.get("edktsc").toString()):0;
} else if (edyxq.equals(StartingUnitEnum.NATURAL_MONTH.getKey())){
@ -165,6 +161,10 @@ public class SinglePaymentInFullWay implements HolidayGenerationWay {
betweenMonth = 0;
}
allMonths = betweenMonth+Double.valueOf(ljcrglyfslwz).intValue();
if (jgscsf.equals("2")){
allMonths = Double.valueOf(ljcrglyfslwz).intValue();
}
Map<String, Object> vocationMap = VocationCommonUtil.getVocationMap(vocationList, allMonths, yjzd,userId);
restTime = vocationMap.size()>0?Double.valueOf(vocationMap.get("edktsc").toString()):0;
@ -173,6 +173,9 @@ public class SinglePaymentInFullWay implements HolidayGenerationWay {
//起算月
betweenMonth = DateUtil.getBetWeenMonths(qsrq,sxrq);
allMonths = betweenMonth+Double.valueOf(ljcrglyfslwz).intValue();
if (jgscsf.equals("2")){
allMonths = Double.valueOf(ljcrglyfslwz).intValue();
}
Map<String, Object> vocationMap = VocationCommonUtil.getVocationMap(vocationList, allMonths, yjzd,userId);
restTime = vocationMap.size()>0?Double.valueOf(vocationMap.get("edktsc").toString()):0;
@ -183,6 +186,9 @@ public class SinglePaymentInFullWay implements HolidayGenerationWay {
betweenDays = 0;
}
allWorkDays = Double.valueOf(ljcrglyfslwz).intValue()*30+betweenDays;
if (jgscsf.equals("2")){
allWorkDays = Double.valueOf(ljcrglyfslwz).intValue()*30;
}
Map<String, Object> vocationMap = VocationCommonUtil.getVocationMap(vocationList, allWorkDays/7, yjzd,userId);
restTime = vocationMap.size()>0?Double.valueOf(vocationMap.get("edktsc").toString()):0;
@ -193,6 +199,9 @@ public class SinglePaymentInFullWay implements HolidayGenerationWay {
betweenDays=0;
}
allWorkDays = Double.valueOf(ljcrglyfslwz).intValue()*30+betweenDays;
if (jgscsf.equals("2")){
allWorkDays = Double.valueOf(ljcrglyfslwz).intValue()*30;
}
Map<String, Object> vocationMap = VocationCommonUtil.getVocationMap(vocationList, allWorkDays/7, yjzd,userId);
restTime = vocationMap.size()>0?Double.valueOf(vocationMap.get("edktsc").toString()):0;
@ -200,6 +209,9 @@ public class SinglePaymentInFullWay implements HolidayGenerationWay {
//自然天
betweenDays = DateUtil.getBetWeenDays(qsrq,sxrq);
allWorkDays = Double.valueOf(ljcrglyfslwz).intValue()*30+betweenDays;
if (jgscsf.equals("2")){
allWorkDays = Double.valueOf(ljcrglyfslwz).intValue()*30;
}
Map<String, Object> vocationMap = VocationCommonUtil.getVocationMap(vocationList, allWorkDays, yjzd,userId);
restTime = vocationMap.size()>0?Double.valueOf(vocationMap.get("edktsc").toString()):0;
}
@ -233,6 +245,8 @@ public class SinglePaymentInFullWay implements HolidayGenerationWay {
String yjzd = Util.null2String(vocationList.get(0).get("yjzdValue"));
//尾数处理
String wscl = Util.null2String(vocationList.get(0).get("wscl"));
//间隔时长算法
String jgscsf = Util.null2String(vocationList.get(0).get("jgsc"));
int seniority = "".equals(ljcrglyfslwz)?0:Double.valueOf(ljcrglyfslwz).intValue();
@ -248,15 +262,32 @@ public class SinglePaymentInFullWay implements HolidayGenerationWay {
endYearMonth = endYearMonth+seniority;
int beginYear = beginYearMonth/12;
int endYear = endYearMonth/12;
int endYearRemainder = endYearMonth%12;
//残年分割日期
String divideTime = DateUtil.beforeMonth(qsrq,seniority);
divideTime = sxrq.split("-")[0]+"-"+divideTime.split("-")[1]+"-"+divideTime.split("-")[2];
if (jgscsf.equals("2")){
//直接取工龄字段
beginYear = seniority/12;
endYear = beginYear+1;
//分割日期
int month = DateUtil.getBetWeenMonths(qsrq,sxrq);
if (month < 0){
month = 0;
}
int historySeniority = seniority-month<0?0:seniority-month;
divideTime = DateUtil.beforeMonth(qsrq,historySeniority);
divideTime = sxrq.split("-")[0]+"-"+divideTime.split("-")[1]+"-"+divideTime.split("-")[2];
}
Map<String,Object> beginYearmap = VocationCommonUtil.getVocationMap(vocationList, beginYear, yjzd,userId);
Map<String,Object> endYearmap = VocationCommonUtil.getVocationMap(vocationList, endYear, yjzd,userId);
double beginEdktsc = Double.valueOf(beginYearmap.get("edktsc") == null? "0" :Util.null2String(beginYearmap.get("edktsc")));
double endEdktsc = Double.valueOf(endYearmap.get("edktsc") == null? "0" :Util.null2String(endYearmap.get("edktsc")));
//残年分割日期
String divideTime = DateUtil.beforeMonth(qsrq,seniority);
divideTime = sxrq.split("-")[0]+"-"+divideTime.split("-")[1]+"-"+divideTime.split("-")[2];
int yearDays = DateUtil.getDays(sxrq, Calendar.DAY_OF_YEAR);
if (beginEdktsc == endEdktsc){
@ -294,12 +325,19 @@ public class SinglePaymentInFullWay implements HolidayGenerationWay {
}else {
//不折算
int beginYear = 0;
if (jgscsf.equals("2")){
//直接取工龄字段
beginYear = seniority/12;
}else {
//起算日期与当前日期间隔+工龄字段
int beginYearMonth = DateUtil.getBetWeenMonths(qsrq,sxrq);
if (beginYearMonth < 0){
beginYearMonth = 0;
}
beginYearMonth = beginYearMonth+seniority;
int beginYear = beginYearMonth/12;
beginYear = beginYearMonth/12;
}
Map<String,Object> beginYearmap = VocationCommonUtil.getVocationMap(vocationList, beginYear, yjzd,userId);
double beginEdktsc = Double.valueOf(beginYearmap.get("edktsc") == null? "0" :Util.null2String(beginYearmap.get("edktsc")));
restTime=beginEdktsc;

@ -5,7 +5,8 @@ import com.engine.jucailinkq.attendance.attendanceplan.service.impl.AttendancePl
import com.engine.jucailinkq.attendance.vacation.cmd.HandleOverdueVocationCmd;
import com.engine.jucailinkq.attendance.vacation.cmd.VocationCmd;
import com.engine.jucailinkq.attendance.vacation.service.VocationService;
import com.engine.jucailinkq.common.cmd.GetPersonDateBySuitOrganzation;
import com.engine.jucailinkq.common.cmd.GetPersonVocationBySuitOrganzation;
import com.engine.jucailinkq.common.util.CommonUtil;
import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools;
@ -31,11 +32,11 @@ public class VocationServiceImpl extends Service implements VocationService {
String modeId = Util.null2String(params.get("modeId"));
Map<String,Object> param = Maps.newHashMap();
param.put("modeId",modeId);
Map<String,Object> result = commandExecutor.execute(new GetPersonDateBySuitOrganzation(param));
Map<String,Object> result = commandExecutor.execute(new GetPersonVocationBySuitOrganzation(param));
String sql = "select a.id userid,a.*,b.* from hrmresource a left join cus_fielddata b on a.id=b.id where a.id in (";
String queryDepartEmployeeSql = "select resourceid ,changedate,type_n from HRMSTATUSHISTORY where type_n = 5 or type_n = 7";
String queryDepartEmployeeSql = "select resourceid ,changedate,type_n from HRMSTATUSHISTORY where type_n = 5 or type_n = 7 and changedate <> '' and changedate is not null";
//获取离职日期
List<Map<String,Object>> departEmployeeList = DbTools.getSqlToList(queryDepartEmployeeSql);
Map<String,Object> departEmployeeMap = CommonUtil.getDepartEmployeeMap(departEmployeeList);

@ -3,6 +3,7 @@ package com.engine.jucailinkq.attendance.workflow.action.askforleave;
import com.engine.common.util.ServiceUtil;
import com.engine.jucailinkq.attendance.component.AttendanceCycle.service.AttendanceCycleService;
import com.engine.jucailinkq.attendance.component.AttendanceCycle.service.impl.AttendanceCycleServiceImpl;
import com.engine.jucailinkq.attendance.workflow.enums.WorkFlowTypeEnum;
import com.engine.jucailinkq.common.util.CommonUtil;
import com.engine.jucailinkq.common.util.DateUtil;
import com.google.common.collect.Maps;
@ -28,10 +29,8 @@ public class BatchAskForLeaveWorkFlowApproveAction implements Action {
public String execute(RequestInfo requestInfo) {
String requestid = requestInfo.getRequestid();
log.debug("**********BatchAskForLeaveWorkFlowApproveAction import data start**********");
// 流程表单主表数据
HashMap<String,String> mainTableData = CommonUtil.getMainTableInfo(requestInfo);
// 流程表单明细表数据
List<Map<String, String>> detailTableData = CommonUtil.getDetailTableInfo(requestInfo,0);
List<Map<String, String>> detailTableData = CommonUtil.getDetailTableInfo(requestInfo,0,WorkFlowTypeEnum.ASKFORLEAVE);
log.info("detailTableData : [{}]", detailTableData);
Map<String,List<Map<String, String>>> detailGroupMap = detailTableData.stream().collect(Collectors.groupingBy(e-> Util.null2String(e.get("qjr"))));

@ -1,5 +1,6 @@
package com.engine.jucailinkq.attendance.workflow.action.askforleave;
import com.engine.jucailinkq.attendance.workflow.enums.WorkFlowTypeEnum;
import com.engine.jucailinkq.common.util.CommonUtil;
import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools;
@ -30,14 +31,14 @@ public class BatchAskForLeaveWorkFlowArchivingAction implements Action {
public String execute(RequestInfo requestInfo) {
String requestid = requestInfo.getRequestid();
// 流程表单主表数据
HashMap<String,String> mainTableData = CommonUtil.getMainTableInfo(requestInfo);
HashMap<String,String> mainTableData = CommonUtil.getMainTableInfo(requestInfo, WorkFlowTypeEnum.ASKFORLEAVE);
log.info("mainTableData : [{}]",mainTableData);
// 流程表单明细表1数据
List<Map<String, String>> detailTableData = CommonUtil.getDetailTableInfo(requestInfo,0);
List<Map<String, String>> detailTableData = CommonUtil.getDetailTableInfo(requestInfo,0,WorkFlowTypeEnum.ASKFORLEAVE);
log.info("detailTableData : [{}]",detailTableData);
//流程表单明细表2数据
List<Map<String, String>> detailTable2 = CommonUtil.getDetailTableInfo(requestInfo,1);
List<Map<String, String>> detailTable2 = CommonUtil.getDetailTableInfo(requestInfo,1,WorkFlowTypeEnum.ASKFORLEAVE);
log.info("detailTable2Data : [{}]",detailTable2);
//第一笔开始时间

@ -1,5 +1,6 @@
package com.engine.jucailinkq.attendance.workflow.action.askforleave;
import com.engine.jucailinkq.attendance.workflow.enums.WorkFlowTypeEnum;
import com.engine.jucailinkq.common.util.CommonUtil;
import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools;
@ -37,13 +38,13 @@ public class BatchAskForLeaveWorkFlowBackAction implements Action {
String jlzt = Util.null2String(qjllData.get("jlzt"));
// 流程表单主表数据
HashMap<String,String> mainTableData = CommonUtil.getMainTableInfo(requestInfo);
HashMap<String,String> mainTableData = CommonUtil.getMainTableInfo(requestInfo, WorkFlowTypeEnum.ASKFORLEAVE);
log.info("mainTableData : [{}]",mainTableData);
// 流程表单明细表1数据
List<Map<String, String>> detailTableData = CommonUtil.getDetailTableInfo(requestInfo,0);
List<Map<String, String>> detailTableData = CommonUtil.getDetailTableInfo(requestInfo,0,WorkFlowTypeEnum.ASKFORLEAVE);
log.info("detailTableData : [{}]",detailTableData);
String detail1TableName = requestInfo.getDetailTableInfo().getDetailTable()[0].getTableDBName();
String detail1TableName = CommonUtil.getDetailTableInfoTableName(requestInfo.getDetailTableInfo().getDetailTable()[1].getTableDBName(),1,WorkFlowTypeEnum.ASKFORLEAVE);
log.info("detail1ableName : [{}]", detail1TableName);
//流程表单明细表2数据

@ -2,6 +2,7 @@ package com.engine.jucailinkq.attendance.workflow.action.askforleave;
import com.engine.jucailinkq.attendance.enums.AccountingUnitEnum;
import com.engine.jucailinkq.attendance.enums.AttendanceItemTypeEnum;
import com.engine.jucailinkq.attendance.workflow.enums.WorkFlowTypeEnum;
import com.engine.jucailinkq.common.util.CommonUtil;
import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools;
@ -34,13 +35,13 @@ public class BatchAskForLeaveWorkFlowSubmitAction implements Action {
log.info("billid : [{}]",billid);
try {
// 流程表单主表数据
HashMap<String, String> mainTableData = CommonUtil.getMainTableInfo(requestInfo);
HashMap<String, String> mainTableData = CommonUtil.getMainTableInfo(requestInfo, WorkFlowTypeEnum.ASKFORLEAVE);
log.info("mainTableData : [{}]", mainTableData);
// 流程表单明细表1数据
List<Map<String, String>> detailTableData = CommonUtil.getDetailTableInfo(requestInfo, 0);
List<Map<String, String>> detailTableData = CommonUtil.getDetailTableInfo(requestInfo, 0,WorkFlowTypeEnum.ASKFORLEAVE);
log.info("detailTableData : [{}]", detailTableData);
String detail2TableName = requestInfo.getDetailTableInfo().getDetailTable()[1].getTableDBName();
String detail2TableName = CommonUtil.getDetailTableInfoTableName(requestInfo.getDetailTableInfo().getDetailTable()[1].getTableDBName(),1,WorkFlowTypeEnum.ASKFORLEAVE);
log.info("detail2TableName : [{}]", detail2TableName);
//第一笔开始时间
String firstStartDate = detailTableData.get(0).get("ksrq");

@ -0,0 +1,94 @@
package com.engine.jucailinkq.attendance.workflow.action.askforleave;
import com.engine.common.util.ServiceUtil;
import com.engine.jucailinkq.attendance.attendanceplan.service.AttendancePlanService;
import com.engine.jucailinkq.attendance.attendanceplan.service.impl.AttendancePlanServiceImpl;
import com.engine.jucailinkq.attendance.vacation.cmd.VocationCmd;
import com.engine.jucailinkq.attendance.workflow.enums.WorkFlowTypeEnum;
import com.engine.jucailinkq.common.cmd.GetPersonVocationBySuitOrganzation;
import com.engine.jucailinkq.common.util.CommonUtil;
import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools;
import com.engine.jucailinkq.common.util.Utils;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import weaver.general.Util;
import weaver.interfaces.workflow.action.Action;
import weaver.soa.workflow.request.RequestInfo;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* action
*/
@Slf4j
public class GenerateWorkflowVocationAction implements Action {
@Override
public String execute(RequestInfo requestInfo) {
try {
log.info("**GenerateWorkflowVocationAction start***");
HashMap<String, String> mainTableData = CommonUtil.getMainTableInfo(requestInfo, WorkFlowTypeEnum.ASKFORLEAVE);
String qjry = mainTableData.get("xingm");
Map<String,String> formmodeIdMap = Utils.getFormmodeIdMap();
//假期额度模块id
String modeId = formmodeIdMap.get("uf_jcl_kq_jqed");
Map<String, Object> params = Maps.newHashMap();
params.put("modeId",modeId);
params.put("releaseDate",DateUtil.getCurrentDate());
params.put("cover","1");
CommonUtil.initExtensionClassHolder();
Map<String,Object> result = new GetPersonVocationBySuitOrganzation(params).execute(null);
String queryDepartEmployeeSql = "select resourceid ,changedate,type_n from HRMSTATUSHISTORY where type_n = 5 or type_n = 7 and resourceid=?";
//获取离职日期
List<Map<String,Object>> departEmployeeList = DbTools.getSqlToList(queryDepartEmployeeSql,qjry);
Map<String,Object> departEmployeeMap = CommonUtil.getDepartEmployeeMap(departEmployeeList);
String sql = "select a.id userid,a.*,b.* from hrmresource a left join cus_fielddata b on a.id=b.id where a.id =?";
List<Map<String,Object>> userList = DbTools.getSqlToListKeySmallLetter(sql,qjry);
log.info("GenerateWorkflowVocationAction : [{}]",result.get(qjry));
if (result.get(qjry) != null){
Map<String,String> vocationMap = (Map<String, String>)result.get(qjry);
Map<String,Object> paramMap = Maps.newHashMap();
paramMap.put("startDate", DateUtil.getCurrentDate());
paramMap.put("endDate","");
paramMap.put("resourceId",qjry);
AttendancePlanService basicsetService = ServiceUtil.getService(AttendancePlanServiceImpl.class);
Map<String,Object> dataMap = basicsetService.getAttendanceItemsByPerson(paramMap);
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)dataMap.get("data");
Map<String, Object> needGenerateVocationMap = Maps.newHashMap();
for (Map<String,Object> map : attendanceItems){
if (vocationMap.get(map.get("key")) != null){
needGenerateVocationMap.put(Util.null2String(map.get("key")),vocationMap.get(map.get("key")));
}
}
log.debug("VocationServiceImpl userId:{}, userList:{}",qjry,userList);
for (Map.Entry<String, Object> e:needGenerateVocationMap.entrySet()){
if (e.getValue() != null && ((List<Map<String,Object>>)e.getValue()).size() > 0){
Map<String,Object> vocationParam = Maps.newHashMap();
vocationParam.put("userId",qjry);
vocationParam.put("vocationList",e.getValue());
vocationParam.put("userList",userList);
vocationParam.put("releaseDate",params.get("releaseDate"));
vocationParam.put("cover",params.get("cover"));
vocationParam.put("leaveDate",departEmployeeMap.get(qjry));
new VocationCmd(vocationParam).execute(null);
}
}
}
log.info("**GenerateWorkflowVocationAction end***");
}catch (Exception e){
log.info("GenerateWorkflowVocationAction error :[{}]",e);
return Action.FAILURE_AND_CONTINUE;
}
return Action.SUCCESS;
}
}

@ -39,6 +39,8 @@ public class AskForLeaveWorkflowDataReset implements WorkFlowHandleTacis{
List<Map<String, Object>> detailTableData = null;
List<Map<String, Object>> detailTable2 = null;
String detail1TableName = CommonUtil.getDetailTableInfoTableName(tableName+"_dt1",0,WorkFlowTypeEnum.ASKFORLEAVE);
String detail2TableName = CommonUtil.getDetailTableInfoTableName(tableName+"_dt2",1,WorkFlowTypeEnum.ASKFORLEAVE);
if (operate.equals("dodelete")){
//删除流程
@ -48,19 +50,19 @@ public class AskForLeaveWorkflowDataReset implements WorkFlowHandleTacis{
String deletetabledata = deleteDataList.get(0).get("deletetabledata").toString();
Map<String, List<Map<String, Object>>> map = (Map<String, List<Map<String, Object>>>) JSONObject.parse(deletetabledata);
mainMap = keyToLowerMap(map.get(tableName).get(0));
detailTableData = keyToLowerList(map.get(tableName+"_dt1"));
detailTable2 = keyToLowerList(map.get(tableName+"_dt2"));
detailTableData = keyToLowerList(map.get(detail1TableName));
detailTable2 = keyToLowerList(map.get(detail2TableName));
}
}else {
String sql = "select * from "+tableName+" where requestid=?";
mainMap = DbTools.getSqlToList(sql,requestId).get(0);
// 流程表单明细表1数据
sql = "select * from "+tableName+"_dt1 where mainid=?";
sql = "select * from "+detail1TableName+" where mainid=?";
detailTableData = DbTools.getSqlToList(sql,mainMap.get("id"));
//流程表单明细表2数据
sql = "select * from "+tableName+"_dt2 where mainid=?";
sql = "select * from "+detail2TableName+" where mainid=?";
detailTable2 = DbTools.getSqlToList(sql,mainMap.get("id"));
}
log.info("detailTableData : [{}]",detailTableData);
@ -139,7 +141,7 @@ public class AskForLeaveWorkflowDataReset implements WorkFlowHandleTacis{
}
}
//将明细表1数据清空
String delSql = "delete from " + tableName + "_dt1 where mainid=?";
String delSql = "delete from " + detail1TableName + " where mainid=?";
if (!DbTools.update(delSql, mainMap.get("id"))) {
//将明细表1数据清空
String message = "删除流程明细表1数据失败";
@ -147,7 +149,7 @@ public class AskForLeaveWorkflowDataReset implements WorkFlowHandleTacis{
}
//将明细表2数据清空
delSql = "delete from " + tableName + "_dt2 where mainid=?";
delSql = "delete from " + detail2TableName + " where mainid=?";
if (!DbTools.update(delSql, mainMap.get("id"))) {
//将明细表2数据清空
String message = "删除流程明细表2数据失败";

@ -0,0 +1,142 @@
package com.engine.jucailinkq.common.cmd;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import com.engine.jucailinkq.common.util.DbTools;
import com.engine.jucailinkq.common.util.ExtensionClassHolder;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
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;
public class GetAllPersonBySuitOrganzationCmd extends AbstractCommonCommand<Map<String, Object>> {
public GetAllPersonBySuitOrganzationCmd(Map<String, Object> params) {
this.params = params;
}
@Override
public BizLogContext getLogContext() {
return null;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
String modeId = Util.null2String(params.get("modeId"));
String sql = "select dxlx,dataid,dx,aqjb from uf_jcl_syzz where modeid=?";
List<Map<String, Object>> organizationList = DbTools.getSqlToList(sql, modeId);
Map<String,Object> resultMap = Maps.newHashMap();
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");
//人力资源id
Map<String, List<Map<String, String>>> personData = Maps.newHashMap();
//人员分组id
Map<String, List<Map<String, String>>> personOrganzationMap = Maps.newHashMap();
//部门id
Map<String, List<Map<String, String>>> departMentMap = Maps.newHashMap();
//分部id
Map<String, List<Map<String, String>>> subCompanyMap = Maps.newHashMap();
if (personOrganizationList != null) {
for (Map<String, Object> personOrganization : personOrganizationList) {
String dx = Util.null2String(personOrganization.get("dx"));
String userId = dx.split("-")[0];
String dataId = Util.null2String(personOrganization.get("dataid"));
List<Map<String, String>> dataList2 = personData.get(userId);
if (dataList2 == null) {
dataList2 = Lists.newArrayList();
personData.put(userId, dataList2);
}
if (dataList2.stream().filter(e -> e.get("dataid").equals(dataId)).collect(Collectors.toList()).size() == 0) {
Map<String, String> dataMap = Maps.newHashMap();
dataMap.put("dataid", dataId);
dataMap.put("priority", "0");
dataMap.put("seclevel",Util.null2String(personOrganization.get("aqjb")));
dataList2.add(dataMap);
}
}
}
if (personGroupOrganizationList != null){
for (Map<String, Object> personGroupOrganization : personGroupOrganizationList) {
String dx = Util.null2String(personGroupOrganization.get("dx"));
String personGroupId = dx.split("-")[0];
String dataId = Util.null2String(personGroupOrganization.get("dataid"));
List<Map<String, String>> dataList = personOrganzationMap.get(personGroupId);
if (dataList == null) {
dataList = Lists.newArrayList();
personOrganzationMap.put(personGroupId, dataList);
}
if (dataList.stream().filter(e -> e.get("dataid").equals(dataId)).collect(Collectors.toList()).size() == 0) {
Map<String, String> dataMap = Maps.newHashMap();
dataMap.put("dataid", dataId);
dataMap.put("priority", "0");
dataMap.put("seclevel",Util.null2String(personGroupOrganization.get("aqjb")));
dataList.add(dataMap);
}
}
}
if (departmentOrganizationList != null) {
for (Map<String, Object> departmentOrganization : departmentOrganizationList) {
String dx = Util.null2String(departmentOrganization.get("dx"));
String departmentId = dx.split("-")[0];
String dataId = Util.null2String(departmentOrganization.get("dataid"));
List<Map<String, String>> dataList = departMentMap.get(departmentId);
if (dataList == null) {
dataList = Lists.newArrayList();
departMentMap.put(departmentId, dataList);
}
if (dataList.stream().filter(e -> e.get("dataid").equals(dataId)).collect(Collectors.toList()).size() == 0) {
Map<String, String> dataMap = Maps.newHashMap();
dataMap.put("dataid", dataId);
dataMap.put("priority", "2");
dataMap.put("seclevel",Util.null2String(departmentOrganization.get("aqjb")));
dataList.add(dataMap);
}
}
}
if (subCompanyOrganizationList != null) {
for (Map<String, Object> subCompanyOrganization : subCompanyOrganizationList) {
String dx = Util.null2String(subCompanyOrganization.get("dx"));
String subCompanyId = dx.split("-")[0];
String dataId = Util.null2String(subCompanyOrganization.get("dataid"));
List<Map<String, String>> dataList = subCompanyMap.get(subCompanyId);
if (dataList == null) {
dataList = Lists.newArrayList();
subCompanyMap.put(subCompanyId, dataList);
}
if (dataList.stream().filter(e -> e.get("dataid").equals(dataId)).collect(Collectors.toList()).size() == 0) {
Map<String, String> dataMap = Maps.newHashMap();
dataMap.put("dataid", dataId);
dataMap.put("priority", "3");
dataMap.put("seclevel",Util.null2String(subCompanyOrganization.get("aqjb")));
dataList.add(dataMap);
}
}
}
resultMap.put("personData",personData);
resultMap.put("personOrganzationMap",personOrganzationMap);
resultMap.put("departMentMap",departMentMap);
resultMap.put("subCompanyMap",subCompanyMap);
return resultMap;
}
}

@ -7,6 +7,8 @@ import com.engine.jucailinkq.attendance.component.persongroup.commonutil.Persong
import com.engine.jucailinkq.attendance.enums.ApplicableOrganizationEnum;
import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools;
import com.engine.jucailinkq.common.util.ExtensionClassHolder;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import weaver.general.Util;
@ -17,7 +19,7 @@ import java.util.Set;
import java.util.stream.Collectors;
/**
* modeid
* modeid
*/
public class GetPersonBySuitOrganzationCmd extends AbstractCommonCommand<Map<String,Object>> {
@ -35,15 +37,18 @@ public class GetPersonBySuitOrganzationCmd extends AbstractCommonCommand<Map<Str
String sql = "select dxlx,aqjb,dataid,dx from uf_jcl_syzz where modeid=? order by id desc";
//适用组织所有值集合
List<Map<String,Object>> organzationList = DbTools.getSqlToList(sql,modeId);
Map<String,Object> resultMap = Maps.newHashMap();
//人力资源id假别规则id
//人力资源id
Map<String,Object> personMap = Maps.newHashMap();
//人员分组id假别规则id
//人员分组id
Map<String,Object> personOrganzationMap = Maps.newHashMap();
//部门id假别规则id
//部门id
Map<String,Object> departMentMap = Maps.newHashMap();
//分部id假别规则id
//分部id
Map<String,Object> subCompanyMap = Maps.newHashMap();
//人员所在的所有数据id
Map<String,List<Map<String,String>>> personAllData = Maps.newHashMap();
for (Map<String,Object> organzation:organzationList){
@ -56,6 +61,17 @@ public class GetPersonBySuitOrganzationCmd extends AbstractCommonCommand<Map<Str
}
if (ApplicableOrganizationEnum.PERSONNEL.getKey().equals(dxlx)){
personMap.put(dx,dataid);
List<Map<String,String>> dataList = personAllData.get(dx);
if (dataList==null){
dataList = Lists.newArrayList();
personAllData.put(dx,dataList);
}
if (dataList.stream().filter(e->e.get("dataid").equals(dataid)).collect(Collectors.toList()).size() == 0){
Map<String,String> dataMap = Maps.newHashMap();
dataMap.put("dataid",dataid);
dataMap.put("priority","0");
dataList.add(dataMap);
}
}else if (ApplicableOrganizationEnum.PERSONNEL_GROUP.getKey().equals(dxlx)){
personOrganzationMap.put(dx,dataid);
}else if (ApplicableOrganizationEnum.DEPARTMENT.getKey().equals(dxlx)){
@ -68,12 +84,38 @@ public class GetPersonBySuitOrganzationCmd extends AbstractCommonCommand<Map<Str
sql = "select a.list_type,b.mainid,b.empid,b.filters,b.bdate,b.edate,b.sqltj from uf_ryqz a left join uf_ryqz_dt1 b on a.id=b.mainid where a.id=?";
for (Map.Entry<String,Object> entrySet: personOrganzationMap.entrySet()){
List<Map<String,Object>> personnelGrouping = DbTools.getSqlToList(sql,entrySet.getKey());
Set<String> userIds = PersongroupCommonUtil.getUserIdsByPersonnelGrouping(personnelGrouping, DateUtil.getCurrentDate());
for (String userId:userIds){
String dataid = entrySet.getValue().toString();
Map<String,Map<String,String>> userIdMap = PersongroupCommonUtil.getUserIdsByPersonnelGrouping(personnelGrouping);
for (Map.Entry<String,Map<String,String>> entry :userIdMap.entrySet()){
String userId = entry.getKey();
Map<String,String> map = entry.getValue();
if (personMap.get(userId) == null){
personMap.put(userId,entrySet.getValue());
personMap.put(userId,dataid);
}
List<Map<String,String>> dataList = personAllData.get(userId);
if (dataList==null){
dataList = Lists.newArrayList();
personAllData.put(userId,dataList);
}
if (dataList.stream().filter(e->e.get("dataid").equals(dataid)).collect(Collectors.toList()).size() == 0){
Map<String,String> dataMap = Maps.newHashMap();
dataMap.put("dataid",dataid);
dataMap.put("bdate",map.get("bdate"));
dataMap.put("edate",map.get("edate"));
dataMap.put("priority","1");
dataList.add(dataMap);
}else {
for (Map<String,String> dataMap:dataList){
if (dataMap.get("dataid").equals(dataid) && dataMap.get("bdate") != null){
dataMap.put("bdate",map.get("bdate"));
dataMap.put("edate",map.get("edate"));
dataMap.put("priority","1");
}
}
}
}
}
}
if (departMentMap.size() > 0){
@ -97,6 +139,20 @@ public class GetPersonBySuitOrganzationCmd extends AbstractCommonCommand<Map<Str
if (personMap.get(userMap.get("id").toString()) == null){
personMap.put(userMap.get("id").toString(),entrySet.getValue());
}
String userId = userMap.get("id").toString();
String dataid = entrySet.getValue().toString();
List<Map<String,String>> list = personAllData.get(userId);
if (list==null){
list = Lists.newArrayList();
personAllData.put(userId,list);
}
if (list.stream().filter(e->e.get("dataid").equals(dataid)).collect(Collectors.toList()).size() == 0){
Map<String,String> dataMap = Maps.newHashMap();
dataMap.put("dataid",dataid);
dataMap.put("priority","2");
list.add(dataMap);
}
}
}
}
@ -121,10 +177,28 @@ public class GetPersonBySuitOrganzationCmd extends AbstractCommonCommand<Map<Str
if (personMap.get(userMap.get("id").toString()) == null){
personMap.put(userMap.get("id").toString(),entrySet.getValue());
}
String userId = userMap.get("id").toString();
String dataid = entrySet.getValue().toString();
List<Map<String,String>> list = personAllData.get(userId);
if (list==null){
list = Lists.newArrayList();
personAllData.put(userId,list);
}
if (list.stream().filter(e->e.get("dataid").equals(dataid)).collect(Collectors.toList()).size() == 0){
Map<String,String> dataMap = Maps.newHashMap();
dataMap.put("dataid",dataid);
dataMap.put("priority","3");
list.add(dataMap);
}
}
}
}
resultMap.put("personMap",personMap);
resultMap.put("personAllData",personAllData);
resultMap.put("personOrganzationMap",personOrganzationMap);
resultMap.put("departMentMap",departMentMap);
resultMap.put("subCompanyMap",subCompanyMap);
return personMap;
return resultMap;
}
}

@ -6,6 +6,7 @@ import com.engine.common.entity.BizLogContext;
import com.engine.jucailinkq.common.util.DbTools;
import com.engine.core.interceptor.CommandContext;
import com.engine.jucailinkq.common.util.Utils;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j;
@ -21,14 +22,14 @@ import java.util.stream.Collectors;
* modeid
*/
@Slf4j
public class GetPersonDateBySuitOrganzation extends AbstractCommonCommand<Map<String,Object>> {
public class GetPersonVocationBySuitOrganzation extends AbstractCommonCommand<Map<String,Object>> {
@Override
public BizLogContext getLogContext() {
return null;
}
public GetPersonDateBySuitOrganzation(Map<String,Object> params){
public GetPersonVocationBySuitOrganzation(Map<String,Object> params){
this.params=params;
}
@ -55,9 +56,9 @@ public class GetPersonDateBySuitOrganzation extends AbstractCommonCommand<Map<St
Map<String,String> vacationMap = Maps.newHashMap();
for (Map<String,Object> vocation:vacationList){
vacationMap.put(vocation.get("dataid").toString(),vocation.get("jb").toString());
vocation.put("zyzValue",getUserIds(vocation));
}
Map<String,List<Map<String,Object>>> vacationGroupByDataIdMap = vacationList.stream().collect(Collectors.groupingBy(e->e.get("dataid").toString()));
@ -109,7 +110,8 @@ public class GetPersonDateBySuitOrganzation extends AbstractCommonCommand<Map<St
sql = sql+ " and departmentid in ("+String.join(",",departMentIds)+")";
}
if (subCompanyIds .size() >0 && departMentIds.size() > 0){
sql = sql+ " or subcompanyid1 in ("+String.join(",",subCompanyIds)+")";
sql = "select id,departmentid,subcompanyid1,seclevel from hrmresource where status <> '5' and status <> '4' and status <> '7' ";
sql = sql+ " and (departmentid in ("+String.join(",",departMentIds)+")"+ " or subcompanyid1 in ("+String.join(",",subCompanyIds)+"))";
}else if (subCompanyIds .size() >0 && departMentIds.size() == 0){
sql = sql+ " and subcompanyid1 in ("+String.join(",",subCompanyIds)+")";
}
@ -282,4 +284,16 @@ public class GetPersonDateBySuitOrganzation extends AbstractCommonCommand<Map<St
return personGroupUserIds;
}
public List<String> getUserIds(Map<String,Object> vocation){
List<String> userIds = Lists.newArrayList();
String edyj = Util.null2String(vocation.get("edyj"));
if (edyj.equals("3") || edyj.equals("4")){
String zyz = Util.null2String(vocation.get("zyz"));
zyz = Utils.converSQL(zyz);
List<Map<String,Object>> dataList = DbTools.getSqlToList(zyz);
userIds = dataList.stream().map(e->Util.null2String(e.get("id"))).collect(Collectors.toList());
}
return userIds;
}
}

@ -10,4 +10,8 @@ public interface CommonService {
Map<String,Object> updateCommon(Map<String,Object> param);
Map<String,Object> insertCommon(Map<String,Object> param);
Map<String,Object> getPersonBySuitOrganzation(Map<String,Object> param);
Map<String,Object> GetAllPersonBySuitOrganzationCmd(Map<String,Object> param);
}

@ -1,5 +1,7 @@
package com.engine.jucailinkq.common.service.impl;
import com.engine.jucailinkq.common.cmd.GetAllPersonBySuitOrganzationCmd;
import com.engine.jucailinkq.common.cmd.GetPersonBySuitOrganzationCmd;
import com.engine.jucailinkq.common.cmd.QueryCommonCmd;
import com.engine.jucailinkq.common.service.CommonService;
import com.engine.jucailinkq.common.util.CommonUtil;
@ -39,4 +41,14 @@ public class CommonServiceImpl extends Service implements CommonService {
return result;
}
@Override
public Map<String, Object> getPersonBySuitOrganzation(Map<String, Object> param) {
return commandExecutor.execute(new GetPersonBySuitOrganzationCmd(param));
}
@Override
public Map<String, Object> GetAllPersonBySuitOrganzationCmd(Map<String, Object> param) {
return commandExecutor.execute(new GetAllPersonBySuitOrganzationCmd(param));
}
}

@ -5,6 +5,7 @@ import com.engine.jucailinkq.attendance.component.persongroup.commonutil.Persong
import com.engine.jucailinkq.attendance.enums.ApplicableOrganizationEnum;
import com.engine.jucailinkq.attendance.enums.CheckBoxEnum;
import com.engine.jucailinkq.attendance.enums.PersonGroupListTypeEnum;
import com.engine.jucailinkq.attendance.workflow.enums.WorkFlowTypeEnum;
import com.engine.jucailinkq.common.exception.AttendanceRunTimeException;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@ -338,6 +339,38 @@ public class CommonUtil {
mainMap.put("id",String.valueOf(requestInfo.getRequestManager().getBillid()));
return mainMap;
}
/**
* requestInfomap
* @param requestInfo
* @return
*/
public static HashMap<String,String> getMainTableInfo(RequestInfo requestInfo, WorkFlowTypeEnum workFlowTypeEnum){
String sql = "select a.yszdm id,a.lczdm name,b.lclx from uf_jcl_kq_kqlcsz_dt1 a left join uf_jcl_kq_kqlcsz b on a.mainid=b.id where lclx=?";
Map<String,Object> mappingMap = DbTools.getSqlToMapList(sql,workFlowTypeEnum.getKey());
HashMap<String,String> mainMap = new HashMap<String,String>();
HashMap<String,String> resultMap = new HashMap<String,String>();
Property[] properties = requestInfo.getMainTableInfo().getProperty();// 获取表单主字段信息
for (int i = 0; i < properties.length; i++) {
String name = properties[i].getName();// 主字段名称
String value = Util.null2String(properties[i].getValue());// 主字段对应的值
mainMap.put(name, value);
}
mainMap.put("id",String.valueOf(requestInfo.getRequestManager().getBillid()));
if (mappingMap.size() != 0){
resultMap.putAll(mainMap);
for (Map.Entry<String,Object> entry :mappingMap.entrySet()){
if (entry.getValue()!=null && !"".equals(entry.getValue())){
resultMap.put(entry.getKey(),mainMap.get(entry.getValue()));
}else {
resultMap.put(entry.getKey(),mainMap.get(entry.getKey()));
}
}
return resultMap;
}else {
return mainMap;
}
}
/**
@ -367,8 +400,80 @@ public class CommonUtil {
list.add(map);
}
}
return list;
}
/**
*
* @param request
* @return
*/
public static List<Map<String, String>> getDetailTableInfo(RequestInfo request, int index,WorkFlowTypeEnum workFlowTypeEnum) {
String queryTable = "uf_jcl_kq_kqlcsz_dt2";
if (workFlowTypeEnum == WorkFlowTypeEnum.ASKFORLEAVE || workFlowTypeEnum == WorkFlowTypeEnum.BATCH_ASKFORLEAVE){
if (index == 1){
//明细表2
queryTable = "uf_jcl_kq_kqlcsz_dt3";
}
}
String sql = "select a.yszdm,a.lczdm,a.lczdszb from "+queryTable+" a left join uf_jcl_kq_kqlcsz b on a.mainid=b.id where lclx=?";
List<Map<String,Object>> mappingList = DbTools.getSqlToList(sql,workFlowTypeEnum.getKey());
String tableName = null;
for (Map<String,Object> map:mappingList){
if (map.get("lczdszb") != null && !map.get("lczdszb").equals("")){
tableName= map.get("lczdszb").toString();
break;
}
}
List<Map<String, String>> detailDataList = null;
List<Map<String, String>> resultList = Lists.newArrayList();
if (tableName == null || !tableName.contains("_dt")){
detailDataList = getDetailTableInfo(request,index);
}else {
int detailIndex = Integer.valueOf(tableName.substring(tableName.length()-1,tableName.length()));
detailDataList = getDetailTableInfo(request,detailIndex-1);
}
Map<String,Object> mappingMap = mappingList.stream().collect(Collectors.toMap(e->Util.null2String(e.get("yszdm")),e->e.get("lczdm")));
if (mappingMap.size() != 0){
for (Map<String, String> detailData:detailDataList){
Map<String, String> resultMap = Maps.newHashMap();
resultMap.putAll(detailData);
for (Map.Entry<String,Object> entry :mappingMap.entrySet()){
if (entry.getValue()!=null && !"".equals(entry.getValue())){
resultMap.put(entry.getKey(),detailData.get(entry.getValue()));
}else {
resultMap.put(entry.getKey(),detailData.get(entry.getKey()));
}
}
resultList.add(resultMap);
}
return resultList;
}else {
return detailDataList;
}
}
/**
*
*/
public static String getDetailTableInfoTableName(String tableName, int index,WorkFlowTypeEnum workFlowTypeEnum){
String queryTable = "uf_jcl_kq_kqlcsz_dt2";
if (workFlowTypeEnum == WorkFlowTypeEnum.ASKFORLEAVE || workFlowTypeEnum == WorkFlowTypeEnum.BATCH_ASKFORLEAVE){
if (index == 1){
//明细表2
queryTable = "uf_jcl_kq_kqlcsz_dt3";
}
}
String sql = "select a.yszdm,a.lczdm,a.lczdszb from "+queryTable+" a left join uf_jcl_kq_kqlcsz b on a.mainid=b.id where lclx=?";
List<Map<String,Object>> mappingList = DbTools.getSqlToList(sql,workFlowTypeEnum.getKey());
for (Map<String,Object> map:mappingList){
if (map.get("lczdszb") != null && !map.get("lczdszb").equals("")){
tableName= map.get("lczdszb").toString();
break;
}
}
return tableName;
}
/**
* iddataIdmodeId

@ -124,6 +124,16 @@ public class DateUtil {
public static LocalDateTime getTime(String time){
int length = time.length();
switch (length){
case 9:
String[] times = time.split("-");
if (times[1].length()==1){
times[1] = "0"+times[1];
}else if (times[2].length()==1){
times[2] = "0"+times[2];
}
time = times[0]+"-"+times[1]+"-"+times[2];
return LocalDate.parse(time, yyyyMMdd).atStartOfDay();
case 10:
return LocalDate.parse(time, yyyyMMdd).atStartOfDay();
case 19:

@ -725,7 +725,7 @@ public class Utils<T> {
log.debug("休息时间在请假时间 左边");
}else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(dtkssj)) >=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dtjssj)) <=0){
//请假时间在休息时间中间
betweenMinutes = 0;
betweenMinutes = DateUtil.getBetWeenMinutes(kssj,jssj);
log.debug("请假时间在休息时间中间");
}
if (betweenMinutes > 0){
@ -1427,4 +1427,11 @@ public class Utils<T> {
return sqltj;
}
public static void setDataIdbyMap(Set<String> itemSet,Map<String,Object>...values){
for (Map<String,Object> map : values){
}
}
}

Loading…
Cancel
Save