Parcourir la source

1.打卡考勤组逻辑修改

main
wangqiang il y a 3 jours
Parent
révision
67eadde972

+ 1
- 1
zs-manager/src/main/java/com/ruoyi/zhushi/controller/DkAppController.java Voir le fichier

@@ -17,7 +17,7 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.List;

/**
* 打卡控制台
* 打卡操作
*/
@Validated
@RequiredArgsConstructor

+ 3
- 3
zs-manager/src/main/java/com/ruoyi/zhushi/controller/DkAttendanceGroupController.java Voir le fichier

@@ -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));
}

// 删除打卡配置

+ 1
- 1
zs-manager/src/main/java/com/ruoyi/zhushi/controller/DkConfigController.java Voir le fichier

@@ -15,7 +15,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;

/**
* 打卡配置控制台
* 打卡配置
*/
@Validated
@RequiredArgsConstructor

+ 1
- 1
zs-manager/src/main/java/com/ruoyi/zhushi/controller/DkRecordController.java Voir le fichier

@@ -19,7 +19,7 @@ import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
* 打卡控制台
* 打卡记录数据
*/
@Validated
@RequiredArgsConstructor

+ 18
- 35
zs-manager/src/main/java/com/ruoyi/zhushi/job/DkJob.java Voir le fichier

@@ -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);
}
}


}

+ 0
- 8
zs-manager/src/main/java/com/ruoyi/zhushi/mapper/DkRecordMapper.java Voir le fichier

@@ -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);
}

+ 5
- 5
zs-manager/src/main/java/com/ruoyi/zhushi/service/DkAttendanceGroupService.java Voir le fichier

@@ -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();
}

+ 33
- 44
zs-manager/src/main/java/com/ruoyi/zhushi/service/impl/DkAttendanceGroupServiceImpl.java Voir le fichier

@@ -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);

}

+ 28
- 42
zs-manager/src/main/java/com/ruoyi/zhushi/service/impl/DkRecordServiceImpl.java Voir le fichier

@@ -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());

//
// 要生成的年份

+ 44
- 102
zs-manager/src/main/java/com/ruoyi/zhushi/service/impl/NjBalanceManageServiceImpl.java Voir le fichier

@@ -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);
}

// 批量插入

+ 1
- 1
zs-manager/src/main/java/com/ruoyi/zhushi/service/impl/NjRuleConfigServiceImpl.java Voir le fichier

@@ -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());

+ 0
- 58
zs-manager/src/main/resources/mapper/DkRecordMapper.xml Voir le fichier

@@ -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>

BIN
zs-manager/src/main/resources/template/template-guonei.xlsx Voir le fichier


Chargement…
Annuler
Enregistrer