Browse Source

消息推送

liujc 2 years ago
parent
commit
0e8d5c3afb
19 changed files with 403 additions and 21 deletions
  1. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  2. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java
  3. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/SchoolStaffWrapper.java
  4. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  5. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java
  6. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  7. 9 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  8. 61 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  9. 58 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SchoolStaffServiceImpl.java
  10. 30 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java
  11. 58 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  12. 53 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherLeaveRecordServiceImpl.java
  13. 8 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  14. 1 0
      mec-biz/src/main/resources/config/mybatis/SchoolActivityMapper.xml
  15. 6 0
      mec-biz/src/main/resources/config/mybatis/SchoolStaffMapper.xml
  16. 3 1
      mec-biz/src/main/resources/config/mybatis/SysMessageMapper.xml
  17. 1 1
      mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java
  18. 4 0
      mec-util/src/main/java/com/ym/mec/util/date/DateUtil.java
  19. 83 0
      mec-web/src/main/java/com/ym/mec/web/controller/SchoolMessageController.java

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -2008,4 +2008,6 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
                                                                                                       @Param("endTerm") String endTerm);
 
     List<ClassesForDayDto> getListClassesForDay(@Param("musicGroupIds") List<String> musicGroupIds, @Param("classDate") String classDate, @Param("courseId") Long courseId);
+
+    List<CourseSchedule> getByTeacherAndTime(@Param("teacherId") Integer teacherId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
 }

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java

@@ -281,6 +281,8 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     // 学校端账户注册通知
     JIGUANG_SCHOOL_ACCOUNT_REGISTER_NOTICE("JIGUANG_SCHOOL_ACCOUNT_REGISTER_NOTICE","学校端账户注册通知-极光推送"),
 
+    // 学校端注册短信通知
+    SMS_SCHOOL_ACCOUNT_REGISTER("SMS_SCHOOL_ACCOUNT_REGISTER","学校端注册短信通知-极光推送"),
     ;
 
     MessageTypeEnum(String code, String msg) {

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/SchoolStaffWrapper.java

@@ -16,6 +16,7 @@ import org.apache.commons.lang3.StringUtils;
 import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.util.Date;
+import java.util.List;
 import java.util.Optional;
 
 /**
@@ -44,6 +45,11 @@ public class SchoolStaffWrapper {
         @ApiModelProperty("合作单位编号")
         private Long schoolId;
 
+
+        @ApiModelProperty("合作单位编号")
+        private List<Long> schoolIds;
+
+
         @ApiModelProperty("机构编号")
         private Integer tenantId;
         

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java

@@ -761,4 +761,14 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
      * @param teachingPoint 教学点信息
      */
     Boolean teachingPoint(TeachingPointWrapper.TeachingPoint teachingPoint);
+
+
+    /**
+     * 时间段内的课程
+     *
+     * @param teacherId 老师ID
+     * @param startTime 开始时间
+     * @param endTime 结束时间
+     */
+    List<CourseSchedule> getByTeacherAndTime(Integer teacherId, Date startTime, Date endTime);
 }

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java

@@ -9,6 +9,7 @@ import com.ym.mec.biz.dal.vo.MusicGroupDeliveryVo;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
 import java.math.BigDecimal;
@@ -168,6 +169,9 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
     boolean applyQuitMusicGroup(List<SysUserRoleEnum> currentOperatorRoleIds, MusicGroupQuit reqMusicGroupQuit);
 
 
