Browse Source

Merge remote-tracking branch 'origin/master_saas' into master_saas

yuanliang 2 years ago
parent
commit
9756e632c1
87 changed files with 3217 additions and 1085 deletions
  1. 1 1
      audio-analysis/src/main/java/com/yonge/netty/dto/HardLevelEnum.java
  2. 53 26
      audio-analysis/src/main/java/com/yonge/netty/dto/UserChannelContext.java
  3. 14 3
      audio-analysis/src/main/java/com/yonge/netty/dto/WebSocketResponse.java
  4. 13 7
      audio-analysis/src/main/java/com/yonge/netty/server/handler/NettyServerHandler.java
  5. 8 8
      audio-analysis/src/main/java/com/yonge/netty/server/service/AudioCompareHandler.java
  6. 268 0
      audio-analysis/src/main/java/com/yonge/netty/server/service/DelayCheckHandler.java
  7. 1 1
      audio-analysis/src/main/java/com/yonge/netty/server/service/PitchDetectionHandler.java
  8. 1 1
      audio-analysis/src/main/resources/logback-spring.xml
  9. 2 2
      audio-analysis/src/test/java/com/yonge/netty/client/NettyClient.java
  10. 0 0
      audio-analysis/src/test/resoures/9550.json
  11. BIN
      audio-analysis/src/test/resoures/9550.wav
  12. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/config/AdapayNotifyConstants.java
  13. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  14. 4 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/HfMemberDao.java
  15. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/HfMerchantConfigDao.java
  16. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java
  17. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java
  18. 9 9
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicScoreSubjectDto.java
  19. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PaymentParam.java
  20. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupBuyParamsDto.java
  21. 51 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/YeepayMember.java
  22. 46 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/AppVersionInfoBak.java
  23. 89 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/HfMember.java
  24. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPaymentOrder.java
  25. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/PaymentChannelEnum.java
  26. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/HfMemberQueryInfo.java
  27. 49 3
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  28. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/service/HfMemberService.java
  29. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/HfMerchantConfigService.java
  30. 7 4
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java
  31. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java
  32. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysPaymentConfigService.java
  33. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ChildrenDayReserveServiceImpl.java
  34. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  35. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java
  36. 486 484
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  37. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CoursesGroupServiceImpl.java
  38. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/DegreeRegistrationServiceImpl.java
  39. 7 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java
  40. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesServiceImpl.java
  41. 113 42
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/HfMemberServiceImpl.java
  42. 11 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/HfMerchantConfigServiceImpl.java
  43. 35 36
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java
  44. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java
  45. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  46. 95 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrderPayOpsServiceImpl.java
  47. 135 75
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java
  48. 5 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  49. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ReplacementInstrumentActivityServiceImpl.java
  50. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentInstrumentServiceImpl.java
  51. 300 91
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  52. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRechargeServiceImpl.java
  53. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java
  54. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SubjectChangeServiceImpl.java
  55. 27 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysPaymentConfigServiceImpl.java
  56. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  57. 43 27
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantOrderRecordServiceImpl.java
  58. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupActivityServiceImpl.java
  59. 26 25
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  60. 25 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  61. 49 8
      mec-biz/src/main/resources/config/mybatis/HfMemberMapper.xml
  62. 23 4
      mec-biz/src/main/resources/config/mybatis/HfMerchantConfigMapper.xml
  63. 17 29
      mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml
  64. 0 1
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  65. 17 1
      mec-im/src/main/java/com/ym/service/Impl/LiveRoomServiceImpl.java
  66. 18 0
      mec-student/pom.xml
  67. 1 1
      mec-student/src/main/java/com/ym/mec/student/config/ResourceServerConfig.java
  68. 203 59
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  69. 6 3
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherManageController.java
  70. BIN
      mec-thirdparty/libs/yop-java-sdk-3.2.25-jdk18json.jar
  71. 75 22
      mec-thirdparty/pom.xml
  72. 1 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/Payment.java
  73. 40 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/entity/HfMerchantConfig.java
  74. 2 2
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/eseal/provider/TsignPlugin.java
  75. 106 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/YeepayMerchantService.java
  76. 106 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/YeepayPaymentService.java
  77. 41 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/YeepayUploadService.java
  78. 260 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/entity/MerchantInfo.java
  79. 8 0
      mec-web/src/main/java/com/ym/mec/web/controller/AppVersionInfoController.java
  80. 4 18
      mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java
  81. 3 3
      mec-web/src/main/java/com/ym/mec/web/controller/HfMerchantConfigController.java
  82. 21 10
      mec-web/src/main/java/com/ym/mec/web/controller/StudentPaymentOrderController.java
  83. 0 7
      mec-web/src/main/java/com/ym/mec/web/controller/SysPaymentConfigController.java
  84. 11 3
      mec-web/src/main/java/com/ym/mec/web/controller/payment/AdapayController.java
  85. 181 0
      mec-web/src/main/java/com/ym/mec/web/controller/payment/YeepayController.java
  86. 1 1
      mec-web/src/main/resources/bootstrap-local.properties
  87. 2 0
      pom.xml

+ 1 - 1
audio-analysis/src/main/java/com/yonge/netty/dto/HardLevelEnum.java

