1. 休息日维护, 请假管理调整, 员工生成考勤信息解耦, 字典接口调整, 新增使用code做关联信息的接口
This commit is contained in:
parent
289d595239
commit
95f42c9fa1
@ -66,7 +66,7 @@ public class RzAttendanceStatistical extends BaseEntity
|
|||||||
@Excel(name = "特殊加班(小时)")
|
@Excel(name = "特殊加班(小时)")
|
||||||
private BigDecimal overTimeHours;
|
private BigDecimal overTimeHours;
|
||||||
|
|
||||||
/** 迟到次数 */
|
/** 异常次数 */
|
||||||
@Excel(name = "异常次数")
|
@Excel(name = "异常次数")
|
||||||
private Long lateNumber;
|
private Long lateNumber;
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,9 @@
|
|||||||
package com.evo.attendance.mapper;
|
package com.evo.attendance.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.evo.attendance.domain.RzAttendanceStatistical;
|
import com.evo.attendance.domain.RzAttendanceStatistical;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -11,7 +13,7 @@ import java.util.List;
|
|||||||
* @author chenyj
|
* @author chenyj
|
||||||
* @date 2024-09-05
|
* @date 2024-09-05
|
||||||
*/
|
*/
|
||||||
public interface RzAttendanceStatisticalMapper
|
public interface RzAttendanceStatisticalMapper extends BaseMapper<RzAttendanceStatistical>
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* 查询考勤统计
|
* 查询考勤统计
|
||||||
|
|||||||
@ -2,6 +2,9 @@ package com.evo.attendance.service;
|
|||||||
|
|
||||||
import com.evo.attendance.domain.RzAttendanceStatistical;
|
import com.evo.attendance.domain.RzAttendanceStatistical;
|
||||||
import com.evo.common.core.domain.AjaxResult;
|
import com.evo.common.core.domain.AjaxResult;
|
||||||
|
import com.evo.system.domain.SysStaff;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -47,4 +50,13 @@ public interface IRzAttendanceStatisticalService
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public AjaxResult importRzAttendanceStatistical(List<RzAttendanceStatistical> list);
|
public AjaxResult importRzAttendanceStatistical(List<RzAttendanceStatistical> list);
|
||||||
|
|
||||||
|
/***
|
||||||
|
* 生成考勤信息
|
||||||
|
* @param sysStaff
|
||||||
|
* @param dayList
|
||||||
|
* @param date
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
RzAttendanceStatistical createRzAttendance(SysStaff sysStaff, List<String> dayList, Date date);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,25 +1,32 @@
|
|||||||
package com.evo.attendance.service.impl;
|
package com.evo.attendance.service.impl;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
import com.evo.attendance.domain.RzAbnormal;
|
import com.evo.attendance.domain.RzAbnormal;
|
||||||
|
import com.evo.attendance.domain.RzAbnormalDetail;
|
||||||
import com.evo.attendance.domain.RzAttendance;
|
import com.evo.attendance.domain.RzAttendance;
|
||||||
import com.evo.attendance.domain.RzAttendanceStatistical;
|
import com.evo.attendance.domain.RzAttendanceStatistical;
|
||||||
|
import com.evo.attendance.mapper.RzAbnormalDetailMapper;
|
||||||
import com.evo.attendance.mapper.RzAbnormalMapper;
|
import com.evo.attendance.mapper.RzAbnormalMapper;
|
||||||
import com.evo.attendance.mapper.RzAttendanceMapper;
|
import com.evo.attendance.mapper.RzAttendanceMapper;
|
||||||
import com.evo.attendance.mapper.RzAttendanceStatisticalMapper;
|
import com.evo.attendance.mapper.RzAttendanceStatisticalMapper;
|
||||||
|
import com.evo.attendance.service.IRzAbnormalDetailService;
|
||||||
import com.evo.common.utils.DateUtils;
|
import com.evo.common.utils.DateUtils;
|
||||||
|
import com.evo.common.utils.ParamUtils;
|
||||||
import com.evo.common.utils.SecurityUtils;
|
import com.evo.common.utils.SecurityUtils;
|
||||||
import com.evo.common.utils.StringUtils;
|
import com.evo.common.utils.StringUtils;
|
||||||
import com.evo.personnelMatters.domain.RzHoliday;
|
|
||||||
import com.evo.personnelMatters.mapper.RzHolidayMapper;
|
|
||||||
import com.evo.utils.DateUtil;
|
import com.evo.utils.DateUtil;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import com.evo.attendance.mapper.RzAbnormalDetailMapper;
|
|
||||||
import com.evo.attendance.domain.RzAbnormalDetail;
|
|
||||||
import com.evo.attendance.service.IRzAbnormalDetailService;
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.DayOfWeek;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.Year;
|
||||||
|
import java.time.YearMonth;
|
||||||
|
import java.time.temporal.TemporalAdjusters;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 考勤异常详情Service业务层处理
|
* 考勤异常详情Service业务层处理
|
||||||
@ -37,8 +44,6 @@ public class RzAbnormalDetailServiceImpl implements IRzAbnormalDetailService
|
|||||||
@Resource
|
@Resource
|
||||||
private RzAbnormalMapper rzAbnormalMapper; //异常汇总
|
private RzAbnormalMapper rzAbnormalMapper; //异常汇总
|
||||||
@Resource
|
@Resource
|
||||||
private RzHolidayMapper rzHolidayMapper; //节假日
|
|
||||||
@Resource
|
|
||||||
private RzAttendanceStatisticalMapper rzAttendanceStatisticalMapper; //考勤统计
|
private RzAttendanceStatisticalMapper rzAttendanceStatisticalMapper; //考勤统计
|
||||||
/**
|
/**
|
||||||
* 查询考勤异常详情
|
* 查询考勤异常详情
|
||||||
@ -64,43 +69,53 @@ public class RzAbnormalDetailServiceImpl implements IRzAbnormalDetailService
|
|||||||
return rzAbnormalDetailMapper.selectRzAbnormalDetailList(rzAbnormalDetail);
|
return rzAbnormalDetailMapper.selectRzAbnormalDetailList(rzAbnormalDetail);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
int year = 2025;
|
||||||
|
YearMonth yearMonth = YearMonth.of(year,1);
|
||||||
|
LocalDate date = yearMonth.atDay(1);
|
||||||
|
while (date.getYear() == year){
|
||||||
|
if(date.getDayOfWeek() == DayOfWeek.SUNDAY){
|
||||||
|
System.out.println(date);
|
||||||
|
}
|
||||||
|
date = date.plusDays(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Year yearObject = Year.of(year); // 获取年份对象
|
||||||
|
|
||||||
|
|
||||||
|
// IntStream.rangeClosed(1, 12) // 遍历1到12月
|
||||||
|
// .forEach(month -> {
|
||||||
|
// YearMonth yearMonth = YearMonth.of(year, month);
|
||||||
|
// LocalDate firstDayOfMonth = yearMonth.atDay(1); // 获取当月的第1天
|
||||||
|
// LocalDate firstSunday = firstDayOfMonth // 从第1天开始找第一个周日
|
||||||
|
// .with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
|
||||||
|
// System.out.println("Month: " + yearMonth + ", First Sunday: " + firstSunday);
|
||||||
|
// });
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 新增考勤异常详情
|
* 新增考勤异常详情
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void insertRzAbnormalDetail(){
|
public void insertRzAbnormalDetail(){
|
||||||
|
//获取所有人的考勤信息
|
||||||
List<RzAttendance> res_list = rzAttendanceMapper.currentDateAllAttendance();
|
List<RzAttendance> res_list = rzAttendanceMapper.currentDateAllAttendance();
|
||||||
try{
|
try{
|
||||||
RzAbnormalDetail rzAbnormalDetail = null;
|
//检查是否为假期
|
||||||
//查询节假日
|
Boolean isHoliday = ParamUtils.checkHoliday(res_list.get(0).getAttendanceDate());
|
||||||
List<RzHoliday> h_list = rzHolidayMapper.selectRzHolidayList(null);
|
|
||||||
//判断是否是节假日
|
|
||||||
int flag = 0;
|
|
||||||
for (RzHoliday rzHoliday : h_list) {
|
|
||||||
if(rzHoliday.getHoliday().compareTo(res_list.get(0).getAttendanceDate()) == 0){
|
|
||||||
flag = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (RzAttendance rzAttendance : res_list) {
|
for (RzAttendance rzAttendance : res_list) {
|
||||||
//判断是否是周日
|
//判断是否为假期
|
||||||
if(DateUtil.isSaturday(rzAttendance.getAttendanceDate(),1) || flag == 1){
|
if(isHoliday){
|
||||||
//判断未打卡
|
//判断未打卡, 做加班还是公休备注
|
||||||
if(rzAttendance.getWorkStartTime() == null){
|
rzAttendance.setRemarks((rzAttendance.getWorkStartTime() == null ? "公休": "加班"));
|
||||||
rzAttendance.setRemarks("公休");
|
|
||||||
rzAttendanceMapper.updateRzAttendance(rzAttendance);
|
rzAttendanceMapper.updateRzAttendance(rzAttendance);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
rzAttendance.setRemarks("加班");
|
//判断有没有异常打卡
|
||||||
rzAttendanceMapper.updateRzAttendance(rzAttendance);
|
if(anomalyCheckIn(rzAttendance)){
|
||||||
continue;
|
//判断员工当月是否存在异常情况
|
||||||
}
|
|
||||||
//判断今天没有打卡
|
|
||||||
if("1".equals(rzAttendance.getYcsFlag()) || "1".equals(rzAttendance.getYcxFlag())
|
|
||||||
|| rzAttendance.getWorkStartTime() == null || rzAttendance.getWorkEndTime() == null){
|
|
||||||
//判断员工当月是否已经有迟到
|
|
||||||
RzAbnormal rzAbnormal = rzAbnormalMapper.selectRzAbnormalByUserId(rzAttendance.getStaffId(),new Date());
|
RzAbnormal rzAbnormal = rzAbnormalMapper.selectRzAbnormalByUserId(rzAttendance.getStaffId(),new Date());
|
||||||
|
//不存在的话, 创建新的
|
||||||
if(StringUtils.isNull(rzAbnormal)){
|
if(StringUtils.isNull(rzAbnormal)){
|
||||||
rzAbnormal = new RzAbnormal();
|
rzAbnormal = new RzAbnormal();
|
||||||
rzAbnormal.setDeptId(rzAttendance.getDeptId());
|
rzAbnormal.setDeptId(rzAttendance.getDeptId());
|
||||||
@ -112,7 +127,23 @@ public class RzAbnormalDetailServiceImpl implements IRzAbnormalDetailService
|
|||||||
rzAbnormal.setDelFlag("0");
|
rzAbnormal.setDelFlag("0");
|
||||||
rzAbnormalMapper.insertRzAbnormal(rzAbnormal);
|
rzAbnormalMapper.insertRzAbnormal(rzAbnormal);
|
||||||
}
|
}
|
||||||
rzAbnormalDetail = new RzAbnormalDetail();
|
rzAbnormalDetailMapper.insertRzAbnormalDetail(getRzAbnormalDetail(rzAttendance, rzAbnormal));
|
||||||
|
//反写汇总
|
||||||
|
rzAbnormal.setNumber(rzAbnormal.getNumber() + 1);
|
||||||
|
rzAbnormalMapper.updateRzAbnormal(rzAbnormal);
|
||||||
|
//反写统计
|
||||||
|
RzAttendanceStatistical attendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzAttendance.getStaffId(),rzAttendance.getAttendanceDate());
|
||||||
|
attendanceStatistical.setLateNumber(attendanceStatistical.getLateNumber() + 1);
|
||||||
|
rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(attendanceStatistical);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private RzAbnormalDetail getRzAbnormalDetail(RzAttendance rzAttendance, RzAbnormal rzAbnormal) {
|
||||||
|
RzAbnormalDetail rzAbnormalDetail = new RzAbnormalDetail();
|
||||||
rzAbnormalDetail.setAbnormalId(rzAbnormal.getId());
|
rzAbnormalDetail.setAbnormalId(rzAbnormal.getId());
|
||||||
rzAbnormalDetail.setName(rzAttendance.getName());
|
rzAbnormalDetail.setName(rzAttendance.getName());
|
||||||
rzAbnormalDetail.setClockDate(rzAttendance.getAttendanceDate());
|
rzAbnormalDetail.setClockDate(rzAttendance.getAttendanceDate());
|
||||||
@ -128,21 +159,15 @@ public class RzAbnormalDetailServiceImpl implements IRzAbnormalDetailService
|
|||||||
rzAbnormalDetail.setClockType("未打下班卡");
|
rzAbnormalDetail.setClockType("未打下班卡");
|
||||||
}
|
}
|
||||||
rzAbnormalDetail.setDelFlag("0");
|
rzAbnormalDetail.setDelFlag("0");
|
||||||
rzAbnormalDetailMapper.insertRzAbnormalDetail(rzAbnormalDetail);
|
return rzAbnormalDetail;
|
||||||
//反写汇总
|
|
||||||
rzAbnormal.setNumber(rzAbnormal.getNumber() + 1);
|
|
||||||
rzAbnormalMapper.updateRzAbnormal(rzAbnormal);
|
|
||||||
//反写统计
|
|
||||||
RzAttendanceStatistical attendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzAttendance.getStaffId(),rzAttendance.getAttendanceDate());
|
|
||||||
attendanceStatistical.setLateNumber(attendanceStatistical.getLateNumber() + 1);
|
|
||||||
rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(attendanceStatistical);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}catch (Exception e){
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Boolean anomalyCheckIn(RzAttendance rzAttendance){
|
||||||
|
// 上班异常 || 下班异常 || 上班没打卡 || 下班没打卡
|
||||||
|
return ("1".equals(rzAttendance.getYcsFlag()) || "1".equals(rzAttendance.getYcxFlag()) || rzAttendance.getWorkStartTime() == null || rzAttendance.getWorkEndTime() == null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改考勤异常详情
|
* 修改考勤异常详情
|
||||||
*
|
*
|
||||||
|
|||||||
@ -1,22 +1,28 @@
|
|||||||
package com.evo.attendance.service.impl;
|
package com.evo.attendance.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.evo.attendance.domain.RzAttendance;
|
import com.evo.attendance.domain.RzAttendance;
|
||||||
import com.evo.attendance.mapper.RzAttendanceMapper;
|
|
||||||
import com.evo.common.annotation.DataScope;
|
|
||||||
import com.evo.common.core.domain.AjaxResult;
|
|
||||||
import com.evo.common.core.domain.entity.SysDept;
|
|
||||||
import com.evo.common.utils.DateUtils;
|
|
||||||
import com.evo.attendance.domain.RzAttendanceStatistical;
|
import com.evo.attendance.domain.RzAttendanceStatistical;
|
||||||
|
import com.evo.attendance.mapper.RzAttendanceMapper;
|
||||||
import com.evo.attendance.mapper.RzAttendanceStatisticalMapper;
|
import com.evo.attendance.mapper.RzAttendanceStatisticalMapper;
|
||||||
import com.evo.attendance.service.IRzAttendanceStatisticalService;
|
import com.evo.attendance.service.IRzAttendanceStatisticalService;
|
||||||
import com.evo.common.utils.SecurityUtils;
|
import com.evo.common.annotation.DataScope;
|
||||||
import com.evo.common.utils.StringUtils;
|
import com.evo.common.constant.Constants;
|
||||||
|
import com.evo.common.core.domain.AjaxResult;
|
||||||
|
import com.evo.common.core.domain.entity.SysDept;
|
||||||
|
import com.evo.common.utils.*;
|
||||||
import com.evo.personnelMatters.domain.RzOverTime;
|
import com.evo.personnelMatters.domain.RzOverTime;
|
||||||
import com.evo.personnelMatters.mapper.RzOverTimeMapper;
|
import com.evo.personnelMatters.mapper.RzOverTimeMapper;
|
||||||
|
import com.evo.system.domain.SysStaff;
|
||||||
import com.evo.system.mapper.SysDeptMapper;
|
import com.evo.system.mapper.SysDeptMapper;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -26,10 +32,8 @@ import java.util.List;
|
|||||||
* @date 2024-09-05
|
* @date 2024-09-05
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class RzAttendanceStatisticalServiceImpl implements IRzAttendanceStatisticalService
|
public class RzAttendanceStatisticalServiceImpl extends ServiceImpl<RzAttendanceStatisticalMapper, RzAttendanceStatistical> implements IRzAttendanceStatisticalService
|
||||||
{
|
{
|
||||||
@Resource
|
|
||||||
private RzAttendanceStatisticalMapper rzAttendanceStatisticalMapper;
|
|
||||||
@Resource
|
@Resource
|
||||||
private SysDeptMapper deptMapper; //部门
|
private SysDeptMapper deptMapper; //部门
|
||||||
@Resource
|
@Resource
|
||||||
@ -45,7 +49,7 @@ public class RzAttendanceStatisticalServiceImpl implements IRzAttendanceStatisti
|
|||||||
@Override
|
@Override
|
||||||
public RzAttendanceStatistical selectRzAttendanceStatisticalById(Long id)
|
public RzAttendanceStatistical selectRzAttendanceStatisticalById(Long id)
|
||||||
{
|
{
|
||||||
return rzAttendanceStatisticalMapper.selectRzAttendanceStatisticalById(id);
|
return getBaseMapper().selectRzAttendanceStatisticalById(id);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 查询考勤统计列表
|
* 查询考勤统计列表
|
||||||
@ -57,7 +61,7 @@ public class RzAttendanceStatisticalServiceImpl implements IRzAttendanceStatisti
|
|||||||
@DataScope(deptAlias = "d")
|
@DataScope(deptAlias = "d")
|
||||||
public List<RzAttendanceStatistical> selectRzAttendanceStatisticalList(RzAttendanceStatistical rzAttendanceStatistical)
|
public List<RzAttendanceStatistical> selectRzAttendanceStatisticalList(RzAttendanceStatistical rzAttendanceStatistical)
|
||||||
{
|
{
|
||||||
List<RzAttendanceStatistical> res_list = rzAttendanceStatisticalMapper.selectRzAttendanceStatisticalList(rzAttendanceStatistical);
|
List<RzAttendanceStatistical> res_list = getBaseMapper().selectRzAttendanceStatisticalList(rzAttendanceStatistical);
|
||||||
for (RzAttendanceStatistical attendanceStatistical : res_list) {
|
for (RzAttendanceStatistical attendanceStatistical : res_list) {
|
||||||
SysDept sysDept = deptMapper.selectDeptById(attendanceStatistical.getDeptId());
|
SysDept sysDept = deptMapper.selectDeptById(attendanceStatistical.getDeptId());
|
||||||
attendanceStatistical.setDeptName(sysDept.getDeptName());
|
attendanceStatistical.setDeptName(sysDept.getDeptName());
|
||||||
@ -76,7 +80,7 @@ public class RzAttendanceStatisticalServiceImpl implements IRzAttendanceStatisti
|
|||||||
rzAttendanceStatistical.setRealAttendance(rzAttendanceStatistical.getEssentialAttendance().add(rzAttendanceStatistical.getWorkOvertimeNumber()));
|
rzAttendanceStatistical.setRealAttendance(rzAttendanceStatistical.getEssentialAttendance().add(rzAttendanceStatistical.getWorkOvertimeNumber()));
|
||||||
rzAttendanceStatistical.setUpdateTime(DateUtils.getNowDate());
|
rzAttendanceStatistical.setUpdateTime(DateUtils.getNowDate());
|
||||||
rzAttendanceStatistical.setUpdateBy(SecurityUtils.getUsername());
|
rzAttendanceStatistical.setUpdateBy(SecurityUtils.getUsername());
|
||||||
return rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical);
|
return getBaseMapper().updateRzAttendanceStatistical(rzAttendanceStatistical);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -89,7 +93,7 @@ public class RzAttendanceStatisticalServiceImpl implements IRzAttendanceStatisti
|
|||||||
return AjaxResult.error("请输入校正日期!!");
|
return AjaxResult.error("请输入校正日期!!");
|
||||||
}
|
}
|
||||||
//查询条件月统计的数据
|
//查询条件月统计的数据
|
||||||
List<RzAttendanceStatistical> ms_list = rzAttendanceStatisticalMapper.queryStatisticalByMonth(rzAttendanceStatistical.getMonth());
|
List<RzAttendanceStatistical> ms_list = getBaseMapper().queryStatisticalByMonth(rzAttendanceStatistical.getMonth());
|
||||||
//计算打卡汇总表
|
//计算打卡汇总表
|
||||||
for (RzAttendanceStatistical attendanceStatistical : ms_list) {
|
for (RzAttendanceStatistical attendanceStatistical : ms_list) {
|
||||||
//初始化打卡记录
|
//初始化打卡记录
|
||||||
@ -113,7 +117,7 @@ public class RzAttendanceStatisticalServiceImpl implements IRzAttendanceStatisti
|
|||||||
attendanceStatistical.setWorkOvertimeNumber(rzOverTime.getOverHours());
|
attendanceStatistical.setWorkOvertimeNumber(rzOverTime.getOverHours());
|
||||||
}
|
}
|
||||||
attendanceStatistical.setRealAttendance(attendanceStatistical.getEssentialAttendance().add(attendanceStatistical.getWorkOvertimeNumber()));
|
attendanceStatistical.setRealAttendance(attendanceStatistical.getEssentialAttendance().add(attendanceStatistical.getWorkOvertimeNumber()));
|
||||||
rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(attendanceStatistical) ;
|
getBaseMapper().updateRzAttendanceStatistical(attendanceStatistical) ;
|
||||||
}
|
}
|
||||||
return AjaxResult.success();
|
return AjaxResult.success();
|
||||||
}
|
}
|
||||||
@ -129,8 +133,81 @@ public class RzAttendanceStatisticalServiceImpl implements IRzAttendanceStatisti
|
|||||||
return AjaxResult.error("导入数据为空!!");
|
return AjaxResult.error("导入数据为空!!");
|
||||||
}
|
}
|
||||||
for (RzAttendanceStatistical rzAttendanceStatistical : list) {
|
for (RzAttendanceStatistical rzAttendanceStatistical : list) {
|
||||||
rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical);
|
getBaseMapper().updateRzAttendanceStatistical(rzAttendanceStatistical);
|
||||||
}
|
}
|
||||||
return AjaxResult.success("导入数据成功!!");
|
return AjaxResult.success("导入数据成功!!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RzAttendanceStatistical createRzAttendance(SysStaff sysStaff, List<String> dayList, Date date) {
|
||||||
|
if(date == null){
|
||||||
|
date = DateUtils.getNowDate();
|
||||||
|
}
|
||||||
|
if(Collections.isEmpty(dayList)){
|
||||||
|
dayList = DateUtils.getMonthAndDays(date);
|
||||||
|
}
|
||||||
|
//根据员工ID查询当月的统计信息统计信息
|
||||||
|
RzAttendanceStatistical rzAttendanceStatistical = getBaseMapper().getRzAttendanceStatisticalByDateAndName(sysStaff.getUserId(),date);
|
||||||
|
if(StringUtils.isNotNull(rzAttendanceStatistical)){
|
||||||
|
//判断名称和部门是否一样。不一样操作修改
|
||||||
|
if(!rzAttendanceStatistical.getName().equals(sysStaff.getName()) || rzAttendanceStatistical.getDeptId() != sysStaff.getDeptId()){
|
||||||
|
//修改部门和姓名
|
||||||
|
rzAttendanceStatistical.setName(sysStaff.getName());
|
||||||
|
rzAttendanceStatistical.setDeptId(sysStaff.getDeptId());
|
||||||
|
getBaseMapper().updateRzAttendanceStatistical(rzAttendanceStatistical);
|
||||||
|
//查询考勤详情修改
|
||||||
|
List<RzAttendance> kq_list = rzAttendanceMapper.queryMonthAttendanceByStaffId(sysStaff.getUserId(),new Date());
|
||||||
|
//循环修改信息
|
||||||
|
for (RzAttendance rzAttendance : kq_list) {
|
||||||
|
rzAttendance.setDeptId(sysStaff.getDeptId());
|
||||||
|
rzAttendance.setName(sysStaff.getName());
|
||||||
|
rzAttendanceMapper.updateRzAttendance(rzAttendance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rzAttendanceStatistical;
|
||||||
|
}
|
||||||
|
//新增考勤统计
|
||||||
|
rzAttendanceStatistical = new RzAttendanceStatistical();
|
||||||
|
rzAttendanceStatistical.setStaffId(sysStaff.getUserId());
|
||||||
|
rzAttendanceStatistical.setName(sysStaff.getName());
|
||||||
|
rzAttendanceStatistical.setMonth(date);
|
||||||
|
rzAttendanceStatistical.setShouldAttendance(new BigDecimal(ParamUtils.getMonthWorkDayNum(getMonthWorkDayNum(date))).multiply(new BigDecimal("8.00")));
|
||||||
|
rzAttendanceStatistical.setDeptId(sysStaff.getDeptId());
|
||||||
|
rzAttendanceStatistical.setDelFlag(Constants.DELETE_FLAG_0);
|
||||||
|
rzAttendanceStatistical.setCreateBy(SecurityUtils.getUsername());
|
||||||
|
rzAttendanceStatistical.setCreateTime(date);
|
||||||
|
rzAttendanceStatistical.setAbsenteeism(new BigDecimal(0));
|
||||||
|
getBaseMapper().insertRzAttendanceStatistical(rzAttendanceStatistical);
|
||||||
|
//新增考勤详情
|
||||||
|
SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
RzAttendance rzAttendance = null;
|
||||||
|
List<RzAttendance> pa_list = new ArrayList<RzAttendance>();
|
||||||
|
for(String day: dayList){
|
||||||
|
rzAttendance = new RzAttendance();
|
||||||
|
rzAttendance.setDeptId(sysStaff.getDeptId());
|
||||||
|
rzAttendance.setName(sysStaff.getName());
|
||||||
|
rzAttendance.setStaffId(sysStaff.getUserId());
|
||||||
|
try{
|
||||||
|
rzAttendance.setAttendanceDate(sdfd.parse(day));
|
||||||
|
}catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
rzAttendance.setDelFlag(Constants.DELETE_FLAG_0);
|
||||||
|
rzAttendance.setCreateTime(DateUtils.getNowDate());
|
||||||
|
rzAttendance.setCreateBy(SecurityUtils.getUsername());
|
||||||
|
pa_list.add(rzAttendance);
|
||||||
|
}
|
||||||
|
rzAttendanceMapper.insertBatchRzAttendance(pa_list);
|
||||||
|
|
||||||
|
return rzAttendanceStatistical;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getMonthWorkDayNum(Date date){
|
||||||
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
calendar.setTime(date);
|
||||||
|
return calendar.getActualMaximum(java.util.Calendar.MONTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,8 +8,12 @@ import java.time.LocalDateTime;
|
|||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.evo.common.constant.Constants;
|
||||||
import org.apache.commons.lang3.time.DateFormatUtils;
|
import org.apache.commons.lang3.time.DateFormatUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -203,6 +207,62 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
|
|||||||
return endYear-startYear;
|
return endYear-startYear;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Integer getBetweenMonth(Date start, Date end){
|
||||||
|
Calendar currentDate = Calendar.getInstance();
|
||||||
|
currentDate.setTime(start);
|
||||||
|
|
||||||
|
// 将输入的Date转换为Calendar以便获取年月信息
|
||||||
|
Calendar endCalendar = Calendar.getInstance();
|
||||||
|
endCalendar.setTime(end);
|
||||||
|
// 计算年份差和月份差
|
||||||
|
int yearsDiff = endCalendar.get(Calendar.YEAR) - currentDate.get(Calendar.YEAR);
|
||||||
|
int monthsDiff = endCalendar.get(Calendar.MONTH) - currentDate.get(Calendar.MONTH);
|
||||||
|
|
||||||
|
// 调整月份差,考虑到年份差可能影响实际的月份数差异
|
||||||
|
monthsDiff += yearsDiff * 12;
|
||||||
|
|
||||||
|
return monthsDiff;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Long getBetweenDays(Date start, Date end){
|
||||||
|
Calendar currentDate = Calendar.getInstance();
|
||||||
|
currentDate.setTime(start);
|
||||||
|
|
||||||
|
// 将输入的Date转换为Calendar以便获取年月信息
|
||||||
|
Calendar endCalendar = Calendar.getInstance();
|
||||||
|
endCalendar.setTime(end);
|
||||||
|
return calculateDifferenceInDays(endCalendar, currentDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static long calculateDifferenceInDays(Calendar date1, Calendar date2) {
|
||||||
|
long diffInMillies = Math.abs(date1.getTimeInMillis() - date2.getTimeInMillis());
|
||||||
|
return diffInMillies / (24 * 60 * 60 * 1000); // 将毫秒转换为天
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<String> getCurrentMonthAndDays(){
|
||||||
|
return getMonthAndDays(DateUtils.getNowDate());
|
||||||
|
}
|
||||||
|
public static List<String> getMonthAndDays(Date date){
|
||||||
|
List<String> dayList = new ArrayList<String>();
|
||||||
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
calendar.setTime(date);
|
||||||
|
int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
|
||||||
|
SimpleDateFormat sdfm = new SimpleDateFormat("yyyy-MM");
|
||||||
|
for(int p=1;p<=days;p++){
|
||||||
|
try{
|
||||||
|
String rq = sdfm.format(date)+"-";
|
||||||
|
if(p < 10){
|
||||||
|
rq += Constants.SEIZE_A_SEAT_0 + p;
|
||||||
|
}else {
|
||||||
|
rq += p;
|
||||||
|
}
|
||||||
|
dayList.add(rq);
|
||||||
|
}catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dayList;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,22 @@
|
|||||||
package com.evo.common.utils;
|
package com.evo.common.utils;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import com.evo.attendance.domain.RzSysParam;
|
import com.evo.attendance.domain.RzSysParam;
|
||||||
import com.evo.attendance.service.IRzSysParamService;
|
import com.evo.attendance.service.IRzSysParamService;
|
||||||
|
import com.evo.personnelMatters.domain.RzHoliday;
|
||||||
|
import com.evo.personnelMatters.service.IRzHolidayService;
|
||||||
|
import com.evo.system.service.ISysDictDataService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 全局参数获取配置类
|
* 全局参数获取配置类
|
||||||
@ -17,19 +28,109 @@ import javax.annotation.Resource;
|
|||||||
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
|
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
|
@Slf4j
|
||||||
public class ParamUtils {
|
public class ParamUtils {
|
||||||
|
|
||||||
private static IRzSysParamService paramService;
|
private static IRzSysParamService paramService;
|
||||||
|
|
||||||
|
private static ISysDictDataService dictDataService;
|
||||||
|
|
||||||
|
private static IRzHolidayService rzHolidayService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public ParamUtils(IRzSysParamService paramService) {
|
public ParamUtils(IRzSysParamService paramService, ISysDictDataService dictDataService,IRzHolidayService rzHolidayService) {
|
||||||
this.paramService = paramService;
|
this.paramService = paramService;
|
||||||
|
this.dictDataService = dictDataService;
|
||||||
|
this.rzHolidayService = rzHolidayService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***
|
||||||
|
* 获取全局静态文件地址
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
public static String getGlobalStaticUrl(){
|
public static String getGlobalStaticUrl(){
|
||||||
RzSysParam param= paramService.getRzSysParam("静态地址URL", "static_url","http://192.168.16.1:8081","静态文件的url地址");
|
RzSysParam param= paramService.getRzSysParam("静态地址URL", "static_url","http://192.168.16.1:8081","静态文件的url地址");
|
||||||
return param.getParamValue();
|
return param.getParamValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***
|
||||||
|
* 获取那些请假类型不包含法休
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static List<String> getLeaveTypeNotIncludedFaXiu(){
|
||||||
|
RzSysParam param= paramService.getRzSysParam("请假类型不包含法休", "leave_type_not_included_fa_xiu","56,57,58","记录请假类型不包含法休, 属性值为字典的假期类型code, 多个参数使用,隔开");
|
||||||
|
return Collections.asList(param.getParamValue().split(","));
|
||||||
|
}
|
||||||
|
/***
|
||||||
|
* 获取那些请假类型不包含法休, 公休(周日)
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static List<String> getLeaveTypeNotIncludedFaXiuAndPublicHoliday(){
|
||||||
|
RzSysParam param= paramService.getRzSysParam("请假类型不包含法休和公休", "leave_type_not_included_fa_xiu_and_public_holiday","54","记录请假类型不包含法休和公休, 属性值为字典的假期类型code, 多个参数使用,隔开");
|
||||||
|
return Collections.asList(param.getParamValue().split(","));
|
||||||
|
}
|
||||||
|
|
||||||
|
/***
|
||||||
|
* 获取那些请假类型需要自动计算请假时长
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static List<String> autoCalculationHolidayType(){
|
||||||
|
RzSysParam param= paramService.getRzSysParam("需要自动计算请假时长的请假类型", "auto_calculation_holiday_type","54,56,57,58,59","需要自动计算请假时长的请假类型, 多个参数使用,隔开");
|
||||||
|
return Collections.asList(param.getParamValue().split(","));
|
||||||
|
}
|
||||||
|
|
||||||
|
/***
|
||||||
|
* 获取每月的工作天数
|
||||||
|
* @param monthNum
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String getMonthWorkDayNum(Integer monthNum){
|
||||||
|
return dictDataService.selectDictValue("sys_work_days",monthNum+"月");
|
||||||
|
}
|
||||||
|
|
||||||
|
/***
|
||||||
|
* 检查日期是否为假期
|
||||||
|
* @param checkDate
|
||||||
|
* @return true: 是 false: 不是
|
||||||
|
*/
|
||||||
|
public static Boolean checkHoliday(Date checkDate){
|
||||||
|
if(checkDate == null){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return checkHoliday(DateUtils.parseDateToStr("yyyy-MM-dd", checkDate));
|
||||||
|
}
|
||||||
|
/***
|
||||||
|
* 检查日期是否为假期
|
||||||
|
* @param checkDate
|
||||||
|
* @return true: 是 false: 不是
|
||||||
|
*/
|
||||||
|
public static Boolean checkHoliday(String checkDate){
|
||||||
|
if(StringUtils.isEmpty(checkDate)){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
//检查格式, 如果格式不匹配, 输出日志, 直接返回true
|
||||||
|
if(!Pattern.compile("").matcher(checkDate).matches()){
|
||||||
|
log.error("当前检查日期{}, 不符合检查规则", checkDate);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
//检查是否为假期
|
||||||
|
return getHoliddayList(Integer.valueOf(checkDate.substring(0,4)), 0).contains(checkDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
/***
|
||||||
|
* 获取假期范围 0 全部 1法休 2 公休
|
||||||
|
* @param year
|
||||||
|
* @Param holidayType 0 全部 1法休 2 公休
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static List<String> getHoliddayList(Integer year, Integer holidayType){
|
||||||
|
//获取当前年
|
||||||
|
RzHoliday rzHoliday = rzHolidayService.selectRzHolidayByYear(year);
|
||||||
|
Map<String, Integer> holidaysMaps = JSONObject.parseObject(rzHoliday.getHolidayInfo(), Map.class);
|
||||||
|
if(Integer.valueOf(0).equals(holidayType)){
|
||||||
|
return holidaysMaps.keySet().stream().collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
return holidaysMaps.entrySet().stream().filter(m -> holidayType.equals(m.getValue())).map(m-> m.getKey()).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,27 @@
|
|||||||
|
package com.evo.common.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 法修日维护类
|
||||||
|
*
|
||||||
|
* @ClassName:MyDateVo
|
||||||
|
* @date: 2025年05月24日 17:24
|
||||||
|
* @author: andy.shi
|
||||||
|
* @contact: 17330188597
|
||||||
|
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class HolidayParamVo {
|
||||||
|
|
||||||
|
Long id;
|
||||||
|
|
||||||
|
String holidayDate;
|
||||||
|
|
||||||
|
/***
|
||||||
|
* 假期类型, 1 法休, 2公休
|
||||||
|
*/
|
||||||
|
Integer holidayType;
|
||||||
|
|
||||||
|
Boolean add;
|
||||||
|
}
|
||||||
25
evo-admin/src/main/java/com/evo/common/vo/HolidayVo.java
Normal file
25
evo-admin/src/main/java/com/evo/common/vo/HolidayVo.java
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
package com.evo.common.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 法修日类
|
||||||
|
*
|
||||||
|
* @ClassName:HolidVo
|
||||||
|
* @date: 2025年05月24日 17:28
|
||||||
|
* @author: andy.shi
|
||||||
|
* @contact: 17330188597
|
||||||
|
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class HolidayVo {
|
||||||
|
|
||||||
|
Long holidayId;
|
||||||
|
|
||||||
|
Integer year;
|
||||||
|
|
||||||
|
List<List<List<MyDateVo>>> list = new ArrayList<>();
|
||||||
|
}
|
||||||
31
evo-admin/src/main/java/com/evo/common/vo/MyDateVo.java
Normal file
31
evo-admin/src/main/java/com/evo/common/vo/MyDateVo.java
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package com.evo.common.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 法修日维护类
|
||||||
|
*
|
||||||
|
* @ClassName:MyDateVo
|
||||||
|
* @date: 2025年05月24日 17:24
|
||||||
|
* @author: andy.shi
|
||||||
|
* @contact: 17330188597
|
||||||
|
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class MyDateVo {
|
||||||
|
|
||||||
|
Integer year;
|
||||||
|
|
||||||
|
Integer month;
|
||||||
|
|
||||||
|
Integer day;
|
||||||
|
|
||||||
|
String localDate;
|
||||||
|
|
||||||
|
Boolean holiday;
|
||||||
|
/***
|
||||||
|
* 1法休 2公休
|
||||||
|
*/
|
||||||
|
Integer holidayType;
|
||||||
|
|
||||||
|
}
|
||||||
@ -14,15 +14,22 @@ import lombok.Data;
|
|||||||
@Data
|
@Data
|
||||||
public class OptionVo {
|
public class OptionVo {
|
||||||
|
|
||||||
Long key;
|
Long value;
|
||||||
|
|
||||||
String value;
|
String label;
|
||||||
|
|
||||||
|
String listClass;
|
||||||
|
|
||||||
public OptionVo() {
|
public OptionVo() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public OptionVo(Long key, String value) {
|
public OptionVo(Long value, String label) {
|
||||||
this.key = key;
|
|
||||||
this.value = value;
|
this.value = value;
|
||||||
|
this.label = label;
|
||||||
|
}
|
||||||
|
public OptionVo(Long value, String label, String listClass) {
|
||||||
|
this.value = value;
|
||||||
|
this.label = label;
|
||||||
|
this.listClass = listClass;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -25,6 +25,7 @@ import com.evo.system.domain.SysStaffDetail;
|
|||||||
import com.evo.system.mapper.SysDeptMapper;
|
import com.evo.system.mapper.SysDeptMapper;
|
||||||
import com.evo.system.mapper.SysStaffDetailMapper;
|
import com.evo.system.mapper.SysStaffDetailMapper;
|
||||||
import com.evo.system.mapper.SysStaffMapper;
|
import com.evo.system.mapper.SysStaffMapper;
|
||||||
|
import com.evo.system.service.ISysDictDataService;
|
||||||
import com.evo.utils.DateUtil;
|
import com.evo.utils.DateUtil;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
@ -66,7 +67,8 @@ public class RzSalaryDetailServiceImpl implements IRzSalaryDetailService
|
|||||||
private SysDeptMapper deptMapper; //部门
|
private SysDeptMapper deptMapper; //部门
|
||||||
@Resource
|
@Resource
|
||||||
private RzSpecialOverTimeMapper rzSpecialOverTimeMapper;
|
private RzSpecialOverTimeMapper rzSpecialOverTimeMapper;
|
||||||
|
@Resource
|
||||||
|
private ISysDictDataService sysDictDataService;
|
||||||
/**
|
/**
|
||||||
* 查询工资详情
|
* 查询工资详情
|
||||||
*
|
*
|
||||||
@ -352,79 +354,91 @@ public class RzSalaryDetailServiceImpl implements IRzSalaryDetailService
|
|||||||
//获取统计月份
|
//获取统计月份
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = Calendar.getInstance();
|
||||||
calendar.setTime(month);
|
calendar.setTime(month);
|
||||||
//获取全年天数 - 节假日天数
|
//获取当前月
|
||||||
int days = calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
|
Integer monthNum = calendar.getActualMaximum(Calendar.MONTH);
|
||||||
SimpleDateFormat sdfm = new SimpleDateFormat("yyyy-MM");
|
//根据当前月获取字典信息
|
||||||
SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd");
|
String wordDays = sysDictDataService.selectDictValue("sys_work_days", monthNum+"月");
|
||||||
|
// rzHolidayMapper.selectList();
|
||||||
|
//获取假期信息
|
||||||
//判断假期和特殊上班时间
|
//判断假期和特殊上班时间
|
||||||
List<RzHoliday> h_list = rzHolidayMapper.selectRzHolidayList(null);
|
// List<RzHoliday> h_list = rzHolidayMapper.selectRzHolidayList(null);
|
||||||
try{
|
|
||||||
//获取统计月所在年的开始和结束时间,统计一年的工作日期
|
return null;
|
||||||
String start = sdfm.format(month).split("-")[0] + "-01-01";
|
|
||||||
String end = sdfm.format(month).split("-")[0] + "-12-31";
|
|
||||||
days -= DateUtil.isWeeked(sdfd.parse(start),sdfd.parse(end),1);
|
|
||||||
for (RzHoliday rzHoliday : h_list) {
|
// //获取全年天数 - 节假日天数
|
||||||
if(rzHoliday.getHoliday().after(sdfd.parse(sdfm.format(month)+"-01"))
|
// int days = calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
|
||||||
&& rzHoliday.getHoliday().before(sdfd.parse(sdfm.format(month)+"-" + calendar.get(Calendar.DAY_OF_MONTH)))){
|
// SimpleDateFormat sdfm = new SimpleDateFormat("yyyy-MM");
|
||||||
if("1".equals(rzHoliday.getSpecialFlag())){
|
// SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
days += 1;
|
// //判断假期和特殊上班时间
|
||||||
}
|
// List<RzHoliday> h_list = rzHolidayMapper.selectRzHolidayList(null);
|
||||||
}
|
// try{
|
||||||
}
|
// //获取统计月所在年的开始和结束时间,统计一年的工作日期
|
||||||
}catch (Exception e){
|
// String start = sdfm.format(monthNum).split("-")[0] + "-01-01";
|
||||||
e.printStackTrace();
|
// String end = sdfm.format(monthNum).split("-")[0] + "-12-31";
|
||||||
}
|
// days -= DateUtil.isWeeked(sdfd.parse(start),sdfd.parse(end),1);
|
||||||
//记录工资详情
|
// for (RzHoliday rzHoliday : h_list) {
|
||||||
SysStaffDetail sysStaffDetail = sysStaffDetailMapper.selectSysStaffDetailByStaffId(sysStaff.getUserId());
|
// if(rzHoliday.getHoliday().after(sdfd.parse(sdfm.format(monthNum)+"-01")) && rzHoliday.getHoliday().before(sdfd.parse(sdfm.format(monthNum)+"-" + calendar.get(Calendar.DAY_OF_MONTH)))){
|
||||||
//补助扣除比例
|
// if("1".equals(rzHoliday.getSpecialFlag())){
|
||||||
BigDecimal bfb = new BigDecimal("0.00");
|
// days += 1;
|
||||||
//获取考勤统计
|
// }
|
||||||
RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(sysStaff.getUserId(),month);
|
// }
|
||||||
//判断入职日期,社保缴纳日期以前入职,计算补助扣除比例
|
// }
|
||||||
if(sysStaff.getEmploymentDate().before(date)){
|
// }catch (Exception e){
|
||||||
//计算请假百分比
|
// e.printStackTrace();
|
||||||
BigDecimal b = rzAttendanceStatistical.getAbsenteeism().divide(new BigDecimal("4"));
|
// }
|
||||||
bfb = b.multiply(new BigDecimal(Constants.SUBSIDY_PROPORTION));
|
// //记录工资详情
|
||||||
sysStaffDetail.setAbsenteeismSubsidies(bfb);
|
// SysStaffDetail sysStaffDetail = sysStaffDetailMapper.selectSysStaffDetailByStaffId(sysStaff.getUserId());
|
||||||
}else{
|
// //补助扣除比例
|
||||||
sysStaffDetail.setAbsenteeismSubsidies(new BigDecimal("1.00"));
|
// BigDecimal bfb = new BigDecimal("0.00");
|
||||||
}
|
// //获取考勤统计
|
||||||
// sysStaffDetail.setNightShiftSubsidies(sysStaffDetail.getNightShiftSubsidies().multiply(new BigDecimal(rzAttendanceStatistical.getNightNumber())));
|
// RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(sysStaff.getUserId(), monthNum);
|
||||||
// sysStaffDetail.setDinnerSubsidies(sysStaffDetail.getDinnerSubsidies().multiply(new BigDecimal(rzAttendanceStatistical.getNightNumber())));
|
// //判断入职日期,社保缴纳日期以前入职,计算补助扣除比例
|
||||||
//是否打卡
|
// if(sysStaff.getEmploymentDate().before(date)){
|
||||||
if("否".equals(sysStaff.getClockIn())){
|
// //计算请假百分比
|
||||||
return sysStaffDetail;
|
// BigDecimal b = rzAttendanceStatistical.getAbsenteeism().divide(new BigDecimal("4"));
|
||||||
}
|
// bfb = b.multiply(new BigDecimal(Constants.SUBSIDY_PROPORTION));
|
||||||
//查询员工考勤月的考勤
|
// sysStaffDetail.setAbsenteeismSubsidies(bfb);
|
||||||
List<RzAttendance> att_list = rzAttendanceMapper.queryMonthAttendanceByStaffId(sysStaff.getUserId(),month);
|
// }else{
|
||||||
//判断是日工资
|
// sysStaffDetail.setAbsenteeismSubsidies(new BigDecimal("1.00"));
|
||||||
if(sysStaffDetail.getDailyWage().doubleValue() > 0) {
|
// }
|
||||||
//额薪资日期在工资月下一个月
|
//// sysStaffDetail.setNightShiftSubsidies(sysStaffDetail.getNightShiftSubsidies().multiply(new BigDecimal(rzAttendanceStatistical.getNightNumber())));
|
||||||
calendar.set(Calendar.MONTH,1);
|
//// sysStaffDetail.setDinnerSubsidies(sysStaffDetail.getDinnerSubsidies().multiply(new BigDecimal(rzAttendanceStatistical.getNightNumber())));
|
||||||
//全额薪资日期在工资月以前
|
// //是否打卡
|
||||||
if(sysStaff.getWagesRatioDate().before(month)) {
|
// if("否".equals(sysStaff.getClockIn())){
|
||||||
sysStaffDetail.setBasicSalary(sysStaffDetail.getDailyWage().divide(new BigDecimal("8.0"),2, RoundingMode.HALF_UP)
|
// return sysStaffDetail;
|
||||||
.multiply(rzAttendanceStatistical.getRealAttendance().add(rzAttendanceStatistical.getWorkOvertimeNumber())));
|
// }
|
||||||
}else if(sysStaff.getWagesRatioDate().after(calendar.getTime())) {
|
// //查询员工考勤月的考勤
|
||||||
sysStaffDetail.setBasicSalary(sysStaffDetail.getDailyWage().divide(new BigDecimal("8.0"),2, RoundingMode.HALF_UP)
|
// List<RzAttendance> att_list = rzAttendanceMapper.queryMonthAttendanceByStaffId(sysStaff.getUserId(), monthNum);
|
||||||
.multiply(rzAttendanceStatistical.getRealAttendance().add(rzAttendanceStatistical.getWorkOvertimeNumber())).multiply(new BigDecimal(Constants.SUBSIDY_PERIOD)));
|
// //判断是日工资
|
||||||
}else {
|
// if(sysStaffDetail.getDailyWage().doubleValue() > 0) {
|
||||||
//根据转正日期,查询员工的打卡信息
|
// //额薪资日期在工资月下一个月
|
||||||
BigDecimal att_work = new BigDecimal("0.0");
|
// calendar.set(Calendar.MONTH,1);
|
||||||
for (RzAttendance rzAttendance : att_list) {
|
// //全额薪资日期在工资月以前
|
||||||
if(rzAttendance.getAttendanceDate().before(sysStaff.getWagesRatioDate())) {
|
// if(sysStaff.getWagesRatioDate().before(monthNum)) {
|
||||||
att_work = att_work.add(rzAttendance.getWorkSum());
|
// sysStaffDetail.setBasicSalary(sysStaffDetail.getDailyWage().divide(new BigDecimal("8.0"),2, RoundingMode.HALF_UP)
|
||||||
}
|
// .multiply(rzAttendanceStatistical.getRealAttendance().add(rzAttendanceStatistical.getWorkOvertimeNumber())));
|
||||||
}
|
// }else if(sysStaff.getWagesRatioDate().after(calendar.getTime())) {
|
||||||
//未转正需要扣除的工资
|
// sysStaffDetail.setBasicSalary(sysStaffDetail.getDailyWage().divide(new BigDecimal("8.0"),2, RoundingMode.HALF_UP)
|
||||||
BigDecimal work = sysStaffDetail.getDailyWage().divide(new BigDecimal("8.0"),2, RoundingMode.HALF_UP).multiply(att_work).multiply(new BigDecimal(Constants.SUBSIDY_PERIOD_1));
|
// .multiply(rzAttendanceStatistical.getRealAttendance().add(rzAttendanceStatistical.getWorkOvertimeNumber())).multiply(new BigDecimal(Constants.SUBSIDY_PERIOD)));
|
||||||
sysStaffDetail.setBasicSalary(sysStaffDetail.getDailyWage().divide(new BigDecimal("8.0"),2, RoundingMode.HALF_UP)
|
// }else {
|
||||||
.multiply(rzAttendanceStatistical.getRealAttendance().add(rzAttendanceStatistical.getWorkOvertimeNumber())).subtract(work));
|
// //根据转正日期,查询员工的打卡信息
|
||||||
}
|
// BigDecimal att_work = new BigDecimal("0.0");
|
||||||
sysStaffDetail.setOverWages(sysStaffDetail.getDailyWage().divide(new BigDecimal("8.0"),2, RoundingMode.HALF_UP).multiply(rzAttendanceStatistical.getWorkOvertimeNumber()));
|
// for (RzAttendance rzAttendance : att_list) {
|
||||||
sysStaffDetail.setAbsenteeismSalary(new BigDecimal("0.00"));
|
// if(rzAttendance.getAttendanceDate().before(sysStaff.getWagesRatioDate())) {
|
||||||
|
// att_work = att_work.add(rzAttendance.getWorkSum());
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// //未转正需要扣除的工资
|
||||||
|
// BigDecimal work = sysStaffDetail.getDailyWage().divide(new BigDecimal("8.0"),2, RoundingMode.HALF_UP).multiply(att_work).multiply(new BigDecimal(Constants.SUBSIDY_PERIOD_1));
|
||||||
|
// sysStaffDetail.setBasicSalary(sysStaffDetail.getDailyWage().divide(new BigDecimal("8.0"),2, RoundingMode.HALF_UP)
|
||||||
|
// .multiply(rzAttendanceStatistical.getRealAttendance().add(rzAttendanceStatistical.getWorkOvertimeNumber())).subtract(work));
|
||||||
|
// }
|
||||||
|
// sysStaffDetail.setOverWages(sysStaffDetail.getDailyWage().divide(new BigDecimal("8.0"),2, RoundingMode.HALF_UP).multiply(rzAttendanceStatistical.getWorkOvertimeNumber()));
|
||||||
|
// sysStaffDetail.setAbsenteeismSalary(new BigDecimal("0.00"));
|
||||||
// sysStaffDetail.setMiddleSubsidies(sysStaffDetail.getMiddleSubsidies().multiply(new BigDecimal(rzAttendanceStatistical.getMiddleShiftNumber())));
|
// sysStaffDetail.setMiddleSubsidies(sysStaffDetail.getMiddleSubsidies().multiply(new BigDecimal(rzAttendanceStatistical.getMiddleShiftNumber())));
|
||||||
}
|
// }
|
||||||
//判断是小时工
|
//判断是小时工
|
||||||
// if(sysStaffDetail.getHoursSalary().doubleValue() > 0) {
|
// if(sysStaffDetail.getHoursSalary().doubleValue() > 0) {
|
||||||
// //额薪资日期在工资月下一个月
|
// //额薪资日期在工资月下一个月
|
||||||
@ -450,55 +464,55 @@ public class RzSalaryDetailServiceImpl implements IRzSalaryDetailService
|
|||||||
// sysStaffDetail.setAbsenteeismSalary(new BigDecimal("0.00"));
|
// sysStaffDetail.setAbsenteeismSalary(new BigDecimal("0.00"));
|
||||||
// sysStaffDetail.setMiddleSubsidies(sysStaffDetail.getMiddleSubsidies().multiply(new BigDecimal(rzAttendanceStatistical.getMiddleShiftNumber())));
|
// sysStaffDetail.setMiddleSubsidies(sysStaffDetail.getMiddleSubsidies().multiply(new BigDecimal(rzAttendanceStatistical.getMiddleShiftNumber())));
|
||||||
// }
|
// }
|
||||||
//判断是月工资
|
// //判断是月工资
|
||||||
if(sysStaffDetail.getBasicSalary().doubleValue() > 0 || sysStaffDetail.getJobsSalary().longValue() > 0) {
|
// if(sysStaffDetail.getBasicSalary().doubleValue() > 0 || sysStaffDetail.getJobsSalary().longValue() > 0) {
|
||||||
//额薪资日期在工资月下一个月
|
// //额薪资日期在工资月下一个月
|
||||||
calendar.set(Calendar.MONTH,1);
|
// calendar.set(Calendar.MONTH,1);
|
||||||
//全额薪资日期在工资月以前
|
// //全额薪资日期在工资月以前
|
||||||
if(sysStaff.getWagesRatioDate().before(month)) {
|
// if(sysStaff.getWagesRatioDate().before(monthNum)) {
|
||||||
sysStaffDetail.setBasicSalary(sysStaffDetail.getBasicSalary().add(sysStaffDetail.getJobsSalary()));
|
// sysStaffDetail.setBasicSalary(sysStaffDetail.getBasicSalary().add(sysStaffDetail.getJobsSalary()));
|
||||||
}else if(sysStaff.getWagesRatioDate().after(calendar.getTime())) {
|
// }else if(sysStaff.getWagesRatioDate().after(calendar.getTime())) {
|
||||||
BigDecimal hours = sysStaffDetail.getBasicSalary().add(sysStaffDetail.getJobsSalary()).divide(rzAttendanceStatistical.getShouldAttendance(),2, RoundingMode.HALF_UP);
|
// BigDecimal hours = sysStaffDetail.getBasicSalary().add(sysStaffDetail.getJobsSalary()).divide(rzAttendanceStatistical.getShouldAttendance(),2, RoundingMode.HALF_UP);
|
||||||
sysStaffDetail.setBasicSalary(hours.multiply(rzAttendanceStatistical.getRealAttendance()).multiply(new BigDecimal(Constants.SUBSIDY_PERIOD)));
|
// sysStaffDetail.setBasicSalary(hours.multiply(rzAttendanceStatistical.getRealAttendance()).multiply(new BigDecimal(Constants.SUBSIDY_PERIOD)));
|
||||||
}else {
|
// }else {
|
||||||
//根据转正日期,查询员工的打卡信息
|
// //根据转正日期,查询员工的打卡信息
|
||||||
BigDecimal att_work = new BigDecimal("0.0");
|
// BigDecimal att_work = new BigDecimal("0.0");
|
||||||
for (RzAttendance rzAttendance : att_list) {
|
// for (RzAttendance rzAttendance : att_list) {
|
||||||
if(rzAttendance.getAttendanceDate().before(sysStaff.getWagesRatioDate())) {
|
// if(rzAttendance.getAttendanceDate().before(sysStaff.getWagesRatioDate())) {
|
||||||
att_work = att_work.add(rzAttendance.getWorkSum());
|
// att_work = att_work.add(rzAttendance.getWorkSum());
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
//未转正需要扣除的工资
|
// //未转正需要扣除的工资
|
||||||
BigDecimal work = sysStaffDetail.getBasicSalary().add(sysStaffDetail.getJobsSalary()).divide(rzAttendanceStatistical.getShouldAttendance(),2, RoundingMode.HALF_UP)
|
// BigDecimal work = sysStaffDetail.getBasicSalary().add(sysStaffDetail.getJobsSalary()).divide(rzAttendanceStatistical.getShouldAttendance(),2, RoundingMode.HALF_UP)
|
||||||
.multiply(att_work).multiply(new BigDecimal(Constants.SUBSIDY_PERIOD_1));
|
// .multiply(att_work).multiply(new BigDecimal(Constants.SUBSIDY_PERIOD_1));
|
||||||
sysStaffDetail.setBasicSalary(sysStaffDetail.getBasicSalary().add(sysStaffDetail.getJobsSalary()).subtract(work));
|
// sysStaffDetail.setBasicSalary(sysStaffDetail.getBasicSalary().add(sysStaffDetail.getJobsSalary()).subtract(work));
|
||||||
}
|
// }
|
||||||
//计算月工资的每小时,工资
|
// //计算月工资的每小时,工资
|
||||||
BigDecimal evrymoney = sysStaffDetail.getBasicSalary().multiply(new BigDecimal("11.00"))
|
// BigDecimal evrymoney = sysStaffDetail.getBasicSalary().multiply(new BigDecimal("11.00"))
|
||||||
.add(sysStaffDetail.getBasicSalary().multiply(new BigDecimal(Constants.SUBSIDY_PERIOD)))
|
// .add(sysStaffDetail.getBasicSalary().multiply(new BigDecimal(Constants.SUBSIDY_PERIOD)))
|
||||||
.divide(new BigDecimal(days).multiply(new BigDecimal("8.00")),2, RoundingMode.HALF_UP);
|
// .divide(new BigDecimal(days).multiply(new BigDecimal("8.00")),2, RoundingMode.HALF_UP);
|
||||||
sysStaffDetail.setAbsenteeismSalary(evrymoney.multiply(rzAttendanceStatistical.getShouldAttendance().subtract(rzAttendanceStatistical.getRealAttendance())));
|
// sysStaffDetail.setAbsenteeismSalary(evrymoney.multiply(rzAttendanceStatistical.getShouldAttendance().subtract(rzAttendanceStatistical.getRealAttendance())));
|
||||||
// sysStaffDetail.setMiddleSubsidies(new BigDecimal("0.00"));
|
//// sysStaffDetail.setMiddleSubsidies(new BigDecimal("0.00"));
|
||||||
//根据用户获取当前的加班情况
|
// //根据用户获取当前的加班情况
|
||||||
RzSpecialOverTime rSpecialOverTime = rzSpecialOverTimeMapper.selectRzSpecialOverTimeByUserIdAndDate(sysStaff.getUserId(),month);
|
// RzSpecialOverTime rSpecialOverTime = rzSpecialOverTimeMapper.selectRzSpecialOverTimeByUserIdAndDate(sysStaff.getUserId(), monthNum);
|
||||||
if(StringUtils.isNull(rSpecialOverTime)){
|
// if(StringUtils.isNull(rSpecialOverTime)){
|
||||||
sysStaffDetail.setOverWages(new BigDecimal("0.00"));
|
// sysStaffDetail.setOverWages(new BigDecimal("0.00"));
|
||||||
}else{
|
// }else{
|
||||||
sysStaffDetail.setOverWages(evrymoney.multiply(rSpecialOverTime.getSickHours()));
|
// sysStaffDetail.setOverWages(evrymoney.multiply(rSpecialOverTime.getSickHours()));
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
//判断员工的上班时长,设置保险的补交
|
// //判断员工的上班时长,设置保险的补交
|
||||||
BigDecimal baifenbi = rzAttendanceStatistical.getRealAttendance().divide(rzAttendanceStatistical.getShouldAttendance(),2, RoundingMode.HALF_UP);
|
// BigDecimal baifenbi = rzAttendanceStatistical.getRealAttendance().divide(rzAttendanceStatistical.getShouldAttendance(),2, RoundingMode.HALF_UP);
|
||||||
if(baifenbi.compareTo(new BigDecimal("0.20")) > 0 && baifenbi.compareTo(new BigDecimal("0.40")) <= 0){
|
// if(baifenbi.compareTo(new BigDecimal("0.20")) > 0 && baifenbi.compareTo(new BigDecimal("0.40")) <= 0){
|
||||||
sysStaffDetail.setCountInsurance(sysStaffDetail.getCountInsurance().multiply(new BigDecimal("0.70")));
|
// sysStaffDetail.setCountInsurance(sysStaffDetail.getCountInsurance().multiply(new BigDecimal("0.70")));
|
||||||
}else if(baifenbi.compareTo(new BigDecimal("0.40")) > 0 && baifenbi.compareTo(new BigDecimal("0.60")) <= 0){
|
// }else if(baifenbi.compareTo(new BigDecimal("0.40")) > 0 && baifenbi.compareTo(new BigDecimal("0.60")) <= 0){
|
||||||
sysStaffDetail.setCountInsurance(sysStaffDetail.getCountInsurance().multiply(new BigDecimal("0.50")));
|
// sysStaffDetail.setCountInsurance(sysStaffDetail.getCountInsurance().multiply(new BigDecimal("0.50")));
|
||||||
}else if(baifenbi.compareTo(new BigDecimal("0.60")) > 0){
|
// }else if(baifenbi.compareTo(new BigDecimal("0.60")) > 0){
|
||||||
sysStaffDetail.setCountInsurance(sysStaffDetail.getCountInsurance());
|
// sysStaffDetail.setCountInsurance(sysStaffDetail.getCountInsurance());
|
||||||
}else{
|
// }else{
|
||||||
sysStaffDetail.setCountInsurance(new BigDecimal("0.00"));
|
// sysStaffDetail.setCountInsurance(new BigDecimal("0.00"));
|
||||||
}
|
// }
|
||||||
return sysStaffDetail;
|
// return sysStaffDetail;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 修改工资详情
|
* 修改工资详情
|
||||||
|
|||||||
@ -1,17 +1,32 @@
|
|||||||
package com.evo.personnelMatters.controller;
|
package com.evo.personnelMatters.controller;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.JSON;
|
||||||
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import com.evo.common.annotation.Log;
|
import com.evo.common.annotation.Log;
|
||||||
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;
|
||||||
import com.evo.common.enums.BusinessType;
|
import com.evo.common.enums.BusinessType;
|
||||||
|
import com.evo.common.utils.Collections;
|
||||||
|
import com.evo.common.utils.DateUtils;
|
||||||
import com.evo.common.utils.SecurityUtils;
|
import com.evo.common.utils.SecurityUtils;
|
||||||
|
import com.evo.common.utils.StringUtils;
|
||||||
|
import com.evo.common.vo.HolidayParamVo;
|
||||||
|
import com.evo.common.vo.HolidayVo;
|
||||||
|
import com.evo.common.vo.MyDateVo;
|
||||||
import com.evo.personnelMatters.domain.RzHoliday;
|
import com.evo.personnelMatters.domain.RzHoliday;
|
||||||
import com.evo.personnelMatters.service.IRzHolidayService;
|
import com.evo.personnelMatters.service.IRzHolidayService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import java.util.List;
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.temporal.ChronoUnit;
|
||||||
|
import java.time.temporal.TemporalAdjusters;
|
||||||
|
import java.time.temporal.WeekFields;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 假期管理Controller
|
* 假期管理Controller
|
||||||
@ -23,41 +38,73 @@ import java.util.List;
|
|||||||
@RequestMapping("/personnelMatters/holiday")
|
@RequestMapping("/personnelMatters/holiday")
|
||||||
public class RzHolidayController extends BaseController
|
public class RzHolidayController extends BaseController
|
||||||
{
|
{
|
||||||
@Autowired
|
@Resource
|
||||||
private IRzHolidayService rzHolidayService;
|
private IRzHolidayService rzHolidayService;
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* 查询假期管理列表
|
// * 查询假期管理列表
|
||||||
*/
|
// */
|
||||||
@PreAuthorize("@ss.hasPermi('personnelMatters:holiday:list')")
|
// @PreAuthorize("@ss.hasPermi('personnelMatters:holiday:list')")
|
||||||
@GetMapping("/list")
|
// @GetMapping("/list")
|
||||||
public TableDataInfo list(RzHoliday rzHoliday)
|
// public TableDataInfo list(RzHoliday rzHoliday)
|
||||||
{
|
// {
|
||||||
startPage();
|
// startPage();
|
||||||
List<RzHoliday> list = rzHolidayService.selectRzHolidayList(rzHoliday);
|
// List<RzHoliday> list = rzHolidayService.selectRzHolidayList(rzHoliday);
|
||||||
return getDataTable(list);
|
// return getDataTable(list);
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取假期管理详细信息
|
* 获取假期管理详细信息
|
||||||
*/
|
*/
|
||||||
@PreAuthorize("@ss.hasPermi('personnelMatters:holiday:query')")
|
@PreAuthorize("@ss.hasPermi('personnelMatters:holiday:query')")
|
||||||
@GetMapping(value = "/{id}")
|
@GetMapping("/pageInfo/{year}")
|
||||||
public AjaxResult getInfo(@PathVariable("id") Long id)
|
public AjaxResult pageInfo(@PathVariable("year") Integer year)
|
||||||
{
|
{
|
||||||
return success(rzHolidayService.selectRzHolidayById(id));
|
if(year == null){
|
||||||
|
year = Integer.parseInt(new SimpleDateFormat("yyyy").format(new Date()));
|
||||||
}
|
}
|
||||||
|
RzHoliday holiday = rzHolidayService.selectRzHolidayByYear(year);
|
||||||
|
Map<String, Integer> holidaysMaps = JSONObject.parseObject(holiday.getHolidayInfo(), Map.class);
|
||||||
|
|
||||||
/**
|
HolidayVo result = new HolidayVo();
|
||||||
* 新增假期管理
|
result.setHolidayId(holiday.getId());
|
||||||
*/
|
result.setYear(year);
|
||||||
@PreAuthorize("@ss.hasPermi('personnelMatters:holiday:add')")
|
|
||||||
@Log(title = "假期管理", businessType = BusinessType.INSERT)
|
WeekFields weekFields = WeekFields.of(Locale.getDefault());
|
||||||
@PostMapping
|
List<List<List<MyDateVo>>> list = new ArrayList<>();
|
||||||
public AjaxResult add(@RequestBody RzHoliday rzHoliday)
|
//遍历12个月
|
||||||
{
|
for (int i = 1; i <= 12; i++){
|
||||||
rzHoliday.setCreateBy(SecurityUtils.getUsername());
|
List<List<MyDateVo>> weekList = new ArrayList<>();
|
||||||
return rzHolidayService.insertRzHoliday(rzHoliday);
|
list.add(weekList);
|
||||||
|
//card展示第一天
|
||||||
|
LocalDate firstDayOfMonth = LocalDate.of(year, i, 1);
|
||||||
|
LocalDate firstDay = firstDayOfMonth.with(weekFields.dayOfWeek(), 1);
|
||||||
|
//card展示最后一天
|
||||||
|
LocalDate lastDayOfMonth = firstDayOfMonth.with(TemporalAdjusters.lastDayOfMonth());
|
||||||
|
LocalDate lastDay = lastDayOfMonth.with(weekFields.dayOfWeek(), 1).plusDays(6);
|
||||||
|
//这个月有几周
|
||||||
|
long weeksBetween = ChronoUnit.WEEKS.between(firstDay, lastDay);
|
||||||
|
int cou = 0;
|
||||||
|
//遍历每周
|
||||||
|
for (int j = 0; j < weeksBetween+1; j++){
|
||||||
|
List<MyDateVo> week = new ArrayList<>();
|
||||||
|
weekList.add(week);
|
||||||
|
//遍历每天
|
||||||
|
for (int k = 0; k < 7; k++){
|
||||||
|
LocalDate localDate = firstDay.plusDays(cou++);
|
||||||
|
MyDateVo myDate = new MyDateVo();
|
||||||
|
myDate.setYear(localDate.getYear());
|
||||||
|
myDate.setMonth(localDate.getMonthValue());
|
||||||
|
myDate.setDay(localDate.getDayOfMonth());
|
||||||
|
myDate.setLocalDate(localDate.toString());
|
||||||
|
myDate.setHoliday(holidaysMaps.containsKey(localDate.toString()));//是否是节假日
|
||||||
|
myDate.setHolidayType(holidaysMaps.get(localDate.toString()));//公休还是法休
|
||||||
|
week.add(myDate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result.setList(list);
|
||||||
|
return AjaxResult.success(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -65,21 +112,20 @@ public class RzHolidayController extends BaseController
|
|||||||
*/
|
*/
|
||||||
@PreAuthorize("@ss.hasPermi('personnelMatters:holiday:edit')")
|
@PreAuthorize("@ss.hasPermi('personnelMatters:holiday:edit')")
|
||||||
@Log(title = "假期管理", businessType = BusinessType.UPDATE)
|
@Log(title = "假期管理", businessType = BusinessType.UPDATE)
|
||||||
@PutMapping
|
@PostMapping("/edit")
|
||||||
public AjaxResult edit(@RequestBody RzHoliday rzHoliday)
|
public AjaxResult edit(@RequestBody HolidayParamVo holidayParamVo)
|
||||||
{
|
{
|
||||||
rzHoliday.setUpdateBy(SecurityUtils.getUsername());
|
return toAjax(rzHolidayService.updateRzHoliday(holidayParamVo));
|
||||||
return toAjax(rzHolidayService.updateRzHoliday(rzHoliday));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* 删除假期管理
|
// * 删除假期管理
|
||||||
*/
|
// */
|
||||||
@PreAuthorize("@ss.hasPermi('personnelMatters:holiday:remove')")
|
// @PreAuthorize("@ss.hasPermi('personnelMatters:holiday:remove')")
|
||||||
@Log(title = "假期管理", businessType = BusinessType.DELETE)
|
// @Log(title = "假期管理", businessType = BusinessType.DELETE)
|
||||||
@DeleteMapping("/{id}")
|
// @DeleteMapping("/{id}")
|
||||||
public AjaxResult remove(@PathVariable Long id)
|
// public AjaxResult remove(@PathVariable Long id)
|
||||||
{
|
// {
|
||||||
return toAjax(rzHolidayService.deleteRzHoliday(id,SecurityUtils.getUsername()));
|
// return toAjax(rzHolidayService.deleteRzHoliday(id,SecurityUtils.getUsername()));
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,6 +5,7 @@ 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;
|
||||||
import com.evo.common.enums.BusinessType;
|
import com.evo.common.enums.BusinessType;
|
||||||
|
import com.evo.common.utils.ParamUtils;
|
||||||
import com.evo.common.utils.SecurityUtils;
|
import com.evo.common.utils.SecurityUtils;
|
||||||
import com.evo.common.utils.poi.ExcelUtil;
|
import com.evo.common.utils.poi.ExcelUtil;
|
||||||
import com.evo.personnelMatters.domain.RzLeave;
|
import com.evo.personnelMatters.domain.RzLeave;
|
||||||
@ -15,6 +16,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
|
|||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 请假管理Controller
|
* 请假管理Controller
|
||||||
@ -41,6 +43,12 @@ public class RzLeaveController extends BaseController
|
|||||||
return getDataTable(list);
|
return getDataTable(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/autoTypeList")
|
||||||
|
public AjaxResult autoTypeList()
|
||||||
|
{
|
||||||
|
return AjaxResult.success(ParamUtils.autoCalculationHolidayType().stream().map(Integer::valueOf).collect(Collectors.toList()));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 导出请假管理列表
|
* 导出请假管理列表
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -30,11 +30,9 @@ public class RzLeaveDetailController extends BaseController
|
|||||||
*/
|
*/
|
||||||
@PreAuthorize("@ss.hasPermi('personnelMatters:leaveDetail:list')")
|
@PreAuthorize("@ss.hasPermi('personnelMatters:leaveDetail:list')")
|
||||||
@GetMapping("/list")
|
@GetMapping("/list")
|
||||||
public TableDataInfo list(RzLeaveDetail rzLeaveDetail)
|
public AjaxResult list(RzLeaveDetail rzLeaveDetail)
|
||||||
{
|
{
|
||||||
startPage();
|
return AjaxResult.success(rzLeaveDetailService.selectRzLeaveDetailList(rzLeaveDetail));
|
||||||
List<RzLeaveDetail> list = rzLeaveDetailService.selectRzLeaveDetailList(rzLeaveDetail);
|
|
||||||
return getDataTable(list);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -79,4 +77,12 @@ public class RzLeaveDetailController extends BaseController
|
|||||||
{
|
{
|
||||||
return rzLeaveDetailService.deleteRzLeaveDetailById(id);
|
return rzLeaveDetailService.deleteRzLeaveDetailById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping("/calculationLeaveHour")
|
||||||
|
public AjaxResult calculationLeaveHour(@RequestBody RzLeaveDetail rzLeaveDetail)
|
||||||
|
{
|
||||||
|
return AjaxResult.success(rzLeaveDetailService.calculationLeaveHour(rzLeaveDetail));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,8 +1,11 @@
|
|||||||
package com.evo.personnelMatters.domain;
|
package com.evo.personnelMatters.domain;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import com.evo.common.annotation.Excel;
|
import com.evo.common.annotation.Excel;
|
||||||
import com.evo.common.core.domain.BaseEntity;
|
import com.evo.common.core.domain.BaseEntity;
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.ToString;
|
||||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||||
|
|
||||||
@ -14,6 +17,9 @@ import java.util.Date;
|
|||||||
* @author chenyj
|
* @author chenyj
|
||||||
* @date 2024-08-03
|
* @date 2024-08-03
|
||||||
*/
|
*/
|
||||||
|
@Data
|
||||||
|
@ToString
|
||||||
|
@TableName(value = "bs_holidays")
|
||||||
public class RzHoliday extends BaseEntity
|
public class RzHoliday extends BaseEntity
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
@ -21,74 +27,9 @@ public class RzHoliday extends BaseEntity
|
|||||||
/** 主键 */
|
/** 主键 */
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
/** 假期时间 */
|
/** 年信息 */
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
private Integer year;
|
||||||
@Excel(name = "假期时间", width = 30, dateFormat = "yyyy-MM-dd")
|
/** 假期信息, 采用json格式存储 一个日期对应一个名称 */
|
||||||
private Date holiday;
|
private String holidayInfo;
|
||||||
|
|
||||||
/** 假期说明 */
|
|
||||||
@Excel(name = "假期说明")
|
|
||||||
private String remarks;
|
|
||||||
|
|
||||||
@Excel(name = "特殊标识")
|
|
||||||
private String specialFlag;
|
|
||||||
//删除标识
|
|
||||||
private String delFlag;
|
|
||||||
|
|
||||||
public void setId(Long id)
|
|
||||||
{
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getId()
|
|
||||||
{
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
public void setHoliday(Date holiday)
|
|
||||||
{
|
|
||||||
this.holiday = holiday;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getHoliday()
|
|
||||||
{
|
|
||||||
return holiday;
|
|
||||||
}
|
|
||||||
public void setRemarks(String remarks)
|
|
||||||
{
|
|
||||||
this.remarks = remarks;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRemarks()
|
|
||||||
{
|
|
||||||
return remarks;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDelFlag() {
|
|
||||||
return delFlag;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDelFlag(String delFlag) {
|
|
||||||
this.delFlag = delFlag;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getSpecialFlag() {
|
|
||||||
return specialFlag;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSpecialFlag(String specialFlag) {
|
|
||||||
this.specialFlag = specialFlag;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
|
||||||
.append("id", getId())
|
|
||||||
.append("holiday", getHoliday())
|
|
||||||
.append("remarks", getRemarks())
|
|
||||||
.append("createBy", getCreateBy())
|
|
||||||
.append("createTime", getCreateTime())
|
|
||||||
.append("updateBy", getUpdateBy())
|
|
||||||
.append("updateTime", getUpdateTime())
|
|
||||||
.toString();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package com.evo.personnelMatters.domain;
|
|||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import lombok.Data;
|
||||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||||
import com.evo.common.annotation.Excel;
|
import com.evo.common.annotation.Excel;
|
||||||
@ -14,6 +15,7 @@ import com.evo.common.core.domain.BaseEntity;
|
|||||||
* @author evo
|
* @author evo
|
||||||
* @date 2025-03-15
|
* @date 2025-03-15
|
||||||
*/
|
*/
|
||||||
|
@Data
|
||||||
public class RzLeave extends BaseEntity
|
public class RzLeave extends BaseEntity
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
@ -35,9 +37,9 @@ public class RzLeave extends BaseEntity
|
|||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
/** 请假月份(到月) */
|
/** 请假月份(到月) */
|
||||||
@Excel(name = "请假月份", readConverterExp = "到=月", dateFormat = "yyyy-MM")
|
// @Excel(name = "请假月份", readConverterExp = "到=月", dateFormat = "yyyy-MM")
|
||||||
@JsonFormat(pattern = "yyyy-MM")
|
// @JsonFormat(pattern = "yyyy-MM")
|
||||||
private Date leaveDate;
|
// private Date leaveDate;
|
||||||
|
|
||||||
/** 病假时长(小时) */
|
/** 病假时长(小时) */
|
||||||
@Excel(name = "病假时长", readConverterExp = "小=时")
|
@Excel(name = "病假时长", readConverterExp = "小=时")
|
||||||
@ -78,150 +80,6 @@ public class RzLeave extends BaseEntity
|
|||||||
/** 删除标识 */
|
/** 删除标识 */
|
||||||
private String delFlag;
|
private String delFlag;
|
||||||
|
|
||||||
public void setId(Long id)
|
|
||||||
{
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getId()
|
|
||||||
{
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
public void setUserId(Long userId)
|
|
||||||
{
|
|
||||||
this.userId = userId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getUserId()
|
|
||||||
{
|
|
||||||
return userId;
|
|
||||||
}
|
|
||||||
public void setDeptId(Long deptId)
|
|
||||||
{
|
|
||||||
this.deptId = deptId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getDeptId()
|
|
||||||
{
|
|
||||||
return deptId;
|
|
||||||
}
|
|
||||||
public void setName(String name)
|
|
||||||
{
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName()
|
|
||||||
{
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
public void setLeaveDate(Date leaveDate)
|
|
||||||
{
|
|
||||||
this.leaveDate = leaveDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getLeaveDate()
|
|
||||||
{
|
|
||||||
return leaveDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDeptName() {
|
|
||||||
return deptName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDeptName(String deptName) {
|
|
||||||
this.deptName = deptName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSickHours(Integer sickHours)
|
|
||||||
{
|
|
||||||
this.sickHours = sickHours;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getSickHours()
|
|
||||||
{
|
|
||||||
return sickHours;
|
|
||||||
}
|
|
||||||
public void setAbsenceHours(Integer absenceHours)
|
|
||||||
{
|
|
||||||
this.absenceHours = absenceHours;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getAbsenceHours()
|
|
||||||
{
|
|
||||||
return absenceHours;
|
|
||||||
}
|
|
||||||
public void setCompensatoryHours(Integer compensatoryHours)
|
|
||||||
{
|
|
||||||
this.compensatoryHours = compensatoryHours;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getCompensatoryHours()
|
|
||||||
{
|
|
||||||
return compensatoryHours;
|
|
||||||
}
|
|
||||||
public void setMarriageHours(Integer marriageHours)
|
|
||||||
{
|
|
||||||
this.marriageHours = marriageHours;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getMarriageHours()
|
|
||||||
{
|
|
||||||
return marriageHours;
|
|
||||||
}
|
|
||||||
public void setAnnualHours(Integer annualHours)
|
|
||||||
{
|
|
||||||
this.annualHours = annualHours;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getAnnualHours()
|
|
||||||
{
|
|
||||||
return annualHours;
|
|
||||||
}
|
|
||||||
public void setMaternityHours(Integer maternityHours)
|
|
||||||
{
|
|
||||||
this.maternityHours = maternityHours;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getMaternityHours()
|
|
||||||
{
|
|
||||||
return maternityHours;
|
|
||||||
}
|
|
||||||
public void setPaternityHours(Integer paternityHours)
|
|
||||||
{
|
|
||||||
this.paternityHours = paternityHours;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getPaternityHours()
|
|
||||||
{
|
|
||||||
return paternityHours;
|
|
||||||
}
|
|
||||||
public void setFuneralHours(Integer funeralHours)
|
|
||||||
{
|
|
||||||
this.funeralHours = funeralHours;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getFuneralHours()
|
|
||||||
{
|
|
||||||
return funeralHours;
|
|
||||||
}
|
|
||||||
public void setWorkHours(Integer workHours)
|
|
||||||
{
|
|
||||||
this.workHours = workHours;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getWorkHours()
|
|
||||||
{
|
|
||||||
return workHours;
|
|
||||||
}
|
|
||||||
public void setDelFlag(String delFlag)
|
|
||||||
{
|
|
||||||
this.delFlag = delFlag;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDelFlag()
|
|
||||||
{
|
|
||||||
return delFlag;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
@ -230,7 +88,6 @@ public class RzLeave extends BaseEntity
|
|||||||
.append("userId", getUserId())
|
.append("userId", getUserId())
|
||||||
.append("deptId", getDeptId())
|
.append("deptId", getDeptId())
|
||||||
.append("name", getName())
|
.append("name", getName())
|
||||||
.append("leaveDate", getLeaveDate())
|
|
||||||
.append("sickHours", getSickHours())
|
.append("sickHours", getSickHours())
|
||||||
.append("absenceHours", getAbsenceHours())
|
.append("absenceHours", getAbsenceHours())
|
||||||
.append("compensatoryHours", getCompensatoryHours())
|
.append("compensatoryHours", getCompensatoryHours())
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package com.evo.personnelMatters.domain;
|
|||||||
import com.evo.common.annotation.Excel;
|
import com.evo.common.annotation.Excel;
|
||||||
import com.evo.common.core.domain.BaseEntity;
|
import com.evo.common.core.domain.BaseEntity;
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import lombok.Data;
|
||||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||||
|
|
||||||
@ -15,6 +16,7 @@ import java.util.Date;
|
|||||||
* @author chenyj
|
* @author chenyj
|
||||||
* @date 2024-08-03
|
* @date 2024-08-03
|
||||||
*/
|
*/
|
||||||
|
@Data
|
||||||
public class RzLeaveDetail extends BaseEntity
|
public class RzLeaveDetail extends BaseEntity
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
@ -27,13 +29,13 @@ public class RzLeaveDetail extends BaseEntity
|
|||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
/** 请假开始时间 */
|
/** 请假开始时间 */
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||||
@Excel(name = "请假开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
|
@Excel(name = "请假开始时间", width = 30, dateFormat = "yyyy-MM-dd")
|
||||||
private Date leaveStartTime;
|
private Date leaveStartTime;
|
||||||
|
|
||||||
/** 请假结束时间 */
|
/** 请假结束时间 */
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||||
@Excel(name = "请假结束时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
|
@Excel(name = "请假结束时间", width = 30, dateFormat = "yyyy-MM-dd")
|
||||||
private Date leaveEndTime;
|
private Date leaveEndTime;
|
||||||
|
|
||||||
/** 请假时长 */
|
/** 请假时长 */
|
||||||
@ -42,91 +44,12 @@ public class RzLeaveDetail extends BaseEntity
|
|||||||
//请假汇总ID
|
//请假汇总ID
|
||||||
private Long leaveId;
|
private Long leaveId;
|
||||||
@Excel(name = "请假类型")
|
@Excel(name = "请假类型")
|
||||||
private String type; //请假类型
|
private Long type; //请假类型
|
||||||
|
|
||||||
private String remarks;
|
private String remarks;
|
||||||
|
|
||||||
private String delFlag;
|
private String delFlag;
|
||||||
|
|
||||||
public String getType() {
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setType(String type) {
|
|
||||||
this.type = type;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Long id)
|
|
||||||
{
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getId()
|
|
||||||
{
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setName(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLeaveStartTime(Date leaveStartTime)
|
|
||||||
{
|
|
||||||
this.leaveStartTime = leaveStartTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getLeaveStartTime()
|
|
||||||
{
|
|
||||||
return leaveStartTime;
|
|
||||||
}
|
|
||||||
public void setLeaveEndTime(Date leaveEndTime)
|
|
||||||
{
|
|
||||||
this.leaveEndTime = leaveEndTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getLeaveEndTime()
|
|
||||||
{
|
|
||||||
return leaveEndTime;
|
|
||||||
}
|
|
||||||
public void setLeaveHour(Integer leaveHour)
|
|
||||||
{
|
|
||||||
this.leaveHour = leaveHour;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getLeaveHour()
|
|
||||||
{
|
|
||||||
return leaveHour;
|
|
||||||
}
|
|
||||||
public void setLeaveId(Long leaveId)
|
|
||||||
{
|
|
||||||
this.leaveId = leaveId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRemarks() {
|
|
||||||
return remarks;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRemarks(String remarks) {
|
|
||||||
this.remarks = remarks;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getLeaveId()
|
|
||||||
{
|
|
||||||
return leaveId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDelFlag() {
|
|
||||||
return delFlag;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDelFlag(String delFlag) {
|
|
||||||
this.delFlag = delFlag;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package com.evo.personnelMatters.domain;
|
|||||||
import com.evo.common.annotation.Excel;
|
import com.evo.common.annotation.Excel;
|
||||||
import com.evo.common.core.domain.BaseEntity;
|
import com.evo.common.core.domain.BaseEntity;
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import lombok.Data;
|
||||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||||
|
|
||||||
@ -15,6 +16,7 @@ import java.util.Date;
|
|||||||
* @author chenyj
|
* @author chenyj
|
||||||
* @date 2024-09-03
|
* @date 2024-09-03
|
||||||
*/
|
*/
|
||||||
|
@Data
|
||||||
public class RzOverTime extends BaseEntity
|
public class RzOverTime extends BaseEntity
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
@ -41,78 +43,12 @@ public class RzOverTime extends BaseEntity
|
|||||||
/** 加班总时长(月) */
|
/** 加班总时长(月) */
|
||||||
@Excel(name = "加班总时长")
|
@Excel(name = "加班总时长")
|
||||||
private BigDecimal overHours;
|
private BigDecimal overHours;
|
||||||
|
@Excel(name = "调休总时长")
|
||||||
|
private BigDecimal taskHours;
|
||||||
|
|
||||||
/** 删除标识 */
|
/** 删除标识 */
|
||||||
private String delFlag;
|
private String delFlag;
|
||||||
|
|
||||||
public void setId(Long id)
|
|
||||||
{
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getId()
|
|
||||||
{
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getDeptId() {
|
|
||||||
return deptId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDeptId(Long deptId) {
|
|
||||||
this.deptId = deptId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDeptName() {
|
|
||||||
return deptName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setName(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDeptName(String deptName) {
|
|
||||||
this.deptName = deptName;
|
|
||||||
}
|
|
||||||
public void setOverTimeMonth(Date overTimeMonth)
|
|
||||||
{
|
|
||||||
this.overTimeMonth = overTimeMonth;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getOverTimeMonth()
|
|
||||||
{
|
|
||||||
return overTimeMonth;
|
|
||||||
}
|
|
||||||
public void setOverHours(BigDecimal overHours)
|
|
||||||
{
|
|
||||||
this.overHours = overHours;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getUserId() {
|
|
||||||
return userId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUserId(Long userId) {
|
|
||||||
this.userId = userId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BigDecimal getOverHours()
|
|
||||||
{
|
|
||||||
return overHours;
|
|
||||||
}
|
|
||||||
public void setDelFlag(String delFlag)
|
|
||||||
{
|
|
||||||
this.delFlag = delFlag;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDelFlag()
|
|
||||||
{
|
|
||||||
return delFlag;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package com.evo.personnelMatters.mapper;
|
package com.evo.personnelMatters.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.evo.personnelMatters.domain.RzHoliday;
|
import com.evo.personnelMatters.domain.RzHoliday;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -9,38 +10,8 @@ import java.util.List;
|
|||||||
* @author chenyj
|
* @author chenyj
|
||||||
* @date 2024-08-03
|
* @date 2024-08-03
|
||||||
*/
|
*/
|
||||||
public interface RzHolidayMapper
|
public interface RzHolidayMapper extends BaseMapper<RzHoliday>
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* 查询假期管理
|
|
||||||
*
|
|
||||||
* @param id 假期管理主键
|
|
||||||
* @return 假期管理
|
|
||||||
*/
|
|
||||||
public RzHoliday selectRzHolidayById(Long id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询假期管理列表
|
|
||||||
*
|
|
||||||
* @param rzHoliday 假期管理
|
|
||||||
* @return 假期管理集合
|
|
||||||
*/
|
|
||||||
public List<RzHoliday> selectRzHolidayList(RzHoliday rzHoliday);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 新增假期管理
|
|
||||||
*
|
|
||||||
* @param rzHoliday 假期管理
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
public int insertRzHoliday(RzHoliday rzHoliday);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改假期管理
|
|
||||||
*
|
|
||||||
* @param rzHoliday 假期管理
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
public int updateRzHoliday(RzHoliday rzHoliday);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,9 @@
|
|||||||
package com.evo.personnelMatters.mapper;
|
package com.evo.personnelMatters.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.evo.personnelMatters.domain.RzLeaveDetail;
|
import com.evo.personnelMatters.domain.RzLeaveDetail;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -10,7 +12,7 @@ import java.util.List;
|
|||||||
* @author chenyj
|
* @author chenyj
|
||||||
* @date 2024-08-03
|
* @date 2024-08-03
|
||||||
*/
|
*/
|
||||||
public interface RzLeaveDetailMapper
|
public interface RzLeaveDetailMapper extends BaseMapper<RzLeaveDetail>
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* 查询请假管理详情
|
* 查询请假管理详情
|
||||||
|
|||||||
@ -1,7 +1,9 @@
|
|||||||
package com.evo.personnelMatters.mapper;
|
package com.evo.personnelMatters.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.evo.personnelMatters.domain.RzOverTime;
|
import com.evo.personnelMatters.domain.RzOverTime;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -11,7 +13,7 @@ import java.util.List;
|
|||||||
* @author chenyj
|
* @author chenyj
|
||||||
* @date 2024-09-03
|
* @date 2024-09-03
|
||||||
*/
|
*/
|
||||||
public interface RzOverTimeMapper
|
public interface RzOverTimeMapper extends BaseMapper<RzOverTime>
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* 查询加班管理
|
* 查询加班管理
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package com.evo.personnelMatters.service;
|
package com.evo.personnelMatters.service;
|
||||||
|
|
||||||
import com.evo.common.core.domain.AjaxResult;
|
import com.evo.common.core.domain.AjaxResult;
|
||||||
|
import com.evo.common.vo.HolidayParamVo;
|
||||||
import com.evo.personnelMatters.domain.RzHoliday;
|
import com.evo.personnelMatters.domain.RzHoliday;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -12,44 +13,21 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
public interface IRzHolidayService
|
public interface IRzHolidayService
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询假期管理
|
* 查询假期管理
|
||||||
*
|
*
|
||||||
* @param id 假期管理主键
|
* @param year 年
|
||||||
* @return 假期管理
|
* @return 假期管理
|
||||||
*/
|
*/
|
||||||
public RzHoliday selectRzHolidayById(Long id);
|
public RzHoliday selectRzHolidayByYear(Integer year);
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询假期管理列表
|
|
||||||
*
|
|
||||||
* @param rzHoliday 假期管理
|
|
||||||
* @return 假期管理集合
|
|
||||||
*/
|
|
||||||
public List<RzHoliday> selectRzHolidayList(RzHoliday rzHoliday);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 新增假期管理
|
|
||||||
*
|
|
||||||
* @param rzHoliday 假期管理
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
public AjaxResult insertRzHoliday(RzHoliday rzHoliday);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改假期管理
|
* 修改假期管理
|
||||||
*
|
*
|
||||||
* @param rzHoliday 假期管理
|
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
public int updateRzHoliday(RzHoliday rzHoliday);
|
public Boolean updateRzHoliday(HolidayParamVo holidayParamVo);
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除数据
|
|
||||||
* @param id
|
|
||||||
* @param oprName
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public int deleteRzHoliday(Long id,String oprName);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -50,4 +50,6 @@ public interface IRzLeaveDetailService
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public AjaxResult deleteRzLeaveDetailById(Long id);
|
public AjaxResult deleteRzLeaveDetailById(Long id);
|
||||||
|
|
||||||
|
public RzLeaveDetail calculationLeaveHour(RzLeaveDetail rzLeaveDetail);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -82,16 +82,16 @@ public class RzBusinessTripDetailServiceImpl implements IRzBusinessTripDetailSer
|
|||||||
//判断出差时间差包含几个周日
|
//判断出差时间差包含几个周日
|
||||||
int zr = DateUtil.isWeeked(rzTripDetail.getTripStartTime(),rzTripDetail.getTripEndTime(),1);
|
int zr = DateUtil.isWeeked(rzTripDetail.getTripStartTime(),rzTripDetail.getTripEndTime(),1);
|
||||||
//判断是否包含节假日
|
//判断是否包含节假日
|
||||||
List<RzHoliday> h_list = rzHolidayMapper.selectRzHolidayList(null);
|
// List<RzHoliday> h_list = rzHolidayMapper.selectRzHolidayList(null);
|
||||||
for (RzHoliday rzHoliday : h_list) {
|
// for (RzHoliday rzHoliday : h_list) {
|
||||||
if(rzHoliday.getHoliday().after(rzTripDetail.getTripStartTime()) && rzHoliday.getHoliday().before(rzTripDetail.getTripEndTime())){
|
//// if(rzHoliday.getHoliday().after(rzTripDetail.getTripStartTime()) && rzHoliday.getHoliday().before(rzTripDetail.getTripEndTime())){
|
||||||
if(rzHoliday.getSpecialFlag().equals(Constants.DELETE_FLAG_1)){
|
//// if(rzHoliday.getSpecialFlag().equals(Constants.DELETE_FLAG_1)){
|
||||||
zr -= 1;
|
//// zr -= 1;
|
||||||
}else{
|
//// }else{
|
||||||
zr += 1;
|
//// zr += 1;
|
||||||
}
|
//// }
|
||||||
}
|
//// }
|
||||||
}
|
// }
|
||||||
// 出差天数的计算
|
// 出差天数的计算
|
||||||
Long ts = (rzTripDetail.getTripEndTime().getTime() - rzTripDetail.getTripStartTime().getTime())/1000/60/60/24 + 1;
|
Long ts = (rzTripDetail.getTripEndTime().getTime() - rzTripDetail.getTripStartTime().getTime())/1000/60/60/24 + 1;
|
||||||
rzTripDetail.setTripDay(ts);
|
rzTripDetail.setTripDay(ts);
|
||||||
@ -127,16 +127,16 @@ public class RzBusinessTripDetailServiceImpl implements IRzBusinessTripDetailSer
|
|||||||
//判断出差时间差包含几个周日
|
//判断出差时间差包含几个周日
|
||||||
int zr = DateUtil.isWeeked(rzTripDetail.getTripStartTime(),rzTripDetail.getTripEndTime(),1);
|
int zr = DateUtil.isWeeked(rzTripDetail.getTripStartTime(),rzTripDetail.getTripEndTime(),1);
|
||||||
//判断是否包含节假日
|
//判断是否包含节假日
|
||||||
List<RzHoliday> h_list = rzHolidayMapper.selectRzHolidayList(null);
|
// List<RzHoliday> h_list = rzHolidayMapper.selectRzHolidayList(null);
|
||||||
for (RzHoliday rzHoliday : h_list) {
|
// for (RzHoliday rzHoliday : h_list) {
|
||||||
if(rzHoliday.getHoliday().after(rzTripDetail.getTripStartTime()) && rzHoliday.getHoliday().before(rzTripDetail.getTripEndTime())){
|
//// if(rzHoliday.getHoliday().after(rzTripDetail.getTripStartTime()) && rzHoliday.getHoliday().before(rzTripDetail.getTripEndTime())){
|
||||||
if(rzHoliday.getSpecialFlag().equals(Constants.DELETE_FLAG_1)){
|
//// if(rzHoliday.getSpecialFlag().equals(Constants.DELETE_FLAG_1)){
|
||||||
zr -= 1;
|
//// zr -= 1;
|
||||||
}else{
|
//// }else{
|
||||||
zr += 1;
|
//// zr += 1;
|
||||||
}
|
//// }
|
||||||
}
|
//// }
|
||||||
}
|
// }
|
||||||
// 出差天数的计算
|
// 出差天数的计算
|
||||||
Long ts = (rzTripDetail.getTripEndTime().getTime() - rzTripDetail.getTripStartTime().getTime())/1000/60/60/24 + 1;
|
Long ts = (rzTripDetail.getTripEndTime().getTime() - rzTripDetail.getTripStartTime().getTime())/1000/60/60/24 + 1;
|
||||||
//反写出差总时长 TODO
|
//反写出差总时长 TODO
|
||||||
|
|||||||
@ -1,16 +1,26 @@
|
|||||||
package com.evo.personnelMatters.service.impl;
|
package com.evo.personnelMatters.service.impl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.evo.common.constant.Constants;
|
import com.evo.common.constant.Constants;
|
||||||
import com.evo.common.core.domain.AjaxResult;
|
import com.evo.common.core.domain.AjaxResult;
|
||||||
|
import com.evo.common.utils.Collections;
|
||||||
import com.evo.common.utils.DateUtils;
|
import com.evo.common.utils.DateUtils;
|
||||||
import com.evo.common.utils.SecurityUtils;
|
import com.evo.common.utils.SecurityUtils;
|
||||||
import com.evo.common.utils.StringUtils;
|
import com.evo.common.utils.StringUtils;
|
||||||
|
import com.evo.common.vo.HolidayParamVo;
|
||||||
import com.evo.personnelMatters.domain.RzHoliday;
|
import com.evo.personnelMatters.domain.RzHoliday;
|
||||||
import com.evo.personnelMatters.mapper.RzHolidayMapper;
|
import com.evo.personnelMatters.mapper.RzHolidayMapper;
|
||||||
import com.evo.personnelMatters.service.IRzHolidayService;
|
import com.evo.personnelMatters.service.IRzHolidayService;
|
||||||
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.time.DayOfWeek;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.YearMonth;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 假期管理Service业务层处理
|
* 假期管理Service业务层处理
|
||||||
@ -19,84 +29,53 @@ import java.util.List;
|
|||||||
* @date 2024-08-03
|
* @date 2024-08-03
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class RzHolidayServiceImpl implements IRzHolidayService
|
public class RzHolidayServiceImpl extends ServiceImpl<RzHolidayMapper, RzHoliday> implements IRzHolidayService
|
||||||
{
|
{
|
||||||
@Resource
|
|
||||||
private RzHolidayMapper rzHolidayMapper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询假期管理
|
|
||||||
*
|
|
||||||
* @param id 假期管理主键
|
|
||||||
* @return 假期管理
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public RzHoliday selectRzHolidayById(Long id)
|
public RzHoliday selectRzHolidayByYear(Integer year) {
|
||||||
{
|
RzHoliday rzHoliday = getOne(new LambdaQueryWrapper<RzHoliday>().eq(RzHoliday::getYear, year), false);
|
||||||
return rzHolidayMapper.selectRzHolidayById(id);
|
if(ObjectUtils.isEmpty(rzHoliday)){
|
||||||
|
rzHoliday = new RzHoliday();
|
||||||
|
rzHoliday.setYear(year);
|
||||||
|
rzHoliday.setHolidayInfo(JSONObject.toJSONString(getAllYearRoundSunday(year)));
|
||||||
|
save(rzHoliday);
|
||||||
|
}
|
||||||
|
return rzHoliday;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public Map<String, Integer> getAllYearRoundSunday(Integer year){
|
||||||
* 查询假期管理列表
|
Map<String, Integer> sundays = Collections.emptyMap();
|
||||||
*
|
YearMonth yearMonth = YearMonth.of(year,1);
|
||||||
* @param rzHoliday 假期管理
|
LocalDate date = yearMonth.atDay(1);
|
||||||
* @return 假期管理
|
while (date.getYear() == year){
|
||||||
*/
|
if(date.getDayOfWeek() == DayOfWeek.SUNDAY){
|
||||||
@Override
|
sundays.put(date+"", 2);
|
||||||
public List<RzHoliday> selectRzHolidayList(RzHoliday rzHoliday)
|
}
|
||||||
{
|
date = date.plusDays(1);
|
||||||
return rzHolidayMapper.selectRzHolidayList(rzHoliday);
|
}
|
||||||
|
return sundays;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 新增假期管理
|
|
||||||
*
|
|
||||||
* @param rzHoliday 假期管理
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public AjaxResult insertRzHoliday(RzHoliday rzHoliday)
|
|
||||||
{
|
|
||||||
List<RzHoliday> list = rzHolidayMapper.selectRzHolidayList(rzHoliday);
|
|
||||||
if(StringUtils.isNotNull(list) && list.size() > 0){
|
|
||||||
return AjaxResult.error();
|
|
||||||
}
|
|
||||||
rzHoliday.setCreateTime(DateUtils.getNowDate());
|
|
||||||
rzHoliday.setCreateBy(SecurityUtils.getUsername());
|
|
||||||
rzHoliday.setDelFlag(Constants.DELETE_FLAG_0);
|
|
||||||
int i = rzHolidayMapper.insertRzHoliday(rzHoliday);
|
|
||||||
if(i < 1){
|
|
||||||
AjaxResult.error();
|
|
||||||
}
|
|
||||||
return AjaxResult.success();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改假期管理
|
* 修改假期管理
|
||||||
*
|
*
|
||||||
* @param rzHoliday 假期管理
|
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public int updateRzHoliday(RzHoliday rzHoliday)
|
public Boolean updateRzHoliday(HolidayParamVo holidayParamVo)
|
||||||
{
|
{
|
||||||
rzHoliday.setUpdateTime(DateUtils.getNowDate());
|
RzHoliday rzHoliday = getById(holidayParamVo.getId());
|
||||||
rzHoliday.setUpdateBy(SecurityUtils.getUsername());
|
Map<String, Integer> holidaysMaps = JSONObject.parseObject(rzHoliday.getHolidayInfo(), Map.class);
|
||||||
return rzHolidayMapper.updateRzHoliday(rzHoliday);
|
if(holidayParamVo.getAdd()){
|
||||||
|
holidaysMaps.put(holidayParamVo.getHolidayDate(), holidayParamVo.getHolidayType());
|
||||||
|
}else{
|
||||||
|
holidaysMaps.remove(holidayParamVo.getHolidayDate());
|
||||||
}
|
}
|
||||||
|
rzHoliday.setHolidayInfo(JSONObject.toJSONString(holidaysMaps));
|
||||||
/**
|
return updateById(rzHoliday);
|
||||||
* 删除数据
|
|
||||||
* @param id
|
|
||||||
* @param oprName
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int deleteRzHoliday(Long id,String oprName){
|
|
||||||
RzHoliday rzHoliday = rzHolidayMapper.selectRzHolidayById(id);
|
|
||||||
rzHoliday.setDelFlag(Constants.DELETE_FLAG_1);
|
|
||||||
rzHoliday.setUpdateBy(SecurityUtils.getUsername());
|
|
||||||
rzHoliday.setUpdateTime(DateUtils.getNowDate());
|
|
||||||
return updateRzHoliday(rzHoliday);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,18 +1,25 @@
|
|||||||
package com.evo.personnelMatters.service.impl;
|
package com.evo.personnelMatters.service.impl;
|
||||||
|
|
||||||
import com.evo.attendance.domain.RzAttendanceStatistical;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.evo.attendance.mapper.RzAttendanceStatisticalMapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.evo.common.constant.Constants;
|
import com.evo.common.constant.Constants;
|
||||||
import com.evo.common.core.domain.AjaxResult;
|
import com.evo.common.core.domain.AjaxResult;
|
||||||
|
import com.evo.common.core.domain.entity.SysDictData;
|
||||||
|
import com.evo.common.utils.Collections;
|
||||||
import com.evo.common.utils.DateUtils;
|
import com.evo.common.utils.DateUtils;
|
||||||
|
import com.evo.common.utils.ParamUtils;
|
||||||
import com.evo.common.utils.SecurityUtils;
|
import com.evo.common.utils.SecurityUtils;
|
||||||
import com.evo.common.utils.StringUtils;
|
import com.evo.personnelMatters.domain.RzLeave;
|
||||||
import com.evo.personnelMatters.domain.*;
|
import com.evo.personnelMatters.domain.RzLeaveDetail;
|
||||||
import com.evo.personnelMatters.mapper.*;
|
import com.evo.personnelMatters.domain.RzOverTime;
|
||||||
|
import com.evo.personnelMatters.mapper.RzLeaveDetailMapper;
|
||||||
|
import com.evo.personnelMatters.mapper.RzLeaveMapper;
|
||||||
|
import com.evo.personnelMatters.mapper.RzOverTimeMapper;
|
||||||
import com.evo.personnelMatters.service.IRzLeaveDetailService;
|
import com.evo.personnelMatters.service.IRzLeaveDetailService;
|
||||||
import com.evo.utils.DateUtil;
|
import com.evo.system.service.ISysDictDataService;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
@ -26,16 +33,12 @@ import java.util.List;
|
|||||||
* @date 2024-08-03
|
* @date 2024-08-03
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class RzLeaveDetailServiceImpl implements IRzLeaveDetailService
|
public class RzLeaveDetailServiceImpl extends ServiceImpl<RzLeaveDetailMapper, RzLeaveDetail> implements IRzLeaveDetailService
|
||||||
{
|
{
|
||||||
@Resource
|
|
||||||
private RzLeaveDetailMapper rzLeaveDetailMapper;
|
|
||||||
@Resource
|
@Resource
|
||||||
private RzLeaveMapper rzLeaveMapper; //请假汇总
|
private RzLeaveMapper rzLeaveMapper; //请假汇总
|
||||||
@Resource
|
@Resource
|
||||||
private RzBusinessTripMapper rzBusinessTripMapper; //出差
|
private ISysDictDataService sysDictDataService;
|
||||||
@Resource
|
|
||||||
private RzAttendanceStatisticalMapper rzAttendanceStatisticalMapper; //打卡统计
|
|
||||||
/**
|
/**
|
||||||
* 查询请假管理详情
|
* 查询请假管理详情
|
||||||
*
|
*
|
||||||
@ -45,7 +48,7 @@ public class RzLeaveDetailServiceImpl implements IRzLeaveDetailService
|
|||||||
@Override
|
@Override
|
||||||
public RzLeaveDetail selectRzLeaveDetailById(Long id)
|
public RzLeaveDetail selectRzLeaveDetailById(Long id)
|
||||||
{
|
{
|
||||||
return rzLeaveDetailMapper.selectRzLeaveDetailById(id);
|
return getBaseMapper().selectRzLeaveDetailById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -57,7 +60,7 @@ public class RzLeaveDetailServiceImpl implements IRzLeaveDetailService
|
|||||||
@Override
|
@Override
|
||||||
public List<RzLeaveDetail> selectRzLeaveDetailList(RzLeaveDetail rzLeaveDetail)
|
public List<RzLeaveDetail> selectRzLeaveDetailList(RzLeaveDetail rzLeaveDetail)
|
||||||
{
|
{
|
||||||
return rzLeaveDetailMapper.selectRzLeaveDetailList(rzLeaveDetail);
|
return getBaseMapper().selectRzLeaveDetailList(rzLeaveDetail);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -74,72 +77,81 @@ public class RzLeaveDetailServiceImpl implements IRzLeaveDetailService
|
|||||||
if(rzLeaveDetail.getLeaveStartTime().getTime() > rzLeaveDetail.getLeaveEndTime().getTime()){
|
if(rzLeaveDetail.getLeaveStartTime().getTime() > rzLeaveDetail.getLeaveEndTime().getTime()){
|
||||||
return AjaxResult.error("请假开始时间不能早于结束时间!!");
|
return AjaxResult.error("请假开始时间不能早于结束时间!!");
|
||||||
}
|
}
|
||||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
|
|
||||||
//判断请假开始,结束时间是否在同一个月,不同月提示
|
|
||||||
if(!sdf.format(rzLeaveDetail.getLeaveStartTime()).equals(sdf.format(rzLeaveDetail.getLeaveEndTime()))){
|
|
||||||
return AjaxResult.error("请假时间不能跨月!!");
|
|
||||||
}
|
|
||||||
//根据员工姓名查询
|
//根据员工姓名查询
|
||||||
RzLeave rzLeave = rzLeaveMapper.selectRzLeaveById(rzLeaveDetail.getLeaveId());
|
RzLeave rzLeave = rzLeaveMapper.selectRzLeaveById(rzLeaveDetail.getLeaveId());
|
||||||
//计算请假时长
|
//验证调休
|
||||||
Long i = DateUtil.dateUtil.autoLeavehoursForCount(rzLeaveDetail.getLeaveStartTime(),rzLeaveDetail.getLeaveEndTime(),rzLeaveDetail.getType());
|
if(Long.valueOf(55).equals(rzLeaveDetail.getType())){
|
||||||
rzLeaveDetail.setLeaveHour(i.intValue());
|
if(!autoLeavedNumber(rzLeave.getUserId(),rzLeaveDetail.getLeaveStartTime(),rzLeaveDetail.getLeaveHour())){
|
||||||
rzLeaveDetail.setCreateTime(DateUtils.getNowDate());
|
return AjaxResult.error("当前人员的加班时长不足抵扣调休时长!!");
|
||||||
rzLeaveDetail.setCreateBy(SecurityUtils.getUsername());
|
}
|
||||||
|
}
|
||||||
rzLeaveDetail.setDelFlag(Constants.DELETE_FLAG_0);
|
rzLeaveDetail.setDelFlag(Constants.DELETE_FLAG_0);
|
||||||
int r = rzLeaveDetailMapper.insertRzLeaveDetail(rzLeaveDetail);
|
if(getBaseMapper().insert(rzLeaveDetail) < 1){
|
||||||
if(r < 1){
|
return AjaxResult.error("请假详情新增失败");
|
||||||
return AjaxResult.error();
|
}
|
||||||
}
|
return buildData(String.valueOf(rzLeaveDetail.getType()), rzLeave, rzLeaveDetail, rzLeaveDetail.getLeaveHour());
|
||||||
switch (rzLeaveDetail.getType()){
|
}
|
||||||
case "2":
|
|
||||||
rzLeave.setSickHours(rzLeave.getSickHours() + i.intValue());
|
|
||||||
break;
|
public AjaxResult buildData(String type, RzLeave rzLeave, RzLeaveDetail rzLeaveDetail, Integer holidayHour){
|
||||||
case "3":
|
switch (type){
|
||||||
rzLeave.setAbsenceHours(rzLeave.getAbsenceHours() + i.intValue());
|
case "52":
|
||||||
break;
|
rzLeave.setSickHours(big(rzLeave.getSickHours() ,holidayHour));
|
||||||
case "4":
|
break;
|
||||||
rzLeave.setAnnualHours(rzLeave.getAnnualHours() + i.intValue());
|
case "53":
|
||||||
break;
|
rzLeave.setAbsenceHours(big(rzLeave.getAbsenceHours() ,holidayHour));
|
||||||
case "5":
|
break;
|
||||||
boolean flag = autoLeavedNumber(rzLeave.getUserId(),rzLeaveDetail.getLeaveStartTime(),i);
|
case "54":
|
||||||
if(flag){
|
rzLeave.setAnnualHours(big(rzLeave.getAnnualHours() ,holidayHour));
|
||||||
rzLeave.setCompensatoryHours(rzLeave.getCompensatoryHours() + i.intValue());
|
break;
|
||||||
}else{
|
case "55":
|
||||||
return AjaxResult.error("没有调休时间!!");
|
rzLeave.setCompensatoryHours(big(rzLeave.getCompensatoryHours() ,holidayHour));
|
||||||
}
|
break;
|
||||||
break;
|
case "56":
|
||||||
case "6":
|
rzLeave.setMarriageHours(big(rzLeave.getMarriageHours() ,holidayHour));
|
||||||
rzLeave.setMarriageHours(rzLeave.getMarriageHours() + i.intValue());
|
break;
|
||||||
break;
|
case "57":
|
||||||
case "7":
|
rzLeave.setMaternityHours(big(rzLeave.getMaternityHours() ,holidayHour));
|
||||||
rzLeave.setMaternityHours(rzLeave.getMaternityHours() + i.intValue());
|
break;
|
||||||
break;
|
case "58":
|
||||||
case "8":
|
rzLeave.setPaternityHours(big(rzLeave.getPaternityHours() ,holidayHour));
|
||||||
rzLeave.setPaternityHours(rzLeave.getPaternityHours() + i.intValue());
|
break;
|
||||||
break;
|
case "59":
|
||||||
case "9":
|
rzLeave.setFuneralHours(big(rzLeave.getFuneralHours() ,holidayHour));
|
||||||
rzLeave.setFuneralHours(rzLeave.getFuneralHours() + i.intValue());
|
break;
|
||||||
break;
|
case "60":
|
||||||
case "10":
|
rzLeave.setWorkHours(big(rzLeave.getWorkHours() ,holidayHour));
|
||||||
rzLeave.setWorkHours(rzLeave.getWorkHours() + i.intValue());
|
break;
|
||||||
break;
|
}
|
||||||
}
|
if(rzLeaveMapper.updateRzLeave(rzLeave) < 0){
|
||||||
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.error();
|
||||||
}
|
}
|
||||||
|
//不再反写考勤汇总, 由定时器, 每天执行查找
|
||||||
|
//这里需要做特殊处理, 如果时间范围跨月了, 需要每个月的考勤都要处理
|
||||||
|
// Integer betweenMonth = DateUtils.getBetweenMonth(rzLeaveDetail.getLeaveStartTime(), rzLeaveDetail.getLeaveEndTime());
|
||||||
|
// Date date = rzLeaveDetail.getLeaveStartTime();
|
||||||
|
// for (int i = 0; i <= betweenMonth; i++) {
|
||||||
|
// date = DateUtils.addMonths(date, i>0 ? 1 : 0);
|
||||||
|
// System.out.println(DateUtils.parseDateToStr("yyyy-MM-dd", date));
|
||||||
|
// RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzLeave.getUserId(),date);
|
||||||
|
// if(rzAttendanceStatistical == null){
|
||||||
|
// SysStaff sysStaff = sysStaffService.selectSysStaffByUserId(rzLeave.getUserId());
|
||||||
|
// rzAttendanceStatistical = sysStaffService.createRzAttendance(sysStaff, Collections.emptyList(), date);
|
||||||
|
// }
|
||||||
|
// rzAttendanceStatistical.setAbsenteeism(rzAttendanceStatistical.getAbsenteeism().add(new BigDecimal(holidayHour)));
|
||||||
|
// rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical);
|
||||||
|
// }
|
||||||
return AjaxResult.success();
|
return AjaxResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Integer big(Integer baseNum, Integer addNum){
|
||||||
|
return new BigDecimal(baseNum).add(new BigDecimal(addNum)).intValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据用户ID及时间,调休时间判断员工是否可以调休
|
* 根据用户ID及时间,调休时间判断员工是否可以调休
|
||||||
* @param staffId 员工ID
|
* @param staffId 员工ID
|
||||||
@ -147,15 +159,27 @@ public class RzLeaveDetailServiceImpl implements IRzLeaveDetailService
|
|||||||
* @param hours 请假时长
|
* @param hours 请假时长
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private boolean autoLeavedNumber(Long staffId, Date date,Long hours){
|
@Resource
|
||||||
//先查询出差是否有加班
|
RzOverTimeMapper overTimeMapper;
|
||||||
RzBusinessTrip RzBusinessTrip = rzBusinessTripMapper.selectRzBusinessTripListByMonth(staffId,date);
|
private boolean autoLeavedNumber(Long staffId, Date date,Integer hours){
|
||||||
//出差有加班且调休时间够,则可以调休
|
// //先查询出差是否有加班
|
||||||
if(StringUtils.isNotNull(RzBusinessTrip) && RzBusinessTrip.getOverDays() * 8 >= hours){
|
// RzBusinessTrip RzBusinessTrip = rzBusinessTripMapper.selectRzBusinessTripListByMonth(staffId,date);
|
||||||
RzBusinessTrip.setOverDays((RzBusinessTrip.getOverDays() * 8 - hours)/8);
|
// //出差有加班且调休时间够,则可以调休
|
||||||
rzBusinessTripMapper.updateRzBusinessTrip(RzBusinessTrip);
|
// if(StringUtils.isNotNull(RzBusinessTrip) && RzBusinessTrip.getOverDays() * 8 >= hours){
|
||||||
return true;
|
// RzBusinessTrip.setOverDays((RzBusinessTrip.getOverDays() * 8 - hours)/8);
|
||||||
|
// rzBusinessTripMapper.updateRzBusinessTrip(RzBusinessTrip);
|
||||||
|
// return true;
|
||||||
|
// }
|
||||||
|
// return false;
|
||||||
|
//
|
||||||
|
//查询加班时长, 核实当前
|
||||||
|
RzOverTime rzOverTime = overTimeMapper.selectOne(new LambdaQueryWrapper<RzOverTime>().eq(RzOverTime::getUserId, staffId).apply(" and date_format(over_time_month,'%Y%m') = date_format({0},'%Y%m')", date));
|
||||||
|
if(rzOverTime != null && rzOverTime.getOverHours().compareTo(rzOverTime.getTaskHours().add(new BigDecimal(hours))) <=0){
|
||||||
|
rzOverTime.setTaskHours(rzOverTime.getTaskHours().add(new BigDecimal(hours)));
|
||||||
|
return overTimeMapper.updateById(rzOverTime) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//不允许调休
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -169,64 +193,27 @@ public class RzLeaveDetailServiceImpl implements IRzLeaveDetailService
|
|||||||
public AjaxResult updateRzLeaveDetail(RzLeaveDetail rzLeaveDetail)
|
public AjaxResult updateRzLeaveDetail(RzLeaveDetail rzLeaveDetail)
|
||||||
{
|
{
|
||||||
//根据ID查询原始请假小时数
|
//根据ID查询原始请假小时数
|
||||||
RzLeaveDetail leaveDetail = rzLeaveDetailMapper.selectRzLeaveDetailById(rzLeaveDetail.getId());
|
RzLeaveDetail leaveDetail = getBaseMapper().selectRzLeaveDetailById(rzLeaveDetail.getId());
|
||||||
Long i = DateUtil.dateUtil.autoLeavehoursForCount(rzLeaveDetail.getLeaveStartTime(),rzLeaveDetail.getLeaveEndTime(),rzLeaveDetail.getType());
|
|
||||||
rzLeaveDetail.setLeaveHour(i.intValue());
|
|
||||||
rzLeaveDetail.setUpdateBy(SecurityUtils.getUsername());
|
rzLeaveDetail.setUpdateBy(SecurityUtils.getUsername());
|
||||||
rzLeaveDetail.setUpdateTime(DateUtils.getNowDate());
|
rzLeaveDetail.setUpdateTime(DateUtils.getNowDate());
|
||||||
int r = rzLeaveDetailMapper.updateRzLeaveDetail(rzLeaveDetail);
|
if(getBaseMapper().updateRzLeaveDetail(rzLeaveDetail) < 1){
|
||||||
if(r < 1){
|
|
||||||
return AjaxResult.error();
|
return AjaxResult.error();
|
||||||
}
|
}
|
||||||
//修改请假总时长
|
//修改请假总时长
|
||||||
RzLeave rzLeave = rzLeaveMapper.selectRzLeaveById(rzLeaveDetail.getLeaveId());
|
RzLeave rzLeave = rzLeaveMapper.selectRzLeaveById(rzLeaveDetail.getLeaveId());
|
||||||
//判断请假类型没有变化
|
//如果是调休假, 需要同步更新调休假信息
|
||||||
if(leaveDetail.getType().equals(rzLeaveDetail.getType())){
|
Integer newHolidayHour = new BigDecimal(rzLeaveDetail.getLeaveHour()).subtract(new BigDecimal(leaveDetail.getLeaveHour())).intValue();
|
||||||
switch (rzLeaveDetail.getType()){
|
if(newHolidayHour < 0){
|
||||||
case "2":
|
//如果小于0 并且是调休, 需要反加加班
|
||||||
rzLeave.setSickHours(rzLeave.getSickHours() + i.intValue() - leaveDetail.getLeaveHour());
|
//验证调休
|
||||||
break;
|
if(Long.valueOf(55).equals(rzLeaveDetail.getType())){
|
||||||
case "3":
|
RzOverTime rzOverTime = overTimeMapper.selectOne(new LambdaQueryWrapper<RzOverTime>().eq(RzOverTime::getUserId, rzLeave.getUserId()).apply(" and date_format(over_time_month,'%Y%m') = date_format({0},'%Y%m')", rzLeaveDetail.getLeaveStartTime()));
|
||||||
rzLeave.setAbsenceHours(rzLeave.getAbsenceHours() + i.intValue() - leaveDetail.getLeaveHour());
|
rzOverTime.setOverHours(rzOverTime.getTaskHours().add(new BigDecimal(Math.abs(newHolidayHour))));
|
||||||
break;
|
rzOverTime.setTaskHours(rzOverTime.getTaskHours().subtract(new BigDecimal(Math.abs(newHolidayHour))));
|
||||||
case "4":
|
overTimeMapper.updateById(rzOverTime);
|
||||||
rzLeave.setAnnualHours(rzLeave.getAnnualHours() + i.intValue() - leaveDetail.getLeaveHour());
|
|
||||||
break;
|
|
||||||
case "5":
|
|
||||||
rzLeave.setCompensatoryHours(rzLeave.getCompensatoryHours() + i.intValue() - leaveDetail.getLeaveHour());
|
|
||||||
break;
|
|
||||||
case "6":
|
|
||||||
rzLeave.setMarriageHours(rzLeave.getMarriageHours() + i.intValue() - leaveDetail.getLeaveHour());
|
|
||||||
break;
|
|
||||||
case "7":
|
|
||||||
rzLeave.setMaternityHours(rzLeave.getMaternityHours() + i.intValue() - leaveDetail.getLeaveHour());
|
|
||||||
break;
|
|
||||||
case "8":
|
|
||||||
rzLeave.setPaternityHours(rzLeave.getPaternityHours() + i.intValue() - leaveDetail.getLeaveHour());
|
|
||||||
break;
|
|
||||||
case "9":
|
|
||||||
rzLeave.setFuneralHours(rzLeave.getFuneralHours() + i.intValue() - leaveDetail.getLeaveHour());
|
|
||||||
break;
|
|
||||||
case "10":
|
|
||||||
rzLeave.setWorkHours(rzLeave.getWorkHours() + i.intValue() - leaveDetail.getLeaveHour());
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}else{
|
|
||||||
|
|
||||||
}
|
}
|
||||||
r = rzLeaveMapper.updateRzLeave(rzLeave);
|
return buildData(String.valueOf(rzLeaveDetail.getType()), rzLeave, rzLeaveDetail, newHolidayHour);
|
||||||
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();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -235,59 +222,119 @@ public class RzLeaveDetailServiceImpl implements IRzLeaveDetailService
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public AjaxResult deleteRzLeaveDetailById(Long id){
|
public AjaxResult deleteRzLeaveDetailById(Long id){
|
||||||
RzLeaveDetail rzLeaveDetail = rzLeaveDetailMapper.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 = rzLeaveDetailMapper.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());
|
||||||
switch (rzLeaveDetail.getType()){
|
// r = rzLeaveMapper.updateRzLeave(rzLeave);
|
||||||
case "2":
|
// if(r < 1){
|
||||||
rzLeave.setSickHours(rzLeave.getSickHours() - rzLeaveDetail.getLeaveHour());
|
// return AjaxResult.error();
|
||||||
break;
|
// }
|
||||||
case "3":
|
// //反写考勤汇总
|
||||||
rzLeave.setAbsenceHours(rzLeave.getAbsenceHours() - rzLeaveDetail.getLeaveHour());
|
// RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzLeave.getUserId(),rzLeave.getLeaveDate());
|
||||||
break;
|
// rzAttendanceStatistical.setAbsenteeism(new BigDecimal(rzLeave.getWorkHours() + rzLeave.getFuneralHours() + rzLeave.getPaternityHours() + rzLeave.getMaternityHours()
|
||||||
case "4":
|
// + rzLeave.getMarriageHours() + rzLeave.getCompensatoryHours() + rzLeave.getAnnualHours() + rzLeave.getAbsenceHours() + rzLeave.getSickHours()));
|
||||||
rzLeave.setAnnualHours(rzLeave.getAnnualHours() - rzLeaveDetail.getLeaveHour());
|
// r = rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical);
|
||||||
break;
|
// if(r < 1){
|
||||||
case "5":
|
// return AjaxResult.error();
|
||||||
rzLeave.setCompensatoryHours(rzLeave.getCompensatoryHours() - rzLeaveDetail.getLeaveHour());
|
// }
|
||||||
break;
|
|
||||||
case "6":
|
|
||||||
rzLeave.setMarriageHours(rzLeave.getMarriageHours() - rzLeaveDetail.getLeaveHour());
|
|
||||||
break;
|
|
||||||
case "7":
|
|
||||||
rzLeave.setMaternityHours(rzLeave.getMaternityHours() - rzLeaveDetail.getLeaveHour());
|
|
||||||
break;
|
|
||||||
case "8":
|
|
||||||
rzLeave.setPaternityHours(rzLeave.getPaternityHours() - rzLeaveDetail.getLeaveHour());
|
|
||||||
break;
|
|
||||||
case "9":
|
|
||||||
rzLeave.setFuneralHours(rzLeave.getFuneralHours() - rzLeaveDetail.getLeaveHour());
|
|
||||||
break;
|
|
||||||
case "10":
|
|
||||||
rzLeave.setWorkHours(rzLeave.getWorkHours() - rzLeaveDetail.getLeaveHour());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
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();
|
return AjaxResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RzLeaveDetail calculationLeaveHour(RzLeaveDetail rzLeaveDetail) {
|
||||||
|
if(rzLeaveDetail.getType() == null || rzLeaveDetail.getLeaveStartTime() == null){
|
||||||
|
return rzLeaveDetail;
|
||||||
|
}
|
||||||
|
String flag = String.valueOf(rzLeaveDetail.getType());
|
||||||
|
SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
Date beginDate = rzLeaveDetail.getLeaveStartTime();
|
||||||
|
//当前请假类型, 不需要自动计算结束时间和请假小时
|
||||||
|
//需要自动计算
|
||||||
|
if(ParamUtils.autoCalculationHolidayType().contains(flag)){
|
||||||
|
//获取字典类型
|
||||||
|
SysDictData sysDictData = sysDictDataService.selectDictDataById(rzLeaveDetail.getType());
|
||||||
|
List<String> holidayDates = Collections.emptyList();
|
||||||
|
int addDays = Integer.valueOf(sysDictData.getDictValue());
|
||||||
|
//记录所有时间的年, 防止有跨年的情况
|
||||||
|
List<String> yearList = Collections.emptyList();
|
||||||
|
while (addDays > 0){
|
||||||
|
String date = sdfd.format(beginDate);
|
||||||
|
String dateYear = date.substring(0,4);
|
||||||
|
if(!yearList.contains(dateYear)){
|
||||||
|
yearList.add(dateYear);
|
||||||
|
}
|
||||||
|
holidayDates.add(date);
|
||||||
|
beginDate = DateUtils.addDays(beginDate,1);
|
||||||
|
addDays --;
|
||||||
|
}
|
||||||
|
//去除最后增加的天数, 防止出现结束时间过长问题
|
||||||
|
beginDate = DateUtils.addDays(beginDate,-1);
|
||||||
|
//记录最终需要增加多少天
|
||||||
|
Integer endDays = 0;
|
||||||
|
//请假类型及不包含法休, 也不包含公休
|
||||||
|
if(ParamUtils.getLeaveTypeNotIncludedFaXiuAndPublicHoliday().contains(flag)){
|
||||||
|
//获取结果当中的假期时间
|
||||||
|
for (String year : yearList){
|
||||||
|
List<String> holidays = Collections.findDuplicatesList(ParamUtils.getHoliddayList(Integer.valueOf(year), 0), holidayDates);
|
||||||
|
if(Collections.isNotEmpty(holidays)){
|
||||||
|
rzLeaveDetail.setRemarks("不包含法定假日和周末");
|
||||||
|
}
|
||||||
|
endDays = new BigDecimal(endDays).add(new BigDecimal(holidays.size())).intValue();
|
||||||
|
}
|
||||||
|
}else
|
||||||
|
//请假类型不包含法休
|
||||||
|
if(ParamUtils.getLeaveTypeNotIncludedFaXiu().contains(flag)){
|
||||||
|
for (String year : yearList){
|
||||||
|
List<String> holidays = Collections.findDuplicatesList(ParamUtils.getHoliddayList(Integer.valueOf(year), 1), holidayDates);
|
||||||
|
endDays = new BigDecimal(endDays).add(new BigDecimal(holidays.size())).intValue();
|
||||||
|
if(Collections.isNotEmpty(holidays)){
|
||||||
|
rzLeaveDetail.setRemarks("不包含法定假日");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//计算结束时间和请假时长 此处使用beginDate 而不使用rzLeaveDetail.getLeaveStartTime() 的原因是, 上面获取全部请假日期的时候, 已经处理过时间, 只需要增加公休,法休时间就可以了
|
||||||
|
rzLeaveDetail.setLeaveEndTime(DateUtils.addDays(beginDate, endDays));
|
||||||
|
rzLeaveDetail.setLeaveHour(new BigDecimal(sysDictData.getDictValue()).multiply(new BigDecimal(8)).intValue());
|
||||||
|
}else{
|
||||||
|
//不需要计算, 过滤节假日啥的, 只过滤周末就好了
|
||||||
|
if(rzLeaveDetail.getLeaveStartTime() == null || rzLeaveDetail.getLeaveEndTime() == null){
|
||||||
|
return rzLeaveDetail;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> holidayDates = Collections.emptyList();
|
||||||
|
//记录所有时间的年, 防止有跨年的情况
|
||||||
|
List<String> yearList = Collections.emptyList();
|
||||||
|
while (beginDate.compareTo(rzLeaveDetail.getLeaveEndTime()) <= 0){
|
||||||
|
String date = sdfd.format(beginDate);
|
||||||
|
String dateYear = date.substring(0,4);
|
||||||
|
if(!yearList.contains(dateYear)){
|
||||||
|
yearList.add(dateYear);
|
||||||
|
}
|
||||||
|
holidayDates.add(date);
|
||||||
|
beginDate = DateUtils.addDays(beginDate,1);
|
||||||
|
}
|
||||||
|
//记录最终需要增加多少天
|
||||||
|
Integer endDays = 0;
|
||||||
|
for (String year : yearList){
|
||||||
|
List<String> holidays = Collections.findDuplicatesList(ParamUtils.getHoliddayList(Integer.valueOf(year), 2), holidayDates);
|
||||||
|
if(Collections.isNotEmpty(holidays)){
|
||||||
|
rzLeaveDetail.setRemarks("不包含周末");
|
||||||
|
}
|
||||||
|
endDays = new BigDecimal(endDays).add(new BigDecimal(holidays.size())).intValue();
|
||||||
|
}
|
||||||
|
//计算结束时间和请假时长 此处使用beginDate 而不使用rzLeaveDetail.getLeaveStartTime() 的原因是, 上面获取全部请假日期的时候, 已经处理过时间, 只需要增加公休,法休时间就可以了
|
||||||
|
rzLeaveDetail.setLeaveHour(new BigDecimal(holidayDates.size()).subtract(new BigDecimal(endDays)).multiply(new BigDecimal(8)).intValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
return rzLeaveDetail;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -142,12 +142,12 @@ public class RzLeaveServiceImpl implements IRzLeaveService
|
|||||||
public List<RzLeaveDetail> listLeaveDetails(RzLeave rzLeave){
|
public List<RzLeaveDetail> listLeaveDetails(RzLeave rzLeave){
|
||||||
List<RzLeaveDetail> res_list = null;
|
List<RzLeaveDetail> res_list = null;
|
||||||
//查询指定月份的请假统计
|
//查询指定月份的请假统计
|
||||||
RzLeave leave = rzLeaveMapper.queryRzLeaveByDateAndUserId(rzLeave.getUserId(),rzLeave.getLeaveDate());
|
// RzLeave leave = rzLeaveMapper.queryRzLeaveByDateAndUserId(rzLeave.getUserId());
|
||||||
if(leave == null){
|
// if(leave == null){
|
||||||
return new ArrayList<RzLeaveDetail>();
|
// return new ArrayList<RzLeaveDetail>();
|
||||||
}
|
// }
|
||||||
//查询请假详情
|
//查询请假详情
|
||||||
res_list = rzLeaveDetailMapper.selectRzLeaveDetailByLeaveId(leave.getId());
|
// res_list = rzLeaveDetailMapper.selectRzLeaveDetailByLeaveId(leave.getId());
|
||||||
return res_list;
|
return res_list;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package com.evo.personnelMatters.service.impl;
|
package com.evo.personnelMatters.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.evo.common.annotation.DataScope;
|
import com.evo.common.annotation.DataScope;
|
||||||
import com.evo.common.constant.Constants;
|
import com.evo.common.constant.Constants;
|
||||||
import com.evo.common.core.domain.AjaxResult;
|
import com.evo.common.core.domain.AjaxResult;
|
||||||
@ -27,10 +28,9 @@ import java.util.List;
|
|||||||
* @date 2024-09-03
|
* @date 2024-09-03
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class RzOverTimeServiceImpl implements IRzOverTimeService
|
public class RzOverTimeServiceImpl extends ServiceImpl<RzOverTimeMapper, RzOverTime> implements IRzOverTimeService
|
||||||
{
|
{
|
||||||
@Resource
|
|
||||||
private RzOverTimeMapper rzOverTimeMapper;
|
|
||||||
@Resource
|
@Resource
|
||||||
private SysStaffMapper sysStaffMapper; //员工信息
|
private SysStaffMapper sysStaffMapper; //员工信息
|
||||||
@Resource
|
@Resource
|
||||||
@ -48,7 +48,7 @@ public class RzOverTimeServiceImpl implements IRzOverTimeService
|
|||||||
@Override
|
@Override
|
||||||
public RzOverTime selectRzOverTimeById(Long id)
|
public RzOverTime selectRzOverTimeById(Long id)
|
||||||
{
|
{
|
||||||
return rzOverTimeMapper.selectRzOverTimeById(id);
|
return getBaseMapper().selectRzOverTimeById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -61,7 +61,7 @@ public class RzOverTimeServiceImpl implements IRzOverTimeService
|
|||||||
@DataScope(deptAlias = "d")
|
@DataScope(deptAlias = "d")
|
||||||
public List<RzOverTime> selectRzOverTimeList(RzOverTime rzOverTime)
|
public List<RzOverTime> selectRzOverTimeList(RzOverTime rzOverTime)
|
||||||
{
|
{
|
||||||
List<RzOverTime> res_list = rzOverTimeMapper.selectRzOverTimeList(rzOverTime);
|
List<RzOverTime> res_list = getBaseMapper().selectRzOverTimeList(rzOverTime);
|
||||||
for (RzOverTime overTime : res_list) {
|
for (RzOverTime overTime : res_list) {
|
||||||
overTime.setDeptName(deptMapper.selectDeptById(overTime.getDeptId()).getDeptName());
|
overTime.setDeptName(deptMapper.selectDeptById(overTime.getDeptId()).getDeptName());
|
||||||
}
|
}
|
||||||
@ -77,7 +77,7 @@ public class RzOverTimeServiceImpl implements IRzOverTimeService
|
|||||||
@Override
|
@Override
|
||||||
public AjaxResult insertRzOverTime(RzOverTime rzOverTime)
|
public AjaxResult insertRzOverTime(RzOverTime rzOverTime)
|
||||||
{
|
{
|
||||||
RzOverTime overTime = rzOverTimeMapper.selectRzOverTimeByNameAndMonth(Long.parseLong(rzOverTime.getName()),rzOverTime.getOverTimeMonth());
|
RzOverTime overTime = getBaseMapper().selectRzOverTimeByNameAndMonth(Long.parseLong(rzOverTime.getName()),rzOverTime.getOverTimeMonth());
|
||||||
if(StringUtils.isNotNull(overTime)){
|
if(StringUtils.isNotNull(overTime)){
|
||||||
return AjaxResult.error();
|
return AjaxResult.error();
|
||||||
}
|
}
|
||||||
@ -88,7 +88,7 @@ public class RzOverTimeServiceImpl implements IRzOverTimeService
|
|||||||
rzOverTime.setCreateBy(SecurityUtils.getUsername());
|
rzOverTime.setCreateBy(SecurityUtils.getUsername());
|
||||||
rzOverTime.setCreateTime(DateUtils.getNowDate());
|
rzOverTime.setCreateTime(DateUtils.getNowDate());
|
||||||
rzOverTime.setDelFlag(Constants.DELETE_FLAG_0);
|
rzOverTime.setDelFlag(Constants.DELETE_FLAG_0);
|
||||||
int i = rzOverTimeMapper.insertRzOverTime(rzOverTime);
|
int i = getBaseMapper().insertRzOverTime(rzOverTime);
|
||||||
if(i < 1){
|
if(i < 1){
|
||||||
return AjaxResult.error();
|
return AjaxResult.error();
|
||||||
}
|
}
|
||||||
@ -106,7 +106,7 @@ public class RzOverTimeServiceImpl implements IRzOverTimeService
|
|||||||
{
|
{
|
||||||
rzOverTime.setUpdateBy(SecurityUtils.getUsername());
|
rzOverTime.setUpdateBy(SecurityUtils.getUsername());
|
||||||
rzOverTime.setUpdateTime(DateUtils.getNowDate());
|
rzOverTime.setUpdateTime(DateUtils.getNowDate());
|
||||||
return rzOverTimeMapper.updateRzOverTime(rzOverTime);
|
return getBaseMapper().updateRzOverTime(rzOverTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -118,14 +118,14 @@ public class RzOverTimeServiceImpl implements IRzOverTimeService
|
|||||||
@Override
|
@Override
|
||||||
public AjaxResult deleteRzOverTimeById(Long id)
|
public AjaxResult deleteRzOverTimeById(Long id)
|
||||||
{
|
{
|
||||||
RzOverTime rzOverTime = rzOverTimeMapper.selectRzOverTimeById(id);
|
RzOverTime rzOverTime = getBaseMapper().selectRzOverTimeById(id);
|
||||||
if(rzOverTime.getOverHours().compareTo(new BigDecimal("0.0")) > 0){
|
if(rzOverTime.getOverHours().compareTo(new BigDecimal("0.0")) > 0){
|
||||||
return AjaxResult.error("有加班工时,不能删除!");
|
return AjaxResult.error("有加班工时,不能删除!");
|
||||||
}
|
}
|
||||||
rzOverTime.setDelFlag(Constants.DELETE_FLAG_1);
|
rzOverTime.setDelFlag(Constants.DELETE_FLAG_1);
|
||||||
rzOverTime.setUpdateBy(SecurityUtils.getUsername());
|
rzOverTime.setUpdateBy(SecurityUtils.getUsername());
|
||||||
rzOverTime.setUpdateTime(DateUtils.getNowDate());
|
rzOverTime.setUpdateTime(DateUtils.getNowDate());
|
||||||
int i = rzOverTimeMapper.updateRzOverTime(rzOverTime);
|
int i = getBaseMapper().updateRzOverTime(rzOverTime);
|
||||||
if(i < 1){
|
if(i < 1){
|
||||||
return AjaxResult.error();
|
return AjaxResult.error();
|
||||||
}
|
}
|
||||||
@ -141,7 +141,7 @@ public class RzOverTimeServiceImpl implements IRzOverTimeService
|
|||||||
public List<RzOverTimeDetail> selectRzOverTimeDetailListByUserIdAndMonth(RzOverTime rzOverTime){
|
public List<RzOverTimeDetail> selectRzOverTimeDetailListByUserIdAndMonth(RzOverTime rzOverTime){
|
||||||
List<RzOverTimeDetail> res_list = null;
|
List<RzOverTimeDetail> res_list = null;
|
||||||
//根据月份和员工ID获取加班ID
|
//根据月份和员工ID获取加班ID
|
||||||
RzOverTime overTime = rzOverTimeMapper.selectRzOverTimeByNameAndMonth(rzOverTime.getUserId(),rzOverTime.getOverTimeMonth());
|
RzOverTime overTime = getBaseMapper().selectRzOverTimeByNameAndMonth(rzOverTime.getUserId(),rzOverTime.getOverTimeMonth());
|
||||||
if(overTime == null){
|
if(overTime == null){
|
||||||
return new ArrayList<RzOverTimeDetail>();
|
return new ArrayList<RzOverTimeDetail>();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,12 @@ package com.evo.system.controller;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.evo.common.vo.OptionVo;
|
||||||
|
import com.evo.personnelMatters.domain.RzSubsidyInfo;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
@ -83,6 +88,17 @@ public class SysDictDataController extends BaseController
|
|||||||
return success(data);
|
return success(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping(value = "/type/new/{dictType}")
|
||||||
|
public AjaxResult dictNewType(@PathVariable String dictType)
|
||||||
|
{
|
||||||
|
List<SysDictData> data = dictTypeService.selectDictDataByType(dictType);
|
||||||
|
if (StringUtils.isNull(data))
|
||||||
|
{
|
||||||
|
data = new ArrayList<SysDictData>();
|
||||||
|
}
|
||||||
|
return success(data.stream().map(d ->new OptionVo(d.getDictCode(), d.getDictLabel(), d.getListClass())).collect(Collectors.toList()));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增字典类型
|
* 新增字典类型
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
package com.evo.system.mapper;
|
package com.evo.system.mapper;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
import com.evo.common.core.domain.entity.SysDictData;
|
import com.evo.common.core.domain.entity.SysDictData;
|
||||||
|
|
||||||
@ -9,7 +11,7 @@ import com.evo.common.core.domain.entity.SysDictData;
|
|||||||
*
|
*
|
||||||
* @author evo
|
* @author evo
|
||||||
*/
|
*/
|
||||||
public interface SysDictDataMapper
|
public interface SysDictDataMapper extends BaseMapper<SysDictData>
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* 根据条件分页查询字典数据
|
* 根据条件分页查询字典数据
|
||||||
|
|||||||
@ -27,6 +27,15 @@ public interface ISysDictDataService
|
|||||||
*/
|
*/
|
||||||
public String selectDictLabel(String dictType, String dictValue);
|
public String selectDictLabel(String dictType, String dictValue);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据字典类型和字典键值查询字典数据信息
|
||||||
|
*
|
||||||
|
* @param dictType 字典类型
|
||||||
|
* @param dictLabel 字典键值
|
||||||
|
* @return 字典标签
|
||||||
|
*/
|
||||||
|
public String selectDictValue(String dictType, String dictLabel);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据字典数据ID查询信息
|
* 根据字典数据ID查询信息
|
||||||
*
|
*
|
||||||
|
|||||||
@ -1,12 +1,14 @@
|
|||||||
package com.evo.system.service;
|
package com.evo.system.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import com.evo.attendance.domain.RzAttendanceStatistical;
|
||||||
import com.evo.common.core.domain.AjaxResult;
|
import com.evo.common.core.domain.AjaxResult;
|
||||||
import com.evo.common.core.domain.entity.SysUser;
|
import com.evo.common.core.domain.entity.SysUser;
|
||||||
import com.evo.system.domain.SysStaff;
|
import com.evo.system.domain.SysStaff;
|
||||||
import com.evo.system.domain.vo.SysStaffVo;
|
import com.evo.system.domain.vo.SysStaffVo;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -1,6 +1,10 @@
|
|||||||
package com.evo.system.service.impl;
|
package com.evo.system.service.impl;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import com.evo.common.core.domain.entity.SysDictData;
|
import com.evo.common.core.domain.entity.SysDictData;
|
||||||
@ -14,10 +18,9 @@ import com.evo.system.service.ISysDictDataService;
|
|||||||
* @author evo
|
* @author evo
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class SysDictDataServiceImpl implements ISysDictDataService
|
public class SysDictDataServiceImpl extends ServiceImpl<SysDictDataMapper, SysDictData> implements ISysDictDataService
|
||||||
{
|
{
|
||||||
@Autowired
|
|
||||||
private SysDictDataMapper dictDataMapper;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据条件分页查询字典数据
|
* 根据条件分页查询字典数据
|
||||||
@ -28,7 +31,7 @@ public class SysDictDataServiceImpl implements ISysDictDataService
|
|||||||
@Override
|
@Override
|
||||||
public List<SysDictData> selectDictDataList(SysDictData dictData)
|
public List<SysDictData> selectDictDataList(SysDictData dictData)
|
||||||
{
|
{
|
||||||
return dictDataMapper.selectDictDataList(dictData);
|
return getBaseMapper().selectDictDataList(dictData);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -41,7 +44,13 @@ public class SysDictDataServiceImpl implements ISysDictDataService
|
|||||||
@Override
|
@Override
|
||||||
public String selectDictLabel(String dictType, String dictValue)
|
public String selectDictLabel(String dictType, String dictValue)
|
||||||
{
|
{
|
||||||
return dictDataMapper.selectDictLabel(dictType, dictValue);
|
return getBaseMapper().selectDictLabel(dictType, dictValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String selectDictValue(String dictType, String dictLabel) {
|
||||||
|
SysDictData sysDictData = getOne(new LambdaQueryWrapper<SysDictData>().eq(SysDictData::getDictType, dictType).eq(SysDictData::getDictLabel, dictLabel), false);
|
||||||
|
return ObjectUtils.isNotEmpty(sysDictData) ? sysDictData.getDictValue() : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -53,7 +62,7 @@ public class SysDictDataServiceImpl implements ISysDictDataService
|
|||||||
@Override
|
@Override
|
||||||
public SysDictData selectDictDataById(Long dictCode)
|
public SysDictData selectDictDataById(Long dictCode)
|
||||||
{
|
{
|
||||||
return dictDataMapper.selectDictDataById(dictCode);
|
return getBaseMapper().selectDictDataById(dictCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -67,8 +76,8 @@ public class SysDictDataServiceImpl implements ISysDictDataService
|
|||||||
for (Long dictCode : dictCodes)
|
for (Long dictCode : dictCodes)
|
||||||
{
|
{
|
||||||
SysDictData data = selectDictDataById(dictCode);
|
SysDictData data = selectDictDataById(dictCode);
|
||||||
dictDataMapper.deleteDictDataById(dictCode);
|
getBaseMapper().deleteDictDataById(dictCode);
|
||||||
List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
|
List<SysDictData> dictDatas = getBaseMapper().selectDictDataByType(data.getDictType());
|
||||||
DictUtils.setDictCache(data.getDictType(), dictDatas);
|
DictUtils.setDictCache(data.getDictType(), dictDatas);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -82,10 +91,10 @@ public class SysDictDataServiceImpl implements ISysDictDataService
|
|||||||
@Override
|
@Override
|
||||||
public int insertDictData(SysDictData data)
|
public int insertDictData(SysDictData data)
|
||||||
{
|
{
|
||||||
int row = dictDataMapper.insertDictData(data);
|
int row = getBaseMapper().insertDictData(data);
|
||||||
if (row > 0)
|
if (row > 0)
|
||||||
{
|
{
|
||||||
List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
|
List<SysDictData> dictDatas = getBaseMapper().selectDictDataByType(data.getDictType());
|
||||||
DictUtils.setDictCache(data.getDictType(), dictDatas);
|
DictUtils.setDictCache(data.getDictType(), dictDatas);
|
||||||
}
|
}
|
||||||
return row;
|
return row;
|
||||||
@ -100,10 +109,10 @@ public class SysDictDataServiceImpl implements ISysDictDataService
|
|||||||
@Override
|
@Override
|
||||||
public int updateDictData(SysDictData data)
|
public int updateDictData(SysDictData data)
|
||||||
{
|
{
|
||||||
int row = dictDataMapper.updateDictData(data);
|
int row = getBaseMapper().updateDictData(data);
|
||||||
if (row > 0)
|
if (row > 0)
|
||||||
{
|
{
|
||||||
List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
|
List<SysDictData> dictDatas = getBaseMapper().selectDictDataByType(data.getDictType());
|
||||||
DictUtils.setDictCache(data.getDictType(), dictDatas);
|
DictUtils.setDictCache(data.getDictType(), dictDatas);
|
||||||
}
|
}
|
||||||
return row;
|
return row;
|
||||||
|
|||||||
@ -2,10 +2,7 @@ package com.evo.system.service.impl;
|
|||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.evo.attendance.domain.RzAttendance;
|
import com.evo.attendance.service.IRzAttendanceStatisticalService;
|
||||||
import com.evo.attendance.domain.RzAttendanceStatistical;
|
|
||||||
import com.evo.attendance.mapper.RzAttendanceMapper;
|
|
||||||
import com.evo.attendance.mapper.RzAttendanceStatisticalMapper;
|
|
||||||
import com.evo.common.annotation.DataScope;
|
import com.evo.common.annotation.DataScope;
|
||||||
import com.evo.common.constant.Constants;
|
import com.evo.common.constant.Constants;
|
||||||
import com.evo.common.core.domain.AjaxResult;
|
import com.evo.common.core.domain.AjaxResult;
|
||||||
@ -18,8 +15,6 @@ import com.evo.common.utils.SecurityUtils;
|
|||||||
import com.evo.common.utils.StringUtils;
|
import com.evo.common.utils.StringUtils;
|
||||||
import com.evo.common.utils.bean.BeanUtils;
|
import com.evo.common.utils.bean.BeanUtils;
|
||||||
import com.evo.equipment.service.IEqSnDetailService;
|
import com.evo.equipment.service.IEqSnDetailService;
|
||||||
import com.evo.personnelMatters.domain.RzHoliday;
|
|
||||||
import com.evo.personnelMatters.mapper.RzHolidayMapper;
|
|
||||||
import com.evo.restaurant.domain.RzRestaurantStatistics;
|
import com.evo.restaurant.domain.RzRestaurantStatistics;
|
||||||
import com.evo.restaurant.mapper.RzRestaurantStatisticsMapper;
|
import com.evo.restaurant.mapper.RzRestaurantStatisticsMapper;
|
||||||
import com.evo.system.domain.SysStaff;
|
import com.evo.system.domain.SysStaff;
|
||||||
@ -31,7 +26,6 @@ import com.evo.system.mapper.SysStaffDetailMapper;
|
|||||||
import com.evo.system.mapper.SysStaffMapper;
|
import com.evo.system.mapper.SysStaffMapper;
|
||||||
import com.evo.system.service.ISysStaffService;
|
import com.evo.system.service.ISysStaffService;
|
||||||
import com.evo.system.service.RzUploadService;
|
import com.evo.system.service.RzUploadService;
|
||||||
import com.evo.utils.DateUtil;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.commons.lang3.ObjectUtils;
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
@ -73,17 +67,13 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
|
|||||||
@Resource
|
@Resource
|
||||||
private SysDeptMapper deptMapper; //部门信息
|
private SysDeptMapper deptMapper; //部门信息
|
||||||
@Resource
|
@Resource
|
||||||
private RzAttendanceStatisticalMapper rzAttendanceStatisticalMapper; //考勤统计
|
private IRzAttendanceStatisticalService rzAttendanceStatisticalService; //考勤统计
|
||||||
@Resource
|
|
||||||
private RzAttendanceMapper rzAttendanceMapper; //打卡记录
|
|
||||||
@Resource
|
|
||||||
private RzHolidayMapper rzHolidayMapper; //假期
|
|
||||||
@Resource
|
@Resource
|
||||||
private RzRestaurantStatisticsMapper rzRestaurantStatisticsMapper; //餐饮统计
|
private RzRestaurantStatisticsMapper rzRestaurantStatisticsMapper; //餐饮统计
|
||||||
@Resource
|
@Resource
|
||||||
private RzUploadService rzUploadService;//餐饮统计
|
private RzUploadService rzUploadService;//文件上传
|
||||||
@Resource
|
@Resource
|
||||||
private IEqSnDetailService eqSnDetailService;//餐饮统计
|
private IEqSnDetailService eqSnDetailService;//设备信息
|
||||||
/**
|
/**
|
||||||
* 查询员工管理
|
* 查询员工管理
|
||||||
*
|
*
|
||||||
@ -165,7 +155,7 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
|
|||||||
//员工详情
|
//员工详情
|
||||||
createStaffDetail(sysStaff);
|
createStaffDetail(sysStaff);
|
||||||
//打卡统计,打卡详情
|
//打卡统计,打卡详情
|
||||||
createRzAttendance(sysStaff, getMonthAndDays());
|
rzAttendanceStatisticalService.createRzAttendance(sysStaff, Collections.emptyList(), null);
|
||||||
//处理餐饮信息
|
//处理餐饮信息
|
||||||
createRestaurantStatistics(sysStaff);
|
createRestaurantStatistics(sysStaff);
|
||||||
//处理考勤机相关信息
|
//处理考勤机相关信息
|
||||||
@ -216,84 +206,7 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
|
|||||||
sysStaffDetailMapper.updateSysStaffDetail(sysStaffDetail);
|
sysStaffDetailMapper.updateSysStaffDetail(sysStaffDetail);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* 创建打卡考勤信息
|
|
||||||
* @param sysStaff
|
|
||||||
*/
|
|
||||||
private void createRzAttendance(SysStaff sysStaff, List<String> dayList){
|
|
||||||
//根据员工ID查询当月的统计信息统计信息
|
|
||||||
RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(sysStaff.getUserId(),DateUtils.getNowDate());
|
|
||||||
if(StringUtils.isNotNull(rzAttendanceStatistical)){
|
|
||||||
//判断名称和部门是否一样。不一样操作修改
|
|
||||||
if(!rzAttendanceStatistical.getName().equals(sysStaff.getName()) || rzAttendanceStatistical.getDeptId() != sysStaff.getDeptId()){
|
|
||||||
//修改部门和姓名
|
|
||||||
rzAttendanceStatistical.setName(sysStaff.getName());
|
|
||||||
rzAttendanceStatistical.setDeptId(sysStaff.getDeptId());
|
|
||||||
rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical);
|
|
||||||
//查询考勤详情修改
|
|
||||||
List<RzAttendance> kq_list = rzAttendanceMapper.queryMonthAttendanceByStaffId(sysStaff.getUserId(),new Date());
|
|
||||||
//循环修改信息
|
|
||||||
for (RzAttendance rzAttendance : kq_list) {
|
|
||||||
rzAttendance.setDeptId(sysStaff.getDeptId());
|
|
||||||
rzAttendance.setName(sysStaff.getName());
|
|
||||||
rzAttendanceMapper.updateRzAttendance(rzAttendance);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
//新增考勤统计
|
|
||||||
rzAttendanceStatistical = new RzAttendanceStatistical();
|
|
||||||
rzAttendanceStatistical.setStaffId(sysStaff.getUserId());
|
|
||||||
rzAttendanceStatistical.setName(sysStaff.getName());
|
|
||||||
rzAttendanceStatistical.setMonth(DateUtils.getNowDate());
|
|
||||||
rzAttendanceStatistical.setShouldAttendance(new BigDecimal(currentMonthAttendance()).multiply(new BigDecimal("8.00")));
|
|
||||||
rzAttendanceStatistical.setDeptId(sysStaff.getDeptId());
|
|
||||||
rzAttendanceStatistical.setDelFlag(Constants.DELETE_FLAG_0);
|
|
||||||
rzAttendanceStatistical.setCreateBy(SecurityUtils.getUsername());
|
|
||||||
rzAttendanceStatistical.setCreateTime(DateUtils.getNowDate());
|
|
||||||
rzAttendanceStatisticalMapper.insertRzAttendanceStatistical(rzAttendanceStatistical);
|
|
||||||
//新增考勤详情
|
|
||||||
SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd");
|
|
||||||
RzAttendance rzAttendance = null;
|
|
||||||
List<RzAttendance> pa_list = new ArrayList<RzAttendance>();
|
|
||||||
for(String day: dayList){
|
|
||||||
rzAttendance = new RzAttendance();
|
|
||||||
rzAttendance.setDeptId(sysStaff.getDeptId());
|
|
||||||
rzAttendance.setName(sysStaff.getName());
|
|
||||||
rzAttendance.setStaffId(sysStaff.getUserId());
|
|
||||||
try{
|
|
||||||
rzAttendance.setAttendanceDate(sdfd.parse(day));
|
|
||||||
}catch (Exception e){
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
rzAttendance.setDelFlag(Constants.DELETE_FLAG_0);
|
|
||||||
rzAttendance.setCreateTime(DateUtils.getNowDate());
|
|
||||||
rzAttendance.setCreateBy(SecurityUtils.getUsername());
|
|
||||||
pa_list.add(rzAttendance);
|
|
||||||
}
|
|
||||||
rzAttendanceMapper.insertBatchRzAttendance(pa_list);
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<String> getMonthAndDays(){
|
|
||||||
List<String> dayList = new ArrayList<String>();
|
|
||||||
Calendar calendar = Calendar.getInstance();
|
|
||||||
int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
|
|
||||||
SimpleDateFormat sdfm = new SimpleDateFormat("yyyy-MM");
|
|
||||||
for(int p=1;p<=days;p++){
|
|
||||||
try{
|
|
||||||
String rq = sdfm.format(DateUtils.getNowDate())+"-";
|
|
||||||
if(p < 10){
|
|
||||||
rq += Constants.SEIZE_A_SEAT_0 + p;
|
|
||||||
}else {
|
|
||||||
rq += p;
|
|
||||||
}
|
|
||||||
dayList.add(rq);
|
|
||||||
}catch (Exception e){
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return dayList;
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* 创建餐饮统计
|
* 创建餐饮统计
|
||||||
* @param sysStaff
|
* @param sysStaff
|
||||||
@ -324,42 +237,6 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
|
|||||||
rzRestaurantStatistics.setCreateTime(DateUtils.getNowDate());
|
rzRestaurantStatistics.setCreateTime(DateUtils.getNowDate());
|
||||||
rzRestaurantStatisticsMapper.insertRzRestaurantStatistics(rzRestaurantStatistics);
|
rzRestaurantStatisticsMapper.insertRzRestaurantStatistics(rzRestaurantStatistics);
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* 计算当月应出勤天数
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private Long currentMonthAttendance(){
|
|
||||||
//获取当月的天数
|
|
||||||
Calendar calendar = Calendar.getInstance();
|
|
||||||
int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
|
|
||||||
SimpleDateFormat sdfm = new SimpleDateFormat("yyyy-MM");
|
|
||||||
SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd");
|
|
||||||
//获取当月第一天和最后一天
|
|
||||||
Date startDate = null;
|
|
||||||
Date endDate = null;
|
|
||||||
try{
|
|
||||||
startDate = sdfd.parse(sdfm.format(DateUtils.getNowDate()) + "-01");
|
|
||||||
endDate = sdfd.parse(sdfm.format(DateUtils.getNowDate()) + "-" + days);
|
|
||||||
}catch (Exception e){
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
//除去周日
|
|
||||||
days = days - DateUtil.isWeeked(startDate,endDate,1);
|
|
||||||
//查询假期,计算节假日
|
|
||||||
List<RzHoliday> jq_list = rzHolidayMapper.selectRzHolidayList(null);
|
|
||||||
for (RzHoliday rzHoliday : jq_list) {
|
|
||||||
//判断假期在本月
|
|
||||||
if(rzHoliday.getHoliday().getTime() > startDate.getTime() && rzHoliday.getHoliday().getTime() < endDate.getTime()){
|
|
||||||
//判断是上班或休息
|
|
||||||
if("0".equals(rzHoliday.getSpecialFlag())){
|
|
||||||
days -= 1;
|
|
||||||
}else{
|
|
||||||
days += 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return Long.valueOf(days);
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* 修改员工管理
|
* 修改员工管理
|
||||||
*
|
*
|
||||||
@ -444,7 +321,7 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
|
|||||||
//修改员工详情
|
//修改员工详情
|
||||||
createStaffDetail(sysStaff);
|
createStaffDetail(sysStaff);
|
||||||
//修改考勤统计
|
//修改考勤统计
|
||||||
createRzAttendance(sysStaff, getMonthAndDays());
|
rzAttendanceStatisticalService.createRzAttendance(sysStaff, Collections.emptyList(), null);
|
||||||
//餐饮统计
|
//餐饮统计
|
||||||
createRestaurantStatistics(sysStaff);
|
createRestaurantStatistics(sysStaff);
|
||||||
//处理考勤机相关信息
|
//处理考勤机相关信息
|
||||||
@ -475,7 +352,7 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
|
|||||||
//添加员工详情
|
//添加员工详情
|
||||||
createStaffDetail(sysStaff);
|
createStaffDetail(sysStaff);
|
||||||
//修改考勤统计
|
//修改考勤统计
|
||||||
createRzAttendance(sysStaff, getMonthAndDays());
|
rzAttendanceStatisticalService.createRzAttendance(sysStaff, Collections.emptyList(), null);
|
||||||
//餐饮统计
|
//餐饮统计
|
||||||
createRestaurantStatistics(sysStaff);
|
createRestaurantStatistics(sysStaff);
|
||||||
}
|
}
|
||||||
@ -851,7 +728,7 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
|
|||||||
if(i < 1){
|
if(i < 1){
|
||||||
return AjaxResult.error();
|
return AjaxResult.error();
|
||||||
}
|
}
|
||||||
createRzAttendance(sysStaff, getMonthAndDays());
|
rzAttendanceStatisticalService.createRzAttendance(sysStaff, Collections.emptyList(), null);
|
||||||
//餐饮统计
|
//餐饮统计
|
||||||
createRestaurantStatistics(sysStaff);
|
createRestaurantStatistics(sysStaff);
|
||||||
}
|
}
|
||||||
@ -890,13 +767,14 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
|
|||||||
public void autoCreateAttendanceData(){
|
public void autoCreateAttendanceData(){
|
||||||
//获取在职员工数据
|
//获取在职员工数据
|
||||||
List<SysStaff> params_list = getBaseMapper().selectSysStaffListAll();
|
List<SysStaff> params_list = getBaseMapper().selectSysStaffListAll();
|
||||||
List<String> dayList = getMonthAndDays();
|
List<String> dayList = DateUtils.getCurrentMonthAndDays();
|
||||||
//循环在职员工生成考勤统计
|
//循环在职员工生成考勤统计
|
||||||
for (SysStaff sysStaff : params_list) {
|
for (SysStaff sysStaff : params_list) {
|
||||||
createRzAttendance(sysStaff, dayList);
|
rzAttendanceStatisticalService.createRzAttendance(sysStaff, dayList, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 每天计算转正,离职日期
|
* 每天计算转正,离职日期
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -1,10 +1,14 @@
|
|||||||
package com.evo.utils;
|
package com.evo.utils;
|
||||||
|
|
||||||
import com.evo.personnelMatters.domain.RzHoliday;
|
import com.evo.common.utils.Collections;
|
||||||
|
import com.evo.common.utils.DateUtils;
|
||||||
|
import com.evo.common.utils.ParamUtils;
|
||||||
import com.evo.personnelMatters.mapper.RzHolidayMapper;
|
import com.evo.personnelMatters.mapper.RzHolidayMapper;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@ -28,61 +32,36 @@ public class DateUtil {
|
|||||||
* 计算俩个时间之间的小时数
|
* 计算俩个时间之间的小时数
|
||||||
* @param beginTime 请假开始时间
|
* @param beginTime 请假开始时间
|
||||||
* @param endTime 请假结束时间
|
* @param endTime 请假结束时间
|
||||||
* @param flag 假期类型
|
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public Long autoLeavehoursForCount(Date beginTime, Date endTime,String flag){
|
public Long autoLeaveHoursForCount(Date beginTime, Date endTime,Long fl){
|
||||||
SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd");
|
SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
SimpleDateFormat sdfh = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
||||||
//根据时间计算时间差 ,小时
|
//根据时间计算时间差 ,小时
|
||||||
Long xsc = 0l;
|
Long ts = DateUtils.getBetweenDays(beginTime, endTime);
|
||||||
try{
|
try{
|
||||||
Date b_time = sdfh.parse(sdfd.format(beginTime) +" 08:30:00");
|
//记录假期日期
|
||||||
Date e_time = sdfh.parse(sdfd.format(endTime) +" 17:30:00");
|
List<String> holidayDates = Collections.emptyList();
|
||||||
if(beginTime.before(b_time) && endTime.after(e_time)){
|
while (beginTime.compareTo(endTime) <= 0){
|
||||||
xsc = (e_time.getTime() - b_time.getTime())/1000/60/60;
|
holidayDates.add(sdfd.format(beginTime));
|
||||||
}else{
|
beginTime = DateUtils.addDays(beginTime,1);
|
||||||
if(endTime.after(e_time)){
|
|
||||||
xsc = (e_time.getTime() - beginTime.getTime())/1000/60/60;
|
|
||||||
}
|
|
||||||
if(beginTime.before(b_time)){
|
|
||||||
xsc = (endTime.getTime() - b_time.getTime())/1000/60/60;
|
|
||||||
}
|
}
|
||||||
|
String flag = String.valueOf(fl);
|
||||||
|
//请假类型及不包含法休, 也不包含公休
|
||||||
|
if(ParamUtils.getLeaveTypeNotIncludedFaXiuAndPublicHoliday().contains(flag)){
|
||||||
|
//获取结果当中的假期时间
|
||||||
|
List<String> holidays = Collections.findDuplicatesList(ParamUtils.getHoliddayList(Integer.valueOf(holidayDates.get(0).substring(0,4)), 0), holidayDates);
|
||||||
|
ts = new BigDecimal(ts).subtract(new BigDecimal(holidays.size())).longValue();
|
||||||
|
}else
|
||||||
|
//请假类型不包含法休
|
||||||
|
if(ParamUtils.getLeaveTypeNotIncludedFaXiu().contains(flag)){
|
||||||
|
List<String> holidays = Collections.findDuplicatesList(ParamUtils.getHoliddayList(Integer.valueOf(holidayDates.get(0).substring(0,4)), 1), holidayDates);
|
||||||
|
ts = new BigDecimal(ts).subtract(new BigDecimal(holidays.size())).longValue();
|
||||||
}
|
}
|
||||||
}catch (Exception e){
|
}catch (Exception e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
//计算天数
|
|
||||||
Long ts = xsc/24;
|
|
||||||
//假期类型为婚嫁,产假,陪产假计算周日和节假日,其他的假期都不算周日和节假日
|
|
||||||
if(!"6".equals(flag) && !"7".equals(flag) && !"8".equals(flag)){
|
|
||||||
//判断是否有周日 ,有周日减去
|
|
||||||
int zr = isWeeked(beginTime,endTime,1);
|
|
||||||
ts = ts - zr;
|
|
||||||
//查询节假日, 判断是否节假日
|
|
||||||
List<RzHoliday> h_list = rzHolidayMapper.selectRzHolidayList(null);
|
|
||||||
for (RzHoliday rzHoliday : h_list) {
|
|
||||||
if(rzHoliday.getHoliday().before(endTime) && rzHoliday.getHoliday().after(beginTime)){
|
|
||||||
//判断周日上班时间
|
|
||||||
if("1".equals(rzHoliday.getSpecialFlag())){
|
|
||||||
ts = ts + 1;
|
|
||||||
}else{
|
|
||||||
ts = ts - 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//请假结果小时数
|
//请假结果小时数
|
||||||
Long res = ts * 8;
|
return (ts * 8);
|
||||||
//小时余数
|
|
||||||
Long xsys = xsc%24;
|
|
||||||
//判断剩余小时数大于4小时,则请假为一天
|
|
||||||
if(xsys > 4){
|
|
||||||
res = res + 8;
|
|
||||||
}else if(xsys > 0){
|
|
||||||
res = res + 4;
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -6,7 +6,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
|
|
||||||
<resultMap type="RzHoliday" id="RzHolidayResult">
|
<resultMap type="RzHoliday" id="RzHolidayResult">
|
||||||
<result property="id" column="id" />
|
<result property="id" column="id" />
|
||||||
<result property="holiday" column="holiday" />
|
<!-- <result property="holiday" column="holiday" />-->
|
||||||
<result property="remarks" column="remarks" />
|
<result property="remarks" column="remarks" />
|
||||||
<result property="specialFlag" column="special_flag" />
|
<result property="specialFlag" column="special_flag" />
|
||||||
<result property="delFlag" column="del_flag" />
|
<result property="delFlag" column="del_flag" />
|
||||||
@ -24,7 +24,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<include refid="selectRzHolidayVo"/>
|
<include refid="selectRzHolidayVo"/>
|
||||||
<where>
|
<where>
|
||||||
del_flag = '0'
|
del_flag = '0'
|
||||||
<if test="holiday != null "> and holiday = #{holiday}</if>
|
<!-- <if test="holiday != null "> and holiday = #{holiday}</if> -->
|
||||||
<if test="remarks != null "> and remarks = #{remarks}</if>
|
<if test="remarks != null "> and remarks = #{remarks}</if>
|
||||||
<if test="specialFlag != null "> and special_flag = #{specialFlag}</if>
|
<if test="specialFlag != null "> and special_flag = #{specialFlag}</if>
|
||||||
</where>
|
</where>
|
||||||
@ -75,4 +75,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
</update>
|
</update>
|
||||||
|
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
@ -31,6 +31,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<if test="name != null and name != ''"> and name like concat('%', #{name}, '%')</if>
|
<if test="name != null and name != ''"> and name like concat('%', #{name}, '%')</if>
|
||||||
<if test="leaveId != null "> and leave_id = #{leaveId}</if>
|
<if test="leaveId != null "> and leave_id = #{leaveId}</if>
|
||||||
</where>
|
</where>
|
||||||
|
order by create_time desc
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="selectRzLeaveDetailById" parameterType="Long" resultMap="RzLeaveDetailResult">
|
<select id="selectRzLeaveDetailById" parameterType="Long" resultMap="RzLeaveDetailResult">
|
||||||
|
|||||||
@ -9,7 +9,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<result property="userId" column="user_id" />
|
<result property="userId" column="user_id" />
|
||||||
<result property="deptId" column="dept_id" />
|
<result property="deptId" column="dept_id" />
|
||||||
<result property="name" column="name" />
|
<result property="name" column="name" />
|
||||||
<result property="leaveDate" column="leave_date" />
|
|
||||||
<result property="sickHours" column="sick_hours" />
|
<result property="sickHours" column="sick_hours" />
|
||||||
<result property="absenceHours" column="absence_hours" />
|
<result property="absenceHours" column="absence_hours" />
|
||||||
<result property="compensatoryHours" column="compensatory_hours" />
|
<result property="compensatoryHours" column="compensatory_hours" />
|
||||||
@ -27,7 +26,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<sql id="selectRzLeaveVo">
|
<sql id="selectRzLeaveVo">
|
||||||
select id, user_id, dept_id, name, leave_date, sick_hours, absence_hours, compensatory_hours, marriage_hours, annual_hours, maternity_hours, paternity_hours, funeral_hours, work_hours, del_flag, create_by, create_time, update_by, update_time from rz_leave d
|
select id, user_id, dept_id, name, sick_hours, absence_hours, compensatory_hours, marriage_hours, annual_hours, maternity_hours, paternity_hours, funeral_hours, work_hours, del_flag, create_by, create_time, update_by, update_time from rz_leave d
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
<select id="selectRzLeaveList" parameterType="RzLeave" resultMap="RzLeaveResult">
|
<select id="selectRzLeaveList" parameterType="RzLeave" resultMap="RzLeaveResult">
|
||||||
@ -37,12 +36,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<if test="name != null and name != ''"> and name like concat('%',#{name},'%')</if>
|
<if test="name != null and name != ''"> and name like concat('%',#{name},'%')</if>
|
||||||
<if test="userId != null"> and user_id = #{userId}</if>
|
<if test="userId != null"> and user_id = #{userId}</if>
|
||||||
<if test="deptId != null "> and d.dept_id = #{deptId}</if>
|
<if test="deptId != null "> and d.dept_id = #{deptId}</if>
|
||||||
<choose>
|
|
||||||
<when test="leaveDate != null">and DATE_FORMAT( d.leave_date, '%Y%m' ) = DATE_FORMAT( #{leaveDate} , '%Y%m' )</when>
|
|
||||||
<otherwise>
|
|
||||||
and DATE_FORMAT( d.leave_date, '%Y%m' ) = DATE_FORMAT(NOW() , '%Y%m' )
|
|
||||||
</otherwise>
|
|
||||||
</choose>
|
|
||||||
${params.dataScope}
|
${params.dataScope}
|
||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
@ -58,7 +51,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<if test="userId != null">user_id,</if>
|
<if test="userId != null">user_id,</if>
|
||||||
<if test="deptId != null">dept_id,</if>
|
<if test="deptId != null">dept_id,</if>
|
||||||
<if test="name != null and name != ''">name,</if>
|
<if test="name != null and name != ''">name,</if>
|
||||||
<if test="leaveDate != null">leave_date,</if>
|
|
||||||
<if test="sickHours != null">sick_hours,</if>
|
<if test="sickHours != null">sick_hours,</if>
|
||||||
<if test="absenceHours != null">absence_hours,</if>
|
<if test="absenceHours != null">absence_hours,</if>
|
||||||
<if test="compensatoryHours != null">compensatory_hours,</if>
|
<if test="compensatoryHours != null">compensatory_hours,</if>
|
||||||
@ -78,7 +70,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<if test="userId != null">#{userId},</if>
|
<if test="userId != null">#{userId},</if>
|
||||||
<if test="deptId != null">#{deptId},</if>
|
<if test="deptId != null">#{deptId},</if>
|
||||||
<if test="name != null and name != ''">#{name},</if>
|
<if test="name != null and name != ''">#{name},</if>
|
||||||
<if test="leaveDate != null">#{leaveDate},</if>
|
|
||||||
<if test="sickHours != null">#{sickHours},</if>
|
<if test="sickHours != null">#{sickHours},</if>
|
||||||
<if test="absenceHours != null">#{absenceHours},</if>
|
<if test="absenceHours != null">#{absenceHours},</if>
|
||||||
<if test="compensatoryHours != null">#{compensatoryHours},</if>
|
<if test="compensatoryHours != null">#{compensatoryHours},</if>
|
||||||
@ -102,7 +93,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<if test="userId != null">user_id = #{userId},</if>
|
<if test="userId != null">user_id = #{userId},</if>
|
||||||
<if test="deptId != null">dept_id = #{deptId},</if>
|
<if test="deptId != null">dept_id = #{deptId},</if>
|
||||||
<if test="name != null and name != ''">name = #{name},</if>
|
<if test="name != null and name != ''">name = #{name},</if>
|
||||||
<if test="leaveDate != null">leave_date = #{leaveDate},</if>
|
|
||||||
<if test="sickHours != null">sick_hours = #{sickHours},</if>
|
<if test="sickHours != null">sick_hours = #{sickHours},</if>
|
||||||
<if test="absenceHours != null">absence_hours = #{absenceHours},</if>
|
<if test="absenceHours != null">absence_hours = #{absenceHours},</if>
|
||||||
<if test="compensatoryHours != null">compensatory_hours = #{compensatoryHours},</if>
|
<if test="compensatoryHours != null">compensatory_hours = #{compensatoryHours},</if>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user