dzx 1 год назад
Родитель
Сommit
245a212e74
18 измененных файлов с 343 добавлено и 37 удалено
  1. 19 5
      src/main/java/com/xjrsoft/module/databoard/controller/DataboardController.java
  2. 43 3
      src/main/java/com/xjrsoft/module/databoard/controller/DatadetailController.java
  3. 33 0
      src/main/java/com/xjrsoft/module/databoard/vo/CourseCountListVo.java
  4. 28 0
      src/main/java/com/xjrsoft/module/databoard/vo/CourseStatisticsDetailVo.java
  5. 26 0
      src/main/java/com/xjrsoft/module/databoard/vo/ItemCountRatioVo.java
  6. 2 2
      src/main/java/com/xjrsoft/module/material/service/impl/MaterialTaskServiceImpl.java
  7. 4 4
      src/main/java/com/xjrsoft/module/oa/service/impl/NewsServiceImpl.java
  8. 49 18
      src/main/java/com/xjrsoft/module/student/controller/StudentReportRecordController.java
  9. 6 0
      src/main/java/com/xjrsoft/module/student/dto/StudentReportRecordStatisticsDto.java
  10. 5 0
      src/main/java/com/xjrsoft/module/student/mapper/StudentReportRecordMapper.java
  11. 10 0
      src/main/java/com/xjrsoft/module/student/service/IStudentReportRecordService.java
  12. 17 0
      src/main/java/com/xjrsoft/module/student/service/impl/StudentReportRecordServiceImpl.java
  13. 4 0
      src/main/java/com/xjrsoft/module/student/vo/StudentReportRecordPageVo.java
  14. 37 0
      src/main/java/com/xjrsoft/module/student/vo/StudentReportRecordStatisticsListVo.java
  15. 12 0
      src/main/java/com/xjrsoft/module/student/vo/StudentReportRecordStatisticsVo.java
  16. 2 2
      src/main/resources/mapper/student/BaseNewStudentMapper.xml
  17. 12 3
      src/main/resources/mapper/student/StudentReportRecordMapper.xml
  18. 34 0
      src/test/java/com/xjrsoft/module/oa/service/impl/NewsServiceImplTest.java

+ 19 - 5
src/main/java/com/xjrsoft/module/databoard/controller/DataboardController.java

@@ -12,6 +12,7 @@ import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.courseTable.entity.CourseTable;
 import com.xjrsoft.module.courseTable.service.ICourseTableService;
+import com.xjrsoft.module.databoard.dto.StatisticsDetailDto;
 import com.xjrsoft.module.databoard.dto.StatisticsDto;
 import com.xjrsoft.module.databoard.vo.CourseStatisticsVo;
 import com.xjrsoft.module.databoard.vo.HealthStatisticsVo;
@@ -45,6 +46,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
 import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.Date;
