浏览代码

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

yonge 3 年之前
父节点
当前提交
d2269dc83b
共有 56 个文件被更改,包括 869 次插入1247 次删除
  1. 9 12
      cms/src/main/java/com/ym/mec/cms/interceptor/OperationLogInterceptor.java
  2. 9 13
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/interceptor/OperationLogInterceptor.java
  3. 18 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CooperationOrganDao.java
  4. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java
  5. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java
  6. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentCalenderDao.java
  7. 18 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java
  8. 65 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentPaymentOrderExportDto.java
  9. 60 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentVipPracticeExportDto.java
  10. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudCoachPaymentProgram.java
  11. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupPaymentCalenderMember.java
  12. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantConfigDetail.java
  13. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportTypeEnum.java
  14. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexDataType.java
  15. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java
  16. 6 4
      mec-biz/src/main/java/com/ym/mec/biz/event/listener/GroupEventListener.java
  17. 38 34
      mec-biz/src/main/java/com/ym/mec/biz/service/CloudTeacherOrderService.java
  18. 0 3
      mec-biz/src/main/java/com/ym/mec/biz/service/MemberRankSettingService.java
  19. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderService.java
  20. 0 37
      mec-biz/src/main/java/com/ym/mec/biz/service/PracticeGroupService.java
  21. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TenantConfigService.java
  22. 9 17
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudCoachPaymentProgramServiceImpl.java
  23. 48 141
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java
  24. 21 11
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java
  25. 192 33
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java
  26. 10 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java
  27. 1 73
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java
  28. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderDetailServiceImpl.java
  29. 7 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  30. 9 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OaServiceImpl.java
  31. 1 630
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  32. 3 16
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  33. 5 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  34. 23 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  35. 16 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantConfigServiceImpl.java
  36. 2 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantOrderRecordServiceImpl.java
  37. 6 2
      mec-biz/src/main/resources/config/mybatis/CloudCoachPaymentProgramMapper.xml
  38. 1 0
      mec-biz/src/main/resources/config/mybatis/CloudTeacherOrderMapper.xml
  39. 14 0
      mec-biz/src/main/resources/config/mybatis/CooperationOrganMapper.xml
  40. 62 15
      mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml
  41. 2 1
      mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml
  42. 14 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  43. 8 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderMapper.xml
  44. 6 2
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderMemberMapper.xml
  45. 22 1
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  46. 12 54
      mec-common/audit-log/src/main/java/com/yonge/log/interceptor/AuditLogInterceptor.java
  47. 2 28
      mec-student/src/main/java/com/ym/mec/student/controller/ActivityController.java
  48. 2 10
      mec-student/src/main/java/com/ym/mec/student/controller/PracticeGroupController.java
  49. 4 5
      mec-student/src/main/java/com/ym/mec/student/interceptor/OperationLogInterceptor.java
  50. 4 5
      mec-teacher/src/main/java/com/ym/mec/teacher/interceptor/OperationLogInterceptor.java
  51. 2 1
      mec-web/src/main/java/com/ym/mec/web/controller/CloudTeacherOrderController.java
  52. 7 1
      mec-web/src/main/java/com/ym/mec/web/controller/TenantConfigController.java
  53. 8 37
      mec-web/src/main/java/com/ym/mec/web/controller/student/StudentAttendanceController.java
  54. 9 13
      mec-web/src/main/java/com/ym/mec/web/interceptor/OperationLogInterceptor.java
  55. 10 10
      mec-web/src/main/resources/exportColumnMapper.ini
  56. 10 13
      mec-websocket/src/main/java/com/ym/mec/web/interceptor/OperationLogInterceptor.java

+ 9 - 12
cms/src/main/java/com/ym/mec/cms/interceptor/OperationLogInterceptor.java

@@ -1,18 +1,14 @@
 package com.ym.mec.cms.interceptor;
 
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.yonge.log.interceptor.AuditLogInterceptor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Component;
 
-import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.auth.api.entity.SysUser;
-import com.yonge.log.interceptor.AuditLogInterceptor;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 @Component
 public class OperationLogInterceptor extends AuditLogInterceptor {
@@ -22,12 +18,13 @@ public class OperationLogInterceptor extends AuditLogInterceptor {
 	private SysUserFeignService sysUserFeignService;
 
 	@Override
-	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
+	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		if (sysUser != null && sysUser.getId() != null) {
-			setUsername(sysUser.getRealName(),sysUser.getId(), sysUser.getTenantId() + "");
+			request.setAttribute("userId",sysUser.getId());
+			request.setAttribute("username",sysUser.getRealName());
 		}
-		return true;
+		super.afterCompletion(request, response, handler, ex);
 	}
 
 }

+ 9 - 13
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/interceptor/OperationLogInterceptor.java

@@ -1,19 +1,15 @@
 package com.ym.mec.auth.interceptor;
 
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.service.SysUserService;
 import com.ym.mec.common.security.AuthUser;
 import com.ym.mec.common.security.SecurityUtils;
 import com.yonge.log.interceptor.AuditLogInterceptor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 @Component
 public class OperationLogInterceptor extends AuditLogInterceptor {
@@ -22,16 +18,16 @@ public class OperationLogInterceptor extends AuditLogInterceptor {
 	private SysUserService sysUserService;
 
 	@Override
-	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
+	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
 		AuthUser authUser = SecurityUtils.getUser();
 		if (authUser != null) {
 			SysUser sysUser = sysUserService.get(authUser.getUserId());
-
 			if (sysUser != null) {
-				setUsername(sysUser.getRealName(), sysUser.getId(), sysUser.getTenantId() + "");
+				request.setAttribute("userId",sysUser.getId());
+				request.setAttribute("username",sysUser.getRealName());
 			}
 		}
-		return true;
+		super.afterCompletion(request, response, handler, ex);
 	}
 
 }

+ 18 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CooperationOrganDao.java

@@ -70,4 +70,22 @@ public interface CooperationOrganDao extends BaseDAO<Integer, CooperationOrgan>
      * @return
      */
     List<CooperationOrgan> getCooperationOrganByEduTeacherId(@Param("userId") Integer userId);
+
+    /**
+    * @description: 获取合作单位创建的第一个进行中乐团
+     * @param cooperationOrganId
+    * @return java.lang.String
+    * @author zx
+    * @date 2022/3/16 13:46
+    */
+    String getFirstGroup(Integer cooperationOrganId);
+
+    /**
+    * @description: 获取合作单位第一个乐团
+     * @param
+    * @return java.util.List<java.util.Map<java.lang.Integer,java.lang.String>>
+    * @author zx
+    * @date 2022/3/17 11:36
+    */
+    List<Map<Integer, String>> findFirstMusic();
 }

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java

@@ -577,4 +577,24 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
 	Boolean hasStudentMusicTheoryCourseInfo(@Param("organId") String organId, @Param("tenantId") Integer tenantId, @Param("groupType") String groupType);
 
     List<ExportStudentCourseInfoDto> queryStudentCourseInfo(@Param("organId") String organId, @Param("tenantId") Integer tenantId, @Param("groupType") String groupType);
+
+    /**
+    * @description: 获取学员第一个课程组编号
+     * @param groupType
+    * @return int
+    * @author zx
+    * @date 2022/3/16 10:32
+    */
+    List<Map<Integer,Integer>> findUserFirstVipMap(@Param("groupType") String groupType, @Param("studentIds") List<Integer> studentIds);
+
+    /**
+    * @description: 获取学员声部班老师
+     * @param studentIds
+    * @return java.util.List<com.ym.mec.biz.dal.dto.BaseNameDto>
+    * @author zx
+    * @date 2022/3/16 18:57
+    */
+    List<BaseNameDto> queryClassTeacher(@Param("studentIds") List<Integer> studentIds);
+
+    List<BaseNameDto> queryFirstNotStartTeacher(@Param("studentIds") List<Integer> studentIds, @Param("groupType") String groupType);
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java

@@ -9,6 +9,7 @@ import com.ym.mec.biz.dal.entity.School;
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
 import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
 import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
+import com.ym.mec.biz.dal.page.IndexDataQueryInfo;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImGroupModel;
 import org.apache.ibatis.annotations.Param;
@@ -495,4 +496,13 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
     * @date 2022/3/4 11:40
     */
     List<HasFreeCourseTimesDto> queryHasFreeCourseTimes(Map<String, Object> params);
+
+    /**
+    * @description: 获取首页退学学员数量
+     * @param queryInfo
+    * @return java.lang.Integer
+    * @author zx
+    * @date 2022/3/17 16:20
+    */
+    Integer countQuitNum(@Param("queryInfo") IndexDataQueryInfo queryInfo);
 }

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

@@ -326,4 +326,13 @@ public interface MusicGroupPaymentCalenderDao extends BaseDAO<Long, MusicGroupPa
     List<MusicGroupPaymentCalenderResultDto> queryCalenderPage(Map<String, Object> params);
     
     List<Map<String, BigDecimal>> queryChargeStandard(String musicGroupIdList);
+
+    /**
+    * @description: 获取缴费项目关联的合作单为编号
+     * @param calenderIds
+    * @return java.util.List<java.util.Map<java.lang.Long,java.lang.Integer>>
+    * @author zx
+    * @date 2022/3/17 11:18
+    */
+    List<Map<Long, Integer>> findCooperationByIds(@Param("calenderIds") List<Long> calenderIds);
 }

+ 18 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java

@@ -720,4 +720,22 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
     * @date 2021/11/16 10:26
     */
     List<Map<Long,BigDecimal>> querySubjectAmount(String musicGroupId);
+
+    /**
+    * @description: 获取学员最近加入的一个乐团编号
+     * @param userIds
+    * @return java.lang.String
+    * @author zx
+    * @date 2022/3/16 14:10
+    */
+    List<Map<Integer,String>> getLastMusicGroupId(@Param("userIds") List<Integer> userIds);
+
+    /**
+    * @description: 获取学员最近加入的一个乐团编号
+     * @param userIds
+    * @return java.lang.String
+    * @author zx
+    * @date 2022/3/16 14:10
+    */
+    List<Map<Integer,String>> getLastMusicGroupName(@Param("userIds") List<Integer> userIds);
 }

+ 65 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentPaymentOrderExportDto.java

@@ -1,8 +1,11 @@
 package com.ym.mec.biz.dal.dto;
 
+import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
+import com.ym.mec.common.enums.BaseEnum;
+import io.swagger.annotations.ApiModelProperty;
 
 import java.math.BigDecimal;
 import java.util.List;
