yonge 4 年之前
父节点
当前提交
8cb2cfb89e

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

@@ -2045,7 +2045,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                     studentLastChange = subjectChangeDao.getStudentLastChange(userId, musicGroupId);
                 }
                 
-				if (studentLastChange != null && minPaymentOrderId >= studentLastChange.getOriginalOrderId()) {
+				if (studentLastChange != null && minPaymentOrderId <= studentLastChange.getOriginalOrderId()) {
 					if (isRefundInstrumentFee) {
 						amount = amount.add(studentLastChange.getChangeMusicalPrice());
 					}
@@ -2316,7 +2316,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 studentLastChange = subjectChangeDao.getStudentLastChange(userId, musicGroupId);
             }
             
-			if (studentLastChange != null && minPaymentOrderId >= studentLastChange.getOriginalOrderId()) {
+			if (studentLastChange != null && minPaymentOrderId <= studentLastChange.getOriginalOrderId()) {
 				if (isRefundInstrumentFee) {
 					amount = amount.add(studentLastChange.getChangeMusicalPrice());
 				}

+ 147 - 83
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderDetailServiceImpl.java

@@ -1,27 +1,51 @@
 package com.ym.mec.biz.service.impl;
 
+import static com.ym.mec.biz.dal.enums.DealStatusEnum.SUCCESS;
+
 import java.math.BigDecimal;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
-import com.ym.mec.biz.dal.dao.*;
-import com.ym.mec.biz.dal.dto.MusicalListDetailDto;
-import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
-import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
-import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
-import com.ym.mec.util.collection.MapUtil;
-
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderCourseSettingsDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPurchaseListDao;
+import com.ym.mec.biz.dal.dao.OrganizationDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDetailDao;
+import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
+import com.ym.mec.biz.dal.dao.SubjectChangeDao;
+import com.ym.mec.biz.dal.dao.SubjectDao;
+import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dto.MusicalListDetailDto;
+import com.ym.mec.biz.dal.entity.Goods;
+import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.entity.MusicGroupPurchaseList;
+import com.ym.mec.biz.dal.entity.Organization;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
+import com.ym.mec.biz.dal.entity.StudentRegistration;
+import com.ym.mec.biz.dal.entity.SubjectChange;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
 import com.ym.mec.biz.service.GoodsService;
+import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
 import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.util.collection.MapUtil;
 
 @Service
 public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long, StudentPaymentOrderDetail> implements StudentPaymentOrderDetailService {
@@ -51,6 +75,9 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
     @Autowired
     private MusicGroupPaymentCalenderCourseSettingsDao musicGroupPaymentCalenderCourseSettingsDao;
 
+    @Autowired
+    private StudentPaymentOrderService studentPaymentOrderService;
+
     @Override
     public BaseDAO<Long, StudentPaymentOrderDetail> getDAO() {
         return studentPaymentOrderDetailDao;
@@ -248,86 +275,123 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
 
     @Override
     public List<MusicalListDetailDto> getMusicalListDetail(String musicGroupId, Integer studentId) {
-        List<MusicalListDetailDto> musicalListDetailDtos = studentPaymentOrderDetailDao.getMusicalListDetail(musicGroupId, studentId);
-        if (musicalListDetailDtos.size() <= 0) {
-            return musicalListDetailDtos;
-        }
-        List<Long> paymentOrderNo = musicalListDetailDtos.stream().map(MusicalListDetailDto::getPaymentOrderId).collect(Collectors.toList());
-        List<Integer> userIds = musicalListDetailDtos.stream().distinct().map(MusicalListDetailDto::getUserId).collect(Collectors.toList());
-        //商品名称
+    	
+    	List<String> musicGroupIdList = new ArrayList<String>();
+    	musicGroupIdList.add(musicGroupId);
+    	
+    	List<StudentRegistration> studentRegistrationList = studentRegistrationDao.findByMusicGroupIds(musicGroupIdList,StudentMusicGroupStatusEnum.NORMAL);
+
+        List<Integer> userIds = studentRegistrationList.stream().distinct().map(StudentRegistration::getUserId).collect(Collectors.toList());
+        
+        List<SubjectChange> subjectChangeList = subjectChangeDao.getStudentGoods(musicGroupId);
+        Map<Integer,SubjectChange> subjectChangeMap = subjectChangeList.stream().collect(Collectors.toMap(SubjectChange :: getStudentId, t -> t));
+        
+        List<MusicalListDetailDto> musicalListDetailDtos = new ArrayList<MusicalListDetailDto>();
+        SubjectChange subjectChange = null;
+        
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         Organization organization = organizationDao.get(musicGroup.getOrganId());
-        Map<Long, String> goodsNameMap = MapUtil.convertIntegerMap(studentPaymentOrderDetailDao.queryGoodsNames(paymentOrderNo));
         Map<Integer, String> usernameMap = MapUtil.convertIntegerMap(teacherDao.queryUsernameByIds(userIds));
-        Map<Long, BigDecimal> expectAmountMap = MapUtil.convertIntegerMap(studentPaymentOrderDao.queryExpectAmount(paymentOrderNo));
-        Map<Long, BigDecimal> musicalAmountMap = MapUtil.convertIntegerMap(studentPaymentOrderDetailDao.queryGoodsPrice(paymentOrderNo, "MUSICAL"));
-        Map<Long, BigDecimal> accessoriesAmountMap = MapUtil.convertIntegerMap(studentPaymentOrderDetailDao.queryGoodsPrice(paymentOrderNo, "ACCESSORIES"));
-        String courseTypes = Arrays.stream(CourseSchedule.CourseScheduleType.values()).map(CourseSchedule.CourseScheduleType::getCode).collect(Collectors.joining(",")) + ",COURSE";
-        Map<Long, BigDecimal> courseAmountMap = MapUtil.convertIntegerMap(studentPaymentOrderDetailDao.queryGoodsPrice(paymentOrderNo, courseTypes));
-        Map<Long, String> purchaseTypeMap = MapUtil.convertIntegerMap(studentPaymentOrderDetailDao.queryPurchaseTypeMap(paymentOrderNo));
         Map<Integer, String> userSubjectMap = subjectDao.getRegisterSubject(musicGroupId, userIds).stream().collect(Collectors.toMap(StudentRegistration::getUserId, StudentRegistration::getSubjectName));
-        List<StudentPaymentOrderDetail> details = studentPaymentOrderDetailDao.getOrderGoodies(paymentOrderNo);
-
-        musicalListDetailDtos.forEach(e -> {
-            e.setGoodsNames(goodsNameMap.get(e.getPaymentOrderId()));
-            e.setMusicGroupName(musicGroup.getName());
-            e.setUsername(usernameMap.get(e.getUserId()));
-            e.setOrganName(organization.getName());
-            e.setMusicalAmount(musicalAmountMap.get(e.getPaymentOrderId()));
-            e.setAccessoriesAmount(accessoriesAmountMap.get(e.getPaymentOrderId()));
-            e.setOrderAmount(expectAmountMap.get(e.getPaymentOrderId()));
-            e.setCourseAmount(courseAmountMap.get(e.getPaymentOrderId()));
-            e.setSubjectName(userSubjectMap.get(e.getUserId()));
-            String s = purchaseTypeMap.get(e.getPaymentOrderId());
-            if (StringUtils.isNotEmpty(s)) {
-                e.setKitGroupPurchaseTypeEnum(KitGroupPurchaseTypeEnum.valueOf(purchaseTypeMap.get(e.getPaymentOrderId())));
-            }
-            SubjectChange studentLastChange = subjectChangeDao.getStudentLastChange(e.getUserId(), musicGroupId);
-            if (studentLastChange != null) {
-                studentLastChange.setOriginalKitGroupPurchaseType(studentLastChange.getKitGroupPurchaseType());
-            }
+        Integer userId = null;
+        
+        for(StudentRegistration studentRegistration : studentRegistrationList){
+        	
+        	MusicalListDetailDto dto = new MusicalListDetailDto();
+        	
+        	userId = studentRegistration.getUserId();
+        	
+        	List<StudentPaymentOrder> studentPaymentOrderList = new ArrayList<StudentPaymentOrder>();
+
+			if (studentRegistration.getMusicGroupPaymentCalenderId() == null) {
+				StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, musicGroupId, SUCCESS);
+				if (studentPaymentOrder != null) {
+					studentPaymentOrderList.add(studentPaymentOrder);
+				}
 
-            List<Goods> accessories = new ArrayList<>();
-            for (StudentPaymentOrderDetail detail : details) {
-                if (!e.getPaymentOrderId().equals(detail.getPaymentOrderId())) continue;
-                if (detail.getType().equals(OrderDetailTypeEnum.MUSICAL)) {
-                    e.setMusicalName(detail.getGoodsList().stream().map(Goods::getName).collect(Collectors.joining(",")));
-                } else {
-                    accessories.addAll(detail.getGoodsList());
-                }
-            }
-            accessories.sort(Comparator.comparing(Goods::getId));
-            e.setAccessoriesName(accessories.stream().map(Goods::getName).collect(Collectors.joining(",")));
-        });
-        List<SubjectChange> studentGoodies = subjectChangeDao.getStudentGoods(musicGroupId);
-        if (studentGoodies.size() <= 0) {
-            return musicalListDetailDtos;
-        }
-        List<SubjectChange> margins = subjectChangeDao.getMargin(musicGroupId);
-
-        for (MusicalListDetailDto musicalListDetailDto : musicalListDetailDtos) {
-            for (SubjectChange studentGoods : studentGoodies) {
-                if (!musicalListDetailDto.getUserId().equals(studentGoods.getStudentId())) continue;
-                musicalListDetailDto.setMusicalName("");
-                if (studentGoods.getChangeMusicalGoods() != null) {
-                    musicalListDetailDto.setMusicalName(studentGoods.getChangeMusicalGoods().getName());
-                }
-                musicalListDetailDto.setAccessoriesName("");
-                if (studentGoods.getChangeAccessoriesGoods() != null) {
-                    List<Goods> changeAccessoriesGoods = studentGoods.getChangeAccessoriesGoods();
-                    changeAccessoriesGoods.sort(Comparator.comparing(Goods::getId));
-                    String accessoriesNames = changeAccessoriesGoods.stream().map(Goods::getName).collect(Collectors.joining(","));
-                    musicalListDetailDto.setAccessoriesName(accessoriesNames);
-                }
-                musicalListDetailDto.setMusicalAmount(studentGoods.getChangeMusicalPrice());
-                musicalListDetailDto.setAccessoriesAmount(studentGoods.getChangeAccessoriesPrice());
-                musicalListDetailDto.setKitGroupPurchaseTypeEnum(studentGoods.getKitGroupPurchaseType());
-            }
-            for (SubjectChange margin : margins) {
-                if (!musicalListDetailDto.getUserId().equals(margin.getStudentId())) continue;
-                musicalListDetailDto.setOrderAmount(musicalListDetailDto.getOrderAmount().add(margin.getGoodsMargin()));
-            }
+			} else {
+				studentPaymentOrderList = studentPaymentOrderService.queryByBatchNo(userId, studentRegistration.getMusicGroupPaymentCalenderId() + "",
+						DealStatusEnum.SUCCESS);
+			}
+
+			List<Long> paymentOrderIdList = studentPaymentOrderList.stream().map(t -> t.getId()).collect(Collectors.toList());
+			
+			Long minPaymentOrderId = Collections.min(paymentOrderIdList);
+
+			List<StudentPaymentOrderDetail> orderDetailList = studentPaymentOrderDetailDao.getWithIds(paymentOrderIdList);
+			
+			Map<OrderDetailTypeEnum,BigDecimal> userOrderTypeMap = new HashMap<OrderDetailTypeEnum, BigDecimal>();;
+			
+			BigDecimal amount = BigDecimal.ZERO;
+			KitGroupPurchaseTypeEnum kitGroupPurchaseType = null;
+			String goodsId = null ,accessoriesId = null ;
+			for(StudentPaymentOrderDetail spod : orderDetailList){
+				
+				if (spod.getType() == OrderDetailTypeEnum.COURSE || spod.getType() == OrderDetailTypeEnum.HIGH_ONLINE_COURSE
+						|| spod.getType() == OrderDetailTypeEnum.SINGLE || spod.getType() == OrderDetailTypeEnum.VIP
+						|| spod.getType() == OrderDetailTypeEnum.HIGH || spod.getType() == OrderDetailTypeEnum.COURSE
+						|| spod.getType() == OrderDetailTypeEnum.DEMO || spod.getType() == OrderDetailTypeEnum.COMPREHENSIVE
+						|| spod.getType() == OrderDetailTypeEnum.ENLIGHTENMENT || spod.getType() == OrderDetailTypeEnum.TRAINING_SINGLE
+						|| spod.getType() == OrderDetailTypeEnum.TRAINING_MIX || spod.getType() == OrderDetailTypeEnum.HIGH_ONLINE
+						|| spod.getType() == OrderDetailTypeEnum.MUSIC_NETWORK || spod.getType() == OrderDetailTypeEnum.CLASSROOM) {
+					spod.setType(OrderDetailTypeEnum.COURSE);
+				}else if(spod.getType() == OrderDetailTypeEnum.MUSICAL){
+					kitGroupPurchaseType = spod.getKitGroupPurchaseType();
+					goodsId = spod.getGoodsIdList();
+				}else if(spod.getType() == OrderDetailTypeEnum.ACCESSORIES){
+					accessoriesId = spod.getGoodsIdList();
+				}
+				
+				amount = userOrderTypeMap.get(spod.getType());
+				if(amount != null){
+					amount = amount.add(spod.getPrice());
+				}else{
+					amount = spod.getPrice();
+				}
+				userOrderTypeMap.put(spod.getType(), amount);
+			}
+        	
+        	subjectChange = subjectChangeMap.get(studentRegistration.getUserId());
+        	if(subjectChange != null && minPaymentOrderId <= subjectChange.getOriginalOrderId()){
+        		dto.setAccessoriesAmount(subjectChange.getChangeAccessoriesPrice());
+        		dto.setAccessoriesName(subjectChange.getChangeAccessoriesGoods().stream().map(Goods::getName).collect(Collectors.joining(",")));
+        		
+        		dto.setCourseAmount(userOrderTypeMap.get(OrderDetailTypeEnum.COURSE));
+        		//dto.setGoodsNames(goodsNames);
+        		dto.setKitGroupPurchaseTypeEnum(subjectChange.getKitGroupPurchaseType());
+        		dto.setMusicalAmount(subjectChange.getChangeMusicalPrice());
+        		dto.setMusicalName(subjectChange.getChangeMusicalGoods().getName());
+        		dto.setMusicGroupName(musicGroup.getName());
+        		dto.setOrganName(organization.getName());
+        		//dto.setOrderAmount(orderAmount);
+        		dto.setUserId(userId);
+        		dto.setSubjectName(userSubjectMap.get(userId));
+        		dto.setUsername(usernameMap.get(userId));
+        	}else{
+        		
+        		if(StringUtils.isNoneBlank(accessoriesId)){
+        			dto.setAccessoriesName(goodsService.findGoodsByIds(accessoriesId).stream().map(Goods::getName).collect(Collectors.joining(",")));
+        		}
+
+        		dto.setAccessoriesAmount(userOrderTypeMap.get(OrderDetailTypeEnum.ACCESSORIES));
+    			dto.setCourseAmount(userOrderTypeMap.get(OrderDetailTypeEnum.COURSE));
+        		dto.setMusicalAmount(userOrderTypeMap.get(OrderDetailTypeEnum.MUSICAL));
+    		
+        		//dto.setGoodsNames(goodsNames);
+        		dto.setKitGroupPurchaseTypeEnum(kitGroupPurchaseType);
+        		if(StringUtils.isNoneBlank(goodsId)){
+        			dto.setMusicalName(goodsService.findGoodsByIds(goodsId).stream().map(Goods::getName).collect(Collectors.joining(",")));
+        		}
+        		dto.setMusicGroupName(musicGroup.getName());
+        		dto.setOrganName(organization.getName());
+        		//dto.setOrderAmount(orderAmount);
+        		dto.setUserId(userId);
+        		dto.setSubjectName(userSubjectMap.get(userId));
+        		dto.setUsername(usernameMap.get(userId));
+        	}
+        	musicalListDetailDtos.add(dto);
         }
+    	
         return musicalListDetailDtos;
     }