新增员工添加部门推送,

新增员工添加重复提交验证
考勤上班打卡, 新增昨天打卡情况提醒
请假逻辑调整
This commit is contained in:
andy 2025-08-18 10:51:07 +08:00
parent 8983c699ea
commit b7ca5fcffd
4 changed files with 79 additions and 59 deletions

View File

@ -216,7 +216,19 @@ public class KQDeviceExchangeProcessor implements PunchTheClockStrategyExchangeP
}catch (Exception e){
return initMessage(1, "打卡失败,"+e.getMessage());
}
return (rzAttendanceMapper.updateRzAttendance(attendance) > 0) ? initMessage(0, "打卡成功") : initMessage(1, "打卡失败");
//查询昨天是否未打卡
String notBeforeEndTimeMessage = "";
try {
RzAttendance beforeAttendance = rzAttendanceMapper.queryNowDayAttendanceByStatisticalIdAndDate(Long.valueOf(userId),DateUtils.addDays(date, -1));
if(beforeAttendance.getWorkStartTime() != null && beforeAttendance.getWorkEndTime() == null){
notBeforeEndTimeMessage = " - 昨天未打下班卡";
}
} catch (Exception e) {
e.printStackTrace();
log.error("查询前一天的打卡情况报错了");
}
return (rzAttendanceMapper.updateRzAttendance(attendance) > 0) ? initMessage(0, "打卡成功"+notBeforeEndTimeMessage) : initMessage(1, "打卡失败"+notBeforeEndTimeMessage);
}
// /*** 上班卡的下班卡

View File

