提交 680e4386 authored 作者: gongwenjie's avatar gongwenjie

考勤

上级 afb3bddb
......@@ -74,4 +74,13 @@ public class TestController {
return ResponseEntity.ok(responses);
}
@GetMapping("/test12")
public void test12(){
try {
cardTask.calculate();
} catch (Exception e) {
e.printStackTrace();
}
}
}
......@@ -3,10 +3,13 @@ package com.zjty.tynotes.attendance.dao;
import com.zjty.tynotes.attendance.entity.CardResult;
import org.springframework.data.mongodb.repository.MongoRepository;
import java.util.Date;
import java.util.List;
/**
* @Author gwj
* @create 2020/3/24 14:51
*/
public interface CardResultDao extends MongoRepository<CardResult,String> {
List<CardResult> findAllByUserIdAndUserCheckTimeBetween(String userId, Date startTime, Date endTime);
}
......@@ -27,39 +27,42 @@ public class AttendanceDetails {
@ApiModelProperty(value = "用户id",example = "eqweqw12312e")
String userId;
@ApiModelProperty(value = "平均工时",example = "176")
Integer averageWorkHours;
// @ApiModelProperty(value = "平均工时",example = "176")
// Integer averageWorkHours;
//
// @ApiModelProperty(value = "应出勤天数",example = "22")
// Integer attendanceDay;
//
// @ApiModelProperty(value = "实际出勤天数",example = "22")
// Integer realAttendanceDay;
@ApiModelProperty(value = "应出勤天数",example = "22")
Integer attendanceDay;
@ApiModelProperty(value = "是否出勤0为出勤/1为未出勤",example = "22")
Integer isRealAttendanceDay;
@ApiModelProperty(value = "实际出勤天数",example = "22")
Integer realAttendanceDay;
@ApiModelProperty(value = "是否迟到0为迟到/1为未迟到",example = "1")
Integer isLateDay;
@ApiModelProperty(value = "迟到天数",example = "1")
Integer lateDay;
@ApiModelProperty(value = "早退天数",example = "1")
Integer leaveEarlyDay;
@ApiModelProperty(value = "是否早退0为早退/1为未早退",example = "1")
Integer isLeaveEarlyDay;
@ApiModelProperty(value = "缺卡次数",example = "2")
Integer lessCard;
@ApiModelProperty(value = "旷工天数",example = "2")
Integer absenteeismDay;
@ApiModelProperty(value = "是否旷工0为旷工/1为未旷工",example = "2")
Integer isAbsenteeismDay;
@ApiModelProperty(value = "加班时长",example = "10")
Integer workOverHours;
@ApiModelProperty(value = "是否加班0为加班/1为未加班",example = "10")
Integer isWorkOverHours;
@ApiModelProperty(value = "调休天数",example = "1")
Float paidLeaveDay;
@ApiModelProperty(value = "是否调休0为调休/1为未调休",example = "1")
Float isPaidLeaveDay;
@ApiModelProperty(value = "病假天数",example = "1")
Float sickLeaveDay;
@ApiModelProperty(value = "是否病假0为病假/1为未病假",example = "1")
Float isSickLeaveDay;
@ApiModelProperty(value = "公出天数",example = "1")
Float outSideBusinessDay;
@ApiModelProperty(value = "是否公出0为公出/1为未公出",example = "1")
Float isOutSideBusinessDay;
@ApiModelProperty(value = "时间,只需要精确到月份",example = "2020-03")
@ApiModelProperty(value = "时间",example = "2020-03-22")
Date date;
}
......@@ -15,6 +15,8 @@ import com.zjty.tynotes.pas.entity.Day;
import com.zjty.tynotes.pas.entity.Department;
import com.zjty.tynotes.pas.service.IUserService;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -30,6 +32,8 @@ import java.util.*;
*/
@Service
public class ApprovalInformationServiceImpl implements ApprovalInformationService {
private static final Logger logger = LoggerFactory.getLogger(ApprovalInformationServiceImpl.class);
@Autowired
private ApprovalInformationDao approvalInformationDao;
@Autowired
......@@ -51,18 +55,24 @@ public class ApprovalInformationServiceImpl implements ApprovalInformationServic
if(approvalInformation.getApprovalType().equals("调休")){
String userId = approvalInformation.getUserId();
AttendanceDetails attendanceDetails = attendanceDetailsDao.findByUserId(userId);
Integer workOverHours = attendanceDetails.getWorkOverHours();
UserOverWork userOverWork = userOverWorkDao.findByUserId(approvalInformation.getUserId());
Long workOverHours = userOverWork.getOverWorkHour();
Date leaveEndTime = approvalInformation.getLeaveEndTime();
Date leaveStartTime = approvalInformation.getLeaveStartTime();
long l = leaveEndTime.getTime() - leaveStartTime.getTime();
long daytime = 24*60*60*1000;
Long aLong = 0L;
try {
aLong = computeTime(leaveEndTime, leaveStartTime);
} catch (Exception e) {
logger.error("addApproval()方法中计算调休时长出错");
}
long daytime = 8;
long day;
if(l%daytime==0){
day = l/daytime;
if(aLong%daytime==0){
day = aLong/daytime;
}else{
day = l/daytime + 1;
day = aLong/daytime + 1;
}
if(workOverHours<=(day*8)){
if(workOverHours<=(aLong)){
return null;
}
if(day>2){
......@@ -100,7 +110,26 @@ public class ApprovalInformationServiceImpl implements ApprovalInformationServic
if(approvalInformation.getApprovalStatus()!=null && approvalInformation.getApprovalStatus().equals("0")){
if(StringUtils.isNotBlank(approvalInformation.getApprovalType())&&approvalInformation.getApprovalType().equals("调休")){
UserOverWork userOverWork = userOverWorkDao.findByUserId(approvalInformation.getUserId());
try {
Long aLong = computeTime(approvalInformation.getLeaveEndTime(), approvalInformation.getLeaveStartTime());
Long overWorkHour = userOverWork.getOverWorkHour();
Long timeLeft = overWorkHour - aLong;
userOverWork.setOverWorkHour(timeLeft);
userOverWorkDao.save(userOverWork);
} catch (Exception e) {
logger.error("计算调休时长出错");
}
}else if(StringUtils.isNotBlank(approvalInformation.getApprovalType())&&approvalInformation.getApprovalType().equals("加班")){
UserOverWork userOverWork = userOverWorkDao.findByUserId(approvalInformation.getUserId());
try {
Long aLong = computeTime(approvalInformation.getLeaveEndTime(), approvalInformation.getLeaveStartTime());
Long overWorkHour = userOverWork.getOverWorkHour();
Long timeLeft = overWorkHour + aLong;
userOverWork.setOverWorkHour(timeLeft);
userOverWorkDao.save(userOverWork);
} catch (Exception e) {
e.printStackTrace();
}
}
approvalInformation.setStatus("1");
approvalInformation.setApprovalOne("0");
......@@ -122,6 +151,29 @@ public class ApprovalInformationServiceImpl implements ApprovalInformationServic
if(("1").equals(parentDepartmentLevel)||("2").equals(parentDepartmentLevel)){
approvalInformation.setApprovalUserIdOne(userId);
if(approvalInformation.getApprovalStatus()!=null && approvalInformation.getApprovalStatus().equals("0")){
if(StringUtils.isNotBlank(approvalInformation.getApprovalType())&&approvalInformation.getApprovalType().equals("调休")){
UserOverWork userOverWork = userOverWorkDao.findByUserId(approvalInformation.getUserId());
try {
Long aLong = computeTime(approvalInformation.getLeaveEndTime(), approvalInformation.getLeaveStartTime());
Long overWorkHour = userOverWork.getOverWorkHour();
Long timeLeft = overWorkHour - aLong;
userOverWork.setOverWorkHour(timeLeft);
userOverWorkDao.save(userOverWork);
} catch (Exception e) {
logger.error("计算调休时长出错");
}
}else if(StringUtils.isNotBlank(approvalInformation.getApprovalType())&&approvalInformation.getApprovalType().equals("加班")){
UserOverWork userOverWork = userOverWorkDao.findByUserId(approvalInformation.getUserId());
try {
Long aLong = computeTime(approvalInformation.getLeaveEndTime(), approvalInformation.getLeaveStartTime());
Long overWorkHour = userOverWork.getOverWorkHour();
Long timeLeft = overWorkHour + aLong;
userOverWork.setOverWorkHour(timeLeft);
userOverWorkDao.save(userOverWork);
} catch (Exception e) {
e.printStackTrace();
}
}
approvalInformation.setStatus("1");
approvalInformation.setApprovalOne("0");
}else if(approvalInformation.getApprovalStatus()!=null && approvalInformation.getApprovalStatus().equals("1")){
......@@ -188,90 +240,384 @@ public class ApprovalInformationServiceImpl implements ApprovalInformationServic
return approvalInformationList;
}
public static void main(String[] args) throws Exception{
Config config = new Config("1","09:00:00","17:00:00","2","3","15","17","1","1","1","1","1","1","1","1","1","1","1");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = "2020-03-29 00:00:00";
String date2 = "2020-03-30 00:00:00";
String date3 = "2020-03-31 00:00:00";
Date parse = sdf.parse(date);
Date parse1 = sdf.parse(date2);
Date parse2 = sdf.parse(date3);
Day day = new Day("1",parse,"1");
Day day1 = new Day("2",parse1,"0");
Day day2 = new Day("3",parse2,"0");
List<Day> days = new ArrayList<>();
days.add(day);
days.add(day1);
days.add(day2);
String start = "2020-03-29 18:00:00";
String end = "2020-03-31 19:00:00";
Date startTime = sdf2.parse(start);
Date endTime = sdf2.parse(end);
ApprovalInformationServiceImpl approvalInformationService = new ApprovalInformationServiceImpl();
Long aLong = approvalInformationService.computeTime2(startTime, endTime, config, days);
System.out.println(aLong);
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 17:00:00");
// Date date = new Date();
// String format = sdf.format(date);
// Date parse = sdf.parse(format);
// System.out.println(parse);
}
/**
* 计算调休时长
* 计算调休时长,请假时长
*/
private Long computeTime(Date startTime,Date endTime) throws Exception{
Config config = configDao.findAll().get(0);
String workTime = config.getWorkTime();//上班时间
String afterWorkTime = config.getAfterWorkTime();//下班时间
SimpleDateFormat sdf5 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd "+workTime);
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd " + afterWorkTime);
SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
Calendar calendar = Calendar.getInstance();
Calendar calendar1 = Calendar.getInstance();
String format = sdf.format(startTime);
Date parse = sdf.parse(format);
Date parse = sdf5.parse(format);
String format1 = sdf2.format(startTime);
Date parse1 = sdf2.parse(format1);
Date parse1 = sdf5.parse(format1);
calendar1.setTime(parse1);
calendar.setTime(parse);//设置上班时间
String format2 = sdf3.format(startTime);
String format3 = sdf3.format(endTime);
long hours = 0;
long hour = 60 * 1000 * 60;
if(startTime.before(calendar.getTime())){
if(format2.equals(format3)){
Date leaveWork = calendar1.getTime();
if(endTime.before(leaveWork)){
long miSecond = endTime.getTime() - calendar.getTime().getTime();
if(miSecond%hour==0){
hours = miSecond / hour;
String format4 = sdf4.format(calendar.getTime());
Date parse2 = sdf4.parse(format4);
Day day = dayDao.findByDate(parse2);
if(day!=null&&day.getStatus().equals("0")){
Date leaveWork = calendar1.getTime();
if(endTime.before(leaveWork)){
long miSecond = endTime.getTime() - calendar.getTime().getTime();
if(miSecond%hour==0){
hours = miSecond / hour;
}else{
hours = miSecond / hour + 1;
}
}else{
hours = miSecond / hour + 1;
hours = 8;
}
}else{
hours = 8;
}
}else{
hours = 8;
String format4 = sdf4.format(startTime);
Date parse2 = sdf4.parse(format4);
Day day = dayDao.findByDate(parse2);
if(day!=null&&day.getStatus().equals("0")){
hours = 8;
}else{
hours = 0;
}
while (true){
calendar.add(Calendar.DATE,1);
calendar1.add(Calendar.DATE,1);
String format5 = sdf4.format(calendar.getTime());
Date parse3 = sdf4.parse(format5);
Day day1 = dayDao.findByDate(parse3);
if(day1!=null&&day1.getStatus().equals("0")){
calendar.add(Calendar.DATE,1);
calendar1.add(Calendar.DATE,1);
Date leaveWork = calendar1.getTime();
Date startWorkTime = calendar.getTime();
if(endTime.before(startWorkTime)){
return hours;
}else{
if(endTime.before(leaveWork)){
long miSecond = endTime.getTime() - calendar.getTime().getTime();
if(miSecond%hour==0){
hours = miSecond / hour + hours;
}else{
hours = miSecond / hour + 1 + hours;
}
return hours;
}else{
hours += 8;
}
}
}
}
}
}else{
if(format2.equals(format3)){
String format4 = sdf4.format(calendar.getTime());
Date parse2 = sdf4.parse(format4);
Day day = dayDao.findByDate(parse2);
if(day!=null&&day.getStatus().equals("0")){
Date leaveWork = calendar1.getTime();
Date startWorkTime = calendar.getTime();
if(endTime.before(startWorkTime)){
return hours;
if(endTime.before(leaveWork)){
long miSecond = endTime.getTime() - startTime.getTime();
if(miSecond%hour==0){
hours = miSecond / hour;
}else{
hours = miSecond / hour + 1;
}
}else{
if(endTime.before(leaveWork)){
long miSecond = endTime.getTime() - calendar.getTime().getTime();
if(miSecond%hour==0){
hours = miSecond / hour + hours;
long miSecond = leaveWork.getTime() - startTime.getTime();
if(miSecond%hour==0){
hours = miSecond / hour;
}else{
hours = miSecond / hour + 1;
}
}
}
}else{
String format4 = sdf4.format(calendar.getTime());
Date parse2 = sdf4.parse(format4);
Day day = dayDao.findByDate(parse2);
if(day!=null&&day.getStatus().equals("0")){
long miSecond1 = calendar1.getTime().getTime() - startTime.getTime();
if(miSecond1%hour==0){
hours = miSecond1 / hour;
}else{
hours = miSecond1 / hour + 1;
}
}else{
hours = 0;
}
while (true){
String format5 = sdf4.format(calendar.getTime());
Date parse3 = sdf4.parse(format5);
Day day1 = dayDao.findByDate(parse3);
if(day1!=null&&day1.getStatus().equals("0")){
calendar.add(Calendar.DATE,1);
calendar1.add(Calendar.DATE,1);
Date leaveWork = calendar1.getTime();
Date startWorkTime = calendar.getTime();
if(endTime.before(startWorkTime)){
return hours;
}else{
if(endTime.before(leaveWork)){
long miSecond = endTime.getTime() - calendar.getTime().getTime();
if(miSecond%hour==0){
hours = miSecond / hour + hours;
}else{
hours = miSecond / hour + 1 + hours;
}
return hours;
}else{
hours = miSecond / hour + 1 + hours;
hours += 8;
}
}
}
}
}
}
return hours;
}
/**
* 计算调休时长
*/
private Long computeTime2(Date startTime,Date endTime,Config config,List<Day> days) throws Exception{
String workTime = config.getWorkTime();//上班时间
String afterWorkTime = config.getAfterWorkTime();//下班时间
SimpleDateFormat sdf5 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd "+workTime);
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd " + afterWorkTime);
SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
Calendar calendar = Calendar.getInstance();
Calendar calendar1 = Calendar.getInstance();
String format = sdf.format(startTime);
Date parse = sdf5.parse(format);
String format1 = sdf2.format(startTime);
Date parse1 = sdf5.parse(format1);
calendar1.setTime(parse1);
calendar.setTime(parse);//设置上班时间
String format2 = sdf3.format(startTime);
String format3 = sdf3.format(endTime);
long hours = 0;
long hour = 60 * 1000 * 60;
if(startTime.before(calendar.getTime())){
if(format2.equals(format3)){
String format4 = sdf4.format(calendar.getTime());
Date parse2 = sdf4.parse(format4);
Day day = null;
for (Day day1 : days) {
if(day1.getDate().equals(parse2)){
day = day1;
}
}
if(day!=null&&day.getStatus().equals("0")){
Date leaveWork = calendar1.getTime();
if(endTime.before(leaveWork)){
long miSecond = endTime.getTime() - calendar.getTime().getTime();
if(miSecond%hour==0){
hours = miSecond / hour;
}else{
hours += 8;
hours = miSecond / hour + 1;
}
}else{
hours = 8;
}
}
}else{
String format4 = sdf4.format(startTime);
Date parse2 = sdf4.parse(format4);
Day day = null;
for (Day day1 : days) {
if(day1.getDate().equals(parse2)){
day = day1;
}
}
if(day!=null&&day.getStatus().equals("0")){
hours = 8;
}else{
hours = 0;
}
while (true){
calendar.add(Calendar.DATE,1);
calendar1.add(Calendar.DATE,1);
String format5 = sdf4.format(calendar.getTime());
Date parse3 = sdf4.parse(format5);
Day day1 = null;
for (Day day2 : days) {
if(day2.getDate().equals(parse3)){
day1 = day2;
}
}
if(day1!=null&&day1.getStatus().equals("0")){
Date leaveWork = calendar1.getTime();
Date startWorkTime = calendar.getTime();
if(endTime.before(startWorkTime)){
return hours;
}else{
if(endTime.before(leaveWork)){
long miSecond = endTime.getTime() - calendar.getTime().getTime();
if(miSecond%hour==0){
hours = miSecond / hour + hours;
}else{
hours = miSecond / hour + 1 + hours;
}
return hours;
}else{
hours += 8;
}
}
}
}
}
}else{
if(format2.equals(format3)){
Date leaveWork = calendar1.getTime();
if(endTime.before(leaveWork)){
long miSecond = endTime.getTime() - startTime.getTime();
if(miSecond%hour==0){
hours = miSecond / hour;
String format4 = sdf4.format(calendar.getTime());
Date parse2 = sdf4.parse(format4);
Day day = null;
for (Day day1 : days) {
if(day1.getDate().equals(parse2)){
day = day1;
}
}
if(day!=null&&day.getStatus().equals("0")){
Date leaveWork = calendar1.getTime();
if(endTime.before(leaveWork)){
long miSecond = endTime.getTime() - startTime.getTime();
if(miSecond%hour==0){
hours = miSecond / hour;
}else{
hours = miSecond / hour + 1;
}
}else{
hours = miSecond / hour + 1;
long miSecond = leaveWork.getTime() - startTime.getTime();
if(miSecond%hour==0){
hours = miSecond / hour;
}else{
hours = miSecond / hour + 1;
}
}
}else{
long miSecond = leaveWork.getTime() - startTime.getTime();
if(miSecond%hour==0){
hours = miSecond / hour;
}
}else{
String format4 = sdf4.format(calendar.getTime());
Date parse2 = sdf4.parse(format4);
Day day = null;
for (Day day1 : days) {
if(day1.getDate().equals(parse2)){
day = day1;
}
}
if(day!=null&&day.getStatus().equals("0")){
long miSecond1 = calendar1.getTime().getTime() - startTime.getTime();
if(miSecond1%hour==0){
hours = miSecond1 / hour;
}else{
hours = miSecond / hour + 1;
hours = miSecond1 / hour + 1;
}
}else{
hours = 0;
}
while (true){
calendar.add(Calendar.DATE,1);
calendar1.add(Calendar.DATE,1);
String format5 = sdf4.format(calendar.getTime());
Date parse3 = sdf4.parse(format5);
Day day1 = null;
for (Day day2 : days) {
if(day2.getDate().equals(parse3)){
day1 = day2;
}
}
if(day1!=null&&day1.getStatus().equals("0")){
Date leaveWork = calendar1.getTime();
Date startWorkTime = calendar.getTime();
if(endTime.before(startWorkTime)){
return hours;
}else{
if(endTime.before(leaveWork)){
long miSecond = endTime.getTime() - calendar.getTime().getTime();
if(miSecond%hour==0){
hours = miSecond / hour + hours;
}else{
hours = miSecond / hour + 1 + hours;
}
return hours;
}else{
hours += 8;
}
}
}
}
}
}
return null;
return hours;
}
}
......@@ -5,6 +5,8 @@ import com.zjty.tynotes.attendance.entity.AttendanceDetails;
import com.zjty.tynotes.attendance.entity.vo.UserAttenVo;
import com.zjty.tynotes.attendance.entity.vo.request.AttenRequest;
import com.zjty.tynotes.attendance.service.AttendanceDetailsService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -19,6 +21,7 @@ import java.util.List;
*/
@Service
public class AttendanceDetailsServiceImpl implements AttendanceDetailsService {
private static final Logger logger = LoggerFactory.getLogger(AttendanceDetailsServiceImpl.class);
@Autowired
private AttendanceDetailsDao attendanceDetailsDao;
......@@ -62,29 +65,29 @@ public class AttendanceDetailsServiceImpl implements AttendanceDetailsService {
float sickLeaveDay = 0;
float outSideBusinessDay = 0;
for (AttendanceDetails attendanceDetails1 : attendanceDetails) {
averageWorkHours += attendanceDetails1.getAverageWorkHours();
attendanceDay += attendanceDetails1.getAttendanceDay();
realAttendanceDay += attendanceDetails1.getRealAttendanceDay();
lateDay += attendanceDetails1.getLateDay();
leaveEarlyDay += attendanceDetails1.getLeaveEarlyDay();
lessCard += attendanceDetails1.getLessCard();
absenteeismDay += attendanceDetails1.getAbsenteeismDay();
workOverHours += attendanceDetails1.getWorkOverHours();
paidLeaveDay += attendanceDetails1.getPaidLeaveDay();
sickLeaveDay += attendanceDetails1.getSickLeaveDay();
outSideBusinessDay += attendanceDetails1.getOutSideBusinessDay();
// averageWorkHours += attendanceDetails1.getAverageWorkHours();
// attendanceDay += attendanceDetails1.getAttendanceDay();
// realAttendanceDay += attendanceDetails1.getRealAttendanceDay();
// lateDay += attendanceDetails1.getLateDay();
// leaveEarlyDay += attendanceDetails1.getLeaveEarlyDay();
// lessCard += attendanceDetails1.getLessCard();
// absenteeismDay += attendanceDetails1.getAbsenteeismDay();
// workOverHours += attendanceDetails1.getWorkOverHours();
// paidLeaveDay += attendanceDetails1.getPaidLeaveDay();
// sickLeaveDay += attendanceDetails1.getSickLeaveDay();
// outSideBusinessDay += attendanceDetails1.getOutSideBusinessDay();
}
userAttenVo.setAverageWorkHours(averageWorkHours);
userAttenVo.setAttendanceDay(attendanceDay);
userAttenVo.setRealAttendanceDay(realAttendanceDay);
userAttenVo.setLateDay(lateDay);
userAttenVo.setLeaveEarlyDay(leaveEarlyDay);
userAttenVo.setLessCard(lessCard);
userAttenVo.setAbsenteeismDay(absenteeismDay);
userAttenVo.setWorkOverHours(workOverHours);
userAttenVo.setPaidLeaveDay(paidLeaveDay);
userAttenVo.setSickLeaveDay(sickLeaveDay);
userAttenVo.setOutSideBusinessDay(outSideBusinessDay);
// userAttenVo.setAverageWorkHours(averageWorkHours);
// userAttenVo.setAttendanceDay(attendanceDay);
// userAttenVo.setRealAttendanceDay(realAttendanceDay);
// userAttenVo.setLateDay(lateDay);
// userAttenVo.setLeaveEarlyDay(leaveEarlyDay);
// userAttenVo.setLessCard(lessCard);
// userAttenVo.setAbsenteeismDay(absenteeismDay);
// userAttenVo.setWorkOverHours(workOverHours);
// userAttenVo.setPaidLeaveDay(paidLeaveDay);
// userAttenVo.setSickLeaveDay(sickLeaveDay);
// userAttenVo.setOutSideBusinessDay(outSideBusinessDay);
userAttenVo.setName("");
return userAttenVo;
} catch (ParseException e) {
......
......@@ -9,6 +9,11 @@ import com.zjty.tynotes.attendance.dao.CardResultDao;
import com.zjty.tynotes.attendance.dao.DingUserDao;
import com.zjty.tynotes.attendance.entity.CardResult;
import com.zjty.tynotes.attendance.entity.DingUser;
import com.zjty.tynotes.pas.dao.ConfigDao;
import com.zjty.tynotes.pas.dao.DayDao;
import com.zjty.tynotes.pas.dao.PasUserDao;
import com.zjty.tynotes.pas.entity.Day;
import com.zjty.tynotes.pas.entity.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -37,12 +42,25 @@ public class CardTask {
private DingUserDao dingUserDao;
@Autowired
private CardResultDao cardResultDao;
@Autowired
private DayDao dayDao;
@Autowired
private PasUserDao pasUserDao;
/**
* 定时任务,定时获取打卡信息
* 定时任务,定时获取打卡信息.计算前天的个人考勤信息情况
*/
@Scheduled(cron = "0 59 23 * * ? ")
public List<CardResult> getCardDetails(){
List<User> users = pasUserDao.findAll();
List<User> userList = new ArrayList<>();
if(users!=null){
users.forEach(user -> {
if(!user.getUsername().equals("root")){
userList.add(user);
}
});
}
List<CardResult> cardResults = new ArrayList<>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
......@@ -52,7 +70,7 @@ public class CardTask {
Date time = calendar.getTime();
String startTime = sdf.format(time);
String endTime = sdf2.format(new Date());
String endTime = sdf.format(new Date());
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/attendance/list");
OapiAttendanceListRequest request = new OapiAttendanceListRequest();
......@@ -85,6 +103,7 @@ public class CardTask {
});
}
List<CardResult> cardResults1 = cardResultDao.saveAll(cardResults);
computerPersonAttenDanceDay(startTime,endTime,userList,cardResults1);
return cardResults1;
}
} catch (ApiException e) {
......@@ -93,12 +112,76 @@ public class CardTask {
return null;
}
private void computerPersonAttenDanceDay(String startTime, String endTime, List<User> userList, List<CardResult> cardResults1) {
if(userList!=null){
userList.forEach(user -> {
if(cardResults1!=null){
List<CardResult> cardResults = new ArrayList<>();
cardResults1.forEach(cardResult -> {
String userId = cardResult.getUserId();
if(user.getId().equals(userId)){
cardResults.add(cardResult);
}
});
cardResults.forEach(cardResult -> {
});
}
});
}
}
/**
* 定时任务,定时获取打卡信息
* 定时任务,定时进行运算
*/
@Scheduled(cron = "0 59 23 * * ? ")
public void calculate(){
@Scheduled(cron = "0/30 * * * * ? ")
public void calculate() throws Exception{
int attendanceDay = 0;//应出勤天数
int averageWorkHours = 0;//平均工时
int realAttendanceDay = 0;//实际出勤天数
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String format = sdf.format(new Date());
Date parse = sdf.parse(format);
//计算这个月的应出勤天数
calendar.set(Calendar.DAY_OF_MONTH,1);
Date startTime = calendar.getTime();
calendar.add(Calendar.MONTH,1);
calendar.set(Calendar.DAY_OF_MONTH,0);
Date endTime = calendar.getTime();
List<Day> days = dayDao.findAllByStatusAndDateBetween("0", startTime, endTime);
if(days!=null){
attendanceDay = days.size();
}
List<User> users = pasUserDao.findAll();
List<User> userList = new ArrayList<>();
if(users!=null){
users.forEach(user -> {
if(!user.getUsername().equals("root")){
userList.add(user);
List<CardResult> cardResults = cardResultDao.findAllByUserIdAndUserCheckTimeBetween(user.getId(), startTime, endTime);
}
});
}
}
public static void main(String[] args) throws Exception{
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// Date date = new Date();
String date = "2020-03-29 11:11:11";
String format = sdf.format(new Date());
//计算这个月的应出勤天数
Date parse = sdf.parse(date);
calendar.setTime(parse);
calendar.set(Calendar.DAY_OF_MONTH,1);
Date time = calendar.getTime();
System.out.println(time);
calendar.add(Calendar.MONTH,1);
calendar.set(Calendar.DAY_OF_MONTH,0);
Date time1 = calendar.getTime();
System.out.println("time1:"+time1);
}
}
package com.zjty.tynotes.pas.controller;
import com.zjty.tynotes.misc.config.AutoDocument;
import com.zjty.tynotes.pas.dao.AuthorityDao;
import com.zjty.tynotes.pas.dao.DayDao;
import com.zjty.tynotes.pas.dao.RoleAuthorityDao;
import com.zjty.tynotes.pas.dao.RoleDao;
import com.zjty.tynotes.pas.entity.Authority;
import com.zjty.tynotes.pas.entity.Day;
import com.zjty.tynotes.pas.entity.Role;
import com.zjty.tynotes.pas.entity.RoleAuthority;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
* @Author gwj
* @create 2020/4/1 10:56
*/
@Api(tags = "用户管理权限管理模块", protocols = "http")
@RestController
@RequestMapping("/pas/user")
@AutoDocument
public class TestController {
@Autowired
private DayDao dayDao;
@Autowired
private AuthorityDao authorityDao;
@Autowired
private RoleDao roleDao;
@Autowired
private RoleAuthorityDao roleAuthorityDao;
@GetMapping("/test")
public void calculate() throws Exception{
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String format = sdf.format(new Date());
Date parse = sdf.parse(format);
//计算这个月的应出勤天数
calendar.set(Calendar.DAY_OF_MONTH,1);
Date startTime = calendar.getTime();
calendar.add(Calendar.MONTH,1);
calendar.set(Calendar.DAY_OF_MONTH,1);
Date endTime = calendar.getTime();
List<Day> days = dayDao.findAllByStatusAndDateBetween("0", startTime, endTime);
if(days!=null){
System.out.println(days.size());
}
}
@GetMapping("/test")
public void addAuthority() throws Exception{
List<String> authorityName = new ArrayList<>();
authorityName.add("用户管理");
authorityName.add("权限管理");
authorityName.add("部门管理");
authorityName.add("考勤管理");
authorityName.add("角色管理");
List<Authority> authorities = authorityDao.findAllByNameIn(authorityName);
Role role = roleDao.findByName("管理员");
List<RoleAuthority> roleAuthorities = new ArrayList<>();
if(authorities!=null){
authorities.forEach(authority->{
RoleAuthority roleAuthority = new RoleAuthority(null,role.getId(),authority.getId());
roleAuthorities.add(roleAuthority);
});
}
roleAuthorityDao.saveAll(roleAuthorities);
}
}
......@@ -20,4 +20,6 @@ public interface RoleDao extends MongoRepository<Role, String> {
Role findAllByName(String name);
void deleteByName(String name);
Role findByName(String name);
}
......@@ -361,6 +361,7 @@ public class UserServiceImpl implements IUserService {
}
user.setRoles(roles);
}
return users;
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论