|  | @@ -11,6 +11,7 @@ import java.util.HashMap;
 | 
	
		
			
				|  |  |  import java.util.HashSet;
 | 
	
		
			
				|  |  |  import java.util.List;
 | 
	
		
			
				|  |  |  import java.util.Map;
 | 
	
		
			
				|  |  | +import java.util.Optional;
 | 
	
		
			
				|  |  |  import java.util.Set;
 | 
	
		
			
				|  |  |  import java.util.concurrent.atomic.AtomicInteger;
 | 
	
		
			
				|  |  |  import java.util.stream.Collectors;
 | 
	
	
		
			
				|  | @@ -204,10 +205,8 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |              if (studentPaymentOrder != null && studentPaymentOrder.getStatus() == DealStatusEnum.ING) {
 | 
	
		
			
				|  |  |                  // 查询订单状态
 | 
	
		
			
				|  |  |                  PayStatus payStatus = studentPaymentOrderService.queryPayStatus(studentPaymentOrder);
 | 
	
		
			
				|  |  | -                if (payStatus != PayStatus.FAILED) {
 | 
	
		
			
				|  |  | -                    if (payStatus == PayStatus.SUCCESSED) {
 | 
	
		
			
				|  |  | -                        throw new BizException("订单已支付成功,请勿重复支付");
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | +                if (payStatus == PayStatus.SUCCESSED) {
 | 
	
		
			
				|  |  | +                    throw new BizException("订单已支付成功,请勿重复支付");
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |                  studentPaymentOrder.setStatus(DealStatusEnum.CLOSE);
 | 
	
		
			
				|  |  |                  studentPaymentOrder.setUpdateTime(date);
 | 
	
	
		
			
				|  | @@ -350,13 +349,13 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |          	for(String id : subjectChange.getChangeAccessories().split(",")){
 | 
	
		
			
				|  |  |          		changeGoodsList.add(id);
 | 
	
		
			
				|  |  |          	}
 | 
	
		
			
				|  |  | -        	
 | 
	
		
			
				|  |  | -        	if(subjectChange.getChangeMusical() != subjectChange.getOriginalMusical()){
 | 
	
		
			
				|  |  | -        		changeGoodsList.add(subjectChange.getChangeMusical()+"");
 | 
	
		
			
				|  |  | -        	}
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +    	
 | 
	
		
			
				|  |  | +    	if(subjectChange.getChangeMusical() != subjectChange.getOriginalMusical()){
 | 
	
		
			
				|  |  | +    		changeGoodsList.add(subjectChange.getChangeMusical()+"");
 | 
	
		
			
				|  |  | +    	}
 | 
	
		
			
				|  |  |          
 | 
	
		
			
				|  |  | -        if(changeGoodsList != null){
 | 
	
		
			
				|  |  | +        if(changeGoodsList.size() > 0){
 | 
	
		
			
				|  |  |              String goodsIdsStr = changeGoodsList.stream().map(t -> t.toString()).collect(Collectors.joining(","));
 | 
	
		
			
				|  |  |          	List<Goods> goodsList = goodsService.findGoodsByIds(goodsIdsStr);
 | 
	
		
			
				|  |  |          	Map<Integer,Goods> goodsMap = goodsList.stream().collect(Collectors.toMap(Goods :: getId, t -> t));
 | 
	
	
		
			
				|  | @@ -371,7 +370,27 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |  				goodsTotalGroupPurchasePrice = goodsTotalGroupPurchasePrice.add(goods.getGroupPurchasePrice());
 | 
	
		
			
				|  |  |          	}
 | 
	
		
			
				|  |  |          	
 | 
	
		
			
				|  |  | +        	//分润分部
 | 
	
		
			
				|  |  | +            if(subjectChange.getChangeCourseFee().compareTo(BigDecimal.ZERO) > 0 && subjectChange.getKitGroupPurchaseType() == KitGroupPurchaseTypeEnum.GROUP) {
 | 
	
		
			
				|  |  | +            	
 | 
	
		
			
				|  |  | +            	goodsTotalGroupPurchasePrice = goodsTotalGroupPurchasePrice.add(subjectChange.getChangeCourseFee());
 | 
	
		
			
				|  |  | +            	
 | 
	
		
			
				|  |  | +            	StudentPaymentOrderDetail spod = new StudentPaymentOrderDetail();
 | 
	
		
			
				|  |  | +                spod.setType(OrderDetailTypeEnum.ORGAN_SHARE_PROFIT);
 | 
	
		
			
				|  |  | +                spod.setPrice(subjectChange.getChangeCourseFee().multiply(goods.getGroupPurchasePrice()).divide(goodsTotalGroupPurchasePrice, BigDecimal.ROUND_DOWN).setScale(2, BigDecimal.ROUND_DOWN));
 | 
	
		
			
				|  |  | +                spod.setRemitFee(BigDecimal.ZERO);
 | 
	
		
			
				|  |  | +                spod.setCreateTime(date);
 | 
	
		
			
				|  |  | +                spod.setUpdateTime(date);
 | 
	
		
			
				|  |  | +                spod.setPaymentOrderId(studentPaymentOrder.getId());
 | 
	
		
			
				|  |  | +                spod.setTenantId(tenantId);
 | 
	
		
			
				|  |  | +                studentPaymentOrderDetailList.add(spod);
 | 
	
		
			
				|  |  | +                
 | 
	
		
			
				|  |  | +                totalPrice = totalPrice.add(spod.getPrice());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        	
 | 
	
		
			
				|  |  | +            int i = 0;
 | 
	
		
			
				|  |  |          	for(String goodsIdStr : goodsIdsStr.split(",")){
 | 
	
		
			
				|  |  | +        		i++;
 | 
	
		
			
				|  |  |          		if(StringUtils.isBlank(goodsIdStr)){
 | 
	
		
			
				|  |  |  					continue;
 | 
	
		
			
				|  |  |  				}
 | 
	
	
		
			
				|  | @@ -392,14 +411,14 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |                  
 | 
	
		
			
				|  |  |                  BigDecimal tempPrice = studentPaymentOrder.getExpectAmount().multiply(goods.getGroupPurchasePrice()).divide(goodsTotalGroupPurchasePrice, BigDecimal.ROUND_DOWN).setScale(2, BigDecimal.ROUND_DOWN);
 | 
	
		
			
				|  |  |                  
 | 
	
		
			
				|  |  | -                if(totalPrice.add(tempPrice).compareTo(studentPaymentOrder.getExpectAmount()) > 0 || goodsIdsStr.split(",").length == studentPaymentOrderDetailList.size() + 1){
 | 
	
		
			
				|  |  | +                if(totalPrice.add(tempPrice).compareTo(studentPaymentOrder.getExpectAmount()) > 0 || goodsIdsStr.split(",").length == i){
 | 
	
		
			
				|  |  |                  	studentPaymentOrderDetail.setPrice(studentPaymentOrder.getExpectAmount().subtract(totalPrice));
 | 
	
		
			
				|  |  |                  }else{
 | 
	
		
			
				|  |  |                  	studentPaymentOrderDetail.setPrice(tempPrice);
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |                  studentPaymentOrderDetail.setUpdateTime(date);
 | 
	
		
			
				|  |  |                  studentPaymentOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
 | 
	
		
			
				|  |  | -                
 | 
	
		
			
				|  |  | +                studentPaymentOrderDetail.setTenantId(studentPaymentOrder.getTenantId());
 | 
	
		
			
				|  |  |                  totalPrice = totalPrice.add(studentPaymentOrderDetail.getPrice());
 | 
	
		
			
				|  |  |                  studentPaymentOrderDetailList.add(studentPaymentOrderDetail);
 | 
	
		
			
				|  |  |          	}
 | 
	
	
		
			
				|  | @@ -451,10 +470,10 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |              throw new BizException("已有未支付的声部更改,请勿重复创建");
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        studentWaitPay = subjectChangeDao.getStudentLastChange(subjectChange.getStudentId(), musicGroupId);
 | 
	
		
			
				|  |  | +        /*studentWaitPay = subjectChangeDao.getStudentLastChange(subjectChange.getStudentId(), musicGroupId);
 | 
	
		
			
				|  |  |          if (studentWaitPay != null) {
 | 
	
		
			
				|  |  |              throw new BizException("声部更换只能操作一次,请勿重复操作");
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +        }*/
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          Set<String> musicGroupIds = new HashSet<String>();
 | 
	
		
			
				|  |  |          musicGroupIds.add(musicGroupId);
 | 
	
	
		
			
				|  | @@ -481,27 +500,33 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          Date nowDate = new Date();
 | 
	
		
			
				|  |  | -        SubjectChange studentOriginal = getStudentOriginal(subjectChange.getStudentId(), subjectChange.getMusicGroupId());
 | 
	
		
			
				|  |  | -        if (studentOriginal != null) {
 | 
	
		
			
				|  |  | -            subjectChange.setOriginalOrderId(studentOriginal.getOrderId());
 | 
	
		
			
				|  |  | -            subjectChange.setOriginalCost(studentOriginal.getOriginalCost());
 | 
	
		
			
				|  |  | -            subjectChange.setOriginalAccessories(studentOriginal.getOriginalAccessories());
 | 
	
		
			
				|  |  | +        SubjectChange lastSubjectChange = getStudentOriginal(subjectChange.getStudentId(), subjectChange.getMusicGroupId());
 | 
	
		
			
				|  |  | +        if (lastSubjectChange != null) {
 | 
	
		
			
				|  |  | +            subjectChange.setEduTeacherId(lastSubjectChange.getEduTeacherId());
 | 
	
		
			
				|  |  | +            subjectChange.setOrganId(lastSubjectChange.getOrganId());
 | 
	
		
			
				|  |  | +            subjectChange.setOriginalOrderId(lastSubjectChange.getOrderId());
 | 
	
		
			
				|  |  | +            subjectChange.setOriginalSubjectId(lastSubjectChange.getChangeSubjectId());
 | 
	
		
			
				|  |  | +            subjectChange.setCooperationOrganId(lastSubjectChange.getCooperationOrganId());
 | 
	
		
			
				|  |  | +            subjectChange.setMusicGroupId(musicGroupId);
 | 
	
		
			
				|  |  | +            subjectChange.setOriginalCourseFee(lastSubjectChange.getChangeCourseFee());
 | 
	
		
			
				|  |  | +            subjectChange.setOriginalMusical(lastSubjectChange.getChangeMusical());
 | 
	
		
			
				|  |  | +            subjectChange.setOriginalMusicalPrice(lastSubjectChange.getChangeMusicalPrice());
 | 
	
		
			
				|  |  | +            subjectChange.setOriginalAccessories(lastSubjectChange.getChangeAccessories());
 | 
	
		
			
				|  |  | +            subjectChange.setOriginalAccessoriesPrice(lastSubjectChange.getChangeAccessoriesPrice());
 | 
	
		
			
				|  |  | +            subjectChange.setOriginalCost(lastSubjectChange.getChangeCost());
 | 
	
		
			
				|  |  |              subjectChange.setOriginalKitGroupPurchaseType(
 | 
	
		
			
				|  |  | -                    studentOriginal.getOriginalKitGroupPurchaseType() == null ? KitGroupPurchaseTypeEnum.OWNED : studentOriginal.getOriginalKitGroupPurchaseType());
 | 
	
		
			
				|  |  | +                    lastSubjectChange.getKitGroupPurchaseType() == null ? KitGroupPurchaseTypeEnum.OWNED : lastSubjectChange.getKitGroupPurchaseType());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (subjectChange.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.OWNED)) {
 | 
	
		
			
				|  |  | +            subjectChange.setChangeMusical(null);
 | 
	
		
			
				|  |  | +            subjectChange.setChangeCourseFee(BigDecimal.ZERO);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          subjectChange.setStatus(SubjectChangeStatusEnum.WAIT_PAY);
 | 
	
		
			
				|  |  | -        MusicGroup musicGroup = musicGroupDao.get(subjectChange.getMusicGroupId());
 | 
	
		
			
				|  |  | -        subjectChange.setOrganId(musicGroup.getOrganId());
 | 
	
		
			
				|  |  | -        subjectChange.setCooperationOrganId(musicGroup.getCooperationOrganId());
 | 
	
		
			
				|  |  | -        subjectChange.setEduTeacherId(musicGroup.getEducationalTeacherId());
 | 
	
		
			
				|  |  |          subjectChange.setCourseMargin(subjectChange.getChangeCourseFee().subtract(subjectChange.getOriginalCourseFee()));
 | 
	
		
			
				|  |  |          BigDecimal goodsMargin = subjectChange.getChangeMusicalPrice().add(subjectChange.getChangeAccessoriesPrice())
 | 
	
		
			
				|  |  |                  .subtract(subjectChange.getOriginalMusicalPrice()).subtract(subjectChange.getOriginalAccessoriesPrice());
 | 
	
		
			
				|  |  |          subjectChange.setGoodsMargin(goodsMargin);
 | 
	
		
			
				|  |  |          String goodsIds = "";
 | 
	
		
			
				|  |  | -        if (subjectChange.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.OWNED)) {
 | 
	
		
			
				|  |  | -            subjectChange.setChangeMusical(null);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  |          if (subjectChange.getChangeMusical() != null) {
 | 
	
		
			
				|  |  |              goodsIds += subjectChange.getChangeMusical() + "";
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -515,10 +540,10 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |          for (Goods goods : goodies) {
 | 
	
		
			
				|  |  |              goodsPrice = goodsPrice.add(goods.getDiscountPrice());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +        subjectChange.setChangeCost(goodsPrice);
 | 
	
		
			
				|  |  |          
 | 
	
		
			
				|  |  |          Map<Integer,Goods> goodsMap = goodies.stream().collect(Collectors.toMap(Goods :: getId, t -> t));
 | 
	
		
			
				|  |  |          
 | 
	
		
			
				|  |  | -        subjectChange.setChangeCost(goodsPrice);
 | 
	
		
			
				|  |  |          subjectChange.setCostMargin(subjectChange.getChangeCost().subtract(subjectChange.getOriginalCost()));
 | 
	
		
			
				|  |  |          //差价 <= 0
 | 
	
		
			
				|  |  |          BigDecimal amountMargin = subjectChange.getGoodsMargin().add(subjectChange.getCourseMargin());
 | 
	
	
		
			
				|  | @@ -526,6 +551,8 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |              subjectChange.setStatus(SubjectChangeStatusEnum.SUCCESSED);
 | 
	
		
			
				|  |  |              subjectChange.setSellAmount(BigDecimal.ZERO);
 | 
	
		
			
				|  |  |              subjectChange.setSellTime(nowDate);
 | 
	
		
			
				|  |  | +        }else{
 | 
	
		
			
				|  |  | +        	subjectChange.setSellAmount(amountMargin);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          subjectChange.setCreateTime(nowDate);
 | 
	
		
			
				|  |  |          subjectChange.setUpdateTime(nowDate);
 | 
	
	
		
			
				|  | @@ -533,7 +560,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |          subjectChangeDao.insert(subjectChange);
 | 
	
		
			
				|  |  |          //差价小于0退到余额
 | 
	
		
			
				|  |  |          if (amountMargin.compareTo(BigDecimal.ZERO) <= 0) {
 | 
	
		
			
				|  |  | -            /*sysUserCashAccountService.updateBalance(subjectChange.getStudentId(), amountMargin.negate(), PlatformCashAccountDetailTypeEnum.REFUNDS, "声部更换退还");
 | 
	
		
			
				|  |  | +            //sysUserCashAccountService.updateBalance(subjectChange.getStudentId(), amountMargin.negate(), PlatformCashAccountDetailTypeEnum.REFUNDS, "声部更换退还");
 | 
	
		
			
				|  |  |              if (amountMargin.compareTo(BigDecimal.ZERO) < 0) {
 | 
	
		
			
				|  |  |                  SysUserCashAccountLog sysUserCashAccountLog = new SysUserCashAccountLog();
 | 
	
		
			
				|  |  |                  sysUserCashAccountLog.setUserId(subjectChange.getStudentId());
 | 
	
	
		
			
				|  | @@ -544,7 +571,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |                  sysUserCashAccountLog.setReturnFeeType(ReturnFeeEnum.SUBJECT_CHANGE);
 | 
	
		
			
				|  |  |                  sysUserCashAccountLog.setComment("声部更换退还");
 | 
	
		
			
				|  |  |                  sysUserCashAccountLogDao.insert(sysUserCashAccountLog);
 | 
	
		
			
				|  |  | -            }*/
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |              studentRegistrationService.changeStudentSubject(subjectChange.getStudentId(), subjectChange.getMusicGroupId(), subjectChange.getOriginalSubjectId(), subjectChange.getChangeSubjectId());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -564,6 +591,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |              studentPaymentOrder.setUpdateTime(nowDate);
 | 
	
		
			
				|  |  |              studentPaymentOrder.setOrganId(subjectChange.getOrganId());
 | 
	
		
			
				|  |  |              studentPaymentOrder.setRoutingOrganId(subjectChange.getOrganId());
 | 
	
		
			
				|  |  | +            studentPaymentOrder.setTenantId(subjectChange.getTenantId());
 | 
	
		
			
				|  |  |              studentPaymentOrderService.insert(studentPaymentOrder);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              subjectChange.setOrderId(studentPaymentOrder.getId().intValue());
 | 
	
	
		
			
				|  | @@ -590,6 +618,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |  	                studentPaymentOrderDetail.setCreateTime(nowDate);
 | 
	
		
			
				|  |  |  	                if(goods.getType() == GoodsType.INSTRUMENT){
 | 
	
		
			
				|  |  |  	                	studentPaymentOrderDetail.setType(OrderDetailTypeEnum.MUSICAL);
 | 
	
		
			
				|  |  | +	                	studentPaymentOrderDetail.setKitGroupPurchaseType(subjectChange.getKitGroupPurchaseType());
 | 
	
		
			
				|  |  |  	                }else if(goods.getType() == GoodsType.ACCESSORIES){
 | 
	
		
			
				|  |  |  	                	studentPaymentOrderDetail.setType(OrderDetailTypeEnum.ACCESSORIES);
 | 
	
		
			
				|  |  |  	                }else if(goods.getType() == GoodsType.TEACHING || goods.getType() == GoodsType.STAFF){
 | 
	
	
		
			
				|  | @@ -689,8 +718,22 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |  							}
 | 
	
		
			
				|  |  |  						}
 | 
	
		
			
				|  |  |  	                }
 | 
	
		
			
				|  |  | +	                studentPaymentOrderDetail.setTenantId(studentPaymentOrder.getTenantId());
 | 
	
		
			
				|  |  |  	                
 | 
	
		
			
				|  |  |  	                studentPaymentOrderDetailList.add(studentPaymentOrderDetail);
 | 
	
		
			
				|  |  | +	                
 | 
	
		
			
				|  |  | +	                //分部分润
 | 
	
		
			
				|  |  | +	                if(subjectChange.getChangeCourseFee().compareTo(BigDecimal.ZERO) > 0 && studentPaymentOrderDetail.getKitGroupPurchaseType() == KitGroupPurchaseTypeEnum.GROUP) {
 | 
	
		
			
				|  |  | +	                	StudentPaymentOrderDetail spod = new StudentPaymentOrderDetail();
 | 
	
		
			
				|  |  | +	                    spod.setType(OrderDetailTypeEnum.ORGAN_SHARE_PROFIT);
 | 
	
		
			
				|  |  | +	                    spod.setPrice(subjectChange.getChangeCourseFee());
 | 
	
		
			
				|  |  | +	                    spod.setRemitFee(BigDecimal.ZERO);
 | 
	
		
			
				|  |  | +	                    spod.setCreateTime(nowDate);
 | 
	
		
			
				|  |  | +	                    spod.setUpdateTime(nowDate);
 | 
	
		
			
				|  |  | +	                    spod.setPaymentOrderId(studentPaymentOrder.getId());
 | 
	
		
			
				|  |  | +	                    spod.setTenantId(studentPaymentOrder.getTenantId());
 | 
	
		
			
				|  |  | +	                    studentPaymentOrderDetailList.add(spod);
 | 
	
		
			
				|  |  | +	                }
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |          	}
 | 
	
		
			
				|  |  |              
 | 
	
	
		
			
				|  | @@ -776,48 +819,14 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |      public SubjectChange getStudentOriginal(Integer studentId, String musicGroupId) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          //1、存在历史的更换
 | 
	
		
			
				|  |  | -        SubjectChange subjectChange = new SubjectChange();
 | 
	
		
			
				|  |  |          SubjectChange studentLastChange = subjectChangeDao.getStudentLastChange(studentId, musicGroupId);
 | 
	
		
			
				|  |  |          if (studentLastChange != null) {
 | 
	
		
			
				|  |  | -            throw new BizException("声部更换只能操作一次,请勿重复操作");
 | 
	
		
			
				|  |  | -        	/*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());
 | 
	
		
			
				|  |  | -            subjectChange.setMusicGroupId(studentLastChange.getMusicGroupId());
 | 
	
		
			
				|  |  | -            subjectChange.setOriginalCourseFee(studentLastChange.getChangeCourseFee());
 | 
	
		
			
				|  |  | -            subjectChange.setKitGroupPurchaseType(studentLastChange.getKitGroupPurchaseType());
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            BigDecimal originalCost = BigDecimal.ZERO;
 | 
	
		
			
				|  |  | -            if (studentLastChange.getChangeMusical() != null && !refundSellOrderGoodsIds.contains(studentLastChange.getChangeMusical())) {
 | 
	
		
			
				|  |  | -                subjectChange.setOriginalMusical(studentLastChange.getChangeMusical());
 | 
	
		
			
				|  |  | -                subjectChange.setOriginalMusicalGoods(goodsDao.get(studentLastChange.getChangeMusical()));
 | 
	
		
			
				|  |  | -                subjectChange.setOriginalMusicalPrice(studentLastChange.getChangeMusicalPrice());
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            if (StringUtils.isNotBlank(studentLastChange.getChangeAccessories())) {
 | 
	
		
			
				|  |  | -                String[] goodsIdArr = studentLastChange.getChangeAccessories().split(",");
 | 
	
		
			
				|  |  | -                String accessoriesId = "";
 | 
	
		
			
				|  |  | -                for (String goodsId : goodsIdArr) {
 | 
	
		
			
				|  |  | -                    if (refundSellOrderGoodsIds.contains(Integer.parseInt(goodsId))) {
 | 
	
		
			
				|  |  | -                        continue;
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                    accessoriesId += StringUtils.isBlank(accessoriesId) ? goodsId : "," + goodsId;
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -                if (StringUtils.isNotBlank(accessoriesId)) {
 | 
	
		
			
				|  |  | -                    subjectChange.setOriginalAccessories(accessoriesId);
 | 
	
		
			
				|  |  | -                    List<Goods> accessoriesGoods = goodsDao.findGoodsByIds(accessoriesId);
 | 
	
		
			
				|  |  | -                    subjectChange.setOriginalAccessoriesGoods(accessoriesGoods);
 | 
	
		
			
				|  |  | -                    BigDecimal price = accessoriesGoods.stream().map(Goods::getGroupPurchasePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
 | 
	
		
			
				|  |  | -                    subjectChange.setOriginalAccessoriesPrice(price);
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            subjectChange.setOriginalCost(originalCost);
 | 
	
		
			
				|  |  | -            return subjectChange;*/
 | 
	
		
			
				|  |  | +        	studentLastChange.setChangeAccessoriesGoods(goodsDao.findGoodsByIds(studentLastChange.getChangeAccessories()));
 | 
	
		
			
				|  |  | +        	studentLastChange.setChangeMusicalGoods(goodsDao.get(studentLastChange.getChangeMusical()));
 | 
	
		
			
				|  |  | +        	return studentLastChange;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          //2.1不存在历史的更换
 | 
	
		
			
				|  |  | +        SubjectChange subjectChange = new SubjectChange();
 | 
	
		
			
				|  |  |          StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(studentId, musicGroupId);
 | 
	
		
			
				|  |  |          if (studentRegistration == null) {
 | 
	
		
			
				|  |  |              throw new BizException("用户注册信息不存在");
 | 
	
	
		
			
				|  | @@ -840,9 +849,16 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |          if (paymentOrderIdList != null && paymentOrderIdList.size() > 0) {
 | 
	
		
			
				|  |  |              details = studentPaymentOrderDetailDao.getWithIds(paymentOrderIdList);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +        KitGroupPurchaseTypeEnum kitGroupPurchaseType = null;
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        Optional<StudentPaymentOrderDetail> optional = details.stream().filter(t -> (t.getKitGroupPurchaseType() != null && t.getType() == OrderDetailTypeEnum.MUSICAL)).findFirst();
 | 
	
		
			
				|  |  | +        if(optional.isPresent()){
 | 
	
		
			
				|  |  | +        	kitGroupPurchaseType = optional.get().getKitGroupPurchaseType();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          //查询乐器订单
 | 
	
		
			
				|  |  |          Long paymentOrderId = null;
 | 
	
		
			
				|  |  | +        BigDecimal organShareProfit = BigDecimal.ZERO;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          for (StudentPaymentOrderDetail detail : details) {
 | 
	
		
			
				|  |  |              if (detail.getType() == OrderDetailTypeEnum.ACCESSORIES || detail.getType() == OrderDetailTypeEnum.MUSICAL) {
 | 
	
	
		
			
				|  | @@ -850,6 +866,9 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |                      paymentOrderId = detail.getPaymentOrderId();
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +            if(detail.getType() == OrderDetailTypeEnum.ORGAN_SHARE_PROFIT && kitGroupPurchaseType == KitGroupPurchaseTypeEnum.GROUP) {
 | 
	
		
			
				|  |  | +            	organShareProfit = organShareProfit.add(detail.getPrice());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          Set<Integer> refundSellOrderGoodsIds = new HashSet<Integer>();
 | 
	
	
		
			
				|  | @@ -859,10 +878,23 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
 | 
	
		
			
				|  |  |          subjectChange.setStudentId(studentId);
 | 
	
		
			
				|  |  | +        subjectChange.setEduTeacherId(musicGroup.getEducationalTeacherId());
 | 
	
		
			
				|  |  |          subjectChange.setOrganId(musicGroup.getOrganId());
 | 
	
		
			
				|  |  |          subjectChange.setCooperationOrganId(musicGroup.getCooperationOrganId());
 | 
	
		
			
				|  |  |          subjectChange.setMusicGroupId(musicGroupId);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +        subjectChange.setOriginalOrderId(null);
 | 
	
		
			
				|  |  | +        subjectChange.setOriginalSubjectId(null);
 | 
	
		
			
				|  |  | +        subjectChange.setOriginalCourseFee(null);
 | 
	
		
			
				|  |  | +        subjectChange.setOriginalMusical(null);
 | 
	
		
			
				|  |  | +        subjectChange.setOriginalMusicalPrice(null);
 | 
	
		
			
				|  |  | +        subjectChange.setOriginalAccessories(null);
 | 
	
		
			
				|  |  | +        subjectChange.setOriginalAccessoriesPrice(null);
 | 
	
		
			
				|  |  | +        subjectChange.setOriginalCost(null);
 | 
	
		
			
				|  |  | +        subjectChange.setOriginalKitGroupPurchaseType(null);
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        subjectChange.setChangeSubjectId(studentRegistration.getActualSubjectId());
 | 
	
		
			
				|  |  | +        subjectChange.setChangeCourseFee(organShareProfit);
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  |          if (paymentOrderId != null) {
 | 
	
		
			
				|  |  |              subjectChange.setOrderId(paymentOrderId.intValue());
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -871,14 +903,14 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |          BigDecimal accessoriesPrice = BigDecimal.ZERO;
 | 
	
		
			
				|  |  |          for (StudentPaymentOrderDetail detail : details) {
 | 
	
		
			
				|  |  |              if (detail.getType().equals(OrderDetailTypeEnum.COURSE)) {
 | 
	
		
			
				|  |  | -                subjectChange.setOriginalCourseFee(detail.getPrice());
 | 
	
		
			
				|  |  | +                subjectChange.setChangeCourseFee(detail.getPrice());
 | 
	
		
			
				|  |  |              } else if (detail.getType().equals(OrderDetailTypeEnum.MUSICAL)) {
 | 
	
		
			
				|  |  | -                subjectChange.setOriginalKitGroupPurchaseType(detail.getKitGroupPurchaseType());
 | 
	
		
			
				|  |  | +                subjectChange.setKitGroupPurchaseType(detail.getKitGroupPurchaseType());
 | 
	
		
			
				|  |  |                  Integer goodsId = Integer.parseInt(detail.getGoodsIdList());
 | 
	
		
			
				|  |  |                  if (!refundSellOrderGoodsIds.contains(goodsId)) {
 | 
	
		
			
				|  |  | -                    subjectChange.setOriginalMusical(goodsId);
 | 
	
		
			
				|  |  | -                    subjectChange.setOriginalMusicalGoods(goodsDao.get(goodsId));
 | 
	
		
			
				|  |  | -                    subjectChange.setOriginalMusicalPrice(detail.getPrice());
 | 
	
		
			
				|  |  | +                    subjectChange.setChangeMusical(goodsId);
 | 
	
		
			
				|  |  | +                    //subjectChange.setOriginalMusicalGoods(goodsDao.get(goodsId));
 | 
	
		
			
				|  |  | +                    subjectChange.setChangeMusicalPrice(detail.getPrice());
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              } else if (detail.getType().equals(OrderDetailTypeEnum.ACCESSORIES)) {
 | 
	
		
			
				|  |  |                  if (StringUtils.isNotBlank(detail.getGoodsIdList())) {
 | 
	
	
		
			
				|  | @@ -897,26 +929,27 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |                  accessoriesId += StringUtils.isBlank(accessoriesId) ? goodsId : "," + goodsId;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            subjectChange.setOriginalAccessories(accessoriesId);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            Map<Integer, Goods> goodsMap = goodsService.findGoodsByIds(accessoriesId).stream().collect(Collectors.toMap(Goods::getId, Goods -> Goods));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            String[] accessoriesIdList = StringUtils.split(accessoriesId, ',');
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            for (String s : accessoriesIdList) {
 | 
	
		
			
				|  |  | -                if (StringUtils.isBlank(s)) {
 | 
	
		
			
				|  |  | -                    continue;
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                if (subjectChange.getOriginalAccessoriesGoods() == null) {
 | 
	
		
			
				|  |  | -                    subjectChange.setOriginalAccessoriesGoods(new ArrayList<Goods>());
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -                subjectChange.getOriginalAccessoriesGoods().add(goodsMap.get(Integer.parseInt(s)));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            subjectChange.setChangeAccessories(accessoriesId);
 | 
	
		
			
				|  |  | +            subjectChange.setChangeAccessoriesPrice(accessoriesPrice);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            //BigDecimal price = accessoriesGoods.stream().map(Goods::getGroupPurchasePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
 | 
	
		
			
				|  |  | -            subjectChange.setOriginalAccessoriesPrice(accessoriesPrice);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        subjectChange.setChangeAccessoriesGoods(goodsDao.findGoodsByIds(subjectChange.getChangeAccessories()));
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        BigDecimal goodsPrice = BigDecimal.ZERO;
 | 
	
		
			
				|  |  | +        List<Goods> goodies = new ArrayList<Goods>(subjectChange.getChangeAccessoriesGoods());
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        subjectChange.setChangeMusicalGoods(goodsDao.get(subjectChange.getChangeMusical()));
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        goodies.add(subjectChange.getChangeMusicalGoods());
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        for (Goods goods : goodies) {
 | 
	
		
			
				|  |  | +            goodsPrice = goodsPrice.add(goods.getDiscountPrice());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        subjectChange.setChangeCost(goodsPrice);
 | 
	
		
			
				|  |  | +        subjectChange.setGoodsMargin(subjectChange.getChangeMusicalPrice().add(subjectChange.getChangeAccessoriesPrice()));
 | 
	
		
			
				|  |  | +        subjectChange.setCostMargin(goodsPrice);
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  |          //2.2 计算销售成本
 | 
	
		
			
				|  |  |          BigDecimal orderSellCost = BigDecimal.ZERO;
 | 
	
		
			
				|  |  |          if (paymentOrderIdList != null && paymentOrderIdList.size() > 0) {
 | 
	
	
		
			
				|  | @@ -996,7 +1029,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |                  List<SellOrder> sellOrders = this.addSellOrder(studentPaymentOrder,subjectChange.getMusicGroupId(),
 | 
	
		
			
				|  |  |                          goodsIdList,
 | 
	
		
			
				|  |  |                          subjectChange.getKitGroupPurchaseType());
 | 
	
		
			
				|  |  | -                if (sellOrders != null && sellOrders.size() > 0) {
 | 
	
		
			
				|  |  | +                /*if (sellOrders != null && sellOrders.size() > 0) {
 | 
	
		
			
				|  |  |                      SubjectChange change = subjectChangeDao.get(subjectChange.getId());
 | 
	
		
			
				|  |  |                      BigDecimal instrumentAmount = sellOrders.stream().filter(e -> e.getType() == SellTypeEnum.INSTRUMENT).map(e -> e.getExpectAmount()).reduce(BigDecimal.ZERO, BigDecimal::add);
 | 
	
		
			
				|  |  |                      BigDecimal accessoriesAmount = sellOrders.stream().filter(e -> e.getType() == SellTypeEnum.ACCESSORIES).map(e -> e.getExpectAmount()).reduce(BigDecimal.ZERO, BigDecimal::add);
 | 
	
	
		
			
				|  | @@ -1004,7 +1037,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |                      change.setChangeAccessoriesPrice(accessoriesAmount.add(change.getOriginalAccessoriesPrice()));
 | 
	
		
			
				|  |  |                      change.setSellAmount(instrumentAmount.add(accessoriesAmount));
 | 
	
		
			
				|  |  |                      subjectChangeDao.update(change);
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | +                }*/
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              
 | 
	
		
			
				|  |  |              //更新学生声部
 |