Commit e37d1619 authored by 赵啸非's avatar 赵啸非

考勤请假添加钉钉原始记录

parent e0673a63
...@@ -2,6 +2,9 @@ package com.mortals.xhx.module.attendance.model; ...@@ -2,6 +2,9 @@ package com.mortals.xhx.module.attendance.model;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.ArrayList; import java.util.ArrayList;
import java.math.BigDecimal;
import cn.hutool.core.date.DateUtil;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.mortals.framework.annotation.Excel; import com.mortals.framework.annotation.Excel;
import com.mortals.framework.model.BaseEntityLong; import com.mortals.framework.model.BaseEntityLong;
...@@ -11,7 +14,7 @@ import lombok.Data; ...@@ -11,7 +14,7 @@ import lombok.Data;
* 请假记录信息实体对象 * 请假记录信息实体对象
* *
* @author zxfei * @author zxfei
* @date 2023-07-19 * @date 2023-08-15
*/ */
@Data @Data
public class AttendanceLeaveRecordEntity extends AttendanceLeaveRecordVo { public class AttendanceLeaveRecordEntity extends AttendanceLeaveRecordVo {
...@@ -33,7 +36,6 @@ public class AttendanceLeaveRecordEntity extends AttendanceLeaveRecordVo { ...@@ -33,7 +36,6 @@ public class AttendanceLeaveRecordEntity extends AttendanceLeaveRecordVo {
/** /**
* 所属部门 * 所属部门
*/ */
@Excel(name = "所属部门")
private String deptName; private String deptName;
/** /**
* 电话号码 * 电话号码
...@@ -72,7 +74,6 @@ public class AttendanceLeaveRecordEntity extends AttendanceLeaveRecordVo { ...@@ -72,7 +74,6 @@ public class AttendanceLeaveRecordEntity extends AttendanceLeaveRecordVo {
/** /**
* 审批负责人 * 审批负责人
*/ */
@Excel(name = "审批负责人")
private String approver; private String approver;
/** /**
* 附件 * 附件
...@@ -89,7 +90,6 @@ public class AttendanceLeaveRecordEntity extends AttendanceLeaveRecordVo { ...@@ -89,7 +90,6 @@ public class AttendanceLeaveRecordEntity extends AttendanceLeaveRecordVo {
/** /**
* 申请时间 * 申请时间
*/ */
@Excel(name = "申请时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date appealTime; private Date appealTime;
/** /**
* 审核结果(1.申请通过,2.申请不通过) * 审核结果(1.申请通过,2.申请不通过)
...@@ -109,8 +109,11 @@ public class AttendanceLeaveRecordEntity extends AttendanceLeaveRecordVo { ...@@ -109,8 +109,11 @@ public class AttendanceLeaveRecordEntity extends AttendanceLeaveRecordVo {
/** /**
* 处理状态 * 处理状态
*/ */
@Excel(name = "处理状态", readConverterExp = "1=待处理,2=已处理")
private Integer processStatus; private Integer processStatus;
/**
* 钉钉原始请假时间记录
*/
private String sourceDingTime;
@Override @Override
public int hashCode() { public int hashCode() {
return this.getId().hashCode(); return this.getId().hashCode();
...@@ -128,45 +131,26 @@ public class AttendanceLeaveRecordEntity extends AttendanceLeaveRecordVo { ...@@ -128,45 +131,26 @@ public class AttendanceLeaveRecordEntity extends AttendanceLeaveRecordVo {
} }
public void initAttrValue(){ public void initAttrValue(){
this.leavePersonId = 0L;
this.leavePersonId = -1L;
this.leavePerson = ""; this.leavePerson = "";
this.deptId = 0L;
this.deptId = null;
this.deptName = ""; this.deptName = "";
this.phoneNumber = ""; this.phoneNumber = "";
this.leaveType = 0;
this.leaveType =null; this.startTime = new Date();
this.endTime = new Date();
this.startTime = null;
this.endTime = null;
this.duration = 0; this.duration = 0;
this.reason = ""; this.reason = "";
this.approverId = 0L;
this.approverId = null;
this.approver = ""; this.approver = "";
this.attachment = ""; this.attachment = "";
this.attachmentPath = ""; this.attachmentPath = "";
this.remark = ""; this.remark = "";
this.appealTime = new Date();
this.appealTime = null; this.auditResult = 0;
this.auditResult = null;
this.auditDesc = ""; this.auditDesc = "";
this.auditTime = new Date();
this.auditTime = null;
this.processStatus = 1; this.processStatus = 1;
this.sourceDingTime = "";
} }
} }
\ No newline at end of file
...@@ -7,7 +7,7 @@ import com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordEntity; ...@@ -7,7 +7,7 @@ import com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordEntity;
* 请假记录信息查询对象 * 请假记录信息查询对象
* *
* @author zxfei * @author zxfei
* @date 2023-07-18 * @date 2023-08-15
*/ */
public class AttendanceLeaveRecordQuery extends AttendanceLeaveRecordEntity { public class AttendanceLeaveRecordQuery extends AttendanceLeaveRecordEntity {
/** 开始 序号,主键,自增长 */ /** 开始 序号,主键,自增长 */
...@@ -241,6 +241,11 @@ public class AttendanceLeaveRecordQuery extends AttendanceLeaveRecordEntity { ...@@ -241,6 +241,11 @@ public class AttendanceLeaveRecordQuery extends AttendanceLeaveRecordEntity {
/** 处理状态排除列表 */ /** 处理状态排除列表 */
private List <Integer> processStatusNotList; private List <Integer> processStatusNotList;
/** 钉钉原始请假时间记录 */
private List<String> sourceDingTimeList;
/** 钉钉原始请假时间记录排除列表 */
private List <String> sourceDingTimeNotList;
/** OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) */ /** OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) */
private List<AttendanceLeaveRecordQuery> orConditionList; private List<AttendanceLeaveRecordQuery> orConditionList;
...@@ -1539,6 +1544,38 @@ public class AttendanceLeaveRecordQuery extends AttendanceLeaveRecordEntity { ...@@ -1539,6 +1544,38 @@ public class AttendanceLeaveRecordQuery extends AttendanceLeaveRecordEntity {
} }
/**
* 获取 钉钉原始请假时间记录
* @return sourceDingTimeList
*/
public List<String> getSourceDingTimeList(){
return this.sourceDingTimeList;
}
/**
* 设置 钉钉原始请假时间记录
* @param sourceDingTimeList
*/
public void setSourceDingTimeList(List<String> sourceDingTimeList){
this.sourceDingTimeList = sourceDingTimeList;
}
/**
* 获取 钉钉原始请假时间记录
* @return sourceDingTimeNotList
*/
public List<String> getSourceDingTimeNotList(){
return this.sourceDingTimeNotList;
}
/**
* 设置 钉钉原始请假时间记录
* @param sourceDingTimeNotList
*/
public void setSourceDingTimeNotList(List<String> sourceDingTimeNotList){
this.sourceDingTimeNotList = sourceDingTimeNotList;
}
/** /**
* 设置 序号,主键,自增长 * 设置 序号,主键,自增长
* @param id * @param id
...@@ -2256,6 +2293,25 @@ public class AttendanceLeaveRecordQuery extends AttendanceLeaveRecordEntity { ...@@ -2256,6 +2293,25 @@ public class AttendanceLeaveRecordQuery extends AttendanceLeaveRecordEntity {
return this; return this;
} }
/**
* 设置 钉钉原始请假时间记录
* @param sourceDingTime
*/
public AttendanceLeaveRecordQuery sourceDingTime(String sourceDingTime){
setSourceDingTime(sourceDingTime);
return this;
}
/**
* 设置 钉钉原始请假时间记录
* @param sourceDingTimeList
*/
public AttendanceLeaveRecordQuery sourceDingTimeList(List<String> sourceDingTimeList){
this.sourceDingTimeList = sourceDingTimeList;
return this;
}
/** /**
* 获取 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) * 获取 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @return orConditionList * @return orConditionList
......
package com.mortals.xhx.module.attendance.model.vo; package com.mortals.xhx.module.attendance.model.vo;
import com.mortals.framework.annotation.Excel; import com.mortals.framework.annotation.Excel;
import com.mortals.framework.annotation.Excels;
import com.mortals.framework.model.BaseEntityLong; import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.attendance.model.AttendanceStaffStatEntity; import com.mortals.xhx.module.attendance.model.AttendanceStaffStatEntity;
import lombok.Data; import lombok.Data;
...@@ -15,6 +16,12 @@ import java.util.List; ...@@ -15,6 +16,12 @@ import java.util.List;
@Data @Data
public class AttendanceStatVo extends BaseEntityLong { public class AttendanceStatVo extends BaseEntityLong {
@Excels({
@Excel(name = "汇总内容", width = 30, targetAttr = "attendanceSummary", type = Excel.Type.EXPORT),
@Excel(name = "日期", targetAttr = "day", type = Excel.Type.EXPORT),
})
private List<AttendanceStaffStatEntity> attendanceStaffStatEntities; private List<AttendanceStaffStatEntity> attendanceStaffStatEntities;
......
package com.mortals.xhx.module.attendance.service.impl; package com.mortals.xhx.module.attendance.service.impl;
import cn.hutool.core.date.DateUtil;
import com.mortals.framework.model.PageInfo; import com.mortals.framework.model.PageInfo;
import com.mortals.framework.model.Result; import com.mortals.framework.model.Result;
import com.mortals.framework.util.DateUtils; import com.mortals.framework.util.DateUtils;
...@@ -48,38 +49,40 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc ...@@ -48,38 +49,40 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc
@Override @Override
protected void findAfter(AttendanceStatEntity entity, Context context, List<AttendanceStatEntity> list) throws AppException { protected void findAfter(AttendanceStatEntity entity, Context context, List<AttendanceStatEntity> list) throws AppException {
// DateUtil.parse(entity.getStartTime()).year();
//DateUtil.parse(entity.getStartTime()).month();
//开始时间 //开始时间
String startYears =entity.getStartTime().split("-",0)[0]; String startYears = entity.getStartTime().split("-", 0)[0];
Long startYear = Long.valueOf(startYears); Long startYear = Long.valueOf(startYears);
String startMonths = entity.getStartTime().split("-",0)[1]; String startMonths = entity.getStartTime().split("-", 0)[1];
Long startMonth =Long.valueOf(startMonths); Long startMonth = Long.valueOf(startMonths);
String startDays= entity.getStartTime().split("-",0)[2]; String startDays = entity.getStartTime().split("-", 0)[2];
Long startDay =Long.valueOf(startDays); Long startDay = Long.valueOf(startDays);
//结束时间 //结束时间
String endYears =entity.getEndTime().split("-",0)[0]; String endYears = entity.getEndTime().split("-", 0)[0];
Long endYear = Long.valueOf(endYears); Long endYear = Long.valueOf(endYears);
String endMonths = entity.getEndTime().split("-",0)[1]; String endMonths = entity.getEndTime().split("-", 0)[1];
Long endMonth =Long.valueOf(endMonths); Long endMonth = Long.valueOf(endMonths);
String endDays= entity.getEndTime().split("-",0)[2]; String endDays = entity.getEndTime().split("-", 0)[2];
Long endDay =Long.valueOf(endDays); Long endDay = Long.valueOf(endDays);
list.forEach(item -> { list.forEach(item -> {
AttendanceStaffStatQuery staffStatQuery = new AttendanceStaffStatQuery(); AttendanceStaffStatQuery staffStatQuery = new AttendanceStaffStatQuery();
staffStatQuery.setStaffId(entity.getStaffId()); staffStatQuery.setStaffId(entity.getStaffId());
if (startYear==endYear){ if (startYear == endYear) {
staffStatQuery.setYear(startYear.intValue()); staffStatQuery.setYear(startYear.intValue());
}else { } else {
staffStatQuery.setYearStart(startYear.intValue()); staffStatQuery.setYearStart(startYear.intValue());
staffStatQuery.setYearEnd(endYear.intValue()); staffStatQuery.setYearEnd(endYear.intValue());
} }
if (startMonth==endMonth){ if (startMonth == endMonth) {
staffStatQuery.setMonth(startMonth.intValue()); staffStatQuery.setMonth(startMonth.intValue());
}else { } else {
staffStatQuery.setMonthStart(startMonth.intValue()); staffStatQuery.setMonthStart(startMonth.intValue());
staffStatQuery.setMonthEnd(startMonth.intValue()); staffStatQuery.setMonthEnd(startMonth.intValue());
} }
if (startDay==endDay){ if (startDay == endDay) {
staffStatQuery.setDay(startDay.intValue()); staffStatQuery.setDay(startDay.intValue());
}else { } else {
staffStatQuery.setDayStart(startDay.intValue()); staffStatQuery.setDayStart(startDay.intValue());
staffStatQuery.setDayEnd(startDay.intValue()); staffStatQuery.setDayEnd(startDay.intValue());
} }
...@@ -97,37 +100,37 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc ...@@ -97,37 +100,37 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc
@Override @Override
protected void findAfter(AttendanceStatEntity params, PageInfo pageInfo, Context context, List<AttendanceStatEntity> list) throws AppException { protected void findAfter(AttendanceStatEntity params, PageInfo pageInfo, Context context, List<AttendanceStatEntity> list) throws AppException {
//开始时间 //开始时间
String startYears =params.getStartTime().split("-",0)[0]; String startYears = params.getStartTime().split("-", 0)[0];
Long startYear = Long.valueOf(startYears); Long startYear = Long.valueOf(startYears);
String startMonths = params.getStartTime().split("-",0)[1]; String startMonths = params.getStartTime().split("-", 0)[1];
Long startMonth =Long.valueOf(startMonths); Long startMonth = Long.valueOf(startMonths);
String startDays= params.getStartTime().split("-",0)[2]; String startDays = params.getStartTime().split("-", 0)[2];
Long startDay =Long.valueOf(startDays); Long startDay = Long.valueOf(startDays);
//结束时间 //结束时间
String endYears =params.getEndTime().split("-",0)[0]; String endYears = params.getEndTime().split("-", 0)[0];
Long endYear = Long.valueOf(endYears); Long endYear = Long.valueOf(endYears);
String endMonths = params.getEndTime().split("-",0)[1]; String endMonths = params.getEndTime().split("-", 0)[1];
Long endMonth =Long.valueOf(endMonths); Long endMonth = Long.valueOf(endMonths);
String endDays= params.getEndTime().split("-",0)[2]; String endDays = params.getEndTime().split("-", 0)[2];
Long endDay =Long.valueOf(endDays); Long endDay = Long.valueOf(endDays);
list.forEach(item -> { list.forEach(item -> {
AttendanceStaffStatQuery staffStatQuery = new AttendanceStaffStatQuery(); AttendanceStaffStatQuery staffStatQuery = new AttendanceStaffStatQuery();
staffStatQuery.setStaffId(item.getStaffId()); staffStatQuery.setStaffId(item.getStaffId());
if (startYear==endYear){ if (startYear == endYear) {
staffStatQuery.setYear(startYear.intValue()); staffStatQuery.setYear(startYear.intValue());
}else { } else {
staffStatQuery.setYearStart(startYear.intValue()); staffStatQuery.setYearStart(startYear.intValue());
staffStatQuery.setYearEnd(endYear.intValue()); staffStatQuery.setYearEnd(endYear.intValue());
} }
if (startMonth==endMonth){ if (startMonth == endMonth) {
staffStatQuery.setMonth(startMonth.intValue()); staffStatQuery.setMonth(startMonth.intValue());
}else { } else {
staffStatQuery.setMonthStart(startMonth.intValue()); staffStatQuery.setMonthStart(startMonth.intValue());
staffStatQuery.setMonthEnd(endMonth.intValue()); staffStatQuery.setMonthEnd(endMonth.intValue());
} }
if (startDay==endDay){ if (startDay == endDay) {
staffStatQuery.setDay(startDay.intValue()); staffStatQuery.setDay(startDay.intValue());
}else { } else {
staffStatQuery.setDayStart(startDay.intValue()); staffStatQuery.setDayStart(startDay.intValue());
staffStatQuery.setDayEnd(endDay.intValue()); staffStatQuery.setDayEnd(endDay.intValue());
} }
...@@ -158,11 +161,11 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc ...@@ -158,11 +161,11 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
calendar.setTime(DateUtils.StrToDate(query.getSummaryTime())); calendar.setTime(DateUtils.StrToDate(query.getSummaryTime()));
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
if(dayOfWeek==Calendar.SATURDAY||dayOfWeek==Calendar.SUNDAY){ if (dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY) {
return; return;
} }
Date today = DateUtils.getCurrDate(); Date today = DateUtils.getCurrDate();
if(DateUtils.StrToDate(query.getSummaryTime()).compareTo(today)>=0){ if (DateUtils.StrToDate(query.getSummaryTime()).compareTo(today) >= 0) {
return; return;
} }
...@@ -191,7 +194,7 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc ...@@ -191,7 +194,7 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc
//汇总当前日期请假情况 //汇总当前日期请假情况
List<LeaveSummaryVo> leaveSummaryVoList = attendanceSummaryDao.getLeaveSummary(query); List<LeaveSummaryVo> leaveSummaryVoList = attendanceSummaryDao.getLeaveSummary(query);
if (CollectionUtils.isNotEmpty(leaveSummaryVoList)) { if (CollectionUtils.isNotEmpty(leaveSummaryVoList)) {
BigDecimal day = new BigDecimal(3600*24); BigDecimal day = new BigDecimal(3600 * 24);
BigDecimal oneDay = new BigDecimal(1); BigDecimal oneDay = new BigDecimal(1);
for (LeaveSummaryVo item : leaveSummaryVoList) { for (LeaveSummaryVo item : leaveSummaryVoList) {
String attendanceSummary = ""; String attendanceSummary = "";
...@@ -200,29 +203,29 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc ...@@ -200,29 +203,29 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc
BigDecimal leaveTime = new BigDecimal(item.getDuration()).divide(day, 1, BigDecimal.ROUND_HALF_DOWN); BigDecimal leaveTime = new BigDecimal(item.getDuration()).divide(day, 1, BigDecimal.ROUND_HALF_DOWN);
String endStr = DateUtils.getStrDate(item.getEndTime()); String endStr = DateUtils.getStrDate(item.getEndTime());
String dayStr = query.getSummaryTime(); String dayStr = query.getSummaryTime();
if(endStr.equals(dayStr)){ if (endStr.equals(dayStr)) {
if(leaveTime.compareTo(oneDay)>=0){ if (leaveTime.compareTo(oneDay) >= 0) {
// 整数部分 // 整数部分
BigDecimal integerPart = leaveTime.setScale(0, RoundingMode.DOWN); BigDecimal integerPart = leaveTime.setScale(0, RoundingMode.DOWN);
// 小数部分 // 小数部分
BigDecimal fractionalPart = leaveTime.subtract(integerPart); BigDecimal fractionalPart = leaveTime.subtract(integerPart);
if(fractionalPart.compareTo(new BigDecimal(0))==0){ if (fractionalPart.compareTo(new BigDecimal(0)) == 0) {
leaveTime = oneDay; leaveTime = oneDay;
}else { } else {
leaveTime = fractionalPart; leaveTime = fractionalPart;
} }
} }
}else { } else {
if(leaveTime.compareTo(oneDay)>=0){ if (leaveTime.compareTo(oneDay) >= 0) {
leaveTime=oneDay; leaveTime = oneDay;
} }
} }
temp.setGoTimes(0); //默认只要有请假,当天就不算全勤 temp.setGoTimes(0); //默认只要有请假,当天就不算全勤
LeaveTypeEnum leaveTypeEnum = LeaveTypeEnum.getByValue(item.getLeaveType()); LeaveTypeEnum leaveTypeEnum = LeaveTypeEnum.getByValue(item.getLeaveType());
if(leaveTypeEnum == null){ if (leaveTypeEnum == null) {
leaveTypeEnum = LeaveTypeEnum.事假; //默认为事假 leaveTypeEnum = LeaveTypeEnum.事假; //默认为事假
} }
attendanceSummary = leaveTypeEnum.getDesc()+"*1"; attendanceSummary = leaveTypeEnum.getDesc() + "*1";
switch (leaveTypeEnum) { switch (leaveTypeEnum) {
case 事假: case 事假:
temp.setPersonalLeave(leaveTime); temp.setPersonalLeave(leaveTime);
...@@ -266,11 +269,11 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc ...@@ -266,11 +269,11 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc
BeanUtils.copyProperties(item, staffStat, BeanUtil.getNullPropertyNames(item)); BeanUtils.copyProperties(item, staffStat, BeanUtil.getNullPropertyNames(item));
staffStat.setAttendanceSummary(attendanceSummary); staffStat.setAttendanceSummary(attendanceSummary);
AttendanceStaffStatEntity staffStatTemp = attendanceStaffStatService.selectOne(new AttendanceStaffStatQuery().staffId(item.getStaffId()).year(item.getYear()).month(item.getMonth()).day(item.getDay())); AttendanceStaffStatEntity staffStatTemp = attendanceStaffStatService.selectOne(new AttendanceStaffStatQuery().staffId(item.getStaffId()).year(item.getYear()).month(item.getMonth()).day(item.getDay()));
if(staffStatTemp!=null){ if (staffStatTemp != null) {
staffStat.setId(staffStatTemp.getId()); staffStat.setId(staffStatTemp.getId());
staffStat.setUpdateTime(new Date()); staffStat.setUpdateTime(new Date());
attendanceStaffStatService.update(staffStat); attendanceStaffStatService.update(staffStat);
}else { } else {
staffStat.setCreateTime(DateUtils.StrToDate(query.getSummaryTime())); staffStat.setCreateTime(DateUtils.StrToDate(query.getSummaryTime()));
staffStat.setCreateUserId(1l); staffStat.setCreateUserId(1l);
attendanceStaffStatService.save(staffStat); attendanceStaffStatService.save(staffStat);
...@@ -289,25 +292,25 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc ...@@ -289,25 +292,25 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc
this.dao.update(temp); this.dao.update(temp);
} }
String attendanceSummary = ""; String attendanceSummary = "";
if(item.getMorningTimes()>0){ if (item.getMorningTimes() > 0) {
attendanceSummary+="缺卡*"+item.getMorningTimes()+"次;"; attendanceSummary += "缺卡*" + item.getMorningTimes() + "次;";
} }
if(item.getLateTimes()>0){ if (item.getLateTimes() > 0) {
attendanceSummary+="迟到*"+item.getLateTimes()+"次;"; attendanceSummary += "迟到*" + item.getLateTimes() + "次;";
} }
if(item.getOvertimeTimes()>0){ if (item.getOvertimeTimes() > 0) {
attendanceSummary+="早退*"+item.getOvertimeTimes()+"次;"; attendanceSummary += "早退*" + item.getOvertimeTimes() + "次;";
} }
AttendanceStaffStatEntity staffStat = new AttendanceStaffStatEntity(); AttendanceStaffStatEntity staffStat = new AttendanceStaffStatEntity();
staffStat.initAttrValue(); staffStat.initAttrValue();
BeanUtils.copyProperties(item, staffStat, BeanUtil.getNullPropertyNames(item)); BeanUtils.copyProperties(item, staffStat, BeanUtil.getNullPropertyNames(item));
staffStat.setAttendanceSummary(attendanceSummary); staffStat.setAttendanceSummary(attendanceSummary);
AttendanceStaffStatEntity staffStatTemp = attendanceStaffStatService.selectOne(new AttendanceStaffStatQuery().staffId(item.getStaffId()).year(item.getYear()).month(item.getMonth()).day(item.getDay())); AttendanceStaffStatEntity staffStatTemp = attendanceStaffStatService.selectOne(new AttendanceStaffStatQuery().staffId(item.getStaffId()).year(item.getYear()).month(item.getMonth()).day(item.getDay()));
if(staffStatTemp!=null){ if (staffStatTemp != null) {
staffStat.setId(staffStatTemp.getId()); staffStat.setId(staffStatTemp.getId());
staffStat.setUpdateTime(new Date()); staffStat.setUpdateTime(new Date());
attendanceStaffStatService.update(staffStat); attendanceStaffStatService.update(staffStat);
}else { } else {
staffStat.setCreateTime(DateUtils.StrToDate(query.getSummaryTime())); staffStat.setCreateTime(DateUtils.StrToDate(query.getSummaryTime()));
staffStat.setCreateUserId(1l); staffStat.setCreateUserId(1l);
attendanceStaffStatService.save(staffStat); attendanceStaffStatService.save(staffStat);
...@@ -316,36 +319,38 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc ...@@ -316,36 +319,38 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc
} }
log.info("完成汇总当前日期异常考勤....."); log.info("完成汇总当前日期异常考勤.....");
log.info("日期:" + query.getSummaryTime() + ",考勤汇总执行完成,耗时:" + (System.currentTimeMillis() - currentTime) + "毫秒...."); log.info("日期:" + query.getSummaryTime() + ",考勤汇总执行完成,耗时:" + (System.currentTimeMillis() - currentTime) + "毫秒....");
}catch (Exception e){ } catch (Exception e) {
log.error("考勤汇总出错",e); log.error("考勤汇总出错", e);
} }
} }
@Override @Override
public Result<AttendanceStatEntity> findExt(AttendanceSummaryQuery params, PageInfo pageInfo, Context context) throws AppException { public Result<AttendanceStatEntity> findExt(AttendanceSummaryQuery params, PageInfo pageInfo, Context context) throws AppException {
if(params==null){ if (params == null) {
params = new AttendanceSummaryQuery(); params = new AttendanceSummaryQuery();
Calendar now = Calendar.getInstance(); /* Calendar now = Calendar.getInstance();
now.setTime(new Date()); now.setTime(new Date());
now.add(Calendar.DAY_OF_MONTH, -30); //默认查最近30天数据 now.add(Calendar.DAY_OF_MONTH, -30); //默认查最近30天数据
params.setSummaryTimeStart(DateUtils.getStrDate(now.getTime()));
*/
params.setSummaryTimeStart(DateUtil.offsetDay(new Date(), -30).toDateStr());
params.setSummaryTimeEnd(DateUtils.getCurrStrDate()); params.setSummaryTimeEnd(DateUtils.getCurrStrDate());
} }
if(StringUtils.isNotEmpty(params.getStaffName())){ if (StringUtils.isNotEmpty(params.getStaffName())) {
params.setStaffName("%"+params.getStaffName()+"%"); params.setStaffName("%" + params.getStaffName() + "%");
} }
if(StringUtils.isNotEmpty(params.getPhoneNumer())){ if (StringUtils.isNotEmpty(params.getPhoneNumer())) {
params.setPhoneNumer("%"+params.getPhoneNumer()+"%"); params.setPhoneNumer("%" + params.getPhoneNumer() + "%");
} }
if(pageInfo == null){ if (pageInfo == null) {
pageInfo = new PageInfo(10); pageInfo = new PageInfo(10);
} }
Result<AttendanceStatEntity> result = dao.getListExt(params,pageInfo); Result<AttendanceStatEntity> result = dao.getListExt(params, pageInfo);
if(CollectionUtils.isNotEmpty(result.getList())){ if (CollectionUtils.isNotEmpty(result.getList())) {
for(AttendanceStatEntity item:result.getList()){ for (AttendanceStatEntity item : result.getList()) {
params.setStaffId(item.getStaffId()); params.setStaffId(item.getStaffId());
List<AttendanceStaffStatEntity> statEntities = attendanceStaffStatService.getListExt(params); List<AttendanceStaffStatEntity> statEntities = attendanceStaffStatService.getListExt(params);
if(CollectionUtils.isNotEmpty(statEntities)){ if (CollectionUtils.isNotEmpty(statEntities)) {
item.setAttendanceStaffStatEntities(statEntities); item.setAttendanceStaffStatEntities(statEntities);
} }
} }
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
<result property="auditDesc" column="auditDesc" /> <result property="auditDesc" column="auditDesc" />
<result property="auditTime" column="auditTime" /> <result property="auditTime" column="auditTime" />
<result property="processStatus" column="processStatus" /> <result property="processStatus" column="processStatus" />
<result property="sourceDingTime" column="sourceDingTime" />
</resultMap> </resultMap>
...@@ -112,23 +113,26 @@ ...@@ -112,23 +113,26 @@
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('processStatus') or colPickMode == 1 and data.containsKey('processStatus')))"> <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('processStatus') or colPickMode == 1 and data.containsKey('processStatus')))">
a.processStatus, a.processStatus,
</if> </if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('sourceDingTime') or colPickMode == 1 and data.containsKey('sourceDingTime')))">
a.sourceDingTime,
</if>
</trim> </trim>
</sql> </sql>
<!-- 新增 区分主键自增加还是业务插入 --> <!-- 新增 区分主键自增加还是业务插入 -->
<insert id="insert" parameterType="AttendanceLeaveRecordEntity" useGeneratedKeys="true" keyProperty="id"> <insert id="insert" parameterType="AttendanceLeaveRecordEntity" useGeneratedKeys="true" keyProperty="id">
insert into mortals_xhx_attendance_leave_record insert into mortals_xhx_attendance_leave_record
(leavePersonId,leavePerson,deptId,deptName,phoneNumber,leaveType,startTime,endTime,duration,reason,approverId,approver,attachment,attachmentPath,remark,createUserId,createTime,updateUserId,updateTime,appealTime,auditResult,auditDesc,auditTime,processStatus) (leavePersonId,leavePerson,deptId,deptName,phoneNumber,leaveType,startTime,endTime,duration,reason,approverId,approver,attachment,attachmentPath,remark,createUserId,createTime,updateUserId,updateTime,appealTime,auditResult,auditDesc,auditTime,processStatus,sourceDingTime)
VALUES VALUES
(#{leavePersonId},#{leavePerson},#{deptId},#{deptName},#{phoneNumber},#{leaveType},#{startTime},#{endTime},#{duration},#{reason},#{approverId},#{approver},#{attachment},#{attachmentPath},#{remark},#{createUserId},#{createTime},#{updateUserId},#{updateTime},#{appealTime},#{auditResult},#{auditDesc},#{auditTime},#{processStatus}) (#{leavePersonId},#{leavePerson},#{deptId},#{deptName},#{phoneNumber},#{leaveType},#{startTime},#{endTime},#{duration},#{reason},#{approverId},#{approver},#{attachment},#{attachmentPath},#{remark},#{createUserId},#{createTime},#{updateUserId},#{updateTime},#{appealTime},#{auditResult},#{auditDesc},#{auditTime},#{processStatus},#{sourceDingTime})
</insert> </insert>
<!-- 批量新增 --> <!-- 批量新增 -->
<insert id="insertBatch" parameterType="paramDto"> <insert id="insertBatch" parameterType="paramDto">
insert into mortals_xhx_attendance_leave_record insert into mortals_xhx_attendance_leave_record
(leavePersonId,leavePerson,deptId,deptName,phoneNumber,leaveType,startTime,endTime,duration,reason,approverId,approver,attachment,attachmentPath,remark,createUserId,createTime,updateUserId,updateTime,appealTime,auditResult,auditDesc,auditTime,processStatus) (leavePersonId,leavePerson,deptId,deptName,phoneNumber,leaveType,startTime,endTime,duration,reason,approverId,approver,attachment,attachmentPath,remark,createUserId,createTime,updateUserId,updateTime,appealTime,auditResult,auditDesc,auditTime,processStatus,sourceDingTime)
VALUES VALUES
<foreach collection="data.dataList" item="item" index="index" separator="," > <foreach collection="data.dataList" item="item" index="index" separator="," >
(#{item.leavePersonId},#{item.leavePerson},#{item.deptId},#{item.deptName},#{item.phoneNumber},#{item.leaveType},#{item.startTime},#{item.endTime},#{item.duration},#{item.reason},#{item.approverId},#{item.approver},#{item.attachment},#{item.attachmentPath},#{item.remark},#{item.createUserId},#{item.createTime},#{item.updateUserId},#{item.updateTime},#{item.appealTime},#{item.auditResult},#{item.auditDesc},#{item.auditTime},#{item.processStatus}) (#{item.leavePersonId},#{item.leavePerson},#{item.deptId},#{item.deptName},#{item.phoneNumber},#{item.leaveType},#{item.startTime},#{item.endTime},#{item.duration},#{item.reason},#{item.approverId},#{item.approver},#{item.attachment},#{item.attachmentPath},#{item.remark},#{item.createUserId},#{item.createTime},#{item.updateUserId},#{item.updateTime},#{item.appealTime},#{item.auditResult},#{item.auditDesc},#{item.auditTime},#{item.processStatus},#{item.sourceDingTime})
</foreach> </foreach>
</insert> </insert>
...@@ -237,6 +241,9 @@ ...@@ -237,6 +241,9 @@
<if test="(colPickMode==0 and data.containsKey('processStatusIncrement')) or (colPickMode==1 and !data.containsKey('processStatusIncrement'))"> <if test="(colPickMode==0 and data.containsKey('processStatusIncrement')) or (colPickMode==1 and !data.containsKey('processStatusIncrement'))">
a.processStatus=ifnull(a.processStatus,0) + #{data.processStatusIncrement}, a.processStatus=ifnull(a.processStatus,0) + #{data.processStatusIncrement},
</if> </if>
<if test="(colPickMode==0 and data.containsKey('sourceDingTime')) or (colPickMode==1 and !data.containsKey('sourceDingTime'))">
a.sourceDingTime=#{data.sourceDingTime},
</if>
</trim> </trim>
<trim suffixOverrides="where" suffix=""> <trim suffixOverrides="where" suffix="">
where where
...@@ -462,6 +469,13 @@ ...@@ -462,6 +469,13 @@
</choose> </choose>
</foreach> </foreach>
</trim> </trim>
<trim prefix="sourceDingTime=(case" suffix="ELSE sourceDingTime end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('sourceDingTime')) or (colPickMode==1 and !item.containsKey('sourceDingTime'))">
when a.id=#{item.id} then #{item.sourceDingTime}
</if>
</foreach>
</trim>
</trim> </trim>
where id in where id in
<foreach collection="data.dataList" item="item" index="index" open="(" separator="," close=")"> <foreach collection="data.dataList" item="item" index="index" open="(" separator="," close=")">
...@@ -1127,6 +1141,27 @@ ...@@ -1127,6 +1141,27 @@
${_conditionType_} a.processStatus <![CDATA[ <= ]]> #{${_conditionParam_}.processStatusEnd} ${_conditionType_} a.processStatus <![CDATA[ <= ]]> #{${_conditionParam_}.processStatusEnd}
</if> </if>
<if test="conditionParamRef.containsKey('sourceDingTime')">
<if test="conditionParamRef.sourceDingTime != null and conditionParamRef.sourceDingTime != ''">
${_conditionType_} a.sourceDingTime like #{${_conditionParam_}.sourceDingTime}
</if>
<if test="conditionParamRef.sourceDingTime == null">
${_conditionType_} a.sourceDingTime is null
</if>
</if>
<if test="conditionParamRef.containsKey('sourceDingTimeList') and conditionParamRef.sourceDingTimeList.size() > 0">
${_conditionType_} a.sourceDingTime in
<foreach collection="conditionParamRef.sourceDingTimeList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('sourceDingTimeNotList') and conditionParamRef.sourceDingTimeNotList.size() > 0">
${_conditionType_} a.sourceDingTime not in
<foreach collection="conditionParamRef.sourceDingTimeNotList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
</sql> </sql>
<sql id="_orderCols_"> <sql id="_orderCols_">
<if test="orderColList != null and !orderColList.isEmpty()"> <if test="orderColList != null and !orderColList.isEmpty()">
...@@ -1265,6 +1300,11 @@ ...@@ -1265,6 +1300,11 @@
<if test='orderCol.processStatus != null and "DESC".equalsIgnoreCase(orderCol.processStatus)'>DESC</if> <if test='orderCol.processStatus != null and "DESC".equalsIgnoreCase(orderCol.processStatus)'>DESC</if>
, ,
</if> </if>
<if test="orderCol.containsKey('sourceDingTime')">
a.sourceDingTime
<if test='orderCol.sourceDingTime != null and "DESC".equalsIgnoreCase(orderCol.sourceDingTime)'>DESC</if>
,
</if>
</trim> </trim>
</if> </if>
</sql> </sql>
......
...@@ -852,3 +852,7 @@ CREATE TABLE mortals_xhx_attendance_record( ...@@ -852,3 +852,7 @@ CREATE TABLE mortals_xhx_attendance_record(
`className` varchar(128) COMMENT '班次名称', `className` varchar(128) COMMENT '班次名称',
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='考勤打卡记录信息'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='考勤打卡记录信息';
ALTER TABLE mortals_xhx_attendance_leave_record ADD COLUMN `sourceDingTime` varchar(64) COMMENT '钉钉原始请假时间记录';
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment