|
@@ -7,6 +7,7 @@ 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.exception.ServiceException;
|
|
|
import com.ruoyi.common.utils.DateUtils;
|
|
|
import com.ruoyi.common.utils.PageUtils;
|
|
|
import com.ruoyi.common.utils.SecurityUtils;
|
|
@@ -79,6 +80,11 @@ public class ClockRecordServiceImpl implements IClockRecordService {
|
|
|
@Override
|
|
|
public int insertClockRecord(ClockRecord clockRecord) {
|
|
|
SysUser user = SecurityUtils.getLoginUser().getUser();
|
|
|
+ //判断当前人员是否能考勤
|
|
|
+ ClockUserInfo clockUserInfo = clockUserInfoMapper.selectClockUserInfoByUserId(user.getUserId());
|
|
|
+ if (clockUserInfo == null) {
|
|
|
+ throw new ServiceException("当前账号无法打卡");
|
|
|
+ }
|
|
|
clockRecord.setUserId(user.getUserId());
|
|
|
clockRecord.setUserName(user.getNickName());
|
|
|
clockRecord.setPhonenumber(user.getPhonenumber());
|
|
@@ -138,7 +144,10 @@ public class ClockRecordServiceImpl implements IClockRecordService {
|
|
|
resultMap.put("name", clockUserInfo.getUserName());
|
|
|
//查询最新打卡数据
|
|
|
ClockRecord clockRecordNew = clockRecordMapper.selectClockRecordNew(clockRecord);
|
|
|
- resultMap.put("time", clockRecordNew.getRecordDate());
|
|
|
+ resultMap.put("time", "");
|
|
|
+ if (clockRecordNew != null) {
|
|
|
+ resultMap.put("time", clockRecordNew.getRecordDate());
|
|
|
+ }
|
|
|
//todo 上下班时间
|
|
|
DutySchedule dutySchedule = dutyScheduleMapper.selectDutyScheduleByDutyNew();
|
|
|
resultMap.put("workTime", dutySchedule.getStartWorkTime() + " - " + dutySchedule.getEndWorkTime());
|
|
@@ -201,7 +210,7 @@ public class ClockRecordServiceImpl implements IClockRecordService {
|
|
|
clockHoliday.setYear(DateUtils.getYear());
|
|
|
clockHoliday.setHolidayDate(clockRecord.getRecordDate());
|
|
|
List<ClockHolidays> clockHolidaysList = clockHolidaysMapper.selectClockHolidaysMonthList(clockHoliday);
|
|
|
- if(clockHolidaysList==null || clockHolidaysList.size()<0){
|
|
|
+ if (clockHolidaysList == null || clockHolidaysList.size() < 0) {
|
|
|
clockHolidaysList = new ArrayList<>();
|
|
|
}
|
|
|
//放假数据
|
|
@@ -224,6 +233,9 @@ public class ClockRecordServiceImpl implements IClockRecordService {
|
|
|
ClockUserInfo clockUserInfo = new ClockUserInfo();
|
|
|
clockUserInfo.setDelFlag("0");
|
|
|
List<ClockUserInfo> clockUserInfoList = clockUserInfoMapper.selectClockUserInfoList(clockUserInfo);
|
|
|
+ if(clockUserInfoList!=null && clockUserInfoList.size()>0){
|
|
|
+ dkzs = clockUserInfoList.size();
|
|
|
+ }
|
|
|
//已打卡人数
|
|
|
int ydk = 0;
|
|
|
//未打卡人数
|
|
@@ -347,7 +359,7 @@ public class ClockRecordServiceImpl implements IClockRecordService {
|
|
|
clockRecord.setRecordDate(clockUserInfo.getRecordDate() + "-01");
|
|
|
Map<String, Object> resultMap = statistics(clockRecord);
|
|
|
resultMap.put("name", userInfo.getUserName());
|
|
|
- resultMap.put("userId",userInfo.getUserId());
|
|
|
+ resultMap.put("userId", userInfo.getUserId());
|
|
|
listMap.add(resultMap);
|
|
|
}
|
|
|
return listMap;
|
|
@@ -384,15 +396,14 @@ public class ClockRecordServiceImpl implements IClockRecordService {
|
|
|
List<String> jjrList = new ArrayList<>();
|
|
|
List<String> bbList = new ArrayList<>();
|
|
|
for (ClockHolidays clockHolidays : clockHolidaysList) {
|
|
|
- if("NO".equals(clockHolidays.getType())){
|
|
|
+ if ("NO".equals(clockHolidays.getType())) {
|
|
|
jjrList.add(clockHolidays.getHolidayDate());
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
bbList.add(clockHolidays.getHolidayDate());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
//查询传入两个日期的所有日期
|
|
|
List<Date> dayList = DateUtils.getDatesBetween(clockRecord.getStartTime(), clockRecord.getEndTime());
|
|
|
for (ClockUserInfo userInfo : clockUserInfoList) {
|
|
@@ -405,65 +416,58 @@ public class ClockRecordServiceImpl implements IClockRecordService {
|
|
|
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)))){
|
|
|
+ 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){
|
|
|
+ if (clockRecordList == null || clockRecordList.size() <= 0) {
|
|
|
wdk++;
|
|
|
- }else{
|
|
|
+ } 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())) {
|
|
|
+
|
|
|
+ Map<String, List<ClockRecord>> typMap = clockRecordList.stream().collect(Collectors.groupingBy(ClockRecord::getType));
|
|
|
+ if (typMap.containsKey("1")) {
|
|
|
+ //排序,时间倒序
|
|
|
+ List<ClockRecord> clockRecordTyp = typMap.get("1");
|
|
|
+ clockRecordTyp = clockRecordTyp.stream().sorted(Comparator.comparing(ClockRecord::getRecordTime).reversed()).collect(Collectors.toList());
|
|
|
+ //上班卡取最后一条
|
|
|
sw = true;
|
|
|
- if ("3".equals(clockRecordList.get(0).getIsOutwork())) {
|
|
|
+ if ("3".equals(clockRecordTyp.get(clockRecordTyp.size() - 1).getIsOutwork())) {
|
|
|
bcd = true;
|
|
|
}
|
|
|
- if ("2".equals(clockRecordList.get(0).getIsOutwork())) {
|
|
|
+ if ("2".equals(clockRecordTyp.get(clockRecordTyp.size() - 1).getIsOutwork())) {
|
|
|
bwq = true;
|
|
|
}
|
|
|
}
|
|
|
- if ("2".equals(clockRecordList.get(0).getType())) {
|
|
|
+ if (typMap.containsKey("2")) {
|
|
|
+ //排序,时间倒序
|
|
|
+ List<ClockRecord> clockRecordTyp = typMap.get("2");
|
|
|
+ clockRecordTyp = clockRecordTyp.stream().sorted(Comparator.comparing(ClockRecord::getRecordTime).reversed()).collect(Collectors.toList());
|
|
|
+ //下班卡取最第一条
|
|
|
xw = true;
|
|
|
- if ("4".equals(clockRecordList.get(0).getIsOutwork())) {
|
|
|
+ if ("4".equals(clockRecordTyp.get(0).getIsOutwork())) {
|
|
|
bzt = true;
|
|
|
}
|
|
|
- if ("2".equals(clockRecordList.get(0).getIsOutwork())) {
|
|
|
+ if ("2".equals(clockRecordTyp.get(0).getIsOutwork())) {
|
|
|
bwq = true;
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
- if(!sw || !xw){
|
|
|
+ if (!sw || !xw) {
|
|
|
wdk++;
|
|
|
}
|
|
|
- if(bcd){
|
|
|
+ if (bcd) {
|
|
|
cd++;
|
|
|
}
|
|
|
- if(bzt){
|
|
|
+ if (bzt) {
|
|
|
zt++;
|
|
|
}
|
|
|
- if(bwq){
|
|
|
+ if (bwq) {
|
|
|
wq++;
|
|
|
}
|
|
|
}
|
|
@@ -482,7 +486,7 @@ public class ClockRecordServiceImpl implements IClockRecordService {
|
|
|
public AjaxResult details(ClockRecord clockRecord) {
|
|
|
List<Map<String, Object>> listMap = new ArrayList<>();
|
|
|
//查询人员打卡数据
|
|
|
- clockRecord.setRecordDate(clockRecord.getRecordDate()+"-01");
|
|
|
+ clockRecord.setRecordDate(clockRecord.getRecordDate() + "-01");
|
|
|
List<ClockRecord> clockRecords = clockRecordMapper.selectOrderFoodListRl(clockRecord);
|
|
|
//按日期分类
|
|
|
Map<String, List<ClockRecord>> clockTime = new HashMap<>();
|
|
@@ -499,70 +503,69 @@ public class ClockRecordServiceImpl implements IClockRecordService {
|
|
|
List<String> jjrList = new ArrayList<>();
|
|
|
List<String> bbList = new ArrayList<>();
|
|
|
for (ClockHolidays clockHolidays : clockHolidaysList) {
|
|
|
- if("NO".equals(clockHolidays.getType())){
|
|
|
+ if ("NO".equals(clockHolidays.getType())) {
|
|
|
jjrList.add(clockHolidays.getHolidayDate());
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
bbList.add(clockHolidays.getHolidayDate());
|
|
|
}
|
|
|
}
|
|
|
for (String day : dayList) {
|
|
|
Map<String, Object> resultMap = new HashMap<>();
|
|
|
- boolean bl = (DateUtils.dayForWeek(day)==6 || DateUtils.dayForWeek(day)==7);
|
|
|
- if(jjrList.contains(day) || (bl && !bbList.contains(day))){
|
|
|
+ boolean bl = (DateUtils.dayForWeek(day) == 6 || DateUtils.dayForWeek(day) == 7);
|
|
|
+ if (jjrList.contains(day) || (bl && !bbList.contains(day))) {
|
|
|
continue;
|
|
|
}
|
|
|
List<ClockRecord> clockRecordList = clockTime.get(day);
|
|
|
- if(clockRecordList==null || clockRecordList.size()<=0){
|
|
|
- resultMap.put("time",day);
|
|
|
- resultMap.put("details","全天未打卡");
|
|
|
+ if (clockRecordList == null || clockRecordList.size() <= 0) {
|
|
|
+ resultMap.put("time", day);
|
|
|
+ resultMap.put("details", "全天未打卡");
|
|
|
listMap.add(resultMap);
|
|
|
- }else{
|
|
|
- resultMap.put("time",day);
|
|
|
+ } else {
|
|
|
+ resultMap.put("time", 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("上午:外勤");
|
|
|
- }
|
|
|
+
|
|
|
+ Map<String, List<ClockRecord>> typMap = clockRecordList.stream().collect(Collectors.groupingBy(ClockRecord::getType));
|
|
|
+ if (typMap.containsKey("1")) {
|
|
|
+ //排序,时间倒序
|
|
|
+ List<ClockRecord> clockRecordTyp = typMap.get("1");
|
|
|
+ clockRecordTyp = clockRecordTyp.stream().sorted(Comparator.comparing(ClockRecord::getRecordTime).reversed()).collect(Collectors.toList());
|
|
|
+ //上班卡取最后一条
|
|
|
+ if ("3".equals(clockRecordTyp.get(clockRecordTyp.size() - 1).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("下午:外勤");
|
|
|
- }
|
|
|
+ if ("2".equals(clockRecordTyp.get(clockRecordTyp.size() - 1).getIsOutwork())) {
|
|
|
+ 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 (typMap.containsKey("2")) {
|
|
|
+ //排序,时间倒序
|
|
|
+ List<ClockRecord> clockRecordTyp = typMap.get("2");
|
|
|
+ clockRecordTyp = clockRecordTyp.stream().sorted(Comparator.comparing(ClockRecord::getRecordTime).reversed()).collect(Collectors.toList());
|
|
|
+ //下班卡取最第一条
|
|
|
+ if ("4".equals(clockRecordTyp.get(0).getIsOutwork())) {
|
|
|
+ if(StringUtils.isNotEmpty(sb.toString())){
|
|
|
+ sb.append(",");
|
|
|
}
|
|
|
- sb.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("下午:外勤");
|
|
|
+ if ("2".equals(clockRecordTyp.get(0).getIsOutwork())) {
|
|
|
+ if(StringUtils.isNotEmpty(sb.toString())){
|
|
|
+ sb.append(",");
|
|
|
}
|
|
|
+ sb.append("下午:外勤");
|
|
|
+ }
|
|
|
+
|
|
|
+ }else{
|
|
|
+ if(StringUtils.isNotEmpty(sb.toString())){
|
|
|
+ sb.append(",");
|
|
|
}
|
|
|
+ sb.append("下午:缺卡");
|
|
|
}
|
|
|
- resultMap.put("details",sb.toString());
|
|
|
+
|
|
|
+ resultMap.put("details", sb.toString());
|
|
|
listMap.add(resultMap);
|
|
|
}
|
|
|
}
|
|
@@ -618,73 +621,70 @@ public class ClockRecordServiceImpl implements IClockRecordService {
|
|
|
List<String> jjrList = new ArrayList<>();
|
|
|
List<String> bbList = new ArrayList<>();
|
|
|
for (ClockHolidays clockHolidays : clockHolidaysList) {
|
|
|
- if("NO".equals(clockHolidays.getType())){
|
|
|
+ if ("NO".equals(clockHolidays.getType())) {
|
|
|
jjrList.add(clockHolidays.getHolidayDate());
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
bbList.add(clockHolidays.getHolidayDate());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
for (String s : dayList) {
|
|
|
- if(DateUtils.compare(s,DateUtils.getDate())<0){
|
|
|
+ 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))){
|
|
|
+ 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;
|
|
|
+ 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())) {
|
|
|
+ boolean swwq = false;
|
|
|
+ boolean xwwq = false;
|
|
|
+ Map<String, List<ClockRecord>> typMap = clockRecordList.stream().collect(Collectors.groupingBy(ClockRecord::getType));
|
|
|
+ if (typMap.containsKey("1")) {
|
|
|
+ //排序,时间倒序
|
|
|
+ List<ClockRecord> clockRecordTyp = typMap.get("1");
|
|
|
+ clockRecordTyp = clockRecordTyp.stream().sorted(Comparator.comparing(ClockRecord::getRecordTime).reversed()).collect(Collectors.toList());
|
|
|
+ //上班卡取最后一条
|
|
|
sw = true;
|
|
|
- if ("3".equals(clockRecordList.get(clockRecordList.size() - 1).getIsOutwork())) {
|
|
|
+ if ("3".equals(clockRecordTyp.get(clockRecordTyp.size() - 1).getIsOutwork())) {
|
|
|
cd++;
|
|
|
}
|
|
|
- if ("2".equals(clockRecordList.get(clockRecordList.size() - 1).getIsOutwork())) {
|
|
|
- wq++;
|
|
|
+ if ("2".equals(clockRecordTyp.get(clockRecordTyp.size() - 1).getIsOutwork())) {
|
|
|
+ swwq = true;
|
|
|
}
|
|
|
}
|
|
|
- if ("2".equals(clockRecordList.get(clockRecordList.size() - 1).getType())) {
|
|
|
+ if (typMap.containsKey("2")) {
|
|
|
+ //排序,时间倒序
|
|
|
+ List<ClockRecord> clockRecordTyp = typMap.get("2");
|
|
|
+ clockRecordTyp = clockRecordTyp.stream().sorted(Comparator.comparing(ClockRecord::getRecordTime).reversed()).collect(Collectors.toList());
|
|
|
+ //下班卡取最第一条
|
|
|
xw = true;
|
|
|
- if ("4".equals(clockRecordList.get(clockRecordList.size() - 1).getIsOutwork())) {
|
|
|
+ if ("4".equals(clockRecordTyp.get(0).getIsOutwork())) {
|
|
|
zt++;
|
|
|
}
|
|
|
- if ("2".equals(clockRecordList.get(clockRecordList.size() - 1).getIsOutwork())) {
|
|
|
- wq++;
|
|
|
+ if ("2".equals(clockRecordTyp.get(0).getIsOutwork())) {
|
|
|
+ xwwq = true;
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
- 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 (!sw || !xw) {
|
|
|
+ wdk++;
|
|
|
}
|
|
|
- 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 (swwq) {
|
|
|
+ wq++;
|
|
|
}
|
|
|
- if(!sw || !xw){
|
|
|
- wdk++;
|
|
|
+ if (xwwq) {
|
|
|
+ wq++;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- /*for (String key : clockTime.keySet()) {
|
|
|
-
|
|
|
- }*/
|
|
|
resultMap.put("cd", cd);
|
|
|
resultMap.put("zt", zt);
|
|
|
resultMap.put("wq", wq);
|