Pārlūkot izejas kodu

add 退团退云教练

周箭河 4 gadi atpakaļ
vecāks
revīzija
0472671cc9

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

@@ -2,6 +2,7 @@ package com.ym.mec.biz.dal.dao;
 
 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;
 
@@ -9,7 +10,25 @@ public interface CloudTeacherOrderDao extends BaseDAO<Long, CloudTeacherOrder> {
 
     /**
      * 获取未生效的云教练订单
+     *
      * @return
      */
     List<CloudTeacherOrder> getNoStartCloudTeacherOrder();
+
+    /**
+     * 获取学生在有效期内的乐保数量
+     *
+     * @param studentIds
+     * @param musicGroupId
+     * @return
+     */
+    List<CloudTeacherOrder> getStudentCloudTeacherOrders(@Param("studentIds") List<Integer> studentIds, @Param("musicGroupId") String musicGroupId);
+
+    /**
+     * 获取乐团报名的云教练订单
+     * @param studentId
+     * @param musicGroupId
+     * @return
+     */
+    CloudTeacherOrder getStudentCloudTeacherOrder(@Param("studentId") Integer studentId, @Param("musicGroupId") String musicGroupId);
 }

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

@@ -100,6 +100,9 @@ public class MusicGroupStudentsDto{
     @ApiModelProperty(value = "是否有乐保",required = false)
     private Boolean hasMaintenance = false;
 
+    @ApiModelProperty(value = "云教练金额",required = false)
+    private BigDecimal cloudTeacherAmount = BigDecimal.ZERO;
+
     public Integer getStudentRegistrationId() {
         return studentRegistrationId;
     }
@@ -394,4 +397,12 @@ public class MusicGroupStudentsDto{
     public void setHasMaintenance(Boolean hasMaintenance) {
         this.hasMaintenance = hasMaintenance;
     }
+
+    public BigDecimal getCloudTeacherAmount() {
+        return cloudTeacherAmount;
+    }
+
+    public void setCloudTeacherAmount(BigDecimal cloudTeacherAmount) {
+        this.cloudTeacherAmount = cloudTeacherAmount;
+    }
 }

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentApplyDetailDto.java

@@ -9,6 +9,7 @@ import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.common.enums.UserGenderEnum;
 import com.ym.mec.common.page.QueryInfo;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 public class StudentApplyDetailDto{
@@ -77,6 +78,9 @@ public class StudentApplyDetailDto{
     @ApiModelProperty(value = "是否有乐保",required = false)
     private Boolean hasMaintenance = false;
 
+    @ApiModelProperty(value = "云教练金额",required = false)
+    private BigDecimal cloudTeacherAmount = BigDecimal.ZERO;
+
     public KitGroupPurchaseTypeEnum getKitGroupPurchaseTypeEnum() {
         return kitGroupPurchaseTypeEnum;
     }
@@ -236,4 +240,12 @@ public class StudentApplyDetailDto{
     public void setHasMaintenance(Boolean hasMaintenance) {
         this.hasMaintenance = hasMaintenance;
     }
+
+    public BigDecimal getCloudTeacherAmount() {
+        return cloudTeacherAmount;
+    }
+
+    public void setCloudTeacherAmount(BigDecimal cloudTeacherAmount) {
+        this.cloudTeacherAmount = cloudTeacherAmount;
+    }
 }

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

@@ -5,6 +5,9 @@ import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.common.service.BaseService;
 
+import java.util.List;
+import java.util.Map;
+
 public interface CloudTeacherOrderService extends BaseService<Long, CloudTeacherOrder> {
 
 
@@ -29,4 +32,11 @@ public interface CloudTeacherOrderService extends BaseService<Long, CloudTeacher
      */
     CloudTeacher addStudentCloudTeacher(CloudTeacherOrder cloudTeacherOrder);
 
+    /**
+     * 获取乐团云教练订单
+     * @param studentIds
+     * @param musicGroupId
+     * @return
+     */
+    List<CloudTeacherOrder> getStudentCloudTeacherOrders(List<Integer> studentIds,String musicGroupId);
 }

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

@@ -181,10 +181,11 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
 	 * @param isRefundInstrumentFee 是否退还乐器费用
 	 * @param isRefundTeachingAssistantsFee 是否退还教辅费用
 	 * @param maintenanceFee
+	 * @param cloudTeacherAmount
 	 * @return
 	 */
 	boolean directQuitMusicGroup(String musicGroupId, Integer userId, String reason, boolean isRefundCourseFee, boolean isRefundInstrumentFee,
-								 boolean isRefundTeachingAssistantsFee, BigDecimal maintenanceFee);
+								 boolean isRefundTeachingAssistantsFee, BigDecimal maintenanceFee, BigDecimal cloudTeacherAmount);
 
 	/**
 	 *  续费

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

@@ -116,4 +116,9 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
         cloudTeacherOrderDao.update(cloudTeacherOrder);
         return cloudTeacher;
     }
+
+    @Override
+    public List<CloudTeacherOrder> getStudentCloudTeacherOrders(List<Integer> studentIds, String musicGroupId) {
+        return cloudTeacherOrderDao.getStudentCloudTeacherOrders(studentIds, musicGroupId);
+    }
 }

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

@@ -236,6 +236,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Autowired
     private StudentInstrumentDao studentInstrumentDao;
 
+    @Autowired
+    private CloudTeacherOrderDao cloudTeacherOrderDao;
+
     private SimpleDateFormat sdf_ymd = new SimpleDateFormat("yyyy-MM-dd");
 
     private SimpleDateFormat sdf_hms = new SimpleDateFormat("HH:mm:ss");
@@ -702,7 +705,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         //云教练
         MusicGroup musicGroup = musicGroupDao.get(studentRegistration.getMusicGroupId());
         studentRegistration.setOrganId(musicGroup.getOrganId());
-        if(registerPayDto.getBuyCloudTeacher()){
+        if (registerPayDto.getBuyCloudTeacher()) {
             OrganizationCloudTeacherFee cloudTeacher = organizationCloudTeacherFeeDao.getByOrganId(studentRegistration.getOrganId());
             BigDecimal cloudTeacherPrice = cloudTeacher.getPrice();
             orderAmount = orderAmount.add(cloudTeacherPrice);
@@ -859,7 +862,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }
 
         //云教练
-        if(registerPayDto.getBuyCloudTeacher()){
+        if (registerPayDto.getBuyCloudTeacher()) {
             OrganizationCloudTeacherFee cloudTeacher = organizationCloudTeacherFeeDao.getByOrganId(studentRegistration.getOrganId());
             BigDecimal cloudTeacherPrice = cloudTeacher.getPrice();
             orderAmount = orderAmount.add(cloudTeacherPrice);
@@ -1872,7 +1875,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public boolean directQuitMusicGroup(String musicGroupId, Integer userId, String reason, boolean isRefundCourseFee, boolean isRefundInstrumentFee,
-                                        boolean isRefundTeachingAssistantsFee, BigDecimal maintenanceFee) {
+                                        boolean isRefundTeachingAssistantsFee, BigDecimal maintenanceFee, BigDecimal cloudTeacherAmount) {
 
         SysUser sysUser = sysUserFeignService.queryUserById(userId);
         if (sysUser == null) {
@@ -2065,6 +2068,25 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             }
         }
 
+        //退云教练费用
+        if (cloudTeacherAmount != null) {
+            Date nowDate = new Date();
+            CloudTeacherOrder studentCloudTeacherOrder = cloudTeacherOrderDao.getStudentCloudTeacherOrder(userId, musicGroupId);
+            if (cloudTeacherAmount.compareTo(BigDecimal.ZERO) > 0) {
+                if (studentCloudTeacherOrder == null || studentCloudTeacherOrder.getEndTime().compareTo(nowDate) <= 0) {
+                    throw new BizException("学生云教练已过有效期,不能退费");
+                }
+                if (cloudTeacherAmount.compareTo(studentCloudTeacherOrder.getAmount()) > 0) {
+                    throw new BizException("退费金额不能大于原始订单金额");
+                }
+            }
+            amount = amount.add(cloudTeacherAmount);
+            if (studentCloudTeacherOrder != null) {
+//                studentMaintenance.setDelFlag(1);
+//                studentInstrumentDao.update(studentMaintenance);
+            }
+        }
+
         if (amount.doubleValue() > 0) {
             // 增加交易流水
             sysUserCashAccountDetailService.addCashAccountDetail(userId, amount, SysUserCashAccountDetailService.MUSIC_GROUP + musicGroupId, "",

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

@@ -12,6 +12,7 @@ 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.*;
+import com.ym.mec.biz.service.CloudTeacherOrderService;
 import com.ym.mec.biz.service.SysConfigService;
 
 import com.ym.mec.common.page.QueryInfo;
@@ -115,6 +116,8 @@ public class StudentManageServiceImpl implements StudentManageService {
     private StudentAttendanceDao studentAttendanceDao;
     @Autowired
     private StudentInstrumentDao studentInstrumentDao;
+    @Autowired
+    private CloudTeacherOrderService cloudTeacherOrderService;
 
     @Override
     public PageInfo<StudentManageListDto> findStudentsByOrganId(StudentManageQueryInfo queryInfo) {
@@ -508,6 +511,11 @@ public class StudentManageServiceImpl implements StudentManageService {
             List<StudentInstrument> studentsMaintenanceNum = studentInstrumentDao.getStudentsMaintenanceNum(collect,queryInfo.getMusicGroupId());
             Map<Integer, Integer> studentMaintenanceMap = studentsMaintenanceNum.stream().collect(Collectors.toMap(StudentInstrument::getStudentId, StudentInstrument::getGoodsId));
 
+            //查询云教练订单
+            List<CloudTeacherOrder> studentCloudTeacherOrders = cloudTeacherOrderService.getStudentCloudTeacherOrders(collect, queryInfo.getMusicGroupId());
+            Map<Integer, List<CloudTeacherOrder>> studentCloudTeacherMap = studentCloudTeacherOrders.stream().collect(Collectors.groupingBy(CloudTeacherOrder::getStudentId));
+            Date nowDate = new Date();
+
             dataList.forEach(e->{
                 e.setHasCourse(hasCourseStudent.contains(e.getUserId()));
                 e.setNoPaymentAmount(totalAmountMap.get(e.getUserId()));
@@ -517,6 +525,12 @@ public class StudentManageServiceImpl implements StudentManageService {
                 if(studentMaintenanceMap.containsKey(e.getUserId())){
                     e.setHasMaintenance(true);
                 }
+                if (studentCloudTeacherMap.containsKey(e.getUserId())) {
+                    CloudTeacherOrder cloudTeacherOrder = studentCloudTeacherMap.get(e.getUserId()).get(0);
+                    if (cloudTeacherOrder.getEndTime() == null || cloudTeacherOrder.getEndTime().compareTo(nowDate) > 0) {
+                        e.setCloudTeacherAmount(cloudTeacherOrder.getAmount());
+                    }
+                }
             });
         }
         pageInfo.setRows(dataList);

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

@@ -176,8 +176,13 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             List<SubjectChange> waitPayChange = subjectChangeDao.getMusicGroupWaitPay(queryInfo.getMusicGroupId());
             Map<Integer, List<SubjectChange>> studentWaitPayChange = waitPayChange.stream().collect(Collectors.groupingBy(SubjectChange::getStudentId));
             //查询是否有有效期内乐保
-            List<StudentInstrument> studentsMaintenanceNum = studentInstrumentDao.getStudentsMaintenanceNum(studentIds,queryInfo.getMusicGroupId());
+            List<StudentInstrument> studentsMaintenanceNum = studentInstrumentDao.getStudentsMaintenanceNum(studentIds, queryInfo.getMusicGroupId());
             Map<Integer, Integer> studentMaintenanceMap = studentsMaintenanceNum.stream().collect(Collectors.toMap(StudentInstrument::getStudentId, StudentInstrument::getGoodsId));
+
+            //查询云教练订单
+            List<CloudTeacherOrder> studentCloudTeacherOrders = cloudTeacherOrderService.getStudentCloudTeacherOrders(studentIds, queryInfo.getMusicGroupId());
+            Map<Integer, List<CloudTeacherOrder>> studentCloudTeacherMap = studentCloudTeacherOrders.stream().collect(Collectors.groupingBy(CloudTeacherOrder::getStudentId));
+            Date nowDate = new Date();
             dataList.forEach(e -> {
                 if (StringUtils.isNotBlank(subjectMap.get(e.getActualSubjectId()))) {
                     e.setKitGroupPurchaseTypeEnum(KitGroupPurchaseTypeEnum.valueOf(subjectMap.get(e.getActualSubjectId())));
@@ -185,9 +190,15 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 if (studentWaitPayChange.containsKey(e.getStudentId())) {
                     e.setSubjectChange(studentWaitPayChange.get(e.getStudentId()).get(0));
                 }
-                if(studentMaintenanceMap.containsKey(e.getStudentId())){
+                if (studentMaintenanceMap.containsKey(e.getStudentId())) {
                     e.setHasMaintenance(true);
                 }
+                if (studentCloudTeacherMap.containsKey(e.getStudentId())) {
+                    CloudTeacherOrder cloudTeacherOrder = studentCloudTeacherMap.get(e.getStudentId()).get(0);
+                    if (cloudTeacherOrder.getEndTime() == null || cloudTeacherOrder.getEndTime().compareTo(nowDate) > 0) {
+                        e.setCloudTeacherAmount(cloudTeacherOrder.getAmount());
+                    }
+                }
             });
         }
         pageInfo.setRows(dataList);

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

@@ -116,4 +116,39 @@
         WHERE cto.status_ = 1
         ORDER BY spo.pay_time_ ASC
     </select>
+
+    <select id="getStudentCloudTeacherOrders" resultMap="CloudTeacherOrder">
+        SELECT *
+        FROM cloud_teacher_order
+        WHERE order_id_ IN (
+        SELECT MAX(id_)
+        FROM student_payment_order
+        WHERE type_ = 'APPLY'
+        AND music_group_id_ = #{musicGroupId}
+        AND status_ = 'SUCCESS'
+        AND user_id_ IN
+        <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+            #{studentId}
+        </foreach>
+        GROUP BY user_id_
+        )
+        AND student_id_ IN
+        <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+            #{studentId}
+        </foreach>
+        AND status_ IN (1,2)
+    </select>
+
+    <select id="getStudentCloudTeacherOrder" resultMap="CloudTeacherOrder">
+        SELECT * FROM cloud_teacher_order
+        WHERE order_id_ = (
+        SELECT MAX(id_)
+        FROM student_payment_order
+        WHERE type_ = 'APPLY'
+        AND music_group_id_ = #{musicGroupId}
+        AND status_ = 'SUCCESS'
+        AND user_id_ = #{studentId}
+        )
+        AND student_id_ = #{studentId} AND status_ IN (1,2)
+    </select>
 </mapper>

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

@@ -29,8 +29,6 @@ import com.ym.mec.common.entity.HttpResponseResult;
 import java.math.BigDecimal;
 import java.util.Arrays;
 import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
 
 @RequestMapping("musicGroupQuit")
 @Api(tags = "退团服务")
@@ -134,8 +132,9 @@ public class MusicGroupQuitController extends BaseController {
             @ApiImplicitParam(name = "maintenanceFee", value = "退乐保费用", required = true, dataType = "num")
     })
     public HttpResponseResult directQuitMusicGroup(String musicGroupId, Integer userId, String reason, boolean isRefundCourseFee,
-                                                   boolean isRefundInstrumentFee, boolean isRefundTeachingAssistantsFee, BigDecimal maintenanceFee) throws Exception {
+                                                   boolean isRefundInstrumentFee, boolean isRefundTeachingAssistantsFee,
+                                                   BigDecimal maintenanceFee,BigDecimal cloudTeacherAmount) throws Exception {
         return succeed(musicGroupService.directQuitMusicGroup(musicGroupId, userId, reason, isRefundCourseFee, isRefundInstrumentFee,
-                isRefundTeachingAssistantsFee, maintenanceFee));
+                isRefundTeachingAssistantsFee, maintenanceFee, cloudTeacherAmount));
     }
 }