新增员工添加部门推送,

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

View File

@ -2,6 +2,7 @@ package com.evo.system.controller;
import com.evo.attendance.domain.vo.RzSalaryVo; import com.evo.attendance.domain.vo.RzSalaryVo;
import com.evo.common.annotation.Log; import com.evo.common.annotation.Log;
import com.evo.common.annotation.RepeatSubmit;
import com.evo.common.core.controller.BaseController; import com.evo.common.core.controller.BaseController;
import com.evo.common.core.domain.AjaxResult; import com.evo.common.core.domain.AjaxResult;
import com.evo.common.core.page.TableDataInfo; import com.evo.common.core.page.TableDataInfo;
@ -77,6 +78,7 @@ public class SysStaffController extends BaseController
@PreAuthorize("@ss.hasPermi('system:staff:add')") @PreAuthorize("@ss.hasPermi('system:staff:add')")
@Log(title = "员工管理", businessType = BusinessType.INSERT) @Log(title = "员工管理", businessType = BusinessType.INSERT)
@PostMapping @PostMapping
@RepeatSubmit
public AjaxResult add(@RequestBody SysStaff sysStaff) public AjaxResult add(@RequestBody SysStaff sysStaff)
{ {
return sysStaffService.insertSysStaff(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(com.evo.equipment.constant.Constants.EQ_DEVICE_PUBLIC_CODE); //公共
dkj_list.add(sysStaff.getTimeClock()); 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())));
} }
} }