Browse Source

Merge branch 'active_course_2021-09-26~29' of http://git.dayaedu.com/yonge/mec

zouxuan 4 years ago
parent
commit
d56d5f7d32
45 changed files with 3049 additions and 446 deletions
  1. 1 1
      codegen/src/main/resources/generateConfigration.xml
  2. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ActivityApplyStudentTypeDao.java
  3. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ActivityPlanDao.java
  4. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MarketActivityDao.java
  5. 16 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/PracticeGroupDao.java
  6. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDefaultPracticeGroupSalaryDao.java
  7. 2 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupActivityDao.java
  8. 16 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ActivityPlanAddDto.java
  9. 114 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ActivityQueryDto.java
  10. 116 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PracticeGroupApplyBaseInfoDto.java
  11. 63 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PracticeGroupApplyDto.java
  12. 52 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SalarySettlementDto.java
  13. 43 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SalarySettlementTypeDto.java
  14. 60 13
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupCostCountParamsDto.java
  15. 56 12
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupSalarySettlementDto.java
  16. 59 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ActivityApplyStudentType.java
  17. 331 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ActivityPlan.java
  18. 59 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MarketActivity.java
  19. 26 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/PracticeGroup.java
  20. 353 149
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroupActivity.java
  21. 42 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/ActivityPlanQueryInfo.java
  22. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ActivityApplyStudentTypeService.java
  23. 36 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ActivityPlanService.java
  24. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MarketActivityService.java
  25. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/service/PracticeGroupService.java
  26. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupActivityService.java
  27. 13 1
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java
  28. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ActivityApplyStudentTypeServiceImpl.java
  29. 193 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ActivityPlanServiceImpl.java
  30. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MarketActivityServiceImpl.java
  31. 268 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  32. 87 101
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupActivityServiceImpl.java
  33. 222 50
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  34. 57 0
      mec-biz/src/main/resources/config/mybatis/ActivityApplyStudentTypeMapper.xml
  35. 172 0
      mec-biz/src/main/resources/config/mybatis/ActivityPlanMapper.xml
  36. 71 0
      mec-biz/src/main/resources/config/mybatis/MarketActivityMapper.xml
  37. 12 0
      mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml
  38. 2 1
      mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml
  39. 110 35
      mec-biz/src/main/resources/config/mybatis/VipGroupActivityMapper.xml
  40. 37 24
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/VipGroupActivityController.java
  41. 93 0
      mec-web/src/main/java/com/ym/mec/web/controller/ActivityPlanController.java
  42. 56 0
      mec-web/src/main/java/com/ym/mec/web/controller/MarketActivityController.java
  43. 44 4
      mec-web/src/main/java/com/ym/mec/web/controller/PracticeGroupManageController.java
  44. 41 29
      mec-web/src/main/java/com/ym/mec/web/controller/VipGroupActivityController.java
  45. 20 16
      mec-web/src/main/java/com/ym/mec/web/controller/education/EduVipGroupActivityController.java

+ 1 - 1
codegen/src/main/resources/generateConfigration.xml

@@ -8,7 +8,7 @@
 		<catalog>mec_test</catalog>
 		<schema>mec_test</schema>
 	</dbConfiguration>
-	<srcBase>e:/javabean</srcBase>
+	<srcBase>/Users/chenxiaoyu/Documents/javabean</srcBase>
 	<pojoPackageName>com.ym.mec.biz.dal.entity</pojoPackageName>
 	<daoPackageName>com.ym.mec.biz.dal.dao</daoPackageName>
 	<servicePackageName>com.ym.mec.biz.service</servicePackageName>

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ActivityApplyStudentTypeDao.java

@@ -0,0 +1,12 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.biz.dal.entity.ActivityApplyStudentType;
+
+public interface ActivityApplyStudentTypeDao extends BaseDAO<Integer, ActivityApplyStudentType> {
+
+
+    void deleteByActivity(Integer activityId);
+
+    void updateByActivity(ActivityApplyStudentType applyToStudentType);
+}

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

@@ -0,0 +1,9 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.biz.dal.entity.ActivityPlan;
+
+public interface ActivityPlanDao extends BaseDAO<Integer, ActivityPlan> {
+
+	
+}

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

@@ -0,0 +1,9 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.biz.dal.entity.MarketActivity;
+
+public interface MarketActivityDao extends BaseDAO<Integer, MarketActivity> {
+
+	
+}

+ 16 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/PracticeGroupDao.java

@@ -388,4 +388,20 @@ public interface PracticeGroupDao extends com.ym.mec.common.dal.BaseDAO<Long, Pr
      * @return
      */
     String getStudentEduTeacher(@Param("studentId") Integer studentId);
+
+    /**
+    * @description: 统计学员在指定活动上关联的次数
+     * @param vipGroupActivityId
+    * @param studentId
+    * @return int
+    * @author zx
+    * @date 2021/10/8 14:59
+    */
+    int countStudentUserActivityNum(@Param("vipGroupActivityId") Integer vipGroupActivityId, @Param("studentId") Integer studentId);
+
+
+
+    int countUserRepeatPracticeGroupInCourseStartEndTime(@Param("userId") Integer userId,
+                                                    @Param("courseStartDate") Date courseStartDate,
+                                                    @Param("courseEndDate") Date courseEndDate);
 }

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDefaultPracticeGroupSalaryDao.java

@@ -31,6 +31,7 @@ public interface TeacherDefaultPracticeGroupSalaryDao extends BaseDAO<Long, Teac
      */
     TeacherDefaultPracticeGroupSalary findByTeacherAndCourseMinutes(@Param("userId")Integer userId,
 																	@Param("minutes") Integer minutes);
+
 	List<TeacherDefaultPracticeGroupSalary> findByTeachersAndCourseMinutes(@Param("teacherIds")List<Integer> teacherIds,
 																	@Param("minutes") Integer minutes);
 

+ 2 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupActivityDao.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dao;
 
+import com.ym.mec.biz.dal.dto.ActivityQueryDto;
 import com.ym.mec.biz.dal.dto.ExportVipGroupActivityDto;
 import com.ym.mec.biz.dal.entity.VipGroupActivity;
 import com.ym.mec.common.dal.BaseDAO;
@@ -15,10 +16,7 @@ public interface VipGroupActivityDao extends BaseDAO<Integer, VipGroupActivity>
 	 * @Date: 2019/10/2
 	 * 根据课程类型获取vip课 活动方案
 	 */
-	List<VipGroupActivity> findByCategory(@Param("categoryId") Long categoryId,
-										  @Param("organIds") String organIds,
-										  @Param("applyToStudentType") Integer applyToStudentType,
-										  @Param("includeClosed") Boolean includeClosed);
+	List<VipGroupActivity> findByCategory(@Param("activityQueryDto") ActivityQueryDto activityQueryDto);
 
 	/**
 	 * 根据活动方案编号列表获取名称

+ 16 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ActivityPlanAddDto.java

@@ -0,0 +1,16 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.ActivityPlan;
+
+public class ActivityPlanAddDto extends ActivityPlan {
+
+    private SalarySettlementDto salarySettlement;
+
+    public SalarySettlementDto getSalarySettlement() {
+        return salarySettlement;
+    }
+
+    public void setSalarySettlement(SalarySettlementDto salarySettlement) {
+        this.salarySettlement = salarySettlement;
+    }
+}

+ 114 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ActivityQueryDto.java

@@ -0,0 +1,114 @@
+package com.ym.mec.biz.dal.dto;
+
+
+import io.swagger.annotations.ApiModelProperty;
+
+public class ActivityQueryDto{
+
+    @ApiModelProperty(value = "课程形式")
+    private Long categoryId;
+
+    @ApiModelProperty(value = "分部")
+    private String organId;
+
+    @ApiModelProperty(value = "课程类型")
+    private String courseType = "VIP";
+
+    @ApiModelProperty(value = "学员列表")
+    private String studentIds;
+
+    @ApiModelProperty(value = "活动类型0课程1会员,默认0")
+    private Integer activityType = 0;
+
+    @ApiModelProperty(value = "0非会员,1会员")
+    private Integer memberNum = -1;
+
+    @ApiModelProperty(value = "0老用户,1新用户")
+    private Integer newStudentNum = -1;
+
+    private Boolean includeClosed;
+
+    private boolean onlySpecialActivity;
+
+    private Integer teacherId;
+
+    public Integer getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Integer teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public boolean isOnlySpecialActivity() {
+        return onlySpecialActivity;
+    }
+
+    public void setOnlySpecialActivity(boolean onlySpecialActivity) {
+        this.onlySpecialActivity = onlySpecialActivity;
+    }
+
+    public Boolean getIncludeClosed() {
+        return includeClosed;
+    }
+
+    public void setIncludeClosed(Boolean includeClosed) {
+        this.includeClosed = includeClosed;
+    }
+
+    public Integer getMemberNum() {
+        return memberNum;
+    }
+
+    public void setMemberNum(Integer memberNum) {
+        this.memberNum = memberNum;
+    }
+
+    public Integer getNewStudentNum() {
+        return newStudentNum;
+    }
+
+    public void setNewStudentNum(Integer newStudentNum) {
+        this.newStudentNum = newStudentNum;
+    }
+
+    public Long getCategoryId() {
+        return categoryId;
+    }
+
+    public void setCategoryId(Long categoryId) {
+        this.categoryId = categoryId;
+    }
+
+    public String getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(String organId) {
+        this.organId = organId;
+    }
+
+    public String getCourseType() {
+        return courseType;
+    }
+
+    public void setCourseType(String courseType) {
+        this.courseType = courseType;
+    }
+
+    public String getStudentIds() {
+        return studentIds;
+    }
+
+    public void setStudentIds(String studentIds) {
+        this.studentIds = studentIds;
+    }
+
+    public Integer getActivityType() {
+        return activityType;
+    }
+
+    public void setActivityType(Integer activityType) {
+        this.activityType = activityType;
+    }
+}

+ 116 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PracticeGroupApplyBaseInfoDto.java

@@ -0,0 +1,116 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.PracticeGroup;
+import com.ym.mec.biz.dal.entity.VipGroupStudentCoursePrice;
+import com.ym.mec.biz.dal.enums.ActivityCourseType;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+public class PracticeGroupApplyBaseInfoDto extends PracticeGroup {
+
+    @ApiModelProperty(value = "科目编号列表")
+    private String subjectIdList;
+
+    @ApiModelProperty(value = "课时总数")
+    private Integer allCourseNum;
+
+    @ApiModelProperty(value = "课酬",required = false)
+    private BigDecimal salary;
+
+    @ApiModelProperty(value = "教师线上课课酬")
+    private BigDecimal onlineTeacherSalary;
+
+    @ApiModelProperty(value = "课程组学员缴费设置")
+    private List<VipGroupStudentCoursePrice> vipGroupStudentCoursePrices;
+
+    @ApiModelProperty(value = "活动课程类型")
+    private ActivityCourseType activityCourseType;
+
+    /** 缴费截止时间 */
+    @ApiModelProperty(value = "缴费截止时间", required = false)
+    private java.util.Date paymentExpireDate;
+
+    /** 课程结束日期 */
+    @ApiModelProperty(value = "课程结束日期", required = false)
+    private java.util.Date coursesExpireDate;
+
+    @ApiModelProperty(value = "报名开始时间", required = false)
+    private Date registrationStartTime;
+
+    public Date getPaymentExpireDate() {
+        return paymentExpireDate;
+    }
+
+    public void setPaymentExpireDate(Date paymentExpireDate) {
+        this.paymentExpireDate = paymentExpireDate;
+    }
+
+    @Override
+    public Date getCoursesExpireDate() {
+        return coursesExpireDate;
+    }
+
+    @Override
+    public void setCoursesExpireDate(Date coursesExpireDate) {
+        this.coursesExpireDate = coursesExpireDate;
+    }
+
+    public Date getRegistrationStartTime() {
+        return registrationStartTime;
+    }
+
+    public void setRegistrationStartTime(Date registrationStartTime) {
+        this.registrationStartTime = registrationStartTime;
+    }
+
+    public ActivityCourseType getActivityCourseType() {
+        return activityCourseType;
+    }
+
+    public void setActivityCourseType(ActivityCourseType activityCourseType) {
+        this.activityCourseType = activityCourseType;
+    }
+
+    public List<VipGroupStudentCoursePrice> getVipGroupStudentCoursePrices() {
+        return vipGroupStudentCoursePrices;
+    }
+
+    public void setVipGroupStudentCoursePrices(List<VipGroupStudentCoursePrice> vipGroupStudentCoursePrices) {
+        this.vipGroupStudentCoursePrices = vipGroupStudentCoursePrices;
+    }
+
+    public String getSubjectIdList() {
+        return subjectIdList;
+    }
+
+    public void setSubjectIdList(String subjectIdList) {
+        this.subjectIdList = subjectIdList;
+    }
+
+    public BigDecimal getOnlineTeacherSalary() {
+        return onlineTeacherSalary;
+    }
+
+    public void setOnlineTeacherSalary(BigDecimal onlineTeacherSalary) {
+        this.onlineTeacherSalary = onlineTeacherSalary;
+    }
+
+    public Integer getAllCourseNum() {
+        return allCourseNum;
+    }
+
+    public void setAllCourseNum(Integer allCourseNum) {
+        this.allCourseNum = allCourseNum;
+    }
+
+    public BigDecimal getSalary() {
+        return salary;
+    }
+
+    public void setSalary(BigDecimal salary) {
+        this.salary = salary;
+    }
+}

+ 63 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PracticeGroupApplyDto.java

@@ -0,0 +1,63 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import io.swagger.annotations.ApiModelProperty;
+import java.math.BigDecimal;
+import java.util.List;
+
+public class PracticeGroupApplyDto {
+
+    @ApiModelProperty(value = "网管课基本信息",required = false)
+    private PracticeGroupApplyBaseInfoDto practiceGroupApplyBaseInfoDto;
+
+    @ApiModelProperty(value = "课程计划列表",required = false)
+    private List<CourseSchedule> courseSchedules;
+
+    @ApiModelProperty(value = "课程组只能是正常状态")
+    private boolean onlyProgress;
+
+    private BigDecimal singleClassPrice;
+
+    @ApiModelProperty(value = "是否允许超出活动允许的学生使用次数")
+    private Boolean allowOverstepActivityStudentNum = false;
+
+    public Boolean getAllowOverstepActivityStudentNum() {
+        return allowOverstepActivityStudentNum;
+    }
+
+    public void setAllowOverstepActivityStudentNum(Boolean allowOverstepActivityStudentNum) {
+        this.allowOverstepActivityStudentNum = allowOverstepActivityStudentNum;
+    }
+
+    public BigDecimal getSingleClassPrice() {
+        return singleClassPrice;
+    }
+
+    public void setSingleClassPrice(BigDecimal singleClassPrice) {
+        this.singleClassPrice = singleClassPrice;
+    }
+
+    public PracticeGroupApplyBaseInfoDto getPracticeGroupApplyBaseInfoDto() {
+        return practiceGroupApplyBaseInfoDto;
+    }
+
+    public void setPracticeGroupApplyBaseInfoDto(PracticeGroupApplyBaseInfoDto practiceGroupApplyBaseInfoDto) {
+        this.practiceGroupApplyBaseInfoDto = practiceGroupApplyBaseInfoDto;
+    }
+
+    public List<CourseSchedule> getCourseSchedules() {
+        return courseSchedules;
+    }
+
+    public void setCourseSchedules(List<CourseSchedule> courseSchedules) {
+        this.courseSchedules = courseSchedules;
+    }
+
+    public boolean getOnlyProgress() {
+        return onlyProgress;
+    }
+
+    public void setOnlyProgress(boolean onlyProgress) {
+        this.onlyProgress = onlyProgress;
+    }
+}

+ 52 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SalarySettlementDto.java

@@ -0,0 +1,52 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+public class SalarySettlementDto implements Serializable {
+
+    @ApiModelProperty("线上课收费标准")
+    private SalarySettlementTypeDto onlineSalarySettlement;
+
+    @ApiModelProperty("线下课收费标准")
+    private SalarySettlementTypeDto offlineSalarySettlement;
+
+    @ApiModelProperty("赠送线上课收费标准")
+    private SalarySettlementTypeDto giveOnlineSalarySettlement;
+
+    @ApiModelProperty("赠送线下课收费标准")
+    private SalarySettlementTypeDto giveOfflineSalarySettlement;
+
+    public SalarySettlementTypeDto getOnlineSalarySettlement() {
+        return onlineSalarySettlement;
+    }
+
+    public void setOnlineSalarySettlement(SalarySettlementTypeDto onlineSalarySettlement) {
+        this.onlineSalarySettlement = onlineSalarySettlement;
+    }
+
+    public SalarySettlementTypeDto getOfflineSalarySettlement() {
+        return offlineSalarySettlement;
+    }
+
+    public void setOfflineSalarySettlement(SalarySettlementTypeDto offlineSalarySettlement) {
+        this.offlineSalarySettlement = offlineSalarySettlement;
+    }
+
+    public SalarySettlementTypeDto getGiveOnlineSalarySettlement() {
+        return giveOnlineSalarySettlement;
+    }
+
+    public void setGiveOnlineSalarySettlement(SalarySettlementTypeDto giveOnlineSalarySettlement) {
+        this.giveOnlineSalarySettlement = giveOnlineSalarySettlement;
+    }
+
+    public SalarySettlementTypeDto getGiveOfflineSalarySettlement() {
+        return giveOfflineSalarySettlement;
+    }
+
+    public void setGiveOfflineSalarySettlement(SalarySettlementTypeDto giveOfflineSalarySettlement) {
+        this.giveOfflineSalarySettlement = giveOfflineSalarySettlement;
+    }
+}

+ 43 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SalarySettlementTypeDto.java

@@ -0,0 +1,43 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.enums.SalarySettlementTypeEnum;
+import com.ym.mec.biz.dal.enums.TeachModeEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+
+public class SalarySettlementTypeDto {
+
+    @ApiModelProperty(value = "课程形式")
+    private TeachModeEnum teachMode;
+
+    @ApiModelProperty(value = "课酬结算方式")
+    private SalarySettlementTypeEnum salarySettlementType;
+
+    @ApiModelProperty(value = "课酬结算参数值")
+    private BigDecimal settlementValue;
+
+    public TeachModeEnum getTeachMode() {
+        return teachMode;
+    }
+
+    public void setTeachMode(TeachModeEnum teachMode) {
+        this.teachMode = teachMode;
+    }
+
+    public SalarySettlementTypeEnum getSalarySettlementType() {
+        return salarySettlementType;
+    }
+
+    public void setSalarySettlementType(SalarySettlementTypeEnum salarySettlementType) {
+        this.salarySettlementType = salarySettlementType;
+    }
+
+    public BigDecimal getSettlementValue() {
+        return settlementValue;
+    }
+
+    public void setSettlementValue(BigDecimal settlementValue) {
+        this.settlementValue = settlementValue;
+    }
+}

+ 60 - 13
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupCostCountParamsDto.java

@@ -2,26 +2,40 @@ package com.ym.mec.biz.dal.dto;
 
 import io.swagger.annotations.ApiModelProperty;
 
