Browse Source

Merge remote-tracking branch 'origin/dev' into dev

dzx 9 months ago
parent
commit
5b59ef73b7
29 changed files with 814 additions and 63 deletions
  1. 1 0
      src/main/java/com/xjrsoft/config/HikvisionConfig.java
  2. 22 12
      src/main/java/com/xjrsoft/module/base/controller/BaseClassCourseController.java
  3. 3 3
      src/main/java/com/xjrsoft/module/base/entity/ClassCourseTextbook.java
  4. 30 0
      src/main/java/com/xjrsoft/module/base/entity/CourseTextbookPair.java
  5. 3 4
      src/main/java/com/xjrsoft/module/base/mapper/BaseClassCourseMapper.java
  6. 3 3
      src/main/java/com/xjrsoft/module/base/service/IBaseClassCourseService.java
  7. 6 6
      src/main/java/com/xjrsoft/module/base/service/impl/BaseClassCourseServiceImpl.java
  8. 1 1
      src/main/java/com/xjrsoft/module/base/vo/BaseClassCoursePageVo.java
  9. 21 3
      src/main/java/com/xjrsoft/module/hikvision/controller/EventController.java
  10. 31 2
      src/main/java/com/xjrsoft/module/hikvision/util/OutInRecordUtil.java
  11. 33 0
      src/main/java/com/xjrsoft/module/liteflow/node/TeacherAwardNode.java
  12. 42 0
      src/main/java/com/xjrsoft/module/teacher/controller/TeacherAwardController.java
  13. 38 0
      src/main/java/com/xjrsoft/module/teacher/dto/TeacherAwardDetailPageDto.java
  14. 177 0
      src/main/java/com/xjrsoft/module/teacher/entity/TeacherAward.java
  15. 2 0
      src/main/java/com/xjrsoft/module/teacher/mapper/FaceImportMapper.java
  16. 17 0
      src/main/java/com/xjrsoft/module/teacher/mapper/TeacherAwardMapper.java
  17. 6 0
      src/main/java/com/xjrsoft/module/teacher/service/ITeacherAwardItemService.java
  18. 24 0
      src/main/java/com/xjrsoft/module/teacher/service/ITeacherAwardService.java
  19. 24 0
      src/main/java/com/xjrsoft/module/teacher/service/impl/TeacherAwardItemServiceImpl.java
  20. 89 0
      src/main/java/com/xjrsoft/module/teacher/service/impl/TeacherAwardServiceImpl.java
  21. 128 0
      src/main/java/com/xjrsoft/module/teacher/vo/TeacherAwardDetailPageVo.java
  22. 2 0
      src/main/resources/application-dev.yml
  23. 2 0
      src/main/resources/application-pre.yml
  24. 2 0
      src/main/resources/application-prod.yml
  25. 54 26
      src/main/resources/mapper/base/BaseClassCourse.xml
  26. 6 0
      src/main/resources/mapper/teacher/TeacherFaceImportMapper.xml
  27. 18 0
      src/test/java/com/xjrsoft/module/teacher/service/impl/TeacherAwardServiceImplTest.java
  28. 3 3
      src/test/java/com/xjrsoft/module/textbook/service/impl/TextbookServiceImplTest.java
  29. 26 0
      src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java

+ 1 - 0
src/main/java/com/xjrsoft/config/HikvisionConfig.java

@@ -23,4 +23,5 @@ public class HikvisionConfig {
 
     private String carUrl;
 
+    private String visitUrl;
 }

+ 22 - 12
src/main/java/com/xjrsoft/module/base/controller/BaseClassCourseController.java