@ -20,6 +20,7 @@ import com.evo.personnelMatters.mapper.RzOverTimeMapper;
import com.evo.personnelMatters.service.IRzLeaveDetailService;
import com.evo.system.domain.SysStaff;
import com.evo.system.service.ISysDictDataService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -97,38 +98,38 @@ public class RzLeaveDetailServiceImpl extends ServiceImpl<RzLeaveDetailMapper, R
if(getBaseMapper().insert(rzLeaveDetail) < 1){
return AjaxResult.error("请假详情新增失败");
}
return buildData(String.valueOf(rzLeaveDetail.getType()), rzLeave, rzLeaveDetail, rzLeaveDetail.getLeaveHour());
return buildData(String.valueOf(rzLeaveDetail.getType()), rzLeave, rzLeaveDetail, rzLeaveDetail.getLeaveHour(), true);
}
public AjaxResult buildData(String type, RzLeave rzLeave, RzLeaveDetail rzLeaveDetail, Integer holidayHour){
public AjaxResult buildData(String type, RzLeave rzLeave, RzLeaveDetail rzLeaveDetail, Integer holidayHour, Boolean isTs){
switch (type){
case "52":
rzLeave.setSickHours(big(rzLeave.getSickHours() ,holidayHour));
rzLeave.setSickHours(big(rzLeave.getSickHours() ,holidayHour, isTs));
break;
case "53":
rzLeave.setAbsenceHours(big(rzLeave.getAbsenceHours() ,holidayHour));
rzLeave.setAbsenceHours(big(rzLeave.getAbsenceHours() ,holidayHour, isTs));
break;
case "54":
rzLeave.setAnnualHours(big(rzLeave.getAnnualHours() ,holidayHour));
rzLeave.setAnnualHours(big(rzLeave.getAnnualHours() ,holidayHour, isTs));
break;
case "55":
rzLeave.setCompensatoryHours(big(rzLeave.getCompensatoryHours() ,holidayHour));
rzLeave.setCompensatoryHours(big(rzLeave.getCompensatoryHours() ,holidayHour, isTs));
break;
case "56":
rzLeave.setMarriageHours(big(rzLeave.getMarriageHours() ,holidayHour));
rzLeave.setMarriageHours(big(rzLeave.getMarriageHours() ,holidayHour, isTs));
break;
case "57":
rzLeave.setMaternityHours(big(rzLeave.getMaternityHours() ,holidayHour));
rzLeave.setMaternityHours(big(rzLeave.getMaternityHours() ,holidayHour, isTs));
break;
case "58":
rzLeave.setPaternityHours(big(rzLeave.getPaternityHours() ,holidayHour));
rzLeave.setPaternityHours(big(rzLeave.getPaternityHours() ,holidayHour, isTs));
break;
case "59":
rzLeave.setFuneralHours(big(rzLeave.getFuneralHours() ,holidayHour));
rzLeave.setFuneralHours(big(rzLeave.getFuneralHours() ,holidayHour, isTs));
break;
case "60":
rzLeave.setWorkHours(big(rzLeave.getWorkHours() ,holidayHour));
rzLeave.setWorkHours(big(rzLeave.getWorkHours() ,holidayHour, isTs));
break;
}
if(rzLeaveMapper.updateRzLeave(rzLeave) < 0){
@ -136,13 +137,16 @@ public class RzLeaveDetailServiceImpl extends ServiceImpl<RzLeaveDetailMapper, R
}
//不再反写考勤汇总, 由定时器, 每天执行查找
//这里需要做特殊处理, 如果时间范围跨月了, 需要每个月的考勤都要处理
buildExtension(rzLeaveDetail);
if(isTs){
buildExtension(rzLeaveDetail);
}
return AjaxResult.success();
}
public Integer big(Integer baseNum, Integer addNum){
return new BigDecimal(baseNum).add(new BigDecimal(addNum)).intValue();
public Integer big(Integer baseNum, Integer addNum,Boolean isTs){
return isTs ? new BigDecimal(baseNum).add(new BigDecimal(addNum)).intValue() : new BigDecimal(baseNum).subtract(new BigDecimal(addNum)).intValue();
}
public void buildExtension(RzLeaveDetail rzLeaveDetail){
@ -170,27 +174,40 @@ public class RzLeaveDetailServiceImpl extends ServiceImpl<RzLeaveDetailMapper, R
if(endDay.compareTo(rzLeaveDetail.getLeaveEndTime())>0){
endDay = rzLeaveDetail.getLeaveEndTime();
}
//获取相差天数 因为包含开始结束, 所以需要加1
Long dayNum = DateUtils.getBetweenDays(firsDay,endDay)+1;
List<String> dayList = Collections.emptyList();
for (int j = 0; j < dayNum; j++) {
dayList.add(ymd.format(DateUtils.addDays(firsDay, j)));
}
List<String> holidays = Collections.emptyList();
if(ParamUtils.getLeaveTypeNotIncludedFaXiuAndPublicHoliday().contains(flag)){
holidays.addAll(ParamUtils.getHoliddayList(firsDay.getYear(), 0));
}else if(ParamUtils.getLeaveTypeNotIncludedFaXiu().contains(flag)){
holidays.addAll(ParamUtils.getHoliddayList(firsDay.getYear(), 1));
}else{
holidays.addAll(ParamUtils.getHoliddayList(firsDay.getYear(), 2));
}
//获取假期里的重复天数
Integer doubleDayNum = Collections.findDuplicatesList(holidays, dayList).size();
//计算实际放假天数
Integer holidayNum = dayList.size()-doubleDayNum;
// //获取相差天数 因为包含开始结束, 所以需要加1
// Long dayNum = DateUtils.getBetweenDays(firsDay,endDay)+1;
// List<String> dayList = Collections.emptyList();
// for (int j = 0; j < dayNum; j++) {
// dayList.add(ymd.format(DateUtils.addDays(firsDay, j)));
// }
// List<String> holidays = Collections.emptyList();
// if(ParamUtils.getLeaveTypeNotIncludedFaXiuAndPublicHoliday().contains(flag)){
// holidays.addAll(ParamUtils.getHoliddayList(firsDay.getYear(), 0));
// }else if(ParamUtils.getLeaveTypeNotIncludedFaXiu().contains(flag)){
// holidays.addAll(ParamUtils.getHoliddayList(firsDay.getYear(), 1));
// }else{
// holidays.addAll(ParamUtils.getHoliddayList(firsDay.getYear(), 2));
// }
// //获取假期里的重复天数
// Integer doubleDayNum = Collections.findDuplicatesList(holidays, dayList).size();
// //计算实际放假天数
// Integer holidayNum = dayList.size()-doubleDayNum;
RzLeaveDetail newRzLeaveDetail = new RzLeaveDetail();
BeanUtils.copyProperties(rzLeaveDetail, newRzLeaveDetail);
newRzLeaveDetail.setLeaveStartTime(firsDay);
newRzLeaveDetail.setLeaveStartTime(endDay);
extensionMap.put("month"+m.format(firsDay), ym.format(firsDay));
//如果只请1天, 则按照录入的时间计算, 如果
extensionMap.put("hours"+m.format(firsDay), holidayNum*8);
extensionMap.put("hours"+m.format(firsDay), calculationLeaveHour(newRzLeaveDetail).getLeaveHour());
}
}
@ -262,7 +279,7 @@ public class RzLeaveDetailServiceImpl extends ServiceImpl<RzLeaveDetailMapper, R
overTimeMapper.updateById(rzOverTime);
}
}
return buildData(String.valueOf(rzLeaveDetail.getType()), rzLeave, rzLeaveDetail, newHolidayHour);
return buildData(String.valueOf(rzLeaveDetail.getType()), rzLeave, rzLeaveDetail, newHolidayHour, true);
}
/**
@ -271,29 +288,18 @@ public class RzLeaveDetailServiceImpl extends ServiceImpl<RzLeaveDetailMapper, R
* @return
*/
public AjaxResult deleteRzLeaveDetailById(Long id){
// RzLeaveDetail rzLeaveDetail = getBaseMapper().selectRzLeaveDetailById(id);
// rzLeaveDetail.setUpdateBy(SecurityUtils.getUsername());
// rzLeaveDetail.setUpdateTime(DateUtils.getNowDate());
// rzLeaveDetail.setDelFlag(Constants.DELETE_FLAG_1);
// int r = getBaseMapper().updateRzLeaveDetail(rzLeaveDetail);
// if(r < 1){
// return AjaxResult.error();
// }
// //减少总时长
// RzLeave rzLeave = rzLeaveMapper.selectRzLeaveById(rzLeaveDetail.getLeaveId());
// r = rzLeaveMapper.updateRzLeave(rzLeave);
// if(r < 1){
// return AjaxResult.error();
// }
// //反写考勤汇总
// RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzLeave.getUserId(),rzLeave.getLeaveDate());
// rzAttendanceStatistical.setAbsenteeism(new BigDecimal(rzLeave.getWorkHours() + rzLeave.getFuneralHours() + rzLeave.getPaternityHours() + rzLeave.getMaternityHours()
// + rzLeave.getMarriageHours() + rzLeave.getCompensatoryHours() + rzLeave.getAnnualHours() + rzLeave.getAbsenceHours() + rzLeave.getSickHours()));
// r = rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical);
// if(r < 1){
// return AjaxResult.error();
// }
return AjaxResult.success();
RzLeaveDetail rzLeaveDetail = getBaseMapper().selectRzLeaveDetailById(id);
rzLeaveDetail.setUpdateBy(SecurityUtils.getUsername());
rzLeaveDetail.setUpdateTime(DateUtils.getNowDate());
rzLeaveDetail.setDelFlag(Constants.DELETE_FLAG_1);
int r = getBaseMapper().updateRzLeaveDetail(rzLeaveDetail);
if(r < 1){
return AjaxResult.error();
}
//减少总时长
RzLeave rzLeave = rzLeaveMapper.selectRzLeaveById(rzLeaveDetail.getLeaveId());
return buildData(String.valueOf(rzLeaveDetail.getType()), rzLeave, rzLeaveDetail, rzLeaveDetail.getLeaveHour(), false);
}
@Override

