浏览代码

Merge branch 'children_day' into online1

周箭河 4 年之前
父节点
当前提交
ae21577bdd
共有 42 个文件被更改,包括 2560 次插入38 次删除
  1. 26 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ChildrenDayDegreeDetailDao.java
  2. 49 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ChildrenDayReserveDao.java
  3. 18 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/DegreeLevelFeeDao.java
  4. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java
  5. 17 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/OrganizationDegreeCourseFeeDao.java
  6. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysUserCashAccountDetailDao.java
  7. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysUserCoursesAccountDetailDao.java
  8. 43 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ChildrenStatisticsDetailDto.java
  9. 156 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ChildrenStatisticsDto.java
  10. 32 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/DegreeFeeDto.java
  11. 157 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/DegreePayDto.java
  12. 174 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ChildrenDayDegreeDetail.java
  13. 147 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ChildrenDayReserve.java
  14. 106 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/DegreeLevelFee.java
  15. 119 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/OrganizationDegreeCourseFee.java
  16. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysUserCashAccountDetail.java
  17. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysUserCoursesAccountDetail.java
  18. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/GroupType.java
  19. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderTypeEnum.java
  20. 56 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/ChildrenReserveQueryInfo.java
  21. 46 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/ExportUserAccountQueryInfo.java
  22. 46 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ChildrenDayDegreeDetailService.java
  23. 57 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ChildrenDayReserveService.java
  24. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java
  25. 162 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ChildrenDayDegreeDetailServiceImpl.java
  26. 327 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ChildrenDayReserveServiceImpl.java
  27. 5 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  28. 93 0
      mec-biz/src/main/resources/config/mybatis/ChildrenDayDegreeDetailDao.xml
  29. 168 0
      mec-biz/src/main/resources/config/mybatis/ChildrenDayReserveMapper.xml
  30. 60 0
      mec-biz/src/main/resources/config/mybatis/DegreeLevelFeeMapper.xml
  31. 16 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  32. 63 0
      mec-biz/src/main/resources/config/mybatis/OrganizationDegreeCourseFeeMapper.xml
  33. 18 3
      mec-biz/src/main/resources/config/mybatis/SysUserCashAccountDetailMapper.xml
  34. 18 3
      mec-biz/src/main/resources/config/mybatis/SysUserCoursesAccountDetailMapper.xml
  35. 10 0
      mec-common/common-core/src/main/java/com/ym/mec/common/entity/HttpResponseResult.java
  36. 94 0
      mec-student/src/main/java/com/ym/mec/student/controller/ChildrenDayController.java
  37. 1 1
      mec-student/src/main/java/com/ym/mec/student/controller/ReplacementInstrumentActivityController.java
  38. 64 0
      mec-web/src/main/java/com/ym/mec/web/controller/ChildrenReserveController.java
  39. 144 12
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  40. 8 0
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupController.java
  41. 2 2
      mec-web/src/main/java/com/ym/mec/web/controller/StudentRegistrationController.java
  42. 10 10
      mec-web/src/main/java/com/ym/mec/web/controller/TeacherController.java

+ 26 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ChildrenDayDegreeDetailDao.java

@@ -0,0 +1,26 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.ChildrenDayDegreeDetail;
+import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface ChildrenDayDegreeDetailDao extends BaseDAO<Integer, ChildrenDayDegreeDetail> {
+
+    /**
+     * 获取用户某种状态的报名详情
+     *
+     * @param userId
+     * @return
+     */
+    List<ChildrenDayDegreeDetail> getByUserIdAndStatus(@Param("userId") Integer userId, @Param("status") Integer status);
+
+    /**
+     * 批量插入购买详情
+     *
+     * @param details
+     * @return
+     */
+    int batchAdd(@Param("details") List<ChildrenDayDegreeDetail> details);
+}

+ 49 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ChildrenDayReserveDao.java

@@ -0,0 +1,49 @@
+package com.ym.mec.biz.dal.dao;
+
+
+import com.ym.mec.biz.dal.dto.ChildrenStatisticsDetailDto;
+import com.ym.mec.biz.dal.dto.ChildrenStatisticsDto;
+import com.ym.mec.biz.dal.entity.ChildrenDayReserve;
+import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface ChildrenDayReserveDao extends BaseDAO<Integer, ChildrenDayReserve> {
+
+    /**
+     * 获取后台考级活动列表
+     * @param params
+     * @return
+     */
+    List<ChildrenStatisticsDto> queryChildrenStatistics(Map<String, Object> params);
+
+    /**
+     * 获取后台考级活动列表
+     * @param params
+     * @return
+     */
+    int countChildrenStatistics(Map<String, Object> params);
+
+    /**
+     * 根据用户id获取用户预约信息
+     * @param userId
+     * @return
+     */
+    ChildrenDayReserve getByUserId(@Param("userId") Integer userId);
+
+    /**
+     * 获取后台考级活动详情列表
+     * @param params
+     * @return
+     */
+    int countChildrenStatisticsDetail(Map<String, Object> params);
+
+    /**
+     * 获取后台考级活动详情列表
+     * @param params
+     * @return
+     */
+    List<ChildrenStatisticsDetailDto> queryChildrenStatisticsDetail(Map<String, Object> params);
+}

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

@@ -0,0 +1,18 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.DegreeLevelFee;
+import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface DegreeLevelFeeDao extends BaseDAO<Long, DegreeLevelFee> {
+
+    /**
+     * 获取所有等级的报名费用
+     *
+     * @return
+     */
+    List<DegreeLevelFee> getAll();
+
+}

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

@@ -383,6 +383,7 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
 
     /**
      * 获取乐团合作单位进行中 、暂停、关闭 的乐团
+     *
      * @param cooperationOrganId
      * @param musicGroupId
      * @return
@@ -391,8 +392,19 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
 
     /**
      * 获取课程关联教务老师名称
+     *
      * @param courseIds
      * @return
      */
     List<Map<Long, String>> queryEduNameMapByCourseId(@Param("courseIds") List<Long> courseIds);
+
+    /**
+     * 获取学生最新的乐团
+     *
+     * @param userId
+     * @return
+     */
+    MusicGroup getStudentLastMusicGroup(@Param("userId") Integer userId);
+
+    List<MusicGroup> findByCooperationId(@Param("cooperationId") Integer cooperationOrganId, @Param("musicStatus") String musicStatus);
 }

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

@@ -0,0 +1,17 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.OrganizationDegreeCourseFee;
+import com.ym.mec.common.dal.BaseDAO;
+
+import java.util.List;
+
+public interface OrganizationDegreeCourseFeeDao extends BaseDAO<Long, OrganizationDegreeCourseFee> {
+
+    /**
+     * 获取考级的课程费用
+     *
+     * @param organId
+     * @return
+     */
+    OrganizationDegreeCourseFee getByOrganId(Integer organId);
+}

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

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
+import com.ym.mec.biz.dal.page.ExportUserAccountQueryInfo;
 import com.ym.mec.common.dal.BaseDAO;
 
 import org.apache.ibatis.annotations.Param;
@@ -38,5 +39,5 @@ public interface SysUserCashAccountDetailDao extends BaseDAO<Long, SysUserCashAc
     List<SysUserCashAccountDetail> queryAccountDetail(Map<String, Object> params);
     int countAccountDetails(Map<String, Object> params);
 
-    List<SysUserCashAccountDetail> exportDetail(Integer userId);
+    List<SysUserCashAccountDetail> exportDetail(@Param("queryInfo") ExportUserAccountQueryInfo queryInfo);
 }

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

@@ -1,12 +1,14 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.entity.SysUserCoursesAccountDetail;
+import com.ym.mec.biz.dal.page.ExportUserAccountQueryInfo;
 import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
 public interface SysUserCoursesAccountDetailDao extends BaseDAO<Long, SysUserCoursesAccountDetail> {
 
 
-    List<SysUserCoursesAccountDetail> exportDetail(Integer userId);
+    List<SysUserCoursesAccountDetail> exportDetail(@Param("queryInfo") ExportUserAccountQueryInfo queryInfo);
 }

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

@@ -0,0 +1,43 @@
+package com.ym.mec.biz.dal.dto;
+
+public class ChildrenStatisticsDetailDto {
+    private String username;
+
+    private String phone;
+
+    private Integer userId;
+
+    private boolean isReserve = false;
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public boolean getIsReserve() {
+        return isReserve;
+    }
+
+    public void setIsReserve(boolean reserve) {
+        isReserve = reserve;
+    }
+}

+ 156 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ChildrenStatisticsDto.java

@@ -0,0 +1,156 @@
+package com.ym.mec.biz.dal.dto;
+
+import java.math.BigDecimal;
+
+public class ChildrenStatisticsDto {
+
+    private Integer organId;
+
+    private Integer cooperationOrganId;
+
+    private String musicGroupId;
+
+    private String organName;
+
+    private String cooperationOrganName;
+
+    private  String musicGroupName;
+
+    private  Integer normalNum = 0;
+
+    private Integer reserveNum = 0;
+
+    private Integer noReserveNum = 0;
+
+    private Integer instrumentalMusicNum = 0;
+
+    private Integer musicTheoryNum = 0;
+
+    private Integer buyVipNum = 0;
+
+    private BigDecimal buyVipAmount = BigDecimal.ZERO;
+
+    private Integer buyMusicTheoryNum = 0;
+
+    private BigDecimal buyMusicTheoryAmount = BigDecimal.ZERO;
+
+    public Integer getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
+
+    public Integer getCooperationOrganId() {
+        return cooperationOrganId;
+    }
+
+    public void setCooperationOrganId(Integer cooperationOrganId) {
+        this.cooperationOrganId = cooperationOrganId;
+    }
+
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
+    public String getCooperationOrganName() {
+        return cooperationOrganName;
+    }
+
+    public void setCooperationOrganName(String cooperationOrganName) {
+        this.cooperationOrganName = cooperationOrganName;
+    }
+
+    public String getMusicGroupName() {
+        return musicGroupName;
+    }
+
+    public void setMusicGroupName(String musicGroupName) {
+        this.musicGroupName = musicGroupName;
+    }
+
+    public Integer getNormalNum() {
+        return normalNum;
+    }
+
+    public void setNormalNum(Integer normalNum) {
+        this.normalNum = normalNum;
+    }
+
+    public Integer getReserveNum() {
+        return reserveNum;
+    }
+
+    public void setReserveNum(Integer reserveNum) {
+        this.reserveNum = reserveNum;
+    }
+
+    public Integer getNoReserveNum() {
+        return noReserveNum;
+    }
+
+    public void setNoReserveNum(Integer noReserveNum) {
+        this.noReserveNum = noReserveNum;
+    }
+
+    public Integer getInstrumentalMusicNum() {
+        return instrumentalMusicNum;
+    }
+
+    public void setInstrumentalMusicNum(Integer instrumentalMusicNum) {
+        this.instrumentalMusicNum = instrumentalMusicNum;
+    }
+
+    public Integer getMusicTheoryNum() {
+        return musicTheoryNum;
+    }
+
+    public void setMusicTheoryNum(Integer musicTheoryNum) {
+        this.musicTheoryNum = musicTheoryNum;
+    }
+
+    public Integer getBuyVipNum() {
+        return buyVipNum;
+    }
+
+    public void setBuyVipNum(Integer buyVipNum) {
+        this.buyVipNum = buyVipNum;
+    }
+
+    public BigDecimal getBuyVipAmount() {
+        return buyVipAmount;
+    }
+
+    public void setBuyVipAmount(BigDecimal buyVipAmount) {
+        this.buyVipAmount = buyVipAmount;
+    }
+
+    public Integer getBuyMusicTheoryNum() {
+        return buyMusicTheoryNum;
+    }
+
+    public void setBuyMusicTheoryNum(Integer buyMusicTheoryNum) {
+        this.buyMusicTheoryNum = buyMusicTheoryNum;
+    }
+
+    public BigDecimal getBuyMusicTheoryAmount() {
+        return buyMusicTheoryAmount;
+    }
+
+    public void setBuyMusicTheoryAmount(BigDecimal buyMusicTheoryAmount) {
+        this.buyMusicTheoryAmount = buyMusicTheoryAmount;
+    }
+}