@@ -100,6 +103,68 @@ public class StudentPaymentOrderExportDto extends StudentPaymentOrder {
     //订单金额
     private BigDecimal orderAmount = BigDecimal.ZERO;
 
+    public enum TypeDesc implements BaseEnum<String, StudentPaymentOrderExportDto.TypeDesc> {
+
+        NEW_VIP("NEW_VIP", "VIP课新增"),
+        RENEW_VIP("RENEW_VIP", "VIP课续费"),
+        NEW_MUSIC("NEW_MUSIC", "乐团新开"),
+        ADD_MUSIC("ADD_MUSIC", "乐团扩招"),
+        RENEW_MUSIC("RENEW_MUSIC", "乐团续费");
+
+        private String code;
+
+        private String msg;
+
+        TypeDesc(String code, String msg) {
+            this.code = code;
+            this.msg = msg;
+        }
+
+        @Override
+        public String getCode() {
+            return code;
+        }
+
+        public String getMsg() {
+            return msg;
+        }
+    }
+
+    //课程形态描述
+    //学员没有历史VIP课程则导出为【VIP课新增】
+    //学员有历史VIP课程到导出为【VIP课续费】……
+    private TypeDesc typeDesc;
+
+    //该笔订单为乐团订单则导出该乐团的【乐团名称】
+    //该笔订单非乐团订单时,查询学员是否有在读乐团,无则导出为空,有则导出该学员【进行中】【暂停】乐团名称,进行中>暂停,多个进行中则导出加入乐团时间最近的乐团名称
+    private String feeMusicGroupId;
+
+    private String feeMusicGroupName;
+
+    public String getFeeMusicGroupName() {
+        return feeMusicGroupName;
+    }
+
+    public void setFeeMusicGroupName(String feeMusicGroupName) {
+        this.feeMusicGroupName = feeMusicGroupName;
+    }
+
+    public String getFeeMusicGroupId() {
+        return feeMusicGroupId;
+    }
+
+    public void setFeeMusicGroupId(String feeMusicGroupId) {
+        this.feeMusicGroupId = feeMusicGroupId;
+    }
+
+    public TypeDesc getTypeDesc() {
+        return typeDesc;
+    }
+
+    public void setTypeDesc(TypeDesc typeDesc) {
+        this.typeDesc = typeDesc;
+    }
+
     public BigDecimal getOrderAmount() {
         return orderAmount;
     }

+ 60 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentVipPracticeExportDto.java

@@ -11,6 +11,14 @@ public class StudentVipPracticeExportDto{
 
     private Integer vipNotStartNum;
 
+    private Integer vipNotStartTeacherId;
+
+    private String vipNotStartTeacherName;
+
+    private Integer normalClassTeacherId;
+
+    private String normalClassTeacherName;
+
     private Integer vipOverTeacherId;
 
     private String vipOverTeacherName;
@@ -27,6 +35,10 @@ public class StudentVipPracticeExportDto{
 
     private String practiceOverTeacherName;
 
+    private Integer practiceNotStartTeacherId;
+
+    private String practiceNotStartTeacherName;
+
     private String practiceNotStartTeacherIds;
 
     private String practiceNotStartTeacherNames;
@@ -41,6 +53,54 @@ public class StudentVipPracticeExportDto{
 
     private String subjectName;
 
+    public Integer getNormalClassTeacherId() {
+        return normalClassTeacherId;
+    }
+
+    public void setNormalClassTeacherId(Integer normalClassTeacherId) {
+        this.normalClassTeacherId = normalClassTeacherId;
+    }
+
+    public String getNormalClassTeacherName() {
+        return normalClassTeacherName;
+    }
+
+    public void setNormalClassTeacherName(String normalClassTeacherName) {
+        this.normalClassTeacherName = normalClassTeacherName;
+    }
+
+    public Integer getVipNotStartTeacherId() {
+        return vipNotStartTeacherId;
+    }
+
+    public void setVipNotStartTeacherId(Integer vipNotStartTeacherId) {
+        this.vipNotStartTeacherId = vipNotStartTeacherId;
+    }
+
+    public String getVipNotStartTeacherName() {
+        return vipNotStartTeacherName;
+    }
+
+    public void setVipNotStartTeacherName(String vipNotStartTeacherName) {
+        this.vipNotStartTeacherName = vipNotStartTeacherName;
+    }
+
+    public Integer getPracticeNotStartTeacherId() {
+        return practiceNotStartTeacherId;
+    }
+
+    public void setPracticeNotStartTeacherId(Integer practiceNotStartTeacherId) {
+        this.practiceNotStartTeacherId = practiceNotStartTeacherId;
+    }
+
+    public String getPracticeNotStartTeacherName() {
+        return practiceNotStartTeacherName;
+    }
+
+    public void setPracticeNotStartTeacherName(String practiceNotStartTeacherName) {
+        this.practiceNotStartTeacherName = practiceNotStartTeacherName;
+    }
+
     public BigDecimal getCourseBalance() {
         return courseBalance;
     }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudCoachPaymentProgram.java

@@ -47,6 +47,9 @@ public class CloudCoachPaymentProgram extends BaseEntity {
 	
 	/** 原价 */
 	private java.math.BigDecimal originalAmount = BigDecimal.ZERO;
+
+	/** 是否自动激活团练宝缴费 */
+	private Boolean autoActivationFlag = false;
 	
 	/** 创建人 */
 	private Integer operator;
@@ -83,6 +86,14 @@ public class CloudCoachPaymentProgram extends BaseEntity {
 	@ApiModelProperty(value = "审核时间", required = false)
 	private Date auditTime;
 
+	public Boolean getAutoActivationFlag() {
+		return autoActivationFlag;
+	}
+
+	public void setAutoActivationFlag(Boolean autoActivationFlag) {
+		this.autoActivationFlag = autoActivationFlag;
+	}
+
 	public enum StatusEnum implements BaseEnum<String, CloudCoachPaymentProgram.StatusEnum> {
 		AUDITING("审核中"), REJECT("审核拒绝"), OPEN("审核通过");
 

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupPaymentCalenderMember.java

@@ -15,6 +15,17 @@ public class MusicGroupPaymentCalenderMember extends MusicGroupPaymentCalenderBa
 
     private Integer organId;
 
+    @ApiModelProperty(value = "自动激活团练宝标识", required = false)
+    private Boolean autoActivationFlag = false;
+
+    public Boolean getAutoActivationFlag() {
+        return autoActivationFlag;
+    }
+
+    public void setAutoActivationFlag(Boolean autoActivationFlag) {
+        this.autoActivationFlag = autoActivationFlag;
+    }
+
     public Integer getOrganId() {
         return organId;
     }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantConfigDetail.java

@@ -23,11 +23,20 @@ public class TenantConfigDetail implements Serializable {
     private CloudRoomRule cloud_room_rule;
 
     public static class MemberConfig implements Serializable {
+        private BigDecimal day_divide;
         private BigDecimal month_divide;
         private BigDecimal quarter_divide;
         private BigDecimal half_year_divide;
         private BigDecimal year_divide;
 
+        public BigDecimal getDay_divide() {
+            return day_divide;
+        }
+
+        public void setDay_divide(BigDecimal day_divide) {
+            this.day_divide = day_divide;
+        }
+
         public BigDecimal getMonth_divide() {
             return month_divide;
         }

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

@@ -6,7 +6,7 @@ public enum ExportTypeEnum implements BaseEnum<Integer, ExportTypeEnum> {
 	ORDER(0, "订单列表"),
 	COURSE_SCHEDULE(1, "课表列表"),
 	ROUTE_ORDER(2, "财务管理"),
-	STUDENT_VIP_PRACTICE(3, "学员小课记录"),
+	STUDENT_VIP_PRACTICE(3, "VIP网管课耗导出"),
 	STUDENT_MUSIC_THEORY_COURSE_INFO(4, "网管课学员课程信息导出"),
 	STUDENT_VIP_COURSE_INFO(5, "VIP课学员课程信息导出");
 

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

@@ -67,7 +67,7 @@ public enum IndexDataType implements BaseEnum<String, IndexDataType> {
     ADD_STUDENT_REGISTRATION_NUM("ADD_STUDENT_REGISTRATION_NUM", "新增注册学员", false, true),
     MUSIC_GROUP_STUDENT("MUSIC_GROUP_STUDENT","乐团在读学员", false, false),
     NEWLY_STUDENT_NUM("NEWLY_STUDENT_NUM","乐团新增学员", false, true),
-    QUIT_MUSIC_GROUP_STUDENT_NUM("QUIT_MUSIC_GROUP_STUDENT_NUM","退学员", false, true),
+    QUIT_MUSIC_GROUP_STUDENT_NUM("QUIT_MUSIC_GROUP_STUDENT_NUM","退学员", false, true),
     VIP_PRACTICE_STUDENT_NUM("VIP_PRACTICE_STUDENT_NUM", "VIP/网管在读", false, false),
     VIP_PRACTICE_ADD_STUDENT_NUM("VIP_PRACTICE_ADD_STUDENT_NUM", "VIP/网管新增", false, true),
 

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

@@ -13,6 +13,8 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     SMS_VERIFY_CODE_LOGIN("SMS_VERIFY_CODE_LOGIN", "验证码登录"),
     KAPTCHA_SESSION_KEY("KAPTCHA_SESSION_KEY", "登录图形验证码"),
     SMS_PAYMENT_MESSAGE("SMS_PAYMENT_MESSAGE", "缴费通知"),
+    SMS_STANDARD_NO_QUALIFIED("SMS_STANDARD_NO_QUALIFIED", "学习未达标"),
+    SMS_STANDARD_QUALIFIED("SMS_STANDARD_QUALIFIED", "学习已达标"),
 //    SMS_PAYMENT_SUCCESS("SMS_PAYMENT_SUCCESS", "缴费成功"),
 //    SMS_RENEW_SUCCESS("SMS_RENEW_SUCCESS", "续费成功"),
 //    SMS_BALANCE_PAY("SMS_BALANCE_PAY", "余额充值"),

+ 6 - 4
mec-biz/src/main/java/com/ym/mec/biz/event/listener/GroupEventListener.java

@@ -54,16 +54,18 @@ public class GroupEventListener {
             return;
         }
         List<StudentRegistration> studentNormalRegistration = studentRegistrationDao.getStudentNormalRegistration(new HashSet<>(studentIds));
-        Map<Integer, Set<String>> userGroupIdMap = studentNormalRegistration.stream().collect(Collectors.groupingBy(StudentRegistration::getUserId, Collectors.mapping(StudentRegistration::getMusicGroupId, Collectors.toSet())));
+        Map<Integer, Set<String>> userGroupIdMap = studentNormalRegistration.stream().
+                collect(Collectors.groupingBy(StudentRegistration::getUserId,
+                        Collectors.mapping(StudentRegistration::getMusicGroupId, Collectors.toSet())));
         int updateNum = 0;
         for (Integer studentId : studentIds) {
-            if(userGroupIdMap.containsKey(studentId)&&userGroupIdMap.get(studentId).size()>1){
+            if(userGroupIdMap.containsKey(studentId) && userGroupIdMap.get(studentId).size() > 1){
                 continue;
             }
-            if(userGroupIdMap.containsKey(studentId)&&!userGroupIdMap.get(studentId).contains(musicGroupStatusChangeEvent.getMusicGroupId())){
+            if(userGroupIdMap.containsKey(studentId) && !userGroupIdMap.get(studentId).contains(musicGroupStatusChangeEvent.getMusicGroupId())){
                 continue;
             }
-            updateNum+=1;
+            updateNum += 1;
         }
         LocalDate nowDate = LocalDate.now();
         String dayStr = nowDate.toString();

+ 38 - 34
mec-biz/src/main/java/com/ym/mec/biz/service/CloudTeacherOrderService.java

@@ -6,6 +6,7 @@ import com.ym.mec.biz.dal.page.CloudTeacherAddQueryInfo;
 import com.ym.mec.biz.dal.page.CloudTeacherOrderQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.Date;
@@ -30,14 +31,15 @@ public interface CloudTeacherOrderService extends BaseService<Long, CloudTeacher
      */
     void addOrderDetail2CloudTeacher(StudentPaymentOrder order, BigDecimal cloudTeacherFee);
 
-
     /**
-     * 将生效的云教练订单加入
-     *
+    * @description: 激活团练宝
+     * @param now
      * @param cloudTeacherOrder
-     * @return
-     */
-    CloudTeacher addStudentCloudTeacher(CloudTeacherOrder cloudTeacherOrder);
+    * @return void
+    * @author zx
+    * @date 2022/3/21 11:10
+    */
+    void activationMember(Date now, CloudTeacherOrder cloudTeacherOrder);
 
     Date calcCloudTeacherOrderTime(CloudTeacherOrder cloudTeacherOrder, Date startTime, Date endTime);
 
@@ -59,32 +61,6 @@ public interface CloudTeacherOrderService extends BaseService<Long, CloudTeacher
     List<CloudTeacherOrder> getStudentCloudTeacherOrder(Integer studentId, String musicGroupId);
 
     /**
-     * 退云教练
-     *
-     * @param cloudTeacherOrders
-     * @param refundAmount
-     * @return
-     */
-    Boolean quitCloudTeacherOrders(List<CloudTeacherOrder> cloudTeacherOrders, BigDecimal refundAmount);
-
-    /**
-     * 退云教练
-     *
-     * @param order
-     * @param refundAmount
-     * @return
-     */
-    Boolean quitCloudTeacherOrder(CloudTeacherOrder order, BigDecimal refundAmount);
-
-    /**
-     * 根据studentPaymentOrder表id查询对象
-     *
-     * @param orderId
-     * @return
-     */
-    CloudTeacherOrder queryByOrderId(Long orderId);
-
-    /**
      * 根据订单编号查询订单详情
      *
      * @param orderId
@@ -116,7 +92,35 @@ public interface CloudTeacherOrderService extends BaseService<Long, CloudTeacher
 
     PageInfo<CloudTeacherStudent> queryRecord(CloudTeacherOrderQueryInfo cloudTeacherOrderQueryInfo);
 
-    boolean addStudents(CloudTeacherAddQueryInfo cloudTeacherAddQueryInfo);
-
     int sendSms(TenantOrderRecord record);
+
+    /**
+    * @description: 批量新增学员云教练
+     * @param cloudTeacherOrder
+     * @param userIds
+     * @param autoActivationFlag
+    * @return void
+    * @author zx
+    * @date 2022/3/21 11:21
+    */
+    void batchInsert(CloudTeacherOrder cloudTeacherOrder, List<Integer> userIds,Boolean autoActivationFlag);
+
+    /**
+    * @description: 通过团练宝缴费项目获取初始化的云教练订单
+     * @param cloudCoachPaymentProgram
+    * @return com.ym.mec.biz.dal.entity.CloudTeacherOrder
+    * @author zx
+    * @date 2022/3/21 11:40
+    */
+    CloudTeacherOrder getInitCloudTeacherOrder(CloudCoachPaymentProgram cloudCoachPaymentProgram);
+
+    /**
+    * @description: 保存云教练订单
+     * @param cloudTeacherOrder
+     * @param autoActivationFlag
+    * @return void
+    * @author zx
+    * @date 2022/3/21 11:59
+    */
+    void save(CloudTeacherOrder cloudTeacherOrder,Boolean autoActivationFlag);
 }

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

@@ -3,11 +3,9 @@ package com.ym.mec.biz.service;
 import com.ym.mec.biz.dal.dto.MemberPayParamDto;
 import com.ym.mec.biz.dal.entity.MemberRankSetting;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
-import com.ym.mec.biz.dal.enums.PeriodEnum;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.service.BaseService;
 
-import java.math.BigDecimal;
 import java.util.List;
 
 public interface MemberRankSettingService extends BaseService<Integer, MemberRankSetting> {
@@ -41,5 +39,4 @@ public interface MemberRankSettingService extends BaseService<Integer, MemberRan
      */
     boolean orderCallback(StudentPaymentOrder studentPaymentOrder);
 
-    HttpResponseResult ActiveBuy(Integer id, Integer memberRankId, PeriodEnum month, BigDecimal amount, boolean isUseBalance, Integer buyNum, int giveNum, int activeRemark, String remark, boolean repay) throws Exception;
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderService.java

@@ -221,4 +221,13 @@ public interface MusicGroupPaymentCalenderService extends BaseService<Long, Musi
 	* @date 2022/3/4 11:35
 	*/
 	PageInfo<HasFreeCourseTimesDto> queryHasFreeCourseTimesStudent(BaseOrganQueryInfo queryInfo);
+
+	/**
+	* @description: 获取缴费项目关联的合作单为编号
+	 * @param calenderIds
+	* @return java.util.List<java.util.Map<java.lang.Long,java.lang.Integer>>
+	* @author zx
+	* @date 2022/3/17 11:16
+	*/
+	Map<Long, Integer>  findCooperationByIds(List<Long> calenderIds);
 }

+ 0 - 37
mec-biz/src/main/java/com/ym/mec/biz/service/PracticeGroupService.java

@@ -165,7 +165,6 @@ public interface PracticeGroupService extends BaseService<Long, PracticeGroup> {
      * @date 2020/2/10
      * @param userId: 用户编号
      * @param teacherId: 教师编号
-     * @param firstClassTime: 第一节课开始时间
      * @param buyMonths: 购买月数
      * @return java.util.Map
      */
@@ -207,24 +206,6 @@ public interface PracticeGroupService extends BaseService<Long, PracticeGroup> {
      */
 	void orderCallback(StudentPaymentOrder order);
 
-    /**
-    * @description: 活动购买支付订单回调
-     * @param order
-    * @return void
-    * @author zx
-    * @date 2021/10/13 19:52
-    */
-	void activityOrderCallback(StudentPaymentOrder order);
-
-    /**
-    * @description: 2021双十一活动订单回调
-     * @param order
-    * @return void
-    * @author zx
-    * @date 2021/10/13 19:52
-    */
-	void doubleEleven2021OrderCallback(StudentPaymentOrder order);
-
 	/**
 	 * @describe 获取用户历史购买的陪练课
 	 * @author Joburgess
@@ -367,15 +348,6 @@ public interface PracticeGroupService extends BaseService<Long, PracticeGroup> {
     */
 	HttpResponseResult buyTeacherPracticeGroup(PracticeGroupBuyParamsDto practiceGroupBuyParams) throws Exception;
 
-    /**
-    * @description: 营销活动网管课购买
-     * @param practiceGroupBuyParams
-    * @return com.ym.mec.common.entity.HttpResponseResult
-    * @author zx
-    * @date 2021/10/13 15:12
-    */
-	Object buyActivityPracticeGroup(PracticeGroupBuyParamsDto practiceGroupBuyParams) throws Exception;
-
 	/**
 	* @description: 获取学生端网管课购买详情
 	 * @param groupId
@@ -397,15 +369,6 @@ public interface PracticeGroupService extends BaseService<Long, PracticeGroup> {
 	Object getPracticeGroupPayInfo(Long practiceGroupId, Integer userId);
 
 	/**
-	* @description: 2021双十一活动购买
-	 * @param buyDoubleEleven2021Dto
-	* @return java.lang.Object
-	* @author zx
-	* @date 2021/10/20 10:39
-	*/
-	HttpResponseResult buyDoubleEleven2021(BuyDoubleEleven2021Dto buyDoubleEleven2021Dto) throws Exception;
-
-	/**
 	* @description: 获取学生指定网管课的剩余课时费用
 	 * @param practiceGroupId
 	* @return java.lang.Object

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TenantConfigService.java

@@ -18,4 +18,13 @@ public interface TenantConfigService extends IService<TenantConfig> {
     Map<String, BigDecimal> getRule(Integer tenantId);
 
     Map<String, BigDecimal> getCloudRoomRule(String config);
+
+    /**
+    * @description: 是否可以自动激活团练宝
+     * @param tenantId
+    * @return java.lang.Boolean
+    * @author zx
+    * @date 2022/3/21 10:18
+    */
+    Boolean autoActivationFlag(Integer tenantId);
 }

+ 9 - 17
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudCoachPaymentProgramServiceImpl.java

@@ -6,12 +6,8 @@ import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.entity.CloudCoachPaymentProgram;
 import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
 import com.ym.mec.biz.dal.entity.MemberRankSetting;
-import com.ym.mec.biz.dal.entity.TenantInfo;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
-import com.ym.mec.biz.service.CloudCoachPaymentProgramService;
-import com.ym.mec.biz.service.MemberFeeSettingService;
-import com.ym.mec.biz.service.SysConfigService;
-import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
@@ -25,7 +21,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.time.Instant;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -43,9 +38,9 @@ public class CloudCoachPaymentProgramServiceImpl extends BaseServiceImpl<Long, C
 	@Autowired
 	private MemberRankSettingDao memberRankSettingDao;
 	@Autowired
-	private CloudTeacherOrderDao cloudTeacherOrderDao;
+	private TenantConfigService tenantConfigService;
 	@Autowired
-	private TenantInfoDao tenantInfoDao;
+	private CloudTeacherOrderService cloudTeacherOrderService;
 	@Autowired
 	private SysConfigDao sysConfigDao;
 	@Autowired
@@ -82,6 +77,8 @@ public class CloudCoachPaymentProgramServiceImpl extends BaseServiceImpl<Long, C
 		cloudCoachPaymentProgram.setTenantId(tenantId);
 		//获取缴费状态
 		cloudCoachPaymentProgram.setStatus(getStatus(cloudCoachPaymentProgram));
+		//是否自动激活
+		cloudCoachPaymentProgram.setAutoActivationFlag(tenantConfigService.autoActivationFlag(tenantId));
 		cloudCoachPaymentProgramDao.insert(cloudCoachPaymentProgram);
 		studentCloudCoachPaymentDetailsDao.batchInsert(cloudCoachPaymentProgram.getId(),userIds,tenantId);
 		if(cloudCoachPaymentProgram.getStatus() == CloudCoachPaymentProgram.StatusEnum.OPEN){
@@ -115,15 +112,8 @@ public class CloudCoachPaymentProgramServiceImpl extends BaseServiceImpl<Long, C
 			cloudCoachPaymentProgram.setPaymentUserNum(userIds.size());
 			cloudCoachPaymentProgramDao.update(cloudCoachPaymentProgram);
 			studentCloudCoachPaymentDetailsDao.updatePaymentStatus(cloudCoachPaymentProgram.getId());
-			CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
-			cloudTeacherOrder.setTime(cloudCoachPaymentProgram.getMemberNum().intValue());
-			cloudTeacherOrder.setOrganId(cloudCoachPaymentProgram.getOrganId());
-			cloudTeacherOrder.setType(cloudCoachPaymentProgram.getPeriod());
-			cloudTeacherOrder.setLevel(cloudCoachPaymentProgram.getMemberRankSettingId());
-			cloudTeacherOrder.setAmount(BigDecimal.ZERO);
-			cloudTeacherOrder.setStatus(1);
-			cloudTeacherOrder.setRemark(cloudCoachPaymentProgram.getRemark());
-			cloudTeacherOrderDao.batchInsert(cloudTeacherOrder,cloudCoachPaymentProgram.getUserIds());
+			CloudTeacherOrder cloudTeacherOrder = cloudTeacherOrderService.getInitCloudTeacherOrder(cloudCoachPaymentProgram);
+			cloudTeacherOrderService.batchInsert(cloudTeacherOrder,cloudCoachPaymentProgram.getUserIds(),cloudCoachPaymentProgram.getAutoActivationFlag());
 		}else {
 			//推送缴费消息
 			//TenantInfo tenantInfo = tenantInfoDao.selectById(cloudCoachPaymentProgram.getTenantId());
@@ -149,6 +139,8 @@ public class CloudCoachPaymentProgramServiceImpl extends BaseServiceImpl<Long, C
 			throw new BizException("当前状态缴费项目不可编辑");
 		}
 		cloudCoachPaymentProgram.setStatus(getStatus(cloudCoachPaymentProgram));
+		//是否自动激活
+		cloudCoachPaymentProgram.setAutoActivationFlag(tenantConfigService.autoActivationFlag(cloudCoachPaymentProgram.getTenantId()));
 		cloudCoachPaymentProgramDao.update(cloudCoachPaymentProgram);
 		if(cloudCoachPaymentProgram.getStatus() == CloudCoachPaymentProgram.StatusEnum.OPEN){
 			List<Integer> userIds = studentCloudCoachPaymentDetailsDao.findUserByProgramId(cloudCoachPaymentProgram.getId());

+ 48 - 141
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java

@@ -3,7 +3,6 @@ package com.ym.mec.biz.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.ym.mec.biz.dal.dao.CloudTeacherDao;
 import com.ym.mec.biz.dal.dao.CloudTeacherOrderDao;
 import com.ym.mec.biz.dal.dto.CloudTeacherOrderDto;
 import com.ym.mec.biz.dal.dto.Mapper;
@@ -11,11 +10,9 @@ import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.dal.enums.TenantOrderRecordEnum;
-import com.ym.mec.biz.dal.page.CloudTeacherAddQueryInfo;
 import com.ym.mec.biz.dal.page.CloudTeacherOrderQueryInfo;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
-import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.WrapperUtil;
 import com.ym.mec.common.service.IdGeneratorService;
@@ -43,8 +40,6 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
     @Autowired
     private CloudTeacherOrderDao cloudTeacherOrderDao;
     @Autowired
-    private CloudTeacherDao cloudTeacherDao;
-    @Autowired
     private StudentService studentService;
     @Autowired
     private MusicGroupPaymentCalenderMemberService musicGroupPaymentCalenderMemberService;
@@ -67,21 +62,6 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
     @Autowired
     private TenantInfoService tenantInfoService;
 
-    @Override
-    public boolean addStudents(CloudTeacherAddQueryInfo cloudTeacherAddQueryInfo) {
-        for (Integer stId : cloudTeacherAddQueryInfo.getStudentIds()) {
-            CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
-            cloudTeacherOrder.setStudentId(stId);
-            cloudTeacherOrder.setTime(cloudTeacherAddQueryInfo.getTimes());
-            cloudTeacherOrder.setType(cloudTeacherAddQueryInfo.getAddType());
-            cloudTeacherOrder.setLevel(1);
-            cloudTeacherOrder.setMusicGroupId(cloudTeacherAddQueryInfo.getMusicGroupId());
-            cloudTeacherOrder.setTenantId(cloudTeacherAddQueryInfo.getTenantId());
-            cloudTeacherOrderDao.insert(cloudTeacherOrder);
-            this.addStudentCloudTeacher(cloudTeacherOrder);
-        }
-        return true;
-    }
 
     @Override
     public PageInfo<CloudTeacherStudent> queryRecord(CloudTeacherOrderQueryInfo queryInfo) {
@@ -242,6 +222,42 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
         return 0;
     }
 
+    @Override
+    public void batchInsert(CloudTeacherOrder cloudTeacherOrder, List<Integer> userIds,Boolean autoActivationFlag) {
+        if(autoActivationFlag){
+            Date date = new Date();
+            for (Integer userId : userIds) {
+                cloudTeacherOrder.setStudentId(userId);
+                this.activationMember(date,cloudTeacherOrder);
+            }
+        }else {
+            cloudTeacherOrderDao.batchInsert(cloudTeacherOrder,userIds);
+        }
+    }
+
+    @Override
+    public CloudTeacherOrder getInitCloudTeacherOrder(CloudCoachPaymentProgram cloudCoachPaymentProgram) {
+        CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
+        cloudTeacherOrder.setTime(cloudCoachPaymentProgram.getMemberNum().intValue());
+        cloudTeacherOrder.setOrganId(cloudCoachPaymentProgram.getOrganId());
+        cloudTeacherOrder.setType(cloudCoachPaymentProgram.getPeriod());
+        cloudTeacherOrder.setLevel(cloudCoachPaymentProgram.getMemberRankSettingId());
+        cloudTeacherOrder.setAmount(BigDecimal.ZERO);
+        cloudTeacherOrder.setStatus(1);
+        cloudTeacherOrder.setRemark(cloudCoachPaymentProgram.getRemark());
+        return cloudTeacherOrder;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void save(CloudTeacherOrder cloudTeacherOrder,Boolean autoActivationFlag) {
+        if(autoActivationFlag){
+            this.activationMember(new Date(),cloudTeacherOrder);
+        }else {
+            cloudTeacherOrderDao.insert(cloudTeacherOrder);
+        }
+    }
+
     public Boolean payCheck(String orderNo) {
         TenantOrderRecord record = tenantOrderRecordService.getOne(new QueryWrapper<TenantOrderRecord>().eq("order_no_", orderNo));
         return record.getOrderState() == 1;
@@ -261,53 +277,24 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
         cloudTeacherOrder.setAmount(cloudTeacherFee);
         cloudTeacherOrder.setStudentId(order.getUserId());
         cloudTeacherOrder.setStatus(1);
-        cloudTeacherOrderDao.insert(cloudTeacherOrder);
+        //保存云教练订单
+        this.save(cloudTeacherOrder,calenderMember.getAutoActivationFlag());
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public CloudTeacher addStudentCloudTeacher(CloudTeacherOrder cloudTeacherOrder) {
-        Date nowDate = new Date();
-        CloudTeacher cloudTeacher = cloudTeacherDao.getByStudentId(cloudTeacherOrder.getStudentId());
-        Date startTime;
-        Date endTime = null;
-        Date endBaseTime;
-
-        //更新student表信息
-        studentService.updateMemberRank(cloudTeacherOrder);
-
-        if (cloudTeacher == null) {
-            cloudTeacher = new CloudTeacher();
-            startTime = DateUtil.trunc(nowDate);
-            endBaseTime = startTime;
-            endTime = calcCloudTeacherOrderTime(cloudTeacherOrder, startTime, endTime);
-            cloudTeacher.setStudentId(cloudTeacherOrder.getStudentId());
-            cloudTeacher.setLevel(cloudTeacherOrder.getLevel());
-            cloudTeacher.setStartTime(startTime);
-            cloudTeacher.setEndTime(endTime);
-            cloudTeacherDao.insert(cloudTeacher);
-        } else {
-            startTime = cloudTeacher.getStartTime();
-            endBaseTime = cloudTeacher.getEndTime();
-            if (cloudTeacher.getEndTime().compareTo(nowDate) < 0) {
-                startTime = DateUtil.trunc(nowDate);
-                endBaseTime = startTime;
-            }
-            endTime = calcCloudTeacherOrderTime(cloudTeacherOrder, endBaseTime, endTime);
-            cloudTeacher.setStartTime(startTime);
-            cloudTeacher.setEndTime(endTime);
-            cloudTeacher.setUpdateTime(nowDate);
-            if (cloudTeacherDao.update(cloudTeacher) <= 0) {
-                throw new BizException("团练宝有效期更新失败");
-            }
-        }
-        cloudTeacherOrder.setStartTime(endBaseTime);
+    public void activationMember(Date now,CloudTeacherOrder cloudTeacherOrder){
+        Date startTime = DateUtil.trunc(now);
+        Date endTime = this.calcCloudTeacherOrderTime(cloudTeacherOrder, startTime, now);
+        cloudTeacherOrder.setStartTime(startTime);
         cloudTeacherOrder.setEndTime(endTime);
-        cloudTeacherOrder.setStatus(1);
-        if (cloudTeacherOrderDao.update(cloudTeacherOrder) <= 0) {
-            throw new BizException("团练宝生效处理失败");
+        cloudTeacherOrder.setStatus(2);
+        if(Objects.isNull(cloudTeacherOrder.getId())){
+            cloudTeacherOrderDao.insert(cloudTeacherOrder);
+        }else {
+            cloudTeacherOrderDao.update(cloudTeacherOrder);
         }
-        return cloudTeacher;
+        studentService.updateMemberRank(cloudTeacherOrder.getStudentId(), cloudTeacherOrder.getType(), cloudTeacherOrder.getTime(), 1);
     }
 
     public Date calcCloudTeacherOrderTime(CloudTeacherOrder cloudTeacherOrder, Date startTime, Date endTime) {
@@ -336,86 +323,6 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
-    public Boolean quitCloudTeacherOrders(List<CloudTeacherOrder> cloudTeacherOrders, BigDecimal refundAmount) {
-        Date nowDate = new Date();
-        for (int i = 0; i < cloudTeacherOrders.size(); i++) {
-            CloudTeacherOrder cloudTeacherOrder = cloudTeacherOrders.get(i);
-            if (cloudTeacherOrder.getStatus().equals(3)) {
-                throw new BizException("团练宝已退,请勿重复退");
-            }
-            if (cloudTeacherOrder.getStatus().equals(2) && DateUtil.stringToDate(DateUtil.format(cloudTeacherOrder.getEndTime(), DateUtil.ISO_EXPANDED_DATE_FORMAT), DateUtil.ISO_EXPANDED_DATE_FORMAT).compareTo(
-                    DateUtil.stringToDate(DateUtil.format(nowDate, DateUtil.ISO_EXPANDED_DATE_FORMAT), DateUtil.ISO_EXPANDED_DATE_FORMAT)) < 0) {
-                throw new BizException("团练宝已过服务期,不可退费");
-            }
-            Integer oldStatus = cloudTeacherOrder.getStatus();
-            cloudTeacherOrder.setStatus(3);
-            if (i == 0) {
-                cloudTeacherOrder.setRefundAmount(refundAmount);
-            } else {
-                cloudTeacherOrder.setRefundAmount(BigDecimal.ZERO);
-            }
-            cloudTeacherOrder.setUpdateTime(nowDate);
-            if (cloudTeacherOrderDao.update(cloudTeacherOrder) <= 0) {
-                throw new BizException("团练宝退费处理失败,请重试");
-            }
-
-            if (oldStatus.equals(1)) {
-                continue;
-            }
-            int days = DateUtil.daysBetween(DateUtil.trunc(nowDate), cloudTeacherOrder.getEndTime());
-            CloudTeacher cloudTeacher = cloudTeacherDao.getByStudentId(cloudTeacherOrder.getStudentId());
-            if (cloudTeacher != null) {
-                Date endDate = DateUtil.addDays(cloudTeacherOrder.getEndTime(), -days);
-                cloudTeacher.setEndTime(endDate);
-                cloudTeacher.setUpdateTime(nowDate);
-                if (cloudTeacherDao.update(cloudTeacher) <= 0) {
-                    throw new BizException("团练宝服务有效期更新失败,请重试");
-                }
-            }
-        }
-        return true;
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public Boolean quitCloudTeacherOrder(CloudTeacherOrder cloudOrder, BigDecimal refundAmount) {
-        Date nowDate = new Date();
-        if (cloudOrder.getStatus().equals(3)) {
-            throw new BizException("团练宝已退,请勿重复退");
-        }
-        if (cloudOrder.getStatus().equals(2) && DateUtil.stringToDate(DateUtil.format(cloudOrder.getEndTime(), DateUtil.ISO_EXPANDED_DATE_FORMAT), DateUtil.ISO_EXPANDED_DATE_FORMAT).compareTo(
-                DateUtil.stringToDate(DateUtil.format(nowDate, DateUtil.ISO_EXPANDED_DATE_FORMAT), DateUtil.ISO_EXPANDED_DATE_FORMAT)) < 0) {
-            throw new BizException("团练宝已过服务期,不可退费");
-        }
-        Integer oldStatus = cloudOrder.getStatus();
-        cloudOrder.setStatus(3);
-        cloudOrder.setRefundAmount(refundAmount);
-        cloudOrder.setUpdateTime(nowDate);
-        if (cloudTeacherOrderDao.update(cloudOrder) <= 0) {
-            throw new BizException("团练宝退费处理失败,请重试");
-        }
-
-        if (oldStatus.equals(1)) {
-            return true;
-        }
-        int days = DateUtil.daysBetween(DateUtil.trunc(nowDate), cloudOrder.getEndTime());
-        CloudTeacher cloudTeacher = cloudTeacherDao.getByStudentId(cloudOrder.getStudentId());
-        Date endDate = DateUtil.addDays(cloudOrder.getEndTime(), -days);
-        cloudTeacher.setEndTime(endDate);
-        cloudTeacher.setUpdateTime(nowDate);
-        if (cloudTeacherDao.update(cloudTeacher) <= 0) {
-            throw new BizException("团练宝服务有效期更新失败,请重试");
-        }
-        return true;
-    }
-
-    @Override
-    public CloudTeacherOrder queryByOrderId(Long orderId) {
-        return cloudTeacherOrderDao.queryByOrderId(orderId);
-    }
-
-    @Override
     public CloudTeacherOrderDto queryOrderInfoByOrderId(Long orderId) {
         return cloudTeacherOrderDao.queryOrderInfoByOrderId(orderId);
     }

+ 21 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java

@@ -35,6 +35,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import java.io.FileNotFoundException;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutorService;
@@ -199,16 +200,19 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl
         }
 
         employeeDao.update(employee);
-        //删除当前用户角色
-        employeeDao.delEmployeeRole(employee.getId());
         //新增用户角色
         Integer tenantId = TenantContextHolder.getTenantId();
-        employeeDao.batchAddEmployeeRole(employee.getId(), employee.getRoleIds(), tenantId);
-
-        //删除用户职位
-        employeePositionService.delPosition(employee.getId(), tenantId);
-        //添加职位
-        employeePositionService.batchAddPosition(employee.getId(), employee.getPositionIds(), tenantId);
+        if(employee.getRoleIds() != null && employee.getRoleIds().size() > 0){
+            //删除当前用户角色
+            employeeDao.delEmployeeRole(employee.getId());
+            employeeDao.batchAddEmployeeRole(employee.getId(), employee.getRoleIds(), tenantId);
+        }
+        if(Objects.nonNull(employee.getPositionIds()) && employee.getPositionIds().size() > 0){
+            //删除用户职位
+            employeePositionService.delPosition(employee.getId(), tenantId);
+            //添加职位
+            employeePositionService.batchAddPosition(employee.getId(), employee.getPositionIds(), tenantId);
+        }
         teacherDao.updateUser(employee);
         imGroupDao.updateNickname(employee.getUserId(), employee.getRealName());
         imGroupDao.updateUserFriendNickname(employee.getUserId(), employee.getRealName());
@@ -227,9 +231,15 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl
         //更新用户与机构的关系
         sysUserTenantService.deleteByUserId(employee.getId());
         addUserTenant(employee.getTenantIds(), employee.getTenantId(), employee.getId());
-
-        //更新OA信息
-        oaUserService.updateOaUser(employee);
+        ExecutorService executor = Executors.newCachedThreadPool();
+        CompletableFuture.runAsync(()->{
+            try {
+                //更新OA信息
+                oaUserService.updateOaUser(employee);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        },executor);
     }
 
     @Override

+ 192 - 33
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -1,15 +1,5 @@
 package com.ym.mec.biz.service.impl;
 
-import java.io.*;
-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.function.BiFunction;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.auth.api.client.SysUserFeignService;
@@ -26,11 +16,16 @@ import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.IdGeneratorService;
+import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.thirdparty.adapay.ConfigInit;
 import com.ym.mec.thirdparty.adapay.Payment;
+import com.ym.mec.thirdparty.storage.StoragePluginContext;
+import com.ym.mec.thirdparty.storage.provider.KS3StoragePlugin;
 import com.ym.mec.util.collection.MapUtil;
+import com.ym.mec.util.date.DateUtil;
+import com.ym.mec.util.excel.POIUtil;
 import com.ym.mec.util.ini.IniFileUtil;
-import io.swagger.annotations.ApiOperation;
+import com.ym.mec.util.upload.UploadUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -38,23 +33,20 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.system.ApplicationHome;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.http.HttpStatus;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Service;
-
-import com.ym.mec.common.tenant.TenantContextHolder;
-import com.ym.mec.thirdparty.storage.StoragePluginContext;
-import com.ym.mec.thirdparty.storage.provider.KS3StoragePlugin;
-import com.ym.mec.util.date.DateUtil;
-import com.ym.mec.util.excel.POIUtil;
-import com.ym.mec.util.upload.UploadUtil;
 import org.springframework.util.CollectionUtils;
-import org.springframework.web.bind.annotation.GetMapping;
 
 import javax.annotation.PostConstruct;
 import javax.servlet.http.HttpServletResponse;
-
-import static com.ym.mec.biz.dal.enums.QuestionnaireActiveTypeEnum.CLOUD_TEACHER_FEEDBACK;
+import java.io.*;
+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.function.BiFunction;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 @Service
 public class ExportServiceImpl implements ExportService {
@@ -1395,7 +1387,7 @@ public class ExportServiceImpl implements ExportService {
         CompletableFuture.runAsync(()->{
             try {
                 this.routeOrderList(params, managerDownload, headColumns);
-            } catch (FileNotFoundException e) {
+            } catch (Exception e) {
                 e.printStackTrace();
             }
         },executor);
@@ -1419,7 +1411,7 @@ public class ExportServiceImpl implements ExportService {
         CompletableFuture.runAsync(()->{
             try {
                 this.studentVipPractice(organId, managerDownload, tenantId,headColumns);
-            } catch (FileNotFoundException e) {
+            } catch (Exception e) {
                 e.printStackTrace();
             }
         },executor);
@@ -1443,7 +1435,7 @@ public class ExportServiceImpl implements ExportService {
         CompletableFuture.runAsync(()->{
             try {
                 this.queryStudentCourseInfo(organId, tenantId,"VIP", managerDownload,headColumns,ExportEnum.STUDENT_VIP_COURSE_INFO);
-            } catch (FileNotFoundException e) {
+            } catch (Exception e) {
                 e.printStackTrace();
             }
         },executor);
@@ -1467,7 +1459,7 @@ public class ExportServiceImpl implements ExportService {
         CompletableFuture.runAsync(()->{
             try {
                 this.queryStudentCourseInfo(organId, tenantId,"THEORY", managerDownload,headColumns,ExportEnum.STUDENT_MUSIC_THEORY_COURSE_INFO);
-            } catch (FileNotFoundException e) {
+            } catch (Exception e) {
                 e.printStackTrace();
             }
         },executor);
@@ -1507,7 +1499,7 @@ public class ExportServiceImpl implements ExportService {
         CompletableFuture.runAsync(()->{
             try {
                 this.orderList(params, managerDownload, headColumns);
-            } catch (FileNotFoundException e) {
+            } catch (Exception e) {
                 e.printStackTrace();
             }
         },executor);
@@ -1539,7 +1531,7 @@ public class ExportServiceImpl implements ExportService {
         CompletableFuture.runAsync(()->{
             try {
                 this.superFindCourseSchedules(queryInfo, managerDownload);
-            } catch (FileNotFoundException e) {
+            } catch (Exception e) {
                 e.printStackTrace();
             }
         },executor);
@@ -1589,7 +1581,28 @@ public class ExportServiceImpl implements ExportService {
         //获取机构费率
         Integer tenantId = (Integer) params.get("tenantId");
         TenantConfig tenantConfig = tenantConfigService.queryByTenantId(tenantId);
-        
+        //获取缴费项目编号
+        List<Long> calenderIds = studentPaymentOrderExportDtos.stream().map(e -> e.getCalenderId()).filter(e -> e != null).distinct().collect(Collectors.toList());
+        Map<Long, Integer> calenderCooperationMap = new HashMap<>();
+        Map<Integer, String> firstMusicMap = new HashMap<>();
+        if(calenderIds != null && calenderIds.size() > 0){
+            //获取缴费项目关联的合作单位
+            calenderCooperationMap = musicGroupPaymentCalenderService.findCooperationByIds(calenderIds);
+            //获取合作单位第一个乐团
+            firstMusicMap = MapUtil.convertMybatisMap(cooperationOrganDao.findFirstMusic());
+        }
+        List<Integer> studentIds = studentPaymentOrderExportDtos.stream().map(e -> e.getUserId()).distinct().collect(Collectors.toList());
+        //获取学员第一个课程组编号
+        Map<Integer, String> userFirstVipMap = MapUtil.convertMybatisMap(courseScheduleStudentPaymentDao.findUserFirstVipMap("VIP",studentIds));
+        //获取学员最近加入的一个乐团编号
+        Map<Integer, String> userLastMusicIdMap = MapUtil.convertMybatisMap(studentRegistrationDao.getLastMusicGroupId(studentIds));
+        Map<Integer, String> userLastMusicNameMap = MapUtil.convertMybatisMap(studentRegistrationDao.getLastMusicGroupName(studentIds));
+        Set<String> musicGroupIds = studentPaymentOrderExportDtos.stream().map(e -> e.getMusicGroupId()).collect(Collectors.toSet());
+        Map<String, String> musicGroupNameMap = new HashMap<>();
+        if(musicGroupIds != null && musicGroupIds.size() > 0){
+            musicGroupNameMap = MapUtil.convertIntegerMap(musicGroupDao.queryMusicGroupNameMap(musicGroupIds));
+        }
+
         for (StudentPaymentOrderExportDto row : studentPaymentOrderExportDtos) {
             if (row.getActualAmount() == null) {
                 row.setActualAmount(BigDecimal.ZERO);
@@ -1607,6 +1620,32 @@ public class ExportServiceImpl implements ExportService {
             row.setTransferFee(transferFee);
             row.setPlatformFee(row.getActualAmount().multiply(tenantConfig.getChargeRate()).divide(new BigDecimal(1000), 2, BigDecimal.ROUND_HALF_UP));
 
+            Long calenderId = row.getCalenderId();
+            if(calenderId != null){
+                row.setFeeMusicGroupId(row.getMusicGroupId());
+                row.setFeeMusicGroupName(musicGroupNameMap.get(row.getMusicGroupId()));
+                OrderTypeEnum orderTypeEnum = row.getType();
+                if(orderTypeEnum == OrderTypeEnum.APPLY || orderTypeEnum == OrderTypeEnum.ADD_STUDENT){
+                    Integer cooperationId = calenderCooperationMap.get(calenderId);
+                    if(cooperationId != null){
+                        String firstMusicId = firstMusicMap.get(cooperationId);
+                        if(StringUtils.isEmpty(firstMusicId)){
+                            row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.NEW_MUSIC);
+                        }else {
+                            if(Objects.equals(firstMusicId,row.getMusicGroupId())){
+                                row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.NEW_MUSIC);
+                            }else {
+                                row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.ADD_MUSIC);
+                            }
+                        }
+                    }
+                }else {
+                    row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.RENEW_MUSIC);
+                }
+            }else {
+                row.setFeeMusicGroupId(userLastMusicIdMap.get(row.getUserId()));
+                row.setFeeMusicGroupName(userLastMusicNameMap.get(row.getUserId()));
+            }
             String goodsName = "";
             if (row.getOrderDetailList() != null) {
                 for (StudentPaymentOrderDetail orderDetail : row.getOrderDetailList()) {
@@ -1671,6 +1710,15 @@ public class ExportServiceImpl implements ExportService {
                                 vipCourseFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
                             }
                             row.setVipCourseFee(vipCourseFee);
+                            if(row.getTypeDesc() == null){
+                                //学员没有历史VIP课程则导出为【VIP课新增】
+                                //学员有历史VIP课程到导出为【VIP课续费]
+                                if(Objects.equals(userFirstVipMap.get(row.getUserId()),row.getMusicGroupId())){
+                                    row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.NEW_VIP);
+                                }else {
+                                    row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.RENEW_VIP);
+                                }
+                            }
                             break;
                         case THEORY_COURSE:
                             BigDecimal theoryCourseFee = BigDecimal.ZERO;
@@ -1699,6 +1747,15 @@ public class ExportServiceImpl implements ExportService {
                     row.setSubjectName(vipGroupInfo.getSubjectName());
                     row.setEduTeacher(vipGroupInfo.getEducationalTeacherName());
                 }
+                if(row.getTypeDesc() == null){
+                    //学员没有历史VIP课程则导出为【VIP课新增】
+                    //学员有历史VIP课程到导出为【VIP课续费]
+                    if(Objects.equals(userFirstVipMap.get(row.getUserId()),row.getMusicGroupId())){
+                        row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.NEW_VIP);
+                    }else {
+                        row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.RENEW_VIP);
+                    }
+                }
             }else if(row.getGroupType() == GroupType.ACTIVITY){
                 row.setVipCourseFee(row.getActualAmount());
             }else if(row.getGroupType() == GroupType.MEMBER){
@@ -1905,6 +1962,27 @@ public class ExportServiceImpl implements ExportService {
         //获取机构费率
         Integer tenantId = (Integer) params.get("tenantId");
         TenantConfig tenantConfig = tenantConfigService.queryByTenantId(tenantId);
+        //获取缴费项目编号
+        List<Long> calenderIds = studentPaymentOrderExportDtos.stream().map(e -> e.getCalenderId()).filter(e -> e != null).distinct().collect(Collectors.toList());
+        Map<Long, Integer> calenderCooperationMap = new HashMap<>();
+        Map<Integer, String> firstMusicMap = new HashMap<>();
+        if(calenderIds != null && calenderIds.size() > 0){
+            //获取缴费项目关联的合作单位
+            calenderCooperationMap = musicGroupPaymentCalenderService.findCooperationByIds(calenderIds);
+            //获取合作单位第一个乐团
+            firstMusicMap = MapUtil.convertMybatisMap(cooperationOrganDao.findFirstMusic());
+        }
+        List<Integer> studentIds = studentPaymentOrderExportDtos.stream().map(e -> e.getUserId()).distinct().collect(Collectors.toList());
+        //获取学员第一个课程组编号
+        Map<Integer, String> userFirstVipMap = MapUtil.convertMybatisMap(courseScheduleStudentPaymentDao.findUserFirstVipMap("VIP",studentIds));
+        //获取学员最近加入的一个乐团编号
+        Map<Integer, String> userLastMusicIdMap = MapUtil.convertMybatisMap(studentRegistrationDao.getLastMusicGroupId(studentIds));
+        Map<Integer, String> userLastMusicNameMap = MapUtil.convertMybatisMap(studentRegistrationDao.getLastMusicGroupName(studentIds));
+        Set<String> musicGroupIds = studentPaymentOrderExportDtos.stream().map(e -> e.getMusicGroupId()).collect(Collectors.toSet());
+        Map<String, String> musicGroupNameMap = new HashMap<>();
+        if(musicGroupIds != null && musicGroupIds.size() > 0){
+            musicGroupNameMap = MapUtil.convertIntegerMap(musicGroupDao.queryMusicGroupNameMap(musicGroupIds));
+        }
         
         Map<String,BigDecimal> serviceChargeMap = new HashMap<String, BigDecimal>();
         Map<String,Integer> orderCountMap = new HashMap<String, Integer>();
@@ -1966,6 +2044,33 @@ public class ExportServiceImpl implements ExportService {
             row.setTransferFee(currentFee);
             row.setPlatformFee(row.getActualAmount().multiply(tenantConfig.getChargeRate()).divide(new BigDecimal(1000), 2, BigDecimal.ROUND_HALF_UP));
 
+            Long calenderId = row.getCalenderId();
+            if(calenderId != null){
+                row.setFeeMusicGroupId(row.getMusicGroupId());
+                row.setFeeMusicGroupName(musicGroupNameMap.get(row.getMusicGroupId()));
+                OrderTypeEnum orderTypeEnum = row.getType();
+                if(orderTypeEnum == OrderTypeEnum.APPLY || orderTypeEnum == OrderTypeEnum.ADD_STUDENT){
+                    Integer cooperationId = calenderCooperationMap.get(calenderId);
+                    if(cooperationId != null){
+                        String firstMusicId = firstMusicMap.get(cooperationId);
+                        if(StringUtils.isEmpty(firstMusicId)){
+                            row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.NEW_MUSIC);
+                        }else {
+                            if(Objects.equals(firstMusicId,row.getMusicGroupId())){
+                                row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.NEW_MUSIC);
+                            }else {
+                                row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.ADD_MUSIC);
+                            }
+                        }
+                    }
+                }else {
+                    row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.RENEW_MUSIC);
+                }
+            }else {
+                row.setFeeMusicGroupId(userLastMusicIdMap.get(row.getUserId()));
+                row.setFeeMusicGroupName(userLastMusicNameMap.get(row.getUserId()));
+            }
+
             String goodsName = "";
             if (row.getOrderDetailList() != null) {
                 for (StudentPaymentOrderDetail orderDetail : row.getOrderDetailList()) {
@@ -2030,6 +2135,15 @@ public class ExportServiceImpl implements ExportService {
                                 vipCourseFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
                             }
                             row.setVipCourseFee(vipCourseFee);
+                            if(row.getTypeDesc() == null){
+                                //学员没有历史VIP课程则导出为【VIP课新增】
+                                //学员有历史VIP课程到导出为【VIP课续费]
+                                if(Objects.equals(userFirstVipMap.get(row.getUserId()),row.getMusicGroupId())){
+                                    row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.NEW_VIP);
+                                }else {
+                                    row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.RENEW_VIP);
+                                }
+                            }
                             break;
                         case THEORY_COURSE:
                             BigDecimal theoryCourseFee = BigDecimal.ZERO;
@@ -2058,6 +2172,15 @@ public class ExportServiceImpl implements ExportService {
                     row.setSubjectName(vipGroupInfo.getSubjectName());
                     row.setEduTeacher(vipGroupInfo.getEducationalTeacherName());
                 }
+                if(row.getTypeDesc() == null){
+                    //学员没有历史VIP课程则导出为【VIP课新增】
+                    //学员有历史VIP课程到导出为【VIP课续费]
+                    if(Objects.equals(userFirstVipMap.get(row.getUserId()),row.getMusicGroupId())){
+                        row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.NEW_VIP);
+                    }else {
+                        row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.RENEW_VIP);
+                    }
+                }
             } else if(row.getGroupType().equals(GroupType.ACTIVITY)){
                 row.setVipCourseFee(row.getActualAmount());
             }else if (row.getGroupType().equals(GroupType.SPORADIC)) {
@@ -2419,14 +2542,32 @@ public class ExportServiceImpl implements ExportService {
     public void studentVipPractice(String organId, ManagerDownload managerDownload, Integer tenantId,List<String> headColumns) throws FileNotFoundException {
         List<StudentVipPracticeExportDto> studentVipPracticeExportDtos = courseScheduleStudentPaymentDao.exportStudentVipPractice(organId, tenantId);
         if(studentVipPracticeExportDtos != null && studentVipPracticeExportDtos.size() > 0){
-            List<Integer> studentIds = studentVipPracticeExportDtos.stream().map(e -> e.getUserId()).collect(Collectors.toList());
-            //获取学员最后一节已结束的vip课的老师以及编号
+            List<Integer> studentIds = studentVipPracticeExportDtos.stream().map(e -> e.getUserId()).distinct().collect(Collectors.toList());
+            //新增声部课老师,学员有在读乐团,导出该学员所在声部班班级老师,无声部班则为空
+            List<BaseNameDto> normalClassTeacher = courseScheduleStudentPaymentDao.queryClassTeacher(studentIds);
+            Map<Integer, List<BaseNameDto>> normalClassTeacherMap = new HashMap<>();
+            if(normalClassTeacher != null && normalClassTeacher.size() > 0){
+                normalClassTeacherMap = normalClassTeacher.stream().collect(Collectors.groupingBy(BaseNameDto::getUserId));
+            }
+            //获取最近一节未开始vip课课程组老师编号
+            List<BaseNameDto> vipFirstNotStartTeacher = courseScheduleStudentPaymentDao.queryFirstNotStartTeacher(studentIds,"VIP");
+            Map<Integer, List<BaseNameDto>> vipFirstNotStartTeacherMap = new HashMap<>();
+            if(vipFirstNotStartTeacher != null && vipFirstNotStartTeacher.size() > 0){
+                vipFirstNotStartTeacherMap = vipFirstNotStartTeacher.stream().collect(Collectors.groupingBy(BaseNameDto::getUserId));
+            }
+            //获取最近一节未开始网管课课课程组老师编号
+            List<BaseNameDto> practiceFirstNotStartTeacher = courseScheduleStudentPaymentDao.queryFirstNotStartTeacher(studentIds,"PRACTICE");
+            Map<Integer, List<BaseNameDto>> practiceFirstNotStartTeacherMap = new HashMap<>();
+            if(practiceFirstNotStartTeacher != null && practiceFirstNotStartTeacher.size() > 0){
+                practiceFirstNotStartTeacherMap = practiceFirstNotStartTeacher.stream().collect(Collectors.groupingBy(BaseNameDto::getUserId));
+            }
+            //获取学员最后一节已结束的vip课课程组的老师以及编号
             List<BaseNameDto> vipBaseNameDtos = courseScheduleStudentPaymentDao.queryLastOverTeacher(studentIds,"VIP");
             Map<Integer, List<BaseNameDto>> vipBaseNameMap = new HashMap<>();
             if(vipBaseNameDtos != null && vipBaseNameDtos.size() > 0){
                 vipBaseNameMap = vipBaseNameDtos.stream().collect(Collectors.groupingBy(BaseNameDto::getUserId));
             }
-            //获取学员最后一节已结束的网管课的老师以及编号
+            //获取学员最后一节已结束的网管课课程组的老师以及编号
             List<BaseNameDto> practiceBaseNameDtos = courseScheduleStudentPaymentDao.queryLastOverTeacher(studentIds,"PRACTICE");
             Map<Integer, List<BaseNameDto>> practiceBaseNameMap = new HashMap<>();
             if(practiceBaseNameDtos != null && practiceBaseNameDtos.size() > 0){
@@ -2445,6 +2586,24 @@ public class ExportServiceImpl implements ExportService {
                     studentVipPracticeExportDto.setPracticeOverTeacherId(baseNameDto.getTeacherId());
                     studentVipPracticeExportDto.setPracticeOverTeacherName(baseNameDto.getTeacherName());
                 }
+                List<BaseNameDto> baseNameDtos2 = normalClassTeacherMap.get(studentVipPracticeExportDto.getUserId());
+                if(baseNameDtos2 != null && baseNameDtos2.size() > 0){
+                    BaseNameDto baseNameDto = baseNameDtos2.get(0);
+                    studentVipPracticeExportDto.setNormalClassTeacherId(baseNameDto.getTeacherId());
+                    studentVipPracticeExportDto.setNormalClassTeacherName(baseNameDto.getTeacherName());
+                }
+                List<BaseNameDto> baseNameDtos3 = vipFirstNotStartTeacherMap.get(studentVipPracticeExportDto.getUserId());
+                if(baseNameDtos3 != null && baseNameDtos3.size() > 0){
+                    BaseNameDto baseNameDto = baseNameDtos3.get(0);
+                    studentVipPracticeExportDto.setVipNotStartTeacherId(baseNameDto.getTeacherId());
+                    studentVipPracticeExportDto.setVipNotStartTeacherName(baseNameDto.getTeacherName());
+                }
+                List<BaseNameDto> baseNameDtos4 = practiceFirstNotStartTeacherMap.get(studentVipPracticeExportDto.getUserId());
+                if(baseNameDtos4 != null && baseNameDtos4.size() > 0){
+                    BaseNameDto baseNameDto = baseNameDtos4.get(0);
+                    studentVipPracticeExportDto.setPracticeNotStartTeacherId(baseNameDto.getTeacherId());
+                    studentVipPracticeExportDto.setPracticeNotStartTeacherName(baseNameDto.getTeacherName());
+                }
             }
         }
         String basePath = new ApplicationHome(this.getClass()).getSource().getParentFile().getPath();

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

@@ -310,6 +310,15 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 					}
 				}
 			}
+			if(QUIT_MUSIC_GROUP_STUDENT_NUM.equals(typeDateMapEntry.getKey())){
+				//查询时间段内学员成功退团申请的数量
+				Integer quitNum = musicGroupDao.countQuitNum(queryInfo);
+				indexBaseData.setIndexMonthData(new ArrayList<>(),null);
+				indexBaseData.setIndexMonthDataDetail(new ArrayList<>());
+				indexBaseData.setDataType(QUIT_MUSIC_GROUP_STUDENT_NUM);
+				indexBaseData.setPercent(new BigDecimal(quitNum));
+				indexBaseData.setTitle(QUIT_MUSIC_GROUP_STUDENT_NUM.getMsg());
+			}
 			result.add(indexBaseData);
 		}
 		return result;
@@ -593,7 +602,7 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			}
 			dataList.add(new IndexBaseMonthData(date, organId, tenantId));
 		}
-		if(!IndexDataType.NEWLY_STUDENT_NUM.equals(indexDataType)&&!IndexDataType.QUIT_MUSIC_GROUP_STUDENT_NUM.equals(indexDataType)){
+		if(!IndexDataType.NEWLY_STUDENT_NUM.equals(indexDataType) && !IndexDataType.QUIT_MUSIC_GROUP_STUDENT_NUM.equals(indexDataType)){
 			indexBaseMonthDataDao.deleteWithMonthAndType(Arrays.asList(dayStr), indexDataType, tenantId);
 		}
 		if(!CollectionUtils.isEmpty(dataList)){

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

@@ -457,7 +457,7 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
                 cloudTeacherOrder.setStudentId(coachPaymentDetails.getUserId());
                 cloudTeacherOrder.setOrganId(studentPaymentOrder.getOrganId());
                 cloudTeacherOrder.setAmount(studentPaymentOrder.getExpectAmount());
-                cloudTeacherOrderService.insert(cloudTeacherOrder);
+                cloudTeacherOrderService.save(cloudTeacherOrder,cloudCoachPaymentProgram.getAutoActivationFlag());
 
                 //修改缴费状态
                 coachPaymentDetails.setPaymentStatus(1);
@@ -515,76 +515,4 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
         userPhones.put(sysUser.getId(), sysUser.getPhone());
         sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.CLOUD_TEACHER_ORDER_SUCCESS, userPhones, null, 0, null, null);
     }
-
-    @Override
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
-    public HttpResponseResult ActiveBuy(Integer userId, Integer memberRankId, PeriodEnum month, BigDecimal amount, boolean isUseBalance, Integer buyNum, int giveNum, int activeRemark, String remark, boolean repay) throws Exception {
-        HttpResponseResult result = new HttpResponseResult();
-        //判断用户是否已存在订单
-        StudentPaymentOrder applyOrder = studentPaymentOrderService.findByUserAndActive(userId, 202109, remark, "ING");
-        if (applyOrder != null) {
-            // 查询订单状态
-            PayStatus payStatus = studentPaymentOrderService.queryPayStatus(applyOrder.getPaymentChannel(), applyOrder.getOrderNo(), applyOrder.getTransNo());
-            if (payStatus == PayStatus.SUCCESSED) {
-                throw new BizException("订单已支付成功,请勿重复支付");
-            }/*else if(payStatus == PayStatus.PAYING){
-				throw new BizException("订单还在交易中,请稍后重试");
-			}*/
-            if (repay) {
-                //处理关闭订单
-                applyOrder.setStatus(DealStatusEnum.CLOSE);
-                applyOrder.setMemo("关闭团练宝活动订单");
-                if (applyOrder.getBalancePaymentAmount() != null && applyOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
-                    sysUserCashAccountService.updateBalance(applyOrder.getUserId(), applyOrder.getBalancePaymentAmount(),
-                            PlatformCashAccountDetailTypeEnum.REFUNDS, "购买团练宝活动支付失败");
-                }
-                studentPaymentOrderService.update(applyOrder);
-            } else {
-                result.setCode(HttpStatus.CONTINUE.value());
-                result.setMsg("您有待支付的订单");
-                return result;
-            }
-
-        }
-        result.setCode(HttpStatus.OK.value());
-        MemberPayParamDto memberPayParamDto = new MemberPayParamDto();
-//		memberPayParamDto.setMemberRankId(memberRankId);
-//		memberPayParamDto.setUserId(userId);
-//		memberPayParamDto.setPeriodEnum(month);
-//		memberPayParamDto.setUseBalance(isUseBalance);
-//		memberPayParamDto.setBuyNum(buyNum);
-//		memberPayParamDto.setGiveNum(giveNum);
-//		memberPayParamDto.setActiveRemark(activeRemark);
-//		memberPayParamDto.setRemark(remark);
-        memberPayParamDto.setAmount(amount);
-        return this.buy(memberPayParamDto);
-    }
-
-    //团练宝活动赠送优惠券
-    public void cloudTeacherActiveGiveCoupon(CloudTeacherOrder cloudTeacherOrder) {
-        Integer activeRemark = cloudTeacherOrder.getActiveRemark();
-        String remark = cloudTeacherOrder.getRemark();
-        if (activeRemark == null || StringUtils.isEmpty(remark)) {
-            return;
-        }
-        Integer studentId = cloudTeacherOrder.getStudentId();
-        SysUser sysUser = sysUserFeignService.queryUserById(studentId);
-        if (sysUser == null) {
-            throw new BizException("用户信息获取失败");
-        }
-        Integer couponId = 1;
-        if (sysUser.getOrganId() != null && sysUser.getOrganId() == 4) {
-            couponId = 2;
-        }
-        if (activeRemark.equals(202109)) {
-            switch (remark) {
-                case "2赠1":
-                    sysCouponCodeService.exchangeCoupon(cloudTeacherOrder.getStudentId(), couponId, cloudTeacherOrder.getOrderId(), 3, 2, null);
-                    break;
-                case "3赠2":
-                    sysCouponCodeService.exchangeCoupon(cloudTeacherOrder.getStudentId(), couponId, cloudTeacherOrder.getOrderId(), 6, 2, null);
-                    break;
-            }
-        }
-    }
 }

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

@@ -61,7 +61,7 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 	@Autowired
 	private StudentPaymentOrderDetailDao studentPaymentOrderDetailDao;
 	@Autowired
-	private CloudTeacherOrderDao cloudTeacherOrderDao;
+	private CloudTeacherOrderService cloudTeacherOrderService;
 	@Autowired
 	private StudentPaymentOrderDao studentPaymentOrderDao;
 	@Autowired
@@ -269,7 +269,7 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 					cloudTeacherOrder.setStatus(1);
 					cloudTeacherOrder.setRemark("缴费项目0元新增学员");
 					cloudTeacherOrder.setMusicGroupId(musicGroupId);
-					cloudTeacherOrderDao.insert(cloudTeacherOrder);
+					cloudTeacherOrderService.save(cloudTeacherOrder,calenderMember.getAutoActivationFlag());
 				}
 				//添加小课包
 				if(calenderActivities != null && calenderActivities.size() > 0){

+ 7 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -105,7 +105,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
     @Autowired
     private MemberRankPrivilegesService memberRankPrivilegesService;
     @Autowired
-    private CloudTeacherOrderDao cloudTeacherOrderDao;
+    private CloudTeacherOrderService cloudTeacherOrderService;
     @Autowired
     private MusicGroupPaymentCalenderActivityServiceImpl musicGroupPaymentCalenderActivityService;
     @Autowired
@@ -730,7 +730,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
                         cloudTeacherOrder.setStatus(1);
                         cloudTeacherOrder.setRemark("进行中乐团0元加学生");
                         cloudTeacherOrder.setMusicGroupId(musicGroup.getId());
-                        cloudTeacherOrderDao.insert(cloudTeacherOrder);
+                        cloudTeacherOrderService.save(cloudTeacherOrder,calenderMember.getAutoActivationFlag());
                     }
                     //添加小课包
                     if (calenderActivities != null && calenderActivities.size() > 0) {
@@ -1207,6 +1207,11 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
     }
 
     @Override
+    public Map<Long, Integer> findCooperationByIds(List<Long> calenderIds) {
+        return (Map<Long, Integer>)MapUtil.convertIntegerMap(musicGroupPaymentCalenderDao.findCooperationByIds(calenderIds));
+    }
+
+    @Override
     @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     public boolean autoUpdateMusicGroupPaymentCalenderStatus() {
         Date date = new Date();

+ 9 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OaServiceImpl.java

@@ -12,6 +12,7 @@ import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 
@@ -43,7 +44,6 @@ public class OaServiceImpl implements OaUserService {
     }
 
     @Override
-    @Async
     public Object updateOaUser(Employee employee) {
         OAUser oaUser = new OAUser();
         oaUser.setMecUserId(employee.getUserId());
@@ -51,11 +51,15 @@ public class OaServiceImpl implements OaUserService {
         oaUser.setNickName(employee.getRealName());
         oaUser.setPhone(employee.getPhone());
         oaUser.setSex(employee.getGender().toString());
-        oaUser.setDeptId(employee.getDeptId());
-        oaUser.setDeptIds(JSON.parseArray(employee.getDeptIds(), Integer.class));
         oaUser.setAvatar(employee.getAvatar());
-        oaUser.setPostDeptIds(JSON.parseArray(employee.getPostDeptIds(), PostDept.class));
-        if (oaUser.getPostDeptIds() != null) {
+        if(Objects.nonNull(employee.getDeptId())){
+            oaUser.setDeptId(employee.getDeptId());
+        }
+        if(Objects.nonNull(employee.getDeptIds())){
+            oaUser.setDeptIds(JSON.parseArray(employee.getDeptIds(), Integer.class));
+        }
+        if(Objects.nonNull(employee.getPostDeptIds())){
+            oaUser.setPostDeptIds(JSON.parseArray(employee.getPostDeptIds(), PostDept.class));
             List<Integer> postIds = oaUser.getPostDeptIds().stream().map(PostDept::getPostId).collect(Collectors.toList());
             oaUser.setPostIds(postIds);
         }

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

@@ -29,6 +29,7 @@ import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import com.ym.mec.biz.service.*;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -146,27 +147,6 @@ import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.PracticeGroupQueryInfo;
 import com.ym.mec.biz.dal.page.StudentBuyPracticeQueryInfo;
 import com.ym.mec.biz.dal.page.StudentQueryInfo;
-import com.ym.mec.biz.service.ActivityUserMapperService;
-import com.ym.mec.biz.service.ContractService;
-import com.ym.mec.biz.service.CourseScheduleService;
-import com.ym.mec.biz.service.CourseScheduleTeacherSalaryService;
-import com.ym.mec.biz.service.GroupClassService;
-import com.ym.mec.biz.service.ImUserFriendService;
-import com.ym.mec.biz.service.LuckDrawCountService;
-import com.ym.mec.biz.service.PayService;
-import com.ym.mec.biz.service.PracticeGroupService;
-import com.ym.mec.biz.service.StudentPaymentOrderService;
-import com.ym.mec.biz.service.StudentPaymentRouteOrderService;
-import com.ym.mec.biz.service.StudentService;
-import com.ym.mec.biz.service.SysConfigService;
-import com.ym.mec.biz.service.SysCouponCodeService;
-import com.ym.mec.biz.service.SysMessageService;
-import com.ym.mec.biz.service.SysTenantConfigService;
-import com.ym.mec.biz.service.SysUserCashAccountDetailService;
-import com.ym.mec.biz.service.SysUserCashAccountLogService;
-import com.ym.mec.biz.service.SysUserCashAccountService;
-import com.ym.mec.biz.service.TeacherCourseRewardService;
-import com.ym.mec.biz.service.TeacherService;
 import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.dal.BaseDAO;
@@ -271,18 +251,8 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     @Autowired
     private ActivityUserMapperService activityUserMapperService;
     @Autowired
-    private MemberFeeSettingDao memberFeeSettingDao;
-    @Autowired
-    private CloudTeacherOrderDao cloudTeacherOrderDao;
-    @Autowired
-    private StudentService studentService;
-    @Autowired
     private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
     @Autowired
-    private RedisCache<String, Object> redisCache;
-    @Autowired
-    private LuckDrawCountService luckDrawCountService;
-    @Autowired
     private VipGroupDao vipGroupDao;
     @Autowired
     private VipGroupCategoryDao vipGroupCategoryDao;
@@ -306,8 +276,6 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
     private static List<String> applyDayTimes = new ArrayList<>();
 
-    private static final Set<Integer> ENABLE_APPLY_ORGANIDS = new HashSet<>(Arrays.asList(new Integer[]{28, 34, 37}));
-
     static {
         applyStartDay = DateUtil.stringToDate("2020-03-25 00:00:00");
         activityStartDate = DateUtil.stringToDate("2020-03-25 00:00:00");
@@ -3540,305 +3508,6 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
-    public void activityOrderCallback(StudentPaymentOrder studentPaymentOrder) {
-        Integer userId = studentPaymentOrder.getUserId();
-        StudentPaymentOrder order = studentPaymentOrderDao.lockOrder(studentPaymentOrder.getId());
-        if (!order.getStatus().equals(DealStatusEnum.ING)) {
-            return;
-        }
-        //更新订单状态
-        int updateCount = studentPaymentOrderService.update(studentPaymentOrder);
-        if (updateCount <= 0) {
-            throw new BizException("订单更新失败");
-        }
-        if (studentPaymentOrder.getStatus().equals(DealStatusEnum.SUCCESS)) {
-            Date now = new Date();
-            Student student = studentDao.get(order.getUserId());
-            Integer activityId = Integer.parseInt(order.getActivityId());
-            VipGroupActivity activity = vipGroupActivityDao.get(activityId);
-            ActivityUserMapper activityUserMapper = new ActivityUserMapper();
-            activityUserMapper.setActivityId(activityId);
-            activityUserMapper.setUserId(order.getUserId());
-            activityUserMapper.setPaymentOrderId(order.getId());
-            activityUserMapper.setTeacherId(student.getTeacherId());
-
-            if (activity.getActivityType() == 1) {
-                //会员立即生效
-                Integer cloudTeacherType;
-                PeriodEnum periodEnum = activity.getPeriodEnum();
-                Integer cloudTime = activity.getMemberTime();
-                CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
-//                Date addDate = now;
-//                if (student.getMemberRankSettingId() == null || now.after(student.getMembershipEndTime())) {
-//                    cloudTeacherOrder.setStartTime(now);
-//                } else {
-//                    addDate = student.getMembershipEndTime();
-//                    cloudTeacherOrder.setStartTime(DateUtil.addDays(addDate, 1));
-//                }
-//                cloudTeacherOrder.setEndTime(studentService.getMembershipEndTime(periodEnum, addDate, cloudTime));
-                cloudTeacherOrder.setRemark("营销活动购买会员");
-                cloudTeacherOrder.setStatus(1);
-                cloudTeacherOrder.setOrderId(order.getId());
-                cloudTeacherOrder.setType(periodEnum);
-                cloudTeacherOrder.setAmount(order.getActualAmount());
-                cloudTeacherOrder.setLevel(activity.getMemberRankId());
-                cloudTeacherOrder.setStudentId(userId);
-                cloudTeacherOrder.setOrganId(order.getOrganId());
-                cloudTeacherOrder.setTime(cloudTime);
-                cloudTeacherOrderDao.insert(cloudTeacherOrder);
-//                studentService.updateMemberRank(cloudTeacherOrder);
-                activityUserMapper.setMemberFlag(2);
-                activityUserMapper.setMemberOrderId(cloudTeacherOrder.getId());
-            } else {
-                if (activity.getCourseType().equals("VIP")) {
-                    activityUserMapper.setVipFlag(1);
-                } else {
-                    activityUserMapper.setPracticeFlag(1);
-                }
-                if (activity.isPayToBalance()) {
-                    boolean appendCourseBalance = sysUserCashAccountService.appendCourseBalance(userId, studentPaymentOrder.getExpectAmount(), PlatformCashAccountDetailTypeEnum.RECHARGE, "通用营销活动购买");
-                    if (!appendCourseBalance) {
-                        throw new BizException("增加用户课程余额失败");
-                    }
-                }
-            }
-            if (activity.getFullMinusCourseTimes() != -1 && order.getActivityBuyNum() >= activity.getFullMinusCourseTimes()) {
-                if (activity.getGiveMemberTime() > 0) {
-                    //会员立即生效
-                    Integer cloudTeacherType;
-                    PeriodEnum periodEnum = activity.getGivePeriodEnum();
-                    Integer cloudTime = activity.getGiveMemberTime();
-                    CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
-//                    Date addDate = now;
-//                    if (student.getMemberRankSettingId() == null || now.after(student.getMembershipEndTime())) {
-//                        cloudTeacherOrder.setStartTime(now);
-//                    } else {
-//                        addDate = student.getMembershipEndTime();
-//                        cloudTeacherOrder.setStartTime(DateUtil.addDays(addDate, 1));
-//                    }
-//                    cloudTeacherOrder.setEndTime(studentService.getMembershipEndTime(periodEnum, addDate, cloudTime));
-                    cloudTeacherOrder.setRemark("营销活动赠送会员");
-                    cloudTeacherOrder.setStatus(1);
-                    cloudTeacherOrder.setOrderId(order.getId());
-                    cloudTeacherOrder.setType(periodEnum);
-                    cloudTeacherOrder.setAmount(BigDecimal.ZERO);
-                    cloudTeacherOrder.setLevel(activity.getGiveMemberRankId());
-                    cloudTeacherOrder.setStudentId(userId);
-                    cloudTeacherOrder.setOrganId(order.getOrganId());
-                    cloudTeacherOrder.setTime(cloudTime);
-                    cloudTeacherOrderDao.insert(cloudTeacherOrder);
-//                    studentService.updateMemberRank(cloudTeacherOrder);
-                    activityUserMapper.setGiveMemberFlag(2);
-                    activityUserMapper.setGiveMemberOrderId(cloudTeacherOrder.getId());
-                } else if (activity.getGiveCourseNum() > 0) {
-                    if (activity.getGiveCourseType().equals("VIP")) {
-                        activityUserMapper.setGiveVipFlag(1);
-                    } else {
-                        activityUserMapper.setGivePracticeFlag(1);
-                    }
-                }
-            }
-            activityUserMapperService.insert(activityUserMapper);
-            SysUserCashAccount sysUserCashAccount = sysUserCashAccountService.get(userId);
-            //插入缴费明细
-            //收入
-            SysUserCashAccountDetail sysUserIncomeCashAccountDetail = new SysUserCashAccountDetail();
-            sysUserIncomeCashAccountDetail.setUserId(order.getUserId());
-            sysUserIncomeCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.RECHARGE);
-            sysUserIncomeCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
-            sysUserIncomeCashAccountDetail.setAmount(order.getActualAmount());
-            sysUserIncomeCashAccountDetail.setBalance(sysUserCashAccount.getBalance().add(order.getActualAmount()));
-            sysUserIncomeCashAccountDetail.setAttribute(order.getTransNo());
-            sysUserIncomeCashAccountDetail.setChannel(studentPaymentOrder.getPaymentChannel());
-            sysUserIncomeCashAccountDetail.setComAmount(studentPaymentOrder.getComAmount());
-            sysUserIncomeCashAccountDetail.setPerAmount(studentPaymentOrder.getPerAmount());
-            //支出
-            SysUserCashAccountDetail sysUserExpendCashAccountDetail = new SysUserCashAccountDetail();
-            sysUserExpendCashAccountDetail.setUserId(order.getUserId());
-            sysUserExpendCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.PAY_FEE);
-            sysUserExpendCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
-            sysUserExpendCashAccountDetail.setAmount(order.getActualAmount().negate());
-            sysUserExpendCashAccountDetail.setBalance(sysUserCashAccount.getBalance());
-            sysUserExpendCashAccountDetail.setAttribute(order.getTransNo());
-            sysUserExpendCashAccountDetail.setChannel(studentPaymentOrder.getPaymentChannel());
-
-            if (studentPaymentOrder.getComAmount() != null) {
-                sysUserIncomeCashAccountDetail.setComAmount(studentPaymentOrder.getComAmount().negate());
-            }
-            if (studentPaymentOrder.getPerAmount() != null) {
-                sysUserExpendCashAccountDetail.setPerAmount(studentPaymentOrder.getPerAmount().negate());
-            }
-
-            sysUserCashAccountDetailService.insert(sysUserIncomeCashAccountDetail);
-            sysUserCashAccountDetailService.insert(sysUserExpendCashAccountDetail);
-
-//            try {
-//                contractService.transferPracticeCoursesContract(order.getUserId(), classGroup.getTotalClassTimes(), practiceGroup.getCoursesStartDate(), practiceGroup.getCoursesExpireDate(), order.getExpectAmount());
-//            } catch (Exception e) {
-//                LOGGER.error(MessageFormatter.arrayFormat("网管课[{}]购买协议错误:{}", order.getMusicGroupId(), e.getMessage()), e);
-//            }
-            studentDao.updateStudentServiceTag(userId, null, YesOrNoEnum.YES.getCode());
-        }
-        if (studentPaymentOrder.getStatus().equals(DealStatusEnum.FAILED)) {
-            if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
-                sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "报名缴费失败");
-            }
-            sysCouponCodeService.quit(studentPaymentOrder.getCouponCodeId());
-        }
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
-    public void doubleEleven2021OrderCallback(StudentPaymentOrder studentPaymentOrder) {
-        Integer userId = studentPaymentOrder.getUserId();
-        StudentPaymentOrder order = studentPaymentOrderDao.lockOrder(studentPaymentOrder.getId());
-        if (!order.getStatus().equals(DealStatusEnum.ING)) {
-            return;
-        }
-        //更新订单状态
-        int updateCount = studentPaymentOrderService.update(studentPaymentOrder);
-        if (updateCount <= 0) {
-            throw new BizException("订单更新失败");
-        }
-        if (studentPaymentOrder.getStatus().equals(DealStatusEnum.SUCCESS)) {
-            Date now = new Date();
-            Student student = studentDao.get(order.getUserId());
-            List<VipGroupActivity> vipGroupActivities = vipGroupActivityDao.queryByIds(order.getActivityId());
-            List<ActivityUserMapper> activityUserMappers = new ArrayList<>();
-            Integer times = 0;
-
-            BigDecimal couponRemitFee = order.getCouponRemitFee();
-            BigDecimal subCouponRemitFee = couponRemitFee;
-            BigDecimal totalMarketPrice = vipGroupActivities.stream().map(e -> e.getMarketPrice()).reduce(ZERO, BigDecimal::add);
-
-            String startTimeStr = sysConfigDao.findConfigValue("2021_double_eleven_give_member_start_time");
-            Date startTime = DateUtil.stringToDate(startTimeStr);
-            String endTimeStr = sysConfigDao.findConfigValue("2021_double_eleven_give_member_end_time");
-            Date endTime = DateUtil.stringToDate(endTimeStr);
-            for (int i = 0; i < vipGroupActivities.size(); i++) {
-                VipGroupActivity activity = vipGroupActivities.get(i);
-                ActivityUserMapper activityUserMapper = new ActivityUserMapper();
-                activityUserMapper.setActivityId(activity.getId());
-                activityUserMapper.setUserId(order.getUserId());
-                activityUserMapper.setPaymentOrderId(order.getId());
-                activityUserMapper.setTeacherId(student.getTeacherId());
-                activityUserMapper.setVipFlag(1);
-                if (couponRemitFee.compareTo(ZERO) > 0) {
-                    if (i == vipGroupActivities.size() - 1) {
-                        activityUserMapper.setActualPrice(activity.getMarketPrice().subtract(subCouponRemitFee));
-                    } else {
-                        //获取比例
-                        BigDecimal ratioAmount = activity.getMarketPrice().divide(totalMarketPrice, 6, BigDecimal.ROUND_HALF_UP);
-                        //获取分配的减免金额
-                        BigDecimal multiply = ratioAmount.multiply(couponRemitFee).setScale(2, BigDecimal.ROUND_HALF_UP);
-                        subCouponRemitFee = subCouponRemitFee.subtract(multiply);
-                        activityUserMapper.setActualPrice(activity.getMarketPrice().subtract(multiply));
-                    }
-                } else {
-                    activityUserMapper.setActualPrice(activity.getMarketPrice());
-                }
-                activityUserMappers.add(activityUserMapper);
-                times = times + activity.getGivePrizeNum();
-                //是否进入课程余额
-                if (activity.isPayToBalance()) {
-                    boolean appendCourseBalance = sysUserCashAccountService.appendCourseBalance(userId, activityUserMapper.getActualPrice(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "2021双11活动");
-                    if (!appendCourseBalance) {
-                        throw new BizException("增加用户课程余额失败");
-                    }
-                }
-                if (!activity.getCode().equals(5)) {
-                    if (order.getCreateTime().compareTo(startTime) >= 0 && order.getCreateTime().compareTo(endTime) <= 0) {
-                        //赠送一次抽奖机会
-                        luckDrawCountService.freeGive(order.getUserId().longValue(), 1, 2);
-                    }
-                }
-            }
-            //赠送抽奖机会
-            if (times > 0) {
-                luckDrawCountService.freeGive(order.getUserId().longValue(), times, 2);
-            }
-            activityUserMapperService.batchInsert(activityUserMappers);
-
-            SysUserCashAccount sysUserCashAccount = sysUserCashAccountService.get(userId);
-            //插入缴费明细
-            //收入
-            SysUserCashAccountDetail sysUserIncomeCashAccountDetail = new SysUserCashAccountDetail();
-            sysUserIncomeCashAccountDetail.setUserId(order.getUserId());
-            sysUserIncomeCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.RECHARGE);
-            sysUserIncomeCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
-            sysUserIncomeCashAccountDetail.setAmount(order.getActualAmount());
-            sysUserIncomeCashAccountDetail.setBalance(sysUserCashAccount.getBalance().add(order.getActualAmount()));
-            sysUserIncomeCashAccountDetail.setAttribute(order.getTransNo());
-            sysUserIncomeCashAccountDetail.setChannel(studentPaymentOrder.getPaymentChannel());
-            sysUserIncomeCashAccountDetail.setComAmount(studentPaymentOrder.getComAmount());
-            sysUserIncomeCashAccountDetail.setPerAmount(studentPaymentOrder.getPerAmount());
-            //支出
-            SysUserCashAccountDetail sysUserExpendCashAccountDetail = new SysUserCashAccountDetail();
-            sysUserExpendCashAccountDetail.setUserId(order.getUserId());
-            sysUserExpendCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.PAY_FEE);
-            sysUserExpendCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
-            sysUserExpendCashAccountDetail.setAmount(order.getActualAmount().negate());
-            sysUserExpendCashAccountDetail.setBalance(sysUserCashAccount.getBalance());
-            sysUserExpendCashAccountDetail.setAttribute(order.getTransNo());
-            sysUserExpendCashAccountDetail.setChannel(studentPaymentOrder.getPaymentChannel());
-
-            if (studentPaymentOrder.getComAmount() != null) {
-                sysUserIncomeCashAccountDetail.setComAmount(studentPaymentOrder.getComAmount().negate());
-            }
-            if (studentPaymentOrder.getPerAmount() != null) {
-                sysUserExpendCashAccountDetail.setPerAmount(studentPaymentOrder.getPerAmount().negate());
-            }
-
-            sysUserCashAccountDetailService.insert(sysUserIncomeCashAccountDetail);
-            sysUserCashAccountDetailService.insert(sysUserExpendCashAccountDetail);
-
-            try {
-                contractService.transferProduceContract(userId, null, null);
-            } catch (Exception e) {
-                LOGGER.error("产品协议生成失败", e);
-            }
-            studentDao.updateStudentServiceTag(userId, null, YesOrNoEnum.YES.getCode());
-            //是否指定满足赠送会员的条件
-            //是否赠送过会员
-            String memberKey = "2021_double_eleven" + order.getUserId();
-            Boolean aBoolean = redisCache.exists(memberKey);
-            if (!aBoolean) {
-                if (order.getCreateTime().compareTo(startTime) >= 0 && order.getCreateTime().compareTo(endTime) <= 0) {
-                    //赠送会员
-                    CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
-//                    Date addDate = now;
-//                    if (student.getMemberRankSettingId() == null || now.after(student.getMembershipEndTime())) {
-//                        cloudTeacherOrder.setStartTime(now);
-//                    } else {
-//                        addDate = student.getMembershipEndTime();
-//                        cloudTeacherOrder.setStartTime(DateUtil.addDays(addDate, 1));
-//                    }
-//                    cloudTeacherOrder.setEndTime(DateUtil.addDays(DateUtil.addMonths(addDate, 1), 1));
-                    cloudTeacherOrder.setRemark("双十一活动赠送会员");
-                    cloudTeacherOrder.setStatus(1);
-                    cloudTeacherOrder.setOrderId(order.getId());
-                    cloudTeacherOrder.setType(PeriodEnum.MONTH);
-                    cloudTeacherOrder.setAmount(BigDecimal.ZERO);
-                    cloudTeacherOrder.setLevel(1);
-                    cloudTeacherOrder.setStudentId(userId);
-                    cloudTeacherOrder.setOrganId(order.getOrganId());
-                    cloudTeacherOrder.setTime(1);
-                    cloudTeacherOrderDao.insert(cloudTeacherOrder);
-//                    studentService.updateMemberRank(cloudTeacherOrder);
-                    redisCache.put(memberKey, userId);
-                }
-            }
-        }
-        if (studentPaymentOrder.getStatus().equals(DealStatusEnum.FAILED)) {
-            if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
-                sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "报名缴费失败");
-            }
-            sysCouponCodeService.quit(studentPaymentOrder.getCouponCodeId());
-        }
-    }
-
-    @Override
     public List<PracticeCourseDto> findUserHistoryBuyPracticeGroups(Integer userId, Long groupId, PracticeGroupType type) {
         List<PracticeCourseDto> userPracticeGroups;
         if (Objects.nonNull(groupId)) {
@@ -5017,173 +4686,6 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     }
 
     @Override
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
-    public Object buyActivityPracticeGroup(PracticeGroupBuyParamsDto practiceGroupBuyParams) throws Exception {
-        Integer activityId = practiceGroupBuyParams.getActivityId();
-        VipGroupActivity activity = vipGroupActivityDao.get(activityId);
-        Date now = new Date();
-        Date startTime = activity.getStartTime();
-        Date endTime = activity.getEndTime();
-        if (startTime != null && startTime.compareTo(now) > 0) {
-            throw new BizException("活动尚未开始,感谢您的关注");
-        }
-        if (endTime != null && endTime.compareTo(now) <= 0) {
-            throw new BizException("活动已结束,感谢您的参与");
-        }
-        Student student = studentDao.getLocked(practiceGroupBuyParams.getUserId());
-        Integer studentMaxUsedTimes = activity.getStudentMaxUsedTimes();
-        if (studentMaxUsedTimes != -1) {
-            //获取活动购买次数
-            int activityBuyNum = activityUserMapperService.countActivityBuyNum(activityId, practiceGroupBuyParams.getUserId());
-            if (activityBuyNum >= studentMaxUsedTimes) {
-                throw new BizException("当前活动最多课购买{}次,感谢您的参与", studentMaxUsedTimes);
-            }
-        }
-        GroupType groupType;
-        Integer buyNum = activity.getMinCourseNum();
-        if (activity.getActivityType() == 1) {
-            buyNum = practiceGroupBuyParams.getBuyMemberNum();
-            groupType = GroupType.MEMBER;
-        } else {
-            if (activity.getCourseType().equals("VIP")) {
-                groupType = GroupType.VIP;
-            } else {
-                groupType = GroupType.PRACTICE;
-            }
-        }
-
-        //判断用户是否已存在订单
-        // 判断是否存在支付中的记录
-        List<StudentPaymentOrder> list = studentPaymentOrderService.queryByCondition(groupType, null, student.getUserId(), DealStatusEnum.ING, OrderTypeEnum.ACTIVITY);
-        if (list.size() > 0) {
-            StudentPaymentOrder order = list.get(0);
-            // 查询订单状态
-            PayStatus payStatus = studentPaymentOrderService.queryPayStatus(order.getPaymentChannel(), order.getOrderNo(), order.getTransNo());
-            if (payStatus == PayStatus.SUCCESSED) {
-                throw new BizException("订单已支付成功,请勿重复支付");
-            }/*else if(payStatus == PayStatus.PAYING){
-                throw new BizException("订单还在交易中,请稍后重试");
-            }*/
-            if (practiceGroupBuyParams.isRepeatPay()) {
-                //处理关闭订单
-                order.setStatus(DealStatusEnum.CLOSE);
-                order.setMemo("关闭活动订单");
-                if (order.getBalancePaymentAmount() != null && order.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
-                    sysUserCashAccountService.updateBalance(order.getUserId(), order.getBalancePaymentAmount(),
-                            PlatformCashAccountDetailTypeEnum.REFUNDS, "购买活动支付失败");
-                }
-                studentPaymentOrderService.update(order);
-                sysCouponCodeService.quit(order.getCouponCodeId());
-            } else {
-                return BaseController.failed(HttpStatus.CONTINUE, "您有待支付的订单");
-            }
-        }
-        BigDecimal activityFee = activity.getMarketPrice();
-        if (groupType == GroupType.MEMBER) {
-            MemberFeeSetting memberFeeSetting = memberFeeSettingDao.findByRankIdAndOrganId(practiceGroupBuyParams.getOrganId(), 1);
-            PeriodEnum periodEnum = activity.getPeriodEnum();
-            switch (periodEnum) {
-                case DAY:
-                    activityFee = memberFeeSetting.getCurrentDayFee().multiply(new BigDecimal(buyNum));
-                    break;
-                case MONTH:
-                    activityFee = memberFeeSetting.getCurrentMonthFee().multiply(new BigDecimal(buyNum));
-                    break;
-                case QUARTERLY:
-                    activityFee = memberFeeSetting.getCurrentQuarterlyFee().multiply(new BigDecimal(buyNum));
-                    break;
-                case YEAR_HALF:
-                    activityFee = memberFeeSetting.getCurrentHalfYearFee().multiply(new BigDecimal(buyNum));
-                    break;
-                case YEAR:
-                    activityFee = memberFeeSetting.getCurrentYearFee().multiply(new BigDecimal(buyNum));
-                    break;
-                default:
-                    throw new BizException("错误的会员周期");
-            }
-            activityFee = activityFee.multiply(activity.getDiscount()).divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, ROUND_DOWN);
-        }
-        //计算订单金额
-        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(practiceGroupBuyParams.getCouponIdList(), activityFee, true);
-        activityFee = studentPaymentOrder.getActualAmount();
-        if (practiceGroupBuyParams.getAmount().compareTo(activityFee) != 0) {
-            throw new BizException("非法访问");
-        }
-
-        String channelType = "";
-        Date nowDate = new Date();
-
-        BigDecimal balance = BigDecimal.ZERO;
-        if (practiceGroupBuyParams.isUseBalancePayment() && activityFee.compareTo(BigDecimal.ZERO) > 0) {
-            SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(student.getUserId());
-            if (userCashAccount == null) {
-                throw new BizException("用户账户找不到");
-            }
-            if (userCashAccount.getBalance() != null && userCashAccount.getBalance().compareTo(BigDecimal.ZERO) > 0) {
-                balance = activityFee.compareTo(userCashAccount.getBalance()) >= 0 ? userCashAccount.getBalance() : activityFee;
-                activityFee = activityFee.subtract(balance);
-                studentPaymentOrder.setActualAmount(activityFee);
-                studentPaymentOrder.setBalancePaymentAmount(balance);
-                sysUserCashAccountService.updateBalance(student.getUserId(), balance.negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "营销活动购买");
-            }
-        }
-
-        String orderNo = idGeneratorService.generatorId("payment") + "";
-
-        studentPaymentOrder.setPaymentChannel("BALANCE");
-        studentPaymentOrder.setUserId(student.getUserId());
-        studentPaymentOrder.setGroupType(groupType);
-        studentPaymentOrder.setOrderNo(orderNo);
-        studentPaymentOrder.setType(OrderTypeEnum.ACTIVITY);
-        studentPaymentOrder.setStatus(DealStatusEnum.ING);
-        studentPaymentOrder.setRemitFee(BigDecimal.ZERO);
-        studentPaymentOrder.setCourseRemitFee(BigDecimal.ZERO);
-        studentPaymentOrder.setOrganId(practiceGroupBuyParams.getOrganId());
-        studentPaymentOrder.setRoutingOrganId(practiceGroupBuyParams.getOrganId());
-        studentPaymentOrder.setCreateTime(nowDate);
-        studentPaymentOrder.setUpdateTime(nowDate);
-        studentPaymentOrder.setActivityId(activityId.toString());
-        studentPaymentOrder.setActivityBuyNum(buyNum);
-        studentPaymentOrderService.insert(studentPaymentOrder);
-
-        studentPaymentOrder.setVersion(0);
-        if (activityFee.compareTo(BigDecimal.ZERO) == 0) {
-            studentPaymentRouteOrderService.addRouteOrder(orderNo, practiceGroupBuyParams.getOrganId(), balance);
-            Map<String, String> notifyMap = new HashMap<>();
-            notifyMap.put("tradeState", "1");
-            notifyMap.put("merOrderNo", studentPaymentOrder.getOrderNo());
-            notifyMap.put("channelType", channelType);
-            notifyMap.put("orderNo", "");
-            studentPaymentOrderService.updateOrder(notifyMap);
-            return notifyMap;
-        }
-
-        String orderSubject = "营销活动";
-        String receiver = "activity";
-
-        String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
-
-        Map payMap = payService.getPayMap(
-                activityFee,
-                balance,
-                orderNo,
-                baseApiUrl + "/api-student/studentOrder/notify",
-                baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
-                orderSubject,
-                orderSubject,
-                studentPaymentOrder.getOrganId(),
-                receiver
-        );
-
-        studentPaymentOrder.setOrganId(studentPaymentOrder.getOrganId());
-        studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
-        studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
-        studentPaymentOrder.setUpdateTime(nowDate);
-        studentPaymentOrderService.update(studentPaymentOrder);
-        return payMap;
-    }
-
-    @Override
     public StudentVipGroupDetailDto getPracticeGroupDetail(Long groupId) {
         return practiceGroupDao.getPracticeGroupDetail(groupId);
     }
@@ -5213,137 +4715,6 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     }
 
     @Override
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
-    public HttpResponseResult buyDoubleEleven2021(BuyDoubleEleven2021Dto buyDoubleEleven2021Dto) throws Exception {
-        String activityIdList = buyDoubleEleven2021Dto.getActivityIdList();
-        List<VipGroupActivity> vipGroupActivities = vipGroupActivityDao.queryByIds(activityIdList);
-        Date now = new Date();
-        Student student = studentDao.getLocked(buyDoubleEleven2021Dto.getUserId());
-        BigDecimal activityFee = ZERO;
-        for (int i = 0; i < vipGroupActivities.size(); i++) {
-            VipGroupActivity activity = vipGroupActivities.get(i);
-            Date startTime = activity.getStartTime();
-            Date endTime = activity.getEndTime();
-            if (startTime != null && startTime.compareTo(now) > 0) {
-                throw new BizException("活动尚未开始,感谢您的关注");
-            }
-            if (endTime != null && endTime.compareTo(now) <= 0) {
-                throw new BizException("活动已结束,感谢您的参与");
-            }
-            Integer studentMaxUsedTimes = activity.getStudentMaxUsedTimes();
-            if (studentMaxUsedTimes != -1) {
-                //获取活动购买次数
-                int activityBuyNum = activityUserMapperService.countActivityBuyNum(activity.getId(), buyDoubleEleven2021Dto.getUserId());
-                if (activityBuyNum >= studentMaxUsedTimes) {
-                    throw new BizException("{}活动最多课购买{}次,感谢您的参与", activity.getName(), studentMaxUsedTimes);
-                }
-            }
-            activityFee = activityFee.add(activity.getMarketPrice());
-        }
-
-        //判断用户是否已存在订单
-        // 判断是否存在支付中的记录
-        List<StudentPaymentOrder> list = studentPaymentOrderService.queryByCondition(GroupType.ACTIVITY, null, student.getUserId(), DealStatusEnum.ING, OrderTypeEnum.DOUBLE_ELEVEN2021);
-        if (list.size() > 0) {
-            StudentPaymentOrder order = list.get(0);
-            // 查询订单状态
-            PayStatus payStatus = studentPaymentOrderService.queryPayStatus(order.getPaymentChannel(), order.getOrderNo(), order.getTransNo());
-            if (payStatus == PayStatus.SUCCESSED) {
-                throw new BizException("订单已支付成功,请勿重复支付");
-            }/*else if(payStatus == PayStatus.PAYING){
-                throw new BizException("订单还在交易中,请稍后重试");
-            }*/
-            if (buyDoubleEleven2021Dto.isRepeatPay()) {
-                //处理关闭订单
-                order.setStatus(DealStatusEnum.CLOSE);
-                order.setMemo("关闭2021双十一活动订单");
-                if (order.getBalancePaymentAmount() != null && order.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
-                    sysUserCashAccountService.updateBalance(order.getUserId(), order.getBalancePaymentAmount(),
-                            PlatformCashAccountDetailTypeEnum.REFUNDS, "2021双十一活动支付失败");
-                }
-                studentPaymentOrderService.update(order);
-                sysCouponCodeService.quit(order.getCouponCodeId());
-            } else {
-                return BaseController.failed(HttpStatus.CONTINUE, "您有待支付的订单,是否继续支付");
-            }
-        }
-        //计算订单金额
-        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(buyDoubleEleven2021Dto.getCouponIdList(), activityFee, true);
-        activityFee = studentPaymentOrder.getActualAmount();
-
-        String channelType = "";
-        Date nowDate = new Date();
-
-        BigDecimal balance = BigDecimal.ZERO;
-        if (buyDoubleEleven2021Dto.isUseBalancePayment() && activityFee.compareTo(BigDecimal.ZERO) > 0) {
-            SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(student.getUserId());
-            if (userCashAccount == null) {
-                throw new BizException("用户账户找不到");
-            }
-            if (userCashAccount.getBalance() != null && userCashAccount.getBalance().compareTo(BigDecimal.ZERO) > 0) {
-                balance = activityFee.compareTo(userCashAccount.getBalance()) >= 0 ? userCashAccount.getBalance() : activityFee;
-                activityFee = activityFee.subtract(balance);
-                studentPaymentOrder.setActualAmount(activityFee);
-                studentPaymentOrder.setBalancePaymentAmount(balance);
-                sysUserCashAccountService.updateBalance(student.getUserId(), balance.negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "2021双十一活动购买");
-            }
-        }
-
-        String orderNo = idGeneratorService.generatorId("payment") + "";
-
-        studentPaymentOrder.setPaymentChannel("BALANCE");
-        studentPaymentOrder.setUserId(student.getUserId());
-        studentPaymentOrder.setGroupType(GroupType.ACTIVITY);
-        studentPaymentOrder.setOrderNo(orderNo);
-        studentPaymentOrder.setType(OrderTypeEnum.DOUBLE_ELEVEN2021);
-        studentPaymentOrder.setStatus(DealStatusEnum.ING);
-        studentPaymentOrder.setRemitFee(BigDecimal.ZERO);
-        studentPaymentOrder.setCourseRemitFee(BigDecimal.ZERO);
-        studentPaymentOrder.setOrganId(buyDoubleEleven2021Dto.getOrganId());
-        studentPaymentOrder.setRoutingOrganId(buyDoubleEleven2021Dto.getOrganId());
-        studentPaymentOrder.setActivityId(activityIdList);
-        studentPaymentOrder.setCreateTime(nowDate);
-        studentPaymentOrder.setUpdateTime(nowDate);
-        studentPaymentOrderService.insert(studentPaymentOrder);
-
-        studentPaymentOrder.setVersion(0);
-        if (activityFee.compareTo(BigDecimal.ZERO) == 0) {
-            studentPaymentRouteOrderService.addRouteOrder(orderNo, buyDoubleEleven2021Dto.getOrganId(), balance);
-            Map<String, String> notifyMap = new HashMap<>();
-            notifyMap.put("tradeState", "1");
-            notifyMap.put("merOrderNo", studentPaymentOrder.getOrderNo());
-            notifyMap.put("channelType", channelType);
-            notifyMap.put("orderNo", "");
-            studentPaymentOrderService.updateOrder(notifyMap);
-            return BaseController.failed(HttpStatus.CREATED, notifyMap, "恭喜您,购买成功!");
-        }
-
-        String orderSubject = "2021双十一活动";
-        String receiver = "vip";
-
-        String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
-
-        Map payMap = payService.getPayMap(
-                activityFee,
-                balance,
-                orderNo,
-                baseApiUrl + "/api-student/studentOrder/notify",
-                baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
-                orderSubject,
-                orderSubject,
-                studentPaymentOrder.getOrganId(),
-                receiver
-        );
-
-        studentPaymentOrder.setOrganId(studentPaymentOrder.getOrganId());
-        studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
-        studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
-        studentPaymentOrder.setUpdateTime(nowDate);
-        studentPaymentOrderService.update(studentPaymentOrder);
-        return BaseController.succeed(payMap);
-    }
-
-    @Override
     public Map<String, BigDecimal> getStudentSurplusCourseFee(Long practiceGroupId) {
         if (Objects.isNull(practiceGroupId)) {
             throw new BizException("请指定课程");

+ 3 - 16
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -107,6 +107,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     private MusicGroupSubjectPlanService musicGroupSubjectPlanService;
     @Autowired
     private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private TenantConfigService tenantConfigService;
 
     @Override
     public BaseDAO<Long, StudentPaymentOrder> getDAO() {
@@ -493,10 +495,6 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         } else if (order.getType().equals(OrderTypeEnum.MEMBER)) {
             //购买团练宝
             memberRankSettingService.orderCallback(order);
-        } else if (order.getType().equals(OrderTypeEnum.ACTIVITY)) {
-            practiceGroupService.activityOrderCallback(order);
-        } else if (order.getType().equals(OrderTypeEnum.DOUBLE_ELEVEN2021)) {
-            practiceGroupService.doubleEleven2021OrderCallback(order);
         }
     }
 
@@ -764,20 +762,9 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                 cloudTeacherOrder.setStudentId(studentPaymentOrder.getUserId());
                 cloudTeacherOrder.setType(activity.getGivePeriodEnum());
                 cloudTeacherOrder.setOrganId(studentPaymentOrder.getOrganId());
-
-//                Student student = studentService.get(studentPaymentOrder.getUserId());
-//                Date startDate = now;
-//                if (student.getMemberRankSettingId() == null || now.after(student.getMembershipEndTime())) {
-//                    cloudTeacherOrder.setStartTime(now);
-//                } else {
-//                    cloudTeacherOrder.setStartTime(DateUtil.addDays(student.getMembershipEndTime(), 1));
-//                    startDate = student.getMembershipEndTime();
-//                }
-//                cloudTeacherOrder.setEndTime(studentService.getMembershipEndTime(activity.getGivePeriodEnum(), startDate, activity.getGiveMemberTime()));
                 cloudTeacherOrder.setTime(activity.getGiveMemberTime());
-                cloudTeacherOrderService.insert(cloudTeacherOrder);
+                cloudTeacherOrderService.save(cloudTeacherOrder,tenantConfigService.autoActivationFlag(cloudTeacherOrder.getTenantId()));
                 // 添加会员有效时长
-//                studentService.updateMemberRank(cloudTeacherOrder);
                 activityUserMapper.setGiveMemberFlag(2);
                 activityUserMapper.setGiveMemberOrderId(cloudTeacherOrder.getId());
             }

+ 5 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -1444,9 +1444,12 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             }
             if (type.equals(ClassGroupTypeEnum.SNAP)) continue;
             for (ClassGroupStudentMapper classGroupStudentMapper : classGroupStudentMappers) {
+                //一个班不能有重复的学员,不能在多个非线上基础技能班
                 if (student.getUserId().equals(classGroupStudentMapper.getUserId())) {
-                    iterator.remove();
-                    break;
+                    if(Objects.equals(classGroupId,classGroupStudentMapper.getClassGroupId()) || type != ClassGroupTypeEnum.HIGH_ONLINE){
+                        iterator.remove();
+                        break;
+                    }
                 }
             }
         }

+ 23 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -9,6 +9,7 @@ import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.TeacherAttendanceComplaintsQueryInfo;
 import com.ym.mec.biz.dal.page.TeacherCloseQueryInfo;
+import com.ym.mec.biz.event.source.SendMessageSource;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
@@ -18,6 +19,7 @@ import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
+import com.ym.mec.thirdparty.yqpay.DateUtils;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import org.apache.commons.lang3.StringUtils;
@@ -55,6 +57,8 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 	@Autowired
 	private SysMessageService sysMessageService;
 	@Autowired
+	private SendMessageSource sendMessageSource;
+	@Autowired
 	private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
 	@Autowired
 	private ClassGroupDao classGroupDao;
@@ -77,19 +81,35 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 	}
 
 	@Transactional(rollbackFor = Exception.class)
+	@Override
 	public void saveStudentStandard(List<StudentStandardDto> studentStandardDtos,Long courseScheduleId){
 		if(studentStandardDtos == null || studentStandardDtos.size() == 0){
 			return;
 		}
-		List<StudentStandardDto> collect = studentStandardDtos.stream().filter(e -> e.getQualifiedFlag() == 0).collect(Collectors.toList());
-		if(collect.size() > 0){
-			List<Integer> studentIds = collect.stream().map(e -> e.getUserId()).collect(Collectors.toList());
+		List<StudentStandardDto> noQualified = studentStandardDtos.stream().filter(e -> e.getQualifiedFlag() == 0).collect(Collectors.toList());
+		CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId);
+		CourseSchedule.CourseScheduleType type = courseSchedule.getType();
+		String courseDate = DateUtil.format(courseSchedule.getClassDate(), DateUtil.ISO_EXPANDED_DATE_FORMAT);
+		if(noQualified.size() > 0){
+			List<Integer> studentIds = noQualified.stream().map(e -> e.getUserId()).collect(Collectors.toList());
 			studentAttendanceDao.updateQualified(courseScheduleId,studentIds);
+			this.sendMessage(studentIds,type,courseDate,MessageTypeEnum.SMS_STANDARD_NO_QUALIFIED);
+		}
+		List<StudentStandardDto> qualified = studentStandardDtos.stream().filter(e -> e.getQualifiedFlag() == 1).collect(Collectors.toList());
+		if(qualified.size() > 0){
+			List<Integer> studentIds = qualified.stream().map(e -> e.getUserId()).collect(Collectors.toList());
+			this.sendMessage(studentIds,type,courseDate,MessageTypeEnum.SMS_STANDARD_QUALIFIED);
 		}
 		//标记当前课程为已评价
 		courseScheduleDao.updateEvaluate(courseScheduleId);
 	}
 
+	public void sendMessage(List<Integer> studentIds,CourseSchedule.CourseScheduleType type,String courseDate,MessageTypeEnum messageTypeEnum){
+		Map<Integer, String> receivers = studentIds.stream().collect(Collectors.toMap(e -> e, e -> e.toString()));
+		sendMessageSource.batchSendMessage(MessageSender.JIGUANG,messageTypeEnum,
+				receivers,null,"STUDENT",courseDate,type.getMsg());
+	}
+
 	@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
 	@Override
 	public Map<String, Object> addTeacherAttendanceRecord(TeacherSignOutDto teacherSignOutDto) {

+ 16 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantConfigServiceImpl.java

@@ -78,6 +78,22 @@ public class TenantConfigServiceImpl extends ServiceImpl<TenantConfigDao, Tenant
                 .orElse(null);
     }
 
+    @Override
+    public Boolean autoActivationFlag(Integer tenantId) {
+        TenantConfig tenantConfig = this.getOne(new WrapperUtil<TenantConfig>()
+                .hasEq("tenant_id_", tenantId).queryWrapper());
+        TenantConfigDetail configDetail = JSON.parseObject(tenantConfig.getConfig(), TenantConfigDetail.class);
+        TenantConfigDetail.MemberConfig memberConfig = configDetail.getMember_config();
+        if(memberConfig.getDay_divide().compareTo(BigDecimal.ZERO) == 0 &&
+                memberConfig.getMonth_divide().compareTo(BigDecimal.ZERO) == 0 &&
+                memberConfig.getHalf_year_divide().compareTo(BigDecimal.ZERO) == 0 &&
+                memberConfig.getQuarter_divide().compareTo(BigDecimal.ZERO) == 0 &&
+                memberConfig.getYear_divide().compareTo(BigDecimal.ZERO) == 0){
+            return true;
+        }
+        return false;
+    }
+
     private void setUserId(Integer id, Consumer<Integer> setOption) {
         if (Objects.isNull(id)) {
             Integer userId = Optional.ofNullable(sysUserFeignService.queryUserInfo())

+ 2 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantOrderRecordServiceImpl.java

@@ -209,15 +209,9 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
         record.setPayTime(now);
         updateById(record);
         List<CloudTeacherOrder> cloudTeacherOrders = cloudTeacherOrderDao.findByPlatformOrderId(record.getId());
-        Date startTime = DateUtil.trunc(now);
-        Date endTime = now;
         for (CloudTeacherOrder cto : cloudTeacherOrders) {
-            endTime = cloudTeacherOrderService.calcCloudTeacherOrderTime(cto, startTime, endTime);
-            cto.setStartTime(startTime);
-            cto.setEndTime(endTime);
-            cto.setStatus(2);
-            cloudTeacherOrderDao.update(cto);
-            studentService.updateMemberRank(cto.getStudentId(), cto.getType(), cto.getTime(), 1);
+            //激活团练宝
+            cloudTeacherOrderService.activationMember(now,cto);
         }
         //发信息
         cloudTeacherOrderService.sendSms(record);

+ 6 - 2
mec-biz/src/main/resources/config/mybatis/CloudCoachPaymentProgramMapper.xml

@@ -27,6 +27,7 @@
 		<result column="audit_time_" property="auditTime" />
 		<result column="organ_id_" property="organId" />
 		<result column="organ_name_" property="organName" />
+		<result column="auto_activation_flag_" property="autoActivationFlag" />
 		<result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
 	</resultMap>
 	
@@ -44,10 +45,10 @@
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.CloudCoachPaymentProgram" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO cloud_coach_payment_program (name_,remark_,member_num_,user_num_,
 		payment_user_num_,period_,member_rank_setting_id_,actual_amount_,original_amount_,
-		operator_,create_time_,update_time_,tenant_id_,memo_,status_,organ_id_)
+		operator_,create_time_,update_time_,tenant_id_,memo_,status_,organ_id_,auto_activation_flag_)
 		VALUES(#{name},#{remark},#{memberNum},#{userNum},#{paymentUserNum},#{period,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
 		#{memberRankSettingId},#{actualAmount},#{originalAmount},#{operator},
-		NOW(),NOW(),#{tenantId},#{memo},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{organId})
+		NOW(),NOW(),#{tenantId},#{memo},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{organId},#{autoActivationFlag})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -56,6 +57,9 @@
 		<if test="status != null">
 			status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
 		</if>
+		<if test="autoActivationFlag != null">
+			auto_activation_flag_ = #{autoActivationFlag},
+		</if>
 		<if test="memo != null">
 			memo_ = #{memo},
 		</if>

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

@@ -361,6 +361,7 @@
                 AND (s.subject_id_list_ = #{subjectId})
             </if>
         </where>
+        ORDER BY cto.id_ DESC
         <include refid="global.limit"/>
     </select>
 

+ 14 - 0
mec-biz/src/main/resources/config/mybatis/CooperationOrganMapper.xml

@@ -200,4 +200,18 @@
     <select id="getCooperationOrganByEduTeacherId" resultMap="CooperationOrgan">
         SELECT * FROM cooperation_organ WHERE education_user_id_ = #{userId} and is_enable_ =1 and del_flag_ =0
     </select>
+    <select id="getFirstGroup" resultType="java.lang.String">
+        SELECT mg.id_ FROM cooperation_organ co
+        LEFT JOIN music_group mg ON mg.cooperation_organ_id_ = co.id_
+        WHERE mg.status_ IN ('PROGRESS','PAUSE') AND co.id_ = #{cooperationOrganId} ORDER BY mg.create_time_ LIMIT 1
+    </select>
+    <select id="findFirstMusic" resultType="java.util.Map">
+        SELECT mg.cooperation_organ_id_ 'key',mg.id_ 'value' FROM music_group mg
+        LEFT JOIN (SELECT co.id_,MIN(mg.create_time_) create_time_ FROM cooperation_organ co
+        LEFT JOIN music_group mg ON mg.cooperation_organ_id_ = co.id_
+        WHERE co.del_flag_ = 0 AND mg.status_ IN ('PROGRESS','PAUSE')
+        GROUP BY mg.cooperation_organ_id_) co ON co.id_ = mg.cooperation_organ_id_
+        WHERE mg.create_time_ = co.create_time_
+        ORDER BY mg.cooperation_organ_id_
+    </select>
 </mapper>

+ 62 - 15
mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml

@@ -843,8 +843,8 @@
 		COUNT(CASE WHEN cssp.group_type_ = 'VIP' AND cs.status_ != 'NOT_START' THEN 1 ELSE NULL END) vip_over_num_,
 		COUNT(CASE WHEN cssp.group_type_ = 'VIP' AND cs.status_ = 'NOT_START' THEN 1 ELSE NULL END) vip_not_start_num_,
 		COUNT(CASE WHEN cssp.group_type_ = 'PRACTICE' AND cs.status_ != 'NOT_START' THEN 1 ELSE NULL END) practice_over_num_,
-		COUNT(CASE WHEN cssp.group_type_ = 'PRACTICE' AND cs.status_ = 'NOT_START' THEN 1 ELSE NULL END) practice_not_start_num_,
-		s.teacher_id_,ste.real_name_
+		COUNT(CASE WHEN cssp.group_type_ = 'PRACTICE' AND cs.status_ = 'NOT_START' THEN 1 ELSE NULL END) practice_not_start_num_
+		,s.teacher_id_,ste.real_name_
 		FROM student s
 		LEFT JOIN course_schedule_student_payment cssp FORCE INDEX(group_type_) ON cssp.user_id_ = s.user_id_
 		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
@@ -865,19 +865,24 @@
 		<result property="userId" column="user_id_"/>
 	</resultMap>
 	<select id="queryLastOverTeacher" resultMap="BaseNameDto">
-		SELECT cssp.user_id_,su.real_name_,su.id_ teacher_id_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
-		LEFT JOIN (
-		SELECT cssp.user_id_,MAX(CONCAT(cs.class_date_,' ',start_class_time_)) class_date_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
-		WHERE cssp.group_type_ = #{groupType} AND cs.status_ != 'NOT_START' AND cssp.user_id_ IN
+		SELECT cssp.user_id_,vg.user_id_ teacher_id_,su.real_name_ FROM course_schedule_student_payment cssp
+		LEFT JOIN (SELECT cs.id_,cs.music_group_id_ FROM course_schedule cs
+		LEFT JOIN (SELECT music_group_id_,MIN(class_date_) class_date_,MIN(start_class_time_) start_class_time_ FROM course_schedule cs
+		WHERE del_flag_ = 0 AND is_lock_ = 0 AND status_ = 'OVER' AND group_type_ = #{groupType}
+		GROUP BY music_group_id_) cs1 ON cs.music_group_id_ = cs1.music_group_id_
+		WHERE cs.class_date_ = cs1.class_date_ AND cs.start_class_time_ = cs1.start_class_time_) cs ON cs.id_ = cssp.course_schedule_id_
+		<if test="groupType == 'VIP'">
+			LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
+		</if>
+		<if test="groupType == 'PRACTICE'">
+			LEFT JOIN practice_group vg ON vg.id_ = cssp.music_group_id_
+		</if>
+		LEFT JOIN sys_user su ON su.id_ = vg.user_id_
+		WHERE cssp.group_type_ = #{groupType} AND cs.id_ = cssp.course_schedule_id_ AND cssp.user_id_ IN
 		<foreach collection="studentIds" open="(" close=")" item="userId" separator=",">
 			#{userId}
 		</foreach>
-		GROUP BY cssp.user_id_) c ON 1=1
-		LEFT JOIN sys_user su ON su.id_ = cs.actual_teacher_id_
-		WHERE cssp.user_id_ = c.user_id_ AND CONCAT(cs.class_date_,' ',cs.start_class_time_) = c.class_date_ AND cssp.group_type_ = #{groupType}
+		GROUP BY cssp.user_id_
 	</select>
     <select id="hasStudentMusicTheoryCourseInfo" resultType="java.lang.Boolean">
 		SELECT CASE WHEN cssp.user_id_ = NULL THEN 0 ELSE 1 END hasCourse
@@ -940,10 +945,52 @@
 		select cssp.music_group_id_ key_,count(cssp.id_) value_ from course_schedule_student_payment cssp left join course_schedule cs on cssp.course_schedule_id_ = cs.id_
 		where cssp.group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler} and 
 		cssp.music_group_id_ IN
-                <foreach collection="musicGroupIds" separator="," item="musicGroupId" open="(" close=")">
-                    #{musicGroupId}
-                </foreach>
+		<foreach collection="musicGroupIds" separator="," item="musicGroupId" open="(" close=")">
+			#{musicGroupId}
+		</foreach>
 		and cssp.user_id_ = #{userId} and cs.class_date_ between #{startDate} and #{endDate}
 		group by cssp.music_group_id_
 	</select>
+	<select id="findUserFirstVipMap" resultType="java.util.Map">
+		SELECT user_id_ 'key',music_group_id_ 'value' FROM course_schedule_student_payment cssp
+		RIGHT JOIN (SELECT MIN(id_) id_ FROM course_schedule_student_payment
+		WHERE group_type_ = #{groupType} AND user_id_ IN
+		<foreach collection="studentIds" separator="," item="userId" open="(" close=")">
+			#{userId}
+		</foreach>
+		GROUP BY user_id_) csp ON csp.id_ = cssp.id_
+	</select>
+	<select id="queryClassTeacher" resultMap="BaseNameDto">
+		SELECT cgsm.user_id_,cgtm.user_id_ teacher_id_,su.real_name_ FROM class_group_student_mapper cgsm
+		LEFT JOIN class_group cg ON cgsm.class_group_id_ = cg.id_
+		LEFT JOIN student_registration sr ON sr.music_group_id_ = cgsm.music_group_id_
+		LEFT JOIN class_group_teacher_mapper cgtm ON cgtm.class_group_id_ = cgsm.class_group_id_
+		LEFT JOIN sys_user su ON cgtm.user_id_ = su.id_
+		WHERE cg.del_flag_ = 0 AND cg.lock_flag_ = 0 AND cg.type_ = 'NORMAL' AND cgsm.status_ = 'NORMAL'
+		AND sr.music_group_status_ = 'NORMAL' AND cgsm.user_id_ IN
+		<foreach collection="studentIds" open="(" close=")" item="userId" separator=",">
+			#{userId}
+		</foreach>
+		GROUP BY cgsm.user_id_
+	</select>
+	<select id="queryFirstNotStartTeacher" resultMap="BaseNameDto">
+		SELECT cssp.user_id_,vg.user_id_ teacher_id_,su.real_name_ FROM course_schedule_student_payment cssp
+		LEFT JOIN (SELECT cs.id_,cs.music_group_id_ FROM course_schedule cs
+		LEFT JOIN (SELECT music_group_id_,MAX(class_date_) class_date_,MAX(start_class_time_) start_class_time_ FROM course_schedule cs
+		WHERE del_flag_ = 0 AND is_lock_ = 0 AND status_ = 'NOT_START' AND group_type_ = #{groupType}
+		GROUP BY music_group_id_) cs1 ON cs.music_group_id_ = cs1.music_group_id_
+		WHERE cs.class_date_ = cs1.class_date_ AND cs.start_class_time_ = cs1.start_class_time_) cs ON cs.id_ = cssp.course_schedule_id_
+		<if test="groupType == 'VIP'">
+			LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
+		</if>
+		<if test="groupType == 'PRACTICE'">
+			LEFT JOIN practice_group vg ON vg.id_ = cssp.music_group_id_
+		</if>
+		LEFT JOIN sys_user su ON su.id_ = vg.user_id_
+		WHERE cssp.group_type_ = #{groupType} AND cs.id_ = cssp.course_schedule_id_ AND cssp.user_id_ IN
+		<foreach collection="studentIds" open="(" close=")" item="userId" separator=",">
+			#{userId}
+		</foreach>
+		GROUP BY cssp.user_id_
+	</select>
 </mapper>

+ 2 - 1
mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml

@@ -33,7 +33,8 @@
 	</select>
 
 	<select id="getOrganDataWithDayAndDataType" resultMap="IndexBaseMonthData">
-		SELECT * FROM index_base_month_data WHERE organ_id_=#{organId} AND month_ = #{day} AND data_type_=#{dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler} ORDER BY month_ DESC LIMIT 1;
+		SELECT * FROM index_base_month_data WHERE organ_id_=#{organId} AND month_ = #{day}
+		AND data_type_=#{dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler} ORDER BY month_ DESC LIMIT 1;
 	</select>
 
 	<!-- 向数据库增加一条记录 -->

+ 14 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml

@@ -1061,4 +1061,18 @@
         ORDER BY mgpscd.update_time_ DESC
         <include refid="global.limit"/>
     </select>
+    <select id="countQuitNum" resultType="java.lang.Integer">
+        SELECT COUNT(DISTINCT mgq.user_id_) FROM music_group_quit mgq
+        LEFT JOIN music_group mg ON mg.id_ = mgq.music_group_id_
+        WHERE mgq.status_ = 'APPROVED' AND mgq.tenant_id_ = #{queryInfo.tenantId}
+        <if test="queryInfo.organId != null and queryInfo.organId != ''">
+            AND FIND_IN_SET(mg.organ_id_,#{queryInfo.organId})
+        </if>
+        <if test="queryInfo.startDate != null">
+            AND DATE_FORMAT(mgq.create_time_,'%Y-%m-%d') >= DATE_FORMAT(#{queryInfo.startDate}, '%Y-%m-%d' )
+        </if>
+        <if test="queryInfo.endDate != null">
+            AND DATE_FORMAT(mgq.create_time_,'%Y-%m-%d') &lt;= DATE_FORMAT(#{queryInfo.endDate}, '%Y-%m-%d' )
+        </if>
+    </select>
 </mapper>

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

@@ -696,4 +696,12 @@
 		GROUP BY pc.`music_group_id_` 
 		    )
     </select>
+    <select id="findCooperationByIds" resultType="java.util.Map">
+        SELECT mgpc.id_ 'key',mg.cooperation_organ_id_ 'value' FROM music_group_payment_calender mgpc
+        LEFT JOIN music_group mg ON mg.id_ = mgpc.music_group_id_
+        WHERE mgpc.id_ IN
+        <foreach collection="calenderIds" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+    </select>
 </mapper>

+ 6 - 2
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderMemberMapper.xml

@@ -19,6 +19,7 @@
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
         <result column="tenant_id_" property="tenantId"/>
+        <result column="auto_activation_flag_" property="autoActivationFlag"/>
 	</resultMap>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -34,9 +35,9 @@
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderMember" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO music_group_payment_calender_member (calender_id_,name_,num_,period_,
-		member_rank_setting_id_,optional_flag_,actual_amount_,original_amount_,create_time_,update_time_,tenant_id_)
+		member_rank_setting_id_,optional_flag_,actual_amount_,original_amount_,create_time_,update_time_,tenant_id_,auto_activation_flag_)
 		VALUES(#{calenderId},#{name},#{num},#{period,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{memberRankSettingId},#{optionalFlag},#{actualAmount},
-		       #{originalAmount},NOW(),NOW(),#{tenantId})
+		       #{originalAmount},NOW(),NOW(),#{tenantId},#{autoActivationFlag})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -51,6 +52,9 @@
 		<if test="num != null">
 		num_ = #{num},
 		</if>
+		<if test="autoActivationFlag != null">
+			auto_activation_flag_ = #{autoActivationFlag},
+		</if>
 		<if test="calenderId != null">
 		calender_id_ = #{calenderId},
 		</if>

+ 22 - 1
mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml

@@ -1194,7 +1194,7 @@
         SELECT sr.*
         FROM student_registration sr
         LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_
-        WHERE mg.status_ = 'PROGRESS'
+        WHERE mg.status_ IN ('PROGRESS','PAUSE')
         AND mg.del_flag_ = 0
         AND sr.music_group_status_ = 'NORMAL'
         AND sr.user_id_ IN
@@ -1787,4 +1787,25 @@
         AND spo.type_ = 'APPLY' AND spo.status_ = 'SUCCESS'
         GROUP BY sr.actual_subject_id_
     </select>
+    <select id="getLastMusicGroupId" resultType="java.util.Map">
+        SELECT sr.user_id_ 'key',sr.music_group_id_ 'value' FROM student_registration sr
+        WHERE sr.id_ IN (SELECT MAX(sr.id_) FROM student_registration sr
+        LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_
+        WHERE sr.music_group_status_ = 'NORMAL' AND mg.status_ IN ('PROGRESS','PAUSE') AND sr.user_id_ IN
+        <foreach collection="userIds" separator="," item="id" open="(" close=")">
+            #{id}
+        </foreach>
+        GROUP BY sr.user_id_)
+    </select>
+    <select id="getLastMusicGroupName" resultType="java.util.Map">
+        SELECT sr.user_id_ 'key',mg.name_ 'value' FROM student_registration sr
+        LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_
+        WHERE sr.id_ IN (SELECT MAX(sr.id_) FROM student_registration sr
+        LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_
+        WHERE sr.music_group_status_ = 'NORMAL' AND mg.status_ IN ('PROGRESS','PAUSE') AND sr.user_id_ IN
+        <foreach collection="userIds" separator="," item="id" open="(" close=")">
+            #{id}
+        </foreach>
+        GROUP BY sr.user_id_)
+    </select>
 </mapper>

+ 12 - 54
mec-common/audit-log/src/main/java/com/yonge/log/interceptor/AuditLogInterceptor.java

@@ -10,23 +10,18 @@ import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.web.method.HandlerMethod;
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
-import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.nio.charset.Charset;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.Executor;
-import java.util.concurrent.ThreadPoolExecutor;
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 /**
  * 日志审计的拦截器
@@ -39,46 +34,10 @@ public class AuditLogInterceptor extends HandlerInterceptorAdapter {
     @Value("${spring.application.name}")
     private String clientName;
 
-    private String username;
-
-    private Integer userId;
-    
-    private String tenantId;
-
     private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
     private static List<String> ignoreLogUrl;
 
-    /**
-     * 异步线程池配置
-     */
-    @Bean("syncSaveLog")
-    public Executor asyncExecutor() {
-        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
-        // 设置核心线程数
-        executor.setCorePoolSize(10);
-        // 设置最大线程数
-        executor.setMaxPoolSize(100);
-        // 设置队列容量
-        executor.setQueueCapacity(1000);
-        // 设置线程活跃时间(秒)
-        executor.setKeepAliveSeconds(60);
-        // 设置默认线程名称
-        executor.setThreadNamePrefix("syncSaveLog-");
-        // 设置拒绝策略
-        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
-        // 等待所有任务结束后再关闭线程池
-        executor.setWaitForTasksToCompleteOnShutdown(true);
-        executor.initialize();
-        return executor;
-    }
-
-
-    @Override
-    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
-        return true;
-    }
-
     @Override
     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
         syncSaveLog(request, handler);
@@ -86,6 +45,11 @@ public class AuditLogInterceptor extends HandlerInterceptorAdapter {
 
     public void syncSaveLog(HttpServletRequest request, Object handler) {
         try {
+            Object userId = request.getAttribute("userId");
+            Object username = request.getAttribute("username");
+            Integer operator = Objects.nonNull(userId)?Integer.parseInt(userId.toString()):null;
+            String name = Objects.nonNull(username)?username.toString():null;
+
             String servletPath = request.getServletPath();
             HandlerMethod handlerMethod = (HandlerMethod) handler;
             AuditLogAnnotation anno = handlerMethod.getMethodAnnotation(AuditLogAnnotation.class);
@@ -98,7 +62,7 @@ public class AuditLogInterceptor extends HandlerInterceptorAdapter {
                 operateName = anno.operateName();
             }
             if (anno != null) {
-                saveLog(operateName, servletPath, request);
+                saveLog(operateName, servletPath, request,operator,name);
                 return;
             }
             if (servletPath.contains("/task/") || servletPath.contains("/import/")) {
@@ -120,13 +84,13 @@ public class AuditLogInterceptor extends HandlerInterceptorAdapter {
                     return;
                 }
             }
-            saveLog(operateName, servletPath, request);
+            saveLog(operateName, servletPath, request,operator,name);
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
 
-    private void saveLog(String operateName, String servletPath, HttpServletRequest request) throws IOException {
+    private void saveLog(String operateName, String servletPath, HttpServletRequest request,Integer userId,String username) throws IOException {
         AuditLog auditLog = new AuditLog();
         auditLog.setOperateName(operateName);
         auditLog.setInterfaceUrl(servletPath);
@@ -146,10 +110,4 @@ public class AuditLogInterceptor extends HandlerInterceptorAdapter {
         auditLog.setOperateTime(sdf.format(new Date()));
         auditLogService.insert(auditLog);
     }
-
-    public void setUsername(String username, Integer userId, String tenantId) {
-        this.username = username;
-        this.userId = userId;
-        this.tenantId = tenantId;
-    }
 }

+ 2 - 28
mec-student/src/main/java/com/ym/mec/student/controller/ActivityController.java

@@ -10,11 +10,8 @@ import com.ym.mec.biz.dal.entity.SporadicChargeInfo;
 import com.ym.mec.biz.service.MarketActivityService;
 import com.ym.mec.biz.service.PracticeGroupService;
 import com.ym.mec.biz.service.SporadicChargeInfoService;
-import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
-import com.ym.mec.common.exception.BizException;
-import com.ym.mec.util.date.DateUtil;
 import com.yonge.log.model.AuditLogAnnotation;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -36,10 +33,6 @@ public class ActivityController extends BaseController {
     @Autowired
     private MarketActivityService marketActivityService;
     @Autowired
-    private PracticeGroupService practiceGroupService;
-    @Autowired
-    private SysConfigDao sysConfigDao;
-    @Autowired
     private StudentPaymentOrderDao studentPaymentOrderDao;
 
     @ApiOperation(value = "分部双11活动信息")
@@ -96,27 +89,8 @@ public class ActivityController extends BaseController {
     @PostMapping(value = "/buyDoubleEleven2021")
     @AuditLogAnnotation(operateName = "2021双十一活动购买")
     public HttpResponseResult buyDoubleEleven2021(@RequestBody BuyDoubleEleven2021Dto buyDoubleEleven2021Dto) throws Exception {
-        Date nowTime = new Date();
-        String startTimeStr = sysConfigDao.findConfigValue(SysConfigService.START_TIME_OF_1111);
-        Date startTime = DateUtil.stringToDate(startTimeStr);
-        if (startTime.compareTo(nowTime) > 0) {
-            throw new BizException("活动还未开始,谢谢关注");
-        }
-        String endTimeStr = sysConfigDao.findConfigValue(SysConfigService.END_TIME_OF_1111);
-        Date endTime = DateUtil.stringToDate(endTimeStr);
-        if (endTime.compareTo(nowTime) <= 0) {
-            throw new BizException("活动已结束,谢谢关注");
-        }
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed(HttpStatus.FORBIDDEN, "请登录");
-        }
-        if(StringUtils.isEmpty(buyDoubleEleven2021Dto.getActivityIdList())){
-            throw new BizException("请选择活动");
-        }
-        buyDoubleEleven2021Dto.setOrganId(sysUser.getOrganId());
-        buyDoubleEleven2021Dto.setUserId(sysUser.getId());
-        return practiceGroupService.buyDoubleEleven2021(buyDoubleEleven2021Dto);
+//        return practiceGroupService.buyDoubleEleven2021(buyDoubleEleven2021Dto);
+        return failed("购买入口已关闭,请联系管理员");
     }
 
     @ApiOperation(value = "学员已购买的双十一活动信息")

+ 2 - 10
mec-student/src/main/java/com/ym/mec/student/controller/PracticeGroupController.java

@@ -276,16 +276,8 @@ public class PracticeGroupController extends BaseController {
     @PostMapping(value = "/buyActivity")
     @AuditLogAnnotation(operateName = "营销活动购买")
     public HttpResponseResult buyActivity(@RequestBody PracticeGroupBuyParamsDto practiceGroupBuyParams) throws Exception {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed(HttpStatus.FORBIDDEN, "请登录");
-        }
-        if(Objects.isNull(practiceGroupBuyParams.getActivityId())){
-            throw new BizException("请选择活动");
-        }
-        practiceGroupBuyParams.setOrganId(sysUser.getOrganId());
-        practiceGroupBuyParams.setUserId(sysUser.getId());
-        return succeed(practiceGroupService.buyActivityPracticeGroup(practiceGroupBuyParams));
+//        return succeed(practiceGroupService.buyActivityPracticeGroup(practiceGroupBuyParams));
+        return failed("购买入口已关闭,请联系管理员");
     }
 
     @ApiOperation(value = "购买指导老师创建的网管课")

+ 4 - 5
mec-student/src/main/java/com/ym/mec/student/interceptor/OperationLogInterceptor.java

@@ -7,10 +7,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Component;
 
-import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
 
 @Component
 public class OperationLogInterceptor extends AuditLogInterceptor {
@@ -20,12 +18,13 @@ public class OperationLogInterceptor extends AuditLogInterceptor {
 	private SysUserFeignService sysUserFeignService;
 
 	@Override
-	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
+	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		if (sysUser != null && sysUser.getId() != null) {
-			setUsername(sysUser.getRealName(),sysUser.getId(), sysUser.getTenantId() + "");
+			request.setAttribute("userId",sysUser.getId());
+			request.setAttribute("username",sysUser.getRealName());
 		}
-		return true;
+		super.afterCompletion(request, response, handler, ex);
 	}
 
 }

+ 4 - 5
mec-teacher/src/main/java/com/ym/mec/teacher/interceptor/OperationLogInterceptor.java

@@ -7,10 +7,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Component;
 
-import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
 
 @Component
 public class OperationLogInterceptor extends AuditLogInterceptor {
@@ -20,12 +18,13 @@ public class OperationLogInterceptor extends AuditLogInterceptor {
 	private SysUserFeignService sysUserFeignService;
 
 	@Override
-	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
+	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		if (sysUser != null && sysUser.getId() != null) {
-			setUsername(sysUser.getRealName(),sysUser.getId(), sysUser.getTenantId() + "");
+			request.setAttribute("userId",sysUser.getId());
+			request.setAttribute("username",sysUser.getRealName());
 		}
-		return true;
+		super.afterCompletion(request, response, handler, ex);
 	}
 
 }

+ 2 - 1
mec-web/src/main/java/com/ym/mec/web/controller/CloudTeacherOrderController.java

@@ -45,7 +45,8 @@ public class CloudTeacherOrderController extends BaseController {
     @PostMapping("/addStudents")
     @PreAuthorize("@pcs.hasPermissions('cloudTeacherOrder/addStudents')")
     public HttpResponseResult<Boolean> addStudents(@RequestBody CloudTeacherAddQueryInfo cloudTeacherAddQueryInfo) {
-        return succeed(cloudTeacherOrderService.addStudents(cloudTeacherAddQueryInfo));
+        return failed("该入口已关闭,请联系管理员");
+//        return succeed(cloudTeacherOrderService.addStudents(cloudTeacherAddQueryInfo));
     }
 
     @ApiOperation(value = "查询未激活团练宝用户")

+ 7 - 1
mec-web/src/main/java/com/ym/mec/web/controller/TenantConfigController.java

@@ -28,7 +28,13 @@ public class TenantConfigController extends BaseController {
 	public Object get() {
 		// 查询云教室扣费标准
 		TenantConfig tenantConfig = tenantConfigService.queryByTenantId(TenantContextHolder.getTenantId());
-
 		return succeed(tenantConfig);
 	}
+
+	@ApiOperation("当前机构是否可以自动激活团练宝")
+	@GetMapping(value = "/autoActivationFlag")
+	@PreAuthorize("@pcs.hasPermissions('tenantConfig/autoActivationFlag')")
+	public Object autoActivationFlag() {
+		return succeed(tenantConfigService.autoActivationFlag(TenantContextHolder.getTenantId()));
+	}
 }

+ 8 - 37
mec-web/src/main/java/com/ym/mec/web/controller/student/StudentAttendanceController.java

@@ -1,31 +1,18 @@
 package com.ym.mec.web.controller.student;
 
-import java.util.Arrays;
-import java.util.List;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-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.dto.StudentAttendanceDto;
-import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.dal.page.CourseScheduleQueryInfo;
 import com.ym.mec.biz.dal.page.StudentAttendanceQueryInfo;
 import com.ym.mec.biz.service.ClassGroupService;
+import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.biz.service.StudentAttendanceService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.exception.BizException;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
 
 @RequestMapping("studentAttendance")
 @Api(tags = "学生考勤服务")
@@ -37,9 +24,7 @@ public class StudentAttendanceController extends BaseController {
     @Autowired
     private ClassGroupService classGroupService;
     @Autowired
-    private SysUserFeignService sysUserFeignService;
-    @Autowired
-    private EmployeeDao employeeDao;
+    private OrganizationService organizationService;
 
     //修复逻辑:是连堂课,有签退记录,某个月,遍历有学员签到记录的每节课
     @GetMapping("/repairStudentAttendance")
@@ -67,21 +52,7 @@ public class StudentAttendanceController extends BaseController {
     @RequestMapping("/findStudentAttendance")
     @PreAuthorize("@pcs.hasPermissions('studentAttendance/findStudentAttendance')")
     public Object findStudentAttendance(StudentAttendanceQueryInfo queryInfo){
-    	SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed("用户信息获取失败");
-        }
-        Employee employee = employeeDao.get(sysUser.getId());
-        if (StringUtils.isEmpty(queryInfo.getOrganId())) {
-            queryInfo.setOrganId(employee.getOrganIdList());
-        }else if(StringUtils.isEmpty(employee.getOrganIdList())){
-            return failed("用户所在分部异常");
-        }else {
-            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
-            if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
-                return failed("非法请求");
-            }
-        }
+        queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
         //按考勤状态和回访状态排序
         queryInfo.setOrderFlag(true);
         return succeed(studentAttendanceService.findStudentAttendance(queryInfo));

+ 9 - 13
mec-web/src/main/java/com/ym/mec/web/interceptor/OperationLogInterceptor.java

@@ -1,18 +1,14 @@
 package com.ym.mec.web.interceptor;
 
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.yonge.log.interceptor.AuditLogInterceptor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Component;
 
-import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.auth.api.entity.SysUser;
-import com.yonge.log.interceptor.AuditLogInterceptor;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 @Component
 public class OperationLogInterceptor extends AuditLogInterceptor {
@@ -22,12 +18,12 @@ public class OperationLogInterceptor extends AuditLogInterceptor {
 	private SysUserFeignService sysUserFeignService;
 
 	@Override
-	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
+	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		if (sysUser != null && sysUser.getId() != null) {
-			setUsername(sysUser.getRealName(),sysUser.getId(), sysUser.getTenantId() + "");
+			request.setAttribute("userId",sysUser.getId());
+			request.setAttribute("username",sysUser.getRealName());
+			super.afterCompletion(request, response, handler, ex);
 		}
-		return true;
 	}
-
 }

+ 10 - 10
mec-web/src/main/resources/exportColumnMapper.ini

@@ -111,16 +111,16 @@ headColumns = ["用户编号", "用户名", "手机号", "课程类型", "实际
 fieldColumns = ["userId", "username", "phone", "type.msg", "name", "actualSalary", "subsidy", "settlementTime", "teacherRole.msg"]
 
 [订单列表导出1]
-headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额",    "乐团课", "VIP课", "网管课", "乐理课", "考级", "维修费用", "乐保费用", "团练宝", "押金", "乐器", "教辅费用", "上门费",    "账户充值", "其它", "汇付手续费","平台手续费", "到账时间",    "关联乐团ID/VIP课ID", "课程形态", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
-fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount",  "couponRemitFee",     "musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee",     "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee", "otherFee", "transferFee", "platformFee", "payTime", "musicGroupId",     "groupType.desc", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
+headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额", "乐团课", "VIP课", "网管课", "乐理课", "考级", "维修费用", "乐保费用", "团练宝", "押金", "乐器", "教辅费用", "上门费","账户充值", "其它", "汇付手续费","平台手续费", "到账时间","关联乐团ID/VIP课ID","课程形态","课程形态描述","收费乐团编号","收费乐团","零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
+fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount","balancePaymentAmount","couponRemitFee","musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee","leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee", "otherFee", "transferFee", "platformFee", "payTime", "musicGroupId","groupType.desc","typeDesc.msg","feeMusicGroupId","feeMusicGroupName", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
 
 [订单列表导出2]
-headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额",    "乐团课", "VIP课", "网管课", "乐理课", "考级", "维修费用", "乐保费用", "团练宝", "押金", "乐器", "教辅费用", "上门费",    "账户充值", "其它","平台手续费", "到账时间",    "关联乐团ID/VIP课ID", "课程形态", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
-fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount",  "couponRemitFee",     "musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee",     "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee", "otherFee", "platformFee", "payTime", "musicGroupId",     "groupType.desc", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
+headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额",    "乐团课", "VIP课", "网管课", "乐理课", "考级", "维修费用", "乐保费用", "团练宝", "押金", "乐器", "教辅费用", "上门费",    "账户充值", "其它","平台手续费", "到账时间",    "关联乐团ID/VIP课ID", "课程形态","课程形态描述","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
+fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount",  "couponRemitFee",     "musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee",     "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee", "otherFee", "platformFee", "payTime", "musicGroupId", "groupType.desc","typeDesc.msg","feeMusicGroupId","feeMusicGroupName", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
 
 [学员小课记录导出]
-headColumns = ["分部", "学员编号", "学生姓名", "课程余额", "声部", "VIP已结束课时数", "VIP未开始课时数", "已结束VIP课老师编号", "已结束VIP课老师","网管课已结束课时数", "网管课未开始课时数", "已结束网管课课老师编号", "已结束网管课课老师", "指导老师编号", "指导老师"]
-fieldColumns = ["organName","userId", "username","courseBalance", "subjectName", "vipOverNum", "vipNotStartNum", "vipOverTeacherId", "vipOverTeacherName" , "practiceOverNum", "practiceNotStartNum", "practiceOverTeacherId", "practiceOverTeacherName","teacherId","teacherName"]
+headColumns = ["分部", "学员编号", "学生姓名", "课程余额", "声部" ,"声部班老师编号" ,"声部班老师", "VIP已结束课时数", "VIP未开始课时数", "已结束VIP课程组老师编号", "已结束VIP课程组老师", "未开始VIP课程组老师编号", "未开始VIP课程组老师","网管课已结束课时数", "网管课未开始课时数", "已结束网管课课程组老师编号", "已结束网管课课程组老师", "未开始网管课课程组老师编号", "未开始网管课课程组老师", "指导老师编号", "指导老师"]
+fieldColumns = ["organName","userId", "username","courseBalance", "subjectName", "normalClassTeacherId", "normalClassTeacherName", "vipOverNum", "vipNotStartNum", "vipOverTeacherId", "vipOverTeacherName", "vipNotStartTeacherId", "vipNotStartTeacherName" , "practiceOverNum", "practiceNotStartNum", "practiceOverTeacherId", "practiceOverTeacherName", "practiceNotStartTeacherId", "practiceNotStartTeacherName","teacherId","teacherName"]
 
 [乐团导出学员列表]
 headColumns = ["学员编号", "学员姓名", "性别", "联系电话","入团时间", "年级", "班级", "入团专业", "学员状态", "报名缴费", "缴费金额", "是否激活","VIP/网管是否有课","关心包","加油包", "欠费金额(元)", "退团原因", "会员截止时间", "会员剩余天数"]
@@ -167,12 +167,12 @@ headColumns = ["分部", "单位编号", "单位名称", "是否启用","乐团
 fieldColumns = ["organization.name", "id", "name", "isEnable == true ? '是':'否'", "realName", "isEnable == true ? '开启' : '未开启'"]
 
 [财务管理导出1]
-headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课", "网管课", "乐理课", "考级", "维修费用", "乐保费用", "团练宝", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "汇付手续费", "平台手续费", "到账时间", "关联乐团ID/VIP课ID", "课程形态", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
-fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance",  "couponRemitFee",     "musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee", "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee", "otherFee", "transferFee", "platformFee", "payTime", "musicGroupId", "groupType.desc", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
+headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课", "网管课", "乐理课", "考级", "维修费用", "乐保费用", "团练宝", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "汇付手续费", "平台手续费", "到账时间", "关联乐团ID/VIP课ID", "课程形态","课程形态描述","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
+fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance",  "couponRemitFee",     "musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee", "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee", "otherFee", "transferFee", "platformFee", "payTime", "musicGroupId", "groupType.desc","typeDesc.msg","feeMusicGroupId","feeMusicGroupName", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
 
 [财务管理导出2]
-headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课", "网管课", "乐理课", "考级", "维修费用", "乐保费用", "团练宝", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "平台手续费", "到账时间", "关联乐团ID/VIP课ID", "课程形态", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
-fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount" , "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance",  "couponRemitFee",     "musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee", "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee", "otherFee", "platformFee", "payTime", "musicGroupId", "groupType.desc", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
+headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课", "网管课", "乐理课", "考级", "维修费用", "乐保费用", "团练宝", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "平台手续费", "到账时间", "关联乐团ID/VIP课ID", "课程形态","课程形态描述","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
+fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount" , "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance",  "couponRemitFee",     "musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee", "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee", "otherFee", "platformFee", "payTime", "musicGroupId", "groupType.desc","typeDesc.msg","feeMusicGroupId","feeMusicGroupName", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
 
 [老师默认课酬导出]
 headColumns = ["老师编号", "姓名", "分部", "工作类型", "在职状态", "老师状态", "1v1", "1v2", "1v3", "1v4", "1v5", "1v6", "1v7","网管课", "单技课2.0(主教)", "合奏课2.0(主教)", "综合课2.0(主教)", "集训单技课2.0(主教)", "集训合奏课2.0(主教)","基础技能课2.0(主教)", "课堂课(主教)", "单技课3.0(主教)", "合奏课3.0(主教)", "综合课3.0(主教)", "集训单技课3.0(主教)", "集训合奏课3.0(主教)","基础技能课3.0(主教)", "单技课2.0(助教)", "合奏课2.0(助教)", "综合课2.0(助教)", "集训单技课2.0(助教)", "集训合奏课2.0(助教)","基础技能课2.0(助教)", "课堂课(助教)", "单技课3.0(助教)", "合奏课3.0(助教)", "综合课3.0(助教)", "集训单技课3.0(助教)", "集训合奏课3.0(助教)","基础技能课3.0(助教)", "网络基础训练课1v3", "网络基础训练课1v4", "网络基础训练课1v5", "乐团网管课1v1"]

+ 10 - 13
mec-websocket/src/main/java/com/ym/mec/web/interceptor/OperationLogInterceptor.java

@@ -1,18 +1,14 @@
 package com.ym.mec.web.interceptor;
 
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.yonge.log.interceptor.AuditLogInterceptor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Component;
 
-import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.auth.api.entity.SysUser;
-import com.yonge.log.interceptor.AuditLogInterceptor;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 @Component
 public class OperationLogInterceptor extends AuditLogInterceptor {
@@ -22,12 +18,13 @@ public class OperationLogInterceptor extends AuditLogInterceptor {
 	private SysUserFeignService sysUserFeignService;
 
 	@Override
-	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
+	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser != null) {
-			setUsername(sysUser.getRealName(),sysUser.getId(), sysUser.getTenantId() + "");
+		if (sysUser != null && sysUser.getId() != null) {
+			request.setAttribute("userId",sysUser.getId());
+			request.setAttribute("username",sysUser.getRealName());
 		}
-		return true;
+		super.afterCompletion(request, response, handler, ex);
 	}
 
 }