فهرست منبع

Merge branch 'activity_2020_12' into online1

yonge 4 سال پیش
والد
کامیت
1e951bb290
28فایلهای تغییر یافته به همراه763 افزوده شده و 158 حذف شده
  1. 8 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/DegreeRegistrationDao.java
  2. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/OrganizationDao.java
  3. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java
  4. 13 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDetailDao.java
  5. 34 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/DegreeRegistrationActivityDto.java
  6. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java
  7. 29 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/DegreeRegistration.java
  8. 80 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/PracticeGroupSellPrice.java
  9. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Student.java
  10. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderDetailTypeEnum.java
  11. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderTypeEnum.java
  12. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentManageQueryInfo.java
  13. 12 3
      mec-biz/src/main/java/com/ym/mec/biz/service/DegreeRegistrationService.java
  14. 239 84
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/DegreeRegistrationServiceImpl.java
  15. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SporadicChargeInfoImpl.java
  16. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  17. 112 7
      mec-biz/src/main/resources/config/mybatis/DegreeRegistrationMapper.xml
  18. 5 0
      mec-biz/src/main/resources/config/mybatis/OrganizationMapper.xml
  19. 8 0
      mec-biz/src/main/resources/config/mybatis/PracticeGroupSellPriceMapper.xml
  20. 1 1
      mec-biz/src/main/resources/config/mybatis/SellOrderMapper.xml
  21. 5 1
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  22. 4 0
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  23. 8 0
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderDetailMapper.xml
  24. 9 0
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  25. 4 0
      mec-common/common-core/src/main/java/com/ym/mec/common/controller/BaseController.java
  26. 122 51
      mec-student/src/main/java/com/ym/mec/student/controller/DegreeController.java
  27. 2 2
      mec-student/src/main/java/com/ym/mec/student/controller/PracticeGroupController.java
  28. 14 2
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

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

@@ -9,9 +9,16 @@ import java.util.Map;
 
 public interface DegreeRegistrationDao extends BaseDAO<Integer, DegreeRegistration> {
 
+    int batchUpdate(@Param("degrees") List<DegreeRegistration> degrees);
+
     DegreeRegistration findByMobileAndSporadicId(@Param("mobile") String mobile, @Param("sporadicId") Integer sporadicId);
 
     DegreeRegistration getLock(@Param("id") Integer id);
 
     DegreeRegistration getTotalAmount(Map<String, Object> params);
-}
+
+    DegreeRegistration getWithUserIdAndActivityTag(@Param("degree") DegreeRegistration degree);
+
+    List<DegreeRegistration> getUserLevelDegrees(@Param("userId") Integer userId,
+                                                 @Param("activityTag") String activityTag);
+}

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

@@ -55,4 +55,6 @@ public interface OrganizationDao extends BaseDAO<Integer, Organization> {
 	String getOrganName(String organId);
 	
 	List<Organization> findAllOrgans();
+
+	List<Organization> getActivityOrgans();
 }

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

@@ -168,6 +168,18 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
      */
     Integer findOrderByGroupType(@Param("userId") Integer userId, @Param("sporadicId") Integer sporadicId, @Param("groupType") String groupType, @Param("status") DealStatusEnum status);
 
+    /**
+     * @describe 获取零星订单
+     * @author qnc99
+     * @date 2020/12/5 0005
+     * @param userId:
+     * @param sporadicId:
+     * @param groupType:
+     * @param status:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.StudentPaymentOrder>
+     */
+    List<StudentPaymentOrder> findPaymentOrderByGroupType(@Param("userId") Integer userId, @Param("sporadicId") Integer sporadicId, @Param("groupType") String groupType, @Param("status") DealStatusEnum status);
+
     List<StudentPaymentOrder> findOrderByGroup(@Param("groupId") String groupId,
                                                @Param("groupType") GroupType groupType,
                                                @Param("status") DealStatusEnum status);

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

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.dao;
 import com.ym.mec.biz.dal.dto.MusicalListDetailDto;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
@@ -118,4 +119,15 @@ public interface StudentPaymentOrderDetailDao extends BaseDAO<Long, StudentPayme
      * @return
      */
     List<StudentPaymentOrderDetail> getOrderGoodies(@Param("orderIds") List<Long> orderIds);
-}
+
+    /**
+     * @describe 获取用户指定类型的订单
+     * @author qnc99
+     * @date 2020/12/7 0007
+     * @param userId:
+     * @param orderType:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail>
+     */
+    List<StudentPaymentOrderDetail> getWithUserAndOrderType(@Param("userId") Integer userId,
+                                                            @Param("orderType")OrderTypeEnum orderType);
+}

+ 34 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/DegreeRegistrationActivityDto.java

@@ -0,0 +1,34 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.DegreeRegistration;
+
+import java.math.BigDecimal;
+import java.util.Map;
+
+/**
+ * @Author qnc99
+ * @Date 2020/12/3 0003
+ */
+public class DegreeRegistrationActivityDto extends DegreeRegistration {
+
+    private Map<CourseSchedule.CourseScheduleType, Integer> additionCourseInfo;
+
+    private BigDecimal price;
+
+    public Map<CourseSchedule.CourseScheduleType, Integer> getAdditionCourseInfo() {
+        return additionCourseInfo;
+    }
+
+    public void setAdditionCourseInfo(Map<CourseSchedule.CourseScheduleType, Integer> additionCourseInfo) {
+        this.additionCourseInfo = additionCourseInfo;
+    }
+
+    public BigDecimal getPrice() {
+        return price;
+    }
+
+    public void setPrice(BigDecimal price) {
+        this.price = price;
+    }
+}

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