+ 32 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/DegreeFeeDto.java

@@ -0,0 +1,32 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.DegreeLevelFee;
+import com.ym.mec.biz.dal.entity.OrganizationDegreeCourseFee;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+
+public class DegreeFeeDto {
+
+    @ApiModelProperty(value = "考级费用")
+    private List<DegreeLevelFee> degreeLevelFee;
+
+    @ApiModelProperty(value = "考级教程费用")
+    private OrganizationDegreeCourseFee organizationDegreeCourseFee;
+
+    public OrganizationDegreeCourseFee getOrganizationDegreeCourseFee() {
+        return organizationDegreeCourseFee;
+    }
+
+    public void setOrganizationDegreeCourseFee(OrganizationDegreeCourseFee organizationDegreeCourseFee) {
+        this.organizationDegreeCourseFee = organizationDegreeCourseFee;
+    }
+
+    public List<DegreeLevelFee> getDegreeLevelFee() {
+        return degreeLevelFee;
+    }
+
+    public void setDegreeLevelFee(List<DegreeLevelFee> degreeLevelFee) {
+        this.degreeLevelFee = degreeLevelFee;
+    }
+}

+ 157 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/DegreePayDto.java

@@ -0,0 +1,157 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.auth.api.entity.SysUser;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+
+public class DegreePayDto {
+    private Integer userId;
+
+    private Integer organId;
+
+    @ApiModelProperty(value = "声部")
+    private Integer subject;
+
+    @ApiModelProperty(value = "器乐考级等级")
+    private Integer musicGradeLevel;
+
+    @ApiModelProperty(value = "乐理等级")
+    private Integer theoryLevel;
+
+    @ApiModelProperty(value = "vip 1v1")
+    private boolean vip1v1 = false;
+
+    @ApiModelProperty(value = "vip 1v2")
+    private Boolean vip1v2 = false;
+
+    @ApiModelProperty(value = "乐理课程")
+    private Boolean theoryCourse = false;
+
+    @ApiModelProperty(value = "支付金额", required = true)
+    private BigDecimal amount;
+
+    @ApiModelProperty(value = "是否使用余额", required = true)
+    private Boolean useBalance = false;
+
+    @ApiModelProperty(value = "重新支付", required = true)
+    private Boolean rePay = false;
+
+    private SysUser user;
+
+    private Long orderId;
+
+    private Integer reserveId;
+
+    public Integer getSubject() {
+        return subject;
+    }
+
+    public void setSubject(Integer subject) {
+        this.subject = subject;
+    }
+
+    public Integer getMusicGradeLevel() {
+        return musicGradeLevel;
+    }
+
+    public void setMusicGradeLevel(Integer musicGradeLevel) {
+        this.musicGradeLevel = musicGradeLevel;
+    }
+
+    public Integer getTheoryLevel() {
+        return theoryLevel;
+    }
+
+    public void setTheoryLevel(Integer theoryLevel) {
+        this.theoryLevel = theoryLevel;
+    }
+
+    public boolean getVip1v1() {
+        return vip1v1;
+    }
+
+    public void setVip1v1(boolean vip1v1) {
+        this.vip1v1 = vip1v1;
+    }
+
+    public Boolean getVip1v2() {
+        return vip1v2;
+    }
+
+    public void setVip1v2(Boolean vip1v2) {
+        this.vip1v2 = vip1v2;
+    }
+
+    public Boolean getTheoryCourse() {
+        return theoryCourse;
+    }
+
+    public void setTheoryCourse(Boolean theoryCourse) {
+        this.theoryCourse = theoryCourse;
+    }
+
+    public BigDecimal getAmount() {
+        return amount;
+    }
+
+    public void setAmount(BigDecimal amount) {
+        this.amount = amount;
+    }
+
+    public Boolean getUseBalance() {
+        return useBalance;
+    }
+
+    public void setUseBalance(Boolean useBalance) {
+        this.useBalance = useBalance;
+    }
+
+    public Boolean getRePay() {
+        return rePay;
+    }
+
+    public void setRePay(Boolean rePay) {
+        this.rePay = rePay;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public Integer getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
+
+    public SysUser getUser() {
+        return user;
+    }
+
+    public void setUser(SysUser user) {
+        this.user = user;
+    }
+
+    public Long getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(Long orderId) {
+        this.orderId = orderId;
+    }
+
+    public Integer getReserveId() {
+        return reserveId;
+    }
+
+    public void setReserveId(Integer reserveId) {
+        this.reserveId = reserveId;
+    }
+}

+ 174 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ChildrenDayDegreeDetail.java

@@ -0,0 +1,174 @@
+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-ChindrenDayDegreeDetail")
+public class ChildrenDayDegreeDetail {
+    @ApiModelProperty(value="")
+    private Integer id;
+
+    /**
+    * 预约id
+    */
+    @ApiModelProperty(value="预约id")
+    private Integer reserveId;
+
+    /**
+    * 学生id
+    */
+    @ApiModelProperty(value="学生id")
+    private Integer userId;
+
+    /**
+    * 类型 1-乐器考级 2-乐理考级 3-vip 4-乐理
+    */
+    @ApiModelProperty(value="类型 1-乐器考级 2-乐理考级 3-vip 4-乐理")
+    private Integer type;
+
+    /**
+    * 声部id
+    */
+    @ApiModelProperty(value="声部id")
+    private Integer subjectId;
+
+    /**
+    * 考级等级
+    */
+    @ApiModelProperty(value="考级等级")
+    private Integer level;
+
+    /**
+    * 价格
+    */
+    @ApiModelProperty(value="价格")
+    private BigDecimal price;
+
+    /**
+    * 1-支付中 2-已支付 3-支付失败
+    */
+    @ApiModelProperty(value="1-支付中 2-已支付 3-支付失败")
+    private Integer status;
+
+    /**
+     * 关联订单id
+     */
+    @ApiModelProperty(value="关联订单号")
+    private Long orderId;
+
+    @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 getReserveId() {
+        return reserveId;
+    }
+
+    public void setReserveId(Integer reserveId) {
+        this.reserveId = reserveId;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public Integer getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Integer subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public Integer getLevel() {
+        return level;
+    }
+
+    public void setLevel(Integer level) {
+        this.level = level;
+    }
+
+    public BigDecimal getPrice() {
+        return price;
+    }
+
+    public void setPrice(BigDecimal price) {
+        this.price = price;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    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(", reserveId=").append(reserveId);
+        sb.append(", userId=").append(userId);
+        sb.append(", type=").append(type);
+        sb.append(", subjectId=").append(subjectId);
+        sb.append(", level=").append(level);
+        sb.append(", price=").append(price);
+        sb.append(", status=").append(status);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", updateTime=").append(updateTime);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public Long getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(Long orderId) {
+        this.orderId = orderId;
+    }
+}

+ 147 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ChildrenDayReserve.java

@@ -0,0 +1,147 @@
+package com.ym.mec.biz.dal.entity;
+
+import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.util.Date;
+
+@ApiModel(value="com-domain-ChildrenDayReserve")
+public class ChildrenDayReserve {
+    @ApiModelProperty(value="")
+    private Integer id;
+
+    /**
+    * 用户id
+    */
+    @ApiModelProperty(value="用户id")
+    private Integer userId;
+
+    /**
+    * 分部id
+    */
+    @ApiModelProperty(value="分部id")
+    private Integer organId;
+
+    /**
+    * 合作单位id
+    */
+    @ApiModelProperty(value="合作单位id")
+    private Integer cooperationOrganId;
+
+    /**
+    * 乐团id
+    */
+    @ApiModelProperty(value="乐团id")
+    private String musicGroupId;
+
+    /**
+    * 是否预约 0-否 1-是
+    */
+    @ApiModelProperty(value="是否预约 0-否 1-是")
+    private YesOrNoEnum isReserve;
+
+    /**
+    * 创建时间
+    */
+    @ApiModelProperty(value="创建时间")
+    private Date createTime;
+
+    /**
+    * 更新时间
+    */
+    @ApiModelProperty(value="更新时间")
+    private Date updateTime;
+
+    @ApiModelProperty(value = "当前的缴费状态 0-正常 1-缴费中")
+    private Integer payStatus = 0;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public Integer getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
+
+    public Integer getCooperationOrganId() {
+        return cooperationOrganId;
+    }
+
+    public void setCooperationOrganId(Integer cooperationOrganId) {
+        this.cooperationOrganId = cooperationOrganId;
+    }
+
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+
+    public YesOrNoEnum getIsReserve() {
+        return isReserve;
+    }
+
+    public void setIsReserve(YesOrNoEnum isReserve) {
+        this.isReserve = isReserve;
+    }
+
+    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(", userId=").append(userId);
+        sb.append(", organId=").append(organId);
+        sb.append(", cooperationOrganId=").append(cooperationOrganId);
+        sb.append(", musicGroupId=").append(musicGroupId);
+        sb.append(", isReserve=").append(isReserve);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", updateTime=").append(updateTime);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public Integer getPayStatus() {
+        return payStatus;
+    }
+
+    public void setPayStatus(Integer payStatus) {
+        this.payStatus = payStatus;
+    }
+}

+ 106 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/DegreeLevelFee.java

@@ -0,0 +1,106 @@
+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-DegreeLevelFee")
+public class DegreeLevelFee {
+    @ApiModelProperty(value="")
+    private Integer id;
+
+    /**
+    * 等级
+    */
+    @ApiModelProperty(value="等级")
+    private Integer level;
+
+    /**
+    * 乐器考级费用
+    */
+    @ApiModelProperty(value="乐器考级费用")
+    private BigDecimal grade;
+
+    /**
+    * 乐理费用
+    */
+    @ApiModelProperty(value="乐理费用")
+    private BigDecimal theory;
+
+    /**
+    * 创建时间
+    */
+    @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 getLevel() {
+        return level;
+    }
+
+    public void setLevel(Integer level) {
+        this.level = level;
+    }
+
+    public BigDecimal getGrade() {
+        return grade;
+    }
+
+    public void setGrade(BigDecimal grade) {
+        this.grade = grade;
+    }
+
+    public BigDecimal getTheory() {
+        return theory;
+    }
+
+    public void setTheory(BigDecimal theory) {
+        this.theory = theory;
+    }
+
+    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(", level=").append(level);
+        sb.append(", grade=").append(grade);
+        sb.append(", theory=").append(theory);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", updateTime=").append(updateTime);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 119 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/OrganizationDegreeCourseFee.java

@@ -0,0 +1,119 @@
+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-OrganizationDegreeCourseFee")
+public class OrganizationDegreeCourseFee {
+    @ApiModelProperty(value="")
+    private Integer id;
+
+    /**
+    * 分部id
+    */
+    @ApiModelProperty(value="分部id")
+    private Integer organId;
+
+    /**
+    * vip 1v1课价格
+    */
+    @ApiModelProperty(value="vip 1v1课价格")
+    private BigDecimal vip1v1;
+
+    /**
+     * vip 1v2课价格
+     */
+    @ApiModelProperty(value="vip 1v2课价格")
+    private BigDecimal vip1v2;
+
+    /**
+    * 乐理课价格
+    */
+    @ApiModelProperty(value="乐理课价格")
+    private BigDecimal theory;
+
+    /**
+    * 创建时间
+    */
+    @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 getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
+
+    public BigDecimal getVip1v1() {
+        return vip1v1;
+    }
+
+    public void setVip1v1(BigDecimal vip1v1) {
+        this.vip1v1 = vip1v1;
+    }
+
+    public BigDecimal getVip1v2() {
+        return vip1v2;
+    }
+
+    public void setVip1v2(BigDecimal vip1v2) {
+        this.vip1v2 = vip1v2;
+    }
+
+    public BigDecimal getTheory() {
+        return theory;
+    }
+
+    public void setTheory(BigDecimal theory) {
+        this.theory = theory;
+    }
+
+    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(", organId=").append(organId);
+        sb.append(", theory=").append(theory);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", updateTime=").append(updateTime);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysUserCashAccountDetail.java

@@ -88,6 +88,16 @@ public class SysUserCashAccountDetail {
 	@ApiModelProperty(value = "平台账户号",required = false)
 	private String platformAccountNo;
 
+	private String organName;
+
+	public String getOrganName() {
+		return organName;
+	}
+
+	public void setOrganName(String organName) {
+		this.organName = organName;
+	}
+
 	public String getPhone() {
 		return phone;
 	}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysUserCoursesAccountDetail.java

@@ -65,6 +65,16 @@ public class SysUserCoursesAccountDetail {
 	/** 平台账户号 */
 	private String platformAccountNo;
 
+	private String organName;
+
+	public String getOrganName() {
+		return organName;
+	}
+
+	public void setOrganName(String organName) {
+		this.organName = organName;
+	}
+
 	public String getPhone() {
 		return phone;
 	}

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

@@ -14,7 +14,8 @@ public enum GroupType implements BaseEnum<String, GroupType> {
 	OUTORDER("外部订单"),
 	SUBJECT_CHANGE("声部更换"),
 	MAINTENANCE("乐保"),
-	REPLACEMENT("乐器置换");
+	REPLACEMENT("乐器置换"),
+	DEGREE("6.1考级活动");
 
 	private String desc;
 

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

@@ -23,7 +23,8 @@ public enum OrderTypeEnum implements BaseEnum<String, OrderTypeEnum> {
 	SUBJECT_CHANGE("SUBJECT_CHANGE","声部更换"),
 	DEGREE_REGISTRATION("DEGREE_REGISTRATION", "考级报名"),
 	MAINTENANCE("MAINTENANCE","乐保"),
-	REPLACEMENT("REPLACEMENT","乐器置换");
+	REPLACEMENT("REPLACEMENT","乐器置换"),
+	DEGREE("DEGREE","6.1考级活动");
 
 
 	private String code;

+ 56 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/ChildrenReserveQueryInfo.java

@@ -0,0 +1,56 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+
+public class ChildrenReserveQueryInfo extends QueryInfo {
+
+    private String organId;
+
+    private Integer cooperationId;
+
+    private String musicGroupId;
+
+    private Integer isReserve;
+
+    private Integer subjectId;
+
+    public Integer getIsReserve() {
+        return isReserve;
+    }
+
+    public void setIsReserve(Integer isReserve) {
+        this.isReserve = isReserve;
+    }
+
+    public Integer getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Integer subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public String getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(String organId) {
+        this.organId = organId;
+    }
+
+    public Integer getCooperationId() {
+        return cooperationId;
+    }
+
+    public void setCooperationId(Integer cooperationId) {
+        this.cooperationId = cooperationId;
+    }
+
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+}

+ 46 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/ExportUserAccountQueryInfo.java

@@ -0,0 +1,46 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+
+public class ExportUserAccountQueryInfo extends QueryInfo {
+
+    private Integer userId;
+
+    private String startTime;
+
+    private String endTime;
+
+    private String organId;
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(String startTime) {
+        this.startTime = startTime;
+    }
+
+    public String getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(String endTime) {
+        this.endTime = endTime;
+    }
+
+    public String getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(String organId) {
+        this.organId = organId;
+    }
+}

+ 46 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ChildrenDayDegreeDetailService.java

@@ -0,0 +1,46 @@
+package com.ym.mec.biz.service;
+
+
+import com.ym.mec.biz.dal.dto.DegreePayDto;
+import com.ym.mec.biz.dal.entity.ChildrenDayDegreeDetail;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
+import com.ym.mec.common.service.BaseService;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+public interface ChildrenDayDegreeDetailService extends BaseService<Integer, ChildrenDayDegreeDetail> {
+
+    /**
+     * 获取用户报名详情
+     *
+     * @param userId
+     * @return
+     */
+    List<ChildrenDayDegreeDetail> getByUserIdAndStatus(Integer userId, Integer status);
+
+    /**
+     * 增加考级支付详情
+     * @param degreePayDto
+     * @param gradeFee
+     * @param theoryLevelFee
+     * @param vip1v1Fee
+     * @param vip1v2Fee
+     * @param theoryCourseFee
+     * @return
+     */
+    List<ChildrenDayDegreeDetail> addDegreeDetails(DegreePayDto degreePayDto, BigDecimal gradeFee,BigDecimal theoryLevelFee,BigDecimal vip1v1Fee,BigDecimal vip1v2Fee,BigDecimal theoryCourseFee);
+
+    /**
+     * 增加考级订单详情
+     * @param degreePayDto
+     * @param gradeFee
+     * @param theoryLevelFee
+     * @param vip1v1Fee
+     * @param vip1v2Fee
+     * @param theoryCourseFee
+     * @return
+     */
+    List<StudentPaymentOrderDetail> addOrderDetails(DegreePayDto degreePayDto, BigDecimal gradeFee, BigDecimal theoryLevelFee, BigDecimal vip1v1Fee, BigDecimal vip1v2Fee, BigDecimal theoryCourseFee);
+
+}

+ 57 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ChildrenDayReserveService.java

@@ -0,0 +1,57 @@
+package com.ym.mec.biz.service;
+
+
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.entity.ChildrenDayReserve;
+import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.page.ChildrenReserveQueryInfo;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.service.BaseService;
+
+import java.util.Map;
+
+public interface ChildrenDayReserveService extends BaseService<Integer, ChildrenDayReserve> {
+
+    /**
+     * 填加占位
+     *
+     * @param user
+     * @param status
+     * @return
+     */
+    ChildrenDayReserve addReserve(SysUser user, YesOrNoEnum status);
+
+
+    /**
+     * 获取用户的占位信息
+     *
+     * @param userId
+     * @return
+     */
+    ChildrenDayReserve getUserReserve(Integer userId);
+
+    PageInfo<ChildrenStatisticsDto> queryStatisticsPage(ChildrenReserveQueryInfo queryInfo);
+
+    /**
+     * 获取活动的费用信息
+     * @param organId
+     * @return
+     */
+    DegreeFeeDto getFeeInfo(Integer organId);
+
+    /**
+     * 获取后台考级活动详情列表
+     * @param queryInfo
+     * @return
+     */
+    PageInfo<ChildrenStatisticsDetailDto> queryStatisticsDetailPage(ChildrenReserveQueryInfo queryInfo);
+
+    /**
+     * 6.1考级活动支付
+     *
+     * @return
+     * @throws Exception
+     */
+    Map pay(DegreePayDto degreePayDto) throws Exception;
+}

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

@@ -365,4 +365,11 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
 	 * @return 关闭结果
 	 */
 	Boolean closeMusicGroup(CloseMusicGroupDto closeMusicGroupDto);
+
+	/**
+	 * 根据合作单位获取所有乐团列表
+	 * @param cooperationId
+	 * @return
+	 */
+	List<MusicGroup> findByCooperationId(Integer cooperationId);
 }

+ 162 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ChildrenDayDegreeDetailServiceImpl.java

@@ -0,0 +1,162 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.dto.DegreePayDto;
+import com.ym.mec.biz.dal.entity.ChildrenDayDegreeDetail;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
+import com.ym.mec.biz.service.ChildrenDayDegreeDetailService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class ChildrenDayDegreeDetailServiceImpl extends BaseServiceImpl<Integer, ChildrenDayDegreeDetail> implements ChildrenDayDegreeDetailService {
+    @Autowired
+    private ChildrenDayDegreeDetailDao childrenDayDegreeDetailDao;
+
+    @Override
+    public BaseDAO<Integer, ChildrenDayDegreeDetail> getDAO() {
+        return childrenDayDegreeDetailDao;
+    }
+
+    @Override
+    public List<ChildrenDayDegreeDetail> getByUserIdAndStatus(Integer userId, Integer status) {
+        return childrenDayDegreeDetailDao.getByUserIdAndStatus(userId, status);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public List<ChildrenDayDegreeDetail> addDegreeDetails(DegreePayDto degreePayDto, BigDecimal gradeFee, BigDecimal theoryLevelFee, BigDecimal vip1v1Fee, BigDecimal vip1v2Fee, BigDecimal theoryCourseFee) {
+        List<ChildrenDayDegreeDetail> childrenDayDegreeDetails = new ArrayList<>();
+        if (degreePayDto.getMusicGradeLevel() != null) {
+            ChildrenDayDegreeDetail childrenDayDegreeDetail = new ChildrenDayDegreeDetail();
+            childrenDayDegreeDetail.setReserveId(degreePayDto.getReserveId());
+            childrenDayDegreeDetail.setUserId(degreePayDto.getUserId());
+            childrenDayDegreeDetail.setType(1);
+            childrenDayDegreeDetail.setSubjectId(degreePayDto.getSubject());
+            childrenDayDegreeDetail.setLevel(degreePayDto.getMusicGradeLevel());
+            childrenDayDegreeDetail.setPrice(gradeFee);
+            childrenDayDegreeDetail.setStatus(1);
+            childrenDayDegreeDetail.setOrderId(degreePayDto.getOrderId());
+            childrenDayDegreeDetails.add(childrenDayDegreeDetail);
+        }
+        if (degreePayDto.getTheoryLevel() != null) {
+            ChildrenDayDegreeDetail childrenDayDegreeDetail = new ChildrenDayDegreeDetail();
+            childrenDayDegreeDetail.setReserveId(degreePayDto.getReserveId());
+            childrenDayDegreeDetail.setUserId(degreePayDto.getUserId());
+            childrenDayDegreeDetail.setType(2);
+            childrenDayDegreeDetail.setLevel(degreePayDto.getTheoryLevel());
+            childrenDayDegreeDetail.setPrice(theoryLevelFee);
+            childrenDayDegreeDetail.setStatus(1);
+            childrenDayDegreeDetail.setOrderId(degreePayDto.getOrderId());
+            childrenDayDegreeDetails.add(childrenDayDegreeDetail);
+        }
+        if (degreePayDto.getVip1v1()) {
+            ChildrenDayDegreeDetail childrenDayDegreeDetail = new ChildrenDayDegreeDetail();
+            childrenDayDegreeDetail.setReserveId(degreePayDto.getReserveId());
+            childrenDayDegreeDetail.setUserId(degreePayDto.getUserId());
+            childrenDayDegreeDetail.setType(3);
+            childrenDayDegreeDetail.setPrice(vip1v1Fee);
+            childrenDayDegreeDetail.setStatus(1);
+            childrenDayDegreeDetail.setOrderId(degreePayDto.getOrderId());
+            childrenDayDegreeDetails.add(childrenDayDegreeDetail);
+        }
+        if (degreePayDto.getVip1v2()) {
+            ChildrenDayDegreeDetail childrenDayDegreeDetail = new ChildrenDayDegreeDetail();
+            childrenDayDegreeDetail.setReserveId(degreePayDto.getReserveId());
+            childrenDayDegreeDetail.setUserId(degreePayDto.getUserId());
+            childrenDayDegreeDetail.setType(4);
+            childrenDayDegreeDetail.setPrice(vip1v2Fee);
+            childrenDayDegreeDetail.setStatus(1);
+            childrenDayDegreeDetail.setOrderId(degreePayDto.getOrderId());
+            childrenDayDegreeDetails.add(childrenDayDegreeDetail);
+        }
+        if (degreePayDto.getTheoryCourse()) {
+            ChildrenDayDegreeDetail childrenDayDegreeDetail = new ChildrenDayDegreeDetail();
+            childrenDayDegreeDetail.setReserveId(degreePayDto.getReserveId());
+            childrenDayDegreeDetail.setUserId(degreePayDto.getUserId());
+            childrenDayDegreeDetail.setType(5);
+            childrenDayDegreeDetail.setPrice(theoryCourseFee);
+            childrenDayDegreeDetail.setStatus(1);
+            childrenDayDegreeDetail.setOrderId(degreePayDto.getOrderId());
+            childrenDayDegreeDetails.add(childrenDayDegreeDetail);
+        }
+        childrenDayDegreeDetailDao.batchAdd(childrenDayDegreeDetails);
+        return childrenDayDegreeDetails;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public List<StudentPaymentOrderDetail> addOrderDetails(DegreePayDto degreePayDto, BigDecimal gradeFee, BigDecimal theoryLevelFee, BigDecimal vip1v1Fee, BigDecimal vip1v2Fee, BigDecimal theoryCourseFee) {
+
+//        Date nowDate = new Date();
+//        List<StudentPaymentOrderDetail> orderDetails = new ArrayList<>();
+//        if (degreePayDto.getMusicGradeLevel() != null) {
+//            StudentPaymentOrderDetail detail = new StudentPaymentOrderDetail();
+//            detail.setType(OrderDetailTypeEnum.CLOUD_TEACHER);
+//            detail.setPrice(cloudTeacherPrice);
+//            detail.setRemitFee(BigDecimal.ZERO);
+//            detail.setCreateTime(nowDate);
+//            detail.setUpdateTime(nowDate);
+//            detail.setPaymentOrderId(degreePayDto.getOrderId());
+//            detail.setIsRenew(0);
+//            orderDetails.add(detail);
+//        }
+//        if (degreePayDto.getTheoryLevel() != null) {
+//            ChildrenDayDegreeDetail childrenDayDegreeDetail = new ChildrenDayDegreeDetail();
+//            childrenDayDegreeDetail.setReserveId(degreePayDto.getReserveId());
+//            childrenDayDegreeDetail.setUserId(degreePayDto.getUserId());
+//            childrenDayDegreeDetail.setType(2);
+//            childrenDayDegreeDetail.setLevel(degreePayDto.getTheoryLevel());
+//            childrenDayDegreeDetail.setPrice(theoryLevelFee);
+//            childrenDayDegreeDetail.setStatus(1);
+//            childrenDayDegreeDetail.setOrderId(degreePayDto.getOrderId());
+//            childrenDayDegreeDetails.add(childrenDayDegreeDetail);
+//        }
+//        if (degreePayDto.getVip1v1()) {
+//            ChildrenDayDegreeDetail childrenDayDegreeDetail = new ChildrenDayDegreeDetail();
+//            childrenDayDegreeDetail.setReserveId(degreePayDto.getReserveId());
+//            childrenDayDegreeDetail.setUserId(degreePayDto.getUserId());
+//            childrenDayDegreeDetail.setType(3);
+//            childrenDayDegreeDetail.setPrice(vip1v1Fee);
+//            childrenDayDegreeDetail.setStatus(1);
+//            childrenDayDegreeDetail.setOrderId(degreePayDto.getOrderId());
+//            childrenDayDegreeDetails.add(childrenDayDegreeDetail);
+//        }
+//        if (degreePayDto.getVip1v2()) {
+//            ChildrenDayDegreeDetail childrenDayDegreeDetail = new ChildrenDayDegreeDetail();
+//            childrenDayDegreeDetail.setReserveId(degreePayDto.getReserveId());
+//            childrenDayDegreeDetail.setUserId(degreePayDto.getUserId());
+//            childrenDayDegreeDetail.setType(4);
+//            childrenDayDegreeDetail.setPrice(vip1v2Fee);
+//            childrenDayDegreeDetail.setStatus(1);
+//            childrenDayDegreeDetail.setOrderId(degreePayDto.getOrderId());
+//            childrenDayDegreeDetails.add(childrenDayDegreeDetail);
+//        }
+//        if (degreePayDto.getTheoryCourse()) {
+//            ChildrenDayDegreeDetail childrenDayDegreeDetail = new ChildrenDayDegreeDetail();
+//            childrenDayDegreeDetail.setReserveId(degreePayDto.getReserveId());
+//            childrenDayDegreeDetail.setUserId(degreePayDto.getUserId());
+//            childrenDayDegreeDetail.setType(5);
+//            childrenDayDegreeDetail.setPrice(theoryCourseFee);
+//            childrenDayDegreeDetail.setStatus(1);
+//            childrenDayDegreeDetail.setOrderId(degreePayDto.getOrderId());
+//            childrenDayDegreeDetails.add(childrenDayDegreeDetail);
+//        }
+//        childrenDayDegreeDetailDao.batchAdd(childrenDayDegreeDetails);
+//        return childrenDayDegreeDetails;
+//
+//
+//        StudentPaymentOrderDetail cloudTeacherOrderDetail = new StudentPaymentOrderDetail();
+        return null;
+
+    }
+}

+ 327 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ChildrenDayReserveServiceImpl.java

@@ -0,0 +1,327 @@
+package com.ym.mec.biz.service.impl;
+
+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.enums.*;
+import com.ym.mec.biz.dal.page.ChildrenReserveQueryInfo;
+import com.ym.mec.biz.service.*;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.service.IdGeneratorService;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.util.collection.MapUtil;
+import com.ym.mec.util.date.DateUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, ChildrenDayReserve> implements ChildrenDayReserveService {
+
+    @Autowired
+    private ChildrenDayReserveDao childrenDayReserveDao;
+    @Autowired
+    private MusicGroupDao musicGroupDao;
+    @Autowired
+    private DegreeLevelFeeDao degreeLevelFeeDao;
+    @Autowired
+    private OrganizationDegreeCourseFeeDao organizationDegreeCourseFeeDao;
+    @Autowired
+    private StudentDao studentDao;
+    @Autowired
+    private ChildrenDayDegreeDetailService childrenDayDegreeDetailService;
+    @Autowired
+    private StudentPaymentOrderService studentPaymentOrderService;
+    @Autowired
+    private SysConfigDao sysConfigDao;
+    @Autowired
+    private IdGeneratorService idGeneratorService;
+    @Autowired
+    private StudentPaymentRouteOrderService studentPaymentRouteOrderService;
+    @Autowired
+    private PayService payService;
+
+    @Override
+    public BaseDAO<Integer, ChildrenDayReserve> getDAO() {
+        return childrenDayReserveDao;
+    }
+
+    @Override
+    public ChildrenDayReserve addReserve(SysUser user, YesOrNoEnum status) {
+        Date nowTime = new Date();
+        String startTimeStr = sysConfigDao.findConfigValue("children_day_start_time");
+        Date startTime = DateUtil.stringToDate(startTimeStr);
+        if (startTime.compareTo(nowTime) > 0) {
+            throw new BizException("活动还未开始,谢谢关注");
+        }
+        String endTimeStr = sysConfigDao.findConfigValue("children_day_end_time");
+        Date endTime = DateUtil.stringToDate(endTimeStr);
+        if (endTime.compareTo(nowTime) <= 0) {
+            throw new BizException("活动已结束,谢谢关注");
+        }
+
+        ChildrenDayReserve hasOne = childrenDayReserveDao.getByUserId(user.getId());
+        if (hasOne != null) {
+            throw new BizException("您已预报名");
+        }
+        studentDao.lockUser(user.getId());
+        MusicGroup studentLastMusicGroup = musicGroupDao.getStudentLastMusicGroup(user.getId());
+        ChildrenDayReserve childrenDayReserve = new ChildrenDayReserve();
+        childrenDayReserve.setUserId(user.getId());
+        childrenDayReserve.setOrganId(user.getOrganId());
+        childrenDayReserve.setIsReserve(status);
+        if (studentLastMusicGroup != null) {
+            childrenDayReserve.setCooperationOrganId(studentLastMusicGroup.getCooperationOrganId());
+            childrenDayReserve.setMusicGroupId(studentLastMusicGroup.getId());
+        }
+        childrenDayReserveDao.insert(childrenDayReserve);
+        return childrenDayReserve;
+    }
+
+    @Override
+    public ChildrenDayReserve getUserReserve(Integer userId) {
+        return childrenDayReserveDao.getByUserId(userId);
+    }
+
+    @Override
+    public PageInfo<ChildrenStatisticsDto> queryStatisticsPage(ChildrenReserveQueryInfo queryInfo) {
+        PageInfo<ChildrenStatisticsDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<ChildrenStatisticsDto> dataList = null;
+        int count = childrenDayReserveDao.countChildrenStatistics(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = childrenDayReserveDao.queryChildrenStatistics(params);
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    @Override
+    public DegreeFeeDto getFeeInfo(Integer organId) {
+        List<DegreeLevelFee> degreeLevelFee = degreeLevelFeeDao.getAll();
+        OrganizationDegreeCourseFee courseFee = organizationDegreeCourseFeeDao.getByOrganId(organId);
+        DegreeFeeDto degreeFeeDto = new DegreeFeeDto();
+        degreeFeeDto.setDegreeLevelFee(degreeLevelFee);
+        degreeFeeDto.setOrganizationDegreeCourseFee(courseFee);
+        return degreeFeeDto;
+    }
+
+    @Override
+    public PageInfo<ChildrenStatisticsDetailDto> queryStatisticsDetailPage(ChildrenReserveQueryInfo queryInfo) {
+        PageInfo<ChildrenStatisticsDetailDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<ChildrenStatisticsDetailDto> dataList = null;
+        int count = childrenDayReserveDao.countChildrenStatisticsDetail(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = childrenDayReserveDao.queryChildrenStatisticsDetail(params);
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Map pay(DegreePayDto degreePayDto) throws Exception {
+        studentDao.lockUser(degreePayDto.getUserId());
+
+        if (degreePayDto.getTheoryLevel() != null && !degreePayDto.getTheoryCourse()) {
+            throw new BizException("参加乐理考试,请选乐理考级专项训练课");
+        }
+
+        //检查进行中的订单
+        List<ChildrenDayDegreeDetail> details = childrenDayDegreeDetailService.getByUserIdAndStatus(degreePayDto.getUserId(), 1);
+
+        //处理关闭订单
+        if (details.size() > 0 && degreePayDto.getRePay()) {
+            Long orderId = details.get(0).getOrderId();
+            StudentPaymentOrder oldOrder = studentPaymentOrderService.get(orderId);
+            if (oldOrder != null) {
+                oldOrder.setStatus(DealStatusEnum.FAILED);
+                oldOrder.setMemo("用户手动关闭");
+                studentPaymentOrderService.callOrderCallBack(oldOrder);
+            }
+        }
+
+        //检查已经购买的课程(不能重复)
+        details = childrenDayDegreeDetailService.getByUserIdAndStatus(degreePayDto.getUserId(), 2);
+        Set<Integer> detailTypes = details.stream().map(ChildrenDayDegreeDetail::getType).collect(Collectors.toSet());
+        if (degreePayDto.getVip1v1() && detailTypes.contains(3)) {
+            throw new BizException("您已购买过VIP 1V1课程,请勿重复选择");
+        }
+
+        if (degreePayDto.getVip1v2() && detailTypes.contains(4)) {
+            throw new BizException("您已购买过VIP 1V2课程,请勿重复选择");
+        }
+
+        if (degreePayDto.getTheoryCourse() && detailTypes.contains(5)) {
+            throw new BizException("您已购买过乐理考级专项训练课,请勿重复选择");
+        }
+        //检查器乐考级等级是否重复
+        if (degreePayDto.getMusicGradeLevel() != null) {
+            if (degreePayDto.getSubject() == null) {
+                throw new BizException("请选择考级声部");
+            }
+            List<ChildrenDayDegreeDetail> hasList = details.stream().filter(e -> e.getType().equals(1)).filter(e -> e.getSubjectId().equals(degreePayDto.getSubject()))
+                    .filter(e -> e.getLevel().equals(degreePayDto.getMusicGradeLevel())).collect(Collectors.toList());
+            if (hasList.size() > 0) {
+                throw new BizException("您已报考同声部同等级,请勿重复报考");
+            }
+        }
+
+        //检查乐理考级等级是否重复
+        if (degreePayDto.getTheoryLevel() != null) {
+            List<ChildrenDayDegreeDetail> hasList = details.stream().filter(e -> e.getType().equals(2))
+                    .filter(e -> e.getLevel().equals(degreePayDto.getMusicGradeLevel())).collect(Collectors.toList());
+            if (hasList.size() > 0) {
+                throw new BizException("您已报考同等级乐理,请勿重复报考");
+            }
+        }
+
+        ChildrenDayReserve userReserve = this.getUserReserve(degreePayDto.getUserId());
+
+        if (userReserve == null) {
+            userReserve = this.addReserve(degreePayDto.getUser(), YesOrNoEnum.NO);
+        }
+        degreePayDto.setReserveId(userReserve.getId());
+
+        //获取课程的价格
+        OrganizationDegreeCourseFee courseFee = organizationDegreeCourseFeeDao.getByOrganId(degreePayDto.getOrganId());
+
+        if (courseFee == null) {
+            throw new BizException("刚前分部不参与,谢谢关注");
+        }
+
+        List<DegreeLevelFee> degreeLevelFees = degreeLevelFeeDao.getAll();
+
+        //订单总金额
+        BigDecimal orderAmount = BigDecimal.ZERO;
+
+        //器乐考级费用
+        BigDecimal gradeFee = BigDecimal.ZERO;
+        if (degreePayDto.getMusicGradeLevel() != null) {
+            gradeFee = degreeLevelFees.stream().filter(e -> e.getLevel().equals(degreePayDto.getMusicGradeLevel())).map(DegreeLevelFee::getGrade).reduce(BigDecimal.ZERO, BigDecimal::add);
+            orderAmount = orderAmount.add(gradeFee);
+        }
+
+        //乐理考级费用
+        BigDecimal theoryLevelFee = BigDecimal.ZERO;
+        if (degreePayDto.getTheoryLevel() != null) {
+            theoryLevelFee = degreeLevelFees.stream().filter(e -> e.getLevel().equals(degreePayDto.getTheoryLevel())).map(DegreeLevelFee::getTheory).reduce(BigDecimal.ZERO, BigDecimal::add);
+            orderAmount = orderAmount.add(theoryLevelFee);
+        }
+
+        //VIP 1v1 1v2费用
+        BigDecimal vip1v1Fee = BigDecimal.ZERO;
+        if (degreePayDto.getVip1v1()) {
+            vip1v1Fee = courseFee.getVip1v1();
+            orderAmount = orderAmount.add(vip1v1Fee);
+        }
+
+        //VIP 1v2费用
+        BigDecimal vip1v2Fee = BigDecimal.ZERO;
+        if (degreePayDto.getVip1v2()) {
+            vip1v2Fee = courseFee.getVip1v2();
+            orderAmount = orderAmount.add(vip1v2Fee);
+        }
+
+        //乐理课费用
+        BigDecimal theoryCourseFee = BigDecimal.ZERO;
+        if (degreePayDto.getTheoryCourse()) {
+            theoryCourseFee = courseFee.getTheory();
+            orderAmount = orderAmount.add(theoryCourseFee);
+        }
+
+        if (orderAmount.compareTo(degreePayDto.getAmount()) != 0) {
+            throw new BizException("价格不符,请核查");
+        }
+
+
+        String channelType = "";
+        Date nowDate = new Date();
+
+        BigDecimal balance = BigDecimal.ZERO;
+
+        String orderNo = idGeneratorService.generatorId("payment") + "";
+        StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
+
+        studentPaymentOrder.setPaymentChannel("BALANCE");
+        studentPaymentOrder.setUserId(degreePayDto.getUserId());
+        studentPaymentOrder.setGroupType(GroupType.DEGREE);
+        studentPaymentOrder.setOrderNo(orderNo);
+        studentPaymentOrder.setType(OrderTypeEnum.DEGREE);
+        studentPaymentOrder.setExpectAmount(orderAmount);
+        studentPaymentOrder.setActualAmount(orderAmount);
+        studentPaymentOrder.setBalancePaymentAmount(balance);
+        studentPaymentOrder.setStatus(DealStatusEnum.ING);
+        studentPaymentOrder.setRemitFee(BigDecimal.ZERO);
+        studentPaymentOrder.setCourseRemitFee(BigDecimal.ZERO);
+        studentPaymentOrder.setOrganId(degreePayDto.getOrganId());
+        studentPaymentOrder.setRoutingOrganId(degreePayDto.getOrganId());
+        studentPaymentOrder.setCreateTime(nowDate);
+        studentPaymentOrder.setUpdateTime(nowDate);
+        studentPaymentOrderService.insert(studentPaymentOrder);
+
+        //添加购买详情
+        degreePayDto.setOrderId(studentPaymentOrder.getId());
+        childrenDayDegreeDetailService.addDegreeDetails(degreePayDto, gradeFee, theoryLevelFee, vip1v1Fee, vip1v2Fee, theoryCourseFee);
+
+        studentPaymentOrder.setVersion(0);
+        if (orderAmount.compareTo(BigDecimal.ZERO) == 0) {
+            studentPaymentRouteOrderService.addRouteOrder(orderNo, degreePayDto.getOrganId(), balance);
+            Map<String, String> notifyMap = new HashMap<>();
+            notifyMap.put("tradeState", "1");
+            notifyMap.put("merOrderNo", studentPaymentOrder.getOrderNo());
+            notifyMap.put("channelType", channelType);
+            notifyMap.put("orderNo", "");
+            studentPaymentOrderService.updateOrder(notifyMap);
+            return notifyMap;
+        }
+
+        String orderSubject = "6.1考级活动";
+        String receiver = "degree";
+
+        String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
+
+        Map payMap = payService.getPayMap(
+                orderAmount,
+                balance,
+                orderNo,
+                baseApiUrl + "/api-student/studentOrder/notify",
+                baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
+                orderSubject,
+                orderSubject,
+                degreePayDto.getOrganId(),
+                receiver
+        );
+
+        studentPaymentOrder.setOrganId(degreePayDto.getOrganId());
+        studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
+        studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
+        studentPaymentOrder.setUpdateTime(nowDate);
+        studentPaymentOrderService.update(studentPaymentOrder);
+        return payMap;
+    }
+}

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

@@ -123,9 +123,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
 
     @Autowired
-    private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
-
-    @Autowired
     private CourseScheduleStudentPaymentService courseScheduleStudentPaymentService;
 
     @Autowired
@@ -3013,4 +3010,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         return true;
     }
 
+    @Override
+    public List<MusicGroup> findByCooperationId(Integer cooperationId) {
+        return musicGroupDao.findByCooperationId(cooperationId,"PROGRESS");
+    }
+
 }

+ 93 - 0
mec-biz/src/main/resources/config/mybatis/ChildrenDayDegreeDetailDao.xml

@@ -0,0 +1,93 @@
+<?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.ChildrenDayDegreeDetailDao">
+    <resultMap id="ChildrenDayDegreeDetail" type="com.ym.mec.biz.dal.entity.ChildrenDayDegreeDetail">
+        <!--@mbg.generated-->
+        <id column="id_" property="id"/>
+        <result column="reserve_id_" property="reserveId"/>
+        <result column="user_id_" property="userId"/>
+        <result column="type_" property="type"/>
+        <result column="subject_id_" property="subjectId"/>
+        <result column="level_" property="level"/>
+        <result column="price_" property="price"/>
+        <result column="status_" property="status"/>
+        <result column="order_id_" property="orderId"/>
+        <result column="create_time_" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+    </resultMap>
+
+    <select id="get" parameterType="java.lang.Integer" resultMap="ChildrenDayDegreeDetail">
+        <!--@mbg.generated-->
+        select * from children_day_degree_detail
+        where id_ = #{id}
+    </select>
+    <delete id="delete" parameterType="java.lang.Integer">
+        <!--@mbg.generated-->
+        delete from children_day_degree_detail
+        where id_ = #{id}
+    </delete>
+    <insert id="insert" keyColumn="id_" keyProperty="id"
+            parameterType="com.ym.mec.biz.dal.entity.ChildrenDayDegreeDetail" useGeneratedKeys="true">
+        <!--@mbg.generated-->
+        insert into children_day_degree_detail (reserve_id_, user_id_, type_, subject_id_, level_, price_,
+        status_,order_id_,
+        create_time_, update_time)
+        values (#{reserveId}, #{userId}, #{type}, #{subjectId}, #{level}, #{price}, #{status},#{orderId},
+        #{createTime}, #{updateTime})
+    </insert>
+    <update id="update" parameterType="com.ym.mec.biz.dal.entity.ChildrenDayDegreeDetail">
+        <!--@mbg.generated-->
+        update children_day_degree_detail
+        <set>
+            <if test="reserveId != null">
+                reserve_id_ = #{reserveId},
+            </if>
+            <if test="userId != null">
+                user_id_ = #{userId},
+            </if>
+            <if test="type != null">
+                type_ = #{type},
+            </if>
+            <if test="subjectId != null">
+                subject_id_ = #{subjectId},
+            </if>
+            <if test="level != null">
+                level_ = #{level},
+            </if>
+            <if test="price != null">
+                price_ = #{price},
+            </if>
+            <if test="status != null">
+                status_ = #{status},
+            </if>
+            <if test="orderId != null">
+                order_id_ = #{orderId},
+            </if>
+            <if test="createTime != null">
+                create_time_ = #{createTime},
+            </if>
+            <if test="updateTime != null">
+                update_time = #{updateTime},
+            </if>
+        </set>
+        where id_ = #{id}
+    </update>
+
+    <select id="getByUserIdAndStatus" resultMap="ChildrenDayDegreeDetail">
+        SELECT *
+        FROM children_day_degree_detail
+        WHERE user_id_ = #{userId}
+          AND status_ = #{status}
+    </select>
+
+    <insert id="batchAdd" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id_">
+        INSERT INTO children_day_degree_detail
+        (reserve_id_, user_id_, type_, subject_id_, level_, price_,status_,order_id_,create_time_,update_time)
+        VALUE
+        <foreach collection="details" item="detail" separator=",">
+            (#{detail.reserveId}, #{detail.userId}, #{detail.type}, #{detail.subjectId}, #{detail.level},
+            #{detail.price}, #{detail.status},#{detail.orderId},
+            now(),now())
+        </foreach>
+    </insert>
+</mapper>

+ 168 - 0
mec-biz/src/main/resources/config/mybatis/ChildrenDayReserveMapper.xml

@@ -0,0 +1,168 @@
+<?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.ChildrenDayReserveDao">
+    <resultMap id="ChildrenDayReserve" type="com.ym.mec.biz.dal.entity.ChildrenDayReserve">
+        <!--@mbg.generated-->
+        <id column="id_" property="id"/>
+        <result column="user_id_" property="userId"/>
+        <result column="organ_id_" property="organId"/>
+        <result column="cooperation_organ_id_" property="cooperationOrganId"/>
+        <result column="music_group_id_" property="musicGroupId"/>
+        <result column="is_reserve_" property="isReserve" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="create_time_" property="createTime"/>
+        <result column="update_time_" property="updateTime"/>
+    </resultMap>
+
+    <select id="get" parameterType="java.lang.Integer" resultMap="ChildrenDayReserve">
+        <!--@mbg.generated-->
+        select *
+        from children_day_reserve
+        where id_ = #{id}
+    </select>
+    <delete id="delete" parameterType="java.lang.Integer">
+        <!--@mbg.generated-->
+        delete from children_day_reserve
+        where id_ = #{id}
+    </delete>
+    <insert id="insert" keyColumn="id_" keyProperty="id" parameterType="com.ym.mec.biz.dal.entity.ChildrenDayReserve"
+            useGeneratedKeys="true">
+        <!--@mbg.generated-->
+        insert into children_day_reserve (user_id_, organ_id_, cooperation_organ_id_, music_group_id_, is_reserve_,
+        create_time_, update_time_)
+        values (#{userId}, #{organId}, #{cooperationOrganId}, #{musicGroupId},
+        #{isReserve,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},NOW(), NOW())
+    </insert>
+    <update id="update" parameterType="com.ym.mec.biz.dal.entity.ChildrenDayReserve">
+        <!--@mbg.generated-->
+        update children_day_reserve
+        <set>
+            <if test="userId != null">
+                user_id_ = #{userId},
+            </if>
+            <if test="organId != null">
+                organ_id_ = #{organId},
+            </if>
+            <if test="cooperationOrganId != null">
+                cooperation_organ_id_ = #{cooperationOrganId},
+            </if>
+            <if test="musicGroupId != null">
+                music_group_id_ = #{musicGroupId},
+            </if>
+            <if test="isReserve != null">
+                is_reserve_ = #{isReserve,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
+            <if test="createTime != null">
+                create_time_ = #{createTime},
+            </if>
+            <if test="updateTime != null">
+                update_time_ = #{updateTime},
+            </if>
+        </set>
+        where id_ = #{id}
+    </update>
+
+    <!-- 分页查询 -->
+    <select id="queryPage" resultMap="ChildrenDayReserve" parameterType="map">
+        SELECT * FROM children_day_reserve
+        <include refid="global.limit"/>
+    </select>
+
+    <!-- 查询当前表的总记录数 -->
+    <select id="queryCount" resultType="int">
+        SELECT COUNT(*)
+        FROM children_day_reserve
+    </select>
+    <resultMap id="ChildrenStatisticsDtoMap" type="com.ym.mec.biz.dal.dto.ChildrenStatisticsDto">
+        <result property="buyMusicTheoryAmount" column="buy_music_theory_amount_"/>
+        <result property="buyMusicTheoryNum" column="buy_music_theory_num_"/>
+        <result property="buyVipAmount" column="buy_vip_amount_"/>
+        <result property="buyVipNum" column="buy_vip_num_"/>
+        <result property="cooperationOrganName" column="cooperation_organ_name_"/>
+        <result property="instrumentalMusicNum" column="instrumental_music_num_"/>
+        <result property="musicGroupName" column="music_group_name_"/>
+        <result property="musicTheoryNum" column="music_theory_num_"/>
+        <result property="noReserveNum" column="no_reserve_num_"/>
+        <result property="normalNum" column="normal_num_"/>
+        <result property="organName" column="organ_name_"/>
+        <result property="reserveNum" column="reserve_num_"/>
+        <result property="organId" column="organ_id_"/>
+        <result property="cooperationOrganId" column="cooperation_organ_id_"/>
+        <result property="musicGroupId" column="music_group_id_"/>
+    </resultMap>
+    <select id="queryChildrenStatistics" resultMap="ChildrenStatisticsDtoMap">
+        SELECT o.name_ organ_name_,co.name_ cooperation_organ_name_,mg.name_ music_group_name_,COUNT(sr.user_id_) normal_num_,cdr.organ_id_,
+        cdr.cooperation_organ_id_,cdr.music_group_id_,
+        COUNT(DISTINCT CASE WHEN cdr.is_reserve_ = 1 THEN 1 ELSE NULL END) 'reserve_num_',
+        COUNT(DISTINCT CASE WHEN cdr.is_reserve_ = 0 THEN 1 ELSE NULL END) 'no_reserve_num_'
+        FROM children_day_reserve cdr
+        LEFT JOIN music_group mg ON mg.id_ = cdr.music_group_id_
+        LEFT JOIN student_registration sr ON sr.music_group_id_ = cdr.music_group_id_ AND sr.music_group_status_ = 'NORMAL' AND cdr.user_id_ = sr.user_id_
+        LEFT JOIN cooperation_organ co ON co.id_ = cdr.cooperation_organ_id_
+        LEFT JOIN organization o ON o.id_ = cdr.organ_id_
+        <include refid="queryChildrenStatisticsSql"/>
+        GROUP BY cdr.music_group_id_
+        ORDER BY cdr.id_ DESC
+        <include refid="global.limit"/>
+    </select>
+    <select id="countChildrenStatistics" resultType="int">
+        SELECT COUNT(c.id_) FROM (SELECT COUNT(cdr.id_) id_
+        FROM children_day_reserve cdr
+        <include refid="queryChildrenStatisticsSql"/>
+        GROUP BY cdr.music_group_id_) c
+    </select>
+    <sql id="queryChildrenStatisticsSql">
+        <where>
+            <if test="cooperationId != null">
+                AND cdr.cooperation_organ_id_ = #{cooperationId}
+            </if>
+            <if test="musicGroupId != null and musicGroupId != ''">
+                AND cdr.music_group_id_ = #{musicGroupId}
+            </if>
+            <if test="organId != null">
+                AND FIND_IN_SET(cdr.organ_id_,#{organId})
+            </if>
+        </where>
+    </sql>
+
+    <select id="getByUserId" resultMap="ChildrenDayReserve">
+        SELECT *
+        FROM children_day_reserve
+        WHERE user_id_ = #{userId}
+    </select>
+
+    <resultMap id="ChildrenStatisticsDetailDtoMap" type="com.ym.mec.biz.dal.dto.ChildrenStatisticsDetailDto">
+        <result property="username" column="username_"/>
+        <result property="userId" column="user_id_"/>
+        <result property="isReserve" column="is_reserve_"/>
+        <result property="phone" column="phone_"/>
+    </resultMap>
+    <select id="countChildrenStatisticsDetail" resultType="int">
+        SELECT COUNT(cdr.id_) FROM children_day_reserve cdr
+        LEFT JOIN sys_user su ON su.id_ = cdr.user_id_
+        <include refid="queryChildrenStatisticsDetailSql"/>
+    </select>
+    <select id="queryChildrenStatisticsDetail" resultMap="ChildrenStatisticsDetailDtoMap">
+        SELECT su.username_,su.phone_,cdr.user_id_,cdr.is_reserve_
+        FROM children_day_reserve cdr
+        LEFT JOIN sys_user su ON su.id_ = cdr.user_id_
+        <include refid="queryChildrenStatisticsDetailSql"/>
+        ORDER BY cdr.create_time_ DESC
+        <include refid="global.limit"/>
+    </select>
+    <sql id="queryChildrenStatisticsDetailSql">
+        <where>
+            <if test="search != null and search != ''">
+                AND (cdr.user_id_ = #{search} OR su.username_ LIKE CONCAT('%',#{search},'%') OR su.phone_ LIKE CONCAT('%',#{search},'%'))
+            </if>
+            <if test="isReserve != null">
+                AND cdr.is_reserve_ = #{isReserve}
+            </if>
+            <if test="musicGroupId != null and musicGroupId != ''">
+                AND cdr.music_group_id_ = #{musicGroupId}
+            </if>
+            <if test="musicGroupId == null">
+                AND cdr.music_group_id_ IS NULL
+            </if>
+        </where>
+    </sql>
+</mapper>

+ 60 - 0
mec-biz/src/main/resources/config/mybatis/DegreeLevelFeeMapper.xml

@@ -0,0 +1,60 @@
+<?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.DegreeLevelFeeDao">
+    <resultMap id="DegreeLevelFee" type="com.ym.mec.biz.dal.entity.DegreeLevelFee">
+        <!--@mbg.generated-->
+        <!--@Table degree_level_fee-->
+        <id column="id_" property="id"/>
+        <result column="level_" property="level"/>
+        <result column="grade_" property="grade"/>
+        <result column="theory_" property="theory"/>
+        <result column="create_time_" property="createTime"/>
+        <result column="update_time_" property="updateTime"/>
+    </resultMap>
+    <select id="get" parameterType="java.lang.Integer" resultMap="DegreeLevelFee">
+        <!--@mbg.generated-->
+        select *
+        from degree_level_fee
+        where id_ = #{id}
+    </select>
+    <delete id="delete" parameterType="java.lang.Integer">
+        <!--@mbg.generated-->
+        delete from degree_level_fee
+        where id_ = #{id}
+    </delete>
+    <insert id="insert" keyColumn="id_" keyProperty="id" parameterType="com.ym.mec.biz.dal.entity.DegreeLevelFee"
+            useGeneratedKeys="true">
+        <!--@mbg.generated-->
+        insert into degree_level_fee (level_, grade_, theory_, create_time_, update_time_)
+        values (#{level}, #{grade}, #{theory}, #{createTime}, #{updateTime})
+    </insert>
+    <update id="update" parameterType="com.ym.mec.biz.dal.entity.DegreeLevelFee">
+        <!--@mbg.generated-->
+        update degree_level_fee
+        <set>
+            <if test="level != null">
+                level_ = #{level},
+            </if>
+            <if test="grade != null">
+                grade_ = #{grade},
+            </if>
+            <if test="theory != null">
+                theory_ = #{theory},
+            </if>
+            <if test="createTime != null">
+                create_time_ = #{createTime},
+            </if>
+            <if test="updateTime != null">
+                update_time_ = #{updateTime},
+            </if>
+        </set>
+        where id_ = #{id}
+    </update>
+
+    <!-- 全查询 -->
+    <select id="getAll" resultMap="DegreeLevelFee">
+        SELECT *
+        FROM degree_level_fee
+        ORDER BY level_ ASC
+    </select>
+</mapper>

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

@@ -739,4 +739,20 @@
         </foreach>
         AND mg.educational_teacher_id_ IS NOT NULL
     </select>
+    <select id="findByCooperationId" resultMap="MusicGroup">
+        SELECT * FROM music_group WHERE cooperation_organ_id_ = #{cooperationId}
+        <if test="musicStatus != null">
+            AND status_ = #{musicStatus}
+        </if>
+    </select>
+
+    <select id="getStudentLastMusicGroup" resultMap="MusicGroup">
+        SELECT mg.*
+        FROM music_group mg
+        LEFT JOIN student_registration sr ON mg.id_ = sr.music_group_id_
+        WHERE sr.user_id_ = #{userId}
+        AND mg.status_ IN ('PREPARE', 'PROGRESS', 'PAUSE', 'CLOSE')
+        ORDER BY mg.create_time_ DESC
+        LIMIT 1
+    </select>
 </mapper>

+ 63 - 0
mec-biz/src/main/resources/config/mybatis/OrganizationDegreeCourseFeeMapper.xml

@@ -0,0 +1,63 @@
+<?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.OrganizationDegreeCourseFeeDao">
+    <resultMap id="OrganizationDegreeCourseFee" type="com.ym.mec.biz.dal.entity.OrganizationDegreeCourseFee">
+        <!--@mbg.generated-->
+        <!--@Table organization_degree_course_fee-->
+        <id column="id_" property="id"/>
+        <result column="organ_id_" property="organId"/>
+        <result column="vip_1v1_" property="vip1v1"/>
+        <result column="vip_1v2_" property="vip1v2"/>
+        <result column="theory_" property="theory"/>
+        <result column="create_time_" property="createTime"/>
+        <result column="update_time_" property="updateTime"/>
+    </resultMap>
+    <select id="get" parameterType="java.lang.Integer" resultMap="OrganizationDegreeCourseFee">
+        <!--@mbg.generated-->
+        select *
+        from organization_degree_course_fee
+        where id_ = #{id}
+    </select>
+    <delete id="delete" parameterType="java.lang.Integer">
+        <!--@mbg.generated-->
+        delete from organization_degree_course_fee
+        where id_ = #{id}
+    </delete>
+    <insert id="insert" keyColumn="id_" keyProperty="id"
+            parameterType="com.ym.mec.biz.dal.entity.OrganizationDegreeCourseFee" useGeneratedKeys="true">
+        <!--@mbg.generated-->
+        insert into organization_degree_course_fee (organ_id_, vip_1v1_, vip_1v2_,theory_, create_time_, update_time_)
+        values (#{organId}, #{vip1v1},#{vip1v2}, #{theory}, #{createTime}, #{updateTime})
+    </insert>
+    <update id="update" parameterType="com.ym.mec.biz.dal.entity.OrganizationDegreeCourseFee">
+        <!--@mbg.generated-->
+        update organization_degree_course_fee
+        <set>
+            <if test="organId != null">
+                organ_id_ = #{organId},
+            </if>
+            <if test="vip1v1 != null">
+                vip_1v1_ = #{vip1v1},
+            </if>
+            <if test="vip1v2 != null">
+                vip_1v12 = #{vip1v2},
+            </if>
+            <if test="theory != null">
+                theory_ = #{theory},
+            </if>
+            <if test="createTime != null">
+                create_time_ = #{createTime},
+            </if>
+            <if test="updateTime != null">
+                update_time_ = #{updateTime},
+            </if>
+        </set>
+        where id_ = #{id}
+    </update>
+
+    <select id="getByOrganId" resultMap="OrganizationDegreeCourseFee">
+        SELECT *
+        FROM organization_degree_course_fee
+        WHERE organ_id_ = #{organId}
+    </select>
+</mapper>

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

@@ -26,6 +26,7 @@
         <result column="update_time_" property="updateTime"/>
         <result column="attribute1_" property="attribute"/>
         <result column="channel_" property="channel"/>
+        <result column="organ_name_" property="organName"/>
         <result column="platform_account_no_" property="platformAccountNo"/>
     </resultMap>
 
@@ -242,12 +243,26 @@
         ) t
     </select>
     <select id="exportDetail" resultMap="SysUserCashAccountDetail">
-        SELECT su.username_,su.phone_,GROUP_CONCAT(sb.name_ ORDER BY sb.name_) subject_name_,cad.* FROM sys_user_cash_account_detail cad
+        SELECT o.name_ organ_name_,su.username_,su.phone_,GROUP_CONCAT(sb.name_ ORDER BY sb.name_) subject_name_,cad.* FROM sys_user_cash_account_detail cad
         LEFT JOIN sys_user su ON su.id_ = cad.user_id_
+        LEFT JOIN organization o ON o.id_ = su.organ_id_
         LEFT JOIN student s ON s.user_id_ = su.id_
         LEFT JOIN `subject` sb ON FIND_IN_SET(sb.id_,s.subject_id_list_)
-        WHERE cad.user_id_ = #{userId}
+        <where>
+            <if test="queryInfo.userId != null">
+                AND cad.user_id_ = #{queryInfo.userId}
+            </if>
+            <if test="queryInfo.organId != null">
+                AND FIND_IN_SET(su.organ_id_,#{queryInfo.organId})
+            </if>
+            <if test="queryInfo.startTime != null and queryInfo.startTime != ''">
+                AND cad.create_time_ >= #{queryInfo.startTime}
+            </if>
+            <if test="queryInfo.endTime != null and queryInfo.startTime != ''">
+                AND cad.create_time_ &lt;= #{queryInfo.endTime}
+            </if>
+        </where>
         GROUP BY cad.id_
-        ORDER BY cad.id_ DESC
+        ORDER BY cad.user_id_,cad.id_ DESC
     </select>
 </mapper>

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

@@ -24,6 +24,7 @@
 		<result column="update_time_" property="updateTime" />
 		<result column="attribute1_" property="attribute1" />
 		<result column="channel_" property="channel" />
+		<result column="organ_name_" property="organName" />
 		<result column="platform_account_no_" property="platformAccountNo" />
 	</resultMap>
 	
@@ -115,12 +116,26 @@
 		<include refid="queryPageCondition" />
 	</select>
 	<select id="exportDetail" resultMap="SysUserCoursesAccountDetail">
-		SELECT su.username_,su.phone_,GROUP_CONCAT(sb.name_ ORDER BY sb.name_) subject_name_,cad.* FROM sys_user_courses_account_detail cad
+		SELECT o.name_ organ_name_,su.username_,su.phone_,GROUP_CONCAT(sb.name_ ORDER BY sb.name_) subject_name_,cad.* FROM sys_user_courses_account_detail cad
 		LEFT JOIN sys_user su ON su.id_ = cad.user_id_
+		LEFT JOIN organization o ON o.id_ = su.organ_id_
 		LEFT JOIN student s ON s.user_id_ = su.id_
 		LEFT JOIN `subject` sb ON FIND_IN_SET(sb.id_,s.subject_id_list_)
-		WHERE cad.user_id_ = #{userId}
+		<where>
+			<if test="queryInfo.userId != null">
+				AND cad.user_id_ = #{queryInfo.userId}
+			</if>
+			<if test="queryInfo.organId != null">
+				AND FIND_IN_SET(su.organ_id_,#{queryInfo.organId})
+			</if>
+			<if test="queryInfo.startTime != null and queryInfo.startTime != ''">
+				AND cad.create_time_ >= #{queryInfo.startTime}
+			</if>
+			<if test="queryInfo.endTime != null and queryInfo.startTime != ''">
+				AND cad.create_time_ &lt;= #{queryInfo.endTime}
+			</if>
+		</where>
 		GROUP BY cad.id_
-		ORDER BY cad.id_ DESC
+		ORDER BY cad.user_id_,cad.id_ DESC
 	</select>
 </mapper>

+ 10 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/entity/HttpResponseResult.java

@@ -2,6 +2,8 @@ package com.ym.mec.common.entity;
 
 import org.springframework.http.HttpStatus;
 
+import java.util.Date;
+
 /**
  * HttpResponse 返回结果
  */
@@ -11,6 +13,7 @@ public class HttpResponseResult<T> {
 	private String msg;
 	private T data;
 	private int code;
+	private Date nowTime = new Date();
 
 	public HttpResponseResult(boolean status, int code, T data, String message) {
 		this.status = status;
@@ -69,4 +72,11 @@ public class HttpResponseResult<T> {
 		this.status = false;
 	}
 
+	public Date getNowTime() {
+		return nowTime;
+	}
+
+	public void setNowTime(Date nowTime) {
+		this.nowTime = nowTime;
+	}
 }

+ 94 - 0
mec-student/src/main/java/com/ym/mec/student/controller/ChildrenDayController.java

@@ -0,0 +1,94 @@
+package com.ym.mec.student.controller;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.StudentDao;
+import com.ym.mec.biz.dal.dto.DegreeFeeDto;
+import com.ym.mec.biz.dal.dto.DegreePayDto;
+import com.ym.mec.biz.dal.entity.ChildrenDayDegreeDetail;
+import com.ym.mec.biz.dal.entity.ChildrenDayReserve;
+import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+import com.ym.mec.biz.service.ChildrenDayDegreeDetailService;
+import com.ym.mec.biz.service.ChildrenDayReserveService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.exception.BizException;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+@RequestMapping("childrenDay")
+@Api(tags = "6.1儿童节活动")
+@RestController
+public class ChildrenDayController extends BaseController {
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private ChildrenDayReserveService childrenDayReserveService;
+    @Autowired
+    private StudentDao studentDao;
+    @Autowired
+    private ChildrenDayDegreeDetailService childrenDayDegreeDetailService;
+
+    @ApiOperation(value = "占位")
+    @PostMapping("/reserve")
+    public HttpResponseResult<ChildrenDayReserve> reserve() {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (Objects.isNull(user)) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        return succeed(childrenDayReserveService.addReserve(user, YesOrNoEnum.YES));
+    }
+
+    @ApiOperation(value = "获取占位信息")
+    @GetMapping("/getReserve")
+    public HttpResponseResult<ChildrenDayReserve> getReserve() {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (Objects.isNull(user)) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        return succeed(childrenDayReserveService.getUserReserve(user.getId()));
+    }
+
+
+    @ApiOperation(value = "获取考级相关的价格")
+    @GetMapping("/getFeeInfo")
+    public HttpResponseResult<DegreeFeeDto> getFeeInfo() {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (Objects.isNull(user)) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        return succeed(childrenDayReserveService.getFeeInfo(user.getOrganId()));
+    }
+
+    @ApiOperation(value = "6.1考级支付")
+    @PostMapping("/pay")
+    public HttpResponseResult pay(@RequestBody DegreePayDto degreePayDto) throws Exception {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("用户信息获取失败,请重新登陆");
+        }
+        studentDao.lockUser(degreePayDto.getUserId());
+
+        degreePayDto.setUserId(sysUser.getId());
+        degreePayDto.setOrganId(sysUser.getOrganId());
+        degreePayDto.setUser(sysUser);
+        List<ChildrenDayDegreeDetail> ingDetails = childrenDayDegreeDetailService.getByUserIdAndStatus(sysUser.getId(), 1);
+        if (ingDetails.size() > 0) {
+            return failed(HttpStatus.CONTINUE, "您有待支付的订单");
+        }
+
+        Map payMap = childrenDayReserveService.pay(degreePayDto);
+        if (payMap.containsKey("tradeState")) {
+            return failed(HttpStatus.CREATED, payMap, "恭喜您,支付成功!");
+        }
+        return succeed(payMap);
+    }
+
+}

+ 1 - 1
mec-student/src/main/java/com/ym/mec/student/controller/ReplacementInstrumentActivityController.java

@@ -168,6 +168,6 @@ public class ReplacementInstrumentActivityController extends BaseController {
         if (payMap.containsKey("tradeState")) {
             return failed(HttpStatus.CREATED, payMap, "恭喜您,支付成功!");
         }
-        return succeed(replacementInstrumentActivityService.pay(replacementPayDto));
+        return succeed(payMap);
     }
 }

+ 64 - 0
mec-web/src/main/java/com/ym/mec/web/controller/ChildrenReserveController.java

@@ -0,0 +1,64 @@
+package com.ym.mec.web.controller;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.dto.ChildrenStatisticsDetailDto;
+import com.ym.mec.biz.dal.dto.ChildrenStatisticsDto;
+import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.page.ChildrenReserveQueryInfo;
+import com.ym.mec.biz.service.ChildrenDayReserveService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+import java.util.List;
+
+@RequestMapping("childrenReserve")
+@Api(tags = "儿童节活动")
+@RestController
+public class ChildrenReserveController extends BaseController {
+
+    @Autowired
+    private ChildrenDayReserveService childrenDayReserveService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private EmployeeDao employeeDao;
+
+    @ApiOperation(value = "21年暑期考级活动统计页面")
+    @GetMapping("/queryStatisticsPage")
+    @PreAuthorize("@pcs.hasPermissions('childrenReserve/queryStatisticsPage')")
+    public HttpResponseResult<PageInfo<ChildrenStatisticsDto>> queryStatisticsPage(ChildrenReserveQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        Employee employee = employeeDao.get(sysUser.getId());
+        if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+            queryInfo.setOrganId(employee.getOrganIdList());
+        }else if(StringUtils.isEmpty(employee.getOrganIdList())){
+            return failed("用户所在分部异常");
+        }else {
+            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+            if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
+                return failed("非法请求");
+            }
+        }
+        return succeed(childrenDayReserveService.queryStatisticsPage(queryInfo));
+    }
+
+    @ApiOperation(value = "21年暑期考级活动统计详情页面")
+    @GetMapping("/queryStatisticsDetailPage")
+    @PreAuthorize("@pcs.hasPermissions('childrenReserve/queryStatisticsDetailPage')")
+    public HttpResponseResult<PageInfo<ChildrenStatisticsDetailDto>> queryStatisticsDetailPage(ChildrenReserveQueryInfo queryInfo) {
+        return succeed(childrenDayReserveService.queryStatisticsDetailPage(queryInfo));
+    }
+}

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

@@ -139,12 +139,129 @@ public class ExportController extends BaseController {
     private SysUserCashAccountDetailDao sysUserCashAccountDetailDao;
     @Autowired
     private SysUserCoursesAccountDetailDao sysUserCoursesAccountDetailDao;
+    @Autowired
+    private ChildrenDayReserveService childrenDayReserveService;
+
+    @ApiOperation(value = "21年暑期考级活动统计页面详情导出")
+    @PostMapping("export/statisticsDetailPage")
+    @PreAuthorize("@pcs.hasPermissions('export/statisticsDetailPage')")
+    public void statisticsDetailPage(HttpServletResponse response, ChildrenReserveQueryInfo queryInfo) throws IOException {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("用户信息获取失败");
+        }
+        Employee employee = employeeDao.get(sysUser.getId());
+        if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+            queryInfo.setOrganId(employee.getOrganIdList());
+        }else if(StringUtils.isEmpty(employee.getOrganIdList())){
+            throw new BizException("用户所在分部异常");
+        }else {
+            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+            if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
+                throw new BizException("非法请求");
+            }
+        }
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
+        List<ChildrenStatisticsDetailDto> rows = childrenDayReserveService.queryStatisticsDetailPage(queryInfo).getRows();
+        if(rows.size() < 1){
+           throw new BizException("没有可导出数据");
+       }
+        OutputStream outputStream = response.getOutputStream();
+        try {
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"学员姓名", "学员编号", "手机号", "是否预约"}, new String[]{
+                    "username", "userId", "phone", "isReserve == true ?'是':'否'"}, rows);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attac:wq" +
+                    "hment;filename=classGroup-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+            outputStream.flush();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (outputStream != null) {
+                try {
+                    outputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+    @ApiOperation(value = "21年暑期考级活动统计页面导出")
+    @PostMapping("export/statisticsPage")
+    @PreAuthorize("@pcs.hasPermissions('export/statisticsPage')")
+    public void statisticsPage(HttpServletResponse response, ChildrenReserveQueryInfo queryInfo) throws IOException {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("用户信息获取失败");
+        }
+        Employee employee = employeeDao.get(sysUser.getId());
+        if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+            queryInfo.setOrganId(employee.getOrganIdList());
+        }else if(StringUtils.isEmpty(employee.getOrganIdList())){
+            throw new BizException("用户所在分部异常");
+        }else {
+            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+            if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
+                throw new BizException("非法请求");
+            }
+        }
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
+        List<ChildrenStatisticsDto> rows = childrenDayReserveService.queryStatisticsPage(queryInfo).getRows();
+        if(rows.size() < 1){
+           throw new BizException("没有可导出数据");
+       }
+        OutputStream outputStream = response.getOutputStream();
+        try {
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部名称", "合作单位", "乐团名称", "在读人数",
+                    "预约人数", "未预约人数", "器乐考级人数", "乐理考级人数", "VIP课购买人数", "VIP课成交金额", "乐理课购买人数", "乐理课成交金额"}, new String[]{
+                    "organName", "cooperationOrganName", "musicGroupName", "normalNum",
+                    "reserveNum", "noReserveNum", "instrumentalMusicNum", "musicTheoryNum","buyVipNum","buyVipAmount","buyMusicTheoryNum","buyMusicTheoryAmount"}, rows);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attac:wq" +
+                    "hment;filename=classGroup-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+            outputStream.flush();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (outputStream != null) {
+                try {
+                    outputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
 
     @ApiOperation(value = "学生个人账户余额导出")
     @PostMapping("export/userCashAccountDetail")
     @PreAuthorize("@pcs.hasPermissions('export/userCashAccountDetail')")
-    public void userCashAccountDetail(HttpServletResponse response, Integer userId) throws IOException {
-       List<SysUserCashAccountDetail> cashAccountDetails = sysUserCashAccountDetailDao.exportDetail(userId);
+    public void userCashAccountDetail(HttpServletResponse response, ExportUserAccountQueryInfo queryInfo) throws IOException {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("用户信息获取失败");
+        }
+        Employee employee = employeeDao.get(sysUser.getId());
+        if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+            queryInfo.setOrganId(employee.getOrganIdList());
+        }else if(StringUtils.isEmpty(employee.getOrganIdList())){
+            throw new BizException("用户所在分部异常");
+        }else {
+            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+            if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
+                throw new BizException("非法请求");
+            }
+        }
+       List<SysUserCashAccountDetail> cashAccountDetails = sysUserCashAccountDetailDao.exportDetail(queryInfo);
        if(cashAccountDetails.size() < 1){
            throw new BizException("没有可导出数据");
        }
@@ -153,10 +270,10 @@ public class ExportController extends BaseController {
        }
         OutputStream outputStream = response.getOutputStream();
         try {
-            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"学员编号", "姓名", "电话", "声部",
-                    "交易类型", "交易金额", "交易时间", "备注"}, new String[]{
-                    "userId", "username", "phone", "subjectName",
-                    "type.msg", "amount", "createTime", "comment"}, cashAccountDetails);
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部","学员编号", "姓名", "电话", "声部",
+                    "交易类型", "交易金额", "交易时间", "备注","可用余额"}, new String[]{
+                    "organName","userId", "username", "phone", "subjectName",
+                    "type.msg", "amount", "createTime", "comment","balance"}, cashAccountDetails);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attac:wq" +
                     "hment;filename=classGroup-" + DateUtil.getDate(new Date()) + ".xls");
@@ -180,8 +297,23 @@ public class ExportController extends BaseController {
     @ApiOperation(value = "学生个人课程余额导出")
     @PostMapping("export/userCoursesAccount")
     @PreAuthorize("@pcs.hasPermissions('export/userCoursesAccount')")
-    public void userCoursesAccount(HttpServletResponse response, Integer userId) throws IOException {
-        List<SysUserCoursesAccountDetail> coursesAccountDetails = sysUserCoursesAccountDetailDao.exportDetail(userId);
+    public void userCoursesAccount(HttpServletResponse response,ExportUserAccountQueryInfo queryInfo) throws IOException {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("用户信息获取失败");
+        }
+        Employee employee = employeeDao.get(sysUser.getId());
+        if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+            queryInfo.setOrganId(employee.getOrganIdList());
+        }else if(StringUtils.isEmpty(employee.getOrganIdList())){
+            throw new BizException("用户所在分部异常");
+        }else {
+            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+            if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
+                throw new BizException("非法请求");
+            }
+        }
+        List<SysUserCoursesAccountDetail> coursesAccountDetails = sysUserCoursesAccountDetailDao.exportDetail(queryInfo);
         if(coursesAccountDetails.size() < 1){
             throw new BizException("没有可导出数据");
         }
@@ -190,10 +322,10 @@ public class ExportController extends BaseController {
         }
         OutputStream outputStream = response.getOutputStream();
         try {
-            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"学员编号", "姓名", "电话", "声部",
-                    "交易类型", "交易金额", "交易时间", "备注"}, new String[]{
-                    "userId", "username", "phone", "subjectName",
-                    "type.msg", "amount", "createTime", "comment"}, coursesAccountDetails);
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "学员编号", "姓名", "电话", "声部",
+                    "交易类型", "交易金额", "交易时间", "备注","可用余额"}, new String[]{
+                    "organName", "userId", "username", "phone", "subjectName",
+                    "type.msg", "amount", "createTime", "comment","balance"}, coursesAccountDetails);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attac:wq" +
                     "hment;filename=classGroup-" + DateUtil.getDate(new Date()) + ".xls");

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

