|
@@ -1,8 +1,11 @@
|
|
|
package com.ruoyi.web.controller.kaoqin;
|
|
|
|
|
|
+import com.google.gson.Gson;
|
|
|
+import com.google.gson.reflect.TypeToken;
|
|
|
import com.ruoyi.common.annotation.Log;
|
|
|
import com.ruoyi.common.core.controller.BaseController;
|
|
|
import com.ruoyi.common.core.domain.AjaxResult;
|
|
|
+import com.ruoyi.common.core.domain.entity.SysDept;
|
|
|
import com.ruoyi.common.core.domain.entity.SysDictData;
|
|
|
import com.ruoyi.common.core.page.TableDataInfo;
|
|
|
import com.ruoyi.common.core.redis.RedisCache;
|
|
@@ -13,9 +16,7 @@ import com.ruoyi.common.utils.StringUtils;
|
|
|
import com.ruoyi.common.utils.poi.ExcelUtil;
|
|
|
import com.ruoyi.system.domain.*;
|
|
|
import com.ruoyi.system.domain.vo.BaobiaoVo;
|
|
|
-import com.ruoyi.system.mapper.BusinessTripMapper;
|
|
|
-import com.ruoyi.system.mapper.CardReplacementRecordMapper;
|
|
|
-import com.ruoyi.system.mapper.RecordLeaveMapper;
|
|
|
+import com.ruoyi.system.mapper.*;
|
|
|
import com.ruoyi.system.service.ICardReplacementRecordService;
|
|
|
import com.ruoyi.system.service.IKaoqinConfigService;
|
|
|
import com.ruoyi.system.service.IKaoqinRecordService;
|
|
@@ -31,6 +32,8 @@ import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
import static com.ruoyi.common.constant.CacheConstants.WEEK;
|
|
|
+import static com.ruoyi.common.constant.Constants.ONE;
|
|
|
+import static com.ruoyi.common.constant.Constants.SIX;
|
|
|
|
|
|
/**
|
|
|
* 实现考勤打卡
|
|
@@ -62,9 +65,15 @@ public class KaoQinController extends BaseController {
|
|
|
@Autowired
|
|
|
private BusinessTripMapper businessTripMapper;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private AttendanceTimeMapper attendanceTimeMapper;
|
|
|
+
|
|
|
@Autowired
|
|
|
private RedisCache redisCache;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private SysDeptMapper deptMapper;
|
|
|
+
|
|
|
/**
|
|
|
* 定位打卡提供计算参数
|
|
|
*
|
|
@@ -74,8 +83,10 @@ public class KaoQinController extends BaseController {
|
|
|
@PreAuthorize("@ss.hasPermi('kaoqin:daKa:param')")
|
|
|
@GetMapping(value = "/daKa")
|
|
|
public AjaxResult daKa(KaoqinConfig kaoqinConfig) {
|
|
|
+ //查询考勤规则
|
|
|
+ KaoqinConfig kaoqinConfigDept = kaoqinConfigService.selectKaoqinConfigBynew();
|
|
|
//先去 根据当前人员的部门id查询是否有规则,没有再去查祖籍列表
|
|
|
- KaoqinConfig kaoqinConfigDept = kaoqinConfigService.selectKaoqinConfigByDeptId(kaoqinConfig.getDeptId());
|
|
|
+ /*KaoqinConfig kaoqinConfigDept = kaoqinConfigService.selectKaoqinConfigByDeptId(kaoqinConfig.getDeptId());
|
|
|
if (kaoqinConfigDept == null) {
|
|
|
//根据部门祖籍列表,查询该部门考勤范围 ,经纬度
|
|
|
List<KaoqinConfig> kaoqinConfigs = kaoqinConfigService.selectKaoqinConfigList(kaoqinConfig);
|
|
@@ -92,7 +103,7 @@ public class KaoQinController extends BaseController {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
+ }*/
|
|
|
return AjaxResult.success(kaoqinConfigDept);
|
|
|
}
|
|
|
|
|
@@ -126,7 +137,7 @@ public class KaoQinController extends BaseController {
|
|
|
for (SysDictData sysDictDatum : sysDictData) {
|
|
|
//获取异常的值
|
|
|
String dictValue = sysDictDatum.getDictValue();
|
|
|
- if (!"1".equals(dictValue)) {
|
|
|
+ if (!ONE.equals(dictValue)) {
|
|
|
//获取异常名称
|
|
|
String dictLabel = dictToString(sysDictDatum.getDictValue());
|
|
|
Long aLong = 0L;
|
|
@@ -138,29 +149,38 @@ public class KaoQinController extends BaseController {
|
|
|
String kaTypeAmOut = kaoQinRecord.getKaTypeAmOut();
|
|
|
String kaTypePmIn = kaoQinRecord.getKaTypePmIn();
|
|
|
String kaTypePmOut = kaoQinRecord.getKaTypePmOut();
|
|
|
- if (!"1".equals(kaTypeAmIn) && StringUtils.isNotBlank(kaTypeAmIn)) {
|
|
|
+ if (!ONE.equals(kaTypeAmIn) && StringUtils.isNotBlank(kaTypeAmIn)) {
|
|
|
//获取异常名称
|
|
|
String dictLabel = dictToString(kaTypeAmIn);
|
|
|
map.compute(dictLabel, (k, aLong) -> aLong + 1);
|
|
|
- count = count + 1;
|
|
|
+ if (!SIX.equals(kaTypeAmIn)) {
|
|
|
+ count = count + 1;
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
- if (!"1".equals(kaTypeAmOut) && StringUtils.isNotBlank(kaTypeAmOut)) {
|
|
|
+ if (!ONE.equals(kaTypeAmOut) && StringUtils.isNotBlank(kaTypeAmOut)) {
|
|
|
//获取异常名称
|
|
|
String dictLabel = dictToString(kaTypeAmOut);
|
|
|
map.compute(dictLabel, (k, aLong) -> aLong + 1);
|
|
|
- count = count + 1;
|
|
|
+ if (!SIX.equals(kaTypeAmIn)) {
|
|
|
+ count = count + 1;
|
|
|
+ }
|
|
|
}
|
|
|
- if (!"1".equals(kaTypePmIn) && StringUtils.isNotBlank(kaTypePmIn)) {
|
|
|
+ if (!ONE.equals(kaTypePmIn) && StringUtils.isNotBlank(kaTypePmIn)) {
|
|
|
//获取异常名称
|
|
|
String dictLabel = dictToString(kaTypePmIn);
|
|
|
map.compute(dictLabel, (k, aLong) -> aLong + 1);
|
|
|
- count = count + 1;
|
|
|
+ if (!SIX.equals(kaTypeAmIn)) {
|
|
|
+ count = count + 1;
|
|
|
+ }
|
|
|
}
|
|
|
- if (!"1".equals(kaTypePmOut) && StringUtils.isNotBlank(kaTypePmOut)) {
|
|
|
+ if (!ONE.equals(kaTypePmOut) && StringUtils.isNotBlank(kaTypePmOut)) {
|
|
|
//获取异常名称
|
|
|
String dictLabel = dictToString(kaTypePmOut);
|
|
|
map.compute(dictLabel, (k, aLong) -> aLong + 1);
|
|
|
- count = count + 1;
|
|
|
+ if (!SIX.equals(kaTypeAmIn)) {
|
|
|
+ count = count + 1;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
map.put("count", count);
|
|
@@ -181,50 +201,94 @@ public class KaoQinController extends BaseController {
|
|
|
cardReplacementRecord.setUserId(kaoqinRecord.getUserId());
|
|
|
String qDate = kaoqinRecord.getKaYear() + "-" + kaoqinRecord.getKaMonth() + "-01";
|
|
|
cardReplacementRecord.setApplicationDate(qDate);
|
|
|
+ //cardReplacementRecord.setIsPass("2");
|
|
|
List<CardReplacementRecord> cardReplacementRecordList = cardReplacementRecordMapper.selectCardReplacementRecordList(cardReplacementRecord);
|
|
|
Map<String, List<CardReplacementRecord>> cardReplacementCollect = cardReplacementRecordList.stream().collect(Collectors.groupingBy(CardReplacementRecord::getApplicationDate));
|
|
|
//查询传入月请假信息
|
|
|
RecordLeave recordLeave = new RecordLeave();
|
|
|
String month = kaoqinRecord.getKaYear() + "-" + kaoqinRecord.getKaMonth();
|
|
|
- recordLeave.setStartTime(DateUtils.convertStringToDate(month + "-" + "01 00:00:00"));
|
|
|
+ recordLeave.setStartTime(DateUtils.parseDate(month + "-" + "01 00:00:00"));
|
|
|
String fin = DateUtils.getLastDayOfMonth(Integer.parseInt(kaoqinRecord.getKaYear()), Integer.parseInt(kaoqinRecord.getKaMonth()));
|
|
|
- recordLeave.setEndTime(DateUtils.convertStringToDate(fin + " 23:59:59"));
|
|
|
+ recordLeave.setEndTime(DateUtils.parseDate(fin + " 23:59:59"));
|
|
|
recordLeave.setAbsenteeId(String.valueOf(kaoqinRecord.getUserId()));
|
|
|
+ //recordLeave.setIsPass("2");
|
|
|
List<RecordLeave> recordLeaves = recordLeaveMapper.selectRecordLeaveList(recordLeave);
|
|
|
//查询传入月出差信息
|
|
|
BusinessTrip businessTrip = new BusinessTrip();
|
|
|
- businessTrip.setStartTime(DateUtils.convertStringToDate(month + "-" + "01 00:00:00"));
|
|
|
- businessTrip.setEndTime(DateUtils.convertStringToDate(fin + " 23:59:59"));
|
|
|
+ businessTrip.setStartTime(DateUtils.parseDate(month + "-" + "01 00:00:00"));
|
|
|
+ businessTrip.setEndTime(DateUtils.parseDate(fin + " 23:59:59"));
|
|
|
businessTrip.setUserId(kaoqinRecord.getUserId());
|
|
|
+ //businessTrip.setIsPass("2");
|
|
|
List<BusinessTrip> businessTrips = businessTripMapper.selectBusinessTripListLb(businessTrip);
|
|
|
|
|
|
+ //查询考勤日期
|
|
|
+ SysDept sysDept = deptMapper.selectDeptById(kaoqinRecord.getDeptId());
|
|
|
+ //查询部门考勤日期规则
|
|
|
+ AttendanceTime attendanceTime = new AttendanceTime();
|
|
|
+ attendanceTime.setDeptName(sysDept.getDeptName());
|
|
|
+ List<AttendanceTime> attendanceTimes = attendanceTimeMapper.selectAttendanceTimeList(attendanceTime);
|
|
|
+
|
|
|
+ String key = "monthHoliday" + kaoqinRecord.getKaYear() + "-" + kaoqinRecord.getKaMonth();
|
|
|
+ String jsonResult = redisCache.getCacheObject(key);
|
|
|
+ Map<String, Integer> holidayMap = new HashMap<>();
|
|
|
+ if(StringUtils.isNotBlank(jsonResult)){
|
|
|
+ Gson gson = new Gson();
|
|
|
+ //判断当天天是否是法定节假日 0 上班 1周末 2节假日 mapKey为去掉-的日期:20250101
|
|
|
+ holidayMap = gson.fromJson(jsonResult,
|
|
|
+ new TypeToken<Map<String, Integer>>() {
|
|
|
+ }.getType());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //获取月份的所有日期
|
|
|
+ List<String> allDate = DateUtils.getAllDateStringsInMonth(Integer.parseInt(kaoqinRecord.getKaYear()), Integer.parseInt(kaoqinRecord.getKaMonth()));
|
|
|
List list = new ArrayList();
|
|
|
+ Map<String, List<KaoqinRecord>> collect = new HashMap<>();
|
|
|
if (kaoqinRecords != null && kaoqinRecords.size() > 0) {
|
|
|
- Map<String, List<KaoqinRecord>> collect = kaoqinRecords.stream().collect(Collectors.groupingBy(KaoqinRecord::getKaTime));
|
|
|
- for (String date : collect.keySet()) {
|
|
|
+ collect = kaoqinRecords.stream().collect(Collectors.groupingBy(KaoqinRecord::getKaTime));
|
|
|
+ }
|
|
|
|
|
|
- List<RecordLeave> recordList = new ArrayList<>();
|
|
|
- List<BusinessTrip> businessList = new ArrayList<>();
|
|
|
- //请假信息
|
|
|
- for (RecordLeave recordLeaf : recordLeaves) {
|
|
|
- if (DateUtils.isDateBetween(DateUtils.convertStringToDate(date), recordLeaf.getStartTime(), recordLeaf.getEndTime())) {
|
|
|
- recordList.add(recordLeaf);
|
|
|
- }
|
|
|
+ for (String date : allDate) {
|
|
|
|
|
|
- }
|
|
|
- //出差信息
|
|
|
- for (BusinessTrip trip : businessTrips) {
|
|
|
- if (DateUtils.isDateBetween(DateUtils.convertStringToDate(date), trip.getStartTime(), trip.getEndTime())) {
|
|
|
- businessList.add(trip);
|
|
|
+ Map<String, Object> map = new HashMap();
|
|
|
+ //日期
|
|
|
+ map.put("data", date);
|
|
|
+ //1上班 2休息
|
|
|
+ map.put("type", "1");
|
|
|
+ //判断放假还是工作 0 上班 1周末 2节假日
|
|
|
+ if (holidayMap.containsKey(date.replace("-", "")) && 0 != holidayMap.get(date.replace("-", ""))) {
|
|
|
+ map.put("type", "2");
|
|
|
+ }
|
|
|
+ if(attendanceTimes != null && !attendanceTimes.isEmpty()){
|
|
|
+ for (AttendanceTime time : attendanceTimes) {
|
|
|
+ if(DateUtils.isDateBetween(DateUtils.parseDate(date), time.getStartTime(), time.getEndTime())){
|
|
|
+ map.put("type", "2");
|
|
|
+ break;
|
|
|
}
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ List<RecordLeave> recordList = new ArrayList<>();
|
|
|
+ List<BusinessTrip> businessList = new ArrayList<>();
|
|
|
+ //请假信息
|
|
|
+ for (RecordLeave recordLeaf : recordLeaves) {
|
|
|
+ if (DateUtils.isDateBetween(DateUtils.parseDate(date), recordLeaf.getStartTime(), recordLeaf.getEndTime())) {
|
|
|
+ recordList.add(recordLeaf);
|
|
|
}
|
|
|
|
|
|
+ }
|
|
|
+ //出差信息
|
|
|
+ for (BusinessTrip trip : businessTrips) {
|
|
|
+ if (DateUtils.isDateBetween(DateUtils.parseDate(date), trip.getStartTime(), trip.getEndTime())) {
|
|
|
+ businessList.add(trip);
|
|
|
+ }
|
|
|
|
|
|
- Map<String, Object> map = new HashMap();
|
|
|
- List<KaoqinRecord> kaoqinRecords1 = collect.get(date);
|
|
|
- //定义标签显示状态
|
|
|
- String abnormal = "";
|
|
|
+ }
|
|
|
+ //定义标签显示状态
|
|
|
+ String abnormal = "";
|
|
|
+ List<KaoqinRecord> kaoqinRecords1 = new ArrayList<>();
|
|
|
+ if (collect.containsKey(date)) {
|
|
|
+ kaoqinRecords1 = collect.get(date);
|
|
|
Boolean flag = true;
|
|
|
for (KaoqinRecord record : kaoqinRecords1) {
|
|
|
String kaTypeAmIn = record.getKaTypeAmIn();
|
|
@@ -253,20 +317,19 @@ public class KaoQinController extends BaseController {
|
|
|
} else {
|
|
|
abnormal = abnormal.substring(0, abnormal.length() - 1);
|
|
|
}
|
|
|
- //日期
|
|
|
- map.put("data", date);
|
|
|
- //标签显示状态
|
|
|
- map.put("info", abnormal);
|
|
|
- //打卡记录列表
|
|
|
- map.put("list", kaoqinRecords1);
|
|
|
- //补卡信息
|
|
|
- map.put("bk", cardReplacementCollect.get(date));
|
|
|
- //请假信息
|
|
|
- map.put("qj", recordList);
|
|
|
- //出差信息
|
|
|
- map.put("cc", businessList);
|
|
|
- list.add(map);
|
|
|
}
|
|
|
+
|
|
|
+ //标签显示状态
|
|
|
+ map.put("info", abnormal);
|
|
|
+ //打卡记录列表
|
|
|
+ map.put("list", kaoqinRecords1);
|
|
|
+ //补卡信息
|
|
|
+ map.put("bk", cardReplacementCollect.get(date));
|
|
|
+ //请假信息
|
|
|
+ map.put("qj", recordList);
|
|
|
+ //出差信息
|
|
|
+ map.put("cc", businessList);
|
|
|
+ list.add(map);
|
|
|
}
|
|
|
return AjaxResult.success(list);
|
|
|
}
|
|
@@ -392,6 +455,7 @@ public class KaoQinController extends BaseController {
|
|
|
BigDecimal todayBd = new BigDecimal(todayMap.get(s));
|
|
|
BigDecimal yesterdayBd = new BigDecimal(yesterdayMap.get(s));
|
|
|
BigDecimal fz = todayBd.subtract(yesterdayBd);
|
|
|
+ //比较是否等于0,返回true则不等于0,返回false,则等于0
|
|
|
if (fz.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
BigDecimal percentage = BigDecimal.ZERO;
|
|
|
//昨天数据>0
|
|
@@ -407,7 +471,12 @@ public class KaoQinController extends BaseController {
|
|
|
zz = (percentage.multiply(new BigDecimal("-1"))) + "%";
|
|
|
;
|
|
|
}
|
|
|
+ } else {
|
|
|
+ if (yesterdayBd.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
+ zz = "100%";
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
mapZj.put("bfb", zz);
|
|
|
mapZj.put("zf", zt);
|
|
|
map.put(s, mapZj);
|
|
@@ -465,6 +534,10 @@ public class KaoQinController extends BaseController {
|
|
|
zz = (percentage.multiply(new BigDecimal("-1"))) + "%";
|
|
|
;
|
|
|
}
|
|
|
+ } else {
|
|
|
+ if (yesterdayBd.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
+ zz = "100%";
|
|
|
+ }
|
|
|
}
|
|
|
mapZj.put("bfb", zz);
|
|
|
mapZj.put("zf", zt);
|
|
@@ -579,6 +652,8 @@ public class KaoQinController extends BaseController {
|
|
|
Long zt = 0L;
|
|
|
//缺卡打卡次数
|
|
|
Long qk = 0L;
|
|
|
+ //补卡打卡次数
|
|
|
+ Long bk = 0L;
|
|
|
//记录该月打卡总人数
|
|
|
Long count = Long.valueOf(kaoQinRecords.size());
|
|
|
SysDictData dictData = new SysDictData();
|
|
@@ -622,6 +697,7 @@ public class KaoQinController extends BaseController {
|
|
|
cd = todayMap.get("2");
|
|
|
zt = todayMap.get("4");
|
|
|
qk = todayMap.get("5");
|
|
|
+ bk = todayMap.get("6");
|
|
|
|
|
|
map.put("zs", count);
|
|
|
map.put("zc", zc);
|
|
@@ -629,6 +705,7 @@ public class KaoQinController extends BaseController {
|
|
|
map.put("cd", cd);
|
|
|
map.put("zt", zt);
|
|
|
map.put("qk", qk);
|
|
|
+ map.put("bk", bk);
|
|
|
return map;
|
|
|
}
|
|
|
|
|
@@ -644,6 +721,8 @@ public class KaoQinController extends BaseController {
|
|
|
str = "zt";
|
|
|
} else if ("5".equals(value)) {
|
|
|
str = "qk";
|
|
|
+ } else if ("6".equals(value)) {
|
|
|
+ str = "bk";
|
|
|
}
|
|
|
return str;
|
|
|
}
|
|
@@ -692,7 +771,7 @@ public class KaoQinController extends BaseController {
|
|
|
int num = 0;
|
|
|
if (recordLeaves != null && !recordLeaves.isEmpty()) {
|
|
|
for (RecordLeave recordLeaf : recordLeaves) {
|
|
|
- if (DateUtils.isDateBetween(DateUtils.convertStringToDate(weekDates.get(i)), recordLeaf.getStartTime(), recordLeaf.getEndTime())) {
|
|
|
+ if (DateUtils.isDateBetween(DateUtils.parseDate(weekDates.get(i)), recordLeaf.getStartTime(), recordLeaf.getEndTime())) {
|
|
|
num++;
|
|
|
}
|
|
|
}
|