Selaa lähdekoodia

Merge branch 'saas' of http://git.dayaedu.com/yonge/mec into saas_220228

yonge 3 vuotta sitten
vanhempi
commit
d79694a64f
20 muutettua tiedostoa jossa 336 lisäystä ja 188 poistoa
  1. 40 6
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherServeDto.java
  2. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java
  3. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentExercisesSituationQueryInfo.java
  4. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysExamSongQueryInfo.java
  5. 0 3
      mec-biz/src/main/java/com/ym/mec/biz/service/ExportService.java
  6. 2 32
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java
  7. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesMessageServiceImpl.java
  8. 24 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java
  9. 1 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  10. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java
  11. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentExtracurricularExercisesSituationServiceImpl.java
  12. 28 18
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreAccompanimentServiceImpl.java
  13. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  14. 16 13
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  15. 6 0
      mec-biz/src/main/resources/config/mybatis/SysMusicScoreAccompanimentMapper.xml
  16. 17 13
      mec-im/src/main/java/com/ym/controller/RoomController.java
  17. 18 5
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/SysMusicScoreAccompanimentController.java
  18. 43 6
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  19. 3 2
      mec-web/src/main/java/com/ym/mec/web/controller/education/EduSendNoticeController.java
  20. 98 78
      mec-web/src/main/resources/logback-spring.xml

+ 40 - 6
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherServeDto.java

