Browse Source

Merge branch 'master' of http://git.dayaedu.com/yonge/mec into zouxuan

zouxuan 5 years ago
parent
commit
28e56c4f55
40 changed files with 534 additions and 178 deletions
  1. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  2. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleTeacherSalaryDao.java
  3. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java
  4. 24 15
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysUserCashAccountDao.java
  5. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleEndDto.java
  6. 27 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PageInfoOrder.java
  7. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentServiceDetailDto.java
  8. 61 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseSchedule.java
  9. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ImSendTypeEnum.java
  10. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentExercisesSituationQueryInfo.java
  11. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  12. 0 1
      mec-biz/src/main/java/com/ym/mec/biz/service/ExtracurricularExercisesReplyService.java
  13. 4 2
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentExtracurricularExercisesSituationService.java
  14. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysUserCashAccountService.java
  15. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  16. 5 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java
  17. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesReplyServiceImpl.java
  18. 15 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  19. 44 47
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SporadicChargeInfoImpl.java
  20. 32 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentExtracurricularExercisesSituationServiceImpl.java
  21. 22 11
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  22. 50 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserCashAccountServiceImpl.java
  23. 37 15
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  24. 10 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml
  25. 5 0
      mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesReplyMapper.xml
  26. 15 3
      mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml
  27. 11 1
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  28. 11 0
      mec-biz/src/main/resources/config/mybatis/SysUserCashAccountMapper.xml
  29. 4 6
      mec-im/src/main/java/com/ym/controller/RoomController.java
  30. 0 5
      mec-im/src/main/java/com/ym/dao/RoomMemberDao.java
  31. 0 1
      mec-im/src/main/java/com/ym/pojo/DeviceTypeEnum.java
  32. 6 16
      mec-im/src/main/java/com/ym/pojo/ReqDeviceControlData.java
  33. 5 12
      mec-im/src/main/java/com/ym/pojo/ReqUserData.java
  34. 0 2
      mec-im/src/main/java/com/ym/pojo/RoomMember.java
  35. 10 12
      mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java
  36. 1 1
      mec-im/src/main/java/com/ym/service/RoomService.java
  37. 8 0
      mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java
  38. 3 3
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  39. 19 0
      mec-web/src/main/java/com/ym/mec/web/controller/StudentExtracurricularExercisesSituationController.java
  40. 0 6
      mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

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

@@ -1312,6 +1312,20 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
                                                                @Param("endTime") Date endTime,
                                                             @Param("groupType") GroupType groupType);
 
+
+    /**
+     * @describe 统计学生在指定周期内的付费网管课数量
+     * @author Joburgess
+     * @date 2020.05.06
+     * @param studentIds:
+     * @param startTime:
+     * @param endTime:
+     * @return java.util.List<java.util.Map<java.lang.Integer,java.lang.Long>>
+     */
+    List<Map<Integer, Long>> countStudentPayPracticeCoursesWithDate(@Param("studentIds") List<Integer> studentIds,
+                                                            @Param("startTime") Date startTime,
+                                                            @Param("endTime") Date endTime);
+
     /**
      * @describe 统计学生在未来的vip课数量
      * @author Joburgess

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleTeacherSalaryDao.java

@@ -461,4 +461,13 @@ public interface CourseScheduleTeacherSalaryDao extends BaseDAO<Long, CourseSche
      */
     int countOpenConfirmSalarysWithMonth(@Param("month") String month,
 										 @Param("confirmStatus") TeacherSalaryConfirmStatus confirmStatus);
+
+    /**
+     * @describe 获取课程结算时间
+     * @author Joburgess
+     * @date 2020.05.07
+     * @param courseScheduleIds:
+     * @return java.util.List<java.util.Map<java.lang.Long,java.util.Date>>
+     */
+    List<Map<Long, String>> getCoursesSettlementTime(@Param("courseScheduleIds") List<Long> courseScheduleIds);
 }

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java

@@ -264,4 +264,11 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
      * @return
      */
     BigDecimal sumPerAccountAmount(@Param("merNo") String merNo, @Param("firstDate") Date firstDate);
+
+    /**
+     * 统计充值金额
+     * @param params
+     * @return
+     */
+    BigDecimal getChargeAmount(Map<String, Object> params);
 }

+ 24 - 15
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysUserCashAccountDao.java

@@ -4,25 +4,34 @@ import com.ym.mec.biz.dal.entity.SysUserCashAccount;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
+import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 public interface SysUserCashAccountDao extends BaseDAO<Integer, SysUserCashAccount> {
-	
-	/**
-	 * 获取行级锁
-	 * @param userId
-	 * @return
-	 */
-	SysUserCashAccount getLocked(Integer userId);
 
-	/**
-	 * @describe 根据用户编号获取现金账户信息
-	 * @author Joburgess
-	 * @date 2019/11/17
-	 * @param userIds: 用户编号列表
-	 * @return java.util.List<com.ym.mec.biz.dal.entity.SysUserCashAccount>
-	 */
-	List<SysUserCashAccount> findByUserIds(@Param("userIds") Set<Integer> userIds);
+    /**
+     * 获取行级锁
+     *
+     * @param userId
+     * @return
+     */
+    SysUserCashAccount getLocked(Integer userId);
 
+    /**
+     * @param userIds: 用户编号列表
+     * @return java.util.List<com.ym.mec.biz.dal.entity.SysUserCashAccount>
+     * @describe 根据用户编号获取现金账户信息
+     * @author Joburgess
+     * @date 2019/11/17
+     */
+    List<SysUserCashAccount> findByUserIds(@Param("userIds") Set<Integer> userIds);
+
+
+    /**
+     * 获取预收余额
+     * @return
+     */
+    BigDecimal getTotalUserBalance(Map<String, Object> params);
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleEndDto.java

@@ -39,6 +39,16 @@ public class CourseScheduleEndDto extends CourseSchedule {
 
     private String studentId;
 
+    private String settlementTime;
+
+    public String getSettlementTime() {
+        return settlementTime;
+    }
+
+    public void setSettlementTime(String settlementTime) {
+        this.settlementTime = settlementTime;
+    }
+
     public SignInStatusEnum getSignInStatusEnum() {
         return signInStatusEnum;
     }

+ 27 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PageInfoOrder.java

@@ -8,6 +8,9 @@ public class PageInfoOrder<T> extends PageInfo<T> {
 
     private BigDecimal totalExpectAmount =BigDecimal.ZERO;
     private BigDecimal totalActualAmount =BigDecimal.ZERO;
+    private BigDecimal totalAdvanceAmount = BigDecimal.ZERO;
+    private BigDecimal totalRevenueAmount = BigDecimal.ZERO;
+    private BigDecimal totalUserBalance = BigDecimal.ZERO;
 
     public PageInfoOrder() {
     }
@@ -35,4 +38,28 @@ public class PageInfoOrder<T> extends PageInfo<T> {
     public void setTotalActualAmount(BigDecimal totalActualAmount) {
         this.totalActualAmount = totalActualAmount;
     }
+
+    public BigDecimal getTotalAdvanceAmount() {
+        return totalAdvanceAmount;
+    }
+
+    public void setTotalAdvanceAmount(BigDecimal totalAdvanceAmount) {
+        this.totalAdvanceAmount = totalAdvanceAmount;
+    }
+
+    public BigDecimal getTotalRevenueAmount() {
+        return totalRevenueAmount;
+    }
+
+    public void setTotalRevenueAmount(BigDecimal totalRevenueAmount) {
+        this.totalRevenueAmount = totalRevenueAmount;
+    }
+
+    public BigDecimal getTotalUserBalance() {
+        return totalUserBalance;
+    }
+
+    public void setTotalUserBalance(BigDecimal totalUserBalance) {
+        this.totalUserBalance = totalUserBalance;
+    }
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentServiceDetailDto.java

@@ -30,6 +30,8 @@ public class StudentServiceDetailDto {
 
     private Date courseStartTime;
 
+    private Date courseEndTime;
+
     private Integer teacherId;
 
     private String teacherName;
@@ -44,6 +46,14 @@ public class StudentServiceDetailDto {
 
     private String attachments;
 
+    public Date getCourseEndTime() {
+        return courseEndTime;
+    }
+
+    public void setCourseEndTime(Date courseEndTime) {
+        this.courseEndTime = courseEndTime;
+    }
+
     public Long getStudentHomeworkId() {
         return studentHomeworkId;
     }

+ 61 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseSchedule.java

@@ -2,10 +2,7 @@ package com.ym.mec.biz.dal.entity;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.enums.CourseStatusEnum;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.TeachModeEnum;
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.common.enums.BaseEnum;
 
 import io.swagger.annotations.ApiModelProperty;
@@ -149,6 +146,66 @@ public class CourseSchedule {
 
 	private String note;
 
+	private SignInStatusEnum signInStatusEnum;
+
+	private SignOutStatusEnum signOutStatusEnum;
+
+	private Date signInTime;
+
+	private Date signOutTime;
+
+	private int isSignIn = 3;
+
+	private int isSignOut = 3;
+
+	public int getIsSignIn() {
+		return isSignIn;
+	}
+
+	public void setIsSignIn(int isSignIn) {
+		this.isSignIn = isSignIn;
+	}
+
+	public int getIsSignOut() {
+		return isSignOut;
+	}
+
+	public void setIsSignOut(int isSignOut) {
+		this.isSignOut = isSignOut;
+	}
+
+	public SignInStatusEnum getSignInStatusEnum() {
+		return signInStatusEnum;
+	}
+
+	public void setSignInStatusEnum(SignInStatusEnum signInStatusEnum) {
+		this.signInStatusEnum = signInStatusEnum;
+	}
+
+	public SignOutStatusEnum getSignOutStatusEnum() {
+		return signOutStatusEnum;
+	}
+
+	public void setSignOutStatusEnum(SignOutStatusEnum signOutStatusEnum) {
+		this.signOutStatusEnum = signOutStatusEnum;
+	}
+
+	public Date getSignInTime() {
+		return signInTime;
+	}
+
+	public void setSignInTime(Date signInTime) {
+		this.signInTime = signInTime;
+	}
+
+	public Date getSignOutTime() {
+		return signOutTime;
+	}
+
+	public void setSignOutTime(Date signOutTime) {
+		this.signOutTime = signOutTime;
+	}
+
 	public String getTeachingContent() {
 		return teachingContent;
 	}

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ImSendTypeEnum.java

@@ -8,7 +8,7 @@ import com.ym.mec.common.enums.BaseEnum;
 public enum ImSendTypeEnum implements BaseEnum<String, ImSendTypeEnum> {
 	TXT("TXT", "文本"),
 	IMG("IMG", "图片"),
-	VC("VC", "语"),
+	VC("VC", "语"),
 	FILE("FILE", "文件");
 
 	private String code;

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

@@ -39,6 +39,17 @@ public class StudentExercisesSituationQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "是否存在vip课")
     private Integer existVipCourse;
 
+    @ApiModelProperty(value = "是否存在网管课")
+    private Integer existPracticeCourse;
+
+    public Integer getExistPracticeCourse() {
+        return existPracticeCourse;
+    }
+
+    public void setExistPracticeCourse(Integer existPracticeCourse) {
+        this.existPracticeCourse = existPracticeCourse;
+    }
+
     public Integer getExistVipCourse() {
         return existVipCourse;
     }

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

@@ -506,4 +506,11 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @return
 	 */
     Object teacherCourseMinutes(QueryInfo queryInfo);
+
+	/**
+	 * 修改课程组有效期
+	 * @param practiceGroupId
+	 * @param coursesExpireDate
+	 */
+	void updateCoursesExpireDate(String practiceGroupId, Date coursesExpireDate);
 }

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

@@ -66,6 +66,5 @@ public interface ExtracurricularExercisesReplyService extends BaseService<Long,
      * @return void
      */
     void exercisesSituationStatistics();
-
     void exercisesSituationStatistics2();
 }

+ 4 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/StudentExtracurricularExercisesSituationService.java

@@ -1,13 +1,15 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.StudentExercisesSituationDto;
-import com.ym.mec.biz.dal.dto.StudentServiceDetailDto;
 import com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation;
 import com.ym.mec.biz.dal.page.StudentExercisesSituationQueryInfo;
 import com.ym.mec.biz.dal.page.StudentServiceDetailQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
+import java.util.List;
+import java.util.Map;
+
 public interface StudentExtracurricularExercisesSituationService extends BaseService<Long, StudentExtracurricularExercisesSituation> {
 
     PageInfo<StudentExercisesSituationDto> findStudentExtracurricularExercisesSituations(StudentExercisesSituationQueryInfo queryInfo);
@@ -28,6 +30,6 @@ public interface StudentExtracurricularExercisesSituationService extends BaseSer
      * @param queryInfo:
      * @return com.ym.mec.common.page.PageInfo<com.ym.mec.biz.dal.dto.StudentServiceDetailDto>
      */
-    PageInfo<StudentServiceDetailDto> findServiceStudentDetail(StudentServiceDetailQueryInfo queryInfo);
+    List<Map<String, Object>> findServiceStudentDetail(StudentServiceDetailQueryInfo queryInfo);
 
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysUserCashAccountService.java

@@ -27,6 +27,17 @@ public interface SysUserCashAccountService extends BaseService<Integer, SysUserC
 	boolean updateBalance(Integer userId, BigDecimal decimal, PlatformCashAccountDetailTypeEnum type, String memo);
 
 	/**
+	 * 更新指定用户的账户余额
+	 * @param userId 用户编号
+	 * @param decimal 交易金额(支持负数)
+	 * @param type 交易类型
+	 * @param memo 备注
+	 * @param transNo 订单流水编号
+	 * @return
+	 */
+	boolean updateBalance(Integer userId, BigDecimal decimal, PlatformCashAccountDetailTypeEnum type, String memo,String transNo);
+
+	/**
 	 * 更新指定用户的账户课程余额
 	 * @param userId 用户编号
 	 * @param decimal 交易金额(支持负数)

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -3657,6 +3657,9 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             List<Map<Integer, String>> nameIdMaps = teacherDao.queryNameByIdList(teacherIds);
             Map<Integer, String> nameIdMap=MapUtil.convertIntegerMap(nameIdMaps);
 
+			List<Map<Long, String>> coursesSettlementTimeMaps = courseScheduleTeacherSalaryDao.getCoursesSettlementTime(courseScheduleIds);
+			Map<Long, String> coursesSettlementTimeMap = MapUtil.convertIntegerMap(coursesSettlementTimeMaps);
+
 			Map<Integer, Group> classGroupIdGroupMap = groups.stream().collect(Collectors.toMap(Group::getClassGroupId, e -> e));
 
 			//获取班级声部名称
@@ -3690,6 +3693,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				} else {
 					result.setIsCallNames(YesOrNoEnum.NO);
 				}
+				result.setSettlementTime(coursesSettlementTimeMap.get(result.getId()));
 			}
         }
         pageInfo.setRows(results);
@@ -4148,6 +4152,24 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void updateCoursesExpireDate(String practiceGroupId, Date coursesExpireDate) {
+    	if(practiceGroupId == null || coursesExpireDate == null ){
+    		throw new BizException("参数校验失败");
+		}
+		PracticeGroup practiceGroup = practiceGroupDao.get(Long.parseLong(practiceGroupId));
+    	if(practiceGroup == null){
+			throw new BizException("课程组不存在");
+		}
+		if(practiceGroup.getCoursesStartDate().after(coursesExpireDate)){
+			throw new BizException("课程有效时间不能小于开始时间");
+		}
+		practiceGroup.setCoursesExpireDate(coursesExpireDate);
+		practiceGroup.setUpdateTime(new Date());
+		practiceGroupDao.update(practiceGroup);
+	}
+
+	@Override
 	public Object teacherCourseHeadInfo(Long courseScheduleId) {
 		SysUser user = sysUserFeignService.queryUserInfo();
 		if (null == user) {

+ 5 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -1014,12 +1014,14 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         }
         courseScheduleTeacherSalaryDao.updateTeacherSalaryConfirmStatus(teacherSalaryIds,TeacherSalaryConfirmStatus.UNCONFIRMED);
         teacherCourseRewardDao.updateTeacherRewardConfirmStatusWithMonth(month, null, TeacherSalaryConfirmStatus.UNCONFIRMED);
-        String notifyUrl="8?http://mteadev.dayaedu.com/#/remuneration?month=" + month;
-        String monthStr = DateUtil.dateToString(DateUtil.stringToDate(month, "yyyy-MM"),"yyyy年MM月");
+        String teacherBaseUrl = sysConfigDao.findByParamName(SysConfigService.TEACHER_BASE_URL).getParanValue();
+        String notifyUrl="8?"+teacherBaseUrl+"/#/remuneration?month=" + month;
+        String monthStr = DateUtil.dateToString(DateUtil.stringToDate(month, "yyyy-MM"),"M月");
+        String expireDateStr = DateUtil.dateToString(DateUtil.addDays(new Date(), 2), "M月d号");
         List<Integer> teacherIds = courseScheduleTeacherSalaryDao.findIsSettlementTeacherIdsWithMonth(month);
         Map<Integer, String> userMap = teacherIds.stream().collect(Collectors.toMap(Integer::valueOf, id->String.valueOf(id)));
         sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_SALARY_CONFIRM_PUSH,
-                userMap, null, 0, notifyUrl, "TEACHER", monthStr);
+                userMap, null, 0, notifyUrl, "TEACHER", monthStr, expireDateStr);
     }
 
     @Override

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

@@ -335,6 +335,9 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
 			studentExtracurricularExercisesSituation.setExercisesMessageTimelyNum(exercisesMessageTimelyNum>0?1:0);
 			results.add(studentExtracurricularExercisesSituation);
 		}
+
+		studentExtracurricularExercisesSituationDao.deleteByMonday(monDayDate.toString());
+
 		BigDecimal currentPage=BigDecimal.ONE,
                 pageSize=new BigDecimal(10000),
                 total=new BigDecimal(results.size()),

+ 15 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -47,6 +47,8 @@ import java.time.temporal.WeekFields;
 import java.util.*;
 import java.util.stream.Collectors;
 
+import static com.ym.mec.biz.dal.enums.SignInStatusEnum.*;
+
 @Service
 public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGroup> implements PracticeGroupService {
 
@@ -2155,9 +2157,9 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         int count = dataList.size();
         if (count > 0) {
             pageInfo.setTotal(count);
-            List<Long> courseScheduleIds = dataList.stream()
-                    .map(courseSchedule -> courseSchedule.getId())
-                    .distinct().collect(Collectors.toList());
+            List<Long> courseScheduleIds = dataList.stream().map(courseSchedule -> courseSchedule.getId()).distinct().collect(Collectors.toList());
+            List<TeacherAttendance> teacherAttendances = teacherAttendanceDao.findTeacherIdByCourseSchedule(courseScheduleIds);
+            Map<Long, List<TeacherAttendance>> courseTeacherAttendanceMap = teacherAttendances.stream().collect(Collectors.groupingBy(TeacherAttendance::getCourseScheduleId));
             List<Map<Long, Integer>> courseSettlementMaps = courseScheduleTeacherSalaryDao.checkCoursesIsSettlement(courseScheduleIds);
             Map<Long, Long> courseSettlementMap = MapUtil.convertIntegerMap(courseSettlementMaps);
             Map<Integer, Long> studentNumCourseMap = MapUtil.convertIntegerMap(studentAttendanceDao.countStudentAttendancesByCourses(courseScheduleIds));
@@ -2178,6 +2180,16 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                 } else {
                     e.setIsCallNames(YesOrNoEnum.NO);
                 }
+                List<TeacherAttendance> courseTeacherAttendances = courseTeacherAttendanceMap.get(e.getId());
+                if(!CollectionUtils.isEmpty(courseTeacherAttendances)){
+                    TeacherAttendance teacherAttendance=courseTeacherAttendances.get(0);
+                    e.setIsSignIn(Objects.isNull(teacherAttendance.getSignInStatus())?3:teacherAttendance.getSignInStatus().getCode());
+                    e.setIsSignOut(Objects.isNull(teacherAttendance.getSignOutStatus())?3:teacherAttendance.getSignOutStatus().getCode());
+                    e.setSignInStatusEnum(e.getIsSignIn() == 1?NORMAL:e.getIsSignIn() == 0?UNUSUAL:NO);
+                    e.setSignOutStatusEnum(e.getIsSignOut() == 1?SignOutStatusEnum.NORMAL:e.getIsSignOut() == 0? SignOutStatusEnum.UNUSUAL: SignOutStatusEnum.NO);
+                    e.setSignInTime(teacherAttendance.getSignInTime());
+                    e.setSignOutTime(teacherAttendance.getSignOutTime());
+                }
             });
         }
         pageInfo.setRows(dataList);

+ 44 - 47
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SporadicChargeInfoImpl.java

@@ -77,55 +77,52 @@ public class SporadicChargeInfoImpl extends BaseServiceImpl<Integer, SporadicCha
             //福袋活动,增加课程余额
             if (info.getChargeType().getCode() == 6) {
                 sysUserCashAccountService.appendCourseBalance(userId, studentPaymentOrder.getActualAmount(), "活动");
-            }
-
-            //零星收费账户充值
-            if (info.getChargeType().getCode() == 9) {
-                sysUserCashAccountService.updateBalance(userId, studentPaymentOrder.getActualAmount(),PlatformCashAccountDetailTypeEnum.RECHARGE, "零星收费账户充值");
-            }
+            } else if (info.getChargeType().getCode() == 9) { //零星收费账户充值
+                sysUserCashAccountService.updateBalance(userId, studentPaymentOrder.getActualAmount(), PlatformCashAccountDetailTypeEnum.RECHARGE, "零星收费账户充值",studentPaymentOrder.getTransNo());
+            } else {
+                //插入交易明细
+                BigDecimal amount = studentPaymentOrder.getActualAmount();
+                Date nowDate = new Date();
+                SysUserCashAccount cashAccount = sysUserCashAccountService.get(userId);
+                //充值
+                SysUserCashAccountDetail rechargeDetail = new SysUserCashAccountDetail();
+                rechargeDetail.setAmount(amount);
+                rechargeDetail.setBalance(cashAccount.getBalance().add(amount));
+                rechargeDetail.setComment("缴费前充值");
+                rechargeDetail.setCreateTime(nowDate);
+                rechargeDetail.setStatus(DealStatusEnum.SUCCESS);
+                rechargeDetail.setTransNo(studentPaymentOrder.getTransNo());
+                rechargeDetail.setType(PlatformCashAccountDetailTypeEnum.RECHARGE);
+                rechargeDetail.setUpdateTime(nowDate);
+                rechargeDetail.setUserId(userId);
+                rechargeDetail.setChannel(studentPaymentOrder.getPaymentChannel());
+                rechargeDetail.setComAmount(studentPaymentOrder.getComAmount());
+                rechargeDetail.setPerAmount(studentPaymentOrder.getPerAmount());
+                sysUserCashAccountDetailService.insert(rechargeDetail);
 
-            //插入交易明细
-            BigDecimal amount = studentPaymentOrder.getActualAmount();
-            Date nowDate = new Date();
-            SysUserCashAccount cashAccount = sysUserCashAccountService.get(userId);
-            //充值
-            SysUserCashAccountDetail rechargeDetail = new SysUserCashAccountDetail();
-            rechargeDetail.setAmount(amount);
-            rechargeDetail.setBalance(cashAccount.getBalance().add(amount));
-            rechargeDetail.setComment("缴费前充值");
-            rechargeDetail.setCreateTime(nowDate);
-            rechargeDetail.setStatus(DealStatusEnum.SUCCESS);
-            rechargeDetail.setTransNo(studentPaymentOrder.getTransNo());
-            rechargeDetail.setType(PlatformCashAccountDetailTypeEnum.RECHARGE);
-            rechargeDetail.setUpdateTime(nowDate);
-            rechargeDetail.setUserId(userId);
-            rechargeDetail.setChannel(studentPaymentOrder.getPaymentChannel());
-            rechargeDetail.setComAmount(studentPaymentOrder.getComAmount());
-            rechargeDetail.setPerAmount(studentPaymentOrder.getPerAmount());
-            sysUserCashAccountDetailService.insert(rechargeDetail);
+                //缴费
+                SysUserCashAccountDetail paymentDetail = new SysUserCashAccountDetail();
+                paymentDetail.setAmount(amount.negate());
+                paymentDetail.setBalance(cashAccount.getBalance());
+                paymentDetail.setComment(info.getTitle());
+                paymentDetail.setCreateTime(nowDate);
+                paymentDetail.setStatus(DealStatusEnum.SUCCESS);
+                paymentDetail.setTransNo(studentPaymentOrder.getTransNo());
+                paymentDetail.setType(PlatformCashAccountDetailTypeEnum.PAY_FEE);
+                paymentDetail.setUpdateTime(nowDate);
+                paymentDetail.setUserId(userId);
+                rechargeDetail.setChannel(studentPaymentOrder.getPaymentChannel());
+                if (studentPaymentOrder.getComAmount() != null) {
+                    rechargeDetail.setComAmount(studentPaymentOrder.getComAmount().negate());
+                    rechargeDetail.setPerAmount(studentPaymentOrder.getPerAmount().negate());
+                }
 
-            //缴费
-            SysUserCashAccountDetail paymentDetail = new SysUserCashAccountDetail();
-            paymentDetail.setAmount(amount.negate());
-            paymentDetail.setBalance(cashAccount.getBalance());
-            paymentDetail.setComment(info.getTitle());
-            paymentDetail.setCreateTime(nowDate);
-            paymentDetail.setStatus(DealStatusEnum.SUCCESS);
-            paymentDetail.setTransNo(studentPaymentOrder.getTransNo());
-            paymentDetail.setType(PlatformCashAccountDetailTypeEnum.PAY_FEE);
-            paymentDetail.setUpdateTime(nowDate);
-            paymentDetail.setUserId(userId);
-            rechargeDetail.setChannel(studentPaymentOrder.getPaymentChannel());
-            if (studentPaymentOrder.getComAmount() != null) {
-                rechargeDetail.setComAmount(studentPaymentOrder.getComAmount().negate());
-                rechargeDetail.setPerAmount(studentPaymentOrder.getPerAmount().negate());
+                sysUserCashAccountDetailService.insert(paymentDetail);
             }
 
-            sysUserCashAccountDetailService.insert(paymentDetail);
-
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.SMS_SPORADIC_PAYMENT_SUCCESS, map, null, 0, "1","STUDENT",
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.SMS_SPORADIC_PAYMENT_SUCCESS, map, null, 0, "1", "STUDENT",
                     studentPaymentOrder.getActualAmount(), info.getTitle());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.SMS_SPORADIC_PAYMENT_SUCCESS, yimei, null, 0, "1","",
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.SMS_SPORADIC_PAYMENT_SUCCESS, yimei, null, 0, "1", "",
                     studentPaymentOrder.getActualAmount(), info.getTitle());
             return true;
         }
@@ -134,7 +131,7 @@ public class SporadicChargeInfoImpl extends BaseServiceImpl<Integer, SporadicCha
                 sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, info.getTitle() + "支付失败");
             }
 
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.SMS_SPORADIC_PAYMENT_FAILED, map, null, 0, "","STUDENT",
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.SMS_SPORADIC_PAYMENT_FAILED, map, null, 0, "", "STUDENT",
                     studentPaymentOrder.getActualAmount(), info.getTitle());
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.SMS_SPORADIC_PAYMENT_FAILED, yimei, null, 0, "", "",
                     studentPaymentOrder.getActualAmount(), info.getTitle());
@@ -148,12 +145,12 @@ public class SporadicChargeInfoImpl extends BaseServiceImpl<Integer, SporadicCha
         PageInfo<SporadicChargeInfo> pageInfo = queryPage(queryInfo);
         List<SporadicChargeInfo> rows = pageInfo.getRows();
         if (rows != null && rows.size() > 0) {
-            if(queryInfo.getIsExport() && rows.size() > 50000){
+            if (queryInfo.getIsExport() && rows.size() > 50000) {
                 throw new BizException("数据集太大,不能导出.最大数据集不能超过50000");
             }
             Set<Integer> organIds = rows.stream().map(e -> e.getOrganId()).collect(Collectors.toSet());
             List<Integer> userIds = rows.stream().map(e -> e.getUserId()).collect(Collectors.toList());
-            if(userIds == null){
+            if (userIds == null) {
                 userIds = new ArrayList<>();
             }
             Set<Integer> operatorIds = rows.stream().map(e -> e.getOperatorId()).collect(Collectors.toSet());

+ 32 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentExtracurricularExercisesSituationServiceImpl.java

@@ -15,9 +15,14 @@ import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
+import com.ym.mec.util.date.DateUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.time.DayOfWeek;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -50,10 +55,11 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
 			pageInfo.setTotal(count);
 			params.put("offset", pageInfo.getOffset());
 			dataList = studentExtracurricularExercisesSituationDao.findExercisesSituations(params);
+			long until = LocalDateTime.ofInstant(queryInfo.getMonday().toInstant(), DateUtil.zoneId).until(LocalDateTime.ofInstant(queryInfo.getSunday().toInstant(), DateUtil.zoneId), ChronoUnit.WEEKS);
 			if(Objects.isNull(queryInfo.getExistVipCourse())){
 				List<Integer> studentIds = dataList.stream().map(StudentExtracurricularExercisesSituation::getStudentId).collect(Collectors.toList());
 				List<Map<Integer, Long>> studentVipCoursesMaps = courseScheduleDao.countStudentVipCoursesWithDate(studentIds, queryInfo.getMonday(), queryInfo.getSunday(), GroupType.VIP);
-				List<Map<Integer, Long>> studentPracticeCoursesMaps = courseScheduleDao.countStudentVipCoursesWithDate(studentIds, queryInfo.getMonday(), queryInfo.getSunday(), GroupType.PRACTICE);
+				List<Map<Integer, Long>> studentPracticeCoursesMaps = courseScheduleDao.countStudentPayPracticeCoursesWithDate(studentIds, queryInfo.getMonday(), queryInfo.getSunday());
 				Map<Integer, Long> studentVipCourseMap = MapUtil.convertIntegerMap(studentVipCoursesMaps);
 				Map<Integer, Long> studentPracticeCourseMap = MapUtil.convertIntegerMap(studentPracticeCoursesMaps);
 				for (StudentExercisesSituationDto exercisesSituationDto : dataList) {
@@ -61,6 +67,11 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
 					Long practiceCourses=studentPracticeCourseMap.get(exercisesSituationDto.getStudentId());
 					exercisesSituationDto.setExistVipCourse(Objects.isNull(vipCourses)?0:vipCourses.intValue());
 					exercisesSituationDto.setExistPracticeCourse(Objects.isNull(practiceCourses)?0:practiceCourses.intValue());
+					exercisesSituationDto.setExpectExercisesNum((int) until+1);
+				}
+			}else{
+				for (StudentExercisesSituationDto exercisesSituationDto : dataList) {
+					exercisesSituationDto.setExpectExercisesNum((int) until+1);
 				}
 			}
 		}
@@ -105,7 +116,7 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
 	}
 
 	@Override
-	public PageInfo<StudentServiceDetailDto> findServiceStudentDetail(StudentServiceDetailQueryInfo queryInfo) {
+	public List<Map<String, Object>> findServiceStudentDetail(StudentServiceDetailQueryInfo queryInfo) {
 		PageInfo<StudentServiceDetailDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
 		Map<String, Object> params = new HashMap<>();
 		MapUtil.populateMap(params, queryInfo);
@@ -116,11 +127,25 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
 			pageInfo.setTotal(count);
 			params.put("offset", pageInfo.getOffset());
 			dataList = extracurricularExercisesReplyDao.findStudentHomeworkDetailsInTimeZone(params);
+			Map<String, List<StudentServiceDetailDto>> weekHomeworks=new HashMap<>();
+			for (StudentServiceDetailDto studentServiceDetailDto : dataList) {
+				LocalDate homeworkCreateTime = LocalDateTime.ofInstant(studentServiceDetailDto.getHomeworkCreateTime().toInstant(), DateUtil.zoneId).toLocalDate();
+				String mondayStr = homeworkCreateTime.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue()).toString();
+				if(!weekHomeworks.containsKey(mondayStr)){
+					weekHomeworks.put(mondayStr, new ArrayList<>());
+				}
+				weekHomeworks.get(mondayStr).add(studentServiceDetailDto);
+			}
+			List<Map<String, Object>> results=new ArrayList<>();
+			for (Map.Entry<String, List<StudentServiceDetailDto>> stringListEntry : weekHomeworks.entrySet()) {
+				Map<String, Object> result=new HashMap<>();
+				result.put("monday", stringListEntry.getKey());
+				result.put("data", stringListEntry.getValue());
+				results.add(result);
+			}
+			return results;
+		}else{
+			return null;
 		}
-		if (count == 0) {
-			dataList = new ArrayList<>();
-		}
-		pageInfo.setRows(dataList);
-		return pageInfo;
 	}
 }

+ 22 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -3,15 +3,13 @@ package com.ym.mec.biz.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.huifu.adapay.model.payment.Payment;
 import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
+import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
 import com.ym.mec.biz.dal.dto.PageInfoOrder;
 import com.ym.mec.biz.dal.dto.SporadicChargeInfoDto;
 import com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto;
 import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
-import com.ym.mec.biz.dal.enums.DealStatusEnum;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
-import com.ym.mec.biz.dal.enums.OrderTypeEnum;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.SporadicOrderQueryInfo;
 import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
 import com.ym.mec.biz.service.*;
@@ -53,6 +51,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     private SporadicChargeInfoService sporadicChargeInfoService;
     @Autowired
     private PracticeGroupService practiceGroupService;
+    @Autowired
+    private SysUserCashAccountDao sysUserCashAccountDao;
 
     @Override
     public BaseDAO<Long, StudentPaymentOrder> getDAO() {
@@ -285,17 +285,28 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
 
         List<StudentPaymentOrder> dataList = new ArrayList<>();
         int count = this.findCount(params);
-        StudentPaymentOrder orderMoneyAmount = studentPaymentOrderDao.getOrderMoneyAmount(params);
-        if(orderMoneyAmount != null){
-            BigDecimal totalExpectAmount = orderMoneyAmount.getExpectAmount() !=null? orderMoneyAmount.getExpectAmount():BigDecimal.ZERO;
-            BigDecimal totalActualAmount = orderMoneyAmount.getActualAmount() !=null? orderMoneyAmount.getActualAmount():BigDecimal.ZERO;
-            pageInfo.setTotalExpectAmount(totalExpectAmount);
-            pageInfo.setTotalActualAmount(totalActualAmount);
-        }
+
+        BigDecimal totalUserBalance = sysUserCashAccountDao.getTotalUserBalance(params);
+        pageInfo.setTotalUserBalance(totalUserBalance);
         if (count > 0) {
             pageInfo.setTotal(count);
             params.put("offset", pageInfo.getOffset());
             dataList = studentPaymentOrderDao.queryPageOrder(params);
+
+            StudentPaymentOrder orderMoneyAmount = studentPaymentOrderDao.getOrderMoneyAmount(params);
+            BigDecimal totalExpectAmount = orderMoneyAmount.getExpectAmount() != null ? orderMoneyAmount.getExpectAmount() : BigDecimal.ZERO;
+            BigDecimal totalActualAmount = orderMoneyAmount.getActualAmount() != null ? orderMoneyAmount.getActualAmount() : BigDecimal.ZERO;
+            BigDecimal totalBalancePaymentAmount = orderMoneyAmount.getBalancePaymentAmount() != null ? orderMoneyAmount.getBalancePaymentAmount() : BigDecimal.ZERO;
+
+            params.put("chargeType", SporadicChargeTypeEnum.RECHARGE);
+            BigDecimal totalChargeAmount = studentPaymentOrderDao.getChargeAmount(params);
+            totalChargeAmount = totalChargeAmount != null ? totalChargeAmount : BigDecimal.ZERO;
+            BigDecimal totalAdvanceAmount = totalChargeAmount.subtract(totalBalancePaymentAmount);
+
+            pageInfo.setTotalAdvanceAmount(totalAdvanceAmount);
+            pageInfo.setTotalExpectAmount(totalExpectAmount);
+            pageInfo.setTotalActualAmount(totalActualAmount);
+            pageInfo.setTotalRevenueAmount(totalActualAmount.subtract(totalAdvanceAmount));
         }
         pageInfo.setRows(dataList);
         return pageInfo;

+ 50 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserCashAccountServiceImpl.java

@@ -124,6 +124,56 @@ public class SysUserCashAccountServiceImpl extends BaseServiceImpl<Integer, SysU
     }
 
     @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    public boolean updateBalance(Integer userId, BigDecimal decimal, PlatformCashAccountDetailTypeEnum type, String memo,String transNo) {
+        SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
+        if (cashAccount == null) {
+            throw new BizException("用户[{}]现金账户不存在", userId);
+        }
+
+        if (cashAccount.getStatus() != PlatformCashAccountStatusEnum.NORMAL) {
+            throw new BizException("账户不可用");
+        }
+        BigDecimal balance = cashAccount.getBalance().add(decimal);
+        if (balance.doubleValue() < 0) {
+            throw new BizException("现金账户[{}]余额不足,可用余额剩{}元", userId, cashAccount.getBalance().doubleValue());
+        }
+
+        Date date = new Date();
+
+        SysUserCashAccountDetail detail = new SysUserCashAccountDetail();
+        detail.setAmount(decimal);
+        detail.setBalance(cashAccount.getBalance().add(decimal));
+        detail.setComment(memo);
+        detail.setTransNo(transNo);
+        detail.setCreateTime(date);
+        detail.setStatus(DealStatusEnum.SUCCESS);
+        detail.setType(type);
+        detail.setUpdateTime(date);
+        detail.setUserId(userId);
+
+        sysUserCashAccountDetailDao.insert(detail);
+
+        cashAccount.setBalance(balance);
+        cashAccount.setUpdateTime(date);
+
+        sysUserCashAccountDao.update(cashAccount);
+        if (!decimal.equals(BigDecimal.ZERO)) {
+            //推送余额消费信息
+            Map<Integer, String> phoneMap = new HashMap<>(1);
+            SysUser sysUser = sysUserFeignService.queryUserById(userId);
+            phoneMap.put(userId, sysUser.getPhone());
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.STUDENT_SMS_BALANCE_CONSUME,
+                    phoneMap, null, 0, null, "", decimal, balance);
+            Map<Integer, String> idMap = new HashMap<>(1);
+            idMap.put(userId, userId.toString());
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_BALANCE_CONSUME,
+                    idMap, null, 0, null, "", decimal, balance);
+        }
+        return true;
+    }
+
+    @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     public boolean updateCourseBalance(Integer userId, BigDecimal decimal, BigDecimal amount, String description) {
         SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);

+ 37 - 15
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -43,6 +43,7 @@
     <resultMap id="CourseScheduleEndDto" type="com.ym.mec.biz.dal.dto.CourseScheduleEndDto" extends="CourseSchedule">
         <result column="course_start_time_" property="startClassTime"/>
         <result column="course_end_time_" property="endClassTime"/>
+        <result column="settlement_time_" property="settlementTime"/>
     </resultMap>
 
     <resultMap type="com.ym.mec.biz.dal.dto.CourseScheduleDto" id="courseScheduleDto" extends="CourseSchedule">
@@ -2237,26 +2238,27 @@
 
     <select id="endFindCourseSchedules" resultMap="CourseScheduleEndDto">
         SELECT
-        cs.id_,
-        cs.group_type_,
-        cs.music_group_id_,
-        cs.class_group_id_,
-        cs.status_,
-        cs.name_,
-        CONCAT(cs.class_date_,' ',cs.start_class_time_) course_start_time_,
-        CONCAT(cs.class_date_,' ',cs.end_class_time_) course_end_time_,
-        cs.actual_teacher_id_,
-        cs.teach_mode_,
-        cs.type_,
-        cs.schoole_id_,
-        s.name_ schoole_name_
+            cs.id_,
+            cs.group_type_,
+            cs.music_group_id_,
+            cs.class_group_id_,
+            cs.status_,
+            cs.name_,
+            CONCAT(cs.class_date_,' ',cs.start_class_time_) course_start_time_,
+            CONCAT(cs.class_date_,' ',cs.end_class_time_) course_end_time_,
+            cs.actual_teacher_id_,
+            cs.teach_mode_,
+            cs.type_,
+            cs.schoole_id_,
+            s.name_ schoole_name_
         FROM
-        course_schedule cs
-        LEFT JOIN school s ON cs.schoole_id_=s.id_
+            course_schedule cs
+            LEFT JOIN school s ON cs.schoole_id_=s.id_
         <include refid="endFindCourseSchedulesCondition"/>
         ORDER BY course_start_time_,cs.id_
         <include refid="global.limit"/>
     </select>
+
     <select id="endCountCourseSchedules" resultType="int">
         SELECT
         COUNT(cs.id_)
@@ -3009,6 +3011,26 @@
         GROUP BY
         cssp.user_id_
     </select>
+    <select id="countStudentPayPracticeCoursesWithDate" resultType="map">
+        SELECT
+        cssp.user_id_ as 'key',
+        COUNT( cs.id_ ) as 'value'
+        FROM
+        course_schedule_student_payment cssp
+        LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
+        LEFT JOIN practice_group pg ON pg.id_=cssp.music_group_id_
+        WHERE
+        cssp.user_id_ IN
+        <foreach collection="studentIds" item="studentId" separator="," open="(" close=")">
+            #{studentId}
+        </foreach>
+        AND cssp.group_type_ = 'PRACTICE'
+        AND pg.type_='CHARGE'
+        AND cs.class_date_ BETWEEN #{startTime} AND #{endTime}
+        GROUP BY
+        cssp.user_id_
+    </select>
+
     <select id="countStudentVipCoursesInFuture" resultType="map">
         SELECT
           cssp.user_id_ as 'key',

+ 10 - 1
mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml

@@ -777,7 +777,7 @@
 			<if test="signOutStatus!=null and signOutStatus==1">
 				AND ta.sign_out_status_=#{signOutStatus}
 			</if>
-            <if test="signOutStatus!=null and signOutStatus==1">
+            <if test="signOutStatus!=null and signOutStatus==0">
                 AND (ta.sign_out_status_=#{signOutStatus} OR ta.sign_out_status_ IS NULL)
             </if>
 			<if test="confirmStatus!=null">
@@ -930,4 +930,13 @@
 				AND csts.confirm_status_ IS NULL
 			</if>
 	</select>
+
+    <select id="getCoursesSettlementTime" resultType="java.util.Map">
+		SELECT course_schedule_id_ 'key',DATE_FORMAT(MAX(settlement_time_), "%Y-%m-%d %H:%i:%s") 'value' FROM course_schedule_teacher_salary
+		WHERE course_schedule_id_ IN
+		<foreach collection="courseScheduleIds" item="courseScheduleId" open="(" close=")" separator=",">
+			#{courseScheduleId}
+		</foreach>
+		GROUP BY course_schedule_id_;
+	</select>
 </mapper>

+ 5 - 0
mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesReplyMapper.xml

@@ -393,6 +393,7 @@
 		<result property="groupType" column="group_type_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
 		<result property="groupName" column="group_name_"/>
 		<result property="courseStartTime" column="course_start_time_"/>
+		<result property="courseEndTime" column="course_end_time_"/>
 		<result property="teacherId" column="teacher_id_"/>
 		<result property="teacherName" column="teacher_name_"/>
 		<result property="homeworkCreateTime" column="homework_create_time_"/>
@@ -412,6 +413,8 @@
 			NULL group_id_,
 			NULL group_type,
 			NULL group_name_,
+			NULL course_start_time_,
+			NULL course_end_time_,
 			ee.content_,
 			ee.create_time_ homework_create_time_,
 			eer.user_id_,
@@ -435,6 +438,8 @@
 			cs.music_group_id_ group_id_,
 			cs.group_type_ group_type,
 			cs.name_ group_name_,
+			CONCAT(cs.class_date_, ' ', cs.start_class_time_) course_start_time_,
+			CONCAT(cs.class_date_, ' ', cs.end_class_time_) course_end_time_,
 			ch.content_,
 			ch.create_time_ homework_create_time_,
 			sch.user_id_,

+ 15 - 3
mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml

@@ -125,7 +125,7 @@
 			MAX(sees.id_) id_,
 			student_id_,
 			stu.username_ student_name_,
-			tea.real_name_ teacher_name_,
+			GROUP_CONCAT(tea.real_name_) teacher_name_,
 			o.name_ organ_name_,
 			SUM( expect_exercises_num_ ) expect_exercises_num_,
 			SUM( actual_exercises_num_ ) actual_exercises_num_,
@@ -158,8 +158,14 @@
 			<if test="existVipCourse!=null and existVipCourse==0">
 				AND NOT EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_ WHERE cssp.user_id_=sees.student_id_ AND cssp.group_type_='VIP' AND class_date_ BETWEEN #{monday} AND #{sunday})
 			</if>
+			<if test="existPracticeCourse!=null and existPracticeCourse==1">
+				AND EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_ LEFT JOIN practice_group pg ON pg.id_=cssp.music_group_id_ WHERE cssp.user_id_=sees.student_id_ AND cssp.group_type_='PRACTICE' AND pg.type_='CHARGE' AND class_date_ BETWEEN #{monday} AND #{sunday})
+			</if>
+			<if test="existPracticeCourse!=null and existPracticeCourse==0">
+				AND NOT EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_ LEFT JOIN practice_group pg ON pg.id_=cssp.music_group_id_ WHERE cssp.user_id_=sees.student_id_ AND cssp.group_type_='PRACTICE' AND pg.type_='CHARGE' AND class_date_ BETWEEN #{monday} AND #{sunday})
+			</if>
 			GROUP BY
-			student_id_,teacher_id_
+			student_id_
 			<trim prefix="HAVING" suffixOverrides="and">
 				<if test="expectExercisesNum!=null">  SUM( expect_exercises_num_ ) = #{expectExercisesNum}</if>
 				<if test="actualExercisesNumIsAchieve!=null and actualExercisesNumIsAchieve==0">
@@ -218,8 +224,14 @@
 			<if test="existVipCourse!=null and existVipCourse==0">
 				AND NOT EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_ WHERE cssp.user_id_=sees.student_id_ AND cssp.group_type_='VIP' AND class_date_ BETWEEN #{monday} AND #{sunday})
 			</if>
+			<if test="existPracticeCourse!=null and existPracticeCourse==1">
+				AND EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_ LEFT JOIN practice_group pg ON pg.id_=cssp.music_group_id_ WHERE cssp.user_id_=sees.student_id_ AND cssp.group_type_='PRACTICE' AND pg.type_='CHARGE' AND class_date_ BETWEEN #{monday} AND #{sunday})
+			</if>
+			<if test="existPracticeCourse!=null and existPracticeCourse==0">
+				AND NOT EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_ LEFT JOIN practice_group pg ON pg.id_=cssp.music_group_id_ WHERE cssp.user_id_=sees.student_id_ AND cssp.group_type_='PRACTICE' AND pg.type_='CHARGE' AND class_date_ BETWEEN #{monday} AND #{sunday})
+			</if>
 			GROUP BY
-			student_id_,teacher_id_
+			student_id_
 			<trim prefix="HAVING" suffixOverrides="and">
 				<if test="expectExercisesNum!=null">  SUM( expect_exercises_num_ ) = #{expectExercisesNum}</if>
 				<if test="actualExercisesNumIsAchieve!=null and actualExercisesNumIsAchieve==0">

+ 11 - 1
mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml

@@ -244,6 +244,10 @@
             <if test="balancePaymentAmount != null">
                 AND spo.balance_payment_amount_ >= #{balancePaymentAmount}
             </if>
+            <if test="chargeType != null">
+                AND spo.group_type_='SPORADIC'
+                AND sci.charge_type_ = #{chargeType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+            </if>
         </where>
     </sql>
 
@@ -572,7 +576,7 @@
     </select>
 
     <select id="getOrderMoneyAmount" parameterType="map" resultMap="StudentPaymentOrder">
-        SELECT SUM(spo.expect_amount_) expect_amount_,SUM(actual_amount_) actual_amount_ FROM student_payment_order spo
+        SELECT SUM(spo.expect_amount_) expect_amount_,SUM(actual_amount_) actual_amount_,SUM(balance_payment_amount_) balance_payment_amount_ FROM student_payment_order spo
         <include refid="queryPaymentOrder"/>
     </select>
 
@@ -602,4 +606,10 @@
           AND FIND_IN_SET(#{merNo}, mer_nos_)
         ]]>
     </select>
+
+    <select id="getChargeAmount" parameterType="map" resultType="java.math.BigDecimal">
+        SELECT SUM(actual_amount_) FROM student_payment_order spo
+        LEFT JOIN sporadic_charge_info sci ON spo.music_group_id_ = sci.id_
+        <include refid="queryPaymentOrder"/>
+    </select>
 </mapper>

+ 11 - 0
mec-biz/src/main/resources/config/mybatis/SysUserCashAccountMapper.xml

@@ -94,4 +94,15 @@
         </foreach>
     </select>
 
+    <!-- 获取用户预收余额 -->
+    <select id="getTotalUserBalance" resultType="java.math.BigDecimal" parameterType="map">
+        SELECT SUM(suca.balance_) FROM sys_user_cash_account suca
+        LEFT JOIN sys_user su ON su.id_ = suca.user_id_
+        <where>
+        <if test="organId != null">
+            FIND_IN_SET(su.organ_id_,#{organId})
+        </if>
+        </where>
+    </select>
+
 </mapper>

+ 4 - 6
mec-im/src/main/java/com/ym/controller/RoomController.java

@@ -24,7 +24,7 @@ public class RoomController{
     @RequestMapping(value = "/join", method = RequestMethod.POST)
     public Object joinRoom(@RequestBody ReqUserData data)
             throws ApiException, Exception {
-        RoomResult roomResult = roomService.joinRoom(data.getUserName(), data.getRoomId(), data.isAudience(), data.isDisableCamera(),data.isMusicMode());
+        RoomResult roomResult = roomService.joinRoom(data.getUserName(), data.getRoomId(), data.isAudience(), data.isDisableCamera());
         return new BaseResponse<>(roomResult);
     }
 
@@ -129,8 +129,6 @@ public class RoomController{
             result = roomService.controlDevice(data.getRoomId(), data.getUserId(), DeviceTypeEnum.Camera, data.getCameraOn());
         } else if (data.getMicrophoneOn() != null) {
             result = roomService.controlDevice(data.getRoomId(), data.getUserId(), DeviceTypeEnum.Microphone, data.getMicrophoneOn());
-        } else if (data.getMusicModeOn() != null) {
-            result = roomService.controlDevice(data.getRoomId(), data.getUserId(), DeviceTypeEnum.MusicMode, data.getMusicModeOn());
         } else {
             throw new ApiException(ErrorEnum.ERR_REQUEST_PARA_ERR);
         }
@@ -232,9 +230,9 @@ public class RoomController{
 
     @RequestMapping(value = "/members/online-status", method = RequestMethod.POST)
     public Object memberOnlineStatus(@RequestBody List<ReqMemberOnlineStatus> statusList,
-                                                    @RequestParam(value = "timestamp", required = false) String timestamp,
-                                                    @RequestParam(value = "nonce", required = false) String nonce,
-                                                    @RequestParam(value = "signature", required = false) String signature)
+                                     @RequestParam(value = "timestamp", required = false) String timestamp,
+                                     @RequestParam(value = "nonce", required = false) String nonce,
+                                     @RequestParam(value = "signature", required = false) String signature)
             throws ApiException, Exception {
         Boolean result = roomService.memberOnlineStatus(statusList, nonce, timestamp, signature);
         return new BaseResponse<>(result);

+ 0 - 5
mec-im/src/main/java/com/ym/dao/RoomMemberDao.java

@@ -62,11 +62,6 @@ public interface RoomMemberDao extends JpaRepository<RoomMember, Long> {
     @Query(value = "update rongyun_room_member set mic=?3 where rid=?1 and uid=?2", nativeQuery = true)
     public int updateMicByRidAndUid(String rid, String uid, boolean mic);
 
-    @Transactional
-    @Modifying
-    @Query(value = "update rongyun_room_member set music_mode=?3 where rid=?1 and uid=?2", nativeQuery = true)
-    public int updateMusicByRidAndUid(String rid, String uid, boolean musicMode);
-
     public boolean existsByRidAndUid(String rid, String uid);
 
     public boolean existsByRidAndRole(String rid, int role);

+ 0 - 1
mec-im/src/main/java/com/ym/pojo/DeviceTypeEnum.java

@@ -6,5 +6,4 @@ package com.ym.pojo;
 public enum DeviceTypeEnum {
     Microphone,
     Camera,
-    MusicMode,
 }

+ 6 - 16
mec-im/src/main/java/com/ym/pojo/ReqDeviceControlData.java

@@ -7,21 +7,11 @@ import lombok.Data;
  */
 @Data
 public class ReqDeviceControlData {
-    private Boolean cameraOn;
-    private Boolean microphoneOn;
-    private Boolean musicModeOn;
-    private String roomId;
-    private String userId;
-    private String ticket;
-
-	public Boolean getMusicModeOn() {
-		return musicModeOn;
-	}
-
-	public void setMusicModeOn(Boolean musicModeOn) {
-		this.musicModeOn = musicModeOn;
-	}
-
+	private Boolean cameraOn;
+	private Boolean microphoneOn;
+	private String roomId;
+	private String userId;
+	private String ticket;
 	public Boolean getCameraOn() {
 		return cameraOn;
 	}
@@ -52,5 +42,5 @@ public class ReqDeviceControlData {
 	public void setTicket(String ticket) {
 		this.ticket = ticket;
 	}
-    
+
 }

+ 5 - 12
mec-im/src/main/java/com/ym/pojo/ReqUserData.java

@@ -7,18 +7,11 @@ import lombok.Data;
  */
 @Data
 public class ReqUserData {
-    private String userName;
-    private String roomId;
-    private String userId;
-    private boolean audience;
+	private String userName;
+	private String roomId;
+	private String userId;
+	private boolean audience;
 	private boolean disableCamera;
-	private boolean musicMode;
-	public boolean isMusicMode() {
-		return musicMode;
-	}
-	public void setMusicMode(boolean musicMode) {
-		this.musicMode = musicMode;
-	}
 	public String getUserName() {
 		return userName;
 	}
@@ -49,5 +42,5 @@ public class ReqUserData {
 	public void setDisableCamera(boolean disableCamera) {
 		this.disableCamera = disableCamera;
 	}
-	
+
 }

+ 0 - 2
mec-im/src/main/java/com/ym/pojo/RoomMember.java

@@ -22,7 +22,6 @@ public class RoomMember {
     private @Getter @Setter Date joinDt;
     private @Getter @Setter String name;
     private @Getter @Setter boolean camera = true;
-    private @Getter @Setter boolean musicMode = true;
     private @Getter @Setter boolean mic = true;
 
     public RoomMember() {
@@ -42,7 +41,6 @@ public class RoomMember {
                 ", joinDt=" + joinDt +
                 ", name='" + name + '\'' +
                 ", camera=" + camera +
-                ", musicMode=" + musicMode +
                 ", mic=" + mic +
                 '}';
     }

+ 10 - 12
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -105,11 +105,11 @@ public class RoomServiceImpl implements RoomService {
 
     @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     @Override
-    public RoomResult joinRoom(String userName, String roomId, boolean isAudience, boolean isDisableCamera,boolean isMusicMode) throws ApiException, Exception {
+    public RoomResult joinRoom(String userName, String roomId, boolean isAudience, boolean isDisableCamera) throws ApiException, Exception {
         CheckUtils.checkArgument(userName != null, "userName must't be null");
         CheckUtils.checkArgument(roomId != null, "roomId must't be null");
 
-        log.info("joinRoom: roomId={}, userName={}, isAudience={}, isDisableCamera={},isMusicMode={}", roomId, userName, isAudience, isDisableCamera,isMusicMode);
+        log.info("joinRoom: roomId={}, userName={}, isAudience={}, isDisableCamera={}", roomId, userName, isAudience, isDisableCamera);
 
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         String userId = sysUser.getId().toString();
@@ -178,7 +178,7 @@ public class RoomServiceImpl implements RoomService {
             }else {
                 roleEnum = RoleEnum.RoleStudent;
             }
-            saveRoomMember(userId, userName, roomId, roleEnum.getValue(), !isDisableCamera,!isMusicMode, curTime);
+            saveRoomMember(userId, userName, roomId, roleEnum.getValue(), !isDisableCamera, curTime);
             IMApiResultInfo resultInfo = imHelper.joinGroup(new String[]{userId}, roomId, roomId);
             if (!resultInfo.isSuccess()) {
                 throw new ApiException(ErrorEnum.ERR_CREATE_ROOM_ERROR, resultInfo.getErrorMessage());
@@ -338,7 +338,7 @@ public class RoomServiceImpl implements RoomService {
         }
     }
 
-    private void saveRoomMember(String userId, String userName, String roomId, int role, boolean cameraOn,boolean musicModeOn, Date joinTime) {
+    private void saveRoomMember(String userId, String userName, String roomId, int role, boolean cameraOn, Date joinTime) {
         RoomMember roomMember = new RoomMember();
         roomMember.setUid(userId);
         roomMember.setName(userName);
@@ -346,7 +346,6 @@ public class RoomServiceImpl implements RoomService {
         roomMember.setRole(role);
         roomMember.setCamera(cameraOn);
         roomMember.setJoinDt(joinTime);
-        roomMember.setMusicMode(musicModeOn);
         roomMemberDao.save(roomMember);
     }
 
@@ -754,23 +753,21 @@ public class RoomServiceImpl implements RoomService {
             taskInfo.setRoomId(roomId);
             taskInfo.setTypeEnum(typeEnum);
             taskInfo.setOnOff(true);
-            taskInfo.setApplyUserId(authUser.getId().toString());
+            taskInfo.setApplyUserId(userId);
             taskInfo.setTargetUserId(userId);
             taskInfo.setTicket(ticket);
             scheduleManager.addTask(taskInfo);
             ControlDeviceNotifyMessage msg = new ControlDeviceNotifyMessage(ActionEnum.Invite.ordinal());
             msg.setTicket(ticket);
             msg.setType(taskInfo.getTypeEnum().ordinal());
-            msg.setOpUserId(authUser.getId().toString());
+            msg.setOpUserId(userId);
             msg.setOpUserName(authUser.getUsername());
-            imHelper.publishMessage(authUser.getId().toString(), userId, roomId, msg);
+            imHelper.publishMessage(userId, userId, roomId, msg);
         } else {
             if (typeEnum.equals(DeviceTypeEnum.Camera)) {
                 roomMemberDao.updateCameraByRidAndUid(roomId, userId, false);
-            } else if (typeEnum.equals(DeviceTypeEnum.Microphone)){
+            } else {
                 roomMemberDao.updateMicByRidAndUid(roomId, userId, false);
-            }else {
-                roomMemberDao.updateMusicByRidAndUid(roomId, userId, false);
             }
             DeviceStateChangedMessage deviceResourceMessage = new DeviceStateChangedMessage(typeEnum.ordinal(), false);
             deviceResourceMessage.setUserId(userId);
@@ -1272,13 +1269,14 @@ public class RoomServiceImpl implements RoomService {
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
+    @Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
     public boolean statusSync(String roomId,String userId) throws Exception {
         log.info("statusSync: roomId={}, userId={}", roomId, userId);
         List<RoomMember> byRidAndUid = roomMemberDao.findByRidAndUid(roomId, userId);
         if(byRidAndUid.size() > 0){
 //            SysUser sysUser = sysUserFeignService.queryUserById(Integer.parseInt(userId));
             SysUser sysUser = teacherDao.getUser(Integer.parseInt(userId));
+            studentDao.lockUser(Integer.parseInt(userId));
             Teacher teacher = teacherDao.get(sysUser.getId());
             CourseSchedule courseSchedule = courseScheduleDao.get(Long.parseLong(roomId.substring(1)));
             log.info("statusSyncLevelRoom: roomId={}, userId={}", roomId, userId);

+ 1 - 1
mec-im/src/main/java/com/ym/service/RoomService.java

@@ -10,7 +10,7 @@ import java.util.List;
  */
 public interface RoomService {
     //everyone
-    public RoomResult joinRoom(String userName, String roomId, boolean isAudience, boolean isDisableCamera,boolean isMusicMode) throws ApiException, Exception;
+    public RoomResult joinRoom(String userName, String roomId, boolean isAudience, boolean isDisableCamera) throws ApiException, Exception;
 
     void signIn(Long roomId);
 

+ 8 - 0
mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java

@@ -356,6 +356,14 @@ public class CourseScheduleController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation(value = "陪练课课程组有效期调整")
+    @PostMapping("/updateCoursesExpireDate")
+    @PreAuthorize("@pcs.hasPermissions('courseSchedule/updateCoursesExpireDate')")
+    public Object updateCoursesExpireDate(String practiceGroupId,Date coursesExpireDate){
+        scheduleService.updateCoursesExpireDate(practiceGroupId,coursesExpireDate);
+        return succeed();
+    }
+
     @ApiOperation(value = "清空老师和学生考勤记录")
     @PostMapping("/cleanAttendance")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/cleanAttendance')")

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

@@ -1223,8 +1223,8 @@ public class ExportController extends BaseController {
         OutputStream ouputStream = null;
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(
-                    new String[]{"学员编号", "学员姓名", "所属分部", "指导老师", "预期安排", "实际安排", "提交次数", "评价次数", "及时评价次数"},
-                    new String[]{"studentId", "studentName", "organName", "teacherName", "expectExercisesNum", "actualExercisesNum", "exercisesReplyNum", "exercisesMessageNum", "exercisesMessageTimelyNum"}, rows);
+                    new String[]{"学员编号", "学员姓名", "所属分部", "指导老师", "预期安排", "实际安排", "提交次数", "评价次数", "及时评价次数", "付费网管课", "VIP课"},
+                    new String[]{"studentId", "studentName", "organName", "teacherName", "expectExercisesNum", "actualExercisesNum", "exercisesReplyNum", "exercisesMessageNum", "exercisesMessageTimelyNum", "existPracticeCourse", "existVipCourse"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
             ouputStream = response.getOutputStream();
@@ -1243,7 +1243,7 @@ public class ExportController extends BaseController {
         }
     }
 
-    @ApiOperation(value = "课外训练-教学导出")
+    @ApiOperation(value = "教师课酬导出")
     @GetMapping("export/isSettlementCourseSalarys")
     @PreAuthorize("@pcs.hasPermissions('export/isSettlementCourseSalarys')")
     public void isSettlementCourseSalarys(CourseSalaryQueryInfo4Web queryInfo, HttpServletResponse response) throws IOException {

+ 19 - 0
mec-web/src/main/java/com/ym/mec/web/controller/StudentExtracurricularExercisesSituationController.java

@@ -4,8 +4,11 @@ import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
 import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.page.StudentCourseHomeworkReplyQueryInfo;
 import com.ym.mec.biz.dal.page.StudentExercisesSituationQueryInfo;
 import com.ym.mec.biz.dal.page.StudentServiceDetailQueryInfo;
+import com.ym.mec.biz.service.ExtracurricularExercisesMessageService;
+import com.ym.mec.biz.service.StudentCourseHomeworkReplyService;
 import com.ym.mec.biz.service.StudentExtracurricularExercisesSituationService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -37,6 +40,12 @@ public class StudentExtracurricularExercisesSituationController extends BaseCont
     private SysUserFeignService sysUserFeignService;
 
     @Autowired
+    private ExtracurricularExercisesMessageService extracurricularExercisesMessageService;
+
+    @Autowired
+    private StudentCourseHomeworkReplyService studentCourseHomeworkReplyService;
+
+    @Autowired
     private EmployeeDao employeeDao;
 
     @ApiOperation(value = "课外训练-教学")
@@ -70,4 +79,14 @@ public class StudentExtracurricularExercisesSituationController extends BaseCont
         return succeed(studentExtracurricularExercisesSituationService.findServiceStudentDetail(queryInfo));
     }
 
+    @ApiOperation(value = "回复查询")
+    @GetMapping("/findStudentHomeworkComments")
+    public Object findStudentHomeworkComments(StudentCourseHomeworkReplyQueryInfo queryInfo){
+        if(!queryInfo.isExtra()){
+            return succeed(studentCourseHomeworkReplyService.queryPage(queryInfo));
+        }else{
+            return succeed(extracurricularExercisesMessageService.findStudentExtraExerciseComments(queryInfo));
+        }
+    }
+
 }

+ 0 - 6
mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -214,12 +214,6 @@ public class TaskController extends BaseController {
 	//学生服务信息统计
 	@GetMapping("/exercisesSituationStatistics")
 	public void exercisesSituationStatistics(){
-		extracurricularExercisesReplyService.exercisesSituationStatistics();
-	}
-
-	//学生服务信息统计2
-	@GetMapping("/exercisesSituationStatistics2")
-	public void exercisesSituationStatistics2(){
 		extracurricularExercisesReplyService.exercisesSituationStatistics2();
 	}