+    @Transactional(rollbackFor = Exception.class)
+    boolean applyQuitMusicGroup(List<SysUserRoleEnum> currentOperatorRoleIds, MusicGroupQuit reqMusicGroupQuit, String client);
+
     /**
      * 取消退团
      *

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -2657,6 +2657,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         if (musicGroup.getStatus() == PROGRESS) {
             imUserFriendService.refreshClassImUserFriend(classGroupId);
         }
+
+        // 通知学校端
+
+
         return BaseController.succeed(classGroup);
     }
 

+ 9 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -3605,6 +3605,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.TEACHER_PUSH_COURSE_SCHEDULE_CHANGE_RESULT, map, null, 0, "7",
 						"TEACHER");
 			}
+
+            // 推送消息到学校端
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
@@ -6197,8 +6199,14 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         return true;
     }
 
+    @Override
+    public List<CourseSchedule> getByTeacherAndTime(Integer teacherId, Date startTime, Date endTime) {
+        return courseScheduleDao.getByTeacherAndTime(teacherId,startTime,endTime);
+    }
 
-	@Override
+
+
+    @Override
 	public List<CourseStudentDto> queryCourseStudentList(Long courseId) {
 		List<CourseStudentDto> courseStudentDtos = studentAttendanceDao.queryCourseStudentList(courseId);
 		if(CollectionUtils.isNotEmpty(courseStudentDtos)){

+ 61 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -2,6 +2,8 @@ package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
@@ -15,6 +17,7 @@ import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.MusicGroupQueryInfo;
 import com.ym.mec.biz.dal.page.MusicMemberQueryInfo;
 import com.ym.mec.biz.dal.vo.MusicGroupDeliveryVo;
+import com.ym.mec.biz.dal.wrapper.SchoolStaffWrapper;
 import com.ym.mec.biz.event.source.GroupEventSource;
 import com.ym.mec.biz.event.source.SendSeoMessageSource;
 import com.ym.mec.biz.service.*;
@@ -32,6 +35,7 @@ import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
 import com.ym.mec.util.json.JsonUtil;
+import com.ym.mec.util.string.MessageFormatter;
 import com.ym.mec.util.validator.CommonValidator;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -206,6 +210,12 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Autowired
     private MusicGroupPaymentCalenderRepairDao musicGroupPaymentCalenderRepairDao;
 
+    @Autowired
+    private SchoolStaffService schoolStaffService;
+
+    @Autowired
+    private SysMessageConfigDao sysMessageConfigDao;
+
     private SimpleDateFormat sdf_ymd = new SimpleDateFormat("yyyy-MM-dd");
 
     private SimpleDateFormat sdf_hms = new SimpleDateFormat("HH:mm:ss");
@@ -1995,6 +2005,11 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean applyQuitMusicGroup(List<SysUserRoleEnum> currentOperatorRoleIds, MusicGroupQuit reqMusicGroupQuit) {
+        return applyQuitMusicGroup(currentOperatorRoleIds, reqMusicGroupQuit, null);
+    }
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean applyQuitMusicGroup(List<SysUserRoleEnum> currentOperatorRoleIds, MusicGroupQuit reqMusicGroupQuit, String client) {
         Integer userId = reqMusicGroupQuit.getUserId();
         String musicGroupId = reqMusicGroupQuit.getMusicGroupId();
         String reason = reqMusicGroupQuit.getReason();
@@ -2086,6 +2101,36 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         musicGroupQuitDao.insert(musicGroupQuit);
 
+
+        // 学生端提交退团申请推送
+        // 推送异常考勤消息
+        if("STUDENT".equals(client)){
+
+            // 乐团信息
+            SysUser student = sysUserFeignService.queryUserById(musicGroupQuit.getUserId());
+
+            IPage<SchoolStaffWrapper.SchoolStaff> page = schoolStaffService.selectPage(new Page<>(1, -1),
+                    SchoolStaffWrapper.SchoolStaffQuery.builder().schoolId(musicGroup.getCooperationOrganId().longValue()).build());
+            List<SchoolStaffWrapper.SchoolStaff> records = page.getRecords();
+            if (CollectionUtils.isNotEmpty(records)) {
+
+                Map<Integer, String> userMap = new HashMap<>();
+                records.forEach(o -> {
+                    userMap.put(o.getUserId().intValue(), o.getUserId().toString());
+                });
+
+                SysMessageConfig sysMessageConfig = sysMessageConfigDao.queryByType(MessageTypeEnum.JIGUANG_STUDENT_QUIT_GROUP_APPLY.getCode());
+                String url = sysMessageConfig.getUrl();
+
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.JIGUANG_STUDENT_QUIT_GROUP_APPLY,
+                        userMap, null, 0, url,
+                        "SCHOOL",musicGroup.getName(),student.getUsername());
+            }
+        }
+
+        // 后台通过退团申请推送
+
+
         if (reqMusicGroupQuit.getStatus() == PROCESSING) {
             SysUser sysUser = sysUserFeignService.queryUserById(userId);
 
@@ -2451,6 +2496,22 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 //                        PlatformCashAccountDetailTypeEnum.REFUNDS, null, SUCCESS, "退出乐团", null);
             }
         }
+
+        // 推送退团消息
+        IPage<SchoolStaffWrapper.SchoolStaff> page = schoolStaffService.selectPage(new Page<>(1, -1),
+                SchoolStaffWrapper.SchoolStaffQuery.builder().schoolId(musicGroup.getCooperationOrganId().longValue()).build());
+        List<SchoolStaffWrapper.SchoolStaff> records = page.getRecords();
+        if (CollectionUtils.isNotEmpty(records)) {
+
+            SysUser sysUser = sysUserFeignService.queryUserById(userId);
+
+            Map<Integer, String> userMap = new HashMap<>();
+            records.forEach(o -> userMap.put(o.getUserId().intValue(), o.getUserId().toString()));
+
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.JIGUANG_STUDENT_QUIT_GROUP,
+                    userMap, null, 0, null,
+                    "SCHOOL",musicGroup.getName(),sysUser.getUsername());
+        }
         return true;
     }
 

+ 58 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SchoolStaffServiceImpl.java

@@ -2,23 +2,30 @@ package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.enums.SysUserType;
 import com.ym.mec.auth.api.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.dao.SysMessageConfigDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.entity.CooperationOrgan;
 import com.ym.mec.biz.dal.entity.SchoolStaff;
 import com.ym.mec.biz.dal.entity.SysConfig;
+import com.ym.mec.biz.dal.entity.SysMessageConfig;
+import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.enums.school.ESchoolStaffType;
 import com.ym.mec.biz.dal.mapper.SchoolStaffMapper;
 import com.ym.mec.biz.dal.wrapper.SchoolStaffWrapper;
 import com.ym.mec.biz.service.CooperationOrganService;
 import com.ym.mec.biz.service.SchoolStaffService;
 import com.ym.mec.biz.service.SysConfigService;
+import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.exception.BizException;
+import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
+import com.ym.mec.util.string.MessageFormatter;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -31,12 +38,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.text.MessageFormat;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.Set;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
@@ -57,12 +59,21 @@ public class SchoolStaffServiceImpl extends ServiceImpl<SchoolStaffMapper, Schoo
     @Autowired
     private SysConfigService sysConfigService;
 
-	/**
+    @Autowired
+    private SysMessageService sysMessageService;
+
+    @Autowired
+    private SchoolStaffService schoolStaffService;
+
+    @Autowired
+    private SysMessageConfigDao sysMessageConfigDao;
+
+    /**
      * 查询详情
      * @param id 详情ID
      * @return SchoolStaff
      */
