|
@@ -1,6 +1,7 @@
|
|
|
package cn.com.ty.lift.enterprise.oa.controller;
|
|
|
|
|
|
import cn.com.ty.lift.common.model.CountPage;
|
|
|
+import cn.com.ty.lift.common.utils.DateUtils;
|
|
|
import cn.com.ty.lift.common.verify.Ver;
|
|
|
import cn.com.ty.lift.common.verify.Verifier;
|
|
|
import cn.com.ty.lift.common.verify.Verify;
|
|
@@ -13,7 +14,6 @@ import cn.com.ty.lift.enterprise.oa.service.AttendanceService;
|
|
|
import cn.com.ty.lift.enterprise.oa.service.MaintenanceCompanyService;
|
|
|
import cn.com.xwy.boot.web.dto.RestResponse;
|
|
|
import cn.hutool.core.io.IoUtil;
|
|
|
-import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.poi.excel.ExcelUtil;
|
|
|
import cn.hutool.poi.excel.ExcelWriter;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
@@ -28,14 +28,16 @@ import org.springframework.web.bind.annotation.RestController;
|
|
|
import javax.servlet.ServletOutputStream;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
import javax.validation.Valid;
|
|
|
+import java.time.LocalDate;
|
|
|
import java.time.LocalTime;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.Objects;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
|
- * 打卡签到记录 前端控制器
|
|
|
+ * 打卡签到记录 前端控制器
|
|
|
* </p>
|
|
|
*
|
|
|
* @author wcz
|
|
@@ -54,18 +56,19 @@ public class AttendanceController {
|
|
|
private static final Map<String, String> headerAlias = new HashMap<>();
|
|
|
|
|
|
static {
|
|
|
- headerAlias.put("username","姓名");
|
|
|
- headerAlias.put("typeDesc","打卡类型");
|
|
|
- headerAlias.put("clockDate","日期");
|
|
|
- headerAlias.put("requiredTime","应打卡时间");
|
|
|
- headerAlias.put("clockTime","打卡时间");
|
|
|
- headerAlias.put("address","地点");
|
|
|
- headerAlias.put("remarks","备注");
|
|
|
- headerAlias.put("statusDesc","是否迟到/早退");
|
|
|
+ headerAlias.put("username", "姓名");
|
|
|
+ headerAlias.put("typeDesc", "打卡类型");
|
|
|
+ headerAlias.put("clockDate", "日期");
|
|
|
+ headerAlias.put("requiredTime", "应打卡时间");
|
|
|
+ headerAlias.put("clockTime", "打卡时间");
|
|
|
+ headerAlias.put("address", "地点");
|
|
|
+ headerAlias.put("remarks", "备注");
|
|
|
+ headerAlias.put("statusDesc", "是否迟到/早退");
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 根据id查找
|
|
|
+ *
|
|
|
* @param request AttendanceRequest
|
|
|
* @return RestResponse
|
|
|
*/
|
|
@@ -73,7 +76,7 @@ public class AttendanceController {
|
|
|
@Verifier(fields = {"id"})
|
|
|
public RestResponse findOne(@Ver @RequestBody AttendanceRequest request) {
|
|
|
AttendanceResponse result = attendanceService.infoById(request);
|
|
|
- if(null != result){
|
|
|
+ if (Objects.nonNull(result)) {
|
|
|
result.setImgs(attendanceImgService.listByAttendance(request.getId()));
|
|
|
}
|
|
|
return RestResponse.success(result);
|
|
@@ -81,25 +84,17 @@ public class AttendanceController {
|
|
|
|
|
|
/**
|
|
|
* 根据条件查询
|
|
|
+ *
|
|
|
* @param request AttendanceRequest
|
|
|
* @return RestResponse
|
|
|
*/
|
|
|
@PostMapping("list")
|
|
|
@Verifier(fields = "mtCompanyId")
|
|
|
public RestResponse list(@Ver @RequestBody AttendanceRequest request) {
|
|
|
-// LocalDate begin = request.getBegin();
|
|
|
-// LocalDate end = request.getEnd();
|
|
|
-// if(null != begin && null != end){
|
|
|
-// long until = end.until(begin, ChronoUnit.DAYS);
|
|
|
-// Verify.notTrue(until > ValuePool.QUERY_MAX_DAYS, "最多只允许查询间隔" + ValuePool.QUERY_MAX_DAYS + "天的记录");
|
|
|
-// }else if(null != begin && null == end){
|
|
|
-// request.setEnd(begin.plusDays(ValuePool.QUERY_MAX_DAYS));
|
|
|
-// }else if(null == begin && null != end){
|
|
|
-// request.setBegin(end.plusDays(0 - ValuePool.QUERY_MAX_DAYS));
|
|
|
-// }else{
|
|
|
-// request.setBegin(LocalDate.now().plusDays(0 - ValuePool.QUERY_MAX_DAYS));
|
|
|
-// request.setEnd(LocalDate.now());
|
|
|
-// }
|
|
|
+ if (Objects.isNull(request.getClockTime())) {
|
|
|
+ request.setBegin(LocalDate.now().plusDays(0 - DateUtils.daysOfYear()));
|
|
|
+ request.setEnd(LocalDate.now());
|
|
|
+ }
|
|
|
IPage<AttendanceResponse> pages = attendanceService.pageByCondition(request);
|
|
|
long count = attendanceService.count();
|
|
|
return RestResponse.success(CountPage.getCountPage(count, pages));
|
|
@@ -107,6 +102,7 @@ public class AttendanceController {
|
|
|
|
|
|
/**
|
|
|
* 设置打卡时间
|
|
|
+ *
|
|
|
* @param request AttendanceRequest
|
|
|
* @return RestResponse
|
|
|
*/
|
|
@@ -115,41 +111,41 @@ public class AttendanceController {
|
|
|
public RestResponse setupTime(@Ver @RequestBody AttendanceRequest request) {
|
|
|
LocalTime topTime = request.getTopTime();
|
|
|
LocalTime downTime = request.getDownTime();
|
|
|
- boolean top = ObjectUtil.isNotNull(topTime);
|
|
|
- boolean down = ObjectUtil.isNotNull(downTime);
|
|
|
+ boolean top = Objects.nonNull(topTime);
|
|
|
+ boolean down = Objects.nonNull(downTime);
|
|
|
boolean am = top && down;
|
|
|
//上下班时间成对设置
|
|
|
Verify.notTrue(top ^ down, Verify.Attend.SetAmTime);
|
|
|
- if(am){
|
|
|
- Verify.notTrue(topTime.isAfter(downTime), Verify.Attend.InvalidAmTime);
|
|
|
+ if (am) {
|
|
|
+ Verify.notTrue(topTime.isAfter(downTime), String.format(Verify.Attend.InvalidAmTime, topTime, downTime));
|
|
|
}
|
|
|
|
|
|
LocalTime topTimePm = request.getTopTimePm();
|
|
|
LocalTime downTimePm = request.getDownTimePm();
|
|
|
- boolean toppm = ObjectUtil.isNotNull(topTimePm);
|
|
|
- boolean downpm = ObjectUtil.isNotNull(downTimePm);
|
|
|
+ boolean toppm = Objects.nonNull(topTimePm);
|
|
|
+ boolean downpm = Objects.nonNull(downTimePm);
|
|
|
boolean pm = toppm && downpm;
|
|
|
Verify.notTrue(toppm ^ downpm, Verify.Attend.SetPmTime);
|
|
|
- if(pm){
|
|
|
- Verify.notTrue(topTimePm.isAfter(downTimePm), Verify.Attend.InvalidPmTime);
|
|
|
+ if (pm) {
|
|
|
+ Verify.notTrue(topTimePm.isAfter(downTimePm), String.format(Verify.Attend.InvalidPmTime, topTimePm, downTimePm));
|
|
|
}
|
|
|
//上午下班 < 下午上班
|
|
|
- if(down && toppm){
|
|
|
- Verify.notTrue(downTime.isAfter(topTimePm),Verify.Attend.AmDownPmTop);
|
|
|
+ if (down && toppm) {
|
|
|
+ Verify.notTrue(downTime.isAfter(topTimePm), String.format(Verify.Attend.AmDownPmTop, topTimePm, downTime));
|
|
|
}
|
|
|
|
|
|
LocalTime topTimeOt = request.getTopTimeOt();
|
|
|
LocalTime downTimeOt = request.getDownTimeOt();
|
|
|
- boolean topot = ObjectUtil.isNotNull(topTimeOt);
|
|
|
- boolean downot = ObjectUtil.isNotNull(downTimeOt);
|
|
|
+ boolean topot = Objects.nonNull(topTimeOt);
|
|
|
+ boolean downot = Objects.nonNull(downTimeOt);
|
|
|
boolean ot = topot && downot;
|
|
|
Verify.notTrue(topot ^ downot, Verify.Attend.SetOtTime);
|
|
|
- if(ot){
|
|
|
- Verify.notTrue(topTimeOt.isAfter(downTimeOt), Verify.Attend.InvalidOtTime);
|
|
|
+ if (ot) {
|
|
|
+ Verify.notTrue(topTimeOt.isAfter(downTimeOt), String.format(Verify.Attend.InvalidOtTime, topTimeOt, downTimeOt));
|
|
|
}
|
|
|
// 下午下班 < 加班上班
|
|
|
- if(downpm && topot){
|
|
|
- Verify.notTrue(downTimePm.isAfter(topTimeOt), Verify.Attend.PmDownOtTop);
|
|
|
+ if (downpm && topot) {
|
|
|
+ Verify.notTrue(downTimePm.isAfter(topTimeOt), String.format(Verify.Attend.PmDownOtTop, topTimeOt, downTimePm));
|
|
|
}
|
|
|
//三组时间至少设置一组
|
|
|
Verify.isTrue(am || pm || ot, Verify.Attend.missingTime);
|
|
@@ -183,8 +179,8 @@ public class AttendanceController {
|
|
|
Long userId = entity.getUserId();
|
|
|
Integer type = entity.getType();
|
|
|
//先统计当天是否有对应的打卡记录
|
|
|
- int count = attendanceService.countByUserAndType(mtCompanyId,userId,type);
|
|
|
- Verify.nogt0(count,Verify.Attend.hadClock);
|
|
|
+ Attendance same = attendanceService.sameByUserAndType(mtCompanyId, userId, type);
|
|
|
+ Verify.notTrue(Objects.nonNull(same), String.format(Verify.Attend.hadClock, same.getCreateDate(), same.getCreateDate()));
|
|
|
MaintenanceCompany maintenanceCompany = maintenanceCompanyService.getById(mtCompanyId);
|
|
|
Verify.notNull(maintenanceCompany);
|
|
|
|
|
@@ -238,6 +234,7 @@ public class AttendanceController {
|
|
|
|
|
|
/**
|
|
|
* 返回维保公司打卡时间信息
|
|
|
+ *
|
|
|
* @param request AttendanceRequest
|
|
|
* @return RestResponse
|
|
|
*/
|
|
@@ -250,20 +247,25 @@ public class AttendanceController {
|
|
|
|
|
|
/**
|
|
|
* 根据用户查询打卡记录
|
|
|
+ *
|
|
|
* @param request AttendanceRequest
|
|
|
* @return RestResponse
|
|
|
*/
|
|
|
@PostMapping("pageByUser")
|
|
|
- @Verifier(fields = {"userId","clockTime"})
|
|
|
+ @Verifier(fields = {"userId", "clockTime"})
|
|
|
public RestResponse pageByUser(@Ver @RequestBody AttendanceRequest request) {
|
|
|
+ if (Objects.isNull(request.getClockTime())) {
|
|
|
+ request.setBegin(LocalDate.now().plusDays(0 - DateUtils.daysOfYear()));
|
|
|
+ request.setEnd(LocalDate.now());
|
|
|
+ }
|
|
|
IPage<AttendanceResponse> pages = attendanceService.pageByUser(request);
|
|
|
return RestResponse.success(pages);
|
|
|
}
|
|
|
|
|
|
@PostMapping("export")
|
|
|
@Verifier(fields = {"ids"})
|
|
|
- public void export(@Ver @RequestBody AttendanceRequest request, HttpServletResponse response){
|
|
|
- log.info("headerAlias: {}",headerAlias);
|
|
|
+ public void export(@Ver @RequestBody AttendanceRequest request, HttpServletResponse response) {
|
|
|
+ log.info("headerAlias: {}", headerAlias);
|
|
|
List<AttendanceResponse> attendances = attendanceService.listByIdList(request);
|
|
|
Verify.notNull(attendances);
|
|
|
try {
|
|
@@ -275,12 +277,12 @@ public class AttendanceController {
|
|
|
writer.write(attendances, true);
|
|
|
writer.autoSizeColumnAll();
|
|
|
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
|
|
|
- response.setHeader("Content-Disposition","attachment;filename=" + IdWorker.getIdStr() + ".xlsx");
|
|
|
+ response.setHeader("Content-Disposition", "attachment;filename=" + IdWorker.getIdStr() + ".xlsx");
|
|
|
ServletOutputStream out = response.getOutputStream();
|
|
|
writer.flush(out, true);
|
|
|
writer.close();
|
|
|
IoUtil.close(out);
|
|
|
- }catch (Exception e){
|
|
|
+ } catch (Exception e) {
|
|
|
log.error("导出打卡记录异常", e);
|
|
|
throw Verify.verifyException("导出打卡记录异常");
|
|
|
}
|