调整考勤
This commit is contained in:
parent
41313ef7d3
commit
9f3c939abd
@ -1,7 +1,6 @@
|
||||
package com.evo.attendance.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.evo.attendance.domain.RzAttendance;
|
||||
import com.evo.attendance.domain.RzAttendanceDetail;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
@ -66,4 +65,12 @@ public interface RzAttendanceDetailMapper extends BaseMapper<RzAttendanceDetail>
|
||||
* @return
|
||||
*/
|
||||
Long checkOverTimeCard(@Param("userId") Long userId, @Param("date") Date date);
|
||||
|
||||
/**
|
||||
* 查询员工最后一次上班卡. 只要上班卡, 其他地方可不使用
|
||||
*
|
||||
* @param staffId
|
||||
* @return 考勤明细集合
|
||||
*/
|
||||
public RzAttendanceDetail selectLastRzAttendanceDetailByBk(@Param("staffId") Long staffId, @Param("buttonType") String buttonType, @Param("startDateTime") Date startDateTime, @Param("endDateTime") Date endDateTime);
|
||||
}
|
||||
|
||||
@ -148,12 +148,9 @@ public class TSDeviceExchangeProcessor implements PunchTheClockStrategyExchangeP
|
||||
Integer minHour = ruleJson.getInteger("minHour");
|
||||
//根据公司规定, 如果加班卡打卡时间早于19点,则按照19点计算
|
||||
Date endMealDate = DateUtils.dateTime("yyyy-MM-dd HH:mm", sdfd.format(date)+" "+endMealTime);
|
||||
if(rzSpecialAttendance.getWorkStartTime().compareTo(endMealDate) > 0){
|
||||
endMealDate = rzSpecialAttendance.getWorkStartTime();
|
||||
}
|
||||
Long overMinutes = DateUtils.getBetweenMinutes(endMealDate, rzSpecialAttendance.getWorkEndTime());
|
||||
Long overMinutes = DateUtils.getBetweenMinutes(rzSpecialAttendance.getWorkStartTime(), rzSpecialAttendance.getWorkEndTime());
|
||||
//核查当前人员, 当天是否吃完饭 //如果吃晚饭, 扣减30分钟
|
||||
if(rzRestaurantDetailMapper.checkDinnerByStaffIdAndDateAndSign(sysStaff.getUserId(), date, "晚餐").compareTo(0l) > 0){
|
||||
if((rzSpecialAttendance.getWorkStartTime().compareTo(endMealDate) <= 0) && (rzRestaurantDetailMapper.checkDinnerByStaffIdAndDateAndSign(sysStaff.getUserId(), date, "晚餐").compareTo(0l) > 0)){
|
||||
overMinutes = new BigDecimal(overMinutes).subtract(new BigDecimal(ParamUtils.getShortBreakDeductionMinutes())).longValue();
|
||||
}
|
||||
BigDecimal workHours = new BigDecimal(0);
|
||||
|
||||
@ -1,6 +1,9 @@
|
||||
package com.evo.personnelMatters.service.impl;
|
||||
|
||||
import com.evo.attendance.domain.RzAttendanceStatistical;
|
||||
import com.evo.attendance.domain.RzAttendance;
|
||||
import com.evo.attendance.domain.RzAttendanceDetail;
|
||||
import com.evo.attendance.mapper.RzAttendanceDetailMapper;
|
||||
import com.evo.attendance.mapper.RzAttendanceMapper;
|
||||
import com.evo.attendance.mapper.RzAttendanceStatisticalMapper;
|
||||
import com.evo.common.constant.Constants;
|
||||
import com.evo.common.core.domain.AjaxResult;
|
||||
@ -11,10 +14,15 @@ import com.evo.personnelMatters.domain.RzOverTimeDetail;
|
||||
import com.evo.personnelMatters.mapper.RzOverTimeDetailMapper;
|
||||
import com.evo.personnelMatters.mapper.RzOverTimeMapper;
|
||||
import com.evo.personnelMatters.service.IRzOverTimeDetailService;
|
||||
import com.evo.system.domain.SysStaff;
|
||||
import com.evo.system.mapper.SysStaffMapper;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@ -32,6 +40,12 @@ public class RzOverTimeDetailServiceImpl implements IRzOverTimeDetailService
|
||||
private RzOverTimeMapper rzOverTimeMapper;
|
||||
@Resource
|
||||
private RzAttendanceStatisticalMapper rzAttendanceStatisticalMapper; //打卡统计
|
||||
@Resource
|
||||
private RzAttendanceDetailMapper rzAttendanceDetailMapper;
|
||||
@Resource
|
||||
private RzAttendanceMapper rzAttendanceMapper;
|
||||
@Resource
|
||||
private SysStaffMapper sysStaffMapper;
|
||||
/**
|
||||
* 查询加班详情
|
||||
*
|
||||
@ -44,6 +58,52 @@ public class RzOverTimeDetailServiceImpl implements IRzOverTimeDetailService
|
||||
return rzOverTimeDetailMapper.selectRzOverTimeDetailById(id);
|
||||
}
|
||||
|
||||
|
||||
private void createAttendanceDetail(RzOverTime rzOverTime, RzOverTimeDetail rzOverTimeDetail){
|
||||
//加班卡
|
||||
RzAttendanceDetail jbk = rzAttendanceDetailMapper.selectLastRzAttendanceDetailByBk(rzOverTime.getUserId(), "加班卡", rzOverTimeDetail.getOverTimeStart(), null);
|
||||
SysStaff sysStaff = sysStaffMapper.selectSysStaffByUserId(rzOverTime.getUserId());
|
||||
RzAttendance attendance = null;
|
||||
if(ObjectUtils.isEmpty(jbk)){
|
||||
attendance = rzAttendanceMapper.queryNowDayAttendanceByStatisticalIdAndDate(sysStaff.getUserId(), rzOverTimeDetail.getOverTimeStart());
|
||||
//获取员工的工作时长
|
||||
jbk = new RzAttendanceDetail();
|
||||
//打卡明细表中插入数据
|
||||
jbk.setButtonType("加班卡");
|
||||
jbk.setName(rzOverTimeDetail.getName());
|
||||
jbk.setAttendanceId(attendance.getId());
|
||||
jbk.setDateTime(rzOverTimeDetail.getOverTimeStart());
|
||||
jbk.setDelFlag(Constants.DELETE_FLAG_0);
|
||||
jbk.setStaffId(rzOverTime.getUserId());
|
||||
jbk.setEquipmentCode(sysStaff.getTimeClock());
|
||||
jbk.setCreateTime(new Date());
|
||||
jbk.setRemark("加班补卡生成");
|
||||
rzAttendanceDetailMapper.insert(jbk);
|
||||
}
|
||||
//下班卡
|
||||
RzAttendanceDetail xbk = rzAttendanceDetailMapper.selectLastRzAttendanceDetailByBk(rzOverTime.getUserId(), "下班卡", rzOverTimeDetail.getOverTimeStart(),rzOverTimeDetail.getOverTimeEnd());
|
||||
if(ObjectUtils.isEmpty(xbk)){
|
||||
if(ObjectUtils.isEmpty(attendance)){
|
||||
attendance = rzAttendanceMapper.queryNowDayAttendanceByStatisticalIdAndDate(sysStaff.getUserId(), rzOverTimeDetail.getOverTimeStart());
|
||||
}
|
||||
//获取员工的工作时长
|
||||
jbk = new RzAttendanceDetail();
|
||||
//打卡明细表中插入数据
|
||||
jbk.setButtonType("下班卡");
|
||||
jbk.setName(rzOverTimeDetail.getName());
|
||||
jbk.setAttendanceId(attendance.getId());
|
||||
jbk.setDateTime(rzOverTimeDetail.getOverTimeEnd());
|
||||
jbk.setDelFlag(Constants.DELETE_FLAG_0);
|
||||
jbk.setStaffId(rzOverTime.getUserId());
|
||||
jbk.setEquipmentCode(sysStaff.getTimeClock());
|
||||
jbk.setCreateTime(new Date());
|
||||
jbk.setRemark("加班补卡生成");
|
||||
rzAttendanceDetailMapper.insert(jbk);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 查询加班详情列表
|
||||
*
|
||||
@ -86,13 +146,15 @@ public class RzOverTimeDetailServiceImpl implements IRzOverTimeDetailService
|
||||
if(i < 1){
|
||||
return AjaxResult.error();
|
||||
}
|
||||
//反写考勤汇总
|
||||
RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzOverTime.getUserId(),rzOverTime.getOverTimeMonth());
|
||||
rzAttendanceStatistical.setWorkOvertimeNumber(rzOverTime.getOverHours());
|
||||
i = rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical);
|
||||
if(i < 1){
|
||||
return AjaxResult.error();
|
||||
}
|
||||
|
||||
createAttendanceDetail(rzOverTime, rzOverTimeDetail);
|
||||
// //反写考勤汇总
|
||||
// RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzOverTime.getUserId(),rzOverTime.getOverTimeMonth());
|
||||
// rzAttendanceStatistical.setWorkOvertimeNumber(rzOverTime.getOverHours());
|
||||
// i = rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical);
|
||||
// if(i < 1){
|
||||
// return AjaxResult.error();
|
||||
// }
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@ -123,16 +185,20 @@ public class RzOverTimeDetailServiceImpl implements IRzOverTimeDetailService
|
||||
if(i < 1){
|
||||
return AjaxResult.error();
|
||||
}
|
||||
createAttendanceDetail(rzOverTime, rzOverTimeDetail);
|
||||
//反写考勤汇总
|
||||
RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzOverTime.getUserId(),rzOverTime.getOverTimeMonth());
|
||||
rzAttendanceStatistical.setWorkOvertimeNumber(rzOverTime.getOverHours());
|
||||
i = rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical);
|
||||
if(i < 1){
|
||||
return AjaxResult.error();
|
||||
}
|
||||
// RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzOverTime.getUserId(),rzOverTime.getOverTimeMonth());
|
||||
// rzAttendanceStatistical.setWorkOvertimeNumber(rzOverTime.getOverHours());
|
||||
// i = rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical);
|
||||
// if(i < 1){
|
||||
// return AjaxResult.error();
|
||||
// }
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 删除加班详情信息
|
||||
*
|
||||
@ -156,13 +222,13 @@ public class RzOverTimeDetailServiceImpl implements IRzOverTimeDetailService
|
||||
if(i < 1){
|
||||
return AjaxResult.error();
|
||||
}
|
||||
//反写考勤汇总
|
||||
RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzOverTime.getUserId(),rzOverTime.getOverTimeMonth());
|
||||
rzAttendanceStatistical.setWorkOvertimeNumber(rzOverTime.getOverHours());
|
||||
i = rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical);
|
||||
if(i < 1){
|
||||
return AjaxResult.error();
|
||||
}
|
||||
// //反写考勤汇总
|
||||
// RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzOverTime.getUserId(),rzOverTime.getOverTimeMonth());
|
||||
// rzAttendanceStatistical.setWorkOvertimeNumber(rzOverTime.getOverHours());
|
||||
// i = rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical);
|
||||
// if(i < 1){
|
||||
// return AjaxResult.error();
|
||||
// }
|
||||
return AjaxResult.success();
|
||||
}
|
||||
}
|
||||
|
||||
@ -21,6 +21,13 @@ public interface RzUploadService
|
||||
*/
|
||||
public RzUpload selectById(Long id);
|
||||
|
||||
/**
|
||||
* 查询文件信息
|
||||
*
|
||||
* @return 结果
|
||||
*/
|
||||
public RzUpload selectByBusinessId(Long businessId, String type);
|
||||
|
||||
/**
|
||||
* 新增文件信息
|
||||
*
|
||||
@ -43,4 +50,6 @@ public interface RzUploadService
|
||||
*/
|
||||
public List<RzUpload> selectListByBusinessIdAndyType(List<Long> businessIds, String type);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -41,6 +41,11 @@ public class RzUploadServiceImpl extends ServiceImpl<RzUploadMapper, RzUpload> i
|
||||
return getById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RzUpload selectByBusinessId(Long businessId, String type) {
|
||||
return getBaseMapper().selectOne(new LambdaQueryWrapper<RzUpload>().eq(RzUpload::getBusinessId, businessId).eq(RzUpload::getType,type).eq(RzUpload::getValid,"valid"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增保存上传信息
|
||||
*
|
||||
|
||||
@ -1,12 +1,10 @@
|
||||
package com.evo.system.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.evo.attendance.service.IRzAttendanceStatisticalService;
|
||||
import com.evo.attendance.domain.vo.RzSalaryVo;
|
||||
import com.evo.attendance.service.IRzAttendanceStatisticalService;
|
||||
import com.evo.common.annotation.DataScope;
|
||||
import com.evo.common.annotation.Excel;
|
||||
import com.evo.common.constant.Constants;
|
||||
import com.evo.common.core.domain.AjaxResult;
|
||||
import com.evo.common.core.domain.entity.RzUpload;
|
||||
@ -15,8 +13,6 @@ import com.evo.common.core.domain.entity.SysDictData;
|
||||
import com.evo.common.utils.*;
|
||||
import com.evo.common.utils.bean.BeanUtils;
|
||||
import com.evo.equipment.service.IEqSnDetailService;
|
||||
import com.evo.restaurant.domain.RzRestaurantStatistics;
|
||||
import com.evo.restaurant.mapper.RzRestaurantStatisticsMapper;
|
||||
import com.evo.restaurant.service.IRzRestaurantStatisticsService;
|
||||
import com.evo.system.domain.SysStaff;
|
||||
import com.evo.system.domain.SysStaffDetail;
|
||||
@ -39,7 +35,9 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.*;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.math.BigDecimal;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
@ -164,8 +162,8 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
|
||||
|
||||
private void initCheckDevice(SysStaff sysStaff){
|
||||
//如果文件Id不为空, 则需要更新打卡设备信息, 完成后, 同步更新图片的业务Id数据
|
||||
if(ObjectUtils.isNotEmpty(sysStaff.getFileId())){
|
||||
RzUpload upload = null;
|
||||
if(ObjectUtils.isNotEmpty(sysStaff.getFileId())){
|
||||
try {
|
||||
upload = rzUploadService.selectById(sysStaff.getFileId());
|
||||
upload.setBusinessId(sysStaff.getUserId());
|
||||
@ -173,6 +171,13 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
|
||||
} catch (Exception e) {
|
||||
log.error("处理上传照片信息出现错误", e);
|
||||
}
|
||||
|
||||
}
|
||||
if(upload == null){
|
||||
upload = rzUploadService.selectByBusinessId(sysStaff.getUserId(), "avatar");
|
||||
}
|
||||
//不为空, 准备下发
|
||||
if(upload != null){
|
||||
List<String> dkj_list = new ArrayList<String>();
|
||||
dkj_list.add(com.evo.equipment.constant.Constants.EQ_DEVICE_CODE); //食堂
|
||||
dkj_list.add(com.evo.equipment.constant.Constants.EQ_DEVICE_PUBLIC_CODE); //公共
|
||||
|
||||
@ -97,6 +97,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
where del_flag = '0' and DATE_FORMAT( date_time, '%Y%m%d' ) = DATE_FORMAT(#{date} , '%Y%m%d' ) and staff_id = #{userId} and button_type = '加班卡'
|
||||
</select>
|
||||
|
||||
<select id="selectLastRzAttendanceDetailByBk" resultMap="RzAttendanceDetailResult">
|
||||
<include refid="selectRzAttendanceDetailVo"/>
|
||||
where del_flag = '0' and staff_id = #{staffId} and button_type = #{buttonType}
|
||||
|
||||
<if test="buttonType == '加班卡'"> and DATE_FORMAT( date_time, '%Y%m%d' ) = DATE_FORMAT(#{startDateTime} , '%Y%m%d' ) </if>
|
||||
<if test="buttonType == '下班卡'"> and (
|
||||
(DATE_FORMAT( date_time, '%Y%m%d' ) = DATE_FORMAT(#{startDateTime} , '%Y%m%d' ) and date_time > #{startDateTime})
|
||||
or (DATE_FORMAT( date_time, '%Y%m%d %H:%i' ) = DATE_FORMAT(#{endDateTime} , '%Y%m%d %H:%i' ))
|
||||
)</if>
|
||||
order by date_time desc limit 1
|
||||
</select>
|
||||
|
||||
|
||||
|
||||
|
||||
</mapper>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user