@@ -79,6 +79,16 @@ public class StudentManageListDto {
     
     private String subjectIdList;
 
+    private Integer isNewUser;
+
+    public Integer getIsNewUser() {
+        return isNewUser;
+    }
+
+    public void setIsNewUser(Integer isNewUser) {
+        this.isNewUser = isNewUser;
+    }
+
     public BigDecimal getBalance() {
         return balance;
     }

+ 29 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/DegreeRegistration.java

@@ -14,6 +14,8 @@ public class DegreeRegistration {
     @ApiModelProperty(value = "零星支付id",required = true)
     private Integer sporadicId;
 
+    private Integer userId;
+
     /**
      * 订单编号
      */
@@ -136,6 +138,16 @@ public class DegreeRegistration {
 
     private Integer organId;
 
+    private String activityTag;
+
+    public Boolean getRepay() {
+        return isRepay;
+    }
+
+    public void setRepay(Boolean repay) {
+        isRepay = repay;
+    }
+
     public Integer getId() {
         return id;
     }
@@ -144,6 +156,22 @@ public class DegreeRegistration {
         this.id = id;
     }
 
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getActivityTag() {
+        return activityTag;
+    }
+
+    public void setActivityTag(String activityTag) {
+        this.activityTag = activityTag;
+    }
+
     public Integer getSporadicId() {
         return sporadicId;
     }
@@ -319,4 +347,4 @@ public class DegreeRegistration {
     public void setOrganId(Integer organId) {
         this.organId = organId;
     }
-}
+}

+ 80 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/PracticeGroupSellPrice.java

@@ -23,6 +23,22 @@ public class PracticeGroupSellPrice {
 
     private BigDecimal twiceQuartActivityPrice;
 
+    private BigDecimal vipOneStudentTwelveCourseOriginalPriceWithNewUser;
+
+    private BigDecimal vipOneStudentTwelveCourseActivityPriceWithNewUser;
+
+    private BigDecimal vipOneStudentTwelveCourseOriginalPriceWithOldUser;
+
+    private BigDecimal vipOneStudentTwelveCourseActivityPriceWithOldUser;
+
+    private BigDecimal highOnlineTenCourseOriginalPriceWithNewUser;
+
+    private BigDecimal highOnlineTenCourseActivityPriceWithNewUser;
+
+    private BigDecimal highOnlineTenCourseOriginalPriceWithOldUser;
+
+    private BigDecimal highOnlineTenCourseActivityPriceWithOldUser;
+
     private Date createTime;
 
     private Date updateTime;
@@ -98,4 +114,68 @@ public class PracticeGroupSellPrice {
     public void setUpdateTime(Date updateTime) {
         this.updateTime = updateTime;
     }
+
+    public BigDecimal getVipOneStudentTwelveCourseOriginalPriceWithNewUser() {
+        return vipOneStudentTwelveCourseOriginalPriceWithNewUser;
+    }
+
+    public void setVipOneStudentTwelveCourseOriginalPriceWithNewUser(BigDecimal vipOneStudentTwelveCourseOriginalPriceWithNewUser) {
+        this.vipOneStudentTwelveCourseOriginalPriceWithNewUser = vipOneStudentTwelveCourseOriginalPriceWithNewUser;
+    }
+
+    public BigDecimal getVipOneStudentTwelveCourseActivityPriceWithNewUser() {
+        return vipOneStudentTwelveCourseActivityPriceWithNewUser;
+    }
+
+    public void setVipOneStudentTwelveCourseActivityPriceWithNewUser(BigDecimal vipOneStudentTwelveCourseActivityPriceWithNewUser) {
+        this.vipOneStudentTwelveCourseActivityPriceWithNewUser = vipOneStudentTwelveCourseActivityPriceWithNewUser;
+    }
+
+    public BigDecimal getVipOneStudentTwelveCourseOriginalPriceWithOldUser() {
+        return vipOneStudentTwelveCourseOriginalPriceWithOldUser;
+    }
+
+    public void setVipOneStudentTwelveCourseOriginalPriceWithOldUser(BigDecimal vipOneStudentTwelveCourseOriginalPriceWithOldUser) {
+        this.vipOneStudentTwelveCourseOriginalPriceWithOldUser = vipOneStudentTwelveCourseOriginalPriceWithOldUser;
+    }
+
+    public BigDecimal getVipOneStudentTwelveCourseActivityPriceWithOldUser() {
+        return vipOneStudentTwelveCourseActivityPriceWithOldUser;
+    }
+
+    public void setVipOneStudentTwelveCourseActivityPriceWithOldUser(BigDecimal vipOneStudentTwelveCourseActivityPriceWithOldUser) {
+        this.vipOneStudentTwelveCourseActivityPriceWithOldUser = vipOneStudentTwelveCourseActivityPriceWithOldUser;
+    }
+
+    public BigDecimal getHighOnlineTenCourseOriginalPriceWithNewUser() {
+        return highOnlineTenCourseOriginalPriceWithNewUser;
+    }
+
+    public void setHighOnlineTenCourseOriginalPriceWithNewUser(BigDecimal highOnlineTenCourseOriginalPriceWithNewUser) {
+        this.highOnlineTenCourseOriginalPriceWithNewUser = highOnlineTenCourseOriginalPriceWithNewUser;
+    }
+
+    public BigDecimal getHighOnlineTenCourseActivityPriceWithNewUser() {
+        return highOnlineTenCourseActivityPriceWithNewUser;
+    }
+
+    public void setHighOnlineTenCourseActivityPriceWithNewUser(BigDecimal highOnlineTenCourseActivityPriceWithNewUser) {
+        this.highOnlineTenCourseActivityPriceWithNewUser = highOnlineTenCourseActivityPriceWithNewUser;
+    }
+
+    public BigDecimal getHighOnlineTenCourseOriginalPriceWithOldUser() {
+        return highOnlineTenCourseOriginalPriceWithOldUser;
+    }
+
+    public void setHighOnlineTenCourseOriginalPriceWithOldUser(BigDecimal highOnlineTenCourseOriginalPriceWithOldUser) {
+        this.highOnlineTenCourseOriginalPriceWithOldUser = highOnlineTenCourseOriginalPriceWithOldUser;
+    }
+
+    public BigDecimal getHighOnlineTenCourseActivityPriceWithOldUser() {
+        return highOnlineTenCourseActivityPriceWithOldUser;
+    }
+
+    public void setHighOnlineTenCourseActivityPriceWithOldUser(BigDecimal highOnlineTenCourseActivityPriceWithOldUser) {
+        this.highOnlineTenCourseActivityPriceWithOldUser = highOnlineTenCourseActivityPriceWithOldUser;
+    }
 }

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

@@ -39,6 +39,8 @@ public class Student extends SysUser {
 
 	private String teacherName;
 
+	private Boolean isNewUser;
+
 	public Student(Integer userId, String subjectIdList) {
 		this.userId = userId;
 		this.subjectIdList = subjectIdList;
@@ -46,6 +48,14 @@ public class Student extends SysUser {
 		this.serviceTag = 1;
 	}
 
+	public Boolean getIsNewUser() {
+		return isNewUser;
+	}
+
+	public void setIsNewUser(Boolean isNewUser) {
+		this.isNewUser = isNewUser;
+	}
+
 	public String getSubjectNames() {
 		return subjectNames;
 	}

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

@@ -15,7 +15,8 @@ public enum OrderDetailTypeEnum implements BaseEnum<String, OrderDetailTypeEnum>
 	MIX_COURSE("MIX_COURSE", "乐团合奏训练"),
 	HIGH_ONLINE_COURSE("HIGH_ONLINE_COURSE", "网络基础训练"),
 	HOLIDAY_COURSE("HOLIDAY_COURSE", "假期集中训练"),
-	NETWORK_COURSE("NETWORK_COURSE", "乐团云课堂");
+	NETWORK_COURSE("NETWORK_COURSE", "乐团云课堂"),
+	DEGREE_REGISTRATION("DEGREE_REGISTRATION", "考级报名");
 
 	private String code;
 

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

@@ -20,7 +20,8 @@ public enum OrderTypeEnum implements BaseEnum<String, OrderTypeEnum> {
 	GOODS_SELL("GOODS_SELL","商品销售"),
 	OUTORDER("OUTORDER", "外部订单"),
 	REPAIR("REPAIR","乐器维修"),
-	SUBJECT_CHANGE("SUBJECT_CHANGE","声部更换");
+	SUBJECT_CHANGE("SUBJECT_CHANGE","声部更换"),
+	DEGREE_REGISTRATION("DEGREE_REGISTRATION", "考级报名");
 
 
 	private String code;

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentManageQueryInfo.java

@@ -38,6 +38,16 @@ public class StudentManageQueryInfo extends QueryInfo {
     
     private Integer teacherId;
 
+    private Integer isNewUser;
+
+    public Integer getIsNewUser() {
+        return isNewUser;
+    }
+
+    public void setIsNewUser(Integer isNewUser) {
+        this.isNewUser = isNewUser;
+    }
+
     public Integer getServiceTag() {
         return serviceTag;
     }

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

@@ -1,19 +1,28 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dto.DegreeRegistrationActivityDto;
 import com.ym.mec.biz.dal.dto.PageInfoDegree;
 import com.ym.mec.biz.dal.dto.PageInfoOrder;
 import com.ym.mec.biz.dal.entity.DegreeRegistration;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.page.DegreeQueryInfo;
+import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.service.BaseService;
+import com.ym.mec.util.date.DateUtil;
 
-import java.util.Map;
+import java.util.*;
 
 public interface DegreeRegistrationService extends BaseService<Integer, DegreeRegistration> {
 
-    Map pay(DegreeRegistration degreeRegistration) throws Exception;
+    String ACTIVITY_TAG = "DEGREE_REGISTRATION_2020_12";
 
-    Boolean updateStatus(Integer id , Integer status,String orderNo);
+    Set<String> FREE_PRICE_LEVEL = new HashSet<>(Arrays.asList(new String[]{"一级", "二级", "三级"}));
+
+    Date ACTIVITY_END_TIME = DateUtil.stringToDate("2020-12-31 23:59:59", "yyyy-MM-dd HH:mm:ss");
+
+    HttpResponseResult pay(DegreeRegistrationActivityDto degreeRegistration) throws Exception;
+
+    Boolean updateStatus(StudentPaymentOrder order);
 
     PageInfoDegree<DegreeRegistration> getPageList(DegreeQueryInfo queryInfo);
 }

+ 239 - 84
mec-biz/src/main/java/com/ym/mec/biz/service/impl/DegreeRegistrationServiceImpl.java

@@ -1,23 +1,24 @@
 package com.ym.mec.biz.service.impl;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
+import com.alibaba.fastjson.JSON;
 import com.ym.mec.biz.dal.dao.*;
-import com.ym.mec.biz.dal.entity.Organization;
+import com.ym.mec.biz.dal.dto.DegreeRegistrationActivityDto;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
+import com.ym.mec.common.constant.CommonConstants;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.ym.mec.biz.dal.dto.PageInfoDegree;
-import com.ym.mec.biz.dal.entity.DegreeRegistration;
-import com.ym.mec.biz.dal.entity.SporadicChargeInfo;
-import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.OrderTypeEnum;
@@ -30,6 +31,7 @@ import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.IdGeneratorService;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
+import org.springframework.util.CollectionUtils;
 
 @Service
 public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, DegreeRegistration> implements DegreeRegistrationService {
@@ -47,13 +49,22 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
     private StudentPaymentOrderService studentPaymentOrderService;
 
     @Autowired
+    private StudentPaymentOrderDao studentPaymentOrderDao;
+
+    @Autowired
     private SysConfigDao sysConfigDao;
 
     @Autowired
     private PayService payService;
 
     @Autowired
-    private OrganizationDao organizationDao;
+    private PracticeGroupSellPriceDao practiceGroupSellPriceDao;
+
+    @Autowired
+    private StudentDao studentDao;
+
+    @Autowired
+    private StudentPaymentOrderDetailDao studentPaymentOrderDetailDao;
 
     @Override
     public BaseDAO<Integer, DegreeRegistration> getDAO() {
@@ -61,79 +72,190 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
-    public Map pay(DegreeRegistration degreeRegistration) throws Exception {
-        Date nowDate = new Date();
-        //获取收费项价格
-        SporadicChargeInfo chargeInfo = sporadicChargeInfoDao.get(degreeRegistration.getSporadicId());
-        if (chargeInfo == null || chargeInfo.getDelFlag().equals(1) || chargeInfo.getOpenFlag().equals(1)) {
-            throw new BizException("你选的考试级别不存在");
-        }
+    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+    public HttpResponseResult pay(DegreeRegistrationActivityDto degreeRegistration) throws Exception {
+        Student student = studentDao.getLocked(degreeRegistration.getUserId());
+
+        List<DegreeRegistration> userLevelDegrees = degreeRegistrationDao.getUserLevelDegrees(degreeRegistration.getUserId(), ACTIVITY_TAG);
+        long endLevelNum = userLevelDegrees.stream().filter(d -> Objects.nonNull(d.getSporadicId())&&d.getStatus().equals(2)).count();
+        long ingLevelNum = userLevelDegrees.stream().filter(d -> Objects.nonNull(d.getSporadicId())&&d.getStatus().equals(1)).count();
+        long endTheoryLevelNum = userLevelDegrees.stream().filter(d -> StringUtils.isNotBlank(d.getTheoryLevel())&&d.getStatus().equals(2)).count();
+        long ingTheoryLevelNum = userLevelDegrees.stream().filter(d -> StringUtils.isNotBlank(d.getTheoryLevel())&&d.getStatus().equals(1)).count();
 
-        if (!chargeInfo.getTitle().equals("一级") && !chargeInfo.getTitle().equals("二级") && StringUtils.equals("免考", degreeRegistration.getTheoryLevel())
-                && StringUtils.isBlank(degreeRegistration.getTheoryCert())) {
-            throw new BizException("报考级别为“" + chargeInfo.getTitle() + "”且乐理级别是“免考”时,必须上传证书");
+        if(Objects.nonNull(degreeRegistration.getSporadicId())&&endLevelNum>0){
+            throw new BizException("您已报考过选择的考级项目");
+        }
+        if(StringUtils.isNotBlank(degreeRegistration.getTheoryLevel())&&endTheoryLevelNum>0){
+            throw new BizException("您已报考过选择的考级项目");
         }
 
-        List<Organization> organs = organizationDao.findAllOrgans();
-        Integer organId = chargeInfo.getOrganId();
-        for (Organization organ : organs) {
-            if (degreeRegistration.getCity().contains(organ.getName())) {
-                organId = organ.getId();
-                break;
-            }
+        degreeRegistration.setActivityTag(ACTIVITY_TAG);
+
+        Date nowDate = new Date();
+
+        if(ACTIVITY_END_TIME.compareTo(nowDate)<0){
+            throw new BizException("活动已截至");
         }
 
         String orderNo = idGeneratorService.generatorId("payment") + "";
 
-        degreeRegistration.setLevel(chargeInfo.getTitle());
-        degreeRegistration.setOrderNo(orderNo);
-        degreeRegistration.setOrganId(organId);
-        BigDecimal theoryMoney = BigDecimal.ZERO;
-        switch (degreeRegistration.getTheoryLevel()) {
-            case "一级":
-                theoryMoney = new BigDecimal(200);
-                break;
-            case "二级":
-                theoryMoney = new BigDecimal(240);
-                break;
-            case "三级":
-                theoryMoney = new BigDecimal(280);
-                break;
-            case "四级":
-                theoryMoney = new BigDecimal(320);
-                break;
-            case "免考":
-                break;
-            default:
-                throw new BizException("您选择的乐理级别不存在,请核对");
-        }
-        degreeRegistration.setTheoryMoney(theoryMoney);
-        DegreeRegistration degree = degreeRegistrationDao.findByMobileAndSporadicId(degreeRegistration.getMobile(), degreeRegistration.getSporadicId());
-        if (degree == null) {
+        //获取收费项价格
+        SporadicChargeInfo chargeInfo = null;
+        if(Objects.nonNull(degreeRegistration.getSporadicId())){
+            chargeInfo = sporadicChargeInfoDao.get(degreeRegistration.getSporadicId());
+            if (chargeInfo == null || chargeInfo.getDelFlag().equals(1) || chargeInfo.getOpenFlag().equals(1)) {
+                throw new BizException("你选的考试级别不存在");
+            }
+
+            if (!chargeInfo.getTitle().equals("一级") && !chargeInfo.getTitle().equals("二级") && StringUtils.equals("免考", degreeRegistration.getTheoryLevel())
+                    && StringUtils.isBlank(degreeRegistration.getTheoryCert())) {
+                throw new BizException("报考级别为“" + chargeInfo.getTitle() + "”且乐理级别是“免考”时,必须上传证书");
+            }
+            degreeRegistration.setLevel(chargeInfo.getTitle());
             degreeRegistration.setMoney(chargeInfo.getAmount());
+        }else{
+            degreeRegistration.setMoney(BigDecimal.ZERO);
+        }
+
+        if(StringUtils.isNotBlank(degreeRegistration.getTheoryLevel())){
+            degreeRegistration.setOrderNo(orderNo);
+            BigDecimal theoryMoney = BigDecimal.ZERO;
+            switch (degreeRegistration.getTheoryLevel()) {
+                case "一级":
+                    theoryMoney = new BigDecimal(200);
+                    break;
+                case "二级":
+                    theoryMoney = new BigDecimal(240);
+                    break;
+                case "三级":
+                    theoryMoney = new BigDecimal(280);
+                    break;
+                case "四级":
+                    theoryMoney = new BigDecimal(320);
+                    break;
+                case "免考":
+                    break;
+                default:
+                    throw new BizException("您选择的乐理级别不存在,请核对");
+            }
+            degreeRegistration.setTheoryMoney(theoryMoney);
+        }else{
+            degreeRegistration.setTheoryMoney(BigDecimal.ZERO);
+        }
+
+        if(Objects.nonNull(degreeRegistration.getSporadicId())||StringUtils.isNotBlank(degreeRegistration.getTheoryLevel())){
             degreeRegistration.setStatus(1);
             degreeRegistration.setCreateTime(nowDate);
             degreeRegistration.setUpdateTime(nowDate);
             degreeRegistrationDao.insert(degreeRegistration);
-        } else if (degree.getStatus().equals(2)) {
-            throw new BizException("您本次已报名,请勿重复报名");
-        } else {
-            degreeRegistration.setId(degree.getId());
-            degreeRegistration.setStatus(1);
-            degreeRegistration.setCreateTime(nowDate);
-            degreeRegistration.setUpdateTime(nowDate);
-            degreeRegistrationDao.update(degreeRegistration);
+
+            List<DegreeRegistration> updateDegrees = new ArrayList<>();
+            if(ingLevelNum>0||ingTheoryLevelNum>0){
+                for (DegreeRegistration userLevelDegree : userLevelDegrees) {
+                    if(Objects.nonNull(userLevelDegree.getSporadicId())&&Objects.nonNull(userLevelDegree.getSporadicId())){
+                        userLevelDegree.setStatus(0);
+                        updateDegrees.add(userLevelDegree);
+                    }
+                    if(Objects.nonNull(userLevelDegree.getTheoryLevel())&&StringUtils.isNotBlank(userLevelDegree.getTheoryLevel())){
+                        userLevelDegree.setStatus(0);
+                        updateDegrees.add(userLevelDegree);
+                    }
+                }
+                if(!CollectionUtils.isEmpty(updateDegrees)){
+                    degreeRegistrationDao.batchUpdate(updateDegrees);
+                }
+            }
+        }
+
+        BigDecimal additionCoursePrice = new BigDecimal("0");
+        if(Objects.nonNull(degreeRegistration.getAdditionCourseInfo())){
+            Map<CourseSchedule.CourseScheduleType, Integer> additionCourseInfo = degreeRegistration.getAdditionCourseInfo();
+            PracticeGroupSellPrice practiceGroupSellPrice = practiceGroupSellPriceDao.get(degreeRegistration.getOrganId());
+            if(Objects.isNull(practiceGroupSellPrice)){
+                throw new BizException("该分部暂未参与此活动");
+            }
+
+            List<StudentPaymentOrderDetail> historyOrderDetails = studentPaymentOrderDetailDao.getWithUserAndOrderType(degreeRegistration.getUserId(), OrderTypeEnum.DEGREE_REGISTRATION);
+            int historyVipNum = 0, historyPracticeNum = 0, historyHighNum = 0;
+            for (StudentPaymentOrderDetail historyOrderDetail : historyOrderDetails) {
+                if(StringUtils.isBlank(historyOrderDetail.getGoodsIdList())){
+                    continue;
+                }
+                Map<String, Integer> courseNumMap = JSON.parseObject(historyOrderDetail.getGoodsIdList(), Map.class);
+                for (Map.Entry<String, Integer> stringIntegerEntry : courseNumMap.entrySet()) {
+                    switch (stringIntegerEntry.getKey()){
+                        case "VIP":
+                            historyVipNum = historyVipNum + stringIntegerEntry.getValue();
+                            break;
+                        case "PRACTICE":
+                            historyPracticeNum = historyPracticeNum + stringIntegerEntry.getValue();
+                            break;
+                        case "HIGH":
+                            historyHighNum = historyHighNum + stringIntegerEntry.getValue();
+                            break;
+                    }
+                }
+            }
+
+            BigDecimal practiceUnitPrice = practiceGroupSellPrice.getOnceOriginalPrice(),
+                    vipUnitPrice = practiceGroupSellPrice.getVipOneStudentTwelveCourseActivityPriceWithNewUser(), highUnitPrice;
+
+            if(additionCourseInfo.containsKey(CourseSchedule.CourseScheduleType.HIGH)){
+                historyHighNum = historyHighNum + additionCourseInfo.get(CourseSchedule.CourseScheduleType.HIGH);
+            }
+            if(student.getIsNewUser()){
+                highUnitPrice = practiceGroupSellPrice.getHighOnlineTenCourseOriginalPriceWithNewUser();
+                if(additionCourseInfo.containsKey(CourseSchedule.CourseScheduleType.VIP)){
+                    historyVipNum = historyVipNum + additionCourseInfo.get(CourseSchedule.CourseScheduleType.VIP);
+                }
+                if(historyVipNum<=0){
+                    additionCourseInfo.remove(CourseSchedule.CourseScheduleType.PRACTICE);
+                }
+                boolean vipMoreThan2 = historyVipNum>=2;
+                if(vipMoreThan2){
+                    if(FREE_PRICE_LEVEL.contains(degreeRegistration.getLevel())){
+                        degreeRegistration.setMoney(BigDecimal.ZERO);
+                    }else{
+                        degreeRegistration.setMoney(degreeRegistration.getMoney().divide(new BigDecimal(2), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN));
+                    }
+                    highUnitPrice = practiceGroupSellPrice.getHighOnlineTenCourseActivityPriceWithNewUser();
+                }
+                if(vipMoreThan2&&historyHighNum>0){
+                    degreeRegistration.setTheoryMoney(BigDecimal.ZERO);
+                }
+            }else{
+                highUnitPrice = practiceGroupSellPrice.getHighOnlineTenCourseActivityPriceWithOldUser();
+                if(historyHighNum<=0){
+                    additionCourseInfo.remove(CourseSchedule.CourseScheduleType.PRACTICE);
+                }
+            }
+            for (Map.Entry<CourseSchedule.CourseScheduleType, Integer> courseScheduleTypeIntegerEntry : additionCourseInfo.entrySet()) {
+                BigDecimal courseTime = new BigDecimal(courseScheduleTypeIntegerEntry.getValue());
+                switch (courseScheduleTypeIntegerEntry.getKey()){
+                    case VIP:
+                        additionCoursePrice = additionCoursePrice.add(vipUnitPrice.multiply(courseTime));
+                        break;
+                    case PRACTICE:
+                        additionCoursePrice = additionCoursePrice.add(practiceUnitPrice.multiply(courseTime));
+                        break;
+                    case HIGH:
+                        additionCoursePrice = additionCoursePrice.add(highUnitPrice.multiply(courseTime));
+                        break;
+                }
+            }
         }
-        degreeRegistrationDao.getLock(degreeRegistration.getId());
 
+        BigDecimal amount = degreeRegistration.getMoney();
+        amount = amount.add(degreeRegistration.getTheoryMoney());
+        amount = amount.add(additionCoursePrice);
 
-        BigDecimal amount = chargeInfo.getAmount();
-        amount = amount.add(theoryMoney);
+        if(amount.compareTo(degreeRegistration.getPrice())!=0){
+            throw new BizException("商品价格不符");
+        }
 
-        OrderTypeEnum type = OrderTypeEnum.SPORADIC;
+        OrderTypeEnum type = OrderTypeEnum.DEGREE_REGISTRATION;
 
-        Integer userId = degreeRegistration.getId();
+        Integer userId = degreeRegistration.getUserId();
         String channelType = "";
         StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
         studentPaymentOrder.setUserId(userId);
@@ -143,15 +265,32 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
         studentPaymentOrder.setExpectAmount(amount);
         studentPaymentOrder.setActualAmount(amount);
         studentPaymentOrder.setStatus(DealStatusEnum.ING);
-        studentPaymentOrder.setMusicGroupId(degreeRegistration.getSporadicId().toString());
-        studentPaymentOrder.setOrganId(organId);
-        studentPaymentOrder.setRoutingOrganId(organId);
-        if (theoryMoney.compareTo(BigDecimal.ZERO) > 0) {
-            studentPaymentOrder.setMemo("乐理" + degreeRegistration.getTheoryLevel() + ",费用:" + theoryMoney);
+        studentPaymentOrder.setClassGroupId(degreeRegistration.getId());
+        if(Objects.nonNull(degreeRegistration.getSporadicId())){
+            studentPaymentOrder.setMusicGroupId(degreeRegistration.getSporadicId().toString());
+        }
+        studentPaymentOrder.setOrganId(degreeRegistration.getOrganId());
+        studentPaymentOrder.setRoutingOrganId(degreeRegistration.getOrganId());
+        if (degreeRegistration.getTheoryMoney().compareTo(BigDecimal.ZERO) > 0) {
+            studentPaymentOrder.setMemo("乐理" + degreeRegistration.getTheoryLevel() + ",费用:" + degreeRegistration.getTheoryMoney());
         }
         studentPaymentOrderService.insert(studentPaymentOrder);
         studentPaymentOrder.setVersion(0);
 
+        if(BigDecimal.ZERO.compareTo(additionCoursePrice)<0){
+            StudentPaymentOrderDetail studentPaymentOrderDetail = new StudentPaymentOrderDetail();
+            studentPaymentOrderDetail.setType(OrderDetailTypeEnum.DEGREE_REGISTRATION);
+            if(Objects.nonNull(degreeRegistration.getAdditionCourseInfo())){
+                studentPaymentOrderDetail.setGoodsIdList(JSON.toJSONString(degreeRegistration.getAdditionCourseInfo()));
+            }
+            studentPaymentOrderDetail.setPrice(additionCoursePrice);
+            studentPaymentOrderDetail.setRemitFee(BigDecimal.ZERO);
+            studentPaymentOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
+            studentPaymentOrderDetail.setCreateTime(nowDate);
+            studentPaymentOrderDetail.setUpdateTime(nowDate);
+            studentPaymentOrderDetailDao.insert(studentPaymentOrderDetail);
+        }
+
         if (amount.compareTo(BigDecimal.ZERO) == 0) {
             Map<String, String> notifyMap = new HashMap<>();
             notifyMap.put("tradeState", "1");
@@ -159,7 +298,7 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
             notifyMap.put("channelType", channelType);
             notifyMap.put("orderNo", "");
             studentPaymentOrderService.updateOrder(notifyMap);
-            return notifyMap;
+            return BaseController.failed(HttpStatus.CREATED, "恭喜您,支付成功!");
         }
 
         String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
@@ -171,30 +310,46 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
                 orderNo,
                 baseApiUrl + "/api-student/studentOrder/notify",
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
-                chargeInfo.getDetail(),
-                chargeInfo.getDetail(),
-                organId,
+                Objects.nonNull(chargeInfo)?chargeInfo.getDetail():"考级报名活动",
+                Objects.nonNull(chargeInfo)?chargeInfo.getDetail():"考级报名活动",
+                degreeRegistration.getOrganId(),
                 receiver
         );
 
-        studentPaymentOrder.setOrganId(organId);
+        studentPaymentOrder.setOrganId(degreeRegistration.getOrganId());
         studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
         studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
         studentPaymentOrder.setUpdateTime(nowDate);
         studentPaymentOrderService.update(studentPaymentOrder);
-        return payMap;
+        return BaseController.succeed(payMap);
     }
 
     @Override
-    public Boolean updateStatus(Integer id, Integer status, String orderNo) {
-        DegreeRegistration degree = degreeRegistrationDao.getLock(id);
-        if (degree == null || degree.getStatus().equals(2)) {
+    public Boolean updateStatus(StudentPaymentOrder studentPaymentOrder) {
+        DegreeRegistration degree = degreeRegistrationDao.getLock(studentPaymentOrder.getClassGroupId());
+
+        int updateCount = studentPaymentOrderService.update(studentPaymentOrder);
+        if (updateCount <= 0) {
+            throw new BizException("订单更新失败");
+        }
+
+        if (degree == null || !degree.getStatus().equals(1)) {
+            studentPaymentOrder.setMemo("订单状态已变更");
+            studentPaymentOrder.setVersion(studentPaymentOrder.getVersion()+1);
+            studentPaymentOrderService.update(studentPaymentOrder);
             return true;
         }
-        StudentPaymentOrder order = studentPaymentOrderService.findOrderByOrderNo(orderNo);
-        degree.setOrderNo(orderNo);
-        degree.setTransNo(order.getTransNo());
-        degree.setStatus(status);
+        degree.setOrderNo(studentPaymentOrder.getOrderNo());
+        degree.setTransNo(studentPaymentOrder.getTransNo());
+        switch (studentPaymentOrder.getStatus()){
+            case SUCCESS:
+                degree.setStatus(2);
+                break;
+            case FAILED:
+            case CLOSE:
+                degree.setStatus(0);
+                break;
+        }
         degree.setUpdateTime(new Date());
         if (degreeRegistrationDao.update(degree) <= 0) {
             throw new BizException("更新支付状态失败");

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

@@ -113,7 +113,7 @@ public class SporadicChargeInfoImpl extends BaseServiceImpl<Integer, SporadicCha
             } else if (info.getChargeType().getCode() == 9) { //零星收费账户充值
                 sysUserCashAccountService.updateBalance(userId, studentPaymentOrder.getActualAmount(), PlatformCashAccountDetailTypeEnum.RECHARGE, "零星收费账户充值", studentPaymentOrder.getTransNo());
             } else if (info.getOrganId().equals(42) && info.getChargeType().equals(SporadicChargeTypeEnum.LEVEL)) {
-                degreeRegistrationService.updateStatus(studentPaymentOrder.getUserId(), 2, studentPaymentOrder.getOrderNo());
+                degreeRegistrationService.updateStatus(studentPaymentOrder);
                 return true;
             } else {
                 //插入交易明细
@@ -164,7 +164,7 @@ public class SporadicChargeInfoImpl extends BaseServiceImpl<Integer, SporadicCha
         }
         if (studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED) {
             if (info.getOrganId().equals(42) && info.getChargeType().equals(SporadicChargeTypeEnum.LEVEL)) {
-                degreeRegistrationService.updateStatus(studentPaymentOrder.getUserId(), 0, studentPaymentOrder.getOrderNo());
+                degreeRegistrationService.updateStatus(studentPaymentOrder);
                 return true;
             }
 

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -59,6 +59,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     private SysUserCashAccountService sysUserCashAccountService;
     @Autowired
     private SubjectChangeService subjectChangeService;
+    @Autowired
+    private DegreeRegistrationService degreeRegistrationService;
 
     @Override
     public BaseDAO<Long, StudentPaymentOrder> getDAO() {
@@ -255,6 +257,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             studentRepairService.goodsSellOrderCallback(order);
         } else if (order.getType().equals(OrderTypeEnum.SUBJECT_CHANGE)) {
             subjectChangeService.orderCallback(order);
+        } else if (order.getType().equals(OrderTypeEnum.DEGREE_REGISTRATION)) {
+            degreeRegistrationService.updateStatus(order);
         }
     }
 

+ 112 - 7
mec-biz/src/main/resources/config/mybatis/DegreeRegistrationMapper.xml

@@ -5,6 +5,7 @@
         <!--@mbg.generated-->
         <!--@Table degree_registration-->
         <id column="id_" jdbcType="INTEGER" property="id"/>
+        <result column="user_id_" property="userId"/>
         <result column="sporadic_id_" jdbcType="INTEGER" property="sporadicId"/>
         <result column="organ_id_" jdbcType="INTEGER" property="organId"/>
         <result column="order_no_" jdbcType="VARCHAR" property="orderNo"/>
@@ -25,6 +26,7 @@
         <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
         <result column="update_time_" jdbcType="TIMESTAMP" property="updateTime"/>
         <result column="status_" jdbcType="TINYINT" property="status"/>
+        <result column="activity_tag_" property="activityTag"/>
     </resultMap>
 
     <select id="get" parameterType="java.lang.Integer" resultMap="DegreeRegistration">
@@ -121,22 +123,25 @@
     <insert id="insert" keyColumn="id_" keyProperty="id" parameterType="com.ym.mec.biz.dal.entity.DegreeRegistration"
             useGeneratedKeys="true">
         <!--@mbg.generated-->
-        insert into degree_registration (sporadic_id_,organ_id_,order_no_, name_, gender_,
+        insert into degree_registration (user_id_,sporadic_id_,organ_id_,order_no_, name_, gender_,
         idcard_, city_, school_,
         subject_,level_, theory_level_,theory_money_, theory_cert_,mobile_,
         money_, memo_, create_time_,
-        update_time_, status_)
-        values (#{sporadicId,jdbcType=INTEGER},#{organId,jdbcType=INTEGER}, #{orderNo,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{gender,jdbcType=VARCHAR},
+        update_time_, status_, activity_tag_)
+        values (#{userId},#{sporadicId,jdbcType=INTEGER},#{organId,jdbcType=INTEGER}, #{orderNo,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{gender,jdbcType=VARCHAR},
         #{idcard,jdbcType=VARCHAR}, #{city,jdbcType=VARCHAR}, #{school,jdbcType=VARCHAR},
         #{subject,jdbcType=VARCHAR},#{level,jdbcType=VARCHAR},
         #{theoryLevel,jdbcType=VARCHAR},#{theoryMoney,jdbcType=DECIMAL},
         #{theoryCert,jdbcType=VARCHAR},#{mobile,jdbcType=VARCHAR},#{money,jdbcType=DECIMAL}, #{memo,jdbcType=VARCHAR},
-        #{createTime}, #{updateTime}, #{status,jdbcType=TINYINT})
+        #{createTime}, #{updateTime}, #{status,jdbcType=TINYINT}, #{activityTag})
     </insert>
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.DegreeRegistration">
         <!--@mbg.generated-->
         update degree_registration
         <set>
+            <if test="userId != null">
+                user_id_ = #{userId},
+            </if>
             <if test="organId != null">
                 organ_id_ = #{organId,jdbcType=INTEGER},
             </if>
@@ -191,16 +196,90 @@
             <if test="createTime != null">
                 create_time_ = #{createTime},
             </if>
-            <if test="updateTime != null">
-                update_time_ = #{updateTime},
-            </if>
             <if test="status != null">
                 status_ = #{status,jdbcType=INTEGER},
             </if>
+            <if test="activityTag != null">
+                activity_tag_ = #{activityTag},
+            </if>
+                update_time_ = NOW()
         </set>
         where id_ = #{id,jdbcType=INTEGER}
     </update>
 
+    <update id="batchUpdate" parameterType="com.ym.mec.biz.dal.entity.DegreeRegistration">
+        <foreach collection="degrees" item="degree" separator=";">
+            update degree_registration
+            <set>
+                <if test="degree.userId != null">
+                    user_id_ = #{degree.userId},
+                </if>
+                <if test="degree.organId != null">
+                    organ_id_ = #{degree.organId,jdbcType=INTEGER},
+                </if>
+                <if test="degree.sporadicId != null">
+                    sporadic_id_ = #{degree.sporadicId,jdbcType=INTEGER},
+                </if>
+                <if test="degree.orderNo != null">
+                    order_no_ = #{degree.orderNo,jdbcType=VARCHAR},
+                </if>
+                <if test="degree.transNo != null">
+                    trans_no_ = #{degree.transNo,jdbcType=VARCHAR},
+                </if>
+                <if test="degree.name != null">
+                    name_ = #{degree.name,jdbcType=VARCHAR},
+                </if>
+                <if test="degree.gender != null">
+                    gender_ = #{degree.gender,jdbcType=VARCHAR},
+                </if>
+                <if test="degree.idcard != null">
+                    idcard_ = #{degree.idcard,jdbcType=VARCHAR},
+                </if>
+                <if test="degree.city != null">
+                    city_ = #{degree.city,jdbcType=VARCHAR},
+                </if>
+                <if test="degree.school != null">
+                    school_ = #{degree.school,jdbcType=VARCHAR},
+                </if>
+                <if test="degree.subject != null">
+                    subject_ = #{degree.subject,jdbcType=VARCHAR},
+                </if>
+                <if test="degree.level != null">
+                    level_ = #{degree.level,jdbcType=VARCHAR},
+                </if>
+                <if test="degree.theoryLevel != null">
+                    theory_level_ = #{degree.theoryLevel,jdbcType=VARCHAR},
+                </if>
+                <if test="degree.theoryLevel != null">
+                    theory_money_ = #{degree.theoryMoney,jdbcType=DECIMAL},
+                </if>
+                <if test="degree.theoryLevel != null">
+                    theory_cert_ = #{degree.theoryCert,jdbcType=VARCHAR},
+                </if>
+                <if test="degree.mobile != null">
+                    mobile_ = #{degree.mobile,jdbcType=VARCHAR},
+                </if>
+                <if test="degree.money != null">
+                    money_ = #{degree.money,jdbcType=DECIMAL},
+                </if>
+                <if test="degree.memo != null">
+                    memo_ = #{degree.memo,jdbcType=VARCHAR},
+                </if>
+                <if test="degree.createTime != null">
+                    create_time_ = #{degree.createTime},
+                </if>
+                <if test="degree.status != null">
+                    status_ = #{degree.status,jdbcType=INTEGER},
+                </if>
+                <if test="degree.activityTag != null">
+                    activity_tag_ = #{degree.activityTag},
+                </if>
+                    update_time_ = NOW()
+            </set>
+            where id_ = #{degree.id,jdbcType=INTEGER}
+        </foreach>
+    </update>
+
     <select id="findByMobileAndSporadicId" resultMap="DegreeRegistration">
         SELECT *
         FROM degree_registration
@@ -214,4 +293,30 @@
         WHERE id_ = #{id} FOR
         UPDATE
     </select>
+
+    <select id="getWithUserIdAndActivityTag" resultMap="DegreeRegistration">
+        select *
+            from degree_registration
+        where
+            user_id_ = #{degree.userId}
+            AND activity_tag_=#{degree.activityTag}
+            <if test="degree.subject!=null and degree.subject!=''">
+                AND subject_ = #{degree.subject}
+            </if>
+            <if test="degree.sporadicId!=null">
+                AND sporadic_id_ = #{degree.sporadicId}
+            </if>
+            <if test="degree.theoryLevel!=null">
+                AND theory_level_ = #{degree.theoryLevel}
+            </if>
+    </select>
+
+    <select id="getUserLevelDegrees" resultMap="DegreeRegistration">
+        select *
+            from degree_registration
+        where
+            user_id_ = #{userId}
+            AND activity_tag_=#{activityTag}
+            AND (sporadic_id_ IS NOT NULL OR theory_level_ IS NOT NULL)
+    </select>
 </mapper>

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

@@ -143,4 +143,9 @@
             #{organId}
         </foreach>
     </select>
+
+    <select id="getActivityOrgans" resultMap="Organization">
+        SELECT o.* FROM practice_group_sell_price pgsp
+        LEFT JOIN organization o ON pgsp.organ_id_=o.id_
+    </select>
 </mapper>

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

@@ -11,6 +11,14 @@
 		<result column="twice_original_price" property="twiceOriginalPrice" />
 		<result column="twice_activity_price" property="twiceActivityPrice" />
 		<result column="twice_quart_activity_price_" property="twiceQuartActivityPrice" />
+		<result column="vip_one_student_twelve_course_original_price_with_new_user" property="vipOneStudentTwelveCourseOriginalPriceWithNewUser" />
+		<result column="vip_one_student_twelve_course_activity_price_with_new_user" property="vipOneStudentTwelveCourseActivityPriceWithNewUser" />
+		<result column="vip_one_student_twelve_course_original_price_with_old_user" property="vipOneStudentTwelveCourseOriginalPriceWithOldUser" />
+		<result column="vip_one_student_twelve_course_activity_price_with_old_user" property="vipOneStudentTwelveCourseActivityPriceWithOldUser" />
+		<result column="high_online_ten_course_original_price_with_new_user" property="highOnlineTenCourseOriginalPriceWithNewUser" />
+		<result column="high_online_ten_course_activity_price_with_new_user" property="highOnlineTenCourseActivityPriceWithNewUser" />
+		<result column="high_online_ten_course_original_price_with_old_user" property="highOnlineTenCourseOriginalPriceWithOldUser" />
+		<result column="high_online_ten_course_activity_price_with_old_user" property="highOnlineTenCourseActivityPriceWithOldUser" />
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
 	</resultMap>

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

@@ -593,7 +593,7 @@
                SUM(IF(g.type_ != 'INSTRUMENT', so.expect_amount_, 0)) teachingFee
         FROM student_payment_order spo
                  LEFT JOIN sell_order so ON spo.id_ = so.order_id_
-                 LEFT JOIN goods g ON g.id_ = so.goods_id_
+                 LEFT JOIN goods g ON IF(so.parent_goods_id_ IS NOT NULL,g.id_ = so.parent_goods_id_,g.id_ = so.goods_id_)
         WHERE spo.id_ = #{orderId}
     </select>
 </mapper>

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

@@ -62,6 +62,7 @@
         <result property="teacherName" column="teacher_name_"/>
         <result property="teacherId" column="teacher_id_"/>
         <result property="subjectIdList" column="subject_id_list_"/>
+        <result property="isNewUser" column="is_new_user_"/>
     </resultMap>
 
     <sql id="queryCondition">
@@ -150,7 +151,7 @@
     <select id="findStudentsByOrganId" resultMap="studentManageListDto">
         SELECT o.`name_` organ_name_,s.`user_id_` ,su.`username_` ,su.`phone_` parents_phone_,su.`real_name_` ,su.`gender_` , su.organ_id_,
 		tu.`real_name_` teacher_name_,IF(s.service_tag_=2,0,s.service_tag_) service_tag_ ,s.`operating_tag_` , suca.`course_balance_` ,sub.`name_` music_group_subject_ ,su.birthdate_,s.subject_id_list_,s.teacher_id_,
-		case when su.password_ is null then false else true end isActive_
+		case when su.password_ is null then false else true end isActive_,s.is_new_user_
 		FROM `student` s LEFT JOIN `sys_user` su on s.`user_id_` = su.`id_`
 		LEFT JOIN `organization` o on o.`id_` = su.`organ_id_`
 		LEFT JOIN `sys_user` tu on tu.`id_` = s.`teacher_id_` 
@@ -184,6 +185,9 @@
             <if test="teacherId != null">
                 AND s.teacher_id_ = #{teacherId}
             </if>
+            <if test="isNewUser != null">
+                AND s.is_new_user_ = #{isNewUser}
+            </if>
         </where>
     </sql>
 

+ 4 - 0
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -14,6 +14,7 @@
         <result column="operating_temp_tag_" property="operatingTempTag"/>
         <result column="teacher_id_" property="teacherId"/>
         <result column="teacher_name_" property="teacherName"/>
+        <result column="is_new_user_" property="isNewUser"/>
         <result column="create_time_" property="createTime"/>
         <result column="update_time_" property="updateTime"/>
     </resultMap>
@@ -91,6 +92,9 @@
             <if test="teacherId != null">
                 teacher_id_=#{teacherId},
             </if>
+            <if test="isNewUser != null">
+                is_new_user_=#{isNewUser},
+            </if>
                 update_time_ = NOW()
         </set>
         WHERE user_id_ = #{userId}

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

@@ -258,4 +258,12 @@
         </foreach>
         AND spod.goods_id_list_ IS NOT NULL
     </select>
+
+    <select id="getWithUserAndOrderType" resultMap="StudentPaymentOrderDetail">
+        SELECT spod.* FROM student_payment_order_detail spod
+        LEFT JOIN student_payment_order spo ON spo.id_=spod.payment_order_id_
+        WHERE spo.user_id_= #{userId}
+        AND spod.type_ = #{orderType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+        AND spo.status_='SUCCESS'
+    </select>
 </mapper>

+ 9 - 0
mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml

@@ -457,6 +457,15 @@
             AND status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
         </if>
     </select>
+    <select id="findPaymentOrderByGroupType" resultMap="StudentPaymentOrder">
+        SELECT * FROM student_payment_order
+        WHERE group_type_ = #{groupType}
+        AND user_id_ = #{userId}
+        AND music_group_id_ = #{sporadicId}
+        <if test="status != null">
+            AND status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+        </if>
+    </select>
     <select id="queryExpectAmount" resultType="java.util.Map">
         SELECT spo.expect_amount_ 'value',spo.id_ 'key'
         FROM student_payment_order spo

+ 4 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/controller/BaseController.java

@@ -49,6 +49,10 @@ public class BaseController {
 		return getResponseData(false, statusCode, null, msg);
 	}
 
+	public static <T> HttpResponseResult<T> failed(HttpStatus statusCode, T data, String msg) {
+		return getResponseData(false, statusCode, data, msg);
+	}
+
 	private static <T> HttpResponseResult<T> getResponseData(boolean status, HttpStatus statusCode, T data, String message) {
 		HttpResponseResult<T> obj = new HttpResponseResult<T>();
 		obj.setStatus(status);

+ 122 - 51
mec-student/src/main/java/com/ym/mec/student/controller/DegreeController.java

@@ -1,14 +1,15 @@
 package com.ym.mec.student.controller;
 
 
+import com.alibaba.fastjson.JSON;
+import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.DegreeRegistrationDao;
-import com.ym.mec.biz.dal.dao.SporadicChargeInfoDao;
+import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.dto.DegreeRegistrationActivityDto;
 import com.ym.mec.biz.dal.dto.SporadicPayDto;
-import com.ym.mec.biz.dal.entity.DegreeRegistration;
-import com.ym.mec.biz.dal.entity.Employee;
-import com.ym.mec.biz.dal.entity.SporadicChargeInfo;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.biz.dal.enums.SporadicChargeTypeEnum;
 import com.ym.mec.biz.dal.page.SporadicChargeInfoQueryInfo;
 import com.ym.mec.biz.service.DegreeRegistrationService;
@@ -25,11 +26,11 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @RequestMapping("degree")
 @Api(tags = "考级报名服务")
@@ -37,9 +38,6 @@ import java.util.Map;
 public class DegreeController extends BaseController {
 
     @Autowired
-    private StudentPaymentOrderService studentPaymentOrderService;
-
-    @Autowired
     private DegreeRegistrationDao degreeRegistrationDao;
 
     @Autowired
@@ -51,61 +49,74 @@ public class DegreeController extends BaseController {
     @Autowired
     private SporadicChargeInfoService sporadicChargeInfoService;
 
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @Autowired
+    private StudentDao studentDao;
+
+    @Autowired
+    private OrganizationDao organizationDao;
+
+    @Autowired
+    private StudentPaymentOrderDetailDao studentPaymentOrderDetailDao;
 
     @ApiOperation(value = "考级报名支付")
     @PostMapping("/pay")
-    public HttpResponseResult pay(DegreeRegistration degreeRegistration) throws Exception {
-        if (degreeRegistration == null ||
-                degreeRegistration.getSporadicId() == null ||
-                degreeRegistration.getName() == null ||
-                degreeRegistration.getGender() == null ||
-                degreeRegistration.getIdcard() == null ||
-                degreeRegistration.getCity() == null ||
-                degreeRegistration.getSchool() == null ||
-                degreeRegistration.getSubject() == null ||
-                degreeRegistration.getTheoryLevel() == null ||
-                degreeRegistration.getMobile() == null
-
-        ) {
-            throw new BizException("必填参数不能为空");
-        }
-        if (!CommonValidator.isMobileNo(degreeRegistration.getMobile())) {
-            throw new BizException("手机号码不正确,请核对");
+    public HttpResponseResult pay(@RequestBody DegreeRegistrationActivityDto degreeRegistration) throws Exception {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if(Objects.isNull(user)){
+            return failed(HttpStatus.FORBIDDEN,"请登录");
         }
+        degreeRegistration.setUserId(user.getId());
 
-        IdcardValidator idcardValidator = new IdcardValidator();
-        if (!idcardValidator.isValidatedAllIdcard(degreeRegistration.getIdcard())) {
-            throw new BizException("身份证号不正确,请核对");
+        if(Objects.nonNull(degreeRegistration.getSporadicId())&&Objects.nonNull(degreeRegistration.getTheoryLevel())){
+            IdcardValidator idcardValidator = new IdcardValidator();
+            if (!idcardValidator.isValidatedAllIdcard(degreeRegistration.getIdcard())) {
+                throw new BizException("身份证号不正确,请核对");
+            }
+            SporadicChargeInfo info = sporadicChargeInfoDao.get(degreeRegistration.getSporadicId());
+            if (info == null || info.getDelFlag().equals(1)) {
+                return failed("报名信息不存在");
+            }
+            if (info.getOrganId() != 42 || !info.getChargeType().equals(SporadicChargeTypeEnum.LEVEL)) {
+                return failed("报名信息不存在");
+            }
+        }else{
+            degreeRegistration.setOrganId(user.getOrganId());
         }
 
-        SporadicChargeInfo info = sporadicChargeInfoDao.get(degreeRegistration.getSporadicId());
-        if (info == null || info.getDelFlag().equals(1)) {
-            return failed("报名信息不存在");
-        }
-        if (info.getOrganId() != 42 || !info.getChargeType().equals(SporadicChargeTypeEnum.LEVEL)) {
-            return failed("报名信息不存在");
+        if(Objects.isNull(degreeRegistration.getOrganId())){
+            return failed("该分部暂未参与此活动");
         }
 
-        DegreeRegistration degree = degreeRegistrationDao.findByMobileAndSporadicId(degreeRegistration.getMobile(), degreeRegistration.getSporadicId());
+        return degreeRegistrationService.pay(degreeRegistration);
+    }
 
-        if (degree != null && degree.getStatus().equals(2)) {
-            return failed("您本次已报名,请勿重复报名");
+    @ApiOperation(value = "考级报名检查")
+    @PostMapping("/check")
+    @Transactional(isolation = Isolation.READ_COMMITTED)
+    public HttpResponseResult check(@RequestBody DegreeRegistrationActivityDto degreeRegistration) throws Exception {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if(Objects.isNull(user)){
+            return failed(HttpStatus.FORBIDDEN,"请登录");
         }
-
-        if (!degreeRegistration.getIsRepay() && degree != null) {
-            Integer ingOrder = studentPaymentOrderService.findOrderByGroupType(degree.getId(), degreeRegistration.getSporadicId(), "SPORADIC", DealStatusEnum.ING);
-            if (ingOrder != null && ingOrder > 0) {
-                return failed(HttpStatus.CONTINUE, "您有待支付的订单");
-            }
+        degreeRegistration.setUserId(user.getId());
+        degreeRegistration.setActivityTag(DegreeRegistrationService.ACTIVITY_TAG);
+        studentDao.getLocked(degreeRegistration.getUserId());
+        List<DegreeRegistration> userLevelDegrees = degreeRegistrationDao.getUserLevelDegrees(degreeRegistration.getUserId(), DegreeRegistrationService.ACTIVITY_TAG);
+        long levelNum = userLevelDegrees.stream().filter(d -> Objects.nonNull(d.getSporadicId())&&d.getStatus().equals(2)).count();
+        long theoryLevelNum = userLevelDegrees.stream().filter(d -> StringUtils.isNotBlank(d.getTheoryLevel())&&d.getStatus().equals(2)).count();
+
+        if(Objects.nonNull(degreeRegistration.getSporadicId())&&levelNum>0){
+            return failed(HttpStatus.CREATED, "您已报考过选择的考级项目");
         }
-        Map payMap = degreeRegistrationService.pay(degreeRegistration);
-        if (payMap.containsKey("tradeState")) {
-            return failed(HttpStatus.CREATED, "恭喜您,支付成功!");
+        if(StringUtils.isNotBlank(degreeRegistration.getTheoryLevel())&&theoryLevelNum>0){
+            return failed(HttpStatus.CREATED, "您已报考过选择的考级项目");
         }
-        return succeed(payMap);
+        return succeed();
     }
 
-
     @ApiOperation(value = "查询收费列表")
     @GetMapping("/queryList")
     public HttpResponseResult queryPage(SporadicChargeInfoQueryInfo queryInfo) {
@@ -118,4 +129,64 @@ public class DegreeController extends BaseController {
         return succeed(sporadicChargeInfoService.queryDetailPage(queryInfo));
     }
 
+    @ApiOperation(value = "获取活动参数")
+    @GetMapping("/getParams")
+    public HttpResponseResult getParams(){
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if(Objects.isNull(user)||Objects.isNull(user.getId())){
+            return failed(HttpStatus.FORBIDDEN,"请登录");
+        }
+
+        SporadicChargeInfoQueryInfo queryInfo = new SporadicChargeInfoQueryInfo();
+        queryInfo.setOrganId("42");
+        queryInfo.setChargeType(SporadicChargeTypeEnum.LEVEL);
+        queryInfo.setRows(99);
+        queryInfo.setOpenFlag(0);
+        queryInfo.setSort("amount_");
+        queryInfo.setOrder("ASC");
+
+        Map<String, Object> result = new HashMap<>();
+
+        Student student = studentDao.get(user.getId());
+        result.put("userInfo", user);
+        result.put("isNewUser", student.getIsNewUser());
+        result.put("organs", organizationDao.getActivityOrgans());
+        result.put("sporadicChargeInfo", sporadicChargeInfoService.queryDetailPage(queryInfo));
+
+        List<DegreeRegistration> userLevelDegrees = degreeRegistrationDao.getUserLevelDegrees(user.getId(), DegreeRegistrationService.ACTIVITY_TAG);
+        long levelNum = userLevelDegrees.stream().filter(d -> Objects.nonNull(d.getSporadicId())&&d.getStatus().equals(2)).count();
+        long theoryLevelNum = userLevelDegrees.stream().filter(d -> StringUtils.isNotBlank(d.getTheoryLevel())&&d.getStatus().equals(2)).count();
+
+        result.put("levelApplied", levelNum>0?1:0);
+        result.put("theoryLevelApplied", theoryLevelNum>0?1:0);
+
+        List<StudentPaymentOrderDetail> historyOrderDetails = studentPaymentOrderDetailDao.getWithUserAndOrderType(user.getId(), OrderTypeEnum.DEGREE_REGISTRATION);
+        int historyVipNum = 0, historyPracticeNum = 0, historyHighNum = 0;
+        for (StudentPaymentOrderDetail historyOrderDetail : historyOrderDetails) {
+            if(StringUtils.isBlank(historyOrderDetail.getGoodsIdList())){
+                continue;
+            }
+            Map<String, Integer> courseNumMap = JSON.parseObject(historyOrderDetail.getGoodsIdList(), Map.class);
+            for (Map.Entry<String, Integer> stringIntegerEntry : courseNumMap.entrySet()) {
+                switch (stringIntegerEntry.getKey()){
+                    case "VIP":
+                        historyVipNum = historyVipNum + stringIntegerEntry.getValue();
+                        break;
+                    case "PRACTICE":
+                        historyPracticeNum = historyPracticeNum + stringIntegerEntry.getValue();
+                        break;
+                    case "HIGH":
+                        historyHighNum = historyHighNum + stringIntegerEntry.getValue();
+                        break;
+                }
+            }
+        }
+        Map<String, Integer> historyCourseInfo = new HashMap<>();
+        historyCourseInfo.put(CourseSchedule.CourseScheduleType.VIP.getCode(), historyVipNum);
+        historyCourseInfo.put(CourseSchedule.CourseScheduleType.PRACTICE.getCode(), historyPracticeNum);
+        historyCourseInfo.put(CourseSchedule.CourseScheduleType.HIGH.getCode(), historyHighNum);
+        result.put("historyCourseInfo", historyCourseInfo);
+
+        return succeed(result);
+    }
 }

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

@@ -161,12 +161,12 @@ public class PracticeGroupController extends BaseController {
 
     @ApiOperation("获取陪练课预约参数——付费")
     @GetMapping(value = "/getPayPracticeApplyParams")
-    public Object getPayPracticeApplyParams(){
+    public Object getPayPracticeApplyParams(Integer organId){
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        return succeed(practiceGroupService.getPayPracticeApplyParams(sysUser.getId(), sysUser.getOrganId()));
+        return succeed(practiceGroupService.getPayPracticeApplyParams(sysUser.getId(), Objects.nonNull(organId)?organId:sysUser.getOrganId()));
     }
 
     @ApiOperation("获取指定教师的空闲时间——付费")

+ 14 - 2
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -29,6 +29,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.util.CollectionUtils;
 import org.springframework.util.DigestUtils;
 import org.springframework.web.bind.annotation.*;
 
@@ -74,6 +75,8 @@ public class StudentOrderController extends BaseController {
     private StudentGoodsSellDao studentGoodsSellDao;
     @Autowired
     private LuckDrawCountService luckDrawCountService;
+    @Autowired
+    private DegreeRegistrationDao degreeRegistrationDao;
 
 
     @Value("${spring.profiles.active:dev}")
@@ -135,11 +138,20 @@ public class StudentOrderController extends BaseController {
             VipBuyResultDto vipBuyResultInfo = vipGroupService.findVipBuyResultInfo(Integer.valueOf(orderByOrderNo.getMusicGroupId()));
             orderDetail.put("detail", vipBuyResultInfo);
         } else if (orderByOrderNo.getGroupType().equals(GroupType.SPORADIC)) {
-            SporadicChargeInfo info = sporadicChargeInfoService.get(Integer.valueOf(orderByOrderNo.getMusicGroupId()));
-            orderDetail.put("detail", info);
+            if(Objects.nonNull(orderByOrderNo.getMusicGroupId())){
+                SporadicChargeInfo info = sporadicChargeInfoService.get(Integer.valueOf(orderByOrderNo.getMusicGroupId()));
+                orderDetail.put("detail", info);
+            }
             if (orderByOrderNo.getType().equals(OrderTypeEnum.DOUBLE_ELEVEN2020)) {
                 LuckDrawCount luckDrawCount = luckDrawCountService.get(orderByOrderNo.getUserId().longValue());
                 orderDetail.put("drawTimes", luckDrawCount==null? 0: luckDrawCount.getAvailableCount());
+            }else if(OrderTypeEnum.DEGREE_REGISTRATION.equals(orderByOrderNo.getType())){
+                DegreeRegistration degreeRegistration = degreeRegistrationDao.get(orderByOrderNo.getClassGroupId());
+                orderDetail.put("degree", degreeRegistration);
+                List<StudentPaymentOrderDetail> studentPaymentOrderDetails = studentPaymentOrderDetailService.getOrderDetail(orderByOrderNo.getId());
+                if(!CollectionUtils.isEmpty(studentPaymentOrderDetails)){
+                    orderDetail.put("additionCourseInfo", studentPaymentOrderDetails.get(0).getGoodsIdList());
+                }
             }
         } else if (orderByOrderNo.getGroupType().equals(GroupType.GOODS_SELL)) {
             orderDetail.put("detail", studentGoodsSellDao.getStudentGoodsSellDto(orderNo));