diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaAttendanceMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaAttendanceMapper.java index 3262786..42c60fc 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaAttendanceMapper.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaAttendanceMapper.java @@ -1,6 +1,8 @@ package com.ruoyi.oa.mapper; +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.ruoyi.oa.domain.SysOaAttendance; +import com.ruoyi.oa.domain.bo.SysOaAttendanceBo; import com.ruoyi.oa.domain.vo.SysOaAttendanceVo; import com.ruoyi.common.core.mapper.BaseMapperPlus; import com.ruoyi.oa.domain.vo.SysUserVo; @@ -22,4 +24,12 @@ public interface SysOaAttendanceMapper extends BaseMapperPlus selectUserListAndAttendanceListAndProjectListByUserIds(@Param("userIds") List userIds, @Param("firstDay") Date firstDay,@Param("lastDay") Date lastDay); + + int updateDelAttendance(SysOaAttendance attendance); + + List queryListByTime(@Param("userId") Long userId, + @Param("attendanceDay") Long attendanceDay, + @Param("startTime") Date startTime, + @Param("endTime") Date endTime); + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaAttendanceServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaAttendanceServiceImpl.java index f7a648b..6c9bd8e 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaAttendanceServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaAttendanceServiceImpl.java @@ -52,7 +52,7 @@ public class SysOaAttendanceServiceImpl implements ISysOaAttendanceService { * 查询人员考勤 */ @Override - public SysOaAttendanceVo queryById(Long id){ + public SysOaAttendanceVo queryById(Long id) { return baseMapper.selectVoById(id); } @@ -95,23 +95,34 @@ public class SysOaAttendanceServiceImpl implements ISysOaAttendanceService { BeanUtil.copyProperties(bo, sysOaAttendanceBo); sysOaAttendanceBo.setProjectId(null); - List sysOaAttendanceVos = this.queryList(sysOaAttendanceBo); - SysOaAttendance add = BeanUtil.toBean(bo, SysOaAttendance.class); - validEntityBeforeSave(add); - if (sysOaAttendanceVos.isEmpty()){ + // 如果这个时间为空,则默认查询当月记录 + Date firstDay; + Date lastDay; + if (Objects.isNull(bo.getSelectTime())) { + firstDay = getFirstDay(new Date()); + + } else { + firstDay = getFirstDay(bo.getSelectTime()); + } + lastDay = getLastDay(firstDay); + + List sysOaAttendanceVos = baseMapper.queryListByTime(sysOaAttendanceBo.getUserId(), sysOaAttendanceBo.getAttendanceDay(), firstDay, lastDay); + + if (sysOaAttendanceVos.isEmpty()) { + bo.setCreateTime(firstDay); + SysOaAttendance add = BeanUtil.toBean(bo, SysOaAttendance.class); + validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); } return flag; - }else{ + } else { SysOaAttendanceVo sysOaAttendanceVo = sysOaAttendanceVos.get(0); sysOaAttendanceVo.setProjectId(bo.getProjectId()); - boolean flag = baseMapper.updateById(BeanUtil.toBean(sysOaAttendanceVo, SysOaAttendance.class))>0; - if (flag) { - bo.setId(add.getId()); - } - return flag; + sysOaAttendanceVo.setDelFlag(0L); + + return baseMapper.updateDelAttendance(BeanUtil.toBean(sysOaAttendanceVo, SysOaAttendance.class)) > 0; } } @@ -129,7 +140,7 @@ public class SysOaAttendanceServiceImpl implements ISysOaAttendanceService { /** * 保存前的数据校验 */ - private void validEntityBeforeSave(SysOaAttendance entity){ + private void validEntityBeforeSave(SysOaAttendance entity) { //TODO 做一些数据校验,如唯一约束 } @@ -138,7 +149,7 @@ public class SysOaAttendanceServiceImpl implements ISysOaAttendanceService { */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteBatchIds(ids) > 0; @@ -150,15 +161,15 @@ public class SysOaAttendanceServiceImpl implements ISysOaAttendanceService { // 如果这个时间为空,则默认查询当月记录 Date firstDay; Date lastDay; - if (Objects.isNull(bo.getSelectTime())){ + if (Objects.isNull(bo.getSelectTime())) { firstDay = getFirstDay(new Date()); - }else{ + } else { firstDay = getFirstDay(bo.getSelectTime()); } lastDay = getLastDay(firstDay); Page result = new Page<>(); - result.setRecords(baseMapper.selectUserListAndAttendanceListAndProjectListByUserIds(userIds,firstDay,lastDay)); + result.setRecords(baseMapper.selectUserListAndAttendanceListAndProjectListByUserIds(userIds, firstDay, lastDay)); // 这个total写当月有多长时间 Calendar calendar = Calendar.getInstance(); @@ -172,7 +183,7 @@ public class SysOaAttendanceServiceImpl implements ISysOaAttendanceService { public int insertBatch(SysOaAttendanceBo bo) { List userIds = sysUserRoleMapper.selectUserIdsByRoleId(1852970465740505090L); for (Long userId : userIds) { - SysOaAttendanceBo sysOaAttendanceBo = BeanUtil.toBean(bo,SysOaAttendanceBo.class); + SysOaAttendanceBo sysOaAttendanceBo = BeanUtil.toBean(bo, SysOaAttendanceBo.class); sysOaAttendanceBo.setUserId(userId); this.insertByBo(sysOaAttendanceBo); } @@ -200,20 +211,20 @@ public class SysOaAttendanceServiceImpl implements ISysOaAttendanceService { sysOaAttendanceVo.setUserId(sysUser.getUserId()); // 查询某月记录 - List sysOaAttendanceVos = baseMapper.selectVoListAndTime(userId, firstDay,lastDay); + List sysOaAttendanceVos = baseMapper.selectVoListAndTime(userId, firstDay, lastDay); List projectVos = new ArrayList<>(); Double workTimes = 0.0; Double hourWorkTimes = 0.0; for (SysOaAttendanceVo oaAttendanceVo : sysOaAttendanceVos) { // 出差问题解决 - if (oaAttendanceVo.getProjectId()!=0 && oaAttendanceVo.getProjectId()!=1){ + if (oaAttendanceVo.getProjectId() != 0 && oaAttendanceVo.getProjectId() != 1) { SysOaProjectVo sysOaProjectVo = projectService.queryById(oaAttendanceVo.getProjectId()); oaAttendanceVo.setColor(sysOaProjectVo.getColor()); oaAttendanceVo.setSysOaProjectVo(sysOaProjectVo); oaAttendanceVo.setProjectName(sysOaProjectVo.getProjectName()); projectVos.add(sysOaProjectVo); - workTimes+=oaAttendanceVo.getWorkTimes(); + workTimes += oaAttendanceVo.getWorkTimes(); hourWorkTimes += oaAttendanceVo.getHourWorkTimes(); } } @@ -228,12 +239,12 @@ public class SysOaAttendanceServiceImpl implements ISysOaAttendanceService { } - return costDataList; } /** * 删除当月某日所有人的记录 + * * @param day 日期 * @return */ @@ -241,22 +252,23 @@ public class SysOaAttendanceServiceImpl implements ISysOaAttendanceService { public int delOaAttendanceAll(Long day) { Date now = new Date(); - return baseMapper.delOaAttendanceAll(getFirstDay(now),getLastDay(now),day); + return baseMapper.delOaAttendanceAll(getFirstDay(now), getLastDay(now), day); } - private Date getFirstDay(Date time){ + private Date getFirstDay(Date time) { String firstDay = DateUtils.parseDateToStr("yyyy-MM-01", time); - return DateUtils.parseDate(firstDay); + return DateUtils.parseDate(firstDay); } - private Date getLastDay(Date time){ + private Date getLastDay(Date time) { String format = "yyyy-MM-"; // 计算某月的天数 Calendar calendar = Calendar.getInstance(); calendar.setTime(time); String dateLength = String.valueOf(calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); // 将字符串拼接 - format +=dateLength; + format += dateLength; + format += " 23:59:59"; return DateUtils.parseDate(DateUtils.parseDateToStr(format, time)); } diff --git a/ruoyi-oa/src/main/resources/mapper/oa/SysOaAttendanceMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/SysOaAttendanceMapper.xml index ac0a755..657aca1 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/SysOaAttendanceMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/SysOaAttendanceMapper.xml @@ -79,6 +79,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + update fad_oa.sys_oa_attendance + + project_id=#{projectId}, + user_id = #{userId}, + attendance_day = #{attendanceDay}, + update_time = #{updateTime}, + update_by = #{updateBy}, + del_flag = #{delFlag}, + day_length = #{dayLength}, + hour = #{hour}, + + where id = #{id} + + + + + delete from sys_oa_attendance where attendance_day = #{day} diff --git a/ruoyi-ui/src/views/oa/attendance/index.vue b/ruoyi-ui/src/views/oa/attendance/index.vue index 83edca2..d706b7c 100644 --- a/ruoyi-ui/src/views/oa/attendance/index.vue +++ b/ruoyi-ui/src/views/oa/attendance/index.vue @@ -441,8 +441,10 @@ export default { const attendanceIndex = user.attendances.findIndex( (i) => i.attendanceDay === dayIndex ); + if (attendanceIndex > -1) { const attendance = user.attendances[attendanceIndex]; + // 如果存在签到记录,使用对应项目的颜色 return { backgroundColor: attendance.color || '#fdf6e4', @@ -477,6 +479,7 @@ export default { projectId: 0, userId: this.selectUser.userId, attendanceDay: this.selectIndex, + selectTime:this.queryParams.selectTime } addOaAttendance(this.form).then(res => { this.getList() @@ -487,6 +490,7 @@ export default { this.form = { projectId: 0, attendanceDay: this.selectIndex, + selectTime:this.queryParams.selectTime } // 集体赋予状态 addBatchOaAttendance(this.form).then(res => { @@ -501,6 +505,7 @@ export default { projectId: 1, userId: this.selectUser.userId, attendanceDay: this.selectIndex, + selectTime:this.queryParams.selectTime } addOaAttendance(this.form).then(res => { this.getList() @@ -511,6 +516,7 @@ export default { this.form = { projectId: 1, attendanceDay: this.selectIndex, + selectTime:this.queryParams.selectTime } // 集体赋予状态 addBatchOaAttendance(this.form).then(res => { @@ -604,7 +610,6 @@ export default { this.$message({message: '请选择工作时长', type: 'warning'}) return; } - let time = this.timeFlag === 0 ? this.form.dayLength : this.form.hour if (!this.selectAll) { @@ -613,7 +618,8 @@ export default { userId: this.selectUser.userId, attendanceDay: this.selectIndex, dayLength: this.timeFlag === 0 ? this.form.dayLength : undefined, - hour: this.timeFlag === 1 ? this.form.hour : undefined + hour: this.timeFlag === 1 ? this.form.hour : undefined, + selectTime:this.queryParams.selectTime } addOaAttendance(this.form).then(res => { this.selectUser = this.selectArrayIndex >= this.userList.length - 1 ? this.selectUser : this.userList[this.selectArrayIndex + 1] @@ -625,7 +631,8 @@ export default { projectId: project.projectId, attendanceDay: this.selectIndex, dayLength: this.timeFlag === 0 ? this.form.dayLength : undefined, - hour: this.timeFlag === 1 ? this.form.hour : undefined + hour: this.timeFlag === 1 ? this.form.hour : undefined, + selectTime:this.queryParams.selectTime } // 集体赋予状态 addBatchOaAttendance(this.form).then(res => {