修复弹性上下班的问题,修复打卡匹配班次bug,修复假期发放bug

main
liuliang 4 months ago
parent cbf17d1877
commit 69afe99c53

@ -608,7 +608,7 @@ public class GetClockInPointCmd extends AbstractCommonCommand<Map<String, Object
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());
int thdkfzs = DateUtil.getBetWeenMinutes(Utils.getjssjTime(beforeScheduleMap,analysisDate),Utils.getjssjTime(scheduleMap,analysisDate))+Integer.valueOf(beforeScheduleMap.get("thdkfzs") == null?"60":beforeScheduleMap.get("thdkfzs").toString());
beforeScheduleMap.put("thdkfzs",thdkfzs);
}
@ -630,7 +630,7 @@ public class GetClockInPointCmd extends AbstractCommonCommand<Map<String, Object
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());
int tqdkfzs = DateUtil.getBetWeenMinutes(Utils.getkssjTime(scheduleMap,analysisDate),Utils.getkssjTime(afterScheduleMap,analysisDate))+Integer.valueOf(afterScheduleMap.get("tqdkfzs")==null?"60":afterScheduleMap.get("tqdkfzs").toString());
afterScheduleMap.put("tqdkfzs",tqdkfzs);
}
}
@ -760,15 +760,17 @@ public class GetClockInPointCmd extends AbstractCommonCommand<Map<String, Object
//重新获取最早上班时间
Map<ClockPointEnum, Map<String, Object>> startNearestClcokInTime = Utils.getNearestClcokInTimeCmd(DateUtil.beforeMinutes(clockdto.getClassTime(),zddxfz), clockInTimeList);
ClockPointEnum timeType = getStartClassTimeType(ksdkMap,startNearestClcokInTime,kssjStart,DateUtil.beforeMinutes(kssjStart,zddxfz));
clockdto.setTimeType(timeType);
clockdto.setClockTime(startNearestClcokInTime.get(timeType));
// clockdto.setTimeType(timeType);
// clockdto.setClockTime(startNearestClcokInTime.get(timeType));
Map<String, Object> clcokInTime = clockdto.getClockTime();
Map<String, Object> clcokInTime = startNearestClcokInTime.get(timeType);
if (pointTime.equals(kssjStart) && ClockPointEnum.START.equals(pointType) && clcokInTime != null
&& CheckBoxEnum.CHECKED.getKey().equals(ifToWorkClock)) {
//该卡点是弹性开始时间
//弹性上班期间未被请假开始时间占据
clockdto.setTimeType(timeType);
clockdto.setClockTime(startNearestClcokInTime.get(timeType));
if ("".equals(flexibleWorkTime) ){
String signTime = clcokInTime.get("signdate") + " " + clcokInTime.get("signtime");
if (ClockPointEnum.BEFORE.equals(timeType)) {
@ -803,6 +805,8 @@ public class GetClockInPointCmd extends AbstractCommonCommand<Map<String, Object
needClockDateList.add(startWorkIndex,clockdto.getElasticTime());
} else if (pointTime.equals(jssjEnd) && ClockPointEnum.END.equals(pointType) && CheckBoxEnum.CHECKED.getKey().equals(ifToCloseClock)) {
//该卡点是弹性下班点
clockdto.setTimeType(timeType);
clockdto.setClockTime(startNearestClcokInTime.get(timeType));
if ("".equals(flexibleOffWorkTime) && !"".equals(flexibleWorkTime)){
int betweenToWorkTime = DateUtil.getBetWeenMinutes(flexibleWorkTime, kssjStart);
//弹性下班时间点

@ -323,7 +323,7 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS
String str1 = o1.get("resourceId").toString();
String str2 = o2.get("resourceId").toString();
//str1在前str2在后默认升序
return str1.compareTo(str2);
return Integer.valueOf(str1)-Integer.valueOf(str2);
}
});
@ -485,9 +485,9 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS
String kqxmSql = "select * from uf_jcl_kq_kqxm";
List<Map<String, Object>> kqxmList = DbTools.getSqlToList(kqxmSql);
//收集视图列头
StringBuilder viewColumn = new StringBuilder("id,ygid,rq,fbid,bm,zw,bc");
StringBuilder viewColumn = new StringBuilder("id,ygid,rq,fbid,bm,zw,bc,rqlx");
//拼接视图内容sql
StringBuilder viewResourceSql = new StringBuilder("SELECT id, ygid, rq, fbid, bm, zw, bc");
StringBuilder viewResourceSql = new StringBuilder("SELECT id, ygid, rq, fbid, bm, zw, bc, rqlx");
//考勤项目核算单位、id、名称
//20241031需求变更字段“助记码”代替“名称”
String hsdw = "";
@ -539,31 +539,31 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS
String createViewSql = "CREATE VIEW " + viewName;
createViewSql = createViewSql + " AS " + viewResourceSql.toString();
createViewSql = createViewSql + " FROM (" +
"SELECT id, fbid, bm, zw, ygid, rq, bc, xm1 AS xm," + ifNullFunction + "(sc1,0) AS sc FROM uf_jcl_kq_cqjg WHERE (xm1 IS NOT NULL) UNION ALL "
"SELECT id, fbid, bm, zw, ygid,rqlx, rq, bc, xm1 AS xm," + ifNullFunction + "(sc1,0) AS sc FROM uf_jcl_kq_cqjg WHERE (xm1 IS NOT NULL) UNION ALL "
+
"SELECT id, fbid, bm, zw, ygid, rq, bc, xm2," + ifNullFunction + "(sc2,0) FROM uf_jcl_kq_cqjg WHERE (xm2 IS NOT NULL) UNION ALL "
"SELECT id, fbid, bm, zw, ygid,rqlx, rq, bc, xm2," + ifNullFunction + "(sc2,0) FROM uf_jcl_kq_cqjg WHERE (xm2 IS NOT NULL) UNION ALL "
+
"SELECT id, fbid, bm, zw, ygid, rq, bc, xm3," + ifNullFunction + "(sc3,0) FROM uf_jcl_kq_cqjg WHERE (xm3 IS NOT NULL) UNION ALL "
"SELECT id, fbid, bm, zw, ygid,rqlx, rq, bc, xm3," + ifNullFunction + "(sc3,0) FROM uf_jcl_kq_cqjg WHERE (xm3 IS NOT NULL) UNION ALL "
+
"SELECT id, fbid, bm, zw, ygid, rq, bc, xm4," + ifNullFunction + "(sc4,0) FROM uf_jcl_kq_cqjg WHERE (xm4 IS NOT NULL) UNION ALL "
"SELECT id, fbid, bm, zw, ygid,rqlx, rq, bc, xm4," + ifNullFunction + "(sc4,0) FROM uf_jcl_kq_cqjg WHERE (xm4 IS NOT NULL) UNION ALL "
+
"SELECT id, fbid, bm, zw, ygid, rq, bc, xm5," + ifNullFunction + "(sc5,0) FROM uf_jcl_kq_cqjg WHERE (xm5 IS NOT NULL) UNION ALL "
"SELECT id, fbid, bm, zw, ygid,rqlx, rq, bc, xm5," + ifNullFunction + "(sc5,0) FROM uf_jcl_kq_cqjg WHERE (xm5 IS NOT NULL) UNION ALL "
+
"SELECT id, fbid, bm, zw, ygid, rq, bc, xm6," + ifNullFunction + "(sc6,0) FROM uf_jcl_kq_cqjg WHERE (xm6 IS NOT NULL) UNION ALL "
"SELECT id, fbid, bm, zw, ygid,rqlx, rq, bc, xm6," + ifNullFunction + "(sc6,0) FROM uf_jcl_kq_cqjg WHERE (xm6 IS NOT NULL) UNION ALL "
+
"SELECT id, fbid, bm, zw, ygid, rq, bc, xm7," + ifNullFunction + "(sc7,0) FROM uf_jcl_kq_cqjg WHERE (xm7 IS NOT NULL) UNION ALL "
"SELECT id, fbid, bm, zw, ygid,rqlx, rq, bc, xm7," + ifNullFunction + "(sc7,0) FROM uf_jcl_kq_cqjg WHERE (xm7 IS NOT NULL) UNION ALL "
+
"SELECT id, fbid, bm, zw, ygid, rq, bc, xm8," + ifNullFunction + "(sc8,0) FROM uf_jcl_kq_cqjg WHERE (xm8 IS NOT NULL) UNION ALL "
"SELECT id, fbid, bm, zw, ygid,rqlx, rq, bc, xm8," + ifNullFunction + "(sc8,0) FROM uf_jcl_kq_cqjg WHERE (xm8 IS NOT NULL) UNION ALL "
+
"SELECT id, fbid, bm, zw, ygid, rq, bc, CASE WHEN cqzt = 0 THEN '1' ELSE '5' END, cqsc FROM uf_jcl_kq_cqjg UNION ALL "
"SELECT id, fbid, bm, zw, ygid,rqlx, rq, bc, CASE WHEN cqzt = 0 THEN '1' ELSE '5' END, cqsc FROM uf_jcl_kq_cqjg UNION ALL "
+
"SELECT id, fbid, bm, zw, ygid, rq, bc, CASE WHEN rqlx = 0 OR rqlx = 4 THEN '2' WHEN rqlx = 2 OR rqlx = 3 THEN '3' WHEN rqlx = 1 THEN '4' ELSE '0' END ,cqsc FROM uf_jcl_kq_cqjg UNION ALL "
"SELECT id, fbid, bm, zw, ygid,rqlx, rq, bc, CASE WHEN rqlx = 0 OR rqlx = 4 THEN '2' WHEN rqlx = 2 OR rqlx = 3 THEN '3' WHEN rqlx = 1 THEN '4' ELSE '0' END ,cqsc FROM uf_jcl_kq_cqjg UNION ALL "
+
"SELECT T2.id, T2.fbid, T2.bm, T2.zw, T2.ygid, T2.rq, T2.bc, T1.jtlx, " + ifNullFunction + "(T1.sc,0) FROM uf_jcl_kq_cqjt T1 LEFT JOIN uf_jcl_kq_cqjg T2 ON T1.yg = T2.ygid AND T1.rq = T2.rq WHERE T1.zt = 1 UNION ALL "
"SELECT T2.id, T2.fbid, T2.bm, T2.zw, T2.ygid,rqlx, T2.rq, T2.bc, T1.jtlx, " + ifNullFunction + "(T1.sc,0) FROM uf_jcl_kq_cqjt T1 LEFT JOIN uf_jcl_kq_cqjg T2 ON T1.yg = T2.ygid AND T1.rq = T2.rq WHERE T1.zt = 1 UNION ALL "
+
"SELECT T2.id, T2.fbid, T2.bm, T2.zw, T2.ygid, T2.rq, T2.bc, T1.bdklx, 1 FROM uf_jcl_kq_bdkjl T1 LEFT JOIN uf_jcl_kq_cqjg T2 ON T1.bdkry = T2.ygid AND T1.dkrq = T2.rq WHERE T1.jlzt = 1 AND T2.id IS NOT NULL "
"SELECT T2.id, T2.fbid, T2.bm, T2.zw, T2.ygid,rqlx, T2.rq, T2.bc, T1.bdklx, 1 FROM uf_jcl_kq_bdkjl T1 LEFT JOIN uf_jcl_kq_cqjg T2 ON T1.bdkry = T2.ygid AND T1.dkrq = T2.rq WHERE T1.jlzt = 1 AND T2.id IS NOT NULL "
+
") ta GROUP BY id, ygid, rq, fbid, bm, zw, bc";
") ta GROUP BY id, ygid,rqlx, rq, fbid, bm, zw, bc";
boolean createSign = DbTools.update(createViewSql);
bs.writeLog("创建视图结果:" + createSign);

@ -80,8 +80,8 @@ public class ShiftServiceImpl extends Service implements ShiftService {
}
//1-比较各候选班次实际打卡正常的时间点个数B
String resultB = Util.null2String(result.get("judgePartB"));
if (resultB.compareTo(compareB) != 0) {
result = resultB.compareTo(compareB) < 0 ? compareMap : result;
if (!resultB.equals(compareB)) {
result = Double.valueOf(resultB) < Double.valueOf(compareB) ? compareMap : result;
continue;
}
//2-B相同时,比较B/A最大。各候选班次结合了请假、出差、加班等需要打卡的时间点个数A
@ -96,22 +96,22 @@ public class ShiftServiceImpl extends Service implements ShiftService {
//3-B/A相同时C最小。异常总分钟数C
String resultC = Util.null2String(result.get("judgePartC"));
String compareC = Util.null2String(compareMap.get("judgePartC"));
if (resultC.compareTo(compareC) != 0) {
result = resultC.compareTo(compareC) > 0 ? compareMap : result;
if (!resultC.equals(compareC)) {
result = Double.valueOf(resultC)>Double.valueOf(compareC) ? compareMap : result;
continue;
}
//4-C相同时D最小,冗余总分钟数D
String resultD = Util.null2String(result.get("judgePartD"));
String compareD = Util.null2String(compareMap.get("judgePartD"));
if (resultD.compareTo(compareD) != 0) {
result = resultD.compareTo(compareD) > 0 ? compareMap : result;
if (!resultD.equals(compareD)) {
result = Double.valueOf(resultD)>Double.valueOf(compareD) ? compareMap : result;
continue;
}
//5-D相同时E最小,班次优先级E候选班组上有各班次的优先级设置
String resultE = Util.null2String(result.get("judgePartE"));
String compareE = Util.null2String(compareMap.get("judgePartE"));
if (resultE.compareTo(compareE) != 0) {
result = resultE.compareTo(compareE) > 0 ? compareMap : result;
if (!resultE.equals(compareE)) {
result = Double.valueOf(resultE)>Double.valueOf(compareE) ? compareMap : result;
}
}
//全天没有打卡时,看上一个工作日的班次为优先,如果前一个工作日也没有班次,按优先级

@ -47,11 +47,11 @@ public class AttendanceanalysisAction {
public String getSchedulingData(@Context HttpServletRequest request, @Context HttpServletResponse response) {
try {
log.info("********AttendanceanalysisAction start********");
Map<String,Object> paramMap = ParamUtil.request2Map(request);
// Map<String,Object> paramMap = Maps.newHashMap();
// paramMap.put("startDate","2024-12-08");
// paramMap.put("endDate","2024-12-08");
// paramMap.put("userIds","25");
Map<String,Object> paramMap = ParamUtil.request2Map(request);
// Map<String,Object> paramMap = Maps.newHashMap();
// paramMap.put("startDate","2024-12-10");
// paramMap.put("endDate","2024-12-10");
// paramMap.put("userIds","84");
String startDate = Util.null2String(paramMap.get("startDate"));
String startBeforeDate = DateUtil.beforeDay(startDate,2);
@ -143,6 +143,9 @@ public class AttendanceanalysisAction {
String companystartDate = Util.null2String(userMap.get("companystartdate"));
//离职日期
String terminationDate = Util.null2String(departEmployeeMap.get(userId));
if (!"".equals(terminationDate) && DateUtil.getTime(terminationDate).compareTo(DateUtil.getTime(companystartDate)) <=0){
terminationDate="";
}
log.info("***********analysis userId:{},anyslsSize:{},allsize:{} start***********", userId,anyslsSize,userList.size());
//出勤结果,进出时间
@ -258,6 +261,10 @@ public class AttendanceanalysisAction {
String companystartDate = Util.null2String(userGroupMap.get(userId).get(0).get("companystartdate"));
//离职日期
String terminationDate = Util.null2String(departEmployeeMap.get(userId));
if (!"".equals(terminationDate) && DateUtil.getTime(terminationDate).compareTo(DateUtil.getTime(companystartDate)) <=0){
terminationDate="";
}
//出勤结果,进出时间
Map<String,Map<String,Object>> clockInTimeMap = Maps.newHashMap();
@ -300,7 +307,7 @@ public class AttendanceanalysisAction {
log.info("***********analysis userId:{} date: {} error ***********", userId,date);
log.error("execute fail,catch error: [{}]",e);
if (userIds.split(",").length ==1 && startDate.equals(endDate)){
throw new AttendanceRunTimeException("analysis error ");
throw new AttendanceRunTimeException(e);
}
}
}
@ -314,7 +321,7 @@ public class AttendanceanalysisAction {
log.info("***********analysis userId:{} date: {} error ***********", userId,date);
log.error("execute fail,catch error: [{}]",e);
if (userIds.split(",").length ==1 && startDate.equals(endDate)){
throw new AttendanceRunTimeException("analysis error ");
throw new AttendanceRunTimeException(e);
}
}
}

@ -25,6 +25,11 @@ public class HolidayGenerationJob extends BaseCronJob {
*
*/
private String executeDate;
/**
*
*/
private String scopeid;
@Override
public void execute() {
log.info("**********HolidayGenerationJob start ************");

@ -252,13 +252,14 @@ public class BySchedulePaymentWay implements HolidayGenerationWay{
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];
// int month = DateUtil.getBetWeenMonths(qsrq,sxrq);
// if (month < 0){
// month = 0;
// }
// int historySeniority = seniority-month;
// divideTime = DateUtil.beforeMonth(qsrq,historySeniority);
divideTime = sxrq.split("-")[0]+"-"+qsrq.split("-")[1]+"-"+qsrq.split("-")[2];
divideTime = DateUtil.nextMonth(divideTime,1,DateUtil.yyyyMM)+"-01";
}
Map<String,Object> beginYearmap = VocationCommonUtil.getVocationMap(vocationList, beginYear, yjzd,userId);

@ -647,6 +647,9 @@ public class VocationCommonUtil {
double ktsc = Double.valueOf(Util.null2String(insertHoliDayParam.get("ktsc")));
String startDate = sxrq;
String endtDate = jzrq;
if (!"".equals(jzrqzd) && !"".equals(companystartdate) && DateUtil.getTime(jzrqzd).compareTo(DateUtil.getTime(companystartdate)) <=0){
jzrqzd="";
}
if (!"".equals(companystartdate) && DateUtil.getTime(companystartdate).compareTo(DateUtil.getTime(sxrq)) >=0 &&
DateUtil.getTime(companystartdate).compareTo(DateUtil.getTime(jzrq)) <=0){
startDate = companystartdate;

@ -157,7 +157,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
//假期余额使用规则0-假别优先1-失效日期优先默认0
String jqyeUsePriority = Util.null2String(mainTableData.get("yesygz"));
if ("".equals(jqyeUsePriority)) {
jqyeUsePriority = "0";
jqyeUsePriority = "1";
}
//获取请假日期集合
List<String> leaveDateList = DateUtil.getDatesBetween(startDate, endDate);
@ -289,7 +289,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
}
if (canUseJqyeList.size() > 0) {
//按照延期失效日期早+级联优先级高(优先数字小)规则排序
canUseJqyeList.sort(Comparator.comparing((Map<String, Object> h) -> (String) h.get("yqsxrq"))
canUseJqyeList.sort(Comparator.comparing((Map<String, Object> h) -> (String) h.get("yqsxrq")).thenComparing(h->h.get("sxrq").toString())
.thenComparing(h -> (Integer) h.get("jbPriorityValue")));
}
@ -1816,7 +1816,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
String startDate, String leaveEmpId, String empName, String modeId, List<String> errorMessage, int jbPriorityValue) {
String itemId = Util.null2String(holidayItem.get("id"));
String sql = "select id,jqid,sxrq,ktsc,yxsc,wxsc,yqsxrq,ztsc from uf_jcl_kq_jqye where ygid=? and jqid=? and sxrq<=? and yqsxrq>=? order by yqsxrq, modedatacreatedate, modedatacreatetime";
String sql = "select id,jqid,sxrq,ktsc,yxsc,wxsc,yqsxrq,ztsc from uf_jcl_kq_jqye where ygid=? and jqid=? and sxrq<=? and yqsxrq>=? order by yqsxrq, sxrq";
List<Map<String, Object>> holidayBalanceList = DbTools.getSqlToList(sql, leaveEmpId, itemId, startDate, startDate);
//获取延期失效日期最晚的一条
Map<String, Object> maxYqsxrqMap = holidayBalanceList.stream().reduce((m1, m2) -> m2).orElse(null);

@ -113,6 +113,12 @@
WfForm.changeFieldValue(WfForm.convertFieldNameToId("gsrq", "detail_1")+"_"+rowindex, {
value: resultData[0].gsrq
});
WfForm.changeFieldValue(WfForm.convertFieldNameToId("jblx", "detail_1")+"_"+rowindex, {
value: resultData[0].jblx,
specialobj:[
{id:resultData[0].jblx,name:resultData[0].jblxName}
]
});
}
}else {
let errorData = res.data.errorInfo;
@ -157,7 +163,7 @@
if (WfForm.getFieldValue(WfForm.convertFieldNameToId("jsrq","detail_1")+"_"+rowIndex) != value){
WfForm.changeFieldValue(WfForm.convertFieldNameToId("jsrq","detail_1")+"_"+rowIndex,{value:value})
console.log("WfForm.bindDetailFieldChangeEvent--",id,rowIndex,value);
// updateDetail(rowIndex);
updateDetail(rowIndex);
}
});

Loading…
Cancel
Save