瀏覽代碼

Merge branch 'master' of http://git.dayaedu.com/yonge/mec

yonge 5 年之前
父節點
當前提交
b90e28ece2

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

@@ -827,6 +827,21 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
                                                          @Param("userId") Integer userId);
 
     /**
+     * @describe 获取学生的课程信息
+     * @author Joburgess
+     * @date 2020/1/15
+     * @param groupType: 团体类型
+     * @param groupId: 团体编号
+     * @param userId: 用户编号
+     * @param type: 查询类型:不传查全部,'history'已消耗的,'surplus'剩余的
+     * @return java.util.List<com.ym.mec.biz.dal.dto.StudentCourseInfoDto>
+     */
+    List<StudentCourseInfoDto> findUserCourseInfos(@Param("groupType") GroupType groupType,
+                                                   @Param("groupId") String groupId,
+                                                   @Param("userId") Integer userId,
+                                                   @Param("type") String type);
+
+    /**
      * @describe 获取指定乐团下课程开始时间
      * @author Joburgess
      * @date 2019/12/19

+ 18 - 13
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -252,9 +252,13 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }
         // 保存乐团声部商品规划
         if (musicGroupSubjectGoodsGroups != null && musicGroupSubjectGoodsGroups.size() > 0) {
-            musicGroupSubjectGoodsGroups.removeIf(musicGroupSubjectGoodsGroup -> musicGroupSubjectGoodsGroup.getType().equals(GoodsType.INSTRUMENT) && (musicGroupSubjectGoodsGroup.getKitGroupPurchaseTypeJson() == null
-                    || musicGroupSubjectGoodsGroup.getKitGroupPurchaseTypeJson().isEmpty()
-                    || musicGroupSubjectGoodsGroup.getKitGroupPurchaseTypeJson().equals("{}")));
+            for (MusicGroupSubjectGoodsGroup musicGroupSubjectGoodsGroup : musicGroupSubjectGoodsGroups) {
+                if(musicGroupSubjectGoodsGroup.getType().equals(GoodsType.INSTRUMENT) && (musicGroupSubjectGoodsGroup.getKitGroupPurchaseTypeJson() == null
+                        || musicGroupSubjectGoodsGroup.getKitGroupPurchaseTypeJson().isEmpty()
+                        || musicGroupSubjectGoodsGroup.getKitGroupPurchaseTypeJson().equals("{}"))){
+                    throw new BizException(musicGroupSubjectGoodsGroup.getName()+" 请选择提供方式");
+                }
+            }
             musicGroupSubjectGoodsGroupDao.batchInsert(musicGroupSubjectGoodsGroups, musicGroupId);
         }
         return musicGroupId;
@@ -398,16 +402,12 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 if (orderDetail == null || orderDetail.getPrice() == null || orderDetail.getGoodsIdList() == null) {
                     continue;
                 }
-                if (orderDetail.getType().equals(OrderDetailTypeEnum.MUSICAL) && musicOneSubjectClassPlan.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.FREE)) {
-                    orderDetail.setPrice(BigDecimal.ZERO);
-                }
                 MusicGroupSubjectGoodsGroup musicGroupSubjectGoodsGroup = new MusicGroupSubjectGoodsGroup();
                 GoodsType goodsType = orderDetail.getType().equals(OrderDetailTypeEnum.MUSICAL) ? GoodsType.INSTRUMENT : GoodsType.ACCESSORIES;
                 musicGroupSubjectGoodsGroup.setType(goodsType);
                 musicGroupSubjectGoodsGroup.setGoodsIdList(orderDetail.getGoodsIdList());
                 musicGroupSubjectGoodsGroup.setPrice(orderDetail.getPrice());
                 musicGroupSubjectGoodsGroup.setKitGroupPurchaseType(orderDetail.getKitGroupPurchaseType());
-
                 goodsGroups.add(musicGroupSubjectGoodsGroup);
                 if (musicGroupSubjectGoodsGroup.getType().equals(GoodsType.INSTRUMENT)) {
                     instrumentFee = instrumentFee.add(orderDetail.getPrice());
@@ -469,6 +469,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                         throw new BizException("乐器提供方式不存在");
                     }
                     goodsGroup.setPrice(new BigDecimal(0));
+                    goodsGroup.setKitGroupPurchaseType(KitGroupPurchaseTypeEnum.FREE);
                     remitFee = groupType.get("FREE");
                 }
                 if (goodsGroup.getType().equals(GoodsType.INSTRUMENT)) {
@@ -637,14 +638,12 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 if (orderDetail == null || orderDetail.getPrice() == null || orderDetail.getGoodsIdList() == null) {
                     continue;
                 }
-                if (orderDetail.getType().equals(OrderDetailTypeEnum.MUSICAL) && musicOneSubjectClassPlan.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.FREE)) {
-                    orderDetail.setPrice(BigDecimal.ZERO);
-                }
                 MusicGroupSubjectGoodsGroup musicGroupSubjectGoodsGroup = new MusicGroupSubjectGoodsGroup();
                 GoodsType goodsType = orderDetail.getType().equals(OrderDetailTypeEnum.MUSICAL) ? GoodsType.INSTRUMENT : GoodsType.ACCESSORIES;
                 musicGroupSubjectGoodsGroup.setType(goodsType);
                 musicGroupSubjectGoodsGroup.setGoodsIdList(orderDetail.getGoodsIdList());
                 musicGroupSubjectGoodsGroup.setPrice(orderDetail.getPrice());
+                musicGroupSubjectGoodsGroup.setKitGroupPurchaseType(orderDetail.getKitGroupPurchaseType());
                 goodsGroups.add(musicGroupSubjectGoodsGroup);
 
                 if (musicGroupSubjectGoodsGroup.getType().equals(GoodsType.INSTRUMENT)) {
@@ -706,6 +705,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                         throw new BizException("乐器提供方式不存在");
                     }
                     goodsGroup.setPrice(new BigDecimal(0));
+                    goodsGroup.setKitGroupPurchaseType(KitGroupPurchaseTypeEnum.FREE);
                     remitFee = groupType.get("FREE");
                 }
                 if (goodsGroup.getType().equals(GoodsType.INSTRUMENT)) {
@@ -877,9 +877,14 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 musicGroupSubjectPlanDao.batchAdd(musicGroupSubjectPlans, musicGroupId);
             }
             if (subFeeSettingDto.getMusicGroupSubjectGoodsGroups() != null && subFeeSettingDto.getMusicGroupSubjectGoodsGroups().size() > 0) {
-                subFeeSettingDto.getMusicGroupSubjectGoodsGroups().removeIf(musicGroupSubjectGoodsGroup -> musicGroupSubjectGoodsGroup.getType().equals(GoodsType.INSTRUMENT) && (musicGroupSubjectGoodsGroup.getKitGroupPurchaseTypeJson() == null
-                        || musicGroupSubjectGoodsGroup.getKitGroupPurchaseTypeJson().isEmpty()
-                        || musicGroupSubjectGoodsGroup.getKitGroupPurchaseTypeJson().equals("{}")));
+                for (MusicGroupSubjectGoodsGroup musicGroupSubjectGoodsGroup : subFeeSettingDto.getMusicGroupSubjectGoodsGroups()) {
+                    if(musicGroupSubjectGoodsGroup.getType().equals(GoodsType.INSTRUMENT) && (musicGroupSubjectGoodsGroup.getKitGroupPurchaseTypeJson() == null
+                            || musicGroupSubjectGoodsGroup.getKitGroupPurchaseTypeJson().isEmpty()
+                            || musicGroupSubjectGoodsGroup.getKitGroupPurchaseTypeJson().equals("{}"))){
+                        throw new BizException(musicGroupSubjectGoodsGroup.getName()+" 请选择提供方式");
+                    }
+                }
+
                 musicGroupSubjectGoodsGroupDao.batchInsert(subFeeSettingDto.getMusicGroupSubjectGoodsGroups(), musicGroupId);
             }
         } else {

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

@@ -5,6 +5,7 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
+import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -183,6 +184,9 @@ public class MusicGroupSubjectPlanServiceImpl extends BaseServiceImpl<Integer, M
                 musicGroupSubjectGoodsGroup.setType(GoodsType.ACCESSORIES);
             }
             if(orderDetail.getKitGroupPurchaseType() != null){
+                if(orderDetail.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)){
+                    musicGroupSubjectGoodsGroup.setDepositFee(orderDetail.getPrice());
+                }
                 String kitGroupPurchaseTypeJson = "{\""+orderDetail.getKitGroupPurchaseType().getCode()+"\":0}";
                 musicGroupSubjectGoodsGroup.setKitGroupPurchaseTypeJson(kitGroupPurchaseTypeJson);
             }

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

@@ -856,12 +856,9 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 contractService.transferMusicGroupCoursesContract(studentRegistration.getUserId(), studentRegistration.getMusicGroupId());
                 // 商品协议(租赁时候有)
                 StudentPaymentOrderDetail applyOrderMusical = studentPaymentOrderDetailService.findApplyOrderMusical(studentPaymentOrder.getId());
-                if ((applyOrderMusical != null && applyOrderMusical.getKitGroupPurchaseType() != null && applyOrderMusical.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE))
-                        || (musicOneSubjectClassPlan.getKitGroupPurchaseType() != null && musicOneSubjectClassPlan.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE))) {
-                    if (applyOrderMusical != null) {
+                if (applyOrderMusical != null && applyOrderMusical.getKitGroupPurchaseType() != null && applyOrderMusical.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)) {
                         contractService.transferGoodsContract(studentPaymentOrder.getUserId(), studentPaymentOrder.getMusicGroupId(),
-                                applyOrderMusical.getGoodsIdList(), musicOneSubjectClassPlan.getKitGroupPurchaseType());
-                    }
+                                applyOrderMusical.getGoodsIdList(), applyOrderMusical.getKitGroupPurchaseType());
                 }
             } catch (Exception e) {
                 LOGGER.error("协议生成失败", e);

+ 56 - 17
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -1260,7 +1260,35 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(surplusCourses<=0){
 			throw new BizException("此vip课程没有剩余排课");
 		}
-		BigDecimal surplusCourseFee = studentPaymentOrderDao.sumSurplusCourseFee(vipGroup.getId().toString(), userId);
+		Date now=new Date();
+        BigDecimal surplusCourseFee;
+        List<StudentCourseInfoDto> userCourseInfos = courseScheduleDao.findUserCourseInfos(GroupType.VIP, vipGroupId.toString(), userId, null);
+        if(CollectionUtils.isEmpty(userCourseInfos)&&vipGroup.getStatus().equals(VipGroupStatusEnum.APPLYING)){
+            if(Objects.isNull(studentPaymentOrder)){
+                surplusCourseFee=new BigDecimal(0);
+            }else{
+                surplusCourseFee=studentPaymentOrder.getActualAmount();
+            }
+        }else if(!CollectionUtils.isEmpty(userCourseInfos)){
+            BigDecimal historyPrice=new BigDecimal(0);
+            BigDecimal allPrice=new BigDecimal(0);
+            for (StudentCourseInfoDto userCourseInfo : userCourseInfos) {
+                allPrice=allPrice.add(userCourseInfo.getExpectPrice());
+                if(now.after(userCourseInfo.getStartClassTime())){
+                    historyPrice=historyPrice.add(userCourseInfo.getTeachMode().equals(TeachModeEnum.ONLINE)?vipGroup.getOnlineClassesUnitPrice():vipGroup.getOfflineClassesUnitPrice());
+                }
+            }
+            surplusCourseFee=allPrice.subtract(historyPrice);
+            if(surplusCourseFee.longValue()<0){
+                surplusCourseFee=new BigDecimal(0);
+            }
+        }else{
+            surplusCourseFee=new BigDecimal(0);
+        }
+        if(Objects.isNull(surplusCourseFee)){
+            surplusCourseFee = new BigDecimal(0);
+        }
+        surplusCourseFee = surplusCourseFee.multiply(new BigDecimal(0.8)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
 		studentApplyRefunds.setExpectAmount(surplusCourseFee);
 		studentApplyRefunds.setStatus(StudentApplyRefundsStatus.ING);
 		String orderNo=StringUtils.join(new String[]{userId.toString(),String.valueOf(System.currentTimeMillis())});
@@ -1619,26 +1647,37 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(vipGroup.getStatus().equals(VipGroupStatusEnum.CANCEL)){
 			throw new BizException("不能对已停止的课程进行退课操作");
 		}
-		Map<String,BigDecimal> result=new HashMap<>();
-		if(vipGroup.getStatus().equals(VipGroupStatusEnum.APPLYING)){
-			StudentPaymentOrder studentPaymentOrder = studentPaymentOrderDao.findByStudentVipGroup(vipGroupId, studentId, DealStatusEnum.SUCCESS.getCode());
-			if(Objects.isNull(studentPaymentOrder)){
-				BigDecimal surplusCourseFee = studentPaymentOrderDao.sumSurplusCourseFee(vipGroupId.toString(), studentId);
-				if(Objects.isNull(surplusCourseFee)){
-					result.put("suplusCourseFee",new BigDecimal(0));
-				}else{
-					result.put("suplusCourseFee",surplusCourseFee);
-				}
-			}else{
-				result.put("suplusCourseFee",studentPaymentOrder.getActualAmount());
-			}
-			return result;
-		}
+		Date now = new Date();
+        BigDecimal bigDecimal;
+        List<StudentCourseInfoDto> userCourseInfos = courseScheduleDao.findUserCourseInfos(GroupType.VIP, vipGroupId.toString(), studentId, null);
+		if(CollectionUtils.isEmpty(userCourseInfos)&&vipGroup.getStatus().equals(VipGroupStatusEnum.APPLYING)){
+            StudentPaymentOrder studentPaymentOrder = studentPaymentOrderDao.findByStudentVipGroup(vipGroupId, studentId, DealStatusEnum.SUCCESS.getCode());
+            if(Objects.isNull(studentPaymentOrder)){
+                bigDecimal=new BigDecimal(0);
+            }else{
+                bigDecimal=studentPaymentOrder.getActualAmount();
+            }
+        }else if(!CollectionUtils.isEmpty(userCourseInfos)){
+            BigDecimal historyPrice=new BigDecimal(0);
+            BigDecimal allPrice=new BigDecimal(0);
+            for (StudentCourseInfoDto userCourseInfo : userCourseInfos) {
+                allPrice=allPrice.add(userCourseInfo.getExpectPrice());
+                if(now.after(userCourseInfo.getStartClassTime())){
+                    historyPrice=historyPrice.add(userCourseInfo.getTeachMode().equals(TeachModeEnum.ONLINE)?vipGroup.getOnlineClassesUnitPrice():vipGroup.getOfflineClassesUnitPrice());
+                }
+            }
+            bigDecimal=allPrice.subtract(historyPrice);
+            if(bigDecimal.longValue()<0){
+                bigDecimal=new BigDecimal(0);
+            }
+        }else{
+		    bigDecimal=new BigDecimal(0);
+        }
+        Map<String,BigDecimal> result=new HashMap<>();
 		ClassGroup classGroup = classGroupDao.findByVipGroup(vipGroupId, null);
 		if(Objects.isNull(classGroup)){
 			throw new BizException("未找到对应班级");
 		}
-		BigDecimal bigDecimal = courseScheduleStudentPaymentDao.countSurplusCourseFee(classGroup.getId(), studentId);
 		if(Objects.isNull(bigDecimal)){
 			bigDecimal = new BigDecimal(0);
 		}

+ 29 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -1850,6 +1850,35 @@
             AND cs.music_group_id_ = #{groupId}
             AND cssp.user_id_=#{userId}
     </select>
+
+    <select id="findUserCourseInfos" resultMap="StudentCourseInfoDto">
+        SELECT
+            cs.id_,
+            cs.music_group_id_,
+            cs.class_group_id_,
+            cs.status_,
+            cs.class_date_,
+            cs.start_class_time_,
+            cs.end_class_time_,
+            cs.actual_teacher_id_,
+            cs.teach_mode_,
+            cssp.expect_price_
+        FROM
+            course_schedule cs
+            LEFT JOIN course_schedule_student_payment cssp ON cs.id_ = cssp.course_schedule_id_
+        WHERE
+            (cs.del_flag_ != 1 OR cs.del_flag_ IS NULL)
+            AND cs.group_type_ = #{groupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+            AND cs.music_group_id_ = #{groupId}
+            AND cssp.user_id_=#{userId}
+            <if test="type=='history'">
+                AND CONCAT( cs.class_date_, ' ', cs.end_class_time_ ) &lt;= NOW()
+            </if>
+            <if test="type=='surplus'">
+                AND CONCAT( cs.class_date_, ' ', cs.start_class_time_ ) &gt; NOW()
+            </if>
+    </select>
+
     <select id="getMinCourseTime" resultType="java.util.Date">
         SELECT MIN(CONCAT(class_date_,' ',start_class_time_))
         FROM course_schedule

+ 3 - 8
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -201,9 +201,10 @@ public class ExportController extends BaseController {
             if (row.getOrderDetailList() != null) {
                 for (StudentPaymentOrderDetail orderDetail : row.getOrderDetailList()) {
                     if (orderDetail.getType().equals(OrderDetailTypeEnum.MUSICAL)) {
-                        musicalFee = orderDetail.getPrice();
                         if(orderDetail.getKitGroupPurchaseType() != null && orderDetail.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)){
                             leaseFee = orderDetail.getPrice();
+                        }else {
+                            musicalFee = orderDetail.getPrice();
                         }
                     } else if (orderDetail.getType().equals(OrderDetailTypeEnum.COURSE)) {
                         courseFee = courseFee.add(orderDetail.getPrice());
@@ -213,7 +214,7 @@ public class ExportController extends BaseController {
                 }
             }
             if(row.getGoodsList() != null){
-                goodsName = row.getGoodsList().stream().map(goods -> goods.getName()).collect(Collectors.joining("|"));
+                goodsName = row.getGoodsList().stream().map(Goods::getName).collect(Collectors.joining("|"));
             }
             row.setCourseFee(courseFee);
             row.setMusicalFee(musicalFee);
@@ -226,12 +227,6 @@ public class ExportController extends BaseController {
                 if (studentRegistration != null) {
                     row.setSubjectName(studentRegistration.getSubjectName());
                     row.setSchoolName(studentRegistration.getSchoolName());
-                    //更新数据后删除
-                    if (leaseFee.compareTo(BigDecimal.ZERO) >0 ||
-                            row.getType().equals(OrderTypeEnum.APPLY) && studentRegistration.getKitType() != null && studentRegistration.getKitType().equals("LEASE")) {
-                        row.setLeaseFee(musicalFee);
-                        row.setMusicalFee(BigDecimal.ZERO);
-                    }
                 }
             } else if (row.getGroupType().equals(GroupType.VIP)) {
                 row.setCourseFee(row.getActualAmount());