Commit e4faebfb authored by wenqy's avatar wenqy

异常处理撤销 考勤情况

parent 0ad72915
...@@ -11,7 +11,9 @@ import java.util.Map; ...@@ -11,7 +11,9 @@ import java.util.Map;
public enum ErrorStatusEnum { public enum ErrorStatusEnum {
缺卡(0, "缺卡"), 缺卡(0, "缺卡"),
早退(1, "早退"), 早退(1, "早退"),
迟到(2, "迟到"); 迟到(2, "迟到"),
正常(3, "正常");
private Integer value; private Integer value;
private String desc; private String desc;
......
package com.mortals.xhx.module.attendance.model;
import lombok.Data;
/**
* 出勤情况
*
* @author:
* @date: 2023/4/20 14:24
*/
@Data
public class AttendanceStatus {
/**
* 需要出勤人数
*/
private Integer needAttNum;
/**
* 未出勤
*/
private Integer noAtt;
/**
* 出勤率
*/
private String attPercentage;
/**
* 迟到
*/
private Integer beLate;
/**
* 早退
*/
private Integer leaveEarly;
/**
* 缺卡
*/
private Integer lackOfCards;
}
...@@ -19,4 +19,9 @@ public class AttendanceRecordErrorVo extends BaseEntityLong { ...@@ -19,4 +19,9 @@ public class AttendanceRecordErrorVo extends BaseEntityLong {
*/ */
private String goOrOff; private String goOrOff;
/**
* 接收批量处理的结果
*/
private List<AttendanceRecordErrorEntity> recordErrorEntities;
} }
...@@ -24,5 +24,15 @@ public class AttendanceRecordVo extends BaseEntityLong { ...@@ -24,5 +24,15 @@ public class AttendanceRecordVo extends BaseEntityLong {
/** 结束 打卡日期 */ /** 结束 打卡日期 */
private String attendanceDateEnd; private String attendanceDateEnd;
/**
* 班次id
*/
private Long classId;
/**
* 班组id
*/
private Long groupId;
} }
...@@ -224,7 +224,7 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte ...@@ -224,7 +224,7 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
AttendanceClassDetailQuery attendanceClassDetailQuery = new AttendanceClassDetailQuery(); AttendanceClassDetailQuery attendanceClassDetailQuery = new AttendanceClassDetailQuery();
List<AttendanceClassDetailEntity> attendanceClassDetailEntities = attendanceClassDetailService.find(attendanceClassDetailQuery.classId(attendanceClassEntity.getId())); List<AttendanceClassDetailEntity> attendanceClassDetailEntities = attendanceClassDetailService.find(attendanceClassDetailQuery.classId(attendanceClassEntity.getId()));
Integer orderNum = 0; Integer orderNum = 0;
if (detailEntity!=null&&detailEntity.size()>0){ if (detailEntity!=null||detailEntity.size()==0){
for (AttendanceClassDetailEntity classDetailEntity : attendanceClassDetailEntities) { for (AttendanceClassDetailEntity classDetailEntity : attendanceClassDetailEntities) {
orderNum++; orderNum++;
AttendanceRecordDetailEntity recordDetailEntity = new AttendanceRecordDetailEntity(); AttendanceRecordDetailEntity recordDetailEntity = new AttendanceRecordDetailEntity();
......
...@@ -10,6 +10,7 @@ import com.mortals.xhx.module.attendance.service.AttendanceClassService; ...@@ -10,6 +10,7 @@ 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.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.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
...@@ -61,6 +62,17 @@ public class AttendanceRecordController extends BaseCRUDJsonBodyMappingControlle ...@@ -61,6 +62,17 @@ public class AttendanceRecordController extends BaseCRUDJsonBodyMappingControlle
} }
@Override
protected void doListBefore(AttendanceRecordEntity query, Map<String, Object> model, Context context) throws AppException {
if (query.getClassId()!=null){
query.setShiftsId(query.getClassId());
}
if (query.getGroupId()!=null){
query.setAttendanceGroupId(query.getGroupId());
}
super.doListBefore(query, model, context);
}
@Override @Override
protected int doListAfter(AttendanceRecordEntity query, Map<String, Object> model, Context context) throws AppException { protected int doListAfter(AttendanceRecordEntity query, Map<String, Object> model, Context context) throws AppException {
...@@ -122,7 +134,59 @@ public class AttendanceRecordController extends BaseCRUDJsonBodyMappingControlle ...@@ -122,7 +134,59 @@ public class AttendanceRecordController extends BaseCRUDJsonBodyMappingControlle
recordEntity.setAttendanceRecordDetailList(orderList); recordEntity.setAttendanceRecordDetailList(orderList);
} }
} }
model.put("dyncColumns", dsyncColumns); model.put("dyncColumns", dsyncColumns);
//出勤情况
//总人数
Integer total = (Integer)model.get("total");
//未出勤
Integer noAtt = 0;
//迟到
Integer beLate = 0;
//早退
Integer leaveEarly = 0;
//缺卡
Integer lackOfCards = 0;
for (AttendanceRecordEntity attendanceRecordEntity : list) {
boolean a = true;
for (AttendanceRecordDetailEntity item : attendanceRecordEntity.getAttendanceRecordDetailList()) {
if (item.getGoWorkResult()==3){
lackOfCards=lackOfCards+1;
}
if (item.getGoWorkResult()==4){
beLate = beLate+1;
}
if (item.getOffWorkResult()==3){
lackOfCards=lackOfCards+1;
}
if (item.getOffWorkResult()==5){
leaveEarly = leaveEarly +1;
}
if (item.getGoWorkResult()!=3 || item.getOffWorkResult()!=3){
a = false;
}
}
if (a){
noAtt = noAtt+1;
}
}
String attPercentage = "";
if (total!=0){
float l = ((total - noAtt) / total)*100;
attPercentage =l+"%";
}else {
attPercentage = "0";
}
AttendanceStatus attendanceStatus = new AttendanceStatus();
attendanceStatus.setNeedAttNum(total);
attendanceStatus.setAttPercentage(attPercentage);
attendanceStatus.setNoAtt(noAtt);
attendanceStatus.setBeLate(beLate);
attendanceStatus.setLeaveEarly(leaveEarly);
attendanceStatus.setLackOfCards(lackOfCards);
model.put("attendanceStatus",attendanceStatus);
return super.doListAfter(query, model, context); return super.doListAfter(query, model, context);
} }
} }
...@@ -8,10 +8,12 @@ import com.mortals.framework.service.IUser; ...@@ -8,10 +8,12 @@ import com.mortals.framework.service.IUser;
import com.mortals.framework.util.DateUtils; import com.mortals.framework.util.DateUtils;
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.common.code.ErrorStatusEnum;
import com.mortals.xhx.module.attendance.model.*; import com.mortals.xhx.module.attendance.model.*;
import com.mortals.xhx.module.attendance.service.*; import com.mortals.xhx.module.attendance.service.*;
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.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
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;
...@@ -71,7 +73,7 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont ...@@ -71,7 +73,7 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
@Override @Override
protected void init(Map<String, Object> model, Context context) { protected void init(Map<String, Object> model, Context context) {
this.addDict(model, "errorStatus", paramService.getParamBySecondOrganize("AttendanceRecordError","errorStatus")); this.addDict(model, "errorStatus", ErrorStatusEnum.getEnumMap());
this.addDict(model, "processStatus", paramService.getParamBySecondOrganize("AttendanceRecordError","processStatus")); this.addDict(model, "processStatus", paramService.getParamBySecondOrganize("AttendanceRecordError","processStatus"));
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())));
...@@ -80,13 +82,14 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont ...@@ -80,13 +82,14 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
} }
@PostMapping(value = "disposeError") @PostMapping(value = "revokeError")
public Rest<String> disposeError(@RequestBody AttendanceRecordErrorEntity query) { public Rest<String> disposeError(@RequestBody AttendanceRecordErrorEntity query) {
Rest<String> ret = new Rest(); Rest<String> ret = new Rest();
Context context = this.getContext(); Context context = this.getContext();
query.setOpertor(context.getUser().getRealName()); query.setOpertor(context.getUser().getRealName());
query.setOperDateTime(new Date()); query.setOperDateTime(new Date());
query.setProcessStatus(1); query.setProcessStatus(0);
query.setProcessResult("已撤销处理");
errorService.update(query); errorService.update(query);
DateUtils.convertTime2Str(query.getErrorDateTime().getTime(),DateUtils.P_yyyy_MM_dd); DateUtils.convertTime2Str(query.getErrorDateTime().getTime(),DateUtils.P_yyyy_MM_dd);
...@@ -100,34 +103,105 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont ...@@ -100,34 +103,105 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
detailQuery.setShiftsId(query.getShiftsId()); detailQuery.setShiftsId(query.getShiftsId());
List<AttendanceRecordDetailEntity> attendanceRecordDetailEntity = attendanceRecordDetailService.find(detailQuery); List<AttendanceRecordDetailEntity> attendanceRecordDetailEntity = attendanceRecordDetailService.find(detailQuery);
for (AttendanceRecordDetailEntity recordDetailEntity : attendanceRecordDetailEntity) {
if (query.getGoOrOff().equals("上班")){
if (query.getErrorStatus()==0){
recordDetailEntity.setGoWorkResult(3);
}
if (query.getErrorStatus()==2){
recordDetailEntity.setGoWorkResult(4);
}
}
if (query.getGoOrOff().equals("下班")){
if (query.getErrorStatus()==0){
recordDetailEntity.setOffWorkResult(3);
}
if (query.getErrorStatus()==1){
recordDetailEntity.setOffWorkResult(5);
}
}
}
return Rest.ok();
}
@Override
protected void saveBefore(AttendanceRecordErrorEntity entity, Map<String, Object> model, Context context) throws AppException {
for (AttendanceRecordErrorEntity recordErrorEntity : entity.getRecordErrorEntities()) {
recordErrorEntity.setProcessStatus(entity.getProcessStatus());
recordErrorEntity.setProcessResult(entity.getProcessResult());
recordErrorEntity.setOpertor(context.getUser().getRealName());
recordErrorEntity.setOperDateTime(new Date());
recordErrorEntity.setRemark(entity.getRemark());
}
this.batchSave(entity.getRecordErrorEntities());
for (AttendanceRecordErrorEntity item : entity.getRecordErrorEntities()) {
DateUtils.convertTime2Str(item.getErrorDateTime().getTime(),DateUtils.P_yyyy_MM_dd);
AttendanceRecordQuery attendanceRecordQuery = new AttendanceRecordQuery();
attendanceRecordQuery.setStaffId(item.getStaffId());
attendanceRecordQuery.setAttendanceDateStart(DateUtils.convertTime2Str(item.getErrorDateTime().getTime(),DateUtils.P_yyyy_MM_dd));
attendanceRecordQuery.setAttendanceDateEnd(DateUtils.convertTime2Str(item.getErrorDateTime().getTime(),DateUtils.P_yyyy_MM_dd));
AttendanceRecordEntity attendanceRecordEntity = attendanceRecordService.selectOne(attendanceRecordQuery);
AttendanceRecordDetailQuery detailQuery = new AttendanceRecordDetailQuery();
detailQuery.setRecordId(attendanceRecordEntity.getId());
detailQuery.setShiftsId(item.getShiftsId());
List<AttendanceRecordDetailEntity> attendanceRecordDetailEntity = attendanceRecordDetailService.find(detailQuery);
for (AttendanceRecordDetailEntity recordDetailEntity : attendanceRecordDetailEntity) { for (AttendanceRecordDetailEntity recordDetailEntity : attendanceRecordDetailEntity) {
Date goWorkDate = recordDetailEntity.getGoWorkDate(); Date goWorkDate = recordDetailEntity.getGoWorkDate();
Date offWorkDate = recordDetailEntity.getOffWorkDate(); Date offWorkDate = recordDetailEntity.getOffWorkDate();
if (query.getProcessResult().contains("正常")){ if (item.getProcessResult().contains("正常")){
if (goWorkDate.getTime()==query.getGoOffDateTime().getTime()){ if (!ObjectUtils.isEmpty(goWorkDate)){
if (goWorkDate.getTime()==item.getGoOffDateTime().getTime()){
recordDetailEntity.setGoWorkResult(1); recordDetailEntity.setGoWorkResult(1);
} }
if (offWorkDate.getTime()==query.getGoOffDateTime().getTime()){ }else {
if (item.getGoOrOff().equals("上班")){
recordDetailEntity.setGoWorkResult(1);
}
}
if (!ObjectUtils.isEmpty(offWorkDate)){
if (offWorkDate.getTime()==item.getGoOffDateTime().getTime()){
recordDetailEntity.setOffWorkResult(1); recordDetailEntity.setOffWorkResult(1);
} }
}else {
if (item.getGoOrOff().equals("下班")){
recordDetailEntity.setOffWorkResult(1);
}
}
}
if (item.getProcessResult().contains("早退")){
if (!ObjectUtils.isEmpty(offWorkDate)){
if (offWorkDate.getTime()==item.getGoOffDateTime().getTime()){
recordDetailEntity.setOffWorkResult(5);
} }
if (query.getProcessResult().contains("早退")){ }else{
if (offWorkDate.getTime()==query.getGoOffDateTime().getTime()){ if (item.getGoOrOff().equals("下班")){
recordDetailEntity.setOffWorkResult(5); recordDetailEntity.setOffWorkResult(5);
} }
} }
if (query.getProcessResult().contains("迟到")){
if (goWorkDate.getTime()==query.getGoOffDateTime().getTime()){ }
if (item.getProcessResult().contains("迟到")){
if (!ObjectUtils.isEmpty(goWorkDate)){
if (goWorkDate.getTime()==item.getGoOffDateTime().getTime()){
recordDetailEntity.setGoWorkResult(4);
}
}else {
if (item.getGoOrOff().equals("上班")){
recordDetailEntity.setGoWorkResult(4); recordDetailEntity.setGoWorkResult(4);
} }
} }
}
attendanceRecordDetailService.update(recordDetailEntity); attendanceRecordDetailService.update(recordDetailEntity);
} }
return Rest.ok();
} }
super.saveBefore(entity, model, context);
}
@Override @Override
protected int editAfter(Long id, Map<String, Object> model, AttendanceRecordErrorEntity entity, Context context) throws AppException { protected int editAfter(Long id, Map<String, Object> model, AttendanceRecordErrorEntity entity, Context context) throws AppException {
......
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