소스 검색

只要是购买了云教练,在退团时都可退云教练

zouxuan 4 년 전
부모
커밋
5d1e23a7fb

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

@@ -1,9 +1,12 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.entity.CloudTeacher;
+import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 
 public interface CloudTeacherDao extends BaseDAO<Long, CloudTeacher> {
 
@@ -14,4 +17,5 @@ public interface CloudTeacherDao extends BaseDAO<Long, CloudTeacher> {
      * @return
      */
     CloudTeacher getByStudentId(@Param("studentId") Integer studentId);
+
 }

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

@@ -39,7 +39,7 @@ public interface CloudTeacherOrderDao extends BaseDAO<Long, CloudTeacherOrder> {
      * @param musicGroupId
      * @return
      */
-    CloudTeacherOrder getStudentCloudTeacherOrder(@Param("studentId") Integer studentId, @Param("musicGroupId") String musicGroupId);
+    List<CloudTeacherOrder> getStudentCloudTeacherOrder(@Param("studentId") Integer studentId, @Param("musicGroupId") String musicGroupId);
     
     /**
      * 根据订单编号查询订单详情

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

@@ -53,7 +53,15 @@ public interface CloudTeacherOrderService extends BaseService<Long, CloudTeacher
      * @param musicGroupId
      * @return
      */
-    CloudTeacherOrder getStudentCloudTeacherOrder(Integer studentId, String musicGroupId);
+    List<CloudTeacherOrder> getStudentCloudTeacherOrder(Integer studentId, String musicGroupId);
+
+    /**
+     * 退云教练
+     * @param cloudTeacherOrders
+     * @param refundAmount
+     * @return
+     */
+    Boolean quitCloudTeacherOrders(List<CloudTeacherOrder> cloudTeacherOrders, BigDecimal refundAmount);
 
     /**
      * 退云教练

+ 39 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java

@@ -158,12 +158,50 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
     }
 
     @Override
-    public CloudTeacherOrder getStudentCloudTeacherOrder(Integer studentId, String musicGroupId) {
+    public List<CloudTeacherOrder> getStudentCloudTeacherOrder(Integer studentId, String musicGroupId) {
         return cloudTeacherOrderDao.getStudentCloudTeacherOrder(studentId, musicGroupId);
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
+    public Boolean quitCloudTeacherOrders(List<CloudTeacherOrder> cloudTeacherOrders, BigDecimal refundAmount) {
+        Date nowDate = new Date();
+        for (int i = 0; i < cloudTeacherOrders.size(); i++) {
+            CloudTeacherOrder cloudTeacherOrder = cloudTeacherOrders.get(i);
+            if (cloudTeacherOrder.getStatus().equals(3)) {
+                throw new BizException("云教练已退,请勿重复退");
+            }
+            if (cloudTeacherOrder.getStatus().equals(2) && cloudTeacherOrder.getEndTime().compareTo(nowDate) <= 0) {
+                throw new BizException("云教练已过服务期,不可退费");
+            }
+            Integer oldStatus = cloudTeacherOrder.getStatus();
+            cloudTeacherOrder.setStatus(3);
+            if(i == 0){
+                cloudTeacherOrder.setRefundAmount(refundAmount);
+            }else {
+                cloudTeacherOrder.setRefundAmount(BigDecimal.ZERO);
+            }
+            cloudTeacherOrder.setUpdateTime(nowDate);
+            if (cloudTeacherOrderDao.update(cloudTeacherOrder) <= 0) {
+                throw new BizException("云教练退费处理失败,请重试");
+            }
+
+            if (oldStatus.equals(1)) {
+                return true;
+            }
+            int days = DateUtil.daysBetween(DateUtil.trunc(nowDate), cloudTeacherOrder.getEndTime());
+            CloudTeacher cloudTeacher = cloudTeacherDao.getByStudentId(cloudTeacherOrder.getStudentId());
+            Date endDate = DateUtil.addDays(cloudTeacherOrder.getEndTime(), -days);
+            cloudTeacher.setEndTime(endDate);
+            cloudTeacher.setUpdateTime(nowDate);
+            if (cloudTeacherDao.update(cloudTeacher) <= 0) {
+                throw new BizException("云教练服务有效期更新失败,请重试");
+            }
+        }
+        return true;
+    }
+    @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean quitCloudTeacherOrder(CloudTeacherOrder cloudOrder, BigDecimal refundAmount) {
         Date nowDate = new Date();
         if (cloudOrder.getStatus().equals(3)) {

+ 4 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -126,7 +126,8 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 	private StudentRegistrationDao studentRegistrationDao;
 	@Autowired
 	private GroupEventSource groupEventSource;
-	
+	@Autowired
+	private StudentPaymentOrderDao studentPaymentOrderDao;
 	@Autowired
 	private MemberFeeSettingDao memberFeeSettingDao;
 	@Autowired
@@ -1023,6 +1024,8 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 						cloudTeacherOrder.setLevel(musicGroupPaymentCalender.getMemberRankSettingId());
 						cloudTeacherOrder.setOrganId(musicGroup.getOrganId());
 						cloudTeacherOrder.setType(2);
+						cloudTeacherOrder.setStudentId(Integer.parseInt(studentId));
+						cloudTeacherOrder.setOrderId(musicGroup.getOrganId().longValue());
 						cloudTeacherOrder.setTime(musicGroupPaymentCalender.getMemberValidDate());
 						cloudTeacherOrder.setAmount(expectMemberAmount);
 						cloudTeacherOrder.setStatus(2);

+ 22 - 16
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -2018,19 +2018,22 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             //退云教练费用
             if (cloudTeacherAmount != null) {
                 Date nowDate = new Date();
-                CloudTeacherOrder studentCloudTeacherOrder = cloudTeacherOrderService.getStudentCloudTeacherOrder(userId, musicGroupId);
-                if (cloudTeacherAmount.compareTo(BigDecimal.ZERO) > 0) {
-                    if (studentCloudTeacherOrder == null || (studentCloudTeacherOrder.getEndTime() != null && studentCloudTeacherOrder.getEndTime().compareTo(nowDate) <= 0)) {
-                        throw new BizException("学生云教练已过有效期,不能退费");
+                List<CloudTeacherOrder> cloudTeacherOrders = cloudTeacherOrderService.getStudentCloudTeacherOrder(userId, musicGroupId);
+                if(cloudTeacherOrders.size() > 0){
+                    List<CloudTeacherOrder> quitCloudTeacherOrders = new ArrayList<>();
+                    BigDecimal orderAmount = BigDecimal.ZERO;
+                    for (CloudTeacherOrder cloudTeacherOrder : cloudTeacherOrders) {
+                        if (cloudTeacherOrder.getEndTime() == null || cloudTeacherOrder.getEndTime().compareTo(nowDate) > 0) {
+                            quitCloudTeacherOrders.add(cloudTeacherOrder);
+                            orderAmount = orderAmount.add(cloudTeacherOrder.getAmount());
+                        }
                     }
-                    if (cloudTeacherAmount.compareTo(studentCloudTeacherOrder.getAmount()) > 0) {
+                    if (cloudTeacherAmount.compareTo(orderAmount) > 0) {
                         throw new BizException("云教练退费金额不能大于原始订单金额");
                     }
+                    cloudTeacherOrderService.quitCloudTeacherOrders(quitCloudTeacherOrders, cloudTeacherAmount);
                 }
                 amount = amount.add(cloudTeacherAmount);
-                if (cloudTeacherAmount.compareTo(BigDecimal.ZERO) > 0 && studentCloudTeacherOrder != null) {
-                    cloudTeacherOrderService.quitCloudTeacherOrder(studentCloudTeacherOrder, cloudTeacherAmount);
-                }
                 //清除学员云教练
                 studentService.cleanMember(userId);
             }
@@ -2265,19 +2268,22 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         //退云教练费用
         if (cloudTeacherAmount != null) {
             Date nowDate = new Date();
-            CloudTeacherOrder studentCloudTeacherOrder = cloudTeacherOrderService.getStudentCloudTeacherOrder(userId, musicGroupId);
-            if (cloudTeacherAmount.compareTo(BigDecimal.ZERO) > 0) {
-                if (studentCloudTeacherOrder == null || (studentCloudTeacherOrder.getEndTime() != null && studentCloudTeacherOrder.getEndTime().compareTo(nowDate) <= 0)) {
-                    throw new BizException("学生云教练已过有效期,不能退费");
+            List<CloudTeacherOrder> cloudTeacherOrders = cloudTeacherOrderService.getStudentCloudTeacherOrder(userId, musicGroupId);
+            if(cloudTeacherOrders.size() > 0){
+                List<CloudTeacherOrder> quitCloudTeacherOrders = new ArrayList<>();
+                BigDecimal orderAmount = BigDecimal.ZERO;
+                for (CloudTeacherOrder cloudTeacherOrder : cloudTeacherOrders) {
+                    if (cloudTeacherOrder.getEndTime() == null || cloudTeacherOrder.getEndTime().compareTo(nowDate) > 0) {
+                        quitCloudTeacherOrders.add(cloudTeacherOrder);
+                        orderAmount = orderAmount.add(cloudTeacherOrder.getAmount());
+                    }
                 }
-                if (cloudTeacherAmount.compareTo(studentCloudTeacherOrder.getAmount()) > 0) {
+                if (cloudTeacherAmount.compareTo(orderAmount) > 0) {
                     throw new BizException("云教练退费金额不能大于原始订单金额");
                 }
+                cloudTeacherOrderService.quitCloudTeacherOrders(quitCloudTeacherOrders, cloudTeacherAmount);
             }
             amount = amount.add(cloudTeacherAmount);
-            if (cloudTeacherAmount.compareTo(BigDecimal.ZERO) > 0 && studentCloudTeacherOrder != null) {
-                cloudTeacherOrderService.quitCloudTeacherOrder(studentCloudTeacherOrder, cloudTeacherAmount);
-            }
             //清除学员云教练
             studentService.cleanMember(userId);
         }

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

@@ -1100,7 +1100,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             //已购买内容
             List<OrderDetailTypeEnum> orderTypeList = allDetails.stream().map(t -> t.getType()).collect(Collectors.toList());
             
-			if (musicGroup.getCourseViewType() == CourseViewTypeEnum.CLOUD_TEACHER || musicGroup.getCourseViewType() == CourseViewTypeEnum.CLOUD_TEACHER_PLUS) {
+			if (musicGroup.getCourseViewType() == CourseViewTypeEnum.MEMBER_FEE) {
 				if (studentRegistration.getNoneNeedCloudTeacher() == 1 || orderTypeList.contains(OrderDetailTypeEnum.CLOUD_TEACHER)
 						|| orderTypeList.contains(OrderDetailTypeEnum.CLOUD_TEACHER_PLUS)) {
 					studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.NORMAL);

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

@@ -160,8 +160,7 @@
         WHERE order_id_ IN (
         SELECT MAX(id_)
         FROM student_payment_order
-        WHERE type_ = 'APPLY'
-        AND music_group_id_ = #{musicGroupId}
+        WHERE music_group_id_ = #{musicGroupId}
         AND status_ = 'SUCCESS'
         AND user_id_ IN
         <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
@@ -182,8 +181,7 @@
         WHERE order_id_ = (
             SELECT MAX(id_)
             FROM student_payment_order
-            WHERE type_ = 'APPLY'
-              AND music_group_id_ = #{musicGroupId}
+            WHERE music_group_id_ = #{musicGroupId}
               AND status_ = 'SUCCESS'
               AND user_id_ = #{studentId}
         )

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

@@ -29,6 +29,7 @@ import com.ym.mec.common.entity.HttpResponseResult;
 
 import java.math.BigDecimal;
 import java.util.Arrays;
+import java.util.Comparator;
 import java.util.Date;
 import java.util.List;
 
@@ -89,9 +90,15 @@ public class MusicGroupQuitController extends BaseController {
                 if (studentMaintenance != null) {
                     row.setHasMaintenance(true);
                 }
-                CloudTeacherOrder cloudTeacherOrder = cloudTeacherOrderDao.getStudentCloudTeacherOrder(row.getUserId(), row.getMusicGroupId());
-                if (cloudTeacherOrder != null && (cloudTeacherOrder.getEndTime() == null || cloudTeacherOrder.getEndTime().compareTo(nowDate) > 0)) {
-                    row.setCloudTeacherAmount(cloudTeacherOrder.getAmount());
+                List<CloudTeacherOrder> cloudTeacherOrders = cloudTeacherOrderDao.getStudentCloudTeacherOrder(row.getUserId(), row.getMusicGroupId());
+                if(cloudTeacherOrders.size() > 0){
+                    BigDecimal orderAmount = BigDecimal.ZERO;
+                    for (CloudTeacherOrder cloudTeacherOrder : cloudTeacherOrders) {
+                        if (cloudTeacherOrder.getEndTime() == null || cloudTeacherOrder.getEndTime().compareTo(nowDate) > 0) {
+                            orderAmount = orderAmount.add(cloudTeacherOrder.getAmount());
+                        }
+                    }
+                    row.setCloudTeacherAmount(orderAmount);
                 }
             }
         }