|  | @@ -1,5 +1,7 @@
 | 
	
		
			
				|  |  |  package com.ym.mec.biz.service.impl;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import static com.ym.mec.biz.dal.enums.DealStatusEnum.SUCCESS;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.dao.*;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.entity.*;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.enums.*;
 | 
	
	
		
			
				|  | @@ -13,6 +15,7 @@ import com.ym.mec.common.service.impl.BaseServiceImpl;
 | 
	
		
			
				|  |  |  import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 | 
	
		
			
				|  |  |  import com.ym.mec.util.collection.MapUtil;
 | 
	
		
			
				|  |  |  import com.ym.mec.util.date.DateUtil;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  import org.apache.commons.lang3.StringUtils;
 | 
	
		
			
				|  |  |  import org.slf4j.Logger;
 | 
	
		
			
				|  |  |  import org.slf4j.LoggerFactory;
 | 
	
	
		
			
				|  | @@ -72,6 +75,8 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |      private StudentInstrumentService studentInstrumentService;
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private MusicGroupPurchaseListDao musicGroupPurchaseListDao;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private StudentRegistrationDao studentRegistrationDao;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      private final Logger logger = LoggerFactory.getLogger(this.getClass());
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -334,11 +339,14 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public SubjectChange getStudentOriginal(Integer studentId, String musicGroupId) {
 | 
	
		
			
				|  |  | +    	
 | 
	
		
			
				|  |  |          //1、存在历史的更换
 | 
	
		
			
				|  |  |          SubjectChange subjectChange = new SubjectChange();
 | 
	
		
			
				|  |  |          SubjectChange studentLastChange = subjectChangeDao.getStudentLastChange(studentId, musicGroupId);
 | 
	
		
			
				|  |  |          if (studentLastChange != null) {
 | 
	
		
			
				|  |  | -            Set<Integer> refundSellOrderGoodsIds = getRefundGoodsId(studentLastChange.getOrderId().longValue());
 | 
	
		
			
				|  |  | +        	List<Long> orderIdList = new ArrayList<Long>();
 | 
	
		
			
				|  |  | +        	orderIdList.add(studentLastChange.getOrderId().longValue());
 | 
	
		
			
				|  |  | +        	Set<Integer> refundSellOrderGoodsIds = getRefundGoodsId(orderIdList);
 | 
	
		
			
				|  |  |              subjectChange.setStudentId(studentLastChange.getStudentId());
 | 
	
		
			
				|  |  |              subjectChange.setOrderId(studentLastChange.getOrderId());
 | 
	
		
			
				|  |  |              subjectChange.setCooperationOrganId(studentLastChange.getCooperationOrganId());
 | 
	
	
		
			
				|  | @@ -374,12 +382,30 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |              return subjectChange;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          //2.1不存在历史的更换
 | 
	
		
			
				|  |  | -        List<StudentPaymentOrderDetail> details = studentPaymentOrderDetailDao.getStudentApplyDetail(studentId, musicGroupId);
 | 
	
		
			
				|  |  | -        if (details.size() <= 0) {
 | 
	
		
			
				|  |  | -            return null;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        Set<Integer> refundSellOrderGoodsIds = getRefundGoodsId(details.get(0).getPaymentOrderId());
 | 
	
		
			
				|  |  | +        StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(studentId, musicGroupId);
 | 
	
		
			
				|  |  | +        if (studentRegistration == null) {
 | 
	
		
			
				|  |  | +            throw new BizException("用户注册信息不存在");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        List<StudentPaymentOrder> studentPaymentOrderList = new ArrayList<StudentPaymentOrder>();
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +		if (studentRegistration.getMusicGroupPaymentCalenderId() == null) {
 | 
	
		
			
				|  |  | +			if(studentRegistration.getMusicGroupStatus() == StudentMusicGroupStatusEnum.NORMAL){
 | 
	
		
			
				|  |  | +				StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(studentId, musicGroupId, SUCCESS);
 | 
	
		
			
				|  |  | +				if (studentPaymentOrder != null) {
 | 
	
		
			
				|  |  | +					studentPaymentOrderList.add(studentPaymentOrder);
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		} else {
 | 
	
		
			
				|  |  | +			studentPaymentOrderList = studentPaymentOrderService.queryByBatchNo(studentId, studentRegistration.getMusicGroupPaymentCalenderId() + "",
 | 
	
		
			
				|  |  | +					DealStatusEnum.SUCCESS);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        List<Long> paymentOrderIdList = studentPaymentOrderList.stream().map(t -> t.getId()).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        List<StudentPaymentOrderDetail> details = studentPaymentOrderDetailDao.getWithIds(paymentOrderIdList);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Set<Integer> refundSellOrderGoodsIds = getRefundGoodsId(details.stream().map(t -> t.getPaymentOrderId()).collect(Collectors.toList()));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
 | 
	
		
			
				|  |  |          subjectChange.setStudentId(studentId);
 | 
	
	
		
			
				|  | @@ -423,15 +449,14 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |              BigDecimal price = accessoriesGoods.stream().map(Goods::getGroupPurchasePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
 | 
	
		
			
				|  |  |              subjectChange.setOriginalAccessoriesPrice(price);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        Long orderId = details.get(0).getPaymentOrderId();
 | 
	
		
			
				|  |  |          //2.2 计算销售成本
 | 
	
		
			
				|  |  | -        BigDecimal orderSellCost = sellOrderDao.getOrderSellCost(orderId);
 | 
	
		
			
				|  |  | +        BigDecimal orderSellCost = sellOrderDao.getOrderSellCost(paymentOrderIdList);
 | 
	
		
			
				|  |  |          subjectChange.setOriginalCost(orderSellCost == null ? BigDecimal.ZERO : orderSellCost);
 | 
	
		
			
				|  |  |          return subjectChange;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    private Set<Integer> getRefundGoodsId(Long orderId) {
 | 
	
		
			
				|  |  | -        List<SellOrder> refundSellOrders = sellOrderService.getRefundSellOrder(orderId);
 | 
	
		
			
				|  |  | +    private Set<Integer> getRefundGoodsId(List<Long> orderIdList) {
 | 
	
		
			
				|  |  | +        List<SellOrder> refundSellOrders = sellOrderService.getRefundSellOrder(orderIdList);
 | 
	
		
			
				|  |  |          Set<Integer> refundSellOrderGoodsIds = refundSellOrders.stream().filter(e -> e.getParentGoodsId() == null).map(SellOrder::getGoodsId).collect(Collectors.toSet());
 | 
	
		
			
				|  |  |          Set<Integer> refundSellOrderParentGoodsId = refundSellOrders.stream().filter(e -> e.getParentGoodsId() != null).map(SellOrder::getParentGoodsId).collect(Collectors.toSet());
 | 
	
		
			
				|  |  |          refundSellOrderGoodsIds.addAll(refundSellOrderParentGoodsId);
 |