| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136 |
- 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.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 Boolean importMonthDataExcel(MultipartFile file) throws Exception {
- List<MonthlySummary> monthlySummaryList = new ArrayList<>();
- List<DayDetails> dayDetailsList = new ArrayList<>();
- //删除导入的月度汇总每日数据
- Boolean aBoolean = dayDetailsService.removeDayDetails();
- //删除导入的月度汇总数据
- Boolean mBoolean = removeMonthlySummary();
- Boolean statu = Boolean.FALSE;
- if (aBoolean && mBoolean) {
- List<String[]> list = ExcelImportXLSXUtil.readerExcel(file.getInputStream(), "月度汇总", 55);
- 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[24]);
- dayDetails.setTwoOfMonth(strings[25]);
- dayDetails.setThreeOfMonth(strings[26]);
- dayDetails.setFourOfMonth(strings[27]);
- dayDetails.setFiveOfMonth(strings[28]);
- dayDetails.setSixOfMonth(strings[29]);
- dayDetails.setSevenOfMonth(strings[30]);
- dayDetails.setEightOfMonth(strings[31]);
- dayDetails.setNineOfMonth(strings[32]);
- dayDetails.setTenOfMonth(strings[33]);
- dayDetails.setElevenOfMonth(strings[34]);
- dayDetails.setTwelveOfMonth(strings[35]);
- dayDetails.setThirteenOfMonth(strings[36]);
- dayDetails.setFourteenOfMonth(strings[37]);
- dayDetails.setFifteenOfMonth(strings[38]);
- dayDetails.setSixteenOfMonth(strings[39]);
- dayDetails.setSeventeenOfMonth(strings[40]);
- dayDetails.setEighteenOfMonth(strings[41]);
- dayDetails.setNineteenOfMonth(strings[42]);
- dayDetails.setTwentyOfMonth(strings[43]);
- dayDetails.setTwentyOneOfMonth(strings[44]);
- dayDetails.setTwentyTwoOfMonth(strings[45]);
- dayDetails.setTwentyThreeOfMonth(strings[46]);
- dayDetails.setTwentyFourOfMonth(strings[47]);
- dayDetails.setTwentyFiveOfMonth(strings[48]);
- dayDetails.setTwentySixOfMonth(strings[49]);
- dayDetails.setTwentySevenOfMonth(strings[50]);
- dayDetails.setTwentyEightOfMonth(strings[51]);
- dayDetails.setTwentyNineOfMonth(strings[52]);
- dayDetails.setThirtyOfMonth(strings[53]);
- dayDetails.setThirtyOneOfMonth(strings[54]);
- } 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[18]);
- monthlySummary.setBereavementLeave(strings[19]);
- monthlySummary.setPrivateAffairLeaveDay(strings[20]);
- monthlySummary.setMaternityLeaveDay(strings[21]);
- monthlySummary.setSickLeaveDay(strings[22]);
- monthlySummary.setEscortFalse(strings[23]);
- //封装钉钉考勤月度汇总
- monthlySummaryList.add(monthlySummary);
- // DayDetails dayDetails = new DayDetails();
- dayDetails.setUserId(strings[4]);
- dayDetails.setWorkName(strings[0]);
- dayDetails.setOneOfMonth(strings[24]);
- dayDetails.setTwoOfMonth(strings[25]);
- dayDetails.setThreeOfMonth(strings[26]);
- dayDetails.setFourOfMonth(strings[27]);
- dayDetails.setFiveOfMonth(strings[28]);
- dayDetails.setSixOfMonth(strings[29]);
- dayDetails.setSevenOfMonth(strings[30]);
- dayDetails.setEightOfMonth(strings[31]);
- dayDetails.setNineOfMonth(strings[32]);
- dayDetails.setTenOfMonth(strings[33]);
- dayDetails.setElevenOfMonth(strings[34]);
- dayDetails.setTwelveOfMonth(strings[35]);
- dayDetails.setThirteenOfMonth(strings[36]);
- dayDetails.setFourteenOfMonth(strings[37]);
- dayDetails.setFifteenOfMonth(strings[38]);
- dayDetails.setSixteenOfMonth(strings[39]);
- dayDetails.setSeventeenOfMonth(strings[40]);
- dayDetails.setEighteenOfMonth(strings[41]);
- dayDetails.setNineteenOfMonth(strings[42]);
- dayDetails.setTwentyOfMonth(strings[43]);
- dayDetails.setTwentyOneOfMonth(strings[44]);
- dayDetails.setTwentyTwoOfMonth(strings[45]);
- dayDetails.setTwentyThreeOfMonth(strings[46]);
- dayDetails.setTwentyFourOfMonth(strings[47]);
- dayDetails.setTwentyFiveOfMonth(strings[48]);
- dayDetails.setTwentySixOfMonth(strings[49]);
- dayDetails.setTwentySevenOfMonth(strings[50]);
- dayDetails.setTwentyEightOfMonth(strings[51]);
- dayDetails.setTwentyNineOfMonth(strings[52]);
- dayDetails.setThirtyOfMonth(strings[53]);
- dayDetails.setThirtyOneOfMonth(strings[54]);
- }
- //封装本月度每日的工作详情
- // 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) {
- statu = Boolean.TRUE;
- }
- return statu;
- }
- @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> campusTimeHJHList = campusTimeService.queryCampusTime(HJH);
- List<String> clockNameHJHList = getClockNameList(HJH);
- List<CampusTime> campusTimeMXHList = campusTimeService.queryCampusTime(MXH);
- List<String> clockNameMXHList = getClockNameList(MXH);
- //查询校区的早退规则
- LateClock lateClockHJH = lateClockService.queryCampusTime(HJH);
- LateClock lateClockMXH = lateClockService.queryCampusTime(MXH);
- //创建接收分析结果的对象
- List<MonthlySummary> monthlySummaryList = this.queryAll();
- ArrayList<MonthlyDto> monthlyDtoList = new ArrayList<>();
- int count = 0;
- for (MonthlySummary monthlySummary : monthlySummaryList) {
- // count++;
- // if (count >= 20) {
- // continue;
- // }
- MonthlyDto monthlyDto = new MonthlyDto();
- //提取当月的所有打卡日期
- List<String> clockDateList = new ArrayList<>();
- //得到该员工当月的所有考勤打卡原始数据
- List<OriginalData> originalDataList = originalDataService.queryByUserId(monthlySummary.getUserId(), monthlySummary.getWorkNum());
- // 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);
- //通过 考勤日期和userId 得到当前员工当天的打卡原始数据
- // List<OriginalData> originalDataByDateList = originalDataService.queryByTimeAndUserId(date, "2328214111684948", null);
- List<OriginalData> originalDataByDateList = originalDataService.queryByTimeAndUserId(date, monthlySummary.getUserId(), monthlySummary.getWorkNum());
- String idCard = workerIdentityService.queryByuserId(monthlySummary.getUserId(), monthlySummary.getWorkNum(), monthlySummary.getWorkName());
- // String idCard = workerIdentityService.queryByuserId("2328214111684948", null);
- //查询该员工当日有打卡记录则记录出勤天数
- 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");
- }
- }
- //去除尾部的 ,
- // campusStr = campusStr.substring(0, campusStr.length() - 1);
- //------------------------------- 遍历员工当天的打卡数据 --------------------------------------------
- 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);
- // String clockTime = date.substring(3);
- // int cloclCount = m + 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) {
- // 打卡迟到记录判断
- timeStatu = changeTime(campusTimeService.queryCampusTime(campus), originalData.getClockTime(), lateClockService.queryCampusTime(campus).getLateOfWork(), "start", campus, 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 {
- // 打卡早退记录判断
- timeStatu = changeTime(campusTimeService.queryCampusTime(campus), originalData.getClockTime(), lateClockService.queryCampusTime(campus).getLeaveEarlyOfWork(), "end", campus, m);
- // System.out.println(timeStatu + " end");
- 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);
- // System.out.println("sss"+monthlyDtoList.get(0));
- }
- 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);
- }
- }
|