Browse Source

Merge branch 'vip_price_827' into online1

yonge 3 years ago
parent
commit
b623689ac1

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java

@@ -86,7 +86,7 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
      * @param status
      * @return
      */
-    StudentPaymentOrder findMusicGroupApplyOrderByStatus(@Param("userId") Integer userId, @Param("musicGroupId") String musicGroupId,
+    List<StudentPaymentOrder> findMusicGroupApplyOrderByStatus(@Param("userId") Integer userId, @Param("musicGroupId") String musicGroupId,
                                                          @Param("status") DealStatusEnum status);
 
     /**

+ 21 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicalListDetailDto.java

@@ -24,6 +24,10 @@ public class MusicalListDetailDto {
     private BigDecimal accessoriesAmount;
 
     private BigDecimal courseAmount;
+    
+    private BigDecimal cloudTeacherAmount;
+    
+    private BigDecimal maintenanceAmount;
 
     private BigDecimal orderAmount;
 
@@ -113,7 +117,23 @@ public class MusicalListDetailDto {
         this.courseAmount = courseAmount;
     }
 
-    public BigDecimal getOrderAmount() {
+    public BigDecimal getCloudTeacherAmount() {
+		return cloudTeacherAmount;
+	}
+
+	public void setCloudTeacherAmount(BigDecimal cloudTeacherAmount) {
+		this.cloudTeacherAmount = cloudTeacherAmount;
+	}
+
+	public BigDecimal getMaintenanceAmount() {
+		return maintenanceAmount;
+	}
+
+	public void setMaintenanceAmount(BigDecimal maintenanceAmount) {
+		this.maintenanceAmount = maintenanceAmount;
+	}
+
+	public BigDecimal getOrderAmount() {
         return orderAmount;
     }
 

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java

@@ -53,7 +53,7 @@ public interface StudentPaymentOrderService extends BaseService<Long, StudentPay
      * @param status
      * @return
      */
-    StudentPaymentOrder findMusicGroupApplyOrderByStatus(Integer userId, String musicGroupId, DealStatusEnum status);
+    List<StudentPaymentOrder> findMusicGroupApplyOrderByStatus(Integer userId, String musicGroupId, DealStatusEnum status);
 
     /**
      * 根据orderNo查询订单

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

@@ -667,121 +667,9 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 
 	@Override
 	public boolean transferGoodsContract(Integer userId, String musicGroupId, String goodsIds, KitGroupPurchaseTypeEnum kitGroupPurchaseTypeEnum) {
-		if(true){
-			return transferProduceContract(userId, musicGroupId);
-		}
-
-		SysUserTsign sysUserTsign = sysUserTsignService.get(userId);
-
-		if (sysUserTsign == null) {
-			SysUser user = sysUserFeignService.queryUserById(userId);
-			if (user == null) {
-				throw new BizException("用户信息查询失败");
-			}
-			sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
-		}
-		Date date = new Date();
-
-		// 合成freemarker
-		String srcPdfPath = contractBaseDir + "/goods/" + dateFormat1.format(date) + "/" + userId + ".pdf";
-
-		File srcFile = new File(srcPdfPath);
-
-		File debtFile = new File(srcFile.getParent());
-		if (!debtFile.exists()) {
-			debtFile.mkdirs();
-		}
-
-		FreemarkerTemplateEngine templateEngine = FreemarkerTemplateEngine.getInstance();
-		templateEngine.setClassForTemplateLoading(ContractServiceImpl.class, "/config/contracts/");
-
-		Map<String, Object> params = new HashMap<String, Object>();
-
-		// 查询参数信息
-		StudentInfo studentInfo = studentRegistrationService.queryStudentInfo(userId);
-
-		int subjectId = studentInfo.getSubject().getId();
-
-		Subject subject = subjectService.get(subjectId);
-		studentInfo.setSubject(subject);
-
-		params.put("studentInfo", studentInfo);
-
-		List<Goods> goodsList = goodsService.findGoodsByIds(goodsIds);
-		params.put("goodsList", goodsList);
-
-		double depositFee = 0d;
-		if (kitGroupPurchaseTypeEnum == KitGroupPurchaseTypeEnum.LEASE) {
-			StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, musicGroupId, DealStatusEnum.SUCCESS);
-
-			if (studentPaymentOrder == null) {
-				MusicGroupSubjectGoodsGroup musicGroupSubjectPlan = musicGroupSubjectGoodsGroupService.query(musicGroupId, subjectId, goodsIds);
-				if (musicGroupSubjectPlan != null) {
-					depositFee = musicGroupSubjectPlan.getDepositFee().doubleValue();
-				}
-			} else {
-
-				List<StudentPaymentOrderDetail> orderDetailList = studentPaymentOrderDetailDao.findApplyOrderGoods(studentPaymentOrder.getId());
-				for (StudentPaymentOrderDetail detail : orderDetailList) {
-					if (detail.getType() == OrderDetailTypeEnum.MUSICAL) {
-						depositFee = detail.getPrice().doubleValue();
-					}
-				}
-			}
-		}
-		params.put("depositFee", depositFee);
-		params.put("depositFeeFmt", MoneyUtil.toChinese(depositFee + ""));
-
-		params.put("isShowVisualSeal", false);
-
-		MusicGroup musicGroup = musicGroupService.get(musicGroupId);
-		if (musicGroup == null) {
-			throw new BizException("乐团信息没找到");
-		}
-
-		params.put("ownershipType", musicGroup.getOwnershipType().name());
-
-		templateEngine.render(params, "goods.ftl", srcFile);
-
-		// 生成借款协议PDF
-		try {
-			PDFUtil.renderToPDFByData(ContractServiceImpl.class.getResource("/").getFile(), FileUtils.readFileToString(srcFile), srcPdfPath, "simsun.ttc");
-		} catch (IOException e) {
-			throw new BizException("生成pdf协议失败", e);
-		}
-		String organCode = "";
-		if (musicGroup.getOwnershipType() == OwnershipType.OWN) {
-			organCode = "91440300326364429H";
-		} else {
-			organCode = "91420106333619290A";
-		}
-		SysUserTsign organTsign = sysUserTsignService.queryByCardNo(organCode);
-		if (organTsign == null) {
-			throw new BizException("甲方未创建签章");
-		}
-
-		eSealPlugin.organSign(organTsign.getSealData(), srcPdfPath, srcPdfPath);
-
-		if (sysUserTsign != null) {
-			eSealPlugin.userSign(sysUserTsign.getAccountId(), sysUserTsign.getSealData(), srcPdfPath, srcPdfPath);
-		}
-
-		// 上传到oss
-		String dateStrOss = dateFormatOss.format(date);
-		dateStrOss = "goods/" + dateStrOss + "/" + DateUtil.getHour(date);
-		String pdfFilePath = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, dateStrOss, srcFile);
-
-		SysUserContracts sysUserContracts = new SysUserContracts();
-		sysUserContracts.setCreateTime(date);
-		sysUserContracts.setType(ContractType.INSTRUMENT);
-		sysUserContracts.setUrl(pdfFilePath);
-		sysUserContracts.setUserId(userId);
-
-		sysUserContractsService.insert(sysUserContracts);
-
-		FileUtils.deleteQuietly(srcFile);
+			
+		return transferProduceContract(userId, musicGroupId);
 
-		return true;
 	}
 
 	@Override

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

@@ -801,10 +801,15 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         BigDecimal courseFee = musicOneSubjectClassPlan.getFee() == null ? BigDecimal.ZERO : musicOneSubjectClassPlan.getFee();
         orderAmount = orderAmount.add(courseFee);
 
-        BigDecimal remitFee = BigDecimal.ZERO;
+        BigDecimal remitFee = BigDecimal.ZERO; //乐器减免金额
         BigDecimal courseRemitFee = BigDecimal.ZERO; //课程减免费用
         boolean remitCourseRFeeFlag = false; //减免课程费用标识
 
+        MusicGroup musicGroup = musicGroupDao.get(studentRegistration.getMusicGroupId());
+        if(musicGroup == null){
+        	throw new BizException("查询乐团信息失败");
+        }
+
         //乐器及打包辅件
         List<MusicGroupSubjectGoodsGroup> goodsGroups = new ArrayList<>();
         if (registerPayDto.getGoodsGroups() != null && registerPayDto.getGoodsGroups().size() > 0) {
@@ -828,8 +833,15 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 goodsGroup.setKitGroupPurchaseType(KitGroupPurchaseTypeEnum.valueOf(kitGroupPurchaseType));
                 remitFee = groupType.get(kitGroupPurchaseType) == null ? BigDecimal.ZERO : groupType.get(kitGroupPurchaseType);
             }
-            orderAmount = orderAmount.add(goodsGroup.getPrice());
             goodsGroup.setGoodsList(goodsService.findGoodsByIds(goodsGroup.getGoodsIdList()));
+            
+            if(goodsGroup.getType().equals(GoodsType.ACCESSORIES)){
+            	if((registerPayDto.getBuyCloudTeacher() || registerPayDto.getBuyCloudTeacherPlus()) && musicGroup.getCourseViewType() == CourseViewTypeEnum.MEMBER_FEE){
+            		goodsGroup.setPrice(BigDecimal.ZERO);
+            		continue;
+            	}
+            }
+            orderAmount = orderAmount.add(goodsGroup.getPrice());
         }
         orderAmount = orderAmount.subtract(remitFee);
 
@@ -850,8 +862,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             BigDecimal maintenancePrice = new BigDecimal(sysConfigDao.findConfigValue("maintenance_price"));
             orderAmount = orderAmount.add(maintenancePrice);
         }
-
-        MusicGroup musicGroup = musicGroupDao.get(studentRegistration.getMusicGroupId());
         
         studentRegistration.setMusicGroupPaymentCalenderId(musicGroupRegCalender.getId());
         studentRegistration.setOrganId(musicGroup.getOrganId());
@@ -1012,7 +1022,14 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         Integer userId = studentRegistration.getUserId();
 
-        StudentPaymentOrder applyOrder = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, studentRegistration.getMusicGroupId(), DealStatusEnum.ING);
+        List<StudentPaymentOrder> applyOrderList = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, studentRegistration.getMusicGroupId(), DealStatusEnum.ING);
+        
+        StudentPaymentOrder applyOrder = null;
+        
+        if(applyOrderList != null && applyOrderList.size() > 0){
+        	applyOrder = applyOrderList.get(0);
+        }
+        
         if (applyOrder == null) {
             throw new BizException("没有支付中订单,请在我的订单中查看订单状态");
         }
@@ -1049,6 +1066,10 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         BigDecimal courseRemitFee = BigDecimal.ZERO; //课程减免费用
         boolean remitCourseRFeeFlag = false; //减免课程费用标识
 
+        MusicGroup musicGroup = musicGroupDao.get(studentRegistration.getMusicGroupId());
+        if(musicGroup == null){
+        	throw new BizException("查询乐团信息失败");
+        }
 
         //乐器及打包辅件
         List<MusicGroupSubjectGoodsGroup> goodsGroups = new ArrayList<>();
@@ -1073,8 +1094,15 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 goodsGroup.setKitGroupPurchaseType(KitGroupPurchaseTypeEnum.valueOf(kitGroupPurchaseType));
                 remitFee = groupType.get(kitGroupPurchaseType) == null ? BigDecimal.ZERO : groupType.get(kitGroupPurchaseType);
             }
-            orderAmount = orderAmount.add(goodsGroup.getPrice());
             goodsGroup.setGoodsList(goodsService.findGoodsByIds(goodsGroup.getGoodsIdList()));
+            
+            if(goodsGroup.getType().equals(GoodsType.ACCESSORIES)){
+            	if((registerPayDto.getBuyCloudTeacher() || registerPayDto.getBuyCloudTeacherPlus()) && musicGroup.getCourseViewType() == CourseViewTypeEnum.MEMBER_FEE){
+            		goodsGroup.setPrice(BigDecimal.ZERO);
+            		continue;
+            	}
+            }
+            orderAmount = orderAmount.add(goodsGroup.getPrice());
         }
 
         //新课程形态
@@ -1095,8 +1123,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             orderAmount = orderAmount.add(maintenancePrice);
         }
 
-        MusicGroup musicGroup = musicGroupDao.get(studentRegistration.getMusicGroupId());
-        
         studentRegistration.setMusicGroupPaymentCalenderId(musicGroupRegCalender.getId());
         studentRegistration.setOrganId(musicGroup.getOrganId());
         studentRegistration.setPayingStatus(1);
@@ -2219,10 +2245,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             
             if (studentRegistration.getMusicGroupPaymentCalenderId() == null) {
     			if(currentStudentMusicGroupStatus == StudentMusicGroupStatusEnum.NORMAL || (currentStudentMusicGroupStatus == StudentMusicGroupStatusEnum.APPLY && studentRegistration.getPaymentStatus() == PaymentStatusEnum.YES)){
-    				StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, musicGroupId, SUCCESS);
-    				if (studentPaymentOrder != null) {
-    					studentPaymentOrderList.add(studentPaymentOrder);
-    				}
+    				studentPaymentOrderList = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, musicGroupId, SUCCESS);
     			}
     			
     		} else {
@@ -2545,10 +2568,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         
 		if (studentRegistration.getMusicGroupPaymentCalenderId() == null) {
 			if(currentStudentMusicGroupStatus == StudentMusicGroupStatusEnum.NORMAL || (currentStudentMusicGroupStatus == StudentMusicGroupStatusEnum.APPLY && studentRegistration.getPaymentStatus() == PaymentStatusEnum.YES)){
-				StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, musicGroupId, SUCCESS);
-				if (studentPaymentOrder != null) {
-					studentPaymentOrderList.add(studentPaymentOrder);
-				}
+				studentPaymentOrderList = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, musicGroupId, SUCCESS);
 			}
 			
 		} else {

+ 111 - 58
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderDetailServiceImpl.java

@@ -309,11 +309,7 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
         	List<StudentPaymentOrder> studentPaymentOrderList = new ArrayList<StudentPaymentOrder>();
 
 			if (studentRegistration.getMusicGroupPaymentCalenderId() == null) {
-				StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, musicGroupId, SUCCESS);
-				if (studentPaymentOrder != null) {
-					studentPaymentOrderList.add(studentPaymentOrder);
-				}
-
+				studentPaymentOrderList = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, musicGroupId, SUCCESS);
 			} else {
 				studentPaymentOrderList = studentPaymentOrderService.queryByBatchNo(userId, studentRegistration.getMusicGroupPaymentCalenderId() + "",
 						DealStatusEnum.SUCCESS);
@@ -321,19 +317,31 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
 
 			List<Long> paymentOrderIdList = studentPaymentOrderList.stream().map(t -> t.getId()).collect(Collectors.toList());
 			
-			Long minPaymentOrderId = Collections.min(paymentOrderIdList);
-
-			List<StudentPaymentOrderDetail> orderDetailList = studentPaymentOrderDetailDao.getWithIds(paymentOrderIdList);
+			subjectChange = subjectChangeMap.get(studentRegistration.getUserId());
+			
+			if((paymentOrderIdList == null || paymentOrderIdList.size() == 0) && subjectChange == null){
+				continue;
+			}
+			
+			List<StudentPaymentOrderDetail> orderDetailList = new ArrayList<StudentPaymentOrderDetail>();
+			
+			if(paymentOrderIdList != null && paymentOrderIdList.size() > 0) {
+				orderDetailList = studentPaymentOrderDetailDao.getWithIds(paymentOrderIdList);
+			}
 			
 			Map<OrderDetailTypeEnum,BigDecimal> userOrderTypeMap = new HashMap<OrderDetailTypeEnum, BigDecimal>();;
 			
 			BigDecimal amount = BigDecimal.ZERO;
 			KitGroupPurchaseTypeEnum kitGroupPurchaseType = null;
-			String goodsId = null ,accessoriesId = null ;
+			String musicalId = null;
+			StringBuffer accessoriesId = new StringBuffer();
 			BigDecimal orderTotalAmount = BigDecimal.ZERO;
-			BigDecimal withoutMusicalTotalAmount = BigDecimal.ZERO;
 			
-			for(StudentPaymentOrderDetail spod : orderDetailList){
+			boolean isCalculatedOfAccessories = false;
+			boolean isChangeMusical = false;
+			boolean isChangeAccessories = false;
+			
+			for(StudentPaymentOrderDetail spod : orderDetailList) {
 				
 				if (spod.getType() == OrderDetailTypeEnum.COURSE || spod.getType() == OrderDetailTypeEnum.HIGH_ONLINE_COURSE
 						|| spod.getType() == OrderDetailTypeEnum.SINGLE || spod.getType() == OrderDetailTypeEnum.VIP
@@ -343,14 +351,37 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
 						|| spod.getType() == OrderDetailTypeEnum.TRAINING_MIX || spod.getType() == OrderDetailTypeEnum.HIGH_ONLINE
 						|| spod.getType() == OrderDetailTypeEnum.MUSIC_NETWORK || spod.getType() == OrderDetailTypeEnum.CLASSROOM || spod.getType() == OrderDetailTypeEnum.THEORY_COURSE) {
 					spod.setType(OrderDetailTypeEnum.COURSE);
-					withoutMusicalTotalAmount = withoutMusicalTotalAmount.add(spod.getPrice().subtract(spod.getRemitFee()));
+					//courseAmount = courseAmount.add(spod.getPrice().subtract(spod.getRemitFee()));
 				}else if(spod.getType() == OrderDetailTypeEnum.MUSICAL){
-					kitGroupPurchaseType = spod.getKitGroupPurchaseType();
-					goodsId = spod.getGoodsIdList();
+					if(subjectChange != null && spod.getPaymentOrderId() <= subjectChange.getOriginalOrderId()) {
+						if(subjectChange.getChangeMusical() == null){
+							continue;
+						}
+						kitGroupPurchaseType = subjectChange.getKitGroupPurchaseType();
+						musicalId = subjectChange.getChangeMusical() + "";
+						spod.setPrice(subjectChange.getChangeMusicalPrice());
+						spod.setRemitFee(BigDecimal.ZERO);
+						isChangeMusical = true;
+		        	} else {
+						kitGroupPurchaseType = spod.getKitGroupPurchaseType();
+						musicalId = spod.getGoodsIdList();
+						//musicalAmount = musicalAmount.add(spod.getPrice());
+		        	}
 				}else if(spod.getType() == OrderDetailTypeEnum.ACCESSORIES){
-					accessoriesId = spod.getGoodsIdList();
-				}else{
-					withoutMusicalTotalAmount = withoutMusicalTotalAmount.add(spod.getPrice().subtract(spod.getRemitFee()));
+					if(subjectChange != null && (subjectChange.getOriginalOrderId() != null && spod.getPaymentOrderId() <= subjectChange.getOriginalOrderId())) {
+						if(StringUtils.isBlank(subjectChange.getChangeAccessories()) || isCalculatedOfAccessories == true){
+							continue;
+						}
+						isCalculatedOfAccessories = true;
+						accessoriesId = accessoriesId.append(subjectChange.getChangeAccessories()).append(",");
+						//accessoriesAmount = accessoriesAmount.add(subjectChange.getChangeAccessoriesPrice());
+						spod.setPrice(subjectChange.getChangeAccessoriesPrice());
+						spod.setRemitFee(BigDecimal.ZERO);
+						isChangeAccessories = true;
+		        	}else{
+						accessoriesId = accessoriesId.append(spod.getGoodsIdList()).append(",");
+						//accessoriesAmount = accessoriesAmount.add(spod.getPrice());
+		        	}
 				}
 				
 				amount = userOrderTypeMap.get(spod.getType());
@@ -363,49 +394,71 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
 				
 				orderTotalAmount = orderTotalAmount.add(spod.getPrice().subtract(spod.getRemitFee()));
 			}
+			
+			if(orderDetailList.size() == 0) {
+				if(subjectChange != null){
+					if(subjectChange.getChangeMusical() != null){
+						kitGroupPurchaseType = subjectChange.getKitGroupPurchaseType();
+						musicalId = subjectChange.getChangeMusical() + "";
+						userOrderTypeMap.put(OrderDetailTypeEnum.MUSICAL, subjectChange.getChangeMusicalPrice());
+						orderTotalAmount = orderTotalAmount.add(subjectChange.getChangeMusicalPrice());
+					}
+					if(StringUtils.isNotBlank(subjectChange.getChangeAccessories())) {
+						accessoriesId = accessoriesId.append(subjectChange.getChangeAccessories()).append(",");
+						userOrderTypeMap.put(OrderDetailTypeEnum.ACCESSORIES, subjectChange.getChangeAccessoriesPrice());
+						orderTotalAmount = orderTotalAmount.add(subjectChange.getChangeAccessoriesPrice());
+		        	}
+				}
+			}else if(isChangeAccessories == false || isChangeMusical == false){
+				if(subjectChange != null){
+					if(subjectChange.getChangeMusical() != null && isChangeMusical == false){
+						kitGroupPurchaseType = subjectChange.getKitGroupPurchaseType();
+						musicalId = subjectChange.getChangeMusical() + "";
+						userOrderTypeMap.put(OrderDetailTypeEnum.MUSICAL, subjectChange.getChangeMusicalPrice());
+						orderTotalAmount = orderTotalAmount.add(subjectChange.getChangeMusicalPrice());
+					}
+					if(StringUtils.isNotBlank(subjectChange.getChangeAccessories()) && isChangeAccessories == false) {
+						accessoriesId = accessoriesId.append(subjectChange.getChangeAccessories()).append(",");
+						userOrderTypeMap.put(OrderDetailTypeEnum.ACCESSORIES, subjectChange.getChangeAccessoriesPrice());
+						orderTotalAmount = orderTotalAmount.add(subjectChange.getChangeAccessoriesPrice());
+		        	}
+				}
+			}
         	
-        	subjectChange = subjectChangeMap.get(studentRegistration.getUserId());
-        	if(subjectChange != null && minPaymentOrderId <= subjectChange.getOriginalOrderId()){
-        		dto.setAccessoriesAmount(subjectChange.getChangeAccessoriesPrice());
-        		if(subjectChange.getChangeAccessoriesGoods() != null){
-        			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());
-        		if(subjectChange.getChangeMusicalGoods() != null){
-        			dto.setMusicalName(subjectChange.getChangeMusicalGoods().getName());
-        		}
-        		dto.setMusicGroupName(musicGroup.getName());
-        		dto.setOrganName(organization.getName());
-        		dto.setOrderAmount(withoutMusicalTotalAmount.add(subjectChange.getChangeMusicalPrice().add(subjectChange.getChangeAccessoriesPrice())));
-        		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.setAccessoriesAmount(userOrderTypeMap.get(OrderDetailTypeEnum.ACCESSORIES));
+			dto.setCourseAmount(userOrderTypeMap.get(OrderDetailTypeEnum.COURSE));
+    		dto.setMusicalAmount(userOrderTypeMap.get(OrderDetailTypeEnum.MUSICAL));
+    		dto.setMaintenanceAmount(userOrderTypeMap.get(OrderDetailTypeEnum.MAINTENANCE));
+			dto.setCloudTeacherAmount(userOrderTypeMap.get(OrderDetailTypeEnum.CLOUD_TEACHER) == null ? userOrderTypeMap
+					.get(OrderDetailTypeEnum.CLOUD_TEACHER_PLUS) : userOrderTypeMap.get(OrderDetailTypeEnum.CLOUD_TEACHER));
+			
+			if (StringUtils.isNoneBlank(accessoriesId.toString())) {
+				String accessoriesIdList = StringUtils.removeEnd(accessoriesId.toString(), ",");
+				Map<Integer, Goods> goodsMap = goodsService.findGoodsByIds(accessoriesIdList).stream().collect(Collectors.toMap(Goods::getId, Goods -> Goods));
+
+				String[] accessoriesIds = StringUtils.split(accessoriesIdList, ',');
+
+				StringBuffer sb = new StringBuffer();
+				for (String s : accessoriesIds) {
+					if(StringUtils.isBlank(s)){
+						continue;
+					}
+					sb.append(goodsMap.get(Integer.parseInt(s)).getName()).append(",");
+				}
+				dto.setAccessoriesName(StringUtils.removeEnd(sb.toString(), ","));
+			}
+			
+    		if(StringUtils.isNoneBlank(musicalId)){
+    			dto.setMusicalName(goodsService.findGoodsByIds(musicalId).stream().map(Goods::getName).collect(Collectors.joining(",")));
+    		}
+    		dto.setKitGroupPurchaseTypeEnum(kitGroupPurchaseType);
+    		dto.setMusicGroupName(musicGroup.getName());
+    		dto.setOrganName(organization.getName());
+    		dto.setOrderAmount(orderTotalAmount);
+    		dto.setUserId(userId);
+    		dto.setSubjectName(userSubjectMap.get(userId));
+    		dto.setUsername(usernameMap.get(userId));
     		
-        		//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(orderTotalAmount);
-        		dto.setUserId(userId);
-        		dto.setSubjectName(userSubjectMap.get(userId));
-        		dto.setUsername(usernameMap.get(userId));
-        	}
         	musicalListDetailDtos.add(dto);
         }
     	

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -185,7 +185,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     }
 
     @Override
-    public StudentPaymentOrder findMusicGroupApplyOrderByStatus(Integer userId, String musicGroupId, DealStatusEnum status) {
+    public List<StudentPaymentOrder> findMusicGroupApplyOrderByStatus(Integer userId, String musicGroupId, DealStatusEnum status) {
         return studentPaymentOrderDao.findMusicGroupApplyOrderByStatus(userId, musicGroupId, status);
     }
 

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

@@ -352,7 +352,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 			StudentPaymentOrderDetail spod = null;
 			while (iterator.hasNext()) {
 				spod = iterator.next();
-				if (spod.getType() == OrderDetailTypeEnum.ACCESSORIES || spod.getType() == OrderDetailTypeEnum.MUSICAL) {
+				if ((spod.getType() == OrderDetailTypeEnum.ACCESSORIES || spod.getType() == OrderDetailTypeEnum.MUSICAL) && (studentLastChange.getOriginalOrderId() != null && spod.getPaymentOrderId() <= studentLastChange.getOriginalOrderId())) {
 					iterator.remove();
 				}
 			}
@@ -364,7 +364,9 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 				if (goods != null && goods.size() > 0) {
 					detail.setName(goods.stream().map(t -> t.getName()).collect(Collectors.joining(",")));
 				}
-				detail.setPaymentOrderId((long) studentLastChange.getOriginalOrderId());
+				if(studentLastChange.getOriginalOrderId() != null){
+					detail.setPaymentOrderId((long) studentLastChange.getOriginalOrderId());
+				}
 				detail.setPrice(studentLastChange.getChangeAccessoriesPrice());
 				detail.setType(OrderDetailTypeEnum.ACCESSORIES);
 				detail.setCreateTime(studentLastChange.getCreateTime());

+ 33 - 21
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SubjectChangeServiceImpl.java

@@ -391,7 +391,8 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         SubjectChange subjectChange = new SubjectChange();
         SubjectChange studentLastChange = subjectChangeDao.getStudentLastChange(studentId, musicGroupId);
         if (studentLastChange != null) {
-        	List<Long> orderIdList = new ArrayList<Long>();
+        	throw new BizException("声部更换只能操作一次,请勿重复操作");
+        	/*List<Long> orderIdList = new ArrayList<Long>();
         	orderIdList.add(studentLastChange.getOrderId().longValue());
         	Set<Integer> refundSellOrderGoodsIds = getRefundGoodsId(orderIdList);
             subjectChange.setStudentId(studentLastChange.getStudentId());
@@ -426,7 +427,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
                 }
             }
             subjectChange.setOriginalCost(originalCost);
-            return subjectChange;
+            return subjectChange;*/
         }
         //2.1不存在历史的更换
         StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(studentId, musicGroupId);
