@@ -17,7 +17,7 @@ import org.springframework.web.bind.annotation.RestController; | |||
import java.util.List; | |||
/** | |||
* 打卡控制台 | |||
* 打卡操作 | |||
*/ | |||
@Validated | |||
@RequiredArgsConstructor |
@@ -20,7 +20,7 @@ import org.springframework.web.bind.annotation.*; | |||
import java.util.List; | |||
/** | |||
* 打卡配置控制台 | |||
* 打卡考勤组 | |||
*/ | |||
@Validated | |||
@RequiredArgsConstructor | |||
@@ -41,8 +41,8 @@ public class DkAttendanceGroupController extends BaseController { | |||
// 新增打卡配置 | |||
@PostMapping("/add") | |||
public R<String> add(@RequestBody DkAttendanceGroupDTO dkAttendanceGroupDTO) { | |||
return R.ok(dkAttendanceGroupService.add(dkAttendanceGroupDTO)); | |||
public R<String> addOrUpdate(@RequestBody DkAttendanceGroupDTO dkAttendanceGroupDTO) { | |||
return R.ok(dkAttendanceGroupService.addOrUpdate(dkAttendanceGroupDTO)); | |||
} | |||
// 删除打卡配置 |
@@ -15,7 +15,7 @@ import org.springframework.web.bind.annotation.*; | |||
import java.util.List; | |||
/** | |||
* 打卡配置控制台 | |||
* 打卡配置 | |||
*/ | |||
@Validated | |||
@RequiredArgsConstructor |
@@ -19,7 +19,7 @@ import javax.servlet.http.HttpServletResponse; | |||
import java.util.List; | |||
/** | |||
* 打卡控制台 | |||
* 打卡记录数据 | |||
*/ | |||
@Validated | |||
@RequiredArgsConstructor |
@@ -1,71 +1,54 @@ | |||
package com.ruoyi.zhushi.job; | |||
import com.alibaba.fastjson.JSONObject; | |||
import com.ruoyi.zhushi.entity.DkAttendanceGroup; | |||
import com.ruoyi.zhushi.entity.DkAttendanceGroupAndUser; | |||
import com.ruoyi.zhushi.entity.DkCheckInRecord; | |||
import com.ruoyi.zhushi.mapper.DkAttendanceGroupAndUserMapper; | |||
import com.ruoyi.zhushi.mapper.DkRecordMapper; | |||
import com.ruoyi.zhushi.util.Constans; | |||
import com.ruoyi.zhushi.util.HolidayUtil; | |||
import lombok.extern.slf4j.Slf4j; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.scheduling.annotation.Scheduled; | |||
import org.springframework.stereotype.Component; | |||
import java.text.ParseException; | |||
import java.time.LocalDate; | |||
import java.time.LocalDateTime; | |||
import java.util.List; | |||
@Component | |||
@Slf4j | |||
public class DkJob { | |||
@Autowired | |||
private DkRecordMapper dkRecordMapper; | |||
@Autowired | |||
private DkAttendanceGroupAndUserMapper dkAttendanceGroupAndUserMapper; | |||
// 每天18执行 | |||
@Scheduled(cron = "0 0 2 * * ?") | |||
public void executeTask() throws ParseException { | |||
public void executeTask() throws Exception { | |||
// 任务逻辑 | |||
System.out.println("执行工作日18点定时任务:" + System.currentTimeMillis()); | |||
log.info("打卡初始化定时任务开始:" + LocalDateTime.now()); | |||
try { | |||
// 获取所有员工 | |||
List<JSONObject> jsonObjects = dkRecordMapper.queryAllUsers(null); | |||
for (JSONObject jsonObject : jsonObjects) { | |||
// 获取员工id | |||
Long userId = jsonObject.getLong("userId"); | |||
// 如果没有员工id,则跳过 | |||
if (userId == null){ | |||
continue; | |||
} | |||
// 获取员工姓名 | |||
String userName = jsonObject.getString("userName"); | |||
// 获取员工昵称 | |||
String nickName = jsonObject.getString("nickName"); | |||
// 根据userId 查询考勤组信息 | |||
DkAttendanceGroup appDTO = dkRecordMapper.queryConfigByUserId(userId); | |||
// 如果没有考勤组信息,则跳过 | |||
if(appDTO == null){ | |||
continue; | |||
} | |||
List<DkAttendanceGroupAndUser> list = dkAttendanceGroupAndUserMapper.selectList(); | |||
for (DkAttendanceGroupAndUser user : list) { | |||
DkCheckInRecord dkCheckInRecord = new DkCheckInRecord(); | |||
dkCheckInRecord.setSysUserId(userId); | |||
dkCheckInRecord.setSysUserName(userName); | |||
dkCheckInRecord.setNickName(nickName); | |||
dkCheckInRecord.setSysUserId(user.getUserId()); | |||
dkCheckInRecord.setSysUserName(user.getUserName()); | |||
dkCheckInRecord.setNickName(user.getNickName()); | |||
dkCheckInRecord.setCheckInTime(LocalDateTime.now()); | |||
dkCheckInRecord.setCheckInStatus(Constans.CHECK_IN_STATUS_0); | |||
dkCheckInRecord.setClockInStatus(Constans.CHECK_IN_STATUS_0); | |||
dkCheckInRecord.setClockOutStatus(Constans.CHECK_IN_STATUS_0); | |||
dkCheckInRecord.setAttendanceGroupId(appDTO.getId()); | |||
dkCheckInRecord.setAttendanceGroupName(appDTO.getName()); | |||
dkCheckInRecord.setAttendanceGroupId(user.getAttendanceTeamId()); | |||
dkCheckInRecord.setAttendanceGroupName(user.getAttendanceGroupName()); | |||
dkRecordMapper.insertOrUpdate(dkCheckInRecord); | |||
} | |||
System.out.println("执行工作日18点定时任务:" + System.currentTimeMillis()); | |||
log.info("打卡初始化定时任务结束:" + LocalDateTime.now()); | |||
// 具体任务逻辑 | |||
} catch (Exception e) { | |||
System.out.println("执行工作日18点定时任务失败:" + e.getMessage()); | |||
log.error("打卡初始化定时任务失败:" + e.getMessage(),e); | |||
} | |||
} | |||
} |
@@ -14,13 +14,5 @@ import java.util.List; | |||
@Mapper | |||
public interface DkRecordMapper extends BaseMapperPlus<DkRecordMapper, DkCheckInRecord, DkCheckInRecordDTO> { | |||
public List<DkCheckInRecord> getCurrentDayRecord(@Param("userId") long userId, @Param("currentDate") LocalDate currentDate); | |||
public List<DkCheckInRecord> queryCurrentDayOutRecord(@Param("userId") long userId); | |||
DkAttendanceGroup queryConfigByUserId(@Param("userId") long userId); | |||
List<DkCheckInRecord> getRecordHistory(@Param("userId") long userId); | |||
List<JSONObject> queryAllUsers(@Param("attendanceGroupIds") List<Long> attendanceGroupIds); | |||
} |
@@ -12,13 +12,13 @@ public interface DkAttendanceGroupService { | |||
TableDataInfo<DkAttendanceGroupDTO> queryPageList(DkAttendanceGroupDTO dkAttendanceGroupDTO); | |||
public String add(DkAttendanceGroupDTO dkAttendanceGroupDTO); | |||
String addOrUpdate(DkAttendanceGroupDTO dkAttendanceGroupDTO); | |||
public int del(long id); | |||
int del(long id); | |||
public AppDTO queryAttendanceGroupBYUserId(long useId); | |||
AppDTO queryAttendanceGroupBYUserId(long useId); | |||
public int deleteConfig(long id); | |||
int deleteConfig(long id); | |||
public List<DkAttendanceGroupDTO> queryAttendanceGroup(); | |||
List<DkAttendanceGroupDTO> queryAttendanceGroup(); | |||
} |
@@ -2,17 +2,15 @@ package com.ruoyi.zhushi.service.impl; | |||
import cn.hutool.core.bean.BeanUtil; | |||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||
import com.ruoyi.common.core.page.TableDataInfo; | |||
import com.ruoyi.zhushi.entity.AppDTO; | |||
import com.ruoyi.zhushi.entity.DkAttendanceGroup; | |||
import com.ruoyi.zhushi.entity.DkAttendanceGroupAndUser; | |||
import com.ruoyi.zhushi.entity.DkAttendanceGroupDTO; | |||
import com.ruoyi.common.exception.GlobalException; | |||
import com.ruoyi.zhushi.entity.*; | |||
import com.ruoyi.zhushi.mapper.DkAttendanceGroupAndUserMapper; | |||
import com.ruoyi.zhushi.mapper.DkAttendanceGroupMapper; | |||
import com.ruoyi.zhushi.service.DkAttendanceGroupService; | |||
import com.ruoyi.zhushi.util.Constans; | |||
import org.apache.commons.lang3.StringUtils; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
@@ -47,52 +45,45 @@ public class DkAttendanceGroupServiceImpl implements DkAttendanceGroupService { | |||
return TableDataInfo.build(dkAttendanceGroupDTOS); | |||
} | |||
// 添加考勤组 | |||
// 添加或者更新考勤组 | |||
@Override | |||
public String add(DkAttendanceGroupDTO dkAttendanceGroupDTO) { | |||
StringBuffer stringBuffer = new StringBuffer(); | |||
List<DkAttendanceGroupAndUser> members = new ArrayList<>(); | |||
dkAttendanceGroupDTO.getMembers().forEach(e -> { | |||
LambdaQueryWrapper<DkAttendanceGroupAndUser> queryWrapper = Wrappers.lambdaQuery(); | |||
queryWrapper.eq(DkAttendanceGroupAndUser::getUserId, e.getUserId()); | |||
List<DkAttendanceGroupAndUser> dkAttendanceGroupAndUsers = dkAttendanceGroupAndUserMapper.selectList(queryWrapper); | |||
if(dkAttendanceGroupAndUsers.size() > 0){ | |||
if(dkAttendanceGroupAndUsers.get(0).getAttendanceTeamId() != dkAttendanceGroupDTO.getId()){ | |||
stringBuffer.append(e.getUserName() + "已加入" + dkAttendanceGroupAndUsers.get(0).getDeptName()); | |||
stringBuffer.append(StringUtils.repeat(" ", 5)); // 添加10个空格 | |||
} | |||
}else{ | |||
members.add(e); | |||
} | |||
}); | |||
// if(stringBuffer.length() > 0){ | |||
// throw new RuntimeException(stringBuffer.toString()); | |||
// } | |||
public String addOrUpdate(DkAttendanceGroupDTO dkAttendanceGroupDTO) { | |||
//1.新增或者更新考勤组信息 | |||
DkAttendanceGroup dkAttendanceGroup = BeanUtil.toBean(dkAttendanceGroupDTO, DkAttendanceGroup.class); | |||
dkAttendanceGroupMapper.insertOrUpdate(dkAttendanceGroup); | |||
if(members.size() > 0){ | |||
members.forEach(e -> { | |||
DkAttendanceGroupAndUser dkAttendanceGroupAndUser = new DkAttendanceGroupAndUser(); | |||
dkAttendanceGroupAndUser.setAttendanceTeamId(dkAttendanceGroup.getId()); | |||
dkAttendanceGroupAndUser.setUserId(e.getUserId()); | |||
dkAttendanceGroupAndUser.setUserName(e.getUserName()); | |||
dkAttendanceGroupAndUser.setDeptName(e.getDeptName()); | |||
dkAttendanceGroupAndUser.setAttendanceGroupName(dkAttendanceGroup.getName()); | |||
dkAttendanceGroupAndUser.setNickName(e.getNickName()); | |||
dkAttendanceGroupAndUserMapper.insertOrUpdate(dkAttendanceGroupAndUser); | |||
}); | |||
//2.删除考勤组关联的用户信息 | |||
QueryWrapper<DkAttendanceGroupAndUser> deleteWrapper = new QueryWrapper<>(); | |||
deleteWrapper.eq("attendance_team_id",dkAttendanceGroupDTO.getId()); | |||
dkAttendanceGroupAndUserMapper.delete(deleteWrapper); | |||
//3.重新插入本次关联的用户信息 | |||
List<DkAttendanceGroupAndUser> members = dkAttendanceGroupDTO.getMembers(); | |||
if (members!=null&&members.size()>0) { | |||
for (DkAttendanceGroupAndUser member: members) { | |||
QueryWrapper<DkAttendanceGroupAndUser> queryWrapper = new QueryWrapper<>(); | |||
queryWrapper.eq("user_id",member.getUserId()); | |||
List<DkAttendanceGroupAndUser> dkAttendanceGroupAndUsers = dkAttendanceGroupAndUserMapper.selectList(queryWrapper); | |||
if(dkAttendanceGroupAndUsers!=null&&dkAttendanceGroupAndUsers.size()>0) { | |||
throw new GlobalException(member.getNickName()+"已经被其他考勤组规则选择!"); | |||
} | |||
member.setAttendanceTeamId(dkAttendanceGroup.getId()); | |||
member.setAttendanceGroupName(dkAttendanceGroup.getName()); | |||
} | |||
} | |||
if(stringBuffer.length() > 0){ | |||
return stringBuffer.toString(); | |||
}else { | |||
return Constans.SUCCESS; | |||
if(members.size() > 0){ | |||
dkAttendanceGroupAndUserMapper.insertOrUpdateBatch(members); | |||
} | |||
return Constans.SUCCESS; | |||
} | |||
@Override | |||
public int del(long id) { | |||
return dkAttendanceGroupMapper.deleteById(id); | |||
//1.删除考勤组配置信息 | |||
int i = dkAttendanceGroupMapper.deleteById(id); | |||
//2.删除考勤组关联的用户信息 | |||
QueryWrapper<DkAttendanceGroupAndUser> deleteWrapper = new QueryWrapper<>(); | |||
deleteWrapper.eq("attendance_team_id",id); | |||
dkAttendanceGroupAndUserMapper.delete(deleteWrapper); | |||
return i; | |||
} | |||
// 查询用户所在的考勤组 | |||
@@ -105,8 +96,6 @@ public class DkAttendanceGroupServiceImpl implements DkAttendanceGroupService { | |||
// 删除用户考勤组 | |||
@Override | |||
public int deleteConfig(long id) { | |||
// LambdaQueryWrapper<DkAttendanceGroupAndUser> queryWrapper = Wrappers.lambdaQuery(); | |||
// queryWrapper.eq(DkAttendanceGroupAndUser::getUserId, userId); | |||
return dkAttendanceGroupAndUserMapper.deleteById(id); | |||
} |
@@ -11,6 +11,7 @@ import com.ruoyi.common.core.domain.model.LoginUser; | |||
import com.ruoyi.common.core.page.TableDataInfo; | |||
import com.ruoyi.common.helper.LoginHelper; | |||
import com.ruoyi.zhushi.entity.*; | |||
import com.ruoyi.zhushi.mapper.DkAttendanceGroupAndUserMapper; | |||
import com.ruoyi.zhushi.mapper.DkRecordMapper; | |||
import com.ruoyi.zhushi.mapper.NjBalanceManageDetailMapper; | |||
import com.ruoyi.zhushi.service.DkRecordService; | |||
@@ -18,9 +19,6 @@ import com.ruoyi.zhushi.service.NjBalanceManageDetailService; | |||
import com.ruoyi.zhushi.util.CalendarGenerator; | |||
import com.ruoyi.zhushi.util.Constans; | |||
import com.ruoyi.zhushi.util.TimeUtils; | |||
import okhttp3.OkHttpClient; | |||
import okhttp3.Request; | |||
import okhttp3.Response; | |||
import org.apache.commons.lang3.StringUtils; | |||
import org.apache.poi.ss.usermodel.*; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
@@ -28,7 +26,6 @@ import org.springframework.core.io.ClassPathResource; | |||
import org.springframework.stereotype.Service; | |||
import javax.servlet.http.HttpServletResponse; | |||
import java.io.FileInputStream; | |||
import java.io.IOException; | |||
import java.io.InputStream; | |||
import java.math.BigDecimal; | |||
@@ -45,8 +42,9 @@ public class DkRecordServiceImpl implements DkRecordService { | |||
@Autowired | |||
private NjBalanceManageDetailMapper njBalanceManageDetailMapper; | |||
@Autowired | |||
private NjBalanceManageDetailService njBalanceManageDetailService; | |||
private DkAttendanceGroupAndUserMapper dkAttendanceGroupAndUserMapper; | |||
public String getTime() { | |||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | |||
@@ -148,21 +146,11 @@ public class DkRecordServiceImpl implements DkRecordService { | |||
if (inputMonth.isAfter(currentMonth)) { | |||
return ; | |||
} | |||
// 查询出所有人员 | |||
List<JSONObject> jsonObjects = dkMapper.queryAllUsers(dkCheckInRecordDTO.getAttendanceGroupIds()); | |||
if(jsonObjects==null||jsonObjects.size() == 0){ | |||
// 查询出考勤组所有人员 | |||
List<DkAttendanceGroupAndUser> users = dkAttendanceGroupAndUserMapper.selectList(); | |||
if (users==null||users.size()==0) { | |||
return; | |||
} | |||
//转换对象格式 | |||
List<DkCheckInRecordDTO> dkCheckInRecordDTOS = new ArrayList<>(); | |||
for (JSONObject jsonObject:jsonObjects) { | |||
DkCheckInRecordDTO dto = new DkCheckInRecordDTO(); | |||
dto.setSysUserId((Long)jsonObject.get("userId")); | |||
dto.setSysUserName((String)jsonObject.get("userName")); | |||
dto.setNickName((String)jsonObject.get("nickName")); | |||
dkCheckInRecordDTOS.add(dto); | |||
} | |||
try { | |||
InputStream inputStream = null; | |||
@@ -186,9 +174,9 @@ public class DkRecordServiceImpl implements DkRecordService { | |||
int earlyCount = 0; | |||
Workbook workbook = WorkbookFactory.create(inputStream); | |||
// 遍历所有人员 | |||
for (int i = 0; i <= dkCheckInRecordDTOS.size(); i++){ | |||
for (int i = 0; i <= users.size(); i++){ | |||
int newSheetIndex = workbook.getNumberOfSheets(); | |||
if(i == dkCheckInRecordDTOS.size()){ | |||
if(i == users.size()){ | |||
//国内有汇总 | |||
if (Constans.GUONEI.equals(dkCheckInRecordDTO.getModelType())) { | |||
workbook.createSheet("汇总"); | |||
@@ -198,17 +186,18 @@ public class DkRecordServiceImpl implements DkRecordService { | |||
fillTemplateHuiZong(newSheet, latePersonCount, earlyPersonCount, lateCount, earlyCount); | |||
} | |||
}else{ | |||
DkCheckInRecordDTO dk = dkCheckInRecordDTOS.get(i); | |||
DkAttendanceGroupAndUser user = users.get(i); | |||
// 准备数据 | |||
dkCheckInRecordDTO.setSysUserId(user.getUserId()); | |||
dkCheckInRecordDTO.setSysUserName(user.getUserName()); | |||
dkCheckInRecordDTO.setNickName(user.getNickName()); | |||
workbook.cloneSheet(0); | |||
workbook.setSheetName(newSheetIndex, dk.getNickName() != null ? dk.getNickName() : dk.getSysUserName()); | |||
workbook.setSheetName(newSheetIndex, user.getNickName() != null ? user.getNickName() : user.getUserName()); | |||
// 获取新创建的Sheet | |||
Sheet newSheet = workbook.getSheetAt(newSheetIndex); | |||
// 准备数据 | |||
dkCheckInRecordDTO.setSysUserId(dk.getSysUserId()); | |||
dkCheckInRecordDTO.setSysUserName(dk.getSysUserName()); | |||
dkCheckInRecordDTO.setNickName(dk.getNickName()); | |||
// 国内模版 | |||
if(Constans.GUONEI.equals(dkCheckInRecordDTO.getModelType())){ | |||
// 构造导出数据 | |||
@@ -222,20 +211,16 @@ public class DkRecordServiceImpl implements DkRecordService { | |||
earlyCount = earlyCount + attendanceData.getZaotuicishu(); | |||
} | |||
// 填充数据到模板 | |||
if (attendanceData.getDayRecords().size() == 0){ | |||
return; | |||
} | |||
fillTemplate(newSheet, attendanceData,dkCheckInRecordDTO.getStrMonth(),dk); | |||
/* if (attendanceData.getDayRecords().size() == 0){ | |||
continue; | |||
}*/ | |||
fillTemplate(newSheet, attendanceData,dkCheckInRecordDTO.getStrMonth(),user); | |||
} | |||
// 日本模版 | |||
if(Constans.RIBEN.equals(dkCheckInRecordDTO.getModelType())){ | |||
// 构造导出数据 | |||
EmployeeAttendance attendanceData = prepareSampleDataRiBen(dkCheckInRecordDTO); | |||
// 填充数据到模板 | |||
/* if (attendanceData.getDayRecords().size() == 0){ | |||
break; | |||
}*/ | |||
fillTemplateRiBen(newSheet, attendanceData,dkCheckInRecordDTO.getStrMonth(),dk); | |||
fillTemplateRiBen(newSheet, attendanceData,dkCheckInRecordDTO.getStrMonth(),user); | |||
} | |||
} | |||
} | |||
@@ -408,10 +393,10 @@ public class DkRecordServiceImpl implements DkRecordService { | |||
return data; | |||
} | |||
private void fillTemplate(Sheet sheet, EmployeeAttendance data,String date,DkCheckInRecordDTO dk) { | |||
private void fillTemplate(Sheet sheet, EmployeeAttendance data,String date,DkAttendanceGroupAndUser user) { | |||
// 1.填充标题区域 | |||
setCellValue(sheet, 6, 6, dk.getSysUserName()); | |||
setCellValue(sheet, 6, 10, dk.getNickName()); | |||
setCellValue(sheet, 6, 6, user.getUserName()); | |||
setCellValue(sheet, 6, 9, user.getNickName()); | |||
setCellValue(sheet, 3, 1, date); | |||
//2.考勤数据区域 | |||
@@ -447,7 +432,7 @@ public class DkRecordServiceImpl implements DkRecordService { | |||
//查询当前用户 这个月的年假 审批通过记录 | |||
QueryWrapper<NjBalanceManageDetail> njWrapper = new QueryWrapper<>(); | |||
njWrapper.eq("user_id", dk.getSysUserId()); | |||
njWrapper.eq("user_id", user.getUserId()); | |||
njWrapper.eq("status","2"); | |||
njWrapper.apply("YEAR(create_time) = {0}", Integer.parseInt(date.substring(0,4))); | |||
njWrapper.apply("MONTH(create_time) = {0}",Integer.parseInt(date.substring(5))); | |||
@@ -477,6 +462,7 @@ public class DkRecordServiceImpl implements DkRecordService { | |||
if (isLeave) { | |||
DayRecord record = new DayRecord(); | |||
record.setNj("●"); | |||
record.setRemark("年假"); | |||
fillTemplateCell(sheet, rowIndex, record); | |||
njCount++; | |||
} | |||
@@ -567,11 +553,11 @@ public class DkRecordServiceImpl implements DkRecordService { | |||
return data; | |||
} | |||
//日本excel 整体信息赋值 | |||
private void fillTemplateRiBen(Sheet sheet, EmployeeAttendance data,String date,DkCheckInRecordDTO dk) { | |||
private void fillTemplateRiBen(Sheet sheet, EmployeeAttendance data,String date,DkAttendanceGroupAndUser user) { | |||
// 1.填充标题区域 | |||
setCellValue(sheet, 3, 1, date); | |||
setCellValue(sheet, 6, 6, dk.getSysUserName()); | |||
setCellValue(sheet, 6, 8, dk.getNickName()); | |||
setCellValue(sheet, 6, 6, user.getUserName()); | |||
setCellValue(sheet, 6, 8, user.getNickName()); | |||
// | |||
// 要生成的年份 |
@@ -1,7 +1,6 @@ | |||
package com.ruoyi.zhushi.service.impl; | |||
import cn.hutool.core.bean.BeanUtil; | |||
import com.alibaba.fastjson.JSONObject; | |||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |||
import com.baomidou.mybatisplus.core.metadata.IPage; | |||
@@ -16,7 +15,6 @@ import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
import java.math.BigDecimal; | |||
import java.time.LocalDate; | |||
import java.time.LocalDateTime; | |||
import java.time.temporal.ChronoUnit; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
@@ -36,8 +34,6 @@ public class NjBalanceManageServiceImpl implements NjBalanceManageService { | |||
@Autowired | |||
private NjRuleConfigAndUserMapper njRuleConfigAndUserMapper; | |||
@Autowired | |||
private DkRecordMapper dkRecordMapper; | |||
@Override | |||
public TableDataInfo<NjBalanceManageDTO> queryPageList(NjBalanceManageDTO njBalanceManageDTO, PageQuery pageQuery) { | |||
LambdaQueryWrapper<NjBalanceManage> queryWrapper = new LambdaQueryWrapper<>(); | |||
@@ -81,110 +77,56 @@ public class NjBalanceManageServiceImpl implements NjBalanceManageService { | |||
if (njRuleConfigDTOS!=null&&njRuleConfigDTOS.size()>0) { | |||
// 遍历所有年假配置,判断是否适用全部人员,判断年假的生成方式 | |||
for (NjRuleConfigDTO njRuleConfigDTO : njRuleConfigDTOS) { | |||
// 获取人员适用范围true 全员, fale 指定人员 | |||
Boolean applicableRange = njRuleConfigDTO.getApplicableRange(); | |||
// 用户年假集合 | |||
List<NjBalanceManage> njBalanceManages = new ArrayList<>(); | |||
//全部用户 | |||
if(applicableRange){ | |||
List<JSONObject> jsonObjects = dkRecordMapper.queryAllUsers(null); | |||
// 遍历人员生成年假记录 | |||
for (JSONObject sysUser : jsonObjects) { | |||
Long userId = sysUser.getLong("userId"); | |||
// 根据 人员id 查询年假信息 如果存在就跟新年假信息 | |||
QueryWrapper<NjBalanceManage> njQueryWrapper = new QueryWrapper<>(); | |||
njQueryWrapper.eq("user_id", userId); | |||
njQueryWrapper.ge("create_time", LocalDateTime.now()); | |||
NjBalanceManage njBalanceManage = njBalanceManageMapper.selectOne(njQueryWrapper); | |||
if (BeanUtil.isNotEmpty(njBalanceManage)) { | |||
njBalanceManage = new NjBalanceManage(); | |||
} | |||
//2.2 查询明细表中的已使用年假 | |||
BigDecimal used_days = new BigDecimal(0); | |||
QueryWrapper detailQuery =new QueryWrapper(); | |||
detailQuery.select("sum(used_day) used_days"); | |||
detailQuery.eq("user_id",userId); | |||
List<Map> detailList= njBalanceManageDetailMapper.selectMaps(detailQuery); | |||
if (detailList!=null&&detailList.size()>0) { | |||
Map map =detailList.get(0); | |||
if (map!=null) { | |||
used_days = (BigDecimal )map.get("used_days"); | |||
} | |||
} | |||
// 获取入职时间 | |||
LocalDate joinedDate = sysUser.get("joinedDate") == null ? LocalDate.now() : (LocalDate)sysUser.get("joinedDate") ; | |||
//年假总额 | |||
njBalanceManage.setAnnualLeave(new BigDecimal(calculateAnnualLeave(joinedDate))); | |||
// 已使用天数 | |||
njBalanceManage.setUsedDay(used_days); | |||
// 剩余天数 = 年假总额 - 已使用年假 | |||
njBalanceManage.setUnusedDay(njBalanceManage.getAnnualLeave().subtract(used_days)); | |||
//上年结转 | |||
njBalanceManage.setLastYearUnusedDay(BigDecimal.valueOf(Constans.ANNUALLEAVETIERS_0)); | |||
// 转态 | |||
njBalanceManage.setIsEnable(true); | |||
// 获取用户信息 | |||
njBalanceManage.setUserId(userId); | |||
njBalanceManage.setUserName((String)sysUser.get("userName")); | |||
njBalanceManage.setNickName((String)sysUser.get("nickName")); | |||
njBalanceManage.setDeptName((String)sysUser.get("deptName")); | |||
njBalanceManages.add(njBalanceManage); | |||
// 1.根据年假配置查询下面的用户 | |||
LambdaQueryWrapper<NjRuleConfigAndUser> queryWrapper1 = Wrappers.lambdaQuery(); | |||
queryWrapper1.eq(NjRuleConfigAndUser::getNjRuleConfigId, njRuleConfigDTO.getId()); | |||
List<NjRuleConfigAndUserDTO> njRuleConfigAndUserDTOS = njRuleConfigAndUserMapper.selectVoList(queryWrapper1); | |||
//2.根据用户入职时间 计算对于的年假额度 | |||
for (NjRuleConfigAndUserDTO njRuleConfigAndUserDTO : njRuleConfigAndUserDTOS) { | |||
//2.1 根据 人员id 查询年假信息 | |||
LambdaQueryWrapper<NjBalanceManage> queryWrapper2 = new LambdaQueryWrapper<>(); | |||
queryWrapper2.eq(NjBalanceManage::getUserId, njRuleConfigAndUserDTO.getUserId()); | |||
int year = LocalDate.now().getYear(); | |||
queryWrapper2.apply("YEAR(create_time) = {0}", year); | |||
NjBalanceManage njBalanceManage = njBalanceManageMapper.selectOne(queryWrapper2); | |||
if (njBalanceManage==null) { | |||
njBalanceManage = new NjBalanceManage(); | |||
} | |||
// 指定人员 | |||
}else { | |||
//指定用户 | |||
// 1.根据年假配置查询下面的用户 | |||
LambdaQueryWrapper<NjRuleConfigAndUser> queryWrapper1 = Wrappers.lambdaQuery(); | |||
queryWrapper1.eq(NjRuleConfigAndUser::getNjRuleConfigId, njRuleConfigDTO.getId()); | |||
List<NjRuleConfigAndUserDTO> njRuleConfigAndUserDTOS = njRuleConfigAndUserMapper.selectVoList(queryWrapper1); | |||
//2.根据用户入职时间 计算对于的年假额度 | |||
for (NjRuleConfigAndUserDTO njRuleConfigAndUserDTO : njRuleConfigAndUserDTOS) { | |||
//2.1 根据 人员id 查询年假信息 | |||
LambdaQueryWrapper<NjBalanceManage> queryWrapper2 = new LambdaQueryWrapper<>(); | |||
queryWrapper2.eq(NjBalanceManage::getUserId, njRuleConfigAndUserDTO.getUserId()); | |||
int year = LocalDate.now().getYear(); | |||
queryWrapper2.apply("YEAR(create_time) = {0}", year); | |||
NjBalanceManage njBalanceManage = njBalanceManageMapper.selectOne(queryWrapper2); | |||
if (njBalanceManage==null) { | |||
njBalanceManage = new NjBalanceManage(); | |||
//2.2 查询明细表中的已使用年假 | |||
BigDecimal used_days = new BigDecimal(0); | |||
QueryWrapper detailQuery =new QueryWrapper(); | |||
detailQuery.select("sum(used_day) used_days"); | |||
detailQuery.eq("user_id",njRuleConfigAndUserDTO.getUserId()); | |||
List<Map> detailList= njBalanceManageDetailMapper.selectMaps(detailQuery); | |||
if (detailList!=null&&detailList.size()>0) { | |||
Map map =detailList.get(0); | |||
if (map!=null) { | |||
used_days = (BigDecimal )map.get("used_days"); | |||
} | |||
//2.2 查询明细表中的已使用年假 | |||
BigDecimal used_days = new BigDecimal(0); | |||
QueryWrapper detailQuery =new QueryWrapper(); | |||
detailQuery.select("sum(used_day) used_days"); | |||
detailQuery.eq("user_id",njRuleConfigAndUserDTO.getUserId()); | |||
List<Map> detailList= njBalanceManageDetailMapper.selectMaps(detailQuery); | |||
if (detailList!=null&&detailList.size()>0) { | |||
Map map =detailList.get(0); | |||
if (map!=null) { | |||
used_days = (BigDecimal )map.get("used_days"); | |||
} | |||
} | |||
// 获取入职时间 | |||
LocalDate joinedDate = njRuleConfigAndUserDTO.getJoinedDate() == null ? LocalDate.now() : njRuleConfigAndUserDTO.getJoinedDate(); | |||
//年假总额 | |||
njBalanceManage.setAnnualLeave(new BigDecimal(calculateAnnualLeave(joinedDate))); | |||
// 已使用天数 | |||
njBalanceManage.setUsedDay(used_days); | |||
// 剩余天数 = 年假总额 - 已使用年假 | |||
njBalanceManage.setUnusedDay(njBalanceManage.getAnnualLeave().subtract(used_days)); | |||
//上年结转 | |||
njBalanceManage.setLastYearUnusedDay(BigDecimal.valueOf(Constans.ANNUALLEAVETIERS_0)); | |||
// 转态 | |||
njBalanceManage.setIsEnable(true); | |||
// 获取用户信息 | |||
njBalanceManage.setUserId(njRuleConfigAndUserDTO.getUserId()); | |||
njBalanceManage.setUserName(njRuleConfigAndUserDTO.getUserName()); | |||
njBalanceManage.setNickName(njRuleConfigAndUserDTO.getNickName()); | |||
njBalanceManage.setDeptName(njRuleConfigAndUserDTO.getDeptName()); | |||
njBalanceManages.add(njBalanceManage); | |||
} | |||
// 获取入职时间 | |||
LocalDate joinedDate = njRuleConfigAndUserDTO.getJoinedDate() == null ? LocalDate.now() : njRuleConfigAndUserDTO.getJoinedDate(); | |||
//年假总额 | |||
njBalanceManage.setAnnualLeave(new BigDecimal(calculateAnnualLeave(joinedDate))); | |||
// 已使用天数 | |||
njBalanceManage.setUsedDay(used_days); | |||
// 剩余天数 = 年假总额 - 已使用年假 | |||
njBalanceManage.setUnusedDay(njBalanceManage.getAnnualLeave().subtract(used_days)); | |||
//上年结转 | |||
njBalanceManage.setLastYearUnusedDay(BigDecimal.valueOf(Constans.ANNUALLEAVETIERS_0)); | |||
// 转态 | |||
njBalanceManage.setIsEnable(true); | |||
// 获取用户信息 | |||
njBalanceManage.setUserId(njRuleConfigAndUserDTO.getUserId()); | |||
njBalanceManage.setUserName(njRuleConfigAndUserDTO.getUserName()); | |||
njBalanceManage.setNickName(njRuleConfigAndUserDTO.getNickName()); | |||
njBalanceManage.setDeptName(njRuleConfigAndUserDTO.getDeptName()); | |||
njBalanceManages.add(njBalanceManage); | |||
} | |||
// 批量插入 |
@@ -98,7 +98,7 @@ public class NjRuleConfigServiceImpl implements NjRuleConfigService { | |||
queryWrapper.eq(NjRuleConfigAndUser::getUserId, member.getUserId()); | |||
List<NjRuleConfigAndUserDTO> njRuleConfigAndUserDTOS = njRuleConfigAndUserMapper.selectVoList(queryWrapper, NjRuleConfigAndUserDTO.class); | |||
if(null != njRuleConfigAndUserDTOS && njRuleConfigAndUserDTOS.size() > 0){ | |||
throw new GlobalException(member.getNickName()+"已经被其他考勤规则选择!"); | |||
throw new GlobalException(member.getNickName()+"已经被其他年假规则选择!"); | |||
} | |||
njRuleConfigAndUser.setNjRuleConfigId(njRuleConfig.getId()); |
@@ -4,30 +4,6 @@ | |||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||
<mapper namespace="com.ruoyi.zhushi.mapper.DkRecordMapper"> | |||
<resultMap id="DkRecordResult" type="com.ruoyi.zhushi.entity.DkCheckInRecord"> | |||
<id property="id" column="id"/> | |||
<result property="sysUserId" column="sys_user_id"/> | |||
<result property="sysUserName" column="sys_user_name"/> | |||
<result property="checkInTime" column="check_in_time"/> | |||
<result property="latitude" column="latitude"/> | |||
<result property="longitude" column="longitude"/> | |||
<result property="checkInStatus" column="check_in_status"/> | |||
<result property="checkInType" column="check_in_type"/> | |||
</resultMap> | |||
<select id="getCurrentDayRecord" resultType="com.ruoyi.zhushi.entity.DkCheckInRecord"> | |||
select * from dk_check_in_record | |||
<where> | |||
DATE(check_in_time) = CURDATE() | |||
<if test="userId != null and userId != ''"> | |||
AND sys_user_id = #{userId} | |||
</if> | |||
<if test="currentDate != null "> | |||
AND DATE(create_time) = #{currentDate} | |||
</if> | |||
</where> | |||
</select> | |||
<select id="queryConfigByUserId" resultType="com.ruoyi.zhushi.entity.DkAttendanceGroup"> | |||
select DISTINCT t.* from dk_check_in_attendance_team_and_user tu | |||
@@ -39,38 +15,4 @@ | |||
</where> | |||
</select> | |||
<select id="queryAllUsers" resultType="com.alibaba.fastjson.JSONObject"> | |||
SELECT | |||
u.user_id userId, | |||
u.user_name userName, | |||
u.nick_name nickName, | |||
d.dept_name deptName, | |||
u.joined_date joinedDate | |||
FROM | |||
sys_user u inner join sys_dept d on u.dept_id=d.dept_id | |||
WHERE | |||
u.del_flag = 0 | |||
AND u.dept_id IN ( SELECT dept_id FROM sys_dept WHERE FIND_IN_SET( '100', ancestors ) OR dept_id = 100 ) | |||
AND u.user_id != 1 | |||
<if test="attendanceGroupIds != null and attendanceGroupIds.size() > 0"> | |||
AND u.user_id IN ( | |||
SELECT user_id | |||
FROM dk_check_in_attendance_team_and_user | |||
WHERE attendance_team_id IN | |||
<foreach collection="attendanceGroupIds" item="id" open="(" separator="," close=")"> | |||
#{id} | |||
</foreach> | |||
) | |||
</if> | |||
</select> | |||
<select id="getRecordHistory" resultType="com.ruoyi.zhushi.entity.DkCheckInRecord"> | |||
select * from dk_check_in_record | |||
<where> | |||
DATE(check_in_time) = CURDATE() | |||
<if test="userId != null"> | |||
AND sys_user_id = #{userId} | |||
</if> | |||
</where> | |||
</select> | |||
</mapper> |