Crazy 8 月之前
父节点
当前提交
3180ded199

+ 25 - 10
yudao-module-md/yudao-module-md-biz/src/main/java/Acs/EventSearch.java

@@ -112,7 +112,7 @@ public final class EventSearch {
                 /**
                  * 工号有两个字段,dwEmployeeNo表示工号,当值为0时,表示无效,解析byEmployeeNo参数
                  */
-               System.out.println("工号1:"+struAcsEventCfg.struAcsEventInfo.dwEmployeeNo);
+               System.out.println("工号:"+struAcsEventCfg.struAcsEventInfo.dwEmployeeNo);
                 /* System.out.println("工号2:"+new String(struAcsEventCfg.struAcsEventInfo.byEmployeeNo));
                 //人脸温度数据,需要设备和支持测温功能
                 System.out.println("人脸温度:" + struAcsEventCfg.struAcsEventInfo.fCurrTemperature + "是否异常:" + struAcsEventCfg.struAcsEventInfo.byIsAbnomalTemperature);
@@ -146,31 +146,46 @@ public final class EventSearch {
                 attendance.setDate(date);//打卡日期
                 attendance.setUserNumber(employeeNo);//学号
 
-                StudentAttendanceDO ST  = studentAttendanceService.getStudentAttendanceOne(employeeNo,parsedTime);//获取这个学生的所有考勤记录
-
+                StudentAttendanceDO ST  = studentAttendanceService.getStudentAttendanceOne(employeeNo,parsedTime);//获取这个学生对应的这个考勤记录
+                AdminUserDO user = adminUserService.findUserByUserNumber(employeeNo);//找到这个学生
+                //插入到attendance表
                 if (ST==null) { // 如果不存在,则进行打卡记录的创建
                     if (employeeNo != null && !employeeNo.equals("0")) {
-                        System.out.println("学号:" + employeeNo);
-                        AdminUserDO user = adminUserService.findUserByUserNumber(employeeNo);
-                        System.out.println("用户" + user);
-                        if (user != null) {
+                        if (user != null &&"1".equals(user.getUserType())) {//在校生
                             attendance.setStudentName(user.getNickname()); // 昵称
                             attendance.setStudentId(user.getId()); // 学生id
                             attendance.setDeptId(user.getDeptId()); // 工作间id
                             attendance.setSupervisorId(user.getSupervisorId()); // 导师id
                             attendance.setClockInStatus(transformClockStatus(parsedTime)); // 打卡状态
+                            attendance.setCreateTime(parsedTime);
+                            attendance.setUpdateTime(parsedTime);
                             //插入考勤表
                             studentAttendanceService.createStudentAttendance(BeanUtils.toBean(attendance, StudentAttendanceSaveReqVO.class));
                         } else {
                             System.out.println("没有找到该用户" + employeeNo);
                         }
                     }
-                } else {
-                    System.out.println("打卡记录已存在,无法进行重复打卡。");
+                }else {
+                    System.out.println("打卡记录已存在");
                 }
+                 //检查并更新未打卡
+                    LocalDate localDate = LocalDate.now();
+                    List<StudentAttendanceDO> result = studentAttendanceService.getStudentAttendanceDay(user.getUserNumber(),localDate);//找到这天的打卡记录
+                    if ("1".equals(user.getUserType())) {//只对在校生
+                       if (!result.isEmpty() && result.size()==1){//
+                           StudentAttendanceDO re = result.get(0);
+                            if ("1".equals(re.getClockInStatus())&&re.getClockInTime()==null) {//找到未打卡的
+                                re.setClockInStatus("0");//变成正常
+                                re.setClockInTime(parsedTime);//更新打卡时间
+                                attendance.setCreateTime(parsedTime);//更新时间
+                                attendance.setUpdateTime(parsedTime);
+                                studentAttendanceService.updateStudentAttendance(BeanUtils.toBean(re, StudentAttendanceSaveReqVO.class));
+                            }
+                        }
+                    }
                 studentAttendance.add(attendance);
 
-                //人脸图片保存
+                //人脸图片保存(没用)
                 if (struAcsEventCfg.dwPicDataLen>0 || struAcsEventCfg.pPicData != null )
                 {
                     FileOutputStream fout;

+ 32 - 32
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentAttendance/StudentAttendanceController.java

@@ -51,13 +51,13 @@ public class StudentAttendanceController {
     @Resource
     private DeptService deptService;
 
-    //检测打卡情况并且创建警告的打卡记录
-    @Scheduled(cron = "0 46 20 * * ?") // 每天22:30检测
-    public void attendanceNormalSecond() {
-        checkAttendanceSecond();
-    }
+//    //检测打卡情况并且创建警告的打卡记录
+//    @Scheduled(cron = "0 46 20 * * ?") // 每天22:30检测
+//    public void attendanceNormalSecond() {
+//        checkAttendanceSecond();
+//    }
 
-    @Scheduled(cron = "0 45 20 * * ?") // 每天11:00检测
+    @Scheduled(cron = "0 00 0 * * ?") // 每天0:00检测,更新未打卡
     public void attendanceNormalFirst() {
         checkAttendanceFirst();
     }
@@ -84,31 +84,31 @@ public class StudentAttendanceController {
         }
     }
 
-    public void checkAttendanceSecond() {
-        List<AdminUserDO> userList = adminUserService.getAllUserList();
-        LocalDate localDate = LocalDate.now();
-
-        for (AdminUserDO user : userList) {
-            List<StudentAttendanceDO> result = studentAttendanceService.getStudentAttendanceDay(user.getUserNumber(),localDate);
-            if ("1".equals(user.getUserType())) {//只对在校生
-                if (result.size()>2) {//打了卡
-                    for (StudentAttendanceDO re : result) {
-                        if ("1".equals(re.getClockInStatus())) {//未打卡
-                            re.setClockInStatus("3");//恢复正常
-                            studentAttendanceService.updateStudentAttendance(BeanUtils.toBean(re, StudentAttendanceSaveReqVO.class));
-                        }
-                    }
-                }else if (result.size()==1){//只有一次,未打卡或者打了卡
-                    for (StudentAttendanceDO re : result) {
-                        if ("1".equals(re.getClockInStatus())) {//未打卡
-                            re.setClockInStatus("2");//变成警告
-                            studentAttendanceService.updateStudentAttendance(BeanUtils.toBean(re, StudentAttendanceSaveReqVO.class));
-                        }
-                    }
-                }
-            }
-        }
-    }
+//    public void checkAttendanceSecond() {
+//        List<AdminUserDO> userList = adminUserService.getAllUserList();
+//        LocalDate localDate = LocalDate.now();
+//
+//        for (AdminUserDO user : userList) {
+//            List<StudentAttendanceDO> result = studentAttendanceService.getStudentAttendanceDay(user.getUserNumber(),localDate);
+//            if ("1".equals(user.getUserType())) {//只对在校生
+//                if (result.size()>2) {//打了卡
+//                    for (StudentAttendanceDO re : result) {
+//                        if ("1".equals(re.getClockInStatus())) {//未打卡
+//                            re.setClockInStatus("3");//恢复正常
+//                            studentAttendanceService.updateStudentAttendance(BeanUtils.toBean(re, StudentAttendanceSaveReqVO.class));
+//                        }
+//                    }
+//                }else if (result.size()==1){//只有一次,未打卡或者打了卡
+//                    for (StudentAttendanceDO re : result) {
+//                        if ("1".equals(re.getClockInStatus())) {//未打卡
+//                            re.setClockInStatus("2");//变成警告
+//                            studentAttendanceService.updateStudentAttendance(BeanUtils.toBean(re, StudentAttendanceSaveReqVO.class));
+//                        }
+//                    }
+//                }
+//            }
+//        }
+//    }
 
 
 
@@ -233,7 +233,7 @@ public class StudentAttendanceController {
                 if (attendanceList != null && !attendanceList.isEmpty()) {
                     for (StudentAttendanceDO attendance : attendanceList) {
                         System.out.println("Checking clockInStatus: " + attendance.getClockInStatus());
-                        if ("2".equals(attendance.getClockInStatus())) { // 有一个警告就添加
+                        if ("1".equals(attendance.getClockInStatus())) { // 有一个未打卡就添加
                             errorList.add(student);
                             errorNameList.add(student.getNickname());
                             hasWarning = true; // 设置标志为 true

+ 0 - 12
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java

@@ -236,18 +236,6 @@ public class UserController {
         // 获得用户分页列表
         PageResult<AdminUserDO> pageResult = userService.getGraduateStudentPage(pageReqVO);
 
-        // 循环处理每个毕业生
-        for (AdminUserDO student : pageResult.getList()) {
-            // 根据 supervisorId 查询导师信息
-            if (student.getSupervisorId() != null) {
-                AdminUserDO supervisorUser = userService.getUser(student.getSupervisorId());
-                String supervisor = supervisorUser.getNickname();
-                String mobile = supervisorUser.getMobile();
-                // 赋值给 对应 字段
-                student.setSupervisor(supervisor);
-                student.setSupervisorMobile(mobile);
-            }
-        }
         if (CollUtil.isEmpty(pageResult.getList())) {
             return success(new PageResult<>(pageResult.getTotal()));
         }

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserPageReqVO.java

@@ -37,7 +37,7 @@ public class UserPageReqVO extends PageParam {
 
     //新加的查询条件
 
-    @Schema(description = "1本科生,2毕业生,3导师", example = "1")
+    @Schema(description = "1本科生,2毕业生,3导师,4学院", example = "1")
     private String userType;
 
     @Schema(description = "专业名称")

+ 0 - 34
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserPhotosVO.java

@@ -1,34 +0,0 @@
-package cn.iocoder.yudao.module.system.controller.admin.user.vo.user;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import lombok.experimental.Accessors;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.validation.constraints.NotNull;
-import java.io.File;
-
-/**
- * 传过来的数据
- */
-@Data
-@Builder
-@AllArgsConstructor
-@NoArgsConstructor
-@Accessors(chain = false) //
-public class UserPhotosVO {
-
-    @Schema(description = "照片组名称", example = "张三")
-    private String groupName;
-
-    @Schema(description = "照片组简介", example = "随便")
-    private String groupDescription;
-
-    @Schema(description = "文件附件", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotNull(message = "文件附件不能为空")
-    private MultipartFile file;
-
-}

+ 48 - 38
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserRespVO.java

@@ -29,17 +29,18 @@ public class UserRespVO{
     @ExcelProperty("用户昵称")
     private String nickname;
 
-    @Schema(description = "备注", example = "我是一个用户")
-    private String remark;
+    @Schema(description = "用户性别,参见 SexEnum 枚举类", example = "1")
+    @ExcelProperty(value = "用户性别", converter = DictConvert.class)
+    @DictFormat(DictTypeConstants.USER_SEX)
+    private Integer sex;
 
-    @Schema(description = "部门ID", example = "我是一个用户")
-    private Long deptId;
-    @Schema(description = "部门名称", example = "IT 部")
-    @ExcelProperty("部门名称")
-    private String deptName;
+    @Schema(description = "年级")
+    @ExcelProperty("年级")
+    private String grade;
 
-    @Schema(description = "岗位编号数组", example = "1")
-    private Set<Long> postIds;
+    @Schema(description = "用户学号")
+    @ExcelProperty("学号")
+    private String userNumber;
 
     @Schema(description = "用户邮箱", example = "yudao@iocoder.cn")
     @ExcelProperty("用户邮箱")
@@ -49,10 +50,42 @@ public class UserRespVO{
     @ExcelProperty("手机号码")
     private String mobile;
 
-    @Schema(description = "用户性别,参见 SexEnum 枚举类", example = "1")
-    @ExcelProperty(value = "用户性别", converter = DictConvert.class)
-    @DictFormat(DictTypeConstants.USER_SEX)
-    private Integer sex;
+    @Schema(description = "用户类型")
+    @ExcelProperty("用户类型")
+    private String userType;
+
+    @Schema(description = "部门名称", example = "IT 部")
+    @ExcelProperty("工作间名称")
+    private String deptName;
+
+    @Schema(description = "导师名称")
+    @ExcelProperty("导师名称")
+    private String supervisor;
+
+    @Schema(description = "导师电话")
+    @ExcelProperty("导师电话")
+    private String supervisorMobile;
+
+    @Schema(description = "工作地点")
+    @ExcelProperty("工作地点")
+    private String workPlace;
+
+    @Schema(description = "照片", example = "url")
+//    @ExcelProperty("照片")
+    private String photoUrl;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式")
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "备注", example = "我是一个用户")
+    private String remark;
+
+    @Schema(description = "部门ID", example = "我是一个用户")
+    private Long deptId;
+
+    @Schema(description = "岗位编号数组", example = "1")
+    private Set<Long> postIds;
 
     @Schema(description = "用户头像", example = "https://www.iocoder.cn/xxx.png")
     private String avatar;
@@ -63,37 +96,14 @@ public class UserRespVO{
     private Integer status;
 
     @Schema(description = "最后登录 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "192.168.1.1")
-    @ExcelProperty("最后登录IP")
+//    @ExcelProperty("最后登录IP")
     private String loginIp;
 
     @Schema(description = "最后登录时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式")
-    @ExcelProperty("最后登录时间")
+//    @ExcelProperty("最后登录时间")
     private LocalDateTime loginDate;
 
-    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式")
-    private LocalDateTime createTime;
-
     //
-    @Schema(description = "照片", example = "url")
-    private String photoUrl;
-
-    @Schema(description = "用户学号")
-    private String userNumber;
-
-    @Schema(description = "导师名称")
-    private String supervisor;
-
-    @Schema(description = "导师电话")
-    private String supervisorMobile;
-
-    @Schema(description = "工作地点")
-    private String workPlace;
-
-    @Schema(description = "年级")
-    private String grade;
-
-    @Schema(description = "用户类型")
-    private String userType;
 
     @Schema(description = "用户照片是否存在")
     private Long photoIsExist;

+ 10 - 14
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/studentAttendance/StudentAttendanceMapper.java

@@ -30,7 +30,7 @@ import java.util.Set;
 @Mapper
 public interface StudentAttendanceMapper extends BaseMapperX<StudentAttendanceDO> {
 
-    //根据登录人员不同显示全部考勤记录
+    //根据登录人员不同显示全部正常的考勤记录
     default PageResult<StudentAttendanceDO> selectPage(StudentAttendancePageReqVO reqVO, Set<Long> roleIds,Long loginId) {
         Long dept_id = SecurityFrameworkUtils.getLoginUserDeptId();
         // 创建查询包装器
@@ -40,6 +40,7 @@ public interface StudentAttendanceMapper extends BaseMapperX<StudentAttendanceDO
         queryWrapper.selectAll(StudentAttendanceDO.class)
                 .selectAs(DeptDO::getName, StudentAttendanceDO::getDeptName)
                 .leftJoin(DeptDO.class, DeptDO::getId, AdminUserDO::getDeptId)
+                .eqIfExists(StudentAttendanceDO::getClockInStatus,"0")//正常
                 .eqIfExists(StudentAttendanceDO::getStudentId, reqVO.getStudentId())
                 .likeIfExists(StudentAttendanceDO::getStudentName, reqVO.getStudentName())
                 .eqIfExists(StudentAttendanceDO::getDeptId, reqVO.getDeptId())
@@ -62,7 +63,7 @@ public interface StudentAttendanceMapper extends BaseMapperX<StudentAttendanceDO
         return selectPage(reqVO, queryWrapper);
     }
 
-    //异常考勤记录
+    //全部异常的异常考勤记录
     default PageResult<StudentAttendanceDO> selectErrorPage(StudentAttendancePageReqVO reqVO, Set<Long> roleIds,Long loginId) {
         Long dept_id = SecurityFrameworkUtils.getLoginUserDeptId();
 
@@ -77,24 +78,19 @@ public interface StudentAttendanceMapper extends BaseMapperX<StudentAttendanceDO
 //                .betweenIfPresent(StudentAttendanceDO::getCreateTime, reqVO.getCreateTime())
                 .eqIfExists(StudentAttendanceDO::getClockInStatus, reqVO.getClockInStatus())
                 //1未打卡,2警告
-                .in(StudentAttendanceDO::getClockInStatus, Arrays.asList(1, 2));
+                .eqIfExists(StudentAttendanceDO::getClockInStatus,"1")
+                .orderByDesc(StudentAttendanceDO::getClockInTime);//未打卡
 
         if (reqVO.getCreateTime() != null && reqVO.getCreateTime().length > 0){
             queryWrapperX.apply("DATE(" + "clock_in_time" + ") BETWEEN {0} AND {1}", reqVO.getCreateTime()[0], reqVO.getCreateTime()[1]);
         }
         if (roleIds != null && !roleIds.isEmpty()) {
             if (roleIds.contains(113L)) {//如果是导师,只看工作间下面的
-                queryWrapperX.eqIfPresent(StudentAttendanceDO::getDeptId, dept_id)
-                        .orderByDesc(StudentAttendanceDO::getClockInTime);
-            } else if (roleIds.contains(112L)) {//是学生,只看自己的(先显示状态的)
-                queryWrapperX.eqIfPresent(StudentAttendanceDO::getStudentId, loginId)
-                        .and(wrapper -> wrapper
-                                .eq(StudentAttendanceDO::getClockInStatus, 1)
-                                .or()
-                                .eq(StudentAttendanceDO::getClockInStatus, 2)
-                        )
-                        .orderByAsc(StudentAttendanceDO::getClockInStatus) // 先按状态排序
-                        .orderByDesc(StudentAttendanceDO::getClockInTime); // 再按时间排序;
+                queryWrapperX.eqIfPresent(StudentAttendanceDO::getDeptId, dept_id);
+
+            } else if (roleIds.contains(112L)) {//是学生,只看自己的
+                queryWrapperX.eqIfPresent(StudentAttendanceDO::getStudentId, loginId);
+
             }
         }
 

+ 31 - 5
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java

@@ -253,7 +253,20 @@ public class AdminUserServiceImpl implements AdminUserService {
     //获取所有用户分页
     @Override
     public PageResult<AdminUserDO> getUserPage(UserPageReqVO reqVO) {
-        return userMapper.selectPage(reqVO, getDeptCondition(reqVO.getDeptId()));
+        PageResult<AdminUserDO> pageResult = userMapper.selectPage(reqVO, getDeptCondition(reqVO.getDeptId()));
+        // 循环处理每个毕业生
+        for (AdminUserDO student : pageResult.getList()) {
+            // 根据 supervisorId 查询导师信息
+            if (student.getSupervisorId() != null) {
+                AdminUserDO supervisorUser = getUser(student.getSupervisorId());
+                String supervisor = supervisorUser.getNickname();
+                String mobile = supervisorUser.getMobile();
+                // 赋值给 对应 字段
+                student.setSupervisor(supervisor);
+                student.setSupervisorMobile(mobile);
+            }
+        }
+        return pageResult;
     }
     //获取所有用户列表
     public List<AdminUserDO> getAllUserList(){
@@ -294,7 +307,20 @@ public class AdminUserServiceImpl implements AdminUserService {
     public PageResult<AdminUserDO>getGraduateStudentPage(UserPageReqVO reqVO) {
         Long loginId = SecurityFrameworkUtils.getLoginUserId();
         Set<Long> roleIds = permissionService.getUserRoleIdListByUserId(loginId);
-        return userMapper.selectGraduateStudentPage(reqVO, getDeptCondition(reqVO.getDeptId()),roleIds,loginId);
+        PageResult<AdminUserDO> pageResult = userMapper.selectGraduateStudentPage(reqVO, getDeptCondition(reqVO.getDeptId()),roleIds,loginId);
+        // 循环处理每个毕业生
+        for (AdminUserDO student : pageResult.getList()) {
+            // 根据 supervisorId 查询导师信息
+            if (student.getSupervisorId() != null) {
+                AdminUserDO supervisorUser = getUser(student.getSupervisorId());
+                String supervisor = supervisorUser.getNickname();
+                String mobile = supervisorUser.getMobile();
+                // 赋值给 对应 字段
+                student.setSupervisor(supervisor);
+                student.setSupervisorMobile(mobile);
+            }
+        }
+        return pageResult;
     }
 
     //查询所有导师
@@ -552,12 +578,12 @@ public class AdminUserServiceImpl implements AdminUserService {
                         .setPostIds(new HashSet<>()); // 设置默认密码及空岗位编号数组
 
                 String transformUserType =TransformUserType(importUser.getUserType());// 转换学生类型
-
-                newUser.setSupervisorId(userMapper.getUserByNickName(importUser.getSupervisor()).getId()); // 导师名称转id
+                if (importUser.getSupervisor()!=null) {
+                    newUser.setSupervisorId(userMapper.getUserByNickName(importUser.getSupervisor()).getId());
+                }// 导师名称转id
                 newUser.setUserType(transformUserType); // 插入学生类型
                 newUser.setTenantId(1L);//设置租户编号
 
-                //TODO还没有获取到插入的id
 
                 Long insertUserId = userMapper.insertAndGetId(newUser); // 执行插入用户数据