@@ -88,41 +88,51 @@ public class BaseClassCourseController {
     @GetMapping("/getAllCoursesAndTextbooks")
     @ApiOperation(value="获取所有课程教材")
     @SaCheckPermission("baseclasscourse:detail")
-    public RT<List<CourseBookInfo>> getAllCoursesAndTextbooks(@RequestParam(required = false) Long subjectGroupId) {
-        List<CourseBookInfo> data = baseClassCourseService.getAllCourseBook(subjectGroupId);
+    public RT<List<CourseBookInfo>> getAllCoursesAndTextbooks(@RequestParam(required = false) Long[] classIds, @RequestParam(required = false) Long subjectGroupId, @RequestParam(required = false) Long semester) {
+        List<CourseBookInfo> data = baseClassCourseService.getAllCourseBook(classIds, subjectGroupId, semester);
         return RT.ok(data);
     }
 
     @GetMapping("/getAllSelectedCoursesAndTextbooks")
     @ApiOperation(value="获取所有以选择课程教材")
     @SaCheckPermission("baseclasscourse:detail")
-    public RT<List<CourseBookInfo>> getAllSelectedCoursesAndTextbooks(@RequestParam(required = false) Long[] classIds) {
-        List<CourseBookInfo> data = baseClassCourseService.getSelectedCourseBook(classIds);
+    public RT<List<CourseBookInfo>> getAllSelectedCoursesAndTextbooks(@RequestParam(required = false) Long[] classIds, @RequestParam(required = false) Long semester) {
+        List<CourseBookInfo> data = baseClassCourseService.getSelectedCourseBook(classIds, semester);
         return RT.ok(data);
     }
 
-    @GetMapping("/updateAddCoursesAndTextbooks")
+    @PostMapping("/updateAddCoursesAndTextbooks")
     @ApiOperation(value="更新增加课程教材")
     @SaCheckPermission("baseclasscourse:detail")
     public RT updateAddCoursesAndTextbooks(@Valid ClassCourseTextbook list) {
-        baseClassCourseService.updateAddCourseBook(list.getClassId(), list.getCourseId(), list.getTextbookId());
+        for (Long classId : list.getClassId()){
+            for (Long i = 0L ;i < list.getCourseId().length; i++){
+                baseClassCourseService.updateAddCourseBook(classId, list.getCourseId()[Math.toIntExact(i)], list.getTextbookId()[Math.toIntExact(i)]);
+            }
+        }
         return RT.ok();
     }
 
-    @GetMapping("/updateRemoveCoursesAndTextbooks")
+    @PostMapping("/updateRemoveCoursesAndTextbooks")
     @ApiOperation(value="更新减少课程教材")
     @SaCheckPermission("baseclasscourse:detail")
     public RT updateRemoveCoursesAndTextbooks(@Valid ClassCourseTextbook list) {
-        baseClassCourseService.updateRemoveCourseBook(list.getClassId(), list.getCourseId(), list.getTextbookId());
+        for (Long classId : list.getClassId()){
+            for (Long i = 0L ;i < list.getCourseId().length; i++){
+                baseClassCourseService.updateRemoveCourseBook(classId, list.getCourseId()[Math.toIntExact(i)], list.getTextbookId()[Math.toIntExact(i)]);
+            }
+        }
         return RT.ok();
     }
 
-    @GetMapping("/insertClassCourseTextbookCombinations")
+    @PostMapping("/insertClassCourseTextbookCombinations")
     @ApiOperation(value="复用课程教材")
     @SaCheckPermission("baseclasscourse:detail")
-    public RT insertClassCourseTextbookCombinations(@RequestParam  Long newClassId, @RequestParam Long sourceClassId) {
-        baseClassCourseService.markExistingRecordsAsDeleted(newClassId, sourceClassId);
-        baseClassCourseService.duplicateCourseBook(newClassId, sourceClassId);
+    public RT insertClassCourseTextbookCombinations(@RequestParam Long newClassId, @RequestParam Long[] sourceClassIds, @RequestParam Long semester) {
+//        baseClassCourseService.markExistingRecordsAsDeleted(newClassId, sourceClassId);
+        for (Long sourceId : sourceClassIds){
+            baseClassCourseService.duplicateCourseBook(newClassId, sourceId, semester);
+        }
         return RT.ok();
     }
 

+ 3 - 3
src/main/java/com/xjrsoft/module/base/entity/ClassCourseTextbook.java

@@ -7,11 +7,11 @@ import lombok.Data;
 @Data
 public class ClassCourseTextbook {
     @ApiModelProperty("班级id")
-    private Long classId;
+    private Long[] classId;
 
     @ApiModelProperty("课程id")
-    private Long courseId;
+    private Long[] courseId;
 
     @ApiModelProperty("教材id")
-    private Long textbookId;
+    private Long[] textbookId;
 }

+ 30 - 0
src/main/java/com/xjrsoft/module/base/entity/CourseTextbookPair.java

@@ -0,0 +1,30 @@
+package com.xjrsoft.module.base.entity;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class CourseTextbookPair {
+
+
+        private Long courseId;
+        private Long textbookId;
+
+        public CourseTextbookPair( Long courseId, Long textbookId) {
+
+            this.courseId = courseId;
+            this.textbookId = textbookId;
+        }
+
+
+
+        public Long getCourseId() {
+            return courseId;
+        }
+
+        public Long getTextbookId() {
+            return textbookId;
+        }
+
+}

+ 3 - 4
src/main/java/com/xjrsoft/module/base/mapper/BaseClassCourseMapper.java

@@ -25,15 +25,14 @@ public interface BaseClassCourseMapper extends MPJBaseMapper<BaseClassCourse> {
     @Select("SELECT id, name FROM base_semester")
     List<Map<String, Object>> getAllSemesterNames();
 
-    List<CourseBookInfo> getAllCourseBook(Long subjectGroupId);
-    List<CourseBookInfo> getSelectedCourseBook(Long[] classIds);
-
+    List<CourseBookInfo> getAllCourseBook(Long[] classIds, Long subjectGroupId, Long semester);
+    List<CourseBookInfo> getSelectedCourseBook(Long[] classIds, Long semester);
 
     void updateAddClassCourseTextbooks(Long classId,Long courseId,Long textbookId);
     void updateRemoveClassCourseTextbooks(Long classId,Long courseId,Long textbookId);
 
     void markExistingRecordsAsDeleted(Long newClassId, Long sourceClassId);
-    void insertClassCourseTextbookCombinations(Long newClassId, Long sourceClassId);
+    void insertClassCourseTextbookCombinations(Long newClassId, Long sourceClassId, Long semester);
 
     Long getClassIdByName(String name);
     Long getCourseIdByName(String name);

+ 3 - 3
src/main/java/com/xjrsoft/module/base/service/IBaseClassCourseService.java

@@ -23,9 +23,9 @@ public interface IBaseClassCourseService extends MPJBaseService<BaseClassCourse>
     Page<BaseClassCoursePageVo> getPage(Page<BaseClassCoursePageVo> objectPage, BaseClassCoursePageDto dto);
 
 
-    List<CourseBookInfo> getAllCourseBook(Long subjectGroupId);
+    List<CourseBookInfo> getAllCourseBook(Long[] classIds, Long subjectGroupId, Long semester);
 
-    List<CourseBookInfo> getSelectedCourseBook(Long[] subjectGroupId);
+    List<CourseBookInfo> getSelectedCourseBook(Long[] subjectGroupId, Long semester);
 
 
     void updateAddCourseBook(Long classId,Long courseId,Long textbookId);
@@ -33,7 +33,7 @@ public interface IBaseClassCourseService extends MPJBaseService<BaseClassCourse>
 
     void markExistingRecordsAsDeleted(Long newClassId, Long sourceClassId);
 
-    void duplicateCourseBook(Long newClassId, Long sourceClassId);
+    void duplicateCourseBook(Long newClassId, Long sourceClassId, Long semester);
 
     Map<String, Map<String, Object>> getSemesterTree();
 

+ 6 - 6
src/main/java/com/xjrsoft/module/base/service/impl/BaseClassCourseServiceImpl.java

@@ -30,13 +30,13 @@ public class BaseClassCourseServiceImpl extends MPJBaseServiceImpl<BaseClassCour
     }
 
     @Override
-    public List<CourseBookInfo> getAllCourseBook(Long subjectGroupId){
-        return baseClassCourseMapper.getAllCourseBook(subjectGroupId);
+    public List<CourseBookInfo> getAllCourseBook(Long[] classIds, Long subjectGroupId, Long semester){
+        return baseClassCourseMapper.getAllCourseBook(classIds, subjectGroupId, semester);
     }
 
     @Override
-    public List<CourseBookInfo> getSelectedCourseBook(Long[] subjectGroupId){
-        return baseClassCourseMapper.getSelectedCourseBook(subjectGroupId);
+    public List<CourseBookInfo> getSelectedCourseBook(Long[] subjectGroupId, Long semester){
+        return baseClassCourseMapper.getSelectedCourseBook(subjectGroupId, semester);
     }
 
     @Override
@@ -55,8 +55,8 @@ public class BaseClassCourseServiceImpl extends MPJBaseServiceImpl<BaseClassCour
     }
 
     @Override
-    public void duplicateCourseBook(Long newClassId, Long sourceClassId){
-        baseClassCourseMapper.insertClassCourseTextbookCombinations(newClassId, sourceClassId);
+    public void duplicateCourseBook(Long newClassId, Long sourceClassId, Long semester){
+        baseClassCourseMapper.insertClassCourseTextbookCombinations(newClassId, sourceClassId, semester);
     }
 
     @Override

+ 1 - 1
src/main/java/com/xjrsoft/module/base/vo/BaseClassCoursePageVo.java

@@ -111,6 +111,6 @@ public class BaseClassCoursePageVo {
     @ExcelProperty("对应教材")
     private String textbookName;
 
-    @ExcelProperty("年级")
+    @ExcelProperty("学期")
     private String semester;
 }

+ 21 - 3
src/main/java/com/xjrsoft/module/hikvision/controller/EventController.java

@@ -141,6 +141,22 @@ public class EventController {
         return ResponseEntity.ok().build();
     }
 
+    @PostMapping("/visit")
+    @ApiOperation(value = "接收访客事件")
+    public ResponseEntity<Void> receiveVisitEvent(@RequestBody(required = false) String eventData) {
+        log.info("Received event data: {}", eventData);
+        new Thread(() -> {
+            try {
+                outInRecordUtil.GetVisitRecordsTest(use, faceImportMapper, eventData);
+            } catch (SQLException | ParseException e) {
+                log.error("Error processing event data", e);
+            }
+        }).start();
+
+        // 立即返回HTTP 200 OK响应
+        return ResponseEntity.ok().build();
+    }
+
     @PostMapping("/subscribe")
     @ApiOperation(value = "订阅事件")
     public RT<Boolean> subscribeEvent() {
@@ -151,9 +167,11 @@ public class EventController {
 //*******手动更改****************************************************
 //        eventList.add(196893); //人脸匹配成功
 //        eventList.add(197151); //人脸匹配失败
-        eventList.add(771760130); //车辆入场压线事件
-        eventList.add(771760133); //车辆出场压线事件
-        paramJson.addProperty("eventDest", hikvisionConfig.getCarUrl()); //要修改第二个参数
+//        eventList.add(771760130); //车辆入场压线事件
+//        eventList.add(771760133); //车辆出场压线事件
+        eventList.add(1392513025); //访客登记
+        eventList.add(1392513026); //访客签离
+        paramJson.addProperty("eventDest", hikvisionConfig.getVisitUrl()); //要修改第二个参数
 //******************************************************************
         paramJson.add("eventTypes", eventList);
 

+ 31 - 2
src/main/java/com/xjrsoft/module/hikvision/util/OutInRecordUtil.java

@@ -40,7 +40,7 @@ public class OutInRecordUtil {
     }
 
 
-    public void visitInsertRecord(Db db, Long reservation_school_people_id, String recordTime,String facePhoto, int status, String eventId) throws SQLException {
+    public void visitInsertRecord(Db db, Long reservation_school_people_id, String recordTime,String facePhoto, String status, String eventId) throws SQLException {
         String sql = "INSERT INTO visitor_out_in_record(create_date, reservation_school_people_id, record_time, face_photo, event_id, status,delete_mark,enabled_mark) " +
                 "VALUES(now(), '"  + reservation_school_people_id + "', '" +
                  recordTime + "', '" + facePhoto + "', '" + eventId + "', '" + status +  "',0,1)";
@@ -305,6 +305,7 @@ public class OutInRecordUtil {
             String eventTime = item.get("eventTime").isJsonNull() ? null : ChangeTime(item.get("eventTime").getAsString());
             String reservationSchoolId = faceImportMapper.GetReservationSchoolId(orderId) == null ? "0" : String.valueOf(faceImportMapper.GetReservationSchoolId(orderId));
             String eventId = item.get("eventId").isJsonNull() ? null : item.get("eventId").getAsString();
+            String deviceDesc = item.get("deviceDesc").isJsonNull() ? null : item.get("deviceDesc").getAsString();
 
             int status = -1;
             for (JsonElement e : doorEventsResponse){
@@ -317,7 +318,7 @@ public class OutInRecordUtil {
 
             if (visit_id_list.contains(eventId)) continue;
 
-            visitInsertRecord(use, Long.parseLong(reservationSchoolId), eventTime, picUri, status, eventId);
+            visitInsertRecord(use, Long.parseLong(reservationSchoolId), eventTime, picUri, deviceDesc, eventId);
         }
 
     }
@@ -583,5 +584,33 @@ public class OutInRecordUtil {
         }
     }
 
+    public void GetVisitRecordsTest(Db use, FaceImportMapper faceImportMapper, String data) throws SQLException, ParseException {
+        if (data != null) {
+            List<String> visit_id_list = faceImportMapper.GetVisitIdList();
+
+            try {
+                JsonObject jsonObject = new Gson().fromJson(data, JsonObject.class);
+                JsonObject paramsObject = jsonObject.getAsJsonObject("params");
+                JsonArray eventsArray = paramsObject.getAsJsonArray("events");
+
+                for (JsonElement eventElement : eventsArray) {
+                    JsonObject eventObject = eventElement.getAsJsonObject();
+                    JsonObject dataObject = eventObject.getAsJsonObject("data");
+
+                    String orderId = dataObject.get("visitorId").getAsString().trim();
+                    String eventTime = ChangeTime(eventObject.get("happenTime").getAsString());
+                    String picUri = dataObject.get("photoUrl").getAsString().trim();
+                    String srcParentIndex = eventObject.get("srcParentIndex").getAsString().trim();
+                    String eventId = eventObject.get("eventId").getAsString().trim();
+                    String reservationSchoolId = faceImportMapper.GetReservationSchoolId(orderId) == null ? "0" : String.valueOf(faceImportMapper.GetReservationSchoolId(orderId));
+
+                    if (visit_id_list.contains(eventId)) continue;
 
+                    visitInsertRecord(use, Long.parseLong(reservationSchoolId), eventTime, ApiUtil.GetRedirectURL(picUri), srcParentIndex, eventId);
+                }
+            } catch (Exception e) {
+                log.info(String.valueOf(e));
+            }
+        }
+    }
 }

+ 33 - 0
src/main/java/com/xjrsoft/module/liteflow/node/TeacherAwardNode.java

@@ -0,0 +1,33 @@
+package com.xjrsoft.module.liteflow.node;
+
+import cn.hutool.core.convert.Convert;
+import com.xjrsoft.module.student.service.IStudentLeaveService;
+import com.xjrsoft.module.teacher.service.ITeacherAwardItemService;
+import com.xjrsoft.module.teacher.service.ITeacherAwardService;
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * 教师奖项登记
+ */
+@Component("teacher_award_node")
+public class TeacherAwardNode extends NodeComponent {
+
+    @Autowired
+    private ITeacherAwardService teacherAwardService;
+
+    @Override
+    public void process() throws Exception {
+        // 获取表单中数据编号
+        Map<String, Object> params = this.getFirstContextBean();
+        Object value = util.getFormDatKey(params,"id");
+        Long formId = Convert.toLong(value);
+        if (formId != null) {
+            // 数据处理
+            teacherAwardService.dataHandleAddTeacherAwardNode(formId);
+        }
+    }
+}

+ 42 - 0
src/main/java/com/xjrsoft/module/teacher/controller/TeacherAwardController.java

@@ -1,12 +1,25 @@
 package com.xjrsoft.module.teacher.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
+import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.teacher.dto.TeacherAwardDetailPageDto;
 import com.xjrsoft.module.teacher.dto.TeacherAwardStatisticsPageDto;
+import com.xjrsoft.module.teacher.entity.TeacherAward;
+import com.xjrsoft.module.teacher.entity.TeacherAwardItem;
+import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.teacher.service.ITeacherAwardItemService;
+import com.xjrsoft.module.teacher.service.ITeacherAwardService;
+import com.xjrsoft.module.teacher.vo.TeacherAwardDetailPageVo;
+import com.xjrsoft.module.teacher.vo.TeacherAwardItemPageVo;
+import com.xjrsoft.module.teacher.vo.TeacherAwardItemVo;
 import com.xjrsoft.module.teacher.vo.TeacherAwardStatisticsPageVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -16,6 +29,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
 * @title: 教师奖项
@@ -32,6 +49,8 @@ public class TeacherAwardController {
 
     private final ITeacherAwardItemService teacherAwardItemService;
 
+    private final ITeacherAwardService teacherAwardService;
+
     @GetMapping(value = "/statistics-page")
     @ApiOperation(value="教师获奖统计")
     @SaCheckPermission("teacheraward:detail")
@@ -42,5 +61,28 @@ public class TeacherAwardController {
         return RT.ok(pageOutput);
     }
 
+    @GetMapping(value = "/detail-page")
+    @ApiOperation(value="教师获奖详情页")
+    @SaCheckPermission("teacheraward:detail")
+    public RT<PageOutput<TeacherAwardDetailPageVo>> detailPage(@Valid TeacherAwardDetailPageDto dto){
+        MPJLambdaWrapper<TeacherAward> teacherAwardMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        teacherAwardMPJLambdaWrapper
+                .disableSubLogicDel()
+                .selectAs(TeacherAwardItem::getIsThesis, TeacherAwardDetailPageVo::getIsThesis)
+                .selectAs(XjrUser::getName, TeacherAwardDetailPageVo::getApplicantUserIdCn)
+                .select(TeacherAward.class,x -> VoToColumnUtil.fieldsToColumns(TeacherAwardDetailPageVo.class).contains(x.getProperty()))
+                .leftJoin(TeacherAwardItem.class, TeacherAwardItem::getId, TeacherAward::getTeacherAwardItemId)
+                .leftJoin(XjrUser.class, XjrUser::getId, TeacherAward::getApplicantUserId)
+                .eq(dto.getApplicantUserId() != null && dto.getApplicantUserId() > 0,TeacherAward::getApplicantUserId, dto.getApplicantUserId())
+                .eq(dto.getIsThesis() != null,TeacherAwardItem::getIsThesis, dto.getIsThesis())
+                .like(dto.getApplicantUserIdCn() != null && dto.getApplicantUserIdCn().equals(""), XjrUser::getName, dto.getApplicantUserIdCn())
+                .like(dto.getWholeCompetitionName() != null && !dto.getWholeCompetitionName().equals(""),TeacherAward::getWholeCompetitionName, dto.getWholeCompetitionName())
+                .eq(TeacherAward::getStatus, 1)
+                .orderByDesc(TeacherAward::getCreateDate)
+        ;
+        IPage<TeacherAwardDetailPageVo> page = teacherAwardService.selectJoinListPage(ConventPage.getPage(dto), TeacherAwardDetailPageVo.class, teacherAwardMPJLambdaWrapper);
 
+        PageOutput<TeacherAwardDetailPageVo> pageOutput = ConventPage.getPageOutput(page, TeacherAwardDetailPageVo.class);
+        return RT.ok(pageOutput);
+    }
 }

+ 38 - 0
src/main/java/com/xjrsoft/module/teacher/dto/TeacherAwardDetailPageDto.java

@@ -0,0 +1,38 @@
+package com.xjrsoft.module.teacher.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+
+/**
+* @title: 教师奖项分页查询入参
+* @Author dzx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class TeacherAwardDetailPageDto extends PageInput {
+    /**
+     * 申请人
+     */
+    @ApiModelProperty("申请人")
+    private Long applicantUserId;
+    /**
+     * 申请人
+     */
+    @ApiModelProperty("申请人")
+    private String applicantUserIdCn;
+    /**
+     * 奖项名称
+     */
+    @ApiModelProperty("完整的奖项名称")
+    private String wholeCompetitionName;
+    /**
+     * 是否论文(1:是 0:否)
+     */
+    @ApiModelProperty("是否论文(1:是 0:否)")
+    private Integer isThesis;
+}

+ 177 - 0
src/main/java/com/xjrsoft/module/teacher/entity/TeacherAward.java

@@ -0,0 +1,177 @@
+package com.xjrsoft.module.teacher.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.github.yulichang.annotation.EntityMapping;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+
+
+/**
+* @title: 教师获奖登记
+* @Author dzx
+* @Date: 2024-06-06
+* @Version 1.0
+*/
+@Data
+@TableName("teacher_award")
+@ApiModel(value = "teacher_award", description = "教师获奖登记")
+public class TeacherAward implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    @TableId
+    private Long id;
+    /**
+    * 创建人
+    */
+    @ApiModelProperty("创建人")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUserId;
+    /**
+    * 创建时间
+    */
+    @ApiModelProperty("创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createDate;
+    /**
+    * 修改人
+    */
+    @ApiModelProperty("修改人")
+    @TableField(fill = FieldFill.UPDATE)
+    private Long modifyUserId;
+    /**
+    * 修改时间
+    */
+    @ApiModelProperty("修改时间")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date modifyDate;
+    /**
+    * 删除标记
+    */
+    @ApiModelProperty("删除标记")
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer deleteMark;
+    /**
+    * 有效标志
+    */
+    @ApiModelProperty("有效标志")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer enabledMark;
+    /**
+    * 序号
+    */
+    @ApiModelProperty("序号")
+    private Integer sortCode;
+    /**
+    * 申请人
+    */
+    @ApiModelProperty("申请人")
+    private Long applicantUserId;
+    /**
+    * 获奖类型
+    */
+    @ApiModelProperty("获奖类型")
+    private String awardType;
+    /**
+    * 奖项级别
+    */
+    @ApiModelProperty("奖项级别")
+    private String awardLevel;
+    /**
+    * 奖项名称
+    */
+    @ApiModelProperty("奖项名称")
+    private String competitionName;
+    /**
+    * 获奖等级
+    */
+    @ApiModelProperty("获奖等级")
+    private String awardGrade;
+    /**
+    * 奖项分数
+    */
+    @ApiModelProperty("奖项分数")
+    private BigDecimal awardScore;
+    /**
+    * 作品名称
+    */
+    @ApiModelProperty("作品名称")
+    private String paperName;
+    /**
+    * 国际标准刊号字
+    */
+    @ApiModelProperty("国际标准刊号字")
+    private String issn;
+    /**
+    * 媒体类型(期刊、图书、报纸、音像、论文集)
+    */
+    @ApiModelProperty("媒体类型(期刊、图书、报纸、音像、论文集)")
+    private String mediaType;
+    /**
+    * 媒体名称
+    */
+    @ApiModelProperty("媒体名称")
+    private String journalName;
+    /**
+    * 国内统一刊号CN
+    */
+    @ApiModelProperty("国内统一刊号CN")
+    private String journalNumber;
+    /**
+    * 期刊级别(核心期刊、一般期刊、(校级、内部论文))
+    */
+    @ApiModelProperty("期刊级别(核心期刊、一般期刊、(校级、内部论文))")
+    private String journalLevel;
+    /**
+    * 发表时间
+    */
+    @ApiModelProperty("发表时间")
+    private Date issueDate;
+    /**
+    * 审核人
+    */
+    @ApiModelProperty("审核人")
+    private Long approvalUserId;
+    /**
+    * 备注
+    */
+    @ApiModelProperty("备注")
+    private String remark;
+    /**
+    * 附件文件id
+    */
+    @ApiModelProperty("附件文件id")
+    private Long fileId;
+    /**
+    * 状态(1:结束 0:未结束)
+    */
+    @ApiModelProperty("状态(1:结束 0:未结束)")
+    private Integer status;
+    /**
+    * 奖项id(teacher_award_item)
+    */
+    @ApiModelProperty("奖项id(teacher_award_item)")
+    private Long teacherAwardItemId;
+
+    /**
+     * 奖项名称
+     */
+    @ApiModelProperty("完整的奖项名称")
+    private String wholeCompetitionName;
+}

+ 2 - 0
src/main/java/com/xjrsoft/module/teacher/mapper/FaceImportMapper.java

@@ -34,5 +34,7 @@ public interface FaceImportMapper {
 
     String GetPhoneNumberByPlanNumView(@Param("id") String id);
     String GetNameByPlanNumView(@Param("id") String id);
+
+    List<String> GetVisitIdList();
 }
 

+ 17 - 0
src/main/java/com/xjrsoft/module/teacher/mapper/TeacherAwardMapper.java

@@ -0,0 +1,17 @@
+package com.xjrsoft.module.teacher.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.teacher.entity.TeacherAward;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @title: 教师获奖登记
+* @Author dzx
+* @Date: 2024-06-06
+* @Version 1.0
+*/
+@Mapper
+public interface TeacherAwardMapper extends MPJBaseMapper<TeacherAward> {
+
+}

+ 6 - 0
src/main/java/com/xjrsoft/module/teacher/service/ITeacherAwardItemService.java

@@ -5,8 +5,11 @@ import com.github.yulichang.base.MPJBaseService;
 import com.xjrsoft.module.room.dto.RoomBedPageDto;
 import com.xjrsoft.module.teacher.dto.TeacherAwardStatisticsPageDto;
 import com.xjrsoft.module.teacher.entity.TeacherAwardItem;
+import com.xjrsoft.module.teacher.vo.TeacherAwardItemVo;
 import com.xjrsoft.module.teacher.vo.TeacherAwardStatisticsPageVo;
 
+import java.util.List;
+
 /**
 * @title: 教师奖项
 * @Author dzx
@@ -17,4 +20,7 @@ import com.xjrsoft.module.teacher.vo.TeacherAwardStatisticsPageVo;
 public interface ITeacherAwardItemService extends MPJBaseService<TeacherAwardItem> {
 
     Page<TeacherAwardStatisticsPageVo> getStatisticsPage(Page<TeacherAwardStatisticsPageVo> page, TeacherAwardStatisticsPageDto dto);
+
+    List<TeacherAwardItemVo> getTeacherAwardItemTree();
+
 }

+ 24 - 0
src/main/java/com/xjrsoft/module/teacher/service/ITeacherAwardService.java

@@ -0,0 +1,24 @@
+package com.xjrsoft.module.teacher.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.teacher.entity.TeacherAward;
+import lombok.Data;
+import java.util.List;
+
+/**
+* @title: 教师获奖登记
+* @Author dzx
+* @Date: 2024-06-06
+* @Version 1.0
+*/
+
+public interface ITeacherAwardService extends MPJBaseService<TeacherAward> {
+
+    /**
+     * 新增教师获奖规则
+     * @param dataId
+     * @return
+     */
+    Boolean dataHandleAddTeacherAwardNode(Long dataId);
+}

+ 24 - 0
src/main/java/com/xjrsoft/module/teacher/service/impl/TeacherAwardItemServiceImpl.java

@@ -1,15 +1,24 @@
 package com.xjrsoft.module.teacher.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.common.model.result.RT;
+import com.xjrsoft.common.utils.TreeUtil;
+import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.teacher.dto.TeacherAwardStatisticsPageDto;
 import com.xjrsoft.module.teacher.entity.TeacherAwardItem;
 import com.xjrsoft.module.teacher.mapper.TeacherAwardItemMapper;
 import com.xjrsoft.module.teacher.service.ITeacherAwardItemService;
+import com.xjrsoft.module.teacher.vo.TeacherAwardItemPageVo;
+import com.xjrsoft.module.teacher.vo.TeacherAwardItemVo;
 import com.xjrsoft.module.teacher.vo.TeacherAwardStatisticsPageVo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
 * @title: 教师奖项
 * @Author dzx
@@ -19,9 +28,24 @@ import org.springframework.stereotype.Service;
 @Service
 @AllArgsConstructor
 public class TeacherAwardItemServiceImpl extends MPJBaseServiceImpl<TeacherAwardItemMapper, TeacherAwardItem> implements ITeacherAwardItemService {
+
+
     @Override
     public Page<TeacherAwardStatisticsPageVo> getStatisticsPage(Page<TeacherAwardStatisticsPageVo> page, TeacherAwardStatisticsPageDto dto) {
 
         return this.baseMapper.getStatisticsPage(page, dto);
     }
+
+    @Override
+    public List<TeacherAwardItemVo> getTeacherAwardItemTree() {
+        LambdaQueryWrapper<TeacherAwardItem> queryWrapper = new LambdaQueryWrapper<>();
+
+        queryWrapper
+                .orderByDesc(TeacherAwardItem::getId)
+                .select(TeacherAwardItem.class,x -> VoToColumnUtil.fieldsToColumns(TeacherAwardItemPageVo.class).contains(x.getProperty()));
+        List<TeacherAwardItem> list = this.list(queryWrapper);
+        List<TeacherAwardItemVo> itemVos = BeanUtil.copyToList(list, TeacherAwardItemVo.class);
+        return TreeUtil.build(itemVos);
+    }
+
 }

+ 89 - 0
src/main/java/com/xjrsoft/module/teacher/service/impl/TeacherAwardServiceImpl.java

@@ -0,0 +1,89 @@
+package com.xjrsoft.module.teacher.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.teacher.entity.TeacherAward;
+import com.xjrsoft.module.teacher.entity.TeacherAwardItem;
+import com.xjrsoft.module.teacher.mapper.TeacherAwardItemMapper;
+import com.xjrsoft.module.teacher.mapper.TeacherAwardMapper;
+import com.xjrsoft.module.teacher.service.ITeacherAwardService;
+import com.xjrsoft.module.teacher.vo.TeacherAwardItemPageVo;
+import com.xjrsoft.module.teacher.vo.TeacherAwardItemVo;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+* @title: 教师获奖登记
+* @Author dzx
+* @Date: 2024-06-06
+* @Version 1.0
+*/
+@Service
+@AllArgsConstructor
+public class TeacherAwardServiceImpl extends MPJBaseServiceImpl<TeacherAwardMapper, TeacherAward> implements ITeacherAwardService {
+
+    private final TeacherAwardMapper teacherAwardMapper;
+
+    private final TeacherAwardItemMapper teacherAwardItemMapper;
+    @Override
+    @Transactional
+    public Boolean dataHandleAddTeacherAwardNode(Long dataId) {
+        TeacherAward teacherAward = teacherAwardMapper.selectById(dataId);
+        if(teacherAward.getTeacherAwardItemId() == null){
+            return false;
+        }
+
+        //处理父级
+        LambdaQueryWrapper<TeacherAwardItem> teacherAwardItemLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        teacherAwardItemLambdaQueryWrapper
+                .orderByDesc(TeacherAwardItem::getId)
+                .select(TeacherAwardItem.class,x -> VoToColumnUtil.fieldsToColumns(TeacherAwardItemPageVo.class).contains(x.getProperty()));
+        List<TeacherAwardItem> list = teacherAwardItemMapper.selectList(teacherAwardItemLambdaQueryWrapper);
+        List<TeacherAwardItemVo> itemVos = BeanUtil.copyToList(list, TeacherAwardItemVo.class);
+
+        List<TeacherAwardItemVo> ancestors = findAncestors(itemVos, teacherAward.getTeacherAwardItemId());
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < ancestors.size(); i++) {
+            TeacherAwardItemVo teacherAwardItemVo = ancestors.get(i);
+            if(teacherAwardItemVo != null && teacherAwardItemVo.getName() != null && !teacherAwardItemVo.getName().equals("")){
+                sb.insert(0, ">");
+                sb.insert(0, teacherAwardItemVo.getName());
+            }
+        }
+        sb.deleteCharAt(sb.length() - 1);
+
+        TeacherAward updateTeacherAward = new TeacherAward();
+        updateTeacherAward.setId(teacherAward.getId());
+        updateTeacherAward.setStatus(1);
+        updateTeacherAward.setWholeCompetitionName(sb.toString());
+
+        return this.updateById(updateTeacherAward);
+    }
+
+    private List<TeacherAwardItemVo> findAncestors(List<TeacherAwardItemVo> itemVos, Long targetId) {
+        List<TeacherAwardItemVo> ancestors = new ArrayList<>();
+        Map<Long, TeacherAwardItemVo> itemMap = itemVos.stream()
+                .collect(Collectors.toMap(TeacherAwardItemVo::getId, item -> item));
+        findAncestorsHelper(itemMap, targetId, ancestors);
+        return ancestors;
+    }
+
+    private void findAncestorsHelper(Map<Long, TeacherAwardItemVo> itemMap, Long targetId, List<TeacherAwardItemVo> ancestors) {
+        if (itemMap.get(targetId) != null) {
+            TeacherAwardItemVo teacherAwardItemVo = itemMap.get(targetId);
+            ancestors.add(teacherAwardItemVo);
+            if(teacherAwardItemVo.getParentId() != null && teacherAwardItemVo.getParentId() > 0){
+                findAncestorsHelper(itemMap, teacherAwardItemVo.getParentId(), ancestors);
+            }
+        }
+    }
+
+}

+ 128 - 0
src/main/java/com/xjrsoft/module/teacher/vo/TeacherAwardDetailPageVo.java

@@ -0,0 +1,128 @@
+package com.xjrsoft.module.teacher.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+* @title: 教师奖项分页列表出参
+* @Author dzx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@Data
+public class TeacherAwardDetailPageVo {
+
+    /**
+     * 主键编号
+     */
+    @ApiModelProperty("主键编号")
+    private String id;
+    /**
+     * 申请人
+     */
+    @ApiModelProperty("申请人")
+    private Long applicantUserId;
+    /**
+     * 申请人
+     */
+    @ApiModelProperty("申请人")
+    private String applicantUserIdCn;
+    /**
+     * 获奖类型
+     */
+    @ApiModelProperty("获奖类型")
+    private String awardType;
+    /**
+     * 奖项级别
+     */
+    @ApiModelProperty("奖项级别")
+    private String awardLevel;
+    /**
+     * 奖项名称
+     */
+    @ApiModelProperty("奖项名称")
+    private String competitionName;
+    /**
+     * 奖项名称
+     */
+    @ApiModelProperty("完整的奖项名称")
+    private String wholeCompetitionName;
+    /**
+     * 获奖等级
+     */
+    @ApiModelProperty("获奖等级")
+    private String awardGrade;
+    /**
+     * 奖项分数
+     */
+    @ApiModelProperty("奖项分数")
+    private BigDecimal awardScore;
+    /**
+     * 作品名称
+     */
+    @ApiModelProperty("作品名称")
+    private String paperName;
+    /**
+     * 国际标准刊号字
+     */
+    @ApiModelProperty("国际标准刊号字")
+    private String issn;
+    /**
+     * 媒体类型(期刊、图书、报纸、音像、论文集)
+     */
+    @ApiModelProperty("媒体类型(期刊、图书、报纸、音像、论文集)")
+    private String mediaType;
+    /**
+     * 媒体名称
+     */
+    @ApiModelProperty("媒体名称")
+    private String journalName;
+    /**
+     * 国内统一刊号CN
+     */
+    @ApiModelProperty("国内统一刊号CN")
+    private String journalNumber;
+    /**
+     * 期刊级别(核心期刊、一般期刊、(校级、内部论文))
+     */
+    @ApiModelProperty("期刊级别(核心期刊、一般期刊、(校级、内部论文))")
+    private String journalLevel;
+    /**
+     * 发表时间
+     */
+    @ApiModelProperty("发表时间")
+    private Date issueDate;
+    /**
+     * 审核人
+     */
+    @ApiModelProperty("审核人")
+    private Long approvalUserId;
+    /**
+     * 备注
+     */
+    @ApiModelProperty("备注")
+    private String remark;
+    /**
+     * 附件文件id
+     */
+    @ApiModelProperty("附件文件id")
+    private Long fileId;
+    /**
+     * 状态(1:结束 0:未结束)
+     */
+    @ApiModelProperty("状态(1:结束 0:未结束)")
+    private Integer status;
+    /**
+     * 奖项id(teacher_award_item)
+     */
+    @ApiModelProperty("奖项id(teacher_award_item)")
+    private Long teacherAwardItemId;
+    /**
+     * 是否论文(1:是 0:否)
+     */
+    @ApiModelProperty("是否论文(1:是 0:否)")
+    private Integer isThesis;
+}

+ 2 - 0
src/main/resources/application-dev.yml

@@ -113,6 +113,7 @@ xjrsoft:
       - /system/QR-code-login
       - /event/receivePeople
       - /event/receiveCar
+      - /event/visit
       - /system/findUserByCode
     approval-time: 300 # 审核超时时间 目前设为5分钟
   email:
@@ -151,6 +152,7 @@ xjrsoft:
     appSecret: LXi9rE2fm8IfRoLnTA2G
     people-url: http://ff.cf.yingcaibx.com/event/receivePeople
     car-url: http://ff.cf.yingcaibx.com/event/receiveCar
+    visit-url: http://ff.cf.yingcaibx.com/event/visit
   keycloak:
     url: http://192.168.0.221:12829/auth/
     realm: test

+ 2 - 0
src/main/resources/application-pre.yml

@@ -97,6 +97,7 @@ xjrsoft:
       - /system/QR-code-login
       - /event/receivePeople
       - /event/receiveCar
+      - /event/visit
       - /system/findUserByCode
     approval-time: 300 # 审核超时时间 目前设为5分钟
   email:
@@ -135,6 +136,7 @@ xjrsoft:
     appSecret: LXi9rE2fm8IfRoLnTA2G
     people-url: http://ff.cf.yingcaibx.com/event/receivePeople
     car-url: http://ff.cf.yingcaibx.com/event/receiveCar
+    visit-url: http://ff.cf.yingcaibx.com/event/visit
   keycloak:
     url: http://192.168.0.221:12829/auth/
     realm: test

+ 2 - 0
src/main/resources/application-prod.yml

@@ -93,6 +93,7 @@ xjrsoft:
       - /system/QR-code-login
       - /event/receivePeople
       - /event/receiveCar
+      - /event/visit
       - /system/findUserByCode
     approval-time: 300 # 审核超时时间 目前设为5分钟
   email:
@@ -131,6 +132,7 @@ xjrsoft:
     appSecret: LXi9rE2fm8IfRoLnTA2G
     people-url: https://zhxy.cqtlzjzx.com/api/event/receivePeople
     car-url: https://zhxy.cqtlzjzx.com/api/event/receiveCar
+    visit-url: https://zhxy.cqtlzjzx.com/api/event/visit
   keycloak:
     url: http://192.168.0.221:12829/auth/
     realm: test

+ 54 - 26
src/main/resources/mapper/base/BaseClassCourse.xml

@@ -8,11 +8,24 @@
         (SELECT GROUP_CONCAT(DISTINCT t6.name SEPARATOR '、')
             FROM base_class_course t5
             LEFT JOIN base_course_subject t6 ON t6.id = t5.course_id
-            WHERE t5.class_id = t.id AND t5.delete_mark = 0) AS course_name,
+            WHERE t5.class_id = t.id
+            AND t5.delete_mark = 0
+            <if test="dto.semester != null">
+                AND EXISTS (
+                SELECT 1
+                FROM textbook tb
+                WHERE tb.id = t5.textbook_id
+                AND tb.base_semester_id = #{dto.semester}
+                )
+            </if>) AS course_name,
         (SELECT GROUP_CONCAT(DISTINCT t7.book_name SEPARATOR '、')
             FROM base_class_course t5
             LEFT JOIN textbook t7 ON t7.id = t5.textbook_id
-            WHERE t5.class_id = t.id AND t5.delete_mark = 0) AS textbook_name
+            WHERE t5.class_id = t.id
+            AND t5.delete_mark = 0
+            <if test="dto.semester != null">
+                AND t7.base_semester_id = #{dto.semester}
+            </if>) AS textbook_name
         FROM base_class t
         LEFT JOIN xjr_user t1 ON t1.id = t.teacher_id
         LEFT JOIN base_class_major_set t2 ON t2.class_id = t.id
@@ -25,15 +38,6 @@
         <if test="dto.deptId != null">
             and t4.id = #{dto.deptId}
         </if>
-<!--  关联学期      <if test="dto.semester != null">-->
-<!--            AND EXISTS (-->
-<!--            SELECT 1-->
-<!--            FROM base_class_course bcc-->
-<!--            JOIN textbook tb ON bcc.textbook_id = tb.id-->
-<!--            WHERE bcc.class_id = t.id-->
-<!--            AND tb.base_semester_id = #{dto.semester}-->
-<!--            )-->
-<!--        </if>-->
         GROUP BY t.id, t.name, t1.name, t3.name, t4.name
         <if test="dto.courseSet == 1">
             HAVING LENGTH(course_name) > 0
@@ -45,14 +49,22 @@
 
 
     <select id="getAllCourseBook" resultType="com.xjrsoft.module.base.entity.CourseBookInfo">
-        select t1.id as courseId, t1.name as courseName,t.book_name as bookName
-        from textbook t
-        left join base_course_subject t1 on t.course_subject_id = t1.id
-        left join subject_group t2 on t2.id = t.subject_group_id
-        where t.delete_mark = 0
+        SELECT t1.id AS courseId, t1.name AS courseName, t.book_name AS bookName
+        FROM textbook t
+        LEFT JOIN base_course_subject t1 ON t.course_subject_id = t1.id
+        LEFT JOIN subject_group t2 ON t2.id = t.subject_group_id
+        WHERE t.delete_mark = 0
         <if test="subjectGroupId != null">
             AND t2.id = #{subjectGroupId}
         </if>
+        <if test="semester != null">
+            AND EXISTS (
+            SELECT 1
+            FROM textbook tb
+            WHERE tb.id = t.id
+            AND tb.base_semester_id = #{semester}
+            )
+        </if>
     </select>
 
     <select id="getSelectedCourseBook" resultType="com.xjrsoft.module.base.entity.CourseBookInfo">
@@ -67,6 +79,14 @@
                 #{classIds}
             </foreach>
         </if>
+        <if test="semester != null">
+            AND EXISTS (
+            SELECT 1
+            FROM textbook tb
+            WHERE tb.id = t.textbook_id
+            AND tb.base_semester_id = #{semester}
+            )
+        </if>
 <!--        <if test="subjectGroupId != null">-->
 <!--            AND-->
 <!--        </if>-->
@@ -97,16 +117,24 @@
     </update>
 
     <insert id="insertClassCourseTextbookCombinations" parameterType="map">
-        INSERT INTO base_class_course (class_id, course_id, textbook_id, create_date, delete_mark,enabled_mark)
-        SELECT #{newClassId}, t.course_id, t.textbook_id, now(), 0, 1
-        FROM (
-                 SELECT course_id, textbook_id
-                 FROM base_class_course
-                 WHERE class_id = #{sourceClassId}
-                   AND delete_mark = 0
-                 GROUP BY course_id, textbook_id
-             ) t
-            ON DUPLICATE KEY UPDATE delete_mark = 0
+        INSERT INTO base_class_course (class_id, course_id, textbook_id, create_date, delete_mark, enabled_mark)
+        SELECT #{newClassId}, t.course_id, t.textbook_id, NOW(), 0, 1
+        FROM (SELECT course_id, textbook_id FROM base_class_course WHERE class_id = #{sourceClassId} AND delete_mark = 0
+            <if test="semester != null">
+                AND EXISTS (
+                SELECT 1
+                FROM textbook tb
+                WHERE tb.id = textbook_id
+                AND tb.base_semester_id = #{semester}
+                )
+            </if>
+        GROUP BY
+            course_id, textbook_id
+        ) t
+        ON DUPLICATE KEY UPDATE
+        delete_mark = 0,
+        enabled_mark = 1,
+        create_date = NOW()
     </insert>
 
     <select id="getClassIdByName" resultType="java.lang.Long">

+ 6 - 0
src/main/resources/mapper/teacher/TeacherFaceImportMapper.xml

@@ -159,4 +159,10 @@
             and plate_number = #{id}
         </if>
     </select>
+
+    <select id="GetVisitIdList" resultType="java.lang.String">
+        SELECT event_id
+        FROM visitor_out_in_record
+        where delete_mark = 0
+    </select>
 </mapper>

+ 18 - 0
src/test/java/com/xjrsoft/module/teacher/service/impl/TeacherAwardServiceImplTest.java

@@ -0,0 +1,18 @@
+package com.xjrsoft.module.teacher.service.impl;
+
+import com.xjrsoft.module.room.service.IWfRoomApplicantService;
+import com.xjrsoft.module.teacher.service.ITeacherAwardService;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import static org.junit.jupiter.api.Assertions.*;
+@SpringBootTest
+class TeacherAwardServiceImplTest {
+    @Autowired
+    private ITeacherAwardService teacherAwardService;
+    @Test
+    void dataHandleAddTeacherAwardNode() {
+        teacherAwardService.dataHandleAddTeacherAwardNode(1798628061766270976L);
+    }
+}

+ 3 - 3
src/test/java/com/xjrsoft/module/textbook/service/impl/TextbookServiceImplTest.java

@@ -16,10 +16,10 @@ class TextbookServiceImplTest {
     @Autowired
     private ITextbookService textbookService;
 
-    @Test
-    void dataHandleAddTextbookNode() {
+//    @Test
+//    void dataHandleAddTextbookNode() {
 //        textbookService.dataHandleAddTextbookNode(1743294003445559296L);
-    }
+//    }
 
     @Test
     void dataHandleAddExerciseBookNode() {

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

@@ -3188,4 +3188,30 @@ public class FreeMarkerGeneratorTest {
 
         apiGeneratorService.generateCodes(params);
     }
+
+    @Test
+    public void gcTeacherAward() throws IOException {
+        List<TableConfig> tableConfigs = new ArrayList<>();
+        TableConfig mainTable = new TableConfig();
+        mainTable.setTableName("teacher_award");//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(false);//是否生成在主目录,前期测试可设置成false
+        params.setDs(ds);
+
+        IApiGeneratorService apiGeneratorService = new ApiGeneratorServiceImpl();
+
+        apiGeneratorService.generateCodes(params);
+    }
+
 }