-	@Override
+    @Override
     public SchoolStaff detail(Long id) {
         
         return baseMapper.selectById(id);
@@ -79,7 +90,7 @@ public class SchoolStaffServiceImpl extends ServiceImpl<SchoolStaffMapper, Schoo
         
         return page.setRecords(baseMapper.selectPage(page, query));
     }
-	
+
     /**
      * 添加
      * @param schoolStaff SchoolStaffWrapper.SchoolStaff
@@ -159,6 +170,44 @@ public class SchoolStaffServiceImpl extends ServiceImpl<SchoolStaffMapper, Schoo
         // 删除缓存锁
         redissonClient.getBucket(submitLockKey).delete();
 
+        // 消息推送
+
+        // 推送给自己
+
+        Map<Integer, String> userMap = new HashMap<>();
+        userMap.put(user.getId(), user.getId().toString());
+        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.JIGUANG_SCHOOL_ACCOUNT_REGISTER_NOTICE,
+                userMap, null, 0, null,
+                "SCHOOL",cooperation.getName(),schoolStaff.getUserType().getDescribe());
+
+
+        // 推送给学校自己外的其他用户
+        IPage<SchoolStaffWrapper.SchoolStaff> page = schoolStaffService.selectPage(new Page<>(1, -1),
+                SchoolStaffWrapper.SchoolStaffQuery.builder().schoolId(schoolStaff.getSchoolId()).build());
+        List<SchoolStaffWrapper.SchoolStaff> records = page.getRecords();
+        if (CollectionUtils.isNotEmpty(records)) {
+
+            Map<Integer, String> usersMap = new HashMap<>();
+            records.stream()
+                    .filter( o -> !o.getUserId().equals(schoolStaff.getUserId()))
+                    .forEach(o -> usersMap.put(o.getUserId().intValue(), o.getUserId().toString()));
+
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.JIGUANG_SCHOOL_ACCOUNT_REGISTER,
+                    usersMap, null, 0, null,
+                    "SCHOOL",schoolStaff.getUsername(),cooperation.getName(),schoolStaff.getUserType().getDescribe());
+        }
+
+        // 推送给自己的短信
+        Map<Integer, String> selfMap = new HashMap<>();
+        selfMap.put(user.getId(), user.getPhone());
+
+
+        SysMessageConfig sysMessageConfig = sysMessageConfigDao.queryByType(MessageTypeEnum.JIGUANG_TEACHER_SIGN_IN_EXCEPTION.getCode());
+        String url = sysMessageConfig.getUrl();
+
+        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_SCHOOL_ACCOUNT_REGISTER,
+                selfMap, null, 0, null,
+                "SCHOOL",cooperation.getName(),schoolStaff.getUserType().getDescribe(),url);
         return true;
     }
 

+ 30 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java

@@ -1,6 +1,8 @@
 package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
@@ -10,10 +12,8 @@ import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.CourseHomeworkQueryInfo;
 import com.ym.mec.biz.dal.page.ExportStudentAttendanceQueryInfo;
 import com.ym.mec.biz.dal.page.StudentAttendanceQueryInfo;
-import com.ym.mec.biz.service.StudentAttendanceService;
-import com.ym.mec.biz.service.SysConfigService;
-import com.ym.mec.biz.service.SysMessageService;
-import com.ym.mec.biz.service.SysTenantConfigService;
+import com.ym.mec.biz.dal.wrapper.SchoolStaffWrapper;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
@@ -74,6 +74,11 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
     @Autowired
     private MusicGroupPaymentCalenderDao musicGroupPaymentCalenderDao;
 
+    @Autowired
+    private SchoolStaffService schoolStaffService;
+
+    @Autowired
+    private MusicGroupDao musicGroupDao;
     @Override
     public BaseDAO<Long, StudentAttendance> getDAO() {
         return studentAttendanceDao;
@@ -423,6 +428,27 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
                 new String[]{courseSchedule.getActualTeacherId().toString()},
                 null, DateUtil.dateToString(courseSchedule.getStartClassTime(), "yyyy年MM月dd日 HH点mm分"),
                 courseSchedule.getType().getMsg(), sysUser.getUsername(), remark);
+
+        // 发送消息到学校端
+        MusicGroup musicGroup = musicGroupDao.get(courseSchedule.getMusicGroupId());
+
+        IPage<SchoolStaffWrapper.SchoolStaff> page = schoolStaffService.selectPage(new Page<>(1, -1),
+                SchoolStaffWrapper.SchoolStaffQuery.builder().schoolId(musicGroup.getCooperationOrganId().longValue()).build());
+        List<SchoolStaffWrapper.SchoolStaff> records = page.getRecords();
+        if (org.apache.commons.collections.CollectionUtils.isNotEmpty(records)) {
+
+            Map<Integer, String> userMap = new HashMap<>();
+            records.forEach(o -> userMap.put(o.getUserId().intValue(), o.getUserId().toString()));
+
+            String classDate = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
+            String startClassTime = DateUtil.format(courseSchedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
+            String endClassTime = DateUtil.format(courseSchedule.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
+            String leaveTime = classDate + " " + startClassTime + "-" + endClassTime;
+
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.JIGUANG_STUDENT_LEAVE,
+                    userMap, null, 0, null,
+                    "SCHOOL",musicGroup.getName(),sysUser.getUsername(),leaveTime,courseSchedule.getName());
+        }
         return true;
     }
 

+ 58 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -2,6 +2,8 @@ package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
@@ -13,6 +15,7 @@ import com.ym.mec.biz.dal.page.TeacherCloseQueryInfo;
 import com.ym.mec.biz.dal.school.dto.TeacherAttendanceListDto;
 import com.ym.mec.biz.dal.school.dto.TeacherAttendanceSumDto;
 import com.ym.mec.biz.dal.school.page.TeacherAttendanceQueryInfo;
+import com.ym.mec.biz.dal.wrapper.SchoolStaffWrapper;
 import com.ym.mec.biz.event.source.SendMessageSource;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
@@ -25,6 +28,7 @@ import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
+import com.ym.mec.util.string.MessageFormatter;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -91,6 +95,12 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
     @Autowired
     private StudentLessonTrainingDetailService studentLessonTrainingDetailService;
 
+    @Autowired
+    private SchoolStaffService schoolStaffService;
+
+    @Autowired
+    private SysMessageConfigDao sysMessageConfigDao;
+
 	@Override
 	public BaseDAO<Long, TeacherAttendance> getDAO() {
 		return teacherAttendanceDao;
@@ -290,13 +300,30 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
             // 推送异常考勤消息
             if(YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())){
 
-//                Map<Integer, String> userMap = new HashMap<>();
-//                userMap.put();
-//
-//                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.JIGUANG_TEACHER_SIGN_IN_EXCEPTION,
-//                        userMap, null, 0, "", null);
+                // 乐团信息
+                MusicGroup musicGroup = musicGroupDao.get(courseSchedule.getMusicGroupId());
+
+                IPage<SchoolStaffWrapper.SchoolStaff> page = schoolStaffService.selectPage(new Page<>(1, -1),
+                        SchoolStaffWrapper.SchoolStaffQuery.builder().schoolId(musicGroup.getCooperationOrganId().longValue()).build());
+                List<SchoolStaffWrapper.SchoolStaff> records = page.getRecords();
+                if (CollectionUtils.isNotEmpty(records)) {
+
+                    Map<Integer, String> userMap = new HashMap<>();
+                    records.forEach(o -> userMap.put(o.getUserId().intValue(), o.getUserId().toString()));
+
+                    SysMessageConfig sysMessageConfig = sysMessageConfigDao.queryByType(MessageTypeEnum.JIGUANG_TEACHER_SIGN_IN_EXCEPTION.getCode());
+                    String url = MessageFormatter.arrayFormat(sysMessageConfig.getUrl(),courseSchedule.getActualTeacherId(), courseSchedule.getClassGroupId());
+
+                    // 课程时间
+                    String courseTime = classDate +" " + startClassTime + "-" + endClassTime;
+                    sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.JIGUANG_TEACHER_SIGN_IN_EXCEPTION,
+                            userMap, null, 0, url,
+                            "SCHOOL",musicGroup.getName(),user.getRealName(),courseTime,courseSchedule.getName());
+                }
             }
 
+
+
 			return result;
 		}else if(teacherAttendance.getSignOutTime() == null && teacherSignOutDto.getTeacherAttendanceInfo().getStatus().equals(SignStatusEnum.SIGN_OUT.getCode())){
 			int i = studentAttendanceDao.countByCourseSchedule(courseSchedule.getId());
@@ -494,6 +521,32 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 			if(Objects.nonNull(examinationSaveDto)){
 				lessonExaminationService.publish(examinationSaveDto);
 			}
+
+
+            // 推送异常考勤消息
+            if(YesOrNoEnum.NO.equals(teacherAttendance.getSignOutStatus())){
+
+                // 乐团信息
+                MusicGroup musicGroup = musicGroupDao.get(courseSchedule.getMusicGroupId());
+
+                IPage<SchoolStaffWrapper.SchoolStaff> page = schoolStaffService.selectPage(new Page<>(1, -1),
+                        SchoolStaffWrapper.SchoolStaffQuery.builder().schoolId(musicGroup.getCooperationOrganId().longValue()).build());
+                List<SchoolStaffWrapper.SchoolStaff> records = page.getRecords();
+                if (CollectionUtils.isNotEmpty(records)) {
+
+                    Map<Integer, String> userMap = new HashMap<>();
+                    records.forEach(o -> userMap.put(o.getUserId().intValue(), o.getUserId().toString()));
+
+                    SysMessageConfig sysMessageConfig = sysMessageConfigDao.queryByType(MessageTypeEnum.JIGUANG_TEACHER_SIGN_OUT_EXCEPTION.getCode());
+                    String url = MessageFormatter.arrayFormat(sysMessageConfig.getUrl(),courseSchedule.getActualTeacherId(), courseSchedule.getClassGroupId());
+
+                    // 课程时间
+                    String courseTime = classDate +" " + startClassTime + "-" + endClassTime;
+                    sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.JIGUANG_TEACHER_SIGN_OUT_EXCEPTION,
+                            userMap, null, 0,url,
+                            "SCHOOL",musicGroup.getName(),user.getRealName(),courseTime,courseSchedule.getName());
+                }
+            }
 			return result;
 		}
 

+ 53 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherLeaveRecordServiceImpl.java

@@ -1,20 +1,26 @@
 package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.dao.TeacherLeaveRecordDao;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType;
+import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.entity.TeacherLeaveRecord;
 import com.ym.mec.biz.dal.entity.TeacherLeaveRecord.CoursesScheduleHistory;
 import com.ym.mec.biz.dal.enums.AuditStatusEnum;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.enums.SysUserRoleEnum;
+import com.ym.mec.biz.dal.wrapper.SchoolStaffWrapper;
 import com.ym.mec.biz.event.source.SendSeoMessageSource;
 import com.ym.mec.biz.service.CourseScheduleService;
+import com.ym.mec.biz.service.SchoolStaffService;
 import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.biz.service.TeacherLeaveRecordService;
 import com.ym.mec.common.controller.BaseController;
@@ -55,6 +61,11 @@ public class TeacherLeaveRecordServiceImpl extends BaseServiceImpl<Long, Teacher
 	@Autowired
 	private SysUserFeignService sysUserFeignService;
 
+    @Autowired
+    private SchoolStaffService schoolStaffService;
+
+    @Autowired
+    private MusicGroupDao musicGroupDao;
 	@Override
 	public BaseDAO<Long, TeacherLeaveRecord> getDAO() {
 		return teacherLeaveRecordDao;
@@ -159,6 +170,48 @@ public class TeacherLeaveRecordServiceImpl extends BaseServiceImpl<Long, Teacher
 		map.put(teacher.getId(),teacher.getId() + "");
 		sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_PUSH_LEAVE_RESULT,
 				map,null,0,"7","TEACHER",status.getMsg());
+
+        // 老师请假推送
+
+        // 查询有课的老师的合作单位 发送请假推送
+
+        List<CourseSchedule> courseSchedules = courseScheduleService.getByTeacherAndTime(teacherLeaveRecord.getUserId(),teacherLeaveRecord.getStartTime(),teacherLeaveRecord.getEndTime());
+        if (!CollectionUtils.isEmpty(courseSchedules)) {
+            Set<String> musicGroupIds = courseSchedules.stream().map(CourseSchedule::getMusicGroupId).collect(Collectors.toSet());
+            if (!CollectionUtils.isEmpty(musicGroupIds)) {
+                List<MusicGroup> musicGroups = musicGroupDao.getMusicGroupByIds(new ArrayList<>(musicGroupIds));
+                Set<Integer> coopIds = musicGroups.stream().map(o -> o.getCooperationOrganId()).collect(Collectors.toSet());
+                IPage<SchoolStaffWrapper.SchoolStaff> page = schoolStaffService.selectPage(new Page<>(1, -1),
+                        SchoolStaffWrapper.SchoolStaffQuery.builder().schoolIds(new ArrayList<>(coopIds.stream().map(Long::valueOf).collect(Collectors.toList()))).build());
+                List<SchoolStaffWrapper.SchoolStaff> records = page.getRecords();
+                if (!CollectionUtils.isEmpty(records)) {
+
+                    // 按照合作单位分组
+                    Map<Long, List<SchoolStaffWrapper.SchoolStaff>> coopMap = records.stream().collect(Collectors.groupingBy(SchoolStaffWrapper.SchoolStaff::getSchoolId));
+
+                    // 乐团按照合作单位分组
+                    Map<Integer, List<MusicGroup>> musicGroupMap = musicGroups.stream().collect(Collectors.groupingBy(MusicGroup::getCooperationOrganId));
+
+                    StringBuilder leaveTime = new StringBuilder(DateUtil.dateTimeToString(teacherLeaveRecord.getStartTime()) + "-" + DateUtil.dateTimeToString(teacherLeaveRecord.getEndTime()));
+                    coopMap.forEach((k, v) -> {
+                        List<MusicGroup> musicGroupList = musicGroupMap.get(k.intValue());
+                        if (!CollectionUtils.isEmpty(musicGroupList)) {
+
+                            Map<Integer, String> userMap = new HashMap<>();
+                            v.forEach(o -> userMap.put(o.getUserId().intValue(), o.getUserId().toString()));
+                            musicGroupList.forEach(o -> {
+                                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.JIGUANG_TEACHER_LEAVE,
+                                        userMap, null, 0, null,
+                                        "SCHOOL",o.getName(),teacher.getRealName(), leaveTime.toString());
+                            });
+                        }
+                    });
+
+                }
+
+            }
+        }
+
 		return BaseController.succeed();
 	}
 

+ 8 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -4254,4 +4254,12 @@
             </foreach>
         </if>
     </select>
+
+    <select id="getByTeacherAndTime" resultMap="CourseSchedule">
+        select * from course_schedule
+        where teacher_id_ = #{teacherId}
+        and CONCAT(class_date_," ",end_class_time_) &gt;= #{startTime}
+        and CONCAT(class_date_," ",start_class_time_) &lt;= #{endTime}
+
+    </select>
 </mapper>

+ 1 - 0
mec-biz/src/main/resources/config/mybatis/SchoolActivityMapper.xml

@@ -38,6 +38,7 @@
                 AND t.type_ = #{param.type}
             </if>
         </where>
+        order by t.start_time_ desc
 	</select>
 
     <select id="getUserList" resultType="com.ym.mec.biz.dal.wrapper.SchoolActivityWrapper$SchoolActivityStudent">

+ 6 - 0
mec-biz/src/main/resources/config/mybatis/SchoolStaffMapper.xml

@@ -18,6 +18,12 @@
 			<if test="param.schoolId != null">
 				AND t1.school_id_ = #{param.schoolId}
 			</if>
+            <if test="param.schoolIds != null and param.schoolIds.size() != 0">
+                and t1.school_id_ in
+                <foreach collection="param.schoolIds" item="schoolId" open="(" separator="," close=")">
+                    #{schoolId}
+                </foreach>
+            </if>
 		</where>
 		ORDER BY id_ DESC
 	</select>

+ 3 - 1
mec-biz/src/main/resources/config/mybatis/SysMessageMapper.xml

@@ -192,7 +192,9 @@
 	<select id="queryCountOfUnread" resultMap="Mapper" parameterType="map">
 		SELECT group_ key_,COUNT(*) value_ FROM sys_message
 		WHERE user_id_ = #{userId} AND read_status_ = 0 and status_ = 2
-		AND tenant_id_ = #{tenantId}
+        <if test="tenantId != null">
+            AND tenant_id_ = #{tenantId}
+        </if>
 		AND (jpush_type_ = #{jpushType} OR jpush_type_ IS NULL)
 		<if test="type != null">
 		and (type_ = 3 or type_ = 4)

+ 1 - 1
mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java

@@ -211,7 +211,7 @@ public class MusicGroupController extends BaseController {
         musicGroupQuit.setReasonEnum(reasonEnum);
 		musicGroupQuit.setStatus(ApprovalStatus.PROCESSING);
         musicGroupQuit.setOperatorId(userId);
-        return succeed(musicGroupService.applyQuitMusicGroup(null, musicGroupQuit));
+        return succeed(musicGroupService.applyQuitMusicGroup(null, musicGroupQuit,"STUDENT"));
     }
 
     @ApiOperation(value = "取消退团申请")

+ 4 - 0
mec-util/src/main/java/com/ym/mec/util/date/DateUtil.java

@@ -946,6 +946,10 @@ public class DateUtil {
 		return df.format(date);
 	}
 
+    public static String dateTimeToString(Date date) {
+        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        return df.format(date);
+    }
 	/**
 	 * 时间转字符串
 	 * @param date

+ 83 - 0
mec-web/src/main/java/com/ym/mec/web/controller/SchoolMessageController.java

@@ -0,0 +1,83 @@
+package com.ym.mec.web.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.AppVersionInfoDao;
+import com.ym.mec.biz.dal.dto.SysMessageDto;
+import com.ym.mec.biz.dal.entity.AppVersionInfo;
+import com.ym.mec.biz.dal.enums.MessageSendMode;
+import com.ym.mec.biz.dal.page.SysMessageQueryInfo;
+import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@Api(tags = "消息服务")
+@RequestMapping("schoolMessage")
+public class SchoolMessageController extends BaseController {
+
+    @Autowired
+    private SysMessageService sysMessageService;
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @Autowired
+    private AppVersionInfoDao appVersionInfoDao;
+
+    @ApiOperation("获取所有消息列表")
+    @GetMapping(value = "list")
+    public Object list(SysMessageQueryInfo queryInfo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+
+        queryInfo.setUserId(sysUserFeignService.queryUserInfo().getId());
+        queryInfo.setType(3);
+        queryInfo.setJpushType("SCHOOL");
+        PageInfo<SysMessageDto> pageInfo = sysMessageService.queryListPage(queryInfo);
+        return succeed(pageInfo);
+    }
+
+    @ApiOperation("获取消息分类类型")
+    @GetMapping(value = "typeList")
+    public Object typeList(String memo){
+
+        return succeed(JSON.parseArray("[{\"value\":\"全部消息\",\"key\":\"ALL\"}," +
+                "{\"value\":\"老师信息\",\"key\":\"TEACHER\"}," +
+                "{\"value\":\"学员信息\",\"key\":\"STUDENT\"}," +
+                "{\"value\":\"系统消息\",\"key\":\"SYSTEM\"},"));
+    }
+
+    @ApiOperation("设置已读")
+    @PostMapping("setRead")
+    public Object setRead(Long id) {
+        int status = 1;
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        return sysMessageService.updateOneStatus(id, status) > 0 ? succeed() : failed();
+    }
+
+    @ApiOperation(value = "查询用户未读消息条数")
+    @GetMapping("/queryCountOfUnread")
+    public Object queryCountOfUnread() {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        return succeed(sysMessageService.queryCountOfUnread(null, sysUser.getId(),"SCHOOL", null));
+    }
+}