dzx пре 1 година
родитељ
комит
97ef679fbb

+ 3 - 2
src/main/java/com/xjrsoft/module/attendance/dto/AddAttendanceRuleCategoryDto.java

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.time.LocalDate;
 import java.util.Date;
 import java.util.List;
 
@@ -34,12 +35,12 @@ public class AddAttendanceRuleCategoryDto implements Serializable {
     * 考勤开始时间
     */
     @ApiModelProperty("考勤开始时间")
-    private Date startDate;
+    private LocalDate startDate;
     /**
     * 考勤结束时间
     */
     @ApiModelProperty("考勤结束时间")
-    private Date endDate;
+    private LocalDate endDate;
     /**
     * 被考勤角色(xjr_role)
     */

+ 3 - 2
src/main/java/com/xjrsoft/module/attendance/entity/AttendanceRuleCategory.java

@@ -11,6 +11,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.time.LocalDate;
 import java.util.Date;
 import java.util.List;
 
@@ -85,12 +86,12 @@ public class AttendanceRuleCategory implements Serializable {
     * 考勤开始时间
     */
     @ApiModelProperty("考勤开始时间")
-    private Date startDate;
+    private LocalDate startDate;
     /**
     * 考勤结束时间
     */
     @ApiModelProperty("考勤结束时间")
-    private Date endDate;
+    private LocalDate endDate;
     /**
     * 被考勤角色(xjr_role)
     */

+ 12 - 2
src/main/java/com/xjrsoft/module/attendance/entity/AttendanceRuleDetails.java

@@ -93,12 +93,12 @@ public class AttendanceRuleDetails implements Serializable {
     /**
     * 上学时间前多少分钟进行提醒
     */
-    @ApiModelProperty("上学时间前多少分钟进行提醒")
+    @ApiModelProperty("上学时间前多少分钟进行提醒(返校时间前多少分钟进行提醒)")
     private Integer agoMinutes;
     /**
     * 超过上学时间多少分钟未打卡进行提醒
     */
-    @ApiModelProperty("超过上学时间多少分钟未打卡进行提醒")
+    @ApiModelProperty("超过上学时间多少分钟未打卡进行提醒(超过返校时间多少分钟未打卡进行提醒)")
     private Integer overMinutes;
     /**
     * 上学时间内是否允许进出
@@ -217,4 +217,14 @@ public class AttendanceRuleDetails implements Serializable {
     private Long attendanceRuleCategoryId;
 
 
+    @ApiModelProperty("节假日最后一天是否返校")
+    private Integer holidaysLastDayInOut;
+
+    @ApiModelProperty("返校上学时间")
+    private LocalTime returnStartTime;
+
+    @ApiModelProperty("返校放学时间")
+    private LocalTime returnEndTime;
+
+
 }

+ 66 - 20
src/main/java/com/xjrsoft/module/attendance/service/impl/AttendanceRuleCategoryServiceImpl.java

@@ -1,7 +1,10 @@
 package com.xjrsoft.module.attendance.service.impl;
 
+import cn.dev33.satoken.stp.StpUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.xjrsoft.common.enums.DeleteMark;
 import com.xjrsoft.module.attendance.entity.AttendanceRuleCategory;
 import com.xjrsoft.module.attendance.entity.AttendanceRuleDetails;
 import com.xjrsoft.module.attendance.entity.AttendanceUserRelation;
@@ -9,10 +12,16 @@ import com.xjrsoft.module.attendance.mapper.AttendanceRuleCategoryMapper;
 import com.xjrsoft.module.attendance.mapper.AttendanceRuleDetailsMapper;
 import com.xjrsoft.module.attendance.mapper.AttendanceUserRelationMapper;
 import com.xjrsoft.module.attendance.service.IAttendanceRuleCategoryService;
+import com.xjrsoft.module.concat.service.IXjrUserService;
+import com.xjrsoft.module.organization.entity.UserDeptRelation;
+import com.xjrsoft.module.teacher.entity.BaseTeacher;
+import com.xjrsoft.module.teacher.entity.XjrUser;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
@@ -26,36 +35,73 @@ import java.util.stream.Collectors;
 @Service
 @AllArgsConstructor
 public class AttendanceRuleCategoryServiceImpl extends MPJBaseServiceImpl<AttendanceRuleCategoryMapper, AttendanceRuleCategory> implements IAttendanceRuleCategoryService {
-    private final AttendanceRuleCategoryMapper attendanceRuleCategoryAttendanceRuleCategoryMapper;
+    private final AttendanceRuleCategoryMapper categoryMapper;
 
-    private final AttendanceRuleDetailsMapper attendanceRuleCategoryAttendanceRuleDetailsMapper;
-    private final AttendanceUserRelationMapper attendanceRuleCategoryAttendanceUserRelationMapper;
+    private final AttendanceRuleDetailsMapper detailsMapper;
+    private final AttendanceUserRelationMapper relationMapper;
+    private final IXjrUserService xjrUserService;
 
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean add(AttendanceRuleCategory attendanceRuleCategory) {
-        attendanceRuleCategoryAttendanceRuleCategoryMapper.insert(attendanceRuleCategory);
+        categoryMapper.insert(attendanceRuleCategory);
         for (AttendanceRuleDetails attendanceRuleDetails : attendanceRuleCategory.getAttendanceRuleDetailsList()) {
             attendanceRuleDetails.setAttendanceRuleCategoryId(attendanceRuleCategory.getId());
-            attendanceRuleCategoryAttendanceRuleDetailsMapper.insert(attendanceRuleDetails);
+            detailsMapper.insert(attendanceRuleDetails);
         }
-        for (AttendanceUserRelation attendanceUserRelation : attendanceRuleCategory.getAttendanceUserRelationList()) {
-            attendanceUserRelation.setAttendanceRuleCategoryId(attendanceRuleCategory.getId());
-            attendanceRuleCategoryAttendanceUserRelationMapper.insert(attendanceUserRelation);
+
+        if(attendanceRuleCategory.getRoleId() != null && attendanceRuleCategory.getRoleId() == 2){
+            List<XjrUser> insertList = new ArrayList<>();
+            if(attendanceRuleCategory.getAttendanceRange() == 1){
+                List<XjrUser> userList = xjrUserService.list(
+                    new MPJLambdaWrapper<XjrUser>()
+                    .leftJoin(BaseTeacher.class, BaseTeacher::getUserId, XjrUser::getId)
+                    .eq(BaseTeacher::getDeleteMark, DeleteMark.NODELETE.getCode())
+                    .eq(XjrUser::getDeleteMark, DeleteMark.NODELETE.getCode())
+                );
+                insertList.addAll(userList);
+            }else if(attendanceRuleCategory.getAttendanceRange() == 2){
+                List<Long> deptIds = new ArrayList<>();
+                for (AttendanceUserRelation relation : attendanceRuleCategory.getAttendanceUserRelationList()) {
+                    if(relation.getDeptId() != null){
+                        deptIds.add(relation.getDeptId());
+                    }
+                }
+
+                List<XjrUser> userList = xjrUserService.list(
+                    new MPJLambdaWrapper<XjrUser>()
+                    .leftJoin(BaseTeacher.class, BaseTeacher::getUserId, XjrUser::getId)
+                    .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, XjrUser::getId)
+                    .eq(BaseTeacher::getDeleteMark, DeleteMark.NODELETE.getCode())
+                    .eq(XjrUser::getDeleteMark, DeleteMark.NODELETE.getCode())
+                    .in(UserDeptRelation::getDeptId, deptIds)
+                );
+                insertList.addAll(userList);
+            }
+
+            for (XjrUser user : insertList) {
+                AttendanceUserRelation relation = new AttendanceUserRelation();
+                relation.setCreateDate(new Date());
+                relation.setCreateUserId(StpUtil.getLoginIdAsLong());
+                relation.setUserId(user.getId());
+                relation.setAttendanceRuleCategoryId(attendanceRuleCategory.getId());
+                relationMapper.insert(relation);
+            }
         }
 
+
         return true;
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean update(AttendanceRuleCategory attendanceRuleCategory) {
-        attendanceRuleCategoryAttendanceRuleCategoryMapper.updateById(attendanceRuleCategory);
+        categoryMapper.updateById(attendanceRuleCategory);
         //********************************* AttendanceRuleDetails  增删改  开始 *******************************************/
         {
             // 查出所有子级的id
-            List<AttendanceRuleDetails> attendanceRuleDetailsList = attendanceRuleCategoryAttendanceRuleDetailsMapper.selectList(Wrappers.lambdaQuery(AttendanceRuleDetails.class).eq(AttendanceRuleDetails::getAttendanceRuleCategoryId, attendanceRuleCategory.getId()).select(AttendanceRuleDetails::getId));
+            List<AttendanceRuleDetails> attendanceRuleDetailsList = detailsMapper.selectList(Wrappers.lambdaQuery(AttendanceRuleDetails.class).eq(AttendanceRuleDetails::getAttendanceRuleCategoryId, attendanceRuleCategory.getId()).select(AttendanceRuleDetails::getId));
             List<Long> attendanceRuleDetailsIds = attendanceRuleDetailsList.stream().map(AttendanceRuleDetails::getId).collect(Collectors.toList());
             //原有子表单 没有被删除的主键
             List<Long> attendanceRuleDetailsOldIds = attendanceRuleCategory.getAttendanceRuleDetailsList().stream().map(AttendanceRuleDetails::getId).filter(Objects::nonNull).collect(Collectors.toList());
@@ -65,18 +111,18 @@ public class AttendanceRuleCategoryServiceImpl extends MPJBaseServiceImpl<Attend
             for (AttendanceRuleDetails attendanceRuleDetails : attendanceRuleCategory.getAttendanceRuleDetailsList()) {
                 //如果不等于空则修改
                 if (attendanceRuleDetails.getId() != null) {
-                    attendanceRuleCategoryAttendanceRuleDetailsMapper.updateById(attendanceRuleDetails);
+                    detailsMapper.updateById(attendanceRuleDetails);
                 }
                 //如果等于空 则新增
                 else {
                     //已经不存在的id 删除
                     attendanceRuleDetails.setAttendanceRuleCategoryId(attendanceRuleCategory.getId());
-                    attendanceRuleCategoryAttendanceRuleDetailsMapper.insert(attendanceRuleDetails);
+                    detailsMapper.insert(attendanceRuleDetails);
                 }
             }
             //已经不存在的id 删除
             if(attendanceRuleDetailsRemoveIds.size() > 0){
-                attendanceRuleCategoryAttendanceRuleDetailsMapper.deleteBatchIds(attendanceRuleDetailsRemoveIds);
+                detailsMapper.deleteBatchIds(attendanceRuleDetailsRemoveIds);
             }
         }
         //********************************* AttendanceRuleDetails  增删改  结束 *******************************************/
@@ -84,7 +130,7 @@ public class AttendanceRuleCategoryServiceImpl extends MPJBaseServiceImpl<Attend
         //********************************* AttendanceUserRelation  增删改  开始 *******************************************/
         {
             // 查出所有子级的id
-            List<AttendanceUserRelation> attendanceUserRelationList = attendanceRuleCategoryAttendanceUserRelationMapper.selectList(Wrappers.lambdaQuery(AttendanceUserRelation.class).eq(AttendanceUserRelation::getAttendanceRuleCategoryId, attendanceRuleCategory.getId()).select(AttendanceUserRelation::getId));
+            List<AttendanceUserRelation> attendanceUserRelationList = relationMapper.selectList(Wrappers.lambdaQuery(AttendanceUserRelation.class).eq(AttendanceUserRelation::getAttendanceRuleCategoryId, attendanceRuleCategory.getId()).select(AttendanceUserRelation::getId));
             List<Long> attendanceUserRelationIds = attendanceUserRelationList.stream().map(AttendanceUserRelation::getId).collect(Collectors.toList());
             //原有子表单 没有被删除的主键
             List<Long> attendanceUserRelationOldIds = attendanceRuleCategory.getAttendanceUserRelationList().stream().map(AttendanceUserRelation::getId).filter(Objects::nonNull).collect(Collectors.toList());
@@ -94,18 +140,18 @@ public class AttendanceRuleCategoryServiceImpl extends MPJBaseServiceImpl<Attend
             for (AttendanceUserRelation attendanceUserRelation : attendanceRuleCategory.getAttendanceUserRelationList()) {
                 //如果不等于空则修改
                 if (attendanceUserRelation.getId() != null) {
-                    attendanceRuleCategoryAttendanceUserRelationMapper.updateById(attendanceUserRelation);
+                    relationMapper.updateById(attendanceUserRelation);
                 }
                 //如果等于空 则新增
                 else {
                     //已经不存在的id 删除
                     attendanceUserRelation.setAttendanceRuleCategoryId(attendanceRuleCategory.getId());
-                    attendanceRuleCategoryAttendanceUserRelationMapper.insert(attendanceUserRelation);
+                    relationMapper.insert(attendanceUserRelation);
                 }
             }
             //已经不存在的id 删除
             if(attendanceUserRelationRemoveIds.size() > 0){
-                attendanceRuleCategoryAttendanceUserRelationMapper.deleteBatchIds(attendanceUserRelationRemoveIds);
+                relationMapper.deleteBatchIds(attendanceUserRelationRemoveIds);
             }
         }
         //********************************* AttendanceUserRelation  增删改  结束 *******************************************/
@@ -116,9 +162,9 @@ public class AttendanceRuleCategoryServiceImpl extends MPJBaseServiceImpl<Attend
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean delete(List<Long> ids) {
-        attendanceRuleCategoryAttendanceRuleCategoryMapper.deleteBatchIds(ids);
-        attendanceRuleCategoryAttendanceRuleDetailsMapper.delete(Wrappers.lambdaQuery(AttendanceRuleDetails.class).in(AttendanceRuleDetails::getAttendanceRuleCategoryId, ids));
-        attendanceRuleCategoryAttendanceUserRelationMapper.delete(Wrappers.lambdaQuery(AttendanceUserRelation.class).in(AttendanceUserRelation::getAttendanceRuleCategoryId, ids));
+        categoryMapper.deleteBatchIds(ids);
+        detailsMapper.delete(Wrappers.lambdaQuery(AttendanceRuleDetails.class).in(AttendanceRuleDetails::getAttendanceRuleCategoryId, ids));
+        relationMapper.delete(Wrappers.lambdaQuery(AttendanceUserRelation.class).in(AttendanceUserRelation::getAttendanceRuleCategoryId, ids));
 
         return true;
     }

+ 96 - 0
src/main/java/com/xjrsoft/module/job/HikvisionBaseDataTask.java

@@ -0,0 +1,96 @@
+package com.xjrsoft.module.job;
+
+import cn.hutool.db.Db;
+import cn.hutool.extra.spring.SpringUtil;
+import com.google.gson.JsonArray;
+import com.xjrsoft.common.constant.GlobalConstant;
+import com.xjrsoft.common.utils.DatasourceUtil;
+import com.xjrsoft.module.schedule.entity.JianyueData;
+import com.xjrsoft.module.schedule.util.DataUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.sql.DataSource;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author dzx
+ * @date 2024/5/8
+ */
+@Component
+@Slf4j
+public class HikvisionBaseDataTask {
+
+
+    @Scheduled(cron = "0 */15 * * * ?")
+    public void RefreshConnectionPool() {
+        String active = SpringUtil.getActiveProfile();
+        if(!"prod".equals(active)){
+            log.info("非正式环境,无法执行数据推送");
+            return;
+        }
+        log.info("开始推送海康威视基础数据");
+        DataSource datasource = DatasourceUtil.getDataSource(GlobalConstant.DEFAULT_DATASOURCE_KEY);
+        try {
+            Db use = Db.use(datasource);
+            String sql = "SELECT distinct table_name FROM hikvision_data WHERE 1 = 1";
+            List<JianyueData> query = use.query(sql, JianyueData.class);
+            Set<String> tables = new HashSet<>();
+            for (JianyueData jianyueData : query) {
+                tables.add(jianyueData.getTableName());
+            }
+            sql = "SELECT * FROM hikvision_data WHERE 0 = 0";
+            List<JianyueData> list = use.query(sql, JianyueData.class);
+            Map<String, Map<Long, String>> dataMap = new HashMap<>();
+            for (String table : tables) {
+                Map<Long, String> tableData = new HashMap<>();
+                for (JianyueData jianyueData : list) {
+                    if(!table.equals(jianyueData.getTableName())){
+                        continue;
+                    }
+                    tableData.put(jianyueData.getSourceId(), jianyueData.getJianyueId());
+                }
+                dataMap.put(table, tableData);
+            }
+            DataUtil dataUtil = new DataUtil();
+            //查询校区
+            JsonArray schoolDistrictData = dataUtil.getSchoolDistrictData();
+            //推送组织机构
+            String tableName = "xjr_department";
+            Map<Long, String> department = dataUtil.insertGrade(use, tableName, schoolDistrictData.get(0).getAsString(), dataMap.get(tableName));
+            if(department.isEmpty() && dataMap.get(tableName) != null){
+                department = dataMap.get(tableName);
+            }
+
+            //推送学期
+            tableName = "base_semester";
+            dataUtil.insertSemester(use, tableName, dataMap.get(tableName));
+            //推送标签
+            tableName = "base_label";
+            Map<Long, String> tagMap = dataUtil.insertCourseTag(use, tableName, dataMap.get(tableName));
+            if(tagMap.isEmpty() && dataMap.get(tableName) != null){
+                tagMap = dataMap.get(tableName);
+            }
+
+
+            //推送教职工
+            tableName = "base_teacher";
+            Map<Long, String> teacherMap = dataUtil.insertTeacher(use, tableName, dataMap.get(tableName));
+            if(teacherMap.isEmpty() && dataMap.get(tableName) != null){
+                teacherMap = dataMap.get(tableName);
+            }
+            //推送学生
+//            tableName = "base_student";
+//            dataUtil.insertStudent(use, tableName, grade, dataMap.get(tableName));
+
+            log.info("数据推送完成");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+    }
+}