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

添加修改每日考勤列表返回数据

parent b7455b29
...@@ -126,7 +126,6 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService { ...@@ -126,7 +126,6 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
if (!ObjectUtils.isEmpty(saveRecordList)) { if (!ObjectUtils.isEmpty(saveRecordList)) {
recordHikService.save(saveRecordList); recordHikService.save(saveRecordList);
} }
log.info("saveRecordList size:{}", saveRecordList.size()); log.info("saveRecordList size:{}", saveRecordList.size());
} }
......
package com.mortals.xhx.module.attendance.model;
import lombok.Data;
/**
* 动态列
*
* @author:
* @date: 2023/4/20 11:08
*/
@Data
public class AttDsyncColumn {
/**
* 属性名称
*/
private String name;
/**
* 属性列
*/
private String property;
/**
* 顺序
*/
private Integer orderNum;
}
...@@ -3,10 +3,12 @@ package com.mortals.xhx.module.attendance.model; ...@@ -3,10 +3,12 @@ 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 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;
import com.mortals.xhx.module.attendance.model.vo.AttendanceRecordDetailVo; import com.mortals.xhx.module.attendance.model.vo.AttendanceRecordDetailVo;
/** /**
* 考勤打卡记录详细信息实体对象 * 考勤打卡记录详细信息实体对象
* *
...@@ -55,155 +57,190 @@ public class AttendanceRecordDetailEntity extends AttendanceRecordDetailVo { ...@@ -55,155 +57,190 @@ public class AttendanceRecordDetailEntity extends AttendanceRecordDetailVo {
private Integer orderNum; private Integer orderNum;
public AttendanceRecordDetailEntity() {
}
public AttendanceRecordDetailEntity(){}
/** /**
* 获取 考勤记录ID * 获取 考勤记录ID
*
* @return Long * @return Long
*/ */
public Long getRecordId(){ public Long getRecordId() {
return recordId; return recordId;
} }
/** /**
* 设置 考勤记录ID * 设置 考勤记录ID
*
* @param recordId * @param recordId
*/ */
public void setRecordId(Long recordId){ public void setRecordId(Long recordId) {
this.recordId = recordId; this.recordId = recordId;
} }
/** /**
* 获取 班次ID * 获取 班次ID
*
* @return Long * @return Long
*/ */
public Long getShiftsId(){ public Long getShiftsId() {
return shiftsId; return shiftsId;
} }
/** /**
* 设置 班次ID * 设置 班次ID
*
* @param shiftsId * @param shiftsId
*/ */
public void setShiftsId(Long shiftsId){ public void setShiftsId(Long shiftsId) {
this.shiftsId = shiftsId; this.shiftsId = shiftsId;
} }
/** /**
* 获取 班次名称 * 获取 班次名称
*
* @return String * @return String
*/ */
public String getShiftsName(){ public String getShiftsName() {
return shiftsName; return shiftsName;
} }
/** /**
* 设置 班次名称 * 设置 班次名称
*
* @param shiftsName * @param shiftsName
*/ */
public void setShiftsName(String shiftsName){ public void setShiftsName(String shiftsName) {
this.shiftsName = shiftsName; this.shiftsName = shiftsName;
} }
/** /**
* 获取 上班打卡时间 * 获取 上班打卡时间
*
* @return Date * @return Date
*/ */
public Date getGoWorkDate(){ public Date getGoWorkDate() {
return goWorkDate; return goWorkDate;
} }
/** /**
* 设置 上班打卡时间 * 设置 上班打卡时间
*
* @param goWorkDate * @param goWorkDate
*/ */
public void setGoWorkDate(Date goWorkDate){ public void setGoWorkDate(Date goWorkDate) {
this.goWorkDate = goWorkDate; this.goWorkDate = goWorkDate;
} }
/** /**
* 获取 上班打卡结果(1.正常,2.请假,3.缺卡,4.迟到,5.早退) * 获取 上班打卡结果(1.正常,2.请假,3.缺卡,4.迟到,5.早退)
*
* @return Integer * @return Integer
*/ */
public Integer getGoWorkResult(){ public Integer getGoWorkResult() {
return goWorkResult; return goWorkResult;
} }
/** /**
* 设置 上班打卡结果(1.正常,2.请假,3.缺卡,4.迟到,5.早退) * 设置 上班打卡结果(1.正常,2.请假,3.缺卡,4.迟到,5.早退)
*
* @param goWorkResult * @param goWorkResult
*/ */
public void setGoWorkResult(Integer goWorkResult){ public void setGoWorkResult(Integer goWorkResult) {
this.goWorkResult = goWorkResult; this.goWorkResult = goWorkResult;
} }
/** /**
* 获取 下班打卡时间 * 获取 下班打卡时间
*
* @return Date * @return Date
*/ */
public Date getOffWorkDate(){ public Date getOffWorkDate() {
return offWorkDate; return offWorkDate;
} }
/** /**
* 设置 下班打卡时间 * 设置 下班打卡时间
*
* @param offWorkDate * @param offWorkDate
*/ */
public void setOffWorkDate(Date offWorkDate){ public void setOffWorkDate(Date offWorkDate) {
this.offWorkDate = offWorkDate; this.offWorkDate = offWorkDate;
} }
/** /**
* 获取 下班打卡结果(1.正常,2.请假,3.缺卡,4.迟到,5.早退) * 获取 下班打卡结果(1.正常,2.请假,3.缺卡,4.迟到,5.早退)
*
* @return Integer * @return Integer
*/ */
public Integer getOffWorkResult(){ public Integer getOffWorkResult() {
return offWorkResult; return offWorkResult;
} }
/** /**
* 设置 下班打卡结果(1.正常,2.请假,3.缺卡,4.迟到,5.早退) * 设置 下班打卡结果(1.正常,2.请假,3.缺卡,4.迟到,5.早退)
*
* @param offWorkResult * @param offWorkResult
*/ */
public void setOffWorkResult(Integer offWorkResult){ public void setOffWorkResult(Integer offWorkResult) {
this.offWorkResult = offWorkResult; this.offWorkResult = offWorkResult;
} }
/** /**
* 获取 备注 * 获取 备注
*
* @return String * @return String
*/ */
public String getRemark(){ public String getRemark() {
return remark; return remark;
} }
/** /**
* 设置 备注 * 设置 备注
*
* @param remark * @param remark
*/ */
public void setRemark(String remark){ public void setRemark(String remark) {
this.remark = remark; this.remark = remark;
} }
/** /**
* 获取 排序字段 * 获取 排序字段
*
* @return Integer * @return Integer
*/ */
public Integer getOrderNum(){ public Integer getOrderNum() {
return orderNum; return orderNum;
} }
/** /**
* 设置 排序字段 * 设置 排序字段
*
* @param orderNum * @param orderNum
*/ */
public void setOrderNum(Integer orderNum){ public void setOrderNum(Integer orderNum) {
this.orderNum = orderNum; this.orderNum = orderNum;
} }
@Override @Override
public int hashCode() { public int hashCode() {
return this.getId().hashCode(); return this.getId().hashCode();
} }
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
if (obj == null) return false; if (obj == null) return false;
if (obj instanceof AttendanceRecordDetailEntity) { if (obj instanceof AttendanceRecordDetailEntity) {
AttendanceRecordDetailEntity tmp = (AttendanceRecordDetailEntity) obj; AttendanceRecordDetailEntity tmp = (AttendanceRecordDetailEntity) obj;
if (this.getId() == tmp.getId()) { if (this.getOrderNum() == tmp.getOrderNum()) {
return true; return true;
} }
} }
return false; return false;
} }
public String toString(){ public String toString() {
StringBuilder sb = new StringBuilder(""); StringBuilder sb = new StringBuilder("");
sb.append(",recordId:").append(getRecordId()); sb.append(",recordId:").append(getRecordId());
sb.append(",shiftsId:").append(getShiftsId()); sb.append(",shiftsId:").append(getShiftsId());
...@@ -217,7 +254,7 @@ public class AttendanceRecordDetailEntity extends AttendanceRecordDetailVo { ...@@ -217,7 +254,7 @@ public class AttendanceRecordDetailEntity extends AttendanceRecordDetailVo {
return sb.toString(); return sb.toString();
} }
public void initAttrValue(){ public void initAttrValue() {
this.recordId = null; this.recordId = null;
......
...@@ -64,6 +64,7 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte ...@@ -64,6 +64,7 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
List<AttendanceRecordHikEntity> collect = list.stream().sorted(Comparator.comparing(AttendanceRecordHikEntity::getAttendanceDate)).collect(Collectors.toList()); List<AttendanceRecordHikEntity> collect = list.stream().sorted(Comparator.comparing(AttendanceRecordHikEntity::getAttendanceDate)).collect(Collectors.toList());
//根据工号对考勤数据进行分组 //根据工号对考勤数据进行分组
Map<String, List<AttendanceRecordHikEntity>> listMap = collect.stream().collect(Collectors.groupingBy(AttendanceRecordHikEntity::getWorkNum)); Map<String, List<AttendanceRecordHikEntity>> listMap = collect.stream().collect(Collectors.groupingBy(AttendanceRecordHikEntity::getWorkNum));
//Map<String, Map<String, List<AttendanceRecordHikEntity>>> groupMap = collect.stream().collect(Collectors.groupingBy(AttendanceRecordHikEntity::getWorkNum, Collectors.groupingBy(x -> com.mortals.framework.util.DateUtils.getDateTimeStr(x.getAttendanceDate(), "yyyy-MM-dd"))));
//map遍历.先把所有键取出来 //map遍历.先把所有键取出来
Set<String> workNumSet = listMap.keySet(); Set<String> workNumSet = listMap.keySet();
//根据键取出value //根据键取出value
...@@ -97,16 +98,13 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte ...@@ -97,16 +98,13 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
//获取考勤打卡时间 //获取考勤打卡时间
Date attendanceDate = item.getAttendanceDate(); Date attendanceDate = item.getAttendanceDate();
//通过工号查询员工信息 //通过工号查询员工信息
StaffQuery staffQuery = new StaffQuery(); StaffEntity staffEntity = staffService.selectOne(new StaffQuery().workNum(item.getWorkNum()));
StaffEntity staffEntity = staffService.selectOne(staffQuery.workNum(item.getWorkNum()));
//通过员工id查询考勤人员信息 //通过员工id查询考勤人员信息
AttendanceGroupStaffQuery attendanceGroupStaffQuery = new AttendanceGroupStaffQuery(); List<AttendanceGroupStaffEntity> attendanceGroupStaffEntities = attendanceGroupStaffService.find(new AttendanceGroupStaffQuery().staffId(staffEntity.getId()));
List<AttendanceGroupStaffEntity> attendanceGroupStaffEntities = attendanceGroupStaffService.find(attendanceGroupStaffQuery.staffId(staffEntity.getId()));
//查询该考勤人员,如果查出来的考勤人员信息list长度为1 则该考勤人员只有一个考勤组 //查询该考勤人员,如果查出来的考勤人员信息list长度为1 则该考勤人员只有一个考勤组
if (StringUtils.isNotNull(attendanceGroupStaffEntities) && attendanceGroupStaffEntities.size()==1){ if (StringUtils.isNotNull(attendanceGroupStaffEntities) && attendanceGroupStaffEntities.size()==1){
//查询考勤组 //查询考勤组
AttendanceGroupQuery attendanceGroupQuery = new AttendanceGroupQuery(); AttendanceGroupEntity attendanceGroupEntity = attendanceGroupService.selectOne(new AttendanceGroupQuery().id(attendanceGroupStaffEntities.get(0).getGroupId()));
AttendanceGroupEntity attendanceGroupEntity = attendanceGroupService.selectOne(attendanceGroupQuery.id(attendanceGroupStaffEntities.get(0).getGroupId()));
//查询考勤组详细信息获取班次 //查询考勤组详细信息获取班次
AttendanceGroupFixedworkQuery attendanceGroupFixedworkQuery = new AttendanceGroupFixedworkQuery(); AttendanceGroupFixedworkQuery attendanceGroupFixedworkQuery = new AttendanceGroupFixedworkQuery();
AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity = attendanceGroupFixedworkService.selectOne(attendanceGroupFixedworkQuery.groupId(attendanceGroupEntity.getId())); AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity = attendanceGroupFixedworkService.selectOne(attendanceGroupFixedworkQuery.groupId(attendanceGroupEntity.getId()));
......
package com.mortals.xhx.module.attendance.web; package com.mortals.xhx.module.attendance.web;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController; import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.param.service.ParamService; import com.mortals.xhx.base.system.param.service.ParamService;
import com.mortals.xhx.module.attendance.model.*; import com.mortals.xhx.module.attendance.model.*;
import com.mortals.xhx.module.attendance.service.AttendanceClassService; import com.mortals.xhx.module.attendance.service.AttendanceClassService;
import com.mortals.xhx.module.attendance.service.AttendanceGroupService; import com.mortals.xhx.module.attendance.service.AttendanceGroupService;
import com.mortals.xhx.module.dept.model.DeptEntity;
import com.mortals.xhx.module.dept.model.DeptQuery; import com.mortals.xhx.module.dept.model.DeptQuery;
import com.mortals.xhx.module.dept.service.DeptService; import com.mortals.xhx.module.dept.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.module.attendance.service.AttendanceRecordService; import com.mortals.xhx.module.attendance.service.AttendanceRecordService;
import org.apache.commons.lang3.ArrayUtils;
import com.mortals.framework.util.StringUtils; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.alibaba.fastjson.JSONObject;
import java.util.Arrays;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import static com.mortals.framework.ap.SysConstains.*;
/** /**
* * 考勤打卡记录信息
* 考勤打卡记录信息 *
* * @author zxfei
* @author zxfei * @date 2023-04-07
* @date 2023-04-07 */
*/
@RestController @RestController
@RequestMapping("attendance/record") @RequestMapping("attendance/record")
public class AttendanceRecordController extends BaseCRUDJsonBodyMappingController<AttendanceRecordService,AttendanceRecordEntity,Long> { public class AttendanceRecordController extends BaseCRUDJsonBodyMappingController<AttendanceRecordService, AttendanceRecordEntity, Long> {
@Autowired @Autowired
private ParamService paramService; private ParamService paramService;
...@@ -50,18 +41,70 @@ public class AttendanceRecordController extends BaseCRUDJsonBodyMappingControlle ...@@ -50,18 +41,70 @@ public class AttendanceRecordController extends BaseCRUDJsonBodyMappingControlle
@Autowired @Autowired
private AttendanceClassService attendanceClassService; private AttendanceClassService attendanceClassService;
public AttendanceRecordController(){ public AttendanceRecordController() {
super.setModuleDesc( "考勤打卡记录信息"); super.setModuleDesc("考勤打卡记录信息");
} }
@Override @Override
protected void init(Map<String, Object> model, Context context) { protected void init(Map<String, Object> model, Context context) {
this.addDict(model,"deptId",deptService.find(new DeptQuery()).stream().collect(Collectors.toMap(x->x.getId().toString(),y->y.getDeptName()))); this.addDict(model, "deptId", deptService.find(new DeptQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getDeptName())));
this.addDict(model,"groupId",attendanceGroupService.find(new AttendanceGroupQuery()).stream().collect(Collectors.toMap(x->x.getId().toString(),y->y.getGroupName()))); this.addDict(model, "groupId", attendanceGroupService.find(new AttendanceGroupQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getGroupName())));
this.addDict(model,"classId",attendanceClassService.find(new AttendanceClassQuery()).stream().collect(Collectors.toMap(x->x.getId().toString(),y->y.getClassName()))); this.addDict(model, "classId", attendanceClassService.find(new AttendanceClassQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getClassName())));
//设置
super.init(model, context); super.init(model, context);
} }
@Override
protected int doListAfter(AttendanceRecordEntity query, Map<String, Object> model, Context context) throws AppException {
List<AttendanceRecordEntity> list = (List<AttendanceRecordEntity>) model.get(KEY_RESULT_DATA);
List<AttendanceRecordDetailEntity> collect = list.stream()
.flatMap(item -> item.getAttendanceRecordDetailList().stream())
.distinct()
.sorted(Comparator.comparingInt(AttendanceRecordDetailEntity::getOrderNum))
.collect(Collectors.toList());
List<AttDsyncColumn> dsyncColumns = new ArrayList<>();
collect.forEach(item -> {
AttDsyncColumn attDsyncColumn = new AttDsyncColumn();
attDsyncColumn.setName(String.format("上班%s打卡时间", item.getOrderNum()));
attDsyncColumn.setProperty("goWorkDate");
attDsyncColumn.setOrderNum(item.getOrderNum());
dsyncColumns.add(attDsyncColumn);
attDsyncColumn = new AttDsyncColumn();
attDsyncColumn.setName(String.format("下班%s打卡时间", item.getOrderNum()));
attDsyncColumn.setProperty("offWorkDate");
attDsyncColumn.setOrderNum(item.getOrderNum());
dsyncColumns.add(attDsyncColumn);
});
Set<Integer> dsyncSet = dsyncColumns.stream().map(i -> i.getOrderNum()).collect(Collectors.toSet());
//填充空的detail 对象
Iterator<AttendanceRecordEntity> iterator = list.iterator();
while (iterator.hasNext()) {
AttendanceRecordEntity recordEntity = iterator.next();
Set<Integer> existSet = recordEntity.getAttendanceRecordDetailList().stream().map(i -> i.getOrderNum()).collect(Collectors.toSet());
//判断详细列表中是否存在顺序 没有自动填充空对象数据
List<AttendanceRecordDetailEntity> addDetailList = dsyncSet.stream().map(i -> {
if (!existSet.contains(i)) {
AttendanceRecordDetailEntity recordDetailEntity = new AttendanceRecordDetailEntity();
recordDetailEntity.initAttrValue();
recordDetailEntity.setOrderNum(i);
return recordDetailEntity;
}
return null;
}).filter(f -> f != null).collect(Collectors.toList());
if (ObjectUtils.isEmpty(addDetailList)) {
recordEntity.getAttendanceRecordDetailList().addAll(addDetailList);
List<AttendanceRecordDetailEntity> orderList = recordEntity.getAttendanceRecordDetailList().stream().sorted(Comparator.comparingInt(AttendanceRecordDetailEntity::getOrderNum))
.collect(Collectors.toList());
recordEntity.setAttendanceRecordDetailList(orderList);
}
}
model.put("dyncColumns", dsyncColumns);
return super.doListAfter(query, model, context);
}
} }
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