@@ -331,4 +331,12 @@ public class MusicGroupController extends BaseController {
 		return succeed(organizationService.getGradeList(musicGroup.getOrganId()));
 	}
 
+	@ApiOperation(value = "根据合作单位获取所有乐团列表")
+	@GetMapping("/findByCooperationId")
+	@PreAuthorize("@pcs.hasPermissions('musicGroup/findByCooperationId')")
+	@ApiImplicitParams({@ApiImplicitParam(name = "cooperationId", value = "合作单位", required = true, dataType = "Integer")})
+	public HttpResponseResult<List<MusicGroup>> findByCooperationId(Integer cooperationId) {
+		return succeed(musicGroupService.findByCooperationId(cooperationId));
+	}
+
 }

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

@@ -304,8 +304,8 @@ public class StudentRegistrationController extends BaseController {
                 String[] body = {"userId", "userName", "gender ? '男' : '女'", "phone", "currentGrade", "subjectFirstName", "subjectSecondName", "isAllowAdjust ? '是' : '否'", "kitPurchaseMethod", "cloudTeacherMethod"};
                 workbook = POIUtil.exportExcel(header, body, studentPreRegistration.getRows());
             } else {
-                String[] header = {"学员编号", "学员姓名", "性别", "联系电话", "年级班级", "选报声部1", "选报声部2", "是否服从调剂", "乐器准备方式"};
-                String[] body = {"userId", "userName", "gender ? '男' : '女'", "phone", "currentGrade", "subjectFirstName", "subjectSecondName", "isAllowAdjust ? '是' : '否'", "kitPurchaseMethod"};
+                String[] header = {"学员编号", "学员姓名", "性别", "联系电话", "年级班级", "选报声部1", "选报声部2", "是否服从调剂", "乐器准备方式", "练习系统"};
+                String[] body = {"userId", "userName", "gender ? '男' : '女'", "phone", "currentGrade", "subjectFirstName", "subjectSecondName", "isAllowAdjust ? '是' : '否'", "kitPurchaseMethod", "cloudTeacherMethod"};
                 workbook = POIUtil.exportExcel(header, body, studentPreRegistration.getRows());
             }
 

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

@@ -104,17 +104,17 @@ public class TeacherController extends BaseController {
         if (sysUser == null) {
             return failed("用户信息获取失败");
         }
-            Employee employee = employeeDao.get(sysUser.getId());
-            if (StringUtils.isEmpty(organId)) {
-                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("非法请求");
-                }
+        Employee employee = employeeDao.get(sysUser.getId());
+        if (StringUtils.isEmpty(organId)) {
+            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(teacherService.findTeachers(organId));
     }