@@ -22,7 +22,7 @@ public enum HardLevelEnum implements BaseEnum<String, HardLevelEnum> {
 	 * 节奏有效范围(1分音符), 节奏有效范围(2分音符), 节奏有效范围(4分音符), 节奏有效范围(8分音符), 节奏有效范围(16分音符), 节奏有效范围(32分音符)<br>
 	 * 完成度范围, 未演奏的范围
 	 */
-	PERFORMER("大师级", 3, 3, 5, 5, 10, 10, 13, 15, 95, 10);
+	PERFORMER("大师级", 3, 3, 3, 5, 10, 10, 13, 15, 95, 10);
 
 	private String msg;
 

+ 53 - 26
audio-analysis/src/main/java/com/yonge/netty/dto/UserChannelContext.java

@@ -2,6 +2,7 @@ package com.yonge.netty.dto;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
@@ -50,6 +51,8 @@ public class UserChannelContext {
 	
 	private float offsetMS;
 	
+	private float micDelayMS;
+	
 	private double dynamicOffset;
 	
 	private String platform;
@@ -161,6 +164,14 @@ public class UserChannelContext {
 		this.offsetMS = offsetMS;
 	}
 
+	public float getMicDelayMS() {
+		return micDelayMS;
+	}
+
+	public void setMicDelayMS(float micDelayMS) {
+		this.micDelayMS = micDelayMS;
+	}
+
 	public float getBeatDuration() {
 		return beatDuration;
 	}
@@ -377,16 +388,14 @@ public class UserChannelContext {
 			}
 			totalChunkAnalysisList.add(chunkAnalysis);
 			
-			boolean flag = false; //是否收到有效信号
-			if(!StringUtils.equalsIgnoreCase(evaluationCriteria, EvaluationCriteriaEnum.FREQUENCY.getCode())){
-				flag = chunkAnalysis.getAmplitude() > hardLevel.getAmplitudeThreshold();
+			//是否收到有效信号
+			/*if(!StringUtils.equalsIgnoreCase(evaluationCriteria, EvaluationCriteriaEnum.FREQUENCY.getCode())){
+				delayProcessed = chunkAnalysis.getAmplitude() > hardLevel.getAmplitudeThreshold();
 			}else{
-				flag = chunkAnalysis.getFrequency() > MIN_FREQUECY && chunkAnalysis.getFrequency() < MAX_FREQUECY;
+				delayProcessed = chunkAnalysis.getFrequency() > MIN_FREQUECY && chunkAnalysis.getFrequency() < MAX_FREQUECY;
 			}
 			
-			if(delayProcessed == false && flag){
-				
-				delayProcessed = true;
+			if(delayProcessed){
 				
 				//计算延迟偏移值
 				//playTime = musicXmlNote.getTimeStamp() + durationTime;
@@ -394,9 +403,11 @@ public class UserChannelContext {
 				if(100 * dynamicOffset / musicXmlNote.getDuration() > (100 - hardLevel.getTempoEffectiveRange(musicXmlNote.getDenominator(), musicXmlNote.getDuration()))){
 					dynamicOffset = 0;
 				}
-			}
+			}*/
 			
-			if (playTime >= (musicXmlNote.getDuration() + musicXmlNote.getTimeStamp() + dynamicOffset)) {
+			if (playTime >= (musicXmlNote.getDuration() + micDelayMS + musicXmlNote.getTimeStamp() + dynamicOffset)) {
+				
+				musicXmlNote.setTimeStamp(musicXmlNote.getTimeStamp() + micDelayMS);
 
 				if (musicXmlNote.getDontEvaluating()) {
 					noteAnalysis.setIgnore(true);
@@ -732,7 +743,7 @@ public class UserChannelContext {
 		
 		double firstChunkStartTime = firstChunkAnalysis.getStartTime();
 		
-		Optional<ChunkAnalysis> chunkAnalysisOptional = totalChunkAnalysisList.stream().filter(t -> Double.doubleToLongBits(t.getEndTime()) < Double.doubleToLongBits(firstChunkStartTime)).findFirst();
+		Optional<ChunkAnalysis> chunkAnalysisOptional = totalChunkAnalysisList.stream().filter(t -> Double.doubleToLongBits(t.getEndTime()) < Double.doubleToLongBits(firstChunkStartTime)).reduce((first, second) -> second);
 
 		ChunkAnalysis lastChunkAnalysis = null;
 		if (chunkAnalysisOptional.isPresent()) {
@@ -879,6 +890,8 @@ public class UserChannelContext {
 			return false;
 		}
 		
+		reduceNoise(chunkList, EvaluationCriteriaEnum.AMPLITUDE);
+		
 		ChunkAnalysis firstChunkAnalysis = chunkAnalysisList.get(0);
 		
 		LOGGER.debug("-------startTime:{}  endTime:{}------", firstChunkAnalysis.getStartTime(), chunkList.get(chunkList.size() - 1)
@@ -890,18 +903,15 @@ public class UserChannelContext {
 			return chunkList.stream().filter(t -> t.getAmplitude() > hardLevel.getAmplitudeThreshold()).count() <= 0;
 		}
 		
-		//Optional<ChunkAnalysis> chunkAnalysisOptional = totalChunkAnalysisList.stream().filter(t -> Double.doubleToLongBits(t.getEndTime()) < Double.doubleToLongBits(firstChunkAnalysis.getStartTime())).findFirst();
 		Optional<ChunkAnalysis> chunkAnalysisOptional = totalChunkAnalysisList.stream().filter(t -> Double.doubleToLongBits(t.getEndTime()) < Double.doubleToLongBits(firstChunkAnalysis.getStartTime())).reduce((first, second) -> second);
 
-		ChunkAnalysis lastChunkAnalysis = null;
+		ChunkAnalysis lastChunkAnalysis = new ChunkAnalysis(0, 0, -1, 0, 0, 0);;
 		if (chunkAnalysisOptional.isPresent()) {
 			lastChunkAnalysis = chunkAnalysisOptional.get();
 		}
-		if(lastChunkAnalysis == null){
-			lastChunkAnalysis = new ChunkAnalysis(0, 0, -1, 0, 0, 0);
-		}
 		
 		List<Integer> chunkAmplitudeList = chunkList.stream().map(ChunkAnalysis::getAmplitude).collect(Collectors.toList());
+		
 
 		chunkAmplitudeList.add(0, lastChunkAnalysis.getAmplitude());
 		
@@ -913,14 +923,17 @@ public class UserChannelContext {
 		int firstPeakIndex = -1;
 		int firstPeakValue = 0;
 		int peakSize = 0;
+		
+		//int range = hardLevel.getAmplitudeThreshold();
+		int range = 10;
 
 		for (int i = 1; i < chunkAmplitudeList.size(); i++) {
-			if (chunkAmplitudeList.get(i - 1) + hardLevel.getAmplitudeThreshold() >= chunkAmplitudeList.get(i)) {
+			if (chunkAmplitudeList.get(i - 1) + range >= chunkAmplitudeList.get(i)) {
 				isContinue = false;
 				continue;
 			}
 
-			if(isContinue == false && chunkAmplitudeList.get(i - 1) + hardLevel.getAmplitudeThreshold() < chunkAmplitudeList.get(i)){
+			if(isContinue == false && chunkAmplitudeList.get(i - 1) + range < chunkAmplitudeList.get(i)){
 				isContinue = true;
 				peakSize++;
 				
@@ -966,7 +979,7 @@ public class UserChannelContext {
 		
 		if (tempo) {
 			// 判断进入时间点
-			if((firstPeakIndex - 1) * 100 /chunkAmplitudeList.size() > hardLevel.getTempoEffectiveRange(musicXmlNote.getDenominator(), musicXmlNote.getDuration()) * 2){
+			if((firstPeakIndex - 1) * 100 /chunkAmplitudeList.size() > hardLevel.getTempoEffectiveRange(musicXmlNote.getDenominator(), musicXmlNote.getDuration())){
 				LOGGER.debug("超过范围:{}", (firstPeakIndex - 1) * 100 /chunkAmplitudeList.size());
 				tempo = false;
 			}
@@ -1025,16 +1038,30 @@ public class UserChannelContext {
 		//return chunkAnalysisList.get(chunkAnalysisList.size() - 1).getEndTime();
 		return musicXmlNote.getTimeStamp() + dynamicOffset;
 	}
+
+	private void reduceNoise(List<ChunkAnalysis> chunkAnalysisList, EvaluationCriteriaEnum criteria) {
+
+		ChunkAnalysis chunkAnalysis = null;
+
+		for (int i = 1; i < chunkAnalysisList.size(); i++) {
+			if (i < chunkAnalysisList.size() - 1) {
+				chunkAnalysis = chunkAnalysisList.get(i);
+
+				if (EvaluationCriteriaEnum.AMPLITUDE == criteria) {
+					if (chunkAnalysisList.get(i - 1).getAmplitude() == 0 && chunkAnalysisList.get(i + 1).getAmplitude() == 0
+							&& chunkAnalysis.getAmplitude() > 0) {
+						
+						chunkAnalysis.setAmplitude(0);
+						//chunkAnalysisList.set(i, chunkAnalysis);
+					}
+				}
+			}
+		}
+		
+	}
+	
 	
 	public static void main(String[] args) {
-		double[] midi = new double[128];;
-		int standardPitch = 440; // a is 440 hz...
-		for (int x = 0; x < midi.length; ++x)
-		{
-			//转调
-		   midi[x] = new BigDecimal(standardPitch).multiply(new BigDecimal(Math.pow(2, new BigDecimal(x-69).divide(new BigDecimal(12),6,BigDecimal.ROUND_HALF_UP).doubleValue()))).doubleValue();
-		   System.out.println("x=" + x +"  "+ midi[x]);
-		}
 		
 	}
 	

+ 14 - 3
audio-analysis/src/main/java/com/yonge/netty/dto/WebSocketResponse.java

@@ -13,8 +13,8 @@ public class WebSocketResponse<T> {
 		this.body = body;
 	}
 
-	public WebSocketResponse(String command, T body) {
-		this.header = new Head(command, HttpStatus.OK.value());
+	public WebSocketResponse(String type, String command, T body) {
+		this.header = new Head(type, command, HttpStatus.OK.value());
 		this.body = body;
 	}
 
@@ -37,12 +37,15 @@ public class WebSocketResponse<T> {
 	public static class Head {
 		private int status = HttpStatus.OK.value();
 		private String commond = "";
+		
+		private String type;
 
 		public Head() {
 
 		}
 
-		public Head(String commond, int status) {
+		public Head(String type, String commond, int status) {
+			this.type = type;
 			this.commond = commond;
 			this.status = status;
 		}
@@ -63,5 +66,13 @@ public class WebSocketResponse<T> {
 			this.commond = commond;
 		}
 
+		public String getType() {
+			return type;
+		}
+
+		public void setType(String type) {
+			this.type = type;
+		}
+
 	}
 }

+ 13 - 7
audio-analysis/src/main/java/com/yonge/netty/server/handler/NettyServerHandler.java

@@ -1,12 +1,5 @@
 package com.yonge.netty.server.handler;
 
-import io.netty.channel.Channel;
-import io.netty.channel.ChannelHandler;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.ChannelInboundHandlerAdapter;
-import io.netty.handler.codec.http.HttpHeaders;
-import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler;
-
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -14,8 +7,16 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.oauth2.common.OAuth2AccessToken;
 import org.springframework.stereotype.Component;
 
+import com.yonge.netty.server.service.DelayCheckHandler;
 import com.yonge.netty.server.service.UserChannelContextService;
 
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+import io.netty.handler.codec.http.HttpHeaders;
+import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler;
+
 @Component
 @ChannelHandler.Sharable
 public class NettyServerHandler extends ChannelInboundHandlerAdapter {
@@ -27,6 +28,9 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter {
 	
 	@Autowired
 	private UserChannelContextService userChannelContextService;
+	
+	@Autowired
+	private DelayCheckHandler delayCheckHandler;
 
 	@Override
 	public void channelActive(ChannelHandlerContext ctx) {
@@ -38,9 +42,11 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter {
 	public void channelUnregistered(ChannelHandlerContext ctx) {
 		
 		userChannelContextService.remove(ctx.channel());
+		delayCheckHandler.getUserABCMap().remove(ctx.channel());
 		
 		// 从管理器中移除
 		channelManager.remove(ctx.channel());
+		
 	}
 
 	@Override

+ 8 - 8
audio-analysis/src/main/java/com/yonge/netty/server/service/AudioCompareHandler.java

@@ -71,7 +71,7 @@ public class AudioCompareHandler implements MessageHandler {
 	/**
 	 * @describe 采样大小
 	 */
-	private int bufferSize = 1024 * 2;
+	private int bufferSize = 1024 * 1;
 
 	private boolean signed = true;
 
@@ -222,7 +222,7 @@ public class AudioCompareHandler implements MessageHandler {
 				
 				params.put("totalPlayTimeOfCurrentDate", totalPlayTimeOfCurrentDate);
 				
-				WebSocketResponse<Map<String, Object>> resp = new WebSocketResponse<Map<String, Object>>("overall", params);
+				WebSocketResponse<Map<String, Object>> resp = new WebSocketResponse<Map<String, Object>>(getAction(), "overall", params);
 
 				nettyChannelManager.sendTextMessage(user, resp);
 			}
@@ -232,12 +232,12 @@ public class AudioCompareHandler implements MessageHandler {
 
 			break;
 		case "audioPlayStart": // ???
-			
+
 			Integer offsetTime = dataObj.getInteger("offsetTime");
-			if(offsetTime != null){
-				channelContext.setOffsetMS(offsetTime);
-				channelContext.setHandlerSwitch(true);
-			}
+			Integer micDelay = dataObj.getInteger("micDelay");
+			channelContext.setMicDelayMS(micDelay + offsetTime);
+			channelContext.setOffsetMS(0);
+			channelContext.setHandlerSwitch(true);
 
 			break;
 		case "videoUpload": // 上传音频
@@ -343,7 +343,7 @@ public class AudioCompareHandler implements MessageHandler {
 				params.put("measureIndex", sectionIndex);
 				params.put("measureRenderIndex", channelContext.getCurrentMusicSection(null, sectionIndex).getMeasureRenderIndex());
 
-				WebSocketResponse<Map<String, Object>> resp = new WebSocketResponse<Map<String, Object>>("measureScore", params);
+				WebSocketResponse<Map<String, Object>> resp = new WebSocketResponse<Map<String, Object>>(getAction(), "measureScore", params);
 
 				nettyChannelManager.sendTextMessage(user, resp);
 			}

+ 268 - 0
audio-analysis/src/main/java/com/yonge/netty/server/service/DelayCheckHandler.java

@@ -0,0 +1,268 @@
+package com.yonge.netty.server.service;
+
+import java.io.File;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+import javax.sound.sampled.AudioFormat;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.JSONPath;
+import com.yonge.audio.analysis.AudioFloatConverter;
+import com.yonge.audio.analysis.detector.YINPitchDetector;
+import com.yonge.audio.utils.ArrayUtil;
+import com.yonge.netty.dto.NoteFrequencyRange;
+import com.yonge.netty.dto.WebSocketResponse;
+import com.yonge.netty.server.handler.NettyChannelManager;
+import com.yonge.netty.server.handler.message.MessageHandler;
+import com.yonge.netty.server.processor.WaveformWriter;
+
+import io.netty.channel.Channel;
+
+@Service
+public class DelayCheckHandler implements MessageHandler {
+
+	private final static Logger LOGGER = LoggerFactory.getLogger(DelayCheckHandler.class);
+
+	private int standardFrequecy = 3000;
+
+	/**
+	 * @describe 采样率
+	 */
+	private float sampleRate = 44100;
+
+	/**
+	 * 每个采样大小(Bit)
+	 */
+	private int bitsPerSample = 16;
+
+	/**
+	 * 通道数
+	 */
+	private int channels = 1;
+	
+	private int bufferSize = 1024 * 1;
+
+	private boolean signed = true;
+
+	private boolean bigEndian = false;
+
+	private AudioFormat audioFormat = new AudioFormat(sampleRate, bitsPerSample, channels, signed, bigEndian);
+
+	private AudioFloatConverter converter = AudioFloatConverter.getConverter(audioFormat);
+	
+	private boolean isRecWav = false;
+
+	private ConcurrentMap<Channel, UserContext> userABCMap = new ConcurrentHashMap<Channel, UserContext>();
+
+	private String tmpFileDir = "/mdata/soundCompare/";
+
+	private SimpleDateFormat sdf = new SimpleDateFormat("yyMMddHHmmSS");
+
+	@Autowired
+	private NettyChannelManager nettyChannelManager;
+
+	@Override
+	public String getAction() {
+		return "DELAY_CHECK";
+	}
+
+	@Override
+	public boolean handleTextMessage(String userId, Channel channel, String jsonMsg) {
+
+		String command = (String) JSONPath.extract(jsonMsg, "$.header.commond");
+
+		UserContext userContext = null;
+
+		switch (command) {
+		case "recordStart":
+
+			userContext = new UserContext(0, false);
+
+			userABCMap.put(channel, userContext);
+			
+			JSONObject dataObj = (JSONObject) JSONPath.extract(jsonMsg, "$.body");
+			
+			if(dataObj.get("HZ") != null) {
+				String hzStr = dataObj.get("HZ").toString();
+				standardFrequecy = Integer.parseInt(hzStr);
+			}
+
+			break;
+		case "recordEnd":
+
+			userContext = userABCMap.get(channel);
+
+			if (userContext == null) {
+				userContext = new UserContext(0, false);
+			}
+
+			WaveformWriter waveFileProcessor = userContext.getWaveformWriter();
+			if (waveFileProcessor != null) {
+				// 写文件头
+				waveFileProcessor.processingFinished();
+			}
+
+			userContext = userABCMap.get(channel);
+
+			if (userContext == null) {
+				userContext = new UserContext(0, false);
+			}
+
+			Map<String, Object> params = new HashMap<String, Object>();
+			params.put("firstNoteDelayDuration", userContext.getDelayDuration());
+
+			WebSocketResponse<Map<String, Object>> resp = new WebSocketResponse<Map<String, Object>>(getAction(), command, params);
+
+			nettyChannelManager.sendTextMessage(userId, resp);
+
+			userContext.setDelayDuration(0);
+			userContext.setIsOver(false);
+			userContext.setWaveformWriter(null);
+			userContext.setChannelBufferBytes(new byte[0]);
+			userABCMap.put(channel, userContext);
+			break;
+
+		default:
+			break;
+		}
+
+		return true;
+	}
+
+	@Override
+	public boolean handleBinaryMessage(String userId, Channel channel, byte[] bytes) {
+
+		UserContext userContext = userABCMap.get(channel);
+
+		if (userContext == null) {
+			userContext = new UserContext(0, false);
+		}
+
+		// 写录音文件
+		if (isRecWav) {
+			WaveformWriter waveFileProcessor = userContext.getWaveformWriter();
+			if (waveFileProcessor == null) {
+				File file = new File(tmpFileDir + userId + "_CHECK_" + sdf.format(new Date()) + ".wav");
+				waveFileProcessor = new WaveformWriter(file.getAbsolutePath());
+				userContext.setWaveformWriter(waveFileProcessor);
+
+				userABCMap.put(channel, userContext);
+			}
+			waveFileProcessor.process(bytes);
+		}
+
+		if (userContext.isOver) {
+			return true;
+		}
+		
+		userContext.setChannelBufferBytes(ArrayUtil.mergeByte(userContext.getChannelBufferBytes(), bytes));
+
+		int totalLength = userContext.getChannelBufferBytes().length;
+		
+		while (totalLength >= bufferSize) {
+			byte[] bufferData = ArrayUtil.extractByte(userContext.getChannelBufferBytes(), 0, bufferSize - 1);
+
+			if (bufferSize != totalLength) {
+				userContext.setChannelBufferBytes(ArrayUtil.extractByte(userContext.getChannelBufferBytes(), bufferSize, totalLength - 1));
+			} else {
+				userContext.setChannelBufferBytes(new byte[0]);
+			}
+
+			float[] sampleFloats = new float[bufferSize / 2];
+
+			converter.toFloatArray(bufferData, sampleFloats);
+			
+			YINPitchDetector frequencyDetector = new YINPitchDetector(sampleFloats.length, audioFormat.getSampleRate());
+
+			int playFrequency = (int) frequencyDetector.getFrequency(sampleFloats);
+
+			// int amplitude = (int) Signals.decibels(samples);
+
+			double durationTime = 1000 * (sampleFloats.length * 2) / audioFormat.getSampleRate() / (audioFormat.getSampleSizeInBits() / 8);
+
+			double playTime = userContext.delayDuration;
+
+			playTime += durationTime;
+
+			LOGGER.info("DurationTime:{}	 playFrequency:{}  PlayTime:{}" ,durationTime,playFrequency,playTime);
+			
+			NoteFrequencyRange nfr = new NoteFrequencyRange(440, playFrequency);
+			
+			if (nfr.getMinFrequency() < standardFrequecy && nfr.getMaxFrequency() > standardFrequecy) {
+
+				userContext.setIsOver(true);
+				userABCMap.put(channel, userContext);
+				return true;
+			}
+
+			userContext.setDelayDuration(playTime);
+
+			totalLength = userContext.getChannelBufferBytes().length;
+		}
+
+		return true;
+	}
+
+	public ConcurrentMap<Channel, UserContext> getUserABCMap() {
+		return userABCMap;
+	}
+
+	class UserContext {
+
+		public UserContext(double delayDuration, boolean isOver) {
+			this.delayDuration = delayDuration;
+			this.isOver = isOver;
+		}
+
+		private double delayDuration;
+
+		private boolean isOver;
+		
+		private byte[] channelBufferBytes = new byte[0];
+
+		private WaveformWriter waveformWriter;
+
+		public double getDelayDuration() {
+			return delayDuration;
+		}
+
+		public void setDelayDuration(double delayDuration) {
+			this.delayDuration = delayDuration;
+		}
+
+		public boolean isOver() {
+			return isOver;
+		}
+
+		public void setIsOver(boolean isOver) {
+			this.isOver = isOver;
+		}
+
+		public byte[] getChannelBufferBytes() {
+			return channelBufferBytes;
+		}
+
+		public void setChannelBufferBytes(byte[] channelBufferBytes) {
+			this.channelBufferBytes = channelBufferBytes;
+		}
+
+		public WaveformWriter getWaveformWriter() {
+			return waveformWriter;
+		}
+
+		public void setWaveformWriter(WaveformWriter waveformWriter) {
+			this.waveformWriter = waveformWriter;
+		}
+	}
+
+}

+ 1 - 1
audio-analysis/src/main/java/com/yonge/netty/server/service/PitchDetectionHandler.java

@@ -80,7 +80,7 @@ public class PitchDetectionHandler implements MessageHandler {
 		Map<String, Object> params = new HashMap<String, Object>();
 		params.put("frequency", playFrequency);
 
-		WebSocketResponse<Map<String, Object>> resp = new WebSocketResponse<Map<String, Object>>("checking", params);
+		WebSocketResponse<Map<String, Object>> resp = new WebSocketResponse<Map<String, Object>>(getAction(), "checking", params);
 
 		nettyChannelManager.sendTextMessage(userId, resp);
 

+ 1 - 1
audio-analysis/src/main/resources/logback-spring.xml

@@ -27,7 +27,7 @@
 		</encoder>
 	</appender>
 
-	<logger name="com.yonge" level="debug" />
+	<logger name="com.yonge" level="info" />
 
 	<!--开发环境:打印控制台 -->
 	<springProfile name="dev">

+ 2 - 2
audio-analysis/src/test/java/com/yonge/netty/client/NettyClient.java

@@ -90,11 +90,11 @@ public class NettyClient {
 			String step2 = "{\"header\":{\"commond\":\"recordStart\",\"type\":\"SOUND_COMPARE\",\"status\":200}}";
 			channel.writeAndFlush(new TextWebSocketFrame(step2));
 			
-			String step3 = "{\"body\":{\"offsetTime\":113},\"uuid\":\"1662715309875118846\",\"header\":{\"commond\":\"audioPlayStart\",\"type\":\"SOUND_COMPARE\"}}";
+			String step3 = "{\"body\":{\"micDelay\":18,\"offsetTime\":178},\"uuid\":\"1662715309875118846\",\"header\":{\"commond\":\"audioPlayStart\",\"type\":\"SOUND_COMPARE\"}}";
 			channel.writeAndFlush(new TextWebSocketFrame(step3));
 			
 			//step4 发送wav
-			String fileName = "/9550.wav";
+			String fileName = "/84.wav";
 			AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(FileUtils.toFile(WebSocketClientHandler.class.getResource(fileName)));
 			
 			AudioFormat baseFormat = audioInputStream.getFormat();

File diff suppressed because it is too large
+ 0 - 0
audio-analysis/src/test/resoures/9550.json


BIN
audio-analysis/src/test/resoures/9550.wav


+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/config/AdapayNotifyConstants.java

@@ -2,9 +2,9 @@ package com.ym.mec.biz.dal.config;
 
 public class AdapayNotifyConstants {
 	
-	public static String corp_member_notify_url_test = "https://test.dayaedu.com/api-web/adapay/callback";
+	public static String corp_member_notify_url_test = "https://test.dayaedu.com/api-web/{}/callback";
 
-	public static String corp_member_notify_url_prod = "https://online.dayaedu.com/api-web/adapay/callback";
+	public static String corp_member_notify_url_prod = "https://online.dayaedu.com/api-web/{}/callback";
 	
 	public static String student_payment_notify_url_test = "https://mstutest.dayaedu.com/api-student/studentOrder/callback";
 	

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -752,6 +752,8 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
 
     List<CourseSchedule> findByClassDate(@Param("classDates") List<String> classDates, @Param("tenantId") Integer tenantId);
 
+    List<CourseSchedule> findByClassDateAndStu(@Param("classDates") List<String> classDates, @Param("tenantId") Integer tenantId, @Param("userId") Integer userId);
+
     /**
      * 查询学生明天的课程数
      *

+ 4 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/HfMemberDao.java

@@ -13,7 +13,7 @@ public interface HfMemberDao extends BaseDAO<Integer, HfMember> {
      * @param memberId
      * @return
      */
-    HfMember getByMemberId(@Param("memberId") String memberId);
+    HfMember getByMemberId(@Param("memberId") String memberId, @Param("payerName") String payerName);
 
     /**
      * 根据名字获取商户信息
@@ -21,6 +21,8 @@ public interface HfMemberDao extends BaseDAO<Integer, HfMember> {
      * @param name
      * @return
      */
-    HfMember getByName(@Param("name") String name);
+    HfMember getByName(@Param("name") String name, @Param("payerName") String payerName);
+    
+    HfMember getByOrganId(@Param("organId") Integer organId, @Param("payerName") String payerName);
 
 }

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

@@ -1,9 +1,11 @@
 package com.ym.mec.biz.dal.dao;
 
+import org.apache.ibatis.annotations.Param;
+
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 
 public interface HfMerchantConfigDao extends BaseDAO<Integer, HfMerchantConfig> {
 
-	HfMerchantConfig queryByTenantId(Integer tenantId);
+	HfMerchantConfig queryByTenantId(@Param("tenantId") Integer tenantId, @Param("payerName") String payerName);
 }

+ 4 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java

@@ -369,13 +369,13 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
     List<IndexBaseMonthData> getTotalAmountDataWithTimelyDetails(@Param("startDate") String startDate,
                                                                  @Param("endDate") String endDate,
                                                                  @Param("organIds") List<Integer> organIds,
-                                                                 @Param("orderType") String orderType,
-                                                                 @Param("notOrderType") List<String> notOrderType,@Param("tenantId") Integer tenantId);
+                                                                 @Param("orderTypeList") List<String> orderTypeList,
+                                                                 @Param("tenantId") Integer tenantId);
     List<IndexBaseMonthData> getOrganTotalAmountDataWithTimelyDetails(@Param("startDate") String startDate,
                                                                  @Param("endDate") String endDate,
                                                                  @Param("organIds") List<Integer> organIds,
-                                                                 @Param("orderType") String orderType,
-                                                                 @Param("notOrderType") List<String> notOrderType,@Param("tenantId") Integer tenantId);
+                                                                 @Param("orderTypeList") List<String> orderTypeList,
+                                                                 @Param("tenantId") Integer tenantId);
 
     List<IndexBaseMonthData> getVipAmountDataWithTimelyDetails(@Param("startDate") String startDate,
                                                                  @Param("endDate") String endDate,

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

@@ -122,7 +122,7 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
      * @param status
      * @return
      */
-    List<StudentPaymentOrder> findOrdersByStatus(@Param("status") DealStatusEnum status, @Param("paymentChannel") String paymentChannel);
+    List<StudentPaymentOrder> findOrdersByStatus(@Param("status") DealStatusEnum status);
 
     /**
      * 查询支付中超时的订单

+ 9 - 9
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicScoreSubjectDto.java

@@ -6,8 +6,8 @@ import java.util.List;
 
 public class MusicScoreSubjectDto {
 
-    @ApiModelProperty(value = "声部",required = false)
-    private Integer subjectId;
+//    @ApiModelProperty(value = "声部",required = false)
+//    private Integer subjectId;
 
     @ApiModelProperty(value = "学员编号",required = false)
     private List<Integer> userIdList;
@@ -42,13 +42,13 @@ public class MusicScoreSubjectDto {
         this.musicScoreHomeworkDtoList = musicScoreHomeworkDtoList;
     }
 
-    public Integer getSubjectId() {
-        return subjectId;
-    }
-
-    public void setSubjectId(Integer subjectId) {
-        this.subjectId = subjectId;
-    }
+//    public Integer getSubjectId() {
+//        return subjectId;
+//    }
+//
+//    public void setSubjectId(Integer subjectId) {
+//        this.subjectId = subjectId;
+//    }
 
     public List<Integer> getUserIdList() {
         return userIdList;

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PaymentParam.java

@@ -14,8 +14,12 @@ public class PaymentParam {
     private String platform;
     private Integer tenantId;
     
+    private String payerName;
+    
     private String notifyUrl;
     
+    private String ip;
+    
 
     public PaymentParam() {
     }
@@ -100,6 +104,14 @@ public class PaymentParam {
         this.tenantId = tenantId;
     }
 
+	public String getPayerName() {
+		return payerName;
+	}
+
+	public void setPayerName(String payerName) {
+		this.payerName = payerName;
+	}
+
 	public String getNotifyUrl() {
 		return notifyUrl;
 	}
@@ -107,4 +119,12 @@ public class PaymentParam {
 	public void setNotifyUrl(String notifyUrl) {
 		this.notifyUrl = notifyUrl;
 	}
+
+	public String getIp() {
+		return ip;
+	}
+
+	public void setIp(String ip) {
+		this.ip = ip;
+	}
 }

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupBuyParamsDto.java

@@ -32,4 +32,7 @@ public class VipGroupBuyParamsDto extends BaseEntity {
     private List<Integer> couponIdList;
 
     private Integer userId;
+
+    @ApiModelProperty(value = "是否继续支付")
+    private Boolean continuePay;
 }

+ 51 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/YeepayMember.java

@@ -0,0 +1,51 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.HfMember;
+
+public class YeepayMember extends HfMember {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1180936467758136290L;
+
+	private String legalLicenceFrontUrl; // 法人证件人像面照片 请上传带有人像面的法人证件照片
+
+	private String legalLicenceBackUrl; // 法人证件非人像面照片
+	
+	private String licenceUrl; //商户证件照片
+	
+	private String openAccountLicenceUrl; //开户许可证照片
+
+	public String getLegalLicenceFrontUrl() {
+		return legalLicenceFrontUrl;
+	}
+
+	public void setLegalLicenceFrontUrl(String legalLicenceFrontUrl) {
+		this.legalLicenceFrontUrl = legalLicenceFrontUrl;
+	}
+
+	public String getLegalLicenceBackUrl() {
+		return legalLicenceBackUrl;
+	}
+
+	public void setLegalLicenceBackUrl(String legalLicenceBackUrl) {
+		this.legalLicenceBackUrl = legalLicenceBackUrl;
+	}
+
+	public String getLicenceUrl() {
+		return licenceUrl;
+	}
+
+	public void setLicenceUrl(String licenceUrl) {
+		this.licenceUrl = licenceUrl;
+	}
+
+	public String getOpenAccountLicenceUrl() {
+		return openAccountLicenceUrl;
+	}
+
+	public void setOpenAccountLicenceUrl(String openAccountLicenceUrl) {
+		this.openAccountLicenceUrl = openAccountLicenceUrl;
+	}
+}

+ 46 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/AppVersionInfoBak.java

@@ -0,0 +1,46 @@
+package com.ym.mec.biz.dal.entity;
+
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(app_version_info):
+ */
+@Data
+public class AppVersionInfoBak {
+
+	private Integer id;
+
+	/** 平台(andorid/ios) */
+	private String platform;
+
+	/** 版本号(以V开头) */
+	private String version;
+
+	/** 状态(newest/history) */
+	private String status;
+
+	/** 是否强制更新 */
+	private boolean isForceUpdate;
+
+	/** 更新描述 */
+	private String description;
+
+	/** 下载地址 */
+	private String downloadUrl;
+
+	/** 创建人 */
+	private Integer operatorId;
+
+	/**  */
+	private java.util.Date updateTime;
+
+	/**  */
+	private java.util.Date createTime;
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 89 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/HfMember.java

@@ -17,6 +17,10 @@ public class HfMember extends BaseEntity {
 
 	@ApiModelProperty(value = "id",required = true)
     private Integer Id;
+	
+	private String payerName;
+	
+	private String requestNo;
     
     private Integer organId;
 
@@ -31,6 +35,9 @@ public class HfMember extends BaseEntity {
 
     @ApiModelProperty(value = "城市编号",required = true)
     private String areaCode;
+    
+    @ApiModelProperty(value = "区编号",required = false)
+    private String districtCode;
 
     @ApiModelProperty(value = "统一社会信用码",required = true)
     private String socialCreditCode;
@@ -43,6 +50,9 @@ public class HfMember extends BaseEntity {
 
     @ApiModelProperty(value = "法人",required = true)
     private String legalPerson;
+    
+    @ApiModelProperty(value = "法人证件类型",required = true)
+    private String legalLicenceType;
 
     @ApiModelProperty(value = "法人身份证号",required = true)
     private String legalCertId;
@@ -96,6 +106,18 @@ public class HfMember extends BaseEntity {
 
     @ApiModelProperty(value = "满额后收款分部",required = true)
     private Integer routeOrganId;
+    
+    @ApiModelProperty(value = "联系人姓名",required = false)
+    private String contactName;
+    
+    @ApiModelProperty(value = "联系人证件号码",required = false)
+    private String contactLicenceNo;
+    
+    @ApiModelProperty(value = "联系人手机号码",required = false)
+    private String contactMobile;
+    
+    @ApiModelProperty(value = "联系人邮箱",required = false)
+    private String contactEmail;
 
     public Integer getId() {
         return Id;
@@ -105,7 +127,23 @@ public class HfMember extends BaseEntity {
         Id = id;
     }
 
-    public String getMemberId() {
+    public String getPayerName() {
+		return payerName;
+	}
+
+	public void setPayerName(String payerName) {
+		this.payerName = payerName;
+	}
+
+	public String getRequestNo() {
+		return requestNo;
+	}
+
+	public void setRequestNo(String requestNo) {
+		this.requestNo = requestNo;
+	}
+
+	public String getMemberId() {
         return memberId;
     }
 
@@ -137,7 +175,15 @@ public class HfMember extends BaseEntity {
         this.areaCode = areaCode;
     }
 
-    public String getSocialCreditCode() {
+    public String getDistrictCode() {
+		return districtCode;
+	}
+
+	public void setDistrictCode(String districtCode) {
+		this.districtCode = districtCode;
+	}
+
+	public String getSocialCreditCode() {
         return socialCreditCode;
     }
 
@@ -169,7 +215,15 @@ public class HfMember extends BaseEntity {
         this.legalPerson = legalPerson;
     }
 
-    public String getLegalCertId() {
+    public String getLegalLicenceType() {
+		return legalLicenceType;
+	}
+
+	public void setLegalLicenceType(String legalLicenceType) {
+		this.legalLicenceType = legalLicenceType;
+	}
+
+	public String getLegalCertId() {
         return legalCertId;
     }
 
@@ -320,4 +374,36 @@ public class HfMember extends BaseEntity {
 	public void setCardName(String cardName) {
 		this.cardName = cardName;
 	}
+
+	public String getContactEmail() {
+		return contactEmail;
+	}
+
+	public void setContactEmail(String contactEmail) {
+		this.contactEmail = contactEmail;
+	}
+
+	public String getContactName() {
+		return contactName;
+	}
+
+	public void setContactName(String contactName) {
+		this.contactName = contactName;
+	}
+
+	public String getContactLicenceNo() {
+		return contactLicenceNo;
+	}
+
+	public void setContactLicenceNo(String contactLicenseNo) {
+		this.contactLicenceNo = contactLicenseNo;
+	}
+
+	public String getContactMobile() {
+		return contactMobile;
+	}
+
+	public void setContactMobile(String contactMobile) {
+		this.contactMobile = contactMobile;
+	}
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPaymentOrder.java

@@ -25,7 +25,7 @@ public class StudentPaymentOrder extends BaseEntity {
 	private Long id;
 	
 	private GroupType groupType;
-
+	
 	@Version
 	private Integer version;
 	/**  */

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/PaymentChannelEnum.java

@@ -1,10 +1,13 @@
 package com.ym.mec.biz.dal.enums;
 
+import org.apache.commons.lang3.StringUtils;
+
 import com.ym.mec.common.enums.BaseEnum;
 
 public enum PaymentChannelEnum implements BaseEnum<String, PaymentChannelEnum> {
 	YQPAY("YQPAY", "双乾"),
 	ADAPAY("ADAPAY", "汇付"),
+	YEEPAY("YEEPAY", "易宝"),
 	BALANCE("BALANCE", "余额"),
 	UNIONPAY("UNIONPAY", "银联");
 
@@ -25,5 +28,14 @@ public enum PaymentChannelEnum implements BaseEnum<String, PaymentChannelEnum> {
 	public String getDesc() {
 		return desc;
 	}
+	
+	public static PaymentChannelEnum codeOf(String code) {
+		for (PaymentChannelEnum pce : values()) {
+			if (StringUtils.equals(pce.code, code)) {
+				return pce;
+			}
+		}
+		return null;
+	}
 
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/HfMemberQueryInfo.java

@@ -9,6 +9,8 @@ public class HfMemberQueryInfo extends QueryInfo {
     private String memberId;
 
     private String status;
+    
+    private String payerName;
 
     public String getName() {
         return name;
@@ -33,4 +35,12 @@ public class HfMemberQueryInfo extends QueryInfo {
     public void setStatus(String status) {
         this.status = status;
     }
+
+	public String getPayerName() {
+		return payerName;
+	}
+
+	public void setPayerName(String payerName) {
+		this.payerName = payerName;
+	}
 }

+ 49 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java

@@ -323,7 +323,7 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @param postponeFlag: 如果冲突是否顺延
 	 * @return void
 	 */
-	Boolean checkNewCourseSchedules(List<CourseSchedule> courseSchedules,boolean checkExistCourseSchedule,Boolean postponeFlag);
+	HttpResponseResult checkNewCourseSchedules(List<CourseSchedule> courseSchedules,boolean checkExistCourseSchedule,Boolean postponeFlag);
 
 
 	/**
@@ -334,7 +334,7 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @param postponeFlag: 如果冲突是否顺延
 	 * @return void
 	 */
-	Boolean checkNewCourseSchedules(List<CourseSchedule> courseSchedules,boolean checkExistCourseSchedule,Boolean postponeFlag,ClassGroupStudentMapper classGroupStudentMapper);
+	HttpResponseResult checkNewCourseSchedules(List<CourseSchedule> courseSchedules,boolean checkExistCourseSchedule,Boolean postponeFlag,ClassGroupStudentMapper classGroupStudentMapper);
 
 	/**
 	 * @describe
@@ -790,7 +790,7 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 */
 	CourseScheduleWrapper.LiveCourseSchedule getLiveCourseScheduleTime(Long courseScheduleId);
 
-    List<CourseScheduleStudentDto> queryDetailList(CourseDetailQueryInfo courseDetailQueryInfo);
+	List<CourseScheduleStudentDto> queryDetailList(CourseDetailQueryInfo courseDetailQueryInfo);
 
     /**
      * 老师乐直播直播课课程列表
@@ -809,4 +809,50 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
      * @return
      */
     CourseScheduleDto detailLiveCourse(Long courseScheduleId);
+
+	/**
+	* @description: 校验直播课调整时间
+	 * @param oldCourseSchedule
+	 * @param startRemindTime
+	* @return void
+	* @author zx
+	* @date 2023/6/15 14:36
+	*/
+	void checkLiveAdjust(CourseSchedule oldCourseSchedule,String startRemindTime);
+
+	/**
+	* @description: 校验直播课调整时间
+	 * @param courseSchedules
+	* @return void
+	* @author zx
+	* @date 2023/6/15 14:36
+	*/
+	void checkLiveAdjust(List<CourseSchedule> courseSchedules);
+
+	/**
+	* @description: 重置连堂课标记
+	 * @param courseSchedule
+	* @return void
+	* @author zx
+	* @date 2023/6/15 14:36
+	*/
+	void resetLiveRemind(CourseSchedule courseSchedule);
+
+	/**
+	 * @description: 重置连堂课标记
+	 * @param courseSchedules
+	 * @return void
+	 * @author zx
+	 * @date 2023/6/15 14:36
+	 */
+	void resetLiveRemind(List<CourseSchedule> courseSchedules);
+
+	/**
+	* @description: 课程变更后,给直播间发送变更消息
+	 * @param courseSchedules
+	* @return void
+	* @author zx
+	* @date 2023/6/15 14:47
+	*/
+	void sendChatRoomMessage(List<CourseSchedule> courseSchedules);
 }

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

@@ -14,7 +14,9 @@ public interface HfMemberService extends BaseService<Integer, HfMember> {
      * @param memberId
      * @return
      */
-    HfMember getByMemberId(String memberId);
+    HfMember getByMemberId(String memberId, String payerName);
+    
+    HfMember getByOrganId(Integer organId, String payerName);
 
     boolean createMember(HfMember member, File file) throws Exception;
 

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

@@ -5,5 +5,5 @@ import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 
 public interface HfMerchantConfigService extends BaseService<Integer, HfMerchantConfig> {
 
-	HfMerchantConfig queryByTenantId(Integer tenantId);
+	HfMerchantConfig queryByTenantId(Integer tenantId, String payerName);
 }

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

@@ -80,7 +80,7 @@ public interface StudentPaymentOrderService extends BaseService<Long, StudentPay
      * @param status
      * @return
      */
-    List<StudentPaymentOrder> findOrdersByStatus(DealStatusEnum status, String paymentChannel);
+    List<StudentPaymentOrder> findOrdersByStatus(DealStatusEnum status);
 
     /**
      * 查询支付中超时的订单
@@ -99,12 +99,10 @@ public interface StudentPaymentOrderService extends BaseService<Long, StudentPay
      *  检查并修改订单状态
      *
      * @param date
-     * @param payConfigMap
      * @param payingOrder
-     * @param checkTime
      * @return
      */
-    OrderCancelModel updateOrderStatus(Date date, Map<Integer, HfMerchantConfig> payConfigMap, StudentPaymentOrder payingOrder, Boolean checkTime) throws Exception;
+    OrderCancelModel updateOrderStatus(Date date, StudentPaymentOrder payingOrder) throws Exception;
 
     //退优惠券和余额
     void quitCouponAndBalance(StudentPaymentOrder order);
@@ -162,6 +160,11 @@ public interface StudentPaymentOrderService extends BaseService<Long, StudentPay
      * @return
      */
     List<StudentPaymentOrder> reConfirmOrder(Date startTime, Date endTime);
+    
+    /**
+     * 分账
+     */
+    Boolean confirmOrder(StudentPaymentOrder order);
 
     /**
      * 获取学生报名的订单

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java

@@ -397,6 +397,7 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
     
     //机构云教室账户余额提醒
     String TENANT_CLOUD_ROOM_BALANCE_NOTICE = "tenant_cloud_room_balance_notice_";
+
     // 学校端默认用户头象
     String USER_DEFAULT_AVATAR = "user_default_avatar";
     // IM服务方案(rongCloud,tencentCloud
@@ -425,6 +426,9 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
     String CLOSE_CLASS_STUDENT_REMIND_TIME = "close_class_student_remind_time";
     // 直播课程开始前XX分钟,发送通知
     String LIVE_CLASS_START_REMIND_TIME = "live_class_start_remind_time";
+    
+    //支付渠道
+    String PAYMENT_CHANNEL = "payment_channel";
 
     static void checkActivityDate(String startTimeStr, String endTimeStr) {
         if(StringUtils.isEmpty(startTimeStr) || StringUtils.isEmpty(startTimeStr)){

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysPaymentConfigService.java

@@ -8,6 +8,7 @@ import com.ym.mec.common.service.BaseService;
 import java.util.List;
 
 public interface SysPaymentConfigService extends BaseService<Integer, SysPaymentConfig> {
+	
 
     /**
      * 根据分部id获取配置
@@ -17,6 +18,13 @@ public interface SysPaymentConfigService extends BaseService<Integer, SysPayment
     SysPaymentConfig findPaymentConfigByOrganId(Integer organId);
 
     /**
+     * 根据分部id获取配置
+     * @param organId
+     * @return
+     */
+    SysPaymentConfig findPaymentConfigByOrganId(PaymentChannelEnum paymentChannel, Integer organId);
+
+    /**
      * 根据分部ids获取配置
      * @param organIds
      * @return

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

@@ -341,7 +341,7 @@ public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, Chil
                 orderAmount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 orderSubject,
                 orderSubject,

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

@@ -2403,8 +2403,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
     @Transactional(rollbackFor = Exception.class)
     public List<CourseSchedule> autoAdjust(ClassGroup4MixDto classGroup4MixDto, List<CourseSchedule> courseScheduleList, MusicGroupStudentClassAdjust classAdjust) {
-        Boolean checkFlag = courseScheduleService.checkNewCourseSchedules(courseScheduleList, false, true);
-        if (!checkFlag) {
+        HttpResponseResult result = courseScheduleService.checkNewCourseSchedules(courseScheduleList, false, true);
+        if (result.getCode() == 500) {
             //排课开始时间加一周
             Date stringToDate = DateUtil.stringToDate(classGroup4MixDto.getStartDate(), DateUtil.ISO_EXPANDED_DATE_FORMAT);
             classGroup4MixDto.setStartDate(DateUtil.format(DateUtil.addDays(stringToDate, 7), DateUtil.ISO_EXPANDED_DATE_FORMAT));

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

@@ -198,7 +198,7 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
                     payAmount,
                     BigDecimal.ZERO,
                     orderNo,
-                    baseApiUrl + "/api-student/studentOrder/callback",
+                    baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                     baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                     tenantEnum.getMsg(),
                     tenantEnum.getMsg()

File diff suppressed because it is too large
+ 486 - 484
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java


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

@@ -584,7 +584,7 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
                     amount,
                     balance,
                     orderNo,
-                    baseApiUrl + "/api-student/studentOrder/callback",
+                    baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                     baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                     "对外课程组购买",
                     coursesGroup.getName(),

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

@@ -195,7 +195,7 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
                 money,
                 BigDecimal.ZERO,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 "考级报名活动",
                 "考级报名活动",

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

@@ -470,7 +470,7 @@ public class ExportServiceImpl implements ExportService {
         List<Map<String, Object>> data = new ArrayList<>();
         while (profiles.equals("prod")) {
             Map<String, Object> paymentList = null;
-            HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(TenantContextHolder.getTenantId());
+            HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(TenantContextHolder.getTenantId(), PaymentChannelEnum.ADAPAY.getCode());
             if (hfMerchantConfig == null) {
                 throw new BizException("机构[{}]汇付商户信息找不到", TenantContextHolder.getTenantId());
             }
@@ -2196,6 +2196,9 @@ public class ExportServiceImpl implements ExportService {
                     } else if (row.getGroupType().equals(OrderTypeEnum.REPAIR)) {
                         row.setRepairFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getOtherFee()));
                     } else if (row.getGroupType() == GroupType.OUTORDER) {
+                        if(row.getType() == RENEW){
+                            row.setMusicGroupCourseFee(row.getActualAmount());
+                        }
                         if (row.getType() != RENEW && row.getType() != APPLY) {
                             //销售收入
                             BigDecimal add = feeByType.getMusicalFee().add(row.getTeachingFee()).add(row.getMaintenanceProductFee()).add(feeByType.getOtherFee());
@@ -3162,7 +3165,7 @@ public class ExportServiceImpl implements ExportService {
         groupTypeConsumerMap.put(GroupType.MUSIC, (orderDto) -> orderDto.setMusicGroupCourseFee(orderDto.getMusicGroupCourseFee().add(orderDto.getActualAmount())));
         groupTypeConsumerMap.put(GroupType.PRACTICE, (orderDto) -> orderDto.setPracticeCourseFee(orderDto.getPracticeCourseFee().add(orderDto.getActualAmount())));
         groupTypeConsumerMap.put(GroupType.REPAIR, (orderDto) -> orderDto.setRepairFee(orderDto.getRepairFee().add(orderDto.getActualAmount())));
-        groupTypeConsumerMap.put(GroupType.OUTORDER, (orderDto) -> orderDto.setOtherFee(orderDto.getOtherFee().add(orderDto.getActualAmount())));
+        groupTypeConsumerMap.put(GroupType.OUTORDER, this::accept);
         groupTypeConsumerMap.put(GroupType.SPORADIC, this::accept);
         if (StringUtils.isEmpty(goodsSellReceiptMerNo)) {
             goodsSellReceiptMerNo = sysConfigDao.findConfigValue("goodsSellReceiptMerNo");
@@ -3379,6 +3382,8 @@ public class ExportServiceImpl implements ExportService {
     private void accept(StudentPaymentOrderExportDto orderDto) {
         if (orderDto.getType() == OrderTypeEnum.DEGREE_REGISTRATION) {
             orderDto.setDegreeFee(orderDto.getDegreeFee().add(orderDto.getActualAmount()));
+        } else if(orderDto.getType() == RENEW){
+            orderDto.setMusicGroupCourseFee(orderDto.getActualAmount());
         } else {
             Consumer<StudentPaymentOrderExportDto> dtoConsumer = chargeTypeConsumerMap.get(orderDto.getChargeType());
             if (dtoConsumer != null) {

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

@@ -143,7 +143,7 @@ public class ExtracurricularExercisesServiceImpl extends BaseServiceImpl<Long, E
                     throw new BizException("有部分声部未选择曲目");
                 }
                 for (StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail studentLessonTrainingDetail : musicScoreSubjectDto.getStudentLessonTrainingDetails()) {
-                    studentLessonTrainingDetail.setSubjectId(musicScoreSubjectDto.getSubjectId());
+                    studentLessonTrainingDetail.setSubjectId(0);
                 }
                 // 作业详情
                 studentLessonTrainingDetailList.addAll(studentLessonTrainingDetailService

+ 113 - 42
mec-biz/src/main/java/com/ym/mec/biz/service/impl/HfMemberServiceImpl.java

@@ -1,9 +1,10 @@
 package com.ym.mec.biz.service.impl;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.Date;
+import java.util.Map;
 
-import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -12,7 +13,9 @@ import org.springframework.transaction.annotation.Transactional;
 
 import com.ym.mec.biz.dal.config.AdapayNotifyConstants;
 import com.ym.mec.biz.dal.dao.HfMemberDao;
+import com.ym.mec.biz.dal.dto.YeepayMember;
 import com.ym.mec.biz.dal.entity.HfMember;
+import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.service.HfMemberService;
 import com.ym.mec.biz.service.HfMerchantConfigService;
 import com.ym.mec.common.dal.BaseDAO;
@@ -23,6 +26,9 @@ import com.ym.mec.thirdparty.adapay.SettleAccountService;
 import com.ym.mec.thirdparty.adapay.entity.AccountInfo;
 import com.ym.mec.thirdparty.adapay.entity.EnterpriseUser;
 import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
+import com.ym.mec.thirdparty.yeepay.YeepayMerchantService;
+import com.ym.mec.thirdparty.yeepay.entity.MerchantInfo;
+import com.ym.mec.util.string.MessageFormatter;
 
 @Service
 public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> implements HfMemberService {
@@ -38,6 +44,9 @@ public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> impl
     
     @Autowired
     private HfMerchantConfigService hfMerchantConfigService;
+    
+    @Autowired
+    private YeepayMerchantService yeepayMerchantService;
 
     @Value("${spring.profiles.active:dev}")
     private String env;
@@ -50,55 +59,42 @@ public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> impl
     }
 
     @Override
-	public HfMember getByMemberId(String memberId) {
-		return hfMemberDao.getByMemberId(memberId);
+	public HfMember getByMemberId(String memberId, String payerName) {
+		return hfMemberDao.getByMemberId(memberId, payerName);
+	}
+
+	@Override
+	public HfMember getByOrganId(Integer organId, String payerName) {
+		return hfMemberDao.getByOrganId(organId, payerName);
 	}
 
 	@Override
     @Transactional(rollbackFor = Exception.class)
     public boolean createMember(HfMember member, File file) throws Exception {
-        HfMember hasMember = hfMemberDao.getByMemberId(member.getMemberId());
+        HfMember hasMember = hfMemberDao.getByOrganId(member.getOrganId(), member.getPayerName());
         if (hasMember != null) {
-            throw new BizException("商户号不能与已有商户相同,请核查");
+            throw new BizException("该分部已创建成功,请核查");
         }
-        hasMember = hfMemberDao.getByName(member.getName());
+        hasMember = hfMemberDao.getByName(member.getName(), member.getPayerName());
         if (hasMember != null) {
             throw new BizException("公司名与已有公司名相同,请核查");
         }
         
-        Integer tenantId = member.getTenantId();
-        
-        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId);
-        if(hfMerchantConfig == null){
-        	throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
-        }
-        
-        EnterpriseUser enterpriseUser = new EnterpriseUser();
-        enterpriseUser.setAddress(member.getAddress());
-        enterpriseUser.setAreaCode(member.getAreaCode());
-        enterpriseUser.setAttachFile(file);
-        enterpriseUser.setBankAcctType(member.getBankAcctType());
-        enterpriseUser.setBankCode(member.getBankCode());
-        enterpriseUser.setBusinessScope(member.getBusinessScope());
-        enterpriseUser.setCardName(member.getCardName());
-        enterpriseUser.setCardNo(member.getCardNo());
-        enterpriseUser.setLegalCertId(member.getLegalCertId());
-        enterpriseUser.setLegalCertIdExpires(member.getLegalCertIdExpires());
-        enterpriseUser.setLegalMp(member.getLegalMp());
-        enterpriseUser.setLegalPerson(member.getLegalPerson());
-        enterpriseUser.setMemberId(member.getMemberId());
-        enterpriseUser.setName(member.getName());
-        
-        if(StringUtils.equals(env, "prod")){
-            enterpriseUser.setNotifyUrl(AdapayNotifyConstants.corp_member_notify_url_prod);
-        }else {
-            enterpriseUser.setNotifyUrl(AdapayNotifyConstants.corp_member_notify_url_test);
-        }
-        enterpriseUser.setProvCode(member.getProvCode());
-        enterpriseUser.setSocialCreditCode(member.getSocialCreditCode());
-        enterpriseUser.setSocialCreditCodeExpires(member.getSocialCreditCodeExpires());
-        
-        corpMemberService.create(hfMerchantConfig.getMerKey(), hfMerchantConfig.getAppId(), enterpriseUser, enterpriseUser.getNotifyUrl());
+        switch (PaymentChannelEnum.codeOf(member.getPayerName())) {
+		case ADAPAY:
+			createMemberWithAdapay(member, file);
+			break;
+			
+		case YEEPAY:
+			Map<String, Object> response = createMemberWithYeepay((YeepayMember) member);
+			member.setRequestNo(response.get("requestNo").toString());
+			member.setMemberId(response.get("merchantNo").toString());
+			break;
+
+		default:
+			
+			return false;
+		}
 
         Date nowDate = new Date();
         member.setCreateTime(nowDate);
@@ -119,7 +115,7 @@ public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> impl
 
         Integer tenantId = member.getTenantId();
         
-        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId);
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId, member.getPayerName());
         if(hfMerchantConfig == null){
         	throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
         }
@@ -165,7 +161,7 @@ public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> impl
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean mergeSettleAccount(String memberId, AccountInfo accountInfo) throws Exception {
-        HfMember hfMember = hfMemberDao.getByMemberId(memberId);
+        HfMember hfMember = hfMemberDao.getByMemberId(memberId, PaymentChannelEnum.ADAPAY.getCode());
         if (!hfMember.getStatus().equals("succeeded")) {
             throw new BizException("商户审核通过,才能绑定结算卡");
         }
@@ -186,7 +182,7 @@ public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> impl
         
         Integer tenantId = hfMember.getTenantId();
         
-        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId);
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId, PaymentChannelEnum.ADAPAY.getCode());
         if(hfMerchantConfig == null){
         	throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
         }
@@ -205,4 +201,79 @@ public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> impl
         }
         return true;
     }
+    
+	private boolean createMemberWithAdapay(HfMember member, File file) {
+		Integer tenantId = member.getTenantId();
+
+		HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId, member.getPayerName());
+		if (hfMerchantConfig == null) {
+			throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
+		}
+
+		EnterpriseUser enterpriseUser = new EnterpriseUser();
+		enterpriseUser.setAddress(member.getAddress());
+		enterpriseUser.setAreaCode(member.getAreaCode());
+		enterpriseUser.setAttachFile(file);
+		enterpriseUser.setBankAcctType(member.getBankAcctType());
+		enterpriseUser.setBankCode(member.getBankCode());
+		enterpriseUser.setBusinessScope(member.getBusinessScope());
+		enterpriseUser.setCardName(member.getCardName());
+		enterpriseUser.setCardNo(member.getCardNo());
+		enterpriseUser.setLegalCertId(member.getLegalCertId());
+		enterpriseUser.setLegalCertIdExpires(member.getLegalCertIdExpires());
+		enterpriseUser.setLegalMp(member.getLegalMp());
+		enterpriseUser.setLegalPerson(member.getLegalPerson());
+		enterpriseUser.setMemberId(member.getMemberId());
+		enterpriseUser.setName(member.getName());
+
+		if (StringUtils.equals(env, "prod")) {
+			enterpriseUser.setNotifyUrl(MessageFormatter.arrayFormat(AdapayNotifyConstants.corp_member_notify_url_prod, "adapay"));
+		} else {
+			enterpriseUser.setNotifyUrl(MessageFormatter.arrayFormat(AdapayNotifyConstants.corp_member_notify_url_test, "adapay"));
+		}
+		enterpriseUser.setProvCode(member.getProvCode());
+		enterpriseUser.setSocialCreditCode(member.getSocialCreditCode());
+		enterpriseUser.setSocialCreditCodeExpires(member.getSocialCreditCodeExpires());
+
+		return corpMemberService.create(hfMerchantConfig.getMerKey(), hfMerchantConfig.getAppId(), enterpriseUser, enterpriseUser.getNotifyUrl());
+	}
+	
+	private Map<String, Object> createMemberWithYeepay(YeepayMember member) throws IOException {
+
+		HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(member.getTenantId(), member.getPayerName());
+		if (hfMerchantConfig == null) {
+			throw new BizException("机构[{}]易宝商户信息找不到", member.getTenantId());
+		}
+		
+		MerchantInfo merchantInfo = new MerchantInfo();
+		merchantInfo.setAddress(member.getAddress());
+		merchantInfo.setBankAccountType(member.getBankAcctType());
+		merchantInfo.setBankCardNo(member.getCardNo());
+		merchantInfo.setBankCode(member.getBankCode());
+		merchantInfo.setCityCode(member.getAreaCode());
+		merchantInfo.setContactEmail(member.getContactEmail());
+		merchantInfo.setContactLicenceNo(member.getContactLicenceNo());
+		merchantInfo.setContactMobile(member.getContactMobile());
+		merchantInfo.setContactName(member.getContactName());
+		merchantInfo.setDistrictCode(member.getDistrictCode());
+		merchantInfo.setLegalLicenceBackUrl(member.getLegalLicenceBackUrl());
+		merchantInfo.setLegalLicenceFrontUrl(member.getLegalLicenceFrontUrl());
+		merchantInfo.setLegalLicenceNo(member.getLegalCertId());
+		merchantInfo.setLegalLicenceType(member.getLegalLicenceType());
+		merchantInfo.setLegalName(member.getLegalPerson());
+		merchantInfo.setLicenceNo(member.getSocialCreditCode());
+		merchantInfo.setLicenceUrl(member.getLicenceUrl());
+		merchantInfo.setMerchantName(member.getName());
+		merchantInfo.setMobile(member.getLegalMp());
+		merchantInfo.setOpenAccountLicenceUrl(member.getOpenAccountLicenceUrl());
+		merchantInfo.setProvinceCode(member.getProvCode());
+		merchantInfo.setSettlementDirection("BANKCARD");
+
+		String notifyURL = MessageFormatter.arrayFormat(AdapayNotifyConstants.corp_member_notify_url_test, "adapay");
+		if (StringUtils.equals(env, "prod")) {
+			notifyURL = MessageFormatter.arrayFormat(AdapayNotifyConstants.corp_member_notify_url_prod, "adapay");
+		}
+		
+		return yeepayMerchantService.registerSaasMerchantV2(hfMerchantConfig, merchantInfo, notifyURL);
+	}
 }

+ 11 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/HfMerchantConfigServiceImpl.java

@@ -1,10 +1,14 @@
 package com.ym.mec.biz.service.impl;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.ym.mec.biz.dal.dao.HfMerchantConfigDao;
+import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.service.HfMerchantConfigService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
@@ -25,12 +29,16 @@ public class HfMerchantConfigServiceImpl extends BaseServiceImpl<Integer, HfMerc
 	@Override
 	public void afterPropertiesSet() throws Exception {
 		AdapayInit adapayInit = AdapayInit.getInstance(false, true);
-		adapayInit.initWithMerConfig(hfMerchantConfigDao.findAll(null));
+		
+		Map<String, Object> params = new HashMap<String, Object>();
+		params.put("payerName", PaymentChannelEnum.ADAPAY.getCode());
+		
+		adapayInit.initWithMerConfig(hfMerchantConfigDao.findAll(params));
 	}
 
 	@Override
-	public HfMerchantConfig queryByTenantId(Integer tenantId) {
-		return hfMerchantConfigDao.queryByTenantId(tenantId);
+	public HfMerchantConfig queryByTenantId(Integer tenantId, String payerName) {
+		return hfMerchantConfigDao.queryByTenantId(tenantId, payerName);
 	}
 	
 }

+ 35 - 36
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.google.common.collect.Lists;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
@@ -120,7 +121,7 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		}
 
 		String startDate1 = startDate.toString() + " 00:00:00";
-		String endDate1 = endDate.toString() + " 23:59:59";;
+		String endDate1 = endDate + " 23:59:59";
 		List<Integer> arrayList = null;
 		if(!CollectionUtils.isEmpty(organIds)){
 			arrayList = new ArrayList<>(organIds);
@@ -386,43 +387,53 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 
     //异步处理经营数据查询
 	public void syncOperation(String startDate1,String endDate1,List<Integer> arrayList,Integer tenantId,List<IndexBaseDto> indexBaseDtoList,Map<IndexDataType, List<IndexBaseMonthData>> typeDateMap){
+		List<String> orderTypeList = new ArrayList<>();
+		orderTypeList.add("RENEW");orderTypeList.add("PRACTICE_GROUP_BUY");orderTypeList.add("PRACTICE_GROUP_RENEW");
+		orderTypeList.add("APPLY");orderTypeList.add("ADD_STUDENT");
 		CompletableFuture future1 = this.async(() -> {
-			indexBaseDtoList.add(this.getIndexBaseDto(ORGAN_RENEW_AMOUNT,indexBaseMonthDataDao.getOrganTotalAmountDataWithTimelyDetails(startDate1, endDate1, arrayList,"RENEW",null,tenantId)));
-			indexBaseDtoList.add(this.getIndexBaseDto(ORGAN_VIP_AMOUNT,indexBaseMonthDataDao.getOrganVipAmountDataWithTimelyDetails(startDate1, endDate1, arrayList,tenantId)));
+			List<IndexBaseMonthData> details = indexBaseMonthDataDao.getOrganTotalAmountDataWithTimelyDetails(startDate1, endDate1, arrayList, orderTypeList, tenantId);
+			if(!CollectionUtils.isEmpty(details)){
+				Map<String, List<IndexBaseMonthData>> collect = details.stream().collect(Collectors.groupingBy(e -> e.getOrderType()));
+				indexBaseDtoList.add(this.getIndexBaseDto(ORGAN_RENEW_AMOUNT,collect.getOrDefault("RENEW", Lists.newArrayList())));
+				indexBaseDtoList.add(this.getIndexBaseDto(ORGAN_PRACTICE_AMOUNT,collect.getOrDefault("PRACTICE_GROUP", Lists.newArrayList())));
+				indexBaseDtoList.add(this.getIndexBaseDto(ORGAN_APPLY_AMOUNT,collect.getOrDefault("APPLY", Lists.newArrayList())));
+			}
 		});
-		CompletableFuture future2 = this.async(() -> {
-			indexBaseDtoList.add(this.getIndexBaseDto(ORGAN_PRACTICE_AMOUNT,indexBaseMonthDataDao.getOrganTotalAmountDataWithTimelyDetails(startDate1, endDate1, arrayList,"PRACTICE_GROUP_BUY,PRACTICE_GROUP_RENEW",null,tenantId)));
-			indexBaseDtoList.add(this.getIndexBaseDto(ORGAN_OTHER_AMOUNT,indexBaseMonthDataDao.getOrganOtherAmountDataWithTimelyDetails(startDate1, endDate1, arrayList,tenantId)));
+		CompletableFuture future2 = this.async(()->{
+			List<IndexBaseMonthData> details = indexBaseMonthDataDao.getTotalAmountDataWithTimelyDetails(startDate1, endDate1, arrayList,orderTypeList,tenantId);
+			if(!CollectionUtils.isEmpty(details)){
+				Map<String, List<IndexBaseMonthData>> collect = details.stream().collect(Collectors.groupingBy(e -> e.getOrderType()));
+				typeDateMap.put(RENEW_AMOUNT,collect.getOrDefault("RENEW", Lists.newArrayList()));
+				typeDateMap.put(APPLY_AMOUNT,collect.getOrDefault("PRACTICE_GROUP", Lists.newArrayList()));
+				typeDateMap.put(PRACTICE_AMOUNT,collect.getOrDefault("APPLY", Lists.newArrayList()));
+			}
 		});
 		CompletableFuture future3 = this.async(() -> {
-			indexBaseDtoList.add(this.getIndexBaseDto(IndexDataType.ORGAN_TOTAL_AMOUNT,indexBaseMonthDataDao.getOrganTotalAmountDataWithTimely(startDate1, endDate1, arrayList,tenantId)));
-			indexBaseDtoList.add(this.getIndexBaseDto(ORGAN_APPLY_AMOUNT,indexBaseMonthDataDao.getOrganTotalAmountDataWithTimelyDetails(startDate1, endDate1, arrayList,"APPLY,ADD_STUDENT",null,tenantId)));
+			indexBaseDtoList.add(this.getIndexBaseDto(ORGAN_VIP_AMOUNT,indexBaseMonthDataDao.getOrganVipAmountDataWithTimelyDetails(startDate1, endDate1, arrayList,tenantId)));
 		});
 		CompletableFuture future4 = this.async(() -> {
-			indexBaseDtoList.add(this.getIndexBaseDto(IndexDataType.ORGAN_FINANCE_BALANCE_AMOUNT,indexBaseMonthDataDao.getOrganFinanceBalanceDataWithTimely(startDate1, endDate1, arrayList,tenantId)));
-			indexBaseDtoList.add(this.getIndexBaseDto(ORGAN_FINANCE_AMOUNT,indexBaseMonthDataDao.getOrganFinanceActualDataWithTimely(startDate1, endDate1, arrayList,tenantId)));
+			indexBaseDtoList.add(this.getIndexBaseDto(ORGAN_OTHER_AMOUNT,indexBaseMonthDataDao.getOrganOtherAmountDataWithTimelyDetails(startDate1, endDate1, arrayList,tenantId)));
 		});
-
-		CompletableFuture future5 = this.async(()->{
-			typeDateMap.put(IndexDataType.FINANCE_BALANCE_AMOUNT,indexBaseMonthDataDao.getFinanceBalanceDataWithTimely(startDate1, endDate1, arrayList,tenantId));
-			typeDateMap.put(FINANCE_AMOUNT,indexBaseMonthDataDao.getFinanceActualDataWithTimely(startDate1, endDate1, arrayList,tenantId));
+		CompletableFuture future5 = this.async(() -> {
+			typeDateMap.put(VIP_AMOUNT,indexBaseMonthDataDao.getVipAmountDataWithTimelyDetails(startDate1, endDate1, arrayList,tenantId));
 		});
-		CompletableFuture future6 = this.async(()->{
-			List<IndexBaseMonthData> renewAmount = indexBaseMonthDataDao.getTotalAmountDataWithTimelyDetails(startDate1, endDate1, arrayList,"RENEW",null,tenantId);
-			typeDateMap.put(RENEW_AMOUNT,renewAmount);
-			List<IndexBaseMonthData> vipAmount = indexBaseMonthDataDao.getVipAmountDataWithTimelyDetails(startDate1, endDate1, arrayList,tenantId);
-			typeDateMap.put(VIP_AMOUNT,vipAmount);
+		CompletableFuture future6 = this.async(() -> {
+			typeDateMap.put(OTHER_AMOUNT,indexBaseMonthDataDao.getOtherAmountDataWithTimelyDetails(startDate1, endDate1, arrayList,tenantId));
 		});
 		CompletableFuture future7 = this.async(()->{
-			typeDateMap.put(IndexDataType.TOTAL_AMOUNT,indexBaseMonthDataDao.getTotalAmountDataWithTimely(startDate1, endDate1, arrayList,tenantId));
-			typeDateMap.put(APPLY_AMOUNT,indexBaseMonthDataDao.getTotalAmountDataWithTimelyDetails(startDate1, endDate1, arrayList,"APPLY,ADD_STUDENT",null,tenantId));
+			indexBaseDtoList.add(this.getIndexBaseDto(IndexDataType.ORGAN_FINANCE_BALANCE_AMOUNT,indexBaseMonthDataDao.getOrganFinanceBalanceDataWithTimely(startDate1, endDate1, arrayList,tenantId)));
+			indexBaseDtoList.add(this.getIndexBaseDto(ORGAN_FINANCE_AMOUNT,indexBaseMonthDataDao.getOrganFinanceActualDataWithTimely(startDate1, endDate1, arrayList,tenantId)));
 		});
 		CompletableFuture future8 = this.async(()->{
-			typeDateMap.put(PRACTICE_AMOUNT,indexBaseMonthDataDao.getTotalAmountDataWithTimelyDetails(startDate1, endDate1, arrayList,"PRACTICE_GROUP_BUY,PRACTICE_GROUP_RENEW",null,tenantId));
-			typeDateMap.put(OTHER_AMOUNT,indexBaseMonthDataDao.getOtherAmountDataWithTimelyDetails(startDate1, endDate1, arrayList,tenantId));
+			typeDateMap.put(IndexDataType.FINANCE_BALANCE_AMOUNT,indexBaseMonthDataDao.getFinanceBalanceDataWithTimely(startDate1, endDate1, arrayList,tenantId));
+			indexBaseDtoList.add(this.getIndexBaseDto(IndexDataType.ORGAN_TOTAL_AMOUNT,indexBaseMonthDataDao.getOrganTotalAmountDataWithTimely(startDate1, endDate1, arrayList,tenantId)));
+		});
+		CompletableFuture future9 = this.async(()->{
+			typeDateMap.put(FINANCE_AMOUNT,indexBaseMonthDataDao.getFinanceActualDataWithTimely(startDate1, endDate1, arrayList,tenantId));
+			typeDateMap.put(IndexDataType.TOTAL_AMOUNT,indexBaseMonthDataDao.getTotalAmountDataWithTimely(startDate1, endDate1, arrayList,tenantId));
 		});
 		future1.join();future2.join();future3.join();future4.join();
-		future5.join();future6.join();future7.join();future8.join();
+		future5.join();future6.join();future7.join();future8.join();future9.join();
 	}
 
 	@Override
@@ -502,7 +513,6 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.PART_TIME_NUM)) {
 			saveData(indexBaseMonthDataDao.getTeacherData(dayStr, JobNatureEnum.PART_TIME, null,tenantId), dayStr, IndexDataType.PART_TIME_NUM, tenantId);
 		}
-//		saveData(indexBaseMonthDataDao.getTeacherData(dayStr, null, true), dayStr, IndexDataType.DIMISSION_NUM);
 
 		//剩余课时
 		if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.SURPLUS_COURSE_NUM)) {
@@ -532,17 +542,6 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			saveData(indexBaseMonthDataDao.getGroupSurplusCourseData(dayStr, GroupType.PRACTICE, CourseStatusEnum.OVER,tenantId), dayStr, IndexDataType.OVER_PRACTICE_COURSE_NUM, tenantId);
 		}
 
-		//经营数据
-
-//		List<IndexBaseMonthData> financePayData = indexBaseMonthDataDao.getFinancePayData(dayStr);
-//		List<IndexBaseMonthData> financeBalanceData = indexBaseMonthDataDao.getFinanceBalanceData(dayStr);
-//		List<IndexBaseMonthData> financeActualData = indexBaseMonthDataDao.getFinanceActualData(dayStr);
-//
-//		saveData(financePayData,dayStr,IndexDataType.FINANCE_PAY);
-//		saveData(financeBalanceData,dayStr,IndexDataType.FINANCE_BALANCE_AMOUNT);
-//		saveData(financeActualData,dayStr,IndexDataType.FINANCE_AMOUNT);
-//		saveData(totalAmountData,dayStr,IndexDataType.TOTAL_AMOUNT);
-
 		//业务数据
 		if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.HOMEWORK_CREATE_RATE)) {
 			saveData(indexBaseMonthDataDao.getHomeworkData(dayStr, null,tenantId), monday.toString(), IndexDataType.HOMEWORK_CREATE_RATE, tenantId);

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

@@ -555,7 +555,7 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
     private void checkOrder(StudentPaymentOrder orderByOrderNo) throws Exception {
         if (StringUtils.isNotBlank(orderByOrderNo.getTransNo())) {
 
-            HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(orderByOrderNo.getTenantId());
+            HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(orderByOrderNo.getTenantId(), orderByOrderNo.getPaymentChannel());
             if(hfMerchantConfig == null){
             	throw new BizException("机构[{}]汇付商户信息找不到", orderByOrderNo.getTenantId());
             }

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

@@ -978,14 +978,14 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         classFee.put("instrument", BigDecimal.ZERO);
         classFee.put("accessories", BigDecimal.ZERO);
         classFee.put("other", amount);
-
+        
         String receiver = "sporadic";
 
         Map payMap = payService.getPayMap(
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 chargeInfo.getTitle(),
                 chargeInfo.getTitle(),
@@ -1116,7 +1116,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + studentPaymentOrder.getOrderNo(),
                 "续费",
                 "乐团续费",
@@ -1480,7 +1480,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 orderSubject,
                 orderSubject,

+ 95 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrderPayOpsServiceImpl.java

@@ -29,6 +29,11 @@ import org.springframework.util.DigestUtils;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.AlipayClient;
+import com.alipay.api.DefaultAlipayClient;
+import com.alipay.api.request.AlipaySystemOauthTokenRequest;
+import com.alipay.api.response.AlipaySystemOauthTokenResponse;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.PaymentParam;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
@@ -36,6 +41,7 @@ import com.ym.mec.biz.dal.entity.TenantConfig;
 import com.ym.mec.biz.dal.entity.TenantOrderRecord;
 import com.ym.mec.biz.dal.entity.TenantPaymentOrder;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.service.HfMerchantConfigService;
 import com.ym.mec.biz.service.OrderPayOpsService;
 import com.ym.mec.biz.service.StudentPaymentOrderService;
@@ -47,6 +53,7 @@ import com.ym.mec.common.page.WrapperUtil;
 import com.ym.mec.thirdparty.adapay.ConfigInit;
 import com.ym.mec.thirdparty.adapay.Payment;
 import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
+import com.ym.mec.thirdparty.yeepay.YeepayPaymentService;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
 import com.ym.mec.util.json.JsonUtil;
@@ -70,6 +77,9 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
     private HfMerchantConfigService hfMerchantConfigService;
     
     @Autowired
+    private YeepayPaymentService yeepayPaymentService;
+    
+    @Autowired
     private RedissonClient redissonClient;
     @Autowired
     private TenantConfigService tenantConfigService;
@@ -87,6 +97,14 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         if (payParam.getAmount() == null) {
             throw new Exception("PaymentParam query is null");
         }
+        
+        StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.findOrderByOrderNo(payParam.getOrderNo());
+        if(studentPaymentOrder == null) {
+        	throw new BizException("参数错误");
+        }
+        
+        payParam.setPayerName(studentPaymentOrder.getPaymentChannel());
+        
         //签名验证
         checkSing(payParam);
         //返回值
@@ -109,7 +127,7 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
     private void checkSing(PaymentParam param) {
         
         //查询商户支付账户
-        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(param.getTenantId());
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(param.getTenantId(), param.getPayerName());
         if(hfMerchantConfig == null){
         	throw new BizException("请配置机构的汇付商户信息");
         }
@@ -122,6 +140,7 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         signParams.put("orderSubject", param.getOrderSubject());
         signParams.put("orderBody", param.getOrderBody());
         signParams.put("wxAppId", hfMerchantConfig.getWxAppId());
+        signParams.put("alipayAppId", hfMerchantConfig.getAlipayAppId());
         String originalStr = JSONObject.toJSONString(signParams);
         String newSign = DigestUtils.md5DigestAsHex(originalStr.getBytes());
         if (!newSign.equals(param.getSign())) {
@@ -211,20 +230,71 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         String timeExpire = checkOrderTimeOut(createTime);
         
         //查询商户支付账户
-        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(payParam.getTenantId());
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(payParam.getTenantId(), payParam.getPayerName());
         if(hfMerchantConfig == null){
         	throw new BizException("请配置机构的汇付商户信息");
         }
         
-        //初始化支付数据
-        Map<String, Object> paymentParams = getPaymentParam(payParam, clazz, hfMerchantConfig.getPlatformPayeeMemberId());
-        paymentParams.put("time_expire", timeExpire);
-        paymentParams.put("expend", getExpend(hfMerchantConfig, payParam));
-        paymentParams.put("notify_url", payParam.getNotifyUrl());
-        //向第三方发起支付,获取第三方的支付的信息
-        Map<String, Object> payment = Payment.executePayment(hfMerchantConfig.getAppId(), hfMerchantConfig.getMerKey(), paymentParams);
+        Map<String, Object> payment = new HashMap<String, Object>();
+        String transNo = null;
+        
+        PaymentChannelEnum paymentChannel = PaymentChannelEnum.codeOf(payParam.getPayerName());
+        
+        switch (paymentChannel) {
+		case ADAPAY:
+
+	        //初始化支付数据
+	        Map<String, Object> paymentParams = getPaymentParam(payParam, clazz, hfMerchantConfig.getPlatformPayeeMemberId());
+	        paymentParams.put("time_expire", timeExpire);
+	        paymentParams.put("expend", getExpend(hfMerchantConfig, payParam));
+	        paymentParams.put("notify_url", payParam.getNotifyUrl());
+	        //向第三方发起支付,获取第三方的支付的信息
+	        payment = Payment.executePayment(hfMerchantConfig.getAppId(), hfMerchantConfig.getMerKey(), paymentParams);
+	        
+	        transNo = (String) payment.get("id");
+	        
+			break;
+		case YEEPAY:
+			
+			Map<String, Object> params = new HashMap<String, Object>();
+			params.put("parentMerchantNo", hfMerchantConfig.getPlatformPayeeMemberId());
+			params.put("merchantNo", hfMerchantConfig.getPlatformPayeeMemberId());
+			params.put("orderId", payParam.getOrderNo());
+			params.put("orderAmount", payParam.getAmount());
+			params.put("notifyUrl", payParam.getNotifyUrl());
+			params.put("redirectUrl", payParam.getReturnUrl());
+			params.put("scene", "OFFLINE");
+			params.put("goodsName", payParam.getOrderSubject());
+	        if (payParam.getTenantId() == 1) {
+                // 延时分账
+				params.put("fundProcessType", "DELAY_SETTLE");
+            }else {
+    			params.put("fundProcessType", "REAL_TIME");
+            }
+	        if(StringUtils.equals(payParam.getPayChannel(), "alipay_qr") || StringUtils.equals(payParam.getPayChannel(), "alipay_wap")) {
+				params.put("channel", "ALIPAY");
+				params.put("payWay", "ALIPAY_LIFE");
+				params.put("userId", getAlipayUserId(hfMerchantConfig, payParam.getCode()));
+				
+	        }else if(StringUtils.equals(payParam.getPayChannel(), "wx_pub")) {
+				params.put("channel", "WECHAT");
+				params.put("payWay", "WECHAT_OFFIACCOUNT");
+				params.put("appId", hfMerchantConfig.getWxAppId());
+				params.put("userId", getOpenId(hfMerchantConfig, payParam.getCode()));
+				
+	        }
+			params.put("userIp", payParam.getIp());
+			
+			payment = yeepayPaymentService.prePay(hfMerchantConfig, params);
+			
+			transNo = (String) payment.get("uniqueOrderNo");
+			
+			break;
+
+		default:
+			break;
+		}
         log.info("executePayment create order param >>>>> {}", JSON.toJSONString(payment));
-        String transNo = (String) payment.get("id");
         //修改流水
         setTransNoByApply(transNo, clazz, setOption, action);
 
@@ -283,6 +353,21 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         openId = weChatRes.get("openid");
         return openId;
     }
+    
+    private String getAlipayUserId(HfMerchantConfig hfMerchantConfig, String code) throws AlipayApiException {
+    	
+    	AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",hfMerchantConfig.getAlipayAppId(),hfMerchantConfig.getAlipayPrivateKey(),"json","GBK",hfMerchantConfig.getAlipayPublicKey(),"RSA2");
+    	AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
+    	request.setGrantType("authorization_code");
+    	request.setCode(code);
+    	//request.setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b");
+    	AlipaySystemOauthTokenResponse response = alipayClient.execute(request);
+    	if(response.isSuccess()){
+    		return response.getUserId();
+    	}
+    	log.error("支付宝获取UserId失败:{}", response.getSubMsg());
+    	throw new BizException("授权失败,请重新授权");
+    }
 
     private <T> Map<String, Object> getPaymentParam(PaymentParam payParam, T clazz, String platformAccount) {
         Map<String, Object> paymentParams = new HashMap<>();

+ 135 - 75
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java

@@ -96,11 +96,20 @@ public class PayServiceImpl implements PayService {
         	throw new BizException("订单[{}]查询失败", orderNo);
         }
         
+        //获取支付渠道
+		String paymentChannelStr = sysConfigDao.findConfigValue(SysConfigService.PAYMENT_CHANNEL);
+		
+		if(StringUtils.isBlank(paymentChannelStr)) {
+			paymentChannelStr = PaymentChannelEnum.ADAPAY.getCode();
+		}
+		
+		PaymentChannelEnum paymentChannel = PaymentChannelEnum.codeOf(paymentChannelStr);
+        
         Integer tenantId = studentPaymentOrder.getTenantId();
         
-        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId);
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId, paymentChannelStr);
         if(hfMerchantConfig == null){
-        	throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
+        	throw new BizException("机构[{}][{}]商户信息找不到", tenantId, paymentChannelStr);
         }
         
         if(tenantId != 1){//非大雅机构
@@ -124,12 +133,12 @@ public class PayServiceImpl implements PayService {
             studentPaymentRouteOrderDao.insert(studentPaymentRouteOrder);
             
             Map<String, Object> unionPay = new HashMap<>();
-            Map<String, Object> payMap = Payment.getPayMap(hfMerchantConfig, amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody);
-            
-            PaymentChannelEnum payType = PaymentChannelEnum.ADAPAY;
+            Map<String, Object> payMap = null;
 
+        	payMap = Payment.getPayMap(hfMerchantConfig, amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody);
+            
             unionPay.put("orderNo", orderNo);
-            unionPay.put("type", payType.getCode());
+            unionPay.put("type", paymentChannel.getCode());
             unionPay.put("payMap", payMap);
             unionPay.put("routingMerNos", merNo);
             return unionPay;
@@ -150,13 +159,20 @@ public class PayServiceImpl implements PayService {
 			if (StringUtils.equals("1", isPlatformCollection) && !ignoreOrganList.contains(organId)) {
 	        	
 	        	//String merNo = sysConfigDao.findConfigValue(SysConfigService.PLATFORM_PAYEE_ACCOUNT);
-				String merNo = "H004233";
+				//乐小雅收款
+				Integer routeOrganId = 123;
+				
+				HfMember receiverMember = hfMemberDao.getByOrganId(routeOrganId, paymentChannelStr);
+				
+				if(receiverMember == null) {
+	        		throw new BizException("分部[{}]收款账户查询失败", routeOrganId);
+				}
+				
+				String merNo = receiverMember.getMemberId();
 	        	if(StringUtils.isBlank(merNo)){
 	        		throw new BizException("平台收款账户查询失败");
 	        	}
 	        	
-	        	Integer routeOrganId = 123;
-	        	
 	        	StudentPaymentRouteOrder studentPaymentRouteOrder = new StudentPaymentRouteOrder();
 	            studentPaymentRouteOrder.setOrderNo(orderNo);
 	            studentPaymentRouteOrder.setRouteOrganId(routeOrganId);
@@ -172,12 +188,12 @@ public class PayServiceImpl implements PayService {
 	            studentPaymentRouteOrderDao.insert(studentPaymentRouteOrder);
 	            
 	            Map<String, Object> unionPay = new HashMap<>();
-	            Map<String, Object> payMap = Payment.getPayMap(hfMerchantConfig, amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody);
-	            
-	            PaymentChannelEnum payType = PaymentChannelEnum.ADAPAY;
+	            Map<String, Object> payMap = null;
+
+            	payMap = Payment.getPayMap(hfMerchantConfig, amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody);
 
 	            unionPay.put("orderNo", orderNo);
-	            unionPay.put("type", payType.getCode());
+	            unionPay.put("type", paymentChannel.getCode());
 	            unionPay.put("payMap", payMap);
 	            unionPay.put("routingMerNos", merNo);
 	            return unionPay;
@@ -397,30 +413,30 @@ public class PayServiceImpl implements PayService {
         List<RouteScaleDto> routeScaleDtos = null;
         //使用配置开关
         if (usePaymentConfig.equals("0")) {
-            routeScaleDtos = noUsePaymentConfig(amount); //款项都收到平台商户
+            routeScaleDtos = noUsePaymentConfig(paymentChannel, organId, amount); //款项都收到平台商户
         }
 
         //根据费用类型,mark
         if (routeScaleDtos == null) {
-            routeScaleDtos = getTypeRouteChannel(organId, orderNo, amount, balanceAmount);
+            routeScaleDtos = getTypeRouteChannel(paymentChannel, organId, orderNo, amount, balanceAmount);
         }
 
         //根据金额获取分润
         if (routeScaleDtos == null) {
-            routeScaleDtos = getAmountChannel(organId, amount, receiver);
+            routeScaleDtos = getAmountChannel(paymentChannel, organId, amount, receiver);
         }
         //零星支付,收到指定
         if (routeScaleDtos == null) {
-            routeScaleDtos = getSporadicChannel(amount, receiver);
+            routeScaleDtos = getSporadicChannel(paymentChannel, amount, receiver);
         }
         //比例或者笔数分佣
         if (routeScaleDtos == null) {
-            routeScaleDtos = getPaymentConfigChannel(organId, amount);
+            routeScaleDtos = getPaymentConfigChannel(paymentChannel, organId, amount);
         }
 
         //验证最大收款金额
         for (RouteScaleDto routeScaleDto : routeScaleDtos) {
-            checkMaxReceipt(routeScaleDto, routeScaleDto.getMerNo());
+            //checkMaxReceipt(paymentChannel, routeScaleDto, routeScaleDto.getMerNo());
         }
         
         /*if(routeScaleDtoForGoodsSell != null){
@@ -450,7 +466,7 @@ public class PayServiceImpl implements PayService {
 	public Map<String, Object> getPayToPlatformMap(Integer tenantId, PaymentChannelEnum paymentChannel, BigDecimal amount, BigDecimal balanceAmount, String orderNo, String notifyUrl, String returnUrl,
 			String orderSubject, String orderBody) throws Exception {
     	
-        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId);
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId, paymentChannel.getCode());
         if(hfMerchantConfig == null){
         	throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
         }
@@ -467,29 +483,31 @@ public class PayServiceImpl implements PayService {
 		return unionPay;
 	}
 
-	private List<RouteScaleDto> noUsePaymentConfig(BigDecimal amount) {
-        String paymentChannel = sysConfigDao.findConfigValue("payment_channel");
+	private List<RouteScaleDto> noUsePaymentConfig(PaymentChannelEnum paymentChannel, Integer organId, BigDecimal amount) {
         List<RouteScaleDto> routeScaleDtos = new ArrayList<>();
         RouteScaleDto routeScaleDto = new RouteScaleDto();
         routeScaleDto.setAmount(amount);
         routeScaleDto.setOrganId(ConfigInit.organId);
         routeScaleDto.setScale(100);
-        if (paymentChannel.equals("YQPAY")) {
-            routeScaleDto.setMerNo(YqPayUtil.merNo);
-            routeScaleDto.setPayType(PaymentChannelEnum.YQPAY);
-        } else {
-            routeScaleDto.setMerNo(ConfigInit.merNo);
-            routeScaleDto.setPayType(PaymentChannelEnum.ADAPAY);
-        }
+        
+    	HfMember hfMember = hfMemberDao.getByOrganId(routeScaleDto.getOrganId(), paymentChannel.getCode());
+    	
+    	if(hfMember == null) {
+    		throw new BizException("[{}]分部[{}]没有配置商户号", paymentChannel.getCode(), routeScaleDto.getOrganId());
+    	}
+    	
+        routeScaleDto.setMerNo(hfMember.getMemberId());
+        routeScaleDto.setPayType(paymentChannel);
+        
         routeScaleDto.setFeeFlag("Y");
         routeScaleDtos.add(routeScaleDto);
         return routeScaleDtos;
     }
 
-    private List<RouteScaleDto> getPaymentConfigChannel(Integer organId, BigDecimal amount) {
-        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(organId);
+    private List<RouteScaleDto> getPaymentConfigChannel(PaymentChannelEnum paymentChannel, Integer organId, BigDecimal amount) {
+        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(paymentChannel, organId);
         if (paymentConfig == null) {
-            return noUsePaymentConfig(amount);
+            return noUsePaymentConfig(paymentChannel, organId, amount);
         }
         if (StringUtils.isBlank(paymentConfig.getRouteScale())) {
             List<RouteScaleDto> routeScaleDtos = new ArrayList<>();
@@ -498,11 +516,15 @@ public class PayServiceImpl implements PayService {
             routeScaleDto.setOrganId(organId);
             routeScaleDto.setScale(100);
             routeScaleDto.setPayType(paymentConfig.getPayType());
-            if (paymentConfig.getPayType().equals(PaymentChannelEnum.YQPAY)) {
-                routeScaleDto.setMerNo(paymentConfig.getYqMerNo());
-            } else {
-                routeScaleDto.setMerNo(paymentConfig.getHfMerNo());
-            }
+
+        	HfMember hfMember = hfMemberDao.getByOrganId(paymentConfig.getOrganId(), paymentConfig.getPayType().getCode());
+        	
+        	if(hfMember == null) {
+        		throw new BizException("[{}]分部[{}]没有配置商户号", paymentConfig.getPayType().getCode(), paymentConfig.getOrganId());
+        	}
+        	
+        	routeScaleDto.setMerNo(hfMember.getMemberId());
+        	
             routeScaleDto.setFeeFlag("Y");
             routeScaleDtos.add(routeScaleDto);
             return routeScaleDtos;
@@ -517,11 +539,15 @@ public class PayServiceImpl implements PayService {
             routeScaleDto.setAmount(amount);
             for (SysPaymentConfig paymentConfigByOrganId : paymentConfigByOrganIds) {
                 if (!paymentConfigByOrganId.getOrganId().equals(routeScaleDto.getOrganId())) continue;
-                if (paymentConfig.getPayType().equals(PaymentChannelEnum.YQPAY)) {
-                    routeScaleDto.setMerNo(paymentConfigByOrganId.getYqMerNo());
-                } else {
-                    routeScaleDto.setMerNo(paymentConfigByOrganId.getHfMerNo());
-                }
+
+            	HfMember hfMember = hfMemberDao.getByOrganId(paymentConfigByOrganId.getOrganId(), paymentConfigByOrganId.getPayType().getCode());
+            	
+            	if(hfMember == null) {
+            		throw new BizException("[{}]分部[{}]没有配置商户号", paymentConfigByOrganId.getPayType().getCode(), paymentConfigByOrganId.getOrganId());
+            	}
+            	
+            	routeScaleDto.setMerNo(hfMember.getMemberId());
+            	
             }
         }
 
@@ -556,7 +582,7 @@ public class PayServiceImpl implements PayService {
      *
      * @param amount 金额
      */
-    private List<RouteScaleDto> getAmountChannel(Integer organId, BigDecimal amount, String receiver) {
+    private List<RouteScaleDto> getAmountChannel(PaymentChannelEnum paymentChannel, Integer organId, BigDecimal amount, String receiver) {
         String amountChannel = sysConfigDao.findConfigValue("amount_channel"); //按金额分润规则
         if (StringUtils.isBlank(amountChannel)) {
             return null;
@@ -586,11 +612,11 @@ public class PayServiceImpl implements PayService {
         }
 
         //调度到 鎏逸乐器经营部 检测限定金额
-        if (checkHasMaxReceipt(routeOrganId, amount)) {
+        if (checkHasMaxReceipt(paymentChannel, routeOrganId, amount)) {
             return null;
         }
 
-        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(routeOrganId);
+        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(paymentChannel, routeOrganId);
 
         RouteScaleDto routeScaleDto = new RouteScaleDto();
         List<RouteScaleDto> routeScaleDtos = new ArrayList<>();
@@ -598,11 +624,15 @@ public class PayServiceImpl implements PayService {
         routeScaleDto.setOrganId(paymentConfig.getOrganId());
         routeScaleDto.setPayType(paymentConfig.getPayType());
         routeScaleDto.setScale(100);
-        if (paymentConfig.getPayType().equals(PaymentChannelEnum.YQPAY)) {
-            routeScaleDto.setMerNo(paymentConfig.getYqMerNo());
-        } else {
-            routeScaleDto.setMerNo(paymentConfig.getHfMerNo());
-        }
+        
+    	HfMember hfMember = hfMemberDao.getByOrganId(paymentConfig.getOrganId(), paymentConfig.getPayType().getCode());
+    	
+    	if(hfMember == null) {
+    		throw new BizException("[{}]分部[{}]没有配置商户号", paymentConfig.getPayType().getCode(), paymentConfig.getOrganId());
+    	}
+
+        routeScaleDto.setMerNo(hfMember.getMemberId());
+        
         routeScaleDto.setFeeFlag("Y");
         routeScaleDtos.add(routeScaleDto);
         return routeScaleDtos;
@@ -614,7 +644,7 @@ public class PayServiceImpl implements PayService {
      * @param amount
      * @return
      */
-    private List<RouteScaleDto> getSporadicChannel(BigDecimal amount, String receiver) {
+    private List<RouteScaleDto> getSporadicChannel(PaymentChannelEnum paymentChannel, BigDecimal amount, String receiver) {
         if (receiver == null || !receiver.equals("sporadic")) {
             return null;
         }
@@ -631,11 +661,11 @@ public class PayServiceImpl implements PayService {
         }
 
         Integer organId = Integer.parseInt(channel.get("organId").toString());
-        if (checkHasMaxReceipt(organId, amount)) {
+        if (checkHasMaxReceipt(paymentChannel, organId, amount)) {
             return null;
         }
 
-        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(organId);
+        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(paymentChannel, organId);
 
         RouteScaleDto routeScaleDto = new RouteScaleDto();
         List<RouteScaleDto> routeScaleDtos = new ArrayList<>();
@@ -643,19 +673,22 @@ public class PayServiceImpl implements PayService {
         routeScaleDto.setOrganId(paymentConfig.getOrganId());
         routeScaleDto.setPayType(paymentConfig.getPayType());
         routeScaleDto.setScale(100);
-        if (paymentConfig.getPayType().equals(PaymentChannelEnum.YQPAY)) {
-            routeScaleDto.setMerNo(paymentConfig.getYqMerNo());
-        } else {
-            routeScaleDto.setMerNo(paymentConfig.getHfMerNo());
-        }
+        
+    	HfMember hfMember = hfMemberDao.getByOrganId(paymentConfig.getOrganId(), paymentConfig.getPayType().getCode());
+    	
+    	if(hfMember == null) {
+    		throw new BizException("[{}]分部[{}]没有配置商户号", paymentConfig.getPayType().getCode(), paymentConfig.getOrganId());
+    	}
+    	routeScaleDto.setMerNo(hfMember.getMemberId());
+    	
         routeScaleDto.setFeeFlag("Y");
         routeScaleDtos.add(routeScaleDto);
         return routeScaleDtos;
     }
 
     //按金额和零星支付(调度到 鎏逸乐器经营部 检测限定金额)
-    private Boolean checkHasMaxReceipt(Integer organId, BigDecimal amount) {
-        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(organId);
+    private Boolean checkHasMaxReceipt(PaymentChannelEnum paymentChannel, Integer organId, BigDecimal amount) {
+        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(paymentChannel, organId);
 
         if (!paymentConfig.getHfMerNo().equals("H004217")) {
             return false;
@@ -804,8 +837,8 @@ public class PayServiceImpl implements PayService {
      * @param amount
      * @return
      */
-    private List<RouteScaleDto> getTypeRouteChannel(Integer organId, String orderNo, BigDecimal amount, BigDecimal balanceAmount) {
-        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(organId);
+    private List<RouteScaleDto> getTypeRouteChannel(PaymentChannelEnum paymentChannel, Integer organId, String orderNo, BigDecimal amount, BigDecimal balanceAmount) {
+        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(paymentChannel, organId);
         if (paymentConfig == null || StringUtils.isBlank(paymentConfig.getTypeRouteScale())) {
             return null;
         }
@@ -873,13 +906,21 @@ public class PayServiceImpl implements PayService {
                 continue;
             }*/
 
+            HfMember hfMember = null;
+            
             for (SysPaymentConfig paymentConfigByOrganId : paymentConfigByOrganIds) {
-                if (!paymentConfigByOrganId.getOrganId().equals(routeScaleDto.getOrganId())) continue;
-                if (paymentConfig.getPayType().equals(PaymentChannelEnum.YQPAY)) {
-                    routeScaleDto.setMerNo(paymentConfigByOrganId.getYqMerNo());
-                } else {
-                    routeScaleDto.setMerNo(paymentConfigByOrganId.getHfMerNo());
-                }
+                
+            	if (!paymentConfigByOrganId.getOrganId().equals(routeScaleDto.getOrganId())) continue;
+            	
+            	hfMember = hfMemberDao.getByOrganId(paymentConfigByOrganId.getOrganId(), paymentConfig.getPayType().getCode());
+
+            	if(hfMember == null) {
+            		throw new BizException("[{}]分部[{}]没有配置商户号", paymentConfig.getPayType().getCode(), paymentConfigByOrganId.getOrganId());
+            	}
+            	
+            	
+            	routeScaleDto.setMerNo(hfMember.getMemberId());
+                
             }
         }
         Map<String, List<RouteScaleDto>> routeScaleDtosMap = routeScaleDtos.stream().collect(Collectors.groupingBy(RouteScaleDto::getMerNo));
@@ -954,9 +995,19 @@ public class PayServiceImpl implements PayService {
             routeScaleDto1.setBalance(totalBalanceAmount.multiply(musicGroupCourseTotalAmount).divide(totalBalanceAmount.add(totalCashAmount), 2, BigDecimal.ROUND_DOWN));
             routeScaleDto1.setSaleAmount(BigDecimal.ZERO);
             routeScaleDto1.setServiceAmount(routeScaleDto1.getAmount());
-            routeScaleDto1.setOrganId(50);
+            
+
+			Integer courseOrganId = 50;
+			
+			HfMember receiverMember = hfMemberDao.getByOrganId(courseOrganId, paymentChannel.getCode());
+			
+			if(receiverMember == null) {
+        		throw new BizException("分部[{}]收款账户查询失败", courseOrganId);
+			}
+			
+            routeScaleDto1.setOrganId(courseOrganId);
             routeScaleDto1.setFeeType(FeeTypeEnum.SERVICE);
-            routeScaleDto1.setMerNo("H004215");
+            routeScaleDto1.setMerNo(receiverMember.getMemberId());
             routeScaleDto1.setPayType(PaymentChannelEnum.ADAPAY);
             newRouteScaleDtos.add(routeScaleDto1);
 			
@@ -965,9 +1016,18 @@ public class PayServiceImpl implements PayService {
             routeScaleDto2.setBalance(totalBalanceAmount.subtract(routeScaleDto1.getBalance()));
             routeScaleDto2.setSaleAmount(BigDecimal.ZERO);
             routeScaleDto2.setServiceAmount(routeScaleDto2.getAmount());
-            routeScaleDto2.setOrganId(52);
+            
+            courseOrganId = 52;
+			
+			receiverMember = hfMemberDao.getByOrganId(courseOrganId, paymentChannel.getCode());
+			
+			if(receiverMember == null) {
+        		throw new BizException("分部[{}]收款账户查询失败", courseOrganId);
+			}
+			
+            routeScaleDto2.setOrganId(courseOrganId);
             routeScaleDto2.setFeeType(FeeTypeEnum.SERVICE);
-            routeScaleDto2.setMerNo("H004219");
+            routeScaleDto2.setMerNo(receiverMember.getMemberId());
             routeScaleDto2.setPayType(PaymentChannelEnum.ADAPAY);
             newRouteScaleDtos.add(routeScaleDto2);
 			
@@ -984,8 +1044,8 @@ public class PayServiceImpl implements PayService {
      * @param merNo
      * @return
      */
-    private RouteScaleDto checkMaxReceipt(RouteScaleDto routeScaleDto, String merNo) {
-        HfMember hfmember = hfMemberDao.getByMemberId(routeScaleDto.getMerNo());
+    private RouteScaleDto checkMaxReceipt(PaymentChannelEnum paymentChannel, RouteScaleDto routeScaleDto, String merNo) {
+        HfMember hfmember = hfMemberDao.getByMemberId(routeScaleDto.getMerNo(), paymentChannel.getCode());
         if (hfmember == null || hfmember.getMonthMaxReceipt().compareTo(BigDecimal.ZERO) <= 0) {
             return routeScaleDto;
         }
@@ -1022,7 +1082,7 @@ public class PayServiceImpl implements PayService {
             if (routeScaleDto.getMerNo().equals(merNo)) {
                 return routeScaleDto;
             }
-            return checkMaxReceipt(routeScaleDto, merNo);
+            return checkMaxReceipt(paymentChannel, routeScaleDto, merNo);
         }
         return routeScaleDto;
     }

+ 5 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -2619,7 +2619,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                     amount,
                     balance,
                     orderNo,
-                    baseApiUrl + "/api-student/studentOrder/callback",
+                    baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                     baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                     "网管课购买",
                     practiceGroupBuyParams.getName(),
@@ -3086,7 +3086,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                     amount,
                     balance,
                     orderNo,
-                    baseApiUrl + "/api-student/studentOrder/callback",
+                    baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                     baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                     "网管课购买",
                     practiceGroupBuyParams.getName(),
@@ -3599,7 +3599,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                 newOrder.getActualAmount(),
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 "网管课购买",
                 practiceGroup.getName(),
@@ -4302,7 +4302,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 "网管课购买",
                 practiceGroup.getName(),
@@ -4484,7 +4484,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                 activityFee,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 orderSubject,
                 orderSubject,

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

@@ -417,7 +417,7 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 orderSubject,
                 orderSubject,

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

@@ -193,7 +193,7 @@ public class StudentInstrumentServiceImpl extends BaseServiceImpl<Long, StudentI
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 orderSubject,
                 orderSubject,

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

@@ -1,18 +1,121 @@
 package com.ym.mec.biz.service.impl;
 
+import static com.ym.mec.biz.dal.enums.DealStatusEnum.CLOSE;
+import static com.ym.mec.biz.dal.enums.DealStatusEnum.SUCCESS;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.*;
-import com.ym.mec.biz.dal.dto.*;
-import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.biz.dal.enums.*;
+import com.ym.mec.biz.dal.dao.CourseScheduleStudentPaymentDao;
+import com.ym.mec.biz.dal.dao.GoodsDao;
+import com.ym.mec.biz.dal.dao.GoodsProcurementDao;
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
+import com.ym.mec.biz.dal.dao.SellOrderDao;
+import com.ym.mec.biz.dal.dao.StudentDao;
+import com.ym.mec.biz.dal.dao.StudentGoodsSellDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentRouteOrderDao;
+import com.ym.mec.biz.dal.dao.StudentRepairDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
+import com.ym.mec.biz.dal.dto.GoodsOrderItemVO;
+import com.ym.mec.biz.dal.dto.OperatingTotalIncomeDto;
+import com.ym.mec.biz.dal.dto.PageInfoOrder;
+import com.ym.mec.biz.dal.dto.SporadicChargeInfoDto;
+import com.ym.mec.biz.dal.dto.StudentGoodsSellDto;
+import com.ym.mec.biz.dal.dto.StudentPaymentOrderDto;
+import com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto;
+import com.ym.mec.biz.dal.entity.ActivityUserMapper;
+import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
+import com.ym.mec.biz.dal.entity.Goods;
+import com.ym.mec.biz.dal.entity.GoodsProcurement;
+import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.entity.MusicGroupSubjectPlan;
+import com.ym.mec.biz.dal.entity.SellOrder;
+import com.ym.mec.biz.dal.entity.StudentGoodsSell;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
+import com.ym.mec.biz.dal.entity.StudentPaymentRouteOrder;
+import com.ym.mec.biz.dal.entity.StudentRegistration;
+import com.ym.mec.biz.dal.entity.SysUserCashAccount;
+import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
+import com.ym.mec.biz.dal.entity.VipGroupActivity;
+import com.ym.mec.biz.dal.enums.AccountType;
+import com.ym.mec.biz.dal.enums.CourseViewTypeEnum;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.GoodsType;
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
+import com.ym.mec.biz.dal.enums.PayStatus;
+import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
+import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.SellStatus;
+import com.ym.mec.biz.dal.enums.SellTypeEnum;
+import com.ym.mec.biz.dal.enums.SporadicChargeTypeEnum;
+import com.ym.mec.biz.dal.enums.StockType;
+import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
 import com.ym.mec.biz.dal.page.SporadicOrderQueryInfo;
 import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
 import com.ym.mec.biz.dal.vo.StudentPaymentOrderVo;
-import com.ym.mec.biz.service.*;
+import com.ym.mec.biz.service.ActivityUserMapperService;
+import com.ym.mec.biz.service.ChildrenDayReserveService;
+import com.ym.mec.biz.service.CloudTeacherOrderService;
+import com.ym.mec.biz.service.ContractService;
+import com.ym.mec.biz.service.DegreeRegistrationService;
+import com.ym.mec.biz.service.GoodsService;
+import com.ym.mec.biz.service.HfMerchantConfigService;
+import com.ym.mec.biz.service.MemberRankSettingService;
+import com.ym.mec.biz.service.MusicGroupService;
+import com.ym.mec.biz.service.MusicGroupSubjectPlanService;
+import com.ym.mec.biz.service.PayService;
+import com.ym.mec.biz.service.PracticeGroupService;
+import com.ym.mec.biz.service.ReplacementInstrumentActivityService;
+import com.ym.mec.biz.service.SporadicChargeInfoService;
+import com.ym.mec.biz.service.StudentInstrumentService;
+import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
+import com.ym.mec.biz.service.StudentPaymentRouteOrderService;
+import com.ym.mec.biz.service.StudentRegistrationService;
+import com.ym.mec.biz.service.StudentRepairService;
+import com.ym.mec.biz.service.SubjectChangeService;
+import com.ym.mec.biz.service.SysCouponCodeService;
+import com.ym.mec.biz.service.SysPaymentConfigService;
+import com.ym.mec.biz.service.SysUserCashAccountDetailService;
+import com.ym.mec.biz.service.SysUserCashAccountService;
+import com.ym.mec.biz.service.TenantConfigService;
+import com.ym.mec.biz.service.VipGroupActivityService;
+import com.ym.mec.biz.service.VipGroupService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -29,29 +132,15 @@ import com.ym.mec.thirdparty.adapay.ConfigInit;
 import com.ym.mec.thirdparty.adapay.Payment;
 import com.ym.mec.thirdparty.adapay.entity.BaseResult;
 import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
-import com.ym.mec.thirdparty.yqpay.*;
+import com.ym.mec.thirdparty.yeepay.YeepayPaymentService;
+import com.ym.mec.thirdparty.yqpay.DateUtils;
+import com.ym.mec.thirdparty.yqpay.Msg;
+import com.ym.mec.thirdparty.yqpay.RsqMsg;
+import com.ym.mec.thirdparty.yqpay.YqPayFeignService;
+import com.ym.mec.thirdparty.yqpay.YqPayUtil;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.http.HttpStatus;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.math.BigDecimal;
-import java.util.*;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.stream.Collectors;
-
-import static com.ym.mec.biz.dal.enums.DealStatusEnum.CLOSE;
-import static com.ym.mec.biz.dal.enums.DealStatusEnum.SUCCESS;
-
 @Service
 public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, StudentPaymentOrder> implements StudentPaymentOrderService {
 
@@ -133,6 +222,9 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     private StudentDao studentDao;
     @Autowired
     private SysUserCashAccountDetailService sysUserCashAccountDetailService;
+	
+    @Autowired
+    private YeepayPaymentService yeepayPaymentService;
     @Autowired
     private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
 
@@ -201,7 +293,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             return notifyMap;
         }
 
-        Map<String, Object> payMap = payService.getPayMap(cashAmount, balance, studentPaymentOrder.getOrderNo(), baseApiUrl + "/api-student/studentOrder/callback", baseApiUrl
+        Map<String, Object> payMap = payService.getPayMap(cashAmount, balance, studentPaymentOrder.getOrderNo(), 
+                baseApiUrl + "/api-student/studentOrder/callback/" + studentPaymentOrder.getOrderNo(), baseApiUrl
                 + "/api-student/studentOrder/paymentResult?orderNo=" + studentPaymentOrder.getOrderNo(), studentPaymentOrder.getMemo(), studentPaymentOrder.getMemo(), studentPaymentOrder.getOrganId(), payReceiver);
 
         studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
@@ -237,8 +330,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     }
 
     @Override
-    public List<StudentPaymentOrder> findOrdersByStatus(DealStatusEnum status, String paymentChannel) {
-        return studentPaymentOrderDao.findOrdersByStatus(status, paymentChannel);
+    public List<StudentPaymentOrder> findOrdersByStatus(DealStatusEnum status) {
+        return studentPaymentOrderDao.findOrdersByStatus(status);
     }
 
     @Override
@@ -247,15 +340,16 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     }
 
     @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public void queryOrderStatus() throws Exception {
-        yqPayQuery(null);
+        //yqPayQuery(null);
         adaPayQuery(null);
-        reConfirmOrder(null, null);
+        //reConfirmOrder(null, null);
     }
 
     private void yqPayQuery(List<StudentPaymentOrder> payingOrders) throws Exception {
         if (payingOrders == null) {
-            payingOrders = findOrdersByStatus(DealStatusEnum.ING, "YQPAY");
+            payingOrders = findOrdersByStatus(DealStatusEnum.ING);
         }
         if (payingOrders.size() == 0) {
             return;
@@ -301,7 +395,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
 
     private void adaPayQuery(List<StudentPaymentOrder> payingOrders) throws Exception {
         if (payingOrders == null) {
-            payingOrders = findOrdersByStatus(DealStatusEnum.ING, "ADAPAY");
+            payingOrders = findOrdersByStatus(DealStatusEnum.ING);
         }
 
         Date date = new Date();
@@ -310,9 +404,6 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             return;
         }
         
-        Map<Integer,HfMerchantConfig> payConfigMap = new HashMap<Integer, HfMerchantConfig>();
-        HfMerchantConfig hfMerchantConfig = null;
-        
         List<String> orderNoList = new ArrayList<String>();
 
         for (StudentPaymentOrder payingOrder : payingOrders) {
@@ -328,30 +419,49 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             if (DateUtil.minutesBetween(payingOrder.getCreateTime(), date) < 10) {
                 continue;
             }
-
-            updateOrderStatus(date, payConfigMap, payingOrder,true);
+            try {
+            	updateOrderStatus(date, payingOrder);
+            }catch (Exception e) {
+				logger.error("执行[订单状态查询]任务失败", e);
+			}
         }
         closeOrders(orderNoList);
     }
 
     @Override
     @Transactional
-    public OrderCancelModel updateOrderStatus(Date date, Map<Integer, HfMerchantConfig> payConfigMap, StudentPaymentOrder payingOrder, Boolean checkTime) throws Exception {
-        if (payConfigMap == null) {
-            throw new BizException("payConfigMap 不能为空");
-        }
-        HfMerchantConfig hfMerchantConfig;
-        hfMerchantConfig = payConfigMap.get(payingOrder.getTenantId());
+    public OrderCancelModel updateOrderStatus(Date date, StudentPaymentOrder payingOrder) throws Exception {
+    	
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(payingOrder.getTenantId(), payingOrder.getPaymentChannel());
         if(hfMerchantConfig == null){
-            hfMerchantConfig = hfMerchantConfigService.queryByTenantId(payingOrder.getTenantId());
-            if(hfMerchantConfig == null){
-                throw new BizException("机构[{}]汇付商户信息找不到", payingOrder.getTenantId());
-            }
-            payConfigMap.put(payingOrder.getTenantId(), hfMerchantConfig);
+            throw new BizException("机构[{}]汇付商户信息找不到", payingOrder.getTenantId());
         }
+        
+        PaymentChannelEnum paymentChannel = PaymentChannelEnum.codeOf(payingOrder.getPaymentChannel());
+        
         OrderCancelModel  model = new OrderCancelModel();
+        Map<String, Object> payment = new HashMap<String, Object>();
 
-        Map<String, Object> payment = Payment.queryPayment(payingOrder.getTransNo(), hfMerchantConfig.getMerKey());
+        if(paymentChannel == PaymentChannelEnum.ADAPAY) {
+        	payment = Payment.queryPayment(payingOrder.getTransNo(), hfMerchantConfig.getMerKey());
+        }else if(paymentChannel == PaymentChannelEnum.YEEPAY) {
+        	Map<String, Object> orderInfo = yeepayPaymentService.queryOrder(hfMerchantConfig, payingOrder.getMerNos(), payingOrder.getOrderNo());
+        	payment.put("pay_channel", orderInfo.get("channel"));
+        	
+        	String respStatus = orderInfo.get("status").toString();
+        	
+        	if(StringUtils.equals("SUCCESS", respStatus)) {
+            	payment.put("status", "succeeded");
+        	}else if(StringUtils.equals("FAIL", respStatus) || StringUtils.equals("TIME_OUT", respStatus) || StringUtils.equals("CLOSE", respStatus)) {
+            	payment.put("status", "failed");
+        	}else {
+        		payment.put("status", "pending");
+        	}
+        	payment.put("error_msg", orderInfo.get("failReason"));
+        }else {
+        	throw new BizException("[{}]支付渠道不支持", payingOrder.getPaymentChannel());
+        }
+        
         LOGGER.warn("订单[{}]交易主动查询接口返回:{}", payingOrder.getTransNo(), payment);
 
         Map<String, String> rpMap = new HashMap<>();
@@ -366,14 +476,14 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         if (status.equals("succeeded")) {
             rpMap.put("tradeState", "1");
             model.setStatus(true);
-        } else if (status.equals("failed") || !checkTime
+        } else if (status.equals("failed")
                 || (DateUtil.minutesBetween(DateUtil.addHours(payingOrder.getUpdateTime(), 2),date) > 0)) {
             rpMap.put("tradeState", "0");
             model.setStatus(false);
         }
 
         if (status.equals("succeeded") ||
-                (status.equals("failed") || !checkTime || payingOrder.getCreateTime().before(DateUtil.addMinutes(new Date(), -35)))) {
+                (status.equals("failed") || payingOrder.getCreateTime().before(DateUtil.addMinutes(new Date(), -35)))) {
             try {
                 updateOrder(rpMap); //更新订单
                 model.setSuccess(true);
@@ -401,7 +511,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void updateOrder(Map<String, String> rpMap) throws Exception {
-        DealStatusEnum status = rpMap.get("tradeState").equals("1") ? DealStatusEnum.SUCCESS : DealStatusEnum.FAILED;
+        DealStatusEnum status = "1".equals(rpMap.get("tradeState")) ? DealStatusEnum.SUCCESS : DealStatusEnum.FAILED;
         StudentPaymentOrder order = findOrderByOrderNo(rpMap.get("merOrderNo"));
         //关闭或失败的订单查询订单成功,订单改成成功,钱退到余额
         if (order != null && (order.getStatus().equals(DealStatusEnum.CLOSE) || order.getStatus().equals(DealStatusEnum.FAILED)) && status.equals(DealStatusEnum.SUCCESS)) {
@@ -421,7 +531,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                     PlatformCashAccountDetailTypeEnum.REFUNDS, order.getMemo() + ",订单号:" + order.getOrderNo());
 
             if (StringUtils.isNotBlank(order.getPaymentChannel())
-                    && order.getPaymentChannel().equals("ADAPAY")
+                    && (order.getPaymentChannel().equals(PaymentChannelEnum.ADAPAY.getCode()) || order.getPaymentChannel().equals(PaymentChannelEnum.YEEPAY.getCode()))
                     && !rpMap.containsKey("simulation")) {
                 confirmOrder(order);
             }
@@ -459,7 +569,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         TenantContextHolder.clearTenantId();
     }
 
-    private Boolean confirmOrder(StudentPaymentOrder order) {
+    public Boolean confirmOrder(StudentPaymentOrder order) {
         // 只有大雅延迟分账,其他实时分账
         if (order.getTenantId() != 1) {
             return true;
@@ -469,39 +579,118 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         HfMerchantConfig hfMerchantConfig = null;
         
         List<StudentPaymentRouteOrder> routeOrders = studentPaymentRouteOrderDao.getRouteOrders(order.getOrderNo());
-        for (StudentPaymentRouteOrder routeOrder : routeOrders) {
-        	if(hfMerchantConfig == null){
-        		hfMerchantConfig = hfMerchantConfigService.queryByTenantId(routeOrder.getTenantId());
-        	}
-            if(hfMerchantConfig == null){
-            	throw new BizException("机构[{}]汇付商户信息找不到", routeOrder.getTenantId());
-            }
+        
+        PaymentChannelEnum paymentChannel = PaymentChannelEnum.codeOf(order.getPaymentChannel());
+        
+
+    	if(hfMerchantConfig == null){
+    		hfMerchantConfig = hfMerchantConfigService.queryByTenantId(order.getTenantId(), order.getPaymentChannel());
+    	}
+        if(hfMerchantConfig == null){
+        	throw new BizException("机构[{}][{}]商户信息找不到", order.getTenantId(), order.getPaymentChannel());
+        }
+        
+        StudentPaymentRouteOrder studentPaymentRouteOrder = null;
+        
+        if(paymentChannel == PaymentChannelEnum.ADAPAY) {
+        	
+            List<Map<String, Object>> divMembers = new ArrayList<>();
             
-            Map<String, Object> divMember = new HashMap<>();
-            divMember.put("member_id", routeOrder.getMerNo());//分佣账户
-            divMember.put("amount", routeOrder.getRouteAmount().setScale(2, BigDecimal.ROUND_HALF_UP));//分佣金额
-            divMember.put("fee_flag", "Y");
-            if (routeOrder.getMerNo().equals(ConfigInit.merNo)) {
-                divMember.put("member_id", 0);
+        	for (StudentPaymentRouteOrder routeOrder : routeOrders) {
+                Map<String, Object> divMember = new HashMap<>();
+                divMember.put("member_id", routeOrder.getMerNo());//分佣账户
+                divMember.put("amount", routeOrder.getRouteAmount().setScale(2, BigDecimal.ROUND_HALF_UP));//分佣金额
+                divMember.put("fee_flag", "Y");
+                if (routeOrder.getMerNo().equals(ConfigInit.merNo)) {
+                    divMember.put("member_id", 0);
+                }
+                divMembers.add(divMember);
             }
-            List<Map<String, Object>> divMembers = new ArrayList<>();
-            divMembers.add(divMember);
 
-            Map<String, Object> confirm = new HashMap<>();
-            confirm.put("payment_id", order.getTransNo());
-            confirm.put("order_no", idGeneratorService.generatorId("payment"));
-            confirm.put("confirm_amt", routeOrder.getRouteAmount());
-            confirm.put("div_members", divMembers);
-            try {
-                Map<String, Object> map = Payment.createConfirm(confirm, hfMerchantConfig.getMerKey());
-                LOGGER.info("分账信息返回:{}", map);
-                routeOrder.setServiceFee(new BigDecimal(map.get("fee_amt").toString()));
-                routeOrder.setUpdateTime(date);
-                studentPaymentRouteOrderDao.update(routeOrder);
-            } catch (Exception e) {
-                continue;
-            }
-        }
+			Map<String, Object> confirm = new HashMap<>();
+			confirm.put("payment_id", order.getTransNo());
+			confirm.put("order_no", idGeneratorService.generatorId("payment"));
+			confirm.put("confirm_amt", order.getActualAmount());
+			confirm.put("div_members", divMembers);
+
+			Map<String, Object> map = new HashMap<String, Object>();
+			try {
+				map = Payment.createConfirm(confirm, hfMerchantConfig.getMerKey());
+				LOGGER.info("分账信息返回:{}", map);
+			} catch (Exception e) {
+				throw new BizException("调用汇付分账接口出现异常", e);
+			}
+			
+			BigDecimal totalFee = new BigDecimal(map.get("fee_amt").toString());
+			BigDecimal tmpFee = BigDecimal.ZERO;
+			
+			for(int i = 0; i < routeOrders.size(); i++) {
+				studentPaymentRouteOrder = routeOrders.get(i);
+				
+        		
+        		if(i + 1 == routeOrders.size()) {
+        			studentPaymentRouteOrder.setServiceFee(totalFee.subtract(tmpFee));
+        		}else {
+        			studentPaymentRouteOrder.setServiceFee(studentPaymentRouteOrder.getRouteAmount().multiply(totalFee).divide(order.getActualAmount(), 2, BigDecimal.ROUND_HALF_UP));
+        			tmpFee = tmpFee.add(studentPaymentRouteOrder.getServiceFee());
+        		}
+        		studentPaymentRouteOrder.setUpdateTime(date);
+
+                studentPaymentRouteOrderDao.update(studentPaymentRouteOrder);
+			}
+			
+		} else if (paymentChannel == PaymentChannelEnum.YEEPAY) {
+			try {
+				Map<String, Object> params = new HashMap<String, Object>();
+				params.put("parentMerchantNo", hfMerchantConfig.getPlatformPayeeMemberId());
+				params.put("merchantNo", order.getMerNos());
+				params.put("orderId", order.getOrderNo());
+				params.put("uniqueOrderNo", order.getTransNo());
+				params.put("divideRequestId", idGeneratorService.generatorId("payment") + "");
+
+				Map<String, Object> orderInfo = yeepayPaymentService.queryOrder(hfMerchantConfig, order.getMerNos(), order.getOrderNo());
+				if (orderInfo == null) {
+					throw new BizException("[{}][{}]订单查询失败", paymentChannel, order.getOrderNo());
+				}
+				BigDecimal splitAmount = new BigDecimal(orderInfo.get("unSplitAmount").toString());
+
+				Map<String, String> divides = new HashMap<String, String>();
+
+				BigDecimal divideAmount = BigDecimal.ZERO;
+				BigDecimal dividedAmount = BigDecimal.ZERO;
+				for (int i = 0; i < routeOrders.size(); i++) {
+
+					studentPaymentRouteOrder = routeOrders.get(i);
+
+					divides.put("ledgerNo", studentPaymentRouteOrder.getMerNo());
+
+					if (i + 1 == routeOrders.size()) {
+						divideAmount = splitAmount.subtract(dividedAmount);
+						divides.put("amount", divideAmount.toPlainString());
+					} else {
+						divideAmount = studentPaymentRouteOrder.getRouteAmount().multiply(splitAmount).divide(order.getActualAmount(), 2,
+								BigDecimal.ROUND_HALF_UP);
+						divides.put("amount", divideAmount.toPlainString());
+					}
+					dividedAmount = dividedAmount.add(divideAmount);
+
+					studentPaymentRouteOrder.setServiceFee(studentPaymentRouteOrder.getRouteAmount().subtract(divideAmount));
+					studentPaymentRouteOrder.setUpdateTime(date);
+				}
+				params.put("divideDetail", JSON.toJSONString(divides));
+
+				Map<String, Object> result = yeepayPaymentService.divide(hfMerchantConfig, params);
+				LOGGER.info("分账信息返回:{}", JSON.toJSONString(result));
+			} catch (IOException e) {
+				throw new BizException("调用易宝接口报错", e);
+			}
+
+			for (StudentPaymentRouteOrder spro : routeOrders) {
+
+				studentPaymentRouteOrderDao.update(spro);
+			}
+		}
+        
         return true;
     }
 
@@ -701,7 +890,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         StudentPaymentOrder studentPaymentOrder = studentPaymentOrderDao.get(id);
         List<StudentPaymentOrder> orderList = new ArrayList<>();
         orderList.add(studentPaymentOrder);
-        if (studentPaymentOrder.getPaymentChannel().equals("ADAPAY")) {
+        if (studentPaymentOrder.getPaymentChannel().equals(PaymentChannelEnum.ADAPAY.getCode()) || studentPaymentOrder.getPaymentChannel().equals(PaymentChannelEnum.YEEPAY.getCode())) {
             adaPayQuery(orderList);
         } else if (studentPaymentOrder.getPaymentChannel().equals("YQPAY")) {
             yqPayQuery(orderList);
@@ -813,11 +1002,13 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         if (StringUtils.isBlank(transNo)) {
             return PayStatus.FAILED;
         }
+        
+    	HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(studentPaymentOrder.getTenantId(), studentPaymentOrder.getPaymentChannel());
+        if(hfMerchantConfig == null){
+        	throw new BizException("机构[{}]汇付商户信息找不到", studentPaymentOrder.getTenantId());
+        }
+        
         if (StringUtils.equals(paymentChannel, "ADAPAY")) {
-        	HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(studentPaymentOrder.getTenantId());
-            if(hfMerchantConfig == null){
-            	throw new BizException("机构[{}]汇付商户信息找不到", studentPaymentOrder.getTenantId());
-            }
             Map<String, Object> payment = Payment.queryPayment(transNo, hfMerchantConfig.getMerKey());
             String status = (String) payment.get("status");
             if (status.equals("succeeded")) {
@@ -852,6 +1043,24 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                     }
                 }
             }
+        }else if (StringUtils.equals(paymentChannel, "YEEPAY")) {
+        	Map<String, Object> result = yeepayPaymentService.queryOrder(hfMerchantConfig, studentPaymentOrder.getMerNos(), orderNo);
+        	
+        	if("OPR00000".equals(result.get("code").toString())) {
+
+            	String status = result.get("status").toString();
+            	if (status.equals("SUCCESS")) {
+                    return PayStatus.SUCCESSED;
+                } else if (status.equals("TIME_OUT") || status.equals("FAIL") || status.equals("CLOSE")) {
+                    return PayStatus.FAILED;
+                } else {
+                    return PayStatus.PAYING;
+                }
+        	}else if("OPR12002".equals(result.get("code").toString())) {
+        		//订单不存在
+        		return PayStatus.FAILED;
+        	}
+            throw new BizException(result.get("message").toString());
         }
         throw new BizException("支付渠道错误");
     }
@@ -1613,7 +1822,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     public OrderCancelModel cancelOrder(StudentPaymentOrder order, String reason) {
         OrderCancelModel model = new OrderCancelModel();
         try {
-            HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(order.getTenantId());
+            HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(order.getTenantId(), order.getPaymentChannel());
             if(hfMerchantConfig == null){
                 throw new BizException("机构[{}]汇付商户信息找不到", order.getTenantId());
             }
@@ -1653,7 +1862,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             throw new BizException("0元订单");
         }
 
-        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(orderByOrderNo.getTenantId());
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(orderByOrderNo.getTenantId(), orderByOrderNo.getPaymentChannel());
         if(hfMerchantConfig == null){
             throw new BizException("请配置机构的汇付商户信息");
         }

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

@@ -81,7 +81,7 @@ public class StudentRechargeServiceImpl extends BaseServiceImpl<String, StudentR
         String baseApiUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
 
 		try {
-			return payService.getPayMap(amount, BigDecimal.ZERO,studentRecharge.getOrderNo(), baseApiUrl + "/api-student/studentOrder/callback", baseApiUrl, "充值",
+			return payService.getPayMap(amount, BigDecimal.ZERO,studentRecharge.getOrderNo(), baseApiUrl + "/api-student/studentOrder/callback/" + studentRecharge.getOrderNo(), baseApiUrl, "充值",
 					"充值",userId,null);
 		} catch (Exception e) {
 			throw new BizException("调用支付接口出错", e);

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

@@ -459,7 +459,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?type=edu&orderNo=" + orderNo,
                 "商品销售",
                 "商品销售",
@@ -578,7 +578,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?type=edu&orderNo=" + orderNo,
                 "商品销售",
                 "商品销售",
@@ -799,7 +799,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?type=edu&orderNo=" + orderNo,
                 "乐器维修",
                 "乐器维修",
@@ -1054,7 +1054,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 "乐器维修",
                 "乐器维修",

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

@@ -449,7 +449,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 "声部更换",
                 "声部更换",

+ 27 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysPaymentConfigServiceImpl.java

@@ -1,6 +1,14 @@
 package com.ym.mec.biz.service.impl;
 
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.ym.mec.biz.dal.dao.HfMemberDao;
 import com.ym.mec.biz.dal.dao.SysPaymentConfigDao;
+import com.ym.mec.biz.dal.entity.HfMember;
 import com.ym.mec.biz.dal.entity.SysPaymentConfig;
 import com.ym.mec.biz.dal.enums.AccountType;
 import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
@@ -8,16 +16,13 @@ import com.ym.mec.biz.service.SysPaymentConfigService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
 @Service
 public class SysPaymentConfigServiceImpl extends BaseServiceImpl<Integer, SysPaymentConfig> implements SysPaymentConfigService {
     @Autowired
     private SysPaymentConfigDao sysPaymentConfigDao;
+    
+    @Autowired
+    private HfMemberDao hfMemberDao;
 
     @Override
     public BaseDAO<Integer, SysPaymentConfig> getDAO() {
@@ -25,8 +30,22 @@ public class SysPaymentConfigServiceImpl extends BaseServiceImpl<Integer, SysPay
     }
 
     @Override
-    public SysPaymentConfig findPaymentConfigByOrganId(Integer organId) {
-        return sysPaymentConfigDao.findPaymentConfigByOrganId(organId);
+	public SysPaymentConfig findPaymentConfigByOrganId(Integer organId) {
+		return sysPaymentConfigDao.findPaymentConfigByOrganId(organId);
+	}
+
+	@Override
+    public SysPaymentConfig findPaymentConfigByOrganId(PaymentChannelEnum paymentChannel, Integer organId) {
+    	SysPaymentConfig sysPaymentConfig =  sysPaymentConfigDao.findPaymentConfigByOrganId(organId);
+    	
+    	if(sysPaymentConfig != null) {
+    		HfMember hfMember = hfMemberDao.getByOrganId(organId, paymentChannel.getCode());
+    		sysPaymentConfig.setHfMerNo(hfMember.getMemberId());
+    		sysPaymentConfig.setYqMerNo(hfMember.getMemberId());
+    		sysPaymentConfig.setPayType(PaymentChannelEnum.codeOf(hfMember.getPayerName()));
+    	}
+    	
+    	return sysPaymentConfig;
     }
 
     @Override

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

@@ -422,7 +422,7 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
                             }
 
                             for (StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail studentLessonTrainingDetail : scoreSubjectDto.getStudentLessonTrainingDetails()) {
-                                studentLessonTrainingDetail.setSubjectId(scoreSubjectDto.getSubjectId());
+                                studentLessonTrainingDetail.setSubjectId(0);
                             }
                             studentLessonTrainingDetails.addAll(studentLessonTrainingDetailService
                                                                     .homeWorkDetail(scoreSubjectDto.getStudentLessonTrainingDetails(), userIdList,

+ 43 - 27
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantOrderRecordServiceImpl.java

@@ -349,37 +349,53 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
 
     //主动去第三方查询订单状态
     private void checkTransOrderState(TenantOrderRecord orderRecord) {
-        if (StringUtils.equals(orderRecord.getPaymentChannel(), PaymentChannelEnum.ADAPAY.getCode())) {
-            Map<String, Object> payment;
-            try {
-                Integer tenantId = orderRecord.getTenantId();
-                HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId);
-                if (hfMerchantConfig == null) {
-                    throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
-                }
-
-                payment = Payment.queryPayment(orderRecord.getTransNo(), hfMerchantConfig.getMerKey());
-                log.info("    >>>>> checkTenantOrder  payment start");
-                String status = (String) payment.get("status");
-                //判断状态是成功还是失败
-                if (status.equals("succeeded")) {
-                    orderRecord.setOrderState(1);
-                } else if (Objects.nonNull(payment.get("error_code"))) {
-                    //若状态是失败则判断code
-                    if (!PAYMENT_ID_NOT_EXISTS.equals(payment.get("error_code"))) {
-                        //不等于这个异常都是失败
+        Map<String, Object> payment = new HashMap<String, Object>();
+        try {
+            Integer tenantId = orderRecord.getTenantId();
+            HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId, orderRecord.getPaymentChannel());
+            if (hfMerchantConfig == null) {
+                throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
+            }
+            
+            PaymentChannelEnum paymentChannel = PaymentChannelEnum.codeOf(orderRecord.getPaymentChannel());
+            
+            switch (paymentChannel) {
+			case ADAPAY:
+				payment = Payment.queryPayment(orderRecord.getTransNo(), hfMerchantConfig.getMerKey());
+				break;
+				
+			case YEEPAY:
+				
+				break;
+				
+			case YQPAY:
+				
+				break;
+
+			default:
+				break;
+			}
+
+            log.info("    >>>>> checkTenantOrder  payment start");
+            String status = (String) payment.get("status");
+            //判断状态是成功还是失败
+            if (status.equals("succeeded")) {
+                orderRecord.setOrderState(1);
+            } else if (Objects.nonNull(payment.get("error_code"))) {
+                //若状态是失败则判断code
+                if (!PAYMENT_ID_NOT_EXISTS.equals(payment.get("error_code"))) {
+                    //不等于这个异常都是失败
+                    orderRecord.setOrderState(2);
+                } else {
+                    if (timeOutCheck(orderRecord.getCreatedTime())) {
                         orderRecord.setOrderState(2);
-                    } else {
-                        if (timeOutCheck(orderRecord.getCreatedTime())) {
-                            orderRecord.setOrderState(2);
-                        }
                     }
                 }
-                log.info("    >>>>> checkTenantOrder orderType {} payment >>>>> {}", orderRecord.getOrderType(), payment);
-                log.info("    >>>>> checkTenantOrder  orderRecord >>>>> {}", JSON.toJSONString(orderRecord));
-            } catch (Exception e) {
-                log.error("    >>>>> checkTenantOrder  payment error>>>>> {}", JSON.toJSONString(orderRecord));
             }
+            log.info("    >>>>> checkTenantOrder orderType {} payment >>>>> {}", orderRecord.getOrderType(), payment);
+            log.info("    >>>>> checkTenantOrder  orderRecord >>>>> {}", JSON.toJSONString(orderRecord));
+        } catch (Exception e) {
+            log.error("    >>>>> checkTenantOrder  payment error>>>>> {}", JSON.toJSONString(orderRecord));
         }
     }
 

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

@@ -674,7 +674,7 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 				amount,
 				studentPaymentOrder.getBalancePaymentAmount(),
 				orderNo,
-				baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
 				baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
 				"学员活动购买",
 				vipGroupActivity.getName(),
@@ -855,7 +855,7 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 				studentPaymentOrder.getActualAmount(),
 				studentPaymentOrder.getBalancePaymentAmount(),
 				orderNo,
-				baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
 				baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
 				orderSubject,
 				orderSubject,

+ 26 - 25
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -2639,7 +2639,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         if (Objects.isNull(classGroup)) {
             throw new BizException("班级信息错误");
         }
-        Boolean exist = classGroupStudentMapperDao.existByClassGroupIds(classGroup.getId().toString(), userId);
+        Integer classGroupId = classGroup.getId();
+        Boolean exist = classGroupStudentMapperDao.existByClassGroupIds(classGroupId.toString(), userId);
         if (exist) {
             throw new BizException("您已加入此课程");
         }
@@ -2671,40 +2672,38 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
                 return result;
             }
             if(groupType == GroupType.VIP){
-                classGroupDao.modifyStudentNum(classGroup.getId(),-1);
+                classGroupDao.modifyStudentNum(classGroupId,-1);
             }
         }
         Date date = new Date();
-
-        VipGroupActivity vipGroupActivity = null;
-        if (Objects.nonNull(vipGroup.getVipGroupActivityId())) {
-            vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId());
-        }
-        if (Objects.nonNull(vipGroupActivity) && Objects.nonNull(vipGroupActivity.getStudentMaxUsedTimes()) && vipGroupActivity.getStudentMaxUsedTimes() != -1) {
-            int useNum = activityUserMapperService.countActivityBuyNum(vipGroupActivity.getId(), userId);
-            if (useNum >= vipGroupActivity.getStudentMaxUsedTimes()) {
-                throw new BizException("您已超过该活动购买限制{}次", vipGroupActivity.getStudentMaxUsedTimes());
-            }
-        }
         if (vipGroup.getPaymentExpireDate().before(date)) {
             throw new BizException("该课程已结束报名!");
         }
-        if (groupType == VIP && Objects.nonNull(vipGroup.getStudentIdList())) {
-            Set<Integer> userIds = Arrays.asList(vipGroup.getStudentIdList().split(",")).stream().mapToInt(Integer::parseInt).boxed().collect(Collectors.toSet());
-            if (!userIds.contains(userId)) {
-                throw new BizException("您无法购买此课程");
+        Integer vipGroupActivityId = vipGroup.getVipGroupActivityId();
+        if (Objects.nonNull(vipGroupActivityId)) {
+            VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId());
+            if (Objects.nonNull(vipGroupActivity) && Objects.nonNull(vipGroupActivity.getStudentMaxUsedTimes()) && vipGroupActivity.getStudentMaxUsedTimes() != -1) {
+                int useNum = activityUserMapperService.countActivityBuyNum(vipGroupActivity.getId(), userId);
+                if (useNum >= vipGroupActivity.getStudentMaxUsedTimes()) {
+                    throw new BizException("您已超过该活动购买限制{}次", vipGroupActivity.getStudentMaxUsedTimes());
+                }
             }
         }
-
         if(groupType == GroupType.VIP){
-            if (classGroupDao.checkStudentNum(classGroup.getId())) {
+            if(Objects.nonNull(vipGroup.getStudentIdList())){
+                Set<Integer> userIds = Arrays.asList(vipGroup.getStudentIdList().split(",")).stream().mapToInt(Integer::parseInt).boxed().collect(Collectors.toSet());
+                if (!userIds.contains(userId)) {
+                    throw new BizException("您无法购买此课程");
+                }
+            }
+            if (classGroupDao.checkStudentNum(classGroupId)) {
                 throw new BizException("该课程组人数已满,请联系教务老师!");
             }
             //增加学员数
-            classGroupDao.modifyStudentNum(classGroup.getId(),1);
+            classGroupDao.modifyStudentNum(classGroupId,1);
         }
         ClassGroupStudentMapper classGroupStudentMapper = new ClassGroupStudentMapper();
-        classGroupStudentMapper.setClassGroupId(classGroup.getId());
+        classGroupStudentMapper.setClassGroupId(classGroupId);
         classGroupStudentMapper.setGroupType(classGroup.getGroupType());
         classGroupStudentMapper.setMusicGroupId(classGroup.getMusicGroupId());
         classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
@@ -2712,7 +2711,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         classGroupStudentMapper.setTenantId(classGroup.getTenantId());
 
         List<CourseSchedule> courseSchedules = JSON.parseArray(vipGroup.getCourseSchedulesJson(), CourseSchedule.class);
-        courseScheduleService.checkNewCourseSchedules(courseSchedules, false, false,classGroupStudentMapper);
+        HttpResponseResult responseResult = courseScheduleService.checkNewCourseSchedules(courseSchedules, false, false, classGroupStudentMapper);
+        if (!vipGroupBuyParams.getContinuePay() && responseResult.getCode() == 103) {
+            return responseResult;
+        }
 
         //校验优惠券
         String[] checkCoupon = CouponDetailTypeEnum.getAllowType(couponDetailTypeEnum);
@@ -2725,11 +2727,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         studentPaymentOrder.setType(orderTypeEnum);
         studentPaymentOrder.setMusicGroupId(vipGroup.getId().toString());
         studentPaymentOrder.setMusicGroupId(vipGroup.getId().toString());
-        studentPaymentOrder.setClassGroupId(classGroup.getId());
+        studentPaymentOrder.setClassGroupId(classGroupId);
         studentPaymentOrder.setOrganId(user.getOrganId());
         studentPaymentOrder.setVersion(0);
         studentPaymentOrder.setActivityBuyNum(vipGroup.getOnlineClassesNum() + vipGroup.getOfflineClassesNum());
-        Integer vipGroupActivityId = vipGroup.getVipGroupActivityId();
         studentPaymentOrder.setActivityId(vipGroupActivityId == null ? "" : vipGroupActivityId.toString());
         studentPaymentOrderDao.insert(studentPaymentOrder);
 
@@ -2788,7 +2789,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 groupType.getDesc() + "购买",
                 vipGroup.getName(),

+ 25 - 1
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -1913,7 +1913,31 @@
         )
         and cs.tenant_id_ = #{tenantId}
         AND (cs.del_flag_ IS NULL OR cs.del_flag_=0)
-        AND (cs.new_course_id_ IS NULL OR cs.new_course_id_=cs.id_) AND cs.group_type_ != 'LIVE'
+        AND (cs.new_course_id_ IS NULL OR cs.new_course_id_=cs.id_)
+    </select>
+    <select id="findByClassDateAndStu" resultMap="CourseSchedule">
+        SELECT
+        cs.id_,
+        cs.music_group_id_,
+        cs.class_group_id_,
+        cs.class_date_,
+        CONCAT(cs.class_date_,' ',cs.start_class_time_) start_class_time_,
+        CONCAT(cs.class_date_,' ',cs.end_class_time_) end_class_time_,
+        cs.type_,
+        cs.name_,
+        cs.share_mode_,
+        cs.actual_teacher_id_
+        FROM
+        course_schedule cs
+        left join course_schedule_student_payment cssp ON cs.id_ = cssp.course_schedule_id_
+        WHERE (cs.class_date_ IN
+        <foreach collection="classDates" item="classDate" open="(" close=")" separator=",">
+            #{classDate}
+        </foreach>
+        )
+        and cs.tenant_id_ = #{tenantId} AND cssp.user_id_ = #{userId}
+        AND (cs.del_flag_ IS NULL OR cs.del_flag_=0)
+        AND (cs.new_course_id_ IS NULL OR cs.new_course_id_=cs.id_)
     </select>
 
     <select id="queryStudentCoursesTimesOfTomorrow" resultMap="Mapper">

+ 49 - 8
mec-biz/src/main/resources/config/mybatis/HfMemberMapper.xml

@@ -3,6 +3,7 @@
 <mapper namespace="com.ym.mec.biz.dal.dao.HfMemberDao">
     <resultMap id="hfMember" type="com.ym.mec.biz.dal.entity.HfMember">
         <id column="id_" property="id"/>
+        <result column="payer_name_" property="payerName"/>
         <result column="name_" property="name"/>
         <result column="member_id_" property="memberId"/>
         <result column="prov_code_" property="provCode"/>
@@ -30,14 +31,22 @@
 		<result column="tenant_id_" property="tenantId" />
 		<result column="bank_acct_type_" property="bankAcctType" />
 		<result column="card_name_" property="cardName" />
+		<result column="district_code_" property="districtCode" />
+		<result column="contact_email_" property="contactEmail" />
+		<result column="contact_licence_no_" property="contactLicenseNo" />
+		<result column="contact_name_" property="contactName" />
+		<result column="contact_mobile_" property="contactMobile" />
+		<result column="request_no_" property="requestNo" />
+		<result column="legal_licence_type_" property="legalLicenceType" />
     </resultMap>
     <sql id="Base_Column_List">
         <!--@mbg.generated-->
-        id_, name_, member_id_, prov_code_, area_code_, social_credit_code_, social_credit_code_expires_,
+        id_, payer_name_, name_, member_id_, prov_code_, area_code_, social_credit_code_, social_credit_code_expires_,
         business_scope_, legal_person_, legal_cert_id_, legal_cert_id_expires_, legal_mp_,
         address_, zip_code_, card_no_,
         bank_code_,settle_account_id_,status_,month_max_receipt_,route_member_id_,route_organ_id_, create_time_,
-        update_time_,tenant_id_,organ_id_,bank_acct_type_,card_name_
+        update_time_,tenant_id_,organ_id_,bank_acct_type_,card_name_,
+        district_code_,contact_email_,contact_licence_no_,contact_name_,contact_mobile_,request_no_,legal_licence_type_
     </sql>
     <select id="get" parameterType="java.lang.Integer" resultMap="hfMember">
         <!--@mbg.generated-->
@@ -54,23 +63,46 @@
     <insert id="insert" keyColumn="id_" keyProperty="id" parameterType="com.ym.mec.biz.dal.entity.HfMember"
             useGeneratedKeys="true">
         <!--@mbg.generated-->
-        insert into hf_member (name_, member_id_, prov_code_,
+        insert into hf_member (payer_name_, name_, member_id_, prov_code_,
         area_code_, social_credit_code_, social_credit_code_expires_,
         business_scope_, legal_person_, legal_cert_id_,
         legal_cert_id_expires_, legal_mp_, address_,
         zip_code_, card_no_, bank_code_,status_,
-        create_time_, update_time_,organ_id_,tenant_id_,bank_acct_type_,card_name_)
-        values (#{name}, #{memberId}, #{provCode},
+        create_time_, update_time_,organ_id_,tenant_id_,bank_acct_type_,card_name_,
+        district_code_,contact_email_,contact_licence_no_,contact_name_,contact_mobile_,request_no_,legal_licence_type_)
+        values (#{payerName}, #{name}, #{memberId}, #{provCode},
         #{areaCode}, #{socialCreditCode}, #{socialCreditCodeExpires},
         #{businessScope}, #{legalPerson}, #{legalCertId},
         #{legalCertIdExpires}, #{legalMp}, #{address},
         #{zipCode}, #{cardNo}, #{bankCode},#{status},
-        #{createTime}, #{updateTime},#{organId},#{tenantId},#{bankAcctType},#{cardName})
+        #{createTime}, #{updateTime},#{organId},#{tenantId},#{bankAcctType},#{cardName},
+        #{districtCode},#{contactEmail},#{contactLicenceNo},#{contactName},#{contactMobile},#{requestNo},#{legalLicenceType})
     </insert>
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.HfMember">
         <!--@mbg.generated-->
         update hf_member
         <set>
+            <if test="districtCode != null">
+                district_code_ = #{districtCode},
+            </if>
+            <if test="contactEmail != null">
+                contact_email_ = #{contactEmail},
+            </if>
+            <if test="contactLicenceNo != null">
+                contact_licence_no_ = #{contactLicenceNo},
+            </if>
+            <if test="contactName != null">
+                contact_name_ = #{contactName},
+            </if>
+            <if test="contactMobile != null">
+                contact_mobile_ = #{contactMobile},
+            </if>
+            <if test="requestNo != null">
+                request_no_ = #{requestNo},
+            </if>
+            <if test="legalLicenceType != null">
+                legal_licence_type_ = #{legalLicenceType},
+            </if>
             <if test="name != null">
                 name_ = #{name},
             </if>
@@ -176,6 +208,9 @@
             <if test="organId != null">
                 AND organ_id_ = #{organId}
             </if>
+            <if test="payerName != null">
+                AND payer_name_ = #{payerName}
+            </if>
         </where>
     </sql>
 
@@ -188,15 +223,21 @@
     <select id="getByMemberId" resultMap="hfMember">
         SELECT *
         FROM hf_member
-        WHERE member_id_ = #{memberId}
+        WHERE member_id_ = #{memberId} and payer_name_ = #{payerName}
         LIMIT 1
     </select>
 
     <select id="getByName" resultMap="hfMember">
         SELECT *
         FROM hf_member
-        WHERE name_ = #{name}
+        WHERE name_ = #{name} and payer_name_ = #{payerName}
         LIMIT 1
     </select>
 
+    <select id="getByOrganId" resultMap="hfMember">
+        SELECT *
+        FROM hf_member
+        WHERE organ_id_ = #{organId} and payer_name_ = #{payerName}
+    </select>
+
 </mapper>

+ 23 - 4
mec-biz/src/main/resources/config/mybatis/HfMerchantConfigMapper.xml

@@ -6,6 +6,7 @@
 	<resultMap type="com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig"
 		id="HfMerchantConfig">
 		<result column="id_" property="id" />
+		<result column="payer_name_" property="payerName" />
 		<result column="app_id_" property="appId" />
 		<result column="mer_key_" property="merKey" />
 		<result column="api_key_" property="apiKey" />
@@ -15,6 +16,9 @@
 		<result column="expend_params_" property="expendParams" />
 		<result column="wx_app_id_" property="wxAppId" />
 		<result column="wx_app_secret_" property="wxAppSecret" />
+		<result column="alipay_app_id_" property="alipayAppId" />
+		<result column="alipay_private_key_" property="alipayPrivateKey" />
+		<result column="alipay_public_key_" property="alipayPublicKey" />
 		<result column="platform_payee_member_id_" property="platformPayeeMemberId" />
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
@@ -29,7 +33,7 @@
 
 	<!-- 全查询 -->
 	<select id="findAll" resultMap="HfMerchantConfig">
-		SELECT * FROM hf_merchant_config ORDER
+		SELECT * FROM hf_merchant_config WHERE payer_name_ = #{payerName} ORDER
 		BY id_
 	</select>
 
@@ -39,14 +43,17 @@
 		<!-- <selectKey resultClass="int" keyProperty="id" > SELECT SEQ_WSDEFINITION_ID.nextval 
 			AS ID FROM DUAL </selectKey> -->
 		INSERT INTO hf_merchant_config
-		(id_,app_id_,mer_key_,api_key_,mock_api_key_,rsa_private_key_,rsa_public_key_,expend_params_,wx_app_id_,wx_app_secret_,create_time_,update_time_,tenant_id_,platform_payee_member_id_)
-		VALUES(#{id},#{appId},#{merKey},#{apiKey},#{mockApiKey},#{rsaPrivateKey},#{rsaPublicKey},#{expendParams},#{wxAppId},#{wxAppSecret},#{createTime},#{updateTime},#{tenantId},#{platformPayeeMemberId})
+		(id_,payer_name_,app_id_,mer_key_,api_key_,mock_api_key_,rsa_private_key_,rsa_public_key_,expend_params_,wx_app_id_,wx_app_secret_,alipay_app_id_,alipay_private_key_,alipay_public_key_,create_time_,update_time_,tenant_id_,platform_payee_member_id_)
+		VALUES(#{id},#{payerName},#{appId},#{merKey},#{apiKey},#{mockApiKey},#{rsaPrivateKey},#{rsaPublicKey},#{expendParams},#{wxAppId},#{wxAppSecret},#{alipayAppId},#{alipayPrivateKey},#{alipayPublicKey},#{createTime},#{updateTime},#{tenantId},#{platformPayeeMemberId})
 	</insert>
 
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig">
 		UPDATE hf_merchant_config
 		<set>
+			<if test="payerName != null">
+				payer_name_ = #{payerName},
+			</if>
 			<if test="apiKey != null">
 				api_key_ = #{apiKey},
 			</if>
@@ -89,6 +96,15 @@
 			<if test="wxAppSecret != null">
 				wx_app_secret_ = #{wxAppSecret},
 			</if>
+			<if test="alipayAppId != null">
+				alipay_app_id_ = #{alipayAppId},
+			</if>
+			<if test="alipayPrivateKey != null">
+				alipay_private_key_ = #{alipayPrivateKey},
+			</if>
+			<if test="alipayPublicKey != null">
+				alipay_public_key_ = #{alipayPublicKey},
+			</if>
 		</set>
 		WHERE id_ = #{id}
 	</update>
@@ -113,7 +129,7 @@
 	</select>
 	
 	<select id="queryByTenantId" resultMap="HfMerchantConfig">
-		SELECT * FROM hf_merchant_config where tenant_id_ = #{tenantId}
+		SELECT * FROM hf_merchant_config where tenant_id_ = #{tenantId} AND payer_name_ = #{payerName}
 	</select>
 
     <sql id="queryPageSql">
@@ -121,6 +137,9 @@
             <if test="tenantId != null">
                 AND tenant_id_ = #{tenantId}
             </if>
+			<if test="payerName != null">
+				AND payer_name_ = #{payerName}
+			</if>
         </where>
     </sql>
 

+ 17 - 29
mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml

@@ -1496,49 +1496,37 @@
 			   SUM(CASE WHEN spo.actual_amount_ IS NULL THEN 0 ELSE spo.actual_amount_ END +
 		CASE WHEN spo.balance_payment_amount_ IS NULL THEN 0 ELSE spo.balance_payment_amount_ END) activate_num_,
 			   SUM(CASE WHEN spo.actual_amount_ IS NULL THEN 0 ELSE spo.actual_amount_ END +
-		CASE WHEN spo.balance_payment_amount_ IS NULL THEN 0 ELSE spo.balance_payment_amount_ END) percent_,DATE_FORMAT(spo.pay_time_,'%Y-%m-%d') month_
+		CASE WHEN spo.balance_payment_amount_ IS NULL THEN 0 ELSE spo.balance_payment_amount_ END) percent_,DATE_FORMAT(spo.pay_time_,'%Y-%m-%d') month_,
+		CASE WHEN spo.type_ IN ('RENEW') THEN 'RENEW' WHEN spo.type_ IN ('PRACTICE_GROUP_BUY', 'PRACTICE_GROUP_RENEW') THEN 'PRACTICE_GROUP' ELSE 'APPLY' END AS order_type_
 		FROM student_payment_order spo
 		WHERE spo.status_ = 'SUCCESS' AND spo.pay_time_ BETWEEN #{startDate} AND #{endDate} and spo.tenant_id_ = #{tenantId}
-		<if test="orderType != null">
-			AND FIND_IN_SET(spo.type_,#{orderType})
-		</if>
-		<if test="notOrderType != null">
-			AND spo.type_ NOT IN
-			<foreach collection="notOrderType" open="(" close=")" item="item" separator=",">
-				#{item}
-			</foreach>
-		</if>
+		AND spo.type_ IN
+		<foreach collection="orderTypeList" open="(" close=")" item="orderType" separator=",">
+			#{orderType}
+		</foreach>
 		<if test="organIds!=null and organIds.size()>0">
 			AND spo.organ_id_ IN
 			<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
 				#{organId}
 			</foreach>
 		</if>
-		GROUP BY DATE_FORMAT(spo.pay_time_,'%Y-%m-%d')
+		GROUP BY DATE_FORMAT(spo.pay_time_,'%Y-%m-%d'),order_type_
 	</select>
 
 	<select id="getOrganTotalAmountDataWithTimelyDetails" resultMap="IndexBaseMonthData">
 		SELECT SUM(CASE WHEN spo.actual_amount_ IS NULL THEN 0 ELSE spo.actual_amount_ END +
 		CASE WHEN spo.balance_payment_amount_ IS NULL THEN 0 ELSE spo.balance_payment_amount_ END) percent_,
-		    			   o.id_ organ_id_,o.name_ organ_name_
+		    			   o.id_ organ_id_,o.name_ organ_name_,
+		CASE WHEN spo.type_ IN ('RENEW') THEN 'RENEW'
+		WHEN spo.type_ IN ('PRACTICE_GROUP_BUY', 'PRACTICE_GROUP_RENEW') THEN 'PRACTICE_GROUP'
+		ELSE 'APPLY' END AS order_type_
 		FROM organization o
-		LEFT JOIN student_payment_order spo ON o.id_ = spo.organ_id_ AND o.tenant_id_ = spo.tenant_id_
+		LEFT JOIN student_payment_order spo ON o.id_ = spo.organ_id_
 		AND spo.status_ = 'SUCCESS' AND spo.pay_time_ BETWEEN #{startDate} AND #{endDate}
-		<if test="orderType != null">
-			AND FIND_IN_SET(spo.type_,#{orderType})
-		</if>
-		<if test="notOrderType != null">
-			AND spo.type_ NOT IN
-			<foreach collection="notOrderType" open="(" close=")" item="item" separator=",">
-				#{item}
-			</foreach>
-		</if>
-		<if test="organIds!=null and organIds.size()>0">
-			AND spo.organ_id_ IN
-			<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
-				#{organId}
-			</foreach>
-		</if>
+		AND spo.type_ IN
+		<foreach collection="orderTypeList" open="(" close=")" item="orderType" separator=",">
+			#{orderType}
+		</foreach>
 		WHERE o.tenant_id_ = #{tenantId}
 		<if test="organIds!=null and organIds.size()>0">
 			AND o.id_ IN
@@ -1546,7 +1534,7 @@
 				#{organId}
 			</foreach>
 		</if>
-		GROUP BY o.id_ ORDER BY percent_ DESC
+		GROUP BY o.id_,order_type_ ORDER BY percent_ DESC
 	</select>
 
 	<select id="getVipAmountDataWithTimelyDetails" resultMap="IndexBaseMonthData">

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

@@ -601,7 +601,6 @@
         SELECT *
         FROM student_payment_order
         WHERE status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
-          AND payment_channel_ = #{paymentChannel}
     <!--  商城订单由商城控制订单超时      -->
         and group_type_ != 'MALL_SELL' and type_ != 'MALL_BUY'
     </select>

+ 17 - 1
mec-im/src/main/java/com/ym/service/Impl/LiveRoomServiceImpl.java

@@ -2,9 +2,12 @@ package com.ym.service.Impl;
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.google.common.collect.Lists;
 import com.ym.http.HttpHelper;
 import com.ym.mec.biz.dal.dto.TencentData;
+import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoom;
 import com.ym.mec.biz.dal.entity.ImLiveRoomVideo;
+import com.ym.mec.biz.service.ImLiveBroadcastRoomService;
 import com.ym.mec.biz.service.ImLiveRoomVideoService;
 import com.ym.mec.common.entity.ImRoomMessage;
 import com.ym.mec.common.exception.BizException;
@@ -44,6 +47,8 @@ public class LiveRoomServiceImpl implements LiveRoomService {
     @Autowired
     private ImLiveRoomVideoService imLiveRoomVideoService;
     @Autowired
+    private ImLiveBroadcastRoomService imLiveBroadcastRoomService;
+    @Autowired
     private StoragePluginContext storagePluginContext;
 
     /**
@@ -347,7 +352,18 @@ public class LiveRoomServiceImpl implements LiveRoomService {
                 .last("LIMIT 1")
                 .one();
         if (Objects.isNull(video)) {
-            imLiveRoomVideoService.save(imLiveRoomVideo);
+
+            ImLiveBroadcastRoom room = imLiveBroadcastRoomService.getByRoomUid(imLiveRoomVideo.getRoomUid());
+            if (Objects.nonNull(room) && "LIVE".equals(room.getGroupType())) {
+
+                if (StringUtils.isBlank(room.getVideoRecord()) || Arrays.stream(room.getVideoRecord().split(","))
+                        .anyMatch(x -> x.equals(imLiveRoomVideo.getRecordId()))) {
+                    imLiveRoomVideoService.save(imLiveRoomVideo);
+                }
+            } else {
+                imLiveRoomVideoService.save(imLiveRoomVideo);
+            }
+
         }
 
     }

+ 18 - 0
mec-student/pom.xml

@@ -15,6 +15,13 @@
 		<dependency>
 			<groupId>org.springframework.cloud</groupId>
 			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
+			
+			<exclusions>
+				<exclusion>
+					<groupId>org.bouncycastle</groupId>
+  					<artifactId>bcprov-jdk15on</artifactId>
+				</exclusion>
+			</exclusions>
 		</dependency>
 
 		<dependency>
@@ -66,6 +73,17 @@
 		<dependency>
 			<groupId>com.yonge.log</groupId>
 			<artifactId>audit-log</artifactId>
+			
+			<exclusions>
+				<exclusion>
+					<groupId>bouncycastle</groupId>
+					<artifactId>bcprov-jdk14</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.bouncycastle</groupId>
+  					<artifactId>bctsp-jdk14</artifactId>
+				</exclusion>
+			</exclusions>
 		</dependency>
     </dependencies>
 	<build>

+ 1 - 1
mec-student/src/main/java/com/ym/mec/student/config/ResourceServerConfig.java

@@ -24,7 +24,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
     @Override
     public void configure(HttpSecurity http) throws Exception {
         http.csrf().disable().exceptionHandling().accessDeniedHandler(baseAccessDeniedHandler).authenticationEntryPoint(baseAuthenticationEntryPoint).and()
-                .authorizeRequests().antMatchers("/wechat/*","/v2/api-docs", "/code/*", "/student/registering", "/register/*", "/studentOrder/*", "/musicGroup/getSubjectGoodsAndInfo",
+                .authorizeRequests().antMatchers("/wechat/*","/v2/api-docs", "/code/*", "/student/registering", "/register/*", "/studentOrder/**", "/musicGroup/getSubjectGoodsAndInfo",
                 "/musicGroup/getMusicGroupStatus", "/musicGroup/getOrderStatus","/sysCouponCode/queryPage",
                 "/musicGroup/pay",
                 "/musicGroup/rePay",

+ 203 - 59
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -1,47 +1,134 @@
 package com.ym.mec.student.controller;
 
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.security.PrivateKey;
+import java.security.PublicKey;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpStatus;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.huifu.adapay.core.AdapayCore;
 import com.huifu.adapay.core.util.AdapaySign;
+import com.yeepay.g3.sdk.yop.encrypt.DigitalEnvelopeDTO;
+import com.yeepay.g3.sdk.yop.utils.DigitalEnvelopeUtils;
+import com.yeepay.g3.sdk.yop.utils.RSAKeyUtils;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.*;
-import com.ym.mec.biz.dal.dto.*;
-import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.biz.dal.enums.*;
+import com.ym.mec.biz.dal.dao.ChildrenDayDegreeDetailDao;
+import com.ym.mec.biz.dal.dao.CourseScheduleEvaluateDao;
+import com.ym.mec.biz.dal.dao.DegreeRegistrationDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderCourseSettingsDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
+import com.ym.mec.biz.dal.dao.OrganizationDao;
+import com.ym.mec.biz.dal.dao.ReplacementInstrumentActivityDao;
+import com.ym.mec.biz.dal.dao.StudentGoodsSellDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
+import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dao.SysCouponCodeDao;
+import com.ym.mec.biz.dal.dao.TempBuyDoubleElevenUserLogDao;
+import com.ym.mec.biz.dal.dao.VipGroupCategoryDao;
+import com.ym.mec.biz.dal.dto.CloudTeacherOrderDto;
+import com.ym.mec.biz.dal.dto.ConditionDto;
+import com.ym.mec.biz.dal.dto.LuckStatisDto;
+import com.ym.mec.biz.dal.dto.OrderStatisDto;
+import com.ym.mec.biz.dal.dto.PaymentParam;
+import com.ym.mec.biz.dal.dto.Practice4OrganDto;
+import com.ym.mec.biz.dal.dto.PracticeGroupStatisDto;
+import com.ym.mec.biz.dal.dto.PracticeGroupsDto;
+import com.ym.mec.biz.dal.dto.StudentPaymentOrderDto;
+import com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto;
+import com.ym.mec.biz.dal.dto.SysConfigJsonDto;
+import com.ym.mec.biz.dal.dto.VipBuyResultDto;
+import com.ym.mec.biz.dal.entity.DegreeRegistration;
+import com.ym.mec.biz.dal.entity.Goods;
+import com.ym.mec.biz.dal.entity.LuckDrawCount;
+import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderCourseSettings;
+import com.ym.mec.biz.dal.entity.Organization;
+import com.ym.mec.biz.dal.entity.SellOrder;
+import com.ym.mec.biz.dal.entity.SporadicChargeInfo;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
+import com.ym.mec.biz.dal.entity.StudentRegistration;
+import com.ym.mec.biz.dal.entity.TempBuyDoubleElevenUserLog;
+import com.ym.mec.biz.dal.entity.TenantConfig;
+import com.ym.mec.biz.dal.entity.VipGroupActivity;
+import com.ym.mec.biz.dal.enums.CourseViewTypeEnum;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
+import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
-import com.ym.mec.biz.service.*;
+import com.ym.mec.biz.service.CloudTeacherOrderService;
+import com.ym.mec.biz.service.HfMerchantConfigService;
+import com.ym.mec.biz.service.LuckDrawCountService;
+import com.ym.mec.biz.service.MusicGroupPaymentCalenderActivityService;
+import com.ym.mec.biz.service.MusicGroupService;
+import com.ym.mec.biz.service.OrderPayOpsService;
+import com.ym.mec.biz.service.OrganizationService;
+import com.ym.mec.biz.service.SellOrderService;
+import com.ym.mec.biz.service.SporadicChargeInfoService;
+import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
+import com.ym.mec.biz.service.SysConfigService;
+import com.ym.mec.biz.service.TenantConfigService;
+import com.ym.mec.biz.service.TenantOrderRecordService;
+import com.ym.mec.biz.service.VipGroupActivityService;
+import com.ym.mec.biz.service.VipGroupService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.tenant.TenantContextHolder;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 import com.ym.mec.thirdparty.yqpay.Msg;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
+import com.ym.mec.util.json.JsonUtil;
+import com.ym.mec.util.web.WebUtil;
+
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.http.HttpStatus;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.net.URLEncoder;
-import java.util.*;
-import java.util.stream.Collectors;
 
 @RequestMapping("studentOrder")
 @Api(tags = "订单回调")
@@ -105,6 +192,8 @@ public class StudentOrderController extends BaseController {
     private VipGroupCategoryDao vipGroupCategoryDao;
     @Autowired
     private TempBuyDoubleElevenUserLogDao tempBuyDoubleElevenUserLogDao;
+    @Autowired
+    private HfMerchantConfigService hfMerchantConfigService;
 
     @Value("${spring.profiles.active:dev}")
     private String profiles;
@@ -121,51 +210,105 @@ public class StudentOrderController extends BaseController {
         return succeed(studentPaymentOrderPageInfo);
     }
 
-    @PostMapping("/callback")
-	public String callback(HttpServletRequest request) {
+    @PostMapping("/callback/{orderNo}")
+	public String callback(@PathVariable("orderNo") String orderNo, HttpServletRequest request) {
+		
+		StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.findOrderByOrderNo(orderNo);
+		
+		if(studentPaymentOrder == null) {
+			return "订单号错误";
+		}
+		
+		PaymentChannelEnum paymentChannel = PaymentChannelEnum.codeOf(studentPaymentOrder.getPaymentChannel());
+		
 		try {
-			// 验签请参data
-			String data = request.getParameter("data");
-			// 验签请参sign
-			String sign = request.getParameter("sign");
 			
-			logger.info("callback request param:{}", data);
-
-			// 验签
-			if (AdapaySign.verifySign(data, sign, AdapayCore.PUBLIC_KEY)) {
+			switch (paymentChannel) {
+			case ADAPAY:
+				// 验签请参data
+				String data = request.getParameter("data");
+				// 验签请参sign
+				String sign = request.getParameter("sign");
+				
+				logger.info("callback request param:{}", data);
+				// 验签
+				if (AdapaySign.verifySign(data, sign, AdapayCore.PUBLIC_KEY)) {
+					
+					JSONObject dataObj = JSON.parseObject(data);
+					
+					String transType = request.getParameter("type");
+					
+					Map<String, String> notifyMap = new HashMap<>();
+
+					switch (transType) {
+					case "payment.succeeded":// 支付成功
+
+						notifyMap.put("channelType", dataObj.getString("pay_channel"));
+						notifyMap.put("tradeState", "1");
+						notifyMap.put("totalMoney", dataObj.getString("pay_amt"));
+						notifyMap.put("merOrderNo", dataObj.getString("order_no"));
+						studentPaymentOrderService.updateOrder(notifyMap);
+						break;
+
+					case "payment.failed":// 支付失败
+
+						notifyMap.put("channelType", dataObj.getString("pay_channel"));
+						notifyMap.put("tradeState", "0");
+						notifyMap.put("totalMoney", dataObj.getString("pay_amt"));
+						notifyMap.put("merOrderNo", dataObj.getString("order_no"));
+						studentPaymentOrderService.updateOrder(notifyMap);
+
+						break;
+
+					default:
+						break;
+					}
+				} else {
+					return "验签失败";
+				}
+				break;
+			case YEEPAY:
+				
+				String content = IOUtils.toString(request.getInputStream(), StandardCharsets.UTF_8);
+				
+				JSONObject jsonObject = JSONObject.parseObject(content);
 				
-				JSONObject dataObj = JSON.parseObject(data);
+				HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(studentPaymentOrder.getTenantId(), studentPaymentOrder.getPaymentChannel());
+		        if(hfMerchantConfig == null){
+		        	throw new BizException("机构[{}][{}]商户信息找不到", studentPaymentOrder.getTenantId(), studentPaymentOrder.getPaymentChannel());
+		        }
 				
-				String transType = request.getParameter("type");
+				// 构造结果通知请求对象
+				DigitalEnvelopeDTO dto = new DigitalEnvelopeDTO();
+				dto.setCipherText(jsonObject.getString("response"));
+				PrivateKey privateKey =RSAKeyUtils.string2PrivateKey(hfMerchantConfig.getRsaPrivateKey());
+				PublicKey publicKey = RSAKeyUtils.string2PublicKey(hfMerchantConfig.getRsaPublicKey());
+				
+				dto = DigitalEnvelopeUtils.decrypt(dto, privateKey, publicKey);
+				
+				logger.info("易宝支付回调信息:{}", dto.getPlainText());
+				
+				JSONObject dataObj = JSON.parseObject(dto.getPlainText());
 				
 				Map<String, String> notifyMap = new HashMap<>();
-
-				switch (transType) {
-				case "payment.succeeded":// 支付成功
-
-					notifyMap.put("channelType", dataObj.getString("pay_channel"));
+				notifyMap.put("channelType", dataObj.getString("channel"));
+				
+				if("SUCCESS".equals(dataObj.getString("status"))) {
 					notifyMap.put("tradeState", "1");
-					notifyMap.put("totalMoney", dataObj.getString("pay_amt"));
-					notifyMap.put("merOrderNo", dataObj.getString("order_no"));
-					studentPaymentOrderService.updateOrder(notifyMap);
-					break;
-
-				case "payment.failed":// 支付失败
-
-					notifyMap.put("channelType", dataObj.getString("pay_channel"));
+				}else {
 					notifyMap.put("tradeState", "0");
-					notifyMap.put("totalMoney", dataObj.getString("pay_amt"));
-					notifyMap.put("merOrderNo", dataObj.getString("order_no"));
-					studentPaymentOrderService.updateOrder(notifyMap);
-
-					break;
-
-				default:
-					break;
 				}
-			} else {
-				return "验签失败";
+				notifyMap.put("totalMoney", dataObj.getString("orderAmount"));
+				notifyMap.put("merOrderNo", dataObj.getString("orderId"));
+				studentPaymentOrderService.updateOrder(notifyMap);
+				
+				break;
+
+			default:
+				break;
 			}
+
+			
 		} catch (Exception e) {
 			return e.getMessage();
 		}
@@ -371,8 +514,9 @@ public class StudentOrderController extends BaseController {
             @ApiImplicitParam(name = "orderNo", value = "订单号", required = true, dataType = "String"),
             @ApiImplicitParam(name = "payChannel", value = "支付方式(alipay-支付宝app支付)", required = true, dataType = "String"),
     })
-    public Object executePayment(@RequestBody PaymentParam paymentParam) {
+    public Object executePayment(@RequestBody PaymentParam paymentParam, HttpServletRequest request) {
         try {
+        	paymentParam.setIp(WebUtil.getRemoteIp(request));
             Map<String, Object> payment = orderPayOpsService.executePayment(paymentParam);
             return succeed(payment);
         } catch (Exception e) {
@@ -417,7 +561,7 @@ public class StudentOrderController extends BaseController {
         if (!profiles.equals("dev") && !profiles.equals("test")) {
             return failed("非法操作");
         }
-        List<StudentPaymentOrder> payingOrders = studentPaymentOrderService.findOrdersByStatus(DealStatusEnum.ING, "ADAPAY");
+        List<StudentPaymentOrder> payingOrders = studentPaymentOrderService.findOrdersByStatus(DealStatusEnum.ING);
 
         String[] statusArr = {"0", "1", "7"};
         for (StudentPaymentOrder payingOrder : payingOrders) {

+ 6 - 3
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherManageController.java

@@ -108,11 +108,14 @@ public class TeacherManageController extends BaseController {
 
     @ApiOperation(value = "根据群编号,获取群组基本信息")
     @GetMapping("/course/findGroupById")
-    public Object findGroupById(Integer groupId){
-        if(null == groupId){
+    public Object findGroupById(String imGroupId){
+        if(null == imGroupId){
             return failed("参数校验错误");
         }
-        return succeed(classGroupService.findGroupById(groupId));
+        if (imGroupId.contains("S") || imGroupId.contains("I")){
+            imGroupId = imGroupId.substring(1);
+        }
+        return succeed(classGroupService.findGroupById(Integer.parseInt(imGroupId)));
     }
 
     @ApiOperation(value = "根据群编号,获取群组所有成员基本信息")

BIN
mec-thirdparty/libs/yop-java-sdk-3.2.25-jdk18json.jar


+ 75 - 22
mec-thirdparty/pom.xml

@@ -8,6 +8,10 @@
 		<version>1.0</version>
 	</parent>
 
+	<properties>
+		<yop-java-sdk.version>4.3.3</yop-java-sdk.version>
+	</properties>
+
 	<artifactId>mec-thirdparty</artifactId>
 
 	<name>mec-thirdparty</name>
@@ -19,95 +23,144 @@
 		<dependency>
 			<groupId>com.ym</groupId>
 			<artifactId>mec-util</artifactId>
+			
+			<exclusions>
+				<exclusion>
+					<groupId>bouncycastle</groupId>
+					<artifactId>bcprov-jdk14</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>
+						org.bouncycastle</groupId>
+  					<artifactId>bctsp-jdk14</artifactId>
+				</exclusion>
+			</exclusions>
 		</dependency>
 
 		<dependency>
-			<groupId>com.aliyun.oss</groupId>
-			<artifactId>aliyun-sdk-oss</artifactId>
+			<groupId>
+				com.aliyun.oss</groupId>
+			<artifactId>
+				aliyun-sdk-oss</artifactId>
 			<version>2.8.3</version>
 		</dependency>
 		
 		<dependency>
-			<groupId>com.timevale</groupId>
+			<groupId>
+				com.timevale</groupId>
 			<artifactId>tech-sdk</artifactId>
 			<version>2.1.20</version>
-			<scope>system</scope>
+			<scope>
+				system</scope>
 			<systemPath>${project.basedir}/libs/tech-sdk-2.1.20.jar</systemPath>
 		</dependency>
 		
 		<dependency>
-			<groupId>com.timevale</groupId>
+			<groupId>
+				com.timevale</groupId>
 			<artifactId>smUtil</artifactId>
 			<version>1.0</version>
 			<scope>system</scope>
-			<systemPath>${project.basedir}/libs/smUtil-1.0.jar</systemPath>
+			<systemPath>
+				${project.basedir}/libs/smUtil-1.0.jar</systemPath>
 		</dependency>
 		
 		<dependency>
-			<groupId>com.timevale</groupId>
+			<groupId>
+				com.timevale</groupId>
 			<artifactId>tgtext</artifactId>
 			<version>3.2.14</version>
 			<scope>system</scope>
-			<systemPath>${project.basedir}/libs/tgtext-3.2.14.jar</systemPath>
+			<systemPath>
+				${project.basedir}/libs/tgtext-3.2.14.jar</systemPath>
 		</dependency>
 		
 		<dependency>
-			<groupId>com.timevale</groupId>
+			<groupId>
+				com.timevale</groupId>
 			<artifactId>utils</artifactId>
 			<version>3.0.6</version>
 			<scope>system</scope>
-			<systemPath>${project.basedir}/libs/utils-3.0.6.jar</systemPath>
+			<systemPath>
+				${project.basedir}/libs/utils-3.0.6.jar</systemPath>
 		</dependency>
 
 		<dependency>
-			<groupId>cfca.sadk</groupId>
+			<groupId>
+				cfca.sadk</groupId>
 			<artifactId>cfca.sadk</artifactId>
 			<version>1.0.0</version>
 			<scope>system</scope>
-			<systemPath>${project.basedir}/libs/SADK-3.2.5.2.jar</systemPath>
+			<systemPath>
+				${project.basedir}/libs/SADK-3.2.5.2.jar</systemPath>
 		</dependency>
 
 		<dependency>
-			<groupId>com.huifu.adapay.core</groupId>
+			<groupId>com.yeepay.yop</groupId>
+			<artifactId>yop-java-sdk</artifactId>
+			<version>3.2.25-jdk18json</version>
+			<scope>system</scope>
+			<systemPath>
+				${project.basedir}/libs/yop-java-sdk-3.2.25-jdk18json.jar</systemPath>
+		</dependency>
+
+		<dependency>
+			<groupId>
+				com.huifu.adapay.core</groupId>
 			<artifactId>adapay-core-sdk</artifactId>
-			<version>1.2.10</version>
+			<version>
+				1.2.10</version>
 		</dependency>
 	
 		<!-- https://mvnrepository.com/artifact/com.huifu.adapay/adapay-java-sdk -->
 		<dependency>
 			<groupId>com.huifu.adapay</groupId>
-			<artifactId>adapay-java-sdk</artifactId>
+			<artifactId>
+				adapay-java-sdk</artifactId>
 			<version>1.2.10</version>
 		</dependency>
 		
 		<dependency>
-		    <groupId>org.apache.commons</groupId>
+		    <groupId>
+				org.apache.commons</groupId>
 		    <artifactId>commons-email</artifactId>
 		    <version>1.5</version>
 		</dependency>
 
 		<dependency>
-			<groupId>org.springframework.cloud</groupId>
-			<artifactId>spring-cloud-starter-openfeign</artifactId>
+			<groupId>
+				org.springframework.cloud</groupId>
+			<artifactId>
+				spring-cloud-starter-openfeign</artifactId>
 		</dependency>
 		<!-- https://mvnrepository.com/artifact/io.github.openfeign.form/feign-form-spring -->
 		<dependency>
-			<groupId>io.github.openfeign.form</groupId>
+			<groupId>
+				io.github.openfeign.form</groupId>
 			<artifactId>feign-form-spring</artifactId>
-			<version>2.0.5</version>
+			<version>
+				2.0.5</version>
 		</dependency>
 		<!-- https://mvnrepository.com/artifact/io.github.openfeign.form/feign-form-spring -->
 		<dependency>
 			<groupId>io.github.openfeign.form</groupId>
-			<artifactId>feign-form-spring</artifactId>
+			<artifactId>
+				feign-form-spring</artifactId>
 			<version>2.0.5</version>
 		</dependency>
         
 		<dependency>
-			<groupId>com.ksyun</groupId>
+			<groupId>
+				com.ksyun</groupId>
 			<artifactId>ks3-kss-java-sdk</artifactId>
 			<version>0.8.14</version>
 		</dependency>
+
+		<dependency>
+			<groupId>com.alipay.sdk</groupId>
+			<artifactId>alipay-sdk-java</artifactId>
+			<version>4.35.154.ALL</version>
+		</dependency>
 	</dependencies>
 
 </project>

+ 1 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/Payment.java

@@ -136,6 +136,7 @@ public class Payment {
         paymentParams.put("orderSubject", orderSubject);
         paymentParams.put("orderBody", orderBody);
         paymentParams.put("wxAppId", hfMerchantConfig.getWxAppId());
+        paymentParams.put("alipayAppId", hfMerchantConfig.getAlipayAppId());
 
         String originalStr = JSONObject.toJSONString(paymentParams);
         String sign = DigestUtils.md5DigestAsHex(originalStr.getBytes());

+ 40 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/entity/HfMerchantConfig.java

@@ -10,6 +10,8 @@ public class HfMerchantConfig {
 	/**  */
 	private Integer id;
 	
+	private String payerName;
+	
 	private String appId;
 	
 	/**  */
@@ -34,6 +36,12 @@ public class HfMerchantConfig {
 	
 	private String wxAppSecret;
 	
+	private String alipayAppId;
+	
+	private String alipayPrivateKey;
+	
+	private String alipayPublicKey;
+	
 	private String platformPayeeMemberId;
 	
 	/**  */
@@ -53,6 +61,14 @@ public class HfMerchantConfig {
 		return this.id;
 	}
 			
+	public String getPayerName() {
+		return payerName;
+	}
+
+	public void setPayerName(String payerName) {
+		this.payerName = payerName;
+	}
+
 	public String getAppId() {
 		return appId;
 	}
@@ -125,6 +141,30 @@ public class HfMerchantConfig {
 		this.wxAppSecret = wxAppSecret;
 	}
 
+	public String getAlipayAppId() {
+		return alipayAppId;
+	}
+
+	public void setAlipayAppId(String alipayAppId) {
+		this.alipayAppId = alipayAppId;
+	}
+
+	public String getAlipayPrivateKey() {
+		return alipayPrivateKey;
+	}
+
+	public void setAlipayPrivateKey(String alipayPrivateKey) {
+		this.alipayPrivateKey = alipayPrivateKey;
+	}
+
+	public String getAlipayPublicKey() {
+		return alipayPublicKey;
+	}
+
+	public void setAlipayPublicKey(String alipayPublicKey) {
+		this.alipayPublicKey = alipayPublicKey;
+	}
+
 	public String getPlatformPayeeMemberId() {
 		return platformPayeeMemberId;
 	}

+ 2 - 2
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/eseal/provider/TsignPlugin.java

@@ -63,12 +63,12 @@ public class TsignPlugin implements ESealPlugin, InitializingBean, DisposableBea
         projectconfig.setItsmApiUrl(apisUrl);
         Result result = ServiceClientManager.registClient(projectconfig, null, null);
         if (result.getErrCode() != 0) {
-            throw new ThirdpartyException("e签宝客户端注册失败:{}", result.getMsg());
+            //throw new ThirdpartyException("e签宝客户端注册失败:{}", result.getMsg());
         }
 
         serviceClient = ServiceClientManager.get(projectId);
         if (serviceClient == null) {
-            throw new ThirdpartyException("获取e签宝客户端失败");
+            //throw new ThirdpartyException("获取e签宝客户端失败");
         }
     }
 

+ 106 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/YeepayMerchantService.java

@@ -0,0 +1,106 @@
+package com.ym.mec.thirdparty.yeepay;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.yeepay.g3.sdk.yop.client.YopRequest;
+import com.yeepay.g3.sdk.yop.client.YopResponse;
+import com.yeepay.g3.sdk.yop.client.YopRsaClient;
+import com.yeepay.g3.sdk.yop.exception.YopClientException;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
+import com.ym.mec.thirdparty.yeepay.entity.MerchantInfo;
+
+@Service
+public class YeepayMerchantService {
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(YeepayMerchantService.class);
+
+	public JSONObject registerQueryV2(HfMerchantConfig hfMerchantConfig, String requestNo) throws IOException {
+
+		YopRequest request = new YopRequest(hfMerchantConfig.getAppId(), hfMerchantConfig.getRsaPrivateKey());
+
+		request.addParam("requestNo", requestNo);
+
+		YopResponse response = YopRsaClient.get("/rest/v2.0/mer/register/query", request);
+
+		LOGGER.info("易宝[商户入网查询][{}] resp:{}", requestNo, response.getStringResult());
+
+		JSONObject jsonObject = JSONObject.parseObject(response.getStringResult());
+
+		return jsonObject;
+	}
+
+	public Map<String, Object> registerSaasMerchantV2(HfMerchantConfig hfMerchantConfig, MerchantInfo merchantInfo, String notifyURL) throws IOException {
+
+		YopRequest request = new YopRequest(hfMerchantConfig.getAppId(), hfMerchantConfig.getRsaPrivateKey());
+
+		request.addParam("requestNo", System.currentTimeMillis() + "");
+		request.addParam("businessRole", "SHARE_MERCHANT");
+		request.addParam("parentMerchantNo", hfMerchantConfig.getPlatformPayeeMemberId());
+
+		Map<String, String> merchantSubjectInfoMap = new HashMap<String, String>();
+		merchantSubjectInfoMap.put("licenceUrl", merchantInfo.getLicenceUrl());
+		merchantSubjectInfoMap.put("signName", merchantInfo.getMerchantName());
+		merchantSubjectInfoMap.put("signType", "ENTERPRISE");
+		merchantSubjectInfoMap.put("licenceNo", merchantInfo.getLicenceNo());
+		merchantSubjectInfoMap.put("shortName", merchantInfo.getMerchantName());
+		merchantSubjectInfoMap.put("openAccountLicenceUrl", merchantInfo.getOpenAccountLicenceUrl());
+		request.addParam("merchantSubjectInfo", JSONObject.toJSONString(merchantSubjectInfoMap));
+
+		Map<String, String> merchantCorporationInfoMap = new HashMap<String, String>();
+		merchantCorporationInfoMap.put("legalName", merchantInfo.getLegalName());
+		merchantCorporationInfoMap.put("legalLicenceType", merchantInfo.getLegalLicenceType());
+		merchantCorporationInfoMap.put("legalLicenceNo", merchantInfo.getLegalLicenceNo());
+		merchantCorporationInfoMap.put("legalLicenceFrontUrl", merchantInfo.getLegalLicenceFrontUrl());
+		merchantCorporationInfoMap.put("legalLicenceBackUrl", merchantInfo.getLegalLicenceBackUrl());
+		request.addParam("merchantCorporationInfo", JSONObject.toJSONString(merchantCorporationInfoMap));
+
+		Map<String, String> merchantContactInfoMap = new HashMap<String, String>();
+		merchantContactInfoMap.put("contactName", merchantInfo.getContactName());
+		merchantContactInfoMap.put("contactLicenceNo", merchantInfo.getContactLicenceNo());
+		merchantContactInfoMap.put("contactMobile", merchantInfo.getContactMobile());
+		merchantContactInfoMap.put("contactEmail", merchantInfo.getContactEmail());
+		request.addParam("merchantContactInfo", JSONObject.toJSONString(merchantContactInfoMap));
+
+		request.addParam("industryCategoryInfo", "{ \"primaryIndustryCategory\":\"120\", \"secondaryIndustryCategory\":\"120004\" }");
+
+		Map<String, String> businessAddressInfoMap = new HashMap<String, String>();
+		businessAddressInfoMap.put("province", merchantInfo.getProvinceCode());
+		businessAddressInfoMap.put("city", merchantInfo.getCityCode());
+		businessAddressInfoMap.put("district", merchantInfo.getDistrictCode());
+		businessAddressInfoMap.put("address", merchantInfo.getAddress());
+		request.addParam("businessAddressInfo", JSONObject.toJSONString(businessAddressInfoMap));
+
+		Map<String, String> settlementAccountInfoMap = new HashMap<String, String>();
+		settlementAccountInfoMap.put("settlementDirection", "BANKCARD");
+		settlementAccountInfoMap.put("bankCode", merchantInfo.getBankCode());
+		settlementAccountInfoMap.put("bankAccountType", merchantInfo.getBankAccountType());
+		settlementAccountInfoMap.put("bankCardNo", merchantInfo.getBankCardNo());
+		request.addParam("settlementAccountInfo", JSONObject.toJSONString(settlementAccountInfoMap));
+
+		request.addParam("notifyUrl", notifyURL);
+		request.addParam("productInfo", "[{\"productCode\":\"D1\",\"rateType\":\"SINGLE_FIXED\",\"fixedRate\":\"0\",\"paymentMethod\":\"REAL_TIME\"}]");
+
+
+		LOGGER.info("易宝[商户入网] req:{}", request);
+		
+		YopResponse response = YopRsaClient.post("/rest/v2.0/mer/register/saas/merchant", request);
+
+		LOGGER.info("易宝[商户入网] resp:{}", response.getStringResult());
+
+		JSONObject jsonObject = JSONObject.parseObject(response.getStringResult());
+
+		return jsonObject;
+	}
+
+	public void merchantInfoModify(String merchantNo, MerchantInfo merchantInfo, String notifyURL) throws YopClientException {
+
+	}
+
+}

+ 106 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/YeepayPaymentService.java

@@ -0,0 +1,106 @@
+package com.ym.mec.thirdparty.yeepay;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.yeepay.g3.sdk.yop.client.YopRequest;
+import com.yeepay.g3.sdk.yop.client.YopResponse;
+import com.yeepay.g3.sdk.yop.client.YopRsaClient;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
+import com.ym.mec.thirdparty.exception.ThirdpartyException;
+import com.ym.mec.util.date.DateUtil;
+
+@Service
+public class YeepayPaymentService {
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(YeepayPaymentService.class);
+
+	public Map<String, Object> prePay(HfMerchantConfig hfMerchantConfig, Map<String, Object> params) throws IOException {
+
+		String reqJson = JSON.toJSONString(params);
+		LOGGER.info("易宝[创建支付对象] Req:{}", reqJson);
+		
+		YopRequest request = new YopRequest(hfMerchantConfig.getAppId(), hfMerchantConfig.getRsaPrivateKey());
+		request.addParam("parentMerchantNo", params.get("parentMerchantNo"));
+		request.addParam("merchantNo", params.get("merchantNo"));
+		request.addParam("orderId", params.get("orderId"));
+		request.addParam("orderAmount", params.get("orderAmount"));
+		request.addParam("expiredTime", DateUtil.addMinutes(new Date(), 30));
+		request.addParam("notifyUrl", params.get("notifyUrl"));
+		request.addParam("redirectUrl", params.get("redirectUrl"));
+		request.addParam("scene", params.get("scene"));
+		request.addParam("goodsName", params.get("goodsName"));
+		request.addParam("fundProcessType", params.get("fundProcessType"));
+		request.addParam("channel", params.get("channel"));
+		request.addParam("payWay", params.get("payWay"));
+		request.addParam("appId", params.get("appId"));
+		request.addParam("userId", params.get("userId"));
+		request.addParam("userIp", params.get("userIp"));
+		
+		YopResponse response = YopRsaClient.post("/rest/v1.0/aggpay/pre-pay", request);
+
+		LOGGER.info("易宝[创建支付对象] Resp:{}", response.getStringResult());
+		
+		JSONObject jsonObject = JSONObject.parseObject(response.getStringResult());
+
+		return jsonObject;
+	}
+
+	public Map<String, Object> queryOrder(HfMerchantConfig hfMerchantConfig,String merchantNo,  String orderNo) throws IOException {
+		
+		YopRequest request = new YopRequest(hfMerchantConfig.getAppId(), hfMerchantConfig.getRsaPrivateKey());
+		request.addParam("parentMerchantNo", hfMerchantConfig.getPlatformPayeeMemberId());
+		request.addParam("merchantNo", merchantNo);
+		request.addParam("orderId", orderNo);
+		
+		YopResponse response = YopRsaClient.get("/rest/v1.0/trade/order/query", request);
+		
+		if("FAILURE".equals(response.getState())) {
+			throw new ThirdpartyException(response.getError().getSubMessage());
+		}
+
+		LOGGER.info("易宝[订单查询][{}] Resp:{}", orderNo, response.getStringResult());
+		
+		JSONObject jsonObject = JSONObject.parseObject(response.getStringResult());
+		
+		if("OPR00000".equals(jsonObject.get("code").toString())) {
+
+			return jsonObject;
+    	}else if("OPR12002".equals(jsonObject.get("code").toString())) {
+    		//订单不存在
+    		jsonObject.put("status", "CLOSE");
+    		return jsonObject;
+    	}
+        throw new ThirdpartyException(jsonObject.get("message").toString());
+		
+	}
+
+	public Map<String,Object> divide(HfMerchantConfig hfMerchantConfig, Map<String, Object> params) throws IOException {
+		
+		String reqJson = JSON.toJSONString(params);
+		LOGGER.info("易宝[分账][{}] Req:{}", params.get("orderId"), reqJson);
+		
+		YopRequest request = new YopRequest(hfMerchantConfig.getAppId(), hfMerchantConfig.getRsaPrivateKey());
+		request.addParam("parentMerchantNo", params.get("parentMerchantNo"));
+		request.addParam("merchantNo", params.get("merchantNo"));
+		request.addParam("orderId", params.get("orderId"));
+		request.addParam("uniqueOrderNo", params.get("uniqueOrderNo"));
+		request.addParam("divideRequestId", params.get("divideRequestId"));
+		request.addParam("divideDetail", params.get("divideDetail"));
+		
+		YopResponse response = YopRsaClient.post("/rest/v1.0/divide/apply", request);
+
+		LOGGER.info("易宝[分账][{}] Resp:{}", params.get("orderId"), response.getStringResult());
+		
+		JSONObject jsonObject = JSONObject.parseObject(response.getStringResult());
+		
+		return jsonObject;
+	}
+}

+ 41 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/YeepayUploadService.java

@@ -0,0 +1,41 @@
+package com.ym.mec.thirdparty.yeepay;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.yeepay.g3.sdk.yop.client.YopRequest;
+import com.yeepay.g3.sdk.yop.client.YopResponse;
+import com.yeepay.g3.sdk.yop.client.YopRsaClient;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
+
+@Service
+public class YeepayUploadService {
+	
+	private static final Logger LOGGER = LoggerFactory.getLogger(YeepayUploadService.class);
+
+	public String upload(HfMerchantConfig hfMerchantConfig, File file) {
+		
+		YopRequest request = new YopRequest(hfMerchantConfig.getAppId(), hfMerchantConfig.getRsaPrivateKey());
+		
+		request.addFile("merQual", file);
+		try {
+			YopResponse response = YopRsaClient.upload("/yos/v1.0/sys/merchant/qual/upload", request);
+			
+			LOGGER.info("易宝上传接口 resp:{}", response.getStringResult());
+			
+			JSONObject jsonObject = JSONObject.parseObject(response.getStringResult());
+			
+			return jsonObject.getString("merQualUrl");
+		} catch (IOException e) {
+			LOGGER.error("Exception when calling SysClient#merchantQualUpload, ex:", e);
+		}
+        
+        return null;
+		
+	}
+}

+ 260 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/entity/MerchantInfo.java

@@ -0,0 +1,260 @@
+package com.ym.mec.thirdparty.yeepay.entity;
+
+public class MerchantInfo {
+	
+	private String requestNo;
+
+	//-----企业信息
+	private String merchantName; //企业名称
+	
+	private String licenceNo; //商户证件编号
+	
+	private String licenceUrl; //商户证件照片
+	
+	private String openAccountLicenceUrl; //开户许可证照片
+	
+	private String provinceCode; //商户实际经营地所在省
+	
+	private String cityCode; //商户实际经营地所在市
+	
+	private String districtCode; //商户实际经营地所在区
+	
+	private String address; //商户实际经营详细地址
+	
+	//-----法人信息
+	private String legalName; //法人姓名
+	
+	private String legalLicenceType; //法人证件类型 ID_CARD(法人身份证)PASSPORT(护照) HM_VISITORPASS(港澳居民往来内地通行证)
+	
+	private String legalLicenceNo; //法人证件号码
+	
+	private String mobile; //
+	
+	private String legalLicenceFrontUrl; //法人证件人像面照片 请上传带有人像面的法人证件照片
+	
+	private String legalLicenceBackUrl; //法人证件非人像面照片
+	
+	//-----联系人信息
+	private String contactName; // 商户联系人姓名
+	
+	private String contactMobile; //商户联系人手机号	
+	
+	private String contactEmail; //商户联系人邮箱
+	
+	private String contactLicenceNo; //商户联系人证件号码
+	
+	//-----行业分类
+	private String primaryIndustryCategory; //一级行业分类编码
+	
+	private String secondaryIndustryCategory; //二级行业分类编码
+	
+	//-----结算账户信息
+	private String settlementDirection; //结算方向	ACCOUNT(结算到支付账户)   BANKCARD(结算到银行账户)
+	
+	private String bankAccountType; //银行账户类型
+	
+	private String bankCardNo; //银行账户号码 UNIT_SETTLEMENT_CARD(单位结算卡) ENTERPRISE_ACCOUNT(对公账户)  DEBIT_CARD(借记卡)   PASSBOOK(存折)
+	
+	private String bankCode; //银行账户开户总行编码
+
+	public String getRequestNo() {
+		return requestNo;
+	}
+
+	public void setRequestNo(String requestNo) {
+		this.requestNo = requestNo;
+	}
+
+	public String getMerchantName() {
+		return merchantName;
+	}
+
+	public void setMerchantName(String merchantName) {
+		this.merchantName = merchantName;
+	}
+
+	public String getLicenceNo() {
+		return licenceNo;
+	}
+
+	public void setLicenceNo(String licenceNo) {
+		this.licenceNo = licenceNo;
+	}
+
+	public String getLicenceUrl() {
+		return licenceUrl;
+	}
+
+	public void setLicenceUrl(String licenceUrl) {
+		this.licenceUrl = licenceUrl;
+	}
+
+	public String getOpenAccountLicenceUrl() {
+		return openAccountLicenceUrl;
+	}
+
+	public void setOpenAccountLicenceUrl(String openAccountLicenceUrl) {
+		this.openAccountLicenceUrl = openAccountLicenceUrl;
+	}
+
+	public String getProvinceCode() {
+		return provinceCode;
+	}
+
+	public void setProvinceCode(String provinceCode) {
+		this.provinceCode = provinceCode;
+	}
+
+	public String getCityCode() {
+		return cityCode;
+	}
+
+	public void setCityCode(String cityCode) {
+		this.cityCode = cityCode;
+	}
+
+	public String getDistrictCode() {
+		return districtCode;
+	}
+
+	public void setDistrictCode(String districtCode) {
+		this.districtCode = districtCode;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public String getLegalName() {
+		return legalName;
+	}
+
+	public void setLegalName(String legalName) {
+		this.legalName = legalName;
+	}
+
+	public String getLegalLicenceType() {
+		return legalLicenceType;
+	}
+
+	public void setLegalLicenceType(String legalLicenceType) {
+		this.legalLicenceType = legalLicenceType;
+	}
+
+	public String getLegalLicenceNo() {
+		return legalLicenceNo;
+	}
+
+	public void setLegalLicenceNo(String legalLicenceNo) {
+		this.legalLicenceNo = legalLicenceNo;
+	}
+
+	public String getMobile() {
+		return mobile;
+	}
+
+	public void setMobile(String mobile) {
+		this.mobile = mobile;
+	}
+
+	public String getLegalLicenceFrontUrl() {
+		return legalLicenceFrontUrl;
+	}
+
+	public void setLegalLicenceFrontUrl(String legalLicenceFrontUrl) {
+		this.legalLicenceFrontUrl = legalLicenceFrontUrl;
+	}
+
+	public String getLegalLicenceBackUrl() {
+		return legalLicenceBackUrl;
+	}
+
+	public void setLegalLicenceBackUrl(String legalLicenceBackUrl) {
+		this.legalLicenceBackUrl = legalLicenceBackUrl;
+	}
+
+	public String getContactName() {
+		return contactName;
+	}
+
+	public void setContactName(String contactName) {
+		this.contactName = contactName;
+	}
+
+	public String getContactMobile() {
+		return contactMobile;
+	}
+
+	public void setContactMobile(String contactMobile) {
+		this.contactMobile = contactMobile;
+	}
+
+	public String getContactEmail() {
+		return contactEmail;
+	}
+
+	public void setContactEmail(String contactEmail) {
+		this.contactEmail = contactEmail;
+	}
+
+	public String getContactLicenceNo() {
+		return contactLicenceNo;
+	}
+
+	public void setContactLicenceNo(String contactLicenceNo) {
+		this.contactLicenceNo = contactLicenceNo;
+	}
+
+	public String getPrimaryIndustryCategory() {
+		return primaryIndustryCategory;
+	}
+
+	public void setPrimaryIndustryCategory(String primaryIndustryCategory) {
+		this.primaryIndustryCategory = primaryIndustryCategory;
+	}
+
+	public String getSecondaryIndustryCategory() {
+		return secondaryIndustryCategory;
+	}
+
+	public void setSecondaryIndustryCategory(String secondaryIndustryCategory) {
+		this.secondaryIndustryCategory = secondaryIndustryCategory;
+	}
+
+	public String getSettlementDirection() {
+		return settlementDirection;
+	}
+
+	public void setSettlementDirection(String settlementDirection) {
+		this.settlementDirection = settlementDirection;
+	}
+
+	public String getBankAccountType() {
+		return bankAccountType;
+	}
+
+	public void setBankAccountType(String bankAccountType) {
+		this.bankAccountType = bankAccountType;
+	}
+
+	public String getBankCardNo() {
+		return bankCardNo;
+	}
+
+	public void setBankCardNo(String bankCardNo) {
+		this.bankCardNo = bankCardNo;
+	}
+
+	public String getBankCode() {
+		return bankCode;
+	}
+
+	public void setBankCode(String bankCode) {
+		this.bankCode = bankCode;
+	}
+	
+}

+ 8 - 0
mec-web/src/main/java/com/ym/mec/web/controller/AppVersionInfoController.java

@@ -1,5 +1,7 @@
 package com.ym.mec.web.controller;
 
+import com.alibaba.fastjson.JSONObject;
+import com.ym.mec.biz.dal.entity.AppVersionInfoBak;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
@@ -42,6 +44,12 @@ public class AppVersionInfoController extends BaseController {
 	public Object queryByPlatform(String platform) {
 		List<AppVersionInfo> list = appVersionInfoService.queryNewestByPlatform(platform);
 		if (list.size() > 0) {
+			AppVersionInfo appVersionInfo = list.get(0);
+			if(appVersionInfo.getVersion().equals("2.0.9") && appVersionInfo.getPlatform().equals("android-education")){
+				AppVersionInfoBak appVersionInfoBak = JSONObject.parseObject(JSONObject.toJSONString(appVersionInfo),AppVersionInfoBak.class);
+				appVersionInfoBak.setDownloadUrl(new String(appVersionInfo.getDownloadUrl()));
+				return succeed(appVersionInfoBak);
+			}
 			return succeed(list.get(0));
 		}
 		return failed();

+ 4 - 18
mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java

@@ -190,24 +190,10 @@ public class CourseScheduleController extends BaseController {
                     &&!VipGroupStatusEnum.FINISHED.equals(vipGroup.getStatus())){
                 throw new BizException("非进行中课程组不允许进行此操作");
             }
-
-            // 直播课
-            if (GroupType.LIVE.equals(oldCourseSchedule.getGroupType())){
-                if(org.apache.commons.lang3.StringUtils.isNotBlank(oldCourseSchedule.getLiveRoomId())){
-                    // 重置连堂课,关联直播间,消息推送状态
-                    courseSchedule.setLiveRemind(0);
-                    courseSchedule.setContinuousCourse(false);
-                    courseSchedule.setLiveRoomId("");
-                }
-                String startRemindTime = sysConfigDao.findConfigValue("live_class_start_remind_time");
-                if(StringUtils.isEmpty(startRemindTime)){
-                    startRemindTime = "30";
-                }
-                if(DateUtil.minutesBetween(new Date(),oldCourseSchedule.getStartClassTime()) < Integer.parseInt(startRemindTime)
-                 && DateUtil.minutesBetween(new Date(),oldCourseSchedule.getEndClassTime()) >= 0){
-                    throw new BizException("直播课课程开始前{}分钟不允许调整",startRemindTime);
-                }
-            }
+            //校验调整时间
+            courseScheduleService.checkLiveAdjust(oldCourseSchedule,null);
+            //重置连堂课标记
+            courseScheduleService.resetLiveRemind(courseSchedule);
         }
         if(Objects.isNull(courseSchedule.getClassGroupId())){
             courseSchedule.setClassGroupId(oldCourseSchedule.getClassGroupId());

+ 3 - 3
mec-web/src/main/java/com/ym/mec/web/controller/HfMerchantConfigController.java

@@ -68,9 +68,9 @@ public class HfMerchantConfigController extends BaseController {
     }
 
     @ApiOperation("根据机构id查询汇付商户配置")
-    @GetMapping(value = "/queryByTenantId/{id}")
-    public HttpResponseResult<HfMerchantConfig> queryByTenantId(@ApiParam(value = "机构ID", required = true) @PathVariable("id") Integer id) {
-        return succeed(hfMerchantConfigService.queryByTenantId(id));
+    @GetMapping(value = "/queryByTenantId/{payerName}/{id}")
+    public HttpResponseResult<HfMerchantConfig> queryByTenantId(@PathVariable("payerName") String payerName, @ApiParam(value = "机构ID", required = true) @PathVariable("id") Integer id) {
+        return succeed(hfMerchantConfigService.queryByTenantId(id, payerName));
     }
 
     @ApiOperation("分页查询汇付商户配置")

+ 21 - 10
mec-web/src/main/java/com/ym/mec/web/controller/StudentPaymentOrderController.java

@@ -1,5 +1,17 @@
 package com.ym.mec.web.controller;
 
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
 import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.BasicUserDto;
@@ -13,20 +25,11 @@ import com.ym.mec.biz.service.StudentPaymentOrderService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.PageInfo;
+
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.math.BigDecimal;
-import java.util.List;
-import java.util.stream.Collectors;
 
 @RequestMapping("order")
 @Api(tags = "订单服务")
@@ -160,4 +163,12 @@ public class StudentPaymentOrderController extends BaseController {
     public Object queryOrderDetail(Long orderId){
         return studentPaymentOrderDetailService.queryOrderDetail(orderId);
     }
+
+    @ApiOperation(value = "分账")
+    @PostMapping("/divideAmount")
+    @PreAuthorize("@pcs.hasPermissions('order/divideAmount')")
+    public Object divideAmount(Long orderId){
+    	StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.get(orderId);
+        return studentPaymentOrderService.confirmOrder(studentPaymentOrder);
+    }
 }

+ 0 - 7
mec-web/src/main/java/com/ym/mec/web/controller/SysPaymentConfigController.java

@@ -48,12 +48,6 @@ public class SysPaymentConfigController extends BaseController {
         if (paymentConfig != null) {
             return failed("此分部配置已经存在");
         }
-        if(StringUtils.isNotBlank(sysPaymentConfig.getHfMerNo())){
-            SysPaymentConfig nowConfig = sysPaymentConfigService.findPaymentConfigByMerNo(sysPaymentConfig.getHfMerNo());
-            if(nowConfig != null){
-                return failed("汇付商户号已配置,不同分部请勿配置相同商户号");
-            }
-        }
 
         Date nowDate = new Date();
         sysPaymentConfig.setCreateTime(nowDate);
@@ -135,7 +129,6 @@ public class SysPaymentConfigController extends BaseController {
             paymentConfig.setUpdateTime(nowDate);
             sysPaymentConfigService.update(paymentConfig);
         } else {
-            config.setPayType(PaymentChannelEnum.ADAPAY);
             config.setType(2);
             config.setCreateTime(nowDate);
             config.setUpdateTime(nowDate);

+ 11 - 3
mec-web/src/main/java/com/ym/mec/web/controller/AdapayController.java → mec-web/src/main/java/com/ym/mec/web/controller/payment/AdapayController.java

@@ -1,4 +1,4 @@
-package com.ym.mec.web.controller;
+package com.ym.mec.web.controller.payment;
 
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -34,6 +34,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.huifu.adapay.core.AdapayCore;
 import com.huifu.adapay.core.util.AdapaySign;
 import com.ym.mec.biz.dal.entity.HfMember;
+import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.dal.page.HfMemberQueryInfo;
 import com.ym.mec.biz.service.HfMemberService;
 import com.ym.mec.biz.service.HfMerchantConfigService;
@@ -67,6 +68,7 @@ public class AdapayController extends BaseController {
     @GetMapping("/queryPage")
     @PreAuthorize("@pcs.hasPermissions('adapay/queryPage')")
     public HttpResponseResult<PageInfo<HfMember>> queryPage(HfMemberQueryInfo queryInfo) {
+    	queryInfo.setPayerName(PaymentChannelEnum.ADAPAY.getCode());
         return succeed(hfMemberService.queryPage(queryInfo));
     }
 
@@ -87,7 +89,7 @@ public class AdapayController extends BaseController {
 			
 			String memberId = dataObj.getString("member_id");
 			
-			HfMember hfMember = hfMemberService.getByMemberId(memberId);
+			HfMember hfMember = hfMemberService.getByMemberId(memberId, PaymentChannelEnum.ADAPAY.getCode());
 			if(hfMember == null){
 				return "账户["+ memberId +"]在系统中不存在";
 			}
@@ -144,6 +146,9 @@ public class AdapayController extends BaseController {
         if (member.getMultipartFile().isEmpty()) {
             return failed("证件压缩文件必传");
         }
+        
+        member.setPayerName(PaymentChannelEnum.ADAPAY.getCode());
+        
         File file = new File("/var/tmp/" + member.getMultipartFile().getOriginalFilename());
         InputStream inputStream = member.getMultipartFile().getInputStream();
 
@@ -172,6 +177,9 @@ public class AdapayController extends BaseController {
         if (member.getMultipartFile().isEmpty()) {
             return failed("证件压缩文件必传");
         }
+        
+        member.setPayerName(PaymentChannelEnum.ADAPAY.getCode());
+        
         File file = new File("/var/tmp/" + member.getMultipartFile().getOriginalFilename());
         InputStream inputStream = member.getMultipartFile().getInputStream();
 
@@ -213,7 +221,7 @@ public class AdapayController extends BaseController {
         int pageIndex = 1;
         List<Map<String, Object>> data = new ArrayList<>();
         while (profiles.equals("prod")) {
-        	HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(TenantContextHolder.getTenantId());
+        	HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(TenantContextHolder.getTenantId(), PaymentChannelEnum.ADAPAY.getCode());
             if(hfMerchantConfig == null){
             	throw new BizException("机构[{}]汇付商户信息找不到", TenantContextHolder.getTenantId());
             }

+ 181 - 0
mec-web/src/main/java/com/ym/mec/web/controller/payment/YeepayController.java

@@ -0,0 +1,181 @@
+package com.ym.mec.web.controller.payment;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.security.PrivateKey;
+import java.security.PublicKey;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.yeepay.g3.sdk.yop.encrypt.DigitalEnvelopeDTO;
+import com.yeepay.g3.sdk.yop.utils.DigitalEnvelopeUtils;
+import com.yeepay.g3.sdk.yop.utils.RSAKeyUtils;
+import com.ym.mec.biz.dal.dto.YeepayMember;
+import com.ym.mec.biz.dal.entity.HfMember;
+import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
+import com.ym.mec.biz.dal.page.HfMemberQueryInfo;
+import com.ym.mec.biz.service.HfMemberService;
+import com.ym.mec.biz.service.HfMerchantConfigService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.tenant.TenantContextHolder;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
+import com.ym.mec.thirdparty.yeepay.YeepayMerchantService;
+import com.ym.mec.thirdparty.yeepay.YeepayUploadService;
+import com.ym.mec.thirdparty.yeepay.entity.MerchantInfo;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+@RequestMapping("yeepay")
+@Api(tags = "易宝支付服务")
+@RestController
+public class YeepayController extends BaseController {
+    private static final Logger logger = LoggerFactory.getLogger(YeepayController.class);
+
+    @Autowired
+    private HfMemberService hfMemberService;
+    
+    @Autowired
+    private HfMerchantConfigService hfMerchantConfigService;
+    
+    @Autowired
+    private YeepayUploadService yeepayUploadService;
+    
+    @Autowired
+    private YeepayMerchantService yeepayMerchantService;
+
+    @Value("${spring.profiles.active:dev}")
+    private String profiles;
+
+    @ApiOperation(value = "企业用户列表")
+    @GetMapping("/queryPage")
+    @PreAuthorize("@pcs.hasPermissions('yeepay/queryPage')")
+    public HttpResponseResult<PageInfo<HfMember>> queryPage(HfMemberQueryInfo queryInfo) {
+    	
+    	queryInfo.setPayerName(PaymentChannelEnum.YEEPAY.getCode());
+        return succeed(hfMemberService.queryPage(queryInfo));
+    }
+
+    @ApiOperation(value = "企业用户注册查询")
+    @GetMapping("/registerQuery")
+    @PreAuthorize("@pcs.hasPermissions('yeepay/registerQuery')")
+    public HttpResponseResult<JSONObject> registerQuery(String requestNo) throws IOException {
+		
+		HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(TenantContextHolder.getTenantId(), PaymentChannelEnum.YEEPAY.getCode());
+        if(hfMerchantConfig == null){
+        	throw new BizException("机构[{}][{}]商户信息找不到", TenantContextHolder.getTenantId(), PaymentChannelEnum.YEEPAY.getCode());
+        }
+        
+        return succeed(yeepayMerchantService.registerQueryV2(hfMerchantConfig, requestNo));
+    }
+
+    @ApiOperation("新建企业用户")
+    @PostMapping(value = "addSubMerchant")
+    @PreAuthorize("@pcs.hasPermissions('yeepay/addSubMerchant')")
+    public HttpResponseResult<Boolean> addSubMerchant(YeepayMember member) throws Exception {
+		/*
+		 * if (!profiles.equals("prod")) { return failed("仅生产环境可用"); }
+		 */
+        
+        member.setPayerName(PaymentChannelEnum.YEEPAY.getCode());
+        
+        return succeed(hfMemberService.createMember(member, null));
+    }
+
+    @ApiOperation("修改企业用户(状态是failed才能修改)")
+    @PostMapping(value = "updateSubMerchant")
+    @PreAuthorize("@pcs.hasPermissions('yeepay/updateSubMerchant')")
+    public HttpResponseResult<Boolean> updateSubMerchant(MerchantInfo merchantInfo) throws Exception {
+
+    	return null;
+    }
+
+    @PostMapping("/callback/{tenantId}")
+	public String callback(@PathVariable("tenantId") Integer tenantId, HttpServletRequest request) {
+
+		HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId, PaymentChannelEnum.YEEPAY.getCode());
+        if(hfMerchantConfig == null){
+        	throw new BizException("机构[{}][{}]商户信息找不到", tenantId, PaymentChannelEnum.YEEPAY.getCode());
+        }
+        
+		try {
+			
+	        String content = IOUtils.toString(request.getInputStream(), StandardCharsets.UTF_8);
+			
+			JSONObject jsonObject = JSONObject.parseObject(content);
+			
+			// 构造结果通知请求对象
+			DigitalEnvelopeDTO dto = new DigitalEnvelopeDTO();
+			dto.setCipherText(jsonObject.getString("response"));
+			PrivateKey privateKey =RSAKeyUtils.string2PrivateKey(hfMerchantConfig.getRsaPrivateKey());
+			PublicKey publicKey = RSAKeyUtils.string2PublicKey(hfMerchantConfig.getRsaPublicKey());
+			
+			dto = DigitalEnvelopeUtils.decrypt(dto, privateKey, publicKey);
+			
+			logger.info("易宝支付回调信息:{}", dto.getPlainText());
+			
+			return "SUCCESS";
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return null;
+    }
+
+    @ApiOperation("修改企业用户(状态是failed才能修改)")
+    @PostMapping(value = "upload")
+    @PreAuthorize("@pcs.hasPermissions('yeepay/upload')")
+    public HttpResponseResult<String> upload(MultipartFile multipartFile) throws Exception {
+    	
+
+        File file = new File("/var/tmp/" + multipartFile.getOriginalFilename());
+        if (!file.getParentFile().exists()) {
+            file.getParentFile().mkdirs();
+        }
+        FileOutputStream fos = new FileOutputStream(file);
+        InputStream inputStream = multipartFile.getInputStream();
+
+        try {
+            IOUtils.copy(inputStream, fos);
+            inputStream.close();
+            fos.close();
+            
+            HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(TenantContextHolder.getTenantId(), PaymentChannelEnum.YEEPAY.getCode());
+            if(hfMerchantConfig == null){
+            	throw new BizException("请配置机构的易宝商户信息");
+            }
+        	
+            return succeed(yeepayUploadService.upload(hfMerchantConfig, file));
+        } catch (Exception e) {
+            return failed(e.getMessage());
+        } finally {
+        	IOUtils.closeQuietly(fos);
+            IOUtils.closeQuietly(inputStream);
+            FileUtils.deleteQuietly(file);
+        }
+
+    }
+
+}

+ 1 - 1
mec-web/src/main/resources/bootstrap-local.properties

@@ -3,7 +3,7 @@
 #\u670d\u52a1\u5668\u5730\u5740
 spring.cloud.nacos.config.server-addr=43.137.4.92:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
-spring.cloud.nacos.config.namespace=fcc00e52-a464-4ab8-96aa-3469b3f66062
+spring.cloud.nacos.config.namespace=d0699206-ca95-4404-a20d-420864a8029f
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e
 spring.cloud.nacos.config.group=DEFAULT_GROUP
 #\u6587\u4ef6\u540d -- \u5982\u679c\u6ca1\u6709\u914d\u7f6e\u5219\u9ed8\u8ba4\u4e3a ${spring.appliction.name}

+ 2 - 0
pom.xml

@@ -240,6 +240,7 @@
 	</dependencyManagement>
 
 	<repositories>
+
 		<repository>
 			<id>anigiomaven</id>
 			<name>AnigioMaven</name>
@@ -270,6 +271,7 @@
 				<enabled>false</enabled>
 			</releases>
 		</repository>
+
 	</repositories>
 
 	<pluginRepositories>

Some files were not shown because too many files changed in this diff