View File

@ -2,6 +2,7 @@ package com.evo.system.controller;
import com.evo.attendance.domain.vo.RzSalaryVo;
import com.evo.common.annotation.Log;
import com.evo.common.annotation.RepeatSubmit;
import com.evo.common.core.controller.BaseController;
import com.evo.common.core.domain.AjaxResult;
import com.evo.common.core.page.TableDataInfo;
@ -77,6 +78,7 @@ public class SysStaffController extends BaseController
@PreAuthorize("@ss.hasPermi('system:staff:add')")
@Log(title = "员工管理", businessType = BusinessType.INSERT)
@PostMapping
@RepeatSubmit
public AjaxResult add(@RequestBody SysStaff sysStaff)
{
return sysStaffService.insertSysStaff(sysStaff);

View File

@ -198,7 +198,7 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
dkj_list.add(com.evo.equipment.constant.Constants.EQ_DEVICE_PUBLIC_CODE); //公共
dkj_list.add(sysStaff.getTimeClock());
//下发照片
eqSnDetailService.sendPhoto(dkj_list, Collections.asList(Collections.asMap("userId", String.valueOf(sysStaff.getUserId()), "name", sysStaff.getName(), "photoUrl", ParamUtils.getGlobalStaticUrl()+upload.getFileName())));
eqSnDetailService.sendPhoto(dkj_list, Collections.asList(Collections.asMap("userId", String.valueOf(sysStaff.getUserId()), "name", sysStaff.getName(), "photoUrl", ParamUtils.getGlobalStaticUrl()+upload.getFileName(), "deptName", sysStaff.getDeptName())));
}
}