智慧保安后台管理-外网项目备份
zhongrj
2023-09-17 8853292babb2ad94de4a3207966f1e83b767cd2d
src/main/java/org/springblade/modules/attendance/controller/AttendanceController.java
@@ -1,5 +1,6 @@
package org.springblade.modules.attendance.controller;
import bsh.ParseException;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
@@ -8,6 +9,7 @@
import lombok.AllArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
@@ -18,12 +20,16 @@
import org.springblade.modules.attendance.service.IAttendanceService;
import org.springblade.modules.attendance.vo.AttendanceVO;
import org.springblade.modules.attendance.wrapper.AttendanceWrapper;
import org.springblade.modules.system.entity.DictBiz;
import org.springblade.modules.system.entity.User;
import org.springblade.modules.system.service.IDictBizService;
import org.springblade.modules.system.service.IUserService;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
@@ -40,11 +46,9 @@
   private final IAttendanceService attendanceService;
//   private final IEnclosureService iEnclosureService;
   private final IDictBizService iDictBizService;
   private final IUserService iUserService;
   private final IUserService userService;
   /**
    * 详情
@@ -74,193 +78,179 @@
   @GetMapping("/page")
   @ApiOperationSupport(order = 3)
   @ApiOperation(value = "分页", notes = "传入attendance")
   public R<IPage<AttendanceVO>> page(AttendanceVO attendance, Query query, Long department) {
      IPage<Attendance> pages = attendanceService.selectAttendancePage(Condition.getPage(query), department, attendance);
      return R.data(AttendanceWrapper.build().pageVO(pages));
   public R<IPage<AttendanceVO>> page(AttendanceVO attendance, Query query) {
      IPage<AttendanceVO> pages = attendanceService.selectAttendancePage(Condition.getPage(query), attendance);
      return R.data(pages);
   }
//   /**
//    * 保安位置比对
//    */
//   @GetMapping("/positionThan")
//   public R positionThan(@Valid Attendance attendance, HttpServletResponse response) {
//      response.setHeader("Access-Control-Allow-Origin", "*");
//      response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
//      response.setHeader("Access-Control-Allow-Credentials", "true");
//      Enclosure enclosure = new Enclosure();
//      enclosure.setAnumber(attendance.getNumber());
//      //查询当前处警人员的电子围栏信息
//      Boolean onArea = iEnclosureService.isOnArea(attendance.getJd(),attendance.getWd(),enclosure);
//      if (onArea){
//         return R.data(true);
//      }
//      return R.data(false);
//   }
   /**
    * 打卡(洪城义警app)
    * @param response
    * @param attendance
    * @return
    */
   @PostMapping("/AppSave")
   public R AppSave(@Valid AttendanceVO attendance, HttpServletResponse response) {
      response.setHeader("Access-Control-Allow-Origin", "*");
      response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
      response.setHeader("Access-Control-Allow-Credentials", "true");
      //先查询用户信息
      User user = new User();
      user.setCardid(attendance.getIdCardNo());
      user.setStatus(1);
      user.setIsDeleted(0);
      User user1 = userService.getOne(Condition.getQueryWrapper(user));
      if (null!=user1) {
         attendance.setUserId(user1.getId());
         attendance.setClockTime(new Date());
         //查询当前考勤人员的部门信息
         attendance.setDeptId(Long.parseLong(user1.getDeptId()));
         //获取当前日期是礼拜几
         attendance.setWeek(new SimpleDateFormat("EEEE").format(new Date()));
         //获取打卡时间标准
         List<DictBiz> dictBizList = iDictBizService.getList("attendanceStandard");
         //定义打卡时间标准,上午,下午
         StringBuilder forenoon = new StringBuilder();
         StringBuilder afternoon = new StringBuilder();
         String format = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
         for (DictBiz dictBiz : dictBizList) {
            if (dictBiz.getDictValue().contains("上午")) {
               forenoon = forenoon.append(dictBiz.getDictKey());
            }
            if (dictBiz.getDictValue().contains("下午")) {
               afternoon = afternoon.append(dictBiz.getDictKey());
            }
         }
         //上午打卡时间标准
         String forenoonWorkTime = format + " " + forenoon.toString().split("-")[0] + ":00";
         String forenoonOfDutyTime = format + " " + forenoon.toString().split("-")[1] + ":00";
         //下午打卡时间标准
         String afternoonWorkTime = format + " " + afternoon.toString().split("-")[0] + ":00";
         String afternoonOfDutyTime = format + " " + afternoon.toString().split("-")[1] + ":00";
         //判断打卡时间
         try {
            long time = attendance.getClockTime().getTime();
//   /**
//    * 新增
//    */
//   @PostMapping("/AppSave")
//   @ApiOperationSupport(order = 4)
//   @ApiOperation(value = "新增", notes = "传入attendance")
//   public R AppSave(@Valid Attendance attendance, HttpServletResponse response) {
//      response.setHeader("Access-Control-Allow-Origin", "*");
//      response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
//      response.setHeader("Access-Control-Allow-Credentials", "true");
//      Enclosure enclosure = new Enclosure();
//      enclosure.setAnumber(attendance.getNumber());
//      //查询当前处警人员的电子围栏信息
//      Boolean onArea = iEnclosureService.isOnArea(attendance.getJd(),attendance.getWd(),enclosure);
//      //判断是否在所在区域打卡,返回数据
//      if (onArea) {
//         //查询当前考勤人员的部门信息
//         attendance.setDepartment(iUserService.selUserByCode(attendance.getNumber()).getDeptId());
//         //获取当前日期是礼拜几
//         attendance.setWeek(new SimpleDateFormat("EEEE").format(new Date()));
//         //获取打卡时间标准
//         List<DictBiz> dictBizList = iDictBizService.getList("attendanceStandard");
//         //定义打卡时间标准,上午,下午
//         StringBuilder forenoon = new StringBuilder();
//         StringBuilder afternoon = new StringBuilder();
//         String format = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
//         for (DictBiz dictBiz : dictBizList) {
//            if (dictBiz.getDictValue().contains("上午")) {
//               forenoon = forenoon.append(dictBiz.getDictKey());
//            }
//            if (dictBiz.getDictValue().contains("下午")) {
//               afternoon = afternoon.append(dictBiz.getDictKey());
//            }
//         }
//         //上午打卡时间标准
//         String forenoonWorkTime = format + " " + forenoon.toString().split("-")[0] + ":00";
//         String forenoonOfDutyTime = format + " " + forenoon.toString().split("-")[1] + ":00";
//         //下午打卡时间标准
//         String afternoonWorkTime = format + " " + afternoon.toString().split("-")[0] + ":00";
//         String afternoonOfDutyTime = format + " " + afternoon.toString().split("-")[1] + ":00";
//         //判断打卡时间
//         try {
//            long time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(attendance.getClockTime()).getTime();
//
//            //判断上午上班之前半小时前打卡为无效打卡
//            if (time-(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(forenoonWorkTime).getTime()-30*60*1000)<0){
//               attendance.setClocktype("0");
//               attendance.setAttendancetype("4");
//               return R.status(attendanceService.save(attendance));
//            }
//
//            //上午上班半小时前到上班时间打卡为正常打卡
//            if (time-(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(forenoonWorkTime).getTime()-30*60*1000)>=0
//               && time-new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(forenoonWorkTime).getTime()<=0) {
//               attendance.setClocktype("0");
//               attendance.setAttendancetype("0");
//               return R.status(attendanceService.save(attendance));
//            }
//
//            //上午上班后到上班下班前打卡为正常打卡
//            if (time-new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(forenoonWorkTime).getTime()>0
//               && time-new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(forenoonOfDutyTime).getTime()<0) {
//               //查询当前时间之前当前考勤人员的最新的一条考勤数据
//               Attendance attendanceNow = attendanceService.selAttendanceNewNow(attendance.getNumber());
//               if (null!=attendanceNow){
//                  if (attendanceNow.getAttendancetype().equals("0") || attendanceNow.getClocktype().equals("1")) {
//                     //下班早退
//                     attendance.setClocktype("1");
//                     attendance.setAttendancetype("2");
//                  }
//                  if (attendanceNow.getAttendancetype().equals("4")){
//                     //上班迟到
//                     attendance.setClocktype("0");
//                     attendance.setAttendancetype("1");
//                  }
//               }else {
//                  //上班迟到
//                  attendance.setClocktype("0");
//                  attendance.setAttendancetype("1");
//               }
//               return R.status(attendanceService.save(attendance));
//            }
//
//            //正常下班时间-下班半小时后
//            if (time-new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(forenoonOfDutyTime).getTime()>=0
//               && time-(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(forenoonOfDutyTime).getTime()+30*60*1000)<=0){
//               //正常下班打卡
//               attendance.setClocktype("1");
//               attendance.setAttendancetype("0");
//               return R.status(attendanceService.save(attendance));
//            }
//
//            //上午下班半小时后-下午上班之前半小時打卡为无效打卡
//            if (time-(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(afternoonWorkTime).getTime()-30*60*1000)<0
//               && time-(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(forenoonOfDutyTime).getTime()+30*60*1000)>0){
//               //无效打卡
//               attendance.setClocktype("0");
//               attendance.setAttendancetype("4");
//               return R.status(attendanceService.save(attendance));
//            }
//
//            //下午上班之前半小時-下午上班时间之前打卡为下午正常上班打卡
//            if (time-(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(afternoonWorkTime).getTime()-30*60*1000)>=0
//               && time-new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(afternoonWorkTime).getTime()<=0){
//               //下午正常打卡
//               attendance.setClocktype("0");
//               attendance.setAttendancetype("0");
//               return R.status(attendanceService.save(attendance));
//            }
//
//            //下午上班之后到下午下班之前
//            if (time-new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(afternoonWorkTime).getTime()>0
//               && time-new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(afternoonOfDutyTime).getTime()<0){
//               //查询当前时间之前当前考勤人员的最新的一条考勤数据
//               Attendance attendanceNow = attendanceService.selAttendanceNewNow(attendance.getNumber());
//               if (null!=attendanceNow){
//                  if (attendanceNow.getAttendancetype().equals("0") && attendanceNow.getClocktype().equals("0")) {
//                     //下班早退
//                     attendance.setClocktype("1");
//                     attendance.setAttendancetype("2");
//                  }
//                  if (attendanceNow.getClocktype().equals("1")) {
//                     //下班早退
//                     attendance.setClocktype("1");
//                     attendance.setAttendancetype("2");
//                  }
//                  if (attendanceNow.getAttendancetype().equals("4")){
//                     //上班迟到
//                     attendance.setClocktype("0");
//                     attendance.setAttendancetype("1");
//                  }
//               }else {
//                  //上班迟到
//                  attendance.setClocktype("0");
//                  attendance.setAttendancetype("1");
//               }
//               return R.status(attendanceService.save(attendance));
//            }
//
//            //正常打下午下班卡
//            if (time-new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(afternoonOfDutyTime).getTime()>=0
//               && time-(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(afternoonOfDutyTime).getTime()+30*60*1000)<=0
//               ){
//               //下午正常下班打卡
//               attendance.setClocktype("1");
//               attendance.setAttendancetype("0");
//               return R.status(attendanceService.save(attendance));
//            }
//
//            //打卡时间超过下午下班打卡时间后的半小时为无效打卡
//            if (time-(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(afternoonOfDutyTime).getTime()+30*60*1000)>0){
//               //下午下班打卡无效
//               attendance.setClocktype("1");
//               attendance.setAttendancetype("4");
//               return R.status(attendanceService.save(attendance));
//            }
//
//         } catch (ParseException e) {
//            e.printStackTrace();
//         }
//      }
//      return R.status(false);
//   }
            //判断上午上班之前半小时前打卡为无效打卡
            if (time - (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(forenoonWorkTime).getTime() - 30 * 60 * 1000) < 0) {
               attendance.setClockType(1);
               attendance.setAttendanceType(5);
               return R.status(attendanceService.save(attendance));
            }
            //上午上班半小时前到上班时间打卡为正常打卡
            if (time - (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(forenoonWorkTime).getTime() - 30 * 60 * 1000) >= 0
               && time - new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(forenoonWorkTime).getTime() <= 0) {
               attendance.setClockType(1);
               attendance.setAttendanceType(1);
               return R.status(attendanceService.save(attendance));
            }
            //上午上班后到上班下班前打卡为正常打卡
            if (time - new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(forenoonWorkTime).getTime() > 0
               && time - new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(forenoonOfDutyTime).getTime() < 0) {
               //查询当前时间之前当前考勤人员的最新的一条考勤数据
               Attendance attendanceNow = attendanceService.selAttendanceNewNow(attendance.getUserId());
               if (null != attendanceNow) {
                  if (attendanceNow.getAttendanceType().equals(1) || attendanceNow.getClockType().equals(2)) {
                     //下班早退
                     attendance.setClockType(2);
                     attendance.setAttendanceType(3);
                  }
                  if (attendanceNow.getAttendanceType().equals(5)) {
                     //上班迟到
                     attendance.setClockType(1);
                     attendance.setAttendanceType(2);
                  }
               } else {
                  //上班迟到
                  attendance.setClockType(1);
                  attendance.setAttendanceType(2);
               }
               return R.status(attendanceService.save(attendance));
            }
            //正常下班时间-下班半小时后
            if (time - new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(forenoonOfDutyTime).getTime() >= 0
               && time - (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(forenoonOfDutyTime).getTime() + 30 * 60 * 1000) <= 0) {
               //正常下班打卡
               attendance.setClockType(2);
               attendance.setAttendanceType(1);
               return R.status(attendanceService.save(attendance));
            }
            //上午下班半小时后-下午上班之前半小時打卡为无效打卡
            if (time - (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(afternoonWorkTime).getTime() - 30 * 60 * 1000) < 0
               && time - (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(forenoonOfDutyTime).getTime() + 30 * 60 * 1000) > 0) {
               //无效打卡
               attendance.setClockType(1);
               attendance.setAttendanceType(5);
               return R.status(attendanceService.save(attendance));
            }
            //下午上班之前半小時-下午上班时间之前打卡为下午正常上班打卡
            if (time - (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(afternoonWorkTime).getTime() - 30 * 60 * 1000) >= 0
               && time - new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(afternoonWorkTime).getTime() <= 0) {
               //下午正常打卡
               attendance.setClockType(1);
               attendance.setAttendanceType(1);
               return R.status(attendanceService.save(attendance));
            }
            //下午上班之后到下午下班之前
            if (time - new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(afternoonWorkTime).getTime() > 0
               && time - new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(afternoonOfDutyTime).getTime() < 0) {
               //查询当前时间之前当前考勤人员的最新的一条考勤数据
               Attendance attendanceNow = attendanceService.selAttendanceNewNow(attendance.getUserId());
               if (null != attendanceNow) {
                  if (attendanceNow.getAttendanceType().equals(1) && attendanceNow.getClockType().equals(1)) {
                     //下班早退
                     attendance.setClockType(2);
                     attendance.setAttendanceType(3);
                  }
                  if (attendanceNow.getClockType().equals(2)) {
                     //下班早退
                     attendance.setClockType(2);
                     attendance.setAttendanceType(3);
                  }
                  if (attendanceNow.getAttendanceType().equals(5)) {
                     //上班迟到
                     attendance.setClockType(1);
                     attendance.setAttendanceType(2);
                  }
               } else {
                  //上班迟到
                  attendance.setClockType(1);
                  attendance.setAttendanceType(2);
               }
               return R.status(attendanceService.save(attendance));
            }
            //正常打下午下班卡
            if (time - new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(afternoonOfDutyTime).getTime() >= 0
               && time - (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(afternoonOfDutyTime).getTime() + 30 * 60 * 1000) <= 0
            ) {
               //下午正常下班打卡
               attendance.setClockType(2);
               attendance.setAttendanceType(1);
               return R.status(attendanceService.save(attendance));
            }
            //打卡时间超过下午下班打卡时间后的半小时为无效打卡
            if (time - (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(afternoonOfDutyTime).getTime() + 30 * 60 * 1000) > 0) {
               //下午下班打卡无效
               attendance.setClockType(2);
               attendance.setAttendanceType(5);
               return R.status(attendanceService.save(attendance));
            }
         } catch (java.text.ParseException e) {
            e.printStackTrace();
         }
      }
      return R.status(false);
   }
   /**
    * 修改
@@ -294,31 +284,14 @@
   }
   /**
    * 导出用户
    * 导出考勤数据
    * @param response
    * @param attendance
    */
   @GetMapping("/export-Attendance")
   public void exportAttendane(String name, String beginTime, String endTime, String attendancetype, HttpServletResponse response) {
      String beginTimes = null;
      String endTimes = null;
      String attendancetypes = null;
      if (beginTime.equals("undefined        ") && endTime.equals("undefined")) {
         beginTimes=null;
         endTimes=null;
         attendancetypes=attendancetype;
      }
      else if (attendancetype.equals("undefined")){
         attendancetypes=null;
      }
      else {
         beginTimes=beginTime;
         endTimes=endTime;
         attendancetypes=attendancetype;
      }
      List<AttendanceExcel> list = attendanceService.exportAttendane(name, beginTimes, endTimes, attendancetypes);
   public void exportAttendane(AttendanceVO attendance, HttpServletResponse response) {
      List<AttendanceExcel> list = attendanceService.exportAttendane(attendance);
      ExcelUtil.export(response, "考勤数据" + DateUtil.time(), "考勤数据表", list, AttendanceExcel.class);
}
   }
}