Bläddra i källkod

Merge remote-tracking branch 'origin/master'

zouxuan 4 år sedan
förälder
incheckning
c7e825e837
24 ändrade filer med 1096 tillägg och 60 borttagningar
  1. 17 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherDao.java
  2. 15 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherOrderDao.java
  3. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/OrganizationCloudTeacherFeeDao.java
  4. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupSubjectGoodsAndInfoDto.java
  5. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/RegisterPayDto.java
  6. 132 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudTeacher.java
  7. 248 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudTeacherOrder.java
  8. 52 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/OrganizationCloudTeacherFee.java
  9. 29 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/CloudTeacherTimeType.java
  10. 5 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/CourseViewTypeEnum.java
  11. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderDetailTypeEnum.java
  12. 32 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CloudTeacherOrderService.java
  13. 6 5
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentRegistrationService.java
  14. 119 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java
  15. 30 28
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  16. 8 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupSubjectPlanServiceImpl.java
  17. 53 18
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  18. 85 0
      mec-biz/src/main/resources/config/mybatis/CloudTeacherMapper.xml
  19. 119 0
      mec-biz/src/main/resources/config/mybatis/CloudTeacherOrderMapper.xml
  20. 64 0
      mec-biz/src/main/resources/config/mybatis/OrganizationCloudTeacherFeeMapper.xml
  21. 4 0
      mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java
  22. 5 0
      mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java
  23. 19 0
      mec-task/src/main/java/com/ym/mec/task/jobs/CloudTeacherOrderTask.java
  24. 10 0
      mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

+ 17 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherDao.java

@@ -0,0 +1,17 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.CloudTeacher;
+import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
+
+public interface CloudTeacherDao extends BaseDAO<Long, CloudTeacher> {
+
+    /**
+     * 获取学生的云教练信息
+     *
+     * @param studentId
+     * @return
+     */
+    CloudTeacher getByStudentId(@Param("studentId") Integer studentId);
+}

+ 15 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherOrderDao.java

@@ -0,0 +1,15 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
+import com.ym.mec.common.dal.BaseDAO;
+
+import java.util.List;
+
+public interface CloudTeacherOrderDao extends BaseDAO<Long, CloudTeacherOrder> {
+
+    /**
+     * 获取未生效的云教练订单
+     * @return
+     */
+    List<CloudTeacherOrder> getNoStartCloudTeacherOrder();
+}

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

@@ -0,0 +1,20 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.OrganizationCloudTeacherFee;
+import com.ym.mec.biz.dal.entity.PracticeGroupSellPrice;
+import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+
+public interface OrganizationCloudTeacherFeeDao extends BaseDAO<Integer, OrganizationCloudTeacherFee> {
+
+    /**
+     * 根据分部id获取云教练费用配置
+     *
+     * @param organId
+     * @return
+     */
+    OrganizationCloudTeacherFee getByOrganId(@Param("organId") Integer organId);
+}

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

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.dto;
 import com.ym.mec.biz.dal.entity.*;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
