Browse Source

Merge branch 'online1'

yonge 4 years ago
parent
commit
91bc1d1d20
65 changed files with 1554 additions and 925 deletions
  1. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ActivityUserMapperDao.java
  2. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/OrganizationDao.java
  3. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java
  4. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupActivityDao.java
  5. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ActivityWaitCourseStudentNumDto.java
  6. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ReturnFeeDto.java
  7. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentCourseInfoDto.java
  8. 2 10
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupApplyBaseInfoDto.java
  9. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupBuyParamsDto.java
  10. 9 25
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupSalarySettlementDto.java
  11. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ActivityUserMapper.java
  12. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ClassGroup.java
  13. 1 11
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TeacherDefaultVipGroupSalary.java
  14. 20 33
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroupActivity.java
  15. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ActivityUserMapperService.java
  16. 0 1
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleTeacherSalaryService.java
  17. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/service/GroupClassService.java
  18. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/OrganizationService.java
  19. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/PracticeGroupService.java
  20. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentManageService.java
  21. 1 6
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java
  22. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupActivityService.java
  23. 12 17
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java
  24. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ActivityUserMapperServiceImpl.java
  25. 134 33
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  26. 4 14
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java
  27. 49 36
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java
  28. 173 88
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/GroupClassServiceImpl.java
  29. 82 14
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  30. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrganizationServiceImpl.java
  31. 132 70
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  32. 4 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SellOrderServiceImpl.java
  33. 32 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  34. 18 12
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  35. 20 20
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  36. 0 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherDefaultPracticeGroupSalaryServiceImpl.java
  37. 15 14
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherDefaultVipGroupSalaryServiceImpl.java
  38. 4 12
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupActivityServiceImpl.java
  39. 427 351
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  40. 16 15
      mec-biz/src/main/resources/config/contracts/product2.ftl
  41. 11 9
      mec-biz/src/main/resources/config/contracts/product4.ftl
  42. 21 4
      mec-biz/src/main/resources/config/mybatis/ActivityUserMapperMapper.xml
  43. 1 1
      mec-biz/src/main/resources/config/mybatis/CloudTeacherOrderMapper.xml
  44. 4 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  45. 2 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml
  46. 3 3
      mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml
  47. 3 0
      mec-biz/src/main/resources/config/mybatis/OrganizationMapper.xml
  48. 6 5
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  49. 4 8
      mec-biz/src/main/resources/config/mybatis/TeacherDefaultVipGroupSalaryMapper.xml
  50. 38 25
      mec-biz/src/main/resources/config/mybatis/VipGroupActivityMapper.xml
  51. 1 1
      mec-biz/src/main/resources/config/mybatis/VipGroupCategoryMapper.xml
  52. 4 2
      mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml
  53. 2 15
      mec-education/src/main/java/com/ym/mec/education/entity/TeacherDefaultVipGroupSalary.java
  54. 5 0
      mec-student/src/main/java/com/ym/mec/student/controller/StudentVipGroupController.java
  55. 4 2
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherPracticeGroupController.java
  56. 14 3
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherVipGroupController.java
  57. 1 1
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/VipGroupActivityController.java
  58. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/OrganizationController.java
  59. 2 2
      mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java
  60. 0 6
      mec-web/src/main/java/com/ym/mec/web/controller/VipGroupCategoryController.java
  61. 7 15
      mec-web/src/main/java/com/ym/mec/web/controller/VipGroupManageController.java
  62. 141 13
      mec-web/src/main/java/com/ym/mec/web/controller/education/ActivityController.java
  63. 3 3
      mec-web/src/main/java/com/ym/mec/web/controller/education/EduOrganizationController.java
  64. 22 0
      mec-web/src/main/java/com/ym/mec/web/controller/education/EduSchoolController.java
  65. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/education/EduStudentController.java

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

@@ -56,4 +56,14 @@ public interface ActivityUserMapperDao extends BaseDAO<Integer, ActivityUserMapp
             @Param("studentIds") String studentIds,
             @Param("type") String type,
             @Param("groupId") Long groupId);
+
+    /**
+    * @description:
+     * @param groupId
+ * @param groupType
+    * @return com.ym.mec.biz.dal.entity.ActivityUserMapper
+    * @author zx
+    * @date 2021/10/22 17:36
+    */
+    ActivityUserMapper findVipUserMapper(@Param("groupId") Long groupId, @Param("groupType") String groupType);
 }

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

@@ -33,7 +33,7 @@ public interface OrganizationDao extends BaseDAO<Integer, Organization> {
      * @param userId
      * @return
      */
-    List<Organization> queryEmployeeOrgan(@Param("userId") Integer userId);
+    List<Organization> queryEmployeeOrgan(@Param("userId") Integer userId, @Param("organId") String organId);
 
     /**
      * 根据分部编号获取分部名称map

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

@@ -456,4 +456,13 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
      * @return
      */
     Integer getOrderIdByMusical(@Param("musicGroupId") String musicGroupId, @Param("studentId") Integer studentId);
+
+    /**
+    * @description: 根据课程组编号获取学员的订单列表
+     * @param vipGroupId
+    * @return java.util.Map<java.lang.Integer,java.math.BigDecimal>
+    * @author zx
+    * @date 2021/10/20 18:56
+    */
+    List<Map<Integer, BigDecimal>> queryStudentCourseAmountMap(Long vipGroupId);
 }

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

@@ -45,7 +45,7 @@ public interface VipGroupActivityDao extends BaseDAO<Integer, VipGroupActivity>
 	* @author zx
 	* @date 2021/10/11 11:17
 	*/