+import java.math.BigDecimal;
+
 /**
  * @Author Joburgess
  * @Date 2019/10/1
  */
 public class VipGroupCostCountParamsDto {
 
-    @ApiModelProperty("vip课程类型编号")
+    @ApiModelProperty("课程类型编号")
     private Integer vipGroupCategoryId;
 
-    @ApiModelProperty("vip课默认课程单价编号")
+    @ApiModelProperty("默认课程单价编号")
     private Long vipGroupDefaultClassesUnitPriceId;
 
-    @ApiModelProperty("VIP课活动方案编号")
+    @ApiModelProperty("活动方案编号")
     private Long vipGroupActivityId;
 
     @ApiModelProperty(value = "线上课课时数", required = false)
-    private Integer onlineClassesNum;
+    private BigDecimal vipOnlineClassesNum = BigDecimal.ZERO;
 
     @ApiModelProperty(value = "线下课课时数", required = false)
-    private Integer offlineClassesNum;
+    private BigDecimal vipOfflineClassesNum = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "赠送线上课课时数", required = false)
+    private BigDecimal giveVipOnlineClassesNum = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "赠送线下课课时数", required = false)
+    private BigDecimal giveVipOfflineClassesNum = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "网管课课时数", required = false)
+    private BigDecimal practiceClassesNum = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "赠送网管课课时数", required = false)
+    private BigDecimal givePracticeClassesNum = BigDecimal.ZERO;
 
     public Integer getVipGroupCategoryId() {
         return vipGroupCategoryId;
@@ -47,19 +61,52 @@ public class VipGroupCostCountParamsDto {
         this.vipGroupActivityId = vipGroupActivityId;
     }
 
-    public Integer getOnlineClassesNum() {
-        return onlineClassesNum;
+    public BigDecimal getVipOnlineClassesNum() {
+        return vipOnlineClassesNum;
+    }
+
+    public void setVipOnlineClassesNum(BigDecimal vipOnlineClassesNum) {
+        this.vipOnlineClassesNum = vipOnlineClassesNum;
+    }
+
+    public BigDecimal getVipOfflineClassesNum() {
+        return vipOfflineClassesNum;
+    }
+
+    public void setVipOfflineClassesNum(BigDecimal vipOfflineClassesNum) {
+        this.vipOfflineClassesNum = vipOfflineClassesNum;
     }
 
-    public void setOnlineClassesNum(Integer onlineClassesNum) {
-        this.onlineClassesNum = onlineClassesNum;
+    public BigDecimal getGiveVipOnlineClassesNum() {
+        return giveVipOnlineClassesNum;
     }
 
-    public Integer getOfflineClassesNum() {
-        return offlineClassesNum;
+    public void setGiveVipOnlineClassesNum(BigDecimal giveVipOnlineClassesNum) {
+        this.giveVipOnlineClassesNum = giveVipOnlineClassesNum;
     }
 
-    public void setOfflineClassesNum(Integer offlineClassesNum) {
-        this.offlineClassesNum = offlineClassesNum;
+    public BigDecimal getGiveVipOfflineClassesNum() {
+        return giveVipOfflineClassesNum;
+    }
+
+    public void setGiveVipOfflineClassesNum(BigDecimal giveVipOfflineClassesNum) {
+        this.giveVipOfflineClassesNum = giveVipOfflineClassesNum;
+    }
+
+    public BigDecimal getPracticeClassesNum() {
+        return practiceClassesNum;
+    }
+
+    public void setPracticeClassesNum(BigDecimal practiceClassesNum) {
+        this.practiceClassesNum = practiceClassesNum;
+    }
+
+    public BigDecimal getGivePracticeClassesNum() {
+        return givePracticeClassesNum;
+    }
+
+    public void setGivePracticeClassesNum(BigDecimal givePracticeClassesNum) {
+        this.givePracticeClassesNum = givePracticeClassesNum;
     }
 }
+

+ 56 - 12
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupSalarySettlementDto.java

@@ -10,25 +10,69 @@ import java.io.Serializable;
  */
 public class VipGroupSalarySettlementDto implements Serializable {
 
-    @ApiModelProperty("上课收费标准")
-    private VipGroupSalarySettlementTypeDto onlineSalarySettlement;
+    @ApiModelProperty("收费VIP线上课收费标准")
+    private VipGroupSalarySettlementTypeDto vipOnlineSalarySettlement;
 
-    @ApiModelProperty("线下课收费标准")
-    private VipGroupSalarySettlementTypeDto offlineSalarySettlement;
+    @ApiModelProperty("收费VIP线下课收费标准")
+    private VipGroupSalarySettlementTypeDto vipOfflineSalarySettlement;
 
-    public VipGroupSalarySettlementTypeDto getOnlineSalarySettlement() {
-        return onlineSalarySettlement;
+    @ApiModelProperty("赠送VIP线上课收费标准")
+    private VipGroupSalarySettlementTypeDto giveVipOnlineSalarySettlement;
+
+    @ApiModelProperty("赠送VIP线下课收费标准")
+    private VipGroupSalarySettlementTypeDto giveVipOfflineSalarySettlement;
+
+    @ApiModelProperty("网管课收费标准")
+    private VipGroupSalarySettlementTypeDto practiceSalarySettlement;
+
+    @ApiModelProperty("赠送网管课收费标准")
+    private VipGroupSalarySettlementTypeDto givePracticeSalarySettlement;
+
+    public VipGroupSalarySettlementTypeDto getVipOnlineSalarySettlement() {
+        return vipOnlineSalarySettlement;
+    }
+
+    public void setVipOnlineSalarySettlement(VipGroupSalarySettlementTypeDto vipOnlineSalarySettlement) {
+        this.vipOnlineSalarySettlement = vipOnlineSalarySettlement;
+    }
+
+    public VipGroupSalarySettlementTypeDto getVipOfflineSalarySettlement() {
+        return vipOfflineSalarySettlement;
+    }
+
+    public void setVipOfflineSalarySettlement(VipGroupSalarySettlementTypeDto vipOfflineSalarySettlement) {
+        this.vipOfflineSalarySettlement = vipOfflineSalarySettlement;
+    }
+
+    public VipGroupSalarySettlementTypeDto getGiveVipOnlineSalarySettlement() {
+        return giveVipOnlineSalarySettlement;
+    }
+
+    public void setGiveVipOnlineSalarySettlement(VipGroupSalarySettlementTypeDto giveVipOnlineSalarySettlement) {
+        this.giveVipOnlineSalarySettlement = giveVipOnlineSalarySettlement;
+    }
+
+    public VipGroupSalarySettlementTypeDto getGiveVipOfflineSalarySettlement() {
+        return giveVipOfflineSalarySettlement;
+    }
+
+    public void setGiveVipOfflineSalarySettlement(VipGroupSalarySettlementTypeDto giveVipOfflineSalarySettlement) {
+        this.giveVipOfflineSalarySettlement = giveVipOfflineSalarySettlement;
+    }
+
+    public VipGroupSalarySettlementTypeDto getPracticeSalarySettlement() {
+        return practiceSalarySettlement;
     }
 
-    public void setOnlineSalarySettlement(VipGroupSalarySettlementTypeDto onlineSalarySettlement) {
-        this.onlineSalarySettlement = onlineSalarySettlement;
+    public void setPracticeSalarySettlement(VipGroupSalarySettlementTypeDto practiceSalarySettlement) {
+        this.practiceSalarySettlement = practiceSalarySettlement;
     }
 
-    public VipGroupSalarySettlementTypeDto getOfflineSalarySettlement() {
-        return offlineSalarySettlement;
+    public VipGroupSalarySettlementTypeDto getGivePracticeSalarySettlement() {
+        return givePracticeSalarySettlement;
     }
 
-    public void setOfflineSalarySettlement(VipGroupSalarySettlementTypeDto offlineSalarySettlement) {
-        this.offlineSalarySettlement = offlineSalarySettlement;
+    public void setGivePracticeSalarySettlement(VipGroupSalarySettlementTypeDto givePracticeSalarySettlement) {
+        this.givePracticeSalarySettlement = givePracticeSalarySettlement;
     }
 }

+ 59 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ActivityApplyStudentType.java

@@ -0,0 +1,59 @@
+package com.ym.mec.biz.dal.entity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(activity_apply_student_type):
+ */
+public class ActivityApplyStudentType {
+
+	/**  */
+	private Integer id;
+	
+	/** 是否是新学员1是0否 */
+	private Integer newStudent = -1;
+	
+	/** 是否会员 */
+	private Integer memberFlag = -1;
+	
+	/** 活动编号 */
+	private Integer activityId;
+	
+	public void setId(Integer id){
+		this.id = id;
+	}
+	
+	public Integer getId(){
+		return this.id;
+	}
+			
+	public void setNewStudent(Integer newStudent){
+		this.newStudent = newStudent;
+	}
+	
+	public Integer getNewStudent(){
+		return this.newStudent;
+	}
+			
+	public void setMemberFlag(Integer memberFlag){
+		this.memberFlag = memberFlag;
+	}
+	
+	public Integer getMemberFlag(){
+		return this.memberFlag;
+	}
+			
+	public void setActivityId(Integer activityId){
+		this.activityId = activityId;
+	}
+	
+	public Integer getActivityId(){
+		return this.activityId;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 331 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ActivityPlan.java

@@ -0,0 +1,331 @@
+package com.ym.mec.biz.dal.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 对应数据库表(activity_plan):
+ */
+public class ActivityPlan {
+
+	@ApiModelProperty(value = "活动编号")
+	private Integer id;
+
+	@ApiModelProperty(value = "适用分部")
+	private String organId;
+
+	@ApiModelProperty(value = "活动名称")
+	private String name;
+
+	@ApiModelProperty(value = "活动描述")
+	private String description;
+
+	@ApiModelProperty(value = "活动类型,课程或者会员,0课程,1会员")
+	private Integer type;
+
+	@ApiModelProperty(value = "活动开始时间")
+	private java.util.Date startTime;
+
+	@ApiModelProperty(value = "活动结束时间")
+	private java.util.Date endTime;
+
+	@ApiModelProperty(value = "可排课开始时间")
+	private java.util.Date coursesStartTime;
+
+	@ApiModelProperty(value = "可排课截至时间")
+	private java.util.Date coursesEndTime;
+
+	@ApiModelProperty(value = "适用学生类型:-1:所有;0:老用户;1:新用户,2会员,3非会员")
+	private Integer applyToStudentType = -1;
+
+	@ApiModelProperty(value = "可购买次数:-1:不限制")
+	private Integer maxBuyNum = -1;
+
+	@ApiModelProperty(value = "排课方式0课程余额1排课次数")
+	private Integer courseArrangingType = 0;
+
+	@ApiModelProperty(value = "课程类型VIP,PRACTICE")
+	private String courseType = "VIP";
+
+	@ApiModelProperty(value = "课程形式")
+	private Integer categoryId;
+
+	@ApiModelProperty(value = "单节课时长")
+	private Integer singleCourseTime;
+
+	@ApiModelProperty(value = "最少课程数量")
+	private Integer minCourseNum;
+
+	@ApiModelProperty(value = "最多可排课数量")
+	private Integer maxCourseNum;
+
+	@ApiModelProperty(value = "折扣")
+	private BigDecimal discount = new BigDecimal(100);
+
+	@ApiModelProperty(value = "满赠达标课时:-1:没有满减")
+	private Integer fullMinusCourseTimes = -1;
+
+	@ApiModelProperty(value = "赠课类型")
+	private String giveCourseType;
+
+	@ApiModelProperty(value = "赠课形式")
+	private Integer giveCategoryId;
+
+	@ApiModelProperty(value = "赠课数量")
+	private Integer giveCourseNum = 0;
+
+	@ApiModelProperty(value = "会员编号")
+	private Integer memberRankId;
+
+	@ApiModelProperty(value = "会员时长")
+	private Integer memberTime;
+
+	@ApiModelProperty(value = "结算标准")
+	private String salarySettlementJson;
+
+	@ApiModelProperty(value = "是否删除")
+	private Boolean delFlag = false;
+
+	@ApiModelProperty(value = "是否可用")
+	private Boolean enable = false;
+
+	@ApiModelProperty(value = "创建时间")
+	private java.util.Date createTime;
+
+	@ApiModelProperty(value = "更新时间")
+	private java.util.Date updateTime;
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getOrganId() {
+		return organId;
+	}
+
+	public void setOrganId(String organId) {
+		this.organId = organId;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public Integer getType() {
+		return type;
+	}
+
+	public void setType(Integer type) {
+		this.type = type;
+	}
+
+	public Date getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public Date getCoursesStartTime() {
+		return coursesStartTime;
+	}
+
+	public void setCoursesStartTime(Date coursesStartTime) {
+		this.coursesStartTime = coursesStartTime;
+	}
+
+	public Date getCoursesEndTime() {
+		return coursesEndTime;
+	}
+
+	public void setCoursesEndTime(Date coursesEndTime) {
+		this.coursesEndTime = coursesEndTime;
+	}
+
+	public Integer getApplyToStudentType() {
+		return applyToStudentType;
+	}
+
+	public void setApplyToStudentType(Integer applyToStudentType) {
+		this.applyToStudentType = applyToStudentType;
+	}
+
+	public Integer getMaxBuyNum() {
+		return maxBuyNum;
+	}
+
+	public void setMaxBuyNum(Integer maxBuyNum) {
+		this.maxBuyNum = maxBuyNum;
+	}
+
+	public Integer getCourseArrangingType() {
+		return courseArrangingType;
+	}
+
+	public void setCourseArrangingType(Integer courseArrangingType) {
+		this.courseArrangingType = courseArrangingType;
+	}
+
+	public String getCourseType() {
+		return courseType;
+	}
+
+	public void setCourseType(String courseType) {
+		this.courseType = courseType;
+	}
+
+	public Integer getCategoryId() {
+		return categoryId;
+	}
+
+	public void setCategoryId(Integer categoryId) {
+		this.categoryId = categoryId;
+	}
+
+	public Integer getSingleCourseTime() {
+		return singleCourseTime;
+	}
+
+	public void setSingleCourseTime(Integer singleCourseTime) {
+		this.singleCourseTime = singleCourseTime;
+	}
+
+	public Integer getMinCourseNum() {
+		return minCourseNum;
+	}
+
+	public void setMinCourseNum(Integer minCourseNum) {
+		this.minCourseNum = minCourseNum;
+	}
+
+	public Integer getMaxCourseNum() {
+		return maxCourseNum;
+	}
+
+	public void setMaxCourseNum(Integer maxCourseNum) {
+		this.maxCourseNum = maxCourseNum;
+	}
+
+	public BigDecimal getDiscount() {
+		return discount;
+	}
+
+	public void setDiscount(BigDecimal discount) {
+		this.discount = discount;
+	}
+
+	public Integer getFullMinusCourseTimes() {
+		return fullMinusCourseTimes;
+	}
+
+	public void setFullMinusCourseTimes(Integer fullMinusCourseTimes) {
+		this.fullMinusCourseTimes = fullMinusCourseTimes;
+	}
+
+	public String getGiveCourseType() {
+		return giveCourseType;
+	}
+
+	public void setGiveCourseType(String giveCourseType) {
+		this.giveCourseType = giveCourseType;
+	}
+
+	public Integer getGiveCategoryId() {
+		return giveCategoryId;
+	}
+
+	public void setGiveCategoryId(Integer giveCategoryId) {
+		this.giveCategoryId = giveCategoryId;
+	}
+
+	public Integer getGiveCourseNum() {
+		return giveCourseNum;
+	}
+
+	public void setGiveCourseNum(Integer giveCourseNum) {
+		this.giveCourseNum = giveCourseNum;
+	}
+
+	public Integer getMemberRankId() {
+		return memberRankId;
+	}
+
+	public void setMemberRankId(Integer memberRankId) {
+		this.memberRankId = memberRankId;
+	}
+
+	public Integer getMemberTime() {
+		return memberTime;
+	}
+
+	public void setMemberTime(Integer memberTime) {
+		this.memberTime = memberTime;
+	}
+
+	public String getSalarySettlementJson() {
+		return salarySettlementJson;
+	}
+
+	public void setSalarySettlementJson(String salarySettlementJson) {
+		this.salarySettlementJson = salarySettlementJson;
+	}
+
+	public Boolean getDelFlag() {
+		return delFlag;
+	}
+
+	public void setDelFlag(Boolean delFlag) {
+		this.delFlag = delFlag;
+	}
+
+	public Boolean getEnable() {
+		return enable;
+	}
+
+	public void setEnable(Boolean enable) {
+		this.enable = enable;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+}

+ 59 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MarketActivity.java

@@ -0,0 +1,59 @@
+package com.ym.mec.biz.dal.entity;
+
+import java.util.Date;
+
+/**
+ * 对应数据库表(market_activity):
+ */
+public class MarketActivity {
+
+	private Integer id;
+
+	private String name;
+
+	private String activityIds;
+
+	private Date createTime;
+
+	private Date updateTime;
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getActivityIds() {
+		return activityIds;
+	}
+
+	public void setActivityIds(String activityIds) {
+		this.activityIds = activityIds;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+}

+ 26 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/PracticeGroup.java

@@ -1,7 +1,9 @@
 package com.ym.mec.biz.dal.entity;
 
+import com.ym.mec.biz.dal.enums.AuditStatusEnum;
 import com.ym.mec.biz.dal.enums.GroupStatusEnum;
 import com.ym.mec.biz.dal.enums.PracticeGroupType;
+import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import java.util.Date;
@@ -21,10 +23,11 @@ public class PracticeGroup {
 	private Integer subjectId;
 	
 	private PracticeGroupType type;
-	
-	/**  */
+
+	@ApiModelProperty(value = "教师ID",required = false)
 	private Integer userId;
 
+	@ApiModelProperty(value = "学员ID",required = false)
 	private Integer studentId;
 	
 	/**  */
@@ -62,10 +65,31 @@ public class PracticeGroup {
 
 	private GroupStatusEnum groupStatus;
 
+	@ApiModelProperty(value = "审批状态",required = false)
+	private AuditStatusEnum auditStatus;
+
 	private Long beRenewGroupId;
 
 	private Integer educationalTeacherId;
 
+	private Integer vipGroupActivityId;
+
+	public AuditStatusEnum getAuditStatus() {
+		return auditStatus;
+	}
+
+	public void setAuditStatus(AuditStatusEnum auditStatus) {
+		this.auditStatus = auditStatus;
+	}
+
+	public Integer getVipGroupActivityId() {
+		return vipGroupActivityId;
+	}
+
+	public void setVipGroupActivityId(Integer vipGroupActivityId) {
+		this.vipGroupActivityId = vipGroupActivityId;
+	}
+
 	public String getCoursesStartDates() {
 		return coursesStartDates;
 	}

+ 353 - 149
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroupActivity.java

@@ -1,8 +1,12 @@
 package com.ym.mec.biz.dal.entity;
 
+import com.ym.mec.biz.dal.enums.PeriodEnum;
 import com.ym.mec.biz.dal.enums.VipGroupActivityTypeEnum;
 import io.swagger.annotations.ApiModelProperty;
-import org.apache.commons.lang3.builder.ToStringBuilder;
+import java.math.BigDecimal;
+import java.util.Date;
+
+import static com.ym.mec.biz.dal.enums.PeriodEnum.MONTH;
 
 /**
  * 对应数据库表(vip_group_activity):
@@ -15,6 +19,15 @@ public class VipGroupActivity {
 	@ApiModelProperty(value = "活动名称")
 	private String name;
 
+	@ApiModelProperty(value = "活动类型,课程或者会员,0课程,1会员")
+	private Integer activityType = 0;
+
+	@ApiModelProperty(value = "单节课时长")
+	private Integer singleCourseTime = 45;
+
+	@ApiModelProperty(value = "单节课时长")
+	private Integer giveSingleCourseTime = 45;
+
 	@ApiModelProperty(value = "活动描述\n")
 	private String description;
 
@@ -39,6 +52,39 @@ public class VipGroupActivity {
 	@ApiModelProperty(value = "活动类型(基础活动、折扣、赠送课时)")
 	private VipGroupActivityTypeEnum type;
 
+	@ApiModelProperty(value = "折扣)")
+	private BigDecimal discount = new BigDecimal(100);
+
+	@ApiModelProperty(value = "满赠达标课时:-1:没有满赠)")
+	private Integer fullMinusCourseTimes = -1;
+
+	@ApiModelProperty(value = "赠课类型")
+	private String giveCourseType = "VIP";
+
+	@ApiModelProperty(value = "课类型")
+	private String courseType = "VIP";
+
+	@ApiModelProperty(value = "赠课形式")
+	private String giveCategoryId;
+
+	@ApiModelProperty(value = "赠课数量")
+	private Integer giveCourseNum = 0;
+
+	@ApiModelProperty(value = "会员编号")
+	private Integer memberRankId = 1;
+
+	@ApiModelProperty(value = "会员时长")
+	private Integer memberTime = 0;
+
+	@ApiModelProperty(value = "赠送会员编号")
+	private Integer giveMemberRankId = 1;
+
+	@ApiModelProperty(value = "赠送会员时长")
+	private Integer giveMemberTime = 0;
+
+	@ApiModelProperty(value = "是否充值到余额")
+	private boolean isPayToBalance = true;
+
 	@ApiModelProperty(value = "活动变量1")
 	private String attribute1;
 
@@ -49,13 +95,13 @@ public class VipGroupActivity {
 	private String attribute3;
 
 	@ApiModelProperty(value = "薪水只读标识(1-只读 0-可写)")
-	private String salaryReadonlyFlag;
+	private Integer salaryReadonlyFlag = 0;
 
 	@ApiModelProperty(value = "单节课程费用只读标识")
-	private String paymentReadonlyFlag;
+	private Integer paymentReadonlyFlag = 1;
 
 	@ApiModelProperty(value = "赠送课时支付薪水标识(1-计课酬  0-不计课酬)")
-	private String giveClassPaySalaryFlag;
+	private Integer giveClassPaySalaryFlag = 1;
 
 	@ApiModelProperty(value = "创建时间")
 	private java.util.Date createTime;
@@ -72,172 +118,144 @@ public class VipGroupActivity {
 	private Boolean delFlag = false;
 
 	@ApiModelProperty(value = "是否可用")
-	private Integer enable;
+	private Boolean enable = false;
 
 	@ApiModelProperty(value = "线上课是否参与梯度奖励")
-	private Integer onlineClassJoinGradientRewards;
+	private Integer onlineClassJoinGradientRewards = 0;
 
 	@ApiModelProperty(value = "线下课是否参与梯度奖励")
-	private Integer offlineClassJoinGradientRewards;
+	private Integer offlineClassJoinGradientRewards = 0;
 
 	@ApiModelProperty(value = "最少课程数量")
-	private Integer minCourseNum;
+	private Integer minCourseNum = -1;
 
 	@ApiModelProperty(value = "最多可排课数量")
-	private Integer maxCourseNum;
+	private Integer maxCourseNum = -1;
 
-	@ApiModelProperty(value = "每位学员最大使用次数")
-	private Integer studentMaxUsedTimes;
+	@ApiModelProperty(value = "每位学员最大购买次数")
+	private Integer studentMaxUsedTimes = -1;
 
-	@ApiModelProperty(value = "适用学生类型:-1:所有;0:老用户;1:新用户")
-	private Integer  applyToStudentType = -1;
+	@ApiModelProperty(value = "适用学生类型:-1:所有;0:老用户;1:新用户,2会员,3非会员")
+	private String applyToStudentType;
 
 	@ApiModelProperty(value = "课程可调整方向:0双向可调,1禁止线上到线下,2禁止线下到线上,3双向不可调")
 	private Integer allowOnlineToOffline = 0;
 
-	public Integer getAllowOnlineToOffline() {
-		return allowOnlineToOffline;
-	}
+	@ApiModelProperty(value = "-1:所有;0:线上;1:线下")
+	private Integer teachMode = -1;
 
-	public void setAllowOnlineToOffline(Integer allowOnlineToOffline) {
-		this.allowOnlineToOffline = allowOnlineToOffline;
-	}
+	@ApiModelProperty(value = "-1:所有;0:线上;1:线下")
+	private Integer giveTeachMode = -1;
 
-	public Integer getApplyToStudentType() {
-		return applyToStudentType;
-	}
+	private PeriodEnum periodEnum = MONTH;
 
-	public void setApplyToStudentType(Integer applyToStudentType) {
-		this.applyToStudentType = applyToStudentType;
-	}
+	private PeriodEnum givePeriodEnum = MONTH;
 
-	public Integer getMinCourseNum() {
-		return minCourseNum;
-	}
+	private String status = "DRAFT";
 
-	public void setMinCourseNum(Integer minCourseNum) {
-		this.minCourseNum = minCourseNum;
+	public String getStatus() {
+		return status;
 	}
 
-	public Integer getMaxCourseNum() {
-		return maxCourseNum;
+	public void setStatus(String status) {
+		this.status = status;
 	}
 
-	public void setMaxCourseNum(Integer maxCourseNum) {
-		this.maxCourseNum = maxCourseNum;
+	public Integer getId() {
+		return id;
 	}
 
-	public Integer getOnlineClassJoinGradientRewards() {
-		return onlineClassJoinGradientRewards;
+	public void setId(Integer id) {
+		this.id = id;
 	}
 
-	public void setOnlineClassJoinGradientRewards(Integer onlineClassJoinGradientRewards) {
-		this.onlineClassJoinGradientRewards = onlineClassJoinGradientRewards;
+	public String getName() {
+		return name;
 	}
 
-	public Integer getOfflineClassJoinGradientRewards() {
-		return offlineClassJoinGradientRewards;
+	public void setName(String name) {
+		this.name = name;
 	}
 
-	public void setOfflineClassJoinGradientRewards(Integer offlineClassJoinGradientRewards) {
-		this.offlineClassJoinGradientRewards = offlineClassJoinGradientRewards;
+	public Integer getActivityType() {
+		return activityType;
 	}
 
-	public String getPaymentReadonlyFlag() {
-		return paymentReadonlyFlag;
+	public void setActivityType(Integer activityType) {
+		this.activityType = activityType;
 	}
 
-	public void setPaymentReadonlyFlag(String paymentReadonlyFlag) {
-		this.paymentReadonlyFlag = paymentReadonlyFlag;
+	public Integer getSingleCourseTime() {
+		return singleCourseTime;
 	}
 
-	public Integer getEnable() {
-		return enable;
+	public void setSingleCourseTime(Integer singleCourseTime) {
+		this.singleCourseTime = singleCourseTime;
 	}
 
-	public void setEnable(Integer enable) {
-		this.enable = enable;
+	public Integer getGiveSingleCourseTime() {
+		return giveSingleCourseTime;
 	}
 
-	public String getVipGroupCategoryNames() {
-		return vipGroupCategoryNames;
+	public void setGiveSingleCourseTime(Integer giveSingleCourseTime) {
+		this.giveSingleCourseTime = giveSingleCourseTime;
 	}
 
-	public void setVipGroupCategoryNames(String vipGroupCategoryNames) {
-		this.vipGroupCategoryNames = vipGroupCategoryNames;
+	public String getDescription() {
+		return description;
 	}
 
-	public void setId(Integer id){
-		this.id = id;
-	}
-	
-	public Integer getId(){
-		return this.id;
-	}
-			
-	public void setName(String name){
-		this.name = name;
-	}
-	
-	public String getName(){
-		return this.name;
-	}
-			
-	public void setDescription(String description){
+	public void setDescription(String description) {
 		this.description = description;
 	}
-	
-	public String getDescription(){
-		return this.description;
+
+	public String getVipGroupCategoryIdList() {
+		return vipGroupCategoryIdList;
 	}
-			
-	public void setVipGroupCategoryIdList(String vipGroupCategoryIdList){
+
+	public void setVipGroupCategoryIdList(String vipGroupCategoryIdList) {
 		this.vipGroupCategoryIdList = vipGroupCategoryIdList;
 	}
-	
-	public String getVipGroupCategoryIdList(){
-		return this.vipGroupCategoryIdList;
+
+	public Date getStartTime() {
+		return startTime;
 	}
-			
-	public void setStartTime(java.util.Date startTime){
+
+	public void setStartTime(Date startTime) {
 		this.startTime = startTime;
 	}
-	
-	public java.util.Date getStartTime(){
-		return this.startTime;
+
+	public Date getEndTime() {
+		return endTime;
 	}
-			
-	public void setEndTime(java.util.Date endTime){
+
+	public void setEndTime(Date endTime) {
 		this.endTime = endTime;
 	}
-	
-	public java.util.Date getEndTime(){
-		return this.endTime;
+
+	public String getOrganId() {
+		return organId;
 	}
-			
-	public void setOrganId(String organId){
+
+	public void setOrganId(String organId) {
 		this.organId = organId;
 	}
-	
-	public String getOrganId(){
-		return this.organId;
+
+	public Date getCoursesStartTime() {
+		return coursesStartTime;
 	}
-			
-	public void setCoursesStartTime(java.util.Date coursesStartTime){
+
+	public void setCoursesStartTime(Date coursesStartTime) {
 		this.coursesStartTime = coursesStartTime;
 	}
-	
-	public java.util.Date getCoursesStartTime(){
-		return this.coursesStartTime;
+
+	public Date getCoursesEndTime() {
+		return coursesEndTime;
 	}
-			
-	public void setCoursesEndTime(java.util.Date coursesEndTime){
+
+	public void setCoursesEndTime(Date coursesEndTime) {
 		this.coursesEndTime = coursesEndTime;
 	}
-	
-	public java.util.Date getCoursesEndTime(){
-		return this.coursesEndTime;
-	}
 
 	public VipGroupActivityTypeEnum getType() {
 		return type;
@@ -247,70 +265,174 @@ public class VipGroupActivity {
 		this.type = type;
 	}
 
-	public void setAttribute1(String attribute1){
+	public BigDecimal getDiscount() {
+		return discount;
+	}
+
+	public void setDiscount(BigDecimal discount) {
+		this.discount = discount;
+	}
+
+	public Integer getFullMinusCourseTimes() {
+		return fullMinusCourseTimes;
+	}
+
+	public void setFullMinusCourseTimes(Integer fullMinusCourseTimes) {
+		this.fullMinusCourseTimes = fullMinusCourseTimes;
+	}
+
+	public String getGiveCourseType() {
+		return giveCourseType;
+	}
+
+	public void setGiveCourseType(String giveCourseType) {
+		this.giveCourseType = giveCourseType;
+	}
+
+	public String getCourseType() {
+		return courseType;
+	}
+
+	public void setCourseType(String courseType) {
+		this.courseType = courseType;
+	}
+
+	public String getGiveCategoryId() {
+		return giveCategoryId;
+	}
+
+	public void setGiveCategoryId(String giveCategoryId) {
+		this.giveCategoryId = giveCategoryId;
+	}
+
+	public Integer getGiveCourseNum() {
+		return giveCourseNum;
+	}
+
+	public void setGiveCourseNum(Integer giveCourseNum) {
+		this.giveCourseNum = giveCourseNum;
+	}
+
+	public Integer getMemberRankId() {
+		return memberRankId;
+	}
+
+	public void setMemberRankId(Integer memberRankId) {
+		this.memberRankId = memberRankId;
+	}
+
+	public Integer getMemberTime() {
+		return memberTime;
+	}
+
+	public void setMemberTime(Integer memberTime) {
+		this.memberTime = memberTime;
+	}
+
+	public Integer getGiveMemberRankId() {
+		return giveMemberRankId;
+	}
+
+	public void setGiveMemberRankId(Integer giveMemberRankId) {
+		this.giveMemberRankId = giveMemberRankId;
+	}
+
+	public Integer getGiveMemberTime() {
+		return giveMemberTime;
+	}
+
+	public void setGiveMemberTime(Integer giveMemberTime) {
+		this.giveMemberTime = giveMemberTime;
+	}
+
+	public boolean isPayToBalance() {
+		return isPayToBalance;
+	}
+
+	public void setPayToBalance(boolean payToBalance) {
+		isPayToBalance = payToBalance;
+	}
+
+	public String getAttribute1() {
+		return attribute1;
+	}
+
+	public void setAttribute1(String attribute1) {
 		this.attribute1 = attribute1;
 	}
-	
-	public String getAttribute1(){
-		return this.attribute1;
+
+	public String getAttribute2() {
+		return attribute2;
 	}
-			
-	public void setAttribute2(String attribute2){
+
+	public void setAttribute2(String attribute2) {
 		this.attribute2 = attribute2;
 	}
-	
-	public String getAttribute2(){
-		return this.attribute2;
+
+	public String getAttribute3() {
+		return attribute3;
 	}
-			
-	public void setAttribute3(String attribute3){
+
+	public void setAttribute3(String attribute3) {
 		this.attribute3 = attribute3;
 	}
-	
-	public String getAttribute3(){
-		return this.attribute3;
+
+	public Integer getSalaryReadonlyFlag() {
+		return salaryReadonlyFlag;
 	}
-			
-	public void setSalaryReadonlyFlag(String salaryReadonlyFlag){
+
+	public void setSalaryReadonlyFlag(Integer salaryReadonlyFlag) {
 		this.salaryReadonlyFlag = salaryReadonlyFlag;
 	}
-	
-	public String getSalaryReadonlyFlag(){
-		return this.salaryReadonlyFlag;
+
+	public Integer getPaymentReadonlyFlag() {
+		return paymentReadonlyFlag;
 	}
-			
-	public void setGiveClassPaySalaryFlag(String giveClassPaySalaryFlag){
+
+	public void setPaymentReadonlyFlag(Integer paymentReadonlyFlag) {
+		this.paymentReadonlyFlag = paymentReadonlyFlag;
+	}
+
+	public Integer getGiveClassPaySalaryFlag() {
+		return giveClassPaySalaryFlag;
+	}
+
+	public void setGiveClassPaySalaryFlag(Integer giveClassPaySalaryFlag) {
 		this.giveClassPaySalaryFlag = giveClassPaySalaryFlag;
 	}
-	
-	public String getGiveClassPaySalaryFlag(){
-		return this.giveClassPaySalaryFlag;
+
+	public Date getCreateTime() {
+		return createTime;
 	}
-			
-	public void setCreateTime(java.util.Date createTime){
+
+	public void setCreateTime(Date createTime) {
 		this.createTime = createTime;
 	}
-	
-	public java.util.Date getCreateTime(){
-		return this.createTime;
+
+	public Date getUpdateTime() {
+		return updateTime;
 	}
-			
-	public void setUpdateTime(java.util.Date updateTime){
+
+	public void setUpdateTime(Date updateTime) {
 		this.updateTime = updateTime;
 	}
-	
-	public java.util.Date getUpdateTime(){
-		return this.updateTime;
+
+	public String getSalarySettlementJson() {
+		return salarySettlementJson;
 	}
-			
-	public void setSalarySettlementJson(String salarySettlementJson){
+
+	public void setSalarySettlementJson(String salarySettlementJson) {
 		this.salarySettlementJson = salarySettlementJson;
 	}
-	
-	public String getSalarySettlementJson(){
-		return this.salarySettlementJson;
+
+	public String getVipGroupCategoryNames() {
+		return vipGroupCategoryNames;
+	}
+
+	public void setVipGroupCategoryNames(String vipGroupCategoryNames) {
+		this.vipGroupCategoryNames = vipGroupCategoryNames;
 	}
-			
+
 	public Boolean getDelFlag() {
 		return delFlag;
 	}
@@ -319,6 +441,46 @@ public class VipGroupActivity {
 		this.delFlag = delFlag;
 	}
 
+	public Boolean getEnable() {
+		return enable;
+	}
+
+	public void setEnable(Boolean enable) {
+		this.enable = enable;
+	}
+
+	public Integer getOnlineClassJoinGradientRewards() {
+		return onlineClassJoinGradientRewards;
+	}
+
+	public void setOnlineClassJoinGradientRewards(Integer onlineClassJoinGradientRewards) {
+		this.onlineClassJoinGradientRewards = onlineClassJoinGradientRewards;
+	}
+
+	public Integer getOfflineClassJoinGradientRewards() {
+		return offlineClassJoinGradientRewards;
+	}
+
+	public void setOfflineClassJoinGradientRewards(Integer offlineClassJoinGradientRewards) {
+		this.offlineClassJoinGradientRewards = offlineClassJoinGradientRewards;
+	}
+
+	public Integer getMinCourseNum() {
+		return minCourseNum;
+	}
+
+	public void setMinCourseNum(Integer minCourseNum) {
+		this.minCourseNum = minCourseNum;
+	}
+
+	public Integer getMaxCourseNum() {
+		return maxCourseNum;
+	}
+
+	public void setMaxCourseNum(Integer maxCourseNum) {
+		this.maxCourseNum = maxCourseNum;
+	}
+
 	public Integer getStudentMaxUsedTimes() {
 		return studentMaxUsedTimes;
 	}
@@ -327,9 +489,51 @@ public class VipGroupActivity {
 		this.studentMaxUsedTimes = studentMaxUsedTimes;
 	}
 
-	@Override
-	public String toString() {
-		return ToStringBuilder.reflectionToString(this);
+	public String getApplyToStudentType() {
+		return applyToStudentType;
+	}
+
+	public void setApplyToStudentType(String applyToStudentType) {
+		this.applyToStudentType = applyToStudentType;
+	}
+
+	public Integer getAllowOnlineToOffline() {
+		return allowOnlineToOffline;
+	}
+
+	public void setAllowOnlineToOffline(Integer allowOnlineToOffline) {
+		this.allowOnlineToOffline = allowOnlineToOffline;
+	}
+
+	public Integer getTeachMode() {
+		return teachMode;
 	}
 
-}
+	public void setTeachMode(Integer teachMode) {
+		this.teachMode = teachMode;
+	}
+
+	public Integer getGiveTeachMode() {
+		return giveTeachMode;
+	}
+
+	public void setGiveTeachMode(Integer giveTeachMode) {
+		this.giveTeachMode = giveTeachMode;
+	}
+
+	public PeriodEnum getPeriodEnum() {
+		return periodEnum;
+	}
+
+	public void setPeriodEnum(PeriodEnum periodEnum) {
+		this.periodEnum = periodEnum;
+	}
+
+	public PeriodEnum getGivePeriodEnum() {
+		return givePeriodEnum;
+	}
+
+	public void setGivePeriodEnum(PeriodEnum givePeriodEnum) {
+		this.givePeriodEnum = givePeriodEnum;
+	}
+}

+ 42 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/ActivityPlanQueryInfo.java

@@ -0,0 +1,42 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+* @author zx
+* @date 2021/9/26 15:52
+*/
+public class ActivityPlanQueryInfo extends QueryInfo {
+
+    private String organId;
+
+    private Boolean enable;
+
+    @ApiModelProperty(value = "适用学生类型:-1:所有;0:老用户;1:新用户")
+    private Integer  applyToStudentType;
+
+    public Boolean getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Boolean enable) {
+        this.enable = enable;
+    }
+
+    public String getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(String organId) {
+        this.organId = organId;
+    }
+
+    public Integer getApplyToStudentType() {
+        return applyToStudentType;
+    }
+
+    public void setApplyToStudentType(Integer applyToStudentType) {
+        this.applyToStudentType = applyToStudentType;
+    }
+}

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

@@ -0,0 +1,10 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.ActivityApplyStudentType;
+import com.ym.mec.common.service.BaseService;
+import org.springframework.stereotype.Service;
+
+@Service
+public interface ActivityApplyStudentTypeService extends BaseService<Integer, ActivityApplyStudentType> {
+
+}

+ 36 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ActivityPlanService.java

@@ -0,0 +1,36 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.dto.ActivityPlanAddDto;
+import com.ym.mec.biz.dal.entity.ActivityPlan;
+import com.ym.mec.common.service.BaseService;
+import org.springframework.stereotype.Service;
+
+@Service
+public interface ActivityPlanService extends BaseService<Integer, ActivityPlan> {
+
+    /**
+    * @description:
+     * @param activityPlanAddDto
+    * @author zx
+    * @date 2021/9/26 15:09
+    */
+    void addActivityPlan(ActivityPlanAddDto activityPlanAddDto);
+
+    /**
+    * @description:
+     * @param activityPlanAddDto
+    * @return void
+    * @author zx
+    * @date 2021/9/26 15:25
+    */
+    void updateActivityPlan(ActivityPlanAddDto activityPlanAddDto);
+
+    /**
+    * @description:
+     * @param id
+    * @return void
+    * @author zx
+    * @date 2021/9/26 16:10
+    */
+    void deleteActivityPlan(Integer id);
+}

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/MarketActivityService.java

@@ -0,0 +1,8 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.MarketActivity;
+import com.ym.mec.common.service.BaseService;
+
+public interface MarketActivityService extends BaseService<Integer, MarketActivity> {
+
+}

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

@@ -323,4 +323,15 @@ public interface PracticeGroupService extends BaseService<Long, PracticeGroup> {
      * @return void
      */
     void practiceGroupRenewRemind();
+
+    Map countPracticeGroupPredictFee(PracticeGroupApplyBaseInfoDto practice, Integer userId, Long courseId);
+
+    /**
+    * @description: 网管课申请
+     * @param practiceGroupApplyDto
+    * @return java.lang.Object
+    * @author zx
+    * @date 2021/10/8 12:22
+    */
+    Object createPracticeGroup(PracticeGroupApplyDto practiceGroupApplyDto);
 }

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dto.ActivityQueryDto;
 import com.ym.mec.biz.dal.dto.ExportVipGroupActivityDto;
 import com.ym.mec.biz.dal.dto.VipGroupActivityAddDto;
 import com.ym.mec.biz.dal.entity.VipGroupActivity;
@@ -15,22 +16,21 @@ public interface VipGroupActivityService extends BaseService<Integer, VipGroupAc
      * @Date: 2019/10/1
      * 新增vip课活动方案
      */
-    void addVipGroupActivity(VipGroupActivityAddDto vipGroupActivityAddDto);
+    VipGroupActivityAddDto addVipGroupActivity(VipGroupActivityAddDto vipGroupActivityAddDto);
 
     /**
      * @Author: Joburgess
      * @Date: 2019/10/1
      * 修改vip课活动方案
      */
-    void updateVipGroupActivity(VipGroupActivityAddDto vipGroupActivityAddDto, Integer operatorId);
+    VipGroupActivityAddDto updateVipGroupActivity(VipGroupActivityAddDto vipGroupActivityAddDto, Integer operatorId);
 
     /**
      * @Author: Joburgess
      * @Date: 2019/10/2
      * 根据课程类型获取VIP课相关活动方案
      */
-    List<VipGroupActivity> findByVipGroupCategory(Long categoryId, String organIds, Integer teacherId,
-                                                  Integer applyToStudentType, Boolean includeClosed);
+    List<VipGroupActivity> findByVipGroupCategory(ActivityQueryDto activityQueryDto);
 
     /**
      * 导出vip活动

+ 13 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java

@@ -184,6 +184,18 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
                                                                          Long courseId);
 
     /**
+     * @describe 计算vip课程购买总价,及老师课酬
+     * @author Joburgess
+     * @date 2019/10/23
+     * @param vipGroup: vip课程
+     * @param teacherId: 要计算课酬的老师的编号
+     * @return java.util.Map
+     */
+    <K extends VipGroup> Map<String, BigDecimal> countVipGroupPredictFee1(K vipGroup,
+                                                                         Integer teacherId,
+                                                                         Long courseId);
+
+    /**
      * @describe 计算vip课程购买总价,及老师课酬-只是学生人数统计方式不同
      * @author Joburgess
      * @date 2019/10/23
@@ -222,7 +234,7 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
      * @return com.ym.mec.biz.dal.dto.VipGroupCostCountDto
      * @describe vip课程费用计算
      */
-    VipGroupCostCountDto vipGroupCostCount(VipGroupCostCountParamsDto vipGroupCostCountParamsDto);
+//    VipGroupCostCountDto vipGroupCostCount(VipGroupCostCountParamsDto vipGroupCostCountParamsDto);
 
     /**
      * @describe 更新vip课班级人数及状态

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ActivityApplyStudentTypeServiceImpl.java

@@ -0,0 +1,20 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.biz.service.ActivityApplyStudentTypeService;
+import com.ym.mec.common.dal.BaseDAO;
+import org.springframework.beans.factory.annotation.Autowired;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.biz.dal.entity.ActivityApplyStudentType;
+import com.ym.mec.biz.dal.dao.ActivityApplyStudentTypeDao;
+
+public class ActivityApplyStudentTypeServiceImpl extends BaseServiceImpl<Integer, ActivityApplyStudentType>  implements ActivityApplyStudentTypeService {
+	
+	@Autowired
+	private ActivityApplyStudentTypeDao activityApplyStudentTypeDao;
+
+	@Override
+	public BaseDAO<Integer, ActivityApplyStudentType> getDAO() {
+		return activityApplyStudentTypeDao;
+	}
+	
+}

+ 193 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ActivityPlanServiceImpl.java

@@ -0,0 +1,193 @@
+package com.ym.mec.biz.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.ActivityPlanDao;
+import com.ym.mec.biz.dal.dto.ActivityPlanAddDto;
+import com.ym.mec.biz.dal.dto.SalarySettlementDto;
+import com.ym.mec.biz.dal.dto.SalarySettlementTypeDto;
+import com.ym.mec.biz.dal.entity.ActivityPlan;
+import com.ym.mec.biz.dal.entity.VipGroupActivity;
+import com.ym.mec.biz.event.source.EntityChangeEventSource;
+import com.ym.mec.biz.service.ActivityPlanService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Objects;
+
+import static com.ym.mec.biz.dal.enums.SalarySettlementTypeEnum.RATIO_DISCOUNT;
+import static com.ym.mec.biz.dal.enums.SalarySettlementTypeEnum.TEACHER_DEFAULT;
+
+@Service
+public class ActivityPlanServiceImpl extends BaseServiceImpl<Integer, ActivityPlan>  implements ActivityPlanService {
+	
+	@Autowired
+	private ActivityPlanDao activityPlanDao;
+//	@Autowired
+//	private SysUserFeignService sysUserFeignService;
+
+	@Override
+	public BaseDAO<Integer, ActivityPlan> getDAO() {
+		return activityPlanDao;
+	}
+
+    @Override
+	@Transactional(rollbackFor = Exception.class)
+    public void addActivityPlan(ActivityPlanAddDto activityPlanAddDto) {
+		if(Objects.isNull(activityPlanAddDto.getOrganId())){
+			throw new BizException("请指定分部!");
+		}
+		SalarySettlementDto salarySettlement = activityPlanAddDto.getSalarySettlement();
+		SalarySettlementTypeDto onlineSalarySettlement = salarySettlement.getOnlineSalarySettlement();
+		if(Objects.nonNull(onlineSalarySettlement)){
+			switch (onlineSalarySettlement.getSalarySettlementType()){
+				case TEACHER_DEFAULT:
+					break;
+				case FIXED_SALARY:
+					if(Objects.isNull(onlineSalarySettlement.getSettlementValue())){
+						throw new BizException("请指定线下课固定课酬");
+					}
+					break;
+				default:
+					throw new BizException("错误的课酬结算标准!");
+			}
+		}
+		SalarySettlementTypeDto offlineSalarySettlement = salarySettlement.getOfflineSalarySettlement();
+		if(Objects.nonNull(offlineSalarySettlement)){
+			switch (offlineSalarySettlement.getSalarySettlementType()){
+				case TEACHER_DEFAULT:
+					break;
+				case FIXED_SALARY:
+					if(Objects.isNull(offlineSalarySettlement.getSettlementValue())){
+						throw new BizException("请指定线上课固定课酬");
+					}
+					break;
+				default:
+					throw new BizException("错误的课酬结算标准!");
+			}
+		}
+		SalarySettlementTypeDto giveOnlineSalarySettlement = salarySettlement.getGiveOnlineSalarySettlement();
+		if(Objects.nonNull(giveOnlineSalarySettlement)){
+			switch (giveOnlineSalarySettlement.getSalarySettlementType()){
+				case TEACHER_DEFAULT:
+					break;
+				case FIXED_SALARY:
+					if(Objects.isNull(giveOnlineSalarySettlement.getSettlementValue())){
+						throw new BizException("请指定赠送线下课固定课酬");
+					}
+					break;
+				default:
+					throw new BizException("错误的课酬结算标准!");
+			}
+		}
+		SalarySettlementTypeDto giveOfflineSalarySettlement = salarySettlement.getGiveOfflineSalarySettlement();
+		if(Objects.nonNull(giveOfflineSalarySettlement)){
+			switch (giveOfflineSalarySettlement.getSalarySettlementType()){
+				case TEACHER_DEFAULT:
+					break;
+				case FIXED_SALARY:
+					if(Objects.isNull(giveOfflineSalarySettlement.getSettlementValue())){
+						throw new BizException("请指定赠送线上课固定课酬");
+					}
+					break;
+				default:
+					throw new BizException("错误的课酬结算标准!");
+			}
+		}
+
+		activityPlanAddDto.setSalarySettlementJson(JSON.toJSONString(salarySettlement));
+		super.insert(activityPlanAddDto);
+    }
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void updateActivityPlan(ActivityPlanAddDto activityPlanAddDto) {
+//		SysUser sysUser = sysUserFeignService.queryUserInfo();
+//		if(sysUser == null){
+//			throw new BizException("用户信息获取失败");
+//		}
+		ActivityPlan oldActivityPlan = activityPlanDao.get(activityPlanAddDto.getId());
+		if(Objects.isNull(oldActivityPlan)){
+			throw new BizException("活动不存在!");
+		}
+		if(Objects.isNull(activityPlanAddDto.getOrganId())){
+			throw new BizException("请指定分部!");
+		}
+		SalarySettlementDto salarySettlement = activityPlanAddDto.getSalarySettlement();
+		SalarySettlementTypeDto onlineSalarySettlement = salarySettlement.getOnlineSalarySettlement();
+		if(Objects.nonNull(onlineSalarySettlement)){
+			switch (onlineSalarySettlement.getSalarySettlementType()){
+				case TEACHER_DEFAULT:
+					onlineSalarySettlement.setSettlementValue(null);
+					break;
+				case FIXED_SALARY:
+					if(Objects.isNull(onlineSalarySettlement.getSettlementValue())){
+						throw new BizException("请指定线下课固定课酬");
+					}
+					break;
+				default:
+					throw new BizException("错误的课酬结算标准!");
+			}
+		}
+
+		SalarySettlementTypeDto offlineSalarySettlement = salarySettlement.getOfflineSalarySettlement();
+		if(Objects.nonNull(offlineSalarySettlement)){
+			switch (offlineSalarySettlement.getSalarySettlementType()){
+				case TEACHER_DEFAULT:
+					break;
+				case FIXED_SALARY:
+					if(Objects.isNull(offlineSalarySettlement.getSettlementValue())){
+						throw new BizException("请指定线上课固定课酬");
+					}
+					break;
+				default:
+					throw new BizException("错误的课酬结算标准!");
+			}
+		}
+		SalarySettlementTypeDto giveOnlineSalarySettlement = salarySettlement.getGiveOnlineSalarySettlement();
+		if(Objects.nonNull(giveOnlineSalarySettlement)){
+			switch (giveOnlineSalarySettlement.getSalarySettlementType()){
+				case TEACHER_DEFAULT:
+					break;
+				case FIXED_SALARY:
+					if(Objects.isNull(giveOnlineSalarySettlement.getSettlementValue())){
+						throw new BizException("请指定赠送线下课固定课酬");
+					}
+					break;
+				default:
+					throw new BizException("错误的课酬结算标准!");
+			}
+		}
+		SalarySettlementTypeDto giveOfflineSalarySettlement = salarySettlement.getGiveOfflineSalarySettlement();
+		if(Objects.nonNull(giveOfflineSalarySettlement)){
+			switch (giveOfflineSalarySettlement.getSalarySettlementType()){
+				case TEACHER_DEFAULT:
+					break;
+				case FIXED_SALARY:
+					if(Objects.isNull(giveOfflineSalarySettlement.getSettlementValue())){
+						throw new BizException("请指定赠送线上课固定课酬");
+					}
+					break;
+				default:
+					throw new BizException("错误的课酬结算标准!");
+			}
+		}
+
+		activityPlanAddDto.setSalarySettlementJson(JSON.toJSONString(salarySettlement));
+
+		super.update(activityPlanAddDto);
+//		entityChangeEventSource.entityChange(oldActivityPlan, activityPlanAddDto, sysUser.getId());
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void deleteActivityPlan(Integer id) {
+		//被使用过的活动无法修改
+
+	}
+}

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

@@ -0,0 +1,22 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.biz.dal.dao.MarketActivityDao;
+import com.ym.mec.biz.dal.entity.MarketActivity;
+import com.ym.mec.biz.service.MarketActivityService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class MarketActivityServiceImpl extends BaseServiceImpl<Integer, MarketActivity>  implements MarketActivityService {
+	
+	@Autowired
+	private MarketActivityDao marketActivityDao;
+
+	@Override
+	public BaseDAO<Integer, MarketActivity> getDAO() {
+		return marketActivityDao;
+	}
+	
+}

+ 268 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.auth.api.entity.SysUserRole;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
@@ -138,6 +139,8 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     private StudentGoodsSellDao studentGoodsSellDao;
     @Autowired
     private SysCouponCodeService sysCouponCodeService;
+    @Autowired
+    private VipGroupActivityDao vipGroupActivityDao;
 
     private static Map<Integer, Map<Integer, List<Integer>>> schoolSubjectTeachersMap;
 
@@ -4277,4 +4280,269 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             practiceGroupDao.batchUpdatePracticeRemindStatus(practiceIds, YesOrNoEnum.YES.getCode());
         }
     }
+
+    @Override
+    public Map countPracticeGroupPredictFee(PracticeGroupApplyBaseInfoDto practice, Integer teacherId, Long courseId) {
+        if(Objects.isNull(teacherId)){
+            throw new BizException("请指定教师");
+        }
+        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
+        Integer practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
+        TeacherDefaultPracticeGroupSalary teacherDefaultPracticeGroupSalary = teacherDefaultPracticeGroupSalaryDao.findByTeacherAndCourseMinutes(teacherId,practiceCourseMinutes);
+
+        BigDecimal teacherDefaultSalary=null;
+        if(Objects.nonNull(teacherDefaultPracticeGroupSalary)){
+            teacherDefaultSalary = teacherDefaultPracticeGroupSalary.getMainTeacherSalary();
+        }
+        if(teacherDefaultSalary == null){
+            throw new BizException("请设置老师课酬");
+        }
+
+        VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(practice.getVipGroupActivityId());
+
+        Map<String,BigDecimal> results=new HashMap<>(1);
+        VipGroupSalarySettlementDto vipGroupSalarySettlementDto = JSON.parseObject(vipGroupActivity.getSalarySettlementJson(), VipGroupSalarySettlementDto.class);
+        if(Objects.isNull(vipGroupSalarySettlementDto)){
+            throw new BizException("课酬结算方案错误");
+        }
+        BigDecimal onlineClassNum = new BigDecimal(practice.getAllCourseNum());
+        BigDecimal onlineVipGroupCharge = teacherDefaultSalary.multiply(onlineClassNum);
+        //课程购买费用计算
+        BigDecimal totalPrice = onlineVipGroupCharge.add(onlineVipGroupCharge);
+        totalPrice = totalPrice.multiply(vipGroupActivity.getDiscount()).divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+        results.put("onlineTeacherSalary",totalPrice.setScale(0,BigDecimal.ROUND_CEILING));
+        return results;
+    }
+
+    @Override
+    public Object createPracticeGroup(PracticeGroupApplyDto practice) {
+        PracticeGroupApplyBaseInfoDto applyBaseInfoDto = practice.getPracticeGroupApplyBaseInfoDto();
+        if (Objects.isNull(applyBaseInfoDto.getUserId())){
+            throw new BizException("请选择指导老师");
+        }
+
+        List<CourseSchedule> courseSchedules = practice.getCourseSchedules();
+        if(courseSchedules.size() != applyBaseInfoDto.getAllCourseNum()){
+            throw new BizException("建课失败,当前课程存在未排课课程,请调整相关设置");
+        }
+
+        Integer studentId = applyBaseInfoDto.getStudentId();
+
+        Date now = new Date();
+
+        if(studentId == null){
+            throw new BizException("请选择学员");
+        }
+
+        Integer totalClassTimes = applyBaseInfoDto.getAllCourseNum();
+        //获取第一节课
+        CourseSchedule firstCourseSchedule = courseSchedules.stream().min(Comparator.comparing(CourseSchedule::getStartClassTime)).get();
+        //获取最后一节课
+        CourseSchedule latestCourseSchedule = courseSchedules.stream().max(Comparator.comparing(CourseSchedule::getEndClassTime)).get();
+
+        if(firstCourseSchedule.getStartClassTime().before(now)){
+            throw new BizException("开课时间不能小于当前时间");
+        }
+
+        if(applyBaseInfoDto.getRegistrationStartTime().after(applyBaseInfoDto.getPaymentExpireDate())){
+            throw new BizException("报名开始时间必须在报名截至时间之前");
+        }
+
+        if(applyBaseInfoDto.getPaymentExpireDate().after(firstCourseSchedule.getStartClassTime())
+                ||DateUtil.isSameDay(applyBaseInfoDto.getPaymentExpireDate(),firstCourseSchedule.getEndClassTime())){
+            throw new BizException("创建失败,报名截止时间必须在开课时间前一天");
+        }
+
+        List<VipGroupStudentCoursePrice> vscps = applyBaseInfoDto.getVipGroupStudentCoursePrices();
+
+        SysUser user = teacherDao.getUser(studentId);
+        String userName = StringUtils.isEmpty(user.getUsername()) ? user.getRealName() : user.getUsername();
+        //获取活动信息
+        VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(applyBaseInfoDto.getVipGroupActivityId());
+        if(Objects.nonNull(vipGroupActivity) && !practice.getAllowOverstepActivityStudentNum() &&
+                Objects.nonNull(vipGroupActivity.getStudentMaxUsedTimes())&&vipGroupActivity.getStudentMaxUsedTimes() != -1){
+            int useNum = practiceGroupDao.countStudentUserActivityNum(applyBaseInfoDto.getVipGroupActivityId(), studentId);
+            if(useNum >= vipGroupActivity.getStudentMaxUsedTimes()){
+                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                return BaseController.failed(HttpStatus.PARTIAL_CONTENT,"该活动 "+userName+" 学员创建及成课之和已达上限,是否继续创建该课程?");
+            }
+        }
+        //判断课程安排是否超出范围
+        if(Objects.nonNull(vipGroupActivity) && (Objects.nonNull(vipGroupActivity.getCoursesEndTime())||
+                Objects.nonNull(vipGroupActivity.getCoursesStartTime()))){
+            if(latestCourseSchedule.getEndClassTime().after(vipGroupActivity.getCoursesEndTime())
+                    ||firstCourseSchedule.getStartClassTime().before(vipGroupActivity.getCoursesStartTime())){
+                throw new BizException("课时安排时间超出范围!");
+            }
+        }
+
+        if(Objects.nonNull(vipGroupActivity)&&Objects.nonNull(vipGroupActivity.getMinCourseNum())&&vipGroupActivity.getMinCourseNum()!=-1&&Objects.nonNull(vipGroupActivity.getMaxCourseNum())&&vipGroupActivity.getMaxCourseNum()!=-1){
+            if(totalClassTimes.compareTo(vipGroupActivity.getMinCourseNum())<0||totalClassTimes.compareTo(vipGroupActivity.getMaxCourseNum())>0){
+                throw new BizException("该活动课时数为{}节~{}节", vipGroupActivity.getMinCourseNum(), vipGroupActivity.getMaxCourseNum());
+            }
+        }
+
+        int repeatVipGroups = practiceGroupDao.countUserRepeatPracticeGroupInCourseStartEndTime(studentId, firstCourseSchedule.getStartClassTime(), latestCourseSchedule.getEndClassTime());
+        if(repeatVipGroups>0){
+            throw new BizException("请勿重复提交");
+        }
+
+        //生成网管课信息
+        List<String> bySubIds = subjectDao.findBySubIds(applyBaseInfoDto.getSubjectIdList());
+        StringBuffer className = new StringBuffer(StringUtils.join(bySubIds,","));
+        className.append("•").append(userName);
+        applyBaseInfoDto.setName(className.toString());
+
+        //计算课程相关费用信息
+        Map<String, BigDecimal> costInfo = countPracticeGroupPredictFee(applyBaseInfoDto,studentId, null);
+
+        applyBaseInfoDto.setAuditStatus(AuditStatusEnum.PASS);
+
+        //如果默认课酬与实际课酬不匹配则需要审批
+        if(costInfo.get("onlineTeacherSalary").compareTo(applyBaseInfoDto.getOnlineTeacherSalary()) < 0){
+            applyBaseInfoDto.setAuditStatus(AuditStatusEnum.ING);
+        }
+
+        applyBaseInfoDto.setOnlineTeacherSalary(costInfo.get("onlineTeacherSalary"));
+        applyBaseInfoDto.setGroupStatus(GroupStatusEnum.APPLYING);
+//        if(CollectionUtils.isEmpty(vscps)){
+//            vscps = new ArrayList<>();
+//            vscps.add(new VipGroupStudentCoursePrice(studentId, applyBaseInfoDto.getOfflineClassesUnitPrice(),
+//                    vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice(), vipGroupApplyBaseInfoDto.getTotalPrice()));
+//        }
+        Teacher teacher = teacherService.get(applyBaseInfoDto.getUserId());
+        if(Objects.isNull(teacher)){
+            throw new BizException("教师不存在");
+        }
+        if(Objects.isNull(teacher.getTeacherOrganId())){
+            throw new BizException("教师部门异常");
+        }
+        return null;
+//        vipGroupApplyBaseInfoDto.setOrganId(Integer.parseInt(teacher.getOrganId()));
+        //开课时间为排课的第一节课的开始时间
+//        vipGroupApplyBaseInfoDto.setCourseStartDate(firstCourseSchedule.getStartClassTime());
+//        //课程结束时间为排课的最后一节课的结束时间
+//        vipGroupApplyBaseInfoDto.setCoursesExpireDate(latestCourseSchedule.getEndClassTime());
+//
+//        vipGroupApplyBaseInfoDto.setPaymentExpireDate(DateUtil.getLastSecondWithDay(vipGroupApplyBaseInfoDto.getPaymentExpireDate()));
+//
+//        VipGroupDefaultClassesUnitPrice vipGroupDefaultClassesUnitPrice = vipGroupDefaultClassesUnitPriceDao.getByVipGroupCategory(vipGroup.getVipGroupApplyBaseInfo().getVipGroupCategoryId(), vipGroup.getVipGroupApplyBaseInfo().getOrganId());
+//
+//        if(Objects.isNull(vipGroupDefaultClassesUnitPrice)){
+//            vipGroupApplyBaseInfoDto.setAuditStatus(AuditStatusEnum.ING);
+//        }else{
+//            if(Objects.nonNull(vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice())
+//                    &&vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice().compareTo(vipGroupDefaultClassesUnitPrice.getOfflineClassesUnitPrice())!=0){
+//                vipGroupApplyBaseInfoDto.setAuditStatus(AuditStatusEnum.ING);
+//            }
+//            if(Objects.nonNull(vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice())
+//                    &&vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice().compareTo(vipGroupDefaultClassesUnitPrice.getOnlineClassesUnitPrice())!=0){
+//                vipGroupApplyBaseInfoDto.setAuditStatus(AuditStatusEnum.ING);
+//            }
+//        }
+//
+//        if(StringUtils.isBlank(vipGroupApplyBaseInfoDto.getStudentIdList())){
+//            vipGroupApplyBaseInfoDto.setStudentIdList(StringUtils.join(vscps.stream().map(VipGroupStudentCoursePrice::getStudentId).collect(Collectors.toList()), ","));
+//        }
+//
+//        if(vipGroup.getOnlyProgress()){
+//            vipGroupApplyBaseInfoDto.setAuditStatus(AuditStatusEnum.PASS);
+//        }
+//
+//        vipGroupDao.insert(vipGroupApplyBaseInfoDto);
+//
+//        vscps.forEach(e->e.setVipGroupId(vipGroupApplyBaseInfoDto.getId()));
+//        vipGroupStudentCoursePriceDao.batchInsert(vscps);
+//
+//        vipGroup.getVipGroupApplyBaseInfo().setId(vipGroupApplyBaseInfoDto.getId());
+//
+//        //创建班级信息
+//        ClassGroup classGroup=new ClassGroup();
+//        classGroup.setSubjectIdList(vipGroupApplyBaseInfoDto.getSubjectIdList());
+//        classGroup.setExpectStudentNum(vipGroupCategory.getStudentNum());
+//        if(StringUtils.isNotBlank(studentIds)){
+//            classGroup.setStudentNum(studentIdList.size());
+//        }
+//        classGroup.setName(vipGroupApplyBaseInfoDto.getName());
+//        classGroup.setExpectStudentNum(vipGroupApplyBaseInfoDto.getStudentNum());
+//        classGroup.setTotalClassTimes(totalClassTimes);
+//        classGroup.setType(ClassGroupTypeEnum.VIP);
+//        classGroup.setDelFlag(1);
+//        classGroup.setGroupType(GroupType.VIP);
+//        classGroup.setMusicGroupId(vipGroupApplyBaseInfoDto.getId().toString());
+//        classGroup.setCreateTime(now);
+//        classGroup.setUpdateTime(now);
+//        classGroupDao.insert(classGroup);
+//
+//        //创建班级老师关联记录
+//        ClassGroupTeacherMapper classGroupTeacherMapper=new ClassGroupTeacherMapper();
+//        classGroupTeacherMapper.setMusicGroupId(vipGroupApplyBaseInfoDto.getId().toString());
+//        classGroupTeacherMapper.setClassGroupId(classGroup.getId());
+//        classGroupTeacherMapper.setTeacherRole(TeachTypeEnum.BISHOP);
+//        classGroupTeacherMapper.setUserId(vipGroupApplyBaseInfoDto.getUserId());
+//        classGroupTeacherMapper.setGroupType(GroupType.VIP);
+//        classGroupTeacherMapper.setCreateTime(now);
+//        classGroupTeacherMapper.setUpdateTime(now);
+//        classGroupTeacherMapperDao.insert(classGroupTeacherMapper);
+//
+//        //创建班级与老师课酬记录
+//        ClassGroupTeacherSalary classGroupTeacherSalary=new ClassGroupTeacherSalary();
+//        classGroupTeacherSalary.setMusicGroupId(vipGroupApplyBaseInfoDto.getId().toString());
+//        classGroupTeacherSalary.setClassGroupId(classGroup.getId());
+//        classGroupTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP);
+//        classGroupTeacherSalary.setUserId(vipGroupApplyBaseInfoDto.getUserId());
+//        classGroupTeacherSalary.setSalary(vipGroupApplyBaseInfoDto.getOfflineTeacherSalary());
+//        classGroupTeacherSalary.setOnlineClassesSalary(vipGroupApplyBaseInfoDto.getOnlineTeacherSalary());
+//        classGroupTeacherSalary.setGroupType(GroupType.VIP);
+//        classGroupTeacherSalary.setCreateTime(now);
+//        classGroupTeacherSalary.setUpdateTime(now);
+//        classGroupTeacherSalaryDao.insert(classGroupTeacherSalary);
+//
+//        //课程信息调整
+//        vipGroup.getCourseSchedules().forEach(courseSchedule -> {
+//            courseSchedule.setGroupType(GroupType.VIP);
+//            courseSchedule.setMusicGroupId(vipGroupApplyBaseInfoDto.getId().toString());
+//            if(courseSchedule.getTeachMode().equals(TeachModeEnum.OFFLINE)){
+//                courseSchedule.setSchoolId(vipGroup.getVipGroupApplyBaseInfo().getTeacherSchoolId());
+//            }
+//            courseSchedule.setTeacherId(vipGroupApplyBaseInfoDto.getUserId());
+//            courseSchedule.setActualTeacherId(vipGroupApplyBaseInfoDto.getUserId());
+//            courseSchedule.setStatus(CourseStatusEnum.NOT_START);
+//            courseSchedule.setType(CourseSchedule.CourseScheduleType.VIP);
+//            courseSchedule.setClassGroupId(classGroup.getId());
+//            courseSchedule.setName(vipGroupApplyBaseInfoDto.getName());
+//            courseSchedule.setOrganId(vipGroupApplyBaseInfoDto.getOrganId());
+//        });
+//        courseScheduleService.checkNewCourseSchedules(vipGroup.getCourseSchedules(),false,false);
+//        vipGroupApplyBaseInfoDto.setCourseSchedulesJson(JSON.toJSONString(vipGroup.getCourseSchedules()));
+//        vipGroupDao.update(vipGroupApplyBaseInfoDto);
+//
+//        if(StringUtils.isNotBlank(studentIds)){
+//            List<Integer> collect = studentIdList.stream().mapToInt(Integer::parseInt).boxed().collect(Collectors.toList());
+//            classGroupService.addStudentIntoClassGroup(vipGroupApplyBaseInfoDto.getId().toString(),classGroup.getId(),collect);
+//            createVipGroupCourseScheInfo(vipGroupApplyBaseInfoDto.getId(),classGroup);
+//        }
+//
+//        Set<Integer> roleIds = new HashSet<>(1);
+//        roleIds.add(SysUserRole.SECTION_MANAGER);
+//        Map<String,Long> memo = new HashMap<>(1);
+//        memo.put("vipGroupId",vipGroupApplyBaseInfoDto.getId());
+////		SysUser sysUser = sysUserFeignService.queryUserById(vipGroup.getVipGroupApplyBaseInfo().getUserId());
+//        if(Objects.isNull(teacher)){
+//            throw new BizException("该用户不存在");
+//        }
+//        Set<Integer> userIds = musicGroupDao.queryUserIdByRoleId(roleIds,teacher.getTeacherOrganId());
+//        if(CollectionUtils.isEmpty(userIds)){
+//            throw new BizException("当前分部没有运营主管,无法创建,请联系总部工作人员!");
+//        }
+//        if(vipGroupApplyBaseInfoDto.getEducationalTeacherId() != null){
+//            userIds.add(vipGroupApplyBaseInfoDto.getEducationalTeacherId());
+//        }
+////		if (vipGroup.getVipGroupApplyBaseInfo().getUserId() != null){
+////			sysMessageService.batchSeoMessage(userIds,MessageTypeEnum.BACKSTAGE_VIP_COURSE_APPLY, JSONObject.toJSONString(memo),sysUser.getUsername(),sysUser.getUsername());
+////		}else {
+//        sysMessageService.batchSeoMessage(userIds,MessageTypeEnum.BACKSTAGE_TEACHER_APPLY_VIP, JSONObject.toJSONString(memo),teacher.getRealName());
+////		}
+//        return BaseController.succeed(vipGroupApplyBaseInfoDto.getAuditStatus().getCode());
+    }
 }

+ 87 - 101
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupActivityServiceImpl.java

@@ -1,16 +1,16 @@
 package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.ym.mec.biz.dal.dao.ActivityApplyStudentTypeDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.dao.VipGroupActivityDao;
-import com.ym.mec.biz.dal.dto.ExportVipGroupActivityDto;
-import com.ym.mec.biz.dal.dto.VipGroupActivityAddDto;
-import com.ym.mec.biz.dal.dto.VipGroupSalarySettlementDto;
+import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.entity.ActivityApplyStudentType;
 import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.entity.VipGroupActivity;
 import com.ym.mec.biz.dal.page.VipGroupActivityQueryInfo;
 import com.ym.mec.biz.event.source.EntityChangeEventSource;
-import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.biz.service.VipGroupActivityService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
@@ -26,76 +26,97 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
+import static com.ym.mec.biz.dal.enums.SalarySettlementTypeEnum.TEACHER_DEFAULT;
+
 @Service
 public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGroupActivity>  implements VipGroupActivityService {
 	
 	@Autowired
 	private VipGroupActivityDao vipGroupActivityDao;
 	@Autowired
-	private TeacherDao teacherDao;
-	@Autowired
-	private EntityChangeEventSource entityChangeEventSource;
+	private ActivityApplyStudentTypeDao activityApplyStudentTypeDao;
 	@Autowired
-	private SysConfigService sysConfigService;
+	private TeacherDao teacherDao;
 
 	@Override
 	public BaseDAO<Integer, VipGroupActivity> getDAO() {
 		return vipGroupActivityDao;
 	}
 
-	@Override
-	public void addVipGroupActivity(VipGroupActivityAddDto vipGroupActivityAddDto) {
-
-		if(Objects.isNull(vipGroupActivityAddDto.getOrganId())){
-			throw new BizException("请指定部门!");
-		}
-
-		VipGroupSalarySettlementDto vipGroupSalarySettlement = vipGroupActivityAddDto.getVipGroupSalarySettlement();
-		if(Objects.nonNull(vipGroupSalarySettlement.getOnlineSalarySettlement())){
-			switch (vipGroupSalarySettlement.getOnlineSalarySettlement().getSalarySettlementType()){
+	private void checkSettlement(VipGroupSalarySettlementTypeDto settlementTypeDto){
+		if(Objects.nonNull(settlementTypeDto) && settlementTypeDto.getSalarySettlementType() != null){
+			switch (settlementTypeDto.getSalarySettlementType()){
 				case TEACHER_DEFAULT:
 					break;
-				case RATIO_DISCOUNT:
-					if(Objects.isNull(vipGroupSalarySettlement.getOnlineSalarySettlement().getSettlementValue())){
-						throw new BizException("请指定线下课单价折算比例");
-					}
-					break;
 				case FIXED_SALARY:
-					if(Objects.isNull(vipGroupSalarySettlement.getOnlineSalarySettlement().getSettlementValue())){
-						throw new BizException("请指定线下课固定课酬");
+					if(Objects.isNull(settlementTypeDto.getSettlementValue())){
+						throw new BizException("请指定固定课酬");
 					}
 					break;
 				default:
-					throw new BizException("未指定课酬结算标准!");
+					throw new BizException("错误的课酬结算标准!");
 			}
 		}
+	}
 
-		if(Objects.nonNull(vipGroupSalarySettlement.getOfflineSalarySettlement())){
-			switch (vipGroupSalarySettlement.getOfflineSalarySettlement().getSalarySettlementType()){
-				case TEACHER_DEFAULT:
-					break;
-				case RATIO_DISCOUNT:
-					if(Objects.isNull(vipGroupSalarySettlement.getOfflineSalarySettlement().getSettlementValue())){
-						throw new BizException("请指定线线上课单价折算比例");
-					}
-					break;
-				case FIXED_SALARY:
-					if(Objects.isNull(vipGroupSalarySettlement.getOfflineSalarySettlement().getSettlementValue())){
-						throw new BizException("请指定线上课固定课酬");
-					}
-					break;
-				default:
-					throw new BizException("未指定课酬结算标准!");
-			}
+	@Override
+	public VipGroupActivityAddDto addVipGroupActivity(VipGroupActivityAddDto vipGroupActivityAddDto) {
+
+		if(Objects.isNull(vipGroupActivityAddDto.getOrganId())){
+			throw new BizException("请指定部门!");
+		}
+		VipGroupSalarySettlementDto vipGroupSalarySettlement = vipGroupActivityAddDto.getVipGroupSalarySettlement();
+		if(vipGroupSalarySettlement != null){
+			checkSettlement(vipGroupSalarySettlement.getVipOnlineSalarySettlement());
+			checkSettlement(vipGroupSalarySettlement.getVipOfflineSalarySettlement());
+			checkSettlement(vipGroupSalarySettlement.getGiveVipOnlineSalarySettlement());
+			checkSettlement(vipGroupSalarySettlement.getGiveVipOfflineSalarySettlement());
+			checkSettlement(vipGroupSalarySettlement.getPracticeSalarySettlement());
+			checkSettlement(vipGroupSalarySettlement.getGivePracticeSalarySettlement());
 		}
 
 		vipGroupActivityAddDto.setSalarySettlementJson(JSON.toJSONString(vipGroupActivityAddDto.getVipGroupSalarySettlement()));
+		ActivityApplyStudentType applyToStudentType = getApplyToStudentType(vipGroupActivityAddDto.getApplyToStudentType());
+//		vipGroupActivityAddDto.setApplyToStudentType(JSONObject.toJSONString(applyToStudentType));
 		super.insert(vipGroupActivityAddDto);
+		applyToStudentType.setActivityId(vipGroupActivityAddDto.getId());
+		activityApplyStudentTypeDao.insert(applyToStudentType);
+		return vipGroupActivityAddDto;
+	}
+
+	private ActivityApplyStudentType getApplyToStudentType(String applyToStudentType){
+		ActivityApplyStudentType activityApplyStudentType = new ActivityApplyStudentType();
+		if(StringUtils.isNotEmpty(applyToStudentType)){
+			//0:老用户;1:新用户,2会员,3非会员
+			if(applyToStudentType.contains("0") && applyToStudentType.contains("1")){
+				applyToStudentType.replace("0","");
+				applyToStudentType.replace("1","");
+			}
+			if(applyToStudentType.contains("3") && applyToStudentType.contains("2")){
+				applyToStudentType.replace("2","");
+				applyToStudentType.replace("3","");
+			}
+			if(StringUtils.isNotEmpty(applyToStudentType)){
+				if(applyToStudentType.contains("0")){
+					activityApplyStudentType.setNewStudent(0);
+				}
+				if(applyToStudentType.contains("1")){
+					activityApplyStudentType.setNewStudent(1);
+				}
+				if(applyToStudentType.contains("2")){
+					activityApplyStudentType.setMemberFlag(1);
+				}
+				if(applyToStudentType.contains("3")){
+					activityApplyStudentType.setMemberFlag(0);
+				}
+			}
+		}
+		return activityApplyStudentType;
 	}
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public void updateVipGroupActivity(VipGroupActivityAddDto vipGroupActivityAddDto, Integer operatorId) {
+	public VipGroupActivityAddDto updateVipGroupActivity(VipGroupActivityAddDto vipGroupActivityAddDto, Integer operatorId) {
 		VipGroupActivity oldVipGroupActivity = vipGroupActivityDao.get(vipGroupActivityAddDto.getId());
 		if(Objects.isNull(oldVipGroupActivity)){
 			throw new BizException("活动不存在!");
@@ -103,75 +124,40 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 		if(Objects.isNull(vipGroupActivityAddDto.getOrganId())){
 			throw new BizException("请指定部门!");
 		}
-
-		if(Objects.nonNull(vipGroupActivityAddDto.getVipGroupSalarySettlement().getOnlineSalarySettlement())){
-			switch (vipGroupActivityAddDto.getVipGroupSalarySettlement().getOnlineSalarySettlement().getSalarySettlementType()){
-				case TEACHER_DEFAULT:
-					vipGroupActivityAddDto.getVipGroupSalarySettlement().getOnlineSalarySettlement().setSettlementValue(null);
-					break;
-				case RATIO_DISCOUNT:
-					if(Objects.isNull(vipGroupActivityAddDto.getVipGroupSalarySettlement().getOnlineSalarySettlement().getSettlementValue())){
-						throw new BizException("请指定线下课单价折算比例");
-					}
-					break;
-				case FIXED_SALARY:
-					if(Objects.isNull(vipGroupActivityAddDto.getVipGroupSalarySettlement().getOnlineSalarySettlement().getSettlementValue())){
-						throw new BizException("请指定线下课固定课酬");
-					}
-					break;
-				default:
-					throw new BizException("未指定课酬结算标准!");
-			}
-		}
-
-		if(Objects.nonNull(vipGroupActivityAddDto.getVipGroupSalarySettlement().getOfflineSalarySettlement())){
-			switch (vipGroupActivityAddDto.getVipGroupSalarySettlement().getOfflineSalarySettlement().getSalarySettlementType()){
-				case TEACHER_DEFAULT:
-					vipGroupActivityAddDto.getVipGroupSalarySettlement().getOfflineSalarySettlement().setSettlementValue(null);
-					break;
-				case RATIO_DISCOUNT:
-					if(Objects.isNull(vipGroupActivityAddDto.getVipGroupSalarySettlement().getOfflineSalarySettlement().getSettlementValue())){
-						throw new BizException("请指定线线上课单价折算比例");
-					}
-					break;
-				case FIXED_SALARY:
-					if(Objects.isNull(vipGroupActivityAddDto.getVipGroupSalarySettlement().getOfflineSalarySettlement().getSettlementValue())){
-						throw new BizException("请指定线上课固定课酬");
-					}
-					break;
-				default:
-					throw new BizException("未指定课酬结算标准!");
-			}
+		VipGroupSalarySettlementDto vipGroupSalarySettlement = vipGroupActivityAddDto.getVipGroupSalarySettlement();
+		if(vipGroupSalarySettlement != null){
+			checkSettlement(vipGroupSalarySettlement.getVipOnlineSalarySettlement());
+			checkSettlement(vipGroupSalarySettlement.getVipOfflineSalarySettlement());
+			checkSettlement(vipGroupSalarySettlement.getGiveVipOnlineSalarySettlement());
+			checkSettlement(vipGroupSalarySettlement.getGiveVipOfflineSalarySettlement());
+			checkSettlement(vipGroupSalarySettlement.getPracticeSalarySettlement());
+			checkSettlement(vipGroupSalarySettlement.getGivePracticeSalarySettlement());
 		}
-
 		vipGroupActivityAddDto.setSalarySettlementJson(JSON.toJSONString(vipGroupActivityAddDto.getVipGroupSalarySettlement()));
-
+		ActivityApplyStudentType applyToStudentType = getApplyToStudentType(vipGroupActivityAddDto.getApplyToStudentType());
+//		vipGroupActivityAddDto.setApplyToStudentType(JSONObject.toJSONString(applyToStudentType));
 		super.update(vipGroupActivityAddDto);
-		entityChangeEventSource.entityChange(oldVipGroupActivity, vipGroupActivityAddDto, operatorId);
+		applyToStudentType.setActivityId(vipGroupActivityAddDto.getId());
+		activityApplyStudentTypeDao.updateByActivity(applyToStudentType);
+//		entityChangeEventSource.entityChange(oldVipGroupActivity, vipGroupActivityAddDto, operatorId);
+		return vipGroupActivityAddDto;
 	}
 
 	@Override
-	public List<VipGroupActivity> findByVipGroupCategory(Long categoryId, String organIds, Integer teacherId, Integer applyToStudentType, Boolean includeClosed) {
-		if(Objects.isNull(categoryId)){
-			throw new BizException("请选择课程形态!");
-		}
-		if(Objects.isNull(teacherId)){
-			throw new BizException("请指定教师");
-		}
-		Teacher teacher = teacherDao.get(teacherId);
+	public List<VipGroupActivity> findByVipGroupCategory(ActivityQueryDto activityQueryDto) {
+		Teacher teacher = teacherDao.get(activityQueryDto.getTeacherId());
 		if(Objects.isNull(teacher)){
 			throw new BizException("未找到指定教师");
 		}
-		if(StringUtils.isBlank(organIds)){
-			organIds = teacher.getTeacherOrganId().toString();
+		String organId = activityQueryDto.getOrganId();
+		if(StringUtils.isBlank(organId)){
+			organId = teacher.getTeacherOrganId().toString();
 			if (StringUtils.isNotEmpty(teacher.getFlowOrganRange())) {
-				organIds += "," + teacher.getFlowOrganRange();
+				organId += "," + teacher.getFlowOrganRange();
 			}
+			activityQueryDto.setOrganId(organId);
 		}
-
-		List<VipGroupActivity> vipGroupActivities = vipGroupActivityDao.findByCategory(categoryId, organIds, applyToStudentType, includeClosed);
-
-		return vipGroupActivities;
+		return vipGroupActivityDao.findByCategory(activityQueryDto);
 	}
 
 	@Override

+ 222 - 50
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -88,6 +88,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
     @Autowired
     private TeacherDefaultVipGroupSalaryDao teacherDefaultVipGroupSalaryDao;
     @Autowired
+    private TeacherDefaultPracticeGroupSalaryDao teacherDefaultPracticeGroupSalaryDao;
+    @Autowired
     private StudentPaymentOrderDao studentPaymentOrderDao;
     @Autowired
 	private StudentApplyRefundsDao studentApplyRefundsDao;
@@ -1540,48 +1542,50 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         return vipGroupDetail;
 	}
 
-	@Override
+	private BigDecimal getSalary(VipGroupSalarySettlementTypeDto salarySettlement,TeacherDefaultVipGroupSalary teacherDefaultVipGroupSalary,BigDecimal classNum){
+		if(salarySettlement != null){
+			switch (salarySettlement.getSalarySettlementType()){
+				case TEACHER_DEFAULT:
+					return teacherDefaultVipGroupSalary.getOfflineClassesSalary().multiply(classNum);
+				case FIXED_SALARY:
+					return salarySettlement.getSettlementValue().multiply(classNum);
+				default:
+					throw new BizException("未指定课酬结算标准!");
+			}
+		}
+		return BigDecimal.ZERO;
+	}
+
+	/*@Override
 	public VipGroupCostCountDto vipGroupCostCount(VipGroupCostCountParamsDto vipGroupCostCountParamsDto) {
         SysUser user = sysUserFeignService.queryUserInfo();
+        //老师默认VIP课酬
         TeacherDefaultVipGroupSalary teacherDefaultVipGroupSalary = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(user.getId(), vipGroupCostCountParamsDto.getVipGroupCategoryId());
-        VipGroupDefaultClassesUnitPrice vipGroupDefaultClassesUnitPrice = vipGroupDefaultClassesUnitPriceDao.get(vipGroupCostCountParamsDto.getVipGroupDefaultClassesUnitPriceId().intValue());
+
+        //老师默认VIP课酬
+        TeacherDefaultVipGroupSalary teacherDefaultVipGroupSalary = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(user.getId(), vipGroupCostCountParamsDto.getC());
+
+        //老师默认网管课课酬
+        TeacherDefaultVipGroupSalary teacherDefaultVipGroupSalary = teacherDefaultPracticeGroupSalaryDao.findByTeacherAndCourseMinutes(user.getId(), vipGroupCostCountParamsDto.getVipGroupCategoryId());
+
+//        VipGroupDefaultClassesUnitPrice vipGroupDefaultClassesUnitPrice = vipGroupDefaultClassesUnitPriceDao.get(vipGroupCostCountParamsDto.getVipGroupDefaultClassesUnitPriceId().intValue());
 		VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroupCostCountParamsDto.getVipGroupActivityId().intValue());
-        VipGroupSalarySettlementDto vipGroupSalarySettlementDto = JSON.parseObject(vipGroupActivity.getSalarySettlementJson(), VipGroupSalarySettlementDto.class);
-        BigDecimal offlineClassNum=new BigDecimal(vipGroupCostCountParamsDto.getOfflineClassesNum());
-        BigDecimal onlineClassNum=new BigDecimal(vipGroupCostCountParamsDto.getOnlineClassesNum());
 
+		VipGroupSalarySettlementDto vipGroupSalarySettlementDto = JSON.parseObject(vipGroupActivity.getSalarySettlementJson(), VipGroupSalarySettlementDto.class);
 
         //教师课酬
-        BigDecimal teacherOnlineSalary,teacherOfflineSalary,teacherSalary;
-        switch (vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSalarySettlementType()){
-            case TEACHER_DEFAULT:
-                teacherOnlineSalary=teacherDefaultVipGroupSalary.getOfflineClassesSalary().multiply(onlineClassNum);
-                break;
-            case RATIO_DISCOUNT:
-                teacherOnlineSalary=vipGroupDefaultClassesUnitPrice.getOnlineClassesUnitPrice().multiply(vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue()).multiply(onlineClassNum);
-                break;
-            case FIXED_SALARY:
-                teacherOnlineSalary=vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue().multiply(onlineClassNum);
-                break;
-             default:
-                 throw new BizException("未指定课酬结算标准!");
-        }
-        switch (vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSalarySettlementType()){
-            case TEACHER_DEFAULT:
-                teacherOfflineSalary=teacherDefaultVipGroupSalary.getOfflineClassesSalary().multiply(offlineClassNum);
-                break;
-            case RATIO_DISCOUNT:
-                teacherOfflineSalary=vipGroupDefaultClassesUnitPrice.getOfflineClassesUnitPrice().multiply(vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue()).multiply(offlineClassNum);
-                break;
-            case FIXED_SALARY:
-                teacherOfflineSalary=vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue().multiply(offlineClassNum);
-                break;
-            default:
-                throw new BizException("未指定课酬结算标准!");
-        }
-        teacherSalary=teacherOnlineSalary.add(teacherOfflineSalary);
+        BigDecimal teacherSalary;
+		BigDecimal vipOnlineSalary = getSalary(vipGroupSalarySettlementDto.getVipOnlineSalarySettlement(),teacherDefaultVipGroupSalary,vipGroupCostCountParamsDto.getVipOnlineClassesNum());
+
+		BigDecimal vipOfflineSalary = getSalary(vipGroupSalarySettlementDto.getVipOfflineSalarySettlement(),teacherDefaultVipGroupSalary,vipGroupCostCountParamsDto.getVipOfflineClassesNum());
+
+		BigDecimal giveVipOnlineSalary = getSalary(vipGroupSalarySettlementDto.getGiveVipOnlineSalarySettlement(),teacherDefaultVipGroupSalary,vipGroupCostCountParamsDto.getGiveVipOnlineClassesNum());
+
+		BigDecimal giveVipOfflineSalary = getSalary(vipGroupSalarySettlementDto.getGiveVipOfflineSalarySettlement(),teacherDefaultVipGroupSalary,vipGroupCostCountParamsDto.getGiveVipOfflineClassesNum());
+
+        teacherSalary=vipOnlineSalary.add(vipOfflineSalary).add(giveVipOnlineSalary).add(giveVipOfflineSalary);
         return new VipGroupCostCountDto(null,teacherSalary);
-    }
+    }*/
 
     @Override
     public <K extends VipGroup> Map<String,BigDecimal> countVipGroupPredictFee(K vipGroup,
@@ -1688,9 +1692,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			vipGroup.setTotalPrice(totalPrice.setScale(0,BigDecimal.ROUND_CEILING));
 
 			//教师课酬线上单课酬计算
-			if(Objects.nonNull(vipGroupSalarySettlementDto.getOnlineSalarySettlement())){
+			if(Objects.nonNull(vipGroupSalarySettlementDto.getVipOnlineSalarySettlement())){
 				if(Objects.isNull(teacherOnlineSalary)){
-					switch (vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSalarySettlementType()){
+					switch (vipGroupSalarySettlementDto.getVipOnlineSalarySettlement().getSalarySettlementType()){
 						case TEACHER_DEFAULT:
 							teacherOnlineSalary=teacherDefaultVipGroupSalary.getOfflineClassesSalary();
 							results.put("onlineTeacherSalary",teacherOnlineSalary.setScale(0, BigDecimal.ROUND_HALF_UP));
@@ -1698,13 +1702,13 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 						case RATIO_DISCOUNT:
 							results.put("onlineTeacherSalary",totalPrice.multiply(new BigDecimal(vipGroupCategory.getStudentNum()))
 									.divide(totalClassNum, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN)
-									.multiply(vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue())
+									.multiply(vipGroupSalarySettlementDto.getVipOnlineSalarySettlement().getSettlementValue())
 									.divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN)
 									.setScale(0,BigDecimal.ROUND_HALF_UP));
 
 							break;
 						case FIXED_SALARY:
-							results.put("onlineTeacherSalary",vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue().setScale(0, BigDecimal.ROUND_HALF_UP));
+							results.put("onlineTeacherSalary",vipGroupSalarySettlementDto.getVipOnlineSalarySettlement().getSettlementValue().setScale(0, BigDecimal.ROUND_HALF_UP));
 							break;
 						default:
 							throw new BizException("未指定课酬结算标准!");
@@ -1714,19 +1718,19 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			}
 
 			//教师线下单课酬计算
-			if(Objects.nonNull(vipGroupSalarySettlementDto.getOfflineSalarySettlement())){
+			if(Objects.nonNull(vipGroupSalarySettlementDto.getVipOfflineSalarySettlement())){
 				if(Objects.isNull(teacherOfflineSalary)){
-					switch (vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSalarySettlementType()){
+					switch (vipGroupSalarySettlementDto.getVipOfflineSalarySettlement().getSalarySettlementType()){
 						case TEACHER_DEFAULT:
 							teacherOfflineSalary=teacherDefaultVipGroupSalary.getOfflineClassesSalary();
 							results.put("offlineTeacherSalary",teacherOfflineSalary.setScale(0, BigDecimal.ROUND_HALF_UP));
 							break;
 						case RATIO_DISCOUNT:
-							results.put("offlineTeacherSalary",totalPrice.multiply(new BigDecimal(vipGroupCategory.getStudentNum())).divide(totalClassNum, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue()).divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).setScale(0,BigDecimal.ROUND_HALF_UP));
+							results.put("offlineTeacherSalary",totalPrice.multiply(new BigDecimal(vipGroupCategory.getStudentNum())).divide(totalClassNum, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(vipGroupSalarySettlementDto.getVipOfflineSalarySettlement().getSettlementValue()).divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).setScale(0,BigDecimal.ROUND_HALF_UP));
 
 							break;
 						case FIXED_SALARY:
-							results.put("offlineTeacherSalary",vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue().setScale(0, BigDecimal.ROUND_HALF_UP));
+							results.put("offlineTeacherSalary",vipGroupSalarySettlementDto.getVipOfflineSalarySettlement().getSettlementValue().setScale(0, BigDecimal.ROUND_HALF_UP));
 							break;
 						default:
 							throw new BizException("未指定课酬结算标准!");
@@ -1790,6 +1794,174 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         return results;
     }
 
+    @Override
+    public <K extends VipGroup> Map<String,BigDecimal> countVipGroupPredictFee1(K vipGroup,
+																			   Integer teacherId,
+																			   Long courseId){
+
+		if(Objects.isNull(teacherId)){
+			throw new BizException("请指定教师");
+		}
+
+		if(Objects.isNull(vipGroup.getVipGroupCategoryId())){
+			throw new BizException("请指定课程形式");
+		}
+
+		VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupCategoryId().intValue());
+		if(Objects.isNull(vipGroupCategory)){
+			throw new BizException("课程形式不存在");
+		}
+
+		TeacherDefaultVipGroupSalary teacherDefaultVipGroupSalary = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(teacherId,
+				vipGroup.getVipGroupCategoryId());
+
+		if(Objects.isNull(teacherDefaultVipGroupSalary)){
+			throw new BizException("请设置教师课酬");
+		}
+
+		if(Objects.isNull(teacherDefaultVipGroupSalary)||Objects.isNull(teacherDefaultVipGroupSalary.getOfflineClassesSalary())){
+			throw new BizException("请设置教师VIP课课酬");
+		}
+
+		VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId());
+
+		Map<String,BigDecimal> results=new HashMap<>(1);
+
+		int normalStudentNum = 0;
+		if(Objects.nonNull(courseId)){
+			normalStudentNum = courseScheduleStudentPaymentDao.countStudentNum(courseId.intValue());
+		}
+		if(normalStudentNum<=0&&Objects.nonNull(vipGroup.getId())){
+			normalStudentNum = classGroupStudentMapperDao.countGroupNormalStudentNum(GroupType.VIP, vipGroup.getId().toString());
+		}
+
+		if(!vipGroupCategory.getMusicTheory()&&Objects.isNull(vipGroupActivity)){
+			throw new BizException("活动设置错误");
+		}
+
+		if(!vipGroupCategory.getMusicTheory()){
+			VipGroupSalarySettlementDto vipGroupSalarySettlementDto = JSON.parseObject(vipGroupActivity.getSalarySettlementJson(), VipGroupSalarySettlementDto.class);
+
+			if(Objects.isNull(vipGroupSalarySettlementDto)){
+				throw new BizException("课酬结算方案错误");
+			}
+
+			BigDecimal offlineClassNum=new BigDecimal(vipGroup.getOfflineClassesNum());
+			BigDecimal onlineClassNum=new BigDecimal(vipGroup.getOnlineClassesNum());
+			BigDecimal onlineClassesUnitPrice=vipGroup.getOnlineClassesUnitPrice();
+			if(Objects.isNull(onlineClassesUnitPrice)){
+				throw new BizException("课程单价异常");
+			}
+			BigDecimal onlineVipGroupCharge = onlineClassesUnitPrice.multiply(onlineClassNum);
+
+			BigDecimal offlineClassesUnitPrice=vipGroup.getOfflineClassesUnitPrice();
+			if(Objects.isNull(offlineClassesUnitPrice)){
+				throw new BizException("课程单价异常");
+			}
+			BigDecimal offlineVipGroupCharge = offlineClassesUnitPrice.multiply(offlineClassNum);
+			BigDecimal totalClassNum=offlineClassNum.add(onlineClassNum);
+			BigDecimal teacherOnlineSalary=null,teacherOfflineSalary=null;
+
+			//课程购买费用计算
+			BigDecimal totalPrice = onlineVipGroupCharge.add(offlineVipGroupCharge);
+			totalPrice = totalPrice.multiply(vipGroupActivity.getDiscount()).divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+
+			results.put("totalPrice",totalPrice.setScale(0,BigDecimal.ROUND_CEILING));
+			vipGroup.setTotalPrice(totalPrice.setScale(0,BigDecimal.ROUND_CEILING));
+
+			VipGroupSalarySettlementTypeDto vipOnlineSalarySettlement = vipGroupSalarySettlementDto.getVipOnlineSalarySettlement();
+			//教师课酬线上单课酬计算
+			if(Objects.nonNull(vipOnlineSalarySettlement)){
+				if(Objects.isNull(teacherOnlineSalary)){
+					switch (vipOnlineSalarySettlement.getSalarySettlementType()){
+						case TEACHER_DEFAULT:
+							teacherOnlineSalary=teacherDefaultVipGroupSalary.getOfflineClassesSalary();
+							results.put("onlineTeacherSalary",teacherOnlineSalary.setScale(0, BigDecimal.ROUND_HALF_UP));
+							break;
+						case FIXED_SALARY:
+							results.put("onlineTeacherSalary",vipOnlineSalarySettlement.getSettlementValue().setScale(0, BigDecimal.ROUND_HALF_UP));
+							break;
+						default:
+							throw new BizException("错误的课酬结算标准!");
+					}
+
+				}
+			}
+
+			//教师线下单课酬计算
+			VipGroupSalarySettlementTypeDto vipOfflineSalarySettlement = vipGroupSalarySettlementDto.getVipOfflineSalarySettlement();
+			if(Objects.nonNull(vipOfflineSalarySettlement)){
+				if(Objects.isNull(teacherOfflineSalary)){
+					switch (vipOfflineSalarySettlement.getSalarySettlementType()){
+						case TEACHER_DEFAULT:
+							teacherOfflineSalary=teacherDefaultVipGroupSalary.getOfflineClassesSalary();
+							results.put("offlineTeacherSalary",teacherOfflineSalary.setScale(0, BigDecimal.ROUND_HALF_UP));
+							break;
+						case FIXED_SALARY:
+							results.put("offlineTeacherSalary",vipOfflineSalarySettlement.getSettlementValue().setScale(0, BigDecimal.ROUND_HALF_UP));
+							break;
+						default:
+							throw new BizException("错误的课酬结算标准!");
+					}
+				}
+			}
+
+			BigDecimal ots = results.get("onlineTeacherSalary");
+			if(Objects.isNull(ots)){
+				ots = teacherDefaultVipGroupSalary.getOfflineClassesSalary();
+			}
+			if(Objects.isNull(ots)){
+				ots = BigDecimal.ZERO;
+			}
+			BigDecimal ofts = results.get("offlineTeacherSalary");
+			if(Objects.isNull(ofts)){
+				ofts = teacherDefaultVipGroupSalary.getOfflineClassesSalary();
+			}
+			if(Objects.isNull(ofts)){
+				ofts = BigDecimal.ZERO;
+			}
+			if(Objects.nonNull(vipGroup.getStatus())&&normalStudentNum!=vipGroupCategory.getStudentNum()){
+				ots = ots.divide(new BigDecimal(vipGroupCategory.getStudentNum()),CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(normalStudentNum)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
+				ofts = ofts.divide(new BigDecimal(vipGroupCategory.getStudentNum()),CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(normalStudentNum)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
+			}
+
+			results.put("onlineTeacherSalary", ots);
+			results.put("offlineTeacherSalary", ofts);
+		}
+
+		if(vipGroupCategory.getMusicTheory()){
+			BigDecimal ots = teacherDefaultVipGroupSalary.getOfflineClassesSalary();
+			BigDecimal ofts = teacherDefaultVipGroupSalary.getOfflineClassesSalary();
+			if(Objects.nonNull(vipGroup.getStatus())&&vipGroupCategory.getMusicTheory()){
+				ots = ots.multiply(new BigDecimal(normalStudentNum>5?5:normalStudentNum)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
+				ofts = ofts.multiply(new BigDecimal(normalStudentNum)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
+			}
+			results.put("totalPrice",vipGroup.getTotalPrice());
+			results.put("onlineTeacherSalary",ots);
+			results.put("offlineTeacherSalary",ofts);
+		}
+
+		if(vipGroup instanceof VipGroupApplyBaseInfoDto&&!CollectionUtils.isEmpty(((VipGroupApplyBaseInfoDto)vipGroup).getVipGroupStudentCoursePrices())){
+			if(vipGroupCategory.getMusicTheory()){
+				vipGroup.setTotalPrice(new BigDecimal(0));
+			}
+			for (VipGroupStudentCoursePrice vscp : ((VipGroupApplyBaseInfoDto)vipGroup).getVipGroupStudentCoursePrices()) {
+				if(!vipGroupCategory.getMusicTheory()){
+					results.put(vscp.getStudentId().toString(), vipGroup.getTotalPrice());
+					continue;
+				}
+				if(Objects.isNull(vscp.getOnlineClassesUnitPrice())||Objects.isNull(vscp.getOfflineClassesUnitPrice())){
+					throw new BizException("请设置课程单价");
+				}
+				vscp.setPaymentPrice(vscp.getOfflineClassesUnitPrice().multiply(new BigDecimal(vipGroup.getOfflineClassesNum())).add(vscp.getOnlineClassesUnitPrice().multiply(new BigDecimal(vipGroup.getOnlineClassesNum()))));
+				vipGroup.setTotalPrice(vipGroup.getTotalPrice().add(vscp.getPaymentPrice()));
+				results.put(vscp.getStudentId().toString(), vscp.getPaymentPrice());
+			}
+		}
+
+        return results;
+    }
+
 	@Override
 	public <K extends VipGroup> Map<String,BigDecimal> countVipGroupCoursePredictFee(K vipGroup,
 																			   Integer teacherId,
@@ -1893,9 +2065,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		}
 
 		//教师课酬线上单课酬计算
-		if(Objects.nonNull(vipGroupSalarySettlementDto.getOnlineSalarySettlement())){
+		if(Objects.nonNull(vipGroupSalarySettlementDto.getVipOnlineSalarySettlement())){
 			if(Objects.isNull(teacherOnlineSalary)){
-				switch (vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSalarySettlementType()){
+				switch (vipGroupSalarySettlementDto.getVipOnlineSalarySettlement().getSalarySettlementType()){
 					case TEACHER_DEFAULT:
 						if(Objects.isNull(teacherDefaultVipGroupSalary)||Objects.isNull(teacherDefaultVipGroupSalary.getOfflineClassesSalary())){
 							teacherOnlineSalary=new BigDecimal(0);
@@ -1907,13 +2079,13 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 					case RATIO_DISCOUNT:
 						results.put("onlineTeacherSalary",totalPrice.multiply(new BigDecimal(vipGroupCategory.getStudentNum()))
 								.divide(totalClassNum, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN)
-								.multiply(vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue())
+								.multiply(vipGroupSalarySettlementDto.getVipOnlineSalarySettlement().getSettlementValue())
 								.divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN)
 								.setScale(0,BigDecimal.ROUND_HALF_UP));
 
 						break;
 					case FIXED_SALARY:
-						results.put("onlineTeacherSalary",vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue().setScale(0, BigDecimal.ROUND_HALF_UP));
+						results.put("onlineTeacherSalary",vipGroupSalarySettlementDto.getVipOnlineSalarySettlement().getSettlementValue().setScale(0, BigDecimal.ROUND_HALF_UP));
 						break;
 					default:
 						throw new BizException("未指定课酬结算标准!");
@@ -1923,9 +2095,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		}
 
 		//教师线下单课酬计算
-		if(Objects.nonNull(vipGroupSalarySettlementDto.getOfflineSalarySettlement())){
+		if(Objects.nonNull(vipGroupSalarySettlementDto.getVipOfflineSalarySettlement())){
 			if(Objects.isNull(teacherOfflineSalary)){
-				switch (vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSalarySettlementType()){
+				switch (vipGroupSalarySettlementDto.getVipOfflineSalarySettlement().getSalarySettlementType()){
 					case TEACHER_DEFAULT:
 						if(Objects.isNull(teacherDefaultVipGroupSalary)||Objects.isNull(teacherDefaultVipGroupSalary.getOfflineClassesSalary())){
 							teacherOfflineSalary=new BigDecimal(0);
@@ -1935,11 +2107,11 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 						results.put("offlineTeacherSalary",teacherOfflineSalary.setScale(0, BigDecimal.ROUND_HALF_UP));
 						break;
 					case RATIO_DISCOUNT:
-						results.put("offlineTeacherSalary",totalPrice.multiply(new BigDecimal(vipGroupCategory.getStudentNum())).divide(totalClassNum, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue()).divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).setScale(0,BigDecimal.ROUND_HALF_UP));
+						results.put("offlineTeacherSalary",totalPrice.multiply(new BigDecimal(vipGroupCategory.getStudentNum())).divide(totalClassNum, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(vipGroupSalarySettlementDto.getVipOfflineSalarySettlement().getSettlementValue()).divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).setScale(0,BigDecimal.ROUND_HALF_UP));
 
 						break;
 					case FIXED_SALARY:
-						results.put("offlineTeacherSalary",vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue().setScale(0, BigDecimal.ROUND_HALF_UP));
+						results.put("offlineTeacherSalary",vipGroupSalarySettlementDto.getVipOfflineSalarySettlement().getSettlementValue().setScale(0, BigDecimal.ROUND_HALF_UP));
 						break;
 					default:
 						throw new BizException("未指定课酬结算标准!");

+ 57 - 0
mec-biz/src/main/resources/config/mybatis/ActivityApplyStudentTypeMapper.xml

@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!--
+这个文件是自动生成的。
+不要修改此文件。所有改动将在下次重新自动生成时丢失。
+-->
+<mapper namespace="com.ym.mec.biz.dal.dao.ActivityApplyStudentTypeDao">
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.ActivityApplyStudentType" id="ActivityApplyStudentType">
+		<result column="id_" property="id" />
+		<result column="new_student_" property="newStudent" />
+		<result column="member_flag_" property="memberFlag" />
+		<result column="activity_id_" property="activityId" />
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="ActivityApplyStudentType" >
+		SELECT * FROM activity_apply_student_type WHERE id_ = #{id} 
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="ActivityApplyStudentType">
+		SELECT * FROM activity_apply_student_type ORDER BY id_
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.ActivityApplyStudentType" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		INSERT INTO activity_apply_student_type (new_student_,member_flag_,activity_id_)
+		VALUES(#{newStudent},#{memberFlag},#{activityId})
+	</insert>
+	
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.ActivityApplyStudentType">
+		UPDATE activity_apply_student_type SET member_flag_ = #{memberFlag},new_student_ = #{newStudent} WHERE id_ = #{id}
+	</update>
+	<update id="updateByActivity" parameterType="com.ym.mec.biz.dal.entity.ActivityApplyStudentType">
+		UPDATE activity_apply_student_type SET member_flag_ = #{memberFlag},new_student_ = #{newStudent} WHERE activity_id_ = #{activityId}
+	</update>
+
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM activity_apply_student_type WHERE id_ = #{id} 
+	</delete>
+	<delete id="deleteByActivity">
+		DELETE FROM activity_apply_student_type WHERE activity_id_ = #{activityId}
+	</delete>
+
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="ActivityApplyStudentType" parameterType="map">
+		SELECT * FROM activity_apply_student_type ORDER BY id_ <include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM activity_apply_student_type
+	</select>
+</mapper>

+ 172 - 0
mec-biz/src/main/resources/config/mybatis/ActivityPlanMapper.xml

@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!--
+这个文件是自动生成的。
+不要修改此文件。所有改动将在下次重新自动生成时丢失。
+-->
+<mapper namespace="com.ym.mec.biz.dal.dao.ActivityPlanDao">
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.ActivityPlan" id="ActivityPlan">
+		<result column="id_" property="id" />
+		<result column="organ_id_" property="organId" />
+		<result column="name_" property="name" />
+		<result column="description_" property="description" />
+		<result column="type_" property="type" />
+		<result column="start_time_" property="startTime" />
+		<result column="end_time_" property="endTime" />
+		<result column="courses_start_time_" property="coursesStartTime" />
+		<result column="courses_end_time_" property="coursesEndTime" />
+		<result column="apply_to_student_type_" property="applyToStudentType" />
+		<result column="max_buy_num_" property="maxBuyNum" />
+		<result column="course_arranging_type_" property="courseArrangingType" />
+		<result column="course_type_" property="courseType" />
+		<result column="category_id_" property="categoryId" />
+		<result column="single_course_time_" property="singleCourseTime" />
+		<result column="min_course_num_" property="minCourseNum" />
+		<result column="max_course_num_" property="maxCourseNum" />
+		<result column="discount_" property="discount" />
+		<result column="full_minus_course_times_" property="fullMinusCourseTimes" />
+		<result column="give_course_type_" property="giveCourseType" />
+		<result column="give_category_id_" property="giveCategoryId" />
+		<result column="give_course_num_" property="giveCourseNum" />
+		<result column="member_rank_id_" property="memberRankId" />
+		<result column="member_time_" property="memberTime" />
+		<result column="salary_settlement_json_" property="salarySettlementJson" />
+		<result column="del_flag_" property="delFlag" />
+		<result column="enable_" property="enable" />
+		<result column="create_time_" property="createTime" />
+		<result column="update_time_" property="updateTime" />
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="ActivityPlan" >
+		SELECT * FROM activity_plan WHERE id_ = #{id} 
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="ActivityPlan">
+		SELECT * FROM activity_plan ORDER BY id_
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.ActivityPlan" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		INSERT INTO activity_plan (organ_id_,name_,description_,type_,start_time_,end_time_,courses_start_time_,
+					   courses_end_time_,apply_to_student_type_,max_buy_num_,course_arranging_type_,
+					   course_type_,category_id_,single_course_time_,min_course_num_,max_course_num_,
+					   discount_,full_minus_course_times_,give_course_type_,give_category_id_,give_course_num_,
+					   member_rank_id_,member_time_,salary_settlement_json_,del_flag_,enable_,create_time_,update_time_)
+					   VALUES(#{organId},#{name},#{description},#{type},#{startTime},#{endTime},#{coursesStartTime},
+							  #{coursesEndTime},#{applyToStudentType},#{maxBuyNum},#{courseArrangingType},#{courseType},
+							  #{categoryId},#{singleCourseTime},#{minCourseNum},#{maxCourseNum},#{discount},
+							  #{fullMinusCourseTimes},#{giveCourseType},#{giveCategoryId},#{giveCourseNum},
+							  #{memberRankId},#{memberTime},#{salarySettlementJson},#{delFlag},#{enable},#{createTime},#{updateTime})
+	</insert>
+	
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.ActivityPlan">
+		UPDATE activity_plan <set>
+		<if test="memberRankId != null">
+		member_rank_id_ = #{memberRankId},
+		</if>
+		<if test="coursesEndTime != null">
+		courses_end_time_ = #{coursesEndTime},
+		</if>
+		<if test="giveCategoryId != null">
+		give_category_id_ = #{giveCategoryId},
+		</if>
+		<if test="name != null">
+		name_ = #{name},
+		</if>
+		<if test="categoryId != null">
+		category_id_ = #{categoryId},
+		</if>
+		<if test="updateTime != null">
+		update_time_ = #{updateTime},
+		</if>
+		<if test="description != null">
+		description_ = #{description},
+		</if>
+		<if test="courseType != null">
+		course_type_ = #{courseType},
+		</if>
+		<if test="giveCourseNum != null">
+		give_course_num_ = #{giveCourseNum},
+		</if>
+		<if test="coursesStartTime != null">
+		courses_start_time_ = #{coursesStartTime},
+		</if>
+		<if test="maxBuyNum != null">
+		max_buy_num_ = #{maxBuyNum},
+		</if>
+		<if test="delFlag != null">
+		del_flag_ = #{delFlag},
+		</if>
+		<if test="organId != null">
+		organ_id_ = #{organId},
+		</if>
+		<if test="id != null">
+		id_ = #{id},
+		</if>
+		<if test="giveCourseType != null">
+		give_course_type_ = #{giveCourseType},
+		</if>
+		<if test="applyToStudentType != null">
+		apply_to_student_type_ = #{applyToStudentType},
+		</if>
+		<if test="endTime != null">
+		end_time_ = #{endTime},
+		</if>
+		<if test="fullMinusCourseTimes != null">
+		full_minus_course_times_ = #{fullMinusCourseTimes},
+		</if>
+		<if test="memberTime != null">
+		member_time_ = #{memberTime},
+		</if>
+		<if test="startTime != null">
+		start_time_ = #{startTime},
+		</if>
+		<if test="createTime != null">
+		create_time_ = #{createTime},
+		</if>
+		<if test="courseArrangingType != null">
+		course_arranging_type_ = #{courseArrangingType},
+		</if>
+		<if test="enable != null">
+		enable_ = #{enable},
+		</if>
+		<if test="singleCourseTime != null">
+		single_course_time_ = #{singleCourseTime},
+		</if>
+		<if test="maxCourseNum != null">
+		max_course_num_ = #{maxCourseNum},
+		</if>
+		<if test="minCourseNum != null">
+		min_course_num_ = #{minCourseNum},
+		</if>
+		<if test="discount != null">
+		discount_ = #{discount},
+		</if>
+		<if test="salarySettlementJson != null">
+		salary_settlement_json_ = #{salarySettlementJson},
+		</if>
+		<if test="type != null">
+		type_ = #{type},
+		</if>
+		</set> WHERE id_ = #{id}
+	</update>
+	
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM activity_plan WHERE id_ = #{id} 
+	</delete>
+	
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="ActivityPlan" parameterType="map">
+		SELECT * FROM activity_plan ORDER BY id_ <include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM activity_plan
+	</select>
+</mapper>

+ 71 - 0
mec-biz/src/main/resources/config/mybatis/MarketActivityMapper.xml

@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!--
+这个文件是自动生成的。
+不要修改此文件。所有改动将在下次重新自动生成时丢失。
+-->
+<mapper namespace="com.ym.mec.biz.dal.dao.MarketActivityDao">
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.MarketActivity" id="MarketActivity">
+		<result column="id_" property="id" />
+		<result column="name_" property="name" />
+		<result column="activity_ids_" property="activityIds" />
+		<result column="create_time_" property="createTime" />
+		<result column="update_time_" property="updateTime" />
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="MarketActivity" >
+		SELECT * FROM market_activity WHERE id_ = #{id} 
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="MarketActivity">
+		SELECT * FROM market_activity ORDER BY id_
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.MarketActivity" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		INSERT INTO market_activity (name_,activity_ids_,create_time_,update_time_)
+		VALUES(#{name},#{activityIds},#{createTime},#{updateTime})
+	</insert>
+	
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.MarketActivity">
+		UPDATE market_activity <set>
+		<if test="name != null">
+		name_ = #{name},
+		</if>
+		<if test="activityIds != null">
+		activity_ids_ = #{activityIds},
+		</if>
+		update_time_ = NOW()
+	</set> WHERE id_ = #{id}
+	</update>
+	
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM market_activity WHERE id_ = #{id} 
+	</delete>
+	<sql id="queryPageSql">
+		<where>
+			1=1
+			<if test="search != null and search != ''">
+				AND (name_ LIKE CONCAT('%',#{search},'%') OR id_ = #{search})
+			</if>
+		</where>
+	</sql>
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="MarketActivity" parameterType="map">
+		SELECT * FROM market_activity
+		<include refid="queryPageSql"/>
+		ORDER BY id_
+		<include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM market_activity
+		<include refid="queryPageSql"/>
+	</select>
+</mapper>

+ 12 - 0
mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml

@@ -759,4 +759,16 @@
             AND pg.group_status_ IN ('NORMAL','FINISH')
         ORDER BY pg.courses_start_date_ DESC LIMIT 1
     </select>
+    <select id="countStudentUserActivityNum" resultType="java.lang.Integer">
+        SELECT COUNT(DISTINCT pg.id_)
+        FROM practice_group pg
+        LEFT JOIN class_group_student_mapper cgsm ON pg.id_ = cgsm.music_group_id_ AND cgsm.group_type_='PRACTICE'
+        WHERE pg.vip_group_activity_id_ = #{vipGroupActivityId}
+        AND ((pg.group_status_ NOT IN ('CANCEL') AND #{studentId} = pg.student_id_) OR cgsm.user_id_=#{studentId})
+    </select>
+    <select id="countUserRepeatPracticeGroupInCourseStartEndTime" resultType="java.lang.Integer">
+        SELECT COUNT(id_)
+        FROM practice_group
+        WHERE student_id_ = #{userId} AND courses_start_date = #{courseStartDate} AND courses_expire_date_ = #{courseEndDate}
+    </select>
 </mapper>

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

@@ -76,7 +76,8 @@
           #{studentAttendance.userId},#{studentAttendance.teacherId},
           #{studentAttendance.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},now(),#{studentAttendance.updateTime},
           #{studentAttendance.remark},#{studentAttendance.currentClassTimes},
-          #{studentAttendance.signInTime},#{studentAttendance.signOutTime},#{studentAttendance.currentScheduleId},#{studentAttendance.visitFlag,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+          #{studentAttendance.signInTime},#{studentAttendance.signOutTime},#{studentAttendance.currentScheduleId},
+           #{studentAttendance.visitFlag,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
           #{studentAttendance.normalRemind})
       </foreach>
     </insert>

+ 110 - 35
mec-biz/src/main/resources/config/mybatis/VipGroupActivityMapper.xml

@@ -36,6 +36,25 @@
 		<result property="studentMaxUsedTimes" column="student_max_used_times_"/>
 		<result property="applyToStudentType" column="apply_to_student_type_"/>
 		<result property="allowOnlineToOffline" column="allow_online_to_offline_"/>
+		<result property="giveCategoryId" column="give_category_id_"/>
+		<result property="singleCourseTime" column="single_course_time_"/>
+		<result property="discount" column="discount_"/>
+		<result property="fullMinusCourseTimes" column="full_minus_course_times_"/>
+		<result property="giveCourseType" column="give_course_type_"/>
+		<result property="giveCourseNum" column="give_course_num_"/>
+		<result property="giveMemberRankId" column="give_member_rank_id_"/>
+		<result property="giveMemberTime" column="give_member_time_"/>
+		<result property="memberRankId" column="member_rank_id_"/>
+		<result property="memberTime" column="member_time_"/>
+		<result property="courseType" column="course_type_"/>
+		<result property="activityType" column="activity_type_"/>
+		<result property="giveSingleCourseTime" column="give_sign_course_time_"/>
+		<result property="payToBalance" column="is_pay_to_balance_"/>
+		<result property="teachMode" column="teach_mode_"/>
+		<result property="giveTeachMode" column="give_teach_mode_"/>
+		<result property="periodEnum" column="period_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+		<result property="givePeriodEnum" column="give_period_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+		<result property="status" column="status_"/>
 	</resultMap>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -50,33 +69,88 @@
 	
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.VipGroupActivity" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		<!--
-		<selectKey resultClass="int" keyProperty="id" > 
-		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
-		</selectKey>
-		-->
-		INSERT INTO vip_group_activity (id_,name_,description_,vip_group_category_id_list_,start_time_,end_time_,organ_id_,courses_start_time_,courses_end_time_,type_,
+		INSERT INTO vip_group_activity (name_,description_,vip_group_category_id_list_,start_time_,end_time_,organ_id_,courses_start_time_,courses_end_time_,type_,
 		                                attribute1_,attribute2_,attribute3_,salary_readonly_flag_,give_class_pay_salary_flag_,create_time_,update_time_,salary_settlement_json_,del_flag_,
 		                                payment_readonly_flag_,online_class_join_gradient_rewards_,offline_class_join_gradient_rewards_,min_course_num_,max_course_num_,
-										student_max_used_times_, apply_to_student_type_,allow_online_to_offline_)
-		VALUES(#{id},#{name},#{description},#{vipGroupCategoryIdList},#{startTime},#{endTime},#{organId},#{coursesStartTime},#{coursesEndTime},#{type},#{attribute1},#{attribute2},#{attribute3},
+										student_max_used_times_, apply_to_student_type_,allow_online_to_offline_,
+										single_course_time_,discount_,full_minus_course_times_,give_course_type_,give_category_id_,give_course_num_
+										,member_rank_id_,member_time_,give_member_rank_id_,give_member_time_,course_type_,
+		                                activity_type_,give_sign_course_time_,is_pay_to_balance_,teach_mode_,give_teach_mode_,period_,give_period_,status_)
+		VALUES(#{name},#{description},#{vipGroupCategoryIdList},#{startTime},#{endTime},#{organId},#{coursesStartTime},#{coursesEndTime},#{type},#{attribute1},#{attribute2},#{attribute3},
 		       #{salaryReadonlyFlag},#{giveClassPaySalaryFlag},now(),now(),#{salarySettlementJson},#{delFlag},#{paymentReadonlyFlag},#{onlineClassJoinGradientRewards},
-		       #{offlineClassJoinGradientRewards},#{minCourseNum},#{maxCourseNum},#{studentMaxUsedTimes},#{applyToStudentType},#{allowOnlineToOffline})
+		       #{offlineClassJoinGradientRewards},#{minCourseNum},#{maxCourseNum},#{studentMaxUsedTimes},#{applyToStudentType},#{allowOnlineToOffline},
+			   #{singleCourseTime},#{discount},#{fullMinusCourseTimes},#{giveCourseType},#{giveCategoryId},#{giveCourseNum}
+				  ,#{memberRankId},#{memberTime},#{giveMemberRankId},#{giveMemberTime},#{courseType},#{activityType},#{giveSingleCourseTime},
+		       #{isPayToBalance},#{teachMode},#{giveTeachMode},#{periodEnum},#{givePeriodEnum},#{status})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.VipGroupActivity">
 		UPDATE vip_group_activity
 		<set>
+			<if test="status != null">
+				status_ = #{status},
+			</if>
+			<if test="givePeriodEnum != null">
+				give_period_ = #{givePeriodEnum,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+			</if>
+			<if test="periodEnum != null">
+				period_ = #{periodEnum,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+			</if>
+			<if test="giveTeachMode != null">
+				give_teach_mode_ = #{giveTeachMode},
+			</if>
+			<if test="teachMode != null">
+				teach_mode_ = #{teachMode},
+			</if>
+			<if test="isPayToBalance != null">
+				is_pay_to_balance_ = #{isPayToBalance},
+			</if>
+			<if test="giveSingleCourseTime != null">
+				give_sign_course_time_ = #{giveSingleCourseTime},
+			</if>
+			<if test="singleCourseTime != null">
+				single_course_time_ = #{singleCourseTime},
+			</if>
+			<if test="discount != null">
+				discount_ = #{discount},
+			</if>
+			<if test="fullMinusCourseTimes != null">
+				full_minus_course_times_ = #{fullMinusCourseTimes},
+			</if>
+			<if test="giveCourseType != null">
+				give_course_type_ = #{giveCourseType},
+			</if>
+			<if test="giveCategoryId != null">
+				give_category_id_ = #{giveCategoryId},
+			</if>
+			<if test="giveCourseNum != null">
+				give_course_num_ = #{giveCourseNum},
+			</if>
+			<if test="activityType != null">
+				activity_type_ = #{activityType},
+			</if>
+			<if test="courseType != null">
+				course_type_ = #{courseType},
+			</if>
+			<if test="memberTime != null">
+				member_time_ = #{memberTime},
+			</if>
+			<if test="memberRankId != null">
+				member_rank_id_ = #{memberRankId},
+			</if>
+			<if test="giveMemberTime != null">
+				give_member_time_ = #{giveMemberTime},
+			</if>
+			<if test="giveMemberRankId != null">
+				give_member_rank_id_ = #{giveMemberRankId},
+			</if>
 			<if test="salaryReadonlyFlag != null">
 				salary_readonly_flag_ = #{salaryReadonlyFlag},
 			</if>
 			<if test="organId != null">
 				organ_id_ = #{organId},
 			</if>
-			<if test="id != null">
-				id_ = #{id},
-			</if>
 			<if test="giveClassPaySalaryFlag != null">
 				give_class_pay_salary_flag_ = #{giveClassPaySalaryFlag},
 			</if>
@@ -146,7 +220,7 @@
 			<if test="allowOnlineToOffline!=null">
 				allow_online_to_offline_=#{allowOnlineToOffline},
 			</if>
-			update_time_ = NOW(),
+			update_time_ = NOW()
 		</set>WHERE id_ = #{id}
 	</update>
 
@@ -157,15 +231,18 @@
 
 	<sql id="queryCondition">
 		<where>
-			vga.del_flag_=0
+			vga.del_flag_ = 0
+			<if test="courseType != null and courseType != ''">
+				AND course_type_ = #{courseType}
+			</if>
+			<if test="giveCourseType != null and giveCourseType != ''">
+				AND give_course_type_ = #{giveCourseType}
+			</if>
 			<if test="organId != null">
 				AND INTE_ARRAY(organ_id_,#{organId})
 			</if>
-			<if test="enable != null and enable == true">
-				AND ((NOW() &lt; end_time_ AND NOW() > start_time_) OR end_time_ IS NULL)
-			</if>
-			<if test="enable != null and enable == false">
-				AND (NOW() >= end_time_ OR NOW() &lt;= start_time_)
+			<if test="enable != null">
+				AND enable_ = #{enable}
 			</if>
 			<if test="search != null and search != ''">
 				AND (vga.id_=#{search} OR vga.name_ LIKE CONCAT('%', #{search}, '%'))
@@ -173,9 +250,6 @@
 			<if test="applyToStudentType!=null">
 				AND apply_to_student_type_=#{applyToStudentType}
 			</if>
-			<if test="allowOnlineToOffline!=null">
-				AND allow_online_to_offline_=#{allowOnlineToOffline}
-			</if>
 		</where>
 	</sql>
 
@@ -198,20 +272,21 @@
 		<include refid="queryCondition"/>
 	</select>
     <select id="findByCategory" resultMap="VipGroupActivity">
-		SELECT
-			*
-		FROM
-			vip_group_activity
+		SELECT vga.* FROM
+			vip_group_activity vga
+			LEFT JOIN activity_apply_student_type ast ON vga.id_ = ast.activity_id_
 		WHERE
-			FIND_IN_SET( #{categoryId}, vip_group_category_id_list_ )
-		  	<if test="includeClosed==null">
-				AND (end_time_ IS NULL OR NOW() BETWEEN start_time_ AND end_time_)
-			</if>
-			AND del_flag_=0
-			AND INTE_ARRAY(organ_id_,#{organIds})
-			<if test="applyToStudentType!=null">
-				AND (apply_to_student_type_=#{applyToStudentType} OR apply_to_student_type_=-1)
-			</if>
+			FIND_IN_SET(#{activityQueryDto.categoryId}, vga.vip_group_category_id_list_ )
+		<if test="activityQueryDto.includeClosed == null">
+			AND (vga.end_time_ IS NULL OR NOW() BETWEEN vga.start_time_ AND vga.end_time_)
+		</if>
+		AND vga.del_flag_ = 0 AND vga.course_type_ = #{activityQueryDto.courseType} AND INTE_ARRAY(vga.organ_id_,#{activityQueryDto.organIds})
+		<if test="activityQueryDto.newStudentNum != null">
+			AND ast.new_student_ = #{activityQueryDto.newStudentNum}
+		</if>
+		<if test="activityQueryDto.memberNum != null">
+			AND ast.member_flag_ = #{activityQueryDto.memberNum}
+		</if>
 	</select>
     <select id="queryNamesById" resultType="java.util.Map">
 		SELECT vga.id_ `key`,vga.name_ `value` FROM vip_group_activity vga WHERE FIND_IN_SET(vga.id_,#{activityIds}) AND vga.del_flag_=0

+ 37 - 24
mec-teacher/src/main/java/com/ym/mec/teacher/controller/VipGroupActivityController.java

@@ -4,6 +4,7 @@ import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.StudentDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dto.ActivityQueryDto;
 import com.ym.mec.biz.dal.dto.VipGroupActivityAddDto;
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.SysConfig;
@@ -16,7 +17,6 @@ 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.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
@@ -47,8 +47,7 @@ public class VipGroupActivityController extends BaseController {
     @ApiOperation(value = "新增vip课活动方案")
     @PostMapping("/addVipGroupActivity")
     public Object addVipGroupActivity(@RequestBody VipGroupActivityAddDto vipGroupActivityAddDto){
-        vipGroupActivityService.addVipGroupActivity(vipGroupActivityAddDto);
-        return succeed();
+        return succeed(vipGroupActivityService.addVipGroupActivity(vipGroupActivityAddDto));
     }
 
     @ApiOperation(value = "分页查询活动方案")
@@ -70,12 +69,13 @@ public class VipGroupActivityController extends BaseController {
 
     @ApiOperation(value = "根据课程类型获取对应课程活动方案")
     @GetMapping("/findByVipGroupCategory")
-    public Object findByVipGroupCategory(Long categoryId, String studentIds, boolean onlySpecialActivity){
+    public Object findByVipGroupCategory(ActivityQueryDto activityQueryDto){
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if(sysUser == null){
             return failed("用户信息获取失败");
         }
-
+        activityQueryDto.setTeacherId(sysUser.getId());
+        String studentIds = activityQueryDto.getStudentIds();
         if(StringUtils.isBlank(studentIds)){
             return failed("请选择学员");
         }
@@ -84,24 +84,29 @@ public class VipGroupActivityController extends BaseController {
         if(CollectionUtils.isEmpty(students)||students.size()!=userIds.size()){
             return failed("学员信息不存在");
         }
-        long newStudentNum = students.stream().filter(s -> s.getIsNewUser()).count();
+        long newStudentNumCount = students.stream().filter(s -> s.getIsNewUser()).count();
+        long memberCount = students.stream().filter(e -> e.getMemberRankSettingId() != null).count();
 
-        Integer applyToStudentType = -1;
-        if(newStudentNum==0){
-            applyToStudentType = 0;
-        }else if(newStudentNum==userIds.size()){
-            applyToStudentType = 1;
+        if(newStudentNumCount == 0){
+            activityQueryDto.setNewStudentNum(0);
+        }else if(newStudentNumCount == userIds.size()){
+            activityQueryDto.setNewStudentNum(1);
+        }
+        if(memberCount == 0){
+            activityQueryDto.setMemberNum(0);
+        }else if(memberCount == userIds.size()){
+            activityQueryDto.setMemberNum(1);
         }
 
         SysUser student = teacherDao.getUser(userIds.get(0));
         if(Objects.isNull(student)){
             return failed("学员信息不存在");
         }
-        String organIds = student.getOrganId().toString();
-
-        List<VipGroupActivity> vipGroupActivities = vipGroupActivityService.findByVipGroupCategory(categoryId, organIds, sysUser.getId(),applyToStudentType, onlySpecialActivity?true:null);
+        activityQueryDto.setOrganId(student.getOrganId().toString());
+        activityQueryDto.setIncludeClosed(activityQueryDto.isOnlySpecialActivity()?true:null);
+        List<VipGroupActivity> vipGroupActivities = vipGroupActivityService.findByVipGroupCategory(activityQueryDto);
         SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.VIP_SPECIAL_ACTIVITY_IDS);
-        if(onlySpecialActivity){
+        if(activityQueryDto.isOnlySpecialActivity()){
             if(Objects.isNull(sysConfig)|| StringUtils.isBlank(sysConfig.getParanValue())){
                 return succeed(Collections.EMPTY_LIST);
             }
@@ -125,11 +130,13 @@ public class VipGroupActivityController extends BaseController {
 
     @ApiOperation(value = "获取六一活动方案")
     @GetMapping("/getChildrenDayActivitys")
-    public Object findByVipGroupCategory(Long categoryId, String studentIds){
+    public Object findByVipGroupCategory1(ActivityQueryDto activityQueryDto){
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if(sysUser == null){
             return failed("用户信息获取失败");
         }
+        activityQueryDto.setTeacherId(sysUser.getId());
+        String studentIds = activityQueryDto.getStudentIds();
         if(StringUtils.isBlank(studentIds)){
             return failed("请选择学员");
         }
@@ -146,21 +153,27 @@ public class VipGroupActivityController extends BaseController {
         if(CollectionUtils.isEmpty(students)||students.size()!=userIds.size()){
             return failed("学员信息不存在");
         }
-        long newStudentNum = students.stream().filter(s -> s.getIsNewUser()).count();
+        long newStudentNumCount = students.stream().filter(s -> s.getIsNewUser()).count();
+        long memberCount = students.stream().filter(e -> e.getMemberRankSettingId() != null).count();
 
-        Integer applyToStudentType = -1;
-        if(newStudentNum==0){
-            applyToStudentType = 0;
-        }else if(newStudentNum==userIds.size()){
-            applyToStudentType = 1;
+        if(newStudentNumCount == 0){
+            activityQueryDto.setNewStudentNum(0);
+        }else if(newStudentNumCount == userIds.size()){
+            activityQueryDto.setNewStudentNum(1);
+        }
+        if(memberCount == 0){
+            activityQueryDto.setMemberNum(0);
+        }else if(memberCount == userIds.size()){
+            activityQueryDto.setMemberNum(1);
         }
 
         SysUser student = teacherDao.getUser(userIds.get(0));
         if(Objects.isNull(student)){
             return failed("学员信息不存在");
         }
-        String organIds = student.getOrganId().toString();
-        List<VipGroupActivity> vipGroupActivities = vipGroupActivityService.findByVipGroupCategory(categoryId, organIds, sysUser.getId(), applyToStudentType, null);
+        activityQueryDto.setOrganId(student.getOrganId().toString());
+
+        List<VipGroupActivity> vipGroupActivities = vipGroupActivityService.findByVipGroupCategory(activityQueryDto);
         Iterator<VipGroupActivity> iterator = vipGroupActivities.iterator();
         while (iterator.hasNext()){
             VipGroupActivity vipGroupActivity = iterator.next();

+ 93 - 0
mec-web/src/main/java/com/ym/mec/web/controller/ActivityPlanController.java

@@ -0,0 +1,93 @@
+package com.ym.mec.web.controller;
+
+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.ActivityPlanAddDto;
+import com.ym.mec.biz.dal.entity.ActivityPlan;
+import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.page.ActivityPlanQueryInfo;
+import com.ym.mec.biz.service.ActivityPlanService;
+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.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+
+@Api(tags = "活动方案")
+@RequestMapping("activityPlan")
+@RestController
+public class ActivityPlanController extends BaseController {
+
+    @Autowired
+    private ActivityPlanService activityPlanService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+	@Autowired
+	private EmployeeDao employeeDao;
+
+    @ApiOperation(value = "新增活动方案")
+    @PostMapping("/addVipGroupActivity")
+    @PreAuthorize("@pcs.hasPermissions('activityPlan/addActivityPlan')")
+    public Object addActivityPlan(@RequestBody ActivityPlanAddDto activityPlanAddDto){
+        activityPlanService.addActivityPlan(activityPlanAddDto);
+        return succeed();
+    }
+
+    @ApiOperation(value = "修改活动方案")
+    @PostMapping("/updateActivityPlan")
+    @PreAuthorize("@pcs.hasPermissions('activityPlan/updateActivityPlan')")
+    public Object updateActivityPlan(@RequestBody ActivityPlanAddDto activityPlanAddDto){
+        activityPlanService.updateActivityPlan(activityPlanAddDto);
+        return succeed();
+    }
+
+    @ApiOperation(value = "修改活动方案")
+    @PostMapping("/enable")
+    @PreAuthorize("@pcs.hasPermissions('activityPlan/enable')")
+    public Object enable(Integer id){
+        ActivityPlan activityPlan = activityPlanService.get(id);
+        activityPlan.setEnable(activityPlan.getEnable());
+        activityPlanService.update(activityPlan);
+        return succeed();
+    }
+
+    @ApiOperation(value = "分页查询活动方案")
+    @GetMapping("/queryPage")
+    @PreAuthorize("@pcs.hasPermissions('activityPlan/queryPage')")
+    public Object queryPage(ActivityPlanQueryInfo 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("非法请求");
+            }
+        }
+        return succeed(activityPlanService.queryPage(queryInfo));
+    }
+
+    @ApiOperation(value = "删除活动方案")
+    @PostMapping("/delete")
+    @PreAuthorize("@pcs.hasPermissions('activityPlan/delete')")
+    public Object delete(Integer id){
+        if(Objects.isNull(id)){
+            throw new BizException("请指定活动编号!");
+        }
+        activityPlanService.deleteActivityPlan(id);
+        return succeed();
+    }
+}

+ 56 - 0
mec-web/src/main/java/com/ym/mec/web/controller/MarketActivityController.java

@@ -0,0 +1,56 @@
+package com.ym.mec.web.controller;
+
+import com.ym.mec.biz.dal.entity.MarketActivity;
+import com.ym.mec.biz.service.MarketActivityService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.page.QueryInfo;
+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;
+import org.springframework.web.bind.annotation.RestController;
+
+@RequestMapping("marketActivity")
+@Api(tags = "营销活动")
+@RestController
+public class MarketActivityController extends BaseController {
+
+	@Autowired
+	private MarketActivityService marketActivityService;
+
+	@ApiOperation("新增")
+	@RequestMapping(value = "add")
+	@PreAuthorize("@pcs.hasPermissions('marketActivity/add')")
+	public Object add(MarketActivity marketActivity) {
+		return succeed(marketActivityService.insert(marketActivity));
+	}
+
+	@ApiOperation("删除")
+	@RequestMapping(value = "del")
+	@PreAuthorize("@pcs.hasPermissions('marketActivity/del')")
+	public Object del(Integer id) {
+		return succeed(marketActivityService.delete(id));
+	}
+
+	@ApiOperation("修改")
+	@RequestMapping(value = "update")
+	@PreAuthorize("@pcs.hasPermissions('marketActivity/update')")
+	public Object update(MarketActivity marketActivity) {
+		return succeed(marketActivityService.update(marketActivity));
+	}
+
+	@ApiOperation("查询")
+	@RequestMapping(value = "get")
+	@PreAuthorize("@pcs.hasPermissions('marketActivity/get')")
+	public Object get(Integer id) {
+		return succeed(marketActivityService.get(id));
+	}
+
+	@ApiOperation("分页查询")
+	@RequestMapping(value = "queryPage")
+	@PreAuthorize("@pcs.hasPermissions('marketActivity/queryPage')")
+	public Object queryPage(QueryInfo queryInfo) {
+		return succeed(marketActivityService.queryPage(queryInfo));
+	}
+}

+ 44 - 4
mec-web/src/main/java/com/ym/mec/web/controller/PracticeGroupManageController.java

@@ -3,7 +3,13 @@ package com.ym.mec.web.controller;
 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.dao.TeacherDao;
+import com.ym.mec.biz.dal.dto.PracticeGroupApplyBaseInfoDto;
+import com.ym.mec.biz.dal.dto.PracticeGroupApplyDto;
+import com.ym.mec.biz.dal.dto.VipGroupApplyBaseInfoDto;
+import com.ym.mec.biz.dal.dto.VipGroupApplyDto;
 import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.page.PracticeGroupQueryInfo;
 import com.ym.mec.biz.dal.page.StudentBuyPracticeQueryInfo;
@@ -17,14 +23,13 @@ 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.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.math.BigDecimal;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 
 /**
  * @Author Joburgess
@@ -45,6 +50,8 @@ public class PracticeGroupManageController extends BaseController {
     private GroupClassService groupService;
     @Autowired
     private CourseScheduleEvaluateService courseScheduleEvaluateService;
+    @Autowired
+    private TeacherDao teacherDao;
 
     @ApiOperation(value = "全查询")
     @GetMapping("/queryAll")
@@ -155,4 +162,37 @@ public class PracticeGroupManageController extends BaseController {
         }
         return succeed(practiceGroupService.studentBuys(queryInfo));
     }
+
+    @ApiOperation("课酬总费用")
+    @PostMapping("/getPracticeGroupCostCount")
+    @PreAuthorize("@pcs.hasPermissions('practiceGroupManage/getPracticeGroupCostCount')")
+    public Object getPracticeGroupCostCount(@RequestBody PracticeGroupApplyBaseInfoDto practice){
+        Map results = practiceGroupService.countPracticeGroupPredictFee(practice,practice.getUserId(), null);
+        return succeed(results);
+    }
+
+    @ApiOperation(value = "网管课申请")
+    @PostMapping("/practiceGroupApply")
+    @PreAuthorize("@pcs.hasPermissions('practiceGroupManage/practiceGroupApply')")
+    public Object vipGroupApply(@RequestBody PracticeGroupApplyDto practiceGroupApplyDto){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        PracticeGroupApplyBaseInfoDto applyBaseInfoDto = practiceGroupApplyDto.getPracticeGroupApplyBaseInfoDto();
+        Integer userId = applyBaseInfoDto.getUserId();
+        Teacher teacher = teacherDao.get(userId);
+        if(Objects.isNull(teacher)){
+            return failed("请指定指导老师!");
+        }
+        if(Objects.isNull(applyBaseInfoDto.getOrganId())){
+            Integer firstStudentId = applyBaseInfoDto.getFirstStudentId();
+            SysUser student = teacherDao.getUser(firstStudentId);
+            if(Objects.isNull(student)||Objects.isNull(student.getOrganId())){
+                return failed("学员信息异常");
+            }
+            applyBaseInfoDto.setOrganId(student.getOrganId());
+        }
+        return practiceGroupService.createPracticeGroup(practiceGroupApplyDto);
+    }
 }

+ 41 - 29
mec-web/src/main/java/com/ym/mec/web/controller/VipGroupActivityController.java

@@ -1,10 +1,12 @@
 package com.ym.mec.web.controller;
 
+import com.alibaba.fastjson.JSONObject;
 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.dao.StudentDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dto.ActivityQueryDto;
 import com.ym.mec.biz.dal.dto.VipGroupActivityAddDto;
 import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.dal.entity.Student;
@@ -15,16 +17,13 @@ import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.biz.service.VipGroupActivityService;
 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.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
-
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -55,8 +54,14 @@ public class VipGroupActivityController extends BaseController {
     @PostMapping("/addVipGroupActivity")
     @PreAuthorize("@pcs.hasPermissions('vipGroupActivity/addVipGroupActivity')")
     public Object addVipGroupActivity(@RequestBody VipGroupActivityAddDto vipGroupActivityAddDto){
-        vipGroupActivityService.addVipGroupActivity(vipGroupActivityAddDto);
-        return succeed();
+        return succeed(vipGroupActivityService.addVipGroupActivity(vipGroupActivityAddDto));
+    }
+
+    @ApiOperation(value = "获取活动方案")
+    @GetMapping("/get")
+    @PreAuthorize("@pcs.hasPermissions('vipGroupActivity/get')")
+    public Object get(Integer id){
+        return succeed(vipGroupActivityService.get(id));
     }
 
     @ApiOperation(value = "分页查询活动方案")
@@ -67,17 +72,17 @@ public class VipGroupActivityController extends BaseController {
         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("非法请求");
-                }
+        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("非法请求");
             }
+        }
         return succeed(vipGroupActivityService.queryPage(queryInfo));
     }
 
@@ -89,8 +94,7 @@ public class VipGroupActivityController extends BaseController {
         if(sysUser == null){
             return failed("用户信息获取失败");
         }
-        vipGroupActivityService.updateVipGroupActivity(vipGroupActivityAddDto, sysUser.getId());
-        return succeed();
+        return succeed(vipGroupActivityService.updateVipGroupActivity(vipGroupActivityAddDto, sysUser.getId()));
     }
 
     @ApiOperation(value = "删除活动方案")
@@ -107,31 +111,39 @@ public class VipGroupActivityController extends BaseController {
     @ApiOperation(value = "根据课程类型获取对应课程活动方案")
     @GetMapping("/findByVipGroupCategory")
     @PreAuthorize("@pcs.hasPermissions('vipGroupActivity/findByVipGroupCategory')")
-    public Object findByVipGroupCategory(Long categoryId, String studentIds, Integer teacherId){
-        if(StringUtils.isBlank(studentIds)){
-            return failed("请选择学员");
+    public Object findByVipGroupCategory(ActivityQueryDto activityQueryDto){
+        if(StringUtils.isBlank(activityQueryDto.getOrganId())){
+            return failed("请选择分部");
         }
-        List<Integer> userIds = Arrays.stream(studentIds.split(",")).map(id -> Integer.valueOf(id)).collect(Collectors.toList());
+        if(activityQueryDto.getCategoryId() == null){
+            return failed("请选择课程形式");
+        }
+        List<Integer> userIds = Arrays.stream(activityQueryDto.getStudentIds().split(",")).map(id -> Integer.valueOf(id)).collect(Collectors.toList());
         List<Student> students = studentDao.findByStudentIds(userIds);
         if(CollectionUtils.isEmpty(students)||students.size()!=userIds.size()){
             return failed("学员信息不存在");
         }
-        long newStudentNum = students.stream().filter(s -> s.getIsNewUser()).count();
+        long newStudentNumCount = students.stream().filter(s -> s.getIsNewUser()).count();
+        long memberCount = students.stream().filter(e -> e.getMemberRankSettingId() != null).count();
 
-        Integer applyToStudentType = -1;
-        if(newStudentNum==0){
-            applyToStudentType = 0;
-        }else if(newStudentNum==userIds.size()){
-            applyToStudentType = 1;
+        if(newStudentNumCount == 0){
+            activityQueryDto.setNewStudentNum(0);
+        }else if(newStudentNumCount == userIds.size()){
+            activityQueryDto.setNewStudentNum(1);
+        }
+        if(memberCount == 0){
+            activityQueryDto.setMemberNum(0);
+        }else if(memberCount == userIds.size()){
+            activityQueryDto.setMemberNum(1);
         }
 
         SysUser student = teacherDao.getUser(userIds.get(0));
         if(Objects.isNull(student)){
             return failed("学员信息不存在");
         }
-        String organIds = student.getOrganId().toString();
+        activityQueryDto.setOrganId(student.getOrganId().toString());
 
-        List<VipGroupActivity> vipGroupActivities = vipGroupActivityService.findByVipGroupCategory(categoryId, organIds, teacherId, applyToStudentType, null);
+        List<VipGroupActivity> vipGroupActivities = vipGroupActivityService.findByVipGroupCategory(activityQueryDto);
 
         SysConfig doubleElevenIdConfig = sysConfigService.findByParamName(SysConfigService.VIP_SPECIAL_ACTIVITY_IDS);
         if(Objects.nonNull(doubleElevenIdConfig)&&StringUtils.isNotBlank(doubleElevenIdConfig.getParanValue())){

+ 20 - 16
mec-web/src/main/java/com/ym/mec/web/controller/education/EduVipGroupActivityController.java

@@ -1,27 +1,24 @@
 package com.ym.mec.web.controller.education;
 
-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.dao.StudentDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
-import com.ym.mec.biz.dal.dto.VipGroupActivityAddDto;
-import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.dto.ActivityQueryDto;
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.SysConfig;
 import com.ym.mec.biz.dal.entity.VipGroupActivity;
-import com.ym.mec.biz.dal.page.VipGroupActivityQueryInfo;
 import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.biz.service.VipGroupActivityService;
 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.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.util.CollectionUtils;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -48,7 +45,8 @@ public class EduVipGroupActivityController extends BaseController {
     @ApiOperation(value = "根据课程类型获取对应课程活动方案")
     @GetMapping("/findByVipGroupCategory")
     @PreAuthorize("@pcs.hasPermissions('vipGroupActivity/findByVipGroupCategory')")
-    public Object findByVipGroupCategory(Long categoryId, String studentIds, Integer teacherId){
+    public Object findByVipGroupCategory(ActivityQueryDto activityQueryDto){
+        String studentIds = activityQueryDto.getStudentIds();
         if(StringUtils.isBlank(studentIds)){
             return failed("请选择学员");
         }
@@ -65,21 +63,27 @@ public class EduVipGroupActivityController extends BaseController {
         if(CollectionUtils.isEmpty(students)||students.size()!=userIds.size()){
             return failed("学员信息不存在");
         }
-        long newStudentNum = students.stream().filter(s -> s.getIsNewUser()).count();
+        long newStudentNumCount = students.stream().filter(s -> s.getIsNewUser()).count();
+        long memberCount = students.stream().filter(e -> e.getMemberRankSettingId() != null).count();
 
-        Integer applyToStudentType = -1;
-        if(newStudentNum==0){
-            applyToStudentType = 0;
-        }else if(newStudentNum==userIds.size()){
-            applyToStudentType = 1;
+        if(newStudentNumCount == 0){
+            activityQueryDto.setNewStudentNum(0);
+        }else if(newStudentNumCount == userIds.size()){
+            activityQueryDto.setNewStudentNum(1);
+        }
+        if(memberCount == 0){
+            activityQueryDto.setMemberNum(0);
+        }else if(memberCount == userIds.size()){
+            activityQueryDto.setMemberNum(1);
         }
 
         SysUser student = teacherDao.getUser(userIds.get(0));
         if(Objects.isNull(student)){
             return failed("学员信息不存在");
         }
-        String organIds = student.getOrganId().toString();
-        List<VipGroupActivity> vipGroupActivities = vipGroupActivityService.findByVipGroupCategory(categoryId, organIds, teacherId, applyToStudentType, null);
+        activityQueryDto.setOrganId(student.getOrganId().toString());
+
+        List<VipGroupActivity> vipGroupActivities = vipGroupActivityService.findByVipGroupCategory(activityQueryDto);
         Iterator<VipGroupActivity> iterator = vipGroupActivities.iterator();
         while (iterator.hasNext()){
             VipGroupActivity vipGroupActivity = iterator.next();