@@ -147,10 +149,11 @@ public class DataboardController {
     @GetMapping(value = "/course-statistics")
     @ApiOperation(value="课表统计")
     @SaCheckPermission("databoard:detail")
-    public RT<CourseStatisticsVo> courseStatistics(@Valid StatisticsDto dto){
+    public RT<CourseStatisticsVo> courseStatistics(@Valid StatisticsDetailDto dto){
         List<CourseTable> list = courseTableService.list(
                 new QueryWrapper<CourseTable>().lambda()
-                        .eq(CourseTable::getScheduleDate, new Date())
+                        .eq((dto.getStartDate() == null && dto.getEndDate() == null), CourseTable::getScheduleDate, new Date())
+                        .between((dto.getStartDate() != null && dto.getEndDate() != null), CourseTable::getScheduleDate, dto.getStartDate(), dto.getEndDate())
         );
         CourseStatisticsVo result = new CourseStatisticsVo();
         result.setAllCount(list.size());
@@ -164,12 +167,22 @@ public class DataboardController {
         }
         result.setTeacherCount(teacherCount);
         result.setNoTeacherCount(noTeacherCount);
-
-        String sql = "SELECT * FROM wf_course_adjust WHERE STATUS = 1 AND exchange_date = NOW() and adjust_type = 'course_adjust'";
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        String sql = "SELECT * FROM wf_course_adjust WHERE STATUS = 1 and adjust_type = 'course_adjust'";
+        if(dto.getStartDate() != null && dto.getEndDate() != null){
+            sql += " AND exchange_date between '" + dto.getStartDate().format(formatter) + "' and '" + dto.getEndDate().format(formatter) + "'";
+        }else{
+            sql += " AND exchange_date = NOW()";
+        }
         long adjustCount = SqlRunnerAdapter.db().selectCount(sql);
         result.setAdjustCount(Integer.parseInt(adjustCount + ""));
 
-        sql = "SELECT * FROM wf_course_adjust WHERE STATUS = 1 AND exchange_date = NOW() and adjust_type = 'course_exchange'";
+        sql = "SELECT * FROM wf_course_adjust WHERE STATUS = 1 and adjust_type = 'course_exchange'";
+        if(dto.getStartDate() != null && dto.getEndDate() != null){
+            sql += " AND exchange_date between '" + dto.getStartDate().format(formatter) + "' and '" + dto.getEndDate().format(formatter) + "'";
+        }else{
+            sql += " AND exchange_date = NOW()";
+        }
         long exchangeCount = SqlRunnerAdapter.db().selectCount(sql);
         result.setReplaceCount(Integer.parseInt(exchangeCount + ""));
 
@@ -332,4 +345,5 @@ public class DataboardController {
         return RT.ok(result);
     }
 
+
 }

+ 43 - 3
src/main/java/com/xjrsoft/module/databoard/controller/DatadetailController.java

@@ -3,14 +3,18 @@ package com.xjrsoft.module.databoard.controller;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.github.yulichang.toolkit.MPJWrappers;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.enums.GenderDictionaryEnum;
 import com.xjrsoft.common.enums.StudyStatusEnum;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
+import com.xjrsoft.common.utils.SqlRunnerAdapterUtil;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.databoard.dto.StatisticsDetailDto;
+import com.xjrsoft.module.databoard.vo.CourseCountListVo;
+import com.xjrsoft.module.databoard.vo.CourseStatisticsDetailVo;
 import com.xjrsoft.module.databoard.vo.DistributionVo;
 import com.xjrsoft.module.databoard.vo.DurationVo;
 import com.xjrsoft.module.databoard.vo.HealthItemCountVo;
@@ -53,6 +57,7 @@ import java.text.SimpleDateFormat;
 import java.time.Duration;
 import java.time.LocalDate;
 import java.time.Period;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
@@ -551,7 +556,10 @@ public class DatadetailController {
     @SaCheckPermission("datadetail:detail")
     public RT<SubscriptionStatisticsDetailVo> subscriptionStatistics(@Valid StatisticsDetailDto dto) {
         SubscriptionStatisticsDetailVo result = new SubscriptionStatisticsDetailVo();
-        List<WfSubscription> list = subscriptionService.list();
+        List<WfSubscription> list = subscriptionService.list(
+                new QueryWrapper<WfSubscription>().lambda()
+                        .between((dto.getStartDate() != null && dto.getEndDate() != null), WfSubscription::getShenQingRiQi4752, dto.getStartDate(), dto.getEndDate())
+        );
         double totalAmount = list.stream().filter(x -> x.getTotalAmount() != null).mapToDouble(WfSubscription::getTotalAmount).sum();
         result.setTotalAmount(totalAmount);
 
@@ -565,7 +573,12 @@ public class DatadetailController {
                 " INNER JOIN wf_subscription t2 ON t1.parent_id = t2.id" +
                 " LEFT JOIN xjr_dictionary_detail t3 ON t1.item_type = t3.code" +
                 " AND t3.item_id = 1752140413593518081" +
-                " WHERE t2.status = 1 GROUP BY t3.name";
+                " WHERE t2.status = 1";
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        if(dto.getStartDate() != null && dto.getEndDate() != null){
+            sql += " and t2.shen_qing_ri_qi4752 between '" + dto.getStartDate().format(formatter) + "' and '" + dto.getEndDate().format(formatter) + "'";
+        }
+        sql += " GROUP BY t3.name";
         List<Map<String, Object>> datalist = SqlRunnerAdapter.db().selectList(sql);
         List<ItemCountVo> categoryCountList = new ArrayList<>();
         List<ItemDoubleVo> categoryAmountList = new ArrayList<>();
@@ -590,7 +603,11 @@ public class DatadetailController {
         sql = "SELECT IFNULL(t3.name, '未填写') AS item,COUNT(t1.id) AS a_count,SUM(t1.amount) as a_sum FROM wf_subscription_list t1" +
             " INNER JOIN wf_subscription t2 ON t1.parent_id = t2.id" +
             " LEFT JOIN xjr_department t3 ON t2.application_department = t3.id" +
-            " WHERE t2.status = 1 GROUP BY t3.name";
+            " WHERE t2.status = 1";
+        if(dto.getStartDate() != null && dto.getEndDate() != null){
+            sql += " and t2.shen_qing_ri_qi4752 between '" + dto.getStartDate().format(formatter) + "' and '" + dto.getEndDate().format(formatter) + "'";
+        }
+        sql += " GROUP BY t3.name";
         datalist = SqlRunnerAdapter.db().selectList(sql);
         List<ItemCountAmountVo> deptList = new ArrayList<>();
         for (Map<String, Object> objectMap : datalist) {
@@ -606,4 +623,27 @@ public class DatadetailController {
         return RT.ok(result);
     }
 
+    @GetMapping(value = "/course-statistics")
+    @ApiOperation(value="课表详情数据统计")
+    @SaCheckPermission("datadetail:detail")
+    public RT<CourseStatisticsDetailVo> courseStatistics(@Valid StatisticsDetailDto dto) {
+        CourseStatisticsDetailVo result = new CourseStatisticsDetailVo();
+        String sql = "SELECT t1.id, t1.name,t4.name AS dept_name," +
+                " (SELECT GROUP_CONCAT(DISTINCT(course_name)) FROM course_table WHERE teacher_id = t1.id) AS course_names," +
+                " (SELECT COUNT(*) FROM course_table WHERE teacher_id = t1.id) AS course_count FROM xjr_user t1" +
+                " INNER JOIN base_teacher t2 ON t1.id = t2.user_id" +
+                " INNER JOIN xjr_user_dept_relation t3 ON t1.id = t3.user_id" +
+                " INNER JOIN xjr_department t4 ON t3.dept_id = t4.id" +
+                " WHERE t1.delete_mark = 0 AND t4.is_major = 1" +
+                " ORDER BY course_count DESC LIMIT 5";
+        List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
+        List<CourseCountListVo> courseCountList = new ArrayList<>();
+        for (Map<String, Object> objectMap : list) {
+            CourseCountListVo listVo = SqlRunnerAdapterUtil.convertMapToEntity(objectMap, CourseCountListVo.class);
+            courseCountList.add(listVo);
+        }
+        result.setCourseCountList(courseCountList);
+        return RT.ok(result);
+    }
+
 }

+ 33 - 0
src/main/java/com/xjrsoft/module/databoard/vo/CourseCountListVo.java

@@ -0,0 +1,33 @@
+package com.xjrsoft.module.databoard.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+* @title: 数据看板-课时排行榜
+* @Author dzx
+* @Date: 2024年8月2日
+* @Version 1.0
+*/
+@Data
+public class CourseCountListVo {
+
+    /**
+    * 发起流程总数
+    */
+    @ApiModelProperty("统计项")
+    private String name;
+    /**
+    * 完成总数
+    */
+    @ApiModelProperty("总课时")
+    private Long courseCount;
+
+    @ApiModelProperty("课程名称")
+    private String courseNames;
+
+    @ApiModelProperty("所属部门")
+    private String deptName;
+
+}

+ 28 - 0
src/main/java/com/xjrsoft/module/databoard/vo/CourseStatisticsDetailVo.java

@@ -0,0 +1,28 @@
+package com.xjrsoft.module.databoard.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+* @title: 课表统计数据
+* @Author dzx
+* @Date: 2024年8月2日
+* @Version 1.0
+*/
+@Data
+public class CourseStatisticsDetailVo {
+
+
+    @ApiModelProperty("课时榜")
+    private List<CourseCountListVo> courseCountList;
+
+    @ApiModelProperty("教学部课时统计")
+    private List<ItemCountRatioVo> deptCourseList;
+
+    @ApiModelProperty("其他补充课时")
+    private List<ItemCountRatioVo> otnherCourseList;
+
+
+}

+ 26 - 0
src/main/java/com/xjrsoft/module/databoard/vo/ItemCountRatioVo.java

@@ -0,0 +1,26 @@
+package com.xjrsoft.module.databoard.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+* @title:
+* @Author dzx
+* @Date: 2024年8月2日
+* @Version 1.0
+*/
+@Data
+public class ItemCountRatioVo {
+
+
+    @ApiModelProperty("统计项")
+    private String item;
+
+    @ApiModelProperty("数量")
+    private Integer count;
+
+    @ApiModelProperty("占比")
+    private Double ratio;
+
+}

+ 2 - 2
src/main/java/com/xjrsoft/module/material/service/impl/MaterialTaskServiceImpl.java

@@ -533,7 +533,7 @@ public class MaterialTaskServiceImpl extends MPJBaseServiceImpl<MaterialTaskMapp
 
             WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
             weChatSendMessageDto.setUserId(materialTaskAssignUser.getOpenId());
-            weChatSendMessageDto.setTemplateId("qmpXORPM1Cocqn503Qa4OkNNQ0uxlj2-ed9m6uWO-v4");
+            weChatSendMessageDto.setTemplateId("qmpXORPM1Cocqn503Qa4On6BJhR92UZ00eod2-6IcGo");
             //weChatSendMessageDto.setUrl(StrUtil.format("{}/pages/message/notice/detail?id={}", commonPropertiesConfig.getDomainApp(), id));
             weChatSendMessageDto.setMsgId(materialTask.getId().toString());
             JSONObject data = new JSONObject();
@@ -544,7 +544,7 @@ public class MaterialTaskServiceImpl extends MPJBaseServiceImpl<MaterialTaskMapp
 
             JSONObject data2 = new JSONObject();
             data2.put("value", createUser.getName());
-            data.put("thing18", data2);
+            data.put("thing29", data2);
 
             JSONObject data3 = new JSONObject();
             data3.put("value", materialTask.getRequiredCompleteTime());

+ 4 - 4
src/main/java/com/xjrsoft/module/oa/service/impl/NewsServiceImpl.java

@@ -858,7 +858,7 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
                     for (User user : userList) {
                         WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
                         weChatSendMessageDto.setUserId(user.getOpenId());
-                        weChatSendMessageDto.setTemplateId("qmpXORPM1Cocqn503Qa4OkNNQ0uxlj2-ed9m6uWO-v4");
+                        weChatSendMessageDto.setTemplateId("qmpXORPM1Cocqn503Qa4On6BJhR92UZ00eod2-6IcGo");
                         weChatSendMessageDto.setUrl(StrUtil.format("{}/pages/message/notice/detail?id={}", commonPropertiesConfig.getDomainApp(), id));
                         weChatSendMessageDto.setMsgId(id.toString());
                         JSONObject data = new JSONObject();
@@ -870,7 +870,7 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
 
                         JSONObject data2 = new JSONObject();
                         data2.put("value", (department == null) ? "重庆铜梁职业教育中心" : department.getName());
-                        data.put("thing18", data2);
+                        data.put("thing29", data2);
 
                         JSONObject data3 = new JSONObject();
                         data3.put("value", LocalDateTimeUtil.format(news.getReleaseTime(), "yyyy-MM-dd HH:mm:ss"));
@@ -891,7 +891,7 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
                     for (NewsRelationVo newsRelationVo : newsRelationVoList) {
                         WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
                         weChatSendMessageDto.setUserId(newsRelationVo.getUserName());
-                        weChatSendMessageDto.setTemplateId("qmpXORPM1Cocqn503Qa4OkNNQ0uxlj2-ed9m6uWO-v4");
+                        weChatSendMessageDto.setTemplateId("qmpXORPM1Cocqn503Qa4On6BJhR92UZ00eod2-6IcGo");
                         weChatSendMessageDto.setUrl(StrUtil.format("{}/pages/message/notice/detail?id={}", commonPropertiesConfig.getDomainApp(), id));
                         weChatSendMessageDto.setMsgId(id.toString());
                         JSONObject data = new JSONObject();
@@ -902,7 +902,7 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
 
                         JSONObject data2 = new JSONObject();
                         data2.put("value", (department == null) ? "重庆铜梁职业教育中心" : department.getName());
-                        data.put("thing18", data2);
+                        data.put("thing29", data2);
 
                         JSONObject data3 = new JSONObject();
                         data3.put("value", LocalDateTimeUtil.format(news.getReleaseTime(), "yyyy-MM-dd HH:mm:ss"));

+ 49 - 18
src/main/java/com/xjrsoft/module/student/controller/StudentReportRecordController.java

@@ -6,12 +6,18 @@ import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.xjrsoft.common.enums.EnrollTypeEnum;
+import com.xjrsoft.common.enums.GenderDictionaryEnum;
+import com.xjrsoft.common.enums.StudyStatusEnum;
 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.base.entity.BaseGrade;
 import com.xjrsoft.module.base.entity.BaseSemester;
+import com.xjrsoft.module.base.service.IBaseGradeService;
 import com.xjrsoft.module.base.service.IBaseSemesterService;
+import com.xjrsoft.module.databoard.vo.ItemCountVo;
 import com.xjrsoft.module.student.dto.AddStudentReportRecordDto;
 import com.xjrsoft.module.student.dto.StudentReportRecordPageDto;
 import com.xjrsoft.module.student.dto.StudentReportRecordStatisticsDto;
@@ -19,6 +25,7 @@ import com.xjrsoft.module.student.dto.UpdateStudentReportRecordDto;
 import com.xjrsoft.module.student.entity.StudentReportRecord;
 import com.xjrsoft.module.student.service.IStudentReportRecordService;
 import com.xjrsoft.module.student.vo.StudentReportRecordPageVo;
+import com.xjrsoft.module.student.vo.StudentReportRecordStatisticsListVo;
 import com.xjrsoft.module.student.vo.StudentReportRecordStatisticsVo;
 import com.xjrsoft.module.student.vo.StudentReportRecordVo;
 import io.swagger.annotations.Api;
@@ -36,8 +43,11 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.validation.Valid;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
 * @title: 学生报到记录表
@@ -54,6 +64,7 @@ public class StudentReportRecordController {
 
     private final IStudentReportRecordService studentReportRecordService;
     private final IBaseSemesterService semesterService;
+    private final IBaseGradeService gradeService;
 
     @GetMapping(value = "/page")
     @ApiOperation(value="学生报到记录表列表(分页)")
@@ -127,7 +138,7 @@ public class StudentReportRecordController {
     @ApiOperation(value = "删除学生报到记录表")
     @SaCheckPermission("studentreportrecord:delete")
     public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
-        return RT.ok(studentReportRecordService.removeBatchByIds(ids));
+        return RT.ok(studentReportRecordService.removeByUserId(ids));
 
     }
 
@@ -163,6 +174,10 @@ public class StudentReportRecordController {
             }
         }
         StudentReportRecordStatisticsVo statisticsVo = studentReportRecordService.getClassStatistics(dto);
+        if(statisticsVo == null){
+            statisticsVo = new StudentReportRecordStatisticsVo();
+            return RT.ok(statisticsVo);
+        }
         long notArrivedCount = statisticsVo.getAllCount() - statisticsVo.getArrivedCount();
         statisticsVo.setNotArrivedCount(notArrivedCount);
         BigDecimal divide = BigDecimal.ZERO;
@@ -177,27 +192,43 @@ public class StudentReportRecordController {
     @ApiOperation(value="领导统计")
     @SaCheckPermission("studentreportrecord:detail")
     public RT<StudentReportRecordStatisticsVo> statistics(@Valid StudentReportRecordStatisticsDto dto){
-        if(dto.getTeacherId() == null){
-            dto.setTeacherId(StpUtil.getLoginIdAsLong());
-        }
-        if(dto.getBaseSemesterId() == null){
-            LambdaQueryWrapper<BaseSemester> queryWrapper = new LambdaQueryWrapper<>();
+        if(dto.getGradeId() == null){
+            LambdaQueryWrapper<BaseGrade> queryWrapper = new LambdaQueryWrapper<>();
             queryWrapper
-                    .orderByDesc(BaseSemester::getStartDate)
-                    .select(BaseSemester.class,x -> VoToColumnUtil.fieldsToColumns(BaseSemester.class).contains(x.getProperty()));
-            List<BaseSemester> semesterList = semesterService.list(queryWrapper);
-            if(!semesterList.isEmpty()){
-                dto.setBaseSemesterId(semesterList.get(0).getId());
+                    .orderByDesc(BaseGrade::getTitle)
+                    .select(BaseGrade.class,x -> VoToColumnUtil.fieldsToColumns(BaseGrade.class).contains(x.getProperty()));
+            List<BaseGrade> gradeList = gradeService.list(queryWrapper);
+            if(!gradeList.isEmpty()){
+                dto.setGradeId(gradeList.get(0).getId());
             }
         }
-        StudentReportRecordStatisticsVo statisticsVo = studentReportRecordService.getClassStatistics(dto);
-        long notArrivedCount = statisticsVo.getAllCount() - statisticsVo.getArrivedCount();
-        statisticsVo.setNotArrivedCount(notArrivedCount);
-        BigDecimal divide = BigDecimal.ZERO;
-        if( statisticsVo.getAllCount() != 0){
-            divide = BigDecimal.valueOf(statisticsVo.getArrivedCount()).divide(BigDecimal.valueOf(statisticsVo.getAllCount()), 4, RoundingMode.HALF_UP);
+        if(dto.getEnrollType() == null || dto.getEnrollType().isEmpty()){
+            dto.setEnrollType(EnrollTypeEnum.AUTUMN_ENROLLMENT.getCode());
         }
-        statisticsVo.setReportRate(divide.doubleValue());
+        List<StudentReportRecordStatisticsListVo> dataList = studentReportRecordService.getStatisticsDataList(dto);
+        StudentReportRecordStatisticsVo statisticsVo = new StudentReportRecordStatisticsVo();
+        statisticsVo.setAllCount(dataList.stream().count());
+
+        statisticsVo.setArrivedCount(dataList.stream().filter(x -> x.getReportTime() != null).count());
+        statisticsVo.setNotArrivedCount(dataList.stream().filter(x -> x.getReportTime() == null).count());
+        statisticsVo.setArrivedMaleCount(dataList.stream().filter(x -> x.getReportTime() != null && GenderDictionaryEnum.MALE.getCode().equals(x.getGender())).count());
+        statisticsVo.setArrivedFemaleCount(dataList.stream().filter(x -> x.getReportTime() != null && GenderDictionaryEnum.FEMALE.getCode().equals(x.getGender())).count());
+
+        statisticsVo.setStayMaleCount(dataList.stream().filter(x -> GenderDictionaryEnum.MALE.getCode().equals(x.getGender()) && StudyStatusEnum.InResidence.getCode().equals(x.getStduyStatus())).count());
+        statisticsVo.setStayFemaleCount(dataList.stream().filter(x -> GenderDictionaryEnum.FEMALE.getCode().equals(x.getGender()) && StudyStatusEnum.InResidence.getCode().equals(x.getStduyStatus())).count());
+        statisticsVo.setNotStayMaleCount(dataList.stream().filter(x -> GenderDictionaryEnum.MALE.getCode().equals(x.getGender()) && StudyStatusEnum.AttendDaySchool.getCode().equals(x.getStduyStatus())).count());
+        statisticsVo.setNotStayFemaleCount(dataList.stream().filter(x -> GenderDictionaryEnum.FEMALE.getCode().equals(x.getGender()) && StudyStatusEnum.AttendDaySchool.getCode().equals(x.getStduyStatus())).count());
+        Map<String, List<StudentReportRecordStatisticsListVo>> graduatedUniversityMap = dataList.stream().collect(Collectors.groupingBy(StudentReportRecordStatisticsListVo::getGraduatedUniversity));
+        List<ItemCountVo> graduatedUniversityList = new ArrayList<>();
+        for (String graduatedUniversity : graduatedUniversityMap.keySet()) {
+            graduatedUniversityList.add(
+                    new ItemCountVo(){{
+                        setItem(graduatedUniversity);
+                        setCount(graduatedUniversityMap.get(graduatedUniversity).size());
+                    }}
+            );
+        }
+        statisticsVo.setGraduatedUniversityList(graduatedUniversityList);
         return RT.ok(statisticsVo);
     }
 

+ 6 - 0
src/main/java/com/xjrsoft/module/student/dto/StudentReportRecordStatisticsDto.java

@@ -20,4 +20,10 @@ public class StudentReportRecordStatisticsDto extends PageInput {
 
     @ApiModelProperty("学期id(不传查询最新一学期的)")
     private Long baseSemesterId;
+
+    @ApiModelProperty("年级id")
+    private Long gradeId;
+
+    @ApiModelProperty("招生类型(xjr_dictionary_detail[enroll_type])")
+    private String enrollType;
 }

+ 5 - 0
src/main/java/com/xjrsoft/module/student/mapper/StudentReportRecordMapper.java

@@ -3,10 +3,13 @@ package com.xjrsoft.module.student.mapper;
 import com.github.yulichang.base.MPJBaseMapper;
 import com.xjrsoft.module.student.dto.StudentReportRecordStatisticsDto;
 import com.xjrsoft.module.student.entity.StudentReportRecord;
+import com.xjrsoft.module.student.vo.StudentReportRecordStatisticsListVo;
 import com.xjrsoft.module.student.vo.StudentReportRecordStatisticsVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
 * @title: 学生报到记录表
 * @Author dzx
@@ -18,4 +21,6 @@ public interface StudentReportRecordMapper extends MPJBaseMapper<StudentReportRe
 
     StudentReportRecordStatisticsVo getClassStatistics(@Param("dto") StudentReportRecordStatisticsDto dto);
 
+    List<StudentReportRecordStatisticsListVo> getStatisticsDataList(@Param("dto") StudentReportRecordStatisticsDto dto);
+
 }

+ 10 - 0
src/main/java/com/xjrsoft/module/student/service/IStudentReportRecordService.java

@@ -3,7 +3,11 @@ package com.xjrsoft.module.student.service;
 import com.github.yulichang.base.MPJBaseService;
 import com.xjrsoft.module.student.dto.StudentReportRecordStatisticsDto;
 import com.xjrsoft.module.student.entity.StudentReportRecord;
+import com.xjrsoft.module.student.vo.StudentReportRecordStatisticsListVo;
 import com.xjrsoft.module.student.vo.StudentReportRecordStatisticsVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
 * @title: 学生报到记录表
@@ -15,4 +19,10 @@ import com.xjrsoft.module.student.vo.StudentReportRecordStatisticsVo;
 public interface IStudentReportRecordService extends MPJBaseService<StudentReportRecord> {
 
     StudentReportRecordStatisticsVo getClassStatistics(StudentReportRecordStatisticsDto dto);
+
+
+    List<StudentReportRecordStatisticsListVo> getStatisticsDataList(StudentReportRecordStatisticsDto dto);
+
+
+    Boolean removeByUserId(List<Long> ids);
 }

+ 17 - 0
src/main/java/com/xjrsoft/module/student/service/impl/StudentReportRecordServiceImpl.java

@@ -1,14 +1,18 @@
 package com.xjrsoft.module.student.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.xjrsoft.module.student.dto.StudentReportRecordStatisticsDto;
 import com.xjrsoft.module.student.entity.StudentReportRecord;
 import com.xjrsoft.module.student.mapper.StudentReportRecordMapper;
 import com.xjrsoft.module.student.service.IStudentReportRecordService;
+import com.xjrsoft.module.student.vo.StudentReportRecordStatisticsListVo;
 import com.xjrsoft.module.student.vo.StudentReportRecordStatisticsVo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
 * @title: 学生报到记录表
 * @Author dzx
@@ -22,4 +26,17 @@ public class StudentReportRecordServiceImpl extends MPJBaseServiceImpl<StudentRe
     public StudentReportRecordStatisticsVo getClassStatistics(StudentReportRecordStatisticsDto dto) {
         return this.baseMapper.getClassStatistics(dto);
     }
+
+    @Override
+    public List<StudentReportRecordStatisticsListVo> getStatisticsDataList(StudentReportRecordStatisticsDto dto) {
+        return this.baseMapper.getStatisticsDataList(dto);
+    }
+
+    @Override
+    public Boolean removeByUserId(List<Long> ids) {
+        this.baseMapper.delete(
+                new QueryWrapper<StudentReportRecord>().lambda().in(StudentReportRecord::getUserId, ids)
+        );
+        return true;
+    }
 }

+ 4 - 0
src/main/java/com/xjrsoft/module/student/vo/StudentReportRecordPageVo.java

@@ -40,4 +40,8 @@ public class StudentReportRecordPageVo {
     @ApiModelProperty("家长电话")
     private String parentMobile;
 
+
+    @ApiModelProperty("是否已报到(1:是 0:否)")
+    private Integer isReport;
+
 }

+ 37 - 0
src/main/java/com/xjrsoft/module/student/vo/StudentReportRecordStatisticsListVo.java

@@ -0,0 +1,37 @@
+package com.xjrsoft.module.student.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+
+/**
+* @title: 学生报到记录表表单出参
+* @Author dzx
+* @Date: 2024-08-28
+* @Version 1.0
+*/
+@Data
+public class StudentReportRecordStatisticsListVo {
+
+
+    @ApiModelProperty("姓名")
+    private String name;
+
+    @ApiModelProperty("身份证号")
+    private String credentialNumber;
+
+    @ApiModelProperty("性别")
+    private String gender;
+
+    @ApiModelProperty("毕业学校")
+    private String graduatedUniversity;
+
+    @ApiModelProperty("就读方式")
+    private String stduyStatus;
+
+    @ApiModelProperty("报到时间")
+    private LocalDateTime reportTime;
+
+}

+ 12 - 0
src/main/java/com/xjrsoft/module/student/vo/StudentReportRecordStatisticsVo.java

@@ -52,4 +52,16 @@ public class StudentReportRecordStatisticsVo {
     @ApiModelProperty("")
     private List<ItemCountVo> graduatedUniversityList;
 
+    @ApiModelProperty("住校男学生总人数")
+    private Long stayMaleCount;
+
+    @ApiModelProperty("住校女学生总人数")
+    private Long stayFemaleCount;
+
+    @ApiModelProperty("走读男学生总人数")
+    private Long notStayMaleCount;
+
+    @ApiModelProperty("走读女学生总人数")
+    private Long notStayFemaleCount;
+
 }

+ 2 - 2
src/main/resources/mapper/student/BaseNewStudentMapper.xml

@@ -13,8 +13,8 @@
         LEFT JOIN enrollment_plan t4 ON t1.enrollment_plan_id = t4.id
         LEFT JOIN base_major_set t7 ON t1.first_ambition = t7.id
         LEFT JOIN base_major_set t8 ON t1.second_ambition = t8.id
-        LEFT JOIN xjr_user t9 ON t1.credential_number = t9.credential_number
-        LEFT JOIN base_student_school_roll t10 ON t9.id = t10.user_id
+        LEFT JOIN xjr_user t9 ON t1.credential_number = t9.credential_number AND t9.delete_mark = 0
+        LEFT JOIN base_student_school_roll t10 ON t9.id = t10.user_id AND t10.delete_mark = 0
         LEFT JOIN base_class t11 ON t10.class_id = t11.id
         LEFT JOIN xjr_user t12 ON t11.teacher_id = t12.id
         WHERE t1.delete_mark = 0

+ 12 - 3
src/main/resources/mapper/student/StudentReportRecordMapper.xml

@@ -38,15 +38,24 @@
     </select>
     <select id="getClassStatistics" parameterType="com.xjrsoft.module.student.dto.StudentReportRecordStatisticsDto"
             resultType="com.xjrsoft.module.student.vo.StudentReportRecordPageVo">
-        SELECT t1.id as user_id,t1.name,t1.credential_number,t1.mobile,t4.name AS stduy_status_cn,t5.telephone AS parent_mobile FROM xjr_user t1
+        SELECT t1.id as user_id,t1.name,t1.credential_number,t1.mobile,t4.name AS stduy_status_cn,t5.telephone AS parent_mobile,
+        (select count(*) from student_report_record where user_id = t1.id and base_semester_id = #{dto.baseSemesterId}) as is_report FROM xjr_user t1
         INNER JOIN base_student_school_roll t2 ON t1.id = t2.user_id
         INNER JOIN base_class t3 ON t2.class_id = t3.id
         LEFT JOIN xjr_dictionary_detail t4 ON t2.stduy_status = t4.code
         LEFT JOIN base_student_family t5 ON t5.user_id = t1.id
-        LEFT JOIN student_report_record t6 ON t1.id = t6.user_id
-        AND t6.base_semester_id = #{dto.baseSemesterId}
         WHERE t1.delete_mark = 0 AND t2.delete_mark = 0
         AND t2.class_id = #{dto.teacherId}
         ORDER BY t1.create_date DESC, t2.create_date DESC,t3.create_date DESC
     </select>
+    <select id="getStatisticsDataList" parameterType="com.xjrsoft.module.student.dto.StudentReportRecordStatisticsDto"
+            resultType="com.xjrsoft.module.student.vo.StudentReportRecordStatisticsListVo">
+            SELECT t1.name,t1.credential_number,t2.gender,t4.graduated_university,t4.stduy_status,t5.report_time FROM base_new_student t1
+            INNER JOIN xjr_user t2 ON t1.credential_number = t2.credential_number
+            INNER JOIN enrollment_plan t3 ON t3.id = t1.enrollment_plan_id
+            INNER JOIN base_student_school_roll t4 ON t4.user_id = t2.id
+            LEFT JOIN student_report_record t5 ON t2.id = t5.user_id
+            WHERE t1.delete_mark = 0 AND t2.delete_mark = 0
+            AND t3.grade_id = #{dto.gradeId} AND t3.enroll_type = #{dto.enrollType}
+    </select>
 </mapper>

+ 34 - 0
src/test/java/com/xjrsoft/module/oa/service/impl/NewsServiceImplTest.java

@@ -1,7 +1,13 @@
 package com.xjrsoft.module.oa.service.impl;
 
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.xjrsoft.common.utils.LocalDateTimeUtil;
 import com.xjrsoft.module.oa.dto.ChangeNewsDto;
 import com.xjrsoft.module.oa.service.INewsService;
+import com.xjrsoft.module.organization.dto.WeChatSendMessageDto;
+import com.xjrsoft.module.organization.service.IWeChatService;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
@@ -18,6 +24,10 @@ class NewsServiceImplTest {
     @Autowired
     private INewsService newsService;
 
+
+    @Autowired
+    private IWeChatService weChatService;
+
     @Test
     void changeStatus() {
         newsService.changeStatus(new ChangeNewsDto(){{
@@ -30,4 +40,28 @@ class NewsServiceImplTest {
     void dataHandle() {
         newsService.dataHandle(1747971884062928896L);
     }
+
+    @Test
+    void sendMessage() {
+        WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
+        weChatSendMessageDto.setUserId("o8d_c6cbhCMpgNmXNe3yXZlADgNM");
+        weChatSendMessageDto.setTemplateId("qmpXORPM1Cocqn503Qa4On6BJhR92UZ00eod2-6IcGo");
+        weChatSendMessageDto.setUrl(StrUtil.format("{}/pages/message/notice/detail?id={}", "https://zhxy.cqtlzjzx.com/app/#", 1828978101761650689L));
+        weChatSendMessageDto.setMsgId(IdUtil.getSnowflakeNextIdStr());
+        JSONObject data = new JSONObject();
+
+        JSONObject data1 = new JSONObject();
+        data1.put("value", "关于调整2024年秋季学期开学及召开教职工大会的通知");
+        data.put("thing23", data1);
+
+        JSONObject data2 = new JSONObject();
+        data2.put("value", "重庆铜梁职业教育中心");
+        data.put("thing29", data2);
+
+        JSONObject data3 = new JSONObject();
+        data3.put("value", "2024-08-29 10:09:34");
+        data.put("time17", data3);
+        weChatSendMessageDto.setContent(data);
+        weChatService.sendTemplateMessage(weChatSendMessageDto);
+    }
 }