流程删除、归档后需重新分析的逻辑。加班转调休逻辑变动

main
liuliang 4 months ago
parent 7ed7f01e70
commit d9f00d3776

@ -4,11 +4,9 @@ import com.engine.jucailinkq.attendance.enums.CheckBoxEnum;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.jucailinkq.attendance.vacation.util.VocationCommonUtil;
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.exception.AttendanceRunTimeException;
import com.engine.jucailinkq.common.util.*;
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 lombok.extern.slf4j.Slf4j;
@ -70,6 +68,11 @@ public class RecordDataCmd extends AbstractCommonCommand<Map<String,Object>> {
if ("".equals(sfxx)){
sfxx= CheckBoxEnum.UNCHECKED.getKey();
}
Map<String,Object> gobalSet = ExtensionClassHolder.getGlobalSetMap();
String haveRecord = Util.null2String(gobalSet.get("haveRecord"));
if (!"1".equals(haveRecord)){
return null;
}
String sql = "select ygid,rq from uf_jcl_kq_cqjg where ygid=? and rq=?";
List<Map<String,Object>> dataList = DbTools.getSqlToList(sql,userId,analysisDate);
@ -196,24 +199,29 @@ public class RecordDataCmd extends AbstractCommonCommand<Map<String,Object>> {
//处理加班结果
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);
}
if (oldOverTimeList.size() >0 || overTimeResultList.size() >0 ){
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";
sql = "select id,jqid,ktsc,yxsc,wxsc,ztsc,zfsc,jxsc,dzkxsc,lyid,lyjblx,sm from uf_jcl_kq_jqye where lyid=? and lylx=4";
List<Map<String,Object>> oldOverTimeHolidayList = DbTools.getSqlToList(sql,id);
oldOverTimeHolidayList = oldOverTimeHolidayList.stream().filter(e->(Double.valueOf(e.get("zfsc").toString()) < Double.valueOf(e.get("ktsc").toString())) && !"delete".equals(e.get("sm"))).collect(Collectors.toList());
for (Map<String,Object> overTimeHoliday : overTimeHolidayList){
overTimeHoliday.put("lyid",id);
}
if (oldOverTimeHolidayList.size() > 0 || overTimeHolidayList.size() > 0){
updateOverTimeHoliday(oldOverTimeHolidayList,overTimeHolidayList);
}
}catch (Exception e){
log.error("updateWorkOverTimeDate error : [{}]",e);
}
@ -386,7 +394,8 @@ public class RecordDataCmd extends AbstractCommonCommand<Map<String,Object>> {
if (deleteList.size() > 0){
String deleteSql = "delete from uf_jcl_kq_jqye where id in ("+String.join(",",deleteList)+")";
//String deleteSql = "delete from uf_jcl_kq_jqye where id in ("+String.join(",",deleteList)+")";
String deleteSql = "update uf_jcl_kq_jqye set yxsc=0,wxsc=0,ztsc=0,jxsc=0,zfsc=ktsc,sm='delete' where id in ("+String.join(",",deleteList)+")";
DbTools.update(deleteSql);
}
if (updateList.size() > 0){
@ -427,4 +436,6 @@ public class RecordDataCmd extends AbstractCommonCommand<Map<String,Object>> {
}
}

@ -184,6 +184,7 @@ public class AttendanceAnalysisJob extends BaseCronJob {
log.info("********AttendanceAnalysisJob prepare end******");
CommonUtil.checkHavePermission();
for (Map<String,Object> userMap:userList){
Map<String,Object> analysisParam = Maps.newHashMap();

@ -49,8 +49,8 @@ public class AttendanceanalysisAction {
log.info("********AttendanceanalysisAction start********");
Map<String,Object> paramMap = ParamUtil.request2Map(request);
// Map<String,Object> paramMap = Maps.newHashMap();
// paramMap.put("startDate","2024-12-02");
// paramMap.put("endDate","2024-12-02");
// paramMap.put("startDate","2024-12-05");
// paramMap.put("endDate","2024-12-05");
// paramMap.put("userIds","25");
String startDate = Util.null2String(paramMap.get("startDate"));
@ -88,8 +88,7 @@ public class AttendanceanalysisAction {
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()));
CommonUtil.checkHavePermission();
if ("".equals(userIds)){
log.info("********AttendanceanalysisAction prepare start******");
String queryDepartEmployeeSql = "select resourceid ,changedate,type_n from HRMSTATUSHISTORY where (type_n = 5 or type_n = 7) and changedate <> '' and changedate is not null";
@ -326,10 +325,10 @@ public class AttendanceanalysisAction {
allowanceService.addAllowanceRecords(paramMap);
}
log.info("********AttendanceanalysisAction end********");
return null;
return ApiReturnTools.success(Maps.newHashMap());
}catch (Exception e){
log.error("execute fail,catch error: [{}]",e);
return ApiReturnTools.error("500",e.getMessage());
return ApiReturnTools.errorjson("500",e.getCause().getMessage());
}
}

@ -7,6 +7,7 @@ import com.engine.jucailinkq.attendance.attendanceanalysis.service.impl.Comprehe
import com.engine.jucailinkq.attendance.attendanceanalysis.service.impl.UtilServiceImpl;
import com.engine.jucailinkq.attendance.enums.CheckBoxEnum;
import com.engine.jucailinkq.attendance.enums.ClassSegmentTypeEnum;
import com.engine.jucailinkq.attendance.enums.ClockPointEnum;
import com.engine.jucailinkq.common.util.CommonUtil;
import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.common.util.ServiceUtil;
@ -339,6 +340,7 @@ public class AttendanceAnalysisWrapper extends Service {
*/
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,List<Map<String, Object>> evectionList,List<Map<String, Object>> askforList) {
scheduleResult = scheduleResult.stream().sorted(Comparator.comparing(e -> DateUtil.getTime(Utils.getkssjTime(e, analysisDate)).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList());
Map<String, Object> recordParam = Maps.newHashMap();
Map<String, String> formModeIdMap = Utils.getFormmodeIdMap();
recordParam.put("userId", userId);
@ -538,6 +540,19 @@ public class AttendanceAnalysisWrapper extends Service {
if (workOverTimeItemList.size() > 0){
recordData.addAll(workOverTimeItemList);
}
List<ClockPointDTO> oneClockPointDto = clcokInTimeData.stream().filter(e->e.isRecord() && !ClockPointEnum.EMPTY.equals(e.getTimeType()) && e.getClockTime() != null).collect(Collectors.toList());
if (oneClockPointDto.size() ==1 &&
(DateUtil.getTime(oneClockPointDto.get(0).getClassTime()).compareTo(DateUtil.getTime(DateUtil.AfterDay(analysisDate,1)+" 00:00:00")) > 0 ||
DateUtil.getTime(oneClockPointDto.get(0).getClassTime()).compareTo(DateUtil.getTime(analysisDate +" 00:00:00")) < 0)){
//当一天只有一笔打卡记录时取消该笔打卡记录移交给其他班段
for (ClockPointDTO clockPointDTO:clcokInTimeData){
if (clockPointDTO.isRecord()){
clockPointDTO.setTimeType(ClockPointEnum.EMPTY);
clockPointDTO.setClockTime(null);
}
}
}
recordParam.put("recordData", recordData);
recordParam.put("recordDataTime", utilService.getNeedRecordClockInTime(clcokInTimeData));
recordParam.put("attendanceDuration", attendanceDuration);

@ -415,6 +415,8 @@ public class UpdateAttendanceResultWrapper extends Service {
Map<String, Object> map = Maps.newHashMap();
List<Map<String, Object>> resultList = Lists.newArrayList();
log.info("recordEvection evectionList :[{}]",evectionList);
log.info("recordEvection evectionItems :[{}]",evectionItems);
for (int i=0;i<evectionList.size();i++){
Map<String, Object> resultMap = Maps.newHashMap();
String kssj = evectionList.get(i).get("ksrq") + " "+evectionList.get(i).get("kssj");

@ -656,6 +656,6 @@ public class VocationCommonUtil {
endtDate=jzrqzd;
}
int days = DateUtil.getBetWeenDays(startDate,endtDate)+1;
insertHoliDayParam.put("ktsc",computeRestDays(days,alldays,ktsc));
insertHoliDayParam.put("ktsc",computeRestDays(days,alldays,ktsc,wscl));
}
}

@ -3,6 +3,7 @@ package com.engine.jucailinkq.attendance.workflow.proxy.tactics;
import com.alibaba.fastjson.JSONObject;
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;
import com.engine.jucailinkq.common.util.Utils;
import com.google.common.collect.Lists;
@ -11,6 +12,8 @@ import lombok.extern.slf4j.Slf4j;
import weaver.general.Util;
import weaver.interfaces.workflow.action.Action;
import java.time.ZoneOffset;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@ -71,8 +74,9 @@ public class AskForLeaveWorkflowDataReset implements WorkFlowHandleTacis{
return;
}
String sql = "select id, jlzt from uf_jcl_kq_qjjl where djid = " + requestId;
Map<String, Object> qjllData = DbTools.getSqlToMap(sql);
String sql = "select a.id, jlzt,b.qjry,b.ksrq,b.jsrq from uf_jcl_kq_qjjl a left join uf_jcl_kq_qjjl_dt1 b on a.id=b.mainid where a.djid = " + requestId;
List<Map<String, Object>> qjllDataList = DbTools.getSqlToList(sql);
Map<String, Object> qjllData = qjllDataList.get(0);
String jlzt = Util.null2String(qjllData.get("jlzt"));
@ -140,6 +144,17 @@ public class AskForLeaveWorkflowDataReset implements WorkFlowHandleTacis{
}
}
}
if (qjllDataList.size() > 0){
Map<String,List<Map<String,Object>>> detailGroupMap = qjllDataList.stream().collect(Collectors.groupingBy(e->e.get("qjry").toString()));
for (Map.Entry<String,List<Map<String,Object>>> entry: detailGroupMap.entrySet()){
String ygid = entry.getKey();
List<Map<String,Object>> detailList = entry.getValue();
detailList = detailList.stream().sorted(Comparator.comparing(e -> DateUtil.getTime(e.get("ksrq").toString()).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList());
String updateSql = "update uf_jcl_kq_cqjg set sjzt=0 where ygid=? and rq>=? and rq<=?";
log.info("AskForLeaveWorkflowDataReset detailList:[{}]",detailList);
DbTools.update(updateSql,ygid,detailList.get(0).get("ksrq"),detailList.get(detailList.size()-1).get("jsrq"));
}
}
//将明细表1数据清空
String delSql = "delete from " + detail1TableName + " where mainid=?";
if (!DbTools.update(delSql, mainMap.get("id"))) {

@ -2,6 +2,7 @@ package com.engine.jucailinkq.attendance.workflow.proxy.tactics;
import com.alibaba.fastjson.JSONObject;
import com.engine.jucailinkq.attendance.workflow.enums.WorkFlowTypeEnum;
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.Lists;
@ -9,6 +10,8 @@ import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import weaver.general.Util;
import java.time.ZoneOffset;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@ -67,8 +70,9 @@ public class BatchAskForLeaveWorkflowDataReset implements WorkFlowHandleTacis{
return;
}
String sql = "select id, jlzt from uf_jcl_kq_qjjl where djid = " + requestId;
Map<String, Object> qjllData = DbTools.getSqlToMap(sql);
String sql = "select a.id, jlzt,b.qjry,b.ksrq,b.jsrq from uf_jcl_kq_qjjl a left join uf_jcl_kq_qjjl_dt1 b on a.id=b.mainid where a.djid = " + requestId;
List<Map<String, Object>> qjllDataList = DbTools.getSqlToList(sql);
Map<String, Object> qjllData = qjllDataList.get(0);
String jlzt = Util.null2String(qjllData.get("jlzt"));
@ -136,6 +140,18 @@ public class BatchAskForLeaveWorkflowDataReset implements WorkFlowHandleTacis{
}
}
}
if (qjllDataList.size() > 0){
Map<String,List<Map<String,Object>>> detailGroupMap = qjllDataList.stream().collect(Collectors.groupingBy(e->e.get("qjry").toString()));
for (Map.Entry<String,List<Map<String,Object>>> entry: detailGroupMap.entrySet()){
String ygid = entry.getKey();
List<Map<String,Object>> detailList = entry.getValue();
detailList = detailList.stream().sorted(Comparator.comparing(e -> DateUtil.getTime(e.get("ksrq").toString()).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList());
String updateSql = "update uf_jcl_kq_cqjg set sjzt=0 where ygid=? and rq>=? and rq<=?";
log.info("MakeUpClockInDataReset detailList:[{}]",detailList);
DbTools.update(updateSql,ygid,detailList.get(0).get("ksrq"),detailList.get(detailList.size()-1).get("jsrq"));
}
}
//将明细表1数据清空
String delSql = "delete from " + tableName + "_dt1 where mainid=?";
if (!DbTools.update(delSql, mainMap.get("id"))) {

@ -2,11 +2,14 @@ package com.engine.jucailinkq.attendance.workflow.proxy.tactics;
import com.alibaba.fastjson.JSONObject;
import com.engine.jucailinkq.attendance.workflow.enums.WorkFlowTypeEnum;
import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import java.time.ZoneOffset;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@ -77,6 +80,16 @@ public class EvectionDataReset implements WorkFlowHandleTacis{
if (!delSign1 || !delSign2) {
log.error(message);
}
if (detailTableData.size() > 0){
Map<String,List<Map<String,Object>>> detailGroupMap = detailTableData.stream().collect(Collectors.groupingBy(e->e.get("ccr").toString()));
for (Map.Entry<String,List<Map<String,Object>>> entry: detailGroupMap.entrySet()){
String ygid = entry.getKey();
List<Map<String,Object>> detailList = entry.getValue();
detailList = detailList.stream().sorted(Comparator.comparing(e -> DateUtil.getTime(e.get("ksrq").toString()).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList());
String updateSql = "update uf_jcl_kq_cqjg set sjzt=0 where ygid=? and rq>=? and rq<=?";
DbTools.update(updateSql,ygid,detailList.get(0).get("ksrq"),detailList.get(detailList.size()-1).get("jsrq"));
}
}
}
}catch (Exception e){
log.error("EvectionDataReset error : [{}]", e.getMessage());

@ -2,12 +2,15 @@ package com.engine.jucailinkq.attendance.workflow.proxy.tactics;
import com.alibaba.fastjson.JSONObject;
import com.engine.jucailinkq.attendance.workflow.enums.WorkFlowTypeEnum;
import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import weaver.interfaces.workflow.action.Action;
import java.time.ZoneOffset;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@ -58,7 +61,7 @@ public class MakeUpClockInDataReset implements WorkFlowHandleTacis{
}
try {
//收集补打卡记录中流程id关联的数据
String sql = "select id from uf_jcl_kq_bdkjl where sjly = 0 and lcid = " + requestId;
String sql = "select id,bdkry,dkrq from uf_jcl_kq_bdkjl where sjly = 0 and lcid = " + requestId;
List<Map<String, Object>> bdkData = DbTools.getSqlToList(sql);
if (bdkData.size() > 0) {
List<String> bdkjlIdList = bdkData.stream().map(f->f.get("id").toString()).collect(Collectors.toList());
@ -70,6 +73,18 @@ public class MakeUpClockInDataReset implements WorkFlowHandleTacis{
message = message + "删除补打卡记录表数据失败!";
log.error(message);
}
Map<String,List<Map<String,Object>>> detailGroupMap = bdkData.stream().collect(Collectors.groupingBy(e->e.get("bdkry").toString()));
for (Map.Entry<String,List<Map<String,Object>>> entry: detailGroupMap.entrySet()){
String ygid = entry.getKey();
List<Map<String,Object>> detailList = entry.getValue();
detailList = detailList.stream().sorted(Comparator.comparing(e -> DateUtil.getTime(e.get("dkrq").toString()).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList());
String updateSql = "update uf_jcl_kq_cqjg set sjzt=0 where ygid=? and rq>=? and rq<=?";
log.info("MakeUpClockInDataReset detailList:[{}]",detailList);
DbTools.update(updateSql,ygid,detailList.get(0).get("dkrq"),detailList.get(detailList.size()-1).get("dkrq"));
}
}
}catch (Exception e){
log.error("MakeUpClockInDataReset error : [{}]", e.getMessage());

@ -12,6 +12,7 @@ import weaver.interfaces.workflow.action.Action;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
@ -65,6 +66,7 @@ public class OvertimePlanDataReset implements WorkFlowHandleTacis{
List<String> jbjhIdList = jbjhData.stream().map(f->f.get("id").toString()).collect(Collectors.toList());
if (jbjhIdList.size() > 0) {
//删除加班计划明细表
sql = "delete from uf_jcl_kq_jbjh_dt1 where mainid in (" + String.join(",",jbjhIdList) + ")";
boolean delSign1 = DbTools.update(sql);
String message = "";
@ -77,7 +79,20 @@ public class OvertimePlanDataReset implements WorkFlowHandleTacis{
if (!delSign2) {
message = message + "删除加班计划主表数据失败!";
}
//删除加班结果中加班计划转换的数据
sql = "select lyid from uf_jcl_kq_jbjg where jbjhid in (" + String.join(",",jbjhIdList) + ")";
log.info("OvertimePlanDataReset sql :[{}]",sql);
List<Map<String, Object>> dataList = DbTools.getSqlToList(sql);
log.info("OvertimePlanDataReset dataList :[{}]",dataList);
Set<String> attendanceIds = dataList.stream().map(e->e.get("lyid").toString()).collect(Collectors.toSet());
sql = "update uf_jcl_kq_cqjg set sjzt=0 where id in ("+String.join(",",attendanceIds)+")";
boolean uptSign3 = DbTools.update(sql);
if (!uptSign3) {
log.info("OvertimePlanDataReset attendanceIds :[{}]",attendanceIds);
message = message + "删除加班结果表数据失败!";
}
sql = "delete from uf_jcl_kq_jbjg where jbjhid in (" + String.join(",",jbjhIdList) + ")";
boolean delSign3 = DbTools.update(sql);
if (!delSign3) {

@ -1,5 +1,6 @@
package com.engine.jucailinkq.common.util;
import com.alibaba.fastjson.JSON;
import com.google.gson.Gson;
import java.util.HashMap;
@ -28,4 +29,10 @@ public class ApiReturnTools {
returnMap.put("data",dataMap);
return gson.toJson(returnMap);
}
public static String errorjson(String errorCode,String errorMessage){
Map<String,String> returnMap = new HashMap<>();
returnMap.put("code",errorCode);
returnMap.put("message",errorMessage);
return JSON.toJSONString(returnMap);
}
}

@ -1340,4 +1340,11 @@ public class CommonUtil {
}
return minute;
}
public static void checkHavePermission(){
Map<String,Object> gobalSet = ExtensionClassHolder.getGlobalSetMap();
String permission = Util.null2String(gobalSet.get("permission"));
if (!permission.equals("1")){
throw new AttendanceRunTimeException("请联系管理员获得密钥");
}
}
}

Loading…
Cancel
Save