| 
														
															@@ -1,5 +1,7 @@ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 package com.ym.mec.biz.service.impl; 
														 | 
														
														 | 
														
															 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.dao.*; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import com.ym.mec.biz.dal.entity.*; 
														 | 
														
														 | 
														
															 import com.ym.mec.biz.dal.entity.*; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import com.ym.mec.biz.dal.enums.*; 
														 | 
														
														 | 
														
															 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.thirdparty.message.MessageSenderPluginContext; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import com.ym.mec.util.collection.MapUtil; 
														 | 
														
														 | 
														
															 import com.ym.mec.util.collection.MapUtil; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import com.ym.mec.util.date.DateUtil; 
														 | 
														
														 | 
														
															 import com.ym.mec.util.date.DateUtil; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import org.apache.commons.lang3.StringUtils; 
														 | 
														
														 | 
														
															 import org.apache.commons.lang3.StringUtils; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import org.slf4j.Logger; 
														 | 
														
														 | 
														
															 import org.slf4j.Logger; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import org.slf4j.LoggerFactory; 
														 | 
														
														 | 
														
															 import org.slf4j.LoggerFactory; 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -72,6 +75,8 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     private StudentInstrumentService studentInstrumentService; 
														 | 
														
														 | 
														
															     private StudentInstrumentService studentInstrumentService; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     @Autowired 
														 | 
														
														 | 
														
															     @Autowired 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     private MusicGroupPurchaseListDao musicGroupPurchaseListDao; 
														 | 
														
														 | 
														
															     private MusicGroupPurchaseListDao musicGroupPurchaseListDao; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    @Autowired 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    private StudentRegistrationDao studentRegistrationDao; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     private final Logger logger = LoggerFactory.getLogger(this.getClass()); 
														 | 
														
														 | 
														
															     private final Logger logger = LoggerFactory.getLogger(this.getClass()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -334,11 +339,14 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     @Override 
														 | 
														
														 | 
														
															     @Override 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     public SubjectChange getStudentOriginal(Integer studentId, String musicGroupId) { 
														 | 
														
														 | 
														
															     public SubjectChange getStudentOriginal(Integer studentId, String musicGroupId) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    	 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         //1、存在历史的更换 
														 | 
														
														 | 
														
															         //1、存在历史的更换 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         SubjectChange subjectChange = new SubjectChange(); 
														 | 
														
														 | 
														
															         SubjectChange subjectChange = new SubjectChange(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         SubjectChange studentLastChange = subjectChangeDao.getStudentLastChange(studentId, musicGroupId); 
														 | 
														
														 | 
														
															         SubjectChange studentLastChange = subjectChangeDao.getStudentLastChange(studentId, musicGroupId); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if (studentLastChange != null) { 
														 | 
														
														 | 
														
															         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.setStudentId(studentLastChange.getStudentId()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             subjectChange.setOrderId(studentLastChange.getOrderId()); 
														 | 
														
														 | 
														
															             subjectChange.setOrderId(studentLastChange.getOrderId()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             subjectChange.setCooperationOrganId(studentLastChange.getCooperationOrganId()); 
														 | 
														
														 | 
														
															             subjectChange.setCooperationOrganId(studentLastChange.getCooperationOrganId()); 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -374,12 +382,30 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             return subjectChange; 
														 | 
														
														 | 
														
															             return subjectChange; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         //2.1不存在历史的更换 
														 | 
														
														 | 
														
															         //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); 
														 | 
														
														 | 
														
															         MusicGroup musicGroup = musicGroupDao.get(musicGroupId); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         subjectChange.setStudentId(studentId); 
														 | 
														
														 | 
														
															         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); 
														 | 
														
														 | 
														
															             BigDecimal price = accessoriesGoods.stream().map(Goods::getGroupPurchasePrice).reduce(BigDecimal.ZERO, BigDecimal::add); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             subjectChange.setOriginalAccessoriesPrice(price); 
														 | 
														
														 | 
														
															             subjectChange.setOriginalAccessoriesPrice(price); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        Long orderId = details.get(0).getPaymentOrderId(); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         //2.2 计算销售成本 
														 | 
														
														 | 
														
															         //2.2 计算销售成本 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        BigDecimal orderSellCost = sellOrderDao.getOrderSellCost(orderId); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        BigDecimal orderSellCost = sellOrderDao.getOrderSellCost(paymentOrderIdList); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         subjectChange.setOriginalCost(orderSellCost == null ? BigDecimal.ZERO : orderSellCost); 
														 | 
														
														 | 
														
															         subjectChange.setOriginalCost(orderSellCost == null ? BigDecimal.ZERO : orderSellCost); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         return subjectChange; 
														 | 
														
														 | 
														
															         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> 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()); 
														 | 
														
														 | 
														
															         Set<Integer> refundSellOrderParentGoodsId = refundSellOrders.stream().filter(e -> e.getParentGoodsId() != null).map(SellOrder::getParentGoodsId).collect(Collectors.toSet()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         refundSellOrderGoodsIds.addAll(refundSellOrderParentGoodsId); 
														 | 
														
														 | 
														
															         refundSellOrderGoodsIds.addAll(refundSellOrderParentGoodsId); 
														 |