提交 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;
import com.dingtalk.api.DefaultDingTalkClient;
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.response.OapiAttendanceListRecordResponse;
import com.dingtalk.api.response.OapiAttendanceListResponse;
import com.dingtalk.api.response.OapiDepartmentListResponse;
import com.dingtalk.api.response.OapiUserGetResponse;
import com.taobao.api.ApiException;
......@@ -58,8 +62,30 @@ public class DingTestController {
@GetMapping("/card")
public Object card(){
List<CardResult> cardDetails = cardTask.getCardDetails();
return cardDetails;
myInit.getToken();
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
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 findAllByUserIdAndLeaveStartTimeBetweenAndLeaveEndTimeAfterAndApprovalTypeIn(String userId, Date startTime,Date endTime,Date endTime1,List<String> type);
ApprovalInformation findAllByUserIdAndLeaveStartTimeBetweenAndLeaveEndTimeAfterAndApprovalTypeAndStatus(String userId, Date startTime,Date endTime,Date endTime1,String type,String status);
}
......@@ -41,9 +41,15 @@ public class AttendanceDetails {
@ApiModelProperty(value = "是否迟到0为迟到/1为未迟到",example = "1")
Integer isLateDay;
@ApiModelProperty(value = "迟到等级0轻(15分钟以内)/1较轻(1小时以内)/2较严重(4小时以内)/3严重(4小时以上)",example = "1")
Integer lateStatus;
@ApiModelProperty(value = "是否早退0为早退/1为未早退",example = "1")
Integer isLeaveEarlyDay;
@ApiModelProperty(value = "早退等级0轻/1较轻/2较严重/3严重",example = "1")
Integer earlyStatus;
@ApiModelProperty(value = "缺卡次数",example = "2")
Integer lessCard;
......@@ -59,16 +65,22 @@ public class AttendanceDetails {
@ApiModelProperty(value = "加班时长",example = "4")
Integer workOverHours;
// @ApiModelProperty(value = "是否调休0为调休/1为未调休",example = "1")
// Integer isPaidLeaveDay;
//
// @ApiModelProperty(value = "调休时长",example = "1")
// Float paidLeaveDay;
@ApiModelProperty(value = "是否调休0为调休/1为未调休",example = "1")
Integer isPaidLeaveDay;
@ApiModelProperty(value = "调休时长",example = "1")
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;
@ApiModelProperty(value = "假时长",example = "1")
@ApiModelProperty(value = "假时长",example = "1")
Float sickLeaveDay;
@ApiModelProperty(value = "是否公出",example = "1")
......@@ -87,9 +99,12 @@ public class AttendanceDetails {
Date date;
public AttendanceDetails() {
thingLeaveDay = 0f;
paidLeaveDay = 0f;
workOverHours = 0;
outSideBusinessDay = 0f;
outWorkDay = 0f;
sickLeaveDay = 0f;
absenteeismDay = 0f;
}
}
......@@ -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);
String workTime = config.getWorkTime();//上班时间
String afterWorkTime = config.getAfterWorkTime();//下班时间
......
......@@ -5,15 +5,9 @@ import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiAttendanceListRequest;
import com.dingtalk.api.response.OapiAttendanceListResponse;
import com.taobao.api.ApiException;
import com.zjty.tynotes.attendance.dao.ApprovalInformationDao;
import com.zjty.tynotes.attendance.dao.AttendanceDetailsDao;
import com.zjty.tynotes.attendance.dao.CardResultDao;
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.attendance.dao.*;
import com.zjty.tynotes.attendance.entity.*;
import com.zjty.tynotes.attendance.service.impl.ApprovalInformationServiceImpl;
import com.zjty.tynotes.pas.dao.ConfigDao;
import com.zjty.tynotes.pas.dao.DayDao;
import com.zjty.tynotes.pas.dao.PasUserDao;
......@@ -31,6 +25,7 @@ import javax.validation.constraints.NotEmpty;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
/**
* @Author gwj
......@@ -60,6 +55,10 @@ public class CardTask {
private ConfigDao configDao;
@Autowired
private AttendanceDetailsDao attendanceDetailsDao;
@Autowired
private UserOverWorkDao userOverWorkDao;
@Autowired
private ApprovalInformationServiceImpl approvalInformationService;
/**
* 定时任务,定时获取打卡信息.计算前天的个人考勤信息情况
......@@ -185,65 +184,179 @@ public class CardTask {
Date date1 = sdf4.parse(format1);
System.out.println(date);
System.out.println(date1);
List<ApprovalInformation> all = approvalInformationDao.findAll();
System.out.println("startTime"+all.get(0).getLeaveStartTime()+"\n"+"endTime"+all.get(0).getLeaveEndTime());
ApprovalInformation approvalInformation = approvalInformationDao.findAllByUserIdAndLeaveStartTimeLessThanEqualAndLeaveEndTimeGreaterThanEqualAndApprovalTypeIn(user.getId(), date, date1,type1);
List<ApprovalInformation> compute = compute(approvalInformation, attendanceDetails, user.getId(), date, date1, type1);
ApprovalInformation approvalInformation1 = approvalInformationDao.findAllByUserIdAndLeaveStartTimeLessThanEqualAndLeaveEndTimeGreaterThanEqualAndApprovalTypeIn(user.getId(), date,date1,type2);
List<ApprovalInformation> compute1 = compute(approvalInformation1, attendanceDetails, user.getId(), date, date1, type2);
ApprovalInformation approvalInformation2 = approvalInformationDao.findAllByUserIdAndLeaveStartTimeLessThanEqualAndLeaveEndTimeGreaterThanEqualAndApprovalTypeIn(user.getId(), date,date1,type3);
List<ApprovalInformation> compute2 = compute(approvalInformation2, attendanceDetails, user.getId(), date, date1, type3);
attendanceDetails.setUserId(user.getId());
if(cardResults1!=null){
List<CardResult> cardResults = new ArrayList<>();
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);
// List<ApprovalInformation> all = approvalInformationDao.findAll();
// System.out.println("startTime"+all.get(0).getLeaveStartTime()+"\n"+"endTime"+all.get(0).getLeaveEndTime());
Day day = dayDao.findByDate(parse);
if(day!=null){
if(day.getStatus()!=null && day.getStatus().equals("0")){
List<ApprovalInformation> approvalInformation = approvalInformationDao.findAllByUserIdAndLeaveStartTimeLessThanEqualAndLeaveEndTimeGreaterThanEqualAndStatus(user.getId(), date, date1,"1");
List<ApprovalInformation> approvalInformationList = new ArrayList<>();
if(approvalInformation!=null){
approvalInformationList.forEach(approvalInformation1 -> {
List<ApprovalInformation> compute = compute(approvalInformation1, attendanceDetails, user.getId(), date, date1);
if(compute!=null){
approvalInformationList.addAll(compute);
}
});
}
}
cardResults.forEach(cardResult -> {
String checkType = cardResult.getCheckType();
String timeResult = cardResult.getTimeResult();
if(("OnDuty").equals(checkType)){
if("Late".equals(timeResult)||"SeriousLate".equals(timeResult)){
attendanceDetails.setIsLateDay(0);
ApprovalInformation approvalInformation1 = approvalInformationDao.findByUserIdAndStatusAndApprovalType(user.getId(), "1", "加班");
attendanceDetails.setUserId(user.getId());
if(cardResults1!=null){
List<CardResult> cardResults = new ArrayList<>();
cardResults1.forEach(cardResult -> {
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)){
if("Early".equals(timeResult)||"Absenteeism".equals(timeResult)){
attendanceDetails.setIsLeaveEarlyDay(0);
// cardResults.forEach(cardResult -> {
// String checkType = cardResult.getCheckType();
// 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) {
logger.error(e.getMessage());
}
// 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);
});
attendanceDetailsDao.saveAll(attendanceDetailsList);
......@@ -257,75 +370,174 @@ public class CardTask {
* @param userId
* @param date1
* @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<>();
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.setOutSideBusinessDay(1f);
}else{
ApprovalInformation approvalInformation1 = approvalInformationDao.findAllByUserIdAndLeaveStartTimeBeforeAndLeaveEndTimeBetweenAndApprovalTypeIn(userId, date1, date1,date2,types);
ApprovalInformation approvalInformation2 = approvalInformationDao.findAllByUserIdAndLeaveStartTimeBetweenAndLeaveEndTimeAfterAndApprovalTypeIn(userId, date1, date2,date2,types);
if(approvalInformation1!=null){
attendanceDetails.setIsOutSideBusinessDay(0);
attendanceDetails.setOutSideBusinessDay(0.5f);
approvalInformationList.add(approvalInformation1);
}
if(approvalInformation2!=null){
attendanceDetails.setIsOutSideBusinessDay(0);
if(attendanceDetails.getOutSideBusinessDay()!=null){
attendanceDetails.setOutSideBusinessDay(attendanceDetails.getOutSideBusinessDay()+0.5f);
}
approvalInformationList.add(approvalInformation2);
attendanceDetails.setOutSideBusinessDay(0.5f);
approvalInformationList.add(approvalInformation1);
}
if(approvalInformation2!=null){
attendanceDetails.setIsOutSideBusinessDay(0);
if(attendanceDetails.getOutSideBusinessDay()!=null){
attendanceDetails.setOutSideBusinessDay(attendanceDetails.getOutSideBusinessDay()+0.5f);
}
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(approvalInformation!=null){
if(approvalInformation2!=null){
attendanceDetails.setIsOutWorkDay(0);
attendanceDetails.setOutWorkDay(1f);
}else{
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);
if(attendanceDetails.getOutWorkDay()!=null){
attendanceDetails.setOutWorkDay(attendanceDetails.getOutWorkDay()+0.5f);
}
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(approvalInformation!=null){
if(approvalInformation2!=null){
attendanceDetails.setIsSickLeaveDay(0);
attendanceDetails.setSickLeaveDay(1f);
}else{
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(attendanceDetails.getSickLeaveDay()!=null){
attendanceDetails.setSickLeaveDay(attendanceDetails.getSickLeaveDay()+0.5f);
}
if(approvalInformation2!=null){
attendanceDetails.setIsSickLeaveDay(0);
if(attendanceDetails.getSickLeaveDay()!=null){
attendanceDetails.setSickLeaveDay(attendanceDetails.getSickLeaveDay()+0.5f);
}
approvalInformationList.add(approvalInformation2);
approvalInformationList.add(approvalInformation2);
}
}
return approvalInformationList;
}
/**
* 计算事假
*/
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;
}
/**
* 定时任务,定时进行运算
*/
......@@ -355,28 +567,200 @@ public class CardTask {
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);
// 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();
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);
Date start = calendar.getTime();
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.set(Calendar.DAY_OF_MONTH,0);
Date time1 = calendar.getTime();
System.out.println("time1:"+time1);
Date end = calendar.getTime();
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;
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;
/**
......@@ -20,4 +22,15 @@ public interface InternalService {
* 根据人员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;
import com.zjty.tynotes.job.common.exception.WorkAttribution1;
import com.zjty.tynotes.job.status.entity.Personnel;
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.pas.service.IUserService;
import com.zjty.tynotes.search.subject.service.EsUtil;
......@@ -15,6 +16,7 @@ import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Service
public class InternalServiceImpl implements InternalService {
......@@ -62,4 +64,14 @@ public class InternalServiceImpl implements InternalService {
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;
* @create 2020/3/1 11:14
*/
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);
Day findByDateEquals(Date date);
Day findByDate(Date date);
}
......@@ -24,4 +24,13 @@ public interface RoleDao extends MongoRepository<Role, String> {
void deleteByName(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> {
void deleteAllByUserId(String userId);
List<UserRole> findAllByRoleIdIn(List<String> roleIds);
}
package com.zjty.tynotes.pas.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
......@@ -28,6 +29,7 @@ public class Day {
@NotEmpty(message = "节假日日期")
@ApiModelProperty(value = "节假日日期",example = "2020/2/1")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date date;
@ApiModelProperty(value = "节假日描述,为工作日还是休息日还是团建,默认0为工作日,1为休息日,2为团建",example = "0")
......
package com.zjty.tynotes.pas.entity.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @Author gwj
* @create 2020/3/2 11:02
......@@ -49,4 +52,16 @@ public class PageRequest {
* 查询条件:任务数量升降序(默认降序0 1升序)
*/
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 {
public List<Day> findHolidaysByMonth(String date) {
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 {
Date date1 = sdf.parse(date);
int year = date1.getYear()+1900;
int month = date1.getMonth()+1;
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR,year);
calendar.set(Calendar.MONTH,month-1);
calendar.set(Calendar.DAY_OF_MONTH,2);
Date firstDate = calendar.getTime();
calendar.set(Calendar.MONTH,month);
Date parse = sdf.parse(date);
calendar.setTime(parse);
calendar.set(Calendar.DAY_OF_MONTH,1);
Date startTime = calendar.getTime();
System.out.println(startTime);
calendar.add(Calendar.MONTH,1);
calendar.set(Calendar.DAY_OF_MONTH,0);
Date lastDate = calendar.getTime();
List<Day> days = dayDao.findAllByDateBetween(firstDate, lastDate);
Date endTime = calendar.getTime();
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){
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));
day.setDate(calendar.getTime());
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);
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);
// Date date1 = sdf.parse(date);
// int year = date1.getYear()+1900;
// int month = date1.getMonth()+1;
// Calendar calendar = Calendar.getInstance();
// calendar.set(Calendar.YEAR,year);
// calendar.set(Calendar.MONTH,month-1);
// 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) {
}
......
......@@ -329,14 +329,48 @@ public class UserServiceImpl implements IUserService {
List<String> departmentList = findDepartmentList(userId,authoryName);
List<User> all = pasUserDao.findAll();
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){
for (User user : all) {
List<String> departmentIds = user.getDepartmentIds();
if(departmentIds!=null){
for (String departId : departmentIds) {
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;
}
}
......@@ -776,12 +810,19 @@ public class UserServiceImpl implements IUserService {
String id = authority.getId();
List<RoleAuthority> roleAuthorities = roleAuthorityDao.findAllByAuthorityId(id);
if(roleAuthorities!=null){
List<String> roleIdList = new ArrayList<>();
List<String> roleIds = new ArrayList<>();
List<String> userIds = new ArrayList<>();
roleAuthorities.forEach(roleAuthority -> {
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){
userRoles.forEach(userRole -> {
......
......@@ -35,9 +35,9 @@ public class UnionApplication {
// 开始支持http
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
tomcat.addAdditionalTomcatConnectors(createHTTPConnector());
return tomcat;
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
tomcat.addAdditionalTomcatConnectors(createHTTPConnector());
return tomcat;
}
private Connector createHTTPConnector() {
......
......@@ -86,6 +86,16 @@ public class UserVo {
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不可为空")
// @ApiModelProperty(value = "角色id",example = "1")
// private Integer roleId;
......
......@@ -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.repository.WorkRepository;
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.pas.dao.*;
import com.zjty.tynotes.pas.entity.*;
......@@ -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.service.UserManageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import java.lang.reflect.Array;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
/**
* @Author gwj
......@@ -42,6 +45,9 @@ public class UserManageServiceImpl implements UserManageService {
@Autowired
private InternalService internalService;
private Map<String, UserWorkData> userWorkDataMap = new ConcurrentHashMap<>();
@Autowired
private ProblemDao problemDao;
......@@ -103,7 +109,6 @@ public class UserManageServiceImpl implements UserManageService {
}
}
}
}
}
......@@ -145,7 +150,16 @@ public class UserManageServiceImpl implements UserManageService {
}
List<Role> roles = roleDao.findAllByIdIn(roleIds);
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.setTotalCount(userList.size());
......@@ -160,7 +174,14 @@ public class UserManageServiceImpl implements UserManageService {
}
List<Role> roles = roleDao.findAllByIdIn(roleIds);
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.setTotalCount(userList.size());
......@@ -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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论