|
@@ -1,108 +1,132 @@
|
|
|
package com.ruoyi.system.service.impl;
|
|
|
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
import com.ruoyi.common.core.domain.AjaxResult;
|
|
|
+import com.ruoyi.common.core.domain.entity.SysRole;
|
|
|
+import com.ruoyi.common.core.domain.entity.SysUser;
|
|
|
import com.ruoyi.common.utils.DateUtils;
|
|
|
+import com.ruoyi.common.utils.PageUtils;
|
|
|
+import com.ruoyi.common.utils.SecurityUtils;
|
|
|
import com.ruoyi.common.utils.StringUtils;
|
|
|
-import com.ruoyi.system.domain.ClockUserInfo;
|
|
|
-import com.ruoyi.system.domain.OrderFood;
|
|
|
-import com.ruoyi.system.mapper.ClockUserInfoMapper;
|
|
|
-import com.ruoyi.system.mapper.OrderFoodMapper;
|
|
|
+import com.ruoyi.system.domain.*;
|
|
|
+import com.ruoyi.system.mapper.*;
|
|
|
+import lombok.SneakyThrows;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
-import com.ruoyi.system.mapper.ClockRecordMapper;
|
|
|
-import com.ruoyi.system.domain.ClockRecord;
|
|
|
import com.ruoyi.system.service.IClockRecordService;
|
|
|
|
|
|
/**
|
|
|
* 打卡记录Service业务层处理
|
|
|
- *
|
|
|
+ *
|
|
|
* @author ruoyi
|
|
|
* @date 2024-08-06
|
|
|
*/
|
|
|
@Service
|
|
|
-public class ClockRecordServiceImpl implements IClockRecordService
|
|
|
-{
|
|
|
+public class ClockRecordServiceImpl implements IClockRecordService {
|
|
|
@Autowired
|
|
|
private ClockRecordMapper clockRecordMapper;
|
|
|
@Autowired
|
|
|
private ClockUserInfoMapper clockUserInfoMapper;
|
|
|
@Autowired
|
|
|
private OrderFoodMapper orderFoodMapper;
|
|
|
+ @Autowired
|
|
|
+ private DutyScheduleMapper dutyScheduleMapper;
|
|
|
+ @Autowired
|
|
|
+ private ClockHolidaysMapper clockHolidaysMapper;
|
|
|
|
|
|
/**
|
|
|
* 查询打卡记录
|
|
|
- *
|
|
|
+ *
|
|
|
* @param clockId 打卡记录主键
|
|
|
* @return 打卡记录
|
|
|
*/
|
|
|
@Override
|
|
|
- public ClockRecord selectClockRecordByClockId(Long clockId)
|
|
|
- {
|
|
|
+ public ClockRecord selectClockRecordByClockId(Long clockId) {
|
|
|
return clockRecordMapper.selectClockRecordByClockId(clockId);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询打卡记录列表
|
|
|
- *
|
|
|
+ *
|
|
|
* @param clockRecord 打卡记录
|
|
|
* @return 打卡记录
|
|
|
*/
|
|
|
@Override
|
|
|
- public List<ClockRecord> selectClockRecordList(ClockRecord clockRecord)
|
|
|
- {
|
|
|
+ public List<ClockRecord> selectClockRecordList(ClockRecord clockRecord) {
|
|
|
+ SysUser user = SecurityUtils.getLoginUser().getUser();
|
|
|
+ List<SysRole> roles = user.getRoles();
|
|
|
+ boolean bl = true;
|
|
|
+ for (SysRole role : roles) {
|
|
|
+ if ("admin".equals(role.getRoleKey()) || "administrators".equals(role.getRoleKey())) {
|
|
|
+ bl = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (bl) {
|
|
|
+ clockRecord.setUserId(user.getUserId());
|
|
|
+ }
|
|
|
return clockRecordMapper.selectClockRecordList(clockRecord);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 新增打卡记录
|
|
|
- *
|
|
|
+ *
|
|
|
* @param clockRecord 打卡记录
|
|
|
* @return 结果
|
|
|
*/
|
|
|
@Override
|
|
|
- public int insertClockRecord(ClockRecord clockRecord)
|
|
|
- {
|
|
|
+ public int insertClockRecord(ClockRecord clockRecord) {
|
|
|
+ SysUser user = SecurityUtils.getLoginUser().getUser();
|
|
|
+ clockRecord.setUserId(user.getUserId());
|
|
|
+ clockRecord.setUserName(user.getNickName());
|
|
|
+ clockRecord.setPhonenumber(user.getPhonenumber());
|
|
|
+ /*String[] dt = clockRecord.getRecordDt().split(" ");
|
|
|
+ clockRecord.setRecordDate(dt[0]);
|
|
|
+ clockRecord.setRecordTime(dt[1]);*/
|
|
|
+ //判断传入的时间是周几
|
|
|
+ try {
|
|
|
+ int dayForWeek = DateUtils.dayForWeek(clockRecord.getRecordDate());
|
|
|
+ clockRecord.setWeek(String.valueOf(dayForWeek));
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
clockRecord.setCreateTime(DateUtils.getNowDate());
|
|
|
return clockRecordMapper.insertClockRecord(clockRecord);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 修改打卡记录
|
|
|
- *
|
|
|
+ *
|
|
|
* @param clockRecord 打卡记录
|
|
|
* @return 结果
|
|
|
*/
|
|
|
@Override
|
|
|
- public int updateClockRecord(ClockRecord clockRecord)
|
|
|
- {
|
|
|
+ public int updateClockRecord(ClockRecord clockRecord) {
|
|
|
clockRecord.setUpdateTime(DateUtils.getNowDate());
|
|
|
return clockRecordMapper.updateClockRecord(clockRecord);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 批量删除打卡记录
|
|
|
- *
|
|
|
+ *
|
|
|
* @param clockIds 需要删除的打卡记录主键
|
|
|
* @return 结果
|
|
|
*/
|
|
|
@Override
|
|
|
- public int deleteClockRecordByClockIds(Long[] clockIds)
|
|
|
- {
|
|
|
+ public int deleteClockRecordByClockIds(Long[] clockIds) {
|
|
|
return clockRecordMapper.deleteClockRecordByClockIds(clockIds);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 删除打卡记录信息
|
|
|
- *
|
|
|
+ *
|
|
|
* @param clockId 打卡记录主键
|
|
|
* @return 结果
|
|
|
*/
|
|
|
@Override
|
|
|
- public int deleteClockRecordByClockId(Long clockId)
|
|
|
- {
|
|
|
+ public int deleteClockRecordByClockId(Long clockId) {
|
|
|
return clockRecordMapper.deleteClockRecordByClockId(clockId);
|
|
|
}
|
|
|
|
|
@@ -111,55 +135,77 @@ public class ClockRecordServiceImpl implements IClockRecordService
|
|
|
Map<String, Object> resultMap = new HashMap<>();
|
|
|
//查询人员数据
|
|
|
ClockUserInfo clockUserInfo = clockUserInfoMapper.selectClockUserInfoByUserId(clockRecord.getUserId());
|
|
|
- resultMap.put("name",clockUserInfo.getUserName());
|
|
|
+ resultMap.put("name", clockUserInfo.getUserName());
|
|
|
//查询最新打卡数据
|
|
|
ClockRecord clockRecordNew = clockRecordMapper.selectClockRecordNew(clockRecord);
|
|
|
- resultMap.put("time",clockRecordNew.getRecordTime());
|
|
|
+ resultMap.put("time", clockRecordNew.getRecordDate());
|
|
|
//todo 上下班时间
|
|
|
- resultMap.put("workTime","");
|
|
|
+ DutySchedule dutySchedule = dutyScheduleMapper.selectDutyScheduleByDutyNew();
|
|
|
+ resultMap.put("workTime", dutySchedule.getStartWorkTime() + " - " + dutySchedule.getEndWorkTime());
|
|
|
//查询查询月打卡数据
|
|
|
List<ClockRecord> clockRecords = clockRecordMapper.selectOrderFoodListRl(clockRecord);
|
|
|
//按日期分类
|
|
|
Map<String, List<ClockRecord>> clockTime = new HashMap<>();
|
|
|
- if (clockRecords != null && clockRecords.size() > 0){
|
|
|
- clockTime = clockRecords.stream().collect(Collectors.groupingBy(ClockRecord::getRecordTime));
|
|
|
+ if (clockRecords != null && clockRecords.size() > 0) {
|
|
|
+ clockTime = clockRecords.stream().collect(Collectors.groupingBy(ClockRecord::getRecordDate));
|
|
|
}
|
|
|
//查询传入月所有日期
|
|
|
- List<String> dayList = DateUtils.getDay(DateUtils.parseDate(clockRecord.getRecordTime()));
|
|
|
+ List<String> dayList = DateUtils.getDay(DateUtils.parseDate(clockRecord.getRecordDate()));
|
|
|
//写入数据
|
|
|
List<Map> mapList = new ArrayList<>();
|
|
|
- if (dayList.size()> 0){
|
|
|
+ if (dayList.size() > 0) {
|
|
|
for (String day : dayList) {
|
|
|
- Map<String,Object> map = new HashMap<>(5);
|
|
|
- map.put("date",day);
|
|
|
- map.put("am","未打卡");
|
|
|
- //上午打卡标识 1:打卡,2:未打卡
|
|
|
- map.put("amex","2");
|
|
|
- map.put("pm","未打卡");
|
|
|
- //下午打卡标识 1:打卡,2:未打卡
|
|
|
- map.put("pmex","2");
|
|
|
- if (clockTime.size() > 0){
|
|
|
+ Map<String, Object> map = new HashMap<>(5);
|
|
|
+ map.put("date", day);
|
|
|
+ map.put("am", "未打卡");
|
|
|
+ //上午打卡标识 1:正常打卡,2:外勤打卡,3:迟到,4:早退,5:未打卡
|
|
|
+ map.put("amex", "5");
|
|
|
+ map.put("pm", "未打卡");
|
|
|
+ //下午打卡标识 1:正常打卡,2:外勤打卡,3:迟到,4:早退,5:未打卡
|
|
|
+ map.put("pmex", "5");
|
|
|
+ if (clockTime.size() > 0) {
|
|
|
List<ClockRecord> clockRecordList = clockTime.get(day);
|
|
|
- if (clockRecordList != null && clockRecordList.size() > 0){
|
|
|
- for (ClockRecord clock : clockRecordList) {
|
|
|
- if(StringUtils.isNotEmpty(clock.getWorkingTime())){
|
|
|
- map.put("am",clock.getWorkingTime());
|
|
|
- //上午打卡表示 1:打卡,2:未打卡
|
|
|
- map.put("amex","1");
|
|
|
- }
|
|
|
- if(StringUtils.isNotEmpty(clock.getDutyTime())){
|
|
|
- map.put("pm",clock.getDutyTime());
|
|
|
- //下午打卡表示 1:打卡,2:未打卡
|
|
|
- map.put("pmex","1");
|
|
|
- }
|
|
|
+ if (clockRecordList != null && clockRecordList.size() > 0) {
|
|
|
+ clockRecordList = clockRecordList.stream().sorted(Comparator.comparing(ClockRecord::getRecordTime).reversed()).collect(Collectors.toList());
|
|
|
+ if ("1".equals(clockRecordList.get(clockRecordList.size() - 1).getType())) {
|
|
|
+ map.put("am", clockRecordList.get(clockRecordList.size() - 1).getRecordTime());
|
|
|
+ //上午打卡表示 1:正常打卡,2:外勤打卡,3:迟到,4:早退,5:未打卡
|
|
|
+ map.put("amex", clockRecordList.get(clockRecordList.size() - 1).getIsOutwork());
|
|
|
+ }
|
|
|
+ if ("2".equals(clockRecordList.get(clockRecordList.size() - 1).getType())) {
|
|
|
+ map.put("pm", clockRecordList.get(clockRecordList.size() - 1).getRecordTime());
|
|
|
+ //下午打卡表示 1:正常打卡,2:外勤打卡,3:迟到,4:早退,5:未打卡
|
|
|
+ map.put("pmex", clockRecordList.get(clockRecordList.size() - 1).getIsOutwork());
|
|
|
+ }
|
|
|
+ if ("1".equals(clockRecordList.get(0).getType())) {
|
|
|
+ map.put("am", clockRecordList.get(0).getRecordTime());
|
|
|
+ //上午打卡表示 1:正常打卡,2:外勤打卡,3:迟到,4:早退,5:未打卡
|
|
|
+ map.put("amex", clockRecordList.get(0).getIsOutwork());
|
|
|
+ }
|
|
|
+ if ("2".equals(clockRecordList.get(0).getType())) {
|
|
|
+ map.put("pm", clockRecordList.get(0).getRecordTime());
|
|
|
+ //下午打卡表示 1:正常打卡,2:外勤打卡,3:迟到,4:早退,5:未打卡
|
|
|
+ map.put("pmex", clockRecordList.get(0).getIsOutwork());
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
mapList.add(map);
|
|
|
}
|
|
|
}
|
|
|
//日历数据
|
|
|
- resultMap.put("rlData",mapList);
|
|
|
+ resultMap.put("rlData", mapList);
|
|
|
+ //补班时间
|
|
|
+ //查询是否存在当前年数据
|
|
|
+ ClockHolidays clockHoliday = new ClockHolidays();
|
|
|
+ clockHoliday.setYear(DateUtils.getYear());
|
|
|
+ clockHoliday.setHolidayDate(clockRecord.getRecordDate());
|
|
|
+ List<ClockHolidays> clockHolidaysList = clockHolidaysMapper.selectClockHolidaysMonthList(clockHoliday);
|
|
|
+ if(clockHolidaysList==null || clockHolidaysList.size()<0){
|
|
|
+ clockHolidaysList = new ArrayList<>();
|
|
|
+ }
|
|
|
+ //放假数据
|
|
|
+ resultMap.put("holidays", clockHolidaysList);
|
|
|
return AjaxResult.success(resultMap);
|
|
|
}
|
|
|
|
|
@@ -171,22 +217,24 @@ public class ClockRecordServiceImpl implements IClockRecordService
|
|
|
//查询当天应打卡人数
|
|
|
int dkzs = 0;
|
|
|
ClockRecord clockRecord = new ClockRecord();
|
|
|
- clockRecord.setRecordTime(day);
|
|
|
+ clockRecord.setRecordDate(day);
|
|
|
List<ClockRecord> clockRecords = clockRecordMapper.selectClockRecordList(clockRecord);
|
|
|
+ Map<String, List<ClockRecord>> clockUserId = clockRecords.stream().collect(Collectors.groupingBy(ClockRecord::getUserName));
|
|
|
+ //查询打卡人员
|
|
|
+ ClockUserInfo clockUserInfo = new ClockUserInfo();
|
|
|
+ clockUserInfo.setDelFlag("0");
|
|
|
+ List<ClockUserInfo> clockUserInfoList = clockUserInfoMapper.selectClockUserInfoList(clockUserInfo);
|
|
|
//已打卡人数
|
|
|
int ydk = 0;
|
|
|
//未打卡人数
|
|
|
int wdk = 0;
|
|
|
- if(clockRecords!=null && clockRecords.size()>0){
|
|
|
- dkzs = clockRecords.size();
|
|
|
- for (ClockRecord record : clockRecords) {
|
|
|
- if(StringUtils.isNotEmpty(record.getWorkingTime()) || StringUtils.isNotEmpty(record.getDutyTime())){
|
|
|
- ydk++;
|
|
|
- }else{
|
|
|
- wdk++;
|
|
|
- }
|
|
|
- }
|
|
|
+ if (clockUserId != null && clockUserId.size() > 0) {
|
|
|
+ ydk = clockUserId.size();
|
|
|
+ }
|
|
|
+ if (clockUserInfoList != null && clockUserInfoList.size() > 0) {
|
|
|
+ wdk = clockUserInfoList.size() - clockUserId.size();
|
|
|
}
|
|
|
+
|
|
|
//订餐统计
|
|
|
OrderFood orderFood = new OrderFood();
|
|
|
orderFood.setOrderFoodTime(DateUtils.parseDate(day));
|
|
@@ -197,23 +245,452 @@ public class ClockRecordServiceImpl implements IClockRecordService
|
|
|
int dcwc = 0;
|
|
|
//订餐晚餐人数
|
|
|
int dcDinner = 0;
|
|
|
- if(orderFoods!=null && orderFoods.size()>0){
|
|
|
+ if (orderFoods != null && orderFoods.size() > 0) {
|
|
|
dczs = orderFoods.size();
|
|
|
for (OrderFood food : orderFoods) {
|
|
|
- if("1".equals(food.getOrderFoodType())){
|
|
|
+ if ("1".equals(food.getOrderFoodType())) {
|
|
|
dcwc++;
|
|
|
}
|
|
|
- if("2".equals(food.getOrderFoodType())){
|
|
|
+ if ("2".equals(food.getOrderFoodType())) {
|
|
|
dcDinner++;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- resultMap.put("dkzs",dkzs);
|
|
|
- resultMap.put("ydk",ydk);
|
|
|
- resultMap.put("wdk",wdk);
|
|
|
- resultMap.put("dczs",dczs);
|
|
|
- resultMap.put("dcwc",dcwc);
|
|
|
- resultMap.put("dcDinner",dcDinner);
|
|
|
+ resultMap.put("dkzs", dkzs);
|
|
|
+ resultMap.put("ydk", ydk);
|
|
|
+ resultMap.put("wdk", wdk);
|
|
|
+ resultMap.put("dczs", dczs);
|
|
|
+ resultMap.put("dcwc", dcwc);
|
|
|
+ resultMap.put("dcDinner", dcDinner);
|
|
|
+ return AjaxResult.success(resultMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public AjaxResult selectClockRecordListInfo(ClockRecord clockRecord) {
|
|
|
+ Map<String, Object> resultMap = new HashMap<>();
|
|
|
+
|
|
|
+ DutySchedule dutySchedule = dutyScheduleMapper.selectDutyScheduleByDutyNew();
|
|
|
+ resultMap.put("workTime", dutySchedule.getStartWorkTime() + " - " + dutySchedule.getEndWorkTime());
|
|
|
+
|
|
|
+ //查询查询打卡数据
|
|
|
+ List<ClockRecord> clockRecords = clockRecordMapper.selectClockRecordList(clockRecord);
|
|
|
+ //按日期分类
|
|
|
+ Map<String, List<ClockRecord>> clockTime = new HashMap<>();
|
|
|
+ if (clockRecords != null && clockRecords.size() > 0) {
|
|
|
+ clockTime = clockRecords.stream().collect(Collectors.groupingBy(ClockRecord::getRecordDate));
|
|
|
+ }
|
|
|
+ //查询传入月所有日期
|
|
|
+ List<Date> dayList = DateUtils.getDatesBetween(clockRecord.getStartTime(), clockRecord.getEndTime());
|
|
|
+ //写入数据
|
|
|
+ List<Map> mapList = new ArrayList<>();
|
|
|
+ if (dayList.size() > 0) {
|
|
|
+ for (Date day : dayList) {
|
|
|
+ Map<String, Object> map = new HashMap<>(5);
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ map.put("date", format.format(day));
|
|
|
+ map.put("am", "未打卡");
|
|
|
+ //上午打卡标识 1:正常打卡,2:外勤打卡,3:迟到,4:早退,5:未打卡
|
|
|
+ map.put("amex", "5");
|
|
|
+ map.put("pm", "未打卡");
|
|
|
+ //下午打卡标识 1:正常打卡,2:外勤打卡,3:迟到,4:早退,5:未打卡
|
|
|
+ map.put("pmex", "5");
|
|
|
+ if (clockTime.size() > 0) {
|
|
|
+ List<ClockRecord> clockRecordList = clockTime.get(format.format(day));
|
|
|
+ if (clockRecordList != null && clockRecordList.size() > 0) {
|
|
|
+ clockRecordList = clockRecordList.stream().sorted(Comparator.comparing(ClockRecord::getRecordTime).reversed()).collect(Collectors.toList());
|
|
|
+ if ("1".equals(clockRecordList.get(clockRecordList.size() - 1).getType())) {
|
|
|
+ map.put("am", clockRecordList.get(clockRecordList.size() - 1).getRecordTime());
|
|
|
+ //上午打卡表示 1:正常打卡,2:外勤打卡,3:迟到,4:早退,5:未打卡
|
|
|
+ map.put("amex", clockRecordList.get(clockRecordList.size() - 1).getIsOutwork());
|
|
|
+ }
|
|
|
+ if ("2".equals(clockRecordList.get(clockRecordList.size() - 1).getType())) {
|
|
|
+ map.put("pm", clockRecordList.get(clockRecordList.size() - 1).getRecordTime());
|
|
|
+ //下午打卡表示 1:正常打卡,2:外勤打卡,3:迟到,4:早退,5:未打卡
|
|
|
+ map.put("pmex", clockRecordList.get(clockRecordList.size() - 1).getIsOutwork());
|
|
|
+ }
|
|
|
+ if ("1".equals(clockRecordList.get(0).getType())) {
|
|
|
+ map.put("am", clockRecordList.get(0).getRecordTime());
|
|
|
+ //上午打卡表示 1:正常打卡,2:外勤打卡,3:迟到,4:早退,5:未打卡
|
|
|
+ map.put("amex", clockRecordList.get(0).getIsOutwork());
|
|
|
+ }
|
|
|
+ if ("2".equals(clockRecordList.get(0).getType())) {
|
|
|
+ map.put("pm", clockRecordList.get(0).getRecordTime());
|
|
|
+ //下午打卡表示 1:正常打卡,2:外勤打卡,3:迟到,4:早退,5:未打卡
|
|
|
+ map.put("pmex", clockRecordList.get(0).getIsOutwork());
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ mapList.add(map);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //日历数据
|
|
|
+ resultMap.put("rlData", mapList);
|
|
|
+ return AjaxResult.success(resultMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public AjaxResult personage(ClockRecord clockRecord) {
|
|
|
+ Map<String, Object> resultMap = statistics(clockRecord);
|
|
|
+ return AjaxResult.success(resultMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> all(ClockUserInfo clockUserInfo) {
|
|
|
+ List<Map<String, Object>> listMap = new ArrayList<>();
|
|
|
+ startPage();
|
|
|
+ List<ClockUserInfo> clockUserList = clockUserInfoMapper.selectClockUserInfoList(clockUserInfo);
|
|
|
+ clearPage();
|
|
|
+ for (ClockUserInfo userInfo : clockUserList) {
|
|
|
+ ClockRecord clockRecord = new ClockRecord();
|
|
|
+ clockRecord.setUserId(userInfo.getUserId());
|
|
|
+ clockRecord.setRecordDate(clockUserInfo.getRecordDate() + "-01");
|
|
|
+ Map<String, Object> resultMap = statistics(clockRecord);
|
|
|
+ resultMap.put("name", userInfo.getUserName());
|
|
|
+ resultMap.put("userId",userInfo.getUserId());
|
|
|
+ listMap.add(resultMap);
|
|
|
+ }
|
|
|
+ return listMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ @SneakyThrows
|
|
|
+ @Override
|
|
|
+ public AjaxResult abnormal(ClockRecord clockRecord) {
|
|
|
+ Map<String, Object> resultMap = new HashMap<>();
|
|
|
+ int wq = 0;
|
|
|
+ int cd = 0;
|
|
|
+ int zt = 0;
|
|
|
+ int wdk = 0;
|
|
|
+ //获取所有打卡人员
|
|
|
+ //查询打卡人员
|
|
|
+ ClockUserInfo clockUserInfo = new ClockUserInfo();
|
|
|
+ clockUserInfo.setDelFlag("0");
|
|
|
+ List<ClockUserInfo> clockUserInfoList = clockUserInfoMapper.selectClockUserInfoList(clockUserInfo);
|
|
|
+ //获取时间段内的所有打卡信息
|
|
|
+ List<ClockRecord> clockRecords = clockRecordMapper.selectClockRecordList(clockRecord);
|
|
|
+
|
|
|
+ //按人员类
|
|
|
+ Map<Long, List<ClockRecord>> clockUser = new HashMap<>();
|
|
|
+ if (clockRecords != null && clockRecords.size() > 0) {
|
|
|
+ clockUser = clockRecords.stream().collect(Collectors.groupingBy(ClockRecord::getUserId));
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询本年度所有节假日时间
|
|
|
+ //查询是否存在当前年数据
|
|
|
+ ClockHolidays clockHoliday = new ClockHolidays();
|
|
|
+ clockHoliday.setYear(DateUtils.getYear());
|
|
|
+ List<ClockHolidays> clockHolidaysList = clockHolidaysMapper.selectClockHolidaysList(clockHoliday);
|
|
|
+ //分成补班和节假日
|
|
|
+ List<String> jjrList = new ArrayList<>();
|
|
|
+ List<String> bbList = new ArrayList<>();
|
|
|
+ for (ClockHolidays clockHolidays : clockHolidaysList) {
|
|
|
+ if("NO".equals(clockHolidays.getType())){
|
|
|
+ jjrList.add(clockHolidays.getHolidayDate());
|
|
|
+ }else{
|
|
|
+ bbList.add(clockHolidays.getHolidayDate());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ //查询传入两个日期的所有日期
|
|
|
+ List<Date> dayList = DateUtils.getDatesBetween(clockRecord.getStartTime(), clockRecord.getEndTime());
|
|
|
+ for (ClockUserInfo userInfo : clockUserInfoList) {
|
|
|
+ List<ClockRecord> clockRecordUser = clockUser.get(userInfo.getUserId());
|
|
|
+ //按日期分类
|
|
|
+ Map<String, List<ClockRecord>> clockTime = new HashMap<>();
|
|
|
+ if (clockRecordUser != null && clockRecordUser.size() > 0) {
|
|
|
+ clockTime = clockRecordUser.stream().collect(Collectors.groupingBy(ClockRecord::getRecordDate));
|
|
|
+ }
|
|
|
+ if (dayList.size() > 0) {
|
|
|
+ for (Date day : dayList) {
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ boolean bl = (DateUtils.dayForWeek(format.format(day))==6 || DateUtils.dayForWeek(format.format(day))==7);
|
|
|
+ if(jjrList.contains(format.format(day)) || (bl && !bbList.contains(format.format(day)))){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ List<ClockRecord> clockRecordList = clockTime.get(format.format(day));
|
|
|
+ if(clockRecordList==null || clockRecordList.size()<=0){
|
|
|
+ wdk++;
|
|
|
+ }else{
|
|
|
+ boolean sw = false;
|
|
|
+ boolean xw = false;
|
|
|
+ boolean bcd = false;
|
|
|
+ boolean bzt = false;
|
|
|
+ boolean bwq = false;
|
|
|
+ if ("1".equals(clockRecordList.get(clockRecordList.size() - 1).getType())) {
|
|
|
+ sw = true;
|
|
|
+ if ("3".equals(clockRecordList.get(clockRecordList.size() - 1).getIsOutwork())) {
|
|
|
+ bcd = true;
|
|
|
+ }
|
|
|
+ if ("2".equals(clockRecordList.get(clockRecordList.size() - 1).getIsOutwork())) {
|
|
|
+ bwq = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ("2".equals(clockRecordList.get(clockRecordList.size() - 1).getType())) {
|
|
|
+ xw = true;
|
|
|
+ if ("4".equals(clockRecordList.get(clockRecordList.size() - 1).getIsOutwork())) {
|
|
|
+ bzt = true;
|
|
|
+ }
|
|
|
+ if ("2".equals(clockRecordList.get(clockRecordList.size() - 1).getIsOutwork())) {
|
|
|
+ bwq = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ("1".equals(clockRecordList.get(0).getType())) {
|
|
|
+ sw = true;
|
|
|
+ if ("3".equals(clockRecordList.get(0).getIsOutwork())) {
|
|
|
+ bcd = true;
|
|
|
+ }
|
|
|
+ if ("2".equals(clockRecordList.get(0).getIsOutwork())) {
|
|
|
+ bwq = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ("2".equals(clockRecordList.get(0).getType())) {
|
|
|
+ xw = true;
|
|
|
+ if ("4".equals(clockRecordList.get(0).getIsOutwork())) {
|
|
|
+ bzt = true;
|
|
|
+ }
|
|
|
+ if ("2".equals(clockRecordList.get(0).getIsOutwork())) {
|
|
|
+ bwq = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(!sw || !xw){
|
|
|
+ wdk++;
|
|
|
+ }
|
|
|
+ if(bcd){
|
|
|
+ cd++;
|
|
|
+ }
|
|
|
+ if(bzt){
|
|
|
+ zt++;
|
|
|
+ }
|
|
|
+ if(bwq){
|
|
|
+ wq++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ resultMap.put("cd", cd);
|
|
|
+ resultMap.put("zt", zt);
|
|
|
+ resultMap.put("wq", wq);
|
|
|
+ resultMap.put("wdk", wdk);
|
|
|
return AjaxResult.success(resultMap);
|
|
|
}
|
|
|
+
|
|
|
+ @SneakyThrows
|
|
|
+ @Override
|
|
|
+ public AjaxResult details(ClockRecord clockRecord) {
|
|
|
+ List<Map<String, Object>> listMap = new ArrayList<>();
|
|
|
+ //查询人员打卡数据
|
|
|
+ List<ClockRecord> clockRecords = clockRecordMapper.selectClockRecordList(clockRecord);
|
|
|
+ //按日期分类
|
|
|
+ Map<String, List<ClockRecord>> clockTime = new HashMap<>();
|
|
|
+ if (clockRecords != null && clockRecords.size() > 0) {
|
|
|
+ clockTime = clockRecords.stream().collect(Collectors.groupingBy(ClockRecord::getRecordDate));
|
|
|
+ }
|
|
|
+ //查询传入两个日期的所有日期
|
|
|
+ List<Date> dayList = DateUtils.getDatesBetween(clockRecord.getStartTime(), clockRecord.getEndTime());
|
|
|
+ //查询本年度所有节假日时间
|
|
|
+ ClockHolidays clockHoliday = new ClockHolidays();
|
|
|
+ clockHoliday.setYear(DateUtils.getYear());
|
|
|
+ List<ClockHolidays> clockHolidaysList = clockHolidaysMapper.selectClockHolidaysList(clockHoliday);
|
|
|
+ //分成补班和节假日
|
|
|
+ List<String> jjrList = new ArrayList<>();
|
|
|
+ List<String> bbList = new ArrayList<>();
|
|
|
+ for (ClockHolidays clockHolidays : clockHolidaysList) {
|
|
|
+ if("NO".equals(clockHolidays.getType())){
|
|
|
+ jjrList.add(clockHolidays.getHolidayDate());
|
|
|
+ }else{
|
|
|
+ bbList.add(clockHolidays.getHolidayDate());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (Date day : dayList) {
|
|
|
+ Map<String, Object> resultMap = new HashMap<>();
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ boolean bl = (DateUtils.dayForWeek(format.format(day))==6 || DateUtils.dayForWeek(format.format(day))==7);
|
|
|
+ if(jjrList.contains(format.format(day)) || (bl && !bbList.contains(format.format(day)))){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ List<ClockRecord> clockRecordList = clockTime.get(format.format(day));
|
|
|
+ if(clockRecordList==null || clockRecordList.size()<=0){
|
|
|
+ resultMap.put("time",format.format(day));
|
|
|
+ resultMap.put("details","全天未打卡");
|
|
|
+ listMap.add(resultMap);
|
|
|
+ }else{
|
|
|
+ resultMap.put("time",format.format(day));
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+ if(clockRecordList.size()>2){
|
|
|
+ if ("1".equals(clockRecordList.get(0).getType())) {
|
|
|
+ if ("3".equals(clockRecordList.get(0).getIsOutwork())) {
|
|
|
+ sb.append("上午:迟到");
|
|
|
+ }
|
|
|
+ if ("2".equals(clockRecordList.get(0).getIsOutwork())) {
|
|
|
+ sb.append("上午:外勤");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ("2".equals(clockRecordList.get(clockRecordList.size() - 1).getType())) {
|
|
|
+ if ("4".equals(clockRecordList.get(clockRecordList.size() - 1).getIsOutwork())) {
|
|
|
+ if(StringUtils.isNotEmpty(sb.toString())){
|
|
|
+ sb.append(",");
|
|
|
+ }
|
|
|
+ sb.append("下午:早退");
|
|
|
+ }
|
|
|
+ if ("2".equals(clockRecordList.get(clockRecordList.size() - 1).getIsOutwork())) {
|
|
|
+ if(StringUtils.isNotEmpty(sb.toString())){
|
|
|
+ sb.append(",");
|
|
|
+ }
|
|
|
+ sb.append("下午:外勤");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if ("1".equals(clockRecordList.get(0).getType())) {
|
|
|
+ if ("3".equals(clockRecordList.get(0).getIsOutwork())) {
|
|
|
+ sb.append("上午:迟到").append(",");
|
|
|
+ }
|
|
|
+ if ("2".equals(clockRecordList.get(0).getIsOutwork())) {
|
|
|
+ sb.append("上午:外勤").append(",");
|
|
|
+ }
|
|
|
+ sb.append("下午:缺卡");
|
|
|
+ }
|
|
|
+ if ("2".equals(clockRecordList.get(0).getType())) {
|
|
|
+ sb.append("上午:缺卡");
|
|
|
+ if ("4".equals(clockRecordList.get(0).getIsOutwork())) {
|
|
|
+ sb.append(",").append("下午:早退");
|
|
|
+ }
|
|
|
+ if ("2".equals(clockRecordList.get(0).getIsOutwork())) {
|
|
|
+ sb.append(",").append("下午:外勤");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ resultMap.put("details",sb.toString());
|
|
|
+ listMap.add(resultMap);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return AjaxResult.success(listMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置请求分页数据
|
|
|
+ */
|
|
|
+ protected void startPage() {
|
|
|
+ PageUtils.startPage();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 清理分页的线程变量
|
|
|
+ */
|
|
|
+ protected void clearPage() {
|
|
|
+ PageUtils.clearPage();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @SneakyThrows
|
|
|
+ public Map<String, Object> statistics(ClockRecord clockRecord) {
|
|
|
+ String year = DateUtils.getYear();
|
|
|
+ Map<String, Object> resultMap = new HashMap<>();
|
|
|
+ //迟到
|
|
|
+ int cd = 0;
|
|
|
+ //早退
|
|
|
+ int zt = 0;
|
|
|
+ //外勤
|
|
|
+ int wq = 0;
|
|
|
+ //未打卡
|
|
|
+ int wdk = 0;
|
|
|
+
|
|
|
+ if (StringUtils.isEmpty(clockRecord.getRecordDate())) {
|
|
|
+ clockRecord.setRecordDate(DateUtils.getDate());
|
|
|
+ }
|
|
|
+ //查询查询月打卡数据
|
|
|
+ List<ClockRecord> clockRecords = clockRecordMapper.selectOrderFoodListRl(clockRecord);
|
|
|
+ //按日期分类
|
|
|
+ Map<String, List<ClockRecord>> clockTime = new HashMap<>();
|
|
|
+ if (clockRecords != null && clockRecords.size() > 0) {
|
|
|
+ clockTime = clockRecords.stream().collect(Collectors.groupingBy(ClockRecord::getRecordDate));
|
|
|
+ }
|
|
|
+ //查询传入月所有日期
|
|
|
+ List<String> dayList = DateUtils.getDay(DateUtils.parseDate(clockRecord.getRecordDate()));
|
|
|
+ //查询本年度所有节假日时间
|
|
|
+ //查询是否存在当前年数据
|
|
|
+ ClockHolidays clockHoliday = new ClockHolidays();
|
|
|
+ clockHoliday.setYear(year);
|
|
|
+ List<ClockHolidays> clockHolidaysList = clockHolidaysMapper.selectClockHolidaysList(clockHoliday);
|
|
|
+ //分成补班和节假日
|
|
|
+ List<String> jjrList = new ArrayList<>();
|
|
|
+ List<String> bbList = new ArrayList<>();
|
|
|
+ for (ClockHolidays clockHolidays : clockHolidaysList) {
|
|
|
+ if("NO".equals(clockHolidays.getType())){
|
|
|
+ jjrList.add(clockHolidays.getHolidayDate());
|
|
|
+ }else{
|
|
|
+ bbList.add(clockHolidays.getHolidayDate());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for (String s : dayList) {
|
|
|
+ if(DateUtils.compare(s,DateUtils.getDate())<0){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //判断当天是否需要上班
|
|
|
+ boolean bl = (DateUtils.dayForWeek(s)==6 || DateUtils.dayForWeek(s)==7);
|
|
|
+ if(bbList.contains(s) || (!bl && !jjrList.contains(s))){
|
|
|
+ //需要要上班(当天不是双休并且不在节假日内,或者需要补班)
|
|
|
+ if(!clockTime.containsKey(s)){
|
|
|
+ wdk = wdk+2;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ List<ClockRecord> clockRecordList = clockTime.get(s);
|
|
|
+ clockRecordList = clockRecordList.stream().sorted(Comparator.comparing(ClockRecord::getRecordTime).reversed()).collect(Collectors.toList());
|
|
|
+ boolean sw = false;
|
|
|
+ boolean xw = false;
|
|
|
+ if ("1".equals(clockRecordList.get(clockRecordList.size() - 1).getType())) {
|
|
|
+ sw = true;
|
|
|
+ if ("3".equals(clockRecordList.get(clockRecordList.size() - 1).getIsOutwork())) {
|
|
|
+ cd++;
|
|
|
+ }
|
|
|
+ if ("2".equals(clockRecordList.get(clockRecordList.size() - 1).getIsOutwork())) {
|
|
|
+ wq++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ("2".equals(clockRecordList.get(clockRecordList.size() - 1).getType())) {
|
|
|
+ xw = true;
|
|
|
+ if ("4".equals(clockRecordList.get(clockRecordList.size() - 1).getIsOutwork())) {
|
|
|
+ zt++;
|
|
|
+ }
|
|
|
+ if ("2".equals(clockRecordList.get(clockRecordList.size() - 1).getIsOutwork())) {
|
|
|
+ wq++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ("1".equals(clockRecordList.get(0).getType())) {
|
|
|
+ sw = true;
|
|
|
+ if ("3".equals(clockRecordList.get(0).getIsOutwork())) {
|
|
|
+ cd++;
|
|
|
+ }
|
|
|
+ if ("2".equals(clockRecordList.get(0).getIsOutwork())) {
|
|
|
+ wq++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ("2".equals(clockRecordList.get(0).getType())) {
|
|
|
+ xw = true;
|
|
|
+ if ("4".equals(clockRecordList.get(0).getIsOutwork())) {
|
|
|
+ zt++;
|
|
|
+ }
|
|
|
+ if ("2".equals(clockRecordList.get(0).getIsOutwork())) {
|
|
|
+ wq++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(!sw || !xw){
|
|
|
+ wdk++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /*for (String key : clockTime.keySet()) {
|
|
|
+
|
|
|
+ }*/
|
|
|
+ resultMap.put("cd", cd);
|
|
|
+ resultMap.put("zt", zt);
|
|
|
+ resultMap.put("wq", wq);
|
|
|
+ resultMap.put("wdk", wdk);
|
|
|
+ return resultMap;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|