|
@@ -3,15 +3,20 @@ 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.config.RuoYiConfig;
|
|
|
+import com.ruoyi.common.constant.Constants;
|
|
|
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.domain.entity.SysRole;
|
|
|
+import com.ruoyi.common.core.domain.entity.SysUser;
|
|
|
import com.ruoyi.common.core.page.TableDataInfo;
|
|
|
import com.ruoyi.common.core.redis.RedisCache;
|
|
|
import com.ruoyi.common.enums.BusinessType;
|
|
|
import com.ruoyi.common.utils.DateUtils;
|
|
|
import com.ruoyi.common.utils.MapToObjectUtils;
|
|
|
+import com.ruoyi.common.utils.SecurityUtils;
|
|
|
import com.ruoyi.common.utils.StringUtils;
|
|
|
import com.ruoyi.common.utils.poi.ExcelUtil;
|
|
|
import com.ruoyi.system.domain.*;
|
|
@@ -32,8 +37,7 @@ 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;
|
|
|
+import static com.ruoyi.common.constant.Constants.*;
|
|
|
|
|
|
/**
|
|
|
* 实现考勤打卡
|
|
@@ -74,6 +78,9 @@ public class KaoQinController extends BaseController {
|
|
|
@Autowired
|
|
|
private SysDeptMapper deptMapper;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private KaoqinRecordMapper kaoqinRecordMapper;
|
|
|
+
|
|
|
/**
|
|
|
* 定位打卡提供计算参数
|
|
|
*
|
|
@@ -125,9 +132,10 @@ public class KaoQinController extends BaseController {
|
|
|
@PreAuthorize("@ss.hasPermi('kaoqin:statistics:abnormal')")
|
|
|
@GetMapping("/abnormal")
|
|
|
public AjaxResult abnormal(KaoqinRecord kaoqinRecord) {
|
|
|
+
|
|
|
//传入userId/年 和 月份 设置查询异常的考勤
|
|
|
//kaoqinRecord.setKaStatus("2");
|
|
|
- List<KaoqinRecord> kaoQinRecords = kaoqinRecordService.selectKaoqinRecordList(kaoqinRecord);
|
|
|
+ List<KaoqinRecord> kaoQinRecords = kaoqinRecordMapper.selectKaoqinRecordList(kaoqinRecord);
|
|
|
//记录该月有多少次异常总数
|
|
|
Long count = 0L;
|
|
|
SysDictData dictData = new SysDictData();
|
|
@@ -153,7 +161,7 @@ public class KaoQinController extends BaseController {
|
|
|
//获取异常名称
|
|
|
String dictLabel = dictToString(kaTypeAmIn);
|
|
|
map.compute(dictLabel, (k, aLong) -> aLong + 1);
|
|
|
- if (!SIX.equals(kaTypeAmIn)) {
|
|
|
+ if (!SIX.equals(kaTypeAmIn) && !SEVEN.equals(kaTypeAmIn) && !EIGHT.equals(kaTypeAmIn)) {
|
|
|
count = count + 1;
|
|
|
}
|
|
|
|
|
@@ -162,7 +170,7 @@ public class KaoQinController extends BaseController {
|
|
|
//获取异常名称
|
|
|
String dictLabel = dictToString(kaTypeAmOut);
|
|
|
map.compute(dictLabel, (k, aLong) -> aLong + 1);
|
|
|
- if (!SIX.equals(kaTypeAmIn)) {
|
|
|
+ if (!SIX.equals(kaTypeAmOut) && !SEVEN.equals(kaTypeAmOut) && !EIGHT.equals(kaTypeAmOut)) {
|
|
|
count = count + 1;
|
|
|
}
|
|
|
}
|
|
@@ -170,7 +178,7 @@ public class KaoQinController extends BaseController {
|
|
|
//获取异常名称
|
|
|
String dictLabel = dictToString(kaTypePmIn);
|
|
|
map.compute(dictLabel, (k, aLong) -> aLong + 1);
|
|
|
- if (!SIX.equals(kaTypeAmIn)) {
|
|
|
+ if (!SIX.equals(kaTypePmIn) && !SEVEN.equals(kaTypePmIn) && !EIGHT.equals(kaTypePmIn)) {
|
|
|
count = count + 1;
|
|
|
}
|
|
|
}
|
|
@@ -178,7 +186,7 @@ public class KaoQinController extends BaseController {
|
|
|
//获取异常名称
|
|
|
String dictLabel = dictToString(kaTypePmOut);
|
|
|
map.compute(dictLabel, (k, aLong) -> aLong + 1);
|
|
|
- if (!SIX.equals(kaTypeAmIn)) {
|
|
|
+ if (!SIX.equals(kaTypePmOut) && !SEVEN.equals(kaTypePmOut) && !EIGHT.equals(kaTypePmOut)) {
|
|
|
count = count + 1;
|
|
|
}
|
|
|
}
|
|
@@ -195,7 +203,7 @@ public class KaoQinController extends BaseController {
|
|
|
@GetMapping("/calendar")
|
|
|
public AjaxResult calendar(KaoqinRecord kaoqinRecord) {
|
|
|
//根据打卡人id和月份去找对应的打卡记录
|
|
|
- List<KaoqinRecord> kaoqinRecords = kaoqinRecordService.selectKaoqinRecordList(kaoqinRecord);
|
|
|
+ List<KaoqinRecord> kaoqinRecords = kaoqinRecordMapper.selectKaoqinRecordList(kaoqinRecord);
|
|
|
//查询传入月补卡信息
|
|
|
CardReplacementRecord cardReplacementRecord = new CardReplacementRecord();
|
|
|
cardReplacementRecord.setUserId(kaoqinRecord.getUserId());
|
|
@@ -321,6 +329,12 @@ public class KaoQinController extends BaseController {
|
|
|
|
|
|
//标签显示状态
|
|
|
map.put("info", abnormal);
|
|
|
+ //标签显示状态补卡,出差,请假
|
|
|
+ Boolean fo = false;
|
|
|
+ if(cardReplacementCollect.get(date)!=null || !recordList.isEmpty() || !businessList.isEmpty()){
|
|
|
+ fo = true;
|
|
|
+ }
|
|
|
+ map.put("fo", fo);
|
|
|
//打卡记录列表
|
|
|
map.put("list", kaoqinRecords1);
|
|
|
//补卡信息
|
|
@@ -341,6 +355,7 @@ public class KaoQinController extends BaseController {
|
|
|
* @param
|
|
|
* @return
|
|
|
*/
|
|
|
+ @PreAuthorize("@ss.hasPermi('kaoqin:statistics:clockRecord')")
|
|
|
@PostMapping("/clockRecord")
|
|
|
public AjaxResult clockRecord(KaoqinRecord kaoqinRecord) {
|
|
|
|
|
@@ -356,7 +371,7 @@ public class KaoQinController extends BaseController {
|
|
|
//定义返回值
|
|
|
List<Map<String, Object>> list = new ArrayList();
|
|
|
//根据部门id查询考勤数据
|
|
|
- List<KaoqinRecord> kaoqinRecords = kaoqinRecordService.selectKaoqinRecordList(kaoqinRecord);
|
|
|
+ List<KaoqinRecord> kaoqinRecords = kaoqinRecordMapper.selectKaoqinRecordList(kaoqinRecord);
|
|
|
if (kaoqinRecords != null) {
|
|
|
//根据userId进行分组
|
|
|
Map<Long, List<KaoqinRecord>> kaoQinRecords = kaoqinRecords.stream().collect(Collectors.groupingBy(KaoqinRecord::getUserId));
|
|
@@ -456,7 +471,7 @@ public class KaoQinController extends BaseController {
|
|
|
BigDecimal yesterdayBd = new BigDecimal(yesterdayMap.get(s));
|
|
|
BigDecimal fz = todayBd.subtract(yesterdayBd);
|
|
|
//比较是否等于0,返回true则不等于0,返回false,则等于0
|
|
|
- if (fz.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
+ if (fz.compareTo(BigDecimal.ZERO) != 0 && yesterdayBd.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
BigDecimal percentage = BigDecimal.ZERO;
|
|
|
//昨天数据>0
|
|
|
if (yesterdayBd.compareTo(BigDecimal.ZERO) > 0) {
|
|
@@ -472,7 +487,7 @@ public class KaoQinController extends BaseController {
|
|
|
;
|
|
|
}
|
|
|
} else {
|
|
|
- if (yesterdayBd.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
+ if (yesterdayBd.compareTo(BigDecimal.ZERO) == 0 && todayBd.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
zz = "100%";
|
|
|
}
|
|
|
}
|
|
@@ -498,6 +513,24 @@ public class KaoQinController extends BaseController {
|
|
|
kaoqinRecord.setKaYear(DateUtils.getYear());
|
|
|
kaoqinRecord.setKaMonth(DateUtils.justMonth());
|
|
|
}
|
|
|
+ // 判断角色
|
|
|
+ SysUser user = SecurityUtils.getLoginUser().getUser();
|
|
|
+ if (!"admin".equals(user.getUserName())){
|
|
|
+ List<SysRole> roles = user.getRoles();
|
|
|
+ Boolean bl = false;
|
|
|
+ for (SysRole role : roles) {
|
|
|
+ if("conservator".equals(role.getRoleKey())) {
|
|
|
+ bl = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (bl) {
|
|
|
+ kaoqinRecord.setDeptId(user.getDeptId());
|
|
|
+ }else{
|
|
|
+ kaoqinRecord.setUserId(user.getUserId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
Map<String, Object> map = new HashMap();
|
|
|
//查询当天考勤数据
|
|
|
Map<String, Long> todayMap = day(kaoqinRecord);
|
|
@@ -519,7 +552,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);
|
|
|
- if (fz.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
+ if (fz.compareTo(BigDecimal.ZERO) != 0 && yesterdayBd.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
BigDecimal percentage = BigDecimal.ZERO;
|
|
|
//昨天数据>0
|
|
|
if (yesterdayBd.compareTo(BigDecimal.ZERO) > 0) {
|
|
@@ -535,7 +568,7 @@ public class KaoQinController extends BaseController {
|
|
|
;
|
|
|
}
|
|
|
} else {
|
|
|
- if (yesterdayBd.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
+ if (yesterdayBd.compareTo(BigDecimal.ZERO) == 0 && todayBd.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
zz = "100%";
|
|
|
}
|
|
|
}
|
|
@@ -557,9 +590,13 @@ public class KaoQinController extends BaseController {
|
|
|
@PreAuthorize("@ss.hasPermi('kaoqin:statistics:monthyAbnormal')")
|
|
|
@GetMapping("/month/abnormal")
|
|
|
public AjaxResult monthAbnormal(KaoqinRecord kaoqinRecord) {
|
|
|
+ if (StringUtils.isEmpty(kaoqinRecord.getKaMonth())) {
|
|
|
+ kaoqinRecord.setKaYear(DateUtils.getYear());
|
|
|
+ kaoqinRecord.setKaMonth(DateUtils.justMonth());
|
|
|
+ }
|
|
|
Map<String, Object> mapTj = new HashMap();
|
|
|
Map<String, Long> mapCount = new HashMap();
|
|
|
- List<KaoqinRecord> kaoQinRecords = kaoqinRecordService.selectKaoqinRecordList(kaoqinRecord);
|
|
|
+ List<KaoqinRecord> kaoQinRecords = kaoqinRecordMapper.selectKaoqinRecordList(kaoqinRecord);
|
|
|
//外勤打卡次数
|
|
|
Long wq = 0L;
|
|
|
//迟到打卡次数
|
|
@@ -641,7 +678,9 @@ public class KaoQinController extends BaseController {
|
|
|
//kaoqinRecord.setKaStatus("2");
|
|
|
//查找最新的考勤规则
|
|
|
KaoqinConfig kaoqinConfigDept = kaoqinConfigService.selectKaoqinConfigBynew();
|
|
|
- List<KaoqinRecord> kaoQinRecords = kaoqinRecordService.selectKaoqinRecordList(kaoqinRecord);
|
|
|
+ List<KaoqinRecord> kaoQinRecords = kaoqinRecordMapper.selectKaoqinRecordList(kaoqinRecord);
|
|
|
+ //打卡总数
|
|
|
+ Long zcs = 0L;
|
|
|
//正常打卡次数
|
|
|
Long zc = 0L;
|
|
|
//外勤打卡次数
|
|
@@ -672,22 +711,26 @@ public class KaoQinController extends BaseController {
|
|
|
String kaTypeAmOut = kaoQinRecord.getKaTypeAmOut();
|
|
|
String kaTypePmIn = kaoQinRecord.getKaTypePmIn();
|
|
|
String kaTypePmOut = kaoQinRecord.getKaTypePmOut();
|
|
|
- if (StringUtils.isNotBlank(kaTypeAmIn)) {
|
|
|
+ if (StringUtils.isNotBlank(kaTypeAmIn) && !SIX.equals(kaTypeAmIn) && !SEVEN.equals(kaTypeAmIn) && !EIGHT.equals(kaTypeAmOut)) {
|
|
|
+ zcs = zcs + 1;
|
|
|
Long aLong = todayMap.get(kaTypeAmIn);
|
|
|
todayMap.put(kaTypeAmIn, aLong + 1);
|
|
|
}
|
|
|
//如果只配置了两次打卡,中间两次打卡不计入统计
|
|
|
if ("4".equals(kaoqinConfigDept.getKaNum())) {
|
|
|
- if (StringUtils.isNotBlank(kaTypeAmOut)) {
|
|
|
+ if (StringUtils.isNotBlank(kaTypeAmOut) && !SIX.equals(kaTypeAmOut) && !SEVEN.equals(kaTypeAmOut) && !EIGHT.equals(kaTypeAmOut)) {
|
|
|
+ zcs = zcs + 1;
|
|
|
Long aLong = todayMap.get(kaTypeAmOut);
|
|
|
todayMap.put(kaTypeAmOut, aLong + 1);
|
|
|
}
|
|
|
- if (StringUtils.isNotBlank(kaTypePmIn)) {
|
|
|
+ if (StringUtils.isNotBlank(kaTypePmIn) && !SIX.equals(kaTypePmIn) && !SEVEN.equals(kaTypePmIn) && !EIGHT.equals(kaTypePmIn)) {
|
|
|
+ zcs = zcs + 1;
|
|
|
Long aLong = todayMap.get(kaTypePmIn);
|
|
|
todayMap.put(kaTypePmIn, aLong + 1);
|
|
|
}
|
|
|
}
|
|
|
- if (StringUtils.isNotBlank(kaTypePmOut)) {
|
|
|
+ if (StringUtils.isNotBlank(kaTypePmOut) && !SIX.equals(kaTypePmOut) && !SEVEN.equals(kaTypePmOut) && !EIGHT.equals(kaTypePmOut)) {
|
|
|
+ zcs = zcs + 1;
|
|
|
Long aLong = todayMap.get(kaTypePmOut);
|
|
|
todayMap.put(kaTypePmOut, aLong + 1);
|
|
|
}
|
|
@@ -700,6 +743,7 @@ public class KaoQinController extends BaseController {
|
|
|
bk = todayMap.get("6");
|
|
|
|
|
|
map.put("zs", count);
|
|
|
+ map.put("zcs", zcs);
|
|
|
map.put("zc", zc);
|
|
|
map.put("wq", wq);
|
|
|
map.put("cd", cd);
|
|
@@ -723,6 +767,10 @@ public class KaoQinController extends BaseController {
|
|
|
str = "qk";
|
|
|
} else if ("6".equals(value)) {
|
|
|
str = "bk";
|
|
|
+ } else if ("7".equals(value)) {
|
|
|
+ str = "qj";
|
|
|
+ } else if ("8".equals(value)) {
|
|
|
+ str = "cc";
|
|
|
}
|
|
|
return str;
|
|
|
}
|
|
@@ -733,12 +781,20 @@ public class KaoQinController extends BaseController {
|
|
|
@PreAuthorize("@ss.hasPermi('kaoqin:statistics:weekBk')")
|
|
|
@GetMapping("/week/bk")
|
|
|
public AjaxResult weekBk() {
|
|
|
+
|
|
|
+
|
|
|
Map<String, Object> map = new HashMap();
|
|
|
//周一到周六的日期
|
|
|
List<String> weekDates = DateUtils.getWeekDatesFromMondayToSaturday();
|
|
|
List<String> weekName = Arrays.asList(WEEK);
|
|
|
//查询本周的补卡信息
|
|
|
- List<CardReplacementRecord> cardReplacementRecordList = cardReplacementRecordMapper.selectCardReplacementRecordListWeek();
|
|
|
+ // 判断角色
|
|
|
+ CardReplacementRecord cardReplacementRecord = new CardReplacementRecord();
|
|
|
+ SysUser user = SecurityUtils.getLoginUser().getUser();
|
|
|
+ if (!"admin".equals(user.getUserName())){
|
|
|
+ cardReplacementRecord.setDeptId(user.getDeptId());
|
|
|
+ }
|
|
|
+ List<CardReplacementRecord> cardReplacementRecordList = cardReplacementRecordMapper.selectCardReplacementRecordListWeek(cardReplacementRecord);
|
|
|
Map<String, List<CardReplacementRecord>> cardMap = cardReplacementRecordList.stream().collect(Collectors.groupingBy(CardReplacementRecord::getApplicationDate));
|
|
|
List<Integer> nums = new ArrayList<>();
|
|
|
for (int i = 0; i < weekDates.size(); i++) {
|
|
@@ -764,7 +820,13 @@ public class KaoQinController extends BaseController {
|
|
|
List<String> weekDates = DateUtils.getWeekDatesFromMondayToSaturday();
|
|
|
List<String> weekName = Arrays.asList(WEEK);
|
|
|
//查询本周的请假信息
|
|
|
- List<RecordLeave> recordLeaves = recordLeaveMapper.selectRecordLeaveListWeek();
|
|
|
+ // 判断角色
|
|
|
+ RecordLeave recordLeave = new RecordLeave();
|
|
|
+ SysUser user = SecurityUtils.getLoginUser().getUser();
|
|
|
+ if (!"admin".equals(user.getUserName())){
|
|
|
+ recordLeave.setDeptId(user.getDeptId());
|
|
|
+ }
|
|
|
+ List<RecordLeave> recordLeaves = recordLeaveMapper.selectRecordLeaveListWeek(recordLeave);
|
|
|
|
|
|
List<Integer> nums = new ArrayList<>();
|
|
|
for (int i = 0; i < weekDates.size(); i++) {
|
|
@@ -804,6 +866,31 @@ public class KaoQinController extends BaseController {
|
|
|
throw new RuntimeException(e);
|
|
|
}
|
|
|
ExcelUtil<BaobiaoVo> util = new ExcelUtil<BaobiaoVo>(BaobiaoVo.class);
|
|
|
- util.exportExcel(response, baobiaoVoList, "考勤统计数据");
|
|
|
+ util.exportExcel(response,baobiaoVoList, "考勤统计数据");
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 导出人员打卡情况报表 返回文件地址
|
|
|
+ */
|
|
|
+ @PreAuthorize("@ss.hasPermi('kaoqin:statistics:urlExport')")
|
|
|
+ @Log(title = "导出人员打卡情况报表", businessType = BusinessType.EXPORT)
|
|
|
+ @PostMapping("/url/export")
|
|
|
+ public AjaxResult urlExport(HttpServletResponse response, KaoqinRecord kaoqinRecord) {
|
|
|
+ List<Map<String, Object>> maps = kqRecord(kaoqinRecord);
|
|
|
+ List<BaobiaoVo> baobiaoVoList = new ArrayList<>();
|
|
|
+ try {
|
|
|
+ for (Map<String, Object> map : maps) {
|
|
|
+
|
|
|
+ BaobiaoVo baobiaoVo = MapToObjectUtils.populate(map, BaobiaoVo.class);
|
|
|
+ baobiaoVoList.add(baobiaoVo);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ ExcelUtil<BaobiaoVo> util = new ExcelUtil<BaobiaoVo>(BaobiaoVo.class);
|
|
|
+
|
|
|
+ return util.exportExcel(baobiaoVoList, "考勤统计数据");
|
|
|
+
|
|
|
}
|
|
|
}
|