提交 10d26492 authored 作者: gongwenjie's avatar gongwenjie

Merge branch 'master' of git.yfzx.zjtys.com.cn:zjm/notes2.0

# Conflicts: # notes-attendance/src/main/java/com/zjty/tynotes/attendance/controller/AttendanceController.java
上级 3b1d11fd
...@@ -2,7 +2,11 @@ package com.zjty.tynotes.attendance.controller; ...@@ -2,7 +2,11 @@ package com.zjty.tynotes.attendance.controller;
import com.dingtalk.api.DefaultDingTalkClient; import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient; import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiAttendanceListRecordRequest;
import com.dingtalk.api.request.OapiAttendanceListRequest;
import com.dingtalk.api.request.OapiUserGetRequest; import com.dingtalk.api.request.OapiUserGetRequest;
import com.dingtalk.api.response.OapiAttendanceListRecordResponse;
import com.dingtalk.api.response.OapiAttendanceListResponse;
import com.dingtalk.api.response.OapiDepartmentListResponse; import com.dingtalk.api.response.OapiDepartmentListResponse;
import com.dingtalk.api.response.OapiUserGetResponse; import com.dingtalk.api.response.OapiUserGetResponse;
import com.taobao.api.ApiException; import com.taobao.api.ApiException;
...@@ -58,8 +62,30 @@ public class DingTestController { ...@@ -58,8 +62,30 @@ public class DingTestController {
@GetMapping("/card") @GetMapping("/card")
public Object card(){ public Object card(){
List<CardResult> cardDetails = cardTask.getCardDetails(); myInit.getToken();
return cardDetails; myInit.getDepartmentList();
myInit.getUserList();
List<String> userIds = myInit.userIds;
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/attendance/listRecord");
OapiAttendanceListRecordRequest request = new OapiAttendanceListRecordRequest();
request.setCheckDateFrom("2020-04-04 00:00:00");
request.setCheckDateTo("2020-04-10 00:00:00");
request.setUserIds(userIds);
try {
OapiAttendanceListRecordResponse execute = client.execute(request,myInit.token);
List<OapiAttendanceListRecordResponse.Recordresult> recordresult = execute.getRecordresult();
return recordresult;
} catch (ApiException e) {
e.printStackTrace();
}
return null;
} }
@GetMapping("/score")
public Object score(){
String month = "2020-04";
Double aDouble = cardTask.calcuteScore(month);
return aDouble;
}
} }
...@@ -18,11 +18,11 @@ public interface ApprovalInformationDao extends MongoRepository<ApprovalInformat ...@@ -18,11 +18,11 @@ public interface ApprovalInformationDao extends MongoRepository<ApprovalInformat
List<ApprovalInformation> findAllByStatusIn(List<String> statusList); List<ApprovalInformation> findAllByStatusIn(List<String> statusList);
ApprovalInformation findByUserIdAndStatusAndApprovalType(String userId, String status,String type);
List<ApprovalInformation> findAllByUserIdAndLeaveStartTimeLessThanEqualAndLeaveEndTimeGreaterThanEqualAndStatus(String userId, Date startTime ,Date endTime,String status);
ApprovalInformation findAllByUserIdAndLeaveStartTimeLessThanEqualAndLeaveEndTimeGreaterThanEqualAndApprovalTypeIn(String userId, Date startTime ,Date endTime,List<String> type); ApprovalInformation findAllByUserIdAndLeaveStartTimeBeforeAndLeaveEndTimeBetweenAndApprovalTypeAndStatus(String userId, Date startTime,Date startTime1,Date endTime,String type,String status);
ApprovalInformation findAllByUserIdAndLeaveStartTimeBeforeAndLeaveEndTimeBetweenAndApprovalTypeIn(String userId, Date startTime,Date startTime1,Date endTime,List<String> type); ApprovalInformation findAllByUserIdAndLeaveStartTimeBetweenAndLeaveEndTimeAfterAndApprovalTypeAndStatus(String userId, Date startTime,Date endTime,Date endTime1,String type,String status);
ApprovalInformation findAllByUserIdAndLeaveStartTimeBetweenAndLeaveEndTimeAfterAndApprovalTypeIn(String userId, Date startTime,Date endTime,Date endTime1,List<String> type);
} }
...@@ -41,9 +41,15 @@ public class AttendanceDetails { ...@@ -41,9 +41,15 @@ public class AttendanceDetails {
@ApiModelProperty(value = "是否迟到0为迟到/1为未迟到",example = "1") @ApiModelProperty(value = "是否迟到0为迟到/1为未迟到",example = "1")
Integer isLateDay; Integer isLateDay;
@ApiModelProperty(value = "迟到等级0轻(15分钟以内)/1较轻(1小时以内)/2较严重(4小时以内)/3严重(4小时以上)",example = "1")
Integer lateStatus;
@ApiModelProperty(value = "是否早退0为早退/1为未早退",example = "1") @ApiModelProperty(value = "是否早退0为早退/1为未早退",example = "1")
Integer isLeaveEarlyDay; Integer isLeaveEarlyDay;
@ApiModelProperty(value = "早退等级0轻/1较轻/2较严重/3严重",example = "1")
Integer earlyStatus;
@ApiModelProperty(value = "缺卡次数",example = "2") @ApiModelProperty(value = "缺卡次数",example = "2")
Integer lessCard; Integer lessCard;
...@@ -59,16 +65,22 @@ public class AttendanceDetails { ...@@ -59,16 +65,22 @@ public class AttendanceDetails {
@ApiModelProperty(value = "加班时长",example = "4") @ApiModelProperty(value = "加班时长",example = "4")
Integer workOverHours; Integer workOverHours;
// @ApiModelProperty(value = "是否调休0为调休/1为未调休",example = "1") @ApiModelProperty(value = "是否调休0为调休/1为未调休",example = "1")
// Integer isPaidLeaveDay; Integer isPaidLeaveDay;
//
// @ApiModelProperty(value = "调休时长",example = "1") @ApiModelProperty(value = "调休时长",example = "1")
// Float paidLeaveDay; Float paidLeaveDay;
@ApiModelProperty(value = "是否事假0为事假/1为未事假",example = "1")
Integer isThingLeaveDay;
@ApiModelProperty(value = "事假天数",example = "1")
Float thingLeaveDay;
@ApiModelProperty(value = "是否请假0为请假/1为未请假",example = "1") @ApiModelProperty(value = "是否病假0为病假/1为未病假",example = "1")
Integer isSickLeaveDay; Integer isSickLeaveDay;
@ApiModelProperty(value = "假时长",example = "1") @ApiModelProperty(value = "假时长",example = "1")
Float sickLeaveDay; Float sickLeaveDay;
@ApiModelProperty(value = "是否公出",example = "1") @ApiModelProperty(value = "是否公出",example = "1")
...@@ -87,9 +99,12 @@ public class AttendanceDetails { ...@@ -87,9 +99,12 @@ public class AttendanceDetails {
Date date; Date date;
public AttendanceDetails() { public AttendanceDetails() {
thingLeaveDay = 0f;
paidLeaveDay = 0f;
workOverHours = 0; workOverHours = 0;
outSideBusinessDay = 0f; outSideBusinessDay = 0f;
outWorkDay = 0f; outWorkDay = 0f;
sickLeaveDay = 0f; sickLeaveDay = 0f;
absenteeismDay = 0f;
} }
} }
...@@ -276,7 +276,7 @@ public class ApprovalInformationServiceImpl implements ApprovalInformationServic ...@@ -276,7 +276,7 @@ public class ApprovalInformationServiceImpl implements ApprovalInformationServic
/** /**
* 计算调休时长,请假时长 * 计算调休时长,请假时长
*/ */
private Long computeTime(Date startTime,Date endTime) throws Exception{ public Long computeTime(Date startTime,Date endTime) throws Exception{
Config config = configDao.findAll().get(0); Config config = configDao.findAll().get(0);
String workTime = config.getWorkTime();//上班时间 String workTime = config.getWorkTime();//上班时间
String afterWorkTime = config.getAfterWorkTime();//下班时间 String afterWorkTime = config.getAfterWorkTime();//下班时间
......
...@@ -5,15 +5,9 @@ import com.dingtalk.api.DingTalkClient; ...@@ -5,15 +5,9 @@ import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiAttendanceListRequest; import com.dingtalk.api.request.OapiAttendanceListRequest;
import com.dingtalk.api.response.OapiAttendanceListResponse; import com.dingtalk.api.response.OapiAttendanceListResponse;
import com.taobao.api.ApiException; import com.taobao.api.ApiException;
import com.zjty.tynotes.attendance.dao.ApprovalInformationDao; import com.zjty.tynotes.attendance.dao.*;
import com.zjty.tynotes.attendance.dao.AttendanceDetailsDao; import com.zjty.tynotes.attendance.entity.*;
import com.zjty.tynotes.attendance.dao.CardResultDao; import com.zjty.tynotes.attendance.service.impl.ApprovalInformationServiceImpl;
import com.zjty.tynotes.attendance.dao.DingUserDao;
import com.zjty.tynotes.attendance.entity.ApprovalInformation;
import com.zjty.tynotes.attendance.entity.AttendanceDetails;
import com.zjty.tynotes.attendance.entity.CardResult;
import com.zjty.tynotes.attendance.entity.DingUser;
import com.zjty.tynotes.attendance.service.ApprovalInformationService;
import com.zjty.tynotes.pas.dao.ConfigDao; import com.zjty.tynotes.pas.dao.ConfigDao;
import com.zjty.tynotes.pas.dao.DayDao; import com.zjty.tynotes.pas.dao.DayDao;
import com.zjty.tynotes.pas.dao.PasUserDao; import com.zjty.tynotes.pas.dao.PasUserDao;
...@@ -31,6 +25,7 @@ import javax.validation.constraints.NotEmpty; ...@@ -31,6 +25,7 @@ import javax.validation.constraints.NotEmpty;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
/** /**
* @Author gwj * @Author gwj
...@@ -60,6 +55,10 @@ public class CardTask { ...@@ -60,6 +55,10 @@ public class CardTask {
private ConfigDao configDao; private ConfigDao configDao;
@Autowired @Autowired
private AttendanceDetailsDao attendanceDetailsDao; private AttendanceDetailsDao attendanceDetailsDao;
@Autowired
private UserOverWorkDao userOverWorkDao;
@Autowired
private ApprovalInformationServiceImpl approvalInformationService;
/** /**
* 定时任务,定时获取打卡信息.计算前天的个人考勤信息情况 * 定时任务,定时获取打卡信息.计算前天的个人考勤信息情况
...@@ -185,65 +184,179 @@ public class CardTask { ...@@ -185,65 +184,179 @@ public class CardTask {
Date date1 = sdf4.parse(format1); Date date1 = sdf4.parse(format1);
System.out.println(date); System.out.println(date);
System.out.println(date1); System.out.println(date1);
List<ApprovalInformation> all = approvalInformationDao.findAll(); // List<ApprovalInformation> all = approvalInformationDao.findAll();
System.out.println("startTime"+all.get(0).getLeaveStartTime()+"\n"+"endTime"+all.get(0).getLeaveEndTime()); // System.out.println("startTime"+all.get(0).getLeaveStartTime()+"\n"+"endTime"+all.get(0).getLeaveEndTime());
ApprovalInformation approvalInformation = approvalInformationDao.findAllByUserIdAndLeaveStartTimeLessThanEqualAndLeaveEndTimeGreaterThanEqualAndApprovalTypeIn(user.getId(), date, date1,type1); Day day = dayDao.findByDate(parse);
List<ApprovalInformation> compute = compute(approvalInformation, attendanceDetails, user.getId(), date, date1, type1); if(day!=null){
ApprovalInformation approvalInformation1 = approvalInformationDao.findAllByUserIdAndLeaveStartTimeLessThanEqualAndLeaveEndTimeGreaterThanEqualAndApprovalTypeIn(user.getId(), date,date1,type2); if(day.getStatus()!=null && day.getStatus().equals("0")){
List<ApprovalInformation> compute1 = compute(approvalInformation1, attendanceDetails, user.getId(), date, date1, type2); List<ApprovalInformation> approvalInformation = approvalInformationDao.findAllByUserIdAndLeaveStartTimeLessThanEqualAndLeaveEndTimeGreaterThanEqualAndStatus(user.getId(), date, date1,"1");
ApprovalInformation approvalInformation2 = approvalInformationDao.findAllByUserIdAndLeaveStartTimeLessThanEqualAndLeaveEndTimeGreaterThanEqualAndApprovalTypeIn(user.getId(), date,date1,type3); List<ApprovalInformation> approvalInformationList = new ArrayList<>();
List<ApprovalInformation> compute2 = compute(approvalInformation2, attendanceDetails, user.getId(), date, date1, type3); if(approvalInformation!=null){
approvalInformationList.forEach(approvalInformation1 -> {
attendanceDetails.setUserId(user.getId()); List<ApprovalInformation> compute = compute(approvalInformation1, attendanceDetails, user.getId(), date, date1);
if(cardResults1!=null){ if(compute!=null){
List<CardResult> cardResults = new ArrayList<>(); approvalInformationList.addAll(compute);
cardResults1.forEach(cardResult -> { }
String userId = cardResult.getUserId(); });
if(user.getId().equals(userId)){
cardResults.add(cardResult);
// if(!checkType.contains("OnDuty")&&("OnDuty").equals(cardResult.getCheckType())){
// checkType.add("OnDuty");
// }else if(!checkType.contains("OffDuty")&&("OffDuty").equals(cardResult.getCheckType())){
// checkType.add("OffDuty");
// }
}
});
if(cardResults.size()>=2){
attendanceDetails.setLessCard(0);
}else if(cardResults.size()==1){
attendanceDetails.setLessCard(1);
if(approvalInformation == null && approvalInformation1==null&&approvalInformation2==null
&&compute==null&&compute1==null&&compute2==null){
attendanceDetails.setIsAbsenteeismDay(0);
attendanceDetails.setAbsenteeismDay(0.5f);
}
}else{
attendanceDetails.setLessCard(2);
if(approvalInformation == null && approvalInformation1==null&&approvalInformation2==null
&&compute==null&&compute1==null&&compute2==null){
attendanceDetails.setIsAbsenteeismDay(0);
attendanceDetails.setAbsenteeismDay(1f);
} }
}
cardResults.forEach(cardResult -> { ApprovalInformation approvalInformation1 = approvalInformationDao.findByUserIdAndStatusAndApprovalType(user.getId(), "1", "加班");
String checkType = cardResult.getCheckType(); attendanceDetails.setUserId(user.getId());
String timeResult = cardResult.getTimeResult(); if(cardResults1!=null){
if(("OnDuty").equals(checkType)){ List<CardResult> cardResults = new ArrayList<>();
if("Late".equals(timeResult)||"SeriousLate".equals(timeResult)){ cardResults1.forEach(cardResult -> {
attendanceDetails.setIsLateDay(0); String userId = cardResult.getUserId();
if(user.getId().equals(userId)){
cardResults.add(cardResult);
}
});
if(cardResults.size()>=2){
attendanceDetails.setLessCard(0);
if(approvalInformation1!=null){
cardResults.forEach(cardResult -> {
if(cardResult.getCheckType()!=null && cardResult.getCheckType().equals("OffDuty")){
Long l = cardResult.getUserCheckTime().getTime() - date1.getTime();
Long hour = 60*60*1000L;
Long x = 0L;
x = l/hour;
if(x>=4){
x = 4L;
}else if(x<=0){
x = 0L;
}
attendanceDetails.setIsWorkOverHours(0);
attendanceDetails.setWorkOverHours(x.intValue());
}
});
}
cardResults.forEach(cardResult -> {
@NotEmpty(message = "迟到次数时间规定") String lateNumOfFixedTime = config.getLateNumOfFixedTime();
@NotEmpty(message = "弹性迟到1时间") String lateWorkTimeOne = config.getLateWorkTimeOne();
@NotEmpty(message = "弹性迟到2时间") String lateWorkTimeTwo = config.getLateWorkTimeTwo();
Long real = cardResult.getUserCheckTime().getTime();
if(cardResult.getCheckType()!=null&&cardResult.getCheckType().equals("OnDuty")){
Long l = date.getTime();
Long l1 = date.getTime()+Integer.parseInt(lateNumOfFixedTime)*1000*60;
Long l2 = date.getTime()+Integer.parseInt(lateWorkTimeOne)*1000*60*60;
Long l3 = date.getTime()+Integer.parseInt(lateWorkTimeTwo)*1000*60*60;
if(real>l&&real<=l1){
attendanceDetails.setIsLateDay(0);
attendanceDetails.setLateStatus(0);
}else if(real>l1&&real<=l2){
attendanceDetails.setIsLateDay(0);
attendanceDetails.setLateStatus(1);
}else if(real>l2&&real<=l3){
attendanceDetails.setIsLateDay(0);
attendanceDetails.setLateStatus(2);
attendanceDetails.setIsAbsenteeismDay(0);
attendanceDetails.setAbsenteeismDay(0.5f);
}else if(real>l3){
if(attendanceDetails.getLateStatus()!=null&&!attendanceDetails.getLateStatus().equals(3)){
attendanceDetails.setIsLateDay(0);
attendanceDetails.setLateStatus(3);
attendanceDetails.setIsAbsenteeismDay(0);
attendanceDetails.setAbsenteeismDay(1f);
}
}
}else if(cardResult.getCheckType()!=null&&cardResult.getCheckType().equals("OffDuty")){
Long l = date1.getTime();
Long l1 = date1.getTime()-Integer.parseInt(lateNumOfFixedTime)*1000*60;
Long l2 = date1.getTime()-Integer.parseInt(lateWorkTimeOne)*1000*60*60;
Long l3 = date1.getTime()-Integer.parseInt(lateWorkTimeTwo)*1000*60*60;
if(real<l&&real>=l1){
attendanceDetails.setIsLeaveEarlyDay(0);
attendanceDetails.setEarlyStatus(0);;
}else if(real<l1&&real>=l2){
attendanceDetails.setIsLeaveEarlyDay(0);
attendanceDetails.setEarlyStatus(1);
}else if(real<l2&&real>=l3){
attendanceDetails.setIsLeaveEarlyDay(0);
attendanceDetails.setEarlyStatus(2);
}else if(real<l3){
if(attendanceDetails.getEarlyStatus()!=null&&!attendanceDetails.getEarlyStatus().equals(3)){
attendanceDetails.setIsLeaveEarlyDay(0);
attendanceDetails.setEarlyStatus(3);
}
}
}
});
}else if(cardResults.size()==1){
attendanceDetails.setLessCard(1);
if(approvalInformation == null && (approvalInformationList == null || approvalInformationList.size() ==0)){
attendanceDetails.setIsAbsenteeismDay(0);
attendanceDetails.setAbsenteeismDay(1f);
}
}else{
attendanceDetails.setLessCard(2);
if(approvalInformation == null && (approvalInformationList == null || approvalInformationList.size() ==0)){
attendanceDetails.setIsAbsenteeismDay(0);
attendanceDetails.setAbsenteeismDay(1f);
}
} }
}else if("OffDuty".equals(checkType)){ // cardResults.forEach(cardResult -> {
if("Early".equals(timeResult)||"Absenteeism".equals(timeResult)){ // String checkType = cardResult.getCheckType();
attendanceDetails.setIsLeaveEarlyDay(0); // String timeResult = cardResult.getTimeResult();
// if(("OnDuty").equals(checkType)){
// if("Late".equals(timeResult)||"SeriousLate".equals(timeResult)){
// attendanceDetails.setIsLateDay(0);
// }
// }else if("OffDuty".equals(checkType)){
// if("Early".equals(timeResult)||"Absenteeism".equals(timeResult)){
// attendanceDetails.setIsLeaveEarlyDay(0);
// }
// }
// });
}
}else if(day.getStatus()!=null && day.getStatus().equals("1")
|| day.getStatus()!=null && day.getStatus().equals("2")){
if(cardResults1!=null){
List<CardResult> cardResults = new ArrayList<>();
cardResults1.forEach(cardResult -> {
String userId = cardResult.getUserId();
if(user.getId().equals(userId)){
cardResults.add(cardResult);
}
});
ApprovalInformation approvalInformation1 = approvalInformationDao.findByUserIdAndStatusAndApprovalType(user.getId(), "1", "加班");
if(cardResults.size()>=2){
if(approvalInformation1!=null){
cardResults.forEach(cardResult -> {
if(cardResult.getCheckType()!=null && cardResult.getCheckType().equals("OffDuty")){
Long l = cardResult.getUserCheckTime().getTime() - date1.getTime();
Long hour = 60*60*1000L;
Long x = 0L;
x = l/hour;
if(x>=8){
x = 8L;
}else if(x<=0){
x = 0L;
}
attendanceDetails.setIsWorkOverHours(0);
attendanceDetails.setWorkOverHours(x.intValue());
}
});
}
} }
} }
}); }
} }
} catch (ParseException e) { } catch (ParseException e) {
logger.error(e.getMessage()); logger.error(e.getMessage());
} }
// List<String> checkType = new ArrayList<>(); // List<String> checkType = new ArrayList<>();
if(attendanceDetails.getWorkOverHours()>=0){
UserOverWork userOverWork = userOverWorkDao.findByUserId(user.getId());
try {
Long overWorkHour = userOverWork.getOverWorkHour();
Long timeLeft = overWorkHour + attendanceDetails.getWorkOverHours();
userOverWork.setOverWorkHour(timeLeft);
userOverWorkDao.save(userOverWork);
} catch (Exception e) {
e.printStackTrace();
}
}
attendanceDetailsList.add(attendanceDetails); attendanceDetailsList.add(attendanceDetails);
}); });
attendanceDetailsDao.saveAll(attendanceDetailsList); attendanceDetailsDao.saveAll(attendanceDetailsList);
...@@ -257,75 +370,174 @@ public class CardTask { ...@@ -257,75 +370,174 @@ public class CardTask {
* @param userId * @param userId
* @param date1 * @param date1
* @param date2 * @param date2
* @param types
*/ */
private List<ApprovalInformation> compute(ApprovalInformation approvalInformation,AttendanceDetails attendanceDetails,String userId,Date date1,Date date2,List<String> types){ private List<ApprovalInformation> compute(ApprovalInformation approvalInformation,AttendanceDetails attendanceDetails,String userId,Date date1,Date date2){
List<ApprovalInformation> approvalInformationList = null;
if(approvalInformation.getApprovalType()!=null&&approvalInformation.getApprovalType().equals("公出")){
approvalInformationList = outSideBusinessDay(approvalInformation,
attendanceDetails, userId, date1, date2, approvalInformation.getApprovalType());
}else if(approvalInformation.getApprovalType()!=null&&approvalInformation.getApprovalType().equals("出差")){
approvalInformationList = outWorkDay(approvalInformation,
attendanceDetails, userId, date1, date2, approvalInformation.getApprovalType());
}else if(approvalInformation.getApprovalType()!=null&&approvalInformation.getApprovalType().equals("事假")){
approvalInformationList = sickLeaveDay(approvalInformation,
attendanceDetails, userId, date1, date2, approvalInformation.getApprovalType());
}else if(approvalInformation.getApprovalType()!=null&&approvalInformation.getApprovalType().equals("病假")){
approvalInformationList = sickLeaveDay(approvalInformation,
attendanceDetails, userId, date1, date2, approvalInformation.getApprovalType());
}else if(approvalInformation.getApprovalType()!=null&&approvalInformation.getApprovalType().equals("调休")){
approvalInformationList = paidLeaveDay(approvalInformation,
attendanceDetails, userId, date1, date2, approvalInformation.getApprovalType());
}
return approvalInformationList;
}
/**
* 计算公出
* @throws Exception
*/
private List<ApprovalInformation> outSideBusinessDay(ApprovalInformation approvalInformation,AttendanceDetails attendanceDetails
,String userId,Date date1,Date date2,String type){
List<ApprovalInformation> approvalInformationList = new ArrayList<>(); List<ApprovalInformation> approvalInformationList = new ArrayList<>();
if(types.contains("公出")){ if(approvalInformation!=null){
if(approvalInformation!=null){ attendanceDetails.setIsOutSideBusinessDay(0);
attendanceDetails.setOutSideBusinessDay(1f);
}else{
ApprovalInformation approvalInformation1 = approvalInformationDao.findAllByUserIdAndLeaveStartTimeBeforeAndLeaveEndTimeBetweenAndApprovalTypeAndStatus(userId, date1, date1,date2,type,"1");
ApprovalInformation approvalInformation2 = approvalInformationDao.findAllByUserIdAndLeaveStartTimeBetweenAndLeaveEndTimeAfterAndApprovalTypeAndStatus(userId, date1, date2,date2,type,"1");
if(approvalInformation1!=null){
attendanceDetails.setIsOutSideBusinessDay(0); attendanceDetails.setIsOutSideBusinessDay(0);
attendanceDetails.setOutSideBusinessDay(1f); attendanceDetails.setOutSideBusinessDay(0.5f);
}else{ approvalInformationList.add(approvalInformation1);
ApprovalInformation approvalInformation1 = approvalInformationDao.findAllByUserIdAndLeaveStartTimeBeforeAndLeaveEndTimeBetweenAndApprovalTypeIn(userId, date1, date1,date2,types); }
ApprovalInformation approvalInformation2 = approvalInformationDao.findAllByUserIdAndLeaveStartTimeBetweenAndLeaveEndTimeAfterAndApprovalTypeIn(userId, date1, date2,date2,types); if(approvalInformation2!=null){
if(approvalInformation1!=null){ attendanceDetails.setIsOutSideBusinessDay(0);
attendanceDetails.setIsOutSideBusinessDay(0); if(attendanceDetails.getOutSideBusinessDay()!=null){
attendanceDetails.setOutSideBusinessDay(0.5f); attendanceDetails.setOutSideBusinessDay(attendanceDetails.getOutSideBusinessDay()+0.5f);
approvalInformationList.add(approvalInformation1);
}
if(approvalInformation2!=null){
attendanceDetails.setIsOutSideBusinessDay(0);
if(attendanceDetails.getOutSideBusinessDay()!=null){
attendanceDetails.setOutSideBusinessDay(attendanceDetails.getOutSideBusinessDay()+0.5f);
}
approvalInformationList.add(approvalInformation2);
} }
approvalInformationList.add(approvalInformation2);
}
}
return approvalInformationList;
}
/**
* 计算出差
* @throws Exception
*/
private List<ApprovalInformation> outWorkDay(ApprovalInformation approvalInformation,AttendanceDetails attendanceDetails
,String userId,Date date1,Date date2,String type){
List<ApprovalInformation> approvalInformationList = new ArrayList<>();
if(approvalInformation!=null){
attendanceDetails.setIsOutWorkDay(0);
attendanceDetails.setOutWorkDay(1f);
}else{
ApprovalInformation approvalInformation1 = approvalInformationDao.findAllByUserIdAndLeaveStartTimeBeforeAndLeaveEndTimeBetweenAndApprovalTypeAndStatus(userId, date1, date1,date2,type,"1");
ApprovalInformation approvalInformation2 = approvalInformationDao.findAllByUserIdAndLeaveStartTimeBetweenAndLeaveEndTimeAfterAndApprovalTypeAndStatus(userId, date1, date2,date2,type,"1");
if(approvalInformation1!=null){
attendanceDetails.setIsOutWorkDay(0);
attendanceDetails.setOutWorkDay(0.5f);
approvalInformationList.add(approvalInformation1);
} }
}else if(types.contains("出差")){ if(approvalInformation2!=null){
if(approvalInformation!=null){
attendanceDetails.setIsOutWorkDay(0); attendanceDetails.setIsOutWorkDay(0);
attendanceDetails.setOutWorkDay(1f); if(attendanceDetails.getOutWorkDay()!=null){
}else{ attendanceDetails.setOutWorkDay(attendanceDetails.getOutWorkDay()+0.5f);
ApprovalInformation approvalInformation1 = approvalInformationDao.findAllByUserIdAndLeaveStartTimeBeforeAndLeaveEndTimeBetweenAndApprovalTypeIn(userId, date1, date1,date2,types);
ApprovalInformation approvalInformation2 = approvalInformationDao.findAllByUserIdAndLeaveStartTimeBetweenAndLeaveEndTimeAfterAndApprovalTypeIn(userId, date1, date2,date2,types);
if(approvalInformation1!=null){
attendanceDetails.setIsOutWorkDay(0);
attendanceDetails.setOutWorkDay(0.5f);
approvalInformationList.add(approvalInformation1);
}
if(approvalInformation2!=null){
attendanceDetails.setIsOutWorkDay(0);
if(attendanceDetails.getOutWorkDay()!=null){
attendanceDetails.setOutWorkDay(attendanceDetails.getOutSideBusinessDay()+0.5f);
}
approvalInformationList.add(approvalInformation2);
} }
approvalInformationList.add(approvalInformation2);
}
}
return approvalInformationList;
}
/**
* 计算病假
*/
private List<ApprovalInformation> sickLeaveDay(ApprovalInformation approvalInformation,AttendanceDetails attendanceDetails
,String userId,Date date1,Date date2,String type){
List<ApprovalInformation> approvalInformationList = new ArrayList<>();
if(approvalInformation!=null){
attendanceDetails.setIsSickLeaveDay(0);
attendanceDetails.setSickLeaveDay(1f);
}else{
ApprovalInformation approvalInformation1 = approvalInformationDao.findAllByUserIdAndLeaveStartTimeBeforeAndLeaveEndTimeBetweenAndApprovalTypeAndStatus(userId, date1, date1,date2,type,"1");
ApprovalInformation approvalInformation2 = approvalInformationDao.findAllByUserIdAndLeaveStartTimeBetweenAndLeaveEndTimeAfterAndApprovalTypeAndStatus(userId, date1, date2,date2,type,"1");
if(approvalInformation1!=null){
attendanceDetails.setIsSickLeaveDay(0);
attendanceDetails.setSickLeaveDay(0.5f);
approvalInformationList.add(approvalInformation1);
} }
}else if(types.contains("事假") || types.contains("病假") || types.contains("调休")){ if(approvalInformation2!=null){
if(approvalInformation!=null){
attendanceDetails.setIsSickLeaveDay(0); attendanceDetails.setIsSickLeaveDay(0);
attendanceDetails.setSickLeaveDay(1f); if(attendanceDetails.getSickLeaveDay()!=null){
}else{ attendanceDetails.setSickLeaveDay(attendanceDetails.getSickLeaveDay()+0.5f);
ApprovalInformation approvalInformation1 = approvalInformationDao.findAllByUserIdAndLeaveStartTimeBeforeAndLeaveEndTimeBetweenAndApprovalTypeIn(userId, date1, date1,date2,types);
ApprovalInformation approvalInformation2 = approvalInformationDao.findAllByUserIdAndLeaveStartTimeBetweenAndLeaveEndTimeAfterAndApprovalTypeIn(userId, date1, date2,date2,types);
if(approvalInformation1!=null){
attendanceDetails.setIsSickLeaveDay(0);
attendanceDetails.setSickLeaveDay(0.5f);
approvalInformationList.add(approvalInformation1);
} }
if(approvalInformation2!=null){ approvalInformationList.add(approvalInformation2);
attendanceDetails.setIsSickLeaveDay(0); }
if(attendanceDetails.getSickLeaveDay()!=null){ }
attendanceDetails.setSickLeaveDay(attendanceDetails.getSickLeaveDay()+0.5f); return approvalInformationList;
} }
approvalInformationList.add(approvalInformation2);
/**
* 计算事假
*/
private List<ApprovalInformation> thingLeaveDay(ApprovalInformation approvalInformation,AttendanceDetails attendanceDetails
,String userId,Date date1,Date date2,String type){
List<ApprovalInformation> approvalInformationList = new ArrayList<>();
if(approvalInformation!=null){
attendanceDetails.setIsThingLeaveDay(0);
attendanceDetails.setThingLeaveDay(1f);
}else{
ApprovalInformation approvalInformation1 = approvalInformationDao.findAllByUserIdAndLeaveStartTimeBeforeAndLeaveEndTimeBetweenAndApprovalTypeAndStatus(userId, date1, date1,date2,type,"1");
ApprovalInformation approvalInformation2 = approvalInformationDao.findAllByUserIdAndLeaveStartTimeBetweenAndLeaveEndTimeAfterAndApprovalTypeAndStatus(userId, date1, date2,date2,type,"1");
if(approvalInformation1!=null){
attendanceDetails.setIsThingLeaveDay(0);
attendanceDetails.setThingLeaveDay(0.5f);
approvalInformationList.add(approvalInformation1);
}
if(approvalInformation2!=null){
attendanceDetails.setIsThingLeaveDay(0);
if(attendanceDetails.getIsThingLeaveDay()!=null){
attendanceDetails.setThingLeaveDay(attendanceDetails.getThingLeaveDay()+0.5f);
} }
approvalInformationList.add(approvalInformation2);
} }
} }
return approvalInformationList;
}
/**
* 计算调休
*/
private List<ApprovalInformation> paidLeaveDay(ApprovalInformation approvalInformation,AttendanceDetails attendanceDetails
,String userId,Date date1,Date date2,String type){
List<ApprovalInformation> approvalInformationList = new ArrayList<>();
if(approvalInformation!=null){
attendanceDetails.setIsPaidLeaveDay(0);
attendanceDetails.setPaidLeaveDay(1f);
}else{
ApprovalInformation approvalInformation1 = approvalInformationDao.findAllByUserIdAndLeaveStartTimeBeforeAndLeaveEndTimeBetweenAndApprovalTypeAndStatus(userId, date1, date1,date2,type,"1");
ApprovalInformation approvalInformation2 = approvalInformationDao.findAllByUserIdAndLeaveStartTimeBetweenAndLeaveEndTimeAfterAndApprovalTypeAndStatus(userId, date1, date2,date2,type,"1");
if(approvalInformation1!=null){
attendanceDetails.setIsPaidLeaveDay(0);
attendanceDetails.setPaidLeaveDay(0.5f);
approvalInformationList.add(approvalInformation1);
}
if(approvalInformation2!=null){
attendanceDetails.setIsPaidLeaveDay(0);
if(attendanceDetails.getIsPaidLeaveDay()!=null){
attendanceDetails.setPaidLeaveDay(attendanceDetails.getPaidLeaveDay()+0.5f);
}
approvalInformationList.add(approvalInformation2);
}
}
return approvalInformationList; return approvalInformationList;
} }
/** /**
* 定时任务,定时进行运算 * 定时任务,定时进行运算
*/ */
...@@ -355,28 +567,200 @@ public class CardTask { ...@@ -355,28 +567,200 @@ public class CardTask {
if(!user.getUsername().equals("root")){ if(!user.getUsername().equals("root")){
userList.add(user); userList.add(user);
List<CardResult> cardResults = cardResultDao.findAllByUserIdAndUserCheckTimeBetween(user.getId(), startTime, endTime); List<CardResult> cardResults = cardResultDao.findAllByUserIdAndUserCheckTimeBetween(user.getId(), startTime, endTime);
} }
}); });
} }
} }
public static void main(String[] args) throws Exception{ 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);
// Float aFloat = CardTask.fullScore();
// System.out.println(aFloat);
String month = "2020-04";
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
String format = "2020-04-05 00:00:00";
try {
Date parse = sdf2.parse(format);
calendar.setTime(parse);
calendar.add(Calendar.DATE,-1);
Date date = sdf.parse(month);
System.out.println(calendar.getTime());
} catch (ParseException e) {
e.printStackTrace();
}
}
/**
* 计算个人当月总考勤分
* @return
*/
public Double calcuteScore(String month){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
String userId = "5e86ac92986f2c9064e29b32";
Double fullScore = fullScore(sdf,month);
System.out.println(fullScore);
Double minusScore = getScore(sdf,userId,month);
Double monthScore = fullScore - minusScore;
return monthScore;
// Calendar calendar = Calendar.getInstance();
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
// SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
// String format = sdf2.format(new Date());
// try {
// Date parse = sdf2.parse(format);
// calendar.setTime(parse);
// calendar.add(Calendar.DATE,-1);
// Date time = calendar.getTime();
// String format1 = sdf.format(time);
//
//
//
// } catch (ParseException e) {
// e.printStackTrace();
// }
}
/**
* 计算月基础分
* @return
*/
private Double fullScore(SimpleDateFormat sdf2,String month){
Date parse = null;
try {
parse = sdf2.parse(month);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar calendar = Calendar.getInstance(); 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.setTime(parse);
calendar.set(Calendar.DAY_OF_MONTH,1); calendar.set(Calendar.DAY_OF_MONTH,1);
Date time = calendar.getTime(); Date start = calendar.getTime();
System.out.println(time); calendar.add(Calendar.MONTH,1);
calendar.set(Calendar.DAY_OF_MONTH,0);
Date end = calendar.getTime();
Double monthSocre = 0d;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
try {
Date startTime = sdf.parse(sdf.format(start));
Date endTime = sdf.parse(sdf.format(end));
// List<Day> days = dayDao.findAllByStatusAndDateGreaterThanEqual("0", startTime);
// List<Day> days2 = dayDao.findAllByStatusAndDateLessThanEqual("0", endTime);
Day time = dayDao.findByStatusAndDateEquals("0", startTime);
Day time1 = dayDao.findByStatusAndDateEquals("0", endTime);
List<Day> days = dayDao.findAllByStatusAndDateBetween("0",startTime, endTime);
days.add(time);
days.add(time1);
List<Config> configs = configDao.findAll();
Config config = configs.get(0);
@NotEmpty(message = "每日考勤基础分") String score = config.getScore();
int i = Integer.parseInt(score);
if(days!=null){
int size = days.size();
monthSocre = new Double(i*size);
}
} catch (ParseException e) {
e.printStackTrace();
}
return monthSocre;
}
/**
* 计算公出、出差、加班、调休、病假、事假、迟到、早退
* @param userId
* @return
*/
public Double getScore(SimpleDateFormat sdf2,String userId,String month){
Date parse = null;
try {
parse = sdf2.parse(month);
} catch (ParseException e) {
e.printStackTrace();
}
Double score = 0d;
Config config = configDao.findAll().get(0);
@NotEmpty(message = "事假一天扣分") String thingDay = config.getThingDay();
double thingDayScore = Double.parseDouble(thingDay);
@NotEmpty(message = "调休一天扣分") String paidDayLeave = config.getPaidDayLeave();
double paidDayLeaveScore = Double.parseDouble(paidDayLeave);
@NotEmpty(message = "加班一小时加分") String workOverScore = config.getWorkOverScore();
double workOverHourScore = Double.parseDouble(workOverScore);
@NotEmpty(message = "全天旷工扣分") String absenteeism = config.getAbsenteeism();
double absenteeismScore = Double.parseDouble(absenteeism);
Calendar calendar = Calendar.getInstance();
calendar.setTime(parse);
calendar.set(Calendar.DAY_OF_MONTH,1);
Date start = calendar.getTime();
calendar.add(Calendar.MONTH,1); calendar.add(Calendar.MONTH,1);
calendar.set(Calendar.DAY_OF_MONTH,0); calendar.set(Calendar.DAY_OF_MONTH,0);
Date time1 = calendar.getTime(); Date end = calendar.getTime();
System.out.println("time1:"+time1); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
Map<String,Integer> monthTypeScore1 = new HashMap<>();
Map<String,Float> monthTypeScore2 = new HashMap<>();
monthTypeScore1.put("加班",0);
monthTypeScore2.put("调休",0f);
monthTypeScore2.put("公出",0f);
monthTypeScore2.put("出差",0f);
monthTypeScore2.put("事假",0f);
monthTypeScore2.put("病假",0f);
monthTypeScore2.put("旷工",0f);
AtomicReference<Double> lateEarlySocre = new AtomicReference<>(0d);
try {
Date startTime = sdf.parse(sdf.format(start));
Date endTime = sdf.parse(sdf.format(end));
List<AttendanceDetails> attendanceDetails = attendanceDetailsDao.findAllByUserIdAndDateBetween(userId, startTime, endTime);
if(attendanceDetails!=null){
attendanceDetails.forEach(attendanceDetails1 -> {
attendanceDetails1.getLateStatus();
if(attendanceDetails1.getLateStatus()!=null &&
attendanceDetails1.getLateStatus().equals(1)){
@NotEmpty(message = "迟到15分钟以上扣分") String latePointsFifteen = config.getLatePointsFifteen();
Double latePointsFifteenScore = Double.parseDouble(latePointsFifteen);
lateEarlySocre.updateAndGet(v -> v + latePointsFifteenScore);
}else if(attendanceDetails1.getLateStatus()!=null &&
attendanceDetails1.getLateStatus().equals(2)){
@NotEmpty(message = "迟到半天扣分") String latePointsHalfOfDay = config.getLatePointsHalfOfDay();
Double latePointsHalfOfDayScore = Double.parseDouble(latePointsHalfOfDay);
lateEarlySocre.updateAndGet(v -> v + latePointsHalfOfDayScore);
}else if(attendanceDetails1.getLateStatus()!=null &&
attendanceDetails1.getLateStatus().equals(3)){
@NotEmpty(message = "迟到半天扣分") String latePointsHalfOfDay = config.getLatePointsHalfOfDay();
Double latePointsHalfOfDayScore = Double.parseDouble(latePointsHalfOfDay);
lateEarlySocre.updateAndGet(v -> v + latePointsHalfOfDayScore * 2);
}
monthTypeScore1.put("加班",monthTypeScore1.get("加班")+attendanceDetails1.getWorkOverHours());
monthTypeScore2.put("调休",monthTypeScore2.get("调休")+attendanceDetails1.getPaidLeaveDay());
monthTypeScore2.put("公出",monthTypeScore2.get("公出")+attendanceDetails1.getOutSideBusinessDay());
monthTypeScore2.put("出差",monthTypeScore2.get("出差")+attendanceDetails1.getOutWorkDay());
monthTypeScore2.put("事假",monthTypeScore2.get("事假")+attendanceDetails1.getThingLeaveDay());
monthTypeScore2.put("病假",monthTypeScore2.get("病假")+attendanceDetails1.getSickLeaveDay());
monthTypeScore2.put("旷工",monthTypeScore2.get("旷工")+attendanceDetails1.getAbsenteeismDay());
});
}
score = thingDayScore*monthTypeScore2.get("事假")+thingDayScore*monthTypeScore2.get("病假")
+paidDayLeaveScore*monthTypeScore2.get("调休")+absenteeismScore*monthTypeScore2.get("旷工")
-workOverHourScore*monthTypeScore1.get("加班")+lateEarlySocre.get();
} catch (ParseException e) {
e.printStackTrace();
}
return score;
} }
} }
package com.zjty.tynotes.job.status.entity.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author gwj
* @create 2020/4/10 13:41
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value = "返给人员模块的数据协议类", description = "人员的任务信息")
public class UserWorkData {
@ApiModelProperty(value = "人员id", example = "qwer1234")
private String userId;
@ApiModelProperty(value = "任务平均分", example = "70")
private Double averageScore;
@ApiModelProperty(value = "已完成任务个数", example = "3")
private Integer completedNum;
@ApiModelProperty(value = "进行中任务个数", example = "2")
private Integer unCompletedNum;
}
package com.zjty.tynotes.job.status.service; package com.zjty.tynotes.job.status.service;
import com.zjty.tynotes.job.status.entity.Personnel; import com.zjty.tynotes.job.status.entity.Personnel;
import com.zjty.tynotes.job.status.entity.vo.UserWorkData;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
...@@ -20,4 +22,15 @@ public interface InternalService { ...@@ -20,4 +22,15 @@ public interface InternalService {
* 根据人员id返回任务数量 * 根据人员id返回任务数量
*/ */
int personnelWorkCount(String id); int personnelWorkCount(String id);
/**
* 根据时间区间查找人员任务信息
* @param userId
* @param startTime
* @param endTime
* @return
*/
UserWorkData personnelWorkMsg(String userId,Date startTime,Date endTime);
UserWorkData personnelWorkMsgAll(String userId);
} }
...@@ -6,6 +6,7 @@ import com.zjty.tynotes.job.common.exception.WorkAttribution; ...@@ -6,6 +6,7 @@ import com.zjty.tynotes.job.common.exception.WorkAttribution;
import com.zjty.tynotes.job.common.exception.WorkAttribution1; import com.zjty.tynotes.job.common.exception.WorkAttribution1;
import com.zjty.tynotes.job.status.entity.Personnel; import com.zjty.tynotes.job.status.entity.Personnel;
import com.zjty.tynotes.job.status.entity.RedisPersonalWork; import com.zjty.tynotes.job.status.entity.RedisPersonalWork;
import com.zjty.tynotes.job.status.entity.vo.UserWorkData;
import com.zjty.tynotes.job.status.service.InternalService; import com.zjty.tynotes.job.status.service.InternalService;
import com.zjty.tynotes.pas.service.IUserService; import com.zjty.tynotes.pas.service.IUserService;
import com.zjty.tynotes.search.subject.service.EsUtil; import com.zjty.tynotes.search.subject.service.EsUtil;
...@@ -15,6 +16,7 @@ import org.springframework.data.redis.core.RedisTemplate; ...@@ -15,6 +16,7 @@ import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
@Service @Service
public class InternalServiceImpl implements InternalService { public class InternalServiceImpl implements InternalService {
...@@ -62,4 +64,14 @@ public class InternalServiceImpl implements InternalService { ...@@ -62,4 +64,14 @@ public class InternalServiceImpl implements InternalService {
return count; return count;
} }
@Override
public UserWorkData personnelWorkMsg(String userId, Date startTime, Date endTime) {
return null;
}
@Override
public UserWorkData personnelWorkMsgAll(String userId) {
return null;
}
} }
...@@ -11,9 +11,15 @@ import java.util.List; ...@@ -11,9 +11,15 @@ import java.util.List;
* @create 2020/3/1 11:14 * @create 2020/3/1 11:14
*/ */
public interface DayDao extends MongoRepository<Day,String> { public interface DayDao extends MongoRepository<Day,String> {
List<Day> findAllByStatusAndDateBetween(String status, Date startDate, Date lastDate); Day findByStatusAndDateEquals(String status, Date startDate);
List<Day> findAllByStatusAndDateBetween(String status,Date startDate, Date lastDate);
// List<Day> findAllByStatusAndDateGreaterThanEqual(String status, Date startDate);
// List<Day> findAllByStatusAndDateLessThanEqual(String status, Date lastDate);
// List<Day> findAllByStatusAndDateWithin(String status,Date startDate, Date lastDate);
List<Day> findAllByDateBetween(Date startDate, Date lastDate); List<Day> findAllByDateBetween(Date startDate, Date lastDate);
Day findByDateEquals(Date date);
Day findByDate(Date date); Day findByDate(Date date);
} }
...@@ -24,4 +24,13 @@ public interface RoleDao extends MongoRepository<Role, String> { ...@@ -24,4 +24,13 @@ public interface RoleDao extends MongoRepository<Role, String> {
void deleteByName(String name); void deleteByName(String name);
Role findByName(String name); Role findByName(String name);
/**
* 查询在该角色id内,以及根据角色是否为领导查询角色集合
* @param ids
* @param isLeader
* @return
*/
List<Role> findAllByIdInAndIsLeader(List<String> ids,String isLeader);
} }
...@@ -17,4 +17,5 @@ public interface UserRoleDao extends MongoRepository<UserRole,String> { ...@@ -17,4 +17,5 @@ public interface UserRoleDao extends MongoRepository<UserRole,String> {
void deleteAllByUserId(String userId); void deleteAllByUserId(String userId);
List<UserRole> findAllByRoleIdIn(List<String> roleIds); List<UserRole> findAllByRoleIdIn(List<String> roleIds);
} }
package com.zjty.tynotes.pas.entity; package com.zjty.tynotes.pas.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
...@@ -28,6 +29,7 @@ public class Day { ...@@ -28,6 +29,7 @@ public class Day {
@NotEmpty(message = "节假日日期") @NotEmpty(message = "节假日日期")
@ApiModelProperty(value = "节假日日期",example = "2020/2/1") @ApiModelProperty(value = "节假日日期",example = "2020/2/1")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date date; private Date date;
@ApiModelProperty(value = "节假日描述,为工作日还是休息日还是团建,默认0为工作日,1为休息日,2为团建",example = "0") @ApiModelProperty(value = "节假日描述,为工作日还是休息日还是团建,默认0为工作日,1为休息日,2为团建",example = "0")
......
package com.zjty.tynotes.pas.entity.vo; package com.zjty.tynotes.pas.entity.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.Date;
/** /**
* @Author gwj * @Author gwj
* @create 2020/3/2 11:02 * @create 2020/3/2 11:02
...@@ -49,4 +52,16 @@ public class PageRequest { ...@@ -49,4 +52,16 @@ public class PageRequest {
* 查询条件:任务数量升降序(默认降序0 1升序) * 查询条件:任务数量升降序(默认降序0 1升序)
*/ */
private Integer sort; private Integer sort;
/**
* 起始时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date startTime;
/**
* 结束时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date endTime;
} }
...@@ -77,46 +77,78 @@ public class ConfigServiceImpl implements ConfigService { ...@@ -77,46 +77,78 @@ public class ConfigServiceImpl implements ConfigService {
public List<Day> findHolidaysByMonth(String date) { public List<Day> findHolidaysByMonth(String date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try { try {
Date date1 = sdf.parse(date);
int year = date1.getYear()+1900;
int month = date1.getMonth()+1;
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR,year); Date parse = sdf.parse(date);
calendar.set(Calendar.MONTH,month-1); calendar.setTime(parse);
calendar.set(Calendar.DAY_OF_MONTH,2); calendar.set(Calendar.DAY_OF_MONTH,1);
Date firstDate = calendar.getTime(); Date startTime = calendar.getTime();
calendar.set(Calendar.MONTH,month); System.out.println(startTime);
calendar.add(Calendar.MONTH,1);
calendar.set(Calendar.DAY_OF_MONTH,0); calendar.set(Calendar.DAY_OF_MONTH,0);
Date lastDate = calendar.getTime(); Date endTime = calendar.getTime();
List<Day> days = dayDao.findAllByDateBetween(firstDate, lastDate); List<Day> days = dayDao.findAllByDateBetween(startTime, endTime);
List<Day> days1 = new ArrayList<>();
calendar.set(Calendar.DAY_OF_MONTH,1);
if(days==null || days.size()==0){ if(days==null || days.size()==0){
calendar.set(Calendar.DAY_OF_MONTH,2);
System.out.println(calendar.getTime());
List<String> fullDayList = new ArrayList<>(32);
int count = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); int count = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
for (int j = 1; j <= count ; j++) { for (int j = 1; j <= count ; j++) {
fullDayList.add(sdf1.format(calendar.getTime()));
calendar.add(Calendar.DAY_OF_MONTH,1);
}
List<Day> days1 = new ArrayList<>();
for (String string : fullDayList) {
Day day = new Day(); Day day = new Day();
day.setStatus("0"); day.setStatus("0");
day.setDate(sdf1.parse(string)); day.setDate(calendar.getTime());
days1.add(day); days1.add(day);
calendar.add(Calendar.DATE,1);
} }
return dayDao.saveAll(days1); List<Day> days2 = dayDao.saveAll(days1);
days = days2;
}else{
Day startDay = dayDao.findByDateEquals(startTime);
System.out.println(startDay);
Day endDay = dayDao.findByDateEquals(endTime);
days.add(startDay);
days.add(endDay);
} }
calendar.set(Calendar.MONTH,month-1); // Date date1 = sdf.parse(date);
calendar.set(Calendar.DAY_OF_MONTH,0); // int year = date1.getYear()+1900;
firstDate = calendar.getTime(); // int month = date1.getMonth()+1;
calendar.set(Calendar.MONTH,month); // Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH,1); // calendar.set(Calendar.YEAR,year);
lastDate = calendar.getTime(); // calendar.set(Calendar.MONTH,month-1);
return dayDao.findAllByDateBetween(firstDate,lastDate); // calendar.set(Calendar.DAY_OF_MONTH,2);
// Date firstDate = calendar.getTime();
// calendar.set(Calendar.MONTH,month);
// calendar.set(Calendar.DAY_OF_MONTH,0);
// Date lastDate = calendar.getTime();
// List<Day> days = dayDao.findAllByDateBetween(firstDate, lastDate);
// if(days==null || days.size()==0){
//
// calendar.set(Calendar.DAY_OF_MONTH,2);
// System.out.println(calendar.getTime());
// List<String> fullDayList = new ArrayList<>(32);
// int count = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
// for (int j = 1; j <= count ; j++) {
// fullDayList.add(sdf1.format(calendar.getTime()));
// calendar.add(Calendar.DAY_OF_MONTH,1);
// }
// List<Day> days1 = new ArrayList<>();
// for (String string : fullDayList) {
// Day day = new Day();
// day.setStatus("0");
// day.setDate(sdf1.parse(string));
// days1.add(day);
// }
// return dayDao.saveAll(days1);
// }
// calendar.set(Calendar.MONTH,month-1);
// calendar.set(Calendar.DAY_OF_MONTH,0);
// firstDate = calendar.getTime();
// calendar.set(Calendar.MONTH,month);
// calendar.set(Calendar.DAY_OF_MONTH,1);
// lastDate = calendar.getTime();
// return dayDao.findAllByDateBetween(firstDate,lastDate);
return days;
} catch (ParseException e) { } catch (ParseException e) {
} }
......
...@@ -329,14 +329,48 @@ public class UserServiceImpl implements IUserService { ...@@ -329,14 +329,48 @@ public class UserServiceImpl implements IUserService {
List<String> departmentList = findDepartmentList(userId,authoryName); List<String> departmentList = findDepartmentList(userId,authoryName);
List<User> all = pasUserDao.findAll(); List<User> all = pasUserDao.findAll();
List<User> users = new ArrayList<>(); List<User> users = new ArrayList<>();
List<UserRole> userRoleList = userRoleDao.findAllByUserId(userId);
List<String> deIds = new ArrayList<>();
if(userRoleList!=null){
List<String> roleIds1 = new ArrayList<>();
userRoleList.forEach(userRole -> {
roleIds1.add(userRole.getRoleId());
});
List<Role> roles = roleDao.findAllByIdIn(roleIds1);
if(roles!=null){
roles.forEach(role -> {
if(role.getIsLeader().equals("1")){
deIds.add(role.getDepartmentId());
}
});
}
}
if(all!=null){ if(all!=null){
for (User user : all) { for (User user : all) {
List<String> departmentIds = user.getDepartmentIds(); List<String> departmentIds = user.getDepartmentIds();
if(departmentIds!=null){ if(departmentIds!=null){
for (String departId : departmentIds) { for (String departId : departmentIds) {
if(departmentList.contains(departId)){ if(departmentList.contains(departId)){
users.add(user); if(deIds.contains(departId)){
List<String> roleIdList = new ArrayList<>();
List<UserRole> userRoles = userRoleDao.findAllByUserId(userId);
if(userRoles!=null){
userRoles.forEach(userRole -> {
roleIdList.add(userRole.getRoleId());
});
}
List<Role> roles = roleDao.findAllByIdIn(roleIdList);
if(roles!=null){
roles.forEach(role -> {
if(role.getDepartmentId().equals(departId)&&role.getIsLeader().equals("1")){
users.add(user);
}
});
}
}else{
users.add(user);
}
break; break;
} }
} }
...@@ -776,12 +810,19 @@ public class UserServiceImpl implements IUserService { ...@@ -776,12 +810,19 @@ public class UserServiceImpl implements IUserService {
String id = authority.getId(); String id = authority.getId();
List<RoleAuthority> roleAuthorities = roleAuthorityDao.findAllByAuthorityId(id); List<RoleAuthority> roleAuthorities = roleAuthorityDao.findAllByAuthorityId(id);
if(roleAuthorities!=null){ if(roleAuthorities!=null){
List<String> roleIdList = new ArrayList<>();
List<String> roleIds = new ArrayList<>(); List<String> roleIds = new ArrayList<>();
List<String> userIds = new ArrayList<>(); List<String> userIds = new ArrayList<>();
roleAuthorities.forEach(roleAuthority -> { roleAuthorities.forEach(roleAuthority -> {
roleIds.add(roleAuthority.getRoleId()); roleIds.add(roleAuthority.getRoleId());
}); });
List<UserRole> userRoles = userRoleDao.findAllByRoleIdIn(roleIds); List<Role> roles = roleDao.findAllByIdInAndIsLeader(roleIds, "0");
if(roles!=null){
roles.forEach(role -> {
roleIdList.add(role.getId());
});
}
List<UserRole> userRoles = userRoleDao.findAllByRoleIdIn(roleIdList);
if(userRoles!=null){ if(userRoles!=null){
userRoles.forEach(userRole -> { userRoles.forEach(userRole -> {
......
...@@ -35,9 +35,9 @@ public class UnionApplication { ...@@ -35,9 +35,9 @@ public class UnionApplication {
// 开始支持http // 开始支持http
@Bean @Bean
public ServletWebServerFactory servletContainer() { public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory(); TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
tomcat.addAdditionalTomcatConnectors(createHTTPConnector()); tomcat.addAdditionalTomcatConnectors(createHTTPConnector());
return tomcat; return tomcat;
} }
private Connector createHTTPConnector() { private Connector createHTTPConnector() {
......
...@@ -86,6 +86,16 @@ public class UserVo { ...@@ -86,6 +86,16 @@ public class UserVo {
private Integer workCount; private Integer workCount;
@ApiModelProperty(value = "已完成任务数量",example = "10")
private Integer completedCount;
@ApiModelProperty(value = "进行中任务数量",example = "10")
private Integer workingCount;
@ApiModelProperty(value = "平均评分",example = "10")
private Double averageScore;
// @NotNull(message = "角色Id不可为空") // @NotNull(message = "角色Id不可为空")
// @ApiModelProperty(value = "角色id",example = "1") // @ApiModelProperty(value = "角色id",example = "1")
// private Integer roleId; // private Integer roleId;
......
...@@ -3,6 +3,7 @@ package com.zjty.tynotes.weekly.subject.service.impl; ...@@ -3,6 +3,7 @@ package com.zjty.tynotes.weekly.subject.service.impl;
import com.zjty.tynotes.job.basic.entity.database.Work; import com.zjty.tynotes.job.basic.entity.database.Work;
import com.zjty.tynotes.job.basic.repository.WorkRepository; import com.zjty.tynotes.job.basic.repository.WorkRepository;
import com.zjty.tynotes.job.status.entity.Personnel; import com.zjty.tynotes.job.status.entity.Personnel;
import com.zjty.tynotes.job.status.entity.vo.UserWorkData;
import com.zjty.tynotes.job.status.service.InternalService; import com.zjty.tynotes.job.status.service.InternalService;
import com.zjty.tynotes.pas.dao.*; import com.zjty.tynotes.pas.dao.*;
import com.zjty.tynotes.pas.entity.*; import com.zjty.tynotes.pas.entity.*;
...@@ -13,11 +14,13 @@ import com.zjty.tynotes.weekly.subject.entity.vo.Problem; ...@@ -13,11 +14,13 @@ import com.zjty.tynotes.weekly.subject.entity.vo.Problem;
import com.zjty.tynotes.weekly.subject.entity.vo.UserVo; import com.zjty.tynotes.weekly.subject.entity.vo.UserVo;
import com.zjty.tynotes.weekly.subject.service.UserManageService; import com.zjty.tynotes.weekly.subject.service.UserManageService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.lang.reflect.Array; import java.lang.reflect.Array;
import java.util.*; import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
/** /**
* @Author gwj * @Author gwj
...@@ -42,6 +45,9 @@ public class UserManageServiceImpl implements UserManageService { ...@@ -42,6 +45,9 @@ public class UserManageServiceImpl implements UserManageService {
@Autowired @Autowired
private InternalService internalService; private InternalService internalService;
private Map<String, UserWorkData> userWorkDataMap = new ConcurrentHashMap<>();
@Autowired @Autowired
private ProblemDao problemDao; private ProblemDao problemDao;
...@@ -103,7 +109,6 @@ public class UserManageServiceImpl implements UserManageService { ...@@ -103,7 +109,6 @@ public class UserManageServiceImpl implements UserManageService {
} }
} }
} }
} }
} }
...@@ -145,7 +150,16 @@ public class UserManageServiceImpl implements UserManageService { ...@@ -145,7 +150,16 @@ public class UserManageServiceImpl implements UserManageService {
} }
List<Role> roles = roleDao.findAllByIdIn(roleIds); List<Role> roles = roleDao.findAllByIdIn(roleIds);
user.setRoles(roles); user.setRoles(roles);
userVos.add(new UserVo(user)); UserVo userVo = new UserVo(user);
if(pageRequest.getStartTime()==null&&pageRequest.getEndTime()==null){
UserWorkData userWorkData = userWorkDataMap.get(user.getId());
userVo.setAverageScore(userWorkData.getAverageScore());
userVo.setCompletedCount(userWorkData.getCompletedNum());
userVo.setWorkingCount(userWorkData.getUnCompletedNum());
}else{
internalService.personnelWorkMsg(user.getId(),pageRequest.getStartTime(),pageRequest.getEndTime());
}
userVos.add(userVo);
} }
pageResponse.setRows(userVos); pageResponse.setRows(userVos);
pageResponse.setTotalCount(userList.size()); pageResponse.setTotalCount(userList.size());
...@@ -160,7 +174,14 @@ public class UserManageServiceImpl implements UserManageService { ...@@ -160,7 +174,14 @@ public class UserManageServiceImpl implements UserManageService {
} }
List<Role> roles = roleDao.findAllByIdIn(roleIds); List<Role> roles = roleDao.findAllByIdIn(roleIds);
user.setRoles(roles); user.setRoles(roles);
userVos.add(new UserVo(user)); UserVo userVo = new UserVo(user);
if(pageRequest.getStartTime()==null&&pageRequest.getEndTime()==null){
UserWorkData userWorkData = userWorkDataMap.get(user.getId());
userVo.setAverageScore(userWorkData.getAverageScore());
userVo.setCompletedCount(userWorkData.getCompletedNum());
userVo.setWorkingCount(userWorkData.getUnCompletedNum());
}
userVos.add(userVo);
} }
pageResponse.setRows(userVos); pageResponse.setRows(userVos);
pageResponse.setTotalCount(userList.size()); pageResponse.setTotalCount(userList.size());
...@@ -316,4 +337,22 @@ public class UserManageServiceImpl implements UserManageService { ...@@ -316,4 +337,22 @@ public class UserManageServiceImpl implements UserManageService {
} }
} }
@Scheduled(cron = "0/30 * * * * ? ")
public void userWorkDataMap(){
List<User> users = pasUserDao.findAll();
if(users!=null){
users.forEach(user -> {
UserWorkData userWorkData = internalService.personnelWorkMsgAll(user.getId());
if(userWorkData!=null){
userWorkDataMap.put(user.getId(),userWorkData);
}
});
}
}
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论