-    List<WaitCourseActivityDto> queryWaitCourseActivity(Integer teacherId);
+    List<WaitCourseActivityDto> queryWaitCourseActivity(@Param("teacherId") Integer teacherId, @Param("organId") String organId);
 
     /**
     * @description: 获取活动待排课学员数量

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ActivityWaitCourseStudentNumDto.java

@@ -22,6 +22,17 @@ public class ActivityWaitCourseStudentNumDto{
 
     private Integer userId;
 
+    //活动和员工的分部
+    private String employeeAndActivityOrganIds;
+
+    public String getEmployeeAndActivityOrganIds() {
+        return employeeAndActivityOrganIds;
+    }
+
+    public void setEmployeeAndActivityOrganIds(String employeeAndActivityOrganIds) {
+        this.employeeAndActivityOrganIds = employeeAndActivityOrganIds;
+    }
+
     public String getPhone() {
         return phone;
     }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ReturnFeeDto.java

@@ -10,6 +10,9 @@ public class ReturnFeeDto {
     @ApiModelProperty(value = "课程组编号",required = false)
     private Long vipGroupId;
 
+    @ApiModelProperty(value = "课程组编号",required = false)
+    private Long groupId;
+
     @ApiModelProperty(value = "退费学员",required = false)
     private Integer studentId;
 
@@ -21,6 +24,14 @@ public class ReturnFeeDto {
 
     private GroupType groupType;
 
+    public Long getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(Long groupId) {
+        this.groupId = groupId;
+    }
+
     public GroupType getGroupType() {
         return groupType;
     }

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

@@ -54,6 +54,16 @@ public class StudentCourseInfoDto {
     @ApiModelProperty(value = "预计课酬")
     private BigDecimal expectPrice;
 
+    private BigDecimal originalPrice = BigDecimal.ZERO;
+
+    public BigDecimal getOriginalPrice() {
+        return originalPrice;
+    }
+
+    public void setOriginalPrice(BigDecimal originalPrice) {
+        this.originalPrice = originalPrice;
+    }
+
     public StudentCourseInfoDto(String classDate, String startClassTime, String endClassTime) {
         this.classDate = DateUtil.stringToDate(classDate, DateUtil.DEFAULT_PATTERN);
         if (Objects.nonNull(this.classDate) && !StringUtils.isBlank(startClassTime)) {

+ 2 - 10
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupApplyBaseInfoDto.java

@@ -29,8 +29,8 @@ public class VipGroupApplyBaseInfoDto extends VipGroup {
     @ApiModelProperty(value = "预计招生人数",hidden = true)
     private Integer expectStudentNum;
 
-    @ApiModelProperty(value = "教师线上课课酬")
-    private BigDecimal onlineTeacherSalary;
+//    @ApiModelProperty(value = "教师线上课课酬")
+//    private BigDecimal onlineTeacherSalary;
 
     @ApiModelProperty(value = "教师线下课课酬")
     private BigDecimal offlineTeacherSalary;
@@ -76,14 +76,6 @@ public class VipGroupApplyBaseInfoDto extends VipGroup {
         this.subjectIdList = subjectIdList;
     }
 
-    public BigDecimal getOnlineTeacherSalary() {
-        return onlineTeacherSalary;
-    }
-
-    public void setOnlineTeacherSalary(BigDecimal onlineTeacherSalary) {
-        this.onlineTeacherSalary = onlineTeacherSalary;
-    }
-
     public BigDecimal getOfflineTeacherSalary() {
         return offlineTeacherSalary;
     }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupBuyParamsDto.java

@@ -23,7 +23,7 @@ public class VipGroupBuyParamsDto {
     private boolean isUseBalancePayment;
 
     @ApiModelProperty(value = "是否重新支付")
-    private boolean isRepeatPay;
+    private boolean isRepeatPay = false;
 
     @ApiModelProperty(value = "优惠券列表", required = false)
     private List<Integer> couponIdList;

+ 9 - 25
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupSalarySettlementDto.java

@@ -10,14 +10,14 @@ import java.io.Serializable;
  */
 public class VipGroupSalarySettlementDto implements Serializable {
 
-    @ApiModelProperty("收费VIP线上课收费标准")
-    private VipGroupSalarySettlementTypeDto vipOnlineSalarySettlement;
+//    @ApiModelProperty("收费VIP线上课收费标准")
+//    private VipGroupSalarySettlementTypeDto vipOnlineSalarySettlement;
 
     @ApiModelProperty("收费VIP线下课收费标准")
-    private VipGroupSalarySettlementTypeDto vipOfflineSalarySettlement;
+    private VipGroupSalarySettlementTypeDto offlineSalarySettlement;
 
-    @ApiModelProperty("赠送VIP线上课收费标准")
-    private VipGroupSalarySettlementTypeDto giveVipOnlineSalarySettlement;
+//    @ApiModelProperty("赠送VIP线上课收费标准")
+//    private VipGroupSalarySettlementTypeDto giveVipOnlineSalarySettlement;
 
     @ApiModelProperty("赠送VIP线下课收费标准")
     private VipGroupSalarySettlementTypeDto giveVipOfflineSalarySettlement;
@@ -28,28 +28,12 @@ public class VipGroupSalarySettlementDto implements Serializable {
     @ApiModelProperty("赠送网管课收费标准")
     private VipGroupSalarySettlementTypeDto givePracticeSalarySettlement;
 
-    public VipGroupSalarySettlementTypeDto getVipOnlineSalarySettlement() {
-        return vipOnlineSalarySettlement;
+    public VipGroupSalarySettlementTypeDto getOfflineSalarySettlement() {
+        return offlineSalarySettlement;
     }
 
-    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 void setOfflineSalarySettlement(VipGroupSalarySettlementTypeDto offlineSalarySettlement) {
+        this.offlineSalarySettlement = offlineSalarySettlement;
     }
 
     public VipGroupSalarySettlementTypeDto getGiveVipOfflineSalarySettlement() {

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ActivityUserMapper.java

@@ -2,6 +2,8 @@ package com.ym.mec.biz.dal.entity;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
+import java.math.BigDecimal;
+
 /**
  * 对应数据库表(activity_user_mapper):
  */
@@ -52,6 +54,8 @@ public class ActivityUserMapper {
 	private Long givePracticeGroupId;
 
 	private Boolean returnFee = false;
+
+	private BigDecimal actualPrice = BigDecimal.ZERO;
 	
 	/**  */
 	private java.util.Date createTime;
@@ -59,6 +63,14 @@ public class ActivityUserMapper {
 	/**  */
 	private java.util.Date updateTime;
 
+	public BigDecimal getActualPrice() {
+		return actualPrice;
+	}
+
+	public void setActualPrice(BigDecimal actualPrice) {
+		this.actualPrice = actualPrice;
+	}
+
 	public Integer getTeacherId() {
 		return teacherId;
 	}

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ClassGroup.java

@@ -205,6 +205,9 @@ public class ClassGroup {
 	}
 
 	public void setStudentNum(Integer studentNum) {
+		if(studentNum == null || studentNum < 0){
+			studentNum = 0;
+		}
 		this.studentNum = studentNum;
 	}
 

+ 1 - 11
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TeacherDefaultVipGroupSalary.java

@@ -25,9 +25,7 @@ public class TeacherDefaultVipGroupSalary {
 
 	private Boolean musicTheory;
 	
-	/** 线上课薪酬 */
-	@ApiModelProperty(value = "线上课薪酬", required = false)
-	private java.math.BigDecimal onlineClassesSalary;
+//	private java.math.BigDecimal onlineClassesSalary;
 	
 	/** 线下课薪酬 */
 	@ApiModelProperty(value = "线下课薪酬", required = false)
@@ -71,14 +69,6 @@ public class TeacherDefaultVipGroupSalary {
 		return this.vipGroupCategoryId;
 	}
 			
-	public void setOnlineClassesSalary(java.math.BigDecimal onlineClassesSalary){
-		this.onlineClassesSalary = onlineClassesSalary;
-	}
-	
-	public java.math.BigDecimal getOnlineClassesSalary(){
-		return this.onlineClassesSalary;
-	}
-			
 	public void setOfflineClassesSalary(java.math.BigDecimal offlineClassesSalary){
 		this.offlineClassesSalary = offlineClassesSalary;
 	}

+ 20 - 33
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroupActivity.java

@@ -101,14 +101,14 @@ public class VipGroupActivity {
 //	@ApiModelProperty(value = "活动变量3")
 //	private String attribute3;
 
-	@ApiModelProperty(value = "薪水只读标识(1-只读 0-可写)")
-	private Integer salaryReadonlyFlag = 0;
-
-	@ApiModelProperty(value = "单节课程费用只读标识")
-	private Integer paymentReadonlyFlag = 1;
+//	@ApiModelProperty(value = "薪水只读标识(1-只读 0-可写)")
+//	private Integer salaryReadonlyFlag = 0;
+//
+//	@ApiModelProperty(value = "单节课程费用只读标识")
+//	private Integer paymentReadonlyFlag = 1;
 
-	@ApiModelProperty(value = "赠送课时支付薪水标识(1-计课酬  0-不计课酬)")
-	private Integer giveClassPaySalaryFlag = 1;
+//	@ApiModelProperty(value = "赠送课时支付薪水标识(1-计课酬  0-不计课酬)")
+//	private Integer giveClassPaySalaryFlag = 1;
 
 	@ApiModelProperty(value = "创建时间")
 	private java.util.Date createTime;
@@ -148,8 +148,11 @@ public class VipGroupActivity {
 	@ApiModelProperty(value = "适用学生类型:-1:所有;0:老用户;1:新用户,2会员,3非会员")
 	private String applyToStudentType;
 
-	@ApiModelProperty(value = "课程可调整方向:0双向可调,1禁止线上到线下,2禁止线下到线上,3双向不可调")
-	private Integer allowOnlineToOffline = 0;
+	@ApiModelProperty(value = "课程可调整方向:1不限制,0线上不可到线下,2禁止线下到线上,3双向不可调")
+	private Integer allowOnlineToOffline = 1;
+
+	@ApiModelProperty(value = "赠送课程可调整方向:1不限制,0线上不可到线下,2禁止线下到线上,3双向不可调")
+	private Integer giveAllowOnlineToOffline = 1;
 
 	@ApiModelProperty(value = "-1:所有;0:线上;1:线下")
 	private Integer teachMode = -1;
@@ -166,6 +169,14 @@ public class VipGroupActivity {
 	@ApiModelProperty(value = "活动价格")
 	private BigDecimal marketPrice = BigDecimal.ZERO;
 
+	public Integer getGiveAllowOnlineToOffline() {
+		return giveAllowOnlineToOffline;
+	}
+
+	public void setGiveAllowOnlineToOffline(Integer giveAllowOnlineToOffline) {
+		this.giveAllowOnlineToOffline = giveAllowOnlineToOffline;
+	}
+
 	public BigDecimal getMarketPrice() {
 		return marketPrice;
 	}
@@ -390,30 +401,6 @@ public class VipGroupActivity {
 		isPayToBalance = payToBalance;
 	}
 
-	public Integer getSalaryReadonlyFlag() {
-		return salaryReadonlyFlag;
-	}
-
-	public void setSalaryReadonlyFlag(Integer salaryReadonlyFlag) {
-		this.salaryReadonlyFlag = salaryReadonlyFlag;
-	}
-
-	public Integer getPaymentReadonlyFlag() {
-		return paymentReadonlyFlag;
-	}
-
-	public void setPaymentReadonlyFlag(Integer paymentReadonlyFlag) {
-		this.paymentReadonlyFlag = paymentReadonlyFlag;
-	}
-
-	public Integer getGiveClassPaySalaryFlag() {
-		return giveClassPaySalaryFlag;
-	}
-
-	public void setGiveClassPaySalaryFlag(Integer giveClassPaySalaryFlag) {
-		this.giveClassPaySalaryFlag = giveClassPaySalaryFlag;
-	}
-
 	public Date getCreateTime() {
 		return createTime;
 	}

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

@@ -2,6 +2,7 @@ package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.entity.ActivityUserMapper;
 import com.ym.mec.common.service.BaseService;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -48,4 +49,14 @@ public interface ActivityUserMapperService extends BaseService<Integer, Activity
     * @date 2021/10/15 16:18
     */
     int countActivityBuyNum(Integer activityId, Integer userId);
+
+    /**
+    * @description:
+     * @param groupId
+     * @param groupType
+    * @return com.ym.mec.biz.dal.entity.ActivityUserMapper
+    * @author zx
+    * @date 2021/10/22 17:35
+    */
+    ActivityUserMapper findVipUserMapper(Long groupId,String groupType);
 }

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

@@ -31,7 +31,6 @@ public interface CourseScheduleTeacherSalaryService extends BaseService<Long, Co
      */
     void createCourseScheduleTeacherVipSalary(VipGroup vipGroup,
                                              List<CourseSchedule> vipCourseSchedules,
-                                             BigDecimal onlineTeacherSalary,
                                              BigDecimal offlineTeacherSalary);
 
     void createCourseScheduleTeacherPracticeSalary(List<CourseSchedule> courseSchedules,

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

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.ReturnFeeDto;
+import com.ym.mec.biz.dal.entity.ActivityUserMapper;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.common.entity.HttpResponseResult;
 
@@ -65,12 +66,11 @@ public interface GroupClassService {
 
     /**
     * @description: 退还活动相关赠送
-     * @param activityUserMapperId
+     * @param activityUserMapper
      * @param confirmReturnActivityGive
-     * @param studentId
     * @return com.ym.mec.common.entity.HttpResponseResult
     * @author zx
     * @date 2021/10/13 13:59
     */
-    HttpResponseResult quitActivityGive(Integer activityUserMapperId,Boolean confirmReturnActivityGive,Integer studentId);
+    HttpResponseResult quitActivityGive(ActivityUserMapper activityUserMapper, boolean confirmReturnActivityGive,Long groupId,GroupType groupType);
 }

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

@@ -22,7 +22,7 @@ public interface OrganizationService extends BaseService<Integer, Organization>
      * 获取员工坐在分部列表
      * @return
      */
-    List<Organization> queryEmployeeOrgan(Integer userId) throws Exception;
+    List<Organization> queryEmployeeOrgan(Integer userId,String organId) throws Exception;
 
     /**
      * 获取员工坐在分部列表

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

@@ -11,6 +11,7 @@ import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -344,6 +345,8 @@ public interface PracticeGroupService extends BaseService<Long, PracticeGroup> {
 
     Map countPracticeGroupPredictFee(PracticeGroupApplyBaseInfoDto practice, Integer userId);
 
+	Map<String, BigDecimal> countPracticeGroupPredictFee1(PracticeGroup practice, Integer userId);
+
     /**
     * @description: 网管课申请
      * @param practiceGroupApplyDto

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentManageService.java

@@ -24,6 +24,8 @@ public interface StudentManageService {
 
     PageInfo<SimpleUserDto> queryStudentsWithTeacher(StudentManageQueryInfo queryInfo);
 
+    PageInfo<SimpleUserDto> queryStudentsWithTeacherByOrganId(StudentManageQueryInfo queryInfo);
+
     /**
      * @describe 双11活动学员查询
      * @author qnc99

+ 1 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java

@@ -203,18 +203,13 @@ public interface StudentPaymentOrderService extends BaseService<Long, StudentPay
     /**
      * @description: 活动赠送课程,或者会员
      * @param vipGroupActivityId
-     * @param userId
-     * @param paymentOrderId
      * @return void
      * @author zx
      * @date 2021/10/11 10:36
      */
     Integer activityGive(Integer vipGroupActivityId,
-                         Integer userId,
-                         Long paymentOrderId,
+                         StudentPaymentOrder studentPaymentOrder,
                          Long vipGroupId,
                          Long practiceGroupId,
-                         Integer buyNum,
-                         Integer organId,
                          Integer teacherId);
 }

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

@@ -44,7 +44,7 @@ public interface VipGroupActivityService extends BaseService<Integer, VipGroupAc
     * @author zx
     * @date 2021/10/11 11:12
     */
-    List<WaitCourseActivityDto> queryWaitCourseActivity(Integer teacherId);
+    List<WaitCourseActivityDto> queryWaitCourseActivity(Integer teacherId,String organId);
 
 
     /**

+ 12 - 17
mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java

@@ -22,7 +22,7 @@ import org.springframework.web.multipart.MultipartFile;
 public interface VipGroupService extends BaseService<Long, VipGroup> {
 
     /**
-     * @describe 创建vip
+     * @describe 申请VIP
      * @author Joburgess
      * @date 2019/10/30
      * @param vipGroup: VIP课申请信息
@@ -31,13 +31,13 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
     HttpResponseResult createVipGroup(VipGroupApplyDto vipGroup);
 
     /**
-     * @describe 创建vip课
+     * @describe 创建vip课、并排课
      * @author Joburgess
      * @date 2019/10/30
      * @param vipGroup: VIP课申请信息
      * @return void
      */
-    HttpResponseResult createActivityVipGroup(VipGroupApplyDto vipGroup);
+    HttpResponseResult createVipGroup1(VipGroupApplyDto vipGroup);
 
     /**
      * @describe 创建vip课
@@ -46,6 +46,15 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
      * @param vipGroup: VIP课申请信息
      * @return void
      */
+    HttpResponseResult createActivityVipGroup(VipGroupApplyDto vipGroup);
+
+    /**
+    * @description: 教师端活动排课
+     * @param vipGroup
+    * @return com.ym.mec.common.entity.HttpResponseResult
+    * @author zx
+    * @date 2021/10/21 11:17
+    */
     HttpResponseResult createActivityVipGroup1(VipGroupApplyDto vipGroup);
 
     HttpResponseResult importActivityVipGroup(String data);
@@ -204,20 +213,6 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
                                                                          Integer teacherId);
 
     /**
-     * @describe 计算vip课程购买总价,及老师课酬-只是学生人数统计方式不同
-     * @author Joburgess
-     * @date 2019/10/23
-     * @param vipGroup: vip课程
-     * @param teacherId: 要计算课酬的老师的编号
-     * @return java.util.Map
-     */
-    @Deprecated
-//    <K extends VipGroup> Map<String, BigDecimal> countVipGroupCoursePredictFee(K vipGroup,
-//                                                                         Integer teacherId,
-//                                                                               Long courseId);
-
-
-    /**
      * @Author: Joburgess
      * @Date: 2019/10/3
      * @params [queryInfo]

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ActivityUserMapperServiceImpl.java

@@ -40,4 +40,9 @@ public class ActivityUserMapperServiceImpl extends BaseServiceImpl<Integer, Acti
 	public int countActivityBuyNum(Integer activityId, Integer userId) {
 		return activityUserMapperDao.countActivityBuyNum(activityId,userId);
 	}
+
+	@Override
+	public ActivityUserMapper findVipUserMapper(Long groupId, String groupType) {
+		return activityUserMapperDao.findVipUserMapper(groupId,groupType);
+	}
 }

+ 134 - 33
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -155,9 +155,11 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
     @Autowired
 	private VipGroupActivityDao vipGroupActivityDao;
     @Autowired
-	private StudentDao studentDao;
+	private ActivityUserMapperDao activityUserMapperDao;
     @Autowired
 	private MusicGroupTrainPlanService musicGroupTrainPlanService;
+    @Autowired
+	private PracticeGroupSellPriceDao practiceGroupSellPriceDao;
 
     private final Logger LOGGER = LoggerFactory
             .getLogger(this.getClass());
@@ -629,7 +631,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 						courseScheduleTeacherSalary.setMusicGroupId(classGroup.getMusicGroupId());
 						courseScheduleTeacherSalary.setTeacherRole(cgtm.getTeacherRole());
 						courseScheduleTeacherSalary.setUserId(cgtm.getUserId());
-						if(TeachTypeEnum.BISHOP.equals(cgtm.getTeacherRole())&&Objects.nonNull(oldCourseMainTeacherSalary)&&!oldCourseMainTeacherSalary.getEnableChangeSalary()){
+						if(TeachTypeEnum.BISHOP.equals(cgtm.getTeacherRole()) && Objects.nonNull(oldCourseMainTeacherSalary) && !oldCourseMainTeacherSalary.getEnableChangeSalary()){
 							courseScheduleTeacherSalary.setExpectSalary(oldCourseMainTeacherSalary.getExpectSalary());
 							courseScheduleTeacherSalary.setSubsidy(oldCourseMainTeacherSalary.getSubsidy());
 							courseScheduleTeacherSalary.setEnableChangeSalary(oldCourseMainTeacherSalary.getEnableChangeSalary());
@@ -664,6 +666,18 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 									courseScheduleTeacherSalary.setExpectSalary(salary);
 								}
 							}
+							Integer vipGroupActivityId = practiceGroup.getVipGroupActivityId();
+							if(vipGroupActivityId != null){
+								ActivityUserMapper activityUserMapper = activityUserMapperDao.findVipUserMapper(practiceGroup.getId(),"PRACTICE");
+								if(activityUserMapper != null){
+									Map<String, BigDecimal> map = practiceGroupService.countPracticeGroupPredictFee1(practiceGroup, cgtm.getUserId());
+									if(practiceGroup.getId().equals(activityUserMapper.getPracticeGroupId())){
+										courseScheduleTeacherSalary.setExpectSalary(map.get("onlineTeacherSalary"));
+									}else {
+										courseScheduleTeacherSalary.setExpectSalary(map.get("giveTeacherDefaultSalary"));
+									}
+								}
+							}
 						} else if (type == CourseScheduleType.VIP) {
 
 						} else {
@@ -746,6 +760,10 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 						courseScheduleTeacherSalaries.add(courseScheduleTeacherSalary);
 					}
 
+					PracticeGroupSellPrice practiceGroupSellPrice = practiceGroupSellPriceDao.get(organId);
+					if(practiceGroupSellPrice == null){
+						throw new BizException("请配置网管课价格");
+					}
 					// 学生缴费记录
 					for (ClassGroupStudentMapper cgsm : classGroupStudentMapperList) {
 						CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
@@ -754,9 +772,11 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 						courseScheduleStudentPayment.setCourseScheduleId(courseSchedule.getId());
 						courseScheduleStudentPayment.setUserId(cgsm.getUserId());
 						courseScheduleStudentPayment.setExpectPrice(BigDecimal.ZERO);
+						courseScheduleStudentPayment.setActualPrice(BigDecimal.ZERO);
 						courseScheduleStudentPayment.setClassGroupId(classGroup.getId());
 						courseScheduleStudentPayment.setCreateTime(now);
 						courseScheduleStudentPayment.setUpdateTime(now);
+						courseScheduleStudentPayment.setOriginalPrice(practiceGroupSellPrice.getSingleClassMinutesPrice());
 						courseScheduleStudentPayments.add(courseScheduleStudentPayment);
 					}
 
@@ -2770,15 +2790,27 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                     courseSchedules.get(courseStartDates.size() - 1).setClassDate(courseStartTime);
                     courseSchedules.get(courseStartDates.size() - 1).setStartClassTime(courseStartTime);
                     courseSchedules.get(courseStartDates.size() - 1).setEndClassTime(courseEndTime);
-                    if (Objects.nonNull(vipGroupCourseAdjustInfo.getTeachMode())) {
+
+					Integer allowOnlineToOffline = 0;
+					if(Objects.nonNull(vipGroupActivity)){
+						allowOnlineToOffline = vipGroupActivity.getAllowOnlineToOffline();
+						ActivityUserMapper activityUserMapper = activityUserMapperDao.findVipUserMapper(vipGroup.getId(), "VIP");
+						if(activityUserMapper != null){
+							if(vipGroup.getId().equals(activityUserMapper.getGiveVipGroupId())){
+								allowOnlineToOffline = vipGroupActivity.getGiveAllowOnlineToOffline();
+							}
+						}
+					}
+
+					if (Objects.nonNull(vipGroupCourseAdjustInfo.getTeachMode())) {
                     	boolean onlineToOffline = courseSchedules.get(courseStartDates.size() - 1).getTeachMode().equals(TeachModeEnum.ONLINE)
 								&&vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.OFFLINE);
 						boolean offlineToOnline = courseSchedules.get(courseStartDates.size() - 1).getTeachMode().equals(TeachModeEnum.OFFLINE)
 								&&vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.ONLINE);
-                        if(onlineToOffline&&Objects.nonNull(vipGroupActivity)&&(vipGroupActivity.getAllowOnlineToOffline()==0||vipGroupActivity.getAllowOnlineToOffline()==3)){
+                        if(onlineToOffline && Objects.nonNull(vipGroupActivity) && (allowOnlineToOffline == 0 || allowOnlineToOffline == 3)){
                             throw new BizException("此VIP课活动不支持线上课调整为线下课");
                         }
-						if(offlineToOnline&&Objects.nonNull(vipGroupActivity)&&(vipGroupActivity.getAllowOnlineToOffline()==2||vipGroupActivity.getAllowOnlineToOffline()==3)){
+						if(offlineToOnline&&Objects.nonNull(vipGroupActivity) && (allowOnlineToOffline == 2 || allowOnlineToOffline == 3)){
 							throw new BizException("此VIP课活动不支持线下课调整为线上课");
 						}
 						if(onlineToOffline&&Objects.isNull(vipGroupCourseAdjustInfo.getSchoolId())){
@@ -2974,12 +3006,22 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					throw new BizException("课程组信息不存在");
 				}
 				VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId());
+				Integer allowOnlineToOffline = 0;
+				if(Objects.nonNull(vipGroupActivity)){
+					allowOnlineToOffline = vipGroupActivity.getAllowOnlineToOffline();
+					ActivityUserMapper activityUserMapper = activityUserMapperDao.findVipUserMapper(vipGroup.getId(), "VIP");
+					if(activityUserMapper != null){
+						if(vipGroup.getId().equals(activityUserMapper.getGiveVipGroupId())){
+							allowOnlineToOffline = vipGroupActivity.getGiveAllowOnlineToOffline();
+						}
+					}
+				}
 				boolean onlineToOffline = TeachModeEnum.ONLINE.equals(oldCourses.get(i).getTeachMode())&&TeachModeEnum.OFFLINE.equals(courseAdjustInfo.getTeachMode());
 				boolean offlineToOnline = TeachModeEnum.OFFLINE.equals(oldCourses.get(i).getTeachMode())&&TeachModeEnum.ONLINE.equals(courseAdjustInfo.getTeachMode());
-				if(onlineToOffline&&Objects.nonNull(vipGroupActivity)&&(vipGroupActivity.getAllowOnlineToOffline()==0||vipGroupActivity.getAllowOnlineToOffline()==3)){
+				if(onlineToOffline&&Objects.nonNull(vipGroupActivity)&&(allowOnlineToOffline == 0 || allowOnlineToOffline == 3)){
 					throw new BizException("此VIP课活动不支持线上课调整为线下课");
 				}
-				if(offlineToOnline&&Objects.nonNull(vipGroupActivity)&&(vipGroupActivity.getAllowOnlineToOffline()==2||vipGroupActivity.getAllowOnlineToOffline()==3)){
+				if(offlineToOnline&&Objects.nonNull(vipGroupActivity)&&(allowOnlineToOffline == 2 || allowOnlineToOffline == 3)){
 					throw new BizException("此VIP课活动不支持线下课调整为线上课");
 				}
 			}
@@ -3418,12 +3460,22 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					throw new BizException("课程组信息不存在");
 				}
 				VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId());
+				Integer allowOnlineToOffline = 0;
+				if(Objects.nonNull(vipGroupActivity)){
+					allowOnlineToOffline = vipGroupActivity.getAllowOnlineToOffline();
+					ActivityUserMapper activityUserMapper = activityUserMapperDao.findVipUserMapper(vipGroup.getId(), "VIP");
+					if(activityUserMapper != null){
+						if(vipGroup.getId().equals(activityUserMapper.getGiveVipGroupId())){
+							allowOnlineToOffline = vipGroupActivity.getGiveAllowOnlineToOffline();
+						}
+					}
+				}
 				boolean onlineToOffline = TeachModeEnum.OFFLINE.equals(newCourseSchedule.getTeachMode())&&TeachModeEnum.ONLINE.equals(oldCourseSchedule.getTeachMode());
-				if(onlineToOffline&&Objects.nonNull(vipGroupActivity)&&(vipGroupActivity.getAllowOnlineToOffline()==0||vipGroupActivity.getAllowOnlineToOffline()==3)){
+				if(onlineToOffline&&Objects.nonNull(vipGroupActivity)&&(allowOnlineToOffline==0||allowOnlineToOffline==3)){
 					throw new BizException("此VIP课活动不支持线上课调整为线下课");
 				}
 				boolean offlineToOnline = TeachModeEnum.ONLINE.equals(newCourseSchedule.getTeachMode())&&TeachModeEnum.OFFLINE.equals(oldCourseSchedule.getTeachMode());
-				if(offlineToOnline&&Objects.nonNull(vipGroupActivity)&&(vipGroupActivity.getAllowOnlineToOffline()==2||vipGroupActivity.getAllowOnlineToOffline()==3)){
+				if(offlineToOnline&&Objects.nonNull(vipGroupActivity)&&(allowOnlineToOffline==2||allowOnlineToOffline==3)){
 					throw new BizException("此VIP课活动不支持线下课调整为线上课");
 				}
 			}
@@ -3756,11 +3808,13 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 							courseScheduleTeacherSalaryService.createMusicGroupCourseTeacherSalary(null, newCourseSchedule, ts);
 						} else if (newCourseSchedule.getGroupType() == GroupType.VIP) {
 							Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupPredictFee1(vipGroup, teacherId, ts.getCourseScheduleId());
-
-							BigDecimal teacherSalary=null;
-
-							if(Objects.nonNull(salaryMap)){
-								teacherSalary=newCourseSchedule.getTeachMode() == TeachModeEnum.OFFLINE?salaryMap.get("offlineTeacherSalary"):salaryMap.get("onlineTeacherSalary");
+							BigDecimal teacherSalary = salaryMap.get("offlineTeacherSalary");
+							//是否是赠送课程
+							ActivityUserMapper activityUserMapper = activityUserMapperDao.findVipUserMapper(vipGroup.getId(),"VIP");
+							if(activityUserMapper != null){
+								if(vipGroup.getId().equals(activityUserMapper.getGiveVipGroupId())){
+									teacherSalary = salaryMap.get("giveOfflineTeacherSalary");
+								}
 							}
 
 							ts.setExpectSalary(teacherSalary);
@@ -3781,6 +3835,21 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 									throw new BizException("请设置老师 的网管课课酬");
 								}
 							}
+							PracticeGroup practiceGroup = practiceGroupDao.get(Long.parseLong(newCourseSchedule.getMusicGroupId()));
+							if(practiceGroup != null){
+								Integer vipGroupActivityId = practiceGroup.getVipGroupActivityId();
+								if(vipGroupActivityId != null){
+									ActivityUserMapper activityUserMapper = activityUserMapperDao.findVipUserMapper(practiceGroup.getId(),"PRACTICE");
+									if(activityUserMapper != null){
+										Map<String, BigDecimal> map = practiceGroupService.countPracticeGroupPredictFee1(practiceGroup, ts.getUserId());
+										if(practiceGroup.getId().equals(activityUserMapper.getPracticeGroupId())){
+											ts.setExpectSalary(map.get("onlineTeacherSalary"));
+										}else {
+											ts.setExpectSalary(map.get("giveTeacherDefaultSalary"));
+										}
+									}
+								}
+							}
 						}
 					}
 
@@ -3969,16 +4038,19 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                 if (teacherIsChange) {
                     VipGroup byCourseSchedule = vipGroupDao.findByCourseSchedule(newCourseSchedule.getId());
 
-                    BigDecimal onlineTeacherSalary = new BigDecimal(0), offlineTeacherSalary = new BigDecimal(0);
 
-					Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupPredictFee1(byCourseSchedule, newCourseSchedule.getActualTeacherId(), newCourseSchedule.getId());
-
-                    List<CourseSchedule> courseSchedules = new ArrayList<>();
+					List<CourseSchedule> courseSchedules = new ArrayList<>();
                     courseSchedules.add(newCourseSchedule);
-                    courseScheduleTeacherSalaryService.createCourseScheduleTeacherVipSalary(byCourseSchedule,
-                            courseSchedules,
-							salaryMap.get("onlineTeacherSalary"),
-							salaryMap.get("offlineTeacherSalary"));
+					Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupPredictFee1(byCourseSchedule, newCourseSchedule.getActualTeacherId(), newCourseSchedule.getId());
+					BigDecimal teacherSalary = salaryMap.get("offlineTeacherSalary");
+					//是否是赠送课程
+					ActivityUserMapper activityUserMapper = activityUserMapperDao.findVipUserMapper(byCourseSchedule.getId(),"VIP");
+					if(activityUserMapper != null){
+						if(byCourseSchedule.getId().equals(activityUserMapper.getGiveVipGroupId())){
+							teacherSalary = salaryMap.get("giveOfflineTeacherSalary");
+						}
+					}
+                    courseScheduleTeacherSalaryService.createCourseScheduleTeacherVipSalary(byCourseSchedule,courseSchedules,teacherSalary);
                     if (Objects.nonNull(oldCourseSchedule.getActualTeacherId()) && teacherIsChange) {
                         beReplaceTeacherIds.add(oldCourseSchedule.getActualTeacherId().intValue());
                     }
@@ -5051,7 +5123,25 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         courseScheduleDao.update(oldCourseSchedule);
 
         PracticeGroup practiceGroup = practiceGroupDao.get(Long.valueOf(oldCourseSchedule.getMusicGroupId()));
-
+		List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaries = teacherDefaultPracticeGroupSalaryDao.queryByUserId(teacherId);
+		if(teacherDefaultPracticeGroupSalaries == null || teacherDefaultPracticeGroupSalaries.size() == 0){
+			throw new BizException("请设置老师默认课酬");
+		}
+		BigDecimal salary = teacherDefaultPracticeGroupSalaries.get(0).getMainTeacherSalary();
+		if(practiceGroup != null){
+			Integer vipGroupActivityId = practiceGroup.getVipGroupActivityId();
+			if(vipGroupActivityId != null){
+				ActivityUserMapper activityUserMapper = activityUserMapperDao.findVipUserMapper(practiceGroup.getId(),"PRACTICE");
+				if(activityUserMapper != null){
+					Map<String, BigDecimal> map = practiceGroupService.countPracticeGroupPredictFee1(practiceGroup, teacherId);
+					if(practiceGroup.getId().equals(activityUserMapper.getPracticeGroupId())){
+						salary = map.get("onlineTeacherSalary");
+					}else {
+						salary = map.get("giveTeacherDefaultSalary");
+					}
+				}
+			}
+		}
 		List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseScheduleTeacherSalaryDao.findByCourseSchedule(courseScheduleId);
 		if(!CollectionUtils.isEmpty(courseScheduleTeacherSalaries)){
 			SysConfig practiceCourseSalaryConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
@@ -5061,11 +5151,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				if(teacherSalary.compareTo(courseScheduleTeacherSalary.getExpectSalary())==0){
 					continue;
 				}
-				List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaries = teacherDefaultPracticeGroupSalaryDao.queryByUserId(teacherId);
-				if(teacherDefaultPracticeGroupSalaries == null || teacherDefaultPracticeGroupSalaries.size() == 0){
-					throw new BizException("请设置老师默认课酬");
-				}
-				courseScheduleTeacherSalary.setExpectSalary(teacherDefaultPracticeGroupSalaries.get(0).getMainTeacherSalary());
+				courseScheduleTeacherSalary.setExpectSalary(salary);
 			}
 			courseScheduleTeacherSalaryDao.batchUpdate(courseScheduleTeacherSalaries);
 		}
@@ -5161,16 +5247,31 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					BigDecimal teacherSalary = new BigDecimal(practiceCourseSalaryConfig.getParanValue());
 					List<Long> courseIds = groupNotStartCourses.stream().map(CourseSchedule::getId).collect(Collectors.toList());
 					List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseScheduleTeacherSalaryDao.findByCourseSchedules(courseIds);
+					List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaries = teacherDefaultPracticeGroupSalaryDao.queryByUserId(teacherId);
+					if(teacherDefaultPracticeGroupSalaries == null || teacherDefaultPracticeGroupSalaries.size() == 0){
+						throw new BizException("请设置老师默认课酬");
+					}
+					BigDecimal salary = teacherDefaultPracticeGroupSalaries.get(0).getMainTeacherSalary();
+					if(practiceGroup != null){
+						Integer vipGroupActivityId = practiceGroup.getVipGroupActivityId();
+						if(vipGroupActivityId != null){
+							ActivityUserMapper activityUserMapper = activityUserMapperDao.findVipUserMapper(practiceGroup.getId(),"PRACTICE");
+							if(activityUserMapper != null){
+								Map<String, BigDecimal> map = practiceGroupService.countPracticeGroupPredictFee1(practiceGroup, teacherId);
+								if(practiceGroup.getId().equals(activityUserMapper.getPracticeGroupId())){
+									salary = map.get("onlineTeacherSalary");
+								}else {
+									salary = map.get("giveTeacherDefaultSalary");
+								}
+							}
+						}
+					}
 					for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
 						courseScheduleTeacherSalary.setUserId(teacherId);
 						if(teacherSalary.compareTo(courseScheduleTeacherSalary.getExpectSalary())==0){
 							continue;
 						}
-						List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaries = teacherDefaultPracticeGroupSalaryDao.queryByUserId(teacherId);
-						if(teacherDefaultPracticeGroupSalaries == null || teacherDefaultPracticeGroupSalaries.size() == 0){
-							throw new BizException("请设置老师默认课酬");
-						}
-						courseScheduleTeacherSalary.setExpectSalary(teacherDefaultPracticeGroupSalaries.get(0).getMainTeacherSalary());
+						courseScheduleTeacherSalary.setExpectSalary(salary);
 					}
 					courseScheduleTeacherSalaryDao.batchUpdate(courseScheduleTeacherSalaries);
 				}

+ 4 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java

@@ -35,6 +35,8 @@ import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
+import static java.math.BigDecimal.ROUND_DOWN;
+
 @Service
 public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Long, CourseScheduleStudentPayment>  implements CourseScheduleStudentPaymentService {
 
@@ -73,8 +75,6 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 	@Autowired
 	private MusicGroupStudentClassAdjustDao musicGroupStudentClassAdjustDao;
 	@Autowired
-	private SysConfigDao sysConfigDao;
-	@Autowired
 	private StudentPaymentOrderDao studentPaymentOrderDaop;
 
 	@Override
@@ -96,11 +96,7 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 		}
 
 		//获取活动信息
-		BigDecimal discount = new BigDecimal(100);
 		VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId());
-		if(vipGroupActivity != null){
-			discount = vipGroupActivity.getDiscount();
-		}
 
 		List<CourseSchedule> vipGroupCourseSchedules=courseScheduleDao.findGroupCourseSchedules(vipGroupId.toString(),GroupType.VIP.getCode());
 
@@ -109,12 +105,6 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 		}
 
 		int giveClassTimes=0;
-//        if(vipGroup.getStatus().equals(VipGroupStatusEnum.APPLYING)
-//                &&Objects.nonNull(vipGroupActivity)
-//                &&vipGroupActivity.getType().equals(VipGroupActivityTypeEnum.GIVE_CLASS)
-//                &&vipGroupCourseSchedules.size() >= Integer.parseInt(vipGroupActivity.getAttribute1())){
-//            giveClassTimes = Integer.parseInt(vipGroupActivity.getAttribute2());
-//        }
 
 		StudentPaymentOrder studentPaymentOrder = studentPaymentOrderDaop.findByStudentVipGroup(vipGroupId, userId, DealStatusEnum.SUCCESS.getCode());
 		BigDecimal couponFee = new BigDecimal(0);
@@ -140,13 +130,13 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 				if (teachModeEnum == TeachModeEnum.ONLINE) {
 					//学生线上单节课应缴费计算
 					courseScheduleStudentPayment.setExpectPrice(
-							vipGroup.getOnlineClassesUnitPrice().multiply(discount)
+							vipGroup.getOnlineClassesUnitPrice().multiply(vipGroupActivity.getDiscount())
 									.divide(new BigDecimal(100), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP)
 									.subtract(couponFee));
 				}else{
 					//学生线下单节课应缴费计算
 					courseScheduleStudentPayment.setExpectPrice(
-							vipGroup.getOfflineClassesUnitPrice().multiply(discount)
+							vipGroup.getOfflineClassesUnitPrice().multiply(vipGroupActivity.getDiscount())
 									.divide(new BigDecimal(100), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP)
 									.subtract(couponFee));
 				}

+ 49 - 36
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -49,7 +49,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     @Autowired
     private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
     @Autowired
-    private VipGroupActivityDao vipGroupActivityDao;
+    private ActivityUserMapperDao activityUserMapperDao;
     @Autowired
     private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
     @Autowired
@@ -94,6 +94,9 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     @Autowired
     private SysConfigService sysConfigService;
     @Autowired
+    @Lazy
+    private PracticeGroupService practiceGroupService;
+    @Autowired
     private RedisTemplate redisTemplate;
 
     private static final Logger LOGGER = LoggerFactory
@@ -107,14 +110,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     @Override
     public void createCourseScheduleTeacherVipSalary(VipGroup vipGroup,
                                                      List<CourseSchedule> vipCourseSchedules,
-                                                     BigDecimal onlineTeacherSalary,
                                                      BigDecimal offlineTeacherSalary) {
-        //获取活动信息
-        VipGroupActivity vipGroupActivity = null;
-        if(vipGroup.getVipGroupActivityId() != null){
-            vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue());
-        }
-
         List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = new ArrayList<>();
         Map<TeachModeEnum, List<CourseSchedule>> courseScheduleGroupByTeachMode = vipCourseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getTeachMode));
 
@@ -134,13 +130,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 courseScheduleTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP);
                 courseScheduleTeacherSalary.setUserId(courseSchedules.get(i).getActualTeacherId().intValue());
                 courseScheduleTeacherSalary.setClassGroupId(courseSchedules.get(i).getClassGroupId());
-//                courseScheduleTeacherSalary.setSubsidy(subsidy);
-
-                if (teachModeEnum == TeachModeEnum.ONLINE) {
-                    courseScheduleTeacherSalary.setExpectSalary(onlineTeacherSalary);
-                } else {
-                    courseScheduleTeacherSalary.setExpectSalary(offlineTeacherSalary);
-                }
+                courseScheduleTeacherSalary.setExpectSalary(offlineTeacherSalary);
                 courseScheduleTeacherSalary.setActualSalary(null);
                 if (Objects.isNull(courseScheduleTeacherSalary.getId())) {
                     courseScheduleTeacherSalaries.add(courseScheduleTeacherSalary);
@@ -936,33 +926,25 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     public void updateVipGroupCourseTeacherSalary(Integer vipGroupId, Integer oldTeacherId) {
         VipGroup vipGroup = vipGroupService.get(vipGroupId.longValue());
-
-        BigDecimal onlineTeacherSalary=BigDecimal.ZERO,
-                offlineTeacherSalary=BigDecimal.ZERO;
+        BigDecimal offlineTeacherSalary=BigDecimal.ZERO;
 
         List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseScheduleTeacherSalaryDao.findByGroupWithNotStart(vipGroupId.toString(), GroupType.VIP.getCode());
         if(!CollectionUtils.isEmpty(courseScheduleTeacherSalaries)){
-            List<Long> courseIds = courseScheduleTeacherSalaries.stream().map(CourseScheduleTeacherSalary::getCourseScheduleId).collect(Collectors.toList());
-            List<Map<Integer, String>> teachModeById = courseScheduleDao.getTeachModeById(courseIds);
-            Map<Integer, String> coureTeachModeMap = MapUtil.convertIntegerMap(teachModeById);
+            //是否是赠送课程
+            ActivityUserMapper activityUserMapper = activityUserMapperDao.findVipUserMapper(vipGroup.getId(),"VIP");
+            Map<String, BigDecimal> salary = vipGroupService.countVipGroupPredictFee1(vipGroup, vipGroup.getUserId(), null);
             for(int i=0;i<courseScheduleTeacherSalaries.size();i++){
                 if(!courseScheduleTeacherSalaries.get(i).getEnableChangeSalary()){
                     continue;
                 }
-                String courseType = coureTeachModeMap.get(courseScheduleTeacherSalaries.get(i).getCourseScheduleId());
-
-                Map<String, BigDecimal> salary = vipGroupService.countVipGroupPredictFee1(vipGroup, vipGroup.getUserId(), courseScheduleTeacherSalaries.get(i).getCourseScheduleId());
-
-                if(Objects.nonNull(salary)){
-                    onlineTeacherSalary=salary.get("onlineTeacherSalary");
-                    offlineTeacherSalary=salary.get("offlineTeacherSalary");
-                }
+                offlineTeacherSalary = salary.get("offlineTeacherSalary");
 
-                if(courseType.equals(TeachModeEnum.ONLINE.getCode())){
-                    courseScheduleTeacherSalaries.get(i).setExpectSalary(onlineTeacherSalary);
-                }else if(courseType.equals(TeachModeEnum.OFFLINE.getCode())){
-                    courseScheduleTeacherSalaries.get(i).setExpectSalary(offlineTeacherSalary);
+                if(activityUserMapper != null){
+                    if(vipGroup.getId().equals(activityUserMapper.getGiveVipGroupId())){
+                        offlineTeacherSalary = salary.get("giveOfflineTeacherSalary");
+                    }
                 }
+                courseScheduleTeacherSalaries.get(i).setExpectSalary(offlineTeacherSalary);
             }
             courseScheduleTeacherSalaryDao.batchUpdateTeacherExpectSalarys(courseScheduleTeacherSalaries);
         }
@@ -1430,9 +1412,18 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
      */
     private void createVipGroupCourseTeacherSalaries(CourseSchedule courseSchedule, List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries){
         VipGroup vipGroup = vipGroupService.get(Long.valueOf(courseSchedule.getMusicGroupId()));
+        //是否是赠送课程
+        ActivityUserMapper activityUserMapper = activityUserMapperDao.findVipUserMapper(vipGroup.getId(),"VIP");
         for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
             Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupPredictFee1(vipGroup, courseSchedule.getActualTeacherId(), courseSchedule.getId());
-            courseScheduleTeacherSalary.setExpectSalary(courseSchedule.getTeachMode() == TeachModeEnum.OFFLINE?salaryMap.get("offlineTeacherSalary"):salaryMap.get("onlineTeacherSalary"));
+            BigDecimal teacherSalary = salaryMap.get("offlineTeacherSalary");
+
+            if(activityUserMapper != null){
+                if(vipGroup.getId().equals(activityUserMapper.getGiveVipGroupId())){
+                    teacherSalary = salaryMap.get("giveOfflineTeacherSalary");
+                }
+            }
+            courseScheduleTeacherSalary.setExpectSalary(teacherSalary);
         }
     }
 
@@ -1447,22 +1438,44 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     private void createPracticeGroupCourseTeacherSalaries(CourseSchedule courseSchedule, List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries){
         List<Integer> teacherIds = courseScheduleTeacherSalaries.stream().map(CourseScheduleTeacherSalary::getUserId).collect(Collectors.toList());
 
+        PracticeGroup practiceGroup = null;
+        if(courseScheduleTeacherSalaries != null && courseScheduleTeacherSalaries.size() > 0){
+            String musicGroupId = courseScheduleTeacherSalaries.get(0).getMusicGroupId();
+            if(StringUtils.isNotEmpty(musicGroupId)){
+                practiceGroup = practiceGroupService.get(Long.parseLong(courseScheduleTeacherSalaries.get(0).getMusicGroupId()));
+            }
+        }
+
         SysConfig practiceCourseSalaryConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
         BigDecimal freeTeacherSalary = new BigDecimal(practiceCourseSalaryConfig.getParanValue());
 
         List<TeacherDefaultPracticeGroupSalary> allTeacherDefaultPracticeGroupSalaryList = teacherDefaultPracticeGroupSalaryDao.queryByUserIdList(teacherIds);
         Map<Integer, List<TeacherDefaultPracticeGroupSalary>> teacherSalaryMap = allTeacherDefaultPracticeGroupSalaryList.stream().collect(Collectors.groupingBy(TeacherDefaultPracticeGroupSalary::getUserId));
         for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
-            List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaryList = teacherSalaryMap.get(courseScheduleTeacherSalary.getUserId());
 
-            if(Objects.nonNull(courseScheduleTeacherSalary.getExpectSalary())&&freeTeacherSalary.compareTo(courseScheduleTeacherSalary.getExpectSalary())==0){
+            if(Objects.nonNull(courseScheduleTeacherSalary.getExpectSalary()) && freeTeacherSalary.compareTo(courseScheduleTeacherSalary.getExpectSalary()) == 0){
                 courseScheduleTeacherSalary.setExpectSalary(freeTeacherSalary);
             }else{
+                List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaryList = teacherSalaryMap.get(courseScheduleTeacherSalary.getUserId());
                 if (teacherDefaultPracticeGroupSalaryList != null && teacherDefaultPracticeGroupSalaryList.size() > 0) {
                     courseScheduleTeacherSalary.setExpectSalary(teacherDefaultPracticeGroupSalaryList.get(0).getMainTeacherSalary());
                 } else {
                     throw new BizException("请设置老师 的网管课课酬");
                 }
+                if(practiceGroup != null){
+                    Integer vipGroupActivityId = practiceGroup.getVipGroupActivityId();
+                    if(vipGroupActivityId != null){
+                        ActivityUserMapper activityUserMapper = activityUserMapperDao.findVipUserMapper(practiceGroup.getId(),"PRACTICE");
+                        if(activityUserMapper != null){
+                            Map<String, BigDecimal> map = practiceGroupService.countPracticeGroupPredictFee1(practiceGroup, courseScheduleTeacherSalary.getUserId());
+                            if(practiceGroup.getId().equals(activityUserMapper.getPracticeGroupId())){
+                                courseScheduleTeacherSalary.setExpectSalary(map.get("onlineTeacherSalary"));
+                            }else {
+                                courseScheduleTeacherSalary.setExpectSalary(map.get("giveTeacherDefaultSalary"));
+                            }
+                        }
+                    }
+                }
             }
         }
     }

+ 173 - 88
mec-biz/src/main/java/com/ym/mec/biz/service/impl/GroupClassServiceImpl.java

@@ -19,6 +19,7 @@ import org.springframework.util.CollectionUtils;
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
@@ -74,7 +75,7 @@ public class GroupClassServiceImpl implements GroupClassService {
     @Autowired
     private VipGroupCategoryDao vipGroupCategoryDao;
     @Autowired
-    private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
+    private VipGroupService vipGroupService;
     @Autowired
     private ImGroupMemberService imGroupMemberService;
     @Autowired
@@ -150,7 +151,7 @@ public class GroupClassServiceImpl implements GroupClassService {
     @Override
     @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     public HttpResponseResult cancelGroup(ReturnFeeDto returnFeeDto) {
-        Long groupId = returnFeeDto.getVipGroupId();
+        Long groupId = returnFeeDto.getGroupId();
         if (Objects.isNull(groupId)) {
             throw new BizException("请指定课程组");
         }
@@ -160,28 +161,29 @@ public class GroupClassServiceImpl implements GroupClassService {
         }
         Date now = new Date();
         if (groupType.equals(GroupType.PRACTICE)) {
-            BigDecimal refundAmount = returnFeeDto.getAmount();
+//            BigDecimal refundAmount = returnFeeDto.getAmount();
             PracticeGroup practiceGroup = practiceGroupDao.get(groupId);
             if (Objects.isNull(practiceGroup)) {
                 throw new BizException("指定的课程组不存在");
             }
-            List<StudentPaymentOrder> orders = studentPaymentOrderDao.findOrderByGroup(practiceGroup.getId().toString(), GroupType.PRACTICE, DealStatusEnum.SUCCESS);
-            if (CollectionUtils.isEmpty(orders) && Objects.nonNull(refundAmount)) {
-                throw new BizException("未获取到订单");
-            }
+//            List<StudentPaymentOrder> orders = studentPaymentOrderDao.findOrderByGroup(practiceGroup.getId().toString(), GroupType.PRACTICE, DealStatusEnum.SUCCESS);
+//            if (CollectionUtils.isEmpty(orders)) {
+//                throw new BizException("未获取到订单");
+//            }
             if (!practiceGroup.getGroupStatus().equals(GroupStatusEnum.NORMAL) || practiceGroup.getCoursesExpireDate().before(now)) {
                 throw new BizException("当前课程组不可关闭");
             }
-            HttpResponseResult result = quitActivityGive(practiceGroup.getActivityUserMapperId(), returnFeeDto.getConfirmReturnActivityGive(), practiceGroup.getStudentId());
+            ActivityUserMapper activityUserMapper = activityUserMapperDao.findVipUserMapper(practiceGroup.getId(),"PRACTICE");
+            HttpResponseResult result = quitActivityGive(activityUserMapper, returnFeeDto.getConfirmReturnActivityGive(), practiceGroup.getId(),GroupType.PRACTICE);
             if(result.getCode() != 200){
                 return result;
             }
-            if (Objects.nonNull(refundAmount) && refundAmount.compareTo(BigDecimal.ZERO) > 0) {
-                if (refundAmount.compareTo(orders.get(0).getExpectAmount()) > 0) {
-                    throw new BizException("退款不可大于购买金额");
-                }
-                sysUserCashAccountService.updateBalance(practiceGroup.getStudentId(), refundAmount, PlatformCashAccountDetailTypeEnum.REFUNDS, "后台关闭网管课");
-            }
+//            if (Objects.nonNull(refundAmount) && refundAmount.compareTo(BigDecimal.ZERO) > 0) {
+//                if (refundAmount.compareTo(orders.get(0).getExpectAmount()) > 0) {
+//                    throw new BizException("退款不可大于购买金额");
+//                }
+//                sysUserCashAccountService.updateBalance(practiceGroup.getStudentId(), refundAmount, PlatformCashAccountDetailTypeEnum.REFUNDS, "后台关闭网管课");
+//            }
             cleanGroupInfo(groupId.toString(), GroupType.PRACTICE);
             practiceGroup.setMemo("后台关闭网管课");
             practiceGroup.setGroupStatus(GroupStatusEnum.CANCEL);
@@ -214,93 +216,176 @@ public class GroupClassServiceImpl implements GroupClassService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public HttpResponseResult quitActivityGive(Integer activityUserMapperId,Boolean confirmReturnActivityGive,Integer studentId){
-        if(activityUserMapperId != null){
-            ActivityUserMapper activityUserMapper = activityUserMapperDao.get(activityUserMapperId);
-            if(activityUserMapper != null){
-                if(activityUserMapper.getReturnFee()){
-                    throw new BizException("当前课程组无法退费,请联系管理员");
+    public HttpResponseResult quitActivityGive(ActivityUserMapper activityUserMapper, boolean confirmReturnActivityGive,Long groupId,GroupType groupType){
+        if(activityUserMapper != null){
+            if(activityUserMapper.getReturnFee()){
+                return BaseController.succeed();
+            }
+            VipGroupActivity activity = vipGroupActivityDao.get(activityUserMapper.getActivityId());
+            Boolean masterGroup;
+            if(groupType == GroupType.VIP){
+                //付费vip课
+                if(groupId.equals(activityUserMapper.getVipGroupId())){
+                    masterGroup = true;
+                }else {
+                    masterGroup = false;
                 }
-                if(!confirmReturnActivityGive && activityUserMapper.getGiveMemberFlag() != 0 && activityUserMapper.getGiveVipFlag() != 0 && activityUserMapper.getGivePracticeFlag() != 0){
-                    return BaseController.failed(HttpStatus.PARTIAL_CONTENT,"当前课程组为活动购买,退费会退还活动相关所有赠送,是否继续退费?");
+            }else {
+                //付费网管课
+                if(groupId.equals(activityUserMapper.getPracticeGroupId())){
+                    masterGroup = true;
+                }else {
+                    masterGroup = false;
                 }
-                Date now = new Date();
-                if(activityUserMapper.getGiveMemberFlag() == 2){
-                    VipGroupActivity activity = vipGroupActivityDao.get(activityUserMapper.getActivityId());
-                    //只退还赠送的时间
-                    Integer giveMemberTime = activity.getGiveMemberTime();
-                    PeriodEnum givePeriodEnum = activity.getGivePeriodEnum();
-                    switch (givePeriodEnum){
-                        case DAY:
-                            break;
-                        case MONTH:
-                            giveMemberTime = giveMemberTime * 30;
-                            break;
-                        case QUARTERLY:
-                            giveMemberTime = giveMemberTime * 30 * 3;
-                            break;
-                        case YEAR_HALF:
-                            giveMemberTime = giveMemberTime * 30 * 6;
-                            break;
-                        case YEAR:
-                            giveMemberTime = giveMemberTime * 30 * 12;
-                            break;
-                        default:
-                            throw new BizException("错误的会员周期类型");
+            }
+            if(!confirmReturnActivityGive){
+                if(masterGroup){
+                    if(activityUserMapper.getGiveMemberFlag() != 0){
+                        String format = String.format("该课程组通过 %s 创建,含赠送会员,确认退学(关闭)后将扣减学员%s%s会员使用期限", activity.getName(), activity.getGiveMemberTime(), activity.getGivePeriodEnum().getMsg());
+                        return BaseController.failed(HttpStatus.PARTIAL_CONTENT,format);
                     }
-                    Student student = studentDao.get(studentId);
-                    Date membershipEndTime = student.getMembershipEndTime();
-                    if(membershipEndTime.compareTo(now) > 0){
-                        membershipEndTime = DateUtil.addDays(membershipEndTime, -giveMemberTime);
-                        student.setMembershipEndTime(membershipEndTime);
-                        if(membershipEndTime.compareTo(now) < 0){
-                            student.setMemberRankSettingId(null);
-                            student.setExperienceMemberRankSettingId(null);
-                        }
-                        student.setUpdateTime(now);
-                        studentDao.updateStudentMember(student);
+                    if(activityUserMapper.getGiveVipFlag() == 1 || activityUserMapper.getGivePracticeFlag() == 1){
+                        String format = String.format("该课程组通过 %s 创建,学员赠课尚未排课,赠课排课资格将清除", activity.getName());
+                        return BaseController.failed(HttpStatus.PARTIAL_CONTENT,format);
+                    }
+                    if(activityUserMapper.getGiveVipFlag() == 2){
+                        VipGroup vipGroup = vipGroupDao.get(activityUserMapper.getGiveVipGroupId());
+                        String format = String.format("该课程组通过 %s 创建,含赠课课程组%s %s,确认退学(关闭)后赠课课程组也将退学", activity.getName(),vipGroup.getId(),vipGroup.getName());
+                        return BaseController.failed(HttpStatus.PARTIAL_CONTENT,format);
+                    }
+                    if(activityUserMapper.getGivePracticeFlag() == 2){
+                        PracticeGroup practiceGroup = practiceGroupDao.get(activityUserMapper.getGivePracticeGroupId());
+                        String format = String.format("该课程组通过 %s 创建,含赠课课程组%s %s,确认退学(关闭)后赠课课程组也将退学", activity.getName(),practiceGroup.getId(),practiceGroup.getName());
+                        return BaseController.failed(HttpStatus.PARTIAL_CONTENT,format);
+                    }
+                }else {
+                    if(activityUserMapper.getMemberFlag() != 0){
+                        String format = String.format("该课程组通过 %s 赠送创建,含付费会员,确认退学(关闭)后将扣减学员%s%s会员使用期限", activity.getName(), activity.getGiveMemberTime(), activity.getGivePeriodEnum().getMsg());
+                        return BaseController.failed(HttpStatus.PARTIAL_CONTENT,format);
+                    }
+                    if(activityUserMapper.getVipFlag() == 1 || activityUserMapper.getPracticeFlag() == 1){
+                        String format = String.format("该课程组通过 %s 赠送创建,学员付费课尚未排课,付费课排课资格将清除", activity.getName());
+                        return BaseController.failed(HttpStatus.PARTIAL_CONTENT,format);
+                    }
+                    if(activityUserMapper.getVipFlag() == 2){
+                        VipGroup vipGroup = vipGroupDao.get(activityUserMapper.getVipGroupId());
+                        String format = String.format("该课程组通过 %s 赠送创建,含付费课课程组%s %s,确认退学(关闭)后付费课课程组也将退学", activity.getName(),vipGroup.getId(),vipGroup.getName());
+                        return BaseController.failed(HttpStatus.PARTIAL_CONTENT,format);
+                    }
+                    if(activityUserMapper.getPracticeFlag() == 2){
+                        PracticeGroup practiceGroup = practiceGroupDao.get(activityUserMapper.getPracticeGroupId());
+                        String format = String.format("该课程组通过 %s 赠送创建,含付费课课程组%s %s,确认退学(关闭)后付费课课程组也将退学", activity.getName(),practiceGroup.getId(),practiceGroup.getName());
+                        return BaseController.failed(HttpStatus.PARTIAL_CONTENT,format);
+                    }
+                }
+            }
+            Integer studentId = activityUserMapper.getUserId();
+            activityUserMapper.setReturnFee(true);
+            Date now = new Date();
+            if(activityUserMapper.getGiveMemberFlag() == 2 || activityUserMapper.getMemberFlag() == 2 ){
+                //只退还赠送的时间
+                Integer giveMemberTime = activity.getGiveMemberTime();
+                PeriodEnum givePeriodEnum = activity.getGivePeriodEnum();
+                Long giveMemberOrderId = activityUserMapper.getGiveMemberOrderId();
+                if(activityUserMapper.getMemberFlag() == 2){
+                    giveMemberTime = activity.getMemberTime();
+                    givePeriodEnum = activity.getPeriodEnum();
+                    giveMemberOrderId = activityUserMapper.getMemberOrderId();
+                }
+                switch (givePeriodEnum){
+                    case DAY:
+                        break;
+                    case MONTH:
+                        giveMemberTime = giveMemberTime * 30;
+                        break;
+                    case QUARTERLY:
+                        giveMemberTime = giveMemberTime * 30 * 3;
+                        break;
+                    case YEAR_HALF:
+                        giveMemberTime = giveMemberTime * 30 * 6;
+                        break;
+                    case YEAR:
+                        giveMemberTime = giveMemberTime * 30 * 12;
+                        break;
+                    default:
+                        throw new BizException("错误的会员周期类型");
+                }
+                Student student = studentDao.get(studentId);
+                Date membershipEndTime = student.getMembershipEndTime();
+                if(membershipEndTime.compareTo(now) > 0){
+                    membershipEndTime = DateUtil.addDays(membershipEndTime, -giveMemberTime);
+                    student.setMembershipEndTime(membershipEndTime);
+                    if(membershipEndTime.compareTo(now) < 0){
+                        student.setMemberRankSettingId(null);
+                        student.setExperienceMemberRankSettingId(null);
                     }
-                    CloudTeacherOrder cloudTeacherOrder = cloudTeacherOrderDao.get(activityUserMapper.getGiveMemberOrderId());
-                    cloudTeacherOrder.setStatus(3);
-                    cloudTeacherOrder.setRemark("退还活动赠送");
-                    cloudTeacherOrderDao.update(cloudTeacherOrder);
+                    student.setUpdateTime(now);
+                    studentDao.updateStudentMember(student);
                 }
-                if(activityUserMapper.getGiveVipFlag() == 2){
-                    Long giveVipGroupId = activityUserMapper.getGiveVipGroupId();
-                    VipGroup giveVipGroup = vipGroupDao.get(giveVipGroupId);
-                    ClassGroupStudentMapper giveClassGroupStudentMapper = classGroupStudentMapperDao.query(giveVipGroupId.intValue(),studentId);
-                    giveClassGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.QUIT);
-                    classGroupStudentMapperDao.update(giveClassGroupStudentMapper);
+                CloudTeacherOrder cloudTeacherOrder = cloudTeacherOrderDao.get(giveMemberOrderId);
+                cloudTeacherOrder.setStatus(3);
+                cloudTeacherOrder.setRemark("退还活动关联会员时长");
+                cloudTeacherOrderDao.update(cloudTeacherOrder);
+            }
+            if((masterGroup && activityUserMapper.getGiveVipFlag() == 2) || (!masterGroup && activityUserMapper.getVipFlag() == 2)){
+                Long giveVipGroupId = activityUserMapper.getGiveVipGroupId();
+                if(!masterGroup){
+                    giveVipGroupId = activityUserMapper.getVipGroupId();
+                }
+                VipGroup giveVipGroup = vipGroupDao.get(giveVipGroupId);
+                ClassGroup giveClassGroup = classGroupDao.findByVipGroup(giveVipGroupId, null);
+                ClassGroupStudentMapper giveClassGroupStudentMapper = classGroupStudentMapperDao.findClassGroupStudent(giveClassGroup.getId(),studentId);
+                giveClassGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.QUIT);
+                classGroupStudentMapperDao.update(giveClassGroupStudentMapper);
 
-                    courseScheduleService.batchDeleteMusicGroupCourseWithStudent(giveVipGroupId.toString(),studentId,GroupType.VIP);
+                courseScheduleService.batchDeleteMusicGroupCourseWithStudent(giveVipGroupId.toString(),studentId,GroupType.VIP);
 
-                    ClassGroup giveClassGroup = classGroupDao.findByVipGroup(giveVipGroupId, null);
-                    List<Integer> studentPaymentIds = courseScheduleStudentPaymentDao.findNotStartCourseStudentPaymentIdsWithClassGroupAndStudent(giveClassGroup.getId(), studentId);
-                    if(!CollectionUtils.isEmpty(studentPaymentIds)){
-                        courseScheduleStudentPaymentDao.batchDeleteWithID(studentPaymentIds);
-                    }
-                    VipGroupCategory giveVipGroupCategory = vipGroupCategoryDao.get(giveVipGroup.getVipGroupCategoryId());
+                List<Integer> studentPaymentIds = courseScheduleStudentPaymentDao.findNotStartCourseStudentPaymentIdsWithClassGroupAndStudent(giveClassGroup.getId(), studentId);
+                if(!CollectionUtils.isEmpty(studentPaymentIds)){
+                    courseScheduleStudentPaymentDao.batchDeleteWithID(studentPaymentIds);
+                }
+                VipGroupCategory giveVipGroupCategory = vipGroupCategoryDao.get(giveVipGroup.getVipGroupCategoryId());
+
+                if(!giveVipGroup.getStatus().equals(VipGroupStatusEnum.APPLYING) || (Objects.nonNull(giveVipGroupCategory) && giveVipGroupCategory.getMusicTheory())){
+                    BigDecimal offlineTeacherSalary=BigDecimal.ZERO;
 
-                    if(!giveVipGroup.getStatus().equals(VipGroupStatusEnum.APPLYING) || (Objects.nonNull(giveVipGroupCategory) && giveVipGroupCategory.getMusicTheory())){
-                        courseScheduleTeacherSalaryService.updateVipGroupCourseTeacherSalary(giveVipGroupId.intValue(), giveVipGroup.getUserId());
+                    List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseScheduleTeacherSalaryDao.findByGroupWithNotStart(giveVipGroupId.toString(), GroupType.VIP.getCode());
+                    if(!CollectionUtils.isEmpty(courseScheduleTeacherSalaries)){
+                        for(int i=0;i<courseScheduleTeacherSalaries.size();i++){
+                            if(!courseScheduleTeacherSalaries.get(i).getEnableChangeSalary()){
+                                continue;
+                            }
+                            Map<String, BigDecimal> salary = vipGroupService.countVipGroupPredictFee1(giveVipGroup, giveVipGroup.getUserId(), courseScheduleTeacherSalaries.get(i).getCourseScheduleId());
+                            if(!masterGroup){
+                                offlineTeacherSalary = salary.get("offlineTeacherSalary");
+                            }else {
+                                offlineTeacherSalary = salary.get("giveOfflineTeacherSalary");
+                            }
+                            courseScheduleTeacherSalaries.get(i).setExpectSalary(offlineTeacherSalary);
+                        }
+                        courseScheduleTeacherSalaryDao.batchUpdateTeacherExpectSalarys(courseScheduleTeacherSalaries);
                     }
+                }
 
-                    giveClassGroup.setStudentNum(giveClassGroup.getStudentNum() - 1);
-                    classGroupDao.update(giveClassGroup);
+                giveClassGroup.setStudentNum(giveClassGroup.getStudentNum() - 1);
+                classGroupDao.update(giveClassGroup);
 
-                    //学员退出班级群
-                    imGroupMemberService.quit(giveClassGroup.getId().longValue(), studentId);
-                }
-                if(activityUserMapper.getGivePracticeFlag() == 2){
-                    Long givePracticeGroupId = activityUserMapper.getGivePracticeGroupId();
-                    PracticeGroup practiceGroup = practiceGroupService.get(givePracticeGroupId);
-                    cleanGroupInfo(givePracticeGroupId.toString(), GroupType.PRACTICE);
-                    practiceGroup.setMemo("关闭活动赠送网管课");
-                    practiceGroup.setGroupStatus(GroupStatusEnum.CANCEL);
-                    practiceGroup.setUpdateTime(now);
-                    practiceGroupService.update(practiceGroup);
+                //学员退出班级群
+                imGroupMemberService.quit(giveClassGroup.getId().longValue(), studentId);
+            }
+            if((masterGroup && activityUserMapper.getGivePracticeFlag() == 2) || (!masterGroup && activityUserMapper.getPracticeFlag() == 2)){
+                Long givePracticeGroupId = activityUserMapper.getGivePracticeGroupId();
+                if(!masterGroup){
+                    givePracticeGroupId = activityUserMapper.getPracticeGroupId();
                 }
+                PracticeGroup practiceGroup = practiceGroupService.get(givePracticeGroupId);
+                cleanGroupInfo(givePracticeGroupId.toString(), GroupType.PRACTICE);
+                practiceGroup.setMemo("关闭活动关联网管课");
+                practiceGroup.setGroupStatus(GroupStatusEnum.CANCEL);
+                practiceGroup.setUpdateTime(now);
+                practiceGroupService.update(practiceGroup);
             }
+            activityUserMapperDao.update(activityUserMapper);
         }
         return BaseController.succeed();
     }

+ 82 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -4,7 +4,14 @@ import static com.ym.mec.biz.dal.entity.ApprovalStatus.PROCESSING;
 import static com.ym.mec.biz.dal.enums.DealStatusEnum.CLOSE;
 import static com.ym.mec.biz.dal.enums.DealStatusEnum.ING;
 import static com.ym.mec.biz.dal.enums.DealStatusEnum.SUCCESS;
-import static com.ym.mec.biz.dal.enums.OrderDetailTypeEnum.*;
+import static com.ym.mec.biz.dal.enums.OrderDetailTypeEnum.ACCESSORIES;
+import static com.ym.mec.biz.dal.enums.OrderDetailTypeEnum.CLOUD_TEACHER;
+import static com.ym.mec.biz.dal.enums.OrderDetailTypeEnum.CLOUD_TEACHER_PLUS;
+import static com.ym.mec.biz.dal.enums.OrderDetailTypeEnum.DEGREE_REGISTRATION;
+import static com.ym.mec.biz.dal.enums.OrderDetailTypeEnum.MAINTENANCE;
+import static com.ym.mec.biz.dal.enums.OrderDetailTypeEnum.MUSICAL;
+import static com.ym.mec.biz.dal.enums.OrderDetailTypeEnum.OTHER;
+import static com.ym.mec.biz.dal.enums.OrderDetailTypeEnum.TEACHING;
 import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.YES;
 
 import java.io.IOException;
@@ -22,8 +29,6 @@ import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
 
-import com.ym.mec.biz.dal.dto.*;
-import com.ym.mec.biz.service.*;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -45,6 +50,7 @@ import com.ym.mec.biz.dal.dao.CooperationOrganDao;
 import com.ym.mec.biz.dal.dao.CourseScheduleDao;
 import com.ym.mec.biz.dal.dao.CourseScheduleTeacherSalaryDao;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.dao.GoodsDao;
 import com.ym.mec.biz.dal.dao.MusicGroupBuildLogDao;
 import com.ym.mec.biz.dal.dao.MusicGroupDao;
 import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderCourseSettingsDao;
@@ -77,6 +83,19 @@ import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
 import com.ym.mec.biz.dal.dao.TeacherAttendanceDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dto.BasicUserDto;
+import com.ym.mec.biz.dal.dto.CloseMusicGroupDto;
+import com.ym.mec.biz.dal.dto.CourseScheduleTeachersDto;
+import com.ym.mec.biz.dal.dto.HighClassGroupDto;
+import com.ym.mec.biz.dal.dto.MusicCardDto;
+import com.ym.mec.biz.dal.dto.MusicGroupBasicDto;
+import com.ym.mec.biz.dal.dto.RegisterPayDto;
+import com.ym.mec.biz.dal.dto.RenewParamDto;
+import com.ym.mec.biz.dal.dto.SporadicPayDto;
+import com.ym.mec.biz.dal.dto.StudentApplyInstrumentDto;
+import com.ym.mec.biz.dal.dto.SubFeeSettingDto;
+import com.ym.mec.biz.dal.dto.SubjectRegisterDto;
+import com.ym.mec.biz.dal.dto.UpdateExpectedNumDto;
 import com.ym.mec.biz.dal.entity.ApprovalStatus;
 import com.ym.mec.biz.dal.entity.ChargeType;
 import com.ym.mec.biz.dal.entity.ClassGroup;
@@ -84,6 +103,7 @@ import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
 import com.ym.mec.biz.dal.entity.CooperationOrgan;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
+import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.entity.ImGroup;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.MusicGroupBuildLog;
@@ -97,10 +117,10 @@ import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderStudentDetail;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentStudentCourseDetail;
 import com.ym.mec.biz.dal.entity.MusicGroupPurchaseList;
 import com.ym.mec.biz.dal.entity.MusicGroupQuit;
+import com.ym.mec.biz.dal.entity.MusicGroupReturnFeeDto;
 import com.ym.mec.biz.dal.entity.MusicGroupSchoolTermCourseDetail;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
-import com.ym.mec.biz.dal.entity.MusicGroupReturnFeeDto;
 import com.ym.mec.biz.dal.entity.MusicGroupSubjectGoodsGroup;
 import com.ym.mec.biz.dal.entity.MusicGroupSubjectPlan;
 import com.ym.mec.biz.dal.entity.MusicMemberDto;
@@ -143,6 +163,30 @@ import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.MusicGroupQueryInfo;
 import com.ym.mec.biz.dal.page.MusicMemberQueryInfo;
 import com.ym.mec.biz.event.source.GroupEventSource;
+import com.ym.mec.biz.service.ClassGroupService;
+import com.ym.mec.biz.service.ClassGroupStudentMapperService;
+import com.ym.mec.biz.service.CloudTeacherOrderService;
+import com.ym.mec.biz.service.ContractService;
+import com.ym.mec.biz.service.CourseScheduleStudentPaymentService;
+import com.ym.mec.biz.service.GoodsService;
+import com.ym.mec.biz.service.ImGroupMemberService;
+import com.ym.mec.biz.service.ImGroupService;
+import com.ym.mec.biz.service.ImUserFriendService;
+import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
+import com.ym.mec.biz.service.MusicGroupService;
+import com.ym.mec.biz.service.MusicGroupSubjectGoodsGroupService;
+import com.ym.mec.biz.service.MusicGroupSubjectPlanService;
+import com.ym.mec.biz.service.PayService;
+import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
+import com.ym.mec.biz.service.StudentPaymentRouteOrderService;
+import com.ym.mec.biz.service.StudentRegistrationService;
+import com.ym.mec.biz.service.StudentService;
+import com.ym.mec.biz.service.SysConfigService;
+import com.ym.mec.biz.service.SysCouponCodeService;
+import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.biz.service.SysUserCashAccountDetailService;
+import com.ym.mec.biz.service.SysUserCashAccountService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.entity.ImGroupMember;
@@ -293,6 +337,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Autowired
     private SubjectDao subjectDao;
     @Autowired
+    private GoodsDao goodsDao;
+    @Autowired
     private SysUserCashAccountDao sysUserCashAccountDao;
     @Autowired
     private ContractService contractService;
@@ -811,7 +857,18 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             		continue;
             	}
             }
-            orderAmount = orderAmount.add(goodsGroup.getPrice());
+            
+            if(musicGroup.getOrganId() == 55 && (registerPayDto.getNewCourse() == null || registerPayDto.getNewCourse().size() == 0) && !(registerPayDto.getBuyCloudTeacher() || registerPayDto.getBuyCloudTeacherPlus())){
+            	//取商品零售价
+                if (StringUtils.isNotBlank(goodsGroup.getGoodsIdList())) {
+                	List<Goods> goodsList = goodsDao.findGoodsByIds(goodsGroup.getGoodsIdList());
+                	for(Goods goods : goodsList){
+                		orderAmount = orderAmount.add(goods.getMarketPrice());
+                	}
+                }
+            }else{
+            	orderAmount = orderAmount.add(goodsGroup.getPrice());
+            }
         }
         orderAmount = orderAmount.subtract(remitFee);
 
@@ -1081,7 +1138,18 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             		continue;
             	}
             }
-            orderAmount = orderAmount.add(goodsGroup.getPrice());
+            
+            if(musicGroup.getOrganId() == 55 && (registerPayDto.getNewCourse() == null || registerPayDto.getNewCourse().size() == 0) && !(registerPayDto.getBuyCloudTeacher() || registerPayDto.getBuyCloudTeacherPlus())){
+            	//取商品零售价
+                if (StringUtils.isNotBlank(goodsGroup.getGoodsIdList())) {
+                	List<Goods> goodsList = goodsDao.findGoodsByIds(goodsGroup.getGoodsIdList());
+                	for(Goods goods : goodsList){
+                		orderAmount = orderAmount.add(goods.getMarketPrice());
+                	}
+                }
+            }else{
+            	orderAmount = orderAmount.add(goodsGroup.getPrice());
+            }
         }
 
         //新课程形态
@@ -2270,7 +2338,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.QUIT, new ArrayList<>(Arrays.asList(userId)));
 
             }
-            if (returnFeeDto.getIsReturnMemberFee()){
+            /*if (returnFeeDto.getIsReturnMemberFee()){
                 if(musicGroup.getCourseViewType() != CourseViewTypeEnum.MEMBER_FEE){
                     throw new BizException("非会员乐团不允许退云教练");
                 }
@@ -2324,7 +2392,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             } else {
                 //删除乐团会员时长
                 studentRegistrationDao.cleanMusicMember(userId,musicGroupId);
-            }
+            }*/
 
             if (returnFeeDto.getIsReturnCourseFee()) {
                 // 退课程费用
@@ -2423,8 +2491,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
             if (amount.doubleValue() > 0) {
                 // 增加交易流水
-                sysUserCashAccountDetailService.addCashAccountDetail(userId, amount, SysUserCashAccountDetailService.MUSIC_GROUP + musicGroupId, "",
-                        PlatformCashAccountDetailTypeEnum.REFUNDS, null, SUCCESS, "退出乐团", null);
+//                sysUserCashAccountDetailService.addCashAccountDetail(userId, amount, SysUserCashAccountDetailService.MUSIC_GROUP + musicGroupId, "",
+//                        PlatformCashAccountDetailTypeEnum.REFUNDS, null, SUCCESS, "退出乐团", null);
             }
         }
         return true;
@@ -2605,7 +2673,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             //统计变更学员数
             groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.QUIT, new ArrayList<>(Arrays.asList(userId)));
         }
-
+/*
         if (isRefundMemberFee){
             if(musicGroup.getCourseViewType() != CourseViewTypeEnum.MEMBER_FEE){
                 throw new BizException("非会员乐团不允许退云教练");
@@ -2660,7 +2728,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }else {
             //删除乐团会员时长
             studentRegistrationDao.cleanMusicMember(userId,musicGroupId);
-        }
+        }*/
 
         if (isRefundCourseFee) {
             // 退课程费用
@@ -2737,8 +2805,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         if (amount.doubleValue() > 0) {
             // 增加交易流水
-            sysUserCashAccountDetailService.addCashAccountDetail(userId, amount, SysUserCashAccountDetailService.MUSIC_GROUP + musicGroupId, "",
-                    PlatformCashAccountDetailTypeEnum.REFUNDS, null, SUCCESS, "退出乐团", null);
+//            sysUserCashAccountDetailService.addCashAccountDetail(userId, amount, SysUserCashAccountDetailService.MUSIC_GROUP + musicGroupId, "",
+//                    PlatformCashAccountDetailTypeEnum.REFUNDS, null, SUCCESS, "退出乐团", null);
         }
 
         return true;

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

@@ -42,8 +42,8 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 	}
 
 	@Override
-	public List<Organization> queryEmployeeOrgan(Integer userId){
-		return organizationDao.queryEmployeeOrgan(userId);
+	public List<Organization> queryEmployeeOrgan(Integer userId,String organId){
+		return organizationDao.queryEmployeeOrgan(userId,organId);
 	}
 
 	@Override
@@ -56,7 +56,7 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 		if(sysUser.getIsSuperAdmin()){
 			userId = null;
 		}
-		return organizationDao.queryEmployeeOrgan(userId);
+		return organizationDao.queryEmployeeOrgan(userId,null);
 	}
 
 	@Override

+ 132 - 70
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -3699,11 +3699,9 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         PracticeGroup practiceGroup = practiceGroupDao.get(Long.valueOf(order.getMusicGroupId()));
         ClassGroup classGroup = classGroupDao.findByMusicGroupAndType(order.getMusicGroupId(), GroupType.PRACTICE.getCode());
         if (order.getStatus().equals(DealStatusEnum.SUCCESS)) {
-            Integer activityUserMapperId = studentPaymentOrderService.activityGive(practiceGroup.getVipGroupActivityId(),
-                    order.getUserId(),
-                    order.getId(),
+            Integer activityUserMapperId = studentPaymentOrderService.activityGive(practiceGroup.getVipGroupActivityId(),order,
                     null,
-                    practiceGroup.getId(),order.getActivityBuyNum(),order.getOrganId(),practiceGroup.getUserId());
+                    practiceGroup.getId(),practiceGroup.getUserId());
             practiceGroup.setActivityUserMapperId(activityUserMapperId);
             if(classGroup.getDelFlag() == 1){
                 updatePracticeGroupStudentNumAndStatus(practiceGroup, classGroup,order);
@@ -3871,11 +3869,18 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         PracticeGroupSellPrice practiceGroupSellPrice = practiceGroupSellPriceDao.get(practiceGroup.getOrganId());
         BigDecimal singleClassMinutesPrice = practiceGroupSellPrice.getSingleClassMinutesPrice();
         //实际支付金额,去除优惠券
-        BigDecimal actualPrice = order.getExpectAmount().subtract(order.getCouponRemitFee());
+        BigDecimal actualPrice = order.getExpectAmount();
         BigDecimal divide = actualPrice.divide(new BigDecimal(courseSchedules.size()), ROUND_DOWN);
         BigDecimal firstAmount = actualPrice.subtract(divide.multiply(new BigDecimal(courseSchedules.size()))).add(divide);
 
-        BigDecimal teacherDefaultSalary = BigDecimal.ZERO;
+        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
+        Integer practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
+
+        TeacherDefaultPracticeGroupSalary teacherDefaultPracticeGroupSalary = teacherDefaultPracticeGroupSalaryDao.findByTeacherAndCourseMinutes(practiceGroup.getUserId(),practiceCourseMinutes);
+        if(Objects.isNull(teacherDefaultPracticeGroupSalary)){
+            throw new BizException("请设置老师课酬");
+        }
+        BigDecimal teacherDefaultSalary = teacherDefaultPracticeGroupSalary.getMainTeacherSalary();
         if(practiceGroup.getVipGroupActivityId() != null){
             VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(practiceGroup.getVipGroupActivityId());
             VipGroupSalarySettlementDto vipGroupSalarySettlementDto = JSON.parseObject(vipGroupActivity.getSalarySettlementJson(), VipGroupSalarySettlementDto.class);
@@ -3883,24 +3888,9 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                 throw new BizException("课酬结算方案错误");
             }
             VipGroupSalarySettlementTypeDto salarySettlement = vipGroupSalarySettlementDto.getPracticeSalarySettlement();
-            switch (salarySettlement.getSalarySettlementType()){
-                case TEACHER_DEFAULT:
-                    break;
-                case FIXED_SALARY:
-                    teacherDefaultSalary = salarySettlement.getSettlementValue().setScale(0, BigDecimal.ROUND_HALF_UP);
-                    break;
-                default:
-                    throw new BizException("错误的课酬结算标准!");
-            }
-        }else {
-            SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
-            Integer practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
-            TeacherDefaultPracticeGroupSalary teacherDefaultPracticeGroupSalary = teacherDefaultPracticeGroupSalaryDao.findByTeacherAndCourseMinutes(practiceGroup.getUserId(),practiceCourseMinutes);
-
-            if(Objects.isNull(teacherDefaultPracticeGroupSalary)){
-                throw new BizException("请设置老师课酬");
+            if(salarySettlement.getSalarySettlementType() == SalarySettlementTypeEnum.FIXED_SALARY){
+                teacherDefaultSalary = salarySettlement.getSettlementValue().setScale(2, BigDecimal.ROUND_CEILING);
             }
-            teacherDefaultSalary = teacherDefaultPracticeGroupSalary.getMainTeacherSalary();
         }
 
         List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = new ArrayList<>();
@@ -4031,7 +4021,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                     activityUserMapper.setPracticeFlag(1);
                 }
                 if(activity.isPayToBalance()){
-                    boolean appendCourseBalance = sysUserCashAccountService.appendCourseBalance(userId, studentPaymentOrder.getExpectAmount().subtract(studentPaymentOrder.getCouponRemitFee()), PlatformCashAccountDetailTypeEnum.RECHARGE, "通用营销活动购买");
+                    boolean appendCourseBalance = sysUserCashAccountService.appendCourseBalance(userId, studentPaymentOrder.getExpectAmount(), PlatformCashAccountDetailTypeEnum.RECHARGE, "通用营销活动购买");
                     if (!appendCourseBalance) {
                         throw new BizException("增加用户课程余额失败");
                     }
@@ -4616,6 +4606,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         TeacherDefaultPracticeGroupSalary teacherDefaultPracticeGroupSalary = teacherDefaultPracticeGroupSalaryDao.findByTeacherAndCourseMinutes(teacherId,practiceCourseMinutes);
 
         BigDecimal teacherDefaultSalary = BigDecimal.ZERO;
+        BigDecimal giveTeacherDefaultSalary = BigDecimal.ZERO;
         if(Objects.isNull(teacherDefaultPracticeGroupSalary)){
             throw new BizException("请设置老师课酬");
         }
@@ -4623,7 +4614,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         if (Objects.isNull(practiceGroupSellPrice)) {
             throw new BizException("所在城市暂不参与此活动");
         }
-        Map<String,BigDecimal> results = new HashMap<>(1);
+        Map<String,BigDecimal> results = new HashMap<>(3);
 
         BigDecimal totalPrice = BigDecimal.ZERO;
         if(practice.getAllCourseNum() != null){
@@ -4633,6 +4624,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
         //课程购买费用计算
         VipGroupSalarySettlementTypeDto salarySettlement = null;
+        VipGroupSalarySettlementTypeDto givePracticeSalarySettlement = null;
         if(practice.getVipGroupActivityId() != null){
             VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(practice.getVipGroupActivityId());
             VipGroupSalarySettlementDto vipGroupSalarySettlementDto = JSON.parseObject(vipGroupActivity.getSalarySettlementJson(), VipGroupSalarySettlementDto.class);
@@ -4640,18 +4632,71 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                 throw new BizException("课酬结算方案错误");
             }
             salarySettlement = vipGroupSalarySettlementDto.getPracticeSalarySettlement();
+            givePracticeSalarySettlement = vipGroupSalarySettlementDto.getGivePracticeSalarySettlement();
             totalPrice = totalPrice.multiply(vipGroupActivity.getDiscount()).divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, ROUND_DOWN);
         }
         //教师课酬线上单课酬计算
         teacherDefaultSalary = teacherDefaultPracticeGroupSalary.getMainTeacherSalary();
+        giveTeacherDefaultSalary = teacherDefaultSalary;
         if(Objects.nonNull(salarySettlement)){
             if(salarySettlement.getSalarySettlementType() == SalarySettlementTypeEnum.FIXED_SALARY){
                 teacherDefaultSalary = salarySettlement.getSettlementValue();
             }
         }
+        if(Objects.nonNull(givePracticeSalarySettlement)){
+            if(givePracticeSalarySettlement.getSalarySettlementType() == SalarySettlementTypeEnum.FIXED_SALARY){
+                giveTeacherDefaultSalary = givePracticeSalarySettlement.getSettlementValue();
+            }
+        }
 
         results.put("totalPrice",totalPrice.setScale(0,BigDecimal.ROUND_CEILING));
         results.put("onlineTeacherSalary",teacherDefaultSalary.setScale(2, BigDecimal.ROUND_HALF_UP));
+        results.put("giveTeacherDefaultSalary",giveTeacherDefaultSalary.setScale(2, BigDecimal.ROUND_HALF_UP));
+        return results;
+    }
+
+    @Override
+    public Map<String, BigDecimal> countPracticeGroupPredictFee1(PracticeGroup practice, Integer teacherId) {
+        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);
+
+        if(Objects.isNull(teacherDefaultPracticeGroupSalary)){
+            throw new BizException("请设置老师课酬");
+        }
+        Map<String,BigDecimal> results = new HashMap<>(2);
+
+        //课程购买费用计算
+        VipGroupSalarySettlementTypeDto salarySettlement = null;
+        VipGroupSalarySettlementTypeDto givePracticeSalarySettlement = null;
+        if(practice.getVipGroupActivityId() != null){
+            VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(practice.getVipGroupActivityId());
+            VipGroupSalarySettlementDto vipGroupSalarySettlementDto = JSON.parseObject(vipGroupActivity.getSalarySettlementJson(), VipGroupSalarySettlementDto.class);
+            if(Objects.isNull(vipGroupSalarySettlementDto)){
+                throw new BizException("课酬结算方案错误");
+            }
+            salarySettlement = vipGroupSalarySettlementDto.getPracticeSalarySettlement();
+            givePracticeSalarySettlement = vipGroupSalarySettlementDto.getGivePracticeSalarySettlement();
+        }
+        //教师课酬线上单课酬计算
+        BigDecimal teacherDefaultSalary = teacherDefaultPracticeGroupSalary.getMainTeacherSalary();
+        BigDecimal giveTeacherDefaultSalary = teacherDefaultSalary;
+        if(Objects.nonNull(salarySettlement)){
+            if(salarySettlement.getSalarySettlementType() == SalarySettlementTypeEnum.FIXED_SALARY){
+                teacherDefaultSalary = salarySettlement.getSettlementValue();
+            }
+        }
+        if(Objects.nonNull(givePracticeSalarySettlement)){
+            if(givePracticeSalarySettlement.getSalarySettlementType() == SalarySettlementTypeEnum.FIXED_SALARY){
+                giveTeacherDefaultSalary = givePracticeSalarySettlement.getSettlementValue();
+            }
+        }
+
+        results.put("onlineTeacherSalary",teacherDefaultSalary.setScale(2, BigDecimal.ROUND_HALF_UP));
+        results.put("giveTeacherDefaultSalary",giveTeacherDefaultSalary.setScale(2, BigDecimal.ROUND_HALF_UP));
         return results;
     }
 
@@ -4744,9 +4789,9 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         applyBaseInfoDto.setAuditStatus(AuditStatusEnum.PASS);
 
         //如果默认课酬与实际课酬不匹配则需要审批
-        if(costInfo.get("onlineTeacherSalary").compareTo(applyBaseInfoDto.getOnlineTeacherSalary()) < 0){
-            applyBaseInfoDto.setAuditStatus(AuditStatusEnum.ING);
-        }
+//        if(costInfo.get("onlineTeacherSalary").compareTo(applyBaseInfoDto.getOnlineTeacherSalary()) < 0){
+//            applyBaseInfoDto.setAuditStatus(AuditStatusEnum.ING);
+//        }
 
         applyBaseInfoDto.setTotalPrice(costInfo.get("totalPrice"));
         applyBaseInfoDto.setOnlineTeacherSalary(costInfo.get("onlineTeacherSalary"));
@@ -4828,21 +4873,21 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         applyBaseInfoDto.setCourseScheduleJson(JSON.toJSONString(courseSchedules));
         practiceGroupDao.update(applyBaseInfoDto);
 
-        Set<Integer> roleIds = new HashSet<>(1);
-        roleIds.add(SysUserRole.SECTION_MANAGER);
-        Map<String,Long> memo = new HashMap<>(1);
-        memo.put("practiceGroupId",applyBaseInfoDto.getId());
-        if(Objects.isNull(teacher)){
-            throw new BizException("该用户不存在");
-        }
-        Set<Integer> userIds = musicGroupDao.queryUserIdByRoleId(roleIds,teacher.getTeacherOrganId());
-        if(CollectionUtils.isEmpty(userIds)){
-            throw new BizException("当前分部没有运营主管,无法创建,请联系总部工作人员!");
-        }
-        if(applyBaseInfoDto.getEducationalTeacherId() != null){
-            userIds.add(applyBaseInfoDto.getEducationalTeacherId());
-        }
-        sysMessageService.batchSeoMessage(userIds,MessageTypeEnum.BACKSTAGE_TEACHER_APPLY_PRACTICE, JSONObject.toJSONString(memo),teacher.getRealName());
+//        Set<Integer> roleIds = new HashSet<>(1);
+//        roleIds.add(SysUserRole.SECTION_MANAGER);
+//        Map<String,Long> memo = new HashMap<>(1);
+//        memo.put("practiceGroupId",applyBaseInfoDto.getId());
+//        if(Objects.isNull(teacher)){
+//            throw new BizException("该用户不存在");
+//        }
+//        Set<Integer> userIds = musicGroupDao.queryUserIdByRoleId(roleIds,teacher.getTeacherOrganId());
+//        if(CollectionUtils.isEmpty(userIds)){
+//            throw new BizException("当前分部没有运营主管,无法创建,请联系总部工作人员!");
+//        }
+//        if(applyBaseInfoDto.getEducationalTeacherId() != null){
+//            userIds.add(applyBaseInfoDto.getEducationalTeacherId());
+//        }
+//        sysMessageService.batchSeoMessage(userIds,MessageTypeEnum.BACKSTAGE_TEACHER_APPLY_PRACTICE, JSONObject.toJSONString(memo),teacher.getRealName());
         return BaseController.succeed(applyBaseInfoDto.getAuditStatus().getCode());
     }
 
@@ -4957,7 +5002,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         if(activity.isPayToBalance() && !giveFlag){
             ActivityUserMapper activityUserMapper = activityUserMappers.get(0);
             StudentPaymentOrder order = studentPaymentOrderDao.get(activityUserMapper.getPaymentOrderId());
-            sysUserCashAccountService.appendCourseBalance(studentId,order.getExpectAmount().subtract(order.getCouponRemitFee()).negate(),PlatformCashAccountDetailTypeEnum.PAY_FEE,"活动排课消耗课程余额");
+            sysUserCashAccountService.appendCourseBalance(studentId,order.getExpectAmount().negate(),PlatformCashAccountDetailTypeEnum.PAY_FEE,"活动排课消耗课程余额");
         }
 
         //创建班级信息
@@ -4990,11 +5035,10 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         //计算课程相关费用信息
         Map<String, BigDecimal> costInfo = countPracticeGroupPredictFee(applyBaseInfo,applyBaseInfo.getUserId());
         if(practice.getGiveFlag()){
-            applyBaseInfo.setOnlineTeacherSalary(costInfo.get("giveOnlineTeacherSalary"));
+            applyBaseInfo.setOnlineTeacherSalary(costInfo.get("giveTeacherDefaultSalary"));
         }else {
             applyBaseInfo.setOnlineTeacherSalary(costInfo.get("onlineTeacherSalary"));
         }
-        practiceGroupDao.update(applyBaseInfo);
 
         //创建班级老师关联记录
         ClassGroupTeacherMapper classGroupTeacherMapper=new ClassGroupTeacherMapper();
@@ -5038,25 +5082,47 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
         //创建课程
         courseScheduleService.batchAddCourseSchedule(courseSchedules);
+
         //创建老师单节课课酬信息
-        courseScheduleTeacherSalaryService.createCourseScheduleTeacherPracticeSalary(courseSchedules,
-                classGroupTeacherSalary.getOnlineClassesSalary());
+        List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = new ArrayList<>();
+        for (CourseSchedule courseSchedule : courseSchedules) {
+            //创建教师课程薪水记录
+            CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
+            courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
+            courseScheduleTeacherSalary.setGroupType(courseSchedule.getGroupType());
+            courseScheduleTeacherSalary.setMusicGroupId(courseSchedule.getMusicGroupId());
+            courseScheduleTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP);
+            courseScheduleTeacherSalary.setUserId(courseSchedule.getActualTeacherId().intValue());
+            courseScheduleTeacherSalary.setClassGroupId(courseSchedule.getClassGroupId());
+            courseScheduleTeacherSalary.setExpectSalary(classGroupTeacherSalary.getOnlineClassesSalary());
+            courseScheduleTeacherSalary.setActualSalary(null);
+            courseScheduleTeacherSalaries.add(courseScheduleTeacherSalary);
+        }
+        if (courseScheduleTeacherSalaries.size() > 0) {
+            courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaries);
+        }
 
         List<ClassGroupStudentMapper> classGroupStudents = classGroupStudentMapperDao.findByClassGroup(classGroup.getId());
 
-        Map<Integer,String> userRoleMap = new HashMap<>();
-        if(Objects.nonNull(applyBaseInfo.getEducationalTeacherId())){
-            userRoleMap.put(applyBaseInfo.getEducationalTeacherId(),"乐团主管");
-        }
-        userRoleMap.put(applyBaseInfo.getUserId(),"指导老师");
-        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
-        Integer practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
-        TeacherDefaultPracticeGroupSalary teacherDefaultPracticeGroupSalary = teacherDefaultPracticeGroupSalaryDao.findByTeacherAndCourseMinutes(applyBaseInfo.getUserId(),practiceCourseMinutes);
+//        Map<Integer,String> userRoleMap = new HashMap<>();
+//        if(Objects.nonNull(applyBaseInfo.getEducationalTeacherId())){
+//            userRoleMap.put(applyBaseInfo.getEducationalTeacherId(),"乐团主管");
+//        }
+//        userRoleMap.put(applyBaseInfo.getUserId(),"指导老师");
 
+        PracticeGroupSellPrice practiceGroupSellPrice = practiceGroupSellPriceDao.get(applyBaseInfo.getOrganId());
+        BigDecimal singleClassMinutesPrice = practiceGroupSellPrice.getSingleClassMinutesPrice();
         //生成学生单课缴费信息
+        Map<Integer, List<ActivityUserMapper>> collect = activityUserMappers.stream().collect(Collectors.groupingBy(ActivityUserMapper::getUserId));
         for (ClassGroupStudentMapper classGroupStudent : classGroupStudents) {
             List<CourseScheduleStudentPayment> courseScheduleStudentPayments=new ArrayList<>();
-            for (CourseSchedule courseSchedule : courseSchedules) {
+            //实际支付金额,去除优惠券
+            ActivityUserMapper activityUserMapper = collect.get(classGroupStudent.getUserId()).get(0);
+            BigDecimal totalAmount = activityUserMapper.getActualPrice();
+            BigDecimal singleAmount = totalAmount.divide(new BigDecimal(courseSchedules.size()), ROUND_DOWN);
+            BigDecimal firstSingleAmount = totalAmount.subtract(singleAmount.multiply(new BigDecimal(courseSchedules.size()))).add(singleAmount);
+            for (int i = 0; i < courseSchedules.size(); i++) {
+                CourseSchedule courseSchedule = courseSchedules.get(i);
                 CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
                 courseScheduleStudentPayment.setUserId(classGroupStudent.getUserId());
                 courseScheduleStudentPayment.setGroupType(courseSchedule.getGroupType());
@@ -5065,19 +5131,22 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                 courseScheduleStudentPayment.setClassGroupId(courseSchedule.getClassGroupId());
                 if(practice.getGiveFlag()){
                     courseScheduleStudentPayment.setExpectPrice(BigDecimal.ZERO);
-                    courseScheduleStudentPayment.setOriginalPrice(BigDecimal.ZERO);
                 }else {
-                    courseScheduleStudentPayment.setExpectPrice(teacherDefaultPracticeGroupSalary.getMainTeacherSalary());
-                    courseScheduleStudentPayment.setOriginalPrice(teacherDefaultPracticeGroupSalary.getMainTeacherSalary());
+                    if(i == 1){
+                        courseScheduleStudentPayment.setExpectPrice(firstSingleAmount);
+                    }else {
+                        courseScheduleStudentPayment.setExpectPrice(singleAmount);
+                    }
                 }
+                courseScheduleStudentPayment.setOriginalPrice(singleClassMinutesPrice);
                 courseScheduleStudentPayment.setActualPrice(courseScheduleStudentPayment.getExpectPrice());
                 courseScheduleStudentPayments.add(courseScheduleStudentPayment);
             }
             courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
-            userRoleMap.put(classGroupStudent.getUserId(),null);
+//            userRoleMap.put(classGroupStudent.getUserId(),null);
             studentDao.updateStudentServiceTag(classGroupStudent.getUserId(), null, YesOrNoEnum.YES.getCode());
         }
-        courseScheduleService.checkNewCourseSchedules(courseSchedules, false,false);
+//        courseScheduleService.checkNewCourseSchedules(courseSchedules, false,false);
         return BaseController.succeed(applyBaseInfo.getAuditStatus().getCode());
     }
 
@@ -5126,17 +5195,10 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             throw new BizException("课程信息错误");
         }
 
-        Date date=new Date();
+        Date date = new Date();
 
         PracticeGroup practiceGroup = practiceGroupDao.get(practiceGroupBuyParams.getPracticeGroupId());
 
-        if(classGroup.getStudentNum() > 0){
-            int i = studentPaymentOrderDao.countGroupOrderWithoutFailed(practiceGroupBuyParams.getPracticeGroupId().toString(),GroupType.PRACTICE);
-            if(i <= 0){
-                throw new BizException("该课程已经无法通过购买加入,请联系教务老师!");
-            }
-        }
-
         VipGroupActivity vipGroupActivity = null;
         if(Objects.nonNull(practiceGroup.getVipGroupActivityId())){
             vipGroupActivity = vipGroupActivityDao.get(practiceGroup.getVipGroupActivityId().intValue());

+ 4 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SellOrderServiceImpl.java

@@ -6,6 +6,7 @@ import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.service.*;
+import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 
@@ -406,9 +407,9 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
             sellOrderDao.update(sellOrder);
 
             //2、金额退到余额
-            if (reBackFee && sellOrder.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
-                sysUserCashAccountService.updateBalance(sellOrder.getUserId(), sellOrder.getExpectAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "订单:" + sellOrder.getOrderId() + " 商品id:" + sellOrder.getGoodsId() + "退货");
-            }
+//            if (reBackFee && sellOrder.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
+//                sysUserCashAccountService.updateBalance(sellOrder.getUserId(), sellOrder.getExpectAmount().multiply(new BigDecimal(0.995)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP), PlatformCashAccountDetailTypeEnum.REFUNDS, "订单:" + sellOrder.getOrderId() + " 商品id:" + sellOrder.getGoodsId() + "退货");
+//            }
         }
         //3、退货
         if (sellOrders.get(0).getAccountType() != null) {

+ 32 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java

@@ -255,6 +255,38 @@ public class StudentManageServiceImpl implements StudentManageService {
         pageInfo.setRows(dataList);
         return pageInfo;
     }
+    @Override
+    public PageInfo<SimpleUserDto> queryStudentsWithTeacherByOrganId(StudentManageQueryInfo queryInfo) {
+        PageInfo<SimpleUserDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        Teacher teacher = teacherDao.get(queryInfo.getTeacherId());
+        if (Objects.isNull(teacher)) {
+            return null;
+        }
+        List<Integer> organIds = new ArrayList<>();
+        if (Objects.nonNull(teacher.getTeacherOrganId())) {
+            organIds.add(teacher.getTeacherOrganId());
+        }
+        if (CollectionUtils.isEmpty(organIds)) {
+            return null;
+        }
+        params.put("organIds", organIds);
+
+        List<SimpleUserDto> dataList = null;
+        int count = studentDao.countStudentsWithOrgan(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = studentDao.getStudentsWithOrgan(params);
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
 
     @Override
     public PageInfo<StudentVipDouble11Dto> queryDouble11Students(StudentManageQueryInfo queryInfo) {

+ 18 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -16,7 +16,10 @@ import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.service.*;
 
+import com.ym.mec.util.excel.POIUtil;
 import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
@@ -114,6 +117,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         return studentPaymentOrderDao;
     }
 
+    private final static Logger LOGGER = LoggerFactory.getLogger(StudentPaymentOrderServiceImpl.class);
+
     @Override
     public StudentPaymentOrder findByUserAndActive(Integer userId, Integer activeRemark, String remark,String status) {
         return studentPaymentOrderDao.findByUserAndActive(userId,activeRemark,remark,status);
@@ -121,8 +126,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
 
     @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-	public Map createOrder(StudentPaymentOrder studentPaymentOrder, List<StudentPaymentOrderDetail> details, String payReceiver)
-			throws Exception {
+	public Map createOrder(StudentPaymentOrder studentPaymentOrder, List<StudentPaymentOrderDetail> details, String payReceiver) throws Exception {
 
     	BigDecimal cashAmount = studentPaymentOrder.getActualAmount();
     	BigDecimal expectAmount = studentPaymentOrder.getExpectAmount();
@@ -316,7 +320,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             }
 
             if (status.equals("succeeded") ||
-                    (status.equals("failed") && payingOrder.getCreateTime().before(DateUtil.addMinutes(new Date(), -35)))) {
+                    (status.equals("failed") || payingOrder.getCreateTime().before(DateUtil.addMinutes(new Date(), -35)))) {
                 try {
                     updateOrder(rpMap); //更新订单
                 } catch (Exception e) {
@@ -404,7 +408,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             confirm.put("confirm_amt", routeOrder.getRouteAmount());
             confirm.put("div_members", divMembers);
             try {
-                Payment.createConfirm(confirm);
+                Map<String, Object> map = Payment.createConfirm(confirm);
+                LOGGER.info("分账信息返回:",map);
             } catch (Exception e) {
                 continue;
             }
@@ -716,16 +721,17 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Integer activityGive(Integer vipGroupActivityId, Integer userId, Long paymentOrderId,Long vipGroupId,Long practiceGroupId,Integer buyNum,Integer organId,Integer teacherId) {
+    public Integer activityGive(Integer vipGroupActivityId, StudentPaymentOrder studentPaymentOrder, Long vipGroupId, Long practiceGroupId, Integer teacherId) {
         Integer activityUserMapperId = null;
         if(vipGroupActivityId != null){
             ActivityUserMapper activityUserMapper = new ActivityUserMapper();
             activityUserMapper.setVipGroupId(vipGroupId);
             activityUserMapper.setPracticeGroupId(practiceGroupId);
-            activityUserMapper.setPaymentOrderId(paymentOrderId);
-            activityUserMapper.setUserId(userId);
+            activityUserMapper.setPaymentOrderId(studentPaymentOrder.getId());
+            activityUserMapper.setUserId(studentPaymentOrder.getUserId());
             activityUserMapper.setActivityId(vipGroupActivityId);
             activityUserMapper.setTeacherId(teacherId);
+            activityUserMapper.setActualPrice(studentPaymentOrder.getExpectAmount());
             if(vipGroupId != null){
                 activityUserMapper.setVipFlag(2);
             }else {
@@ -733,7 +739,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             }
             //是否达到满赠标准
             VipGroupActivity activity = vipGroupActivityDao.get(vipGroupActivityId);
-            if(activity.getFullMinusCourseTimes() == -1 || buyNum < activity.getFullMinusCourseTimes()){
+            if(activity.getFullMinusCourseTimes() == -1 || studentPaymentOrder.getActivityBuyNum() < activity.getFullMinusCourseTimes()){
                 activityUserMapperDao.insert(activityUserMapper);
                 return activityUserMapper.getId();
             }
@@ -753,12 +759,12 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                 cloudTeacherOrder.setStatus(2);
                 cloudTeacherOrder.setUpdateTime(now);
                 cloudTeacherOrder.setAmount(BigDecimal.ZERO);
-                cloudTeacherOrder.setOrderId(paymentOrderId);
+                cloudTeacherOrder.setOrderId(studentPaymentOrder.getId());
                 cloudTeacherOrder.setRemark("购买vip活动赠送会员");
                 cloudTeacherOrder.setLevel(activity.getGiveMemberRankId());
-                cloudTeacherOrder.setStudentId(userId);
+                cloudTeacherOrder.setStudentId(studentPaymentOrder.getUserId());
                 cloudTeacherOrder.setType(2);
-                cloudTeacherOrder.setOrganId(organId);
+                cloudTeacherOrder.setOrganId(studentPaymentOrder.getOrganId());
                 PeriodEnum periodEnum = activity.getGivePeriodEnum();
                 switch (periodEnum){
                     case DAY:
@@ -775,7 +781,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                     default:
                         throw new BizException("不支持的周期类型");
                 }
-                Student student = studentService.get(userId);
+                Student student = studentService.get(studentPaymentOrder.getUserId());
                 Date startDate = now;
                 if (student.getMemberRankSettingId() == null || now.after(student.getMembershipEndTime())) {
                     cloudTeacherOrder.setStartTime(now);

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

@@ -20,7 +20,9 @@ import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.service.*;
+import com.ym.mec.common.constant.CommonConstants;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -60,16 +62,6 @@ import com.ym.mec.biz.dal.dao.SubjectDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
-import com.ym.mec.biz.dal.dto.NoClassMusicStudentDto;
-import com.ym.mec.biz.dal.dto.PageInfoReg;
-import com.ym.mec.biz.dal.dto.RegisterDto;
-import com.ym.mec.biz.dal.dto.StudentAddDto;
-import com.ym.mec.biz.dal.dto.StudentApplyDetailDto;
-import com.ym.mec.biz.dal.dto.StudentApplyInstrumentDto;
-import com.ym.mec.biz.dal.dto.StudentInfo;
-import com.ym.mec.biz.dal.dto.StudentMusicDetailDto;
-import com.ym.mec.biz.dal.dto.StudentMusicGroupDto;
-import com.ym.mec.biz.dal.dto.StudentRegisterInstrumentsDetailDto;
 import com.ym.mec.biz.dal.entity.ClassGroup;
 import com.ym.mec.biz.dal.entity.ClassGroupStudentMapper;
 import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
@@ -329,7 +321,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 		}
 
 		SubjectChange studentLastChange = subjectChangeDao.getStudentLastChange(studentId, musicGroupId);
-		
+
 		if (studentLastChange != null) {
 			Iterator<StudentPaymentOrderDetail> iterator = studentPaymentOrderDetailList.iterator();
 			StudentPaymentOrderDetail spod = null;
@@ -392,12 +384,13 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 			if (detailList == null) {
 				detailList = new ArrayList<StudentPaymentOrderDetail>();
 			}
-			map.put(OrderDetailTypeEnum.MUSICAL.getCode(), detailList.stream().map(StudentPaymentOrderDetail::getPrice)
-					.reduce(BigDecimal.ZERO, BigDecimal::add));
+            BigDecimal reduce = detailList.stream().map(StudentPaymentOrderDetail::getPrice)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            map.put(OrderDetailTypeEnum.MUSICAL.getCode(),reduce.multiply(new BigDecimal(0.995)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP));
 		} else {
 			map.put(OrderDetailTypeEnum.MUSICAL.getCode(), BigDecimal.ZERO);
 		}
-		
+
 		if (detailMap.containsKey(OrderDetailTypeEnum.MAINTENANCE)) {
 
 			BigDecimal totalAmount = BigDecimal.ZERO;
@@ -409,11 +402,11 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 					DealStatusEnum.SUCCESS);
 
 			if (studentPaymentOrderDetailList != null && studentPaymentOrderDetailList.size() > 0) {
-				
+
 				Map<Long, StudentPaymentOrderDetail> maintenanceMap = studentPaymentOrderDetailList.stream()
 						.filter(t -> (t.getType() == OrderDetailTypeEnum.MAINTENANCE))
 						.collect(Collectors.toMap(t -> t.getStudentInstrumentId(), StudentPaymentOrderDetail -> StudentPaymentOrderDetail));
-				
+
 				List<Long> instrumentIdList = new ArrayList<Long>(maintenanceMap.keySet());
 				if (instrumentIdList != null && instrumentIdList.size() > 0) {
 					List<StudentInstrument> studentInstrumentList = studentInstrumentDao.queryById(instrumentIdList);
@@ -429,7 +422,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 					}
 				}
 			}
-			map.put(OrderDetailTypeEnum.MAINTENANCE.getCode(), totalAmount);
+			map.put(OrderDetailTypeEnum.MAINTENANCE.getCode(), totalAmount.multiply(new BigDecimal(0.995)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP));
 		} else {
 			map.put(OrderDetailTypeEnum.MAINTENANCE.getCode(), BigDecimal.ZERO);
 		}
@@ -439,8 +432,9 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 			if (detailList == null) {
 				detailList = new ArrayList<StudentPaymentOrderDetail>();
 			}
-			map.put(OrderDetailTypeEnum.ACCESSORIES.getCode(),
-					detailList.stream().map(StudentPaymentOrderDetail::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add));
+            BigDecimal reduce = detailList.stream().map(StudentPaymentOrderDetail::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+            map.put(OrderDetailTypeEnum.ACCESSORIES.getCode(),
+                    reduce.multiply(new BigDecimal(0.995)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP));
 		} else {
 			map.put(OrderDetailTypeEnum.ACCESSORIES.getCode(), BigDecimal.ZERO);
 		}
@@ -449,7 +443,13 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 		if (studentRegistration == null) {
 			throw new BizException("学生报名信息查询失败");
 		}
-		map.put(OrderDetailTypeEnum.COURSE.getCode(), studentRegistration.getSurplusCourseFee());
+		//未上课*0995手续费、以上课*0.98
+        List<StudentCourseInfoDto> history = courseScheduleDao.findUserCourseInfos(GroupType.MUSIC, musicGroupId, studentId, "history");
+		if(history == null || history.size() == 0){
+            map.put(OrderDetailTypeEnum.COURSE.getCode(), studentRegistration.getSurplusCourseFee().multiply(new BigDecimal(0.995)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP));
+        }else {
+            map.put(OrderDetailTypeEnum.COURSE.getCode(), studentRegistration.getSurplusCourseFee().multiply(new BigDecimal(0.8)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP));
+        }
 
 		// 查询云教练订单
 		BigDecimal cloudAmount = BigDecimal.ZERO;

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

@@ -79,13 +79,6 @@ public class TeacherDefaultPracticeGroupSalaryServiceImpl extends BaseServiceImp
 				
 				if (updateTeacherSalaryList != null && updateTeacherSalaryList.size() > 0) {
 
-					Set<Long> groupIds = updateTeacherSalaryList.stream().map(c -> Long.valueOf(c.getMusicGroupId())).collect(Collectors.toSet());
-					List<PracticeGroup> practiceGroups = practiceGroupDao.getWithIds(new ArrayList<>(groupIds));
-					Map<Long, PracticeGroup> idGroupMap = new HashMap<>();
-					if(!CollectionUtils.isEmpty(practiceGroups)){
-						idGroupMap = practiceGroups.stream().collect(Collectors.toMap(PracticeGroup::getId, p->p, (p1, p2)->p1));
-					}
-
 					SysConfig practiceCourseSalaryConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
 					BigDecimal freeTeacherSalary = new BigDecimal(practiceCourseSalaryConfig.getParanValue());
 

+ 15 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherDefaultVipGroupSalaryServiceImpl.java

@@ -53,6 +53,9 @@ public class TeacherDefaultVipGroupSalaryServiceImpl extends BaseServiceImpl<Lon
 	@Autowired
 	private VipGroupCategoryDao vipGroupCategoryDao;
 
+	@Autowired
+	private ActivityUserMapperDao activityUserMapperDao;
+
 	@Override
 	public BaseDAO<Long, TeacherDefaultVipGroupSalary> getDAO() {
 		return teacherDefaultVipGroupSalaryDao;
@@ -64,7 +67,6 @@ public class TeacherDefaultVipGroupSalaryServiceImpl extends BaseServiceImpl<Lon
 		if (Objects.isNull(byTeacherAndCategory)) {
 			byTeacherAndCategory = new TeacherDefaultVipGroupSalary();
 			byTeacherAndCategory.setOfflineClassesSalary(new BigDecimal(0));
-			byTeacherAndCategory.setOnlineClassesSalary(new BigDecimal(0));
 		}
 		return byTeacherAndCategory;
 	}
@@ -102,9 +104,9 @@ public class TeacherDefaultVipGroupSalaryServiceImpl extends BaseServiceImpl<Lon
 						|| oldMS.getOnlineClassesSalary() == null || oldMS.getOnlineClassesSalary().doubleValue() != ms.getOnlineClassesSalary().doubleValue()) {
 					salaryMap.put(ms.getVipGroupCategoryId(), ms);
 				}*/
-				if(teacher.getJobNature() == JobNatureEnum.FULL_TIME){
-					ms.setOnlineClassesSalary(new BigDecimal(0));
-				}
+//				if(teacher.getJobNature() == JobNatureEnum.FULL_TIME){
+//					ms.setOnlineClassesSalary(new BigDecimal(0));
+//				}
 				salaryMap.put(ms.getVipGroupCategoryId(), ms);
 			}
 
@@ -138,6 +140,7 @@ public class TeacherDefaultVipGroupSalaryServiceImpl extends BaseServiceImpl<Lon
 					// 批量修改课程课酬
 					List<CourseScheduleTeacherSalary> list = new ArrayList<CourseScheduleTeacherSalary>();
 
+					ActivityUserMapper activityUserMapper = activityUserMapperDao.findVipUserMapper(Long.parseLong(updateTeacherSalaryList.get(0).getMusicGroupId()),"VIP");
 					for (CourseScheduleTeacherSalary ts : updateTeacherSalaryList) {
 						//课酬调整后不能更新课酬
 						if(!ts.getEnableChangeSalary()){
@@ -167,16 +170,14 @@ public class TeacherDefaultVipGroupSalaryServiceImpl extends BaseServiceImpl<Lon
 							TeacherDefaultVipGroupSalary tdms = salaryMap.get(vipGroup.getVipGroupCategoryId());
 							TeacherDefaultVipGroupSalary origTdms = map.get(vipGroup.getVipGroupCategoryId());
 							if (tdms != null && origTdms != null) {
-								Map<String, BigDecimal> teachModeSalaryMap = new HashMap<>();
-//								if(vipGroupCategory.getMusicTheory()){
-									teachModeSalaryMap = vipGroupService.countVipGroupPredictFee1(vipGroup, ts.getUserId(), ts.getCourseScheduleId());
-//								}else{
-//									teachModeSalaryMap = vipGroupService.countVipGroupCoursePredictFee(vipGroup, ts.getUserId(), ts.getCourseScheduleId());
-//								}
-								if(TeachModeEnum.ONLINE.equals(ts.getCourseSchedule().getTeachMode())&&teachModeSalaryMap.containsKey("onlineTeacherSalary")){
-									ts.setExpectSalary(teachModeSalaryMap.get("onlineTeacherSalary"));
-								}else if(TeachModeEnum.OFFLINE.equals(ts.getCourseSchedule().getTeachMode())&&teachModeSalaryMap.containsKey("offlineTeacherSalary")){
-									ts.setExpectSalary(teachModeSalaryMap.get("offlineTeacherSalary"));
+								Map<String, BigDecimal> teachModeSalaryMap = vipGroupService.countVipGroupPredictFee1(vipGroup, ts.getUserId(), ts.getCourseScheduleId());
+								ts.setExpectSalary(teachModeSalaryMap.get("offlineTeacherSalary"));
+								//是否是赠送课程
+
+								if(activityUserMapper != null){
+									if(vipGroup.getId().equals(activityUserMapper.getGiveVipGroupId())){
+										ts.setExpectSalary(teachModeSalaryMap.get("giveOfflineTeacherSalary"));
+									}
 								}
 								list.add(ts);
 							}

+ 4 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupActivityServiceImpl.java

@@ -1,7 +1,6 @@
 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;
@@ -12,7 +11,6 @@ import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.entity.VipGroupActivity;
 import com.ym.mec.biz.dal.entity.VipGroupCategory;
 import com.ym.mec.biz.dal.page.VipGroupActivityQueryInfo;
-import com.ym.mec.biz.event.source.EntityChangeEventSource;
 import com.ym.mec.biz.service.VipGroupActivityService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
@@ -26,8 +24,6 @@ import org.springframework.transaction.annotation.Transactional;
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static com.ym.mec.biz.dal.enums.SalarySettlementTypeEnum.TEACHER_DEFAULT;
-
 @Service
 public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGroupActivity>  implements VipGroupActivityService {
 	
@@ -69,9 +65,7 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 		}
 		VipGroupSalarySettlementDto vipGroupSalarySettlement = vipGroupActivityAddDto.getVipGroupSalarySettlement();
 		if(vipGroupSalarySettlement != null){
-			checkSettlement(vipGroupSalarySettlement.getVipOnlineSalarySettlement());
-			checkSettlement(vipGroupSalarySettlement.getVipOfflineSalarySettlement());
-			checkSettlement(vipGroupSalarySettlement.getGiveVipOnlineSalarySettlement());
+			checkSettlement(vipGroupSalarySettlement.getOfflineSalarySettlement());
 			checkSettlement(vipGroupSalarySettlement.getGiveVipOfflineSalarySettlement());
 			checkSettlement(vipGroupSalarySettlement.getPracticeSalarySettlement());
 			checkSettlement(vipGroupSalarySettlement.getGivePracticeSalarySettlement());
@@ -132,9 +126,7 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 		}else {
 			VipGroupSalarySettlementDto vipGroupSalarySettlement = vipGroupActivityAddDto.getVipGroupSalarySettlement();
 			if(vipGroupSalarySettlement != null){
-				checkSettlement(vipGroupSalarySettlement.getVipOnlineSalarySettlement());
-				checkSettlement(vipGroupSalarySettlement.getVipOfflineSalarySettlement());
-				checkSettlement(vipGroupSalarySettlement.getGiveVipOnlineSalarySettlement());
+				checkSettlement(vipGroupSalarySettlement.getOfflineSalarySettlement());
 				checkSettlement(vipGroupSalarySettlement.getGiveVipOfflineSalarySettlement());
 				checkSettlement(vipGroupSalarySettlement.getPracticeSalarySettlement());
 				checkSettlement(vipGroupSalarySettlement.getGivePracticeSalarySettlement());
@@ -173,8 +165,8 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 	}
 
     @Override
-    public List<WaitCourseActivityDto> queryWaitCourseActivity(Integer teacherId) {
-		return vipGroupActivityDao.queryWaitCourseActivity(teacherId);
+    public List<WaitCourseActivityDto> queryWaitCourseActivity(Integer teacherId,String organId) {
+		return vipGroupActivityDao.queryWaitCourseActivity(teacherId,organId);
     }
 
     @Override

File diff suppressed because it is too large
+ 427 - 351
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java


+ 16 - 15
mec-biz/src/main/resources/config/contracts/product2.ftl

@@ -123,39 +123,40 @@
     <div class="underline">(本协议中“乙方“指学员及家长;”乙方学员“指购买甲方产品或服务的学员;”乙方家长“仅指乙方学员的法定监护人。)</div>
 
     <p class="underline bold">重要须知:在注册或购买使用甲方提供的产品、服务之前,请您务必审慎阅读、充分理解本使用协议各条款内容, 特别是免除或者限制甲方责任的条款、对您权利进行限制的条款、约定争议解决方式和司法管辖的条款等。 限制、免责条款或者其他涉及您重大权益的条款可能以加粗、加下划线等形式提示您重点注意。您注册或购买使用甲方提供的产品和服务,均视为您同意本使用协议,以及同意接受本使用协议的约束。</p>
+    <p class="underline bold">如无特别说明 ,下列术语在本协议中的定义为:管乐迷平台(下称“本平台”),即管乐迷APP;  (下称“本平台”)指由甲方提供的器乐教学全流程辅助系统,包括媒体资料,教师点评,课前、课中、课后管理等服务;具体功能以实际提供为准,甲方或根据实际需要进行调整和增减,乙方使用平台和系统时需遵守本服务协议。</p>
+
     <h2>一、注册及购买</h2>
     <div >1、无论是否源自甲方建议,乙方选择报名注册加入乐团,或选择购买使用甲方提供的产品和服务,均为乙方自主意愿的表达及独立自主的选择。</div>
     2、乙方完成所选产品或服务缴费后,甲方向乙方开具加盖公司印章的收款凭据,乙方务必妥善保管。
 
     <h2>二、乐团及上课规范</h2>
     1、乙方学员在应服从甲方的管理,遵守甲方的制度。<br />
-    2、乙方学员应按时到达甲方指定上课地点,好课前准备;如发生迟到、早退或因其他乙方原因未能按时上课的,视为乙方学员放弃该次课程,为避免影响老师后续课程的正常进行,授课老师除完成原定时间安排的授课外,将不再提供额外延长课时,也不会因乙方学员缺席而暂停教学课程。<br />
+    2、乙方学员应按时到达甲方指定上课地点,好课前准备;如发生迟到、早退或因其他乙方原因未能按时上课的,视为乙方学员放弃该次课程,为避免影响老师后续课程的正常进行,授课老师除完成原定时间安排的授课外,将不再提供额外延长课时,也不会因乙方学员缺席而暂停教学课程。<br />
     3、乙方学员不得携带任何食品进入教室,所有进食应在课前完成;进入教室后,不得大声喧哗、追逐嬉戏,应当听从授课老师的安排;乙方学员应爱护公共财产和教学设施,严禁在桌椅上刻、划、涂、写等不文明行为;乙方学员未经授课老师同意,不得擅自使用教室内的乐器、音响、电视、空调等器材、设施,如造成此类器材、设施损坏的,乙方应照价赔偿。<br />
     4、未经授课老师同意,乙方家长不得进入课堂,以免影响老师和学员上课;为保证训练质量及进度,乙方学员应保证按照指导老师或教务老师所提出的要求在家练习,遇到专业问题应及时向指导老师请教,非专业问题可随时向教务老师反映。<br />
     <span>5、乙方家长应教育及监督乙方学员务必注意个人安全,妥善保管个人财物,对于非甲方原因造成的人身安全事故或财物损失,由乙方自行承担。</span><br />
     6、对于乐团学员出现以下情形时,甲方有权对乙方学员作出警告,如甲方作出警告后,乙方学员仍然不遵守甲方的管理制度的,甲方有权对其作出退团等处分。<br />
     &#160;&#160;6.1上课、排练时不服从管理和指导,不遵守纪律,影响其他团员的正常上课、排练;<br />
     &#160;&#160;6.2一个学期内发生两次及以上旷课行为;<br />
-    &#160;&#160;6.3一个学期内发生两次及以上未按老师要求回传视频作业的情形;<br />
-    &#160;&#160;6.4无特殊原因连续七天不练习,影响团员和乐团的整体水平的。<br />
+    &#160;&#160;6.3无特殊原因连续七天不练习,影响团员和乐团的整体水平的;<br />
+    &#160;&#160;<span style="color: red">6.4一个学期内发生两次及以上未按老师要求回传视频作业的情形。</span><br />
 
     <h2>三、请假</h2>
     1、基于教学进度和质量保证,甲方对于课程延续性有严格要求,因此乙方学员应尽量参加课程,无特殊情况则应避免请假。<br />
-    <div>2、VIP课程学员如有特殊情况需要请假的,应提前4小时以上通过管乐迷App完成请假,否则当次课程将视同发生,系统将自动记录结算课时并扣除相应课程费用。</div>
-    3、VIP学员如遇特殊情况需要长期请假时,可向甲方/授课老师申请办理临时休会。学员可在6个月内申请复学,超过6个月未申请复学的,甲方有权按自动退会处理。<span >VIP课程为一对二课程的,其中一位学员申请临时休会的,还需征得同组另一位学员的同意后方可申请休会。否则将不予受理。</span><br />
-    <span>4、鉴于团课的特殊性,团课学员个人请假,当次课程仍视同发生,系统将自动记录结算课时并扣除相应课程费用。</span><br />
-    5、每期课程均有相对应的有效期,乙方应在有效期内完成课程,10次课一期的,自交费之日起4个月内有效;20次课一期的,自交费之日起8个月内有效;40次课一期的,自交费之日起16个月内有效。<span>如果由于指导老师请假等原因造成课程不能如期完成的,课程有效期将顺延;如课程超出有效期限,乙方所缴纳的课程费用将自动扣除逾期未完成的课时后自动清零。</span><br />
+    <div>2、VIP课程学员如有特殊情况需要请假的,应提前4小时以上通过管乐迷APP完成请假,否则当次课程将视同发生,系统将自动记录结算课时并扣除相应课程费用。</div>
+    3、VIP学员如遇特殊情况需要长期请假时,可向□甲方/□授课老师申请办理临时休会。学员可在6个月内申请复学,超过6个月未申请复学的,甲方有权按自动退会处理。<span >VIP课程为一对二课程的,其中一位学员申请临时休会的,还需征得同组另一位学员的同意后方可申请休会。否则将不予受理。</span><br />
+    <span>4、鉴于团体课的特殊性,团体课学员个人请假,当次课程仍视同发生。</span><br />
 
     <h2>四、退费</h2>
-    <span>1、乐器、教辅、配件等,未经签收,自购买缴款之日起15日内提出申请可全额退还,超过上述期限则不予受理退费申请;非因商品本身存在质量问题,一经签收,无论使用与否,均不予退费;</span><br />
-    <span>2、乐保服务,在维修老师下校检查前提出申请可全额退还,下校检查日过后则不予退费;</span><br />
-    <span>3、非个别课程,包括但不限于声部基础课、合奏课、基础技能课、网基课、集训课、VIP课程项下一对二等,自购买缴款之日起15日内提出申请可全额退还,超过上述期限或实际已发生课时消耗的则一律不予受理退费;</span><br />
-    <span>4、正价购买的个别课程,包括但不限于VIP课程项下一对一、网管课等,课程有效期内可申请退费,可退款金额为:购买金额-课时原价*已消耗课时数量;</span><br />
-    <span>5、活动期间以优惠价格购买的个别课程,自购买缴款之日起15日内提出申请可全额退还,超过上述期限或实际已发生课时消耗的则一律不予受理退费;</span><br />
+    <span>1、乐器、教辅、配件等,未经签收,自购买缴款之日起15日内可申请退款,超过上述期限则不予受理退费申请;非因商品本身存在质量问题,一经签收,无论使用与否,均不予退费;</span><br />
+    <span>2、乐保服务,在维修老师下校检查前可申请退款,下校检查日过后则不予退费;</span><br />
+    <span>3、正价购买的个别课程,包括但不限于VIP课程项下一对一、网管课等,课程有效期内可申请退费,可退款金额为:购买金额-课时原价*已消耗课时数量;</span><br />
+    <span>4、活动期间以优惠价格购买的个别课程,自购买缴款之日起15日内可申请退款,超过上述期限或实际已发生课时消耗的则一律不予受理退费;</span><br />
+    <span>5、所有退款均按照退款金额的千分之五收取手续费;</span><br />
 
     <h2>五、违约责任</h2>
-    1、当事人一方不履行合同义务或者履行合同义务不符合约定的,均构成违约,守约方有权以书面通知的方式要求违约方纠正其违约行为并采取及时、有效的补救措施消除违约后果,并赔偿守约方因违约方之违约行为而遭致的损失。若违约方在收到守约方的上述通知后5日内未纠正其违约行为的,守约方有权在做出书面通知的情况下,单方解除本协议,违约方应赔偿守约方因此遭致的全部损失。<br />
-    2、乙方应始终维护甲方的知识产权以及品牌形象,本协议期间以及本协议因任何原因失效、被撤销、解除或终止后,均不得直接或间接通过任何公众媒体(包括但不限于传统大众媒体,以及微信、微博、博客、直播平台等社交平台)发表损害甲方(包括但不限于其产品、服务及甲方授课老师)声誉的言论或实施任何类似行为,否则乙方应赔偿甲方因此遭受的全部损失。<br />
+    1、当事人一方不履行合同义务或者履行合同义务不符合约定的,均构成违约,守约方有权以书面通知的方式要求违约方纠正其违约行为并采取及时、有效的补救措施消除违约后果,并赔偿守约方因违约方之违约行为而遭致的损失。若违约方在收到守约方的上述通知后5日内未纠正其违约行为的,守约方有权在做出书面通知的情况下,单方解除本协议,违约方应赔偿守约方因此遭致的全部损失,包括但不限于守约方因此支付的律师费,差旅费等。<br />
+    2、乙方应始终维护甲方的知识产权以及品牌形象,本协议期间以及本协议因任何原因失效、被撤销、解除或终止后,均不得直接或间接通过任何公众媒体(包括但不限于传统大众媒体,以及微信、微博、博客、直播平台等社交平台)发表损害甲方(包括但不限于其产品、服务及甲方授课老师)声誉的言论或实施任何类似行为,否则乙方应赔偿甲方因此遭受的全部损失,包括但不限于守约方因此支付的律师费,差旅费等。<br />
 
     <h2>六、保密条款</h2>
     1、双方对本协议的条款、本协议的签订及履行情况以及通过签订和履行本协议而获知的对方及对方关联公司的任何信息均负有保密义务。任何一方不得以任何形式透露给第三方(有关法律法规要求和甲乙双方的法律、会计顾问、授权雇员除外),也不得擅自使用。<br />
@@ -176,7 +177,7 @@
     3、双方确认并同意,本协议的电子版本与纸质版本具有同等法律效力。双方发生争议时,电子合同打印件可作为证据提交。双方通过网络以在线方式签订本协议的 ,则以乙方点击“确认”或“同意”等相关按钮或以电子签名的方式作为对合同内容的同意、确认以及本协议的签署;如双方签订纸质版本协议的,则本协议壹式贰份,甲方盖公章或合同专用章并且乙方签字作为有效签署方式,并且双方各执壹份,每份具有同等法律效力。<br />
     4、本协议自双方按照本协议约定方式签署之日起生效,有效期至双方履行完本协议约定的全部义务时止。<br />
     5、本协议未尽事宜或对本协议的任何修改、补充,有双方另行协商后以签订补充协议的方式解决,补充协议与本协议具有同等法律效力;双方没有约定也没有协商一致的,遵照相关法律法规规定执行。<br />
-    6、双方因履行本协议而相互发出或者提供的所有通知、文件、资料,均以本协议中所列明的电话、App推送消息送达,乙方如果变更电话号码的,应当自变更后1日内通知甲方且获得甲方确认,甲方通过电话、App方式无法联系乙方或者甲方认为必要时,甲方也可以通过特快专递至乙方住址的方式向乙方发出上述任何通知、文件、资料等,并在甲方寄出特快专递后第5日视为送达成功。<br />
+    6、双方因履行本协议而相互发出或者提供的所有通知、文件、资料,均以本协议中所列明的电话、APP推送消息送达,乙方如果变更电话号码的,应当自变更后1日内通知甲方且获得甲方确认,甲方通过电话、APP方式无法联系乙方或者甲方认为必要时,甲方也可以通过特快专递至乙方住址的方式向乙方发出上述任何通知、文件、资料等,并在甲方寄出特快专递后第5日视为送达成功。<br />
 
     <div class="signature">
         <#if isShowVisualSeal>

+ 11 - 9
mec-biz/src/main/resources/config/contracts/product4.ftl

@@ -119,7 +119,7 @@
         <div>(本协议中“乙方“指学员及家长;”乙方学员“指购买甲方产品或服务的学员;”乙方家长“仅指乙方学员的法定监护人。)</div>
 
         <p class="underline bold">重要须知:在注册或购买使用甲方提供的产品、服务之前,请您务必审慎阅读、充分理解本使用协议各条款内容, 特别是免除或者限制甲方责任的条款、对您权利进行限制的条款、约定争议解决方式和司法管辖的条款等。 限制、免责条款或者其他涉及您重大权益的条款可能以加粗、加下划线等形式提示您重点注意。您注册或购买使用甲方提供的产品和服务,均视为您同意本使用协议,以及同意接受本使用协议的约束。</p>
-        <p class="underline bold">如无特别说明 ,下列术语在本协议中的定义为:管乐迷平台(下称“本平台”),即管乐迷APP;乐器练习云教练系统(下称“本系统”)指由甲方提供的器乐教学全流程辅助系统,包括媒体资料,教师点评,课前、课中、课后管理等服务,具体以该系统实际提供为准。该系统将根据实际需要进行调整和增减,乙方使用平台时需遵守本服务协议。</p>
+        <p class="underline bold">如无特别说明 ,下列术语在本协议中的定义为:管乐迷平台(下称“本平台”),即管乐迷APP;(下称“本平台”)指由甲方提供的器乐教学全流程辅助系统,包括媒体资料,教师点评,课前、课中、课后管理等服务;乐器练习云教练 (下称“本系统”)指由甲方提供和维护的器乐辅助练习系统;具体以该系统实际提供为准。该系统将根据实际需要进行调整和增减,乙方使用平台时需遵守本服务协议。</p>
 
         <h2>一、注册及购买</h2>
         <div>1、无论是否源自甲方建议,乙方选择报名注册加入乐团,或选择购买使用甲方提供的产品和服务,均为乙方自主意愿的表达及独立自主的选择。</div>
@@ -130,7 +130,7 @@
 				2、乙方学员应按时到达甲方指定上课地点,作好课前准备;如发生迟到、早退或因其他乙方原因未能按时上课的,视为乙方学员放弃该次课程,为避免影响老师后续课程的正常进行,授课老师除完成原定时间安排的授课外,将不再提供额外延长课时,也不会因乙方学员缺席而暂停教学课程。<br />
 				3、乙方学员不得携带任何食品进入教室,所有进食应在课前完成;进入教室后,不得大声喧哗、追逐嬉戏,应当听从授课老师的安排;乙方学员应爱护公共财产和教学设施,严禁在桌椅上刻、划、涂、写等不文明行为;乙方学员未经授课老师同意,不得擅自使用教室内的乐器、音响、电视、空调等器材、设施,如造成此类器材、设施损坏的,乙方应照价赔偿。<br />
 				4、未经授课老师同意,乙方家长不得进入课堂,以免影响老师和学员上课;为保证训练质量及进度,乙方学员应保证按照指导老师或教务老师所提出的要求在家练习,遇到专业问题应及时向指导老师请教,非专业问题可随时向教务老师反映。<br />
-				5、乙方家长应教育及监督乙方学员务必注意个人安全,妥善保管个人财物,对于非甲方原因造成的人身安全事故或财物损失,由乙方自行承担。<br />
+                <div>5、乙方家长应教育及监督乙方学员务必注意个人安全,妥善保管个人财物,对于非甲方原因造成的人身安全事故或财物损失,由乙方自行承担。</div>
 				6、对于乐团学员出现以下情形时,甲方有权对乙方学员作出警告,如甲方作出警告后,乙方学员仍然不遵守甲方的管理制度的,甲方有权对该团员作出退团等处分。<br />
                 &#160;&#160;6.1上课、排练时不服从管理和指导,不遵守纪律,影响其他团员的正常上课、排练;<br />
                 &#160;&#160;6.2一个学期内发生两次及以上旷课行为;<br />
@@ -139,16 +139,18 @@
 
         <h2>三、请假</h2>
         1、基于教学进度和质量保证,甲方对于课程延续性有严格要求,因此乙方学员应尽量参加课程,无特殊情况则应避免请假。<br />
-        2、VIP课程学员如有特殊情况需要请假的,应提前4小时以上通过管乐迷APP完成请假,否则当次课程将视同发生,系统将自动记录结算课时并扣除相应课程费用。<br />
-        3、VIP学员如遇特殊情况需要长期请假时,可向甲方/授课老师申请办理临时休会。学员可在6个月内申请复学,超过6个月未申请复学的,甲方有权按自动退会处理。VIP课程为一对二课程的,其中一位学员申请临时休会的,还需征得同组另一位学员的同意后方可申请休会。否则将不予受理。<br />
-        4、鉴于团体课的特殊性,团体课学员个人请假,当次课程仍视同发生。<br />
+        <div>2、VIP课程学员如有特殊情况需要请假的,应提前4小时以上通过管乐迷APP完成请假,否则当次课程将视同发生,系统将自动记录结算课时并扣除相应课程费用。</div>
+        3、VIP学员如遇特殊情况需要长期请假时,可向甲方/授课老师申请办理临时休会。学员可在6个月内申请复学,超过6个月未申请复学的,甲方有权按自动退会处理。<strong>VIP课程为一对二课程的,其中一位学员申请临时休会的,还需征得同组另一位学员的同意后方可申请休会。否则将不予受理。</strong><br />
+        <div>4、鉴于团体课的特殊性,团体课学员个人请假,当次课程仍视同发生。</div>
 
         <h2>四、退费</h2>
-        1、乐器、教辅、配件等,未经签收,自购买缴款之日起15日内提出申请可全额退还,超过上述期限则不予受理退费申请;非因商品本身存在质量问题,一经签收,无论使用与否,均不予退费;<br />
-        2、乐保服务,在维修老师下校检查前提出申请可全额退还,下校检查日过后则不予退费;<br />
-        3、“乐器练习云教练”系统服务,自购买之日起到生效前一日提出申请可全额退还,超过上述期限或实际已提供相应服务则一律不予受理退费;<br />
+        <div>
+        1、乐器、教辅、配件等,未经签收,自购买缴款之日起15日可申请退款,超过上述期限则不予受理退费申请;非因商品本身存在质量问题,一经签收,无论使用与否,均不予退费;<br />
+        2、乐保服务,在维修老师下校检查前可申请退款,下校检查日过后则不予退费;<br />
+        3、“乐器练习云教练”系统服务,自购买之日起到生效前一日可申请退款, 超过上述期限或实际已提供相应服务则一律不予受理退费;<br />
         4、正价购买的个别课程,包括但不限于VIP课程项下一对一、网管课等,课程有效期内可申请退费,可退款金额为:购买金额-课时原价*已消耗课时数量;<br />
-        5、活动期间以优惠价格购买的个别课程,自购买缴款之日起15日内提出申请可全额退还,超过上述期限或实际已发生课时消耗的则一律不予受理退费;<br />
+        5、活动期间以优惠价格购买的个别课程,自购买缴款之日起15日内可申请退款,超过上述期限或实际已发生课时消耗的则一律不予受理退费;<br />
+        6、所有退款均按照退款金额千分之五收取手续费。</div>
 
         <h2>五、违约责任</h2>
         1、当事人一方不履行合同义务或者履行合同义务不符合约定的,均构成违约,守约方有权以书面通知的方式要求违约方纠正其违约行为并采取及时、有效的补救措施消除违约后果,并赔偿守约方因违约方之违约行为而遭致的损失。若违约方在收到守约方的上述通知后5日内未纠正其违约行为的,守约方有权在做出书面通知的情况下,单方解除本协议,违约方应赔偿守约方因此遭致的全部损失,包括但不限于守约方因此支付的律师费,差旅费等。<br />

+ 21 - 4
mec-biz/src/main/resources/config/mybatis/ActivityUserMapperMapper.xml

@@ -25,6 +25,7 @@
 		<result column="practice_group_id_" property="practiceGroupId" />
 		<result column="give_practice_group_id_" property="givePracticeGroupId" />
 		<result column="return_fee_" property="returnFee" />
+		<result column="actual_price_" property="actualPrice" />
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
 	</resultMap>
@@ -43,16 +44,21 @@
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.ActivityUserMapper" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO activity_user_mapper (activity_id_,user_id_,vip_flag_,give_vip_flag_,
 		                                  practice_flag_,give_practice_flag_,member_flag_,give_member_flag_,create_time_,update_time_,payment_order_id_,
-										  vip_group_id_,give_vip_group_id_,practice_group_id_,give_practice_group_id_,return_fee_,member_order_id_,give_member_order_id_,teacher_id_)
+										  vip_group_id_,give_vip_group_id_,practice_group_id_,give_practice_group_id_,return_fee_,
+		                                  member_order_id_,give_member_order_id_,teacher_id_,actual_price_)
 		                                  VALUES(#{activityId},#{userId},#{vipFlag},#{giveVipFlag},#{practiceFlag},
 		                                         #{givePracticeFlag},#{memberFlag},#{giveMemberFlag},NOW(),NOW(),#{paymentOrderId},#{vipGroupId},
-		                                         #{giveVipGroupId},#{practiceGroupId},#{givePracticeGroupId},#{returnFee},#{memberOrderId},#{giveMemberOrderId},#{teacherId})
+		                                         #{giveVipGroupId},#{practiceGroupId},#{givePracticeGroupId},#{returnFee},
+		                                         #{memberOrderId},#{giveMemberOrderId},#{teacherId},#{actualPrice})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.ActivityUserMapper">
 		UPDATE activity_user_mapper
 		<set>
+			<if test="actualPrice != null">
+				actual_price_ = #{actualPrice},
+			</if>
 			<if test="teacherId != null">
 				teacher_id_ = #{teacherId},
 			</if>
@@ -145,7 +151,7 @@
 	</select>
     <select id="findByStudentIdList" resultMap="ActivityUserMapper">
 		SELECT * FROM activity_user_mapper
-		WHERE activity_id_ = #{activityId} AND FIND_IN_SET(user_id_,#{studentIds})
+		WHERE activity_id_ = #{activityId} AND return_fee_ = 0 AND FIND_IN_SET(user_id_,#{studentIds})
 		<if test="type == 'GIVE_VIP'">
 			AND give_vip_flag_ = 1
 		</if>
@@ -165,6 +171,17 @@
 		WHERE activity_id_ = #{activityId} AND user_id_ = #{userId}
 	</select>
     <select id="findByStudentId" resultMap="ActivityUserMapper">
-		SELECT * FROM activity_user_mapper WHERE vip_group_id_ = #{groupId} AND user_id_ = #{studentId}
+		SELECT * FROM activity_user_mapper WHERE (vip_group_id_ = #{groupId} OR give_vip_group_id_ = #{groupId}) AND user_id_ = #{studentId}
+	</select>
+	<select id="findVipUserMapper" resultMap="ActivityUserMapper">
+		SELECT * FROM activity_user_mapper
+		WHERE 1 = 1
+		<if test="groupType == 'VIP'">
+			AND (vip_group_id_ = #{groupId} OR give_vip_group_id_ = #{groupId})
+		</if>
+		<if test="groupType == 'PRACTICE'">
+			AND (practice_group_id_ = #{groupId} OR give_practice_group_id_ = #{groupId})
+		</if>
+		LIMIT 1
 	</select>
 </mapper>

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

@@ -182,7 +182,7 @@
         FROM cloud_teacher_order
         WHERE student_id_ = #{studentId}
         <if test="musicGroupId != null and musicGroupId != ''">
-            music_group_id_ = #{musicGroupId}
+          AND music_group_id_ = #{musicGroupId}
         </if>
           AND status_ IN (1, 2)
     </select>

+ 4 - 1
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -122,6 +122,7 @@
         <result column="actual_teacher_id_" property="actualTeacherId"/>
         <result column="teach_mode_" property="teachMode" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="expect_price_" property="expectPrice"/>
+        <result column="original_price_" property="originalPrice"/>
     </resultMap>
 
     <resultMap type="com.ym.mec.biz.dal.entity.StudentAttendance" id="StudentAttendance">
@@ -2455,7 +2456,9 @@
         cs.end_class_time_,
         cs.actual_teacher_id_,
         cs.teach_mode_,
-        cssp.expect_price_
+        cssp.expect_price_,
+        cs.group_type_,
+        cssp.original_price_
         FROM
         course_schedule cs
         LEFT JOIN course_schedule_student_payment cssp ON cs.id_ = cssp.course_schedule_id_

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

@@ -614,7 +614,8 @@
 		SELECT ts.*,cs.type_,cs.teach_mode_,cs.class_date_,cs.start_class_time_,cs.end_class_time_
 		FROM course_schedule_teacher_salary ts
 		LEFT JOIN course_schedule cs ON ts.course_schedule_id_ = cs.id_
-		WHERE FIND_IN_SET(cs.type_, #{typeList}) AND ts.user_id_ = #{userId} AND ts.settlement_time_ IS NULL AND cs.class_date_ &gt;= #{startClassDate} AND cs.pre_course_flag_ = 0
+		WHERE FIND_IN_SET(cs.type_, #{typeList}) AND ts.user_id_ = #{userId} AND ts.settlement_time_ IS NULL
+		AND cs.class_date_ &gt;= #{startClassDate} AND cs.pre_course_flag_ = 0
 	</select>
     <select id="findByTeacher" resultMap="CourseScheduleTeacherSalary">
 		SELECT

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

@@ -1454,7 +1454,7 @@
 				#{organId}
 			</foreach>
 		</if>
-		GROUP BY DATE_FORMAT(spo.pay_time_,'%Y-%m-%d')
+		GROUP BY DATE_FORMAT(spo.pay_time_,'%Y-%m-%d'),spo.type_
 		UNION ALL
 		SELECT spo.organ_id_,SUM(CASE WHEN spod.price_ IS NULL THEN 0 ELSE spod.price_ END) total_num_,DATE_FORMAT(spo.pay_time_,'%Y-%m-%d') month_,spo.type_
 		FROM student_payment_order spo
@@ -1467,8 +1467,8 @@
 				#{organId}
 			</foreach>
 		</if>
-		GROUP BY DATE_FORMAT(spo.pay_time_,'%Y-%m-%d')
-		)c GROUP BY DATE_FORMAT(c.month_,'%Y-%m-%d')
+		GROUP BY DATE_FORMAT(spo.pay_time_,'%Y-%m-%d'),spo.type_
+		)c GROUP BY DATE_FORMAT(c.month_,'%Y-%m-%d'),c.type_
 	</select>
 
 	<sql id="queryTeacherServeInfoCondition">

+ 3 - 0
mec-biz/src/main/resources/config/mybatis/OrganizationMapper.xml

@@ -119,6 +119,9 @@
             <if test="userId != null">
                 AND FIND_IN_SET(o.id_,(SELECT GROUP_CONCAT(organ_id_list_) FROM employee e WHERE e.user_id_ = #{userId}))
             </if>
+            <if test="organId != null and organId != ''">
+                AND FIND_IN_SET(o.id_,#{organId})
+            </if>
         </where>
     </select>
     <select id="findOrganNameMap" resultType="java.util.Map">

+ 6 - 5
mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml

@@ -807,13 +807,9 @@
     <select id="countGroupOrderWithoutFailed" resultType="int">
         SELECT COUNT(*)
         FROM student_payment_order spo
-                 LEFT JOIN class_group_student_mapper cgsm
-                           ON spo.music_group_id_ = cgsm.music_group_id_ AND spo.user_id_ = cgsm.user_id_
         WHERE spo.music_group_id_ = #{groupId}
-          AND spo.status_ != 'FAILED'
-          AND cgsm.status_ != 'QUIT'
+          AND spo.status_ NOT IN ('FAILED','CLOSE')
           AND spo.group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler }
-          AND cgsm.group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler }
     </select>
     <select id="countSporadicOrder" resultType="java.lang.Integer">
         SELECT COUNT(id_)
@@ -1029,4 +1025,9 @@
         WHERE spo.type_ = 'APPLY' AND spo.status_ = 'SUCCESS' AND spo.music_group_id_ = #{musicGroupId}
         AND spo.user_id_ = #{studentId} AND spod.type_ = 'MUSICAL'
     </select>
+    <select id="queryStudentCourseAmountMap" resultType="java.util.Map">
+        SELECT user_id_ 'key',expect_amount_ - coupon_remit_fee_ 'value' FROM student_payment_order
+        WHERE status_ = 'SUCCESS' AND music_group_id_ = #{vipGroupId}
+        GROUP BY user_id_
+    </select>
 </mapper>

+ 4 - 8
mec-biz/src/main/resources/config/mybatis/TeacherDefaultVipGroupSalaryMapper.xml

@@ -12,7 +12,6 @@
         <result column="vip_group_category_id_" property="vipGroupCategoryId"/>
         <result column="vip_group_category_name_" property="vipGroupCategoryName"/>
         <result column="music_theory_" property="musicTheory"/>
-        <result column="online_classes_salary_" property="onlineClassesSalary"/>
         <result column="offline_classes_salary_" property="offlineClassesSalary"/>
         <result column="create_time_" property="createTime"/>
         <result column="update_time_" property="updateTime"/>
@@ -32,14 +31,14 @@
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.TeacherDefaultVipGroupSalary" useGeneratedKeys="true"
             keyColumn="id" keyProperty="id">
         INSERT INTO teacher_default_vip_group_salary
-        (user_id_,vip_group_category_id_,online_classes_salary_,offline_classes_salary_,create_time_,update_time_)
-        VALUES(#{userId},#{vipGroupCategoryId},#{onlineClassesSalary},#{offlineClassesSalary},now(),now())
+        (user_id_,vip_group_category_id_,offline_classes_salary_,create_time_,update_time_)
+        VALUES(#{userId},#{vipGroupCategoryId},#{offlineClassesSalary},now(),now())
     </insert>
     <insert id="batchAdd">
         INSERT INTO teacher_default_vip_group_salary
-        (user_id_,vip_group_category_id_,online_classes_salary_,offline_classes_salary_,create_time_,update_time_)VALUES
+        (user_id_,vip_group_category_id_,offline_classes_salary_,create_time_,update_time_)VALUES
         <foreach collection="vipGroupSalaries" item="item" separator=",">
-            (#{item.userId},#{item.vipGroupCategoryId},#{item.onlineClassesSalary},#{item.offlineClassesSalary},now(),now())
+            (#{item.userId},#{item.vipGroupCategoryId},#{item.offlineClassesSalary},now(),now())
         </foreach>
     </insert>
 
@@ -50,9 +49,6 @@
             <if test="userId != null">
                 user_id_ = #{userId},
             </if>
-            <if test="onlineClassesSalary != null">
-                online_classes_salary_ = #{onlineClassesSalary},
-            </if>
             <if test="updateTime != null">
                 update_time_ = NOW(),
             </if>

+ 38 - 25
mec-biz/src/main/resources/config/mybatis/VipGroupActivityMapper.xml

@@ -16,9 +16,6 @@
 		<result column="organ_id_" property="organId" />
 		<result column="courses_start_time_" property="coursesStartTime" />
 		<result column="courses_end_time_" property="coursesEndTime" />
-		<result column="salary_readonly_flag_" property="salaryReadonlyFlag" />
-		<result column="payment_readonly_flag_" property="paymentReadonlyFlag" />
-		<result column="give_class_pay_salary_flag_" property="giveClassPaySalaryFlag" />
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
 		<result column="salary_settlement_json_" property="salarySettlementJson" />
@@ -39,6 +36,7 @@
 		<result property="giveCourseNum" column="give_course_num_"/>
 		<result property="giveMemberRankId" column="give_member_rank_id_"/>
 		<result property="giveMemberTime" column="give_member_time_"/>
+		<result property="giveAllowOnlineToOffline" column="give_allow_online_to_offline_"/>
 		<result property="memberRankId" column="member_rank_id_"/>
 		<result property="memberTime" column="member_time_"/>
 		<result property="courseType" column="course_type_"/>
@@ -67,18 +65,19 @@
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.VipGroupActivity" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO vip_group_activity (name_,description_,vip_group_category_id_list_,start_time_,end_time_,organ_id_,courses_start_time_,courses_end_time_,
-		                                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_,
+		                                create_time_,update_time_,salary_settlement_json_,del_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_,
 										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_,market_price_)
+		                                activity_type_,give_sign_course_time_,is_pay_to_balance_,teach_mode_,give_teach_mode_,
+		                                period_,give_period_,status_,market_price_,give_allow_online_to_offline_)
 		VALUES(#{name},#{description},#{vipGroupCategoryIdList},#{startTime},#{endTime},#{organId},#{coursesStartTime},#{coursesEndTime},
-		       #{salaryReadonlyFlag},#{giveClassPaySalaryFlag},now(),now(),#{salarySettlementJson},#{delFlag},#{paymentReadonlyFlag},#{onlineClassJoinGradientRewards},
+		       now(),now(),#{salarySettlementJson},#{delFlag},#{onlineClassJoinGradientRewards},
 		       #{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},#{marketPrice})
+		       #{isPayToBalance},#{teachMode},#{giveTeachMode},#{periodEnum},#{givePeriodEnum},#{status},#{marketPrice},#{giveAllowOnlineToOffline})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -90,14 +89,14 @@
 		give_course_type_ = #{giveCourseType},give_category_id_ = #{giveCategoryId},give_course_num_ = #{giveCourseNum},
 		activity_type_ = #{activityType},course_type_ = #{courseType},member_time_ = #{memberTime},
 		member_rank_id_ = #{memberRankId},give_member_time_ = #{giveMemberTime},give_member_rank_id_ = #{giveMemberRankId},
-		salary_readonly_flag_ = #{salaryReadonlyFlag},organ_id_ = #{organId},give_class_pay_salary_flag_ = #{giveClassPaySalaryFlag},
+		organ_id_ = #{organId},
 		courses_end_time_ = #{coursesEndTime},
 		name_ = #{name},start_time_ = #{startTime},vip_group_category_id_list_ = #{vipGroupCategoryIdList},
 		description_ = #{description},salary_settlement_json_ = #{salarySettlementJson},courses_start_time_ = #{coursesStartTime},
-		payment_readonly_flag_ = #{paymentReadonlyFlag},online_class_join_gradient_rewards_=#{onlineClassJoinGradientRewards},
+		online_class_join_gradient_rewards_=#{onlineClassJoinGradientRewards},
 		offline_class_join_gradient_rewards_=#{offlineClassJoinGradientRewards},min_course_num_=#{minCourseNum},
 		max_course_num_=#{maxCourseNum},student_max_used_times_=#{studentMaxUsedTimes},apply_to_student_type_=#{applyToStudentType},
-		allow_online_to_offline_=#{allowOnlineToOffline},end_time_ = #{endTime},market_price_ = #{marketPrice},update_time_ = NOW() WHERE id_ = #{id}
+		allow_online_to_offline_=#{allowOnlineToOffline},end_time_ = #{endTime},market_price_ = #{marketPrice},update_time_ = NOW(),give_allow_online_to_offline_ = #{giveAllowOnlineToOffline} WHERE id_ = #{id}
 	</update>
 
 	<!-- 根据主键删除一条记录 -->
@@ -279,8 +278,15 @@
 	<select id="queryWaitCourseActivity" resultMap="WaitCourseActivityDto">
 		SELECT aum.id_,aum.activity_id_,vga.name_ activity_name_,COUNT(DISTINCT aum.user_id_) student_num_ FROM activity_user_mapper aum
 		LEFT JOIN vip_group_activity vga ON aum.activity_id_ = vga.id_
-		WHERE aum.teacher_id_ = #{teacherId} AND (aum.vip_flag_ = 1 OR aum.practice_flag_ = 1 OR aum.give_vip_flag_ = 1 OR aum.give_practice_flag_ = 1)
-		GROUP BY aum.activity_id_,aum.user_id_
+		WHERE aum.return_fee_ = 0
+		<if test="teacherId != null">
+			AND aum.teacher_id_ = #{teacherId}
+		</if>
+		<if test="organId != null and organId != ''">
+			AND INTE_ARRAY(#{organId},vga.organ_id_)
+		</if>
+		AND (aum.vip_flag_ = 1 OR aum.practice_flag_ = 1 OR aum.give_vip_flag_ = 1 OR aum.give_practice_flag_ = 1)
+		GROUP BY aum.activity_id_
 	</select>
 	<resultMap id="ActivityWaitCourseStudentNumDto" type="com.ym.mec.biz.dal.dto.ActivityWaitCourseStudentNumDto">
 		<result property="vipNum" column="vip_num_"/>
@@ -293,17 +299,21 @@
 		<result property="phone" column="phone_"/>
 	</resultMap>
 	<select id="getActivityWaitCourseStudentNum" resultMap="ActivityWaitCourseStudentNumDto">
-		SELECT COUNT(CASE WHEN aum.vip_flag_ = 1 THEN 1 ELSE NULL END) vip_num_,
-			   COUNT(CASE WHEN aum.practice_flag_ = 1 THEN 1 ELSE NULL END) practice_num_,
-			   COUNT(CASE WHEN aum.give_vip_flag_ = 1 THEN 1 ELSE NULL END) give_vip_num_,
-			   COUNT(CASE WHEN aum.give_practice_flag_ = 1 THEN 1 ELSE NULL END) give_practice_num_
-		FROM (SELECT activity_id_,MAX(vip_flag_) vip_flag_,MAX(practice_flag_) practice_flag_,
-					 MAX(give_vip_flag_) give_vip_flag_,MAX(give_practice_flag_) give_practice_flag_,user_id_,teacher_id_
-			  FROM activity_user_mapper
-			  WHERE activity_id_ = #{activityId}
-			  GROUP BY user_id_) aum
-		WHERE aum.activity_id_ = #{activityId} AND aum.teacher_id_ = #{userId}
-		GROUP BY aum.user_id_
+		SELECT COUNT(CASE WHEN c.vip_num_ > 0 THEN 1 ELSE NULL END) vip_num_,
+		COUNT(CASE WHEN c.practice_num_ > 0 THEN 1 ELSE NULL END) practice_num_,
+		COUNT(CASE WHEN c.give_vip_num_ > 0 THEN 1 ELSE NULL END)give_vip_num_,
+		COUNT(CASE WHEN c.give_practice_num_ > 0 THEN 1 ELSE NULL END)give_practice_num_
+		FROM (SELECT
+		COUNT(CASE WHEN vip_flag_ = 1 THEN 1 ELSE NULL END) vip_num_,
+		COUNT(CASE WHEN practice_flag_ = 1 THEN 1 ELSE NULL END) practice_num_,
+		COUNT(CASE WHEN give_vip_flag_ = 1 THEN 1 ELSE NULL END) give_vip_num_,
+		COUNT(CASE WHEN give_practice_flag_ = 1 THEN 1 ELSE NULL END) give_practice_num_
+		FROM activity_user_mapper aum
+		WHERE aum.return_fee_ = 0 AND aum.activity_id_ = #{activityId}
+		<if test="userId != null">
+			AND aum.teacher_id_ = #{userId}
+		</if>
+		GROUP BY aum.user_id_)c
 	</select>
 	<select id="getActivityStudentCanCourseNum" resultMap="ActivityWaitCourseStudentNumDto">
 		SELECT COUNT(CASE WHEN aum.vip_flag_ = 1 THEN 1 ELSE NULL END) vip_num_,
@@ -313,7 +323,10 @@
 				su.username_,su.avatar_,aum.user_id_,su.phone_
 		FROM activity_user_mapper aum
 		LEFT JOIN sys_user su ON su.id_ = aum.user_id_
-		WHERE aum.activity_id_ = #{activityId} AND aum.teacher_id_ = #{userId}
+		WHERE aum.return_fee_ = 0 AND aum.activity_id_ = #{activityId}
+		<if test="userId != null">
+			AND aum.teacher_id_ = #{userId}
+		</if>
 		GROUP BY aum.user_id_
 	</select>
 </mapper>

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

@@ -40,7 +40,7 @@
 	<select id="findTeacherDefaultSalary" resultMap="VipGroupCategory">
 		SELECT
 			vgc.*,
-			tdvgs.online_classes_salary_ online_classes_unit_price_,
+			tdvgs.offline_classes_salary_ online_classes_unit_price_,
 			tdvgs.offline_classes_salary_ offline_classes_unit_price_
 		FROM
 			vip_group_category vgc

+ 4 - 2
mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml

@@ -250,6 +250,9 @@
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.VipGroup">
         UPDATE vip_group
         <set>
+            <if test="courseStartDate != null">
+                courses_start_date = #{courseStartDate},
+            </if>
             <if test="paymentExpireDate != null">
                 payment_expire_date_ = #{paymentExpireDate},
             </if>
@@ -358,7 +361,6 @@
             AND status_='SUCCESS') = 0
             AND IF(vg.student_id_list_ IS NULL, vg.organ_id_ = #{organId}, FIND_IN_SET(#{userId},
             vg.student_id_list_))
-            AND vgc.music_theory_ = 0
             <if test="subjectId!=null">
                 AND FIND_IN_SET(#{subjectId},cg.subject_id_list_)
             </if>
@@ -854,7 +856,7 @@
                vg.courses_start_date,
                vg.courses_expire_date_,
                cg.total_class_times_,
-               su.username_
+               su.real_name_ username_
         FROM vip_group vg
                  LEFT JOIN class_group cg ON vg.id_ = cg.music_group_id_ AND cg.group_type_ = 'VIP'
                  LEFT JOIN sys_user su ON vg.user_id_ = su.id_

+ 2 - 15
mec-education/src/main/java/com/ym/mec/education/entity/TeacherDefaultVipGroupSalary.java

@@ -31,11 +31,8 @@ public class TeacherDefaultVipGroupSalary extends Model<TeacherDefaultVipGroupSa
      */
     @TableField("vip_group_category_id_")
     private String vipGroupCategoryId;
-    /**
-     * 线上课薪酬
-     */
-    @TableField("online_classes_salary_")
-    private BigDecimal onlineClassesSalary;
+//    @TableField("online_classes_salary_")
+//    private BigDecimal onlineClassesSalary;
     /**
      * 线下课薪酬
      */
@@ -74,15 +71,6 @@ public class TeacherDefaultVipGroupSalary extends Model<TeacherDefaultVipGroupSa
         return this;
     }
 
-    public BigDecimal getOnlineClassesSalary() {
-        return onlineClassesSalary;
-    }
-
-    public TeacherDefaultVipGroupSalary setOnlineClassesSalary(BigDecimal onlineClassesSalary) {
-        this.onlineClassesSalary = onlineClassesSalary;
-        return this;
-    }
-
     public BigDecimal getOfflineClassesSalary() {
         return offlineClassesSalary;
     }
@@ -121,7 +109,6 @@ public class TeacherDefaultVipGroupSalary extends Model<TeacherDefaultVipGroupSa
         ", id=" + id +
         ", userId=" + userId +
         ", vipGroupCategoryId=" + vipGroupCategoryId +
-        ", onlineClassesSalary=" + onlineClassesSalary +
         ", offlineClassesSalary=" + offlineClassesSalary +
         ", createTime=" + createTime +
         ", updateTime=" + updateTime +

+ 5 - 0
mec-student/src/main/java/com/ym/mec/student/controller/StudentVipGroupController.java

@@ -102,6 +102,11 @@ public class StudentVipGroupController extends BaseController {
     @PostMapping("/buyVipGroup")
     @AuditLogAnnotation(operateName = "vip课购买")
     public Object buyVipGroup(VipGroupBuyParamsDto vipGroupBuyParams) throws Exception {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (null == sysUser) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        vipGroupBuyParams.setUserId(sysUser.getId());
         return vipGroupService.buyVipGroup(vipGroupBuyParams);
     }
 

+ 4 - 2
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherPracticeGroupController.java

@@ -45,7 +45,10 @@ public class TeacherPracticeGroupController extends BaseController {
 			return failed("用户信息获取失败");
 		}
 		Teacher teacher = teacherDao.get(sysUser.getId());
-		return succeed(practiceGroupSellPriceDao.get(teacher.getOrganId()));
+		if(Objects.isNull(teacher)){
+			return failed("请指定指导老师!");
+		}
+		return succeed(practiceGroupSellPriceDao.get(teacher.getTeacherOrganId()));
 	}
 
 	@ApiOperation("课酬总费用")
@@ -85,7 +88,6 @@ public class TeacherPracticeGroupController extends BaseController {
 		for (CourseSchedule courseSchedule : practiceGroupApplyDto.getCourseSchedules()) {
 			courseSchedule.setEndClassTime(DateUtil.addMinutes(courseSchedule.getStartClassTime(), applyBaseInfo.getSingleClassMinutes()));
 		}
-		applyBaseInfo.setEducationalTeacherId(sysUser.getId());
 		return practiceGroupService.createActivityPracticeGroup(practiceGroupApplyDto);
 	}
 

+ 14 - 3
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherVipGroupController.java

@@ -49,7 +49,7 @@ public class TeacherVipGroupController extends BaseController {
 	@Autowired
 	private VipGroupDefaultClassesUnitPriceDao vipGroupDefaultClassesUnitPriceDao;
 
-	@ApiOperation("vip课申请")
+	@ApiOperation("老师端vip课申请")
 	@PostMapping("/vipGroupApply")
 	@AuditLogAnnotation(operateName = "vip课申请")
 	public Object vipGroupApply(@RequestBody VipGroupApplyDto vipGroupApplyDto) {
@@ -72,7 +72,7 @@ public class TeacherVipGroupController extends BaseController {
 		return vipGroupService.createVipGroup(vipGroupApplyDto);
 	}
 
-	@ApiOperation("vip课申请-双11")
+	@ApiOperation("vip双11排课")
 	@PostMapping("/vipGroupApplyForDouble11")
 	@Transactional(rollbackFor = Exception.class)
 	public Object vipGroupApplyForDouble11(@RequestBody VipGroupApplyDto vipGroupApplyDto) {
@@ -131,7 +131,7 @@ public class TeacherVipGroupController extends BaseController {
 			}
 		}
 
-		HttpResponseResult result = vipGroupService.createVipGroup(vipGroupApplyDto);
+		HttpResponseResult result = vipGroupService.createVipGroup1(vipGroupApplyDto);
 		if(result.getCode()==200){
 			vipGroupService.addVipGroupStudents(vipGroupApplyDto.getVipGroupApplyBaseInfo().getId(), studentIds, new HashMap<>());
 		}
@@ -166,6 +166,17 @@ public class TeacherVipGroupController extends BaseController {
 		return succeed(studentManageService.queryStudentsWithTeacher(queryInfo));
 	}
 
+	@ApiOperation(value = "获取教师所在分部学生列表")
+	@GetMapping("/queryStudentsWithTeacherByOrganId")
+	public Object queryStudentsWithTeacherByOrganId(StudentManageQueryInfo queryInfo){
+		SysUser user = sysUserFeignService.queryUserInfo();
+		if (Objects.isNull(user)) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		queryInfo.setTeacherId(user.getId());
+		return succeed(studentManageService.queryStudentsWithTeacherByOrganId(queryInfo));
+	}
+
 	@ApiOperation(value = "获取参与双十一活动学员列表")
 	@GetMapping("/queryDouble11Students")
 	public HttpResponseResult queryDouble11Students(StudentManageQueryInfo queryInfo){

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

@@ -51,7 +51,7 @@ public class VipGroupActivityController extends BaseController {
         if(sysUser == null){
             return failed("用户信息获取失败");
         }
-        return succeed(vipGroupActivityService.queryWaitCourseActivity(sysUser.getId()));
+        return succeed(vipGroupActivityService.queryWaitCourseActivity(sysUser.getId(),null));
     }
 
     @ApiOperation(value = "获取活动待排课学员数量")

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

@@ -50,7 +50,7 @@ public class OrganizationController extends BaseController {
 			throw new BizException("获取用户信息失败");
 		}
 		Integer userId = sysUser.getId();
-        return succeed(organizationService.queryEmployeeOrgan(userId));
+        return succeed(organizationService.queryEmployeeOrgan(userId,null));
     }
 
     @ApiOperation(value = "获取员工所在分部列表(管理员查看所有的分部)")

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

@@ -437,7 +437,7 @@ public class StudentManageController extends BaseController {
         if(StringUtils.isNotBlank(organIds)){
             organIdsList = Arrays.stream(organIds.split(",")).map(id->Integer.valueOf(id)).collect(Collectors.toList());
         }else{
-            List<Organization> organizations = organizationService.queryEmployeeOrgan(sysUser.getId());
+            List<Organization> organizations = organizationService.queryEmployeeOrgan(sysUser.getId(),null);
             if(CollectionUtils.isEmpty(organizations)){
                 return succeed();
             }
@@ -454,7 +454,7 @@ public class StudentManageController extends BaseController {
         if (sysUser == null) {
             return failed("用户信息获取失败");
         }
-        List<Organization> organizations = organizationService.queryEmployeeOrgan(sysUser.getId());
+        List<Organization> organizations = organizationService.queryEmployeeOrgan(sysUser.getId(),null);
         List<Integer> organIds = new ArrayList<>();
         if(StringUtils.isNotBlank(queryInfo.getOrganIds())){
             organIds = Arrays.stream(queryInfo.getOrganIds().split(",")).map(id->Integer.valueOf(id)).collect(Collectors.toList());

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

@@ -1,7 +1,5 @@
 package com.ym.mec.web.controller;
 
-import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.biz.dal.dao.EmployeeDao;
 import com.ym.mec.biz.dal.entity.VipGroupCategory;
 import com.ym.mec.biz.service.VipGroupCategoryService;
 import com.ym.mec.common.controller.BaseController;
@@ -23,10 +21,6 @@ public class VipGroupCategoryController extends BaseController {
 
 	@Autowired
 	private VipGroupCategoryService vipGroupCategoryService;
-	@Autowired
-	private SysUserFeignService sysUserFeignService;
-	@Autowired
-	private EmployeeDao employeeDao;
 
 	@ApiOperation("单查询")
 	@GetMapping(value = "/query")

+ 7 - 15
mec-web/src/main/java/com/ym/mec/web/controller/VipGroupManageController.java

@@ -60,10 +60,8 @@ public class VipGroupManageController extends BaseController {
     private ImUserFriendService imUserFriendService;
     @Autowired
     private ImGroupService imGroupService;
-
     @Autowired
     private StudentApplyRefundsService studentApplyRefundsService;
-    
     @Autowired
     private StudentPaymentOrderService studentPaymentOrderService;
     @Autowired
@@ -73,7 +71,7 @@ public class VipGroupManageController extends BaseController {
     @Autowired
     private CourseScheduleDao courseScheduleDao;
     @Autowired
-    private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
+    private VipGroupCategoryDao vipGroupCategoryDao;
 
     @GetMapping("/teacherSalarySettlement")
     public Object teacherSalarySettlement(){
@@ -98,12 +96,13 @@ public class VipGroupManageController extends BaseController {
         if(Objects.isNull(classGroup)){
             throw new BizException("课程信息错误");
         }
-        if(Objects.isNull(oldVipGroup.getVipGroupActivityId())){
+        VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(oldVipGroup.getVipGroupCategoryId());
+        if(vipGroupCategory != null && vipGroupCategory.getMusicTheory()){
             if(VipGroupStatusEnum.PROGRESS.equals(vipGroup.getStatus())&&!VipGroupStatusEnum.FINISHED.equals(oldVipGroup.getStatus())&&oldVipGroup.getStatus().getCode()>VipGroupStatusEnum.PROGRESS.getCode()){
                 throw new BizException("此课程组状态暂不支持修改");
             }
-            if(classGroup.getStudentNum()<3){
-                throw new BizException("班级人数未达到3人");
+            if(classGroup.getStudentNum()<1){
+                throw new BizException("班级人数未达到1人");
             }
         }
         Date now = new Date();
@@ -138,7 +137,7 @@ public class VipGroupManageController extends BaseController {
         return succeed();
     }
 
-    @ApiOperation(value = "vip课申请")
+    @ApiOperation(value = "管理端vip课申请")
     @PostMapping("/vipGroupApply")
     @PreAuthorize("@pcs.hasPermissions('vipGroupManage/vipGroupApply')")
     public Object vipGroupApply(@RequestBody VipGroupApplyDto vipGroupApplyDto){
@@ -152,12 +151,6 @@ public class VipGroupManageController extends BaseController {
             return failed("请指定指导老师!");
         }
         if(Objects.isNull(vipGroupApplyDto.getVipGroupApplyBaseInfo().getOrganId())){
-//            Employee employee = employeeDao.get(sysUser.getId());
-//            if(StringUtils.isEmpty(employee.getOrganIdList()) || employee.getOrganIdList().contains(",")){
-//                vipGroupApplyDto.getVipGroupApplyBaseInfo().setOrganId(teacher.getTeacherOrganId());
-//            }else {
-//                vipGroupApplyDto.getVipGroupApplyBaseInfo().setOrganId(Integer.parseInt(employee.getOrganIdList()));
-//            }
             Integer firstStudentId = vipGroupApplyDto.getVipGroupApplyBaseInfo().getFirstStudentId();
             SysUser student = teacherDao.getUser(firstStudentId);
             if(Objects.isNull(student)||Objects.isNull(student.getOrganId())){
@@ -309,8 +302,7 @@ public class VipGroupManageController extends BaseController {
     @PostMapping("/applyRefundForStudent")
     @PreAuthorize("@pcs.hasPermissions('vipGroupManage/applyRefundForStudent')")
     public Object applyRefundForStudent(ReturnFeeDto returnFeeDto){
-        vipGroupService.applyRefundForStudent(returnFeeDto);
-        return succeed();
+        return vipGroupService.applyRefundForStudent(returnFeeDto);
     }
 
     @ApiOperation(value = "退课申请审核")

+ 141 - 13
mec-web/src/main/java/com/ym/mec/web/controller/education/ActivityController.java

@@ -1,26 +1,22 @@
 package com.ym.mec.web.controller.education;
 
 
-import com.ym.mec.biz.dal.dao.SporadicChargeInfoDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
-import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
-import com.ym.mec.biz.dal.dto.LuckStatisDto;
-import com.ym.mec.biz.dal.dto.OrderStatisDto;
-import com.ym.mec.biz.dal.dto.OrganMaxAmountDto;
-import com.ym.mec.biz.dal.entity.Organization;
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.page.CloudTeacherActiveQueryInfo;
-import com.ym.mec.biz.service.OrganizationService;
-import com.ym.mec.biz.service.StudentService;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.util.date.DateUtil;
 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.util.CollectionUtils;
-import org.springframework.web.bind.annotation.GetMapping;
-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.math.RoundingMode;
@@ -41,6 +37,138 @@ public class ActivityController extends BaseController {
     private OrganizationService organizationService;
     @Autowired
     private StudentService studentService;
+    @Autowired
+    private VipGroupActivityService vipGroupActivityService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private EmployeeDao employeeDao;
+    @Autowired
+    private TeacherDao teacherDao;
+    @Autowired
+    private VipGroupDefaultClassesUnitPriceDao vipGroupDefaultClassesUnitPriceDao;
+    @Autowired
+    private VipGroupService vipGroupService;
+    @Autowired
+    private PracticeGroupService practiceGroupService;
+
+    @ApiOperation(value = "获取待排课的活动方案列表")
+    @RequestMapping("/queryWaitCourseActivity")
+    public Object queryWaitCourseActivity(String organId){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        Employee employee = employeeDao.get(sysUser.getId());
+        if (organId == null) {
+            organId = employee.getOrganIdList();
+        }else if(StringUtils.isEmpty(employee.getOrganIdList())){
+            return failed("用户所在分部异常");
+        }else {
+            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+            if(!list.containsAll(Arrays.asList(organId.split(",")))){
+                return failed("非法请求");
+            }
+        }
+        return succeed(vipGroupActivityService.queryWaitCourseActivity(null,organId));
+    }
+
+    @ApiOperation(value = "获取活动待排课学员数量")
+    @RequestMapping("/getActivityWaitCourseStudentNum")
+    public Object getActivityWaitCourseStudentNum(Integer activityId){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(sysUser == null){
+            return failed("用户信息获取失败");
+        }
+        ActivityWaitCourseStudentNumDto courseStudentNum = vipGroupActivityService.getActivityWaitCourseStudentNum(null, activityId);
+        VipGroupActivity vipGroupActivity = courseStudentNum.getVipGroupActivity();
+        Employee employee = employeeDao.get(sysUser.getId());
+        List<Integer> activityOrgans = Arrays.stream(vipGroupActivity.getOrganId().split(",")).mapToInt(Integer::valueOf).boxed().collect(Collectors.toList());
+        if(StringUtils.isEmpty(employee.getOrganIdList())){
+            courseStudentNum.setEmployeeAndActivityOrganIds(StringUtils.join(activityOrgans,","));
+            return succeed(courseStudentNum);
+        }
+        List<Integer> employeeOrgans = Arrays.stream(employee.getOrganIdList().split(",")).mapToInt(Integer::valueOf).boxed().collect(Collectors.toList());
+        employeeOrgans.retainAll(activityOrgans);
+        courseStudentNum.setEmployeeAndActivityOrganIds(StringUtils.join(employeeOrgans,","));
+        return succeed(courseStudentNum);
+    }
+
+    @ApiOperation(value = "获取活动学员课排课次数")
+    @RequestMapping("/getActivityStudentCanCourseNum")
+    public Object getActivityStudentCanCourseNum(Integer activityId){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(sysUser == null){
+            return failed("用户信息获取失败");
+        }
+        return succeed(vipGroupActivityService.getActivityStudentCanCourseNum(null,activityId));
+    }
+
+
+    @ApiOperation(value = "管理端活动排课")
+    @PostMapping("/createVipGroup")
+    public Object createVipGroup(@RequestBody VipGroupApplyDto vipGroupApplyDto){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        VipGroupApplyBaseInfoDto applyBaseInfo = vipGroupApplyDto.getVipGroupApplyBaseInfo();
+        if(applyBaseInfo.getUserId() == null){
+            return failed("请指定指导老师!");
+        }
+        Integer firstStudentId = applyBaseInfo.getFirstStudentId();
+        SysUser student = teacherDao.getUser(firstStudentId);
+        if(Objects.isNull(student) || Objects.isNull(student.getOrganId())){
+            return failed("学员信息异常");
+        }
+        applyBaseInfo.setOrganId(student.getOrganId());
+        for (CourseSchedule courseSchedule : vipGroupApplyDto.getCourseSchedules()) {
+            courseSchedule.setEndClassTime(DateUtil.addMinutes(courseSchedule.getStartClassTime(), applyBaseInfo.getSingleClassMinutes()));
+        }
+        VipGroupDefaultClassesUnitPrice vipGroupDefaultClassesUnitPrice = vipGroupDefaultClassesUnitPriceDao.getByVipGroupCategory(applyBaseInfo.getVipGroupCategoryId(), applyBaseInfo.getOrganId());
+        if(Objects.nonNull(vipGroupDefaultClassesUnitPrice)){
+            applyBaseInfo.setOnlineClassesUnitPrice(vipGroupDefaultClassesUnitPrice.getOnlineClassesUnitPrice());
+            applyBaseInfo.setOfflineClassesUnitPrice(vipGroupDefaultClassesUnitPrice.getOfflineClassesUnitPrice());
+        }
+
+        applyBaseInfo.setEducationalTeacherId(sysUser.getId());
+        return vipGroupService.createActivityVipGroup1(vipGroupApplyDto);
+    }
+
+    @ApiOperation(value = "管理端网管课活动排课")
+    @PostMapping("/createPracticeGroup")
+    public Object createPracticeGroup(@RequestBody PracticeGroupApplyDto practiceGroupApplyDto){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        PracticeGroupApplyBaseInfoDto applyBaseInfo = practiceGroupApplyDto.getPracticeGroupApplyBaseInfoDto();
+        if(applyBaseInfo.getUserId() == null){
+            return failed("请指定指导老师!");
+        }
+        SysUser student = teacherDao.getUser(applyBaseInfo.getStudentId());
+        if(Objects.isNull(student)||Objects.isNull(student.getOrganId())){
+            return failed("学员信息异常");
+        }
+        applyBaseInfo.setOrganId(student.getOrganId());
+        for (CourseSchedule courseSchedule : practiceGroupApplyDto.getCourseSchedules()) {
+            courseSchedule.setEndClassTime(DateUtil.addMinutes(courseSchedule.getStartClassTime(), applyBaseInfo.getSingleClassMinutes()));
+        }
+        applyBaseInfo.setEducationalTeacherId(sysUser.getId());
+        return practiceGroupService.createActivityPracticeGroup(practiceGroupApplyDto);
+    }
+
+    @ApiOperation(value = "分部双11活动统计")
+    @GetMapping("/organDoubleEleven2021Statis")
+    public HttpResponseResult<LuckStatisDto> organDoubleEleven2021Statis(){
+        return null;
+    }
+
+    @ApiOperation(value = "双11活动统计")
+    @GetMapping("/doubleEleven2021Statis")
+    public HttpResponseResult<LuckStatisDto> doubleEleven2021Statis(){
+        return null;
+    }
 
     @ApiOperation(value = "分部双11活动统计")
     @GetMapping("/doubleEleven2020Statis")
@@ -112,7 +240,7 @@ public class ActivityController extends BaseController {
     @ApiOperation(value = "云教练活动统计")
     @GetMapping("/countCloudTeacherActive")
     public Object countCloudTeacherActive(CloudTeacherActiveQueryInfo queryInfo) throws Exception {
-        List<Organization> organizations = organizationService.queryEmployeeOrgan(null);
+        List<Organization> organizations = organizationService.queryEmployeeOrgan(null,null);
         List<Integer> organIds = new ArrayList<>();
         if(StringUtils.isNotBlank(queryInfo.getOrganIds())){
             organIds = Arrays.stream(queryInfo.getOrganIds().split(",")).map(id->Integer.valueOf(id)).collect(Collectors.toList());

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

@@ -33,8 +33,8 @@ public class EduOrganizationController extends BaseController {
 
     @ApiOperation(value = "获取员工所在分部列表")
     @GetMapping("/queryAllOrgan")
-    public Object queryAllOrgan() throws Exception {
-        return succeed(organizationService.queryEmployeeOrgan(null));
+    public Object queryAllOrgan(String organId) throws Exception {
+        return succeed(organizationService.queryEmployeeOrgan(null,organId));
     }
 
     @ApiOperation(value = "获取员工所在分部列表")
@@ -45,7 +45,7 @@ public class EduOrganizationController extends BaseController {
 			throw new BizException("获取用户信息失败");
 		}
 		Integer userId = sysUser.getId();
-        return succeed(organizationService.queryEmployeeOrgan(userId));
+        return succeed(organizationService.queryEmployeeOrgan(userId,null));
     }
 
     @ApiOperation(value = "根据分部id获取合作单位(学校)列表")

+ 22 - 0
mec-web/src/main/java/com/ym/mec/web/controller/education/EduSchoolController.java

@@ -15,6 +15,7 @@ import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
@@ -32,6 +33,8 @@ public class EduSchoolController extends BaseController {
     private SchoolService schoolService;
     @Autowired
     private TeacherDao teacherDao;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
 
     @ApiOperation(value = "获取教师vip课教学点")
     @GetMapping("/findVipSchoolByTeacher")
@@ -49,4 +52,23 @@ public class EduSchoolController extends BaseController {
         }
         return succeed(schoolService.findVipSchoolByTeacher(userId,organId,null));
     }
+
+    @ApiOperation(value = "获取教师vip课教学点")
+    @GetMapping("/findVipSchoolByTeacher2")
+    public Object findVipSchoolByTeacher2(Integer isDefault){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(sysUser == null){
+            return failed(HttpStatus.FORBIDDEN,"请登录");
+        }
+        Teacher teacher = teacherDao.get(sysUser.getId());
+        if(teacher == null){
+            return failed("非法访问");
+        }
+
+        String organIdList = teacher.getTeacherOrganId().toString();
+        if (StringUtils.isNoneBlank(teacher.getFlowOrganRange())) {
+            organIdList += "," + teacher.getFlowOrganRange();
+        }
+        return succeed(schoolService.findVipSchoolByTeacher(sysUser.getId(),organIdList,isDefault));
+    }
 }

+ 1 - 1
mec-web/src/main/java/com/ym/mec/web/controller/education/EduStudentController.java

@@ -55,7 +55,7 @@ public class EduStudentController extends BaseController {
 			throw new BizException("获取用户信息失败");
 		}
 		Integer userId = sysUser.getId();
-        List<Organization> organizations = organizationService.queryEmployeeOrgan(userId);
+        List<Organization> organizations = organizationService.queryEmployeeOrgan(userId,null);
         if(CollectionUtils.isEmpty(organizations)){
             return succeed(Collections.emptyList());
         }

Some files were not shown because too many files changed in this diff