@@ -24,8 +24,12 @@ public class TeacherServeDto {
 
     private String organName;
 
+    @ApiModelProperty(value = "作业次数(节)", required = false)
     private int homeworkNum;
 
+    @ApiModelProperty(value = "作业次数(人)", required = false)
+    private int homeworkStuNum;
+
     private int exerciseNum;
 
     private int unDone;
@@ -38,10 +42,10 @@ public class TeacherServeDto {
     private JobNatureEnum jobNature;
 
     /** 预期训练次数 */
-    private Integer expectExercisesNum;
+    private int expectExercisesNum;
 
     /** 实际训练次数 */
-    private Integer actualExercisesNum;
+    private int actualExercisesNum;
 
     /** 提交训练次数 */
     private Integer exercisesReplyNum;
@@ -52,9 +56,39 @@ public class TeacherServeDto {
     /** 及时训练评价次数 */
     private Integer exercisesMessageTimelyNum;
 
+    /** 点评率 */
+    private String exercisesMessageRate;
+
+    /** 及时评价率 */
+    private String exercisesMessageTimelyRate;
+
     @ApiModelProperty(value = "提交率")
     private String submitRate;
 
+    public String getExercisesMessageTimelyRate() {
+        return exercisesMessageTimelyRate;
+    }
+
+    public void setExercisesMessageTimelyRate(String exercisesMessageTimelyRate) {
+        this.exercisesMessageTimelyRate = exercisesMessageTimelyRate;
+    }
+
+    public int getHomeworkStuNum() {
+        return homeworkStuNum;
+    }
+
+    public void setHomeworkStuNum(int homeworkStuNum) {
+        this.homeworkStuNum = homeworkStuNum;
+    }
+
+    public String getExercisesMessageRate() {
+        return exercisesMessageRate;
+    }
+
+    public void setExercisesMessageRate(String exercisesMessageRate) {
+        this.exercisesMessageRate = exercisesMessageRate;
+    }
+
     public String getSubmitRate() {
         return submitRate;
     }
@@ -63,19 +97,19 @@ public class TeacherServeDto {
         this.submitRate = submitRate;
     }
 
-    public Integer getExpectExercisesNum() {
+    public int getExpectExercisesNum() {
         return expectExercisesNum;
     }
 
-    public void setExpectExercisesNum(Integer expectExercisesNum) {
+    public void setExpectExercisesNum(int expectExercisesNum) {
         this.expectExercisesNum = expectExercisesNum;
     }
 
-    public Integer getActualExercisesNum() {
+    public int getActualExercisesNum() {
         return actualExercisesNum;
     }
 
-    public void setActualExercisesNum(Integer actualExercisesNum) {
+    public void setActualExercisesNum(int actualExercisesNum) {
         this.actualExercisesNum = actualExercisesNum;
     }
 

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

@@ -188,8 +188,10 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     CHILDREN_DAY_NOTICE_PUSH("CHILDREN_DAY_NOTICE_PUSH", "技能评测考级报名推送"),
     CHILDREN_DAY_NOTICE_MSG("CHILDREN_DAY_NOTICE_MSG", "技能评测考级报名短信"),
     NO_BUY_CLOUD_TEACHER_MSG("NO_BUY_CLOUD_TEACHER_MSG", "未购买买团练宝短信"),
+
     OA_NOTICE_PUSH("OA_NOTICE_PUSH", "待审批提醒"),
     OA_CC_NOTICE_PUSH("OA_CC_NOTICE_PUSH", "审批抄送提醒"),
+    OA_END_NOTICE_PUSH("OA_PASS_NOTICE_PUSH", "审批结束提醒"),
 
     //团练宝
     TRAIN_NO_RANK_STUDENT_PUSH("TRAIN_NO_RANK_STUDENT_PUSH", "团练宝训练提醒"),

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentExercisesSituationQueryInfo.java

@@ -13,6 +13,8 @@ public class StudentExercisesSituationQueryInfo extends QueryInfo {
 
     private String organId;
 
+    private String organIdList;
+
     @ApiModelProperty(value = "周一日期")
     private java.util.Date monday;
 
@@ -51,6 +53,15 @@ public class StudentExercisesSituationQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "服务是否异常")
     private Boolean serviceIsError;
 
+    public String getOrganIdList() {
+        return organIdList;
+    }
+
+    public void setOrganIdList(String organIdList) {
+        this.organIdList = organIdList;
+        this.organId = organIdList;
+    }
+
     public Boolean getServiceIsError() {
         return serviceIsError;
     }
@@ -104,6 +115,7 @@ public class StudentExercisesSituationQueryInfo extends QueryInfo {
     }
 
     public void setOrganId(String organId) {
+        this.organIdList = organIdList;
         this.organId = organId;
     }
 

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysExamSongQueryInfo.java

@@ -19,6 +19,10 @@ public class SysExamSongQueryInfo extends QueryInfo {
 
     @ApiModelProperty(value = "曲库分类",required = true)
     private String categoriesId;
+    
+    private String filterCategoriesIds;
+    
+    private String categoriesIds;
 
     @ApiModelProperty(value = "是否收费",required = true)
     private Integer rankType;
@@ -142,4 +146,20 @@ public class SysExamSongQueryInfo extends QueryInfo {
     public void setType(String type) {
         this.type = type;
     }
+
+	public String getFilterCategoriesIds() {
+		return filterCategoriesIds;
+	}
+
+	public void setFilterCategoriesIds(String filterCategoriesIds) {
+		this.filterCategoriesIds = filterCategoriesIds;
+	}
+
+	public String getCategoriesIds() {
+		return categoriesIds;
+	}
+
+	public void setCategoriesIds(String categoriesIds) {
+		this.categoriesIds = categoriesIds;
+	}
 }

+ 0 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/ExportService.java

@@ -267,9 +267,6 @@ public interface ExportService {
     //订单列表导出
     HttpResponseResult orderList(Map<String, Object> info,List<String> headColumns);
 
-    //终课表列表导出
-    HttpResponseResult superFindCourseSchedules(Map<String, Object> info);
-
     //保存下载记录
     ManagerDownload saveManagerDownload(ExportTypeEnum exportTypeEnum, Integer userId);
 

+ 2 - 32
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -169,6 +169,8 @@ public class ExportServiceImpl implements ExportService {
     private MusicGroupService musicGroupService;
     @Autowired
     private SysUserCashAccountLogService sysUserCashAccountLogService;
+    @Autowired
+    private SysTenantConfigService sysTenantConfigService;
 
     @Value("${spring.profiles.active:dev}")
     private String profiles;
@@ -1529,38 +1531,6 @@ public class ExportServiceImpl implements ExportService {
         return succeed;
     }
 
-    //终课表列表导出
-    @Override
-    public HttpResponseResult superFindCourseSchedules(Map<String, Object> info){
-        EndCourseScheduleQueryInfo queryInfo = JSONObject.parseObject(JSONObject.toJSONString(info),EndCourseScheduleQueryInfo.class);
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            throw new BizException("用户信息获取失败");
-        }
-        queryInfo.setOrganIdList(organizationService.getEmployeeOrgan(sysUser.getId(),queryInfo.getOrganIdList(),sysUser.getIsSuperAdmin()));
-        Map<String, Object> params = new HashMap<>();
-        MapUtil.populateMap(params, queryInfo);
-        int count = scheduleService.endCountCourseSchedules(params);
-        if (count <= 0) {
-            return BaseController.failed("没有可导出的数据");
-        }
-        if (count > 50000) {
-            return BaseController.failed("数据集太大,不能导出.最大数据集不能超过50000");
-        }
-        ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.COURSE_SCHEDULE,sysUser.getId());
-        ExecutorService executor = Executors.newCachedThreadPool();
-        CompletableFuture.runAsync(()->{
-            try {
-                this.superFindCourseSchedules(queryInfo, managerDownload);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        },executor);
-        HttpResponseResult<Object> succeed = BaseController.succeed();
-        succeed.setMsg(managerDownload.getName() + "导出申请已提交,请到【报表中心-下载列表查看】");
-        return succeed;
-    }
-
     //保存下载记录
     @Override
     public ManagerDownload saveManagerDownload(ExportTypeEnum exportTypeEnum, Integer userId){

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

@@ -71,7 +71,7 @@ public class ExtracurricularExercisesMessageServiceImpl extends BaseServiceImpl<
 				boolean change=false;
 				if(!Integer.valueOf(1).equals(extracurricularExercisesReply.getIsRepliedTimely())&&Objects.nonNull(extracurricularExercisesReply.getSubmitTime())){
 					int hours = DateUtil.hoursBetween(extracurricularExercisesReply.getSubmitTime(), new Date());
-					if(hours>=0&&hours<=12){
+					if(hours>=0&&hours<=24){
 						extracurricularExercisesReply.setIsRepliedTimely(1);
 						change=true;
 					}

+ 24 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -43,6 +43,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.io.Serializable;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.function.BiConsumer;
 import java.util.stream.Collectors;
 
@@ -81,8 +82,12 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
     public static final String LIVE_SPEAKER_INFO = "IM:LIVE_SPEAKER_INFO:" + USER_ID;
     //用户对应的直播间Uid
     public static final String LIVE_USER_ROOM = "IM:LIVE_ROOM_USER:" + USER_ID;
+    //记录人员最后变更的状态消息时间
+    public static final String LIVE_USER_STATE_TIME = "IM:LIVE_USER_STATE_TIME:" + USER_ID;
     //房间点赞数
     public static final String LIVE_ROOM_LIKE = "IM:LIVE_ROOM_LIKE:" + ROOM_UID;
+    //直播提前开始时间
+    public static final int PRE_LIVE_TIME_MINUTE = 30;
 
     /**
      * 进入直播间检查数据
@@ -111,8 +116,8 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         optional.filter(r -> r.getRoomState() != 1).orElseThrow(() -> new BizException("直播间不存在"));
         ImLiveBroadcastRoomVo room = optional.get();
         if (room.getLiveState() == 0) {
-            throw new BizException("直播未开始,直播开启的时间是 "
-                    + DateUtil.format(room.getLiveStartTime(), DateUtil.EXPANDED_DATE_TIME_FORMAT));
+            Date liveStartTime = DateUtil.addMinutes(room.getLiveStartTime(), -PRE_LIVE_TIME_MINUTE);
+            throw new BizException(DateUtil.format(liveStartTime, "yyyy年MM月dd日 HH点mm分") + " 可进入直播间准备");
         }
         if (room.getLiveState() == 2) {
             throw new BizException("直播已结束!");
@@ -441,8 +446,21 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
                 return;
             }
             Date now = new Date();
+            //获取当前用户状态变更的时间
+            long userStateTime = Optional.ofNullable(user.getTime()).orElse(now.getTime());
+            String userid = user.getUserid();
+            RBucket<Long> userStateTimeCache = redissonClient.getBucket(LIVE_USER_STATE_TIME.replace(USER_ID, userid));
+            if (userStateTimeCache.isExists()) {
+                //缓存的时间比当前传入时间大则放弃这条数据
+                long cacheTime = userStateTimeCache.get();
+                if (cacheTime > userStateTime) {
+                    return;
+                }
+            }
+            //将最新的时间写入缓存
+            userStateTimeCache.set(userStateTime,5L, TimeUnit.MINUTES);
             //查询主讲人userId,若是主讲人
-            RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, user.getUserid()));
+            RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, userid));
             if (speakerCache.isExists()) {
                 RoomSpeakerInfo speakerInfo = speakerCache.get();
                 //主讲人进入房间
@@ -464,12 +482,12 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
                 return;
             }
             //获取当前用户所在房间的uid
-            RBucket<String> userRoom = redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, user.getUserid()));
+            RBucket<String> userRoom = redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, userid));
             if (!userRoom.isExists()) {
                 return;
             }
             String roomUid = userRoom.get();
-            Integer userId = Integer.valueOf(user.getUserid());
+            Integer userId = Integer.valueOf(userid);
 
             //从房间累计用户信息中查询该用户的信息
             RMap<Integer, RoomUserInfoVo> roomTotalUser = redissonClient.getMap(LIVE_ROOM_TOTAL_USER_LIST.replace(ROOM_UID, roomUid));
@@ -627,7 +645,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
      */
     public void createLiveRoom() {
         Date now = new Date();
-        Date endTime = DateUtil.addMinutes(now, 30);
+        Date endTime = DateUtil.addMinutes(now, PRE_LIVE_TIME_MINUTE);
         List<ImLiveBroadcastRoom> list = this.list(new WrapperUtil<ImLiveBroadcastRoom>()
                 .hasEq("live_state_", 0)
                 .hasEq("room_state_", 0)

+ 1 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -4072,10 +4072,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             registerPayDto.setNewCourse(courseSettings);
             for (StudentRegistration studentRegistration : studentRegistrationList) {
                 registerPayDto.setRegisterId(studentRegistration.getId().intValue());
-                HttpResponseResult result = this.pay(registerPayDto);
-                if (result.getCode() != 200) {
-                    return result;
-                }
+                this.pay(registerPayDto);
             }
         }
 

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

@@ -327,7 +327,7 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
         if (byStudentAndCourseHomewok.getIsReplied() == YesOrNoEnum.YES && Integer.valueOf(1).equals(byStudentAndCourseHomewok.getIsRepliedTimely())) {
             return true;
         }
-        if (hours >= 0 && hours <= 12) {
+        if (hours >= 0 && hours <= 24) {
             byStudentAndCourseHomewok.setIsRepliedTimely(1);
         }
         CourseHomework byTeacherAndCourseHomewok = courseHomeworkDao.findByTeacherAndCourseHomewok(courseHomeworkId, teacherId);

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentExtracurricularExercisesSituationServiceImpl.java

@@ -212,6 +212,7 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
 			List<StudentExtracurricularExercisesSituation> teacherServeWithDate = studentExtracurricularExercisesSituationDao.findTeacherServeWithDate(queryInfo.getMonday(), queryInfo.getSunday(), teacherIds, null);
 			Map<Integer, List<StudentExtracurricularExercisesSituation>> teacherServeMap = teacherServeWithDate.stream().collect(Collectors.groupingBy(StudentExtracurricularExercisesSituation::getTeacherId));
 			for (TeacherServeDto teacherServeDto : dataList) {
+				teacherServeDto.setHomeworkStuNum(teacherServeDto.getExpectExercisesNum() - teacherServeDto.getExerciseNum());
 				List<StudentExtracurricularExercisesSituation> tss = teacherServeMap.get(teacherServeDto.getTeacherId());
 				Set<Long> courseIds = new HashSet<>();
 				for (StudentExtracurricularExercisesSituation ts : tss) {

+ 28 - 18
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreAccompanimentServiceImpl.java

@@ -110,28 +110,38 @@ public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Integ
 
     @Override
     public PageInfo<SysMusicScoreAccompaniment> queryScorePage(SysExamSongQueryInfo queryInfo) {
-		if(queryInfo.getCategoriesId() != null){
+		if(queryInfo.getCategoriesIds() != null){
 			List<Integer> categoriesIdList = new ArrayList<>();
-			MusicScoreQueryInfo musicScoreQueryInfo = new MusicScoreQueryInfo();
-			Integer categoriesId = null;
-			if(StringUtils.isNotEmpty(queryInfo.getCategoriesId())){
-				categoriesId = Integer.parseInt(queryInfo.getCategoriesId());
+			String[] categoriesIds = queryInfo.getCategoriesIds().split(",");
+
+			for(String fc : categoriesIds){
+				SysMusicScoreCategories sysMusicScoreCategories = sysMusicScoreCategoriesService.get(Integer.parseInt(fc));
+				
+				if(sysMusicScoreCategories == null){
+					throw new BizException("分类找不到");
+				}
+				categoriesIdList.add(Integer.parseInt(fc));
+				sysMusicScoreCategories = sysMusicScoreCategoriesService.getChildTree(sysMusicScoreCategories);
+				getAllCategoryIdList(categoriesIdList, sysMusicScoreCategories.getSysMusicScoreCategoriesList());
 			}
-			musicScoreQueryInfo.setParentId(categoriesId);
-			musicScoreQueryInfo.setOrganId(queryInfo.getOrganId());
-			musicScoreQueryInfo.setEnable(queryInfo.getEnable());
-			//List<SysMusicScoreCategories> scoreCategories = sysMusicScoreCategoriesService.queryTree(musicScoreQueryInfo);
-			
-			SysMusicScoreCategories sysMusicScoreCategories = sysMusicScoreCategoriesService.get(categoriesId);
+			queryInfo.setCategoriesIds(categoriesIdList.stream().map(String :: valueOf).collect(Collectors.joining(",")));
+		}
+		if(StringUtils.isNotBlank(queryInfo.getFilterCategoriesIds())){
+			String[] filterCategoriesIds = queryInfo.getFilterCategoriesIds().split(",");
+
+			List<Integer> filterCategoriesIdList = new ArrayList<>();
 			
-			if(sysMusicScoreCategories == null){
-				throw new BizException("分类找不到");
+			for(String fc : filterCategoriesIds){
+				SysMusicScoreCategories sysMusicScoreCategories = sysMusicScoreCategoriesService.get(Integer.parseInt(fc));
+				
+				if(sysMusicScoreCategories == null){
+					throw new BizException("分类找不到");
+				}
+				filterCategoriesIdList.add(Integer.parseInt(fc));
+				sysMusicScoreCategories = sysMusicScoreCategoriesService.getChildTree(sysMusicScoreCategories);
+				getAllCategoryIdList(filterCategoriesIdList, sysMusicScoreCategories.getSysMusicScoreCategoriesList());
 			}
-			categoriesIdList.add(categoriesId);
-			sysMusicScoreCategories = sysMusicScoreCategoriesService.getChildTree(sysMusicScoreCategories);
-			getAllCategoryIdList(categoriesIdList, sysMusicScoreCategories.getSysMusicScoreCategoriesList());
-			
-			queryInfo.setCategoriesIdList(categoriesIdList);
+			queryInfo.setFilterCategoriesIds(filterCategoriesIdList.stream().map(String :: valueOf).collect(Collectors.joining(",")));
 		}
 		return this.queryPage(queryInfo);
     }

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -4523,6 +4523,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
             for (StudentPaymentOrder studentPaymentOrder : studentPaymentOrders) {
                 //生成账户资金明细
                 if (studentPaymentOrder.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
+                    if(Objects.equals("关闭订单,实际支付成功,退到用户余额",studentPaymentOrder.getMemo())){
+                        continue;
+                    }
                     sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getExpectAmount());
                     SysUserCashAccount sysUserCashAccount = sysUserCashAccountService.get(studentPaymentOrder.getUserId());
                     SysUserCashAccountDetail sysUserIncomeCashAccountDetail = new SysUserCashAccountDetail();

+ 16 - 13
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -3952,7 +3952,7 @@
         FROM course_schedule cs
         LEFT JOIN course_schedule_review csr ON csr.course_schedule_id_ = cs.id_
         LEFT JOIN teacher_attendance ta ON ta.course_schedule_id_ = cs.id_
-        LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_ AND sa.status_ = 'NORMAL'
+        LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_ AND sa.status_ IN ('NORMAL','LATE')
         LEFT JOIN class_group cg ON cg.id_ = cs.class_group_id_
         LEFT JOIN school s ON s.id_ = cs.schoole_id_
         <include refid="queryCourseEvaluateSql"/>
@@ -3964,13 +3964,13 @@
         SELECT COUNT(DISTINCT cs.id_)
         FROM course_schedule cs
         LEFT JOIN teacher_attendance ta ON ta.course_schedule_id_ = cs.id_
-        LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_ AND sa.status_ = 'NORMAL'
+        LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_ AND sa.status_ IN ('NORMAL','LATE')
         <include refid="queryCourseEvaluateSql"/>
     </select>
     <select id="countStudyStandard" resultType="java.lang.Integer">
         SELECT COUNT(sa.user_id_)
         FROM student_attendance sa
-        WHERE sa.id_ IS NOT NULL AND sa.course_schedule_id_ = #{courseScheduleId} AND sa.status_ = 'NORMAL'
+        WHERE sa.id_ IS NOT NULL AND sa.course_schedule_id_ = #{courseScheduleId} AND sa.status_ IN ('NORMAL','LATE')
     </select>
     <resultMap id="StudentStandardDto" type="com.ym.mec.biz.dal.dto.StudentStandardDto">
         <result property="courseScheduleId" column="course_schedule_id_"/>
@@ -3990,15 +3990,25 @@
         LEFT JOIN student s ON s.user_id_ = sa.user_id_
         LEFT JOIN `subject` sb ON sb.id_ = s.subject_id_list_
         LEFT JOIN sys_user su ON su.id_ = s.user_id_
-        WHERE sa.id_ IS NOT NULL AND sa.course_schedule_id_ = #{courseScheduleId} AND sa.status_ = 'NORMAL'
+        WHERE sa.id_ IS NOT NULL AND sa.course_schedule_id_ = #{courseScheduleId} AND sa.status_ IN ('NORMAL','LATE')
         <include refid="global.limit"/>
     </select>
+    <sql id="countStudyStandardWaitVisitSql">
+        WHERE csts.user_id_ = #{teacherId} AND cs.evaluate_flag_ = 1 AND sa.qualified_flag_ = 0
+        AND sv.id_ IS NULL AND sa.status_ IN ('NORMAL','LATE')
+        <if test="startDate != null and startDate != ''">
+            AND cs.class_date_ >= #{startDate}
+        </if>
+        <if test="endDate != null and endDate != ''">
+            AND cs.class_date_ &lt;= #{endDate}
+        </if>
+    </sql>
     <select id="countStudyStandardWaitVisit" resultType="java.lang.Integer">
         SELECT COUNT(sa.user_id_) FROM course_schedule cs
         LEFT JOIN course_schedule_teacher_salary csts ON csts.course_schedule_id_ = cs.id_
         LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = csts.course_schedule_id_
         LEFT JOIN student_visit sv ON sv.object_id_ = sa.id_ AND sv.purpose_ = '教学内容未达标'
-        WHERE csts.user_id_ = #{teacherId} AND cs.evaluate_flag_ = 1 AND sa.qualified_flag_ = 0 AND sv.id_ IS NULL
+        <include refid="countStudyStandardWaitVisitSql"/>
     </select>
     <select id="queryStudyStandardWaitVisit" resultMap="StudentStandardDto">
         SELECT su.avatar_,s.user_id_,su.username_,cs.class_date_,sb.name_ subject_name_,
@@ -4011,14 +4021,7 @@
         LEFT JOIN student s ON s.user_id_ = sa.user_id_
         LEFT JOIN `subject` sb ON sb.id_ = s.subject_id_list_
         LEFT JOIN sys_user su ON su.id_ = s.user_id_
-        WHERE csts.user_id_ = #{teacherId} AND cs.evaluate_flag_ = 1 AND sa.qualified_flag_ = 0 AND sv.id_ IS NULL
-        AND sa.status_ = 'NORMAL'
-        <if test="startDate != null and startDate != ''">
-            AND cs.class_date_ >= #{startDate}
-        </if>
-        <if test="endDate != null and endDate != ''">
-            AND cs.class_date_ &lt;= #{endDate}
-        </if>
+        <include refid="countStudyStandardWaitVisitSql"/>
         ORDER BY cs.class_date_ DESC,cs.start_class_time_ DESC
         <include refid="global.limit"/>
     </select>

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

@@ -234,6 +234,12 @@
 					#{item}
 				</foreach>
 			</if>
+			<if test="filterCategoriesIds != null and filterCategoriesIds != ''">
+				AND find_in_set(sesc.id_,#{filterCategoriesIds}) = 0
+			</if>
+			<if test="categoriesIds != null and categoriesIds != ''">
+				AND find_in_set(sesc.id_,#{categoriesIds}) > 0
+			</if>
 			<if test="parentId != null">
 				AND sesc.parent_id_ = #{parentId}
 			</if>

+ 17 - 13
mec-im/src/main/java/com/ym/controller/RoomController.java

@@ -84,19 +84,23 @@ public class RoomController{
 
     @RequestMapping(value = "/statusSync")
     public void statusSync(@RequestBody String body) throws Exception {
-        ChannelStateNotify notify = JSONObject.parseObject(body, ChannelStateNotify.class);
-        log.info("statusSyncParam: {}",JSONObject.toJSON(notify));
-        String roomId = notify.getChannelId();
-        String userId = notify.getUserId();
-        switch (notify.getEvent()){
-            case 11:
-                //成员加入
-                roomService.joinRoomSuccess(roomId, userId,null);
-                break;
-            case 12:
-                //成员退出
-                roomService.leaveRoomSuccess(roomId, userId,null);
-                break;
+        try {
+            ChannelStateNotify notify = JSONObject.parseObject(body, ChannelStateNotify.class);
+            log.info("statusSyncParam: {}",JSONObject.toJSON(notify));
+            String roomId = notify.getChannelId();
+            String userId = notify.getUserId();
+            switch (notify.getEvent()){
+                case 11:
+                    //成员加入
+                    roomService.joinRoomSuccess(roomId, userId,null);
+                    break;
+                case 12:
+                    //成员退出
+                    roomService.leaveRoomSuccess(roomId, userId,null);
+                    break;
+            }
+        }catch (Exception e){
+            log.error(e.getLocalizedMessage());
         }
     }
 

+ 18 - 5
mec-teacher/src/main/java/com/ym/mec/teacher/controller/SysMusicScoreAccompanimentController.java

@@ -11,14 +11,17 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.entity.SysMusicScoreAccompaniment;
 import com.ym.mec.biz.dal.entity.Teacher;
+import com.ym.mec.biz.dal.entity.TenantConfig;
 import com.ym.mec.biz.dal.enums.ClientTypeEnum;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
 import com.ym.mec.biz.service.SysMusicScoreAccompanimentService;
 import com.ym.mec.biz.service.TeacherService;
+import com.ym.mec.biz.service.TenantConfigService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
@@ -34,6 +37,9 @@ public class SysMusicScoreAccompanimentController extends BaseController {
     private SysUserFeignService sysUserFeignService;
     @Autowired
     private TeacherService teacherService;
+    
+    @Autowired
+    private TenantConfigService tenantConfigService;
 
     @ApiOperation(value = "修改")
     @PostMapping("/update")
@@ -93,12 +99,19 @@ public class SysMusicScoreAccompanimentController extends BaseController {
             queryInfo.setOrganId(queryInfo.getOrganId() + "," + teacher.getFlowOrganRange());
         }
         if(queryInfo.getClientType() == null){
-            queryInfo.setClientType(ClientTypeEnum.NETWORK_ROOM);
+            queryInfo.setClientType(ClientTypeEnum.SMART_PRACTICE);
         }
         queryInfo.setCreateUserId(sysUser.getId());
         queryInfo.setShowFlag(1);
         queryInfo.setEnable(true);
         
+        TenantConfig tenantConfig = tenantConfigService.getOne(new QueryWrapper<TenantConfig>().eq("tenant_id_", sysUser.getTenantId()));
+        
+        queryInfo.setCategoriesIds(tenantConfig.getTeachingMaterialId());
+        
+        //过滤合奏和考级
+        queryInfo.setFilterCategoriesIds("40,41,42");
+        
         PageInfo<SysMusicScoreAccompaniment> sysMusicScoreAccompanimentList = sysMusicScoreAccompanimentService.queryScorePage(queryInfo);
        
         String url = null,metronomeUrl = null;
@@ -107,10 +120,10 @@ public class SysMusicScoreAccompanimentController extends BaseController {
         	url = smsa.getUrl();
         	metronomeUrl = smsa.getMetronomeUrl();
         	
-        	smsa.setUrl(smsa.getMp3Url());
-        	smsa.setMetronomeUrl(smsa.getMetronomeMp3Url());
-        	smsa.setMp3Url(url);
-        	smsa.setMetronomeMp3Url(metronomeUrl);
+        	smsa.setUrl(smsa.getMetronomeMp3Url());
+        	smsa.setMetronomeUrl(smsa.getMp3Url());
+        	smsa.setMp3Url(metronomeUrl);
+        	smsa.setMetronomeMp3Url(url);
         }
         
         return succeed(sysMusicScoreAccompanimentList);

+ 43 - 6
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -33,6 +33,9 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.stream.Collectors;
 
 @RequestMapping
@@ -132,6 +135,8 @@ public class ExportController extends BaseController {
     private MusicEnlightenmentQuestionnaireService musicEnlightenmentQuestionnaireService;
     @Autowired
     private MusicGroupService musicGroupService;
+    @Autowired
+    private SysTenantConfigService sysTenantConfigService;
 
     @ApiOperation(value = "获取可导出字段")
     @RequestMapping("export/getFields")
@@ -1951,9 +1956,6 @@ public class ExportController extends BaseController {
     @GetMapping("export/superFindCourseSchedules")
     @PreAuthorize("@pcs.hasPermissions('export/superFindCourseSchedules')")
     public HttpResponseResult superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo) throws IOException {
-        queryInfo.setPage(1);
-        queryInfo.setRows(49999);
-        queryInfo.setIsExport(true);
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             throw new BizException("用户信息获取失败");
@@ -1961,6 +1963,16 @@ public class ExportController extends BaseController {
         queryInfo.setOrganIdList(organizationService.getEmployeeOrgan(sysUser.getId(),queryInfo.getOrganIdList(),sysUser.getIsSuperAdmin()));
         Map<String, Object> params = new HashMap<>();
         MapUtil.populateMap(params, queryInfo);
+        Integer tenantId = TenantContextHolder.getTenantId();
+        if(Objects.equals("COURSE_TIME_ERROR",queryInfo.getSearchType())){
+            String courseStartTimeError = sysTenantConfigService.getTenantConfigValue(SysConfigService.COURSE_START_TIME_ERROR, tenantId);
+            String courseEndTimeError = sysTenantConfigService.getTenantConfigValue(SysConfigService.COURSE_END_TIME_ERROR, tenantId);
+            if(StringUtils.isEmpty(courseStartTimeError) || StringUtils.isEmpty(courseEndTimeError)){
+                return failed("没有可导出的数据");
+            }
+            params.put("courseStartTimeError",courseStartTimeError);
+            params.put("courseEndTimeError",courseEndTimeError);
+        }
         int count = scheduleService.endCountCourseSchedules(params);
         if (count <= 0) {
             return failed("没有可导出的数据");
@@ -1969,7 +1981,20 @@ public class ExportController extends BaseController {
             return failed("数据集太大,不能导出.最大数据集不能超过50000");
         }
         ManagerDownload managerDownload = exportService.saveManagerDownload(ExportTypeEnum.COURSE_SCHEDULE,sysUser.getId());
-        exportService.superFindCourseSchedules(queryInfo, managerDownload);
+        ExecutorService executor = Executors.newCachedThreadPool();
+        CompletableFuture.runAsync(()->{
+            try {
+                TenantContextHolder.setTenantId(tenantId);
+                queryInfo.setPage(1);
+                queryInfo.setRows(49999);
+                queryInfo.setIsExport(true);
+                exportService.superFindCourseSchedules(queryInfo, managerDownload);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }finally {
+                TenantContextHolder.clearTenantId();
+            }
+        },executor);
         HttpResponseResult<Object> succeed = succeed();
         succeed.setMsg(managerDownload.getName() + "导出申请已提交,请到【报表中心-下载列表查看】");
         return succeed;
@@ -2265,13 +2290,25 @@ public class ExportController extends BaseController {
                 BigDecimal submitRate = new BigDecimal(row.getExercisesReplyNum()).divide(new BigDecimal(row.getActualExercisesNum()), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP).multiply(oneHundred);
                 row.setSubmitRate(submitRate+"%");
             }
+            if(row.getExercisesReplyNum() <= 0){
+                row.setExercisesMessageRate(zero.toString()+"%");
+            }else {
+                BigDecimal exercisesMessageRate = new BigDecimal(row.getExercisesMessageNum()).divide(new BigDecimal(row.getExercisesReplyNum()), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP).multiply(oneHundred);
+                row.setExercisesMessageRate(exercisesMessageRate+"%");
+            }
+            if(row.getExercisesReplyNum() <= 0){
+                row.setExercisesMessageTimelyRate(zero.toString()+"%");
+            }else {
+                BigDecimal exercisesMessageTimelyRate = new BigDecimal(row.getExercisesMessageTimelyNum()).divide(new BigDecimal(row.getExercisesReplyNum()), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP).multiply(oneHundred);
+                row.setExercisesMessageTimelyRate(exercisesMessageTimelyRate+"%");
+            }
         }
 
         try {
-            String[] header = {"分部", "老师编号", "老师姓名", "服务周期", "课后训练(节)", "课外训练(人)", "布置次数", "提交次数",
+            String[] header = {"分部", "老师编号", "老师姓名", "服务周期", "课后训练(节)", "课后训练(人)", "课外训练(人)", "预计训练布置(人次)", "实际训练布置(人次)", "提交次数", "评价次数", "及时评价次数", "及时评价率", "作业点评率",
                     "训练布置", "训练点评", "训练提交率",
                     "提醒时间", "操作人"};
-            String[] body = {"organName", "teacherId", "teacherName", "dateRange", "homeworkNum", "exerciseNum", "actualExercisesNum", "exercisesReplyNum",
+            String[] body = {"organName", "teacherId", "teacherName", "dateRange", "homeworkNum", "homeworkStuNum", "exerciseNum", "expectExercisesNum", "actualExercisesNum", "exercisesReplyNum","exercisesMessageNum","exercisesMessageTimelyNum","exercisesMessageTimelyRate","exercisesMessageRate",
                     "expectExercisesNum>actualExercisesNum?'异常':'正常'", "exercisesReplyNum>exercisesMessageNum?'异常':'正常'", "submitRate",
                     "remindDate", "operatorName"};
             HSSFWorkbook workbook = POIUtil.exportExcel(header, body, result.getRows());

+ 3 - 2
mec-web/src/main/java/com/ym/mec/web/controller/education/EduSendNoticeController.java

@@ -39,8 +39,9 @@ public class EduSendNoticeController extends BaseController {
         for (Integer userId : pushInfo.getUserIds()) {
             userMap.put(userId, userId.toString());
         }
-        String baseApiUrl = sysConfigDao.findConfigValue(SysConfigService.EDU_TEACHER_BASE_URL);
-        String workOrderUrl = "8?" + baseApiUrl + pushInfo.getWorkOrderUrl();
+//        String baseApiUrl = sysConfigDao.findConfigValue(SysConfigService.EDU_TEACHER_BASE_URL);
+//        String workOrderUrl = "8?" + baseApiUrl + pushInfo.getWorkOrderUrl();
+        String workOrderUrl = pushInfo.getWorkOrderUrl();
         sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, pushInfo.getMessageType(), userMap, null, 0, workOrderUrl, "SYSTEM");
         return succeed();
     }

+ 98 - 78
mec-web/src/main/resources/logback-spring.xml

@@ -1,83 +1,103 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration scan="true" scanPeriod="10 seconds">
 
-	<property name="LOG_HOME" value="/mdata/logs/web-%d{yyyy-MM-dd_HH}-%i.log" />
-	<property name="CONSOLE_LOG_PATTERN"
-			  value="[%X{username} %X{ip} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}] : %msg%n" />
-
-	<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
-		<encoder charset="UTF-8">
-			<pattern>${CONSOLE_LOG_PATTERN}</pattern>
-		</encoder>
-	</appender>
-
-	<appender name="file"
-			  class="ch.qos.logback.core.rolling.RollingFileAppender">
-		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-			<FileNamePattern>${LOG_HOME}</FileNamePattern>
-			<MaxHistory>90</MaxHistory>
-			<TimeBasedFileNamingAndTriggeringPolicy
-					class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
-				<MaxFileSize>20MB</MaxFileSize>
-			</TimeBasedFileNamingAndTriggeringPolicy>
-		</rollingPolicy>
-
-		<encoder>
-			<pattern>${CONSOLE_LOG_PATTERN}</pattern>
-		</encoder>
-	</appender>
-
-	<appender name="messagefile"
-			  class="ch.qos.logback.core.rolling.RollingFileAppender">
-		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-			<FileNamePattern>/mdata/logs/web-message-%d{yyyy-MM-dd_HH}-%i.log</FileNamePattern>
-			<MaxHistory>90</MaxHistory>
-			<TimeBasedFileNamingAndTriggeringPolicy
-					class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
-				<MaxFileSize>20MB</MaxFileSize>
-			</TimeBasedFileNamingAndTriggeringPolicy>
-		</rollingPolicy>
-
-		<encoder>
-			<pattern>${CONSOLE_LOG_PATTERN}</pattern>
-		</encoder>
-	</appender>
-
-	<logger name="com.ym.mec" level="INFO" />
-
-	<logger name="com.ym.mec.thirdparty" level="INFO"
-			additivity="false">
-		<appender-ref ref="messagefile" />
-	</logger>
-
-	<!--开发环境:打印控制台 -->
-	<springProfile name="dev">
-		<root level="INFO">
-			<appender-ref ref="stdout" />
-			<appender-ref ref="file" />
-		</root>
-	</springProfile>
-
-	<springProfile name="test">
-		<root level="INFO">
-			<appender-ref ref="stdout" />
-			<appender-ref ref="file" />
-		</root>
-	</springProfile>
-
-	<springProfile name="dev_server">
-		<root level="INFO">
-			<appender-ref ref="stdout" />
-			<appender-ref ref="file" />
-		</root>
-	</springProfile>
-
-	<!--生产环境:输出到文件 -->
-	<springProfile name="prod">
-		<root level="WARN">
-			<appender-ref ref="stdout" />
-			<appender-ref ref="file" />
-		</root>
-	</springProfile>
+    <property name="LOG_HOME" value="/mdata/logs/web-%d{yyyy-MM-dd_HH}-%i.log"/>
+    <property name="CONSOLE_LOG_PATTERN"
+              value="[%X{username} %X{ip} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}] : %msg%n"/>
+
+    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder charset="UTF-8">
+            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
+        </encoder>
+    </appender>
+
+    <appender name="file"
+              class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <FileNamePattern>${LOG_HOME}</FileNamePattern>
+            <MaxHistory>90</MaxHistory>
+            <TimeBasedFileNamingAndTriggeringPolicy
+                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <MaxFileSize>20MB</MaxFileSize>
+            </TimeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+
+        <encoder>
+            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
+        </encoder>
+    </appender>
+
+    <appender name="messagefile"
+              class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <FileNamePattern>/mdata/logs/web-message-%d{yyyy-MM-dd_HH}-%i.log</FileNamePattern>
+            <MaxHistory>90</MaxHistory>
+            <TimeBasedFileNamingAndTriggeringPolicy
+                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <MaxFileSize>20MB</MaxFileSize>
+            </TimeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+
+        <encoder>
+            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
+        </encoder>
+    </appender>
+
+    <appender name="liveFile"
+              class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <FileNamePattern>/mdata/logs/web-live-%d{yyyy-MM-dd_HH}-%i.log</FileNamePattern>
+            <MaxHistory>90</MaxHistory>
+            <TimeBasedFileNamingAndTriggeringPolicy
+                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <MaxFileSize>20MB</MaxFileSize>
+            </TimeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+
+        <encoder>
+            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
+        </encoder>
+    </appender>
+
+    <logger name="com.ym.mec" level="INFO"/>
+
+    <logger name="com.ym.mec.thirdparty" level="INFO" additivity="false">
+        <appender-ref ref="messagefile"/>
+    </logger>
+
+    <!--开发环境:打印控制台 -->
+    <logger name="com.ym.mec.biz.service.impl.ImLiveBroadcastRoomServiceImpl" level="INFO" additivity="false">
+        <appender-ref ref="liveFile"/>
+    </logger>
+
+    <!--开发环境:打印控制台 -->
+    <springProfile name="dev">
+        <root level="INFO">
+            <appender-ref ref="stdout"/>
+            <appender-ref ref="file"/>
+        </root>
+    </springProfile>
+
+    <springProfile name="test">
+        <root level="INFO">
+            <appender-ref ref="stdout"/>
+            <appender-ref ref="file"/>
+        </root>
+    </springProfile>
+
+    <springProfile name="dev_server">
+        <root level="INFO">
+            <appender-ref ref="stdout"/>
+            <appender-ref ref="file"/>
+        </root>
+    </springProfile>
+
+    <!--生产环境:输出到文件 -->
+    <springProfile name="prod">
+        <root level="WARN">
+            <appender-ref ref="stdout"/>
+            <appender-ref ref="file"/>
+        </root>
+    </springProfile>
 
 </configuration>