@@ -32,6 +33,8 @@ public class MusicGroupSubjectGoodsAndInfoDto {
     @ApiModelProperty(value = "乐团信息",required = false)
     private MusicGroup musicGroup;
 
+    @ApiModelProperty(value = "乐团云教练价格",required = false)
+    private BigDecimal cloudTeacherFee;
 
     public Map getCourseScheduleInfo() {
         return CourseScheduleInfo;
@@ -88,4 +91,12 @@ public class MusicGroupSubjectGoodsAndInfoDto {
     public void setMusicGroup(MusicGroup musicGroup) {
         this.musicGroup = musicGroup;
     }
+
+    public BigDecimal getCloudTeacherFee() {
+        return cloudTeacherFee;
+    }
+
+    public void setCloudTeacherFee(BigDecimal cloudTeacherFee) {
+        this.cloudTeacherFee = cloudTeacherFee;
+    }
 }

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

@@ -35,6 +35,9 @@ public class RegisterPayDto {
     @ApiModelProperty(value = "购买乐器保养",required = false)
     private Boolean buyMaintenance = false;
 
+    @ApiModelProperty(value = "购买云教练",required = false)
+    private Boolean buyCloudTeacher= false;
+
     public Integer getRegisterId() {
         return registerId;
     }
@@ -114,4 +117,12 @@ public class RegisterPayDto {
     public void setBuyMaintenance(Boolean buyMaintenance) {
         this.buyMaintenance = buyMaintenance;
     }
+
+    public Boolean getBuyCloudTeacher() {
+        return buyCloudTeacher;
+    }
+
+    public void setBuyCloudTeacher(Boolean buyCloudTeacher) {
+        this.buyCloudTeacher = buyCloudTeacher;
+    }
 }

+ 132 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudTeacher.java

@@ -0,0 +1,132 @@
+package com.ym.mec.biz.dal.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.util.Date;
+
+@ApiModel(value="com-domain-CloudTeacher")
+public class CloudTeacher {
+    @ApiModelProperty(value="")
+    private Integer id;
+
+    /**
+    * 学生id
+    */
+    @ApiModelProperty(value="学生id")
+    private Integer studentId;
+
+    /**
+    * 等级
+    */
+    @ApiModelProperty(value="等级")
+    private Integer level;
+
+    /**
+    * 服务开始时间
+    */
+    @ApiModelProperty(value="服务开始时间")
+    private Date startTime;
+
+    /**
+    * 服务结束时间
+    */
+    @ApiModelProperty(value="服务结束时间")
+    private Date endTime;
+
+    @ApiModelProperty(value="")
+    private Integer version = 0;
+
+    /**
+    * 创建时间
+    */
+    @ApiModelProperty(value="创建时间")
+    private Date createTime;
+
+    /**
+    * 修改时间
+    */
+    @ApiModelProperty(value="修改时间")
+    private Date updateTime;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Integer studentId) {
+        this.studentId = studentId;
+    }
+
+    public Integer getLevel() {
+        return level;
+    }
+
+    public void setLevel(Integer level) {
+        this.level = level;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public Integer getVersion() {
+        return version;
+    }
+
+    public void setVersion(Integer version) {
+        this.version = version;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", studentId=").append(studentId);
+        sb.append(", level=").append(level);
+        sb.append(", startTime=").append(startTime);
+        sb.append(", endTime=").append(endTime);
+        sb.append(", version=").append(version);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", updateTime=").append(updateTime);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 248 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudTeacherOrder.java

@@ -0,0 +1,248 @@
+package com.ym.mec.biz.dal.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@ApiModel(value = "com-domain-CloudTeacherOrder")
+public class CloudTeacherOrder {
+    @ApiModelProperty(value = "")
+    private Long id;
+
+    /**
+     * 学生id
+     */
+    @ApiModelProperty(value = "分部id")
+    private Integer organId;
+
+    /**
+     * 学生id
+     */
+    @ApiModelProperty(value = "学生id")
+    private Integer studentId;
+
+    /**
+     * 时长类型 1-天 2-月 3-年
+     */
+    @ApiModelProperty(value = "时长类型 1-天 2-月 3-年")
+    private Integer type;
+
+    /**
+     * 时长类型 1-天 2-月 3-年
+     */
+    @ApiModelProperty(value = "会员等级")
+    private Integer level;
+
+    /**
+     * 购买时长
+     */
+    @ApiModelProperty(value = "购买时长")
+    private Integer time;
+
+    /**
+     * 购买价格
+     */
+    @ApiModelProperty(value = "购买价格")
+    private BigDecimal amount;
+
+    /**
+     * 退回金额
+     */
+    @ApiModelProperty(value = "退回金额")
+    private BigDecimal refundAmount = BigDecimal.ZERO;
+
+    /**
+     * 1-生效中 2-已生效 3-已退
+     */
+    @ApiModelProperty(value = "1-生效中 2-已生效 3-已退")
+    private Integer status;
+
+    /**
+     * 服务开始时间
+     */
+    @ApiModelProperty(value = "服务开始时间")
+    private Date startTime;
+
+    /**
+     * 服务结束时间
+     */
+    @ApiModelProperty(value = "服务结束时间")
+    private Date endTime;
+
+    /**
+     * 订单id
+     */
+    @ApiModelProperty(value = "订单id")
+    private Long orderId;
+
+    /**
+     * 备注
+     */
+    @ApiModelProperty(value = "备注")
+    private String remark = "";
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    private String musicGroupId;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Integer getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Integer studentId) {
+        this.studentId = studentId;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public Integer getTime() {
+        return time;
+    }
+
+    public void setTime(Integer time) {
+        this.time = time;
+    }
+
+    public BigDecimal getAmount() {
+        return amount;
+    }
+
+    public void setAmount(BigDecimal amount) {
+        this.amount = amount;
+    }
+
+    public BigDecimal getRefundAmount() {
+        return refundAmount;
+    }
+
+    public void setRefundAmount(BigDecimal refundAmount) {
+        this.refundAmount = refundAmount;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public Long getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(Long orderId) {
+        this.orderId = orderId;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public Integer getLevel() {
+        return level;
+    }
+
+    public void setLevel(Integer level) {
+        this.level = level;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", studentId=").append(studentId);
+        sb.append(", type=").append(type);
+        sb.append(", time=").append(time);
+        sb.append(", amount=").append(amount);
+        sb.append(", refundAmount=").append(refundAmount);
+        sb.append(", status=").append(status);
+        sb.append(", orderId=").append(orderId);
+        sb.append(", remark=").append(remark);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", updateTime=").append(updateTime);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public Integer getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
+
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+}

+ 52 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/OrganizationCloudTeacherFee.java

@@ -0,0 +1,52 @@
+package com.ym.mec.biz.dal.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+public class OrganizationCloudTeacherFee {
+
+    @ApiModelProperty(value = "分部id")
+    private Integer organId;
+
+    @ApiModelProperty(value = "云教练价格")
+    private BigDecimal price;
+
+    private Date createTime;
+
+    private Date updateTime;
+
+    public Integer getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
+
+    public BigDecimal getPrice() {
+        return price;
+    }
+
+    public void setPrice(BigDecimal price) {
+        this.price = price;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+}

+ 29 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/CloudTeacherTimeType.java

@@ -0,0 +1,29 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.ym.mec.common.enums.BaseEnum;
+
+/**
+ * 云教练购买时长单位
+ */
+public enum CloudTeacherTimeType implements BaseEnum<Integer, CloudTeacherTimeType> {
+    DAY(1, "天"),
+    MONTH(2, "月"),
+    YEAR(3, "年");
+
+    private Integer code;
+    private String msg;
+
+    CloudTeacherTimeType(Integer code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    @Override
+    public Integer getCode() {
+        return code;
+    }
+}

+ 5 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/CourseViewTypeEnum.java

@@ -3,8 +3,9 @@ package com.ym.mec.biz.dal.enums;
 import com.ym.mec.common.enums.BaseEnum;
 
 public enum CourseViewTypeEnum implements BaseEnum<Integer, CourseViewTypeEnum> {
-    COURSE_lIST(0,"课程详情"),
-    AMR(1,"器乐练习系统");
+    COURSE_lIST(0, "课程详情"),
+    AMR(1, "器乐练习系统"),
+    CLOUD_TEACHER(2, "云教练收费");
 
     private Integer code;
 
@@ -30,4 +31,5 @@ public enum CourseViewTypeEnum implements BaseEnum<Integer, CourseViewTypeEnum>
     @Override
     public Integer getCode() {
         return this.code;
-    }}
+    }
+}

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

@@ -25,7 +25,8 @@ public enum OrderDetailTypeEnum implements BaseEnum<String, OrderDetailTypeEnum>
     MUSIC_NETWORK("MUSIC_NETWORK", "乐团网管课"),
     CLASSROOM("CLASSROOM", "课堂课"),
 	DEGREE_REGISTRATION("DEGREE_REGISTRATION", "考级报名"),
-    MAINTENANCE("MAINTENANCE","乐保服务");
+    MAINTENANCE("MAINTENANCE","乐保服务"),
+    CLOUD_TEACHER("CLOUD_TEACHER","云教练");
 
     private String code;
 

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

@@ -0,0 +1,32 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.CloudTeacher;
+import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.common.service.BaseService;
+
+public interface CloudTeacherOrderService extends BaseService<Long, CloudTeacherOrder> {
+
+
+    /**
+     * 将订单详情云教练加入云教练购买列表
+     * @param order
+     * @return
+     */
+    Boolean addOrderDetail2CloudTeacher(StudentPaymentOrder order);
+
+
+    /**
+     * 检测云教练是否开始生效,乐团上课后开始生效
+     * @return
+     */
+    Boolean checkCloudOrderStart();
+
+    /**
+     * 将生效的云教练订单加入
+     * @param cloudTeacherOrder
+     * @return
+     */
+    CloudTeacher addStudentCloudTeacher(CloudTeacherOrder cloudTeacherOrder);
+
+}

+ 6 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/StudentRegistrationService.java

@@ -6,7 +6,6 @@ import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
 import com.ym.mec.biz.dal.page.NoClassMusicStudentQueryInfo;
 import com.ym.mec.biz.dal.page.StudentRegistrationQueryInfo;
 import com.ym.mec.common.page.PageInfo;
-import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
 
 import java.io.IOException;
@@ -95,26 +94,28 @@ public interface StudentRegistrationService extends BaseService<Long, StudentReg
      * @param courseRemitFee
      * @param newCourses
      * @param buyMaintenance
+     * @param buyCloudTeacher
      * @return
      * @throws Exception
      */
     StudentPaymentOrder addOrder(StudentRegistration studentRegistration, BigDecimal amount, String orderNo, String paymentChannel, BigDecimal courseFee,
-                                 List<MusicGroupSubjectGoodsGroup> goodsGroups,BigDecimal remitFee, BigDecimal courseRemitFee,
-                                 List<MusicGroupPaymentCalenderCourseSettings> newCourses,Boolean buyMaintenance) throws Exception;
+                                 List<MusicGroupSubjectGoodsGroup> goodsGroups, BigDecimal remitFee, BigDecimal courseRemitFee,
+                                 List<MusicGroupPaymentCalenderCourseSettings> newCourses, Boolean buyMaintenance, Boolean buyCloudTeacher) throws Exception;
 
     /**
      * 学生注册缴费重新下订单
      *
+     * @param goodsList
      * @param userId
      * @param amount
      * @param courseFee
      * @param goodsGroups
-     * @param goodsList
+     * @param buyCloudTeacher
      * @return
      */
     StudentPaymentOrder reAddOrder(
             Integer userId, BigDecimal amount, String orderNo, String paymentChannel, BigDecimal courseFee,
-            List<MusicGroupSubjectGoodsGroup> goodsGroups, String musicGroupId, StudentPaymentOrder oldOrder, BigDecimal remitFee, BigDecimal courseRemitFee, List<MusicGroupPaymentCalenderCourseSettings> newCourses,Boolean buyMaintenance) throws Exception;
+            List<MusicGroupSubjectGoodsGroup> goodsGroups, String musicGroupId, StudentPaymentOrder oldOrder, BigDecimal remitFee, BigDecimal courseRemitFee, List<MusicGroupPaymentCalenderCourseSettings> newCourses, Boolean buyMaintenance, Boolean buyCloudTeacher) throws Exception;
 
     /**
      * 查询用户指定乐团的报名信息

+ 119 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java

@@ -0,0 +1,119 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
+import com.ym.mec.biz.service.CloudTeacherOrderService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.util.date.DateUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTeacherOrder> implements CloudTeacherOrderService {
+
+    @Autowired
+    private CloudTeacherOrderDao cloudTeacherOrderDao;
+    @Autowired
+    private StudentPaymentOrderDetailDao studentPaymentOrderDetailDao;
+    @Autowired
+    private CourseScheduleDao courseScheduleDao;
+    @Autowired
+    private CloudTeacherDao cloudTeacherDao;
+
+
+    @Override
+    public BaseDAO<Long, CloudTeacherOrder> getDAO() {
+        return cloudTeacherOrderDao;
+    }
+
+    @Override
+    public Boolean addOrderDetail2CloudTeacher(StudentPaymentOrder order) {
+        List<OrderDetailTypeEnum> orderDetailTypes = new ArrayList<>();
+        orderDetailTypes.add(OrderDetailTypeEnum.CLOUD_TEACHER);
+        List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailDao.getOrderDetailByType(order.getId(), orderDetailTypes);
+        if (orderDetails.size() <= 0) {
+            return true;
+        }
+        StudentPaymentOrderDetail orderDetail = orderDetails.get(0);
+        CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
+        cloudTeacherOrder.setOrganId(order.getOrganId());
+        cloudTeacherOrder.setStudentId(order.getUserId());
+        cloudTeacherOrder.setType(2);
+        cloudTeacherOrder.setLevel(3);
+        cloudTeacherOrder.setTime(6);
+        cloudTeacherOrder.setAmount(orderDetail.getPrice());
+        cloudTeacherOrder.setStatus(1);
+        cloudTeacherOrder.setOrderId(order.getId());
+        cloudTeacherOrderDao.insert(cloudTeacherOrder);
+        return true;
+    }
+
+    @Override
+    public Boolean checkCloudOrderStart() {
+        List<CloudTeacherOrder> cloudTeacherOrders = cloudTeacherOrderDao.getNoStartCloudTeacherOrder();
+        List<String> musicGroupIds = cloudTeacherOrders.stream().map(CloudTeacherOrder::getMusicGroupId).collect(Collectors.toList());
+        List<CourseSchedule> musicGroupsHasStartCourseNum = courseScheduleDao.getMusicGroupsHasStartCourseNum(musicGroupIds);
+        Set<String> musicGroupHasStartCourse = musicGroupsHasStartCourseNum.stream().map(CourseSchedule::getMusicGroupId).collect(Collectors.toSet());
+        for (CloudTeacherOrder cloudTeacherOrder : cloudTeacherOrders) {
+            if (!musicGroupHasStartCourse.contains(cloudTeacherOrder.getMusicGroupId())) continue;
+            addStudentCloudTeacher(cloudTeacherOrder);
+        }
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public CloudTeacher addStudentCloudTeacher(CloudTeacherOrder cloudTeacherOrder) {
+        Date nowDate = new Date();
+        CloudTeacher cloudTeacher = cloudTeacherDao.getByStudentId(cloudTeacherOrder.getStudentId());
+        Date startTime = null;
+        Date endTime = null;
+        Date endBaseTime = null;
+        if (cloudTeacher == null) {
+            cloudTeacher = new CloudTeacher();
+            startTime = DateUtil.trunc(nowDate);
+            endBaseTime = startTime;
+            if (cloudTeacherOrder.getType().equals(1)) {
+                endTime = DateUtil.addDays(startTime, cloudTeacherOrder.getTime());
+            } else if (cloudTeacherOrder.getType().equals(2)) {
+                endTime = DateUtil.addMonths(startTime, cloudTeacherOrder.getTime());
+            } else if (cloudTeacherOrder.getType().equals(3)) {
+                endTime = DateUtil.addYears(startTime, cloudTeacherOrder.getTime());
+            }
+            cloudTeacher.setStudentId(cloudTeacherOrder.getStudentId());
+            cloudTeacher.setLevel(cloudTeacher.getLevel());
+            cloudTeacher.setStartTime(startTime);
+            cloudTeacher.setEndTime(endTime);
+            cloudTeacherDao.insert(cloudTeacher);
+        } else {
+            startTime = cloudTeacher.getStartTime();
+            endBaseTime = cloudTeacher.getEndTime();
+            if (cloudTeacher.getEndTime().compareTo(nowDate) < 0) {
+                startTime = DateUtil.trunc(nowDate);
+                endBaseTime = startTime;
+            }
+            if (cloudTeacherOrder.getType().equals(1)) {
+                endTime = DateUtil.addDays(endBaseTime, cloudTeacherOrder.getTime());
+            } else if (cloudTeacherOrder.getType().equals(2)) {
+                endTime = DateUtil.addMonths(endBaseTime, cloudTeacherOrder.getTime());
+            } else if (cloudTeacherOrder.getType().equals(3)) {
+                endTime = DateUtil.addYears(endBaseTime, cloudTeacherOrder.getTime());
+            }
+            cloudTeacher.setStartTime(startTime);
+            cloudTeacher.setEndTime(endTime);
+            cloudTeacher.setUpdateTime(nowDate);
+            cloudTeacherDao.update(cloudTeacher);
+        }
+        cloudTeacherOrder.setStartTime(endBaseTime);
+        cloudTeacherOrder.setEndTime(endTime);
+        cloudTeacherOrder.setStatus(2);
+        cloudTeacherOrderDao.update(cloudTeacherOrder);
+        return cloudTeacher;
+    }
+}

+ 30 - 28
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -21,6 +21,7 @@ import java.util.stream.Collectors;
 
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.*;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -46,24 +47,6 @@ import com.ym.mec.biz.dal.dto.SubjectRegisterDto;
 import com.ym.mec.biz.dal.dto.UpdateExpectedNumDto;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentType;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
-import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
-import com.ym.mec.biz.dal.enums.CourseStatusEnum;
-import com.ym.mec.biz.dal.enums.DealStatusEnum;
-import com.ym.mec.biz.dal.enums.FivePlusGradeEnum;
-import com.ym.mec.biz.dal.enums.GoodsType;
-import com.ym.mec.biz.dal.enums.GradeTypeEnum;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
-import com.ym.mec.biz.dal.enums.MessageTypeEnum;
-import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
-import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
-import com.ym.mec.biz.dal.enums.OrderTypeEnum;
-import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
-import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
-import com.ym.mec.biz.dal.enums.SixPlusGradeEnum;
-import com.ym.mec.biz.dal.enums.SporadicChargeTypeEnum;
-import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.MusicGroupQueryInfo;
 import com.ym.mec.biz.event.source.GroupEventSource;
 import com.ym.mec.biz.service.ClassGroupService;
@@ -244,6 +227,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
     @Autowired
     private StudentPreRegistrationDao studentPreRegistrationDao;
+    @Autowired
+    private OrganizationCloudTeacherFeeDao organizationCloudTeacherFeeDao;
 
     @Autowired
     private GroupEventSource groupEventSource;
@@ -714,6 +699,15 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             orderAmount = orderAmount.add(maintenancePrice);
         }
 
+        //云教练
+        MusicGroup musicGroup = musicGroupDao.get(studentRegistration.getMusicGroupId());
+        studentRegistration.setOrganId(musicGroup.getOrganId());
+        if(registerPayDto.getBuyCloudTeacher()){
+            OrganizationCloudTeacherFee cloudTeacher = organizationCloudTeacherFeeDao.getByOrganId(studentRegistration.getOrganId());
+            BigDecimal cloudTeacherPrice = cloudTeacher.getPrice();
+            orderAmount = orderAmount.add(cloudTeacherPrice);
+        }
+
         if (amount.compareTo(orderAmount) != 0) {
             throw new BizException("商品价格不符");
         }
@@ -725,12 +719,11 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         String channelType = "";
 
-        StudentPaymentOrder studentPaymentOrder = studentRegistrationService.addOrder(studentRegistration, amount, orderNo, channelType, courseFee, goodsGroups, remitFee, courseRemitFee, newCourses, registerPayDto.getBuyMaintenance());
+        StudentPaymentOrder studentPaymentOrder = studentRegistrationService.addOrder(studentRegistration, amount, orderNo, channelType, courseFee, goodsGroups, remitFee, courseRemitFee, newCourses, registerPayDto.getBuyMaintenance(), registerPayDto.getBuyCloudTeacher());
         studentPaymentOrder.setVersion(0);
 
         Date date = new Date();
         BigDecimal balance = BigDecimal.ZERO;
-        MusicGroup musicGroup = musicGroupDao.get(studentRegistration.getMusicGroupId());
         if (registerPayDto.getIsUseBalancePayment() && amount.compareTo(BigDecimal.ZERO) > 0) {
             SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(userId);
             if (userCashAccount == null) {
@@ -865,6 +858,13 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             orderAmount = orderAmount.add(maintenancePrice);
         }
 
+        //云教练
+        if(registerPayDto.getBuyCloudTeacher()){
+            OrganizationCloudTeacherFee cloudTeacher = organizationCloudTeacherFeeDao.getByOrganId(studentRegistration.getOrganId());
+            BigDecimal cloudTeacherPrice = cloudTeacher.getPrice();
+            orderAmount = orderAmount.add(cloudTeacherPrice);
+        }
+
         if (amount.compareTo(orderAmount) != 0) {
             throw new BizException("商品价格不符");
         }
@@ -877,7 +877,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         String channelType = "";
 
-        StudentPaymentOrder studentPaymentOrder = studentRegistrationService.reAddOrder(userId, amount, orderNo, channelType, courseFee, goodsGroups, studentRegistration.getMusicGroupId(), ApplyOrder, remitFee, courseRemitFee, newCourses, registerPayDto.getBuyMaintenance());
+        StudentPaymentOrder studentPaymentOrder = studentRegistrationService.reAddOrder(userId, amount, orderNo, channelType, courseFee, goodsGroups, studentRegistration.getMusicGroupId(), ApplyOrder, remitFee, courseRemitFee, newCourses, registerPayDto.getBuyMaintenance(), registerPayDto.getBuyCloudTeacher());
         studentPaymentOrder.setVersion(0);
         Date date = new Date();
 
@@ -1783,9 +1783,12 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
             BigDecimal amount = new BigDecimal(0);
 
-            // 判断乐器是否是租赁
+            StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, musicGroupId, SUCCESS);
+            BigDecimal orderExpectAmount = studentPaymentOrder == null ? BigDecimal.ZERO : studentPaymentOrder.getExpectAmount();
+
+            // 缴费人数更新
             MusicGroupSubjectPlan musicGroupSubjectPlan = musicGroupSubjectPlanDao.getMusicOneSubjectClassPlan(musicGroupId, studentRegistration.getActualSubjectId());
-            if (musicGroupSubjectPlan != null) {
+            if (musicGroupSubjectPlan != null && (musicGroup.getCourseViewType().equals(CourseViewTypeEnum.COURSE_lIST) || orderExpectAmount.compareTo(BigDecimal.ZERO) > 0)) {
                 musicGroupSubjectPlan.setPaidStudentNum(musicGroupSubjectPlan.getPaidStudentNum() - 1);
                 musicGroupSubjectPlan.setUpdateTime(date);
                 musicGroupSubjectPlanDao.update(musicGroupSubjectPlan);
@@ -1805,8 +1808,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 amount = amount.add(surplusCourseFee);
             }
 
-            StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, musicGroupId, SUCCESS);
-
             if (studentPaymentOrder != null) {
                 List<StudentPaymentOrderDetail> orderDetailList = studentPaymentOrderDetailDao.findApplyOrderGoods(studentPaymentOrder.getId());
 
@@ -1987,9 +1988,12 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         BigDecimal amount = new BigDecimal(0);
 
+        StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, musicGroupId, SUCCESS);
+        BigDecimal orderExpectAmount = studentPaymentOrder == null ? BigDecimal.ZERO : studentPaymentOrder.getExpectAmount();
+
         // 判断乐器是否是租赁
         MusicGroupSubjectPlan musicGroupSubjectPlan = musicGroupSubjectPlanDao.getMusicOneSubjectClassPlan(musicGroupId, studentRegistration.getActualSubjectId());
-        if (musicGroupSubjectPlan != null) {
+        if (musicGroupSubjectPlan != null && (musicGroup.getCourseViewType().equals(CourseViewTypeEnum.COURSE_lIST) || orderExpectAmount.compareTo(BigDecimal.ZERO) > 0)) {
             musicGroupSubjectPlan.setPaidStudentNum(musicGroupSubjectPlan.getPaidStudentNum() - 1);
             musicGroupSubjectPlan.setUpdateTime(date);
             musicGroupSubjectPlanDao.update(musicGroupSubjectPlan);
@@ -2009,8 +2013,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             amount = amount.add(surplusCourseFee);
         }
 
-        StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, musicGroupId, SUCCESS);
-
         if (studentPaymentOrder != null) {
             List<StudentPaymentOrderDetail> orderDetailList = studentPaymentOrderDetailDao.findApplyOrderGoods(studentPaymentOrder.getId());
 

+ 8 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupSubjectPlanServiceImpl.java

@@ -9,7 +9,7 @@ import java.util.Map;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.MusicGroupGoodsAndDiscountDto;
 import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
+import com.ym.mec.biz.dal.enums.*;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -17,9 +17,6 @@ import org.springframework.stereotype.Service;
 import com.alibaba.fastjson.JSON;
 import com.ym.mec.biz.dal.dto.MusicGroupRegRespDto;
 import com.ym.mec.biz.dal.dto.MusicGroupSubjectGoodsAndInfoDto;
-import com.ym.mec.biz.dal.enums.DealStatusEnum;
-import com.ym.mec.biz.dal.enums.GoodsType;
-import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
 import com.ym.mec.biz.service.GoodsService;
 import com.ym.mec.biz.service.MusicGroupService;
 import com.ym.mec.biz.service.MusicGroupSubjectGoodsGroupService;
@@ -60,6 +57,8 @@ public class MusicGroupSubjectPlanServiceImpl extends BaseServiceImpl<Integer, M
     private MusicGroupPaymentCalenderCourseSettingsDao musicGroupPaymentCalenderCourseSettingsDao;
     @Autowired
     private MusicGroupPaymentCalenderDao musicGroupPaymentCalenderDao;
+    @Autowired
+    private OrganizationCloudTeacherFeeDao organizationCloudTeacherFeeDao;
 
     @Override
     public BaseDAO<Integer, MusicGroupSubjectPlan> getDAO() {
@@ -115,7 +114,7 @@ public class MusicGroupSubjectPlanServiceImpl extends BaseServiceImpl<Integer, M
                     childGoodIds += StringUtils.isNotBlank(childGoodIds) ? "," : "" + goods.getComplementGoodsIdList();
                 }
             }
-            if(StringUtils.isNotBlank(childGoodIds)) {
+            if (StringUtils.isNotBlank(childGoodIds)) {
                 goodsGroup.setChildGoodsList(goodsDao.findGoodsByIds(childGoodIds));
             }
         }
@@ -128,6 +127,10 @@ public class MusicGroupSubjectPlanServiceImpl extends BaseServiceImpl<Integer, M
         musicGroupSubjectGoodsAndInfo.setMusicGroupPaymentCalender(musicGroupRegCalender);
         musicGroupSubjectGoodsAndInfo.setMusicGroupSubjectGoodsGroupList(goodsGroups);
         musicGroupSubjectGoodsAndInfo.setMusicGroup(musicGroup);
+        if (musicGroup.getCourseViewType().equals(CourseViewTypeEnum.CLOUD_TEACHER)) {
+            OrganizationCloudTeacherFee cloudTeacherFee = organizationCloudTeacherFeeDao.getByOrganId(musicGroup.getOrganId());
+            musicGroupSubjectGoodsAndInfo.setCloudTeacherFee(cloudTeacherFee.getPrice());
+        }
         return musicGroupSubjectGoodsAndInfo;
     }
 

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

@@ -25,11 +25,7 @@ import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.page.NoClassMusicStudentQueryInfo;
 import com.ym.mec.biz.service.*;
-import com.ym.mec.common.page.QueryInfo;
-import com.ym.mec.im.WebFeignService;
-import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.poi.ss.formula.functions.T;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -149,6 +145,10 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     private EmployeeDao employeeDao;
     @Autowired
     private StudentInstrumentDao studentInstrumentDao;
+    @Autowired
+    private OrganizationCloudTeacherFeeDao organizationCloudTeacherFeeDao;
+    @Autowired
+    private CloudTeacherOrderService cloudTeacherOrderService;
 
     @Override
     public BaseDAO<Long, StudentRegistration> getDAO() {
@@ -378,7 +378,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     @Override
     @Transactional(rollbackFor = Exception.class)
     public StudentPaymentOrder addOrder(StudentRegistration studentRegistration, BigDecimal amount, String orderNo, String paymentChannel,
-                                        BigDecimal courseFee, List<MusicGroupSubjectGoodsGroup> goodsGroups, BigDecimal remitFee, BigDecimal courseRemitFee, List<MusicGroupPaymentCalenderCourseSettings> newCourses, Boolean buyMaintenance) throws Exception {
+                                        BigDecimal courseFee, List<MusicGroupSubjectGoodsGroup> goodsGroups, BigDecimal remitFee, BigDecimal courseRemitFee, List<MusicGroupPaymentCalenderCourseSettings> newCourses, Boolean buyMaintenance, Boolean buyCloudTeacher) throws Exception {
         Date date = new Date();
         StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
         studentPaymentOrder.setUserId(studentRegistration.getUserId());
@@ -464,15 +464,31 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             maintenanceOrderDetail.setIsRenew(0);
             studentPaymentOrderDetailList.add(maintenanceOrderDetail);
         }
+        //云教练
+        if (buyCloudTeacher) {
+            OrganizationCloudTeacherFee cloudTeacher = organizationCloudTeacherFeeDao.getByOrganId(studentRegistration.getOrganId());
+            BigDecimal cloudTeacherPrice = cloudTeacher.getPrice();
+            StudentPaymentOrderDetail cloudTeacherOrderDetail = new StudentPaymentOrderDetail();
+            cloudTeacherOrderDetail.setType(OrderDetailTypeEnum.CLOUD_TEACHER);
+            cloudTeacherOrderDetail.setPrice(cloudTeacherPrice);
+            cloudTeacherOrderDetail.setRemitFee(BigDecimal.ZERO);
+            cloudTeacherOrderDetail.setCreateTime(date);
+            cloudTeacherOrderDetail.setUpdateTime(date);
+            cloudTeacherOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
+            cloudTeacherOrderDetail.setIsRenew(0);
+            studentPaymentOrderDetailList.add(cloudTeacherOrderDetail);
+        }
         studentPaymentOrderDetailService.batchAdd(studentPaymentOrderDetailList);
 
+        MusicGroup musicGroup = musicGroupDao.get(studentRegistration.getMusicGroupId());
+
         //增加缴费学生数
         boolean updateFlag = false;
         for (int i = 0; i < 10; i++) {
-//            if (amount.compareTo(BigDecimal.ZERO) == 0) { //0元订单不增加报名人数
-//                updateFlag = true;
-//                break;
-//            }
+            if (musicGroup.getCourseViewType().equals(CourseViewTypeEnum.CLOUD_TEACHER) && amount.compareTo(BigDecimal.ZERO) <= 0) { //0元订单不增加报名人数
+                updateFlag = true;
+                break;
+            }
             MusicGroupSubjectPlan musicOneSubjectClassPlan = musicGroupSubjectPlanService.getMusicOneSubjectClassPlan(studentRegistration.getMusicGroupId(), studentRegistration.getActualSubjectId());
             int paidNum = musicOneSubjectClassPlan.getPaidStudentNum() == null ? 0 : musicOneSubjectClassPlan.getPaidStudentNum();
             musicOneSubjectClassPlan.setPaidStudentNum(paidNum + 1);
@@ -497,8 +513,8 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     public StudentPaymentOrder reAddOrder(Integer userId, BigDecimal amount, String orderNo, String paymentChannel, BigDecimal courseFee,
                                           List<MusicGroupSubjectGoodsGroup> goodsGroups, String musicGroupId, StudentPaymentOrder oldOrder,
                                           BigDecimal remitFee, BigDecimal courseRemitFee, List<MusicGroupPaymentCalenderCourseSettings> newCourses,
-                                          Boolean buyMaintenance
-    ) {
+                                          Boolean buyMaintenance,
+                                          Boolean buyCloudTeacher) {
         //关闭老订单
         oldOrder.setStatus(DealStatusEnum.CLOSE);
         studentPaymentOrderService.update(oldOrder);
@@ -590,6 +606,20 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             maintenanceOrderDetail.setIsRenew(0);
             studentPaymentOrderDetailList.add(maintenanceOrderDetail);
         }
+        //云教练
+        if (buyCloudTeacher) {
+            OrganizationCloudTeacherFee cloudTeacher = organizationCloudTeacherFeeDao.getByOrganId(oldOrder.getOrganId());
+            BigDecimal cloudTeacherPrice = cloudTeacher.getPrice();
+            StudentPaymentOrderDetail cloudTeacherOrderDetail = new StudentPaymentOrderDetail();
+            cloudTeacherOrderDetail.setType(OrderDetailTypeEnum.CLOUD_TEACHER);
+            cloudTeacherOrderDetail.setPrice(cloudTeacherPrice);
+            cloudTeacherOrderDetail.setRemitFee(BigDecimal.ZERO);
+            cloudTeacherOrderDetail.setCreateTime(date);
+            cloudTeacherOrderDetail.setUpdateTime(date);
+            cloudTeacherOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
+            cloudTeacherOrderDetail.setIsRenew(0);
+            studentPaymentOrderDetailList.add(cloudTeacherOrderDetail);
+        }
         studentPaymentOrderDetailService.batchAdd(studentPaymentOrderDetailList);
 
         return studentPaymentOrder;
@@ -1040,6 +1070,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             BigDecimal courseFee = allDetails.stream().filter(o -> !o.getType().getCode().equals("MUSICAL"))
                     .filter(o -> !o.getType().getCode().equals("ACCESSORIES"))
                     .filter(o -> !o.getType().getCode().equals("MAINTENANCE"))
+                    .filter(o -> !o.getType().getCode().equals("CLOUD_TEACHER"))
                     .map(o -> o.getPrice().subtract(o.getRemitFee() == null ? BigDecimal.ZERO : o.getRemitFee()))
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
 
@@ -1116,6 +1147,9 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             //学生乐器与月保处理
             studentInstrumentService.addOrderDetail2Instrument(studentPaymentOrder);
 
+            //学生云教练处理
+            cloudTeacherOrderService.addOrderDetail2CloudTeacher(studentPaymentOrder);
+
             //合并学员处理
             if (studentRegistration.getIsMerge().equals(1) && studentPaymentOrder.getExpectAmount().compareTo(BigDecimal.ZERO) <= 0) {
                 return studentPaymentOrder;
@@ -1150,18 +1184,19 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             }
         }
 
-
-        //减去缴费人数
         if (studentPaymentOrder.getStatus().equals(DealStatusEnum.FAILED)) {
-            musicOneSubjectClassPlan.setPaidStudentNum(musicOneSubjectClassPlan.getPaidStudentNum() - 1);
-            updateCount = musicGroupSubjectPlanService.update(musicOneSubjectClassPlan);
-            if (updateCount <= 0) {
-                throw new BizException("减去缴费人数失败");
+            MusicGroup musicGroup = musicGroupDao.get(studentRegistration.getMusicGroupId());
+            //减去缴费人数(器乐收费,0元时不减缴费人数)
+            if (musicGroup.getCourseViewType().equals(CourseViewTypeEnum.COURSE_lIST) || studentPaymentOrder.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
+                musicOneSubjectClassPlan.setPaidStudentNum(musicOneSubjectClassPlan.getPaidStudentNum() - 1);
+                updateCount = musicGroupSubjectPlanService.update(musicOneSubjectClassPlan);
+                if (updateCount <= 0) {
+                    throw new BizException("减去缴费人数失败");
+                }
             }
             if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
                 sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "报名缴费失败");
             }
-            MusicGroup musicGroup = musicGroupDao.get(studentRegistration.getMusicGroupId());
             //三方乐团不发送缴费通知
             if (musicGroup.getOwnershipType() != null && musicGroup.getOwnershipType() == CooperationOrgan.OwnershipType.OWN) {
                 String studentApplyUrl = sysConfigDao.findConfigValue(SysConfigService.STUDENT_APPLY_URL) + studentRegistration.getMusicGroupId();

+ 85 - 0
mec-biz/src/main/resources/config/mybatis/CloudTeacherMapper.xml

@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ym.mec.biz.dal.dao.CloudTeacherDao">
+    <resultMap id="CloudTeacher" type="com.ym.mec.biz.dal.entity.CloudTeacher">
+        <!--@mbg.generated-->
+        <!--@Table cloud_teacher-->
+        <id column="id_" property="id"/>
+        <result column="student_id_" property="studentId"/>
+        <result column="level_" property="level"/>
+        <result column="start_time_" property="startTime"/>
+        <result column="end_time_" property="endTime"/>
+        <result column="version_" property="version"/>
+        <result column="create_time_" property="createTime"/>
+        <result column="update_time_" property="updateTime"/>
+    </resultMap>
+
+    <select id="get" parameterType="java.lang.Integer" resultMap="CloudTeacher">
+        <!--@mbg.generated-->
+        select * from cloud_teacher
+        where id_ = #{id}
+    </select>
+    <delete id="delete" parameterType="java.lang.Integer">
+        <!--@mbg.generated-->
+        delete from cloud_teacher
+        where id_ = #{id}
+    </delete>
+    <insert id="insert" keyColumn="id_" keyProperty="id" parameterType="com.ym.mec.biz.dal.entity.CloudTeacher"
+            useGeneratedKeys="true">
+        <!--@mbg.generated-->
+        insert into cloud_teacher (student_id_, level_, start_time_, end_time_, version_, create_time_,
+        update_time_)
+        values (#{studentId}, #{level}, #{startTime}, #{endTime}, #{version}, #{createTime},
+        #{updateTime})
+    </insert>
+    <update id="update" parameterType="com.ym.mec.biz.dal.entity.CloudTeacher">
+        <!--@mbg.generated-->
+        update cloud_teacher
+        <set>
+            <if test="studentId != null">
+                student_id_ = #{studentId},
+            </if>
+            <if test="level != null">
+                level_ = #{level},
+            </if>
+            <if test="startTime != null">
+                start_time_ = #{startTime},
+            </if>
+            <if test="endTime != null">
+                end_time_ = #{endTime},
+            </if>
+            <if test="createTime != null">
+                create_time_ = #{createTime},
+            </if>
+            <if test="updateTime != null">
+                update_time_ = #{updateTime},
+            </if>
+            version_ = version_+1
+        </set>
+        where id_ = #{id} AND version_ = #{version}
+    </update>
+
+    <!-- 全查询 -->
+    <select id="findAll" resultMap="CloudTeacher">
+        SELECT *
+        FROM cloud_teacher_order
+    </select>
+
+    <!-- 分页查询 -->
+    <select id="queryPage" resultMap="CloudTeacher" parameterType="map">
+        SELECT * FROM cloud_teacher_order
+        <include refid="global.limit"/>
+    </select>
+
+    <!-- 查询当前表的总记录数 -->
+    <select id="queryCount" resultType="int">
+        SELECT COUNT(*)
+        FROM cloud_teacher_order
+    </select>
+
+    <select id="getByStudentId" resultMap="CloudTeacher">
+        SELECT *
+        FROM cloud_teacher
+        WHERE student_id_ = #{studentId}
+    </select>
+</mapper>

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

@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ym.mec.biz.dal.dao.CloudTeacherOrderDao">
+    <resultMap id="CloudTeacherOrder" type="com.ym.mec.biz.dal.entity.CloudTeacherOrder">
+        <!--@mbg.generated-->
+        <!--@Table cloud_teacher_order-->
+        <id column="id_" property="id"/>
+        <result column="organ_id_" property="organId"/>
+        <result column="student_id_" property="studentId"/>
+        <result column="type_" property="type"/>
+        <result column="level_" property="level"/>
+        <result column="time_" property="time"/>
+        <result column="amount_" property="amount"/>
+        <result column="refund_amount_" property="refundAmount"/>
+        <result column="status_" property="status"/>
+        <result column="start_time_" property="startTime"/>
+        <result column="end_time_" property="endTime"/>
+        <result column="order_id_" property="orderId"/>
+        <result column="remark_" property="remark"/>
+        <result column="create_time_" property="createTime"/>
+        <result column="update_time_" property="updateTime"/>
+        <result column="music_group_id_" property="musicGroupId"/>
+    </resultMap>
+
+    <select id="get" resultMap="CloudTeacherOrder">
+        <!--@mbg.generated-->
+        select * from cloud_teacher_order where id_ = #{id}
+    </select>
+    <delete id="delete">
+        <!--@mbg.generated-->
+        delete from cloud_teacher_order
+        where id_ = #{id}
+    </delete>
+    <insert id="insert" keyColumn="id_" keyProperty="id" parameterType="com.ym.mec.biz.dal.entity.CloudTeacherOrder"
+            useGeneratedKeys="true">
+        <!--@mbg.generated-->
+        insert into cloud_teacher_order (organ_id_,student_id_, type_, level_, time_, amount_, refund_amount_, status_,
+        order_id_,start_time_,end_time_,
+        remark_, create_time_, update_time_)
+        values (#{orderId},#{studentId}, #{type},#{level}, #{time}, #{amount}, #{refundAmount},
+        #{status},#{orderId},#{startTime},#{endTime}, #{remark}, NOW(), NOW())
+    </insert>
+    <update id="update" parameterType="com.ym.mec.biz.dal.entity.CloudTeacherOrder">
+        <!--@mbg.generated-->
+        update cloud_teacher_order
+        <set>
+            <if test="orderId != null">
+                organ_id_ = #{orderId},
+            </if>
+            <if test="studentId != null">
+                student_id_ = #{studentId},
+            </if>
+            <if test="type != null">
+                type_ = #{type},
+            </if>
+            <if test="level != null">
+                level_ = #{level},
+            </if>
+            <if test="time != null">
+                time_ = #{time},
+            </if>
+            <if test="amount != null">
+                amount_ = #{amount},
+            </if>
+            <if test="refundAmount != null">
+                refund_amount_ = #{refundAmount},
+            </if>
+            <if test="status != null">
+                status_ = #{status},
+            </if>
+            <if test="startTime != null">
+                start_time_ = #{startTime},
+            </if>
+            <if test="endTime != null">
+                end_time_ = #{endTime},
+            </if>
+            <if test="orderId != null">
+                order_id_ = #{orderId},
+            </if>
+            <if test="remark != null">
+                remark_ = #{remark},
+            </if>
+            <if test="createTime != null">
+                create_time_ = #{createTime},
+            </if>
+            <if test="updateTime != null">
+                update_time_ = #{updateTime},
+            </if>
+        </set>
+        where id_ = #{id}
+    </update>
+
+    <!-- 全查询 -->
+    <select id="findAll" resultMap="CloudTeacherOrder">
+        SELECT *
+        FROM cloud_teacher_order
+    </select>
+
+    <!-- 分页查询 -->
+    <select id="queryPage" resultMap="CloudTeacherOrder" parameterType="map">
+        SELECT * FROM cloud_teacher_order
+        <include refid="global.limit"/>
+    </select>
+
+    <!-- 查询当前表的总记录数 -->
+    <select id="queryCount" resultType="int">
+        SELECT COUNT(*)
+        FROM cloud_teacher_order
+    </select>
+
+    <select id="getNoStartCloudTeacherOrder" resultMap="CloudTeacherOrder">
+        SELECT cto.*, spo.music_group_id_
+        FROM cloud_teacher_order cto
+                 LEFT JOIN student_payment_order spo ON cto.order_id_ = spo.id_
+                 LEFT JOIN music_group mg on spo.music_group_id_ = mg.id_
+        WHERE cto.status_ = 1
+        ORDER BY spo.pay_time_ ASC
+    </select>
+</mapper>

+ 64 - 0
mec-biz/src/main/resources/config/mybatis/OrganizationCloudTeacherFeeMapper.xml

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

+ 4 - 0
mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java

@@ -187,4 +187,8 @@ public interface TaskRemoteService {
 	//大雅基本工资标记
 	@GetMapping("task/salaryMarkNew")
 	void salaryMarkNew();
+
+	//乐团云教练订单
+	@GetMapping("task/checkCloudOrderStart")
+	void checkCloudOrderStart();
 }

+ 5 - 0
mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java

@@ -232,4 +232,9 @@ public class TaskRemoteServiceFallback implements TaskRemoteService {
 	public void salaryMarkNew() {
 		logger.error("大雅基本工资标记失败");
 	}
+
+	@Override
+	public void checkCloudOrderStart() {
+		logger.error("乐团云教练订单生效处理失败");
+	}
 }

+ 19 - 0
mec-task/src/main/java/com/ym/mec/task/jobs/CloudTeacherOrderTask.java

@@ -0,0 +1,19 @@
+package com.ym.mec.task.jobs;
+
+import com.ym.mec.task.TaskRemoteService;
+import com.ym.mec.task.core.BaseTask;
+import com.ym.mec.task.core.TaskException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class CloudTeacherOrderTask extends BaseTask {
+
+	@Autowired
+	private TaskRemoteService taskRemoteService;
+
+	@Override
+	public void execute() throws TaskException {
+		taskRemoteService.checkCloudOrderStart();
+	}
+}

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

@@ -97,6 +97,10 @@ public class TaskController extends BaseController {
 
 	@Autowired
 	private StudentInstrumentService studentInstrumentService;
+
+	@Autowired
+	private CloudTeacherOrderService cloudTeacherOrderService;
+
 	@GetMapping(value = "/autoAffirmReceiveTask")
 	// 自动确认收货
 	public void affirmReceive(){
@@ -383,4 +387,10 @@ public class TaskController extends BaseController {
 	public void salaryMarkNew(Date startDay){
 		courseScheduleTeacherSalaryService.salaryMarkNew(startDay);
 	}
+
+	//处理未生效的乐团云教练订单
+	@GetMapping("/checkCloudOrderStart")
+	public void checkCloudOrderStart(){
+		cloudTeacherOrderService.checkCloudOrderStart();
+	}
 }