|
@@ -11,27 +11,21 @@ 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.DutySchedule;
|
|
|
-import com.ruoyi.system.domain.OrderFood;
|
|
|
-import com.ruoyi.system.mapper.ClockUserInfoMapper;
|
|
|
-import com.ruoyi.system.mapper.DutyScheduleMapper;
|
|
|
-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
|
|
@@ -40,37 +34,37 @@ public class ClockRecordServiceImpl implements IClockRecordService
|
|
|
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())){
|
|
|
+ if ("admin".equals(role.getRoleKey()) || "administrators".equals(role.getRoleKey())) {
|
|
|
bl = false;
|
|
|
}
|
|
|
}
|
|
|
- if(bl){
|
|
|
+ if (bl) {
|
|
|
clockRecord.setUserId(user.getUserId());
|
|
|
}
|
|
|
return clockRecordMapper.selectClockRecordList(clockRecord);
|
|
@@ -78,13 +72,12 @@ public class ClockRecordServiceImpl implements IClockRecordService
|
|
|
|
|
|
/**
|
|
|
* 新增打卡记录
|
|
|
- *
|
|
|
+ *
|
|
|
* @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());
|
|
@@ -105,38 +98,35 @@ public class ClockRecordServiceImpl implements IClockRecordService
|
|
|
|
|
|
/**
|
|
|
* 修改打卡记录
|
|
|
- *
|
|
|
+ *
|
|
|
* @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);
|
|
|
}
|
|
|
|
|
@@ -145,57 +135,57 @@ 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.getRecordDate());
|
|
|
+ resultMap.put("time", clockRecordNew.getRecordDate());
|
|
|
//todo 上下班时间
|
|
|
DutySchedule dutySchedule = dutyScheduleMapper.selectDutyScheduleByDutyNew();
|
|
|
- resultMap.put("workTime",dutySchedule.getStartWorkTime()+" - "+dutySchedule.getEndWorkTime());
|
|
|
+ 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){
|
|
|
+ if (clockRecords != null && clockRecords.size() > 0) {
|
|
|
clockTime = clockRecords.stream().collect(Collectors.groupingBy(ClockRecord::getRecordDate));
|
|
|
}
|
|
|
//查询传入月所有日期
|
|
|
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","未打卡");
|
|
|
+ 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","未打卡");
|
|
|
+ map.put("amex", "5");
|
|
|
+ map.put("pm", "未打卡");
|
|
|
//下午打卡标识 1:正常打卡,2:外勤打卡,3:迟到,4:早退,5:未打卡
|
|
|
- map.put("pmex","5");
|
|
|
- if (clockTime.size() > 0){
|
|
|
+ map.put("pmex", "5");
|
|
|
+ if (clockTime.size() > 0) {
|
|
|
List<ClockRecord> clockRecordList = clockTime.get(day);
|
|
|
- if (clockRecordList != null && clockRecordList.size() > 0){
|
|
|
+ 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());
|
|
|
+ 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());
|
|
|
+ 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());
|
|
|
+ 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());
|
|
|
+ map.put("pmex", clockRecordList.get(clockRecordList.size() - 1).getIsOutwork());
|
|
|
}
|
|
|
- if("1".equals(clockRecordList.get(0).getType())){
|
|
|
- map.put("am",clockRecordList.get(0).getRecordTime());
|
|
|
+ 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());
|
|
|
+ map.put("amex", clockRecordList.get(0).getIsOutwork());
|
|
|
}
|
|
|
- if("2".equals(clockRecordList.get(0).getType())){
|
|
|
- map.put("pm",clockRecordList.get(0).getRecordTime());
|
|
|
+ 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());
|
|
|
+ map.put("pmex", clockRecordList.get(0).getIsOutwork());
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -204,7 +194,18 @@ public class ClockRecordServiceImpl implements IClockRecordService
|
|
|
}
|
|
|
}
|
|
|
//日历数据
|
|
|
- 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);
|
|
|
}
|
|
|
|
|
@@ -227,11 +228,11 @@ public class ClockRecordServiceImpl implements IClockRecordService
|
|
|
int ydk = 0;
|
|
|
//未打卡人数
|
|
|
int wdk = 0;
|
|
|
- if(clockUserId!=null && clockUserId.size()>0){
|
|
|
+ if (clockUserId != null && clockUserId.size() > 0) {
|
|
|
ydk = clockUserId.size();
|
|
|
}
|
|
|
- if(clockUserInfoList!=null && clockUserInfoList.size()>0){
|
|
|
- wdk = clockUserInfoList.size()-clockUserId.size();
|
|
|
+ if (clockUserInfoList != null && clockUserInfoList.size() > 0) {
|
|
|
+ wdk = clockUserInfoList.size() - clockUserId.size();
|
|
|
}
|
|
|
|
|
|
//订餐统计
|
|
@@ -244,23 +245,23 @@ 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);
|
|
|
}
|
|
|
|
|
@@ -269,53 +270,53 @@ public class ClockRecordServiceImpl implements IClockRecordService
|
|
|
Map<String, Object> resultMap = new HashMap<>();
|
|
|
|
|
|
DutySchedule dutySchedule = dutyScheduleMapper.selectDutyScheduleByDutyNew();
|
|
|
- resultMap.put("workTime",dutySchedule.getStartWorkTime()+" - "+dutySchedule.getEndWorkTime());
|
|
|
+ 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){
|
|
|
+ if (clockRecords != null && clockRecords.size() > 0) {
|
|
|
clockTime = clockRecords.stream().collect(Collectors.groupingBy(ClockRecord::getRecordDate));
|
|
|
}
|
|
|
//查询传入月所有日期
|
|
|
- List<Date> dayList = DateUtils.getDatesBetween(clockRecord.getStartTime(),clockRecord.getEndTime());
|
|
|
+ List<Date> dayList = DateUtils.getDatesBetween(clockRecord.getStartTime(), clockRecord.getEndTime());
|
|
|
//写入数据
|
|
|
List<Map> mapList = new ArrayList<>();
|
|
|
- if (dayList.size()> 0){
|
|
|
+ if (dayList.size() > 0) {
|
|
|
for (Date day : dayList) {
|
|
|
- Map<String,Object> map = new HashMap<>(5);
|
|
|
+ Map<String, Object> map = new HashMap<>(5);
|
|
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
- map.put("date",format.format(day));
|
|
|
- map.put("am","未打卡");
|
|
|
+ map.put("date", format.format(day));
|
|
|
+ map.put("am", "未打卡");
|
|
|
//上午打卡标识 1:正常打卡,2:外勤打卡,3:迟到,4:早退,5:未打卡
|
|
|
- map.put("amex","5");
|
|
|
- map.put("pm","未打卡");
|
|
|
+ map.put("amex", "5");
|
|
|
+ map.put("pm", "未打卡");
|
|
|
//下午打卡标识 1:正常打卡,2:外勤打卡,3:迟到,4:早退,5:未打卡
|
|
|
- map.put("pmex","5");
|
|
|
- if (clockTime.size() > 0){
|
|
|
+ map.put("pmex", "5");
|
|
|
+ if (clockTime.size() > 0) {
|
|
|
List<ClockRecord> clockRecordList = clockTime.get(format.format(day));
|
|
|
- if (clockRecordList != null && clockRecordList.size() > 0){
|
|
|
+ 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());
|
|
|
+ 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());
|
|
|
+ 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());
|
|
|
+ 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());
|
|
|
+ map.put("pmex", clockRecordList.get(clockRecordList.size() - 1).getIsOutwork());
|
|
|
}
|
|
|
- if("1".equals(clockRecordList.get(0).getType())){
|
|
|
- map.put("am",clockRecordList.get(0).getRecordTime());
|
|
|
+ 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());
|
|
|
+ map.put("amex", clockRecordList.get(0).getIsOutwork());
|
|
|
}
|
|
|
- if("2".equals(clockRecordList.get(0).getType())){
|
|
|
- map.put("pm",clockRecordList.get(0).getRecordTime());
|
|
|
+ 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());
|
|
|
+ map.put("pmex", clockRecordList.get(0).getIsOutwork());
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -324,35 +325,250 @@ public class ClockRecordServiceImpl implements IClockRecordService
|
|
|
}
|
|
|
}
|
|
|
//日历数据
|
|
|
- resultMap.put("rlData",mapList);
|
|
|
+ resultMap.put("rlData", mapList);
|
|
|
return AjaxResult.success(resultMap);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public AjaxResult personage(ClockRecord clockRecord) {
|
|
|
- SysUser user = SecurityUtils.getLoginUser().getUser();
|
|
|
- clockRecord.setUserId(user.getUserId());
|
|
|
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<>();
|
|
|
+ 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");
|
|
|
+ clockRecord.setRecordDate(clockUserInfo.getRecordDate() + "-01");
|
|
|
Map<String, Object> resultMap = statistics(clockRecord);
|
|
|
- resultMap.put("name",userInfo.getUserName());
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 设置请求分页数据
|
|
|
*/
|
|
@@ -367,7 +583,10 @@ public class ClockRecordServiceImpl implements IClockRecordService
|
|
|
PageUtils.clearPage();
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ @SneakyThrows
|
|
|
public Map<String, Object> statistics(ClockRecord clockRecord) {
|
|
|
+ String year = DateUtils.getYear();
|
|
|
Map<String, Object> resultMap = new HashMap<>();
|
|
|
//迟到
|
|
|
int cd = 0;
|
|
@@ -375,59 +594,101 @@ public class ClockRecordServiceImpl implements IClockRecordService
|
|
|
int zt = 0;
|
|
|
//外勤
|
|
|
int wq = 0;
|
|
|
+ //未打卡
|
|
|
+ int wdk = 0;
|
|
|
|
|
|
- if(StringUtils.isEmpty(clockRecord.getRecordDate())){
|
|
|
+ if (StringUtils.isEmpty(clockRecord.getRecordDate())) {
|
|
|
clockRecord.setRecordDate(DateUtils.getDate());
|
|
|
}
|
|
|
//查询查询月打卡数据
|
|
|
- List<ClockRecord> clockRecords = clockRecordMapper.selectClockRecordList(clockRecord);
|
|
|
+ List<ClockRecord> clockRecords = clockRecordMapper.selectOrderFoodListRl(clockRecord);
|
|
|
//按日期分类
|
|
|
Map<String, List<ClockRecord>> clockTime = new HashMap<>();
|
|
|
- if (clockRecords != null && clockRecords.size() > 0){
|
|
|
+ if (clockRecords != null && clockRecords.size() > 0) {
|
|
|
clockTime = clockRecords.stream().collect(Collectors.groupingBy(ClockRecord::getRecordDate));
|
|
|
}
|
|
|
- for (String key : clockTime.keySet()) {
|
|
|
- List<ClockRecord> clockRecordList = clockTime.get(key);
|
|
|
- clockRecordList = clockRecordList.stream().sorted(Comparator.comparing(ClockRecord::getRecordTime).reversed()).collect(Collectors.toList());
|
|
|
- for (ClockRecord record : clockRecordList) {
|
|
|
- if("1".equals(clockRecordList.get(clockRecordList.size()-1).getType())){
|
|
|
- if("3".equals(clockRecordList.get(clockRecordList.size()-1).getIsOutwork())){
|
|
|
+ //查询传入月所有日期
|
|
|
+ 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())){
|
|
|
+ if ("2".equals(clockRecordList.get(clockRecordList.size() - 1).getIsOutwork())) {
|
|
|
wq++;
|
|
|
}
|
|
|
}
|
|
|
- if("2".equals(clockRecordList.get(clockRecordList.size()-1).getType())){
|
|
|
- if("4".equals(clockRecordList.get(clockRecordList.size()-1).getIsOutwork())){
|
|
|
+ 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())){
|
|
|
+ if ("2".equals(clockRecordList.get(clockRecordList.size() - 1).getIsOutwork())) {
|
|
|
wq++;
|
|
|
}
|
|
|
}
|
|
|
- if("1".equals(clockRecordList.get(0).getType())){
|
|
|
- if("3".equals(clockRecordList.get(clockRecordList.size()-1).getIsOutwork())){
|
|
|
+ if ("1".equals(clockRecordList.get(0).getType())) {
|
|
|
+ sw = true;
|
|
|
+ if ("3".equals(clockRecordList.get(0).getIsOutwork())) {
|
|
|
cd++;
|
|
|
}
|
|
|
- if("2".equals(clockRecordList.get(clockRecordList.size()-1).getIsOutwork())){
|
|
|
+ if ("2".equals(clockRecordList.get(0).getIsOutwork())) {
|
|
|
wq++;
|
|
|
}
|
|
|
}
|
|
|
- if("2".equals(clockRecordList.get(0).getType())){
|
|
|
- if("4".equals(clockRecordList.get(clockRecordList.size()-1).getIsOutwork())){
|
|
|
+ if ("2".equals(clockRecordList.get(0).getType())) {
|
|
|
+ xw = true;
|
|
|
+ if ("4".equals(clockRecordList.get(0).getIsOutwork())) {
|
|
|
zt++;
|
|
|
}
|
|
|
- if("2".equals(clockRecordList.get(clockRecordList.size()-1).getIsOutwork())){
|
|
|
+ if ("2".equals(clockRecordList.get(0).getIsOutwork())) {
|
|
|
wq++;
|
|
|
}
|
|
|
}
|
|
|
+ if(!sw || !xw){
|
|
|
+ wdk++;
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
- resultMap.put("cd",cd);
|
|
|
- resultMap.put("zt",zt);
|
|
|
- resultMap.put("wq",wq);
|
|
|
+ /*for (String key : clockTime.keySet()) {
|
|
|
+
|
|
|
+ }*/
|
|
|
+ resultMap.put("cd", cd);
|
|
|
+ resultMap.put("zt", zt);
|
|
|
+ resultMap.put("wq", wq);
|
|
|
+ resultMap.put("wdk", wdk);
|
|
|
return resultMap;
|
|
|
}
|
|
|
|