@@ -438,10 +439,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         
 		if (studentRegistration.getMusicGroupPaymentCalenderId() == null) {
 			if(studentRegistration.getMusicGroupStatus() == StudentMusicGroupStatusEnum.NORMAL){
-				StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(studentId, musicGroupId, SUCCESS);
-				if (studentPaymentOrder != null) {
-					studentPaymentOrderList.add(studentPaymentOrder);
-				}
+				studentPaymentOrderList = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(studentId, musicGroupId, SUCCESS);
 			}
 		} else {
 			studentPaymentOrderList = studentPaymentOrderService.queryByBatchNo(studentId, studentRegistration.getMusicGroupPaymentCalenderId() + "",
@@ -456,13 +454,13 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 		}
 
         //查询乐器订单
-        StudentPaymentOrderDetail musicalOrderDetail =null, accessoriesOrderDetail = null;
+        Long paymentOrderId = null;
         		
         for(StudentPaymentOrderDetail detail : details){
-        	if(detail.getType() == OrderDetailTypeEnum.ACCESSORIES){
-        		accessoriesOrderDetail = detail;
-        	}else if(detail.getType() == OrderDetailTypeEnum.MUSICAL){
-        		musicalOrderDetail = detail;
+        	if(detail.getType() == OrderDetailTypeEnum.ACCESSORIES || detail.getType() == OrderDetailTypeEnum.MUSICAL){
+	        	if(paymentOrderId == null || paymentOrderId < detail.getPaymentOrderId()){
+	    			paymentOrderId = detail.getPaymentOrderId();
+	    		}
         	}
         }
 
@@ -476,11 +474,11 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         subjectChange.setOrganId(musicGroup.getOrganId());
         subjectChange.setCooperationOrganId(musicGroup.getCooperationOrganId());
         subjectChange.setMusicGroupId(musicGroupId);
-		if (musicalOrderDetail != null) {
-			subjectChange.setOrderId(musicalOrderDetail.getPaymentOrderId().intValue());
-		} else if (accessoriesOrderDetail != null) {
-			subjectChange.setOrderId(accessoriesOrderDetail.getPaymentOrderId().intValue());
-		}
+
+        if(paymentOrderId != null){
+        	subjectChange.setOrderId(paymentOrderId.intValue());
+        }
+		
         String accessoriesIds = "";
         BigDecimal accessoriesPrice = BigDecimal.ZERO;
         for (StudentPaymentOrderDetail detail : details) {
@@ -494,7 +492,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
                     subjectChange.setOriginalMusicalGoods(goodsDao.get(goodsId));
                     subjectChange.setOriginalMusicalPrice(detail.getPrice());
                 }
-            } else {
+            } else if (detail.getType().equals(OrderDetailTypeEnum.ACCESSORIES)){
                 if (StringUtils.isNotBlank(detail.getGoodsIdList())) {
                     accessoriesPrice = accessoriesPrice.add(detail.getPrice());
                     accessoriesIds = accessoriesIds.length() > 0 ? accessoriesIds + "," + detail.getGoodsIdList() : detail.getGoodsIdList();
@@ -512,10 +510,24 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
             }
 
             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);
+            
+            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)));
+			}
+            
+            //BigDecimal price = accessoriesGoods.stream().map(Goods::getGroupPurchasePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+            subjectChange.setOriginalAccessoriesPrice(accessoriesPrice);
         }
         //2.2 计算销售成本
         BigDecimal orderSellCost = BigDecimal.ZERO;

