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

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

parent b7455b29
......@@ -126,7 +126,6 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
if (!ObjectUtils.isEmpty(saveRecordList)) {
recordHikService.save(saveRecordList);
}
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;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mortals.framework.annotation.Excel;
import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.attendance.model.vo.AttendanceRecordDetailVo;
/**
* 考勤打卡记录详细信息实体对象
*
......@@ -55,155 +57,190 @@ public class AttendanceRecordDetailEntity extends AttendanceRecordDetailVo {
private Integer orderNum;
public AttendanceRecordDetailEntity() {
}
public AttendanceRecordDetailEntity(){}
/**
* 获取 考勤记录ID
*
* @return Long
*/
public Long getRecordId(){
public Long getRecordId() {
return recordId;
}
/**
* 设置 考勤记录ID
*
* @param recordId
*/
public void setRecordId(Long recordId){
public void setRecordId(Long recordId) {
this.recordId = recordId;
}
/**
* 获取 班次ID
*
* @return Long
*/
public Long getShiftsId(){
public Long getShiftsId() {
return shiftsId;
}
/**
* 设置 班次ID
*
* @param shiftsId
*/
public void setShiftsId(Long shiftsId){
public void setShiftsId(Long shiftsId) {
this.shiftsId = shiftsId;
}
/**
* 获取 班次名称
*
* @return String
*/
public String getShiftsName(){
public String getShiftsName() {
return shiftsName;
}
/**
* 设置 班次名称
*
* @param shiftsName
*/
public void setShiftsName(String shiftsName){
public void setShiftsName(String shiftsName) {
this.shiftsName = shiftsName;
}
/**
* 获取 上班打卡时间
*
* @return Date
*/
public Date getGoWorkDate(){
public Date getGoWorkDate() {
return goWorkDate;
}
/**
* 设置 上班打卡时间
*
* @param goWorkDate
*/
public void setGoWorkDate(Date goWorkDate){
public void setGoWorkDate(Date goWorkDate) {
this.goWorkDate = goWorkDate;
}
/**
* 获取 上班打卡结果(1.正常,2.请假,3.缺卡,4.迟到,5.早退)
*
* @return Integer
*/
public Integer getGoWorkResult(){
public Integer getGoWorkResult() {
return goWorkResult;
}
/**
* 设置 上班打卡结果(1.正常,2.请假,3.缺卡,4.迟到,5.早退)
*
* @param goWorkResult
*/
public void setGoWorkResult(Integer goWorkResult){
public void setGoWorkResult(Integer goWorkResult) {
this.goWorkResult = goWorkResult;
}
/**
* 获取 下班打卡时间
*
* @return Date
*/
public Date getOffWorkDate(){
public Date getOffWorkDate() {
return offWorkDate;
}
/**
* 设置 下班打卡时间
*
* @param offWorkDate
*/
public void setOffWorkDate(Date offWorkDate){
public void setOffWorkDate(Date offWorkDate) {
this.offWorkDate = offWorkDate;
}
/**
* 获取 下班打卡结果(1.正常,2.请假,3.缺卡,4.迟到,5.早退)
*
* @return Integer
*/
public Integer getOffWorkResult(){
public Integer getOffWorkResult() {
return offWorkResult;
}
/**
* 设置 下班打卡结果(1.正常,2.请假,3.缺卡,4.迟到,5.早退)
*
* @param offWorkResult
*/
public void setOffWorkResult(Integer offWorkResult){
public void setOffWorkResult(Integer offWorkResult) {
this.offWorkResult = offWorkResult;
}
/**
* 获取 备注
*
* @return String
*/
public String getRemark(){
public String getRemark() {
return remark;
}
/**
* 设置 备注
*
* @param remark
*/
public void setRemark(String remark){
public void setRemark(String remark) {
this.remark = remark;
}
/**
* 获取 排序字段
*
* @return Integer
*/
public Integer getOrderNum(){
public Integer getOrderNum() {
return orderNum;
}
/**
* 设置 排序字段
*
* @param orderNum
*/
public void setOrderNum(Integer orderNum){
public void setOrderNum(Integer orderNum) {
this.orderNum = orderNum;
}
@Override
public int hashCode() {
return this.getId().hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == null) return false;
if (obj instanceof AttendanceRecordDetailEntity) {
AttendanceRecordDetailEntity tmp = (AttendanceRecordDetailEntity) obj;
if (this.getId() == tmp.getId()) {
if (this.getOrderNum() == tmp.getOrderNum()) {
return true;
}
}
return false;
}
public String toString(){
public String toString() {
StringBuilder sb = new StringBuilder("");
sb.append(",recordId:").append(getRecordId());
sb.append(",shiftsId:").append(getShiftsId());
......@@ -217,7 +254,7 @@ public class AttendanceRecordDetailEntity extends AttendanceRecordDetailVo {
return sb.toString();
}
public void initAttrValue(){
public void initAttrValue() {
this.recordId = null;
......
......@@ -64,6 +64,7 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
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, 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遍历.先把所有键取出来
Set<String> workNumSet = listMap.keySet();
//根据键取出value
......@@ -97,16 +98,13 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
//获取考勤打卡时间
Date attendanceDate = item.getAttendanceDate();
//通过工号查询员工信息
StaffQuery staffQuery = new StaffQuery();
StaffEntity staffEntity = staffService.selectOne(staffQuery.workNum(item.getWorkNum()));
StaffEntity staffEntity = staffService.selectOne(new StaffQuery().workNum(item.getWorkNum()));
//通过员工id查询考勤人员信息
AttendanceGroupStaffQuery attendanceGroupStaffQuery = new AttendanceGroupStaffQuery();
List<AttendanceGroupStaffEntity> attendanceGroupStaffEntities = attendanceGroupStaffService.find(attendanceGroupStaffQuery.staffId(staffEntity.getId()));
List<AttendanceGroupStaffEntity> attendanceGroupStaffEntities = attendanceGroupStaffService.find(new AttendanceGroupStaffQuery().staffId(staffEntity.getId()));
//查询该考勤人员,如果查出来的考勤人员信息list长度为1 则该考勤人员只有一个考勤组
if (StringUtils.isNotNull(attendanceGroupStaffEntities) && attendanceGroupStaffEntities.size()==1){
//查询考勤组
AttendanceGroupQuery attendanceGroupQuery = new AttendanceGroupQuery();
AttendanceGroupEntity attendanceGroupEntity = attendanceGroupService.selectOne(attendanceGroupQuery.id(attendanceGroupStaffEntities.get(0).getGroupId()));
AttendanceGroupEntity attendanceGroupEntity = attendanceGroupService.selectOne(new AttendanceGroupQuery().id(attendanceGroupStaffEntities.get(0).getGroupId()));
//查询考勤组详细信息获取班次
AttendanceGroupFixedworkQuery attendanceGroupFixedworkQuery = new AttendanceGroupFixedworkQuery();
AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity = attendanceGroupFixedworkService.selectOne(attendanceGroupFixedworkQuery.groupId(attendanceGroupEntity.getId()));
......
package com.mortals.xhx.module.attendance.web;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.param.service.ParamService;
import com.mortals.xhx.module.attendance.model.*;
import com.mortals.xhx.module.attendance.service.AttendanceClassService;
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.service.DeptService;
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.RestController;
import org.springframework.web.bind.annotation.*;
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 org.apache.commons.lang3.ArrayUtils;
import com.mortals.framework.util.StringUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
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
* @date 2023-04-07
*/
* 考勤打卡记录信息
*
* @author zxfei
* @date 2023-04-07
*/
@RestController
@RequestMapping("attendance/record")
public class AttendanceRecordController extends BaseCRUDJsonBodyMappingController<AttendanceRecordService,AttendanceRecordEntity,Long> {
public class AttendanceRecordController extends BaseCRUDJsonBodyMappingController<AttendanceRecordService, AttendanceRecordEntity, Long> {
@Autowired
private ParamService paramService;
......@@ -50,18 +41,70 @@ public class AttendanceRecordController extends BaseCRUDJsonBodyMappingControlle
@Autowired
private AttendanceClassService attendanceClassService;
public AttendanceRecordController(){
super.setModuleDesc( "考勤打卡记录信息");
public AttendanceRecordController() {
super.setModuleDesc("考勤打卡记录信息");
}
@Override
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,"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, "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, "classId", attendanceClassService.find(new AttendanceClassQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getClassName())));
//设置
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