| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156 |
- package com.chuanghai.attendance.service.impl;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.chuanghai.attendance.common.exception.BizCodeEnume;
- import com.chuanghai.attendance.common.exception.RRException;
- import com.chuanghai.attendance.common.utils.CommonResult;
- import com.chuanghai.attendance.dao.MonthlySummaryDao;
- import com.chuanghai.attendance.dto.MonthlyDto;
- import com.chuanghai.attendance.entity.*;
- import com.chuanghai.attendance.service.*;
- import com.chuanghai.attendance.utils.DateUtil;
- import com.chuanghai.attendance.utils.excel.ExcelImportXLSXUtil;
- import com.chuanghai.attendance.vo.ClockTimeVo;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.util.StringUtils;
- import org.springframework.web.multipart.MultipartFile;
- import java.text.SimpleDateFormat;
- import java.util.*;
- import java.util.stream.Collectors;
- import static com.alibaba.excel.util.DateUtils.format;
- /**
- * @Author: binguo
- * @Date: 2022/10/9 星期日 16:06
- * @Description: com.chuanghai.attendance.service.impl
- * @Version: 1.0
- */
- @Slf4j
- @Service("monthlySummaryService")
- public class MonthlySummaryServiceImpl extends ServiceImpl<MonthlySummaryDao, MonthlySummary> implements MonthlySummaryService {
- @Autowired
- private DayDetailsService dayDetailsService;
- @Autowired
- private CampusTimeService campusTimeService;
- @Autowired
- private LateClockService lateClockService;
- @Autowired
- private OriginalDataService originalDataService;
- @Autowired
- private WorkerIdentityService workerIdentityService;
- private static String HJH = "黄家湖";
- // private static String HJH = "华东";
- private static String MXH = "墨轩湖";
- /**
- * 导入钉钉考勤原始数据信息
- *
- * @param file
- * @throws Exception
- */
- @Override
- public CommonResult importMonthDataExcel(MultipartFile file) throws Exception {
- List<MonthlySummary> monthlySummaryList = new ArrayList<>();
- List<DayDetails> dayDetailsList = new ArrayList<>();
- //删除导入的月度汇总每日数据
- Boolean aBoolean = dayDetailsService.removeDayDetails();
- //删除导入的月度汇总数据
- Boolean mBoolean = removeMonthlySummary();
- if (aBoolean && mBoolean) {
- List<String[]> list = null;
- try {
- list = ExcelImportXLSXUtil.readerExcel(file.getInputStream(), "月度汇总", 59);
- if(list == null){
- return CommonResult.fail("-1","缺少月度汇总页数据!");
- }
- }catch (Exception e){
- e.printStackTrace();
- throw new RRException(BizCodeEnume.FILE_IMPORT_ERROR);
- }
- int count = 0;
- for (String[] strings : list) {
- count++;
- DayDetails dayDetails = new DayDetails();
- if (count < 5) {
- if (count == 3) {
- dayDetails.setUserId("title");
- dayDetails.setWorkName("title");
- dayDetails.setOneOfMonth(strings[26]);
- dayDetails.setTwoOfMonth(strings[27]);
- dayDetails.setThreeOfMonth(strings[28]);
- dayDetails.setFourOfMonth(strings[29]);
- dayDetails.setFiveOfMonth(strings[30]);
- dayDetails.setSixOfMonth(strings[31]);
- dayDetails.setSevenOfMonth(strings[32]);
- dayDetails.setEightOfMonth(strings[33]);
- dayDetails.setNineOfMonth(strings[34]);
- dayDetails.setTenOfMonth(strings[35]);
- dayDetails.setElevenOfMonth(strings[36]);
- dayDetails.setTwelveOfMonth(strings[37]);
- dayDetails.setThirteenOfMonth(strings[38]);
- dayDetails.setFourteenOfMonth(strings[39]);
- dayDetails.setFifteenOfMonth(strings[40]);
- dayDetails.setSixteenOfMonth(strings[41]);
- dayDetails.setSeventeenOfMonth(strings[42]);
- dayDetails.setEighteenOfMonth(strings[43]);
- dayDetails.setNineteenOfMonth(strings[44]);
- dayDetails.setTwentyOfMonth(strings[45]);
- dayDetails.setTwentyOneOfMonth(strings[46]);
- dayDetails.setTwentyTwoOfMonth(strings[47]);
- dayDetails.setTwentyThreeOfMonth(strings[48]);
- dayDetails.setTwentyFourOfMonth(strings[49]);
- dayDetails.setTwentyFiveOfMonth(strings[50]);
- dayDetails.setTwentySixOfMonth(strings[51]);
- dayDetails.setTwentySevenOfMonth(strings[52]);
- dayDetails.setTwentyEightOfMonth(strings[53]);
- dayDetails.setTwentyNineOfMonth(strings[54]);
- dayDetails.setThirtyOfMonth(strings[55]);
- dayDetails.setThirtyOneOfMonth(strings[56]);
- } else {
- continue;
- }
- } else {
- MonthlySummary monthlySummary = new MonthlySummary();
- monthlySummary.setWorkName(strings[0]);
- monthlySummary.setGroupOfCheck(strings[1]);
- monthlySummary.setDepartment(strings[2]);
- monthlySummary.setWorkNum(strings[3]);
- monthlySummary.setUserId(strings[4]);
- monthlySummary.setAttendanceDay(strings[5]);
- monthlySummary.setRestDay(strings[6]);
- monthlySummary.setWorkHours(strings[7]);
- monthlySummary.setNumberOfLate(strings[8]);
- monthlySummary.setNumberOfLateTime(strings[9]);
- monthlySummary.setNumberOfSeriousLateness(strings[10]);
- monthlySummary.setDurationOfSevereLateness(strings[11]);
- monthlySummary.setDaysOfAbsenteeismAndLateness(strings[12]);
- monthlySummary.setLeaveEarlyNumber(strings[13]);
- monthlySummary.setLeaveEarlyTimes(strings[14]);
- monthlySummary.setLackOfWorkCardTimes(strings[15]);
- monthlySummary.setLackOfMissingWorkCardTimes(strings[16]);
- monthlySummary.setAbsenteeismDay(strings[17]);
- monthlySummary.setEvectionDay(strings[18]);//出差
- monthlySummary.setGoOutDay(strings[19]);//外出
- monthlySummary.setPrivateAffairLeaveDay(strings[20]);//事假
- monthlySummary.setMaternityLeaveDay(strings[21]);//产假
- monthlySummary.setMarriageLeaveDay(strings[22]);//婚假
- monthlySummary.setEscortFalse(strings[23]);//陪护假
- monthlySummary.setSickLeaveDay(strings[24]);//病假
- monthlySummary.setBereavementLeave(strings[25]);//丧假
- //封装钉钉考勤月度汇总
- monthlySummaryList.add(monthlySummary);
- // DayDetails dayDetails = new DayDetails();
- dayDetails.setUserId(strings[4]);
- dayDetails.setWorkName(strings[0]);
- dayDetails.setOneOfMonth(strings[26]);
- dayDetails.setTwoOfMonth(strings[27]);
- dayDetails.setThreeOfMonth(strings[28]);
- dayDetails.setFourOfMonth(strings[29]);
- dayDetails.setFiveOfMonth(strings[30]);
- dayDetails.setSixOfMonth(strings[31]);
- dayDetails.setSevenOfMonth(strings[32]);
- dayDetails.setEightOfMonth(strings[33]);
- dayDetails.setNineOfMonth(strings[34]);
- dayDetails.setTenOfMonth(strings[35]);
- dayDetails.setElevenOfMonth(strings[36]);
- dayDetails.setTwelveOfMonth(strings[37]);
- dayDetails.setThirteenOfMonth(strings[38]);
- dayDetails.setFourteenOfMonth(strings[39]);
- dayDetails.setFifteenOfMonth(strings[40]);
- dayDetails.setSixteenOfMonth(strings[41]);
- dayDetails.setSeventeenOfMonth(strings[42]);
- dayDetails.setEighteenOfMonth(strings[43]);
- dayDetails.setNineteenOfMonth(strings[44]);
- dayDetails.setTwentyOfMonth(strings[45]);
- dayDetails.setTwentyOneOfMonth(strings[46]);
- dayDetails.setTwentyTwoOfMonth(strings[47]);
- dayDetails.setTwentyThreeOfMonth(strings[48]);
- dayDetails.setTwentyFourOfMonth(strings[49]);
- dayDetails.setTwentyFiveOfMonth(strings[50]);
- dayDetails.setTwentySixOfMonth(strings[51]);
- dayDetails.setTwentySevenOfMonth(strings[52]);
- dayDetails.setTwentyEightOfMonth(strings[53]);
- dayDetails.setTwentyNineOfMonth(strings[54]);
- dayDetails.setThirtyOfMonth(strings[55]);
- dayDetails.setThirtyOneOfMonth(strings[56]);
- }
- //封装本月度每日的工作详情
- // if (StringUtils.hasText(dayDetails.getOneOfMonth()) && StringUtils.hasText(dayDetails.getTwentyOneOfMonth())) {
- // dayDetailsList.add(dayDetails);
- // }
- dayDetailsList.add(dayDetails);
- }
- }
- boolean d = dayDetailsService.saveBatch(dayDetailsList, dayDetailsList.size());
- boolean m = this.saveBatch(monthlySummaryList, monthlySummaryList.size());
- if (m & d) {
- return CommonResult.ok();
- }
- return CommonResult.fail("-1","缺少月度汇总页数据!");
- }
- @Override
- public List<MonthlySummary> queryAll() {
- List<MonthlySummary> list = this.list();
- if (list.size() == 0) {
- throw new RRException(BizCodeEnume.DATA_IS_NOT_EXIST, "月度汇总数据不存在");
- }
- return list;
- }
- /**
- * 通过校区获取打卡名称
- *
- * @param campus
- * @return
- */
- public List<String> getClockNameList(String campus) {
- List<String> clockNameList = new ArrayList<>();
- //查询校区的打卡时间段
- List<CampusTime> campusTimeList = campusTimeService.queryCampusTime(campus);
- for (CampusTime campusTime : campusTimeList) {
- if (campusTime.getClockName().contains("、")) {
- clockNameList.add(campusTime.getClockName().split("、")[0]);
- clockNameList.add(campusTime.getClockName().split("、")[1]);
- } else {
- clockNameList.add(campusTime.getClockName());
- }
- }
- return clockNameList;
- }
- /**
- * 通过校区获取打卡次数
- *
- * @param campus
- * @return
- */
- public Integer getClockCampus(String campus) {
- Integer count = 0;
- List<CampusTime> campusTimeList = campusTimeService.queryCampusTime(campus);
- for (CampusTime campusTime : campusTimeList) {
- count += campusTime.getCount();
- }
- return count;
- }
- //解析报表数据
- @Override
- public List<MonthlyDto> analyse() {
- //各校区打卡次数
- Integer countHJH = this.getClockCampus(HJH);
- Integer countMXH = this.getClockCampus(MXH);
- //查询校区的打卡时间段集合及打卡次数
- List<CampusTime> allCampusList = campusTimeService.queryAllCampusTime();
- List<LateClock> allLateClockList = lateClockService.queryAllCampusTime();
- List<CampusTime> campusTimeHJHList = allCampusList.stream().filter(x -> x.getCampus().equals(HJH)).collect(Collectors.toList());
- List<String> clockNameHJHList = getClockNameList(HJH);
- List<CampusTime> campusTimeMXHList = allCampusList.stream().filter(x -> x.getCampus().equals(MXH)).collect(Collectors.toList());
- List<String> clockNameMXHList = getClockNameList(MXH);
- //查询校区的早退规则
- LateClock lateClockHJH = allLateClockList.stream().filter(x -> x.getCampus().equals(HJH)).findAny().get();
- LateClock lateClockMXH = allLateClockList.stream().filter(x -> x.getCampus().equals(MXH)).findAny().get();
- //创建接收分析结果的对象
- List<MonthlySummary> monthlySummaryList = this.queryAll();
- ArrayList<MonthlyDto> monthlyDtoList = new ArrayList<>();
- List<String> userIds = monthlySummaryList.stream().map(MonthlySummary::getUserId).collect(Collectors.toList());
- List<String> workNums = monthlySummaryList.stream().map(MonthlySummary::getWorkNum).collect(Collectors.toList());
- List<OriginalData> allOriginalDataList = originalDataService.queryByUserId(userIds, workNums);
- List<WorkerIdentity> allWorkIdentityList = workerIdentityService.queryByuserIds(userIds, workNums);
- for (MonthlySummary monthlySummary : monthlySummaryList) {
- MonthlyDto monthlyDto = new MonthlyDto();
- //提取当月的所有打卡日期
- List<String> clockDateList = new ArrayList<>();
- //得到该员工当月的所有考勤打卡原始数据
- List<OriginalData> originalDataList = allOriginalDataList.stream().filter(x -> x.getUserId().equals(monthlySummary.getUserId()) && (monthlySummary.getWorkNum() == null ? true : x.getWorkNum().equals(monthlySummary.getWorkNum()))).collect(Collectors.toList());
- // List<OriginalData> originalDataList = originalDataService.queryByUserId("2328214111684948", null);
- for (OriginalData originalData : originalDataList) {
- //提取当月的所有打卡日期
- clockDateList.add(originalData.getDateOfAttendance());
- }
- //去重后得到考勤打卡的日期
- List<String> dateList = clockDateList.stream().distinct().collect(Collectors.toList());
- for (int mm = 0; mm < dateList.size(); mm++) {
- String date = dateList.get(mm);
- List<OriginalData> originalDataByDateList = allOriginalDataList.stream().filter(x -> x.getDateOfAttendance().equals(date) && x.getUserId().equals(monthlySummary.getUserId())).collect(Collectors.toList());
- if(originalDataByDateList.size() == 0){
- originalDataByDateList = allOriginalDataList.stream().filter(x -> x.getDateOfAttendance().equals(date) && x.getWorkNum().equals(monthlySummary.getWorkNum())).collect(Collectors.toList());
- }
- Optional<WorkerIdentity> data = allWorkIdentityList.stream().filter(x -> x.getUserId().equals(monthlySummary.getUserId())).findFirst();
- if(!(data != null && data.isPresent())) {
- data = allWorkIdentityList.stream().filter(x -> x.getWorkNum().equals(monthlySummary.getWorkNum())).findFirst();
- if(!(data != null && data.isPresent())){
- throw new RRException(BizCodeEnume.DATA_IS_NOT_EXIST, "用户 "+monthlySummary.getWorkName()+" userId不存在");
- }
- }
- String idCard = data.get().getIdCard();
- //查询该员工当日有打卡记录则记录出勤天数
- Boolean attendanceStatu = originalDataByDateList.size() > 0 ? Boolean.TRUE : Boolean.FALSE;
- //如果对应校区的打卡次数超过规定次数,则去除多余的打卡数据,保留对应的打卡机会
- if (!originalDataByDateList.get(0).getClockAddress().contains(MXH)) { //标识黄家湖打卡记录
- if (originalDataByDateList.size() > clockNameHJHList.size()) {
- originalDataByDateList = originalDataByDateList.subList(0, countHJH);
- }
- } else { //墨轩湖打卡记录
- if (originalDataByDateList.size() > clockNameMXHList.size()) {
- originalDataByDateList = originalDataByDateList.subList(0, countMXH);
- }
- }
- //获取当天打卡地址的字符串
- String campusStr = "";
- //获取打卡时间集合
- List<String> clockTimeList = new ArrayList<>();
- for (OriginalData originalData1 : originalDataByDateList) {
- // if (originalData1.getClockAddress().contains(HJH) || originalData1.getClockEquipment().contains("手机")) {
- if (!originalData1.getClockAddress().contains(MXH)) {
- // campusStr += HJH;
- campusStr += HJH + ",";
- clockTimeList.add(originalData1.getClockTime() + ":00");
- } else {
- // } else if (originalData1.getClockAddress().contains(MXH)) {
- // campusStr += MXH;
- campusStr += MXH + ",";
- clockTimeList.add(originalData1.getClockTime() + ":00");
- }
- }
- //------------------------------- 遍历员工当天的打卡数据 --------------------------------------------
- Boolean aBoolean = Boolean.TRUE;
- for (int m = 0; m < originalDataByDateList.size(); m++) {
- OriginalData originalData = originalDataByDateList.get(m);
- //获取第一次打卡的校区位置
- String campus = "";
- if (!originalDataByDateList.get(0).getClockAddress().contains(MXH)) {
- campus = HJH;
- } else {
- // } else if (originalDataByDateList.get(0).getClockAddress().contains(MXH)) {
- campus = MXH;
- }
- //获取当前的打卡校区地址
- String campusNow = "";
- if (!originalDataByDateList.get(m).getClockAddress().contains(MXH)) {
- campusNow = HJH;
- } else {
- // } else if (originalDataByDateList.get(m).getClockAddress().contains(MXH)) {
- campusNow = MXH;
- }
- //获取当前打卡的打卡名称
- String clockName = "";
- if (campus.equals(HJH)) {
- clockName = clockNameHJHList.get(m);
- } else {
- clockName = clockNameMXHList.get(m);
- }
- //判断当天的打卡数据中是否包含两个校区,包含则为异地打卡
- if (campusStr.contains(HJH) && campusStr.contains(MXH)) {
- if (!campus.contains(campusNow)) {
- //记录异地打卡天数
- monthlyDto.setAbnormalClockNumber(monthlyDto.getAbnormalClockNumber() + 1);
- monthlyDto.setAbnormalClockRecond(monthlyDto.getAbnormalClockRecond() + date.substring(3) + " " + clockName + " " + campusNow + "\r\n");
- break;
- }
- }
- else {
- //-------------------------------------------- 判断缺卡情况 ---------------------------------------------------------------
- //设置各个校区的缺卡默认值
- String shortageStrHJH = "";
- //如果缺卡天数为空,则添加默值
- if (!StringUtils.hasText(monthlyDto.getDaysOfcardShortageInHuangjiahu())) {
- for (int t = 0; t < clockNameHJHList.size() - 1; t++) {
- int countSHJH = t + 1;
- shortageStrHJH += "缺卡" + countSHJH + "次" + 0 + "天\r\n";
- }
- monthlyDto.setDaysOfcardShortageInHuangjiahu(shortageStrHJH);
- }
- String shortageStrMXH = "";
- if (!StringUtils.hasText(monthlyDto.getDaysOfcardShortageInMoxuanhu())) {
- for (int t = 0; t < clockNameMXHList.size() - 1; t++) {
- int countSMXH = t + 1;
- shortageStrMXH += "缺卡" + countSMXH + "次" + 0 + "天\r\n";
- }
- monthlyDto.setDaysOfcardShortageInMoxuanhu(shortageStrMXH);
- }
- //黄家湖/墨轩湖出勤天数
- String[] campusSplit = campusStr.split(",");
- if (attendanceStatu) {
- if (campusStr.contains(HJH) && campusSplit.length == countHJH) {
- monthlyDto.setDaysOfAttendanceInHuangjiahu(monthlyDto.getDaysOfAttendanceInHuangjiahu() + 1);
- } else if (campusStr.contains(MXH) && campusSplit.length == countMXH) {
- monthlyDto.setDaysOfAttendanceInMoxuanhu(monthlyDto.getDaysOfAttendanceInMoxuanhu() + 1);
- }
- }
- //防止重复计算出勤天数
- attendanceStatu = Boolean.FALSE;
- //判断缺卡情况
- if (campus.equals(HJH)) {
- int dateSize = originalDataByDateList.size();
- if (dateSize < clockNameHJHList.size()) {
- int shortageCountHJH = clockNameHJHList.size() - dateSize;
- String recondOfHJHStr = monthlyDto.getRecondOfcardShortageInHuangjiahu();
- String clockTimeStr = chackClockTime(clockTimeList, campus);
- clockTimeStr = clockTimeStr.substring(0, clockTimeStr.length() - 1);
- String[] splitClockTime = clockTimeStr.split(";");
- for (int qw = 0; qw < splitClockTime.length; qw++) {
- Integer clockIndex = Integer.parseInt(splitClockTime[qw].split("、")[0]);
- Integer clockCount = Integer.parseInt(splitClockTime[qw].split("、")[1]);
- if (!clockTimeStr.contains("true")) {
- for (int w = 0; w < clockCount; w++) {
- if (qw > 0) {
- recondOfHJHStr += date.substring(3) + " " + clockNameHJHList.get(w+clockIndex+1) + "缺卡\r\n";
- // recondOfHJHStr += date.substring(3) + " " + clockNameHJHList.get(w+clockIndex) + "缺卡\r\n";
- }else {
- recondOfHJHStr += date.substring(3) + " " + clockNameHJHList.get(w+clockIndex) + "缺卡\r\n";
- }
- //黄家湖缺卡天数
- monthlyDto.setRecondOfcardShortageInHuangjiahu(recondOfHJHStr);
- }
- }
- }
- monthlyDto.setDaysOfcardShortageInHuangjiahu(DateUtil.getCount(monthlyDto.getDaysOfcardShortageInHuangjiahu(), shortageCountHJH));
- break;
- }
- } else {
- int dateSize = originalDataByDateList.size();
- if (dateSize < clockNameMXHList.size()) {
- int shortageCountMXH = clockNameMXHList.size() - dateSize;
- String recondOfMXHStr = monthlyDto.getRecondOfcardShortageInMoxuanhu();
- String clockTimeStr = chackClockTime(clockTimeList, campus);
- clockTimeStr = clockTimeStr.substring(0, clockTimeStr.length() - 1);
- String[] splitClockTime = clockTimeStr.split(";");
- for (int qw = 0; qw < splitClockTime.length; qw++) {
- Integer clockIndex = Integer.parseInt(splitClockTime[qw].split("、")[0]);
- Integer clockCount = Integer.parseInt(splitClockTime[qw].split("、")[1]);
- if (!clockTimeStr.contains("true")) {
- for (int w = 0; w < clockCount; w++) {
- if (qw > 0) {
- int countMXHs = w+clockIndex+1;
- if (countMXHs >= clockNameMXHList.size()-1) {
- countMXHs = clockNameMXHList.size()-1;
- }
- recondOfMXHStr += date.substring(3) + " " + clockNameMXHList.get(countMXHs) + "缺卡\r\n";
- }else {
- recondOfMXHStr += date.substring(3) + " " + clockNameMXHList.get(w+clockIndex) + "缺卡\r\n";
- }
- //黄家湖缺卡天数
- monthlyDto.setRecondOfcardShortageInMoxuanhu(recondOfMXHStr);
- }
- }
- }
- monthlyDto.setDaysOfcardShortageInMoxuanhu(DateUtil.getCount(monthlyDto.getDaysOfcardShortageInMoxuanhu(), shortageCountMXH));
- break;
- }
- // int dateSize = originalDataByDateList.size();
- // if (dateSize < clockNameMXHList.size()) {
- // int shortageCountMXH = clockNameMXHList.size() - dateSize;
- // String recondOfMXHStr = monthlyDto.getRecondOfcardShortageInMoxuanhu();
- // for (int w = clockNameMXHList.size() - 1; w > dateSize - 1; w--) {
- // recondOfMXHStr += date.substring(3) + " " + clockNameMXHList.get(w) + "缺卡\r\n";
- // //墨轩湖缺卡天数
- // monthlyDto.setRecondOfcardShortageInMoxuanhu(recondOfMXHStr);
- // }
- // monthlyDto.setDaysOfcardShortageInMoxuanhu(DateUtil.getCount(monthlyDto.getDaysOfcardShortageInMoxuanhu(), shortageCountMXH));
- // break;
- // }
- }
- //-------------------------------------------- 判断迟到情况 ---------------------------------------------------------------
- // 迟到或者早退则为 FALSE, TRUE 为正常打卡
- String timeStatu = "";
- // 0 2 4 为上班卡
- if (m % 2 == 0) {
- String campusValue = campus;
- List<CampusTime> campusList = allCampusList.stream().filter(x -> x.getCampus().equals(campusValue)).collect(Collectors.toList());
- LateClock LocalData = allLateClockList.stream().filter(x -> x.getCampus().equals(campusValue)).findAny().get();
- // 打卡迟到记录判断
- timeStatu = changeTime(campusList, originalData.getClockTime(), LocalData.getLateOfWork(), "start", campusValue, m);
- // System.out.println(timeStatu + " start");
- //true正常 false 迟到
- String status = timeStatu.split("、")[0];
- long ltime = Long.parseLong(timeStatu.split("、")[1]);
- //记录迟到
- // if (status.contains("迟到")) {
- if (status.equals("false")) {
- ltime = Math.abs(ltime);
- if (ltime > 0 && ltime <= 20) {
- monthlyDto.setLeTwentyLateNumber(monthlyDto.getLeTwentyLateNumber() + 1);
- String record = date.substring(3) + " " + campusNow + clockName + " " +
- originalDataByDateList.get(m).getClockTime().substring(originalDataByDateList.get(m).getClockTime().length() - 5) + "\r\n";
- monthlyDto.setLateOfRecond(monthlyDto.getLateOfRecond() + record);
- } else if (ltime > 20 && ltime <= 30) {
- monthlyDto.setLequalThirtyLateNumber(monthlyDto.getLequalThirtyLateNumber() + 1);
- String record = date.substring(3) + " " + campusNow + clockName + " " +
- originalDataByDateList.get(m).getClockTime().substring(originalDataByDateList.get(m).getClockTime().length() - 5) + "\r\n";
- monthlyDto.setLateOfRecond(monthlyDto.getLateOfRecond() + record);
- } else if (ltime > 30) {
- monthlyDto.setGeThirtyLateNumber(monthlyDto.getGeThirtyLateNumber() + 1);
- String record = date.substring(3) + " " + campusNow + clockName + " " +
- originalDataByDateList.get(m).getClockTime().substring(originalDataByDateList.get(m).getClockTime().length() - 5) + "\r\n";
- monthlyDto.setLateOfRecond(monthlyDto.getLateOfRecond() + record);
- }
- }
- } else {
- String campusValue = campus;
- List<CampusTime> campusList = allCampusList.stream().filter(x -> x.getCampus().equals(campusValue)).collect(Collectors.toList());
- LateClock LocalData = allLateClockList.stream().filter(x -> x.getCampus().equals(campusValue)).findAny().get();
- // 打卡早退记录判断
- timeStatu = changeTime(campusList, originalData.getClockTime(), LocalData.getLeaveEarlyOfWork(), "end", campus, m);
- String status = timeStatu.split("、")[0];
- long ltime = Long.parseLong(timeStatu.split("、")[1]);
- ltime = Math.abs(ltime);
- //记录早退
- // if (status.equals("早退")) {
- if (status.equals("false")) {
- if (ltime > 0 && ltime <= 20) {
- monthlyDto.setLeTwentyLeaveNumber(monthlyDto.getLeTwentyLeaveNumber() + 1);
- String record = date.substring(3) + " " + campusNow + clockName + " " +
- originalDataByDateList.get(m).getClockTime().substring(originalDataByDateList.get(m).getClockTime().length() - 5) + "\r\n";
- monthlyDto.setLeaveOfRecond(monthlyDto.getLeaveOfRecond() + record);
- } else if (ltime > 20 && ltime <= 30) {
- monthlyDto.setLequalThirtyLeaveNumber(monthlyDto.getLequalThirtyLeaveNumber() + 1);
- String record = date.substring(3) + " " + campusNow + clockName + " " +
- originalDataByDateList.get(m).getClockTime().substring(originalDataByDateList.get(m).getClockTime().length() - 5) + "\r\n";
- monthlyDto.setLeaveOfRecond(monthlyDto.getLeaveOfRecond() + record);
- } else if (ltime > 30) {
- monthlyDto.setGeThirtyLeaveNumber(monthlyDto.getGeThirtyLeaveNumber() + 1);
- String record = date.substring(3) + " " + campusNow + clockName + " " +
- originalDataByDateList.get(m).getClockTime().substring(originalDataByDateList.get(m).getClockTime().length() - 5) + "\r\n";
- monthlyDto.setLeaveOfRecond(monthlyDto.getLeaveOfRecond() + record);
- }
- }
- }
- }
- }
- //计算个人单月总计出行天数
- Integer countOfHJH = monthlyDto.getDaysOfAttendanceInHuangjiahu() + getShortage(monthlyDto.getDaysOfcardShortageInHuangjiahu());
- Integer countOfMXH = monthlyDto.getDaysOfAttendanceInMoxuanhu() + getShortage(monthlyDto.getDaysOfcardShortageInMoxuanhu());
- //统计黄家湖总出勤天数
- monthlyDto.setSumAttendanceInHuangjiahu(countOfHJH);
- //统计墨轩湖总出勤天数
- monthlyDto.setSumAttendanceInMoxuanhu(countOfMXH);
- //出现总天数 = 黄家湖出勤天数+黄家湖缺卡天数+墨轩湖出勤天数+墨轩湖缺卡天数+异地打卡天数 = 黄家湖总出勤天数 + 墨轩湖总出勤天数 + 异地打卡天数
- Integer sumCount = countOfHJH + countOfMXH + monthlyDto.getAbnormalClockNumber();
- monthlyDto.setAttendanceDays(sumCount);
- monthlyDto.setIdCard(idCard);
- }
- monthlyDtoList.add(monthlyDto);
- }
- return monthlyDtoList;
- }
- public String chackClockTime(List<String> clockTimeList, String campus) {
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- List<ClockTimeVo> clockTimeVoList = new ArrayList<>();
- List<CampusTime> campusTimeList = campusTimeService.queryCampusTime(campus);
- List<String> timeList = new ArrayList<>();
- CampusTime campusTimeA = campusTimeList.get(0);
- for (int c = 0; c < campusTimeList.size(); c++) {
- CampusTime campusTime = campusTimeList.get(c);
- if (c == campusTimeList.size() - 1) {
- timeList.add(campusTime.getStartTime() + "、" + campusTime.getStartTime() + "、" + campusTime.getCount());
- } else {
- // for (int d = 0; d < campusTimeList.get(c).getCount(); d++) {
- timeList.add(campusTime.getStartTime() + "、" + campusTimeList.get(c + 1).getStartTime() + "、" + campusTime.getCount());
- // }
- }
- }
- List<ClockTimeVo> clockTimeVO2List = new ArrayList<>();
- for (int x = 0; x < clockTimeList.size(); x++) {
- String clockTime = clockTimeList.get(x);
- for (int i = 0; i < timeList.size(); i++) {
- ClockTimeVo clockTimeVo2 = new ClockTimeVo();
- ClockTimeVo clockTimeVo = new ClockTimeVo();
- String timeStr = timeList.get(i);
- String[] startAndEndTime = timeStr.split("、");
- String yms = clockTime.split(" ")[0];
- //上班规则
- Calendar calendar = Calendar.getInstance();
- String leaveTimeNowStr = "";
- String lateTimeNowStr = "";
- String[] YMS = clockTime.split(" ")[0].split("-");
- String[] HMS = startAndEndTime[0].split(":");
- String[] HMS1 = startAndEndTime[1].split(":");
- if (i == 0) {
- calendar.set(Integer.parseInt(YMS[0]), Integer.parseInt(YMS[1]) - 1, Integer.parseInt(YMS[2]), Integer.parseInt(HMS[0]), Integer.parseInt(HMS[1]), 0);
- lateTimeNowStr = format(calendar.getTime());
- calendar.set(Integer.parseInt(YMS[0]), Integer.parseInt(YMS[1]) - 1, Integer.parseInt(YMS[2]), Integer.parseInt(HMS1[0]), Integer.parseInt(HMS1[1]) - 40, 0);
- leaveTimeNowStr = format(calendar.getTime());
- } else if (i == timeList.size() - 1) { //下班打卡截至时间
- calendar.set(Integer.parseInt(YMS[0]), Integer.parseInt(YMS[1]) - 1, Integer.parseInt(YMS[2]), Integer.parseInt(HMS[0]), Integer.parseInt(HMS[1]) - 40, 0);
- lateTimeNowStr = format(calendar.getTime());
- leaveTimeNowStr = clockTime.split(" ")[0] + " " + "23:59:59";
- } else { //中间卡规则
- calendar.set(Integer.parseInt(YMS[0]), Integer.parseInt(YMS[1]) - 1, Integer.parseInt(YMS[2]), Integer.parseInt(HMS[0]), Integer.parseInt(HMS[1]) - 40, 0);
- lateTimeNowStr = format(calendar.getTime());
- calendar.set(Integer.parseInt(YMS[0]), Integer.parseInt(YMS[1]) - 1, Integer.parseInt(YMS[2]), Integer.parseInt(HMS1[0]), Integer.parseInt(HMS1[1]) - 40, 0);
- leaveTimeNowStr = format(calendar.getTime());
- }
- clockTimeVo2.setClockTimeEnd(leaveTimeNowStr);
- clockTimeVo2.setClockTimeStart(lateTimeNowStr);
- clockTimeVo2.setStartTime(HMS[0]);
- clockTimeVO2List.add(clockTimeVo2);
- int compareTo = clockTime.compareTo(lateTimeNowStr);
- // System.out.println(lateTimeNowStr + " -------getClockTimeStart--------- " + clockTime + " " + compareTo);
- if (compareTo > 0) {
- compareTo = leaveTimeNowStr.compareTo(clockTime);
- // System.out.println(leaveTimeNowStr + " --------getClockTimeEnd-------- " + clockTime + " " + compareTo);
- if (compareTo > 0) {
- //在规定的范围内打卡,无缺卡
- if (clockTimeVoList.size() == 0) {
- clockTimeVo.setClockTimeStart(lateTimeNowStr);
- clockTimeVo.setClockTimeEnd(leaveTimeNowStr);
- clockTimeVo.setCount(clockTimeVo.getCount() + 1);
- clockTimeVo.setStartTime(HMS[0]);
- } else {
- for (int r = 0; r < clockTimeVoList.size(); r++) {
- ClockTimeVo clockTimeVo1 = clockTimeVoList.get(r);
- if (clockTimeVo1.getClockTimeStart().equals(lateTimeNowStr)) {
- clockTimeVo.setCount(clockTimeVo1.getCount() + 1);
- clockTimeVo.setClockTimeStart(clockTimeVo1.getClockTimeStart());
- clockTimeVo.setClockTimeEnd(clockTimeVo1.getClockTimeEnd());
- clockTimeVo.setStartTime(HMS[0]);
- clockTimeVoList.remove(r);
- } else {
- clockTimeVo.setClockTimeStart(lateTimeNowStr);
- clockTimeVo.setClockTimeEnd(leaveTimeNowStr);
- clockTimeVo.setCount(clockTimeVo.getCount() + 1);
- clockTimeVo.setStartTime(HMS[0]);
- }
- }
- }
- clockTimeVoList.add(clockTimeVo);
- }
- }
- }
- }
- List<ClockTimeVo> clockTimeVO2ListUnique = clockTimeVO2List.stream().collect(Collectors.collectingAndThen(
- Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(ClockTimeVo::getClockTimeStart))), ArrayList::new));
- List<ClockTimeVo> clockTimeVoListUnique = clockTimeVoList.stream().collect(Collectors.collectingAndThen(
- Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(ClockTimeVo::getClockTimeStart))), ArrayList::new));
- //
- List<ClockTimeVo> clockTimeVoListNew = new ArrayList<>();
- // System.out.println(clockTimeVO2ListUnique.size()+" --------------- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "+clockTimeVoListUnique.size());
- for (int as = 0; as < clockTimeVO2ListUnique.size(); as++) {
- ClockTimeVo clockTimeVO2 = clockTimeVO2ListUnique.get(as);
- for (int asa = 0; asa < clockTimeVoListUnique.size(); asa++) {
- ClockTimeVo clockTimeVo1 = clockTimeVoListUnique.get(asa);
- // System.out.println(clockTimeVo1.getClockTimeStart()+" ----clockTimeVo1-----------"+clockTimeVO2.getClockTimeStart());
- if (clockTimeVO2.getClockTimeStart().equals(clockTimeVo1.getClockTimeStart())) {
- // clockTimeVO2ListUnique.remove(as);
- clockTimeVoListNew.add(clockTimeVo1);
- }else {
- clockTimeVoListNew.add(clockTimeVO2);
- }
- }
- }
- // clockTimeVoListNew.forEach(ssss->{
- // System.out.println(ssss + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ");
- // });
- List<ClockTimeVo> newList = clockTimeVoListNew.stream().sorted(Comparator.comparing(ClockTimeVo::getCount).reversed())
- .collect(Collectors.toList());
- List<ClockTimeVo> clockTimeVoListUniqueNew = newList.stream().collect(Collectors.collectingAndThen(
- Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(ClockTimeVo::getClockTimeStart))), ArrayList::new));
- //
- // clockTimeVoListUniqueNew.forEach(d -> {
- // System.out.println(d + " dddddddddddd");
- // });
- String size = "";
- for (int y = 0; y < campusTimeList.size(); y++) {
- CampusTime campusTime = campusTimeList.get(y);
- Integer countCA = campusTime.getCount();
- for (int h = 0; h < clockTimeVoListUniqueNew.size(); h++) {
- ClockTimeVo clockTimeVo = clockTimeVoListUniqueNew.get(h);
- Integer countCL = clockTimeVo.getCount();
- int count = countCA - countCL;
- if (campusTime.getStartTime().split(":")[0].equals(clockTimeVo.getStartTime())) {
- if (count > 0) {
- size += y + "、" + count + ";";
- }
- }
- }
- }
- // System.out.println("*********************************************************************");
- // return "true、";
- // System.out.println(size + " clockTimeVo1clockTimeVo1clockTimeVo1clockTimeVo1 aaaaaaaaaaaaaaaaaaaaaa");
- if (StringUtils.hasText(size)) {
- return size;
- } else {
- return "true、" + ";";
- }
- // return clockTimeVO2ListUnique;
- }
- /**
- * 判断是否在该时间段内缺卡
- *
- * @param clockTime 打卡时间
- * @param campus 校区
- * @param index 传递的第几次打卡
- * @param size 数据集合的大小
- * @return
- */
- public String chackClock(String clockTime, String campus, Integer index, Integer size) {
- Boolean statu = Boolean.FALSE;
- try {
- String startTime = "";
- String endTime = "";
- Integer lateTimeNow = 0;
- Integer leaveTimeNow = 0;
- // String clockTimeH = clockTime.split(" ")[1];
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- List<CampusTime> campusTimeList = campusTimeService.queryCampusTime(campus);
- LateClock lateClock = lateClockService.queryCampusTime(campus);
- List<String> timeList = new ArrayList<>();
- for (int c = 1; c < campusTimeList.size(); c++) {
- CampusTime campusTimeB = campusTimeList.get(c - 1);
- CampusTime campusTime = campusTimeList.get(c);
- if (campusTime.getClockName().contains("、")) {
- timeList.add(campusTimeB.getStartTime() + "、" + campusTime.getEndTime());
- timeList.add(campusTimeB.getStartTime() + "、" + campusTime.getEndTime());
- } else {
- timeList.add(campusTimeB.getStartTime() + "、" + campusTime.getEndTime());
- }
- }
- // System.out.println(
- // index + " indexindexindexindexindexindex"
- // );
- String timeStr = timeList.get(index);
- String[] startAndEndTime = timeStr.split("、");
- String yms = clockTime.split(" ")[0];
- //上班规则
- Calendar calendar = Calendar.getInstance();
- String leaveTimeNowStr = "";
- String lateTimeNowStr = "";
- // if (index == 0 || index == size - 1) {
- //
- // String[] YMS = clockTime.split(" ")[0].split("-");
- // String[] HMS = clockTime.split(" ")[1].split(":");
- // calendar.set(Integer.parseInt(YMS[0]), Integer.parseInt(YMS[1]), Integer.parseInt(YMS[2]), Integer.parseInt(HMS[0]), Integer.parseInt(HMS[1]), 0);
- // lateTimeNowStr = format(calendar.getTime());
- //
- // calendar.set(Integer.parseInt(YMS[0]), Integer.parseInt(YMS[1]), Integer.parseInt(YMS[2]), Integer.parseInt(HMS[0]), Integer.parseInt(HMS[1]) - 40, 0);
- // leaveTimeNowStr = format(calendar.getTime());
- //下班规则
- // } else
- if (index == size - 1) {
- String[] YMS = clockTime.split(" ")[0].split("-");
- String[] HMS = startAndEndTime[0].split(":");
- String[] HMS1 = startAndEndTime[1].split(":");
- calendar.set(Integer.parseInt(YMS[0]), Integer.parseInt(YMS[1]) - 1, Integer.parseInt(YMS[2]), Integer.parseInt(HMS[0]), Integer.parseInt(HMS[1]), 0);
- lateTimeNowStr = format(calendar.getTime());
- calendar.set(Integer.parseInt(YMS[0]), Integer.parseInt(YMS[1]) - 1, Integer.parseInt(YMS[2]), Integer.parseInt(HMS1[0]), Integer.parseInt(HMS1[1]) - 40, 0);
- leaveTimeNowStr = format(calendar.getTime());
- // lateTimeNow = Integer.parseInt(startAndEndTime[0].split(":")[1]) - Integer.parseInt(lateClock.getLateOfWork());
- // leaveTimeNow = Integer.parseInt(startAndEndTime[1].split(":")[1]) - 40;
- //中间卡规则
- } else {
- String[] YMS = clockTime.split(" ")[0].split("-");
- String[] HMS = startAndEndTime[0].split(":");
- String[] HMS1 = startAndEndTime[1].split(":");
- calendar.set(Integer.parseInt(YMS[0]), Integer.parseInt(YMS[1]) - 1, Integer.parseInt(YMS[2]), Integer.parseInt(HMS[0]), Integer.parseInt(HMS[1]), 0);
- lateTimeNowStr = format(calendar.getTime());
- calendar.set(Integer.parseInt(YMS[0]), Integer.parseInt(YMS[1]) - 1, Integer.parseInt(YMS[2]), Integer.parseInt(HMS1[0]), Integer.parseInt(HMS1[1]) - 40, 0);
- leaveTimeNowStr = format(calendar.getTime());
- }
- // String lateTimeNowStr = startAndEndTime[0].split(":")[0] + ":" + lateTimeNow;
- // String leaveTimeNowStr = startAndEndTime[1].split(":")[0] + ":" + leaveTimeNow;
- // startTime = clockTime.split(" ")[0] + " " + lateTimeNowStr + ":00";
- // endTime = clockTime.split(" ")[0] + " " + leaveTimeNowStr + ":00";
- //下班打卡截至时间
- if (index == timeList.size() - 1) {
- leaveTimeNowStr = clockTime.split(" ")[0] + " " + "23:59:59";
- }
- clockTime = clockTime + ":00";
- String clockTimeNow = format(format.parse(clockTime));
- // String checkStartTime = format(format.parse(startTime));
- long clockTimeLong = format.parse(clockTime).getTime();
- long startTimeLong = format.parse(lateTimeNowStr).getTime();
- Integer compareTo = clockTimeNow.compareTo(lateTimeNowStr);
- if (compareTo > 0) {
- //当前时间已经计算了早退时间
- // String checkEndTime = format(format.parse(endTime));
- long endTimeLong = format.parse(leaveTimeNowStr).getTime();
- //打卡时间 - 考勤时间
- // checkEndTime 晚于 clockTimeNow compareTo>0 迟到 1 true
- compareTo = leaveTimeNowStr.compareTo(clockTimeNow);
- }
- statu = compareTo > 0 ? Boolean.TRUE : Boolean.FALSE;
- } catch (
- Exception e) {
- e.printStackTrace();
- }
- return statu + "、" + index;
- }
- /**
- * 校验打卡时间
- *
- * @param campusTimeList 校区打卡规则集合
- * @param clockTime 打卡时间
- * @param lateTime 迟到早退时间
- * @param type 须交验的时间段 start上班 end 下班
- * @param camousType 校区 HJH MXH
- * @return false 早退,迟到 true 正常打卡
- */
- public String changeTime(List<CampusTime> campusTimeList, String clockTime, String lateTime, String type, String camousType, Integer index) {
- int compareTo = 0;
- //打卡时间 - 考勤时间
- long csTime = 0L;
- try {
- List<String> timeList = new ArrayList<>();
- for (CampusTime campusTime : campusTimeList) {
- if (campusTime.getClockName().contains("、")) {
- timeList.add(campusTime.getStartTime() + "、" + campusTime.getEndTime());
- timeList.add(campusTime.getStartTime() + "、" + campusTime.getEndTime());
- } else {
- timeList.add(campusTime.getStartTime() + "、" + campusTime.getEndTime());
- }
- }
- //获取当前打卡时间段的打卡规则
- String campusTimeStr = timeList.get(index);
- String startTime = "";
- String endTime = "";
- Integer lateTimeNow = 0;
- Integer leaveTimeNow = 0;
- String[] startAndEndTime = campusTimeStr.split("、");
- Calendar calendar = Calendar.getInstance();
- String leaveTimeNowStr = "";
- String lateTimeNowStr = "";
- //上班规则
- if (index == 0) {
- String[] YMS = clockTime.split(" ")[0].split("-");
- String[] HMS = startAndEndTime[0].split(":");
- String[] HMS1 = startAndEndTime[1].split(":");
- // System.out.println(clockTime);
- calendar.set(Integer.parseInt(YMS[0]), Integer.parseInt(YMS[1]) - 1, Integer.parseInt(YMS[2]) - 1, Integer.parseInt(HMS[0]), Integer.parseInt(HMS[1]), 0);
- lateTimeNowStr = format(calendar.getTime());
- calendar.set(Integer.parseInt(YMS[0]), Integer.parseInt(YMS[1]) - 1, Integer.parseInt(YMS[2]), Integer.parseInt(HMS1[0]), Integer.parseInt(HMS1[1]) + Integer.parseInt(lateTime), 0);
- leaveTimeNowStr = format(calendar.getTime());
- // lateTimeNow = Integer.parseInt(startAndEndTime[0].split(":")[1]) + Integer.parseInt(lateTime);
- // leaveTimeNow = Integer.parseInt(startAndEndTime[1].split(":")[1]) + Integer.parseInt(lateTime);
- //下班规则
- } else if (index == timeList.size() - 1) {
- String[] YMS = clockTime.split(" ")[0].split("-");
- String[] HMS = startAndEndTime[0].split(":");
- String[] HMS1 = startAndEndTime[1].split(":");
- calendar.set(Integer.parseInt(YMS[0]), Integer.parseInt(YMS[1]) - 1, Integer.parseInt(YMS[2]), Integer.parseInt(HMS[0]), Integer.parseInt(HMS[1]) - Integer.parseInt(lateTime), 0);
- lateTimeNowStr = format(calendar.getTime());
- calendar.set(Integer.parseInt(YMS[0]), Integer.parseInt(YMS[1]) - 1, Integer.parseInt(YMS[2]), Integer.parseInt(HMS1[0]), Integer.parseInt(HMS1[1]), 0);
- leaveTimeNowStr = format(calendar.getTime());
- // lateTimeNow = Integer.parseInt(startAndEndTime[0].split(":")[1]) - Integer.parseInt(lateTime);
- // leaveTimeNow = Integer.parseInt(startAndEndTime[1].split(":")[1]);
- //中间卡规则
- } else {
- String[] YMS = clockTime.split(" ")[0].split("-");
- String[] HMS = startAndEndTime[0].split(":");
- String[] HMS1 = startAndEndTime[1].split(":");
- calendar.set(Integer.parseInt(YMS[0]), Integer.parseInt(YMS[1]) - 1, Integer.parseInt(YMS[2]), Integer.parseInt(HMS[0]), Integer.parseInt(HMS[1]) - Integer.parseInt(lateTime), 0);
- lateTimeNowStr = format(calendar.getTime());
- calendar.set(Integer.parseInt(YMS[0]), Integer.parseInt(YMS[1]) - 1, Integer.parseInt(YMS[2]), Integer.parseInt(HMS1[0]), Integer.parseInt(HMS1[1]) + Integer.parseInt(lateTime), 0);
- leaveTimeNowStr = format(calendar.getTime());
- // lateTimeNow = Integer.parseInt(startAndEndTime[0].split(":")[1]) - Integer.parseInt(lateTime);
- // leaveTimeNow = Integer.parseInt(startAndEndTime[1].split(":")[1]) + Integer.parseInt(lateTime);
- }
- // String lateTimeNowStr = startAndEndTime[0].split(":")[0] + ":" + lateTimeNow;
- // String leaveTimeNowStr = startAndEndTime[1].split(":")[0] + ":" + leaveTimeNow;
- // startTime = clockTime.split(" ")[0] + " " + lateTimeNowStr + ":00";
- // endTime = clockTime.split(" ")[0] + " " + leaveTimeNowStr + ":00";
- //下班打卡截至时间
- if (index == timeList.size() - 1) {
- leaveTimeNowStr = clockTime.split(" ")[0] + " " + "23:59:59";
- }
- clockTime = clockTime + ":00";
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- String clockTimeNow = format(format.parse(clockTime));
- // String checkStartTime = format(format.parse(startTime));
- long clockTimeLong = format.parse(clockTime).getTime();
- long startTimeLong = format.parse(lateTimeNowStr).getTime();
- //打卡时间 - 考勤时间
- csTime = (clockTimeLong - startTimeLong) / 1000 / 60;
- // checkStartTime 早于 clockTimeNow compareTo>0 1 true
- compareTo = clockTimeNow.compareTo(lateTimeNowStr);
- if (compareTo > 0) {
- //当前时间已经计算了早退时间
- // String checkEndTime = format(format.parse(endTime));
- long endTimeLong = format.parse(leaveTimeNowStr).getTime();
- //打卡时间 - 考勤时间
- csTime = (clockTimeLong - endTimeLong) / 1000 / 60;
- // checkEndTime 晚于 clockTimeNow compareTo>0 迟到 1 true
- compareTo = leaveTimeNowStr.compareTo(clockTimeNow);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- Boolean statu = compareTo > 0 ? Boolean.TRUE : Boolean.FALSE;
- return statu + "、" + csTime;
- }
- // /**
- // * 校验打卡时间
- // *
- // * @param campusTimeList 校区打卡规则集合
- // * @param clockTime 打卡时间
- // * @param lateTime 迟到早退时间
- // * @param type 须交验的时间段 start上班 end 下班
- // * @param camousType 校区 HJH MXH
- // * @return false 早退,迟到 true 正常打卡
- // */
- // public String changeTime(List<CampusTime> campusTimeList, String clockTime, String lateTime, String type, String camousType) {
- //
- // int compareTo = 0;
- // //打卡时间 - 考勤时间
- // long csTime = 0l;
- // try {
- // String[] clockTimeArr = clockTime.split(" ")[0].split("-");
- // SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd");
- // Calendar calendar = Calendar.getInstance();
- // List<String> timeList = new ArrayList<>();
- // for (CampusTime campusTime : campusTimeList) {
- // if (campusTime.getClockName().contains("、")) {
- // timeList.add(campusTime.getStartTime() + "、" + campusTime.getEndTime());
- // timeList.add(campusTime.getStartTime() + "、" + campusTime.getEndTime());
- // } else {
- // timeList.add(campusTime.getStartTime() + "、" + campusTime.getEndTime());
- // }
- // }
- //// //判断一个时间段之内打多次卡
- //// for (int n = 0; n < campusTimeList.size(); n++) {
- //// CampusTime campusTime = campusTimeList.get(n);
- //// //判断当前时间的打卡次数
- //// if (campusTime.getCount() > 1) {
- ////
- ////
- ////
- ////
- ////
- ////
- ////
- ////
- //// }
- //// }
- // for (int m = 0; m < timeList.size(); m++) {
- // String campusTimeStr = timeList.get(m);
- // String[] startAndEndTime = campusTimeStr.split("、");
- // String startTime = startAndEndTime[0];
- // String endTime = startAndEndTime[1];
- // //start 判断为上班上班时间
- //// if ("start".equals(type)) {
- // //当前时间已经计算了迟到时间
- // calendar.set(Integer.parseInt(clockTimeArr[0]), Integer.parseInt(clockTimeArr[1]), Integer.parseInt(clockTimeArr[2]) + Integer.parseInt(lateTime),
- // Integer.parseInt(startTime.split(":")[0]), Integer.parseInt(startTime.split(":")[1]));
- // String checkStartTime = format(calendar.getTime());
- // long clockTimeLong = format.parse(clockTime).getTime();
- // long startTimeLong = format.parse(checkStartTime).getTime();
- // //打卡时间 - 考勤时间
- // csTime = clockTimeLong - startTimeLong / 1000 / 60;
- // String clockTimeNow = format(format.parse(clockTime));
- // // checkStartTime 早于 clockTimeNow compareTo>0 1 true
- // compareTo = checkStartTime.compareTo(clockTimeNow);
- // //打卡时间大于起始时间则进行结束时间判断 大于其实时间 小于结束时间则为正常打卡
- // if (compareTo > 0) {
- // //当前时间已经计算了早退时间
- // calendar.set(Integer.parseInt(clockTimeArr[0]), Integer.parseInt(clockTimeArr[1]), Integer.parseInt(clockTimeArr[2]) - Integer.parseInt(lateTime),
- // Integer.parseInt(endTime.split(":")[0]), Integer.parseInt(endTime.split(":")[1]));
- // String checkEndTime = format(calendar.getTime());
- // long endTimeLong = format.parse(checkEndTime).getTime();
- // //打卡时间 - 考勤时间
- // csTime = clockTimeLong - endTimeLong / 1000 / 60;
- // // checkEndTime 晚于 clockTimeNow compareTo>0 迟到 1 true
- // compareTo = checkEndTime.compareTo(clockTimeNow);
- // if (compareTo < 0) {
- // Boolean statu = compareTo > 0 ? Boolean.TRUE : Boolean.FALSE;
- // return statu + "早退、" + csTime;
- // }
- // } else {
- // Boolean statu = compareTo > 0 ? Boolean.TRUE : Boolean.FALSE;
- // return statu + "迟到、" + csTime;
- // }
- //
- //// } else {
- //// calendar.set(Integer.parseInt(clockTimeArr[0]), Integer.parseInt(clockTimeArr[1]), Integer.parseInt(clockTimeArr[2])-Integer.parseInt(lateTime),
- //// Integer.parseInt(endTime.split(":")[0]), Integer.parseInt(endTime.split(":")[1]));
- //// String checkEndTime = format(calendar.getTime());
- //// String clockTimeNow = format(format.parse(clockTime));
- //// long clockTimeLong = format.parse(clockTime).getTime();
- //// long endTimeLong = format.parse(checkEndTime).getTime();
- //// //打卡时间 - 考勤时间
- //// csTime = clockTimeLong - endTimeLong/1000/60;
- //// // checkEndTime 晚于 clockTimeNow compareTo>0 迟到 1
- //// compareTo = clockTimeNow.compareTo(checkEndTime);
- //// }
- // }
- //
- // } catch (Exception e) {
- // e.printStackTrace();
- // }
- // // System.out.println(compareTo + " ------------timeStatutimeStatutimeStatutimeStatutimeStatu-----");
- // Boolean statu = compareTo > 0 ? Boolean.TRUE : Boolean.FALSE;
- // return statu + "正常、" + csTime;
- // }
- /**
- * 获取缺卡总天数
- *
- * @param shortageStr
- * @return
- */
- public Integer getShortage(String shortageStr) {
- Integer shortageCount = 0;
- String[] split = shortageStr.split("\r\n");
- for (int u = 0; u < split.length; u++) {
- if (split[u].contains("次") && split[u].contains("天")) {
- int indexT = split[u].indexOf("天");
- int indexC = split[u].indexOf("次");
- String count = split[u].substring(indexC + 1, indexT);
- shortageCount += Integer.parseInt(count);
- }
- }
- return shortageCount;
- }
- @Override
- public List<MonthlySummary> queryByWorkName(String workName) {
- QueryWrapper<MonthlySummary> wrapper = new QueryWrapper<>();
- wrapper.eq("work_name", workName);
- List<MonthlySummary> list = this.list();
- if (list.size() == 0) {
- throw new RRException(BizCodeEnume.DATA_IS_NOT_EXIST, workName + "不存在");
- }
- return list;
- }
- /**
- * 删除导入的月度汇总数据
- *
- * @return
- */
- public Boolean removeMonthlySummary() {
- List<Long> idList = new ArrayList<>();
- List<MonthlySummary> list = this.list();
- if (list.size() == 0) {
- return Boolean.TRUE;
- }
- list.forEach(monthlySummary -> {
- idList.add(monthlySummary.getId());
- });
- return this.removeByIds(idList);
- }
- }
|