+ 1 - 2
mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml

@@ -444,7 +444,6 @@
           AND type_ = 'APPLY'
           AND status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
         ORDER BY id_ DESC
-        LIMIT 1
     </select>
     
     <select id="queryByBatchNo" resultMap="StudentPaymentOrder" parameterType="map">
@@ -987,7 +986,7 @@
 		(
 		SELECT * FROM subject_change WHERE id_ in
 		(SELECT max(sc.id_) id_ from subject_change sc WHERE sc.status_ = 2 GROUP BY music_group_id_,student_id_ ORDER BY id_ desc)
-		) a on spo.music_group_id_ = a.music_group_id_ and spo.user_id_ = a.student_id_
+		) a on spo.music_group_id_ = a.music_group_id_ and spo.id_ = a.original_order_id_
 		WHERE spo.music_group_id_ IN
         <foreach collection="musicGroupIds" item="musicGroupId" open="(" close=")" separator=",">
             #{musicGroupId}

+ 12 - 15
mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java

@@ -183,22 +183,14 @@ public class MusicGroupController extends BaseController {
         	List<OrderDetailTypeEnum> typeList = studentPaymentOrderDetailList.stream().map(t -> t.getType()).collect(Collectors.toList());
         	//判断是否所有类型都购买完
 			if (musicGroup.getCourseViewType() == CourseViewTypeEnum.MEMBER_FEE) {
-				if ((typeList.contains(OrderDetailTypeEnum.MUSICAL) || typeList.contains(OrderDetailTypeEnum.ACCESSORIES))
-						&& typeList.contains(OrderDetailTypeEnum.CLOUD_TEACHER)
-						&& (typeList.contains(OrderDetailTypeEnum.COURSE)
-								|| typeList.contains(OrderDetailTypeEnum.HIGH_ONLINE_COURSE) || typeList.contains(OrderDetailTypeEnum.SINGLE)
-								|| typeList.contains(OrderDetailTypeEnum.MIX) || typeList.contains(OrderDetailTypeEnum.HIGH)
-								|| typeList.contains(OrderDetailTypeEnum.VIP) || typeList.contains(OrderDetailTypeEnum.DEMO)
-								|| typeList.contains(OrderDetailTypeEnum.COMPREHENSIVE) || typeList.contains(OrderDetailTypeEnum.ENLIGHTENMENT)
-								|| typeList.contains(OrderDetailTypeEnum.TRAINING_SINGLE) || typeList.contains(OrderDetailTypeEnum.TRAINING_MIX)
-								|| typeList.contains(OrderDetailTypeEnum.HIGH_ONLINE) || typeList.contains(OrderDetailTypeEnum.MUSIC_NETWORK) || typeList
-									.contains(OrderDetailTypeEnum.CLASSROOM))) {
+				if (typeList.contains(OrderDetailTypeEnum.MUSICAL) && typeList.contains(OrderDetailTypeEnum.ACCESSORIES)
+						&& (typeList.contains(OrderDetailTypeEnum.CLOUD_TEACHER) || typeList.contains(OrderDetailTypeEnum.CLOUD_TEACHER_PLUS))) {
 					return failed(HttpStatus.PROCESSING, "您已缴费,请等待乐团开启");
 				}
 			} else {
 				if (typeList.contains(OrderDetailTypeEnum.MUSICAL)
 						&& typeList.contains(OrderDetailTypeEnum.ACCESSORIES)
-						&& (typeList.contains(OrderDetailTypeEnum.CLOUD_TEACHER) || typeList.contains(OrderDetailTypeEnum.COURSE)
+						&& (typeList.contains(OrderDetailTypeEnum.CLOUD_TEACHER) || typeList.contains(OrderDetailTypeEnum.CLOUD_TEACHER_PLUS) || typeList.contains(OrderDetailTypeEnum.COURSE)
 								|| typeList.contains(OrderDetailTypeEnum.HIGH_ONLINE_COURSE) || typeList.contains(OrderDetailTypeEnum.SINGLE)
 								|| typeList.contains(OrderDetailTypeEnum.MIX) || typeList.contains(OrderDetailTypeEnum.HIGH)
 								|| typeList.contains(OrderDetailTypeEnum.VIP) || typeList.contains(OrderDetailTypeEnum.DEMO)
@@ -328,8 +320,12 @@ public class MusicGroupController extends BaseController {
         Integer userId = studentRegistration.getUserId();
 
         //判断用户是否已存在订单
-        StudentPaymentOrder applyOrder = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, studentRegistration.getMusicGroupId(), DealStatusEnum.ING);
-        return succeed(applyOrder);
+        List<StudentPaymentOrder> applyOrderList = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, studentRegistration.getMusicGroupId(), DealStatusEnum.ING);
+        
+        if(applyOrderList != null && applyOrderList.size() > 0){
+        	return succeed(applyOrderList.get(0));
+        }
+        return succeed(null);
     }
 
     @ApiOperation(value = "乐团报名支付")
@@ -354,9 +350,10 @@ public class MusicGroupController extends BaseController {
             return failed("您已支付成功,请勿重复支付");
         }*/
         //判断用户是否已存在订单
-        StudentPaymentOrder applyOrder = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, studentRegistration.getMusicGroupId(), DealStatusEnum.ING);
+        List<StudentPaymentOrder> applyOrderList = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, studentRegistration.getMusicGroupId(), DealStatusEnum.ING);
         
-        if (applyOrder != null) {
+        if (applyOrderList != null && applyOrderList.size() > 0) {
+        	StudentPaymentOrder applyOrder = applyOrderList.get(0);
         	// 查询订单状态
             PayStatus payStatus = studentPaymentOrderService.queryPayStatus(applyOrder.getPaymentChannel(), applyOrder.getOrderNo(), applyOrder.getTransNo());
             if(payStatus == PayStatus.SUCCESSED){

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

@@ -1258,8 +1258,8 @@ public class ExportController extends BaseController {
         }
         OutputStream outputStream = response.getOutputStream();
         try {
-            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "乐团", "学员编号", "学员姓名", "声部", "购买乐器", "乐器采购方式", "乐器金额", "购买教辅", "教辅金额", "课程金额", "订单总价"}, new String[]{
-                    "organName", "musicGroupName", "userId", "username", "subjectName", "musicalName", "kitGroupPurchaseTypeEnum.msg", "musicalAmount", "accessoriesName", "accessoriesAmount", "courseAmount", "orderAmount"}, musicalList);
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "乐团", "学员编号", "学员姓名", "声部", "购买乐器", "乐器采购方式", "乐器金额", "购买教辅", "教辅金额", "课程金额", "云教练金额", "乐保金额", "订单总价"}, new String[]{
+                    "organName", "musicGroupName", "userId", "username", "subjectName", "musicalName", "kitGroupPurchaseTypeEnum.msg", "musicalAmount", "accessoriesName", "accessoriesAmount", "courseAmount", "cloudTeacherAmount", "maintenanceAmount", "orderAmount"}, musicalList);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
             response.flushBuffer();