Browse Source

教师获奖奖项接口

dzx 1 năm trước cách đây
mục cha
commit
af23919b53

+ 7 - 0
src/main/java/com/xjrsoft/module/hikvision/controller/EventController.java

@@ -91,6 +91,7 @@ public class EventController {
                     }
                     String happenTime = eventObject.get("happenTime").getAsString();
                     String recordTimeStr = outInRecordUtil.ChangeTime(happenTime);
+                    int status = eventObject.get("status").getAsInt();
                     if (idNum == null) continue;
                     if (!Objects.equals(faceImportMapper.IsStudentTypeByPersonId(Long.valueOf(idNum)), "学生")) {
                         continue;
@@ -119,6 +120,12 @@ public class EventController {
                         paramJson.put("thing1", student.getName());
                         paramJson.put("time3", recordTimeStr);
                         paramJson.put("thing2", baseClass.getName());
+                        if(status == 1){
+                            paramJson.put("const4", "进校");
+                        }else{
+                            paramJson.put("const4", "出校");
+                        }
+
                         weChatSendMessageDto.setContent(paramJson);
                         weChatService.sendTemplateMessage(weChatSendMessageDto);
                     }

+ 163 - 0
src/main/java/com/xjrsoft/module/job/AttenDanceWarnNoticeTask.java

@@ -0,0 +1,163 @@
+package com.xjrsoft.module.job;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.xjrsoft.module.attendance.entity.AttendanceRuleDetails;
+import com.xjrsoft.module.attendance.entity.AttendanceUserRelation;
+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.dto.WeChatSendMessageDto;
+import com.xjrsoft.module.organization.service.IWeChatService;
+import com.xjrsoft.module.teacher.entity.XjrUser;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * 考勤预警通知
+ * @author dzx
+ * @date 2024年5月21日
+ */
+@Component
+@Slf4j
+public class AttenDanceWarnNoticeTask {
+    @Autowired
+    private IAttendanceRuleCategoryService categoryService;
+
+    @Autowired
+    private IXjrUserService userService;
+
+    @Autowired
+    private AttendanceUserRelationMapper relationMapper;
+
+    @Autowired
+    private IWeChatService weChatService;
+
+    @Scheduled(cron = "0 */10 * * * ?")
+    public void RefreshConnectionPool() {
+        //获取当前时间
+        LocalDateTime now = LocalDateTime.now();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        String timeStr = now.format(formatter);
+
+        //查询今天所有的考勤规则
+        List<AttendanceRuleDetails> ruleDetailsList = categoryService.getTodayRules();
+        Map<Long, AttendanceRuleDetails> ruleDetailsMap = new HashMap<>();
+        for (AttendanceRuleDetails ruleDetail : ruleDetailsList) {
+            ruleDetailsMap.put(ruleDetail.getAttendanceRuleCategoryId(), ruleDetail);
+        }
+
+        //查询出所有人的考勤规则
+        List<AttendanceUserRelation> relationList = relationMapper.selectList(
+                new QueryWrapper<AttendanceUserRelation>().lambda()
+                        .eq(AttendanceUserRelation::getDeleteMark, 0)
+        );
+        Map<Long, AttendanceRuleDetails> allTodyRule = new HashMap<>();
+        for (AttendanceUserRelation userRelation : relationList) {
+            allTodyRule.put(userRelation.getUserId(), ruleDetailsMap.get(userRelation.getAttendanceRuleCategoryId()));
+        }
+
+        //判断所有当前时间下,哪几条规则需要进行提醒
+        Map<Long, Integer> ruleDetailsJudgeMap = judgeExecuteNotice(now, ruleDetailsList);
+
+        //查询
+
+        //根据规则中的用户id查询出所有绑定了微信的学生和教师
+        List<XjrUser> userList = getUserList(allTodyRule.keySet());
+        for (XjrUser xjrUser : userList) {
+            AttendanceRuleDetails ruleDetails = allTodyRule.get(xjrUser.getId());
+            Integer status = ruleDetailsJudgeMap.get(ruleDetails.getId());
+            if(status == 0){
+                continue;
+            }
+
+            WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
+            weChatSendMessageDto.setUserId(xjrUser.getOpenId());
+            weChatSendMessageDto.setTemplateId("Fg4AWVQRGernl0PiJQ8gRgCUFHEGZuizlClQNuVhqu4");
+            weChatSendMessageDto.setMsgId(xjrUser.getId().toString());
+            JSONObject paramJson = new JSONObject();
+
+            paramJson.put("thing8", xjrUser.getName());
+            paramJson.put("time9", timeStr);
+            if(status == 1){
+                paramJson.put("const12", "进校");
+            }else{
+                paramJson.put("const12", "出校");
+            }
+
+            weChatSendMessageDto.setContent(paramJson);
+            weChatService.sendTemplateMessage(weChatSendMessageDto);
+        }
+    }
+
+    /**
+     * 判断所有规则,哪些需要发送
+     * @param judgeTime
+     * @param ruleDetailsList
+     * @return 0:不需要提醒,-1:待打卡,1:未打卡
+     */
+    Map<Long, Integer> judgeExecuteNotice(LocalDateTime judgeTime, List<AttendanceRuleDetails> ruleDetailsList){
+        Map<Long, Integer> result = new HashMap<>();
+        for (AttendanceRuleDetails ruleDetails : ruleDetailsList) {
+            if(ruleDetails.getIsAllowInOutSchool() != null && ruleDetails.getIsAllowInOutSchool() != 1
+                    && ruleDetails.getIsAttendance() != null && ruleDetails.getIsAttendance() == 1){
+
+                LocalDateTime amStartTime = judgeTime.with(ruleDetails.getAmStartTime());
+                long amBetween = ChronoUnit.MINUTES.between(judgeTime, amStartTime);
+                if(amBetween == ruleDetails.getAgoMinutes()){
+                    result.put(ruleDetails.getId(), - 1);
+                }else if(amBetween == ruleDetails.getOverMinutes()){
+                    result.put(ruleDetails.getId(), - 1);
+                }
+
+                LocalDateTime pmStartTime = judgeTime.with(ruleDetails.getPmStartTime());
+                long pmBetween = ChronoUnit.MINUTES.between(judgeTime, pmStartTime);
+                if(pmBetween == ruleDetails.getAgoMinutes()){
+                    result.put(ruleDetails.getId(), - 1);
+                }else if(pmBetween == ruleDetails.getOverMinutes()){
+                    result.put(ruleDetails.getId(), - 1);
+                }
+
+                LocalDateTime eveningStartTime = judgeTime.with(ruleDetails.getEveningStartTime());
+                long eveningBetween = ChronoUnit.MINUTES.between(judgeTime, eveningStartTime);
+                if(eveningBetween == ruleDetails.getAgoMinutes()){
+                    result.put(ruleDetails.getId(), - 1);
+                }else if(eveningBetween == ruleDetails.getOverMinutes()){
+                    result.put(ruleDetails.getId(), - 1);
+                }
+                if(!result.containsKey(ruleDetails.getId())){
+                    result.put(ruleDetails.getId(), 0);
+                }
+            }else{
+                result.put(ruleDetails.getId(), 0);
+            }
+
+        }
+        return result;
+    }
+    /**
+     * 查询出所有用户信息(openId不为空的)
+     * @param userIds 需要插叙的userid
+     * @return 用户信息
+     */
+    List<XjrUser> getUserList(Set<Long> userIds){
+        return userService.list(
+            new QueryWrapper<XjrUser>().lambda()
+            .eq(XjrUser::getId, userIds)
+            .isNotNull(XjrUser::getOpenId)
+        );
+    }
+
+
+
+}

+ 0 - 3
src/main/java/com/xjrsoft/module/student/entity/BaseStudentFamilyMember.java

@@ -178,7 +178,4 @@ public class BaseStudentFamilyMember implements Serializable {
     @ApiModelProperty("微信号")
     private String wechat;
 
-
-    @ApiModelProperty("微信openId")
-    private String openId;
 }

+ 13 - 2
src/main/java/com/xjrsoft/module/teacher/controller/AttendanceRecordController.java

@@ -13,7 +13,11 @@ import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.organization.entity.Department;
 import com.xjrsoft.module.organization.entity.UserDeptRelation;
-import com.xjrsoft.module.teacher.dto.*;
+import com.xjrsoft.module.teacher.dto.AddAttendanceRecordDto;
+import com.xjrsoft.module.teacher.dto.AttendanceRecordPageDto;
+import com.xjrsoft.module.teacher.dto.ClockInDto;
+import com.xjrsoft.module.teacher.dto.GetCheckInDayDto;
+import com.xjrsoft.module.teacher.dto.UpdateAttendanceRecordDto;
 import com.xjrsoft.module.teacher.entity.AttendanceRecord;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.teacher.service.IAttendanceRecordService;
@@ -24,7 +28,14 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
 import java.io.ByteArrayOutputStream;

+ 0 - 1
src/main/java/com/xjrsoft/module/teacher/controller/TeacherbaseManagerController.java

@@ -14,7 +14,6 @@ import com.xjrsoft.common.model.result.R;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.utils.VoToColumnUtil;
-import com.xjrsoft.module.attendance.entity.StudentAttendanceRecord;
 import com.xjrsoft.module.organization.entity.UserDeptRelation;
 import com.xjrsoft.module.organization.service.IUserDeptRelationService;
 import com.xjrsoft.module.system.entity.DictionaryDetail;

+ 0 - 1
src/main/java/com/xjrsoft/module/teacher/mapper/WfTeacherleaveMapper.java

@@ -7,7 +7,6 @@ import org.apache.ibatis.annotations.Param;
 
 import java.time.LocalDateTime;
 import java.util.List;
-import java.util.Map;
 
 /**
 * @title: 教职工请假流程

+ 0 - 3
src/main/java/com/xjrsoft/module/teacher/service/IBaseTeacherService.java

@@ -2,9 +2,6 @@ package com.xjrsoft.module.teacher.service;
 
 import com.github.yulichang.base.MPJBaseService;
 import com.xjrsoft.module.teacher.entity.BaseTeacher;
-import com.xjrsoft.module.teacher.entity.XjrUser;
-
-import java.util.List;
 
 /**
 * @title: service

+ 0 - 1
src/main/java/com/xjrsoft/module/teacher/service/IWfTeacherleaveService.java

@@ -1,7 +1,6 @@
 package com.xjrsoft.module.teacher.service;
 
 import com.github.yulichang.base.MPJBaseService;
-import com.xjrsoft.module.personnel.entity.ReservationSchool;
 import com.xjrsoft.module.teacher.entity.WfTeacherleave;
 
 import java.time.LocalDateTime;

+ 0 - 1
src/main/java/com/xjrsoft/module/teacher/service/impl/TeacherbaseManagerServiceImpl.java

@@ -46,7 +46,6 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
-import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 
 /**

+ 30 - 0
src/test/java/com/xjrsoft/module/job/AttenDanceWarnNoticeTaskTest.java

@@ -0,0 +1,30 @@
+package com.xjrsoft.module.job;
+
+import org.junit.jupiter.api.Test;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * @author dzx
+ * @date 2024/6/4
+ */
+class AttenDanceWarnNoticeTaskTest {
+
+
+    @Test
+    void test(){
+        LocalDateTime now = LocalDateTime.now();
+        System.out.println(now.getDayOfWeek().name());
+
+        LocalTime amStartTime = LocalTime.of(8,0,0);
+        System.out.println(now.with(amStartTime));
+
+        System.out.println(1L == 1);
+
+    }
+
+}

+ 25 - 0
src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java

@@ -3163,4 +3163,29 @@ public class FreeMarkerGeneratorTest {
 
         apiGeneratorService.generateCodes(params);
     }
+
+    @Test
+    public void gcTeacherAwardItem() throws IOException {
+        List<TableConfig> tableConfigs = new ArrayList<>();
+        TableConfig mainTable = new TableConfig();
+        mainTable.setTableName("teacher_award_item");//init_sql中的表名
+        mainTable.setIsMain(true);//是否是主表,一般默认为true
+        mainTable.setPkField(GlobalConstant.DEFAULT_PK);//设置主键
+        mainTable.setPkType(GlobalConstant.DEFAULT_PK_TYPE);//设置主键类型
+        tableConfigs.add(mainTable);
+
+        ApiGenerateCodesDto params = new ApiGenerateCodesDto();
+        params.setAuthor("dzx");//作者名称
+        params.setPackageName("teacher");//包名
+        params.setTableConfigs(tableConfigs);
+        params.setPage(true);//是否生成分页接口
+        params.setImport(false);//是否生成导入接口
+        params.setExport(false);//是否生成导出接口
+        params.setOutMainDir(true);//是否生成在主目录,前期测试可设置成false
+        params.setDs(ds);
+
+        IApiGeneratorService apiGeneratorService = new ApiGeneratorServiceImpl();
+
+        apiGeneratorService.generateCodes(params);
+    }
 }